commit 67c1045167fb235c118db22b03f49bab0b638c92 Author: Mel Date: Fri Sep 24 16:02:33 2021 +0100 Initialisation Push all data to mfxm.fr diff --git a/.obsidian/app.json b/.obsidian/app.json new file mode 100644 index 00000000..73808785 --- /dev/null +++ b/.obsidian/app.json @@ -0,0 +1,4 @@ +{ + "alwaysUpdateLinks": true, + "newFileLocation": "current" +} \ No newline at end of file diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json new file mode 100644 index 00000000..54bce1b3 --- /dev/null +++ b/.obsidian/appearance.json @@ -0,0 +1,10 @@ +{ + "baseFontSize": 16, + "translucency": true, + "enabledCssSnippets": [ + "checkbox", + "realistic-highlight", + "inline-block-embeds", + "colour-blocks" + ] +} \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json new file mode 100644 index 00000000..1dbb5dee --- /dev/null +++ b/.obsidian/community-plugins.json @@ -0,0 +1,22 @@ +[ + "table-editor-obsidian", + "dataview", + "find-unlinked-files", + "obsidian-emoji-toolbar", + "templater-obsidian", + "obsidian-markdown-formatting-assistant-plugin", + "obsidian-metatable", + "metaedit", + "ledger-obsidian", + "buttons", + "quickadd", + "obsidian-timeline", + "obsidian-map-view", + "obsidian-citation-plugin", + "url-into-selection", + "obsidian-admonition", + "obsidian-dynamic-toc", + "obsidian-tasks-plugin", + "obsidian-dice-roller", + "music-code-blocks" +] \ No newline at end of file diff --git a/.obsidian/core-plugins.json b/.obsidian/core-plugins.json new file mode 100644 index 00000000..fbc36ed0 --- /dev/null +++ b/.obsidian/core-plugins.json @@ -0,0 +1,15 @@ +[ + "file-explorer", + "global-search", + "switcher", + "graph", + "backlink", + "page-preview", + "note-composer", + "command-palette", + "markdown-importer", + "word-count", + "audio-recorder", + "open-with-default-app", + "file-recovery" +] \ No newline at end of file diff --git a/.obsidian/graph.json b/.obsidian/graph.json new file mode 100644 index 00000000..7f088c2e --- /dev/null +++ b/.obsidian/graph.json @@ -0,0 +1,72 @@ +{ + "collapse-filter": true, + "search": "", + "showTags": false, + "showAttachments": false, + "hideUnresolved": false, + "showOrphans": true, + "collapse-color-groups": false, + "colorGroups": [ + { + "query": "line:(Hierarchy: \"Root\")", + "color": { + "a": 1, + "rgb": 14701138 + } + }, + { + "query": "line:(Hierarchy: \"Root2\")", + "color": { + "a": 1, + "rgb": 16744448 + } + }, + { + "query": "line:(DocType: \"Task\")", + "color": { + "a": 1, + "rgb": 11657298 + } + }, + { + "query": "line:(DocType: \"Product\")", + "color": { + "a": 1, + "rgb": 16711935 + } + }, + { + "query": "line:(DocType: \"Server\")", + "color": { + "a": 1, + "rgb": 10053171 + } + }, + { + "query": "line:(DocType: \"Source\")", + "color": { + "a": 1, + "rgb": 255 + } + }, + { + "query": "line:(DocType: \"Investment\")", + "color": { + "a": 1, + "rgb": 65535 + } + } + ], + "collapse-display": true, + "showArrow": true, + "textFadeMultiplier": 0, + "nodeSizeMultiplier": 1, + "lineSizeMultiplier": 1, + "collapse-forces": true, + "centerStrength": 0.518713248970312, + "repelStrength": 10, + "linkStrength": 1, + "linkDistance": 250, + "scale": 0.5566498064618942, + "close": true +} \ No newline at end of file diff --git a/.obsidian/hotkeys.json b/.obsidian/hotkeys.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.obsidian/hotkeys.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.obsidian/plugins/buttons/main.js b/.obsidian/plugins/buttons/main.js new file mode 100644 index 00000000..1e4f8d74 --- /dev/null +++ b/.obsidian/plugins/buttons/main.js @@ -0,0 +1,4119 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +let buttonStore; +const getStore = (isMobile) => isMobile ? buttonStore : JSON.parse(localStorage.getItem("buttons")); +const initializeButtonStore = (app, storeEvents) => { + const files = app.vault.getMarkdownFiles(); + const blocksArr = files + .map((file) => { + const cache = app.metadataCache.getFileCache(file); + return buildButtonArray(cache, file); + }) + .filter((arr) => arr !== undefined) + .flat(); + localStorage.setItem("buttons", JSON.stringify(blocksArr)); + buttonStore = blocksArr; + storeEvents.trigger('index-complete'); +}; +const addButtonToStore = (app, file) => { + const cache = app.metadataCache.getFileCache(file); + const buttons = buildButtonArray(cache, file); + const store = getStore(app.isMobile); + const newStore = buttons && store + ? removeDuplicates([...buttons, ...store]) + : store + ? removeDuplicates(store) + : buttons + ? removeDuplicates(buttons) + : []; + localStorage.setItem("buttons", JSON.stringify(newStore)); + buttonStore = newStore; +}; +const getButtonFromStore = async (app, args) => { + const store = getStore(app.isMobile); + args.id; + if (args.id) { + const storedButton = store && + store.filter((item) => `button-${args.id}` === item.id)[0]; + if (storedButton) { + const file = app.vault.getAbstractFileByPath(storedButton.path); + const content = await app.vault.cachedRead(file); + const contentArray = content.split("\n"); + const button = contentArray + .slice(storedButton.position.start.line + 1, storedButton.position.end.line) + .join("\n"); + const storedArgs = createArgumentObject(button); + return { + args: { ...storedArgs, ...args }, + id: storedButton.id.split("button-")[1], + }; + } + } +}; +const getButtonById = async (app, id) => { + const store = getStore(app.isMobile); + const storedButton = store.filter((item) => `button-${id}` === item.id)[0]; + if (storedButton) { + const file = app.vault.getAbstractFileByPath(storedButton.path); + const content = await app.vault.cachedRead(file); + const contentArray = content.split("\n"); + const button = contentArray + .slice(storedButton.position.start.line + 1, storedButton.position.end.line) + .join("\n"); + return createArgumentObject(button); + } +}; +const getButtonSwapById = async (app, id) => { + const store = getStore(app.isMobile); + const storedButton = store.filter((item) => `button-${id}` === item.id)[0]; + if (storedButton) { + return storedButton.swap; + } +}; +const setButtonSwapById = async (app, id, newSwap) => { + const store = getStore(app.isMobile); + const storedButton = store.filter((item) => `button-${id}` === item.id)[0]; + if (storedButton) { + storedButton.swap = newSwap; + const newStore = removeDuplicates([...store, storedButton]); + localStorage.setItem("buttons", JSON.stringify(newStore)); + buttonStore = newStore; + } +}; +const buildButtonArray = (cache, file) => { + const blocks = cache && cache.blocks; + if (blocks) { + const blockKeys = Array.from(Object.keys(blocks)); + const blockArray = blockKeys + .map((key) => blocks[key]) + .map((obj) => { + obj["path"] = file.path; + obj["swap"] = 0; + return obj; + }) + .filter((block) => block.id.includes("button")); + return blockArray; + } +}; +function removeDuplicates(arr) { + return arr && arr[0] + ? arr.filter((v, i, a) => a.findIndex((t) => t.id === v.id || + (t.path === v.path && + t.position.start.line === v.position.start.line && + t.position.end.line === v.position.end.line)) === i) + : arr; +} + +function nanoid(num) { + let result = ""; + const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; + const charactersLength = characters.length; + for (let i = 0; i < num; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} +const insertButton = (app, outputObject) => { + const buttonArr = []; + buttonArr.push("```button"); + outputObject.name && buttonArr.push(`name ${outputObject.name}`); + outputObject.type && buttonArr.push(`type ${outputObject.type}`); + outputObject.action && buttonArr.push(`action ${outputObject.action}`); + outputObject.id && buttonArr.push(`id ${outputObject.id}`); + outputObject.swap && buttonArr.push(`swap ${outputObject.swap}`); + outputObject.remove && buttonArr.push(`remove ${outputObject.remove}`); + outputObject.replace && buttonArr.push(`replace ${outputObject.replace}`); + outputObject.templater === true && + buttonArr.push(`templater ${outputObject.templater}`); + outputObject.color && buttonArr.push(`color ${outputObject.color}`); + outputObject.class && buttonArr.push(`class ${outputObject.class}`); + buttonArr.push("```"); + outputObject.blockId + ? buttonArr.push(`^button-${outputObject.blockId}`) + : buttonArr.push(`^button-${nanoid(4)}`); + const page = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + const editor = page.editor; + editor.replaceSelection(buttonArr.join("\n")); + addButtonToStore(app, page.file); +}; +const insertInlineButton = (app, id) => { + const page = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + const editor = page.editor; + editor.replaceSelection(`\`button-${id}\``); +}; +const createArgumentObject = (source) => source.split("\n").reduce((acc, i) => { + const split = i.split(" "); + const key = split[0].toLowerCase(); + acc[key] = split.filter((item) => item !== split[0]).join(" "); + return acc; +}, {}); +const createContentArray = async (app) => { + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const file = activeView.file; + const content = await app.vault.read(file); + return { contentArray: content.split("\n"), file }; + } + new obsidian.Notice("Could not get Active View", 1000); + console.error("could not get active view"); +}; +const handleValueArray = (value, callback) => { + if (value.includes("[") && value.includes("]")) { + const args = value.match(/\[(.*)\]/); + if (args[1]) { + const argArray = args[1].split(/,\s?/); + if (argArray[0]) { + callback(argArray); + } + } + } +}; +function getNewArgs(app, position) { + const promise = new Promise((resolve) => { + setTimeout(async () => { + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + const newContent = await app.vault + .cachedRead(activeView.file) + .then((content) => content.split("\n")); + const newButton = newContent + .splice(position.lineStart, position.lineEnd - position.lineStart) + .join("\n") + .replace("```button", "") + .replace("```", ""); + resolve({ args: createArgumentObject(newButton) }); + }, 150); + }); + return promise; +} +const wrapAround = (value, size) => { + return ((value % size) + size) % size; +}; + +const buttonEventListener = (app, callback) => { + return app.metadataCache.on("changed", (file) => { + callback(app, file); + }); +}; +const openFileListener = (app, storeEvents, callback) => { + return app.workspace.on("file-open", () => { + callback(app, storeEvents); + }); +}; + +var Mexp = function (parsed) { + this.value = parsed; +}; + +Mexp.math = { + isDegree: true, // mode of calculator + acos: function (x) { + return (Mexp.math.isDegree ? 180 / Math.PI * Math.acos(x) : Math.acos(x)) + }, + add: function (a, b) { + return a + b + }, + asin: function (x) { + return (Mexp.math.isDegree ? 180 / Math.PI * Math.asin(x) : Math.asin(x)) + }, + atan: function (x) { + return (Mexp.math.isDegree ? 180 / Math.PI * Math.atan(x) : Math.atan(x)) + }, + acosh: function (x) { + return Math.log(x + Math.sqrt(x * x - 1)) + }, + asinh: function (x) { + return Math.log(x + Math.sqrt(x * x + 1)) + }, + atanh: function (x) { + return Math.log((1 + x) / (1 - x)) + }, + C: function (n, r) { + var pro = 1; + var other = n - r; + var choice = r; + if (choice < other) { + choice = other; + other = r; + } + for (var i = choice + 1; i <= n; i++) { + pro *= i; + } + return pro / Mexp.math.fact(other) + }, + changeSign: function (x) { + return -x + }, + cos: function (x) { + if (Mexp.math.isDegree) x = Mexp.math.toRadian(x); + return Math.cos(x) + }, + cosh: function (x) { + return (Math.pow(Math.E, x) + Math.pow(Math.E, -1 * x)) / 2 + }, + div: function (a, b) { + return a / b + }, + fact: function (n) { + if (n % 1 !== 0) return 'NaN' + var pro = 1; + for (var i = 2; i <= n; i++) { + pro *= i; + } + return pro + }, + inverse: function (x) { + return 1 / x + }, + log: function (i) { + return Math.log(i) / Math.log(10) + }, + mod: function (a, b) { + return a % b + }, + mul: function (a, b) { + return a * b + }, + P: function (n, r) { + var pro = 1; + for (var i = Math.floor(n) - Math.floor(r) + 1; i <= Math.floor(n); i++) { + pro *= i; + } + return pro + }, + Pi: function (low, high, ex) { + var pro = 1; + for (var i = low; i <= high; i++) { + pro *= Number(ex.postfixEval({ + n: i + })); + } + return pro + }, + pow10x: function (e) { + var x = 1; + while (e--) { + x *= 10; + } + return x + }, + sigma: function (low, high, ex) { + var sum = 0; + for (var i = low; i <= high; i++) { + sum += Number(ex.postfixEval({ + n: i + })); + } + return sum + }, + sin: function (x) { + if (Mexp.math.isDegree) x = Mexp.math.toRadian(x); + return Math.sin(x) + }, + sinh: function (x) { + return (Math.pow(Math.E, x) - Math.pow(Math.E, -1 * x)) / 2 + }, + sub: function (a, b) { + return a - b + }, + tan: function (x) { + if (Mexp.math.isDegree) x = Mexp.math.toRadian(x); + return Math.tan(x) + }, + tanh: function (x) { + return Mexp.sinha(x) / Mexp.cosha(x) + }, + toRadian: function (x) { + return x * Math.PI / 180 + } +}; +Mexp.Exception = function (message) { + this.message = message; +}; +var math_function = Mexp; + +function inc(arr, val) { + for (var i = 0; i < arr.length; i++) { + arr[i] += val; + } + return arr +} +var token = ['sin', 'cos', 'tan', 'pi', '(', ')', 'P', 'C', ' ', + 'asin', 'acos', 'atan', '7', '8', '9', 'int', + 'cosh', 'acosh', 'ln', '^', 'root', '4', '5', '6', '/', '!', + 'tanh', 'atanh', 'Mod', '1', '2', '3', '*', + 'sinh', 'asinh', 'e', 'log', '0', '.', '+', '-', ',', 'Sigma', 'n', 'Pi', 'pow']; +var show = ['sin', 'cos', 'tan', 'π', '(', ')', 'P', 'C', ' ', + 'asin', 'acos', 'atan', '7', '8', '9', 'Int', + 'cosh', 'acosh', ' ln', '^', 'root', '4', '5', '6', '÷', '!', + 'tanh', 'atanh', ' Mod ', '1', '2', '3', '×', + 'sinh', 'asinh', 'e', ' log', '0', '.', '+', '-', ',', 'Σ', 'n', 'Π', 'pow']; +var eva = [math_function.math.sin, math_function.math.cos, math_function.math.tan, 'PI', '(', ')', math_function.math.P, math_function.math.C, ' '.anchor, +math_function.math.asin, math_function.math.acos, math_function.math.atan, '7', '8', '9', Math.floor, +math_function.math.cosh, math_function.math.acosh, Math.log, Math.pow, Math.sqrt, '4', '5', '6', math_function.math.div, math_function.math.fact, +math_function.math.tanh, math_function.math.atanh, math_function.math.mod, '1', '2', '3', math_function.math.mul, +math_function.math.sinh, math_function.math.asinh, 'E', math_function.math.log, '0', '.', math_function.math.add, math_function.math.sub, ',', math_function.math.sigma, 'n', math_function.math.Pi, Math.pow]; +var preced = { + 0: 11, + 1: 0, + 2: 3, + 3: 0, + 4: 0, + 5: 0, + 6: 0, + 7: 11, + 8: 11, + 9: 1, + 10: 10, + 11: 0, + 12: 11, + 13: 0, + 14: -1 // will be filtered after lexer +}; // stores precedence by types +var type = [0, 0, 0, 3, 4, 5, 10, 10, 14, + 0, 0, 0, 1, 1, 1, 0, + 0, 0, 0, 10, 0, 1, 1, 1, 2, 7, + 0, 0, 2, 1, 1, 1, 2, + 0, 0, 3, 0, 1, 6, 9, 9, 11, 12, 13, 12, 8]; +/* +0 : function with syntax function_name(Maths_exp) +1 : numbers +2 : binary operators like * / Mod left associate and same precedence +3 : Math constant values like e,pi,Cruncher ans +4 : opening bracket +5 : closing bracket +6 : decimal +7 : function with syntax (Math_exp)function_name +8: function with syntax function_name(Math_exp1,Math_exp2) +9 : binary operator like +,- +10: binary operator like P C or ^ +11: , +12: function with , seperated three parameters and third parameter is a string that will be mexp string +13: variable of Sigma function +*/ +var type0 = { + 0: true, + 1: true, + 3: true, + 4: true, + 6: true, + 8: true, + 9: true, + 12: true, + 13: true, + 14: true +}; // type2:true,type4:true,type9:true,type11:true,type21:true,type22 +var type1 = { + 0: true, + 1: true, + 2: true, + 3: true, + 4: true, + 5: true, + 6: true, + 7: true, + 8: true, + 9: true, + 10: true, + 11: true, + 12: true, + 13: true +}; // type3:true,type5:true,type7:true,type23 +var type1Asterick = { + 0: true, + 3: true, + 4: true, + 8: true, + 12: true, + 13: true +}; +var empty = {}; +var type3Asterick = { + 0: true, + 1: true, + 3: true, + 4: true, + 6: true, + 8: true, + 12: true, + 13: true +}; // type_5:true,type_7:true,type_23 +var type6 = { + 1: true +}; +var newAr = [ + [], + ['1', '2', '3', '7', '8', '9', '4', '5', '6', '+', '-', '*', '/', '(', ')', '^', '!', 'P', 'C', 'e', '0', '.', ',', 'n', ' '], + ['pi', 'ln', 'Pi'], + ['sin', 'cos', 'tan', 'Del', 'int', 'Mod', 'log', 'pow'], + ['asin', 'acos', 'atan', 'cosh', 'root', 'tanh', 'sinh'], + ['acosh', 'atanh', 'asinh', 'Sigma'] +]; + +function match(str1, str2, i, x) { + for (var f = 0; f < x; f++) { + if (str1[i + f] !== str2[f]) { + return false + } + } + return true +} +math_function.addToken = function (tokens) { + for (var i = 0; i < tokens.length; i++) { + var x = tokens[i].token.length; + var temp = -1; + + // newAr is a specially designed data structure index of 1d array = length of tokens + newAr[x] = newAr[x] || []; + for (var y = 0; y < newAr[x].length; y++) { + if (tokens[i].token === newAr[x][y]) { + temp = token.indexOf(newAr[x][y]); + break + } + } + if (temp === -1) { + token.push(tokens[i].token); + type.push(tokens[i].type); + if (newAr.length <= tokens[i].token.length) { + newAr[tokens[i].token.length] = []; + } + newAr[tokens[i].token.length].push(tokens[i].token); + eva.push(tokens[i].value); + show.push(tokens[i].show); + } else { // overwrite + token[temp] = tokens[i].token; + type[temp] = tokens[i].type; + eva[temp] = tokens[i].value; + show[temp] = tokens[i].show; + } + } +}; + +function tokenize(string) { + var nodes = []; + var length = string.length; + var key, x, y; + for (var i = 0; i < length; i++) { + if (i < length - 1 && string[i] === ' ' && string[i + 1] === ' ') { + continue + } + key = ''; + for (x = (string.length - i > (newAr.length - 2) ? newAr.length - 1 : string.length - i); x > 0; x--) { + if (newAr[x] === undefined) continue; + for (y = 0; y < newAr[x].length; y++) { + if (match(string, newAr[x][y], i, x)) { + key = newAr[x][y]; + y = newAr[x].length; + x = 0; + } + } + } + i += key.length - 1; + if (key === '') { + throw (new math_function.Exception('Can\'t understand after ' + string.slice(i))) + } + var index = token.indexOf(key); + nodes.push({ + index: index, + token: key, + type: type[index], + eval: eva[index], + precedence: preced[type[index]], + show: show[index] + }); + } + return nodes; +} + +math_function.lex = function (inp, tokens) { + + + var changeSignObj = { + value: math_function.math.changeSign, + type: 0, + pre: 21, + show: '-' + }; + var closingParObj = { + value: ')', + show: ')', + type: 5, + pre: 0 + }; + var openingParObj = { + value: '(', + type: 4, + pre: 0, + show: '(' + }; + var str = [openingParObj]; + + var ptc = []; // Parenthesis to close at the beginning is after one token + var inpStr = inp; + var allowed = type0; + var bracToClose = 0; + var asterick = empty; + var prevKey = ''; + var i; + if (typeof tokens !== 'undefined') { + math_function.addToken(tokens); + } + var obj = {}; + var nodes = tokenize(inpStr); + for (i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (node.type === 14) { + if (i > 0 && + i < nodes.length - 1 && + nodes[i + 1].type === 1 && + (nodes[i - 1].type === 1 || nodes[i - 1].type === 6)) + throw new math_function.Exception('Unexpected Space') + continue + } + + node.index; + var cToken = node.token; + var cType = node.type; + var cEv = node.eval; + var cPre = node.precedence; + var cShow = node.show; + var pre = str[str.length - 1]; + var j; + for (j = ptc.length; j--;) { // loop over ptc + if (ptc[j] === 0) { + if ([0, 2, 3, 4, 5, 9, 11, 12, 13].indexOf(cType) !== -1) { + if (allowed[cType] !== true) { + console.log(inp, node, nodes, allowed); + throw (new math_function.Exception(cToken + ' is not allowed after ' + prevKey)) + } + str.push(closingParObj); + allowed = type1; + asterick = type3Asterick; + inc(ptc, -1).pop(); + } + } else break + } + if (allowed[cType] !== true) { + throw (new math_function.Exception(cToken + ' is not allowed after ' + prevKey)) + } + if (asterick[cType] === true) { + cType = 2; + cEv = math_function.math.mul; + cShow = '×'; + cPre = 3; + i = i - cToken.length; + } + obj = { + value: cEv, + type: cType, + pre: cPre, + show: cShow + }; + if (cType === 0) { + allowed = type0; + asterick = empty; + inc(ptc, 2).push(2); + str.push(obj); + str.push(openingParObj); + } else if (cType === 1) { + if (pre.type === 1) { + pre.value += cEv; + inc(ptc, 1); + } else { + str.push(obj); + } + allowed = type1; + asterick = type1Asterick; + } else if (cType === 2) { + allowed = type0; + asterick = empty; + inc(ptc, 2); + str.push(obj); + } else if (cType === 3) { // constant + str.push(obj); + allowed = type1; + asterick = type3Asterick; + } else if (cType === 4) { + inc(ptc, 1); + bracToClose++; + allowed = type0; + asterick = empty; + str.push(obj); + } else if (cType === 5) { + if (!bracToClose) { + throw (new math_function.Exception('Closing parenthesis are more than opening one, wait What!!!')) + } + bracToClose--; + allowed = type1; + asterick = type3Asterick; + str.push(obj); + inc(ptc, 1); + } else if (cType === 6) { + if (pre.hasDec) { + throw (new math_function.Exception('Two decimals are not allowed in one number')) + } + if (pre.type !== 1) { + pre = { + value: 0, + type: 1, + pre: 0 + }; // pre needs to be changed as it will the last value now to be safe in later code + str.push(pre); + inc(ptc, -1); + } + allowed = type6; + inc(ptc, 1); + asterick = empty; + pre.value += cEv; + pre.hasDec = true; + } else if (cType === 7) { + allowed = type1; + asterick = type3Asterick; + inc(ptc, 1); + str.push(obj); + } + if (cType === 8) { + allowed = type0; + asterick = empty; + inc(ptc, 4).push(4); + str.push(obj); + str.push(openingParObj); + } else if (cType === 9) { + if (pre.type === 9) { + if (pre.value === math_function.math.add) { + pre.value = cEv; + pre.show = cShow; + inc(ptc, 1); + } else if (pre.value === math_function.math.sub && cShow === '-') { + pre.value = math_function.math.add; + pre.show = '+'; + inc(ptc, 1); + } + } else if (pre.type !== 5 && pre.type !== 7 && pre.type !== 1 && pre.type !== 3 && pre.type !== 13) { // changesign only when negative is found + if (cToken === '-') { // do nothing for + token + // don't add with the above if statement as that will run the else statement of parent if on Ctoken + + allowed = type0; + asterick = empty; + inc(ptc, 2).push(2); + str.push(changeSignObj); + str.push(openingParObj); + } + } else { + str.push(obj); + inc(ptc, 2); + } + allowed = type0; + asterick = empty; + } else if (cType === 10) { + allowed = type0; + asterick = empty; + inc(ptc, 2); + str.push(obj); + } else if (cType === 11) { + allowed = type0; + asterick = empty; + str.push(obj); + } else if (cType === 12) { + allowed = type0; + asterick = empty; + inc(ptc, 6).push(6); + str.push(obj); + str.push(openingParObj); + } else if (cType === 13) { + allowed = type1; + asterick = type3Asterick; + str.push(obj); + } + inc(ptc, -1); + prevKey = cToken; + } + for (j = ptc.length; j--;) { // loop over ptc + if (ptc[j] === 0) { + str.push(closingParObj); + inc(ptc, -1).pop(); + } else break // if it is not zero so before ptc also cant be zero + } + if (allowed[5] !== true) { + throw (new math_function.Exception('complete the expression')) + } + while (bracToClose--) { + str.push(closingParObj); + } + + str.push(closingParObj); + // console.log(str); + return new math_function(str) +}; +var lexer = math_function; + +lexer.prototype.toPostfix = function () { + var post = [], elem, popped, prep, pre, ele; + var stack = [{ value: "(", type: 4, pre: 0 }]; + var arr = this.value; + for (var i = 1; i < arr.length; i++) { + if (arr[i].type === 1 || arr[i].type === 3 || arr[i].type === 13) { //if token is number,constant,or n(which is also a special constant in our case) + if (arr[i].type === 1) + arr[i].value = Number(arr[i].value); + post.push(arr[i]); + } + else if (arr[i].type === 4) { + stack.push(arr[i]); + } + else if (arr[i].type === 5) { + while ((popped = stack.pop()).type !== 4) { + post.push(popped); + } + } + else if (arr[i].type === 11) { + while ((popped = stack.pop()).type !== 4) { + post.push(popped); + } + stack.push(popped); + } + else { + elem = arr[i]; + pre = elem.pre; + ele = stack[stack.length - 1]; + prep = ele.pre; + var flag = ele.value == 'Math.pow' && elem.value == 'Math.pow'; + if (pre > prep) stack.push(elem); + else { + while (prep >= pre && !flag || flag && pre < prep) { + popped = stack.pop(); + ele = stack[stack.length - 1]; + post.push(popped); + prep = ele.pre; + flag = elem.value == 'Math.pow' && ele.value == 'Math.pow'; + } + stack.push(elem); + } + } + } + return new lexer(post); +}; +var postfix = lexer; + +postfix.prototype.postfixEval = function (UserDefined) { + UserDefined=UserDefined||{}; + UserDefined.PI=Math.PI; + UserDefined.E=Math.E; + var stack=[],pop1,pop2,pop3; + var arr=this.value; + var bool=(typeof UserDefined.n!=="undefined"); + for(var i=0;i1) { + throw(new postfix.Exception("Uncaught Syntax error")); + } + return stack[0].value>1000000000000000?"Infinity":parseFloat(stack[0].value.toFixed(15)); +}; +postfix.eval=function(str,tokens,obj){ + if (typeof tokens==="undefined") { + return this.lex(str).toPostfix().postfixEval(); + } + else if (typeof obj==="undefined") { + if (typeof tokens.length!=="undefined") + return this.lex(str,tokens).toPostfix().postfixEval(); + else + return this.lex(str).toPostfix().postfixEval(tokens); + } + else + return this.lex(str,tokens).toPostfix().postfixEval(obj); +}; +var postfix_evaluator=postfix; + +postfix_evaluator.prototype.formulaEval = function () { + var pop1,pop2,pop3; + var disp=[]; + var arr=this.value; + for(var i=0;i"+pop2.value+""+arr[i].show+""+pop1.value+"",type:10}); + else disp.push({value:(pop2.type!=1?"(":"")+pop2.value+(pop2.type!=1?")":"")+""+pop1.value+"",type:1}); + } + else if(arr[i].type===2||arr[i].type===9){ + pop1=disp.pop(); + pop2=disp.pop(); + disp.push({value:(pop2.type!=1?"(":"")+pop2.value+(pop2.type!=1?")":"")+arr[i].show+(pop1.type!=1?"(":"")+pop1.value+(pop1.type!=1?")":""),type:arr[i].type}); + } + else if(arr[i].type===12){ + pop1=disp.pop(); + pop2=disp.pop(); + pop3=disp.pop(); + disp.push({value:arr[i].show+"("+pop3.value+","+pop2.value+","+pop1.value+")",type:12}); + } + } + return disp[0].value; +}; +var formula_evaluator=postfix_evaluator; + +const removeButton = async (app, remove, lineStart, lineEnd) => { + const { contentArray, file } = await createContentArray(app); + const store = getStore(app.isMobile); + if (remove === "true") { + const numberOfItems = lineEnd - lineStart; + contentArray.splice(lineStart, numberOfItems + 1); + if (contentArray[lineStart] && + contentArray[lineStart].includes("^button-")) { + contentArray.splice(lineStart, 1); + } + const content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + if (lineStart === lineEnd) { + contentArray.splice(lineStart, 1); + const content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + else { + handleValueArray(remove, async (argArray) => { + const buttons = store && + store.filter((item) => { + let exists; + argArray.forEach((arg) => { + if (item.id === `button-${arg}` && item.path === file.path) { + exists = true; + } + }); + return exists; + }); + if (buttons[0]) { + let offset = 0; + buttons.forEach((button) => { + const start = button.position.start.line - offset; + const numLines = button.position.end.line - button.position.start.line; + contentArray.splice(start, numLines + 2); + offset += numLines + 2; + }); + const content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + }); + } +}; +const removeSection = async (app, section) => { + const { contentArray, file } = await createContentArray(app); + if (section.includes("[") && section.includes("]")) { + const args = section.match(/\[(.*)\]/); + if (args[1]) { + const argArray = args[1].split(/,\s?/); + if (argArray[0]) { + const start = parseInt(argArray[0]) - 1; + const end = parseInt(argArray[1]); + const numLines = end - start; + contentArray.splice(start, numLines); + const content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + } + } +}; +const prependContent = async (app, insert, lineStart) => { + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const file = activeView.file; + let content = await app.vault.read(file); + const contentArray = content.split("\n"); + contentArray.splice(lineStart, 0, insert); + content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + else { + new obsidian.Notice("There was an issue prepending content, please try again", 2000); + } +}; +const appendContent = async (app, insert, lineEnd) => { + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const file = activeView.file; + let content = await app.vault.read(file); + const contentArray = content.split("\n"); + let insertionPoint; + if (contentArray[lineEnd + 1] && + contentArray[lineEnd + 1].includes("^button")) { + insertionPoint = lineEnd + 2; + insert = `\n${insert}`; + } + else { + insertionPoint = lineEnd + 1; + } + contentArray.splice(insertionPoint, 0, `${insert}`); + content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + else { + new obsidian.Notice("There was an issue appending content, please try again", 2000); + } +}; +const addContentAtLine = async (app, insert, type) => { + const lineNumber = type.match(/(\d+)/g); + if (lineNumber[0]) { + const insertionPoint = parseInt(lineNumber[0]) - 1; + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const file = activeView.file; + let content = await app.vault.read(file); + const contentArray = content.split("\n"); + contentArray.splice(insertionPoint, 0, `${insert}`); + content = contentArray.join("\n"); + await app.vault.modify(file, content); + } + } + else { + new obsidian.Notice("There was an issue adding content, please try again", 2000); + } +}; +const createNote = async (app, content, type) => { + const path = type.match(/\(([\s\S]*?),?\s?(split)?\)/); + if (path) { + try { + await app.vault.create(`${path[1]}.md`, content); + const file = app.vault.getAbstractFileByPath(`${path[1]}.md`); + if (path[2]) { + await app.workspace.splitActiveLeaf().openFile(file); + } + else { + app.workspace.activeLeaf.openFile(file); + } + } + catch (e) { + new obsidian.Notice("There was an error! Maybe the file already exists?", 2000); + } + } + else { + new obsidian.Notice(`couldn't parse the path!`, 2000); + } +}; + +const getButtonPosition = (content, args) => { + let finalPosition; + const possiblePositions = []; + let possiblePosition = { lineStart: 0, lineEnd: 0 }; + const contentArray = content.split("\n"); + let open = false; + contentArray.forEach((item, index) => { + if (item.includes("```")) { + if (open === false) { + possiblePosition.lineStart = index; + open = true; + } + else { + possiblePosition.lineEnd = index; + possiblePositions.push(possiblePosition); + possiblePosition = { lineStart: 0, lineEnd: 0 }; + open = false; + } + } + }); + possiblePositions.forEach((position) => { + const codeblock = contentArray + .slice(position.lineStart, position.lineEnd + 1) + .join("\n"); + if (codeblock.includes("button") && codeblock.includes(args.name)) { + finalPosition = position; + } + }); + return finalPosition; +}; +const getInlineButtonPosition = async (app, id) => { + const content = await createContentArray(app); + const position = { lineStart: 0, lineEnd: 0 }; + content.contentArray + .map((line) => line.split(" ")) + .forEach((words, index) => { + words.forEach((word) => { + if (word.startsWith("`button")) { + if (word === `\`button-${id}\``) { + position.lineStart = index; + position.lineEnd = index; + } + } + }); + }); + return position; +}; +const findNumber = async (app, lineNumber) => { + const content = await createContentArray(app); + const value = []; + content.contentArray.forEach((line, index) => { + if (index === lineNumber - 1) { + value.push(line); + } + }); + const convertWords = value + .join("") + .replace("plus", "+") + .replace("minus", "-") + .replace("times", "*") + .replace(/divide(d)?(\sby)?/g, "/"); + const numbers = convertWords.replace(/\s/g, "").match(/[^\w:]*?\d+?/g); + return numbers; +}; + +const calculate = async (app, { action }, position) => { + let equation = action; + const variables = action.match(/\$[0-9]*/g); + if (variables) { + const output = variables.map(async (value) => { + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const lineNumber = parseInt(value.substring(1)); + const numbers = await findNumber(app, lineNumber); + return { variable: value, numbers }; + } + else { + new obsidian.Notice(`couldn't read file`, 2000); + } + }); + const resolved = await Promise.all(output); + resolved.forEach((term) => { + if (term.numbers) { + equation = equation.replace(term.variable, term.numbers.join("")); + } + else { + new obsidian.Notice("Check the line number in your calculate button", 3000); + equation = undefined; + } + }); + } + const fun = equation && formula_evaluator.eval(equation); + fun && appendContent(app, `Result: ${fun}`, position.lineEnd); +}; +const remove = (app, { remove }, { lineStart, lineEnd }) => { + setTimeout(() => removeButton(app, remove, lineStart, lineEnd), 1000); +}; +const replace = (app, { replace }) => { + removeSection(app, replace); +}; +const text = async (app, args, position) => { + // prepend template above the button + if (args.type.includes("prepend")) { + prependContent(app, args.action, position.lineStart); + } + // append template below the button + if (args.type.includes("append")) { + appendContent(app, args.action, position.lineEnd); + } + if (args.type.includes("note")) { + createNote(app, args.action, args.type); + } + if (args.type.includes("line")) { + addContentAtLine(app, args.action, args.type); + } +}; +const template = async (app, args, position) => { + const templatesEnabled = app.internalPlugins.plugins.templates.enabled; + const templaterPluginEnabled = app.plugins.plugins["templater-obsidian"]; + // only run if templates plugin is enabled + if (templatesEnabled || templaterPluginEnabled) { + const folders = [ + templatesEnabled && app.internalPlugins.plugins.templates.instance.options.folder?.toLowerCase(), + templaterPluginEnabled && app.plugins?.plugins["templater-obsidian"]?.settings.template_folder?.toLowerCase(), + ].filter((folder) => folder); + const templateFile = args.action.toLowerCase(); + const allFiles = app.vault.getFiles(); + const file = allFiles.filter((file) => { + let found = false; + folders[0] && + folders.forEach((folder) => { + if (file.path.toLowerCase() === `${folder}/${templateFile}.md`) { + found = true; + } + }); + return found; + })[0]; + if (file) { + const content = await app.vault.read(file); + // prepend template above the button + if (args.type.includes("prepend")) { + prependContent(app, content, position.lineStart); + setTimeout(() => app.commands.executeCommandById("templater-obsidian:replace-in-file-templater"), 100); + } + // append template below the button + if (args.type.includes("append")) { + appendContent(app, content, position.lineEnd); + setTimeout(() => app.commands.executeCommandById("templater-obsidian:replace-in-file-templater"), 100); + } + if (args.type.includes("note")) { + createNote(app, content, args.type); + } + if (args.type.includes("line")) { + addContentAtLine(app, content, args.type); + setTimeout(() => app.commands.executeCommandById("templater-obsidian:replace-in-file-templater"), 100); + } + } + else { + new obsidian.Notice(`Couldn't find the specified template, please check and try again`, 2000); + } + } + else { + new obsidian.Notice("You need to have the Templates or Templater plugin enabled and Template folder defined", 2000); + } +}; +const link = ({ action }) => { + const link = action.trim(); + window.open(link); +}; +const command = (app, { action }) => { + const allCommands = app.commands.listCommands(); + const command = allCommands.filter((command) => command.name.toUpperCase() === action.toUpperCase().trim())[0]; + app.commands.executeCommandById(command.id); +}; +const swap = async (app, swap, id, inline, file) => { + handleValueArray(swap, async (argArray) => { + const swap = await getButtonSwapById(app, id); + const newSwap = swap + 1 > argArray.length - 1 ? 0 : swap + 1; + setButtonSwapById(app, id, newSwap); + let args = await getButtonById(app, argArray[swap]); + let position; + let content; + if (args) { + if (args.templater) { + args = await templater(app, position); + if (inline) { + new obsidian.Notice("templater args don't work with inline buttons yet", 2000); + } + } + if (args.replace) { + replace(app, args); + } + if (args.type === "command") { + command(app, args); + } + // handle link buttons + if (args.type === "link") { + link(args); + } + // handle template buttons + if (args.type && args.type.includes("template")) { + setTimeout(async () => { + content = await app.vault.read(file); + position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + template(app, args, position); + }, 50); + } + if (args.type === "calculate") { + calculate(app, args, position); + } + if (args.type && args.type.includes("text")) { + setTimeout(async () => { + content = await app.vault.read(file); + position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + text(app, args, position); + }, 50); + } + // handle removing the button + if (args.remove) { + setTimeout(async () => { + content = await app.vault.read(file); + position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + remove(app, args, position); + }, 75); + } + if (args.replace) { + replace(app, args); + } + } + }); +}; +const templater = async (app, position) => { + app.commands.executeCommandById("editor:save-file"); + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const file = activeView.file; + const content = await app.vault.cachedRead(file); + app.commands.executeCommandById("templater-obsidian:replace-in-file-templater"); + const { args } = await getNewArgs(app, position); + const cachedData = []; + const cacheChange = app.vault.on("modify", (file) => { + cachedData.push(file.unsafeCachedData); + }); + setTimeout(async () => { + const button = content + .split("\n") + .splice(position.lineStart, position.lineEnd - position.lineStart + 2) + .join("\n"); + let finalContent; + if (cachedData[0]) { + const cachedContent = cachedData[cachedData.length - 1].split("\n"); + let addOne = false; + if (args.type.includes("prepend")) { + addOne = true; + } + else if (args.type.includes("line")) { + const lineNumber = args.type.match(/(\d+)/g); + if (lineNumber[0]) { + const line = parseInt(lineNumber[0]) - 1; + if (line < position.lineStart && !args.replace) { + addOne = true; + } + } + } + if (addOne) { + cachedContent.splice(position.lineStart + 1, position.lineEnd - position.lineStart + 2, button); + } + else { + cachedContent.splice(position.lineStart, position.lineEnd - position.lineStart + 2, button); + } + finalContent = cachedContent.join("\n"); + } + else { + finalContent = content; + } + await app.vault.modify(file, finalContent); + app.metadataCache.offref(cacheChange); + }, 200); + return args; + } +}; + +const createButton = ({ app, el, args, inline, id, clickOverride, }) => { + //create the button element + const button = el.createEl("button", { + cls: args.class + ? `${args.class} ${args.color}` + : `button-default ${args.color ? args.color : ""}`, + }); + button.innerHTML = args.name; + args.id ? button.setAttribute("id", args.id) : ""; + button.on("click", "button", () => { + clickOverride + ? clickOverride.click(...clickOverride.params) + : clickHandler(app, args, inline, id); + }); + return button; +}; +const clickHandler = async (app, args, inline, id) => { + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + let content = await app.vault.read(activeView.file); + let position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + // handle command buttons + if (args.templater) { + args = await templater(app, position); + if (inline) { + new obsidian.Notice("templater args don't work with inline buttons yet", 2000); + } + } + if (args.replace) { + replace(app, args); + } + if (args.type === "command") { + command(app, args); + } + // handle link buttons + if (args.type === "link") { + link(args); + } + // handle template buttons + if (args.type && args.type.includes("template")) { + setTimeout(async () => { + content = await app.vault.read(activeView.file); + position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + template(app, args, position); + }, 50); + } + if (args.type === "calculate") { + calculate(app, args, position); + } + if (args.type && args.type.includes("text")) { + setTimeout(async () => { + content = await app.vault.read(activeView.file); + position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + text(app, args, position); + }, 50); + } + // handle removing the button + if (args.remove) { + setTimeout(async () => { + content = await app.vault.read(activeView.file); + position = inline + ? await getInlineButtonPosition(app, id) + : getButtonPosition(content, args); + remove(app, args, position); + }, 1000); + } + if (args.swap) { + if (!inline) { + new obsidian.Notice("swap args only work in inline buttons for now", 2000); + } + else { + swap(app, args.swap, id, inline, activeView.file); + } + } +}; + +var top = 'top'; +var bottom = 'bottom'; +var right = 'right'; +var left = 'left'; +var auto = 'auto'; +var basePlacements = [top, bottom, right, left]; +var start = 'start'; +var end = 'end'; +var clippingParents = 'clippingParents'; +var viewport = 'viewport'; +var popper = 'popper'; +var reference = 'reference'; +var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); +}, []); +var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); +}, []); // modifiers that need to read the DOM + +var beforeRead = 'beforeRead'; +var read = 'read'; +var afterRead = 'afterRead'; // pure-logic modifiers + +var beforeMain = 'beforeMain'; +var main = 'main'; +var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) + +var beforeWrite = 'beforeWrite'; +var write = 'write'; +var afterWrite = 'afterWrite'; +var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + +function getNodeName(element) { + return element ? (element.nodeName || '').toLowerCase() : null; +} + +function getWindow(node) { + if (node == null) { + return window; + } + + if (node.toString() !== '[object Window]') { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + + return node; +} + +function isElement(node) { + var OwnElement = getWindow(node).Element; + return node instanceof OwnElement || node instanceof Element; +} + +function isHTMLElement(node) { + var OwnElement = getWindow(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; +} + +function isShadowRoot(node) { + // IE 11 has no ShadowRoot + if (typeof ShadowRoot === 'undefined') { + return false; + } + + var OwnElement = getWindow(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; +} + +// and applies them to the HTMLElements such as popper and arrow + +function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function (name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } // Flow doesn't support to extend this property, but it's the most + // effective way to apply styles to an HTMLElement + // $FlowFixMe[cannot-write] + + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (name) { + var value = attributes[name]; + + if (value === false) { + element.removeAttribute(name); + } else { + element.setAttribute(name, value === true ? '' : value); + } + }); + }); +} + +function effect$2(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: '0', + top: '0', + margin: '0' + }, + arrow: { + position: 'absolute' + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + + return function () { + Object.keys(state.elements).forEach(function (name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them + + var style = styleProperties.reduce(function (style, property) { + style[property] = ''; + return style; + }, {}); // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (attribute) { + element.removeAttribute(attribute); + }); + }); + }; +} // eslint-disable-next-line import/no-unused-modules + + +var applyStyles$1 = { + name: 'applyStyles', + enabled: true, + phase: 'write', + fn: applyStyles, + effect: effect$2, + requires: ['computeStyles'] +}; + +function getBasePlacement(placement) { + return placement.split('-')[0]; +} + +function getBoundingClientRect(element) { + var rect = element.getBoundingClientRect(); + return { + width: rect.width, + height: rect.height, + top: rect.top, + right: rect.right, + bottom: rect.bottom, + left: rect.left, + x: rect.left, + y: rect.top + }; +} + +// means it doesn't take into account transforms. + +function getLayoutRect(element) { + var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. + // Fixes https://github.com/popperjs/popper-core/issues/1223 + + var width = element.offsetWidth; + var height = element.offsetHeight; + + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + + return { + x: element.offsetLeft, + y: element.offsetTop, + width: width, + height: height + }; +} + +function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method + + if (parent.contains(child)) { + return true; + } // then fallback to custom implementation with Shadow DOM support + else if (rootNode && isShadowRoot(rootNode)) { + var next = child; + + do { + if (next && parent.isSameNode(next)) { + return true; + } // $FlowFixMe[prop-missing]: need a better way to handle this... + + + next = next.parentNode || next.host; + } while (next); + } // Give up, the result is false + + + return false; +} + +function getComputedStyle(element) { + return getWindow(element).getComputedStyle(element); +} + +function isTableElement(element) { + return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; +} + +function getDocumentElement(element) { + // $FlowFixMe[incompatible-return]: assume body is always available + return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] + element.document) || window.document).documentElement; +} + +function getParentNode(element) { + if (getNodeName(element) === 'html') { + return element; + } + + return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || ( // DOM Element detected + isShadowRoot(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + getDocumentElement(element) // fallback + + ); +} + +function getTrueOffsetParent(element) { + if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 + getComputedStyle(element).position === 'fixed') { + return null; + } + + return element.offsetParent; +} // `.offsetParent` reports `null` for fixed elements, while absolute elements +// return the containing block + + +function getContainingBlock(element) { + var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1; + var isIE = navigator.userAgent.indexOf('Trident') !== -1; + + if (isIE && isHTMLElement(element)) { + // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport + var elementCss = getComputedStyle(element); + + if (elementCss.position === 'fixed') { + return null; + } + } + + var currentNode = getParentNode(element); + + while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { + var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that + // create a containing block. + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + + if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + + return null; +} // Gets the closest ancestor positioned element. Handles some edge cases, +// such as table ancestors and cross browser bugs. + + +function getOffsetParent(element) { + var window = getWindow(element); + var offsetParent = getTrueOffsetParent(element); + + while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') { + offsetParent = getTrueOffsetParent(offsetParent); + } + + if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) { + return window; + } + + return offsetParent || getContainingBlock(element) || window; +} + +function getMainAxisFromPlacement(placement) { + return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; +} + +var max = Math.max; +var min = Math.min; +var round = Math.round; + +function within(min$1, value, max$1) { + return max(min$1, min(value, max$1)); +} + +function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; +} + +function mergePaddingObject(paddingObject) { + return Object.assign({}, getFreshSideObject(), paddingObject); +} + +function expandToHashMap(value, keys) { + return keys.reduce(function (hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); +} + +var toPaddingObject = function toPaddingObject(padding, state) { + padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); +}; + +function arrow(_ref) { + var _state$modifiersData$; + + var state = _ref.state, + name = _ref.name, + options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets = state.modifiersData.popperOffsets; + var basePlacement = getBasePlacement(state.placement); + var axis = getMainAxisFromPlacement(basePlacement); + var isVertical = [left, right].indexOf(basePlacement) >= 0; + var len = isVertical ? 'height' : 'width'; + + if (!arrowElement || !popperOffsets) { + return; + } + + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = getLayoutRect(arrowElement); + var minProp = axis === 'y' ? top : left; + var maxProp = axis === 'y' ? bottom : right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; + var startDiff = popperOffsets[axis] - state.rects.reference[axis]; + var arrowOffsetParent = getOffsetParent(arrowElement); + var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is + // outside of the popper bounds + + var min = paddingObject[minProp]; + var max = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset = within(min, center, max); // Prevents breaking syntax highlighting... + + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); +} + +function effect$1(_ref2) { + var state = _ref2.state, + options = _ref2.options; + var _options$element = options.element, + arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; + + if (arrowElement == null) { + return; + } // CSS selector + + + if (typeof arrowElement === 'string') { + arrowElement = state.elements.popper.querySelector(arrowElement); + + if (!arrowElement) { + return; + } + } + + if (process.env.NODE_ENV !== "production") { + if (!isHTMLElement(arrowElement)) { + console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); + } + } + + if (!contains(state.elements.popper, arrowElement)) { + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); + } + + return; + } + + state.elements.arrow = arrowElement; +} // eslint-disable-next-line import/no-unused-modules + + +var arrow$1 = { + name: 'arrow', + enabled: true, + phase: 'main', + fn: arrow, + effect: effect$1, + requires: ['popperOffsets'], + requiresIfExists: ['preventOverflow'] +}; + +var unsetSides = { + top: 'auto', + right: 'auto', + bottom: 'auto', + left: 'auto' +}; // Round the offsets to the nearest suitable subpixel based on the DPR. +// Zooming can change the DPR, but it seems to report a value that will +// cleanly divide the values into the appropriate subpixels. + +function roundOffsetsByDPR(_ref) { + var x = _ref.x, + y = _ref.y; + var win = window; + var dpr = win.devicePixelRatio || 1; + return { + x: round(round(x * dpr) / dpr) || 0, + y: round(round(y * dpr) / dpr) || 0 + }; +} + +function mapToStyles(_ref2) { + var _Object$assign2; + + var popper = _ref2.popper, + popperRect = _ref2.popperRect, + placement = _ref2.placement, + offsets = _ref2.offsets, + position = _ref2.position, + gpuAcceleration = _ref2.gpuAcceleration, + adaptive = _ref2.adaptive, + roundOffsets = _ref2.roundOffsets; + + var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets, + _ref3$x = _ref3.x, + x = _ref3$x === void 0 ? 0 : _ref3$x, + _ref3$y = _ref3.y, + y = _ref3$y === void 0 ? 0 : _ref3$y; + + var hasX = offsets.hasOwnProperty('x'); + var hasY = offsets.hasOwnProperty('y'); + var sideX = left; + var sideY = top; + var win = window; + + if (adaptive) { + var offsetParent = getOffsetParent(popper); + var heightProp = 'clientHeight'; + var widthProp = 'clientWidth'; + + if (offsetParent === getWindow(popper)) { + offsetParent = getDocumentElement(popper); + + if (getComputedStyle(offsetParent).position !== 'static') { + heightProp = 'scrollHeight'; + widthProp = 'scrollWidth'; + } + } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it + + + offsetParent = offsetParent; + + if (placement === top) { + sideY = bottom; // $FlowFixMe[prop-missing] + + y -= offsetParent[heightProp] - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + + if (placement === left) { + sideX = right; // $FlowFixMe[prop-missing] + + x -= offsetParent[widthProp] - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + + var commonStyles = Object.assign({ + position: position + }, adaptive && unsetSides); + + if (gpuAcceleration) { + var _Object$assign; + + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); +} + +function computeStyles(_ref4) { + var state = _ref4.state, + options = _ref4.options; + var _options$gpuAccelerat = options.gpuAcceleration, + gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, + _options$adaptive = options.adaptive, + adaptive = _options$adaptive === void 0 ? true : _options$adaptive, + _options$roundOffsets = options.roundOffsets, + roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + + if (process.env.NODE_ENV !== "production") { + var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || ''; + + if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { + return transitionProperty.indexOf(property) >= 0; + })) { + console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); + } + } + + var commonStyles = { + placement: getBasePlacement(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration: gpuAcceleration + }; + + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive: adaptive, + roundOffsets: roundOffsets + }))); + } + + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: 'absolute', + adaptive: false, + roundOffsets: roundOffsets + }))); + } + + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-placement': state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var computeStyles$1 = { + name: 'computeStyles', + enabled: true, + phase: 'beforeWrite', + fn: computeStyles, + data: {} +}; + +var passive = { + passive: true +}; + +function effect(_ref) { + var state = _ref.state, + instance = _ref.instance, + options = _ref.options; + var _options$scroll = options.scroll, + scroll = _options$scroll === void 0 ? true : _options$scroll, + _options$resize = options.resize, + resize = _options$resize === void 0 ? true : _options$resize; + var window = getWindow(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.addEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.addEventListener('resize', instance.update, passive); + } + + return function () { + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.removeEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.removeEventListener('resize', instance.update, passive); + } + }; +} // eslint-disable-next-line import/no-unused-modules + + +var eventListeners = { + name: 'eventListeners', + enabled: true, + phase: 'write', + fn: function fn() {}, + effect: effect, + data: {} +}; + +var hash$1 = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' +}; +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function (matched) { + return hash$1[matched]; + }); +} + +var hash = { + start: 'end', + end: 'start' +}; +function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function (matched) { + return hash[matched]; + }); +} + +function getWindowScroll(node) { + var win = getWindow(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft: scrollLeft, + scrollTop: scrollTop + }; +} + +function getWindowScrollBarX(element) { + // If has a CSS width greater than the viewport, then this will be + // incorrect for RTL. + // Popper 1 is broken in this case and never had a bug report so let's assume + // it's not an issue. I don't think anyone ever specifies width on + // anyway. + // Browsers where the left scrollbar doesn't cause an issue report `0` for + // this (e.g. Edge 2019, IE11, Safari) + return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; +} + +function getViewportRect(element) { + var win = getWindow(element); + var html = getDocumentElement(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper + // can be obscured underneath it. + // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even + // if it isn't open, so if this isn't available, the popper will be detected + // to overflow the bottom of the screen too early. + + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently) + // In Chrome, it returns a value very close to 0 (+/-) but contains rounding + // errors due to floating point numbers, so we need to check precision. + // Safari returns a number <= 0, usually < -1 when pinch-zoomed + // Feature detection fails in mobile emulation mode in Chrome. + // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < + // 0.001 + // Fallback here: "Not Safari" userAgent + + if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + + return { + width: width, + height: height, + x: x + getWindowScrollBarX(element), + y: y + }; +} + +// of the `` and `` rect bounds if horizontally scrollable + +function getDocumentRect(element) { + var _element$ownerDocumen; + + var html = getDocumentElement(element); + var winScroll = getWindowScroll(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + getWindowScrollBarX(element); + var y = -winScroll.scrollTop; + + if (getComputedStyle(body || html).direction === 'rtl') { + x += max(html.clientWidth, body ? body.clientWidth : 0) - width; + } + + return { + width: width, + height: height, + x: x, + y: y + }; +} + +function isScrollParent(element) { + // Firefox wants us to check `-x` and `-y` variations as well + var _getComputedStyle = getComputedStyle(element), + overflow = _getComputedStyle.overflow, + overflowX = _getComputedStyle.overflowX, + overflowY = _getComputedStyle.overflowY; + + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); +} + +function getScrollParent(node) { + if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { + // $FlowFixMe[incompatible-return]: assume body is always available + return node.ownerDocument.body; + } + + if (isHTMLElement(node) && isScrollParent(node)) { + return node; + } + + return getScrollParent(getParentNode(node)); +} + +/* +given a DOM element, return the list of all scroll parents, up the list of ancesors +until we get to the top window object. This list is what we attach scroll listeners +to, because if any of these parent elements scroll, we'll need to re-calculate the +reference element's position. +*/ + +function listScrollParents(element, list) { + var _element$ownerDocumen; + + if (list === void 0) { + list = []; + } + + var scrollParent = getScrollParent(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = getWindow(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here + updatedList.concat(listScrollParents(getParentNode(target))); +} + +function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); +} + +function getInnerBoundingClientRect(element) { + var rect = getBoundingClientRect(element); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; +} + +function getClientRectFromMixedType(element, clippingParent) { + return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); +} // A "clipping parent" is an overflowable container with the characteristic of +// clipping (or hiding) overflowing elements with a position different from +// `initial` + + +function getClippingParents(element) { + var clippingParents = listScrollParents(getParentNode(element)); + var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0; + var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; + + if (!isElement(clipperElement)) { + return []; + } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 + + + return clippingParents.filter(function (clippingParent) { + return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; + }); +} // Gets the maximum area that the element is visible in due to any number of +// clipping parents + + +function getClippingRect(element, boundary, rootBoundary) { + var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); + var clippingParents = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents[0]; + var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; +} + +function getVariation(placement) { + return placement.split('-')[1]; +} + +function computeOffsets(_ref) { + var reference = _ref.reference, + element = _ref.element, + placement = _ref.placement; + var basePlacement = placement ? getBasePlacement(placement) : null; + var variation = placement ? getVariation(placement) : null; + var commonX = reference.x + reference.width / 2 - element.width / 2; + var commonY = reference.y + reference.height / 2 - element.height / 2; + var offsets; + + switch (basePlacement) { + case top: + offsets = { + x: commonX, + y: reference.y - element.height + }; + break; + + case bottom: + offsets = { + x: commonX, + y: reference.y + reference.height + }; + break; + + case right: + offsets = { + x: reference.x + reference.width, + y: commonY + }; + break; + + case left: + offsets = { + x: reference.x - element.width, + y: commonY + }; + break; + + default: + offsets = { + x: reference.x, + y: reference.y + }; + } + + var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; + + if (mainAxis != null) { + var len = mainAxis === 'y' ? 'height' : 'width'; + + switch (variation) { + case start: + offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); + break; + + case end: + offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); + break; + } + } + + return offsets; +} + +function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$placement = _options.placement, + placement = _options$placement === void 0 ? state.placement : _options$placement, + _options$boundary = _options.boundary, + boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, + _options$rootBoundary = _options.rootBoundary, + rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, + _options$elementConte = _options.elementContext, + elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, + _options$altBoundary = _options.altBoundary, + altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, + _options$padding = _options.padding, + padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); + var altContext = elementContext === popper ? reference : popper; + var referenceElement = state.elements.reference; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); + var referenceClientRect = getBoundingClientRect(referenceElement); + var popperOffsets = computeOffsets({ + reference: referenceClientRect, + element: popperRect, + strategy: 'absolute', + placement: placement + }); + var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); + var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect + // 0 or negative = within the clipping rect + + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element + + if (elementContext === popper && offsetData) { + var offset = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function (key) { + var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; + overflowOffsets[key] += offset[axis] * multiply; + }); + } + + return overflowOffsets; +} + +function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + placement = _options.placement, + boundary = _options.boundary, + rootBoundary = _options.rootBoundary, + padding = _options.padding, + flipVariations = _options.flipVariations, + _options$allowedAutoP = _options.allowedAutoPlacements, + allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; + var variation = getVariation(placement); + var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { + return getVariation(placement) === variation; + }) : basePlacements; + var allowedPlacements = placements$1.filter(function (placement) { + return allowedAutoPlacements.indexOf(placement) >= 0; + }); + + if (allowedPlacements.length === 0) { + allowedPlacements = placements$1; + + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); + } + } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... + + + var overflows = allowedPlacements.reduce(function (acc, placement) { + acc[placement] = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding + })[getBasePlacement(placement)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function (a, b) { + return overflows[a] - overflows[b]; + }); +} + +function getExpandedFallbackPlacements(placement) { + if (getBasePlacement(placement) === auto) { + return []; + } + + var oppositePlacement = getOppositePlacement(placement); + return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; +} + +function flip(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + + if (state.modifiersData[name]._skip) { + return; + } + + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, + specifiedFallbackPlacements = options.fallbackPlacements, + padding = options.padding, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + _options$flipVariatio = options.flipVariations, + flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, + allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = getBasePlacement(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { + return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + flipVariations: flipVariations, + allowedAutoPlacements: allowedAutoPlacements + }) : placement); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements[0]; + + for (var i = 0; i < placements.length; i++) { + var placement = placements[i]; + + var _basePlacement = getBasePlacement(placement); + + var isStartVariation = getVariation(placement) === start; + var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? 'width' : 'height'; + var overflow = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + altBoundary: altBoundary, + padding: padding + }); + var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; + + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = getOppositePlacement(mainVariationSide); + } + + var altVariationSide = getOppositePlacement(mainVariationSide); + var checks = []; + + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + + if (checks.every(function (check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + + checksMap.set(placement, checks); + } + + if (makeFallbackChecks) { + // `2` may be desired in some cases – research later + var numberOfChecks = flipVariations ? 3 : 1; + + var _loop = function _loop(_i) { + var fittingPlacement = placements.find(function (placement) { + var checks = checksMap.get(placement); + + if (checks) { + return checks.slice(0, _i).every(function (check) { + return check; + }); + } + }); + + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + + if (_ret === "break") break; + } + } + + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } +} // eslint-disable-next-line import/no-unused-modules + + +var flip$1 = { + name: 'flip', + enabled: true, + phase: 'main', + fn: flip, + requiresIfExists: ['offset'], + data: { + _skip: false + } +}; + +function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; +} + +function isAnySideFullyClipped(overflow) { + return [top, right, bottom, left].some(function (side) { + return overflow[side] >= 0; + }); +} + +function hide(_ref) { + var state = _ref.state, + name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = detectOverflow(state, { + elementContext: 'reference' + }); + var popperAltOverflow = detectOverflow(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets: referenceClippingOffsets, + popperEscapeOffsets: popperEscapeOffsets, + isReferenceHidden: isReferenceHidden, + hasPopperEscaped: hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-reference-hidden': isReferenceHidden, + 'data-popper-escaped': hasPopperEscaped + }); +} // eslint-disable-next-line import/no-unused-modules + + +var hide$1 = { + name: 'hide', + enabled: true, + phase: 'main', + requiresIfExists: ['preventOverflow'], + fn: hide +}; + +function distanceAndSkiddingToXY(placement, rects, offset) { + var basePlacement = getBasePlacement(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + + var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { + placement: placement + })) : offset, + skidding = _ref[0], + distance = _ref[1]; + + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} + +function offset(_ref2) { + var state = _ref2.state, + options = _ref2.options, + name = _ref2.name; + var _options$offset = options.offset, + offset = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function (acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); + return acc; + }, {}); + var _data$state$placement = data[state.placement], + x = _data$state$placement.x, + y = _data$state$placement.y; + + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var offset$1 = { + name: 'offset', + enabled: true, + phase: 'main', + requires: ['popperOffsets'], + fn: offset +}; + +function popperOffsets(_ref) { + var state = _ref.state, + name = _ref.name; + // Offsets are the actual position the popper needs to have to be + // properly positioned near its reference element + // This is the most basic placement, and will be adjusted by + // the modifiers in the next step + state.modifiersData[name] = computeOffsets({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: 'absolute', + placement: state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var popperOffsets$1 = { + name: 'popperOffsets', + enabled: true, + phase: 'read', + fn: popperOffsets, + data: {} +}; + +function getAltAxis(axis) { + return axis === 'x' ? 'y' : 'x'; +} + +function preventOverflow(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + padding = options.padding, + _options$tether = options.tether, + tether = _options$tether === void 0 ? true : _options$tether, + _options$tetherOffset = options.tetherOffset, + tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = detectOverflow(state, { + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + altBoundary: altBoundary + }); + var basePlacement = getBasePlacement(state.placement); + var variation = getVariation(state.placement); + var isBasePlacement = !variation; + var mainAxis = getMainAxisFromPlacement(basePlacement); + var altAxis = getAltAxis(mainAxis); + var popperOffsets = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var data = { + x: 0, + y: 0 + }; + + if (!popperOffsets) { + return; + } + + if (checkMainAxis || checkAltAxis) { + var mainSide = mainAxis === 'y' ? top : left; + var altSide = mainAxis === 'y' ? bottom : right; + var len = mainAxis === 'y' ? 'height' : 'width'; + var offset = popperOffsets[mainAxis]; + var min$1 = popperOffsets[mainAxis] + overflow[mainSide]; + var max$1 = popperOffsets[mainAxis] - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go + // outside the reference bounds + + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want + // to include its full size in the calculation. If the reference is small + // and near the edge of a boundary, the popper can overflow even if the + // reference is not overflowing as well (e.g. virtual elements with no + // width or height) + + var arrowLen = within(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue; + var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0; + var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset; + var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue; + + if (checkMainAxis) { + var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); + popperOffsets[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset; + } + + if (checkAltAxis) { + var _mainSide = mainAxis === 'x' ? top : left; + + var _altSide = mainAxis === 'x' ? bottom : right; + + var _offset = popperOffsets[altAxis]; + + var _min = _offset + overflow[_mainSide]; + + var _max = _offset - overflow[_altSide]; + + var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max); + + popperOffsets[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var preventOverflow$1 = { + name: 'preventOverflow', + enabled: true, + phase: 'main', + fn: preventOverflow, + requiresIfExists: ['offset'] +}; + +function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; +} + +function getNodeScroll(node) { + if (node === getWindow(node) || !isHTMLElement(node)) { + return getWindowScroll(node); + } else { + return getHTMLElementScroll(node); + } +} + +// Composite means it takes into account transforms as well as layout. + +function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement); + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 + isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +} + +function order(modifiers) { + var map = new Map(); + var visited = new Set(); + var result = []; + modifiers.forEach(function (modifier) { + map.set(modifier.name, modifier); + }); // On visiting object, check for its dependencies and visit them recursively + + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function (dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + + modifiers.forEach(function (modifier) { + if (!visited.has(modifier.name)) { + // check for visited object + sort(modifier); + } + }); + return result; +} + +function orderModifiers(modifiers) { + // order based on dependencies + var orderedModifiers = order(modifiers); // order based on phase + + return modifierPhases.reduce(function (acc, phase) { + return acc.concat(orderedModifiers.filter(function (modifier) { + return modifier.phase === phase; + })); + }, []); +} + +function debounce(fn) { + var pending; + return function () { + if (!pending) { + pending = new Promise(function (resolve) { + Promise.resolve().then(function () { + pending = undefined; + resolve(fn()); + }); + }); + } + + return pending; + }; +} + +function format(str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return [].concat(args).reduce(function (p, c) { + return p.replace(/%s/, c); + }, str); +} + +var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; +var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; +var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; +function validateModifiers(modifiers) { + modifiers.forEach(function (modifier) { + Object.keys(modifier).forEach(function (key) { + switch (key) { + case 'name': + if (typeof modifier.name !== 'string') { + console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); + } + + break; + + case 'enabled': + if (typeof modifier.enabled !== 'boolean') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); + } + + case 'phase': + if (modifierPhases.indexOf(modifier.phase) < 0) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); + } + + break; + + case 'fn': + if (typeof modifier.fn !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'effect': + if (typeof modifier.effect !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'requires': + if (!Array.isArray(modifier.requires)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); + } + + break; + + case 'requiresIfExists': + if (!Array.isArray(modifier.requiresIfExists)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); + } + + break; + + case 'options': + case 'data': + break; + + default: + console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { + return "\"" + s + "\""; + }).join(', ') + "; but \"" + key + "\" was provided."); + } + + modifier.requires && modifier.requires.forEach(function (requirement) { + if (modifiers.find(function (mod) { + return mod.name === requirement; + }) == null) { + console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); + } + }); + }); + }); +} + +function uniqueBy(arr, fn) { + var identifiers = new Set(); + return arr.filter(function (item) { + var identifier = fn(item); + + if (!identifiers.has(identifier)) { + identifiers.add(identifier); + return true; + } + }); +} + +function mergeByName(modifiers) { + var merged = modifiers.reduce(function (merged, current) { + var existing = merged[current.name]; + merged[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged; + }, {}); // IE11 does not support Object.values + + return Object.keys(merged).map(function (key) { + return merged[key]; + }); +} + +var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; +var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; +var DEFAULT_OPTIONS = { + placement: 'bottom', + modifiers: [], + strategy: 'absolute' +}; + +function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return !args.some(function (element) { + return !(element && typeof element.getBoundingClientRect === 'function'); + }); +} + +function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + + var _generatorOptions = generatorOptions, + _generatorOptions$def = _generatorOptions.defaultModifiers, + defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, + _generatorOptions$def2 = _generatorOptions.defaultOptions, + defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper(reference, popper, options) { + if (options === void 0) { + options = defaultOptions; + } + + var state = { + placement: 'bottom', + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), + modifiersData: {}, + elements: { + reference: reference, + popper: popper + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state: state, + setOptions: function setOptions(options) { + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions, state.options, options); + state.scrollParents = { + reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], + popper: listScrollParents(popper) + }; // Orders the modifiers based on their dependencies and `phase` + // properties + + var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers + + state.orderedModifiers = orderedModifiers.filter(function (m) { + return m.enabled; + }); // Validate the provided modifiers so that the consumer will get warned + // if one of the modifiers is invalid for any reason + + if (process.env.NODE_ENV !== "production") { + var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) { + var name = _ref.name; + return name; + }); + validateModifiers(modifiers); + + if (getBasePlacement(state.options.placement) === auto) { + var flipModifier = state.orderedModifiers.find(function (_ref2) { + var name = _ref2.name; + return name === 'flip'; + }); + + if (!flipModifier) { + console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); + } + } + + var _getComputedStyle = getComputedStyle(popper), + marginTop = _getComputedStyle.marginTop, + marginRight = _getComputedStyle.marginRight, + marginBottom = _getComputedStyle.marginBottom, + marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can + // cause bugs with positioning, so we'll warn the consumer + + + if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { + return parseFloat(margin); + })) { + console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); + } + } + + runModifierEffects(); + return instance.update(); + }, + // Sync update – it will always be executed, even if not necessary. This + // is useful for low frequency updates where sync behavior simplifies the + // logic. + // For high frequency updates (e.g. `resize` and `scroll` events), always + // prefer the async Popper#update method + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + + var _state$elements = state.elements, + reference = _state$elements.reference, + popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements + // anymore + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return; + } // Store the reference and popper rects to be read by modifiers + + + state.rects = { + reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), + popper: getLayoutRect(popper) + }; // Modifiers have the ability to reset the current update cycle. The + // most common use case for this is the `flip` modifier changing the + // placement, which then needs to re-run all the modifiers, because the + // logic was previously ran for the previous placement and is therefore + // stale/incorrect + + state.reset = false; + state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier + // is filled with the initial data specified by the modifier. This means + // it doesn't persist and is fresh on each update. + // To ensure persistent data, use `${name}#persistent` + + state.orderedModifiers.forEach(function (modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + var __debug_loops__ = 0; + + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (process.env.NODE_ENV !== "production") { + __debug_loops__ += 1; + + if (__debug_loops__ > 100) { + console.error(INFINITE_LOOP_ERROR); + break; + } + } + + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + + var _state$orderedModifie = state.orderedModifiers[index], + fn = _state$orderedModifie.fn, + _state$orderedModifie2 = _state$orderedModifie.options, + _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, + name = _state$orderedModifie.name; + + if (typeof fn === 'function') { + state = fn({ + state: state, + options: _options, + name: name, + instance: instance + }) || state; + } + } + }, + // Async and optimistically optimized update – it will not be executed if + // not necessary (debounced to run at most once-per-tick) + update: debounce(function () { + return new Promise(function (resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return instance; + } + + instance.setOptions(options).then(function (state) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state); + } + }); // Modifiers have the ability to execute arbitrary code before the first + // update cycle runs. They will be executed in the same order as the update + // cycle. This is useful when a modifier adds some persistent data that + // other modifiers need to use, but the modifier is run after the dependent + // one. + + function runModifierEffects() { + state.orderedModifiers.forEach(function (_ref3) { + var name = _ref3.name, + _ref3$options = _ref3.options, + options = _ref3$options === void 0 ? {} : _ref3$options, + effect = _ref3.effect; + + if (typeof effect === 'function') { + var cleanupFn = effect({ + state: state, + name: name, + instance: instance, + options: options + }); + + var noopFn = function noopFn() {}; + + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + + function cleanupModifierEffects() { + effectCleanupFns.forEach(function (fn) { + return fn(); + }); + effectCleanupFns = []; + } + + return instance; + }; +} + +var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; +var createPopper = /*#__PURE__*/popperGenerator({ + defaultModifiers: defaultModifiers +}); // eslint-disable-next-line import/no-unused-modules + +// Stole All this from Liam's Periodic Notes Plugin: https://github.com/liamcain/obsidian-periodic-notes +class Suggest { + constructor(owner, containerEl, scope) { + this.owner = owner; + this.containerEl = containerEl; + containerEl.on("click", ".suggestion-item", this.onSuggestionClick.bind(this)); + containerEl.on("mousemove", ".suggestion-item", this.onSuggestionMouseover.bind(this)); + scope.register([], "ArrowUp", (event) => { + if (!event.isComposing) { + this.setSelectedItem(this.selectedItem - 1, true); + return false; + } + }); + scope.register([], "ArrowDown", (event) => { + if (!event.isComposing) { + this.setSelectedItem(this.selectedItem + 1, true); + return false; + } + }); + scope.register([], "Enter", (event) => { + if (!event.isComposing) { + this.useSelectedItem(event); + return false; + } + }); + } + onSuggestionClick(event, el) { + event.preventDefault(); + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + this.useSelectedItem(event); + } + onSuggestionMouseover(_event, el) { + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + } + setSuggestions(values) { + this.containerEl.empty(); + const suggestionEls = []; + values.forEach((value) => { + const suggestionEl = this.containerEl.createDiv("suggestion-item"); + this.owner.renderSuggestion(value, suggestionEl); + suggestionEls.push(suggestionEl); + }); + this.values = values; + this.suggestions = suggestionEls; + this.setSelectedItem(0, false); + } + useSelectedItem(event) { + const currentValue = this.values[this.selectedItem]; + if (currentValue) { + this.owner.selectSuggestion(currentValue, event); + } + } + setSelectedItem(selectedIndex, scrollIntoView) { + const normalizedIndex = wrapAround(selectedIndex, this.suggestions.length); + const prevSelectedSuggestion = this.suggestions[this.selectedItem]; + const selectedSuggestion = this.suggestions[normalizedIndex]; + prevSelectedSuggestion?.removeClass("is-selected"); + selectedSuggestion?.addClass("is-selected"); + this.selectedItem = normalizedIndex; + if (scrollIntoView) { + selectedSuggestion.scrollIntoView(false); + } + } +} +class TextInputSuggest { + constructor(app, inputEl) { + this.app = app; + this.inputEl = inputEl; + this.scope = new obsidian.Scope(); + this.suggestEl = createDiv("suggestion-container"); + const suggestion = this.suggestEl.createDiv("suggestion"); + this.suggest = new Suggest(this, suggestion, this.scope); + this.scope.register([], "Escape", this.close.bind(this)); + this.inputEl.addEventListener("input", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("focus", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("blur", this.close.bind(this)); + this.suggestEl.on("mousedown", ".suggestion-container", (event) => { + event.preventDefault(); + }); + } + onInputChanged() { + const inputStr = this.inputEl.value; + const suggestions = this.getSuggestions(inputStr); + if (suggestions.length > 0) { + this.suggest.setSuggestions(suggestions); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.open(this.app.dom.appContainerEl, this.inputEl); + } + } + open(container, inputEl) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.app.keymap.pushScope(this.scope); + container.appendChild(this.suggestEl); + this.popper = createPopper(inputEl, this.suggestEl, { + placement: "bottom-start", + modifiers: [ + { + name: "sameWidth", + enabled: true, + fn: ({ state, instance }) => { + // Note: positioning needs to be calculated twice - + // first pass - positioning it according to the width of the popper + // second pass - position it with the width bound to the reference element + // we need to early exit to avoid an infinite loop + const targetWidth = `${state.rects.reference.width}px`; + if (state.styles.popper.width === targetWidth) { + return; + } + state.styles.popper.width = targetWidth; + instance.update(); + }, + phase: "beforeWrite", + requires: ["computeStyles"], + }, + ], + }); + } + close() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.app.keymap.popScope(this.scope); + this.suggest.setSuggestions([]); + this.popper && this.popper.destroy(); + this.suggestEl.detach(); + } +} +class CommandSuggest extends TextInputSuggest { + getSuggestions(inputStr) { + const commands = this.app.commands.commands; + const commandNames = []; + const inputLowerCase = inputStr.toLowerCase(); + for (const command in commands) { + const commandObj = commands[command]; + if (commandObj.name.toLowerCase().contains(inputLowerCase)) { + commandNames.push(commandObj); + } + } + return commandNames; + } + renderSuggestion(command, el) { + el.setText(command.name); + } + selectSuggestion(command) { + this.inputEl.value = command.name; + this.inputEl.trigger("input"); + this.close(); + } +} +class TemplateSuggest extends TextInputSuggest { + constructor() { + super(...arguments); + this.templatesEnabled = this.app.internalPlugins.plugins.templates.enabled; + this.templaterPlugin = this.app.plugins.plugins["templater-obsidian"]; + // only run if templates plugin is enabled + this.folder = () => { + const folders = []; + if (this.templatesEnabled) { + const folder = this.app.internalPlugins.plugins.templates.instance.options + .folder; + if (folder) { + folders.push(folder.toLowerCase()); + } + if (this.templaterPlugin) { + const folder = this.templaterPlugin.settings.template_folder; + if (folder) { + folders.push(folder.toLowerCase()); + } + } + } + return folders[0] ? folders : undefined; + }; + } + getSuggestions(inputStr) { + const abstractFiles = this.app.vault.getAllLoadedFiles(); + const files = []; + const lowerCaseInputStr = inputStr.toLowerCase(); + const folders = this.folder(); + abstractFiles.forEach((file) => { + let exists = false; + folders && + folders.forEach((folder) => { + if (file.path.toLowerCase().contains(`${folder}/`)) { + exists = true; + } + }); + if (file instanceof obsidian.TFile && + file.extension === "md" && + exists && + file.path.toLowerCase().contains(lowerCaseInputStr)) { + files.push(file); + } + }); + return files; + } + renderSuggestion(file, el) { + el.setText(file.name.split(".")[0]); + } + selectSuggestion(file) { + this.inputEl.value = file.name.split(".")[0]; + this.inputEl.trigger("input"); + this.close(); + } +} +class ButtonSuggest extends TextInputSuggest { + getSuggestions() { + const buttonStore = getStore(this.app.isMobile); + const buttons = []; + buttonStore.forEach((button) => { + const trimmed = button.id.split("-")[1]; + buttons.push(trimmed); + }); + return buttons; + } + renderSuggestion(button, el) { + el.setText(button); + } + selectSuggestion(button) { + this.inputEl.value = this.inputEl.value + button; + this.inputEl.trigger("input"); + this.close(); + } +} + +class ButtonModal extends obsidian.Modal { + constructor(app) { + super(app); + this.buttonPreviewEl = createEl("p"); + this.commandSuggestEl = createEl("input", { type: "text" }); + this.fileSuggestEl = createEl("input", { type: "text" }); + this.removeSuggestEl = createEl("input", { type: "text" }); + this.swapSuggestEl = createEl("input", { type: "text" }); + this.idSuggestEl = createEl("input", { type: "text" }); + this.outputObject = { + name: "", + type: "", + action: "", + swap: "", + remove: "", + replace: "", + id: "", + templater: false, + class: "", + color: "", + blockId: "", + }; + this.commandSuggest = new CommandSuggest(this.app, this.commandSuggestEl); + this.commandSuggestEl.placeholder = "Toggle Pin"; + this.commandSuggestEl.addEventListener("change", (e) => { + this.outputObject.action = e.target.value; + }); + this.commandSuggestEl.addEventListener("blur", (e) => { + this.outputObject.action = e.target.value; + }); + this.fileSuggest = new TemplateSuggest(this.app, this.fileSuggestEl); + this.fileSuggestEl.placeholder = "My Template"; + this.fileSuggestEl.addEventListener("change", (e) => { + this.outputObject.action = e.target.value; + }); + this.fileSuggestEl.addEventListener("blur", (e) => { + this.outputObject.action = e.target.value; + }); + this.removeSuggest = new ButtonSuggest(this.app, this.removeSuggestEl); + this.removeSuggestEl.value = "true"; + this.removeSuggestEl.addEventListener("change", (e) => { + this.outputObject.remove = e.target.value; + }); + this.removeSuggestEl.addEventListener("blur", (e) => { + this.outputObject.remove = e.target.value; + }); + this.swapSuggest = new ButtonSuggest(this.app, this.swapSuggestEl); + this.swapSuggestEl.addEventListener("change", (e) => { + this.outputObject.swap = e.target.value; + }); + this.swapSuggestEl.addEventListener("blur", (e) => { + this.outputObject.swap = e.target.value; + }); + this.idSuggest = new ButtonSuggest(this.app, this.idSuggestEl); + this.idSuggestEl.addEventListener("change", (e) => { + this.outputObject.id = e.target.value; + }); + this.idSuggestEl.addEventListener("blur", (e) => { + this.outputObject.id = e.target.value; + }); + this.swapSuggestEl.placeholder = "[idOne, idTwo]"; + } + onOpen() { + const { titleEl, contentEl } = this; + titleEl.setText("Button Maker"); + contentEl.addClass("button-maker"); + contentEl.createEl("form", {}, (formEl) => { + new obsidian.Setting(formEl) + .setName("Button Name") + .setDesc("What would you like to call this button?") + .addText((textEl) => { + textEl.setPlaceholder("My Awesome Button"); + textEl.onChange((value) => { + this.buttonPreviewEl.setText(value); + this.outputObject.name = value; + }); + window.setTimeout(() => textEl.inputEl.focus(), 10); + }); + const typeContainer = createEl("div"); + const typeTitle = createEl("span", { cls: "setting-item-title" }); + typeTitle.setText("Button Type"); + const typeDesc = createEl("div", { cls: "setting-item-description" }); + typeDesc.setText("What type of button are you making?"); + formEl.appendChild(typeContainer); + typeContainer.appendChild(typeTitle); + typeContainer.appendChild(typeDesc); + new obsidian.Setting(typeDesc).addDropdown((drop) => { + drop.addOption("pre", "Select a Button Type"); + drop.addOption("command", "Command - run a command prompt command"); + drop.addOption("link", "Link - open a url or uri"); + drop.addOption("template", "Template - insert or create notes from templates"); + drop.addOption("text", "Text - insert or create notes with text"); + drop.addOption("calculate", "Calculate - run a mathematical calculation"); + drop.addOption("swap", "Swap - Create a multi-purpose Inline Button from other Buttons"); + const action = formEl.createEl("div"); + drop.onChange((value) => { + this.outputObject.type = value; + if (value === "link") { + action.empty(); + new obsidian.Setting(action) + .setName("Link") + .setDesc("Enter a link to open") + .addText((textEl) => { + textEl.setPlaceholder("https://obsidian.md"); + textEl.onChange((value) => (this.outputObject.action = value)); + }); + } + if (value === "command") { + action.empty(); + new obsidian.Setting(action) + .setName("Command") + .setDesc("Enter a command to run") + .addText((textEl) => { + textEl.inputEl.replaceWith(this.commandSuggestEl); + }); + } + if (value.includes("template")) { + action.empty(); + new obsidian.Setting(action) + .setName("Template") + .setDesc("Select a template note and what should happen") + .addDropdown((drop) => { + drop.addOption("pre", "Do this..."); + drop.addOption("prepend template", "Prepend"); + drop.addOption("append template", "Append"); + drop.addOption("line template", "Line"); + drop.addOption("note template", "Note"); + drop.onChange((value) => { + this.outputObject.type = value; + if (value == "line template") { + new obsidian.Setting(action) + .setName("Line Number") + .setDesc("At which line should the template be inserted?") + .addText((textEl) => { + textEl.setPlaceholder("69"); + textEl.onChange((value) => { + this.outputObject.type = `line(${value}) template`; + }); + }); + } + if (value == "note template") { + new obsidian.Setting(action) + .setName("Note Name") + .setDesc("What should the new note be named?") + .addText((textEl) => { + textEl.setPlaceholder("My New Note"); + new obsidian.Setting(action) + .setName("Split") + .setDesc("Should the new note open in a split pane?") + .addToggle((toggleEl) => { + this.outputObject.type = `note(${textEl.getValue}) template`; + textEl.onChange((textVal) => { + const toggleVal = toggleEl.getValue(); + if (toggleVal) { + this.outputObject.type = `note(${textVal}, split) template`; + } + if (!toggleVal) { + this.outputObject.type = `note(${textVal}) template`; + } + }); + toggleEl.onChange((toggleVal) => { + const textVal = textEl.getValue(); + if (toggleVal) { + this.outputObject.type = `note(${textVal}, split) template`; + } + if (!toggleVal) { + this.outputObject.type = `note(${textVal}) template`; + } + }); + }); + }); + } + }); + }) + .addText((textEl) => { + textEl.inputEl.replaceWith(this.fileSuggestEl); + }); + } + if (value.includes("text")) { + action.empty(); + new obsidian.Setting(action) + .setName("Text") + .setDesc("What text and where should it go?") + .addDropdown((drop) => { + drop.addOption("pre", "Do this..."); + drop.addOption("prepend text", "Prepend"); + drop.addOption("append text", "Append"); + drop.addOption("line text", "Line"); + drop.addOption("note text", "Note"); + drop.onChange((value) => { + this.outputObject.type = value; + if (value == "line text") { + new obsidian.Setting(action) + .setName("Line Number") + .setDesc("At which line should the template be inserted?") + .addText((textEl) => { + textEl.setPlaceholder("69"); + textEl.onChange((value) => { + this.outputObject.type = `line(${value}) text`; + }); + }); + } + if (value == "note text") { + new obsidian.Setting(action) + .setName("Note Name") + .setDesc("What should the new note be named?") + .addText((textEl) => { + textEl.setPlaceholder("My New Note"); + new obsidian.Setting(action) + .setName("Split") + .setDesc("Should the new note open in a split pane?") + .addToggle((toggleEl) => { + this.outputObject.type = `note(${textEl.getValue}) text`; + textEl.onChange((textVal) => { + const toggleVal = toggleEl.getValue(); + if (toggleVal) { + this.outputObject.type = `note(${textVal}, split) text`; + } + if (!toggleVal) { + this.outputObject.type = `note(${textVal}) text`; + } + }); + toggleEl.onChange((toggleVal) => { + const textVal = textEl.getValue(); + if (toggleVal) { + this.outputObject.type = `note(${textVal}, split) text`; + } + if (!toggleVal) { + this.outputObject.type = `note(${textVal}) text`; + } + }); + }); + }); + } + }); + }) + .addText((textEl) => { + textEl.setPlaceholder("My Text to Insert"); + textEl.onChange((value) => { + this.outputObject.action = value; + }); + }); + } + if (value === "calculate") { + action.empty(); + new obsidian.Setting(action) + .setName("Calculate") + .setDesc("Enter a calculation, you can reference a line number with $LineNumber") + .addText((textEl) => { + textEl.setPlaceholder("2+$10"); + textEl.onChange((value) => (this.outputObject.action = value)); + }); + } + if (value === "swap") { + this.outputObject.type = ""; + action.empty(); + new obsidian.Setting(action) + .setName("Swap") + .setDesc("choose buttons to be included in the Inline Swap Button") + .addText((textEl) => { + textEl.inputEl.replaceWith(this.swapSuggestEl); + }); + } + }); + }); + new obsidian.Setting(formEl) + .setName("Button Block ID") + .setDesc("Provide a custom button-block-id") + .addText((textEl) => { + textEl.setPlaceholder("buttonId"); + textEl.onChange((value) => { + this.outputObject.blockId = value; + }); + }); + new obsidian.Setting(formEl) + .setName("Remove") + .setDesc("Would you like to remove this button (or other buttons) after clicking?") + .addToggle((toggleEl) => { + toggleEl.onChange((value) => { + if (value) { + new obsidian.Setting(remove) + .setName("Select Remove") + .setDesc("Use true to remove this button, or supply an [array] of button block-ids") + .addText((textEl) => { + textEl.inputEl.replaceWith(this.removeSuggestEl); + }); + } + if (!value) { + this.outputObject.remove = ""; + remove.empty(); + } + }); + }); + const remove = formEl.createEl("div"); + new obsidian.Setting(formEl) + .setName("Replace") + .setDesc("Would you like to replace lines in the note after clicking?") + .addToggle((toggleEl) => { + toggleEl.onChange((value) => { + if (value) { + new obsidian.Setting(replace) + .setName("Select Lines") + .setDesc("Supply an array of [startingLine, endingLine] to be replaced") + .addText((textEl) => { + textEl.setValue("[]"); + textEl.onChange((value) => (this.outputObject.replace = value)); + }); + } + if (!value) { + replace.empty(); + } + }); + }); + const replace = formEl.createEl("div"); + new obsidian.Setting(formEl) + .setName("Inherit") + .setDesc("Would you like to inherit args by adding an existing button block-id?") + .addToggle((toggleEl) => { + toggleEl.onChange((value) => { + if (value) { + new obsidian.Setting(id) + .setName("id") + .setDesc("inherit from other Buttons by adding their button block-id") + .addText((textEl) => { + textEl.inputEl.replaceWith(this.idSuggestEl); + }); + } + if (!value) { + this.outputObject.replace = ""; + id.empty(); + } + }); + }); + const id = formEl.createEl("div"); + new obsidian.Setting(formEl) + .setName("Templater") + .setDesc("Do you want to convert a templater command inside your Button on each click?") + .addToggle((toggleEl) => { + toggleEl.setTooltip("Do not use for inline Button"); + toggleEl.onChange((value) => { + this.outputObject.templater = value; + }); + }); + new obsidian.Setting(formEl) + .setName("Custom Class") + .setDesc("Add a custom class for button styling") + .addText((textEl) => { + textEl.onChange((value) => { + this.buttonPreviewEl.setAttribute("class", value); + this.outputObject.class = value; + if (value === "") { + this.buttonPreviewEl.setAttribute("class", "button-default"); + } + }); + }); + new obsidian.Setting(formEl) + .setName("Color") + .setDesc("What color would you like your button to be?") + .addDropdown((drop) => { + drop.addOption("default", "Default Color"); + drop.addOption("blue", "Blue"); + drop.addOption("red", "Red"); + drop.addOption("green", "Green"); + drop.addOption("yellow", "Yellow"); + drop.addOption("purple", "Purple"); + drop.onChange((value) => { + this.outputObject.color = value; + const buttonClass = this.buttonPreviewEl + .getAttribute("class") + .replace(" blue", "") + .replace(" red", "") + .replace(" green", "") + .replace(" yellow", "") + .replace(" purple", ""); + if (value !== "default") { + this.buttonPreviewEl.setAttribute("class", `${buttonClass} ${value}`); + if (value === "blue") { + value = "#76b3fa"; + } + if (value === "purple") { + value = "#725585"; + } + this.buttonPreviewEl.setAttribute("style", `background: ${value}`); + } + else { + this.buttonPreviewEl.setAttribute("class", `${buttonClass}`); + this.buttonPreviewEl.removeAttribute("style"); + } + }); + }); + formEl.createDiv("modal-button-container", (buttonContainerEl) => { + buttonContainerEl + .createEl("button", { + attr: { type: "button" }, + cls: "button-default", + text: "Cancel", + }) + .addEventListener("click", () => this.close()); + buttonContainerEl.createEl("button", { + attr: { type: "submit" }, + cls: "button-default mod-cta", + text: "Insert Button", + }); + }); + formEl.addEventListener("submit", (e) => { + e.preventDefault(); + insertButton(this.app, this.outputObject); + this.close(); + }); + }); + contentEl.createEl("p").setText("Button Preview"); + this.buttonPreviewEl = createButton({ + app: this.app, + el: contentEl, + args: { name: "My Awesome Button" }, + }); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +} +class InlineButtonModal extends obsidian.Modal { + constructor(app) { + super(app); + this.buttonSuggestEl = createEl("input", { type: "text" }); + this.buttonSuggest = new ButtonSuggest(this.app, this.buttonSuggestEl); + this.buttonSuggestEl.setAttribute("style", "width: 100%; height: 40px"); + } + onOpen() { + const { titleEl, contentEl } = this; + titleEl.setText("Insert Inline Button"); + contentEl.createEl("form", {}, (formEl) => { + formEl.appendChild(this.buttonSuggestEl); + formEl.addEventListener("submit", (e) => { + e.preventDefault(); + insertInlineButton(this.app, this.buttonSuggestEl.value); + this.close(); + }); + }); + } + onClose() { + const { contentEl } = this; + contentEl.empty(); + } +} + +class ButtonsPlugin extends obsidian.Plugin { + constructor() { + super(...arguments); + this.storeEvents = new obsidian.Events(); + this.indexCount = 0; + } + async addButtonInEdit(app) { + let widget; + if (widget) { + widget.clear(); + } + const activeView = app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + const store = getStore(app.isMobile); + const buttonsInFile = store.filter((button) => button.path === activeView.file.path); + this.registerCodeMirror((cm) => { + buttonsInFile.forEach(async (button) => { + const widgetEl = document.createElement("div"); + const storeButton = await getButtonFromStore(app, { + id: button.id.split("-")[1], + }); + if (!app.isMobile && + storeButton && + storeButton?.args.editview === "true") { + widget = cm.addLineWidget(button.position.end.line + 1, createButton({ + app, + el: widgetEl, + args: storeButton.args, + inline: false, + id: button.id, + })); + } + }); + }); + } + } + async onload() { + this.buttonEvents = buttonEventListener(this.app, addButtonToStore); + this.closedFile = openFileListener(this.app, this.storeEvents, initializeButtonStore); + this.createButton = createButton; + this.storeEventsRef = this.storeEvents.on('index-complete', () => { + this.indexCount++; + }); + initializeButtonStore(this.app, this.storeEvents); + this.buttonEdit = openFileListener(this.app, this.storeEvents, this.addButtonInEdit.bind(this)); + this.addCommand({ + id: "button-maker", + name: "Button Maker", + callback: () => new ButtonModal(this.app).open(), + }); + this.addCommand({ + id: "inline-button", + name: "Insert Inline Button", + callback: () => new InlineButtonModal(this.app).open(), + }); + this.registerMarkdownCodeBlockProcessor("button", async (source, el) => { + // create an object out of the arguments + const activeView = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (activeView) { + addButtonToStore(this.app, activeView.file); + let args = createArgumentObject(source); + const storeArgs = await getButtonFromStore(this.app, args); + args = storeArgs ? storeArgs.args : args; + const id = storeArgs && storeArgs.id; + createButton({ app: this.app, el, args, inline: false, id }); + } + }); + this.registerMarkdownPostProcessor(async (el, ctx) => { + // Search for blocks inside this element; for each one, look for things of the form ` + const codeblocks = el.querySelectorAll("code"); + for (let index = 0; index < codeblocks.length; index++) { + const codeblock = codeblocks.item(index); + const text = codeblock.innerText.trim(); + if (text.startsWith("button")) { + const id = text.split("button-")[1].trim(); + if (this.indexCount < 2) { + this.storeEventsRef = this.storeEvents.on('index-complete', async () => { + this.indexCount++; + const args = await getButtonById(this.app, id); + if (args) { + ctx.addChild(new InlineButton(codeblock, this.app, args, id)); + } + }); + } + else { + const args = await getButtonById(this.app, id); + if (args) { + ctx.addChild(new InlineButton(codeblock, this.app, args, id)); + } + } + } + } + }); + } + onunload() { + this.app.metadataCache.offref(this.buttonEvents); + this.app.workspace.offref(this.closedFile); + this.app.workspace.offref(this.buttonEdit); + this.storeEvents.offref(this.storeEventsRef); + } +} +class InlineButton extends obsidian.MarkdownRenderChild { + constructor(el, app, args, id) { + super(el); + this.el = el; + this.app = app; + this.args = args; + this.id = id; + } + async onload() { + const button = createButton({ + app: this.app, + el: this.el, + args: this.args, + inline: true, + id: this.id, + }); + this.el.replaceWith(button); + } +} + +module.exports = ButtonsPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsic3JjL2J1dHRvblN0b3JlLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL2V2ZW50cy50cyIsIm5vZGVfbW9kdWxlcy9tYXRoLWV4cHJlc3Npb24tZXZhbHVhdG9yL3NyYy9tYXRoX2Z1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGgtZXhwcmVzc2lvbi1ldmFsdWF0b3Ivc3JjL2xleGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGgtZXhwcmVzc2lvbi1ldmFsdWF0b3Ivc3JjL3Bvc3RmaXguanMiLCJub2RlX21vZHVsZXMvbWF0aC1leHByZXNzaW9uLWV2YWx1YXRvci9zcmMvcG9zdGZpeF9ldmFsdWF0b3IuanMiLCJub2RlX21vZHVsZXMvbWF0aC1leHByZXNzaW9uLWV2YWx1YXRvci9zcmMvZm9ybXVsYV9ldmFsdWF0b3IuanMiLCJzcmMvaGFuZGxlcnMudHMiLCJzcmMvcGFyc2VyLnRzIiwic3JjL2J1dHRvblR5cGVzLnRzIiwic3JjL2J1dHRvbi50cyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2Zvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdmFsaWRhdGVNb2RpZmllcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VuaXF1ZUJ5LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanMiLCJzcmMvc3VnZ2VzdC50cyIsInNyYy9tb2RhbC50cyIsInNyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHAsIFRGaWxlLCBDYWNoZWRNZXRhZGF0YSwgRXZlbnRzIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBFeHRlbmRlZEJsb2NrQ2FjaGUsIEFyZ3VtZW50cyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVBcmd1bWVudE9iamVjdCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBidXR0b25TdG9yZTogRXh0ZW5kZWRCbG9ja0NhY2hlW107XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9yZSA9IChpc01vYmlsZTogYm9vbGVhbik6IEV4dGVuZGVkQmxvY2tDYWNoZVtdID0+XG4gIGlzTW9iaWxlID8gYnV0dG9uU3RvcmUgOiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnV0dG9uc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXplQnV0dG9uU3RvcmUgPSAoYXBwOiBBcHAsIHN0b3JlRXZlbnRzOiBFdmVudHMpOiB2b2lkID0+IHtcbiAgY29uc3QgZmlsZXMgPSBhcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xuICBjb25zdCBibG9ja3NBcnIgPSBmaWxlc1xuICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgcmV0dXJuIGJ1aWxkQnV0dG9uQXJyYXkoY2FjaGUsIGZpbGUpO1xuICAgIH0pXG4gICAgLmZpbHRlcigoYXJyKSA9PiBhcnIgIT09IHVuZGVmaW5lZClcbiAgICAuZmxhdCgpO1xuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImJ1dHRvbnNcIiwgSlNPTi5zdHJpbmdpZnkoYmxvY2tzQXJyKSk7XG4gIGJ1dHRvblN0b3JlID0gYmxvY2tzQXJyO1xuICBzdG9yZUV2ZW50cy50cmlnZ2VyKCdpbmRleC1jb21wbGV0ZScpXG59O1xuXG5leHBvcnQgY29uc3QgYWRkQnV0dG9uVG9TdG9yZSA9IChhcHA6IEFwcCwgZmlsZTogVEZpbGUpOiB2b2lkID0+IHtcbiAgY29uc3QgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gIGNvbnN0IGJ1dHRvbnMgPSBidWlsZEJ1dHRvbkFycmF5KGNhY2hlLCBmaWxlKTtcbiAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZShhcHAuaXNNb2JpbGUpO1xuICBjb25zdCBuZXdTdG9yZSA9XG4gICAgYnV0dG9ucyAmJiBzdG9yZVxuICAgICAgPyByZW1vdmVEdXBsaWNhdGVzKFsuLi5idXR0b25zLCAuLi5zdG9yZV0pXG4gICAgICA6IHN0b3JlXG4gICAgICA/IHJlbW92ZUR1cGxpY2F0ZXMoc3RvcmUpXG4gICAgICA6IGJ1dHRvbnNcbiAgICAgID8gcmVtb3ZlRHVwbGljYXRlcyhidXR0b25zKVxuICAgICAgOiBbXTtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJidXR0b25zXCIsIEpTT04uc3RyaW5naWZ5KG5ld1N0b3JlKSk7XG4gIGJ1dHRvblN0b3JlID0gbmV3U3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QnV0dG9uRnJvbVN0b3JlID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgYXJnczogQXJndW1lbnRzXG4pOiBQcm9taXNlPHsgYXJnczogQXJndW1lbnRzOyBpZDogc3RyaW5nIH0+IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZShhcHAuaXNNb2JpbGUpO1xuICBhcmdzLmlkO1xuICBpZiAoYXJncy5pZCkge1xuICAgIGNvbnN0IHN0b3JlZEJ1dHRvbiA9XG4gICAgICBzdG9yZSAmJlxuICAgICAgc3RvcmUuZmlsdGVyKFxuICAgICAgICAoaXRlbTogRXh0ZW5kZWRCbG9ja0NhY2hlKSA9PiBgYnV0dG9uLSR7YXJncy5pZH1gID09PSBpdGVtLmlkXG4gICAgICApWzBdO1xuICAgIGlmIChzdG9yZWRCdXR0b24pIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHN0b3JlZEJ1dHRvbi5wYXRoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlIGFzIFRGaWxlKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRBcnJheSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG4gICAgICBjb25zdCBidXR0b24gPSBjb250ZW50QXJyYXlcbiAgICAgICAgLnNsaWNlKFxuICAgICAgICAgIHN0b3JlZEJ1dHRvbi5wb3NpdGlvbi5zdGFydC5saW5lICsgMSxcbiAgICAgICAgICBzdG9yZWRCdXR0b24ucG9zaXRpb24uZW5kLmxpbmVcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICAgIGNvbnN0IHN0b3JlZEFyZ3MgPSBjcmVhdGVBcmd1bWVudE9iamVjdChidXR0b24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXJnczogeyAuLi5zdG9yZWRBcmdzLCAuLi5hcmdzIH0sXG4gICAgICAgIGlkOiBzdG9yZWRCdXR0b24uaWQuc3BsaXQoXCJidXR0b24tXCIpWzFdLFxuICAgICAgfTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCdXR0b25CeUlkID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgaWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxBcmd1bWVudHM+ID0+IHtcbiAgY29uc3Qgc3RvcmUgPSBnZXRTdG9yZShhcHAuaXNNb2JpbGUpO1xuICBjb25zdCBzdG9yZWRCdXR0b24gPSBzdG9yZS5maWx0ZXIoXG4gICAgKGl0ZW06IEV4dGVuZGVkQmxvY2tDYWNoZSkgPT4gYGJ1dHRvbi0ke2lkfWAgPT09IGl0ZW0uaWRcbiAgKVswXTtcbiAgaWYgKHN0b3JlZEJ1dHRvbikge1xuICAgIGNvbnN0IGZpbGUgPSBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHN0b3JlZEJ1dHRvbi5wYXRoKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSBhcyBURmlsZSk7XG4gICAgY29uc3QgY29udGVudEFycmF5ID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICBjb25zdCBidXR0b24gPSBjb250ZW50QXJyYXlcbiAgICAgIC5zbGljZShcbiAgICAgICAgc3RvcmVkQnV0dG9uLnBvc2l0aW9uLnN0YXJ0LmxpbmUgKyAxLFxuICAgICAgICBzdG9yZWRCdXR0b24ucG9zaXRpb24uZW5kLmxpbmVcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBjcmVhdGVBcmd1bWVudE9iamVjdChidXR0b24pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QnV0dG9uU3dhcEJ5SWQgPSBhc3luYyAoXG4gIGFwcDogQXBwLFxuICBpZDogc3RyaW5nXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGFwcC5pc01vYmlsZSk7XG4gIGNvbnN0IHN0b3JlZEJ1dHRvbiA9IHN0b3JlLmZpbHRlcihcbiAgICAoaXRlbTogRXh0ZW5kZWRCbG9ja0NhY2hlKSA9PiBgYnV0dG9uLSR7aWR9YCA9PT0gaXRlbS5pZFxuICApWzBdO1xuICBpZiAoc3RvcmVkQnV0dG9uKSB7XG4gICAgcmV0dXJuIHN0b3JlZEJ1dHRvbi5zd2FwO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0QnV0dG9uU3dhcEJ5SWQgPSBhc3luYyAoXG4gIGFwcDogQXBwLFxuICBpZDogc3RyaW5nLFxuICBuZXdTd2FwOiBudW1iZXJcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGFwcC5pc01vYmlsZSk7XG4gIGNvbnN0IHN0b3JlZEJ1dHRvbiA9IHN0b3JlLmZpbHRlcihcbiAgICAoaXRlbTogRXh0ZW5kZWRCbG9ja0NhY2hlKSA9PiBgYnV0dG9uLSR7aWR9YCA9PT0gaXRlbS5pZFxuICApWzBdO1xuICBpZiAoc3RvcmVkQnV0dG9uKSB7XG4gICAgc3RvcmVkQnV0dG9uLnN3YXAgPSBuZXdTd2FwO1xuICAgIGNvbnN0IG5ld1N0b3JlID0gcmVtb3ZlRHVwbGljYXRlcyhbLi4uc3RvcmUsIHN0b3JlZEJ1dHRvbl0pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiYnV0dG9uc1wiLCBKU09OLnN0cmluZ2lmeShuZXdTdG9yZSkpO1xuICAgIGJ1dHRvblN0b3JlID0gbmV3U3RvcmU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZEJ1dHRvbkFycmF5ID0gKFxuICBjYWNoZTogQ2FjaGVkTWV0YWRhdGEsXG4gIGZpbGU6IFRGaWxlXG4pOiBFeHRlbmRlZEJsb2NrQ2FjaGVbXSA9PiB7XG4gIGNvbnN0IGJsb2NrcyA9IGNhY2hlICYmIGNhY2hlLmJsb2NrcztcbiAgaWYgKGJsb2Nrcykge1xuICAgIGNvbnN0IGJsb2NrS2V5cyA9IEFycmF5LmZyb20oT2JqZWN0LmtleXMoYmxvY2tzKSk7XG4gICAgY29uc3QgYmxvY2tBcnJheTogRXh0ZW5kZWRCbG9ja0NhY2hlW10gPSBibG9ja0tleXNcbiAgICAgIC5tYXAoKGtleSkgPT4gYmxvY2tzW2tleV0pXG4gICAgICAubWFwKChvYmo6IEV4dGVuZGVkQmxvY2tDYWNoZSkgPT4ge1xuICAgICAgICBvYmpbXCJwYXRoXCJdID0gZmlsZS5wYXRoO1xuICAgICAgICBvYmpbXCJzd2FwXCJdID0gMDtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suaWQuaW5jbHVkZXMoXCJidXR0b25cIikpO1xuICAgIHJldHVybiBibG9ja0FycmF5O1xuICB9XG59O1xuXG5mdW5jdGlvbiByZW1vdmVEdXBsaWNhdGVzKGFycjogRXh0ZW5kZWRCbG9ja0NhY2hlW10pIHtcbiAgcmV0dXJuIGFyciAmJiBhcnJbMF1cbiAgICA/IGFyci5maWx0ZXIoXG4gICAgICAgICh2LCBpLCBhKSA9PlxuICAgICAgICAgIGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHQpID0+XG4gICAgICAgICAgICAgIHQuaWQgPT09IHYuaWQgfHxcbiAgICAgICAgICAgICAgKHQucGF0aCA9PT0gdi5wYXRoICYmXG4gICAgICAgICAgICAgICAgdC5wb3NpdGlvbi5zdGFydC5saW5lID09PSB2LnBvc2l0aW9uLnN0YXJ0LmxpbmUgJiZcbiAgICAgICAgICAgICAgICB0LnBvc2l0aW9uLmVuZC5saW5lID09PSB2LnBvc2l0aW9uLmVuZC5saW5lKVxuICAgICAgICAgICkgPT09IGlcbiAgICAgIClcbiAgICA6IGFycjtcbn1cbiIsImltcG9ydCB7IE1hcmtkb3duVmlldywgQXBwLCBOb3RpY2UsIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBBcmd1bWVudHMsIFBvc2l0aW9uIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGFkZEJ1dHRvblRvU3RvcmUgfSBmcm9tIFwiLi9idXR0b25TdG9yZVwiO1xuXG5mdW5jdGlvbiBuYW5vaWQobnVtOiBudW1iZXIpIHtcbiAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gIGNvbnN0IGNoYXJhY3RlcnMgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtOyBpKyspIHtcbiAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmludGVyZmFjZSBPdXRwdXRPYmplY3Qge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIHN3YXA6IHN0cmluZztcbiAgcmVtb3ZlOiBzdHJpbmc7XG4gIHJlcGxhY2U6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdGVtcGxhdGVyOiBib29sZWFuO1xuICBjbGFzczogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICBibG9ja0lkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRCdXR0b24gPSAoYXBwOiBBcHAsIG91dHB1dE9iamVjdDogT3V0cHV0T2JqZWN0KTogdm9pZCA9PiB7XG4gIGNvbnN0IGJ1dHRvbkFyciA9IFtdO1xuICBidXR0b25BcnIucHVzaChcImBgYGJ1dHRvblwiKTtcbiAgb3V0cHV0T2JqZWN0Lm5hbWUgJiYgYnV0dG9uQXJyLnB1c2goYG5hbWUgJHtvdXRwdXRPYmplY3QubmFtZX1gKTtcbiAgb3V0cHV0T2JqZWN0LnR5cGUgJiYgYnV0dG9uQXJyLnB1c2goYHR5cGUgJHtvdXRwdXRPYmplY3QudHlwZX1gKTtcbiAgb3V0cHV0T2JqZWN0LmFjdGlvbiAmJiBidXR0b25BcnIucHVzaChgYWN0aW9uICR7b3V0cHV0T2JqZWN0LmFjdGlvbn1gKTtcbiAgb3V0cHV0T2JqZWN0LmlkICYmIGJ1dHRvbkFyci5wdXNoKGBpZCAke291dHB1dE9iamVjdC5pZH1gKTtcbiAgb3V0cHV0T2JqZWN0LnN3YXAgJiYgYnV0dG9uQXJyLnB1c2goYHN3YXAgJHtvdXRwdXRPYmplY3Quc3dhcH1gKTtcbiAgb3V0cHV0T2JqZWN0LnJlbW92ZSAmJiBidXR0b25BcnIucHVzaChgcmVtb3ZlICR7b3V0cHV0T2JqZWN0LnJlbW92ZX1gKTtcbiAgb3V0cHV0T2JqZWN0LnJlcGxhY2UgJiYgYnV0dG9uQXJyLnB1c2goYHJlcGxhY2UgJHtvdXRwdXRPYmplY3QucmVwbGFjZX1gKTtcbiAgb3V0cHV0T2JqZWN0LnRlbXBsYXRlciA9PT0gdHJ1ZSAmJlxuICAgIGJ1dHRvbkFyci5wdXNoKGB0ZW1wbGF0ZXIgJHtvdXRwdXRPYmplY3QudGVtcGxhdGVyfWApO1xuICBvdXRwdXRPYmplY3QuY29sb3IgJiYgYnV0dG9uQXJyLnB1c2goYGNvbG9yICR7b3V0cHV0T2JqZWN0LmNvbG9yfWApO1xuICBvdXRwdXRPYmplY3QuY2xhc3MgJiYgYnV0dG9uQXJyLnB1c2goYGNsYXNzICR7b3V0cHV0T2JqZWN0LmNsYXNzfWApO1xuICBidXR0b25BcnIucHVzaChcImBgYFwiKTtcbiAgb3V0cHV0T2JqZWN0LmJsb2NrSWRcbiAgICA/IGJ1dHRvbkFyci5wdXNoKGBeYnV0dG9uLSR7b3V0cHV0T2JqZWN0LmJsb2NrSWR9YClcbiAgICA6IGJ1dHRvbkFyci5wdXNoKGBeYnV0dG9uLSR7bmFub2lkKDQpfWApO1xuICBjb25zdCBwYWdlID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGNvbnN0IGVkaXRvciA9IHBhZ2UuZWRpdG9yO1xuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihidXR0b25BcnIuam9pbihcIlxcblwiKSk7XG4gIGFkZEJ1dHRvblRvU3RvcmUoYXBwLCBwYWdlLmZpbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydElubGluZUJ1dHRvbiA9IChhcHA6IEFwcCwgaWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICBjb25zdCBwYWdlID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGNvbnN0IGVkaXRvciA9IHBhZ2UuZWRpdG9yO1xuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihgXFxgYnV0dG9uLSR7aWR9XFxgYCk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQXJndW1lbnRPYmplY3QgPSAoc291cmNlOiBzdHJpbmcpOiBBcmd1bWVudHMgPT5cbiAgc291cmNlLnNwbGl0KFwiXFxuXCIpLnJlZHVjZSgoYWNjOiBBcmd1bWVudHMsIGk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHNwbGl0OiBzdHJpbmdbXSA9IGkuc3BsaXQoXCIgXCIpO1xuICAgIGNvbnN0IGtleTogc3RyaW5nID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICBhY2Nba2V5XSA9IHNwbGl0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gc3BsaXRbMF0pLmpvaW4oXCIgXCIpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRlbnRBcnJheSA9IGFzeW5jIChcbiAgYXBwOiBBcHBcbik6IFByb21pc2U8eyBjb250ZW50QXJyYXk6IHN0cmluZ1tdOyBmaWxlOiBURmlsZSB9PiA9PiB7XG4gIGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgaWYgKGFjdGl2ZVZpZXcpIHtcbiAgICBjb25zdCBmaWxlID0gYWN0aXZlVmlldy5maWxlO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICByZXR1cm4geyBjb250ZW50QXJyYXk6IGNvbnRlbnQuc3BsaXQoXCJcXG5cIiksIGZpbGUgfTtcbiAgfVxuICBuZXcgTm90aWNlKFwiQ291bGQgbm90IGdldCBBY3RpdmUgVmlld1wiLCAxMDAwKTtcbiAgY29uc29sZS5lcnJvcihcImNvdWxkIG5vdCBnZXQgYWN0aXZlIHZpZXdcIik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlVmFsdWVBcnJheSA9IChcbiAgdmFsdWU6IHN0cmluZyxcbiAgY2FsbGJhY2s6IChhcmdBcnJheTogc3RyaW5nW10pID0+IHZvaWRcbik6IHZvaWQgPT4ge1xuICBpZiAodmFsdWUuaW5jbHVkZXMoXCJbXCIpICYmIHZhbHVlLmluY2x1ZGVzKFwiXVwiKSkge1xuICAgIGNvbnN0IGFyZ3MgPSB2YWx1ZS5tYXRjaCgvXFxbKC4qKVxcXS8pO1xuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBjb25zdCBhcmdBcnJheSA9IGFyZ3NbMV0uc3BsaXQoLyxcXHM/Lyk7XG4gICAgICBpZiAoYXJnQXJyYXlbMF0pIHtcbiAgICAgICAgY2FsbGJhY2soYXJnQXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld0FyZ3MoXG4gIGFwcDogQXBwLFxuICBwb3NpdGlvbjogUG9zaXRpb25cbik6IFByb21pc2U8eyBhcmdzOiBBcmd1bWVudHM7IGNvbnRlbnQ6IHN0cmluZyB9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVmlldyA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgICAgY29uc3QgbmV3Q29udGVudCA9IGF3YWl0IGFwcC52YXVsdFxuICAgICAgICAuY2FjaGVkUmVhZChhY3RpdmVWaWV3LmZpbGUpXG4gICAgICAgIC50aGVuKChjb250ZW50OiBzdHJpbmcpID0+IGNvbnRlbnQuc3BsaXQoXCJcXG5cIikpO1xuICAgICAgY29uc3QgbmV3QnV0dG9uID0gbmV3Q29udGVudFxuICAgICAgICAuc3BsaWNlKHBvc2l0aW9uLmxpbmVTdGFydCwgcG9zaXRpb24ubGluZUVuZCAtIHBvc2l0aW9uLmxpbmVTdGFydClcbiAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICAgICAgLnJlcGxhY2UoXCJgYGBidXR0b25cIiwgXCJcIilcbiAgICAgICAgLnJlcGxhY2UoXCJgYGBcIiwgXCJcIik7XG4gICAgICByZXNvbHZlKHsgYXJnczogY3JlYXRlQXJndW1lbnRPYmplY3QobmV3QnV0dG9uKSB9KTtcbiAgICB9LCAxNTApO1xuICB9KTtcbiAgcmV0dXJuIHByb21pc2UgYXMgUHJvbWlzZTx7IGFyZ3M6IEFyZ3VtZW50czsgY29udGVudDogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgY29uc3Qgd3JhcEFyb3VuZCA9ICh2YWx1ZTogbnVtYmVyLCBzaXplOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICByZXR1cm4gKCh2YWx1ZSAlIHNpemUpICsgc2l6ZSkgJSBzaXplO1xufTtcbiIsImltcG9ydCB7IEFwcCwgRXZlbnRSZWYsIFRGaWxlLCBFdmVudHMgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuZXhwb3J0IGNvbnN0IGJ1dHRvbkV2ZW50TGlzdGVuZXIgPSAoXG4gIGFwcDogQXBwLFxuICBjYWxsYmFjazogKGFwcDogQXBwLCBmaWxlOiBURmlsZSkgPT4gdm9pZFxuKTogRXZlbnRSZWYgPT4ge1xuICByZXR1cm4gYXBwLm1ldGFkYXRhQ2FjaGUub24oXCJjaGFuZ2VkXCIsIChmaWxlOiBURmlsZSkgPT4ge1xuICAgIGNhbGxiYWNrKGFwcCwgZmlsZSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVMaXN0ZW5lciA9IChcbiAgYXBwOiBBcHAsXG4gIGNhbGxiYWNrOiAoYXBwOiBBcHApID0+IHZvaWRcbik6IEV2ZW50UmVmID0+IHtcbiAgcmV0dXJuIGFwcC5tZXRhZGF0YUNhY2hlLm9uKFwicmVzb2x2ZWRcIiwgKCkgPT4ge1xuICAgIGNhbGxiYWNrKGFwcCk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG9wZW5GaWxlTGlzdGVuZXIgPSAoXG4gIGFwcDogQXBwLFxuICBzdG9yZUV2ZW50czogU3RvcmVFdmVudHMsXG4gIGNhbGxiYWNrOiAoYXBwOiBBcHAsIHN0b3JlRXZlbnRzOiBTdG9yZUV2ZW50cykgPT4gdm9pZFxuKTogRXZlbnRSZWYgPT4ge1xuICByZXR1cm4gYXBwLndvcmtzcGFjZS5vbihcImZpbGUtb3BlblwiLCAoKSA9PiB7XG4gICAgY2FsbGJhY2soYXBwLCBzdG9yZUV2ZW50cyk7XG4gIH0pO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xyXG52YXIgTWV4cCA9IGZ1bmN0aW9uIChwYXJzZWQpIHtcclxuICB0aGlzLnZhbHVlID0gcGFyc2VkXHJcbn1cclxuXHJcbk1leHAubWF0aCA9IHtcclxuICBpc0RlZ3JlZTogdHJ1ZSwgLy8gbW9kZSBvZiBjYWxjdWxhdG9yXHJcbiAgYWNvczogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiAoTWV4cC5tYXRoLmlzRGVncmVlID8gMTgwIC8gTWF0aC5QSSAqIE1hdGguYWNvcyh4KSA6IE1hdGguYWNvcyh4KSlcclxuICB9LFxyXG4gIGFkZDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhICsgYlxyXG4gIH0sXHJcbiAgYXNpbjogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiAoTWV4cC5tYXRoLmlzRGVncmVlID8gMTgwIC8gTWF0aC5QSSAqIE1hdGguYXNpbih4KSA6IE1hdGguYXNpbih4KSlcclxuICB9LFxyXG4gIGF0YW46IGZ1bmN0aW9uICh4KSB7XHJcbiAgICByZXR1cm4gKE1leHAubWF0aC5pc0RlZ3JlZSA/IDE4MCAvIE1hdGguUEkgKiBNYXRoLmF0YW4oeCkgOiBNYXRoLmF0YW4oeCkpXHJcbiAgfSxcclxuICBhY29zaDogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4IC0gMSkpXHJcbiAgfSxcclxuICBhc2luaDogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpXHJcbiAgfSxcclxuICBhdGFuaDogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSlcclxuICB9LFxyXG4gIEM6IGZ1bmN0aW9uIChuLCByKSB7XHJcbiAgICB2YXIgcHJvID0gMVxyXG4gICAgdmFyIG90aGVyID0gbiAtIHJcclxuICAgIHZhciBjaG9pY2UgPSByXHJcbiAgICBpZiAoY2hvaWNlIDwgb3RoZXIpIHtcclxuICAgICAgY2hvaWNlID0gb3RoZXJcclxuICAgICAgb3RoZXIgPSByXHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBpID0gY2hvaWNlICsgMTsgaSA8PSBuOyBpKyspIHtcclxuICAgICAgcHJvICo9IGlcclxuICAgIH1cclxuICAgIHJldHVybiBwcm8gLyBNZXhwLm1hdGguZmFjdChvdGhlcilcclxuICB9LFxyXG4gIGNoYW5nZVNpZ246IGZ1bmN0aW9uICh4KSB7XHJcbiAgICByZXR1cm4gLXhcclxuICB9LFxyXG4gIGNvczogZnVuY3Rpb24gKHgpIHtcclxuICAgIGlmIChNZXhwLm1hdGguaXNEZWdyZWUpIHggPSBNZXhwLm1hdGgudG9SYWRpYW4oeClcclxuICAgIHJldHVybiBNYXRoLmNvcyh4KVxyXG4gIH0sXHJcbiAgY29zaDogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiAoTWF0aC5wb3coTWF0aC5FLCB4KSArIE1hdGgucG93KE1hdGguRSwgLTEgKiB4KSkgLyAyXHJcbiAgfSxcclxuICBkaXY6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYSAvIGJcclxuICB9LFxyXG4gIGZhY3Q6IGZ1bmN0aW9uIChuKSB7XHJcbiAgICBpZiAobiAlIDEgIT09IDApIHJldHVybiAnTmFOJ1xyXG4gICAgdmFyIHBybyA9IDFcclxuICAgIGZvciAodmFyIGkgPSAyOyBpIDw9IG47IGkrKykge1xyXG4gICAgICBwcm8gKj0gaVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb1xyXG4gIH0sXHJcbiAgaW52ZXJzZTogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiAxIC8geFxyXG4gIH0sXHJcbiAgbG9nOiBmdW5jdGlvbiAoaSkge1xyXG4gICAgcmV0dXJuIE1hdGgubG9nKGkpIC8gTWF0aC5sb2coMTApXHJcbiAgfSxcclxuICBtb2Q6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYSAlIGJcclxuICB9LFxyXG4gIG11bDogZnVuY3Rpb24gKGEsIGIpIHtcclxuICAgIHJldHVybiBhICogYlxyXG4gIH0sXHJcbiAgUDogZnVuY3Rpb24gKG4sIHIpIHtcclxuICAgIHZhciBwcm8gPSAxXHJcbiAgICBmb3IgKHZhciBpID0gTWF0aC5mbG9vcihuKSAtIE1hdGguZmxvb3IocikgKyAxOyBpIDw9IE1hdGguZmxvb3Iobik7IGkrKykge1xyXG4gICAgICBwcm8gKj0gaVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByb1xyXG4gIH0sXHJcbiAgUGk6IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGV4KSB7XHJcbiAgICB2YXIgcHJvID0gMVxyXG4gICAgZm9yICh2YXIgaSA9IGxvdzsgaSA8PSBoaWdoOyBpKyspIHtcclxuICAgICAgcHJvICo9IE51bWJlcihleC5wb3N0Zml4RXZhbCh7XHJcbiAgICAgICAgbjogaVxyXG4gICAgICB9KSlcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9cclxuICB9LFxyXG4gIHBvdzEweDogZnVuY3Rpb24gKGUpIHtcclxuICAgIHZhciB4ID0gMVxyXG4gICAgd2hpbGUgKGUtLSkge1xyXG4gICAgICB4ICo9IDEwXHJcbiAgICB9XHJcbiAgICByZXR1cm4geFxyXG4gIH0sXHJcbiAgc2lnbWE6IGZ1bmN0aW9uIChsb3csIGhpZ2gsIGV4KSB7XHJcbiAgICB2YXIgc3VtID0gMFxyXG4gICAgZm9yICh2YXIgaSA9IGxvdzsgaSA8PSBoaWdoOyBpKyspIHtcclxuICAgICAgc3VtICs9IE51bWJlcihleC5wb3N0Zml4RXZhbCh7XHJcbiAgICAgICAgbjogaVxyXG4gICAgICB9KSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdW1cclxuICB9LFxyXG4gIHNpbjogZnVuY3Rpb24gKHgpIHtcclxuICAgIGlmIChNZXhwLm1hdGguaXNEZWdyZWUpIHggPSBNZXhwLm1hdGgudG9SYWRpYW4oeClcclxuICAgIHJldHVybiBNYXRoLnNpbih4KVxyXG4gIH0sXHJcbiAgc2luaDogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiAoTWF0aC5wb3coTWF0aC5FLCB4KSAtIE1hdGgucG93KE1hdGguRSwgLTEgKiB4KSkgLyAyXHJcbiAgfSxcclxuICBzdWI6IGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICByZXR1cm4gYSAtIGJcclxuICB9LFxyXG4gIHRhbjogZnVuY3Rpb24gKHgpIHtcclxuICAgIGlmIChNZXhwLm1hdGguaXNEZWdyZWUpIHggPSBNZXhwLm1hdGgudG9SYWRpYW4oeClcclxuICAgIHJldHVybiBNYXRoLnRhbih4KVxyXG4gIH0sXHJcbiAgdGFuaDogZnVuY3Rpb24gKHgpIHtcclxuICAgIHJldHVybiBNZXhwLnNpbmhhKHgpIC8gTWV4cC5jb3NoYSh4KVxyXG4gIH0sXHJcbiAgdG9SYWRpYW46IGZ1bmN0aW9uICh4KSB7XHJcbiAgICByZXR1cm4geCAqIE1hdGguUEkgLyAxODBcclxuICB9XHJcbn1cclxuTWV4cC5FeGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcclxufVxyXG5tb2R1bGUuZXhwb3J0cyA9IE1leHBcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbnZhciBNZXhwID0gcmVxdWlyZSgnLi9tYXRoX2Z1bmN0aW9uLmpzJylcclxuZnVuY3Rpb24gaW5jKGFyciwgdmFsKSB7XHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgIGFycltpXSArPSB2YWxcclxuICB9XHJcbiAgcmV0dXJuIGFyclxyXG59XHJcbnZhciB0b2tlbiA9IFsnc2luJywgJ2NvcycsICd0YW4nLCAncGknLCAnKCcsICcpJywgJ1AnLCAnQycsICcgJyxcclxuICAnYXNpbicsICdhY29zJywgJ2F0YW4nLCAnNycsICc4JywgJzknLCAnaW50JyxcclxuICAnY29zaCcsICdhY29zaCcsICdsbicsICdeJywgJ3Jvb3QnLCAnNCcsICc1JywgJzYnLCAnLycsICchJyxcclxuICAndGFuaCcsICdhdGFuaCcsICdNb2QnLCAnMScsICcyJywgJzMnLCAnKicsXHJcbiAgJ3NpbmgnLCAnYXNpbmgnLCAnZScsICdsb2cnLCAnMCcsICcuJywgJysnLCAnLScsICcsJywgJ1NpZ21hJywgJ24nLCAnUGknLCAncG93J11cclxudmFyIHNob3cgPSBbJ3NpbicsICdjb3MnLCAndGFuJywgJyZwaTsnLCAnKCcsICcpJywgJ1AnLCAnQycsICcgJyxcclxuICAnYXNpbicsICdhY29zJywgJ2F0YW4nLCAnNycsICc4JywgJzknLCAnSW50JyxcclxuICAnY29zaCcsICdhY29zaCcsICcgbG4nLCAnXicsICdyb290JywgJzQnLCAnNScsICc2JywgJyZkaXZpZGU7JywgJyEnLFxyXG4gICd0YW5oJywgJ2F0YW5oJywgJyBNb2QgJywgJzEnLCAnMicsICczJywgJyZ0aW1lczsnLFxyXG4gICdzaW5oJywgJ2FzaW5oJywgJ2UnLCAnIGxvZycsICcwJywgJy4nLCAnKycsICctJywgJywnLCAnJlNpZ21hOycsICduJywgJyZQaTsnLCAncG93J11cclxudmFyIGV2YSA9IFtNZXhwLm1hdGguc2luLCBNZXhwLm1hdGguY29zLCBNZXhwLm1hdGgudGFuLCAnUEknLCAnKCcsICcpJywgTWV4cC5tYXRoLlAsIE1leHAubWF0aC5DLCAnICcuYW5jaG9yLFxyXG5NZXhwLm1hdGguYXNpbiwgTWV4cC5tYXRoLmFjb3MsIE1leHAubWF0aC5hdGFuLCAnNycsICc4JywgJzknLCBNYXRoLmZsb29yLFxyXG5NZXhwLm1hdGguY29zaCwgTWV4cC5tYXRoLmFjb3NoLCBNYXRoLmxvZywgTWF0aC5wb3csIE1hdGguc3FydCwgJzQnLCAnNScsICc2JywgTWV4cC5tYXRoLmRpdiwgTWV4cC5tYXRoLmZhY3QsXHJcbk1leHAubWF0aC50YW5oLCBNZXhwLm1hdGguYXRhbmgsIE1leHAubWF0aC5tb2QsICcxJywgJzInLCAnMycsIE1leHAubWF0aC5tdWwsXHJcbk1leHAubWF0aC5zaW5oLCBNZXhwLm1hdGguYXNpbmgsICdFJywgTWV4cC5tYXRoLmxvZywgJzAnLCAnLicsIE1leHAubWF0aC5hZGQsIE1leHAubWF0aC5zdWIsICcsJywgTWV4cC5tYXRoLnNpZ21hLCAnbicsIE1leHAubWF0aC5QaSwgTWF0aC5wb3ddXHJcbnZhciBwcmVjZWQgPSB7XHJcbiAgMDogMTEsXHJcbiAgMTogMCxcclxuICAyOiAzLFxyXG4gIDM6IDAsXHJcbiAgNDogMCxcclxuICA1OiAwLFxyXG4gIDY6IDAsXHJcbiAgNzogMTEsXHJcbiAgODogMTEsXHJcbiAgOTogMSxcclxuICAxMDogMTAsXHJcbiAgMTE6IDAsXHJcbiAgMTI6IDExLFxyXG4gIDEzOiAwLFxyXG4gIDE0OiAtMSAvLyB3aWxsIGJlIGZpbHRlcmVkIGFmdGVyIGxleGVyXHJcbn0gLy8gc3RvcmVzIHByZWNlZGVuY2UgYnkgdHlwZXNcclxudmFyIHR5cGUgPSBbMCwgMCwgMCwgMywgNCwgNSwgMTAsIDEwLCAxNCxcclxuICAwLCAwLCAwLCAxLCAxLCAxLCAwLFxyXG4gIDAsIDAsIDAsIDEwLCAwLCAxLCAxLCAxLCAyLCA3LFxyXG4gIDAsIDAsIDIsIDEsIDEsIDEsIDIsXHJcbiAgMCwgMCwgMywgMCwgMSwgNiwgOSwgOSwgMTEsIDEyLCAxMywgMTIsIDhdXHJcbi8qXHJcbjAgOiBmdW5jdGlvbiB3aXRoIHN5bnRheCBmdW5jdGlvbl9uYW1lKE1hdGhzX2V4cClcclxuMSA6IG51bWJlcnNcclxuMiA6IGJpbmFyeSBvcGVyYXRvcnMgbGlrZSAqIC8gTW9kIGxlZnQgYXNzb2NpYXRlIGFuZCBzYW1lIHByZWNlZGVuY2VcclxuMyA6IE1hdGggY29uc3RhbnQgdmFsdWVzIGxpa2UgZSxwaSxDcnVuY2hlciBhbnNcclxuNCA6IG9wZW5pbmcgYnJhY2tldFxyXG41IDogY2xvc2luZyBicmFja2V0XHJcbjYgOiBkZWNpbWFsXHJcbjcgOiBmdW5jdGlvbiB3aXRoIHN5bnRheCAoTWF0aF9leHApZnVuY3Rpb25fbmFtZVxyXG44OiBmdW5jdGlvbiB3aXRoIHN5bnRheCBmdW5jdGlvbl9uYW1lKE1hdGhfZXhwMSxNYXRoX2V4cDIpXHJcbjkgOiBiaW5hcnkgb3BlcmF0b3IgbGlrZSArLC1cclxuMTA6IGJpbmFyeSBvcGVyYXRvciBsaWtlIFAgQyBvciBeXHJcbjExOiAsXHJcbjEyOiBmdW5jdGlvbiB3aXRoICwgc2VwZXJhdGVkIHRocmVlIHBhcmFtZXRlcnMgYW5kIHRoaXJkIHBhcmFtZXRlciBpcyBhIHN0cmluZyB0aGF0IHdpbGwgYmUgbWV4cCBzdHJpbmdcclxuMTM6IHZhcmlhYmxlIG9mIFNpZ21hIGZ1bmN0aW9uXHJcbiovXHJcbnZhciB0eXBlMCA9IHtcclxuICAwOiB0cnVlLFxyXG4gIDE6IHRydWUsXHJcbiAgMzogdHJ1ZSxcclxuICA0OiB0cnVlLFxyXG4gIDY6IHRydWUsXHJcbiAgODogdHJ1ZSxcclxuICA5OiB0cnVlLFxyXG4gIDEyOiB0cnVlLFxyXG4gIDEzOiB0cnVlLFxyXG4gIDE0OiB0cnVlXHJcbn0gLy8gdHlwZTI6dHJ1ZSx0eXBlNDp0cnVlLHR5cGU5OnRydWUsdHlwZTExOnRydWUsdHlwZTIxOnRydWUsdHlwZTIyXHJcbnZhciB0eXBlMSA9IHtcclxuICAwOiB0cnVlLFxyXG4gIDE6IHRydWUsXHJcbiAgMjogdHJ1ZSxcclxuICAzOiB0cnVlLFxyXG4gIDQ6IHRydWUsXHJcbiAgNTogdHJ1ZSxcclxuICA2OiB0cnVlLFxyXG4gIDc6IHRydWUsXHJcbiAgODogdHJ1ZSxcclxuICA5OiB0cnVlLFxyXG4gIDEwOiB0cnVlLFxyXG4gIDExOiB0cnVlLFxyXG4gIDEyOiB0cnVlLFxyXG4gIDEzOiB0cnVlXHJcbn0gLy8gdHlwZTM6dHJ1ZSx0eXBlNTp0cnVlLHR5cGU3OnRydWUsdHlwZTIzXHJcbnZhciB0eXBlMUFzdGVyaWNrID0ge1xyXG4gIDA6IHRydWUsXHJcbiAgMzogdHJ1ZSxcclxuICA0OiB0cnVlLFxyXG4gIDg6IHRydWUsXHJcbiAgMTI6IHRydWUsXHJcbiAgMTM6IHRydWVcclxufVxyXG52YXIgZW1wdHkgPSB7fVxyXG52YXIgdHlwZTNBc3RlcmljayA9IHtcclxuICAwOiB0cnVlLFxyXG4gIDE6IHRydWUsXHJcbiAgMzogdHJ1ZSxcclxuICA0OiB0cnVlLFxyXG4gIDY6IHRydWUsXHJcbiAgODogdHJ1ZSxcclxuICAxMjogdHJ1ZSxcclxuICAxMzogdHJ1ZVxyXG59IC8vIHR5cGVfNTp0cnVlLHR5cGVfNzp0cnVlLHR5cGVfMjNcclxudmFyIHR5cGU2ID0ge1xyXG4gIDE6IHRydWVcclxufVxyXG52YXIgbmV3QXIgPSBbXHJcbiAgW10sXHJcbiAgWycxJywgJzInLCAnMycsICc3JywgJzgnLCAnOScsICc0JywgJzUnLCAnNicsICcrJywgJy0nLCAnKicsICcvJywgJygnLCAnKScsICdeJywgJyEnLCAnUCcsICdDJywgJ2UnLCAnMCcsICcuJywgJywnLCAnbicsICcgJ10sXHJcbiAgWydwaScsICdsbicsICdQaSddLFxyXG4gIFsnc2luJywgJ2NvcycsICd0YW4nLCAnRGVsJywgJ2ludCcsICdNb2QnLCAnbG9nJywgJ3BvdyddLFxyXG4gIFsnYXNpbicsICdhY29zJywgJ2F0YW4nLCAnY29zaCcsICdyb290JywgJ3RhbmgnLCAnc2luaCddLFxyXG4gIFsnYWNvc2gnLCAnYXRhbmgnLCAnYXNpbmgnLCAnU2lnbWEnXVxyXG5dXHJcblxyXG5mdW5jdGlvbiBtYXRjaChzdHIxLCBzdHIyLCBpLCB4KSB7XHJcbiAgZm9yICh2YXIgZiA9IDA7IGYgPCB4OyBmKyspIHtcclxuICAgIGlmIChzdHIxW2kgKyBmXSAhPT0gc3RyMltmXSkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHRydWVcclxufVxyXG5NZXhwLmFkZFRva2VuID0gZnVuY3Rpb24gKHRva2Vucykge1xyXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICB2YXIgeCA9IHRva2Vuc1tpXS50b2tlbi5sZW5ndGhcclxuICAgIHZhciB0ZW1wID0gLTFcclxuXHJcbiAgICAvLyBuZXdBciBpcyBhIHNwZWNpYWxseSBkZXNpZ25lZCBkYXRhIHN0cnVjdHVyZSBpbmRleCBvZiAxZCBhcnJheSA9IGxlbmd0aCBvZiB0b2tlbnNcclxuICAgIG5ld0FyW3hdID0gbmV3QXJbeF0gfHwgW107XHJcbiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IG5ld0FyW3hdLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgIGlmICh0b2tlbnNbaV0udG9rZW4gPT09IG5ld0FyW3hdW3ldKSB7XHJcbiAgICAgICAgdGVtcCA9IHRva2VuLmluZGV4T2YobmV3QXJbeF1beV0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRlbXAgPT09IC0xKSB7XHJcbiAgICAgIHRva2VuLnB1c2godG9rZW5zW2ldLnRva2VuKVxyXG4gICAgICB0eXBlLnB1c2godG9rZW5zW2ldLnR5cGUpXHJcbiAgICAgIGlmIChuZXdBci5sZW5ndGggPD0gdG9rZW5zW2ldLnRva2VuLmxlbmd0aCkge1xyXG4gICAgICAgIG5ld0FyW3Rva2Vuc1tpXS50b2tlbi5sZW5ndGhdID0gW11cclxuICAgICAgfVxyXG4gICAgICBuZXdBclt0b2tlbnNbaV0udG9rZW4ubGVuZ3RoXS5wdXNoKHRva2Vuc1tpXS50b2tlbilcclxuICAgICAgZXZhLnB1c2godG9rZW5zW2ldLnZhbHVlKVxyXG4gICAgICBzaG93LnB1c2godG9rZW5zW2ldLnNob3cpXHJcbiAgICB9IGVsc2UgeyAvLyBvdmVyd3JpdGVcclxuICAgICAgdG9rZW5bdGVtcF0gPSB0b2tlbnNbaV0udG9rZW5cclxuICAgICAgdHlwZVt0ZW1wXSA9IHRva2Vuc1tpXS50eXBlXHJcbiAgICAgIGV2YVt0ZW1wXSA9IHRva2Vuc1tpXS52YWx1ZVxyXG4gICAgICBzaG93W3RlbXBdID0gdG9rZW5zW2ldLnNob3dcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRva2VuaXplKHN0cmluZykge1xyXG4gIHZhciBub2RlcyA9IFtdO1xyXG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xyXG4gIHZhciBrZXksIHgsIHk7XHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgaWYgKGkgPCBsZW5ndGggLSAxICYmIHN0cmluZ1tpXSA9PT0gJyAnICYmIHN0cmluZ1tpICsgMV0gPT09ICcgJykge1xyXG4gICAgICBjb250aW51ZVxyXG4gICAgfVxyXG4gICAga2V5ID0gJydcclxuICAgIGZvciAoeCA9IChzdHJpbmcubGVuZ3RoIC0gaSA+IChuZXdBci5sZW5ndGggLSAyKSA/IG5ld0FyLmxlbmd0aCAtIDEgOiBzdHJpbmcubGVuZ3RoIC0gaSk7IHggPiAwOyB4LS0pIHtcclxuICAgICAgaWYgKG5ld0FyW3hdID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xyXG4gICAgICBmb3IgKHkgPSAwOyB5IDwgbmV3QXJbeF0ubGVuZ3RoOyB5KyspIHtcclxuICAgICAgICBpZiAobWF0Y2goc3RyaW5nLCBuZXdBclt4XVt5XSwgaSwgeCkpIHtcclxuICAgICAgICAgIGtleSA9IG5ld0FyW3hdW3ldXHJcbiAgICAgICAgICB5ID0gbmV3QXJbeF0ubGVuZ3RoXHJcbiAgICAgICAgICB4ID0gMFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaSArPSBrZXkubGVuZ3RoIC0gMVxyXG4gICAgaWYgKGtleSA9PT0gJycpIHtcclxuICAgICAgdGhyb3cgKG5ldyBNZXhwLkV4Y2VwdGlvbignQ2FuXFwndCB1bmRlcnN0YW5kIGFmdGVyICcgKyBzdHJpbmcuc2xpY2UoaSkpKVxyXG4gICAgfVxyXG4gICAgdmFyIGluZGV4ID0gdG9rZW4uaW5kZXhPZihrZXkpO1xyXG4gICAgbm9kZXMucHVzaCh7XHJcbiAgICAgIGluZGV4OiBpbmRleCxcclxuICAgICAgdG9rZW46IGtleSxcclxuICAgICAgdHlwZTogdHlwZVtpbmRleF0sXHJcbiAgICAgIGV2YWw6IGV2YVtpbmRleF0sXHJcbiAgICAgIHByZWNlZGVuY2U6IHByZWNlZFt0eXBlW2luZGV4XV0sXHJcbiAgICAgIHNob3c6IHNob3dbaW5kZXhdXHJcbiAgICB9KVxyXG4gIH1cclxuICByZXR1cm4gbm9kZXM7XHJcbn1cclxuXHJcbk1leHAubGV4ID0gZnVuY3Rpb24gKGlucCwgdG9rZW5zKSB7XHJcbiAgJ3VzZSBzdHJpY3QnXHJcblxyXG5cclxuICB2YXIgY2hhbmdlU2lnbk9iaiA9IHtcclxuICAgIHZhbHVlOiBNZXhwLm1hdGguY2hhbmdlU2lnbixcclxuICAgIHR5cGU6IDAsXHJcbiAgICBwcmU6IDIxLFxyXG4gICAgc2hvdzogJy0nXHJcbiAgfVxyXG4gIHZhciBjbG9zaW5nUGFyT2JqID0ge1xyXG4gICAgdmFsdWU6ICcpJyxcclxuICAgIHNob3c6ICcpJyxcclxuICAgIHR5cGU6IDUsXHJcbiAgICBwcmU6IDBcclxuICB9XHJcbiAgdmFyIG9wZW5pbmdQYXJPYmogPSB7XHJcbiAgICB2YWx1ZTogJygnLFxyXG4gICAgdHlwZTogNCxcclxuICAgIHByZTogMCxcclxuICAgIHNob3c6ICcoJ1xyXG4gIH1cclxuICB2YXIgc3RyID0gW29wZW5pbmdQYXJPYmpdXHJcblxyXG4gIHZhciBwdGMgPSBbXSAvLyBQYXJlbnRoZXNpcyB0byBjbG9zZSBhdCB0aGUgYmVnaW5uaW5nIGlzIGFmdGVyIG9uZSB0b2tlblxyXG4gIHZhciBpbnBTdHIgPSBpbnBcclxuICB2YXIgYWxsb3dlZCA9IHR5cGUwXHJcbiAgdmFyIGJyYWNUb0Nsb3NlID0gMFxyXG4gIHZhciBhc3RlcmljayA9IGVtcHR5XHJcbiAgdmFyIHByZXZLZXkgPSAnJ1xyXG4gIHZhciBpO1xyXG4gIGlmICh0eXBlb2YgdG9rZW5zICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgTWV4cC5hZGRUb2tlbih0b2tlbnMpXHJcbiAgfVxyXG4gIHZhciBvYmogPSB7fVxyXG4gIHZhciBub2RlcyA9IHRva2VuaXplKGlucFN0cik7XHJcbiAgZm9yIChpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xyXG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMTQpIHtcclxuICAgICAgaWYgKGkgPiAwICYmXHJcbiAgICAgICAgaSA8IG5vZGVzLmxlbmd0aCAtIDEgJiZcclxuICAgICAgICBub2Rlc1tpICsgMV0udHlwZSA9PT0gMSAmJlxyXG4gICAgICAgIChub2Rlc1tpIC0gMV0udHlwZSA9PT0gMSB8fCBub2Rlc1tpIC0gMV0udHlwZSA9PT0gNikpXHJcbiAgICAgICAgdGhyb3cgbmV3IE1leHAuRXhjZXB0aW9uKCdVbmV4cGVjdGVkIFNwYWNlJylcclxuICAgICAgY29udGludWVcclxuICAgIH1cclxuXHJcbiAgICB2YXIgaW5kZXggPSBub2RlLmluZGV4XHJcbiAgICB2YXIgY1Rva2VuID0gbm9kZS50b2tlblxyXG4gICAgdmFyIGNUeXBlID0gbm9kZS50eXBlXHJcbiAgICB2YXIgY0V2ID0gbm9kZS5ldmFsXHJcbiAgICB2YXIgY1ByZSA9IG5vZGUucHJlY2VkZW5jZVxyXG4gICAgdmFyIGNTaG93ID0gbm9kZS5zaG93XHJcbiAgICB2YXIgcHJlID0gc3RyW3N0ci5sZW5ndGggLSAxXVxyXG4gICAgdmFyIGpcclxuICAgIGZvciAoaiA9IHB0Yy5sZW5ndGg7IGotLTspIHsgLy8gbG9vcCBvdmVyIHB0Y1xyXG4gICAgICBpZiAocHRjW2pdID09PSAwKSB7XHJcbiAgICAgICAgaWYgKFswLCAyLCAzLCA0LCA1LCA5LCAxMSwgMTIsIDEzXS5pbmRleE9mKGNUeXBlKSAhPT0gLTEpIHtcclxuICAgICAgICAgIGlmIChhbGxvd2VkW2NUeXBlXSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhpbnAsIG5vZGUsIG5vZGVzLCBhbGxvd2VkKVxyXG4gICAgICAgICAgICB0aHJvdyAobmV3IE1leHAuRXhjZXB0aW9uKGNUb2tlbiArICcgaXMgbm90IGFsbG93ZWQgYWZ0ZXIgJyArIHByZXZLZXkpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc3RyLnB1c2goY2xvc2luZ1Bhck9iailcclxuICAgICAgICAgIGFsbG93ZWQgPSB0eXBlMVxyXG4gICAgICAgICAgYXN0ZXJpY2sgPSB0eXBlM0FzdGVyaWNrXHJcbiAgICAgICAgICBpbmMocHRjLCAtMSkucG9wKClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBicmVha1xyXG4gICAgfVxyXG4gICAgaWYgKGFsbG93ZWRbY1R5cGVdICE9PSB0cnVlKSB7XHJcbiAgICAgIHRocm93IChuZXcgTWV4cC5FeGNlcHRpb24oY1Rva2VuICsgJyBpcyBub3QgYWxsb3dlZCBhZnRlciAnICsgcHJldktleSkpXHJcbiAgICB9XHJcbiAgICBpZiAoYXN0ZXJpY2tbY1R5cGVdID09PSB0cnVlKSB7XHJcbiAgICAgIGNUeXBlID0gMlxyXG4gICAgICBjRXYgPSBNZXhwLm1hdGgubXVsXHJcbiAgICAgIGNTaG93ID0gJyZ0aW1lczsnXHJcbiAgICAgIGNQcmUgPSAzXHJcbiAgICAgIGkgPSBpIC0gY1Rva2VuLmxlbmd0aFxyXG4gICAgfVxyXG4gICAgb2JqID0ge1xyXG4gICAgICB2YWx1ZTogY0V2LFxyXG4gICAgICB0eXBlOiBjVHlwZSxcclxuICAgICAgcHJlOiBjUHJlLFxyXG4gICAgICBzaG93OiBjU2hvd1xyXG4gICAgfVxyXG4gICAgaWYgKGNUeXBlID09PSAwKSB7XHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMFxyXG4gICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgIGluYyhwdGMsIDIpLnB1c2goMilcclxuICAgICAgc3RyLnB1c2gob2JqKVxyXG4gICAgICBzdHIucHVzaChvcGVuaW5nUGFyT2JqKVxyXG4gICAgfSBlbHNlIGlmIChjVHlwZSA9PT0gMSkge1xyXG4gICAgICBpZiAocHJlLnR5cGUgPT09IDEpIHtcclxuICAgICAgICBwcmUudmFsdWUgKz0gY0V2XHJcbiAgICAgICAgaW5jKHB0YywgMSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdHIucHVzaChvYmopXHJcbiAgICAgIH1cclxuICAgICAgYWxsb3dlZCA9IHR5cGUxXHJcbiAgICAgIGFzdGVyaWNrID0gdHlwZTFBc3Rlcmlja1xyXG4gICAgfSBlbHNlIGlmIChjVHlwZSA9PT0gMikge1xyXG4gICAgICBhbGxvd2VkID0gdHlwZTBcclxuICAgICAgYXN0ZXJpY2sgPSBlbXB0eVxyXG4gICAgICBpbmMocHRjLCAyKVxyXG4gICAgICBzdHIucHVzaChvYmopXHJcbiAgICB9IGVsc2UgaWYgKGNUeXBlID09PSAzKSB7IC8vIGNvbnN0YW50XHJcbiAgICAgIHN0ci5wdXNoKG9iailcclxuICAgICAgYWxsb3dlZCA9IHR5cGUxXHJcbiAgICAgIGFzdGVyaWNrID0gdHlwZTNBc3Rlcmlja1xyXG4gICAgfSBlbHNlIGlmIChjVHlwZSA9PT0gNCkge1xyXG4gICAgICBpbmMocHRjLCAxKVxyXG4gICAgICBicmFjVG9DbG9zZSsrXHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMFxyXG4gICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgIHN0ci5wdXNoKG9iailcclxuICAgIH0gZWxzZSBpZiAoY1R5cGUgPT09IDUpIHtcclxuICAgICAgaWYgKCFicmFjVG9DbG9zZSkge1xyXG4gICAgICAgIHRocm93IChuZXcgTWV4cC5FeGNlcHRpb24oJ0Nsb3NpbmcgcGFyZW50aGVzaXMgYXJlIG1vcmUgdGhhbiBvcGVuaW5nIG9uZSwgd2FpdCBXaGF0ISEhJykpXHJcbiAgICAgIH1cclxuICAgICAgYnJhY1RvQ2xvc2UtLVxyXG4gICAgICBhbGxvd2VkID0gdHlwZTFcclxuICAgICAgYXN0ZXJpY2sgPSB0eXBlM0FzdGVyaWNrXHJcbiAgICAgIHN0ci5wdXNoKG9iailcclxuICAgICAgaW5jKHB0YywgMSlcclxuICAgIH0gZWxzZSBpZiAoY1R5cGUgPT09IDYpIHtcclxuICAgICAgaWYgKHByZS5oYXNEZWMpIHtcclxuICAgICAgICB0aHJvdyAobmV3IE1leHAuRXhjZXB0aW9uKCdUd28gZGVjaW1hbHMgYXJlIG5vdCBhbGxvd2VkIGluIG9uZSBudW1iZXInKSlcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJlLnR5cGUgIT09IDEpIHtcclxuICAgICAgICBwcmUgPSB7XHJcbiAgICAgICAgICB2YWx1ZTogMCxcclxuICAgICAgICAgIHR5cGU6IDEsXHJcbiAgICAgICAgICBwcmU6IDBcclxuICAgICAgICB9IC8vIHByZSBuZWVkcyB0byBiZSBjaGFuZ2VkIGFzIGl0IHdpbGwgdGhlIGxhc3QgdmFsdWUgbm93IHRvIGJlIHNhZmUgaW4gbGF0ZXIgY29kZVxyXG4gICAgICAgIHN0ci5wdXNoKHByZSlcclxuICAgICAgICBpbmMocHRjLCAtMSlcclxuICAgICAgfVxyXG4gICAgICBhbGxvd2VkID0gdHlwZTZcclxuICAgICAgaW5jKHB0YywgMSlcclxuICAgICAgYXN0ZXJpY2sgPSBlbXB0eVxyXG4gICAgICBwcmUudmFsdWUgKz0gY0V2XHJcbiAgICAgIHByZS5oYXNEZWMgPSB0cnVlXHJcbiAgICB9IGVsc2UgaWYgKGNUeXBlID09PSA3KSB7XHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMVxyXG4gICAgICBhc3RlcmljayA9IHR5cGUzQXN0ZXJpY2tcclxuICAgICAgaW5jKHB0YywgMSlcclxuICAgICAgc3RyLnB1c2gob2JqKVxyXG4gICAgfVxyXG4gICAgaWYgKGNUeXBlID09PSA4KSB7XHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMFxyXG4gICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgIGluYyhwdGMsIDQpLnB1c2goNClcclxuICAgICAgc3RyLnB1c2gob2JqKVxyXG4gICAgICBzdHIucHVzaChvcGVuaW5nUGFyT2JqKVxyXG4gICAgfSBlbHNlIGlmIChjVHlwZSA9PT0gOSkge1xyXG4gICAgICBpZiAocHJlLnR5cGUgPT09IDkpIHtcclxuICAgICAgICBpZiAocHJlLnZhbHVlID09PSBNZXhwLm1hdGguYWRkKSB7XHJcbiAgICAgICAgICBwcmUudmFsdWUgPSBjRXZcclxuICAgICAgICAgIHByZS5zaG93ID0gY1Nob3dcclxuICAgICAgICAgIGluYyhwdGMsIDEpXHJcbiAgICAgICAgfSBlbHNlIGlmIChwcmUudmFsdWUgPT09IE1leHAubWF0aC5zdWIgJiYgY1Nob3cgPT09ICctJykge1xyXG4gICAgICAgICAgcHJlLnZhbHVlID0gTWV4cC5tYXRoLmFkZFxyXG4gICAgICAgICAgcHJlLnNob3cgPSAnKydcclxuICAgICAgICAgIGluYyhwdGMsIDEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHByZS50eXBlICE9PSA1ICYmIHByZS50eXBlICE9PSA3ICYmIHByZS50eXBlICE9PSAxICYmIHByZS50eXBlICE9PSAzICYmIHByZS50eXBlICE9PSAxMykgeyAvLyBjaGFuZ2VzaWduIG9ubHkgd2hlbiBuZWdhdGl2ZSBpcyBmb3VuZFxyXG4gICAgICAgIGlmIChjVG9rZW4gPT09ICctJykgeyAvLyBkbyBub3RoaW5nIGZvciArIHRva2VuXHJcbiAgICAgICAgICAvLyBkb24ndCBhZGQgd2l0aCB0aGUgYWJvdmUgaWYgc3RhdGVtZW50IGFzIHRoYXQgd2lsbCBydW4gdGhlIGVsc2Ugc3RhdGVtZW50IG9mIHBhcmVudCBpZiBvbiBDdG9rZW4gK1xyXG4gICAgICAgICAgYWxsb3dlZCA9IHR5cGUwXHJcbiAgICAgICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgICAgICBpbmMocHRjLCAyKS5wdXNoKDIpXHJcbiAgICAgICAgICBzdHIucHVzaChjaGFuZ2VTaWduT2JqKVxyXG4gICAgICAgICAgc3RyLnB1c2gob3BlbmluZ1Bhck9iailcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3RyLnB1c2gob2JqKVxyXG4gICAgICAgIGluYyhwdGMsIDIpXHJcbiAgICAgIH1cclxuICAgICAgYWxsb3dlZCA9IHR5cGUwXHJcbiAgICAgIGFzdGVyaWNrID0gZW1wdHlcclxuICAgIH0gZWxzZSBpZiAoY1R5cGUgPT09IDEwKSB7XHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMFxyXG4gICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgIGluYyhwdGMsIDIpXHJcbiAgICAgIHN0ci5wdXNoKG9iailcclxuICAgIH0gZWxzZSBpZiAoY1R5cGUgPT09IDExKSB7XHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMFxyXG4gICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgIHN0ci5wdXNoKG9iailcclxuICAgIH0gZWxzZSBpZiAoY1R5cGUgPT09IDEyKSB7XHJcbiAgICAgIGFsbG93ZWQgPSB0eXBlMFxyXG4gICAgICBhc3RlcmljayA9IGVtcHR5XHJcbiAgICAgIGluYyhwdGMsIDYpLnB1c2goNilcclxuICAgICAgc3RyLnB1c2gob2JqKVxyXG4gICAgICBzdHIucHVzaChvcGVuaW5nUGFyT2JqKVxyXG4gICAgfSBlbHNlIGlmIChjVHlwZSA9PT0gMTMpIHtcclxuICAgICAgYWxsb3dlZCA9IHR5cGUxXHJcbiAgICAgIGFzdGVyaWNrID0gdHlwZTNBc3Rlcmlja1xyXG4gICAgICBzdHIucHVzaChvYmopXHJcbiAgICB9XHJcbiAgICBpbmMocHRjLCAtMSlcclxuICAgIHByZXZLZXkgPSBjVG9rZW5cclxuICB9XHJcbiAgZm9yIChqID0gcHRjLmxlbmd0aDsgai0tOykgeyAvLyBsb29wIG92ZXIgcHRjXHJcbiAgICBpZiAocHRjW2pdID09PSAwKSB7XHJcbiAgICAgIHN0ci5wdXNoKGNsb3NpbmdQYXJPYmopXHJcbiAgICAgIGluYyhwdGMsIC0xKS5wb3AoKVxyXG4gICAgfSBlbHNlIGJyZWFrICAvLyBpZiBpdCBpcyBub3QgemVybyBzbyBiZWZvcmUgcHRjIGFsc28gY2FudCBiZSB6ZXJvXHJcbiAgfVxyXG4gIGlmIChhbGxvd2VkWzVdICE9PSB0cnVlKSB7XHJcbiAgICB0aHJvdyAobmV3IE1leHAuRXhjZXB0aW9uKCdjb21wbGV0ZSB0aGUgZXhwcmVzc2lvbicpKVxyXG4gIH1cclxuICB3aGlsZSAoYnJhY1RvQ2xvc2UtLSkge1xyXG4gICAgc3RyLnB1c2goY2xvc2luZ1Bhck9iailcclxuICB9XHJcblxyXG4gIHN0ci5wdXNoKGNsb3NpbmdQYXJPYmopXHJcbiAgLy8gICAgICAgIGNvbnNvbGUubG9nKHN0cik7XHJcbiAgcmV0dXJuIG5ldyBNZXhwKHN0cilcclxufVxyXG5tb2R1bGUuZXhwb3J0cyA9IE1leHBcclxuIiwiXHJcbnZhciBNZXhwID0gcmVxdWlyZSgnLi9sZXhlci5qcycpO1xyXG5cclxuTWV4cC5wcm90b3R5cGUudG9Qb3N0Zml4ID0gZnVuY3Rpb24gKCkge1xyXG5cdCd1c2Ugc3RyaWN0JztcclxuXHR2YXIgcG9zdCA9IFtdLCBlbGVtLCBwb3BwZWQsIHByZXAsIHByZSwgZWxlO1xyXG5cdHZhciBzdGFjayA9IFt7IHZhbHVlOiBcIihcIiwgdHlwZTogNCwgcHJlOiAwIH1dO1xyXG5cdHZhciBhcnIgPSB0aGlzLnZhbHVlO1xyXG5cdGZvciAodmFyIGkgPSAxOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRpZiAoYXJyW2ldLnR5cGUgPT09IDEgfHwgYXJyW2ldLnR5cGUgPT09IDMgfHwgYXJyW2ldLnR5cGUgPT09IDEzKSB7XHQvL2lmIHRva2VuIGlzIG51bWJlcixjb25zdGFudCxvciBuKHdoaWNoIGlzIGFsc28gYSBzcGVjaWFsIGNvbnN0YW50IGluIG91ciBjYXNlKVxyXG5cdFx0XHRpZiAoYXJyW2ldLnR5cGUgPT09IDEpXHJcblx0XHRcdFx0YXJyW2ldLnZhbHVlID0gTnVtYmVyKGFycltpXS52YWx1ZSk7XHJcblx0XHRcdHBvc3QucHVzaChhcnJbaV0pO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoYXJyW2ldLnR5cGUgPT09IDQpIHtcclxuXHRcdFx0c3RhY2sucHVzaChhcnJbaV0pO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZiAoYXJyW2ldLnR5cGUgPT09IDUpIHtcclxuXHRcdFx0d2hpbGUgKChwb3BwZWQgPSBzdGFjay5wb3AoKSkudHlwZSAhPT0gNCkge1xyXG5cdFx0XHRcdHBvc3QucHVzaChwb3BwZWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmIChhcnJbaV0udHlwZSA9PT0gMTEpIHtcclxuXHRcdFx0d2hpbGUgKChwb3BwZWQgPSBzdGFjay5wb3AoKSkudHlwZSAhPT0gNCkge1xyXG5cdFx0XHRcdHBvc3QucHVzaChwb3BwZWQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHN0YWNrLnB1c2gocG9wcGVkKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRlbGVtID0gYXJyW2ldO1xyXG5cdFx0XHRwcmUgPSBlbGVtLnByZTtcclxuXHRcdFx0ZWxlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XHJcblx0XHRcdHByZXAgPSBlbGUucHJlO1xyXG5cdFx0XHR2YXIgZmxhZyA9IGVsZS52YWx1ZSA9PSAnTWF0aC5wb3cnICYmIGVsZW0udmFsdWUgPT0gJ01hdGgucG93JztcclxuXHRcdFx0aWYgKHByZSA+IHByZXApIHN0YWNrLnB1c2goZWxlbSk7XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdHdoaWxlIChwcmVwID49IHByZSAmJiAhZmxhZyB8fCBmbGFnICYmIHByZSA8IHByZXApIHtcclxuXHRcdFx0XHRcdHBvcHBlZCA9IHN0YWNrLnBvcCgpO1xyXG5cdFx0XHRcdFx0ZWxlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRwb3N0LnB1c2gocG9wcGVkKTtcclxuXHRcdFx0XHRcdHByZXAgPSBlbGUucHJlO1xyXG5cdFx0XHRcdFx0ZmxhZyA9IGVsZW0udmFsdWUgPT0gJ01hdGgucG93JyAmJiBlbGUudmFsdWUgPT0gJ01hdGgucG93JztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0c3RhY2sucHVzaChlbGVtKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gbmV3IE1leHAocG9zdCk7XHJcbn07XHJcbm1vZHVsZS5leHBvcnRzID0gTWV4cDsiLCJ2YXIgTWV4cD1yZXF1aXJlKCcuL3Bvc3RmaXguanMnKTtcclxuTWV4cC5wcm90b3R5cGUucG9zdGZpeEV2YWwgPSBmdW5jdGlvbiAoVXNlckRlZmluZWQpIHtcclxuXHQndXNlIHN0cmljdCc7XHJcblx0VXNlckRlZmluZWQ9VXNlckRlZmluZWR8fHt9O1xyXG5cdFVzZXJEZWZpbmVkLlBJPU1hdGguUEk7XHJcblx0VXNlckRlZmluZWQuRT1NYXRoLkU7XHJcblx0dmFyIHN0YWNrPVtdLHBvcDEscG9wMixwb3AzO1xyXG5cdHZhciBkaXNwPVtdO1xyXG5cdHZhciB0ZW1wPScnO1xyXG5cdHZhciBhcnI9dGhpcy52YWx1ZTtcclxuXHR2YXIgYm9vbD0odHlwZW9mIFVzZXJEZWZpbmVkLm4hPT1cInVuZGVmaW5lZFwiKTtcclxuXHRmb3IodmFyIGk9MDtpPGFyci5sZW5ndGg7aSsrKXtcclxuXHRcdGlmKGFycltpXS50eXBlPT09MSl7XHJcblx0XHRcdHN0YWNrLnB1c2goe3ZhbHVlOmFycltpXS52YWx1ZSx0eXBlOjF9KTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoYXJyW2ldLnR5cGU9PT0zKXtcclxuXHRcdFx0c3RhY2sucHVzaCh7dmFsdWU6VXNlckRlZmluZWRbYXJyW2ldLnZhbHVlXSx0eXBlOjF9KTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoYXJyW2ldLnR5cGU9PT0wKXtcclxuXHRcdFx0aWYodHlwZW9mIHN0YWNrW3N0YWNrLmxlbmd0aC0xXS50eXBlPT09XCJ1bmRlZmluZWRcIil7XHJcblx0XHRcdFx0c3RhY2tbc3RhY2subGVuZ3RoLTFdLnZhbHVlLnB1c2goYXJyW2ldKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHN0YWNrW3N0YWNrLmxlbmd0aC0xXS52YWx1ZT1hcnJbaV0udmFsdWUoc3RhY2tbc3RhY2subGVuZ3RoLTFdLnZhbHVlKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoYXJyW2ldLnR5cGU9PT03KXtcclxuXHRcdFx0aWYodHlwZW9mIHN0YWNrW3N0YWNrLmxlbmd0aC0xXS50eXBlPT09XCJ1bmRlZmluZWRcIil7XHJcblx0XHRcdFx0c3RhY2tbc3RhY2subGVuZ3RoLTFdLnZhbHVlLnB1c2goYXJyW2ldKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNlIHN0YWNrW3N0YWNrLmxlbmd0aC0xXS52YWx1ZT1hcnJbaV0udmFsdWUoc3RhY2tbc3RhY2subGVuZ3RoLTFdLnZhbHVlKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoYXJyW2ldLnR5cGU9PT04KXtcclxuXHRcdFx0cG9wMT1zdGFjay5wb3AoKTtcclxuXHRcdFx0cG9wMj1zdGFjay5wb3AoKTtcclxuXHRcdFx0c3RhY2sucHVzaCh7dHlwZToxLHZhbHVlOmFycltpXS52YWx1ZShwb3AyLnZhbHVlLHBvcDEudmFsdWUpfSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKGFycltpXS50eXBlPT09MTApe1xyXG5cdFx0XHRwb3AxPXN0YWNrLnBvcCgpO1xyXG5cdFx0XHRwb3AyPXN0YWNrLnBvcCgpO1xyXG5cdFx0XHRpZih0eXBlb2YgcG9wMi50eXBlPT09XCJ1bmRlZmluZWRcIil7XHJcblx0XHRcdFx0cG9wMi52YWx1ZT1wb3AyLmNvbmNhdChwb3AxKTtcclxuXHRcdFx0XHRwb3AyLnZhbHVlLnB1c2goYXJyW2ldKTtcclxuXHRcdFx0XHRzdGFjay5wdXNoKHBvcDIpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2UgaWYgKHR5cGVvZiBwb3AxLnR5cGU9PT1cInVuZGVmaW5lZFwiKSB7XHJcblx0XHRcdFx0cG9wMS51bnNoaWZ0KHBvcDIpO1xyXG5cdFx0XHRcdHBvcDEucHVzaChhcnJbaV0pO1xyXG5cdFx0XHRcdHN0YWNrLnB1c2gocG9wMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZXtcclxuXHRcdFx0XHRzdGFjay5wdXNoKHt0eXBlOjEsdmFsdWU6YXJyW2ldLnZhbHVlKHBvcDIudmFsdWUscG9wMS52YWx1ZSl9KTtcclxuICAgICAgICAgICAgfVxyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihhcnJbaV0udHlwZT09PTJ8fGFycltpXS50eXBlPT09OSl7XHJcblx0XHRcdHBvcDE9c3RhY2sucG9wKCk7XHJcblx0XHRcdHBvcDI9c3RhY2sucG9wKCk7XHJcblx0XHRcdGlmKHR5cGVvZiBwb3AyLnR5cGU9PT1cInVuZGVmaW5lZFwiKXtcclxuXHRcdFx0XHRwb3AyPXBvcDIuY29uY2F0KHBvcDEpO1xyXG5cdFx0XHRcdHBvcDIucHVzaChhcnJbaV0pO1xyXG5cdFx0XHRcdHN0YWNrLnB1c2gocG9wMik7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIHBvcDEudHlwZT09PVwidW5kZWZpbmVkXCIpIHtcclxuXHRcdFx0XHRwb3AxLnVuc2hpZnQocG9wMik7XHJcblx0XHRcdFx0cG9wMS5wdXNoKGFycltpXSk7XHJcblx0XHRcdFx0c3RhY2sucHVzaChwb3AxKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRlbHNle1xyXG5cdFx0XHRcdHN0YWNrLnB1c2goe3R5cGU6MSx2YWx1ZTphcnJbaV0udmFsdWUocG9wMi52YWx1ZSxwb3AxLnZhbHVlKX0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKGFycltpXS50eXBlPT09MTIpe1xyXG5cdFx0XHRwb3AxPXN0YWNrLnBvcCgpO1xyXG5cdFx0XHRpZiAodHlwZW9mIHBvcDEudHlwZSE9PVwidW5kZWZpbmVkXCIpIHtcclxuXHRcdFx0XHRwb3AxPVtwb3AxXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwb3AyPXN0YWNrLnBvcCgpO1xyXG5cdFx0XHRwb3AzPXN0YWNrLnBvcCgpO1xyXG5cdFx0XHRzdGFjay5wdXNoKHt0eXBlOjEsdmFsdWU6YXJyW2ldLnZhbHVlKHBvcDMudmFsdWUscG9wMi52YWx1ZSxuZXcgTWV4cChwb3AxKSl9KTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoYXJyW2ldLnR5cGU9PT0xMyl7XHJcblx0XHRcdGlmKGJvb2wpe1xyXG5cdFx0XHRcdHN0YWNrLnB1c2goe3ZhbHVlOlVzZXJEZWZpbmVkW2FycltpXS52YWx1ZV0sdHlwZTozfSk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSBzdGFjay5wdXNoKFthcnJbaV1dKTtcclxuXHRcdH1cclxuXHR9XHJcblx0aWYgKHN0YWNrLmxlbmd0aD4xKSB7XHJcblx0XHR0aHJvdyhuZXcgTWV4cC5FeGNlcHRpb24oXCJVbmNhdWdodCBTeW50YXggZXJyb3JcIikpO1xyXG5cdH1cclxuXHRyZXR1cm4gc3RhY2tbMF0udmFsdWU+MTAwMDAwMDAwMDAwMDAwMD9cIkluZmluaXR5XCI6cGFyc2VGbG9hdChzdGFja1swXS52YWx1ZS50b0ZpeGVkKDE1KSk7XHJcbn07XHJcbk1leHAuZXZhbD1mdW5jdGlvbihzdHIsdG9rZW5zLG9iail7XHJcblx0aWYgKHR5cGVvZiB0b2tlbnM9PT1cInVuZGVmaW5lZFwiKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5sZXgoc3RyKS50b1Bvc3RmaXgoKS5wb3N0Zml4RXZhbCgpO1xyXG5cdH1cclxuXHRlbHNlIGlmICh0eXBlb2Ygb2JqPT09XCJ1bmRlZmluZWRcIikge1xyXG5cdFx0aWYgKHR5cGVvZiB0b2tlbnMubGVuZ3RoIT09XCJ1bmRlZmluZWRcIikgXHJcblx0XHRcdHJldHVybiB0aGlzLmxleChzdHIsdG9rZW5zKS50b1Bvc3RmaXgoKS5wb3N0Zml4RXZhbCgpO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRyZXR1cm4gdGhpcy5sZXgoc3RyKS50b1Bvc3RmaXgoKS5wb3N0Zml4RXZhbCh0b2tlbnMpO1xyXG5cdH1cclxuXHRlbHNlXHJcblx0XHRyZXR1cm4gdGhpcy5sZXgoc3RyLHRva2VucykudG9Qb3N0Zml4KCkucG9zdGZpeEV2YWwob2JqKTtcclxufTtcclxubW9kdWxlLmV4cG9ydHM9TWV4cDsiLCJ2YXIgTWV4cD1yZXF1aXJlKCcuL3Bvc3RmaXhfZXZhbHVhdG9yLmpzJyk7XHJcbk1leHAucHJvdG90eXBlLmZvcm11bGFFdmFsID0gZnVuY3Rpb24gKCkge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdHZhciBzdGFjaz1bXSxwb3AxLHBvcDIscG9wMztcclxuXHR2YXIgZGlzcD1bXTtcclxuXHR2YXIgdGVtcD0nJztcclxuXHR2YXIgYXJyPXRoaXMudmFsdWU7XHJcblx0Zm9yKHZhciBpPTA7aTxhcnIubGVuZ3RoO2krKyl7XHJcblx0XHRpZihhcnJbaV0udHlwZT09PTF8fGFycltpXS50eXBlPT09Myl7XHJcblx0XHRcdGRpc3AucHVzaCh7dmFsdWU6YXJyW2ldLnR5cGU9PT0zP2FycltpXS5zaG93OmFycltpXS52YWx1ZSx0eXBlOjF9KTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoYXJyW2ldLnR5cGU9PT0xMyl7XHJcblx0XHRcdGRpc3AucHVzaCh7dmFsdWU6YXJyW2ldLnNob3csdHlwZToxfSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKGFycltpXS50eXBlPT09MCl7XHJcblx0XHRcdGRpc3BbZGlzcC5sZW5ndGgtMV09e3ZhbHVlOmFycltpXS5zaG93KyhhcnJbaV0uc2hvdyE9XCItXCI/XCIoXCI6XCJcIikrZGlzcFtkaXNwLmxlbmd0aC0xXS52YWx1ZSsoYXJyW2ldLnNob3chPVwiLVwiP1wiKVwiOlwiXCIpLHR5cGU6MH07XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKGFycltpXS50eXBlPT09Nyl7XHJcblx0XHRcdGRpc3BbZGlzcC5sZW5ndGgtMV09e3ZhbHVlOihkaXNwW2Rpc3AubGVuZ3RoLTFdLnR5cGUhPTE/XCIoXCI6XCJcIikrZGlzcFtkaXNwLmxlbmd0aC0xXS52YWx1ZSsoZGlzcFtkaXNwLmxlbmd0aC0xXS50eXBlIT0xP1wiKVwiOlwiXCIpK2FycltpXS5zaG93LHR5cGU6N307XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKGFycltpXS50eXBlPT09MTApe1xyXG5cdFx0XHRwb3AxPWRpc3AucG9wKCk7XHJcblx0XHRcdHBvcDI9ZGlzcC5wb3AoKTtcclxuXHRcdFx0aWYoYXJyW2ldLnNob3c9PT0nUCd8fGFycltpXS5zaG93PT09J0MnKWRpc3AucHVzaCh7dmFsdWU6XCI8c3VwPlwiK3BvcDIudmFsdWUrXCI8L3N1cD5cIithcnJbaV0uc2hvdytcIjxzdWI+XCIrcG9wMS52YWx1ZStcIjwvc3ViPlwiLHR5cGU6MTB9KTtcclxuXHRcdFx0ZWxzZSBkaXNwLnB1c2goe3ZhbHVlOihwb3AyLnR5cGUhPTE/XCIoXCI6XCJcIikrcG9wMi52YWx1ZSsocG9wMi50eXBlIT0xP1wiKVwiOlwiXCIpK1wiPHN1cD5cIitwb3AxLnZhbHVlK1wiPC9zdXA+XCIsdHlwZToxfSk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKGFycltpXS50eXBlPT09Mnx8YXJyW2ldLnR5cGU9PT05KXtcclxuXHRcdFx0cG9wMT1kaXNwLnBvcCgpO1xyXG5cdFx0XHRwb3AyPWRpc3AucG9wKCk7XHJcblx0XHRcdGRpc3AucHVzaCh7dmFsdWU6KHBvcDIudHlwZSE9MT9cIihcIjpcIlwiKStwb3AyLnZhbHVlKyhwb3AyLnR5cGUhPTE/XCIpXCI6XCJcIikrYXJyW2ldLnNob3crKHBvcDEudHlwZSE9MT9cIihcIjpcIlwiKStwb3AxLnZhbHVlKyhwb3AxLnR5cGUhPTE/XCIpXCI6XCJcIiksdHlwZTphcnJbaV0udHlwZX0pO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihhcnJbaV0udHlwZT09PTEyKXtcclxuXHRcdFx0cG9wMT1kaXNwLnBvcCgpO1xyXG5cdFx0XHRwb3AyPWRpc3AucG9wKCk7XHJcblx0XHRcdHBvcDM9ZGlzcC5wb3AoKTtcclxuXHRcdFx0ZGlzcC5wdXNoKHt2YWx1ZTphcnJbaV0uc2hvdytcIihcIitwb3AzLnZhbHVlK1wiLFwiK3BvcDIudmFsdWUrXCIsXCIrcG9wMS52YWx1ZStcIilcIix0eXBlOjEyfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBkaXNwWzBdLnZhbHVlO1xyXG59O1xyXG5tb2R1bGUuZXhwb3J0cz1NZXhwOyIsImltcG9ydCB7IE1hcmtkb3duVmlldywgQXBwLCBOb3RpY2UsIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBFeHRlbmRlZEJsb2NrQ2FjaGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0U3RvcmUgfSBmcm9tIFwiLi9idXR0b25TdG9yZVwiO1xuaW1wb3J0IHsgY3JlYXRlQ29udGVudEFycmF5LCBoYW5kbGVWYWx1ZUFycmF5IH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUJ1dHRvbiA9IGFzeW5jIChcbiAgYXBwOiBBcHAsXG4gIHJlbW92ZTogc3RyaW5nLFxuICBsaW5lU3RhcnQ6IG51bWJlcixcbiAgbGluZUVuZDogbnVtYmVyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgeyBjb250ZW50QXJyYXksIGZpbGUgfSA9IGF3YWl0IGNyZWF0ZUNvbnRlbnRBcnJheShhcHApO1xuICBjb25zdCBzdG9yZSA9IGdldFN0b3JlKGFwcC5pc01vYmlsZSk7XG4gIGlmIChyZW1vdmUgPT09IFwidHJ1ZVwiKSB7XG4gICAgY29uc3QgbnVtYmVyT2ZJdGVtcyA9IGxpbmVFbmQgLSBsaW5lU3RhcnQ7XG4gICAgY29udGVudEFycmF5LnNwbGljZShsaW5lU3RhcnQsIG51bWJlck9mSXRlbXMgKyAxKTtcbiAgICBpZiAoXG4gICAgICBjb250ZW50QXJyYXlbbGluZVN0YXJ0XSAmJlxuICAgICAgY29udGVudEFycmF5W2xpbmVTdGFydF0uaW5jbHVkZXMoXCJeYnV0dG9uLVwiKVxuICAgICkge1xuICAgICAgY29udGVudEFycmF5LnNwbGljZShsaW5lU3RhcnQsIDEpO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50ID0gY29udGVudEFycmF5LmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBjb250ZW50KTtcbiAgfVxuICBpZiAobGluZVN0YXJ0ID09PSBsaW5lRW5kKSB7XG4gICAgY29udGVudEFycmF5LnNwbGljZShsaW5lU3RhcnQsIDEpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50QXJyYXkuam9pbihcIlxcblwiKTtcbiAgICBhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIGNvbnRlbnQpO1xuICB9IGVsc2Uge1xuICAgIGhhbmRsZVZhbHVlQXJyYXkocmVtb3ZlLCBhc3luYyAoYXJnQXJyYXkpID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPVxuICAgICAgICBzdG9yZSAmJlxuICAgICAgICBzdG9yZS5maWx0ZXIoKGl0ZW06IEV4dGVuZGVkQmxvY2tDYWNoZSkgPT4ge1xuICAgICAgICAgIGxldCBleGlzdHM7XG4gICAgICAgICAgYXJnQXJyYXkuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gYGJ1dHRvbi0ke2FyZ31gICYmIGl0ZW0ucGF0aCA9PT0gZmlsZS5wYXRoKSB7XG4gICAgICAgICAgICAgIGV4aXN0cyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0cztcbiAgICAgICAgfSk7XG4gICAgICBpZiAoYnV0dG9uc1swXSkge1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b246IEV4dGVuZGVkQmxvY2tDYWNoZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gYnV0dG9uLnBvc2l0aW9uLnN0YXJ0LmxpbmUgLSBvZmZzZXQ7XG4gICAgICAgICAgY29uc3QgbnVtTGluZXMgPVxuICAgICAgICAgICAgYnV0dG9uLnBvc2l0aW9uLmVuZC5saW5lIC0gYnV0dG9uLnBvc2l0aW9uLnN0YXJ0LmxpbmU7XG4gICAgICAgICAgY29udGVudEFycmF5LnNwbGljZShzdGFydCwgbnVtTGluZXMgKyAyKTtcbiAgICAgICAgICBvZmZzZXQgKz0gbnVtTGluZXMgKyAyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGNvbnRlbnRBcnJheS5qb2luKFwiXFxuXCIpO1xuICAgICAgICBhd2FpdCBhcHAudmF1bHQubW9kaWZ5KGZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VjdGlvbiA9IGFzeW5jIChcbiAgYXBwOiBBcHAsXG4gIHNlY3Rpb246IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgY29udGVudEFycmF5LCBmaWxlIH0gPSBhd2FpdCBjcmVhdGVDb250ZW50QXJyYXkoYXBwKTtcbiAgaWYgKHNlY3Rpb24uaW5jbHVkZXMoXCJbXCIpICYmIHNlY3Rpb24uaW5jbHVkZXMoXCJdXCIpKSB7XG4gICAgY29uc3QgYXJncyA9IHNlY3Rpb24ubWF0Y2goL1xcWyguKilcXF0vKTtcbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgY29uc3QgYXJnQXJyYXkgPSBhcmdzWzFdLnNwbGl0KC8sXFxzPy8pO1xuICAgICAgaWYgKGFyZ0FycmF5WzBdKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFyc2VJbnQoYXJnQXJyYXlbMF0pIC0gMTtcbiAgICAgICAgY29uc3QgZW5kID0gcGFyc2VJbnQoYXJnQXJyYXlbMV0pO1xuICAgICAgICBjb25zdCBudW1MaW5lcyA9IGVuZCAtIHN0YXJ0O1xuICAgICAgICBjb250ZW50QXJyYXkuc3BsaWNlKHN0YXJ0LCBudW1MaW5lcyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50QXJyYXkuam9pbihcIlxcblwiKTtcbiAgICAgICAgYXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwcmVwZW5kQ29udGVudCA9IGFzeW5jIChcbiAgYXBwOiBBcHAsXG4gIGluc2VydDogc3RyaW5nLFxuICBsaW5lU3RhcnQ6IG51bWJlclxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFjdGl2ZVZpZXcgPSBhcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcbiAgaWYgKGFjdGl2ZVZpZXcpIHtcbiAgICBjb25zdCBmaWxlID0gYWN0aXZlVmlldy5maWxlO1xuICAgIGxldCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgY29uc3QgY29udGVudEFycmF5ID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICBjb250ZW50QXJyYXkuc3BsaWNlKGxpbmVTdGFydCwgMCwgaW5zZXJ0KTtcbiAgICBjb250ZW50ID0gY29udGVudEFycmF5LmpvaW4oXCJcXG5cIik7XG4gICAgYXdhaXQgYXBwLnZhdWx0Lm1vZGlmeShmaWxlLCBjb250ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgTm90aWNlKFwiVGhlcmUgd2FzIGFuIGlzc3VlIHByZXBlbmRpbmcgY29udGVudCwgcGxlYXNlIHRyeSBhZ2FpblwiLCAyMDAwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZENvbnRlbnQgPSBhc3luYyAoXG4gIGFwcDogQXBwLFxuICBpbnNlcnQ6IHN0cmluZyxcbiAgbGluZUVuZDogbnVtYmVyXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgYWN0aXZlVmlldyA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICBpZiAoYWN0aXZlVmlldykge1xuICAgIGNvbnN0IGZpbGUgPSBhY3RpdmVWaWV3LmZpbGU7XG4gICAgbGV0IGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICBjb25zdCBjb250ZW50QXJyYXkgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuICAgIGxldCBpbnNlcnRpb25Qb2ludDtcbiAgICBpZiAoXG4gICAgICBjb250ZW50QXJyYXlbbGluZUVuZCArIDFdICYmXG4gICAgICBjb250ZW50QXJyYXlbbGluZUVuZCArIDFdLmluY2x1ZGVzKFwiXmJ1dHRvblwiKVxuICAgICkge1xuICAgICAgaW5zZXJ0aW9uUG9pbnQgPSBsaW5lRW5kICsgMjtcbiAgICAgIGluc2VydCA9IGBcXG4ke2luc2VydH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnNlcnRpb25Qb2ludCA9IGxpbmVFbmQgKyAxO1xuICAgIH1cbiAgICBjb250ZW50QXJyYXkuc3BsaWNlKGluc2VydGlvblBvaW50LCAwLCBgJHtpbnNlcnR9YCk7XG4gICAgY29udGVudCA9IGNvbnRlbnRBcnJheS5qb2luKFwiXFxuXCIpO1xuICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgY29udGVudCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IE5vdGljZShcIlRoZXJlIHdhcyBhbiBpc3N1ZSBhcHBlbmRpbmcgY29udGVudCwgcGxlYXNlIHRyeSBhZ2FpblwiLCAyMDAwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZENvbnRlbnRBdExpbmUgPSBhc3luYyAoXG4gIGFwcDogQXBwLFxuICBpbnNlcnQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgbGluZU51bWJlciA9IHR5cGUubWF0Y2goLyhcXGQrKS9nKTtcbiAgaWYgKGxpbmVOdW1iZXJbMF0pIHtcbiAgICBjb25zdCBpbnNlcnRpb25Qb2ludCA9IHBhcnNlSW50KGxpbmVOdW1iZXJbMF0pIC0gMTtcbiAgICBjb25zdCBhY3RpdmVWaWV3ID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gICAgaWYgKGFjdGl2ZVZpZXcpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBhY3RpdmVWaWV3LmZpbGU7XG4gICAgICBsZXQgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgICAgY29uc3QgY29udGVudEFycmF5ID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICAgIGNvbnRlbnRBcnJheS5zcGxpY2UoaW5zZXJ0aW9uUG9pbnQsIDAsIGAke2luc2VydH1gKTtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50QXJyYXkuam9pbihcIlxcblwiKTtcbiAgICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgY29udGVudCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ldyBOb3RpY2UoXCJUaGVyZSB3YXMgYW4gaXNzdWUgYWRkaW5nIGNvbnRlbnQsIHBsZWFzZSB0cnkgYWdhaW5cIiwgMjAwMCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVOb3RlID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgY29udGVudDogc3RyaW5nLFxuICB0eXBlOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBwYXRoID0gdHlwZS5tYXRjaCgvXFwoKFtcXHNcXFNdKj8pLD9cXHM/KHNwbGl0KT9cXCkvKTtcbiAgaWYgKHBhdGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZShgJHtwYXRoWzFdfS5tZGAsIGNvbnRlbnQpO1xuICAgICAgY29uc3QgZmlsZSA9IGFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoYCR7cGF0aFsxXX0ubWRgKSBhcyBURmlsZTtcbiAgICAgIGlmIChwYXRoWzJdKSB7XG4gICAgICAgIGF3YWl0IGFwcC53b3Jrc3BhY2Uuc3BsaXRBY3RpdmVMZWFmKCkub3BlbkZpbGUoZmlsZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcHAud29ya3NwYWNlLmFjdGl2ZUxlYWYub3BlbkZpbGUoZmlsZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbmV3IE5vdGljZShcIlRoZXJlIHdhcyBhbiBlcnJvciEgTWF5YmUgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHM/XCIsIDIwMDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXcgTm90aWNlKGBjb3VsZG4ndCBwYXJzZSB0aGUgcGF0aCFgLCAyMDAwKTtcbiAgfVxufTtcbiIsImltcG9ydCB7IEFwcCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQXJndW1lbnRzLCBQb3NpdGlvbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZW50QXJyYXkgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0QnV0dG9uUG9zaXRpb24gPSAoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgYXJnczogQXJndW1lbnRzXG4pOiBQb3NpdGlvbiA9PiB7XG4gIGxldCBmaW5hbFBvc2l0aW9uOiBQb3NpdGlvbjtcbiAgY29uc3QgcG9zc2libGVQb3NpdGlvbnM6IFBvc2l0aW9uW10gPSBbXTtcbiAgbGV0IHBvc3NpYmxlUG9zaXRpb246IFBvc2l0aW9uID0geyBsaW5lU3RhcnQ6IDAsIGxpbmVFbmQ6IDAgfTtcbiAgY29uc3QgY29udGVudEFycmF5ID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgbGV0IG9wZW4gPSBmYWxzZTtcbiAgY29udGVudEFycmF5LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGl0ZW0uaW5jbHVkZXMoXCJgYGBcIikpIHtcbiAgICAgIGlmIChvcGVuID09PSBmYWxzZSkge1xuICAgICAgICBwb3NzaWJsZVBvc2l0aW9uLmxpbmVTdGFydCA9IGluZGV4O1xuICAgICAgICBvcGVuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvc3NpYmxlUG9zaXRpb24ubGluZUVuZCA9IGluZGV4O1xuICAgICAgICBwb3NzaWJsZVBvc2l0aW9ucy5wdXNoKHBvc3NpYmxlUG9zaXRpb24pO1xuICAgICAgICBwb3NzaWJsZVBvc2l0aW9uID0geyBsaW5lU3RhcnQ6IDAsIGxpbmVFbmQ6IDAgfTtcbiAgICAgICAgb3BlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHBvc3NpYmxlUG9zaXRpb25zLmZvckVhY2goKHBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3QgY29kZWJsb2NrID0gY29udGVudEFycmF5XG4gICAgICAuc2xpY2UocG9zaXRpb24ubGluZVN0YXJ0LCBwb3NpdGlvbi5saW5lRW5kICsgMSlcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIGlmIChjb2RlYmxvY2suaW5jbHVkZXMoXCJidXR0b25cIikgJiYgY29kZWJsb2NrLmluY2x1ZGVzKGFyZ3MubmFtZSkpIHtcbiAgICAgIGZpbmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmluYWxQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbmxpbmVCdXR0b25Qb3NpdGlvbiA9IGFzeW5jIChcbiAgYXBwOiBBcHAsXG4gIGlkOiBzdHJpbmdcbik6IFByb21pc2U8UG9zaXRpb24+ID0+IHtcbiAgY29uc3QgY29udGVudCA9IGF3YWl0IGNyZWF0ZUNvbnRlbnRBcnJheShhcHApO1xuICBjb25zdCBwb3NpdGlvbiA9IHsgbGluZVN0YXJ0OiAwLCBsaW5lRW5kOiAwIH07XG4gIGNvbnRlbnQuY29udGVudEFycmF5XG4gICAgLm1hcCgobGluZTogc3RyaW5nKSA9PiBsaW5lLnNwbGl0KFwiIFwiKSlcbiAgICAuZm9yRWFjaCgod29yZHMsIGluZGV4KSA9PiB7XG4gICAgICB3b3Jkcy5mb3JFYWNoKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkLnN0YXJ0c1dpdGgoXCJgYnV0dG9uXCIpKSB7XG4gICAgICAgICAgaWYgKHdvcmQgPT09IGBcXGBidXR0b24tJHtpZH1cXGBgKSB7XG4gICAgICAgICAgICBwb3NpdGlvbi5saW5lU3RhcnQgPSBpbmRleDtcbiAgICAgICAgICAgIHBvc2l0aW9uLmxpbmVFbmQgPSBpbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICByZXR1cm4gcG9zaXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZmluZE51bWJlciA9IGFzeW5jIChcbiAgYXBwOiBBcHAsXG4gIGxpbmVOdW1iZXI6IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICBjb25zdCBjb250ZW50ID0gYXdhaXQgY3JlYXRlQ29udGVudEFycmF5KGFwcCk7XG4gIGNvbnN0IHZhbHVlOiBzdHJpbmdbXSA9IFtdO1xuICBjb250ZW50LmNvbnRlbnRBcnJheS5mb3JFYWNoKChsaW5lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoaW5kZXggPT09IGxpbmVOdW1iZXIgLSAxKSB7XG4gICAgICB2YWx1ZS5wdXNoKGxpbmUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGNvbnZlcnRXb3JkcyA9IHZhbHVlXG4gICAgLmpvaW4oXCJcIilcbiAgICAucmVwbGFjZShcInBsdXNcIiwgXCIrXCIpXG4gICAgLnJlcGxhY2UoXCJtaW51c1wiLCBcIi1cIilcbiAgICAucmVwbGFjZShcInRpbWVzXCIsIFwiKlwiKVxuICAgIC5yZXBsYWNlKC9kaXZpZGUoZCk/KFxcc2J5KT8vZywgXCIvXCIpO1xuICBjb25zdCBudW1iZXJzID0gY29udmVydFdvcmRzLnJlcGxhY2UoL1xccy9nLCBcIlwiKS5tYXRjaCgvW15cXHc6XSo/XFxkKz8vZyk7XG4gIHJldHVybiBudW1iZXJzO1xufTtcbiIsImltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBOb3RpY2UsIFRGaWxlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgbWV4cCBmcm9tIFwibWF0aC1leHByZXNzaW9uLWV2YWx1YXRvclwiO1xuXG5pbXBvcnQgeyBBcmd1bWVudHMsIFBvc2l0aW9uIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGFwcGVuZENvbnRlbnQsXG4gIGNyZWF0ZU5vdGUsXG4gIHByZXBlbmRDb250ZW50LFxuICBhZGRDb250ZW50QXRMaW5lLFxuICByZW1vdmVCdXR0b24sXG4gIHJlbW92ZVNlY3Rpb24sXG59IGZyb20gXCIuL2hhbmRsZXJzXCI7XG5pbXBvcnQge1xuICBnZXRCdXR0b25Qb3NpdGlvbixcbiAgZ2V0SW5saW5lQnV0dG9uUG9zaXRpb24sXG4gIGZpbmROdW1iZXIsXG59IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgaGFuZGxlVmFsdWVBcnJheSwgZ2V0TmV3QXJncyB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQge1xuICBnZXRCdXR0b25Td2FwQnlJZCxcbiAgc2V0QnV0dG9uU3dhcEJ5SWQsXG4gIGdldEJ1dHRvbkJ5SWQsXG59IGZyb20gXCIuL2J1dHRvblN0b3JlXCI7XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGUgPSBhc3luYyAoXG4gIGFwcDogQXBwLFxuICB7IGFjdGlvbiB9OiBBcmd1bWVudHMsXG4gIHBvc2l0aW9uOiBQb3NpdGlvblxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGxldCBlcXVhdGlvbiA9IGFjdGlvbjtcbiAgY29uc3QgdmFyaWFibGVzID0gYWN0aW9uLm1hdGNoKC9cXCRbMC05XSovZyk7XG4gIGlmICh2YXJpYWJsZXMpIHtcbiAgICBjb25zdCBvdXRwdXQgPSB2YXJpYWJsZXMubWFwKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVmlldyA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgICAgaWYgKGFjdGl2ZVZpZXcpIHtcbiAgICAgICAgY29uc3QgbGluZU51bWJlciA9IHBhcnNlSW50KHZhbHVlLnN1YnN0cmluZygxKSk7XG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBhd2FpdCBmaW5kTnVtYmVyKGFwcCwgbGluZU51bWJlcik7XG4gICAgICAgIHJldHVybiB7IHZhcmlhYmxlOiB2YWx1ZSwgbnVtYmVycyB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3IE5vdGljZShgY291bGRuJ3QgcmVhZCBmaWxlYCwgMjAwMCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCBQcm9taXNlLmFsbChvdXRwdXQpO1xuICAgIHJlc29sdmVkLmZvckVhY2goKHRlcm06IHsgdmFyaWFibGU6IHN0cmluZzsgbnVtYmVyczogc3RyaW5nW10gfSkgPT4ge1xuICAgICAgaWYgKHRlcm0ubnVtYmVycykge1xuICAgICAgICBlcXVhdGlvbiA9IGVxdWF0aW9uLnJlcGxhY2UodGVybS52YXJpYWJsZSwgdGVybS5udW1iZXJzLmpvaW4oXCJcIikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3IE5vdGljZShcIkNoZWNrIHRoZSBsaW5lIG51bWJlciBpbiB5b3VyIGNhbGN1bGF0ZSBidXR0b25cIiwgMzAwMCk7XG4gICAgICAgIGVxdWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGZ1biA9IGVxdWF0aW9uICYmIG1leHAuZXZhbChlcXVhdGlvbik7XG4gIGZ1biAmJiBhcHBlbmRDb250ZW50KGFwcCwgYFJlc3VsdDogJHtmdW59YCwgcG9zaXRpb24ubGluZUVuZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlID0gKFxuICBhcHA6IEFwcCxcbiAgeyByZW1vdmUgfTogQXJndW1lbnRzLFxuICB7IGxpbmVTdGFydCwgbGluZUVuZCB9OiB7IGxpbmVTdGFydDogbnVtYmVyOyBsaW5lRW5kOiBudW1iZXIgfVxuKTogdm9pZCA9PiB7XG4gIHNldFRpbWVvdXQoKCkgPT4gcmVtb3ZlQnV0dG9uKGFwcCwgcmVtb3ZlLCBsaW5lU3RhcnQsIGxpbmVFbmQpLCAxMDAwKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXBsYWNlID0gKGFwcDogQXBwLCB7IHJlcGxhY2UgfTogQXJndW1lbnRzKTogdm9pZCA9PiB7XG4gIHJlbW92ZVNlY3Rpb24oYXBwLCByZXBsYWNlKTtcbn07XG5leHBvcnQgY29uc3QgdGV4dCA9IGFzeW5jIChcbiAgYXBwOiBBcHAsXG4gIGFyZ3M6IEFyZ3VtZW50cyxcbiAgcG9zaXRpb246IFBvc2l0aW9uXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgLy8gcHJlcGVuZCB0ZW1wbGF0ZSBhYm92ZSB0aGUgYnV0dG9uXG4gIGlmIChhcmdzLnR5cGUuaW5jbHVkZXMoXCJwcmVwZW5kXCIpKSB7XG4gICAgcHJlcGVuZENvbnRlbnQoYXBwLCBhcmdzLmFjdGlvbiwgcG9zaXRpb24ubGluZVN0YXJ0KTtcbiAgfVxuICAvLyBhcHBlbmQgdGVtcGxhdGUgYmVsb3cgdGhlIGJ1dHRvblxuICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwiYXBwZW5kXCIpKSB7XG4gICAgYXBwZW5kQ29udGVudChhcHAsIGFyZ3MuYWN0aW9uLCBwb3NpdGlvbi5saW5lRW5kKTtcbiAgfVxuICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwibm90ZVwiKSkge1xuICAgIGNyZWF0ZU5vdGUoYXBwLCBhcmdzLmFjdGlvbiwgYXJncy50eXBlKTtcbiAgfVxuICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwibGluZVwiKSkge1xuICAgIGFkZENvbnRlbnRBdExpbmUoYXBwLCBhcmdzLmFjdGlvbiwgYXJncy50eXBlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRlbXBsYXRlID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgYXJnczogQXJndW1lbnRzLFxuICBwb3NpdGlvbjogUG9zaXRpb25cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0ZW1wbGF0ZXNFbmFibGVkID0gYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zLnRlbXBsYXRlcy5lbmFibGVkO1xuICBjb25zdCB0ZW1wbGF0ZXJQbHVnaW5FbmFibGVkID1cbiAgICBhcHAucGx1Z2lucy5wbHVnaW5zW1widGVtcGxhdGVyLW9ic2lkaWFuXCJdO1xuXG4gIC8vIG9ubHkgcnVuIGlmIHRlbXBsYXRlcyBwbHVnaW4gaXMgZW5hYmxlZFxuICBpZiAodGVtcGxhdGVzRW5hYmxlZCB8fCB0ZW1wbGF0ZXJQbHVnaW5FbmFibGVkKSB7XG4gICAgY29uc3QgZm9sZGVyczogc3RyaW5nW10gPSBbXG4gICAgICB0ZW1wbGF0ZXNFbmFibGVkICYmIGFwcC5pbnRlcm5hbFBsdWdpbnMucGx1Z2lucy50ZW1wbGF0ZXMuaW5zdGFuY2Uub3B0aW9ucy5mb2xkZXI/LnRvTG93ZXJDYXNlKCksXG4gICAgICB0ZW1wbGF0ZXJQbHVnaW5FbmFibGVkICYmIGFwcC5wbHVnaW5zPy5wbHVnaW5zW1xuICAgICAgICBcInRlbXBsYXRlci1vYnNpZGlhblwiXG4gICAgICBdPy5zZXR0aW5ncy50ZW1wbGF0ZV9mb2xkZXI/LnRvTG93ZXJDYXNlKCksXG4gICAgXS5maWx0ZXIoKGZvbGRlcikgPT4gZm9sZGVyKTtcbiAgICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBhcmdzLmFjdGlvbi50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGFsbEZpbGVzID0gYXBwLnZhdWx0LmdldEZpbGVzKCk7XG4gICAgY29uc3QgZmlsZTogVEZpbGUgPSBhbGxGaWxlcy5maWx0ZXIoKGZpbGUpID0+IHtcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgZm9sZGVyc1swXSAmJlxuICAgICAgICBmb2xkZXJzLmZvckVhY2goKGZvbGRlcikgPT4ge1xuICAgICAgICAgIGlmIChmaWxlLnBhdGgudG9Mb3dlckNhc2UoKSA9PT0gYCR7Zm9sZGVyfS8ke3RlbXBsYXRlRmlsZX0ubWRgKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9KVswXTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGZpbGUpO1xuICAgICAgLy8gcHJlcGVuZCB0ZW1wbGF0ZSBhYm92ZSB0aGUgYnV0dG9uXG4gICAgICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwicHJlcGVuZFwiKSkge1xuICAgICAgICBwcmVwZW5kQ29udGVudChhcHAsIGNvbnRlbnQsIHBvc2l0aW9uLmxpbmVTdGFydCk7XG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGFwcC5jb21tYW5kcy5leGVjdXRlQ29tbWFuZEJ5SWQoXG4gICAgICAgICAgICAgIFwidGVtcGxhdGVyLW9ic2lkaWFuOnJlcGxhY2UtaW4tZmlsZS10ZW1wbGF0ZXJcIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAxMDBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIGFwcGVuZCB0ZW1wbGF0ZSBiZWxvdyB0aGUgYnV0dG9uXG4gICAgICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwiYXBwZW5kXCIpKSB7XG4gICAgICAgIGFwcGVuZENvbnRlbnQoYXBwLCBjb250ZW50LCBwb3NpdGlvbi5saW5lRW5kKTtcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgYXBwLmNvbW1hbmRzLmV4ZWN1dGVDb21tYW5kQnlJZChcbiAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZXItb2JzaWRpYW46cmVwbGFjZS1pbi1maWxlLXRlbXBsYXRlclwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDEwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MudHlwZS5pbmNsdWRlcyhcIm5vdGVcIikpIHtcbiAgICAgICAgY3JlYXRlTm90ZShhcHAsIGNvbnRlbnQsIGFyZ3MudHlwZSk7XG4gICAgICB9XG4gICAgICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwibGluZVwiKSkge1xuICAgICAgICBhZGRDb250ZW50QXRMaW5lKGFwcCwgY29udGVudCwgYXJncy50eXBlKTtcbiAgICAgICAgc2V0VGltZW91dChcbiAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgYXBwLmNvbW1hbmRzLmV4ZWN1dGVDb21tYW5kQnlJZChcbiAgICAgICAgICAgICAgXCJ0ZW1wbGF0ZXItb2JzaWRpYW46cmVwbGFjZS1pbi1maWxlLXRlbXBsYXRlclwiXG4gICAgICAgICAgICApLFxuICAgICAgICAgIDEwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBuZXcgTm90aWNlKFxuICAgICAgICBgQ291bGRuJ3QgZmluZCB0aGUgc3BlY2lmaWVkIHRlbXBsYXRlLCBwbGVhc2UgY2hlY2sgYW5kIHRyeSBhZ2FpbmAsXG4gICAgICAgIDIwMDBcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ldyBOb3RpY2UoXG4gICAgICBcIllvdSBuZWVkIHRvIGhhdmUgdGhlIFRlbXBsYXRlcyBvciBUZW1wbGF0ZXIgcGx1Z2luIGVuYWJsZWQgYW5kIFRlbXBsYXRlIGZvbGRlciBkZWZpbmVkXCIsXG4gICAgICAyMDAwXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxpbmsgPSAoeyBhY3Rpb24gfTogQXJndW1lbnRzKTogdm9pZCA9PiB7XG4gIGNvbnN0IGxpbmsgPSBhY3Rpb24udHJpbSgpO1xuICB3aW5kb3cub3BlbihsaW5rKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21tYW5kID0gKGFwcDogQXBwLCB7IGFjdGlvbiB9OiBBcmd1bWVudHMpOiB2b2lkID0+IHtcbiAgY29uc3QgYWxsQ29tbWFuZHMgPSBhcHAuY29tbWFuZHMubGlzdENvbW1hbmRzKCk7XG4gIGNvbnN0IGNvbW1hbmQgPSBhbGxDb21tYW5kcy5maWx0ZXIoXG4gICAgKGNvbW1hbmQpID0+IGNvbW1hbmQubmFtZS50b1VwcGVyQ2FzZSgpID09PSBhY3Rpb24udG9VcHBlckNhc2UoKS50cmltKClcbiAgKVswXTtcbiAgYXBwLmNvbW1hbmRzLmV4ZWN1dGVDb21tYW5kQnlJZChjb21tYW5kLmlkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzd2FwID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgc3dhcDogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBpbmxpbmU6IGJvb2xlYW4sXG4gIGZpbGU6IFRGaWxlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaGFuZGxlVmFsdWVBcnJheShzd2FwLCBhc3luYyAoYXJnQXJyYXkpID0+IHtcbiAgICBjb25zdCBzd2FwID0gYXdhaXQgZ2V0QnV0dG9uU3dhcEJ5SWQoYXBwLCBpZCk7XG4gICAgY29uc3QgbmV3U3dhcCA9IHN3YXAgKyAxID4gYXJnQXJyYXkubGVuZ3RoIC0gMSA/IDAgOiBzd2FwICsgMTtcbiAgICBzZXRCdXR0b25Td2FwQnlJZChhcHAsIGlkLCBuZXdTd2FwKTtcbiAgICBsZXQgYXJncyA9IGF3YWl0IGdldEJ1dHRvbkJ5SWQoYXBwLCBhcmdBcnJheVtzd2FwXSk7XG4gICAgbGV0IHBvc2l0aW9uO1xuICAgIGxldCBjb250ZW50O1xuICAgIGlmIChhcmdzKSB7XG4gICAgICBpZiAoYXJncy50ZW1wbGF0ZXIpIHtcbiAgICAgICAgYXJncyA9IGF3YWl0IHRlbXBsYXRlcihhcHAsIHBvc2l0aW9uKTtcbiAgICAgICAgaWYgKGlubGluZSkge1xuICAgICAgICAgIG5ldyBOb3RpY2UoXCJ0ZW1wbGF0ZXIgYXJncyBkb24ndCB3b3JrIHdpdGggaW5saW5lIGJ1dHRvbnMgeWV0XCIsIDIwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYXJncy5yZXBsYWNlKSB7XG4gICAgICAgIHJlcGxhY2UoYXBwLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLnR5cGUgPT09IFwiY29tbWFuZFwiKSB7XG4gICAgICAgIGNvbW1hbmQoYXBwLCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBsaW5rIGJ1dHRvbnNcbiAgICAgIGlmIChhcmdzLnR5cGUgPT09IFwibGlua1wiKSB7XG4gICAgICAgIGxpbmsoYXJncyk7XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgdGVtcGxhdGUgYnV0dG9uc1xuICAgICAgaWYgKGFyZ3MudHlwZSAmJiBhcmdzLnR5cGUuaW5jbHVkZXMoXCJ0ZW1wbGF0ZVwiKSkge1xuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoZmlsZSk7XG4gICAgICAgICAgcG9zaXRpb24gPSBpbmxpbmVcbiAgICAgICAgICAgID8gYXdhaXQgZ2V0SW5saW5lQnV0dG9uUG9zaXRpb24oYXBwLCBpZClcbiAgICAgICAgICAgIDogZ2V0QnV0dG9uUG9zaXRpb24oY29udGVudCwgYXJncyk7XG4gICAgICAgICAgdGVtcGxhdGUoYXBwLCBhcmdzLCBwb3NpdGlvbik7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLnR5cGUgPT09IFwiY2FsY3VsYXRlXCIpIHtcbiAgICAgICAgY2FsY3VsYXRlKGFwcCwgYXJncywgcG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgaWYgKGFyZ3MudHlwZSAmJiBhcmdzLnR5cGUuaW5jbHVkZXMoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICAgICAgICBwb3NpdGlvbiA9IGlubGluZVxuICAgICAgICAgICAgPyBhd2FpdCBnZXRJbmxpbmVCdXR0b25Qb3NpdGlvbihhcHAsIGlkKVxuICAgICAgICAgICAgOiBnZXRCdXR0b25Qb3NpdGlvbihjb250ZW50LCBhcmdzKTtcbiAgICAgICAgICB0ZXh0KGFwcCwgYXJncywgcG9zaXRpb24pO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgcmVtb3ZpbmcgdGhlIGJ1dHRvblxuICAgICAgaWYgKGFyZ3MucmVtb3ZlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChmaWxlKTtcbiAgICAgICAgICBwb3NpdGlvbiA9IGlubGluZVxuICAgICAgICAgICAgPyBhd2FpdCBnZXRJbmxpbmVCdXR0b25Qb3NpdGlvbihhcHAsIGlkKVxuICAgICAgICAgICAgOiBnZXRCdXR0b25Qb3NpdGlvbihjb250ZW50LCBhcmdzKTtcbiAgICAgICAgICByZW1vdmUoYXBwLCBhcmdzLCBwb3NpdGlvbik7XG4gICAgICAgIH0sIDc1KTtcbiAgICAgIH1cbiAgICAgIGlmIChhcmdzLnJlcGxhY2UpIHtcbiAgICAgICAgcmVwbGFjZShhcHAsIGFyZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGVtcGxhdGVyID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgcG9zaXRpb246IFBvc2l0aW9uXG4pOiBQcm9taXNlPEFyZ3VtZW50cz4gPT4ge1xuICBhcHAuY29tbWFuZHMuZXhlY3V0ZUNvbW1hbmRCeUlkKFwiZWRpdG9yOnNhdmUtZmlsZVwiKTtcbiAgY29uc3QgYWN0aXZlVmlldyA9IGFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICBpZiAoYWN0aXZlVmlldykge1xuICAgIGNvbnN0IGZpbGUgPSBhY3RpdmVWaWV3LmZpbGU7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5jYWNoZWRSZWFkKGZpbGUpO1xuICAgIGFwcC5jb21tYW5kcy5leGVjdXRlQ29tbWFuZEJ5SWQoXG4gICAgICBcInRlbXBsYXRlci1vYnNpZGlhbjpyZXBsYWNlLWluLWZpbGUtdGVtcGxhdGVyXCJcbiAgICApO1xuICAgIGNvbnN0IHsgYXJncyB9ID0gYXdhaXQgZ2V0TmV3QXJncyhhcHAsIHBvc2l0aW9uKTtcbiAgICBjb25zdCBjYWNoZWREYXRhOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGNhY2hlQ2hhbmdlID0gYXBwLnZhdWx0Lm9uKFwibW9kaWZ5XCIsIChmaWxlKSA9PiB7XG4gICAgICBjYWNoZWREYXRhLnB1c2goZmlsZS51bnNhZmVDYWNoZWREYXRhKTtcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGNvbnRlbnRcbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5zcGxpY2UocG9zaXRpb24ubGluZVN0YXJ0LCBwb3NpdGlvbi5saW5lRW5kIC0gcG9zaXRpb24ubGluZVN0YXJ0ICsgMilcbiAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgICBsZXQgZmluYWxDb250ZW50O1xuICAgICAgaWYgKGNhY2hlZERhdGFbMF0pIHtcbiAgICAgICAgY29uc3QgY2FjaGVkQ29udGVudCA9IGNhY2hlZERhdGFbY2FjaGVkRGF0YS5sZW5ndGggLSAxXS5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgbGV0IGFkZE9uZSA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwicHJlcGVuZFwiKSkge1xuICAgICAgICAgIGFkZE9uZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoYXJncy50eXBlLmluY2x1ZGVzKFwibGluZVwiKSkge1xuICAgICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSBhcmdzLnR5cGUubWF0Y2goLyhcXGQrKS9nKTtcbiAgICAgICAgICBpZiAobGluZU51bWJlclswXSkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHBhcnNlSW50KGxpbmVOdW1iZXJbMF0pIC0gMTtcbiAgICAgICAgICAgIGlmIChsaW5lIDwgcG9zaXRpb24ubGluZVN0YXJ0ICYmICFhcmdzLnJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgYWRkT25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZE9uZSkge1xuICAgICAgICAgIGNhY2hlZENvbnRlbnQuc3BsaWNlKFxuICAgICAgICAgICAgcG9zaXRpb24ubGluZVN0YXJ0ICsgMSxcbiAgICAgICAgICAgIHBvc2l0aW9uLmxpbmVFbmQgLSBwb3NpdGlvbi5saW5lU3RhcnQgKyAyLFxuICAgICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgKTtcbiAgICAgICAgfSAgZWxzZSB7XG4gICAgICAgICAgY2FjaGVkQ29udGVudC5zcGxpY2UoXG4gICAgICAgICAgICBwb3NpdGlvbi5saW5lU3RhcnQsXG4gICAgICAgICAgICBwb3NpdGlvbi5saW5lRW5kIC0gcG9zaXRpb24ubGluZVN0YXJ0ICsgMixcbiAgICAgICAgICAgIGJ1dHRvblxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxDb250ZW50ID0gY2FjaGVkQ29udGVudC5qb2luKFwiXFxuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluYWxDb250ZW50ID0gY29udGVudDtcbiAgICAgIH1cbiAgICAgIGF3YWl0IGFwcC52YXVsdC5tb2RpZnkoZmlsZSwgZmluYWxDb250ZW50KTtcbiAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLm9mZnJlZihjYWNoZUNoYW5nZSk7XG4gICAgfSwgMjAwKTtcbiAgICByZXR1cm4gYXJncztcbiAgfVxufTtcbiIsImltcG9ydCB7IEFwcCwgTm90aWNlLCBNYXJrZG93blZpZXd9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZSxcbiAgcmVtb3ZlLFxuICByZXBsYWNlLFxuICB0ZW1wbGF0ZSxcbiAgbGluayxcbiAgY29tbWFuZCxcbiAgc3dhcCxcbiAgdGVtcGxhdGVyLFxuICB0ZXh0LFxufSBmcm9tIFwiLi9idXR0b25UeXBlc1wiO1xuaW1wb3J0IHsgZ2V0QnV0dG9uUG9zaXRpb24sIGdldElubGluZUJ1dHRvblBvc2l0aW9uIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnV0dG9uIHtcbiAgYXBwPzogQXBwO1xuICBlbD86IEhUTUxFbGVtZW50O1xuICBhcmdzPzogQXJndW1lbnRzO1xuICBpbmxpbmU/OiBib29sZWFuO1xuICBpZD86IHN0cmluZztcbiAgY2xpY2tPdmVycmlkZT86IHtcbiAgICBwYXJhbXM6IGFueVtdO1xuICAgIGNsaWNrOiAoLi4ucGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUJ1dHRvbiA9ICh7XG4gIGFwcCxcbiAgZWwsXG4gIGFyZ3MsXG4gIGlubGluZSxcbiAgaWQsXG4gIGNsaWNrT3ZlcnJpZGUsXG59OiBCdXR0b24pOiBIVE1MRWxlbWVudCA9PiB7XG4gIC8vY3JlYXRlIHRoZSBidXR0b24gZWxlbWVudFxuICBjb25zdCBidXR0b24gPSBlbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgY2xzOiBhcmdzLmNsYXNzXG4gICAgICA/IGAke2FyZ3MuY2xhc3N9ICR7YXJncy5jb2xvcn1gXG4gICAgICA6IGBidXR0b24tZGVmYXVsdCAke2FyZ3MuY29sb3IgPyBhcmdzLmNvbG9yIDogXCJcIn1gLFxuICB9KTtcbiAgYnV0dG9uLmlubmVySFRNTCA9IGFyZ3MubmFtZVxuICBhcmdzLmlkID8gYnV0dG9uLnNldEF0dHJpYnV0ZShcImlkXCIsIGFyZ3MuaWQpIDogXCJcIjtcbiAgYnV0dG9uLm9uKFwiY2xpY2tcIiwgXCJidXR0b25cIiwgKCkgPT4ge1xuICAgIGNsaWNrT3ZlcnJpZGVcbiAgICAgID8gY2xpY2tPdmVycmlkZS5jbGljayguLi5jbGlja092ZXJyaWRlLnBhcmFtcylcbiAgICAgIDogY2xpY2tIYW5kbGVyKGFwcCwgYXJncywgaW5saW5lLCBpZCk7XG4gIH0pO1xuICByZXR1cm4gYnV0dG9uO1xufTtcblxuY29uc3QgY2xpY2tIYW5kbGVyID0gYXN5bmMgKFxuICBhcHA6IEFwcCxcbiAgYXJnczogQXJndW1lbnRzLFxuICBpbmxpbmU6IGJvb2xlYW4sXG4gIGlkOiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBhY3RpdmVWaWV3ID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGxldCBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoYWN0aXZlVmlldy5maWxlKTtcbiAgbGV0IHBvc2l0aW9uID0gaW5saW5lXG4gICAgPyBhd2FpdCBnZXRJbmxpbmVCdXR0b25Qb3NpdGlvbihhcHAsIGlkKVxuICAgIDogZ2V0QnV0dG9uUG9zaXRpb24oY29udGVudCwgYXJncyk7XG4gIC8vIGhhbmRsZSBjb21tYW5kIGJ1dHRvbnNcbiAgaWYgKGFyZ3MudGVtcGxhdGVyKSB7XG4gICAgYXJncyA9IGF3YWl0IHRlbXBsYXRlcihhcHAsIHBvc2l0aW9uKTtcbiAgICBpZiAoaW5saW5lKSB7XG4gICAgICBuZXcgTm90aWNlKFwidGVtcGxhdGVyIGFyZ3MgZG9uJ3Qgd29yayB3aXRoIGlubGluZSBidXR0b25zIHlldFwiLCAyMDAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFyZ3MucmVwbGFjZSkge1xuICAgIHJlcGxhY2UoYXBwLCBhcmdzKTtcbiAgfVxuICBpZiAoYXJncy50eXBlID09PSBcImNvbW1hbmRcIikge1xuICAgIGNvbW1hbmQoYXBwLCBhcmdzKTtcbiAgfVxuICAvLyBoYW5kbGUgbGluayBidXR0b25zXG4gIGlmIChhcmdzLnR5cGUgPT09IFwibGlua1wiKSB7XG4gICAgbGluayhhcmdzKTtcbiAgfVxuICAvLyBoYW5kbGUgdGVtcGxhdGUgYnV0dG9uc1xuICBpZiAoYXJncy50eXBlICYmIGFyZ3MudHlwZS5pbmNsdWRlcyhcInRlbXBsYXRlXCIpKSB7XG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LnJlYWQoYWN0aXZlVmlldy5maWxlKTtcbiAgICAgIHBvc2l0aW9uID0gaW5saW5lXG4gICAgICAgID8gYXdhaXQgZ2V0SW5saW5lQnV0dG9uUG9zaXRpb24oYXBwLCBpZClcbiAgICAgICAgOiBnZXRCdXR0b25Qb3NpdGlvbihjb250ZW50LCBhcmdzKTtcbiAgICAgIHRlbXBsYXRlKGFwcCwgYXJncywgcG9zaXRpb24pO1xuICAgIH0sIDUwKTtcbiAgfVxuICBpZiAoYXJncy50eXBlID09PSBcImNhbGN1bGF0ZVwiKSB7XG4gICAgY2FsY3VsYXRlKGFwcCwgYXJncywgcG9zaXRpb24pO1xuICB9XG4gIGlmIChhcmdzLnR5cGUgJiYgYXJncy50eXBlLmluY2x1ZGVzKFwidGV4dFwiKSkge1xuICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29udGVudCA9IGF3YWl0IGFwcC52YXVsdC5yZWFkKGFjdGl2ZVZpZXcuZmlsZSk7XG4gICAgICBwb3NpdGlvbiA9IGlubGluZVxuICAgICAgICA/IGF3YWl0IGdldElubGluZUJ1dHRvblBvc2l0aW9uKGFwcCwgaWQpXG4gICAgICAgIDogZ2V0QnV0dG9uUG9zaXRpb24oY29udGVudCwgYXJncyk7XG4gICAgICB0ZXh0KGFwcCwgYXJncywgcG9zaXRpb24pO1xuICAgIH0sIDUwKTtcbiAgfVxuICAvLyBoYW5kbGUgcmVtb3ZpbmcgdGhlIGJ1dHRvblxuICBpZiAoYXJncy5yZW1vdmUpIHtcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnRlbnQgPSBhd2FpdCBhcHAudmF1bHQucmVhZChhY3RpdmVWaWV3LmZpbGUpO1xuICAgICAgcG9zaXRpb24gPSBpbmxpbmVcbiAgICAgICAgPyBhd2FpdCBnZXRJbmxpbmVCdXR0b25Qb3NpdGlvbihhcHAsIGlkKVxuICAgICAgICA6IGdldEJ1dHRvblBvc2l0aW9uKGNvbnRlbnQsIGFyZ3MpO1xuICAgICAgcmVtb3ZlKGFwcCwgYXJncywgcG9zaXRpb24pO1xuICAgIH0sIDEwMDApO1xuICB9XG4gIGlmIChhcmdzLnN3YXApIHtcbiAgICBpZiAoIWlubGluZSkge1xuICAgICAgbmV3IE5vdGljZShcInN3YXAgYXJncyBvbmx5IHdvcmsgaW4gaW5saW5lIGJ1dHRvbnMgZm9yIG5vd1wiLCAyMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dhcChhcHAsIGFyZ3Muc3dhcCwgaWQsIGlubGluZSwgYWN0aXZlVmlldy5maWxlKTtcbiAgICB9XG4gIH1cbn07XG4iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIHRvcDogcmVjdC50b3AsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgeDogcmVjdC5sZWZ0LFxuICAgIHk6IHJlY3QudG9wXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgIT09IC0xO1xuICB2YXIgaXNJRSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpICE9PSAtMTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHdpdGhpbiBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICghaXNIVE1MRWxlbWVudChhcnJvd0VsZW1lbnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImFycm93XCIgZWxlbWVudCBtdXN0IGJlIGFuIEhUTUxFbGVtZW50IChub3QgYW4gU1ZHRWxlbWVudCkuJywgJ1RvIHVzZSBhbiBTVkcgYXJyb3csIHdyYXAgaXQgaW4gYW4gSFRNTEVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMnLCAndGhlIGFycm93LiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImFycm93XCIgbW9kaWZpZXJcXCdzIGBlbGVtZW50YCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIHBvcHBlcicsICdlbGVtZW50LiddLmpvaW4oJyAnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYpIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgd2luID0gd2luZG93O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZChyb3VuZCh4ICogZHByKSAvIGRwcikgfHwgMCxcbiAgICB5OiByb3VuZChyb3VuZCh5ICogZHByKSAvIGRwcikgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzO1xuXG4gIHZhciBfcmVmMyA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKG9mZnNldHMpIDogdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyhvZmZzZXRzKSA6IG9mZnNldHMsXG4gICAgICBfcmVmMyR4ID0gX3JlZjMueCxcbiAgICAgIHggPSBfcmVmMyR4ID09PSB2b2lkIDAgPyAwIDogX3JlZjMkeCxcbiAgICAgIF9yZWYzJHkgPSBfcmVmMy55LFxuICAgICAgeSA9IF9yZWYzJHkgPT09IHZvaWQgMCA/IDAgOiBfcmVmMyR5O1xuXG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgICAgIHkgLT0gb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0KSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0OyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICAgICAgeCAtPSBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXSAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8IDIgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjQpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjQuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjQub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhciB0cmFuc2l0aW9uUHJvcGVydHkgPSBnZXRDb21wdXRlZFN0eWxlKHN0YXRlLmVsZW1lbnRzLnBvcHBlcikudHJhbnNpdGlvblByb3BlcnR5IHx8ICcnO1xuXG4gICAgaWYgKGFkYXB0aXZlICYmIFsndHJhbnNmb3JtJywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLnNvbWUoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdHJhbnNpdGlvblByb3BlcnR5LmluZGV4T2YocHJvcGVydHkpID49IDA7XG4gICAgfSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihbJ1BvcHBlcjogRGV0ZWN0ZWQgQ1NTIHRyYW5zaXRpb25zIG9uIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nJywgJ0NTUyBwcm9wZXJ0aWVzOiBcInRyYW5zZm9ybVwiLCBcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLicsICdcXG5cXG4nLCAnRGlzYWJsZSB0aGUgXCJjb21wdXRlU3R5bGVzXCIgbW9kaWZpZXJcXCdzIGBhZGFwdGl2ZWAgb3B0aW9uIHRvIGFsbG93JywgJ2ZvciBzbW9vdGggdHJhbnNpdGlvbnMsIG9yIHJlbW92ZSB0aGVzZSBwcm9wZXJ0aWVzIGZyb20gdGhlIENTUycsICd0cmFuc2l0aW9uIGRlY2xhcmF0aW9uIG9uIHRoZSBwb3BwZXIgZWxlbWVudCBpZiBvbmx5IHRyYW5zaXRpb25pbmcnLCAnb3BhY2l0eSBvciBiYWNrZ3JvdW5kLWNvbG9yIGZvciBleGFtcGxlLicsICdcXG5cXG4nLCAnV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBwb3BwZXIgZWxlbWVudCBhcyBhIHdyYXBwZXIgYXJvdW5kIGFuIGlubmVyJywgJ2VsZW1lbnQgdGhhdCBjYW4gaGF2ZSBhbnkgQ1NTIHByb3BlcnR5IHRyYW5zaXRpb25lZCBmb3IgYW5pbWF0aW9ucy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDsgLy8gTkI6IFRoaXMgaXNuJ3Qgc3VwcG9ydGVkIG9uIGlPUyA8PSAxMi4gSWYgdGhlIGtleWJvYXJkIGlzIG9wZW4sIHRoZSBwb3BwZXJcbiAgLy8gY2FuIGJlIG9ic2N1cmVkIHVuZGVybmVhdGggaXQuXG4gIC8vIEFsc28sIGBodG1sLmNsaWVudEhlaWdodGAgYWRkcyB0aGUgYm90dG9tIGJhciBoZWlnaHQgaW4gU2FmYXJpIGlPUywgZXZlblxuICAvLyBpZiBpdCBpc24ndCBvcGVuLCBzbyBpZiB0aGlzIGlzbid0IGF2YWlsYWJsZSwgdGhlIHBvcHBlciB3aWxsIGJlIGRldGVjdGVkXG4gIC8vIHRvIG92ZXJmbG93IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiB0b28gZWFybHkuXG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7IC8vIFVzZXMgTGF5b3V0IFZpZXdwb3J0IChsaWtlIENocm9tZTsgU2FmYXJpIGRvZXMgbm90IGN1cnJlbnRseSlcbiAgICAvLyBJbiBDaHJvbWUsIGl0IHJldHVybnMgYSB2YWx1ZSB2ZXJ5IGNsb3NlIHRvIDAgKCsvLSkgYnV0IGNvbnRhaW5zIHJvdW5kaW5nXG4gICAgLy8gZXJyb3JzIGR1ZSB0byBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBzbyB3ZSBuZWVkIHRvIGNoZWNrIHByZWNpc2lvbi5cbiAgICAvLyBTYWZhcmkgcmV0dXJucyBhIG51bWJlciA8PSAwLCB1c3VhbGx5IDwgLTEgd2hlbiBwaW5jaC16b29tZWRcbiAgICAvLyBGZWF0dXJlIGRldGVjdGlvbiBmYWlscyBpbiBtb2JpbGUgZW11bGF0aW9uIG1vZGUgaW4gQ2hyb21lLlxuICAgIC8vIE1hdGguYWJzKHdpbi5pbm5lcldpZHRoIC8gdmlzdWFsVmlld3BvcnQuc2NhbGUgLSB2aXN1YWxWaWV3cG9ydC53aWR0aCkgPFxuICAgIC8vIDAuMDAxXG4gICAgLy8gRmFsbGJhY2sgaGVyZTogXCJOb3QgU2FmYXJpXCIgdXNlckFnZW50XG5cbiAgICBpZiAoIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQpKSA6IGlzSFRNTEVsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciByZWZlcmVuY2VFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnkpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2VFbGVtZW50KTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogVGhlIGBhbGxvd2VkQXV0b1BsYWNlbWVudHNgIG9wdGlvbiBkaWQgbm90IGFsbG93IGFueScsICdwbGFjZW1lbnRzLiBFbnN1cmUgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbiBtYXRjaGVzIHRoZSB2YXJpYXRpb24nLCAnb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cy4nLCAnRm9yIGV4YW1wbGUsIFwiYXV0b1wiIGNhbm5vdCBiZSB1c2VkIHRvIGFsbG93IFwiYm90dG9tLXN0YXJ0XCIuJywgJ1VzZSBcImF1dG8tc3RhcnRcIiBpbnN0ZWFkLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB3aXRoaW4gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzIHx8IGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdIC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSB0ZXRoZXJPZmZzZXRWYWx1ZSA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gdGV0aGVyT2Zmc2V0VmFsdWU7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIHRldGhlck9mZnNldFZhbHVlIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyB0ZXRoZXJPZmZzZXRWYWx1ZTtcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF1bbWFpbkF4aXNdIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihfbWluLCB0ZXRoZXJNaW4pIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gbWF0aE1heChfbWF4LCB0ZXRoZXJNYXgpIDogX21heCk7XG5cbiAgICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBjb21wb3NpdGUgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuXG4vLyBDb21wb3NpdGUgbWVhbnMgaXQgdGFrZXMgaW50byBhY2NvdW50IHRyYW5zZm9ybXMgYXMgd2VsbCBhcyBsYXlvdXQuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCk7XG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXQoc3RyKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBbXS5jb25jYXQoYXJncykucmVkdWNlKGZ1bmN0aW9uIChwLCBjKSB7XG4gICAgcmV0dXJuIHAucmVwbGFjZSgvJXMvLCBjKTtcbiAgfSwgc3RyKTtcbn0iLCJpbXBvcnQgZm9ybWF0IGZyb20gXCIuL2Zvcm1hdC5qc1wiO1xuaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbnZhciBJTlZBTElEX01PRElGSUVSX0VSUk9SID0gJ1BvcHBlcjogbW9kaWZpZXIgXCIlc1wiIHByb3ZpZGVkIGFuIGludmFsaWQgJXMgcHJvcGVydHksIGV4cGVjdGVkICVzIGJ1dCBnb3QgJXMnO1xudmFyIE1JU1NJTkdfREVQRU5ERU5DWV9FUlJPUiA9ICdQb3BwZXI6IG1vZGlmaWVyIFwiJXNcIiByZXF1aXJlcyBcIiVzXCIsIGJ1dCBcIiVzXCIgbW9kaWZpZXIgaXMgbm90IGF2YWlsYWJsZSc7XG52YXIgVkFMSURfUFJPUEVSVElFUyA9IFsnbmFtZScsICdlbmFibGVkJywgJ3BoYXNlJywgJ2ZuJywgJ2VmZmVjdCcsICdyZXF1aXJlcycsICdvcHRpb25zJ107XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgT2JqZWN0LmtleXMobW9kaWZpZXIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5uYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgU3RyaW5nKG1vZGlmaWVyLm5hbWUpLCAnXCJuYW1lXCInLCAnXCJzdHJpbmdcIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLm5hbWUpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlbmFibGVkJzpcbiAgICAgICAgICBpZiAodHlwZW9mIG1vZGlmaWVyLmVuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wiZW5hYmxlZFwiJywgJ1wiYm9vbGVhblwiJywgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIuZW5hYmxlZCkgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdwaGFzZSc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyUGhhc2VzLmluZGV4T2YobW9kaWZpZXIucGhhc2UpIDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicGhhc2VcIicsIFwiZWl0aGVyIFwiICsgbW9kaWZpZXJQaGFzZXMuam9pbignLCAnKSwgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucGhhc2UpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdmbic6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5mbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wiZm5cIicsICdcImZ1bmN0aW9uXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5mbikgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VmZmVjdCc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lZmZlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVmZmVjdFwiJywgJ1wiZnVuY3Rpb25cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmZuKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVxdWlyZXMnOlxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtb2RpZmllci5yZXF1aXJlcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcInJlcXVpcmVzXCInLCAnXCJhcnJheVwiJywgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucmVxdWlyZXMpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdyZXF1aXJlc0lmRXhpc3RzJzpcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcInJlcXVpcmVzSWZFeGlzdHNcIicsICdcImFycmF5XCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnb3B0aW9ucyc6XG4gICAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlBvcHBlckpTOiBhbiBpbnZhbGlkIHByb3BlcnR5IGhhcyBiZWVuIHByb3ZpZGVkIHRvIHRoZSBcXFwiXCIgKyBtb2RpZmllci5uYW1lICsgXCJcXFwiIG1vZGlmaWVyLCB2YWxpZCBwcm9wZXJ0aWVzIGFyZSBcIiArIFZBTElEX1BST1BFUlRJRVMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBzICsgXCJcXFwiXCI7XG4gICAgICAgICAgfSkuam9pbignLCAnKSArIFwiOyBidXQgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBwcm92aWRlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIG1vZGlmaWVyLnJlcXVpcmVzICYmIG1vZGlmaWVyLnJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVpcmVtZW50KSB7XG4gICAgICAgIGlmIChtb2RpZmllcnMuZmluZChmdW5jdGlvbiAobW9kKSB7XG4gICAgICAgICAgcmV0dXJuIG1vZC5uYW1lID09PSByZXF1aXJlbWVudDtcbiAgICAgICAgfSkgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KE1JU1NJTkdfREVQRU5ERU5DWV9FUlJPUiwgU3RyaW5nKG1vZGlmaWVyLm5hbWUpLCByZXF1aXJlbWVudCwgcmVxdWlyZW1lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXF1ZUJ5KGFyciwgZm4pIHtcbiAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICByZXR1cm4gYXJyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBpZGVudGlmaWVyID0gZm4oaXRlbSk7XG5cbiAgICBpZiAoIWlkZW50aWZpZXJzLmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgaWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgdmFsaWRhdGVNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvdmFsaWRhdGVNb2RpZmllcnMuanNcIjtcbmltcG9ydCB1bmlxdWVCeSBmcm9tIFwiLi91dGlscy91bmlxdWVCeS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbnZhciBJTlZBTElEX0VMRU1FTlRfRVJST1IgPSAnUG9wcGVyOiBJbnZhbGlkIHJlZmVyZW5jZSBvciBwb3BwZXIgYXJndW1lbnQgcHJvdmlkZWQuIFRoZXkgbXVzdCBiZSBlaXRoZXIgYSBET00gZWxlbWVudCBvciB2aXJ0dWFsIGVsZW1lbnQuJztcbnZhciBJTkZJTklURV9MT09QX0VSUk9SID0gJ1BvcHBlcjogQW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgbW9kaWZpZXJzIGN5Y2xlIGhhcyBiZWVuIGRldGVjdGVkISBUaGUgY3ljbGUgaGFzIGJlZW4gaW50ZXJydXB0ZWQgdG8gcHJldmVudCBhIGJyb3dzZXIgY3Jhc2guJztcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7IC8vIFZhbGlkYXRlIHRoZSBwcm92aWRlZCBtb2RpZmllcnMgc28gdGhhdCB0aGUgY29uc3VtZXIgd2lsbCBnZXQgd2FybmVkXG4gICAgICAgIC8vIGlmIG9uZSBvZiB0aGUgbW9kaWZpZXJzIGlzIGludmFsaWQgZm9yIGFueSByZWFzb25cblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgdmFyIG1vZGlmaWVycyA9IHVuaXF1ZUJ5KFtdLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycyksIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYubmFtZTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVycyk7XG5cbiAgICAgICAgICBpZiAoZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5vcHRpb25zLnBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICAgICAgICAgIHZhciBmbGlwTW9kaWZpZXIgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZpbmQoZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZjIubmFtZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgPT09ICdmbGlwJztcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWZsaXBNb2RpZmllcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImF1dG9cIiBwbGFjZW1lbnRzIHJlcXVpcmUgdGhlIFwiZmxpcFwiIG1vZGlmaWVyIGJlJywgJ3ByZXNlbnQgYW5kIGVuYWJsZWQgdG8gd29yay4nXS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUocG9wcGVyKSxcbiAgICAgICAgICAgICAgbWFyZ2luVG9wID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luVG9wLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblJpZ2h0LFxuICAgICAgICAgICAgICBtYXJnaW5Cb3R0b20gPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5Cb3R0b20sXG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5MZWZ0OyAvLyBXZSBubyBsb25nZXIgdGFrZSBpbnRvIGFjY291bnQgYG1hcmdpbnNgIG9uIHRoZSBwb3BwZXIsIGFuZCBpdCBjYW5cbiAgICAgICAgICAvLyBjYXVzZSBidWdzIHdpdGggcG9zaXRpb25pbmcsIHNvIHdlJ2xsIHdhcm4gdGhlIGNvbnN1bWVyXG5cblxuICAgICAgICAgIGlmIChbbWFyZ2luVG9wLCBtYXJnaW5SaWdodCwgbWFyZ2luQm90dG9tLCBtYXJnaW5MZWZ0XS5zb21lKGZ1bmN0aW9uIChtYXJnaW4pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG1hcmdpbik7XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihbJ1BvcHBlcjogQ1NTIFwibWFyZ2luXCIgc3R5bGVzIGNhbm5vdCBiZSB1c2VkIHRvIGFwcGx5IHBhZGRpbmcnLCAnYmV0d2VlbiB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgb3IgYm91bmRhcnkuJywgJ1RvIHJlcGxpY2F0ZSBtYXJnaW4sIHVzZSB0aGUgYG9mZnNldGAgbW9kaWZpZXIsIGFzIHdlbGwgYXMnLCAndGhlIGBwYWRkaW5nYCBvcHRpb24gaW4gdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIGFuZCBgZmxpcGAnLCAnbW9kaWZpZXJzLiddLmpvaW4oJyAnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKElOVkFMSURfRUxFTUVOVF9FUlJPUik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgX19kZWJ1Z19sb29wc19fID0gMDtcblxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBfX2RlYnVnX2xvb3BzX18gKz0gMTtcblxuICAgICAgICAgICAgaWYgKF9fZGVidWdfbG9vcHNfXyA+IDEwMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKElORklOSVRFX0xPT1BfRVJST1IpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3RhdGUucmVzZXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBpbmRleCA9IC0xO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZSA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnNbaW5kZXhdLFxuICAgICAgICAgICAgICBmbiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5mbixcbiAgICAgICAgICAgICAgX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5vcHRpb25zLFxuICAgICAgICAgICAgICBfb3B0aW9ucyA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPT09IHZvaWQgMCA/IHt9IDogX3N0YXRlJG9yZGVyZWRNb2RpZmllMixcbiAgICAgICAgICAgICAgbmFtZSA9IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZS5uYW1lO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgc3RhdGUgPSBmbih7XG4gICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgICAgb3B0aW9uczogX29wdGlvbnMsXG4gICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZVxuICAgICAgICAgICAgfSkgfHwgc3RhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gQXN5bmMgYW5kIG9wdGltaXN0aWNhbGx5IG9wdGltaXplZCB1cGRhdGUg4oCTIGl0IHdpbGwgbm90IGJlIGV4ZWN1dGVkIGlmXG4gICAgICAvLyBub3QgbmVjZXNzYXJ5IChkZWJvdW5jZWQgdG8gcnVuIGF0IG1vc3Qgb25jZS1wZXItdGljaylcbiAgICAgIHVwZGF0ZTogZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgIHJlc29sdmUoc3RhdGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBpc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZjMubmFtZSxcbiAgICAgICAgICAgIF9yZWYzJG9wdGlvbnMgPSBfcmVmMy5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYzJG9wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX3JlZjMkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYzLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiLy8gU3RvbGUgQWxsIHRoaXMgZnJvbSBMaWFtJ3MgUGVyaW9kaWMgTm90ZXMgUGx1Z2luOiBodHRwczovL2dpdGh1Yi5jb20vbGlhbWNhaW4vb2JzaWRpYW4tcGVyaW9kaWMtbm90ZXNcblxuaW1wb3J0IHsgQXBwLCBJU3VnZ2VzdE93bmVyLCBTY29wZSwgVEZpbGUsIFRBYnN0cmFjdEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGNyZWF0ZVBvcHBlciwgSW5zdGFuY2UgYXMgUG9wcGVySW5zdGFuY2UgfSBmcm9tIFwiQHBvcHBlcmpzL2NvcmVcIjtcbmltcG9ydCB7IEV4dGVuZGVkQmxvY2tDYWNoZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRTdG9yZSB9IGZyb20gXCIuL2J1dHRvblN0b3JlXCI7XG5cbmltcG9ydCB7IHdyYXBBcm91bmQgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jbGFzcyBTdWdnZXN0PFQ+IHtcbiAgcHJpdmF0ZSBvd25lcjogSVN1Z2dlc3RPd25lcjxUPjtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFRbXTtcbiAgcHJpdmF0ZSBzdWdnZXN0aW9uczogSFRNTERpdkVsZW1lbnRbXTtcbiAgcHJpdmF0ZSBzZWxlY3RlZEl0ZW06IG51bWJlcjtcbiAgcHJpdmF0ZSBjb250YWluZXJFbDogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3Iob3duZXI6IElTdWdnZXN0T3duZXI8VD4sIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2NvcGU6IFNjb3BlKSB7XG4gICAgdGhpcy5vd25lciA9IG93bmVyO1xuICAgIHRoaXMuY29udGFpbmVyRWwgPSBjb250YWluZXJFbDtcblxuICAgIGNvbnRhaW5lckVsLm9uKFxuICAgICAgXCJjbGlja1wiLFxuICAgICAgXCIuc3VnZ2VzdGlvbi1pdGVtXCIsXG4gICAgICB0aGlzLm9uU3VnZ2VzdGlvbkNsaWNrLmJpbmQodGhpcylcbiAgICApO1xuICAgIGNvbnRhaW5lckVsLm9uKFxuICAgICAgXCJtb3VzZW1vdmVcIixcbiAgICAgIFwiLnN1Z2dlc3Rpb24taXRlbVwiLFxuICAgICAgdGhpcy5vblN1Z2dlc3Rpb25Nb3VzZW92ZXIuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICBzY29wZS5yZWdpc3RlcihbXSwgXCJBcnJvd1VwXCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbSh0aGlzLnNlbGVjdGVkSXRlbSAtIDEsIHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzY29wZS5yZWdpc3RlcihbXSwgXCJBcnJvd0Rvd25cIiwgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LmlzQ29tcG9zaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtICsgMSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHNjb3BlLnJlZ2lzdGVyKFtdLCBcIkVudGVyXCIsIChldmVudCkgPT4ge1xuICAgICAgaWYgKCFldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICB0aGlzLnVzZVNlbGVjdGVkSXRlbShldmVudCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU3VnZ2VzdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBlbDogSFRNTERpdkVsZW1lbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuc3VnZ2VzdGlvbnMuaW5kZXhPZihlbCk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW0oaXRlbSwgZmFsc2UpO1xuICAgIHRoaXMudXNlU2VsZWN0ZWRJdGVtKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3VnZ2VzdGlvbk1vdXNlb3ZlcihfZXZlbnQ6IE1vdXNlRXZlbnQsIGVsOiBIVE1MRGl2RWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnN1Z2dlc3Rpb25zLmluZGV4T2YoZWwpO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtKGl0ZW0sIGZhbHNlKTtcbiAgfVxuXG4gIHNldFN1Z2dlc3Rpb25zKHZhbHVlczogVFtdKSB7XG4gICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25FbHM6IEhUTUxEaXZFbGVtZW50W10gPSBbXTtcblxuICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbkVsID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVEaXYoXCJzdWdnZXN0aW9uLWl0ZW1cIik7XG4gICAgICB0aGlzLm93bmVyLnJlbmRlclN1Z2dlc3Rpb24odmFsdWUsIHN1Z2dlc3Rpb25FbCk7XG4gICAgICBzdWdnZXN0aW9uRWxzLnB1c2goc3VnZ2VzdGlvbkVsKTtcbiAgICB9KTtcblxuICAgIHRoaXMudmFsdWVzID0gdmFsdWVzO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uRWxzO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtKDAsIGZhbHNlKTtcbiAgfVxuXG4gIHVzZVNlbGVjdGVkSXRlbShldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlc1t0aGlzLnNlbGVjdGVkSXRlbV07XG4gICAgaWYgKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5vd25lci5zZWxlY3RTdWdnZXN0aW9uKGN1cnJlbnRWYWx1ZSwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkSXRlbShzZWxlY3RlZEluZGV4OiBudW1iZXIsIHNjcm9sbEludG9WaWV3OiBib29sZWFuKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEluZGV4ID0gd3JhcEFyb3VuZChzZWxlY3RlZEluZGV4LCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCk7XG4gICAgY29uc3QgcHJldlNlbGVjdGVkU3VnZ2VzdGlvbiA9IHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEl0ZW1dO1xuICAgIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbiA9IHRoaXMuc3VnZ2VzdGlvbnNbbm9ybWFsaXplZEluZGV4XTtcblxuICAgIHByZXZTZWxlY3RlZFN1Z2dlc3Rpb24/LnJlbW92ZUNsYXNzKFwiaXMtc2VsZWN0ZWRcIik7XG4gICAgc2VsZWN0ZWRTdWdnZXN0aW9uPy5hZGRDbGFzcyhcImlzLXNlbGVjdGVkXCIpO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBub3JtYWxpemVkSW5kZXg7XG5cbiAgICBpZiAoc2Nyb2xsSW50b1ZpZXcpIHtcbiAgICAgIHNlbGVjdGVkU3VnZ2VzdGlvbi5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUZXh0SW5wdXRTdWdnZXN0PFQ+IGltcGxlbWVudHMgSVN1Z2dlc3RPd25lcjxUPiB7XG4gIHByb3RlY3RlZCBhcHA6IEFwcDtcbiAgcHJvdGVjdGVkIGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgcHJpdmF0ZSBwb3BwZXI6IFBvcHBlckluc3RhbmNlO1xuICBwcml2YXRlIHNjb3BlOiBTY29wZTtcbiAgcHJpdmF0ZSBzdWdnZXN0RWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHN1Z2dlc3Q6IFN1Z2dlc3Q8VD47XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICB0aGlzLmlucHV0RWwgPSBpbnB1dEVsO1xuICAgIHRoaXMuc2NvcGUgPSBuZXcgU2NvcGUoKTtcblxuICAgIHRoaXMuc3VnZ2VzdEVsID0gY3JlYXRlRGl2KFwic3VnZ2VzdGlvbi1jb250YWluZXJcIik7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbiA9IHRoaXMuc3VnZ2VzdEVsLmNyZWF0ZURpdihcInN1Z2dlc3Rpb25cIik7XG4gICAgdGhpcy5zdWdnZXN0ID0gbmV3IFN1Z2dlc3QodGhpcywgc3VnZ2VzdGlvbiwgdGhpcy5zY29wZSk7XG5cbiAgICB0aGlzLnNjb3BlLnJlZ2lzdGVyKFtdLCBcIkVzY2FwZVwiLCB0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuXG4gICAgdGhpcy5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCB0aGlzLm9uSW5wdXRDaGFuZ2VkLmJpbmQodGhpcykpO1xuICAgIHRoaXMuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgdGhpcy5vbklucHV0Q2hhbmdlZC5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgdGhpcy5jbG9zZS5iaW5kKHRoaXMpKTtcbiAgICB0aGlzLnN1Z2dlc3RFbC5vbihcbiAgICAgIFwibW91c2Vkb3duXCIsXG4gICAgICBcIi5zdWdnZXN0aW9uLWNvbnRhaW5lclwiLFxuICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIG9uSW5wdXRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0U3RyID0gdGhpcy5pbnB1dEVsLnZhbHVlO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRTdWdnZXN0aW9ucyhpbnB1dFN0cik7XG5cbiAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdWdnZXN0LnNldFN1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB0aGlzLm9wZW4oKDxhbnk+dGhpcy5hcHApLmRvbS5hcHBDb250YWluZXJFbCwgdGhpcy5pbnB1dEVsKTtcbiAgICB9XG4gIH1cblxuICBvcGVuKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGlucHV0RWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAoPGFueT50aGlzLmFwcCkua2V5bWFwLnB1c2hTY29wZSh0aGlzLnNjb3BlKTtcblxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnN1Z2dlc3RFbCk7XG4gICAgdGhpcy5wb3BwZXIgPSBjcmVhdGVQb3BwZXIoaW5wdXRFbCwgdGhpcy5zdWdnZXN0RWwsIHtcbiAgICAgIHBsYWNlbWVudDogXCJib3R0b20tc3RhcnRcIixcbiAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzYW1lV2lkdGhcIixcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGZuOiAoeyBzdGF0ZSwgaW5zdGFuY2UgfSkgPT4ge1xuICAgICAgICAgICAgLy8gTm90ZTogcG9zaXRpb25pbmcgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0d2ljZSAtXG4gICAgICAgICAgICAvLyBmaXJzdCBwYXNzIC0gcG9zaXRpb25pbmcgaXQgYWNjb3JkaW5nIHRvIHRoZSB3aWR0aCBvZiB0aGUgcG9wcGVyXG4gICAgICAgICAgICAvLyBzZWNvbmQgcGFzcyAtIHBvc2l0aW9uIGl0IHdpdGggdGhlIHdpZHRoIGJvdW5kIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBlYXJseSBleGl0IHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFdpZHRoID0gYCR7c3RhdGUucmVjdHMucmVmZXJlbmNlLndpZHRofXB4YDtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZXMucG9wcGVyLndpZHRoID09PSB0YXJnZXRXaWR0aCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5zdHlsZXMucG9wcGVyLndpZHRoID0gdGFyZ2V0V2lkdGg7XG4gICAgICAgICAgICBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBoYXNlOiBcImJlZm9yZVdyaXRlXCIsXG4gICAgICAgICAgcmVxdWlyZXM6IFtcImNvbXB1dGVTdHlsZXNcIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAoPGFueT50aGlzLmFwcCkua2V5bWFwLnBvcFNjb3BlKHRoaXMuc2NvcGUpO1xuXG4gICAgdGhpcy5zdWdnZXN0LnNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICB0aGlzLnBvcHBlciAmJiB0aGlzLnBvcHBlci5kZXN0cm95KCk7XG4gICAgdGhpcy5zdWdnZXN0RWwuZGV0YWNoKCk7XG4gIH1cblxuICBhYnN0cmFjdCBnZXRTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nKTogVFtdO1xuICBhYnN0cmFjdCByZW5kZXJTdWdnZXN0aW9uKGl0ZW06IFQsIGVsOiBIVE1MRWxlbWVudCk6IHZvaWQ7XG4gIGFic3RyYWN0IHNlbGVjdFN1Z2dlc3Rpb24oaXRlbTogVCk6IHZvaWQ7XG59XG5cbmludGVyZmFjZSBDb21tYW5kIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbWFuZFN1Z2dlc3QgZXh0ZW5kcyBUZXh0SW5wdXRTdWdnZXN0PENvbW1hbmQ+IHtcbiAgZ2V0U3VnZ2VzdGlvbnMoaW5wdXRTdHI6IHN0cmluZyk6IENvbW1hbmRbXSB7XG4gICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLmFwcC5jb21tYW5kcy5jb21tYW5kcztcbiAgICBjb25zdCBjb21tYW5kTmFtZXM6IENvbW1hbmRbXSA9IFtdO1xuICAgIGNvbnN0IGlucHV0TG93ZXJDYXNlID0gaW5wdXRTdHIudG9Mb3dlckNhc2UoKTtcblxuICAgIGZvciAoY29uc3QgY29tbWFuZCBpbiBjb21tYW5kcykge1xuICAgICAgY29uc3QgY29tbWFuZE9iaiA9IGNvbW1hbmRzW2NvbW1hbmRdO1xuICAgICAgaWYgKGNvbW1hbmRPYmoubmFtZS50b0xvd2VyQ2FzZSgpLmNvbnRhaW5zKGlucHV0TG93ZXJDYXNlKSkge1xuICAgICAgICBjb21tYW5kTmFtZXMucHVzaChjb21tYW5kT2JqKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmROYW1lcztcbiAgfVxuXG4gIHJlbmRlclN1Z2dlc3Rpb24oY29tbWFuZDogQ29tbWFuZCwgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgZWwuc2V0VGV4dChjb21tYW5kLm5hbWUpO1xuICB9XG5cbiAgc2VsZWN0U3VnZ2VzdGlvbihjb21tYW5kOiBDb21tYW5kKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsLnZhbHVlID0gY29tbWFuZC5uYW1lO1xuICAgIHRoaXMuaW5wdXRFbC50cmlnZ2VyKFwiaW5wdXRcIik7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVN1Z2dlc3QgZXh0ZW5kcyBUZXh0SW5wdXRTdWdnZXN0PFRGaWxlPiB7XG4gIHByaXZhdGUgdGVtcGxhdGVzRW5hYmxlZCA9IHRoaXMuYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zLnRlbXBsYXRlcy5lbmFibGVkO1xuICBwcml2YXRlIHRlbXBsYXRlclBsdWdpbiA9IHRoaXMuYXBwLnBsdWdpbnMucGx1Z2luc1tcInRlbXBsYXRlci1vYnNpZGlhblwiXTtcbiAgLy8gb25seSBydW4gaWYgdGVtcGxhdGVzIHBsdWdpbiBpcyBlbmFibGVkXG4gIHByaXZhdGUgZm9sZGVyID0gKCk6IHN0cmluZ1tdID0+IHtcbiAgICBjb25zdCBmb2xkZXJzID0gW107XG4gICAgaWYgKHRoaXMudGVtcGxhdGVzRW5hYmxlZCkge1xuICAgICAgY29uc3QgZm9sZGVyID0gdGhpcy5hcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnMudGVtcGxhdGVzLmluc3RhbmNlLm9wdGlvbnNcbiAgICAgICAgLmZvbGRlcjtcbiAgICAgIGlmIChmb2xkZXIpIHtcbiAgICAgICAgZm9sZGVycy5wdXNoKGZvbGRlci50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRlbXBsYXRlclBsdWdpbikge1xuICAgICAgICBjb25zdCBmb2xkZXIgPSB0aGlzLnRlbXBsYXRlclBsdWdpbi5zZXR0aW5ncy50ZW1wbGF0ZV9mb2xkZXI7XG4gICAgICAgIGlmIChmb2xkZXIpIHtcbiAgICAgICAgICBmb2xkZXJzLnB1c2goZm9sZGVyLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb2xkZXJzWzBdID8gZm9sZGVycyA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBnZXRTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nKTogVEZpbGVbXSB7XG4gICAgY29uc3QgYWJzdHJhY3RGaWxlcyA9IHRoaXMuYXBwLnZhdWx0LmdldEFsbExvYWRlZEZpbGVzKCk7XG4gICAgY29uc3QgZmlsZXM6IFRGaWxlW10gPSBbXTtcbiAgICBjb25zdCBsb3dlckNhc2VJbnB1dFN0ciA9IGlucHV0U3RyLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZm9sZGVycyA9IHRoaXMuZm9sZGVyKCk7XG5cbiAgICBhYnN0cmFjdEZpbGVzLmZvckVhY2goKGZpbGU6IFRBYnN0cmFjdEZpbGUpID0+IHtcbiAgICAgIGxldCBleGlzdHMgPSBmYWxzZTtcbiAgICAgIGZvbGRlcnMgJiZcbiAgICAgICAgZm9sZGVycy5mb3JFYWNoKChmb2xkZXIpID0+IHtcbiAgICAgICAgICBpZiAoZmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkuY29udGFpbnMoYCR7Zm9sZGVyfS9gKSkge1xuICAgICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgaWYgKFxuICAgICAgICBmaWxlIGluc3RhbmNlb2YgVEZpbGUgJiZcbiAgICAgICAgZmlsZS5leHRlbnNpb24gPT09IFwibWRcIiAmJlxuICAgICAgICBleGlzdHMgJiZcbiAgICAgICAgZmlsZS5wYXRoLnRvTG93ZXJDYXNlKCkuY29udGFpbnMobG93ZXJDYXNlSW5wdXRTdHIpXG4gICAgICApIHtcbiAgICAgICAgZmlsZXMucHVzaChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmaWxlcztcbiAgfVxuXG4gIHJlbmRlclN1Z2dlc3Rpb24oZmlsZTogVEZpbGUsIGVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGVsLnNldFRleHQoZmlsZS5uYW1lLnNwbGl0KFwiLlwiKVswXSk7XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKGZpbGU6IFRGaWxlKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsLnZhbHVlID0gZmlsZS5uYW1lLnNwbGl0KFwiLlwiKVswXTtcbiAgICB0aGlzLmlucHV0RWwudHJpZ2dlcihcImlucHV0XCIpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnV0dG9uU3VnZ2VzdCBleHRlbmRzIFRleHRJbnB1dFN1Z2dlc3Q8c3RyaW5nPiB7XG4gIGdldFN1Z2dlc3Rpb25zKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBidXR0b25TdG9yZSA9IGdldFN0b3JlKHRoaXMuYXBwLmlzTW9iaWxlKTtcbiAgICBjb25zdCBidXR0b25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgYnV0dG9uU3RvcmUuZm9yRWFjaCgoYnV0dG9uOiBFeHRlbmRlZEJsb2NrQ2FjaGUpID0+IHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBidXR0b24uaWQuc3BsaXQoXCItXCIpWzFdO1xuICAgICAgYnV0dG9ucy5wdXNoKHRyaW1tZWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJ1dHRvbnM7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKGJ1dHRvbjogc3RyaW5nLCBlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5zZXRUZXh0KGJ1dHRvbik7XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKGJ1dHRvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsLnZhbHVlID0gdGhpcy5pbnB1dEVsLnZhbHVlICsgYnV0dG9uO1xuICAgIHRoaXMuaW5wdXRFbC50cmlnZ2VyKFwiaW5wdXRcIik7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBNb2RhbCwgQXBwLCBTZXR0aW5nLCBNYXJrZG93blZpZXcsIEVkaXRvciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgY3JlYXRlQnV0dG9uIH0gZnJvbSBcIi4vYnV0dG9uXCI7XG5pbXBvcnQgeyBDb21tYW5kU3VnZ2VzdCwgVGVtcGxhdGVTdWdnZXN0LCBCdXR0b25TdWdnZXN0IH0gZnJvbSBcIi4vc3VnZ2VzdFwiO1xuaW1wb3J0IHsgaW5zZXJ0QnV0dG9uLCBpbnNlcnRJbmxpbmVCdXR0b24gfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgQnV0dG9uTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIGFjdGl2ZVZpZXc6IE1hcmtkb3duVmlldztcbiAgYWN0aXZlRWRpdG9yOiBFZGl0b3I7XG4gIGFjdGl2ZUN1cnNvcjogQ29kZU1pcnJvci5Qb3NpdGlvbjtcbiAgYWN0aW9uSW50ZXJ2YWw6IFRpbWVvdXQ7XG4gIGJ1dHRvblByZXZpZXdFbDogSFRNTEVsZW1lbnQgPSBjcmVhdGVFbChcInBcIik7XG4gIGNvbW1hbmRTdWdnZXN0RWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBjcmVhdGVFbChcImlucHV0XCIsIHsgdHlwZTogXCJ0ZXh0XCIgfSk7XG4gIGZpbGVTdWdnZXN0RWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBjcmVhdGVFbChcImlucHV0XCIsIHsgdHlwZTogXCJ0ZXh0XCIgfSk7XG4gIHJlbW92ZVN1Z2dlc3RFbDogSFRNTElucHV0RWxlbWVudCA9IGNyZWF0ZUVsKFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiB9KTtcbiAgc3dhcFN1Z2dlc3RFbDogSFRNTElucHV0RWxlbWVudCA9IGNyZWF0ZUVsKFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiB9KTtcbiAgaWRTdWdnZXN0RWw6IEhUTUxJbnB1dEVsZW1lbnQgPSBjcmVhdGVFbChcImlucHV0XCIsIHsgdHlwZTogXCJ0ZXh0XCIgfSk7XG4gIHJlbW92ZVN1Z2dlc3Q7XG4gIHN3YXBTdWdnZXN0O1xuICBpZFN1Z2dlc3Q7XG4gIGNvbW1hbmRTdWdnZXN0O1xuICBmaWxlU3VnZ2VzdDtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCkge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5jb21tYW5kU3VnZ2VzdCA9IG5ldyBDb21tYW5kU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcy5jb21tYW5kU3VnZ2VzdEVsKTtcbiAgICB0aGlzLmNvbW1hbmRTdWdnZXN0RWwucGxhY2Vob2xkZXIgPSBcIlRvZ2dsZSBQaW5cIjtcbiAgICB0aGlzLmNvbW1hbmRTdWdnZXN0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIHRoaXMub3V0cHV0T2JqZWN0LmFjdGlvbiA9ICg8SFRNTElucHV0RWxlbWVudD5lLnRhcmdldCkudmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5jb21tYW5kU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChlOiBFdmVudCkgPT4ge1xuICAgICAgdGhpcy5vdXRwdXRPYmplY3QuYWN0aW9uID0gKDxIVE1MSW5wdXRFbGVtZW50PmUudGFyZ2V0KS52YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmZpbGVTdWdnZXN0ID0gbmV3IFRlbXBsYXRlU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcy5maWxlU3VnZ2VzdEVsKTtcbiAgICB0aGlzLmZpbGVTdWdnZXN0RWwucGxhY2Vob2xkZXIgPSBcIk15IFRlbXBsYXRlXCI7XG4gICAgdGhpcy5maWxlU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIHRoaXMub3V0cHV0T2JqZWN0LmFjdGlvbiA9ICg8SFRNTElucHV0RWxlbWVudD5lLnRhcmdldCkudmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5maWxlU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChlKSA9PiB7XG4gICAgICB0aGlzLm91dHB1dE9iamVjdC5hY3Rpb24gPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZS50YXJnZXQpLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucmVtb3ZlU3VnZ2VzdCA9IG5ldyBCdXR0b25TdWdnZXN0KHRoaXMuYXBwLCB0aGlzLnJlbW92ZVN1Z2dlc3RFbCk7XG4gICAgdGhpcy5yZW1vdmVTdWdnZXN0RWwudmFsdWUgPSBcInRydWVcIjtcbiAgICB0aGlzLnJlbW92ZVN1Z2dlc3RFbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICB0aGlzLm91dHB1dE9iamVjdC5yZW1vdmUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZS50YXJnZXQpLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucmVtb3ZlU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChlKSA9PiB7XG4gICAgICB0aGlzLm91dHB1dE9iamVjdC5yZW1vdmUgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZS50YXJnZXQpLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMuc3dhcFN1Z2dlc3QgPSBuZXcgQnV0dG9uU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcy5zd2FwU3VnZ2VzdEVsKTtcbiAgICB0aGlzLnN3YXBTdWdnZXN0RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgdGhpcy5vdXRwdXRPYmplY3Quc3dhcCA9ICg8SFRNTElucHV0RWxlbWVudD5lLnRhcmdldCkudmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5zd2FwU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChlKSA9PiB7XG4gICAgICB0aGlzLm91dHB1dE9iamVjdC5zd2FwID0gKDxIVE1MSW5wdXRFbGVtZW50PmUudGFyZ2V0KS52YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmlkU3VnZ2VzdCA9IG5ldyBCdXR0b25TdWdnZXN0KHRoaXMuYXBwLCB0aGlzLmlkU3VnZ2VzdEVsKTtcbiAgICB0aGlzLmlkU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIHRoaXMub3V0cHV0T2JqZWN0LmlkID0gKDxIVE1MSW5wdXRFbGVtZW50PmUudGFyZ2V0KS52YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLmlkU3VnZ2VzdEVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChlKSA9PiB7XG4gICAgICB0aGlzLm91dHB1dE9iamVjdC5pZCA9ICg8SFRNTElucHV0RWxlbWVudD5lLnRhcmdldCkudmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5zd2FwU3VnZ2VzdEVsLnBsYWNlaG9sZGVyID0gXCJbaWRPbmUsIGlkVHdvXVwiO1xuICB9XG5cbiAgcHJpdmF0ZSBvdXRwdXRPYmplY3QgPSB7XG4gICAgbmFtZTogXCJcIixcbiAgICB0eXBlOiBcIlwiLFxuICAgIGFjdGlvbjogXCJcIixcbiAgICBzd2FwOiBcIlwiLFxuICAgIHJlbW92ZTogXCJcIixcbiAgICByZXBsYWNlOiBcIlwiLFxuICAgIGlkOiBcIlwiLFxuICAgIHRlbXBsYXRlcjogZmFsc2UsXG4gICAgY2xhc3M6IFwiXCIsXG4gICAgY29sb3I6IFwiXCIsXG4gICAgYmxvY2tJZDogXCJcIixcbiAgfTtcblxuICBvbk9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgeyB0aXRsZUVsLCBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgdGl0bGVFbC5zZXRUZXh0KFwiQnV0dG9uIE1ha2VyXCIpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcImJ1dHRvbi1tYWtlclwiKTtcbiAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJmb3JtXCIsIHt9LCAoZm9ybUVsKSA9PiB7XG4gICAgICBuZXcgU2V0dGluZyhmb3JtRWwpXG4gICAgICAgIC5zZXROYW1lKFwiQnV0dG9uIE5hbWVcIilcbiAgICAgICAgLnNldERlc2MoXCJXaGF0IHdvdWxkIHlvdSBsaWtlIHRvIGNhbGwgdGhpcyBidXR0b24/XCIpXG4gICAgICAgIC5hZGRUZXh0KCh0ZXh0RWwpID0+IHtcbiAgICAgICAgICB0ZXh0RWwuc2V0UGxhY2Vob2xkZXIoXCJNeSBBd2Vzb21lIEJ1dHRvblwiKTtcbiAgICAgICAgICB0ZXh0RWwub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvblByZXZpZXdFbC5zZXRUZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0Lm5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRleHRFbC5pbnB1dEVsLmZvY3VzKCksIDEwKTtcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCB0eXBlQ29udGFpbmVyID0gY3JlYXRlRWwoXCJkaXZcIik7XG4gICAgICBjb25zdCB0eXBlVGl0bGUgPSBjcmVhdGVFbChcInNwYW5cIiwgeyBjbHM6IFwic2V0dGluZy1pdGVtLXRpdGxlXCIgfSk7XG4gICAgICB0eXBlVGl0bGUuc2V0VGV4dChcIkJ1dHRvbiBUeXBlXCIpO1xuICAgICAgY29uc3QgdHlwZURlc2MgPSBjcmVhdGVFbChcImRpdlwiLCB7IGNsczogXCJzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb25cIiB9KTtcbiAgICAgIHR5cGVEZXNjLnNldFRleHQoXCJXaGF0IHR5cGUgb2YgYnV0dG9uIGFyZSB5b3UgbWFraW5nP1wiKTtcbiAgICAgIGZvcm1FbC5hcHBlbmRDaGlsZCh0eXBlQ29udGFpbmVyKTtcbiAgICAgIHR5cGVDb250YWluZXIuYXBwZW5kQ2hpbGQodHlwZVRpdGxlKTtcbiAgICAgIHR5cGVDb250YWluZXIuYXBwZW5kQ2hpbGQodHlwZURlc2MpO1xuICAgICAgbmV3IFNldHRpbmcodHlwZURlc2MpLmFkZERyb3Bkb3duKChkcm9wKSA9PiB7XG4gICAgICAgIGRyb3AuYWRkT3B0aW9uKFwicHJlXCIsIFwiU2VsZWN0IGEgQnV0dG9uIFR5cGVcIik7XG4gICAgICAgIGRyb3AuYWRkT3B0aW9uKFwiY29tbWFuZFwiLCBcIkNvbW1hbmQgLSBydW4gYSBjb21tYW5kIHByb21wdCBjb21tYW5kXCIpO1xuICAgICAgICBkcm9wLmFkZE9wdGlvbihcImxpbmtcIiwgXCJMaW5rIC0gb3BlbiBhIHVybCBvciB1cmlcIik7XG4gICAgICAgIGRyb3AuYWRkT3B0aW9uKFxuICAgICAgICAgIFwidGVtcGxhdGVcIixcbiAgICAgICAgICBcIlRlbXBsYXRlIC0gaW5zZXJ0IG9yIGNyZWF0ZSBub3RlcyBmcm9tIHRlbXBsYXRlc1wiXG4gICAgICAgICk7XG4gICAgICAgIGRyb3AuYWRkT3B0aW9uKFwidGV4dFwiLCBcIlRleHQgLSBpbnNlcnQgb3IgY3JlYXRlIG5vdGVzIHdpdGggdGV4dFwiKTtcbiAgICAgICAgZHJvcC5hZGRPcHRpb24oXG4gICAgICAgICAgXCJjYWxjdWxhdGVcIixcbiAgICAgICAgICBcIkNhbGN1bGF0ZSAtIHJ1biBhIG1hdGhlbWF0aWNhbCBjYWxjdWxhdGlvblwiXG4gICAgICAgICk7XG4gICAgICAgIGRyb3AuYWRkT3B0aW9uKFxuICAgICAgICAgIFwic3dhcFwiLFxuICAgICAgICAgIFwiU3dhcCAtIENyZWF0ZSBhIG11bHRpLXB1cnBvc2UgSW5saW5lIEJ1dHRvbiBmcm9tIG90aGVyIEJ1dHRvbnNcIlxuICAgICAgICApO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBmb3JtRWwuY3JlYXRlRWwoXCJkaXZcIik7XG4gICAgICAgIGRyb3Aub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IHZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJsaW5rXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbi5lbXB0eSgpO1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAuc2V0TmFtZShcIkxpbmtcIilcbiAgICAgICAgICAgICAgLnNldERlc2MoXCJFbnRlciBhIGxpbmsgdG8gb3BlblwiKVxuICAgICAgICAgICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiaHR0cHM6Ly9vYnNpZGlhbi5tZFwiKTtcbiAgICAgICAgICAgICAgICB0ZXh0RWwub25DaGFuZ2UoKHZhbHVlKSA9PiAodGhpcy5vdXRwdXRPYmplY3QuYWN0aW9uID0gdmFsdWUpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJjb21tYW5kXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbi5lbXB0eSgpO1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAuc2V0TmFtZShcIkNvbW1hbmRcIilcbiAgICAgICAgICAgICAgLnNldERlc2MoXCJFbnRlciBhIGNvbW1hbmQgdG8gcnVuXCIpXG4gICAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0RWwpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0RWwuaW5wdXRFbC5yZXBsYWNlV2l0aCh0aGlzLmNvbW1hbmRTdWdnZXN0RWwpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwidGVtcGxhdGVcIikpIHtcbiAgICAgICAgICAgIGFjdGlvbi5lbXB0eSgpO1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAuc2V0TmFtZShcIlRlbXBsYXRlXCIpXG4gICAgICAgICAgICAgIC5zZXREZXNjKFwiU2VsZWN0IGEgdGVtcGxhdGUgbm90ZSBhbmQgd2hhdCBzaG91bGQgaGFwcGVuXCIpXG4gICAgICAgICAgICAgIC5hZGREcm9wZG93bigoZHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGRyb3AuYWRkT3B0aW9uKFwicHJlXCIsIFwiRG8gdGhpcy4uLlwiKTtcbiAgICAgICAgICAgICAgICBkcm9wLmFkZE9wdGlvbihcInByZXBlbmQgdGVtcGxhdGVcIiwgXCJQcmVwZW5kXCIpO1xuICAgICAgICAgICAgICAgIGRyb3AuYWRkT3B0aW9uKFwiYXBwZW5kIHRlbXBsYXRlXCIsIFwiQXBwZW5kXCIpO1xuICAgICAgICAgICAgICAgIGRyb3AuYWRkT3B0aW9uKFwibGluZSB0ZW1wbGF0ZVwiLCBcIkxpbmVcIik7XG4gICAgICAgICAgICAgICAgZHJvcC5hZGRPcHRpb24oXCJub3RlIHRlbXBsYXRlXCIsIFwiTm90ZVwiKTtcbiAgICAgICAgICAgICAgICBkcm9wLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwibGluZSB0ZW1wbGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBTZXR0aW5nKGFjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkxpbmUgTnVtYmVyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnNldERlc2MoXCJBdCB3aGljaCBsaW5lIHNob3VsZCB0aGUgdGVtcGxhdGUgYmUgaW5zZXJ0ZWQ/XCIpXG4gICAgICAgICAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiNjlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RWwub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbGluZSgke3ZhbHVlfSkgdGVtcGxhdGVgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gXCJub3RlIHRlbXBsYXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiTm90ZSBOYW1lXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnNldERlc2MoXCJXaGF0IHNob3VsZCB0aGUgbmV3IG5vdGUgYmUgbmFtZWQ/XCIpXG4gICAgICAgICAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiTXkgTmV3IE5vdGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2V0dGluZyhhY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiU3BsaXRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERlc2MoXCJTaG91bGQgdGhlIG5ldyBub3RlIG9wZW4gaW4gYSBzcGxpdCBwYW5lP1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGVFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbm90ZSgke3RleHRFbC5nZXRWYWx1ZX0pIHRlbXBsYXRlYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RWwub25DaGFuZ2UoKHRleHRWYWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZhbCA9IHRvZ2dsZUVsLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9nZ2xlVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbm90ZSgke3RleHRWYWx9LCBzcGxpdCkgdGVtcGxhdGVgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2dnbGVWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IGBub3RlKCR7dGV4dFZhbH0pIHRlbXBsYXRlYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVFbC5vbkNoYW5nZSgodG9nZ2xlVmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VmFsID0gdGV4dEVsLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9nZ2xlVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbm90ZSgke3RleHRWYWx9LCBzcGxpdCkgdGVtcGxhdGVgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2dnbGVWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IGBub3RlKCR7dGV4dFZhbH0pIHRlbXBsYXRlYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0RWwpID0+IHtcbiAgICAgICAgICAgICAgICB0ZXh0RWwuaW5wdXRFbC5yZXBsYWNlV2l0aCh0aGlzLmZpbGVTdWdnZXN0RWwpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwidGV4dFwiKSkge1xuICAgICAgICAgICAgYWN0aW9uLmVtcHR5KCk7XG4gICAgICAgICAgICBuZXcgU2V0dGluZyhhY3Rpb24pXG4gICAgICAgICAgICAgIC5zZXROYW1lKFwiVGV4dFwiKVxuICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoYXQgdGV4dCBhbmQgd2hlcmUgc2hvdWxkIGl0IGdvP1wiKVxuICAgICAgICAgICAgICAuYWRkRHJvcGRvd24oKGRyb3ApID0+IHtcbiAgICAgICAgICAgICAgICBkcm9wLmFkZE9wdGlvbihcInByZVwiLCBcIkRvIHRoaXMuLi5cIik7XG4gICAgICAgICAgICAgICAgZHJvcC5hZGRPcHRpb24oXCJwcmVwZW5kIHRleHRcIiwgXCJQcmVwZW5kXCIpO1xuICAgICAgICAgICAgICAgIGRyb3AuYWRkT3B0aW9uKFwiYXBwZW5kIHRleHRcIiwgXCJBcHBlbmRcIik7XG4gICAgICAgICAgICAgICAgZHJvcC5hZGRPcHRpb24oXCJsaW5lIHRleHRcIiwgXCJMaW5lXCIpO1xuICAgICAgICAgICAgICAgIGRyb3AuYWRkT3B0aW9uKFwibm90ZSB0ZXh0XCIsIFwiTm90ZVwiKTtcbiAgICAgICAgICAgICAgICBkcm9wLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwibGluZSB0ZXh0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiTGluZSBOdW1iZXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkF0IHdoaWNoIGxpbmUgc2hvdWxkIHRoZSB0ZW1wbGF0ZSBiZSBpbnNlcnRlZD9cIilcbiAgICAgICAgICAgICAgICAgICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RWwuc2V0UGxhY2Vob2xkZXIoXCI2OVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IGBsaW5lKCR7dmFsdWV9KSB0ZXh0YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IFwibm90ZSB0ZXh0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiTm90ZSBOYW1lXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnNldERlc2MoXCJXaGF0IHNob3VsZCB0aGUgbmV3IG5vdGUgYmUgbmFtZWQ/XCIpXG4gICAgICAgICAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiTXkgTmV3IE5vdGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2V0dGluZyhhY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiU3BsaXRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldERlc2MoXCJTaG91bGQgdGhlIG5ldyBub3RlIG9wZW4gaW4gYSBzcGxpdCBwYW5lP1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGVFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbm90ZSgke3RleHRFbC5nZXRWYWx1ZX0pIHRleHRgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbC5vbkNoYW5nZSgodGV4dFZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9nZ2xlVmFsID0gdG9nZ2xlRWwuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2dnbGVWYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IGBub3RlKCR7dGV4dFZhbH0sIHNwbGl0KSB0ZXh0YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9nZ2xlVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbm90ZSgke3RleHRWYWx9KSB0ZXh0YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVFbC5vbkNoYW5nZSgodG9nZ2xlVmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VmFsID0gdGV4dEVsLmdldFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9nZ2xlVmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnR5cGUgPSBgbm90ZSgke3RleHRWYWx9LCBzcGxpdCkgdGV4dGA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvZ2dsZVZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dE9iamVjdC50eXBlID0gYG5vdGUoJHt0ZXh0VmFsfSkgdGV4dGA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiTXkgVGV4dCB0byBJbnNlcnRcIik7XG4gICAgICAgICAgICAgICAgdGV4dEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QuYWN0aW9uID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmFsdWUgPT09IFwiY2FsY3VsYXRlXCIpIHtcbiAgICAgICAgICAgIGFjdGlvbi5lbXB0eSgpO1xuICAgICAgICAgICAgbmV3IFNldHRpbmcoYWN0aW9uKVxuICAgICAgICAgICAgICAuc2V0TmFtZShcIkNhbGN1bGF0ZVwiKVxuICAgICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICBcIkVudGVyIGEgY2FsY3VsYXRpb24sIHlvdSBjYW4gcmVmZXJlbmNlIGEgbGluZSBudW1iZXIgd2l0aCAkTGluZU51bWJlclwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHRFbC5zZXRQbGFjZWhvbGRlcihcIjIrJDEwXCIpO1xuICAgICAgICAgICAgICAgIHRleHRFbC5vbkNoYW5nZSgodmFsdWUpID0+ICh0aGlzLm91dHB1dE9iamVjdC5hY3Rpb24gPSB2YWx1ZSkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBcInN3YXBcIikge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QudHlwZSA9IFwiXCI7XG4gICAgICAgICAgICBhY3Rpb24uZW1wdHkoKTtcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGFjdGlvbilcbiAgICAgICAgICAgICAgLnNldE5hbWUoXCJTd2FwXCIpXG4gICAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiY2hvb3NlIGJ1dHRvbnMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIElubGluZSBTd2FwIEJ1dHRvblwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgIHRleHRFbC5pbnB1dEVsLnJlcGxhY2VXaXRoKHRoaXMuc3dhcFN1Z2dlc3RFbCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIG5ldyBTZXR0aW5nKGZvcm1FbClcbiAgICAgICAgLnNldE5hbWUoXCJCdXR0b24gQmxvY2sgSURcIilcbiAgICAgICAgLnNldERlc2MoXCJQcm92aWRlIGEgY3VzdG9tIGJ1dHRvbi1ibG9jay1pZFwiKVxuICAgICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgICAgdGV4dEVsLnNldFBsYWNlaG9sZGVyKFwiYnV0dG9uSWRcIik7XG4gICAgICAgICAgdGV4dEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QuYmxvY2tJZCA9IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIG5ldyBTZXR0aW5nKGZvcm1FbClcbiAgICAgICAgLnNldE5hbWUoXCJSZW1vdmVcIilcbiAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgXCJXb3VsZCB5b3UgbGlrZSB0byByZW1vdmUgdGhpcyBidXR0b24gKG9yIG90aGVyIGJ1dHRvbnMpIGFmdGVyIGNsaWNraW5nP1wiXG4gICAgICAgIClcbiAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlRWwpID0+IHtcbiAgICAgICAgICB0b2dnbGVFbC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICBuZXcgU2V0dGluZyhyZW1vdmUpXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJTZWxlY3QgUmVtb3ZlXCIpXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgICBcIlVzZSB0cnVlIHRvIHJlbW92ZSB0aGlzIGJ1dHRvbiwgb3Igc3VwcGx5IGFuIFthcnJheV0gb2YgYnV0dG9uIGJsb2NrLWlkc1wiXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0RWwpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRleHRFbC5pbnB1dEVsLnJlcGxhY2VXaXRoKHRoaXMucmVtb3ZlU3VnZ2VzdEVsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QucmVtb3ZlID0gXCJcIjtcbiAgICAgICAgICAgICAgcmVtb3ZlLmVtcHR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgcmVtb3ZlID0gZm9ybUVsLmNyZWF0ZUVsKFwiZGl2XCIpO1xuICAgICAgbmV3IFNldHRpbmcoZm9ybUVsKVxuICAgICAgICAuc2V0TmFtZShcIlJlcGxhY2VcIilcbiAgICAgICAgLnNldERlc2MoXCJXb3VsZCB5b3UgbGlrZSB0byByZXBsYWNlIGxpbmVzIGluIHRoZSBub3RlIGFmdGVyIGNsaWNraW5nP1wiKVxuICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGVFbCkgPT4ge1xuICAgICAgICAgIHRvZ2dsZUVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIG5ldyBTZXR0aW5nKHJlcGxhY2UpXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJTZWxlY3QgTGluZXNcIilcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICAgICAgICAgIFwiU3VwcGx5IGFuIGFycmF5IG9mIFtzdGFydGluZ0xpbmUsIGVuZGluZ0xpbmVdIHRvIGJlIHJlcGxhY2VkXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGV4dEVsLnNldFZhbHVlKFwiW11cIik7XG4gICAgICAgICAgICAgICAgICB0ZXh0RWwub25DaGFuZ2UoXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSkgPT4gKHRoaXMub3V0cHV0T2JqZWN0LnJlcGxhY2UgPSB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgIHJlcGxhY2UuZW1wdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCByZXBsYWNlID0gZm9ybUVsLmNyZWF0ZUVsKFwiZGl2XCIpO1xuICAgICAgbmV3IFNldHRpbmcoZm9ybUVsKVxuICAgICAgICAuc2V0TmFtZShcIkluaGVyaXRcIilcbiAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgXCJXb3VsZCB5b3UgbGlrZSB0byBpbmhlcml0IGFyZ3MgYnkgYWRkaW5nIGFuIGV4aXN0aW5nIGJ1dHRvbiBibG9jay1pZD9cIlxuICAgICAgICApXG4gICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZUVsKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlRWwub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgbmV3IFNldHRpbmcoaWQpXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJpZFwiKVxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgICAgXCJpbmhlcml0IGZyb20gb3RoZXIgQnV0dG9ucyBieSBhZGRpbmcgdGhlaXIgYnV0dG9uIGJsb2NrLWlkXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGV4dEVsLmlucHV0RWwucmVwbGFjZVdpdGgodGhpcy5pZFN1Z2dlc3RFbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LnJlcGxhY2UgPSBcIlwiO1xuICAgICAgICAgICAgICBpZC5lbXB0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIGNvbnN0IGlkID0gZm9ybUVsLmNyZWF0ZUVsKFwiZGl2XCIpO1xuICAgICAgbmV3IFNldHRpbmcoZm9ybUVsKVxuICAgICAgICAuc2V0TmFtZShcIlRlbXBsYXRlclwiKVxuICAgICAgICAuc2V0RGVzYyhcbiAgICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGNvbnZlcnQgYSB0ZW1wbGF0ZXIgY29tbWFuZCBpbnNpZGUgeW91ciBCdXR0b24gb24gZWFjaCBjbGljaz9cIlxuICAgICAgICApXG4gICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZUVsKSA9PiB7XG4gICAgICAgICAgdG9nZ2xlRWwuc2V0VG9vbHRpcChcIkRvIG5vdCB1c2UgZm9yIGlubGluZSBCdXR0b25cIik7XG4gICAgICAgICAgdG9nZ2xlRWwub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm91dHB1dE9iamVjdC50ZW1wbGF0ZXIgPSB2YWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICBuZXcgU2V0dGluZyhmb3JtRWwpXG4gICAgICAgIC5zZXROYW1lKFwiQ3VzdG9tIENsYXNzXCIpXG4gICAgICAgIC5zZXREZXNjKFwiQWRkIGEgY3VzdG9tIGNsYXNzIGZvciBidXR0b24gc3R5bGluZ1wiKVxuICAgICAgICAuYWRkVGV4dCgodGV4dEVsKSA9PiB7XG4gICAgICAgICAgdGV4dEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5idXR0b25QcmV2aWV3RWwuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5vdXRwdXRPYmplY3QuY2xhc3MgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICB0aGlzLmJ1dHRvblByZXZpZXdFbC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImJ1dHRvbi1kZWZhdWx0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIG5ldyBTZXR0aW5nKGZvcm1FbClcbiAgICAgICAgLnNldE5hbWUoXCJDb2xvclwiKVxuICAgICAgICAuc2V0RGVzYyhcIldoYXQgY29sb3Igd291bGQgeW91IGxpa2UgeW91ciBidXR0b24gdG8gYmU/XCIpXG4gICAgICAgIC5hZGREcm9wZG93bigoZHJvcCkgPT4ge1xuICAgICAgICAgIGRyb3AuYWRkT3B0aW9uKFwiZGVmYXVsdFwiLCBcIkRlZmF1bHQgQ29sb3JcIik7XG4gICAgICAgICAgZHJvcC5hZGRPcHRpb24oXCJibHVlXCIsIFwiQmx1ZVwiKTtcbiAgICAgICAgICBkcm9wLmFkZE9wdGlvbihcInJlZFwiLCBcIlJlZFwiKTtcbiAgICAgICAgICBkcm9wLmFkZE9wdGlvbihcImdyZWVuXCIsIFwiR3JlZW5cIik7XG4gICAgICAgICAgZHJvcC5hZGRPcHRpb24oXCJ5ZWxsb3dcIiwgXCJZZWxsb3dcIik7XG4gICAgICAgICAgZHJvcC5hZGRPcHRpb24oXCJwdXJwbGVcIiwgXCJQdXJwbGVcIik7XG4gICAgICAgICAgZHJvcC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3V0cHV0T2JqZWN0LmNvbG9yID0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBidXR0b25DbGFzcyA9IHRoaXMuYnV0dG9uUHJldmlld0VsXG4gICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIiBibHVlXCIsIFwiXCIpXG4gICAgICAgICAgICAgIC5yZXBsYWNlKFwiIHJlZFwiLCBcIlwiKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIiBncmVlblwiLCBcIlwiKVxuICAgICAgICAgICAgICAucmVwbGFjZShcIiB5ZWxsb3dcIiwgXCJcIilcbiAgICAgICAgICAgICAgLnJlcGxhY2UoXCIgcHVycGxlXCIsIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgICAgICB0aGlzLmJ1dHRvblByZXZpZXdFbC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgXCJjbGFzc1wiLFxuICAgICAgICAgICAgICAgIGAke2J1dHRvbkNsYXNzfSAke3ZhbHVlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcImJsdWVcIikge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gXCIjNzZiM2ZhXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBcInB1cnBsZVwiKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBcIiM3MjU1ODVcIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmJ1dHRvblByZXZpZXdFbC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgICAgICAgIGBiYWNrZ3JvdW5kOiAke3ZhbHVlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYnV0dG9uUHJldmlld0VsLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIGAke2J1dHRvbkNsYXNzfWApO1xuICAgICAgICAgICAgICB0aGlzLmJ1dHRvblByZXZpZXdFbC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICBmb3JtRWwuY3JlYXRlRGl2KFwibW9kYWwtYnV0dG9uLWNvbnRhaW5lclwiLCAoYnV0dG9uQ29udGFpbmVyRWwpID0+IHtcbiAgICAgICAgYnV0dG9uQ29udGFpbmVyRWxcbiAgICAgICAgICAuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgYXR0cjogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICBjbHM6IFwiYnV0dG9uLWRlZmF1bHRcIixcbiAgICAgICAgICAgIHRleHQ6IFwiQ2FuY2VsXCIsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHRoaXMuY2xvc2UoKSk7XG4gICAgICAgIGJ1dHRvbkNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICBhdHRyOiB7IHR5cGU6IFwic3VibWl0XCIgfSxcbiAgICAgICAgICBjbHM6IFwiYnV0dG9uLWRlZmF1bHQgbW9kLWN0YVwiLFxuICAgICAgICAgIHRleHQ6IFwiSW5zZXJ0IEJ1dHRvblwiLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3JtRWwuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpbnNlcnRCdXR0b24odGhpcy5hcHAsIHRoaXMub3V0cHV0T2JqZWN0KTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29udGVudEVsLmNyZWF0ZUVsKFwicFwiKS5zZXRUZXh0KFwiQnV0dG9uIFByZXZpZXdcIik7XG4gICAgdGhpcy5idXR0b25QcmV2aWV3RWwgPSBjcmVhdGVCdXR0b24oe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGVsOiBjb250ZW50RWwsXG4gICAgICBhcmdzOiB7IG5hbWU6IFwiTXkgQXdlc29tZSBCdXR0b25cIiB9LFxuICAgIH0pO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5saW5lQnV0dG9uTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIGJ1dHRvblN1Z2dlc3RFbDogSFRNTElucHV0RWxlbWVudCA9IGNyZWF0ZUVsKFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiB9KTtcbiAgYnV0dG9uU3VnZ2VzdDtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCkge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5idXR0b25TdWdnZXN0ID0gbmV3IEJ1dHRvblN1Z2dlc3QodGhpcy5hcHAsIHRoaXMuYnV0dG9uU3VnZ2VzdEVsKTtcbiAgICB0aGlzLmJ1dHRvblN1Z2dlc3RFbC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDQwcHhcIik7XG4gIH1cblxuICBvbk9wZW4oKSB7XG4gICAgY29uc3QgeyB0aXRsZUVsLCBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgdGl0bGVFbC5zZXRUZXh0KFwiSW5zZXJ0IElubGluZSBCdXR0b25cIik7XG4gICAgY29udGVudEVsLmNyZWF0ZUVsKFwiZm9ybVwiLCB7fSwgKGZvcm1FbCkgPT4ge1xuICAgICAgZm9ybUVsLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uU3VnZ2VzdEVsKTtcbiAgICAgIGZvcm1FbC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIChlOiBFdmVudCkgPT4ge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGluc2VydElubGluZUJ1dHRvbih0aGlzLmFwcCwgdGhpcy5idXR0b25TdWdnZXN0RWwudmFsdWUpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgY29udGVudEVsLmVtcHR5KCk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFwcCxcbiAgUGx1Z2luLFxuICBFdmVudFJlZixcbiAgRXZlbnRzLFxuICBNYXJrZG93blZpZXcsXG4gIE1hcmtkb3duUmVuZGVyQ2hpbGQsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgY3JlYXRlQXJndW1lbnRPYmplY3QgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHtcbiAgaW5pdGlhbGl6ZUJ1dHRvblN0b3JlLFxuICBhZGRCdXR0b25Ub1N0b3JlLFxuICBnZXRCdXR0b25Gcm9tU3RvcmUsXG4gIGdldEJ1dHRvbkJ5SWQsXG4gIGdldFN0b3JlLFxufSBmcm9tIFwiLi9idXR0b25TdG9yZVwiO1xuaW1wb3J0IHsgYnV0dG9uRXZlbnRMaXN0ZW5lciwgb3BlbkZpbGVMaXN0ZW5lciB9IGZyb20gXCIuL2V2ZW50c1wiO1xuaW1wb3J0IHsgQXJndW1lbnRzIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEJ1dHRvbk1vZGFsLCBJbmxpbmVCdXR0b25Nb2RhbCB9IGZyb20gXCIuL21vZGFsXCI7XG5pbXBvcnQgeyBjcmVhdGVCdXR0b24sIEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvblwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdXR0b25zUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgcHJpdmF0ZSBidXR0b25FdmVudHM6IEV2ZW50UmVmO1xuICBwcml2YXRlIGNsb3NlZEZpbGU6IEV2ZW50UmVmO1xuICBwcml2YXRlIGJ1dHRvbkVkaXQ6IEV2ZW50UmVmO1xuICBwcml2YXRlIGNyZWF0ZUJ1dHRvbjogQnV0dG9uO1xuICBwcml2YXRlIHN0b3JlRXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICBwcml2YXRlIGluZGV4Q291bnQgPSAwO1xuICBwcml2YXRlIHN0b3JlRXZlbnRzUmVmOiBFdmVudFJlZlxuXG4gIHByaXZhdGUgYXN5bmMgYWRkQnV0dG9uSW5FZGl0KGFwcDogQXBwKSB7XG4gICAgbGV0IHdpZGdldDogQ29kZU1pcnJvci5MaW5lV2lkZ2V0O1xuICAgIGlmICh3aWRnZXQpIHtcbiAgICAgIHdpZGdldC5jbGVhcigpO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVWaWV3ID0gYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gICAgaWYgKGFjdGl2ZVZpZXcpIHtcbiAgICAgIGNvbnN0IHN0b3JlID0gZ2V0U3RvcmUoYXBwLmlzTW9iaWxlKTtcbiAgICAgIGNvbnN0IGJ1dHRvbnNJbkZpbGUgPSBzdG9yZS5maWx0ZXIoXG4gICAgICAgIChidXR0b24pID0+IGJ1dHRvbi5wYXRoID09PSBhY3RpdmVWaWV3LmZpbGUucGF0aFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJDb2RlTWlycm9yKChjbTogQ29kZU1pcnJvci5FZGl0b3IpID0+IHtcbiAgICAgICAgYnV0dG9uc0luRmlsZS5mb3JFYWNoKGFzeW5jIChidXR0b24pID0+IHtcbiAgICAgICAgICBjb25zdCB3aWRnZXRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgY29uc3Qgc3RvcmVCdXR0b24gPSBhd2FpdCBnZXRCdXR0b25Gcm9tU3RvcmUoYXBwLCB7XG4gICAgICAgICAgICBpZDogYnV0dG9uLmlkLnNwbGl0KFwiLVwiKVsxXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhYXBwLmlzTW9iaWxlICYmXG4gICAgICAgICAgICBzdG9yZUJ1dHRvbiAmJlxuICAgICAgICAgICAgc3RvcmVCdXR0b24/LmFyZ3MuZWRpdHZpZXcgPT09IFwidHJ1ZVwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB3aWRnZXQgPSBjbS5hZGRMaW5lV2lkZ2V0KFxuICAgICAgICAgICAgICBidXR0b24ucG9zaXRpb24uZW5kLmxpbmUgKyAxLFxuICAgICAgICAgICAgICBjcmVhdGVCdXR0b24oe1xuICAgICAgICAgICAgICAgIGFwcCxcbiAgICAgICAgICAgICAgICBlbDogd2lkZ2V0RWwsXG4gICAgICAgICAgICAgICAgYXJnczogc3RvcmVCdXR0b24uYXJncyxcbiAgICAgICAgICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlkOiBidXR0b24uaWQsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYnV0dG9uRXZlbnRzID0gYnV0dG9uRXZlbnRMaXN0ZW5lcih0aGlzLmFwcCwgYWRkQnV0dG9uVG9TdG9yZSk7XG4gICAgdGhpcy5jbG9zZWRGaWxlID0gb3BlbkZpbGVMaXN0ZW5lcih0aGlzLmFwcCwgdGhpcy5zdG9yZUV2ZW50cywgaW5pdGlhbGl6ZUJ1dHRvblN0b3JlKTtcbiAgICB0aGlzLmNyZWF0ZUJ1dHRvbiA9IGNyZWF0ZUJ1dHRvbiBhcyBCdXR0b247XG4gICAgdGhpcy5zdG9yZUV2ZW50c1JlZiA9IHRoaXMuc3RvcmVFdmVudHMub24oJ2luZGV4LWNvbXBsZXRlJywgKCkgPT4geyBcbiAgICAgIHRoaXMuaW5kZXhDb3VudCsrO1xuICAgIH0pXG4gICAgICAgIGluaXRpYWxpemVCdXR0b25TdG9yZSh0aGlzLmFwcCwgdGhpcy5zdG9yZUV2ZW50cyk7XG5cbiAgICB0aGlzLmJ1dHRvbkVkaXQgPSBvcGVuRmlsZUxpc3RlbmVyKFxuICAgICAgdGhpcy5hcHAsXG4gICAgICB0aGlzLnN0b3JlRXZlbnRzLFxuICAgICAgdGhpcy5hZGRCdXR0b25JbkVkaXQuYmluZCh0aGlzKVxuICAgICk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwiYnV0dG9uLW1ha2VyXCIsXG4gICAgICBuYW1lOiBcIkJ1dHRvbiBNYWtlclwiLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IG5ldyBCdXR0b25Nb2RhbCh0aGlzLmFwcCkub3BlbigpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiBcImlubGluZS1idXR0b25cIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IElubGluZSBCdXR0b25cIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBuZXcgSW5saW5lQnV0dG9uTW9kYWwodGhpcy5hcHApLm9wZW4oKSxcbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcImJ1dHRvblwiLCBhc3luYyAoc291cmNlLCBlbCkgPT4ge1xuICAgICAgLy8gY3JlYXRlIGFuIG9iamVjdCBvdXQgb2YgdGhlIGFyZ3VtZW50c1xuICAgICAgY29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gICAgICBpZiAoYWN0aXZlVmlldykge1xuICAgICAgICBhZGRCdXR0b25Ub1N0b3JlKHRoaXMuYXBwLCBhY3RpdmVWaWV3LmZpbGUpO1xuICAgICAgICBsZXQgYXJncyA9IGNyZWF0ZUFyZ3VtZW50T2JqZWN0KHNvdXJjZSk7XG4gICAgICAgIGNvbnN0IHN0b3JlQXJncyA9IGF3YWl0IGdldEJ1dHRvbkZyb21TdG9yZSh0aGlzLmFwcCwgYXJncyk7XG4gICAgICAgIGFyZ3MgPSBzdG9yZUFyZ3MgPyBzdG9yZUFyZ3MuYXJncyA6IGFyZ3M7XG4gICAgICAgIGNvbnN0IGlkID0gc3RvcmVBcmdzICYmIHN0b3JlQXJncy5pZDtcbiAgICAgICAgY3JlYXRlQnV0dG9uKHsgYXBwOiB0aGlzLmFwcCwgZWwsIGFyZ3MsIGlubGluZTogZmFsc2UsIGlkIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hcmtkb3duUG9zdFByb2Nlc3Nvcihhc3luYyAoZWwsIGN0eCkgPT4ge1xuICAgICAgLy8gU2VhcmNoIGZvciA8Y29kZT4gYmxvY2tzIGluc2lkZSB0aGlzIGVsZW1lbnQ7IGZvciBlYWNoIG9uZSwgbG9vayBmb3IgdGhpbmdzIG9mIHRoZSBmb3JtIGBcbiAgICAgIGNvbnN0IGNvZGVibG9ja3MgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiY29kZVwiKTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2RlYmxvY2tzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzLml0ZW0oaW5kZXgpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gY29kZWJsb2NrLmlubmVyVGV4dC50cmltKCk7XG4gICAgICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoXCJidXR0b25cIikpIHtcbiAgICAgICAgICBjb25zdCBpZCA9IHRleHQuc3BsaXQoXCJidXR0b24tXCIpWzFdLnRyaW0oKTtcbiAgICAgICAgICBpZiAodGhpcy5pbmRleENvdW50IDwgMikge1xuICAgICAgICAgIHRoaXMuc3RvcmVFdmVudHNSZWYgPSB0aGlzLnN0b3JlRXZlbnRzLm9uKCdpbmRleC1jb21wbGV0ZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0aGlzLmluZGV4Q291bnQrKztcbiAgICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgZ2V0QnV0dG9uQnlJZCh0aGlzLmFwcCwgaWQpO1xuICAgICAgICAgIGlmIChhcmdzKSB7XG4gICAgICAgICAgICBjdHguYWRkQ2hpbGQobmV3IElubGluZUJ1dHRvbihjb2RlYmxvY2ssIHRoaXMuYXBwLCBhcmdzLCBpZCkpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgZ2V0QnV0dG9uQnlJZCh0aGlzLmFwcCwgaWQpO1xuICAgICAgICBpZiAoYXJncykge1xuICAgICAgICAgIGN0eC5hZGRDaGlsZChuZXcgSW5saW5lQnV0dG9uKGNvZGVibG9jaywgdGhpcy5hcHAsIGFyZ3MsIGlkKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgb251bmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5vZmZyZWYodGhpcy5idXR0b25FdmVudHMpO1xuICAgIHRoaXMuYXBwLndvcmtzcGFjZS5vZmZyZWYodGhpcy5jbG9zZWRGaWxlKTtcbiAgICB0aGlzLmFwcC53b3Jrc3BhY2Uub2ZmcmVmKHRoaXMuYnV0dG9uRWRpdCk7XG4gICAgdGhpcy5zdG9yZUV2ZW50cy5vZmZyZWYodGhpcy5zdG9yZUV2ZW50c1JlZik7XG4gIH1cbn1cblxuY2xhc3MgSW5saW5lQnV0dG9uIGV4dGVuZHMgTWFya2Rvd25SZW5kZXJDaGlsZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbDogSFRNTEVsZW1lbnQsXG4gICAgcHVibGljIGFwcDogQXBwLFxuICAgIHB1YmxpYyBhcmdzOiBBcmd1bWVudHMsXG4gICAgcHVibGljIGlkOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoZWwpO1xuICB9XG4gIGFzeW5jIG9ubG9hZCgpIHtcbiAgICBjb25zdCBidXR0b24gPSBjcmVhdGVCdXR0b24oe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIGVsOiB0aGlzLmVsLFxuICAgICAgYXJnczogdGhpcy5hcmdzLFxuICAgICAgaW5saW5lOiB0cnVlLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgfSk7XG4gICAgdGhpcy5lbC5yZXBsYWNlV2l0aChidXR0b24pO1xuICB9XG59XG4iXSwibmFtZXMiOlsiTWFya2Rvd25WaWV3IiwiTm90aWNlIiwiTWV4cCIsIm1leHAiLCJlZmZlY3QiLCJtaW4iLCJtYXgiLCJtYXRoTWF4IiwibWF0aE1pbiIsImhhc2giLCJhbGxQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsInBvcHBlck9mZnNldHMiLCJjb21wdXRlU3R5bGVzIiwiYXBwbHlTdHlsZXMiLCJvZmZzZXQiLCJmbGlwIiwicHJldmVudE92ZXJmbG93IiwiYXJyb3ciLCJoaWRlIiwiU2NvcGUiLCJURmlsZSIsIk1vZGFsIiwiU2V0dGluZyIsIlBsdWdpbiIsIkV2ZW50cyIsIk1hcmtkb3duUmVuZGVyQ2hpbGQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUlBLElBQUksV0FBaUMsQ0FBQztBQUUvQixNQUFNLFFBQVEsR0FBRyxDQUFDLFFB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QUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsR0FBRztBQUNILEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDaEIsR0FBRztBQUNILEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3JCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsR0FBRztBQUNILEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3JCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsR0FBRztBQUNILEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNILEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0MsR0FBRztBQUNILEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RCLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMs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SSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRUEsYUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUVBLGFBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUM1R0EsYUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUVBLGFBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFQSxhQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRUEsYUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO0FBQzVFQSxhQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRUEsYUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFQSxhQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFQSxhQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRUEsYUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFQSxhQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUVBLGFBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUM7QUFDL0ksSUFBSSxNQUFNLEdBQUc7QUFDYixFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNQLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNSLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDUCxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ1IsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNQLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNSLEVBQUM7QUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN4QyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9CLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxHQUFHO0FBQ1osRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsRUFBRSxFQUFFLElBQUk7QUFDVixFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUM7QUFDRCxJQUFJLEtBQUssR0FBRztBQUNaLEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsRUFBRSxFQUFFLElBQUk7QUFDVixFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBQztBQUNELElBQUksYUFBYSxHQUFHO0FBQ3BCLEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLEVBQUUsRUFBRSxJQUFJO0FBQ1YsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUM7QUFDRCxJQUFJLEtBQUssR0FBRyxHQUFFO0FBQ2QsSUFBSSxhQUFhLEdBQUc7QUFDcEIsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxDQUFDLEVBQUUsSUFBSTtBQUNULEVBQUUsQ0FBQyxFQUFFLElBQUk7QUFDVCxFQUFFLENBQUMsRUFBRSxJQUFJO0FBQ1QsRUFBRSxFQUFFLEVBQUUsSUFBSTtBQUNWLEVBQUUsRUFBRSxFQUFFLElBQUk7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Q3RCLEVBQUM7QUFDRCxTQUFjLEdBQUdBOztBQzVaakJBLEtBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFlBQVk7QUFFdkMsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUM3QyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3RCLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3BFLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7QUFDeEIsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7QUFDOUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEdBQUc7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QUFDLEVBQUUsQ0FBQztBQUM5QixFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDckIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUMxQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxHQUFHO0FBQ0gsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEdBQUcsR0FBRyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7QUFDdEQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUk7QUFDSixRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlFLEdBQUc7QUFDSCxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDMUIsR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUN0RCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSTtBQUNKLFFBQVEsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUUsR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUMxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLEdBQUc7QUFDSCxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDM0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQixHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixJQUFJO0FBQ0osUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQUU7QUFDNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckIsSUFBSTtBQUNKLFFBQU87QUFDUCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxhQUFhO0FBQ2IsR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUMzQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixJQUFJO0FBQ0osUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQUU7QUFDNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckIsSUFBSTtBQUNKLFFBQU87QUFDUCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJO0FBQ0osR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEIsR0FBRyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEVBQUU7QUFDdkMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQixJQUFJO0FBQ0osR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFD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Q0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLEdBQUc7QUFDSCxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDM0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUMxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hJLEdBQUc7QUFDSCxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDMUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEosR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMzQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxHQUFHO0FBQ0gsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakssR0FBRztBQUNILE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMzQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMs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 diff --git a/.obsidian/plugins/buttons/manifest.json b/.obsidian/plugins/buttons/manifest.json new file mode 100644 index 00000000..373bb2df --- /dev/null +++ b/.obsidian/plugins/buttons/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "buttons", + "name": "Buttons", + "description": "Create Buttons in your Obsidian notes to run commands, open links, and insert templates", + "version": "0.4.15", + "author": "shabegom", + "authorUrl": "https://shbgm.ca", + "isDesktopOnly": false, + "minAppVersion": "0.12.8" +} diff --git a/.obsidian/plugins/buttons/styles.css b/.obsidian/plugins/buttons/styles.css new file mode 100644 index 00000000..58fc929b --- /dev/null +++ b/.obsidian/plugins/buttons/styles.css @@ -0,0 +1,142 @@ +/* @settings + +name: Buttons +id: buttons-styles +settings: + - + id: button-background + title: Background + type: variable-themed-color + format: hex + opacity: false + default-light: '#f5f6f8' + default-dark: '#1b1b1b' + - + id: button-text + title: Text + type: variable-themed-color + format: hex + opacity: false + default-light: '#1b1b1b' + default-dark: '#f5f6f8' + - + id: button-border + title: Border + type: variable-themed-color + format: hex + opacity: false + default-light: '#7a9486' + default-dark: '#84a83a' + - + id: button-box-shadow + title: Box Shadow + type: variable-themed-color + format: rgb + opacity: true + default-light: '#1b1b1b' + default-dark: '#f5f6f8' + - + id: button-border-radius + title: Border Radius + type: variable-number + format: px + default: 5 + - + id: button-size + title: Font Size + type: variable-number + format: em + default: 1 + +*/ + +.block-language-button { + padding: 5px; +} + +.button-default { + border: 0.5px solid var(--button-border, #7a9486); + border-radius: var(--button-border-radius, 5px); + background-color: var(--button-background); + padding: 10px 30px; + color: var(--button-text); + text-decoration: none; + font-size: var(--button-size); + margin: 0 5px; + box-shadow: 0 1px 3px var(--button-box-shadow, rgba(0, 0, 0, 0.12)), + 0 1px 2px var(--button-box-shadow, rgba(0, 0, 0, 0.24)); + transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1); +} + +.button-default:hover { + z-index: 100; + box-shadow: 0 4px 4px var(--button-box-shadow, rgba(0, 0, 0, 0.25)), + 0 10px 10px var(--button-box-shadow, rgba(0, 0, 0, 0.22)); + transform: translate3d(0px, -1.5px, 0px); + background-color: var(--button-background); +} + +.theme-dark .button-default { + border: 0.5px solid var(--button-border, #84a83a); +} + +.theme-dark .button-default:hover { + z-index: 100; + box-shadow: 0 4px 4px var(--button-box-shadow, rgba(210, 210, 210, 0.25)), + 0 10px 10px var(--button-box-shadow, rgba(210, 210, 210, 0.22)); + transform: translate3d(0px, -1.5px, 0px); +} + +.blue { + background: #76b3fa; + color: black; +} + +.red { + background: red; +} + +.green { + background: green; +} + +.yellow { + background: yellow; + color: black; +} + +.purple { + background: #725585; +} + +.blue:hover { + background: #76b3fa; + color: black; +} + +.red:hover { + background: red; +} + +.green:hover { + background: green; +} + +.yellow:hover { + background: yellow; + color: black; +} + +.purple:hover { + background: #725585; +} + +.button-maker { + max-width: 35rem; + width: 35rem; + overflow-y: auto; + max-height: 30rem; + padding-left: 0.5rem; + padding-right: 0.5rem; + overflow-x: hidden; +} diff --git a/.obsidian/plugins/dataview/data.json b/.obsidian/plugins/dataview/data.json new file mode 100644 index 00000000..341c9509 --- /dev/null +++ b/.obsidian/plugins/dataview/data.json @@ -0,0 +1,11 @@ +{ + "renderNullAs": "\\-", + "warnOnEmptyResult": true, + "refreshInterval": 1000, + "defaultDateFormat": "dd/MM/yyyy", + "defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy", + "inlineQueryPrefix": "=", + "inlineJsQueryPrefix": "$=", + "enableDataviewJs": true, + "schemaVersion": 1 +} \ No newline at end of file diff --git a/.obsidian/plugins/dataview/main.js b/.obsidian/plugins/dataview/main.js new file mode 100644 index 00000000..47c4b892 --- /dev/null +++ b/.obsidian/plugins/dataview/main.js @@ -0,0 +1,13106 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +var luxon = {}; + +Object.defineProperty(luxon, '__esModule', { value: true }); + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + + _setPrototypeOf(subClass, superClass); +} + +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } +} + +function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); +} + +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} + +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); +} + +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _createForOfIteratorHelperLoose(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (it) return (it = it.call(o)).next.bind(it); + + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + } + + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +// these aren't really private, but nor are they really useful to document + +/** + * @private + */ +var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + + return LuxonError; +}( /*#__PURE__*/_wrapNativeSuper(Error)); +/** + * @private + */ + + +var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + + return InvalidDateTimeError; +}(LuxonError); +/** + * @private + */ + +var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + + return InvalidIntervalError; +}(LuxonError); +/** + * @private + */ + +var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + + return InvalidDurationError; +}(LuxonError); +/** + * @private + */ + +var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + + return ConflictingSpecificationError; +}(LuxonError); +/** + * @private + */ + +var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + + return InvalidUnitError; +}(LuxonError); +/** + * @private + */ + +var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + + return InvalidArgumentError; +}(LuxonError); +/** + * @private + */ + +var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + + return ZoneIsAbstractError; +}(LuxonError); + +/** + * @private + */ +var n = "numeric", + s = "short", + l = "long"; +var DATE_SHORT = { + year: n, + month: n, + day: n +}; +var DATE_MED = { + year: n, + month: s, + day: n +}; +var DATE_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s +}; +var DATE_FULL = { + year: n, + month: l, + day: n +}; +var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l +}; +var TIME_SIMPLE = { + hour: n, + minute: n +}; +var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n +}; +var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s +}; +var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l +}; +var TIME_24_SIMPLE = { + hour: n, + minute: n, + hourCycle: "h23" +}; +var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hourCycle: "h23" +}; +var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: s +}; +var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hourCycle: "h23", + timeZoneName: l +}; +var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n +}; +var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n +}; +var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n +}; +var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n +}; +var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n +}; +var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s +}; +var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s +}; +var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l +}; +var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l +}; + +/** + * @private + */ +// TYPES + +function isUndefined(o) { + return typeof o === "undefined"; +} +function isNumber(o) { + return typeof o === "number"; +} +function isInteger(o) { + return typeof o === "number" && o % 1 === 0; +} +function isString(o) { + return typeof o === "string"; +} +function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; +} // CAPABILITIES + +function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } +} // OBJECTS AND ARRAYS + +function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; +} +function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; +} +function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); +} +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} // NUMBERS AND STRINGS + +function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; +} // x % n but takes the sign of n instead of x + +function floorMod(x, n) { + return x - n * Math.floor(x / n); +} +function padStart(input, n) { + if (n === void 0) { + n = 2; + } + + var minus = input < 0 ? "-" : ""; + var target = minus ? input * -1 : input; + var result; + + if (target.toString().length < n) { + result = ("0".repeat(n) + target).slice(-n); + } else { + result = target.toString(); + } + + return "" + minus + result; +} +function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } +} +function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } +} +function roundTo(number, digits, towardZero) { + if (towardZero === void 0) { + towardZero = false; + } + + var factor = Math.pow(10, digits), + rounder = towardZero ? Math.trunc : Math.round; + return rounder(number * factor) / factor; +} // DATE BASICS + +function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); +} +function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; +} +function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } +} // covert a calendar object to a local timestamp (epoch, but with the offset baked in) + +function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + return +d; +} +function weeksInWeekYear(weekYear) { + var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, + last = weekYear - 1, + p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; + return p1 === 4 || p2 === 3 ? 53 : 52; +} +function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > 60 ? 1900 + year : 2000 + year; +} // PARSING + +function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + + var date = new Date(ts), + intlOpts = { + hourCycle: "h23", + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + + if (timeZone) { + intlOpts.timeZone = timeZone; + } + + var modified = _extends({ + timeZoneName: offsetFormat + }, intlOpts); + + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; +} // signedOffset('-5', '30') -> -330 + +function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0 + + if (Number.isNaN(offHour)) { + offHour = 0; + } + + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; +} // COERCION + +function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; +} +function normalizeObject(obj, normalizer) { + var normalized = {}; + + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + + return normalized; +} +function formatOffset(offset, format) { + var hours = Math.trunc(Math.abs(offset / 60)), + minutes = Math.trunc(Math.abs(offset % 60)), + sign = offset >= 0 ? "+" : "-"; + + switch (format) { + case "short": + return "" + sign + padStart(hours, 2) + ":" + padStart(minutes, 2); + + case "narrow": + return "" + sign + hours + (minutes > 0 ? ":" + minutes : ""); + + case "techie": + return "" + sign + padStart(hours, 2) + padStart(minutes, 2); + + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } +} +function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); +} +var ianaRegex = /[A-Za-z_+-]{1,256}(:?\/[A-Za-z_+-]{1,256}(\/[A-Za-z_+-]{1,256})?)?/; + +/** + * @private + */ + + +var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; +var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; +var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; +function months(length) { + switch (length) { + case "narrow": + return [].concat(monthsNarrow); + + case "short": + return [].concat(monthsShort); + + case "long": + return [].concat(monthsLong); + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + + default: + return null; + } +} +var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; +var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; +var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; +function weekdays(length) { + switch (length) { + case "narrow": + return [].concat(weekdaysNarrow); + + case "short": + return [].concat(weekdaysShort); + + case "long": + return [].concat(weekdaysLong); + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + + default: + return null; + } +} +var meridiems = ["AM", "PM"]; +var erasLong = ["Before Christ", "Anno Domini"]; +var erasShort = ["BC", "AD"]; +var erasNarrow = ["B", "A"]; +function eras(length) { + switch (length) { + case "narrow": + return [].concat(erasNarrow); + + case "short": + return [].concat(erasShort); + + case "long": + return [].concat(erasLong); + + default: + return null; + } +} +function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; +} +function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; +} +function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; +} +function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; +} +function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + + if (narrow === void 0) { + narrow = false; + } + + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + + case 0: + return isDay ? "today" : "this " + units[unit][0]; + + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; +} + +function stringifyTokens(splits, tokenToString) { + var s = ""; + + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + + return s; +} + +var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS +}; +/** + * @private + */ + +var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + + return new Formatter(locale, opts); + }; + + Formatter.parseFormat = function parseFormat(fmt) { + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + + if (c === "'") { + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: false, + val: currentFull + }); + } + + currentFull = c; + current = c; + } + } + + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + return splits; + }; + + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + + var _proto = Formatter.prototype; + + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + + var df = this.systemLoc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTime = function formatDateTime(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.formatToParts(); + }; + + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, _extends({}, this.opts, opts)); + return df.resolvedOptions(); + }; + + _proto.num = function num(n, p) { + if (p === void 0) { + p = 0; + } + + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + + var opts = _extends({}, this.opts); + + if (p > 0) { + opts.padTo = p; + } + + return this.loc.numberFormatter(opts).format(n); + }; + + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory", + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hourCycle: "h12" + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: http://cldr.unicode.org/translation/date-time-1/date-time#TOC-Standalone-vs.-Format-Styles + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + + case "u": // falls through + + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + + case "s": + return _this.num(dt.second); + + case "ss": + return _this.num(dt.second, 2); + // minutes + + case "m": + return _this.num(dt.minute); + + case "mm": + return _this.num(dt.minute, 2); + // hours + + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + + case "H": + return _this.num(dt.hour); + + case "HH": + return _this.num(dt.hour, 2); + // offset + + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + + case "a": + return meridiem(); + // dates + + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + + case "c": + // like 1 + return _this.num(dt.weekday); + + case "ccc": + // like 'Tues' + return weekday("short", true); + + case "cccc": + // like 'Tuesday' + return weekday("long", true); + + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + + case "E": + // like 1 + return _this.num(dt.weekday); + + case "EEE": + // like 'Tues' + return weekday("short", false); + + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + + case "LLL": + // like Jan + return month("short", true); + + case "LLLL": + // like January + return month("long", true); + + case "LLLLL": + // like J + return month("narrow", true); + // months - format + + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + + case "MMM": + // like Jan + return month("short", false); + + case "MMMM": + // like January + return month("long", false); + + case "MMMMM": + // like J + return month("narrow", false); + // years + + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + + case "G": + // like AD + return era("short"); + + case "GG": + // like Anno Domini + return era("long"); + + case "GGGGG": + return era("narrow"); + + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + + case "kkkk": + return _this.num(dt.weekYear, 4); + + case "W": + return _this.num(dt.weekNumber); + + case "WW": + return _this.num(dt.weekNumber, 2); + + case "o": + return _this.num(dt.ordinal); + + case "ooo": + return _this.num(dt.ordinal, 3); + + case "q": + // like 1 + return _this.num(dt.quarter); + + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + + case "x": + return _this.num(dt.ts); + + default: + return maybeMacro(token); + } + }; + + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + return "hour"; + + case "d": + return "day"; + + case "M": + return "month"; + + case "y": + return "year"; + + default: + return null; + } + }, + tokenToString = function tokenToString(lildur) { + return function (token) { + var mapped = tokenToField(token); + + if (mapped) { + return _this2.num(lildur.get(mapped), token.length); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })); + + return stringifyTokens(tokens, tokenToString(collapsed)); + }; + + return Formatter; +}(); + +var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + + var _proto = Invalid.prototype; + + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + + return Invalid; +}(); + +/** + * @interface + */ + +var Zone = /*#__PURE__*/function () { + function Zone() {} + + var _proto = Zone.prototype; + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + ; + + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + ; + + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + ; + + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + ; + + _createClass(Zone, [{ + key: "type", + get: + /** + * The type of zone + * @abstract + * @type {string} + */ + function get() { + throw new ZoneIsAbstractError(); + } + /** + * The name of this zone. + * @abstract + * @type {string} + */ + + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + + }, { + key: "isUniversal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + + return Zone; +}(); + +var singleton$1 = null; +/** + * Represents the local zone for this JavaScript environment. + * @implements {Zone} + */ + +var SystemZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(SystemZone, _Zone); + + function SystemZone() { + return _Zone.apply(this, arguments) || this; + } + + var _proto = SystemZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "system"; + } + /** @override **/ + ; + + _createClass(SystemZone, [{ + key: "type", + get: + /** @override **/ + function get() { + return "system"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } + /** @override **/ + + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + get: + /** + * Get a singleton instance of the local zone + * @return {SystemZone} + */ + function get() { + if (singleton$1 === null) { + singleton$1 = new SystemZone(); + } + + return singleton$1; + } + }]); + + return SystemZone; +}(Zone); + +var matchingRegex = RegExp("^" + ianaRegex.source + "$"); +var dtfCache = {}; + +function makeDTF(zone) { + if (!dtfCache[zone]) { + dtfCache[zone] = new Intl.DateTimeFormat("en-US", { + hourCycle: "h23", + timeZone: zone, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit" + }); + } + + return dtfCache[zone]; +} + +var typeToPos = { + year: 0, + month: 1, + day: 2, + hour: 3, + minute: 4, + second: 5 +}; + +function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fHour = parsed[4], + fMinute = parsed[5], + fSecond = parsed[6]; + return [fYear, fMonth, fDay, fHour, fMinute, fSecond]; +} + +function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date), + filled = []; + + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value, + pos = typeToPos[type]; + + if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + + return filled; +} + +var ianaZoneCache = {}; +/** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ + +var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + if (!ianaZoneCache[name]) { + ianaZoneCache[name] = new IANAZone(name); + } + + return ianaZoneCache[name]; + } + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + ; + + IANAZone.resetCache = function resetCache() { + ianaZoneCache = {}; + dtfCache = {}; + } + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Fantasia/Castle") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return !!(s && s.match(matchingRegex)); + } + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidZone = function isValidZone(zone) { + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + } // Etc/GMT+8 -> -480 + + /** @ignore */ + ; + + IANAZone.parseGMTOffset = function parseGMTOffset(specifier) { + if (specifier) { + var match = specifier.match(/^Etc\/GMT(0|[+-]\d{1,2})$/i); + + if (match) { + return -60 * parseInt(match[1]); + } + } + + return null; + }; + + function IANAZone(name) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.zoneName = name; + /** @private **/ + + _this.valid = IANAZone.isValidZone(name); + return _this; + } + /** @override **/ + + + var _proto = IANAZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + var date = new Date(ts); + if (isNaN(date)) return NaN; + + var dtf = makeDTF(this.name), + _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + hour = _ref2[3], + minute = _ref2[4], + second = _ref2[5]; + + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + /** @override **/ + ; + + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + + return IANAZone; +}(Zone); + +var singleton = null; +/** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ + +var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + ; + + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + + return null; + }; + + function FixedOffsetZone(offset) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.fixed = offset; + return _this; + } + /** @override **/ + + + var _proto = FixedOffsetZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return this.name; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + /** @override **/ + ; + + /** @override **/ + _proto.offset = function offset() { + return this.fixed; + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + /** @override **/ + ; + + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + }, { + key: "isUniversal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "utcInstance", + get: + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + function get() { + if (singleton === null) { + singleton = new FixedOffsetZone(0); + } + + return singleton; + } + }]); + + return FixedOffsetZone; +}(Zone); + +/** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ + +var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + + function InvalidZone(zoneName) { + var _this; + + _this = _Zone.call(this) || this; + /** @private */ + + _this.zoneName = zoneName; + return _this; + } + /** @override **/ + + + var _proto = InvalidZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset() { + return ""; + } + /** @override **/ + ; + + _proto.offset = function offset() { + return NaN; + } + /** @override **/ + ; + + _proto.equals = function equals() { + return false; + } + /** @override **/ + ; + + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "isUniversal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + + return InvalidZone; +}(Zone); + +/** + * @private + */ +function normalizeZone(input, defaultZone) { + var offset; + + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "local" || lowered === "system") return defaultZone;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) { + // handle Etc/GMT-4, which V8 chokes on + return FixedOffsetZone.instance(offset); + } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && input.offset && typeof input.offset === "number") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } +} + +var now = function now() { + return Date.now(); +}, + defaultZone = "system", + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + throwOnInvalid; +/** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ + + +var Settings = /*#__PURE__*/function () { + function Settings() {} + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + }; + + _createClass(Settings, null, [{ + key: "now", + get: + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + function get() { + return now; + } + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + , + set: function set(n) { + now = n; + } + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * Use the value "system" to reset this value to the system's time zone. + * @type {string} + */ + + }, { + key: "defaultZone", + get: + /** + * Get the default time zone object currently used to create DateTimes. Does not affect existing instances. + * The default value is the system's time zone (the one set on the machine that runs this code). + * @type {Zone} + */ + function get() { + return normalizeZone(defaultZone, SystemZone.instance); + } + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(zone) { + defaultZone = zone; + } + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(locale) { + defaultLocale = locale; + } + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + , + set: function set(t) { + throwOnInvalid = t; + } + }]); + + return Settings; +}(); + +var _excluded = ["base"]; +var intlDTCache = {}; + +function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache[key]; + + if (!dtf) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache[key] = dtf; + } + + return dtf; +} + +var intlNumCache = {}; + +function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache[key]; + + if (!inf) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache[key] = inf; + } + + return inf; +} + +var intlRelCache = {}; + +function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var _opts = opts; + _opts.base; + var cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, _excluded); // exclude `base` from the options + + + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache[key]; + + if (!inf) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache[key] = inf; + } + + return inf; +} + +var sysLocaleCache = null; + +function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else { + sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale; + return sysLocaleCache; + } +} + +function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + var uIndex = localeStr.indexOf("-u-"); + + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var smaller = localeStr.substring(0, uIndex); + + try { + options = getCachedDTF(localeStr).resolvedOptions(); + } catch (e) { + options = getCachedDTF(smaller).resolvedOptions(); + } + + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it + + return [smaller, numberingSystem, calendar]; + } +} + +function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (outputCalendar || numberingSystem) { + localeStr += "-u"; + + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + + return localeStr; + } else { + return localeStr; + } +} + +function mapMonths(f) { + var ms = []; + + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2016, i, 1); + ms.push(f(dt)); + } + + return ms; +} + +function mapWeekdays(f) { + var ms = []; + + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + + return ms; +} + +function listStuff(loc, length, defaultOK, englishFn, intlFn) { + var mode = loc.listingMode(defaultOK); + + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } +} + +function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn"; + } +} +/** + * @private + */ + + +var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + + if (!forceSimple) { + var intlOpts = { + useGrouping: false + }; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + + var _proto = PolyNumberFormatter.prototype; + + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + + return padStart(_fixed, this.padTo); + } + }; + + return PolyNumberFormatter; +}(); +/** + * @private + */ + + +var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + var z; + + if (dt.zone.isUniversal) { + // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like. + // That is why fixed-offset TZ is set to that unless it is: + // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT. + // 2. Unsupported by the browser: + // - some do not support Etc/ + // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata + var gmtOffset = -1 * (dt.offset / 60); + var offsetZ = gmtOffset >= 0 ? "Etc/GMT+" + gmtOffset : "Etc/GMT" + gmtOffset; + var isOffsetZoneSupported = IANAZone.isValidZone(offsetZ); + + if (dt.offset !== 0 && isOffsetZoneSupported) { + z = offsetZ; + this.dt = dt; + } else { + // Not all fixed-offset zones like Etc/+4:30 are present in tzdata. + // So we have to make do. Two cases: + // 1. The format options tell us to show the zone. We can't do that, so the best + // we can do is format the date in UTC. + // 2. The format options don't tell us to show the zone. Then we can adjust them + // the time and tell the formatter to show it to us in UTC, so that the time is right + // and the bad zone doesn't show up. + z = "UTC"; + + if (opts.timeZoneName) { + this.dt = dt; + } else { + this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000); + } + } + } else if (dt.zone.type === "system") { + this.dt = dt; + } else { + this.dt = dt; + z = dt.zone.name; + } + + var intlOpts = _extends({}, this.opts); + + if (z) { + intlOpts.timeZone = z; + } + + this.dtf = getCachedDTF(intl, intlOpts); + } + + var _proto2 = PolyDateFormatter.prototype; + + _proto2.format = function format() { + return this.dtf.format(this.dt.toJSDate()); + }; + + _proto2.formatToParts = function formatToParts() { + return this.dtf.formatToParts(this.dt.toJSDate()); + }; + + _proto2.resolvedOptions = function resolvedOptions() { + return this.dtf.resolvedOptions(); + }; + + return PolyDateFormatter; +}(); +/** + * @private + */ + + +var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = _extends({ + style: "long" + }, opts); + + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + + var _proto3 = PolyRelFormatter.prototype; + + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + + return PolyRelFormatter; +}(); +/** + * @private + */ + + +var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + }; + + Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + + var specifiedLocale = locale || Settings.defaultLocale; // the system locale is useful for human readable strings but annoying for parsing/formatting known formats + + var localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()); + var numberingSystemR = numberingSystem || Settings.defaultNumberingSystem; + var outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + }; + + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache = {}; + intlNumCache = {}; + intlRelCache = {}; + }; + + Locale.fromObject = function fromObject(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + outputCalendar = _ref.outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar); + }; + + function Locale(locale, numbering, outputCalendar, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + + var _proto4 = Locale.prototype; + + _proto4.listingMode = function listingMode(defaultOK) { + + var isActuallyEn = this.isEnglish(); + var hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + return isActuallyEn && hasNoWeirdness ? "en" : "intl"; + }; + + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false); + } + }; + + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(_extends({}, alts, { + defaultToEN: true + })); + }; + + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(_extends({}, alts, { + defaultToEN: false + })); + }; + + _proto4.months = function months$1(length, format, defaultOK) { + var _this = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, months, function () { + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this.monthsCache[formatStr][length]) { + _this.monthsCache[formatStr][length] = mapMonths(function (dt) { + return _this.extract(dt, intl, "month"); + }); + } + + return _this.monthsCache[formatStr][length]; + }); + }; + + _proto4.weekdays = function weekdays$1(length, format, defaultOK) { + var _this2 = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this2.weekdaysCache[formatStr][length]) { + _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this2.extract(dt, intl, "weekday"); + }); + } + + return _this2.weekdaysCache[formatStr][length]; + }); + }; + + _proto4.meridiems = function meridiems$1(defaultOK) { + var _this3 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, undefined, defaultOK, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this3.meridiemCache) { + var intl = { + hour: "numeric", + hourCycle: "h12" + }; + _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this3.extract(dt, intl, "dayperiod"); + }); + } + + return _this3.meridiemCache; + }); + }; + + _proto4.eras = function eras$1(length, defaultOK) { + var _this4 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, eras, function () { + var intl = { + era: length + }; // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + + if (!_this4.eraCache[length]) { + _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this4.extract(dt, intl, "era"); + }); + } + + return _this4.eraCache[length]; + }); + }; + + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us"); + }; + + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + + return this.fastNumbersCached; + } + }]); + + return Locale; +}(); + +/* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + +function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); +} + +function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + + return [_extends({}, mergedVals, val), mergedZone || zone, next]; + }, [{}, null, 1]).slice(0, 2); + }; +} + +function parse(s) { + if (s == null) { + return [null, null]; + } + + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + + if (m) { + return extractor(m); + } + } + + return [null, null]; +} + +function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + + return function (match, cursor) { + var ret = {}; + var i; + + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + + return [ret, null, cursor + i]; + }; +} // ISO and SQL parsing + + +var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/, + isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,30}))?)?)?/, + isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + offsetRegex.source + "?"), + isoTimeExtensionRegex = RegExp("(?:T" + isoTimeRegex.source + ")?"), + isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/, + isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/, + isoOrdinalRegex = /(\d{4})-?(\d{3})/, + extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"), + extractISOOrdinalData = simpleParse("year", "ordinal"), + sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/, + // dumbed-down version of the ISO one +sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"), + sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); + +function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); +} + +function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; +} + +function extractISOTime(match, cursor) { + var item = { + hours: int(match, cursor, 0), + minutes: int(match, cursor + 1, 0), + seconds: int(match, cursor + 2, 0), + milliseconds: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; +} + +function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; +} + +function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; +} // ISO time parsing + + +var isoTimeOnly = RegExp("^T?" + isoTimeBaseRegex.source + "$"); // ISO duration parsing + +var isoDuration = /^-?P(?:(?:(-?\d{1,9})Y)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})W)?(?:(-?\d{1,9})D)?(?:T(?:(-?\d{1,9})H)?(?:(-?\d{1,9})M)?(?:(-?\d{1,20})(?:[.,](-?\d{1,9}))?S)?)?)$/; + +function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + var negativeSeconds = secondStr && secondStr[0] === "-"; + + var maybeNegate = function maybeNegate(num, force) { + if (force === void 0) { + force = false; + } + + return num !== undefined && (force || num && hasNegativePrefix) ? -num : num; + }; + + return [{ + years: maybeNegate(parseInteger(yearStr)), + months: maybeNegate(parseInteger(monthStr)), + weeks: maybeNegate(parseInteger(weekStr)), + days: maybeNegate(parseInteger(dayStr)), + hours: maybeNegate(parseInteger(hourStr)), + minutes: maybeNegate(parseInteger(minuteStr)), + seconds: maybeNegate(parseInteger(secondStr), secondStr === "-0"), + milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds) + }]; +} // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York +// and not just that we're in -240 *right now*. But since I don't think these are used that often +// I'm just going to ignore that + + +var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 +}; + +function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + + return result; +} // RFC 2822/5322 + + +var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + +function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + + return [result, new FixedOffsetZone(offset)]; +} + +function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); +} // http date + + +var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + +function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; +} + +var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); +var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); +var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); +var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); +var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset); +var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset); +var extractISOOrdinalDateAndTime = combineExtractors(extractISOOrdinalData, extractISOTime, extractISOOffset); +var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset); +/** + * @private + */ + +function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); +} +function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); +} +function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); +} +function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); +} +var extractISOTimeOnly = combineExtractors(extractISOTime); +function parseISOTimeOnly(s) { + return parse(s, [isoTimeOnly, extractISOTimeOnly]); +} +var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); +var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); +var extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); +var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); +function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); +} + +var INVALID$2 = "Invalid Duration"; // unit conversion constants + +var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } +}, + casualMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + seconds: 91 * 24 * 60 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } +}, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = _extends({ + years: { + quarters: 4, + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } +}, lowOrderMatrix); // units ordered by size + + +var orderedUnits$1 = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; +var reverseUnits = orderedUnits$1.slice(0).reverse(); // clone really means "create another instance just like this one, but with these changes" + +function clone$1(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + + // deep merge for vals + var conf = { + values: clear ? alts.values : _extends({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy + }; + return new Duration(conf); +} + +function antiTrunc(n) { + return n < 0 ? Math.floor(n) : Math.ceil(n); +} // NB: mutates parameters + + +function convert(matrix, fromMap, fromUnit, toMap, toUnit) { + var conv = matrix[toUnit][fromUnit], + raw = fromMap[fromUnit] / conv, + sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]), + // ok, so this is wild, but see the matrix in the tests + added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw); + toMap[toUnit] += added; + fromMap[fromUnit] -= added * conv; +} // NB: mutates parameters + + +function normalizeValues(matrix, vals) { + reverseUnits.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + convert(matrix, vals, previous, vals, current); + } + + return current; + } else { + return previous; + } + }, null); +} +/** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration#years}, {@link Duration.months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors. + * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ + + +var Duration = /*#__PURE__*/function () { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + /** + * @access private + */ + + this.values = config.values; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.matrix = accurate ? accurateMatrix : casualMatrix; + /** + * @access private + */ + + this.isLuxonDuration = true; + } + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + + + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject({ + milliseconds: count + }, opts); + } + /** + * Create a Duration from a JavaScript object with keys like 'years' and 'hours'. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {Object} [opts=[]] - options for creating this Duration + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + Duration.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit), + loc: Locale.fromObject(opts), + conversionAccuracy: opts.conversionAccuracy + }); + } + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + ; + + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + /** + * Create a Duration from an ISO 8601 time string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 } + * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 } + * @return {Duration} + */ + ; + + Duration.fromISOTime = function fromISOTime(text, opts) { + var _parseISOTimeOnly = parseISOTimeOnly(text), + parsed = _parseISOTimeOnly[0]; + + if (parsed) { + return Duration.fromObject(parsed, opts); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + ; + + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + /** + * @private + */ + ; + + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + ; + + var _proto = Duration.prototype; + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = _extends({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID$2; + } + /** + * Returns a JavaScript object with this Duration's values. + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject() { + if (!this.isValid) return {}; + return _extends({}, this.values); + } + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + ; + + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + /** + * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day. + * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours. + * @see https://en.wikipedia.org/wiki/ISO_8601#Times + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000' + * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000' + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return null; + var millis = this.toMillis(); + if (millis < 0 || millis >= 86400000) return null; + opts = _extends({ + suppressMilliseconds: false, + suppressSeconds: false, + includePrefix: false, + format: "extended" + }, opts); + var value = this.shiftTo("hours", "minutes", "seconds", "milliseconds"); + var fmt = opts.format === "basic" ? "hhmm" : "hh:mm"; + + if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) { + fmt += opts.format === "basic" ? "ss" : ":ss"; + + if (!opts.suppressMilliseconds || value.milliseconds !== 0) { + fmt += ".SSS"; + } + } + + var str = value.toFormat(fmt); + + if (opts.includePrefix) { + str = "T" + str; + } + + return str; + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.toISO(); + } + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + ; + + _proto.toMillis = function toMillis() { + return this.as("milliseconds"); + } + /** + * Returns an milliseconds value of this Duration. Alias of {@link toMillis} + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration), + result = {}; + + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) { + var k = _step.value; + + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + + return clone$1(this, { + values: result + }, true); + } + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration); + return this.plus(dur.negate()); + } + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + ; + + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + + for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) { + var k = _Object$keys[_i]; + result[k] = asNumber(fn(this.values[k], k)); + } + + return clone$1(this, { + values: result + }, true); + } + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3 + * @return {number} + */ + ; + + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + + var mixed = _extends({}, this.values, normalizeObject(values, Duration.normalizeUnit)); + + return clone$1(this, { + values: mixed + }); + } + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + ; + + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }), + opts = { + loc: loc + }; + + if (conversionAccuracy) { + opts.conversionAccuracy = conversionAccuracy; + } + + return clone$1(this, opts); + } + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + ; + + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + /** + * Reduce this Duration to its canonical representation in its current units. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @return {Duration} + */ + ; + + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone$1(this, { + values: vals + }, true); + } + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + ; + + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + + if (!this.isValid) return this; + + if (units.length === 0) { + return this; + } + + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + + for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits$1), _step2; !(_step2 = _iterator2()).done;) { + var k = _step2.value; + + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; // anything we haven't boiled down yet should get boiled to this unit + + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } // plus anything that's already in this unit + + + if (isNumber(vals[k])) { + own += vals[k]; + } + + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = own - i; // we'd like to absorb these fractions in another unit + // plus anything further down the chain that should be rolled up in to this + + for (var down in vals) { + if (orderedUnits$1.indexOf(down) > orderedUnits$1.indexOf(k)) { + convert(this.matrix, vals, down, built, k); + } + } // otherwise, keep it in the wings to boil it later + + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + + + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + + return clone$1(this, { + values: built + }, true).normalize(); + } + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + ; + + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + + for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) { + var k = _Object$keys2[_i2]; + negated[k] = -this.values[k]; + } + + return clone$1(this, { + values: negated + }, true); + } + /** + * Get the years. + * @type {number} + */ + ; + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + if (!this.loc.equals(other.loc)) { + return false; + } + + function eq(v1, v2) { + // Consider 0 and undefined as equal + if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0; + return v1 === v2; + } + + for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits$1), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + + if (!eq(this.values[u], other.values[u])) { + return false; + } + } + + return true; + }; + + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + /** + * Get the quarters. + * @type {number} + */ + + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + /** + * Get the months. + * @type {number} + */ + + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + /** + * Get the weeks + * @type {number} + */ + + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + /** + * Get the days. + * @type {number} + */ + + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + /** + * Get the hours. + * @type {number} + */ + + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + /** + * Get the minutes. + * @type {number} + */ + + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + /** + * Get the seconds. + * @return {number} + */ + + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + /** + * Get the milliseconds. + * @return {number} + */ + + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Duration; +}(); +function friendlyDuration(durationish) { + if (isNumber(durationish)) { + return Duration.fromMillis(durationish); + } else if (Duration.isDuration(durationish)) { + return durationish; + } else if (typeof durationish === "object") { + return Duration.fromObject(durationish); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationish + " of type " + typeof durationish); + } +} + +var INVALID$1 = "Invalid Interval"; // checks if the start is equal to or before the end + +function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } +} +/** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}. + * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval#merge}, {@link Interval#xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}. + * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs} + * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}. + */ + + +var Interval = /*#__PURE__*/function () { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + + this.e = config.end; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.isLuxonInterval = true; + } + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + + + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + ; + + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.after = function after(start, duration) { + var dur = friendlyDuration(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.before = function before(end, duration) { + var dur = friendlyDuration(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + ; + + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + + if (s && e) { + var start, startIsValid; + + try { + start = DateTime.fromISO(s, opts); + startIsValid = start.isValid; + } catch (e) { + startIsValid = false; + } + + var end, endIsValid; + + try { + end = DateTime.fromISO(e, opts); + endIsValid = end.isValid; + } catch (e) { + endIsValid = false; + } + + if (startIsValid && endIsValid) { + return Interval.fromDateTimes(start, end); + } + + if (startIsValid) { + var dur = Duration.fromISO(e, opts); + + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (endIsValid) { + var _dur = Duration.fromISO(s, opts); + + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + /** + * Returns the start of the Interval + * @type {DateTime} + */ + ; + + var _proto = Interval.prototype; + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @return {number} + */ + ; + + _proto.count = function count(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (!this.isValid) return NaN; + var start = this.start.startOf(unit), + end = this.end.startOf(unit); + return Math.floor(end.diff(start, unit).get(unit)) + 1; + } + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false; + } + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + ; + + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + ; + + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + /** + * Split this Interval at each of the specified DateTimes + * @param {...DateTime} dateTimes - the unit of time to count. + * @return {Array} + */ + ; + + _proto.splitAt = function splitAt() { + var _this = this; + + if (!this.isValid) return []; + + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(), + results = []; + var s = this.s, + i = 0; + + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + + return results; + } + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {Array} + */ + ; + + _proto.splitBy = function splitBy(duration) { + var dur = friendlyDuration(duration); + + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + + var s = this.s, + idx = 1, + next; + var results = []; + + while (s < this.e) { + var added = this.start.plus(dur.mapUnits(function (x) { + return x * idx; + })); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + idx += 1; + } + + return results; + } + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {Array} + */ + ; + + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + /** + * Return whether this Interval engulfs the start and end of the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + return this.s.equals(other.s) && this.e.equals(other.e); + } + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + + if (s >= e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + /** + * Merge an array of Intervals into a equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * @param {Array} intervals + * @return {Array} + */ + ; + + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + + if (final) { + found.push(final); + } + + return found; + } + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {Array} intervals + * @return {Array} + */ + ; + + Interval.xor = function xor(intervals) { + var _Array$prototype; + + var start = null, + currentCount = 0; + + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + + start = null; + } + } + + return Interval.merge(results); + } + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {Array} + */ + ; + + _proto.difference = function difference() { + var _this2 = this; + + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime#toISO} + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + ; + + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime.toISO} + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + /** + * Returns a string representation of this Interval formatted according to the specified format string. + * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details. + * @param {Object} opts - options + * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + ; + + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + + return this.e.diff(this.s, unit, opts); + } + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + ; + + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + /** + * Returns the end of the Interval + * @type {DateTime} + */ + + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Interval; +}(); + +/** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ + +var Info = /*#__PURE__*/function () { + function Info() {} + + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + + var proto = DateTime.now().setZone(zone).set({ + month: 12 + }); + return !zone.isUniversal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + ; + + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone); + } + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone.isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + ; + + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> 'ÙĄ' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'RabiÊ» I' + * @return {Array} + */ + ; + + Info.months = function months(length, _temp) { + if (length === void 0) { + length = "long"; + } + + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$numberingSystem = _ref.numberingSystem, + numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem, + _ref$locObj = _ref.locObj, + locObj = _ref$locObj === void 0 ? null : _ref$locObj, + _ref$outputCalendar = _ref.outputCalendar, + outputCalendar = _ref$outputCalendar === void 0 ? "gregory" : _ref$outputCalendar; + + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length); + } + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link Info#months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {Array} + */ + ; + + Info.monthsFormat = function monthsFormat(length, _temp2) { + if (length === void 0) { + length = "long"; + } + + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$numberingSystem = _ref2.numberingSystem, + numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem, + _ref2$locObj = _ref2.locObj, + locObj = _ref2$locObj === void 0 ? null : _ref2$locObj, + _ref2$outputCalendar = _ref2.outputCalendar, + outputCalendar = _ref2$outputCalendar === void 0 ? "gregory" : _ref2$outputCalendar; + + return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true); + } + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the weekday representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'Ű§Ù„Ű§Ű«Ù†ÙŠÙ†' + * @return {Array} + */ + ; + + Info.weekdays = function weekdays(length, _temp3) { + if (length === void 0) { + length = "long"; + } + + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$numberingSystem = _ref3.numberingSystem, + numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem, + _ref3$locObj = _ref3.locObj, + locObj = _ref3$locObj === void 0 ? null : _ref3$locObj; + + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length); + } + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link Info#weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.locObj=null] - an existing locale object to use + * @return {Array} + */ + ; + + Info.weekdaysFormat = function weekdaysFormat(length, _temp4) { + if (length === void 0) { + length = "long"; + } + + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem, + _ref4$locObj = _ref4.locObj, + locObj = _ref4$locObj === void 0 ? null : _ref4$locObj; + + return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true); + } + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနကá€ș', 'ညနေ' ] + * @return {Array} + */ + ; + + Info.meridiems = function meridiems(_temp5) { + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale; + + return Locale.create(locale).meridiems(); + } + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant JĂ©sus-Christ', 'aprĂšs JĂ©sus-Christ' ] + * @return {Array} + */ + ; + + Info.eras = function eras(length, _temp6) { + if (length === void 0) { + length = "short"; + } + + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale; + + return Locale.create(locale, null, "gregory").eras(length); + } + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case. + * Keys: + * * `relative`: whether this environment supports relative time formatting + * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false } + * @return {Object} + */ + ; + + Info.features = function features() { + return { + relative: hasRelative() + }; + }; + + return Info; +}(); + +function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + + return Math.floor(Duration.fromMillis(ms).as("days")); +} + +function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["quarters", function (a, b) { + return b.quarter - a.quarter; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var lowestOrder, highWater; + + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + + if (units.indexOf(unit) >= 0) { + var _cursor$plus; + + lowestOrder = unit; + var delta = differ(cursor, later); + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus)); + + if (highWater > later) { + var _cursor$plus2; + + cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2)); + delta -= 1; + } else { + cursor = highWater; + } + + results[unit] = delta; + } + } + + return [cursor, results, highWater, lowestOrder]; +} + +function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus3; + + highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3)); + } + + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + + var duration = Duration.fromObject(results, opts); + + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } +} + +var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|侀|äșŒ|侉|曛|äș”|慭|䞃|ć…«|äč]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" +}; +var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] +}; +var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); +function parseDigits(str) { + var value = parseInt(str, 10); + + if (isNaN(value)) { + value = ""; + + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + + return parseInt(value, 10); + } else { + return value; + } +} +function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + + if (append === void 0) { + append = ""; + } + + return new RegExp("" + numberingSystems[numberingSystem || "latn"] + append); +} + +var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + +function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; +} + +var NBSP = String.fromCharCode(160); +var spaceOrNBSP = "( |" + NBSP + ")"; +var spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, "g"); + +function fixListRegex(s) { + // make dots optional and also make them literal + // make space and non breakable space characters interchangeable + return s.replace(/\./g, "\\.?").replace(spaceOrNBSPRegExp, spaceOrNBSP); +} + +function stripInsensitivities(s) { + return s.replace(/\./g, "") // ignore dots that were made optional + .replace(spaceOrNBSPRegExp, " ") // interchange space and nbsp + .toLowerCase(); +} + +function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } +} + +function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; +} + +function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; +} + +function escapeToken(value) { + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); +} + +function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short", false), 0); + + case "GG": + return oneOf(loc.eras("long", false), 0); + // years + + case "y": + return intUnit(oneToSix); + + case "yy": + return intUnit(twoToFour, untruncateYear); + + case "yyyy": + return intUnit(four); + + case "yyyyy": + return intUnit(fourToSix); + + case "yyyyyy": + return intUnit(six); + // months + + case "M": + return intUnit(oneOrTwo); + + case "MM": + return intUnit(two); + + case "MMM": + return oneOf(loc.months("short", true, false), 1); + + case "MMMM": + return oneOf(loc.months("long", true, false), 1); + + case "L": + return intUnit(oneOrTwo); + + case "LL": + return intUnit(two); + + case "LLL": + return oneOf(loc.months("short", false, false), 1); + + case "LLLL": + return oneOf(loc.months("long", false, false), 1); + // dates + + case "d": + return intUnit(oneOrTwo); + + case "dd": + return intUnit(two); + // ordinals + + case "o": + return intUnit(oneToThree); + + case "ooo": + return intUnit(three); + // time + + case "HH": + return intUnit(two); + + case "H": + return intUnit(oneOrTwo); + + case "hh": + return intUnit(two); + + case "h": + return intUnit(oneOrTwo); + + case "mm": + return intUnit(two); + + case "m": + return intUnit(oneOrTwo); + + case "q": + return intUnit(oneOrTwo); + + case "qq": + return intUnit(two); + + case "s": + return intUnit(oneOrTwo); + + case "ss": + return intUnit(two); + + case "S": + return intUnit(oneToThree); + + case "SSS": + return intUnit(three); + + case "u": + return simple(oneToNine); + // meridiem + + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + + case "kkkk": + return intUnit(four); + + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + + case "W": + return intUnit(oneOrTwo); + + case "WW": + return intUnit(two); + // weekdays + + case "E": + case "c": + return intUnit(one); + + case "EEE": + return oneOf(loc.weekdays("short", false, false), 1); + + case "EEEE": + return oneOf(loc.weekdays("long", false, false), 1); + + case "ccc": + return oneOf(loc.weekdays("short", true, false), 1); + + case "cccc": + return oneOf(loc.weekdays("long", true, false), 1); + // offset/zone + + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + + default: + return literal(t); + } + }; + + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; +} + +var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour: { + numeric: "h", + "2-digit": "hh" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + } +}; + +function tokenForPart(part, locale, formatOpts) { + var type = part.type, + value = part.value; + + if (type === "literal") { + return { + literal: true, + val: value + }; + } + + var style = formatOpts[type]; + var val = partTypeStyleToTokenVal[type]; + + if (typeof val === "object") { + val = val[style]; + } + + if (val) { + return { + literal: false, + val: val + }; + } + + return undefined; +} + +function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; +} + +function match(input, regex, handlers) { + var matches = input.match(regex); + + if (matches) { + var all = {}; + var matchIndex = 1; + + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + + matchIndex += groups; + } + } + + return [matches, all]; + } else { + return [matches, {}]; + } +} + +function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + case "H": + return "hour"; + + case "d": + return "day"; + + case "o": + return "ordinal"; + + case "L": + case "M": + return "month"; + + case "y": + return "year"; + + case "E": + case "c": + return "weekday"; + + case "W": + return "weekNumber"; + + case "k": + return "weekYear"; + + case "q": + return "quarter"; + + default: + return null; + } + }; + + var zone; + + if (!isUndefined(matches.Z)) { + zone = new FixedOffsetZone(matches.Z); + } else if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } else { + zone = null; + } + + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + + if (f) { + r[f] = matches[k]; + } + + return r; + }, {}); + return [vals, zone]; +} + +var dummyDateTimeCache = null; + +function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + + return dummyDateTimeCache; +} + +function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + + if (!formatOpts) { + return token; + } + + var formatter = Formatter.create(locale, formatOpts); + var parts = formatter.formatDateTimeParts(getDummyDateTime()); + var tokens = parts.map(function (p) { + return tokenForPart(p, locale, formatOpts); + }); + + if (tokens.includes(undefined)) { + return token; + } + + return tokens; +} + +function expandMacroTokens(tokens, locale) { + var _Array$prototype; + + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); +} +/** + * @private + */ + + +function explainFromTokens(locale, input, format) { + var tokens = expandMacroTokens(Formatter.parseFormat(format), locale), + units = tokens.map(function (t) { + return unitForToken(t, locale); + }), + disqualifyingUnit = units.find(function (t) { + return t.invalidReason; + }); + + if (disqualifyingUnit) { + return { + input: input, + tokens: tokens, + invalidReason: disqualifyingUnit.invalidReason + }; + } else { + var _buildRegex = buildRegex(units), + regexString = _buildRegex[0], + handlers = _buildRegex[1], + regex = RegExp(regexString, "i"), + _match = match(input, regex, handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null], + result = _ref6[0], + zone = _ref6[1]; + + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + + return { + input: input, + tokens: tokens, + regex: regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone + }; + } +} +function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + invalidReason = _explainFromTokens.invalidReason; + + return [result, zone, invalidReason]; +} + +var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + +function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); +} + +function dayOfWeek(year, month, day) { + var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay(); + return js === 0 ? 7 : js; +} + +function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; +} + +function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; +} +/** + * @private + */ + + +function gregorianToWeek(gregObj) { + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = dayOfWeek(year, month, day); + var weekNumber = Math.floor((ordinal - weekday + 10) / 7), + weekYear; + + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear); + } else if (weekNumber > weeksInWeekYear(year)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + + return _extends({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); +} +function weekToGregorian(weekData) { + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, + year; + + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + + return _extends({ + year: year, + month: month, + day: day + }, timeObject(weekData)); +} +function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day; + var ordinal = computeOrdinal(year, month, day); + return _extends({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); +} +function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal; + + var _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + + return _extends({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); +} +function hasInvalidWeekData(obj) { + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), + validWeekday = integerBetween(obj.weekday, 1, 7); + + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.week); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; +} +function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; +} +function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; +} +function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; +} + +var INVALID = "Invalid DateTime"; +var MAX_DATE = 8.64e15; + +function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); +} // we cache week data on the DT object and this intermediates the cache + + +function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + + return dt.weekData; +} // clone really means, "make a new object with these modifications". all "setters" really use this +// to create a new object while only changing some of the properties + + +function clone(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(_extends({}, current, alts, { + old: current + })); +} // find the right offset a given local time. The o input is our guess, which determines which +// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + + +function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts + + var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done + + if (o === o2) { + return [utcGuess, o]; + } // If not, change the ts by the difference in the offset + + + utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done + + var o3 = tz.offset(utcGuess); + + if (o2 === o3) { + return [utcGuess, o2]; + } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + + + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; +} // convert an epoch timestamp into a calendar object with the given offset + + +function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; +} // convert a calendar object to a epoch timestamp + + +function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); +} // create a new DT instance by adding a duration, adjusting for DSTs + + +function adjustTime(inst, dur) { + var oPre = inst.o, + year = inst.c.year + Math.trunc(dur.years), + month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3, + c = _extends({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + Math.trunc(dur.days) + Math.trunc(dur.weeks) * 7 + }), + millisToAdd = Duration.fromObject({ + years: dur.years - Math.trunc(dur.years), + quarters: dur.quarters - Math.trunc(dur.quarters), + months: dur.months - Math.trunc(dur.months), + weeks: dur.weeks - Math.trunc(dur.weeks), + days: dur.days - Math.trunc(dur.days), + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + + if (millisToAdd !== 0) { + ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same + + o = inst.zone.offset(ts); + } + + return { + ts: ts, + o: o + }; +} // helper useful in turning the results of parsing into real dates +// by handling the zone options + + +function parseDataToDateTime(parsed, parsedZone, opts, format, text) { + var setZone = opts.setZone, + zone = opts.zone; + + if (parsed && Object.keys(parsed).length !== 0) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(parsed, _extends({}, opts, { + zone: interpretationZone + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } +} // if you want to output a technical format (e.g. RFC 2822), this helper +// helps handle the details + + +function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; +} // technical time formats (e.g. the time part of ISO 8601), take some options +// and this commonizes their handling + + +function toTechTimeFormat(dt, _ref) { + var _ref$suppressSeconds = _ref.suppressSeconds, + suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds, + _ref$suppressMillisec = _ref.suppressMilliseconds, + suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec, + includeOffset = _ref.includeOffset, + _ref$includePrefix = _ref.includePrefix, + includePrefix = _ref$includePrefix === void 0 ? false : _ref$includePrefix, + _ref$includeZone = _ref.includeZone, + includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone, + _ref$spaceZone = _ref.spaceZone, + spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone, + _ref$format = _ref.format, + format = _ref$format === void 0 ? "extended" : _ref$format; + var fmt = format === "basic" ? "HHmm" : "HH:mm"; + + if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) { + fmt += format === "basic" ? "ss" : ":ss"; + + if (!suppressMilliseconds || dt.millisecond !== 0) { + fmt += ".SSS"; + } + } + + if ((includeZone || includeOffset) && spaceZone) { + fmt += " "; + } + + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += format === "basic" ? "ZZZ" : "ZZ"; + } + + var str = toTechFormat(dt, fmt); + + if (includePrefix) { + str = "T" + str; + } + + return str; +} // defaults for unspecified units in the supported calendars + + +var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 +}, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 +}, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 +}; // Units in the supported calendars, sorted by bigness + +var orderedUnits = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; // standardize case and plurality in units + +function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; +} // this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. +// this is a dumbed down version of fromObject() that runs about 60% faster +// but doesn't do any validation, makes a bunch of assumptions about what units +// are present, and so on. + + +function quickDT(obj, opts) { + var zone = normalizeZone(opts.zone, Settings.defaultZone), + loc = Locale.fromObject(opts), + tsNow = Settings.now(); + var ts, o; // assume we have the higher-order units + + if (!isUndefined(obj.year)) { + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) { + var u = _step.value; + + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + + if (invalid) { + return DateTime.invalid(invalid); + } + + var offsetProvis = zone.offset(tsNow); + + var _objToTS = objToTS(obj, offsetProvis, zone); + + ts = _objToTS[0]; + o = _objToTS[1]; + } else { + ts = tsNow; + } + + return new DateTime({ + ts: ts, + zone: zone, + loc: loc, + o: o + }); +} + +function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, true); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + + for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) { + var unit = _step2.value; + var count = differ(unit); + + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + + return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]); +} + +function lastOpts(argList) { + var opts = {}, + args; + + if (argList.length > 0 && typeof argList[argList.length - 1] === "object") { + opts = argList[argList.length - 1]; + args = Array.from(argList).slice(0, argList.length - 1); + } else { + args = Array.from(argList); + } + + return [opts, args]; +} +/** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month}, + * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors. + * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ + + +var DateTime = /*#__PURE__*/function () { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + + if (unchanged) { + var _ref2 = [config.old.c, config.old.o]; + c = _ref2[0]; + o = _ref2[1]; + } else { + var ot = zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + /** + * @access private + */ + + + this._zone = zone; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.invalid = invalid; + /** + * @access private + */ + + this.weekData = null; + /** + * @access private + */ + + this.c = c; + /** + * @access private + */ + + this.o = o; + /** + * @access private + */ + + this.isLuxonDateTime = true; + } // CONSTRUCT + + /** + * Create a DateTime for the current instant, in the system's time zone. + * + * Use Settings to override these default values if needed. + * @example DateTime.now().toISO() //~> now in the ISO format + * @return {DateTime} + */ + + + DateTime.now = function now() { + return new DateTime({}); + } + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month, 1-indexed + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local({ zone: "America/New_York" }) //~> now, in US east coast time + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12, { locale: "fr" }) //~> 2017-03-12T00:00:00, with a French locale + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, { zone: "utc" }) //~> 2017-03-12T05:00:00, in UTC + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + ; + + DateTime.local = function local() { + var _lastOpts = lastOpts(arguments), + opts = _lastOpts[0], + args = _lastOpts[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @param {Object} options - configuration options for the DateTime + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: "fr" }) //~> 2017-03-12T05:45:00Z with a French locale + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: "fr" }) //~> 2017-03-12T05:45:10.765Z with a French locale + * @return {DateTime} + */ + ; + + DateTime.utc = function utc() { + var _lastOpts2 = lastOpts(arguments), + opts = _lastOpts2[0], + args = _lastOpts2[1], + year = args[0], + month = args[1], + day = args[2], + hour = args[3], + minute = args[4], + second = args[5], + millisecond = args[6]; + + opts.zone = FixedOffsetZone.utcInstance; + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, opts); + } + /** + * Create a DateTime from a JavaScript Date object. Uses the default zone. + * @param {Date} date - a JavaScript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + ; + + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + + var ts = isDate(date) ? date.valueOf() : NaN; + + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {Object} opts - options for creating this DateTime + * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @return {DateTime} + */ + ; + + DateTime.fromObject = function fromObject(obj, opts) { + if (opts === void 0) { + opts = {}; + } + + obj = obj || {}; + var zoneToUse = normalizeZone(opts.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + var tsNow = Settings.now(), + offsetProvis = zoneToUse.offset(tsNow), + normalized = normalizeObject(obj, normalizeUnit), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber, + loc = Locale.fromObject(opts); // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff + + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits; + defaultValues = defaultUnitValues; + } // set default values for missing stuff + + + var foundFirst = false; + + for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + var v = normalized[u]; + + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } // make sure the values we have are in range + + + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + + if (invalid) { + return DateTime.invalid(invalid); + } // compute the actual time + + + var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); // gregorian data + weekday serves only to validate + + + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + + return inst; + } + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance + * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + ; + + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + ; + + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + ; + + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens). + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + invalid = _parseFromTokens[2]; + + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text); + } + } + /** + * @deprecated use fromFormat instead + */ + ; + + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return DateTime.fromFormat(text, fmt, opts); + } + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + ; + + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + ; + + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + /** + * Check if an object is a DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + ; + + var _proto = DateTime.prototype; + + _proto.get = function get(unit) { + return this[unit]; + } + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + ; + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOptions = function resolvedLocaleOptions(opts) { + if (opts === void 0) { + opts = {}; + } + + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link DateTime.setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + ; + + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + + if (opts === void 0) { + opts = {}; + } + + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + ; + + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime.plus}. You may wish to use {@link DateTime.toLocal} and {@link DateTime.toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime.Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + ; + + _proto.setZone = function setZone(zone, _temp) { + var _ref3 = _temp === void 0 ? {} : _temp, + _ref3$keepLocalTime = _ref3.keepLocalTime, + keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime, + _ref3$keepCalendarTim = _ref3.keepCalendarTime, + keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim; + + zone = normalizeZone(zone, Settings.defaultZone); + + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + + newTS = _objToTS3[0]; + } + + return clone(this, { + ts: newTS, + zone: zone + }); + } + } + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + ; + + _proto.reconfigure = function reconfigure(_temp2) { + var _ref4 = _temp2 === void 0 ? {} : _temp2, + locale = _ref4.locale, + numberingSystem = _ref4.numberingSystem, + outputCalendar = _ref4.outputCalendar; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone(this, { + loc: loc + }); + } + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + ; + + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link DateTime.reconfigure} and {@link DateTime.setZone}. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnit), + settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber; + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + var mixed; + + if (settingWeekStuff) { + mixed = weekToGregorian(_extends({}, gregorianToWeek(this.c), normalized)); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(_extends({}, gregorianToOrdinal(this.c), normalized)); + } else { + mixed = _extends({}, this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + + return clone(this, { + ts: ts, + o: o + }); + } + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.now().plus(123) //~> in 123 milliseconds + * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration); + return clone(this, adjustTime(this, dur)); + } + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link DateTime.plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration).negate(); + return clone(this, adjustTime(this, dur)); + } + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + ; + + _proto.startOf = function startOf(unit) { + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + + case "quarters": + case "months": + o.day = 1; + // falls through + + case "weeks": + case "days": + o.hour = 0; + // falls through + + case "hours": + o.minute = 0; + // falls through + + case "minutes": + o.second = 0; + // falls through + + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + o.weekday = 1; + } + + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + + return this.set(o); + } + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + ; + + _proto.endOf = function endOf(unit) { + var _this$plus; + + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this; + } // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link DateTime.toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.now().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.now().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID; + } + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @param {Object} opts - opts to override the configuration options on this DateTime + * @example DateTime.now().toLocaleString(); //=> 4/20/2017 + * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.now().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017' + * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32' + * @return {string} + */ + ; + + _proto.toLocaleString = function toLocaleString(formatOpts, opts) { + if (formatOpts === void 0) { + formatOpts = DATE_SHORT; + } + + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this) : INVALID; + } + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.now().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + ; + + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toISODate(opts) + "T" + this.toISOTime(opts); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @return {string} + */ + ; + + _proto.toISODate = function toISODate(_temp3) { + var _ref5 = _temp3 === void 0 ? {} : _temp3, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format; + + var fmt = format === "basic" ? "yyyyMMdd" : "yyyy-MM-dd"; + + if (this.year > 9999) { + fmt = "+" + fmt; + } + + return toTechFormat(this, fmt); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + ; + + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {boolean} [opts.includePrefix=false] - include the `T` prefix + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z' + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(_temp4) { + var _ref6 = _temp4 === void 0 ? {} : _temp4, + _ref6$suppressMillise = _ref6.suppressMilliseconds, + suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise, + _ref6$suppressSeconds = _ref6.suppressSeconds, + suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds, + _ref6$includeOffset = _ref6.includeOffset, + includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset, + _ref6$includePrefix = _ref6.includePrefix, + includePrefix = _ref6$includePrefix === void 0 ? false : _ref6$includePrefix, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format; + + return toTechTimeFormat(this, { + suppressSeconds: suppressSeconds, + suppressMilliseconds: suppressMilliseconds, + includeOffset: includeOffset, + includePrefix: includePrefix, + format: format + }); + } + /** + * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + ; + + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + ; + + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string} + */ + ; + + _proto.toSQLDate = function toSQLDate() { + return toTechFormat(this, "yyyy-MM-dd"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + ; + + _proto.toSQLTime = function toSQLTime(_temp5) { + var _ref7 = _temp5 === void 0 ? {} : _temp5, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includeZone = _ref7.includeZone, + includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone; + + return toTechTimeFormat(this, { + includeOffset: includeOffset, + includeZone: includeZone, + spaceZone: true + }); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + ; + + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID; + } + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime.toMillis} + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + ; + + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + /** + * Returns the epoch seconds of this DateTime. + * @return {number} + */ + ; + + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + /** + * Returns a JavaScript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return {}; + + var base = _extends({}, this.c); + + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + + return base; + } + /** + * Returns a JavaScript Date equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + ; + + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid("created by diffing an invalid DateTime"); + } + + var durOpts = _extends({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + + return otherIsLater ? diffed.negate() : diffed; + } + /** + * Return the difference between this DateTime and right now. + * See {@link DateTime.diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + return this.diff(DateTime.now(), unit, opts); + } + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval} + */ + ; + + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + /** + * Return whether this DateTime is in the same unit of time as another DateTime. + * Higher-order units must also be identical for this function to return `true`. + * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime.setZone} to convert one of the dates if needed. + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(otherDateTime, unit) { + if (!this.isValid) return false; + var inputMs = otherDateTime.valueOf(); + var otherZoneDateTime = this.setZone(otherDateTime.zone, { + keepLocalTime: true + }); + return otherZoneDateTime.startOf(unit) <= inputMs && inputMs <= otherZoneDateTime.endOf(unit); + } + /** + * Equality check + * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds down by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.now().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 dĂ­a" + * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.now().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + ; + + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({}, { + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + var units = ["years", "months", "days", "hours", "minutes", "seconds"]; + var unit = options.unit; + + if (Array.isArray(options.unit)) { + units = options.unit; + unit = undefined; + } + + return diffRelative(base, this.plus(padding), _extends({}, options, { + numeric: "always", + units: units, + unit: unit + })); + } + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.now().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + ; + + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({}, { + zone: this.zone + }), this, _extends({}, options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + ; + + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + ; + + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + ; + + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + /** + * @deprecated use fromFormatExplain instead + */ + ; + + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + return DateTime.fromFormatExplain(text, fmt, options); + } // FORMAT PRESETS + + /** + * {@link DateTime.toLocaleString} format like 10/14/1983 + * @type {Object} + */ + ; + + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + + }, { + key: "zone", + get: function get() { + return this._zone; + } + /** + * Get the name of the time zone. + * @type {string} + */ + + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 12, 31).weekYear //=> 2015 + * @type {number} + */ + + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locObj: this.loc + })[this.month - 1] : null; + } + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locObj: this.loc + })[this.month - 1] : null; + } + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locObj: this.loc + })[this.weekday - 1] : null; + } + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locObj: this.loc + })[this.weekday - 1] : null; + } + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.now().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.isUniversal : null; + } + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + /** + * {@link DateTime.toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + /** + * {@link DateTime.toLocaleString} format like 'Fri, Oct 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_MED_WITH_WEEKDAY", + get: function get() { + return DATE_MED_WITH_WEEKDAY; + } + /** + * {@link DateTime.toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + /** + * {@link DateTime.toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + /** + * {@link DateTime.toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + /** + * {@link DateTime.toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + /** + * {@link DateTime.toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + /** + * {@link DateTime.toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + /** + * {@link DateTime.toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + /** + * {@link DateTime.toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + /** + * {@link DateTime.toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + /** + * {@link DateTime.toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + /** + * {@link DateTime.toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + /** + * {@link DateTime.toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + /** + * {@link DateTime.toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + /** + * {@link DateTime.toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + /** + * {@link DateTime.toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + /** + * {@link DateTime.toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + /** + * {@link DateTime.toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + /** + * {@link DateTime.toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + /** + * {@link DateTime.toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + + return DateTime; +}(); +function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } +} + +var VERSION = "2.0.2"; + +var DateTime_1 = luxon.DateTime = DateTime; +var Duration_1 = luxon.Duration = Duration; +luxon.FixedOffsetZone = FixedOffsetZone; +luxon.IANAZone = IANAZone; +luxon.Info = Info; +luxon.Interval = Interval; +luxon.InvalidZone = InvalidZone; +luxon.Settings = Settings; +luxon.SystemZone = SystemZone; +luxon.VERSION = VERSION; +luxon.Zone = Zone; + +//////////////////// +// Query Settings // +//////////////////// +const DEFAULT_QUERY_SETTINGS = { + renderNullAs: "\\-", + warnOnEmptyResult: true, + refreshInterval: 1000, + defaultDateFormat: "MMMM dd, yyyy", + defaultDateTimeFormat: "h:mm a - MMMM dd, yyyy", + maxRecursiveRenderDepth: 6, +}; +/** Default settings for dataview on install. */ +const DEFAULT_SETTINGS = Object.assign(Object.assign({}, DEFAULT_QUERY_SETTINGS), { + inlineQueryPrefix: "=", + inlineJsQueryPrefix: "$=", + enableDataviewJs: true, + schemaVersion: 1, +}); + +/** Functional return type for error handling. */ +class Success { + constructor(value) { + this.value = value; + this.successful = true; + } + map(f) { + return new Success(f(this.value)); + } + flatMap(f) { + return f(this.value); + } + orElse(_value) { + return this.value; + } + orElseThrow(_message) { + return this.value; + } +} +class Failure { + constructor(error) { + this.error = error; + this.successful = false; + } + map(_f) { + return this; + } + flatMap(_f) { + return this; + } + orElse(value) { + return value; + } + orElseThrow(message) { + if (message) + throw new Error(message(this.error)); + else + throw new Error("" + this.error); + } +} +var Result; +(function (Result) { + function success(value) { + return new Success(value); + } + Result.success = success; + function failure(error) { + return new Failure(error); + } + Result.failure = failure; + function flatMap2(first, second, f) { + if (first.successful) { + if (second.successful) + return f(first.value, second.value); + else + return failure(second.error); + } + else { + return failure(first.error); + } + } + Result.flatMap2 = flatMap2; + function map2(first, second, f) { + return flatMap2(first, second, (a, b) => success(f(a, b))); + } + Result.map2 = map2; +})(Result || (Result = {})); + +/** Normalize a duration to all of the proper units. */ +function normalizeDuration(dur) { + return dur.shiftTo("years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds").normalize(); +} +/** Strip the time components of a date time object. */ +function stripTime(dt) { + return DateTime_1.fromObject({ + year: dt.year, + month: dt.month, + day: dt.day, + }); +} +/** Get the folder containing the given path (i.e., like computing 'path/..') */ +function getParentFolder(path) { + return path.split("/").slice(0, -1).join("/"); +} +/** Get the "title" for a file, by stripping other parts of the path as well as the extension. */ +function getFileTitle(path) { + if (path.includes("/")) + path = path.substring(path.lastIndexOf("/") + 1); + if (path.endsWith(".md")) + path = path.substring(0, path.length - 3); + return path; +} +/** Get the extension of a file from the file path. */ +function getExtension(path) { + if (!path.includes(".")) + return ""; + return path.substring(path.lastIndexOf(".") + 1); +} +const ALLOWABLE_VAR_CHARACTERS = /[0-9\w\p{Letter}\p{Extended_Pictographic}\-]/u; +const WHITESPACE = /\s/; +/** Convert an arbitrary variable name into something JS/query friendly. */ +function canonicalizeVarName(name) { + // Strip down to purely alphanumeric + spaces. + let result = ""; + let lastWasWhitespace = false; + for (let index = 0; index < name.length; index++) { + let ch = name[index]; + if (ch.match(WHITESPACE)) { + if (!lastWasWhitespace) + result += "-"; + lastWasWhitespace = true; + continue; + } + lastWasWhitespace = false; + if (!ch.match(ALLOWABLE_VAR_CHARACTERS)) + continue; + result += ch.toLocaleLowerCase(); + } + return result; +} +/** Try calling the given function; on failure, return the error message. */ +function tryOrPropogate(func) { + try { + return func(); + } + catch (error) { + return Result.failure("" + error + "\n\n" + error.stack); + } +} +/** Try asynchronously calling the given function; on failure, return the error message. */ +function asyncTryOrPropogate(func) { + return __awaiter(this, void 0, void 0, function* () { + try { + return yield func(); + } + catch (error) { + return Result.failure("" + error + "\n\n" + error.stack); + } + }); +} +/** + * Escape regex characters in a string. + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions. + */ +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +/** A specific task. */ +class Task { + constructor(init) { + Object.assign(this, init); + this.subtasks = (this.subtasks || []).map(t => new Task(t)); + this.completedDate = init === null || init === void 0 ? void 0 : init.completedDate; + this.createdDate = init === null || init === void 0 ? void 0 : init.createdDate; + this.dueDate = init === null || init === void 0 ? void 0 : init.dueDate; + } + /** Create a task from a record. */ + static fromObject(obj) { + return new Task(obj); + } + link() { + return `${this.path}#${this.blockId}`; + } + id() { + return `${this.path}-${this.line}`; + } + markdown() { + let bulletChar = `-`; + let stateChar = this.completed ? "x" : " "; + let result = `${bulletChar} [${stateChar}] ${this.text}`; + return result; + } + toObject() { + let result = { + text: this.text, + line: this.line, + path: this.path, + completed: this.completed, + fullyCompleted: this.fullyCompleted, + real: this.real, + blockId: this.blockId, + subtasks: this.subtasks.map(t => t.toObject()), + }; + if (this.createdDate) + result.createdDate = this.createdDate; + if (this.dueDate) + result.dueDate = this.dueDate; + if (this.completedDate) + result.completedDate = this.completedDate; + return result; + } +} +/** An Obsidian link with all associated metadata. */ +class Link { + constructor(fields) { + Object.assign(this, fields); + } + static file(path, embed = false, display) { + return new Link({ + path, + embed, + display, + type: "file", + }); + } + static header(path, header, embed, display) { + return new Link({ + path, + embed, + display, + subpath: header, + type: "header", + }); + } + static block(path, blockId, embed, display) { + return new Link({ + path, + embed, + display, + subpath: blockId, + type: "block", + }); + } + static fromObject(object) { + return new Link(object); + } + equals(other) { + return this.path == other.path && this.type == other.type && this.subpath == other.subpath; + } + toString() { + return this.markdown(); + } + /** Convert this link to a raw object which */ + toObject() { + return { path: this.path, type: this.type, subpath: this.subpath, display: this.display, embed: this.embed }; + } + /** Return a new link which points to the same location but with a new display value. */ + withDisplay(display) { + return new Link(Object.assign({}, this, { display })); + } + /** Convert this link to markdown so it can be rendered. */ + markdown() { + let result = (this.embed ? "!" : "") + "[[" + this.path; + if (this.type == "header") + result += "#" + this.subpath; + else if (this.type == "block") + result += "^" + this.subpath; + if (this.display && !this.embed) + result += "|" + this.display; + else if (!this.embed) + result += "|" + getFileTitle(this.path); + result += "]]"; + return result; + } + /** The stripped name of the file this link points into. */ + fileName() { + return getFileTitle(this.path).replace(".md", ""); + } +} +var Values; +(function (Values) { + /** Convert an arbitary value into a reasonable, Markdown-friendly string if possible. */ + function toString(field, setting = DEFAULT_QUERY_SETTINGS, recursive = false) { + let wrapped = wrapValue(field); + if (!wrapped) + return "null"; + switch (wrapped.type) { + case "string": + return wrapped.value; + case "number": + case "boolean": + case "html": + case "null": + return "" + wrapped.value; + case "link": + return wrapped.value.markdown(); + case "task": + return wrapped.value.markdown(); + case "function": + return ""; + case "array": + let result = ""; + if (recursive) + result += "["; + result += wrapped.value.map(f => toString(f, setting, true)).join(", "); + if (recursive) + result += "]"; + return result; + case "object": + return ("{ " + + Object.entries(wrapped.value) + .map(e => e[0] + ": " + toString(e[1], setting, true)) + .join(", ") + + " }"); + case "date": + if (wrapped.value.second == 0 && wrapped.value.hour == 0 && wrapped.value.minute == 0) { + return wrapped.value.toFormat(setting.defaultDateFormat); + } + return wrapped.value.toFormat(setting.defaultDateTimeFormat); + case "duration": + return wrapped.value.toISOTime(); + } + } + Values.toString = toString; + /** Wrap a literal value so you can switch on it easily. */ + function wrapValue(val) { + if (isNull(val)) + return { type: "null", value: val }; + else if (isNumber(val)) + return { type: "number", value: val }; + else if (isString(val)) + return { type: "string", value: val }; + else if (isBoolean(val)) + return { type: "boolean", value: val }; + else if (isDuration(val)) + return { type: "duration", value: val }; + else if (isDate(val)) + return { type: "date", value: val }; + else if (isHtml(val)) + return { type: "html", value: val }; + else if (isArray(val)) + return { type: "array", value: val }; + else if (isLink(val)) + return { type: "link", value: val }; + else if (isTask(val)) + return { type: "task", value: val }; + else if (isFunction(val)) + return { type: "function", value: val }; + else if (isObject(val)) + return { type: "object", value: val }; + else + return undefined; + } + Values.wrapValue = wrapValue; + /** Compare two arbitrary JavaScript values. Produces a total ordering over ANY possible dataview value. */ + function compareValue(val1, val2, linkNormalizer) { + // Handle undefined/nulls first. + if (val1 === undefined) + val1 = null; + if (val2 === undefined) + val2 = null; + if (val1 === null && val2 === null) + return 0; + else if (val1 === null) + return -1; + else if (val2 === null) + return 1; + // A non-null value now which we can wrap & compare on. + let wrap1 = wrapValue(val1); + let wrap2 = wrapValue(val2); + if (wrap1 === undefined && wrap2 === undefined) + return 0; + else if (wrap1 === undefined) + return -1; + else if (wrap2 === undefined) + return 1; + if (wrap1.type != wrap2.type) + return wrap1.type.localeCompare(wrap2.type); + switch (wrap1.type) { + case "string": + return wrap1.value.localeCompare(wrap2.value); + case "number": + if (wrap1.value < wrap2.value) + return -1; + else if (wrap1.value == wrap2.value) + return 0; + return 1; + case "null": + return 0; + case "boolean": + if (wrap1.value == wrap2.value) + return 0; + else + return wrap1.value ? 1 : -1; + case "link": + let link1 = wrap1.value; + let link2 = wrap2.value; + let normalize = linkNormalizer !== null && linkNormalizer !== void 0 ? linkNormalizer : ((x) => x); + // We can't compare by file name or display, since that would break link equality. + return normalize(link1.path).localeCompare(normalize(link2.path)); + case "task": + let task1 = wrap1.value; + let task2 = wrap2.value; + // Use object comparison & compare the unique identifiers (path, line, and text as backup). + return compareValue({ path: task1.path, line: task1.line, text: task1.text }, { path: task2.path, line: task2.line, text: task2.text }); + case "date": + return wrap1.value < wrap2.value + ? -1 + : wrap1.value.equals(wrap2.value) + ? 0 + : 1; + case "duration": + return wrap1.value < wrap2.value + ? -1 + : wrap1.value.equals(wrap2.value) + ? 0 + : 1; + case "array": + let f1 = wrap1.value; + let f2 = wrap2.value; + for (let index = 0; index < Math.min(f1.length, f2.length); index++) { + let comp = compareValue(f1[index], f2[index]); + if (comp != 0) + return comp; + } + return f1.length - f2.length; + case "object": + let o1 = wrap1.value; + let o2 = wrap2.value; + let k1 = Array.from(Object.keys(o1)); + let k2 = Array.from(Object.keys(o2)); + k1.sort(); + k2.sort(); + let keyCompare = compareValue(k1, k2); + if (keyCompare != 0) + return keyCompare; + for (let key of k1) { + let comp = compareValue(o1[key], o2[key]); + if (comp != 0) + return comp; + } + return 0; + case "html": + return 0; + case "function": + return 0; + } + } + Values.compareValue = compareValue; + /** Find the corresponding Dataveiw type for an arbitrary value. */ + function typeOf(val) { + var _a; + return (_a = wrapValue(val)) === null || _a === void 0 ? void 0 : _a.type; + } + Values.typeOf = typeOf; + /** Determine if the given value is "truthy" (i.e., is non-null and has data in it). */ + function isTruthy(field) { + let wrapped = wrapValue(field); + if (!wrapped) + return false; + switch (wrapped.type) { + case "number": + return wrapped.value != 0; + case "string": + return wrapped.value.length > 0; + case "boolean": + return wrapped.value; + case "link": + return !!wrapped.value.path; + case "task": + return wrapped.value.text.length > 0; + case "date": + return wrapped.value.toMillis() != 0; + case "duration": + return wrapped.value.as("seconds") != 0; + case "object": + return Object.keys(wrapped.value).length > 0; + case "array": + return wrapped.value.length > 0; + case "null": + return false; + case "html": + return true; + case "function": + return true; + } + } + Values.isTruthy = isTruthy; + /** Deep copy a field. */ + function deepCopy(field) { + if (field === null || field === undefined) + return field; + if (Values.isArray(field)) { + return [].concat(field.map(v => deepCopy(v))); + } + else if (Values.isObject(field)) { + let result = {}; + for (let [key, value] of Object.entries(field)) + result[key] = deepCopy(value); + return result; + } + else { + return field; + } + } + Values.deepCopy = deepCopy; + function isString(val) { + return typeof val == "string"; + } + Values.isString = isString; + function isNumber(val) { + return typeof val == "number"; + } + Values.isNumber = isNumber; + function isDate(val) { + return val instanceof DateTime_1; + } + Values.isDate = isDate; + function isDuration(val) { + return val instanceof Duration_1; + } + Values.isDuration = isDuration; + function isNull(val) { + return val === null || val === undefined; + } + Values.isNull = isNull; + function isArray(val) { + return Array.isArray(val); + } + Values.isArray = isArray; + function isBoolean(val) { + return typeof val === "boolean"; + } + Values.isBoolean = isBoolean; + function isLink(val) { + return val instanceof Link; + } + Values.isLink = isLink; + function isTask(val) { + return val instanceof Task; + } + Values.isTask = isTask; + function isHtml(val) { + if (typeof HTMLElement !== "undefined") { + return val instanceof HTMLElement; + } + else { + return false; + } + } + Values.isHtml = isHtml; + function isObject(val) { + return (typeof val == "object" && + !isHtml(val) && + !isArray(val) && + !isDuration(val) && + !isDate(val) && + !isLink(val) && + !isTask(val)); + } + Values.isObject = isObject; + function isFunction(val) { + return typeof val == "function"; + } + Values.isFunction = isFunction; +})(Values || (Values = {})); +var TransferableValues; +(function (TransferableValues) { + /** Convert a literal value to a serializer-friendly transferable value. Does not work for all types. */ + function transferable(value) { + let wrapped = Values.wrapValue(value); + if (wrapped === undefined) + return undefined; + switch (wrapped.type) { + case "null": + case "number": + case "string": + case "boolean": + return wrapped.value; + case "date": + return { + "___transfer-type": "date", + value: wrapped.value.toObject(), + options: { zone: wrapped.value.zoneName }, + }; + case "duration": + return { "___transfer-type": "duration", value: wrapped.value.toObject() }; + case "array": + return wrapped.value.map(v => transferable(v)); + case "object": + let result = {}; + for (let [key, value] of Object.entries(wrapped.value)) + result[key] = transferable(value); + return result; + case "link": + return { "___transfer-type": "link", value: wrapped.value.toObject() }; + case "task": + return { "___transfer-type": "task", value: transferable(wrapped.value.toObject()) }; + default: + return undefined; + } + } + TransferableValues.transferable = transferable; + /** Convert a transferable value back to a literal value we can work with. */ + function value(transferable) { + if (transferable === null || transferable === undefined) { + return null; + } + else if (Array.isArray(transferable)) { + return transferable.map(v => value(v)); + } + else if (typeof transferable === "object") { + if ("___transfer-type" in transferable) { + switch (transferable["___transfer-type"]) { + case "date": + return DateTime_1.fromObject(value(transferable.value), value(transferable.options || {})); + case "duration": + return Duration_1.fromObject(value(transferable.value)); + case "link": + return Link.fromObject(value(transferable.value)); + case "task": + return Task.fromObject(value(transferable.value)); + default: + throw Error(`Unrecognized transfer type '${transferable["___transfer-type"]}`); + } + } + let result = {}; + for (let [key, value] of Object.entries(transferable)) + result[key] = TransferableValues.value(value); + return result; + } + return transferable; + } + TransferableValues.value = value; +})(TransferableValues || (TransferableValues = {})); +var Groupings; +(function (Groupings) { + function base(value) { + return { type: "base", value }; + } + Groupings.base = base; + function grouped(values) { + return { type: "grouped", groups: values }; + } + Groupings.grouped = grouped; +})(Groupings || (Groupings = {})); + +/** Implementation of DataArray, minus the dynamic variable access, which is implemented via proxy. */ +class DataArrayImpl { + constructor(values, settings, defaultComparator = Values.compareValue) { + this.values = values; + this.settings = settings; + this.defaultComparator = defaultComparator; + this.length = values.length; + } + static wrap(arr, settings, defaultComparator = Values.compareValue) { + return new Proxy(new DataArrayImpl(arr, settings, defaultComparator), DataArrayImpl.ARRAY_PROXY); + } + lwrap(values) { + return DataArrayImpl.wrap(values, this.settings, this.defaultComparator); + } + where(predicate) { + return this.lwrap(this.values.filter(predicate)); + } + filter(predicate) { + return this.where(predicate); + } + map(f) { + return this.lwrap(this.values.map(f)); + } + flatMap(f) { + let result = []; + for (let index = 0; index < this.length; index++) { + let value = f(this.values[index], index, this.values); + if (!value || value.length == 0) + continue; + for (let r of value) + result.push(r); + } + return this.lwrap(result); + } + mutate(f) { + this.values.forEach(f); + return this; + } + limit(count) { + return this.lwrap(this.values.slice(0, count)); + } + slice(start, end) { + return this.lwrap(this.values.slice(start, end)); + } + concat(other) { + return this.lwrap(this.values.concat(other.values)); + } + /** Return the first index of the given (optionally starting the search) */ + indexOf(element, fromIndex) { + return this.findIndex(e => this.defaultComparator(e, element) == 0, fromIndex); + } + /** Return the first element that satisfies the given predicate. */ + find(pred) { + let index = this.findIndex(pred); + if (index == -1) + return undefined; + else + return this.values[index]; + } + findIndex(pred, fromIndex) { + for (let index = fromIndex !== null && fromIndex !== void 0 ? fromIndex : 0; index < this.length; index++) { + if (pred(this.values[index], index, this.values)) + return index; + } + return -1; + } + includes(element) { + return this.indexOf(element, 0) != -1; + } + join(sep) { + return this.map(s => Values.toString(s, this.settings)) + .array() + .join(sep !== null && sep !== void 0 ? sep : ", "); + } + sort(key, direction, comparator) { + if (this.values.length == 0) + return this; + let realComparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + // Associate each entry with it's index for the key function, and then do a normal sort. + let copy = [].concat(this.array()).map((elem, index) => { + return { index: index, value: elem }; + }); + copy.sort((a, b) => { + let aKey = key(a.value, a.index, this.values); + let bKey = key(b.value, b.index, this.values); + return direction === "desc" ? -realComparator(aKey, bKey) : realComparator(aKey, bKey); + }); + return this.lwrap(copy.map(e => e.value)); + } + groupBy(key, comparator) { + if (this.values.length == 0) + return this.lwrap([]); + // JavaScript sucks and we can't make hash maps over arbitrary types (only strings/ints), so + // we do a poor man algorithm where we SORT, followed by grouping. + let intermediate = this.sort(key, "asc", comparator); + comparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + let result = []; + let currentRow = [intermediate[0]]; + let current = key(intermediate[0], 0, intermediate.values); + for (let index = 1; index < intermediate.length; index++) { + let newKey = key(intermediate[index], index, intermediate.values); + if (comparator(current, newKey) != 0) { + result.push({ key: current, rows: this.lwrap(currentRow) }); + current = newKey; + currentRow = [intermediate[index]]; + } + else { + currentRow.push(intermediate[index]); + } + } + result.push({ key: current, rows: this.lwrap(currentRow) }); + return this.lwrap(result); + } + distinct(key, comparator) { + if (this.values.length == 0) + return this; + let realKey = key !== null && key !== void 0 ? key : (x => x); + // For similar reasons to groupBy, do a sort and take the first element of each block. + let intermediate = this.map((x, index) => { + return { key: realKey(x, index, this.values), value: x }; + }).sort(x => x.key, "asc", comparator); + comparator = comparator !== null && comparator !== void 0 ? comparator : this.defaultComparator; + let result = [intermediate[0].value]; + for (let index = 1; index < intermediate.length; index++) { + if (comparator(intermediate[index - 1].key, intermediate[index].key) != 0) { + result.push(intermediate[index].value); + } + } + return this.lwrap(result); + } + every(f) { + return this.values.every(f); + } + some(f) { + return this.values.some(f); + } + none(f) { + return this.values.every((v, i, a) => !f(v, i, a)); + } + first() { + return this.values.length > 0 ? this.values[0] : undefined; + } + last() { + return this.values.length > 0 ? this.values[this.values.length - 1] : undefined; + } + to(key) { + let result = []; + for (let child of this.values) { + let value = child[key]; + if (value === undefined || value === null) + continue; + if (Array.isArray(value) || DataArray.isDataArray(value)) + value.forEach(v => result.push(v)); + else + result.push(value); + } + return this.lwrap(result); + } + expand(key) { + let result = []; + let queue = [].concat(this.values); + while (queue.length > 0) { + let next = queue.pop(); + let value = next[key]; + if (value === undefined || value === null) + continue; + if (Array.isArray(value)) + value.forEach(v => queue.push(v)); + else if (value instanceof DataArrayImpl) + value.forEach(v => queue.push(v)); + else + queue.push(value); + result.push(next); + } + return this.lwrap(result); + } + forEach(f) { + for (let index = 0; index < this.values.length; index++) { + f(this.values[index], index, this.values); + } + } + array() { + return [].concat(this.values); + } + [Symbol.iterator]() { + return this.values[Symbol.iterator](); + } + toString() { + return this.values.toString(); + } +} +DataArrayImpl.ARRAY_FUNCTIONS = new Set([ + "where", + "filter", + "map", + "flatMap", + "mutate", + "slice", + "concat", + "indexOf", + "limit", + "find", + "findIndex", + "includes", + "join", + "sort", + "groupBy", + "distinct", + "every", + "some", + "none", + "first", + "last", + "to", + "lwrap", + "expand", + "forEach", + "length", + "values", + "array", + "defaultComparator", + "toString", +]); +DataArrayImpl.ARRAY_PROXY = { + get: function (target, prop, reciever) { + if (typeof prop === "symbol") + return target[prop]; + else if (typeof prop === "number") + return target.values[prop]; + else if (!isNaN(parseInt(prop))) + return target.values[parseInt(prop)]; + else if (DataArrayImpl.ARRAY_FUNCTIONS.has(prop.toString())) + return target[prop.toString()]; + return target.to(prop); + }, +}; +/** Provides utility functions for generating data arrays. */ +var DataArray; +(function (DataArray) { + /** Create a new Dataview data array. */ + function wrap(raw, settings) { + return DataArrayImpl.wrap(raw, settings); + } + DataArray.wrap = wrap; + /** Create a new DataArray from an iterable object. */ + function from(raw, settings) { + let data = []; + for (let elem of raw) + data.push(elem); + return DataArrayImpl.wrap(data, settings); + } + DataArray.from = from; + /** Return true if the given object is a data array. */ + function isDataArray(obj) { + return obj instanceof DataArrayImpl; + } + DataArray.isDataArray = isDataArray; +})(DataArray || (DataArray = {})); + +/** Test-environment-friendly function which fetches the current system locale. */ +function currentLocale() { + if (typeof window === "undefined") + return "en-US"; + return window.navigator.language; +} + +/** Render simple fields compactly, removing wrapping content like paragraph and span. */ +function renderCompactMarkdown(markdown, container, sourcePath, component) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + let subcontainer = container.createSpan(); + yield obsidian.MarkdownRenderer.renderMarkdown(markdown, subcontainer, sourcePath, component); + if (subcontainer.children.length == 1 && subcontainer.querySelector("p")) { + subcontainer.innerHTML = (_b = (_a = subcontainer.querySelector("p")) === null || _a === void 0 ? void 0 : _a.innerHTML) !== null && _b !== void 0 ? _b : ""; + } + }); +} +/** Create a list inside the given container, with the given data. */ +function renderList(container, elements, component, originFile, settings) { + return __awaiter(this, void 0, void 0, function* () { + let listEl = container.createEl("ul", { cls: ["dataview", "list-view-ul"] }); + for (let elem of elements) { + let li = listEl.createEl("li"); + yield renderValue(elem, li, originFile, component, settings, true, "list"); + } + }); +} +/** Create a table inside the given container, with the given data. */ +function renderTable(container, headers, values, component, originFile, settings) { + return __awaiter(this, void 0, void 0, function* () { + let tableEl = container.createEl("table", { cls: ["dataview", "table-view-table"] }); + let theadEl = tableEl.createEl("thead", { cls: "table-view-thead" }); + let headerEl = theadEl.createEl("tr", { cls: "table-view-tr-header" }); + for (let header of headers) { + headerEl.createEl("th", { text: header, cls: "table-view-th" }); + } + let tbodyEl = tableEl.createEl("tbody", { cls: "table-view-tbody" }); + for (let row of values) { + let rowEl = tbodyEl.createEl("tr"); + for (let value of row) { + let td = rowEl.createEl("td"); + yield renderValue(value, td, originFile, component, settings, true); + } + } + }); +} +/** Render a pre block with an error in it; returns the element to allow for dynamic updating. */ +function renderErrorPre(container, error) { + let pre = container.createEl("pre", { cls: ["dataview", "dataview-error"] }); + pre.appendText(error); + return pre; +} +/** Render a DateTime in a minimal format to save space. */ +function renderMinimalDate(time, settings) { + // If there is no relevant time specified, fall back to just rendering the date. + if (time.second == 0 && time.minute == 0 && time.hour == 0) { + return time.toFormat(settings.defaultDateFormat, { locale: currentLocale() }); + } + return time.toFormat(settings.defaultDateTimeFormat, { locale: currentLocale() }); +} +/** Render a duration in a minimal format to save space. */ +function renderMinimalDuration(dur) { + dur = normalizeDuration(dur); + let result = ""; + if (dur.years) + result += `${dur.years} years, `; + if (dur.months) + result += `${dur.months} months, `; + if (dur.weeks) + result += `${dur.weeks} weeks, `; + if (dur.days) + result += `${dur.days} days, `; + if (dur.hours) + result += `${dur.hours} hours, `; + if (dur.minutes) + result += `${dur.minutes} minutes, `; + if (dur.seconds) + result += `${Math.round(dur.seconds)} seconds, `; + if (dur.milliseconds) + result += `${Math.round(dur.milliseconds)} ms, `; + if (result.endsWith(", ")) + result = result.substring(0, result.length - 2); + return result; +} +/** Prettily render a value into a container with the given settings. */ +function renderValue(field, container, originFile, component, settings, expandList = false, context = "root", depth = 0) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Prevent infinite recursion. + if (depth > settings.maxRecursiveRenderDepth) { + container.appendText("..."); + return; + } + if (Values.isNull(field)) { + yield renderCompactMarkdown(settings.renderNullAs, container, originFile, component); + } + else if (Values.isDate(field)) { + container.appendText(renderMinimalDate(field, settings)); + } + else if (Values.isDuration(field)) { + container.appendText(renderMinimalDuration(field)); + } + else if (Values.isString(field) || Values.isBoolean(field) || Values.isNumber(field)) { + yield renderCompactMarkdown("" + field, container, originFile, component); + } + else if (Values.isArray(field) || DataArray.isDataArray(field)) { + if (expandList) { + let list = container.createEl("ul", { + cls: [ + "dataview", + "dataview-ul", + context == "list" ? "dataview-result-list-ul" : "dataview-result-list-root-ul", + ], + }); + for (let child of field) { + let li = list.createEl("li", { cls: "dataview-result-list-li" }); + yield renderValue(child, li, originFile, component, settings, expandList, "list", depth + 1); + } + } + else { + if (field.length == 0) { + container.appendText(""); + return; + } + let span = container.createEl("span", { cls: ["dataview", "dataview-result-list-span"] }); + let first = true; + for (let val of field) { + if (first) + first = false; + else + span.appendText(", "); + yield renderValue(val, span, originFile, component, settings, expandList, "list", depth + 1); + } + } + } + else if (Values.isLink(field)) { + yield renderCompactMarkdown(field.markdown(), container, originFile, component); + } + else if (Values.isHtml(field)) { + container.appendChild(field); + } + else if (Values.isFunction(field)) { + container.appendText(""); + } + else if (Values.isObject(field)) { + // Don't render classes in case they have recursive references; spoopy. + if (!Values.isTask(field) && ((_a = field === null || field === void 0 ? void 0 : field.constructor) === null || _a === void 0 ? void 0 : _a.name) && ((_b = field === null || field === void 0 ? void 0 : field.constructor) === null || _b === void 0 ? void 0 : _b.name) != "Object") { + container.appendText(`<${field.constructor.name}>`); + return; + } + if (expandList) { + let list = container.createEl("ul", { cls: ["dataview", "dataview-ul", "dataview-result-object-ul"] }); + for (let [key, value] of Object.entries(field)) { + let li = list.createEl("li", { cls: ["dataview", "dataview-li", "dataview-result-object-li"] }); + li.appendText(key + ": "); + yield renderValue(value, li, originFile, component, settings, expandList, context, depth + 1); + } + } + else { + if (Object.keys(field).length == 0) { + container.appendText(""); + return; + } + let span = container.createEl("span", { cls: ["dataview", "dataview-result-object-span"] }); + let first = true; + for (let [key, value] of Object.entries(field)) { + if (first) + first = false; + else + span.appendText(", "); + span.appendText(key + ": "); + yield renderValue(value, span, originFile, component, settings, expandList, context, depth + 1); + } + } + } + else { + container.appendText("Unrecognized: " + JSON.stringify(field)); + } + }); +} + +function decodeBase64(base64, enableUnicode) { + var binaryString = atob(base64); + if (enableUnicode) { + var binaryView = new Uint8Array(binaryString.length); + for (var i = 0, n = binaryString.length; i < n; ++i) { + binaryView[i] = binaryString.charCodeAt(i); + } + return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer)); + } + return binaryString; +} + +function createURL(base64, sourcemapArg, enableUnicodeArg) { + var sourcemap = sourcemapArg === undefined ? null : sourcemapArg; + var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg; + var source = decodeBase64(base64, enableUnicode); + var start = source.indexOf('\n', 10) + 1; + var body = source.substring(start) + (sourcemap ? '\/\/# sourceMappingURL=' + sourcemap : ''); + var blob = new Blob([body], { type: 'application/javascript' }); + return URL.createObjectURL(blob); +} + +function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) { + var url; + return function WorkerFactory(options) { + url = url || createURL(base64, sourcemapArg, enableUnicodeArg); + return new Worker(url, options); + }; +} + +var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgdmFyIGNvbW1vbmpzR2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDoge307CgogICAgdmFyIGx1eG9uID0ge307CgogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGx1eG9uLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9leHRlbmRzKCkgewogICAgICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgewogICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOwoKICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsKICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsKICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgICB9OwoKICAgICAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9CgogICAgZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsKICAgICAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7CiAgICAgIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzOwoKICAgICAgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgewogICAgICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgewogICAgICAgIHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7CiAgICAgIH07CiAgICAgIHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7CiAgICB9CgogICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsKICAgICAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7CiAgICAgICAgby5fX3Byb3RvX18gPSBwOwogICAgICAgIHJldHVybiBvOwogICAgICB9OwoKICAgICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgewogICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJ1bmRlZmluZWQiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodHlwZW9mIFByb3h5ID09PSAiZnVuY3Rpb24iKSByZXR1cm4gdHJ1ZTsKCiAgICAgIHRyeSB7CiAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7CiAgICAgIGlmIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHsKICAgICAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykgewogICAgICAgICAgdmFyIGEgPSBbbnVsbF07CiAgICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7CiAgICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7CiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTsKICAgICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpOwogICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHJldHVybiBfY29uc3RydWN0LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICB9CgogICAgZnVuY3Rpb24gX2lzTmF0aXZlRnVuY3Rpb24oZm4pIHsKICAgICAgcmV0dXJuIEZ1bmN0aW9uLnRvU3RyaW5nLmNhbGwoZm4pLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSAhPT0gLTE7CiAgICB9CgogICAgZnVuY3Rpb24gX3dyYXBOYXRpdmVTdXBlcihDbGFzcykgewogICAgICB2YXIgX2NhY2hlID0gdHlwZW9mIE1hcCA9PT0gImZ1bmN0aW9uIiA/IG5ldyBNYXAoKSA6IHVuZGVmaW5lZDsKCiAgICAgIF93cmFwTmF0aXZlU3VwZXIgPSBmdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7CiAgICAgICAgaWYgKENsYXNzID09PSBudWxsIHx8ICFfaXNOYXRpdmVGdW5jdGlvbihDbGFzcykpIHJldHVybiBDbGFzczsKCiAgICAgICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgICB9CgogICAgICAgIGlmICh0eXBlb2YgX2NhY2hlICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgaWYgKF9jYWNoZS5oYXMoQ2xhc3MpKSByZXR1cm4gX2NhY2hlLmdldChDbGFzcyk7CgogICAgICAgICAgX2NhY2hlLnNldChDbGFzcywgV3JhcHBlcik7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBXcmFwcGVyKCkgewogICAgICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTsKICAgICAgICB9CgogICAgICAgIFdyYXBwZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDbGFzcy5wcm90b3R5cGUsIHsKICAgICAgICAgIGNvbnN0cnVjdG9yOiB7CiAgICAgICAgICAgIHZhbHVlOiBXcmFwcGVyLAogICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBfc2V0UHJvdG90eXBlT2YoV3JhcHBlciwgQ2xhc3MpOwogICAgICB9OwoKICAgICAgcmV0dXJuIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpOwogICAgfQoKICAgIGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsKICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307CiAgICAgIHZhciB0YXJnZXQgPSB7fTsKICAgICAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgICB2YXIga2V5LCBpOwoKICAgICAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBrZXkgPSBzb3VyY2VLZXlzW2ldOwogICAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7CiAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsKICAgICAgfQoKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7CiAgICAgIGlmICghbykgcmV0dXJuOwogICAgICBpZiAodHlwZW9mIG8gPT09ICJzdHJpbmciKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsKICAgICAgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOwogICAgICBpZiAobiA9PT0gIk9iamVjdCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsKICAgICAgaWYgKG4gPT09ICJNYXAiIHx8IG4gPT09ICJTZXQiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsKICAgICAgaWYgKG4gPT09ICJBcmd1bWVudHMiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsKICAgIH0KCiAgICBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgewogICAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsKCiAgICAgIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTsKCiAgICAgIHJldHVybiBhcnIyOwogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UobywgYWxsb3dBcnJheUxpa2UpIHsKICAgICAgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gInVuZGVmaW5lZCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bIkBAaXRlcmF0b3IiXTsKICAgICAgaWYgKGl0KSByZXR1cm4gKGl0ID0gaXQuY2FsbChvKSkubmV4dC5iaW5kKGl0KTsKCiAgICAgIGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICAgICAgaWYgKGl0KSBvID0gaXQ7CiAgICAgICAgdmFyIGkgPSAwOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsKICAgICAgICAgICAgZG9uZTogdHJ1ZQogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZTogb1tpKytdCiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKICAgIH0KCiAgICAvLyB0aGVzZSBhcmVuJ3QgcmVhbGx5IHByaXZhdGUsIGJ1dCBub3IgYXJlIHRoZXkgcmVhbGx5IHVzZWZ1bCB0byBkb2N1bWVudAoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwogICAgdmFyIEx1eG9uRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9FcnJvcikgewogICAgICBfaW5oZXJpdHNMb29zZShMdXhvbkVycm9yLCBfRXJyb3IpOwoKICAgICAgZnVuY3Rpb24gTHV4b25FcnJvcigpIHsKICAgICAgICByZXR1cm4gX0Vycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKICAgICAgfQoKICAgICAgcmV0dXJuIEx1eG9uRXJyb3I7CiAgICB9KCAvKiNfX1BVUkVfXyovX3dyYXBOYXRpdmVTdXBlcihFcnJvcikpOwogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgoKICAgIHZhciBJbnZhbGlkRGF0ZVRpbWVFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3IpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoSW52YWxpZERhdGVUaW1lRXJyb3IsIF9MdXhvbkVycm9yKTsKCiAgICAgIGZ1bmN0aW9uIEludmFsaWREYXRlVGltZUVycm9yKHJlYXNvbikgewogICAgICAgIHJldHVybiBfTHV4b25FcnJvci5jYWxsKHRoaXMsICJJbnZhbGlkIERhdGVUaW1lOiAiICsgcmVhc29uLnRvTWVzc2FnZSgpKSB8fCB0aGlzOwogICAgICB9CgogICAgICByZXR1cm4gSW52YWxpZERhdGVUaW1lRXJyb3I7CiAgICB9KEx1eG9uRXJyb3IpOwogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgogICAgdmFyIEludmFsaWRJbnRlcnZhbEVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTHV4b25FcnJvcjIpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoSW52YWxpZEludGVydmFsRXJyb3IsIF9MdXhvbkVycm9yMik7CgogICAgICBmdW5jdGlvbiBJbnZhbGlkSW50ZXJ2YWxFcnJvcihyZWFzb24pIHsKICAgICAgICByZXR1cm4gX0x1eG9uRXJyb3IyLmNhbGwodGhpcywgIkludmFsaWQgSW50ZXJ2YWw6ICIgKyByZWFzb24udG9NZXNzYWdlKCkpIHx8IHRoaXM7CiAgICAgIH0KCiAgICAgIHJldHVybiBJbnZhbGlkSW50ZXJ2YWxFcnJvcjsKICAgIH0oTHV4b25FcnJvcik7CiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKi8KCiAgICB2YXIgSW52YWxpZER1cmF0aW9uRXJyb3IgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9MdXhvbkVycm9yMykgewogICAgICBfaW5oZXJpdHNMb29zZShJbnZhbGlkRHVyYXRpb25FcnJvciwgX0x1eG9uRXJyb3IzKTsKCiAgICAgIGZ1bmN0aW9uIEludmFsaWREdXJhdGlvbkVycm9yKHJlYXNvbikgewogICAgICAgIHJldHVybiBfTHV4b25FcnJvcjMuY2FsbCh0aGlzLCAiSW52YWxpZCBEdXJhdGlvbjogIiArIHJlYXNvbi50b01lc3NhZ2UoKSkgfHwgdGhpczsKICAgICAgfQoKICAgICAgcmV0dXJuIEludmFsaWREdXJhdGlvbkVycm9yOwogICAgfShMdXhvbkVycm9yKTsKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwoKICAgIHZhciBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3I0KSB7CiAgICAgIF9pbmhlcml0c0xvb3NlKENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yLCBfTHV4b25FcnJvcjQpOwoKICAgICAgZnVuY3Rpb24gQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoKSB7CiAgICAgICAgcmV0dXJuIF9MdXhvbkVycm9yNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgIH0KCiAgICAgIHJldHVybiBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcjsKICAgIH0oTHV4b25FcnJvcik7CiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKi8KCiAgICB2YXIgSW52YWxpZFVuaXRFcnJvciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0x1eG9uRXJyb3I1KSB7CiAgICAgIF9pbmhlcml0c0xvb3NlKEludmFsaWRVbml0RXJyb3IsIF9MdXhvbkVycm9yNSk7CgogICAgICBmdW5jdGlvbiBJbnZhbGlkVW5pdEVycm9yKHVuaXQpIHsKICAgICAgICByZXR1cm4gX0x1eG9uRXJyb3I1LmNhbGwodGhpcywgIkludmFsaWQgdW5pdCAiICsgdW5pdCkgfHwgdGhpczsKICAgICAgfQoKICAgICAgcmV0dXJuIEludmFsaWRVbml0RXJyb3I7CiAgICB9KEx1eG9uRXJyb3IpOwogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgogICAgdmFyIEludmFsaWRBcmd1bWVudEVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTHV4b25FcnJvcjYpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoSW52YWxpZEFyZ3VtZW50RXJyb3IsIF9MdXhvbkVycm9yNik7CgogICAgICBmdW5jdGlvbiBJbnZhbGlkQXJndW1lbnRFcnJvcigpIHsKICAgICAgICByZXR1cm4gX0x1eG9uRXJyb3I2LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpczsKICAgICAgfQoKICAgICAgcmV0dXJuIEludmFsaWRBcmd1bWVudEVycm9yOwogICAgfShMdXhvbkVycm9yKTsKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwoKICAgIHZhciBab25lSXNBYnN0cmFjdEVycm9yID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfTHV4b25FcnJvcjcpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoWm9uZUlzQWJzdHJhY3RFcnJvciwgX0x1eG9uRXJyb3I3KTsKCiAgICAgIGZ1bmN0aW9uIFpvbmVJc0Fic3RyYWN0RXJyb3IoKSB7CiAgICAgICAgcmV0dXJuIF9MdXhvbkVycm9yNy5jYWxsKHRoaXMsICJab25lIGlzIGFuIGFic3RyYWN0IGNsYXNzIikgfHwgdGhpczsKICAgICAgfQoKICAgICAgcmV0dXJuIFpvbmVJc0Fic3RyYWN0RXJyb3I7CiAgICB9KEx1eG9uRXJyb3IpOwoKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwogICAgdmFyIG4gPSAibnVtZXJpYyIsCiAgICAgICAgcyA9ICJzaG9ydCIsCiAgICAgICAgbCA9ICJsb25nIjsKICAgIHZhciBEQVRFX1NIT1JUID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogbiwKICAgICAgZGF5OiBuCiAgICB9OwogICAgdmFyIERBVEVfTUVEID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogcywKICAgICAgZGF5OiBuCiAgICB9OwogICAgdmFyIERBVEVfTUVEX1dJVEhfV0VFS0RBWSA9IHsKICAgICAgeWVhcjogbiwKICAgICAgbW9udGg6IHMsCiAgICAgIGRheTogbiwKICAgICAgd2Vla2RheTogcwogICAgfTsKICAgIHZhciBEQVRFX0ZVTEwgPSB7CiAgICAgIHllYXI6IG4sCiAgICAgIG1vbnRoOiBsLAogICAgICBkYXk6IG4KICAgIH07CiAgICB2YXIgREFURV9IVUdFID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogbCwKICAgICAgZGF5OiBuLAogICAgICB3ZWVrZGF5OiBsCiAgICB9OwogICAgdmFyIFRJTUVfU0lNUExFID0gewogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4KICAgIH07CiAgICB2YXIgVElNRV9XSVRIX1NFQ09ORFMgPSB7CiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbiwKICAgICAgc2Vjb25kOiBuCiAgICB9OwogICAgdmFyIFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQgPSB7CiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbiwKICAgICAgc2Vjb25kOiBuLAogICAgICB0aW1lWm9uZU5hbWU6IHMKICAgIH07CiAgICB2YXIgVElNRV9XSVRIX0xPTkdfT0ZGU0VUID0gewogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4sCiAgICAgIHNlY29uZDogbiwKICAgICAgdGltZVpvbmVOYW1lOiBsCiAgICB9OwogICAgdmFyIFRJTUVfMjRfU0lNUExFID0gewogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4sCiAgICAgIGhvdXJDeWNsZTogImgyMyIKICAgIH07CiAgICB2YXIgVElNRV8yNF9XSVRIX1NFQ09ORFMgPSB7CiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbiwKICAgICAgc2Vjb25kOiBuLAogICAgICBob3VyQ3ljbGU6ICJoMjMiCiAgICB9OwogICAgdmFyIFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQgPSB7CiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbiwKICAgICAgc2Vjb25kOiBuLAogICAgICBob3VyQ3ljbGU6ICJoMjMiLAogICAgICB0aW1lWm9uZU5hbWU6IHMKICAgIH07CiAgICB2YXIgVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUID0gewogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4sCiAgICAgIHNlY29uZDogbiwKICAgICAgaG91ckN5Y2xlOiAiaDIzIiwKICAgICAgdGltZVpvbmVOYW1lOiBsCiAgICB9OwogICAgdmFyIERBVEVUSU1FX1NIT1JUID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogbiwKICAgICAgZGF5OiBuLAogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4KICAgIH07CiAgICB2YXIgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogbiwKICAgICAgZGF5OiBuLAogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4sCiAgICAgIHNlY29uZDogbgogICAgfTsKICAgIHZhciBEQVRFVElNRV9NRUQgPSB7CiAgICAgIHllYXI6IG4sCiAgICAgIG1vbnRoOiBzLAogICAgICBkYXk6IG4sCiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbgogICAgfTsKICAgIHZhciBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogcywKICAgICAgZGF5OiBuLAogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4sCiAgICAgIHNlY29uZDogbgogICAgfTsKICAgIHZhciBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZID0gewogICAgICB5ZWFyOiBuLAogICAgICBtb250aDogcywKICAgICAgZGF5OiBuLAogICAgICB3ZWVrZGF5OiBzLAogICAgICBob3VyOiBuLAogICAgICBtaW51dGU6IG4KICAgIH07CiAgICB2YXIgREFURVRJTUVfRlVMTCA9IHsKICAgICAgeWVhcjogbiwKICAgICAgbW9udGg6IGwsCiAgICAgIGRheTogbiwKICAgICAgaG91cjogbiwKICAgICAgbWludXRlOiBuLAogICAgICB0aW1lWm9uZU5hbWU6IHMKICAgIH07CiAgICB2YXIgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMgPSB7CiAgICAgIHllYXI6IG4sCiAgICAgIG1vbnRoOiBsLAogICAgICBkYXk6IG4sCiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbiwKICAgICAgc2Vjb25kOiBuLAogICAgICB0aW1lWm9uZU5hbWU6IHMKICAgIH07CiAgICB2YXIgREFURVRJTUVfSFVHRSA9IHsKICAgICAgeWVhcjogbiwKICAgICAgbW9udGg6IGwsCiAgICAgIGRheTogbiwKICAgICAgd2Vla2RheTogbCwKICAgICAgaG91cjogbiwKICAgICAgbWludXRlOiBuLAogICAgICB0aW1lWm9uZU5hbWU6IGwKICAgIH07CiAgICB2YXIgREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMgPSB7CiAgICAgIHllYXI6IG4sCiAgICAgIG1vbnRoOiBsLAogICAgICBkYXk6IG4sCiAgICAgIHdlZWtkYXk6IGwsCiAgICAgIGhvdXI6IG4sCiAgICAgIG1pbnV0ZTogbiwKICAgICAgc2Vjb25kOiBuLAogICAgICB0aW1lWm9uZU5hbWU6IGwKICAgIH07CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICAvLyBUWVBFUwoKICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG8pIHsKICAgICAgcmV0dXJuIHR5cGVvZiBvID09PSAidW5kZWZpbmVkIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnVtYmVyKG8pIHsKICAgICAgcmV0dXJuIHR5cGVvZiBvID09PSAibnVtYmVyIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7CiAgICAgIHJldHVybiB0eXBlb2YgbyA9PT0gIm51bWJlciIgJiYgbyAlIDEgPT09IDA7CiAgICB9CiAgICBmdW5jdGlvbiBpc1N0cmluZyhvKSB7CiAgICAgIHJldHVybiB0eXBlb2YgbyA9PT0gInN0cmluZyI7CiAgICB9CiAgICBmdW5jdGlvbiBpc0RhdGUobykgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAiW29iamVjdCBEYXRlXSI7CiAgICB9IC8vIENBUEFCSUxJVElFUwoKICAgIGZ1bmN0aW9uIGhhc1JlbGF0aXZlKCkgewogICAgICB0cnkgewogICAgICAgIHJldHVybiB0eXBlb2YgSW50bCAhPT0gInVuZGVmaW5lZCIgJiYgISFJbnRsLlJlbGF0aXZlVGltZUZvcm1hdDsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSAvLyBPQkpFQ1RTIEFORCBBUlJBWVMKCiAgICBmdW5jdGlvbiBtYXliZUFycmF5KHRoaW5nKSB7CiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaW5nKSA/IHRoaW5nIDogW3RoaW5nXTsKICAgIH0KICAgIGZ1bmN0aW9uIGJlc3RCeShhcnIsIGJ5LCBjb21wYXJlKSB7CiAgICAgIGlmIChhcnIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgfQoKICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKGJlc3QsIG5leHQpIHsKICAgICAgICB2YXIgcGFpciA9IFtieShuZXh0KSwgbmV4dF07CgogICAgICAgIGlmICghYmVzdCkgewogICAgICAgICAgcmV0dXJuIHBhaXI7CiAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlKGJlc3RbMF0sIHBhaXJbMF0pID09PSBiZXN0WzBdKSB7CiAgICAgICAgICByZXR1cm4gYmVzdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHBhaXI7CiAgICAgICAgfQogICAgICB9LCBudWxsKVsxXTsKICAgIH0KICAgIGZ1bmN0aW9uIHBpY2sob2JqLCBrZXlzKSB7CiAgICAgIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoYSwgaykgewogICAgICAgIGFba10gPSBvYmpba107CiAgICAgICAgcmV0dXJuIGE7CiAgICAgIH0sIHt9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7CiAgICB9IC8vIE5VTUJFUlMgQU5EIFNUUklOR1MKCiAgICBmdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHsKICAgICAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDsKICAgIH0gLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4CgogICAgZnVuY3Rpb24gZmxvb3JNb2QoeCwgbikgewogICAgICByZXR1cm4geCAtIG4gKiBNYXRoLmZsb29yKHggLyBuKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhZFN0YXJ0KGlucHV0LCBuKSB7CiAgICAgIGlmIChuID09PSB2b2lkIDApIHsKICAgICAgICBuID0gMjsKICAgICAgfQoKICAgICAgdmFyIG1pbnVzID0gaW5wdXQgPCAwID8gIi0iIDogIiI7CiAgICAgIHZhciB0YXJnZXQgPSBtaW51cyA/IGlucHV0ICogLTEgOiBpbnB1dDsKICAgICAgdmFyIHJlc3VsdDsKCiAgICAgIGlmICh0YXJnZXQudG9TdHJpbmcoKS5sZW5ndGggPCBuKSB7CiAgICAgICAgcmVzdWx0ID0gKCIwIi5yZXBlYXQobikgKyB0YXJnZXQpLnNsaWNlKC1uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSB0YXJnZXQudG9TdHJpbmcoKTsKICAgICAgfQoKICAgICAgcmV0dXJuICIiICsgbWludXMgKyByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBwYXJzZUludGVnZXIoc3RyaW5nKSB7CiAgICAgIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09ICIiKSB7CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nLCAxMCk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHBhcnNlTWlsbGlzKGZyYWN0aW9uKSB7CiAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgKGluc3RlYWQgb2YgMCkgaW4gdGhlc2UgY2FzZXMsIHdoZXJlIGZyYWN0aW9uIGlzIG5vdCBzZXQKICAgICAgaWYgKGlzVW5kZWZpbmVkKGZyYWN0aW9uKSB8fCBmcmFjdGlvbiA9PT0gbnVsbCB8fCBmcmFjdGlvbiA9PT0gIiIpIHsKICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBmID0gcGFyc2VGbG9hdCgiMC4iICsgZnJhY3Rpb24pICogMTAwMDsKICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihmKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcm91bmRUbyhudW1iZXIsIGRpZ2l0cywgdG93YXJkWmVybykgewogICAgICBpZiAodG93YXJkWmVybyA9PT0gdm9pZCAwKSB7CiAgICAgICAgdG93YXJkWmVybyA9IGZhbHNlOwogICAgICB9CgogICAgICB2YXIgZmFjdG9yID0gTWF0aC5wb3coMTAsIGRpZ2l0cyksCiAgICAgICAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kOwogICAgICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yOwogICAgfSAvLyBEQVRFIEJBU0lDUwoKICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikgewogICAgICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7CiAgICB9CiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHsKICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7CiAgICB9CiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkgewogICAgICB2YXIgbW9kTW9udGggPSBmbG9vck1vZChtb250aCAtIDEsIDEyKSArIDEsCiAgICAgICAgICBtb2RZZWFyID0geWVhciArIChtb250aCAtIG1vZE1vbnRoKSAvIDEyOwoKICAgICAgaWYgKG1vZE1vbnRoID09PSAyKSB7CiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdOwogICAgICB9CiAgICB9IC8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pCgogICAgZnVuY3Rpb24gb2JqVG9Mb2NhbFRTKG9iaikgewogICAgICB2YXIgZCA9IERhdGUuVVRDKG9iai55ZWFyLCBvYmoubW9udGggLSAxLCBvYmouZGF5LCBvYmouaG91ciwgb2JqLm1pbnV0ZSwgb2JqLnNlY29uZCwgb2JqLm1pbGxpc2Vjb25kKTsgLy8gZm9yIGxlZ2FjeSByZWFzb25zLCB5ZWFycyBiZXR3ZWVuIDAgYW5kIDk5IGFyZSBpbnRlcnByZXRlZCBhcyAxOVhYOyByZXZlcnQgdGhhdAoKICAgICAgaWYgKG9iai55ZWFyIDwgMTAwICYmIG9iai55ZWFyID49IDApIHsKICAgICAgICBkID0gbmV3IERhdGUoZCk7CiAgICAgICAgZC5zZXRVVENGdWxsWWVhcihkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwKTsKICAgICAgfQoKICAgICAgcmV0dXJuICtkOwogICAgfQogICAgZnVuY3Rpb24gd2Vla3NJbldlZWtZZWFyKHdlZWtZZWFyKSB7CiAgICAgIHZhciBwMSA9ICh3ZWVrWWVhciArIE1hdGguZmxvb3Iod2Vla1llYXIgLyA0KSAtIE1hdGguZmxvb3Iod2Vla1llYXIgLyAxMDApICsgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQwMCkpICUgNywKICAgICAgICAgIGxhc3QgPSB3ZWVrWWVhciAtIDEsCiAgICAgICAgICBwMiA9IChsYXN0ICsgTWF0aC5mbG9vcihsYXN0IC8gNCkgLSBNYXRoLmZsb29yKGxhc3QgLyAxMDApICsgTWF0aC5mbG9vcihsYXN0IC8gNDAwKSkgJSA3OwogICAgICByZXR1cm4gcDEgPT09IDQgfHwgcDIgPT09IDMgPyA1MyA6IDUyOwogICAgfQogICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhcikgewogICAgICBpZiAoeWVhciA+IDk5KSB7CiAgICAgICAgcmV0dXJuIHllYXI7CiAgICAgIH0gZWxzZSByZXR1cm4geWVhciA+IDYwID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjsKICAgIH0gLy8gUEFSU0lORwoKICAgIGZ1bmN0aW9uIHBhcnNlWm9uZUluZm8odHMsIG9mZnNldEZvcm1hdCwgbG9jYWxlLCB0aW1lWm9uZSkgewogICAgICBpZiAodGltZVpvbmUgPT09IHZvaWQgMCkgewogICAgICAgIHRpbWVab25lID0gbnVsbDsKICAgICAgfQoKICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0cyksCiAgICAgICAgICBpbnRsT3B0cyA9IHsKICAgICAgICBob3VyQ3ljbGU6ICJoMjMiLAogICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICBtb250aDogIjItZGlnaXQiLAogICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IgogICAgICB9OwoKICAgICAgaWYgKHRpbWVab25lKSB7CiAgICAgICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTsKICAgICAgfQoKICAgICAgdmFyIG1vZGlmaWVkID0gX2V4dGVuZHMoewogICAgICAgIHRpbWVab25lTmFtZTogb2Zmc2V0Rm9ybWF0CiAgICAgIH0sIGludGxPcHRzKTsKCiAgICAgIHZhciBwYXJzZWQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIG1vZGlmaWVkKS5mb3JtYXRUb1BhcnRzKGRhdGUpLmZpbmQoZnVuY3Rpb24gKG0pIHsKICAgICAgICByZXR1cm4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICJ0aW1lem9uZW5hbWUiOwogICAgICB9KTsKICAgICAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7CiAgICB9IC8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwCgogICAgZnVuY3Rpb24gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cikgewogICAgICB2YXIgb2ZmSG91ciA9IHBhcnNlSW50KG9mZkhvdXJTdHIsIDEwKTsgLy8gZG9uJ3QgfHwgdGhpcyBiZWNhdXNlIHdlIHdhbnQgdG8gcHJlc2VydmUgLTAKCiAgICAgIGlmIChOdW1iZXIuaXNOYU4ob2ZmSG91cikpIHsKICAgICAgICBvZmZIb3VyID0gMDsKICAgICAgfQoKICAgICAgdmFyIG9mZk1pbiA9IHBhcnNlSW50KG9mZk1pbnV0ZVN0ciwgMTApIHx8IDAsCiAgICAgICAgICBvZmZNaW5TaWduZWQgPSBvZmZIb3VyIDwgMCB8fCBPYmplY3QuaXMob2ZmSG91ciwgLTApID8gLW9mZk1pbiA6IG9mZk1pbjsKICAgICAgcmV0dXJuIG9mZkhvdXIgKiA2MCArIG9mZk1pblNpZ25lZDsKICAgIH0gLy8gQ09FUkNJT04KCiAgICBmdW5jdGlvbiBhc051bWJlcih2YWx1ZSkgewogICAgICB2YXIgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlKTsKICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gImJvb2xlYW4iIHx8IHZhbHVlID09PSAiIiB8fCBOdW1iZXIuaXNOYU4obnVtZXJpY1ZhbHVlKSkgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJJbnZhbGlkIHVuaXQgdmFsdWUgIiArIHZhbHVlKTsKICAgICAgcmV0dXJuIG51bWVyaWNWYWx1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdChvYmosIG5vcm1hbGl6ZXIpIHsKICAgICAgdmFyIG5vcm1hbGl6ZWQgPSB7fTsKCiAgICAgIGZvciAodmFyIHUgaW4gb2JqKSB7CiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG9iaiwgdSkpIHsKICAgICAgICAgIHZhciB2ID0gb2JqW3VdOwogICAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTsKICAgICAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBub3JtYWxpemVkOwogICAgfQogICAgZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KG9mZnNldCwgZm9ybWF0KSB7CiAgICAgIHZhciBob3VycyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSwKICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLnRydW5jKE1hdGguYWJzKG9mZnNldCAlIDYwKSksCiAgICAgICAgICBzaWduID0gb2Zmc2V0ID49IDAgPyAiKyIgOiAiLSI7CgogICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgICAgIGNhc2UgInNob3J0IjoKICAgICAgICAgIHJldHVybiAiIiArIHNpZ24gKyBwYWRTdGFydChob3VycywgMikgKyAiOiIgKyBwYWRTdGFydChtaW51dGVzLCAyKTsKCiAgICAgICAgY2FzZSAibmFycm93IjoKICAgICAgICAgIHJldHVybiAiIiArIHNpZ24gKyBob3VycyArIChtaW51dGVzID4gMCA/ICI6IiArIG1pbnV0ZXMgOiAiIik7CgogICAgICAgIGNhc2UgInRlY2hpZSI6CiAgICAgICAgICByZXR1cm4gIiIgKyBzaWduICsgcGFkU3RhcnQoaG91cnMsIDIpICsgcGFkU3RhcnQobWludXRlcywgMik7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVmFsdWUgZm9ybWF0ICIgKyBmb3JtYXQgKyAiIGlzIG91dCBvZiByYW5nZSBmb3IgcHJvcGVydHkgZm9ybWF0Iik7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHRpbWVPYmplY3Qob2JqKSB7CiAgICAgIHJldHVybiBwaWNrKG9iaiwgWyJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAibWlsbGlzZWNvbmQiXSk7CiAgICB9CiAgICB2YXIgaWFuYVJlZ2V4ID0gL1tBLVphLXpfKy1dezEsMjU2fSg6P1wvW0EtWmEtel8rLV17MSwyNTZ9KFwvW0EtWmEtel8rLV17MSwyNTZ9KT8pPy87CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgoKICAgIHZhciBtb250aHNMb25nID0gWyJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLCAiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIl07CiAgICB2YXIgbW9udGhzU2hvcnQgPSBbIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIl07CiAgICB2YXIgbW9udGhzTmFycm93ID0gWyJKIiwgIkYiLCAiTSIsICJBIiwgIk0iLCAiSiIsICJKIiwgIkEiLCAiUyIsICJPIiwgIk4iLCAiRCJdOwogICAgZnVuY3Rpb24gbW9udGhzKGxlbmd0aCkgewogICAgICBzd2l0Y2ggKGxlbmd0aCkgewogICAgICAgIGNhc2UgIm5hcnJvdyI6CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0KG1vbnRoc05hcnJvdyk7CgogICAgICAgIGNhc2UgInNob3J0IjoKICAgICAgICAgIHJldHVybiBbXS5jb25jYXQobW9udGhzU2hvcnQpOwoKICAgICAgICBjYXNlICJsb25nIjoKICAgICAgICAgIHJldHVybiBbXS5jb25jYXQobW9udGhzTG9uZyk7CgogICAgICAgIGNhc2UgIm51bWVyaWMiOgogICAgICAgICAgcmV0dXJuIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyIsICI4IiwgIjkiLCAiMTAiLCAiMTEiLCAiMTIiXTsKCiAgICAgICAgY2FzZSAiMi1kaWdpdCI6CiAgICAgICAgICByZXR1cm4gWyIwMSIsICIwMiIsICIwMyIsICIwNCIsICIwNSIsICIwNiIsICIwNyIsICIwOCIsICIwOSIsICIxMCIsICIxMSIsICIxMiJdOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHZhciB3ZWVrZGF5c0xvbmcgPSBbIk1vbmRheSIsICJUdWVzZGF5IiwgIldlZG5lc2RheSIsICJUaHVyc2RheSIsICJGcmlkYXkiLCAiU2F0dXJkYXkiLCAiU3VuZGF5Il07CiAgICB2YXIgd2Vla2RheXNTaG9ydCA9IFsiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl07CiAgICB2YXIgd2Vla2RheXNOYXJyb3cgPSBbIk0iLCAiVCIsICJXIiwgIlQiLCAiRiIsICJTIiwgIlMiXTsKICAgIGZ1bmN0aW9uIHdlZWtkYXlzKGxlbmd0aCkgewogICAgICBzd2l0Y2ggKGxlbmd0aCkgewogICAgICAgIGNhc2UgIm5hcnJvdyI6CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0KHdlZWtkYXlzTmFycm93KTsKCiAgICAgICAgY2FzZSAic2hvcnQiOgogICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdCh3ZWVrZGF5c1Nob3J0KTsKCiAgICAgICAgY2FzZSAibG9uZyI6CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0KHdlZWtkYXlzTG9uZyk7CgogICAgICAgIGNhc2UgIm51bWVyaWMiOgogICAgICAgICAgcmV0dXJuIFsiMSIsICIyIiwgIjMiLCAiNCIsICI1IiwgIjYiLCAiNyJdOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHZhciBtZXJpZGllbXMgPSBbIkFNIiwgIlBNIl07CiAgICB2YXIgZXJhc0xvbmcgPSBbIkJlZm9yZSBDaHJpc3QiLCAiQW5ubyBEb21pbmkiXTsKICAgIHZhciBlcmFzU2hvcnQgPSBbIkJDIiwgIkFEIl07CiAgICB2YXIgZXJhc05hcnJvdyA9IFsiQiIsICJBIl07CiAgICBmdW5jdGlvbiBlcmFzKGxlbmd0aCkgewogICAgICBzd2l0Y2ggKGxlbmd0aCkgewogICAgICAgIGNhc2UgIm5hcnJvdyI6CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0KGVyYXNOYXJyb3cpOwoKICAgICAgICBjYXNlICJzaG9ydCI6CiAgICAgICAgICByZXR1cm4gW10uY29uY2F0KGVyYXNTaG9ydCk7CgogICAgICAgIGNhc2UgImxvbmciOgogICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdChlcmFzTG9uZyk7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbWVyaWRpZW1Gb3JEYXRlVGltZShkdCkgewogICAgICByZXR1cm4gbWVyaWRpZW1zW2R0LmhvdXIgPCAxMiA/IDAgOiAxXTsKICAgIH0KICAgIGZ1bmN0aW9uIHdlZWtkYXlGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7CiAgICAgIHJldHVybiB3ZWVrZGF5cyhsZW5ndGgpW2R0LndlZWtkYXkgLSAxXTsKICAgIH0KICAgIGZ1bmN0aW9uIG1vbnRoRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgewogICAgICByZXR1cm4gbW9udGhzKGxlbmd0aClbZHQubW9udGggLSAxXTsKICAgIH0KICAgIGZ1bmN0aW9uIGVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHsKICAgICAgcmV0dXJuIGVyYXMobGVuZ3RoKVtkdC55ZWFyIDwgMCA/IDAgOiAxXTsKICAgIH0KICAgIGZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlVGltZSh1bml0LCBjb3VudCwgbnVtZXJpYywgbmFycm93KSB7CiAgICAgIGlmIChudW1lcmljID09PSB2b2lkIDApIHsKICAgICAgICBudW1lcmljID0gImFsd2F5cyI7CiAgICAgIH0KCiAgICAgIGlmIChuYXJyb3cgPT09IHZvaWQgMCkgewogICAgICAgIG5hcnJvdyA9IGZhbHNlOwogICAgICB9CgogICAgICB2YXIgdW5pdHMgPSB7CiAgICAgICAgeWVhcnM6IFsieWVhciIsICJ5ci4iXSwKICAgICAgICBxdWFydGVyczogWyJxdWFydGVyIiwgInF0ci4iXSwKICAgICAgICBtb250aHM6IFsibW9udGgiLCAibW8uIl0sCiAgICAgICAgd2Vla3M6IFsid2VlayIsICJ3ay4iXSwKICAgICAgICBkYXlzOiBbImRheSIsICJkYXkiLCAiZGF5cyJdLAogICAgICAgIGhvdXJzOiBbImhvdXIiLCAiaHIuIl0sCiAgICAgICAgbWludXRlczogWyJtaW51dGUiLCAibWluLiJdLAogICAgICAgIHNlY29uZHM6IFsic2Vjb25kIiwgInNlYy4iXQogICAgICB9OwogICAgICB2YXIgbGFzdGFibGUgPSBbImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyJdLmluZGV4T2YodW5pdCkgPT09IC0xOwoKICAgICAgaWYgKG51bWVyaWMgPT09ICJhdXRvIiAmJiBsYXN0YWJsZSkgewogICAgICAgIHZhciBpc0RheSA9IHVuaXQgPT09ICJkYXlzIjsKCiAgICAgICAgc3dpdGNoIChjb3VudCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gaXNEYXkgPyAidG9tb3Jyb3ciIDogIm5leHQgIiArIHVuaXRzW3VuaXRdWzBdOwoKICAgICAgICAgIGNhc2UgLTE6CiAgICAgICAgICAgIHJldHVybiBpc0RheSA/ICJ5ZXN0ZXJkYXkiIDogImxhc3QgIiArIHVuaXRzW3VuaXRdWzBdOwoKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgcmV0dXJuIGlzRGF5ID8gInRvZGF5IiA6ICJ0aGlzICIgKyB1bml0c1t1bml0XVswXTsKCiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgaXNJblBhc3QgPSBPYmplY3QuaXMoY291bnQsIC0wKSB8fCBjb3VudCA8IDAsCiAgICAgICAgICBmbXRWYWx1ZSA9IE1hdGguYWJzKGNvdW50KSwKICAgICAgICAgIHNpbmd1bGFyID0gZm10VmFsdWUgPT09IDEsCiAgICAgICAgICBsaWxVbml0cyA9IHVuaXRzW3VuaXRdLAogICAgICAgICAgZm10VW5pdCA9IG5hcnJvdyA/IHNpbmd1bGFyID8gbGlsVW5pdHNbMV0gOiBsaWxVbml0c1syXSB8fCBsaWxVbml0c1sxXSA6IHNpbmd1bGFyID8gdW5pdHNbdW5pdF1bMF0gOiB1bml0OwogICAgICByZXR1cm4gaXNJblBhc3QgPyBmbXRWYWx1ZSArICIgIiArIGZtdFVuaXQgKyAiIGFnbyIgOiAiaW4gIiArIGZtdFZhbHVlICsgIiAiICsgZm10VW5pdDsKICAgIH0KCiAgICBmdW5jdGlvbiBzdHJpbmdpZnlUb2tlbnMoc3BsaXRzLCB0b2tlblRvU3RyaW5nKSB7CiAgICAgIHZhciBzID0gIiI7CgogICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKHNwbGl0cyksIF9zdGVwOyAhKF9zdGVwID0gX2l0ZXJhdG9yKCkpLmRvbmU7KSB7CiAgICAgICAgdmFyIHRva2VuID0gX3N0ZXAudmFsdWU7CgogICAgICAgIGlmICh0b2tlbi5saXRlcmFsKSB7CiAgICAgICAgICBzICs9IHRva2VuLnZhbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcyArPSB0b2tlblRvU3RyaW5nKHRva2VuLnZhbCk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gczsKICAgIH0KCiAgICB2YXIgX21hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMgPSB7CiAgICAgIEQ6IERBVEVfU0hPUlQsCiAgICAgIEREOiBEQVRFX01FRCwKICAgICAgREREOiBEQVRFX0ZVTEwsCiAgICAgIEREREQ6IERBVEVfSFVHRSwKICAgICAgdDogVElNRV9TSU1QTEUsCiAgICAgIHR0OiBUSU1FX1dJVEhfU0VDT05EUywKICAgICAgdHR0OiBUSU1FX1dJVEhfU0hPUlRfT0ZGU0VULAogICAgICB0dHR0OiBUSU1FX1dJVEhfTE9OR19PRkZTRVQsCiAgICAgIFQ6IFRJTUVfMjRfU0lNUExFLAogICAgICBUVDogVElNRV8yNF9XSVRIX1NFQ09ORFMsCiAgICAgIFRUVDogVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCwKICAgICAgVFRUVDogVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VULAogICAgICBmOiBEQVRFVElNRV9TSE9SVCwKICAgICAgZmY6IERBVEVUSU1FX01FRCwKICAgICAgZmZmOiBEQVRFVElNRV9GVUxMLAogICAgICBmZmZmOiBEQVRFVElNRV9IVUdFLAogICAgICBGOiBEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMsCiAgICAgIEZGOiBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTLAogICAgICBGRkY6IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTLAogICAgICBGRkZGOiBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUwogICAgfTsKICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwoKICAgIHZhciBGb3JtYXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBGb3JtYXR0ZXIuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGxvY2FsZSwgb3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgRm9ybWF0dGVyKGxvY2FsZSwgb3B0cyk7CiAgICAgIH07CgogICAgICBGb3JtYXR0ZXIucGFyc2VGb3JtYXQgPSBmdW5jdGlvbiBwYXJzZUZvcm1hdChmbXQpIHsKICAgICAgICB2YXIgY3VycmVudCA9IG51bGwsCiAgICAgICAgICAgIGN1cnJlbnRGdWxsID0gIiIsCiAgICAgICAgICAgIGJyYWNrZXRlZCA9IGZhbHNlOwogICAgICAgIHZhciBzcGxpdHMgPSBbXTsKCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhciBjID0gZm10LmNoYXJBdChpKTsKCiAgICAgICAgICBpZiAoYyA9PT0gIiciKSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgc3BsaXRzLnB1c2goewogICAgICAgICAgICAgICAgbGl0ZXJhbDogYnJhY2tldGVkLAogICAgICAgICAgICAgICAgdmFsOiBjdXJyZW50RnVsbAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgICAgICAgY3VycmVudEZ1bGwgPSAiIjsKICAgICAgICAgICAgYnJhY2tldGVkID0gIWJyYWNrZXRlZDsKICAgICAgICAgIH0gZWxzZSBpZiAoYnJhY2tldGVkKSB7CiAgICAgICAgICAgIGN1cnJlbnRGdWxsICs9IGM7CiAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IGN1cnJlbnQpIHsKICAgICAgICAgICAgY3VycmVudEZ1bGwgKz0gYzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChjdXJyZW50RnVsbC5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgc3BsaXRzLnB1c2goewogICAgICAgICAgICAgICAgbGl0ZXJhbDogZmFsc2UsCiAgICAgICAgICAgICAgICB2YWw6IGN1cnJlbnRGdWxsCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGN1cnJlbnRGdWxsID0gYzsKICAgICAgICAgICAgY3VycmVudCA9IGM7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY3VycmVudEZ1bGwubGVuZ3RoID4gMCkgewogICAgICAgICAgc3BsaXRzLnB1c2goewogICAgICAgICAgICBsaXRlcmFsOiBicmFja2V0ZWQsCiAgICAgICAgICAgIHZhbDogY3VycmVudEZ1bGwKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNwbGl0czsKICAgICAgfTsKCiAgICAgIEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0gZnVuY3Rpb24gbWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbikgewogICAgICAgIHJldHVybiBfbWFjcm9Ub2tlblRvRm9ybWF0T3B0c1t0b2tlbl07CiAgICAgIH07CgogICAgICBmdW5jdGlvbiBGb3JtYXR0ZXIobG9jYWxlLCBmb3JtYXRPcHRzKSB7CiAgICAgICAgdGhpcy5vcHRzID0gZm9ybWF0T3B0czsKICAgICAgICB0aGlzLmxvYyA9IGxvY2FsZTsKICAgICAgICB0aGlzLnN5c3RlbUxvYyA9IG51bGw7CiAgICAgIH0KCiAgICAgIHZhciBfcHJvdG8gPSBGb3JtYXR0ZXIucHJvdG90eXBlOwoKICAgICAgX3Byb3RvLmZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0ID0gZnVuY3Rpb24gZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIG9wdHMpIHsKICAgICAgICBpZiAodGhpcy5zeXN0ZW1Mb2MgPT09IG51bGwpIHsKICAgICAgICAgIHRoaXMuc3lzdGVtTG9jID0gdGhpcy5sb2MucmVkZWZhdWx0VG9TeXN0ZW0oKTsKICAgICAgICB9CgogICAgICAgIHZhciBkZiA9IHRoaXMuc3lzdGVtTG9jLmR0Rm9ybWF0dGVyKGR0LCBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzLCBvcHRzKSk7CiAgICAgICAgcmV0dXJuIGRmLmZvcm1hdCgpOwogICAgICB9OwoKICAgICAgX3Byb3RvLmZvcm1hdERhdGVUaW1lID0gZnVuY3Rpb24gZm9ybWF0RGF0ZVRpbWUoZHQsIG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICB2YXIgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgX2V4dGVuZHMoe30sIHRoaXMub3B0cywgb3B0cykpOwogICAgICAgIHJldHVybiBkZi5mb3JtYXQoKTsKICAgICAgfTsKCiAgICAgIF9wcm90by5mb3JtYXREYXRlVGltZVBhcnRzID0gZnVuY3Rpb24gZm9ybWF0RGF0ZVRpbWVQYXJ0cyhkdCwgb3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIHZhciBkZiA9IHRoaXMubG9jLmR0Rm9ybWF0dGVyKGR0LCBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzLCBvcHRzKSk7CiAgICAgICAgcmV0dXJuIGRmLmZvcm1hdFRvUGFydHMoKTsKICAgICAgfTsKCiAgICAgIF9wcm90by5yZXNvbHZlZE9wdGlvbnMgPSBmdW5jdGlvbiByZXNvbHZlZE9wdGlvbnMoZHQsIG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICB2YXIgZGYgPSB0aGlzLmxvYy5kdEZvcm1hdHRlcihkdCwgX2V4dGVuZHMoe30sIHRoaXMub3B0cywgb3B0cykpOwogICAgICAgIHJldHVybiBkZi5yZXNvbHZlZE9wdGlvbnMoKTsKICAgICAgfTsKCiAgICAgIF9wcm90by5udW0gPSBmdW5jdGlvbiBudW0obiwgcCkgewogICAgICAgIGlmIChwID09PSB2b2lkIDApIHsKICAgICAgICAgIHAgPSAwOwogICAgICAgIH0KCiAgICAgICAgLy8gd2UgZ2V0IHNvbWUgcGVyZiBvdXQgb2YgZG9pbmcgdGhpcyBoZXJlLCBhbm5veWluZ2x5CiAgICAgICAgaWYgKHRoaXMub3B0cy5mb3JjZVNpbXBsZSkgewogICAgICAgICAgcmV0dXJuIHBhZFN0YXJ0KG4sIHApOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9wdHMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzKTsKCiAgICAgICAgaWYgKHAgPiAwKSB7CiAgICAgICAgICBvcHRzLnBhZFRvID0gcDsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmxvYy5udW1iZXJGb3JtYXR0ZXIob3B0cykuZm9ybWF0KG4pOwogICAgICB9OwoKICAgICAgX3Byb3RvLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyA9IGZ1bmN0aW9uIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgdmFyIGtub3duRW5nbGlzaCA9IHRoaXMubG9jLmxpc3RpbmdNb2RlKCkgPT09ICJlbiIsCiAgICAgICAgICAgIHVzZURhdGVUaW1lRm9ybWF0dGVyID0gdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgJiYgdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgIT09ICJncmVnb3J5IiwKICAgICAgICAgICAgc3RyaW5nID0gZnVuY3Rpb24gc3RyaW5nKG9wdHMsIGV4dHJhY3QpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5sb2MuZXh0cmFjdChkdCwgb3B0cywgZXh0cmFjdCk7CiAgICAgICAgfSwKICAgICAgICAgICAgZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KG9wdHMpIHsKICAgICAgICAgIGlmIChkdC5pc09mZnNldEZpeGVkICYmIGR0Lm9mZnNldCA9PT0gMCAmJiBvcHRzLmFsbG93WikgewogICAgICAgICAgICByZXR1cm4gIloiOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiBkdC5pc1ZhbGlkID8gZHQuem9uZS5mb3JtYXRPZmZzZXQoZHQudHMsIG9wdHMuZm9ybWF0KSA6ICIiOwogICAgICAgIH0sCiAgICAgICAgICAgIG1lcmlkaWVtID0gZnVuY3Rpb24gbWVyaWRpZW0oKSB7CiAgICAgICAgICByZXR1cm4ga25vd25FbmdsaXNoID8gbWVyaWRpZW1Gb3JEYXRlVGltZShkdCkgOiBzdHJpbmcoewogICAgICAgICAgICBob3VyOiAibnVtZXJpYyIsCiAgICAgICAgICAgIGhvdXJDeWNsZTogImgxMiIKICAgICAgICAgIH0sICJkYXlwZXJpb2QiKTsKICAgICAgICB9LAogICAgICAgICAgICBtb250aCA9IGZ1bmN0aW9uIG1vbnRoKGxlbmd0aCwgc3RhbmRhbG9uZSkgewogICAgICAgICAgcmV0dXJuIGtub3duRW5nbGlzaCA/IG1vbnRoRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkgOiBzdHJpbmcoc3RhbmRhbG9uZSA/IHsKICAgICAgICAgICAgbW9udGg6IGxlbmd0aAogICAgICAgICAgfSA6IHsKICAgICAgICAgICAgbW9udGg6IGxlbmd0aCwKICAgICAgICAgICAgZGF5OiAibnVtZXJpYyIKICAgICAgICAgIH0sICJtb250aCIpOwogICAgICAgIH0sCiAgICAgICAgICAgIHdlZWtkYXkgPSBmdW5jdGlvbiB3ZWVrZGF5KGxlbmd0aCwgc3RhbmRhbG9uZSkgewogICAgICAgICAgcmV0dXJuIGtub3duRW5nbGlzaCA/IHdlZWtkYXlGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSA6IHN0cmluZyhzdGFuZGFsb25lID8gewogICAgICAgICAgICB3ZWVrZGF5OiBsZW5ndGgKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIHdlZWtkYXk6IGxlbmd0aCwKICAgICAgICAgICAgbW9udGg6ICJsb25nIiwKICAgICAgICAgICAgZGF5OiAibnVtZXJpYyIKICAgICAgICAgIH0sICJ3ZWVrZGF5Iik7CiAgICAgICAgfSwKICAgICAgICAgICAgbWF5YmVNYWNybyA9IGZ1bmN0aW9uIG1heWJlTWFjcm8odG9rZW4pIHsKICAgICAgICAgIHZhciBmb3JtYXRPcHRzID0gRm9ybWF0dGVyLm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pOwoKICAgICAgICAgIGlmIChmb3JtYXRPcHRzKSB7CiAgICAgICAgICAgIHJldHVybiBfdGhpcy5mb3JtYXRXaXRoU3lzdGVtRGVmYXVsdChkdCwgZm9ybWF0T3B0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAgICAgZXJhID0gZnVuY3Rpb24gZXJhKGxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIGtub3duRW5nbGlzaCA/IGVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHsKICAgICAgICAgICAgZXJhOiBsZW5ndGgKICAgICAgICAgIH0sICJlcmEiKTsKICAgICAgICB9LAogICAgICAgICAgICB0b2tlblRvU3RyaW5nID0gZnVuY3Rpb24gdG9rZW5Ub1N0cmluZyh0b2tlbikgewogICAgICAgICAgLy8gV2hlcmUgcG9zc2libGU6IGh0dHA6Ly9jbGRyLnVuaWNvZGUub3JnL3RyYW5zbGF0aW9uL2RhdGUtdGltZS0xL2RhdGUtdGltZSNUT0MtU3RhbmRhbG9uZS12cy4tRm9ybWF0LVN0eWxlcwogICAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgICAvLyBtcwogICAgICAgICAgICBjYXNlICJTIjoKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0Lm1pbGxpc2Vjb25kKTsKCiAgICAgICAgICAgIGNhc2UgInUiOiAvLyBmYWxscyB0aHJvdWdoCgogICAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQubWlsbGlzZWNvbmQsIDMpOwogICAgICAgICAgICAvLyBzZWNvbmRzCgogICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnNlY29uZCk7CgogICAgICAgICAgICBjYXNlICJzcyI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5zZWNvbmQsIDIpOwogICAgICAgICAgICAvLyBtaW51dGVzCgogICAgICAgICAgICBjYXNlICJtIjoKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0Lm1pbnV0ZSk7CgogICAgICAgICAgICBjYXNlICJtbSI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5taW51dGUsIDIpOwogICAgICAgICAgICAvLyBob3VycwoKICAgICAgICAgICAgY2FzZSAiaCI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMik7CgogICAgICAgICAgICBjYXNlICJoaCI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7CgogICAgICAgICAgICBjYXNlICJIIjoKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LmhvdXIpOwoKICAgICAgICAgICAgY2FzZSAiSEgiOgogICAgICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQuaG91ciwgMik7CiAgICAgICAgICAgIC8vIG9mZnNldAoKICAgICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICAgICAgLy8gbGlrZSArNgogICAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoewogICAgICAgICAgICAgICAgZm9ybWF0OiAibmFycm93IiwKICAgICAgICAgICAgICAgIGFsbG93WjogX3RoaXMub3B0cy5hbGxvd1oKICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGNhc2UgIlpaIjoKICAgICAgICAgICAgICAvLyBsaWtlICswNjowMAogICAgICAgICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQoewogICAgICAgICAgICAgICAgZm9ybWF0OiAic2hvcnQiLAogICAgICAgICAgICAgICAgYWxsb3daOiBfdGhpcy5vcHRzLmFsbG93WgogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgY2FzZSAiWlpaIjoKICAgICAgICAgICAgICAvLyBsaWtlICswNjAwCiAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7CiAgICAgICAgICAgICAgICBmb3JtYXQ6ICJ0ZWNoaWUiLAogICAgICAgICAgICAgICAgYWxsb3daOiBfdGhpcy5vcHRzLmFsbG93WgogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgY2FzZSAiWlpaWiI6CiAgICAgICAgICAgICAgLy8gbGlrZSBFU1QKICAgICAgICAgICAgICByZXR1cm4gZHQuem9uZS5vZmZzZXROYW1lKGR0LnRzLCB7CiAgICAgICAgICAgICAgICBmb3JtYXQ6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBsb2NhbGU6IF90aGlzLmxvYy5sb2NhbGUKICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGNhc2UgIlpaWlpaIjoKICAgICAgICAgICAgICAvLyBsaWtlIEVhc3Rlcm4gU3RhbmRhcmQgVGltZQogICAgICAgICAgICAgIHJldHVybiBkdC56b25lLm9mZnNldE5hbWUoZHQudHMsIHsKICAgICAgICAgICAgICAgIGZvcm1hdDogImxvbmciLAogICAgICAgICAgICAgICAgbG9jYWxlOiBfdGhpcy5sb2MubG9jYWxlCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIC8vIHpvbmUKCiAgICAgICAgICAgIGNhc2UgInoiOgogICAgICAgICAgICAgIC8vIGxpa2UgQW1lcmljYS9OZXdfWW9yawogICAgICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTsKICAgICAgICAgICAgLy8gbWVyaWRpZW1zCgogICAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgICAgICByZXR1cm4gbWVyaWRpZW0oKTsKICAgICAgICAgICAgLy8gZGF0ZXMKCiAgICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CiAgICAgICAgICAgICAgICBkYXk6ICJudW1lcmljIgogICAgICAgICAgICAgIH0sICJkYXkiKSA6IF90aGlzLm51bShkdC5kYXkpOwoKICAgICAgICAgICAgY2FzZSAiZGQiOgogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CiAgICAgICAgICAgICAgICBkYXk6ICIyLWRpZ2l0IgogICAgICAgICAgICAgIH0sICJkYXkiKSA6IF90aGlzLm51bShkdC5kYXksIDIpOwogICAgICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmUKCiAgICAgICAgICAgIGNhc2UgImMiOgogICAgICAgICAgICAgIC8vIGxpa2UgMQogICAgICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQud2Vla2RheSk7CgogICAgICAgICAgICBjYXNlICJjY2MiOgogICAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXMnCiAgICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoInNob3J0IiwgdHJ1ZSk7CgogICAgICAgICAgICBjYXNlICJjY2NjIjoKICAgICAgICAgICAgICAvLyBsaWtlICdUdWVzZGF5JwogICAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJsb25nIiwgdHJ1ZSk7CgogICAgICAgICAgICBjYXNlICJjY2NjYyI6CiAgICAgICAgICAgICAgLy8gbGlrZSAnVCcKICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSgibmFycm93IiwgdHJ1ZSk7CiAgICAgICAgICAgIC8vIHdlZWtkYXlzIC0gZm9ybWF0CgogICAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgICAgICAvLyBsaWtlIDEKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LndlZWtkYXkpOwoKICAgICAgICAgICAgY2FzZSAiRUVFIjoKICAgICAgICAgICAgICAvLyBsaWtlICdUdWVzJwogICAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5KCJzaG9ydCIsIGZhbHNlKTsKCiAgICAgICAgICAgIGNhc2UgIkVFRUUiOgogICAgICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknCiAgICAgICAgICAgICAgcmV0dXJuIHdlZWtkYXkoImxvbmciLCBmYWxzZSk7CgogICAgICAgICAgICBjYXNlICJFRUVFRSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAnVCcKICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSgibmFycm93IiwgZmFsc2UpOwogICAgICAgICAgICAvLyBtb250aHMgLSBzdGFuZGFsb25lCgogICAgICAgICAgICBjYXNlICJMIjoKICAgICAgICAgICAgICAvLyBsaWtlIDEKICAgICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewogICAgICAgICAgICAgICAgbW9udGg6ICJudW1lcmljIiwKICAgICAgICAgICAgICAgIGRheTogIm51bWVyaWMiCiAgICAgICAgICAgICAgfSwgIm1vbnRoIikgOiBfdGhpcy5udW0oZHQubW9udGgpOwoKICAgICAgICAgICAgY2FzZSAiTEwiOgogICAgICAgICAgICAgIC8vIGxpa2UgMDEsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKICAgICAgICAgICAgICAgIG1vbnRoOiAiMi1kaWdpdCIsCiAgICAgICAgICAgICAgICBkYXk6ICJudW1lcmljIgogICAgICAgICAgICAgIH0sICJtb250aCIpIDogX3RoaXMubnVtKGR0Lm1vbnRoLCAyKTsKCiAgICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgICAgLy8gbGlrZSBKYW4KICAgICAgICAgICAgICByZXR1cm4gbW9udGgoInNob3J0IiwgdHJ1ZSk7CgogICAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgICAgICAvLyBsaWtlIEphbnVhcnkKICAgICAgICAgICAgICByZXR1cm4gbW9udGgoImxvbmciLCB0cnVlKTsKCiAgICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgICAvLyBsaWtlIEoKICAgICAgICAgICAgICByZXR1cm4gbW9udGgoIm5hcnJvdyIsIHRydWUpOwogICAgICAgICAgICAvLyBtb250aHMgLSBmb3JtYXQKCiAgICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICAgIC8vIGxpa2UgMQogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CiAgICAgICAgICAgICAgICBtb250aDogIm51bWVyaWMiCiAgICAgICAgICAgICAgfSwgIm1vbnRoIikgOiBfdGhpcy5udW0oZHQubW9udGgpOwoKICAgICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICAgIC8vIGxpa2UgMDEKICAgICAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoewogICAgICAgICAgICAgICAgbW9udGg6ICIyLWRpZ2l0IgogICAgICAgICAgICAgIH0sICJtb250aCIpIDogX3RoaXMubnVtKGR0Lm1vbnRoLCAyKTsKCiAgICAgICAgICAgIGNhc2UgIk1NTSI6CiAgICAgICAgICAgICAgLy8gbGlrZSBKYW4KICAgICAgICAgICAgICByZXR1cm4gbW9udGgoInNob3J0IiwgZmFsc2UpOwoKICAgICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICAgICAgLy8gbGlrZSBKYW51YXJ5CiAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoKCJsb25nIiwgZmFsc2UpOwoKICAgICAgICAgICAgY2FzZSAiTU1NTU0iOgogICAgICAgICAgICAgIC8vIGxpa2UgSgogICAgICAgICAgICAgIHJldHVybiBtb250aCgibmFycm93IiwgZmFsc2UpOwogICAgICAgICAgICAvLyB5ZWFycwoKICAgICAgICAgICAgY2FzZSAieSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAyMDE0CiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKICAgICAgICAgICAgICAgIHllYXI6ICJudW1lcmljIgogICAgICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhcik7CgogICAgICAgICAgICBjYXNlICJ5eSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAxNAogICAgICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7CiAgICAgICAgICAgICAgICB5ZWFyOiAiMi1kaWdpdCIKICAgICAgICAgICAgICB9LCAieWVhciIpIDogX3RoaXMubnVtKGR0LnllYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpOwoKICAgICAgICAgICAgY2FzZSAieXl5eSI6CiAgICAgICAgICAgICAgLy8gbGlrZSAwMDEyCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKICAgICAgICAgICAgICAgIHllYXI6ICJudW1lcmljIgogICAgICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhciwgNCk7CgogICAgICAgICAgICBjYXNlICJ5eXl5eXkiOgogICAgICAgICAgICAgIC8vIGxpa2UgMDAwMDEyCiAgICAgICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHsKICAgICAgICAgICAgICAgIHllYXI6ICJudW1lcmljIgogICAgICAgICAgICAgIH0sICJ5ZWFyIikgOiBfdGhpcy5udW0oZHQueWVhciwgNik7CiAgICAgICAgICAgIC8vIGVyYXMKCiAgICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgICAgIC8vIGxpa2UgQUQKICAgICAgICAgICAgICByZXR1cm4gZXJhKCJzaG9ydCIpOwoKICAgICAgICAgICAgY2FzZSAiR0ciOgogICAgICAgICAgICAgIC8vIGxpa2UgQW5ubyBEb21pbmkKICAgICAgICAgICAgICByZXR1cm4gZXJhKCJsb25nIik7CgogICAgICAgICAgICBjYXNlICJHR0dHRyI6CiAgICAgICAgICAgICAgcmV0dXJuIGVyYSgibmFycm93Iik7CgogICAgICAgICAgICBjYXNlICJrayI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC53ZWVrWWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7CgogICAgICAgICAgICBjYXNlICJra2trIjoKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LndlZWtZZWFyLCA0KTsKCiAgICAgICAgICAgIGNhc2UgIlciOgogICAgICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQud2Vla051bWJlcik7CgogICAgICAgICAgICBjYXNlICJXVyI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC53ZWVrTnVtYmVyLCAyKTsKCiAgICAgICAgICAgIGNhc2UgIm8iOgogICAgICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQub3JkaW5hbCk7CgogICAgICAgICAgICBjYXNlICJvb28iOgogICAgICAgICAgICAgIHJldHVybiBfdGhpcy5udW0oZHQub3JkaW5hbCwgMyk7CgogICAgICAgICAgICBjYXNlICJxIjoKICAgICAgICAgICAgICAvLyBsaWtlIDEKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnF1YXJ0ZXIpOwoKICAgICAgICAgICAgY2FzZSAicXEiOgogICAgICAgICAgICAgIC8vIGxpa2UgMDEKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpOwoKICAgICAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShNYXRoLmZsb29yKGR0LnRzIC8gMTAwMCkpOwoKICAgICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm51bShkdC50cyk7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBtYXliZU1hY3JvKHRva2VuKTsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCB0b2tlblRvU3RyaW5nKTsKICAgICAgfTsKCiAgICAgIF9wcm90by5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcgPSBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbkZyb21TdHJpbmcoZHVyLCBmbXQpIHsKICAgICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgICAgdmFyIHRva2VuVG9GaWVsZCA9IGZ1bmN0aW9uIHRva2VuVG9GaWVsZCh0b2tlbikgewogICAgICAgICAgc3dpdGNoICh0b2tlblswXSkgewogICAgICAgICAgICBjYXNlICJTIjoKICAgICAgICAgICAgICByZXR1cm4gIm1pbGxpc2Vjb25kIjsKCiAgICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICAgIHJldHVybiAic2Vjb25kIjsKCiAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgIHJldHVybiAibWludXRlIjsKCiAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgIHJldHVybiAiaG91ciI7CgogICAgICAgICAgICBjYXNlICJkIjoKICAgICAgICAgICAgICByZXR1cm4gImRheSI7CgogICAgICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgICByZXR1cm4gIm1vbnRoIjsKCiAgICAgICAgICAgIGNhc2UgInkiOgogICAgICAgICAgICAgIHJldHVybiAieWVhciI7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgICAgIHRva2VuVG9TdHJpbmcgPSBmdW5jdGlvbiB0b2tlblRvU3RyaW5nKGxpbGR1cikgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0b2tlbikgewogICAgICAgICAgICB2YXIgbWFwcGVkID0gdG9rZW5Ub0ZpZWxkKHRva2VuKTsKCiAgICAgICAgICAgIGlmIChtYXBwZWQpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgICAgIHRva2VucyA9IEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLAogICAgICAgICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZShmdW5jdGlvbiAoZm91bmQsIF9yZWYpIHsKICAgICAgICAgIHZhciBsaXRlcmFsID0gX3JlZi5saXRlcmFsLAogICAgICAgICAgICAgIHZhbCA9IF9yZWYudmFsOwogICAgICAgICAgcmV0dXJuIGxpdGVyYWwgPyBmb3VuZCA6IGZvdW5kLmNvbmNhdCh2YWwpOwogICAgICAgIH0sIFtdKSwKICAgICAgICAgICAgY29sbGFwc2VkID0gZHVyLnNoaWZ0VG8uYXBwbHkoZHVyLCByZWFsVG9rZW5zLm1hcCh0b2tlblRvRmllbGQpLmZpbHRlcihmdW5jdGlvbiAodCkgewogICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgfSkpOwoKICAgICAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKHRva2VucywgdG9rZW5Ub1N0cmluZyhjb2xsYXBzZWQpKTsKICAgICAgfTsKCiAgICAgIHJldHVybiBGb3JtYXR0ZXI7CiAgICB9KCk7CgogICAgdmFyIEludmFsaWQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvbjsKICAgICAgICB0aGlzLmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb247CiAgICAgIH0KCiAgICAgIHZhciBfcHJvdG8gPSBJbnZhbGlkLnByb3RvdHlwZTsKCiAgICAgIF9wcm90by50b01lc3NhZ2UgPSBmdW5jdGlvbiB0b01lc3NhZ2UoKSB7CiAgICAgICAgaWYgKHRoaXMuZXhwbGFuYXRpb24pIHsKICAgICAgICAgIHJldHVybiB0aGlzLnJlYXNvbiArICI6ICIgKyB0aGlzLmV4cGxhbmF0aW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5yZWFzb247CiAgICAgICAgfQogICAgICB9OwoKICAgICAgcmV0dXJuIEludmFsaWQ7CiAgICB9KCk7CgogICAgLyoqCiAgICAgKiBAaW50ZXJmYWNlCiAgICAgKi8KCiAgICB2YXIgWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgIGZ1bmN0aW9uIFpvbmUoKSB7fQoKICAgICAgdmFyIF9wcm90byA9IFpvbmUucHJvdG90eXBlOwoKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAKICAgICAgICogQGFic3RyYWN0CiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSh0cywgb3B0cykgewogICAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIG9mZnNldCdzIHZhbHVlIGFzIGEgc3RyaW5nCiAgICAgICAqIEBhYnN0cmFjdAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGdldCB0aGUgb2Zmc2V0CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRzICduYXJyb3cnLCAnc2hvcnQnLCBvciAndGVjaGllJy4gUmV0dXJuaW5nICcrNicsICcrMDY6MDAnLCBvciAnKzA2MDAnIHJlc3BlY3RpdmVseQogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHsKICAgICAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gdGhlIG9mZnNldCBpbiBtaW51dGVzIGZvciB0aGlzIHpvbmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXAuCiAgICAgICAqIEBhYnN0cmFjdAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gdHMgLSBFcG9jaCBtaWxsaXNlY29uZHMgZm9yIHdoaWNoIHRvIGNvbXB1dGUgdGhlIG9mZnNldAogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CiAgICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIGVxdWFsIHRvIGFub3RoZXIgem9uZQogICAgICAgKiBAYWJzdHJhY3QKICAgICAgICogQHBhcmFtIHtab25lfSBvdGhlclpvbmUgLSB0aGUgem9uZSB0byBjb21wYXJlCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewogICAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgWm9uZSBpcyB2YWxpZC4KICAgICAgICogQGFic3RyYWN0CiAgICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX2NyZWF0ZUNsYXNzKFpvbmUsIFt7CiAgICAgICAga2V5OiAidHlwZSIsCiAgICAgICAgZ2V0OgogICAgICAgIC8qKgogICAgICAgICAqIFRoZSB0eXBlIG9mIHpvbmUKICAgICAgICAgKiBAYWJzdHJhY3QKICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBuYW1lIG9mIHRoaXMgem9uZS4KICAgICAgICAgKiBAYWJzdHJhY3QKICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm5hbWUiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLgogICAgICAgICAqIEBhYnN0cmFjdAogICAgICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImlzVW5pdmVyc2FsIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAga2V5OiAiaXNWYWxpZCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpOwogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIFpvbmU7CiAgICB9KCk7CgogICAgdmFyIHNpbmdsZXRvbiQxID0gbnVsbDsKICAgIC8qKgogICAgICogUmVwcmVzZW50cyB0aGUgbG9jYWwgem9uZSBmb3IgdGhpcyBKYXZhU2NyaXB0IGVudmlyb25tZW50LgogICAgICogQGltcGxlbWVudHMge1pvbmV9CiAgICAgKi8KCiAgICB2YXIgU3lzdGVtWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1pvbmUpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoU3lzdGVtWm9uZSwgX1pvbmUpOwoKICAgICAgZnVuY3Rpb24gU3lzdGVtWm9uZSgpIHsKICAgICAgICByZXR1cm4gX1pvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CgogICAgICB2YXIgX3Byb3RvID0gU3lzdGVtWm9uZS5wcm90b3R5cGU7CgogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICBfcHJvdG8ub2Zmc2V0TmFtZSA9IGZ1bmN0aW9uIG9mZnNldE5hbWUodHMsIF9yZWYpIHsKICAgICAgICB2YXIgZm9ybWF0ID0gX3JlZi5mb3JtYXQsCiAgICAgICAgICAgIGxvY2FsZSA9IF9yZWYubG9jYWxlOwogICAgICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7CiAgICAgIH0KICAgICAgLyoqIEBvdmVycmlkZSAqKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmZvcm1hdE9mZnNldCA9IGZ1bmN0aW9uIGZvcm1hdE9mZnNldCQxKHRzLCBmb3JtYXQpIHsKICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KHRzKSB7CiAgICAgICAgcmV0dXJuIC1uZXcgRGF0ZSh0cykuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICBfcHJvdG8uZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzKG90aGVyWm9uZSkgewogICAgICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gInN5c3RlbSI7CiAgICAgIH0KICAgICAgLyoqIEBvdmVycmlkZSAqKi8KICAgICAgOwoKICAgICAgX2NyZWF0ZUNsYXNzKFN5c3RlbVpvbmUsIFt7CiAgICAgICAga2V5OiAidHlwZSIsCiAgICAgICAgZ2V0OgogICAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICAgICAgZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuICJzeXN0ZW0iOwogICAgICAgIH0KICAgICAgICAvKiogQG92ZXJyaWRlICoqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm5hbWUiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7CiAgICAgICAgfQogICAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiaXNVbml2ZXJzYWwiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogImlzVmFsaWQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9XSwgW3sKICAgICAgICBrZXk6ICJpbnN0YW5jZSIsCiAgICAgICAgZ2V0OgogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbG9jYWwgem9uZQogICAgICAgICAqIEByZXR1cm4ge1N5c3RlbVpvbmV9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgaWYgKHNpbmdsZXRvbiQxID09PSBudWxsKSB7CiAgICAgICAgICAgIHNpbmdsZXRvbiQxID0gbmV3IFN5c3RlbVpvbmUoKTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gc2luZ2xldG9uJDE7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gU3lzdGVtWm9uZTsKICAgIH0oWm9uZSk7CgogICAgdmFyIG1hdGNoaW5nUmVnZXggPSBSZWdFeHAoIl4iICsgaWFuYVJlZ2V4LnNvdXJjZSArICIkIik7CiAgICB2YXIgZHRmQ2FjaGUgPSB7fTsKCiAgICBmdW5jdGlvbiBtYWtlRFRGKHpvbmUpIHsKICAgICAgaWYgKCFkdGZDYWNoZVt6b25lXSkgewogICAgICAgIGR0ZkNhY2hlW3pvbmVdID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgICAgaG91ckN5Y2xlOiAiaDIzIiwKICAgICAgICAgIHRpbWVab25lOiB6b25lLAogICAgICAgICAgeWVhcjogIm51bWVyaWMiLAogICAgICAgICAgbW9udGg6ICIyLWRpZ2l0IiwKICAgICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgICAgbWludXRlOiAiMi1kaWdpdCIsCiAgICAgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IgogICAgICAgIH0pOwogICAgICB9CgogICAgICByZXR1cm4gZHRmQ2FjaGVbem9uZV07CiAgICB9CgogICAgdmFyIHR5cGVUb1BvcyA9IHsKICAgICAgeWVhcjogMCwKICAgICAgbW9udGg6IDEsCiAgICAgIGRheTogMiwKICAgICAgaG91cjogMywKICAgICAgbWludXRlOiA0LAogICAgICBzZWNvbmQ6IDUKICAgIH07CgogICAgZnVuY3Rpb24gaGFja3lPZmZzZXQoZHRmLCBkYXRlKSB7CiAgICAgIHZhciBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1x1MjAwRS9nLCAiIiksCiAgICAgICAgICBwYXJzZWQgPSAvKFxkKylcLyhcZCspXC8oXGQrKSw/IChcZCspOihcZCspOihcZCspLy5leGVjKGZvcm1hdHRlZCksCiAgICAgICAgICBmTW9udGggPSBwYXJzZWRbMV0sCiAgICAgICAgICBmRGF5ID0gcGFyc2VkWzJdLAogICAgICAgICAgZlllYXIgPSBwYXJzZWRbM10sCiAgICAgICAgICBmSG91ciA9IHBhcnNlZFs0XSwKICAgICAgICAgIGZNaW51dGUgPSBwYXJzZWRbNV0sCiAgICAgICAgICBmU2Vjb25kID0gcGFyc2VkWzZdOwogICAgICByZXR1cm4gW2ZZZWFyLCBmTW9udGgsIGZEYXksIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXTsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJ0c09mZnNldChkdGYsIGRhdGUpIHsKICAgICAgdmFyIGZvcm1hdHRlZCA9IGR0Zi5mb3JtYXRUb1BhcnRzKGRhdGUpLAogICAgICAgICAgZmlsbGVkID0gW107CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBfZm9ybWF0dGVkJGkgPSBmb3JtYXR0ZWRbaV0sCiAgICAgICAgICAgIHR5cGUgPSBfZm9ybWF0dGVkJGkudHlwZSwKICAgICAgICAgICAgdmFsdWUgPSBfZm9ybWF0dGVkJGkudmFsdWUsCiAgICAgICAgICAgIHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTsKCiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChwb3MpKSB7CiAgICAgICAgICBmaWxsZWRbcG9zXSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gZmlsbGVkOwogICAgfQoKICAgIHZhciBpYW5hWm9uZUNhY2hlID0ge307CiAgICAvKioKICAgICAqIEEgem9uZSBpZGVudGlmaWVkIGJ5IGFuIElBTkEgaWRlbnRpZmllciwgbGlrZSBBbWVyaWNhL05ld19Zb3JrCiAgICAgKiBAaW1wbGVtZW50cyB7Wm9uZX0KICAgICAqLwoKICAgIHZhciBJQU5BWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1pvbmUpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoSUFOQVpvbmUsIF9ab25lKTsKCiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFpvbmUgbmFtZQogICAgICAgKiBAcmV0dXJuIHtJQU5BWm9uZX0KICAgICAgICovCiAgICAgIElBTkFab25lLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShuYW1lKSB7CiAgICAgICAgaWYgKCFpYW5hWm9uZUNhY2hlW25hbWVdKSB7CiAgICAgICAgICBpYW5hWm9uZUNhY2hlW25hbWVdID0gbmV3IElBTkFab25lKG5hbWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlhbmFab25lQ2FjaGVbbmFtZV07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlc2V0IGxvY2FsIGNhY2hlcy4gU2hvdWxkIG9ubHkgYmUgbmVjZXNzYXJ5IGluIHRlc3Rpbmcgc2NlbmFyaW9zLgogICAgICAgKiBAcmV0dXJuIHt2b2lkfQogICAgICAgKi8KICAgICAgOwoKICAgICAgSUFOQVpvbmUucmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7CiAgICAgICAgaWFuYVpvbmVDYWNoZSA9IHt9OwogICAgICAgIGR0ZkNhY2hlID0ge307CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3RyaW5nIGlzIGEgdmFsaWQgc3BlY2lmaWVyLiBUaGlzIG9ubHkgY2hlY2tzIHRoZSBzdHJpbmcncyBmb3JtYXQsIG5vdCB0aGF0IHRoZSBzcGVjaWZpZXIgaWRlbnRpZmllcyBhIGtub3duIHpvbmU7IHNlZSBpc1ZhbGlkWm9uZSBmb3IgdGhhdC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHMgLSBUaGUgc3RyaW5nIHRvIGNoZWNrIHZhbGlkaXR5IG9uCiAgICAgICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoIkFtZXJpY2EvTmV3X1lvcmsiKSAvLz0+IHRydWUKICAgICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcigiRmFudGFzaWEvQ2FzdGxlIikgLy89PiB0cnVlCiAgICAgICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIgPSBmdW5jdGlvbiBpc1ZhbGlkU3BlY2lmaWVyKHMpIHsKICAgICAgICByZXR1cm4gISEocyAmJiBzLm1hdGNoKG1hdGNoaW5nUmVnZXgpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaWRlbnRpZmllcyBhIHJlYWwgem9uZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2sKICAgICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIkFtZXJpY2EvTmV3X1lvcmsiKSAvLz0+IHRydWUKICAgICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIkZhbnRhc2lhL0Nhc3RsZSIpIC8vPT4gZmFsc2UKICAgICAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoIlNwb3J0fn5ibG9ycCIpIC8vPT4gZmFsc2UKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIElBTkFab25lLmlzVmFsaWRab25lID0gZnVuY3Rpb24gaXNWYWxpZFpvbmUoem9uZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgiZW4tVVMiLCB7CiAgICAgICAgICAgIHRpbWVab25lOiB6b25lCiAgICAgICAgICB9KS5mb3JtYXQoKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gLy8gRXRjL0dNVCs4IC0+IC00ODAKCiAgICAgIC8qKiBAaWdub3JlICovCiAgICAgIDsKCiAgICAgIElBTkFab25lLnBhcnNlR01UT2Zmc2V0ID0gZnVuY3Rpb24gcGFyc2VHTVRPZmZzZXQoc3BlY2lmaWVyKSB7CiAgICAgICAgaWYgKHNwZWNpZmllcikgewogICAgICAgICAgdmFyIG1hdGNoID0gc3BlY2lmaWVyLm1hdGNoKC9eRXRjXC9HTVQoMHxbKy1dXGR7MSwyfSkkL2kpOwoKICAgICAgICAgIGlmIChtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gLTYwICogcGFyc2VJbnQobWF0Y2hbMV0pOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH07CgogICAgICBmdW5jdGlvbiBJQU5BWm9uZShuYW1lKSB7CiAgICAgICAgdmFyIF90aGlzOwoKICAgICAgICBfdGhpcyA9IF9ab25lLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICAvKiogQHByaXZhdGUgKiovCgogICAgICAgIF90aGlzLnpvbmVOYW1lID0gbmFtZTsKICAgICAgICAvKiogQHByaXZhdGUgKiovCgogICAgICAgIF90aGlzLnZhbGlkID0gSUFOQVpvbmUuaXNWYWxpZFpvbmUobmFtZSk7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoKICAgICAgdmFyIF9wcm90byA9IElBTkFab25lLnByb3RvdHlwZTsKCiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICAgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSh0cywgX3JlZikgewogICAgICAgIHZhciBmb3JtYXQgPSBfcmVmLmZvcm1hdCwKICAgICAgICAgICAgbG9jYWxlID0gX3JlZi5sb2NhbGU7CiAgICAgICAgcmV0dXJuIHBhcnNlWm9uZUluZm8odHMsIGZvcm1hdCwgbG9jYWxlLCB0aGlzLm5hbWUpOwogICAgICB9CiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICAgIDsKCiAgICAgIF9wcm90by5mb3JtYXRPZmZzZXQgPSBmdW5jdGlvbiBmb3JtYXRPZmZzZXQkMSh0cywgZm9ybWF0KSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7CiAgICAgIH0KICAgICAgLyoqIEBvdmVycmlkZSAqKi8KICAgICAgOwoKICAgICAgX3Byb3RvLm9mZnNldCA9IGZ1bmN0aW9uIG9mZnNldCh0cykgewogICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodHMpOwogICAgICAgIGlmIChpc05hTihkYXRlKSkgcmV0dXJuIE5hTjsKCiAgICAgICAgdmFyIGR0ZiA9IG1ha2VEVEYodGhpcy5uYW1lKSwKICAgICAgICAgICAgX3JlZjIgPSBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpLAogICAgICAgICAgICB5ZWFyID0gX3JlZjJbMF0sCiAgICAgICAgICAgIG1vbnRoID0gX3JlZjJbMV0sCiAgICAgICAgICAgIGRheSA9IF9yZWYyWzJdLAogICAgICAgICAgICBob3VyID0gX3JlZjJbM10sCiAgICAgICAgICAgIG1pbnV0ZSA9IF9yZWYyWzRdLAogICAgICAgICAgICBzZWNvbmQgPSBfcmVmMls1XTsKCiAgICAgICAgdmFyIGFzVVRDID0gb2JqVG9Mb2NhbFRTKHsKICAgICAgICAgIHllYXI6IHllYXIsCiAgICAgICAgICBtb250aDogbW9udGgsCiAgICAgICAgICBkYXk6IGRheSwKICAgICAgICAgIGhvdXI6IGhvdXIsCiAgICAgICAgICBtaW51dGU6IG1pbnV0ZSwKICAgICAgICAgIHNlY29uZDogc2Vjb25kLAogICAgICAgICAgbWlsbGlzZWNvbmQ6IDAKICAgICAgICB9KTsKICAgICAgICB2YXIgYXNUUyA9ICtkYXRlOwogICAgICAgIHZhciBvdmVyID0gYXNUUyAlIDEwMDA7CiAgICAgICAgYXNUUyAtPSBvdmVyID49IDAgPyBvdmVyIDogMTAwMCArIG92ZXI7CiAgICAgICAgcmV0dXJuIChhc1VUQyAtIGFzVFMpIC8gKDYwICogMTAwMCk7CiAgICAgIH0KICAgICAgLyoqIEBvdmVycmlkZSAqKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlclpvbmUpIHsKICAgICAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09ICJpYW5hIiAmJiBvdGhlclpvbmUubmFtZSA9PT0gdGhpcy5uYW1lOwogICAgICB9CiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICAgIDsKCiAgICAgIF9jcmVhdGVDbGFzcyhJQU5BWm9uZSwgW3sKICAgICAgICBrZXk6ICJ0eXBlIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiAiaWFuYSI7CiAgICAgICAgfQogICAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAibmFtZSIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy56b25lTmFtZTsKICAgICAgICB9CiAgICAgICAgLyoqIEBvdmVycmlkZSAqKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpc1VuaXZlcnNhbCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAga2V5OiAiaXNWYWxpZCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZDsKICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBJQU5BWm9uZTsKICAgIH0oWm9uZSk7CgogICAgdmFyIHNpbmdsZXRvbiA9IG51bGw7CiAgICAvKioKICAgICAqIEEgem9uZSB3aXRoIGEgZml4ZWQgb2Zmc2V0IChtZWFuaW5nIG5vIERTVCkKICAgICAqIEBpbXBsZW1lbnRzIHtab25lfQogICAgICovCgogICAgdmFyIEZpeGVkT2Zmc2V0Wm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1pvbmUpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoRml4ZWRPZmZzZXRab25lLCBfWm9uZSk7CgogICAgICAvKioKICAgICAgICogR2V0IGFuIGluc3RhbmNlIHdpdGggYSBzcGVjaWZpZWQgb2Zmc2V0CiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgLSBUaGUgb2Zmc2V0IGluIG1pbnV0ZXMKICAgICAgICogQHJldHVybiB7Rml4ZWRPZmZzZXRab25lfQogICAgICAgKi8KICAgICAgRml4ZWRPZmZzZXRab25lLmluc3RhbmNlID0gZnVuY3Rpb24gaW5zdGFuY2Uob2Zmc2V0KSB7CiAgICAgICAgcmV0dXJuIG9mZnNldCA9PT0gMCA/IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZSA6IG5ldyBGaXhlZE9mZnNldFpvbmUob2Zmc2V0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZpeGVkT2Zmc2V0Wm9uZSBmcm9tIGEgVVRDIG9mZnNldCBzdHJpbmcsIGxpa2UgIlVUQys2IgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBvZmZzZXQgc3RyaW5nIHRvIHBhcnNlCiAgICAgICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcigiVVRDKzYiKQogICAgICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoIlVUQyswNiIpCiAgICAgICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcigiVVRDLTY6MDAiKQogICAgICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9CiAgICAgICAqLwogICAgICA7CgogICAgICBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIgPSBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihzKSB7CiAgICAgICAgaWYgKHMpIHsKICAgICAgICAgIHZhciByID0gcy5tYXRjaCgvXnV0Yyg/OihbKy1dXGR7MSwyfSkoPzo6KFxkezJ9KSk/KT8kL2kpOwoKICAgICAgICAgIGlmIChyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRml4ZWRPZmZzZXRab25lKHNpZ25lZE9mZnNldChyWzFdLCByWzJdKSk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfTsKCiAgICAgIGZ1bmN0aW9uIEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpIHsKICAgICAgICB2YXIgX3RoaXM7CgogICAgICAgIF90aGlzID0gX1pvbmUuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIC8qKiBAcHJpdmF0ZSAqKi8KCiAgICAgICAgX3RoaXMuZml4ZWQgPSBvZmZzZXQ7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoKICAgICAgdmFyIF9wcm90byA9IEZpeGVkT2Zmc2V0Wm9uZS5wcm90b3R5cGU7CgogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICBfcHJvdG8ub2Zmc2V0TmFtZSA9IGZ1bmN0aW9uIG9mZnNldE5hbWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICBfcHJvdG8uZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0JDEodHMsIGZvcm1hdCkgewogICAgICAgIHJldHVybiBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgZm9ybWF0KTsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLmZpeGVkOwogICAgICB9CiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICAgIDsKCiAgICAgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXJab25lKSB7CiAgICAgICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSAiZml4ZWQiICYmIG90aGVyWm9uZS5maXhlZCA9PT0gdGhpcy5maXhlZDsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICBfY3JlYXRlQ2xhc3MoRml4ZWRPZmZzZXRab25lLCBbewogICAgICAgIGtleTogInR5cGUiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuICJmaXhlZCI7CiAgICAgICAgfQogICAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAibmFtZSIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/ICJVVEMiIDogIlVUQyIgKyBmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgIm5hcnJvdyIpOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogImlzVW5pdmVyc2FsIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogImlzVmFsaWQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9XSwgW3sKICAgICAgICBrZXk6ICJ1dGNJbnN0YW5jZSIsCiAgICAgICAgZ2V0OgogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBVVEMKICAgICAgICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgaWYgKHNpbmdsZXRvbiA9PT0gbnVsbCkgewogICAgICAgICAgICBzaW5nbGV0b24gPSBuZXcgRml4ZWRPZmZzZXRab25lKDApOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiBzaW5nbGV0b247CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gRml4ZWRPZmZzZXRab25lOwogICAgfShab25lKTsKCiAgICAvKioKICAgICAqIEEgem9uZSB0aGF0IGZhaWxlZCB0byBwYXJzZS4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGluc3RhbnRpYXRlIHRoaXMuCiAgICAgKiBAaW1wbGVtZW50cyB7Wm9uZX0KICAgICAqLwoKICAgIHZhciBJbnZhbGlkWm9uZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1pvbmUpIHsKICAgICAgX2luaGVyaXRzTG9vc2UoSW52YWxpZFpvbmUsIF9ab25lKTsKCiAgICAgIGZ1bmN0aW9uIEludmFsaWRab25lKHpvbmVOYW1lKSB7CiAgICAgICAgdmFyIF90aGlzOwoKICAgICAgICBfdGhpcyA9IF9ab25lLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICAvKiogIEBwcml2YXRlICovCgogICAgICAgIF90aGlzLnpvbmVOYW1lID0gem9uZU5hbWU7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCgoKICAgICAgdmFyIF9wcm90byA9IEludmFsaWRab25lLnByb3RvdHlwZTsKCiAgICAgIC8qKiBAb3ZlcnJpZGUgKiovCiAgICAgIF9wcm90by5vZmZzZXROYW1lID0gZnVuY3Rpb24gb2Zmc2V0TmFtZSgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICBfcHJvdG8uZm9ybWF0T2Zmc2V0ID0gZnVuY3Rpb24gZm9ybWF0T2Zmc2V0KCkgewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgICAvKiogQG92ZXJyaWRlICoqLwogICAgICA7CgogICAgICBfcHJvdG8ub2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KCkgewogICAgICAgIHJldHVybiBOYU47CiAgICAgIH0KICAgICAgLyoqIEBvdmVycmlkZSAqKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscygpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqIEBvdmVycmlkZSAqKi8KICAgICAgOwoKICAgICAgX2NyZWF0ZUNsYXNzKEludmFsaWRab25lLCBbewogICAgICAgIGtleTogInR5cGUiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuICJpbnZhbGlkIjsKICAgICAgICB9CiAgICAgICAgLyoqIEBvdmVycmlkZSAqKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJuYW1lIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnpvbmVOYW1lOwogICAgICAgIH0KICAgICAgICAvKiogQG92ZXJyaWRlICoqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImlzVW5pdmVyc2FsIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpc1ZhbGlkIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBJbnZhbGlkWm9uZTsKICAgIH0oWm9uZSk7CgogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCiAgICBmdW5jdGlvbiBub3JtYWxpemVab25lKGlucHV0LCBkZWZhdWx0Wm9uZSkgewogICAgICB2YXIgb2Zmc2V0OwoKICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSB8fCBpbnB1dCA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiBkZWZhdWx0Wm9uZTsKICAgICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFpvbmUpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7CiAgICAgICAgdmFyIGxvd2VyZWQgPSBpbnB1dC50b0xvd2VyQ2FzZSgpOwogICAgICAgIGlmIChsb3dlcmVkID09PSAibG9jYWwiIHx8IGxvd2VyZWQgPT09ICJzeXN0ZW0iKSByZXR1cm4gZGVmYXVsdFpvbmU7ZWxzZSBpZiAobG93ZXJlZCA9PT0gInV0YyIgfHwgbG93ZXJlZCA9PT0gImdtdCIpIHJldHVybiBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2U7ZWxzZSBpZiAoKG9mZnNldCA9IElBTkFab25lLnBhcnNlR01UT2Zmc2V0KGlucHV0KSkgIT0gbnVsbCkgewogICAgICAgICAgLy8gaGFuZGxlIEV0Yy9HTVQtNCwgd2hpY2ggVjggY2hva2VzIG9uCiAgICAgICAgICByZXR1cm4gRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCk7CiAgICAgICAgfSBlbHNlIGlmIChJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKGxvd2VyZWQpKSByZXR1cm4gSUFOQVpvbmUuY3JlYXRlKGlucHV0KTtlbHNlIHJldHVybiBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIobG93ZXJlZCkgfHwgbmV3IEludmFsaWRab25lKGlucHV0KTsKICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHsKICAgICAgICByZXR1cm4gRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGlucHV0KTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICJvYmplY3QiICYmIGlucHV0Lm9mZnNldCAmJiB0eXBlb2YgaW5wdXQub2Zmc2V0ID09PSAibnVtYmVyIikgewogICAgICAgIC8vIFRoaXMgaXMgZHVtYiwgYnV0IHRoZSBpbnN0YW5jZW9mIGNoZWNrIGFib3ZlIGRvZXNuJ3Qgc2VlbSB0byByZWFsbHkgd29yawogICAgICAgIC8vIHNvIHdlJ3JlIGR1Y2sgY2hlY2tpbmcgaXQKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkWm9uZShpbnB1dCk7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgbm93ID0gZnVuY3Rpb24gbm93KCkgewogICAgICByZXR1cm4gRGF0ZS5ub3coKTsKICAgIH0sCiAgICAgICAgZGVmYXVsdFpvbmUgPSAic3lzdGVtIiwKICAgICAgICBkZWZhdWx0TG9jYWxlID0gbnVsbCwKICAgICAgICBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtID0gbnVsbCwKICAgICAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBudWxsLAogICAgICAgIHRocm93T25JbnZhbGlkOwogICAgLyoqCiAgICAgKiBTZXR0aW5ncyBjb250YWlucyBzdGF0aWMgZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGNvbnRyb2wgTHV4b24ncyBvdmVyYWxsIGJlaGF2aW9yLiBMdXhvbiBpcyBhIHNpbXBsZSBsaWJyYXJ5IHdpdGggZmV3IG9wdGlvbnMsIGJ1dCB0aGUgb25lcyBpdCBkb2VzIGhhdmUgbGl2ZSBoZXJlLgogICAgICovCgoKICAgIHZhciBTZXR0aW5ncyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgIGZ1bmN0aW9uIFNldHRpbmdzKCkge30KCiAgICAgIC8qKgogICAgICAgKiBSZXNldCBMdXhvbidzIGdsb2JhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy4KICAgICAgICogQHJldHVybiB7dm9pZH0KICAgICAgICovCiAgICAgIFNldHRpbmdzLnJlc2V0Q2FjaGVzID0gZnVuY3Rpb24gcmVzZXRDYWNoZXMoKSB7CiAgICAgICAgTG9jYWxlLnJlc2V0Q2FjaGUoKTsKICAgICAgICBJQU5BWm9uZS5yZXNldENhY2hlKCk7CiAgICAgIH07CgogICAgICBfY3JlYXRlQ2xhc3MoU2V0dGluZ3MsIG51bGwsIFt7CiAgICAgICAga2V5OiAibm93IiwKICAgICAgICBnZXQ6CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4KICAgICAgICAgKiBAdHlwZSB7ZnVuY3Rpb259CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIG5vdzsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2V0IHRoZSBjYWxsYmFjayBmb3IgcmV0dXJuaW5nIHRoZSBjdXJyZW50IHRpbWVzdGFtcC4KICAgICAgICAgKiBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhIG51bWJlciwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBFcG9jaCBtaWxsaXNlY29uZCBjb3VudAogICAgICAgICAqIEB0eXBlIHtmdW5jdGlvbn0KICAgICAgICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiBEYXRlLm5vdygpICsgMzAwMCAvLyBwcmV0ZW5kIGl0IGlzIDMgc2Vjb25kcyBpbiB0aGUgZnV0dXJlCiAgICAgICAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gMCAvLyBhbHdheXMgcHJldGVuZCBpdCdzIEphbiAxLCAxOTcwIGF0IG1pZG5pZ2h0IGluIFVUQyB0aW1lCiAgICAgICAgICovCiAgICAgICAgLAogICAgICAgIHNldDogZnVuY3Rpb24gc2V0KG4pIHsKICAgICAgICAgIG5vdyA9IG47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCB0aGUgZGVmYXVsdCB0aW1lIHpvbmUgdG8gY3JlYXRlIERhdGVUaW1lcyBpbi4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAgICAgKiBVc2UgdGhlIHZhbHVlICJzeXN0ZW0iIHRvIHJlc2V0IHRoaXMgdmFsdWUgdG8gdGhlIHN5c3RlbSdzIHRpbWUgem9uZS4KICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImRlZmF1bHRab25lIiwKICAgICAgICBnZXQ6CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSBvYmplY3QgY3VycmVudGx5IHVzZWQgdG8gY3JlYXRlIERhdGVUaW1lcy4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgc3lzdGVtJ3MgdGltZSB6b25lICh0aGUgb25lIHNldCBvbiB0aGUgbWFjaGluZSB0aGF0IHJ1bnMgdGhpcyBjb2RlKS4KICAgICAgICAgKiBAdHlwZSB7Wm9uZX0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gbm9ybWFsaXplWm9uZShkZWZhdWx0Wm9uZSwgU3lzdGVtWm9uZS5pbnN0YW5jZSk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCiAgICAgICAgLAogICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHpvbmUpIHsKICAgICAgICAgIGRlZmF1bHRab25lID0gem9uZTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJkZWZhdWx0TG9jYWxlIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBkZWZhdWx0TG9jYWxlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwogICAgICAgICwKICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChsb2NhbGUpIHsKICAgICAgICAgIGRlZmF1bHRMb2NhbGUgPSBsb2NhbGU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImRlZmF1bHROdW1iZXJpbmdTeXN0ZW0iLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCB0aGUgZGVmYXVsdCBudW1iZXJpbmcgc3lzdGVtIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy4KICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwogICAgICAgICwKICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChudW1iZXJpbmdTeXN0ZW0pIHsKICAgICAgICAgIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmdTeXN0ZW07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiZGVmYXVsdE91dHB1dENhbGVuZGFyIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLgogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCiAgICAgICAgLAogICAgICAgIHNldDogZnVuY3Rpb24gc2V0KG91dHB1dENhbGVuZGFyKSB7CiAgICAgICAgICBkZWZhdWx0T3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhcjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzCiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAidGhyb3dPbkludmFsaWQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRocm93T25JbnZhbGlkOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBTZXQgd2hldGhlciBMdXhvbiB3aWxsIHRocm93IHdoZW4gaXQgZW5jb3VudGVycyBpbnZhbGlkIERhdGVUaW1lcywgRHVyYXRpb25zLCBvciBJbnRlcnZhbHMKICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KICAgICAgICAgKi8KICAgICAgICAsCiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodCkgewogICAgICAgICAgdGhyb3dPbkludmFsaWQgPSB0OwogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIFNldHRpbmdzOwogICAgfSgpOwoKICAgIHZhciBfZXhjbHVkZWQgPSBbImJhc2UiXTsKICAgIHZhciBpbnRsRFRDYWNoZSA9IHt9OwoKICAgIGZ1bmN0aW9uIGdldENhY2hlZERURihsb2NTdHJpbmcsIG9wdHMpIHsKICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgIG9wdHMgPSB7fTsKICAgICAgfQoKICAgICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTsKICAgICAgdmFyIGR0ZiA9IGludGxEVENhY2hlW2tleV07CgogICAgICBpZiAoIWR0ZikgewogICAgICAgIGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7CiAgICAgICAgaW50bERUQ2FjaGVba2V5XSA9IGR0ZjsKICAgICAgfQoKICAgICAgcmV0dXJuIGR0ZjsKICAgIH0KCiAgICB2YXIgaW50bE51bUNhY2hlID0ge307CgogICAgZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cykgewogICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgb3B0cyA9IHt9OwogICAgICB9CgogICAgICB2YXIga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pOwogICAgICB2YXIgaW5mID0gaW50bE51bUNhY2hlW2tleV07CgogICAgICBpZiAoIWluZikgewogICAgICAgIGluZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwogICAgICAgIGludGxOdW1DYWNoZVtrZXldID0gaW5mOwogICAgICB9CgogICAgICByZXR1cm4gaW5mOwogICAgfQoKICAgIHZhciBpbnRsUmVsQ2FjaGUgPSB7fTsKCiAgICBmdW5jdGlvbiBnZXRDYWNoZWRSVEYobG9jU3RyaW5nLCBvcHRzKSB7CiAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICBvcHRzID0ge307CiAgICAgIH0KCiAgICAgIHZhciBfb3B0cyA9IG9wdHM7CiAgICAgICAgICBfb3B0cy5iYXNlOwogICAgICAgICAgdmFyIGNhY2hlS2V5T3B0cyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9vcHRzLCBfZXhjbHVkZWQpOyAvLyBleGNsdWRlIGBiYXNlYCBmcm9tIHRoZSBvcHRpb25zCgoKICAgICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIGNhY2hlS2V5T3B0c10pOwogICAgICB2YXIgaW5mID0gaW50bFJlbENhY2hlW2tleV07CgogICAgICBpZiAoIWluZikgewogICAgICAgIGluZiA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsb2NTdHJpbmcsIG9wdHMpOwogICAgICAgIGludGxSZWxDYWNoZVtrZXldID0gaW5mOwogICAgICB9CgogICAgICByZXR1cm4gaW5mOwogICAgfQoKICAgIHZhciBzeXNMb2NhbGVDYWNoZSA9IG51bGw7CgogICAgZnVuY3Rpb24gc3lzdGVtTG9jYWxlKCkgewogICAgICBpZiAoc3lzTG9jYWxlQ2FjaGUpIHsKICAgICAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3lzTG9jYWxlQ2FjaGUgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLmxvY2FsZTsKICAgICAgICByZXR1cm4gc3lzTG9jYWxlQ2FjaGU7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHsKICAgICAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlcgogICAgICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDcKICAgICAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczoKICAgICAgLy8gYSkgaWYgdGhlIHN0cmluZyBoYXMgbm8gLXUgZXh0ZW5zaW9ucywganVzdCBsZWF2ZSBpdCBhbG9uZQogICAgICAvLyBiKSBpZiBpdCBkb2VzLCB1c2UgSW50bCB0byByZXNvbHZlIGV2ZXJ5dGhpbmcKICAgICAgLy8gYykgaWYgSW50bCBmYWlscywgdHJ5IGFnYWluIHdpdGhvdXQgdGhlIC11CiAgICAgIHZhciB1SW5kZXggPSBsb2NhbGVTdHIuaW5kZXhPZigiLXUtIik7CgogICAgICBpZiAodUluZGV4ID09PSAtMSkgewogICAgICAgIHJldHVybiBbbG9jYWxlU3RyXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgb3B0aW9uczsKICAgICAgICB2YXIgc21hbGxlciA9IGxvY2FsZVN0ci5zdWJzdHJpbmcoMCwgdUluZGV4KTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYobG9jYWxlU3RyKS5yZXNvbHZlZE9wdGlvbnMoKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBvcHRpb25zID0gZ2V0Q2FjaGVkRFRGKHNtYWxsZXIpLnJlc29sdmVkT3B0aW9ucygpOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucywKICAgICAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX29wdGlvbnMubnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgICBjYWxlbmRhciA9IF9vcHRpb25zLmNhbGVuZGFyOyAvLyByZXR1cm4gdGhlIHNtYWxsZXIgb25lIHNvIHRoYXQgd2UgY2FuIGFwcGVuZCB0aGUgY2FsZW5kYXIgYW5kIG51bWJlcmluZyBvdmVycmlkZXMgdG8gaXQKCiAgICAgICAgcmV0dXJuIFtzbWFsbGVyLCBudW1iZXJpbmdTeXN0ZW0sIGNhbGVuZGFyXTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGludGxDb25maWdTdHJpbmcobG9jYWxlU3RyLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSB7CiAgICAgIGlmIChvdXRwdXRDYWxlbmRhciB8fCBudW1iZXJpbmdTeXN0ZW0pIHsKICAgICAgICBsb2NhbGVTdHIgKz0gIi11IjsKCiAgICAgICAgaWYgKG91dHB1dENhbGVuZGFyKSB7CiAgICAgICAgICBsb2NhbGVTdHIgKz0gIi1jYS0iICsgb3V0cHV0Q2FsZW5kYXI7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVtYmVyaW5nU3lzdGVtKSB7CiAgICAgICAgICBsb2NhbGVTdHIgKz0gIi1udS0iICsgbnVtYmVyaW5nU3lzdGVtOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGxvY2FsZVN0cjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jYWxlU3RyOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbWFwTW9udGhzKGYpIHsKICAgICAgdmFyIG1zID0gW107CgogICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSB7CiAgICAgICAgdmFyIGR0ID0gRGF0ZVRpbWUudXRjKDIwMTYsIGksIDEpOwogICAgICAgIG1zLnB1c2goZihkdCkpOwogICAgICB9CgogICAgICByZXR1cm4gbXM7CiAgICB9CgogICAgZnVuY3Rpb24gbWFwV2Vla2RheXMoZikgewogICAgICB2YXIgbXMgPSBbXTsKCiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IDc7IGkrKykgewogICAgICAgIHZhciBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTsKICAgICAgICBtcy5wdXNoKGYoZHQpKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG1zOwogICAgfQoKICAgIGZ1bmN0aW9uIGxpc3RTdHVmZihsb2MsIGxlbmd0aCwgZGVmYXVsdE9LLCBlbmdsaXNoRm4sIGludGxGbikgewogICAgICB2YXIgbW9kZSA9IGxvYy5saXN0aW5nTW9kZShkZWZhdWx0T0spOwoKICAgICAgaWYgKG1vZGUgPT09ICJlcnJvciIpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSBlbHNlIGlmIChtb2RlID09PSAiZW4iKSB7CiAgICAgICAgcmV0dXJuIGVuZ2xpc2hGbihsZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBpbnRsRm4obGVuZ3RoKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHN1cHBvcnRzRmFzdE51bWJlcnMobG9jKSB7CiAgICAgIGlmIChsb2MubnVtYmVyaW5nU3lzdGVtICYmIGxvYy5udW1iZXJpbmdTeXN0ZW0gIT09ICJsYXRuIikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jLm51bWJlcmluZ1N5c3RlbSA9PT0gImxhdG4iIHx8ICFsb2MubG9jYWxlIHx8IGxvYy5sb2NhbGUuc3RhcnRzV2l0aCgiZW4iKSB8fCBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2MuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubnVtYmVyaW5nU3lzdGVtID09PSAibGF0biI7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwoKCiAgICB2YXIgUG9seU51bWJlckZvcm1hdHRlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgIGZ1bmN0aW9uIFBvbHlOdW1iZXJGb3JtYXR0ZXIoaW50bCwgZm9yY2VTaW1wbGUsIG9wdHMpIHsKICAgICAgICB0aGlzLnBhZFRvID0gb3B0cy5wYWRUbyB8fCAwOwogICAgICAgIHRoaXMuZmxvb3IgPSBvcHRzLmZsb29yIHx8IGZhbHNlOwoKICAgICAgICBpZiAoIWZvcmNlU2ltcGxlKSB7CiAgICAgICAgICB2YXIgaW50bE9wdHMgPSB7CiAgICAgICAgICAgIHVzZUdyb3VwaW5nOiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICAgIGlmIChvcHRzLnBhZFRvID4gMCkgaW50bE9wdHMubWluaW11bUludGVnZXJEaWdpdHMgPSBvcHRzLnBhZFRvOwogICAgICAgICAgdGhpcy5pbmYgPSBnZXRDYWNoZWRJTkYoaW50bCwgaW50bE9wdHMpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIF9wcm90byA9IFBvbHlOdW1iZXJGb3JtYXR0ZXIucHJvdG90eXBlOwoKICAgICAgX3Byb3RvLmZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdChpKSB7CiAgICAgICAgaWYgKHRoaXMuaW5mKSB7CiAgICAgICAgICB2YXIgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IGk7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gdG8gbWF0Y2ggdGhlIGJyb3dzZXIncyBudW1iZXJmb3JtYXR0ZXIgZGVmYXVsdHMKICAgICAgICAgIHZhciBfZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IHJvdW5kVG8oaSwgMyk7CgogICAgICAgICAgcmV0dXJuIHBhZFN0YXJ0KF9maXhlZCwgdGhpcy5wYWRUbyk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgcmV0dXJuIFBvbHlOdW1iZXJGb3JtYXR0ZXI7CiAgICB9KCk7CiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKi8KCgogICAgdmFyIFBvbHlEYXRlRm9ybWF0dGVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gUG9seURhdGVGb3JtYXR0ZXIoZHQsIGludGwsIG9wdHMpIHsKICAgICAgICB0aGlzLm9wdHMgPSBvcHRzOwogICAgICAgIHZhciB6OwoKICAgICAgICBpZiAoZHQuem9uZS5pc1VuaXZlcnNhbCkgewogICAgICAgICAgLy8gVVRDLTggb3IgRXRjL1VUQy04IGFyZSBub3QgcGFydCBvZiB0emRhdGEsIG9ubHkgRXRjL0dNVCs4IGFuZCB0aGUgbGlrZS4KICAgICAgICAgIC8vIFRoYXQgaXMgd2h5IGZpeGVkLW9mZnNldCBUWiBpcyBzZXQgdG8gdGhhdCB1bmxlc3MgaXQgaXM6CiAgICAgICAgICAvLyAxLiBSZXByZXNlbnRpbmcgb2Zmc2V0IDAgd2hlbiBVVEMgaXMgdXNlZCB0byBtYWludGFpbiBwcmV2aW91cyBiZWhhdmlvciBhbmQgZG9lcyBub3QgYmVjb21lIEdNVC4KICAgICAgICAgIC8vIDIuIFVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyOgogICAgICAgICAgLy8gICAgLSBzb21lIGRvIG5vdCBzdXBwb3J0IEV0Yy8KICAgICAgICAgIC8vICAgIC0gPCBFdGMvR01ULTE0LCA+IEV0Yy9HTVQrMTIsIGFuZCAzMC1taW51dGUgb3IgNDUtbWludXRlIG9mZnNldHMgYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YQogICAgICAgICAgdmFyIGdtdE9mZnNldCA9IC0xICogKGR0Lm9mZnNldCAvIDYwKTsKICAgICAgICAgIHZhciBvZmZzZXRaID0gZ210T2Zmc2V0ID49IDAgPyAiRXRjL0dNVCsiICsgZ210T2Zmc2V0IDogIkV0Yy9HTVQiICsgZ210T2Zmc2V0OwogICAgICAgICAgdmFyIGlzT2Zmc2V0Wm9uZVN1cHBvcnRlZCA9IElBTkFab25lLmlzVmFsaWRab25lKG9mZnNldFopOwoKICAgICAgICAgIGlmIChkdC5vZmZzZXQgIT09IDAgJiYgaXNPZmZzZXRab25lU3VwcG9ydGVkKSB7CiAgICAgICAgICAgIHogPSBvZmZzZXRaOwogICAgICAgICAgICB0aGlzLmR0ID0gZHQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBOb3QgYWxsIGZpeGVkLW9mZnNldCB6b25lcyBsaWtlIEV0Yy8rNDozMCBhcmUgcHJlc2VudCBpbiB0emRhdGEuCiAgICAgICAgICAgIC8vIFNvIHdlIGhhdmUgdG8gbWFrZSBkby4gVHdvIGNhc2VzOgogICAgICAgICAgICAvLyAxLiBUaGUgZm9ybWF0IG9wdGlvbnMgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBXZSBjYW4ndCBkbyB0aGF0LCBzbyB0aGUgYmVzdAogICAgICAgICAgICAvLyB3ZSBjYW4gZG8gaXMgZm9ybWF0IHRoZSBkYXRlIGluIFVUQy4KICAgICAgICAgICAgLy8gMi4gVGhlIGZvcm1hdCBvcHRpb25zIGRvbid0IHRlbGwgdXMgdG8gc2hvdyB0aGUgem9uZS4gVGhlbiB3ZSBjYW4gYWRqdXN0IHRoZW0KICAgICAgICAgICAgLy8gdGhlIHRpbWUgYW5kIHRlbGwgdGhlIGZvcm1hdHRlciB0byBzaG93IGl0IHRvIHVzIGluIFVUQywgc28gdGhhdCB0aGUgdGltZSBpcyByaWdodAogICAgICAgICAgICAvLyBhbmQgdGhlIGJhZCB6b25lIGRvZXNuJ3Qgc2hvdyB1cC4KICAgICAgICAgICAgeiA9ICJVVEMiOwoKICAgICAgICAgICAgaWYgKG9wdHMudGltZVpvbmVOYW1lKSB7CiAgICAgICAgICAgICAgdGhpcy5kdCA9IGR0OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuZHQgPSBkdC5vZmZzZXQgPT09IDAgPyBkdCA6IERhdGVUaW1lLmZyb21NaWxsaXMoZHQudHMgKyBkdC5vZmZzZXQgKiA2MCAqIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkdC56b25lLnR5cGUgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgICB0aGlzLmR0ID0gZHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuZHQgPSBkdDsKICAgICAgICAgIHogPSBkdC56b25lLm5hbWU7CiAgICAgICAgfQoKICAgICAgICB2YXIgaW50bE9wdHMgPSBfZXh0ZW5kcyh7fSwgdGhpcy5vcHRzKTsKCiAgICAgICAgaWYgKHopIHsKICAgICAgICAgIGludGxPcHRzLnRpbWVab25lID0gejsKICAgICAgICB9CgogICAgICAgIHRoaXMuZHRmID0gZ2V0Q2FjaGVkRFRGKGludGwsIGludGxPcHRzKTsKICAgICAgfQoKICAgICAgdmFyIF9wcm90bzIgPSBQb2x5RGF0ZUZvcm1hdHRlci5wcm90b3R5cGU7CgogICAgICBfcHJvdG8yLmZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5kdGYuZm9ybWF0KHRoaXMuZHQudG9KU0RhdGUoKSk7CiAgICAgIH07CgogICAgICBfcHJvdG8yLmZvcm1hdFRvUGFydHMgPSBmdW5jdGlvbiBmb3JtYXRUb1BhcnRzKCkgewogICAgICAgIHJldHVybiB0aGlzLmR0Zi5mb3JtYXRUb1BhcnRzKHRoaXMuZHQudG9KU0RhdGUoKSk7CiAgICAgIH07CgogICAgICBfcHJvdG8yLnJlc29sdmVkT3B0aW9ucyA9IGZ1bmN0aW9uIHJlc29sdmVkT3B0aW9ucygpIHsKICAgICAgICByZXR1cm4gdGhpcy5kdGYucmVzb2x2ZWRPcHRpb25zKCk7CiAgICAgIH07CgogICAgICByZXR1cm4gUG9seURhdGVGb3JtYXR0ZXI7CiAgICB9KCk7CiAgICAvKioKICAgICAqIEBwcml2YXRlCiAgICAgKi8KCgogICAgdmFyIFBvbHlSZWxGb3JtYXR0ZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBQb2x5UmVsRm9ybWF0dGVyKGludGwsIGlzRW5nbGlzaCwgb3B0cykgewogICAgICAgIHRoaXMub3B0cyA9IF9leHRlbmRzKHsKICAgICAgICAgIHN0eWxlOiAibG9uZyIKICAgICAgICB9LCBvcHRzKTsKCiAgICAgICAgaWYgKCFpc0VuZ2xpc2ggJiYgaGFzUmVsYXRpdmUoKSkgewogICAgICAgICAgdGhpcy5ydGYgPSBnZXRDYWNoZWRSVEYoaW50bCwgb3B0cyk7CiAgICAgICAgfQogICAgICB9CgogICAgICB2YXIgX3Byb3RvMyA9IFBvbHlSZWxGb3JtYXR0ZXIucHJvdG90eXBlOwoKICAgICAgX3Byb3RvMy5mb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQoY291bnQsIHVuaXQpIHsKICAgICAgICBpZiAodGhpcy5ydGYpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCB0aGlzLm9wdHMubnVtZXJpYywgdGhpcy5vcHRzLnN0eWxlICE9PSAibG9uZyIpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIF9wcm90bzMuZm9ybWF0VG9QYXJ0cyA9IGZ1bmN0aW9uIGZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpIHsKICAgICAgICBpZiAodGhpcy5ydGYpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXRUb1BhcnRzKGNvdW50LCB1bml0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIHJldHVybiBQb2x5UmVsRm9ybWF0dGVyOwogICAgfSgpOwogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgoKICAgIHZhciBMb2NhbGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBMb2NhbGUuZnJvbU9wdHMgPSBmdW5jdGlvbiBmcm9tT3B0cyhvcHRzKSB7CiAgICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTsKICAgICAgfTsKCiAgICAgIExvY2FsZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTikgewogICAgICAgIGlmIChkZWZhdWx0VG9FTiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWZhdWx0VG9FTiA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgdmFyIHNwZWNpZmllZExvY2FsZSA9IGxvY2FsZSB8fCBTZXR0aW5ncy5kZWZhdWx0TG9jYWxlOyAvLyB0aGUgc3lzdGVtIGxvY2FsZSBpcyB1c2VmdWwgZm9yIGh1bWFuIHJlYWRhYmxlIHN0cmluZ3MgYnV0IGFubm95aW5nIGZvciBwYXJzaW5nL2Zvcm1hdHRpbmcga25vd24gZm9ybWF0cwoKICAgICAgICB2YXIgbG9jYWxlUiA9IHNwZWNpZmllZExvY2FsZSB8fCAoZGVmYXVsdFRvRU4gPyAiZW4tVVMiIDogc3lzdGVtTG9jYWxlKCkpOwogICAgICAgIHZhciBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07CiAgICAgICAgdmFyIG91dHB1dENhbGVuZGFyUiA9IG91dHB1dENhbGVuZGFyIHx8IFNldHRpbmdzLmRlZmF1bHRPdXRwdXRDYWxlbmRhcjsKICAgICAgICByZXR1cm4gbmV3IExvY2FsZShsb2NhbGVSLCBudW1iZXJpbmdTeXN0ZW1SLCBvdXRwdXRDYWxlbmRhclIsIHNwZWNpZmllZExvY2FsZSk7CiAgICAgIH07CgogICAgICBMb2NhbGUucmVzZXRDYWNoZSA9IGZ1bmN0aW9uIHJlc2V0Q2FjaGUoKSB7CiAgICAgICAgc3lzTG9jYWxlQ2FjaGUgPSBudWxsOwogICAgICAgIGludGxEVENhY2hlID0ge307CiAgICAgICAgaW50bE51bUNhY2hlID0ge307CiAgICAgICAgaW50bFJlbENhY2hlID0ge307CiAgICAgIH07CgogICAgICBMb2NhbGUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3QoX3RlbXApIHsKICAgICAgICB2YXIgX3JlZiA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAogICAgICAgICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZSwKICAgICAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZi5udW1iZXJpbmdTeXN0ZW0sCiAgICAgICAgICAgIG91dHB1dENhbGVuZGFyID0gX3JlZi5vdXRwdXRDYWxlbmRhcjsKCiAgICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTsKICAgICAgfTsKCiAgICAgIGZ1bmN0aW9uIExvY2FsZShsb2NhbGUsIG51bWJlcmluZywgb3V0cHV0Q2FsZW5kYXIsIHNwZWNpZmllZExvY2FsZSkgewogICAgICAgIHZhciBfcGFyc2VMb2NhbGVTdHJpbmcgPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpLAogICAgICAgICAgICBwYXJzZWRMb2NhbGUgPSBfcGFyc2VMb2NhbGVTdHJpbmdbMF0sCiAgICAgICAgICAgIHBhcnNlZE51bWJlcmluZ1N5c3RlbSA9IF9wYXJzZUxvY2FsZVN0cmluZ1sxXSwKICAgICAgICAgICAgcGFyc2VkT3V0cHV0Q2FsZW5kYXIgPSBfcGFyc2VMb2NhbGVTdHJpbmdbMl07CgogICAgICAgIHRoaXMubG9jYWxlID0gcGFyc2VkTG9jYWxlOwogICAgICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsOwogICAgICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhciB8fCBwYXJzZWRPdXRwdXRDYWxlbmRhciB8fCBudWxsOwogICAgICAgIHRoaXMuaW50bCA9IGludGxDb25maWdTdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMubnVtYmVyaW5nU3lzdGVtLCB0aGlzLm91dHB1dENhbGVuZGFyKTsKICAgICAgICB0aGlzLndlZWtkYXlzQ2FjaGUgPSB7CiAgICAgICAgICBmb3JtYXQ6IHt9LAogICAgICAgICAgc3RhbmRhbG9uZToge30KICAgICAgICB9OwogICAgICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7CiAgICAgICAgICBmb3JtYXQ6IHt9LAogICAgICAgICAgc3RhbmRhbG9uZToge30KICAgICAgICB9OwogICAgICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IG51bGw7CiAgICAgICAgdGhpcy5lcmFDYWNoZSA9IHt9OwogICAgICAgIHRoaXMuc3BlY2lmaWVkTG9jYWxlID0gc3BlY2lmaWVkTG9jYWxlOwogICAgICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBudWxsOwogICAgICB9CgogICAgICB2YXIgX3Byb3RvNCA9IExvY2FsZS5wcm90b3R5cGU7CgogICAgICBfcHJvdG80Lmxpc3RpbmdNb2RlID0gZnVuY3Rpb24gbGlzdGluZ01vZGUoZGVmYXVsdE9LKSB7CgogICAgICAgIHZhciBpc0FjdHVhbGx5RW4gPSB0aGlzLmlzRW5nbGlzaCgpOwogICAgICAgIHZhciBoYXNOb1dlaXJkbmVzcyA9ICh0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gbnVsbCB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gImxhdG4iKSAmJiAodGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gbnVsbCB8fCB0aGlzLm91dHB1dENhbGVuZGFyID09PSAiZ3JlZ29yeSIpOwogICAgICAgIHJldHVybiBpc0FjdHVhbGx5RW4gJiYgaGFzTm9XZWlyZG5lc3MgPyAiZW4iIDogImludGwiOwogICAgICB9OwoKICAgICAgX3Byb3RvNC5jbG9uZSA9IGZ1bmN0aW9uIGNsb25lKGFsdHMpIHsKICAgICAgICBpZiAoIWFsdHMgfHwgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWx0cykubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUoYWx0cy5sb2NhbGUgfHwgdGhpcy5zcGVjaWZpZWRMb2NhbGUsIGFsdHMubnVtYmVyaW5nU3lzdGVtIHx8IHRoaXMubnVtYmVyaW5nU3lzdGVtLCBhbHRzLm91dHB1dENhbGVuZGFyIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIsIGFsdHMuZGVmYXVsdFRvRU4gfHwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIF9wcm90bzQucmVkZWZhdWx0VG9FTiA9IGZ1bmN0aW9uIHJlZGVmYXVsdFRvRU4oYWx0cykgewogICAgICAgIGlmIChhbHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIGFsdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmNsb25lKF9leHRlbmRzKHt9LCBhbHRzLCB7CiAgICAgICAgICBkZWZhdWx0VG9FTjogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfTsKCiAgICAgIF9wcm90bzQucmVkZWZhdWx0VG9TeXN0ZW0gPSBmdW5jdGlvbiByZWRlZmF1bHRUb1N5c3RlbShhbHRzKSB7CiAgICAgICAgaWYgKGFsdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgYWx0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoX2V4dGVuZHMoe30sIGFsdHMsIHsKICAgICAgICAgIGRlZmF1bHRUb0VOOiBmYWxzZQogICAgICAgIH0pKTsKICAgICAgfTsKCiAgICAgIF9wcm90bzQubW9udGhzID0gZnVuY3Rpb24gbW9udGhzJDEobGVuZ3RoLCBmb3JtYXQsIGRlZmF1bHRPSykgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgewogICAgICAgICAgZm9ybWF0ID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZGVmYXVsdE9LID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlZmF1bHRPSyA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCBtb250aHMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBpbnRsID0gZm9ybWF0ID8gewogICAgICAgICAgICBtb250aDogbGVuZ3RoLAogICAgICAgICAgICBkYXk6ICJudW1lcmljIgogICAgICAgICAgfSA6IHsKICAgICAgICAgICAgbW9udGg6IGxlbmd0aAogICAgICAgICAgfSwKICAgICAgICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyAiZm9ybWF0IiA6ICJzdGFuZGFsb25lIjsKCiAgICAgICAgICBpZiAoIV90aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkgewogICAgICAgICAgICBfdGhpcy5tb250aHNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBNb250aHMoZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmV4dHJhY3QoZHQsIGludGwsICJtb250aCIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gX3RoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdOwogICAgICAgIH0pOwogICAgICB9OwoKICAgICAgX3Byb3RvNC53ZWVrZGF5cyA9IGZ1bmN0aW9uIHdlZWtkYXlzJDEobGVuZ3RoLCBmb3JtYXQsIGRlZmF1bHRPSykgewogICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgICBpZiAoZm9ybWF0ID09PSB2b2lkIDApIHsKICAgICAgICAgIGZvcm1hdCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGRlZmF1bHRPSyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWZhdWx0T0sgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgd2Vla2RheXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBpbnRsID0gZm9ybWF0ID8gewogICAgICAgICAgICB3ZWVrZGF5OiBsZW5ndGgsCiAgICAgICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICAgICAgbW9udGg6ICJsb25nIiwKICAgICAgICAgICAgZGF5OiAibnVtZXJpYyIKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIHdlZWtkYXk6IGxlbmd0aAogICAgICAgICAgfSwKICAgICAgICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyAiZm9ybWF0IiA6ICJzdGFuZGFsb25lIjsKCiAgICAgICAgICBpZiAoIV90aGlzMi53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkgewogICAgICAgICAgICBfdGhpczIud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF0gPSBtYXBXZWVrZGF5cyhmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmV4dHJhY3QoZHQsIGludGwsICJ3ZWVrZGF5Iik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiBfdGhpczIud2Vla2RheXNDYWNoZVtmb3JtYXRTdHJdW2xlbmd0aF07CiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICBfcHJvdG80Lm1lcmlkaWVtcyA9IGZ1bmN0aW9uIG1lcmlkaWVtcyQxKGRlZmF1bHRPSykgewogICAgICAgIHZhciBfdGhpczMgPSB0aGlzOwoKICAgICAgICBpZiAoZGVmYXVsdE9LID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlZmF1bHRPSyA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIHVuZGVmaW5lZCwgZGVmYXVsdE9LLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gbWVyaWRpZW1zOwogICAgICAgIH0sIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEluIHRoZW9yeSB0aGVyZSBjb3VsZCBiZSBhcmliaXRyYXJ5IGRheSBwZXJpb2RzLiBXZSdyZSBnb25uYSBhc3N1bWUgdGhlcmUgYXJlIGV4YWN0bHkgdHdvCiAgICAgICAgICAvLyBmb3IgQU0gYW5kIFBNLiBUaGlzIGlzIHByb2JhYmx5IHdyb25nLCBidXQgaXQncyBtYWtlcyBwYXJzaW5nIHdheSBlYXNpZXIuCiAgICAgICAgICBpZiAoIV90aGlzMy5tZXJpZGllbUNhY2hlKSB7CiAgICAgICAgICAgIHZhciBpbnRsID0gewogICAgICAgICAgICAgIGhvdXI6ICJudW1lcmljIiwKICAgICAgICAgICAgICBob3VyQ3ljbGU6ICJoMTIiCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIF90aGlzMy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLmV4dHJhY3QoZHQsIGludGwsICJkYXlwZXJpb2QiKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIF90aGlzMy5tZXJpZGllbUNhY2hlOwogICAgICAgIH0pOwogICAgICB9OwoKICAgICAgX3Byb3RvNC5lcmFzID0gZnVuY3Rpb24gZXJhcyQxKGxlbmd0aCwgZGVmYXVsdE9LKSB7CiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CgogICAgICAgIGlmIChkZWZhdWx0T0sgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVmYXVsdE9LID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBsaXN0U3R1ZmYodGhpcywgbGVuZ3RoLCBkZWZhdWx0T0ssIGVyYXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBpbnRsID0gewogICAgICAgICAgICBlcmE6IGxlbmd0aAogICAgICAgICAgfTsgLy8gVGhpcyBpcyBwcm9ibGVtYXRpYy4gRGlmZmVyZW50IGNhbGVuZGFycyBhcmUgZ29pbmcgdG8gZGVmaW5lIGVyYXMgdG90YWxseSBkaWZmZXJlbnRseS4gV2hhdCBJIG5lZWQgaXMgdGhlIG1pbmltdW0gc2V0IG9mIGRhdGVzCiAgICAgICAgICAvLyB0byBkZWZpbml0ZWx5IGVudW1lcmF0ZSB0aGVtLgoKICAgICAgICAgIGlmICghX3RoaXM0LmVyYUNhY2hlW2xlbmd0aF0pIHsKICAgICAgICAgICAgX3RoaXM0LmVyYUNhY2hlW2xlbmd0aF0gPSBbRGF0ZVRpbWUudXRjKC00MCwgMSwgMSksIERhdGVUaW1lLnV0YygyMDE3LCAxLCAxKV0ubWFwKGZ1bmN0aW9uIChkdCkgewogICAgICAgICAgICAgIHJldHVybiBfdGhpczQuZXh0cmFjdChkdCwgaW50bCwgImVyYSIpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gX3RoaXM0LmVyYUNhY2hlW2xlbmd0aF07CiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICBfcHJvdG80LmV4dHJhY3QgPSBmdW5jdGlvbiBleHRyYWN0KGR0LCBpbnRsT3B0cywgZmllbGQpIHsKICAgICAgICB2YXIgZGYgPSB0aGlzLmR0Rm9ybWF0dGVyKGR0LCBpbnRsT3B0cyksCiAgICAgICAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksCiAgICAgICAgICAgIG1hdGNoaW5nID0gcmVzdWx0cy5maW5kKGZ1bmN0aW9uIChtKSB7CiAgICAgICAgICByZXR1cm4gbS50eXBlLnRvTG93ZXJDYXNlKCkgPT09IGZpZWxkOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBtYXRjaGluZyA/IG1hdGNoaW5nLnZhbHVlIDogbnVsbDsKICAgICAgfTsKCiAgICAgIF9wcm90bzQubnVtYmVyRm9ybWF0dGVyID0gZnVuY3Rpb24gbnVtYmVyRm9ybWF0dGVyKG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICAvLyB0aGlzIGZvcmNlc2ltcGxlIG9wdGlvbiBpcyBuZXZlciB1c2VkICh0aGUgb25seSBjYWxsZXIgc2hvcnQtY2lyY3VpdHMgb24gaXQsIGJ1dCBpdCBzZWVtcyBzYWZlciB0byBsZWF2ZSkKICAgICAgICAvLyAoaW4gY29udHJhc3QsIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb24gaXMgdXNlZCBoZWF2aWx5KQogICAgICAgIHJldHVybiBuZXcgUG9seU51bWJlckZvcm1hdHRlcih0aGlzLmludGwsIG9wdHMuZm9yY2VTaW1wbGUgfHwgdGhpcy5mYXN0TnVtYmVycywgb3B0cyk7CiAgICAgIH07CgogICAgICBfcHJvdG80LmR0Rm9ybWF0dGVyID0gZnVuY3Rpb24gZHRGb3JtYXR0ZXIoZHQsIGludGxPcHRzKSB7CiAgICAgICAgaWYgKGludGxPcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIGludGxPcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFBvbHlEYXRlRm9ybWF0dGVyKGR0LCB0aGlzLmludGwsIGludGxPcHRzKTsKICAgICAgfTsKCiAgICAgIF9wcm90bzQucmVsRm9ybWF0dGVyID0gZnVuY3Rpb24gcmVsRm9ybWF0dGVyKG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFBvbHlSZWxGb3JtYXR0ZXIodGhpcy5pbnRsLCB0aGlzLmlzRW5nbGlzaCgpLCBvcHRzKTsKICAgICAgfTsKCiAgICAgIF9wcm90bzQuaXNFbmdsaXNoID0gZnVuY3Rpb24gaXNFbmdsaXNoKCkgewogICAgICAgIHJldHVybiB0aGlzLmxvY2FsZSA9PT0gImVuIiB8fCB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSAiZW4tdXMiIHx8IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMuaW50bCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlLnN0YXJ0c1dpdGgoImVuLXVzIik7CiAgICAgIH07CgogICAgICBfcHJvdG80LmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmxvY2FsZSA9PT0gb3RoZXIubG9jYWxlICYmIHRoaXMubnVtYmVyaW5nU3lzdGVtID09PSBvdGhlci5udW1iZXJpbmdTeXN0ZW0gJiYgdGhpcy5vdXRwdXRDYWxlbmRhciA9PT0gb3RoZXIub3V0cHV0Q2FsZW5kYXI7CiAgICAgIH07CgogICAgICBfY3JlYXRlQ2xhc3MoTG9jYWxlLCBbewogICAgICAgIGtleTogImZhc3ROdW1iZXJzIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIGlmICh0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5mYXN0TnVtYmVyc0NhY2hlZCA9IHN1cHBvcnRzRmFzdE51bWJlcnModGhpcyk7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQ7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gTG9jYWxlOwogICAgfSgpOwoKICAgIC8qCiAgICAgKiBUaGlzIGZpbGUgaGFuZGxlcyBwYXJzaW5nIGZvciB3ZWxsLXNwZWNpZmllZCBmb3JtYXRzLiBIZXJlJ3MgaG93IGl0IHdvcmtzOgogICAgICogVHdvIHRoaW5ncyBnbyBpbnRvIHBhcnNpbmc6IGEgcmVnZXggdG8gbWF0Y2ggd2l0aCBhbmQgYW4gZXh0cmFjdG9yIHRvIHRha2UgYXBhcnQgdGhlIGdyb3VwcyBpbiB0aGUgbWF0Y2guCiAgICAgKiBBbiBleHRyYWN0b3IgaXMganVzdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSByZWdleCBtYXRjaCBhcnJheSBhbmQgcmV0dXJucyBhIHsgeWVhcjogLi4uLCBtb250aDogLi4uIH0gb2JqZWN0CiAgICAgKiBwYXJzZSgpIGRvZXMgdGhlIHdvcmsgb2YgZXhlY3V0aW5nIHRoZSByZWdleCBhbmQgYXBwbHlpbmcgdGhlIGV4dHJhY3Rvci4gSXQgdGFrZXMgbXVsdGlwbGUgcmVnZXgvZXh0cmFjdG9yIHBhaXJzIHRvIHRyeSBpbiBzZXF1ZW5jZS4KICAgICAqIEV4dHJhY3RvcnMgY2FuIHRha2UgYSAiY3Vyc29yIiByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBpbiB0aGUgbWF0Y2ggdG8gbG9vayBhdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIGNvbWJpbmUgZXh0cmFjdG9ycy4KICAgICAqIGNvbWJpbmVFeHRyYWN0b3JzKCkgZG9lcyB0aGUgd29yayBvZiBjb21iaW5pbmcgdGhlbSwga2VlcGluZyB0cmFjayBvZiB0aGUgY3Vyc29yIHRocm91Z2ggbXVsdGlwbGUgZXh0cmFjdGlvbnMuCiAgICAgKiBTb21lIGV4dHJhY3Rpb25zIGFyZSBzdXBlciBkdW1iIGFuZCBzaW1wbGVQYXJzZSBhbmQgZnJvbVN0cmluZ3MgaGVscCBEUlkgdGhlbS4KICAgICAqLwoKICAgIGZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKCkgewogICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVnZXhlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICByZWdleGVzW19rZXldID0gYXJndW1lbnRzW19rZXldOwogICAgICB9CgogICAgICB2YXIgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKGZ1bmN0aW9uIChmLCByKSB7CiAgICAgICAgcmV0dXJuIGYgKyByLnNvdXJjZTsKICAgICAgfSwgIiIpOwogICAgICByZXR1cm4gUmVnRXhwKCJeIiArIGZ1bGwgKyAiJCIpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbWJpbmVFeHRyYWN0b3JzKCkgewogICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4dHJhY3RvcnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHsKICAgICAgICBleHRyYWN0b3JzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07CiAgICAgIH0KCiAgICAgIHJldHVybiBmdW5jdGlvbiAobSkgewogICAgICAgIHJldHVybiBleHRyYWN0b3JzLnJlZHVjZShmdW5jdGlvbiAoX3JlZiwgZXgpIHsKICAgICAgICAgIHZhciBtZXJnZWRWYWxzID0gX3JlZlswXSwKICAgICAgICAgICAgICBtZXJnZWRab25lID0gX3JlZlsxXSwKICAgICAgICAgICAgICBjdXJzb3IgPSBfcmVmWzJdOwoKICAgICAgICAgIHZhciBfZXggPSBleChtLCBjdXJzb3IpLAogICAgICAgICAgICAgIHZhbCA9IF9leFswXSwKICAgICAgICAgICAgICB6b25lID0gX2V4WzFdLAogICAgICAgICAgICAgIG5leHQgPSBfZXhbMl07CgogICAgICAgICAgcmV0dXJuIFtfZXh0ZW5kcyh7fSwgbWVyZ2VkVmFscywgdmFsKSwgbWVyZ2VkWm9uZSB8fCB6b25lLCBuZXh0XTsKICAgICAgICB9LCBbe30sIG51bGwsIDFdKS5zbGljZSgwLCAyKTsKICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZShzKSB7CiAgICAgIGlmIChzID09IG51bGwpIHsKICAgICAgICByZXR1cm4gW251bGwsIG51bGxdOwogICAgICB9CgogICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHBhdHRlcm5zID0gbmV3IEFycmF5KF9sZW4zID4gMSA/IF9sZW4zIC0gMSA6IDApLCBfa2V5MyA9IDE7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHsKICAgICAgICBwYXR0ZXJuc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTsKICAgICAgfQoKICAgICAgZm9yICh2YXIgX2kgPSAwLCBfcGF0dGVybnMgPSBwYXR0ZXJuczsgX2kgPCBfcGF0dGVybnMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgdmFyIF9wYXR0ZXJucyRfaSA9IF9wYXR0ZXJuc1tfaV0sCiAgICAgICAgICAgIHJlZ2V4ID0gX3BhdHRlcm5zJF9pWzBdLAogICAgICAgICAgICBleHRyYWN0b3IgPSBfcGF0dGVybnMkX2lbMV07CiAgICAgICAgdmFyIG0gPSByZWdleC5leGVjKHMpOwoKICAgICAgICBpZiAobSkgewogICAgICAgICAgcmV0dXJuIGV4dHJhY3RvcihtKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07CiAgICB9CgogICAgZnVuY3Rpb24gc2ltcGxlUGFyc2UoKSB7CiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwga2V5cyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykgewogICAgICAgIGtleXNbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTsKICAgICAgfQoKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtYXRjaCwgY3Vyc29yKSB7CiAgICAgICAgdmFyIHJldCA9IHt9OwogICAgICAgIHZhciBpOwoKICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBbcmV0LCBudWxsLCBjdXJzb3IgKyBpXTsKICAgICAgfTsKICAgIH0gLy8gSVNPIGFuZCBTUUwgcGFyc2luZwoKCiAgICB2YXIgb2Zmc2V0UmVnZXggPSAvKD86KFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/KS8sCiAgICAgICAgaXNvVGltZUJhc2VSZWdleCA9IC8oXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86Wy4sXShcZHsxLDMwfSkpPyk/KT8vLAogICAgICAgIGlzb1RpbWVSZWdleCA9IFJlZ0V4cCgiIiArIGlzb1RpbWVCYXNlUmVnZXguc291cmNlICsgb2Zmc2V0UmVnZXguc291cmNlICsgIj8iKSwKICAgICAgICBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoIig/OlQiICsgaXNvVGltZVJlZ2V4LnNvdXJjZSArICIpPyIpLAogICAgICAgIGlzb1ltZFJlZ2V4ID0gLyhbKy1dXGR7Nn18XGR7NH0pKD86LT8oXGRcZCkoPzotPyhcZFxkKSk/KT8vLAogICAgICAgIGlzb1dlZWtSZWdleCA9IC8oXGR7NH0pLT9XKFxkXGQpKD86LT8oXGQpKT8vLAogICAgICAgIGlzb09yZGluYWxSZWdleCA9IC8oXGR7NH0pLT8oXGR7M30pLywKICAgICAgICBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZSgid2Vla1llYXIiLCAid2Vla051bWJlciIsICJ3ZWVrRGF5IiksCiAgICAgICAgZXh0cmFjdElTT09yZGluYWxEYXRhID0gc2ltcGxlUGFyc2UoInllYXIiLCAib3JkaW5hbCIpLAogICAgICAgIHNxbFltZFJlZ2V4ID0gLyhcZHs0fSktKFxkXGQpLShcZFxkKS8sCiAgICAgICAgLy8gZHVtYmVkLWRvd24gdmVyc2lvbiBvZiB0aGUgSVNPIG9uZQogICAgc3FsVGltZVJlZ2V4ID0gUmVnRXhwKGlzb1RpbWVCYXNlUmVnZXguc291cmNlICsgIiA/KD86IiArIG9mZnNldFJlZ2V4LnNvdXJjZSArICJ8KCIgKyBpYW5hUmVnZXguc291cmNlICsgIikpPyIpLAogICAgICAgIHNxbFRpbWVFeHRlbnNpb25SZWdleCA9IFJlZ0V4cCgiKD86ICIgKyBzcWxUaW1lUmVnZXguc291cmNlICsgIik/Iik7CgogICAgZnVuY3Rpb24gaW50KG1hdGNoLCBwb3MsIGZhbGxiYWNrKSB7CiAgICAgIHZhciBtID0gbWF0Y2hbcG9zXTsKICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKG0pID8gZmFsbGJhY2sgOiBwYXJzZUludGVnZXIobSk7CiAgICB9CgogICAgZnVuY3Rpb24gZXh0cmFjdElTT1ltZChtYXRjaCwgY3Vyc29yKSB7CiAgICAgIHZhciBpdGVtID0gewogICAgICAgIHllYXI6IGludChtYXRjaCwgY3Vyc29yKSwKICAgICAgICBtb250aDogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAxKSwKICAgICAgICBkYXk6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMSkKICAgICAgfTsKICAgICAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTsKICAgIH0KCiAgICBmdW5jdGlvbiBleHRyYWN0SVNPVGltZShtYXRjaCwgY3Vyc29yKSB7CiAgICAgIHZhciBpdGVtID0gewogICAgICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksCiAgICAgICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSwKICAgICAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLAogICAgICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pCiAgICAgIH07CiAgICAgIHJldHVybiBbaXRlbSwgbnVsbCwgY3Vyc29yICsgNF07CiAgICB9CgogICAgZnVuY3Rpb24gZXh0cmFjdElTT09mZnNldChtYXRjaCwgY3Vyc29yKSB7CiAgICAgIHZhciBsb2NhbCA9ICFtYXRjaFtjdXJzb3JdICYmICFtYXRjaFtjdXJzb3IgKyAxXSwKICAgICAgICAgIGZ1bGxPZmZzZXQgPSBzaWduZWRPZmZzZXQobWF0Y2hbY3Vyc29yICsgMV0sIG1hdGNoW2N1cnNvciArIDJdKSwKICAgICAgICAgIHpvbmUgPSBsb2NhbCA/IG51bGwgOiBGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2UoZnVsbE9mZnNldCk7CiAgICAgIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDNdOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4dHJhY3RJQU5BWm9uZShtYXRjaCwgY3Vyc29yKSB7CiAgICAgIHZhciB6b25lID0gbWF0Y2hbY3Vyc29yXSA/IElBTkFab25lLmNyZWF0ZShtYXRjaFtjdXJzb3JdKSA6IG51bGw7CiAgICAgIHJldHVybiBbe30sIHpvbmUsIGN1cnNvciArIDFdOwogICAgfSAvLyBJU08gdGltZSBwYXJzaW5nCgoKICAgIHZhciBpc29UaW1lT25seSA9IFJlZ0V4cCgiXlQ/IiArIGlzb1RpbWVCYXNlUmVnZXguc291cmNlICsgIiQiKTsgLy8gSVNPIGR1cmF0aW9uIHBhcnNpbmcKCiAgICB2YXIgaXNvRHVyYXRpb24gPSAvXi0/UCg/Oig/OigtP1xkezEsOX0pWSk/KD86KC0/XGR7MSw5fSlNKT8oPzooLT9cZHsxLDl9KVcpPyg/OigtP1xkezEsOX0pRCk/KD86VCg/OigtP1xkezEsOX0pSCk/KD86KC0/XGR7MSw5fSlNKT8oPzooLT9cZHsxLDIwfSkoPzpbLixdKC0/XGR7MSw5fSkpP1MpPyk/KSQvOwoKICAgIGZ1bmN0aW9uIGV4dHJhY3RJU09EdXJhdGlvbihtYXRjaCkgewogICAgICB2YXIgcyA9IG1hdGNoWzBdLAogICAgICAgICAgeWVhclN0ciA9IG1hdGNoWzFdLAogICAgICAgICAgbW9udGhTdHIgPSBtYXRjaFsyXSwKICAgICAgICAgIHdlZWtTdHIgPSBtYXRjaFszXSwKICAgICAgICAgIGRheVN0ciA9IG1hdGNoWzRdLAogICAgICAgICAgaG91clN0ciA9IG1hdGNoWzVdLAogICAgICAgICAgbWludXRlU3RyID0gbWF0Y2hbNl0sCiAgICAgICAgICBzZWNvbmRTdHIgPSBtYXRjaFs3XSwKICAgICAgICAgIG1pbGxpc2Vjb25kc1N0ciA9IG1hdGNoWzhdOwogICAgICB2YXIgaGFzTmVnYXRpdmVQcmVmaXggPSBzWzBdID09PSAiLSI7CiAgICAgIHZhciBuZWdhdGl2ZVNlY29uZHMgPSBzZWNvbmRTdHIgJiYgc2Vjb25kU3RyWzBdID09PSAiLSI7CgogICAgICB2YXIgbWF5YmVOZWdhdGUgPSBmdW5jdGlvbiBtYXliZU5lZ2F0ZShudW0sIGZvcmNlKSB7CiAgICAgICAgaWYgKGZvcmNlID09PSB2b2lkIDApIHsKICAgICAgICAgIGZvcmNlID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVtICE9PSB1bmRlZmluZWQgJiYgKGZvcmNlIHx8IG51bSAmJiBoYXNOZWdhdGl2ZVByZWZpeCkgPyAtbnVtIDogbnVtOwogICAgICB9OwoKICAgICAgcmV0dXJuIFt7CiAgICAgICAgeWVhcnM6IG1heWJlTmVnYXRlKHBhcnNlSW50ZWdlcih5ZWFyU3RyKSksCiAgICAgICAgbW9udGhzOiBtYXliZU5lZ2F0ZShwYXJzZUludGVnZXIobW9udGhTdHIpKSwKICAgICAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VJbnRlZ2VyKHdlZWtTdHIpKSwKICAgICAgICBkYXlzOiBtYXliZU5lZ2F0ZShwYXJzZUludGVnZXIoZGF5U3RyKSksCiAgICAgICAgaG91cnM6IG1heWJlTmVnYXRlKHBhcnNlSW50ZWdlcihob3VyU3RyKSksCiAgICAgICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VJbnRlZ2VyKG1pbnV0ZVN0cikpLAogICAgICAgIHNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlSW50ZWdlcihzZWNvbmRTdHIpLCBzZWNvbmRTdHIgPT09ICItMCIpLAogICAgICAgIG1pbGxpc2Vjb25kczogbWF5YmVOZWdhdGUocGFyc2VNaWxsaXMobWlsbGlzZWNvbmRzU3RyKSwgbmVnYXRpdmVTZWNvbmRzKQogICAgICB9XTsKICAgIH0gLy8gVGhlc2UgYXJlIGEgbGl0dGxlIGJyYWluZGVhZC4gRURUICpzaG91bGQqIHRlbGwgdXMgdGhhdCB3ZSdyZSBpbiwgc2F5LCBBbWVyaWNhL05ld19Zb3JrCiAgICAvLyBhbmQgbm90IGp1c3QgdGhhdCB3ZSdyZSBpbiAtMjQwICpyaWdodCBub3cqLiBCdXQgc2luY2UgSSBkb24ndCB0aGluayB0aGVzZSBhcmUgdXNlZCB0aGF0IG9mdGVuCiAgICAvLyBJJ20ganVzdCBnb2luZyB0byBpZ25vcmUgdGhhdAoKCiAgICB2YXIgb2JzT2Zmc2V0cyA9IHsKICAgICAgR01UOiAwLAogICAgICBFRFQ6IC00ICogNjAsCiAgICAgIEVTVDogLTUgKiA2MCwKICAgICAgQ0RUOiAtNSAqIDYwLAogICAgICBDU1Q6IC02ICogNjAsCiAgICAgIE1EVDogLTYgKiA2MCwKICAgICAgTVNUOiAtNyAqIDYwLAogICAgICBQRFQ6IC03ICogNjAsCiAgICAgIFBTVDogLTggKiA2MAogICAgfTsKCiAgICBmdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikgewogICAgICB2YXIgcmVzdWx0ID0gewogICAgICAgIHllYXI6IHllYXJTdHIubGVuZ3RoID09PSAyID8gdW50cnVuY2F0ZVllYXIocGFyc2VJbnRlZ2VyKHllYXJTdHIpKSA6IHBhcnNlSW50ZWdlcih5ZWFyU3RyKSwKICAgICAgICBtb250aDogbW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0cikgKyAxLAogICAgICAgIGRheTogcGFyc2VJbnRlZ2VyKGRheVN0ciksCiAgICAgICAgaG91cjogcGFyc2VJbnRlZ2VyKGhvdXJTdHIpLAogICAgICAgIG1pbnV0ZTogcGFyc2VJbnRlZ2VyKG1pbnV0ZVN0cikKICAgICAgfTsKICAgICAgaWYgKHNlY29uZFN0cikgcmVzdWx0LnNlY29uZCA9IHBhcnNlSW50ZWdlcihzZWNvbmRTdHIpOwoKICAgICAgaWYgKHdlZWtkYXlTdHIpIHsKICAgICAgICByZXN1bHQud2Vla2RheSA9IHdlZWtkYXlTdHIubGVuZ3RoID4gMyA/IHdlZWtkYXlzTG9uZy5pbmRleE9mKHdlZWtkYXlTdHIpICsgMSA6IHdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDE7CiAgICAgIH0KCiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IC8vIFJGQyAyODIyLzUzMjIKCgogICAgdmFyIHJmYzI4MjIgPSAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLFxzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXGRcZCkoXGRcZCkpKSQvOwoKICAgIGZ1bmN0aW9uIGV4dHJhY3RSRkMyODIyKG1hdGNoKSB7CiAgICAgIHZhciB3ZWVrZGF5U3RyID0gbWF0Y2hbMV0sCiAgICAgICAgICBkYXlTdHIgPSBtYXRjaFsyXSwKICAgICAgICAgIG1vbnRoU3RyID0gbWF0Y2hbM10sCiAgICAgICAgICB5ZWFyU3RyID0gbWF0Y2hbNF0sCiAgICAgICAgICBob3VyU3RyID0gbWF0Y2hbNV0sCiAgICAgICAgICBtaW51dGVTdHIgPSBtYXRjaFs2XSwKICAgICAgICAgIHNlY29uZFN0ciA9IG1hdGNoWzddLAogICAgICAgICAgb2JzT2Zmc2V0ID0gbWF0Y2hbOF0sCiAgICAgICAgICBtaWxPZmZzZXQgPSBtYXRjaFs5XSwKICAgICAgICAgIG9mZkhvdXJTdHIgPSBtYXRjaFsxMF0sCiAgICAgICAgICBvZmZNaW51dGVTdHIgPSBtYXRjaFsxMV0sCiAgICAgICAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7CiAgICAgIHZhciBvZmZzZXQ7CgogICAgICBpZiAob2JzT2Zmc2V0KSB7CiAgICAgICAgb2Zmc2V0ID0gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdOwogICAgICB9IGVsc2UgaWYgKG1pbE9mZnNldCkgewogICAgICAgIG9mZnNldCA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7CiAgICAgIH0KCiAgICAgIHJldHVybiBbcmVzdWx0LCBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCldOwogICAgfQoKICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHsKICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2UKICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCAiICIpLnJlcGxhY2UoLyhcc1xzKykvZywgIiAiKS50cmltKCk7CiAgICB9IC8vIGh0dHAgZGF0ZQoKCiAgICB2YXIgcmZjMTEyMyA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksIChcZFxkKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpIChcZHs0fSkgKFxkXGQpOihcZFxkKTooXGRcZCkgR01UJC8sCiAgICAgICAgcmZjODUwID0gL14oTW9uZGF5fFR1ZXNkYXl8V2Vkc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxkXGQpLShKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYyktKFxkXGQpIChcZFxkKTooXGRcZCk6KFxkXGQpIEdNVCQvLAogICAgICAgIGFzY2lpID0gL14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpICggXGR8XGRcZCkgKFxkXGQpOihcZFxkKTooXGRcZCkgKFxkezR9KSQvOwoKICAgIGZ1bmN0aW9uIGV4dHJhY3RSRkMxMTIzT3I4NTAobWF0Y2gpIHsKICAgICAgdmFyIHdlZWtkYXlTdHIgPSBtYXRjaFsxXSwKICAgICAgICAgIGRheVN0ciA9IG1hdGNoWzJdLAogICAgICAgICAgbW9udGhTdHIgPSBtYXRjaFszXSwKICAgICAgICAgIHllYXJTdHIgPSBtYXRjaFs0XSwKICAgICAgICAgIGhvdXJTdHIgPSBtYXRjaFs1XSwKICAgICAgICAgIG1pbnV0ZVN0ciA9IG1hdGNoWzZdLAogICAgICAgICAgc2Vjb25kU3RyID0gbWF0Y2hbN10sCiAgICAgICAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7CiAgICAgIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdOwogICAgfQoKICAgIGZ1bmN0aW9uIGV4dHJhY3RBU0NJSShtYXRjaCkgewogICAgICB2YXIgd2Vla2RheVN0ciA9IG1hdGNoWzFdLAogICAgICAgICAgbW9udGhTdHIgPSBtYXRjaFsyXSwKICAgICAgICAgIGRheVN0ciA9IG1hdGNoWzNdLAogICAgICAgICAgaG91clN0ciA9IG1hdGNoWzRdLAogICAgICAgICAgbWludXRlU3RyID0gbWF0Y2hbNV0sCiAgICAgICAgICBzZWNvbmRTdHIgPSBtYXRjaFs2XSwKICAgICAgICAgIHllYXJTdHIgPSBtYXRjaFs3XSwKICAgICAgICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTsKICAgICAgcmV0dXJuIFtyZXN1bHQsIEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZV07CiAgICB9CgogICAgdmFyIGlzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29ZbWRSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTsKICAgIHZhciBpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1dlZWtSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTsKICAgIHZhciBpc29PcmRpbmFsV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb09yZGluYWxSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTsKICAgIHZhciBpc29UaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1RpbWVSZWdleCk7CiAgICB2YXIgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPWW1kLCBleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCk7CiAgICB2YXIgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1dlZWtEYXRhLCBleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCk7CiAgICB2YXIgZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09PcmRpbmFsRGF0YSwgZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQpOwogICAgdmFyIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQpOwogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgogICAgZnVuY3Rpb24gcGFyc2VJU09EYXRlKHMpIHsKICAgICAgcmV0dXJuIHBhcnNlKHMsIFtpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sIFtpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCwgZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0XSwgW2lzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lXSwgW2lzb1RpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZUFuZE9mZnNldF0pOwogICAgfQogICAgZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShzKSB7CiAgICAgIHJldHVybiBwYXJzZShwcmVwcm9jZXNzUkZDMjgyMihzKSwgW3JmYzI4MjIsIGV4dHJhY3RSRkMyODIyXSk7CiAgICB9CiAgICBmdW5jdGlvbiBwYXJzZUhUVFBEYXRlKHMpIHsKICAgICAgcmV0dXJuIHBhcnNlKHMsIFtyZmMxMTIzLCBleHRyYWN0UkZDMTEyM09yODUwXSwgW3JmYzg1MCwgZXh0cmFjdFJGQzExMjNPcjg1MF0sIFthc2NpaSwgZXh0cmFjdEFTQ0lJXSk7CiAgICB9CiAgICBmdW5jdGlvbiBwYXJzZUlTT0R1cmF0aW9uKHMpIHsKICAgICAgcmV0dXJuIHBhcnNlKHMsIFtpc29EdXJhdGlvbiwgZXh0cmFjdElTT0R1cmF0aW9uXSk7CiAgICB9CiAgICB2YXIgZXh0cmFjdElTT1RpbWVPbmx5ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUpOwogICAgZnVuY3Rpb24gcGFyc2VJU09UaW1lT25seShzKSB7CiAgICAgIHJldHVybiBwYXJzZShzLCBbaXNvVGltZU9ubHksIGV4dHJhY3RJU09UaW1lT25seV0pOwogICAgfQogICAgdmFyIHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTsKICAgIHZhciBzcWxUaW1lQ29tYmluZWRSZWdleCA9IGNvbWJpbmVSZWdleGVzKHNxbFRpbWVSZWdleCk7CiAgICB2YXIgZXh0cmFjdElTT1ltZFRpbWVPZmZzZXRBbmRJQU5BWm9uZSA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09ZbWQsIGV4dHJhY3RJU09UaW1lLCBleHRyYWN0SVNPT2Zmc2V0LCBleHRyYWN0SUFOQVpvbmUpOwogICAgdmFyIGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCwgZXh0cmFjdElBTkFab25lKTsKICAgIGZ1bmN0aW9uIHBhcnNlU1FMKHMpIHsKICAgICAgcmV0dXJuIHBhcnNlKHMsIFtzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZU9mZnNldEFuZElBTkFab25lXSwgW3NxbFRpbWVDb21iaW5lZFJlZ2V4LCBleHRyYWN0SVNPVGltZU9mZnNldEFuZElBTkFab25lXSk7CiAgICB9CgogICAgdmFyIElOVkFMSUQkMiA9ICJJbnZhbGlkIER1cmF0aW9uIjsgLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50cwoKICAgIHZhciBsb3dPcmRlck1hdHJpeCA9IHsKICAgICAgd2Vla3M6IHsKICAgICAgICBkYXlzOiA3LAogICAgICAgIGhvdXJzOiA3ICogMjQsCiAgICAgICAgbWludXRlczogNyAqIDI0ICogNjAsCiAgICAgICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCwKICAgICAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwCiAgICAgIH0sCiAgICAgIGRheXM6IHsKICAgICAgICBob3VyczogMjQsCiAgICAgICAgbWludXRlczogMjQgKiA2MCwKICAgICAgICBzZWNvbmRzOiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwCiAgICAgIH0sCiAgICAgIGhvdXJzOiB7CiAgICAgICAgbWludXRlczogNjAsCiAgICAgICAgc2Vjb25kczogNjAgKiA2MCwKICAgICAgICBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwCiAgICAgIH0sCiAgICAgIG1pbnV0ZXM6IHsKICAgICAgICBzZWNvbmRzOiA2MCwKICAgICAgICBtaWxsaXNlY29uZHM6IDYwICogMTAwMAogICAgICB9LAogICAgICBzZWNvbmRzOiB7CiAgICAgICAgbWlsbGlzZWNvbmRzOiAxMDAwCiAgICAgIH0KICAgIH0sCiAgICAgICAgY2FzdWFsTWF0cml4ID0gX2V4dGVuZHMoewogICAgICB5ZWFyczogewogICAgICAgIHF1YXJ0ZXJzOiA0LAogICAgICAgIG1vbnRoczogMTIsCiAgICAgICAgd2Vla3M6IDUyLAogICAgICAgIGRheXM6IDM2NSwKICAgICAgICBob3VyczogMzY1ICogMjQsCiAgICAgICAgbWludXRlczogMzY1ICogMjQgKiA2MCwKICAgICAgICBzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwCiAgICAgIH0sCiAgICAgIHF1YXJ0ZXJzOiB7CiAgICAgICAgbW9udGhzOiAzLAogICAgICAgIHdlZWtzOiAxMywKICAgICAgICBkYXlzOiA5MSwKICAgICAgICBob3VyczogOTEgKiAyNCwKICAgICAgICBtaW51dGVzOiA5MSAqIDI0ICogNjAsCiAgICAgICAgc2Vjb25kczogOTEgKiAyNCAqIDYwICogNjAsCiAgICAgICAgbWlsbGlzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCAqIDEwMDAKICAgICAgfSwKICAgICAgbW9udGhzOiB7CiAgICAgICAgd2Vla3M6IDQsCiAgICAgICAgZGF5czogMzAsCiAgICAgICAgaG91cnM6IDMwICogMjQsCiAgICAgICAgbWludXRlczogMzAgKiAyNCAqIDYwLAogICAgICAgIHNlY29uZHM6IDMwICogMjQgKiA2MCAqIDYwLAogICAgICAgIG1pbGxpc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAgKiAxMDAwCiAgICAgIH0KICAgIH0sIGxvd09yZGVyTWF0cml4KSwKICAgICAgICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCwKICAgICAgICBkYXlzSW5Nb250aEFjY3VyYXRlID0gMTQ2MDk3LjAgLyA0ODAwLAogICAgICAgIGFjY3VyYXRlTWF0cml4ID0gX2V4dGVuZHMoewogICAgICB5ZWFyczogewogICAgICAgIHF1YXJ0ZXJzOiA0LAogICAgICAgIG1vbnRoczogMTIsCiAgICAgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDcsCiAgICAgICAgZGF5czogZGF5c0luWWVhckFjY3VyYXRlLAogICAgICAgIGhvdXJzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCwKICAgICAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwLAogICAgICAgIHNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCwKICAgICAgICBtaWxsaXNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAKICAgICAgfSwKICAgICAgcXVhcnRlcnM6IHsKICAgICAgICBtb250aHM6IDMsCiAgICAgICAgd2Vla3M6IGRheXNJblllYXJBY2N1cmF0ZSAvIDI4LAogICAgICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSAvIDQsCiAgICAgICAgaG91cnM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0IC8gNCwKICAgICAgICBtaW51dGVzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwIC8gNCwKICAgICAgICBzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgLyA0LAogICAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwICogMTAwMCAvIDQKICAgICAgfSwKICAgICAgbW9udGhzOiB7CiAgICAgICAgd2Vla3M6IGRheXNJbk1vbnRoQWNjdXJhdGUgLyA3LAogICAgICAgIGRheXM6IGRheXNJbk1vbnRoQWNjdXJhdGUsCiAgICAgICAgaG91cnM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCwKICAgICAgICBtaW51dGVzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCwKICAgICAgICBzZWNvbmRzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQgKiA2MCAqIDYwLAogICAgICAgIG1pbGxpc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAKICAgICAgfQogICAgfSwgbG93T3JkZXJNYXRyaXgpOyAvLyB1bml0cyBvcmRlcmVkIGJ5IHNpemUKCgogICAgdmFyIG9yZGVyZWRVbml0cyQxID0gWyJ5ZWFycyIsICJxdWFydGVycyIsICJtb250aHMiLCAid2Vla3MiLCAiZGF5cyIsICJob3VycyIsICJtaW51dGVzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIl07CiAgICB2YXIgcmV2ZXJzZVVuaXRzID0gb3JkZXJlZFVuaXRzJDEuc2xpY2UoMCkucmV2ZXJzZSgpOyAvLyBjbG9uZSByZWFsbHkgbWVhbnMgImNyZWF0ZSBhbm90aGVyIGluc3RhbmNlIGp1c3QgbGlrZSB0aGlzIG9uZSwgYnV0IHdpdGggdGhlc2UgY2hhbmdlcyIKCiAgICBmdW5jdGlvbiBjbG9uZSQxKGR1ciwgYWx0cywgY2xlYXIpIHsKICAgICAgaWYgKGNsZWFyID09PSB2b2lkIDApIHsKICAgICAgICBjbGVhciA9IGZhbHNlOwogICAgICB9CgogICAgICAvLyBkZWVwIG1lcmdlIGZvciB2YWxzCiAgICAgIHZhciBjb25mID0gewogICAgICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IF9leHRlbmRzKHt9LCBkdXIudmFsdWVzLCBhbHRzLnZhbHVlcyB8fCB7fSksCiAgICAgICAgbG9jOiBkdXIubG9jLmNsb25lKGFsdHMubG9jKSwKICAgICAgICBjb252ZXJzaW9uQWNjdXJhY3k6IGFsdHMuY29udmVyc2lvbkFjY3VyYWN5IHx8IGR1ci5jb252ZXJzaW9uQWNjdXJhY3kKICAgICAgfTsKICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbihjb25mKTsKICAgIH0KCiAgICBmdW5jdGlvbiBhbnRpVHJ1bmMobikgewogICAgICByZXR1cm4gbiA8IDAgPyBNYXRoLmZsb29yKG4pIDogTWF0aC5jZWlsKG4pOwogICAgfSAvLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzCgoKICAgIGZ1bmN0aW9uIGNvbnZlcnQobWF0cml4LCBmcm9tTWFwLCBmcm9tVW5pdCwgdG9NYXAsIHRvVW5pdCkgewogICAgICB2YXIgY29udiA9IG1hdHJpeFt0b1VuaXRdW2Zyb21Vbml0XSwKICAgICAgICAgIHJhdyA9IGZyb21NYXBbZnJvbVVuaXRdIC8gY29udiwKICAgICAgICAgIHNhbWVTaWduID0gTWF0aC5zaWduKHJhdykgPT09IE1hdGguc2lnbih0b01hcFt0b1VuaXRdKSwKICAgICAgICAgIC8vIG9rLCBzbyB0aGlzIGlzIHdpbGQsIGJ1dCBzZWUgdGhlIG1hdHJpeCBpbiB0aGUgdGVzdHMKICAgICAgYWRkZWQgPSAhc2FtZVNpZ24gJiYgdG9NYXBbdG9Vbml0XSAhPT0gMCAmJiBNYXRoLmFicyhyYXcpIDw9IDEgPyBhbnRpVHJ1bmMocmF3KSA6IE1hdGgudHJ1bmMocmF3KTsKICAgICAgdG9NYXBbdG9Vbml0XSArPSBhZGRlZDsKICAgICAgZnJvbU1hcFtmcm9tVW5pdF0gLT0gYWRkZWQgKiBjb252OwogICAgfSAvLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzCgoKICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlcyhtYXRyaXgsIHZhbHMpIHsKICAgICAgcmV2ZXJzZVVuaXRzLnJlZHVjZShmdW5jdGlvbiAocHJldmlvdXMsIGN1cnJlbnQpIHsKICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbHNbY3VycmVudF0pKSB7CiAgICAgICAgICBpZiAocHJldmlvdXMpIHsKICAgICAgICAgICAgY29udmVydChtYXRyaXgsIHZhbHMsIHByZXZpb3VzLCB2YWxzLCBjdXJyZW50KTsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwogICAgICAgIH0KICAgICAgfSwgbnVsbCk7CiAgICB9CiAgICAvKioKICAgICAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSAiMiBtb250aHMiIG9yICIxIGRheSwgMSBob3VyIi4gQ29uY2VwdHVhbGx5LCBpdCdzIGp1c3QgYSBtYXAgb2YgdW5pdHMgdG8gdGhlaXIgcXVhbnRpdGllcywgYWNjb21wYW5pZWQgYnkgc29tZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gYW5kIG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uIFRoZXkgY2FuIGJlIHVzZWQgb24gdGhlaXIgb3duIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggb3RoZXIgTHV4b24gdHlwZXM7IGZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSB7QGxpbmsgRGF0ZVRpbWUucGx1c30gdG8gYWRkIGEgRHVyYXRpb24gb2JqZWN0IHRvIGEgRGF0ZVRpbWUsIHByb2R1Y2luZyBhbm90aGVyIERhdGVUaW1lLgogICAgICoKICAgICAqIEhlcmUgaXMgYSBicmllZiBvdmVydmlldyBvZiBjb21tb25seSB1c2VkIG1ldGhvZHMgYW5kIGdldHRlcnMgaW4gRHVyYXRpb246CiAgICAgKgogICAgICogKiAqKkNyZWF0aW9uKiogVG8gY3JlYXRlIGEgRHVyYXRpb24sIHVzZSB7QGxpbmsgRHVyYXRpb24uZnJvbU1pbGxpc30sIHtAbGluayBEdXJhdGlvbi5mcm9tT2JqZWN0fSwgb3Ige0BsaW5rIER1cmF0aW9uLmZyb21JU099LgogICAgICogKiAqKlVuaXQgdmFsdWVzKiogU2VlIHRoZSB7QGxpbmsgRHVyYXRpb24jeWVhcnN9LCB7QGxpbmsgRHVyYXRpb24ubW9udGhzfSwge0BsaW5rIER1cmF0aW9uI3dlZWtzfSwge0BsaW5rIER1cmF0aW9uI2RheXN9LCB7QGxpbmsgRHVyYXRpb24jaG91cnN9LCB7QGxpbmsgRHVyYXRpb24jbWludXRlc30sIHtAbGluayBEdXJhdGlvbiNzZWNvbmRzfSwge0BsaW5rIER1cmF0aW9uI21pbGxpc2Vjb25kc30gYWNjZXNzb3JzLgogICAgICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgIHtAbGluayBEdXJhdGlvbiNsb2NhbGV9IGFuZCB7QGxpbmsgRHVyYXRpb24jbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuCiAgICAgKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgbmV3IER1cmF0aW9ucyBvdXQgb2Ygb2xkIG9uZXMgdXNlIHtAbGluayBEdXJhdGlvbiNwbHVzfSwge0BsaW5rIER1cmF0aW9uI21pbnVzfSwge0BsaW5rIER1cmF0aW9uI25vcm1hbGl6ZX0sIHtAbGluayBEdXJhdGlvbiNzZXR9LCB7QGxpbmsgRHVyYXRpb24jcmVjb25maWd1cmV9LCB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30sIGFuZCB7QGxpbmsgRHVyYXRpb24jbmVnYXRlfS4KICAgICAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBEdXJhdGlvbiBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBEdXJhdGlvbiNhc30sIHtAbGluayBEdXJhdGlvbiN0b0lTT30sIHtAbGluayBEdXJhdGlvbiN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgRHVyYXRpb24jdG9KU09OfQogICAgICoKICAgICAqIFRoZXJlJ3MgYXJlIG1vcmUgbWV0aG9kcyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgdmFsaWRpdHksIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi4KICAgICAqLwoKCiAgICB2YXIgRHVyYXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAvKioKICAgICAgICogQHByaXZhdGUKICAgICAgICovCiAgICAgIGZ1bmN0aW9uIER1cmF0aW9uKGNvbmZpZykgewogICAgICAgIHZhciBhY2N1cmF0ZSA9IGNvbmZpZy5jb252ZXJzaW9uQWNjdXJhY3kgPT09ICJsb25ndGVybSIgfHwgZmFsc2U7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMudmFsdWVzID0gY29uZmlnLnZhbHVlczsKICAgICAgICAvKioKICAgICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICAgKi8KCiAgICAgICAgdGhpcy5sb2MgPSBjb25maWcubG9jIHx8IExvY2FsZS5jcmVhdGUoKTsKICAgICAgICAvKioKICAgICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICAgKi8KCiAgICAgICAgdGhpcy5jb252ZXJzaW9uQWNjdXJhY3kgPSBhY2N1cmF0ZSA/ICJsb25ndGVybSIgOiAiY2FzdWFsIjsKICAgICAgICAvKioKICAgICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICAgKi8KCiAgICAgICAgdGhpcy5pbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgbnVsbDsKICAgICAgICAvKioKICAgICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICAgKi8KCiAgICAgICAgdGhpcy5tYXRyaXggPSBhY2N1cmF0ZSA/IGFjY3VyYXRlTWF0cml4IDogY2FzdWFsTWF0cml4OwogICAgICAgIC8qKgogICAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgICAqLwoKICAgICAgICB0aGlzLmlzTHV4b25EdXJhdGlvbiA9IHRydWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBEdXJhdGlvbiBmcm9tIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IG9mIG1pbGxpc2Vjb25kcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmcKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwoKCiAgICAgIER1cmF0aW9uLmZyb21NaWxsaXMgPSBmdW5jdGlvbiBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7CiAgICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoewogICAgICAgICAgbWlsbGlzZWNvbmRzOiBjb3VudAogICAgICAgIH0sIG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy4KICAgICAgICogSWYgdGhpcyBvYmplY3QgaXMgZW1wdHkgdGhlbiBhIHplcm8gbWlsbGlzZWNvbmRzIGR1cmF0aW9uIGlzIHJldHVybmVkLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb20KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFycwogICAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnF1YXJ0ZXJzCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGhzCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla3MKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXlzCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91cnMKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGVzCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kcwogICAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9W11dIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEdXJhdGlvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIER1cmF0aW9uLmZyb21PYmplY3QgPSBmdW5jdGlvbiBmcm9tT2JqZWN0KG9iaiwgb3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAib2JqZWN0IikgewogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJEdXJhdGlvbi5mcm9tT2JqZWN0OiBhcmd1bWVudCBleHBlY3RlZCB0byBiZSBhbiBvYmplY3QsIGdvdCAiICsgKG9iaiA9PT0gbnVsbCA/ICJudWxsIiA6IHR5cGVvZiBvYmopKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oewogICAgICAgICAgdmFsdWVzOiBub3JtYWxpemVPYmplY3Qob2JqLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSwKICAgICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0cyksCiAgICAgICAgICBjb252ZXJzaW9uQWNjdXJhY3k6IG9wdHMuY29udmVyc2lvbkFjY3VyYWN5CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYW4gSVNPIDg2MDEgZHVyYXRpb24gc3RyaW5nLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCiAgICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1AzWTZNMVc0RFQxMkgzME01UycpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAzLCBtb250aHM6IDYsIHdlZWtzOiAxLCBkYXlzOiA0LCBob3VyczogMTIsIG1pbnV0ZXM6IDMwLCBzZWNvbmRzOiA1IH0KICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUFQyM0gnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMjMgfQogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQNVkzTScpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiA1LCBtb250aHM6IDMgfQogICAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIER1cmF0aW9uLmZyb21JU08gPSBmdW5jdGlvbiBmcm9tSVNPKHRleHQsIG9wdHMpIHsKICAgICAgICB2YXIgX3BhcnNlSVNPRHVyYXRpb24gPSBwYXJzZUlTT0R1cmF0aW9uKHRleHQpLAogICAgICAgICAgICBwYXJzZWQgPSBfcGFyc2VJU09EdXJhdGlvblswXTsKCiAgICAgICAgaWYgKHBhcnNlZCkgewogICAgICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QocGFyc2VkLCBvcHRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQoInVucGFyc2FibGUiLCAidGhlIGlucHV0IFwiIiArIHRleHQgKyAiXCIgY2FuJ3QgYmUgcGFyc2VkIGFzIElTTyA4NjAxIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGFuIElTTyA4NjAxIHRpbWUgc3RyaW5nLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRleHQgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCiAgICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZXMKICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjIyOjMzLjQ0NCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMjIsIHNlY29uZHM6IDMzLCBtaWxsaXNlY29uZHM6IDQ0NCB9CiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTE6MDAnKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDAsIHNlY29uZHM6IDAgfQogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCdUMTEwMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9CiAgICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICAgKi8KICAgICAgOwoKICAgICAgRHVyYXRpb24uZnJvbUlTT1RpbWUgPSBmdW5jdGlvbiBmcm9tSVNPVGltZSh0ZXh0LCBvcHRzKSB7CiAgICAgICAgdmFyIF9wYXJzZUlTT1RpbWVPbmx5ID0gcGFyc2VJU09UaW1lT25seSh0ZXh0KSwKICAgICAgICAgICAgcGFyc2VkID0gX3BhcnNlSVNPVGltZU9ubHlbMF07CgogICAgICAgIGlmIChwYXJzZWQpIHsKICAgICAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tT2JqZWN0KHBhcnNlZCwgb3B0cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKCJ1bnBhcnNhYmxlIiwgInRoZSBpbnB1dCBcIiIgKyB0ZXh0ICsgIlwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMSIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIGludmFsaWQgRHVyYXRpb24uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIGRhdGV0aW1lIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgogICAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIER1cmF0aW9uLmludmFsaWQgPSBmdW5jdGlvbiBpbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pIHsKICAgICAgICBpZiAoZXhwbGFuYXRpb24gPT09IHZvaWQgMCkgewogICAgICAgICAgZXhwbGFuYXRpb24gPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFyZWFzb24pIHsKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkIik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTsKCiAgICAgICAgaWYgKFNldHRpbmdzLnRocm93T25JbnZhbGlkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZER1cmF0aW9uRXJyb3IoaW52YWxpZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBuZXcgRHVyYXRpb24oewogICAgICAgICAgICBpbnZhbGlkOiBpbnZhbGlkCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICA7CgogICAgICBEdXJhdGlvbi5ub3JtYWxpemVVbml0ID0gZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7CiAgICAgICAgdmFyIG5vcm1hbGl6ZWQgPSB7CiAgICAgICAgICB5ZWFyOiAieWVhcnMiLAogICAgICAgICAgeWVhcnM6ICJ5ZWFycyIsCiAgICAgICAgICBxdWFydGVyOiAicXVhcnRlcnMiLAogICAgICAgICAgcXVhcnRlcnM6ICJxdWFydGVycyIsCiAgICAgICAgICBtb250aDogIm1vbnRocyIsCiAgICAgICAgICBtb250aHM6ICJtb250aHMiLAogICAgICAgICAgd2VlazogIndlZWtzIiwKICAgICAgICAgIHdlZWtzOiAid2Vla3MiLAogICAgICAgICAgZGF5OiAiZGF5cyIsCiAgICAgICAgICBkYXlzOiAiZGF5cyIsCiAgICAgICAgICBob3VyOiAiaG91cnMiLAogICAgICAgICAgaG91cnM6ICJob3VycyIsCiAgICAgICAgICBtaW51dGU6ICJtaW51dGVzIiwKICAgICAgICAgIG1pbnV0ZXM6ICJtaW51dGVzIiwKICAgICAgICAgIHNlY29uZDogInNlY29uZHMiLAogICAgICAgICAgc2Vjb25kczogInNlY29uZHMiLAogICAgICAgICAgbWlsbGlzZWNvbmQ6ICJtaWxsaXNlY29uZHMiLAogICAgICAgICAgbWlsbGlzZWNvbmRzOiAibWlsbGlzZWNvbmRzIgogICAgICAgIH1bdW5pdCA/IHVuaXQudG9Mb3dlckNhc2UoKSA6IHVuaXRdOwogICAgICAgIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEludmFsaWRVbml0RXJyb3IodW5pdCk7CiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGFuIG9iamVjdCBpcyBhIER1cmF0aW9uLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzCiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICAqLwogICAgICA7CgogICAgICBEdXJhdGlvbi5pc0R1cmF0aW9uID0gZnVuY3Rpb24gaXNEdXJhdGlvbihvKSB7CiAgICAgICAgcmV0dXJuIG8gJiYgby5pc0x1eG9uRHVyYXRpb24gfHwgZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCAgdGhlIGxvY2FsZSBvZiBhIER1cmF0aW9uLCBzdWNoICdlbi1HQicKICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIHZhciBfcHJvdG8gPSBEdXJhdGlvbi5wcm90b3R5cGU7CgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLiBZb3UgbWF5IHVzZSB0aGVzZSB0b2tlbnM6CiAgICAgICAqICogYFNgIGZvciBtaWxsaXNlY29uZHMKICAgICAgICogKiBgc2AgZm9yIHNlY29uZHMKICAgICAgICogKiBgbWAgZm9yIG1pbnV0ZXMKICAgICAgICogKiBgaGAgZm9yIGhvdXJzCiAgICAgICAqICogYGRgIGZvciBkYXlzCiAgICAgICAqICogYE1gIGZvciBtb250aHMKICAgICAgICogKiBgeWAgZm9yIHllYXJzCiAgICAgICAqIE5vdGVzOgogICAgICAgKiAqIEFkZCBwYWRkaW5nIGJ5IHJlcGVhdGluZyB0aGUgdG9rZW4sIGUuZy4gInl5IiBwYWRzIHRoZSB5ZWFycyB0byB0d28gZGlnaXRzLCAiaGhoaCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzCiAgICAgICAqICogVGhlIGR1cmF0aW9uIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSBzZXQgb2YgdW5pdHMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgdXNpbmcge0BsaW5rIER1cmF0aW9uLnNoaWZ0VG99IGFuZCB0aGUgRHVyYXRpb25zJ3MgY29udmVyc2lvbiBhY2N1cmFjeSBzZXR0aW5nLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCBzdHJpbmcKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxvb3I9dHJ1ZV0gLSBmbG9vciBudW1lcmljYWwgdmFsdWVzCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdCgieSBkIHMiKSAvLz0+ICIxIDYgMiIKICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KCJ5eSBkZCBzc3MiKSAvLz0+ICIwMSAwNiAwMDIiCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b0Zvcm1hdCgiTSBTIikgLy89PiAiMTIgNTE4NDAyMDAwIgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICBfcHJvdG8udG9Gb3JtYXQgPSBmdW5jdGlvbiB0b0Zvcm1hdChmbXQsIG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICAvLyByZXZlcnNlLWNvbXBhdCBzaW5jZSAxLjI7IHdlIGFsd2F5cyByb3VuZCBkb3duIG5vdywgbmV2ZXIgdXAsIGFuZCB3ZSBkbyBpdCBieSBkZWZhdWx0CiAgICAgICAgdmFyIGZtdE9wdHMgPSBfZXh0ZW5kcyh7fSwgb3B0cywgewogICAgICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlCiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLCBmbXRPcHRzKS5mb3JtYXREdXJhdGlvbkZyb21TdHJpbmcodGhpcywgZm10KSA6IElOVkFMSUQkMjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgb2JqZWN0IHdpdGggdGhpcyBEdXJhdGlvbidzIHZhbHVlcy4KICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0KICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvT2JqZWN0ID0gZnVuY3Rpb24gdG9PYmplY3QoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTsKICAgICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHRoaXMudmFsdWVzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24uCiAgICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMywgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQM1lUNDVTJwogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA0LCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1A0TVQ0NVMnCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDUgfSkudG9JU08oKSAvLz0+ICdQNU0nCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiA1IH0pLnRvSVNPKCkgLy89PiAnUFQ1TScKICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbGxpc2Vjb25kczogNiB9KS50b0lTTygpIC8vPT4gJ1BUMC4wMDZTJwogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9JU08gPSBmdW5jdGlvbiB0b0lTTygpIHsKICAgICAgICAvLyB3ZSBjb3VsZCB1c2UgdGhlIGZvcm1hdHRlciwgYnV0IHRoaXMgaXMgYW4gZWFzaWVyIHdheSB0byBnZXQgdGhlIG1pbmltdW0gc3RyaW5nCiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBudWxsOwogICAgICAgIHZhciBzID0gIlAiOwogICAgICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyAiWSI7CiAgICAgICAgaWYgKHRoaXMubW9udGhzICE9PSAwIHx8IHRoaXMucXVhcnRlcnMgIT09IDApIHMgKz0gdGhpcy5tb250aHMgKyB0aGlzLnF1YXJ0ZXJzICogMyArICJNIjsKICAgICAgICBpZiAodGhpcy53ZWVrcyAhPT0gMCkgcyArPSB0aGlzLndlZWtzICsgIlciOwogICAgICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgIkQiOwogICAgICAgIGlmICh0aGlzLmhvdXJzICE9PSAwIHx8IHRoaXMubWludXRlcyAhPT0gMCB8fCB0aGlzLnNlY29uZHMgIT09IDAgfHwgdGhpcy5taWxsaXNlY29uZHMgIT09IDApIHMgKz0gIlQiOwogICAgICAgIGlmICh0aGlzLmhvdXJzICE9PSAwKSBzICs9IHRoaXMuaG91cnMgKyAiSCI7CiAgICAgICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyAiTSI7CiAgICAgICAgaWYgKHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMCkgLy8gdGhpcyB3aWxsIGhhbmRsZSAiZmxvYXRpbmcgcG9pbnQgbWFkbmVzcyIgYnkgcmVtb3ZpbmcgZXh0cmEgZGVjaW1hbCBwbGFjZXMKICAgICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU4ODAwNC9pcy1mbG9hdGluZy1wb2ludC1tYXRoLWJyb2tlbgogICAgICAgICAgcyArPSByb3VuZFRvKHRoaXMuc2Vjb25kcyArIHRoaXMubWlsbGlzZWNvbmRzIC8gMTAwMCwgMykgKyAiUyI7CiAgICAgICAgaWYgKHMgPT09ICJQIikgcyArPSAiVDBTIjsKICAgICAgICByZXR1cm4gczsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24sIGZvcm1hdHRlZCBhcyBhIHRpbWUgb2YgZGF5LgogICAgICAgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoZSBkdXJhdGlvbiBpcyBpbnZhbGlkLCBuZWdhdGl2ZSwgb3IgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDI0IGhvdXJzLgogICAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVzCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDAKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXgKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKCkgLy89PiAnMTE6MDA6MDAuMDAwJwogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzTWlsbGlzZWNvbmRzOiB0cnVlIH0pIC8vPT4gJzExOjAwOjAwJwogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMCcKICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBpbmNsdWRlUHJlZml4OiB0cnVlIH0pIC8vPT4gJ1QxMTowMDowMC4wMDAnCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzExMDAwMC4wMDAnCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b0lTT1RpbWUgPSBmdW5jdGlvbiB0b0lTT1RpbWUob3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgbWlsbGlzID0gdGhpcy50b01pbGxpcygpOwogICAgICAgIGlmIChtaWxsaXMgPCAwIHx8IG1pbGxpcyA+PSA4NjQwMDAwMCkgcmV0dXJuIG51bGw7CiAgICAgICAgb3B0cyA9IF9leHRlbmRzKHsKICAgICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzOiBmYWxzZSwKICAgICAgICAgIHN1cHByZXNzU2Vjb25kczogZmFsc2UsCiAgICAgICAgICBpbmNsdWRlUHJlZml4OiBmYWxzZSwKICAgICAgICAgIGZvcm1hdDogImV4dGVuZGVkIgogICAgICAgIH0sIG9wdHMpOwogICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuc2hpZnRUbygiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIiwgIm1pbGxpc2Vjb25kcyIpOwogICAgICAgIHZhciBmbXQgPSBvcHRzLmZvcm1hdCA9PT0gImJhc2ljIiA/ICJoaG1tIiA6ICJoaDptbSI7CgogICAgICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHsKICAgICAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gImJhc2ljIiA/ICJzcyIgOiAiOnNzIjsKCiAgICAgICAgICBpZiAoIW9wdHMuc3VwcHJlc3NNaWxsaXNlY29uZHMgfHwgdmFsdWUubWlsbGlzZWNvbmRzICE9PSAwKSB7CiAgICAgICAgICAgIGZtdCArPSAiLlNTUyI7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgc3RyID0gdmFsdWUudG9Gb3JtYXQoZm10KTsKCiAgICAgICAgaWYgKG9wdHMuaW5jbHVkZVByZWZpeCkgewogICAgICAgICAgc3RyID0gIlQiICsgc3RyOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0cjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSlNPTi4KICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTigpIHsKICAgICAgICByZXR1cm4gdGhpcy50b0lTTygpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcuCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLnRvSVNPKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b01pbGxpcyA9IGZ1bmN0aW9uIHRvTWlsbGlzKCkgewogICAgICAgIHJldHVybiB0aGlzLmFzKCJtaWxsaXNlY29uZHMiKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfQogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udmFsdWVPZiA9IGZ1bmN0aW9uIHZhbHVlT2YoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTWFrZSB0aGlzIER1cmF0aW9uIGxvbmdlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uCiAgICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIGFkZC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8ucGx1cyA9IGZ1bmN0aW9uIHBsdXMoZHVyYXRpb24pIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgICAgdmFyIGR1ciA9IGZyaWVuZGx5RHVyYXRpb24oZHVyYXRpb24pLAogICAgICAgICAgICByZXN1bHQgPSB7fTsKCiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcmRlcmVkVW5pdHMkMSksIF9zdGVwOyAhKF9zdGVwID0gX2l0ZXJhdG9yKCkpLmRvbmU7KSB7CiAgICAgICAgICB2YXIgayA9IF9zdGVwLnZhbHVlOwoKICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShkdXIudmFsdWVzLCBrKSB8fCBoYXNPd25Qcm9wZXJ0eSh0aGlzLnZhbHVlcywgaykpIHsKICAgICAgICAgICAgcmVzdWx0W2tdID0gZHVyLmdldChrKSArIHRoaXMuZ2V0KGspOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNsb25lJDEodGhpcywgewogICAgICAgICAgdmFsdWVzOiByZXN1bHQKICAgICAgICB9LCB0cnVlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTWFrZSB0aGlzIER1cmF0aW9uIHNob3J0ZXIgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgogICAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGFtb3VudCB0byBzdWJ0cmFjdC4gRWl0aGVyIGEgTHV4b24gRHVyYXRpb24sIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgdGhlIG9iamVjdCBhcmd1bWVudCB0byBEdXJhdGlvbi5mcm9tT2JqZWN0KCkKICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8ubWludXMgPSBmdW5jdGlvbiBtaW51cyhkdXJhdGlvbikgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKICAgICAgICB2YXIgZHVyID0gZnJpZW5kbHlEdXJhdGlvbihkdXJhdGlvbik7CiAgICAgICAgcmV0dXJuIHRoaXMucGx1cyhkdXIubmVnYXRlKCkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTY2FsZSB0aGlzIER1cmF0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi4KICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCB1bml0LiBBcml0eSBpcyAxIG9yIDI6IHRoZSB2YWx1ZSBvZiB0aGUgdW5pdCBhbmQsIG9wdGlvbmFsbHksIHRoZSB1bml0IG5hbWUuIE11c3QgcmV0dXJuIGEgbnVtYmVyLgogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKHggPT4geCAqIDIpIC8vPT4geyBob3VyczogMiwgbWludXRlczogNjAgfQogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIG1pbnV0ZXM6IDMwIH0pLm1hcFVuaXRzKCh4LCB1KSA9PiB1ID09PSAiaG91ciIgPyB4ICogMiA6IHgpIC8vPT4geyBob3VyczogMiwgbWludXRlczogMzAgfQogICAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5tYXBVbml0cyA9IGZ1bmN0aW9uIG1hcFVuaXRzKGZuKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICAgIHZhciByZXN1bHQgPSB7fTsKCiAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfT2JqZWN0JGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcyk7IF9pIDwgX09iamVjdCRrZXlzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgdmFyIGsgPSBfT2JqZWN0JGtleXNbX2ldOwogICAgICAgICAgcmVzdWx0W2tdID0gYXNOdW1iZXIoZm4odGhpcy52YWx1ZXNba10sIGspKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKICAgICAgICAgIHZhbHVlczogcmVzdWx0CiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5JwogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDIKICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMAogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gMwogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHVuaXQpIHsKICAgICAgICByZXR1cm4gdGhpc1tEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogIlNldCIgdGhlIHZhbHVlcyBvZiBzcGVjaWZpZWQgdW5pdHMuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gYSBtYXBwaW5nIG9mIHVuaXRzIHRvIG51bWJlcnMKICAgICAgICogQGV4YW1wbGUgZHVyLnNldCh7IHllYXJzOiAyMDE3IH0pCiAgICAgICAqIEBleGFtcGxlIGR1ci5zZXQoeyBob3VyczogOCwgbWludXRlczogMzAgfSkKICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uc2V0ID0gZnVuY3Rpb24gc2V0KHZhbHVlcykgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKCiAgICAgICAgdmFyIG1peGVkID0gX2V4dGVuZHMoe30sIHRoaXMudmFsdWVzLCBub3JtYWxpemVPYmplY3QodmFsdWVzLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSk7CgogICAgICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKICAgICAgICAgIHZhbHVlczogbWl4ZWQKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogIlNldCIgdGhlIGxvY2FsZSBhbmQvb3IgbnVtYmVyaW5nU3lzdGVtLiAgUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLgogICAgICAgKiBAZXhhbXBsZSBkdXIucmVjb25maWd1cmUoeyBsb2NhbGU6ICdlbi1HQicgfSkKICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8ucmVjb25maWd1cmUgPSBmdW5jdGlvbiByZWNvbmZpZ3VyZShfdGVtcCkgewogICAgICAgIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsCiAgICAgICAgICAgIGxvY2FsZSA9IF9yZWYubG9jYWxlLAogICAgICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmLm51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgICAgY29udmVyc2lvbkFjY3VyYWN5ID0gX3JlZi5jb252ZXJzaW9uQWNjdXJhY3k7CgogICAgICAgIHZhciBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7CiAgICAgICAgICBsb2NhbGU6IGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtCiAgICAgICAgfSksCiAgICAgICAgICAgIG9wdHMgPSB7CiAgICAgICAgICBsb2M6IGxvYwogICAgICAgIH07CgogICAgICAgIGlmIChjb252ZXJzaW9uQWNjdXJhY3kpIHsKICAgICAgICAgIG9wdHMuY29udmVyc2lvbkFjY3VyYWN5ID0gY29udmVyc2lvbkFjY3VyYWN5OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNsb25lJDEodGhpcywgb3B0cyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBkdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZXMnIG9yICdkYXlzJwogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdkYXlzJykgLy89PiAzNjUKICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnbW9udGhzJykgLy89PiAxMgogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtob3VyczogNjB9KS5hcygnZGF5cycpIC8vPT4gMi41CiAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5hcyA9IGZ1bmN0aW9uIGFzKHVuaXQpIHsKICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zaGlmdFRvKHVuaXQpLmdldCh1bml0KSA6IE5hTjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVkdWNlIHRoaXMgRHVyYXRpb24gdG8gaXRzIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiBpbiBpdHMgY3VycmVudCB1bml0cy4KICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAyLCBkYXlzOiA1MDAwIH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IHllYXJzOiAxNSwgZGF5czogMjU1IH0KICAgICAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMiwgbWludXRlczogLTQ1IH0pLm5vcm1hbGl6ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMTUgfQogICAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5ub3JtYWxpemUgPSBmdW5jdGlvbiBub3JtYWxpemUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICAgIHZhciB2YWxzID0gdGhpcy50b09iamVjdCgpOwogICAgICAgIG5vcm1hbGl6ZVZhbHVlcyh0aGlzLm1hdHJpeCwgdmFscyk7CiAgICAgICAgcmV0dXJuIGNsb25lJDEodGhpcywgewogICAgICAgICAgdmFsdWVzOiB2YWxzCiAgICAgICAgfSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvbnZlcnQgdGhpcyBEdXJhdGlvbiBpbnRvIGl0cyByZXByZXNlbnRhdGlvbiBpbiBhIGRpZmZlcmVudCBzZXQgb2YgdW5pdHMuCiAgICAgICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkuc2hpZnRUbygnbWludXRlcycsICdtaWxsaXNlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBtaW51dGVzOiA2MCwgbWlsbGlzZWNvbmRzOiAzMDAwMCB9CiAgICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnNoaWZ0VG8gPSBmdW5jdGlvbiBzaGlmdFRvKCkgewogICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB1bml0cyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIHVuaXRzW19rZXldID0gYXJndW1lbnRzW19rZXldOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwoKICAgICAgICBpZiAodW5pdHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgogICAgICAgIHVuaXRzID0gdW5pdHMubWFwKGZ1bmN0aW9uICh1KSB7CiAgICAgICAgICByZXR1cm4gRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1KTsKICAgICAgICB9KTsKICAgICAgICB2YXIgYnVpbHQgPSB7fSwKICAgICAgICAgICAgYWNjdW11bGF0ZWQgPSB7fSwKICAgICAgICAgICAgdmFscyA9IHRoaXMudG9PYmplY3QoKTsKICAgICAgICB2YXIgbGFzdFVuaXQ7CgogICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9yZGVyZWRVbml0cyQxKSwgX3N0ZXAyOyAhKF9zdGVwMiA9IF9pdGVyYXRvcjIoKSkuZG9uZTspIHsKICAgICAgICAgIHZhciBrID0gX3N0ZXAyLnZhbHVlOwoKICAgICAgICAgIGlmICh1bml0cy5pbmRleE9mKGspID49IDApIHsKICAgICAgICAgICAgbGFzdFVuaXQgPSBrOwogICAgICAgICAgICB2YXIgb3duID0gMDsgLy8gYW55dGhpbmcgd2UgaGF2ZW4ndCBib2lsZWQgZG93biB5ZXQgc2hvdWxkIGdldCBib2lsZWQgdG8gdGhpcyB1bml0CgogICAgICAgICAgICBmb3IgKHZhciBhayBpbiBhY2N1bXVsYXRlZCkgewogICAgICAgICAgICAgIG93biArPSB0aGlzLm1hdHJpeFtha11ba10gKiBhY2N1bXVsYXRlZFtha107CiAgICAgICAgICAgICAgYWNjdW11bGF0ZWRbYWtdID0gMDsKICAgICAgICAgICAgfSAvLyBwbHVzIGFueXRoaW5nIHRoYXQncyBhbHJlYWR5IGluIHRoaXMgdW5pdAoKCiAgICAgICAgICAgIGlmIChpc051bWJlcih2YWxzW2tdKSkgewogICAgICAgICAgICAgIG93biArPSB2YWxzW2tdOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgaSA9IE1hdGgudHJ1bmMob3duKTsKICAgICAgICAgICAgYnVpbHRba10gPSBpOwogICAgICAgICAgICBhY2N1bXVsYXRlZFtrXSA9IG93biAtIGk7IC8vIHdlJ2QgbGlrZSB0byBhYnNvcmIgdGhlc2UgZnJhY3Rpb25zIGluIGFub3RoZXIgdW5pdAogICAgICAgICAgICAvLyBwbHVzIGFueXRoaW5nIGZ1cnRoZXIgZG93biB0aGUgY2hhaW4gdGhhdCBzaG91bGQgYmUgcm9sbGVkIHVwIGluIHRvIHRoaXMKCiAgICAgICAgICAgIGZvciAodmFyIGRvd24gaW4gdmFscykgewogICAgICAgICAgICAgIGlmIChvcmRlcmVkVW5pdHMkMS5pbmRleE9mKGRvd24pID4gb3JkZXJlZFVuaXRzJDEuaW5kZXhPZihrKSkgewogICAgICAgICAgICAgICAgY29udmVydCh0aGlzLm1hdHJpeCwgdmFscywgZG93biwgYnVpbHQsIGspOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAvLyBvdGhlcndpc2UsIGtlZXAgaXQgaW4gdGhlIHdpbmdzIHRvIGJvaWwgaXQgbGF0ZXIKCiAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7CiAgICAgICAgICAgIGFjY3VtdWxhdGVkW2tdID0gdmFsc1trXTsKICAgICAgICAgIH0KICAgICAgICB9IC8vIGFueXRoaW5nIGxlZnRvdmVyIGJlY29tZXMgdGhlIGRlY2ltYWwgZm9yIHRoZSBsYXN0IHVuaXQKICAgICAgICAvLyBsYXN0VW5pdCBtdXN0IGJlIGRlZmluZWQgc2luY2UgdW5pdHMgaXMgbm90IGVtcHR5CgoKICAgICAgICBmb3IgKHZhciBrZXkgaW4gYWNjdW11bGF0ZWQpIHsKICAgICAgICAgIGlmIChhY2N1bXVsYXRlZFtrZXldICE9PSAwKSB7CiAgICAgICAgICAgIGJ1aWx0W2xhc3RVbml0XSArPSBrZXkgPT09IGxhc3RVbml0ID8gYWNjdW11bGF0ZWRba2V5XSA6IGFjY3VtdWxhdGVkW2tleV0gLyB0aGlzLm1hdHJpeFtsYXN0VW5pdF1ba2V5XTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKICAgICAgICAgIHZhbHVlczogYnVpbHQKICAgICAgICB9LCB0cnVlKS5ub3JtYWxpemUoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSBvZiB0aGlzIER1cmF0aW9uLgogICAgICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDEsIHNlY29uZHM6IDMwIH0pLm5lZ2F0ZSgpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAtMSwgc2Vjb25kczogLTMwIH0KICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8ubmVnYXRlID0gZnVuY3Rpb24gbmVnYXRlKCkgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKICAgICAgICB2YXIgbmVnYXRlZCA9IHt9OwoKICAgICAgICBmb3IgKHZhciBfaTIgPSAwLCBfT2JqZWN0JGtleXMyID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpOyBfaTIgPCBfT2JqZWN0JGtleXMyLmxlbmd0aDsgX2kyKyspIHsKICAgICAgICAgIHZhciBrID0gX09iamVjdCRrZXlzMltfaTJdOwogICAgICAgICAgbmVnYXRlZFtrXSA9IC10aGlzLnZhbHVlc1trXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHsKICAgICAgICAgIHZhbHVlczogbmVnYXRlZAogICAgICAgIH0sIHRydWUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHllYXJzLgogICAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICAgKi8KICAgICAgOwoKICAgICAgLyoqCiAgICAgICAqIEVxdWFsaXR5IGNoZWNrCiAgICAgICAqIFR3byBEdXJhdGlvbnMgYXJlIGVxdWFsIGlmZiB0aGV5IGhhdmUgdGhlIHNhbWUgdW5pdHMgYW5kIHRoZSBzYW1lIHZhbHVlcyBmb3IgZWFjaCB1bml0LgogICAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufSBvdGhlcgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlci5pc1ZhbGlkKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBlcSh2MSwgdjIpIHsKICAgICAgICAgIC8vIENvbnNpZGVyIDAgYW5kIHVuZGVmaW5lZCBhcyBlcXVhbAogICAgICAgICAgaWYgKHYxID09PSB1bmRlZmluZWQgfHwgdjEgPT09IDApIHJldHVybiB2MiA9PT0gdW5kZWZpbmVkIHx8IHYyID09PSAwOwogICAgICAgICAgcmV0dXJuIHYxID09PSB2MjsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjMgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9yZGVyZWRVbml0cyQxKSwgX3N0ZXAzOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMoKSkuZG9uZTspIHsKICAgICAgICAgIHZhciB1ID0gX3N0ZXAzLnZhbHVlOwoKICAgICAgICAgIGlmICghZXEodGhpcy52YWx1ZXNbdV0sIG90aGVyLnZhbHVlc1t1XSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH07CgogICAgICBfY3JlYXRlQ2xhc3MoRHVyYXRpb24sIFt7CiAgICAgICAga2V5OiAibG9jYWxlIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEdXJhdGlvbiwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEdXJhdGlvbgogICAgICAgICAqCiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJudW1iZXJpbmdTeXN0ZW0iLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAga2V5OiAieWVhcnMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLnllYXJzIHx8IDAgOiBOYU47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgcXVhcnRlcnMuCiAgICAgICAgICogQHR5cGUge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJxdWFydGVycyIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMucXVhcnRlcnMgfHwgMCA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBtb250aHMuCiAgICAgICAgICogQHR5cGUge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJtb250aHMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1vbnRocyB8fCAwIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHdlZWtzCiAgICAgICAgICogQHR5cGUge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJ3ZWVrcyIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMud2Vla3MgfHwgMCA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBkYXlzLgogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiZGF5cyIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuZGF5cyB8fCAwIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGhvdXJzLgogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiaG91cnMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLmhvdXJzIHx8IDAgOiBOYU47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgbWludXRlcy4KICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm1pbnV0ZXMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1pbnV0ZXMgfHwgMCA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBzZWNvbmRzLgogICAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJzZWNvbmRzIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5zZWNvbmRzIHx8IDAgOiBOYU47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLgogICAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJtaWxsaXNlY29uZHMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLm1pbGxpc2Vjb25kcyB8fCAwIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIER1cmF0aW9uIGlzIGludmFsaWQuIEludmFsaWQgZHVyYXRpb25zIGFyZSByZXR1cm5lZCBieSBkaWZmIG9wZXJhdGlvbnMKICAgICAgICAgKiBvbiBpbnZhbGlkIERhdGVUaW1lcyBvciBJbnRlcnZhbHMuCiAgICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpc1ZhbGlkIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmludmFsaWQgPT09IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIER1cmF0aW9uIGJlY2FtZSBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEdXJhdGlvbiBpcyB2YWxpZAogICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpbnZhbGlkUmVhc29uIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBEdXJhdGlvbiBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRHVyYXRpb24gaXMgdmFsaWQKICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImludmFsaWRFeHBsYW5hdGlvbiIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDsKICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBEdXJhdGlvbjsKICAgIH0oKTsKICAgIGZ1bmN0aW9uIGZyaWVuZGx5RHVyYXRpb24oZHVyYXRpb25pc2gpIHsKICAgICAgaWYgKGlzTnVtYmVyKGR1cmF0aW9uaXNoKSkgewogICAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tTWlsbGlzKGR1cmF0aW9uaXNoKTsKICAgICAgfSBlbHNlIGlmIChEdXJhdGlvbi5pc0R1cmF0aW9uKGR1cmF0aW9uaXNoKSkgewogICAgICAgIHJldHVybiBkdXJhdGlvbmlzaDsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb25pc2ggPT09ICJvYmplY3QiKSB7CiAgICAgICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3QoZHVyYXRpb25pc2gpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigiVW5rbm93biBkdXJhdGlvbiBhcmd1bWVudCAiICsgZHVyYXRpb25pc2ggKyAiIG9mIHR5cGUgIiArIHR5cGVvZiBkdXJhdGlvbmlzaCk7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgSU5WQUxJRCQxID0gIkludmFsaWQgSW50ZXJ2YWwiOyAvLyBjaGVja3MgaWYgdGhlIHN0YXJ0IGlzIGVxdWFsIHRvIG9yIGJlZm9yZSB0aGUgZW5kCgogICAgZnVuY3Rpb24gdmFsaWRhdGVTdGFydEVuZChzdGFydCwgZW5kKSB7CiAgICAgIGlmICghc3RhcnQgfHwgIXN0YXJ0LmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZCgibWlzc2luZyBvciBpbnZhbGlkIHN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAoIWVuZCB8fCAhZW5kLmlzVmFsaWQpIHsKICAgICAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZCgibWlzc2luZyBvciBpbnZhbGlkIGVuZCIpOwogICAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAgICAgICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoImVuZCBiZWZvcmUgc3RhcnQiLCAiVGhlIGVuZCBvZiBhbiBpbnRlcnZhbCBtdXN0IGJlIGFmdGVyIGl0cyBzdGFydCwgYnV0IHlvdSBoYWQgc3RhcnQ9IiArIHN0YXJ0LnRvSVNPKCkgKyAiIGFuZCBlbmQ9IiArIGVuZC50b0lTTygpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBBbiBJbnRlcnZhbCBvYmplY3QgcmVwcmVzZW50cyBhIGhhbGYtb3BlbiBpbnRlcnZhbCBvZiB0aW1lLCB3aGVyZSBlYWNoIGVuZHBvaW50IGlzIGEge0BsaW5rIERhdGVUaW1lfS4gQ29uY2VwdHVhbGx5LCBpdCdzIGEgY29udGFpbmVyIGZvciB0aG9zZSB0d28gZW5kcG9pbnRzLCBhY2NvbXBhbmllZCBieSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgY29tcGFyaW5nLCB0cmFuc2Zvcm1pbmcsIGFuZCBmb3JtYXR0aW5nIHRoZW0uCiAgICAgKgogICAgICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgbWV0aG9kcyBhbmQgZ2V0dGVycyBpbiBJbnRlcnZhbDoKICAgICAqCiAgICAgKiAqICoqQ3JlYXRpb24qKiBUbyBjcmVhdGUgYW4gSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwuZnJvbURhdGVUaW1lc30sIHtAbGluayBJbnRlcnZhbC5hZnRlcn0sIHtAbGluayBJbnRlcnZhbC5iZWZvcmV9LCBvciB7QGxpbmsgSW50ZXJ2YWwuZnJvbUlTT30uCiAgICAgKiAqICoqQWNjZXNzb3JzKiogVXNlIHtAbGluayBJbnRlcnZhbCNzdGFydH0gYW5kIHtAbGluayBJbnRlcnZhbCNlbmR9IHRvIGdldCB0aGUgc3RhcnQgYW5kIGVuZC4KICAgICAqICogKipJbnRlcnJvZ2F0aW9uKiogVG8gYW5hbHl6ZSB0aGUgSW50ZXJ2YWwsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjY291bnR9LCB7QGxpbmsgSW50ZXJ2YWwjbGVuZ3RofSwge0BsaW5rIEludGVydmFsI2hhc1NhbWV9LCB7QGxpbmsgSW50ZXJ2YWwjY29udGFpbnN9LCB7QGxpbmsgSW50ZXJ2YWwjaXNBZnRlcn0sIG9yIHtAbGluayBJbnRlcnZhbCNpc0JlZm9yZX0uCiAgICAgKiAqICoqVHJhbnNmb3JtYXRpb24qKiBUbyBjcmVhdGUgb3RoZXIgSW50ZXJ2YWxzIG91dCBvZiB0aGlzIG9uZSwgdXNlIHtAbGluayBJbnRlcnZhbCNzZXR9LCB7QGxpbmsgSW50ZXJ2YWwjc3BsaXRBdH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEJ5fSwge0BsaW5rIEludGVydmFsI2RpdmlkZUVxdWFsbHl9LCB7QGxpbmsgSW50ZXJ2YWwjbWVyZ2V9LCB7QGxpbmsgSW50ZXJ2YWwjeG9yfSwge0BsaW5rIEludGVydmFsI3VuaW9ufSwge0BsaW5rIEludGVydmFsI2ludGVyc2VjdGlvbn0sIG9yIHtAbGluayBJbnRlcnZhbCNkaWZmZXJlbmNlfS4KICAgICAqICogKipDb21wYXJpc29uKiogVG8gY29tcGFyZSB0aGlzIEludGVydmFsIHRvIGFub3RoZXIgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI2VxdWFsc30sIHtAbGluayBJbnRlcnZhbCNvdmVybGFwc30sIHtAbGluayBJbnRlcnZhbCNhYnV0c1N0YXJ0fSwge0BsaW5rIEludGVydmFsI2FidXRzRW5kfSwge0BsaW5rIEludGVydmFsI2VuZ3VsZnN9CiAgICAgKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgSW50ZXJ2YWwgaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgSW50ZXJ2YWwjdG9TdHJpbmd9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU099LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09EYXRlfSwge0BsaW5rIEludGVydmFsI3RvSVNPVGltZX0sIHtAbGluayBJbnRlcnZhbCN0b0Zvcm1hdH0sIGFuZCB7QGxpbmsgSW50ZXJ2YWwjdG9EdXJhdGlvbn0uCiAgICAgKi8KCgogICAgdmFyIEludGVydmFsID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgLyoqCiAgICAgICAqIEBwcml2YXRlCiAgICAgICAqLwogICAgICBmdW5jdGlvbiBJbnRlcnZhbChjb25maWcpIHsKICAgICAgICAvKioKICAgICAgICAgKiBAYWNjZXNzIHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLnMgPSBjb25maWcuc3RhcnQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMuZSA9IGNvbmZpZy5lbmQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMuaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IG51bGw7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMuaXNMdXhvbkludGVydmFsID0gdHJ1ZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIGludmFsaWQgSW50ZXJ2YWwuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIEludGVydmFsIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgogICAgICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KICAgICAgICovCgoKICAgICAgSW50ZXJ2YWwuaW52YWxpZCA9IGZ1bmN0aW9uIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbikgewogICAgICAgIGlmIChleHBsYW5hdGlvbiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBleHBsYW5hdGlvbiA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoIXJlYXNvbikgewogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIEludGVydmFsIGlzIGludmFsaWQiKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnZhbGlkID0gcmVhc29uIGluc3RhbmNlb2YgSW52YWxpZCA/IHJlYXNvbiA6IG5ldyBJbnZhbGlkKHJlYXNvbiwgZXhwbGFuYXRpb24pOwoKICAgICAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHsKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkSW50ZXJ2YWxFcnJvcihpbnZhbGlkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh7CiAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYW4gZW5kIERhdGVUaW1lLiBJbmNsdXNpdmUgb2YgdGhlIHN0YXJ0IGJ1dCBub3QgdGhlIGVuZC4KICAgICAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gc3RhcnQKICAgICAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kCiAgICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICAgKi8KICAgICAgOwoKICAgICAgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyA9IGZ1bmN0aW9uIGZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCkgewogICAgICAgIHZhciBidWlsdFN0YXJ0ID0gZnJpZW5kbHlEYXRlVGltZShzdGFydCksCiAgICAgICAgICAgIGJ1aWx0RW5kID0gZnJpZW5kbHlEYXRlVGltZShlbmQpOwogICAgICAgIHZhciB2YWxpZGF0ZUVycm9yID0gdmFsaWRhdGVTdGFydEVuZChidWlsdFN0YXJ0LCBidWlsdEVuZCk7CgogICAgICAgIGlmICh2YWxpZGF0ZUVycm9yID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgSW50ZXJ2YWwoewogICAgICAgICAgICBzdGFydDogYnVpbHRTdGFydCwKICAgICAgICAgICAgZW5kOiBidWlsdEVuZAogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYSBzdGFydCBEYXRlVGltZSBhbmQgYSBEdXJhdGlvbiB0byBleHRlbmQgdG8uCiAgICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IHN0YXJ0CiAgICAgICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC4KICAgICAgICogQHJldHVybiB7SW50ZXJ2YWx9CiAgICAgICAqLwogICAgICA7CgogICAgICBJbnRlcnZhbC5hZnRlciA9IGZ1bmN0aW9uIGFmdGVyKHN0YXJ0LCBkdXJhdGlvbikgewogICAgICAgIHZhciBkdXIgPSBmcmllbmRseUR1cmF0aW9uKGR1cmF0aW9uKSwKICAgICAgICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKHN0YXJ0KTsKICAgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdCwgZHQucGx1cyhkdXIpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gZW5kIERhdGVUaW1lIGFuZCBhIER1cmF0aW9uIHRvIGV4dGVuZCBiYWNrd2FyZHMgdG8uCiAgICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV8RGF0ZXxPYmplY3R9IGVuZAogICAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuCiAgICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICAgKi8KICAgICAgOwoKICAgICAgSW50ZXJ2YWwuYmVmb3JlID0gZnVuY3Rpb24gYmVmb3JlKGVuZCwgZHVyYXRpb24pIHsKICAgICAgICB2YXIgZHVyID0gZnJpZW5kbHlEdXJhdGlvbihkdXJhdGlvbiksCiAgICAgICAgICAgIGR0ID0gZnJpZW5kbHlEYXRlVGltZShlbmQpOwogICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0Lm1pbnVzKGR1ciksIGR0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGFuIEludGVydmFsIGZyb20gYW4gSVNPIDg2MDEgc3RyaW5nLgogICAgICAgKiBBY2NlcHRzIGA8c3RhcnQ+LzxlbmQ+YCwgYDxzdGFydD4vPGR1cmF0aW9uPmAsIGFuZCBgPGR1cmF0aW9uPi88ZW5kPmAgZm9ybWF0cy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZyB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gb3B0aW9ucyB0byBwYXNzIHtAbGluayBEYXRlVGltZS5mcm9tSVNPfSBhbmQgb3B0aW9uYWxseSB7QGxpbmsgRHVyYXRpb24uZnJvbUlTT30KICAgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFscwogICAgICAgKiBAcmV0dXJuIHtJbnRlcnZhbH0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEludGVydmFsLmZyb21JU08gPSBmdW5jdGlvbiBmcm9tSVNPKHRleHQsIG9wdHMpIHsKICAgICAgICB2YXIgX3NwbGl0ID0gKHRleHQgfHwgIiIpLnNwbGl0KCIvIiwgMiksCiAgICAgICAgICAgIHMgPSBfc3BsaXRbMF0sCiAgICAgICAgICAgIGUgPSBfc3BsaXRbMV07CgogICAgICAgIGlmIChzICYmIGUpIHsKICAgICAgICAgIHZhciBzdGFydCwgc3RhcnRJc1ZhbGlkOwoKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHN0YXJ0ID0gRGF0ZVRpbWUuZnJvbUlTTyhzLCBvcHRzKTsKICAgICAgICAgICAgc3RhcnRJc1ZhbGlkID0gc3RhcnQuaXNWYWxpZDsKICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgc3RhcnRJc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIGVuZCwgZW5kSXNWYWxpZDsKCiAgICAgICAgICB0cnkgewogICAgICAgICAgICBlbmQgPSBEYXRlVGltZS5mcm9tSVNPKGUsIG9wdHMpOwogICAgICAgICAgICBlbmRJc1ZhbGlkID0gZW5kLmlzVmFsaWQ7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGVuZElzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoc3RhcnRJc1ZhbGlkICYmIGVuZElzVmFsaWQpIHsKICAgICAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCk7CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKHN0YXJ0SXNWYWxpZCkgewogICAgICAgICAgICB2YXIgZHVyID0gRHVyYXRpb24uZnJvbUlTTyhlLCBvcHRzKTsKCiAgICAgICAgICAgIGlmIChkdXIuaXNWYWxpZCkgewogICAgICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5hZnRlcihzdGFydCwgZHVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChlbmRJc1ZhbGlkKSB7CiAgICAgICAgICAgIHZhciBfZHVyID0gRHVyYXRpb24uZnJvbUlTTyhzLCBvcHRzKTsKCiAgICAgICAgICAgIGlmIChfZHVyLmlzVmFsaWQpIHsKICAgICAgICAgICAgICByZXR1cm4gSW50ZXJ2YWwuYmVmb3JlKGVuZCwgX2R1cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBJbnRlcnZhbC5pbnZhbGlkKCJ1bnBhcnNhYmxlIiwgInRoZSBpbnB1dCBcIiIgKyB0ZXh0ICsgIlwiIGNhbid0IGJlIHBhcnNlZCBhcyBJU08gODYwMSIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gSW50ZXJ2YWwuIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXMKICAgICAgICogQHBhcmFtIHtvYmplY3R9IG8KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEludGVydmFsLmlzSW50ZXJ2YWwgPSBmdW5jdGlvbiBpc0ludGVydmFsKG8pIHsKICAgICAgICByZXR1cm4gbyAmJiBvLmlzTHV4b25JbnRlcnZhbCB8fCBmYWxzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgc3RhcnQgb2YgdGhlIEludGVydmFsCiAgICAgICAqIEB0eXBlIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIHZhciBfcHJvdG8gPSBJbnRlcnZhbC5wcm90b3R5cGU7CgogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbCBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gdGhlIHVuaXQgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIHJldHVybiB0aGUgbGVuZ3RoIGluLgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICAqLwogICAgICBfcHJvdG8ubGVuZ3RoID0gZnVuY3Rpb24gbGVuZ3RoKHVuaXQpIHsKICAgICAgICBpZiAodW5pdCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB1bml0ID0gIm1pbGxpc2Vjb25kcyI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50b0R1cmF0aW9uLmFwcGx5KHRoaXMsIFt1bml0XSkuZ2V0KHVuaXQpIDogTmFOOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC4KICAgICAgICogVW5saWtlIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9IHRoaXMgY291bnRzIHNlY3Rpb25zIG9mIHRoZSBjYWxlbmRhciwgbm90IHBlcmlvZHMgb2YgdGltZSwgZS5nLiBzcGVjaWZ5aW5nICdkYXknCiAgICAgICAqIGFza3MgJ3doYXQgZGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJ2YWw/Jywgbm90ICdob3cgbWFueSBkYXlzIGxvbmcgaXMgdGhpcyBpbnRlcnZhbD8nCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LgogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uY291bnQgPSBmdW5jdGlvbiBjb3VudCh1bml0KSB7CiAgICAgICAgaWYgKHVuaXQgPT09IHZvaWQgMCkgewogICAgICAgICAgdW5pdCA9ICJtaWxsaXNlY29uZHMiOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBOYU47CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC5zdGFydE9mKHVuaXQpLAogICAgICAgICAgICBlbmQgPSB0aGlzLmVuZC5zdGFydE9mKHVuaXQpOwogICAgICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb24KICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5oYXNTYW1lID0gZnVuY3Rpb24gaGFzU2FtZSh1bml0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuaXNFbXB0eSgpIHx8IHRoaXMuZS5taW51cygxKS5oYXNTYW1lKHRoaXMucywgdW5pdCkgOiBmYWxzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBoYXMgdGhlIHNhbWUgc3RhcnQgYW5kIGVuZCBEYXRlVGltZXMuCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uaXNFbXB0eSA9IGZ1bmN0aW9uIGlzRW1wdHkoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucy52YWx1ZU9mKCkgPT09IHRoaXMuZS52YWx1ZU9mKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLgogICAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmlzQWZ0ZXIgPSBmdW5jdGlvbiBpc0FmdGVyKGRhdGVUaW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdGhpcy5zID4gZGF0ZVRpbWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuCiAgICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lCiAgICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uaXNCZWZvcmUgPSBmdW5jdGlvbiBpc0JlZm9yZShkYXRlVGltZSkgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIHRoaXMuZSA8PSBkYXRlVGltZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBjb250YWlucyB0aGUgc3BlY2lmaWVkIERhdGVUaW1lLgogICAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBkYXRlVGltZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnMoZGF0ZVRpbWUpIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0aGlzLnMgPD0gZGF0ZVRpbWUgJiYgdGhpcy5lID4gZGF0ZVRpbWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqICJTZXRzIiB0aGUgc3RhcnQgYW5kL29yIGVuZCBkYXRlcy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIEludGVydmFsLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzIC0gdGhlIHZhbHVlcyB0byBzZXQKICAgICAgICogQHBhcmFtIHtEYXRlVGltZX0gdmFsdWVzLnN0YXJ0IC0gdGhlIHN0YXJ0aW5nIERhdGVUaW1lCiAgICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5lbmQgLSB0aGUgZW5kaW5nIERhdGVUaW1lCiAgICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnNldCA9IGZ1bmN0aW9uIHNldChfdGVtcCkgewogICAgICAgIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsCiAgICAgICAgICAgIHN0YXJ0ID0gX3JlZi5zdGFydCwKICAgICAgICAgICAgZW5kID0gX3JlZi5lbmQ7CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKICAgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCB8fCB0aGlzLnMsIGVuZCB8fCB0aGlzLmUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGF0IGVhY2ggb2YgdGhlIHNwZWNpZmllZCBEYXRlVGltZXMKICAgICAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIHVuaXQgb2YgdGltZSB0byBjb3VudC4KICAgICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uc3BsaXRBdCA9IGZ1bmN0aW9uIHNwbGl0QXQoKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTsKCiAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRhdGVUaW1lcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIGRhdGVUaW1lc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICB9CgogICAgICAgIHZhciBzb3J0ZWQgPSBkYXRlVGltZXMubWFwKGZyaWVuZGx5RGF0ZVRpbWUpLmZpbHRlcihmdW5jdGlvbiAoZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmNvbnRhaW5zKGQpOwogICAgICAgIH0pLnNvcnQoKSwKICAgICAgICAgICAgcmVzdWx0cyA9IFtdOwogICAgICAgIHZhciBzID0gdGhpcy5zLAogICAgICAgICAgICBpID0gMDsKCiAgICAgICAgd2hpbGUgKHMgPCB0aGlzLmUpIHsKICAgICAgICAgIHZhciBhZGRlZCA9IHNvcnRlZFtpXSB8fCB0aGlzLmUsCiAgICAgICAgICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDsKICAgICAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTsKICAgICAgICAgIHMgPSBuZXh0OwogICAgICAgICAgaSArPSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byBzbWFsbGVyIEludGVydmFscywgZWFjaCBvZiB0aGUgc3BlY2lmaWVkIGxlbmd0aC4KICAgICAgICogTGVmdCBvdmVyIHRpbWUgaXMgZ3JvdXBlZCBpbnRvIGEgc21hbGxlciBpbnRlcnZhbAogICAgICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gVGhlIGxlbmd0aCBvZiBlYWNoIHJlc3VsdGluZyBpbnRlcnZhbC4KICAgICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uc3BsaXRCeSA9IGZ1bmN0aW9uIHNwbGl0QnkoZHVyYXRpb24pIHsKICAgICAgICB2YXIgZHVyID0gZnJpZW5kbHlEdXJhdGlvbihkdXJhdGlvbik7CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFkdXIuaXNWYWxpZCB8fCBkdXIuYXMoIm1pbGxpc2Vjb25kcyIpID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICB2YXIgcyA9IHRoaXMucywKICAgICAgICAgICAgaWR4ID0gMSwKICAgICAgICAgICAgbmV4dDsKICAgICAgICB2YXIgcmVzdWx0cyA9IFtdOwoKICAgICAgICB3aGlsZSAocyA8IHRoaXMuZSkgewogICAgICAgICAgdmFyIGFkZGVkID0gdGhpcy5zdGFydC5wbHVzKGR1ci5tYXBVbml0cyhmdW5jdGlvbiAoeCkgewogICAgICAgICAgICByZXR1cm4geCAqIGlkeDsKICAgICAgICAgIH0pKTsKICAgICAgICAgIG5leHQgPSArYWRkZWQgPiArdGhpcy5lID8gdGhpcy5lIDogYWRkZWQ7CiAgICAgICAgICByZXN1bHRzLnB1c2goSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBuZXh0KSk7CiAgICAgICAgICBzID0gbmV4dDsKICAgICAgICAgIGlkeCArPSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNwbGl0IHRoaXMgSW50ZXJ2YWwgaW50byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBzbWFsbGVyIGludGVydmFscy4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlck9mUGFydHMgLSBUaGUgbnVtYmVyIG9mIEludGVydmFscyB0byBkaXZpZGUgdGhlIEludGVydmFsIGludG8uCiAgICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmRpdmlkZUVxdWFsbHkgPSBmdW5jdGlvbiBkaXZpZGVFcXVhbGx5KG51bWJlck9mUGFydHMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIFtdOwogICAgICAgIHJldHVybiB0aGlzLnNwbGl0QnkodGhpcy5sZW5ndGgoKSAvIG51bWJlck9mUGFydHMpLnNsaWNlKDAsIG51bWJlck9mUGFydHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIHNwZWNpZmllZCBJbnRlcnZhbAogICAgICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlcgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLm92ZXJsYXBzID0gZnVuY3Rpb24gb3ZlcmxhcHMob3RoZXIpIHsKICAgICAgICByZXR1cm4gdGhpcy5lID4gb3RoZXIucyAmJiB0aGlzLnMgPCBvdGhlci5lOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBzdGFydC4KICAgICAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5hYnV0c1N0YXJ0ID0gZnVuY3Rpb24gYWJ1dHNTdGFydChvdGhlcikgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuICt0aGlzLmUgPT09ICtvdGhlci5zOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIGVuZC4KICAgICAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5hYnV0c0VuZCA9IGZ1bmN0aW9uIGFidXRzRW5kKG90aGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gK290aGVyLmUgPT09ICt0aGlzLnM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgZW5ndWxmcyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFsLgogICAgICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlcgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmVuZ3VsZnMgPSBmdW5jdGlvbiBlbmd1bGZzKG90aGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTsKICAgICAgICByZXR1cm4gdGhpcy5zIDw9IG90aGVyLnMgJiYgdGhpcy5lID49IG90aGVyLmU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgaGFzIHRoZSBzYW1lIHN0YXJ0IGFuZCBlbmQgYXMgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KICAgICAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKICAgICAgICogQHJldHVybiB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCB8fCAhb3RoZXIuaXNWYWxpZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMucy5lcXVhbHMob3RoZXIucykgJiYgdGhpcy5lLmVxdWFscyhvdGhlci5lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuCiAgICAgICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1heGltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1pbmltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuCiAgICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGUgaW50ZXJzZWN0aW9uIGlzIGVtcHR5LCBtZWFuaW5nLCB0aGUgaW50ZXJ2YWxzIGRvbid0IGludGVyc2VjdC4KICAgICAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKICAgICAgICogQHJldHVybiB7SW50ZXJ2YWx9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uaW50ZXJzZWN0aW9uID0gZnVuY3Rpb24gaW50ZXJzZWN0aW9uKG90aGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICAgIHZhciBzID0gdGhpcy5zID4gb3RoZXIucyA/IHRoaXMucyA6IG90aGVyLnMsCiAgICAgICAgICAgIGUgPSB0aGlzLmUgPCBvdGhlci5lID8gdGhpcy5lIDogb3RoZXIuZTsKCiAgICAgICAgaWYgKHMgPj0gZSkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIGUpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgdW5pb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC4KICAgICAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWluaW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWF4aW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy4KICAgICAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXIKICAgICAgICogQHJldHVybiB7SW50ZXJ2YWx9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udW5pb24gPSBmdW5jdGlvbiB1bmlvbihvdGhlcikgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpczsKICAgICAgICB2YXIgcyA9IHRoaXMucyA8IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLAogICAgICAgICAgICBlID0gdGhpcy5lID4gb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7CiAgICAgICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIE1lcmdlIGFuIGFycmF5IG9mIEludGVydmFscyBpbnRvIGEgZXF1aXZhbGVudCBtaW5pbWFsIHNldCBvZiBJbnRlcnZhbHMuCiAgICAgICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuCiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFscwogICAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEludGVydmFsLm1lcmdlID0gZnVuY3Rpb24gbWVyZ2UoaW50ZXJ2YWxzKSB7CiAgICAgICAgdmFyIF9pbnRlcnZhbHMkc29ydCRyZWR1YyA9IGludGVydmFscy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAgICByZXR1cm4gYS5zIC0gYi5zOwogICAgICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoX3JlZjIsIGl0ZW0pIHsKICAgICAgICAgIHZhciBzb2ZhciA9IF9yZWYyWzBdLAogICAgICAgICAgICAgIGN1cnJlbnQgPSBfcmVmMlsxXTsKCiAgICAgICAgICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgcmV0dXJuIFtzb2ZhciwgaXRlbV07CiAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQub3ZlcmxhcHMoaXRlbSkgfHwgY3VycmVudC5hYnV0c1N0YXJ0KGl0ZW0pKSB7CiAgICAgICAgICAgIHJldHVybiBbc29mYXIsIGN1cnJlbnQudW5pb24oaXRlbSldOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIFtzb2Zhci5jb25jYXQoW2N1cnJlbnRdKSwgaXRlbV07CiAgICAgICAgICB9CiAgICAgICAgfSwgW1tdLCBudWxsXSksCiAgICAgICAgICAgIGZvdW5kID0gX2ludGVydmFscyRzb3J0JHJlZHVjWzBdLAogICAgICAgICAgICBmaW5hbCA9IF9pbnRlcnZhbHMkc29ydCRyZWR1Y1sxXTsKCiAgICAgICAgaWYgKGZpbmFsKSB7CiAgICAgICAgICBmb3VuZC5wdXNoKGZpbmFsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmb3VuZDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGFuIGFycmF5IG9mIEludGVydmFscyByZXByZXNlbnRpbmcgdGhlIHNwYW5zIG9mIHRpbWUgdGhhdCBvbmx5IGFwcGVhciBpbiBvbmUgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuCiAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFscwogICAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEludGVydmFsLnhvciA9IGZ1bmN0aW9uIHhvcihpbnRlcnZhbHMpIHsKICAgICAgICB2YXIgX0FycmF5JHByb3RvdHlwZTsKCiAgICAgICAgdmFyIHN0YXJ0ID0gbnVsbCwKICAgICAgICAgICAgY3VycmVudENvdW50ID0gMDsKCiAgICAgICAgdmFyIHJlc3VsdHMgPSBbXSwKICAgICAgICAgICAgZW5kcyA9IGludGVydmFscy5tYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICB0aW1lOiBpLnMsCiAgICAgICAgICAgIHR5cGU6ICJzIgogICAgICAgICAgfSwgewogICAgICAgICAgICB0aW1lOiBpLmUsCiAgICAgICAgICAgIHR5cGU6ICJlIgogICAgICAgICAgfV07CiAgICAgICAgfSksCiAgICAgICAgICAgIGZsYXR0ZW5lZCA9IChfQXJyYXkkcHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlKS5jb25jYXQuYXBwbHkoX0FycmF5JHByb3RvdHlwZSwgZW5kcyksCiAgICAgICAgICAgIGFyciA9IGZsYXR0ZW5lZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAgICByZXR1cm4gYS50aW1lIC0gYi50aW1lOwogICAgICAgIH0pOwoKICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKGFyciksIF9zdGVwOyAhKF9zdGVwID0gX2l0ZXJhdG9yKCkpLmRvbmU7KSB7CiAgICAgICAgICB2YXIgaSA9IF9zdGVwLnZhbHVlOwogICAgICAgICAgY3VycmVudENvdW50ICs9IGkudHlwZSA9PT0gInMiID8gMSA6IC0xOwoKICAgICAgICAgIGlmIChjdXJyZW50Q291bnQgPT09IDEpIHsKICAgICAgICAgICAgc3RhcnQgPSBpLnRpbWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoc3RhcnQgJiYgK3N0YXJ0ICE9PSAraS50aW1lKSB7CiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGkudGltZSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdGFydCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gSW50ZXJ2YWwubWVyZ2UocmVzdWx0cyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHNwYW4gb2YgdGltZSBpbiB0aGlzIEludGVydmFsIHRoYXQgZG9lc24ndCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxzLgogICAgICAgKiBAcGFyYW0gey4uLkludGVydmFsfSBpbnRlcnZhbHMKICAgICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uZGlmZmVyZW5jZSA9IGZ1bmN0aW9uIGRpZmZlcmVuY2UoKSB7CiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CgogICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgaW50ZXJ2YWxzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CiAgICAgICAgICBpbnRlcnZhbHNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBJbnRlcnZhbC54b3IoW3RoaXNdLmNvbmNhdChpbnRlcnZhbHMpKS5tYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgIHJldHVybiBfdGhpczIuaW50ZXJzZWN0aW9uKGkpOwogICAgICAgIH0pLmZpbHRlcihmdW5jdGlvbiAoaSkgewogICAgICAgICAgcmV0dXJuIGkgJiYgIWkuaXNFbXB0eSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZy4KICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEJDE7CiAgICAgICAgcmV0dXJuICJbIiArIHRoaXMucy50b0lTTygpICsgIiBcdTIwMTMgIiArIHRoaXMuZS50b0lTTygpICsgIikiOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbC4KICAgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFscwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFRoZSBzYW1lIG9wdGlvbnMgYXMge0BsaW5rIERhdGVUaW1lI3RvSVNPfQogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9JU08gPSBmdW5jdGlvbiB0b0lTTyhvcHRzKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEJDE7CiAgICAgICAgcmV0dXJuIHRoaXMucy50b0lTTyhvcHRzKSArICIvIiArIHRoaXMuZS50b0lTTyhvcHRzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGRhdGUgb2YgdGhpcyBJbnRlcnZhbC4KICAgICAgICogVGhlIHRpbWUgY29tcG9uZW50cyBhcmUgaWdub3JlZC4KICAgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFscwogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9JU09EYXRlID0gZnVuY3Rpb24gdG9JU09EYXRlKCkgewogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwogICAgICAgIHJldHVybiB0aGlzLnMudG9JU09EYXRlKCkgKyAiLyIgKyB0aGlzLmUudG9JU09EYXRlKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aW1lIG9mIHRoaXMgSW50ZXJ2YWwuCiAgICAgICAqIFRoZSBkYXRlIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuCiAgICAgICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgc2FtZSBvcHRpb25zIGFzIHtAbGluayBEYXRlVGltZS50b0lTT30KICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvSVNPVGltZSA9IGZ1bmN0aW9uIHRvSVNPVGltZShvcHRzKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBJTlZBTElEJDE7CiAgICAgICAgcmV0dXJuIHRoaXMucy50b0lTT1RpbWUob3B0cykgKyAiLyIgKyB0aGlzLmUudG9JU09UaW1lKG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCBzdHJpbmcuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlRm9ybWF0IC0gdGhlIGZvcm1hdCBzdHJpbmcuIFRoaXMgc3RyaW5nIGZvcm1hdHMgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZS4gU2VlIHtAbGluayBEYXRlVGltZS50b0Zvcm1hdH0gZm9yIGRldGFpbHMuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuc2VwYXJhdG9yID0gICcg4oCTICddIC0gYSBzZXBhcmF0b3IgdG8gcGxhY2UgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCByZXByZXNlbnRhdGlvbnMKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvRm9ybWF0ID0gZnVuY3Rpb24gdG9Gb3JtYXQoZGF0ZUZvcm1hdCwgX3RlbXAyKSB7CiAgICAgICAgdmFyIF9yZWYzID0gX3RlbXAyID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMiwKICAgICAgICAgICAgX3JlZjMkc2VwYXJhdG9yID0gX3JlZjMuc2VwYXJhdG9yLAogICAgICAgICAgICBzZXBhcmF0b3IgPSBfcmVmMyRzZXBhcmF0b3IgPT09IHZvaWQgMCA/ICIg4oCTICIgOiBfcmVmMyRzZXBhcmF0b3I7CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxOwogICAgICAgIHJldHVybiAiIiArIHRoaXMucy50b0Zvcm1hdChkYXRlRm9ybWF0KSArIHNlcGFyYXRvciArIHRoaXMuZS50b0Zvcm1hdChkYXRlRm9ybWF0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGEgRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSB0aW1lIHNwYW5uZWQgYnkgdGhpcyBpbnRlcnZhbC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2UKICAgICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbigpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogODg0ODkyNTcgfQogICAgICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdkYXlzJykudG9PYmplY3QoKSAvLz0+IHsgZGF5czogMS4wMjQxODEyMTUyNzc3Nzc4IH0KICAgICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnXSkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDI0LCBtaW51dGVzOiAzNC44MjA5NSB9CiAgICAgICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnXSkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDI0LCBtaW51dGVzOiAzNCwgc2Vjb25kczogNDkuMjU3IH0KICAgICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IHNlY29uZHM6IDg4NDg5LjI1NyB9CiAgICAgICAqIEByZXR1cm4ge0R1cmF0aW9ufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvRHVyYXRpb24gPSBmdW5jdGlvbiB0b0R1cmF0aW9uKHVuaXQsIG9wdHMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgewogICAgICAgICAgcmV0dXJuIER1cmF0aW9uLmludmFsaWQodGhpcy5pbnZhbGlkUmVhc29uKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLmUuZGlmZih0aGlzLnMsIHVuaXQsIG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSdW4gbWFwRm4gb24gdGhlIGludGVydmFsIHN0YXJ0IGFuZCBlbmQsIHJldHVybmluZyBhIG5ldyBJbnRlcnZhbCBmcm9tIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVzCiAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1hcEZuCiAgICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS5tYXBFbmRwb2ludHMoZW5kcG9pbnQgPT4gZW5kcG9pbnQudG9VVEMoKSkKICAgICAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnBsdXMoeyBob3VyczogMiB9KSkKICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5tYXBFbmRwb2ludHMgPSBmdW5jdGlvbiBtYXBFbmRwb2ludHMobWFwRm4pIHsKICAgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTsKICAgICAgfTsKCiAgICAgIF9jcmVhdGVDbGFzcyhJbnRlcnZhbCwgW3sKICAgICAgICBrZXk6ICJzdGFydCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zIDogbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgZW5kIG9mIHRoZSBJbnRlcnZhbAogICAgICAgICAqIEB0eXBlIHtEYXRlVGltZX0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJlbmQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuZSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIEludGVydmFsJ3MgZW5kIGlzIGF0IGxlYXN0IGl0cyBzdGFydCwgbWVhbmluZyB0aGF0IHRoZSBJbnRlcnZhbCBpc24ndCAnYmFja3dhcmRzJy4KICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpc1ZhbGlkIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmludmFsaWRSZWFzb24gPT09IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXJyb3IgY29kZSBpZiB0aGlzIEludGVydmFsIGlzIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIEludGVydmFsIGlzIHZhbGlkCiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpbnZhbGlkUmVhc29uIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBJbnRlcnZhbCBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWQKICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImludmFsaWRFeHBsYW5hdGlvbiIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDsKICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBJbnRlcnZhbDsKICAgIH0oKTsKCiAgICAvKioKICAgICAqIFRoZSBJbmZvIGNsYXNzIGNvbnRhaW5zIHN0YXRpYyBtZXRob2RzIGZvciByZXRyaWV2aW5nIGdlbmVyYWwgdGltZSBhbmQgZGF0ZSByZWxhdGVkIGRhdGEuIEZvciBleGFtcGxlLCBpdCBoYXMgbWV0aG9kcyBmb3IgZmluZGluZyBvdXQgaWYgYSB0aW1lIHpvbmUgaGFzIGEgRFNULCBmb3IgbGlzdGluZyB0aGUgbW9udGhzIGluIGFueSBzdXBwb3J0ZWQgbG9jYWxlLCBhbmQgZm9yIGRpc2NvdmVyaW5nIHdoaWNoIG9mIEx1eG9uIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgKi8KCiAgICB2YXIgSW5mbyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgIGZ1bmN0aW9uIEluZm8oKSB7fQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBjb250YWlucyBhIERTVC4KICAgICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW3pvbmU9J2xvY2FsJ10gLSBab25lIHRvIGNoZWNrLiBEZWZhdWx0cyB0byB0aGUgZW52aXJvbm1lbnQncyBsb2NhbCB6b25lLgogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgSW5mby5oYXNEU1QgPSBmdW5jdGlvbiBoYXNEU1Qoem9uZSkgewogICAgICAgIGlmICh6b25lID09PSB2b2lkIDApIHsKICAgICAgICAgIHpvbmUgPSBTZXR0aW5ncy5kZWZhdWx0Wm9uZTsKICAgICAgICB9CgogICAgICAgIHZhciBwcm90byA9IERhdGVUaW1lLm5vdygpLnNldFpvbmUoem9uZSkuc2V0KHsKICAgICAgICAgIG1vbnRoOiAxMgogICAgICAgIH0pOwogICAgICAgIHJldHVybiAhem9uZS5pc1VuaXZlcnNhbCAmJiBwcm90by5vZmZzZXQgIT09IHByb3RvLnNldCh7CiAgICAgICAgICBtb250aDogNgogICAgICAgIH0pLm9mZnNldDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB6b25lIGlzIGEgdmFsaWQgSUFOQSBzcGVjaWZpZXIuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB6b25lIC0gWm9uZSB0byBjaGVjawogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgSW5mby5pc1ZhbGlkSUFOQVpvbmUgPSBmdW5jdGlvbiBpc1ZhbGlkSUFOQVpvbmUoem9uZSkgewogICAgICAgIHJldHVybiBJQU5BWm9uZS5pc1ZhbGlkU3BlY2lmaWVyKHpvbmUpICYmIElBTkFab25lLmlzVmFsaWRab25lKHpvbmUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb252ZXJ0cyB0aGUgaW5wdXQgaW50byBhIHtAbGluayBab25lfSBpbnN0YW5jZS4KICAgICAgICoKICAgICAgICogKiBJZiBgaW5wdXRgIGlzIGFscmVhZHkgYSBab25lIGluc3RhbmNlLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICAgICAqICogSWYgYGlucHV0YCBpcyBhIHN0cmluZyBjb250YWluaW5nIGEgdmFsaWQgdGltZSB6b25lIG5hbWUsIGEgWm9uZSBpbnN0YW5jZQogICAgICAgKiAgIHdpdGggdGhhdCBuYW1lIGlzIHJldHVybmVkLgogICAgICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgdGhhdCBkb2Vzbid0IHJlZmVyIHRvIGEga25vd24gdGltZSB6b25lLCBhIFpvbmUKICAgICAgICogICBpbnN0YW5jZSB3aXRoIHtAbGluayBab25lLmlzVmFsaWR9ID09IGZhbHNlIGlzIHJldHVybmVkLgogICAgICAgKiAqIElmIGBpbnB1dCBpcyBhIG51bWJlciwgYSBab25lIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBmaXhlZCBvZmZzZXQKICAgICAgICogICBpbiBtaW51dGVzIGlzIHJldHVybmVkLgogICAgICAgKiAqIElmIGBpbnB1dGAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLCB0aGUgZGVmYXVsdCB6b25lIGlzIHJldHVybmVkLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfG51bWJlcn0gW2lucHV0XSAtIHRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQKICAgICAgICogQHJldHVybiB7Wm9uZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEluZm8ubm9ybWFsaXplWm9uZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVpvbmUkMShpbnB1dCkgewogICAgICAgIHJldHVybiBub3JtYWxpemVab25lKGlucHV0LCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBzdGFuZGFsb25lIG1vbnRoIG5hbWVzLgogICAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBtb250aCByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAibnVtZXJpYyIsICIyLWRpZ2l0IiwgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhcgogICAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygpWzBdIC8vPT4gJ0phbnVhcnknCiAgICAgICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcpWzBdIC8vPT4gJ0phbicKICAgICAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnKVswXSAvLz0+ICcxJwogICAgICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9IClbMF0gLy89PiAnamFudi4nCiAgICAgICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdudW1lcmljJywgeyBsb2NhbGU6ICdhcicgfSlbMF0gLy89PiAn2aEnCiAgICAgICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdsb25nJywgeyBvdXRwdXRDYWxlbmRhcjogJ2lzbGFtaWMnIH0pWzBdIC8vPT4gJ1JhYmnKuyBJJwogICAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEluZm8ubW9udGhzID0gZnVuY3Rpb24gbW9udGhzKGxlbmd0aCwgX3RlbXApIHsKICAgICAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsKICAgICAgICAgIGxlbmd0aCA9ICJsb25nIjsKICAgICAgICB9CgogICAgICAgIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsCiAgICAgICAgICAgIF9yZWYkbG9jYWxlID0gX3JlZi5sb2NhbGUsCiAgICAgICAgICAgIGxvY2FsZSA9IF9yZWYkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRsb2NhbGUsCiAgICAgICAgICAgIF9yZWYkbnVtYmVyaW5nU3lzdGVtID0gX3JlZi5udW1iZXJpbmdTeXN0ZW0sCiAgICAgICAgICAgIG51bWJlcmluZ1N5c3RlbSA9IF9yZWYkbnVtYmVyaW5nU3lzdGVtID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRudW1iZXJpbmdTeXN0ZW0sCiAgICAgICAgICAgIF9yZWYkbG9jT2JqID0gX3JlZi5sb2NPYmosCiAgICAgICAgICAgIGxvY09iaiA9IF9yZWYkbG9jT2JqID09PSB2b2lkIDAgPyBudWxsIDogX3JlZiRsb2NPYmosCiAgICAgICAgICAgIF9yZWYkb3V0cHV0Q2FsZW5kYXIgPSBfcmVmLm91dHB1dENhbGVuZGFyLAogICAgICAgICAgICBvdXRwdXRDYWxlbmRhciA9IF9yZWYkb3V0cHV0Q2FsZW5kYXIgPT09IHZvaWQgMCA/ICJncmVnb3J5IiA6IF9yZWYkb3V0cHV0Q2FsZW5kYXI7CgogICAgICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBmb3JtYXQgbW9udGggbmFtZXMuCiAgICAgICAqIEZvcm1hdCBtb250aHMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSBtb250aHMgaW4gdGhhdCB0aGV5J3JlIG1lYW50IHRvIGFwcGVhciBuZXh0IHRvIHRoZSBkYXkgb2YgdGhlIG1vbnRoLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdAogICAgICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuCiAgICAgICAqIFNlZSB7QGxpbmsgSW5mbyNtb250aHN9CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBtb250aCByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAibnVtZXJpYyIsICIyLWRpZ2l0IiwgIm5hcnJvdyIsICJzaG9ydCIsICJsb25nIgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXI9J2dyZWdvcnknXSAtIHRoZSBjYWxlbmRhcgogICAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEluZm8ubW9udGhzRm9ybWF0ID0gZnVuY3Rpb24gbW9udGhzRm9ybWF0KGxlbmd0aCwgX3RlbXAyKSB7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBsZW5ndGggPSAibG9uZyI7CiAgICAgICAgfQoKICAgICAgICB2YXIgX3JlZjIgPSBfdGVtcDIgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAyLAogICAgICAgICAgICBfcmVmMiRsb2NhbGUgPSBfcmVmMi5sb2NhbGUsCiAgICAgICAgICAgIGxvY2FsZSA9IF9yZWYyJGxvY2FsZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYyJGxvY2FsZSwKICAgICAgICAgICAgX3JlZjIkbnVtYmVyaW5nU3lzdGVtID0gX3JlZjIubnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmMiRudW1iZXJpbmdTeXN0ZW0gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRudW1iZXJpbmdTeXN0ZW0sCiAgICAgICAgICAgIF9yZWYyJGxvY09iaiA9IF9yZWYyLmxvY09iaiwKICAgICAgICAgICAgbG9jT2JqID0gX3JlZjIkbG9jT2JqID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkbG9jT2JqLAogICAgICAgICAgICBfcmVmMiRvdXRwdXRDYWxlbmRhciA9IF9yZWYyLm91dHB1dENhbGVuZGFyLAogICAgICAgICAgICBvdXRwdXRDYWxlbmRhciA9IF9yZWYyJG91dHB1dENhbGVuZGFyID09PSB2b2lkIDAgPyAiZ3JlZ29yeSIgOiBfcmVmMiRvdXRwdXRDYWxlbmRhcjsKCiAgICAgICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpKS5tb250aHMobGVuZ3RoLCB0cnVlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgd2VlayBuYW1lcy4KICAgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgd2Vla2RheSByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAibmFycm93IiwgInNob3J0IiwgImxvbmciLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZQogICAgICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKClbMF0gLy89PiAnTW9uZGF5JwogICAgICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcpWzBdIC8vPT4gJ01vbicKICAgICAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9KVswXSAvLz0+ICdsdW4uJwogICAgICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcsIHsgbG9jYWxlOiAnYXInIH0pWzBdIC8vPT4gJ9in2YTYp9ir2YbZitmGJwogICAgICAgKiBAcmV0dXJuIHtBcnJheX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIEluZm8ud2Vla2RheXMgPSBmdW5jdGlvbiB3ZWVrZGF5cyhsZW5ndGgsIF90ZW1wMykgewogICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgbGVuZ3RoID0gImxvbmciOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9yZWYzID0gX3RlbXAzID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMywKICAgICAgICAgICAgX3JlZjMkbG9jYWxlID0gX3JlZjMubG9jYWxlLAogICAgICAgICAgICBsb2NhbGUgPSBfcmVmMyRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMyRsb2NhbGUsCiAgICAgICAgICAgIF9yZWYzJG51bWJlcmluZ1N5c3RlbSA9IF9yZWYzLm51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX3JlZjMkbnVtYmVyaW5nU3lzdGVtID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjMkbnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgICBfcmVmMyRsb2NPYmogPSBfcmVmMy5sb2NPYmosCiAgICAgICAgICAgIGxvY09iaiA9IF9yZWYzJGxvY09iaiA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJGxvY09iajsKCiAgICAgICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBmb3JtYXQgd2VlayBuYW1lcy4KICAgICAgICogRm9ybWF0IHdlZWtkYXlzIGRpZmZlciBmcm9tIHN0YW5kYWxvbmUgd2Vla2RheXMgaW4gdGhhdCB0aGV5J3JlIG1lYW50IHRvIGFwcGVhciBuZXh0IHRvIG1vcmUgZGF0ZSBpbmZvcm1hdGlvbi4gSW4gc29tZSBsYW5ndWFnZXMsIHRoYXQKICAgICAgICogY2hhbmdlcyB0aGUgc3RyaW5nLgogICAgICAgKiBTZWUge0BsaW5rIEluZm8jd2Vla2RheXN9CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBtb250aCByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyAibmFycm93IiwgInNob3J0IiwgImxvbmciLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT1udWxsXSAtIHRoZSBsb2NhbGUgY29kZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlCiAgICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICAgKi8KICAgICAgOwoKICAgICAgSW5mby53ZWVrZGF5c0Zvcm1hdCA9IGZ1bmN0aW9uIHdlZWtkYXlzRm9ybWF0KGxlbmd0aCwgX3RlbXA0KSB7CiAgICAgICAgaWYgKGxlbmd0aCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBsZW5ndGggPSAibG9uZyI7CiAgICAgICAgfQoKICAgICAgICB2YXIgX3JlZjQgPSBfdGVtcDQgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA0LAogICAgICAgICAgICBfcmVmNCRsb2NhbGUgPSBfcmVmNC5sb2NhbGUsCiAgICAgICAgICAgIGxvY2FsZSA9IF9yZWY0JGxvY2FsZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY0JGxvY2FsZSwKICAgICAgICAgICAgX3JlZjQkbnVtYmVyaW5nU3lzdGVtID0gX3JlZjQubnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmNCRudW1iZXJpbmdTeXN0ZW0gPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNCRudW1iZXJpbmdTeXN0ZW0sCiAgICAgICAgICAgIF9yZWY0JGxvY09iaiA9IF9yZWY0LmxvY09iaiwKICAgICAgICAgICAgbG9jT2JqID0gX3JlZjQkbG9jT2JqID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjQkbG9jT2JqOwoKICAgICAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoLCB0cnVlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGFuIGFycmF5IG9mIG1lcmlkaWVtcy4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlCiAgICAgICAqIEBleGFtcGxlIEluZm8ubWVyaWRpZW1zKCkgLy89PiBbICdBTScsICdQTScgXQogICAgICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcyh7IGxvY2FsZTogJ215JyB9KSAvLz0+IFsgJ+GAlOGAtuGAlOGAgOGAuicsICfhgIrhgJThgLEnIF0KICAgICAgICogQHJldHVybiB7QXJyYXl9CiAgICAgICAqLwogICAgICA7CgogICAgICBJbmZvLm1lcmlkaWVtcyA9IGZ1bmN0aW9uIG1lcmlkaWVtcyhfdGVtcDUpIHsKICAgICAgICB2YXIgX3JlZjUgPSBfdGVtcDUgPT09IHZvaWQgMCA/IHt9IDogX3RlbXA1LAogICAgICAgICAgICBfcmVmNSRsb2NhbGUgPSBfcmVmNS5sb2NhbGUsCiAgICAgICAgICAgIGxvY2FsZSA9IF9yZWY1JGxvY2FsZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY1JGxvY2FsZTsKCiAgICAgICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlKS5tZXJpZGllbXMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGVyYXMsIHN1Y2ggYXMgWydCQycsICdBRCddLiBUaGUgbG9jYWxlIGNhbiBiZSBzcGVjaWZpZWQsIGJ1dCB0aGUgY2FsZW5kYXIgc3lzdGVtIGlzIGFsd2F5cyBHcmVnb3JpYW4uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzICJzaG9ydCIgb3IgImxvbmciLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGUKICAgICAgICogQGV4YW1wbGUgSW5mby5lcmFzKCkgLy89PiBbICdCQycsICdBRCcgXQogICAgICAgKiBAZXhhbXBsZSBJbmZvLmVyYXMoJ2xvbmcnKSAvLz0+IFsgJ0JlZm9yZSBDaHJpc3QnLCAnQW5ubyBEb21pbmknIF0KICAgICAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJywgeyBsb2NhbGU6ICdmcicgfSkgLy89PiBbICdhdmFudCBKw6lzdXMtQ2hyaXN0JywgJ2FwcsOocyBKw6lzdXMtQ2hyaXN0JyBdCiAgICAgICAqIEByZXR1cm4ge0FycmF5fQogICAgICAgKi8KICAgICAgOwoKICAgICAgSW5mby5lcmFzID0gZnVuY3Rpb24gZXJhcyhsZW5ndGgsIF90ZW1wNikgewogICAgICAgIGlmIChsZW5ndGggPT09IHZvaWQgMCkgewogICAgICAgICAgbGVuZ3RoID0gInNob3J0IjsKICAgICAgICB9CgogICAgICAgIHZhciBfcmVmNiA9IF90ZW1wNiA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDYsCiAgICAgICAgICAgIF9yZWY2JGxvY2FsZSA9IF9yZWY2LmxvY2FsZSwKICAgICAgICAgICAgbG9jYWxlID0gX3JlZjYkbG9jYWxlID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjYkbG9jYWxlOwoKICAgICAgICByZXR1cm4gTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bGwsICJncmVnb3J5IikuZXJhcyhsZW5ndGgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gdGhlIHNldCBvZiBhdmFpbGFibGUgZmVhdHVyZXMgaW4gdGhpcyBlbnZpcm9ubWVudC4KICAgICAgICogU29tZSBmZWF0dXJlcyBvZiBMdXhvbiBhcmUgbm90IGF2YWlsYWJsZSBpbiBhbGwgZW52aXJvbm1lbnRzLiBGb3IgZXhhbXBsZSwgb24gb2xkZXIgYnJvd3NlcnMsIHRpbWV6b25lIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gVXNlIHRoaXMgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBpZiB0aGF0J3MgdGhlIGNhc2UuCiAgICAgICAqIEtleXM6CiAgICAgICAqICogYHJlbGF0aXZlYDogd2hldGhlciB0aGlzIGVudmlyb25tZW50IHN1cHBvcnRzIHJlbGF0aXZlIHRpbWUgZm9ybWF0dGluZwogICAgICAgKiBAZXhhbXBsZSBJbmZvLmZlYXR1cmVzKCkgLy89PiB7IGludGw6IHRydWUsIGludGxUb2tlbnM6IGZhbHNlLCB6b25lczogdHJ1ZSwgcmVsYXRpdmU6IGZhbHNlIH0KICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgOwoKICAgICAgSW5mby5mZWF0dXJlcyA9IGZ1bmN0aW9uIGZlYXR1cmVzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICByZWxhdGl2ZTogaGFzUmVsYXRpdmUoKQogICAgICAgIH07CiAgICAgIH07CgogICAgICByZXR1cm4gSW5mbzsKICAgIH0oKTsKCiAgICBmdW5jdGlvbiBkYXlEaWZmKGVhcmxpZXIsIGxhdGVyKSB7CiAgICAgIHZhciB1dGNEYXlTdGFydCA9IGZ1bmN0aW9uIHV0Y0RheVN0YXJ0KGR0KSB7CiAgICAgICAgcmV0dXJuIGR0LnRvVVRDKDAsIHsKICAgICAgICAgIGtlZXBMb2NhbFRpbWU6IHRydWUKICAgICAgICB9KS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCk7CiAgICAgIH0sCiAgICAgICAgICBtcyA9IHV0Y0RheVN0YXJ0KGxhdGVyKSAtIHV0Y0RheVN0YXJ0KGVhcmxpZXIpOwoKICAgICAgcmV0dXJuIE1hdGguZmxvb3IoRHVyYXRpb24uZnJvbU1pbGxpcyhtcykuYXMoImRheXMiKSk7CiAgICB9CgogICAgZnVuY3Rpb24gaGlnaE9yZGVyRGlmZnMoY3Vyc29yLCBsYXRlciwgdW5pdHMpIHsKICAgICAgdmFyIGRpZmZlcnMgPSBbWyJ5ZWFycyIsIGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAgcmV0dXJuIGIueWVhciAtIGEueWVhcjsKICAgICAgfV0sIFsicXVhcnRlcnMiLCBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHJldHVybiBiLnF1YXJ0ZXIgLSBhLnF1YXJ0ZXI7CiAgICAgIH1dLCBbIm1vbnRocyIsIGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgICAgcmV0dXJuIGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMjsKICAgICAgfV0sIFsid2Vla3MiLCBmdW5jdGlvbiAoYSwgYikgewogICAgICAgIHZhciBkYXlzID0gZGF5RGlmZihhLCBiKTsKICAgICAgICByZXR1cm4gKGRheXMgLSBkYXlzICUgNykgLyA3OwogICAgICB9XSwgWyJkYXlzIiwgZGF5RGlmZl1dOwogICAgICB2YXIgcmVzdWx0cyA9IHt9OwogICAgICB2YXIgbG93ZXN0T3JkZXIsIGhpZ2hXYXRlcjsKCiAgICAgIGZvciAodmFyIF9pID0gMCwgX2RpZmZlcnMgPSBkaWZmZXJzOyBfaSA8IF9kaWZmZXJzLmxlbmd0aDsgX2krKykgewogICAgICAgIHZhciBfZGlmZmVycyRfaSA9IF9kaWZmZXJzW19pXSwKICAgICAgICAgICAgdW5pdCA9IF9kaWZmZXJzJF9pWzBdLAogICAgICAgICAgICBkaWZmZXIgPSBfZGlmZmVycyRfaVsxXTsKCiAgICAgICAgaWYgKHVuaXRzLmluZGV4T2YodW5pdCkgPj0gMCkgewogICAgICAgICAgdmFyIF9jdXJzb3IkcGx1czsKCiAgICAgICAgICBsb3dlc3RPcmRlciA9IHVuaXQ7CiAgICAgICAgICB2YXIgZGVsdGEgPSBkaWZmZXIoY3Vyc29yLCBsYXRlcik7CiAgICAgICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cygoX2N1cnNvciRwbHVzID0ge30sIF9jdXJzb3IkcGx1c1t1bml0XSA9IGRlbHRhLCBfY3Vyc29yJHBsdXMpKTsKCiAgICAgICAgICBpZiAoaGlnaFdhdGVyID4gbGF0ZXIpIHsKICAgICAgICAgICAgdmFyIF9jdXJzb3IkcGx1czI7CgogICAgICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGx1cygoX2N1cnNvciRwbHVzMiA9IHt9LCBfY3Vyc29yJHBsdXMyW3VuaXRdID0gZGVsdGEgLSAxLCBfY3Vyc29yJHBsdXMyKSk7CiAgICAgICAgICAgIGRlbHRhIC09IDE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjdXJzb3IgPSBoaWdoV2F0ZXI7CiAgICAgICAgICB9CgogICAgICAgICAgcmVzdWx0c1t1bml0XSA9IGRlbHRhOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIFtjdXJzb3IsIHJlc3VsdHMsIGhpZ2hXYXRlciwgbG93ZXN0T3JkZXJdOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kaWZmIChlYXJsaWVyLCBsYXRlciwgdW5pdHMsIG9wdHMpIHsKICAgICAgdmFyIF9oaWdoT3JkZXJEaWZmcyA9IGhpZ2hPcmRlckRpZmZzKGVhcmxpZXIsIGxhdGVyLCB1bml0cyksCiAgICAgICAgICBjdXJzb3IgPSBfaGlnaE9yZGVyRGlmZnNbMF0sCiAgICAgICAgICByZXN1bHRzID0gX2hpZ2hPcmRlckRpZmZzWzFdLAogICAgICAgICAgaGlnaFdhdGVyID0gX2hpZ2hPcmRlckRpZmZzWzJdLAogICAgICAgICAgbG93ZXN0T3JkZXIgPSBfaGlnaE9yZGVyRGlmZnNbM107CgogICAgICB2YXIgcmVtYWluaW5nTWlsbGlzID0gbGF0ZXIgLSBjdXJzb3I7CiAgICAgIHZhciBsb3dlck9yZGVyVW5pdHMgPSB1bml0cy5maWx0ZXIoZnVuY3Rpb24gKHUpIHsKICAgICAgICByZXR1cm4gWyJob3VycyIsICJtaW51dGVzIiwgInNlY29uZHMiLCAibWlsbGlzZWNvbmRzIl0uaW5kZXhPZih1KSA+PSAwOwogICAgICB9KTsKCiAgICAgIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7CiAgICAgICAgICB2YXIgX2N1cnNvciRwbHVzMzsKCiAgICAgICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cygoX2N1cnNvciRwbHVzMyA9IHt9LCBfY3Vyc29yJHBsdXMzW2xvd2VzdE9yZGVyXSA9IDEsIF9jdXJzb3IkcGx1czMpKTsKICAgICAgICB9CgogICAgICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikgewogICAgICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7CgogICAgICBpZiAobG93ZXJPcmRlclVuaXRzLmxlbmd0aCA+IDApIHsKICAgICAgICB2YXIgX0R1cmF0aW9uJGZyb21NaWxsaXM7CgogICAgICAgIHJldHVybiAoX0R1cmF0aW9uJGZyb21NaWxsaXMgPSBEdXJhdGlvbi5mcm9tTWlsbGlzKHJlbWFpbmluZ01pbGxpcywgb3B0cykpLnNoaWZ0VG8uYXBwbHkoX0R1cmF0aW9uJGZyb21NaWxsaXMsIGxvd2VyT3JkZXJVbml0cykucGx1cyhkdXJhdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGR1cmF0aW9uOwogICAgICB9CiAgICB9CgogICAgdmFyIG51bWJlcmluZ1N5c3RlbXMgPSB7CiAgICAgIGFyYWI6ICJbXHUwNjYwLVx1MDY2OV0iLAogICAgICBhcmFiZXh0OiAiW1x1MDZGMC1cdTA2RjldIiwKICAgICAgYmFsaTogIltcdTFCNTAtXHUxQjU5XSIsCiAgICAgIGJlbmc6ICJbXHUwOUU2LVx1MDlFRl0iLAogICAgICBkZXZhOiAiW1x1MDk2Ni1cdTA5NkZdIiwKICAgICAgZnVsbHdpZGU6ICJbXHVGRjEwLVx1RkYxOV0iLAogICAgICBndWpyOiAiW1x1MEFFNi1cdTBBRUZdIiwKICAgICAgaGFuaWRlYzogIlvjgId85LiAfOS6jHzkuIl85ZubfOS6lHzlha185LiDfOWFq3zkuZ1dIiwKICAgICAga2htcjogIltcdTE3RTAtXHUxN0U5XSIsCiAgICAgIGtuZGE6ICJbXHUwQ0U2LVx1MENFRl0iLAogICAgICBsYW9vOiAiW1x1MEVEMC1cdTBFRDldIiwKICAgICAgbGltYjogIltcdTE5NDYtXHUxOTRGXSIsCiAgICAgIG1seW06ICJbXHUwRDY2LVx1MEQ2Rl0iLAogICAgICBtb25nOiAiW1x1MTgxMC1cdTE4MTldIiwKICAgICAgbXltcjogIltcdTEwNDAtXHUxMDQ5XSIsCiAgICAgIG9yeWE6ICJbXHUwQjY2LVx1MEI2Rl0iLAogICAgICB0YW1sZGVjOiAiW1x1MEJFNi1cdTBCRUZdIiwKICAgICAgdGVsdTogIltcdTBDNjYtXHUwQzZGXSIsCiAgICAgIHRoYWk6ICJbXHUwRTUwLVx1MEU1OV0iLAogICAgICB0aWJ0OiAiW1x1MEYyMC1cdTBGMjldIiwKICAgICAgbGF0bjogIlxcZCIKICAgIH07CiAgICB2YXIgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0gewogICAgICBhcmFiOiBbMTYzMiwgMTY0MV0sCiAgICAgIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSwKICAgICAgYmFsaTogWzY5OTIsIDcwMDFdLAogICAgICBiZW5nOiBbMjUzNCwgMjU0M10sCiAgICAgIGRldmE6IFsyNDA2LCAyNDE1XSwKICAgICAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLAogICAgICBndWpyOiBbMjc5MCwgMjc5OV0sCiAgICAgIGtobXI6IFs2MTEyLCA2MTIxXSwKICAgICAga25kYTogWzMzMDIsIDMzMTFdLAogICAgICBsYW9vOiBbMzc5MiwgMzgwMV0sCiAgICAgIGxpbWI6IFs2NDcwLCA2NDc5XSwKICAgICAgbWx5bTogWzM0MzAsIDM0MzldLAogICAgICBtb25nOiBbNjE2MCwgNjE2OV0sCiAgICAgIG15bXI6IFs0MTYwLCA0MTY5XSwKICAgICAgb3J5YTogWzI5MTgsIDI5MjddLAogICAgICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sCiAgICAgIHRlbHU6IFszMTc0LCAzMTgzXSwKICAgICAgdGhhaTogWzM2NjQsIDM2NzNdLAogICAgICB0aWJ0OiBbMzg3MiwgMzg4MV0KICAgIH07CiAgICB2YXIgaGFuaWRlY0NoYXJzID0gbnVtYmVyaW5nU3lzdGVtcy5oYW5pZGVjLnJlcGxhY2UoL1tcW3xcXV0vZywgIiIpLnNwbGl0KCIiKTsKICAgIGZ1bmN0aW9uIHBhcnNlRGlnaXRzKHN0cikgewogICAgICB2YXIgdmFsdWUgPSBwYXJzZUludChzdHIsIDEwKTsKCiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHsKICAgICAgICB2YWx1ZSA9ICIiOwoKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTsKCiAgICAgICAgICBpZiAoc3RyW2ldLnNlYXJjaChudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMpICE9PSAtMSkgewogICAgICAgICAgICB2YWx1ZSArPSBoYW5pZGVjQ2hhcnMuaW5kZXhPZihzdHJbaV0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG51bWJlcmluZ1N5c3RlbXNVVEYxNikgewogICAgICAgICAgICAgIHZhciBfbnVtYmVyaW5nU3lzdGVtc1VURiA9IG51bWJlcmluZ1N5c3RlbXNVVEYxNltrZXldLAogICAgICAgICAgICAgICAgICBtaW4gPSBfbnVtYmVyaW5nU3lzdGVtc1VURlswXSwKICAgICAgICAgICAgICAgICAgbWF4ID0gX251bWJlcmluZ1N5c3RlbXNVVEZbMV07CgogICAgICAgICAgICAgIGlmIChjb2RlID49IG1pbiAmJiBjb2RlIDw9IG1heCkgewogICAgICAgICAgICAgICAgdmFsdWUgKz0gY29kZSAtIG1pbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZGlnaXRSZWdleChfcmVmLCBhcHBlbmQpIHsKICAgICAgdmFyIG51bWJlcmluZ1N5c3RlbSA9IF9yZWYubnVtYmVyaW5nU3lzdGVtOwoKICAgICAgaWYgKGFwcGVuZCA9PT0gdm9pZCAwKSB7CiAgICAgICAgYXBwZW5kID0gIiI7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgUmVnRXhwKCIiICsgbnVtYmVyaW5nU3lzdGVtc1tudW1iZXJpbmdTeXN0ZW0gfHwgImxhdG4iXSArIGFwcGVuZCk7CiAgICB9CgogICAgdmFyIE1JU1NJTkdfRlRQID0gIm1pc3NpbmcgSW50bC5EYXRlVGltZUZvcm1hdC5mb3JtYXRUb1BhcnRzIHN1cHBvcnQiOwoKICAgIGZ1bmN0aW9uIGludFVuaXQocmVnZXgsIHBvc3QpIHsKICAgICAgaWYgKHBvc3QgPT09IHZvaWQgMCkgewogICAgICAgIHBvc3QgPSBmdW5jdGlvbiBwb3N0KGkpIHsKICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgcmVnZXg6IHJlZ2V4LAogICAgICAgIGRlc2VyOiBmdW5jdGlvbiBkZXNlcihfcmVmKSB7CiAgICAgICAgICB2YXIgcyA9IF9yZWZbMF07CiAgICAgICAgICByZXR1cm4gcG9zdChwYXJzZURpZ2l0cyhzKSk7CiAgICAgICAgfQogICAgICB9OwogICAgfQoKICAgIHZhciBOQlNQID0gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApOwogICAgdmFyIHNwYWNlT3JOQlNQID0gIiggfCIgKyBOQlNQICsgIikiOwogICAgdmFyIHNwYWNlT3JOQlNQUmVnRXhwID0gbmV3IFJlZ0V4cChzcGFjZU9yTkJTUCwgImciKTsKCiAgICBmdW5jdGlvbiBmaXhMaXN0UmVnZXgocykgewogICAgICAvLyBtYWtlIGRvdHMgb3B0aW9uYWwgYW5kIGFsc28gbWFrZSB0aGVtIGxpdGVyYWwKICAgICAgLy8gbWFrZSBzcGFjZSBhbmQgbm9uIGJyZWFrYWJsZSBzcGFjZSBjaGFyYWN0ZXJzIGludGVyY2hhbmdlYWJsZQogICAgICByZXR1cm4gcy5yZXBsYWNlKC9cLi9nLCAiXFwuPyIpLnJlcGxhY2Uoc3BhY2VPck5CU1BSZWdFeHAsIHNwYWNlT3JOQlNQKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSB7CiAgICAgIHJldHVybiBzLnJlcGxhY2UoL1wuL2csICIiKSAvLyBpZ25vcmUgZG90cyB0aGF0IHdlcmUgbWFkZSBvcHRpb25hbAogICAgICAucmVwbGFjZShzcGFjZU9yTkJTUFJlZ0V4cCwgIiAiKSAvLyBpbnRlcmNoYW5nZSBzcGFjZSBhbmQgbmJzcAogICAgICAudG9Mb3dlckNhc2UoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbmVPZihzdHJpbmdzLCBzdGFydEluZGV4KSB7CiAgICAgIGlmIChzdHJpbmdzID09PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHJlZ2V4OiBSZWdFeHAoc3RyaW5ncy5tYXAoZml4TGlzdFJlZ2V4KS5qb2luKCJ8IikpLAogICAgICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWYyKSB7CiAgICAgICAgICAgIHZhciBzID0gX3JlZjJbMF07CiAgICAgICAgICAgIHJldHVybiBzdHJpbmdzLmZpbmRJbmRleChmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgIHJldHVybiBzdHJpcEluc2Vuc2l0aXZpdGllcyhzKSA9PT0gc3RyaXBJbnNlbnNpdGl2aXRpZXMoaSk7CiAgICAgICAgICAgIH0pICsgc3RhcnRJbmRleDsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gb2Zmc2V0KHJlZ2V4LCBncm91cHMpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICByZWdleDogcmVnZXgsCiAgICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWYzKSB7CiAgICAgICAgICB2YXIgaCA9IF9yZWYzWzFdLAogICAgICAgICAgICAgIG0gPSBfcmVmM1syXTsKICAgICAgICAgIHJldHVybiBzaWduZWRPZmZzZXQoaCwgbSk7CiAgICAgICAgfSwKICAgICAgICBncm91cHM6IGdyb3VwcwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNpbXBsZShyZWdleCkgewogICAgICByZXR1cm4gewogICAgICAgIHJlZ2V4OiByZWdleCwKICAgICAgICBkZXNlcjogZnVuY3Rpb24gZGVzZXIoX3JlZjQpIHsKICAgICAgICAgIHZhciBzID0gX3JlZjRbMF07CiAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csICJcXCQmIik7CiAgICB9CgogICAgZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHsKICAgICAgdmFyIG9uZSA9IGRpZ2l0UmVnZXgobG9jKSwKICAgICAgICAgIHR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezJ9IiksCiAgICAgICAgICB0aHJlZSA9IGRpZ2l0UmVnZXgobG9jLCAiezN9IiksCiAgICAgICAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsICJ7NH0iKSwKICAgICAgICAgIHNpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezZ9IiksCiAgICAgICAgICBvbmVPclR3byA9IGRpZ2l0UmVnZXgobG9jLCAiezEsMn0iKSwKICAgICAgICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgInsxLDN9IiksCiAgICAgICAgICBvbmVUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezEsNn0iKSwKICAgICAgICAgIG9uZVRvTmluZSA9IGRpZ2l0UmVnZXgobG9jLCAiezEsOX0iKSwKICAgICAgICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCAiezIsNH0iKSwKICAgICAgICAgIGZvdXJUb1NpeCA9IGRpZ2l0UmVnZXgobG9jLCAiezQsNn0iKSwKICAgICAgICAgIGxpdGVyYWwgPSBmdW5jdGlvbiBsaXRlcmFsKHQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgcmVnZXg6IFJlZ0V4cChlc2NhcGVUb2tlbih0LnZhbCkpLAogICAgICAgICAgZGVzZXI6IGZ1bmN0aW9uIGRlc2VyKF9yZWY1KSB7CiAgICAgICAgICAgIHZhciBzID0gX3JlZjVbMF07CiAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgfSwKICAgICAgICAgIGxpdGVyYWw6IHRydWUKICAgICAgICB9OwogICAgICB9LAogICAgICAgICAgdW5pdGF0ZSA9IGZ1bmN0aW9uIHVuaXRhdGUodCkgewogICAgICAgIGlmICh0b2tlbi5saXRlcmFsKSB7CiAgICAgICAgICByZXR1cm4gbGl0ZXJhbCh0KTsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAodC52YWwpIHsKICAgICAgICAgIC8vIGVyYQogICAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcygic2hvcnQiLCBmYWxzZSksIDApOwoKICAgICAgICAgIGNhc2UgIkdHIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5lcmFzKCJsb25nIiwgZmFsc2UpLCAwKTsKICAgICAgICAgIC8vIHllYXJzCgogICAgICAgICAgY2FzZSAieSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvU2l4KTsKCiAgICAgICAgICBjYXNlICJ5eSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3b1RvRm91ciwgdW50cnVuY2F0ZVllYXIpOwoKICAgICAgICAgIGNhc2UgInl5eXkiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyKTsKCiAgICAgICAgICBjYXNlICJ5eXl5eSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KGZvdXJUb1NpeCk7CgogICAgICAgICAgY2FzZSAieXl5eXl5IjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQoc2l4KTsKICAgICAgICAgIC8vIG1vbnRocwoKICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgogICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKICAgICAgICAgIGNhc2UgIk1NTSI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJzaG9ydCIsIHRydWUsIGZhbHNlKSwgMSk7CgogICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKCJsb25nIiwgdHJ1ZSwgZmFsc2UpLCAxKTsKCiAgICAgICAgICBjYXNlICJMIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pOwoKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTsKCiAgICAgICAgICBjYXNlICJMTEwiOgogICAgICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocygic2hvcnQiLCBmYWxzZSwgZmFsc2UpLCAxKTsKCiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tb250aHMoImxvbmciLCBmYWxzZSwgZmFsc2UpLCAxKTsKICAgICAgICAgIC8vIGRhdGVzCgogICAgICAgICAgY2FzZSAiZCI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCiAgICAgICAgICBjYXNlICJkZCI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CiAgICAgICAgICAvLyBvcmRpbmFscwoKICAgICAgICAgIGNhc2UgIm8iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTsKCiAgICAgICAgICBjYXNlICJvb28iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7CiAgICAgICAgICAvLyB0aW1lCgogICAgICAgICAgY2FzZSAiSEgiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgogICAgICAgICAgY2FzZSAiaGgiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgogICAgICAgICAgY2FzZSAibW0iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pOwoKICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7CgogICAgICAgICAgY2FzZSAicSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCiAgICAgICAgICBjYXNlICJxcSI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgogICAgICAgICAgY2FzZSAicyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCiAgICAgICAgICBjYXNlICJzcyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CgogICAgICAgICAgY2FzZSAiUyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpOwoKICAgICAgICAgIGNhc2UgIlNTUyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTsKCiAgICAgICAgICBjYXNlICJ1IjoKICAgICAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpOwogICAgICAgICAgLy8gbWVyaWRpZW0KCiAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy5tZXJpZGllbXMoKSwgMCk7CiAgICAgICAgICAvLyB3ZWVrWWVhciAoaykKCiAgICAgICAgICBjYXNlICJra2trIjoKICAgICAgICAgICAgcmV0dXJuIGludFVuaXQoZm91cik7CgogICAgICAgICAgY2FzZSAia2siOgogICAgICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTsKICAgICAgICAgIC8vIHdlZWtOdW1iZXIgKFcpCgogICAgICAgICAgY2FzZSAiVyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTsKCiAgICAgICAgICBjYXNlICJXVyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7CiAgICAgICAgICAvLyB3ZWVrZGF5cwoKICAgICAgICAgIGNhc2UgIkUiOgogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7CgogICAgICAgICAgY2FzZSAiRUVFIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cygic2hvcnQiLCBmYWxzZSwgZmFsc2UpLCAxKTsKCiAgICAgICAgICBjYXNlICJFRUVFIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cygibG9uZyIsIGZhbHNlLCBmYWxzZSksIDEpOwoKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBvbmVPZihsb2Mud2Vla2RheXMoInNob3J0IiwgdHJ1ZSwgZmFsc2UpLCAxKTsKCiAgICAgICAgICBjYXNlICJjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cygibG9uZyIsIHRydWUsIGZhbHNlKSwgMSk7CiAgICAgICAgICAvLyBvZmZzZXQvem9uZQoKICAgICAgICAgIGNhc2UgIloiOgogICAgICAgICAgY2FzZSAiWloiOgogICAgICAgICAgICByZXR1cm4gb2Zmc2V0KG5ldyBSZWdFeHAoIihbKy1dIiArIG9uZU9yVHdvLnNvdXJjZSArICIpKD86OigiICsgdHdvLnNvdXJjZSArICIpKT8iKSwgMik7CgogICAgICAgICAgY2FzZSAiWlpaIjoKICAgICAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKCIoWystXSIgKyBvbmVPclR3by5zb3VyY2UgKyAiKSgiICsgdHdvLnNvdXJjZSArICIpPyIpLCAyKTsKICAgICAgICAgIC8vIHdlIGRvbid0IHN1cHBvcnQgWlpaWiAoUFNUKSBvciBaWlpaWiAoUGFjaWZpYyBTdGFuZGFyZCBUaW1lKSBpbiBwYXJzaW5nCiAgICAgICAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW55IHdheSB0byBmaWd1cmUgb3V0IHdoYXQgdGhleSBhcmUKCiAgICAgICAgICBjYXNlICJ6IjoKICAgICAgICAgICAgcmV0dXJuIHNpbXBsZSgvW2Etel8rLS9dezEsMjU2fT8vaSk7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgdmFyIHVuaXQgPSB1bml0YXRlKHRva2VuKSB8fCB7CiAgICAgICAgaW52YWxpZFJlYXNvbjogTUlTU0lOR19GVFAKICAgICAgfTsKICAgICAgdW5pdC50b2tlbiA9IHRva2VuOwogICAgICByZXR1cm4gdW5pdDsKICAgIH0KCiAgICB2YXIgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7CiAgICAgIHllYXI6IHsKICAgICAgICAiMi1kaWdpdCI6ICJ5eSIsCiAgICAgICAgbnVtZXJpYzogInl5eXl5IgogICAgICB9LAogICAgICBtb250aDogewogICAgICAgIG51bWVyaWM6ICJNIiwKICAgICAgICAiMi1kaWdpdCI6ICJNTSIsCiAgICAgICAgc2hvcnQ6ICJNTU0iLAogICAgICAgIGxvbmc6ICJNTU1NIgogICAgICB9LAogICAgICBkYXk6IHsKICAgICAgICBudW1lcmljOiAiZCIsCiAgICAgICAgIjItZGlnaXQiOiAiZGQiCiAgICAgIH0sCiAgICAgIHdlZWtkYXk6IHsKICAgICAgICBzaG9ydDogIkVFRSIsCiAgICAgICAgbG9uZzogIkVFRUUiCiAgICAgIH0sCiAgICAgIGRheXBlcmlvZDogImEiLAogICAgICBkYXlQZXJpb2Q6ICJhIiwKICAgICAgaG91cjogewogICAgICAgIG51bWVyaWM6ICJoIiwKICAgICAgICAiMi1kaWdpdCI6ICJoaCIKICAgICAgfSwKICAgICAgbWludXRlOiB7CiAgICAgICAgbnVtZXJpYzogIm0iLAogICAgICAgICIyLWRpZ2l0IjogIm1tIgogICAgICB9LAogICAgICBzZWNvbmQ6IHsKICAgICAgICBudW1lcmljOiAicyIsCiAgICAgICAgIjItZGlnaXQiOiAic3MiCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gdG9rZW5Gb3JQYXJ0KHBhcnQsIGxvY2FsZSwgZm9ybWF0T3B0cykgewogICAgICB2YXIgdHlwZSA9IHBhcnQudHlwZSwKICAgICAgICAgIHZhbHVlID0gcGFydC52YWx1ZTsKCiAgICAgIGlmICh0eXBlID09PSAibGl0ZXJhbCIpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbGl0ZXJhbDogdHJ1ZSwKICAgICAgICAgIHZhbDogdmFsdWUKICAgICAgICB9OwogICAgICB9CgogICAgICB2YXIgc3R5bGUgPSBmb3JtYXRPcHRzW3R5cGVdOwogICAgICB2YXIgdmFsID0gcGFydFR5cGVTdHlsZVRvVG9rZW5WYWxbdHlwZV07CgogICAgICBpZiAodHlwZW9mIHZhbCA9PT0gIm9iamVjdCIpIHsKICAgICAgICB2YWwgPSB2YWxbc3R5bGVdOwogICAgICB9CgogICAgICBpZiAodmFsKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGxpdGVyYWw6IGZhbHNlLAogICAgICAgICAgdmFsOiB2YWwKICAgICAgICB9OwogICAgICB9CgogICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIGJ1aWxkUmVnZXgodW5pdHMpIHsKICAgICAgdmFyIHJlID0gdW5pdHMubWFwKGZ1bmN0aW9uICh1KSB7CiAgICAgICAgcmV0dXJuIHUucmVnZXg7CiAgICAgIH0pLnJlZHVjZShmdW5jdGlvbiAoZiwgcikgewogICAgICAgIHJldHVybiBmICsgIigiICsgci5zb3VyY2UgKyAiKSI7CiAgICAgIH0sICIiKTsKICAgICAgcmV0dXJuIFsiXiIgKyByZSArICIkIiwgdW5pdHNdOwogICAgfQoKICAgIGZ1bmN0aW9uIG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpIHsKICAgICAgdmFyIG1hdGNoZXMgPSBpbnB1dC5tYXRjaChyZWdleCk7CgogICAgICBpZiAobWF0Y2hlcykgewogICAgICAgIHZhciBhbGwgPSB7fTsKICAgICAgICB2YXIgbWF0Y2hJbmRleCA9IDE7CgogICAgICAgIGZvciAodmFyIGkgaW4gaGFuZGxlcnMpIHsKICAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShoYW5kbGVycywgaSkpIHsKICAgICAgICAgICAgdmFyIGggPSBoYW5kbGVyc1tpXSwKICAgICAgICAgICAgICAgIGdyb3VwcyA9IGguZ3JvdXBzID8gaC5ncm91cHMgKyAxIDogMTsKCiAgICAgICAgICAgIGlmICghaC5saXRlcmFsICYmIGgudG9rZW4pIHsKICAgICAgICAgICAgICBhbGxbaC50b2tlbi52YWxbMF1dID0gaC5kZXNlcihtYXRjaGVzLnNsaWNlKG1hdGNoSW5kZXgsIG1hdGNoSW5kZXggKyBncm91cHMpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbWF0Y2hJbmRleCArPSBncm91cHM7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gW21hdGNoZXMsIGFsbF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIFttYXRjaGVzLCB7fV07CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkYXRlVGltZUZyb21NYXRjaGVzKG1hdGNoZXMpIHsKICAgICAgdmFyIHRvRmllbGQgPSBmdW5jdGlvbiB0b0ZpZWxkKHRva2VuKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiUyI6CiAgICAgICAgICAgIHJldHVybiAibWlsbGlzZWNvbmQiOwoKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICByZXR1cm4gInNlY29uZCI7CgogICAgICAgICAgY2FzZSAibSI6CiAgICAgICAgICAgIHJldHVybiAibWludXRlIjsKCiAgICAgICAgICBjYXNlICJoIjoKICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICByZXR1cm4gImhvdXIiOwoKICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICByZXR1cm4gImRheSI7CgogICAgICAgICAgY2FzZSAibyI6CiAgICAgICAgICAgIHJldHVybiAib3JkaW5hbCI7CgogICAgICAgICAgY2FzZSAiTCI6CiAgICAgICAgICBjYXNlICJNIjoKICAgICAgICAgICAgcmV0dXJuICJtb250aCI7CgogICAgICAgICAgY2FzZSAieSI6CiAgICAgICAgICAgIHJldHVybiAieWVhciI7CgogICAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgICBjYXNlICJjIjoKICAgICAgICAgICAgcmV0dXJuICJ3ZWVrZGF5IjsKCiAgICAgICAgICBjYXNlICJXIjoKICAgICAgICAgICAgcmV0dXJuICJ3ZWVrTnVtYmVyIjsKCiAgICAgICAgICBjYXNlICJrIjoKICAgICAgICAgICAgcmV0dXJuICJ3ZWVrWWVhciI7CgogICAgICAgICAgY2FzZSAicSI6CiAgICAgICAgICAgIHJldHVybiAicXVhcnRlciI7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgdmFyIHpvbmU7CgogICAgICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMuWikpIHsKICAgICAgICB6b25lID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZShtYXRjaGVzLlopOwogICAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnopKSB7CiAgICAgICAgem9uZSA9IElBTkFab25lLmNyZWF0ZShtYXRjaGVzLnopOwogICAgICB9IGVsc2UgewogICAgICAgIHpvbmUgPSBudWxsOwogICAgICB9CgogICAgICBpZiAoIWlzVW5kZWZpbmVkKG1hdGNoZXMucSkpIHsKICAgICAgICBtYXRjaGVzLk0gPSAobWF0Y2hlcy5xIC0gMSkgKiAzICsgMTsKICAgICAgfQoKICAgICAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7CiAgICAgICAgaWYgKG1hdGNoZXMuaCA8IDEyICYmIG1hdGNoZXMuYSA9PT0gMSkgewogICAgICAgICAgbWF0Y2hlcy5oICs9IDEyOwogICAgICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHsKICAgICAgICAgIG1hdGNoZXMuaCA9IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAobWF0Y2hlcy5HID09PSAwICYmIG1hdGNoZXMueSkgewogICAgICAgIG1hdGNoZXMueSA9IC1tYXRjaGVzLnk7CiAgICAgIH0KCiAgICAgIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy51KSkgewogICAgICAgIG1hdGNoZXMuUyA9IHBhcnNlTWlsbGlzKG1hdGNoZXMudSk7CiAgICAgIH0KCiAgICAgIHZhciB2YWxzID0gT2JqZWN0LmtleXMobWF0Y2hlcykucmVkdWNlKGZ1bmN0aW9uIChyLCBrKSB7CiAgICAgICAgdmFyIGYgPSB0b0ZpZWxkKGspOwoKICAgICAgICBpZiAoZikgewogICAgICAgICAgcltmXSA9IG1hdGNoZXNba107CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcjsKICAgICAgfSwge30pOwogICAgICByZXR1cm4gW3ZhbHMsIHpvbmVdOwogICAgfQoKICAgIHZhciBkdW1teURhdGVUaW1lQ2FjaGUgPSBudWxsOwoKICAgIGZ1bmN0aW9uIGdldER1bW15RGF0ZVRpbWUoKSB7CiAgICAgIGlmICghZHVtbXlEYXRlVGltZUNhY2hlKSB7CiAgICAgICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTsKICAgICAgfQoKICAgICAgcmV0dXJuIGR1bW15RGF0ZVRpbWVDYWNoZTsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXliZUV4cGFuZE1hY3JvVG9rZW4odG9rZW4sIGxvY2FsZSkgewogICAgICBpZiAodG9rZW4ubGl0ZXJhbCkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQoKICAgICAgdmFyIGZvcm1hdE9wdHMgPSBGb3JtYXR0ZXIubWFjcm9Ub2tlblRvRm9ybWF0T3B0cyh0b2tlbi52YWwpOwoKICAgICAgaWYgKCFmb3JtYXRPcHRzKSB7CiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICB9CgogICAgICB2YXIgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpOwogICAgICB2YXIgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0RGF0ZVRpbWVQYXJ0cyhnZXREdW1teURhdGVUaW1lKCkpOwogICAgICB2YXIgdG9rZW5zID0gcGFydHMubWFwKGZ1bmN0aW9uIChwKSB7CiAgICAgICAgcmV0dXJuIHRva2VuRm9yUGFydChwLCBsb2NhbGUsIGZvcm1hdE9wdHMpOwogICAgICB9KTsKCiAgICAgIGlmICh0b2tlbnMuaW5jbHVkZXModW5kZWZpbmVkKSkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQoKICAgICAgcmV0dXJuIHRva2VuczsKICAgIH0KCiAgICBmdW5jdGlvbiBleHBhbmRNYWNyb1Rva2Vucyh0b2tlbnMsIGxvY2FsZSkgewogICAgICB2YXIgX0FycmF5JHByb3RvdHlwZTsKCiAgICAgIHJldHVybiAoX0FycmF5JHByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZSkuY29uY2F0LmFwcGx5KF9BcnJheSRwcm90b3R5cGUsIHRva2Vucy5tYXAoZnVuY3Rpb24gKHQpIHsKICAgICAgICByZXR1cm4gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHQsIGxvY2FsZSk7CiAgICAgIH0pKTsKICAgIH0KICAgIC8qKgogICAgICogQHByaXZhdGUKICAgICAqLwoKCiAgICBmdW5jdGlvbiBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpIHsKICAgICAgdmFyIHRva2VucyA9IGV4cGFuZE1hY3JvVG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmb3JtYXQpLCBsb2NhbGUpLAogICAgICAgICAgdW5pdHMgPSB0b2tlbnMubWFwKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgcmV0dXJuIHVuaXRGb3JUb2tlbih0LCBsb2NhbGUpOwogICAgICB9KSwKICAgICAgICAgIGRpc3F1YWxpZnlpbmdVbml0ID0gdW5pdHMuZmluZChmdW5jdGlvbiAodCkgewogICAgICAgIHJldHVybiB0LmludmFsaWRSZWFzb247CiAgICAgIH0pOwoKICAgICAgaWYgKGRpc3F1YWxpZnlpbmdVbml0KSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlucHV0OiBpbnB1dCwKICAgICAgICAgIHRva2VuczogdG9rZW5zLAogICAgICAgICAgaW52YWxpZFJlYXNvbjogZGlzcXVhbGlmeWluZ1VuaXQuaW52YWxpZFJlYXNvbgogICAgICAgIH07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIF9idWlsZFJlZ2V4ID0gYnVpbGRSZWdleCh1bml0cyksCiAgICAgICAgICAgIHJlZ2V4U3RyaW5nID0gX2J1aWxkUmVnZXhbMF0sCiAgICAgICAgICAgIGhhbmRsZXJzID0gX2J1aWxkUmVnZXhbMV0sCiAgICAgICAgICAgIHJlZ2V4ID0gUmVnRXhwKHJlZ2V4U3RyaW5nLCAiaSIpLAogICAgICAgICAgICBfbWF0Y2ggPSBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSwKICAgICAgICAgICAgcmF3TWF0Y2hlcyA9IF9tYXRjaFswXSwKICAgICAgICAgICAgbWF0Y2hlcyA9IF9tYXRjaFsxXSwKICAgICAgICAgICAgX3JlZjYgPSBtYXRjaGVzID8gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKSA6IFtudWxsLCBudWxsXSwKICAgICAgICAgICAgcmVzdWx0ID0gX3JlZjZbMF0sCiAgICAgICAgICAgIHpvbmUgPSBfcmVmNlsxXTsKCiAgICAgICAgaWYgKGhhc093blByb3BlcnR5KG1hdGNoZXMsICJhIikgJiYgaGFzT3duUHJvcGVydHkobWF0Y2hlcywgIkgiKSkgewogICAgICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKCJDYW4ndCBpbmNsdWRlIG1lcmlkaWVtIHdoZW4gc3BlY2lmeWluZyAyNC1ob3VyIGZvcm1hdCIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlucHV0OiBpbnB1dCwKICAgICAgICAgIHRva2VuczogdG9rZW5zLAogICAgICAgICAgcmVnZXg6IHJlZ2V4LAogICAgICAgICAgcmF3TWF0Y2hlczogcmF3TWF0Y2hlcywKICAgICAgICAgIG1hdGNoZXM6IG1hdGNoZXMsCiAgICAgICAgICByZXN1bHQ6IHJlc3VsdCwKICAgICAgICAgIHpvbmU6IHpvbmUKICAgICAgICB9OwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBwYXJzZUZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSB7CiAgICAgIHZhciBfZXhwbGFpbkZyb21Ub2tlbnMgPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpLAogICAgICAgICAgcmVzdWx0ID0gX2V4cGxhaW5Gcm9tVG9rZW5zLnJlc3VsdCwKICAgICAgICAgIHpvbmUgPSBfZXhwbGFpbkZyb21Ub2tlbnMuem9uZSwKICAgICAgICAgIGludmFsaWRSZWFzb24gPSBfZXhwbGFpbkZyb21Ub2tlbnMuaW52YWxpZFJlYXNvbjsKCiAgICAgIHJldHVybiBbcmVzdWx0LCB6b25lLCBpbnZhbGlkUmVhc29uXTsKICAgIH0KCiAgICB2YXIgbm9uTGVhcExhZGRlciA9IFswLCAzMSwgNTksIDkwLCAxMjAsIDE1MSwgMTgxLCAyMTIsIDI0MywgMjczLCAzMDQsIDMzNF0sCiAgICAgICAgbGVhcExhZGRlciA9IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV07CgogICAgZnVuY3Rpb24gdW5pdE91dE9mUmFuZ2UodW5pdCwgdmFsdWUpIHsKICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkKCJ1bml0IG91dCBvZiByYW5nZSIsICJ5b3Ugc3BlY2lmaWVkICIgKyB2YWx1ZSArICIgKG9mIHR5cGUgIiArIHR5cGVvZiB2YWx1ZSArICIpIGFzIGEgIiArIHVuaXQgKyAiLCB3aGljaCBpcyBpbnZhbGlkIik7CiAgICB9CgogICAgZnVuY3Rpb24gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpIHsKICAgICAgdmFyIGpzID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKS5nZXRVVENEYXkoKTsKICAgICAgcmV0dXJuIGpzID09PSAwID8gNyA6IGpzOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpIHsKICAgICAgcmV0dXJuIGRheSArIChpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIpW21vbnRoIC0gMV07CiAgICB9CgogICAgZnVuY3Rpb24gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKSB7CiAgICAgIHZhciB0YWJsZSA9IGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlciwKICAgICAgICAgIG1vbnRoMCA9IHRhYmxlLmZpbmRJbmRleChmdW5jdGlvbiAoaSkgewogICAgICAgIHJldHVybiBpIDwgb3JkaW5hbDsKICAgICAgfSksCiAgICAgICAgICBkYXkgPSBvcmRpbmFsIC0gdGFibGVbbW9udGgwXTsKICAgICAgcmV0dXJuIHsKICAgICAgICBtb250aDogbW9udGgwICsgMSwKICAgICAgICBkYXk6IGRheQogICAgICB9OwogICAgfQogICAgLyoqCiAgICAgKiBAcHJpdmF0ZQogICAgICovCgoKICAgIGZ1bmN0aW9uIGdyZWdvcmlhblRvV2VlayhncmVnT2JqKSB7CiAgICAgIHZhciB5ZWFyID0gZ3JlZ09iai55ZWFyLAogICAgICAgICAgbW9udGggPSBncmVnT2JqLm1vbnRoLAogICAgICAgICAgZGF5ID0gZ3JlZ09iai5kYXksCiAgICAgICAgICBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSksCiAgICAgICAgICB3ZWVrZGF5ID0gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpOwogICAgICB2YXIgd2Vla051bWJlciA9IE1hdGguZmxvb3IoKG9yZGluYWwgLSB3ZWVrZGF5ICsgMTApIC8gNyksCiAgICAgICAgICB3ZWVrWWVhcjsKCiAgICAgIGlmICh3ZWVrTnVtYmVyIDwgMSkgewogICAgICAgIHdlZWtZZWFyID0geWVhciAtIDE7CiAgICAgICAgd2Vla051bWJlciA9IHdlZWtzSW5XZWVrWWVhcih3ZWVrWWVhcik7CiAgICAgIH0gZWxzZSBpZiAod2Vla051bWJlciA+IHdlZWtzSW5XZWVrWWVhcih5ZWFyKSkgewogICAgICAgIHdlZWtZZWFyID0geWVhciArIDE7CiAgICAgICAgd2Vla051bWJlciA9IDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2Vla1llYXIgPSB5ZWFyOwogICAgICB9CgogICAgICByZXR1cm4gX2V4dGVuZHMoewogICAgICAgIHdlZWtZZWFyOiB3ZWVrWWVhciwKICAgICAgICB3ZWVrTnVtYmVyOiB3ZWVrTnVtYmVyLAogICAgICAgIHdlZWtkYXk6IHdlZWtkYXkKICAgICAgfSwgdGltZU9iamVjdChncmVnT2JqKSk7CiAgICB9CiAgICBmdW5jdGlvbiB3ZWVrVG9HcmVnb3JpYW4od2Vla0RhdGEpIHsKICAgICAgdmFyIHdlZWtZZWFyID0gd2Vla0RhdGEud2Vla1llYXIsCiAgICAgICAgICB3ZWVrTnVtYmVyID0gd2Vla0RhdGEud2Vla051bWJlciwKICAgICAgICAgIHdlZWtkYXkgPSB3ZWVrRGF0YS53ZWVrZGF5LAogICAgICAgICAgd2Vla2RheU9mSmFuNCA9IGRheU9mV2Vlayh3ZWVrWWVhciwgMSwgNCksCiAgICAgICAgICB5ZWFySW5EYXlzID0gZGF5c0luWWVhcih3ZWVrWWVhcik7CiAgICAgIHZhciBvcmRpbmFsID0gd2Vla051bWJlciAqIDcgKyB3ZWVrZGF5IC0gd2Vla2RheU9mSmFuNCAtIDMsCiAgICAgICAgICB5ZWFyOwoKICAgICAgaWYgKG9yZGluYWwgPCAxKSB7CiAgICAgICAgeWVhciA9IHdlZWtZZWFyIC0gMTsKICAgICAgICBvcmRpbmFsICs9IGRheXNJblllYXIoeWVhcik7CiAgICAgIH0gZWxzZSBpZiAob3JkaW5hbCA+IHllYXJJbkRheXMpIHsKICAgICAgICB5ZWFyID0gd2Vla1llYXIgKyAxOwogICAgICAgIG9yZGluYWwgLT0gZGF5c0luWWVhcih3ZWVrWWVhcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgeWVhciA9IHdlZWtZZWFyOwogICAgICB9CgogICAgICB2YXIgX3VuY29tcHV0ZU9yZGluYWwgPSB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpLAogICAgICAgICAgbW9udGggPSBfdW5jb21wdXRlT3JkaW5hbC5tb250aCwKICAgICAgICAgIGRheSA9IF91bmNvbXB1dGVPcmRpbmFsLmRheTsKCiAgICAgIHJldHVybiBfZXh0ZW5kcyh7CiAgICAgICAgeWVhcjogeWVhciwKICAgICAgICBtb250aDogbW9udGgsCiAgICAgICAgZGF5OiBkYXkKICAgICAgfSwgdGltZU9iamVjdCh3ZWVrRGF0YSkpOwogICAgfQogICAgZnVuY3Rpb24gZ3JlZ29yaWFuVG9PcmRpbmFsKGdyZWdEYXRhKSB7CiAgICAgIHZhciB5ZWFyID0gZ3JlZ0RhdGEueWVhciwKICAgICAgICAgIG1vbnRoID0gZ3JlZ0RhdGEubW9udGgsCiAgICAgICAgICBkYXkgPSBncmVnRGF0YS5kYXk7CiAgICAgIHZhciBvcmRpbmFsID0gY29tcHV0ZU9yZGluYWwoeWVhciwgbW9udGgsIGRheSk7CiAgICAgIHJldHVybiBfZXh0ZW5kcyh7CiAgICAgICAgeWVhcjogeWVhciwKICAgICAgICBvcmRpbmFsOiBvcmRpbmFsCiAgICAgIH0sIHRpbWVPYmplY3QoZ3JlZ0RhdGEpKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9yZGluYWxUb0dyZWdvcmlhbihvcmRpbmFsRGF0YSkgewogICAgICB2YXIgeWVhciA9IG9yZGluYWxEYXRhLnllYXIsCiAgICAgICAgICBvcmRpbmFsID0gb3JkaW5hbERhdGEub3JkaW5hbDsKCiAgICAgIHZhciBfdW5jb21wdXRlT3JkaW5hbDIgPSB1bmNvbXB1dGVPcmRpbmFsKHllYXIsIG9yZGluYWwpLAogICAgICAgICAgbW9udGggPSBfdW5jb21wdXRlT3JkaW5hbDIubW9udGgsCiAgICAgICAgICBkYXkgPSBfdW5jb21wdXRlT3JkaW5hbDIuZGF5OwoKICAgICAgcmV0dXJuIF9leHRlbmRzKHsKICAgICAgICB5ZWFyOiB5ZWFyLAogICAgICAgIG1vbnRoOiBtb250aCwKICAgICAgICBkYXk6IGRheQogICAgICB9LCB0aW1lT2JqZWN0KG9yZGluYWxEYXRhKSk7CiAgICB9CiAgICBmdW5jdGlvbiBoYXNJbnZhbGlkV2Vla0RhdGEob2JqKSB7CiAgICAgIHZhciB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLndlZWtZZWFyKSwKICAgICAgICAgIHZhbGlkV2VlayA9IGludGVnZXJCZXR3ZWVuKG9iai53ZWVrTnVtYmVyLCAxLCB3ZWVrc0luV2Vla1llYXIob2JqLndlZWtZZWFyKSksCiAgICAgICAgICB2YWxpZFdlZWtkYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmoud2Vla2RheSwgMSwgNyk7CgogICAgICBpZiAoIXZhbGlkWWVhcikgewogICAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgid2Vla1llYXIiLCBvYmoud2Vla1llYXIpOwogICAgICB9IGVsc2UgaWYgKCF2YWxpZFdlZWspIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIndlZWsiLCBvYmoud2Vlayk7CiAgICAgIH0gZWxzZSBpZiAoIXZhbGlkV2Vla2RheSkgewogICAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgid2Vla2RheSIsIG9iai53ZWVrZGF5KTsKICAgICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhc0ludmFsaWRPcmRpbmFsRGF0YShvYmopIHsKICAgICAgdmFyIHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksCiAgICAgICAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpOwoKICAgICAgaWYgKCF2YWxpZFllYXIpIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoInllYXIiLCBvYmoueWVhcik7CiAgICAgIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkgewogICAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgib3JkaW5hbCIsIG9iai5vcmRpbmFsKTsKICAgICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG9iaikgewogICAgICB2YXIgdmFsaWRZZWFyID0gaXNJbnRlZ2VyKG9iai55ZWFyKSwKICAgICAgICAgIHZhbGlkTW9udGggPSBpbnRlZ2VyQmV0d2VlbihvYmoubW9udGgsIDEsIDEyKSwKICAgICAgICAgIHZhbGlkRGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLmRheSwgMSwgZGF5c0luTW9udGgob2JqLnllYXIsIG9iai5tb250aCkpOwoKICAgICAgaWYgKCF2YWxpZFllYXIpIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoInllYXIiLCBvYmoueWVhcik7CiAgICAgIH0gZWxzZSBpZiAoIXZhbGlkTW9udGgpIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm1vbnRoIiwgb2JqLm1vbnRoKTsKICAgICAgfSBlbHNlIGlmICghdmFsaWREYXkpIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoImRheSIsIG9iai5kYXkpOwogICAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gaGFzSW52YWxpZFRpbWVEYXRhKG9iaikgewogICAgICB2YXIgaG91ciA9IG9iai5ob3VyLAogICAgICAgICAgbWludXRlID0gb2JqLm1pbnV0ZSwKICAgICAgICAgIHNlY29uZCA9IG9iai5zZWNvbmQsCiAgICAgICAgICBtaWxsaXNlY29uZCA9IG9iai5taWxsaXNlY29uZDsKICAgICAgdmFyIHZhbGlkSG91ciA9IGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fCBob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwLAogICAgICAgICAgdmFsaWRNaW51dGUgPSBpbnRlZ2VyQmV0d2VlbihtaW51dGUsIDAsIDU5KSwKICAgICAgICAgIHZhbGlkU2Vjb25kID0gaW50ZWdlckJldHdlZW4oc2Vjb25kLCAwLCA1OSksCiAgICAgICAgICB2YWxpZE1pbGxpc2Vjb25kID0gaW50ZWdlckJldHdlZW4obWlsbGlzZWNvbmQsIDAsIDk5OSk7CgogICAgICBpZiAoIXZhbGlkSG91cikgewogICAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgiaG91ciIsIGhvdXIpOwogICAgICB9IGVsc2UgaWYgKCF2YWxpZE1pbnV0ZSkgewogICAgICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZSgibWludXRlIiwgbWludXRlKTsKICAgICAgfSBlbHNlIGlmICghdmFsaWRTZWNvbmQpIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoInNlY29uZCIsIHNlY29uZCk7CiAgICAgIH0gZWxzZSBpZiAoIXZhbGlkTWlsbGlzZWNvbmQpIHsKICAgICAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoIm1pbGxpc2Vjb25kIiwgbWlsbGlzZWNvbmQpOwogICAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHZhciBJTlZBTElEID0gIkludmFsaWQgRGF0ZVRpbWUiOwogICAgdmFyIE1BWF9EQVRFID0gOC42NGUxNTsKCiAgICBmdW5jdGlvbiB1bnN1cHBvcnRlZFpvbmUoem9uZSkgewogICAgICByZXR1cm4gbmV3IEludmFsaWQoInVuc3VwcG9ydGVkIHpvbmUiLCAidGhlIHpvbmUgXCIiICsgem9uZS5uYW1lICsgIlwiIGlzIG5vdCBzdXBwb3J0ZWQiKTsKICAgIH0gLy8gd2UgY2FjaGUgd2VlayBkYXRhIG9uIHRoZSBEVCBvYmplY3QgYW5kIHRoaXMgaW50ZXJtZWRpYXRlcyB0aGUgY2FjaGUKCgogICAgZnVuY3Rpb24gcG9zc2libHlDYWNoZWRXZWVrRGF0YShkdCkgewogICAgICBpZiAoZHQud2Vla0RhdGEgPT09IG51bGwpIHsKICAgICAgICBkdC53ZWVrRGF0YSA9IGdyZWdvcmlhblRvV2VlayhkdC5jKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGR0LndlZWtEYXRhOwogICAgfSAvLyBjbG9uZSByZWFsbHkgbWVhbnMsICJtYWtlIGEgbmV3IG9iamVjdCB3aXRoIHRoZXNlIG1vZGlmaWNhdGlvbnMiLiBhbGwgInNldHRlcnMiIHJlYWxseSB1c2UgdGhpcwogICAgLy8gdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB3aGlsZSBvbmx5IGNoYW5naW5nIHNvbWUgb2YgdGhlIHByb3BlcnRpZXMKCgogICAgZnVuY3Rpb24gY2xvbmUoaW5zdCwgYWx0cykgewogICAgICB2YXIgY3VycmVudCA9IHsKICAgICAgICB0czogaW5zdC50cywKICAgICAgICB6b25lOiBpbnN0LnpvbmUsCiAgICAgICAgYzogaW5zdC5jLAogICAgICAgIG86IGluc3QubywKICAgICAgICBsb2M6IGluc3QubG9jLAogICAgICAgIGludmFsaWQ6IGluc3QuaW52YWxpZAogICAgICB9OwogICAgICByZXR1cm4gbmV3IERhdGVUaW1lKF9leHRlbmRzKHt9LCBjdXJyZW50LCBhbHRzLCB7CiAgICAgICAgb2xkOiBjdXJyZW50CiAgICAgIH0pKTsKICAgIH0gLy8gZmluZCB0aGUgcmlnaHQgb2Zmc2V0IGEgZ2l2ZW4gbG9jYWwgdGltZS4gVGhlIG8gaW5wdXQgaXMgb3VyIGd1ZXNzLCB3aGljaCBkZXRlcm1pbmVzIHdoaWNoCiAgICAvLyBvZmZzZXQgd2UnbGwgcGljayBpbiBhbWJpZ3VvdXMgY2FzZXMgKGUuZy4gdGhlcmUgYXJlIHR3byAzIEFNcyBiL2MgRmFsbGJhY2sgRFNUKQoKCiAgICBmdW5jdGlvbiBmaXhPZmZzZXQobG9jYWxUUywgbywgdHopIHsKICAgICAgLy8gT3VyIFVUQyB0aW1lIGlzIGp1c3QgYSBndWVzcyBiZWNhdXNlIG91ciBvZmZzZXQgaXMganVzdCBhIGd1ZXNzCiAgICAgIHZhciB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwOyAvLyBUZXN0IHdoZXRoZXIgdGhlIHpvbmUgbWF0Y2hlcyB0aGUgb2Zmc2V0IGZvciB0aGlzIHRzCgogICAgICB2YXIgbzIgPSB0ei5vZmZzZXQodXRjR3Vlc3MpOyAvLyBJZiBzbywgb2Zmc2V0IGRpZG4ndCBjaGFuZ2UgYW5kIHdlJ3JlIGRvbmUKCiAgICAgIGlmIChvID09PSBvMikgewogICAgICAgIHJldHVybiBbdXRjR3Vlc3MsIG9dOwogICAgICB9IC8vIElmIG5vdCwgY2hhbmdlIHRoZSB0cyBieSB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgb2Zmc2V0CgoKICAgICAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7IC8vIElmIHRoYXQgZ2l2ZXMgdXMgdGhlIGxvY2FsIHRpbWUgd2Ugd2FudCwgd2UncmUgZG9uZQoKICAgICAgdmFyIG8zID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTsKCiAgICAgIGlmIChvMiA9PT0gbzMpIHsKICAgICAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvMl07CiAgICAgIH0gLy8gSWYgaXQncyBkaWZmZXJlbnQsIHdlJ3JlIGluIGEgaG9sZSB0aW1lLiBUaGUgb2Zmc2V0IGhhcyBjaGFuZ2VkLCBidXQgdGhlIHdlIGRvbid0IGFkanVzdCB0aGUgdGltZQoKCiAgICAgIHJldHVybiBbbG9jYWxUUyAtIE1hdGgubWluKG8yLCBvMykgKiA2MCAqIDEwMDAsIE1hdGgubWF4KG8yLCBvMyldOwogICAgfSAvLyBjb252ZXJ0IGFuIGVwb2NoIHRpbWVzdGFtcCBpbnRvIGEgY2FsZW5kYXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9mZnNldAoKCiAgICBmdW5jdGlvbiB0c1RvT2JqKHRzLCBvZmZzZXQpIHsKICAgICAgdHMgKz0gb2Zmc2V0ICogNjAgKiAxMDAwOwogICAgICB2YXIgZCA9IG5ldyBEYXRlKHRzKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB5ZWFyOiBkLmdldFVUQ0Z1bGxZZWFyKCksCiAgICAgICAgbW9udGg6IGQuZ2V0VVRDTW9udGgoKSArIDEsCiAgICAgICAgZGF5OiBkLmdldFVUQ0RhdGUoKSwKICAgICAgICBob3VyOiBkLmdldFVUQ0hvdXJzKCksCiAgICAgICAgbWludXRlOiBkLmdldFVUQ01pbnV0ZXMoKSwKICAgICAgICBzZWNvbmQ6IGQuZ2V0VVRDU2Vjb25kcygpLAogICAgICAgIG1pbGxpc2Vjb25kOiBkLmdldFVUQ01pbGxpc2Vjb25kcygpCiAgICAgIH07CiAgICB9IC8vIGNvbnZlcnQgYSBjYWxlbmRhciBvYmplY3QgdG8gYSBlcG9jaCB0aW1lc3RhbXAKCgogICAgZnVuY3Rpb24gb2JqVG9UUyhvYmosIG9mZnNldCwgem9uZSkgewogICAgICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpOwogICAgfSAvLyBjcmVhdGUgYSBuZXcgRFQgaW5zdGFuY2UgYnkgYWRkaW5nIGEgZHVyYXRpb24sIGFkanVzdGluZyBmb3IgRFNUcwoKCiAgICBmdW5jdGlvbiBhZGp1c3RUaW1lKGluc3QsIGR1cikgewogICAgICB2YXIgb1ByZSA9IGluc3QubywKICAgICAgICAgIHllYXIgPSBpbnN0LmMueWVhciArIE1hdGgudHJ1bmMoZHVyLnllYXJzKSwKICAgICAgICAgIG1vbnRoID0gaW5zdC5jLm1vbnRoICsgTWF0aC50cnVuYyhkdXIubW9udGhzKSArIE1hdGgudHJ1bmMoZHVyLnF1YXJ0ZXJzKSAqIDMsCiAgICAgICAgICBjID0gX2V4dGVuZHMoe30sIGluc3QuYywgewogICAgICAgIHllYXI6IHllYXIsCiAgICAgICAgbW9udGg6IG1vbnRoLAogICAgICAgIGRheTogTWF0aC5taW4oaW5zdC5jLmRheSwgZGF5c0luTW9udGgoeWVhciwgbW9udGgpKSArIE1hdGgudHJ1bmMoZHVyLmRheXMpICsgTWF0aC50cnVuYyhkdXIud2Vla3MpICogNwogICAgICB9KSwKICAgICAgICAgIG1pbGxpc1RvQWRkID0gRHVyYXRpb24uZnJvbU9iamVjdCh7CiAgICAgICAgeWVhcnM6IGR1ci55ZWFycyAtIE1hdGgudHJ1bmMoZHVyLnllYXJzKSwKICAgICAgICBxdWFydGVyczogZHVyLnF1YXJ0ZXJzIC0gTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpLAogICAgICAgIG1vbnRoczogZHVyLm1vbnRocyAtIE1hdGgudHJ1bmMoZHVyLm1vbnRocyksCiAgICAgICAgd2Vla3M6IGR1ci53ZWVrcyAtIE1hdGgudHJ1bmMoZHVyLndlZWtzKSwKICAgICAgICBkYXlzOiBkdXIuZGF5cyAtIE1hdGgudHJ1bmMoZHVyLmRheXMpLAogICAgICAgIGhvdXJzOiBkdXIuaG91cnMsCiAgICAgICAgbWludXRlczogZHVyLm1pbnV0ZXMsCiAgICAgICAgc2Vjb25kczogZHVyLnNlY29uZHMsCiAgICAgICAgbWlsbGlzZWNvbmRzOiBkdXIubWlsbGlzZWNvbmRzCiAgICAgIH0pLmFzKCJtaWxsaXNlY29uZHMiKSwKICAgICAgICAgIGxvY2FsVFMgPSBvYmpUb0xvY2FsVFMoYyk7CgogICAgICB2YXIgX2ZpeE9mZnNldCA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpLAogICAgICAgICAgdHMgPSBfZml4T2Zmc2V0WzBdLAogICAgICAgICAgbyA9IF9maXhPZmZzZXRbMV07CgogICAgICBpZiAobWlsbGlzVG9BZGQgIT09IDApIHsKICAgICAgICB0cyArPSBtaWxsaXNUb0FkZDsgLy8gdGhhdCBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIG9mZnNldCBieSBnb2luZyBvdmVyIGEgRFNULCBidXQgd2Ugd2FudCB0byBrZWVwIHRoZSB0cyB0aGUgc2FtZQoKICAgICAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7CiAgICAgIH0KCiAgICAgIHJldHVybiB7CiAgICAgICAgdHM6IHRzLAogICAgICAgIG86IG8KICAgICAgfTsKICAgIH0gLy8gaGVscGVyIHVzZWZ1bCBpbiB0dXJuaW5nIHRoZSByZXN1bHRzIG9mIHBhcnNpbmcgaW50byByZWFsIGRhdGVzCiAgICAvLyBieSBoYW5kbGluZyB0aGUgem9uZSBvcHRpb25zCgoKICAgIGZ1bmN0aW9uIHBhcnNlRGF0YVRvRGF0ZVRpbWUocGFyc2VkLCBwYXJzZWRab25lLCBvcHRzLCBmb3JtYXQsIHRleHQpIHsKICAgICAgdmFyIHNldFpvbmUgPSBvcHRzLnNldFpvbmUsCiAgICAgICAgICB6b25lID0gb3B0cy56b25lOwoKICAgICAgaWYgKHBhcnNlZCAmJiBPYmplY3Qua2V5cyhwYXJzZWQpLmxlbmd0aCAhPT0gMCkgewogICAgICAgIHZhciBpbnRlcnByZXRhdGlvblpvbmUgPSBwYXJzZWRab25lIHx8IHpvbmUsCiAgICAgICAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwgX2V4dGVuZHMoe30sIG9wdHMsIHsKICAgICAgICAgIHpvbmU6IGludGVycHJldGF0aW9uWm9uZQogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gc2V0Wm9uZSA/IGluc3QgOiBpbnN0LnNldFpvbmUoem9uZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQobmV3IEludmFsaWQoInVucGFyc2FibGUiLCAidGhlIGlucHV0IFwiIiArIHRleHQgKyAiXCIgY2FuJ3QgYmUgcGFyc2VkIGFzICIgKyBmb3JtYXQpKTsKICAgICAgfQogICAgfSAvLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXIKICAgIC8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlscwoKCiAgICBmdW5jdGlvbiB0b1RlY2hGb3JtYXQoZHQsIGZvcm1hdCwgYWxsb3daKSB7CiAgICAgIGlmIChhbGxvd1ogPT09IHZvaWQgMCkgewogICAgICAgIGFsbG93WiA9IHRydWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBkdC5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZShMb2NhbGUuY3JlYXRlKCJlbi1VUyIpLCB7CiAgICAgICAgYWxsb3daOiBhbGxvd1osCiAgICAgICAgZm9yY2VTaW1wbGU6IHRydWUKICAgICAgfSkuZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKGR0LCBmb3JtYXQpIDogbnVsbDsKICAgIH0gLy8gdGVjaG5pY2FsIHRpbWUgZm9ybWF0cyAoZS5nLiB0aGUgdGltZSBwYXJ0IG9mIElTTyA4NjAxKSwgdGFrZSBzb21lIG9wdGlvbnMKICAgIC8vIGFuZCB0aGlzIGNvbW1vbml6ZXMgdGhlaXIgaGFuZGxpbmcKCgogICAgZnVuY3Rpb24gdG9UZWNoVGltZUZvcm1hdChkdCwgX3JlZikgewogICAgICB2YXIgX3JlZiRzdXBwcmVzc1NlY29uZHMgPSBfcmVmLnN1cHByZXNzU2Vjb25kcywKICAgICAgICAgIHN1cHByZXNzU2Vjb25kcyA9IF9yZWYkc3VwcHJlc3NTZWNvbmRzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3VwcHJlc3NTZWNvbmRzLAogICAgICAgICAgX3JlZiRzdXBwcmVzc01pbGxpc2VjID0gX3JlZi5zdXBwcmVzc01pbGxpc2Vjb25kcywKICAgICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gX3JlZiRzdXBwcmVzc01pbGxpc2VjID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkc3VwcHJlc3NNaWxsaXNlYywKICAgICAgICAgIGluY2x1ZGVPZmZzZXQgPSBfcmVmLmluY2x1ZGVPZmZzZXQsCiAgICAgICAgICBfcmVmJGluY2x1ZGVQcmVmaXggPSBfcmVmLmluY2x1ZGVQcmVmaXgsCiAgICAgICAgICBpbmNsdWRlUHJlZml4ID0gX3JlZiRpbmNsdWRlUHJlZml4ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaW5jbHVkZVByZWZpeCwKICAgICAgICAgIF9yZWYkaW5jbHVkZVpvbmUgPSBfcmVmLmluY2x1ZGVab25lLAogICAgICAgICAgaW5jbHVkZVpvbmUgPSBfcmVmJGluY2x1ZGVab25lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkaW5jbHVkZVpvbmUsCiAgICAgICAgICBfcmVmJHNwYWNlWm9uZSA9IF9yZWYuc3BhY2Vab25lLAogICAgICAgICAgc3BhY2Vab25lID0gX3JlZiRzcGFjZVpvbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRzcGFjZVpvbmUsCiAgICAgICAgICBfcmVmJGZvcm1hdCA9IF9yZWYuZm9ybWF0LAogICAgICAgICAgZm9ybWF0ID0gX3JlZiRmb3JtYXQgPT09IHZvaWQgMCA/ICJleHRlbmRlZCIgOiBfcmVmJGZvcm1hdDsKICAgICAgdmFyIGZtdCA9IGZvcm1hdCA9PT0gImJhc2ljIiA/ICJISG1tIiA6ICJISDptbSI7CgogICAgICBpZiAoIXN1cHByZXNzU2Vjb25kcyB8fCBkdC5zZWNvbmQgIT09IDAgfHwgZHQubWlsbGlzZWNvbmQgIT09IDApIHsKICAgICAgICBmbXQgKz0gZm9ybWF0ID09PSAiYmFzaWMiID8gInNzIiA6ICI6c3MiOwoKICAgICAgICBpZiAoIXN1cHByZXNzTWlsbGlzZWNvbmRzIHx8IGR0Lm1pbGxpc2Vjb25kICE9PSAwKSB7CiAgICAgICAgICBmbXQgKz0gIi5TU1MiOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKChpbmNsdWRlWm9uZSB8fCBpbmNsdWRlT2Zmc2V0KSAmJiBzcGFjZVpvbmUpIHsKICAgICAgICBmbXQgKz0gIiAiOwogICAgICB9CgogICAgICBpZiAoaW5jbHVkZVpvbmUpIHsKICAgICAgICBmbXQgKz0gInoiOwogICAgICB9IGVsc2UgaWYgKGluY2x1ZGVPZmZzZXQpIHsKICAgICAgICBmbXQgKz0gZm9ybWF0ID09PSAiYmFzaWMiID8gIlpaWiIgOiAiWloiOwogICAgICB9CgogICAgICB2YXIgc3RyID0gdG9UZWNoRm9ybWF0KGR0LCBmbXQpOwoKICAgICAgaWYgKGluY2x1ZGVQcmVmaXgpIHsKICAgICAgICBzdHIgPSAiVCIgKyBzdHI7CiAgICAgIH0KCiAgICAgIHJldHVybiBzdHI7CiAgICB9IC8vIGRlZmF1bHRzIGZvciB1bnNwZWNpZmllZCB1bml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycwoKCiAgICB2YXIgZGVmYXVsdFVuaXRWYWx1ZXMgPSB7CiAgICAgIG1vbnRoOiAxLAogICAgICBkYXk6IDEsCiAgICAgIGhvdXI6IDAsCiAgICAgIG1pbnV0ZTogMCwKICAgICAgc2Vjb25kOiAwLAogICAgICBtaWxsaXNlY29uZDogMAogICAgfSwKICAgICAgICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7CiAgICAgIHdlZWtOdW1iZXI6IDEsCiAgICAgIHdlZWtkYXk6IDEsCiAgICAgIGhvdXI6IDAsCiAgICAgIG1pbnV0ZTogMCwKICAgICAgc2Vjb25kOiAwLAogICAgICBtaWxsaXNlY29uZDogMAogICAgfSwKICAgICAgICBkZWZhdWx0T3JkaW5hbFVuaXRWYWx1ZXMgPSB7CiAgICAgIG9yZGluYWw6IDEsCiAgICAgIGhvdXI6IDAsCiAgICAgIG1pbnV0ZTogMCwKICAgICAgc2Vjb25kOiAwLAogICAgICBtaWxsaXNlY29uZDogMAogICAgfTsgLy8gVW5pdHMgaW4gdGhlIHN1cHBvcnRlZCBjYWxlbmRhcnMsIHNvcnRlZCBieSBiaWduZXNzCgogICAgdmFyIG9yZGVyZWRVbml0cyA9IFsieWVhciIsICJtb250aCIsICJkYXkiLCAiaG91ciIsICJtaW51dGUiLCAic2Vjb25kIiwgIm1pbGxpc2Vjb25kIl0sCiAgICAgICAgb3JkZXJlZFdlZWtVbml0cyA9IFsid2Vla1llYXIiLCAid2Vla051bWJlciIsICJ3ZWVrZGF5IiwgImhvdXIiLCAibWludXRlIiwgInNlY29uZCIsICJtaWxsaXNlY29uZCJdLAogICAgICAgIG9yZGVyZWRPcmRpbmFsVW5pdHMgPSBbInllYXIiLCAib3JkaW5hbCIsICJob3VyIiwgIm1pbnV0ZSIsICJzZWNvbmQiLCAibWlsbGlzZWNvbmQiXTsgLy8gc3RhbmRhcmRpemUgY2FzZSBhbmQgcGx1cmFsaXR5IGluIHVuaXRzCgogICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdCh1bml0KSB7CiAgICAgIHZhciBub3JtYWxpemVkID0gewogICAgICAgIHllYXI6ICJ5ZWFyIiwKICAgICAgICB5ZWFyczogInllYXIiLAogICAgICAgIG1vbnRoOiAibW9udGgiLAogICAgICAgIG1vbnRoczogIm1vbnRoIiwKICAgICAgICBkYXk6ICJkYXkiLAogICAgICAgIGRheXM6ICJkYXkiLAogICAgICAgIGhvdXI6ICJob3VyIiwKICAgICAgICBob3VyczogImhvdXIiLAogICAgICAgIG1pbnV0ZTogIm1pbnV0ZSIsCiAgICAgICAgbWludXRlczogIm1pbnV0ZSIsCiAgICAgICAgcXVhcnRlcjogInF1YXJ0ZXIiLAogICAgICAgIHF1YXJ0ZXJzOiAicXVhcnRlciIsCiAgICAgICAgc2Vjb25kOiAic2Vjb25kIiwKICAgICAgICBzZWNvbmRzOiAic2Vjb25kIiwKICAgICAgICBtaWxsaXNlY29uZDogIm1pbGxpc2Vjb25kIiwKICAgICAgICBtaWxsaXNlY29uZHM6ICJtaWxsaXNlY29uZCIsCiAgICAgICAgd2Vla2RheTogIndlZWtkYXkiLAogICAgICAgIHdlZWtkYXlzOiAid2Vla2RheSIsCiAgICAgICAgd2Vla251bWJlcjogIndlZWtOdW1iZXIiLAogICAgICAgIHdlZWtzbnVtYmVyOiAid2Vla051bWJlciIsCiAgICAgICAgd2Vla251bWJlcnM6ICJ3ZWVrTnVtYmVyIiwKICAgICAgICB3ZWVreWVhcjogIndlZWtZZWFyIiwKICAgICAgICB3ZWVreWVhcnM6ICJ3ZWVrWWVhciIsCiAgICAgICAgb3JkaW5hbDogIm9yZGluYWwiCiAgICAgIH1bdW5pdC50b0xvd2VyQ2FzZSgpXTsKICAgICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTsKICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7CiAgICB9IC8vIHRoaXMgaXMgYSBkdW1iZWQgZG93biB2ZXJzaW9uIG9mIGZyb21PYmplY3QoKSB0aGF0IHJ1bnMgYWJvdXQgNjAlIGZhc3RlcgogICAgLy8gYnV0IGRvZXNuJ3QgZG8gYW55IHZhbGlkYXRpb24sIG1ha2VzIGEgYnVuY2ggb2YgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCB1bml0cwogICAgLy8gYXJlIHByZXNlbnQsIGFuZCBzbyBvbi4KICAgIC8vIHRoaXMgaXMgYSBkdW1iZWQgZG93biB2ZXJzaW9uIG9mIGZyb21PYmplY3QoKSB0aGF0IHJ1bnMgYWJvdXQgNjAlIGZhc3RlcgogICAgLy8gYnV0IGRvZXNuJ3QgZG8gYW55IHZhbGlkYXRpb24sIG1ha2VzIGEgYnVuY2ggb2YgYXNzdW1wdGlvbnMgYWJvdXQgd2hhdCB1bml0cwogICAgLy8gYXJlIHByZXNlbnQsIGFuZCBzbyBvbi4KCgogICAgZnVuY3Rpb24gcXVpY2tEVChvYmosIG9wdHMpIHsKICAgICAgdmFyIHpvbmUgPSBub3JtYWxpemVab25lKG9wdHMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLAogICAgICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyksCiAgICAgICAgICB0c05vdyA9IFNldHRpbmdzLm5vdygpOwogICAgICB2YXIgdHMsIG87IC8vIGFzc3VtZSB3ZSBoYXZlIHRoZSBoaWdoZXItb3JkZXIgdW5pdHMKCiAgICAgIGlmICghaXNVbmRlZmluZWQob2JqLnllYXIpKSB7CiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXJMb29zZShvcmRlcmVkVW5pdHMpLCBfc3RlcDsgIShfc3RlcCA9IF9pdGVyYXRvcigpKS5kb25lOykgewogICAgICAgICAgdmFyIHUgPSBfc3RlcC52YWx1ZTsKCiAgICAgICAgICBpZiAoaXNVbmRlZmluZWQob2JqW3VdKSkgewogICAgICAgICAgICBvYmpbdV0gPSBkZWZhdWx0VW5pdFZhbHVlc1t1XTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBpbnZhbGlkID0gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB8fCBoYXNJbnZhbGlkVGltZURhdGEob2JqKTsKCiAgICAgICAgaWYgKGludmFsaWQpIHsKICAgICAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9mZnNldFByb3ZpcyA9IHpvbmUub2Zmc2V0KHRzTm93KTsKCiAgICAgICAgdmFyIF9vYmpUb1RTID0gb2JqVG9UUyhvYmosIG9mZnNldFByb3Zpcywgem9uZSk7CgogICAgICAgIHRzID0gX29ialRvVFNbMF07CiAgICAgICAgbyA9IF9vYmpUb1RTWzFdOwogICAgICB9IGVsc2UgewogICAgICAgIHRzID0gdHNOb3c7CiAgICAgIH0KCiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoewogICAgICAgIHRzOiB0cywKICAgICAgICB6b25lOiB6b25lLAogICAgICAgIGxvYzogbG9jLAogICAgICAgIG86IG8KICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gZGlmZlJlbGF0aXZlKHN0YXJ0LCBlbmQsIG9wdHMpIHsKICAgICAgdmFyIHJvdW5kID0gaXNVbmRlZmluZWQob3B0cy5yb3VuZCkgPyB0cnVlIDogb3B0cy5yb3VuZCwKICAgICAgICAgIGZvcm1hdCA9IGZ1bmN0aW9uIGZvcm1hdChjLCB1bml0KSB7CiAgICAgICAgYyA9IHJvdW5kVG8oYywgcm91bmQgfHwgb3B0cy5jYWxlbmRhcnkgPyAwIDogMiwgdHJ1ZSk7CiAgICAgICAgdmFyIGZvcm1hdHRlciA9IGVuZC5sb2MuY2xvbmUob3B0cykucmVsRm9ybWF0dGVyKG9wdHMpOwogICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KGMsIHVuaXQpOwogICAgICB9LAogICAgICAgICAgZGlmZmVyID0gZnVuY3Rpb24gZGlmZmVyKHVuaXQpIHsKICAgICAgICBpZiAob3B0cy5jYWxlbmRhcnkpIHsKICAgICAgICAgIGlmICghZW5kLmhhc1NhbWUoc3RhcnQsIHVuaXQpKSB7CiAgICAgICAgICAgIHJldHVybiBlbmQuc3RhcnRPZih1bml0KS5kaWZmKHN0YXJ0LnN0YXJ0T2YodW5pdCksIHVuaXQpLmdldCh1bml0KTsKICAgICAgICAgIH0gZWxzZSByZXR1cm4gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCk7CiAgICAgICAgfQogICAgICB9OwoKICAgICAgaWYgKG9wdHMudW5pdCkgewogICAgICAgIHJldHVybiBmb3JtYXQoZGlmZmVyKG9wdHMudW5pdCksIG9wdHMudW5pdCk7CiAgICAgIH0KCiAgICAgIGZvciAodmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlckxvb3NlKG9wdHMudW5pdHMpLCBfc3RlcDI7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMigpKS5kb25lOykgewogICAgICAgIHZhciB1bml0ID0gX3N0ZXAyLnZhbHVlOwogICAgICAgIHZhciBjb3VudCA9IGRpZmZlcih1bml0KTsKCiAgICAgICAgaWYgKE1hdGguYWJzKGNvdW50KSA+PSAxKSB7CiAgICAgICAgICByZXR1cm4gZm9ybWF0KGNvdW50LCB1bml0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBmb3JtYXQoc3RhcnQgPiBlbmQgPyAtMCA6IDAsIG9wdHMudW5pdHNbb3B0cy51bml0cy5sZW5ndGggLSAxXSk7CiAgICB9CgogICAgZnVuY3Rpb24gbGFzdE9wdHMoYXJnTGlzdCkgewogICAgICB2YXIgb3B0cyA9IHt9LAogICAgICAgICAgYXJnczsKCiAgICAgIGlmIChhcmdMaXN0Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXSA9PT0gIm9iamVjdCIpIHsKICAgICAgICBvcHRzID0gYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdOwogICAgICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpLnNsaWNlKDAsIGFyZ0xpc3QubGVuZ3RoIC0gMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXJncyA9IEFycmF5LmZyb20oYXJnTGlzdCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBbb3B0cywgYXJnc107CiAgICB9CiAgICAvKioKICAgICAqIEEgRGF0ZVRpbWUgaXMgYW4gaW1tdXRhYmxlIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhIHNwZWNpZmljIGRhdGUgYW5kIHRpbWUgYW5kIGFjY29tcGFueWluZyBtZXRob2RzLiBJdCBjb250YWlucyBjbGFzcyBhbmQgaW5zdGFuY2UgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIHBhcnNpbmcsIGludGVycm9nYXRpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS4KICAgICAqCiAgICAgKiBBIERhdGVUaW1lIGNvbXByaXNlcyBvZjoKICAgICAqICogQSB0aW1lc3RhbXAuIEVhY2ggRGF0ZVRpbWUgaW5zdGFuY2UgcmVmZXJzIHRvIGEgc3BlY2lmaWMgbWlsbGlzZWNvbmQgb2YgdGhlIFVuaXggZXBvY2guCiAgICAgKiAqIEEgdGltZSB6b25lLiBFYWNoIGluc3RhbmNlIGlzIGNvbnNpZGVyZWQgaW4gdGhlIGNvbnRleHQgb2YgYSBzcGVjaWZpYyB6b25lIChieSBkZWZhdWx0IHRoZSBsb2NhbCBzeXN0ZW0ncyB6b25lKS4KICAgICAqICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHRoYXQgZWZmZWN0IGhvdyBvdXRwdXQgc3RyaW5ncyBhcmUgZm9ybWF0dGVkLCBzdWNoIGFzIGBsb2NhbGVgLCBgbnVtYmVyaW5nU3lzdGVtYCwgYW5kIGBvdXRwdXRDYWxlbmRhcmAuCiAgICAgKgogICAgICogSGVyZSBpcyBhIGJyaWVmIG92ZXJ2aWV3IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlczoKICAgICAqCiAgICAgKiAqICoqQ3JlYXRpb24qKjogVG8gY3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBpdHMgY29tcG9uZW50cywgdXNlIG9uZSBvZiBpdHMgZmFjdG9yeSBjbGFzcyBtZXRob2RzOiB7QGxpbmsgRGF0ZVRpbWUubG9jYWx9LCB7QGxpbmsgRGF0ZVRpbWUudXRjfSwgYW5kIChtb3N0IGZsZXhpYmx5KSB7QGxpbmsgRGF0ZVRpbWUuZnJvbU9iamVjdH0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIHN0YW5kYXJkIHN0cmluZyBmb3JtYXQsIHVzZSB7QGxpbmsgRGF0ZVRpbWUuZnJvbUlTT30sIHtAbGluayBEYXRlVGltZS5mcm9tSFRUUH0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUuZnJvbVJGQzI4MjJ9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBjdXN0b20gc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZS5mcm9tRm9ybWF0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgbmF0aXZlIEpTIGRhdGUsIHVzZSB7QGxpbmsgRGF0ZVRpbWUuZnJvbUpTRGF0ZX0uCiAgICAgKiAqICoqR3JlZ29yaWFuIGNhbGVuZGFyIGFuZCB0aW1lKio6IFRvIGV4YW1pbmUgdGhlIEdyZWdvcmlhbiBwcm9wZXJ0aWVzIG9mIGEgRGF0ZVRpbWUgaW5kaXZpZHVhbGx5IChpLmUgYXMgb3Bwb3NlZCB0byBjb2xsZWN0aXZlbHkgdGhyb3VnaCB7QGxpbmsgRGF0ZVRpbWUjdG9PYmplY3R9KSwgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjeWVhcn0sIHtAbGluayBEYXRlVGltZSNtb250aH0sCiAgICAgKiB7QGxpbmsgRGF0ZVRpbWUjZGF5fSwge0BsaW5rIERhdGVUaW1lI2hvdXJ9LCB7QGxpbmsgRGF0ZVRpbWUjbWludXRlfSwge0BsaW5rIERhdGVUaW1lI3NlY29uZH0sIHtAbGluayBEYXRlVGltZSNtaWxsaXNlY29uZH0gYWNjZXNzb3JzLgogICAgICogKiAqKldlZWsgY2FsZW5kYXIqKjogRm9yIElTTyB3ZWVrIGNhbGVuZGFyIGF0dHJpYnV0ZXMsIHNlZSB0aGUge0BsaW5rIERhdGVUaW1lI3dlZWtZZWFyfSwge0BsaW5rIERhdGVUaW1lI3dlZWtOdW1iZXJ9LCBhbmQge0BsaW5rIERhdGVUaW1lI3dlZWtkYXl9IGFjY2Vzc29ycy4KICAgICAqICogKipDb25maWd1cmF0aW9uKiogU2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjbG9jYWxlfSBhbmQge0BsaW5rIERhdGVUaW1lI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLgogICAgICogKiAqKlRyYW5zZm9ybWF0aW9uKio6IFRvIHRyYW5zZm9ybSB0aGUgRGF0ZVRpbWUgaW50byBvdGhlciBEYXRlVGltZXMsIHVzZSB7QGxpbmsgRGF0ZVRpbWUjc2V0fSwge0BsaW5rIERhdGVUaW1lI3JlY29uZmlndXJlfSwge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0TG9jYWxlfSwge0BsaW5rIERhdGVUaW1lLnBsdXN9LCB7QGxpbmsgRGF0ZVRpbWUjbWludXN9LCB7QGxpbmsgRGF0ZVRpbWUjZW5kT2Z9LCB7QGxpbmsgRGF0ZVRpbWUjc3RhcnRPZn0sIHtAbGluayBEYXRlVGltZSN0b1VUQ30sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0uCiAgICAgKiAqICoqT3V0cHV0Kio6IFRvIGNvbnZlcnQgdGhlIERhdGVUaW1lIHRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgdXNlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjdG9SZWxhdGl2ZX0sIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlQ2FsZW5kYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjdG9KU09OfSwge0BsaW5rIERhdGVUaW1lI3RvSVNPfSwge0BsaW5rIERhdGVUaW1lI3RvSFRUUH0sIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0sIHtAbGluayBEYXRlVGltZSN0b1JGQzI4MjJ9LCB7QGxpbmsgRGF0ZVRpbWUjdG9TdHJpbmd9LCB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9LCB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9LCB7QGxpbmsgRGF0ZVRpbWUjdG9NaWxsaXN9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjdG9KU0RhdGV9LgogICAgICoKICAgICAqIFRoZXJlJ3MgcGxlbnR5IG90aGVycyBkb2N1bWVudGVkIGJlbG93LiBJbiBhZGRpdGlvbiwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gc3VidGxlciB0b3BpY3MgbGlrZSBpbnRlcm5hdGlvbmFsaXphdGlvbiwgdGltZSB6b25lcywgYWx0ZXJuYXRpdmUgY2FsZW5kYXJzLCB2YWxpZGl0eSwgYW5kIHNvIG9uLCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uCiAgICAgKi8KCgogICAgdmFyIERhdGVUaW1lID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgLyoqCiAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgKi8KICAgICAgZnVuY3Rpb24gRGF0ZVRpbWUoY29uZmlnKSB7CiAgICAgICAgdmFyIHpvbmUgPSBjb25maWcuem9uZSB8fCBTZXR0aW5ncy5kZWZhdWx0Wm9uZTsKICAgICAgICB2YXIgaW52YWxpZCA9IGNvbmZpZy5pbnZhbGlkIHx8IChOdW1iZXIuaXNOYU4oY29uZmlnLnRzKSA/IG5ldyBJbnZhbGlkKCJpbnZhbGlkIGlucHV0IikgOiBudWxsKSB8fCAoIXpvbmUuaXNWYWxpZCA/IHVuc3VwcG9ydGVkWm9uZSh6b25lKSA6IG51bGwpOwogICAgICAgIC8qKgogICAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgICAqLwoKICAgICAgICB0aGlzLnRzID0gaXNVbmRlZmluZWQoY29uZmlnLnRzKSA/IFNldHRpbmdzLm5vdygpIDogY29uZmlnLnRzOwogICAgICAgIHZhciBjID0gbnVsbCwKICAgICAgICAgICAgbyA9IG51bGw7CgogICAgICAgIGlmICghaW52YWxpZCkgewogICAgICAgICAgdmFyIHVuY2hhbmdlZCA9IGNvbmZpZy5vbGQgJiYgY29uZmlnLm9sZC50cyA9PT0gdGhpcy50cyAmJiBjb25maWcub2xkLnpvbmUuZXF1YWxzKHpvbmUpOwoKICAgICAgICAgIGlmICh1bmNoYW5nZWQpIHsKICAgICAgICAgICAgdmFyIF9yZWYyID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTsKICAgICAgICAgICAgYyA9IF9yZWYyWzBdOwogICAgICAgICAgICBvID0gX3JlZjJbMV07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXIgb3QgPSB6b25lLm9mZnNldCh0aGlzLnRzKTsKICAgICAgICAgICAgYyA9IHRzVG9PYmoodGhpcy50cywgb3QpOwogICAgICAgICAgICBpbnZhbGlkID0gTnVtYmVyLmlzTmFOKGMueWVhcikgPyBuZXcgSW52YWxpZCgiaW52YWxpZCBpbnB1dCIpIDogbnVsbDsKICAgICAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYzsKICAgICAgICAgICAgbyA9IGludmFsaWQgPyBudWxsIDogb3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgICAqLwoKCiAgICAgICAgdGhpcy5fem9uZSA9IHpvbmU7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMubG9jID0gY29uZmlnLmxvYyB8fCBMb2NhbGUuY3JlYXRlKCk7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMuaW52YWxpZCA9IGludmFsaWQ7CiAgICAgICAgLyoqCiAgICAgICAgICogQGFjY2VzcyBwcml2YXRlCiAgICAgICAgICovCgogICAgICAgIHRoaXMud2Vla0RhdGEgPSBudWxsOwogICAgICAgIC8qKgogICAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgICAqLwoKICAgICAgICB0aGlzLmMgPSBjOwogICAgICAgIC8qKgogICAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgICAqLwoKICAgICAgICB0aGlzLm8gPSBvOwogICAgICAgIC8qKgogICAgICAgICAqIEBhY2Nlc3MgcHJpdmF0ZQogICAgICAgICAqLwoKICAgICAgICB0aGlzLmlzTHV4b25EYXRlVGltZSA9IHRydWU7CiAgICAgIH0gLy8gQ09OU1RSVUNUCgogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuCiAgICAgICAqCiAgICAgICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXQKICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwoKCiAgICAgIERhdGVUaW1lLm5vdyA9IGZ1bmN0aW9uIG5vdygpIHsKICAgICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHt9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbG9jYWwgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgbG9jYWwoKWAgd2l0aCBubyBhcmd1bWVudHMpLCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gW21vbnRoPTFdIC0gVGhlIG1vbnRoLCAxLWluZGV4ZWQKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXk9MV0gLSBUaGUgZGF5IG9mIHRoZSBtb250aCwgMS1pbmRleGVkCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZQogICAgICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OQogICAgICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93CiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKHsgem9uZTogIkFtZXJpY2EvTmV3X1lvcmsiIH0pICAgICAgLy9+PiBub3csIGluIFVTIGVhc3QgY29hc3QgdGltZQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMAogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0wMVQwMDowMDowMAogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgeyBsb2NhbGU6ICJmciIgfSkgICAgIC8vfj4gMjAxNy0wMy0xMlQwMDowMDowMCwgd2l0aCBhIEZyZW5jaCBsb2NhbGUKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUpICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDAKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMywgMTIsIDUsIHsgem9uZTogInV0YyIgfSkgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDAsIGluIFVUQwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMAogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMAogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwLCA3NjUpICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjUKICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS5sb2NhbCA9IGZ1bmN0aW9uIGxvY2FsKCkgewogICAgICAgIHZhciBfbGFzdE9wdHMgPSBsYXN0T3B0cyhhcmd1bWVudHMpLAogICAgICAgICAgICBvcHRzID0gX2xhc3RPcHRzWzBdLAogICAgICAgICAgICBhcmdzID0gX2xhc3RPcHRzWzFdLAogICAgICAgICAgICB5ZWFyID0gYXJnc1swXSwKICAgICAgICAgICAgbW9udGggPSBhcmdzWzFdLAogICAgICAgICAgICBkYXkgPSBhcmdzWzJdLAogICAgICAgICAgICBob3VyID0gYXJnc1szXSwKICAgICAgICAgICAgbWludXRlID0gYXJnc1s0XSwKICAgICAgICAgICAgc2Vjb25kID0gYXJnc1s1XSwKICAgICAgICAgICAgbWlsbGlzZWNvbmQgPSBhcmdzWzZdOwoKICAgICAgICByZXR1cm4gcXVpY2tEVCh7CiAgICAgICAgICB5ZWFyOiB5ZWFyLAogICAgICAgICAgbW9udGg6IG1vbnRoLAogICAgICAgICAgZGF5OiBkYXksCiAgICAgICAgICBob3VyOiBob3VyLAogICAgICAgICAgbWludXRlOiBtaW51dGUsCiAgICAgICAgICBzZWNvbmQ6IHNlY29uZCwKICAgICAgICAgIG1pbGxpc2Vjb25kOiBtaWxsaXNlY29uZAogICAgICAgIH0sIG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBpbiBVVEMKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgdXRjKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWQKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGgKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtob3VyPTBdIC0gVGhlIGhvdXIgb2YgdGhlIGRheSwgaW4gMjQtaG91ciB0aW1lCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5CiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kPTBdIC0gVGhlIHNlY29uZCBvZiB0aGUgbWludXRlLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTkKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFttaWxsaXNlY29uZD0wXSAtIFRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOTk5CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93CiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFoKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDBaCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFoKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCB7IGxvY2FsZTogImZyIiB9KSAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDU6NDU6MDBaIHdpdGggYSBGcmVuY2ggbG9jYWxlCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFoKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTAsIDc2NSwgeyBsb2NhbGU6ICJmciIgfSkgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwLjc2NVogd2l0aCBhIEZyZW5jaCBsb2NhbGUKICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS51dGMgPSBmdW5jdGlvbiB1dGMoKSB7CiAgICAgICAgdmFyIF9sYXN0T3B0czIgPSBsYXN0T3B0cyhhcmd1bWVudHMpLAogICAgICAgICAgICBvcHRzID0gX2xhc3RPcHRzMlswXSwKICAgICAgICAgICAgYXJncyA9IF9sYXN0T3B0czJbMV0sCiAgICAgICAgICAgIHllYXIgPSBhcmdzWzBdLAogICAgICAgICAgICBtb250aCA9IGFyZ3NbMV0sCiAgICAgICAgICAgIGRheSA9IGFyZ3NbMl0sCiAgICAgICAgICAgIGhvdXIgPSBhcmdzWzNdLAogICAgICAgICAgICBtaW51dGUgPSBhcmdzWzRdLAogICAgICAgICAgICBzZWNvbmQgPSBhcmdzWzVdLAogICAgICAgICAgICBtaWxsaXNlY29uZCA9IGFyZ3NbNl07CgogICAgICAgIG9wdHMuem9uZSA9IEZpeGVkT2Zmc2V0Wm9uZS51dGNJbnN0YW5jZTsKICAgICAgICByZXR1cm4gcXVpY2tEVCh7CiAgICAgICAgICB5ZWFyOiB5ZWFyLAogICAgICAgICAgbW9udGg6IG1vbnRoLAogICAgICAgICAgZGF5OiBkYXksCiAgICAgICAgICBob3VyOiBob3VyLAogICAgICAgICAgbWludXRlOiBtaW51dGUsCiAgICAgICAgICBzZWNvbmQ6IHNlY29uZCwKICAgICAgICAgIG1pbGxpc2Vjb25kOiBtaWxsaXNlY29uZAogICAgICAgIH0sIG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLgogICAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG8KICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS5mcm9tSlNEYXRlID0gZnVuY3Rpb24gZnJvbUpTRGF0ZShkYXRlLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0aW9ucyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgdmFyIHRzID0gaXNEYXRlKGRhdGUpID8gZGF0ZS52YWx1ZU9mKCkgOiBOYU47CgogICAgICAgIGlmIChOdW1iZXIuaXNOYU4odHMpKSB7CiAgICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgiaW52YWxpZCBpbnB1dCIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIHpvbmVUb1VzZSA9IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7CgogICAgICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHsKICAgICAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoewogICAgICAgICAgdHM6IHRzLAogICAgICAgICAgem9uZTogem9uZVRvVXNlLAogICAgICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRpb25zKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gbWlsbGlzZWNvbmRzIC0gYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIDE5NzAgVVRDCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdGlvbnMuem9uZT0nbG9jYWwnXSAtIHRoZSB6b25lIHRvIHBsYWNlIHRoZSBEYXRlVGltZSBpbnRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5sb2NhbGVdIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICAgKi8KICAgICAgOwoKICAgICAgRGF0ZVRpbWUuZnJvbU1pbGxpcyA9IGZ1bmN0aW9uIGZyb21NaWxsaXMobWlsbGlzZWNvbmRzLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0aW9ucyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc051bWJlcihtaWxsaXNlY29uZHMpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoImZyb21NaWxsaXMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXQsIGJ1dCByZWNlaXZlZCBhICIgKyB0eXBlb2YgbWlsbGlzZWNvbmRzICsgIiB3aXRoIHZhbHVlICIgKyBtaWxsaXNlY29uZHMpOwogICAgICAgIH0gZWxzZSBpZiAobWlsbGlzZWNvbmRzIDwgLU1BWF9EQVRFIHx8IG1pbGxpc2Vjb25kcyA+IE1BWF9EQVRFKSB7CiAgICAgICAgICAvLyB0aGlzIGlzbid0IHBlcmZlY3QgYmVjYXVzZSBiZWNhdXNlIHdlIGNhbiBzdGlsbCBlbmQgdXAgb3V0IG9mIHJhbmdlIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBzaGlmdGluZywgYnV0IGl0J3MgYSBzdGFydAogICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7CiAgICAgICAgICAgIHRzOiBtaWxsaXNlY29uZHMsCiAgICAgICAgICAgIHpvbmU6IG5vcm1hbGl6ZVpvbmUob3B0aW9ucy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksCiAgICAgICAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucykKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAobWVhbmluZyBzaW5jZSAxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLiBVc2VzIHRoZSBkZWZhdWx0IHpvbmUuCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwIFVUQwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50bwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLmZyb21TZWNvbmRzID0gZnVuY3Rpb24gZnJvbVNlY29uZHMoc2Vjb25kcywgb3B0aW9ucykgewogICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNOdW1iZXIoc2Vjb25kcykpIHsKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigiZnJvbVNlY29uZHMgcmVxdWlyZXMgYSBudW1lcmljYWwgaW5wdXQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7CiAgICAgICAgICAgIHRzOiBzZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgem9uZTogbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKSwKICAgICAgICAgICAgbG9jOiBMb2NhbGUuZnJvbU9iamVjdChvcHRpb25zKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXInIGFuZCAnaG91cicgd2l0aCByZWFzb25hYmxlIGRlZmF1bHRzLgogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb20KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFyIC0gYSB5ZWFyLCBzdWNoIGFzIDE5ODcKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5tb250aCAtIGEgbW9udGgsIDEtMTIKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXkgLSBhIGRheSBvZiB0aGUgbW9udGgsIDEtMzEsIGRlcGVuZGluZyBvbiB0aGUgbW9udGgKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5vcmRpbmFsIC0gZGF5IG9mIHRoZSB5ZWFyLCAxLTM2NSBvciAzNjYKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrWWVhciAtIGFuIElTTyB3ZWVrIHllYXIKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrTnVtYmVyIC0gYW4gSVNPIHdlZWsgbnVtYmVyLCBiZXR3ZWVuIDEgYW5kIDUyIG9yIDUzLCBkZXBlbmRpbmcgb24gdGhlIHllYXIKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9iai53ZWVrZGF5IC0gYW4gSVNPIHdlZWtkYXksIDEtNywgd2hlcmUgMSBpcyBNb25kYXkgYW5kIDcgaXMgU3VuZGF5CiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91ciAtIGhvdXIgb2YgdGhlIGRheSwgMC0yMwogICAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbnV0ZSAtIG1pbnV0ZSBvZiB0aGUgaG91ciwgMC01OQogICAgICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnNlY29uZCAtIHNlY29uZCBvZiB0aGUgbWludXRlLCAwLTU5CiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWlsbGlzZWNvbmQgLSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCAwLTk5OQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoaXMgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGludGVycHJldCB0aGUgbnVtYmVycyBpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXIgem9uZS4gQ2FuIHRha2UgYW55IHZhbHVlIHRha2VuIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBzZXRab25lKCkKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIsIG1vbnRoOiA1LCBkYXk6IDI1fSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wNS0yNScKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHllYXI6IDE5ODIgfSkudG9JU09EYXRlKCkgLy89PiAnMTk4Mi0wMS0wMScKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSkgLy9+PiB0b2RheSBhdCAxMDoyNjowNgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICd1dGMnIH0pLAogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICdsb2NhbCcgfSkKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IGhvdXI6IDEwLCBtaW51dGU6IDI2LCBzZWNvbmQ6IDYgfSwgeyB6b25lOiAnQW1lcmljYS9OZXdfWW9yaycgfSkKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbU9iamVjdCh7IHdlZWtZZWFyOiAyMDE2LCB3ZWVrTnVtYmVyOiAyLCB3ZWVrZGF5OiAzIH0pLnRvSVNPRGF0ZSgpIC8vPT4gJzIwMTYtMDEtMTMnCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICAgKi8KICAgICAgOwoKICAgICAgRGF0ZVRpbWUuZnJvbU9iamVjdCA9IGZ1bmN0aW9uIGZyb21PYmplY3Qob2JqLCBvcHRzKSB7CiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgb2JqID0gb2JqIHx8IHt9OwogICAgICAgIHZhciB6b25lVG9Vc2UgPSBub3JtYWxpemVab25lKG9wdHMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwoKICAgICAgICBpZiAoIXpvbmVUb1VzZS5pc1ZhbGlkKSB7CiAgICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZVRvVXNlKSk7CiAgICAgICAgfQoKICAgICAgICB2YXIgdHNOb3cgPSBTZXR0aW5ncy5ub3coKSwKICAgICAgICAgICAgb2Zmc2V0UHJvdmlzID0gem9uZVRvVXNlLm9mZnNldCh0c05vdyksCiAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3Qob2JqLCBub3JtYWxpemVVbml0KSwKICAgICAgICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksCiAgICAgICAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLAogICAgICAgICAgICBjb250YWluc0dyZWdvck1EID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQubW9udGgpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSksCiAgICAgICAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsCiAgICAgICAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyLAogICAgICAgICAgICBsb2MgPSBMb2NhbGUuZnJvbU9iamVjdChvcHRzKTsgLy8gY2FzZXM6CiAgICAgICAgLy8ganVzdCBhIHdlZWtkYXkgLT4gdGhpcyB3ZWVrJ3MgaW5zdGFuY2Ugb2YgdGhhdCB3ZWVrZGF5LCBubyB3b3JyaWVzCiAgICAgICAgLy8gKGdyZWdvcmlhbiBkYXRhIG9yIG9yZGluYWwpICsgKHdlZWtZZWFyIG9yIHdlZWtOdW1iZXIpIC0+IGVycm9yCiAgICAgICAgLy8gKGdyZWdvcmlhbiBtb250aCBvciBkYXkpICsgb3JkaW5hbCAtPiBlcnJvcgogICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHVzZSB3ZWVrcyBvciBvcmRpbmFscyBvciBncmVnb3JpYW4sIGRlcGVuZGluZyBvbiB3aGF0J3Mgc3BlY2lmaWVkCgogICAgICAgIGlmICgoY29udGFpbnNHcmVnb3IgfHwgY29udGFpbnNPcmRpbmFsKSAmJiBkZWZpbml0ZVdlZWtEZWYpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFscyIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbnRhaW5zR3JlZ29yTUQgJiYgY29udGFpbnNPcmRpbmFsKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IoIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5Iik7CiAgICAgICAgfQoKICAgICAgICB2YXIgdXNlV2Vla0RhdGEgPSBkZWZpbml0ZVdlZWtEZWYgfHwgbm9ybWFsaXplZC53ZWVrZGF5ICYmICFjb250YWluc0dyZWdvcjsgLy8gY29uZmlndXJlIG91cnNlbHZlcyB0byBkZWFsIHdpdGggZ3JlZ29yaWFuIGRhdGVzIG9yIHdlZWsgc3R1ZmYKCiAgICAgICAgdmFyIHVuaXRzLAogICAgICAgICAgICBkZWZhdWx0VmFsdWVzLAogICAgICAgICAgICBvYmpOb3cgPSB0c1RvT2JqKHRzTm93LCBvZmZzZXRQcm92aXMpOwoKICAgICAgICBpZiAodXNlV2Vla0RhdGEpIHsKICAgICAgICAgIHVuaXRzID0gb3JkZXJlZFdlZWtVbml0czsKICAgICAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0V2Vla1VuaXRWYWx1ZXM7CiAgICAgICAgICBvYmpOb3cgPSBncmVnb3JpYW5Ub1dlZWsob2JqTm93KTsKICAgICAgICB9IGVsc2UgaWYgKGNvbnRhaW5zT3JkaW5hbCkgewogICAgICAgICAgdW5pdHMgPSBvcmRlcmVkT3JkaW5hbFVuaXRzOwogICAgICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRPcmRpbmFsVW5pdFZhbHVlczsKICAgICAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvT3JkaW5hbChvYmpOb3cpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1bml0cyA9IG9yZGVyZWRVbml0czsKICAgICAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VW5pdFZhbHVlczsKICAgICAgICB9IC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZgoKCiAgICAgICAgdmFyIGZvdW5kRmlyc3QgPSBmYWxzZTsKCiAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyTG9vc2UodW5pdHMpLCBfc3RlcDM7ICEoX3N0ZXAzID0gX2l0ZXJhdG9yMygpKS5kb25lOykgewogICAgICAgICAgdmFyIHUgPSBfc3RlcDMudmFsdWU7CiAgICAgICAgICB2YXIgdiA9IG5vcm1hbGl6ZWRbdV07CgogICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2KSkgewogICAgICAgICAgICBmb3VuZEZpcnN0ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRGaXJzdCkgewogICAgICAgICAgICBub3JtYWxpemVkW3VdID0gZGVmYXVsdFZhbHVlc1t1XTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5vcm1hbGl6ZWRbdV0gPSBvYmpOb3dbdV07CiAgICAgICAgICB9CiAgICAgICAgfSAvLyBtYWtlIHN1cmUgdGhlIHZhbHVlcyB3ZSBoYXZlIGFyZSBpbiByYW5nZQoKCiAgICAgICAgdmFyIGhpZ2hlck9yZGVySW52YWxpZCA9IHVzZVdlZWtEYXRhID8gaGFzSW52YWxpZFdlZWtEYXRhKG5vcm1hbGl6ZWQpIDogY29udGFpbnNPcmRpbmFsID8gaGFzSW52YWxpZE9yZGluYWxEYXRhKG5vcm1hbGl6ZWQpIDogaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEobm9ybWFsaXplZCksCiAgICAgICAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpOwoKICAgICAgICBpZiAoaW52YWxpZCkgewogICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7CiAgICAgICAgfSAvLyBjb21wdXRlIHRoZSBhY3R1YWwgdGltZQoKCiAgICAgICAgdmFyIGdyZWdvcmlhbiA9IHVzZVdlZWtEYXRhID8gd2Vla1RvR3JlZ29yaWFuKG5vcm1hbGl6ZWQpIDogY29udGFpbnNPcmRpbmFsID8gb3JkaW5hbFRvR3JlZ29yaWFuKG5vcm1hbGl6ZWQpIDogbm9ybWFsaXplZCwKICAgICAgICAgICAgX29ialRvVFMyID0gb2JqVG9UUyhncmVnb3JpYW4sIG9mZnNldFByb3Zpcywgem9uZVRvVXNlKSwKICAgICAgICAgICAgdHNGaW5hbCA9IF9vYmpUb1RTMlswXSwKICAgICAgICAgICAgb2Zmc2V0RmluYWwgPSBfb2JqVG9UUzJbMV0sCiAgICAgICAgICAgIGluc3QgPSBuZXcgRGF0ZVRpbWUoewogICAgICAgICAgdHM6IHRzRmluYWwsCiAgICAgICAgICB6b25lOiB6b25lVG9Vc2UsCiAgICAgICAgICBvOiBvZmZzZXRGaW5hbCwKICAgICAgICAgIGxvYzogbG9jCiAgICAgICAgfSk7IC8vIGdyZWdvcmlhbiBkYXRhICsgd2Vla2RheSBzZXJ2ZXMgb25seSB0byB2YWxpZGF0ZQoKCiAgICAgICAgaWYgKG5vcm1hbGl6ZWQud2Vla2RheSAmJiBjb250YWluc0dyZWdvciAmJiBvYmoud2Vla2RheSAhPT0gaW5zdC53ZWVrZGF5KSB7CiAgICAgICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCgibWlzbWF0Y2hlZCB3ZWVrZGF5IiwgInlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICIgKyBub3JtYWxpemVkLndlZWtkYXkgKyAiIGFuZCBhIGRhdGUgb2YgIiArIGluc3QudG9JU08oKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5zdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBJU08gODYwMSBzdHJpbmcKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgSVNPIHN0cmluZwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzJykKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMrMDY6MDAnKQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcsIHtzZXRab25lOiB0cnVlfSkKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnLCB7em9uZTogJ3V0Yyd9KQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LVcwNS00JykKICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS5mcm9tSVNPID0gZnVuY3Rpb24gZnJvbUlTTyh0ZXh0LCBvcHRzKSB7CiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgdmFyIF9wYXJzZUlTT0RhdGUgPSBwYXJzZUlTT0RhdGUodGV4dCksCiAgICAgICAgICAgIHZhbHMgPSBfcGFyc2VJU09EYXRlWzBdLAogICAgICAgICAgICBwYXJzZWRab25lID0gX3BhcnNlSVNPRGF0ZVsxXTsKCiAgICAgICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgIklTTyA4NjAxIiwgdGV4dCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gUkZDIDI4MjIgc3RyaW5nCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIFJGQyAyODIyIHN0cmluZwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gY29udmVydCB0aGUgdGltZSB0byB0aGlzIHpvbmUuIFNpbmNlIHRoZSBvZmZzZXQgaXMgYWx3YXlzIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi4KICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSBmaXhlZC1vZmZzZXQgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzOjEyIEdNVCcpCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21SRkMyODIyKCdGcmksIDI1IE5vdiAyMDE2IDEzOjIzOjEyICswNjAwJykKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJzI1IE5vdiAyMDE2IDEzOjIzIFonKQogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLmZyb21SRkMyODIyID0gZnVuY3Rpb24gZnJvbVJGQzI4MjIodGV4dCwgb3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIHZhciBfcGFyc2VSRkMyODIyRGF0ZSA9IHBhcnNlUkZDMjgyMkRhdGUodGV4dCksCiAgICAgICAgICAgIHZhbHMgPSBfcGFyc2VSRkMyODIyRGF0ZVswXSwKICAgICAgICAgICAgcGFyc2VkWm9uZSA9IF9wYXJzZVJGQzI4MjJEYXRlWzFdOwoKICAgICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiUkZDIDI4MjIiLCB0ZXh0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBIVFRQIGhlYWRlciBkYXRlCiAgICAgICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIEhUVFAgaGVhZGVyIGRhdGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRvIGFmZmVjdCB0aGUgY3JlYXRpb24KICAgICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW29wdHMuem9uZT0nbG9jYWwnXSAtIGNvbnZlcnQgdGhlIHRpbWUgdG8gdGhpcyB6b25lLiBTaW5jZSBIVFRQIGRhdGVzIGFyZSBhbHdheXMgaW4gVVRDLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLgogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCB0aGUgZml4ZWQtb2Zmc2V0IHpvbmUgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcuIEZvciBIVFRQIGRhdGVzLCB0aGlzIGlzIGFsd2F5cyBVVEMsIHNvIHRoaXMgb3B0aW9uIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYHpvbmVgIG9wdGlvbiB0byAndXRjJywgYnV0IHRoaXMgb3B0aW9uIGlzIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHNpbWlsYXIgbWV0aG9kcy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nc3lzdGVtJ3MgbG9jYWxlJ10gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2UKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1biwgMDYgTm92IDE5OTQgMDg6NDk6MzcgR01UJykKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUhUVFAoJ1N1bmRheSwgMDYtTm92LTk0IDA4OjQ5OjM3IEdNVCcpCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4gTm92ICA2IDA4OjQ5OjM3IDE5OTQnKQogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLmZyb21IVFRQID0gZnVuY3Rpb24gZnJvbUhUVFAodGV4dCwgb3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIHZhciBfcGFyc2VIVFRQRGF0ZSA9IHBhcnNlSFRUUERhdGUodGV4dCksCiAgICAgICAgICAgIHZhbHMgPSBfcGFyc2VIVFRQRGF0ZVswXSwKICAgICAgICAgICAgcGFyc2VkWm9uZSA9IF9wYXJzZUhUVFBEYXRlWzFdOwoKICAgICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiSFRUUCIsIG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy4KICAgICAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZQogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLmZyb21Gb3JtYXQgPSBmdW5jdGlvbiBmcm9tRm9ybWF0KHRleHQsIGZtdCwgb3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoImZyb21Gb3JtYXQgcmVxdWlyZXMgYW4gaW5wdXQgc3RyaW5nIGFuZCBhIGZvcm1hdCIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9vcHRzID0gb3B0cywKICAgICAgICAgICAgX29wdHMkbG9jYWxlID0gX29wdHMubG9jYWxlLAogICAgICAgICAgICBsb2NhbGUgPSBfb3B0cyRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfb3B0cyRsb2NhbGUsCiAgICAgICAgICAgIF9vcHRzJG51bWJlcmluZ1N5c3RlbSA9IF9vcHRzLm51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX29wdHMkbnVtYmVyaW5nU3lzdGVtID09PSB2b2lkIDAgPyBudWxsIDogX29wdHMkbnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7CiAgICAgICAgICBsb2NhbGU6IGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgZGVmYXVsdFRvRU46IHRydWUKICAgICAgICB9KSwKICAgICAgICAgICAgX3BhcnNlRnJvbVRva2VucyA9IHBhcnNlRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KSwKICAgICAgICAgICAgdmFscyA9IF9wYXJzZUZyb21Ub2tlbnNbMF0sCiAgICAgICAgICAgIHBhcnNlZFpvbmUgPSBfcGFyc2VGcm9tVG9rZW5zWzFdLAogICAgICAgICAgICBpbnZhbGlkID0gX3BhcnNlRnJvbVRva2Vuc1syXTsKCiAgICAgICAgaWYgKGludmFsaWQpIHsKICAgICAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiZm9ybWF0ICIgKyBmbXQsIHRleHQpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZAogICAgICAgKi8KICAgICAgOwoKICAgICAgRGF0ZVRpbWUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIGZyb21TdHJpbmcodGV4dCwgZm10LCBvcHRzKSB7CiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGV4dCwgZm10LCBvcHRzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZQogICAgICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmUKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW0KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JykKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSkKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJykKICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS5mcm9tU1FMID0gZnVuY3Rpb24gZnJvbVNRTCh0ZXh0LCBvcHRzKSB7CiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgdmFyIF9wYXJzZVNRTCA9IHBhcnNlU1FMKHRleHQpLAogICAgICAgICAgICB2YWxzID0gX3BhcnNlU1FMWzBdLAogICAgICAgICAgICBwYXJzZWRab25lID0gX3BhcnNlU1FMWzFdOwoKICAgICAgICByZXR1cm4gcGFyc2VEYXRhVG9EYXRlVGltZSh2YWxzLCBwYXJzZWRab25lLCBvcHRzLCAiU1FMIiwgdGV4dCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhbiBpbnZhbGlkIERhdGVUaW1lLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS5pbnZhbGlkID0gZnVuY3Rpb24gaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKSB7CiAgICAgICAgaWYgKGV4cGxhbmF0aW9uID09PSB2b2lkIDApIHsKICAgICAgICAgIGV4cGxhbmF0aW9uID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICghcmVhc29uKSB7CiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoIm5lZWQgdG8gc3BlY2lmeSBhIHJlYXNvbiB0aGUgRGF0ZVRpbWUgaXMgaW52YWxpZCIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7CgogICAgICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkgewogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWREYXRlVGltZUVycm9yKGludmFsaWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHsKICAgICAgICAgICAgaW52YWxpZDogaW52YWxpZAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhbiBvYmplY3QgaXMgYSBEYXRlVGltZS4gV29ya3MgYWNyb3NzIGNvbnRleHQgYm91bmRhcmllcwogICAgICAgKiBAcGFyYW0ge29iamVjdH0gbwogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgRGF0ZVRpbWUuaXNEYXRlVGltZSA9IGZ1bmN0aW9uIGlzRGF0ZVRpbWUobykgewogICAgICAgIHJldHVybiBvICYmIG8uaXNMdXhvbkRhdGVUaW1lIHx8IGZhbHNlOwogICAgICB9IC8vIElORk8KCiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHZhbHVlIG9mIHVuaXQuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZScgb3IgJ2RheScKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdtb250aCcpOyAvLz0+IDcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNywgNCkuZ2V0KCdkYXknKTsgLy89PiA0CiAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIHZhciBfcHJvdG8gPSBEYXRlVGltZS5wcm90b3R5cGU7CgogICAgICBfcHJvdG8uZ2V0ID0gZnVuY3Rpb24gZ2V0KHVuaXQpIHsKICAgICAgICByZXR1cm4gdGhpc1t1bml0XTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyB2YWxpZC4gSW52YWxpZCBEYXRlVGltZXMgb2NjdXIgd2hlbjoKICAgICAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgZnJvbSBpbnZhbGlkIGNhbGVuZGFyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSAxM3RoIG1vbnRoIG9yIEZlYnJ1YXJ5IDMwCiAgICAgICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZQogICAgICAgKiBAdHlwZSB7Ym9vbGVhbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSByZXNvbHZlZCBJbnRsIG9wdGlvbnMgZm9yIHRoaXMgRGF0ZVRpbWUuCiAgICAgICAqIFRoaXMgaXMgdXNlZnVsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGJlaGF2aW9yIG9mIGZvcm1hdHRpbmcgbWV0aG9kcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIHRoZSBzYW1lIG9wdGlvbnMgYXMgdG9Mb2NhbGVTdHJpbmcKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgX3Byb3RvLnJlc29sdmVkTG9jYWxlT3B0aW9ucyA9IGZ1bmN0aW9uIHJlc29sdmVkTG9jYWxlT3B0aW9ucyhvcHRzKSB7CiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgdmFyIF9Gb3JtYXR0ZXIkY3JlYXRlJHJlcyA9IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIG9wdHMpLnJlc29sdmVkT3B0aW9ucyh0aGlzKSwKICAgICAgICAgICAgbG9jYWxlID0gX0Zvcm1hdHRlciRjcmVhdGUkcmVzLmxvY2FsZSwKICAgICAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX0Zvcm1hdHRlciRjcmVhdGUkcmVzLm51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgICAgY2FsZW5kYXIgPSBfRm9ybWF0dGVyJGNyZWF0ZSRyZXMuY2FsZW5kYXI7CgogICAgICAgIHJldHVybiB7CiAgICAgICAgICBsb2NhbGU6IGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgb3V0cHV0Q2FsZW5kYXI6IGNhbGVuZGFyCiAgICAgICAgfTsKICAgICAgfSAvLyBUUkFOU0ZPUk0KCiAgICAgIC8qKgogICAgICAgKiAiU2V0IiB0aGUgRGF0ZVRpbWUncyB6b25lIHRvIFVUQy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLgogICAgICAgKgogICAgICAgKiBFcXVpdmFsZW50IHRvIHtAbGluayBEYXRlVGltZS5zZXRab25lfSgndXRjJykKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXQ9MF0gLSBvcHRpb25hbGx5LCBhbiBvZmZzZXQgZnJvbSBVVEMgaW4gbWludXRlcwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9e31dIC0gb3B0aW9ucyB0byBwYXNzIHRvIGBzZXRab25lKClgCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvVVRDID0gZnVuY3Rpb24gdG9VVEMob2Zmc2V0LCBvcHRzKSB7CiAgICAgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuc2V0Wm9uZShGaXhlZE9mZnNldFpvbmUuaW5zdGFuY2Uob2Zmc2V0KSwgb3B0cyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqICJTZXQiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCiAgICAgICAqCiAgICAgICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvTG9jYWwgPSBmdW5jdGlvbiB0b0xvY2FsKCkgewogICAgICAgIHJldHVybiB0aGlzLnNldFpvbmUoU2V0dGluZ3MuZGVmYXVsdFpvbmUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiAiU2V0IiB0aGUgRGF0ZVRpbWUncyB6b25lIHRvIHNwZWNpZmllZCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCiAgICAgICAqCiAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBzZXR0ZXIga2VlcHMgdGhlIHVuZGVybHlpbmcgdGltZSB0aGUgc2FtZSAoYXMgaW4sIHRoZSBzYW1lIHRpbWVzdGFtcCksIGJ1dCB0aGUgbmV3IGluc3RhbmNlIHdpbGwgcmVwb3J0IGRpZmZlcmVudCBsb2NhbCB0aW1lcyBhbmQgY29uc2lkZXIgRFNUcyB3aGVuIG1ha2luZyBjb21wdXRhdGlvbnMsIGFzIHdpdGgge0BsaW5rIERhdGVUaW1lLnBsdXN9LiBZb3UgbWF5IHdpc2ggdG8gdXNlIHtAbGluayBEYXRlVGltZS50b0xvY2FsfSBhbmQge0BsaW5rIERhdGVUaW1lLnRvVVRDfSB3aGljaCBwcm92aWRlIHNpbXBsZSBjb252ZW5pZW5jZSB3cmFwcGVycyBmb3IgY29tbW9ubHkgdXNlZCB6b25lcy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW3pvbmU9J2xvY2FsJ10gLSBhIHpvbmUgaWRlbnRpZmllci4gQXMgYSBzdHJpbmcsIHRoYXQgY2FuIGJlIGFueSBJQU5BIHpvbmUgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IGVudmlyb25tZW50LCBvciBhIGZpeGVkLW9mZnNldCBuYW1lIG9mIHRoZSBmb3JtICdVVEMrMycsIG9yIHRoZSBzdHJpbmdzICdsb2NhbCcgb3IgJ3V0YycuIFlvdSBtYXkgYWxzbyBzdXBwbHkgYW4gaW5zdGFuY2Ugb2YgYSB7QGxpbmsgRGF0ZVRpbWUuWm9uZX0gY2xhc3MuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmtlZXBMb2NhbFRpbWU9ZmFsc2VdIC0gSWYgdHJ1ZSwgYWRqdXN0IHRoZSB1bmRlcmx5aW5nIHRpbWUgc28gdGhhdCB0aGUgbG9jYWwgdGltZSBzdGF5cyB0aGUgc2FtZSwgYnV0IGluIHRoZSB0YXJnZXQgem9uZS4gWW91IHNob3VsZCByYXJlbHkgbmVlZCB0aGlzLgogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5zZXRab25lID0gZnVuY3Rpb24gc2V0Wm9uZSh6b25lLCBfdGVtcCkgewogICAgICAgIHZhciBfcmVmMyA9IF90ZW1wID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wLAogICAgICAgICAgICBfcmVmMyRrZWVwTG9jYWxUaW1lID0gX3JlZjMua2VlcExvY2FsVGltZSwKICAgICAgICAgICAga2VlcExvY2FsVGltZSA9IF9yZWYzJGtlZXBMb2NhbFRpbWUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjMka2VlcExvY2FsVGltZSwKICAgICAgICAgICAgX3JlZjMka2VlcENhbGVuZGFyVGltID0gX3JlZjMua2VlcENhbGVuZGFyVGltZSwKICAgICAgICAgICAga2VlcENhbGVuZGFyVGltZSA9IF9yZWYzJGtlZXBDYWxlbmRhclRpbSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRrZWVwQ2FsZW5kYXJUaW07CgogICAgICAgIHpvbmUgPSBub3JtYWxpemVab25lKHpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTsKCiAgICAgICAgaWYgKHpvbmUuZXF1YWxzKHRoaXMuem9uZSkpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0gZWxzZSBpZiAoIXpvbmUuaXNWYWxpZCkgewogICAgICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQodW5zdXBwb3J0ZWRab25lKHpvbmUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIG5ld1RTID0gdGhpcy50czsKCiAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSB8fCBrZWVwQ2FsZW5kYXJUaW1lKSB7CiAgICAgICAgICAgIHZhciBvZmZzZXRHdWVzcyA9IHpvbmUub2Zmc2V0KHRoaXMudHMpOwogICAgICAgICAgICB2YXIgYXNPYmogPSB0aGlzLnRvT2JqZWN0KCk7CgogICAgICAgICAgICB2YXIgX29ialRvVFMzID0gb2JqVG9UUyhhc09iaiwgb2Zmc2V0R3Vlc3MsIHpvbmUpOwoKICAgICAgICAgICAgbmV3VFMgPSBfb2JqVG9UUzNbMF07CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIHsKICAgICAgICAgICAgdHM6IG5ld1RTLAogICAgICAgICAgICB6b25lOiB6b25lCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqICJTZXQiIHRoZSBsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3Igb3V0cHV0Q2FsZW5kYXIuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSB0aGUgcHJvcGVydGllcyB0byBzZXQKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLnJlY29uZmlndXJlKHsgbG9jYWxlOiAnZW4tR0InIH0pCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnJlY29uZmlndXJlID0gZnVuY3Rpb24gcmVjb25maWd1cmUoX3RlbXAyKSB7CiAgICAgICAgdmFyIF9yZWY0ID0gX3RlbXAyID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wMiwKICAgICAgICAgICAgbG9jYWxlID0gX3JlZjQubG9jYWxlLAogICAgICAgICAgICBudW1iZXJpbmdTeXN0ZW0gPSBfcmVmNC5udW1iZXJpbmdTeXN0ZW0sCiAgICAgICAgICAgIG91dHB1dENhbGVuZGFyID0gX3JlZjQub3V0cHV0Q2FsZW5kYXI7CgogICAgICAgIHZhciBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7CiAgICAgICAgICBsb2NhbGU6IGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgb3V0cHV0Q2FsZW5kYXI6IG91dHB1dENhbGVuZGFyCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNsb25lKHRoaXMsIHsKICAgICAgICAgIGxvYzogbG9jCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqICJTZXQiIHRoZSBsb2NhbGUuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBEYXRlVGltZS4KICAgICAgICogSnVzdCBhIGNvbnZlbmllbnQgYWxpYXMgZm9yIHJlY29uZmlndXJlKHsgbG9jYWxlIH0pCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5zZXRMb2NhbGUoJ2VuLUdCJykKICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uc2V0TG9jYWxlID0gZnVuY3Rpb24gc2V0TG9jYWxlKGxvY2FsZSkgewogICAgICAgIHJldHVybiB0aGlzLnJlY29uZmlndXJlKHsKICAgICAgICAgIGxvY2FsZTogbG9jYWxlCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqICJTZXQiIHRoZSB2YWx1ZXMgb2Ygc3BlY2lmaWVkIHVuaXRzLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuCiAgICAgICAqIFlvdSBjYW4gb25seSBzZXQgdW5pdHMgd2l0aCB0aGlzIG1ldGhvZDsgZm9yICJzZXR0aW5nIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZS5yZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZS5zZXRab25lfS4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzCiAgICAgICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMTcgfSkKICAgICAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KQogICAgICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB3ZWVrZGF5OiA1IH0pCiAgICAgICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMDUsIG9yZGluYWw6IDIzNCB9KQogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5zZXQgPSBmdW5jdGlvbiBzZXQodmFsdWVzKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICAgIHZhciBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KHZhbHVlcywgbm9ybWFsaXplVW5pdCksCiAgICAgICAgICAgIHNldHRpbmdXZWVrU3R1ZmYgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC53ZWVrWWVhcikgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla051bWJlcikgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla2RheSksCiAgICAgICAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLAogICAgICAgICAgICBjb250YWluc0dyZWdvclllYXIgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC55ZWFyKSwKICAgICAgICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLAogICAgICAgICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELAogICAgICAgICAgICBkZWZpbml0ZVdlZWtEZWYgPSBub3JtYWxpemVkLndlZWtZZWFyIHx8IG5vcm1hbGl6ZWQud2Vla051bWJlcjsKCiAgICAgICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikgewogICAgICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKCJDYW4ndCBtaXggd2Vla1llYXIvd2Vla051bWJlciB1bml0cyB3aXRoIHllYXIvbW9udGgvZGF5IG9yIG9yZGluYWxzIik7CiAgICAgICAgfQoKICAgICAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcigiQ2FuJ3QgbWl4IG9yZGluYWwgZGF0ZXMgd2l0aCBtb250aC9kYXkiKTsKICAgICAgICB9CgogICAgICAgIHZhciBtaXhlZDsKCiAgICAgICAgaWYgKHNldHRpbmdXZWVrU3R1ZmYpIHsKICAgICAgICAgIG1peGVkID0gd2Vla1RvR3JlZ29yaWFuKF9leHRlbmRzKHt9LCBncmVnb3JpYW5Ub1dlZWsodGhpcy5jKSwgbm9ybWFsaXplZCkpOwogICAgICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCkpIHsKICAgICAgICAgIG1peGVkID0gb3JkaW5hbFRvR3JlZ29yaWFuKF9leHRlbmRzKHt9LCBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKSwgbm9ybWFsaXplZCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtaXhlZCA9IF9leHRlbmRzKHt9LCB0aGlzLnRvT2JqZWN0KCksIG5vcm1hbGl6ZWQpOyAvLyBpZiB3ZSBkaWRuJ3Qgc2V0IHRoZSBkYXkgYnV0IHdlIGVuZGVkIHVwIG9uIGFuIG92ZXJmbG93IGRhdGUsCiAgICAgICAgICAvLyB1c2UgdGhlIGxhc3QgZGF5IG9mIHRoZSByaWdodCBtb250aAoKICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChub3JtYWxpemVkLmRheSkpIHsKICAgICAgICAgICAgbWl4ZWQuZGF5ID0gTWF0aC5taW4oZGF5c0luTW9udGgobWl4ZWQueWVhciwgbWl4ZWQubW9udGgpLCBtaXhlZC5kYXkpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyIF9vYmpUb1RTNCA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKSwKICAgICAgICAgICAgdHMgPSBfb2JqVG9UUzRbMF0sCiAgICAgICAgICAgIG8gPSBfb2JqVG9UUzRbMV07CgogICAgICAgIHJldHVybiBjbG9uZSh0aGlzLCB7CiAgICAgICAgICB0czogdHMsCiAgICAgICAgICBvOiBvCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lCiAgICAgICAqCiAgICAgICAqIEFkZGluZyBob3VycywgbWludXRlcywgc2Vjb25kcywgb3IgbWlsbGlzZWNvbmRzIGluY3JlYXNlcyB0aGUgdGltZXN0YW1wIGJ5IHRoZSByaWdodCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBBZGRpbmcgZGF5cywgbW9udGhzLCBvciB5ZWFycyBzaGlmdHMgdGhlIGNhbGVuZGFyLCBhY2NvdW50aW5nIGZvciBEU1RzIGFuZCBsZWFwIHllYXJzIGFsb25nIHRoZSB3YXkuIFRodXMsIGBkdC5wbHVzKHsgaG91cnM6IDI0IH0pYCBtYXkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHRpbWUgdGhhbiBgZHQucGx1cyh7IGRheXM6IDEgfSlgIGlmIHRoZXJlJ3MgYSBEU1Qgc2hpZnQgaW4gYmV0d2Vlbi4KICAgICAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKDEyMykgLy9+PiBpbiAxMjMgbWlsbGlzZWNvbmRzCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBtaW51dGVzOiAxNSB9KSAvL34+IGluIDE1IG1pbnV0ZXMKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkgLy9+PiB0aGlzIHRpbWUgdG9tb3Jyb3cKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IC0xIH0pIC8vfj4gdGhpcyB0aW1lIHllc3RlcmRheQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgaG91cnM6IDMsIG1pbnV0ZXM6IDEzIH0pIC8vfj4gaW4gMyBociwgMTMgbWluCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSkgLy9+PiBpbiAzIGhyLCAxMyBtaW4KICAgICAgICogQHJldHVybiB7RGF0ZVRpbWV9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8ucGx1cyA9IGZ1bmN0aW9uIHBsdXMoZHVyYXRpb24pIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgICAgdmFyIGR1ciA9IGZyaWVuZGx5RHVyYXRpb24oZHVyYXRpb24pOwogICAgICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTdWJ0cmFjdCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lCiAgICAgICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUucGx1c30KICAgICAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gc3VidHJhY3QuIEVpdGhlciBhIEx1eG9uIER1cmF0aW9uLCBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIHRoZSBvYmplY3QgYXJndW1lbnQgdG8gRHVyYXRpb24uZnJvbU9iamVjdCgpCiAgICAgICBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLm1pbnVzID0gZnVuY3Rpb24gbWludXMoZHVyYXRpb24pIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7CiAgICAgICAgdmFyIGR1ciA9IGZyaWVuZGx5RHVyYXRpb24oZHVyYXRpb24pLm5lZ2F0ZSgpOwogICAgICAgIHJldHVybiBjbG9uZSh0aGlzLCBhZGp1c3RUaW1lKHRoaXMsIGR1cikpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiAiU2V0IiB0aGlzIERhdGVUaW1lIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSB1bml0IG9mIHRpbWUuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gVGhlIHVuaXQgdG8gZ28gdG8gdGhlIGJlZ2lubmluZyBvZi4gQ2FuIGJlICd5ZWFyJywgJ3F1YXJ0ZXInLCAnbW9udGgnLCAnd2VlaycsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJywgb3IgJ21pbGxpc2Vjb25kJy4KICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignbW9udGgnKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMy0wMScKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZigneWVhcicpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAxLTAxJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5zdGFydE9mKCd3ZWVrJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDMnLCB3ZWVrcyBhbHdheXMgc3RhcnQgb24gTW9uZGF5cwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzLCA1LCAzMCkuc3RhcnRPZignZGF5JykudG9JU09UaW1lKCk7IC8vPT4gJzAwOjAwLjAwMC0wNTowMCcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2hvdXInKS50b0lTT1RpbWUoKTsgLy89PiAnMDU6MDA6MDAuMDAwLTA1OjAwJwogICAgICAgKiBAcmV0dXJuIHtEYXRlVGltZX0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5zdGFydE9mID0gZnVuY3Rpb24gc3RhcnRPZih1bml0KSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzOwogICAgICAgIHZhciBvID0ge30sCiAgICAgICAgICAgIG5vcm1hbGl6ZWRVbml0ID0gRHVyYXRpb24ubm9ybWFsaXplVW5pdCh1bml0KTsKCiAgICAgICAgc3dpdGNoIChub3JtYWxpemVkVW5pdCkgewogICAgICAgICAgY2FzZSAieWVhcnMiOgogICAgICAgICAgICBvLm1vbnRoID0gMTsKICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2gKCiAgICAgICAgICBjYXNlICJxdWFydGVycyI6CiAgICAgICAgICBjYXNlICJtb250aHMiOgogICAgICAgICAgICBvLmRheSA9IDE7CiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCgogICAgICAgICAgY2FzZSAid2Vla3MiOgogICAgICAgICAgY2FzZSAiZGF5cyI6CiAgICAgICAgICAgIG8uaG91ciA9IDA7CiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCgogICAgICAgICAgY2FzZSAiaG91cnMiOgogICAgICAgICAgICBvLm1pbnV0ZSA9IDA7CiAgICAgICAgICAvLyBmYWxscyB0aHJvdWdoCgogICAgICAgICAgY2FzZSAibWludXRlcyI6CiAgICAgICAgICAgIG8uc2Vjb25kID0gMDsKICAgICAgICAgIC8vIGZhbGxzIHRocm91Z2gKCiAgICAgICAgICBjYXNlICJzZWNvbmRzIjoKICAgICAgICAgICAgby5taWxsaXNlY29uZCA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgLy8gbm8gZGVmYXVsdCwgaW52YWxpZCB1bml0cyB0aHJvdyBpbiBub3JtYWxpemVVbml0KCkKICAgICAgICB9CgogICAgICAgIGlmIChub3JtYWxpemVkVW5pdCA9PT0gIndlZWtzIikgewogICAgICAgICAgby53ZWVrZGF5ID0gMTsKICAgICAgICB9CgogICAgICAgIGlmIChub3JtYWxpemVkVW5pdCA9PT0gInF1YXJ0ZXJzIikgewogICAgICAgICAgdmFyIHEgPSBNYXRoLmNlaWwodGhpcy5tb250aCAvIDMpOwogICAgICAgICAgby5tb250aCA9IChxIC0gMSkgKiAzICsgMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLnNldChvKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogIlNldCIgdGhpcyBEYXRlVGltZSB0byB0aGUgZW5kIChtZWFuaW5nIHRoZSBsYXN0IG1pbGxpc2Vjb25kKSBvZiBhIHVuaXQgb2YgdGltZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBlbmQgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLmVuZE9mKCdtb250aCcpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMzFUMjM6NTk6NTkuOTk5LTA1OjAwJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZigneWVhcicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMTItMzFUMjM6NTk6NTkuOTk5LTA1OjAwJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignd2VlaycpLnRvSVNPKCk7IC8vID0+ICcyMDE0LTAzLTA5VDIzOjU5OjU5Ljk5OS0wNTowMCcsIHdlZWtzIHN0YXJ0IG9uIE1vbmRheXMKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLmVuZE9mKCdkYXknKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTAzVDIzOjU5OjU5Ljk5OS0wNTowMCcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLmVuZE9mKCdob3VyJykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QwNTo1OTo1OS45OTktMDU6MDAnCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmVuZE9mID0gZnVuY3Rpb24gZW5kT2YodW5pdCkgewogICAgICAgIHZhciBfdGhpcyRwbHVzOwoKICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5wbHVzKChfdGhpcyRwbHVzID0ge30sIF90aGlzJHBsdXNbdW5pdF0gPSAxLCBfdGhpcyRwbHVzKSkuc3RhcnRPZih1bml0KS5taW51cygxKSA6IHRoaXM7CiAgICAgIH0gLy8gT1VUUFVUCgogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLgogICAgICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLgogICAgICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgQXByIDIyJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2ZyJykudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBhdnIuIDIyJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogImZyIiB9KSAvLz0+ICcyMDE3IGF2ci4gMjInCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCJISCAnaG91cnMgYW5kJyBtbSAnbWludXRlcyciKSAvLz0+ICcyMCBob3VycyBhbmQgNTUgbWludXRlcycKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvRm9ybWF0ID0gZnVuY3Rpb24gdG9Gb3JtYXQoZm10LCBvcHRzKSB7CiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MucmVkZWZhdWx0VG9FTihvcHRzKSkuZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKHRoaXMsIGZtdCkgOiBJTlZBTElEOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgbG9jYWxpemVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBkYXRlLiBBY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYXMgdGhlIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3IgYW5kIGFueSBwcmVzZXRzIGRlZmluZWQgYnkgTHV4b24sIHN1Y2ggYXMgYERhdGVUaW1lLkRBVEVfRlVMTGAgb3IgYERhdGVUaW1lLlRJTUVfU0lNUExFYC4KICAgICAgICogVGhlIGV4YWN0IGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kIGlzIGJyb3dzZXItc3BlY2lmaWMsIGJ1dCBpbiBnZW5lcmFsIGl0IHdpbGwgcmV0dXJuIGFuIGFwcHJvcHJpYXRlIHJlcHJlc2VudGF0aW9uCiAgICAgICAqIG9mIHRoZSBEYXRlVGltZSBpbiB0aGUgYXNzaWduZWQgbG9jYWxlLgogICAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdAogICAgICAgKiBAcGFyYW0gZm9ybWF0T3B0cyB7T2JqZWN0fSAtIEludGwuRGF0ZVRpbWVGb3JtYXQgY29uc3RydWN0b3Igb3B0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0cyB0byBvdmVycmlkZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoaXMgRGF0ZVRpbWUKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoKTsgLy89PiA0LzIwLzIwMTcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkuc2V0TG9jYWxlKCdlbi1nYicpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gJzIwLzA0LzIwMTcnCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgbG9jYWxlOiAnZW4tZ2InIH0pOyAvLz0+ICcyMC8wNC8yMDE3JwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX0ZVTEwpOyAvLz0+ICdBcHJpbCAyMCwgMjAxNycKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuVElNRV9TSU1QTEUpOyAvLz0+ICcxMTozMiBBTScKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURVRJTUVfU0hPUlQpOyAvLz0+ICc0LzIwLzIwMTcsIDExOjMyIEFNJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IHdlZWtkYXk6ICdsb25nJywgbW9udGg6ICdsb25nJywgZGF5OiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodXJzZGF5LCBBcHJpbCAyMCcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnc2hvcnQnLCBtb250aDogJ3Nob3J0JywgZGF5OiAnMi1kaWdpdCcsIGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSk7IC8vPT4gJ1RodSwgQXByIDIwLCAxMToyNyBBTScKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnLCBob3VyQ3ljbGU6ICdoMjMnIH0pOyAvLz0+ICcxMTozMicKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoZm9ybWF0T3B0cywgb3B0cykgewogICAgICAgIGlmIChmb3JtYXRPcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIGZvcm1hdE9wdHMgPSBEQVRFX1NIT1JUOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpIDogSU5WQUxJRDsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgInBhcnRzIiwgbWVhbmluZyBpbmRpdmlkdWFsIHRva2VucyBhbG9uZyB3aXRoIG1ldGFkYXRhLiBUaGlzIGlzIGFsbG93cyBjYWxsZXJzIHRvIHBvc3QtcHJvY2VzcyBpbmRpdmlkdWFsIHNlY3Rpb25zIG9mIHRoZSBmb3JtYXR0ZWQgb3V0cHV0LgogICAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdC9mb3JtYXRUb1BhcnRzCiAgICAgICAqIEBwYXJhbSBvcHRzIHtPYmplY3R9IC0gSW50bC5EYXRlVGltZUZvcm1hdCBjb25zdHJ1Y3RvciBvcHRpb25zLCBzYW1lIGFzIGB0b0xvY2FsZVN0cmluZ2AuCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlUGFydHMoKTsgLy89PiBbCiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnZGF5JywgdmFsdWU6ICcyNScgfSwKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LAogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ21vbnRoJywgdmFsdWU6ICcwNScgfSwKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdsaXRlcmFsJywgdmFsdWU6ICcvJyB9LAogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ3llYXInLCB2YWx1ZTogJzE5ODInIH0KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gXQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvTG9jYWxlUGFydHMgPSBmdW5jdGlvbiB0b0xvY2FsZVBhcnRzKG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKSA6IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU08oKSAvLz0+ICcxOTgyLTA1LTI1VDAwOjAwOjAwLjAwMFonCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUtMDQ6MDAnCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgLy89PiAnMjAxNy0wNC0yMlQyMDo0NzowNS4zMzUnCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzIwMTcwNDIyVDIwNDcwNS4zMzUtMDQwMCcKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvSVNPID0gZnVuY3Rpb24gdG9JU08ob3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLnRvSVNPRGF0ZShvcHRzKSArICJUIiArIHRoaXMudG9JU09UaW1lKG9wdHMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIGRhdGUgY29tcG9uZW50CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuZm9ybWF0PSdleHRlbmRlZCddIC0gY2hvb3NlIGJldHdlZW4gdGhlIGJhc2ljIGFuZCBleHRlbmRlZCBmb3JtYXQKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDE5ODIsIDUsIDI1KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1JwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxOTgyMDUyNScKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvSVNPRGF0ZSA9IGZ1bmN0aW9uIHRvSVNPRGF0ZShfdGVtcDMpIHsKICAgICAgICB2YXIgX3JlZjUgPSBfdGVtcDMgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAzLAogICAgICAgICAgICBfcmVmNSRmb3JtYXQgPSBfcmVmNS5mb3JtYXQsCiAgICAgICAgICAgIGZvcm1hdCA9IF9yZWY1JGZvcm1hdCA9PT0gdm9pZCAwID8gImV4dGVuZGVkIiA6IF9yZWY1JGZvcm1hdDsKCiAgICAgICAgdmFyIGZtdCA9IGZvcm1hdCA9PT0gImJhc2ljIiA/ICJ5eXl5TU1kZCIgOiAieXl5eS1NTS1kZCI7CgogICAgICAgIGlmICh0aGlzLnllYXIgPiA5OTk5KSB7CiAgICAgICAgICBmbXQgPSAiKyIgKyBmbXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIGZtdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3Mgd2VlayBkYXRlCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09XZWVrRGF0ZSgpIC8vPT4gJzE5ODItVzIxLTInCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b0lTT1dlZWtEYXRlID0gZnVuY3Rpb24gdG9JU09XZWVrRGF0ZSgpIHsKICAgICAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsICJra2trLSdXJ1dXLWMiKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUncyB0aW1lIGNvbXBvbmVudAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXgKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0CiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKCkgLy89PiAnMDc6MzQ6MTkuMzYxWicKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzA3MzQxOS4zNjFaJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDA3OjM0OjE5LjM2MVonCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b0lTT1RpbWUgPSBmdW5jdGlvbiB0b0lTT1RpbWUoX3RlbXA0KSB7CiAgICAgICAgdmFyIF9yZWY2ID0gX3RlbXA0ID09PSB2b2lkIDAgPyB7fSA6IF90ZW1wNCwKICAgICAgICAgICAgX3JlZjYkc3VwcHJlc3NNaWxsaXNlID0gX3JlZjYuc3VwcHJlc3NNaWxsaXNlY29uZHMsCiAgICAgICAgICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gX3JlZjYkc3VwcHJlc3NNaWxsaXNlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY2JHN1cHByZXNzTWlsbGlzZSwKICAgICAgICAgICAgX3JlZjYkc3VwcHJlc3NTZWNvbmRzID0gX3JlZjYuc3VwcHJlc3NTZWNvbmRzLAogICAgICAgICAgICBzdXBwcmVzc1NlY29uZHMgPSBfcmVmNiRzdXBwcmVzc1NlY29uZHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjYkc3VwcHJlc3NTZWNvbmRzLAogICAgICAgICAgICBfcmVmNiRpbmNsdWRlT2Zmc2V0ID0gX3JlZjYuaW5jbHVkZU9mZnNldCwKICAgICAgICAgICAgaW5jbHVkZU9mZnNldCA9IF9yZWY2JGluY2x1ZGVPZmZzZXQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRpbmNsdWRlT2Zmc2V0LAogICAgICAgICAgICBfcmVmNiRpbmNsdWRlUHJlZml4ID0gX3JlZjYuaW5jbHVkZVByZWZpeCwKICAgICAgICAgICAgaW5jbHVkZVByZWZpeCA9IF9yZWY2JGluY2x1ZGVQcmVmaXggPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjYkaW5jbHVkZVByZWZpeCwKICAgICAgICAgICAgX3JlZjYkZm9ybWF0ID0gX3JlZjYuZm9ybWF0LAogICAgICAgICAgICBmb3JtYXQgPSBfcmVmNiRmb3JtYXQgPT09IHZvaWQgMCA/ICJleHRlbmRlZCIgOiBfcmVmNiRmb3JtYXQ7CgogICAgICAgIHJldHVybiB0b1RlY2hUaW1lRm9ybWF0KHRoaXMsIHsKICAgICAgICAgIHN1cHByZXNzU2Vjb25kczogc3VwcHJlc3NTZWNvbmRzLAogICAgICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IHN1cHByZXNzTWlsbGlzZWNvbmRzLAogICAgICAgICAgaW5jbHVkZU9mZnNldDogaW5jbHVkZU9mZnNldCwKICAgICAgICAgIGluY2x1ZGVQcmVmaXg6IGluY2x1ZGVQcmVmaXgsCiAgICAgICAgICBmb3JtYXQ6IGZvcm1hdAogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIFJGQyAyODIyLWNvbXBhdGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUsIGFsd2F5cyBpbiBVVEMKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwICswMDAwJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCAtMDQwMCcKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvUkZDMjgyMiA9IGZ1bmN0aW9uIHRvUkZDMjgyMigpIHsKICAgICAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsICJFRUUsIGRkIExMTCB5eXl5IEhIOm1tOnNzIFpaWiIsIGZhbHNlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSFRUUCBoZWFkZXJzLgogICAgICAgKiBTcGVjaWZpY2FsbHksIHRoZSBzdHJpbmcgY29uZm9ybXMgdG8gUkZDIDExMjMuCiAgICAgICAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1Byb3RvY29scy9yZmMyNjE2L3JmYzI2MTYtc2VjMy5odG1sI3NlYzMuMy4xCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCBHTVQnCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMywgMTkpLnRvSFRUUCgpIC8vPT4gJ1N1biwgMTMgSnVsIDIwMTQgMTk6MDA6MDAgR01UJwogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9IVFRQID0gZnVuY3Rpb24gdG9IVFRQKCkgewogICAgICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcy50b1VUQygpLCAiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyAnR01UJyIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgRGF0ZQogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMRGF0ZSgpIC8vPT4gJzIwMTQtMDctMTMnCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b1NRTERhdGUgPSBmdW5jdGlvbiB0b1NRTERhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLCAieXl5eS1NTS1kZCIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgVGltZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuCiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUnCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKCkgLy89PiAnMDU6MTU6MTYuMzQ1IC0wNDowMCcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcwNToxNToxNi4zNDUnCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSBBbWVyaWNhL05ld19Zb3JrJwogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9TUUxUaW1lID0gZnVuY3Rpb24gdG9TUUxUaW1lKF90ZW1wNSkgewogICAgICAgIHZhciBfcmVmNyA9IF90ZW1wNSA9PT0gdm9pZCAwID8ge30gOiBfdGVtcDUsCiAgICAgICAgICAgIF9yZWY3JGluY2x1ZGVPZmZzZXQgPSBfcmVmNy5pbmNsdWRlT2Zmc2V0LAogICAgICAgICAgICBpbmNsdWRlT2Zmc2V0ID0gX3JlZjckaW5jbHVkZU9mZnNldCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWY3JGluY2x1ZGVPZmZzZXQsCiAgICAgICAgICAgIF9yZWY3JGluY2x1ZGVab25lID0gX3JlZjcuaW5jbHVkZVpvbmUsCiAgICAgICAgICAgIGluY2x1ZGVab25lID0gX3JlZjckaW5jbHVkZVpvbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjckaW5jbHVkZVpvbmU7CgogICAgICAgIHJldHVybiB0b1RlY2hUaW1lRm9ybWF0KHRoaXMsIHsKICAgICAgICAgIGluY2x1ZGVPZmZzZXQ6IGluY2x1ZGVPZmZzZXQsCiAgICAgICAgICBpbmNsdWRlWm9uZTogaW5jbHVkZVpvbmUsCiAgICAgICAgICBzcGFjZVpvbmU6IHRydWUKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVUaW1lCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucwogICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVab25lPWZhbHNlXSAtIGluY2x1ZGUgdGhlIHpvbmUsIHN1Y2ggYXMgJ0FtZXJpY2EvTmV3X1lvcmsnLiBPdmVycmlkZXMgaW5jbHVkZU9mZnNldC4KICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgWicKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKCkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgLTA0OjAwJwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCcKICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgNywgMTMpLnRvU1FMKHsgaW5jbHVkZVpvbmU6IHRydWUgfSkgLy89PiAnMjAxNC0wNy0xMyAwMDowMDowMC4wMDAgQW1lcmljYS9OZXdfWW9yaycKICAgICAgICogQHJldHVybiB7c3RyaW5nfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvU1FMID0gZnVuY3Rpb24gdG9TUUwob3B0cykgewogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzLnRvU1FMRGF0ZSgpICsgIiAiICsgdGhpcy50b1NRTFRpbWUob3B0cyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nCiAgICAgICAqIEByZXR1cm4ge3N0cmluZ30KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRvSVNPKCkgOiBJTlZBTElEOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBtaWxsaXNlY29uZHMgb2YgdGhpcyBEYXRlVGltZS4gQWxpYXMgb2Yge0BsaW5rIERhdGVUaW1lLnRvTWlsbGlzfQogICAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udmFsdWVPZiA9IGZ1bmN0aW9uIHZhbHVlT2YoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b01pbGxpcyA9IGZ1bmN0aW9uIHRvTWlsbGlzKCkgewogICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIDogTmFOOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIHRoZSBlcG9jaCBzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuCiAgICAgICAqIEByZXR1cm4ge251bWJlcn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b1NlY29uZHMgPSBmdW5jdGlvbiB0b1NlY29uZHMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudHMgLyAxMDAwIDogTmFOOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLgogICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9KU09OID0gZnVuY3Rpb24gdG9KU09OKCkgewogICAgICAgIHJldHVybiB0aGlzLnRvSVNPKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBCU09OIHNlcmlhbGl6YWJsZSBlcXVpdmFsZW50IHRvIHRoaXMgRGF0ZVRpbWUuCiAgICAgICAqIEByZXR1cm4ge0RhdGV9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9CU09OID0gZnVuY3Rpb24gdG9CU09OKCkgewogICAgICAgIHJldHVybiB0aGlzLnRvSlNEYXRlKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRGF0ZVRpbWUncyB5ZWFyLCBtb250aCwgZGF5LCBhbmQgc28gb24uCiAgICAgICAqIEBwYXJhbSBvcHRzIC0gb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyB0aGUgb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZUNvbmZpZz1mYWxzZV0gLSBpbmNsdWRlIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlcyBpbiB0aGUgb3V0cHV0CiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvT2JqZWN0KCkgLy89PiB7IHllYXI6IDIwMTcsIG1vbnRoOiA0LCBkYXk6IDIyLCBob3VyOiAyMCwgbWludXRlOiA0OSwgc2Vjb25kOiA0MiwgbWlsbGlzZWNvbmQ6IDI2OCB9CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b09iamVjdCA9IGZ1bmN0aW9uIHRvT2JqZWN0KG9wdHMpIHsKICAgICAgICBpZiAob3B0cyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRzID0ge307CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHt9OwoKICAgICAgICB2YXIgYmFzZSA9IF9leHRlbmRzKHt9LCB0aGlzLmMpOwoKICAgICAgICBpZiAob3B0cy5pbmNsdWRlQ29uZmlnKSB7CiAgICAgICAgICBiYXNlLm91dHB1dENhbGVuZGFyID0gdGhpcy5vdXRwdXRDYWxlbmRhcjsKICAgICAgICAgIGJhc2UubnVtYmVyaW5nU3lzdGVtID0gdGhpcy5sb2MubnVtYmVyaW5nU3lzdGVtOwogICAgICAgICAgYmFzZS5sb2NhbGUgPSB0aGlzLmxvYy5sb2NhbGU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmFzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyBhIEphdmFTY3JpcHQgRGF0ZSBlcXVpdmFsZW50IHRvIHRoaXMgRGF0ZVRpbWUuCiAgICAgICAqIEByZXR1cm4ge0RhdGV9CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8udG9KU0RhdGUgPSBmdW5jdGlvbiB0b0pTRGF0ZSgpIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy5pc1ZhbGlkID8gdGhpcy50cyA6IE5hTik7CiAgICAgIH0gLy8gQ09NUEFSRQoKICAgICAgLyoqCiAgICAgICAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBEYXRlVGltZXMgYXMgYSBEdXJhdGlvbi4KICAgICAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBEYXRlVGltZSB0byBjb21wYXJlIHRoaXMgb25lIHRvCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbdW5pdD1bJ21pbGxpc2Vjb25kcyddXSAtIHRoZSB1bml0IG9yIGFycmF5IG9mIHVuaXRzIChzdWNoIGFzICdob3Vycycgb3IgJ2RheXMnKSB0byBpbmNsdWRlIGluIHRoZSBkdXJhdGlvbi4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiB0aGUgRHVyYXRpb24KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlCiAgICAgICAqIEBleGFtcGxlCiAgICAgICAqIHZhciBpMSA9IERhdGVUaW1lLmZyb21JU08oJzE5ODItMDUtMjVUMDk6NDUnKSwKICAgICAgICogICAgIGkyID0gRGF0ZVRpbWUuZnJvbUlTTygnMTk4My0xMC0xNFQxMDozMCcpOwogICAgICAgKiBpMi5kaWZmKGkxKS50b09iamVjdCgpIC8vPT4geyBtaWxsaXNlY29uZHM6IDQzODA3NTAwMDAwIH0KICAgICAgICogaTIuZGlmZihpMSwgJ2hvdXJzJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDEyMTY4Ljc1IH0KICAgICAgICogaTIuZGlmZihpMSwgWydtb250aHMnLCAnZGF5cyddKS50b09iamVjdCgpIC8vPT4geyBtb250aHM6IDE2LCBkYXlzOiAxOS4wMzEyNSB9CiAgICAgICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnLCAnaG91cnMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTksIGhvdXJzOiAwLjc1IH0KICAgICAgICogQHJldHVybiB7RHVyYXRpb259CiAgICAgICAqLwogICAgICA7CgogICAgICBfcHJvdG8uZGlmZiA9IGZ1bmN0aW9uIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCwgb3B0cykgewogICAgICAgIGlmICh1bml0ID09PSB2b2lkIDApIHsKICAgICAgICAgIHVuaXQgPSAibWlsbGlzZWNvbmRzIjsKICAgICAgICB9CgogICAgICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdHMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHsKICAgICAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKCJjcmVhdGVkIGJ5IGRpZmZpbmcgYW4gaW52YWxpZCBEYXRlVGltZSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGR1ck9wdHMgPSBfZXh0ZW5kcyh7CiAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlLAogICAgICAgICAgbnVtYmVyaW5nU3lzdGVtOiB0aGlzLm51bWJlcmluZ1N5c3RlbQogICAgICAgIH0sIG9wdHMpOwoKICAgICAgICB2YXIgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSwKICAgICAgICAgICAgb3RoZXJJc0xhdGVyID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCkgPiB0aGlzLnZhbHVlT2YoKSwKICAgICAgICAgICAgZWFybGllciA9IG90aGVySXNMYXRlciA/IHRoaXMgOiBvdGhlckRhdGVUaW1lLAogICAgICAgICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLAogICAgICAgICAgICBkaWZmZWQgPSBfZGlmZihlYXJsaWVyLCBsYXRlciwgdW5pdHMsIGR1ck9wdHMpOwoKICAgICAgICByZXR1cm4gb3RoZXJJc0xhdGVyID8gZGlmZmVkLm5lZ2F0ZSgpIDogZGlmZmVkOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuCiAgICAgICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUuZGlmZn0KICAgICAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZQogICAgICAgKiBAcmV0dXJuIHtEdXJhdGlvbn0KICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by5kaWZmTm93ID0gZnVuY3Rpb24gZGlmZk5vdyh1bml0LCBvcHRzKSB7CiAgICAgICAgaWYgKHVuaXQgPT09IHZvaWQgMCkgewogICAgICAgICAgdW5pdCA9ICJtaWxsaXNlY29uZHMiOwogICAgICAgIH0KCiAgICAgICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0cyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuZGlmZihEYXRlVGltZS5ub3coKSwgdW5pdCwgb3B0cyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiBhbiBJbnRlcnZhbCBzcGFubmluZyBiZXR3ZWVuIHRoaXMgRGF0ZVRpbWUgYW5kIGFub3RoZXIgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtEYXRlVGltZX0gb3RoZXJEYXRlVGltZSAtIHRoZSBvdGhlciBlbmQgcG9pbnQgb2YgdGhlIEludGVydmFsCiAgICAgICAqIEByZXR1cm4ge0ludGVydmFsfQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnVudGlsID0gZnVuY3Rpb24gdW50aWwob3RoZXJEYXRlVGltZSkgewogICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpczsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBEYXRlVGltZSBpcyBpbiB0aGUgc2FtZSB1bml0IG9mIHRpbWUgYXMgYW5vdGhlciBEYXRlVGltZS4KICAgICAgICogSGlnaGVyLW9yZGVyIHVuaXRzIG11c3QgYWxzbyBiZSBpZGVudGljYWwgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGB0cnVlYC4KICAgICAgICogTm90ZSB0aGF0IHRpbWUgem9uZXMgYXJlICoqaWdub3JlZCoqIGluIHRoaXMgY29tcGFyaXNvbiwgd2hpY2ggY29tcGFyZXMgdGhlICoqbG9jYWwqKiBjYWxlbmRhciB0aW1lLiBVc2Uge0BsaW5rIERhdGVUaW1lLnNldFpvbmV9IHRvIGNvbnZlcnQgb25lIG9mIHRoZSBkYXRlcyBpZiBuZWVkZWQuCiAgICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgb3RoZXIgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNoZWNrIHNhbWVuZXNzIG9uCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLmhhc1NhbWUob3RoZXJEVCwgJ2RheScpOyAvL34+IHRydWUgaWYgb3RoZXJEVCBpcyBpbiB0aGUgc2FtZSBjdXJyZW50IGNhbGVuZGFyIGRheQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmhhc1NhbWUgPSBmdW5jdGlvbiBoYXNTYW1lKG90aGVyRGF0ZVRpbWUsIHVuaXQpIHsKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlOwogICAgICAgIHZhciBpbnB1dE1zID0gb3RoZXJEYXRlVGltZS52YWx1ZU9mKCk7CiAgICAgICAgdmFyIG90aGVyWm9uZURhdGVUaW1lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwgewogICAgICAgICAga2VlcExvY2FsVGltZTogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBvdGhlclpvbmVEYXRlVGltZS5zdGFydE9mKHVuaXQpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSBvdGhlclpvbmVEYXRlVGltZS5lbmRPZih1bml0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRXF1YWxpdHkgY2hlY2sKICAgICAgICogVHdvIERhdGVUaW1lcyBhcmUgZXF1YWwgaWZmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIG1pbGxpc2Vjb25kLCBoYXZlIHRoZSBzYW1lIHpvbmUgYW5kIGxvY2F0aW9uLCBhbmQgYXJlIGJvdGggdmFsaWQuCiAgICAgICAqIFRvIGNvbXBhcmUganVzdCB0aGUgbWlsbGlzZWNvbmQgdmFsdWVzLCB1c2UgYCtkdDEgPT09ICtkdDJgLgogICAgICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlciAtIHRoZSBvdGhlciBEYXRlVGltZQogICAgICAgKiBAcmV0dXJuIHtib29sZWFufQogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyhvdGhlcikgewogICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgJiYgb3RoZXIuaXNWYWxpZCAmJiB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmIHRoaXMuem9uZS5lcXVhbHMob3RoZXIuem9uZSkgJiYgdGhpcy5sb2MuZXF1YWxzKG90aGVyLmxvYyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0aGlzIHRpbWUgcmVsYXRpdmUgdG8gbm93LCBzdWNoIGFzICJpbiB0d28gZGF5cyIuIENhbiBvbmx5IGludGVybmF0aW9uYWxpemUgaWYgeW91cgogICAgICAgKiBwbGF0Zm9ybSBzdXBwb3J0cyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdC4gUm91bmRzIGRvd24gYnkgZGVmYXVsdC4KICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBvdXRwdXQKICAgICAgICogQHBhcmFtIHtEYXRlVGltZX0gW29wdGlvbnMuYmFzZT1EYXRlVGltZS5ub3coKV0gLSB0aGUgRGF0ZVRpbWUgdG8gdXNlIGFzIHRoZSBiYXNpcyB0byB3aGljaCB0aGlzIHRpbWUgaXMgY29tcGFyZWQuIERlZmF1bHRzIHRvIG5vdy4KICAgICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnN0eWxlPSJsb25nIl0gLSB0aGUgc3R5bGUgb2YgdW5pdHMsIG11c3QgYmUgImxvbmciLCAic2hvcnQiLCBvciAibmFycm93IgogICAgICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdCBvciBhcnJheSBvZiB1bml0czsgaWYgb21pdHRlZCwgb3IgYW4gYXJyYXksIHRoZSBtZXRob2Qgd2lsbCBwaWNrIHRoZSBiZXN0IHVuaXQuIFVzZSBhbiBhcnJheSBvciBvbmUgb2YgInllYXJzIiwgInF1YXJ0ZXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCBvciAic2Vjb25kcyIKICAgICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yb3VuZD10cnVlXSAtIHdoZXRoZXIgdG8gcm91bmQgdGhlIG51bWJlcnMgaW4gdGhlIG91dHB1dC4KICAgICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnBhZGRpbmc9MF0gLSBwYWRkaW5nIGluIG1pbGxpc2Vjb25kcy4gVGhpcyBhbGxvd3MgeW91IHRvIHJvdW5kIHVwIHRoZSByZXN1bHQgaWYgaXQgZml0cyBpbnNpZGUgdGhlIHRocmVzaG9sZC4gRG9uJ3QgdXNlIGluIGNvbWJpbmF0aW9uIHdpdGgge3JvdW5kOiBmYWxzZX0gYmVjYXVzZSB0aGUgZGVjaW1hbCBvdXRwdXQgd2lsbCBpbmNsdWRlIHRoZSBwYWRkaW5nLgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5sb2NhbGUgLSBvdmVycmlkZSB0aGUgbG9jYWxlIG9mIHRoaXMgRGF0ZVRpbWUKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpcwogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiAiaW4gMSBkYXkiCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgiZXMiKS50b1JlbGF0aXZlKHsgZGF5czogMSB9KSAvLz0+ICJkZW50cm8gZGUgMSBkw61hIgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKHsgbG9jYWxlOiAiZnIiIH0pIC8vPT4gImRhbnMgMjMgaGV1cmVzIgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gIjIgZGF5cyBhZ28iCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgZGF5czogMiB9KS50b1JlbGF0aXZlKHsgdW5pdDogImhvdXJzIiB9KSAvLz0+ICI0OCBob3VycyBhZ28iCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiAiMS41IGRheXMgYWdvIgogICAgICAgKi8KICAgICAgOwoKICAgICAgX3Byb3RvLnRvUmVsYXRpdmUgPSBmdW5jdGlvbiB0b1JlbGF0aXZlKG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgfQoKICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7CiAgICAgICAgdmFyIGJhc2UgPSBvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwgewogICAgICAgICAgem9uZTogdGhpcy56b25lCiAgICAgICAgfSksCiAgICAgICAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcgPyB0aGlzIDwgYmFzZSA/IC1vcHRpb25zLnBhZGRpbmcgOiBvcHRpb25zLnBhZGRpbmcgOiAwOwogICAgICAgIHZhciB1bml0cyA9IFsieWVhcnMiLCAibW9udGhzIiwgImRheXMiLCAiaG91cnMiLCAibWludXRlcyIsICJzZWNvbmRzIl07CiAgICAgICAgdmFyIHVuaXQgPSBvcHRpb25zLnVuaXQ7CgogICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMudW5pdCkpIHsKICAgICAgICAgIHVuaXRzID0gb3B0aW9ucy51bml0OwogICAgICAgICAgdW5pdCA9IHVuZGVmaW5lZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBkaWZmUmVsYXRpdmUoYmFzZSwgdGhpcy5wbHVzKHBhZGRpbmcpLCBfZXh0ZW5kcyh7fSwgb3B0aW9ucywgewogICAgICAgICAgbnVtZXJpYzogImFsd2F5cyIsCiAgICAgICAgICB1bml0czogdW5pdHMsCiAgICAgICAgICB1bml0OiB1bml0CiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgZGF0ZSByZWxhdGl2ZSB0byB0b2RheSwgc3VjaCBhcyAieWVzdGVyZGF5IiBvciAibmV4dCBtb250aCIuCiAgICAgICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0CiAgICAgICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgInllYXJzIiwgInF1YXJ0ZXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsIG9yICJkYXlzIgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzCiAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcigpIC8vPT4gInRvbW9ycm93IgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoImVzIikucGx1cyh7IGRheXM6IDEgfSkudG9SZWxhdGl2ZSgpIC8vPT4gIiJtYcOxYW5hIgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoeyBsb2NhbGU6ICJmciIgfSkgLy89PiAiZGVtYWluIgogICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKCkgLy89PiAiMiBkYXlzIGFnbyIKICAgICAgICovCiAgICAgIDsKCiAgICAgIF9wcm90by50b1JlbGF0aXZlQ2FsZW5kYXIgPSBmdW5jdGlvbiB0b1JlbGF0aXZlQ2FsZW5kYXIob3B0aW9ucykgewogICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9CgogICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gZGlmZlJlbGF0aXZlKG9wdGlvbnMuYmFzZSB8fCBEYXRlVGltZS5mcm9tT2JqZWN0KHt9LCB7CiAgICAgICAgICB6b25lOiB0aGlzLnpvbmUKICAgICAgICB9KSwgdGhpcywgX2V4dGVuZHMoe30sIG9wdGlvbnMsIHsKICAgICAgICAgIG51bWVyaWM6ICJhdXRvIiwKICAgICAgICAgIHVuaXRzOiBbInllYXJzIiwgIm1vbnRocyIsICJkYXlzIl0sCiAgICAgICAgICBjYWxlbmRhcnk6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB0aGUgbWluIG9mIHNldmVyYWwgZGF0ZSB0aW1lcwogICAgICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtaW5pbXVtCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWluIERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnQKICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLm1pbiA9IGZ1bmN0aW9uIG1pbigpIHsKICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZGF0ZVRpbWVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgICAgZGF0ZVRpbWVzW19rZXldID0gYXJndW1lbnRzW19rZXldOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFkYXRlVGltZXMuZXZlcnkoRGF0ZVRpbWUuaXNEYXRlVGltZSkpIHsKICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigibWluIHJlcXVpcmVzIGFsbCBhcmd1bWVudHMgYmUgRGF0ZVRpbWVzIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmVzdEJ5KGRhdGVUaW1lcywgZnVuY3Rpb24gKGkpIHsKICAgICAgICAgIHJldHVybiBpLnZhbHVlT2YoKTsKICAgICAgICB9LCBNYXRoLm1pbik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lcwogICAgICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtYXhpbXVtCiAgICAgICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWF4IERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnQKICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLm1heCA9IGZ1bmN0aW9uIG1heCgpIHsKICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRhdGVUaW1lcyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgZGF0ZVRpbWVzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWRhdGVUaW1lcy5ldmVyeShEYXRlVGltZS5pc0RhdGVUaW1lKSkgewogICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXMiKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCBmdW5jdGlvbiAoaSkgewogICAgICAgICAgcmV0dXJuIGkudmFsdWVPZigpOwogICAgICAgIH0sIE1hdGgubWF4KTsKICAgICAgfSAvLyBNSVNDCgogICAgICAvKioKICAgICAgICogRXhwbGFpbiBob3cgYSBzdHJpbmcgd291bGQgYmUgcGFyc2VkIGJ5IGZyb21Gb3JtYXQoKQogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBzdHJpbmcgdG8gcGFyc2UKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGZtdCAtIHRoZSBmb3JtYXQgdGhlIHN0cmluZyBpcyBleHBlY3RlZCB0byBiZSBpbiAoc2VlIGRlc2NyaXB0aW9uKQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGFrZW4gYnkgZnJvbUZvcm1hdCgpCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0KICAgICAgICovCiAgICAgIDsKCiAgICAgIERhdGVUaW1lLmZyb21Gb3JtYXRFeHBsYWluID0gZnVuY3Rpb24gZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKSB7CiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgICAgICAgb3B0aW9ucyA9IHt9OwogICAgICAgIH0KCiAgICAgICAgdmFyIF9vcHRpb25zID0gb3B0aW9ucywKICAgICAgICAgICAgX29wdGlvbnMkbG9jYWxlID0gX29wdGlvbnMubG9jYWxlLAogICAgICAgICAgICBsb2NhbGUgPSBfb3B0aW9ucyRsb2NhbGUgPT09IHZvaWQgMCA/IG51bGwgOiBfb3B0aW9ucyRsb2NhbGUsCiAgICAgICAgICAgIF9vcHRpb25zJG51bWJlcmluZ1N5cyA9IF9vcHRpb25zLm51bWJlcmluZ1N5c3RlbSwKICAgICAgICAgICAgbnVtYmVyaW5nU3lzdGVtID0gX29wdGlvbnMkbnVtYmVyaW5nU3lzID09PSB2b2lkIDAgPyBudWxsIDogX29wdGlvbnMkbnVtYmVyaW5nU3lzLAogICAgICAgICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7CiAgICAgICAgICBsb2NhbGU6IGxvY2FsZSwKICAgICAgICAgIG51bWJlcmluZ1N5c3RlbTogbnVtYmVyaW5nU3lzdGVtLAogICAgICAgICAgZGVmYXVsdFRvRU46IHRydWUKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZXhwbGFpbkZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEBkZXByZWNhdGVkIHVzZSBmcm9tRm9ybWF0RXhwbGFpbiBpbnN0ZWFkCiAgICAgICAqLwogICAgICA7CgogICAgICBEYXRlVGltZS5mcm9tU3RyaW5nRXhwbGFpbiA9IGZ1bmN0aW9uIGZyb21TdHJpbmdFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucykgewogICAgICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBEYXRlVGltZS5mcm9tRm9ybWF0RXhwbGFpbih0ZXh0LCBmbXQsIG9wdGlvbnMpOwogICAgICB9IC8vIEZPUk1BVCBQUkVTRVRTCgogICAgICAvKioKICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAxMC8xNC8xOTgzCiAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAqLwogICAgICA7CgogICAgICBfY3JlYXRlQ2xhc3MoRGF0ZVRpbWUsIFt7CiAgICAgICAga2V5OiAiaXNWYWxpZCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZAogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiaW52YWxpZFJlYXNvbiIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRGF0ZVRpbWUgYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIERhdGVUaW1lIGlzIHZhbGlkCiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJpbnZhbGlkRXhwbGFuYXRpb24iLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZCA/IHRoaXMuaW52YWxpZC5leHBsYW5hdGlvbiA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgbG9jYWxlIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2VuLUdCJy4gVGhlIGxvY2FsZSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWUKICAgICAgICAgKgogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAibG9jYWxlIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEYXRlVGltZSwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZQogICAgICAgICAqCiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJudW1iZXJpbmdTeXN0ZW0iLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgb3V0cHV0IGNhbGVuZGFyIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2lzbGFtaWMnLiBUaGUgb3V0cHV0IGNhbGVuZGFyIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEYXRlVGltZQogICAgICAgICAqCiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJvdXRwdXRDYWxlbmRhciIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgOiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHRpbWUgem9uZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBEYXRlVGltZS4KICAgICAgICAgKiBAdHlwZSB7Wm9uZX0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJ6b25lIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLl96b25lOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHRpbWUgem9uZS4KICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogInpvbmVOYW1lIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnpvbmUubmFtZSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgeWVhcgogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS55ZWFyIC8vPT4gMjAxNwogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAieWVhciIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnllYXIgOiBOYU47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgcXVhcnRlcgogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5xdWFydGVyIC8vPT4gMgogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAicXVhcnRlciIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gTWF0aC5jZWlsKHRoaXMuYy5tb250aCAvIDMpIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIG1vbnRoICgxLTEyKS4KICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkubW9udGggLy89PiA1CiAgICAgICAgICogQHR5cGUge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJtb250aCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1vbnRoIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGRheSBvZiB0aGUgbW9udGggKDEtMzBpc2gpLgogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5kYXkgLy89PiAyNQogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiZGF5IiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuZGF5IDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGhvdXIgb2YgdGhlIGRheSAoMC0yMykuCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDkpLmhvdXIgLy89PiA5CiAgICAgICAgICogQHR5cGUge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJob3VyIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuaG91ciA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBtaW51dGUgb2YgdGhlIGhvdXIgKDAtNTkpLgogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCkubWludXRlIC8vPT4gMzAKICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm1pbnV0ZSIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbnV0ZSA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSAoMC01OSkuCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1Mikuc2Vjb25kIC8vPT4gNTIKICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogInNlY29uZCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLnNlY29uZCA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kICgwLTk5OSkuCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1MiwgNjU0KS5taWxsaXNlY29uZCAvLz0+IDY1NAogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAibWlsbGlzZWNvbmQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5taWxsaXNlY29uZCA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSB3ZWVrIHllYXIKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMiwgMzEpLndlZWtZZWFyIC8vPT4gMjAxNQogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAid2Vla1llYXIiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciAoMS01MmlzaCkuCiAgICAgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUpLndlZWtOdW1iZXIgLy89PiAyMQogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAid2Vla051bWJlciIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gcG9zc2libHlDYWNoZWRXZWVrRGF0YSh0aGlzKS53ZWVrTnVtYmVyIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGRheSBvZiB0aGUgd2Vlay4KICAgICAgICAgKiAxIGlzIE1vbmRheSBhbmQgNyBpcyBTdW5kYXkKICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAxMSwgMzEpLndlZWtkYXkgLy89PiA0CiAgICAgICAgICogQHR5cGUge251bWJlcn0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJ3ZWVrZGF5IiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtkYXkgOiBOYU47CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgb3JkaW5hbCAobWVhbmluZyB0aGUgZGF5IG9mIHRoZSB5ZWFyKQogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5vcmRpbmFsIC8vPT4gMTQ1CiAgICAgICAgICogQHR5cGUge251bWJlcnxEYXRlVGltZX0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJvcmRpbmFsIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKS5vcmRpbmFsIDogTmFOOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdCcuCiAgICAgICAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aFNob3J0IC8vPT4gT2N0CiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJtb250aFNob3J0IiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLm1vbnRocygic2hvcnQiLCB7CiAgICAgICAgICAgIGxvY09iajogdGhpcy5sb2MKICAgICAgICAgIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgbG9uZyBtb250aCBuYW1lLCBzdWNoIGFzICdPY3RvYmVyJy4KICAgICAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLm1vbnRoTG9uZyAvLz0+IE9jdG9iZXIKICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm1vbnRoTG9uZyIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoImxvbmciLCB7CiAgICAgICAgICAgIGxvY09iajogdGhpcy5sb2MKICAgICAgICAgIH0pW3RoaXMubW9udGggLSAxXSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCB0aGUgaHVtYW4gcmVhZGFibGUgc2hvcnQgd2Vla2RheSwgc3VjaCBhcyAnTW9uJy4KICAgICAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlTaG9ydCAvLz0+IE1vbgogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAid2Vla2RheVNob3J0IiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbmZvLndlZWtkYXlzKCJzaG9ydCIsIHsKICAgICAgICAgICAgbG9jT2JqOiB0aGlzLmxvYwogICAgICAgICAgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgd2Vla2RheSwgc3VjaCBhcyAnTW9uZGF5Jy4KICAgICAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlMb25nIC8vPT4gTW9uZGF5CiAgICAgICAgICogQHR5cGUge3N0cmluZ30KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJ3ZWVrZGF5TG9uZyIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby53ZWVrZGF5cygibG9uZyIsIHsKICAgICAgICAgICAgbG9jT2JqOiB0aGlzLmxvYwogICAgICAgICAgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIFVUQyBvZmZzZXQgb2YgdGhpcyBEYXRlVGltZSBpbiBtaW51dGVzCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkub2Zmc2V0IC8vPT4gLTI0MAogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLm9mZnNldCAvLz0+IDAKICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm9mZnNldCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gK3RoaXMubyA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBzaG9ydCBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSAiRVNUIiBvciAiRURUIi4KICAgICAgICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIm9mZnNldE5hbWVTaG9ydCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnpvbmUub2Zmc2V0TmFtZSh0aGlzLnRzLCB7CiAgICAgICAgICAgICAgZm9ybWF0OiAic2hvcnQiLAogICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBsb25nIGh1bWFuIG5hbWUgZm9yIHRoZSB6b25lJ3MgY3VycmVudCBvZmZzZXQsIGZvciBleGFtcGxlICJFYXN0ZXJuIFN0YW5kYXJkIFRpbWUiIG9yICJFYXN0ZXJuIERheWxpZ2h0IFRpbWUiLgogICAgICAgICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZAogICAgICAgICAqIEB0eXBlIHtzdHJpbmd9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAib2Zmc2V0TmFtZUxvbmciLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywgewogICAgICAgICAgICAgIGZvcm1hdDogImxvbmciLAogICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHdoZXRoZXIgdGhpcyB6b25lJ3Mgb2Zmc2V0IGV2ZXIgY2hhbmdlcywgYXMgaW4gYSBEU1QuCiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiaXNPZmZzZXRGaXhlZCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy56b25lLmlzVW5pdmVyc2FsIDogbnVsbDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHdoZXRoZXIgdGhlIERhdGVUaW1lIGlzIGluIGEgRFNULgogICAgICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImlzSW5EU1QiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgaWYgKHRoaXMuaXNPZmZzZXRGaXhlZCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7CiAgICAgICAgICAgICAgbW9udGg6IDEKICAgICAgICAgICAgfSkub2Zmc2V0IHx8IHRoaXMub2Zmc2V0ID4gdGhpcy5zZXQoewogICAgICAgICAgICAgIG1vbnRoOiA1CiAgICAgICAgICAgIH0pLm9mZnNldDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgRGF0ZVRpbWUgaXMgaW4gYSBsZWFwIHllYXIsIGZhbHNlIG90aGVyd2lzZQogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmlzSW5MZWFwWWVhciAvLz0+IHRydWUKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5pc0luTGVhcFllYXIgLy89PiBmYWxzZQogICAgICAgICAqIEB0eXBlIHtib29sZWFufQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImlzSW5MZWFwWWVhciIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGlzIERhdGVUaW1lJ3MgbW9udGgKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAyKS5kYXlzSW5Nb250aCAvLz0+IDI5CiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNiwgMykuZGF5c0luTW9udGggLy89PiAzMQogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiZGF5c0luTW9udGgiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuZGF5c0luWWVhciAvLz0+IDM2NgogICAgICAgICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTMpLmRheXNJblllYXIgLy89PiAzNjUKICAgICAgICAgKiBAdHlwZSB7bnVtYmVyfQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogImRheXNJblllYXIiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IGRheXNJblllYXIodGhpcy55ZWFyKSA6IE5hTjsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdlZWtzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyCiAgICAgICAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlCiAgICAgICAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAwNCkud2Vla3NJbldlZWtZZWFyIC8vPT4gNTMKICAgICAgICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS53ZWVrc0luV2Vla1llYXIgLy89PiA1MgogICAgICAgICAqIEB0eXBlIHtudW1iZXJ9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAid2Vla3NJbldlZWtZZWFyIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47CiAgICAgICAgfQogICAgICB9XSwgW3sKICAgICAgICBrZXk6ICJEQVRFX1NIT1JUIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBEQVRFX1NIT1JUOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMnCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJEQVRFX01FRCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gREFURV9NRUQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIHtAbGluayBEYXRlVGltZS50b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgT2N0IDE0LCAxOTgzJwogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiREFURV9NRURfV0lUSF9XRUVLREFZIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBEQVRFX01FRF9XSVRIX1dFRUtEQVk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIHtAbGluayBEYXRlVGltZS50b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMnCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJEQVRFX0ZVTEwiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIERBVEVfRlVMTDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnVHVlc2RheSwgT2N0b2JlciAxNCwgMTk4MycKICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIkRBVEVfSFVHRSIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gREFURV9IVUdFOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiVElNRV9TSU1QTEUiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIFRJTUVfU0lNUExFOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiVElNRV9XSVRIX1NFQ09ORFMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIFRJTUVfV0lUSF9TRUNPTkRTOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIlRJTUVfV0lUSF9TSE9SVF9PRkZTRVQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIFRJTUVfV0lUSF9TSE9SVF9PRkZTRVQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIHtAbGluayBEYXRlVGltZS50b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiVElNRV9XSVRIX0xPTkdfT0ZGU0VUIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBUSU1FX1dJVEhfTE9OR19PRkZTRVQ7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIHtAbGluayBEYXRlVGltZS50b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwJywgYWx3YXlzIDI0LWhvdXIuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJUSU1FXzI0X1NJTVBMRSIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gVElNRV8yNF9TSU1QTEU7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIHtAbGluayBEYXRlVGltZS50b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzJywgYWx3YXlzIDI0LWhvdXIuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJUSU1FXzI0X1dJVEhfU0VDT05EUyIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gVElNRV8yNF9XSVRIX1NFQ09ORFM7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIHtAbGluayBEYXRlVGltZS50b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEVEVCcsIGFsd2F5cyAyNC1ob3VyLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRWFzdGVybiBEYXlsaWdodCBUaW1lJywgYWx3YXlzIDI0LWhvdXIuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJUSU1FXzI0X1dJVEhfTE9OR19PRkZTRVQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMTAvMTQvMTk4MywgOTozMCBBTScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiREFURVRJTUVfU0hPUlQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIERBVEVUSU1FX1NIT1JUOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUzsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJEQVRFVElNRV9NRUQiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIERBVEVUSU1FX01FRDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0IDE0LCAxOTgzLCA5OjMwOjMzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmksIDE0IE9jdCAxOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuCiAgICAgICAgICogQHR5cGUge09iamVjdH0KICAgICAgICAgKi8KCiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiB7QGxpbmsgRGF0ZVRpbWUudG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiREFURVRJTUVfRlVMTCIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gREFURVRJTUVfRlVMTDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MywgOTozMDozMyBBTSBFRFQnLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy4KICAgICAgICAgKiBAdHlwZSB7T2JqZWN0fQogICAgICAgICAqLwoKICAgICAgfSwgewogICAgICAgIGtleTogIkRBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTIiwKICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICAgIHJldHVybiBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUzsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiREFURVRJTUVfSFVHRSIsCiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgICByZXR1cm4gREFURVRJTUVfSFVHRTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICoge0BsaW5rIERhdGVUaW1lLnRvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpZGF5LCBPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVhc3Rlcm4gRGF5bGlnaHQgVGltZScuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLgogICAgICAgICAqIEB0eXBlIHtPYmplY3R9CiAgICAgICAgICovCgogICAgICB9LCB7CiAgICAgICAga2V5OiAiREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFMiLAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkgewogICAgICAgICAgcmV0dXJuIERBVEVUSU1FX0hVR0VfV0lUSF9TRUNPTkRTOwogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIERhdGVUaW1lOwogICAgfSgpOwogICAgZnVuY3Rpb24gZnJpZW5kbHlEYXRlVGltZShkYXRlVGltZWlzaCkgewogICAgICBpZiAoRGF0ZVRpbWUuaXNEYXRlVGltZShkYXRlVGltZWlzaCkpIHsKICAgICAgICByZXR1cm4gZGF0ZVRpbWVpc2g7CiAgICAgIH0gZWxzZSBpZiAoZGF0ZVRpbWVpc2ggJiYgZGF0ZVRpbWVpc2gudmFsdWVPZiAmJiBpc051bWJlcihkYXRlVGltZWlzaC52YWx1ZU9mKCkpKSB7CiAgICAgICAgcmV0dXJuIERhdGVUaW1lLmZyb21KU0RhdGUoZGF0ZVRpbWVpc2gpOwogICAgICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIHR5cGVvZiBkYXRlVGltZWlzaCA9PT0gIm9iamVjdCIpIHsKICAgICAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdChkYXRlVGltZWlzaCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCJVbmtub3duIGRhdGV0aW1lIGFyZ3VtZW50OiAiICsgZGF0ZVRpbWVpc2ggKyAiLCBvZiB0eXBlICIgKyB0eXBlb2YgZGF0ZVRpbWVpc2gpOwogICAgICB9CiAgICB9CgogICAgdmFyIFZFUlNJT04gPSAiMi4wLjIiOwoKICAgIHZhciBEYXRlVGltZV8xID0gbHV4b24uRGF0ZVRpbWUgPSBEYXRlVGltZTsKICAgIHZhciBEdXJhdGlvbl8xID0gbHV4b24uRHVyYXRpb24gPSBEdXJhdGlvbjsKICAgIGx1eG9uLkZpeGVkT2Zmc2V0Wm9uZSA9IEZpeGVkT2Zmc2V0Wm9uZTsKICAgIGx1eG9uLklBTkFab25lID0gSUFOQVpvbmU7CiAgICBsdXhvbi5JbmZvID0gSW5mbzsKICAgIGx1eG9uLkludGVydmFsID0gSW50ZXJ2YWw7CiAgICBsdXhvbi5JbnZhbGlkWm9uZSA9IEludmFsaWRab25lOwogICAgbHV4b24uU2V0dGluZ3MgPSBTZXR0aW5nczsKICAgIGx1eG9uLlN5c3RlbVpvbmUgPSBTeXN0ZW1ab25lOwogICAgbHV4b24uVkVSU0lPTiA9IFZFUlNJT047CiAgICBsdXhvbi5ab25lID0gWm9uZTsKCiAgICAvKiogRnVuY3Rpb25hbCByZXR1cm4gdHlwZSBmb3IgZXJyb3IgaGFuZGxpbmcuICovDQogICAgY2xhc3MgU3VjY2VzcyB7DQogICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7DQogICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7DQogICAgICAgICAgICB0aGlzLnN1Y2Nlc3NmdWwgPSB0cnVlOw0KICAgICAgICB9DQogICAgICAgIG1hcChmKSB7DQogICAgICAgICAgICByZXR1cm4gbmV3IFN1Y2Nlc3MoZih0aGlzLnZhbHVlKSk7DQogICAgICAgIH0NCiAgICAgICAgZmxhdE1hcChmKSB7DQogICAgICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTsNCiAgICAgICAgfQ0KICAgICAgICBvckVsc2UoX3ZhbHVlKSB7DQogICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsNCiAgICAgICAgfQ0KICAgICAgICBvckVsc2VUaHJvdyhfbWVzc2FnZSkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7DQogICAgICAgIH0NCiAgICB9DQogICAgY2xhc3MgRmFpbHVyZSB7DQogICAgICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7DQogICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7DQogICAgICAgICAgICB0aGlzLnN1Y2Nlc3NmdWwgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBtYXAoX2YpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9DQogICAgICAgIGZsYXRNYXAoX2YpIHsNCiAgICAgICAgICAgIHJldHVybiB0aGlzOw0KICAgICAgICB9DQogICAgICAgIG9yRWxzZSh2YWx1ZSkgew0KICAgICAgICAgICAgcmV0dXJuIHZhbHVlOw0KICAgICAgICB9DQogICAgICAgIG9yRWxzZVRocm93KG1lc3NhZ2UpIHsNCiAgICAgICAgICAgIGlmIChtZXNzYWdlKQ0KICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKHRoaXMuZXJyb3IpKTsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIiIgKyB0aGlzLmVycm9yKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICB2YXIgUmVzdWx0Ow0KICAgIChmdW5jdGlvbiAoUmVzdWx0KSB7DQogICAgICAgIGZ1bmN0aW9uIHN1Y2Nlc3ModmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybiBuZXcgU3VjY2Vzcyh2YWx1ZSk7DQogICAgICAgIH0NCiAgICAgICAgUmVzdWx0LnN1Y2Nlc3MgPSBzdWNjZXNzOw0KICAgICAgICBmdW5jdGlvbiBmYWlsdXJlKGVycm9yKSB7DQogICAgICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUoZXJyb3IpOw0KICAgICAgICB9DQogICAgICAgIFJlc3VsdC5mYWlsdXJlID0gZmFpbHVyZTsNCiAgICAgICAgZnVuY3Rpb24gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgZikgew0KICAgICAgICAgICAgaWYgKGZpcnN0LnN1Y2Nlc3NmdWwpIHsNCiAgICAgICAgICAgICAgICBpZiAoc2Vjb25kLnN1Y2Nlc3NmdWwpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmKGZpcnN0LnZhbHVlLCBzZWNvbmQudmFsdWUpOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoc2Vjb25kLmVycm9yKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGZpcnN0LmVycm9yKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBSZXN1bHQuZmxhdE1hcDIgPSBmbGF0TWFwMjsNCiAgICAgICAgZnVuY3Rpb24gbWFwMihmaXJzdCwgc2Vjb25kLCBmKSB7DQogICAgICAgICAgICByZXR1cm4gZmxhdE1hcDIoZmlyc3QsIHNlY29uZCwgKGEsIGIpID0+IHN1Y2Nlc3MoZihhLCBiKSkpOw0KICAgICAgICB9DQogICAgICAgIFJlc3VsdC5tYXAyID0gbWFwMjsNCiAgICB9KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7CgogICAgLyoqIE5vcm1hbGl6ZSBhIGR1cmF0aW9uIHRvIGFsbCBvZiB0aGUgcHJvcGVyIHVuaXRzLiAqLw0KICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUR1cmF0aW9uKGR1cikgew0KICAgICAgICByZXR1cm4gZHVyLnNoaWZ0VG8oInllYXJzIiwgIm1vbnRocyIsICJ3ZWVrcyIsICJkYXlzIiwgImhvdXJzIiwgIm1pbnV0ZXMiLCAic2Vjb25kcyIsICJtaWxsaXNlY29uZHMiKS5ub3JtYWxpemUoKTsNCiAgICB9DQogICAgLyoqIEdldCB0aGUgInRpdGxlIiBmb3IgYSBmaWxlLCBieSBzdHJpcHBpbmcgb3RoZXIgcGFydHMgb2YgdGhlIHBhdGggYXMgd2VsbCBhcyB0aGUgZXh0ZW5zaW9uLiAqLw0KICAgIGZ1bmN0aW9uIGdldEZpbGVUaXRsZShwYXRoKSB7DQogICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKCIvIikpDQogICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZigiLyIpICsgMSk7DQogICAgICAgIGlmIChwYXRoLmVuZHNXaXRoKCIubWQiKSkNCiAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxlbmd0aCAtIDMpOw0KICAgICAgICByZXR1cm4gcGF0aDsNCiAgICB9DQogICAgY29uc3QgQUxMT1dBQkxFX1ZBUl9DSEFSQUNURVJTID0gL1swLTlcd1xwe0xldHRlcn1ccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XC1dL3U7DQogICAgY29uc3QgV0hJVEVTUEFDRSA9IC9ccy87DQogICAgLyoqIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhcmlhYmxlIG5hbWUgaW50byBzb21ldGhpbmcgSlMvcXVlcnkgZnJpZW5kbHkuICovDQogICAgZnVuY3Rpb24gY2Fub25pY2FsaXplVmFyTmFtZShuYW1lKSB7DQogICAgICAgIC8vIFN0cmlwIGRvd24gdG8gcHVyZWx5IGFscGhhbnVtZXJpYyArIHNwYWNlcy4NCiAgICAgICAgbGV0IHJlc3VsdCA9ICIiOw0KICAgICAgICBsZXQgbGFzdFdhc1doaXRlc3BhY2UgPSBmYWxzZTsNCiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5hbWUubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgICAgICAgICBsZXQgY2ggPSBuYW1lW2luZGV4XTsNCiAgICAgICAgICAgIGlmIChjaC5tYXRjaChXSElURVNQQUNFKSkgew0KICAgICAgICAgICAgICAgIGlmICghbGFzdFdhc1doaXRlc3BhY2UpDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiLSI7DQogICAgICAgICAgICAgICAgbGFzdFdhc1doaXRlc3BhY2UgPSB0cnVlOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbGFzdFdhc1doaXRlc3BhY2UgPSBmYWxzZTsNCiAgICAgICAgICAgIGlmICghY2gubWF0Y2goQUxMT1dBQkxFX1ZBUl9DSEFSQUNURVJTKSkNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIHJlc3VsdCArPSBjaC50b0xvY2FsZUxvd2VyQ2FzZSgpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgfQoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vDQogICAgLy8gUXVlcnkgU2V0dGluZ3MgLy8NCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLw0KICAgIGNvbnN0IERFRkFVTFRfUVVFUllfU0VUVElOR1MgPSB7DQogICAgICAgIHJlbmRlck51bGxBczogIlxcLSIsDQogICAgICAgIHdhcm5PbkVtcHR5UmVzdWx0OiB0cnVlLA0KICAgICAgICByZWZyZXNoSW50ZXJ2YWw6IDEwMDAsDQogICAgICAgIGRlZmF1bHREYXRlRm9ybWF0OiAiTU1NTSBkZCwgeXl5eSIsDQogICAgICAgIGRlZmF1bHREYXRlVGltZUZvcm1hdDogImg6bW0gYSAtIE1NTU0gZGQsIHl5eXkiLA0KICAgICAgICBtYXhSZWN1cnNpdmVSZW5kZXJEZXB0aDogNiwNCiAgICB9Ow0KICAgIC8qKiBEZWZhdWx0IHNldHRpbmdzIGZvciBkYXRhdmlldyBvbiBpbnN0YWxsLiAqLw0KICAgIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9RVUVSWV9TRVRUSU5HUyksIHsNCiAgICAgICAgaW5saW5lUXVlcnlQcmVmaXg6ICI9IiwNCiAgICAgICAgaW5saW5lSnNRdWVyeVByZWZpeDogIiQ9IiwNCiAgICAgICAgZW5hYmxlRGF0YXZpZXdKczogdHJ1ZSwNCiAgICAgICAgc2NoZW1hVmVyc2lvbjogMSwNCiAgICB9KTsKCiAgICAvKiogQSBzcGVjaWZpYyB0YXNrLiAqLw0KICAgIGNsYXNzIFRhc2sgew0KICAgICAgICBjb25zdHJ1Y3Rvcihpbml0KSB7DQogICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpOw0KICAgICAgICAgICAgdGhpcy5zdWJ0YXNrcyA9ICh0aGlzLnN1YnRhc2tzIHx8IFtdKS5tYXAodCA9PiBuZXcgVGFzayh0KSk7DQogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERhdGUgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQuY29tcGxldGVkRGF0ZTsNCiAgICAgICAgICAgIHRoaXMuY3JlYXRlZERhdGUgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQuY3JlYXRlZERhdGU7DQogICAgICAgICAgICB0aGlzLmR1ZURhdGUgPSBpbml0ID09PSBudWxsIHx8IGluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGluaXQuZHVlRGF0ZTsNCiAgICAgICAgfQ0KICAgICAgICAvKiogQ3JlYXRlIGEgdGFzayBmcm9tIGEgcmVjb3JkLiAqLw0KICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHsNCiAgICAgICAgICAgIHJldHVybiBuZXcgVGFzayhvYmopOw0KICAgICAgICB9DQogICAgICAgIGxpbmsoKSB7DQogICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXRofSMke3RoaXMuYmxvY2tJZH1gOw0KICAgICAgICB9DQogICAgICAgIGlkKCkgew0KICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0tJHt0aGlzLmxpbmV9YDsNCiAgICAgICAgfQ0KICAgICAgICBtYXJrZG93bigpIHsNCiAgICAgICAgICAgIGxldCBidWxsZXRDaGFyID0gYC1gOw0KICAgICAgICAgICAgbGV0IHN0YXRlQ2hhciA9IHRoaXMuY29tcGxldGVkID8gIngiIDogIiAiOw0KICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGAke2J1bGxldENoYXJ9IFske3N0YXRlQ2hhcn1dICR7dGhpcy50ZXh0fWA7DQogICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICB9DQogICAgICAgIHRvT2JqZWN0KCkgew0KICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHsNCiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsDQogICAgICAgICAgICAgICAgbGluZTogdGhpcy5saW5lLA0KICAgICAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCwNCiAgICAgICAgICAgICAgICBjb21wbGV0ZWQ6IHRoaXMuY29tcGxldGVkLA0KICAgICAgICAgICAgICAgIGZ1bGx5Q29tcGxldGVkOiB0aGlzLmZ1bGx5Q29tcGxldGVkLA0KICAgICAgICAgICAgICAgIHJlYWw6IHRoaXMucmVhbCwNCiAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLmJsb2NrSWQsDQogICAgICAgICAgICAgICAgc3VidGFza3M6IHRoaXMuc3VidGFza3MubWFwKHQgPT4gdC50b09iamVjdCgpKSwNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBpZiAodGhpcy5jcmVhdGVkRGF0ZSkNCiAgICAgICAgICAgICAgICByZXN1bHQuY3JlYXRlZERhdGUgPSB0aGlzLmNyZWF0ZWREYXRlOw0KICAgICAgICAgICAgaWYgKHRoaXMuZHVlRGF0ZSkNCiAgICAgICAgICAgICAgICByZXN1bHQuZHVlRGF0ZSA9IHRoaXMuZHVlRGF0ZTsNCiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBsZXRlZERhdGUpDQogICAgICAgICAgICAgICAgcmVzdWx0LmNvbXBsZXRlZERhdGUgPSB0aGlzLmNvbXBsZXRlZERhdGU7DQogICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICB9DQogICAgfQ0KICAgIC8qKiBBbiBPYnNpZGlhbiBsaW5rIHdpdGggYWxsIGFzc29jaWF0ZWQgbWV0YWRhdGEuICovDQogICAgY2xhc3MgTGluayB7DQogICAgICAgIGNvbnN0cnVjdG9yKGZpZWxkcykgew0KICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBmaWVsZHMpOw0KICAgICAgICB9DQogICAgICAgIHN0YXRpYyBmaWxlKHBhdGgsIGVtYmVkID0gZmFsc2UsIGRpc3BsYXkpIHsNCiAgICAgICAgICAgIHJldHVybiBuZXcgTGluayh7DQogICAgICAgICAgICAgICAgcGF0aCwNCiAgICAgICAgICAgICAgICBlbWJlZCwNCiAgICAgICAgICAgICAgICBkaXNwbGF5LA0KICAgICAgICAgICAgICAgIHR5cGU6ICJmaWxlIiwNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9DQogICAgICAgIHN0YXRpYyBoZWFkZXIocGF0aCwgaGVhZGVyLCBlbWJlZCwgZGlzcGxheSkgew0KICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5rKHsNCiAgICAgICAgICAgICAgICBwYXRoLA0KICAgICAgICAgICAgICAgIGVtYmVkLA0KICAgICAgICAgICAgICAgIGRpc3BsYXksDQogICAgICAgICAgICAgICAgc3VicGF0aDogaGVhZGVyLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJoZWFkZXIiLA0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0NCiAgICAgICAgc3RhdGljIGJsb2NrKHBhdGgsIGJsb2NrSWQsIGVtYmVkLCBkaXNwbGF5KSB7DQogICAgICAgICAgICByZXR1cm4gbmV3IExpbmsoew0KICAgICAgICAgICAgICAgIHBhdGgsDQogICAgICAgICAgICAgICAgZW1iZWQsDQogICAgICAgICAgICAgICAgZGlzcGxheSwNCiAgICAgICAgICAgICAgICBzdWJwYXRoOiBibG9ja0lkLA0KICAgICAgICAgICAgICAgIHR5cGU6ICJibG9jayIsDQogICAgICAgICAgICB9KTsNCiAgICAgICAgfQ0KICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmplY3QpIHsNCiAgICAgICAgICAgIHJldHVybiBuZXcgTGluayhvYmplY3QpOw0KICAgICAgICB9DQogICAgICAgIGVxdWFscyhvdGhlcikgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMucGF0aCA9PSBvdGhlci5wYXRoICYmIHRoaXMudHlwZSA9PSBvdGhlci50eXBlICYmIHRoaXMuc3VicGF0aCA9PSBvdGhlci5zdWJwYXRoOw0KICAgICAgICB9DQogICAgICAgIHRvU3RyaW5nKCkgew0KICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFya2Rvd24oKTsNCiAgICAgICAgfQ0KICAgICAgICAvKiogQ29udmVydCB0aGlzIGxpbmsgdG8gYSByYXcgb2JqZWN0IHdoaWNoICovDQogICAgICAgIHRvT2JqZWN0KCkgew0KICAgICAgICAgICAgcmV0dXJuIHsgcGF0aDogdGhpcy5wYXRoLCB0eXBlOiB0aGlzLnR5cGUsIHN1YnBhdGg6IHRoaXMuc3VicGF0aCwgZGlzcGxheTogdGhpcy5kaXNwbGF5LCBlbWJlZDogdGhpcy5lbWJlZCB9Ow0KICAgICAgICB9DQogICAgICAgIC8qKiBSZXR1cm4gYSBuZXcgbGluayB3aGljaCBwb2ludHMgdG8gdGhlIHNhbWUgbG9jYXRpb24gYnV0IHdpdGggYSBuZXcgZGlzcGxheSB2YWx1ZS4gKi8NCiAgICAgICAgd2l0aERpc3BsYXkoZGlzcGxheSkgew0KICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5rKE9iamVjdC5hc3NpZ24oe30sIHRoaXMsIHsgZGlzcGxheSB9KSk7DQogICAgICAgIH0NCiAgICAgICAgLyoqIENvbnZlcnQgdGhpcyBsaW5rIHRvIG1hcmtkb3duIHNvIGl0IGNhbiBiZSByZW5kZXJlZC4gKi8NCiAgICAgICAgbWFya2Rvd24oKSB7DQogICAgICAgICAgICBsZXQgcmVzdWx0ID0gKHRoaXMuZW1iZWQgPyAiISIgOiAiIikgKyAiW1siICsgdGhpcy5wYXRoOw0KICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAiaGVhZGVyIikNCiAgICAgICAgICAgICAgICByZXN1bHQgKz0gIiMiICsgdGhpcy5zdWJwYXRoOw0KICAgICAgICAgICAgZWxzZSBpZiAodGhpcy50eXBlID09ICJibG9jayIpDQogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJeIiArIHRoaXMuc3VicGF0aDsNCiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXkgJiYgIXRoaXMuZW1iZWQpDQogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICJ8IiArIHRoaXMuZGlzcGxheTsNCiAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLmVtYmVkKQ0KICAgICAgICAgICAgICAgIHJlc3VsdCArPSAifCIgKyBnZXRGaWxlVGl0bGUodGhpcy5wYXRoKTsNCiAgICAgICAgICAgIHJlc3VsdCArPSAiXV0iOw0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICAvKiogVGhlIHN0cmlwcGVkIG5hbWUgb2YgdGhlIGZpbGUgdGhpcyBsaW5rIHBvaW50cyBpbnRvLiAqLw0KICAgICAgICBmaWxlTmFtZSgpIHsNCiAgICAgICAgICAgIHJldHVybiBnZXRGaWxlVGl0bGUodGhpcy5wYXRoKS5yZXBsYWNlKCIubWQiLCAiIik7DQogICAgICAgIH0NCiAgICB9DQogICAgdmFyIFZhbHVlczsNCiAgICAoZnVuY3Rpb24gKFZhbHVlcykgew0KICAgICAgICAvKiogQ29udmVydCBhbiBhcmJpdGFyeSB2YWx1ZSBpbnRvIGEgcmVhc29uYWJsZSwgTWFya2Rvd24tZnJpZW5kbHkgc3RyaW5nIGlmIHBvc3NpYmxlLiAqLw0KICAgICAgICBmdW5jdGlvbiB0b1N0cmluZyhmaWVsZCwgc2V0dGluZyA9IERFRkFVTFRfUVVFUllfU0VUVElOR1MsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7DQogICAgICAgICAgICBsZXQgd3JhcHBlZCA9IHdyYXBWYWx1ZShmaWVsZCk7DQogICAgICAgICAgICBpZiAoIXdyYXBwZWQpDQogICAgICAgICAgICAgICAgcmV0dXJuICJudWxsIjsNCiAgICAgICAgICAgIHN3aXRjaCAod3JhcHBlZC50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7DQogICAgICAgICAgICAgICAgY2FzZSAibnVtYmVyIjoNCiAgICAgICAgICAgICAgICBjYXNlICJib29sZWFuIjoNCiAgICAgICAgICAgICAgICBjYXNlICJodG1sIjoNCiAgICAgICAgICAgICAgICBjYXNlICJudWxsIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIiICsgd3JhcHBlZC52YWx1ZTsNCiAgICAgICAgICAgICAgICBjYXNlICJsaW5rIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTsNCiAgICAgICAgICAgICAgICBjYXNlICJ0YXNrIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubWFya2Rvd24oKTsNCiAgICAgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAiPGZ1bmN0aW9uPiI7DQogICAgICAgICAgICAgICAgY2FzZSAiYXJyYXkiOg0KICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gIiI7DQogICAgICAgICAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpDQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlsiOw0KICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd3JhcHBlZC52YWx1ZS5tYXAoZiA9PiB0b1N0cmluZyhmLCBzZXR0aW5nLCB0cnVlKSkuam9pbigiLCAiKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiXSI7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgieyAiICsNCiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHdyYXBwZWQudmFsdWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChlID0+IGVbMF0gKyAiOiAiICsgdG9TdHJpbmcoZVsxXSwgc2V0dGluZywgdHJ1ZSkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oIiwgIikgKw0KICAgICAgICAgICAgICAgICAgICAgICAgIiB9Iik7DQogICAgICAgICAgICAgICAgY2FzZSAiZGF0ZSI6DQogICAgICAgICAgICAgICAgICAgIGlmICh3cmFwcGVkLnZhbHVlLnNlY29uZCA9PSAwICYmIHdyYXBwZWQudmFsdWUuaG91ciA9PSAwICYmIHdyYXBwZWQudmFsdWUubWludXRlID09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvRm9ybWF0KHNldHRpbmcuZGVmYXVsdERhdGVGb3JtYXQpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvRm9ybWF0KHNldHRpbmcuZGVmYXVsdERhdGVUaW1lRm9ybWF0KTsNCiAgICAgICAgICAgICAgICBjYXNlICJkdXJhdGlvbiI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLnRvSVNPVGltZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy50b1N0cmluZyA9IHRvU3RyaW5nOw0KICAgICAgICAvKiogV3JhcCBhIGxpdGVyYWwgdmFsdWUgc28geW91IGNhbiBzd2l0Y2ggb24gaXQgZWFzaWx5LiAqLw0KICAgICAgICBmdW5jdGlvbiB3cmFwVmFsdWUodmFsKSB7DQogICAgICAgICAgICBpZiAoaXNOdWxsKHZhbCkpDQogICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogIm51bGwiLCB2YWx1ZTogdmFsIH07DQogICAgICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWwpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJudW1iZXIiLCB2YWx1ZTogdmFsIH07DQogICAgICAgICAgICBlbHNlIGlmIChpc1N0cmluZyh2YWwpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJzdHJpbmciLCB2YWx1ZTogdmFsIH07DQogICAgICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW4odmFsKSkNCiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiYm9vbGVhbiIsIHZhbHVlOiB2YWwgfTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGlzRHVyYXRpb24odmFsKSkNCiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZHVyYXRpb24iLCB2YWx1ZTogdmFsIH07DQogICAgICAgICAgICBlbHNlIGlmIChpc0RhdGUodmFsKSkNCiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiZGF0ZSIsIHZhbHVlOiB2YWwgfTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGlzSHRtbCh2YWwpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJodG1sIiwgdmFsdWU6IHZhbCB9Ow0KICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJhcnJheSIsIHZhbHVlOiB2YWwgfTsNCiAgICAgICAgICAgIGVsc2UgaWYgKGlzTGluayh2YWwpKQ0KICAgICAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsaW5rIiwgdmFsdWU6IHZhbCB9Ow0KICAgICAgICAgICAgZWxzZSBpZiAoaXNUYXNrKHZhbCkpDQogICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogInRhc2siLCB2YWx1ZTogdmFsIH07DQogICAgICAgICAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKHZhbCkpDQogICAgICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgdmFsdWU6IHZhbCB9Ow0KICAgICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodmFsKSkNCiAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAib2JqZWN0IiwgdmFsdWU6IHZhbCB9Ow0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLndyYXBWYWx1ZSA9IHdyYXBWYWx1ZTsNCiAgICAgICAgLyoqIENvbXBhcmUgdHdvIGFyYml0cmFyeSBKYXZhU2NyaXB0IHZhbHVlcy4gUHJvZHVjZXMgYSB0b3RhbCBvcmRlcmluZyBvdmVyIEFOWSBwb3NzaWJsZSBkYXRhdmlldyB2YWx1ZS4gKi8NCiAgICAgICAgZnVuY3Rpb24gY29tcGFyZVZhbHVlKHZhbDEsIHZhbDIsIGxpbmtOb3JtYWxpemVyKSB7DQogICAgICAgICAgICAvLyBIYW5kbGUgdW5kZWZpbmVkL251bGxzIGZpcnN0Lg0KICAgICAgICAgICAgaWYgKHZhbDEgPT09IHVuZGVmaW5lZCkNCiAgICAgICAgICAgICAgICB2YWwxID0gbnVsbDsNCiAgICAgICAgICAgIGlmICh2YWwyID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgdmFsMiA9IG51bGw7DQogICAgICAgICAgICBpZiAodmFsMSA9PT0gbnVsbCAmJiB2YWwyID09PSBudWxsKQ0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgZWxzZSBpZiAodmFsMSA9PT0gbnVsbCkNCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQogICAgICAgICAgICBlbHNlIGlmICh2YWwyID09PSBudWxsKQ0KICAgICAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICAgICAgLy8gQSBub24tbnVsbCB2YWx1ZSBub3cgd2hpY2ggd2UgY2FuIHdyYXAgJiBjb21wYXJlIG9uLg0KICAgICAgICAgICAgbGV0IHdyYXAxID0gd3JhcFZhbHVlKHZhbDEpOw0KICAgICAgICAgICAgbGV0IHdyYXAyID0gd3JhcFZhbHVlKHZhbDIpOw0KICAgICAgICAgICAgaWYgKHdyYXAxID09PSB1bmRlZmluZWQgJiYgd3JhcDIgPT09IHVuZGVmaW5lZCkNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgIGVsc2UgaWYgKHdyYXAxID09PSB1bmRlZmluZWQpDQogICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICAgICAgZWxzZSBpZiAod3JhcDIgPT09IHVuZGVmaW5lZCkNCiAgICAgICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgICAgIGlmICh3cmFwMS50eXBlICE9IHdyYXAyLnR5cGUpDQogICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAxLnR5cGUubG9jYWxlQ29tcGFyZSh3cmFwMi50eXBlKTsNCiAgICAgICAgICAgIHN3aXRjaCAod3JhcDEudHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwMS52YWx1ZS5sb2NhbGVDb21wYXJlKHdyYXAyLnZhbHVlKTsNCiAgICAgICAgICAgICAgICBjYXNlICJudW1iZXIiOg0KICAgICAgICAgICAgICAgICAgICBpZiAod3JhcDEudmFsdWUgPCB3cmFwMi52YWx1ZSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod3JhcDEudmFsdWUgPT0gd3JhcDIudmFsdWUpDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgICAgICAgICAgY2FzZSAibnVsbCI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgICAgIGNhc2UgImJvb2xlYW4iOg0KICAgICAgICAgICAgICAgICAgICBpZiAod3JhcDEudmFsdWUgPT0gd3JhcDIudmFsdWUpDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAxLnZhbHVlID8gMSA6IC0xOw0KICAgICAgICAgICAgICAgIGNhc2UgImxpbmsiOg0KICAgICAgICAgICAgICAgICAgICBsZXQgbGluazEgPSB3cmFwMS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmsyID0gd3JhcDIudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIGxldCBub3JtYWxpemUgPSBsaW5rTm9ybWFsaXplciAhPT0gbnVsbCAmJiBsaW5rTm9ybWFsaXplciAhPT0gdm9pZCAwID8gbGlua05vcm1hbGl6ZXIgOiAoKHgpID0+IHgpOw0KICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBjb21wYXJlIGJ5IGZpbGUgbmFtZSBvciBkaXNwbGF5LCBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrIGxpbmsgZXF1YWxpdHkuDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobGluazEucGF0aCkubG9jYWxlQ29tcGFyZShub3JtYWxpemUobGluazIucGF0aCkpOw0KICAgICAgICAgICAgICAgIGNhc2UgInRhc2siOg0KICAgICAgICAgICAgICAgICAgICBsZXQgdGFzazEgPSB3cmFwMS52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgbGV0IHRhc2syID0gd3JhcDIudmFsdWU7DQogICAgICAgICAgICAgICAgICAgIC8vIFVzZSBvYmplY3QgY29tcGFyaXNvbiAmIGNvbXBhcmUgdGhlIHVuaXF1ZSBpZGVudGlmaWVycyAocGF0aCwgbGluZSwgYW5kIHRleHQgYXMgYmFja3VwKS4NCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZSh7IHBhdGg6IHRhc2sxLnBhdGgsIGxpbmU6IHRhc2sxLmxpbmUsIHRleHQ6IHRhc2sxLnRleHQgfSwgeyBwYXRoOiB0YXNrMi5wYXRoLCBsaW5lOiB0YXNrMi5saW5lLCB0ZXh0OiB0YXNrMi50ZXh0IH0pOw0KICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcDEudmFsdWUgPCB3cmFwMi52YWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgPyAtMQ0KICAgICAgICAgICAgICAgICAgICAgICAgOiB3cmFwMS52YWx1ZS5lcXVhbHMod3JhcDIudmFsdWUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAxOw0KICAgICAgICAgICAgICAgIGNhc2UgImR1cmF0aW9uIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAxLnZhbHVlIDwgd3JhcDIudmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgID8gLTENCiAgICAgICAgICAgICAgICAgICAgICAgIDogd3JhcDEudmFsdWUuZXF1YWxzKHdyYXAyLnZhbHVlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMTsNCiAgICAgICAgICAgICAgICBjYXNlICJhcnJheSI6DQogICAgICAgICAgICAgICAgICAgIGxldCBmMSA9IHdyYXAxLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBsZXQgZjIgPSB3cmFwMi52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IE1hdGgubWluKGYxLmxlbmd0aCwgZjIubGVuZ3RoKTsgaW5kZXgrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlVmFsdWUoZjFbaW5kZXhdLCBmMltpbmRleF0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAgIT0gMCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjEubGVuZ3RoIC0gZjIubGVuZ3RoOw0KICAgICAgICAgICAgICAgIGNhc2UgIm9iamVjdCI6DQogICAgICAgICAgICAgICAgICAgIGxldCBvMSA9IHdyYXAxLnZhbHVlOw0KICAgICAgICAgICAgICAgICAgICBsZXQgbzIgPSB3cmFwMi52YWx1ZTsNCiAgICAgICAgICAgICAgICAgICAgbGV0IGsxID0gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvMSkpOw0KICAgICAgICAgICAgICAgICAgICBsZXQgazIgPSBBcnJheS5mcm9tKE9iamVjdC5rZXlzKG8yKSk7DQogICAgICAgICAgICAgICAgICAgIGsxLnNvcnQoKTsNCiAgICAgICAgICAgICAgICAgICAgazIuc29ydCgpOw0KICAgICAgICAgICAgICAgICAgICBsZXQga2V5Q29tcGFyZSA9IGNvbXBhcmVWYWx1ZShrMSwgazIpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Q29tcGFyZSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleUNvbXBhcmU7DQogICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiBrMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXAgPSBjb21wYXJlVmFsdWUobzFba2V5XSwgbzJba2V5XSk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcCAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgICAgIGNhc2UgImh0bWwiOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgICAgICAgICBjYXNlICJmdW5jdGlvbiI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5jb21wYXJlVmFsdWUgPSBjb21wYXJlVmFsdWU7DQogICAgICAgIC8qKiBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIERhdGF2ZWl3IHR5cGUgZm9yIGFuIGFyYml0cmFyeSB2YWx1ZS4gKi8NCiAgICAgICAgZnVuY3Rpb24gdHlwZU9mKHZhbCkgew0KICAgICAgICAgICAgdmFyIF9hOw0KICAgICAgICAgICAgcmV0dXJuIChfYSA9IHdyYXBWYWx1ZSh2YWwpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHlwZTsNCiAgICAgICAgfQ0KICAgICAgICBWYWx1ZXMudHlwZU9mID0gdHlwZU9mOw0KICAgICAgICAvKiogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyAidHJ1dGh5IiAoaS5lLiwgaXMgbm9uLW51bGwgYW5kIGhhcyBkYXRhIGluIGl0KS4gKi8NCiAgICAgICAgZnVuY3Rpb24gaXNUcnV0aHkoZmllbGQpIHsNCiAgICAgICAgICAgIGxldCB3cmFwcGVkID0gd3JhcFZhbHVlKGZpZWxkKTsNCiAgICAgICAgICAgIGlmICghd3JhcHBlZCkNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICBzd2l0Y2ggKHdyYXBwZWQudHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgIm51bWJlciI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlICE9IDA7DQogICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUubGVuZ3RoID4gMDsNCiAgICAgICAgICAgICAgICBjYXNlICJib29sZWFuIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWU7DQogICAgICAgICAgICAgICAgY2FzZSAibGluayI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAhIXdyYXBwZWQudmFsdWUucGF0aDsNCiAgICAgICAgICAgICAgICBjYXNlICJ0YXNrIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQudmFsdWUudGV4dC5sZW5ndGggPiAwOw0KICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS50b01pbGxpcygpICE9IDA7DQogICAgICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5hcygic2Vjb25kcyIpICE9IDA7DQogICAgICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdyYXBwZWQudmFsdWUpLmxlbmd0aCA+IDA7DQogICAgICAgICAgICAgICAgY2FzZSAiYXJyYXkiOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlZC52YWx1ZS5sZW5ndGggPiAwOw0KICAgICAgICAgICAgICAgIGNhc2UgIm51bGwiOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgY2FzZSAiaHRtbCI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLmlzVHJ1dGh5ID0gaXNUcnV0aHk7DQogICAgICAgIC8qKiBEZWVwIGNvcHkgYSBmaWVsZC4gKi8NCiAgICAgICAgZnVuY3Rpb24gZGVlcENvcHkoZmllbGQpIHsNCiAgICAgICAgICAgIGlmIChmaWVsZCA9PT0gbnVsbCB8fCBmaWVsZCA9PT0gdW5kZWZpbmVkKQ0KICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZDsNCiAgICAgICAgICAgIGlmIChWYWx1ZXMuaXNBcnJheShmaWVsZCkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gW10uY29uY2F0KGZpZWxkLm1hcCh2ID0+IGRlZXBDb3B5KHYpKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmIChWYWx1ZXMuaXNPYmplY3QoZmllbGQpKSB7DQogICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt9Ow0KICAgICAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZCkpDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gZGVlcENvcHkodmFsdWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGQ7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLmRlZXBDb3B5ID0gZGVlcENvcHk7DQogICAgICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkgew0KICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gInN0cmluZyI7DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLmlzU3RyaW5nID0gaXNTdHJpbmc7DQogICAgICAgIGZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkgew0KICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gIm51bWJlciI7DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLmlzTnVtYmVyID0gaXNOdW1iZXI7DQogICAgICAgIGZ1bmN0aW9uIGlzRGF0ZSh2YWwpIHsNCiAgICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlVGltZV8xOw0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5pc0RhdGUgPSBpc0RhdGU7DQogICAgICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24odmFsKSB7DQogICAgICAgICAgICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRHVyYXRpb25fMTsNCiAgICAgICAgfQ0KICAgICAgICBWYWx1ZXMuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247DQogICAgICAgIGZ1bmN0aW9uIGlzTnVsbCh2YWwpIHsNCiAgICAgICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQ7DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLmlzTnVsbCA9IGlzTnVsbDsNCiAgICAgICAgZnVuY3Rpb24gaXNBcnJheSh2YWwpIHsNCiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbCk7DQogICAgICAgIH0NCiAgICAgICAgVmFsdWVzLmlzQXJyYXkgPSBpc0FycmF5Ow0KICAgICAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsKSB7DQogICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gImJvb2xlYW4iOw0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47DQogICAgICAgIGZ1bmN0aW9uIGlzTGluayh2YWwpIHsNCiAgICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBMaW5rOw0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5pc0xpbmsgPSBpc0xpbms7DQogICAgICAgIGZ1bmN0aW9uIGlzVGFzayh2YWwpIHsNCiAgICAgICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBUYXNrOw0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5pc1Rhc2sgPSBpc1Rhc2s7DQogICAgICAgIGZ1bmN0aW9uIGlzSHRtbCh2YWwpIHsNCiAgICAgICAgICAgIGlmICh0eXBlb2YgSFRNTEVsZW1lbnQgIT09ICJ1bmRlZmluZWQiKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5pc0h0bWwgPSBpc0h0bWw7DQogICAgICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkgew0KICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgdmFsID09ICJvYmplY3QiICYmDQogICAgICAgICAgICAgICAgIWlzSHRtbCh2YWwpICYmDQogICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsKSAmJg0KICAgICAgICAgICAgICAgICFpc0R1cmF0aW9uKHZhbCkgJiYNCiAgICAgICAgICAgICAgICAhaXNEYXRlKHZhbCkgJiYNCiAgICAgICAgICAgICAgICAhaXNMaW5rKHZhbCkgJiYNCiAgICAgICAgICAgICAgICAhaXNUYXNrKHZhbCkpOw0KICAgICAgICB9DQogICAgICAgIFZhbHVlcy5pc09iamVjdCA9IGlzT2JqZWN0Ow0KICAgICAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkgew0KICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT0gImZ1bmN0aW9uIjsNCiAgICAgICAgfQ0KICAgICAgICBWYWx1ZXMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247DQogICAgfSkoVmFsdWVzIHx8IChWYWx1ZXMgPSB7fSkpOw0KICAgIHZhciBUcmFuc2ZlcmFibGVWYWx1ZXM7DQogICAgKGZ1bmN0aW9uIChUcmFuc2ZlcmFibGVWYWx1ZXMpIHsNCiAgICAgICAgLyoqIENvbnZlcnQgYSBsaXRlcmFsIHZhbHVlIHRvIGEgc2VyaWFsaXplci1mcmllbmRseSB0cmFuc2ZlcmFibGUgdmFsdWUuIERvZXMgbm90IHdvcmsgZm9yIGFsbCB0eXBlcy4gKi8NCiAgICAgICAgZnVuY3Rpb24gdHJhbnNmZXJhYmxlKHZhbHVlKSB7DQogICAgICAgICAgICBsZXQgd3JhcHBlZCA9IFZhbHVlcy53cmFwVmFsdWUodmFsdWUpOw0KICAgICAgICAgICAgaWYgKHdyYXBwZWQgPT09IHVuZGVmaW5lZCkNCiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KICAgICAgICAgICAgc3dpdGNoICh3cmFwcGVkLnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlICJudWxsIjoNCiAgICAgICAgICAgICAgICBjYXNlICJudW1iZXIiOg0KICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6DQogICAgICAgICAgICAgICAgY2FzZSAiYm9vbGVhbiI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlOw0KICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gew0KICAgICAgICAgICAgICAgICAgICAgICAgIl9fX3RyYW5zZmVyLXR5cGUiOiAiZGF0ZSIsDQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b09iamVjdCgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyB6b25lOiB3cmFwcGVkLnZhbHVlLnpvbmVOYW1lIH0sDQogICAgICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICAgICAgY2FzZSAiZHVyYXRpb24iOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAiX19fdHJhbnNmZXItdHlwZSI6ICJkdXJhdGlvbiIsIHZhbHVlOiB3cmFwcGVkLnZhbHVlLnRvT2JqZWN0KCkgfTsNCiAgICAgICAgICAgICAgICBjYXNlICJhcnJheSI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkLnZhbHVlLm1hcCh2ID0+IHRyYW5zZmVyYWJsZSh2KSk7DQogICAgICAgICAgICAgICAgY2FzZSAib2JqZWN0IjoNCiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHt9Ow0KICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMod3JhcHBlZC52YWx1ZSkpDQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHRyYW5zZmVyYWJsZSh2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogICAgICAgICAgICAgICAgY2FzZSAibGluayI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB7ICJfX190cmFuc2Zlci10eXBlIjogImxpbmsiLCB2YWx1ZTogd3JhcHBlZC52YWx1ZS50b09iamVjdCgpIH07DQogICAgICAgICAgICAgICAgY2FzZSAidGFzayI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiB7ICJfX190cmFuc2Zlci10eXBlIjogInRhc2siLCB2YWx1ZTogdHJhbnNmZXJhYmxlKHdyYXBwZWQudmFsdWUudG9PYmplY3QoKSkgfTsNCiAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIFRyYW5zZmVyYWJsZVZhbHVlcy50cmFuc2ZlcmFibGUgPSB0cmFuc2ZlcmFibGU7DQogICAgICAgIC8qKiBDb252ZXJ0IGEgdHJhbnNmZXJhYmxlIHZhbHVlIGJhY2sgdG8gYSBsaXRlcmFsIHZhbHVlIHdlIGNhbiB3b3JrIHdpdGguICovDQogICAgICAgIGZ1bmN0aW9uIHZhbHVlKHRyYW5zZmVyYWJsZSkgew0KICAgICAgICAgICAgaWYgKHRyYW5zZmVyYWJsZSA9PT0gbnVsbCB8fCB0cmFuc2ZlcmFibGUgPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0cmFuc2ZlcmFibGUpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZS5tYXAodiA9PiB2YWx1ZSh2KSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgdHJhbnNmZXJhYmxlID09PSAib2JqZWN0Iikgew0KICAgICAgICAgICAgICAgIGlmICgiX19fdHJhbnNmZXItdHlwZSIgaW4gdHJhbnNmZXJhYmxlKSB7DQogICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJhbnNmZXJhYmxlWyJfX190cmFuc2Zlci10eXBlIl0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImRhdGUiOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRlVGltZV8xLmZyb21PYmplY3QodmFsdWUodHJhbnNmZXJhYmxlLnZhbHVlKSwgdmFsdWUodHJhbnNmZXJhYmxlLm9wdGlvbnMgfHwge30pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgImR1cmF0aW9uIjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRHVyYXRpb25fMS5mcm9tT2JqZWN0KHZhbHVlKHRyYW5zZmVyYWJsZS52YWx1ZSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAibGluayI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmsuZnJvbU9iamVjdCh2YWx1ZSh0cmFuc2ZlcmFibGUudmFsdWUpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgInRhc2siOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLmZyb21PYmplY3QodmFsdWUodHJhbnNmZXJhYmxlLnZhbHVlKSk7DQogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBVbnJlY29nbml6ZWQgdHJhbnNmZXIgdHlwZSAnJHt0cmFuc2ZlcmFibGVbIl9fX3RyYW5zZmVyLXR5cGUiXX1gKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0ge307DQogICAgICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zZmVyYWJsZSkpDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gVHJhbnNmZXJhYmxlVmFsdWVzLnZhbHVlKHZhbHVlKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHRyYW5zZmVyYWJsZTsNCiAgICAgICAgfQ0KICAgICAgICBUcmFuc2ZlcmFibGVWYWx1ZXMudmFsdWUgPSB2YWx1ZTsNCiAgICB9KShUcmFuc2ZlcmFibGVWYWx1ZXMgfHwgKFRyYW5zZmVyYWJsZVZhbHVlcyA9IHt9KSk7DQogICAgdmFyIEdyb3VwaW5nczsNCiAgICAoZnVuY3Rpb24gKEdyb3VwaW5ncykgew0KICAgICAgICBmdW5jdGlvbiBiYXNlKHZhbHVlKSB7DQogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiYmFzZSIsIHZhbHVlIH07DQogICAgICAgIH0NCiAgICAgICAgR3JvdXBpbmdzLmJhc2UgPSBiYXNlOw0KICAgICAgICBmdW5jdGlvbiBncm91cGVkKHZhbHVlcykgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImdyb3VwZWQiLCBncm91cHM6IHZhbHVlcyB9Ow0KICAgICAgICB9DQogICAgICAgIEdyb3VwaW5ncy5ncm91cGVkID0gZ3JvdXBlZDsNCiAgICB9KShHcm91cGluZ3MgfHwgKEdyb3VwaW5ncyA9IHt9KSk7CgogICAgdmFyIHBhcnNpbW1vbl91bWRfbWluID0ge2V4cG9ydHM6IHt9fTsKCiAgICAoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykgewogICAgIWZ1bmN0aW9uKG4sdCl7bW9kdWxlLmV4cG9ydHM9dCgpO30oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6Y29tbW9uanNHbG9iYWwsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9e307ZnVuY3Rpb24gcihlKXtpZih0W2VdKXJldHVybiB0W2VdLmV4cG9ydHM7dmFyIHU9dFtlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIG5bZV0uY2FsbCh1LmV4cG9ydHMsdSx1LmV4cG9ydHMsciksdS5sPSEwLHUuZXhwb3J0c31yZXR1cm4gci5tPW4sci5jPXQsci5kPWZ1bmN0aW9uKG4sdCxlKXtyLm8obix0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sdCx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0OmV9KTt9LHIucj1mdW5jdGlvbihuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7fSxyLm49ZnVuY3Rpb24obil7dmFyIHQ9biYmbi5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gbn07cmV0dXJuIHIuZCh0LCJhIix0KSx0fSxyLm89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9LHIucD0iIixyKHIucz0wKX0oW2Z1bmN0aW9uKG4sdCxyKXtmdW5jdGlvbiBlKG4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIGUpKXJldHVybiBuZXcgZShuKTt0aGlzLl89bjt9dmFyIHU9ZS5wcm90b3R5cGU7ZnVuY3Rpb24gbyhuLHQpe2Zvcih2YXIgcj0wO3I8bjtyKyspdChyKTt9ZnVuY3Rpb24gaShuLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7byh0Lmxlbmd0aCxmdW5jdGlvbihyKXtuKHRbcl0scix0KTt9KTt9KGZ1bmN0aW9uKHIsZSx1KXt0PW4odCxyLGUsdSk7fSxyKSx0fWZ1bmN0aW9uIGYobix0KXtyZXR1cm4gaShmdW5jdGlvbih0LHIsZSx1KXtyZXR1cm4gdC5jb25jYXQoW24ocixlLHUpXSl9LFtdLHQpfWZ1bmN0aW9uIGEobix0KXt2YXIgcj17djowLGJ1Zjp0fTtyZXR1cm4gbyhuLGZ1bmN0aW9uKCl7dmFyIG47cj17djpyLnY8PDF8KG49ci5idWYsblswXT4+NyksYnVmOmZ1bmN0aW9uKG4pe3ZhciB0PWkoZnVuY3Rpb24obix0LHIsZSl7cmV0dXJuIG4uY29uY2F0KHI9PT1lLmxlbmd0aC0xP0J1ZmZlci5mcm9tKFt0LDBdKS5yZWFkVUludDE2QkUoMCk6ZS5yZWFkVUludDE2QkUocikpfSxbXSxuKTtyZXR1cm4gQnVmZmVyLmZyb20oZihmdW5jdGlvbihuKXtyZXR1cm4gKG48PDEmNjU1MzUpPj44fSx0KSl9KHIuYnVmKX07fSkscn1mdW5jdGlvbiBjKCl7cmV0dXJuICJ1bmRlZmluZWQiIT10eXBlb2YgQnVmZmVyfWZ1bmN0aW9uIHMoKXtpZighYygpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyIGdsb2JhbCBkb2VzIG5vdCBleGlzdDsgcGxlYXNlIHVzZSB3ZWJwYWNrIGlmIHlvdSBuZWVkIHRvIHBhcnNlIEJ1ZmZlcnMgaW4gdGhlIGJyb3dzZXIuIil9ZnVuY3Rpb24gbChuKXtzKCk7dmFyIHQ9aShmdW5jdGlvbihuLHQpe3JldHVybiBuK3R9LDAsbik7aWYodCU4IT0wKXRocm93IG5ldyBFcnJvcigiVGhlIGJpdHMgWyIrbi5qb2luKCIsICIpKyJdIGFkZCB1cCB0byAiK3QrIiB3aGljaCBpcyBub3QgYW4gZXZlbiBudW1iZXIgb2YgYnl0ZXM7IHRoZSB0b3RhbCBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDgiKTt2YXIgcix1PXQvOCxvPShyPWZ1bmN0aW9uKG4pe3JldHVybiBuPjQ4fSxpKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG58fChyKHQpP3Q6bil9LG51bGwsbikpO2lmKG8pdGhyb3cgbmV3IEVycm9yKG8rIiBiaXQgcmFuZ2UgcmVxdWVzdGVkIGV4Y2VlZHMgNDggYml0ICg2IGJ5dGUpIE51bWJlciBtYXguIik7cmV0dXJuIG5ldyBlKGZ1bmN0aW9uKHQscil7dmFyIGU9dStyO3JldHVybiBlPnQubGVuZ3RoP3gocix1LnRvU3RyaW5nKCkrIiBieXRlcyIpOmIoZSxpKGZ1bmN0aW9uKG4sdCl7dmFyIHI9YSh0LG4uYnVmKTtyZXR1cm4ge2NvbGw6bi5jb2xsLmNvbmNhdChyLnYpLGJ1ZjpyLmJ1Zn19LHtjb2xsOltdLGJ1Zjp0LnNsaWNlKHIsZSl9LG4pLmNvbGwpfSl9ZnVuY3Rpb24gcChuLHQpe3JldHVybiBuZXcgZShmdW5jdGlvbihyLGUpe3JldHVybiBzKCksZSt0PnIubGVuZ3RoP3goZSx0KyIgYnl0ZXMgZm9yICIrbik6YihlK3Qsci5zbGljZShlLGUrdCkpfSl9ZnVuY3Rpb24gaChuLHQpe2lmKCJudW1iZXIiIT10eXBlb2Yocj10KXx8TWF0aC5mbG9vcihyKSE9PXJ8fHQ8MHx8dD42KXRocm93IG5ldyBFcnJvcihuKyIgcmVxdWlyZXMgaW50ZWdlciBsZW5ndGggaW4gcmFuZ2UgWzAsIDZdLiIpO3ZhciByO31mdW5jdGlvbiBkKG4pe3JldHVybiBoKCJ1aW50QkUiLG4pLHAoInVpbnRCRSgiK24rIikiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkVUludEJFKDAsbil9KX1mdW5jdGlvbiB2KG4pe3JldHVybiBoKCJ1aW50TEUiLG4pLHAoInVpbnRMRSgiK24rIikiLG4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWFkVUludExFKDAsbil9KX1mdW5jdGlvbiBnKG4pe3JldHVybiBoKCJpbnRCRSIsbikscCgiaW50QkUoIituKyIpIixuKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVhZEludEJFKDAsbil9KX1mdW5jdGlvbiBtKG4pe3JldHVybiBoKCJpbnRMRSIsbikscCgiaW50TEUoIituKyIpIixuKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVhZEludExFKDAsbil9KX1mdW5jdGlvbiB5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgZX1mdW5jdGlvbiBFKG4pe3JldHVybiAiW29iamVjdCBBcnJheV0iPT09e30udG9TdHJpbmcuY2FsbChuKX1mdW5jdGlvbiB3KG4pe3JldHVybiBjKCkmJkJ1ZmZlci5pc0J1ZmZlcihuKX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJuIHtzdGF0dXM6ITAsaW5kZXg6bix2YWx1ZTp0LGZ1cnRoZXN0Oi0xLGV4cGVjdGVkOltdfX1mdW5jdGlvbiB4KG4sdCl7cmV0dXJuIEUodCl8fCh0PVt0XSkse3N0YXR1czohMSxpbmRleDotMSx2YWx1ZTpudWxsLGZ1cnRoZXN0Om4sZXhwZWN0ZWQ6dH19ZnVuY3Rpb24gQihuLHQpe2lmKCF0KXJldHVybiBuO2lmKG4uZnVydGhlc3Q+dC5mdXJ0aGVzdClyZXR1cm4gbjt2YXIgcj1uLmZ1cnRoZXN0PT09dC5mdXJ0aGVzdD9mdW5jdGlvbihuLHQpe2lmKGZ1bmN0aW9uKCl7aWYodm9pZCAwIT09ZS5fc3VwcG9ydHNTZXQpcmV0dXJuIGUuX3N1cHBvcnRzU2V0O3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU2V0O3JldHVybiBlLl9zdXBwb3J0c1NldD1uLG59KCkmJkFycmF5LmZyb20pe2Zvcih2YXIgcj1uZXcgU2V0KG4pLHU9MDt1PHQubGVuZ3RoO3UrKylyLmFkZCh0W3VdKTt2YXIgbz1BcnJheS5mcm9tKHIpO3JldHVybiBvLnNvcnQoKSxvfWZvcih2YXIgaT17fSxmPTA7ZjxuLmxlbmd0aDtmKyspaVtuW2ZdXT0hMDtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpW3RbYV1dPSEwO3ZhciBjPVtdO2Zvcih2YXIgcyBpbiBpKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiZjLnB1c2gocyk7cmV0dXJuIGMuc29ydCgpLGN9KG4uZXhwZWN0ZWQsdC5leHBlY3RlZCk6dC5leHBlY3RlZDtyZXR1cm4ge3N0YXR1czpuLnN0YXR1cyxpbmRleDpuLmluZGV4LHZhbHVlOm4udmFsdWUsZnVydGhlc3Q6dC5mdXJ0aGVzdCxleHBlY3RlZDpyfX12YXIgaj17fTtmdW5jdGlvbiBTKG4sdCl7aWYodyhuKSlyZXR1cm4ge29mZnNldDp0LGxpbmU6LTEsY29sdW1uOi0xfTtuIGluIGp8fChqW25dPXt9KTtmb3IodmFyIHI9altuXSxlPTAsdT0wLG89MCxpPXQ7aT49MDspe2lmKGkgaW4gcil7ZT1yW2ldLmxpbmUsMD09PW8mJihvPXJbaV0ubGluZVN0YXJ0KTticmVha30iXG4iPT09bi5jaGFyQXQoaSkmJih1KyssMD09PW8mJihvPWkrMSkpLGktLTt9dmFyIGY9ZSt1LGE9dC1vO3JldHVybiByW3RdPXtsaW5lOmYsbGluZVN0YXJ0Om99LHtvZmZzZXQ6dCxsaW5lOmYrMSxjb2x1bW46YSsxfX1mdW5jdGlvbiBfKG4pe2lmKCF5KG4pKXRocm93IG5ldyBFcnJvcigibm90IGEgcGFyc2VyOiAiK24pfWZ1bmN0aW9uIEwobix0KXtyZXR1cm4gInN0cmluZyI9PXR5cGVvZiBuP24uY2hhckF0KHQpOm5bdF19ZnVuY3Rpb24gTyhuKXtpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEVycm9yKCJub3QgYSBudW1iZXI6ICIrbil9ZnVuY3Rpb24gayhuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIGZ1bmN0aW9uOiAiK24pfWZ1bmN0aW9uIFAobil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigibm90IGEgc3RyaW5nOiAiK24pfXZhciBxPTIsQT0zLEk9OCxGPTUqSSxNPTQqSSx6PSIgICI7ZnVuY3Rpb24gUihuLHQpe3JldHVybiBuZXcgQXJyYXkodCsxKS5qb2luKG4pfWZ1bmN0aW9uIFUobix0LHIpe3ZhciBlPXQtbi5sZW5ndGg7cmV0dXJuIGU8PTA/bjpSKHIsZSkrbn1mdW5jdGlvbiBXKG4sdCxyLGUpe3JldHVybiB7ZnJvbTpuLXQ+MD9uLXQ6MCx0bzpuK3I+ZT9lOm4rcn19ZnVuY3Rpb24gRChuLHQpe3ZhciByLGUsdSxvLGEsYz10LmluZGV4LHM9Yy5vZmZzZXQsbD0xO2lmKHM9PT1uLmxlbmd0aClyZXR1cm4gIkdvdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCI7aWYodyhuKSl7dmFyIHA9cy1zJUksaD1zLXAsZD1XKHAsRixNK0ksbi5sZW5ndGgpLHY9ZihmdW5jdGlvbihuKXtyZXR1cm4gZihmdW5jdGlvbihuKXtyZXR1cm4gVShuLnRvU3RyaW5nKDE2KSwyLCIwIil9LG4pfSxmdW5jdGlvbihuLHQpe3ZhciByPW4ubGVuZ3RoLGU9W10sdT0wO2lmKHI8PXQpcmV0dXJuIFtuLnNsaWNlKCldO2Zvcih2YXIgbz0wO288cjtvKyspZVt1XXx8ZS5wdXNoKFtdKSxlW3VdLnB1c2gobltvXSksKG8rMSkldD09MCYmdSsrO3JldHVybiBlfShuLnNsaWNlKGQuZnJvbSxkLnRvKS50b0pTT04oKS5kYXRhLEkpKTtvPWZ1bmN0aW9uKG4pe3JldHVybiAwPT09bi5mcm9tJiYxPT09bi50bz97ZnJvbTpuLmZyb20sdG86bi50b306e2Zyb206bi5mcm9tL0ksdG86TWF0aC5mbG9vcihuLnRvL0kpfX0oZCksZT1wL0kscj0zKmgsaD49NCYmKHIrPTEpLGw9Mix1PWYoZnVuY3Rpb24obil7cmV0dXJuIG4ubGVuZ3RoPD00P24uam9pbigiICIpOm4uc2xpY2UoMCw0KS5qb2luKCIgIikrIiAgIituLnNsaWNlKDQpLmpvaW4oIiAiKX0sdiksKGE9KDgqKG8udG8+MD9vLnRvLTE6by50bykpLnRvU3RyaW5nKDE2KS5sZW5ndGgpPDImJihhPTIpO31lbHNlIHt2YXIgZz1uLnNwbGl0KC9cclxufFtcblxyXHUyMDI4XHUyMDI5XS8pO3I9Yy5jb2x1bW4tMSxlPWMubGluZS0xLG89VyhlLHEsQSxnLmxlbmd0aCksdT1nLnNsaWNlKG8uZnJvbSxvLnRvKSxhPW8udG8udG9TdHJpbmcoKS5sZW5ndGg7fXZhciBtPWUtby5mcm9tO3JldHVybiB3KG4pJiYoYT0oOCooby50bz4wP28udG8tMTpvLnRvKSkudG9TdHJpbmcoMTYpLmxlbmd0aCk8MiYmKGE9MiksaShmdW5jdGlvbih0LGUsdSl7dmFyIGksZj11PT09bSxjPWY/Ij4gIjp6O3JldHVybiBpPXcobik/VSgoOCooby5mcm9tK3UpKS50b1N0cmluZygxNiksYSwiMCIpOlUoKG8uZnJvbSt1KzEpLnRvU3RyaW5nKCksYSwiICIpLFtdLmNvbmNhdCh0LFtjK2krIiB8ICIrZV0sZj9beitSKCIgIixhKSsiIHwgIitVKCIiLHIsIiAiKStSKCJeIixsKV06W10pfSxbXSx1KS5qb2luKCJcbiIpfWZ1bmN0aW9uIE4obix0KXtyZXR1cm4gWyJcbiIsIi0tIFBBUlNJTkcgRkFJTEVEICIrUigiLSIsNTApLCJcblxuIixEKG4sdCksIlxuXG4iLChyPXQuZXhwZWN0ZWQsMT09PXIubGVuZ3RoPyJFeHBlY3RlZDpcblxuIityWzBdOiJFeHBlY3RlZCBvbmUgb2YgdGhlIGZvbGxvd2luZzogXG5cbiIrci5qb2luKCIsICIpKSwiXG4iXS5qb2luKCIiKTt2YXIgcjt9ZnVuY3Rpb24gRyhuKXtyZXR1cm4gdm9pZCAwIT09bi5mbGFncz9uLmZsYWdzOltuLmdsb2JhbD8iZyI6IiIsbi5pZ25vcmVDYXNlPyJpIjoiIixuLm11bHRpbGluZT8ibSI6IiIsbi51bmljb2RlPyJ1IjoiIixuLnN0aWNreT8ieSI6IiJdLmpvaW4oIiIpfWZ1bmN0aW9uIEMoKXtmb3IodmFyIG49W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLHQ9bi5sZW5ndGgscj0wO3I8dDtyKz0xKV8obltyXSk7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXtmb3IodmFyIHUsbz1uZXcgQXJyYXkodCksaT0wO2k8dDtpKz0xKXtpZighKHU9QihuW2ldLl8ocixlKSx1KSkuc3RhdHVzKXJldHVybiB1O29baV09dS52YWx1ZSxlPXUuaW5kZXg7fXJldHVybiBCKGIoZSxvKSx1KX0pfWZ1bmN0aW9uIEooKXt2YXIgbj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigic2VxTWFwIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpO3ZhciB0PW4ucG9wKCk7cmV0dXJuIGsodCksQy5hcHBseShudWxsLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdC5hcHBseShudWxsLG4pfSl9ZnVuY3Rpb24gVCgpe3ZhciBuPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSx0PW4ubGVuZ3RoO2lmKDA9PT10KXJldHVybiBZKCJ6ZXJvIGFsdGVybmF0ZXMiKTtmb3IodmFyIHI9MDtyPHQ7cis9MSlfKG5bcl0pO3JldHVybiBlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlLHU9MDt1PG4ubGVuZ3RoO3UrPTEpaWYoKGU9QihuW3VdLl8odCxyKSxlKSkuc3RhdHVzKXJldHVybiBlO3JldHVybiBlfSl9ZnVuY3Rpb24gVihuLHQpe3JldHVybiBIKG4sdCkub3IoWChbXSkpfWZ1bmN0aW9uIEgobix0KXtyZXR1cm4gXyhuKSxfKHQpLEoobix0LnRoZW4obikubWFueSgpLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIFtuXS5jb25jYXQodCl9KX1mdW5jdGlvbiBLKG4pe1Aobik7dmFyIHQ9IiciK24rIiciO3JldHVybiBlKGZ1bmN0aW9uKHIsZSl7dmFyIHU9ZStuLmxlbmd0aCxvPXIuc2xpY2UoZSx1KTtyZXR1cm4gbz09PW4/Yih1LG8pOngoZSx0KX0pfWZ1bmN0aW9uIFEobix0KXshZnVuY3Rpb24obil7aWYoIShuIGluc3RhbmNlb2YgUmVnRXhwKSl0aHJvdyBuZXcgRXJyb3IoIm5vdCBhIHJlZ2V4cDogIituKTtmb3IodmFyIHQ9RyhuKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBlPXQuY2hhckF0KHIpO2lmKCJpIiE9PWUmJiJtIiE9PWUmJiJ1IiE9PWUmJiJzIiE9PWUpdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCByZWdleHAgZmxhZyAiJytlKyciOiAnK24pfX0obiksYXJndW1lbnRzLmxlbmd0aD49Mj9PKHQpOnQ9MDt2YXIgcj1mdW5jdGlvbihuKXtyZXR1cm4gUmVnRXhwKCJeKD86IituLnNvdXJjZSsiKSIsRyhuKSl9KG4pLHU9IiIrbjtyZXR1cm4gZShmdW5jdGlvbihuLGUpe3ZhciBvPXIuZXhlYyhuLnNsaWNlKGUpKTtpZihvKXtpZigwPD10JiZ0PD1vLmxlbmd0aCl7dmFyIGk9b1swXSxmPW9bdF07cmV0dXJuIGIoZStpLmxlbmd0aCxmKX1yZXR1cm4geChlLCJ2YWxpZCBtYXRjaCBncm91cCAoMCB0byAiK28ubGVuZ3RoKyIpIGluICIrdSl9cmV0dXJuIHgoZSx1KX0pfWZ1bmN0aW9uIFgobil7cmV0dXJuIGUoZnVuY3Rpb24odCxyKXtyZXR1cm4gYihyLG4pfSl9ZnVuY3Rpb24gWShuKXtyZXR1cm4gZShmdW5jdGlvbih0LHIpe3JldHVybiB4KHIsbil9KX1mdW5jdGlvbiBaKG4pe2lmKHkobikpcmV0dXJuIGUoZnVuY3Rpb24odCxyKXt2YXIgZT1uLl8odCxyKTtyZXR1cm4gZS5pbmRleD1yLGUudmFsdWU9IiIsZX0pO2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gWihLKG4pKTtpZihuIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBaKFEobikpO3Rocm93IG5ldyBFcnJvcigibm90IGEgc3RyaW5nLCByZWdleHAsIG9yIHBhcnNlcjogIituKX1mdW5jdGlvbiAkKG4pe3JldHVybiBfKG4pLGUoZnVuY3Rpb24odCxyKXt2YXIgZT1uLl8odCxyKSx1PXQuc2xpY2UocixlLmluZGV4KTtyZXR1cm4gZS5zdGF0dXM/eChyLCdub3QgIicrdSsnIicpOmIocixudWxsKX0pfWZ1bmN0aW9uIG5uKG4pe3JldHVybiBrKG4pLGUoZnVuY3Rpb24odCxyKXt2YXIgZT1MKHQscik7cmV0dXJuIHI8dC5sZW5ndGgmJm4oZSk/YihyKzEsZSk6eChyLCJhIGNoYXJhY3Rlci9ieXRlIG1hdGNoaW5nICIrbil9KX1mdW5jdGlvbiB0bihuLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPXZvaWQgMCk7dmFyIHI9ZShmdW5jdGlvbihuLGUpe3JldHVybiByLl89dCgpLl8sci5fKG4sZSl9KTtyZXR1cm4gbj9yLmRlc2Mobik6cn1mdW5jdGlvbiBybigpe3JldHVybiBZKCJmYW50YXN5LWxhbmQvZW1wdHkiKX11LnBhcnNlPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2YgbiYmIXcobikpdGhyb3cgbmV3IEVycm9yKCIucGFyc2UgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHN0cmluZyBvciBCdWZmZXIgYXMgaXRzIGFyZ3VtZW50Iik7dmFyIHQscj10aGlzLnNraXAoZm4pLl8obiwwKTtyZXR1cm4gdD1yLnN0YXR1cz97c3RhdHVzOiEwLHZhbHVlOnIudmFsdWV9OntzdGF0dXM6ITEsaW5kZXg6UyhuLHIuZnVydGhlc3QpLGV4cGVjdGVkOnIuZXhwZWN0ZWR9LGRlbGV0ZSBqW25dLHR9LHUudHJ5UGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5wYXJzZShuKTtpZih0LnN0YXR1cylyZXR1cm4gdC52YWx1ZTt2YXIgcj1OKG4sdCksZT1uZXcgRXJyb3Iocik7dGhyb3cgZS50eXBlPSJQYXJzaW1tb25FcnJvciIsZS5yZXN1bHQ9dCxlfSx1LmFzc2VydD1mdW5jdGlvbihuLHQpe3JldHVybiB0aGlzLmNoYWluKGZ1bmN0aW9uKHIpe3JldHVybiBuKHIpP1gocik6WSh0KX0pfSx1Lm9yPWZ1bmN0aW9uKG4pe3JldHVybiBUKHRoaXMsbil9LHUudHJpbT1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy53cmFwKG4sbil9LHUud3JhcD1mdW5jdGlvbihuLHQpe3JldHVybiBKKG4sdGhpcyx0LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHR9KX0sdS50aHJ1PWZ1bmN0aW9uKG4pe3JldHVybiBuKHRoaXMpfSx1LnRoZW49ZnVuY3Rpb24obil7cmV0dXJuIF8obiksQyh0aGlzLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gblsxXX0pfSx1Lm1hbnk9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3JldHVybiBlKGZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPVtdLHU9dm9pZCAwOzspe2lmKCEodT1CKG4uXyh0LHIpLHUpKS5zdGF0dXMpcmV0dXJuIEIoYihyLGUpLHUpO2lmKHI9PT11LmluZGV4KXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiAubWFueSgpIHBhcnNlciAtLS0gY2FsbGluZyAubWFueSgpIG9uIGEgcGFyc2VyIHdoaWNoIGNhbiBhY2NlcHQgemVybyBjaGFyYWN0ZXJzIGlzIHVzdWFsbHkgdGhlIGNhdXNlIik7cj11LmluZGV4LGUucHVzaCh1LnZhbHVlKTt9fSl9LHUudGllV2l0aD1mdW5jdGlvbihuKXtyZXR1cm4gUChuKSx0aGlzLm1hcChmdW5jdGlvbih0KXtpZihmdW5jdGlvbihuKXtpZighRShuKSl0aHJvdyBuZXcgRXJyb3IoIm5vdCBhbiBhcnJheTogIituKX0odCksdC5sZW5ndGgpe1AodFswXSk7Zm9yKHZhciByPXRbMF0sZT0xO2U8dC5sZW5ndGg7ZSsrKVAodFtlXSkscis9bit0W2VdO3JldHVybiByfXJldHVybiAiIn0pfSx1LnRpZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRpZVdpdGgoIiIpfSx1LnRpbWVzPWZ1bmN0aW9uKG4sdCl7dmFyIHI9dGhpcztyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYodD1uKSxPKG4pLE8odCksZShmdW5jdGlvbihlLHUpe2Zvcih2YXIgbz1bXSxpPXZvaWQgMCxmPXZvaWQgMCxhPTA7YTxuO2ErPTEpe2lmKGY9QihpPXIuXyhlLHUpLGYpLCFpLnN0YXR1cylyZXR1cm4gZjt1PWkuaW5kZXgsby5wdXNoKGkudmFsdWUpO31mb3IoO2E8dCYmKGY9QihpPXIuXyhlLHUpLGYpLGkuc3RhdHVzKTthKz0xKXU9aS5pbmRleCxvLnB1c2goaS52YWx1ZSk7cmV0dXJuIEIoYih1LG8pLGYpfSl9LHUucmVzdWx0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBufSl9LHUuYXRNb3N0PWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnRpbWVzKDAsbil9LHUuYXRMZWFzdD1mdW5jdGlvbihuKXtyZXR1cm4gSih0aGlzLnRpbWVzKG4pLHRoaXMubWFueSgpLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4uY29uY2F0KHQpfSl9LHUubWFwPWZ1bmN0aW9uKG4pe2sobik7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQuXyhyLGUpO3JldHVybiB1LnN0YXR1cz9CKGIodS5pbmRleCxuKHUudmFsdWUpKSx1KTp1fSl9LHUuY29udHJhbWFwPWZ1bmN0aW9uKG4pe2sobik7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQucGFyc2UobihyLnNsaWNlKGUpKSk7cmV0dXJuIHUuc3RhdHVzP2IoZStyLmxlbmd0aCx1LnZhbHVlKTp1fSl9LHUucHJvbWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGsobiksayh0KSx0aGlzLmNvbnRyYW1hcChuKS5tYXAodCl9LHUuc2tpcD1mdW5jdGlvbihuKXtyZXR1cm4gQyh0aGlzLG4pLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gblswXX0pfSx1Lm1hcms9ZnVuY3Rpb24oKXtyZXR1cm4gSihlbix0aGlzLGVuLGZ1bmN0aW9uKG4sdCxyKXtyZXR1cm4ge3N0YXJ0Om4sdmFsdWU6dCxlbmQ6cn19KX0sdS5ub2RlPWZ1bmN0aW9uKG4pe3JldHVybiBKKGVuLHRoaXMsZW4sZnVuY3Rpb24odCxyLGUpe3JldHVybiB7bmFtZTpuLHZhbHVlOnIsc3RhcnQ6dCxlbmQ6ZX19KX0sdS5zZXBCeT1mdW5jdGlvbihuKXtyZXR1cm4gVih0aGlzLG4pfSx1LnNlcEJ5MT1mdW5jdGlvbihuKXtyZXR1cm4gSCh0aGlzLG4pfSx1Lmxvb2thaGVhZD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5za2lwKFoobikpfSx1Lm5vdEZvbGxvd2VkQnk9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuc2tpcCgkKG4pKX0sdS5kZXNjPWZ1bmN0aW9uKG4pe0Uobil8fChuPVtuXSk7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQuXyhyLGUpO3JldHVybiB1LnN0YXR1c3x8KHUuZXhwZWN0ZWQ9biksdX0pfSx1LmZhbGxiYWNrPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm9yKFgobikpfSx1LmFwPWZ1bmN0aW9uKG4pe3JldHVybiBKKG4sdGhpcyxmdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSl9LHUuY2hhaW49ZnVuY3Rpb24obil7dmFyIHQ9dGhpcztyZXR1cm4gZShmdW5jdGlvbihyLGUpe3ZhciB1PXQuXyhyLGUpO3JldHVybiB1LnN0YXR1cz9CKG4odS52YWx1ZSkuXyhyLHUuaW5kZXgpLHUpOnV9KX0sdS5jb25jYXQ9dS5vcix1LmVtcHR5PXJuLHUub2Y9WCx1WyJmYW50YXN5LWxhbmQvYXAiXT11LmFwLHVbImZhbnRhc3ktbGFuZC9jaGFpbiJdPXUuY2hhaW4sdVsiZmFudGFzeS1sYW5kL2NvbmNhdCJdPXUuY29uY2F0LHVbImZhbnRhc3ktbGFuZC9lbXB0eSJdPXUuZW1wdHksdVsiZmFudGFzeS1sYW5kL29mIl09dS5vZix1WyJmYW50YXN5LWxhbmQvbWFwIl09dS5tYXA7dmFyIGVuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gYih0LFMobix0KSl9KSx1bj1lKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoP3godCwiYW55IGNoYXJhY3Rlci9ieXRlIik6Yih0KzEsTChuLHQpKX0pLG9uPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gYihuLmxlbmd0aCxuLnNsaWNlKHQpKX0pLGZuPWUoZnVuY3Rpb24obix0KXtyZXR1cm4gdDxuLmxlbmd0aD94KHQsIkVPRiIpOmIodCxudWxsKX0pLGFuPVEoL1swLTldLykuZGVzYygiYSBkaWdpdCIpLGNuPVEoL1swLTldKi8pLmRlc2MoIm9wdGlvbmFsIGRpZ2l0cyIpLHNuPVEoL1thLXpdL2kpLmRlc2MoImEgbGV0dGVyIiksbG49USgvW2Etel0qL2kpLmRlc2MoIm9wdGlvbmFsIGxldHRlcnMiKSxwbj1RKC9ccyovKS5kZXNjKCJvcHRpb25hbCB3aGl0ZXNwYWNlIiksaG49USgvXHMrLykuZGVzYygid2hpdGVzcGFjZSIpLGRuPUsoIlxyIiksdm49SygiXG4iKSxnbj1LKCJcclxuIiksbW49VChnbix2bixkbikuZGVzYygibmV3bGluZSIpLHluPVQobW4sZm4pO2UuYWxsPW9uLGUuYWx0PVQsZS5hbnk9dW4sZS5jcj1kbixlLmNyZWF0ZUxhbmd1YWdlPWZ1bmN0aW9uKG4pe3ZhciB0PXt9O2Zvcih2YXIgciBpbiBuKSh7fSkuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiZmdW5jdGlvbihyKXt0W3JdPXRuKGZ1bmN0aW9uKCl7cmV0dXJuIG5bcl0odCl9KTt9KHIpO3JldHVybiB0fSxlLmNybGY9Z24sZS5jdXN0b209ZnVuY3Rpb24obil7cmV0dXJuIGUobihiLHgpKX0sZS5kaWdpdD1hbixlLmRpZ2l0cz1jbixlLmVtcHR5PXJuLGUuZW5kPXluLGUuZW9mPWZuLGUuZmFpbD1ZLGUuZm9ybWF0RXJyb3I9TixlLmluZGV4PWVuLGUuaXNQYXJzZXI9eSxlLmxhenk9dG4sZS5sZXR0ZXI9c24sZS5sZXR0ZXJzPWxuLGUubGY9dm4sZS5sb29rYWhlYWQ9WixlLm1ha2VGYWlsdXJlPXgsZS5tYWtlU3VjY2Vzcz1iLGUubmV3bGluZT1tbixlLm5vbmVPZj1mdW5jdGlvbihuKXtyZXR1cm4gbm4oZnVuY3Rpb24odCl7cmV0dXJuIG4uaW5kZXhPZih0KTwwfSkuZGVzYygibm9uZSBvZiAnIituKyInIil9LGUubm90Rm9sbG93ZWRCeT0kLGUub2Y9WCxlLm9uZU9mPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD1uLnNwbGl0KCIiKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT0iJyIrdFtyXSsiJyI7cmV0dXJuIG5uKGZ1bmN0aW9uKHQpe3JldHVybiBuLmluZGV4T2YodCk+PTB9KS5kZXNjKHQpfSxlLm9wdFdoaXRlc3BhY2U9cG4sZS5QYXJzZXI9ZSxlLnJhbmdlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5uKGZ1bmN0aW9uKHIpe3JldHVybiBuPD1yJiZyPD10fSkuZGVzYyhuKyItIit0KX0sZS5yZWdleD1RLGUucmVnZXhwPVEsZS5zZXBCeT1WLGUuc2VwQnkxPUgsZS5zZXE9QyxlLnNlcU1hcD1KLGUuc2VxT2JqPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQ9e30scj0wLHU9KG49YXJndW1lbnRzLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKSxvPXUubGVuZ3RoLGk9MDtpPG87aSs9MSl7dmFyIGY9dVtpXTtpZigheShmKSl7aWYoRShmKSYmMj09PWYubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGZbMF0mJnkoZlsxXSkpe3ZhciBhPWZbMF07aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsYSkpdGhyb3cgbmV3IEVycm9yKCJzZXFPYmo6IGR1cGxpY2F0ZSBrZXkgIithKTt0W2FdPSEwLHIrKztjb250aW51ZX10aHJvdyBuZXcgRXJyb3IoInNlcU9iaiBhcmd1bWVudHMgbXVzdCBiZSBwYXJzZXJzIG9yIFtzdHJpbmcsIHBhcnNlcl0gYXJyYXkgcGFpcnMuIil9fWlmKDA9PT1yKXRocm93IG5ldyBFcnJvcigic2VxT2JqIGV4cGVjdHMgYXQgbGVhc3Qgb25lIG5hbWVkIHBhcnNlciwgZm91bmQgemVybyIpO3JldHVybiBlKGZ1bmN0aW9uKG4sdCl7Zm9yKHZhciByLGU9e30saT0wO2k8bztpKz0xKXt2YXIgZixhO2lmKEUodVtpXSk/KGY9dVtpXVswXSxhPXVbaV1bMV0pOihmPW51bGwsYT11W2ldKSwhKHI9QihhLl8obix0KSxyKSkuc3RhdHVzKXJldHVybiByO2YmJihlW2ZdPXIudmFsdWUpLHQ9ci5pbmRleDt9cmV0dXJuIEIoYih0LGUpLHIpfSl9LGUuc3RyaW5nPUssZS5zdWNjZWVkPVgsZS50YWtlV2hpbGU9ZnVuY3Rpb24obil7cmV0dXJuIGsobiksZShmdW5jdGlvbih0LHIpe2Zvcih2YXIgZT1yO2U8dC5sZW5ndGgmJm4oTCh0LGUpKTspZSsrO3JldHVybiBiKGUsdC5zbGljZShyLGUpKX0pfSxlLnRlc3Q9bm4sZS53aGl0ZXNwYWNlPWhuLGVbImZhbnRhc3ktbGFuZC9lbXB0eSJdPXJuLGVbImZhbnRhc3ktbGFuZC9vZiJdPVgsZS5CaW5hcnk9e2JpdFNlcTpsLGJpdFNlcU9iajpmdW5jdGlvbihuKXtzKCk7dmFyIHQ9e30scj0wLGU9ZihmdW5jdGlvbihuKXtpZihFKG4pKXt2YXIgZT1uO2lmKDIhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlsiK2Uuam9pbigiLCAiKSsiXSBzaG91bGQgYmUgbGVuZ3RoIDIsIGdvdCBsZW5ndGggIitlLmxlbmd0aCk7aWYoUChlWzBdKSxPKGVbMV0pLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGVbMF0pKXRocm93IG5ldyBFcnJvcigiZHVwbGljYXRlIGtleSBpbiBiaXRTZXFPYmo6ICIrZVswXSk7cmV0dXJuIHRbZVswXV09ITAscisrLGV9cmV0dXJuIE8obiksW251bGwsbl19LG4pO2lmKHI8MSl0aHJvdyBuZXcgRXJyb3IoImJpdFNlcU9iaiBleHBlY3RzIGF0IGxlYXN0IG9uZSBuYW1lZCBwYWlyLCBnb3QgWyIrbi5qb2luKCIsICIpKyJdIik7dmFyIHU9ZihmdW5jdGlvbihuKXtyZXR1cm4gblswXX0sZSk7cmV0dXJuIGwoZihmdW5jdGlvbihuKXtyZXR1cm4gblsxXX0sZSkpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gaShmdW5jdGlvbihuLHQpe3JldHVybiBudWxsIT09dFswXSYmKG5bdFswXV09dFsxXSksbn0se30sZihmdW5jdGlvbih0LHIpe3JldHVybiBbdCxuW3JdXX0sdSkpfSl9LGJ5dGU6ZnVuY3Rpb24obil7aWYocygpLE8obiksbj4yNTUpdGhyb3cgbmV3IEVycm9yKCJWYWx1ZSBzcGVjaWZpZWQgdG8gYnl0ZSBjb25zdHJ1Y3RvciAoIituKyI9MHgiK24udG9TdHJpbmcoMTYpKyIpIGlzIGxhcmdlciBpbiB2YWx1ZSB0aGFuIGEgc2luZ2xlIGJ5dGUuIik7dmFyIHQ9KG4+MTU/IjB4IjoiMHgwIikrbi50b1N0cmluZygxNik7cmV0dXJuIGUoZnVuY3Rpb24ocixlKXt2YXIgdT1MKHIsZSk7cmV0dXJuIHU9PT1uP2IoZSsxLHUpOngoZSx0KX0pfSxidWZmZXI6ZnVuY3Rpb24obil7cmV0dXJuIHAoImJ1ZmZlciIsbikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBCdWZmZXIuZnJvbShuKX0pfSxlbmNvZGVkU3RyaW5nOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHAoInN0cmluZyIsdCkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKG4pfSl9LHVpbnRCRTpkLHVpbnQ4QkU6ZCgxKSx1aW50MTZCRTpkKDIpLHVpbnQzMkJFOmQoNCksdWludExFOnYsdWludDhMRTp2KDEpLHVpbnQxNkxFOnYoMiksdWludDMyTEU6dig0KSxpbnRCRTpnLGludDhCRTpnKDEpLGludDE2QkU6ZygyKSxpbnQzMkJFOmcoNCksaW50TEU6bSxpbnQ4TEU6bSgxKSxpbnQxNkxFOm0oMiksaW50MzJMRTptKDQpLGZsb2F0QkU6cCgiZmxvYXRCRSIsNCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWRGbG9hdEJFKDApfSksZmxvYXRMRTpwKCJmbG9hdExFIiw0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZEZsb2F0TEUoMCl9KSxkb3VibGVCRTpwKCJkb3VibGVCRSIsOCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJlYWREb3VibGVCRSgwKX0pLGRvdWJsZUxFOnAoImRvdWJsZUxFIiw4KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4ucmVhZERvdWJsZUxFKDApfSl9LG4uZXhwb3J0cz1lO31dKX0pOwogICAgfShwYXJzaW1tb25fdW1kX21pbikpOwoKICAgIC8qKiBVdGlsaXR5IG1ldGhvZHMgZm9yIGNyZWF0aW5nICYgY29tcGFyaW5nIGZpZWxkcy4gKi8NCiAgICB2YXIgRmllbGRzOw0KICAgIChmdW5jdGlvbiAoRmllbGRzKSB7DQogICAgICAgIGZ1bmN0aW9uIHZhcmlhYmxlKG5hbWUpIHsNCiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJ2YXJpYWJsZSIsIG5hbWUgfTsNCiAgICAgICAgfQ0KICAgICAgICBGaWVsZHMudmFyaWFibGUgPSB2YXJpYWJsZTsNCiAgICAgICAgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZSkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpdGVyYWwiLCB2YWx1ZSB9Ow0KICAgICAgICB9DQogICAgICAgIEZpZWxkcy5saXRlcmFsID0gbGl0ZXJhbDsNCiAgICAgICAgZnVuY3Rpb24gYmluYXJ5T3AobGVmdCwgb3AsIHJpZ2h0KSB7DQogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiYmluYXJ5b3AiLCBsZWZ0LCBvcCwgcmlnaHQgfTsNCiAgICAgICAgfQ0KICAgICAgICBGaWVsZHMuYmluYXJ5T3AgPSBiaW5hcnlPcDsNCiAgICAgICAgZnVuY3Rpb24gaW5kZXgob2JqLCBpbmRleCkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImluZGV4Iiwgb2JqZWN0OiBvYmosIGluZGV4IH07DQogICAgICAgIH0NCiAgICAgICAgRmllbGRzLmluZGV4ID0gaW5kZXg7DQogICAgICAgIC8qKiBDb252ZXJ0cyBhIHN0cmluZyBpbiBkb3Qtbm90YXRpb24tZm9ybWF0IGludG8gYSB2YXJpYWJsZSB3aGljaCBpbmRleGVzLiAqLw0KICAgICAgICBmdW5jdGlvbiBpbmRleFZhcmlhYmxlKG5hbWUpIHsNCiAgICAgICAgICAgIGxldCBwYXJ0cyA9IG5hbWUuc3BsaXQoIi4iKTsNCiAgICAgICAgICAgIGxldCByZXN1bHQgPSBGaWVsZHMudmFyaWFibGUocGFydHNbMF0pOw0KICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhcnRzLmxlbmd0aDsgaW5kZXgrKykgew0KICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5pbmRleChyZXN1bHQsIEZpZWxkcy5saXRlcmFsKHBhcnRzW2luZGV4XSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICBGaWVsZHMuaW5kZXhWYXJpYWJsZSA9IGluZGV4VmFyaWFibGU7DQogICAgICAgIGZ1bmN0aW9uIGxhbWJkYShhcmdzLCB2YWx1ZSkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImxhbWJkYSIsIGFyZ3VtZW50czogYXJncywgdmFsdWUgfTsNCiAgICAgICAgfQ0KICAgICAgICBGaWVsZHMubGFtYmRhID0gbGFtYmRhOw0KICAgICAgICBmdW5jdGlvbiBmdW5jKGZ1bmMsIGFyZ3MpIHsNCiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJmdW5jdGlvbiIsIGZ1bmMsIGFyZ3VtZW50czogYXJncyB9Ow0KICAgICAgICB9DQogICAgICAgIEZpZWxkcy5mdW5jID0gZnVuYzsNCiAgICAgICAgZnVuY3Rpb24gbGlzdCh2YWx1ZXMpIHsNCiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsaXN0IiwgdmFsdWVzIH07DQogICAgICAgIH0NCiAgICAgICAgRmllbGRzLmxpc3QgPSBsaXN0Ow0KICAgICAgICBmdW5jdGlvbiBvYmplY3QodmFsdWVzKSB7DQogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAib2JqZWN0IiwgdmFsdWVzIH07DQogICAgICAgIH0NCiAgICAgICAgRmllbGRzLm9iamVjdCA9IG9iamVjdDsNCiAgICAgICAgZnVuY3Rpb24gbmVnYXRlKGNoaWxkKSB7DQogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAibmVnYXRlZCIsIGNoaWxkIH07DQogICAgICAgIH0NCiAgICAgICAgRmllbGRzLm5lZ2F0ZSA9IG5lZ2F0ZTsNCiAgICAgICAgZnVuY3Rpb24gaXNDb21wYXJlT3Aob3ApIHsNCiAgICAgICAgICAgIHJldHVybiBvcCA9PSAiPD0iIHx8IG9wID09ICI8IiB8fCBvcCA9PSAiPiIgfHwgb3AgPT0gIj49IiB8fCBvcCA9PSAiIT0iIHx8IG9wID09ICI9IjsNCiAgICAgICAgfQ0KICAgICAgICBGaWVsZHMuaXNDb21wYXJlT3AgPSBpc0NvbXBhcmVPcDsNCiAgICAgICAgRmllbGRzLk5VTEwgPSBGaWVsZHMubGl0ZXJhbChudWxsKTsNCiAgICB9KShGaWVsZHMgfHwgKEZpZWxkcyA9IHt9KSk7CgogICAgLyoqIEFTVCBpbXBsZW1lbnRhdGlvbiBmb3IgcXVlcmllcyBvdmVyIGRhdGEgc291cmNlcy4gKi8NCiAgICAvKiogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgc291cmNlcy4gKi8NCiAgICB2YXIgU291cmNlczsNCiAgICAoZnVuY3Rpb24gKFNvdXJjZXMpIHsNCiAgICAgICAgZnVuY3Rpb24gdGFnKHRhZykgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogInRhZyIsIHRhZyB9Ow0KICAgICAgICB9DQogICAgICAgIFNvdXJjZXMudGFnID0gdGFnOw0KICAgICAgICBmdW5jdGlvbiBjc3YocGF0aCkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImNzdiIsIHBhdGggfTsNCiAgICAgICAgfQ0KICAgICAgICBTb3VyY2VzLmNzdiA9IGNzdjsNCiAgICAgICAgZnVuY3Rpb24gZm9sZGVyKHByZWZpeCkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZvbGRlciIsIGZvbGRlcjogcHJlZml4IH07DQogICAgICAgIH0NCiAgICAgICAgU291cmNlcy5mb2xkZXIgPSBmb2xkZXI7DQogICAgICAgIGZ1bmN0aW9uIGxpbmsoZmlsZSwgaW5jb21pbmcpIHsNCiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsaW5rIiwgZmlsZSwgZGlyZWN0aW9uOiBpbmNvbWluZyA/ICJpbmNvbWluZyIgOiAib3V0Z29pbmciIH07DQogICAgICAgIH0NCiAgICAgICAgU291cmNlcy5saW5rID0gbGluazsNCiAgICAgICAgZnVuY3Rpb24gYmluYXJ5T3AobGVmdCwgb3AsIHJpZ2h0KSB7DQogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiYmluYXJ5b3AiLCBsZWZ0LCBvcCwgcmlnaHQgfTsNCiAgICAgICAgfQ0KICAgICAgICBTb3VyY2VzLmJpbmFyeU9wID0gYmluYXJ5T3A7DQogICAgICAgIGZ1bmN0aW9uIG5lZ2F0ZShjaGlsZCkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogIm5lZ2F0ZSIsIGNoaWxkIH07DQogICAgICAgIH0NCiAgICAgICAgU291cmNlcy5uZWdhdGUgPSBuZWdhdGU7DQogICAgICAgIGZ1bmN0aW9uIGVtcHR5KCkgew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImVtcHR5IiB9Ow0KICAgICAgICB9DQogICAgICAgIFNvdXJjZXMuZW1wdHkgPSBlbXB0eTsNCiAgICB9KShTb3VyY2VzIHx8IChTb3VyY2VzID0ge30pKTsKCiAgICAvKiogUHJvdmlkZXMgYSBsb29rdXAgdGFibGUgZm9yIHVuaXQgZHVyYXRpb25zIG9mIHRoZSBnaXZlbiB0eXBlLiAqLw0KICAgIGNvbnN0IERVUkFUSU9OX1RZUEVTID0gew0KICAgICAgICB5ZWFyOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB5ZWFyczogMSB9KSwNCiAgICAgICAgeXI6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHllYXJzOiAxIH0pLA0KICAgICAgICBtb250aDogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLA0KICAgICAgICBtbzogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgbW9udGhzOiAxIH0pLA0KICAgICAgICB3ZWVrOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwNCiAgICAgICAgd2s6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IHdlZWtzOiAxIH0pLA0KICAgICAgICB3OiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyB3ZWVrczogMSB9KSwNCiAgICAgICAgZGF5OiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KICAgICAgICBkOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pLA0KICAgICAgICBob3VyOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwNCiAgICAgICAgaHI6IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IGhvdXJzOiAxIH0pLA0KICAgICAgICBoOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBob3VyczogMSB9KSwNCiAgICAgICAgbWludXRlOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBtaW51dGVzOiAxIH0pLA0KICAgICAgICBtaW46IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksDQogICAgICAgIG06IER1cmF0aW9uXzEuZnJvbU9iamVjdCh7IG1pbnV0ZXM6IDEgfSksDQogICAgICAgIHNlY29uZDogRHVyYXRpb25fMS5mcm9tT2JqZWN0KHsgc2Vjb25kczogMSB9KSwNCiAgICAgICAgc2VjOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLA0KICAgICAgICBzOiBEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBzZWNvbmRzOiAxIH0pLA0KICAgIH07DQogICAgLyoqDQogICAgICogS2V5d29yZHMgd2hpY2ggY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGVzIGRpcmVjdGx5LiBVc2UgYHJvdy48dGhpbmc+YCBpZiBpdCBpcyBhIHZhcmlhYmxlIHlvdSBoYXZlIGRlZmluZWQgYW5kIHdhbnQNCiAgICAgKiB0byBhY2Nlc3MuDQogICAgICovDQogICAgY29uc3QgS0VZV09SRFMgPSBbIkZST00iLCAiV0hFUkUiLCAiTElNSVQiLCAiR1JPVVAiLCAiRkxBVFRFTiJdOw0KICAgIC8vLy8vLy8vLy8vLy8vLw0KICAgIC8vIFV0aWxpdGllcyAvLw0KICAgIC8vLy8vLy8vLy8vLy8vLw0KICAgIC8qKiBBdHRlbXB0IHRvIHBhcnNlIHRoZSBpbnNpZGUgb2YgYSBsaW5rIHRvIHB1bGwgb3V0IGRpc3BsYXkgbmFtZSwgc3VicGF0aCwgZXRjLiAqLw0KICAgIGZ1bmN0aW9uIHBhcnNlSW5uZXJMaW5rKGxpbmspIHsNCiAgICAgICAgbGV0IGRpc3BsYXkgPSB1bmRlZmluZWQ7DQogICAgICAgIGlmIChsaW5rLmluY2x1ZGVzKCJ8IikpIHsNCiAgICAgICAgICAgIGxldCBzcGxpdCA9IGxpbmsuc3BsaXQoInwiKTsNCiAgICAgICAgICAgIGxpbmsgPSBzcGxpdFswXTsNCiAgICAgICAgICAgIGRpc3BsYXkgPSBzcGxpdFsxXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAobGluay5pbmNsdWRlcygiIyIpKSB7DQogICAgICAgICAgICBsZXQgc3BsaXQgPSBsaW5rLnNwbGl0KCIjIik7DQogICAgICAgICAgICByZXR1cm4gTGluay5oZWFkZXIoc3BsaXRbMF0sIHNwbGl0WzFdLCBmYWxzZSwgZGlzcGxheSk7DQogICAgICAgIH0NCiAgICAgICAgZWxzZSBpZiAobGluay5pbmNsdWRlcygiXiIpKSB7DQogICAgICAgICAgICBsZXQgc3BsaXQgPSBsaW5rLnNwbGl0KCJeIik7DQogICAgICAgICAgICByZXR1cm4gTGluay5ibG9jayhzcGxpdFswXSwgc3BsaXRbMV0sIGZhbHNlLCBkaXNwbGF5KTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gTGluay5maWxlKGxpbmssIGZhbHNlLCBkaXNwbGF5KTsNCiAgICB9DQogICAgLyoqIENyZWF0ZSBhIGxlZnQtYXNzb2NpYXRpdmUgYmluYXJ5IHBhcnNlciB3aGljaCBwYXJzZXMgdGhlIGdpdmVuIHN1Yi1lbGVtZW50IGFuZCBzZXBhcmF0b3IuIEhhbmRsZXMgd2hpdGVzcGFjZS4gKi8NCiAgICBmdW5jdGlvbiBjcmVhdGVCaW5hcnlQYXJzZXIoY2hpbGQsIHNlcCwgY29tYmluZSkgew0KICAgICAgICByZXR1cm4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAoY2hpbGQsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgc2VwLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIGNoaWxkKS5tYW55KCksIChmaXJzdCwgcmVzdCkgPT4gew0KICAgICAgICAgICAgaWYgKHJlc3QubGVuZ3RoID09IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Ow0KICAgICAgICAgICAgbGV0IG5vZGUgPSBjb21iaW5lKGZpcnN0LCByZXN0WzBdWzFdLCByZXN0WzBdWzNdKTsNCiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCByZXN0Lmxlbmd0aDsgaW5kZXgrKykgew0KICAgICAgICAgICAgICAgIG5vZGUgPSBjb21iaW5lKG5vZGUsIHJlc3RbaW5kZXhdWzFdLCByZXN0W2luZGV4XVszXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gbm9kZTsNCiAgICAgICAgfSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGNoYWluT3B0KGJhc2UsIC4uLmZ1bmNzKSB7DQogICAgICAgIHJldHVybiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmN1c3RvbSgoc3VjY2VzcywgZmFpbHVyZSkgPT4gew0KICAgICAgICAgICAgcmV0dXJuIChpbnB1dCwgaSkgPT4gew0KICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBiYXNlLl8oaW5wdXQsIGkpOw0KICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXR1cykNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNzKSB7DQogICAgICAgICAgICAgICAgICAgIGxldCBuZXh0ID0gZnVuYyhyZXN1bHQudmFsdWUpLl8oaW5wdXQsIHJlc3VsdC5pbmRleCk7DQogICAgICAgICAgICAgICAgICAgIGlmICghbmV4dC5zdGF0dXMpDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXh0Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSk7DQogICAgfQ0KICAgIGNvbnN0IEVYUFJFU1NJT04gPSBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmNyZWF0ZUxhbmd1YWdlKHsNCiAgICAgICAgLy8gQSBmbG9hdGluZyBwb2ludCBudW1iZXI7IHRoZSBkZWNpbWFsIHBvaW50IGlzIG9wdGlvbmFsLg0KICAgICAgICBudW1iZXI6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoLy0/WzAtOV0rKFwuWzAtOV0rKT8vKQ0KICAgICAgICAgICAgLm1hcChzdHIgPT4gTnVtYmVyLnBhcnNlRmxvYXQoc3RyKSkNCiAgICAgICAgICAgIC5kZXNjKCJudW1iZXIiKSwNCiAgICAgICAgLy8gQSBxdW90ZS1zdXJyb3VuZGVkIHN0cmluZyB3aGljaCBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVycyAoJ1wnKS4NCiAgICAgICAgc3RyaW5nOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCciJykNCiAgICAgICAgICAgIC50aGVuKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHEuZXNjYXBlQ2hhcmFjdGVyLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm5vbmVPZignIlxcJykpDQogICAgICAgICAgICAuYXRMZWFzdCgwKQ0KICAgICAgICAgICAgLm1hcChjaGFycyA9PiBjaGFycy5qb2luKCIiKSkpDQogICAgICAgICAgICAuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygnIicpKQ0KICAgICAgICAgICAgLmRlc2MoInN0cmluZyIpLA0KICAgICAgICBlc2NhcGVDaGFyYWN0ZXI6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIlxcIikNCiAgICAgICAgICAgIC50aGVuKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYW55KQ0KICAgICAgICAgICAgLm1hcChlc2NhcGVkID0+IHsNCiAgICAgICAgICAgIC8vIElmIHdlIGFyZSBlc2NhcGluZyBhIGJhY2tzbGFzaCBvciBhIHF1b3RlLCBwYXNzIGluIG9uIGluIGVzY2FwZWQgZm9ybQ0KICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICciJykNCiAgICAgICAgICAgICAgICByZXR1cm4gJyInOw0KICAgICAgICAgICAgaWYgKGVzY2FwZWQgPT09ICJcXCIpDQogICAgICAgICAgICAgICAgcmV0dXJuICJcXCI7DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgcmV0dXJuICJcXCIgKyBlc2NhcGVkOw0KICAgICAgICB9KSwNCiAgICAgICAgLy8gQSBib29sZWFuIHRydWUvZmFsc2UgdmFsdWUuDQogICAgICAgIGJvb2w6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL3RydWV8ZmFsc2V8VHJ1ZXxGYWxzZS8pDQogICAgICAgICAgICAubWFwKHN0ciA9PiBzdHIudG9Mb3dlckNhc2UoKSA9PSAidHJ1ZSIpDQogICAgICAgICAgICAuZGVzYygiYm9vbGVhbiAoJ3RydWUnIG9yICdmYWxzZScpIiksDQogICAgICAgIC8vIEEgdGFnIG9mIHRoZSBmb3JtICcjc3R1ZmYvaGVsbG8tdGhlcmUnLg0KICAgICAgICB0YWc6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoLyNbXHB7TGV0dGVyfVxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31ccHtFbW9qaV9Db21wb25lbnR9XHcvLV0rL3UpLmRlc2MoInRhZyAoJyNoZWxsby9zdHVmZicpIiksDQogICAgICAgIC8vIEEgdmFyaWFibGUgaWRlbnRpZmllciwgd2hpY2ggaXMgYWxwaGFudW1lcmljIGFuZCBtdXN0IHN0YXJ0IHdpdGggYSBsZXR0ZXIuDQogICAgICAgIGlkZW50aWZpZXI6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL1tccHtMZXR0ZXJ9XHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfV1bXHB7TGV0dGVyfVxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31ccHtFbW9qaV9Db21wb25lbnR9XHdfLV0qL3UpLmRlc2MoInZhcmlhYmxlIGlkZW50aWZpZXIiKSwNCiAgICAgICAgLy8gQSB2YXJpYWJsZSBpZGVudGlmaWVyLCB3aGljaCBpcyBhbHBoYW51bWVyaWMgYW5kIG11c3Qgc3RhcnQgd2l0aCBhIGxldHRlci4gQ2FuIGluY2x1ZGUgZG90cy4NCiAgICAgICAgaWRlbnRpZmllckRvdDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvW1xwe0xldHRlcn1ccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9XVtccHtMZXR0ZXJ9XHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxwe0Vtb2ppX0NvbXBvbmVudH1cLlx3Xy1dKi91KS5kZXNjKCJ2YXJpYWJsZSBpZGVudGlmaWVyIiksDQogICAgICAgIC8vIEFuIE9ic2lkaWFuIGxpbmsgb2YgdGhlIGZvcm0gW1s8bGluaz5dXS4NCiAgICAgICAgbGluazogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXFtcWyhbXlxbXF1dKj8pXF1cXS91LCAxKQ0KICAgICAgICAgICAgLm1hcChsaW5rSW5uZXIgPT4gcGFyc2VJbm5lckxpbmsobGlua0lubmVyKSkNCiAgICAgICAgICAgIC5kZXNjKCJmaWxlIGxpbmsiKSwNCiAgICAgICAgZW1iZWRMaW5rOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIhIikuYXRNb3N0KDEpLCBxLmxpbmssIChwLCBsKSA9PiB7DQogICAgICAgICAgICBpZiAocC5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgIGwuZW1iZWQgPSB0cnVlOw0KICAgICAgICAgICAgcmV0dXJuIGw7DQogICAgICAgIH0pLA0KICAgICAgICAvLyBCaW5hcnkgcGx1cyBvciBtaW51cyBvcGVyYXRvci4NCiAgICAgICAgYmluYXJ5UGx1c01pbnVzOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cK3wtLykNCiAgICAgICAgICAgIC5tYXAoc3RyID0+IHN0cikNCiAgICAgICAgICAgIC5kZXNjKCInKycgb3IgJy0nIiksDQogICAgICAgIC8vIEJpbmFyeSB0aW1lcyBvciBkaXZpZGUgb3BlcmF0b3IuDQogICAgICAgIGJpbmFyeU11bERpdjogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXCp8XC8vKQ0KICAgICAgICAgICAgLm1hcChzdHIgPT4gc3RyKQ0KICAgICAgICAgICAgLmRlc2MoIicqJyBvciAnLyciKSwNCiAgICAgICAgLy8gQmluYXJ5IGNvbXBhcmlzb24gb3BlcmF0b3IuDQogICAgICAgIGJpbmFyeUNvbXBhcmVPcDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvPj18PD18IT18Pnw8fD0vKQ0KICAgICAgICAgICAgLm1hcChzdHIgPT4gc3RyKQ0KICAgICAgICAgICAgLmRlc2MoIic+PScgb3IgJzw9JyBvciAnIT0nIG9yICc9JyBvciAnPicgb3IgJzwnIiksDQogICAgICAgIC8vIEJpbmFyeSBib29sZWFuIGNvbWJpbmF0aW9uIG9wZXJhdG9yLg0KICAgICAgICBiaW5hcnlCb29sZWFuT3A6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5yZWdleHAoL2FuZHxvcnwmfFx8L2kpDQogICAgICAgICAgICAubWFwKHN0ciA9PiB7DQogICAgICAgICAgICBpZiAoc3RyLnRvTG93ZXJDYXNlKCkgPT0gImFuZCIpDQogICAgICAgICAgICAgICAgcmV0dXJuICImIjsNCiAgICAgICAgICAgIGVsc2UgaWYgKHN0ci50b0xvd2VyQ2FzZSgpID09ICJvciIpDQogICAgICAgICAgICAgICAgcmV0dXJuICJ8IjsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RyOw0KICAgICAgICB9KQ0KICAgICAgICAgICAgLmRlc2MoIidhbmQnIG9yICdvciciKSwNCiAgICAgICAgLy8gQSBkYXRlIHdoaWNoIGNhbiBiZSBZWVlZLU1NWy1ERFRISDptbTpzc10uDQogICAgICAgIHJvb3REYXRlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHs0fS8pLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLSIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKHllYXIsIF8sIG1vbnRoKSA9PiB7DQogICAgICAgICAgICByZXR1cm4gRGF0ZVRpbWVfMS5mcm9tT2JqZWN0KHsgeWVhcjogTnVtYmVyLnBhcnNlSW50KHllYXIpLCBtb250aDogTnVtYmVyLnBhcnNlSW50KG1vbnRoKSB9KTsNCiAgICAgICAgfSkuZGVzYygiZGF0ZSBpbiBmb3JtYXQgWVlZWS1NTVstRERUSEgtTU0tU1MuTVNdIiksDQogICAgICAgIGRhdGU6IHEgPT4gY2hhaW5PcHQocS5yb290RGF0ZSwgKHltKSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLSIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKF8sIGRheSkgPT4geW0uc2V0KHsgZGF5OiBOdW1iZXIucGFyc2VJbnQoZGF5KSB9KSksICh5bWQpID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJUIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHsyfS8pLCAoXywgaG91cikgPT4geW1kLnNldCh7IGhvdXI6IE51bWJlci5wYXJzZUludChob3VyKSB9KSksICh5bWRoKSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiOiIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKF8sIG1pbnV0ZSkgPT4geW1kaC5zZXQoeyBtaW51dGU6IE51bWJlci5wYXJzZUludChtaW51dGUpIH0pKSwgKHltZGhtKSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiOiIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7Mn0vKSwgKF8sIHNlY29uZCkgPT4geW1kaG0uc2V0KHsgc2Vjb25kOiBOdW1iZXIucGFyc2VJbnQoc2Vjb25kKSB9KSksICh5bWRobXMpID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIuIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMucmVnZXhwKC9cZHszfS8pLCAoXywgbWlsbGlzZWNvbmQpID0+IHltZGhtcy5zZXQoeyBtaWxsaXNlY29uZDogTnVtYmVyLnBhcnNlSW50KG1pbGxpc2Vjb25kKSB9KSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3VjY2VlZCh5bWRobXMpIC8vIHBhc3MNCiAgICAgICAgKSwgKGR0KSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKyIpLm9yKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIikpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnJlZ2V4cCgvXGR7MSwyfSg6XGR7Mn0pPy8pLCAocG0sIGhyKSA9PiBkdC5zZXRab25lKCJVVEMiICsgcG0gKyBocikpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiWiIpLCAoKSA9PiBkdC5zZXRab25lKCJ1dGMiKSkpKSwNCiAgICAgICAgLy8gQSBkYXRlLCBwbHVzIHZhcmlvdXMgc2hvcnRoYW5kIHRpbWVzIG9mIGRheSBpdCBjb3VsZCBiZS4NCiAgICAgICAgZGF0ZVBsdXM6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIm5vdyIpLm1hcChfID0+IERhdGVUaW1lXzEubG9jYWwoKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJ0b2RheSIpLm1hcChfID0+IERhdGVUaW1lXzEubG9jYWwoKS5zdGFydE9mKCJkYXkiKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJ0b21vcnJvdyIpLm1hcChfID0+IERhdGVUaW1lXzEubG9jYWwoKQ0KICAgICAgICAgICAgLnN0YXJ0T2YoImRheSIpDQogICAgICAgICAgICAucGx1cyhEdXJhdGlvbl8xLmZyb21PYmplY3QoeyBkYXlzOiAxIH0pKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJzb20iKS5tYXAoXyA9PiBEYXRlVGltZV8xLmxvY2FsKCkuc3RhcnRPZigibW9udGgiKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJzb3kiKS5tYXAoXyA9PiBEYXRlVGltZV8xLmxvY2FsKCkuc3RhcnRPZigieWVhciIpKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoImVvbSIpLm1hcChfID0+IERhdGVUaW1lXzEubG9jYWwoKS5lbmRPZigibW9udGgiKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJlb3kiKS5tYXAoXyA9PiBEYXRlVGltZV8xLmxvY2FsKCkuZW5kT2YoInllYXIiKSksIHEuZGF0ZSksDQogICAgICAgIC8vIEEgZHVyYXRpb24gb2YgdGltZS4NCiAgICAgICAgZHVyYXRpb25UeXBlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KC4uLk9iamVjdC5rZXlzKERVUkFUSU9OX1RZUEVTKS5tYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcpKSwNCiAgICAgICAgZHVyYXRpb246IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5udW1iZXIsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5kdXJhdGlvblR5cGUsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJzIikuYXRNb3N0KDEpLCAoY291bnQsIF8sIHQsIF8yKSA9PiBEVVJBVElPTl9UWVBFU1t0XS5tYXBVbml0cyh4ID0+IHggKiBjb3VudCkpLA0KICAgICAgICAvLyBBIHJhdyBudWxsIHZhbHVlLg0KICAgICAgICByYXdOdWxsOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJudWxsIiksDQogICAgICAgIC8vIFNvdXJjZSBwYXJzaW5nLg0KICAgICAgICB0YWdTb3VyY2U6IHEgPT4gcS50YWcubWFwKHRhZyA9PiBTb3VyY2VzLnRhZyh0YWcpKSwNCiAgICAgICAgY3N2U291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJjc3YoIikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBxLnN0cmluZywgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBwYXRoLCBfMikgPT4gU291cmNlcy5jc3YocGF0aCkpLA0KICAgICAgICBsaW5rSW5jb21pbmdTb3VyY2U6IHEgPT4gcS5saW5rLm1hcChsaW5rID0+IFNvdXJjZXMubGluayhsaW5rLnBhdGgsIHRydWUpKSwNCiAgICAgICAgbGlua091dGdvaW5nU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJvdXRnb2luZygiKS5za2lwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEubGluaywgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8xLCBsaW5rLCBfMikgPT4gU291cmNlcy5saW5rKGxpbmsucGF0aCwgZmFsc2UpKSwNCiAgICAgICAgZm9sZGVyU291cmNlOiBxID0+IHEuc3RyaW5nLm1hcChzdHIgPT4gU291cmNlcy5mb2xkZXIoc3RyKSksDQogICAgICAgIHBhcmVuc1NvdXJjZTogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKCIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuc291cmNlLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgXzIsIGZpZWxkLCBfMywgXzQpID0+IGZpZWxkKSwNCiAgICAgICAgbmVnYXRlU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCItIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIhIikpLCBxLmF0b21Tb3VyY2UsIChfLCBzb3VyY2UpID0+IFNvdXJjZXMubmVnYXRlKHNvdXJjZSkpLA0KICAgICAgICBhdG9tU291cmNlOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuYWx0KHEucGFyZW5zU291cmNlLCBxLm5lZ2F0ZVNvdXJjZSwgcS5saW5rT3V0Z29pbmdTb3VyY2UsIHEubGlua0luY29taW5nU291cmNlLCBxLmZvbGRlclNvdXJjZSwgcS50YWdTb3VyY2UsIHEuY3N2U291cmNlKSwNCiAgICAgICAgYmluYXJ5T3BTb3VyY2U6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuYXRvbVNvdXJjZSwgcS5iaW5hcnlCb29sZWFuT3AubWFwKHMgPT4gcyksIFNvdXJjZXMuYmluYXJ5T3ApLA0KICAgICAgICBzb3VyY2U6IHEgPT4gcS5iaW5hcnlPcFNvdXJjZSwNCiAgICAgICAgLy8gRmllbGQgcGFyc2luZy4NCiAgICAgICAgdmFyaWFibGVGaWVsZDogcSA9PiBxLmlkZW50aWZpZXINCiAgICAgICAgICAgIC5jaGFpbihyID0+IHsNCiAgICAgICAgICAgIGlmIChLRVlXT1JEUy5pbmNsdWRlcyhyLnRvVXBwZXJDYXNlKCkpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuZmFpbCgiVmFyaWFibGUgZmllbGRzIGNhbm5vdCBiZSBhIGtleXdvcmQgKCIgKyBLRVlXT1JEUy5qb2luKCIgb3IgIikgKyAiKSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3VjY2VlZChGaWVsZHMudmFyaWFibGUocikpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KQ0KICAgICAgICAgICAgLmRlc2MoInZhcmlhYmxlIiksDQogICAgICAgIG51bWJlckZpZWxkOiBxID0+IHEubnVtYmVyLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygibnVtYmVyIiksDQogICAgICAgIHN0cmluZ0ZpZWxkOiBxID0+IHEuc3RyaW5nLm1hcCh2YWwgPT4gRmllbGRzLmxpdGVyYWwodmFsKSkuZGVzYygic3RyaW5nIiksDQogICAgICAgIGJvb2xGaWVsZDogcSA9PiBxLmJvb2wubWFwKHZhbCA9PiBGaWVsZHMubGl0ZXJhbCh2YWwpKS5kZXNjKCJib29sZWFuIiksDQogICAgICAgIGRhdGVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiZGF0ZSgiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmRhdGVQbHVzLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChwcmVmaXgsIF8xLCBkYXRlLCBfMiwgcG9zdGZpeCkgPT4gRmllbGRzLmxpdGVyYWwoZGF0ZSkpLmRlc2MoImRhdGUiKSwNCiAgICAgICAgZHVyYXRpb25GaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiZHVyKCIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZHVyYXRpb24sIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKHByZWZpeCwgXzEsIGR1ciwgXzIsIHBvc3RmaXgpID0+IEZpZWxkcy5saXRlcmFsKGR1cikpLmRlc2MoImR1cmF0aW9uIiksDQogICAgICAgIG51bGxGaWVsZDogcSA9PiBxLnJhd051bGwubWFwKF8gPT4gRmllbGRzLk5VTEwpLA0KICAgICAgICBsaW5rRmllbGQ6IHEgPT4gcS5saW5rLm1hcChmID0+IEZpZWxkcy5saXRlcmFsKGYpKSwNCiAgICAgICAgbGlzdEZpZWxkOiBxID0+IHEuZmllbGQNCiAgICAgICAgICAgIC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCiAgICAgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJbIikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiXSIpKSkNCiAgICAgICAgICAgIC5tYXAobCA9PiBGaWVsZHMubGlzdChsKSkNCiAgICAgICAgICAgIC5kZXNjKCJsaXN0ICgnWzEsIDIsIDNdJykiKSwNCiAgICAgICAgb2JqZWN0RmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5pZGVudGlmaWVyLm9yKHEuc3RyaW5nKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIjoiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuZmllbGQsIChuYW1lLCBfc2VwLCB2YWx1ZSkgPT4gew0KICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTsNCiAgICAgICAgfSkNCiAgICAgICAgICAgIC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSkNCiAgICAgICAgICAgIC53cmFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCJ7Iikuc2tpcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UudGhlbihwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygifSIpKSkNCiAgICAgICAgICAgIC5tYXAodmFscyA9PiB7DQogICAgICAgICAgICBsZXQgcmVzID0ge307DQogICAgICAgICAgICBmb3IgKGxldCBlbnRyeSBvZiB2YWxzKQ0KICAgICAgICAgICAgICAgIHJlc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZhbHVlOw0KICAgICAgICAgICAgcmV0dXJuIEZpZWxkcy5vYmplY3QocmVzKTsNCiAgICAgICAgfSkNCiAgICAgICAgICAgIC5kZXNjKCJvYmplY3QgKCd7IGE6IDEsIGI6IDIgfScpIiksDQogICAgICAgIGF0b21JbmxpbmVGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChxLmRhdGUsIHEuZHVyYXRpb24ubWFwKGQgPT4gbm9ybWFsaXplRHVyYXRpb24oZCkpLCBxLnN0cmluZywgcS5lbWJlZExpbmssIHEuYm9vbCwgcS5udW1iZXIsIHEucmF3TnVsbCksDQogICAgICAgIGlubGluZUZpZWxkTGlzdDogcSA9PiBxLmF0b21JbmxpbmVGaWVsZC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKS5sb29rYWhlYWQocS5hdG9tSW5saW5lRmllbGQpKSwNCiAgICAgICAgaW5saW5lRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5hdG9tSW5saW5lRmllbGQsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIsIikudHJpbShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UpLCBxLmlubGluZUZpZWxkTGlzdCwgKGYsIF9zLCBsKSA9PiBbZl0uY29uY2F0KGwpKSwgcS5hdG9tSW5saW5lRmllbGQpLA0KICAgICAgICBhdG9tRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5hbHQocS5uZWdhdGVkRmllbGQsIHEubGlua0ZpZWxkLCBxLmxpc3RGaWVsZCwgcS5vYmplY3RGaWVsZCwgcS5sYW1iZGFGaWVsZCwgcS5wYXJlbnNGaWVsZCwgcS5ib29sRmllbGQsIHEubnVtYmVyRmllbGQsIHEuc3RyaW5nRmllbGQsIHEuZGF0ZUZpZWxkLCBxLmR1cmF0aW9uRmllbGQsIHEubnVsbEZpZWxkLCBxLnZhcmlhYmxlRmllbGQpLA0KICAgICAgICBpbmRleEZpZWxkOiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHEuYXRvbUZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLmFsdChxLmRvdFBvc3RmaXgsIHEuaW5kZXhQb3N0Zml4LCBxLmZ1bmN0aW9uUG9zdGZpeCkubWFueSgpLCAob2JqLCBwb3N0Zml4ZXMpID0+IHsNCiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYmo7DQogICAgICAgICAgICBmb3IgKGxldCBwb3N0IG9mIHBvc3RmaXhlcykgew0KICAgICAgICAgICAgICAgIHN3aXRjaCAocG9zdC50eXBlKSB7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgImRvdCI6DQogICAgICAgICAgICAgICAgICAgIGNhc2UgImluZGV4IjoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5pbmRleChyZXN1bHQsIHBvc3QuZmllbGQpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgImZ1bmN0aW9uIjoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpZWxkcy5mdW5jKHJlc3VsdCwgcG9zdC5maWVsZHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgfSksDQogICAgICAgIG5lZ2F0ZWRGaWVsZDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiISIpLCBxLmluZGV4RmllbGQsIChfLCBmaWVsZCkgPT4gRmllbGRzLm5lZ2F0ZShmaWVsZCkpLmRlc2MoIm5lZ2F0ZWQgZmllbGQiKSwNCiAgICAgICAgcGFyZW5zRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIigiKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlLCBxLmZpZWxkLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIpIiksIChfMSwgXzIsIGZpZWxkLCBfMywgXzQpID0+IGZpZWxkKSwNCiAgICAgICAgbGFtYmRhRmllbGQ6IHEgPT4gcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zZXFNYXAocS5pZGVudGlmaWVyDQogICAgICAgICAgICAuc2VwQnkocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIiwiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpDQogICAgICAgICAgICAud3JhcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiKCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSkpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiPT4iKS50cmltKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSksIHEuZmllbGQsIChpZGVudCwgX2lnbm9yZSwgdmFsdWUpID0+IHsNCiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICJsYW1iZGEiLCBhcmd1bWVudHM6IGlkZW50LCB2YWx1ZSB9Ow0KICAgICAgICB9KSwNCiAgICAgICAgZG90UG9zdGZpeDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLiIpLCBxLmlkZW50aWZpZXIsIChfLCBmaWVsZCkgPT4gew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImRvdCIsIGZpZWxkOiBGaWVsZHMubGl0ZXJhbChmaWVsZCkgfTsNCiAgICAgICAgfSksDQogICAgICAgIGluZGV4UG9zdGZpeDogcSA9PiBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnNlcU1hcChwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiWyIpLCBwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLm9wdFdoaXRlc3BhY2UsIHEuZmllbGQsIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIl0iKSwgKF8sIF8yLCBmaWVsZCwgXzMsIF80KSA9PiB7DQogICAgICAgICAgICByZXR1cm4geyB0eXBlOiAiaW5kZXgiLCBmaWVsZCB9Ow0KICAgICAgICB9KSwNCiAgICAgICAgZnVuY3Rpb25Qb3N0Zml4OiBxID0+IHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc2VxTWFwKHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMuc3RyaW5nKCIoIiksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcS5maWVsZC5zZXBCeShwYXJzaW1tb25fdW1kX21pbi5leHBvcnRzLnN0cmluZygiLCIpLnRyaW0ocGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5vcHRXaGl0ZXNwYWNlKSksIHBhcnNpbW1vbl91bWRfbWluLmV4cG9ydHMub3B0V2hpdGVzcGFjZSwgcGFyc2ltbW9uX3VtZF9taW4uZXhwb3J0cy5zdHJpbmcoIikiKSwgKF8sIF8xLCBmaWVsZHMsIF8yLCBfMykgPT4gew0KICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogImZ1bmN0aW9uIiwgZmllbGRzIH07DQogICAgICAgIH0pLA0KICAgICAgICAvLyBUaGUgcHJlY2VkZW5jZSBoaWVyYXJjaHkgb2Ygb3BlcmF0b3JzIC0gbXVsdGlwbHkvZGl2aWRlLCBhZGQvc3VidHJhY3QsIGNvbXBhcmUsIGFuZCB0aGVuIGJvb2xlYW4gb3BlcmF0aW9ucy4NCiAgICAgICAgYmluYXJ5TXVsRGl2RmllbGQ6IHEgPT4gY3JlYXRlQmluYXJ5UGFyc2VyKHEuaW5kZXhGaWVsZCwgcS5iaW5hcnlNdWxEaXYsIEZpZWxkcy5iaW5hcnlPcCksDQogICAgICAgIGJpbmFyeVBsdXNNaW51c0ZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeU11bERpdkZpZWxkLCBxLmJpbmFyeVBsdXNNaW51cywgRmllbGRzLmJpbmFyeU9wKSwNCiAgICAgICAgYmluYXJ5Q29tcGFyZUZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeVBsdXNNaW51c0ZpZWxkLCBxLmJpbmFyeUNvbXBhcmVPcCwgRmllbGRzLmJpbmFyeU9wKSwNCiAgICAgICAgYmluYXJ5Qm9vbGVhbkZpZWxkOiBxID0+IGNyZWF0ZUJpbmFyeVBhcnNlcihxLmJpbmFyeUNvbXBhcmVGaWVsZCwgcS5iaW5hcnlCb29sZWFuT3AsIEZpZWxkcy5iaW5hcnlPcCksDQogICAgICAgIGJpbmFyeU9wRmllbGQ6IHEgPT4gcS5iaW5hcnlCb29sZWFuRmllbGQsDQogICAgICAgIGZpZWxkOiBxID0+IHEuYmluYXJ5T3BGaWVsZCwNCiAgICB9KTsKCiAgICAvKiogQ29udmVydCBwYXJzZWQgbWFya2Rvd24gdG8gYSB0cmFuc2Zlci1mcmllbmRseSByZXN1bHQuICovDQogICAgZnVuY3Rpb24gbWFya2Rvd25Ub1RyYW5zZmVyYWJsZShwYXJzZWQpIHsNCiAgICAgICAgbGV0IG5ld0ZpZWxkcyA9IG5ldyBNYXAoKTsNCiAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVzXSBvZiBwYXJzZWQuZmllbGRzLmVudHJpZXMoKSkgew0KICAgICAgICAgICAgbmV3RmllbGRzLnNldChrZXksIHZhbHVlcy5tYXAodCA9PiBUcmFuc2ZlcmFibGVWYWx1ZXMudHJhbnNmZXJhYmxlKHQpKSk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICAgIHRhc2tzOiBUcmFuc2ZlcmFibGVWYWx1ZXMudHJhbnNmZXJhYmxlKHBhcnNlZC50YXNrcyksDQogICAgICAgICAgICBmaWVsZHM6IG5ld0ZpZWxkcywNCiAgICAgICAgfTsNCiAgICB9DQogICAgLyoqIFBhcnNlIGEgdGV4dHVhbCBpbmxpbmUgZmllbGQgdmFsdWUgaW50byBzb21ldGhpbmcgd2UgY2FuIHdvcmsgd2l0aC4gKi8NCiAgICBmdW5jdGlvbiBwYXJzZUlubGluZUZpZWxkKHZhbHVlKSB7DQogICAgICAgIC8vIFRoZSBzdHJpcHBlZCBsaXRlcmFsIGZpZWxkIHBhcnNlciB1bmRlcnN0YW5kcyBhbGwgb2YgdGhlIG5vbi1hcnJheS9ub24tb2JqZWN0IGZpZWxkcyBhbmQgY2FuIHBhcnNlIHRoZW0gZm9yIHVzLg0KICAgICAgICAvLyBJbmxpbmUgZmllbGQgb2JqZWN0cyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQ7IGlubGluZSBhcnJheSBvYmplY3RzIGhhdmUgdG8gYmUgaGFuZGxlZCBieSB0aGUgcGFyc2VyDQogICAgICAgIC8vIHNlcGFyYXRlbHkuDQogICAgICAgIGxldCBpbmxpbmUgPSBFWFBSRVNTSU9OLmlubGluZUZpZWxkLnBhcnNlKHZhbHVlKTsNCiAgICAgICAgaWYgKGlubGluZS5zdGF0dXMpDQogICAgICAgICAgICByZXR1cm4gaW5saW5lLnZhbHVlOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICByZXR1cm4gdmFsdWU7DQogICAgfQ0KICAgIC8qKiBNYXRjaGVzIGxpbmVzIG9mIHRoZSBmb3JtICItIFsgXSA8dGFzayB0aGluZz4iLiAqLw0KICAgIGNvbnN0IFRBU0tfUkVHRVggPSAvXihccyopWy0qXVxzKihcW1sgWHhcLl0/XF0pP1xzKihbXi0qXS4qKSQvaXU7DQogICAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBwcmVkaWNhdGUgaXMgdHJ1ZSBmb3IgdGhlIHRhc2sgb3IgYW55IHN1YnRhc2tzLiAqLw0KICAgIGZ1bmN0aW9uIHRhc2tBbnkodCwgZikgew0KICAgICAgICBpZiAoZih0KSkNCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICBmb3IgKGxldCBzdWIgb2YgdC5zdWJ0YXNrcykNCiAgICAgICAgICAgIGlmICh0YXNrQW55KHN1YiwgZikpDQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQogICAgZnVuY3Rpb24gYWxhc3QoYXJyKSB7DQogICAgICAgIGlmIChhcnIubGVuZ3RoID4gMCkNCiAgICAgICAgICAgIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOw0KICAgIH0NCiAgICBjb25zdCBDUkVBVEVEX0RBVEVfUkVHRVggPSAvXHV7Mjc5NX1ccyooXGR7NH0tXGR7Mn0tXGR7Mn0pL3U7DQogICAgY29uc3QgRFVFX0RBVEVfUkVHRVggPSAvW1x1ezFGNEM1fVx1ezFGNEM2fVx1ezFGNUQzfV1ccyooXGR7NH0tXGR7Mn0tXGR7Mn0pL3U7DQogICAgY29uc3QgRE9ORV9EQVRFX1JFR0VYID0gL1x1ezI3MDV9XHMqKFxkezR9LVxkezJ9LVxkezJ9KS91Ow0KICAgIC8qKg0KICAgICAqIEEgaGFja3kgYXBwcm9hY2ggdG8gc2Nhbm5pbmcgZm9yIGFsbCB0YXNrcyB1c2luZyByZWdleC4gRG9lcyBub3Qgc3VwcG9ydCBtdWx0aWxpbmUNCiAgICAgKiB0YXNrcyB5ZXQgKHRob3VnaCBjYW4gcHJvYmFibHkgYmUgcmV0cm8tZml0dGVkIHRvIGRvIHNvKS4NCiAgICAgKi8NCiAgICBmdW5jdGlvbiBmaW5kVGFza3NJbkZpbGUocGF0aCwgZmlsZSkgew0KICAgICAgICB2YXIgX2EsIF9iLCBfYzsNCiAgICAgICAgLy8gRHVtbXkgdG9wIG9mIHRoZSBzdGFjayB0aGF0IHdlJ2xsIGp1c3QgbmV2ZXIgZ2V0IHJpZCBvZi4NCiAgICAgICAgbGV0IHN0YWNrID0gW107DQogICAgICAgIHN0YWNrLnB1c2goWw0KICAgICAgICAgICAgbmV3IFRhc2soeyB0ZXh0OiAiUm9vdCIsIGxpbmU6IC0xLCBwYXRoLCBjb21wbGV0ZWQ6IGZhbHNlLCBmdWxseUNvbXBsZXRlZDogZmFsc2UsIHJlYWw6IGZhbHNlLCBzdWJ0YXNrczogW10gfSksDQogICAgICAgICAgICAtNCwNCiAgICAgICAgXSk7DQogICAgICAgIGxldCBsaW5lbm8gPSAwOw0KICAgICAgICBmb3IgKGxldCBsaW5lIG9mIGZpbGUucmVwbGFjZSgiXHIiLCAiIikuc3BsaXQoIlxuIikpIHsNCiAgICAgICAgICAgIGxpbmVubyArPSAxOw0KICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBhcmUgYWN0dWFsbHkgYSBsaXN0IGVsZW1lbnQsIHRvIHNraXAgbGluZXMgd2hpY2ggb2J2aW91c2x5IHdvbid0IG1hdGNoLg0KICAgICAgICAgICAgaWYgKCFsaW5lLmluY2x1ZGVzKCIqIikgJiYgIWxpbmUuaW5jbHVkZXMoIi0iKSkgew0KICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAxKQ0KICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTsNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGxldCBtYXRjaCA9IFRBU0tfUkVHRVguZXhlYyhsaW5lKTsNCiAgICAgICAgICAgIGlmICghbWF0Y2gpIHsNCiAgICAgICAgICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID09IDApDQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIC8vIE5vbi1lbXB0eSBsaW5lIHRoYXQgaXMgbm90IGEgdGFzaywgcmVzZXQuDQogICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDEpDQogICAgICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgbGV0IGNyZWF0ZWRNYXRjaCA9IENSRUFURURfREFURV9SRUdFWC5leGVjKGxpbmUpOw0KICAgICAgICAgICAgbGV0IGNyZWF0ZWREYXRlOw0KICAgICAgICAgICAgaWYgKGNyZWF0ZWRNYXRjaCkgew0KICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlID0gRGF0ZVRpbWVfMS5mcm9tSVNPKGNyZWF0ZWRNYXRjaFsxXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBsZXQgZHVlTWF0Y2ggPSBEVUVfREFURV9SRUdFWC5leGVjKGxpbmUpOw0KICAgICAgICAgICAgbGV0IGR1ZURhdGU7DQogICAgICAgICAgICBpZiAoZHVlTWF0Y2gpIHsNCiAgICAgICAgICAgICAgICBkdWVEYXRlID0gRGF0ZVRpbWVfMS5mcm9tSVNPKGR1ZU1hdGNoWzFdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGxldCBjb21wbGV0ZWRNYXRjaCA9IERPTkVfREFURV9SRUdFWC5leGVjKGxpbmUpOw0KICAgICAgICAgICAgbGV0IGNvbXBsZXRlZERhdGU7DQogICAgICAgICAgICBpZiAoY29tcGxldGVkTWF0Y2gpIHsNCiAgICAgICAgICAgICAgICBjb21wbGV0ZWREYXRlID0gRGF0ZVRpbWVfMS5mcm9tSVNPKGNvbXBsZXRlZE1hdGNoWzFdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGxldCBpbmRlbnQgPSBtYXRjaFsxXS5yZXBsYWNlKCJcdCIsICIgICAgIikubGVuZ3RoOw0KICAgICAgICAgICAgbGV0IGlzUmVhbCA9ICEhbWF0Y2hbMl0gJiYgbWF0Y2hbMl0udHJpbSgpLmxlbmd0aCA+IDA7DQogICAgICAgICAgICBsZXQgaXNDb21wbGV0ZWQgPSAhaXNSZWFsIHx8IG1hdGNoWzJdID09ICJbWF0iIHx8IG1hdGNoWzJdID09ICJbeF0iOw0KICAgICAgICAgICAgbGV0IHRhc2sgPSBuZXcgVGFzayh7DQogICAgICAgICAgICAgICAgdGV4dDogbWF0Y2hbM10sDQogICAgICAgICAgICAgICAgY29tcGxldGVkOiBpc0NvbXBsZXRlZCwNCiAgICAgICAgICAgICAgICBjb21wbGV0ZWREYXRlOiBjb21wbGV0ZWREYXRlLA0KICAgICAgICAgICAgICAgIGNyZWF0ZWREYXRlOiBjcmVhdGVkRGF0ZSwNCiAgICAgICAgICAgICAgICBkdWVEYXRlOiBkdWVEYXRlLA0KICAgICAgICAgICAgICAgIGZ1bGx5Q29tcGxldGVkOiBpc0NvbXBsZXRlZCwNCiAgICAgICAgICAgICAgICByZWFsOiBpc1JlYWwsDQogICAgICAgICAgICAgICAgcGF0aCwNCiAgICAgICAgICAgICAgICBsaW5lOiBsaW5lbm8sDQogICAgICAgICAgICAgICAgc3VidGFza3M6IFtdLA0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB3aGlsZSAoaW5kZW50IDw9ICgoX2IgPSAoX2EgPSBhbGFzdChzdGFjaykpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogLTQpKQ0KICAgICAgICAgICAgICAgIHN0YWNrLnBvcCgpOw0KICAgICAgICAgICAgZm9yIChsZXQgW2VsZW0sIF9dIG9mIHN0YWNrKQ0KICAgICAgICAgICAgICAgIGVsZW0uZnVsbHlDb21wbGV0ZWQgPSBlbGVtLmZ1bGx5Q29tcGxldGVkICYmIHRhc2suZnVsbHlDb21wbGV0ZWQ7DQogICAgICAgICAgICAoX2MgPSBhbGFzdChzdGFjaykpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY1swXS5zdWJ0YXNrcy5wdXNoKHRhc2spOw0KICAgICAgICAgICAgc3RhY2sucHVzaChbdGFzaywgaW5kZW50XSk7DQogICAgICAgIH0NCiAgICAgICAgLy8gUmV0dXJuIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHJvb3QsIHdoaWNoIHNob3VsZCBiZSBhbGwgdGFza3MuDQogICAgICAgIC8vIFN0cmlwIHRyZWVzIG9mIHRhc2tzIHdoaWNoIGFyZSBwdXJlbHkgbm90IHJlYWwgKGxvbD8pLg0KICAgICAgICByZXR1cm4gc3RhY2tbMF1bMF0uc3VidGFza3MuZmlsdGVyKHQgPT4gdGFza0FueSh0LCBzdCA9PiBzdC5yZWFsKSk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIHBhcnNlTWFya2Rvd24ocGF0aCwgY29udGVudHMsIGlubGluZVJlZ2V4KSB7DQogICAgICAgIHZhciBfYSwgX2I7DQogICAgICAgIGxldCBmaWVsZHMgPSBuZXcgTWFwKCk7DQogICAgICAgIC8vIFRyYXdsIHRocm91Z2ggZmlsZSBjb250ZW50cyB0byBsb2NhdGUgY3VzdG9tIGlubGluZSBmaWxlIGNvbnRlbnQuLi4NCiAgICAgICAgZm9yIChsZXQgbGluZSBvZiBjb250ZW50cy5zcGxpdCgiXG4iKSkgew0KICAgICAgICAgICAgLy8gRmFzdCBiYWlsLW91dCBmb3IgbGluZXMgdGhhdCBhcmUgdG9vIGxvbmcuDQogICAgICAgICAgICBpZiAoIWxpbmUuaW5jbHVkZXMoIjo6IikpDQogICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7DQogICAgICAgICAgICBsZXQgbWF0Y2ggPSBpbmxpbmVSZWdleC5leGVjKGxpbmUpOw0KICAgICAgICAgICAgaWYgKCFtYXRjaCkNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIGxldCBuYW1lID0gbWF0Y2hbMV0udHJpbSgpOw0KICAgICAgICAgICAgbGV0IGlubGluZUZpZWxkID0gcGFyc2VJbmxpbmVGaWVsZChtYXRjaFsyXSk7DQogICAgICAgICAgICBmaWVsZHMuc2V0KG5hbWUsICgoX2EgPSBmaWVsZHMuZ2V0KG5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkuY29uY2F0KFtpbmxpbmVGaWVsZF0pKTsNCiAgICAgICAgICAgIGxldCBzaW1wbGVOYW1lID0gY2Fub25pY2FsaXplVmFyTmFtZShtYXRjaFsxXS50cmltKCkpOw0KICAgICAgICAgICAgaWYgKHNpbXBsZU5hbWUubGVuZ3RoID4gMCAmJiBzaW1wbGVOYW1lICE9IG1hdGNoWzFdLnRyaW0oKSkgew0KICAgICAgICAgICAgICAgIGZpZWxkcy5zZXQoc2ltcGxlTmFtZSwgKChfYiA9IGZpZWxkcy5nZXQoc2ltcGxlTmFtZSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IFtdKS5jb25jYXQoW2lubGluZUZpZWxkXSkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIC8vIEFuZCBleHRyYWN0IHRhc2tzLi4uDQogICAgICAgIGxldCB0YXNrcyA9IGZpbmRUYXNrc0luRmlsZShwYXRoLCBjb250ZW50cyk7DQogICAgICAgIHJldHVybiB7IGZpZWxkcywgdGFza3MgfTsNCiAgICB9CgogICAgLyoqIEVudHJ5LXBvaW50IHNjcmlwdCB1c2VkIGJ5IHRoZSBpbmRleCBhcyBhIHdlYiB3b3JrZXIuICovDQogICAgb25tZXNzYWdlID0gKGV2dCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7DQogICAgICAgIGxldCBwYXJzZWQgPSBwYXJzZU1hcmtkb3duKGV2dC5kYXRhLnBhdGgsIGV2dC5kYXRhLmNvbnRlbnRzLCAvW19cKn5gXSooWzAtOVx3XHB7TGV0dGVyfV1bLTAtOVx3XHB7TGV0dGVyfVxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31ccy9dKilbX1wqfmBdKlxzKjo6XHMqKC4rKS91KTsNCiAgICAgICAgcG9zdE1lc3NhZ2UoeyBwYXRoOiBldnQuZGF0YS5wYXRoLCByZXN1bHQ6IG1hcmtkb3duVG9UcmFuc2ZlcmFibGUocGFyc2VkKSB9KTsNCiAgICB9KTsKCn0oKSk7Cgo=', null, false); +/* eslint-enable */ + +var parsimmon_umd_min = {exports: {}}; + +(function (module, exports) { +!function(n,t){module.exports=t();}("undefined"!=typeof self?self:commonjsGlobal,function(){return function(n){var t={};function r(e){if(t[e])return t[e].exports;var u=t[e]={i:e,l:!1,exports:{}};return n[e].call(u.exports,u,u.exports,r),u.l=!0,u.exports}return r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e});},r.r=function(n){Object.defineProperty(n,"__esModule",{value:!0});},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="",r(r.s=0)}([function(n,t,r){function e(n){if(!(this instanceof e))return new e(n);this._=n;}var u=e.prototype;function o(n,t){for(var r=0;r>7),buf:function(n){var t=i(function(n,t,r,e){return n.concat(r===e.length-1?Buffer.from([t,0]).readUInt16BE(0):e.readUInt16BE(r))},[],n);return Buffer.from(f(function(n){return (n<<1&65535)>>8},t))}(r.buf)};}),r}function c(){return "undefined"!=typeof Buffer}function s(){if(!c())throw new Error("Buffer global does not exist; please use webpack if you need to parse Buffers in the browser.")}function l(n){s();var t=i(function(n,t){return n+t},0,n);if(t%8!=0)throw new Error("The bits ["+n.join(", ")+"] add up to "+t+" which is not an even number of bytes; the total should be divisible by 8");var r,u=t/8,o=(r=function(n){return n>48},i(function(n,t){return n||(r(t)?t:n)},null,n));if(o)throw new Error(o+" bit range requested exceeds 48 bit (6 byte) Number max.");return new e(function(t,r){var e=u+r;return e>t.length?x(r,u.toString()+" bytes"):b(e,i(function(n,t){var r=a(t,n.buf);return {coll:n.coll.concat(r.v),buf:r.buf}},{coll:[],buf:t.slice(r,e)},n).coll)})}function p(n,t){return new e(function(r,e){return s(),e+t>r.length?x(e,t+" bytes for "+n):b(e+t,r.slice(e,e+t))})}function h(n,t){if("number"!=typeof(r=t)||Math.floor(r)!==r||t<0||t>6)throw new Error(n+" requires integer length in range [0, 6].");var r;}function d(n){return h("uintBE",n),p("uintBE("+n+")",n).map(function(t){return t.readUIntBE(0,n)})}function v(n){return h("uintLE",n),p("uintLE("+n+")",n).map(function(t){return t.readUIntLE(0,n)})}function g(n){return h("intBE",n),p("intBE("+n+")",n).map(function(t){return t.readIntBE(0,n)})}function m(n){return h("intLE",n),p("intLE("+n+")",n).map(function(t){return t.readIntLE(0,n)})}function y(n){return n instanceof e}function E(n){return "[object Array]"==={}.toString.call(n)}function w(n){return c()&&Buffer.isBuffer(n)}function b(n,t){return {status:!0,index:n,value:t,furthest:-1,expected:[]}}function x(n,t){return E(t)||(t=[t]),{status:!1,index:-1,value:null,furthest:n,expected:t}}function B(n,t){if(!t)return n;if(n.furthest>t.furthest)return n;var r=n.furthest===t.furthest?function(n,t){if(function(){if(void 0!==e._supportsSet)return e._supportsSet;var n="undefined"!=typeof Set;return e._supportsSet=n,n}()&&Array.from){for(var r=new Set(n),u=0;u=0;){if(i in r){e=r[i].line,0===o&&(o=r[i].lineStart);break}"\n"===n.charAt(i)&&(u++,0===o&&(o=i+1)),i--;}var f=e+u,a=t-o;return r[t]={line:f,lineStart:o},{offset:t,line:f+1,column:a+1}}function _(n){if(!y(n))throw new Error("not a parser: "+n)}function L(n,t){return "string"==typeof n?n.charAt(t):n[t]}function O(n){if("number"!=typeof n)throw new Error("not a number: "+n)}function k(n){if("function"!=typeof n)throw new Error("not a function: "+n)}function P(n){if("string"!=typeof n)throw new Error("not a string: "+n)}var q=2,A=3,I=8,F=5*I,M=4*I,z=" ";function R(n,t){return new Array(t+1).join(n)}function U(n,t,r){var e=t-n.length;return e<=0?n:R(r,e)+n}function W(n,t,r,e){return {from:n-t>0?n-t:0,to:n+r>e?e:n+r}}function D(n,t){var r,e,u,o,a,c=t.index,s=c.offset,l=1;if(s===n.length)return "Got the end of the input";if(w(n)){var p=s-s%I,h=s-p,d=W(p,F,M+I,n.length),v=f(function(n){return f(function(n){return U(n.toString(16),2,"0")},n)},function(n,t){var r=n.length,e=[],u=0;if(r<=t)return [n.slice()];for(var o=0;o=4&&(r+=1),l=2,u=f(function(n){return n.length<=4?n.join(" "):n.slice(0,4).join(" ")+" "+n.slice(4).join(" ")},v),(a=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(a=2);}else {var g=n.split(/\r\n|[\n\r\u2028\u2029]/);r=c.column-1,e=c.line-1,o=W(e,q,A,g.length),u=g.slice(o.from,o.to),a=o.to.toString().length;}var m=e-o.from;return w(n)&&(a=(8*(o.to>0?o.to-1:o.to)).toString(16).length)<2&&(a=2),i(function(t,e,u){var i,f=u===m,c=f?"> ":z;return i=w(n)?U((8*(o.from+u)).toString(16),a,"0"):U((o.from+u+1).toString(),a," "),[].concat(t,[c+i+" | "+e],f?[z+R(" ",a)+" | "+U("",r," ")+R("^",l)]:[])},[],u).join("\n")}function N(n,t){return ["\n","-- PARSING FAILED "+R("-",50),"\n\n",D(n,t),"\n\n",(r=t.expected,1===r.length?"Expected:\n\n"+r[0]:"Expected one of the following: \n\n"+r.join(", ")),"\n"].join("");var r;}function G(n){return void 0!==n.flags?n.flags:[n.global?"g":"",n.ignoreCase?"i":"",n.multiline?"m":"",n.unicode?"u":"",n.sticky?"y":""].join("")}function C(){for(var n=[].slice.call(arguments),t=n.length,r=0;r=2?O(t):t=0;var r=function(n){return RegExp("^(?:"+n.source+")",G(n))}(n),u=""+n;return e(function(n,e){var o=r.exec(n.slice(e));if(o){if(0<=t&&t<=o.length){var i=o[0],f=o[t];return b(e+i.length,f)}return x(e,"valid match group (0 to "+o.length+") in "+u)}return x(e,u)})}function X(n){return e(function(t,r){return b(r,n)})}function Y(n){return e(function(t,r){return x(r,n)})}function Z(n){if(y(n))return e(function(t,r){var e=n._(t,r);return e.index=r,e.value="",e});if("string"==typeof n)return Z(K(n));if(n instanceof RegExp)return Z(Q(n));throw new Error("not a string, regexp, or parser: "+n)}function $(n){return _(n),e(function(t,r){var e=n._(t,r),u=t.slice(r,e.index);return e.status?x(r,'not "'+u+'"'):b(r,null)})}function nn(n){return k(n),e(function(t,r){var e=L(t,r);return r=n.length?x(t,"any character/byte"):b(t+1,L(n,t))}),on=e(function(n,t){return b(n.length,n.slice(t))}),fn=e(function(n,t){return t=0}).desc(t)},e.optWhitespace=pn,e.Parser=e,e.range=function(n,t){return nn(function(r){return n<=r&&r<=t}).desc(n+"-"+t)},e.regex=Q,e.regexp=Q,e.sepBy=V,e.sepBy1=H,e.seq=C,e.seqMap=J,e.seqObj=function(){for(var n,t={},r=0,u=(n=arguments,Array.prototype.slice.call(n)),o=u.length,i=0;i255)throw new Error("Value specified to byte constructor ("+n+"=0x"+n.toString(16)+") is larger in value than a single byte.");var t=(n>15?"0x":"0x0")+n.toString(16);return e(function(r,e){var u=L(r,e);return u===n?b(e+1,u):x(e,t)})},buffer:function(n){return p("buffer",n).map(function(n){return Buffer.from(n)})},encodedString:function(n,t){return p("string",t).map(function(t){return t.toString(n)})},uintBE:d,uint8BE:d(1),uint16BE:d(2),uint32BE:d(4),uintLE:v,uint8LE:v(1),uint16LE:v(2),uint32LE:v(4),intBE:g,int8BE:g(1),int16BE:g(2),int32BE:g(4),intLE:m,int8LE:m(1),int16LE:m(2),int32LE:m(4),floatBE:p("floatBE",4).map(function(n){return n.readFloatBE(0)}),floatLE:p("floatLE",4).map(function(n){return n.readFloatLE(0)}),doubleBE:p("doubleBE",8).map(function(n){return n.readDoubleBE(0)}),doubleLE:p("doubleLE",8).map(function(n){return n.readDoubleLE(0)})},n.exports=e;}])}); +}(parsimmon_umd_min)); + +/** Utility methods for creating & comparing fields. */ +var Fields; +(function (Fields) { + function variable(name) { + return { type: "variable", name }; + } + Fields.variable = variable; + function literal(value) { + return { type: "literal", value }; + } + Fields.literal = literal; + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Fields.binaryOp = binaryOp; + function index(obj, index) { + return { type: "index", object: obj, index }; + } + Fields.index = index; + /** Converts a string in dot-notation-format into a variable which indexes. */ + function indexVariable(name) { + let parts = name.split("."); + let result = Fields.variable(parts[0]); + for (let index = 1; index < parts.length; index++) { + result = Fields.index(result, Fields.literal(parts[index])); + } + return result; + } + Fields.indexVariable = indexVariable; + function lambda(args, value) { + return { type: "lambda", arguments: args, value }; + } + Fields.lambda = lambda; + function func(func, args) { + return { type: "function", func, arguments: args }; + } + Fields.func = func; + function list(values) { + return { type: "list", values }; + } + Fields.list = list; + function object(values) { + return { type: "object", values }; + } + Fields.object = object; + function negate(child) { + return { type: "negated", child }; + } + Fields.negate = negate; + function isCompareOp(op) { + return op == "<=" || op == "<" || op == ">" || op == ">=" || op == "!=" || op == "="; + } + Fields.isCompareOp = isCompareOp; + Fields.NULL = Fields.literal(null); +})(Fields || (Fields = {})); + +/** AST implementation for queries over data sources. */ +/** Utility functions for creating and manipulating sources. */ +var Sources; +(function (Sources) { + function tag(tag) { + return { type: "tag", tag }; + } + Sources.tag = tag; + function csv(path) { + return { type: "csv", path }; + } + Sources.csv = csv; + function folder(prefix) { + return { type: "folder", folder: prefix }; + } + Sources.folder = folder; + function link(file, incoming) { + return { type: "link", file, direction: incoming ? "incoming" : "outgoing" }; + } + Sources.link = link; + function binaryOp(left, op, right) { + return { type: "binaryop", left, op, right }; + } + Sources.binaryOp = binaryOp; + function negate(child) { + return { type: "negate", child }; + } + Sources.negate = negate; + function empty() { + return { type: "empty" }; + } + Sources.empty = empty; +})(Sources || (Sources = {})); + +/** Provides a lookup table for unit durations of the given type. */ +const DURATION_TYPES = { + year: Duration_1.fromObject({ years: 1 }), + yr: Duration_1.fromObject({ years: 1 }), + month: Duration_1.fromObject({ months: 1 }), + mo: Duration_1.fromObject({ months: 1 }), + week: Duration_1.fromObject({ weeks: 1 }), + wk: Duration_1.fromObject({ weeks: 1 }), + w: Duration_1.fromObject({ weeks: 1 }), + day: Duration_1.fromObject({ days: 1 }), + d: Duration_1.fromObject({ days: 1 }), + hour: Duration_1.fromObject({ hours: 1 }), + hr: Duration_1.fromObject({ hours: 1 }), + h: Duration_1.fromObject({ hours: 1 }), + minute: Duration_1.fromObject({ minutes: 1 }), + min: Duration_1.fromObject({ minutes: 1 }), + m: Duration_1.fromObject({ minutes: 1 }), + second: Duration_1.fromObject({ seconds: 1 }), + sec: Duration_1.fromObject({ seconds: 1 }), + s: Duration_1.fromObject({ seconds: 1 }), +}; +/** + * Keywords which cannot be used as variables directly. Use `row.` if it is a variable you have defined and want + * to access. + */ +const KEYWORDS = ["FROM", "WHERE", "LIMIT", "GROUP", "FLATTEN"]; +/////////////// +// Utilities // +/////////////// +/** Attempt to parse the inside of a link to pull out display name, subpath, etc. */ +function parseInnerLink(link) { + let display = undefined; + if (link.includes("|")) { + let split = link.split("|"); + link = split[0]; + display = split[1]; + } + if (link.includes("#")) { + let split = link.split("#"); + return Link.header(split[0], split[1], false, display); + } + else if (link.includes("^")) { + let split = link.split("^"); + return Link.block(split[0], split[1], false, display); + } + return Link.file(link, false, display); +} +/** Create a left-associative binary parser which parses the given sub-element and separator. Handles whitespace. */ +function createBinaryParser(child, sep, combine) { + return parsimmon_umd_min.exports.seqMap(child, parsimmon_umd_min.exports.seq(parsimmon_umd_min.exports.optWhitespace, sep, parsimmon_umd_min.exports.optWhitespace, child).many(), (first, rest) => { + if (rest.length == 0) + return first; + let node = combine(first, rest[0][1], rest[0][3]); + for (let index = 1; index < rest.length; index++) { + node = combine(node, rest[index][1], rest[index][3]); + } + return node; + }); +} +function chainOpt(base, ...funcs) { + return parsimmon_umd_min.exports.custom((success, failure) => { + return (input, i) => { + let result = base._(input, i); + if (!result.status) + return result; + for (let func of funcs) { + let next = func(result.value)._(input, result.index); + if (!next.status) + return result; + result = next; + } + return result; + }; + }); +} +const EXPRESSION = parsimmon_umd_min.exports.createLanguage({ + // A floating point number; the decimal point is optional. + number: q => parsimmon_umd_min.exports.regexp(/-?[0-9]+(\.[0-9]+)?/) + .map(str => Number.parseFloat(str)) + .desc("number"), + // A quote-surrounded string which supports escape characters ('\'). + string: q => parsimmon_umd_min.exports.string('"') + .then(parsimmon_umd_min.exports.alt(q.escapeCharacter, parsimmon_umd_min.exports.noneOf('"\\')) + .atLeast(0) + .map(chars => chars.join(""))) + .skip(parsimmon_umd_min.exports.string('"')) + .desc("string"), + escapeCharacter: q => parsimmon_umd_min.exports.string("\\") + .then(parsimmon_umd_min.exports.any) + .map(escaped => { + // If we are escaping a backslash or a quote, pass in on in escaped form + if (escaped === '"') + return '"'; + if (escaped === "\\") + return "\\"; + else + return "\\" + escaped; + }), + // A boolean true/false value. + bool: q => parsimmon_umd_min.exports.regexp(/true|false|True|False/) + .map(str => str.toLowerCase() == "true") + .desc("boolean ('true' or 'false')"), + // A tag of the form '#stuff/hello-there'. + tag: q => parsimmon_umd_min.exports.regexp(/#[\p{Letter}\p{Extended_Pictographic}\p{Emoji_Component}\w/-]+/u).desc("tag ('#hello/stuff')"), + // A variable identifier, which is alphanumeric and must start with a letter. + identifier: q => parsimmon_umd_min.exports.regexp(/[\p{Letter}\p{Extended_Pictographic}][\p{Letter}\p{Extended_Pictographic}\p{Emoji_Component}\w_-]*/u).desc("variable identifier"), + // A variable identifier, which is alphanumeric and must start with a letter. Can include dots. + identifierDot: q => parsimmon_umd_min.exports.regexp(/[\p{Letter}\p{Extended_Pictographic}][\p{Letter}\p{Extended_Pictographic}\p{Emoji_Component}\.\w_-]*/u).desc("variable identifier"), + // An Obsidian link of the form [[]]. + link: q => parsimmon_umd_min.exports.regexp(/\[\[([^\[\]]*?)\]\]/u, 1) + .map(linkInner => parseInnerLink(linkInner)) + .desc("file link"), + embedLink: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("!").atMost(1), q.link, (p, l) => { + if (p.length > 0) + l.embed = true; + return l; + }), + // Binary plus or minus operator. + binaryPlusMinus: q => parsimmon_umd_min.exports.regexp(/\+|-/) + .map(str => str) + .desc("'+' or '-'"), + // Binary times or divide operator. + binaryMulDiv: q => parsimmon_umd_min.exports.regexp(/\*|\//) + .map(str => str) + .desc("'*' or '/'"), + // Binary comparison operator. + binaryCompareOp: q => parsimmon_umd_min.exports.regexp(/>=|<=|!=|>|<|=/) + .map(str => str) + .desc("'>=' or '<=' or '!=' or '=' or '>' or '<'"), + // Binary boolean combination operator. + binaryBooleanOp: q => parsimmon_umd_min.exports.regexp(/and|or|&|\|/i) + .map(str => { + if (str.toLowerCase() == "and") + return "&"; + else if (str.toLowerCase() == "or") + return "|"; + else + return str; + }) + .desc("'and' or 'or'"), + // A date which can be YYYY-MM[-DDTHH:mm:ss]. + rootDate: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/\d{4}/), parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.regexp(/\d{2}/), (year, _, month) => { + return DateTime_1.fromObject({ year: Number.parseInt(year), month: Number.parseInt(month) }); + }).desc("date in format YYYY-MM[-DDTHH-MM-SS.MS]"), + date: q => chainOpt(q.rootDate, (ym) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, day) => ym.set({ day: Number.parseInt(day) })), (ymd) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("T"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, hour) => ymd.set({ hour: Number.parseInt(hour) })), (ymdh) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string(":"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, minute) => ymdh.set({ minute: Number.parseInt(minute) })), (ymdhm) => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string(":"), parsimmon_umd_min.exports.regexp(/\d{2}/), (_, second) => ymdhm.set({ second: Number.parseInt(second) })), (ymdhms) => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("."), parsimmon_umd_min.exports.regexp(/\d{3}/), (_, millisecond) => ymdhms.set({ millisecond: Number.parseInt(millisecond) })), parsimmon_umd_min.exports.succeed(ymdhms) // pass + ), (dt) => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("+").or(parsimmon_umd_min.exports.string("-")), parsimmon_umd_min.exports.regexp(/\d{1,2}(:\d{2})?/), (pm, hr) => dt.setZone("UTC" + pm + hr)), parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("Z"), () => dt.setZone("utc")))), + // A date, plus various shorthand times of day it could be. + datePlus: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.string("now").map(_ => DateTime_1.local()), parsimmon_umd_min.exports.string("today").map(_ => DateTime_1.local().startOf("day")), parsimmon_umd_min.exports.string("tomorrow").map(_ => DateTime_1.local() + .startOf("day") + .plus(Duration_1.fromObject({ days: 1 }))), parsimmon_umd_min.exports.string("som").map(_ => DateTime_1.local().startOf("month")), parsimmon_umd_min.exports.string("soy").map(_ => DateTime_1.local().startOf("year")), parsimmon_umd_min.exports.string("eom").map(_ => DateTime_1.local().endOf("month")), parsimmon_umd_min.exports.string("eoy").map(_ => DateTime_1.local().endOf("year")), q.date), + // A duration of time. + durationType: q => parsimmon_umd_min.exports.alt(...Object.keys(DURATION_TYPES).map(parsimmon_umd_min.exports.string)), + duration: q => parsimmon_umd_min.exports.seqMap(q.number, parsimmon_umd_min.exports.optWhitespace, q.durationType, parsimmon_umd_min.exports.string("s").atMost(1), (count, _, t, _2) => DURATION_TYPES[t].mapUnits(x => x * count)), + // A raw null value. + rawNull: q => parsimmon_umd_min.exports.string("null"), + // Source parsing. + tagSource: q => q.tag.map(tag => Sources.tag(tag)), + csvSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("csv(").skip(parsimmon_umd_min.exports.optWhitespace), q.string, parsimmon_umd_min.exports.string(")"), (_1, path, _2) => Sources.csv(path)), + linkIncomingSource: q => q.link.map(link => Sources.link(link.path, true)), + linkOutgoingSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("outgoing(").skip(parsimmon_umd_min.exports.optWhitespace), q.link, parsimmon_umd_min.exports.string(")"), (_1, link, _2) => Sources.link(link.path, false)), + folderSource: q => q.string.map(str => Sources.folder(str)), + parensSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.source, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_1, _2, field, _3, _4) => field), + negateSource: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.string("-"), parsimmon_umd_min.exports.string("!")), q.atomSource, (_, source) => Sources.negate(source)), + atomSource: q => parsimmon_umd_min.exports.alt(q.parensSource, q.negateSource, q.linkOutgoingSource, q.linkIncomingSource, q.folderSource, q.tagSource, q.csvSource), + binaryOpSource: q => createBinaryParser(q.atomSource, q.binaryBooleanOp.map(s => s), Sources.binaryOp), + source: q => q.binaryOpSource, + // Field parsing. + variableField: q => q.identifier + .chain(r => { + if (KEYWORDS.includes(r.toUpperCase())) { + return parsimmon_umd_min.exports.fail("Variable fields cannot be a keyword (" + KEYWORDS.join(" or ") + ")"); + } + else { + return parsimmon_umd_min.exports.succeed(Fields.variable(r)); + } + }) + .desc("variable"), + numberField: q => q.number.map(val => Fields.literal(val)).desc("number"), + stringField: q => q.string.map(val => Fields.literal(val)).desc("string"), + boolField: q => q.bool.map(val => Fields.literal(val)).desc("boolean"), + dateField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("date("), parsimmon_umd_min.exports.optWhitespace, q.datePlus, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (prefix, _1, date, _2, postfix) => Fields.literal(date)).desc("date"), + durationField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("dur("), parsimmon_umd_min.exports.optWhitespace, q.duration, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (prefix, _1, dur, _2, postfix) => Fields.literal(dur)).desc("duration"), + nullField: q => q.rawNull.map(_ => Fields.NULL), + linkField: q => q.link.map(f => Fields.literal(f)), + listField: q => q.field + .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) + .wrap(parsimmon_umd_min.exports.string("[").skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.optWhitespace.then(parsimmon_umd_min.exports.string("]"))) + .map(l => Fields.list(l)) + .desc("list ('[1, 2, 3]')"), + objectField: q => parsimmon_umd_min.exports.seqMap(q.identifier.or(q.string), parsimmon_umd_min.exports.string(":").trim(parsimmon_umd_min.exports.optWhitespace), q.field, (name, _sep, value) => { + return { name, value }; + }) + .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) + .wrap(parsimmon_umd_min.exports.string("{").skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.optWhitespace.then(parsimmon_umd_min.exports.string("}"))) + .map(vals => { + let res = {}; + for (let entry of vals) + res[entry.name] = entry.value; + return Fields.object(res); + }) + .desc("object ('{ a: 1, b: 2 }')"), + atomInlineField: q => parsimmon_umd_min.exports.alt(q.date, q.duration.map(d => normalizeDuration(d)), q.string, q.embedLink, q.bool, q.number, q.rawNull), + inlineFieldList: q => q.atomInlineField.sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace).lookahead(q.atomInlineField)), + inlineField: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.seqMap(q.atomInlineField, parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace), q.inlineFieldList, (f, _s, l) => [f].concat(l)), q.atomInlineField), + atomField: q => parsimmon_umd_min.exports.alt(q.negatedField, q.linkField, q.listField, q.objectField, q.lambdaField, q.parensField, q.boolField, q.numberField, q.stringField, q.dateField, q.durationField, q.nullField, q.variableField), + indexField: q => parsimmon_umd_min.exports.seqMap(q.atomField, parsimmon_umd_min.exports.alt(q.dotPostfix, q.indexPostfix, q.functionPostfix).many(), (obj, postfixes) => { + let result = obj; + for (let post of postfixes) { + switch (post.type) { + case "dot": + case "index": + result = Fields.index(result, post.field); + break; + case "function": + result = Fields.func(result, post.fields); + break; + } + } + return result; + }), + negatedField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("!"), q.indexField, (_, field) => Fields.negate(field)).desc("negated field"), + parensField: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.field, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_1, _2, field, _3, _4) => field), + lambdaField: q => parsimmon_umd_min.exports.seqMap(q.identifier + .sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)) + .wrap(parsimmon_umd_min.exports.string("(").trim(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.string(")").trim(parsimmon_umd_min.exports.optWhitespace)), parsimmon_umd_min.exports.string("=>").trim(parsimmon_umd_min.exports.optWhitespace), q.field, (ident, _ignore, value) => { + return { type: "lambda", arguments: ident, value }; + }), + dotPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("."), q.identifier, (_, field) => { + return { type: "dot", field: Fields.literal(field) }; + }), + indexPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("["), parsimmon_umd_min.exports.optWhitespace, q.field, parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string("]"), (_, _2, field, _3, _4) => { + return { type: "index", field }; + }), + functionPostfix: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.string("("), parsimmon_umd_min.exports.optWhitespace, q.field.sepBy(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), parsimmon_umd_min.exports.optWhitespace, parsimmon_umd_min.exports.string(")"), (_, _1, fields, _2, _3) => { + return { type: "function", fields }; + }), + // The precedence hierarchy of operators - multiply/divide, add/subtract, compare, and then boolean operations. + binaryMulDivField: q => createBinaryParser(q.indexField, q.binaryMulDiv, Fields.binaryOp), + binaryPlusMinusField: q => createBinaryParser(q.binaryMulDivField, q.binaryPlusMinus, Fields.binaryOp), + binaryCompareField: q => createBinaryParser(q.binaryPlusMinusField, q.binaryCompareOp, Fields.binaryOp), + binaryBooleanField: q => createBinaryParser(q.binaryCompareField, q.binaryBooleanOp, Fields.binaryOp), + binaryOpField: q => q.binaryBooleanField, + field: q => q.binaryOpField, +}); +/** + * Attempt to parse a field from the given text, returning a string error if the + * parse failed. + */ +function parseField(text) { + try { + return Result.success(EXPRESSION.field.tryParse(text)); + } + catch (error) { + return Result.failure("" + error); + } +} + +/** All extracted markdown file metadata obtained from a file. */ +class PageMetadata { + constructor(path, init) { + this.path = path; + this.fields = new Map(); + this.tags = new Set(); + this.aliases = new Set(); + this.links = []; + Object.assign(this, init); + this.tasks = ((init === null || init === void 0 ? void 0 : init.tasks) || []).map(t => new Task(t)); + } + /** Parse all subtags out of the given tag. I.e., #hello/i/am would yield [#hello/i/am, #hello/i, #hello]. */ + static parseSubtags(tag) { + let result = [tag]; + while (tag.includes("/")) { + tag = tag.substring(0, tag.lastIndexOf("/")); + result.push(tag); + } + return result; + } + /** The name (based on path) of this file. */ + name() { + return getFileTitle(this.path); + } + /** The containing folder (based on path) of this file. */ + folder() { + return getParentFolder(this.path); + } + /** The extension of this file (likely 'md'). */ + extension() { + return getExtension(this.path); + } + /** Return a set of tags AND all of their parent tags (so #hello/yes would become #hello, #hello/yes). */ + fullTags() { + // TODO: Memoize this, probably. + let result = new Set(); + for (let tag of this.tags) { + for (let subtag of PageMetadata.parseSubtags(tag)) + result.add(subtag); + } + return result; + } + /** Convert all links in this file to file links. */ + fileLinks() { + return this.links.map(link => { + switch (link.type) { + case "file": + return link; + case "block": + return { + type: "file", + path: link.path, + display: link.display, + embed: link.embed, + }; + case "header": + return { + type: "file", + path: link.path, + display: link.display, + embed: link.embed, + }; + } + }); + } + /** Map this metadata to a full object; uses the index for additional data lookups. */ + toObject(index) { + // Static fields first. Note this object should not have any pointers to the original object (so that the + // index cannot accidentally be mutated). + let result = { + file: { + path: this.path, + folder: this.folder(), + name: this.name(), + link: Link.file(this.path, false), + outlinks: this.fileLinks().map(l => Link.file(l.path, false)), + inlinks: Array.from(index.links.getInverse(this.path)).map(l => Link.file(l, false)), + etags: Array.from(this.tags), + tags: Array.from(this.fullTags()), + aliases: Array.from(this.aliases), + tasks: this.tasks.map(t => t.toObject()), + ctime: this.ctime, + cday: DateTime_1.fromObject({ year: this.ctime.year, month: this.ctime.month, day: this.ctime.day }), + mtime: this.mtime, + mday: DateTime_1.fromObject({ year: this.mtime.year, month: this.mtime.month, day: this.mtime.day }), + size: this.size, + ext: this.extension(), + }, + }; + // Add the current day if present. + if (this.day) + result["file"]["day"] = this.day; + // Then append the computed fields. + for (let [key, value] of this.fields) { + if (key === "file") + continue; // Don't allow fields to override 'file'. + result[key] = value; + } + return result; + } +} +/** Convert transfer-friendly markdown to a result we can actually index and use. */ +function markdownFromTransferable(parsed) { + let newFields = new Map(); + for (let [key, values] of parsed.fields.entries()) { + newFields.set(key, values.map(t => TransferableValues.value(t))); + } + return { + tasks: TransferableValues.value(parsed.tasks), + fields: newFields, + }; +} +/** Convert any transferable metadata back to Dataview API friendly data. */ +function fromTransferable(value) { + if (value != null && typeof value == "object" && "tasks" in value) + return markdownFromTransferable(value); + else + return TransferableValues.value(value); +} +/** Try to extract a YYYYMMDD date from a string. */ +function extractDate(str) { + let dateMatch = /(\d{4})-(\d{2})-(\d{2})/.exec(str); + if (!dateMatch) + dateMatch = /(\d{4})(\d{2})(\d{2})/.exec(str); + if (dateMatch) { + let year = Number.parseInt(dateMatch[1]); + let month = Number.parseInt(dateMatch[2]); + let day = Number.parseInt(dateMatch[3]); + return DateTime_1.fromObject({ year, month, day }); + } + return undefined; +} +/** Attempt to find a date associated with the given page from metadata or filenames. */ +function findDate(file, fields) { + var _a, _b; + for (let key of fields.keys()) { + if (!(key.toLocaleLowerCase() == "date" || key.toLocaleLowerCase() == "day")) + continue; + let value = fields.get(key); + if (Values.isDate(value)) + return value; + else if (Values.isLink(value)) { + let date = extractDate(value.path); + if (date) + return date; + date = extractDate((_a = value.subpath) !== null && _a !== void 0 ? _a : ""); + if (date) + return date; + date = extractDate((_b = value.display) !== null && _b !== void 0 ? _b : ""); + if (date) + return date; + } + } + return extractDate(getFileTitle(file)); +} +/** Recursively convert frontmatter into fields. We have to dance around YAML structure. */ +function parseFrontmatter(value) { + if (value == null) { + return null; + } + else if (typeof value === "object") { + if (Array.isArray(value)) { + let result = []; + for (let child of value) { + result.push(parseFrontmatter(child)); + } + return result; + } + else { + let object = value; + let result = {}; + for (let key in object) { + result[key] = parseFrontmatter(object[key]); + } + return result; + } + } + else if (typeof value === "number") { + return value; + } + else if (typeof value === "boolean") { + return value; + } + else if (typeof value === "string") { + let dateParse = EXPRESSION.date.parse(value); + if (dateParse.status) + return dateParse.value; + let durationParse = EXPRESSION.duration.parse(value); + if (durationParse.status) + return durationParse.value; + let linkParse = EXPRESSION.embedLink.parse(value); + if (linkParse.status) + return linkParse.value; + return value; + } + // Backup if we don't understand the type. + return null; +} +/** Add an inline field to a nexisting field array, converting a single value into an array if it is present multiple times. */ +function addInlineField(fields, name, value) { + if (fields.has(name)) { + let existing = fields.get(name); + if (Values.isArray(existing)) + fields.set(name, existing.concat([value])); + else + fields.set(name, [existing, value]); + } + else { + fields.set(name, value); + } +} +/** Matches lines of the form "- [ ] ". */ +const TASK_REGEX = /^(\s*)[-*]\s*(\[[ Xx\.]?\])?\s*([^-*].*)$/iu; +/** Extract markdown metadata from the given Obsidian markdown file. */ +function parsePage(file, cache, markdownData) { + var _a; + let tags = new Set(); + let aliases = new Set(); + let fields = new Map(); + // Pull out the easy-to-extract information from the cache first... + let fileCache = cache.getFileCache(file); + if (fileCache) { + // File tags, including front-matter and in-file tags. + (_a = obsidian.getAllTags(fileCache)) === null || _a === void 0 ? void 0 : _a.forEach(t => tags.add(t)); + // Front-matter file tags, aliases, AND frontmatter properties. + if (fileCache.frontmatter) { + let frontTags = obsidian.parseFrontMatterTags(fileCache.frontmatter); + if (frontTags) { + for (let tag of frontTags) { + if (!tag.startsWith("#")) + tag = "#" + tag; + tags.add(tag); + } + } + let frontAliases = obsidian.parseFrontMatterAliases(fileCache.frontmatter); + if (frontAliases) { + for (let alias of frontAliases) + aliases.add(alias); + } + let frontFields = parseFrontmatter(fileCache.frontmatter); + for (let [key, value] of Object.entries(frontFields)) + fields.set(key, value); + } + } + // Grab links from the frontmatter cache. + let links = []; + if (file.path in cache.resolvedLinks) { + for (let resolved in cache.resolvedLinks[file.path]) { + links.push({ + type: "file", + path: resolved, + display: resolved, + embed: false, + }); + } + } + // Merge frontmatter fields with parsed fields. + for (let [name, values] of markdownData.fields.entries()) { + for (let value of values) + addInlineField(fields, name, value); + } + return new PageMetadata(file.path, { + fields, + tags, + aliases, + links, + tasks: markdownData.tasks, + ctime: DateTime_1.fromMillis(file.stat.ctime), + mtime: DateTime_1.fromMillis(file.stat.mtime), + size: file.stat.size, + day: findDate(file.path, fields), + }); +} + +var papaparse_min = {exports: {}}; + +/* @license +Papa Parse +v5.3.1 +https://github.com/mholt/PapaParse +License: MIT +*/ + +(function (module, exports) { +!function(e,t){module.exports=t();}(commonjsGlobal,function s(){var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return !1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob(["(",r,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&M(e.read)&&M(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,i=!1,r=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return -1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns;}void 0!==t.escapeChar&&(a=t.escapeChar+s);"boolean"==typeof t.escapeFormulae&&(o=t.escapeFormulae);}();var h=new RegExp(j(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if("object"==typeof e)return "string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function u(e,t,i){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(M(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0;}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!M(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0;},this._sendError=function(e){M(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1});};}function l(e){var r;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),u.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded();}:function(){this._readChunk();},this.stream=function(e){this._input=e,this._nextChunk();},this._readChunk=function(){if(this._finished)this._chunkLoaded();else {if(r=new XMLHttpRequest,this._config.withCredentials&&(r.withCredentials=this._config.withCredentials),n||(r.onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)),r.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)r.setRequestHeader(t,e[t]);}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;r.setRequestHeader("Range","bytes="+this._start+"-"+i);}try{r.send(this._config.downloadRequestBody);}catch(e){this._chunkError(e.message);}n&&0===r.status&&this._chunkError();}},this._chunkLoaded=function(){4===r.readyState&&(r.status<200||400<=r.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:r.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");if(null===t)return -1;return parseInt(t.substring(t.lastIndexOf("/")+1))}(r),this.parseChunk(r.responseText)));},this._chunkError=function(e){var t=r.statusText||e;this._sendError(new Error(t));};}function c(e){var r,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),u.call(this,e);var s="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((r=new FileReader).onload=v(this._chunkLoaded,this),r.onerror=v(this._chunkError,this)):r=new FileReaderSync,this._nextChunk();},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result);},this._chunkError=function(){this._sendError(r.error);};}function p(e){var i;u.call(this,e=e||{}),this.stream=function(e){return i=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=i.substring(0,t),i=i.substring(t)):(e=i,i=""),this._finished=!i,this.parseChunk(e)}};}function g(e){u.call(this,e=e||{});var t=[],i=!0,r=!1;this.pause=function(){u.prototype.pause.apply(this,arguments),this._input.pause();},this.resume=function(){u.prototype.resume.apply(this,arguments),this._input.resume();},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError);},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0);},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):i=!0;},this._streamData=v(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),i&&(i=!1,this._checkIsFinished(),this.parseChunk(t.shift()));}catch(e){this._streamError(e);}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e);},this),this._streamEnd=v(function(){this._streamCleanUp(),r=!0,this._streamData("");},this),this._streamCleanUp=v(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError);},this);}function i(m){var a,o,h,r=Math.pow(2,53),n=-r,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,u=/^(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))$/,t=this,i=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(M(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else {if(g(),0===c.data.length)return;i+=e.data.length,m.preview&&i>m.preview?o.abort():(c.data=c.data[0],p(c,t));}};}function y(e){return "greedy"===m.skipEmptyLines?""===e.join("").trim():1===e.length&&0===e[0].length}function g(){if(c&&h&&(k("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+b.DefaultDelimiter+"'"),h=!1),m.skipEmptyLines)for(var e=0;e=l.length?"__parsed_extra":l[i]),m.transform&&(s=m.transform(s,n)),s=v(n,s),"__parsed_extra"===n?(r[n]=r[n]||[],r[n].push(s)):r[n]=s;}return m.header&&(i>l.length?k("FieldMismatch","TooManyFields","Too many fields: expected "+l.length+" fields but parsed "+i,f+t):i=r.length/2?"\r\n":"\r"}(e,r)),h=!1,m.delimiter)M(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else {var n=function(e,t,i,r,n){var s,a,o,h;n=n||[",","\t","|",";",b.RECORD_SEP,b.UNIT_SEP];for(var u=0;u=D)return C(!0)}else for(m=F,F++;;){if(-1===(m=r.indexOf(S,m+1)))return i||u.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:h.length,index:F}),E();if(m===n-1)return E(r.substring(F,m).replace(_,S));if(S!==L||r[m+1]!==L){if(S===L||0===m||r[m-1]!==L){-1!==p&&p=D)return C(!0);break}u.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:h.length,index:F}),m++;}}else m++;}return E();function k(e){h.push(e),d=F;}function b(e){var t=0;if(-1!==e){var i=r.substring(m+1,e);i&&""===i.trim()&&(t=i.length);}return t}function E(e){return i||(void 0===e&&(e=r.substring(F)),f.push(e),F=n,k(f),o&&R()),C()}function w(e){F=e,k(f),f=[],g=r.indexOf(x,F);}function C(e){return {data:h,errors:u,meta:{delimiter:O,linebreak:x,aborted:z,truncated:!!e,cursor:d+(t||0)}}}function R(){T(C()),h=[],u=[];}},this.abort=function(){z=!0;},this.getCharIndex=function(){return F};}function _(e){var t=e.data,i=a[t.workerId],r=!1;if(t.error)i.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){r=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}});},pause:y,resume:y};if(M(i.userStep)){for(var s=0;s value[], allowing both forward and reverse lookups. */ +class IndexMap { + /** Create a new, empty index map. */ + constructor() { + this.map = new Map(); + this.invMap = new Map(); + } + /** Returns all values for the given key. */ + get(key) { + let result = this.map.get(key); + if (result) { + return new Set(result); + } + else { + return new Set(); + } + } + /** Returns all keys that reference the given key. */ + getInverse(value) { + let result = this.invMap.get(value); + if (result) { + return new Set(result); + } + else { + return new Set(); + } + } + set(key, values) { + var _a; + if (this.map.has(key)) + this.delete(key); + this.map.set(key, values); + for (let value of values) { + if (!this.invMap.has(value)) + this.invMap.set(value, new Set()); + (_a = this.invMap.get(value)) === null || _a === void 0 ? void 0 : _a.add(key); + } + return this; + } + /** Clears all values for the given key so they can be re-added. */ + delete(key) { + var _a; + let oldValues = this.map.get(key); + if (!oldValues) + return false; + this.map.delete(key); + for (let value of oldValues) { + (_a = this.invMap.get(value)) === null || _a === void 0 ? void 0 : _a.delete(key); + } + return true; + } + /** Rename all references to the given key to a new value. */ + rename(oldKey, newKey) { + let oldValues = this.map.get(oldKey); + if (!oldValues) + return false; + this.delete(oldKey); + this.set(newKey, oldValues); + return true; + } + /** Clear the entire index. */ + clear() { + this.map.clear(); + this.invMap.clear(); + } +} +/** Multi-threaded file parser which debounces queues automatically. */ +class BackgroundFileParser { + constructor(numWorkers, vault) { + this.numWorkers = numWorkers; + this.vault = vault; + this.workers = []; + this.nextWorkerId = 0; + this.reloadQueue = new Map(); + this.waitingCallbacks = new Map(); + this.pastPromises = new Map(); + for (let index = 0; index < numWorkers; index++) { + let worker = new WorkerFactory({ name: "Dataview Indexer" }); + worker.onmessage = evt => { + let callbacks = this.pastPromises.get(evt.data.path); + let parsed = fromTransferable(evt.data.result); + if (callbacks && callbacks.length > 0) { + for (let callback of callbacks) + callback(parsed); + } + this.pastPromises.delete(evt.data.path); + }; + this.workers.push(worker); + } + this.reloadHandler = window.setInterval(() => { + var _a, _b; + let queueCopy = Array.from(this.reloadQueue.values()); + this.reloadQueue.clear(); + for (let [key, value] of this.waitingCallbacks.entries()) { + if (this.pastPromises.has(key)) + this.pastPromises.set(key, (_b = (_a = this.pastPromises.get(key)) === null || _a === void 0 ? void 0 : _a.concat(value)) !== null && _b !== void 0 ? _b : []); + else + this.pastPromises.set(key, value); + } + this.waitingCallbacks.clear(); + for (let file of queueCopy) { + let workerId = this.nextWorkerId; + this.vault.read(file).then(c => this.workers[workerId].postMessage({ path: file.path, contents: c })); + this.nextWorkerId = (this.nextWorkerId + 1) % this.numWorkers; + } + }, BackgroundFileParser.QUEUE_TIMEOUT); + } + reload(file) { + this.reloadQueue.set(file.path, file); + return new Promise((resolve, _reject) => { + var _a; + if (this.waitingCallbacks.has(file.path)) + (_a = this.waitingCallbacks.get(file.path)) === null || _a === void 0 ? void 0 : _a.push(resolve); + else + this.waitingCallbacks.set(file.path, [resolve]); + }); + } +} +/** Time in milliseconds before a file is allowed to be requeued after being queued. */ +BackgroundFileParser.QUEUE_TIMEOUT = 500; +/** Aggregate index which has several sub-indices and will initialize all of them. */ +class FullIndex { + /** Construct a new index over the given vault and metadata cache. */ + constructor(plugin) { + this.plugin = plugin; + this.pages = new Map(); + this.tags = new IndexMap(); + this.etags = new IndexMap(); + this.links = new IndexMap(); + this.folders = new IndexMap(); + this.revision = 0; + // The metadata cache is updated on file changes. + this.metadataCache.on("changed", file => this.reload(file)); + // Renames do not set off the metadata cache; catch these explicitly. + this.vault.on("rename", (file, oldPath) => { + this.folders.delete(oldPath); + if (file instanceof obsidian.TFile) { + this.pages.delete(oldPath); + this.tags.delete(oldPath); + this.etags.delete(oldPath); + this.links.delete(oldPath); + this.reload(file); + } + this.revision += 1; + this.plugin.trigger("dataview:metadata-change", "rename", file, oldPath); + }); + // File creation does cause a metadata change, but deletes do not. Clear the caches for this. + this.vault.on("delete", af => { + if (!(af instanceof obsidian.TFile)) + return; + let file = af; + this.pages.delete(file.path); + this.tags.delete(file.path); + this.etags.delete(file.path); + this.links.delete(file.path); + this.folders.delete(file.path); + this.revision += 1; + this.plugin.trigger("dataview:metadata-change", "delete", file); + }); + } + /** Generate a full index from the given vault. */ + static generate(plugin) { + return __awaiter(this, void 0, void 0, function* () { + let index = new FullIndex(plugin); + yield index.initialize(); + return Promise.resolve(index); + }); + } + get vault() { + return this.plugin.app.vault; + } + get metadataCache() { + return this.plugin.app.metadataCache; + } + /** I am not a fan of a separate "construct/initialize" step, but constructors cannot be async. */ + initialize() { + return __awaiter(this, void 0, void 0, function* () { + this.backgroundParser = new BackgroundFileParser(4, this.vault); + // Prefix listens to file creation/deletion/rename, and not modifies, so we let it set up it's own listeners. + this.prefix = yield PrefixIndex.generate(this.vault, () => (this.revision += 1)); + // The CSV cache also needs to listen to filesystem events for cache invalidation. + this.csv = new CsvCache(this.vault); + // Traverse all markdown files & fill in initial data. + let start = new Date().getTime(); + this.vault.getMarkdownFiles().forEach(file => this.reload(file)); + console.log("Dataview: Task & metadata parsing queued in %.3fs.", (new Date().getTime() - start) / 1000.0); + }); + } + /** Queue a file for reloading; this is done asynchronously in the background and may take a few seconds. */ + reload(file) { + this.backgroundParser.reload(file).then(r => this.reloadInternal(file, r)); + } + reloadInternal(file, parsed) { + let meta = parsePage(file, this.metadataCache, parsed); + this.pages.set(file.path, meta); + this.tags.set(file.path, meta.fullTags()); + this.etags.set(file.path, meta.tags); + this.links.set(file.path, new Set(meta.links.map(l => l.path))); + this.folders.set(file.path, new Set([getParentFolder(file.path)])); + this.revision += 1; + this.metadataCache.trigger("dataview:metadata-change", "update", file); + } +} +/** A node in the prefix tree. */ +class PrefixIndexNode { + constructor(element) { + this.element = element; + this.files = new Set(); + this.totalCount = 0; + this.children = new Map(); + } + static add(root, path) { + let parts = path.split("/"); + let node = root; + for (let index = 0; index < parts.length - 1; index++) { + if (!node.children.has(parts[index])) + node.children.set(parts[index], new PrefixIndexNode(parts[index])); + node.totalCount += 1; + node = node.children.get(parts[index]); + } + node.totalCount += 1; + node.files.add(path); + } + static remove(root, path) { + let parts = path.split("/"); + let node = root; + let nodes = []; + for (let index = 0; index < parts.length - 1; index++) { + if (!node.children.has(parts[index])) + return; + nodes.push(node); + node = node.children.get(parts[index]); + } + if (!node.files.has(path)) + return; + node.files.delete(path); + node.totalCount -= 1; + for (let p of nodes) + p.totalCount -= 1; + } + static find(root, prefix) { + if (prefix.length == 0 || prefix == "/") + return root; + let parts = prefix.split("/"); + let node = root; + for (let index = 0; index < parts.length; index++) { + if (!node.children.has(parts[index])) + return null; + node = node.children.get(parts[index]); + } + return node; + } + /** Gather all files at and under the given node, optionally filtering the result by the given filter. */ + static gather(root, filter) { + let result = new Set(); + PrefixIndexNode.gatherRec(root, result); + if (filter) { + return new Set(Array.from(result).filter(filter)); + } + else { + return result; + } + } + static gatherRec(root, output) { + for (let file of root.files) + output.add(file); + for (let child of root.children.values()) + this.gatherRec(child, output); + } +} +/** Indexes files by their full prefix - essentially a simple prefix tree. */ +class PrefixIndex { + constructor(vault, root, updateRevision) { + this.vault = vault; + this.root = root; + this.updateRevision = updateRevision; + // TODO: I'm not sure if there is an event for all files in a folder, or just the folder. + // I'm assuming the former naively for now until I inevitably fix it. + this.vault.on("delete", file => { + PrefixIndexNode.remove(this.root, file.path); + updateRevision(); + }); + this.vault.on("create", file => { + PrefixIndexNode.add(this.root, file.path); + updateRevision(); + }); + this.vault.on("rename", (file, old) => { + PrefixIndexNode.remove(this.root, old); + PrefixIndexNode.add(this.root, file.path); + updateRevision(); + }); + } + static generate(vault, updateRevision) { + return __awaiter(this, void 0, void 0, function* () { + let root = new PrefixIndexNode(""); + let timeStart = new Date().getTime(); + for (let file of vault.getFiles()) { + PrefixIndexNode.add(root, file.path); + } + console.log("Dataview: File prefix tree built in %.3fs.", (new Date().getTime() - timeStart) / 1000.0); + return new PrefixIndex(vault, root, updateRevision); + }); + } + /** Get the list of all files under the given path. */ + get(prefix, filter) { + let node = PrefixIndexNode.find(this.root, prefix); + if (node == null || node == undefined) + return new Set(); + return PrefixIndexNode.gather(node, filter); + } + /** Determines if the given path exists in the prefix index. */ + exists(path) { + let node = PrefixIndexNode.find(this.root, getParentFolder(path)); + return node != null && node.files.has(path); + } + /** + * Use the in-memory prefix index to convert a relative path to an absolute one. + */ + resolveRelative(path, origin) { + if (!origin) + return path; + else if (path.startsWith("/")) + return path.substring(1); + let relativePath = getParentFolder(origin) + "/" + path; + if (this.exists(relativePath)) + return relativePath; + else + return path; + } +} +/** Simple path filters which filter file types. */ +var PathFilters; +(function (PathFilters) { + function csv(path) { + return path.toLowerCase().endsWith(".csv"); + } + PathFilters.csv = csv; + function markdown(path) { + let lcPath = path.toLowerCase(); + return lcPath.endsWith(".md") || lcPath.endsWith(".markdown"); + } + PathFilters.markdown = markdown; +})(PathFilters || (PathFilters = {})); +/** + * Caches in-use CSVs to make high-frequency reloads (such as actively looking at a document + * that uses CSV) fast. + * + * Encapsulates logic for fetching CSV + */ +class CsvCache { + constructor(vault) { + this.vault = vault; + this.cache = new Map(); + this.cacheClearInterval = window.setInterval(() => { + this.clearOldEntries(); + }, 60 * 1000); + } + /** Load a CSV file from the cache, doing a fresh load if it has not been loaded. */ + get(path) { + return __awaiter(this, void 0, void 0, function* () { + let existing = this.cache.get(path); + if (existing) + return Result.success(existing.data); + else { + let value = yield this.load(path); + if (value.successful) + this.cache.set(path, { data: value.value, loadTime: DateTime_1.now() }); + return value; + } + }); + } + /** Do the actual raw loading of a CSV path (which is either local or an HTTP request). */ + load(path) { + return __awaiter(this, void 0, void 0, function* () { + // Allow http://, https://, and file:// prefixes which use AJAX. + if (path.startsWith("http://") || path.startsWith("https://") || path.startsWith("file://")) { + try { + let result = yield fetch(path, { + method: "GET", + mode: "no-cors", + redirect: "follow", + }); + return Result.success(parseCsv(yield result.text())); + } + catch (ex) { + return Result.failure("" + ex + "\n\n" + ex.stack); + } + } + // Otherwise, assume it is a fully-qualified file path. + try { + let fileData = yield this.vault.adapter.read(path); + return Result.success(parseCsv(fileData)); + } + catch (ex) { + return Result.failure(`Failed to load data from path '${path}'.`); + } + }); + } + /** Clear old entries in the cache (as measured by insertion time). */ + clearOldEntries() { + let currentTime = DateTime_1.now(); + let keysToRemove = new Set(); + for (let [key, value] of this.cache.entries()) { + let entryAge = Math.abs(currentTime.diff(value.loadTime, "seconds").seconds); + if (entryAge > CsvCache.CACHE_EXPIRY_SECONDS) + keysToRemove.add(key); + } + keysToRemove.forEach(key => this.cache.delete(key)); + } +} +/** How long until a CSV cache entry is timed out, in seconds. */ +CsvCache.CACHE_EXPIRY_SECONDS = 5 * 60; + +/** Holds DOM events for a rendered task view, including check functionality. */ +class TaskViewLifecycle extends obsidian.MarkdownRenderChild { + constructor(vault, container) { + super(container); + this.vault = vault; + this.containerEl = container; + } + onload() { + let checkboxes = this.containerEl.querySelectorAll("input"); + for (let index = 0; index < checkboxes.length; index++) { + const checkbox = checkboxes.item(index); + this.registerHandler(checkbox); + } + } + registerHandler(checkbox) { + this.registerDomEvent(checkbox, "click", event => { + var _a, _b, _c, _d; + let file = checkbox.dataset["file"]; + let lineno = checkbox.dataset["lineno"]; + let text = checkbox.dataset["text"]; + if (!file || !lineno || !text) + return; + if (!checkbox.hasAttribute("checked")) { + let newCheckbox = createCheckbox(file, parseInt(lineno), text, true); + (_a = checkbox.parentElement) === null || _a === void 0 ? void 0 : _a.addClass("is-checked"); + (_b = checkbox.parentElement) === null || _b === void 0 ? void 0 : _b.replaceChild(newCheckbox, checkbox); + this.registerHandler(newCheckbox); + setTaskCheckedInFile(this.vault, file, parseInt(lineno), text, false, true); + } + else { + let newCheckbox = createCheckbox(file, parseInt(lineno), text, false); + (_c = checkbox.parentElement) === null || _c === void 0 ? void 0 : _c.removeClass("is-checked"); + (_d = checkbox.parentElement) === null || _d === void 0 ? void 0 : _d.replaceChild(newCheckbox, checkbox); + this.registerHandler(newCheckbox); + setTaskCheckedInFile(this.vault, file, parseInt(lineno), text, true, false); + } + }); + } +} +/** Render a task grouping (indenting nested groupings for clarity). */ +function renderTasks(container, tasks, originFile, component, settings) { + return __awaiter(this, void 0, void 0, function* () { + switch (tasks.type) { + case "base": + yield renderTaskList(container, tasks.value); + break; + case "grouped": + for (let { key, value } of tasks.groups) { + let header = container.createEl("h4"); + yield renderValue(key, header, originFile, component, settings); + let div = container.createDiv({ cls: ["dataview", "result-group"] }); + yield renderTasks(div, value, originFile, component, settings); + } + break; + } + }); +} +/** Render a list of tasks as a single list. */ +function renderTaskList(container, tasks) { + return __awaiter(this, void 0, void 0, function* () { + let ul = container.createEl("ul", { cls: "contains-task-list" }); + for (let task of tasks) { + let li = ul.createEl("li"); + if (task.real) { + li.addClass("task-list-item"); + if (task.completed) + li.addClass("is-checked"); + } + // Render the text as markdown so that bolds, links, and other things work properly. + yield obsidian.MarkdownRenderer.renderMarkdown(task.text, li, task.path, new obsidian.Component()); + // Unwrap the paragraph element that is created. + let paragraph = li.querySelector("p"); + if (paragraph) { + li.innerHTML = paragraph.innerHTML; + paragraph.remove(); + } + if (task.real) { + let check = createCheckbox(task.path, task.line, task.text, task.completed); + li.prepend(check); + } + if (task.subtasks.length > 0) { + renderTaskList(li, task.subtasks); + } + } + }); +} +function createCheckbox(file, line, text, checked) { + let check = document.createElement("input"); + check.addClass("task-list-item-checkbox"); + check.type = "checkbox"; + check.dataset["file"] = file; + check.dataset["lineno"] = "" + line; + // This field is technically optional, but is provided to double-check + // we are editing the right line! + check.dataset["text"] = text; + if (checked) { + check.setAttribute("checked", ""); + } + return check; +} +/** Check a task in a file by rewriting it. */ +function setTaskCheckedInFile(vault, path, taskLine, taskText, wasChecked, check) { + return __awaiter(this, void 0, void 0, function* () { + if (check == wasChecked) + return; + let text = yield vault.adapter.read(path); + let splitText = text.replace("\r", "").split("\n"); + if (splitText.length < taskLine) + return; + let match = TASK_REGEX.exec(splitText[taskLine - 1]); + if (!match) + return; + let foundText = match[3]; + let foundCompleted = match[2] == "X" || match[2] == "x"; + if (taskText.trim() != foundText.trim()) + return; + if (wasChecked != foundCompleted) + return; + if (check) { + splitText[taskLine - 1] = splitText[taskLine - 1] + .replace("- [ ]", "- [x]") + .replace("- []", "- [x]") + .replace("-[]", "- [x]"); + } + else { + splitText[taskLine - 1] = splitText[taskLine - 1] + .replace("- [X]", "- [ ]") + .replace("-[X]", "- [ ]") + .replace("- [x]", "- [ ]") + .replace("-[x]", "- [ ]"); + } + let hasRn = text.contains("\r"); + if (hasRn) { + let final = splitText.join("\r\n"); + yield vault.adapter.write(path, final); + } + else { + let final = splitText.join("\n"); + yield vault.adapter.write(path, final); + } + }); +} + +/** Utility functions for quickly creating fields. */ +var QueryFields; +(function (QueryFields) { + function named(name, field) { + return { name, field }; + } + QueryFields.named = named; + function sortBy(field, dir) { + return { field, direction: dir }; + } + QueryFields.sortBy = sortBy; +})(QueryFields || (QueryFields = {})); + +/** A parsimmon-powered parser-combinator implementation of the query language. */ +const QUERY_LANGUAGE = parsimmon_umd_min.exports.createLanguage({ + // Simple atom parsing, like words, identifiers, numbers. + queryType: q => parsimmon_umd_min.exports.alt(parsimmon_umd_min.exports.regexp(/TABLE|LIST|TASK/i)) + .map(str => str.toLowerCase()) + .desc("query type ('TABLE', 'LIST', or 'TASK')"), + explicitNamedField: q => parsimmon_umd_min.exports.seqMap(EXPRESSION.field.skip(parsimmon_umd_min.exports.whitespace), parsimmon_umd_min.exports.regexp(/AS/i).skip(parsimmon_umd_min.exports.whitespace), EXPRESSION.identifier.or(EXPRESSION.string), (field, _as, ident) => QueryFields.named(ident, field)), + namedField: q => parsimmon_umd_min.exports.alt(q.explicitNamedField, EXPRESSION.identifierDot.map(ident => QueryFields.named(ident, Fields.indexVariable(ident)))), + sortField: q => parsimmon_umd_min.exports.seqMap(EXPRESSION.field.skip(parsimmon_umd_min.exports.optWhitespace), parsimmon_umd_min.exports.regexp(/ASCENDING|DESCENDING|ASC|DESC/i).atMost(1), (field, dir) => { + let direction = dir.length == 0 ? "ascending" : dir[0].toLowerCase(); + if (direction == "desc") + direction = "descending"; + if (direction == "asc") + direction = "ascending"; + return { + field: field, + direction: direction, + }; + }), + headerClause: q => q.queryType.skip(parsimmon_umd_min.exports.whitespace).chain(qtype => { + switch (qtype) { + case "table": + return parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WITHOUT\s+ID/i) + .skip(parsimmon_umd_min.exports.optWhitespace) + .atMost(1), parsimmon_umd_min.exports.sepBy(q.namedField, parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), (withoutId, fields) => { + return { type: "table", fields, showId: withoutId.length == 0 }; + }); + case "list": + return parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WITHOUT\s+ID/i) + .skip(parsimmon_umd_min.exports.optWhitespace) + .atMost(1), EXPRESSION.field.atMost(1), (withoutId, format) => { + return { + type: "list", + format: format.length == 1 ? format[0] : undefined, + showId: withoutId.length == 0, + }; + }); + case "task": + return parsimmon_umd_min.exports.succeed({ type: "task" }); + default: + return parsimmon_umd_min.exports.fail(`Unrecognized query type '${qtype}'`); + } + }), + fromClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/FROM/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.source, (_1, _2, source) => source), + whereClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/WHERE/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.field, (where, _, field) => { + return { type: "where", clause: field }; + }), + sortByClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/SORT/i), parsimmon_umd_min.exports.whitespace, q.sortField.sepBy1(parsimmon_umd_min.exports.string(",").trim(parsimmon_umd_min.exports.optWhitespace)), (sort, _1, fields) => { + return { type: "sort", fields }; + }), + limitClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/LIMIT/i), parsimmon_umd_min.exports.whitespace, EXPRESSION.field, (limit, _1, field) => { + return { type: "limit", amount: field }; + }), + flattenClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/FLATTEN/i).skip(parsimmon_umd_min.exports.whitespace), q.namedField, (_, field) => { + return { type: "flatten", field }; + }), + groupByClause: q => parsimmon_umd_min.exports.seqMap(parsimmon_umd_min.exports.regexp(/GROUP BY/i).skip(parsimmon_umd_min.exports.whitespace), q.namedField, (_, field) => { + return { type: "group", field }; + }), + // Full query parsing. + clause: q => parsimmon_umd_min.exports.alt(q.fromClause, q.whereClause, q.sortByClause, q.limitClause, q.groupByClause, q.flattenClause), + query: q => parsimmon_umd_min.exports.seqMap(q.headerClause.trim(parsimmon_umd_min.exports.optWhitespace), q.fromClause.trim(parsimmon_umd_min.exports.optWhitespace).atMost(1), q.clause.trim(parsimmon_umd_min.exports.optWhitespace).many(), (header, from, clauses) => { + return { + header, + source: from.length == 0 ? Sources.folder("") : from[0], + operations: clauses, + settings: DEFAULT_QUERY_SETTINGS, + }; + }), +}); +/** + * Attempt to parse a query from the given query text, returning a string error + * if the parse failed. + */ +function parseQuery(text) { + try { + let query = QUERY_LANGUAGE.query.tryParse(text); + return Result.success(query); + } + catch (error) { + return Result.failure("" + error); + } +} + +/** Provides a global dispatch table for evaluating binary operators, including comparison. */ +/** Provides implementations for binary operators on two types using a registry. */ +class BinaryOpHandler { + constructor() { + this.map = new Map(); + } + static create() { + return new BinaryOpHandler(); + } + register(left, op, right, func) { + this.map.set(BinaryOpHandler.repr(op, left, right), func); + return this; + } + registerComm(left, op, right, func) { + return this.register(left, op, right, func).register(right, op, left, (a, b, ctx) => func(b, a, ctx)); + } + /** Implement a comparison function. */ + compare(type, compare) { + return this.register(type, "<", type, (a, b, ctx) => compare(a, b, ctx) < 0) + .register(type, "<=", type, (a, b, ctx) => compare(a, b, ctx) <= 0) + .register(type, ">", type, (a, b, ctx) => compare(a, b, ctx) > 0) + .register(type, ">=", type, (a, b, ctx) => compare(a, b, ctx) >= 0) + .register(type, "=", type, (a, b, ctx) => compare(a, b, ctx) == 0) + .register(type, "!=", type, (a, b, ctx) => compare(a, b, ctx) != 0); + } + /** Attempt to evaluate the given binary operator on the two literal fields. */ + evaluate(op, left, right, ctx) { + let leftType = Values.typeOf(left); + let rightType = Values.typeOf(right); + if (!leftType) + return Result.failure(`Unrecognized value '${left}'`); + else if (!rightType) + return Result.failure(`Unrecognized value '${right}'`); + let handler = this.map.get(BinaryOpHandler.repr(op, leftType, rightType)); + if (handler) + return Result.success(handler(left, right, ctx)); + // Right-'*' fallback: + let handler2 = this.map.get(BinaryOpHandler.repr(op, leftType, "*")); + if (handler2) + return Result.success(handler2(left, right, ctx)); + // Left-'*' fallback: + let handler3 = this.map.get(BinaryOpHandler.repr(op, "*", rightType)); + if (handler3) + return Result.success(handler3(left, right, ctx)); + // Double '*' fallback. + let handler4 = this.map.get(BinaryOpHandler.repr(op, "*", "*")); + if (handler4) + return Result.success(handler4(left, right, ctx)); + return Result.failure(`Operator '${op}' is not supported for '${leftType}' and '${rightType}`); + } + /** Create a string representation of the given triplet for unique lookup in the map. */ + static repr(op, left, right) { + return `${left},${op},${right}`; + } +} +/** Configure and create a binary OP handler with the given parameters. */ +function createBinaryOps(linkNormalizer) { + return (BinaryOpHandler.create() + // TODO: Consider not using a universal comparison function. + .compare("*", (a, b) => Values.compareValue(a, b, linkNormalizer)) + // Global boolean operations. + .register("*", "&", "*", (a, b) => Values.isTruthy(a) && Values.isTruthy(b)) + .register("*", "|", "*", (a, b) => Values.isTruthy(a) || Values.isTruthy(b)) + // Number implementations. + .register("number", "+", "number", (a, b) => a + b) + .register("number", "-", "number", (a, b) => a - b) + .register("number", "*", "number", (a, b) => a * b) + .register("number", "/", "number", (a, b) => a / b) + // String implementations. + .register("string", "+", "*", (a, b, ctx) => a + Values.toString(b, ctx.settings)) + .register("*", "+", "string", (a, b, ctx) => Values.toString(a, ctx.settings) + b) + .registerComm("string", "*", "number", (a, b) => (b < 0 ? "" : a.repeat(b))) + // Date Operations. + .register("date", "-", "date", (a, b) => { + return normalizeDuration(a.diff(b, ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"])); + }) + .register("date", "-", "duration", (a, b) => a.minus(b)) + .registerComm("date", "+", "duration", (a, b) => a.plus(b)) + // Duration Operations. + .register("duration", "+", "duration", (a, b) => normalizeDuration(a.plus(b))) + .register("duration", "-", "duration", (a, b) => normalizeDuration(a.minus(b))) + // Array operations. + .register("array", "+", "array", (a, b) => [].concat(a).concat(b)) + // Object operations. + .register("object", "+", "object", (a, b) => Object.assign({}, a, b))); +} + +/** Default function implementations for the expression evaluator. */ +/** + * Allows for the creation of functions that check the number and type of their arguments, and dispatch + * to different implemenations based on the types of the inputs. + */ +class FunctionBuilder { + constructor(name) { + this.name = name; + this.variants = []; + this.vectorized = {}; + } + /** Add a general function variant which accepts any number of arguments of any type. */ + vararg(impl) { + this.variants.push({ args: [], varargs: true, impl }); + return this; + } + /** Add a function variant which takes in a single argument. */ + add1(argType, impl) { + this.variants.push({ + args: [argType], + varargs: false, + impl: (c, ...rest) => impl(rest[0], c), + }); + return this; + } + /** Add a function variant which takes in two typed arguments. */ + add2(arg1, arg2, impl) { + this.variants.push({ + args: [arg1, arg2], + varargs: false, + impl: (c, ...rest) => impl(rest[0], rest[1], c), + }); + return this; + } + /** Add a function variant which takes in three typed arguments. */ + add3(arg1, arg2, arg3, impl) { + this.variants.push({ + args: [arg1, arg2, arg3], + varargs: false, + impl: (c, ...rest) => impl(rest[0], rest[1], rest[2], c), + }); + return this; + } + /** Add vectorized variants which accept the given number of arguments and delegate. */ + vectorize(numArgs, positions) { + this.vectorized[numArgs] = positions; + return this; + } + /** Return a function which checks the number and type of arguments, passing them on to the first matching variant. */ + build() { + let self = (context, ...args) => { + let types = []; + for (let arg of args) { + let argType = Values.typeOf(arg); + if (!argType) + throw Error(`Unrecognized argument type for argument '${arg}'`); + types.push(argType); + } + // Handle vectorization, possibly in multiple fields. + if (this.vectorized[types.length]) { + let vectorizedPositions = this.vectorized[types.length].filter(k => types[k] == "array"); + if (vectorizedPositions.length > 0) { + let minLength = vectorizedPositions + .map(p => args[p].length) + .reduce((p, c) => Math.min(p, c)); + // Call the subfunction for each element in the longest array. + // If you call a vectorized function with different-length arrays, + // the output is limited by the length of the shortest array. + let result = []; + for (let vpos = 0; vpos < minLength; vpos++) { + let subargs = []; + for (let index = 0; index < args.length; index++) { + if (vectorizedPositions.includes(index)) { + let arr = args[index]; + subargs.push(arr[vpos]); + } + else { + subargs.push(args[index]); + } + } + result.push(self(context, ...subargs)); + } + return result; + } + } + outer: for (let variant of this.variants) { + if (variant.varargs) + return variant.impl(context, ...args); + if (variant.args.length != types.length) + continue; + for (let index = 0; index < variant.args.length; index++) { + if (variant.args[index] != "*" && variant.args[index] != types[index]) + continue outer; + } + return variant.impl(context, ...args); + } + throw Error(`No implementation of '${this.name}' found for arguments: ${types.join(", ")}`); + }; + return self; + } +} +/** Utilities for managing function implementations. */ +var Functions; +(function (Functions) { + /** Bind a context to a function implementation, yielding a function which does not need the context argument. */ + function bind(func, context) { + return (...args) => func(context, ...args); + } + Functions.bind = bind; + /** Bind a context to all functions in the given map, yielding a new map of bound functions. */ + function bindAll(funcs, context) { + let result = {}; + for (let [key, func] of Object.entries(funcs)) { + result[key] = Functions.bind(func, context); + } + return result; + } + Functions.bindAll = bindAll; +})(Functions || (Functions = {})); +/** + * Collection of all defined functions; defined here so that they can be called from within dataview, + * and test code. + */ +var DefaultFunctions; +(function (DefaultFunctions) { + /** Compute the length of a data type. */ + DefaultFunctions.length = new FunctionBuilder("length") + .add1("array", a => a.length) + .add1("object", a => Object.keys(a).length) + .add1("string", a => a.length) + .add1("null", _a => 0) + .build(); + /** List constructor function. */ + DefaultFunctions.list = (_context, ...args) => args; + /** Object constructor function. */ + DefaultFunctions.object = (_context, ...args) => { + if (args.length % 2 != 0) + throw Error("object() requires an even number of arguments"); + let result = {}; + for (let index = 0; index < args.length; index += 2) { + let key = args[index]; + if (!Values.isString(key)) + throw Error("keys should be of type string for object(key1, value1, ...)"); + result[key] = args[index + 1]; + } + return result; + }; + /** Internal link constructor function. */ + DefaultFunctions.link = new FunctionBuilder("link") + .add1("string", (a, c) => Link.file(c.linkHandler.normalize(a), false)) + .add1("link", a => a) + .add1("null", _a => null) + .vectorize(1, [0]) + .add2("string", "string", (t, d, c) => Link.file(c.linkHandler.normalize(t), false, d)) + .add2("link", "string", (t, d) => t.withDisplay(d)) + .add2("null", "*", () => null) + .add2("*", "null", (t, _n, c) => DefaultFunctions.link(c, t)) + .vectorize(2, [0, 1]) + .build(); + /** External link constructor function. */ + DefaultFunctions.elink = new FunctionBuilder("elink") + .add2("string", "string", (a, d) => { + let elem = document.createElement("a"); + elem.textContent = d; + elem.rel = "noopener"; + elem.target = "_blank"; + elem.classList.add("external-link"); + elem.href = a; + return elem; + }) + .add2("string", "null", (s, _n, c) => DefaultFunctions.elink(c, s, s)) + .add2("null", "*", () => null) + .vectorize(2, [0]) + .add1("string", (a, c) => DefaultFunctions.elink(c, a, a)) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Date constructor function. */ + DefaultFunctions.date = new FunctionBuilder("date") + .add1("string", str => { + let parsedDate = EXPRESSION.date.parse(str); + if (parsedDate.status) + return parsedDate.value; + else + return null; + }) + .add1("date", d => d) + .add1("link", (link, c) => { + var _c, _d, _e, _f; + // Try to parse from the display... + if (link.display) { + let parsedDate = EXPRESSION.date.parse(link.display); + if (parsedDate.status) + return parsedDate.value; + } + // Then try to parse from the path... + let parsedDate = EXPRESSION.date.parse(link.path); + if (parsedDate.status) + return parsedDate.value; + // Then pull it from the file. + let resolved = c.linkHandler.resolve(link.path); + if (resolved && ((_d = (_c = resolved) === null || _c === void 0 ? void 0 : _c.file) === null || _d === void 0 ? void 0 : _d.day)) { + return (_f = (_e = resolved) === null || _e === void 0 ? void 0 : _e.file) === null || _f === void 0 ? void 0 : _f.day; + } + return null; + }) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + /** Format a date using a luxon/moment-style date format. */ + DefaultFunctions.dateformat = new FunctionBuilder("dateformat") + .add2("date", "string", (date, format) => date.toFormat(format, { locale: currentLocale() })) + .vectorize(2, [0]) + .build(); + const NUMBER_REGEX = /-?[0-9]+(\.[0-9]+)?/; + /** Number constructor function. */ + DefaultFunctions.number = new FunctionBuilder("number") + .add1("number", a => a) + .add1("string", str => { + let match = NUMBER_REGEX.exec(str); + if (match) + return Number.parseFloat(match[0]); + else + return null; + }) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.round = new FunctionBuilder("round") + .add1("number", n => Math.round(n)) + .add1("null", () => null) + .vectorize(1, [0]) + .add2("number", "number", (n, p) => { + if (p <= 0) + return Math.round(n); + return parseFloat(n.toFixed(p)); + }) + .add2("number", "null", n => Math.round(n)) + .add2("null", "*", () => null) + .vectorize(2, [0]) + .build(); + DefaultFunctions.min = new FunctionBuilder("min") + .add2("*", "null", (a, _n) => a) + .add2("null", "*", (_n, a) => a) + .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) <= 0 ? a : b)) + .add1("array", (a, ctx) => DefaultFunctions.min(ctx, ...a)) + .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.min(ctx, p, c)))) + .build(); + DefaultFunctions.max = new FunctionBuilder("max") + .add2("*", "null", (a, _n) => a) + .add2("null", "*", (_n, a) => a) + .add2("*", "*", (a, b, ctx) => (Values.compareValue(a, b, ctx.linkHandler.normalize) > 0 ? a : b)) + .add1("array", (a, ctx) => DefaultFunctions.max(ctx, ...a)) + .vararg((ctx, ...args) => (args.length == 0 ? null : args.reduce((p, c) => DefaultFunctions.max(ctx, p, c)))) + .build(); + DefaultFunctions.minby = new FunctionBuilder("minby") + .add2("array", "function", (arr, func, ctx) => { + if (arr.length == 0) + return null; + let values = arr.map(v => { + return { value: v, mapped: func(ctx, v) }; + }); + let filtered = values.filter(v => !Values.isNull(v.mapped)); + if (filtered.length == 0) + return arr[0]; + return filtered.reduce((p, c) => { + if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) <= 0) + return p; + else + return c; + }).value; + }) + .build(); + DefaultFunctions.maxby = new FunctionBuilder("maxby") + .add2("array", "function", (arr, func, ctx) => { + if (arr.length == 0) + return null; + let values = arr.map(v => { + return { value: v, mapped: func(ctx, v) }; + }); + let filtered = values.filter(v => !Values.isNull(v.mapped)); + if (filtered.length == 0) + return arr[0]; + return filtered.reduce((p, c) => { + if (Values.compareValue(p.mapped, c.mapped, ctx.linkHandler.normalize) > 0) + return p; + else + return c; + }).value; + }) + .build(); + DefaultFunctions.striptime = new FunctionBuilder("striptime") + .add1("date", d => DateTime_1.fromObject({ year: d.year, month: d.month, day: d.day })) + .add1("null", _n => null) + .vectorize(1, [0]) + .build(); + // Default contains, which looks through data structures recursively. + DefaultFunctions.contains = new FunctionBuilder("contains") + .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.contains(context, e, elem))) + .add2("string", "string", (haystack, needle) => haystack.includes(needle)) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // Case insensitive version of contains. + DefaultFunctions.icontains = new FunctionBuilder("icontains") + .add2("array", "*", (l, elem, context) => l.some(e => DefaultFunctions.icontains(context, e, elem))) + .add2("string", "string", (haystack, needle) => haystack.toLocaleLowerCase().includes(needle.toLocaleLowerCase())) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // "exact" contains, does not look recursively. + DefaultFunctions.econtains = new FunctionBuilder("econtains") + .add2("array", "*", (l, elem, context) => l.some(e => context.evaluate(Fields.binaryOp(Fields.literal(elem), "=", Fields.literal(e))).orElseThrow())) + .add2("string", "string", (haystack, needle) => haystack.includes(needle)) + .add2("object", "string", (obj, key) => key in obj) + .add2("*", "*", (elem1, elem2, context) => context.evaluate(Fields.binaryOp(Fields.literal(elem1), "=", Fields.literal(elem2))).orElseThrow()) + .vectorize(2, [1]) + .build(); + // Case insensitive contains which looks for exact word matches (i.e., boundry-to-boundry match). + DefaultFunctions.containsword = new FunctionBuilder("containsword") + .add2("string", "string", (hay, needle) => !!hay.match(new RegExp(".*\\b" + escapeRegex(needle) + "\\b.*", "i"))) + .add2("null", "*", (_a, _b) => null) + .add2("*", "null", (_a, _b) => null) + .vectorize(2, [0, 1]) + .build(); + /** Extract 0 or more keys from a given object via indexing. */ + DefaultFunctions.extract = (context, ...args) => { + if (args.length == 0) + return "extract(object, key1, ...) requires at least 1 argument"; + // Manually handle vectorization in the first argument. + let object = args[0]; + if (Values.isArray(object)) + return object.map(v => DefaultFunctions.extract(context, v, ...args.slice(1))); + let result = {}; + for (let index = 1; index < args.length; index++) { + let key = args[index]; + if (!Values.isString(key)) + throw Error("extract(object, key1, ...) must be called with string keys"); + result[key] = context.evaluate(Fields.index(Fields.literal(object), Fields.literal(key))).orElseThrow(); + } + return result; + }; + // Reverse aan array or string. + DefaultFunctions.reverse = new FunctionBuilder("reverse") + .add1("array", l => { + let result = []; + for (let index = l.length - 1; index >= 0; index--) + result.push(l[index]); + return result; + }) + .add1("string", l => { + let result = ""; + for (let c = 0; c < l.length; c++) + result += l[l.length - c - 1]; + return result; + }) + .add1("*", e => e) + .build(); + // Sort an array; if given two arguments, sorts by the key returned. + DefaultFunctions.sort = new FunctionBuilder("sort") + .add1("array", (list, context) => DefaultFunctions.sort(context, list, (_ctx, a) => a)) + .add2("array", "function", (list, key, context) => { + let result = [].concat(list); + result.sort((a, b) => { + let akey = key(context, a); + let bkey = key(context, b); + let le = context + .evaluate(Fields.binaryOp(Fields.literal(akey), "<", Fields.literal(bkey))) + .orElseThrow(); + if (Values.isTruthy(le)) + return -1; + let eq = context + .evaluate(Fields.binaryOp(Fields.literal(akey), "=", Fields.literal(bkey))) + .orElseThrow(); + if (Values.isTruthy(eq)) + return 0; + return 1; + }); + return result; + }) + .add1("*", e => e) + .build(); + DefaultFunctions.regexmatch = new FunctionBuilder("regexmatch") + .add2("string", "string", (pattern, field) => { + if (!pattern.startsWith("^") && !pattern.endsWith("$")) + pattern = "^" + pattern + "$"; + return !!field.match(pattern); + }) + .add2("null", "*", (_n, _a) => false) + .add2("*", "null", (_a, _n) => false) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.regexreplace = new FunctionBuilder("regexreplace") + .add3("string", "string", "string", (field, pat, rep) => { + try { + let reg = new RegExp(pat, "g"); + return field.replace(reg, rep); + } + catch (ex) { + throw Error(`Invalid regexp '${pat}' in regexreplace`); + } + }) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.lower = new FunctionBuilder("lower") + .add1("string", s => s.toLocaleLowerCase()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.upper = new FunctionBuilder("upper") + .add1("string", s => s.toLocaleUpperCase()) + .add1("null", () => null) + .vectorize(1, [0]) + .build(); + DefaultFunctions.replace = new FunctionBuilder("replace") + .add3("string", "string", "string", (str, pat, repr) => str.split(pat).join(repr)) + .add3("null", "*", "*", () => null) + .add3("*", "null", "*", () => null) + .add3("*", "*", "null", () => null) + .vectorize(3, [0, 1, 2]) + .build(); + DefaultFunctions.fdefault = new FunctionBuilder("default") + .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) + .vectorize(2, [0, 1]) + .build(); + DefaultFunctions.ldefault = new FunctionBuilder("ldefault") + .add2("*", "*", (v, bk) => (Values.isNull(v) ? bk : v)) + .build(); + DefaultFunctions.choice = new FunctionBuilder("choice") + .add3("*", "*", "*", (b, left, right) => (Values.isTruthy(b) ? left : right)) + .vectorize(3, [0]) + .build(); + DefaultFunctions.reduce = new FunctionBuilder("reduce") + .add2("array", "string", (lis, op, context) => { + if (lis.length == 0) + return null; + if (op != "+" && op != "-" && op != "*" && op != "/" && op != "&" && op != "|") + throw Error("reduce(array, op) supports '+', '-', '/', '*', '&', and '|'"); + let value = lis[0]; + for (let index = 1; index < lis.length; index++) { + value = context + .evaluate(Fields.binaryOp(Fields.literal(value), op, Fields.literal(lis[index]))) + .orElseThrow(); + } + return value; + }) + .add2("array", "function", (lis, op, context) => { + if (lis.length == 0) + return null; + let value = lis[0]; + for (let index = 1; index < lis.length; index++) { + // Skip null values to reduce the pain of summing over fields that may or may not exist. + if (Values.isNull(lis[index])) + continue; + value = op(context, value, lis[index]); + } + return value; + }) + .add2("null", "*", () => null) + .add2("*", "null", () => null) + .vectorize(2, [1]) + .build(); + DefaultFunctions.sum = new FunctionBuilder("sum") + .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "+")) + .add1("*", e => e) + .build(); + DefaultFunctions.product = new FunctionBuilder("product") + .add1("array", (arr, c) => DefaultFunctions.reduce(c, arr, "*")) + .add1("*", e => e) + .build(); + DefaultFunctions.join = new FunctionBuilder("join") + .add2("array", "string", (arr, sep, ctx) => arr.map(e => Values.toString(e, ctx.settings)).join(sep)) + .add2("array", "null", (arr, _s, context) => DefaultFunctions.join(context, arr, ", ")) + .add2("*", "string", (elem, sep, ctx) => Values.toString(elem, ctx.settings)) + .add1("array", (arr, context) => DefaultFunctions.join(context, arr, ", ")) + .add1("*", (e, ctx) => Values.toString(e, ctx.settings)) + .vectorize(2, [1]) + .build(); + DefaultFunctions.any = new FunctionBuilder("any") + .add1("array", arr => arr.some(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => arr.some(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => args.some(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.all = new FunctionBuilder("all") + .add1("array", arr => arr.every(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => arr.every(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => args.every(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.none = new FunctionBuilder("all") + .add1("array", arr => !arr.some(v => Values.isTruthy(v))) + .add2("array", "function", (arr, f, ctx) => !arr.some(v => Values.isTruthy(f(ctx, v)))) + .vararg((_ctx, ...args) => !args.some(v => Values.isTruthy(v))) + .build(); + DefaultFunctions.filter = new FunctionBuilder("filter") + .add2("array", "function", (arr, f, ctx) => arr.filter(v => Values.isTruthy(f(ctx, v)))) + .add2("null", "*", () => null) + .build(); + DefaultFunctions.map = new FunctionBuilder("map") + .add2("array", "function", (arr, f, ctx) => arr.map(v => f(ctx, v))) + .add2("null", "*", () => null) + .build(); + DefaultFunctions.nonnull = new FunctionBuilder("nonnull") + .vararg((_ctx, ...args) => args.filter(v => Values.typeOf(v) != "null")) + .build(); +})(DefaultFunctions || (DefaultFunctions = {})); +/** Default function implementations for the expression evaluator. */ +const DEFAULT_FUNCTIONS = { + // Constructors. + list: DefaultFunctions.list, + array: DefaultFunctions.list, + link: DefaultFunctions.link, + elink: DefaultFunctions.elink, + date: DefaultFunctions.date, + dateformat: DefaultFunctions.dateformat, + number: DefaultFunctions.number, + object: DefaultFunctions.object, + // Math Operations. + round: DefaultFunctions.round, + min: DefaultFunctions.min, + max: DefaultFunctions.max, + minby: DefaultFunctions.minby, + maxby: DefaultFunctions.maxby, + // String operations. + regexreplace: DefaultFunctions.regexreplace, + regexmatch: DefaultFunctions.regexmatch, + replace: DefaultFunctions.replace, + lower: DefaultFunctions.lower, + upper: DefaultFunctions.upper, + // Date Operations. + striptime: DefaultFunctions.striptime, + // List operations. + length: DefaultFunctions.length, + contains: DefaultFunctions.contains, + icontains: DefaultFunctions.icontains, + econtains: DefaultFunctions.econtains, + containsword: DefaultFunctions.containsword, + reverse: DefaultFunctions.reverse, + sort: DefaultFunctions.sort, + // Aggregation operations like reduce. + reduce: DefaultFunctions.reduce, + join: DefaultFunctions.join, + sum: DefaultFunctions.sum, + product: DefaultFunctions.product, + all: DefaultFunctions.all, + any: DefaultFunctions.any, + none: DefaultFunctions.none, + filter: DefaultFunctions.filter, + map: DefaultFunctions.map, + nonnull: DefaultFunctions.nonnull, + // Object/Utility operations. + extract: DefaultFunctions.extract, + default: DefaultFunctions.fdefault, + ldefault: DefaultFunctions.ldefault, + choice: DefaultFunctions.choice, +}; + +/** Core implementation of the query language evaluation engine. */ +/** + * Evaluation context that expressions can be evaluated in. Includes global state, as well as available functions and a handler + * for binary operators. + */ +class Context { + /** + * Create a new context with the given namespace of globals, as well as optionally with custom binary operator, function, + * and link handlers. + */ + constructor(linkHandler, settings, globals = {}, binaryOps = createBinaryOps(linkHandler.normalize), functions = DEFAULT_FUNCTIONS) { + this.linkHandler = linkHandler; + this.settings = settings; + this.globals = globals; + this.binaryOps = binaryOps; + this.functions = functions; + } + /** Set a global value in this context. */ + set(name, value) { + this.globals[name] = value; + return this; + } + /** Get the value of a global variable by name. Returns null if not present. */ + get(name) { + var _a; + return (_a = this.globals[name]) !== null && _a !== void 0 ? _a : null; + } + /** Try to evaluate an arbitary field in this context, raising an exception on failure. */ + tryEvaluate(field, data = {}) { + return this.evaluate(field, data).orElseThrow(); + } + /** Evaluate an arbitrary field in this context. */ + evaluate(field, data = {}) { + var _a, _b; + switch (field.type) { + case "literal": + return Result.success(field.value); + case "variable": + if (field.name in data) + return Result.success(data[field.name]); + else if (field.name in this.globals) + return Result.success(this.globals[field.name]); + else + return Result.success(null); + case "negated": + return this.evaluate(field.child, data).map(s => !Values.isTruthy(s)); + case "binaryop": + return Result.flatMap2(this.evaluate(field.left, data), this.evaluate(field.right, data), (a, b) => this.binaryOps.evaluate(field.op, a, b, this)); + case "list": + let result = []; + for (let child of field.values) { + let subeval = this.evaluate(child, data); + if (!subeval.successful) + return subeval; + result.push(subeval.value); + } + return Result.success(result); + case "object": + let objResult = {}; + for (let [key, child] of Object.entries(field)) { + let subeval = this.evaluate(child, data); + if (!subeval.successful) + return subeval; + objResult[key] = subeval.value; + } + return Result.success(objResult); + case "lambda": + // Just relying on JS to capture 'data' for us implicitly; unsure + // if this is correct thing to do. Could cause wierd behaviors. + return Result.success((ctx, ...args) => { + let copy = Object.assign({}, data); + for (let arg = 0; arg < Math.min(args.length, field.arguments.length); arg++) { + copy[field.arguments[arg]] = args[arg]; + } + return ctx.evaluate(field.value, copy).orElseThrow(); + }); + case "function": + let rawFunc = field.func.type == "variable" + ? Result.success(field.func.name) + : this.evaluate(field.func, data); + if (!rawFunc.successful) + return rawFunc; + let func = rawFunc.value; + let args = []; + for (let arg of field.arguments) { + let resolved = this.evaluate(arg, data); + if (!resolved.successful) + return resolved; + args.push(resolved.value); + } + let call; + if (Values.isFunction(func)) + call = func; + else if (Values.isString(func) && func in this.functions) + call = this.functions[func]; + else if (Values.isString(func)) + return Result.failure(`Unrecognized function name '${func}'`); + else + return Result.failure(`Cannot call type '${Values.typeOf(func)}' as a function`); + try { + return Result.success(call(this, ...args)); + } + catch (e) { + return Result.failure(e.message); + } + case "index": + // TODO: Will move this out to an 'primitives' module and add more content to it. + let literalIndex = field.index.type == "variable" + ? Result.success(field.index.name) + : this.evaluate(field.index, data); + let checkedIndex = literalIndex.flatMap(s => Values.isString(s) || Values.isNumber(s) + ? Result.success(s) + : Result.failure("Can only index with a string, variable, or number")); + if (!checkedIndex.successful) + return checkedIndex; + let index = checkedIndex.value; + let checkedObject = field.object.type == "variable" && field.object.name == "row" + ? Result.success(Object.assign({}, this.globals, data)) + : this.evaluate(field.object, data); + if (!checkedObject.successful) + return checkedObject; + let object = Values.wrapValue(checkedObject.value); + if (!object) + return Result.failure("Unrecognized object to index into: " + object); + switch (object.type) { + case "object": + if (!Values.isString(index)) + return Result.failure('can only index into objects with strings (a.b or a["b"])'); + return Result.success((_a = object.value[index]) !== null && _a !== void 0 ? _a : null); + case "link": + if (!Values.isString(index)) + return Result.failure('can only index into links with strings (a.b or a["b"])'); + let linkValue = this.linkHandler.resolve(object.value.path); + if (Values.isNull(linkValue)) + return Result.success(null); + return Result.success((_b = linkValue[index]) !== null && _b !== void 0 ? _b : null); + case "array": + if (Values.isNumber(index)) { + if (index >= object.value.length || index < 0) + return Result.success(null); + else + return Result.success(object.value[index]); + } + else if (Values.isString(index)) { + let result = []; + for (let value of object.value) { + let next = this.evaluate(Fields.index(Fields.literal(value), Fields.literal(index))); + if (!next.successful) + continue; + result.push(next.value); + } + return Result.success(result); + } + else { + return Result.failure("Array indexing requires either a number (to get a specific element), or a string (to map all elements inside the array)"); + } + case "string": + if (!Values.isNumber(index)) + return Result.failure("string indexing requires a numeric index (string[index])"); + if (index >= object.value.length || index < 0) + return Result.success(null); + return Result.success(object.value[index]); + case "date": + if (!Values.isString(index)) + return Result.failure("date indexing requires a string representing the unit"); + switch (index) { + case "year": + return Result.success(object.value.year); + case "month": + return Result.success(object.value.month); + case "weekyear": + return Result.success(object.value.weekNumber); + case "week": + return Result.success(Math.floor(object.value.day / 7) + 1); + case "weekday": + return Result.success(object.value.weekday); + case "day": + return Result.success(object.value.day); + case "hour": + return Result.success(object.value.hour); + case "minute": + return Result.success(object.value.minute); + case "second": + return Result.success(object.value.second); + case "millisecond": + return Result.success(object.value.millisecond); + default: + return Result.success(null); + } + case "duration": + if (!Values.isString(index)) + return Result.failure("duration indexing requires a string representing the unit"); + switch (index) { + case "year": + case "years": + return Result.success(object.value.years); + case "month": + case "months": + return Result.success(object.value.months); + case "weeks": + return Result.success(object.value.weeks); + case "day": + case "days": + return Result.success(object.value.days); + case "hour": + case "hours": + return Result.success(object.value.hours); + case "minute": + case "minutes": + return Result.success(object.value.minutes); + case "second": + case "seconds": + return Result.success(object.value.seconds); + case "millisecond": + case "milliseconds": + return Result.success(object.value.milliseconds); + default: + return Result.success(null); + } + default: + return Result.success(null); + } + } + } +} + +/** Collect data matching a source query. */ +/** Find source paths which match the given source. */ +function matchingSourcePaths(source, index, originFile = "") { + var _a; + switch (source.type) { + case "empty": + return Result.success(new Set()); + case "tag": + return Result.success(index.tags.getInverse(source.tag)); + case "csv": + return Result.success(new Set([index.prefix.resolveRelative(source.path, originFile)])); + case "folder": + return Result.success(index.prefix.get(source.folder, PathFilters.markdown)); + case "link": + let fullPath = (_a = index.metadataCache.getFirstLinkpathDest(source.file, originFile)) === null || _a === void 0 ? void 0 : _a.path; + if (!fullPath) + return Result.failure(`Could not resolve link "${source.file}" during link lookup - does it exist?`); + if (source.direction === "incoming") { + // To find all incoming links (i.e., things that link to this), use the index that Obsidian provides. + // TODO: Use an actual index so this isn't a fullscan. + let resolved = index.metadataCache.resolvedLinks; + let incoming = new Set(); + for (let [key, value] of Object.entries(resolved)) { + if (fullPath in value) + incoming.add(key); + } + return Result.success(incoming); + } + else { + let resolved = index.metadataCache.resolvedLinks; + if (!(fullPath in resolved)) + return Result.failure(`Could not find file "${source.file}" during link lookup - does it exist?`); + return Result.success(new Set(Object.keys(index.metadataCache.resolvedLinks[fullPath]))); + } + case "binaryop": + return Result.flatMap2(matchingSourcePaths(source.left, index, originFile), matchingSourcePaths(source.right, index, originFile), (left, right) => { + if (source.op == "&") { + let result = new Set(); + for (let elem of right) { + if (left.has(elem)) + result.add(elem); + } + return Result.success(result); + } + else if (source.op == "|") { + let result = new Set(left); + for (let elem of right) + result.add(elem); + return Result.success(result); + } + else { + return Result.failure(`Unrecognized operator '${source.op}'.`); + } + }); + case "negate": + return matchingSourcePaths(source.child, index, originFile).map(child => { + // TODO: This is obviously very inefficient. Can be improved by complicating the + // return type of this function & optimizing 'and' / 'or'. + let allFiles = new Set(index.vault.getMarkdownFiles().map(f => f.path)); + child.forEach(f => allFiles.delete(f)); + return allFiles; + }); + } +} +/** Convert a path to the data for that path; usually markdown pages, but could also be other file types (like CSV). */ +function resolvePathData(path, index) { + return __awaiter(this, void 0, void 0, function* () { + if (PathFilters.csv(path)) + return resolveCsvData(path, index); + else + return resolveMarkdownData(path, index); + }); +} +// TODO: We shouldn't be doing path normalization here relative to an origin file, +/** Convert a CSV path to the data in the CSV (in dataview format). */ +function resolveCsvData(path, index) { + return __awaiter(this, void 0, void 0, function* () { + let rawData = yield index.csv.get(path); + return rawData.map(rows => { + return rows.map((row, index) => { + return { + id: `${path}#${index}`, + data: row, + }; + }); + }); + }); +} +/** Convert a path pointing to a markdown page, into the associated metadata. */ +function resolveMarkdownData(path, index) { + let page = index.pages.get(path); + if (!page) + return Result.success([]); + return Result.success([ + { + id: Link.file(path), + data: page.toObject(index), + }, + ]); +} +/** Resolve a source to the collection of data rows that it matches. */ +function resolveSource(source, index, originFile = "") { + return __awaiter(this, void 0, void 0, function* () { + let paths = matchingSourcePaths(source, index, originFile); + if (!paths.successful) + return Result.failure(paths.error); + let result = []; + for (let path of paths.value) { + let resolved = yield resolvePathData(path, index); + if (!resolved.successful) + return resolved; + for (let val of resolved.value) + result.push(val); + } + return Result.success(result); + }); +} + +function iden(x) { + return x; +} +/** Shared execution code which just takes in arbitrary data, runs operations over it, and returns it + per-row errors. */ +function executeCore(rows, context, ops) { + let diagnostics = []; + let identMeaning = { type: "path" }; + let startTime = new Date().getTime(); + for (let op of ops) { + let opStartTime = new Date().getTime(); + let incomingRows = rows.length; + let errors = []; + switch (op.type) { + case "where": + let whereResult = []; + for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let value = context.evaluate(op.clause, row.data); + if (!value.successful) + errors.push({ index, message: value.error }); + else if (Values.isTruthy(value.value)) + whereResult.push(row); + } + rows = whereResult; + break; + case "sort": + let sortFields = op.fields; + let taggedData = []; + outer: for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let rowSorts = []; + for (let sIndex = 0; sIndex < sortFields.length; sIndex++) { + let value = context.evaluate(sortFields[sIndex].field, row.data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue outer; + } + rowSorts.push(value.value); + } + taggedData.push({ data: row, fields: rowSorts }); + } + // Sort rows by the sort fields, and then return the finished result. + taggedData.sort((a, b) => { + for (let index = 0; index < sortFields.length; index++) { + let factor = sortFields[index].direction === "ascending" ? 1 : -1; + let le = context.binaryOps + .evaluate("<", a.fields[index], b.fields[index], context) + .orElse(false); + if (Values.isTruthy(le)) + return factor * -1; + let ge = context.binaryOps + .evaluate(">", a.fields[index], b.fields[index], context) + .orElse(false); + if (Values.isTruthy(ge)) + return factor * 1; + } + return 0; + }); + rows = taggedData.map(v => v.data); + break; + case "limit": + let limiting = context.evaluate(op.amount); + if (!limiting.successful) + return Result.failure("Failed to execute 'limit' statement: " + limiting.error); + if (!Values.isNumber(limiting.value)) + return Result.failure(`Failed to execute 'limit' statement: limit should be a number, but got '${Values.typeOf(limiting.value)}' (${limiting.value})`); + rows = rows.slice(0, limiting.value); + break; + case "group": + let groupData = []; + for (let index = 0; index < rows.length; index++) { + let value = context.evaluate(op.field.field, rows[index].data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue; + } + groupData.push({ data: rows[index], key: value.value }); + } + // Sort by the key, which we will group on shortly. + groupData.sort((a, b) => { + let le = context.binaryOps.evaluate("<", a.key, b.key, context).orElse(false); + if (Values.isTruthy(le)) + return -1; + let ge = context.binaryOps.evaluate(">", a.key, b.key, context).orElse(false); + if (Values.isTruthy(ge)) + return 1; + return 0; + }); + // Then walk through and find fields that are equal. + let finalGroupData = []; + if (groupData.length > 0) + finalGroupData.push({ + key: groupData[0].key, + rows: [groupData[0].data.data], + [op.field.name]: groupData[0].key, + }); + for (let index = 1; index < groupData.length; index++) { + let curr = groupData[index], prev = groupData[index - 1]; + if (context.binaryOps.evaluate("=", curr.key, prev.key, context).orElse(false)) { + finalGroupData[finalGroupData.length - 1].rows.push(curr.data.data); + } + else { + finalGroupData.push({ + key: curr.key, + rows: [curr.data.data], + [op.field.name]: curr.key, + }); + } + } + rows = finalGroupData.map(d => { + return { id: d.key, data: d }; + }); + identMeaning = { type: "group", name: op.field.name, on: identMeaning }; + break; + case "flatten": + let flattenResult = []; + for (let index = 0; index < rows.length; index++) { + let row = rows[index]; + let value = context.evaluate(op.field.field, row.data); + if (!value.successful) { + errors.push({ index, message: value.error }); + continue; + } + let datapoints = Values.isArray(value.value) ? value.value : [value.value]; + for (let v of datapoints) { + let copy = Values.deepCopy(row); + copy.data[op.field.name] = v; + flattenResult.push(copy); + } + } + rows = flattenResult; + if (identMeaning.type == "group" && identMeaning.name == op.field.name) + identMeaning = identMeaning.on; + break; + default: + return Result.failure("Unrecognized query operation '" + op.type + "'"); + } + if (errors.length >= incomingRows && incomingRows > 0) { + return Result.failure(`Every row during operation '${op.type}' failed with an error; first ${Math.min(3, errors.length)}:\n + ${errors + .slice(0, 3) + .map(d => "- " + d.message) + .join("\n")}`); + } + diagnostics.push({ + incomingRows, + errors, + outgoingRows: rows.length, + timeMs: new Date().getTime() - opStartTime, + }); + } + return Result.success({ + data: rows, + idMeaning: identMeaning, + ops, + diagnostics, + timeMs: new Date().getTime() - startTime, + }); +} +/** Expanded version of executeCore which adds an additional "extraction" step to the pipeline. */ +function executeCoreExtract(rows, context, ops, fields) { + let internal = executeCore(rows, context, ops); + if (!internal.successful) + return internal; + let core = internal.value; + let startTime = new Date().getTime(); + let errors = []; + let res = []; + outer: for (let index = 0; index < core.data.length; index++) { + let page = { id: core.data[index].id, data: {} }; + for (let [name, field] of Object.entries(fields)) { + let value = context.evaluate(field, core.data[index].data); + if (!value.successful) { + errors.push({ index: index, message: value.error }); + continue outer; + } + page.data[name] = value.value; + } + res.push(page); + } + if (errors.length >= core.data.length && core.data.length > 0) { + return Result.failure(`Every row during final data extraction failed with an error; first ${Math.max(errors.length, 3)}:\n + ${errors + .slice(0, 3) + .map(d => "- " + d.message) + .join("\n")}`); + } + let execTime = new Date().getTime() - startTime; + return Result.success({ + data: res, + idMeaning: core.idMeaning, + diagnostics: core.diagnostics.concat([ + { + timeMs: execTime, + incomingRows: core.data.length, + outgoingRows: res.length, + errors, + }, + ]), + ops: core.ops.concat([{ type: "extract", fields }]), + timeMs: core.timeMs + execTime, + }); +} +/** Execute a list-based query, returning the final results. */ +function executeList(query, index, origin, settings) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Start by collecting all of the files that match the 'from' queries. + let fileset = yield resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, + }); + let targetField = query.header.format; + let fields = targetField ? { target: targetField } : {}; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let data = core.data.map(p => { + var _a; + return iden({ + primary: p.id, + value: (_a = p.data["target"]) !== null && _a !== void 0 ? _a : undefined, + }); + }); + return { primaryMeaning: core.idMeaning, core, data }; + }); + }); +} +/** Execute a table query. */ +function executeTable(query, index, origin, settings) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + // Start by collecting all of the files that match the 'from' queries. + let fileset = yield resolveSource(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, + }); + let targetFields = query.header.fields; + let fields = {}; + for (let field of targetFields) + fields[field.name] = field.field; + return executeCoreExtract(fileset.value, rootContext, query.operations, fields).map(core => { + let names = targetFields.map(f => f.name); + let data = core.data.map(p => iden({ + id: p.id, + values: targetFields.map(f => p.data[f.name]), + })); + return { core, names, data, idMeaning: core.idMeaning }; + }); + }); +} +/** Maps a raw core execution result to a task grouping which is much easier to */ +function extractTaskGroupings(id, rows) { + switch (id.type) { + case "path": + return { type: "base", value: rows.map(r => Task.fromObject(r)) }; + case "group": + let key = id.name; + return { + type: "grouped", + groups: rows.map(r => iden({ + key: r[key], + value: extractTaskGroupings(id.on, r.rows), + })), + }; + } +} +/** Execute a task query, returning all matching tasks. */ +function executeTask(query, origin, index, settings) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + let fileset = matchingSourcePaths(query.source, index, origin); + if (!fileset.successful) + return Result.failure(fileset.error); + // Collect tasks from pages which match. + let incomingTasks = []; + for (let path of fileset.value) { + let page = index.pages.get(path); + if (!page) + continue; + let rpage = page; + let pageData = rpage.toObject(index); + let pageTasks = page.tasks.map(t => { + let copy = t.toObject(); + if (!copy.createdDate) + copy.createdDate = stripTime(rpage.ctime); + if (copy.completed && !copy.completedDate) + copy.completedDate = stripTime(rpage.mtime); + // Copy 'file' metadata so you can also access page data from each task. + copy.file = pageData; + return { id: `${rpage.path}#${t.line}`, data: copy }; + }); + for (let task of pageTasks) + incomingTasks.push(task); + } + // Extract information about the origin page to add to the root context. + let rootContext = new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, + }); + return executeCore(incomingTasks, rootContext, query.operations).map(core => { + return { + core, + tasks: extractTaskGroupings(core.idMeaning, core.data.map(r => r.data)), + }; + }); + }); +} +/** Execute a single field inline a file, returning the evaluated result. */ +function executeInline(field, origin, index, settings) { + var _a, _b; + return new Context(defaultLinkHandler(index, origin), settings, { + this: (_b = (_a = index.pages.get(origin)) === null || _a === void 0 ? void 0 : _a.toObject(index)) !== null && _b !== void 0 ? _b : {}, + }).evaluate(field); +} +/** The default link resolver used when creating contexts. */ +function defaultLinkHandler(index, origin) { + return { + resolve: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + if (!realFile) + return null; + let realPage = index.pages.get(realFile.path); + if (!realPage) + return null; + return realPage.toObject(index); + }, + normalize: link => { + var _a; + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + return (_a = realFile === null || realFile === void 0 ? void 0 : realFile.path) !== null && _a !== void 0 ? _a : link; + }, + exists: link => { + let realFile = index.metadataCache.getFirstLinkpathDest(link, origin); + return !!realFile; + }, + }; +} + +/** Wait for a given predicate (querying at the given interval). */ +function waitFor(interval, predicate, cancel) { + return __awaiter(this, void 0, void 0, function* () { + if (cancel()) + return false; + const wait = (ms) => new Promise((re, rj) => setTimeout(re, ms)); + while (!predicate()) { + if (cancel()) + return false; + yield wait(interval); + } + return true; + }); +} + +/** The general, externally accessible plugin API (available at `app.plugins.plugins.dataview.api`). */ +/** Asynchronous API calls related to file / system IO. */ +class DataviewIOApi { + constructor(api) { + this.api = api; + } + /** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */ + csv(path, originFile) { + return __awaiter(this, void 0, void 0, function* () { + if (!(typeof path === "string")) { + throw Error(`dv.csv only handles string paths; was provided type '${typeof path}'.`); + } + let data = yield this.api.index.csv.get(this.api.index.prefix.resolveRelative(path, originFile)); + if (data.successful) + return DataArray.from(data.value, this.api.settings); + else + throw Error(`Could not find CSV for path '${path}' (relative to origin '${originFile !== null && originFile !== void 0 ? originFile : "/"}')`); + }); + } +} +class DataviewApi { + constructor(app, index, settings) { + this.app = app; + this.index = index; + this.settings = settings; + /** Value utility functions for comparisons and type-checking. */ + this.value = Values; + this.evaluationContext = new Context(defaultLinkHandler(index, ""), settings); + this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); + this.io = new DataviewIOApi(this); + } + ///////////////////////////// + // Index + Data Collection // + ///////////////////////////// + /** Return an array of paths (as strings) corresponding to pages which match the query. */ + pagePaths(query, originFile) { + let source; + try { + if (!query || query.trim() === "") + source = Sources.folder(""); + else + source = EXPRESSION.source.tryParse(query); + } + catch (ex) { + throw new Error(`Failed to parse query in 'pagePaths': ${ex}`); + } + return matchingSourcePaths(source, this.index, originFile) + .map(s => DataArray.from(s, this.settings)) + .orElseThrow(); + } + /** Map a page path to the actual data contained within that page. */ + page(path, originFile) { + if (!(typeof path === "string") && !Values.isLink(path)) { + throw Error("dv.page only handles string and link paths; was provided type '" + typeof path + "'"); + } + let rawPath = path instanceof Link ? path.path : path; + let normPath = this.app.metadataCache.getFirstLinkpathDest(rawPath, originFile !== null && originFile !== void 0 ? originFile : ""); + if (!normPath) + return undefined; + let pageObject = this.index.pages.get(normPath.path); + if (!pageObject) + return undefined; + return pageObject.toObject(this.index); + } + /** Return an array of page objects corresponding to pages which match the query. */ + pages(query, originFile) { + return this.pagePaths(query, originFile).flatMap(p => { + let res = this.page(p, originFile); + return res ? [res] : []; + }); + } + ///////////// + // Utility // + ///////////// + /** + * Convert an input element or array into a Dataview data-array. If the input is already a data array, + * it is returned unchanged. + */ + array(raw) { + if (DataArray.isDataArray(raw)) + return raw; + if (Array.isArray(raw)) + return DataArray.wrap(raw, this.settings); + return DataArray.wrap([raw], this.settings); + } + /** Return true if theg given value is a javascript array OR a dataview data array. */ + isArray(raw) { + return DataArray.isDataArray(raw) || Array.isArray(raw); + } + /** Create a dataview file link to the given path. */ + fileLink(path, embed = false, display) { + return Link.file(path, embed, display); + } + /** Attempt to extract a date from a string, link or date. */ + date(pathlike) { + return this.func.date(pathlike); + } + /** + * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if + * a < b, 0 if a = b, and a positive value if a > b. + */ + compare(a, b) { + return Values.compareValue(a, b); + } + /** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */ + equal(a, b) { + return this.compare(a, b) == 0; + } + /////////////// + // Rendering // + /////////////// + /** Render a dataview list of the given values. */ + list(values, container, component, filePath) { + if (!values) + return; + if (DataArray.isDataArray(values)) + values = values.array(); + renderList(container, values, component, filePath, this.settings); + } + /** Render a dataview table with the given headers, and the 2D array of values. */ + table(headers, values, container, component, filePath) { + if (!values) + values = []; + if (DataArray.isDataArray(values)) + values = values.array(); + renderTable(container, headers, values, component, filePath, this.settings); + } + /** Render a dataview task view with the given tasks. */ + taskList(tasks, groupByFile = true, container, component, filePath = "") { + var _a; + if (DataArray.isDataArray(tasks)) + tasks = tasks.array(); + if (groupByFile) { + let byFile = new Map(); + for (let task of tasks) { + if (!byFile.has(task.path)) + byFile.set(task.path, []); + (_a = byFile.get(task.path)) === null || _a === void 0 ? void 0 : _a.push(task); + } + let groupings = Groupings.grouped(Array.from(byFile.entries()).map(([path, tasks]) => { + return { key: Link.file(path), value: Groupings.base(tasks) }; + })); + let subcontainer = container.createDiv(); + (() => __awaiter(this, void 0, void 0, function* () { + yield renderTasks(subcontainer, groupings, filePath, component, this.settings); + component.addChild(new TaskViewLifecycle(this.app.vault, subcontainer)); + }))(); + } + else { + let subcontainer = container.createDiv(); + (() => __awaiter(this, void 0, void 0, function* () { + yield renderTasks(subcontainer, Groupings.base(tasks), filePath, component, this.settings); + component.addChild(new TaskViewLifecycle(this.app.vault, subcontainer)); + }))(); + } + } + /** Render an arbitrary value into a container. */ + renderValue(value, container, component, filePath, inline = false) { + return __awaiter(this, void 0, void 0, function* () { + yield renderValue(value, container, filePath, component, this.settings, inline); + }); + } +} + +/** Fancy wrappers for the JavaScript API, used both by external plugins AND by the dataview javascript view. */ +/** Asynchronous API calls related to file / system IO. */ +class DataviewInlineIOApi { + constructor(api) { + this.api = api; + } + /** Load the contents of a CSV asynchronously, returning a data array of rows (or undefined if it does not exist). */ + csv(path, originFile) { + return __awaiter(this, void 0, void 0, function* () { + return this.api.csv(path, originFile); + }); + } +} +class DataviewInlineApi { + constructor(index, component, container, app, settings, currentFilePath) { + var _a, _b; + /** Value utilities which allow for type-checking and comparisons. */ + this.value = Values; + this.index = index; + this.component = component; + this.container = container; + this.app = app; + this.currentFilePath = currentFilePath; + this.settings = settings; + this.api = new DataviewApi(this.app, this.index, this.settings); + this.io = new DataviewInlineIOApi(this.api.io); + // Set up the evaluation context with variables from the current file. + let fileMeta = (_b = (_a = this.index.pages.get(this.currentFilePath)) === null || _a === void 0 ? void 0 : _a.toObject(this.index)) !== null && _b !== void 0 ? _b : {}; + this.evaluationContext = new Context(defaultLinkHandler(this.index, this.currentFilePath), settings, fileMeta); + this.func = Functions.bindAll(DEFAULT_FUNCTIONS, this.evaluationContext); + } + ///////////////////////////// + // Index + Data Collection // + ///////////////////////////// + /** Return an array of paths (as strings) corresponding to pages which match the query. */ + pagePaths(query) { + return this.api.pagePaths(query, this.currentFilePath); + } + /** Map a page path to the actual data contained within that page. */ + page(path) { + return this.api.page(path, this.currentFilePath); + } + /** Return an array of page objects corresponding to pages which match the query. */ + pages(query) { + return this.api.pages(query, this.currentFilePath); + } + /** Return the information about the current page. */ + current() { + return this.page(this.currentFilePath); + } + ///////////// + // Utility // + ///////////// + /** + * Convert an input element or array into a Dataview data-array. If the input is already a data array, + * it is returned unchanged. + */ + array(raw) { + return this.api.array(raw); + } + /** Return true if theg given value is a javascript array OR a dataview data array. */ + isArray(raw) { + return this.api.isArray(raw); + } + /** Create a dataview file link to the given path. */ + fileLink(path, embed = false, display) { + return Link.file(path, embed, display); + } + /** Attempt to extract a date from a string, link or date. */ + date(pathlike) { + return this.api.date(pathlike); + } + /** + * Compare two arbitrary JavaScript values using Dataview's default comparison rules. Returns a negative value if + * a < b, 0 if a = b, and a positive value if a > b. + */ + compare(a, b) { + return Values.compareValue(a, b); + } + /** Return true if the two given JavaScript values are equal using Dataview's default comparison rules. */ + equal(a, b) { + return this.compare(a, b) == 0; + } + ///////////////////////// + // Rendering Functions // + ///////////////////////// + /** Render an HTML header; the level can be anything from 1 - 6. */ + header(level, text) { + let headerType; + switch (level) { + case 1: + headerType = "h1"; + break; + case 2: + headerType = "h2"; + break; + case 3: + headerType = "h3"; + break; + case 4: + headerType = "h4"; + break; + case 5: + headerType = "h5"; + break; + case 6: + headerType = "h6"; + break; + default: + throw new Error(`Invalid header level ${level}`); + } + let wrapped = Values.wrapValue(text); + if (wrapped === null || wrapped === undefined) { + this.container.createEl(headerType, { text }); + return; + } + let header = this.container.createEl(headerType); + renderValue(wrapped.value, header, this.currentFilePath, this.component, this.settings, false); + } + /** Render an HTML paragraph, containing arbitrary text. */ + paragraph(text) { + let wrapped = Values.wrapValue(text); + if (wrapped === null || wrapped === undefined) { + this.container.createEl("p", { text }); + return; + } + let p = this.container.createEl("p"); + renderValue(wrapped.value, p, this.currentFilePath, this.component, this.settings, true); + } + /** Render an inline span, containing arbitrary text. */ + span(text) { + let wrapped = Values.wrapValue(text); + if (wrapped === null || wrapped === undefined) { + this.container.createEl("span", { text }); + return; + } + let span = this.container.createEl("span"); + renderValue(wrapped.value, span, this.currentFilePath, this.component, this.settings, true); + } + /** + * Render HTML from the output of a template "view" saved as a file in the vault. + * Takes a filename and arbitrary input data. + */ + view(viewName, input) { + return __awaiter(this, void 0, void 0, function* () { + // Look for `${viewName}.js` first, then for `${viewName}/view.js`. + let simpleViewFile = this.app.metadataCache.getFirstLinkpathDest(viewName + ".js", this.currentFilePath); + if (simpleViewFile) { + let contents = yield this.app.vault.read(simpleViewFile); + let func = new Function("dv", "input", contents); + try { + // This may directly render, in which case it will likely return undefined or null. + let result = func(this, input); + if (result) + renderValue(result, this.container, this.currentFilePath, this.component, this.settings, true); + } + catch (ex) { + renderErrorPre(this.container, `Dataview: Failed to execute view '${simpleViewFile.path}'.\n\n${ex}`); + } + return; + } + // No `{viewName}.js`, so look for a folder instead. + let viewPath = `${viewName}/view.js`; + let viewFile = this.app.metadataCache.getFirstLinkpathDest(viewPath, this.currentFilePath); + if (!viewFile) { + renderErrorPre(this.container, `Dataview: custom view not found for '${viewPath}' or '${viewName}.js'.`); + return; + } + let viewContents = yield this.app.vault.read(viewFile); + let viewFunction = new Function("dv", "input", viewContents); + try { + let result = viewFunction(this, input); + if (result) + renderValue(result, this.container, this.currentFilePath, this.component, this.settings, true); + } + catch (ex) { + renderErrorPre(this.container, `Dataview: Error while executing view '${viewFile.path}'.\n\n${ex}`); + } + // Check for optional CSS. + let cssFile = this.app.metadataCache.getFirstLinkpathDest(`${viewName}/view.css`, this.currentFilePath); + if (!cssFile) + return; + let cssContents = yield this.app.vault.read(cssFile); + this.container.createEl("style", { text: cssContents, attr: { scope: " " } }); + }); + } + /** Render a dataview list of the given values. */ + list(values) { + return this.api.list(values, this.container, this.component, this.currentFilePath); + } + /** Render a dataview table with the given headers, and the 2D array of values. */ + table(headers, values) { + return this.api.table(headers, values, this.container, this.component, this.currentFilePath); + } + /** Render a dataview task view with the given tasks. */ + taskList(tasks, groupByFile = true) { + return this.api.taskList(tasks, groupByFile, this.container, this.component, this.currentFilePath); + } +} +/** + * Evaluate a script where 'this' for the script is set to the given context. Allows you to define global variables. + */ +function evalInContext(script, context) { + return function () { + return eval(script); + }.call(context); +} +/** + * Evaluate a script possibly asynchronously, if the script contains `async/await` blocks. + */ +function asyncEvalInContext(script, context) { + return __awaiter(this, void 0, void 0, function* () { + if (script.includes("await")) { + return evalInContext("(async () => { " + script + " })()", context); + } + else { + return Promise.resolve(evalInContext(script, context)); + } + }); +} +/** Make a full API context which a script can be evaluted in. */ +function makeApiContext(index, component, app, settings, container, originFile) { + return new DataviewInlineApi(index, component, container, app, settings, originFile); +} + +class DataviewPlugin extends obsidian.Plugin { + trigger(name, ...data) { + this.app.metadataCache.trigger(name, ...data); + } + onload() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + // Settings initialization; write defaults first time around. + this.settings = Object.assign(DEFAULT_SETTINGS, (_a = (yield this.loadData())) !== null && _a !== void 0 ? _a : {}); + this.addSettingTab(new DataviewSettingsTab(this.app, this)); + console.log("Dataview: Version 0.4.x Loaded"); + if (!this.app.workspace.layoutReady) { + this.app.workspace.onLayoutReady(() => __awaiter(this, void 0, void 0, function* () { return this.prepareIndexes(); })); + } + else { + this.prepareIndexes(); + } + // Dataview query language code blocks. + this.registerHighPriorityCodeblockProcessor("dataview", (source, el, ctx) => __awaiter(this, void 0, void 0, function* () { + let maybeQuery = tryOrPropogate(() => parseQuery(source)); + // In case of parse error, just render the error. + if (!maybeQuery.successful) { + renderErrorPre(el, "Dataview: " + maybeQuery.error); + return; + } + let query = maybeQuery.value; + switch (query.header.type) { + case "task": + ctx.addChild(this.wrapWithEnsureIndex(ctx, el, () => new DataviewTaskRenderer(query, el, this.index, ctx.sourcePath, this.app.vault, this.settings))); + break; + case "list": + ctx.addChild(this.wrapWithEnsureIndex(ctx, el, () => new DataviewListRenderer(query, el, this.index, ctx.sourcePath, this.settings))); + break; + case "table": + ctx.addChild(this.wrapWithEnsureIndex(ctx, el, () => new DataviewTableRenderer(query, el, this.index, ctx.sourcePath, this.settings))); + break; + } + })); + // DataviewJS codeblocks. + this.registerHighPriorityCodeblockProcessor("dataviewjs", (source, el, ctx) => __awaiter(this, void 0, void 0, function* () { + ctx.addChild(this.wrapWithEnsureIndex(ctx, el, () => new DataviewJSRenderer(source, el, this.app, this.index, ctx.sourcePath, this.settings))); + })); + // Dataview inline queries. + this.registerMarkdownPostProcessor((el, ctx) => __awaiter(this, void 0, void 0, function* () { + // Search for blocks inside this element; for each one, look for things of the form `= ...`. + let codeblocks = el.querySelectorAll("code"); + for (let index = 0; index < codeblocks.length; index++) { + let codeblock = codeblocks.item(index); + let text = codeblock.innerText.trim(); + if (text.startsWith(this.settings.inlineJsQueryPrefix)) { + let code = text.substring(this.settings.inlineJsQueryPrefix.length).trim(); + ctx.addChild(this.wrapInlineWithEnsureIndex(ctx, codeblock, () => new DataviewInlineJSRenderer(code, el, codeblock, this.app, this.index, ctx.sourcePath, this.settings))); + } + else if (text.startsWith(this.settings.inlineQueryPrefix)) { + let potentialField = text.substring(this.settings.inlineQueryPrefix.length).trim(); + let field = tryOrPropogate(() => parseField(potentialField)); + if (!field.successful) { + let errorBlock = el.createEl("div"); + renderErrorPre(errorBlock, `Dataview (inline field '${potentialField}'): ${field.error}`); + } + else { + let fieldValue = field.value; + ctx.addChild(this.wrapInlineWithEnsureIndex(ctx, codeblock, () => new DataviewInlineRenderer(fieldValue, text, el, codeblock, this.index, ctx.sourcePath, this.settings))); + } + } + } + })); + }); + } + /** + * Utility function for registering high priority codeblocks which run before any other post processing, such as + * emoji-twitter. + */ + registerHighPriorityCodeblockProcessor(language, processor) { + let postProcess = (el, ctx) => __awaiter(this, void 0, void 0, function* () { + let codeblocks = el.querySelectorAll("pre > code"); + if (!codeblocks) + return; + for (let index = 0; index < codeblocks.length; index++) { + let codeblock = codeblocks.item(index); + let clanguages = Array.from(codeblock.classList) + .filter(c => c.startsWith("language-")) + .map(c => c.substring("language-".length)); + clanguages = clanguages.concat(Array.from(codeblock.classList) + .filter(c => c.startsWith(":")) + .map(c => c.substring(":".length))); + if (!clanguages.contains(language)) + continue; + if (!codeblock.parentElement) + continue; + let code = codeblock.innerText; + // We know the parent element is a pre, replace it. + let replacement = document.createElement("div"); + codeblock.parentElement.replaceWith(replacement); + yield processor(code, replacement, ctx); + } + }); + postProcess.sortOrder = -100; + this.registerMarkdownPostProcessor(postProcess); + } + onunload() { } + /** Prepare all dataview indices. */ + prepareIndexes() { + return __awaiter(this, void 0, void 0, function* () { + let index = yield FullIndex.generate(this); + this.index = index; + this.api = new DataviewApi(this.app, this.index, this.settings); + this.trigger("dataview:api-ready", this.api); + }); + } + /** Update plugin settings. */ + updateSettings(settings) { + return __awaiter(this, void 0, void 0, function* () { + Object.assign(this.settings, settings); + yield this.saveData(this.settings); + }); + } + wrapWithEnsureIndex(ctx, container, success) { + return new EnsurePredicateRenderer(ctx, container, () => this.index != undefined && this.index.pages && this.index.pages.size > 0, success); + } + wrapInlineWithEnsureIndex(ctx, container, success) { + return new EnsureInlinePredicateRenderer(ctx, container, () => this.index != undefined && this.index.pages && this.index.pages.size > 0, success); + } + // User-facing utility functions. + /** Call the given callback when the dataview API has initialized. */ + withApi(callback) { + if (this.api) + callback(this.api); + else + this.app.metadataCache.on("dataview:api-ready", callback); + } +} +/** All of the dataview settings in a single, nice tab. */ +class DataviewSettingsTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + this.containerEl.empty(); + this.containerEl.createEl("h2", { text: "Dataview Codeblock Settings" }); + new obsidian.Setting(this.containerEl) + .setName("Inline Query Prefix") + .setDesc("The prefix to inline queries (to mark them as Dataview queries). Defaults to '='.") + .addText(text => text + .setPlaceholder("=") + .setValue(this.plugin.settings.inlineQueryPrefix) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { return yield this.plugin.updateSettings({ inlineQueryPrefix: value }); }))); + new obsidian.Setting(this.containerEl) + .setName("JavaScript Inline Query Prefix") + .setDesc("The prefix to JavaScript inline queries (to mark them as DataviewJS queries). Defaults to '$='.") + .addText(text => text + .setPlaceholder("$=") + .setValue(this.plugin.settings.inlineJsQueryPrefix) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { return yield this.plugin.updateSettings({ inlineJsQueryPrefix: value }); }))); + new obsidian.Setting(this.containerEl) + .setName("Enable JavaScript Queries") + .setDesc("Enable or disable executing DataviewJS queries.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.enableDataviewJs) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { return yield this.plugin.updateSettings({ enableDataviewJs: value }); }))); + this.containerEl.createEl("h2", { text: "Query Settings" }); + new obsidian.Setting(this.containerEl) + .setName("Render Null As") + .setDesc("What null/non-existent should show up as in tables, by default.") + .addText(text => text + .setPlaceholder("-") + .setValue(this.plugin.settings.renderNullAs) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { return yield this.plugin.updateSettings({ renderNullAs: value }); }))); + new obsidian.Setting(this.containerEl) + .setName("Warn on Empty Result") + .setDesc("If set, queries which return 0 results will render a warning message.") + .addToggle(toggle => toggle + .setValue(this.plugin.settings.warnOnEmptyResult) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { return yield this.plugin.updateSettings({ warnOnEmptyResult: value }); }))); + new obsidian.Setting(this.containerEl) + .setName("Dataview Refresh Interval (milliseconds)") + .setDesc("How frequently dataviews are updated in preview mode when files are changing.") + .addText(text => text + .setPlaceholder("5000") + .setValue("" + this.plugin.settings.refreshInterval) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + let parsed = parseInt(value); + if (isNaN(parsed)) + return; + parsed = parsed < 100 ? 100 : parsed; + yield this.plugin.updateSettings({ refreshInterval: parsed }); + }))); + let dformat = new obsidian.Setting(this.containerEl) + .setName("Date Format") + .setDesc("The default date format (see Luxon date format options)." + + " Currently: " + + DateTime_1.now().toFormat(this.plugin.settings.defaultDateFormat, { locale: currentLocale() })) + .addText(text => text + .setPlaceholder(DEFAULT_QUERY_SETTINGS.defaultDateFormat) + .setValue(this.plugin.settings.defaultDateFormat) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + dformat.setDesc("The default date format (see Luxon date format options)." + + " Currently: " + + DateTime_1.now().toFormat(value, { locale: currentLocale() })); + yield this.plugin.updateSettings({ defaultDateFormat: value }); + }))); + let dtformat = new obsidian.Setting(this.containerEl) + .setName("Datetime Format") + .setDesc("The default date and time format (see Luxon date format options)." + + " Currently: " + + DateTime_1.now().toFormat(this.plugin.settings.defaultDateTimeFormat, { locale: currentLocale() })) + .addText(text => text + .setPlaceholder(DEFAULT_QUERY_SETTINGS.defaultDateTimeFormat) + .setValue(this.plugin.settings.defaultDateTimeFormat) + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + dtformat.setDesc("The default date and time format (see Luxon date format options)." + + " Currently: " + + DateTime_1.now().toFormat(value, { locale: currentLocale() })); + yield this.plugin.updateSettings({ defaultDateTimeFormat: value }); + }))); + } +} +/** A generic renderer which waits for a predicate, only continuing on success. */ +class EnsurePredicateRenderer extends obsidian.MarkdownRenderChild { + constructor(ctx, container, update, success) { + super(container); + this.ctx = ctx; + this.container = container; + this.update = update; + this.success = success; + this.ctx = ctx; + this.container = container; + this.update = update; + this.success = success; + this.dead = false; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + let loadContainer = renderErrorPre(this.container, "Dataview indices are loading"); + // Wait for the given predicate to finally pass... + yield waitFor(EnsurePredicateRenderer.CHECK_INTERVAL_MS, () => { + loadContainer.innerText += "."; + return this.update(); + }, () => this.dead); + // Clear the container before passing it off to the child. + this.container.innerHTML = ""; + // And then pass off rendering to a child context. + this.ctx.addChild(this.success()); + }); + } + onunload() { + this.dead = true; + } +} +EnsurePredicateRenderer.CHECK_INTERVAL_MS = 1000; +/** Inline version of EnsurePredicateRenderer; renders it's loading message differently. */ +class EnsureInlinePredicateRenderer extends obsidian.MarkdownRenderChild { + constructor(ctx, container, update, success) { + super(container); + this.ctx = ctx; + this.container = container; + this.update = update; + this.success = success; + this.ctx = ctx; + this.container = container; + this.update = update; + this.success = success; + this.dead = false; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + this.container.innerHTML = ""; + // Wait for the given predicate to finally pass... + yield waitFor(EnsurePredicateRenderer.CHECK_INTERVAL_MS, () => { + return this.update(); + }, () => this.dead); + // Clear the container before passing it off to the child. + this.container.innerHTML = ""; + // And then pass off rendering to a child context. + this.ctx.addChild(this.success()); + }); + } + onunload() { + this.dead = true; + } +} +EnsureInlinePredicateRenderer.CHECK_INTERVAL_MS = 1000; +/** Renders a list dataview for the given query. */ +class DataviewListRenderer extends obsidian.MarkdownRenderChild { + constructor(query, container, index, origin, settings) { + super(container); + this.query = query; + this.container = container; + this.index = index; + this.origin = origin; + this.settings = settings; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.render(); + onIndexChange(this.index, this.settings.refreshInterval, this, () => __awaiter(this, void 0, void 0, function* () { + this.container.innerHTML = ""; + yield this.render(); + })); + }); + } + render() { + return __awaiter(this, void 0, void 0, function* () { + let maybeResult = yield asyncTryOrPropogate(() => executeList(this.query, this.index, this.origin, this.settings)); + if (!maybeResult.successful) { + renderErrorPre(this.container, "Dataview: " + maybeResult.error); + return; + } + else if (maybeResult.value.data.length == 0 && this.settings.warnOnEmptyResult) { + renderErrorPre(this.container, "Dataview: Query returned 0 results."); + return; + } + let showId = this.query.header.showId; + let showValue = !!this.query.header.format; + let result = maybeResult.value; + let rendered = []; + for (let row of result.data) { + if (showValue && showId) { + let span = document.createElement("span"); + yield renderValue(row.primary, span, this.origin, this, this.settings, false, "list"); + span.appendText(": "); + yield renderValue(row.value || null, span, this.origin, this, this.settings, true, "list"); + rendered.push(span); + } + else if (showId) { + rendered.push(row.primary); + } + else if (showValue) { + rendered.push(row.value || null); + } + } + yield renderList(this.container, rendered, this, this.origin, this.settings); + }); + } +} +class DataviewTableRenderer extends obsidian.MarkdownRenderChild { + constructor(query, container, index, origin, settings) { + super(container); + this.query = query; + this.container = container; + this.index = index; + this.origin = origin; + this.settings = settings; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.render(); + onIndexChange(this.index, this.settings.refreshInterval, this, () => __awaiter(this, void 0, void 0, function* () { + this.container.innerHTML = ""; + yield this.render(); + })); + }); + } + render() { + return __awaiter(this, void 0, void 0, function* () { + let maybeResult = yield asyncTryOrPropogate(() => executeTable(this.query, this.index, this.origin, this.settings)); + if (!maybeResult.successful) { + renderErrorPre(this.container, "Dataview: " + maybeResult.error); + return; + } + let result = maybeResult.value; + if (this.query.header.showId) { + let dataWithNames = []; + for (let entry of result.data) { + dataWithNames.push([entry.id].concat(entry.values)); + } + let name = result.idMeaning.type === "group" ? "Group" : "File"; + yield renderTable(this.container, [name].concat(result.names), dataWithNames, this, this.origin, this.settings); + } + else { + yield renderTable(this.container, result.names, result.data.map(v => v.values), this, this.origin, this.settings); + } + // Render after the empty table, so the table header still renders. + if (result.data.length == 0 && this.settings.warnOnEmptyResult) { + renderErrorPre(this.container, "Dataview: Query returned 0 results."); + } + }); + } +} +class DataviewTaskRenderer extends obsidian.MarkdownRenderChild { + constructor(query, container, index, origin, vault, settings) { + super(container); + this.query = query; + this.container = container; + this.index = index; + this.origin = origin; + this.vault = vault; + this.settings = settings; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.render(); + onIndexChange(this.index, this.settings.refreshInterval, this, () => __awaiter(this, void 0, void 0, function* () { + if (this.taskView) + this.removeChild(this.taskView); + this.container.innerHTML = ""; + yield this.render(); + })); + }); + } + render() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + let result = yield asyncTryOrPropogate(() => executeTask(this.query, this.origin, this.index, this.settings)); + if (!result.successful) { + renderErrorPre(this.container, "Dataview: " + result.error); + } + else { + // If there is no grouping going on, group by the file path by default. + let tasks = result.value.tasks; + if (tasks.type == "base") { + let byFile = new Map(); + for (let task of tasks.value) { + if (!byFile.has(task.path)) + byFile.set(task.path, []); + (_a = byFile.get(task.path)) === null || _a === void 0 ? void 0 : _a.push(task); + } + tasks = Groupings.grouped(Array.from(byFile.entries()).map(([path, tasks]) => { + return { key: Link.file(path), value: Groupings.base(tasks) }; + })); + } + yield renderTasks(this.container, tasks, this.origin, this, this.settings); + // TODO: Merge this into this renderer. + this.addChild((this.taskView = new TaskViewLifecycle(this.vault, this.container))); + } + }); + } +} +/** Renders inline query results. */ +class DataviewInlineRenderer extends obsidian.MarkdownRenderChild { + constructor(field, fieldText, container, target, index, origin, settings) { + super(container); + this.field = field; + this.fieldText = fieldText; + this.container = container; + this.target = target; + this.index = index; + this.origin = origin; + this.settings = settings; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.render(); + onIndexChange(this.index, this.settings.refreshInterval, this, () => __awaiter(this, void 0, void 0, function* () { + var _a; + (_a = this.errorbox) === null || _a === void 0 ? void 0 : _a.remove(); + yield this.render(); + })); + }); + } + render() { + return __awaiter(this, void 0, void 0, function* () { + let result = tryOrPropogate(() => executeInline(this.field, this.origin, this.index, this.settings)); + if (!result.successful) { + this.errorbox = this.container.createEl("div"); + renderErrorPre(this.errorbox, "Dataview (for inline query '" + this.fieldText + "'): " + result.error); + } + else { + let temp = document.createElement("span"); + yield renderValue(result.value, temp, this.origin, this, this.settings, false); + this.target.replaceWith(temp); + } + }); + } +} +class DataviewJSRenderer extends obsidian.MarkdownRenderChild { + constructor(script, container, app, index, origin, settings) { + super(container); + this.script = script; + this.container = container; + this.app = app; + this.index = index; + this.origin = origin; + this.settings = settings; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.render(); + onIndexChange(this.index, this.settings.refreshInterval, this, () => __awaiter(this, void 0, void 0, function* () { + this.container.innerHTML = ""; + yield this.render(); + })); + }); + } + render() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.settings.enableDataviewJs) { + this.containerEl.innerHTML = ""; + renderErrorPre(this.container, "Dataview JS queries are disabled."); + return; + } + // Assume that the code is javascript, and try to eval it. + try { + yield asyncEvalInContext(DataviewJSRenderer.PREAMBLE + this.script, makeApiContext(this.index, this, this.app, this.settings, this.container, this.origin)); + } + catch (e) { + this.containerEl.innerHTML = ""; + renderErrorPre(this.container, "Evaluation Error: " + e.stack); + } + }); + } +} +DataviewJSRenderer.PREAMBLE = "const dataview = this;const dv = this;"; +/** Inline JS renderer accessible using '=$' by default. */ +class DataviewInlineJSRenderer extends obsidian.MarkdownRenderChild { + constructor(script, container, target, app, index, origin, settings) { + super(container); + this.script = script; + this.container = container; + this.target = target; + this.app = app; + this.index = index; + this.origin = origin; + this.settings = settings; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + yield this.render(); + onIndexChange(this.index, this.settings.refreshInterval, this, () => __awaiter(this, void 0, void 0, function* () { + var _a; + (_a = this.errorbox) === null || _a === void 0 ? void 0 : _a.remove(); + yield this.render(); + })); + }); + } + render() { + return __awaiter(this, void 0, void 0, function* () { + if (!this.settings.enableDataviewJs) { + let temp = document.createElement("span"); + temp.innerText = ""; + this.target.replaceWith(temp); + this.target = temp; + return; + } + // Assume that the code is javascript, and try to eval it. + try { + let temp = document.createElement("span"); + let result = yield asyncEvalInContext(DataviewInlineJSRenderer.PREAMBLE + this.script, makeApiContext(this.index, this, this.app, this.settings, temp, this.origin)); + this.target.replaceWith(temp); + this.target = temp; + if (result === undefined) + return; + renderValue(result, temp, this.origin, this, this.settings, false); + } + catch (e) { + this.errorbox = this.container.createEl("div"); + renderErrorPre(this.errorbox, "Dataview (for inline JS query '" + this.script + "'): " + e); + } + }); + } +} +DataviewInlineJSRenderer.PREAMBLE = "const dataview = this;const dv=this;"; +function onIndexChange(index, interval, component, action) { + let lastReload = index.revision; + component.registerInterval(window.setInterval(() => { + // If the index revision has changed recently, then queue a reload. + if (lastReload != index.revision) { + action(); + lastReload = index.revision; + } + }, interval)); +} + +module.exports = DataviewPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIi4uL25vZGVfbW9kdWxlcy9sdXhvbi9idWlsZC9janMtYnJvd3Nlci9sdXhvbi5qcyIsIi4uL3NyYy9zZXR0aW5ncy50cyIsIi4uL3NyYy9hcGkvcmVzdWx0LnRzIiwiLi4vc3JjL3V0aWwvbm9ybWFsaXplLnRzIiwiLi4vc3JjL2RhdGEvdmFsdWUudHMiLCIuLi9zcmMvYXBpL2RhdGEtYXJyYXkudHMiLCIuLi9zcmMvdXRpbC9sb2NhbGUudHMiLCIuLi9zcmMvdWkvcmVuZGVyLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3BhcnNpbW1vbi9idWlsZC9wYXJzaW1tb24udW1kLm1pbi5qcyIsIi4uL3NyYy9leHByZXNzaW9uL2ZpZWxkLnRzIiwiLi4vc3JjL2RhdGEvc291cmNlLnRzIiwiLi4vc3JjL2V4cHJlc3Npb24vcGFyc2UudHMiLCIuLi9zcmMvZGF0YS9maWxlLnRzIiwiLi4vbm9kZV9tb2R1bGVzL3BhcGFwYXJzZS9wYXBhcGFyc2UubWluLmpzIiwiLi4vc3JjL2RhdGEvY3N2LnRzIiwiLi4vc3JjL2RhdGEvaW5kZXgudHMiLCIuLi9zcmMvdWkvdGFza3MudHMiLCIuLi9zcmMvcXVlcnkvcXVlcnkudHMiLCIuLi9zcmMvcXVlcnkvcGFyc2UudHMiLCIuLi9zcmMvZXhwcmVzc2lvbi9iaW5hcnlvcC50cyIsIi4uL3NyYy9leHByZXNzaW9uL2Z1bmN0aW9ucy50cyIsIi4uL3NyYy9leHByZXNzaW9uL2NvbnRleHQudHMiLCIuLi9zcmMvZGF0YS9yZXNvbHZlci50cyIsIi4uL3NyYy9xdWVyeS9lbmdpbmUudHMiLCIuLi9zcmMvdXRpbC9jb25jdXJyZW5jeS50cyIsIi4uL3NyYy9hcGkvcGx1Z2luLWFwaS50cyIsIi4uL3NyYy9hcGkvaW5saW5lLWFwaS50cyIsIi4uL3NyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpudWxsLCJuYW1lcyI6WyJEYXRlVGltZSIsIkR1cmF0aW9uIiwiTWFya2Rvd25SZW5kZXJlciIsInRoaXMiLCJQLnNlcU1hcCIsIlAuc2VxIiwiUC5vcHRXaGl0ZXNwYWNlIiwiUC5jdXN0b20iLCJQLmNyZWF0ZUxhbmd1YWdlIiwiUC5yZWdleHAiLCJQLnN0cmluZyIsIlAuYWx0IiwiUC5ub25lT2YiLCJQLmFueSIsIlAuc3VjY2VlZCIsIlAuZmFpbCIsImdldEFsbFRhZ3MiLCJwYXJzZUZyb250TWF0dGVyVGFncyIsInBhcnNlRnJvbnRNYXR0ZXJBbGlhc2VzIiwiUGFwYS5wYXJzZSIsIkRhdGF2aWV3SW1wb3J0V29ya2VyIiwiVEZpbGUiLCJNYXJrZG93blJlbmRlckNoaWxkIiwiQ29tcG9uZW50IiwiUC53aGl0ZXNwYWNlIiwiUC5zZXBCeSIsIlBsdWdpbiIsIlBsdWdpblNldHRpbmdUYWIiLCJTZXR0aW5nIiwiVGFza3MucmVuZGVyVGFza3MiLCJUYXNrcy5UYXNrVmlld0xpZmVjeWNsZSJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF1REE7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FB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LFNBQVMsQ0FBQztBQUNyQixHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEdBQUc7QUFDSCxDQUFDO0FBQ0QsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDN0MsRUFBRSxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRTtBQUM3QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUM7QUFDbkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNyRCxFQUFFLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0MsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQzFCLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFDRCxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDMUIsRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLENBQUM7QUFDRCxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLEVBQUUsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztBQUM1QyxNQUFN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QUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0M7QUFDQSxRQUFRLEtBQUssR0FBRyxDQUFDO0FBQ2pCO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QztBQUNBO0FBQ0EsUUFBUSxLQUFLLEdBQUc7QUFDaEIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxLQUFLLEdBQUc7QUFDaEIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QztBQUNBO0FBQ0EsUUFBUSxLQUFLLEdBQUc7QUFDaEIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RTtBQUNBLFFBQVEsS0FBSyxHQUFHO0FBQ2hCLFVBQVUsT0FBTyxLQUFLLENBQUMs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Q0FBQztBQUN4QixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUN6SCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLFFBQVEsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0RSxJQUFJLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDcEMsUUFBUSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFRLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUNYLE1BQU0sT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFdBQVcsR0FBRztBQUN2QixFQUFFLEtBQUssSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFF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QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFFBQVEsR0FBRyxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQ2pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzdDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEMsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDcEMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEQsR0FBRztBQUNI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QUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDakQsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVMsT0FBTyxHQUFHO0FBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLFNBQVMsUUFBUSxHQUFHO0FBQ3hDLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxTQUFTLFNBQVMsR0FBRztBQUMxQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDL0MsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxHQUFHO0FBQ3BDLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLFNBQVMsTUFBTSxHQUFHO0FBQ3BDLElBQUksT0FBTyxJQUFJLENBQUMs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QUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTSxXQUFXLEVBQUUsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQywrRkFBK0YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsMkVBQTJFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQywwREFBMEQsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFNLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGdJQUFnSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9B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QUFPOztBQ3BEeEI7QUFDTyxNQUFNLGNBQWMsR0FBRztJQUMxQixJQUFJLEVBQUVGLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdkMsRUFBRSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLEtBQUssRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN6QyxFQUFFLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdEMsSUFBSSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZDLEVBQUUsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyQyxDQUFDLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDcEMsR0FBRyxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLENBQUMsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNuQyxJQUFJLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDdkMsRUFBRSxFQUFFQSxVQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLENBQUMsRUFBRUEsVUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNwQyxNQUFNLEVBQUVBLFVBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENB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LFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxZQUFZLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBQyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFFLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBQyxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUMsa05BQWtOLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsNERBQTRELENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxFQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU0sVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMs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QUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRSxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMzRTs7SUFHTSxRQUFRLENBQUMsRUFBWSxFQUFFLElBQWtCLEVBQUUsS0FBbUIsRUFBRSxHQUFZO1FBQy9FLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUNoRSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUU1RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxRSxJQUFJLE9BQU87WUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs7UUFHOUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckUsSUFBSSxRQUFRO1lBQUUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O1FBR2hFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztRQUdoRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLDJCQUEyQixRQUFRLFVBQVUsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUNsRzs7SUFHTSxPQUFPLElBQUksQ0FBQyxFQUFZLEVBQUUsSUFBc0IsRUFBRSxLQUF1QjtRQUM1RSxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztLQUNuQztDQUNKO0FBRUQ7U0FDZ0IsZUFBZSxDQUFDLGNBQXFDO0lBQ2pFLFFBQ0ksZUFBZSxDQUFDLE1BQU0sRUFBRTs7U0FFbkIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDOztTQUVqRSxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzRSxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7U0FFM0UsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xELFFBQVEsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsRCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEQsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztTQUVsRCxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pGLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakYsWUFBWSxDQUFDLFFBQVEsRUFBRSxH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QUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxpQkFBQSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDekMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxpQkFBQSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0YsS0FBSyxFQUFFLENBQUM7SUFFQSxvQkFBRyxHQUFpQixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDdEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNqRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxpQkFBQSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDekMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxpQkFBQSxHQUFHLENBQUMsR0FBRyxFQUFF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QyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlELEtBQUssRUFBRSxDQUFDO0lBRUEscUJBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7U0FDekMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdEYsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlELEtBQUssRUFBRSxDQUFDO0lBRUEsdUJBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUM7U0FDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZGLElBQUksQ0FB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 diff --git a/.obsidian/plugins/dataview/manifest.json b/.obsidian/plugins/dataview/manifest.json new file mode 100644 index 00000000..291b8301 --- /dev/null +++ b/.obsidian/plugins/dataview/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "dataview", + "name": "Dataview", + "version": "0.4.10", + "minAppVersion": "0.12.0", + "description": "Complex data views for the data-obsessed.", + "author": "Michael Brenan ", + "authorUrl": "https://github.com/blacksmithgu", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/dataview/styles.css b/.obsidian/plugins/dataview/styles.css new file mode 100644 index 00000000..4aed151c --- /dev/null +++ b/.obsidian/plugins/dataview/styles.css @@ -0,0 +1,40 @@ +/* List View Default Styling; rendered internally as a table. */ +.table-view-table { + width: 100%; +} + +.table-view-table > thead > tr, .table-view-table > tbody > tr { + margin-top: 1em; + margin-bottom: 1em; + text-align: left; +} + +.table-view-table > thead > tr > th { + font-weight: 700; + font-size: larger; + border-top: none; + border-left: none; + border-right: none; + border-bottom: solid; + + max-width: 100%; +} + +.table-view-table > tbody > tr > td { + text-align: left; + border: none; + font-weight: 400; + + max-width: 100%; +} + +/** Rendered value styling for any view. */ +.dataview-result-list-root-ul { + padding: 0em !important; + margin: 0em !important; +} + +/** Generic grouping styling. */ +.dataview.result-group { + padding-left: 8px; +} diff --git a/.obsidian/plugins/find-unlinked-files/main.js b/.obsidian/plugins/find-unlinked-files/main.js new file mode 100644 index 00000000..0697af57 --- /dev/null +++ b/.obsidian/plugins/find-unlinked-files/main.js @@ -0,0 +1,637 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +function __spreadArray(to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; +} + +var DeleteFilesModal = /** @class */ (function (_super) { + __extends(DeleteFilesModal, _super); + function DeleteFilesModal(app, filesToDelete) { + var _this = _super.call(this, app) || this; + _this.filesToDelete = filesToDelete; + return _this; + } + DeleteFilesModal.prototype.onOpen = function () { + var _this = this; + var _a = this, contentEl = _a.contentEl, titleEl = _a.titleEl; + titleEl.setText('Move ' + this.filesToDelete.length + ' files to system trash?'); + contentEl + .createEl("button", { text: "Cancel" }) + .addEventListener("click", function () { return _this.close(); }); + contentEl + .setAttr("margin", "auto"); + contentEl + .createEl("button", { + cls: "mod-cta", + text: "Confirm" + }) + .addEventListener("click", function () { return __awaiter(_this, void 0, void 0, function () { + var _i, _a, file; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _i = 0, _a = this.filesToDelete; + _b.label = 1; + case 1: + if (!(_i < _a.length)) return [3 /*break*/, 4]; + file = _a[_i]; + return [4 /*yield*/, this.app.vault.trash(file, true)]; + case 2: + _b.sent(); + _b.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + this.close(); + return [2 /*return*/]; + } + }); + }); }); + }; + DeleteFilesModal.prototype.onClose = function () { + var contentEl = this.contentEl; + contentEl.empty(); + }; + return DeleteFilesModal; +}(obsidian.Modal)); + +var SettingsTab = /** @class */ (function (_super) { + __extends(SettingsTab, _super); + function SettingsTab(app, plugin, defaultSettings) { + var _this = _super.call(this, app, plugin) || this; + _this.defaultSettings = defaultSettings; + _this.plugin = plugin; + return _this; + } + SettingsTab.prototype.formatPath = function (path, addDirectorySlash) { + if (path.length == 0) + return path; + path = obsidian.normalizePath(path); + if (addDirectorySlash) + return path + "/"; + else + return path; + }; + SettingsTab.prototype.display = function () { + var _this = this; + var containerEl = this.containerEl; + containerEl.empty(); + containerEl.createEl("h2", { text: this.plugin.manifest.name }); + containerEl.createEl("h4", { text: "Settings for find unlinked files" }); + new obsidian.Setting(containerEl) + .setName('Output file name') + .setDesc('Set name of output file (without file extension). Make sure no file exists with this name because it will be overwritten! If the name is empty, the default name is set.') + .addText(function (cb) { return cb.onChange(function (value) { + if (value.length == 0) { + _this.plugin.settings.outputFileName = _this.defaultSettings.outputFileName; + } + else { + _this.plugin.settings.outputFileName = value; + } + _this.plugin.saveSettings(); + }).setValue(_this.plugin.settings.outputFileName); }); + new obsidian.Setting(containerEl) + .setName('Disable working links') + .setDesc('Indent lines to disable the link and to clean up the graph view') + .addToggle(function (cb) { return cb.onChange(function (value) { + _this.plugin.settings.disableWorkingLinks = value; + _this.plugin.saveSettings(); + }).setValue(_this.plugin.settings.disableWorkingLinks); }); + new obsidian.Setting(containerEl) + .setName("Ignore or include files in the given directories") + .setDesc("Enable to ignore files in the given directories. Disable to only include files in the given filetypes") + .addToggle(function (cb) { + return cb.setValue(_this.plugin.settings.ignoreDirectories) + .onChange(function (value) { + _this.plugin.settings.ignoreDirectories = value; + _this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName("Directories") + .setDesc("Add each directory path in a new line") + .addTextArea(function (cb) { return cb + .setPlaceholder("Directory/Subdirectory") + .setValue(_this.plugin.settings.directoriesToIgnore.join("\n")) + .onChange(function (value) { + var paths = value.trim().split("\n").map(function (value) { return _this.formatPath(value, true); }); + _this.plugin.settings.directoriesToIgnore = paths; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Files to ignore.") + .setDesc("Add each file path in a new line (with file extension!)") + .addTextArea(function (cb) { return cb + .setPlaceholder("Directory/file.md") + .setValue(_this.plugin.settings.filesToIgnore.join("\n")) + .onChange(function (value) { + var paths = value.trim().split("\n").map(function (value) { return _this.formatPath(value, false); }); + _this.plugin.settings.filesToIgnore = paths; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Links to ignore.") + .setDesc("Ignore files, which contain the given file as link. Add each file path in a new line (with file extension!). Set it to `*` to ignore files with links.") + .addTextArea(function (cb) { return cb + .setPlaceholder("Directory/file.md") + .setValue(_this.plugin.settings.linksToIgnore.join("\n")) + .onChange(function (value) { + var paths = value.trim().split("\n").map(function (value) { return _this.formatPath(value, false); }); + _this.plugin.settings.linksToIgnore = paths; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Ignore or include files with the given filetypes") + .setDesc("Enable to ignore files with the given filetypes. Disable to only include files with the given filetypes") + .addToggle(function (cb) { + return cb.setValue(_this.plugin.settings.ignoreFileTypes) + .onChange(function (value) { + _this.plugin.settings.ignoreFileTypes = value; + _this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName("File types") + .setDesc("Effect depends on toggle above") + .addTextArea(function (cb) { return cb + .setPlaceholder("docx,txt") + .setValue(_this.plugin.settings.fileTypesToIgnore.join(",")) + .onChange(function (value) { + var extensions = value.trim().split(","); + _this.plugin.settings.fileTypesToIgnore = extensions; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Tags to ignore.") + .setDesc("Ignore files, which contain the given tag. Add each tag separated by comma (without `#`)") + .addTextArea(function (cb) { return cb + .setPlaceholder("todo,unfinished") + .setValue(_this.plugin.settings.tagsToIgnore.join(",")) + .onChange(function (value) { + var tags = value.trim().split(","); + _this.plugin.settings.tagsToIgnore = tags; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Filetypes to delete per command. See README.") + .setDesc("Add each filetype separated by comma. ") + .addTextArea(function (cb) { return cb + .setPlaceholder("jpg,png") + .setValue(_this.plugin.settings.fileTypesToDelete.join(",")) + .onChange(function (value) { + var extensions = value.trim().split(","); + _this.plugin.settings.fileTypesToDelete = extensions; + _this.plugin.saveSettings(); + }); }); + /// Settings for find unresolvedLinks + containerEl.createEl("h4", { text: "Settings for find unresolved links" }); + new obsidian.Setting(containerEl) + .setName('Output file name') + .setDesc('Set name of output file (without file extension). Make sure no file exists with this name because it will be overwritten! If the name is empty, the default name is set.') + .addText(function (cb) { return cb.onChange(function (value) { + if (value.length == 0) { + _this.plugin.settings.unresolvedLinksOutputFileName = _this.defaultSettings.unresolvedLinksOutputFileName; + } + else { + _this.plugin.settings.unresolvedLinksOutputFileName = value; + } + _this.plugin.saveSettings(); + }).setValue(_this.plugin.settings.unresolvedLinksOutputFileName); }); + new obsidian.Setting(containerEl) + .setName("Directories to ignore.") + .setDesc("Ignore links in files in the specified directory. Add each directory path in a new line") + .addTextArea(function (cb) { return cb + .setPlaceholder("Directory/Subdirectory") + .setValue(_this.plugin.settings.unresolvedLinksDirectoriesToIgnore.join("\n")) + .onChange(function (value) { + var paths = value.trim().split("\n").map(function (value) { return _this.formatPath(value, true); }); + _this.plugin.settings.unresolvedLinksDirectoriesToIgnore = paths; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Files to ignore.") + .setDesc("Ignore links in the specified file. Add each file path in a new line (with file extension!)") + .addTextArea(function (cb) { return cb + .setPlaceholder("Directory/file.md") + .setValue(_this.plugin.settings.unresolvedLinksFilesToIgnore.join("\n")) + .onChange(function (value) { + var paths = value.trim().split("\n").map(function (value) { return _this.formatPath(value, false); }); + _this.plugin.settings.unresolvedLinksFilesToIgnore = paths; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Links to ignore.") + .setDesc("Ignore files, which contain the given file as link. Add each file path in a new line (with file extension!). Set it to `*` to ignore files with links.") + .addTextArea(function (cb) { return cb + .setPlaceholder("Directory/file.md") + .setValue(_this.plugin.settings.unresolvedLinksLinksToIgnore.join("\n")) + .onChange(function (value) { + var paths = value.trim().split("\n").map(function (value) { return _this.formatPath(value, false); }); + _this.plugin.settings.unresolvedLinksLinksToIgnore = paths; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Filetypes to ignore.") + .setDesc("Ignore links with the specified filetype. Add each filetype separated by comma") + .addTextArea(function (cb) { return cb + .setPlaceholder("docx,txt") + .setValue(_this.plugin.settings.unresolvedLinksFileTypesToIgnore.join(",")) + .onChange(function (value) { + var extensions = value.trim().split(","); + _this.plugin.settings.unresolvedLinksFileTypesToIgnore = extensions; + _this.plugin.saveSettings(); + }); }); + new obsidian.Setting(containerEl) + .setName("Tags to ignore.") + .setDesc("Ignore links in files, which contain the given tag. Add each tag separated by comma (without `#`)") + .addTextArea(function (cb) { return cb + .setPlaceholder("todo,unfinished") + .setValue(_this.plugin.settings.unresolvedLinksTagsToIgnore.join(",")) + .onChange(function (value) { + var tags = value.trim().split(","); + _this.plugin.settings.unresolvedLinksTagsToIgnore = tags; + _this.plugin.saveSettings(); + }); }); + }; + return SettingsTab; +}(obsidian.PluginSettingTab)); + +var Utils = /** @class */ (function () { + /** + * Checks for the given settings. Is used for `Find unlinked files` and `Find unresolved links` + * @param app + * @param filePath + * @param tagsToIgnore + * @param linksToIgnore + * @param directoriesToIgnore + * @param filesToIgnore + * @param ignoreDirectories + */ + function Utils(app, filePath, tagsToIgnore, linksToIgnore, directoriesToIgnore, filesToIgnore, ignoreDirectories) { + if (ignoreDirectories === void 0) { ignoreDirectories = true; } + this.app = app; + this.filePath = filePath; + this.tagsToIgnore = tagsToIgnore; + this.linksToIgnore = linksToIgnore; + this.directoriesToIgnore = directoriesToIgnore; + this.filesToIgnore = filesToIgnore; + this.ignoreDirectories = ignoreDirectories; + this.fileCache = app.metadataCache.getCache(filePath); + } + Utils.prototype.hasTagsToIgnore = function () { + var _this = this; + var tags = obsidian.getAllTags(this.fileCache); + return (tags === null || tags === void 0 ? void 0 : tags.find(function (tag) { return _this.tagsToIgnore.contains(tag.substring(1)); })) !== undefined; + }; + Utils.prototype.hasLinksToIgnore = function () { + var _this = this; + var _a, _b; + if ((((_a = this.fileCache) === null || _a === void 0 ? void 0 : _a.embeds) != null || ((_b = this.fileCache) === null || _b === void 0 ? void 0 : _b.links) != null) && this.linksToIgnore[0] == "*") { + return true; + } + return obsidian.iterateCacheRefs(this.fileCache, function (cb) { + var _a; + var link = (_a = _this.app.metadataCache.getFirstLinkpathDest(cb.link, _this.filePath)) === null || _a === void 0 ? void 0 : _a.path; + return _this.linksToIgnore.contains(link); + }); + }; + Utils.prototype.checkDirectory = function () { + var _this = this; + var contains = this.directoriesToIgnore.find(function (value) { return _this.filePath.startsWith(value) && value.length != 0; }) !== undefined; + if (this.ignoreDirectories) { + return contains; + } + else { + return !contains; + } + }; + Utils.prototype.isFileToIgnore = function () { + return this.filesToIgnore.contains(this.filePath); + }; + Utils.prototype.isValid = function () { + return !this.hasTagsToIgnore() && !this.hasLinksToIgnore() && !this.checkDirectory() && !this.isFileToIgnore(); + }; + /** + * Writes the text to the file and opens the file in a new pane if it is not opened yet + * @param app + * @param outputFileName name of the output file + * @param text data to be written to the file + */ + Utils.writeAndOpenFile = function (app, outputFileName, text) { + return __awaiter(this, void 0, void 0, function () { + var fileIsAlreadyOpened; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, app.vault.adapter.write(outputFileName, text)]; + case 1: + _a.sent(); + fileIsAlreadyOpened = false; + app.workspace.iterateAllLeaves(function (leaf) { + if (leaf.getDisplayText() != "" && outputFileName.startsWith(leaf.getDisplayText())) { + fileIsAlreadyOpened = true; + } + }); + if (!fileIsAlreadyOpened) + app.workspace.openLinkText(outputFileName, "/", true); + return [2 /*return*/]; + } + }); + }); + }; + return Utils; +}()); + +var DEFAULT_SETTINGS = { + outputFileName: "unlinked files output", + disableWorkingLinks: false, + directoriesToIgnore: [], + filesToIgnore: [], + fileTypesToIgnore: [], + linksToIgnore: [], + tagsToIgnore: [], + fileTypesToDelete: [], + ignoreFileTypes: true, + ignoreDirectories: true, + unresolvedLinksOutputFileName: "unresolved links output", + unresolvedLinksDirectoriesToIgnore: [], + unresolvedLinksFilesToIgnore: [], + unresolvedLinksFileTypesToIgnore: [], + unresolvedLinksLinksToIgnore: [], + unresolvedLinksTagsToIgnore: [], +}; +var FindUnlinkedFilesPlugin = /** @class */ (function (_super) { + __extends(FindUnlinkedFilesPlugin, _super); + function FindUnlinkedFilesPlugin() { + return _super !== null && _super.apply(this, arguments) || this; + } + FindUnlinkedFilesPlugin.prototype.onload = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log('loading ' + this.manifest.name + " plugin"); + return [4 /*yield*/, this.loadSettings()]; + case 1: + _a.sent(); + this.addCommand({ + id: 'find-unlinked-files', + name: 'Find unlinked files', + callback: function () { return _this.findUnlinkedFiles(); }, + }); + this.addCommand({ + id: 'find-unresolved-link', + name: 'Find unresolved links', + callback: function () { return _this.findUnresolvedLinks(); }, + }); + this.addCommand({ + id: "delete-unlinked-files", + name: "Delete unlinked files with certain extension. See README", + callback: function () { return _this.deleteUnlinkedFiles(); } + }); + this.addSettingTab(new SettingsTab(this.app, this, DEFAULT_SETTINGS)); + return [2 /*return*/]; + } + }); + }); + }; + FindUnlinkedFilesPlugin.prototype.findUnlinkedFiles = function () { + var _this = this; + var outFileName = this.settings.outputFileName + ".md"; + var outFile; + var files = this.app.vault.getFiles(); + var markdownFiles = this.app.vault.getMarkdownFiles(); + var links = []; + markdownFiles.forEach(function (markFile) { + if (markFile.path == outFileName) { + outFile = markFile; + return; + } + obsidian.iterateCacheRefs(_this.app.metadataCache.getFileCache(markFile), function (cb) { + var txt = _this.app.metadataCache.getFirstLinkpathDest(obsidian.getLinkpath(cb.link), markFile.path); + if (txt != null) + links.push(txt.path); + }); + }); + var notLinkedFiles = files.filter(function (file) { return _this.isValid(file, links); }); + notLinkedFiles.remove(outFile); + var text = ""; + var prefix; + if (this.settings.disableWorkingLinks) + prefix = " "; + else + prefix = ""; + notLinkedFiles.forEach(function (file) { + text += prefix + "- [[" + _this.app.metadataCache.fileToLinktext(file, "/") + "]]\n"; + }); + Utils.writeAndOpenFile(this.app, outFileName, text); + }; + FindUnlinkedFilesPlugin.prototype.deleteUnlinkedFiles = function () { + var _a, _b; + return __awaiter(this, void 0, void 0, function () { + var links, filesToDelete; + var _this = this; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, this.app.vault.adapter.exists(this.settings.outputFileName + ".md")]; + case 1: + if (!(_c.sent())) { + new obsidian.Notice("Can't find file - Please run the `Find unlinked files' command before"); + return [2 /*return*/]; + } + links = (_b = (_a = this.app.metadataCache.getCache(this.settings.outputFileName + ".md")) === null || _a === void 0 ? void 0 : _a.links) !== null && _b !== void 0 ? _b : []; + filesToDelete = []; + links.forEach(function (link) { + var file = _this.app.metadataCache.getFirstLinkpathDest(link.link, "/"); + if (!file) + return; + if (_this.settings.fileTypesToDelete.contains(file.extension)) { + filesToDelete.push(file); + } + }); + if (filesToDelete.length > 0) + new DeleteFilesModal(this.app, filesToDelete).open(); + return [2 /*return*/]; + } + }); + }); + }; + FindUnlinkedFilesPlugin.prototype.findUnresolvedLinks = function () { + var outFileName = this.settings.unresolvedLinksOutputFileName + ".md"; + var links = []; + var unresolvedLinks = this.app.metadataCache.unresolvedLinks; + for (var filePath in unresolvedLinks) { + if (filePath == this.settings.unresolvedLinksOutputFileName + ".md") + continue; + var fileType = filePath.substring(filePath.lastIndexOf(".") + 1); + var utils = new Utils(this.app, filePath, this.settings.unresolvedLinksTagsToIgnore, this.settings.unresolvedLinksLinksToIgnore, this.settings.unresolvedLinksDirectoriesToIgnore, this.settings.unresolvedLinksFilesToIgnore); + if (!utils.isValid()) + continue; + var _loop_1 = function (link) { + var linkFileType = link.substring(link.lastIndexOf(".") + 1); + console.log(linkFileType); + if (this_1.settings.unresolvedLinksFileTypesToIgnore.contains(linkFileType)) + return "continue"; + var formattedFilePath = filePath; + if (fileType == "md") { + formattedFilePath = filePath.substring(0, filePath.lastIndexOf(".md")); + } + var unresolvedLink = { files: [formattedFilePath], link: link }; + if (links.contains(unresolvedLink)) + return "continue"; + var duplication = links.find(function (e) { return e.link == link; }); + if (duplication) { + duplication.files.push(formattedFilePath); + } + else { + links.push(unresolvedLink); + } + }; + var this_1 = this; + for (var link in unresolvedLinks[filePath]) { + _loop_1(link); + } + } + Utils.writeAndOpenFile(this.app, outFileName, __spreadArray([ + "Don't forget that creating the file from here may create the file in the wrong directory!" + ], links.map(function (e) { return "- [[" + e.link + "]] in [[" + e.files.join("]], [[") + "]]"; })).join("\n")); + }; + /** + * Checks if the given file in an unlinked file + * + * @param file file to check + * @param links all links in the vault + */ + FindUnlinkedFilesPlugin.prototype.isValid = function (file, links) { + if (links.contains(file.path)) + return false; + //filetypes to ignore by default + if (file.extension == "css") + return false; + if (this.settings.fileTypesToIgnore[0] !== "") { + var containsFileType = this.settings.fileTypesToIgnore.contains(file.extension); + if (this.settings.ignoreFileTypes) { + if (containsFileType) + return; + } + else { + if (!containsFileType) + return; + } + } + var utils = new Utils(this.app, file.path, this.settings.tagsToIgnore, this.settings.linksToIgnore, this.settings.directoriesToIgnore, this.settings.filesToIgnore, this.settings.ignoreDirectories); + if (!utils.isValid()) + return false; + return true; + }; + FindUnlinkedFilesPlugin.prototype.onunload = function () { + console.log('unloading ' + this.manifest.name + " plugin"); + }; + FindUnlinkedFilesPlugin.prototype.loadSettings = function () { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _a = this; + _c = (_b = Object).assign; + _d = [DEFAULT_SETTINGS]; + return [4 /*yield*/, this.loadData()]; + case 1: + _a.settings = _c.apply(_b, _d.concat([_e.sent()])); + return [2 /*return*/]; + } + }); + }); + }; + FindUnlinkedFilesPlugin.prototype.saveSettings = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.saveData(this.settings)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + return FindUnlinkedFilesPlugin; +}(obsidian.Plugin)); + +module.exports = FindUnlinkedFilesPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9kZWxldGVGaWxlc01vZGFsLnRzIiwic3JjL3NldHRpbmdzVGFiLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20pIHtcclxuICAgIGZvciAodmFyIGkgPSAwLCBpbCA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpIDwgaWw7IGkrKywgaisrKVxyXG4gICAgICAgIHRvW2pdID0gZnJvbVtpXTtcclxuICAgIHJldHVybiB0bztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcbiIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5leHBvcnQgY2xhc3MgRGVsZXRlRmlsZXNNb2RhbCBleHRlbmRzIE1vZGFsIHtcblx0ZmlsZXNUb0RlbGV0ZTogVEZpbGVbXTtcblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIGZpbGVzVG9EZWxldGU6IFRGaWxlW10pIHtcblx0XHRzdXBlcihhcHApO1xuXHRcdHRoaXMuZmlsZXNUb0RlbGV0ZSA9IGZpbGVzVG9EZWxldGU7XG5cdH1cblxuXHRvbk9wZW4oKSB7XG5cdFx0bGV0IHsgY29udGVudEVsLCB0aXRsZUVsIH0gPSB0aGlzO1xuXHRcdHRpdGxlRWwuc2V0VGV4dCgnTW92ZSAnICsgdGhpcy5maWxlc1RvRGVsZXRlLmxlbmd0aCArICcgZmlsZXMgdG8gc3lzdGVtIHRyYXNoPycpO1xuXHRcdGNvbnRlbnRFbFxuXHRcdFx0LmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHsgdGV4dDogXCJDYW5jZWxcIiB9KVxuXHRcdFx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuXHRcdGNvbnRlbnRFbFxuXHRcdFx0LnNldEF0dHIoXCJtYXJnaW5cIiwgXCJhdXRvXCIpO1xuXG5cdFx0Y29udGVudEVsXG5cdFx0XHQuY3JlYXRlRWwoXCJidXR0b25cIixcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNsczogXCJtb2QtY3RhXCIsXG5cdFx0XHRcdFx0dGV4dDogXCJDb25maXJtXCJcblx0XHRcdFx0fSlcblx0XHRcdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZpbGUgb2YgdGhpcy5maWxlc1RvRGVsZXRlKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5hcHAudmF1bHQudHJhc2goZmlsZSwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0fSk7XG5cblx0fVxuXG5cdG9uQ2xvc2UoKSB7XG5cdFx0bGV0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuXHRcdGNvbnRlbnRFbC5lbXB0eSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBBcHAsIG5vcm1hbGl6ZVBhdGgsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgRmluZFVubGlua2VkRmlsZXNQbHVnaW4sIHsgU2V0dGluZ3MgfSBmcm9tICcuL21haW4nO1xuXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgICBwbHVnaW46IEZpbmRVbmxpbmtlZEZpbGVzUGx1Z2luO1xuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEZpbmRVbmxpbmtlZEZpbGVzUGx1Z2luLCBwcml2YXRlIGRlZmF1bHRTZXR0aW5nczogU2V0dGluZ3MpIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG4gICAgZm9ybWF0UGF0aChwYXRoOiBzdHJpbmcsIGFkZERpcmVjdG9yeVNsYXNoOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgcGF0aCA9IG5vcm1hbGl6ZVBhdGgocGF0aCk7XG4gICAgICAgIGlmIChhZGREaXJlY3RvcnlTbGFzaClcbiAgICAgICAgICAgIHJldHVybiBwYXRoICsgXCIvXCI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgICAgIGxldCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogdGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSB9KTtcblxuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbChcImg0XCIsIHsgdGV4dDogXCJTZXR0aW5ncyBmb3IgZmluZCB1bmxpbmtlZCBmaWxlc1wiIH0pO1xuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdPdXRwdXQgZmlsZSBuYW1lJylcbiAgICAgICAgICAgIC5zZXREZXNjKCdTZXQgbmFtZSBvZiBvdXRwdXQgZmlsZSAod2l0aG91dCBmaWxlIGV4dGVuc2lvbikuIE1ha2Ugc3VyZSBubyBmaWxlIGV4aXN0cyB3aXRoIHRoaXMgbmFtZSBiZWNhdXNlIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4hIElmIHRoZSBuYW1lIGlzIGVtcHR5LCB0aGUgZGVmYXVsdCBuYW1lIGlzIHNldC4nKVxuICAgICAgICAgICAgLmFkZFRleHQoY2IgPT4gY2Iub25DaGFuZ2UodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5vdXRwdXRGaWxlTmFtZSA9IHRoaXMuZGVmYXVsdFNldHRpbmdzLm91dHB1dEZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm91dHB1dEZpbGVOYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgfSkuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mub3V0cHV0RmlsZU5hbWUpKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdEaXNhYmxlIHdvcmtpbmcgbGlua3MnKVxuICAgICAgICAgICAgLnNldERlc2MoJ0luZGVudCBsaW5lcyB0byBkaXNhYmxlIHRoZSBsaW5rIGFuZCB0byBjbGVhbiB1cCB0aGUgZ3JhcGggdmlldycpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKGNiID0+IGNiLm9uQ2hhbmdlKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kaXNhYmxlV29ya2luZ0xpbmtzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICApLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRpc2FibGVXb3JraW5nTGlua3MpKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiSWdub3JlIG9yIGluY2x1ZGUgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yaWVzXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIkVuYWJsZSB0byBpZ25vcmUgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yaWVzLiBEaXNhYmxlIHRvIG9ubHkgaW5jbHVkZSBmaWxlcyBpbiB0aGUgZ2l2ZW4gZmlsZXR5cGVzXCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKGNiID0+XG4gICAgICAgICAgICAgICAgY2Iuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaWdub3JlRGlyZWN0b3JpZXMpXG4gICAgICAgICAgICAgICAgICAgIC5vbkNoYW5nZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pZ25vcmVEaXJlY3RvcmllcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGlyZWN0b3JpZXNcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiQWRkIGVhY2ggZGlyZWN0b3J5IHBhdGggaW4gYSBuZXcgbGluZVwiKVxuICAgICAgICAgICAgLmFkZFRleHRBcmVhKGNiID0+IGNiXG4gICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiRGlyZWN0b3J5L1N1YmRpcmVjdG9yeVwiKVxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kaXJlY3Rvcmllc1RvSWdub3JlLmpvaW4oXCJcXG5cIikpXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aHMgPSB2YWx1ZS50cmltKCkuc3BsaXQoXCJcXG5cIikubWFwKHZhbHVlID0+IHRoaXMuZm9ybWF0UGF0aCh2YWx1ZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kaXJlY3Rvcmllc1RvSWdub3JlID0gcGF0aHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkZpbGVzIHRvIGlnbm9yZS5cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiQWRkIGVhY2ggZmlsZSBwYXRoIGluIGEgbmV3IGxpbmUgKHdpdGggZmlsZSBleHRlbnNpb24hKVwiKVxuICAgICAgICAgICAgLmFkZFRleHRBcmVhKGNiID0+IGNiXG4gICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiRGlyZWN0b3J5L2ZpbGUubWRcIilcbiAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZmlsZXNUb0lnbm9yZS5qb2luKFwiXFxuXCIpKVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGhzID0gdmFsdWUudHJpbSgpLnNwbGl0KFwiXFxuXCIpLm1hcCh2YWx1ZSA9PiB0aGlzLmZvcm1hdFBhdGgodmFsdWUsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZpbGVzVG9JZ25vcmUgPSBwYXRocztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiTGlua3MgdG8gaWdub3JlLlwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJJZ25vcmUgZmlsZXMsIHdoaWNoIGNvbnRhaW4gdGhlIGdpdmVuIGZpbGUgYXMgbGluay4gQWRkIGVhY2ggZmlsZSBwYXRoIGluIGEgbmV3IGxpbmUgKHdpdGggZmlsZSBleHRlbnNpb24hKS4gU2V0IGl0IHRvIGAqYCB0byBpZ25vcmUgZmlsZXMgd2l0aCBsaW5rcy5cIilcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYShjYiA9PiBjYlxuICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcIkRpcmVjdG9yeS9maWxlLm1kXCIpXG4gICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmxpbmtzVG9JZ25vcmUuam9pbihcIlxcblwiKSlcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXRocyA9IHZhbHVlLnRyaW0oKS5zcGxpdChcIlxcblwiKS5tYXAodmFsdWUgPT4gdGhpcy5mb3JtYXRQYXRoKHZhbHVlLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5rc1RvSWdub3JlID0gcGF0aHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIklnbm9yZSBvciBpbmNsdWRlIGZpbGVzIHdpdGggdGhlIGdpdmVuIGZpbGV0eXBlc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJFbmFibGUgdG8gaWdub3JlIGZpbGVzIHdpdGggdGhlIGdpdmVuIGZpbGV0eXBlcy4gRGlzYWJsZSB0byBvbmx5IGluY2x1ZGUgZmlsZXMgd2l0aCB0aGUgZ2l2ZW4gZmlsZXR5cGVzXCIpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKGNiID0+XG4gICAgICAgICAgICAgICAgY2Iuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaWdub3JlRmlsZVR5cGVzKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaWdub3JlRmlsZVR5cGVzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRmlsZSB0eXBlc1wiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJFZmZlY3QgZGVwZW5kcyBvbiB0b2dnbGUgYWJvdmVcIilcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYShjYiA9PiBjYlxuICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcImRvY3gsdHh0XCIpXG4gICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmZpbGVUeXBlc1RvSWdub3JlLmpvaW4oXCIsXCIpKVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuc2lvbnMgPSB2YWx1ZS50cmltKCkuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5maWxlVHlwZXNUb0lnbm9yZSA9IGV4dGVuc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlRhZ3MgdG8gaWdub3JlLlwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJJZ25vcmUgZmlsZXMsIHdoaWNoIGNvbnRhaW4gdGhlIGdpdmVuIHRhZy4gQWRkIGVhY2ggdGFnIHNlcGFyYXRlZCBieSBjb21tYSAod2l0aG91dCBgI2ApXCIpXG4gICAgICAgICAgICAuYWRkVGV4dEFyZWEoY2IgPT4gY2JcbiAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJ0b2RvLHVuZmluaXNoZWRcIilcbiAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFnc1RvSWdub3JlLmpvaW4oXCIsXCIpKVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhZ3MgPSB2YWx1ZS50cmltKCkuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy50YWdzVG9JZ25vcmUgPSB0YWdzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJGaWxldHlwZXMgdG8gZGVsZXRlIHBlciBjb21tYW5kLiBTZWUgUkVBRE1FLlwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJBZGQgZWFjaCBmaWxldHlwZSBzZXBhcmF0ZWQgYnkgY29tbWEuIFwiKVxuICAgICAgICAgICAgLmFkZFRleHRBcmVhKGNiID0+IGNiXG4gICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwianBnLHBuZ1wiKVxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5maWxlVHlwZXNUb0RlbGV0ZS5qb2luKFwiLFwiKSlcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBleHRlbnNpb25zID0gdmFsdWUudHJpbSgpLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZmlsZVR5cGVzVG9EZWxldGUgPSBleHRlbnNpb25zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cblxuICAgICAgICAvLy8gU2V0dGluZ3MgZm9yIGZpbmQgdW5yZXNvbHZlZExpbmtzXG4gICAgICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDRcIiwgeyB0ZXh0OiBcIlNldHRpbmdzIGZvciBmaW5kIHVucmVzb2x2ZWQgbGlua3NcIiB9KTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdPdXRwdXQgZmlsZSBuYW1lJylcbiAgICAgICAgICAgIC5zZXREZXNjKCdTZXQgbmFtZSBvZiBvdXRwdXQgZmlsZSAod2l0aG91dCBmaWxlIGV4dGVuc2lvbikuIE1ha2Ugc3VyZSBubyBmaWxlIGV4aXN0cyB3aXRoIHRoaXMgbmFtZSBiZWNhdXNlIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4hIElmIHRoZSBuYW1lIGlzIGVtcHR5LCB0aGUgZGVmYXVsdCBuYW1lIGlzIHNldC4nKVxuICAgICAgICAgICAgLmFkZFRleHQoY2IgPT4gY2Iub25DaGFuZ2UodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NPdXRwdXRGaWxlTmFtZSA9IHRoaXMuZGVmYXVsdFNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc091dHB1dEZpbGVOYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc091dHB1dEZpbGVOYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgfSkuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzT3V0cHV0RmlsZU5hbWUpKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGlyZWN0b3JpZXMgdG8gaWdub3JlLlwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJJZ25vcmUgbGlua3MgaW4gZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuIEFkZCBlYWNoIGRpcmVjdG9yeSBwYXRoIGluIGEgbmV3IGxpbmVcIilcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYShjYiA9PiBjYlxuICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcIkRpcmVjdG9yeS9TdWJkaXJlY3RvcnlcIilcbiAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzRGlyZWN0b3JpZXNUb0lnbm9yZS5qb2luKFwiXFxuXCIpKVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGhzID0gdmFsdWUudHJpbSgpLnNwbGl0KFwiXFxuXCIpLm1hcCh2YWx1ZSA9PiB0aGlzLmZvcm1hdFBhdGgodmFsdWUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzRGlyZWN0b3JpZXNUb0lnbm9yZSA9IHBhdGhzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJGaWxlcyB0byBpZ25vcmUuXCIpXG4gICAgICAgICAgICAuc2V0RGVzYyhcIklnbm9yZSBsaW5rcyBpbiB0aGUgc3BlY2lmaWVkIGZpbGUuIEFkZCBlYWNoIGZpbGUgcGF0aCBpbiBhIG5ldyBsaW5lICh3aXRoIGZpbGUgZXh0ZW5zaW9uISlcIilcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYShjYiA9PiBjYlxuICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcIkRpcmVjdG9yeS9maWxlLm1kXCIpXG4gICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc0ZpbGVzVG9JZ25vcmUuam9pbihcIlxcblwiKSlcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXRocyA9IHZhbHVlLnRyaW0oKS5zcGxpdChcIlxcblwiKS5tYXAodmFsdWUgPT4gdGhpcy5mb3JtYXRQYXRoKHZhbHVlLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NGaWxlc1RvSWdub3JlID0gcGF0aHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkxpbmtzIHRvIGlnbm9yZS5cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiSWdub3JlIGZpbGVzLCB3aGljaCBjb250YWluIHRoZSBnaXZlbiBmaWxlIGFzIGxpbmsuIEFkZCBlYWNoIGZpbGUgcGF0aCBpbiBhIG5ldyBsaW5lICh3aXRoIGZpbGUgZXh0ZW5zaW9uISkuIFNldCBpdCB0byBgKmAgdG8gaWdub3JlIGZpbGVzIHdpdGggbGlua3MuXCIpXG4gICAgICAgICAgICAuYWRkVGV4dEFyZWEoY2IgPT4gY2JcbiAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJEaXJlY3RvcnkvZmlsZS5tZFwiKVxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NMaW5rc1RvSWdub3JlLmpvaW4oXCJcXG5cIikpXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aHMgPSB2YWx1ZS50cmltKCkuc3BsaXQoXCJcXG5cIikubWFwKHZhbHVlID0+IHRoaXMuZm9ybWF0UGF0aCh2YWx1ZSwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzTGlua3NUb0lnbm9yZSA9IHBhdGhzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoXCJGaWxldHlwZXMgdG8gaWdub3JlLlwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJJZ25vcmUgbGlua3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGZpbGV0eXBlLiBBZGQgZWFjaCBmaWxldHlwZSBzZXBhcmF0ZWQgYnkgY29tbWFcIilcbiAgICAgICAgICAgIC5hZGRUZXh0QXJlYShjYiA9PiBjYlxuICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcImRvY3gsdHh0XCIpXG4gICAgICAgICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc0ZpbGVUeXBlc1RvSWdub3JlLmpvaW4oXCIsXCIpKVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVuc2lvbnMgPSB2YWx1ZS50cmltKCkuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NGaWxlVHlwZXNUb0lnbm9yZSA9IGV4dGVuc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIlRhZ3MgdG8gaWdub3JlLlwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJJZ25vcmUgbGlua3MgaW4gZmlsZXMsIHdoaWNoIGNvbnRhaW4gdGhlIGdpdmVuIHRhZy4gQWRkIGVhY2ggdGFnIHNlcGFyYXRlZCBieSBjb21tYSAod2l0aG91dCBgI2ApXCIpXG4gICAgICAgICAgICAuYWRkVGV4dEFyZWEoY2IgPT4gY2JcbiAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJ0b2RvLHVuZmluaXNoZWRcIilcbiAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzVGFnc1RvSWdub3JlLmpvaW4oXCIsXCIpKVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhZ3MgPSB2YWx1ZS50cmltKCkuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NUYWdzVG9JZ25vcmUgPSB0YWdzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBDYWNoZWRNZXRhZGF0YSwgZ2V0QWxsVGFncywgaXRlcmF0ZUNhY2hlUmVmcyB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMge1xuICAgIHByaXZhdGUgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBmb3IgdGhlIGdpdmVuIHNldHRpbmdzLiBJcyB1c2VkIGZvciBgRmluZCB1bmxpbmtlZCBmaWxlc2AgYW5kIGBGaW5kIHVucmVzb2x2ZWQgbGlua3NgXG4gICAgICogQHBhcmFtIGFwcCBcbiAgICAgKiBAcGFyYW0gZmlsZVBhdGggXG4gICAgICogQHBhcmFtIHRhZ3NUb0lnbm9yZSBcbiAgICAgKiBAcGFyYW0gbGlua3NUb0lnbm9yZSBcbiAgICAgKiBAcGFyYW0gZGlyZWN0b3JpZXNUb0lnbm9yZSBcbiAgICAgKiBAcGFyYW0gZmlsZXNUb0lnbm9yZSBcbiAgICAgKiBAcGFyYW0gaWdub3JlRGlyZWN0b3JpZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSBmaWxlUGF0aDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHRhZ3NUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgbGlua3NUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgZGlyZWN0b3JpZXNUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgZmlsZXNUb0lnbm9yZTogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgaWdub3JlRGlyZWN0b3JpZXM6IGJvb2xlYW4gPSB0cnVlLFxuICAgICkge1xuICAgICAgICB0aGlzLmZpbGVDYWNoZSA9IGFwcC5tZXRhZGF0YUNhY2hlLmdldENhY2hlKGZpbGVQYXRoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1RhZ3NUb0lnbm9yZSgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGFncyA9IGdldEFsbFRhZ3ModGhpcy5maWxlQ2FjaGUpO1xuICAgICAgICByZXR1cm4gdGFncz8uZmluZCgodGFnKSA9PiB0aGlzLnRhZ3NUb0lnbm9yZS5jb250YWlucyh0YWcuc3Vic3RyaW5nKDEpKSkgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcHJpdmF0ZSBoYXNMaW5rc1RvSWdub3JlKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoKHRoaXMuZmlsZUNhY2hlPy5lbWJlZHMgIT0gbnVsbCB8fCB0aGlzLmZpbGVDYWNoZT8ubGlua3MgIT0gbnVsbCkgJiYgdGhpcy5saW5rc1RvSWdub3JlWzBdID09IFwiKlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVyYXRlQ2FjaGVSZWZzKHRoaXMuZmlsZUNhY2hlLCBjYiA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChjYi5saW5rLCB0aGlzLmZpbGVQYXRoKT8ucGF0aDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpbmtzVG9JZ25vcmUuY29udGFpbnMobGluayk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tEaXJlY3RvcnkoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gdGhpcy5kaXJlY3Rvcmllc1RvSWdub3JlLmZpbmQoKHZhbHVlKSA9PiB0aGlzLmZpbGVQYXRoLnN0YXJ0c1dpdGgodmFsdWUpICYmIHZhbHVlLmxlbmd0aCAhPSAwKSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVEaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICFjb250YWlucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWxlVG9JZ25vcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGVzVG9JZ25vcmUuY29udGFpbnModGhpcy5maWxlUGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVmFsaWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5oYXNUYWdzVG9JZ25vcmUoKSAmJiAhdGhpcy5oYXNMaW5rc1RvSWdub3JlKCkgJiYgIXRoaXMuY2hlY2tEaXJlY3RvcnkoKSAmJiAhdGhpcy5pc0ZpbGVUb0lnbm9yZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdyaXRlcyB0aGUgdGV4dCB0byB0aGUgZmlsZSBhbmQgb3BlbnMgdGhlIGZpbGUgaW4gYSBuZXcgcGFuZSBpZiBpdCBpcyBub3Qgb3BlbmVkIHlldFxuICAgICAqIEBwYXJhbSBhcHAgXG4gICAgICogQHBhcmFtIG91dHB1dEZpbGVOYW1lIG5hbWUgb2YgdGhlIG91dHB1dCBmaWxlXG4gICAgICogQHBhcmFtIHRleHQgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBmaWxlXG4gICAgICovXG4gICAgc3RhdGljIGFzeW5jIHdyaXRlQW5kT3BlbkZpbGUoYXBwOiBBcHAsIG91dHB1dEZpbGVOYW1lOiBzdHJpbmcsIHRleHQ6IHN0cmluZykge1xuICAgICAgICBhd2FpdCBhcHAudmF1bHQuYWRhcHRlci53cml0ZShvdXRwdXRGaWxlTmFtZSwgdGV4dCk7XG5cbiAgICAgICAgbGV0IGZpbGVJc0FscmVhZHlPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgYXBwLndvcmtzcGFjZS5pdGVyYXRlQWxsTGVhdmVzKGxlYWYgPT4ge1xuICAgICAgICAgICAgaWYgKGxlYWYuZ2V0RGlzcGxheVRleHQoKSAhPSBcIlwiICYmIG91dHB1dEZpbGVOYW1lLnN0YXJ0c1dpdGgobGVhZi5nZXREaXNwbGF5VGV4dCgpKSkge1xuICAgICAgICAgICAgICAgIGZpbGVJc0FscmVhZHlPcGVuZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFmaWxlSXNBbHJlYWR5T3BlbmVkKVxuICAgICAgICAgICAgYXBwLndvcmtzcGFjZS5vcGVuTGlua1RleHQob3V0cHV0RmlsZU5hbWUsIFwiL1wiLCB0cnVlKTtcbiAgICB9XG59IiwiaW1wb3J0IHsgZ2V0TGlua3BhdGgsIGl0ZXJhdGVDYWNoZVJlZnMsIE5vdGljZSwgUGx1Z2luLCBURmlsZSB9IGZyb20gJ29ic2lkaWFuJztcclxuaW1wb3J0IHsgRGVsZXRlRmlsZXNNb2RhbCB9IGZyb20gJy4vZGVsZXRlRmlsZXNNb2RhbCc7XHJcbmltcG9ydCB7IFNldHRpbmdzVGFiIH0gZnJvbSAnLi9zZXR0aW5nc1RhYic7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi91dGlscyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNldHRpbmdzIHtcclxuXHRvdXRwdXRGaWxlTmFtZTogc3RyaW5nO1xyXG5cdGRpc2FibGVXb3JraW5nTGlua3M6IGJvb2xlYW47XHJcblx0ZGlyZWN0b3JpZXNUb0lnbm9yZTogc3RyaW5nW107XHJcblx0ZmlsZXNUb0lnbm9yZTogc3RyaW5nW107XHJcblx0ZmlsZVR5cGVzVG9JZ25vcmU6IHN0cmluZ1tdO1xyXG5cdGxpbmtzVG9JZ25vcmU6IHN0cmluZ1tdO1xyXG5cdHRhZ3NUb0lnbm9yZTogc3RyaW5nW107XHJcblx0ZmlsZVR5cGVzVG9EZWxldGU6IHN0cmluZ1tdO1xyXG5cdGlnbm9yZUZpbGVUeXBlczogYm9vbGVhbjtcclxuXHRpZ25vcmVEaXJlY3RvcmllczogYm9vbGVhbjtcclxuXHR1bnJlc29sdmVkTGlua3NEaXJlY3Rvcmllc1RvSWdub3JlOiBzdHJpbmdbXTtcclxuXHR1bnJlc29sdmVkTGlua3NGaWxlc1RvSWdub3JlOiBzdHJpbmdbXTtcclxuXHR1bnJlc29sdmVkTGlua3NGaWxlVHlwZXNUb0lnbm9yZTogc3RyaW5nW107XHJcblx0dW5yZXNvbHZlZExpbmtzTGlua3NUb0lnbm9yZTogc3RyaW5nW107XHJcblx0dW5yZXNvbHZlZExpbmtzVGFnc1RvSWdub3JlOiBzdHJpbmdbXTtcclxuXHR1bnJlc29sdmVkTGlua3NPdXRwdXRGaWxlTmFtZTogc3RyaW5nO1xyXG59XHJcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IFNldHRpbmdzID0ge1xyXG5cdG91dHB1dEZpbGVOYW1lOiBcInVubGlua2VkIGZpbGVzIG91dHB1dFwiLFxyXG5cdGRpc2FibGVXb3JraW5nTGlua3M6IGZhbHNlLFxyXG5cdGRpcmVjdG9yaWVzVG9JZ25vcmU6IFtdLFxyXG5cdGZpbGVzVG9JZ25vcmU6IFtdLFxyXG5cdGZpbGVUeXBlc1RvSWdub3JlOiBbXSxcclxuXHRsaW5rc1RvSWdub3JlOiBbXSxcclxuXHR0YWdzVG9JZ25vcmU6IFtdLFxyXG5cdGZpbGVUeXBlc1RvRGVsZXRlOiBbXSxcclxuXHRpZ25vcmVGaWxlVHlwZXM6IHRydWUsXHJcblx0aWdub3JlRGlyZWN0b3JpZXM6IHRydWUsXHJcblx0dW5yZXNvbHZlZExpbmtzT3V0cHV0RmlsZU5hbWU6IFwidW5yZXNvbHZlZCBsaW5rcyBvdXRwdXRcIixcclxuXHR1bnJlc29sdmVkTGlua3NEaXJlY3Rvcmllc1RvSWdub3JlOiBbXSxcclxuXHR1bnJlc29sdmVkTGlua3NGaWxlc1RvSWdub3JlOiBbXSxcclxuXHR1bnJlc29sdmVkTGlua3NGaWxlVHlwZXNUb0lnbm9yZTogW10sXHJcblx0dW5yZXNvbHZlZExpbmtzTGlua3NUb0lnbm9yZTogW10sXHJcblx0dW5yZXNvbHZlZExpbmtzVGFnc1RvSWdub3JlOiBbXSxcclxufTtcclxuaW50ZXJmYWNlIFVucmVzb2x2ZWRMaW5rIHtcclxuXHRsaW5rOiBzdHJpbmc7XHJcblx0ZmlsZXM6IHN0cmluZ1tdO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbmRVbmxpbmtlZEZpbGVzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcclxuXHRzZXR0aW5nczogU2V0dGluZ3M7XHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ2xvYWRpbmcgJyArIHRoaXMubWFuaWZlc3QubmFtZSArIFwiIHBsdWdpblwiKTtcclxuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogJ2ZpbmQtdW5saW5rZWQtZmlsZXMnLFxyXG5cdFx0XHRuYW1lOiAnRmluZCB1bmxpbmtlZCBmaWxlcycsXHJcblx0XHRcdGNhbGxiYWNrOiAoKSA9PiB0aGlzLmZpbmRVbmxpbmtlZEZpbGVzKCksXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdGlkOiAnZmluZC11bnJlc29sdmVkLWxpbmsnLFxyXG5cdFx0XHRuYW1lOiAnRmluZCB1bnJlc29sdmVkIGxpbmtzJyxcclxuXHRcdFx0Y2FsbGJhY2s6ICgpID0+IHRoaXMuZmluZFVucmVzb2x2ZWRMaW5rcygpLFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogXCJkZWxldGUtdW5saW5rZWQtZmlsZXNcIixcclxuXHRcdFx0bmFtZTogXCJEZWxldGUgdW5saW5rZWQgZmlsZXMgd2l0aCBjZXJ0YWluIGV4dGVuc2lvbi4gU2VlIFJFQURNRVwiLFxyXG5cdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5kZWxldGVVbmxpbmtlZEZpbGVzKClcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcywgREVGQVVMVF9TRVRUSU5HUykpO1xyXG5cdH1cclxuXHRmaW5kVW5saW5rZWRGaWxlcygpIHtcclxuXHRcdGNvbnN0IG91dEZpbGVOYW1lID0gdGhpcy5zZXR0aW5ncy5vdXRwdXRGaWxlTmFtZSArIFwiLm1kXCI7XHJcblx0XHRsZXQgb3V0RmlsZTogVEZpbGU7XHJcblx0XHRjb25zdCBmaWxlcyA9IHRoaXMuYXBwLnZhdWx0LmdldEZpbGVzKCk7XHJcblx0XHRjb25zdCBtYXJrZG93bkZpbGVzID0gdGhpcy5hcHAudmF1bHQuZ2V0TWFya2Rvd25GaWxlcygpO1xyXG5cdFx0bGV0IGxpbmtzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHRcdG1hcmtkb3duRmlsZXMuZm9yRWFjaCgobWFya0ZpbGU6IFRGaWxlKSA9PiB7XHJcblx0XHRcdGlmIChtYXJrRmlsZS5wYXRoID09IG91dEZpbGVOYW1lKSB7XHJcblx0XHRcdFx0b3V0RmlsZSA9IG1hcmtGaWxlO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fSBpdGVyYXRlQ2FjaGVSZWZzKHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKG1hcmtGaWxlKSwgY2IgPT4ge1xyXG5cdFx0XHRcdGxldCB0eHQgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGdldExpbmtwYXRoKGNiLmxpbmspLCBtYXJrRmlsZS5wYXRoKTtcclxuXHRcdFx0XHRpZiAodHh0ICE9IG51bGwpXHJcblx0XHRcdFx0XHRsaW5rcy5wdXNoKHR4dC5wYXRoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IG5vdExpbmtlZEZpbGVzID0gZmlsZXMuZmlsdGVyKChmaWxlKSA9PiB0aGlzLmlzVmFsaWQoZmlsZSwgbGlua3MpKTtcclxuXHRcdG5vdExpbmtlZEZpbGVzLnJlbW92ZShvdXRGaWxlKTtcclxuXHJcblxyXG5cdFx0bGV0IHRleHQgPSBcIlwiO1xyXG5cdFx0bGV0IHByZWZpeDogc3RyaW5nO1xyXG5cdFx0aWYgKHRoaXMuc2V0dGluZ3MuZGlzYWJsZVdvcmtpbmdMaW5rcylcclxuXHRcdFx0cHJlZml4ID0gXCJcdFwiO1xyXG5cdFx0ZWxzZVxyXG5cdFx0XHRwcmVmaXggPSBcIlwiO1xyXG5cdFx0bm90TGlua2VkRmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xyXG5cdFx0XHR0ZXh0ICs9IHByZWZpeCArIFwiLSBbW1wiICsgdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5maWxlVG9MaW5rdGV4dChmaWxlLCBcIi9cIikgKyBcIl1dXFxuXCI7XHJcblx0XHR9KTtcclxuXHRcdFV0aWxzLndyaXRlQW5kT3BlbkZpbGUodGhpcy5hcHAsIG91dEZpbGVOYW1lLCB0ZXh0KTtcclxuXHJcblx0fVxyXG5cdGFzeW5jIGRlbGV0ZVVubGlua2VkRmlsZXMoKSB7XHJcblx0XHRpZiAoIWF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHRoaXMuc2V0dGluZ3Mub3V0cHV0RmlsZU5hbWUgKyBcIi5tZFwiKSkge1xyXG5cdFx0XHRuZXcgTm90aWNlKFwiQ2FuJ3QgZmluZCBmaWxlIC0gUGxlYXNlIHJ1biB0aGUgYEZpbmQgdW5saW5rZWQgZmlsZXMnIGNvbW1hbmQgYmVmb3JlXCIpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBsaW5rcyA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUodGhpcy5zZXR0aW5ncy5vdXRwdXRGaWxlTmFtZSArIFwiLm1kXCIpPy5saW5rcyA/PyBbXTtcclxuXHRcdGNvbnN0IGZpbGVzVG9EZWxldGU6IFRGaWxlW10gPSBbXTtcclxuXHRcdGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcclxuXHRcdFx0Y29uc3QgZmlsZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QobGluay5saW5rLCBcIi9cIik7XHJcblx0XHRcdGlmICghZmlsZSlcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdGlmICh0aGlzLnNldHRpbmdzLmZpbGVUeXBlc1RvRGVsZXRlLmNvbnRhaW5zKGZpbGUuZXh0ZW5zaW9uKSkge1xyXG5cdFx0XHRcdGZpbGVzVG9EZWxldGUucHVzaChmaWxlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRpZiAoZmlsZXNUb0RlbGV0ZS5sZW5ndGggPiAwKVxyXG5cdFx0XHRuZXcgRGVsZXRlRmlsZXNNb2RhbCh0aGlzLmFwcCwgZmlsZXNUb0RlbGV0ZSkub3BlbigpO1xyXG5cdH1cclxuXHRmaW5kVW5yZXNvbHZlZExpbmtzKCkge1xyXG5cdFx0Y29uc3Qgb3V0RmlsZU5hbWUgPSB0aGlzLnNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc091dHB1dEZpbGVOYW1lICsgXCIubWRcIjtcclxuXHRcdGNvbnN0IGxpbmtzOiBVbnJlc29sdmVkTGlua1tdID0gW107XHJcblx0XHRjb25zdCB1bnJlc29sdmVkTGlua3MgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLnVucmVzb2x2ZWRMaW5rcztcclxuXHJcblx0XHRmb3IgKGxldCBmaWxlUGF0aCBpbiB1bnJlc29sdmVkTGlua3MpIHtcclxuXHRcdFx0aWYgKGZpbGVQYXRoID09IHRoaXMuc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzT3V0cHV0RmlsZU5hbWUgKyBcIi5tZFwiKSBjb250aW51ZTtcclxuXHJcblx0XHRcdGNvbnN0IGZpbGVUeXBlID0gZmlsZVBhdGguc3Vic3RyaW5nKGZpbGVQYXRoLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xyXG5cclxuXHRcdFx0Y29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoXHJcblx0XHRcdFx0dGhpcy5hcHAsXHJcblx0XHRcdFx0ZmlsZVBhdGgsXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NUYWdzVG9JZ25vcmUsXHJcblx0XHRcdFx0dGhpcy5zZXR0aW5ncy51bnJlc29sdmVkTGlua3NMaW5rc1RvSWdub3JlLFxyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MudW5yZXNvbHZlZExpbmtzRGlyZWN0b3JpZXNUb0lnbm9yZSxcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc0ZpbGVzVG9JZ25vcmVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKCF1dGlscy5pc1ZhbGlkKCkpIGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0Zm9yIChjb25zdCBsaW5rIGluIHVucmVzb2x2ZWRMaW5rc1tmaWxlUGF0aF0pIHtcclxuXHRcdFx0XHRjb25zdCBsaW5rRmlsZVR5cGUgPSBsaW5rLnN1YnN0cmluZyhsaW5rLmxhc3RJbmRleE9mKFwiLlwiKSArIDEpO1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGxpbmtGaWxlVHlwZSk7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLnNldHRpbmdzLnVucmVzb2x2ZWRMaW5rc0ZpbGVUeXBlc1RvSWdub3JlLmNvbnRhaW5zKGxpbmtGaWxlVHlwZSkpIGNvbnRpbnVlO1xyXG5cclxuXHRcdFx0XHRsZXQgZm9ybWF0dGVkRmlsZVBhdGggPSBmaWxlUGF0aDtcclxuXHRcdFx0XHRpZiAoZmlsZVR5cGUgPT0gXCJtZFwiKSB7XHJcblx0XHRcdFx0XHRmb3JtYXR0ZWRGaWxlUGF0aCA9IGZpbGVQYXRoLnN1YnN0cmluZygwLCBmaWxlUGF0aC5sYXN0SW5kZXhPZihcIi5tZFwiKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHVucmVzb2x2ZWRMaW5rOiBVbnJlc29sdmVkTGluayA9IHsgZmlsZXM6IFtmb3JtYXR0ZWRGaWxlUGF0aF0sIGxpbms6IGxpbmsgfTtcclxuXHRcdFx0XHRpZiAobGlua3MuY29udGFpbnModW5yZXNvbHZlZExpbmspKVxyXG5cdFx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdFx0Y29uc3QgZHVwbGljYXRpb24gPSBsaW5rcy5maW5kKChlKSA9PiBlLmxpbmsgPT0gbGluayk7XHJcblx0XHRcdFx0aWYgKGR1cGxpY2F0aW9uKSB7XHJcblx0XHRcdFx0XHRkdXBsaWNhdGlvbi5maWxlcy5wdXNoKGZvcm1hdHRlZEZpbGVQYXRoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0bGlua3MucHVzaCh1bnJlc29sdmVkTGluayk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRVdGlscy53cml0ZUFuZE9wZW5GaWxlKFxyXG5cdFx0XHR0aGlzLmFwcCxcclxuXHRcdFx0b3V0RmlsZU5hbWUsXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkRvbid0IGZvcmdldCB0aGF0IGNyZWF0aW5nIHRoZSBmaWxlIGZyb20gaGVyZSBtYXkgY3JlYXRlIHRoZSBmaWxlIGluIHRoZSB3cm9uZyBkaXJlY3RvcnkhXCIsXHJcblx0XHRcdFx0Li4ubGlua3MubWFwKChlKSA9PiBgLSBbWyR7ZS5saW5rfV1dIGluIFtbJHtlLmZpbGVzLmpvaW4oXCJdXSwgW1tcIil9XV1gKVxyXG5cdFx0XHRdLmpvaW4oXCJcXG5cIikpO1xyXG5cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gZmlsZSBpbiBhbiB1bmxpbmtlZCBmaWxlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGZpbGUgZmlsZSB0byBjaGVja1xyXG5cdCAqIEBwYXJhbSBsaW5rcyBhbGwgbGlua3MgaW4gdGhlIHZhdWx0XHJcblx0ICovXHJcblx0aXNWYWxpZChmaWxlOiBURmlsZSwgbGlua3M6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcblx0XHRpZiAobGlua3MuY29udGFpbnMoZmlsZS5wYXRoKSlcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vZmlsZXR5cGVzIHRvIGlnbm9yZSBieSBkZWZhdWx0XHJcblx0XHRpZiAoZmlsZS5leHRlbnNpb24gPT0gXCJjc3NcIilcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdGlmICh0aGlzLnNldHRpbmdzLmZpbGVUeXBlc1RvSWdub3JlWzBdICE9PSBcIlwiKSB7XHJcblx0XHRcdGNvbnN0IGNvbnRhaW5zRmlsZVR5cGUgPSB0aGlzLnNldHRpbmdzLmZpbGVUeXBlc1RvSWdub3JlLmNvbnRhaW5zKGZpbGUuZXh0ZW5zaW9uKTtcclxuXHRcdFx0aWYgKHRoaXMuc2V0dGluZ3MuaWdub3JlRmlsZVR5cGVzKSB7XHJcblx0XHRcdFx0aWYgKGNvbnRhaW5zRmlsZVR5cGUpIHJldHVybjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoIWNvbnRhaW5zRmlsZVR5cGUpIHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKFxyXG5cdFx0XHR0aGlzLmFwcCxcclxuXHRcdFx0ZmlsZS5wYXRoLFxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLnRhZ3NUb0lnbm9yZSxcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5saW5rc1RvSWdub3JlLFxyXG5cdFx0XHR0aGlzLnNldHRpbmdzLmRpcmVjdG9yaWVzVG9JZ25vcmUsXHJcblx0XHRcdHRoaXMuc2V0dGluZ3MuZmlsZXNUb0lnbm9yZSxcclxuXHRcdFx0dGhpcy5zZXR0aW5ncy5pZ25vcmVEaXJlY3Rvcmllc1xyXG5cdFx0KTtcclxuXHRcdGlmICghdXRpbHMuaXNWYWxpZCgpKVxyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHJcblxyXG5cdG9udW5sb2FkKCkge1xyXG5cdFx0Y29uc29sZS5sb2coJ3VubG9hZGluZyAnICsgdGhpcy5tYW5pZmVzdC5uYW1lICsgXCIgcGx1Z2luXCIpO1xyXG5cdH1cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcbn1cclxuIl0sIm5hbWVzIjpbIk1vZGFsIiwibm9ybWFsaXplUGF0aCIsIlNldHRpbmciLCJQbHVnaW5TZXR0aW5nVGFiIiwiZ2V0QWxsVGFncyIsIml0ZXJhdGVDYWNoZVJlZnMiLCJnZXRMaW5rcGF0aCIsIk5vdGljZSIsIlBsdWdpbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxhQUFhLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO0FBQ3pDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksS0FBSyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwRixRQUFRLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMxRyxJQUFJLE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFDRjtBQUNPLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLEtBQUssSUFBSTtBQUM3QyxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLCtCQUErQixDQUFDLENBQUM7QUFDbEcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLElBQUksU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzNDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBdUNEO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN0RyxRQUFRLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUN0SCxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RSxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRDtBQUNPLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDM0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6SyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsWUFBWSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQWdCLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDOUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUztBQUNqRSxnQkFBZ0I7QUFDaEIsb0JBQW9CLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUU7QUFDaEksb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUcsb0JBQW9CLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6RixvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVB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 diff --git a/.obsidian/plugins/find-unlinked-files/manifest.json b/.obsidian/plugins/find-unlinked-files/manifest.json new file mode 100644 index 00000000..570abd08 --- /dev/null +++ b/.obsidian/plugins/find-unlinked-files/manifest.json @@ -0,0 +1,9 @@ +{ + "id": "find-unlinked-files", + "name": "Find unlinked files and unresolved links", + "version": "1.2.1", + "description": "Find files that are not linked anywhere and would otherwise be lost in your vault. In other words: files with no backlinks.", + "author": "Vinzent", + "authorUrl": "https://github.com/Vinzent03", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/.obsidian/plugins/find-unlinked-files/styles.css b/.obsidian/plugins/find-unlinked-files/styles.css new file mode 100644 index 00000000..85373076 --- /dev/null +++ b/.obsidian/plugins/find-unlinked-files/styles.css @@ -0,0 +1 @@ +Not Found \ No newline at end of file diff --git a/.obsidian/plugins/ledger-obsidian/data.json b/.obsidian/plugins/ledger-obsidian/data.json new file mode 100644 index 00000000..e4986584 --- /dev/null +++ b/.obsidian/plugins/ledger-obsidian/data.json @@ -0,0 +1,6 @@ +{ + "currencySymbol": "ÂŁ", + "ledgerFile": "Ledger.md", + "includeFinalLineAmount": false, + "enableLedgerVis": false +} \ No newline at end of file diff --git a/.obsidian/plugins/ledger-obsidian/main.js b/.obsidian/plugins/ledger-obsidian/main.js new file mode 100644 index 00000000..301ffdf4 --- /dev/null +++ b/.obsidian/plugins/ledger-obsidian/main.js @@ -0,0 +1,28049 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn) { + var module = { exports: {} }; + return fn(module, module.exports), module.exports; +} + +var moo = createCommonjsModule(function (module) { +(function(root, factory) { + if ( module.exports) { + module.exports = factory(); + } else { + root.moo = factory(); + } +}(commonjsGlobal, function() { + + var hasOwnProperty = Object.prototype.hasOwnProperty; + var toString = Object.prototype.toString; + var hasSticky = typeof new RegExp().sticky === 'boolean'; + + /***************************************************************************/ + + function isRegExp(o) { return o && toString.call(o) === '[object RegExp]' } + function isObject(o) { return o && typeof o === 'object' && !isRegExp(o) && !Array.isArray(o) } + + function reEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') + } + function reGroups(s) { + var re = new RegExp('|' + s); + return re.exec('').length - 1 + } + function reCapture(s) { + return '(' + s + ')' + } + function reUnion(regexps) { + if (!regexps.length) return '(?!)' + var source = regexps.map(function(s) { + return "(?:" + s + ")" + }).join('|'); + return "(?:" + source + ")" + } + + function regexpOrLiteral(obj) { + if (typeof obj === 'string') { + return '(?:' + reEscape(obj) + ')' + + } else if (isRegExp(obj)) { + // TODO: consider /u support + if (obj.ignoreCase) throw new Error('RegExp /i flag not allowed') + if (obj.global) throw new Error('RegExp /g flag is implied') + if (obj.sticky) throw new Error('RegExp /y flag is implied') + if (obj.multiline) throw new Error('RegExp /m flag is implied') + return obj.source + + } else { + throw new Error('Not a pattern: ' + obj) + } + } + + function objectToRules(object) { + var keys = Object.getOwnPropertyNames(object); + var result = []; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var thing = object[key]; + var rules = [].concat(thing); + if (key === 'include') { + for (var j = 0; j < rules.length; j++) { + result.push({include: rules[j]}); + } + continue + } + var match = []; + rules.forEach(function(rule) { + if (isObject(rule)) { + if (match.length) result.push(ruleOptions(key, match)); + result.push(ruleOptions(key, rule)); + match = []; + } else { + match.push(rule); + } + }); + if (match.length) result.push(ruleOptions(key, match)); + } + return result + } + + function arrayToRules(array) { + var result = []; + for (var i = 0; i < array.length; i++) { + var obj = array[i]; + if (obj.include) { + var include = [].concat(obj.include); + for (var j = 0; j < include.length; j++) { + result.push({include: include[j]}); + } + continue + } + if (!obj.type) { + throw new Error('Rule has no type: ' + JSON.stringify(obj)) + } + result.push(ruleOptions(obj.type, obj)); + } + return result + } + + function ruleOptions(type, obj) { + if (!isObject(obj)) { + obj = { match: obj }; + } + if (obj.include) { + throw new Error('Matching rules cannot also include states') + } + + // nb. error and fallback imply lineBreaks + var options = { + defaultType: type, + lineBreaks: !!obj.error || !!obj.fallback, + pop: false, + next: null, + push: null, + error: false, + fallback: false, + value: null, + type: null, + shouldThrow: false, + }; + + // Avoid Object.assign(), so we support IE9+ + for (var key in obj) { + if (hasOwnProperty.call(obj, key)) { + options[key] = obj[key]; + } + } + + // type transform cannot be a string + if (typeof options.type === 'string' && type !== options.type) { + throw new Error("Type transform cannot be a string (type '" + options.type + "' for token '" + type + "')") + } + + // convert to array + var match = options.match; + options.match = Array.isArray(match) ? match : match ? [match] : []; + options.match.sort(function(a, b) { + return isRegExp(a) && isRegExp(b) ? 0 + : isRegExp(b) ? -1 : isRegExp(a) ? +1 : b.length - a.length + }); + return options + } + + function toRules(spec) { + return Array.isArray(spec) ? arrayToRules(spec) : objectToRules(spec) + } + + var defaultErrorRule = ruleOptions('error', {lineBreaks: true, shouldThrow: true}); + function compileRules(rules, hasStates) { + var errorRule = null; + var fast = Object.create(null); + var fastAllowed = true; + var unicodeFlag = null; + var groups = []; + var parts = []; + + // If there is a fallback rule, then disable fast matching + for (var i = 0; i < rules.length; i++) { + if (rules[i].fallback) { + fastAllowed = false; + } + } + + for (var i = 0; i < rules.length; i++) { + var options = rules[i]; + + if (options.include) { + // all valid inclusions are removed by states() preprocessor + throw new Error('Inheritance is not allowed in stateless lexers') + } + + if (options.error || options.fallback) { + // errorRule can only be set once + if (errorRule) { + if (!options.fallback === !errorRule.fallback) { + throw new Error("Multiple " + (options.fallback ? "fallback" : "error") + " rules not allowed (for token '" + options.defaultType + "')") + } else { + throw new Error("fallback and error are mutually exclusive (for token '" + options.defaultType + "')") + } + } + errorRule = options; + } + + var match = options.match.slice(); + if (fastAllowed) { + while (match.length && typeof match[0] === 'string' && match[0].length === 1) { + var word = match.shift(); + fast[word.charCodeAt(0)] = options; + } + } + + // Warn about inappropriate state-switching options + if (options.pop || options.push || options.next) { + if (!hasStates) { + throw new Error("State-switching options are not allowed in stateless lexers (for token '" + options.defaultType + "')") + } + if (options.fallback) { + throw new Error("State-switching options are not allowed on fallback tokens (for token '" + options.defaultType + "')") + } + } + + // Only rules with a .match are included in the RegExp + if (match.length === 0) { + continue + } + fastAllowed = false; + + groups.push(options); + + // Check unicode flag is used everywhere or nowhere + for (var j = 0; j < match.length; j++) { + var obj = match[j]; + if (!isRegExp(obj)) { + continue + } + + if (unicodeFlag === null) { + unicodeFlag = obj.unicode; + } else if (unicodeFlag !== obj.unicode && options.fallback === false) { + throw new Error('If one rule is /u then all must be') + } + } + + // convert to RegExp + var pat = reUnion(match.map(regexpOrLiteral)); + + // validate + var regexp = new RegExp(pat); + if (regexp.test("")) { + throw new Error("RegExp matches empty string: " + regexp) + } + var groupCount = reGroups(pat); + if (groupCount > 0) { + throw new Error("RegExp has capture groups: " + regexp + "\nUse (?: 
 ) instead") + } + + // try and detect rules matching newlines + if (!options.lineBreaks && regexp.test('\n')) { + throw new Error('Rule should declare lineBreaks: ' + regexp) + } + + // store regex + parts.push(reCapture(pat)); + } + + + // If there's no fallback rule, use the sticky flag so we only look for + // matches at the current index. + // + // If we don't support the sticky flag, then fake it using an irrefutable + // match (i.e. an empty pattern). + var fallbackRule = errorRule && errorRule.fallback; + var flags = hasSticky && !fallbackRule ? 'ym' : 'gm'; + var suffix = hasSticky || fallbackRule ? '' : '|'; + + if (unicodeFlag === true) flags += "u"; + var combined = new RegExp(reUnion(parts) + suffix, flags); + return {regexp: combined, groups: groups, fast: fast, error: errorRule || defaultErrorRule} + } + + function compile(rules) { + var result = compileRules(toRules(rules)); + return new Lexer({start: result}, 'start') + } + + function checkStateGroup(g, name, map) { + var state = g && (g.push || g.next); + if (state && !map[state]) { + throw new Error("Missing state '" + state + "' (in token '" + g.defaultType + "' of state '" + name + "')") + } + if (g && g.pop && +g.pop !== 1) { + throw new Error("pop must be 1 (in token '" + g.defaultType + "' of state '" + name + "')") + } + } + function compileStates(states, start) { + var all = states.$all ? toRules(states.$all) : []; + delete states.$all; + + var keys = Object.getOwnPropertyNames(states); + if (!start) start = keys[0]; + + var ruleMap = Object.create(null); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + ruleMap[key] = toRules(states[key]).concat(all); + } + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var rules = ruleMap[key]; + var included = Object.create(null); + for (var j = 0; j < rules.length; j++) { + var rule = rules[j]; + if (!rule.include) continue + var splice = [j, 1]; + if (rule.include !== key && !included[rule.include]) { + included[rule.include] = true; + var newRules = ruleMap[rule.include]; + if (!newRules) { + throw new Error("Cannot include nonexistent state '" + rule.include + "' (in state '" + key + "')") + } + for (var k = 0; k < newRules.length; k++) { + var newRule = newRules[k]; + if (rules.indexOf(newRule) !== -1) continue + splice.push(newRule); + } + } + rules.splice.apply(rules, splice); + j--; + } + } + + var map = Object.create(null); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + map[key] = compileRules(ruleMap[key], true); + } + + for (var i = 0; i < keys.length; i++) { + var name = keys[i]; + var state = map[name]; + var groups = state.groups; + for (var j = 0; j < groups.length; j++) { + checkStateGroup(groups[j], name, map); + } + var fastKeys = Object.getOwnPropertyNames(state.fast); + for (var j = 0; j < fastKeys.length; j++) { + checkStateGroup(state.fast[fastKeys[j]], name, map); + } + } + + return new Lexer(map, start) + } + + function keywordTransform(map) { + var reverseMap = Object.create(null); + var byLength = Object.create(null); + var types = Object.getOwnPropertyNames(map); + for (var i = 0; i < types.length; i++) { + var tokenType = types[i]; + var item = map[tokenType]; + var keywordList = Array.isArray(item) ? item : [item]; + keywordList.forEach(function(keyword) { + (byLength[keyword.length] = byLength[keyword.length] || []).push(keyword); + if (typeof keyword !== 'string') { + throw new Error("keyword must be string (in keyword '" + tokenType + "')") + } + reverseMap[keyword] = tokenType; + }); + } + + // fast string lookup + // https://jsperf.com/string-lookups + function str(x) { return JSON.stringify(x) } + var source = ''; + source += 'switch (value.length) {\n'; + for (var length in byLength) { + var keywords = byLength[length]; + source += 'case ' + length + ':\n'; + source += 'switch (value) {\n'; + keywords.forEach(function(keyword) { + var tokenType = reverseMap[keyword]; + source += 'case ' + str(keyword) + ': return ' + str(tokenType) + '\n'; + }); + source += '}\n'; + } + source += '}\n'; + return Function('value', source) // type + } + + /***************************************************************************/ + + var Lexer = function(states, state) { + this.startState = state; + this.states = states; + this.buffer = ''; + this.stack = []; + this.reset(); + }; + + Lexer.prototype.reset = function(data, info) { + this.buffer = data || ''; + this.index = 0; + this.line = info ? info.line : 1; + this.col = info ? info.col : 1; + this.queuedToken = info ? info.queuedToken : null; + this.queuedThrow = info ? info.queuedThrow : null; + this.setState(info ? info.state : this.startState); + this.stack = info && info.stack ? info.stack.slice() : []; + return this + }; + + Lexer.prototype.save = function() { + return { + line: this.line, + col: this.col, + state: this.state, + stack: this.stack.slice(), + queuedToken: this.queuedToken, + queuedThrow: this.queuedThrow, + } + }; + + Lexer.prototype.setState = function(state) { + if (!state || this.state === state) return + this.state = state; + var info = this.states[state]; + this.groups = info.groups; + this.error = info.error; + this.re = info.regexp; + this.fast = info.fast; + }; + + Lexer.prototype.popState = function() { + this.setState(this.stack.pop()); + }; + + Lexer.prototype.pushState = function(state) { + this.stack.push(this.state); + this.setState(state); + }; + + var eat = hasSticky ? function(re, buffer) { // assume re is /y + return re.exec(buffer) + } : function(re, buffer) { // assume re is /g + var match = re.exec(buffer); + // will always match, since we used the |(?:) trick + if (match[0].length === 0) { + return null + } + return match + }; + + Lexer.prototype._getGroup = function(match) { + var groupCount = this.groups.length; + for (var i = 0; i < groupCount; i++) { + if (match[i + 1] !== undefined) { + return this.groups[i] + } + } + throw new Error('Cannot find token type for matched text') + }; + + function tokenToString() { + return this.value + } + + Lexer.prototype.next = function() { + var index = this.index; + + // If a fallback token matched, we don't need to re-run the RegExp + if (this.queuedGroup) { + var token = this._token(this.queuedGroup, this.queuedText, index); + this.queuedGroup = null; + this.queuedText = ""; + return token + } + + var buffer = this.buffer; + if (index === buffer.length) { + return // EOF + } + + // Fast matching for single characters + var group = this.fast[buffer.charCodeAt(index)]; + if (group) { + return this._token(group, buffer.charAt(index), index) + } + + // Execute RegExp + var re = this.re; + re.lastIndex = index; + var match = eat(re, buffer); + + // Error tokens match the remaining buffer + var error = this.error; + if (match == null) { + return this._token(error, buffer.slice(index, buffer.length), index) + } + + var group = this._getGroup(match); + var text = match[0]; + + if (error.fallback && match.index !== index) { + this.queuedGroup = group; + this.queuedText = text; + + // Fallback tokens contain the unmatched portion of the buffer + return this._token(error, buffer.slice(index, match.index), index) + } + + return this._token(group, text, index) + }; + + Lexer.prototype._token = function(group, text, offset) { + // count line breaks + var lineBreaks = 0; + if (group.lineBreaks) { + var matchNL = /\n/g; + var nl = 1; + if (text === '\n') { + lineBreaks = 1; + } else { + while (matchNL.exec(text)) { lineBreaks++; nl = matchNL.lastIndex; } + } + } + + var token = { + type: (typeof group.type === 'function' && group.type(text)) || group.defaultType, + value: typeof group.value === 'function' ? group.value(text) : text, + text: text, + toString: tokenToString, + offset: offset, + lineBreaks: lineBreaks, + line: this.line, + col: this.col, + }; + // nb. adding more props to token object will make V8 sad! + + var size = text.length; + this.index += size; + this.line += lineBreaks; + if (lineBreaks !== 0) { + this.col = size - nl + 1; + } else { + this.col += size; + } + + // throw, if no rule with {error: true} + if (group.shouldThrow) { + throw new Error(this.formatError(token, "invalid syntax")) + } + + if (group.pop) this.popState(); + else if (group.push) this.pushState(group.push); + else if (group.next) this.setState(group.next); + + return token + }; + + if (typeof Symbol !== 'undefined' && Symbol.iterator) { + var LexerIterator = function(lexer) { + this.lexer = lexer; + }; + + LexerIterator.prototype.next = function() { + var token = this.lexer.next(); + return {value: token, done: !token} + }; + + LexerIterator.prototype[Symbol.iterator] = function() { + return this + }; + + Lexer.prototype[Symbol.iterator] = function() { + return new LexerIterator(this) + }; + } + + Lexer.prototype.formatError = function(token, message) { + if (token == null) { + // An undefined token indicates EOF + var text = this.buffer.slice(this.index); + var token = { + text: text, + offset: this.index, + lineBreaks: text.indexOf('\n') === -1 ? 0 : 1, + line: this.line, + col: this.col, + }; + } + var start = Math.max(0, token.offset - token.col + 1); + var eol = token.lineBreaks ? token.text.indexOf('\n') : token.text.length; + var firstLine = this.buffer.substring(start, token.offset + eol); + message += " at line " + token.line + " col " + token.col + ":\n\n"; + message += " " + firstLine + "\n"; + message += " " + Array(token.col).join(" ") + "^"; + return message + }; + + Lexer.prototype.clone = function() { + return new Lexer(this.states, this.state) + }; + + Lexer.prototype.has = function(tokenType) { + return true + }; + + + return { + compile: compile, + states: compileStates, + error: Object.freeze({error: true}), + fallback: Object.freeze({fallback: true}), + keywords: keywordTransform, + } + +})); +}); + +// Generated automatically by nearley, version 2.20.1 +// http://github.com/Hardmath123/nearley +// Bypasses TS6133. Allow declared but unused functions. +// @ts-ignore +function id(d) { return d[0]; } +const lexer = moo.states({ + main: { + date: { match: /[0-9]{4}[-\/][0-9]{2}[-\/][0-9]{2}/, next: 'txStart' }, + alias: { match: 'alias', next: 'alias' }, + comment: { match: /[;#|][^\n]+/, value: (s) => s.slice(1).trim() }, + newline: { match: '\n', lineBreaks: true }, + }, + txStart: { + check: { match: /\([0-9]+\)[ \t]+/, value: (s) => s.trim().slice(1, -1) }, + ws: /[ \t]+/, + reconciled: /[!*]/, + payee: { match: /[^!*;#|\n]+/, value: (s) => s.trim() }, + comment: { match: /[;#|][^\n]+/, value: (s) => s.slice(1).trim() }, + newline: { match: '\n', lineBreaks: true, next: 'expenseLine' }, + }, + expenseLine: { + newline: { match: '\n', lineBreaks: true }, + ws: /[ \t]+/, + number: { match: /-?[0-9.,]+/, value: (s) => s.replace(/,/g, '') }, + currency: /[$£₀₏₿â‚č„₩Р]/, + reconciled: /[!*]/, + comment: { match: /[;#|][^\n]+/, value: (s) => s.slice(1).trim() }, + category: { match: /[^$£₀₏₿â‚č„₩Р;#|\n]+/, value: (s) => s.trim() }, + }, + alias: { + category: { match: /[a-zA-Z0-9: ]+/, value: (s) => s.trim() }, + equal: '=', + newline: { match: '\n', lineBreaks: true, next: 'main' }, + }, +}); +const grammar = { + Lexer: lexer, + ParserRules: [ + { "name": "main", "symbols": ["element"] }, + { "name": "main", "symbols": ["main", (lexer.has("newline") ? { type: "newline" } : newline), "element"], "postprocess": ([rest, , l]) => { return [rest, l].flat(1); } }, + { "name": "element", "symbols": ["transaction"], "postprocess": ([t]) => { return { type: 'tx', value: t }; } }, + { "name": "element", "symbols": [(lexer.has("comment") ? { type: "comment" } : comment)], "postprocess": ([c]) => { return { type: 'comment', value: c.value }; } }, + { "name": "element", "symbols": ["alias"], "postprocess": ([a]) => { return { type: 'alias', value: a }; } }, + { "name": "transaction$ebnf$1", "symbols": ["check"], "postprocess": id }, + { "name": "transaction$ebnf$1", "symbols": [], "postprocess": () => null }, + { "name": "transaction$ebnf$2", "symbols": [(lexer.has("comment") ? { type: "comment" } : comment)], "postprocess": id }, + { "name": "transaction$ebnf$2", "symbols": [], "postprocess": () => null }, + { "name": "transaction", "symbols": [(lexer.has("date") ? { type: "date" } : date), (lexer.has("ws") ? { type: "ws" } : ws), "transaction$ebnf$1", (lexer.has("payee") ? { type: "payee" } : payee), "transaction$ebnf$2", (lexer.has("newline") ? { type: "newline" } : newline), "expenselines"], "postprocess": function (d) { + var _a; + return { + date: d[0].value, + check: d[2] || undefined, + payee: d[3].value, + comment: ((_a = d[4]) === null || _a === void 0 ? void 0 : _a.value) || undefined, + expenselines: d[6] + }; + } + }, + { "name": "expenselines", "symbols": ["expenseline"], "postprocess": ([l]) => l }, + { "name": "expenselines", "symbols": ["expenselines", (lexer.has("newline") ? { type: "newline" } : newline), "expenseline"], "postprocess": ([rest, , l]) => { return [rest, l].flat(1); } }, + { "name": "expenseline$ebnf$1", "symbols": [(lexer.has("ws") ? { type: "ws" } : ws)] }, + { "name": "expenseline$ebnf$1", "symbols": ["expenseline$ebnf$1", (lexer.has("ws") ? { type: "ws" } : ws)], "postprocess": (d) => d[0].concat([d[1]]) }, + { "name": "expenseline$ebnf$2", "symbols": ["reconciled"], "postprocess": id }, + { "name": "expenseline$ebnf$2", "symbols": [], "postprocess": () => null }, + { "name": "expenseline$ebnf$3", "symbols": ["amount"], "postprocess": id }, + { "name": "expenseline$ebnf$3", "symbols": [], "postprocess": () => null }, + { "name": "expenseline$ebnf$4", "symbols": [] }, + { "name": "expenseline$ebnf$4", "symbols": ["expenseline$ebnf$4", (lexer.has("ws") ? { type: "ws" } : ws)], "postprocess": (d) => d[0].concat([d[1]]) }, + { "name": "expenseline$ebnf$5", "symbols": [(lexer.has("comment") ? { type: "comment" } : comment)], "postprocess": id }, + { "name": "expenseline$ebnf$5", "symbols": [], "postprocess": () => null }, + { "name": "expenseline", "symbols": ["expenseline$ebnf$1", "expenseline$ebnf$2", (lexer.has("category") ? { type: "category" } : category), "expenseline$ebnf$3", "expenseline$ebnf$4", "expenseline$ebnf$5"], "postprocess": function (d) { + var _a, _b, _c; + return { + reconcile: d[1] || '', + category: d[2].value, + currency: (_a = d[3]) === null || _a === void 0 ? void 0 : _a.currency, + amount: (_b = d[3]) === null || _b === void 0 ? void 0 : _b.amount, + comment: (_c = d[5]) === null || _c === void 0 ? void 0 : _c.value, + }; + } + }, + { "name": "expenseline$ebnf$6", "symbols": [(lexer.has("ws") ? { type: "ws" } : ws)] }, + { "name": "expenseline$ebnf$6", "symbols": ["expenseline$ebnf$6", (lexer.has("ws") ? { type: "ws" } : ws)], "postprocess": (d) => d[0].concat([d[1]]) }, + { "name": "expenseline", "symbols": ["expenseline$ebnf$6", (lexer.has("comment") ? { type: "comment" } : comment)], "postprocess": ([, c]) => { return { comment: c.value }; } }, + { "name": "reconciled$ebnf$1", "symbols": [(lexer.has("ws") ? { type: "ws" } : ws)] }, + { "name": "reconciled$ebnf$1", "symbols": ["reconciled$ebnf$1", (lexer.has("ws") ? { type: "ws" } : ws)], "postprocess": (d) => d[0].concat([d[1]]) }, + { "name": "reconciled", "symbols": [(lexer.has("reconciled") ? { type: "reconciled" } : reconciled), "reconciled$ebnf$1"], "postprocess": ([r,]) => r.value }, + { "name": "alias", "symbols": [{ "literal": "alias" }, (lexer.has("category") ? { type: "category" } : category), (lexer.has("equal") ? { type: "equal" } : equal), (lexer.has("category") ? { type: "category" } : category)], "postprocess": ([, l, , r]) => { return { left: l.value, right: r.value }; } }, + { "name": "amount", "symbols": [(lexer.has("currency") ? { type: "currency" } : currency), (lexer.has("number") ? { type: "number" } : number)], "postprocess": ([c, a]) => { return { currency: c.value, amount: parseFloat(a.value) }; } }, + { "name": "check", "symbols": [(lexer.has("check") ? { type: "check" } : check)], "postprocess": ([c]) => parseFloat(c.value) } + ], + ParserStart: "main", +}; + +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +var lodash = createCommonjsModule(function (module, exports) { +(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined$1; + + /** Used as the semantic version number. */ + var VERSION = '4.17.21'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function', + INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ + var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined$1 : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined$1 : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined$1) { + result = result === undefined$1 ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined$1 : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined$1, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined$1, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined$1, + symIterator = Symbol ? Symbol.iterator : undefined$1, + symToStringTag = Symbol ? Symbol.toStringTag : undefined$1; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined$1, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined$1, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined$1, + symbolToString = symbolProto ? symbolProto.toString : undefined$1; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined$1; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined$1; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined$1 : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined$1; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined$1) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined$1) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined$1 : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined$1; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined$1 && !eq(object[key], value)) || + (value === undefined$1 && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined$1 && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined$1 : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined$1) { + number = number <= upper ? number : upper; + } + if (lower !== undefined$1) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined$1) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined$1 : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined$1 && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined$1, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined$1 + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined$1 || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined$1; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined$1 ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined$1; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined$1 : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined$1 && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined$1 + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined$1 && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined$1; + + if (newValue === undefined$1) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined$1; + + var isCommon = newValue === undefined$1; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined$1; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined$1; + if (newValue === undefined$1) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } + + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined$1; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined$1, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined$1; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined$1 ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined$1, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined$1, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined$1; + + if (newValue === undefined$1) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined$1, + guard = length > 2 ? sources[2] : undefined$1; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined$1; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined$1 : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined$1; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined$1, + args, holders, undefined$1, undefined$1, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined$1; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined$1; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined$1 : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined$1 && other === undefined$1) { + return defaultValue; + } + if (value !== undefined$1) { + result = value; + } + if (other !== undefined$1) { + if (result === undefined$1) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined$1 ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined$1; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined$1) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined$1 ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined$1, + newHoldersRight = isCurry ? undefined$1 : holders, + newPartials = isCurry ? partials : undefined$1, + newPartialsRight = isCurry ? undefined$1 : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined$1, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined$1; + } + ary = ary === undefined$1 ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined$1 ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined$1; + } + var data = isBindKey ? undefined$1 : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined$1 + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined$1, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined$1 || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined$1, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined$1 : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined$1; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined$1) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined$1 + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined$1, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined$1; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined$1; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined$1, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined$1 || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined$1 ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined$1; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined$1, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined$1 ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined$1)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined$1; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined$1; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined$1, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined$1) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined$1 ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined$1; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined$1; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined$1; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined$1, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined$1; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined$1) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined$1; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined$1, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined$1 ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined$1) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined$1; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined$1; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined$1, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined$1; + return (array && array.length) ? baseUniq(array, undefined$1, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined$1, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined$1; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined$1; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined$1, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined$1; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined$1; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined$1 + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined$1); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined$1) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined$1 : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined$1; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined$1 + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined$1; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined$1 ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined$1 : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined$1)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined$1; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined$1 : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined$1; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined$1 : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined$1 : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined$1, undefined$1, undefined$1, undefined$1, undefined$1, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined$1; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined$1 || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined$1; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined$1; + return result; + } + + function cancel() { + if (timerId !== undefined$1) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined$1; + } + + function flush() { + return timerId === undefined$1 ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined$1) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined$1) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined$1, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined$1, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined$1, undefined$1, undefined$1, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined$1 ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + var result = customizer ? customizer(value, other) : undefined$1; + return result === undefined$1 ? baseIsEqual(value, other, undefined$1, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined$1; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined$1; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined$1 || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined$1, customDefaultsMerge); + return apply(mergeWith, undefined$1, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined$1 : baseGet(object, path); + return result === undefined$1 ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined$1; + } + while (++index < length) { + var value = object == null ? undefined$1 : object[toKey(path[index])]; + if (value === undefined$1) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined$1; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined$1) { + upper = lower; + lower = undefined$1; + } + if (upper !== undefined$1) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined$1) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined$1) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined$1; + } + if (floating === undefined$1) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined$1; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined$1; + } + } + if (lower === undefined$1 && upper === undefined$1) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined$1) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined$1 + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined$1)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined$1; + } + limit = limit === undefined$1 ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' {#if metadata} +function create_catch_block(ctx) { + return { + c: noop$2, + m: noop$2, + p: noop$2, + i: noop$2, + o: noop$2, + d: noop$2 + }; +} + +// (8:37) ; export let metadata; {#if metadata} +function create_pending_block(ctx) { + return { + c: noop$2, + m: noop$2, + p: noop$2, + i: noop$2, + o: noop$2, + d: noop$2 + }; +} + +function create_fragment$5(ctx) { + let current_block_type_index; + let if_block; + let if_block_anchor; + let current; + const if_block_creators = [create_if_block$1, create_else_block]; + const if_blocks = []; + + function select_block_type(ctx, dirty) { + if (/*metadata*/ ctx[0]) return 0; + return 1; + } + + current_block_type_index = select_block_type(ctx); + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + + return { + c() { + if_block.c(); + if_block_anchor = empty$1(); + }, + m(target, anchor) { + if_blocks[current_block_type_index].m(target, anchor); + insert$1(target, if_block_anchor, anchor); + current = true; + }, + p(ctx, [dirty]) { + let previous_block_index = current_block_type_index; + current_block_type_index = select_block_type(ctx); + + if (current_block_type_index === previous_block_index) { + if_blocks[current_block_type_index].p(ctx, dirty); + } else { + group_outros$1(); + + transition_out$1(if_blocks[previous_block_index], 1, 1, () => { + if_blocks[previous_block_index] = null; + }); + + check_outros$1(); + if_block = if_blocks[current_block_type_index]; + + if (!if_block) { + if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); + if_block.c(); + } else { + if_block.p(ctx, dirty); + } + + transition_in$1(if_block, 1); + if_block.m(if_block_anchor.parentNode, if_block_anchor); + } + }, + i(local) { + if (current) return; + transition_in$1(if_block); + current = true; + }, + o(local) { + transition_out$1(if_block); + current = false; + }, + d(detaching) { + if_blocks[current_block_type_index].d(detaching); + if (detaching) detach$1(if_block_anchor); + } + }; +} + +function instance$5($$self, $$props, $$invalidate) { + let { $$slots: slots = {}, $$scope } = $$props; + + let { metadata } = $$props; + + $$self.$$set = $$props => { + if ("metadata" in $$props) $$invalidate(0, metadata = $$props.metadata); + if ("$$scope" in $$props) $$invalidate(1, $$scope = $$props.$$scope); + }; + + return [metadata, $$scope, slots]; +} + +class MetadataResolver extends SvelteComponent$1 { + constructor(options) { + super(); + init$2(this, options, instance$5, create_fragment$5, not_equal, { metadata: 0 }); + } +} + +function isMacOS() { + return navigator.appVersion.indexOf("Mac") !== -1; +} +function isMetaPressed(e) { + return isMacOS() ? e.metaKey : e.ctrlKey; +} +function getDaysOfWeek(..._args) { + return window.moment.weekdaysShort(true); +} +function isWeekend(date) { + return date.isoWeekday() === 6 || date.isoWeekday() === 7; +} +function getStartOfWeek(days) { + return days[0].weekday(0); +} +/** + * Generate a 2D array of daily information to power + * the calendar view. + */ +function getMonth(displayedMonth, ..._args) { + const locale = window.moment().locale(); + const month = []; + let week; + const startOfMonth = displayedMonth.clone().locale(locale).date(1); + const startOffset = startOfMonth.weekday(); + let date = startOfMonth.clone().subtract(startOffset, "days"); + for (let _day = 0; _day < 42; _day++) { + if (_day % 7 === 0) { + week = { + days: [], + weekNum: date.week(), + }; + month.push(week); + } + week.days.push(date); + date = date.clone().add(1, "days"); + } + return month; +} + +/* src/components/Day.svelte generated by Svelte v3.35.0 */ + +function add_css$4() { + var style = element$1("style"); + style.id = "svelte-q3wqg9-style"; + style.textContent = ".day.svelte-q3wqg9{background-color:var(--color-background-day);border-radius:4px;color:var(--color-text-day);cursor:pointer;font-size:0.8em;height:100%;padding:4px;position:relative;text-align:center;transition:background-color 0.1s ease-in, color 0.1s ease-in;vertical-align:baseline}.day.svelte-q3wqg9:hover{background-color:var(--interactive-hover)}.day.active.svelte-q3wqg9:hover{background-color:var(--interactive-accent-hover)}.adjacent-month.svelte-q3wqg9{opacity:0.25}.today.svelte-q3wqg9{color:var(--color-text-today)}.day.svelte-q3wqg9:active,.active.svelte-q3wqg9,.active.today.svelte-q3wqg9{color:var(--text-on-accent);background-color:var(--interactive-accent)}.dot-container.svelte-q3wqg9{display:flex;flex-wrap:wrap;justify-content:center;line-height:6px;min-height:6px}"; + append$1(document.head, style); +} + +function get_each_context$2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[11] = list[i]; + return child_ctx; +} + +// (36:8) {#each metadata.dots as dot} +function create_each_block$2(ctx) { + let dot; + let current; + const dot_spread_levels = [/*dot*/ ctx[11]]; + let dot_props = {}; + + for (let i = 0; i < dot_spread_levels.length; i += 1) { + dot_props = assign(dot_props, dot_spread_levels[i]); + } + + dot = new Dot({ props: dot_props }); + + return { + c() { + create_component$1(dot.$$.fragment); + }, + m(target, anchor) { + mount_component$1(dot, target, anchor); + current = true; + }, + p(ctx, dirty) { + const dot_changes = (dirty & /*metadata*/ 128) + ? get_spread_update(dot_spread_levels, [get_spread_object(/*dot*/ ctx[11])]) + : {}; + + dot.$set(dot_changes); + }, + i(local) { + if (current) return; + transition_in$1(dot.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(dot.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component$1(dot, detaching); + } + }; +} + +// (22:2) +function create_default_slot$1(ctx) { + let div1; + let t0_value = /*date*/ ctx[0].format("D") + ""; + let t0; + let t1; + let div0; + let div1_class_value; + let current; + let mounted; + let dispose; + let each_value = /*metadata*/ ctx[7].dots; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i)); + } + + const out = i => transition_out$1(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + + let div1_levels = [ + { + class: div1_class_value = `day ${/*metadata*/ ctx[7].classes.join(" ")}` + }, + /*metadata*/ ctx[7].dataAttributes || {} + ]; + + let div1_data = {}; + + for (let i = 0; i < div1_levels.length; i += 1) { + div1_data = assign(div1_data, div1_levels[i]); + } + + return { + c() { + div1 = element$1("div"); + t0 = text$1(t0_value); + t1 = space$1(); + div0 = element$1("div"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + attr$1(div0, "class", "dot-container svelte-q3wqg9"); + set_attributes(div1, div1_data); + toggle_class(div1, "active", /*selectedId*/ ctx[6] === getDateUID_1(/*date*/ ctx[0], "day")); + toggle_class(div1, "adjacent-month", !/*date*/ ctx[0].isSame(/*displayedMonth*/ ctx[5], "month")); + toggle_class(div1, "today", /*date*/ ctx[0].isSame(/*today*/ ctx[4], "day")); + toggle_class(div1, "svelte-q3wqg9", true); + }, + m(target, anchor) { + insert$1(target, div1, anchor); + append$1(div1, t0); + append$1(div1, t1); + append$1(div1, div0); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(div0, null); + } + + current = true; + + if (!mounted) { + dispose = [ + listen$1(div1, "click", function () { + if (is_function$1(/*onClick*/ ctx[2] && /*click_handler*/ ctx[8])) (/*onClick*/ ctx[2] && /*click_handler*/ ctx[8]).apply(this, arguments); + }), + listen$1(div1, "contextmenu", function () { + if (is_function$1(/*onContextMenu*/ ctx[3] && /*contextmenu_handler*/ ctx[9])) (/*onContextMenu*/ ctx[3] && /*contextmenu_handler*/ ctx[9]).apply(this, arguments); + }), + listen$1(div1, "pointerover", function () { + if (is_function$1(/*onHover*/ ctx[1] && /*pointerover_handler*/ ctx[10])) (/*onHover*/ ctx[1] && /*pointerover_handler*/ ctx[10]).apply(this, arguments); + }) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if ((!current || dirty & /*date*/ 1) && t0_value !== (t0_value = /*date*/ ctx[0].format("D") + "")) set_data$1(t0, t0_value); + + if (dirty & /*metadata*/ 128) { + each_value = /*metadata*/ ctx[7].dots; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$2(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in$1(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block$2(child_ctx); + each_blocks[i].c(); + transition_in$1(each_blocks[i], 1); + each_blocks[i].m(div0, null); + } + } + + group_outros$1(); + + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + + check_outros$1(); + } + + set_attributes(div1, div1_data = get_spread_update(div1_levels, [ + (!current || dirty & /*metadata*/ 128 && div1_class_value !== (div1_class_value = `day ${/*metadata*/ ctx[7].classes.join(" ")}`)) && { class: div1_class_value }, + dirty & /*metadata*/ 128 && (/*metadata*/ ctx[7].dataAttributes || {}) + ])); + + toggle_class(div1, "active", /*selectedId*/ ctx[6] === getDateUID_1(/*date*/ ctx[0], "day")); + toggle_class(div1, "adjacent-month", !/*date*/ ctx[0].isSame(/*displayedMonth*/ ctx[5], "month")); + toggle_class(div1, "today", /*date*/ ctx[0].isSame(/*today*/ ctx[4], "day")); + toggle_class(div1, "svelte-q3wqg9", true); + }, + i(local) { + if (current) return; + + for (let i = 0; i < each_value.length; i += 1) { + transition_in$1(each_blocks[i]); + } + + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out$1(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + if (detaching) detach$1(div1); + destroy_each(each_blocks, detaching); + mounted = false; + run_all$1(dispose); + } + }; +} + +function create_fragment$4(ctx) { + let td; + let metadataresolver; + let current; + + metadataresolver = new MetadataResolver({ + props: { + metadata: /*metadata*/ ctx[7], + $$slots: { + default: [ + create_default_slot$1, + ({ metadata }) => ({ 7: metadata }), + ({ metadata }) => metadata ? 128 : 0 + ] + }, + $$scope: { ctx } + } + }); + + return { + c() { + td = element$1("td"); + create_component$1(metadataresolver.$$.fragment); + }, + m(target, anchor) { + insert$1(target, td, anchor); + mount_component$1(metadataresolver, td, null); + current = true; + }, + p(ctx, [dirty]) { + const metadataresolver_changes = {}; + if (dirty & /*metadata*/ 128) metadataresolver_changes.metadata = /*metadata*/ ctx[7]; + + if (dirty & /*$$scope, metadata, selectedId, date, displayedMonth, today, onClick, onContextMenu, onHover*/ 16639) { + metadataresolver_changes.$$scope = { dirty, ctx }; + } + + metadataresolver.$set(metadataresolver_changes); + }, + i(local) { + if (current) return; + transition_in$1(metadataresolver.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(metadataresolver.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach$1(td); + destroy_component$1(metadataresolver); + } + }; +} + +function instance$4($$self, $$props, $$invalidate) { + + + let { date } = $$props; + let { metadata } = $$props; + let { onHover } = $$props; + let { onClick } = $$props; + let { onContextMenu } = $$props; + let { today } = $$props; + let { displayedMonth = null } = $$props; + let { selectedId = null } = $$props; + const click_handler = e => onClick(date, isMetaPressed(e)); + const contextmenu_handler = e => onContextMenu(date, e); + const pointerover_handler = e => onHover(date, e.target, isMetaPressed(e)); + + $$self.$$set = $$props => { + if ("date" in $$props) $$invalidate(0, date = $$props.date); + if ("metadata" in $$props) $$invalidate(7, metadata = $$props.metadata); + if ("onHover" in $$props) $$invalidate(1, onHover = $$props.onHover); + if ("onClick" in $$props) $$invalidate(2, onClick = $$props.onClick); + if ("onContextMenu" in $$props) $$invalidate(3, onContextMenu = $$props.onContextMenu); + if ("today" in $$props) $$invalidate(4, today = $$props.today); + if ("displayedMonth" in $$props) $$invalidate(5, displayedMonth = $$props.displayedMonth); + if ("selectedId" in $$props) $$invalidate(6, selectedId = $$props.selectedId); + }; + + return [ + date, + onHover, + onClick, + onContextMenu, + today, + displayedMonth, + selectedId, + metadata, + click_handler, + contextmenu_handler, + pointerover_handler + ]; +} + +class Day extends SvelteComponent$1 { + constructor(options) { + super(); + if (!document.getElementById("svelte-q3wqg9-style")) add_css$4(); + + init$2(this, options, instance$4, create_fragment$4, not_equal, { + date: 0, + metadata: 7, + onHover: 1, + onClick: 2, + onContextMenu: 3, + today: 4, + displayedMonth: 5, + selectedId: 6 + }); + } +} + +/* src/components/Arrow.svelte generated by Svelte v3.35.0 */ + +function add_css$3() { + var style = element$1("style"); + style.id = "svelte-156w7na-style"; + style.textContent = ".arrow.svelte-156w7na.svelte-156w7na{align-items:center;cursor:pointer;display:flex;justify-content:center;width:24px}.arrow.is-mobile.svelte-156w7na.svelte-156w7na{width:32px}.right.svelte-156w7na.svelte-156w7na{transform:rotate(180deg)}.arrow.svelte-156w7na svg.svelte-156w7na{color:var(--color-arrow);height:16px;width:16px}"; + append$1(document.head, style); +} + +function create_fragment$3(ctx) { + let div; + let svg; + let path; + let mounted; + let dispose; + + return { + c() { + div = element$1("div"); + svg = svg_element$1("svg"); + path = svg_element$1("path"); + attr$1(path, "fill", "currentColor"); + attr$1(path, "d", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"); + attr$1(svg, "focusable", "false"); + attr$1(svg, "role", "img"); + attr$1(svg, "xmlns", "http://www.w3.org/2000/svg"); + attr$1(svg, "viewBox", "0 0 320 512"); + attr$1(svg, "class", "svelte-156w7na"); + attr$1(div, "class", "arrow svelte-156w7na"); + attr$1(div, "aria-label", /*tooltip*/ ctx[1]); + toggle_class(div, "is-mobile", /*isMobile*/ ctx[3]); + toggle_class(div, "right", /*direction*/ ctx[2] === "right"); + }, + m(target, anchor) { + insert$1(target, div, anchor); + append$1(div, svg); + append$1(svg, path); + + if (!mounted) { + dispose = listen$1(div, "click", function () { + if (is_function$1(/*onClick*/ ctx[0])) /*onClick*/ ctx[0].apply(this, arguments); + }); + + mounted = true; + } + }, + p(new_ctx, [dirty]) { + ctx = new_ctx; + + if (dirty & /*tooltip*/ 2) { + attr$1(div, "aria-label", /*tooltip*/ ctx[1]); + } + + if (dirty & /*direction*/ 4) { + toggle_class(div, "right", /*direction*/ ctx[2] === "right"); + } + }, + i: noop$2, + o: noop$2, + d(detaching) { + if (detaching) detach$1(div); + mounted = false; + dispose(); + } + }; +} + +function instance$3($$self, $$props, $$invalidate) { + let { onClick } = $$props; + let { tooltip } = $$props; + let { direction } = $$props; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let isMobile = window.app.isMobile; + + $$self.$$set = $$props => { + if ("onClick" in $$props) $$invalidate(0, onClick = $$props.onClick); + if ("tooltip" in $$props) $$invalidate(1, tooltip = $$props.tooltip); + if ("direction" in $$props) $$invalidate(2, direction = $$props.direction); + }; + + return [onClick, tooltip, direction, isMobile]; +} + +class Arrow extends SvelteComponent$1 { + constructor(options) { + super(); + if (!document.getElementById("svelte-156w7na-style")) add_css$3(); + init$2(this, options, instance$3, create_fragment$3, safe_not_equal$1, { onClick: 0, tooltip: 1, direction: 2 }); + } +} + +/* src/components/Nav.svelte generated by Svelte v3.35.0 */ + +function add_css$2() { + var style = element$1("style"); + style.id = "svelte-1vwr9dd-style"; + style.textContent = ".nav.svelte-1vwr9dd.svelte-1vwr9dd{align-items:center;display:flex;margin:0.6em 0 1em;padding:0 8px;width:100%}.nav.is-mobile.svelte-1vwr9dd.svelte-1vwr9dd{padding:0}.title.svelte-1vwr9dd.svelte-1vwr9dd{color:var(--color-text-title);font-size:1.5em;margin:0}.is-mobile.svelte-1vwr9dd .title.svelte-1vwr9dd{font-size:1.3em}.month.svelte-1vwr9dd.svelte-1vwr9dd{font-weight:500;text-transform:capitalize}.year.svelte-1vwr9dd.svelte-1vwr9dd{color:var(--interactive-accent)}.right-nav.svelte-1vwr9dd.svelte-1vwr9dd{display:flex;justify-content:center;margin-left:auto}.reset-button.svelte-1vwr9dd.svelte-1vwr9dd{cursor:pointer;border-radius:4px;color:var(--text-muted);font-size:0.7em;font-weight:600;letter-spacing:1px;margin:0 4px;padding:0px 4px;text-transform:uppercase}.is-mobile.svelte-1vwr9dd .reset-button.svelte-1vwr9dd{display:none}"; + append$1(document.head, style); +} + +function create_fragment$2(ctx) { + let div2; + let h3; + let span0; + let t0_value = /*displayedMonth*/ ctx[0].format("MMM") + ""; + let t0; + let t1; + let span1; + let t2_value = /*displayedMonth*/ ctx[0].format("YYYY") + ""; + let t2; + let t3; + let div1; + let arrow0; + let t4; + let div0; + let t6; + let arrow1; + let current; + let mounted; + let dispose; + + arrow0 = new Arrow({ + props: { + direction: "left", + onClick: /*decrementDisplayedMonth*/ ctx[3], + tooltip: "Previous Month" + } + }); + + arrow1 = new Arrow({ + props: { + direction: "right", + onClick: /*incrementDisplayedMonth*/ ctx[2], + tooltip: "Next Month" + } + }); + + return { + c() { + div2 = element$1("div"); + h3 = element$1("h3"); + span0 = element$1("span"); + t0 = text$1(t0_value); + t1 = space$1(); + span1 = element$1("span"); + t2 = text$1(t2_value); + t3 = space$1(); + div1 = element$1("div"); + create_component$1(arrow0.$$.fragment); + t4 = space$1(); + div0 = element$1("div"); + div0.textContent = `${/*todayDisplayStr*/ ctx[4]}`; + t6 = space$1(); + create_component$1(arrow1.$$.fragment); + attr$1(span0, "class", "month svelte-1vwr9dd"); + attr$1(span1, "class", "year svelte-1vwr9dd"); + attr$1(h3, "class", "title svelte-1vwr9dd"); + attr$1(div0, "class", "reset-button svelte-1vwr9dd"); + attr$1(div1, "class", "right-nav svelte-1vwr9dd"); + attr$1(div2, "class", "nav svelte-1vwr9dd"); + toggle_class(div2, "is-mobile", /*isMobile*/ ctx[5]); + }, + m(target, anchor) { + insert$1(target, div2, anchor); + append$1(div2, h3); + append$1(h3, span0); + append$1(span0, t0); + append$1(h3, t1); + append$1(h3, span1); + append$1(span1, t2); + append$1(div2, t3); + append$1(div2, div1); + mount_component$1(arrow0, div1, null); + append$1(div1, t4); + append$1(div1, div0); + append$1(div1, t6); + mount_component$1(arrow1, div1, null); + current = true; + + if (!mounted) { + dispose = [ + listen$1(h3, "click", function () { + if (is_function$1(/*resetDisplayedMonth*/ ctx[1])) /*resetDisplayedMonth*/ ctx[1].apply(this, arguments); + }), + listen$1(div0, "click", function () { + if (is_function$1(/*resetDisplayedMonth*/ ctx[1])) /*resetDisplayedMonth*/ ctx[1].apply(this, arguments); + }) + ]; + + mounted = true; + } + }, + p(new_ctx, [dirty]) { + ctx = new_ctx; + if ((!current || dirty & /*displayedMonth*/ 1) && t0_value !== (t0_value = /*displayedMonth*/ ctx[0].format("MMM") + "")) set_data$1(t0, t0_value); + if ((!current || dirty & /*displayedMonth*/ 1) && t2_value !== (t2_value = /*displayedMonth*/ ctx[0].format("YYYY") + "")) set_data$1(t2, t2_value); + const arrow0_changes = {}; + if (dirty & /*decrementDisplayedMonth*/ 8) arrow0_changes.onClick = /*decrementDisplayedMonth*/ ctx[3]; + arrow0.$set(arrow0_changes); + const arrow1_changes = {}; + if (dirty & /*incrementDisplayedMonth*/ 4) arrow1_changes.onClick = /*incrementDisplayedMonth*/ ctx[2]; + arrow1.$set(arrow1_changes); + }, + i(local) { + if (current) return; + transition_in$1(arrow0.$$.fragment, local); + transition_in$1(arrow1.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(arrow0.$$.fragment, local); + transition_out$1(arrow1.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach$1(div2); + destroy_component$1(arrow0); + destroy_component$1(arrow1); + mounted = false; + run_all$1(dispose); + } + }; +} + +function instance$2($$self, $$props, $$invalidate) { + + let { displayedMonth } = $$props; + let { today } = $$props; + let { resetDisplayedMonth } = $$props; + let { incrementDisplayedMonth } = $$props; + let { decrementDisplayedMonth } = $$props; + + // Get the word 'Today' but localized to the current language + const todayDisplayStr = today.calendar().split(/\d|\s/)[0]; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let isMobile = window.app.isMobile; + + $$self.$$set = $$props => { + if ("displayedMonth" in $$props) $$invalidate(0, displayedMonth = $$props.displayedMonth); + if ("today" in $$props) $$invalidate(6, today = $$props.today); + if ("resetDisplayedMonth" in $$props) $$invalidate(1, resetDisplayedMonth = $$props.resetDisplayedMonth); + if ("incrementDisplayedMonth" in $$props) $$invalidate(2, incrementDisplayedMonth = $$props.incrementDisplayedMonth); + if ("decrementDisplayedMonth" in $$props) $$invalidate(3, decrementDisplayedMonth = $$props.decrementDisplayedMonth); + }; + + return [ + displayedMonth, + resetDisplayedMonth, + incrementDisplayedMonth, + decrementDisplayedMonth, + todayDisplayStr, + isMobile, + today + ]; +} + +class Nav extends SvelteComponent$1 { + constructor(options) { + super(); + if (!document.getElementById("svelte-1vwr9dd-style")) add_css$2(); + + init$2(this, options, instance$2, create_fragment$2, safe_not_equal$1, { + displayedMonth: 0, + today: 6, + resetDisplayedMonth: 1, + incrementDisplayedMonth: 2, + decrementDisplayedMonth: 3 + }); + } +} + +/* src/components/WeekNum.svelte generated by Svelte v3.35.0 */ + +function add_css$1() { + var style = element$1("style"); + style.id = "svelte-egt0yd-style"; + style.textContent = "td.svelte-egt0yd{border-right:1px solid var(--background-modifier-border)}.week-num.svelte-egt0yd{background-color:var(--color-background-weeknum);border-radius:4px;color:var(--color-text-weeknum);cursor:pointer;font-size:0.65em;height:100%;padding:4px;text-align:center;transition:background-color 0.1s ease-in, color 0.1s ease-in;vertical-align:baseline}.week-num.svelte-egt0yd:hover{background-color:var(--interactive-hover)}.week-num.active.svelte-egt0yd:hover{background-color:var(--interactive-accent-hover)}.active.svelte-egt0yd{color:var(--text-on-accent);background-color:var(--interactive-accent)}.dot-container.svelte-egt0yd{display:flex;flex-wrap:wrap;justify-content:center;line-height:6px;min-height:6px}"; + append$1(document.head, style); +} + +function get_each_context$1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[11] = list[i]; + return child_ctx; +} + +// (35:8) {#each metadata.dots as dot} +function create_each_block$1(ctx) { + let dot; + let current; + const dot_spread_levels = [/*dot*/ ctx[11]]; + let dot_props = {}; + + for (let i = 0; i < dot_spread_levels.length; i += 1) { + dot_props = assign(dot_props, dot_spread_levels[i]); + } + + dot = new Dot({ props: dot_props }); + + return { + c() { + create_component$1(dot.$$.fragment); + }, + m(target, anchor) { + mount_component$1(dot, target, anchor); + current = true; + }, + p(ctx, dirty) { + const dot_changes = (dirty & /*metadata*/ 64) + ? get_spread_update(dot_spread_levels, [get_spread_object(/*dot*/ ctx[11])]) + : {}; + + dot.$set(dot_changes); + }, + i(local) { + if (current) return; + transition_in$1(dot.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(dot.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component$1(dot, detaching); + } + }; +} + +// (24:2) +function create_default_slot(ctx) { + let div1; + let t0; + let t1; + let div0; + let div1_class_value; + let current; + let mounted; + let dispose; + let each_value = /*metadata*/ ctx[6].dots; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i)); + } + + const out = i => transition_out$1(each_blocks[i], 1, 1, () => { + each_blocks[i] = null; + }); + + return { + c() { + div1 = element$1("div"); + t0 = text$1(/*weekNum*/ ctx[0]); + t1 = space$1(); + div0 = element$1("div"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + attr$1(div0, "class", "dot-container svelte-egt0yd"); + attr$1(div1, "class", div1_class_value = "" + (null_to_empty$1(`week-num ${/*metadata*/ ctx[6].classes.join(" ")}`) + " svelte-egt0yd")); + toggle_class(div1, "active", /*selectedId*/ ctx[5] === getDateUID_1(/*days*/ ctx[1][0], "week")); + }, + m(target, anchor) { + insert$1(target, div1, anchor); + append$1(div1, t0); + append$1(div1, t1); + append$1(div1, div0); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(div0, null); + } + + current = true; + + if (!mounted) { + dispose = [ + listen$1(div1, "click", function () { + if (is_function$1(/*onClick*/ ctx[3] && /*click_handler*/ ctx[8])) (/*onClick*/ ctx[3] && /*click_handler*/ ctx[8]).apply(this, arguments); + }), + listen$1(div1, "contextmenu", function () { + if (is_function$1(/*onContextMenu*/ ctx[4] && /*contextmenu_handler*/ ctx[9])) (/*onContextMenu*/ ctx[4] && /*contextmenu_handler*/ ctx[9]).apply(this, arguments); + }), + listen$1(div1, "pointerover", function () { + if (is_function$1(/*onHover*/ ctx[2] && /*pointerover_handler*/ ctx[10])) (/*onHover*/ ctx[2] && /*pointerover_handler*/ ctx[10]).apply(this, arguments); + }) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if (!current || dirty & /*weekNum*/ 1) set_data$1(t0, /*weekNum*/ ctx[0]); + + if (dirty & /*metadata*/ 64) { + each_value = /*metadata*/ ctx[6].dots; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$1(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + transition_in$1(each_blocks[i], 1); + } else { + each_blocks[i] = create_each_block$1(child_ctx); + each_blocks[i].c(); + transition_in$1(each_blocks[i], 1); + each_blocks[i].m(div0, null); + } + } + + group_outros$1(); + + for (i = each_value.length; i < each_blocks.length; i += 1) { + out(i); + } + + check_outros$1(); + } + + if (!current || dirty & /*metadata*/ 64 && div1_class_value !== (div1_class_value = "" + (null_to_empty$1(`week-num ${/*metadata*/ ctx[6].classes.join(" ")}`) + " svelte-egt0yd"))) { + attr$1(div1, "class", div1_class_value); + } + + if (dirty & /*metadata, selectedId, getDateUID, days*/ 98) { + toggle_class(div1, "active", /*selectedId*/ ctx[5] === getDateUID_1(/*days*/ ctx[1][0], "week")); + } + }, + i(local) { + if (current) return; + + for (let i = 0; i < each_value.length; i += 1) { + transition_in$1(each_blocks[i]); + } + + current = true; + }, + o(local) { + each_blocks = each_blocks.filter(Boolean); + + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out$1(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + if (detaching) detach$1(div1); + destroy_each(each_blocks, detaching); + mounted = false; + run_all$1(dispose); + } + }; +} + +function create_fragment$1(ctx) { + let td; + let metadataresolver; + let current; + + metadataresolver = new MetadataResolver({ + props: { + metadata: /*metadata*/ ctx[6], + $$slots: { + default: [ + create_default_slot, + ({ metadata }) => ({ 6: metadata }), + ({ metadata }) => metadata ? 64 : 0 + ] + }, + $$scope: { ctx } + } + }); + + return { + c() { + td = element$1("td"); + create_component$1(metadataresolver.$$.fragment); + attr$1(td, "class", "svelte-egt0yd"); + }, + m(target, anchor) { + insert$1(target, td, anchor); + mount_component$1(metadataresolver, td, null); + current = true; + }, + p(ctx, [dirty]) { + const metadataresolver_changes = {}; + if (dirty & /*metadata*/ 64) metadataresolver_changes.metadata = /*metadata*/ ctx[6]; + + if (dirty & /*$$scope, metadata, selectedId, days, onClick, startOfWeek, onContextMenu, onHover, weekNum*/ 16639) { + metadataresolver_changes.$$scope = { dirty, ctx }; + } + + metadataresolver.$set(metadataresolver_changes); + }, + i(local) { + if (current) return; + transition_in$1(metadataresolver.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(metadataresolver.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach$1(td); + destroy_component$1(metadataresolver); + } + }; +} + +function instance$1($$self, $$props, $$invalidate) { + + + let { weekNum } = $$props; + let { days } = $$props; + let { metadata } = $$props; + let { onHover } = $$props; + let { onClick } = $$props; + let { onContextMenu } = $$props; + let { selectedId = null } = $$props; + let startOfWeek; + const click_handler = e => onClick(startOfWeek, isMetaPressed(e)); + const contextmenu_handler = e => onContextMenu(days[0], e); + const pointerover_handler = e => onHover(startOfWeek, e.target, isMetaPressed(e)); + + $$self.$$set = $$props => { + if ("weekNum" in $$props) $$invalidate(0, weekNum = $$props.weekNum); + if ("days" in $$props) $$invalidate(1, days = $$props.days); + if ("metadata" in $$props) $$invalidate(6, metadata = $$props.metadata); + if ("onHover" in $$props) $$invalidate(2, onHover = $$props.onHover); + if ("onClick" in $$props) $$invalidate(3, onClick = $$props.onClick); + if ("onContextMenu" in $$props) $$invalidate(4, onContextMenu = $$props.onContextMenu); + if ("selectedId" in $$props) $$invalidate(5, selectedId = $$props.selectedId); + }; + + $$self.$$.update = () => { + if ($$self.$$.dirty & /*days*/ 2) { + $$invalidate(7, startOfWeek = getStartOfWeek(days)); + } + }; + + return [ + weekNum, + days, + onHover, + onClick, + onContextMenu, + selectedId, + metadata, + startOfWeek, + click_handler, + contextmenu_handler, + pointerover_handler + ]; +} + +class WeekNum extends SvelteComponent$1 { + constructor(options) { + super(); + if (!document.getElementById("svelte-egt0yd-style")) add_css$1(); + + init$2(this, options, instance$1, create_fragment$1, not_equal, { + weekNum: 0, + days: 1, + metadata: 6, + onHover: 2, + onClick: 3, + onContextMenu: 4, + selectedId: 5 + }); + } +} + +async function metadataReducer(promisedMetadata) { + const meta = { + dots: [], + classes: [], + dataAttributes: {}, + }; + const metas = await Promise.all(promisedMetadata); + return metas.reduce((acc, meta) => ({ + classes: [...acc.classes, ...(meta.classes || [])], + dataAttributes: Object.assign(acc.dataAttributes, meta.dataAttributes), + dots: [...acc.dots, ...(meta.dots || [])], + }), meta); +} +function getDailyMetadata(sources, date, ..._args) { + return metadataReducer(sources.map((source) => source.getDailyMetadata(date))); +} +function getWeeklyMetadata(sources, date, ..._args) { + return metadataReducer(sources.map((source) => source.getWeeklyMetadata(date))); +} + +/* src/components/Calendar.svelte generated by Svelte v3.35.0 */ + +function add_css$6() { + var style = element$1("style"); + style.id = "svelte-pcimu8-style"; + style.textContent = ".container.svelte-pcimu8{--color-background-heading:transparent;--color-background-day:transparent;--color-background-weeknum:transparent;--color-background-weekend:transparent;--color-dot:var(--text-muted);--color-arrow:var(--text-muted);--color-button:var(--text-muted);--color-text-title:var(--text-normal);--color-text-heading:var(--text-muted);--color-text-day:var(--text-normal);--color-text-today:var(--interactive-accent);--color-text-weeknum:var(--text-muted)}.container.svelte-pcimu8{padding:0 8px}.container.is-mobile.svelte-pcimu8{padding:0}th.svelte-pcimu8{text-align:center}.weekend.svelte-pcimu8{background-color:var(--color-background-weekend)}.calendar.svelte-pcimu8{border-collapse:collapse;width:100%}th.svelte-pcimu8{background-color:var(--color-background-heading);color:var(--color-text-heading);font-size:0.6em;letter-spacing:1px;padding:4px;text-transform:uppercase}"; + append$1(document.head, style); +} + +function get_each_context(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[18] = list[i]; + return child_ctx; +} + +function get_each_context_1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[21] = list[i]; + return child_ctx; +} + +function get_each_context_2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[24] = list[i]; + return child_ctx; +} + +function get_each_context_3(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[27] = list[i]; + return child_ctx; +} + +// (55:6) {#if showWeekNums} +function create_if_block_2(ctx) { + let col; + + return { + c() { + col = element$1("col"); + }, + m(target, anchor) { + insert$1(target, col, anchor); + }, + d(detaching) { + if (detaching) detach$1(col); + } + }; +} + +// (58:6) {#each month[1].days as date} +function create_each_block_3(ctx) { + let col; + + return { + c() { + col = element$1("col"); + attr$1(col, "class", "svelte-pcimu8"); + toggle_class(col, "weekend", isWeekend(/*date*/ ctx[27])); + }, + m(target, anchor) { + insert$1(target, col, anchor); + }, + p(ctx, dirty) { + if (dirty & /*isWeekend, month*/ 16384) { + toggle_class(col, "weekend", isWeekend(/*date*/ ctx[27])); + } + }, + d(detaching) { + if (detaching) detach$1(col); + } + }; +} + +// (64:8) {#if showWeekNums} +function create_if_block_1(ctx) { + let th; + + return { + c() { + th = element$1("th"); + th.textContent = "W"; + attr$1(th, "class", "svelte-pcimu8"); + }, + m(target, anchor) { + insert$1(target, th, anchor); + }, + d(detaching) { + if (detaching) detach$1(th); + } + }; +} + +// (67:8) {#each daysOfWeek as dayOfWeek} +function create_each_block_2(ctx) { + let th; + let t_value = /*dayOfWeek*/ ctx[24] + ""; + let t; + + return { + c() { + th = element$1("th"); + t = text$1(t_value); + attr$1(th, "class", "svelte-pcimu8"); + }, + m(target, anchor) { + insert$1(target, th, anchor); + append$1(th, t); + }, + p(ctx, dirty) { + if (dirty & /*daysOfWeek*/ 32768 && t_value !== (t_value = /*dayOfWeek*/ ctx[24] + "")) set_data$1(t, t_value); + }, + d(detaching) { + if (detaching) detach$1(th); + } + }; +} + +// (75:10) {#if showWeekNums} +function create_if_block(ctx) { + let weeknum; + let current; + + const weeknum_spread_levels = [ + /*week*/ ctx[18], + { + metadata: getWeeklyMetadata(/*sources*/ ctx[8], /*week*/ ctx[18].days[0], /*today*/ ctx[10]) + }, + { onClick: /*onClickWeek*/ ctx[7] }, + { + onContextMenu: /*onContextMenuWeek*/ ctx[5] + }, + { onHover: /*onHoverWeek*/ ctx[3] }, + { selectedId: /*selectedId*/ ctx[9] } + ]; + + let weeknum_props = {}; + + for (let i = 0; i < weeknum_spread_levels.length; i += 1) { + weeknum_props = assign(weeknum_props, weeknum_spread_levels[i]); + } + + weeknum = new WeekNum({ props: weeknum_props }); + + return { + c() { + create_component$1(weeknum.$$.fragment); + }, + m(target, anchor) { + mount_component$1(weeknum, target, anchor); + current = true; + }, + p(ctx, dirty) { + const weeknum_changes = (dirty & /*month, getWeeklyMetadata, sources, today, onClickWeek, onContextMenuWeek, onHoverWeek, selectedId*/ 18344) + ? get_spread_update(weeknum_spread_levels, [ + dirty & /*month*/ 16384 && get_spread_object(/*week*/ ctx[18]), + dirty & /*getWeeklyMetadata, sources, month, today*/ 17664 && { + metadata: getWeeklyMetadata(/*sources*/ ctx[8], /*week*/ ctx[18].days[0], /*today*/ ctx[10]) + }, + dirty & /*onClickWeek*/ 128 && { onClick: /*onClickWeek*/ ctx[7] }, + dirty & /*onContextMenuWeek*/ 32 && { + onContextMenu: /*onContextMenuWeek*/ ctx[5] + }, + dirty & /*onHoverWeek*/ 8 && { onHover: /*onHoverWeek*/ ctx[3] }, + dirty & /*selectedId*/ 512 && { selectedId: /*selectedId*/ ctx[9] } + ]) + : {}; + + weeknum.$set(weeknum_changes); + }, + i(local) { + if (current) return; + transition_in$1(weeknum.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(weeknum.$$.fragment, local); + current = false; + }, + d(detaching) { + destroy_component$1(weeknum, detaching); + } + }; +} + +// (85:10) {#each week.days as day (day.format())} +function create_each_block_1(key_1, ctx) { + let first; + let day; + let current; + + day = new Day({ + props: { + date: /*day*/ ctx[21], + today: /*today*/ ctx[10], + displayedMonth: /*displayedMonth*/ ctx[0], + onClick: /*onClickDay*/ ctx[6], + onContextMenu: /*onContextMenuDay*/ ctx[4], + onHover: /*onHoverDay*/ ctx[2], + metadata: getDailyMetadata(/*sources*/ ctx[8], /*day*/ ctx[21], /*today*/ ctx[10]), + selectedId: /*selectedId*/ ctx[9] + } + }); + + return { + key: key_1, + first: null, + c() { + first = empty$1(); + create_component$1(day.$$.fragment); + this.first = first; + }, + m(target, anchor) { + insert$1(target, first, anchor); + mount_component$1(day, target, anchor); + current = true; + }, + p(new_ctx, dirty) { + ctx = new_ctx; + const day_changes = {}; + if (dirty & /*month*/ 16384) day_changes.date = /*day*/ ctx[21]; + if (dirty & /*today*/ 1024) day_changes.today = /*today*/ ctx[10]; + if (dirty & /*displayedMonth*/ 1) day_changes.displayedMonth = /*displayedMonth*/ ctx[0]; + if (dirty & /*onClickDay*/ 64) day_changes.onClick = /*onClickDay*/ ctx[6]; + if (dirty & /*onContextMenuDay*/ 16) day_changes.onContextMenu = /*onContextMenuDay*/ ctx[4]; + if (dirty & /*onHoverDay*/ 4) day_changes.onHover = /*onHoverDay*/ ctx[2]; + if (dirty & /*sources, month, today*/ 17664) day_changes.metadata = getDailyMetadata(/*sources*/ ctx[8], /*day*/ ctx[21], /*today*/ ctx[10]); + if (dirty & /*selectedId*/ 512) day_changes.selectedId = /*selectedId*/ ctx[9]; + day.$set(day_changes); + }, + i(local) { + if (current) return; + transition_in$1(day.$$.fragment, local); + current = true; + }, + o(local) { + transition_out$1(day.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach$1(first); + destroy_component$1(day, detaching); + } + }; +} + +// (73:6) {#each month as week (week.weekNum)} +function create_each_block(key_1, ctx) { + let tr; + let t0; + let each_blocks = []; + let each_1_lookup = new Map(); + let t1; + let current; + let if_block = /*showWeekNums*/ ctx[1] && create_if_block(ctx); + let each_value_1 = /*week*/ ctx[18].days; + const get_key = ctx => /*day*/ ctx[21].format(); + + for (let i = 0; i < each_value_1.length; i += 1) { + let child_ctx = get_each_context_1(ctx, each_value_1, i); + let key = get_key(child_ctx); + each_1_lookup.set(key, each_blocks[i] = create_each_block_1(key, child_ctx)); + } + + return { + key: key_1, + first: null, + c() { + tr = element$1("tr"); + if (if_block) if_block.c(); + t0 = space$1(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t1 = space$1(); + this.first = tr; + }, + m(target, anchor) { + insert$1(target, tr, anchor); + if (if_block) if_block.m(tr, null); + append$1(tr, t0); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(tr, null); + } + + append$1(tr, t1); + current = true; + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (/*showWeekNums*/ ctx[1]) { + if (if_block) { + if_block.p(ctx, dirty); + + if (dirty & /*showWeekNums*/ 2) { + transition_in$1(if_block, 1); + } + } else { + if_block = create_if_block(ctx); + if_block.c(); + transition_in$1(if_block, 1); + if_block.m(tr, t0); + } + } else if (if_block) { + group_outros$1(); + + transition_out$1(if_block, 1, 1, () => { + if_block = null; + }); + + check_outros$1(); + } + + if (dirty & /*month, today, displayedMonth, onClickDay, onContextMenuDay, onHoverDay, getDailyMetadata, sources, selectedId*/ 18261) { + each_value_1 = /*week*/ ctx[18].days; + group_outros$1(); + each_blocks = update_keyed_each$1(each_blocks, dirty, get_key, 1, ctx, each_value_1, each_1_lookup, tr, outro_and_destroy_block$1, create_each_block_1, t1, get_each_context_1); + check_outros$1(); + } + }, + i(local) { + if (current) return; + transition_in$1(if_block); + + for (let i = 0; i < each_value_1.length; i += 1) { + transition_in$1(each_blocks[i]); + } + + current = true; + }, + o(local) { + transition_out$1(if_block); + + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out$1(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + if (detaching) detach$1(tr); + if (if_block) if_block.d(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].d(); + } + } + }; +} + +function create_fragment$7(ctx) { + let div; + let nav; + let t0; + let table; + let colgroup; + let t1; + let t2; + let thead; + let tr; + let t3; + let t4; + let tbody; + let each_blocks = []; + let each2_lookup = new Map(); + let current; + + nav = new Nav({ + props: { + today: /*today*/ ctx[10], + displayedMonth: /*displayedMonth*/ ctx[0], + incrementDisplayedMonth: /*incrementDisplayedMonth*/ ctx[11], + decrementDisplayedMonth: /*decrementDisplayedMonth*/ ctx[12], + resetDisplayedMonth: /*resetDisplayedMonth*/ ctx[13] + } + }); + + let if_block0 = /*showWeekNums*/ ctx[1] && create_if_block_2(); + let each_value_3 = /*month*/ ctx[14][1].days; + let each_blocks_2 = []; + + for (let i = 0; i < each_value_3.length; i += 1) { + each_blocks_2[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i)); + } + + let if_block1 = /*showWeekNums*/ ctx[1] && create_if_block_1(); + let each_value_2 = /*daysOfWeek*/ ctx[15]; + let each_blocks_1 = []; + + for (let i = 0; i < each_value_2.length; i += 1) { + each_blocks_1[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); + } + + let each_value = /*month*/ ctx[14]; + const get_key = ctx => /*week*/ ctx[18].weekNum; + + for (let i = 0; i < each_value.length; i += 1) { + let child_ctx = get_each_context(ctx, each_value, i); + let key = get_key(child_ctx); + each2_lookup.set(key, each_blocks[i] = create_each_block(key, child_ctx)); + } + + return { + c() { + div = element$1("div"); + create_component$1(nav.$$.fragment); + t0 = space$1(); + table = element$1("table"); + colgroup = element$1("colgroup"); + if (if_block0) if_block0.c(); + t1 = space$1(); + + for (let i = 0; i < each_blocks_2.length; i += 1) { + each_blocks_2[i].c(); + } + + t2 = space$1(); + thead = element$1("thead"); + tr = element$1("tr"); + if (if_block1) if_block1.c(); + t3 = space$1(); + + for (let i = 0; i < each_blocks_1.length; i += 1) { + each_blocks_1[i].c(); + } + + t4 = space$1(); + tbody = element$1("tbody"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + attr$1(table, "class", "calendar svelte-pcimu8"); + attr$1(div, "id", "calendar-container"); + attr$1(div, "class", "container svelte-pcimu8"); + toggle_class(div, "is-mobile", /*isMobile*/ ctx[16]); + }, + m(target, anchor) { + insert$1(target, div, anchor); + mount_component$1(nav, div, null); + append$1(div, t0); + append$1(div, table); + append$1(table, colgroup); + if (if_block0) if_block0.m(colgroup, null); + append$1(colgroup, t1); + + for (let i = 0; i < each_blocks_2.length; i += 1) { + each_blocks_2[i].m(colgroup, null); + } + + append$1(table, t2); + append$1(table, thead); + append$1(thead, tr); + if (if_block1) if_block1.m(tr, null); + append$1(tr, t3); + + for (let i = 0; i < each_blocks_1.length; i += 1) { + each_blocks_1[i].m(tr, null); + } + + append$1(table, t4); + append$1(table, tbody); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(tbody, null); + } + + current = true; + }, + p(ctx, [dirty]) { + const nav_changes = {}; + if (dirty & /*today*/ 1024) nav_changes.today = /*today*/ ctx[10]; + if (dirty & /*displayedMonth*/ 1) nav_changes.displayedMonth = /*displayedMonth*/ ctx[0]; + nav.$set(nav_changes); + + if (/*showWeekNums*/ ctx[1]) { + if (if_block0) ; else { + if_block0 = create_if_block_2(); + if_block0.c(); + if_block0.m(colgroup, t1); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + if (dirty & /*isWeekend, month*/ 16384) { + each_value_3 = /*month*/ ctx[14][1].days; + let i; + + for (i = 0; i < each_value_3.length; i += 1) { + const child_ctx = get_each_context_3(ctx, each_value_3, i); + + if (each_blocks_2[i]) { + each_blocks_2[i].p(child_ctx, dirty); + } else { + each_blocks_2[i] = create_each_block_3(child_ctx); + each_blocks_2[i].c(); + each_blocks_2[i].m(colgroup, null); + } + } + + for (; i < each_blocks_2.length; i += 1) { + each_blocks_2[i].d(1); + } + + each_blocks_2.length = each_value_3.length; + } + + if (/*showWeekNums*/ ctx[1]) { + if (if_block1) ; else { + if_block1 = create_if_block_1(); + if_block1.c(); + if_block1.m(tr, t3); + } + } else if (if_block1) { + if_block1.d(1); + if_block1 = null; + } + + if (dirty & /*daysOfWeek*/ 32768) { + each_value_2 = /*daysOfWeek*/ ctx[15]; + let i; + + for (i = 0; i < each_value_2.length; i += 1) { + const child_ctx = get_each_context_2(ctx, each_value_2, i); + + if (each_blocks_1[i]) { + each_blocks_1[i].p(child_ctx, dirty); + } else { + each_blocks_1[i] = create_each_block_2(child_ctx); + each_blocks_1[i].c(); + each_blocks_1[i].m(tr, null); + } + } + + for (; i < each_blocks_1.length; i += 1) { + each_blocks_1[i].d(1); + } + + each_blocks_1.length = each_value_2.length; + } + + if (dirty & /*month, today, displayedMonth, onClickDay, onContextMenuDay, onHoverDay, getDailyMetadata, sources, selectedId, getWeeklyMetadata, onClickWeek, onContextMenuWeek, onHoverWeek, showWeekNums*/ 18431) { + each_value = /*month*/ ctx[14]; + group_outros$1(); + each_blocks = update_keyed_each$1(each_blocks, dirty, get_key, 1, ctx, each_value, each2_lookup, tbody, outro_and_destroy_block$1, create_each_block, null, get_each_context); + check_outros$1(); + } + }, + i(local) { + if (current) return; + transition_in$1(nav.$$.fragment, local); + + for (let i = 0; i < each_value.length; i += 1) { + transition_in$1(each_blocks[i]); + } + + current = true; + }, + o(local) { + transition_out$1(nav.$$.fragment, local); + + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out$1(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + if (detaching) detach$1(div); + destroy_component$1(nav); + if (if_block0) if_block0.d(); + destroy_each(each_blocks_2, detaching); + if (if_block1) if_block1.d(); + destroy_each(each_blocks_1, detaching); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].d(); + } + } + }; +} + +function instance$7($$self, $$props, $$invalidate) { + + + let { localeData } = $$props; + let { showWeekNums = false } = $$props; + let { onHoverDay } = $$props; + let { onHoverWeek } = $$props; + let { onContextMenuDay } = $$props; + let { onContextMenuWeek } = $$props; + let { onClickDay } = $$props; + let { onClickWeek } = $$props; + let { sources = [] } = $$props; + let { selectedId } = $$props; + let { today = window.moment() } = $$props; + let { displayedMonth = today } = $$props; + let month; + let daysOfWeek; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let isMobile = window.app.isMobile; + + function incrementDisplayedMonth() { + $$invalidate(0, displayedMonth = displayedMonth.clone().add(1, "month")); + } + + function decrementDisplayedMonth() { + $$invalidate(0, displayedMonth = displayedMonth.clone().subtract(1, "month")); + } + + function resetDisplayedMonth() { + $$invalidate(0, displayedMonth = today.clone()); + } + + $$self.$$set = $$props => { + if ("localeData" in $$props) $$invalidate(17, localeData = $$props.localeData); + if ("showWeekNums" in $$props) $$invalidate(1, showWeekNums = $$props.showWeekNums); + if ("onHoverDay" in $$props) $$invalidate(2, onHoverDay = $$props.onHoverDay); + if ("onHoverWeek" in $$props) $$invalidate(3, onHoverWeek = $$props.onHoverWeek); + if ("onContextMenuDay" in $$props) $$invalidate(4, onContextMenuDay = $$props.onContextMenuDay); + if ("onContextMenuWeek" in $$props) $$invalidate(5, onContextMenuWeek = $$props.onContextMenuWeek); + if ("onClickDay" in $$props) $$invalidate(6, onClickDay = $$props.onClickDay); + if ("onClickWeek" in $$props) $$invalidate(7, onClickWeek = $$props.onClickWeek); + if ("sources" in $$props) $$invalidate(8, sources = $$props.sources); + if ("selectedId" in $$props) $$invalidate(9, selectedId = $$props.selectedId); + if ("today" in $$props) $$invalidate(10, today = $$props.today); + if ("displayedMonth" in $$props) $$invalidate(0, displayedMonth = $$props.displayedMonth); + }; + + $$self.$$.update = () => { + if ($$self.$$.dirty & /*displayedMonth, localeData*/ 131073) { + $$invalidate(14, month = getMonth(displayedMonth, localeData)); + } + + if ($$self.$$.dirty & /*today, localeData*/ 132096) { + $$invalidate(15, daysOfWeek = getDaysOfWeek(today, localeData)); + } + }; + + return [ + displayedMonth, + showWeekNums, + onHoverDay, + onHoverWeek, + onContextMenuDay, + onContextMenuWeek, + onClickDay, + onClickWeek, + sources, + selectedId, + today, + incrementDisplayedMonth, + decrementDisplayedMonth, + resetDisplayedMonth, + month, + daysOfWeek, + isMobile, + localeData + ]; +} + +class Calendar extends SvelteComponent$1 { + constructor(options) { + super(); + if (!document.getElementById("svelte-pcimu8-style")) add_css$6(); + + init$2(this, options, instance$7, create_fragment$7, not_equal, { + localeData: 17, + showWeekNums: 1, + onHoverDay: 2, + onHoverWeek: 3, + onContextMenuDay: 4, + onContextMenuWeek: 5, + onClickDay: 6, + onClickWeek: 7, + sources: 8, + selectedId: 9, + today: 10, + displayedMonth: 0, + incrementDisplayedMonth: 11, + decrementDisplayedMonth: 12, + resetDisplayedMonth: 13 + }); + } + + get incrementDisplayedMonth() { + return this.$$.ctx[11]; + } + + get decrementDisplayedMonth() { + return this.$$.ctx[12]; + } + + get resetDisplayedMonth() { + return this.$$.ctx[13]; + } +} + +/* src/ui/ExpenseLinesInput.svelte generated by Svelte v3.32.3 */ + +function add_css$7() { + var style = element("style"); + style.id = "svelte-gbs5xa-style"; + style.textContent = ".form-row.svelte-gbs5xa.svelte-gbs5xa{padding:5px 0;display:flex}.remove-row.svelte-gbs5xa.svelte-gbs5xa{margin:7px 4px 7px 0}.form-row.svelte-gbs5xa>.svelte-gbs5xa{margin-left:5px}.form-row.svelte-gbs5xa>.svelte-gbs5xa:first-child{margin-left:0}input.expense-amount.svelte-gbs5xa.svelte-gbs5xa{width:24%}.input-icon.svelte-gbs5xa.svelte-gbs5xa{width:100px;position:relative}.input-icon.svelte-gbs5xa>i.svelte-gbs5xa{position:absolute;display:block;transform:translate(0, -50%);top:50%;pointer-events:none;width:25px;text-align:center;font-style:normal}.input-icon.svelte-gbs5xa>input.svelte-gbs5xa{padding-left:25px !important;width:100%}"; + append(document.head, style); +} + +function get_each_context$3(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[10] = list[i]; + child_ctx[11] = list; + child_ctx[12] = i; + return child_ctx; +} + +// (31:4) {#if i > 0 && i !== lines.length - 1} +function create_if_block_1$1(ctx) { + let svg; + let path; + let mounted; + let dispose; + + function click_handler() { + return /*click_handler*/ ctx[7](/*line*/ ctx[10]); + } + + return { + c() { + svg = svg_element("svg"); + path = svg_element("path"); + attr(path, "fill", "currentColor"); + attr(path, "stroke", "currentColor"); + attr(path, "d", "M18,8C12.5,8,8,12.5,8,18v64c0,5.5,4.5,10,10,10h64c5.5,0,10-4.5,10-10V18c0-5.5-4.5-10-10-10L18,8z M18,12h64 c3.3,0,6,2.7,6,6v64c0,3.3-2.7,6-6,6H18c-3.3,0-6-2.7-6-6V18C12,14.7,14.7,12,18,12z M33.4,30.6l-2.8,2.8L47.2,50L30.6,66.6 l2.8,2.8L50,52.8l16.6,16.6l2.8-2.8L52.8,50l16.6-16.6l-2.8-2.8L50,47.2L33.4,30.6z"); + attr(svg, "class", "remove-row svelte-gbs5xa"); + attr(svg, "viewBox", "0 0 100 100"); + attr(svg, "width", "16"); + attr(svg, "height", "16"); + }, + m(target, anchor) { + insert(target, svg, anchor); + append(svg, path); + + if (!mounted) { + dispose = listen(svg, "click", click_handler); + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + }, + d(detaching) { + if (detaching) detach(svg); + mounted = false; + dispose(); + } + }; +} + +// (62:6) {:else} +function create_else_block$2(ctx) { + let input; + let mounted; + let dispose; + + function input_input_handler() { + /*input_input_handler*/ ctx[9].call(input, /*each_value*/ ctx[11], /*i*/ ctx[12]); + } + + return { + c() { + input = element("input"); + attr(input, "class", "expense-amount svelte-gbs5xa"); + attr(input, "type", "number"); + attr(input, "placeholder", "Amount"); + }, + m(target, anchor) { + insert(target, input, anchor); + set_input_value(input, /*line*/ ctx[10].amount); + + if (!mounted) { + dispose = [ + listen(input, "blur", /*formatAmount*/ ctx[6]), + listen(input, "input", input_input_handler) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (dirty & /*lines*/ 1 && to_number(input.value) !== /*line*/ ctx[10].amount) { + set_input_value(input, /*line*/ ctx[10].amount); + } + }, + d(detaching) { + if (detaching) detach(input); + mounted = false; + run_all(dispose); + } + }; +} + +// (54:6) {#if i === lines.length - 1} +function create_if_block$3(ctx) { + let input; + let input_disabled_value; + + return { + c() { + input = element("input"); + attr(input, "class", "expense-amount svelte-gbs5xa"); + attr(input, "type", "number"); + attr(input, "placeholder", "Amount"); + input.disabled = input_disabled_value = true; + input.value = /*remainder*/ ctx[3]; + }, + m(target, anchor) { + insert(target, input, anchor); + }, + p(ctx, dirty) { + if (dirty & /*remainder*/ 8) { + input.value = /*remainder*/ ctx[3]; + } + }, + d(detaching) { + if (detaching) detach(input); + } + }; +} + +// (29:0) {#each lines as line, i (line.id)} +function create_each_block$3(key_1, ctx) { + let div1; + let t0; + let textsuggest; + let updating_value; + let t1; + let div0; + let t2; + let i_1; + let t3; + let current; + let if_block0 = /*i*/ ctx[12] > 0 && /*i*/ ctx[12] !== /*lines*/ ctx[0].length - 1 && create_if_block_1$1(ctx); + + function textsuggest_value_binding(value) { + /*textsuggest_value_binding*/ ctx[8](value, /*line*/ ctx[10]); + } + + let textsuggest_props = { + placeholder: "Account", + classes: "expense-category", + suggestions: /*txCache*/ ctx[2].categories + }; + + if (/*line*/ ctx[10].category !== void 0) { + textsuggest_props.value = /*line*/ ctx[10].category; + } + + textsuggest = new TextSuggest({ props: textsuggest_props }); + binding_callbacks.push(() => bind(textsuggest, "value", textsuggest_value_binding)); + + function select_block_type(ctx, dirty) { + if (/*i*/ ctx[12] === /*lines*/ ctx[0].length - 1) return create_if_block$3; + return create_else_block$2; + } + + let current_block_type = select_block_type(ctx); + let if_block1 = current_block_type(ctx); + + return { + key: key_1, + first: null, + c() { + div1 = element("div"); + if (if_block0) if_block0.c(); + t0 = space(); + create_component(textsuggest.$$.fragment); + t1 = space(); + div0 = element("div"); + if_block1.c(); + t2 = space(); + i_1 = element("i"); + t3 = text(/*currencySymbol*/ ctx[1]); + attr(i_1, "class", "svelte-gbs5xa"); + attr(div0, "class", "input-icon svelte-gbs5xa"); + attr(div1, "class", "form-row svelte-gbs5xa"); + this.first = div1; + }, + m(target, anchor) { + insert(target, div1, anchor); + if (if_block0) if_block0.m(div1, null); + append(div1, t0); + mount_component(textsuggest, div1, null); + append(div1, t1); + append(div1, div0); + if_block1.m(div0, null); + append(div0, t2); + append(div0, i_1); + append(i_1, t3); + current = true; + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (/*i*/ ctx[12] > 0 && /*i*/ ctx[12] !== /*lines*/ ctx[0].length - 1) { + if (if_block0) { + if_block0.p(ctx, dirty); + } else { + if_block0 = create_if_block_1$1(ctx); + if_block0.c(); + if_block0.m(div1, t0); + } + } else if (if_block0) { + if_block0.d(1); + if_block0 = null; + } + + const textsuggest_changes = {}; + if (dirty & /*txCache*/ 4) textsuggest_changes.suggestions = /*txCache*/ ctx[2].categories; + + if (!updating_value && dirty & /*lines*/ 1) { + updating_value = true; + textsuggest_changes.value = /*line*/ ctx[10].category; + add_flush_callback(() => updating_value = false); + } + + textsuggest.$set(textsuggest_changes); + + if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block1) { + if_block1.p(ctx, dirty); + } else { + if_block1.d(1); + if_block1 = current_block_type(ctx); + + if (if_block1) { + if_block1.c(); + if_block1.m(div0, t2); + } + } + + if (!current || dirty & /*currencySymbol*/ 2) set_data(t3, /*currencySymbol*/ ctx[1]); + }, + i(local) { + if (current) return; + transition_in(textsuggest.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(textsuggest.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(div1); + if (if_block0) if_block0.d(); + destroy_component(textsuggest); + if_block1.d(); + } + }; +} + +function create_fragment$8(ctx) { + let each_blocks = []; + let each_1_lookup = new Map(); + let t0; + let button; + let current; + let mounted; + let dispose; + let each_value = /*lines*/ ctx[0]; + const get_key = ctx => /*line*/ ctx[10].id; + + for (let i = 0; i < each_value.length; i += 1) { + let child_ctx = get_each_context$3(ctx, each_value, i); + let key = get_key(child_ctx); + each_1_lookup.set(key, each_blocks[i] = create_each_block$3(key, child_ctx)); + } + + return { + c() { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t0 = space(); + button = element("button"); + button.textContent = "Add Row"; + }, + m(target, anchor) { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(target, anchor); + } + + insert(target, t0, anchor); + insert(target, button, anchor); + current = true; + + if (!mounted) { + dispose = listen(button, "click", /*addRow*/ ctx[4]); + mounted = true; + } + }, + p(ctx, [dirty]) { + if (dirty & /*currencySymbol, remainder, lines, formatAmount, txCache, removeRow*/ 111) { + each_value = /*lines*/ ctx[0]; + group_outros(); + each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx, each_value, each_1_lookup, t0.parentNode, outro_and_destroy_block, create_each_block$3, t0, get_each_context$3); + check_outros(); + } + }, + i(local) { + if (current) return; + + for (let i = 0; i < each_value.length; i += 1) { + transition_in(each_blocks[i]); + } + + current = true; + }, + o(local) { + for (let i = 0; i < each_blocks.length; i += 1) { + transition_out(each_blocks[i]); + } + + current = false; + }, + d(detaching) { + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].d(detaching); + } + + if (detaching) detach(t0); + if (detaching) detach(button); + mounted = false; + dispose(); + } + }; +} + +function instance$8($$self, $$props, $$invalidate) { + let remainder; + + let { currencySymbol } = $$props; + let { txCache } = $$props; + let { lines } = $$props; + + const addRow = () => { + lines.splice(lines.length - 1, 0, { + category: "", + amount: 0, + id: lodash.max(lines.map(line => line.id)) + 1, + currency: currencySymbol, + reconcile: "", + comment: undefined + }); + + $$invalidate(0, lines); // Svelte reactivity hack + }; + + const removeRow = id => { + $$invalidate(0, lines = lines.filter(line => line.id !== id)); + }; + + const formatAmount = event => { + const target = event.target; + target.value = target.valueAsNumber.toFixed(2); + }; + + const click_handler = line => { + removeRow(line.id); + }; + + function textsuggest_value_binding(value, line) { + if ($$self.$$.not_equal(line.category, value)) { + line.category = value; + $$invalidate(0, lines); + } + } + + function input_input_handler(each_value, i) { + each_value[i].amount = to_number(this.value); + $$invalidate(0, lines); + } + + $$self.$$set = $$props => { + if ("currencySymbol" in $$props) $$invalidate(1, currencySymbol = $$props.currencySymbol); + if ("txCache" in $$props) $$invalidate(2, txCache = $$props.txCache); + if ("lines" in $$props) $$invalidate(0, lines = $$props.lines); + }; + + $$self.$$.update = () => { + if ($$self.$$.dirty & /*lines*/ 1) { + $$invalidate(3, remainder = (-1 * lines.map(({ amount }) => amount).reduce((prev, curr) => curr + prev, 0)).toFixed(2)); + } + }; + + return [ + lines, + currencySymbol, + txCache, + remainder, + addRow, + removeRow, + formatAmount, + click_handler, + textsuggest_value_binding, + input_input_handler + ]; +} + +class ExpenseLinesInput extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-gbs5xa-style")) add_css$7(); + init$1(this, options, instance$8, create_fragment$8, safe_not_equal, { currencySymbol: 1, txCache: 2, lines: 0 }); + } +} + +/* src/ui/AddExpenseUI.svelte generated by Svelte v3.32.3 */ + +function add_css$8() { + var style = element("style"); + style.id = "svelte-14kuf5p-style"; + style.textContent = ".form-row.svelte-14kuf5p{padding:5px 0;display:flex}"; + append(document.head, style); +} + +function create_fragment$9(ctx) { + let h2; + let t1; + let div1; + let calendar; + let updating_selectedId; + let t2; + let div0; + let textsuggest; + let updating_value; + let t3; + let expenselinesinput; + let t4; + let button; + let current; + let mounted; + let dispose; + + function calendar_selectedId_binding(value) { + /*calendar_selectedId_binding*/ ctx[10](value); + } + + let calendar_props = { + today: /*today*/ ctx[4], + onClickDay: /*selectDay*/ ctx[6], + showWeekNums: false + }; + + if (/*selectedDay*/ ctx[2] !== void 0) { + calendar_props.selectedId = /*selectedDay*/ ctx[2]; + } + + calendar = new Calendar({ props: calendar_props }); + binding_callbacks.push(() => bind(calendar, "selectedId", calendar_selectedId_binding)); + + function textsuggest_value_binding(value) { + /*textsuggest_value_binding*/ ctx[11](value); + } + + let textsuggest_props = { + placeholder: "Payee", + suggestions: /*txCache*/ ctx[1].payees, + classes: "expense-payee" + }; + + if (/*payee*/ ctx[3] !== void 0) { + textsuggest_props.value = /*payee*/ ctx[3]; + } + + textsuggest = new TextSuggest({ props: textsuggest_props }); + binding_callbacks.push(() => bind(textsuggest, "value", textsuggest_value_binding)); + + expenselinesinput = new ExpenseLinesInput({ + props: { + currencySymbol: /*currencySymbol*/ ctx[0], + txCache: /*txCache*/ ctx[1], + lines: /*lines*/ ctx[5] + } + }); + + return { + c() { + h2 = element("h2"); + h2.textContent = "Add to Ledger"; + t1 = space(); + div1 = element("div"); + create_component(calendar.$$.fragment); + t2 = space(); + div0 = element("div"); + create_component(textsuggest.$$.fragment); + t3 = space(); + create_component(expenselinesinput.$$.fragment); + t4 = space(); + button = element("button"); + button.textContent = "Save"; + attr(div0, "class", "form-row svelte-14kuf5p"); + attr(div1, "class", "ledger-add-expense-form"); + }, + m(target, anchor) { + insert(target, h2, anchor); + insert(target, t1, anchor); + insert(target, div1, anchor); + mount_component(calendar, div1, null); + append(div1, t2); + append(div1, div0); + mount_component(textsuggest, div0, null); + append(div1, t3); + mount_component(expenselinesinput, div1, null); + append(div1, t4); + append(div1, button); + current = true; + + if (!mounted) { + dispose = listen(button, "click", /*save*/ ctx[7]); + mounted = true; + } + }, + p(ctx, [dirty]) { + const calendar_changes = {}; + + if (!updating_selectedId && dirty & /*selectedDay*/ 4) { + updating_selectedId = true; + calendar_changes.selectedId = /*selectedDay*/ ctx[2]; + add_flush_callback(() => updating_selectedId = false); + } + + calendar.$set(calendar_changes); + const textsuggest_changes = {}; + if (dirty & /*txCache*/ 2) textsuggest_changes.suggestions = /*txCache*/ ctx[1].payees; + + if (!updating_value && dirty & /*payee*/ 8) { + updating_value = true; + textsuggest_changes.value = /*payee*/ ctx[3]; + add_flush_callback(() => updating_value = false); + } + + textsuggest.$set(textsuggest_changes); + const expenselinesinput_changes = {}; + if (dirty & /*currencySymbol*/ 1) expenselinesinput_changes.currencySymbol = /*currencySymbol*/ ctx[0]; + if (dirty & /*txCache*/ 2) expenselinesinput_changes.txCache = /*txCache*/ ctx[1]; + expenselinesinput.$set(expenselinesinput_changes); + }, + i(local) { + if (current) return; + transition_in(calendar.$$.fragment, local); + transition_in(textsuggest.$$.fragment, local); + transition_in(expenselinesinput.$$.fragment, local); + current = true; + }, + o(local) { + transition_out(calendar.$$.fragment, local); + transition_out(textsuggest.$$.fragment, local); + transition_out(expenselinesinput.$$.fragment, local); + current = false; + }, + d(detaching) { + if (detaching) detach(h2); + if (detaching) detach(t1); + if (detaching) detach(div1); + destroy_component(calendar); + destroy_component(textsuggest); + destroy_component(expenselinesinput); + mounted = false; + dispose(); + } + }; +} + +function instance$9($$self, $$props, $$invalidate) { + + + let { currencySymbol } = $$props; + let { txCache } = $$props; + let { saveFn } = $$props; + let { close } = $$props; + let today = window.moment(); + let selectedDay; + let payee; + + let lines = [ + { + category: "", + amount: 0, + id: 1, + currency: currencySymbol, + reconcile: "", + comment: undefined + }, + { + category: "", + amount: 0, + id: 2, + currency: currencySymbol, + reconcile: "", + comment: undefined + } + ]; + + const selectDay = date => { + $$invalidate(2, selectedDay = `day-` + date.startOf("day").format()); + }; + + selectDay(window.moment().clone()); + + const save = () => __awaiter(void 0, void 0, void 0, function* () { + const dateMatches = (/[\d]{4}-[\d]{2}-[\d]{2}/).exec(selectedDay); + + if (!dateMatches || dateMatches.length !== 1) { + new obsidian.Notice("Unable to determine selected date"); + console.error("ledger: Unable to process selected date: " + selectedDay); + return; + } + + const date = dateMatches[0].replace(/-/g, "/"); + + if (!payee || payee === "") { + new obsidian.Notice("Payee must not be empty"); + return; + } else if (lines.some(({ category }) => category === "")) { + new obsidian.Notice("Transaction lines must have a category"); + return; + } + + const tx = { + type: "tx", + value: { + check: undefined, + date, + payee, + expenselines: lines + } + }; + + yield saveFn(tx); + close(); + }); + + function calendar_selectedId_binding(value) { + selectedDay = value; + $$invalidate(2, selectedDay); + } + + function textsuggest_value_binding(value) { + payee = value; + $$invalidate(3, payee); + } + + $$self.$$set = $$props => { + if ("currencySymbol" in $$props) $$invalidate(0, currencySymbol = $$props.currencySymbol); + if ("txCache" in $$props) $$invalidate(1, txCache = $$props.txCache); + if ("saveFn" in $$props) $$invalidate(8, saveFn = $$props.saveFn); + if ("close" in $$props) $$invalidate(9, close = $$props.close); + }; + + return [ + currencySymbol, + txCache, + selectedDay, + payee, + today, + lines, + selectDay, + save, + saveFn, + close, + calendar_selectedId_binding, + textsuggest_value_binding + ]; +} + +class AddExpenseUI extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-14kuf5p-style")) add_css$8(); + + init$1(this, options, instance$9, create_fragment$9, safe_not_equal, { + currencySymbol: 0, + txCache: 1, + saveFn: 8, + close: 9 + }); + } +} + +class LedgerPlugin extends obsidian.Plugin { + constructor() { + super(...arguments); + this.updateTransactionCache = () => __awaiter(this, void 0, void 0, function* () { + console.debug('ledger: Updating the transaction cache'); + this.txCache = yield getTransactionCache(this.app.metadataCache, this.app.vault, this.settings); + }); + this.switchToLedgerView = () => { + const activeLeaf = this.app.workspace.getMostRecentLeaf(); + const viewState = activeLeaf.getViewState().state; + if (!this.settings.enableLedgerVis || + !viewState || + viewState.file !== this.settings.ledgerFile || + viewState.mode !== 'preview') { + // Only render when previewing the Ledger file + return; + } + const vs = activeLeaf.getViewState(); + vs.type = 'ledger'; + activeLeaf.setViewState(vs); + }; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + console.log('ledger: Loading plugin v' + this.manifest.version); + yield this.loadSettings(); + this.addSettingTab(new SettingsTab(this)); + obsidian.addIcon('ledger', billIcon); + this.addRibbonIcon('ledger', 'Add to Ledger', () => { + new AddExpenseModal(this).open(); + }); + this.registerEvent(this.app.vault.on('modify', (file) => { + if (file.path === this.settings.ledgerFile) { + this.updateTransactionCache(); + } + })); + this.registerView(LedgerViewType, (leaf) => new LedgerView(leaf, this)); + this.registerExtensions(['ledger'], LedgerViewType); + this.registerEvent(this.app.workspace.on('layout-change', this.switchToLedgerView)); + this.app.workspace.onLayoutReady(() => { + this.updateTransactionCache(); + }); + }); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.settings = settingsWithDefaults(yield this.loadData()); + this.saveData(this.settings); + }); + } +} +class AddExpenseModal extends obsidian.Modal { + constructor(plugin) { + super(plugin.app); + this.onOpen = () => { + const { contentEl } = this; + new AddExpenseUI({ + target: contentEl, + props: { + currencySymbol: this.plugin.settings.currencySymbol, + saveFn: (tx) => __awaiter(this, void 0, void 0, function* () { + const formatted = formatExpense(tx, this.plugin.settings); + yield appendLedger(this.app.metadataCache, this.app.vault, this.plugin.settings, formatted); + }), + txCache: this.plugin.txCache, + close: () => this.close(), + }, + }); + }; + this.onClose = () => { + const { contentEl } = this; + contentEl.empty(); + }; + this.plugin = plugin; + } +} +class SettingsTab extends obsidian.PluginSettingTab { + constructor(plugin) { + super(plugin.app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + containerEl.createEl('h2', { text: 'Ledger Plugin - Settings' }); + new obsidian.Setting(containerEl) + .setName('Currency Symbol') + .setDesc('Prefixes all transaction amounts') + .addText((text) => { + text.setPlaceholder('$').setValue(this.plugin.settings.currencySymbol); + text.inputEl.onblur = (e) => { + this.plugin.settings.currencySymbol = e.target.value; + this.plugin.saveData(this.plugin.settings); + }; + }); + new obsidian.Setting(containerEl) + .setName('Ledger File') + .setDesc('Path in the Vault to your Ledger file. Must be a .md file.') + .addText((text) => { + text + .setValue(this.plugin.settings.ledgerFile) + .setPlaceholder('Ledger.md'); + text.inputEl.onblur = (e) => { + this.plugin.settings.ledgerFile = e.target.value; + this.plugin.saveData(this.plugin.settings); + }; + }); + new obsidian.Setting(containerEl) + .setName('Include final line amount') + .setDesc('Include the dollar amount on the final line of a transaction. This value is optional, and is alway equal to the sum of the previous lines * -1.') + .addToggle((toggle) => { + toggle + .setValue(this.plugin.settings.includeFinalLineAmount) + .onChange((value) => { + this.plugin.settings.includeFinalLineAmount = value; + this.plugin.saveData(this.plugin.settings); + }); + }); + const div = containerEl.createEl('div', { + cls: 'ledger-donation', + }); + const donateText = document.createElement('p'); + donateText.appendText('If this plugin adds value for you and you would like to help support ' + + 'continued development, please use the buttons below:'); + div.appendChild(donateText); + const parser = new DOMParser(); + div.appendChild(createDonateButton('https://paypal.me/tgrosinger', parser.parseFromString(paypal, 'text/xml').documentElement)); + div.appendChild(createDonateButton('https://www.buymeacoffee.com/tgrosinger', parser.parseFromString(buyMeACoffee, 'text/xml').documentElement)); + } +} +const createDonateButton = (link, img) => { + const a = document.createElement('a'); + a.setAttribute('href', link); + a.addClass('ledger-donate-button'); + a.appendChild(img); + return a; +}; + +module.exports = LedgerPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9tb28vbW9vLmpzIiwiZ3JhbW1hci9sZWRnZXIudHMiLCJub2RlX21vZHVsZXMvbG9kYXNoL2xvZGFzaC5qcyIsIm5vZGVfbW9kdWxlcy9uZWFybGV5L2xpYi9uZWFybGV5LmpzIiwic3JjL3BhcnNlci50cyIsInNyYy9maWxlLWludGVyZmFjZS50cyIsInNyYy9ncmFwaGljcy50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY3JlYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbWF0Y2hlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZHJlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2pvaW4uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3R5bGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi90ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbG93ZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaXRlcmF0b3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXJBcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yb3VuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ludGVycG9sYXRlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZVZhcnlpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL29uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vcmVtb3ZlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0QWxsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zdHlsZVR3ZWVuLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHRUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RyYW5zaXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0U3BlY2lmaWVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblByZWZpeC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvblJvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jb250aW51b3VzLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aWNrRm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiLCJzcmMvbGVkZ2Vydmlldy50cyIsInNyYy9zZXR0aW5ncy50cyIsIm5vZGVfbW9kdWxlcy9zdmVsdGUvaW50ZXJuYWwvaW5kZXgubWpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9lbnVtcy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0UGFyZW50Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy93aXRoaW4uanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZU9mZnNldHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvb2Zmc2V0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdW5pcXVlQnkuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsInNyYy91aS9zdWdnZXN0LnRzIiwic3JjL3VpL1RleHRTdWdnZXN0LnN2ZWx0ZSIsIm5vZGVfbW9kdWxlcy9vYnNpZGlhbi1jYWxlbmRhci11aS9kaXN0L2luZGV4Lm1qcyIsInNyYy91aS9FeHBlbnNlTGluZXNJbnB1dC5zdmVsdGUiLCJzcmMvdWkvQWRkRXhwZW5zZVVJLnN2ZWx0ZSIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbiIsIihmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoW10sIGZhY3RvcnkpIC8qIGdsb2JhbCBkZWZpbmUgKi9cbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpXG4gIH0gZWxzZSB7XG4gICAgcm9vdC5tb28gPSBmYWN0b3J5KClcbiAgfVxufSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcbiAgdmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ1xuICB2YXIgaGFzU3RpY2t5ID0gdHlwZW9mIG5ldyBSZWdFeHAoKS5zdGlja3kgPT09ICdib29sZWFuJ1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgZnVuY3Rpb24gaXNSZWdFeHAobykgeyByZXR1cm4gbyAmJiB0b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBSZWdFeHBdJyB9XG4gIGZ1bmN0aW9uIGlzT2JqZWN0KG8pIHsgcmV0dXJuIG8gJiYgdHlwZW9mIG8gPT09ICdvYmplY3QnICYmICFpc1JlZ0V4cChvKSAmJiAhQXJyYXkuaXNBcnJheShvKSB9XG5cbiAgZnVuY3Rpb24gcmVFc2NhcGUocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpXG4gIH1cbiAgZnVuY3Rpb24gcmVHcm91cHMocykge1xuICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJ3wnICsgcylcbiAgICByZXR1cm4gcmUuZXhlYygnJykubGVuZ3RoIC0gMVxuICB9XG4gIGZ1bmN0aW9uIHJlQ2FwdHVyZShzKSB7XG4gICAgcmV0dXJuICcoJyArIHMgKyAnKSdcbiAgfVxuICBmdW5jdGlvbiByZVVuaW9uKHJlZ2V4cHMpIHtcbiAgICBpZiAoIXJlZ2V4cHMubGVuZ3RoKSByZXR1cm4gJyg/ISknXG4gICAgdmFyIHNvdXJjZSA9ICByZWdleHBzLm1hcChmdW5jdGlvbihzKSB7XG4gICAgICByZXR1cm4gXCIoPzpcIiArIHMgKyBcIilcIlxuICAgIH0pLmpvaW4oJ3wnKVxuICAgIHJldHVybiBcIig/OlwiICsgc291cmNlICsgXCIpXCJcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2V4cE9yTGl0ZXJhbChvYmopIHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAnKD86JyArIHJlRXNjYXBlKG9iaikgKyAnKSdcblxuICAgIH0gZWxzZSBpZiAoaXNSZWdFeHAob2JqKSkge1xuICAgICAgLy8gVE9ETzogY29uc2lkZXIgL3Ugc3VwcG9ydFxuICAgICAgaWYgKG9iai5pZ25vcmVDYXNlKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZ0V4cCAvaSBmbGFnIG5vdCBhbGxvd2VkJylcbiAgICAgIGlmIChvYmouZ2xvYmFsKSB0aHJvdyBuZXcgRXJyb3IoJ1JlZ0V4cCAvZyBmbGFnIGlzIGltcGxpZWQnKVxuICAgICAgaWYgKG9iai5zdGlja3kpIHRocm93IG5ldyBFcnJvcignUmVnRXhwIC95IGZsYWcgaXMgaW1wbGllZCcpXG4gICAgICBpZiAob2JqLm11bHRpbGluZSkgdGhyb3cgbmV3IEVycm9yKCdSZWdFeHAgL20gZmxhZyBpcyBpbXBsaWVkJylcbiAgICAgIHJldHVybiBvYmouc291cmNlXG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYSBwYXR0ZXJuOiAnICsgb2JqKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9iamVjdFRvUnVsZXMob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpXG4gICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgdmFyIHRoaW5nID0gb2JqZWN0W2tleV1cbiAgICAgIHZhciBydWxlcyA9IFtdLmNvbmNhdCh0aGluZylcbiAgICAgIGlmIChrZXkgPT09ICdpbmNsdWRlJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJ1bGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe2luY2x1ZGU6IHJ1bGVzW2pdfSlcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgdmFyIG1hdGNoID0gW11cbiAgICAgIHJ1bGVzLmZvckVhY2goZnVuY3Rpb24ocnVsZSkge1xuICAgICAgICBpZiAoaXNPYmplY3QocnVsZSkpIHtcbiAgICAgICAgICBpZiAobWF0Y2gubGVuZ3RoKSByZXN1bHQucHVzaChydWxlT3B0aW9ucyhrZXksIG1hdGNoKSlcbiAgICAgICAgICByZXN1bHQucHVzaChydWxlT3B0aW9ucyhrZXksIHJ1bGUpKVxuICAgICAgICAgIG1hdGNoID0gW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtYXRjaC5wdXNoKHJ1bGUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAobWF0Y2gubGVuZ3RoKSByZXN1bHQucHVzaChydWxlT3B0aW9ucyhrZXksIG1hdGNoKSlcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgZnVuY3Rpb24gYXJyYXlUb1J1bGVzKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG9iaiA9IGFycmF5W2ldXG4gICAgICBpZiAob2JqLmluY2x1ZGUpIHtcbiAgICAgICAgdmFyIGluY2x1ZGUgPSBbXS5jb25jYXQob2JqLmluY2x1ZGUpXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5jbHVkZS5sZW5ndGg7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHtpbmNsdWRlOiBpbmNsdWRlW2pdfSlcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKCFvYmoudHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1bGUgaGFzIG5vIHR5cGU6ICcgKyBKU09OLnN0cmluZ2lmeShvYmopKVxuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2gocnVsZU9wdGlvbnMob2JqLnR5cGUsIG9iaikpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bGVPcHRpb25zKHR5cGUsIG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSkge1xuICAgICAgb2JqID0geyBtYXRjaDogb2JqIH1cbiAgICB9XG4gICAgaWYgKG9iai5pbmNsdWRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdGNoaW5nIHJ1bGVzIGNhbm5vdCBhbHNvIGluY2x1ZGUgc3RhdGVzJylcbiAgICB9XG5cbiAgICAvLyBuYi4gZXJyb3IgYW5kIGZhbGxiYWNrIGltcGx5IGxpbmVCcmVha3NcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIGRlZmF1bHRUeXBlOiB0eXBlLFxuICAgICAgbGluZUJyZWFrczogISFvYmouZXJyb3IgfHwgISFvYmouZmFsbGJhY2ssXG4gICAgICBwb3A6IGZhbHNlLFxuICAgICAgbmV4dDogbnVsbCxcbiAgICAgIHB1c2g6IG51bGwsXG4gICAgICBlcnJvcjogZmFsc2UsXG4gICAgICBmYWxsYmFjazogZmFsc2UsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIHR5cGU6IG51bGwsXG4gICAgICBzaG91bGRUaHJvdzogZmFsc2UsXG4gICAgfVxuXG4gICAgLy8gQXZvaWQgT2JqZWN0LmFzc2lnbigpLCBzbyB3ZSBzdXBwb3J0IElFOStcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgb3B0aW9uc1trZXldID0gb2JqW2tleV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0eXBlIHRyYW5zZm9ybSBjYW5ub3QgYmUgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudHlwZSA9PT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gb3B0aW9ucy50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUeXBlIHRyYW5zZm9ybSBjYW5ub3QgYmUgYSBzdHJpbmcgKHR5cGUgJ1wiICsgb3B0aW9ucy50eXBlICsgXCInIGZvciB0b2tlbiAnXCIgKyB0eXBlICsgXCInKVwiKVxuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgdG8gYXJyYXlcbiAgICB2YXIgbWF0Y2ggPSBvcHRpb25zLm1hdGNoXG4gICAgb3B0aW9ucy5tYXRjaCA9IEFycmF5LmlzQXJyYXkobWF0Y2gpID8gbWF0Y2ggOiBtYXRjaCA/IFttYXRjaF0gOiBbXVxuICAgIG9wdGlvbnMubWF0Y2guc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICByZXR1cm4gaXNSZWdFeHAoYSkgJiYgaXNSZWdFeHAoYikgPyAwXG4gICAgICAgICAgIDogaXNSZWdFeHAoYikgPyAtMSA6IGlzUmVnRXhwKGEpID8gKzEgOiBiLmxlbmd0aCAtIGEubGVuZ3RoXG4gICAgfSlcbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgZnVuY3Rpb24gdG9SdWxlcyhzcGVjKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3BlYykgPyBhcnJheVRvUnVsZXMoc3BlYykgOiBvYmplY3RUb1J1bGVzKHNwZWMpXG4gIH1cblxuICB2YXIgZGVmYXVsdEVycm9yUnVsZSA9IHJ1bGVPcHRpb25zKCdlcnJvcicsIHtsaW5lQnJlYWtzOiB0cnVlLCBzaG91bGRUaHJvdzogdHJ1ZX0pXG4gIGZ1bmN0aW9uIGNvbXBpbGVSdWxlcyhydWxlcywgaGFzU3RhdGVzKSB7XG4gICAgdmFyIGVycm9yUnVsZSA9IG51bGxcbiAgICB2YXIgZmFzdCA9IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICB2YXIgZmFzdEFsbG93ZWQgPSB0cnVlXG4gICAgdmFyIHVuaWNvZGVGbGFnID0gbnVsbFxuICAgIHZhciBncm91cHMgPSBbXVxuICAgIHZhciBwYXJ0cyA9IFtdXG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIGZhbGxiYWNrIHJ1bGUsIHRoZW4gZGlzYWJsZSBmYXN0IG1hdGNoaW5nXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJ1bGVzW2ldLmZhbGxiYWNrKSB7XG4gICAgICAgIGZhc3RBbGxvd2VkID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHJ1bGVzW2ldXG5cbiAgICAgIGlmIChvcHRpb25zLmluY2x1ZGUpIHtcbiAgICAgICAgLy8gYWxsIHZhbGlkIGluY2x1c2lvbnMgYXJlIHJlbW92ZWQgYnkgc3RhdGVzKCkgcHJlcHJvY2Vzc29yXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5oZXJpdGFuY2UgaXMgbm90IGFsbG93ZWQgaW4gc3RhdGVsZXNzIGxleGVycycpXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmVycm9yIHx8IG9wdGlvbnMuZmFsbGJhY2spIHtcbiAgICAgICAgLy8gZXJyb3JSdWxlIGNhbiBvbmx5IGJlIHNldCBvbmNlXG4gICAgICAgIGlmIChlcnJvclJ1bGUpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuZmFsbGJhY2sgPT09ICFlcnJvclJ1bGUuZmFsbGJhY2spIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk11bHRpcGxlIFwiICsgKG9wdGlvbnMuZmFsbGJhY2sgPyBcImZhbGxiYWNrXCIgOiBcImVycm9yXCIpICsgXCIgcnVsZXMgbm90IGFsbG93ZWQgKGZvciB0b2tlbiAnXCIgKyBvcHRpb25zLmRlZmF1bHRUeXBlICsgXCInKVwiKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWxsYmFjayBhbmQgZXJyb3IgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAoZm9yIHRva2VuICdcIiArIG9wdGlvbnMuZGVmYXVsdFR5cGUgKyBcIicpXCIpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yUnVsZSA9IG9wdGlvbnNcbiAgICAgIH1cblxuICAgICAgdmFyIG1hdGNoID0gb3B0aW9ucy5tYXRjaC5zbGljZSgpXG4gICAgICBpZiAoZmFzdEFsbG93ZWQpIHtcbiAgICAgICAgd2hpbGUgKG1hdGNoLmxlbmd0aCAmJiB0eXBlb2YgbWF0Y2hbMF0gPT09ICdzdHJpbmcnICYmIG1hdGNoWzBdLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHZhciB3b3JkID0gbWF0Y2guc2hpZnQoKVxuICAgICAgICAgIGZhc3Rbd29yZC5jaGFyQ29kZUF0KDApXSA9IG9wdGlvbnNcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBXYXJuIGFib3V0IGluYXBwcm9wcmlhdGUgc3RhdGUtc3dpdGNoaW5nIG9wdGlvbnNcbiAgICAgIGlmIChvcHRpb25zLnBvcCB8fCBvcHRpb25zLnB1c2ggfHwgb3B0aW9ucy5uZXh0KSB7XG4gICAgICAgIGlmICghaGFzU3RhdGVzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdGUtc3dpdGNoaW5nIG9wdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHN0YXRlbGVzcyBsZXhlcnMgKGZvciB0b2tlbiAnXCIgKyBvcHRpb25zLmRlZmF1bHRUeXBlICsgXCInKVwiKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmZhbGxiYWNrKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RhdGUtc3dpdGNoaW5nIG9wdGlvbnMgYXJlIG5vdCBhbGxvd2VkIG9uIGZhbGxiYWNrIHRva2VucyAoZm9yIHRva2VuICdcIiArIG9wdGlvbnMuZGVmYXVsdFR5cGUgKyBcIicpXCIpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT25seSBydWxlcyB3aXRoIGEgLm1hdGNoIGFyZSBpbmNsdWRlZCBpbiB0aGUgUmVnRXhwXG4gICAgICBpZiAobWF0Y2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBmYXN0QWxsb3dlZCA9IGZhbHNlXG5cbiAgICAgIGdyb3Vwcy5wdXNoKG9wdGlvbnMpXG5cbiAgICAgIC8vIENoZWNrIHVuaWNvZGUgZmxhZyBpcyB1c2VkIGV2ZXJ5d2hlcmUgb3Igbm93aGVyZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXRjaC5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgb2JqID0gbWF0Y2hbal1cbiAgICAgICAgaWYgKCFpc1JlZ0V4cChvYmopKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1bmljb2RlRmxhZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHVuaWNvZGVGbGFnID0gb2JqLnVuaWNvZGVcbiAgICAgICAgfSBlbHNlIGlmICh1bmljb2RlRmxhZyAhPT0gb2JqLnVuaWNvZGUgJiYgb3B0aW9ucy5mYWxsYmFjayA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lmIG9uZSBydWxlIGlzIC91IHRoZW4gYWxsIG11c3QgYmUnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnZlcnQgdG8gUmVnRXhwXG4gICAgICB2YXIgcGF0ID0gcmVVbmlvbihtYXRjaC5tYXAocmVnZXhwT3JMaXRlcmFsKSlcblxuICAgICAgLy8gdmFsaWRhdGVcbiAgICAgIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKHBhdClcbiAgICAgIGlmIChyZWdleHAudGVzdChcIlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWdFeHAgbWF0Y2hlcyBlbXB0eSBzdHJpbmc6IFwiICsgcmVnZXhwKVxuICAgICAgfVxuICAgICAgdmFyIGdyb3VwQ291bnQgPSByZUdyb3VwcyhwYXQpXG4gICAgICBpZiAoZ3JvdXBDb3VudCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVnRXhwIGhhcyBjYXB0dXJlIGdyb3VwczogXCIgKyByZWdleHAgKyBcIlxcblVzZSAoPzog4oCmICkgaW5zdGVhZFwiKVxuICAgICAgfVxuXG4gICAgICAvLyB0cnkgYW5kIGRldGVjdCBydWxlcyBtYXRjaGluZyBuZXdsaW5lc1xuICAgICAgaWYgKCFvcHRpb25zLmxpbmVCcmVha3MgJiYgcmVnZXhwLnRlc3QoJ1xcbicpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUnVsZSBzaG91bGQgZGVjbGFyZSBsaW5lQnJlYWtzOiAnICsgcmVnZXhwKVxuICAgICAgfVxuXG4gICAgICAvLyBzdG9yZSByZWdleFxuICAgICAgcGFydHMucHVzaChyZUNhcHR1cmUocGF0KSlcbiAgICB9XG5cblxuICAgIC8vIElmIHRoZXJlJ3Mgbm8gZmFsbGJhY2sgcnVsZSwgdXNlIHRoZSBzdGlja3kgZmxhZyBzbyB3ZSBvbmx5IGxvb2sgZm9yXG4gICAgLy8gbWF0Y2hlcyBhdCB0aGUgY3VycmVudCBpbmRleC5cbiAgICAvL1xuICAgIC8vIElmIHdlIGRvbid0IHN1cHBvcnQgdGhlIHN0aWNreSBmbGFnLCB0aGVuIGZha2UgaXQgdXNpbmcgYW4gaXJyZWZ1dGFibGVcbiAgICAvLyBtYXRjaCAoaS5lLiBhbiBlbXB0eSBwYXR0ZXJuKS5cbiAgICB2YXIgZmFsbGJhY2tSdWxlID0gZXJyb3JSdWxlICYmIGVycm9yUnVsZS5mYWxsYmFja1xuICAgIHZhciBmbGFncyA9IGhhc1N0aWNreSAmJiAhZmFsbGJhY2tSdWxlID8gJ3ltJyA6ICdnbSdcbiAgICB2YXIgc3VmZml4ID0gaGFzU3RpY2t5IHx8IGZhbGxiYWNrUnVsZSA/ICcnIDogJ3wnXG5cbiAgICBpZiAodW5pY29kZUZsYWcgPT09IHRydWUpIGZsYWdzICs9IFwidVwiXG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IFJlZ0V4cChyZVVuaW9uKHBhcnRzKSArIHN1ZmZpeCwgZmxhZ3MpXG4gICAgcmV0dXJuIHtyZWdleHA6IGNvbWJpbmVkLCBncm91cHM6IGdyb3VwcywgZmFzdDogZmFzdCwgZXJyb3I6IGVycm9yUnVsZSB8fCBkZWZhdWx0RXJyb3JSdWxlfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcGlsZShydWxlcykge1xuICAgIHZhciByZXN1bHQgPSBjb21waWxlUnVsZXModG9SdWxlcyhydWxlcykpXG4gICAgcmV0dXJuIG5ldyBMZXhlcih7c3RhcnQ6IHJlc3VsdH0sICdzdGFydCcpXG4gIH1cblxuICBmdW5jdGlvbiBjaGVja1N0YXRlR3JvdXAoZywgbmFtZSwgbWFwKSB7XG4gICAgdmFyIHN0YXRlID0gZyAmJiAoZy5wdXNoIHx8IGcubmV4dClcbiAgICBpZiAoc3RhdGUgJiYgIW1hcFtzdGF0ZV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgc3RhdGUgJ1wiICsgc3RhdGUgKyBcIicgKGluIHRva2VuICdcIiArIGcuZGVmYXVsdFR5cGUgKyBcIicgb2Ygc3RhdGUgJ1wiICsgbmFtZSArIFwiJylcIilcbiAgICB9XG4gICAgaWYgKGcgJiYgZy5wb3AgJiYgK2cucG9wICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwb3AgbXVzdCBiZSAxIChpbiB0b2tlbiAnXCIgKyBnLmRlZmF1bHRUeXBlICsgXCInIG9mIHN0YXRlICdcIiArIG5hbWUgKyBcIicpXCIpXG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNvbXBpbGVTdGF0ZXMoc3RhdGVzLCBzdGFydCkge1xuICAgIHZhciBhbGwgPSBzdGF0ZXMuJGFsbCA/IHRvUnVsZXMoc3RhdGVzLiRhbGwpIDogW11cbiAgICBkZWxldGUgc3RhdGVzLiRhbGxcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc3RhdGVzKVxuICAgIGlmICghc3RhcnQpIHN0YXJ0ID0ga2V5c1swXVxuXG4gICAgdmFyIHJ1bGVNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgcnVsZU1hcFtrZXldID0gdG9SdWxlcyhzdGF0ZXNba2V5XSkuY29uY2F0KGFsbClcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgdmFyIHJ1bGVzID0gcnVsZU1hcFtrZXldXG4gICAgICB2YXIgaW5jbHVkZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJ1bGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBydWxlID0gcnVsZXNbal1cbiAgICAgICAgaWYgKCFydWxlLmluY2x1ZGUpIGNvbnRpbnVlXG4gICAgICAgIHZhciBzcGxpY2UgPSBbaiwgMV1cbiAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZSAhPT0ga2V5ICYmICFpbmNsdWRlZFtydWxlLmluY2x1ZGVdKSB7XG4gICAgICAgICAgaW5jbHVkZWRbcnVsZS5pbmNsdWRlXSA9IHRydWVcbiAgICAgICAgICB2YXIgbmV3UnVsZXMgPSBydWxlTWFwW3J1bGUuaW5jbHVkZV1cbiAgICAgICAgICBpZiAoIW5ld1J1bGVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaW5jbHVkZSBub25leGlzdGVudCBzdGF0ZSAnXCIgKyBydWxlLmluY2x1ZGUgKyBcIicgKGluIHN0YXRlICdcIiArIGtleSArIFwiJylcIilcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuZXdSdWxlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIG5ld1J1bGUgPSBuZXdSdWxlc1trXVxuICAgICAgICAgICAgaWYgKHJ1bGVzLmluZGV4T2YobmV3UnVsZSkgIT09IC0xKSBjb250aW51ZVxuICAgICAgICAgICAgc3BsaWNlLnB1c2gobmV3UnVsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcnVsZXMuc3BsaWNlLmFwcGx5KHJ1bGVzLCBzcGxpY2UpXG4gICAgICAgIGotLVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXVxuICAgICAgbWFwW2tleV0gPSBjb21waWxlUnVsZXMocnVsZU1hcFtrZXldLCB0cnVlKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5hbWUgPSBrZXlzW2ldXG4gICAgICB2YXIgc3RhdGUgPSBtYXBbbmFtZV1cbiAgICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHNcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZ3JvdXBzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoZWNrU3RhdGVHcm91cChncm91cHNbal0sIG5hbWUsIG1hcClcbiAgICAgIH1cbiAgICAgIHZhciBmYXN0S2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN0YXRlLmZhc3QpXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZhc3RLZXlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNoZWNrU3RhdGVHcm91cChzdGF0ZS5mYXN0W2Zhc3RLZXlzW2pdXSwgbmFtZSwgbWFwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgTGV4ZXIobWFwLCBzdGFydClcbiAgfVxuXG4gIGZ1bmN0aW9uIGtleXdvcmRUcmFuc2Zvcm0obWFwKSB7XG4gICAgdmFyIHJldmVyc2VNYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgdmFyIGJ5TGVuZ3RoID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIHZhciB0eXBlcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1hcClcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdG9rZW5UeXBlID0gdHlwZXNbaV1cbiAgICAgIHZhciBpdGVtID0gbWFwW3Rva2VuVHlwZV1cbiAgICAgIHZhciBrZXl3b3JkTGlzdCA9IEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW2l0ZW1dXG4gICAgICBrZXl3b3JkTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGtleXdvcmQpIHtcbiAgICAgICAgKGJ5TGVuZ3RoW2tleXdvcmQubGVuZ3RoXSA9IGJ5TGVuZ3RoW2tleXdvcmQubGVuZ3RoXSB8fCBbXSkucHVzaChrZXl3b3JkKVxuICAgICAgICBpZiAodHlwZW9mIGtleXdvcmQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5d29yZCBtdXN0IGJlIHN0cmluZyAoaW4ga2V5d29yZCAnXCIgKyB0b2tlblR5cGUgKyBcIicpXCIpXG4gICAgICAgIH1cbiAgICAgICAgcmV2ZXJzZU1hcFtrZXl3b3JkXSA9IHRva2VuVHlwZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBmYXN0IHN0cmluZyBsb29rdXBcbiAgICAvLyBodHRwczovL2pzcGVyZi5jb20vc3RyaW5nLWxvb2t1cHNcbiAgICBmdW5jdGlvbiBzdHIoeCkgeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeCkgfVxuICAgIHZhciBzb3VyY2UgPSAnJ1xuICAgIHNvdXJjZSArPSAnc3dpdGNoICh2YWx1ZS5sZW5ndGgpIHtcXG4nXG4gICAgZm9yICh2YXIgbGVuZ3RoIGluIGJ5TGVuZ3RoKSB7XG4gICAgICB2YXIga2V5d29yZHMgPSBieUxlbmd0aFtsZW5ndGhdXG4gICAgICBzb3VyY2UgKz0gJ2Nhc2UgJyArIGxlbmd0aCArICc6XFxuJ1xuICAgICAgc291cmNlICs9ICdzd2l0Y2ggKHZhbHVlKSB7XFxuJ1xuICAgICAga2V5d29yZHMuZm9yRWFjaChmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICAgIHZhciB0b2tlblR5cGUgPSByZXZlcnNlTWFwW2tleXdvcmRdXG4gICAgICAgIHNvdXJjZSArPSAnY2FzZSAnICsgc3RyKGtleXdvcmQpICsgJzogcmV0dXJuICcgKyBzdHIodG9rZW5UeXBlKSArICdcXG4nXG4gICAgICB9KVxuICAgICAgc291cmNlICs9ICd9XFxuJ1xuICAgIH1cbiAgICBzb3VyY2UgKz0gJ31cXG4nXG4gICAgcmV0dXJuIEZ1bmN0aW9uKCd2YWx1ZScsIHNvdXJjZSkgLy8gdHlwZVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICB2YXIgTGV4ZXIgPSBmdW5jdGlvbihzdGF0ZXMsIHN0YXRlKSB7XG4gICAgdGhpcy5zdGFydFN0YXRlID0gc3RhdGVcbiAgICB0aGlzLnN0YXRlcyA9IHN0YXRlc1xuICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICB0aGlzLnN0YWNrID0gW11cbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIExleGVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEsIGluZm8pIHtcbiAgICB0aGlzLmJ1ZmZlciA9IGRhdGEgfHwgJydcbiAgICB0aGlzLmluZGV4ID0gMFxuICAgIHRoaXMubGluZSA9IGluZm8gPyBpbmZvLmxpbmUgOiAxXG4gICAgdGhpcy5jb2wgPSBpbmZvID8gaW5mby5jb2wgOiAxXG4gICAgdGhpcy5xdWV1ZWRUb2tlbiA9IGluZm8gPyBpbmZvLnF1ZXVlZFRva2VuIDogbnVsbFxuICAgIHRoaXMucXVldWVkVGhyb3cgPSBpbmZvID8gaW5mby5xdWV1ZWRUaHJvdyA6IG51bGxcbiAgICB0aGlzLnNldFN0YXRlKGluZm8gPyBpbmZvLnN0YXRlIDogdGhpcy5zdGFydFN0YXRlKVxuICAgIHRoaXMuc3RhY2sgPSBpbmZvICYmIGluZm8uc3RhY2sgPyBpbmZvLnN0YWNrLnNsaWNlKCkgOiBbXVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBMZXhlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICBjb2w6IHRoaXMuY29sLFxuICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICBzdGFjazogdGhpcy5zdGFjay5zbGljZSgpLFxuICAgICAgcXVldWVkVG9rZW46IHRoaXMucXVldWVkVG9rZW4sXG4gICAgICBxdWV1ZWRUaHJvdzogdGhpcy5xdWV1ZWRUaHJvdyxcbiAgICB9XG4gIH1cblxuICBMZXhlci5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuICAgIGlmICghc3RhdGUgfHwgdGhpcy5zdGF0ZSA9PT0gc3RhdGUpIHJldHVyblxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZVxuICAgIHZhciBpbmZvID0gdGhpcy5zdGF0ZXNbc3RhdGVdXG4gICAgdGhpcy5ncm91cHMgPSBpbmZvLmdyb3Vwc1xuICAgIHRoaXMuZXJyb3IgPSBpbmZvLmVycm9yXG4gICAgdGhpcy5yZSA9IGluZm8ucmVnZXhwXG4gICAgdGhpcy5mYXN0ID0gaW5mby5mYXN0XG4gIH1cblxuICBMZXhlci5wcm90b3R5cGUucG9wU3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuc3RhY2sucG9wKCkpXG4gIH1cblxuICBMZXhlci5wcm90b3R5cGUucHVzaFN0YXRlID0gZnVuY3Rpb24oc3RhdGUpIHtcbiAgICB0aGlzLnN0YWNrLnB1c2godGhpcy5zdGF0ZSlcbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlKVxuICB9XG5cbiAgdmFyIGVhdCA9IGhhc1N0aWNreSA/IGZ1bmN0aW9uKHJlLCBidWZmZXIpIHsgLy8gYXNzdW1lIHJlIGlzIC95XG4gICAgcmV0dXJuIHJlLmV4ZWMoYnVmZmVyKVxuICB9IDogZnVuY3Rpb24ocmUsIGJ1ZmZlcikgeyAvLyBhc3N1bWUgcmUgaXMgL2dcbiAgICB2YXIgbWF0Y2ggPSByZS5leGVjKGJ1ZmZlcilcbiAgICAvLyB3aWxsIGFsd2F5cyBtYXRjaCwgc2luY2Ugd2UgdXNlZCB0aGUgfCg/OikgdHJpY2tcbiAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hcbiAgfVxuXG4gIExleGVyLnByb3RvdHlwZS5fZ2V0R3JvdXAgPSBmdW5jdGlvbihtYXRjaCkge1xuICAgIHZhciBncm91cENvdW50ID0gdGhpcy5ncm91cHMubGVuZ3RoXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncm91cENvdW50OyBpKyspIHtcbiAgICAgIGlmIChtYXRjaFtpICsgMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cHNbaV1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCB0b2tlbiB0eXBlIGZvciBtYXRjaGVkIHRleHQnKVxuICB9XG5cbiAgZnVuY3Rpb24gdG9rZW5Ub1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVxuICB9XG5cbiAgTGV4ZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4XG5cbiAgICAvLyBJZiBhIGZhbGxiYWNrIHRva2VuIG1hdGNoZWQsIHdlIGRvbid0IG5lZWQgdG8gcmUtcnVuIHRoZSBSZWdFeHBcbiAgICBpZiAodGhpcy5xdWV1ZWRHcm91cCkge1xuICAgICAgdmFyIHRva2VuID0gdGhpcy5fdG9rZW4odGhpcy5xdWV1ZWRHcm91cCwgdGhpcy5xdWV1ZWRUZXh0LCBpbmRleClcbiAgICAgIHRoaXMucXVldWVkR3JvdXAgPSBudWxsXG4gICAgICB0aGlzLnF1ZXVlZFRleHQgPSBcIlwiXG4gICAgICByZXR1cm4gdG9rZW5cbiAgICB9XG5cbiAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXJcbiAgICBpZiAoaW5kZXggPT09IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAvLyBFT0ZcbiAgICB9XG5cbiAgICAvLyBGYXN0IG1hdGNoaW5nIGZvciBzaW5nbGUgY2hhcmFjdGVyc1xuICAgIHZhciBncm91cCA9IHRoaXMuZmFzdFtidWZmZXIuY2hhckNvZGVBdChpbmRleCldXG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdG9rZW4oZ3JvdXAsIGJ1ZmZlci5jaGFyQXQoaW5kZXgpLCBpbmRleClcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIFJlZ0V4cFxuICAgIHZhciByZSA9IHRoaXMucmVcbiAgICByZS5sYXN0SW5kZXggPSBpbmRleFxuICAgIHZhciBtYXRjaCA9IGVhdChyZSwgYnVmZmVyKVxuXG4gICAgLy8gRXJyb3IgdG9rZW5zIG1hdGNoIHRoZSByZW1haW5pbmcgYnVmZmVyXG4gICAgdmFyIGVycm9yID0gdGhpcy5lcnJvclxuICAgIGlmIChtYXRjaCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdG9rZW4oZXJyb3IsIGJ1ZmZlci5zbGljZShpbmRleCwgYnVmZmVyLmxlbmd0aCksIGluZGV4KVxuICAgIH1cblxuICAgIHZhciBncm91cCA9IHRoaXMuX2dldEdyb3VwKG1hdGNoKVxuICAgIHZhciB0ZXh0ID0gbWF0Y2hbMF1cblxuICAgIGlmIChlcnJvci5mYWxsYmFjayAmJiBtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRoaXMucXVldWVkR3JvdXAgPSBncm91cFxuICAgICAgdGhpcy5xdWV1ZWRUZXh0ID0gdGV4dFxuXG4gICAgICAvLyBGYWxsYmFjayB0b2tlbnMgY29udGFpbiB0aGUgdW5tYXRjaGVkIHBvcnRpb24gb2YgdGhlIGJ1ZmZlclxuICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuKGVycm9yLCBidWZmZXIuc2xpY2UoaW5kZXgsIG1hdGNoLmluZGV4KSwgaW5kZXgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuKGdyb3VwLCB0ZXh0LCBpbmRleClcbiAgfVxuXG4gIExleGVyLnByb3RvdHlwZS5fdG9rZW4gPSBmdW5jdGlvbihncm91cCwgdGV4dCwgb2Zmc2V0KSB7XG4gICAgLy8gY291bnQgbGluZSBicmVha3NcbiAgICB2YXIgbGluZUJyZWFrcyA9IDBcbiAgICBpZiAoZ3JvdXAubGluZUJyZWFrcykge1xuICAgICAgdmFyIG1hdGNoTkwgPSAvXFxuL2dcbiAgICAgIHZhciBubCA9IDFcbiAgICAgIGlmICh0ZXh0ID09PSAnXFxuJykge1xuICAgICAgICBsaW5lQnJlYWtzID0gMVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2hpbGUgKG1hdGNoTkwuZXhlYyh0ZXh0KSkgeyBsaW5lQnJlYWtzKys7IG5sID0gbWF0Y2hOTC5sYXN0SW5kZXggfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0b2tlbiA9IHtcbiAgICAgIHR5cGU6ICh0eXBlb2YgZ3JvdXAudHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiBncm91cC50eXBlKHRleHQpKSB8fCBncm91cC5kZWZhdWx0VHlwZSxcbiAgICAgIHZhbHVlOiB0eXBlb2YgZ3JvdXAudmFsdWUgPT09ICdmdW5jdGlvbicgPyBncm91cC52YWx1ZSh0ZXh0KSA6IHRleHQsXG4gICAgICB0ZXh0OiB0ZXh0LFxuICAgICAgdG9TdHJpbmc6IHRva2VuVG9TdHJpbmcsXG4gICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgIGxpbmVCcmVha3M6IGxpbmVCcmVha3MsXG4gICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICBjb2w6IHRoaXMuY29sLFxuICAgIH1cbiAgICAvLyBuYi4gYWRkaW5nIG1vcmUgcHJvcHMgdG8gdG9rZW4gb2JqZWN0IHdpbGwgbWFrZSBWOCBzYWQhXG5cbiAgICB2YXIgc2l6ZSA9IHRleHQubGVuZ3RoXG4gICAgdGhpcy5pbmRleCArPSBzaXplXG4gICAgdGhpcy5saW5lICs9IGxpbmVCcmVha3NcbiAgICBpZiAobGluZUJyZWFrcyAhPT0gMCkge1xuICAgICAgdGhpcy5jb2wgPSBzaXplIC0gbmwgKyAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sICs9IHNpemVcbiAgICB9XG5cbiAgICAvLyB0aHJvdywgaWYgbm8gcnVsZSB3aXRoIHtlcnJvcjogdHJ1ZX1cbiAgICBpZiAoZ3JvdXAuc2hvdWxkVGhyb3cpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLmZvcm1hdEVycm9yKHRva2VuLCBcImludmFsaWQgc3ludGF4XCIpKVxuICAgIH1cblxuICAgIGlmIChncm91cC5wb3ApIHRoaXMucG9wU3RhdGUoKVxuICAgIGVsc2UgaWYgKGdyb3VwLnB1c2gpIHRoaXMucHVzaFN0YXRlKGdyb3VwLnB1c2gpXG4gICAgZWxzZSBpZiAoZ3JvdXAubmV4dCkgdGhpcy5zZXRTdGF0ZShncm91cC5uZXh0KVxuXG4gICAgcmV0dXJuIHRva2VuXG4gIH1cblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgdmFyIExleGVySXRlcmF0b3IgPSBmdW5jdGlvbihsZXhlcikge1xuICAgICAgdGhpcy5sZXhlciA9IGxleGVyXG4gICAgfVxuXG4gICAgTGV4ZXJJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRva2VuID0gdGhpcy5sZXhlci5uZXh0KClcbiAgICAgIHJldHVybiB7dmFsdWU6IHRva2VuLCBkb25lOiAhdG9rZW59XG4gICAgfVxuXG4gICAgTGV4ZXJJdGVyYXRvci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBMZXhlci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBMZXhlckl0ZXJhdG9yKHRoaXMpXG4gICAgfVxuICB9XG5cbiAgTGV4ZXIucHJvdG90eXBlLmZvcm1hdEVycm9yID0gZnVuY3Rpb24odG9rZW4sIG1lc3NhZ2UpIHtcbiAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xuICAgICAgLy8gQW4gdW5kZWZpbmVkIHRva2VuIGluZGljYXRlcyBFT0ZcbiAgICAgIHZhciB0ZXh0ID0gdGhpcy5idWZmZXIuc2xpY2UodGhpcy5pbmRleClcbiAgICAgIHZhciB0b2tlbiA9IHtcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgb2Zmc2V0OiB0aGlzLmluZGV4LFxuICAgICAgICBsaW5lQnJlYWtzOiB0ZXh0LmluZGV4T2YoJ1xcbicpID09PSAtMSA/IDAgOiAxLFxuICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgIGNvbDogdGhpcy5jb2wsXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBzdGFydCA9IE1hdGgubWF4KDAsIHRva2VuLm9mZnNldCAtIHRva2VuLmNvbCArIDEpXG4gICAgdmFyIGVvbCA9IHRva2VuLmxpbmVCcmVha3MgPyB0b2tlbi50ZXh0LmluZGV4T2YoJ1xcbicpIDogdG9rZW4udGV4dC5sZW5ndGhcbiAgICB2YXIgZmlyc3RMaW5lID0gdGhpcy5idWZmZXIuc3Vic3RyaW5nKHN0YXJ0LCB0b2tlbi5vZmZzZXQgKyBlb2wpXG4gICAgbWVzc2FnZSArPSBcIiBhdCBsaW5lIFwiICsgdG9rZW4ubGluZSArIFwiIGNvbCBcIiArIHRva2VuLmNvbCArIFwiOlxcblxcblwiXG4gICAgbWVzc2FnZSArPSBcIiAgXCIgKyBmaXJzdExpbmUgKyBcIlxcblwiXG4gICAgbWVzc2FnZSArPSBcIiAgXCIgKyBBcnJheSh0b2tlbi5jb2wpLmpvaW4oXCIgXCIpICsgXCJeXCJcbiAgICByZXR1cm4gbWVzc2FnZVxuICB9XG5cbiAgTGV4ZXIucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBMZXhlcih0aGlzLnN0YXRlcywgdGhpcy5zdGF0ZSlcbiAgfVxuXG4gIExleGVyLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbih0b2tlblR5cGUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cblxuICByZXR1cm4ge1xuICAgIGNvbXBpbGU6IGNvbXBpbGUsXG4gICAgc3RhdGVzOiBjb21waWxlU3RhdGVzLFxuICAgIGVycm9yOiBPYmplY3QuZnJlZXplKHtlcnJvcjogdHJ1ZX0pLFxuICAgIGZhbGxiYWNrOiBPYmplY3QuZnJlZXplKHtmYWxsYmFjazogdHJ1ZX0pLFxuICAgIGtleXdvcmRzOiBrZXl3b3JkVHJhbnNmb3JtLFxuICB9XG5cbn0pKTtcbiIsIi8vIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG5lYXJsZXksIHZlcnNpb24gMi4yMC4xXG4vLyBodHRwOi8vZ2l0aHViLmNvbS9IYXJkbWF0aDEyMy9uZWFybGV5XG4vLyBCeXBhc3NlcyBUUzYxMzMuIEFsbG93IGRlY2xhcmVkIGJ1dCB1bnVzZWQgZnVuY3Rpb25zLlxuLy8gQHRzLWlnbm9yZVxuZnVuY3Rpb24gaWQoZCkgeyByZXR1cm4gZFswXTsgfVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vLWNvbnRleHQvbW9vXG5pbXBvcnQgbW9vIGZyb20gJ21vbyc7XG5jb25zdCBsZXhlciA9IG1vby5zdGF0ZXMoe1xuICAgIG1haW46IHtcbiAgICAgICAgZGF0ZTogeyBtYXRjaDogL1swLTldezR9Wy1cXC9dWzAtOV17Mn1bLVxcL11bMC05XXsyfS8sIG5leHQ6ICd0eFN0YXJ0JyB9LFxuICAgICAgICBhbGlhczogeyBtYXRjaDogJ2FsaWFzJywgbmV4dDogJ2FsaWFzJyB9LFxuICAgICAgICBjb21tZW50OiB7IG1hdGNoOiAvWzsjfF1bXlxcbl0rLywgdmFsdWU6IChzKSA9PiBzLnNsaWNlKDEpLnRyaW0oKSB9LFxuICAgICAgICBuZXdsaW5lOiB7IG1hdGNoOiAnXFxuJywgbGluZUJyZWFrczogdHJ1ZSB9LFxuICAgIH0sXG4gICAgdHhTdGFydDoge1xuICAgICAgICBjaGVjazogeyBtYXRjaDogL1xcKFswLTldK1xcKVsgXFx0XSsvLCB2YWx1ZTogKHMpID0+IHMudHJpbSgpLnNsaWNlKDEsIC0xKSB9LFxuICAgICAgICB3czogL1sgXFx0XSsvLFxuICAgICAgICByZWNvbmNpbGVkOiAvWyEqXS8sXG4gICAgICAgIHBheWVlOiB7IG1hdGNoOiAvW14hKjsjfFxcbl0rLywgdmFsdWU6IChzKSA9PiBzLnRyaW0oKSB9LFxuICAgICAgICBjb21tZW50OiB7IG1hdGNoOiAvWzsjfF1bXlxcbl0rLywgdmFsdWU6IChzKSA9PiBzLnNsaWNlKDEpLnRyaW0oKSB9LFxuICAgICAgICBuZXdsaW5lOiB7IG1hdGNoOiAnXFxuJywgbGluZUJyZWFrczogdHJ1ZSwgbmV4dDogJ2V4cGVuc2VMaW5lJyB9LFxuICAgIH0sXG4gICAgZXhwZW5zZUxpbmU6IHtcbiAgICAgICAgbmV3bGluZTogeyBtYXRjaDogJ1xcbicsIGxpbmVCcmVha3M6IHRydWUgfSxcbiAgICAgICAgd3M6IC9bIFxcdF0rLyxcbiAgICAgICAgbnVtYmVyOiB7IG1hdGNoOiAvLT9bMC05LixdKy8sIHZhbHVlOiAocykgPT4gcy5yZXBsYWNlKC8sL2csICcnKSB9LFxuICAgICAgICBjdXJyZW5jeTogL1skwqPigqTigqzigr/igrnCpeKCqdCgXS8sXG4gICAgICAgIHJlY29uY2lsZWQ6IC9bISpdLyxcbiAgICAgICAgY29tbWVudDogeyBtYXRjaDogL1s7I3xdW15cXG5dKy8sIHZhbHVlOiAocykgPT4gcy5zbGljZSgxKS50cmltKCkgfSxcbiAgICAgICAgY2F0ZWdvcnk6IHsgbWF0Y2g6IC9bXiTCo+KCpOKCrOKCv+KCucKl4oKp0KA7I3xcXG5dKy8sIHZhbHVlOiAocykgPT4gcy50cmltKCkgfSxcbiAgICB9LFxuICAgIGFsaWFzOiB7XG4gICAgICAgIGNhdGVnb3J5OiB7IG1hdGNoOiAvW2EtekEtWjAtOTogXSsvLCB2YWx1ZTogKHMpID0+IHMudHJpbSgpIH0sXG4gICAgICAgIGVxdWFsOiAnPScsXG4gICAgICAgIG5ld2xpbmU6IHsgbWF0Y2g6ICdcXG4nLCBsaW5lQnJlYWtzOiB0cnVlLCBuZXh0OiAnbWFpbicgfSxcbiAgICB9LFxufSk7XG47XG47XG47XG47XG5jb25zdCBncmFtbWFyID0ge1xuICAgIExleGVyOiBsZXhlcixcbiAgICBQYXJzZXJSdWxlczogW1xuICAgICAgICB7IFwibmFtZVwiOiBcIm1haW5cIiwgXCJzeW1ib2xzXCI6IFtcImVsZW1lbnRcIl0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJtYWluXCIsIFwic3ltYm9sc1wiOiBbXCJtYWluXCIsIChsZXhlci5oYXMoXCJuZXdsaW5lXCIpID8geyB0eXBlOiBcIm5ld2xpbmVcIiB9IDogbmV3bGluZSksIFwiZWxlbWVudFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoW3Jlc3QsICwgbF0pID0+IHsgcmV0dXJuIFtyZXN0LCBsXS5mbGF0KDEpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZWxlbWVudFwiLCBcInN5bWJvbHNcIjogW1widHJhbnNhY3Rpb25cIl0sIFwicG9zdHByb2Nlc3NcIjogKFt0XSkgPT4geyByZXR1cm4geyB0eXBlOiAndHgnLCB2YWx1ZTogdCB9OyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZWxlbWVudFwiLCBcInN5bWJvbHNcIjogWyhsZXhlci5oYXMoXCJjb21tZW50XCIpID8geyB0eXBlOiBcImNvbW1lbnRcIiB9IDogY29tbWVudCldLCBcInBvc3Rwcm9jZXNzXCI6IChbY10pID0+IHsgcmV0dXJuIHsgdHlwZTogJ2NvbW1lbnQnLCB2YWx1ZTogYy52YWx1ZSB9OyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZWxlbWVudFwiLCBcInN5bWJvbHNcIjogW1wiYWxpYXNcIl0sIFwicG9zdHByb2Nlc3NcIjogKFthXSkgPT4geyByZXR1cm4geyB0eXBlOiAnYWxpYXMnLCB2YWx1ZTogYSB9OyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwidHJhbnNhY3Rpb24kZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJjaGVja1wiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInRyYW5zYWN0aW9uJGVibmYkMVwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInRyYW5zYWN0aW9uJGVibmYkMlwiLCBcInN5bWJvbHNcIjogWyhsZXhlci5oYXMoXCJjb21tZW50XCIpID8geyB0eXBlOiBcImNvbW1lbnRcIiB9IDogY29tbWVudCldLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwidHJhbnNhY3Rpb24kZWJuZiQyXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwidHJhbnNhY3Rpb25cIiwgXCJzeW1ib2xzXCI6IFsobGV4ZXIuaGFzKFwiZGF0ZVwiKSA/IHsgdHlwZTogXCJkYXRlXCIgfSA6IGRhdGUpLCAobGV4ZXIuaGFzKFwid3NcIikgPyB7IHR5cGU6IFwid3NcIiB9IDogd3MpLCBcInRyYW5zYWN0aW9uJGVibmYkMVwiLCAobGV4ZXIuaGFzKFwicGF5ZWVcIikgPyB7IHR5cGU6IFwicGF5ZWVcIiB9IDogcGF5ZWUpLCBcInRyYW5zYWN0aW9uJGVibmYkMlwiLCAobGV4ZXIuaGFzKFwibmV3bGluZVwiKSA/IHsgdHlwZTogXCJuZXdsaW5lXCIgfSA6IG5ld2xpbmUpLCBcImV4cGVuc2VsaW5lc1wiXSwgXCJwb3N0cHJvY2Vzc1wiOiBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRlOiBkWzBdLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjaGVjazogZFsyXSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHBheWVlOiBkWzNdLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjb21tZW50OiAoKF9hID0gZFs0XSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVuc2VsaW5lczogZFs2XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmVzXCIsIFwic3ltYm9sc1wiOiBbXCJleHBlbnNlbGluZVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoW2xdKSA9PiBsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmVzXCIsIFwic3ltYm9sc1wiOiBbXCJleHBlbnNlbGluZXNcIiwgKGxleGVyLmhhcyhcIm5ld2xpbmVcIikgPyB7IHR5cGU6IFwibmV3bGluZVwiIH0gOiBuZXdsaW5lKSwgXCJleHBlbnNlbGluZVwiXSwgXCJwb3N0cHJvY2Vzc1wiOiAoW3Jlc3QsICwgbF0pID0+IHsgcmV0dXJuIFtyZXN0LCBsXS5mbGF0KDEpOyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmUkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbKGxleGVyLmhhcyhcIndzXCIpID8geyB0eXBlOiBcIndzXCIgfSA6IHdzKV0gfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJleHBlbnNlbGluZSRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFtcImV4cGVuc2VsaW5lJGVibmYkMVwiLCAobGV4ZXIuaGFzKFwid3NcIikgPyB7IHR5cGU6IFwid3NcIiB9IDogd3MpXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImV4cGVuc2VsaW5lJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW1wicmVjb25jaWxlZFwiXSwgXCJwb3N0cHJvY2Vzc1wiOiBpZCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImV4cGVuc2VsaW5lJGVibmYkMlwiLCBcInN5bWJvbHNcIjogW10sIFwicG9zdHByb2Nlc3NcIjogKCkgPT4gbnVsbCB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImV4cGVuc2VsaW5lJGVibmYkM1wiLCBcInN5bWJvbHNcIjogW1wiYW1vdW50XCJdLCBcInBvc3Rwcm9jZXNzXCI6IGlkIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmUkZWJuZiQzXCIsIFwic3ltYm9sc1wiOiBbXSwgXCJwb3N0cHJvY2Vzc1wiOiAoKSA9PiBudWxsIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmUkZWJuZiQ0XCIsIFwic3ltYm9sc1wiOiBbXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImV4cGVuc2VsaW5lJGVibmYkNFwiLCBcInN5bWJvbHNcIjogW1wiZXhwZW5zZWxpbmUkZWJuZiQ0XCIsIChsZXhlci5oYXMoXCJ3c1wiKSA/IHsgdHlwZTogXCJ3c1wiIH0gOiB3cyldLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmUkZWJuZiQ1XCIsIFwic3ltYm9sc1wiOiBbKGxleGVyLmhhcyhcImNvbW1lbnRcIikgPyB7IHR5cGU6IFwiY29tbWVudFwiIH0gOiBjb21tZW50KV0sIFwicG9zdHByb2Nlc3NcIjogaWQgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJleHBlbnNlbGluZSRlYm5mJDVcIiwgXCJzeW1ib2xzXCI6IFtdLCBcInBvc3Rwcm9jZXNzXCI6ICgpID0+IG51bGwgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJleHBlbnNlbGluZVwiLCBcInN5bWJvbHNcIjogW1wiZXhwZW5zZWxpbmUkZWJuZiQxXCIsIFwiZXhwZW5zZWxpbmUkZWJuZiQyXCIsIChsZXhlci5oYXMoXCJjYXRlZ29yeVwiKSA/IHsgdHlwZTogXCJjYXRlZ29yeVwiIH0gOiBjYXRlZ29yeSksIFwiZXhwZW5zZWxpbmUkZWJuZiQzXCIsIFwiZXhwZW5zZWxpbmUkZWJuZiQ0XCIsIFwiZXhwZW5zZWxpbmUkZWJuZiQ1XCJdLCBcInBvc3Rwcm9jZXNzXCI6IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb25jaWxlOiBkWzFdIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogZFsyXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IChfYSA9IGRbM10pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiAoX2IgPSBkWzNdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYW1vdW50LFxuICAgICAgICAgICAgICAgICAgICBjb21tZW50OiAoX2MgPSBkWzVdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudmFsdWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgeyBcIm5hbWVcIjogXCJleHBlbnNlbGluZSRlYm5mJDZcIiwgXCJzeW1ib2xzXCI6IFsobGV4ZXIuaGFzKFwid3NcIikgPyB7IHR5cGU6IFwid3NcIiB9IDogd3MpXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImV4cGVuc2VsaW5lJGVibmYkNlwiLCBcInN5bWJvbHNcIjogW1wiZXhwZW5zZWxpbmUkZWJuZiQ2XCIsIChsZXhlci5oYXMoXCJ3c1wiKSA/IHsgdHlwZTogXCJ3c1wiIH0gOiB3cyldLCBcInBvc3Rwcm9jZXNzXCI6IChkKSA9PiBkWzBdLmNvbmNhdChbZFsxXV0pIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiZXhwZW5zZWxpbmVcIiwgXCJzeW1ib2xzXCI6IFtcImV4cGVuc2VsaW5lJGVibmYkNlwiLCAobGV4ZXIuaGFzKFwiY29tbWVudFwiKSA/IHsgdHlwZTogXCJjb21tZW50XCIgfSA6IGNvbW1lbnQpXSwgXCJwb3N0cHJvY2Vzc1wiOiAoWywgY10pID0+IHsgcmV0dXJuIHsgY29tbWVudDogYy52YWx1ZSB9OyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwicmVjb25jaWxlZCRlYm5mJDFcIiwgXCJzeW1ib2xzXCI6IFsobGV4ZXIuaGFzKFwid3NcIikgPyB7IHR5cGU6IFwid3NcIiB9IDogd3MpXSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInJlY29uY2lsZWQkZWJuZiQxXCIsIFwic3ltYm9sc1wiOiBbXCJyZWNvbmNpbGVkJGVibmYkMVwiLCAobGV4ZXIuaGFzKFwid3NcIikgPyB7IHR5cGU6IFwid3NcIiB9IDogd3MpXSwgXCJwb3N0cHJvY2Vzc1wiOiAoZCkgPT4gZFswXS5jb25jYXQoW2RbMV1dKSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcInJlY29uY2lsZWRcIiwgXCJzeW1ib2xzXCI6IFsobGV4ZXIuaGFzKFwicmVjb25jaWxlZFwiKSA/IHsgdHlwZTogXCJyZWNvbmNpbGVkXCIgfSA6IHJlY29uY2lsZWQpLCBcInJlY29uY2lsZWQkZWJuZiQxXCJdLCBcInBvc3Rwcm9jZXNzXCI6IChbcixdKSA9PiByLnZhbHVlIH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiYWxpYXNcIiwgXCJzeW1ib2xzXCI6IFt7IFwibGl0ZXJhbFwiOiBcImFsaWFzXCIgfSwgKGxleGVyLmhhcyhcImNhdGVnb3J5XCIpID8geyB0eXBlOiBcImNhdGVnb3J5XCIgfSA6IGNhdGVnb3J5KSwgKGxleGVyLmhhcyhcImVxdWFsXCIpID8geyB0eXBlOiBcImVxdWFsXCIgfSA6IGVxdWFsKSwgKGxleGVyLmhhcyhcImNhdGVnb3J5XCIpID8geyB0eXBlOiBcImNhdGVnb3J5XCIgfSA6IGNhdGVnb3J5KV0sIFwicG9zdHByb2Nlc3NcIjogKFssIGwsICwgcl0pID0+IHsgcmV0dXJuIHsgbGVmdDogbC52YWx1ZSwgcmlnaHQ6IHIudmFsdWUgfTsgfSB9LFxuICAgICAgICB7IFwibmFtZVwiOiBcImFtb3VudFwiLCBcInN5bWJvbHNcIjogWyhsZXhlci5oYXMoXCJjdXJyZW5jeVwiKSA/IHsgdHlwZTogXCJjdXJyZW5jeVwiIH0gOiBjdXJyZW5jeSksIChsZXhlci5oYXMoXCJudW1iZXJcIikgPyB7IHR5cGU6IFwibnVtYmVyXCIgfSA6IG51bWJlcildLCBcInBvc3Rwcm9jZXNzXCI6IChbYywgYV0pID0+IHsgcmV0dXJuIHsgY3VycmVuY3k6IGMudmFsdWUsIGFtb3VudDogcGFyc2VGbG9hdChhLnZhbHVlKSB9OyB9IH0sXG4gICAgICAgIHsgXCJuYW1lXCI6IFwiY2hlY2tcIiwgXCJzeW1ib2xzXCI6IFsobGV4ZXIuaGFzKFwiY2hlY2tcIikgPyB7IHR5cGU6IFwiY2hlY2tcIiB9IDogY2hlY2spXSwgXCJwb3N0cHJvY2Vzc1wiOiAoW2NdKSA9PiBwYXJzZUZsb2F0KGMudmFsdWUpIH1cbiAgICBdLFxuICAgIFBhcnNlclN0YXJ0OiBcIm1haW5cIixcbn07XG5leHBvcnQgZGVmYXVsdCBncmFtbWFyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogTG9kYXNoIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgPGh0dHBzOi8vb3BlbmpzZi5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG47KGZ1bmN0aW9uKCkge1xuXG4gIC8qKiBVc2VkIGFzIGEgc2FmZSByZWZlcmVuY2UgZm9yIGB1bmRlZmluZWRgIGluIHByZS1FUzUgZW52aXJvbm1lbnRzLiAqL1xuICB2YXIgdW5kZWZpbmVkO1xuXG4gIC8qKiBVc2VkIGFzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdmFyIFZFUlNJT04gPSAnNC4xNy4yMSc7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG4gIHZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4gIC8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbiAgdmFyIENPUkVfRVJST1JfVEVYVCA9ICdVbnN1cHBvcnRlZCBjb3JlLWpzIHVzZS4gVHJ5IGh0dHBzOi8vbnBtcy5pby9zZWFyY2g/cT1wb255ZmlsbC4nLFxuICAgICAgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nLFxuICAgICAgSU5WQUxJRF9URU1QTF9WQVJfRVJST1JfVEVYVCA9ICdJbnZhbGlkIGB2YXJpYWJsZWAgb3B0aW9uIHBhc3NlZCBpbnRvIGBfLnRlbXBsYXRlYCc7XG5cbiAgLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xuICB2YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbiAgLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xuICB2YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuICAvKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG4gIHZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuICAvKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xuICB2YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICAgIENMT05FX0ZMQVRfRkxBRyA9IDIsXG4gICAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4gIC8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xuICB2YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gIHZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0LFxuICAgICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NixcbiAgICAgIFdSQVBfRkxJUF9GTEFHID0gNTEyO1xuXG4gIC8qKiBVc2VkIGFzIGRlZmF1bHQgb3B0aW9ucyBmb3IgYF8udHJ1bmNhdGVgLiAqL1xuICB2YXIgREVGQVVMVF9UUlVOQ19MRU5HVEggPSAzMCxcbiAgICAgIERFRkFVTFRfVFJVTkNfT01JU1NJT04gPSAnLi4uJztcblxuICAvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG4gIHZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgICBIT1RfU1BBTiA9IDE2O1xuXG4gIC8qKiBVc2VkIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGxhenkgaXRlcmF0ZWVzLiAqL1xuICB2YXIgTEFaWV9GSUxURVJfRkxBRyA9IDEsXG4gICAgICBMQVpZX01BUF9GTEFHID0gMixcbiAgICAgIExBWllfV0hJTEVfRkxBRyA9IDM7XG5cbiAgLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG4gIHZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgICAgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTEsXG4gICAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4LFxuICAgICAgTkFOID0gMCAvIDA7XG5cbiAgLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbiAgdmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1LFxuICAgICAgTUFYX0FSUkFZX0lOREVYID0gTUFYX0FSUkFZX0xFTkdUSCAtIDEsXG4gICAgICBIQUxGX01BWF9BUlJBWV9MRU5HVEggPSBNQVhfQVJSQVlfTEVOR1RIID4+PiAxO1xuXG4gIC8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG4gIHZhciB3cmFwRmxhZ3MgPSBbXG4gICAgWydhcnknLCBXUkFQX0FSWV9GTEFHXSxcbiAgICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gICAgWydiaW5kS2V5JywgV1JBUF9CSU5EX0tFWV9GTEFHXSxcbiAgICBbJ2N1cnJ5JywgV1JBUF9DVVJSWV9GTEFHXSxcbiAgICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICAgIFsnZmxpcCcsIFdSQVBfRkxJUF9GTEFHXSxcbiAgICBbJ3BhcnRpYWwnLCBXUkFQX1BBUlRJQUxfRkxBR10sXG4gICAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gICAgWydyZWFyZycsIFdSQVBfUkVBUkdfRkxBR11cbiAgXTtcblxuICAvKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG4gIHZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgICBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgICAgZG9tRXhjVGFnID0gJ1tvYmplY3QgRE9NRXhjZXB0aW9uXScsXG4gICAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgICAgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJyxcbiAgICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nLFxuICAgICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXScsXG4gICAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nLFxuICAgICAgd2Vha1NldFRhZyA9ICdbb2JqZWN0IFdlYWtTZXRdJztcblxuICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGVtcHR5IHN0cmluZyBsaXRlcmFscyBpbiBjb21waWxlZCB0ZW1wbGF0ZSBzb3VyY2UuICovXG4gIHZhciByZUVtcHR5U3RyaW5nTGVhZGluZyA9IC9cXGJfX3AgXFwrPSAnJzsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdNaWRkbGUgPSAvXFxiKF9fcCBcXCs9KSAnJyBcXCsvZyxcbiAgICAgIHJlRW1wdHlTdHJpbmdUcmFpbGluZyA9IC8oX19lXFwoLio/XFwpfFxcYl9fdFxcKSkgXFwrXFxuJyc7L2c7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggSFRNTCBlbnRpdGllcyBhbmQgSFRNTCBjaGFyYWN0ZXJzLiAqL1xuICB2YXIgcmVFc2NhcGVkSHRtbCA9IC8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyxcbiAgICAgIHJlVW5lc2NhcGVkSHRtbCA9IC9bJjw+XCInXS9nLFxuICAgICAgcmVIYXNFc2NhcGVkSHRtbCA9IFJlZ0V4cChyZUVzY2FwZWRIdG1sLnNvdXJjZSksXG4gICAgICByZUhhc1VuZXNjYXBlZEh0bWwgPSBSZWdFeHAocmVVbmVzY2FwZWRIdG1sLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdGVtcGxhdGUgZGVsaW1pdGVycy4gKi9cbiAgdmFyIHJlRXNjYXBlID0gLzwlLShbXFxzXFxTXSs/KSU+L2csXG4gICAgICByZUV2YWx1YXRlID0gLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICAgIHJlSW50ZXJwb2xhdGUgPSAvPCU9KFtcXHNcXFNdKz8pJT4vZztcblxuICAvKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG4gIHZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvLFxuICAgICAgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuICAvKipcbiAgICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICAgKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAgICovXG4gIHZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgICByZUhhc1JlZ0V4cENoYXIgPSBSZWdFeHAocmVSZWdFeHBDaGFyLnNvdXJjZSk7XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xuICB2YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xuICB2YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG4gIHZhciByZVdyYXBDb21tZW50ID0gL1xceyg/OlxcblxcL1xcKiBcXFt3cmFwcGVkIHdpdGggLitcXF0gXFwqXFwvKT9cXG4/LyxcbiAgICAgIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgICByZVNwbGl0RGV0YWlscyA9IC8sPyAmIC87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICovXG4gIHZhciByZUFzY2lpV29yZCA9IC9bXlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceDdmXSsvZztcblxuICAvKipcbiAgICogVXNlZCB0byB2YWxpZGF0ZSB0aGUgYHZhbGlkYXRlYCBvcHRpb24gaW4gYF8udGVtcGxhdGVgIHZhcmlhYmxlLlxuICAgKlxuICAgKiBGb3JiaWRzIGNoYXJhY3RlcnMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBkZWZpbml0aW9uOlxuICAgKiAtIFwiKCksXCIgKG1vZGlmaWNhdGlvbiBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKVxuICAgKiAtIFwiPVwiIChkZWZhdWx0IHZhbHVlKVxuICAgKiAtIFwiW117fVwiIChkZXN0cnVjdHVyaW5nIG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpXG4gICAqIC0gXCIvXCIgKGJlZ2lubmluZyBvZiBhIGNvbW1lbnQpXG4gICAqIC0gd2hpdGVzcGFjZVxuICAgKi9cbiAgdmFyIHJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzID0gL1soKT0se31cXFtcXF1cXC9cXHNdLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbiAgdmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1hdGNoXG4gICAqIFtFUyB0ZW1wbGF0ZSBkZWxpbWl0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10ZW1wbGF0ZS1saXRlcmFsLWxleGljYWwtY29tcG9uZW50cykuXG4gICAqL1xuICB2YXIgcmVFc1RlbXBsYXRlID0gL1xcJFxceyhbXlxcXFx9XSooPzpcXFxcLlteXFxcXH1dKikqKVxcfS9nO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgIGZsYWdzIGZyb20gdGhlaXIgY29lcmNlZCBzdHJpbmcgdmFsdWVzLiAqL1xuICB2YXIgcmVGbGFncyA9IC9cXHcqJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuICAvKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbiAgdmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG4gIHZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbiAgdmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuICAvKiogVXNlZCB0byBtYXRjaCBMYXRpbiBVbmljb2RlIGxldHRlcnMgKGV4Y2x1ZGluZyBtYXRoZW1hdGljYWwgb3BlcmF0b3JzKS4gKi9cbiAgdmFyIHJlTGF0aW4gPSAvW1xceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHhmZlxcdTAxMDAtXFx1MDE3Zl0vZztcblxuICAvKiogVXNlZCB0byBlbnN1cmUgY2FwdHVyaW5nIG9yZGVyIG9mIHRlbXBsYXRlIGRlbGltaXRlcnMuICovXG4gIHZhciByZU5vTWF0Y2ggPSAvKCReKS87XG5cbiAgLyoqIFVzZWQgdG8gbWF0Y2ggdW5lc2NhcGVkIGNoYXJhY3RlcnMgaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgcmVVbmVzY2FwZWRTdHJpbmcgPSAvWydcXG5cXHJcXHUyMDI4XFx1MjAyOVxcXFxdL2c7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xuICB2YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICAgIHJzRGluZ2JhdFJhbmdlID0gJ1xcXFx1MjcwMC1cXFxcdTI3YmYnLFxuICAgICAgcnNMb3dlclJhbmdlID0gJ2EtelxcXFx4ZGYtXFxcXHhmNlxcXFx4ZjgtXFxcXHhmZicsXG4gICAgICByc01hdGhPcFJhbmdlID0gJ1xcXFx4YWNcXFxceGIxXFxcXHhkN1xcXFx4ZjcnLFxuICAgICAgcnNOb25DaGFyUmFuZ2UgPSAnXFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmJyxcbiAgICAgIHJzUHVuY3R1YXRpb25SYW5nZSA9ICdcXFxcdTIwMDAtXFxcXHUyMDZmJyxcbiAgICAgIHJzU3BhY2VSYW5nZSA9ICcgXFxcXHRcXFxceDBiXFxcXGZcXFxceGEwXFxcXHVmZWZmXFxcXG5cXFxcclxcXFx1MjAyOFxcXFx1MjAyOVxcXFx1MTY4MFxcXFx1MTgwZVxcXFx1MjAwMFxcXFx1MjAwMVxcXFx1MjAwMlxcXFx1MjAwM1xcXFx1MjAwNFxcXFx1MjAwNVxcXFx1MjAwNlxcXFx1MjAwN1xcXFx1MjAwOFxcXFx1MjAwOVxcXFx1MjAwYVxcXFx1MjAyZlxcXFx1MjA1ZlxcXFx1MzAwMCcsXG4gICAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJyxcbiAgICAgIHJzQnJlYWtSYW5nZSA9IHJzTWF0aE9wUmFuZ2UgKyByc05vbkNoYXJSYW5nZSArIHJzUHVuY3R1YXRpb25SYW5nZSArIHJzU3BhY2VSYW5nZTtcblxuICAvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG4gIHZhciByc0Fwb3MgPSBcIlsnXFx1MjAxOV1cIixcbiAgICAgIHJzQXN0cmFsID0gJ1snICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICAgIHJzQnJlYWsgPSAnWycgKyByc0JyZWFrUmFuZ2UgKyAnXScsXG4gICAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgICAgcnNEaWdpdHMgPSAnXFxcXGQrJyxcbiAgICAgIHJzRGluZ2JhdCA9ICdbJyArIHJzRGluZ2JhdFJhbmdlICsgJ10nLFxuICAgICAgcnNMb3dlciA9ICdbJyArIHJzTG93ZXJSYW5nZSArICddJyxcbiAgICAgIHJzTWlzYyA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgcnNCcmVha1JhbmdlICsgcnNEaWdpdHMgKyByc0RpbmdiYXRSYW5nZSArIHJzTG93ZXJSYW5nZSArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgICAgcnNVcHBlciA9ICdbJyArIHJzVXBwZXJSYW5nZSArICddJyxcbiAgICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbiAgLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG4gIHZhciByc01pc2NMb3dlciA9ICcoPzonICsgcnNMb3dlciArICd8JyArIHJzTWlzYyArICcpJyxcbiAgICAgIHJzTWlzY1VwcGVyID0gJyg/OicgKyByc1VwcGVyICsgJ3wnICsgcnNNaXNjICsgJyknLFxuICAgICAgcnNPcHRDb250ckxvd2VyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPycsXG4gICAgICByc09wdENvbnRyVXBwZXIgPSAnKD86JyArIHJzQXBvcyArICcoPzpEfExMfE18UkV8U3xUfFZFKSk/JyxcbiAgICAgIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgICAgcnNPcmRMb3dlciA9ICdcXFxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXFxcZHRoKSg/PVxcXFxifFtBLVpfXSknLFxuICAgICAgcnNPcmRVcHBlciA9ICdcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSknLFxuICAgICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgICAgcnNFbW9qaSA9ICcoPzonICsgW3JzRGluZ2JhdCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNTZXEsXG4gICAgICByc1N5bWJvbCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdpb25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJztcblxuICAvKiogVXNlZCB0byBtYXRjaCBhcG9zdHJvcGhlcy4gKi9cbiAgdmFyIHJlQXBvcyA9IFJlZ0V4cChyc0Fwb3MsICdnJyk7XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbWF0Y2ggW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKSBhbmRcbiAgICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrcyBmb3Igc3ltYm9sc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzX2Zvcl9TeW1ib2xzKS5cbiAgICovXG4gIHZhciByZUNvbWJvTWFyayA9IFJlZ0V4cChyc0NvbWJvLCAnZycpO1xuXG4gIC8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG4gIHZhciByZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1ib2wgKyByc1NlcSwgJ2cnKTtcblxuICAvKiogVXNlZCB0byBtYXRjaCBjb21wbGV4IG9yIGNvbXBvdW5kIHdvcmRzLiAqL1xuICB2YXIgcmVVbmljb2RlV29yZCA9IFJlZ0V4cChbXG4gICAgcnNVcHBlciArICc/JyArIHJzTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgICByc01pc2NVcHBlciArICcrJyArIHJzT3B0Q29udHJVcHBlciArICcoPz0nICsgW3JzQnJlYWssIHJzVXBwZXIgKyByc01pc2NMb3dlciwgJyQnXS5qb2luKCd8JykgKyAnKScsXG4gICAgcnNVcHBlciArICc/JyArIHJzTWlzY0xvd2VyICsgJysnICsgcnNPcHRDb250ckxvd2VyLFxuICAgIHJzVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIsXG4gICAgcnNPcmRVcHBlcixcbiAgICByc09yZExvd2VyLFxuICAgIHJzRGlnaXRzLFxuICAgIHJzRW1vamlcbiAgXS5qb2luKCd8JyksICdnJyk7XG5cbiAgLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG4gIHZhciByZUhhc1VuaWNvZGUgPSBSZWdFeHAoJ1snICsgcnNaV0ogKyByc0FzdHJhbFJhbmdlICArIHJzQ29tYm9SYW5nZSArIHJzVmFyUmFuZ2UgKyAnXScpO1xuXG4gIC8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgbmVlZCBhIG1vcmUgcm9idXN0IHJlZ2V4cCB0byBtYXRjaCB3b3Jkcy4gKi9cbiAgdmFyIHJlSGFzVW5pY29kZVdvcmQgPSAvW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLztcblxuICAvKiogVXNlZCB0byBhc3NpZ24gZGVmYXVsdCBgY29udGV4dGAgb2JqZWN0IHByb3BlcnRpZXMuICovXG4gIHZhciBjb250ZXh0UHJvcHMgPSBbXG4gICAgJ0FycmF5JywgJ0J1ZmZlcicsICdEYXRhVmlldycsICdEYXRlJywgJ0Vycm9yJywgJ0Zsb2F0MzJBcnJheScsICdGbG9hdDY0QXJyYXknLFxuICAgICdGdW5jdGlvbicsICdJbnQ4QXJyYXknLCAnSW50MTZBcnJheScsICdJbnQzMkFycmF5JywgJ01hcCcsICdNYXRoJywgJ09iamVjdCcsXG4gICAgJ1Byb21pc2UnLCAnUmVnRXhwJywgJ1NldCcsICdTdHJpbmcnLCAnU3ltYm9sJywgJ1R5cGVFcnJvcicsICdVaW50OEFycmF5JyxcbiAgICAnVWludDhDbGFtcGVkQXJyYXknLCAnVWludDE2QXJyYXknLCAnVWludDMyQXJyYXknLCAnV2Vha01hcCcsXG4gICAgJ18nLCAnY2xlYXJUaW1lb3V0JywgJ2lzRmluaXRlJywgJ3BhcnNlSW50JywgJ3NldFRpbWVvdXQnXG4gIF07XG5cbiAgLyoqIFVzZWQgdG8gbWFrZSB0ZW1wbGF0ZSBzb3VyY2VVUkxzIGVhc2llciB0byBpZGVudGlmeS4gKi9cbiAgdmFyIHRlbXBsYXRlQ291bnRlciA9IC0xO1xuXG4gIC8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbiAgdmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG4gIHR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG4gIHR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbiAgdHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxuICB0eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG4gIHR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbiAgdHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuICAvKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBzdXBwb3J0ZWQgYnkgYF8uY2xvbmVgLiAqL1xuICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuICBjbG9uZWFibGVUYWdzW2FyZ3NUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2FycmF5QnVmZmVyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0YVZpZXdUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuICBjbG9uZWFibGVUYWdzW2Zsb2F0MzJUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDY0VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDE2VGFnXSA9XG4gIGNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tudW1iZXJUYWddID0gY2xvbmVhYmxlVGFnc1tvYmplY3RUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tyZWdleHBUYWddID0gY2xvbmVhYmxlVGFnc1tzZXRUYWddID1cbiAgY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbiAgY2xvbmVhYmxlVGFnc1t1aW50OFRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPVxuICBjbG9uZWFibGVUYWdzW3VpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xuICBjbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuICBjbG9uZWFibGVUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbiAgLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xuICB2YXIgZGVidXJyZWRMZXR0ZXJzID0ge1xuICAgIC8vIExhdGluLTEgU3VwcGxlbWVudCBibG9jay5cbiAgICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgICAnXFx4ZTAnOiAnYScsICAnXFx4ZTEnOiAnYScsICdcXHhlMic6ICdhJywgJ1xceGUzJzogJ2EnLCAnXFx4ZTQnOiAnYScsICdcXHhlNSc6ICdhJyxcbiAgICAnXFx4YzcnOiAnQycsICAnXFx4ZTcnOiAnYycsXG4gICAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAgICdcXHhjOCc6ICdFJywgICdcXHhjOSc6ICdFJywgJ1xceGNhJzogJ0UnLCAnXFx4Y2InOiAnRScsXG4gICAgJ1xceGU4JzogJ2UnLCAgJ1xceGU5JzogJ2UnLCAnXFx4ZWEnOiAnZScsICdcXHhlYic6ICdlJyxcbiAgICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAgICdcXHhlYyc6ICdpJywgICdcXHhlZCc6ICdpJywgJ1xceGVlJzogJ2knLCAnXFx4ZWYnOiAnaScsXG4gICAgJ1xceGQxJzogJ04nLCAgJ1xceGYxJzogJ24nLFxuICAgICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAgICdcXHhmMic6ICdvJywgICdcXHhmMyc6ICdvJywgJ1xceGY0JzogJ28nLCAnXFx4ZjUnOiAnbycsICdcXHhmNic6ICdvJywgJ1xceGY4JzogJ28nLFxuICAgICdcXHhkOSc6ICdVJywgICdcXHhkYSc6ICdVJywgJ1xceGRiJzogJ1UnLCAnXFx4ZGMnOiAnVScsXG4gICAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgICAnXFx4ZGQnOiAnWScsICAnXFx4ZmQnOiAneScsICdcXHhmZic6ICd5JyxcbiAgICAnXFx4YzYnOiAnQWUnLCAnXFx4ZTYnOiAnYWUnLFxuICAgICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICAgJ1xceGRmJzogJ3NzJyxcbiAgICAvLyBMYXRpbiBFeHRlbmRlZC1BIGJsb2NrLlxuICAgICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAgICdcXHUwMTAxJzogJ2EnLCAgJ1xcdTAxMDMnOiAnYScsICdcXHUwMTA1JzogJ2EnLFxuICAgICdcXHUwMTA2JzogJ0MnLCAgJ1xcdTAxMDgnOiAnQycsICdcXHUwMTBhJzogJ0MnLCAnXFx1MDEwYyc6ICdDJyxcbiAgICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICAgJ1xcdTAxMGUnOiAnRCcsICAnXFx1MDExMCc6ICdEJywgJ1xcdTAxMGYnOiAnZCcsICdcXHUwMTExJzogJ2QnLFxuICAgICdcXHUwMTEyJzogJ0UnLCAgJ1xcdTAxMTQnOiAnRScsICdcXHUwMTE2JzogJ0UnLCAnXFx1MDExOCc6ICdFJywgJ1xcdTAxMWEnOiAnRScsXG4gICAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgICAnXFx1MDExYyc6ICdHJywgICdcXHUwMTFlJzogJ0cnLCAnXFx1MDEyMCc6ICdHJywgJ1xcdTAxMjInOiAnRycsXG4gICAgJ1xcdTAxMWQnOiAnZycsICAnXFx1MDExZic6ICdnJywgJ1xcdTAxMjEnOiAnZycsICdcXHUwMTIzJzogJ2cnLFxuICAgICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgICAnXFx1MDEyOCc6ICdJJywgICdcXHUwMTJhJzogJ0knLCAnXFx1MDEyYyc6ICdJJywgJ1xcdTAxMmUnOiAnSScsICdcXHUwMTMwJzogJ0knLFxuICAgICdcXHUwMTI5JzogJ2knLCAgJ1xcdTAxMmInOiAnaScsICdcXHUwMTJkJzogJ2knLCAnXFx1MDEyZic6ICdpJywgJ1xcdTAxMzEnOiAnaScsXG4gICAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgICAnXFx1MDEzNic6ICdLJywgICdcXHUwMTM3JzogJ2snLCAnXFx1MDEzOCc6ICdrJyxcbiAgICAnXFx1MDEzOSc6ICdMJywgICdcXHUwMTNiJzogJ0wnLCAnXFx1MDEzZCc6ICdMJywgJ1xcdTAxM2YnOiAnTCcsICdcXHUwMTQxJzogJ0wnLFxuICAgICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICAgJ1xcdTAxNDMnOiAnTicsICAnXFx1MDE0NSc6ICdOJywgJ1xcdTAxNDcnOiAnTicsICdcXHUwMTRhJzogJ04nLFxuICAgICdcXHUwMTQ0JzogJ24nLCAgJ1xcdTAxNDYnOiAnbicsICdcXHUwMTQ4JzogJ24nLCAnXFx1MDE0Yic6ICduJyxcbiAgICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgICAnXFx1MDE0ZCc6ICdvJywgICdcXHUwMTRmJzogJ28nLCAnXFx1MDE1MSc6ICdvJyxcbiAgICAnXFx1MDE1NCc6ICdSJywgICdcXHUwMTU2JzogJ1InLCAnXFx1MDE1OCc6ICdSJyxcbiAgICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgICAnXFx1MDE1YSc6ICdTJywgICdcXHUwMTVjJzogJ1MnLCAnXFx1MDE1ZSc6ICdTJywgJ1xcdTAxNjAnOiAnUycsXG4gICAgJ1xcdTAxNWInOiAncycsICAnXFx1MDE1ZCc6ICdzJywgJ1xcdTAxNWYnOiAncycsICdcXHUwMTYxJzogJ3MnLFxuICAgICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAgICdcXHUwMTYzJzogJ3QnLCAgJ1xcdTAxNjUnOiAndCcsICdcXHUwMTY3JzogJ3QnLFxuICAgICdcXHUwMTY4JzogJ1UnLCAgJ1xcdTAxNmEnOiAnVScsICdcXHUwMTZjJzogJ1UnLCAnXFx1MDE2ZSc6ICdVJywgJ1xcdTAxNzAnOiAnVScsICdcXHUwMTcyJzogJ1UnLFxuICAgICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAgICdcXHUwMTc0JzogJ1cnLCAgJ1xcdTAxNzUnOiAndycsXG4gICAgJ1xcdTAxNzYnOiAnWScsICAnXFx1MDE3Nyc6ICd5JywgJ1xcdTAxNzgnOiAnWScsXG4gICAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICAgJ1xcdTAxN2EnOiAneicsICAnXFx1MDE3Yyc6ICd6JywgJ1xcdTAxN2UnOiAneicsXG4gICAgJ1xcdTAxMzInOiAnSUonLCAnXFx1MDEzMyc6ICdpaicsXG4gICAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICAgJ1xcdTAxNDknOiBcIiduXCIsICdcXHUwMTdmJzogJ3MnXG4gIH07XG5cbiAgLyoqIFVzZWQgdG8gbWFwIGNoYXJhY3RlcnMgdG8gSFRNTCBlbnRpdGllcy4gKi9cbiAgdmFyIGh0bWxFc2NhcGVzID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7J1xuICB9O1xuXG4gIC8qKiBVc2VkIHRvIG1hcCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuICovXG4gIHZhciBodG1sVW5lc2NhcGVzID0ge1xuICAgICcmYW1wOyc6ICcmJyxcbiAgICAnJmx0Oyc6ICc8JyxcbiAgICAnJmd0Oyc6ICc+JyxcbiAgICAnJnF1b3Q7JzogJ1wiJyxcbiAgICAnJiMzOTsnOiBcIidcIlxuICB9O1xuXG4gIC8qKiBVc2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLiAqL1xuICB2YXIgc3RyaW5nRXNjYXBlcyA9IHtcbiAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICBcIidcIjogXCInXCIsXG4gICAgJ1xcbic6ICduJyxcbiAgICAnXFxyJzogJ3InLFxuICAgICdcXHUyMDI4JzogJ3UyMDI4JyxcbiAgICAnXFx1MjAyOSc6ICd1MjAyOSdcbiAgfTtcblxuICAvKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xuICB2YXIgZnJlZVBhcnNlRmxvYXQgPSBwYXJzZUZsb2F0LFxuICAgICAgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbiAgdmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG4gIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4gIC8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xuICB2YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuICAvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xuICB2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbiAgLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xuICB2YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4gIC8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG4gIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4gIC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xuICB2YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuICAvKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbiAgdmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgICBpZiAodHlwZXMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzO1xuICAgICAgfVxuXG4gICAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH0oKSk7XG5cbiAgLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbiAgdmFyIG5vZGVJc0FycmF5QnVmZmVyID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNBcnJheUJ1ZmZlcixcbiAgICAgIG5vZGVJc0RhdGUgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc0RhdGUsXG4gICAgICBub2RlSXNNYXAgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc01hcCxcbiAgICAgIG5vZGVJc1JlZ0V4cCA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzUmVnRXhwLFxuICAgICAgbm9kZUlzU2V0ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNTZXQsXG4gICAgICBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gIC8qKlxuICAgKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlQWdncmVnYXRvcmAgZm9yIGFycmF5cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBgYWNjdW11bGF0b3JgIHZhbHVlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYWNjdW11bGF0b3IgVGhlIGluaXRpYWwgYWdncmVnYXRlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgYWNjdW11bGF0b3JgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlBZ2dyZWdhdG9yKGFycmF5LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGFycmF5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RWFjaFJpZ2h0KGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W2xlbmd0aF0sIGxlbmd0aCwgYXJyYXkpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5ldmVyeWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZWxlbWVudHMgcGFzcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlFdmVyeShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmICghcHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheUluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlJbmNsdWRlc1dpdGgoYXJyYXksIHZhbHVlLCBjb21wYXJhdG9yKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICAgKiAgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5UmVkdWNlKGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7XG4gICAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZVJpZ2h0YCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2luaXRBY2N1bV0gU3BlY2lmeSB1c2luZyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAgICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBhcnJheVJlZHVjZVJpZ2h0KGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRBY2N1bSkge1xuICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVstLWxlbmd0aF07XG4gICAgfVxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbbGVuZ3RoXSwgbGVuZ3RoLCBhcnJheSk7XG4gICAgfVxuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAqIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICogIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc2l6ZSBvZiBhbiBBU0NJSSBgc3RyaW5nYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICAgKi9cbiAgdmFyIGFzY2lpU2l6ZSA9IGJhc2VQcm9wZXJ0eSgnbGVuZ3RoJyk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgKi9cbiAgZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlQXNjaWlXb3JkKSB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZmluZEtleWAgYW5kIGBfLmZpbmRMYXN0S2V5YCxcbiAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLCB3aGljaCBpdGVyYXRlcyBvdmVyIGBjb2xsZWN0aW9uYFxuICAgKiB1c2luZyBgZWFjaEZ1bmNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBgY29sbGVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmb3VuZCBlbGVtZW50IG9yIGl0cyBrZXksIGVsc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlRmluZEtleShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGVhY2hGdW5jKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBlYWNoRnVuYyhjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pKSB7XG4gICAgICAgIHJlc3VsdCA9IGtleTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICAgKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gICAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGJhc2VJbmRleE9mYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgY29tcGFyYXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb21wYXJhdG9yIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlSW5kZXhPZldpdGgoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgsIGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaW5kZXhdLCB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZWFuYCBhbmQgYF8ubWVhbkJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlTWVhbihhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgcmV0dXJuIGxlbmd0aCA/IChiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkgLyBsZW5ndGgpIDogTkFOO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5T2ZgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VQcm9wZXJ0eU9mKG9iamVjdCkge1xuICAgIHJldHVybiBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucmVkdWNlYCBhbmQgYF8ucmVkdWNlUmlnaHRgLCB3aXRob3V0IHN1cHBvcnRcbiAgICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYGNvbGxlY3Rpb25gIHVzaW5nIGBlYWNoRnVuY2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICogQHBhcmFtIHsqfSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBpbml0QWNjdW0gU3BlY2lmeSB1c2luZyB0aGUgZmlyc3Qgb3IgbGFzdCBlbGVtZW50IG9mXG4gICAqICBgY29sbGVjdGlvbmAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGVhY2hGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgYGNvbGxlY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlUmVkdWNlKGNvbGxlY3Rpb24sIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBlYWNoRnVuYykge1xuICAgIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgYWNjdW11bGF0b3IgPSBpbml0QWNjdW1cbiAgICAgICAgPyAoaW5pdEFjY3VtID0gZmFsc2UsIHZhbHVlKVxuICAgICAgICA6IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zb3J0QnlgIHdoaWNoIHVzZXMgYGNvbXBhcmVyYCB0byBkZWZpbmUgdGhlXG4gICAqIHNvcnQgb3JkZXIgb2YgYGFycmF5YCBhbmQgcmVwbGFjZXMgY3JpdGVyaWEgb2JqZWN0cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmdcbiAgICogdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc29ydC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZXIgVGhlIGZ1bmN0aW9uIHRvIGRlZmluZSBzb3J0IG9yZGVyLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VTb3J0QnkoYXJyYXksIGNvbXBhcmVyKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIGFycmF5LnNvcnQoY29tcGFyZXIpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgYXJyYXlbbGVuZ3RoXSA9IGFycmF5W2xlbmd0aF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zdW1gIGFuZCBgXy5zdW1CeWAgd2l0aG91dCBzdXBwb3J0IGZvclxuICAgKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdW0uXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlU3VtKGFycmF5LCBpdGVyYXRlZSkge1xuICAgIHZhciByZXN1bHQsXG4gICAgICAgIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSk7XG4gICAgICBpZiAoY3VycmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gY3VycmVudCA6IChyZXN1bHQgKyBjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gICAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9QYWlyc2AgYW5kIGBfLnRvUGFpcnNJbmAgd2hpY2ggY3JlYXRlcyBhbiBhcnJheVxuICAgKiBvZiBrZXktdmFsdWUgcGFpcnMgZm9yIGBvYmplY3RgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzIG9mIGBwcm9wc2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gICAqL1xuICBmdW5jdGlvbiBiYXNlVG9QYWlycyhvYmplY3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBba2V5LCBvYmplY3Rba2V5XV07XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmdcbiAgICAgID8gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgICA6IHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnZhbHVlc2AgYW5kIGBfLnZhbHVlc0luYCB3aGljaCBjcmVhdGVzIGFuXG4gICAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICAgKiBvZiBgcHJvcHNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBuYW1lcyB0byBnZXQgdmFsdWVzIGZvci5cbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gYmFzZVZhbHVlcyhvYmplY3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAqL1xuICBmdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gICAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1TdGFydGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgc3RyaW5nIHN5bWJvbFxuICAgKiB0aGF0IGlzIG5vdCBmb3VuZCBpbiB0aGUgY2hhcmFjdGVyIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0clN5bWJvbHMgVGhlIHN0cmluZyBzeW1ib2xzIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCB1bm1hdGNoZWQgc3RyaW5nIHN5bWJvbC5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYXJzU3RhcnRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHN0clN5bWJvbHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgYmFzZUluZGV4T2YoY2hyU3ltYm9scywgc3RyU3ltYm9sc1tpbmRleF0sIDApID4gLTEpIHt9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgc3RyaW5nIHN5bWJvbFxuICAgKiB0aGF0IGlzIG5vdCBmb3VuZCBpbiB0aGUgY2hhcmFjdGVyIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IHN0clN5bWJvbHMgVGhlIHN0cmluZyBzeW1ib2xzIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoclN5bWJvbHMgVGhlIGNoYXJhY3RlciBzeW1ib2xzIHRvIGZpbmQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IHVubWF0Y2hlZCBzdHJpbmcgc3ltYm9sLlxuICAgKi9cbiAgZnVuY3Rpb24gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSB7XG4gICAgdmFyIGluZGV4ID0gc3RyU3ltYm9scy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaW5kZXgtLSAmJiBiYXNlSW5kZXhPZihjaHJTeW1ib2xzLCBzdHJTeW1ib2xzW2luZGV4XSwgMCkgPiAtMSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGBwbGFjZWhvbGRlcmAgb2NjdXJyZW5jZXMgaW4gYGFycmF5YC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGNvdW50LlxuICAgKi9cbiAgZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIHJlc3VsdCA9IDA7XG5cbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgIGlmIChhcnJheVtsZW5ndGhdID09PSBwbGFjZWhvbGRlcikge1xuICAgICAgICArK3Jlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUFcbiAgICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGV0dGVyIFRoZSBtYXRjaGVkIGxldHRlciB0byBkZWJ1cnIuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGRlYnVycmVkIGxldHRlci5cbiAgICovXG4gIHZhciBkZWJ1cnJMZXR0ZXIgPSBiYXNlUHJvcGVydHlPZihkZWJ1cnJlZExldHRlcnMpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IGBfLmVzY2FwZWAgdG8gY29udmVydCBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIGVzY2FwZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBjaGFyYWN0ZXIuXG4gICAqL1xuICB2YXIgZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sRXNjYXBlcyk7XG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgYF8udGVtcGxhdGVgIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIGZvciBpbmNsdXNpb24gaW4gY29tcGlsZWQgc3RyaW5nIGxpdGVyYWxzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hyIFRoZSBtYXRjaGVkIGNoYXJhY3RlciB0byBlc2NhcGUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nQ2hhcihjaHIpIHtcbiAgICByZXR1cm4gJ1xcXFwnICsgc3RyaW5nRXNjYXBlc1tjaHJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgKi9cbiAgZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgYSB3b3JkIGNvbXBvc2VkIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHdvcmQgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICovXG4gIGZ1bmN0aW9uIGhhc1VuaWNvZGVXb3JkKHN0cmluZykge1xuICAgIHJldHVybiByZUhhc1VuaWNvZGVXb3JkLnRlc3Qoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgaXRlcmF0b3JgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gaXRlcmF0b3IgVGhlIGl0ZXJhdG9yIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gaXRlcmF0b3JUb0FycmF5KGl0ZXJhdG9yKSB7XG4gICAgdmFyIGRhdGEsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCEoZGF0YSA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gICAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIGBwbGFjZWhvbGRlcmAgZWxlbWVudHMgaW4gYGFycmF5YCB3aXRoIGFuIGludGVybmFsIHBsYWNlaG9sZGVyXG4gICAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAqL1xuICBmdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gcGxhY2Vob2xkZXIgfHwgdmFsdWUgPT09IFBMQUNFSE9MREVSKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IFBMQUNFSE9MREVSO1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gICAqL1xuICBmdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgc2V0YCB0byBpdHMgdmFsdWUtdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlLXZhbHVlIHBhaXJzLlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0VG9QYWlycyhzZXQpIHtcbiAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gICAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJlc3VsdFsrK2luZGV4XSA9IFt2YWx1ZSwgdmFsdWVdO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICAgKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmxhc3RJbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAgICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpY3RMYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgIHZhciBpbmRleCA9IGZyb21JbmRleCArIDE7XG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWJlciBvZiBzeW1ib2xzIGluIGBzdHJpbmdgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gICAqL1xuICBmdW5jdGlvbiBzdHJpbmdTaXplKHN0cmluZykge1xuICAgIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gdW5pY29kZVNpemUoc3RyaW5nKVxuICAgICAgOiBhc2NpaVNpemUoc3RyaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICAgKiBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gICAqL1xuICBmdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7XG4gICAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCBieSBgXy51bmVzY2FwZWAgdG8gY29udmVydCBIVE1MIGVudGl0aWVzIHRvIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaHIgVGhlIG1hdGNoZWQgY2hhcmFjdGVyIHRvIHVuZXNjYXBlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmVzY2FwZWQgY2hhcmFjdGVyLlxuICAgKi9cbiAgdmFyIHVuZXNjYXBlSHRtbENoYXIgPSBiYXNlUHJvcGVydHlPZihodG1sVW5lc2NhcGVzKTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgc2l6ZSBvZiBhIFVuaWNvZGUgYHN0cmluZ2AuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyBpbnNwZWN0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBzdHJpbmcgc2l6ZS5cbiAgICovXG4gIGZ1bmN0aW9uIHVuaWNvZGVTaXplKHN0cmluZykge1xuICAgIHZhciByZXN1bHQgPSByZVVuaWNvZGUubGFzdEluZGV4ID0gMDtcbiAgICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgKytyZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gICAqL1xuICBmdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZSkgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIGEgVW5pY29kZSBgc3RyaW5nYCBpbnRvIGFuIGFycmF5IG9mIGl0cyB3b3Jkcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAgICovXG4gIGZ1bmN0aW9uIHVuaWNvZGVXb3JkcyhzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZVdvcmQpIHx8IFtdO1xuICB9XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBwcmlzdGluZSBgbG9kYXNoYCBmdW5jdGlvbiB1c2luZyB0aGUgYGNvbnRleHRgIG9iamVjdC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKiBAbWVtYmVyT2YgX1xuICAgKiBAc2luY2UgMS4xLjBcbiAgICogQGNhdGVnb3J5IFV0aWxcbiAgICogQHBhcmFtIHtPYmplY3R9IFtjb250ZXh0PXJvb3RdIFRoZSBjb250ZXh0IG9iamVjdC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGEgbmV3IGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBfLm1peGluKHsgJ2Zvbyc6IF8uY29uc3RhbnQoJ2ZvbycpIH0pO1xuICAgKlxuICAgKiB2YXIgbG9kYXNoID0gXy5ydW5JbkNvbnRleHQoKTtcbiAgICogbG9kYXNoLm1peGluKHsgJ2Jhcic6IGxvZGFzaC5jb25zdGFudCgnYmFyJykgfSk7XG4gICAqXG4gICAqIF8uaXNGdW5jdGlvbihfLmZvbyk7XG4gICAqIC8vID0+IHRydWVcbiAgICogXy5pc0Z1bmN0aW9uKF8uYmFyKTtcbiAgICogLy8gPT4gZmFsc2VcbiAgICpcbiAgICogbG9kYXNoLmlzRnVuY3Rpb24obG9kYXNoLmZvbyk7XG4gICAqIC8vID0+IGZhbHNlXG4gICAqIGxvZGFzaC5pc0Z1bmN0aW9uKGxvZGFzaC5iYXIpO1xuICAgKiAvLyA9PiB0cnVlXG4gICAqXG4gICAqIC8vIENyZWF0ZSBhIHN1cGVkLXVwIGBkZWZlcmAgaW4gTm9kZS5qcy5cbiAgICogdmFyIGRlZmVyID0gXy5ydW5JbkNvbnRleHQoeyAnc2V0VGltZW91dCc6IHNldEltbWVkaWF0ZSB9KS5kZWZlcjtcbiAgICovXG4gIHZhciBydW5JbkNvbnRleHQgPSAoZnVuY3Rpb24gcnVuSW5Db250ZXh0KGNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dCA9PSBudWxsID8gcm9vdCA6IF8uZGVmYXVsdHMocm9vdC5PYmplY3QoKSwgY29udGV4dCwgXy5waWNrKHJvb3QsIGNvbnRleHRQcm9wcykpO1xuXG4gICAgLyoqIEJ1aWx0LWluIGNvbnN0cnVjdG9yIHJlZmVyZW5jZXMuICovXG4gICAgdmFyIEFycmF5ID0gY29udGV4dC5BcnJheSxcbiAgICAgICAgRGF0ZSA9IGNvbnRleHQuRGF0ZSxcbiAgICAgICAgRXJyb3IgPSBjb250ZXh0LkVycm9yLFxuICAgICAgICBGdW5jdGlvbiA9IGNvbnRleHQuRnVuY3Rpb24sXG4gICAgICAgIE1hdGggPSBjb250ZXh0Lk1hdGgsXG4gICAgICAgIE9iamVjdCA9IGNvbnRleHQuT2JqZWN0LFxuICAgICAgICBSZWdFeHAgPSBjb250ZXh0LlJlZ0V4cCxcbiAgICAgICAgU3RyaW5nID0gY29udGV4dC5TdHJpbmcsXG4gICAgICAgIFR5cGVFcnJvciA9IGNvbnRleHQuVHlwZUVycm9yO1xuXG4gICAgLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xuICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgICAgICBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuICAgIC8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbiAgICB2YXIgY29yZUpzRGF0YSA9IGNvbnRleHRbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG4gICAgLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xuICAgIHZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbiAgICAvKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbiAgICB2YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAgIC8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuICovXG4gICAgdmFyIGlkQ291bnRlciA9IDA7XG5cbiAgICAvKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xuICAgIHZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgICAgIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbiAgICB9KCkpO1xuXG4gICAgLyoqXG4gICAgICogVXNlZCB0byByZXNvbHZlIHRoZVxuICAgICAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICAgICAqIG9mIHZhbHVlcy5cbiAgICAgKi9cbiAgICB2YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuICAgIC8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbiAgICB2YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XG5cbiAgICAvKiogVXNlZCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBgX2AgcmVmZXJlbmNlIGluIGBfLm5vQ29uZmxpY3RgLiAqL1xuICAgIHZhciBvbGREYXNoID0gcm9vdC5fO1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbiAgICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICAgICAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICAgIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuICAgICk7XG5cbiAgICAvKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbiAgICB2YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IGNvbnRleHQuQnVmZmVyIDogdW5kZWZpbmVkLFxuICAgICAgICBTeW1ib2wgPSBjb250ZXh0LlN5bWJvbCxcbiAgICAgICAgVWludDhBcnJheSA9IGNvbnRleHQuVWludDhBcnJheSxcbiAgICAgICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQsXG4gICAgICAgIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpLFxuICAgICAgICBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLFxuICAgICAgICBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLFxuICAgICAgICBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZSxcbiAgICAgICAgc3ByZWFkYWJsZVN5bWJvbCA9IFN5bWJvbCA/IFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHN5bUl0ZXJhdG9yID0gU3ltYm9sID8gU3ltYm9sLml0ZXJhdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgICAgIHJldHVybiBmdW5jO1xuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9KCkpO1xuXG4gICAgLyoqIE1vY2tlZCBidWlsdC1pbnMuICovXG4gICAgdmFyIGN0eENsZWFyVGltZW91dCA9IGNvbnRleHQuY2xlYXJUaW1lb3V0ICE9PSByb290LmNsZWFyVGltZW91dCAmJiBjb250ZXh0LmNsZWFyVGltZW91dCxcbiAgICAgICAgY3R4Tm93ID0gRGF0ZSAmJiBEYXRlLm5vdyAhPT0gcm9vdC5EYXRlLm5vdyAmJiBEYXRlLm5vdyxcbiAgICAgICAgY3R4U2V0VGltZW91dCA9IGNvbnRleHQuc2V0VGltZW91dCAhPT0gcm9vdC5zZXRUaW1lb3V0ICYmIGNvbnRleHQuc2V0VGltZW91dDtcblxuICAgIC8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbiAgICB2YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICAgICAgbmF0aXZlRmxvb3IgPSBNYXRoLmZsb29yLFxuICAgICAgICBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxcbiAgICAgICAgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIG5hdGl2ZUlzRmluaXRlID0gY29udGV4dC5pc0Zpbml0ZSxcbiAgICAgICAgbmF0aXZlSm9pbiA9IGFycmF5UHJvdG8uam9pbixcbiAgICAgICAgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCksXG4gICAgICAgIG5hdGl2ZU1heCA9IE1hdGgubWF4LFxuICAgICAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbixcbiAgICAgICAgbmF0aXZlTm93ID0gRGF0ZS5ub3csXG4gICAgICAgIG5hdGl2ZVBhcnNlSW50ID0gY29udGV4dC5wYXJzZUludCxcbiAgICAgICAgbmF0aXZlUmFuZG9tID0gTWF0aC5yYW5kb20sXG4gICAgICAgIG5hdGl2ZVJldmVyc2UgPSBhcnJheVByb3RvLnJldmVyc2U7XG5cbiAgICAvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG4gICAgdmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKGNvbnRleHQsICdEYXRhVmlldycpLFxuICAgICAgICBNYXAgPSBnZXROYXRpdmUoY29udGV4dCwgJ01hcCcpLFxuICAgICAgICBQcm9taXNlID0gZ2V0TmF0aXZlKGNvbnRleHQsICdQcm9taXNlJyksXG4gICAgICAgIFNldCA9IGdldE5hdGl2ZShjb250ZXh0LCAnU2V0JyksXG4gICAgICAgIFdlYWtNYXAgPSBnZXROYXRpdmUoY29udGV4dCwgJ1dlYWtNYXAnKSxcbiAgICAgICAgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG4gICAgLyoqIFVzZWQgdG8gc3RvcmUgZnVuY3Rpb24gbWV0YWRhdGEuICovXG4gICAgdmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG4gICAgLyoqIFVzZWQgdG8gbG9va3VwIHVubWluaWZpZWQgZnVuY3Rpb24gbmFtZXMuICovXG4gICAgdmFyIHJlYWxOYW1lcyA9IHt9O1xuXG4gICAgLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbiAgICB2YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgICAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICAgICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICAgICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbiAgICAvKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbiAgICB2YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkLFxuICAgICAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICAgICAqIGNoYWluIHNlcXVlbmNlcy4gTWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gYW5kIHJldHVybiBhcnJheXMsIGNvbGxlY3Rpb25zLFxuICAgICAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICAgICAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAgICAgKiBhbmQgcmV0dXJuIHRoZSB1bndyYXBwZWQgdmFsdWUuIE90aGVyd2lzZSwgdGhlIHZhbHVlIG11c3QgYmUgdW53cmFwcGVkXG4gICAgICogd2l0aCBgXyN2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBFeHBsaWNpdCBjaGFpbiBzZXF1ZW5jZXMsIHdoaWNoIG11c3QgYmUgdW53cmFwcGVkIHdpdGggYF8jdmFsdWVgLCBtYXkgYmVcbiAgICAgKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAgICAgKlxuICAgICAqIFRoZSBleGVjdXRpb24gb2YgY2hhaW5lZCBtZXRob2RzIGlzIGxhenksIHRoYXQgaXMsIGl0J3MgZGVmZXJyZWQgdW50aWxcbiAgICAgKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAgICAgKlxuICAgICAqIExhenkgZXZhbHVhdGlvbiBhbGxvd3Mgc2V2ZXJhbCBtZXRob2RzIHRvIHN1cHBvcnQgc2hvcnRjdXQgZnVzaW9uLlxuICAgICAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gICAgICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gICAgICogaXRlcmF0ZWUgZXhlY3V0aW9ucy4gU2VjdGlvbnMgb2YgYSBjaGFpbiBzZXF1ZW5jZSBxdWFsaWZ5IGZvciBzaG9ydGN1dFxuICAgICAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAgICAgKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAgICAgKiBmdXNpb24gaXMgc3ViamVjdCB0byBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gICAgICogZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuXG4gICAgICpcbiAgICAgKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAgICAgKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gICAgICpcbiAgICAgKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAgICAgKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAgICAgKlxuICAgICAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gICAgICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAgICAgKiBgZmluZExhc3RgLCBgaGVhZGAsIGBpbml0aWFsYCwgYGxhc3RgLCBgbWFwYCwgYHJlamVjdGAsIGByZXZlcnNlYCwgYHNsaWNlYCxcbiAgICAgKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gICAgICpcbiAgICAgKiBUaGUgY2hhaW5hYmxlIHdyYXBwZXIgbWV0aG9kcyBhcmU6XG4gICAgICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICAgICAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAgICAgKiBgY29tbWl0YCwgYGNvbXBhY3RgLCBgY29uY2F0YCwgYGNvbmZvcm1zYCwgYGNvbnN0YW50YCwgYGNvdW50QnlgLCBgY3JlYXRlYCxcbiAgICAgKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAgICAgKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICAgICAqIGBkcm9wUmlnaHRXaGlsZWAsIGBkcm9wV2hpbGVgLCBgZXh0ZW5kYCwgYGV4dGVuZFdpdGhgLCBgZmlsbGAsIGBmaWx0ZXJgLFxuICAgICAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAgICAgKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gICAgICogYGZ1bmN0aW9uc0luYCwgYGdyb3VwQnlgLCBgaW5pdGlhbGAsIGBpbnRlcnNlY3Rpb25gLCBgaW50ZXJzZWN0aW9uQnlgLFxuICAgICAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICAgICAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICAgICAqIGBtZW1vaXplYCwgYG1lcmdlYCwgYG1lcmdlV2l0aGAsIGBtZXRob2RgLCBgbWV0aG9kT2ZgLCBgbWl4aW5gLCBgbmVnYXRlYCxcbiAgICAgKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAgICAgKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAgICAgKiBgcGlja0J5YCwgYHBsYW50YCwgYHByb3BlcnR5YCwgYHByb3BlcnR5T2ZgLCBgcHVsbGAsIGBwdWxsQWxsYCwgYHB1bGxBbGxCeWAsXG4gICAgICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAgICAgKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICAgICAqIGBzbGljZWAsIGBzb3J0YCwgYHNvcnRCeWAsIGBzcGxpY2VgLCBgc3ByZWFkYCwgYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICAgICAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gICAgICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gICAgICogYHVuaW9uYCwgYHVuaW9uQnlgLCBgdW5pb25XaXRoYCwgYHVuaXFgLCBgdW5pcUJ5YCwgYHVuaXFXaXRoYCwgYHVuc2V0YCxcbiAgICAgKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAgICAgKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gICAgICogYHppcE9iamVjdGAsIGB6aXBPYmplY3REZWVwYCwgYW5kIGB6aXBXaXRoYFxuICAgICAqXG4gICAgICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAgICAgKiBgYWRkYCwgYGF0dGVtcHRgLCBgY2FtZWxDYXNlYCwgYGNhcGl0YWxpemVgLCBgY2VpbGAsIGBjbGFtcGAsIGBjbG9uZWAsXG4gICAgICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gICAgICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAgICAgKiBgZXNjYXBlUmVnRXhwYCwgYGV2ZXJ5YCwgYGZpbmRgLCBgZmluZEluZGV4YCwgYGZpbmRLZXlgLCBgZmluZExhc3RgLFxuICAgICAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAgICAgKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICAgICAqIGBoYXNJbmAsIGBoZWFkYCwgYGlkZW50aXR5YCwgYGluY2x1ZGVzYCwgYGluZGV4T2ZgLCBgaW5SYW5nZWAsIGBpbnZva2VgLFxuICAgICAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICAgICAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICAgICAqIGBpc0VxdWFsV2l0aGAsIGBpc0Vycm9yYCwgYGlzRmluaXRlYCwgYGlzRnVuY3Rpb25gLCBgaXNJbnRlZ2VyYCwgYGlzTGVuZ3RoYCxcbiAgICAgKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICAgICAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gICAgICogYGlzU2FmZUludGVnZXJgLCBgaXNTZXRgLCBgaXNTdHJpbmdgLCBgaXNVbmRlZmluZWRgLCBgaXNUeXBlZEFycmF5YCxcbiAgICAgKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAgICAgKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gICAgICogYG1pbmAsIGBtaW5CeWAsIGBtdWx0aXBseWAsIGBub0NvbmZsaWN0YCwgYG5vb3BgLCBgbm93YCwgYG50aGAsIGBwYWRgLFxuICAgICAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICAgICAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gICAgICogYHNuYWtlQ2FzZWAsIGBzb21lYCwgYHNvcnRlZEluZGV4YCwgYHNvcnRlZEluZGV4QnlgLCBgc29ydGVkTGFzdEluZGV4YCxcbiAgICAgKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gICAgICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICAgICAqIGB0ZW1wbGF0ZWAsIGB0aW1lc2AsIGB0b0Zpbml0ZWAsIGB0b0ludGVnZXJgLCBgdG9KU09OYCwgYHRvTGVuZ3RoYCxcbiAgICAgKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gICAgICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gICAgICogYHVwcGVyRmlyc3RgLCBgdmFsdWVgLCBhbmQgYHdvcmRzYFxuICAgICAqXG4gICAgICogQG5hbWUgX1xuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIHNxdWFyZShuKSB7XG4gICAgICogICByZXR1cm4gbiAqIG47XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gICAgICpcbiAgICAgKiAvLyBSZXR1cm5zIGFuIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gICAgICogLy8gPT4gNlxuICAgICAqXG4gICAgICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gICAgICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICAgICAqXG4gICAgICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gICAgICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBMb2Rhc2hXcmFwcGVyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnX193cmFwcGVkX18nKSkge1xuICAgICAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAgICAgKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICovXG4gICAgdmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgICAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KCkpO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gICAgICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbY2hhaW5BbGxdIEVuYWJsZSBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gICAgICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gICAgICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gICAgICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gICAgICB0aGlzLl9faW5kZXhfXyA9IDA7XG4gICAgICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHRlbXBsYXRlIGRlbGltaXRlcnMgdXNlZCBieSBsb2Rhc2ggYXJlIGxpa2UgdGhvc2UgaW5cbiAgICAgKiBlbWJlZGRlZCBSdWJ5IChFUkIpIGFzIHdlbGwgYXMgRVMyMDE1IHRlbXBsYXRlIHN0cmluZ3MuIENoYW5nZSB0aGVcbiAgICAgKiBmb2xsb3dpbmcgdGVtcGxhdGUgc2V0dGluZ3MgdG8gdXNlIGFsdGVybmF0aXZlIGRlbGltaXRlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAqL1xuICAgIGxvZGFzaC50ZW1wbGF0ZVNldHRpbmdzID0ge1xuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gYmUgSFRNTC1lc2NhcGVkLlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtSZWdFeHB9XG4gICAgICAgKi9cbiAgICAgICdlc2NhcGUnOiByZUVzY2FwZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBVc2VkIHRvIGRldGVjdCBjb2RlIHRvIGJlIGV2YWx1YXRlZC5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7UmVnRXhwfVxuICAgICAgICovXG4gICAgICAnZXZhbHVhdGUnOiByZUV2YWx1YXRlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IGBkYXRhYCBwcm9wZXJ0eSB2YWx1ZXMgdG8gaW5qZWN0LlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtSZWdFeHB9XG4gICAgICAgKi9cbiAgICAgICdpbnRlcnBvbGF0ZSc6IHJlSW50ZXJwb2xhdGUsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlZCB0byByZWZlcmVuY2UgdGhlIGRhdGEgb2JqZWN0IGluIHRoZSB0ZW1wbGF0ZSB0ZXh0LlxuICAgICAgICpcbiAgICAgICAqIEBtZW1iZXJPZiBfLnRlbXBsYXRlU2V0dGluZ3NcbiAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgKi9cbiAgICAgICd2YXJpYWJsZSc6ICcnLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVzZWQgdG8gaW1wb3J0IHZhcmlhYmxlcyBpbnRvIHRoZSBjb21waWxlZCB0ZW1wbGF0ZS5cbiAgICAgICAqXG4gICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzXG4gICAgICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgICAgICovXG4gICAgICAnaW1wb3J0cyc6IHtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIGBsb2Rhc2hgIGZ1bmN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAbWVtYmVyT2YgXy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNcbiAgICAgICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAgICAgKi9cbiAgICAgICAgJ18nOiBsb2Rhc2hcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxuICAgIGxvZGFzaC5wcm90b3R5cGUgPSBiYXNlTG9kYXNoLnByb3RvdHlwZTtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG4gICAgTG9kYXNoV3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbiAgICBMb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgICAgIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgICAgIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgICAgIHRoaXMuX19kaXJfXyA9IDE7XG4gICAgICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICAgICAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gICAgICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICAgICAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGxhenkgd3JhcHBlciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGNsb25lXG4gICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGBMYXp5V3JhcHBlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhenlDbG9uZSgpIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcy5fX3dyYXBwZWRfXyk7XG4gICAgICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkodGhpcy5fX2FjdGlvbnNfXyk7XG4gICAgICByZXN1bHQuX19kaXJfXyA9IHRoaXMuX19kaXJfXztcbiAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSB0aGlzLl9fZmlsdGVyZWRfXztcbiAgICAgIHJlc3VsdC5fX2l0ZXJhdGVlc19fID0gY29weUFycmF5KHRoaXMuX19pdGVyYXRlZXNfXyk7XG4gICAgICByZXN1bHQuX190YWtlQ291bnRfXyA9IHRoaXMuX190YWtlQ291bnRfXztcbiAgICAgIHJlc3VsdC5fX3ZpZXdzX18gPSBjb3B5QXJyYXkodGhpcy5fX3ZpZXdzX18pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXZlcnNlcyB0aGUgZGlyZWN0aW9uIG9mIGxhenkgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSByZXZlcnNlXG4gICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHJldmVyc2VkIGBMYXp5V3JhcHBlcmAgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxhenlSZXZlcnNlKCkge1xuICAgICAgaWYgKHRoaXMuX19maWx0ZXJlZF9fKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgIHJlc3VsdC5fX2Rpcl9fID0gLTE7XG4gICAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICByZXN1bHQuX19kaXJfXyAqPSAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgdGhlIHVud3JhcHBlZCB2YWx1ZSBmcm9tIGl0cyBsYXp5IHdyYXBwZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHZhbHVlXG4gICAgICogQG1lbWJlck9mIExhenlXcmFwcGVyXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXp5VmFsdWUoKSB7XG4gICAgICB2YXIgYXJyYXkgPSB0aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksXG4gICAgICAgICAgZGlyID0gdGhpcy5fX2Rpcl9fLFxuICAgICAgICAgIGlzQXJyID0gaXNBcnJheShhcnJheSksXG4gICAgICAgICAgaXNSaWdodCA9IGRpciA8IDAsXG4gICAgICAgICAgYXJyTGVuZ3RoID0gaXNBcnIgPyBhcnJheS5sZW5ndGggOiAwLFxuICAgICAgICAgIHZpZXcgPSBnZXRWaWV3KDAsIGFyckxlbmd0aCwgdGhpcy5fX3ZpZXdzX18pLFxuICAgICAgICAgIHN0YXJ0ID0gdmlldy5zdGFydCxcbiAgICAgICAgICBlbmQgPSB2aWV3LmVuZCxcbiAgICAgICAgICBsZW5ndGggPSBlbmQgLSBzdGFydCxcbiAgICAgICAgICBpbmRleCA9IGlzUmlnaHQgPyBlbmQgOiAoc3RhcnQgLSAxKSxcbiAgICAgICAgICBpdGVyYXRlZXMgPSB0aGlzLl9faXRlcmF0ZWVzX18sXG4gICAgICAgICAgaXRlckxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHRha2VDb3VudCA9IG5hdGl2ZU1pbihsZW5ndGgsIHRoaXMuX190YWtlQ291bnRfXyk7XG5cbiAgICAgIGlmICghaXNBcnIgfHwgKCFpc1JpZ2h0ICYmIGFyckxlbmd0aCA9PSBsZW5ndGggJiYgdGFrZUNvdW50ID09IGxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUoYXJyYXksIHRoaXMuX19hY3Rpb25zX18pO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiByZXNJbmRleCA8IHRha2VDb3VudCkge1xuICAgICAgICBpbmRleCArPSBkaXI7XG5cbiAgICAgICAgdmFyIGl0ZXJJbmRleCA9IC0xLFxuICAgICAgICAgICAgdmFsdWUgPSBhcnJheVtpbmRleF07XG5cbiAgICAgICAgd2hpbGUgKCsraXRlckluZGV4IDwgaXRlckxlbmd0aCkge1xuICAgICAgICAgIHZhciBkYXRhID0gaXRlcmF0ZWVzW2l0ZXJJbmRleF0sXG4gICAgICAgICAgICAgIGl0ZXJhdGVlID0gZGF0YS5pdGVyYXRlZSxcbiAgICAgICAgICAgICAgdHlwZSA9IGRhdGEudHlwZSxcbiAgICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX01BUF9GTEFHKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNvbXB1dGVkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PSBMQVpZX0ZJTFRFUl9GTEFHKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbGVhclxuICAgICAqIEBtZW1iZXJPZiBIYXNoXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICAgICAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICAgICAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIEhhc2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgICAgIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gICAgICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbiAgICBIYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbiAgICBIYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuICAgIEhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG4gICAgSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbiAgICBIYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fID0gW107XG4gICAgICB0aGlzLnNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgICAgIGRhdGEucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gICAgICB9XG4gICAgICAtLXRoaXMuc2l6ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBnZXRcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gICAgICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgICAgIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIExpc3RDYWNoZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICArK3RoaXMuc2l6ZTtcbiAgICAgICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG4gICAgTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuICAgIExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgY2xlYXJcbiAgICAgKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICAgICAgdGhpcy5zaXplID0gMDtcbiAgICAgIHRoaXMuX19kYXRhX18gPSB7XG4gICAgICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICAgICAnc3RyaW5nJzogbmV3IEhhc2hcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZGVsZXRlXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE1hcERhdGEodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgZ2V0XG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgaGFzXG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQG5hbWUgc2V0XG4gICAgICogQG1lbWJlck9mIE1hcENhY2hlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgICAgIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbiAgICBNYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG4gICAgTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuICAgIE1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGB2YWx1ZWAgdG8gdGhlIGFycmF5IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBhZGRcbiAgICAgKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAgICAgKiBAYWxpYXMgcHVzaFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNhY2hlLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldENhY2hlQWRkKHZhbHVlKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBoYXNcbiAgICAgKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuICAgIFNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuICAgIFNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBjbGVhclxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gICAgICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAbmFtZSBkZWxldGVcbiAgICAgKiBAbWVtYmVyT2YgU3RhY2tcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGdldFxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIGhhc1xuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBuYW1lIHNldFxuICAgICAqIEBtZW1iZXJPZiBTdGFja1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgICAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgICAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgICAgIH1cbiAgICAgIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cbiAgICBTdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuICAgIFN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcbiAgICBTdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG4gICAgU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuICAgIFN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gICAgICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgICAgICBpc0FyZyA9ICFpc0FyciAmJiBpc0FyZ3VtZW50cyh2YWx1ZSksXG4gICAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICAgICAgc2tpcEluZGV4ZXMgPSBpc0FyciB8fCBpc0FyZyB8fCBpc0J1ZmYgfHwgaXNUeXBlLFxuICAgICAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXG4gICAgICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XG4gICAgICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICAgICApKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZWAgZm9yIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTYW1wbGUoYXJyYXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlbYmFzZVJhbmRvbSgwLCBsZW5ndGggLSAxKV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNhbXBsZVNpemVgIGZvciBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzYW1wbGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXJyYXlTYW1wbGVTaXplKGFycmF5LCBuKSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoY29weUFycmF5KGFycmF5KSwgYmFzZUNsYW1wKG4sIDAsIGFycmF5Lmxlbmd0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zaHVmZmxlYCBmb3IgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhcnJheVNodWZmbGUoYXJyYXkpIHtcbiAgICAgIHJldHVybiBzaHVmZmxlU2VsZihjb3B5QXJyYXkoYXJyYXkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxuICAgICAqIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZXEob2JqZWN0W2tleV0sIHZhbHVlKSkgfHxcbiAgICAgICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV07XG4gICAgICBpZiAoIShoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxuICAgICAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWdncmVnYXRlcyBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgb24gYGFjY3VtdWxhdG9yYCB3aXRoIGtleXMgdHJhbnNmb3JtZWRcbiAgICAgKiBieSBgaXRlcmF0ZWVgIGFuZCB2YWx1ZXMgc2V0IGJ5IGBzZXR0ZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSBrZXlzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBhY2N1bXVsYXRvciBUaGUgaW5pdGlhbCBhZ2dyZWdhdGVkIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQWdncmVnYXRvcihjb2xsZWN0aW9uLCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIHZhbHVlLCBpdGVyYXRlZSh2YWx1ZSksIGNvbGxlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXNcbiAgICAgKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5hc3NpZ25JbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gICAgICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduSW4ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgY29weU9iamVjdChzb3VyY2UsIGtleXNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gICAgICogdmFsdWUgY2hlY2tzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIGRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgICAgICd2YWx1ZSc6IHZhbHVlLFxuICAgICAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWwgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwaWNrZWQgZWxlbWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUF0KG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICAgIHNraXAgPSBvYmplY3QgPT0gbnVsbDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2luZGV4XSA9IHNraXAgPyB1bmRlZmluZWQgOiBnZXQob2JqZWN0LCBwYXRoc1tpbmRleF0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jbGFtcGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2xhbXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY2xhbXBlZCBudW1iZXIuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNsYW1wKG51bWJlciwgbG93ZXIsIHVwcGVyKSB7XG4gICAgICBpZiAobnVtYmVyID09PSBudW1iZXIpIHtcbiAgICAgICAgaWYgKHVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPD0gdXBwZXIgPyBudW1iZXIgOiB1cHBlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG51bWJlciA9IG51bWJlciA+PSBsb3dlciA/IG51bWJlciA6IGxvd2VyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAgICAgKiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAqICAxIC0gRGVlcCBjbG9uZVxuICAgICAqICAyIC0gRmxhdHRlbiBpbmhlcml0ZWQgcHJvcGVydGllc1xuICAgICAqICA0IC0gQ2xvbmUgc3ltYm9sc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtrZXldIFRoZSBrZXkgb2YgYHZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIHBhcmVudCBvYmplY3Qgb2YgYHZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gICAgICB2YXIgcmVzdWx0LFxuICAgICAgICAgIGlzRGVlcCA9IGJpdG1hc2sgJiBDTE9ORV9ERUVQX0ZMQUcsXG4gICAgICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgICAgICBpc0Z1bGwgPSBiaXRtYXNrICYgQ0xPTkVfU1lNQk9MU19GTEFHO1xuXG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpO1xuICAgICAgaWYgKGlzQXJyKSB7XG4gICAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUFycmF5KHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgICAgIGlzRnVuYyA9IHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG5cbiAgICAgICAgaWYgKGlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnID09IG9iamVjdFRhZyB8fCB0YWcgPT0gYXJnc1RhZyB8fCAoaXNGdW5jICYmICFvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgICAgIGlmICghaXNEZWVwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNGbGF0XG4gICAgICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgICAgICA6IGNvcHlTeW1ib2xzKHZhbHVlLCBiYXNlQXNzaWduKHJlc3VsdCwgdmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFjbG9uZWFibGVUYWdzW3RhZ10pIHtcbiAgICAgICAgICAgIHJldHVybiBvYmplY3QgPyB2YWx1ZSA6IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZSwgdGFnLCBpc0RlZXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgcmV0dXJuIGl0cyBjb3JyZXNwb25kaW5nIGNsb25lLlxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkO1xuICAgICAgfVxuICAgICAgc3RhY2suc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICBpZiAoaXNTZXQodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgICAgICByZXN1bHQuYWRkKGJhc2VDbG9uZShzdWJWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3ViVmFsdWUsIHZhbHVlLCBzdGFjaykpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUsIGtleSkge1xuICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBiYXNlQ2xvbmUoc3ViVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGtleSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB2YXIga2V5c0Z1bmMgPSBpc0Z1bGxcbiAgICAgICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICAgICAgOiAoaXNGbGF0ID8ga2V5c0luIDoga2V5cyk7XG5cbiAgICAgIHZhciBwcm9wcyA9IGlzQXJyID8gdW5kZWZpbmVkIDoga2V5c0Z1bmModmFsdWUpO1xuICAgICAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICAgIGlmIChwcm9wcykge1xuICAgICAgICAgIGtleSA9IHN1YlZhbHVlO1xuICAgICAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBwb3B1bGF0ZSBjbG9uZSAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNvbmZvcm1zYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUNvbmZvcm1zKHNvdXJjZSkge1xuICAgICAgdmFyIHByb3BzID0ga2V5cyhzb3VyY2UpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUNvbmZvcm1zVG8ob2JqZWN0LCBzb3VyY2UsIHByb3BzKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY29uZm9ybXNUb2Agd2hpY2ggYWNjZXB0cyBgcHJvcHNgIHRvIGNoZWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgcHJlZGljYXRlcyB0byBjb25mb3JtIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBjb25mb3JtcywgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBwcm9wcykge1xuICAgICAgdmFyIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gIWxlbmd0aDtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcm9wc1tsZW5ndGhdLFxuICAgICAgICAgICAgcHJlZGljYXRlID0gc291cmNlW2tleV0sXG4gICAgICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgICAgIGlmICgodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB8fCAhcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZGVsYXlgIGFuZCBgXy5kZWZlcmAgd2hpY2ggYWNjZXB0cyBgYXJnc2BcbiAgICAgKiB0byBwcm92aWRlIHRvIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkgaW52b2NhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gcHJvdmlkZSB0byBgZnVuY2AuXG4gICAgICogQHJldHVybnMge251bWJlcnxPYmplY3R9IFJldHVybnMgdGhlIHRpbWVyIGlkIG9yIHRpbWVvdXQgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VEZWxheShmdW5jLCB3YWl0LCBhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHsgZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gICAgICogZm9yIGV4Y2x1ZGluZyBtdWx0aXBsZSBhcnJheXMgb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgICAgdmFsdWVzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aDtcblxuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgICAgICBpbmNsdWRlcyA9IGNhY2hlSGFzO1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgICAgIH1cbiAgICAgIG91dGVyOlxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA9PSBudWxsID8gdmFsdWUgOiBpdGVyYXRlZSh2YWx1ZSk7XG5cbiAgICAgICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgICAgIGlmIChpc0NvbW1vbiAmJiBjb21wdXRlZCA9PT0gY29tcHV0ZWQpIHtcbiAgICAgICAgICB2YXIgdmFsdWVzSW5kZXggPSB2YWx1ZXNMZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbdmFsdWVzSW5kZXhdID09PSBjb21wdXRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpbmNsdWRlcyh2YWx1ZXMsIGNvbXB1dGVkLCBjb21wYXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JFYWNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaFJpZ2h0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqL1xuICAgIHZhciBiYXNlRWFjaFJpZ2h0ID0gY3JlYXRlQmFzZUVhY2goYmFzZUZvck93blJpZ2h0LCB0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmV2ZXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV2ZXJ5KGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgcmVzdWx0ID0gISFwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8ubWF4YCBhbmQgYF8ubWluYCB3aGljaCBhY2NlcHRzIGFcbiAgICAgKiBgY29tcGFyYXRvcmAgdG8gZGV0ZXJtaW5lIHRoZSBleHRyZW11bSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgdXNlZCB0byBjb21wYXJlIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZXh0cmVtdW0gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUV4dHJlbXVtKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjdXJyZW50ID0gaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9IG51bGwgJiYgKGNvbXB1dGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyAoY3VycmVudCA9PT0gY3VycmVudCAmJiAhaXNTeW1ib2woY3VycmVudCkpXG4gICAgICAgICAgICAgIDogY29tcGFyYXRvcihjdXJyZW50LCBjb21wdXRlZClcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICB2YXIgY29tcHV0ZWQgPSBjdXJyZW50LFxuICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWxsYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmaWxsLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGZpbGwgYGFycmF5YCB3aXRoLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIHN0YXJ0ID0gdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGVuZCA9IChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiBsZW5ndGgpID8gbGVuZ3RoIDogdG9JbnRlZ2VyKGVuZCk7XG4gICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICBlbmQgKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgICAgZW5kID0gc3RhcnQgPiBlbmQgPyAwIDogdG9MZW5ndGgoZW5kKTtcbiAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xuICAgICAgICBhcnJheVtzdGFydCsrXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgICAgIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gICAgICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIHZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBiYXNlRm9yYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXNcbiAgICAgKiBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgdmFyIGJhc2VGb3JSaWdodCA9IGNyZWF0ZUJhc2VGb3IodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duUmlnaHRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUZvck93blJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvclJpZ2h0KG9iamVjdCwgaXRlcmF0ZWUsIGtleXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZ1bmN0aW9uc2Agd2hpY2ggY3JlYXRlcyBhbiBhcnJheSBvZlxuICAgICAqIGBvYmplY3RgIGZ1bmN0aW9uIHByb3BlcnR5IG5hbWVzIGZpbHRlcmVkIGZyb20gYHByb3BzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGZpbHRlci5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VGdW5jdGlvbnMob2JqZWN0LCBwcm9wcykge1xuICAgICAgcmV0dXJuIGFycmF5RmlsdGVyKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqZWN0W2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0QWxsS2V5c2AgYW5kIGBnZXRBbGxLZXlzSW5gIHdoaWNoIHVzZXNcbiAgICAgKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgICAgIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICAgICAgcmV0dXJuIGlzQXJyYXkob2JqZWN0KSA/IHJlc3VsdCA6IGFycmF5UHVzaChyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgICAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICAgICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ3RgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUd0KHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlID4gb3RoZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUhhcyhvYmplY3QsIGtleSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCwga2V5KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluUmFuZ2VgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBudW1iZXJgIGlzIGluIHRoZSByYW5nZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+PSBuYXRpdmVNaW4oc3RhcnQsIGVuZCkgJiYgbnVtYmVyIDwgbmF0aXZlTWF4KHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gLCB3aXRob3V0IHN1cHBvcnRcbiAgICAgKiBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2Ygc2hhcmVkIHZhbHVlcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW50ZXJzZWN0aW9uKGFycmF5cywgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpIHtcbiAgICAgIHZhciBpbmNsdWRlcyA9IGNvbXBhcmF0b3IgPyBhcnJheUluY2x1ZGVzV2l0aCA6IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgICAgICBvdGhMZW5ndGggPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICAgIG90aEluZGV4ID0gb3RoTGVuZ3RoLFxuICAgICAgICAgIGNhY2hlcyA9IEFycmF5KG90aExlbmd0aCksXG4gICAgICAgICAgbWF4TGVuZ3RoID0gSW5maW5pdHksXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlIChvdGhJbmRleC0tKSB7XG4gICAgICAgIHZhciBhcnJheSA9IGFycmF5c1tvdGhJbmRleF07XG4gICAgICAgIGlmIChvdGhJbmRleCAmJiBpdGVyYXRlZSkge1xuICAgICAgICAgIGFycmF5ID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgICAgICB9XG4gICAgICAgIG1heExlbmd0aCA9IG5hdGl2ZU1pbihhcnJheS5sZW5ndGgsIG1heExlbmd0aCk7XG4gICAgICAgIGNhY2hlc1tvdGhJbmRleF0gPSAhY29tcGFyYXRvciAmJiAoaXRlcmF0ZWUgfHwgKGxlbmd0aCA+PSAxMjAgJiYgYXJyYXkubGVuZ3RoID49IDEyMCkpXG4gICAgICAgICAgPyBuZXcgU2V0Q2FjaGUob3RoSW5kZXggJiYgYXJyYXkpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhcnJheSA9IGFycmF5c1swXTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgc2VlbiA9IGNhY2hlc1swXTtcblxuICAgICAgb3V0ZXI6XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiByZXN1bHQubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKCEoc2VlblxuICAgICAgICAgICAgICA/IGNhY2hlSGFzKHNlZW4sIGNvbXB1dGVkKVxuICAgICAgICAgICAgICA6IGluY2x1ZGVzKHJlc3VsdCwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgb3RoSW5kZXggPSBvdGhMZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKC0tb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBjYWNoZSA9IGNhY2hlc1tvdGhJbmRleF07XG4gICAgICAgICAgICBpZiAoIShjYWNoZVxuICAgICAgICAgICAgICAgICAgPyBjYWNoZUhhcyhjYWNoZSwgY29tcHV0ZWQpXG4gICAgICAgICAgICAgICAgICA6IGluY2x1ZGVzKGFycmF5c1tvdGhJbmRleF0sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWVuKSB7XG4gICAgICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52ZXJ0YCBhbmQgYF8uaW52ZXJ0QnlgIHdoaWNoIGludmVydHNcbiAgICAgKiBgb2JqZWN0YCB3aXRoIHZhbHVlcyB0cmFuc2Zvcm1lZCBieSBgaXRlcmF0ZWVgIGFuZCBzZXQgYnkgYHNldHRlcmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc2V0dGVyIFRoZSBmdW5jdGlvbiB0byBzZXQgYGFjY3VtdWxhdG9yYCB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIHRvIHRyYW5zZm9ybSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGFjY3VtdWxhdG9yIFRoZSBpbml0aWFsIGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGFjY3VtdWxhdG9yYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSW52ZXJ0ZXIob2JqZWN0LCBzZXR0ZXIsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBzZXR0ZXIoYWNjdW11bGF0b3IsIGl0ZXJhdGVlKHZhbHVlKSwga2V5LCBvYmplY3QpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW52b2tlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBtZXRob2QgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpIHtcbiAgICAgIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuICAgICAgb2JqZWN0ID0gcGFyZW50KG9iamVjdCwgcGF0aCk7XG4gICAgICB2YXIgZnVuYyA9IG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogb2JqZWN0W3RvS2V5KGxhc3QocGF0aCkpXTtcbiAgICAgIHJldHVybiBmdW5jID09IG51bGwgPyB1bmRlZmluZWQgOiBhcHBseShmdW5jLCBvYmplY3QsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FycmF5QnVmZmVyYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXkgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzQXJyYXlCdWZmZXIodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFycmF5QnVmZmVyVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRGF0ZWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZGF0ZSBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNEYXRlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBkYXRlVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAgICAgKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICAgICAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAgICAgKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICAgICAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAgICAgKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gICAgICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICAgICAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gICAgICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgICAgIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gICAgICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gICAgICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICAgICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgICAgICBvYmpJc09iaiA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgICAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaXNTYW1lVGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGdldFRhZyh2YWx1ZSkgPT0gbWFwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICAgICAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAhbGVuZ3RoO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgICAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICAgICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICAgICAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzUmVnRXhwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSByZWdleHAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlSXNSZWdFeHAodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHJlZ2V4cFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1NldGAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzU2V0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICAgICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gICAgICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gICAgICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICAgICAgaWYgKCFpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1Byb3RvID0gaXNQcm90b3R5cGUob2JqZWN0KSxcbiAgICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubHRgIHdoaWNoIGRvZXNuJ3QgY29lcmNlIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZUx0KHZhbHVlLCBvdGhlcikge1xuICAgICAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWFwYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwga2V5LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdFsrK2luZGV4XSA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgICAgIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgICAgIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gICAgICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUodG9LZXkocGF0aCksIHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZ2V0KG9iamVjdCwgcGF0aCk7XG4gICAgICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICAgICAgOiBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgbWVyZ2VkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgICAgIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBiYXNlRm9yKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xuICAgICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICAgICAgYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgICAgICAgICAgPyBjdXN0b21pemVyKHNhZmVHZXQob2JqZWN0LCBrZXkpLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9LCBrZXlzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gICAgICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAgICAgKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICAgICAqICBjb3VudGVycGFydHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFjaykge1xuICAgICAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICAgICAgc3JjVmFsdWUgPSBzYWZlR2V0KHNvdXJjZSwga2V5KSxcbiAgICAgICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcblxuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgc3RhY2tlZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgICAgPyBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGlzQ29tbW9uKSB7XG4gICAgICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIGlzQnVmZmVyKHNyY1ZhbHVlKSxcbiAgICAgICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBpc1R5cGVkQXJyYXkoc3JjVmFsdWUpO1xuXG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xuICAgICAgICAgIGlmIChpc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUxpa2VPYmplY3Qob2JqVmFsdWUpKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xuICAgICAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gY2xvbmVCdWZmZXIoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjbG9uZVR5cGVkQXJyYXkoc3JjVmFsdWUsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qoc3JjVmFsdWUpIHx8IGlzQXJndW1lbnRzKHNyY1ZhbHVlKSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICAgICAgaWYgKGlzQXJndW1lbnRzKG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSB0b1BsYWluT2JqZWN0KG9ialZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoIWlzT2JqZWN0KG9ialZhbHVlKSB8fCBpc0Z1bmN0aW9uKG9ialZhbHVlKSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBpbml0Q2xvbmVPYmplY3Qoc3JjVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNDb21tb24pIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgICAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICAgICAgfVxuICAgICAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm50aGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJldHVybi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbnRoIGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlTnRoKGFycmF5LCBuKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbiArPSBuIDwgMCA/IGxlbmd0aCA6IDA7XG4gICAgICByZXR1cm4gaXNJbmRleChuLCBsZW5ndGgpID8gYXJyYXlbbl0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ub3JkZXJCeWAgd2l0aG91dCBwYXJhbSBndWFyZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IGl0ZXJhdGVlcyBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gb3JkZXJzIFRoZSBzb3J0IG9yZGVycyBvZiBgaXRlcmF0ZWVzYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgaXRlcmF0ZWVzLCBvcmRlcnMpIHtcbiAgICAgIGlmIChpdGVyYXRlZXMubGVuZ3RoKSB7XG4gICAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICBpZiAoaXNBcnJheShpdGVyYXRlZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gYmFzZUdldCh2YWx1ZSwgaXRlcmF0ZWUubGVuZ3RoID09PSAxID8gaXRlcmF0ZWVbMF0gOiBpdGVyYXRlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpdGVyYXRlZTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVyYXRlZXMgPSBbaWRlbnRpdHldO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIGl0ZXJhdGVlcyA9IGFycmF5TWFwKGl0ZXJhdGVlcywgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcblxuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VNYXAoY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgICAgICB2YXIgY3JpdGVyaWEgPSBhcnJheU1hcChpdGVyYXRlZXMsIGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdGVlKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7ICdjcml0ZXJpYSc6IGNyaXRlcmlhLCAnaW5kZXgnOiArK2luZGV4LCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBiYXNlU29ydEJ5KHJlc3VsdCwgZnVuY3Rpb24ob2JqZWN0LCBvdGhlcikge1xuICAgICAgICByZXR1cm4gY29tcGFyZU11bHRpcGxlKG9iamVjdCwgb3RoZXIsIG9yZGVycyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5waWNrYCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWxcbiAgICAgKiBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpIHtcbiAgICAgIHJldHVybiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIGZ1bmN0aW9uKHZhbHVlLCBwYXRoKSB7XG4gICAgICAgIHJldHVybiBoYXNJbihvYmplY3QsIHBhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgIGBfLnBpY2tCeWAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgcGF0aCA9IHBhdGhzW2luZGV4XSxcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIHBhdGgpKSB7XG4gICAgICAgICAgYmFzZVNldChyZXN1bHQsIGNhc3RQYXRoKHBhdGgsIG9iamVjdCksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucHVsbEFsbEJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXG4gICAgICogc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGluZGV4T2YgPSBjb21wYXJhdG9yID8gYmFzZUluZGV4T2ZXaXRoIDogYmFzZUluZGV4T2YsXG4gICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgICAgIHNlZW4gPSBhcnJheTtcblxuICAgICAgaWYgKGFycmF5ID09PSB2YWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzID0gY29weUFycmF5KHZhbHVlcyk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgc2VlbiA9IGFycmF5TWFwKGFycmF5LCBiYXNlVW5hcnkoaXRlcmF0ZWUpKTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBmcm9tSW5kZXggPSAwLFxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZXNbaW5kZXhdLFxuICAgICAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgICAgIHdoaWxlICgoZnJvbUluZGV4ID0gaW5kZXhPZihzZWVuLCBjb21wdXRlZCwgZnJvbUluZGV4LCBjb21wYXJhdG9yKSkgPiAtMSkge1xuICAgICAgICAgIGlmIChzZWVuICE9PSBhcnJheSkge1xuICAgICAgICAgICAgc3BsaWNlLmNhbGwoc2VlbiwgZnJvbUluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3BsaWNlLmNhbGwoYXJyYXksIGZyb21JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wdWxsQXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaW5kaXZpZHVhbFxuICAgICAqIGluZGV4ZXMgb3IgY2FwdHVyaW5nIHRoZSByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ZXMgVGhlIGluZGV4ZXMgb2YgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VQdWxsQXQoYXJyYXksIGluZGV4ZXMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA/IGluZGV4ZXMubGVuZ3RoIDogMCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tsZW5ndGhdO1xuICAgICAgICBpZiAobGVuZ3RoID09IGxhc3RJbmRleCB8fCBpbmRleCAhPT0gcHJldmlvdXMpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXMgPSBpbmRleDtcbiAgICAgICAgICBpZiAoaXNJbmRleChpbmRleCkpIHtcbiAgICAgICAgICAgIHNwbGljZS5jYWxsKGFycmF5LCBpbmRleCwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhc2VVbnNldChhcnJheSwgaW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJhbmRvbWAgd2l0aG91dCBzdXBwb3J0IGZvciByZXR1cm5pbmdcbiAgICAgKiBmbG9hdGluZy1wb2ludCBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbG93ZXIgVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcmFuZG9tIG51bWJlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmFuZG9tKGxvd2VyLCB1cHBlcikge1xuICAgICAgcmV0dXJuIGxvd2VyICsgbmF0aXZlRmxvb3IobmF0aXZlUmFuZG9tKCkgKiAodXBwZXIgLSBsb3dlciArIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAgICAgKiBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCwgZnJvbVJpZ2h0KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlcGVhdGAgd2hpY2ggZG9lc24ndCBjb2VyY2UgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gcmVwZWF0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmVwZWF0ZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSZXBlYXQoc3RyaW5nLCBuKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAoIXN0cmluZyB8fCBuIDwgMSB8fCBuID4gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgLy8gTGV2ZXJhZ2UgdGhlIGV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nIGFsZ29yaXRobSBmb3IgYSBmYXN0ZXIgcmVwZWF0LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4cG9uZW50aWF0aW9uX2J5X3NxdWFyaW5nIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuICUgMikge1xuICAgICAgICAgIHJlc3VsdCArPSBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgbiA9IG5hdGl2ZUZsb29yKG4gLyAyKTtcbiAgICAgICAgaWYgKG4pIHtcbiAgICAgICAgICBzdHJpbmcgKz0gc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChuKTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zYW1wbGVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBzYW1wbGUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTYW1wbGUoY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGFycmF5U2FtcGxlKHZhbHVlcyhjb2xsZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2FtcGxlU2l6ZWAgd2l0aG91dCBwYXJhbSBndWFyZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmRvbSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2FtcGxlU2l6ZShjb2xsZWN0aW9uLCBuKSB7XG4gICAgICB2YXIgYXJyYXkgPSB2YWx1ZXMoY29sbGVjdGlvbik7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYoYXJyYXksIGJhc2VDbGFtcChuLCAwLCBhcnJheS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zZXRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfVxuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICAgICAgbmVzdGVkID0gb2JqZWN0O1xuXG4gICAgICB3aGlsZSAobmVzdGVkICE9IG51bGwgJiYgKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pLFxuICAgICAgICAgICAgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggIT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgdmFyIG9ialZhbHVlID0gbmVzdGVkW2tleV07XG4gICAgICAgICAgbmV3VmFsdWUgPSBjdXN0b21pemVyID8gY3VzdG9taXplcihvYmpWYWx1ZSwga2V5LCBuZXN0ZWQpIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGlzT2JqZWN0KG9ialZhbHVlKVxuICAgICAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgICAgIDogKGlzSW5kZXgocGF0aFtpbmRleCArIDFdKSA/IFtdIDoge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhc3NpZ25WYWx1ZShuZXN0ZWQsIGtleSwgbmV3VmFsdWUpO1xuICAgICAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldERhdGFgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBtZXRhZGF0YSB3aXRoLlxuICAgICAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICAgICAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gICAgICByZXR1cm4gZnVuYztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICAgICAqL1xuICAgIHZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICAgICAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zaHVmZmxlYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm4gc2h1ZmZsZVNlbGYodmFsdWVzKGNvbGxlY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5zbGljZWAgd2l0aG91dCBhbiBpdGVyYXRlZSBjYWxsIGd1YXJkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICBzdGFydCA9IC1zdGFydCA+IGxlbmd0aCA/IDAgOiAobGVuZ3RoICsgc3RhcnQpO1xuICAgICAgfVxuICAgICAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgZW5kICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCA9IHN0YXJ0ID4gZW5kID8gMCA6ICgoZW5kIC0gc3RhcnQpID4+PiAwKTtcbiAgICAgIHN0YXJ0ID4+Pj0gMDtcblxuICAgICAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvbWVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb21lKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSB7XG4gICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgICByZXR1cm4gIXJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZEluZGV4YCBhbmQgYF8uc29ydGVkTGFzdEluZGV4YCB3aGljaFxuICAgICAqIHBlcmZvcm1zIGEgYmluYXJ5IHNlYXJjaCBvZiBgYXJyYXlgIHRvIGRldGVybWluZSB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYFxuICAgICAqIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG8gbWFpbnRhaW4gaXRzIHNvcnQgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZXRIaWdoZXN0XSBTcGVjaWZ5IHJldHVybmluZyB0aGUgaGlnaGVzdCBxdWFsaWZpZWQgaW5kZXguXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHJldEhpZ2hlc3QpIHtcbiAgICAgIHZhciBsb3cgPSAwLFxuICAgICAgICAgIGhpZ2ggPSBhcnJheSA9PSBudWxsID8gbG93IDogYXJyYXkubGVuZ3RoO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIHZhbHVlID09PSB2YWx1ZSAmJiBoaWdoIDw9IEhBTEZfTUFYX0FSUkFZX0xFTkdUSCkge1xuICAgICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICAgIHZhciBtaWQgPSAobG93ICsgaGlnaCkgPj4+IDEsXG4gICAgICAgICAgICAgIGNvbXB1dGVkID0gYXJyYXlbbWlkXTtcblxuICAgICAgICAgIGlmIChjb21wdXRlZCAhPT0gbnVsbCAmJiAhaXNTeW1ib2woY29tcHV0ZWQpICYmXG4gICAgICAgICAgICAgIChyZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKSkpIHtcbiAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhpZ2ggPSBtaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWdoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VTb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaWRlbnRpdHksIHJldEhpZ2hlc3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNvcnRlZEluZGV4QnlgIGFuZCBgXy5zb3J0ZWRMYXN0SW5kZXhCeWBcbiAgICAgKiB3aGljaCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGB2YWx1ZWAgYW5kIGVhY2ggZWxlbWVudCBvZiBgYXJyYXlgIHRvIGNvbXB1dGVcbiAgICAgKiB0aGVpciBzb3J0IHJhbmtpbmcuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OyAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbcmV0SGlnaGVzdF0gU3BlY2lmeSByZXR1cm5pbmcgdGhlIGhpZ2hlc3QgcXVhbGlmaWVkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlLCByZXRIaWdoZXN0KSB7XG4gICAgICB2YXIgbG93ID0gMCxcbiAgICAgICAgICBoaWdoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoaGlnaCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSBpdGVyYXRlZSh2YWx1ZSk7XG4gICAgICB2YXIgdmFsSXNOYU4gPSB2YWx1ZSAhPT0gdmFsdWUsXG4gICAgICAgICAgdmFsSXNOdWxsID0gdmFsdWUgPT09IG51bGwsXG4gICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSksXG4gICAgICAgICAgdmFsSXNVbmRlZmluZWQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgICAgICB2YXIgbWlkID0gbmF0aXZlRmxvb3IoKGxvdyArIGhpZ2gpIC8gMiksXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKGFycmF5W21pZF0pLFxuICAgICAgICAgICAgb3RoSXNEZWZpbmVkID0gY29tcHV0ZWQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG90aElzTnVsbCA9IGNvbXB1dGVkID09PSBudWxsLFxuICAgICAgICAgICAgb3RoSXNSZWZsZXhpdmUgPSBjb21wdXRlZCA9PT0gY29tcHV0ZWQsXG4gICAgICAgICAgICBvdGhJc1N5bWJvbCA9IGlzU3ltYm9sKGNvbXB1dGVkKTtcblxuICAgICAgICBpZiAodmFsSXNOYU4pIHtcbiAgICAgICAgICB2YXIgc2V0TG93ID0gcmV0SGlnaGVzdCB8fCBvdGhJc1JlZmxleGl2ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxJc1VuZGVmaW5lZCkge1xuICAgICAgICAgIHNldExvdyA9IG90aElzUmVmbGV4aXZlICYmIChyZXRIaWdoZXN0IHx8IG90aElzRGVmaW5lZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsSXNOdWxsKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmIChyZXRIaWdoZXN0IHx8ICFvdGhJc051bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbElzU3ltYm9sKSB7XG4gICAgICAgICAgc2V0TG93ID0gb3RoSXNSZWZsZXhpdmUgJiYgb3RoSXNEZWZpbmVkICYmICFvdGhJc051bGwgJiYgKHJldEhpZ2hlc3QgfHwgIW90aElzU3ltYm9sKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdGhJc051bGwgfHwgb3RoSXNTeW1ib2wpIHtcbiAgICAgICAgICBzZXRMb3cgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRMb3cgPSByZXRIaWdoZXN0ID8gKGNvbXB1dGVkIDw9IHZhbHVlKSA6IChjb21wdXRlZCA8IHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0TG93KSB7XG4gICAgICAgICAgbG93ID0gbWlkICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoaWdoID0gbWlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmF0aXZlTWluKGhpZ2gsIE1BWF9BUlJBWV9JTkRFWCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc29ydGVkVW5pcWAgYW5kIGBfLnNvcnRlZFVuaXFCeWAgd2l0aG91dFxuICAgICAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVNvcnRlZFVuaXEoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlID8gaXRlcmF0ZWUodmFsdWUpIDogdmFsdWU7XG5cbiAgICAgICAgaWYgKCFpbmRleCB8fCAhZXEoY29tcHV0ZWQsIHNlZW4pKSB7XG4gICAgICAgICAgdmFyIHNlZW4gPSBjb21wdXRlZDtcbiAgICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b051bWJlcmAgd2hpY2ggZG9lc24ndCBlbnN1cmUgY29ycmVjdFxuICAgICAqIGNvbnZlcnNpb25zIG9mIGJpbmFyeSwgaGV4YWRlY2ltYWwsIG9yIG9jdGFsIHN0cmluZyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VUb051bWJlcih2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBOQU47XG4gICAgICB9XG4gICAgICByZXR1cm4gK3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICAgICAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gICAgICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gYmFzZVVuaXEoYXJyYXksIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXMsXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgICAgICByZXN1bHQgPSBbXSxcbiAgICAgICAgICBzZWVuID0gcmVzdWx0O1xuXG4gICAgICBpZiAoY29tcGFyYXRvcikge1xuICAgICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgICAgICBpbmNsdWRlcyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAobGVuZ3RoID49IExBUkdFX0FSUkFZX1NJWkUpIHtcbiAgICAgICAgdmFyIHNldCA9IGl0ZXJhdGVlID8gbnVsbCA6IGNyZWF0ZVNldChhcnJheSk7XG4gICAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2V0VG9BcnJheShzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgICAgIHNlZW4gPSBuZXcgU2V0Q2FjaGU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VlbiA9IGl0ZXJhdGVlID8gW10gOiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBvdXRlcjpcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSkgOiB2YWx1ZTtcblxuICAgICAgICB2YWx1ZSA9IChjb21wYXJhdG9yIHx8IHZhbHVlICE9PSAwKSA/IHZhbHVlIDogMDtcbiAgICAgICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoc2VlbkluZGV4LS0pIHtcbiAgICAgICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICAgICAgaWYgKHNlZW4gIT09IHJlc3VsdCkge1xuICAgICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcHJvcGVydHkgcGF0aCB0byB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcbiAgICAgIG9iamVjdCA9IHBhcmVudChvYmplY3QsIHBhdGgpO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsIHx8IGRlbGV0ZSBvYmplY3RbdG9LZXkobGFzdChwYXRoKSldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVwZGF0ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHVwZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB1cGRhdGVyIFRoZSBmdW5jdGlvbiB0byBwcm9kdWNlIHRoZSB1cGRhdGVkIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIHBhdGggY3JlYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlVXBkYXRlKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICAgICAgcmV0dXJuIGJhc2VTZXQob2JqZWN0LCBwYXRoLCB1cGRhdGVyKGJhc2VHZXQob2JqZWN0LCBwYXRoKSksIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy5kcm9wV2hpbGVgIGFuZCBgXy50YWtlV2hpbGVgXG4gICAgICogd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEcm9wXSBTcGVjaWZ5IGRyb3BwaW5nIGVsZW1lbnRzIGluc3RlYWQgb2YgdGFraW5nIHRoZW0uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VXaGlsZShhcnJheSwgcHJlZGljYXRlLCBpc0Ryb3AsIGZyb21SaWdodCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xO1xuXG4gICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSAmJlxuICAgICAgICBwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7fVxuXG4gICAgICByZXR1cm4gaXNEcm9wXG4gICAgICAgID8gYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gMCA6IGluZGV4KSwgKGZyb21SaWdodCA/IGluZGV4ICsgMSA6IGxlbmd0aCkpXG4gICAgICAgIDogYmFzZVNsaWNlKGFycmF5LCAoZnJvbVJpZ2h0ID8gaW5kZXggKyAxIDogMCksIChmcm9tUmlnaHQgPyBsZW5ndGggOiBpbmRleCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGB3cmFwcGVyVmFsdWVgIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZlxuICAgICAqIHBlcmZvcm1pbmcgYSBzZXF1ZW5jZSBvZiBhY3Rpb25zIG9uIHRoZSB1bndyYXBwZWQgYHZhbHVlYCwgd2hlcmUgZWFjaFxuICAgICAqIHN1Y2Nlc3NpdmUgYWN0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1bndyYXBwZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyBBY3Rpb25zIHRvIHBlcmZvcm0gdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYWN0aW9ucywgZnVuY3Rpb24ocmVzdWx0LCBhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJheVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7XG4gICAgICB9LCByZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIG1ldGhvZHMgbGlrZSBgXy54b3JgLCB3aXRob3V0IHN1cHBvcnQgZm9yXG4gICAgICogaXRlcmF0ZWUgc2hvcnRoYW5kcywgdGhhdCBhY2NlcHRzIGFuIGFycmF5IG9mIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheXMgVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgdmFsdWVzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGJhc2VYb3IoYXJyYXlzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5cy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVVuaXEoYXJyYXlzWzBdKSA6IFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJyYXlzW2luZGV4XSxcbiAgICAgICAgICAgIG90aEluZGV4ID0gLTE7XG5cbiAgICAgICAgd2hpbGUgKCsrb3RoSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAob3RoSW5kZXggIT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBiYXNlRGlmZmVyZW5jZShyZXN1bHRbaW5kZXhdIHx8IGFycmF5LCBhcnJheXNbb3RoSW5kZXhdLCBpdGVyYXRlZSwgY29tcGFyYXRvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVVuaXEoYmFzZUZsYXR0ZW4ocmVzdWx0LCAxKSwgaXRlcmF0ZWUsIGNvbXBhcmF0b3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy56aXBPYmplY3RgIHdoaWNoIGFzc2lnbnMgdmFsdWVzIHVzaW5nIGBhc3NpZ25GdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbkZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiYXNlWmlwT2JqZWN0KHByb3BzLCB2YWx1ZXMsIGFzc2lnbkZ1bmMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aCxcbiAgICAgICAgICB2YWxzTGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaW5kZXggPCB2YWxzTGVuZ3RoID8gdmFsdWVzW2luZGV4XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgYXNzaWduRnVuYyhyZXN1bHQsIHByb3BzW2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgdmFsdWVgIHRvIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IGFuIGFycmF5IGxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGNhc3QgYXJyYXktbGlrZSBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEFycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCB0byBgaWRlbnRpdHlgIGlmIGl0J3Mgbm90IGEgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGNhc3QgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FzdEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicgPyB2YWx1ZSA6IGlkZW50aXR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBgYmFzZVJlc3RgIGFsaWFzIHdoaWNoIGNhbiBiZSByZXBsYWNlZCB3aXRoIGBpZGVudGl0eWAgYnkgbW9kdWxlXG4gICAgICogcmVwbGFjZW1lbnQgcGx1Z2lucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgdmFyIGNhc3RSZXN0ID0gYmFzZVJlc3Q7XG5cbiAgICAvKipcbiAgICAgKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0U2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gICAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZDtcbiAgICAgIHJldHVybiAoIXN0YXJ0ICYmIGVuZCA+PSBsZW5ndGgpID8gYXJyYXkgOiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc2ltcGxlIHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgW2BjbGVhclRpbWVvdXRgXShodHRwczovL21kbi5pby9jbGVhclRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcnxPYmplY3R9IGlkIFRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdCBvZiB0aGUgdGltZXIgdG8gY2xlYXIuXG4gICAgICovXG4gICAgdmFyIGNsZWFyVGltZW91dCA9IGN0eENsZWFyVGltZW91dCB8fCBmdW5jdGlvbihpZCkge1xuICAgICAgcmV0dXJuIHJvb3QuY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgICAgIGJ1ZmZlci5jb3B5KHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGFycmF5IGJ1ZmZlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgICAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGBkYXRhVmlld2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhVmlldyBUaGUgZGF0YSB2aWV3IHRvIGNsb25lLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIGRhdGEgdmlldy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgICAgIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7XG4gICAgICByZXR1cm4gbmV3IGRhdGFWaWV3LmNvbnN0cnVjdG9yKGJ1ZmZlciwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIGByZWdleHBgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVnZXhwIFRoZSByZWdleHAgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHJlZ2V4cC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVJlZ0V4cChyZWdleHApIHtcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgcmVnZXhwLmNvbnN0cnVjdG9yKHJlZ2V4cC5zb3VyY2UsIHJlRmxhZ3MuZXhlYyhyZWdleHApKTtcbiAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgc3ltYm9sIG9iamVjdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mID8gT2JqZWN0KHN5bWJvbFZhbHVlT2YuY2FsbChzeW1ib2wpKSA6IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB0eXBlZCBhcnJheS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gICAgICB2YXIgYnVmZmVyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcbiAgICAgIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmVzIHZhbHVlcyB0byBzb3J0IHRoZW0gaW4gYXNjZW5kaW5nIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGB2YWx1ZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZUFzY2VuZGluZyh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gb3RoZXIpIHtcbiAgICAgICAgdmFyIHZhbElzRGVmaW5lZCA9IHZhbHVlICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICB2YWxJc051bGwgPSB2YWx1ZSA9PT0gbnVsbCxcbiAgICAgICAgICAgIHZhbElzUmVmbGV4aXZlID0gdmFsdWUgPT09IHZhbHVlLFxuICAgICAgICAgICAgdmFsSXNTeW1ib2wgPSBpc1N5bWJvbCh2YWx1ZSk7XG5cbiAgICAgICAgdmFyIG90aElzRGVmaW5lZCA9IG90aGVyICE9PSB1bmRlZmluZWQsXG4gICAgICAgICAgICBvdGhJc051bGwgPSBvdGhlciA9PT0gbnVsbCxcbiAgICAgICAgICAgIG90aElzUmVmbGV4aXZlID0gb3RoZXIgPT09IG90aGVyLFxuICAgICAgICAgICAgb3RoSXNTeW1ib2wgPSBpc1N5bWJvbChvdGhlcik7XG5cbiAgICAgICAgaWYgKCghb3RoSXNOdWxsICYmICFvdGhJc1N5bWJvbCAmJiAhdmFsSXNTeW1ib2wgJiYgdmFsdWUgPiBvdGhlcikgfHxcbiAgICAgICAgICAgICh2YWxJc1N5bWJvbCAmJiBvdGhJc0RlZmluZWQgJiYgb3RoSXNSZWZsZXhpdmUgJiYgIW90aElzTnVsbCAmJiAhb3RoSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAodmFsSXNOdWxsICYmIG90aElzRGVmaW5lZCAmJiBvdGhJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghdmFsSXNEZWZpbmVkICYmIG90aElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIXZhbElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghdmFsSXNOdWxsICYmICF2YWxJc1N5bWJvbCAmJiAhb3RoSXNTeW1ib2wgJiYgdmFsdWUgPCBvdGhlcikgfHxcbiAgICAgICAgICAgIChvdGhJc1N5bWJvbCAmJiB2YWxJc0RlZmluZWQgJiYgdmFsSXNSZWZsZXhpdmUgJiYgIXZhbElzTnVsbCAmJiAhdmFsSXNTeW1ib2wpIHx8XG4gICAgICAgICAgICAob3RoSXNOdWxsICYmIHZhbElzRGVmaW5lZCAmJiB2YWxJc1JlZmxleGl2ZSkgfHxcbiAgICAgICAgICAgICghb3RoSXNEZWZpbmVkICYmIHZhbElzUmVmbGV4aXZlKSB8fFxuICAgICAgICAgICAgIW90aElzUmVmbGV4aXZlKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLm9yZGVyQnlgIHRvIGNvbXBhcmUgbXVsdGlwbGUgcHJvcGVydGllcyBvZiBhIHZhbHVlIHRvIGFub3RoZXJcbiAgICAgKiBhbmQgc3RhYmxlIHNvcnQgdGhlbS5cbiAgICAgKlxuICAgICAqIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLiBPdGhlcndpc2UsXG4gICAgICogc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3IgZGVzY2VuZGluZyBvciBcImFzY1wiIGZvciBhc2NlbmRpbmcgc29ydCBvcmRlclxuICAgICAqIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbltdfHN0cmluZ1tdfSBvcmRlcnMgVGhlIG9yZGVyIHRvIHNvcnQgYnkgZm9yIGVhY2ggcHJvcGVydHkuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc29ydCBvcmRlciBpbmRpY2F0b3IgZm9yIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVNdWx0aXBsZShvYmplY3QsIG90aGVyLCBvcmRlcnMpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIG9iakNyaXRlcmlhID0gb2JqZWN0LmNyaXRlcmlhLFxuICAgICAgICAgIG90aENyaXRlcmlhID0gb3RoZXIuY3JpdGVyaWEsXG4gICAgICAgICAgbGVuZ3RoID0gb2JqQ3JpdGVyaWEubGVuZ3RoLFxuICAgICAgICAgIG9yZGVyc0xlbmd0aCA9IG9yZGVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjb21wYXJlQXNjZW5kaW5nKG9iakNyaXRlcmlhW2luZGV4XSwgb3RoQ3JpdGVyaWFbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmIChpbmRleCA+PSBvcmRlcnNMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBvcmRlciA9IG9yZGVyc1tpbmRleF07XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChvcmRlciA9PSAnZGVzYycgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGaXhlcyBhbiBgQXJyYXkjc29ydGAgYnVnIGluIHRoZSBKUyBlbmdpbmUgZW1iZWRkZWQgaW4gQWRvYmUgYXBwbGljYXRpb25zXG4gICAgICAvLyB0aGF0IGNhdXNlcyBpdCwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0byBwcm92aWRlIHRoZSBzYW1lIHZhbHVlIGZvclxuICAgICAgLy8gYG9iamVjdGAgYW5kIGBvdGhlcmAuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvcHVsbC8xMjQ3XG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgLy9cbiAgICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIGEgc3RhYmxlIHNvcnQgaW4gVjggYW5kIG90aGVyIGVuZ2luZXMuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9OTAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QuaW5kZXggLSBvdGhlci5pbmRleDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAgICAgKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICAgICAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KGxlZnRMZW5ndGggKyByYW5nZUxlbmd0aCksXG4gICAgICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzVW5jdXJyaWVkIHx8IGFyZ3NJbmRleCA8IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICAgICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gICAgICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIGFwcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gICAgICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgICAgIGhvbGRlcnNMZW5ndGggPSBob2xkZXJzLmxlbmd0aCxcbiAgICAgICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICAgICAgd2hpbGUgKCsrYXJnc0luZGV4IDwgcmFuZ2VMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgICB9XG4gICAgICB2YXIgb2Zmc2V0ID0gYXJnc0luZGV4O1xuICAgICAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICAgICAgfVxuICAgICAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgICAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdFtvZmZzZXQgKyBob2xkZXJzW2hvbGRlcnNJbmRleF1dID0gYXJnc1thcmdzSW5kZXgrK107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gICAgICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xuICAgICAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmV3KSB7XG4gICAgICAgICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb3BpZXMgb3duIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICAgICAgcmV0dXJuIGNvcHlPYmplY3Qoc291cmNlLCBnZXRTeW1ib2xzKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIG93biBhbmQgaW5oZXJpdGVkIHN5bWJvbHMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHNJbihzb3VyY2UpLCBvYmplY3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmdyb3VwQnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2luaXRpYWxpemVyXSBUaGUgYWNjdW11bGF0b3Igb2JqZWN0IGluaXRpYWxpemVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFnZ3JlZ2F0b3IgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQWdncmVnYXRvcihzZXR0ZXIsIGluaXRpYWxpemVyKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlBZ2dyZWdhdG9yIDogYmFzZUFnZ3JlZ2F0b3IsXG4gICAgICAgICAgICBhY2N1bXVsYXRvciA9IGluaXRpYWxpemVyID8gaW5pdGlhbGl6ZXIoKSA6IHt9O1xuXG4gICAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIHNldHRlciwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBhY2N1bXVsYXRvcik7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXG4gICAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGN1c3RvbWl6ZXIgPSAoYXNzaWduZXIubGVuZ3RoID4gMyAmJiB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChndWFyZCAmJiBpc0l0ZXJhdGVlQ2FsbChzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcbiAgICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICAgICAgbGVuZ3RoID0gMTtcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XG4gICAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCYXNlRWFjaChlYWNoRnVuYywgZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gZWFjaEZ1bmMoY29sbGVjdGlvbiwgaXRlcmF0ZWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgICAgIGluZGV4ID0gZnJvbVJpZ2h0ID8gbGVuZ3RoIDogLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgICAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgICAgIGlmIChpdGVyYXRlZShpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxuICAgICAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxuICAgICAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcbiAgICAgICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShpc0JpbmQgPyB0aGlzQXJnIDogdGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmxvd2VyRmlyc3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYFN0cmluZ2AgY2FzZSBtZXRob2QgdG8gdXNlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FzZUZpcnN0KG1ldGhvZE5hbWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgICB2YXIgc3RyU3ltYm9scyA9IGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdmFyIGNociA9IHN0clN5bWJvbHNcbiAgICAgICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgICAgICA6IHN0cmluZy5jaGFyQXQoMCk7XG5cbiAgICAgICAgdmFyIHRyYWlsaW5nID0gc3RyU3ltYm9sc1xuICAgICAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICAgICAgOiBzdHJpbmcuc2xpY2UoMSk7XG5cbiAgICAgICAgcmV0dXJuIGNoclttZXRob2ROYW1lXSgpICsgdHJhaWxpbmc7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmNhbWVsQ2FzZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lIGVhY2ggd29yZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvdW5kZXIoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKHdvcmRzKGRlYnVycihzdHJpbmcpLnJlcGxhY2UocmVBcG9zLCAnJykpLCBjYWxsYmFjaywgJycpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICAgICAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgICAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDdG9yO1xuICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0aGlzQmluZGluZyA9IGJhc2VDcmVhdGUoQ3Rvci5wcm90b3R5cGUpLFxuICAgICAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAgICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2VzNS5naXRodWIuaW8vI3gxMy4yLjIgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGVuYWJsZSBjdXJyeWluZy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhcml0eSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpIHtcbiAgICAgIHZhciBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlcik7XG5cbiAgICAgICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvbGRlcnMgPSAobGVuZ3RoIDwgMyAmJiBhcmdzWzBdICE9PSBwbGFjZWhvbGRlciAmJiBhcmdzW2xlbmd0aCAtIDFdICE9PSBwbGFjZWhvbGRlcilcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiByZXBsYWNlSG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG5cbiAgICAgICAgbGVuZ3RoIC09IGhvbGRlcnMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZm4gPSAodGhpcyAmJiB0aGlzICE9PSByb290ICYmIHRoaXMgaW5zdGFuY2VvZiB3cmFwcGVyKSA/IEN0b3IgOiBmdW5jO1xuICAgICAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmaW5kIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICAgIHZhciBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgIHZhciBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICAgICAgY29sbGVjdGlvbiA9IGtleXMoY29sbGVjdGlvbik7XG4gICAgICAgICAgcHJlZGljYXRlID0gZnVuY3Rpb24oa2V5KSB7IHJldHVybiBpdGVyYXRlZShpdGVyYWJsZVtrZXldLCBrZXksIGl0ZXJhYmxlKTsgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXhGdW5jKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZnJvbUluZGV4KTtcbiAgICAgICAgcmV0dXJuIGluZGV4ID4gLTEgPyBpdGVyYWJsZVtpdGVyYXRlZSA/IGNvbGxlY3Rpb25baW5kZXhdIDogaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYF8uZmxvd2Agb3IgYF8uZmxvd1JpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZmxvdyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVGbG93KGZyb21SaWdodCkge1xuICAgICAgcmV0dXJuIGZsYXRSZXN0KGZ1bmN0aW9uKGZ1bmNzKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBmdW5jcy5sZW5ndGgsXG4gICAgICAgICAgICBpbmRleCA9IGxlbmd0aCxcbiAgICAgICAgICAgIHByZXJlcSA9IExvZGFzaFdyYXBwZXIucHJvdG90eXBlLnRocnU7XG5cbiAgICAgICAgaWYgKGZyb21SaWdodCkge1xuICAgICAgICAgIGZ1bmNzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgIHZhciBmdW5jID0gZnVuY3NbaW5kZXhdO1xuICAgICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmVyZXEgJiYgIXdyYXBwZXIgJiYgZ2V0RnVuY05hbWUoZnVuYykgPT0gJ3dyYXBwZXInKSB7XG4gICAgICAgICAgICB2YXIgd3JhcHBlciA9IG5ldyBMb2Rhc2hXcmFwcGVyKFtdLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSB3cmFwcGVyID8gaW5kZXggOiBsZW5ndGg7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgZnVuYyA9IGZ1bmNzW2luZGV4XTtcblxuICAgICAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgICAgICBkYXRhID0gZnVuY05hbWUgPT0gJ3dyYXBwZXInID8gZ2V0RGF0YShmdW5jKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChkYXRhICYmIGlzTGF6aWFibGUoZGF0YVswXSkgJiZcbiAgICAgICAgICAgICAgICBkYXRhWzFdID09IChXUkFQX0FSWV9GTEFHIHwgV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1JFQVJHX0ZMQUcpICYmXG4gICAgICAgICAgICAgICAgIWRhdGFbNF0ubGVuZ3RoICYmIGRhdGFbOV0gPT0gMVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgIHdyYXBwZXIgPSB3cmFwcGVyW2dldEZ1bmNOYW1lKGRhdGFbMF0pXS5hcHBseSh3cmFwcGVyLCBkYXRhWzNdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JhcHBlciA9IChmdW5jLmxlbmd0aCA9PSAxICYmIGlzTGF6aWFibGUoZnVuYykpXG4gICAgICAgICAgICAgID8gd3JhcHBlcltmdW5jTmFtZV0oKVxuICAgICAgICAgICAgICA6IHdyYXBwZXIudGhydShmdW5jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICB2YWx1ZSA9IGFyZ3NbMF07XG5cbiAgICAgICAgICBpZiAod3JhcHBlciAmJiBhcmdzLmxlbmd0aCA9PSAxICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5wbGFudCh2YWx1ZSkudmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICAgICAgcmVzdWx0ID0gbGVuZ3RoID8gZnVuY3NbaW5kZXhdLmFwcGx5KHRoaXMsIGFyZ3MpIDogdmFsdWU7XG5cbiAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZnVuY3NbaW5kZXhdLmNhbGwodGhpcywgcmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCBvcHRpb25hbCBgdGhpc2BcbiAgICAgKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAgICAgKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc1JpZ2h0XSBUaGUgYHBhcnRpYWxzUmlnaHRgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSHlicmlkKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICAgICAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgICAgIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUcsXG4gICAgICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgICAgICBDdG9yID0gaXNCaW5kS2V5ID8gdW5kZWZpbmVkIDogY3JlYXRlQ3RvcihmdW5jKTtcblxuICAgICAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgICAgICB2YXIgcGxhY2Vob2xkZXIgPSBnZXRIb2xkZXIod3JhcHBlciksXG4gICAgICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnRpYWxzKSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0aWFsc1JpZ2h0KSB7XG4gICAgICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgICAgICB9XG4gICAgICAgIGxlbmd0aCAtPSBob2xkZXJzQ291bnQ7XG4gICAgICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlUmVjdXJyeShcbiAgICAgICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgICAgICBmbiA9IGlzQmluZEtleSA/IHRoaXNCaW5kaW5nW2Z1bmNdIDogZnVuYztcblxuICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICAgICAgaWYgKGFyZ1Bvcykge1xuICAgICAgICAgIGFyZ3MgPSByZW9yZGVyKGFyZ3MsIGFyZ1Bvcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uaW52ZXJ0QnlgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXR0ZXIgVGhlIGZ1bmN0aW9uIHRvIHNldCBhY2N1bXVsYXRvciB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdG9JdGVyYXRlZSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSBpdGVyYXRlZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52ZXJ0ZXIoc2V0dGVyLCB0b0l0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgICByZXR1cm4gYmFzZUludmVydGVyKG9iamVjdCwgc2V0dGVyLCB0b0l0ZXJhdGVlKGl0ZXJhdGVlKSwge30pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIG1hdGhlbWF0aWNhbCBvcGVyYXRpb24gb24gdHdvIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3BlcmF0b3IgVGhlIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHVzZWQgZm9yIGB1bmRlZmluZWRgIGFyZ3VtZW50cy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtYXRoZW1hdGljYWwgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1hdGhPcGVyYXRpb24ob3BlcmF0b3IsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvdGhlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdGhlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gb3RoZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGJhc2VUb1N0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBvdGhlciA9IGJhc2VUb1N0cmluZyhvdGhlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gYmFzZVRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIG90aGVyID0gYmFzZVRvTnVtYmVyKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gb3BlcmF0b3IodmFsdWUsIG90aGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5vdmVyYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYXJyYXlGdW5jIFRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgaXRlcmF0ZWVzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG92ZXIgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlT3ZlcihhcnJheUZ1bmMpIHtcbiAgICAgIHJldHVybiBmbGF0UmVzdChmdW5jdGlvbihpdGVyYXRlZXMpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gYXJyYXlNYXAoaXRlcmF0ZWVzLCBiYXNlVW5hcnkoZ2V0SXRlcmF0ZWUoKSkpO1xuICAgICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICAgIHZhciB0aGlzQXJnID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gYXJyYXlGdW5jKGl0ZXJhdGVlcywgZnVuY3Rpb24oaXRlcmF0ZWUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdGhpc0FyZywgYXJncyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgcGFkZGluZyBmb3IgYHN0cmluZ2AgYmFzZWQgb24gYGxlbmd0aGAuIFRoZSBgY2hhcnNgIHN0cmluZ1xuICAgICAqIGlzIHRydW5jYXRlZCBpZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXhjZWVkcyBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgcGFkZGluZyBsZW5ndGguXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz0nICddIFRoZSBzdHJpbmcgdXNlZCBhcyBwYWRkaW5nLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHBhZGRpbmcgZm9yIGBzdHJpbmdgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhZGRpbmcobGVuZ3RoLCBjaGFycykge1xuICAgICAgY2hhcnMgPSBjaGFycyA9PT0gdW5kZWZpbmVkID8gJyAnIDogYmFzZVRvU3RyaW5nKGNoYXJzKTtcblxuICAgICAgdmFyIGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuICAgICAgaWYgKGNoYXJzTGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gY2hhcnNMZW5ndGggPyBiYXNlUmVwZWF0KGNoYXJzLCBsZW5ndGgpIDogY2hhcnM7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gYmFzZVJlcGVhdChjaGFycywgbmF0aXZlQ2VpbChsZW5ndGggLyBzdHJpbmdTaXplKGNoYXJzKSkpO1xuICAgICAgcmV0dXJuIGhhc1VuaWNvZGUoY2hhcnMpXG4gICAgICAgID8gY2FzdFNsaWNlKHN0cmluZ1RvQXJyYXkocmVzdWx0KSwgMCwgbGVuZ3RoKS5qb2luKCcnKVxuICAgICAgICA6IHJlc3VsdC5zbGljZSgwLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAgICAgKiBvZiBgdGhpc0FyZ2AgYW5kIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYXJ0aWFscyBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAgICAgKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMpIHtcbiAgICAgIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICAgICAgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgICAgIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgICAgIGFyZ3NMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICAgICAgYXJncyA9IEFycmF5KGxlZnRMZW5ndGggKyBhcmdzTGVuZ3RoKSxcbiAgICAgICAgICAgIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcblxuICAgICAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXhdID0gcGFydGlhbHNbbGVmdEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICAgICAgYXJnc1tsZWZ0SW5kZXgrK10gPSBhcmd1bWVudHNbKythcmdzSW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnJhbmdlYCBvciBgXy5yYW5nZVJpZ2h0YCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2UoZnJvbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgICBpZiAoc3RlcCAmJiB0eXBlb2Ygc3RlcCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdGFydCwgZW5kLCBzdGVwKSkge1xuICAgICAgICAgIGVuZCA9IHN0ZXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgICAgICBzdGFydCA9IHRvRmluaXRlKHN0YXJ0KTtcbiAgICAgICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICAgICAgcmV0dXJuIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHJlbGF0aW9uYWwgb3BlcmF0aW9uIG9uIHR3byB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IG9wZXJhdG9yIFRoZSBmdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBvcGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVsYXRpb25hbCBvcGVyYXRpb24gZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihvcGVyYXRvcikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBvdGhlcikge1xuICAgICAgICBpZiAoISh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgJiYgdHlwZW9mIG90aGVyID09ICdzdHJpbmcnKSkge1xuICAgICAgICAgIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgIG90aGVyID0gdG9OdW1iZXIob3RoZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcGVyYXRvcih2YWx1ZSwgb3RoZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAgICAgKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gICAgICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlUmVjdXJyeShmdW5jLCBiaXRtYXNrLCB3cmFwRnVuYywgcGxhY2Vob2xkZXIsIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3SG9sZGVyc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IGhvbGRlcnMsXG4gICAgICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICAgICAgYml0bWFzayB8PSAoaXNDdXJyeSA/IFdSQVBfUEFSVElBTF9GTEFHIDogV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICAgICAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHKTtcbiAgICAgIH1cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBuZXdQYXJ0aWFscywgbmV3SG9sZGVycywgbmV3UGFydGlhbHNSaWdodCxcbiAgICAgICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIHZhciByZXN1bHQgPSB3cmFwRnVuYy5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICAgICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8ucm91bmRgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYE1hdGhgIG1ldGhvZCB0byB1c2Ugd2hlbiByb3VuZGluZy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByb3VuZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVSb3VuZChtZXRob2ROYW1lKSB7XG4gICAgICB2YXIgZnVuYyA9IE1hdGhbbWV0aG9kTmFtZV07XG4gICAgICByZXR1cm4gZnVuY3Rpb24obnVtYmVyLCBwcmVjaXNpb24pIHtcbiAgICAgICAgbnVtYmVyID0gdG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09IG51bGwgPyAwIDogbmF0aXZlTWluKHRvSW50ZWdlcihwcmVjaXNpb24pLCAyOTIpO1xuICAgICAgICBpZiAocHJlY2lzaW9uICYmIG5hdGl2ZUlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAvLyBTaGlmdCB3aXRoIGV4cG9uZW50aWFsIG5vdGF0aW9uIHRvIGF2b2lkIGZsb2F0aW5nLXBvaW50IGlzc3Vlcy5cbiAgICAgICAgICAvLyBTZWUgW01ETl0oaHR0cHM6Ly9tZG4uaW8vcm91bmQjRXhhbXBsZXMpIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICAgICAgdmFyIHBhaXIgPSAodG9TdHJpbmcobnVtYmVyKSArICdlJykuc3BsaXQoJ2UnKSxcbiAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jKHBhaXJbMF0gKyAnZScgKyAoK3BhaXJbMV0gKyBwcmVjaXNpb24pKTtcblxuICAgICAgICAgIHBhaXIgPSAodG9TdHJpbmcodmFsdWUpICsgJ2UnKS5zcGxpdCgnZScpO1xuICAgICAgICAgIHJldHVybiArKHBhaXJbMF0gKyAnZScgKyAoK3BhaXJbMV0gLSBwcmVjaXNpb24pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYyhudW1iZXIpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IHNldC5cbiAgICAgKi9cbiAgICB2YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodmFsdWVzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBfLnRvUGFpcnNgIG9yIGBfLnRvUGFpcnNJbmAgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFpcnMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVG9QYWlycyhrZXlzRnVuYykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICB2YXIgdGFnID0gZ2V0VGFnKG9iamVjdCk7XG4gICAgICAgIGlmICh0YWcgPT0gbWFwVGFnKSB7XG4gICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXkob2JqZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFnID09IHNldFRhZykge1xuICAgICAgICAgIHJldHVybiBzZXRUb1BhaXJzKG9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2VUb1BhaXJzKG9iamVjdCwga2V5c0Z1bmMob2JqZWN0KSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAgICAgKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAgICAgKiAgICAxIC0gYF8uYmluZGBcbiAgICAgKiAgICAyIC0gYF8uYmluZEtleWBcbiAgICAgKiAgICA0IC0gYF8uY3VycnlgIG9yIGBfLmN1cnJ5UmlnaHRgIG9mIGEgYm91bmQgZnVuY3Rpb25cbiAgICAgKiAgICA4IC0gYF8uY3VycnlgXG4gICAgICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gICAgICogICAzMiAtIGBfLnBhcnRpYWxgXG4gICAgICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAgICAgKiAgMTI4IC0gYF8ucmVhcmdgXG4gICAgICogIDI1NiAtIGBfLmFyeWBcbiAgICAgKiAgNTEyIC0gYF8uZmxpcGBcbiAgICAgKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgICAgIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICAgICAgaWYgKCFpc0JpbmRLZXkgJiYgdHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gcGFydGlhbHMgPyBwYXJ0aWFscy5sZW5ndGggOiAwO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gICAgICBhcml0eSA9IGFyaXR5ID09PSB1bmRlZmluZWQgPyBhcml0eSA6IHRvSW50ZWdlcihhcml0eSk7XG4gICAgICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICAgICAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgICAgICB2YXIgcGFydGlhbHNSaWdodCA9IHBhcnRpYWxzLFxuICAgICAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgICAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgICAgIHZhciBuZXdEYXRhID0gW1xuICAgICAgICBmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LFxuICAgICAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgICAgIF07XG5cbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgICAgIH1cbiAgICAgIGZ1bmMgPSBuZXdEYXRhWzBdO1xuICAgICAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gICAgICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgICAgIHBhcnRpYWxzID0gbmV3RGF0YVszXTtcbiAgICAgIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICAgICAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gKGlzQmluZEtleSA/IDAgOiBmdW5jLmxlbmd0aClcbiAgICAgICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgICAgIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgICAgIGJpdG1hc2sgJj0gfihXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpO1xuICAgICAgfVxuICAgICAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGNyZWF0ZUJpbmQoZnVuYywgYml0bWFzaywgdGhpc0FyZyk7XG4gICAgICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgICAgIH0gZWxzZSBpZiAoKGJpdG1hc2sgPT0gV1JBUF9QQVJUSUFMX0ZMQUcgfHwgYml0bWFzayA9PSAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX1BBUlRJQUxfRkxBRykpICYmICFob2xkZXJzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZUh5YnJpZC5hcHBseSh1bmRlZmluZWQsIG5ld0RhdGEpO1xuICAgICAgfVxuICAgICAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gICAgICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHNldHRlcihyZXN1bHQsIG5ld0RhdGEpLCBmdW5jLCBiaXRtYXNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIGJ5IGBfLmRlZmF1bHRzYCB0byBjdXN0b21pemUgaXRzIGBfLmFzc2lnbkluYCB1c2UgdG8gYXNzaWduIHByb3BlcnRpZXNcbiAgICAgKiBvZiBzb3VyY2Ugb2JqZWN0cyB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0IGZvciBhbGwgZGVzdGluYXRpb24gcHJvcGVydGllc1xuICAgICAqIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSBvYmpWYWx1ZSBUaGUgZGVzdGluYXRpb24gdmFsdWUuXG4gICAgICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgc291cmNlIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgdmFsdWUgdG8gYXNzaWduLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGN1c3RvbURlZmF1bHRzQXNzaWduSW4ob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAoZXEob2JqVmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgcmV0dXJuIHNyY1ZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8uZGVmYXVsdHNEZWVwYCB0byBjdXN0b21pemUgaXRzIGBfLm1lcmdlYCB1c2UgdG8gbWVyZ2Ugc291cmNlXG4gICAgICogb2JqZWN0cyBpbnRvIGRlc3RpbmF0aW9uIG9iamVjdHMgdGhhdCBhcmUgcGFzc2VkIHRocnUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gb2JqVmFsdWUgVGhlIGRlc3RpbmF0aW9uIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHNvdXJjZSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIG1lcmdlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHBhcmVudCBvYmplY3Qgb2YgYG9ialZhbHVlYC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGBzcmNWYWx1ZWAuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAgICAgKiAgY291bnRlcnBhcnRzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VzdG9tRGVmYXVsdHNNZXJnZShvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKSB7XG4gICAgICBpZiAoaXNPYmplY3Qob2JqVmFsdWUpICYmIGlzT2JqZWN0KHNyY1ZhbHVlKSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgc3RhY2suc2V0KHNyY1ZhbHVlLCBvYmpWYWx1ZSk7XG4gICAgICAgIGJhc2VNZXJnZShvYmpWYWx1ZSwgc3JjVmFsdWUsIHVuZGVmaW5lZCwgY3VzdG9tRGVmYXVsdHNNZXJnZSwgc3RhY2spO1xuICAgICAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gICAgICogb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXN0b21PbWl0Q2xvbmUodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgICAgIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgICAgIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgICAgIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICAgICAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgICAgIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGlmIChzZWVuKSB7XG4gICAgICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gICAgICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAgICAgKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICAgICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgICAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICAgICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgICAgICBjYXNlIG1hcFRhZzpcbiAgICAgICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICAgICAgY2FzZSBzZXRUYWc6XG4gICAgICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAgICAgKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICAgICAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgICAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gICAgICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHRydWU7XG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgICAgIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAgICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICAgICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICAgICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAgICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICAgICAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAgICAgKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBtZXRhZGF0YSBmb3IgYGZ1bmNgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0RGF0YSA9ICFtZXRhTWFwID8gbm9vcCA6IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmFtZSBvZiBgZnVuY2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgICAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICAgICAgYXJyYXkgPSByZWFsTmFtZXNbcmVzdWx0XSxcbiAgICAgICAgICBsZW5ndGggPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlYWxOYW1lcywgcmVzdWx0KSA/IGFycmF5Lmxlbmd0aCA6IDA7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgZGF0YSA9IGFycmF5W2xlbmd0aF0sXG4gICAgICAgICAgICBvdGhlckZ1bmMgPSBkYXRhLmZ1bmM7XG4gICAgICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgICAgIHJldHVybiBkYXRhLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgICAgIHZhciBvYmplY3QgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaCwgJ3BsYWNlaG9sZGVyJykgPyBsb2Rhc2ggOiBmdW5jO1xuICAgICAgcmV0dXJuIG9iamVjdC5wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBcIml0ZXJhdGVlXCIgZnVuY3Rpb24uIElmIGBfLml0ZXJhdGVlYCBpcyBjdXN0b21pemVkLFxuICAgICAqIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3VzdG9tIG1ldGhvZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgYGJhc2VJdGVyYXRlZWAuXG4gICAgICogSWYgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIGNob3NlbiBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhlbSBhbmRcbiAgICAgKiBpdHMgcmVzdWx0IGlzIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIHRoZSBjcmVhdGVkIGl0ZXJhdGVlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgY2hvc2VuIGZ1bmN0aW9uIG9yIGl0cyByZXN1bHQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0SXRlcmF0ZWUoKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoLml0ZXJhdGVlIHx8IGl0ZXJhdGVlO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0ID09PSBpdGVyYXRlZSA/IGJhc2VJdGVyYXRlZSA6IHJlc3VsdDtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gcmVzdWx0KGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdKSA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgICAgIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICAgICAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgICAgIDogZGF0YS5tYXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgICAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gICAgICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICBpZiAodW5tYXNrZWQpIHtcbiAgICAgICAgaWYgKGlzT3duKSB7XG4gICAgICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgKi9cbiAgICB2YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gICAgICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAgICAgKi9cbiAgICB2YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHdoaWxlIChvYmplY3QpIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICAgICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlKG9iamVjdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gICAgICovXG4gICAgdmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbiAgICAvLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG4gICAgaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgICAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAgICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgICAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gICAgICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmlldywgYXBwbHlpbmcgYW55IGB0cmFuc2Zvcm1zYCB0byB0aGUgYHN0YXJ0YCBhbmQgYGVuZGAgcG9zaXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgdmlldy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB0cmFuc2Zvcm1zIFRoZSB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIHZpZXcuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHN0YXJ0YCBhbmQgYGVuZGBcbiAgICAgKiAgcG9zaXRpb25zIG9mIHRoZSB2aWV3LlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFZpZXcoc3RhcnQsIGVuZCwgdHJhbnNmb3Jtcykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdHJhbnNmb3Jtc1tpbmRleF0sXG4gICAgICAgICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZHJvcCc6ICAgICAgc3RhcnQgKz0gc2l6ZTsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZHJvcFJpZ2h0JzogZW5kIC09IHNpemU7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2UnOiAgICAgIGVuZCA9IG5hdGl2ZU1pbihlbmQsIHN0YXJ0ICsgc2l6ZSk7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3Rha2VSaWdodCc6IHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0LCBlbmQgLSBzaXplKTsgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7ICdzdGFydCc6IHN0YXJ0LCAnZW5kJzogZW5kIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgd3JhcHBlciBkZXRhaWxzIGZyb20gdGhlIGBzb3VyY2VgIGJvZHkgY29tbWVudC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0V3JhcERldGFpbHMoc291cmNlKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS5zcGxpdChyZVNwbGl0RGV0YWlscykgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgICAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gICAgICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgICAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIGFuIGFycmF5IGNsb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVBcnJheShhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAgICAgLy8gQWRkIHByb3BlcnRpZXMgYXNzaWduZWQgYnkgYFJlZ0V4cCNleGVjYC5cbiAgICAgIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICdzdHJpbmcnICYmIGhhc093blByb3BlcnR5LmNhbGwoYXJyYXksICdpbmRleCcpKSB7XG4gICAgICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgICAgICByZXN1bHQuaW5wdXQgPSBhcnJheS5pbnB1dDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICAgICAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgICAgID8gYmFzZUNyZWF0ZShnZXRQcm90b3R5cGUob2JqZWN0KSlcbiAgICAgICAgOiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNsb25pbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICAgICAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3QgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbml0Q2xvbmVCeVRhZyhvYmplY3QsIHRhZywgaXNEZWVwKSB7XG4gICAgICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgICAgICBjYXNlIGJvb2xUYWc6XG4gICAgICAgIGNhc2UgZGF0ZVRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVEYXRhVmlldyhvYmplY3QsIGlzRGVlcCk7XG5cbiAgICAgICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgICAgIGNhc2UgaW50OFRhZzogY2FzZSBpbnQxNlRhZzogY2FzZSBpbnQzMlRhZzpcbiAgICAgICAgY2FzZSB1aW50OFRhZzogY2FzZSB1aW50OENsYW1wZWRUYWc6IGNhc2UgdWludDE2VGFnOiBjYXNlIHVpbnQzMlRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgICAgICBjYXNlIG1hcFRhZzpcbiAgICAgICAgICByZXR1cm4gbmV3IEN0b3I7XG5cbiAgICAgICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcihvYmplY3QpO1xuXG4gICAgICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgICAgIHJldHVybiBjbG9uZVJlZ0V4cChvYmplY3QpO1xuXG4gICAgICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgICAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgICAgICByZXR1cm4gY2xvbmVTeW1ib2wob2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIHdyYXBwZXIgYGRldGFpbHNgIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBgc291cmNlYCBib2R5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2UgdG8gbW9kaWZ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc291cmNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICAgICAgdmFyIGxlbmd0aCA9IGRldGFpbHMubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICAgICAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICAgICAgZGV0YWlscyA9IGRldGFpbHMuam9pbihsZW5ndGggPiAyID8gJywgJyA6ICcgJyk7XG4gICAgICByZXR1cm4gc291cmNlLnJlcGxhY2UocmVXcmFwQ29tbWVudCwgJ3tcXG4vKiBbd3JhcHBlZCB3aXRoICcgKyBkZXRhaWxzICsgJ10gKi9cXG4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZmxhdHRlbmFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpIHx8XG4gICAgICAgICEhKHNwcmVhZGFibGVTeW1ib2wgJiYgdmFsdWUgJiYgdmFsdWVbc3ByZWFkYWJsZVN5bWJvbF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gICAgICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAgICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxuICAgICAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gICAgICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAoaXNBcnJheUxpa2Uob2JqZWN0KSAmJiBpc0luZGV4KGluZGV4LCBvYmplY3QubGVuZ3RoKSlcbiAgICAgICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgICAgICkge1xuICAgICAgICByZXR1cm4gZXEob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gICAgICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICAgICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgICAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGhhcyBhIGxhenkgY291bnRlcnBhcnQsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0xhemlhYmxlKGZ1bmMpIHtcbiAgICAgIHZhciBmdW5jTmFtZSA9IGdldEZ1bmNOYW1lKGZ1bmMpLFxuICAgICAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICAgICAgaWYgKHR5cGVvZiBvdGhlciAhPSAnZnVuY3Rpb24nIHx8ICEoZnVuY05hbWUgaW4gTGF6eVdyYXBwZXIucHJvdG90eXBlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZnVuYyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgZGF0YSA9IGdldERhdGEob3RoZXIpO1xuICAgICAgcmV0dXJuICEhZGF0YSAmJiBmdW5jID09PSBkYXRhWzBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgICAgIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBmdW5jYCBpcyBjYXBhYmxlIG9mIGJlaW5nIG1hc2tlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrYWJsZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIHZhciBpc01hc2thYmxlID0gY29yZUpzRGF0YSA/IGlzRnVuY3Rpb24gOiBzdHViRmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gICAgICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gICAgICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAgICAgKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAgICAgKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICAgICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAgICAgKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgICAgICBjYWNoZS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZXMgdGhlIGZ1bmN0aW9uIG1ldGFkYXRhIG9mIGBzb3VyY2VgIGludG8gYGRhdGFgLlxuICAgICAqXG4gICAgICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAgICAgKiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2UgbWV0aG9kcyBsaWtlIGBfLmJpbmRgLCBgXy5jdXJyeWAsIGFuZCBgXy5wYXJ0aWFsYFxuICAgICAqIG1heSBiZSBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgZXhlY3V0aW9uIG9yZGVyLiBNZXRob2RzIGxpa2UgYF8uYXJ5YCBhbmRcbiAgICAgKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICAgICAqIGV4ZWN1dGVkIGltcG9ydGFudCwgcHJldmVudGluZyB0aGUgbWVyZ2luZyBvZiBtZXRhZGF0YS4gSG93ZXZlciwgd2UgbWFrZVxuICAgICAqIGFuIGV4Y2VwdGlvbiBmb3IgYSBzYWZlIGNvbWJpbmVkIGNhc2Ugd2hlcmUgY3VycmllZCBmdW5jdGlvbnMgaGF2ZSBgXy5hcnlgXG4gICAgICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIHNvdXJjZSBtZXRhZGF0YS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGRhdGFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRGF0YShkYXRhLCBzb3VyY2UpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gZGF0YVsxXSxcbiAgICAgICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgICAgIG5ld0JpdG1hc2sgPSBiaXRtYXNrIHwgc3JjQml0bWFzayxcbiAgICAgICAgICBpc0NvbW1vbiA9IG5ld0JpdG1hc2sgPCAoV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcgfCBXUkFQX0FSWV9GTEFHKTtcblxuICAgICAgdmFyIGlzQ29tYm8gPVxuICAgICAgICAoKHNyY0JpdG1hc2sgPT0gV1JBUF9BUllfRkxBRykgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSkgfHxcbiAgICAgICAgKChzcmNCaXRtYXNrID09IFdSQVBfQVJZX0ZMQUcpICYmIChiaXRtYXNrID09IFdSQVBfUkVBUkdfRkxBRykgJiYgKGRhdGFbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkpIHx8XG4gICAgICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgICAgIC8vIEV4aXQgZWFybHkgaWYgbWV0YWRhdGEgY2FuJ3QgYmUgbWVyZ2VkLlxuICAgICAgaWYgKCEoaXNDb21tb24gfHwgaXNDb21ibykpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGB0aGlzQXJnYCBpZiBhdmFpbGFibGUuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgICAgIGRhdGFbMl0gPSBzb3VyY2VbMl07XG4gICAgICAgIC8vIFNldCB3aGVuIGN1cnJ5aW5nIGEgYm91bmQgZnVuY3Rpb24uXG4gICAgICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCBhcmd1bWVudHMuXG4gICAgICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxzID0gZGF0YVszXTtcbiAgICAgICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgICAgIGRhdGFbNF0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbM10sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs0XTtcbiAgICAgIH1cbiAgICAgIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gICAgICB2YWx1ZSA9IHNvdXJjZVs1XTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgICAgIGRhdGFbNV0gPSBwYXJ0aWFscyA/IGNvbXBvc2VBcmdzUmlnaHQocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNl0pIDogdmFsdWU7XG4gICAgICAgIGRhdGFbNl0gPSBwYXJ0aWFscyA/IHJlcGxhY2VIb2xkZXJzKGRhdGFbNV0sIFBMQUNFSE9MREVSKSA6IHNvdXJjZVs2XTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSBzb3VyY2UgYGFyZ1Bvc2AgaWYgYXZhaWxhYmxlLlxuICAgICAgdmFsdWUgPSBzb3VyY2VbN107XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZGF0YVs3XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gICAgICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQVJZX0ZMQUcpIHtcbiAgICAgICAgZGF0YVs4XSA9IGRhdGFbOF0gPT0gbnVsbCA/IHNvdXJjZVs4XSA6IG5hdGl2ZU1pbihkYXRhWzhdLCBzb3VyY2VbOF0pO1xuICAgICAgfVxuICAgICAgLy8gVXNlIHNvdXJjZSBgYXJpdHlgIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAgICBpZiAoZGF0YVs5XSA9PSBudWxsKSB7XG4gICAgICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gICAgICB9XG4gICAgICAvLyBVc2Ugc291cmNlIGBmdW5jYCBhbmQgbWVyZ2UgYml0bWFza3MuXG4gICAgICBkYXRhWzBdID0gc291cmNlWzBdO1xuICAgICAgZGF0YVsxXSA9IG5ld0JpdG1hc2s7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICAgICAqIFtgT2JqZWN0LmtleXNgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAob2JqZWN0ICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gICAgICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1heChhcmdzLmxlbmd0aCAtIHN0YXJ0LCAwKSxcbiAgICAgICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBwYXJlbnQgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheX0gcGF0aCBUaGUgcGF0aCB0byBnZXQgdGhlIHBhcmVudCB2YWx1ZSBvZi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcmVudChvYmplY3QsIHBhdGgpIHtcbiAgICAgIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVvcmRlciBgYXJyYXlgIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGluZGV4ZXMgd2hlcmUgdGhlIGVsZW1lbnQgYXRcbiAgICAgKiB0aGUgZmlyc3QgaW5kZXggaXMgYXNzaWduZWQgYXMgdGhlIGZpcnN0IGVsZW1lbnQsIHRoZSBlbGVtZW50IGF0XG4gICAgICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gICAgICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBUaGUgYXJyYW5nZWQgYXJyYXkgaW5kZXhlcy5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW9yZGVyKGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgICAgICBvbGRBcnJheSA9IGNvcHlBcnJheShhcnJheSk7XG5cbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgICAgIGFycmF5W2xlbmd0aF0gPSBpc0luZGV4KGluZGV4LCBhcnJMZW5ndGgpID8gb2xkQXJyYXlbaW5kZXhdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXCJfX3Byb3RvX19cIiBvciBcImNvbnN0cnVjdG9yXCIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICAgICAgaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJyAmJiB0eXBlb2Ygb2JqZWN0W2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiB0aGlzIGZ1bmN0aW9uIGJlY29tZXMgaG90LCBpLmUuIGlzIGludm9rZWQgYSBsb3QgaW4gYSBzaG9ydFxuICAgICAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAgICAgKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAgICAgKiBbVjggaXNzdWUgMjA3MF0oaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MjA3MClcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAgICAgKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gICAgICovXG4gICAgdmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbiAgICAvKipcbiAgICAgKiBBIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIFtgc2V0VGltZW91dGBdKGh0dHBzOi8vbWRuLmlvL3NldFRpbWVvdXQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ8T2JqZWN0fSBSZXR1cm5zIHRoZSB0aW1lciBpZCBvciB0aW1lb3V0IG9iamVjdC5cbiAgICAgKi9cbiAgICB2YXIgc2V0VGltZW91dCA9IGN0eFNldFRpbWVvdXQgfHwgZnVuY3Rpb24oZnVuYywgd2FpdCkge1xuICAgICAgcmV0dXJuIHJvb3Quc2V0VGltZW91dChmdW5jLCB3YWl0KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAgICAgKi9cbiAgICB2YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYHdyYXBwZXJgIHRvIG1pbWljIHRoZSBzb3VyY2Ugb2YgYHJlZmVyZW5jZWBcbiAgICAgKiB3aXRoIHdyYXBwZXIgZGV0YWlscyBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGJvZHkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZXIgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgd3JhcHBlcmAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0V3JhcFRvU3RyaW5nKHdyYXBwZXIsIHJlZmVyZW5jZSwgYml0bWFzaykge1xuICAgICAgdmFyIHNvdXJjZSA9IChyZWZlcmVuY2UgKyAnJyk7XG4gICAgICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICAgICAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICAgICAqIG1pbGxpc2Vjb25kcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgICAgIHZhciBjb3VudCA9IDAsXG4gICAgICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICAgICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zaHVmZmxlYCB3aGljaCBtdXRhdGVzIGFuZCBzZXRzIHRoZSBzaXplIG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzaHVmZmxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc2l6ZT1hcnJheS5sZW5ndGhdIFRoZSBzaXplIG9mIGBhcnJheWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2h1ZmZsZVNlbGYoYXJyYXksIHNpemUpIHtcbiAgICAgIHZhciBpbmRleCA9IC0xLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuXG4gICAgICBzaXplID0gc2l6ZSA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogc2l6ZTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgc2l6ZSkge1xuICAgICAgICB2YXIgcmFuZCA9IGJhc2VSYW5kb20oaW5kZXgsIGxhc3RJbmRleCksXG4gICAgICAgICAgICB2YWx1ZSA9IGFycmF5W3JhbmRdO1xuXG4gICAgICAgIGFycmF5W3JhbmRdID0gYXJyYXlbaW5kZXhdO1xuICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGFycmF5Lmxlbmd0aCA9IHNpemU7XG4gICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gICAgICovXG4gICAgdmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ2IC8qIC4gKi8pIHtcbiAgICAgICAgcmVzdWx0LnB1c2goJycpO1xuICAgICAgfVxuICAgICAgc3RyaW5nLnJlcGxhY2UocmVQcm9wTmFtZSwgZnVuY3Rpb24obWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuICAgICAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgICAgIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgICAgIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkZXRhaWxzYC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVXcmFwRGV0YWlscyhkZXRhaWxzLCBiaXRtYXNrKSB7XG4gICAgICBhcnJheUVhY2god3JhcEZsYWdzLCBmdW5jdGlvbihwYWlyKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgICAgICBpZiAoKGJpdG1hc2sgJiBwYWlyWzFdKSAmJiAhYXJyYXlJbmNsdWRlcyhkZXRhaWxzLCB2YWx1ZSkpIHtcbiAgICAgICAgICBkZXRhaWxzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXRhaWxzLnNvcnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgd3JhcHBlci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICAgICAgaWYgKHdyYXBwZXIgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikge1xuICAgICAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZXIuX19jaGFpbl9fKTtcbiAgICAgIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgICAgIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gICAgICByZXN1bHQuX192YWx1ZXNfXyA9IHdyYXBwZXIuX192YWx1ZXNfXztcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIGdyb3VwcyB0aGUgbGVuZ3RoIG9mIGBzaXplYC5cbiAgICAgKiBJZiBgYXJyYXlgIGNhbid0IGJlIHNwbGl0IGV2ZW5seSwgdGhlIGZpbmFsIGNodW5rIHdpbGwgYmUgdGhlIHJlbWFpbmluZ1xuICAgICAqIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzaXplPTFdIFRoZSBsZW5ndGggb2YgZWFjaCBjaHVua1xuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY2h1bmtzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNodW5rKFsnYScsICdiJywgJ2MnLCAnZCddLCAyKTtcbiAgICAgKiAvLyA9PiBbWydhJywgJ2InXSwgWydjJywgJ2QnXV1cbiAgICAgKlxuICAgICAqIF8uY2h1bmsoWydhJywgJ2InLCAnYycsICdkJ10sIDMpO1xuICAgICAqIC8vID0+IFtbJ2EnLCAnYicsICdjJ10sIFsnZCddXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNodW5rKGFycmF5LCBzaXplLCBndWFyZCkge1xuICAgICAgaWYgKChndWFyZCA/IGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBzaXplLCBndWFyZCkgOiBzaXplID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHNpemUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2l6ZSA9IG5hdGl2ZU1heCh0b0ludGVnZXIoc2l6ZSksIDApO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGggfHwgc2l6ZSA8IDEpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gMCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gQXJyYXkobmF0aXZlQ2VpbChsZW5ndGggLyBzaXplKSk7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBiYXNlU2xpY2UoYXJyYXksIGluZGV4LCAoaW5kZXggKz0gc2l6ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IHdpdGggYWxsIGZhbHNleSB2YWx1ZXMgcmVtb3ZlZC4gVGhlIHZhbHVlcyBgZmFsc2VgLCBgbnVsbGAsXG4gICAgICogYDBgLCBgXCJcImAsIGB1bmRlZmluZWRgLCBhbmQgYE5hTmAgYXJlIGZhbHNleS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5jb21wYWN0KFswLCAxLCBmYWxzZSwgMiwgJycsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICByZXNJbmRleCA9IDAsXG4gICAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhcnJheSBjb25jYXRlbmF0aW5nIGBhcnJheWAgd2l0aCBhbnkgYWRkaXRpb25hbCBhcnJheXNcbiAgICAgKiBhbmQvb3IgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbmNhdGVuYXRlLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjb25jYXRlbmF0ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBjb25jYXRlbmF0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxXTtcbiAgICAgKiB2YXIgb3RoZXIgPSBfLmNvbmNhdChhcnJheSwgMiwgWzNdLCBbWzRdXSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvdGhlcik7XG4gICAgICogLy8gPT4gWzEsIDIsIDMsIFs0XV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoIC0gMSksXG4gICAgICAgICAgYXJyYXkgPSBhcmd1bWVudHNbMF0sXG4gICAgICAgICAgaW5kZXggPSBsZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICAgIGFyZ3NbaW5kZXggLSAxXSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXlQdXNoKGlzQXJyYXkoYXJyYXkpID8gY29weUFycmF5KGFycmF5KSA6IFthcnJheV0sIGJhc2VGbGF0dGVuKGFyZ3MsIDEpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGBhcnJheWAgdmFsdWVzIG5vdCBpbmNsdWRlZCBpbiB0aGUgb3RoZXIgZ2l2ZW4gYXJyYXlzXG4gICAgICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLndpdGhvdXQsIF8ueG9yXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZShbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICovXG4gICAgdmFyIGRpZmZlcmVuY2UgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2VPYmplY3QoYXJyYXkpXG4gICAgICAgID8gYmFzZURpZmZlcmVuY2UoYXJyYXksIGJhc2VGbGF0dGVuKHZhbHVlcywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5kaWZmZXJlbmNlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBvcmRlciBhbmQgcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZVxuICAgICAqIGRldGVybWluZWQgYnkgdGhlIGZpcnN0IGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5wdWxsQWxsQnlgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBleGNsdWRlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZUJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjJdXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRpZmZlcmVuY2VCeShbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sIFt7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZUJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXksIHZhbHVlcykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdCh2YWx1ZXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgYmFzZUZsYXR0ZW4odmFsdWVzLCAxLCBpc0FycmF5TGlrZU9iamVjdCwgdHJ1ZSksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSlcbiAgICAgICAgOiBbXTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZGlmZmVyZW5jZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICAgICAqIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuIFRoZSBjb21wYXJhdG9yXG4gICAgICogaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6IChhcnJWYWwsIG90aFZhbCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxBbGxXaXRoYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gZXhjbHVkZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9XTtcbiAgICAgKlxuICAgICAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gICAgICB2YXIgY29tcGFyYXRvciA9IGxhc3QodmFsdWVzKTtcbiAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChjb21wYXJhdG9yKSkge1xuICAgICAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KGFycmF5KVxuICAgICAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kcm9wKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKlxuICAgICAqIF8uZHJvcChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLmRyb3AoWzEsIDIsIDNdLCAwKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wKGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIG4gPCAwID8gMCA6IG4sIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgZHJvcHBlZCBmcm9tIHRoZSBlbmQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZHJvcC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kcm9wUmlnaHQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8uZHJvcFJpZ2h0KFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzFdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDUpO1xuICAgICAqIC8vID0+IFtdXG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BSaWdodChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIG4gPSAoZ3VhcmQgfHwgbiA9PT0gdW5kZWZpbmVkKSA/IDEgOiB0b0ludGVnZXIobik7XG4gICAgICBuID0gbGVuZ3RoIC0gbjtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIGV4Y2x1ZGluZyBlbGVtZW50cyBkcm9wcGVkIGZyb20gdGhlIGVuZC5cbiAgICAgKiBFbGVtZW50cyBhcmUgZHJvcHBlZCB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wUmlnaHRXaGlsZSh1c2VycywgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmRyb3BSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknLCAnZnJlZCcsICdwZWJibGVzJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkcm9wUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUsIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgZXhjbHVkaW5nIGVsZW1lbnRzIGRyb3BwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqIEVsZW1lbnRzIGFyZSBkcm9wcGVkIHVudGlsIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5LiBUaGUgcHJlZGljYXRlIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleCwgYXJyYXkpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZHJvcFdoaWxlKHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5kcm9wV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRyb3BXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIHRydWUpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgZWxlbWVudHMgb2YgYGFycmF5YCB3aXRoIGB2YWx1ZWAgZnJvbSBgc3RhcnRgIHVwIHRvLCBidXQgbm90XG4gICAgICogaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmlsbC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBmaWxsIGBhcnJheWAgd2l0aC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8uZmlsbChhcnJheSwgJ2EnKTtcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2EnLCAnYSddXG4gICAgICpcbiAgICAgKiBfLmZpbGwoQXJyYXkoMyksIDIpO1xuICAgICAqIC8vID0+IFsyLCAyLCAyXVxuICAgICAqXG4gICAgICogXy5maWxsKFs0LCA2LCA4LCAxMF0sICcqJywgMSwgMyk7XG4gICAgICogLy8gPT4gWzQsICcqJywgJyonLCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWxsKGFycmF5LCB2YWx1ZSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ICYmIHR5cGVvZiBzdGFydCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChhcnJheSwgdmFsdWUsIHN0YXJ0KSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlRmlsbChhcnJheSwgdmFsdWUsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gICAgICogZWxlbWVudCBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgaW5zdGVhZCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBlbGVtZW50LCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8uZmluZEluZGV4KHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXIgPT0gJ2Jhcm5leSc7IH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIHsgJ3VzZXInOiAnZnJlZCcsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRJbmRleCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRJbmRleGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50c1xuICAgICAqIG9mIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9YXJyYXkubGVuZ3RoLTFdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgZWxlbWVudCwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAncGViYmxlcyc7IH0pO1xuICAgICAqIC8vID0+IDJcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRMYXN0SW5kZXgodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiAwXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZExhc3RJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgICBpZiAoZnJvbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgICAgICAgaW5kZXggPSBmcm9tSW5kZXggPCAwXG4gICAgICAgICAgPyBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApXG4gICAgICAgICAgOiBuYXRpdmVNaW4oaW5kZXgsIGxlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VGaW5kSW5kZXgoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICAgICAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZmxhdHRlbnMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVlcChbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCA0LCA1XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXR0ZW5EZWVwKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIElORklOSVRZKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYGFycmF5YCB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMSwgWzIsIFszLCBbNF1dLCA1XV07XG4gICAgICpcbiAgICAgKiBfLmZsYXR0ZW5EZXB0aChhcnJheSwgMSk7XG4gICAgICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICAgICAqXG4gICAgICogXy5mbGF0dGVuRGVwdGgoYXJyYXksIDIpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzLCBbNF0sIDVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdHRlbkRlcHRoKGFycmF5LCBkZXB0aCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgZGVwdGggPSBkZXB0aCA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aCk7XG4gICAgICByZXR1cm4gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBgXy50b1BhaXJzYDsgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBvYmplY3QgY29tcG9zZWRcbiAgICAgKiBmcm9tIGtleS12YWx1ZSBgcGFpcnNgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIGtleS12YWx1ZSBwYWlycy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmZyb21QYWlycyhbWydhJywgMV0sIFsnYicsIDJdXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZnJvbVBhaXJzKHBhaXJzKSB7XG4gICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICBsZW5ndGggPSBwYWlycyA9PSBudWxsID8gMCA6IHBhaXJzLmxlbmd0aCxcbiAgICAgICAgICByZXN1bHQgPSB7fTtcblxuICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgICAgIHJlc3VsdFtwYWlyWzBdXSA9IHBhaXJbMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyBmaXJzdFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmhlYWQoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICpcbiAgICAgKiBfLmhlYWQoW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICAgICAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gICAgICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLiBJZiBgZnJvbUluZGV4YCBpcyBuZWdhdGl2ZSwgaXQncyB1c2VkIGFzIHRoZVxuICAgICAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKlxuICAgICAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAgICAgKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbml0aWFsKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGJhc2VTbGljZShhcnJheSwgMCwgLTEpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIGFsbCBnaXZlbiBhcnJheXNcbiAgICAgKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgZmlyc3QgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb24oWzIsIDFdLCBbMiwgM10pO1xuICAgICAqIC8vID0+IFsyXVxuICAgICAqL1xuICAgIHZhciBpbnRlcnNlY3Rpb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuICAgICAgcmV0dXJuIChtYXBwZWQubGVuZ3RoICYmIG1hcHBlZFswXSA9PT0gYXJyYXlzWzBdKVxuICAgICAgICA/IGJhc2VJbnRlcnNlY3Rpb24obWFwcGVkKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb25cbiAgICAgKiBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXMgb2YgcmVzdWx0IHZhbHVlcyBhcmVcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgaW50ZXJzZWN0aW5nIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pbnRlcnNlY3Rpb25CeShbMi4xLCAxLjJdLCBbMi4zLCAzLjRdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiBbMi4xXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5pbnRlcnNlY3Rpb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfV1cbiAgICAgKi9cbiAgICB2YXIgaW50ZXJzZWN0aW9uQnkgPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBpdGVyYXRlZSA9IGxhc3QoYXJyYXlzKSxcbiAgICAgICAgICBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuXG4gICAgICBpZiAoaXRlcmF0ZWUgPT09IGxhc3QobWFwcGVkKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcHBlZC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbnRlcnNlY3Rpb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBUaGUgb3JkZXIgYW5kIHJlZmVyZW5jZXNcbiAgICAgKiBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBpbnRlcnNlY3RpbmcgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV07XG4gICAgICogdmFyIG90aGVycyA9IFt7ICd4JzogMSwgJ3knOiAxIH0sIHsgJ3gnOiAxLCAneSc6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLmludGVyc2VjdGlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH1dXG4gICAgICovXG4gICAgdmFyIGludGVyc2VjdGlvbldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpLFxuICAgICAgICAgIG1hcHBlZCA9IGFycmF5TWFwKGFycmF5cywgY2FzdEFycmF5TGlrZU9iamVjdCk7XG5cbiAgICAgIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChjb21wYXJhdG9yKSB7XG4gICAgICAgIG1hcHBlZC5wb3AoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAobWFwcGVkLmxlbmd0aCAmJiBtYXBwZWRbMF0gPT09IGFycmF5c1swXSlcbiAgICAgICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZCwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYWxsIGVsZW1lbnRzIGluIGBhcnJheWAgaW50byBhIHN0cmluZyBzZXBhcmF0ZWQgYnkgYHNlcGFyYXRvcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29udmVydC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlcGFyYXRvcj0nLCddIFRoZSBlbGVtZW50IHNlcGFyYXRvci5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBqb2luZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmpvaW4oWydhJywgJ2InLCAnYyddLCAnficpO1xuICAgICAqIC8vID0+ICdhfmJ+YydcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiBhcnJheSA9PSBudWxsID8gJycgOiBuYXRpdmVKb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGFzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxlbmd0aCA/IGFycmF5W2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW5kZXhPZmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBhcnJheWAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1hcnJheS5sZW5ndGgtMV0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubGFzdEluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gICAgICogXy5sYXN0SW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgaWYgKGZyb21JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKSA6IG5hdGl2ZU1pbihpbmRleCwgbGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgICAgID8gc3RyaWN0TGFzdEluZGV4T2YoYXJyYXksIHZhbHVlLCBpbmRleClcbiAgICAgICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGluZGV4LCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbGVtZW50IGF0IGluZGV4IGBuYCBvZiBgYXJyYXlgLiBJZiBgbmAgaXMgbmVnYXRpdmUsIHRoZSBudGhcbiAgICAgKiBlbGVtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjExLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG50aCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnZCddO1xuICAgICAqXG4gICAgICogXy5udGgoYXJyYXksIDEpO1xuICAgICAqIC8vID0+ICdiJ1xuICAgICAqXG4gICAgICogXy5udGgoYXJyYXksIC0yKTtcbiAgICAgKiAvLyA9PiAnYyc7XG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoKGFycmF5LCBuKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlTnRoKGFycmF5LCB0b0ludGVnZXIobikpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYWxsIGdpdmVuIHZhbHVlcyBmcm9tIGBhcnJheWAgdXNpbmdcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8ud2l0aG91dGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnJlbW92ZWBcbiAgICAgKiB0byByZW1vdmUgZWxlbWVudHMgZnJvbSBhbiBhcnJheSBieSBwcmVkaWNhdGUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgKlxuICAgICAqIF8ucHVsbChhcnJheSwgJ2EnLCAnYycpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnYiddXG4gICAgICovXG4gICAgdmFyIHB1bGwgPSBiYXNlUmVzdChwdWxsQWxsKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBhcnJheSBvZiB2YWx1ZXMgdG8gcmVtb3ZlLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlYCwgdGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsnYScsICdiJywgJ2MnLCAnYScsICdiJywgJ2MnXTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbChhcnJheSwgWydhJywgJ2MnXSk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFsnYicsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoICYmIHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKVxuICAgICAgICA/IGJhc2VQdWxsQWxsKGFycmF5LCB2YWx1ZXMpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5wdWxsQWxsYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCBhbmQgYHZhbHVlc2AgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvblxuICAgICAqIGJ5IHdoaWNoIHRoZXkncmUgY29tcGFyZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5kaWZmZXJlbmNlQnlgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMyB9LCB7ICd4JzogMSB9XTtcbiAgICAgKlxuICAgICAqIF8ucHVsbEFsbEJ5KGFycmF5LCBbeyAneCc6IDEgfSwgeyAneCc6IDMgfV0sICd4Jyk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMiB9XVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHB1bGxBbGxCeShhcnJheSwgdmFsdWVzLCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGggJiYgdmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpXG4gICAgICAgID8gYmFzZVB1bGxBbGwoYXJyYXksIHZhbHVlcywgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKVxuICAgICAgICA6IGFycmF5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucHVsbEFsbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIGNvbXBhcmF0b3IgaXNcbiAgICAgKiBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKGFyclZhbCwgb3RoVmFsKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBVbmxpa2UgYF8uZGlmZmVyZW5jZVdpdGhgLCB0aGlzIG1ldGhvZCBtdXRhdGVzIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDMsICd5JzogNCB9LCB7ICd4JzogNSwgJ3knOiA2IH1dO1xuICAgICAqXG4gICAgICogXy5wdWxsQWxsV2l0aChhcnJheSwgW3sgJ3gnOiAzLCAneSc6IDQgfV0sIF8uaXNFcXVhbCk7XG4gICAgICogY29uc29sZS5sb2coYXJyYXkpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiA1LCAneSc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwdWxsQWxsV2l0aChhcnJheSwgdmFsdWVzLCBjb21wYXJhdG9yKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCAmJiB2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aClcbiAgICAgICAgPyBiYXNlUHVsbEFsbChhcnJheSwgdmFsdWVzLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpXG4gICAgICAgIDogYXJyYXk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBlbGVtZW50cyBmcm9tIGBhcnJheWAgY29ycmVzcG9uZGluZyB0byBgaW5kZXhlc2AgYW5kIHJldHVybnMgYW5cbiAgICAgKiBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5hdGAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHsuLi4obnVtYmVyfG51bWJlcltdKX0gW2luZGV4ZXNdIFRoZSBpbmRleGVzIG9mIGVsZW1lbnRzIHRvIHJlbW92ZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiByZW1vdmVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbJ2EnLCAnYicsICdjJywgJ2QnXTtcbiAgICAgKiB2YXIgcHVsbGVkID0gXy5wdWxsQXQoYXJyYXksIFsxLCAzXSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWydhJywgJ2MnXVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cocHVsbGVkKTtcbiAgICAgKiAvLyA9PiBbJ2InLCAnZCddXG4gICAgICovXG4gICAgdmFyIHB1bGxBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKGFycmF5LCBpbmRleGVzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICAgICAgcmVzdWx0ID0gYmFzZUF0KGFycmF5LCBpbmRleGVzKTtcblxuICAgICAgYmFzZVB1bGxBdChhcnJheSwgYXJyYXlNYXAoaW5kZXhlcywgZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGlzSW5kZXgoaW5kZXgsIGxlbmd0aCkgPyAraW5kZXggOiBpbmRleDtcbiAgICAgIH0pLnNvcnQoY29tcGFyZUFzY2VuZGluZykpO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSBgYXJyYXlgIHRoYXQgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yXG4gICAgICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHJlbW92ZWQgZWxlbWVudHMuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLmZpbHRlcmAsIHRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YC4gVXNlIGBfLnB1bGxgXG4gICAgICogdG8gcHVsbCBlbGVtZW50cyBmcm9tIGFuIGFycmF5IGJ5IHZhbHVlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVtb3ZlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDMsIDRdO1xuICAgICAqIHZhciBldmVucyA9IF8ucmVtb3ZlKGFycmF5LCBmdW5jdGlvbihuKSB7XG4gICAgICogICByZXR1cm4gbiAlIDIgPT0gMDtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgM11cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGV2ZW5zKTtcbiAgICAgKiAvLyA9PiBbMiwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZW1vdmUoYXJyYXksIHByZWRpY2F0ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaW5kZXhlcyA9IFtdLFxuICAgICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgcHJlZGljYXRlID0gZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKTtcbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICAgICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICBpbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBiYXNlUHVsbEF0KGFycmF5LCBpbmRleGVzKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJzZXMgYGFycmF5YCBzbyB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGJlY29tZXMgdGhlIGxhc3QsIHRoZSBzZWNvbmRcbiAgICAgKiBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgYXJyYXlgIGFuZCBpcyBiYXNlZCBvblxuICAgICAqIFtgQXJyYXkjcmV2ZXJzZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3JldmVyc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqXG4gICAgICogXy5yZXZlcnNlKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMywgMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCA/IGFycmF5IDogbmF0aXZlUmV2ZXJzZS5jYWxsKGFycmF5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCBmcm9tIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2ZcbiAgICAgKiBbYEFycmF5I3NsaWNlYF0oaHR0cHM6Ly9tZG4uaW8vQXJyYXkvc2xpY2UpIHRvIGVuc3VyZSBkZW5zZSBhcnJheXMgYXJlXG4gICAgICogcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gc2xpY2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCAmJiB0eXBlb2YgZW5kICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKGFycmF5LCBzdGFydCwgZW5kKSkge1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKHN0YXJ0KTtcbiAgICAgICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0ludGVnZXIoZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVzZXMgYSBiaW5hcnkgc2VhcmNoIHRvIGRldGVybWluZSB0aGUgbG93ZXN0IGluZGV4IGF0IHdoaWNoIGB2YWx1ZWBcbiAgICAgKiBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBgYXJyYXlgIGluIG9yZGVyIHRvIG1haW50YWluIGl0cyBzb3J0IG9yZGVyLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIHNvcnRlZCBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGV2YWx1YXRlLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zb3J0ZWRJbmRleChbMzAsIDUwXSwgNDApO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleChhcnJheSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZEluZGV4YCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIGZvciBgdmFsdWVgIGFuZCBlYWNoIGVsZW1lbnQgb2YgYGFycmF5YCB0byBjb21wdXRlIHRoZWlyXG4gICAgICogc29ydCByYW5raW5nLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggYXQgd2hpY2ggYHZhbHVlYCBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgKiAgaW50byBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogNCB9LCB7ICd4JzogNSB9XTtcbiAgICAgKlxuICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCBmdW5jdGlvbihvKSB7IHJldHVybiBvLng7IH0pO1xuICAgICAqIC8vID0+IDBcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uc29ydGVkSW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRJbmRleEJ5KGFycmF5LCB2YWx1ZSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXhCeShhcnJheSwgdmFsdWUsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pbmRleE9mYCBleGNlcHQgdGhhdCBpdCBwZXJmb3JtcyBhIGJpbmFyeVxuICAgICAqIHNlYXJjaCBvbiBhIHNvcnRlZCBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiAxXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkSW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgICAgIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYmFzZVNvcnRlZEluZGV4KGFycmF5LCB2YWx1ZSk7XG4gICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAmJiBlcShhcnJheVtpbmRleF0sIHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydGVkSW5kZXhgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGhpZ2hlc3RcbiAgICAgKiBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZCBpbnRvIGBhcnJheWAgaW4gb3JkZXIgdG9cbiAgICAgKiBtYWludGFpbiBpdHMgc29ydCBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBzb3J0ZWQgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBhdCB3aGljaCBgdmFsdWVgIHNob3VsZCBiZSBpbnNlcnRlZFxuICAgICAqICBpbnRvIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4KFs0LCA1LCA1LCA1LCA2XSwgNSk7XG4gICAgICogLy8gPT4gNFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZExhc3RJbmRleChhcnJheSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlU29ydGVkSW5kZXgoYXJyYXksIHZhbHVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnNvcnRlZExhc3RJbmRleGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgXG4gICAgICogd2hpY2ggaXMgaW52b2tlZCBmb3IgYHZhbHVlYCBhbmQgZWFjaCBlbGVtZW50IG9mIGBhcnJheWAgdG8gY29tcHV0ZSB0aGVpclxuICAgICAqIHNvcnQgcmFua2luZy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgc29ydGVkIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gZXZhbHVhdGUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IGF0IHdoaWNoIGB2YWx1ZWAgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICogIGludG8gYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDQgfSwgeyAneCc6IDUgfV07XG4gICAgICpcbiAgICAgKiBfLnNvcnRlZExhc3RJbmRleEJ5KG9iamVjdHMsIHsgJ3gnOiA0IH0sIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ueDsgfSk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb3J0ZWRMYXN0SW5kZXhCeShvYmplY3RzLCB7ICd4JzogNCB9LCAneCcpO1xuICAgICAqIC8vID0+IDFcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRMYXN0SW5kZXhCeShhcnJheSwgdmFsdWUsIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZVNvcnRlZEluZGV4QnkoYXJyYXksIHZhbHVlLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMiksIHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ubGFzdEluZGV4T2ZgIGV4Y2VwdCB0aGF0IGl0IHBlcmZvcm1zIGEgYmluYXJ5XG4gICAgICogc2VhcmNoIG9uIGEgc29ydGVkIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uc29ydGVkTGFzdEluZGV4T2YoWzQsIDUsIDUsIDUsIDZdLCA1KTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICovXG4gICAgZnVuY3Rpb24gc29ydGVkTGFzdEluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGJhc2VTb3J0ZWRJbmRleChhcnJheSwgdmFsdWUsIHRydWUpIC0gMTtcbiAgICAgICAgaWYgKGVxKGFycmF5W2luZGV4XSwgdmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bmlxYCBleGNlcHQgdGhhdCBpdCdzIGRlc2lnbmVkIGFuZCBvcHRpbWl6ZWRcbiAgICAgKiBmb3Igc29ydGVkIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZFVuaXEoWzEsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzb3J0ZWRVbmlxKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU29ydGVkVW5pcShhcnJheSlcbiAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFCeWAgZXhjZXB0IHRoYXQgaXQncyBkZXNpZ25lZCBhbmQgb3B0aW1pemVkXG4gICAgICogZm9yIHNvcnRlZCBhcnJheXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvcnRlZFVuaXFCeShbMS4xLCAxLjIsIDIuMywgMi40XSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4gWzEuMSwgMi4zXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvcnRlZFVuaXFCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VTb3J0ZWRVbmlxKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRhaWwoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWlsKGFycmF5KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gICAgICByZXR1cm4gbGVuZ3RoID8gYmFzZVNsaWNlKGFycmF5LCAxLCBsZW5ndGgpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHNsaWNlIG9mIGBhcnJheWAgd2l0aCBgbmAgZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHRha2UuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFsxXVxuICAgICAqXG4gICAgICogXy50YWtlKFsxLCAyLCAzXSwgMik7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiBfLnRha2UoWzEsIDIsIDNdLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZShbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZShhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICghKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIHJldHVybiBiYXNlU2xpY2UoYXJyYXksIDAsIG4gPCAwID8gMCA6IG4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggYG5gIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249MV0gVGhlIG51bWJlciBvZiBlbGVtZW50cyB0byB0YWtlLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IFszXVxuICAgICAqXG4gICAgICogXy50YWtlUmlnaHQoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMiwgM11cbiAgICAgKlxuICAgICAqIF8udGFrZVJpZ2h0KFsxLCAyLCAzXSwgNSk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBfLnRha2VSaWdodChbMSwgMiwgM10sIDApO1xuICAgICAqIC8vID0+IFtdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGFrZVJpZ2h0KGFycmF5LCBuLCBndWFyZCkge1xuICAgICAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgbiA9IChndWFyZCB8fCBuID09PSB1bmRlZmluZWQpID8gMSA6IHRvSW50ZWdlcihuKTtcbiAgICAgIG4gPSBsZW5ndGggLSBuO1xuICAgICAgcmV0dXJuIGJhc2VTbGljZShhcnJheSwgbiA8IDAgPyAwIDogbiwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2xpY2Ugb2YgYGFycmF5YCB3aXRoIGVsZW1lbnRzIHRha2VuIGZyb20gdGhlIGVuZC4gRWxlbWVudHMgYXJlXG4gICAgICogdGFrZW4gdW50aWwgYHByZWRpY2F0ZWAgcmV0dXJucyBmYWxzZXkuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4LCBhcnJheSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc2xpY2Ugb2YgYGFycmF5YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy50YWtlUmlnaHRXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ3BlYmJsZXMnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udGFrZVJpZ2h0V2hpbGUodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VSaWdodFdoaWxlKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0YWtlUmlnaHRXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGZhbHNlLCB0cnVlKVxuICAgICAgICA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzbGljZSBvZiBgYXJyYXlgIHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbSB0aGUgYmVnaW5uaW5nLiBFbGVtZW50c1xuICAgICAqIGFyZSB0YWtlbiB1bnRpbCBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGhcbiAgICAgKiB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXgsIGFycmF5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leScsICdmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnRha2VXaGlsZSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5JywgJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy50YWtlV2hpbGUodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRha2VXaGlsZShhcnJheSwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlV2hpbGUoYXJyYXksIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpXG4gICAgICAgIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLCBpbiBvcmRlciwgZnJvbSBhbGwgZ2l2ZW4gYXJyYXlzIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaW9uKFsyXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb24gPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaW9uYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgb2YgZWFjaCBgYXJyYXlzYCB0byBnZW5lcmF0ZSB0aGUgY3JpdGVyaW9uIGJ5XG4gICAgICogd2hpY2ggdW5pcXVlbmVzcyBpcyBjb21wdXRlZC4gUmVzdWx0IHZhbHVlcyBhcmUgY2hvc2VuIGZyb20gdGhlIGZpcnN0XG4gICAgICogYXJyYXkgaW4gd2hpY2ggdGhlIHZhbHVlIG9jY3Vycy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6XG4gICAgICogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tYmluZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaW9uQnkoWzIuMV0sIFsxLjIsIDIuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udW5pb25CeShbeyAneCc6IDEgfV0sIFt7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICB2YXIgdW5pb25CeSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gbGFzdChhcnJheXMpO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KGl0ZXJhdGVlKSkge1xuICAgICAgICBpdGVyYXRlZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlVW5pcShiYXNlRmxhdHRlbihhcnJheXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pb25gIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIGVsZW1lbnRzIG9mIGBhcnJheXNgLiBSZXN1bHQgdmFsdWVzIGFyZSBjaG9zZW4gZnJvbVxuICAgICAqIHRoZSBmaXJzdCBhcnJheSBpbiB3aGljaCB0aGUgdmFsdWUgb2NjdXJzLiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbWJpbmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy51bmlvbldpdGgob2JqZWN0cywgb3RoZXJzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMSB9XVxuICAgICAqL1xuICAgIHZhciB1bmlvbldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VVbmlxKGJhc2VGbGF0dGVuKGFycmF5cywgMSwgaXNBcnJheUxpa2VPYmplY3QsIHRydWUpLCB1bmRlZmluZWQsIGNvbXBhcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgYW4gYXJyYXksIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGluIHdoaWNoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZWFjaCBlbGVtZW50XG4gICAgICogaXMga2VwdC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1clxuICAgICAqIGluIHRoZSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXEoWzIsIDEsIDJdKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycmF5KSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnVuaXFgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBpbiBgYXJyYXlgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnkgd2hpY2hcbiAgICAgKiB1bmlxdWVuZXNzIGlzIGNvbXB1dGVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZVxuICAgICAqIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDpcbiAgICAgKiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVuaXFCeShbMi4xLCAxLjIsIDIuM10sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsyLjEsIDEuMl1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8udW5pcUJ5KFt7ICd4JzogMSB9LCB7ICd4JzogMiB9LCB7ICd4JzogMSB9XSwgJ3gnKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDEgfSwgeyAneCc6IDIgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aCkgPyBiYXNlVW5pcShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YC4gVGhlIG9yZGVyIG9mIHJlc3VsdCB2YWx1ZXMgaXNcbiAgICAgKiBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlciB0aGV5IG9jY3VyIGluIHRoZSBhcnJheS5UaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ3gnOiAxLCAneSc6IDIgfSwgeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy51bmlxV2l0aChvYmplY3RzLCBfLmlzRXF1YWwpO1xuICAgICAqIC8vID0+IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxV2l0aChhcnJheSwgY29tcGFyYXRvcikge1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIHVuZGVmaW5lZCwgY29tcGFyYXRvcikgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhbiBhcnJheSBvZiBncm91cGVkXG4gICAgICogZWxlbWVudHMgYW5kIGNyZWF0ZXMgYW4gYXJyYXkgcmVncm91cGluZyB0aGUgZWxlbWVudHMgdG8gdGhlaXIgcHJlLXppcFxuICAgICAqIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cyB0byBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHJlZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHppcHBlZCA9IF8uemlwKFsnYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gW1snYScsIDEsIHRydWVdLCBbJ2InLCAyLCBmYWxzZV1dXG4gICAgICpcbiAgICAgKiBfLnVuemlwKHppcHBlZCk7XG4gICAgICogLy8gPT4gW1snYScsICdiJ10sIFsxLCAyXSwgW3RydWUsIGZhbHNlXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bnppcChhcnJheSkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gMDtcbiAgICAgIGFycmF5ID0gYXJyYXlGaWx0ZXIoYXJyYXksIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIGlmIChpc0FycmF5TGlrZU9iamVjdChncm91cCkpIHtcbiAgICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoZ3JvdXAubGVuZ3RoLCBsZW5ndGgpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBiYXNlVGltZXMobGVuZ3RoLCBmdW5jdGlvbihpbmRleCkge1xuICAgICAgICByZXR1cm4gYXJyYXlNYXAoYXJyYXksIGJhc2VQcm9wZXJ0eShpbmRleCkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy51bnppcGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHRvIHNwZWNpZnlcbiAgICAgKiBob3cgcmVncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzIHRvIHByb2Nlc3MuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiB0byBjb21iaW5lXG4gICAgICogIHJlZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcmVncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgemlwcGVkID0gXy56aXAoWzEsIDJdLCBbMTAsIDIwXSwgWzEwMCwgMjAwXSk7XG4gICAgICogLy8gPT4gW1sxLCAxMCwgMTAwXSwgWzIsIDIwLCAyMDBdXVxuICAgICAqXG4gICAgICogXy51bnppcFdpdGgoemlwcGVkLCBfLmFkZCk7XG4gICAgICogLy8gPT4gWzMsIDMwLCAzMDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW56aXBXaXRoKGFycmF5LCBpdGVyYXRlZSkge1xuICAgICAgaWYgKCEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gdW56aXAoYXJyYXkpO1xuICAgICAgaWYgKGl0ZXJhdGVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheU1hcChyZXN1bHQsIGZ1bmN0aW9uKGdyb3VwKSB7XG4gICAgICAgIHJldHVybiBhcHBseShpdGVyYXRlZSwgdW5kZWZpbmVkLCBncm91cCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IGV4Y2x1ZGluZyBhbGwgZ2l2ZW4gdmFsdWVzIHVzaW5nXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVW5saWtlIGBfLnB1bGxgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBzZWUgXy5kaWZmZXJlbmNlLCBfLnhvclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndpdGhvdXQoWzIsIDEsIDIsIDNdLCAxLCAyKTtcbiAgICAgKiAvLyA9PiBbM11cbiAgICAgKi9cbiAgICB2YXIgd2l0aG91dCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5LCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICAgICAgPyBiYXNlRGlmZmVyZW5jZShhcnJheSwgdmFsdWVzKVxuICAgICAgICA6IFtdO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzIHRoYXQgaXMgdGhlXG4gICAgICogW3N5bW1ldHJpYyBkaWZmZXJlbmNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1tZXRyaWNfZGlmZmVyZW5jZSlcbiAgICAgKiBvZiB0aGUgZ2l2ZW4gYXJyYXlzLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcmRlclxuICAgICAqIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICogQHNlZSBfLmRpZmZlcmVuY2UsIF8ud2l0aG91dFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvcihbMiwgMV0sIFsyLCAzXSk7XG4gICAgICogLy8gPT4gWzEsIDNdXG4gICAgICovXG4gICAgdmFyIHhvciA9IGJhc2VSZXN0KGZ1bmN0aW9uKGFycmF5cykge1xuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy54b3JgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGl0ZXJhdGVlYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgZm9yIGVhY2ggZWxlbWVudCBvZiBlYWNoIGBhcnJheXNgIHRvIGdlbmVyYXRlIHRoZSBjcml0ZXJpb24gYnlcbiAgICAgKiB3aGljaCBieSB3aGljaCB0aGV5J3JlIGNvbXBhcmVkLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpcyBkZXRlcm1pbmVkXG4gICAgICogYnkgdGhlIG9yZGVyIHRoZXkgb2NjdXIgaW4gdGhlIGFycmF5cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmVcbiAgICAgKiBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZmlsdGVyZWQgdmFsdWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnhvckJ5KFsyLjEsIDEuMl0sIFsyLjMsIDMuNF0sIE1hdGguZmxvb3IpO1xuICAgICAqIC8vID0+IFsxLjIsIDMuNF1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ueG9yQnkoW3sgJ3gnOiAxIH1dLCBbeyAneCc6IDIgfSwgeyAneCc6IDEgfV0sICd4Jyk7XG4gICAgICogLy8gPT4gW3sgJ3gnOiAyIH1dXG4gICAgICovXG4gICAgdmFyIHhvckJ5ID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgaXRlcmF0ZWUgPSBsYXN0KGFycmF5cyk7XG4gICAgICBpZiAoaXNBcnJheUxpa2VPYmplY3QoaXRlcmF0ZWUpKSB7XG4gICAgICAgIGl0ZXJhdGVlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnhvcmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5c2AuIFRoZSBvcmRlciBvZiByZXN1bHQgdmFsdWVzIGlzXG4gICAgICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXlzLiBUaGUgY29tcGFyYXRvciBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IEFycmF5XG4gICAgICogQHBhcmFtIHsuLi5BcnJheX0gW2FycmF5c10gVGhlIGFycmF5cyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICAgICAqIHZhciBvdGhlcnMgPSBbeyAneCc6IDEsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAyIH1dO1xuICAgICAqXG4gICAgICogXy54b3JXaXRoKG9iamVjdHMsIG90aGVycywgXy5pc0VxdWFsKTtcbiAgICAgKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9LCB7ICd4JzogMSwgJ3knOiAxIH1dXG4gICAgICovXG4gICAgdmFyIHhvcldpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheXMpIHtcbiAgICAgIHZhciBjb21wYXJhdG9yID0gbGFzdChhcnJheXMpO1xuICAgICAgY29tcGFyYXRvciA9IHR5cGVvZiBjb21wYXJhdG9yID09ICdmdW5jdGlvbicgPyBjb21wYXJhdG9yIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VYb3IoYXJyYXlGaWx0ZXIoYXJyYXlzLCBpc0FycmF5TGlrZU9iamVjdCksIHVuZGVmaW5lZCwgY29tcGFyYXRvcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIGdyb3VwZWQgZWxlbWVudHMsIHRoZSBmaXJzdCBvZiB3aGljaCBjb250YWlucyB0aGVcbiAgICAgKiBmaXJzdCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCB0aGUgc2Vjb25kIG9mIHdoaWNoIGNvbnRhaW5zIHRoZVxuICAgICAqIHNlY29uZCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gYXJyYXlzLCBhbmQgc28gb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQXJyYXlcbiAgICAgKiBAcGFyYW0gey4uLkFycmF5fSBbYXJyYXlzXSBUaGUgYXJyYXlzIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXAoWydhJywgJ2InXSwgWzEsIDJdLCBbdHJ1ZSwgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBbWydhJywgMSwgdHJ1ZV0sIFsnYicsIDIsIGZhbHNlXV1cbiAgICAgKi9cbiAgICB2YXIgemlwID0gYmFzZVJlc3QodW56aXApO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mcm9tUGFpcnNgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgdHdvIGFycmF5cyxcbiAgICAgKiBvbmUgb2YgcHJvcGVydHkgaWRlbnRpZmllcnMgYW5kIG9uZSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjQuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3QoWydhJywgJ2InXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB6aXBPYmplY3QocHJvcHMsIHZhbHVlcykge1xuICAgICAgcmV0dXJuIGJhc2VaaXBPYmplY3QocHJvcHMgfHwgW10sIHZhbHVlcyB8fCBbXSwgYXNzaWduVmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwT2JqZWN0YCBleGNlcHQgdGhhdCBpdCBzdXBwb3J0cyBwcm9wZXJ0eSBwYXRocy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEuMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwcm9wcz1bXV0gVGhlIHByb3BlcnR5IGlkZW50aWZpZXJzLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXM9W11dIFRoZSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBPYmplY3REZWVwKFsnYS5iWzBdLmMnLCAnYS5iWzFdLmQnXSwgWzEsIDJdKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogeyAnYic6IFt7ICdjJzogMSB9LCB7ICdkJzogMiB9XSB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB6aXBPYmplY3REZWVwKHByb3BzLCB2YWx1ZXMpIHtcbiAgICAgIHJldHVybiBiYXNlWmlwT2JqZWN0KHByb3BzIHx8IFtdLCB2YWx1ZXMgfHwgW10sIGJhc2VTZXQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uemlwYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgdG8gc3BlY2lmeVxuICAgICAqIGhvdyBncm91cGVkIHZhbHVlcyBzaG91bGQgYmUgY29tYmluZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhlXG4gICAgICogZWxlbWVudHMgb2YgZWFjaCBncm91cDogKC4uLmdyb3VwKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjguMFxuICAgICAqIEBjYXRlZ29yeSBBcnJheVxuICAgICAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gcHJvY2Vzcy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIHRvIGNvbWJpbmVcbiAgICAgKiAgZ3JvdXBlZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgZ3JvdXBlZCBlbGVtZW50cy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy56aXBXaXRoKFsxLCAyXSwgWzEwLCAyMF0sIFsxMDAsIDIwMF0sIGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBhICsgYiArIGM7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gWzExMSwgMjIyXVxuICAgICAqL1xuICAgIHZhciB6aXBXaXRoID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJyYXlzLmxlbmd0aCxcbiAgICAgICAgICBpdGVyYXRlZSA9IGxlbmd0aCA+IDEgPyBhcnJheXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGl0ZXJhdGVlID0gdHlwZW9mIGl0ZXJhdGVlID09ICdmdW5jdGlvbicgPyAoYXJyYXlzLnBvcCgpLCBpdGVyYXRlZSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdW56aXBXaXRoKGFycmF5cywgaXRlcmF0ZWUpO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UgdGhhdCB3cmFwcyBgdmFsdWVgIHdpdGggZXhwbGljaXQgbWV0aG9kXG4gICAgICogY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuIFRoZSByZXN1bHQgb2Ygc3VjaCBzZXF1ZW5jZXMgbXVzdCBiZSB1bndyYXBwZWRcbiAgICAgKiB3aXRoIGBfI3ZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjMuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiB2YXIgeW91bmdlc3QgPSBfXG4gICAgICogICAuY2hhaW4odXNlcnMpXG4gICAgICogICAuc29ydEJ5KCdhZ2UnKVxuICAgICAqICAgLm1hcChmdW5jdGlvbihvKSB7XG4gICAgICogICAgIHJldHVybiBvLnVzZXIgKyAnIGlzICcgKyBvLmFnZTtcbiAgICAgKiAgIH0pXG4gICAgICogICAuaGVhZCgpXG4gICAgICogICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiAncGViYmxlcyBpcyAxJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNoYWluKHZhbHVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoKHZhbHVlKTtcbiAgICAgIHJlc3VsdC5fX2NoYWluX18gPSB0cnVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpbnZva2VzIGBpbnRlcmNlcHRvcmAgYW5kIHJldHVybnMgYHZhbHVlYC4gVGhlIGludGVyY2VwdG9yXG4gICAgICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG9cbiAgICAgKiBcInRhcCBpbnRvXCIgYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UgaW4gb3JkZXIgdG8gbW9kaWZ5IGludGVybWVkaWF0ZSByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpbnRlcmNlcHRvciBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8oWzEsIDIsIDNdKVxuICAgICAqICAudGFwKGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICogICAgLy8gTXV0YXRlIGlucHV0IGFycmF5LlxuICAgICAqICAgIGFycmF5LnBvcCgpO1xuICAgICAqICB9KVxuICAgICAqICAucmV2ZXJzZSgpXG4gICAgICogIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRhcCh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgICAgIGludGVyY2VwdG9yKHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnRhcGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gICAgICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gXCJwYXNzIHRocnVcIiB2YWx1ZXMgcmVwbGFjaW5nIGludGVybWVkaWF0ZVxuICAgICAqIHJlc3VsdHMgaW4gYSBtZXRob2QgY2hhaW4gc2VxdWVuY2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgaW50ZXJjZXB0b3JgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfKCcgIGFiYyAgJylcbiAgICAgKiAgLmNoYWluKClcbiAgICAgKiAgLnRyaW0oKVxuICAgICAqICAudGhydShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgIHJldHVybiBbdmFsdWVdO1xuICAgICAqICB9KVxuICAgICAqICAudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbJ2FiYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdGhydSh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJldHVybiBpbnRlcmNlcHRvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdGhlIHdyYXBwZXIgdmVyc2lvbiBvZiBgXy5hdGAuXG4gICAgICpcbiAgICAgKiBAbmFtZSBhdFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gICAgICpcbiAgICAgKiBfKG9iamVjdCkuYXQoWydhWzBdLmIuYycsICdhWzFdJ10pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICovXG4gICAgdmFyIHdyYXBwZXJBdCA9IGZsYXRSZXN0KGZ1bmN0aW9uKHBhdGhzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gcGF0aHMubGVuZ3RoLFxuICAgICAgICAgIHN0YXJ0ID0gbGVuZ3RoID8gcGF0aHNbMF0gOiAwLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICBpbnRlcmNlcHRvciA9IGZ1bmN0aW9uKG9iamVjdCkgeyByZXR1cm4gYmFzZUF0KG9iamVjdCwgcGF0aHMpOyB9O1xuXG4gICAgICBpZiAobGVuZ3RoID4gMSB8fCB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCB8fFxuICAgICAgICAgICEodmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcikgfHwgIWlzSW5kZXgoc3RhcnQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgICAgfVxuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgK3N0YXJ0ICsgKGxlbmd0aCA/IDEgOiAwKSk7XG4gICAgICB2YWx1ZS5fX2FjdGlvbnNfXy5wdXNoKHtcbiAgICAgICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICAgICAnYXJncyc6IFtpbnRlcmNlcHRvcl0sXG4gICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih2YWx1ZSwgdGhpcy5fX2NoYWluX18pLnRocnUoZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgICAgaWYgKGxlbmd0aCAmJiAhYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgYXJyYXkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2Ugd2l0aCBleHBsaWNpdCBtZXRob2QgY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjaGFpblxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IFNlcVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBBIHNlcXVlbmNlIHdpdGhvdXQgZXhwbGljaXQgY2hhaW5pbmcuXG4gICAgICogXyh1c2VycykuaGVhZCgpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAgICAgKlxuICAgICAqIC8vIEEgc2VxdWVuY2Ugd2l0aCBleHBsaWNpdCBjaGFpbmluZy5cbiAgICAgKiBfKHVzZXJzKVxuICAgICAqICAgLmNoYWluKClcbiAgICAgKiAgIC5oZWFkKClcbiAgICAgKiAgIC5waWNrKCd1c2VyJylcbiAgICAgKiAgIC52YWx1ZSgpO1xuICAgICAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlckNoYWluKCkge1xuICAgICAgcmV0dXJuIGNoYWluKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gICAgICpcbiAgICAgKiBAbmFtZSBjb21taXRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICAgICAqIHZhciB3cmFwcGVkID0gXyhhcnJheSkucHVzaCgzKTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIHdyYXBwZWQubGFzdCgpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyQ29tbWl0KCkge1xuICAgICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHRoaXMudmFsdWUoKSwgdGhpcy5fX2NoYWluX18pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5leHQgdmFsdWUgb24gYSB3cmFwcGVkIG9iamVjdCBmb2xsb3dpbmcgdGhlXG4gICAgICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21kbi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBuYW1lIG5leHRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0ZXJhdG9yIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAgICAgKlxuICAgICAqIHdyYXBwZWQubmV4dCgpO1xuICAgICAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9XG4gICAgICpcbiAgICAgKiB3cmFwcGVkLm5leHQoKTtcbiAgICAgKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfVxuICAgICAqXG4gICAgICogd3JhcHBlZC5uZXh0KCk7XG4gICAgICogLy8gPT4geyAnZG9uZSc6IHRydWUsICd2YWx1ZSc6IHVuZGVmaW5lZCB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlck5leHQoKSB7XG4gICAgICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fX3ZhbHVlc19fID0gdG9BcnJheSh0aGlzLnZhbHVlKCkpO1xuICAgICAgfVxuICAgICAgdmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLFxuICAgICAgICAgIHZhbHVlID0gZG9uZSA/IHVuZGVmaW5lZCA6IHRoaXMuX192YWx1ZXNfX1t0aGlzLl9faW5kZXhfXysrXTtcblxuICAgICAgcmV0dXJuIHsgJ2RvbmUnOiBkb25lLCAndmFsdWUnOiB2YWx1ZSB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gICAgICpcbiAgICAgKiBAbmFtZSBTeW1ib2wuaXRlcmF0b3JcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gICAgICpcbiAgICAgKiB3cmFwcGVkW1N5bWJvbC5pdGVyYXRvcl0oKSA9PT0gd3JhcHBlZDtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBBcnJheS5mcm9tKHdyYXBwZWQpO1xuICAgICAqIC8vID0+IFsxLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdyYXBwZXJUb0l0ZXJhdG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNsb25lIG9mIHRoZSBjaGFpbiBzZXF1ZW5jZSBwbGFudGluZyBgdmFsdWVgIGFzIHRoZSB3cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgcGxhbnRcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBTZXFcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwbGFudC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKS5tYXAoc3F1YXJlKTtcbiAgICAgKiB2YXIgb3RoZXIgPSB3cmFwcGVkLnBsYW50KFszLCA0XSk7XG4gICAgICpcbiAgICAgKiBvdGhlci52YWx1ZSgpO1xuICAgICAqIC8vID0+IFs5LCAxNl1cbiAgICAgKlxuICAgICAqIHdyYXBwZWQudmFsdWUoKTtcbiAgICAgKiAvLyA9PiBbMSwgNF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB3cmFwcGVyUGxhbnQodmFsdWUpIHtcbiAgICAgIHZhciByZXN1bHQsXG4gICAgICAgICAgcGFyZW50ID0gdGhpcztcblxuICAgICAgd2hpbGUgKHBhcmVudCBpbnN0YW5jZW9mIGJhc2VMb2Rhc2gpIHtcbiAgICAgICAgdmFyIGNsb25lID0gd3JhcHBlckNsb25lKHBhcmVudCk7XG4gICAgICAgIGNsb25lLl9faW5kZXhfXyA9IDA7XG4gICAgICAgIGNsb25lLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IGNsb25lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IGNsb25lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2aW91cyA9IGNsb25lO1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuX193cmFwcGVkX187XG4gICAgICB9XG4gICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgdGhlIHdyYXBwZWQgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAbmFtZSByZXZlcnNlXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGBsb2Rhc2hgIHdyYXBwZXIgaW5zdGFuY2UuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFsxLCAyLCAzXTtcbiAgICAgKlxuICAgICAqIF8oYXJyYXkpLnJldmVyc2UoKS52YWx1ZSgpXG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheSk7XG4gICAgICogLy8gPT4gWzMsIDIsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclJldmVyc2UoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fO1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICAgICAgdmFyIHdyYXBwZWQgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX19hY3Rpb25zX18ubGVuZ3RoKSB7XG4gICAgICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB3cmFwcGVkID0gd3JhcHBlZC5yZXZlcnNlKCk7XG4gICAgICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAgICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICAgICAgICdhcmdzJzogW3JldmVyc2VdLFxuICAgICAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlZCwgdGhpcy5fX2NoYWluX18pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMudGhydShyZXZlcnNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgY2hhaW4gc2VxdWVuY2UgdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICAgICAqXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBhbGlhcyB0b0pTT04sIHZhbHVlT2ZcbiAgICAgKiBAY2F0ZWdvcnkgU2VxXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHVud3JhcHBlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXyhbMSwgMiwgM10pLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcHBlclZhbHVlKCkge1xuICAgICAgcmV0dXJuIGJhc2VXcmFwcGVyVmFsdWUodGhpcy5fX3dyYXBwZWRfXywgdGhpcy5fX2FjdGlvbnNfXyk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2Yga2V5cyBnZW5lcmF0ZWQgZnJvbSB0aGUgcmVzdWx0cyBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9mXG4gICAgICogZWFjaCBrZXkgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUga2V5IHdhcyByZXR1cm5lZCBieSBgaXRlcmF0ZWVgLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSB0byB0cmFuc2Zvcm0ga2V5cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb21wb3NlZCBhZ2dyZWdhdGUgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNvdW50QnkoWzYuMSwgNC4yLCA2LjNdLCBNYXRoLmZsb29yKTtcbiAgICAgKiAvLyA9PiB7ICc0JzogMSwgJzYnOiAyIH1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uY291bnRCeShbJ29uZScsICd0d28nLCAndGhyZWUnXSwgJ2xlbmd0aCcpO1xuICAgICAqIC8vID0+IHsgJzMnOiAyLCAnNSc6IDEgfVxuICAgICAqL1xuICAgIHZhciBjb3VudEJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3VsdCwga2V5KSkge1xuICAgICAgICArK3Jlc3VsdFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeSBmb3IgKiphbGwqKiBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIGZhbHNleS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCBmb3JcbiAgICAgKiBbZW1wdHkgY29sbGVjdGlvbnNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0VtcHR5X3NldCkgYmVjYXVzZVxuICAgICAqIFtldmVyeXRoaW5nIGlzIHRydWVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1ZhY3VvdXNfdHJ1dGgpIG9mXG4gICAgICogZWxlbWVudHMgb2YgZW1wdHkgY29sbGVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIHBhc3MgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmV2ZXJ5KFt0cnVlLCAxLCBudWxsLCAneWVzJ10sIEJvb2xlYW4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCB7ICd1c2VyJzogJ2Jhcm5leScsICdhY3RpdmUnOiBmYWxzZSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZXZlcnkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmV2ZXJ5KHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBldmVyeShjb2xsZWN0aW9uLCBwcmVkaWNhdGUsIGd1YXJkKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUV2ZXJ5IDogYmFzZUV2ZXJ5O1xuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSwgZ3VhcmQpKSB7XG4gICAgICAgIHByZWRpY2F0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGdldEl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgYW4gYXJyYXkgb2YgYWxsIGVsZW1lbnRzXG4gICAgICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICAgICAqIEBzZWUgXy5yZWplY3RcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuICFvLmFjdGl2ZTsgfSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maWx0ZXIodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gICAgICpcbiAgICAgKiAvLyBDb21iaW5pbmcgc2V2ZXJhbCBwcmVkaWNhdGVzIHVzaW5nIGBfLm92ZXJFdmVyeWAgb3IgYF8ub3ZlclNvbWVgLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLm92ZXJTb21lKFt7ICdhZ2UnOiAzNiB9LCBbJ2FnZScsIDQwXV0pKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kKHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdwZWJibGVzJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAgICAgKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gICAgICovXG4gICAgdmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD1jb2xsZWN0aW9uLmxlbmd0aC0xXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5maW5kTGFzdChbMSwgMiwgMywgNF0sIGZ1bmN0aW9uKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICUgMiA9PSAxO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICB2YXIgZmluZExhc3QgPSBjcmVhdGVGaW5kKGZpbmRMYXN0SW5kZXgpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZsYXR0ZW5lZCBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gXG4gICAgICogdGhydSBgaXRlcmF0ZWVgIGFuZCBmbGF0dGVuaW5nIHRoZSBtYXBwZWQgcmVzdWx0cy4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtuLCBuXTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLmZsYXRNYXAoWzEsIDJdLCBkdXBsaWNhdGUpO1xuICAgICAqIC8vID0+IFsxLCAxLCAyLCAyXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZsYXRNYXBgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGZsYXR0ZW5zIHRoZVxuICAgICAqIG1hcHBlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtbW24sIG5dXV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwRGVlcChbMSwgMl0sIGR1cGxpY2F0ZSk7XG4gICAgICogLy8gPT4gWzEsIDEsIDIsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmxhdE1hcERlZXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBJTkZJTklUWSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbGF0TWFwYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBmbGF0dGVucyB0aGVcbiAgICAgKiBtYXBwZWQgcmVzdWx0cyB1cCB0byBgZGVwdGhgIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtkZXB0aD0xXSBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBkdXBsaWNhdGUobikge1xuICAgICAqICAgcmV0dXJuIFtbW24sIG5dXV07XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5mbGF0TWFwRGVwdGgoWzEsIDJdLCBkdXBsaWNhdGUsIDIpO1xuICAgICAqIC8vID0+IFtbMSwgMV0sIFsyLCAyXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwRGVwdGgoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGRlcHRoKSB7XG4gICAgICBkZXB0aCA9IGRlcHRoID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoKTtcbiAgICAgIHJldHVybiBiYXNlRmxhdHRlbihtYXAoY29sbGVjdGlvbiwgaXRlcmF0ZWUpLCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBlbGVtZW50LlxuICAgICAqIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICogSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0IGl0ZXJhdGlvbiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIEFzIHdpdGggb3RoZXIgXCJDb2xsZWN0aW9uc1wiIG1ldGhvZHMsIG9iamVjdHMgd2l0aCBhIFwibGVuZ3RoXCJcbiAgICAgKiBwcm9wZXJ0eSBhcmUgaXRlcmF0ZWQgbGlrZSBhcnJheXMuIFRvIGF2b2lkIHRoaXMgYmVoYXZpb3IgdXNlIGBfLmZvckluYFxuICAgICAqIG9yIGBfLmZvck93bmAgZm9yIG9iamVjdCBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAYWxpYXMgZWFjaFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICAgICAqIEBzZWUgXy5mb3JFYWNoUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mb3JFYWNoKFsxLCAyXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiBMb2dzIGAxYCB0aGVuIGAyYC5cbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaCh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yRWFjaChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoIDogYmFzZUVhY2g7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZm9yRWFjaGAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZlxuICAgICAqIGBjb2xsZWN0aW9uYCBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAYWxpYXMgZWFjaFJpZ2h0XG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gICAgICogQHNlZSBfLmZvckVhY2hcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mb3JFYWNoUmlnaHQoWzEsIDJdLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgY29uc29sZS5sb2codmFsdWUpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgYDJgIHRoZW4gYDFgLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckVhY2hSaWdodChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlFYWNoUmlnaHQgOiBiYXNlRWFjaFJpZ2h0O1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmdcbiAgICAgKiBlYWNoIGVsZW1lbnQgb2YgYGNvbGxlY3Rpb25gIHRocnUgYGl0ZXJhdGVlYC4gVGhlIG9yZGVyIG9mIGdyb3VwZWQgdmFsdWVzXG4gICAgICogaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiBgY29sbGVjdGlvbmAuIFRoZSBjb3JyZXNwb25kaW5nXG4gICAgICogdmFsdWUgb2YgZWFjaCBrZXkgaXMgYW4gYXJyYXkgb2YgZWxlbWVudHMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlXG4gICAgICoga2V5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ncm91cEJ5KFs2LjEsIDQuMiwgNi4zXSwgTWF0aC5mbG9vcik7XG4gICAgICogLy8gPT4geyAnNCc6IFs0LjJdLCAnNic6IFs2LjEsIDYuM10gfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5ncm91cEJ5KFsnb25lJywgJ3R3bycsICd0aHJlZSddLCAnbGVuZ3RoJyk7XG4gICAgICogLy8gPT4geyAnMyc6IFsnb25lJywgJ3R3byddLCAnNSc6IFsndGhyZWUnXSB9XG4gICAgICovXG4gICAgdmFyIGdyb3VwQnkgPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwocmVzdWx0LCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwga2V5LCBbdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIGBjb2xsZWN0aW9uYC4gSWYgYGNvbGxlY3Rpb25gIGlzIGEgc3RyaW5nLCBpdCdzXG4gICAgICogY2hlY2tlZCBmb3IgYSBzdWJzdHJpbmcgb2YgYHZhbHVlYCwgb3RoZXJ3aXNlXG4gICAgICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAgICAgKiBpcyB1c2VkIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhc1xuICAgICAqIHRoZSBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R8c3RyaW5nfSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ucmVkdWNlYC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKFsxLCAyLCAzXSwgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcyhbMSwgMiwgM10sIDEsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluY2x1ZGVzKHsgJ2EnOiAxLCAnYic6IDIgfSwgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pbmNsdWRlcygnYWJjZCcsICdiYycpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbmNsdWRlcyhjb2xsZWN0aW9uLCB2YWx1ZSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgICAgY29sbGVjdGlvbiA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gY29sbGVjdGlvbiA6IHZhbHVlcyhjb2xsZWN0aW9uKTtcbiAgICAgIGZyb21JbmRleCA9IChmcm9tSW5kZXggJiYgIWd1YXJkKSA/IHRvSW50ZWdlcihmcm9tSW5kZXgpIDogMDtcblxuICAgICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuICAgICAgaWYgKGZyb21JbmRleCA8IDApIHtcbiAgICAgICAgZnJvbUluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGZyb21JbmRleCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbilcbiAgICAgICAgPyAoZnJvbUluZGV4IDw9IGxlbmd0aCAmJiBjb2xsZWN0aW9uLmluZGV4T2YodmFsdWUsIGZyb21JbmRleCkgPiAtMSlcbiAgICAgICAgOiAoISFsZW5ndGggJiYgYmFzZUluZGV4T2YoY29sbGVjdGlvbiwgdmFsdWUsIGZyb21JbmRleCkgPiAtMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gLCByZXR1cm5pbmdcbiAgICAgKiBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiBlYWNoIGludm9rZWQgbWV0aG9kLiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICAgKiBhcmUgcHJvdmlkZWQgdG8gZWFjaCBpbnZva2VkIG1ldGhvZC4gSWYgYHBhdGhgIGlzIGEgZnVuY3Rpb24sIGl0J3MgaW52b2tlZFxuICAgICAqIGZvciwgYW5kIGB0aGlzYCBib3VuZCB0bywgZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb258c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBtZXRob2QgdG8gaW52b2tlIG9yXG4gICAgICogIHRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgZWFjaCBtZXRob2Qgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaW52b2tlTWFwKFtbNSwgMSwgN10sIFszLCAyLCAxXV0sICdzb3J0Jyk7XG4gICAgICogLy8gPT4gW1sxLCA1LCA3XSwgWzEsIDIsIDNdXVxuICAgICAqXG4gICAgICogXy5pbnZva2VNYXAoWzEyMywgNDU2XSwgU3RyaW5nLnByb3RvdHlwZS5zcGxpdCwgJycpO1xuICAgICAqIC8vID0+IFtbJzEnLCAnMicsICczJ10sIFsnNCcsICc1JywgJzYnXV1cbiAgICAgKi9cbiAgICB2YXIgaW52b2tlTWFwID0gYmFzZVJlc3QoZnVuY3Rpb24oY29sbGVjdGlvbiwgcGF0aCwgYXJncykge1xuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgaXNGdW5jID0gdHlwZW9mIHBhdGggPT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICByZXN1bHQgPSBpc0FycmF5TGlrZShjb2xsZWN0aW9uKSA/IEFycmF5KGNvbGxlY3Rpb24ubGVuZ3RoKSA6IFtdO1xuXG4gICAgICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXN1bHRbKytpbmRleF0gPSBpc0Z1bmMgPyBhcHBseShwYXRoLCB2YWx1ZSwgYXJncykgOiBiYXNlSW52b2tlKHZhbHVlLCBwYXRoLCBhcmdzKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZ1xuICAgICAqIGVhY2ggZWxlbWVudCBvZiBgY29sbGVjdGlvbmAgdGhydSBgaXRlcmF0ZWVgLiBUaGUgY29ycmVzcG9uZGluZyB2YWx1ZSBvZlxuICAgICAqIGVhY2gga2V5IGlzIHRoZSBsYXN0IGVsZW1lbnQgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgdGhlIGtleS4gVGhlXG4gICAgICogaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgdG8gdHJhbnNmb3JtIGtleXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29tcG9zZWQgYWdncmVnYXRlIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gW1xuICAgICAqICAgeyAnZGlyJzogJ2xlZnQnLCAnY29kZSc6IDk3IH0sXG4gICAgICogICB7ICdkaXInOiAncmlnaHQnLCAnY29kZSc6IDEwMCB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIF8ua2V5QnkoYXJyYXksIGZ1bmN0aW9uKG8pIHtcbiAgICAgKiAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG8uY29kZSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4geyAnYSc6IHsgJ2Rpcic6ICdsZWZ0JywgJ2NvZGUnOiA5NyB9LCAnZCc6IHsgJ2Rpcic6ICdyaWdodCcsICdjb2RlJzogMTAwIH0gfVxuICAgICAqXG4gICAgICogXy5rZXlCeShhcnJheSwgJ2RpcicpO1xuICAgICAqIC8vID0+IHsgJ2xlZnQnOiB7ICdkaXInOiAnbGVmdCcsICdjb2RlJzogOTcgfSwgJ3JpZ2h0JzogeyAnZGlyJzogJ3JpZ2h0JywgJ2NvZGUnOiAxMDAgfSB9XG4gICAgICovXG4gICAgdmFyIGtleUJ5ID0gY3JlYXRlQWdncmVnYXRvcihmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgdmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAgICAgKiBgaXRlcmF0ZWVgLiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czpcbiAgICAgKiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gICAgICpcbiAgICAgKiBNYW55IGxvZGFzaCBtZXRob2RzIGFyZSBndWFyZGVkIHRvIHdvcmsgYXMgaXRlcmF0ZWVzIGZvciBtZXRob2RzIGxpa2VcbiAgICAgKiBgXy5ldmVyeWAsIGBfLmZpbHRlcmAsIGBfLm1hcGAsIGBfLm1hcFZhbHVlc2AsIGBfLnJlamVjdGAsIGFuZCBgXy5zb21lYC5cbiAgICAgKlxuICAgICAqIFRoZSBndWFyZGVkIG1ldGhvZHMgYXJlOlxuICAgICAqIGBhcnlgLCBgY2h1bmtgLCBgY3VycnlgLCBgY3VycnlSaWdodGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBldmVyeWAsXG4gICAgICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gICAgICogYHNhbXBsZVNpemVgLCBgc2xpY2VgLCBgc29tZWAsIGBzb3J0QnlgLCBgc3BsaXRgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLFxuICAgICAqIGB0ZW1wbGF0ZWAsIGB0cmltYCwgYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYW5kIGB3b3Jkc2BcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBfLm1hcChbNCwgOF0sIHNxdWFyZSk7XG4gICAgICogLy8gPT4gWzE2LCA2NF1cbiAgICAgKlxuICAgICAqIF8ubWFwKHsgJ2EnOiA0LCAnYic6IDggfSwgc3F1YXJlKTtcbiAgICAgKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0gW1xuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXAodXNlcnMsICd1c2VyJyk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWFwKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uc29ydEJ5YCBleGNlcHQgdGhhdCBpdCBhbGxvd3Mgc3BlY2lmeWluZyB0aGUgc29ydFxuICAgICAqIG9yZGVycyBvZiB0aGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuIElmIGBvcmRlcnNgIGlzIHVuc3BlY2lmaWVkLCBhbGwgdmFsdWVzXG4gICAgICogYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIuIE90aGVyd2lzZSwgc3BlY2lmeSBhbiBvcmRlciBvZiBcImRlc2NcIiBmb3JcbiAgICAgKiBkZXNjZW5kaW5nIG9yIFwiYXNjXCIgZm9yIGFzY2VuZGluZyBzb3J0IG9yZGVyIG9mIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtBcnJheVtdfEZ1bmN0aW9uW118T2JqZWN0W118c3RyaW5nW119IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIHNvcnQgYnkuXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gW29yZGVyc10gVGhlIHNvcnQgb3JkZXJzIG9mIGBpdGVyYXRlZXNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLnJlZHVjZWAuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgc29ydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0OCB9LFxuICAgICAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzQgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9XG4gICAgICogXTtcbiAgICAgKlxuICAgICAqIC8vIFNvcnQgYnkgYHVzZXJgIGluIGFzY2VuZGluZyBvcmRlciBhbmQgYnkgYGFnZWAgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICAgKiBfLm9yZGVyQnkodXNlcnMsIFsndXNlcicsICdhZ2UnXSwgWydhc2MnLCAnZGVzYyddKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDQwXV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvcmRlckJ5KGNvbGxlY3Rpb24sIGl0ZXJhdGVlcywgb3JkZXJzLCBndWFyZCkge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXJyYXkoaXRlcmF0ZWVzKSkge1xuICAgICAgICBpdGVyYXRlZXMgPSBpdGVyYXRlZXMgPT0gbnVsbCA/IFtdIDogW2l0ZXJhdGVlc107XG4gICAgICB9XG4gICAgICBvcmRlcnMgPSBndWFyZCA/IHVuZGVmaW5lZCA6IG9yZGVycztcbiAgICAgIGlmICghaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgIG9yZGVycyA9IG9yZGVycyA9PSBudWxsID8gW10gOiBbb3JkZXJzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlT3JkZXJCeShjb2xsZWN0aW9uLCBpdGVyYXRlZXMsIG9yZGVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cyBzcGxpdCBpbnRvIHR3byBncm91cHMsIHRoZSBmaXJzdCBvZiB3aGljaFxuICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciwgdGhlIHNlY29uZCBvZiB3aGljaFxuICAgICAqIGNvbnRhaW5zIGVsZW1lbnRzIGBwcmVkaWNhdGVgIHJldHVybnMgZmFsc2V5IGZvci4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBncm91cGVkIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiBmYWxzZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hY3RpdmU7IH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ3BlYmJsZXMnXSwgWydiYXJuZXknLCAnZnJlZCddXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ucGFydGl0aW9uKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gb2JqZWN0cyBmb3IgW1snYmFybmV5JywgJ3BlYmJsZXMnXSwgWydmcmVkJ11dXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnBhcnRpdGlvbih1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2ZyZWQnXSwgWydiYXJuZXknLCAncGViYmxlcyddXVxuICAgICAqL1xuICAgIHZhciBwYXJ0aXRpb24gPSBjcmVhdGVBZ2dyZWdhdG9yKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgcmVzdWx0W2tleSA/IDAgOiAxXS5wdXNoKHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbigpIHsgcmV0dXJuIFtbXSwgW11dOyB9KTtcblxuICAgIC8qKlxuICAgICAqIFJlZHVjZXMgYGNvbGxlY3Rpb25gIHRvIGEgdmFsdWUgd2hpY2ggaXMgdGhlIGFjY3VtdWxhdGVkIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICogZWFjaCBlbGVtZW50IGluIGBjb2xsZWN0aW9uYCB0aHJ1IGBpdGVyYXRlZWAsIHdoZXJlIGVhY2ggc3VjY2Vzc2l2ZVxuICAgICAqIGludm9jYXRpb24gaXMgc3VwcGxpZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJldmlvdXMuIElmIGBhY2N1bXVsYXRvcmBcbiAgICAgKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBjb2xsZWN0aW9uYCBpcyB1c2VkIGFzIHRoZSBpbml0aWFsXG4gICAgICogdmFsdWUuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6XG4gICAgICogKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICAgICAqIGBfLnJlZHVjZWAsIGBfLnJlZHVjZVJpZ2h0YCwgYW5kIGBfLnRyYW5zZm9ybWAuXG4gICAgICpcbiAgICAgKiBUaGUgZ3VhcmRlZCBtZXRob2RzIGFyZTpcbiAgICAgKiBgYXNzaWduYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBpbmNsdWRlc2AsIGBtZXJnZWAsIGBvcmRlckJ5YCxcbiAgICAgKiBhbmQgYHNvcnRCeWBcbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7Kn0gW2FjY3VtdWxhdG9yXSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLnJlZHVjZVJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlKFsxLCAyXSwgZnVuY3Rpb24oc3VtLCBuKSB7XG4gICAgICogICByZXR1cm4gc3VtICsgbjtcbiAgICAgKiB9LCAwKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnJlZHVjZSh7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDEgfSwgZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICogICAocmVzdWx0W3ZhbHVlXSB8fCAocmVzdWx0W3ZhbHVlXSA9IFtdKSkucHVzaChrZXkpO1xuICAgICAqICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlZHVjZShjb2xsZWN0aW9uLCBpdGVyYXRlZSwgYWNjdW11bGF0b3IpIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5UmVkdWNlIDogYmFzZVJlZHVjZSxcbiAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5yZWR1Y2VgIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2ZcbiAgICAgKiBgY29sbGVjdGlvbmAgZnJvbSByaWdodCB0byBsZWZ0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAgICAgKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8ucmVkdWNlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhcnJheSA9IFtbMCwgMV0sIFsyLCAzXSwgWzQsIDVdXTtcbiAgICAgKlxuICAgICAqIF8ucmVkdWNlUmlnaHQoYXJyYXksIGZ1bmN0aW9uKGZsYXR0ZW5lZCwgb3RoZXIpIHtcbiAgICAgKiAgIHJldHVybiBmbGF0dGVuZWQuY29uY2F0KG90aGVyKTtcbiAgICAgKiB9LCBbXSk7XG4gICAgICogLy8gPT4gWzQsIDUsIDIsIDMsIDAsIDFdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkdWNlUmlnaHQoY29sbGVjdGlvbiwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVJlZHVjZVJpZ2h0IDogYmFzZVJlZHVjZSxcbiAgICAgICAgICBpbml0QWNjdW0gPSBhcmd1bWVudHMubGVuZ3RoIDwgMztcblxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtLCBiYXNlRWFjaFJpZ2h0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uZmlsdGVyYDsgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gXG4gICAgICogdGhhdCBgcHJlZGljYXRlYCBkb2VzICoqbm90KiogcmV0dXJuIHRydXRoeSBmb3IuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gICAgICogQHNlZSBfLmZpbHRlclxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IHRydWUgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLnJlamVjdCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnXVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgeyAnYWdlJzogNDAsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnJlamVjdCh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiByZWplY3QoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gICAgICByZXR1cm4gZnVuYyhjb2xsZWN0aW9uLCBuZWdhdGUoZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYSByYW5kb20gZWxlbWVudCBmcm9tIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByYW5kb20gZWxlbWVudC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zYW1wbGUoWzEsIDIsIDMsIDRdKTtcbiAgICAgKiAvLyA9PiAyXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2FtcGxlKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlIDogYmFzZVNhbXBsZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgYG5gIHJhbmRvbSBlbGVtZW50cyBhdCB1bmlxdWUga2V5cyBmcm9tIGBjb2xsZWN0aW9uYCB1cCB0byB0aGVcbiAgICAgKiBzaXplIG9mIGBjb2xsZWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2FtcGxlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbj0xXSBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZS5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZG9tIGVsZW1lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNhbXBsZVNpemUoWzEsIDIsIDNdLCAyKTtcbiAgICAgKiAvLyA9PiBbMywgMV1cbiAgICAgKlxuICAgICAqIF8uc2FtcGxlU2l6ZShbMSwgMiwgM10sIDQpO1xuICAgICAqIC8vID0+IFsyLCAzLCAxXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNhbXBsZVNpemUoY29sbGVjdGlvbiwgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBuLCBndWFyZCkgOiBuID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIG4gPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIH1cbiAgICAgIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5U2FtcGxlU2l6ZSA6IGJhc2VTYW1wbGVTaXplO1xuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBzaHVmZmxlZCB2YWx1ZXMsIHVzaW5nIGEgdmVyc2lvbiBvZiB0aGVcbiAgICAgKiBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gc2h1ZmZsZS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzaHVmZmxlZCBhcnJheS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zaHVmZmxlKFsxLCAyLCAzLCA0XSk7XG4gICAgICogLy8gPT4gWzQsIDEsIDMsIDJdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2h1ZmZsZShjb2xsZWN0aW9uKSB7XG4gICAgICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheVNodWZmbGUgOiBiYXNlU2h1ZmZsZTtcbiAgICAgIHJldHVybiBmdW5jKGNvbGxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNpemUgb2YgYGNvbGxlY3Rpb25gIGJ5IHJldHVybmluZyBpdHMgbGVuZ3RoIGZvciBhcnJheS1saWtlXG4gICAgICogdmFsdWVzIG9yIHRoZSBudW1iZXIgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgZm9yIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fHN0cmluZ30gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbGxlY3Rpb24gc2l6ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zaXplKFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5zaXplKHsgJ2EnOiAxLCAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5zaXplKCdwZWJibGVzJyk7XG4gICAgICogLy8gPT4gN1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNpemUoY29sbGVjdGlvbikge1xuICAgICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcoY29sbGVjdGlvbikgPyBzdHJpbmdTaXplKGNvbGxlY3Rpb24pIDogY29sbGVjdGlvbi5sZW5ndGg7XG4gICAgICB9XG4gICAgICB2YXIgdGFnID0gZ2V0VGFnKGNvbGxlY3Rpb24pO1xuICAgICAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbi5zaXplO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VLZXlzKGNvbGxlY3Rpb24pLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yICoqYW55KiogZWxlbWVudCBvZiBgY29sbGVjdGlvbmAuXG4gICAgICogSXRlcmF0aW9uIGlzIHN0b3BwZWQgb25jZSBgcHJlZGljYXRlYCByZXR1cm5zIHRydXRoeS4gVGhlIHByZWRpY2F0ZSBpc1xuICAgICAqIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6ICh2YWx1ZSwgaW5kZXh8a2V5LCBjb2xsZWN0aW9uKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gICAgICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNvbWUoW251bGwsIDAsICd5ZXMnLCBmYWxzZV0sIEJvb2xlYW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FjdGl2ZSc6IGZhbHNlIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLnNvbWUodXNlcnMsIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IGZhbHNlIH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCBbJ2FjdGl2ZScsIGZhbHNlXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zb21lKHVzZXJzLCAnYWN0aXZlJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNvbWUoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkge1xuICAgICAgdmFyIGZ1bmMgPSBpc0FycmF5KGNvbGxlY3Rpb24pID8gYXJyYXlTb21lIDogYmFzZVNvbWU7XG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBndWFyZCkpIHtcbiAgICAgICAgcHJlZGljYXRlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBlbGVtZW50cywgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgcmVzdWx0cyBvZlxuICAgICAqIHJ1bm5pbmcgZWFjaCBlbGVtZW50IGluIGEgY29sbGVjdGlvbiB0aHJ1IGVhY2ggaXRlcmF0ZWUuIFRoaXMgbWV0aG9kXG4gICAgICogcGVyZm9ybXMgYSBzdGFibGUgc29ydCwgdGhhdCBpcywgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBzb3J0IG9yZGVyIG9mXG4gICAgICogZXF1YWwgZWxlbWVudHMuIFRoZSBpdGVyYXRlZXMgYXJlIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICAgICAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2l0ZXJhdGVlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBpdGVyYXRlZXMgdG8gc29ydCBieS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBzb3J0ZWQgYXJyYXkuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciB1c2VycyA9IFtcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQ4IH0sXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICAgICAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogMzAgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM0IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5zb3J0QnkodXNlcnMsIFtmdW5jdGlvbihvKSB7IHJldHVybiBvLnVzZXI7IH1dKTtcbiAgICAgKiAvLyA9PiBvYmplY3RzIGZvciBbWydiYXJuZXknLCAzNl0sIFsnYmFybmV5JywgMzRdLCBbJ2ZyZWQnLCA0OF0sIFsnZnJlZCcsIDMwXV1cbiAgICAgKlxuICAgICAqIF8uc29ydEJ5KHVzZXJzLCBbJ3VzZXInLCAnYWdlJ10pO1xuICAgICAqIC8vID0+IG9iamVjdHMgZm9yIFtbJ2Jhcm5leScsIDM0XSwgWydiYXJuZXknLCAzNl0sIFsnZnJlZCcsIDMwXSwgWydmcmVkJywgNDhdXVxuICAgICAqL1xuICAgIHZhciBzb3J0QnkgPSBiYXNlUmVzdChmdW5jdGlvbihjb2xsZWN0aW9uLCBpdGVyYXRlZXMpIHtcbiAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IGl0ZXJhdGVlcy5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoID4gMSAmJiBpc0l0ZXJhdGVlQ2FsbChjb2xsZWN0aW9uLCBpdGVyYXRlZXNbMF0sIGl0ZXJhdGVlc1sxXSkpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW107XG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDIgJiYgaXNJdGVyYXRlZUNhbGwoaXRlcmF0ZWVzWzBdLCBpdGVyYXRlZXNbMV0sIGl0ZXJhdGVlc1syXSkpIHtcbiAgICAgICAgaXRlcmF0ZWVzID0gW2l0ZXJhdGVlc1swXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZU9yZGVyQnkoY29sbGVjdGlvbiwgYmFzZUZsYXR0ZW4oaXRlcmF0ZWVzLCAxKSwgW10pO1xuICAgIH0pO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdGltZXN0YW1wIG9mIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlXG4gICAgICogdGhlIFVuaXggZXBvY2ggKDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgRGF0ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVzdGFtcC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZlcihmdW5jdGlvbihzdGFtcCkge1xuICAgICAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAgICAgKiB9LCBfLm5vdygpKTtcbiAgICAgKiAvLyA9PiBMb2dzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGl0IHRvb2sgZm9yIHRoZSBkZWZlcnJlZCBpbnZvY2F0aW9uLlxuICAgICAqL1xuICAgIHZhciBub3cgPSBjdHhOb3cgfHwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xuICAgIH07XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8uYmVmb3JlYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlc1xuICAgICAqIGBmdW5jYCBvbmNlIGl0J3MgY2FsbGVkIGBuYCBvciBtb3JlIHRpbWVzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiBjYWxscyBiZWZvcmUgYGZ1bmNgIGlzIGludm9rZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHNhdmVzID0gWydwcm9maWxlJywgJ3NldHRpbmdzJ107XG4gICAgICpcbiAgICAgKiB2YXIgZG9uZSA9IF8uYWZ0ZXIoc2F2ZXMubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdkb25lIHNhdmluZyEnKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZm9yRWFjaChzYXZlcywgZnVuY3Rpb24odHlwZSkge1xuICAgICAqICAgYXN5bmNTYXZlKHsgJ3R5cGUnOiB0eXBlLCAnY29tcGxldGUnOiBkb25lIH0pO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2RvbmUgc2F2aW5nIScgYWZ0ZXIgdGhlIHR3byBhc3luYyBzYXZlcyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhZnRlcihuLCBmdW5jKSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoLS1uIDwgMSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2AsIHdpdGggdXAgdG8gYG5gIGFyZ3VtZW50cyxcbiAgICAgKiBpZ25vcmluZyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW249ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBjYXAuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwKFsnNicsICc4JywgJzEwJ10sIF8uYXJ5KHBhcnNlSW50LCAxKSk7XG4gICAgICogLy8gPT4gWzYsIDgsIDEwXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGFyeShmdW5jLCBuLCBndWFyZCkge1xuICAgICAgbiA9IGd1YXJkID8gdW5kZWZpbmVkIDogbjtcbiAgICAgIG4gPSAoZnVuYyAmJiBuID09IG51bGwpID8gZnVuYy5sZW5ndGggOiBuO1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9BUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCwgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50c1xuICAgICAqIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGlsZSBpdCdzIGNhbGxlZCBsZXNzIHRoYW4gYG5gIHRpbWVzLiBTdWJzZXF1ZW50XG4gICAgICogY2FsbHMgdG8gdGhlIGNyZWF0ZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIGNhbGxzIGF0IHdoaWNoIGBmdW5jYCBpcyBubyBsb25nZXIgaW52b2tlZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyByZXN0cmljdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgXy5iZWZvcmUoNSwgYWRkQ29udGFjdFRvTGlzdCkpO1xuICAgICAqIC8vID0+IEFsbG93cyBhZGRpbmcgdXAgdG8gNCBjb250YWN0cyB0byB0aGUgbGlzdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBiZWZvcmUobiwgZnVuYykge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgtLW4gPiAwKSB7XG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuIDw9IDEpIHtcbiAgICAgICAgICBmdW5jID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYFxuICAgICAqIGFuZCBgcGFydGlhbHNgIHByZXBlbmRlZCB0byB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmQucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVubGlrZSBuYXRpdmUgYEZ1bmN0aW9uI2JpbmRgLCB0aGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIlxuICAgICAqIHByb3BlcnR5IG9mIGJvdW5kIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGJpbmQuXG4gICAgICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYm91bmQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgdGhpcy51c2VyICsgcHVuY3R1YXRpb247XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ3VzZXInOiAnZnJlZCcgfTtcbiAgICAgKlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCAnaGknKTtcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZChncmVldCwgb2JqZWN0LCBfLCAnIScpO1xuICAgICAqIGJvdW5kKCdoaScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKi9cbiAgICB2YXIgYmluZCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgYml0bWFzayA9IFdSQVBfQklORF9GTEFHO1xuICAgICAgaWYgKHBhcnRpYWxzLmxlbmd0aCkge1xuICAgICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIoYmluZCkpO1xuICAgICAgICBiaXRtYXNrIHw9IFdSQVBfUEFSVElBTF9GTEFHO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBvYmplY3Rba2V5XWAgd2l0aCBgcGFydGlhbHNgXG4gICAgICogcHJlcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYF8uYmluZGAgYnkgYWxsb3dpbmcgYm91bmQgZnVuY3Rpb25zIHRvIHJlZmVyZW5jZVxuICAgICAqIG1ldGhvZHMgdGhhdCBtYXkgYmUgcmVkZWZpbmVkIG9yIGRvbid0IHlldCBleGlzdC4gU2VlXG4gICAgICogW1BldGVyIE1pY2hhdXgncyBhcnRpY2xlXShodHRwOi8vcGV0ZXIubWljaGF1eC5jYS9hcnRpY2xlcy9sYXp5LWZ1bmN0aW9uLWRlZmluaXRpb24tcGF0dGVybilcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogVGhlIGBfLmJpbmRLZXkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpY1xuICAgICAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnZva2UgdGhlIG1ldGhvZCBvbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBib3VuZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHtcbiAgICAgKiAgICd1c2VyJzogJ2ZyZWQnLFxuICAgICAqICAgJ2dyZWV0JzogZnVuY3Rpb24oZ3JlZXRpbmcsIHB1bmN0dWF0aW9uKSB7XG4gICAgICogICAgIHJldHVybiBncmVldGluZyArICcgJyArIHRoaXMudXNlciArIHB1bmN0dWF0aW9uO1xuICAgICAqICAgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgYm91bmQgPSBfLmJpbmRLZXkob2JqZWN0LCAnZ3JlZXQnLCAnaGknKTtcbiAgICAgKiBib3VuZCgnIScpO1xuICAgICAqIC8vID0+ICdoaSBmcmVkISdcbiAgICAgKlxuICAgICAqIG9iamVjdC5ncmVldCA9IGZ1bmN0aW9uKGdyZWV0aW5nLCBwdW5jdHVhdGlvbikge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJ3lhICcgKyB0aGlzLnVzZXIgKyBwdW5jdHVhdGlvbjtcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogYm91bmQoJyEnKTtcbiAgICAgKiAvLyA9PiAnaGl5YSBmcmVkISdcbiAgICAgKlxuICAgICAqIC8vIEJvdW5kIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIHZhciBib3VuZCA9IF8uYmluZEtleShvYmplY3QsICdncmVldCcsIF8sICchJyk7XG4gICAgICogYm91bmQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpeWEgZnJlZCEnXG4gICAgICovXG4gICAgdmFyIGJpbmRLZXkgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIGtleSwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBiaXRtYXNrID0gV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gICAgICBpZiAocGFydGlhbHMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihiaW5kS2V5KSk7XG4gICAgICAgIGJpdG1hc2sgfD0gV1JBUF9QQVJUSUFMX0ZMQUc7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChrZXksIGJpdG1hc2ssIG9iamVjdCwgcGFydGlhbHMsIGhvbGRlcnMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhcmd1bWVudHMgb2YgYGZ1bmNgIGFuZCBlaXRoZXIgaW52b2tlc1xuICAgICAqIGBmdW5jYCByZXR1cm5pbmcgaXRzIHJlc3VsdCwgaWYgYXQgbGVhc3QgYGFyaXR5YCBudW1iZXIgb2YgYXJndW1lbnRzIGhhdmVcbiAgICAgKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gICAgICogYXJndW1lbnRzLCBhbmQgc28gb24uIFRoZSBhcml0eSBvZiBgZnVuY2AgbWF5IGJlIHNwZWNpZmllZCBpZiBgZnVuYy5sZW5ndGhgXG4gICAgICogaXMgbm90IHN1ZmZpY2llbnQuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnkucGxhY2Vob2xkZXJgIHZhbHVlLCB3aGljaCBkZWZhdWx0cyB0byBgX2AgaW4gbW9ub2xpdGhpYyBidWlsZHMsXG4gICAgICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGRvZXNuJ3Qgc2V0IHRoZSBcImxlbmd0aFwiIHByb3BlcnR5IG9mIGN1cnJpZWQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAgICAgKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGN1cnJpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBhYmMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSkoMikoMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDEsIDIpKDMpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgxLCAyLCAzKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIC8vIEN1cnJpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogY3VycmllZCgxKShfLCAzKSgyKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjdXJyeShmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgICAgIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5LnBsYWNlaG9sZGVyO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmN1cnJ5YCBleGNlcHQgdGhhdCBhcmd1bWVudHMgYXJlIGFwcGxpZWQgdG8gYGZ1bmNgXG4gICAgICogaW4gdGhlIG1hbm5lciBvZiBgXy5wYXJ0aWFsUmlnaHRgIGluc3RlYWQgb2YgYF8ucGFydGlhbGAuXG4gICAgICpcbiAgICAgKiBUaGUgYF8uY3VycnlSaWdodC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5PWZ1bmMubGVuZ3RoXSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAgICAgKiAgIHJldHVybiBbYSwgYiwgY107XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIHZhciBjdXJyaWVkID0gXy5jdXJyeVJpZ2h0KGFiYyk7XG4gICAgICpcbiAgICAgKiBjdXJyaWVkKDMpKDIpKDEpO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXVxuICAgICAqXG4gICAgICogY3VycmllZCgyLCAzKSgxKTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgM11cbiAgICAgKlxuICAgICAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICpcbiAgICAgKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICAgICAqIGN1cnJpZWQoMykoMSwgXykoMik7XG4gICAgICogLy8gPT4gWzEsIDIsIDNdXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3VycnlSaWdodChmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgICAgIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgICAgIHZhciByZXN1bHQgPSBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfQ1VSUllfUklHSFRfRkxBRywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5KTtcbiAgICAgIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5UmlnaHQucGxhY2Vob2xkZXI7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWJvdW5jZWQgZnVuY3Rpb24gdGhhdCBkZWxheXMgaW52b2tpbmcgYGZ1bmNgIHVudGlsIGFmdGVyIGB3YWl0YFxuICAgICAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICAgICAqIGludm9rZWQuIFRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gY29tZXMgd2l0aCBhIGBjYW5jZWxgIG1ldGhvZCB0byBjYW5jZWxcbiAgICAgKiBkZWxheWVkIGBmdW5jYCBpbnZvY2F0aW9ucyBhbmQgYSBgZmx1c2hgIG1ldGhvZCB0byBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS5cbiAgICAgKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAgICAgKiBsZWFkaW5nIGFuZC9vciB0cmFpbGluZyBlZGdlIG9mIHRoZSBgd2FpdGAgdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aGUgbGFzdCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGRlYm91bmNlZCBmdW5jdGlvbi4gU3Vic2VxdWVudFxuICAgICAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gICAgICogaW52b2NhdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAgICAgKiBpbnZva2VkIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0IG9ubHkgaWYgdGhlIGRlYm91bmNlZCBmdW5jdGlvblxuICAgICAqIGlzIGludm9rZWQgbW9yZSB0aGFuIG9uY2UgZHVyaW5nIHRoZSBgd2FpdGAgdGltZW91dC5cbiAgICAgKlxuICAgICAqIElmIGB3YWl0YCBpcyBgMGAgYW5kIGBsZWFkaW5nYCBpcyBgZmFsc2VgLCBgZnVuY2AgaW52b2NhdGlvbiBpcyBkZWZlcnJlZFxuICAgICAqIHVudGlsIHRvIHRoZSBuZXh0IHRpY2ssIHNpbWlsYXIgdG8gYHNldFRpbWVvdXRgIHdpdGggYSB0aW1lb3V0IG9mIGAwYC5cbiAgICAgKlxuICAgICAqIFNlZSBbRGF2aWQgQ29yYmFjaG8ncyBhcnRpY2xlXShodHRwczovL2Nzcy10cmlja3MuY29tL2RlYm91bmNpbmctdGhyb3R0bGluZy1leHBsYWluZWQtZXhhbXBsZXMvKVxuICAgICAqIGZvciBkZXRhaWxzIG92ZXIgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gYF8uZGVib3VuY2VgIGFuZCBgXy50aHJvdHRsZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWJvdW5jZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sZWFkaW5nPWZhbHNlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLm1heFdhaXRdXG4gICAgICogIFRoZSBtYXhpbXVtIHRpbWUgYGZ1bmNgIGlzIGFsbG93ZWQgdG8gYmUgZGVsYXllZCBiZWZvcmUgaXQncyBpbnZva2VkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAgICAgKiAgU3BlY2lmeSBpbnZva2luZyBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIGNvc3RseSBjYWxjdWxhdGlvbnMgd2hpbGUgdGhlIHdpbmRvdyBzaXplIGlzIGluIGZsdXguXG4gICAgICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAgICAgKlxuICAgICAqIC8vIEludm9rZSBgc2VuZE1haWxgIHdoZW4gY2xpY2tlZCwgZGVib3VuY2luZyBzdWJzZXF1ZW50IGNhbGxzLlxuICAgICAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAgICAgKiAgICdsZWFkaW5nJzogdHJ1ZSxcbiAgICAgKiAgICd0cmFpbGluZyc6IGZhbHNlXG4gICAgICogfSkpO1xuICAgICAqXG4gICAgICogLy8gRW5zdXJlIGBiYXRjaExvZ2AgaXMgaW52b2tlZCBvbmNlIGFmdGVyIDEgc2Vjb25kIG9mIGRlYm91bmNlZCBjYWxscy5cbiAgICAgKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAgICAgKiB2YXIgc291cmNlID0gbmV3IEV2ZW50U291cmNlKCcvc3RyZWFtJyk7XG4gICAgICogalF1ZXJ5KHNvdXJjZSkub24oJ21lc3NhZ2UnLCBkZWJvdW5jZWQpO1xuICAgICAqXG4gICAgICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyBkZWJvdW5jZWQgaW52b2NhdGlvbi5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbigncG9wc3RhdGUnLCBkZWJvdW5jZWQuY2FuY2VsKTtcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbGFzdEFyZ3MsXG4gICAgICAgICAgbGFzdFRoaXMsXG4gICAgICAgICAgbWF4V2FpdCxcbiAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgdGltZXJJZCxcbiAgICAgICAgICBsYXN0Q2FsbFRpbWUsXG4gICAgICAgICAgbGFzdEludm9rZVRpbWUgPSAwLFxuICAgICAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgICAgICBtYXhpbmcgPSBmYWxzZSxcbiAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICAgICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIGxlYWRpbmcgPSAhIW9wdGlvbnMubGVhZGluZztcbiAgICAgICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgICAgIG1heFdhaXQgPSBtYXhpbmcgPyBuYXRpdmVNYXgodG9OdW1iZXIob3B0aW9ucy5tYXhXYWl0KSB8fCAwLCB3YWl0KSA6IG1heFdhaXQ7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGludm9rZUZ1bmModGltZSkge1xuICAgICAgICB2YXIgYXJncyA9IGxhc3RBcmdzLFxuICAgICAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgICAgIGxhc3RBcmdzID0gbGFzdFRoaXMgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gdGltZTtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgICAgICAvLyBSZXNldCBhbnkgYG1heFdhaXRgIHRpbWVyLlxuICAgICAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIC8vIEludm9rZSB0aGUgbGVhZGluZyBlZGdlLlxuICAgICAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHJlbWFpbmluZ1dhaXQodGltZSkge1xuICAgICAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICAgICAgdGltZVNpbmNlTGFzdEludm9rZSA9IHRpbWUgLSBsYXN0SW52b2tlVGltZSxcbiAgICAgICAgICAgIHRpbWVXYWl0aW5nID0gd2FpdCAtIHRpbWVTaW5jZUxhc3RDYWxsO1xuXG4gICAgICAgIHJldHVybiBtYXhpbmdcbiAgICAgICAgICA/IG5hdGl2ZU1pbih0aW1lV2FpdGluZywgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpXG4gICAgICAgICAgOiB0aW1lV2FpdGluZztcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICAgICAgdmFyIHRpbWVTaW5jZUxhc3RDYWxsID0gdGltZSAtIGxhc3RDYWxsVGltZSxcbiAgICAgICAgICAgIHRpbWVTaW5jZUxhc3RJbnZva2UgPSB0aW1lIC0gbGFzdEludm9rZVRpbWU7XG5cbiAgICAgICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAgICAgLy8gdHJhaWxpbmcgZWRnZSwgdGhlIHN5c3RlbSB0aW1lIGhhcyBnb25lIGJhY2t3YXJkcyBhbmQgd2UncmUgdHJlYXRpbmdcbiAgICAgICAgLy8gaXQgYXMgdGhlIHRyYWlsaW5nIGVkZ2UsIG9yIHdlJ3ZlIGhpdCB0aGUgYG1heFdhaXRgIGxpbWl0LlxuICAgICAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgICAgICh0aW1lU2luY2VMYXN0Q2FsbCA8IDApIHx8IChtYXhpbmcgJiYgdGltZVNpbmNlTGFzdEludm9rZSA+PSBtYXhXYWl0KSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICAgICAgdmFyIHRpbWUgPSBub3coKTtcbiAgICAgICAgaWYgKHNob3VsZEludm9rZSh0aW1lKSkge1xuICAgICAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzdGFydCB0aGUgdGltZXIuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRyYWlsaW5nRWRnZSh0aW1lKSB7XG4gICAgICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgLy8gT25seSBpbnZva2UgaWYgd2UgaGF2ZSBgbGFzdEFyZ3NgIHdoaWNoIG1lYW5zIGBmdW5jYCBoYXMgYmVlblxuICAgICAgICAvLyBkZWJvdW5jZWQgYXQgbGVhc3Qgb25jZS5cbiAgICAgICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmModGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICBpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RJbnZva2VUaW1lID0gMDtcbiAgICAgICAgbGFzdEFyZ3MgPSBsYXN0Q2FsbFRpbWUgPSBsYXN0VGhpcyA9IHRpbWVySWQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICByZXR1cm4gdGltZXJJZCA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogdHJhaWxpbmdFZGdlKG5vdygpKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gZGVib3VuY2VkKCkge1xuICAgICAgICB2YXIgdGltZSA9IG5vdygpLFxuICAgICAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgICAgICBsYXN0QXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgICAgIGlmIChpc0ludm9raW5nKSB7XG4gICAgICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXhpbmcpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICB0aW1lcklkID0gc2V0VGltZW91dCh0aW1lckV4cGlyZWQsIHdhaXQpO1xuICAgICAgICAgICAgcmV0dXJuIGludm9rZUZ1bmMobGFzdENhbGxUaW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVySWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGRlYm91bmNlZC5jYW5jZWwgPSBjYW5jZWw7XG4gICAgICBkZWJvdW5jZWQuZmx1c2ggPSBmbHVzaDtcbiAgICAgIHJldHVybiBkZWJvdW5jZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmZXJzIGludm9raW5nIHRoZSBgZnVuY2AgdW50aWwgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMgY2xlYXJlZC4gQW55XG4gICAgICogYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRlZmVyLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmVyKGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sICdkZWZlcnJlZCcpO1xuICAgICAqIC8vID0+IExvZ3MgJ2RlZmVycmVkJyBhZnRlciBvbmUgbWlsbGlzZWNvbmQuXG4gICAgICovXG4gICAgdmFyIGRlZmVyID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICAgICAgcmV0dXJuIGJhc2VEZWxheShmdW5jLCAxLCBhcmdzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEludm9rZXMgYGZ1bmNgIGFmdGVyIGB3YWl0YCBtaWxsaXNlY29uZHMuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byBgZnVuY2Agd2hlbiBpdCdzIGludm9rZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBkZWxheS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gd2FpdCBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBkZWxheSBpbnZvY2F0aW9uLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW2FyZ3NdIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHRpbWVyIGlkLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlbGF5KGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHRleHQpO1xuICAgICAqIH0sIDEwMDAsICdsYXRlcicpO1xuICAgICAqIC8vID0+IExvZ3MgJ2xhdGVyJyBhZnRlciBvbmUgc2Vjb25kLlxuICAgICAqL1xuICAgIHZhciBkZWxheSA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBiYXNlRGVsYXkoZnVuYywgdG9OdW1iZXIod2FpdCkgfHwgMCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyByZXZlcnNlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGZsaXAgYXJndW1lbnRzIGZvci5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmbGlwcGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZmxpcHBlZCA9IF8uZmxpcChmdW5jdGlvbigpIHtcbiAgICAgKiAgIHJldHVybiBfLnRvQXJyYXkoYXJndW1lbnRzKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIGZsaXBwZWQoJ2EnLCAnYicsICdjJywgJ2QnKTtcbiAgICAgKiAvLyA9PiBbJ2QnLCAnYycsICdiJywgJ2EnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsaXAoZnVuYykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9GTElQX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gICAgICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICAgICAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgICAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gICAgICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gICAgICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAgICAgKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICAgICAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAgICAgKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gICAgICpcbiAgICAgKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAgICAgKiB2YWx1ZXMob2JqZWN0KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIHZhbHVlcyhvdGhlcik7XG4gICAgICogLy8gPT4gWzMsIDRdXG4gICAgICpcbiAgICAgKiBvYmplY3QuYSA9IDI7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWzEsIDJdXG4gICAgICpcbiAgICAgKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAgICAgKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gICAgICogdmFsdWVzKG9iamVjdCk7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqXG4gICAgICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAgICAgKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICAgICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuICAgICAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICAgICAgcmV0dXJuIG1lbW9pemVkO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxuICAgIG1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG5lZ2F0ZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJlZGljYXRlIGBmdW5jYC4gVGhlXG4gICAgICogYGZ1bmNgIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIGFuZCBhcmd1bWVudHMgb2YgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgcHJlZGljYXRlIHRvIG5lZ2F0ZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBuZWdhdGVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0V2ZW4obikge1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5maWx0ZXIoWzEsIDIsIDMsIDQsIDUsIDZdLCBfLm5lZ2F0ZShpc0V2ZW4pKTtcbiAgICAgKiAvLyA9PiBbMSwgMywgNV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDA6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgY2FzZSAxOiByZXR1cm4gIXByZWRpY2F0ZS5jYWxsKHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgICAgIGNhc2UgMjogcmV0dXJuICFwcmVkaWNhdGUuY2FsbCh0aGlzLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiAhcHJlZGljYXRlLmNhbGwodGhpcywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGlzIHJlc3RyaWN0ZWQgdG8gaW52b2tpbmcgYGZ1bmNgIG9uY2UuIFJlcGVhdCBjYWxsc1xuICAgICAqIHRvIHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBpbnZvY2F0aW9uLiBUaGUgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBhbmQgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmVzdHJpY3RlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGluaXRpYWxpemUgPSBfLm9uY2UoY3JlYXRlQXBwbGljYXRpb24pO1xuICAgICAqIGluaXRpYWxpemUoKTtcbiAgICAgKiBpbml0aWFsaXplKCk7XG4gICAgICogLy8gPT4gYGNyZWF0ZUFwcGxpY2F0aW9uYCBpcyBpbnZva2VkIG9uY2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBvbmNlKGZ1bmMpIHtcbiAgICAgIHJldHVybiBiZWZvcmUoMiwgZnVuYyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnRzIHRyYW5zZm9ybWVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW3RyYW5zZm9ybXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgYXJndW1lbnQgdHJhbnNmb3Jtcy5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gZG91YmxlZChuKSB7XG4gICAgICogICByZXR1cm4gbiAqIDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAgICAgKiAgIHJldHVybiBuICogbjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckFyZ3MoZnVuY3Rpb24oeCwgeSkge1xuICAgICAqICAgcmV0dXJuIFt4LCB5XTtcbiAgICAgKiB9LCBbc3F1YXJlLCBkb3VibGVkXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKDksIDMpO1xuICAgICAqIC8vID0+IFs4MSwgNl1cbiAgICAgKlxuICAgICAqIGZ1bmMoMTAsIDUpO1xuICAgICAqIC8vID0+IFsxMDAsIDEwXVxuICAgICAqL1xuICAgIHZhciBvdmVyQXJncyA9IGNhc3RSZXN0KGZ1bmN0aW9uKGZ1bmMsIHRyYW5zZm9ybXMpIHtcbiAgICAgIHRyYW5zZm9ybXMgPSAodHJhbnNmb3Jtcy5sZW5ndGggPT0gMSAmJiBpc0FycmF5KHRyYW5zZm9ybXNbMF0pKVxuICAgICAgICA/IGFycmF5TWFwKHRyYW5zZm9ybXNbMF0sIGJhc2VVbmFyeShnZXRJdGVyYXRlZSgpKSlcbiAgICAgICAgOiBhcnJheU1hcChiYXNlRmxhdHRlbih0cmFuc2Zvcm1zLCAxKSwgYmFzZVVuYXJ5KGdldEl0ZXJhdGVlKCkpKTtcblxuICAgICAgdmFyIGZ1bmNzTGVuZ3RoID0gdHJhbnNmb3Jtcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMSxcbiAgICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihhcmdzLmxlbmd0aCwgZnVuY3NMZW5ndGgpO1xuXG4gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgICAgYXJnc1tpbmRleF0gPSB0cmFuc2Zvcm1zW2luZGV4XS5jYWxsKHRoaXMsIGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgYXJncyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gICAgICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAgICAgKiBhbHRlciB0aGUgYHRoaXNgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gICAgICogYnVpbGRzLCBtYXkgYmUgdXNlZCBhcyBhIHBsYWNlaG9sZGVyIGZvciBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gICAgICogYXBwbGllZCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4yLjBcbiAgICAgKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBwYXJ0aWFsbHkgYXBwbHkgYXJndW1lbnRzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICAgICAqICAgcmV0dXJuIGdyZWV0aW5nICsgJyAnICsgbmFtZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbChncmVldCwgJ2hlbGxvJyk7XG4gICAgICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICAgICAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICAgICAqXG4gICAgICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gICAgICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICovXG4gICAgdmFyIHBhcnRpYWwgPSBiYXNlUmVzdChmdW5jdGlvbihmdW5jLCBwYXJ0aWFscykge1xuICAgICAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgICAgIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8ucGFydGlhbGAgZXhjZXB0IHRoYXQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzXG4gICAgICogYXJlIGFwcGVuZGVkIHRvIHRoZSBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuXG4gICAgICpcbiAgICAgKiBUaGUgYF8ucGFydGlhbFJpZ2h0LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAgICAgKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAgICAgKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gICAgICogQHBhcmFtIHsuLi4qfSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gICAgICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBncmVldEZyZWQgPSBfLnBhcnRpYWxSaWdodChncmVldCwgJ2ZyZWQnKTtcbiAgICAgKiBncmVldEZyZWQoJ2hpJyk7XG4gICAgICogLy8gPT4gJ2hpIGZyZWQnXG4gICAgICpcbiAgICAgKiAvLyBQYXJ0aWFsbHkgYXBwbGllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAgICAgKiB2YXIgc2F5SGVsbG9UbyA9IF8ucGFydGlhbFJpZ2h0KGdyZWV0LCAnaGVsbG8nLCBfKTtcbiAgICAgKiBzYXlIZWxsb1RvKCdmcmVkJyk7XG4gICAgICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gICAgICovXG4gICAgdmFyIHBhcnRpYWxSaWdodCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgaG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKHBhcnRpYWxzLCBnZXRIb2xkZXIocGFydGlhbFJpZ2h0KSk7XG4gICAgICByZXR1cm4gY3JlYXRlV3JhcChmdW5jLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRywgdW5kZWZpbmVkLCBwYXJ0aWFscywgaG9sZGVycyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGFyZ3VtZW50cyBhcnJhbmdlZCBhY2NvcmRpbmdcbiAgICAgKiB0byB0aGUgc3BlY2lmaWVkIGBpbmRleGVzYCB3aGVyZSB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIGZpcnN0IGluZGV4IGlzXG4gICAgICogcHJvdmlkZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB0aGUgYXJndW1lbnQgdmFsdWUgYXQgdGhlIHNlY29uZCBpbmRleCBpc1xuICAgICAqIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGFuZCBzbyBvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlYXJyYW5nZSBhcmd1bWVudHMgZm9yLlxuICAgICAqIEBwYXJhbSB7Li4uKG51bWJlcnxudW1iZXJbXSl9IGluZGV4ZXMgVGhlIGFycmFuZ2VkIGFyZ3VtZW50IGluZGV4ZXMuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciByZWFyZ2VkID0gXy5yZWFyZyhmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICogICByZXR1cm4gW2EsIGIsIGNdO1xuICAgICAqIH0sIFsyLCAwLCAxXSk7XG4gICAgICpcbiAgICAgKiByZWFyZ2VkKCdiJywgJ2MnLCAnYScpXG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgdmFyIHJlYXJnID0gZmxhdFJlc3QoZnVuY3Rpb24oZnVuYywgaW5kZXhlcykge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9SRUFSR19GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpbmRleGVzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZVxuICAgICAqIGNyZWF0ZWQgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyBmcm9tIGBzdGFydGAgYW5kIGJleW9uZCBwcm92aWRlZCBhc1xuICAgICAqIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZVxuICAgICAqIFtyZXN0IHBhcmFtZXRlcl0oaHR0cHM6Ly9tZG4uaW8vcmVzdF9wYXJhbWV0ZXJzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F5ID0gXy5yZXN0KGZ1bmN0aW9uKHdoYXQsIG5hbWVzKSB7XG4gICAgICogICByZXR1cm4gd2hhdCArICcgJyArIF8uaW5pdGlhbChuYW1lcykuam9pbignLCAnKSArXG4gICAgICogICAgIChfLnNpemUobmFtZXMpID4gMSA/ICcsICYgJyA6ICcnKSArIF8ubGFzdChuYW1lcyk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiBzYXkoJ2hlbGxvJywgJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdChmdW5jLCBzdGFydCkge1xuICAgICAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICAgICAgfVxuICAgICAgc3RhcnQgPSBzdGFydCA9PT0gdW5kZWZpbmVkID8gc3RhcnQgOiB0b0ludGVnZXIoc3RhcnQpO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGVcbiAgICAgKiBjcmVhdGUgZnVuY3Rpb24gYW5kIGFuIGFycmF5IG9mIGFyZ3VtZW50cyBtdWNoIGxpa2VcbiAgICAgKiBbYEZ1bmN0aW9uI2FwcGx5YF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb24gdGhlXG4gICAgICogW3NwcmVhZCBvcGVyYXRvcl0oaHR0cHM6Ly9tZG4uaW8vc3ByZWFkX29wZXJhdG9yKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjIuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHNwcmVhZCBhcmd1bWVudHMgb3Zlci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc3ByZWFkLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgc2F5ID0gXy5zcHJlYWQoZnVuY3Rpb24od2hvLCB3aGF0KSB7XG4gICAgICogICByZXR1cm4gd2hvICsgJyBzYXlzICcgKyB3aGF0O1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogc2F5KFsnZnJlZCcsICdoZWxsbyddKTtcbiAgICAgKiAvLyA9PiAnZnJlZCBzYXlzIGhlbGxvJ1xuICAgICAqXG4gICAgICogdmFyIG51bWJlcnMgPSBQcm9taXNlLmFsbChbXG4gICAgICogICBQcm9taXNlLnJlc29sdmUoNDApLFxuICAgICAqICAgUHJvbWlzZS5yZXNvbHZlKDM2KVxuICAgICAqIF0pO1xuICAgICAqXG4gICAgICogbnVtYmVycy50aGVuKF8uc3ByZWFkKGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgKiAgIHJldHVybiB4ICsgeTtcbiAgICAgKiB9KSk7XG4gICAgICogLy8gPT4gYSBQcm9taXNlIG9mIDc2XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3ByZWFkKGZ1bmMsIHN0YXJ0KSB7XG4gICAgICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICB9XG4gICAgICBzdGFydCA9IHN0YXJ0ID09IG51bGwgPyAwIDogbmF0aXZlTWF4KHRvSW50ZWdlcihzdGFydCksIDApO1xuICAgICAgcmV0dXJuIGJhc2VSZXN0KGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gYXJnc1tzdGFydF0sXG4gICAgICAgICAgICBvdGhlckFyZ3MgPSBjYXN0U2xpY2UoYXJncywgMCwgc3RhcnQpO1xuXG4gICAgICAgIGlmIChhcnJheSkge1xuICAgICAgICAgIGFycmF5UHVzaChvdGhlckFyZ3MsIGFycmF5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwbHkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdGhhdCBvbmx5IGludm9rZXMgYGZ1bmNgIGF0IG1vc3Qgb25jZSBwZXJcbiAgICAgKiBldmVyeSBgd2FpdGAgbWlsbGlzZWNvbmRzLiBUaGUgdGhyb3R0bGVkIGZ1bmN0aW9uIGNvbWVzIHdpdGggYSBgY2FuY2VsYFxuICAgICAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAgICAgKiBpbW1lZGlhdGVseSBpbnZva2UgdGhlbS4gUHJvdmlkZSBgb3B0aW9uc2AgdG8gaW5kaWNhdGUgd2hldGhlciBgZnVuY2BcbiAgICAgKiBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgbGVhZGluZyBhbmQvb3IgdHJhaWxpbmcgZWRnZSBvZiB0aGUgYHdhaXRgXG4gICAgICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICAgICAqIHRocm90dGxlZCBmdW5jdGlvbi4gU3Vic2VxdWVudCBjYWxscyB0byB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHJldHVybiB0aGVcbiAgICAgKiByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgIGludm9jYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSWYgYGxlYWRpbmdgIGFuZCBgdHJhaWxpbmdgIG9wdGlvbnMgYXJlIGB0cnVlYCwgYGZ1bmNgIGlzXG4gICAgICogaW52b2tlZCBvbiB0aGUgdHJhaWxpbmcgZWRnZSBvZiB0aGUgdGltZW91dCBvbmx5IGlmIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb25cbiAgICAgKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gICAgICpcbiAgICAgKiBJZiBgd2FpdGAgaXMgYDBgIGFuZCBgbGVhZGluZ2AgaXMgYGZhbHNlYCwgYGZ1bmNgIGludm9jYXRpb24gaXMgZGVmZXJyZWRcbiAgICAgKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gICAgICpcbiAgICAgKiBTZWUgW0RhdmlkIENvcmJhY2hvJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9kZWJvdW5jaW5nLXRocm90dGxpbmctZXhwbGFpbmVkLWV4YW1wbGVzLylcbiAgICAgKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFt3YWl0PTBdIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIGludm9jYXRpb25zIHRvLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy50cmFpbGluZz10cnVlXVxuICAgICAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHRocm90dGxlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogLy8gQXZvaWQgZXhjZXNzaXZlbHkgdXBkYXRpbmcgdGhlIHBvc2l0aW9uIHdoaWxlIHNjcm9sbGluZy5cbiAgICAgKiBqUXVlcnkod2luZG93KS5vbignc2Nyb2xsJywgXy50aHJvdHRsZSh1cGRhdGVQb3NpdGlvbiwgMTAwKSk7XG4gICAgICpcbiAgICAgKiAvLyBJbnZva2UgYHJlbmV3VG9rZW5gIHdoZW4gdGhlIGNsaWNrIGV2ZW50IGlzIGZpcmVkLCBidXQgbm90IG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IDUgbWludXRlcy5cbiAgICAgKiB2YXIgdGhyb3R0bGVkID0gXy50aHJvdHRsZShyZW5ld1Rva2VuLCAzMDAwMDAsIHsgJ3RyYWlsaW5nJzogZmFsc2UgfSk7XG4gICAgICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gICAgICpcbiAgICAgKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIHRocm90dGxlZCBpbnZvY2F0aW9uLlxuICAgICAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgICAgICB0cmFpbGluZyA9IHRydWU7XG5cbiAgICAgIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgICAgIHRyYWlsaW5nID0gJ3RyYWlsaW5nJyBpbiBvcHRpb25zID8gISFvcHRpb25zLnRyYWlsaW5nIDogdHJhaWxpbmc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICAgICAnbGVhZGluZyc6IGxlYWRpbmcsXG4gICAgICAgICdtYXhXYWl0Jzogd2FpdCxcbiAgICAgICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdXAgdG8gb25lIGFyZ3VtZW50LCBpZ25vcmluZyBhbnlcbiAgICAgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzgnLCAnMTAnXSwgXy51bmFyeShwYXJzZUludCkpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmFyeShmdW5jKSB7XG4gICAgICByZXR1cm4gYXJ5KGZ1bmMsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzIGB2YWx1ZWAgdG8gYHdyYXBwZXJgIGFzIGl0cyBmaXJzdFxuICAgICAqIGFyZ3VtZW50LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGFyZSBhcHBlbmRlZFxuICAgICAqIHRvIHRob3NlIHByb3ZpZGVkIHRvIHRoZSBgd3JhcHBlcmAuIFRoZSB3cmFwcGVyIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgXG4gICAgICogYmluZGluZyBvZiB0aGUgY3JlYXRlZCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3dyYXBwZXI9aWRlbnRpdHldIFRoZSB3cmFwcGVyIGZ1bmN0aW9uLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgcCA9IF8ud3JhcChfLmVzY2FwZSwgZnVuY3Rpb24oZnVuYywgdGV4dCkge1xuICAgICAqICAgcmV0dXJuICc8cD4nICsgZnVuYyh0ZXh0KSArICc8L3A+JztcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHAoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJzxwPmZyZWQsIGJhcm5leSwgJmFtcDsgcGViYmxlczwvcD4nXG4gICAgICovXG4gICAgZnVuY3Rpb24gd3JhcCh2YWx1ZSwgd3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhcnRpYWwoY2FzdEZ1bmN0aW9uKHdyYXBwZXIpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQ2FzdHMgYHZhbHVlYCBhcyBhbiBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC40LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhc3RBcnJheSgxKTtcbiAgICAgKiAvLyA9PiBbMV1cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KHsgJ2EnOiAxIH0pO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSB9XVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IFsnYWJjJ11cbiAgICAgKlxuICAgICAqIF8uY2FzdEFycmF5KG51bGwpO1xuICAgICAqIC8vID0+IFtudWxsXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkodW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBbdW5kZWZpbmVkXVxuICAgICAqXG4gICAgICogXy5jYXN0QXJyYXkoKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWzEsIDIsIDNdO1xuICAgICAqIGNvbnNvbGUubG9nKF8uY2FzdEFycmF5KGFycmF5KSA9PT0gYXJyYXkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjYXN0QXJyYXkoKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzBdO1xuICAgICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzaGFsbG93IGNsb25lIG9mIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGVcbiAgICAgKiBbc3RydWN0dXJlZCBjbG9uZSBhbGdvcml0aG1dKGh0dHBzOi8vbWRuLmlvL1N0cnVjdHVyZWRfY2xvbmVfYWxnb3JpdGhtKVxuICAgICAqIGFuZCBzdXBwb3J0cyBjbG9uaW5nIGFycmF5cywgYXJyYXkgYnVmZmVycywgYm9vbGVhbnMsIGRhdGUgb2JqZWN0cywgbWFwcyxcbiAgICAgKiBudW1iZXJzLCBgT2JqZWN0YCBvYmplY3RzLCByZWdleGVzLCBzZXRzLCBzdHJpbmdzLCBzeW1ib2xzLCBhbmQgdHlwZWRcbiAgICAgKiBhcnJheXMuIFRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGBhcmd1bWVudHNgIG9iamVjdHMgYXJlIGNsb25lZFxuICAgICAqIGFzIHBsYWluIG9iamVjdHMuIEFuIGVtcHR5IG9iamVjdCBpcyByZXR1cm5lZCBmb3IgdW5jbG9uZWFibGUgdmFsdWVzIHN1Y2hcbiAgICAgKiBhcyBlcnJvciBvYmplY3RzLCBmdW5jdGlvbnMsIERPTSBub2RlcywgYW5kIFdlYWtNYXBzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZURlZXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICpcbiAgICAgKiB2YXIgc2hhbGxvdyA9IF8uY2xvbmUob2JqZWN0cyk7XG4gICAgICogY29uc29sZS5sb2coc2hhbGxvd1swXSA9PT0gb2JqZWN0c1swXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lKHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBwcm9kdWNlIHRoZSBjbG9uZWQgdmFsdWUuIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgLFxuICAgICAqIGNsb25pbmcgaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoXG4gICAgICogdXAgdG8gZm91ciBhcmd1bWVudHM7ICh2YWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgc3RhY2tdKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2xvbmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgY2xvbmVkIHZhbHVlLlxuICAgICAqIEBzZWUgXy5jbG9uZURlZXBXaXRoXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIodmFsdWUpIHtcbiAgICAgKiAgIGlmIChfLmlzRWxlbWVudCh2YWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHZhbHVlLmNsb25lTm9kZShmYWxzZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGVsID0gXy5jbG9uZVdpdGgoZG9jdW1lbnQuYm9keSwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhlbCA9PT0gZG9jdW1lbnQuYm9keSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKiBjb25zb2xlLmxvZyhlbC5ub2RlTmFtZSk7XG4gICAgICogLy8gPT4gJ0JPRFknXG4gICAgICogY29uc29sZS5sb2coZWwuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAqIC8vID0+IDBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5jbG9uZWAgZXhjZXB0IHRoYXQgaXQgcmVjdXJzaXZlbHkgY2xvbmVzIGB2YWx1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJlY3Vyc2l2ZWx5IGNsb25lLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAgICAgKiBAc2VlIF8uY2xvbmVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnYSc6IDEgfSwgeyAnYic6IDIgfV07XG4gICAgICpcbiAgICAgKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICAgICAqIGNvbnNvbGUubG9nKGRlZXBbMF0gPT09IG9iamVjdHNbMF0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xvbmVEZWVwKHZhbHVlKSB7XG4gICAgICByZXR1cm4gYmFzZUNsb25lKHZhbHVlLCBDTE9ORV9ERUVQX0ZMQUcgfCBDTE9ORV9TWU1CT0xTX0ZMQUcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVXaXRoYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBjbG9uZXMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmVjdXJzaXZlbHkgY2xvbmUuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY2xvbmluZy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZGVlcCBjbG9uZWQgdmFsdWUuXG4gICAgICogQHNlZSBfLmNsb25lV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKHZhbHVlKSB7XG4gICAgICogICBpZiAoXy5pc0VsZW1lbnQodmFsdWUpKSB7XG4gICAgICogICAgIHJldHVybiB2YWx1ZS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGVsID0gXy5jbG9uZURlZXBXaXRoKGRvY3VtZW50LmJvZHksIGN1c3RvbWl6ZXIpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2coZWwgPT09IGRvY3VtZW50LmJvZHkpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICogY29uc29sZS5sb2coZWwubm9kZU5hbWUpO1xuICAgICAqIC8vID0+ICdCT0RZJ1xuICAgICAqIGNvbnNvbGUubG9nKGVsLmNoaWxkTm9kZXMubGVuZ3RoKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNsb25lRGVlcFdpdGgodmFsdWUsIGN1c3RvbWl6ZXIpIHtcbiAgICAgIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBiYXNlQ2xvbmUodmFsdWUsIENMT05FX0RFRVBfRkxBRyB8IENMT05FX1NZTUJPTFNfRkxBRywgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBvYmplY3RgIGNvbmZvcm1zIHRvIGBzb3VyY2VgIGJ5IGludm9raW5nIHRoZSBwcmVkaWNhdGVcbiAgICAgKiBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gYF8uY29uZm9ybXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjE0LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGNvbmZvcm1zLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gICAgICpcbiAgICAgKiBfLmNvbmZvcm1zVG8ob2JqZWN0LCB7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5jb25mb3Jtc1RvKG9iamVjdCwgeyAnYic6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPiAyOyB9IH0pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZm9ybXNUbyhvYmplY3QsIHNvdXJjZSkge1xuICAgICAgcmV0dXJuIHNvdXJjZSA9PSBudWxsIHx8IGJhc2VDb25mb3Jtc1RvKG9iamVjdCwgc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGFcbiAgICAgKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICAgICAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZXEoJ2EnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uZXEoTmFOLCBOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGdyZWF0ZXIgdGhhbiBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ubHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndCgzLCAxKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmd0KDMsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmd0KDEsIDMpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGd0ID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihiYXNlR3QpO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBvdGhlcmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy45LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG9cbiAgICAgKiAgYG90aGVyYCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBzZWUgXy5sdGVcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5ndGUoMywgMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndGUoMywgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5ndGUoMSwgMyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgZ3RlID0gY3JlYXRlUmVsYXRpb25hbE9wZXJhdGlvbihmdW5jdGlvbih2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA+PSBvdGhlcjtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhbiBgYXJndW1lbnRzYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcbiAgICAgICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5QnVmZmVyYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5IGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5QnVmZmVyKDIpKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlCdWZmZXIobmV3IEFycmF5KDIpKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc0FycmF5QnVmZmVyID0gbm9kZUlzQXJyYXlCdWZmZXIgPyBiYXNlVW5hcnkobm9kZUlzQXJyYXlCdWZmZXIpIDogYmFzZUlzQXJyYXlCdWZmZXI7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gICAgICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICAgICAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNBcnJheUxpa2VgIGV4Y2VwdCB0aGF0IGl0IGFsc28gY2hlY2tzIGlmIGB2YWx1ZWBcbiAgICAgKiBpcyBhbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNBcnJheUxpa2VPYmplY3QoJ2FiYycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzQXJyYXlMaWtlT2JqZWN0KF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBib29sZWFuIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYm9vbGVhbiwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzQm9vbGVhbihmYWxzZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Jvb2xlYW4obnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Jvb2xlYW4odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYm9vbFRhZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYERhdGVgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBkYXRlIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRGF0ZShuZXcgRGF0ZSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0RhdGUoJ01vbiBBcHJpbCAyMyAyMDEyJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICB2YXIgaXNEYXRlID0gbm9kZUlzRGF0ZSA/IGJhc2VVbmFyeShub2RlSXNEYXRlKSA6IGJhc2VJc0RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBET00gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBET00gZWxlbWVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRWxlbWVudChkb2N1bWVudC5ib2R5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRWxlbWVudCgnPGJvZHk+Jyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIHZhbHVlLm5vZGVUeXBlID09PSAxICYmICFpc1BsYWluT2JqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICAgICAqXG4gICAgICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gICAgICogcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICAgICAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAgICAgKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSh0cnVlKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzRW1wdHkoMSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gICAgICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gICAgICogZXF1aXZhbGVudC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAgICAgKiBkYXRlIG9iamVjdHMsIGVycm9yIG9iamVjdHMsIG1hcHMsIG51bWJlcnMsIGBPYmplY3RgIG9iamVjdHMsIHJlZ2V4ZXMsXG4gICAgICogc2V0cywgc3RyaW5ncywgc3ltYm9scywgYW5kIHR5cGVkIGFycmF5cy4gYE9iamVjdGAgb2JqZWN0cyBhcmUgY29tcGFyZWRcbiAgICAgKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAgICAgKiBub2RlcyBhcmUgY29tcGFyZWQgYnkgc3RyaWN0IGVxdWFsaXR5LCBpLmUuIGA9PT1gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAgICAgKlxuICAgICAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBvYmplY3QgPT09IG90aGVyO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgICAgIHJldHVybiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcbiAgICAgKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXG4gICAgICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XG4gICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHRydWU7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XG4gICAgICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XG4gICAgICpcbiAgICAgKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIHVuZGVmaW5lZCwgY3VzdG9taXplcikgOiAhIXJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBgRXJyb3JgLCBgRXZhbEVycm9yYCwgYFJhbmdlRXJyb3JgLCBgUmVmZXJlbmNlRXJyb3JgLFxuICAgICAqIGBTeW50YXhFcnJvcmAsIGBUeXBlRXJyb3JgLCBvciBgVVJJRXJyb3JgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gZXJyb3Igb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNFcnJvcihuZXcgRXJyb3IpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNFcnJvcihFcnJvcik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Vycm9yKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICAgICAgcmV0dXJuIHRhZyA9PSBlcnJvclRhZyB8fCB0YWcgPT0gZG9tRXhjVGFnIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUubWVzc2FnZSA9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWUubmFtZSA9PSAnc3RyaW5nJyAmJiAhaXNQbGFpbk9iamVjdCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIHByaW1pdGl2ZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc0Zpbml0ZWBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc0Zpbml0ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZmluaXRlIG51bWJlciwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzRmluaXRlKDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0Zpbml0ZShJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNGaW5pdGUoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRmluaXRlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmIG5hdGl2ZUlzRmluaXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0Z1bmN0aW9uKF8pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgICAgIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICAgICAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICAgICAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BOdW1iZXIuaXNJbnRlZ2VyYF0oaHR0cHM6Ly9tZG4uaW8vTnVtYmVyL2lzSW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGludGVnZXIsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0ludGVnZXIoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJiB2YWx1ZSA9PSB0b0ludGVnZXIodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNMZW5ndGgoJzMnKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAgICAgKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gICAgICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdCh7fSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0KG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAgICAgKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjMuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBtYXAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc01hcChuZXcgTWFwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBpc01hcCA9IG5vZGVJc01hcCA/IGJhc2VVbmFyeShub2RlSXNNYXApIDogYmFzZUlzTWFwO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYSBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIGBvYmplY3RgIGFuZCBgc291cmNlYCB0b1xuICAgICAqIGRldGVybWluZSBpZiBgb2JqZWN0YCBjb250YWlucyBlcXVpdmFsZW50IHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGBfLm1hdGNoZXNgIHdoZW4gYHNvdXJjZWAgaXNcbiAgICAgKiBwYXJ0aWFsbHkgYXBwbGllZC5cbiAgICAgKlxuICAgICAqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0IGBzb3VyY2VgXG4gICAgICogdmFsdWVzIGFnYWluc3QgYW55IGFycmF5IG9yIG9iamVjdCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LiBTZWUgYF8uaXNFcXVhbGBcbiAgICAgKiBmb3IgYSBsaXN0IG9mIHN1cHBvcnRlZCB2YWx1ZSBjb21wYXJpc29ucy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICAgICAqXG4gICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDIgfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc01hdGNoKG9iamVjdCwgeyAnYic6IDEgfSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hdGNoKG9iamVjdCwgc291cmNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIGdldE1hdGNoRGF0YShzb3VyY2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzTWF0Y2hgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXG4gICAgICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXG4gICAgICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBmaXZlXG4gICAgICogYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBpbmRleHxrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XG4gICAgICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhzcmNWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIHRydWU7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2dyZWV0aW5nJzogJ2hlbGxvJyB9O1xuICAgICAqIHZhciBzb3VyY2UgPSB7ICdncmVldGluZyc6ICdoaScgfTtcbiAgICAgKlxuICAgICAqIF8uaXNNYXRjaFdpdGgob2JqZWN0LCBzb3VyY2UsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc01hdGNoV2l0aChvYmplY3QsIHNvdXJjZSwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBnZXRNYXRjaERhdGEoc291cmNlKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYE5hTmAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgYmFzZWQgb25cbiAgICAgKiBbYE51bWJlci5pc05hTmBdKGh0dHBzOi8vbWRuLmlvL051bWJlci9pc05hTikgYW5kIGlzIG5vdCB0aGUgc2FtZSBhc1xuICAgICAqIGdsb2JhbCBbYGlzTmFOYF0oaHR0cHM6Ly9tZG4uaW8vaXNOYU4pIHdoaWNoIHJldHVybnMgYHRydWVgIGZvclxuICAgICAqIGB1bmRlZmluZWRgIGFuZCBvdGhlciBub24tbnVtYmVyIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05hTihOYU4pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4obmV3IE51bWJlcihOYU4pKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBpc05hTih1bmRlZmluZWQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOYU4odW5kZWZpbmVkKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzTmFOKHZhbHVlKSB7XG4gICAgICAvLyBBbiBgTmFOYCBwcmltaXRpdmUgaXMgdGhlIG9ubHkgdmFsdWUgdGhhdCBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLlxuICAgICAgLy8gUGVyZm9ybSB0aGUgYHRvU3RyaW5nVGFnYCBjaGVjayBmaXJzdCB0byBhdm9pZCBlcnJvcnMgd2l0aCBzb21lXG4gICAgICAvLyBBY3RpdmVYIG9iamVjdHMgaW4gSUUuXG4gICAgICByZXR1cm4gaXNOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9ICt2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByaXN0aW5lIG5hdGl2ZSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBjYW4ndCByZWxpYWJseSBkZXRlY3QgbmF0aXZlIGZ1bmN0aW9ucyBpbiB0aGUgcHJlc2VuY2VcbiAgICAgKiBvZiB0aGUgY29yZS1qcyBwYWNrYWdlIGJlY2F1c2UgY29yZS1qcyBjaXJjdW12ZW50cyB0aGlzIGtpbmQgb2YgZGV0ZWN0aW9uLlxuICAgICAqIERlc3BpdGUgbXVsdGlwbGUgcmVxdWVzdHMsIHRoZSBjb3JlLWpzIG1haW50YWluZXIgaGFzIG1hZGUgaXQgY2xlYXI6IGFueVxuICAgICAqIGF0dGVtcHQgdG8gZml4IHRoZSBkZXRlY3Rpb24gd2lsbCBiZSBvYnN0cnVjdGVkLiBBcyBhIHJlc3VsdCwgd2UncmUgbGVmdFxuICAgICAqIHdpdGggbGl0dGxlIGNob2ljZSBidXQgdG8gdGhyb3cgYW4gZXJyb3IuIFVuZm9ydHVuYXRlbHksIHRoaXMgYWxzbyBhZmZlY3RzXG4gICAgICogcGFja2FnZXMsIGxpa2UgW2JhYmVsLXBvbHlmaWxsXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iYWJlbC1wb2x5ZmlsbCksXG4gICAgICogd2hpY2ggcmVseSBvbiBjb3JlLWpzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAgICAgKiAgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmF0aXZlKF8pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOYXRpdmUodmFsdWUpIHtcbiAgICAgIGlmIChpc01hc2thYmxlKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09SRV9FUlJPUl9URVhUKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGBudWxsYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYG51bGxgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKG51bGwpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNOdWxsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG51bGxpc2gsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc05pbChudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTmlsKHZvaWQgMCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc05pbChOYU4pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgTnVtYmVyYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRvIGV4Y2x1ZGUgYEluZmluaXR5YCwgYC1JbmZpbml0eWAsIGFuZCBgTmFOYCwgd2hpY2ggYXJlXG4gICAgICogY2xhc3NpZmllZCBhcyBudW1iZXJzLCB1c2UgdGhlIGBfLmlzRmluaXRlYCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbnVtYmVyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNOdW1iZXIoMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc051bWJlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzTnVtYmVyKCczJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc051bWJlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBudW1iZXJUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcbiAgICAgKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC44LjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gICAgICBpZiAocHJvdG8gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcbiAgICAgICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFJlZ0V4cGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHNhZmUgaW50ZWdlci4gQW4gaW50ZWdlciBpcyBzYWZlIGlmIGl0J3MgYW4gSUVFRS03NTRcbiAgICAgKiBkb3VibGUgcHJlY2lzaW9uIG51bWJlciB3aGljaCBpc24ndCB0aGUgcmVzdWx0IG9mIGEgcm91bmRlZCB1bnNhZmUgaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgTnVtYmVyLmlzU2FmZUludGVnZXJgXShodHRwczovL21kbi5pby9OdW1iZXIvaXNTYWZlSW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2FmZSBpbnRlZ2VyLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcigzKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIF8uaXNTYWZlSW50ZWdlcignMycpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNTYWZlSW50ZWdlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gLU1BWF9TQUZFX0lOVEVHRVIgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHNldCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU2V0KG5ldyBTZXQpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaXNTZXQobmV3IFdlYWtTZXQpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzU2V0ID0gbm9kZUlzU2V0ID8gYmFzZVVuYXJ5KG5vZGVJc1NldCkgOiBiYXNlSXNTZXQ7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5pc1N0cmluZygnYWJjJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1N0cmluZygxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgICAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYHVuZGVmaW5lZGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGB1bmRlZmluZWRgLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNVbmRlZmluZWQodm9pZCAwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzVW5kZWZpbmVkKG51bGwpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha01hcGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgbWFwLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrTWFwKG5ldyBXZWFrTWFwKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha01hcChuZXcgTWFwKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzV2Vha01hcCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSB3ZWFrTWFwVGFnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgV2Vha1NldGAgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMy4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHdlYWsgc2V0LCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uaXNXZWFrU2V0KG5ldyBXZWFrU2V0KTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmlzV2Vha1NldChuZXcgU2V0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzV2Vha1NldCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gd2Vha1NldFRhZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsZXNzIHRoYW4gYG90aGVyYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjkuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAgICAgKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLFxuICAgICAqICBlbHNlIGBmYWxzZWAuXG4gICAgICogQHNlZSBfLmd0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHQoMSwgMyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5sdCgzLCAzKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5sdCgzLCAxKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBsdCA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oYmFzZUx0KTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgb3RoZXJgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuOS4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICAgICAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAgICogIGBvdGhlcmAsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8uZ3RlXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubHRlKDEsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDMpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8ubHRlKDMsIDEpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgdmFyIGx0ZSA9IGNyZWF0ZVJlbGF0aW9uYWxPcGVyYXRpb24oZnVuY3Rpb24odmFsdWUsIG90aGVyKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPD0gb3RoZXI7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIF8udG9BcnJheSgnYWJjJyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICpcbiAgICAgKiBfLnRvQXJyYXkoMSk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKlxuICAgICAqIF8udG9BcnJheShudWxsKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHN5bUl0ZXJhdG9yICYmIHZhbHVlW3N5bUl0ZXJhdG9yXSkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpLFxuICAgICAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEyLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZSgzLjIpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqXG4gICAgICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAgICAgKiAvLyA9PiA1ZS0zMjRcbiAgICAgKlxuICAgICAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gICAgICpcbiAgICAgKiBfLnRvRmluaXRlKCczLjInKTtcbiAgICAgKiAvLyA9PiAzLjJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gICAgICB9XG4gICAgICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgICAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgICAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICAgICAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9JbnRlZ2VyKDMuMik7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICAgICAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gICAgICpcbiAgICAgKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyIHN1aXRhYmxlIGZvciB1c2UgYXMgdGhlIGxlbmd0aCBvZiBhblxuICAgICAqIGFycmF5LWxpa2Ugb2JqZWN0LlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGJhc2VkIG9uXG4gICAgICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBMYW5nXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xlbmd0aCgzLjIpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKlxuICAgICAqIF8udG9MZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b0xlbmd0aChJbmZpbml0eSk7XG4gICAgICogLy8gPT4gNDI5NDk2NzI5NVxuICAgICAqXG4gICAgICogXy50b0xlbmd0aCgnMy4yJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTGVuZ3RoKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgMCwgTUFYX0FSUkFZX0xFTkdUSCkgOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgTGFuZ1xuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKDMuMik7XG4gICAgICogLy8gPT4gMy4yXG4gICAgICpcbiAgICAgKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICAgICAqIC8vID0+IDVlLTMyNFxuICAgICAqXG4gICAgICogXy50b051bWJlcihJbmZpbml0eSk7XG4gICAgICogLy8gPT4gSW5maW5pdHlcbiAgICAgKlxuICAgICAqIF8udG9OdW1iZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDMuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE5BTjtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICAgICAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgICAgIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgICAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICAgICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xuICAgICAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqXG4gICAgICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICAgIHJldHVybiBjb3B5T2JqZWN0KHZhbHVlLCBrZXlzSW4odmFsdWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc2FmZSBpbnRlZ2VyLiBBIHNhZmUgaW50ZWdlciBjYW4gYmUgY29tcGFyZWQgYW5kXG4gICAgICogcmVwcmVzZW50ZWQgY29ycmVjdGx5LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoMy4yKTtcbiAgICAgKiAvLyA9PiAzXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gICAgICogLy8gPT4gMFxuICAgICAqXG4gICAgICogXy50b1NhZmVJbnRlZ2VyKEluZmluaXR5KTtcbiAgICAgKiAvLyA9PiA5MDA3MTk5MjU0NzQwOTkxXG4gICAgICpcbiAgICAgKiBfLnRvU2FmZUludGVnZXIoJzMuMicpO1xuICAgICAqIC8vID0+IDNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0b1NhZmVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgPyBiYXNlQ2xhbXAodG9JbnRlZ2VyKHZhbHVlKSwgLU1BWF9TQUZFX0lOVEVHRVIsIE1BWF9TQUZFX0lOVEVHRVIpXG4gICAgICAgIDogKHZhbHVlID09PSAwID8gdmFsdWUgOiAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICAgICAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IExhbmdcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udG9TdHJpbmcobnVsbCk7XG4gICAgICogLy8gPT4gJydcbiAgICAgKlxuICAgICAqIF8udG9TdHJpbmcoLTApO1xuICAgICAqIC8vID0+ICctMCdcbiAgICAgKlxuICAgICAqIF8udG9TdHJpbmcoWzEsIDIsIDNdKTtcbiAgICAgKiAvLyA9PiAnMSwyLDMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEFzc2lnbnMgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgdG8gdGhlXG4gICAgICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgICogU3Vic2VxdWVudCBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAgYW5kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAgICAgKiBbYE9iamVjdC5hc3NpZ25gXShodHRwczovL21kbi5pby9PYmplY3QvYXNzaWduKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAwLjEwLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmFzc2lnbkluXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQmFyKCkge1xuICAgICAqICAgdGhpcy5jID0gMztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmIgPSAyO1xuICAgICAqIEJhci5wcm90b3R5cGUuZCA9IDQ7XG4gICAgICpcbiAgICAgKiBfLmFzc2lnbih7ICdhJzogMCB9LCBuZXcgRm9vLCBuZXcgQmFyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UpIHtcbiAgICAgIGlmIChpc1Byb3RvdHlwZShzb3VyY2UpIHx8IGlzQXJyYXlMaWtlKHNvdXJjZSkpIHtcbiAgICAgICAgY29weU9iamVjdChzb3VyY2UsIGtleXMoc291cmNlKSwgb2JqZWN0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgaXRlcmF0ZXMgb3ZlciBvd24gYW5kXG4gICAgICogaW5oZXJpdGVkIHNvdXJjZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAYWxpYXMgZXh0ZW5kXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBCYXIoKSB7XG4gICAgICogICB0aGlzLmMgPSAzO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYiA9IDI7XG4gICAgICogQmFyLnByb3RvdHlwZS5kID0gNDtcbiAgICAgKlxuICAgICAqIF8uYXNzaWduSW4oeyAnYSc6IDAgfSwgbmV3IEZvbywgbmV3IEJhcik7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzLCAnZCc6IDQgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ25JbiA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlKSB7XG4gICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbkluYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYFxuICAgICAqIHdoaWNoIGlzIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgYXNzaWduZWQgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJuc1xuICAgICAqIGB1bmRlZmluZWRgLCBhc3NpZ25tZW50IGlzIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgXG4gICAgICogaXMgaW52b2tlZCB3aXRoIGZpdmUgYXJndW1lbnRzOiAob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGV4dGVuZFdpdGhcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBzb3VyY2VzIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uYXNzaWduV2l0aFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgcmV0dXJuIF8uaXNVbmRlZmluZWQob2JqVmFsdWUpID8gc3JjVmFsdWUgOiBvYmpWYWx1ZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiB2YXIgZGVmYXVsdHMgPSBfLnBhcnRpYWxSaWdodChfLmFzc2lnbkluV2l0aCwgY3VzdG9taXplcik7XG4gICAgICpcbiAgICAgKiBkZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgYXNzaWduSW5XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5c0luKHNvdXJjZSksIG9iamVjdCwgY3VzdG9taXplcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmFzc2lnbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmBcbiAgICAgKiB3aGljaCBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIGFzc2lnbmVkIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnNcbiAgICAgKiBgdW5kZWZpbmVkYCwgYXNzaWdubWVudCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBmaXZlIGFyZ3VtZW50czogKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHsuLi5PYmplY3R9IHNvdXJjZXMgVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5hc3NpZ25JbldpdGhcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUpIHtcbiAgICAgKiAgIHJldHVybiBfLmlzVW5kZWZpbmVkKG9ialZhbHVlKSA/IHNyY1ZhbHVlIDogb2JqVmFsdWU7XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIGRlZmF1bHRzID0gXy5wYXJ0aWFsUmlnaHQoXy5hc3NpZ25XaXRoLCBjdXN0b21pemVyKTtcbiAgICAgKlxuICAgICAqIGRlZmF1bHRzKHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2EnOiAzIH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICAgICAqL1xuICAgIHZhciBhc3NpZ25XaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gICAgICBjb3B5T2JqZWN0KHNvdXJjZSwga2V5cyhzb3VyY2UpLCBvYmplY3QsIGN1c3RvbWl6ZXIpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBgcGF0aHNgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDEuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHBpY2tlZCB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH0sIDRdIH07XG4gICAgICpcbiAgICAgKiBfLmF0KG9iamVjdCwgWydhWzBdLmIuYycsICdhWzFdJ10pO1xuICAgICAqIC8vID0+IFszLCA0XVxuICAgICAqL1xuICAgIHZhciBhdCA9IGZsYXRSZXN0KGJhc2VBdCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGBwcm90b3R5cGVgIG9iamVjdC4gSWYgYVxuICAgICAqIGBwcm9wZXJ0aWVzYCBvYmplY3QgaXMgZ2l2ZW4sIGl0cyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllc1xuICAgICAqIGFyZSBhc3NpZ25lZCB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IHByb3RvdHlwZSBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXNdIFRoZSBwcm9wZXJ0aWVzIHRvIGFzc2lnbiB0byB0aGUgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIFNoYXBlKCkge1xuICAgICAqICAgdGhpcy54ID0gMDtcbiAgICAgKiAgIHRoaXMueSA9IDA7XG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gQ2lyY2xlKCkge1xuICAgICAqICAgU2hhcGUuY2FsbCh0aGlzKTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBDaXJjbGUucHJvdG90eXBlID0gXy5jcmVhdGUoU2hhcGUucHJvdG90eXBlLCB7XG4gICAgICogICAnY29uc3RydWN0b3InOiBDaXJjbGVcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIHZhciBjaXJjbGUgPSBuZXcgQ2lyY2xlO1xuICAgICAqIGNpcmNsZSBpbnN0YW5jZW9mIENpcmNsZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjaXJjbGUgaW5zdGFuY2VvZiBTaGFwZTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlKHByb3RvdHlwZSwgcHJvcGVydGllcykge1xuICAgICAgdmFyIHJlc3VsdCA9IGJhc2VDcmVhdGUocHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzID09IG51bGwgPyByZXN1bHQgOiBiYXNlQXNzaWduKHJlc3VsdCwgcHJvcGVydGllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXNzaWducyBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZVxuICAgICAqIG9iamVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCBmb3IgYWxsIGRlc3RpbmF0aW9uIHByb3BlcnRpZXMgdGhhdFxuICAgICAqIHJlc29sdmUgdG8gYHVuZGVmaW5lZGAuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC5cbiAgICAgKiBPbmNlIGEgcHJvcGVydHkgaXMgc2V0LCBhZGRpdGlvbmFsIHZhbHVlcyBvZiB0aGUgc2FtZSBwcm9wZXJ0eSBhcmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5kZWZhdWx0c0RlZXBcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0cyh7ICdhJzogMSB9LCB7ICdiJzogMiB9LCB7ICdhJzogMyB9KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKi9cbiAgICB2YXIgZGVmYXVsdHMgPSBiYXNlUmVzdChmdW5jdGlvbihvYmplY3QsIHNvdXJjZXMpIHtcbiAgICAgIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuXG4gICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgICAgIHZhciBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBzb3VyY2VzW2luZGV4XTtcbiAgICAgICAgdmFyIHByb3BzID0ga2V5c0luKHNvdXJjZSk7XG4gICAgICAgIHZhciBwcm9wc0luZGV4ID0gLTE7XG4gICAgICAgIHZhciBwcm9wc0xlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuICAgICAgICB3aGlsZSAoKytwcm9wc0luZGV4IDwgcHJvcHNMZW5ndGgpIHtcbiAgICAgICAgICB2YXIga2V5ID0gcHJvcHNbcHJvcHNJbmRleF07XG4gICAgICAgICAgdmFyIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAoZXEodmFsdWUsIG9iamVjdFByb3RvW2tleV0pICYmICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpIHtcbiAgICAgICAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRlZmF1bHRzYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBhc3NpZ25zXG4gICAgICogZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gW3NvdXJjZXNdIFRoZSBzb3VyY2Ugb2JqZWN0cy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5kZWZhdWx0c1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRzRGVlcCh7ICdhJzogeyAnYic6IDIgfSB9LCB7ICdhJzogeyAnYic6IDEsICdjJzogMyB9IH0pO1xuICAgICAqIC8vID0+IHsgJ2EnOiB7ICdiJzogMiwgJ2MnOiAzIH0gfVxuICAgICAqL1xuICAgIHZhciBkZWZhdWx0c0RlZXAgPSBiYXNlUmVzdChmdW5jdGlvbihhcmdzKSB7XG4gICAgICBhcmdzLnB1c2godW5kZWZpbmVkLCBjdXN0b21EZWZhdWx0c01lcmdlKTtcbiAgICAgIHJldHVybiBhcHBseShtZXJnZVdpdGgsIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZpbmRgIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgdGhlIGtleSBvZiB0aGUgZmlyc3RcbiAgICAgKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAxLjEuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFJldHVybnMgdGhlIGtleSBvZiB0aGUgbWF0Y2hlZCBlbGVtZW50LFxuICAgICAqICBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSB7XG4gICAgICogICAnYmFybmV5JzogIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgJ2ZyZWQnOiAgICB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uZmluZEtleSh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gICAgICogLy8gPT4gJ2Jhcm5leScgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kS2V5KHVzZXJzLCB7ICdhZ2UnOiAxLCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAgICAgKiAvLyA9PiAncGViYmxlcydcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbmRLZXkodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmluZEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZEtleShvYmplY3QsIHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIGJhc2VGaW5kS2V5KG9iamVjdCwgZ2V0SXRlcmF0ZWUocHJlZGljYXRlLCAzKSwgYmFzZUZvck93bik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5maW5kS2V5YCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mXG4gICAgICogYSBjb2xsZWN0aW9uIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFJldHVybnMgdGhlIGtleSBvZiB0aGUgbWF0Y2hlZCBlbGVtZW50LFxuICAgICAqICBlbHNlIGB1bmRlZmluZWRgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSB7XG4gICAgICogICAnYmFybmV5JzogIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9LFxuICAgICAqICAgJ2ZyZWQnOiAgICB7ICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gICAgICogICAncGViYmxlcyc6IHsgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIF8uZmluZExhc3RLZXkodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICAgICAqIC8vID0+IHJldHVybnMgJ3BlYmJsZXMnIGFzc3VtaW5nIGBfLmZpbmRLZXlgIHJldHVybnMgJ2Jhcm5leSdcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgeyAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0pO1xuICAgICAqIC8vID0+ICdiYXJuZXknXG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICAgICAqIC8vID0+ICdmcmVkJ1xuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5maW5kTGFzdEtleSh1c2VycywgJ2FjdGl2ZScpO1xuICAgICAqIC8vID0+ICdwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRMYXN0S2V5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gYmFzZUZpbmRLZXkob2JqZWN0LCBnZXRJdGVyYXRlZShwcmVkaWNhdGUsIDMpLCBiYXNlRm9yT3duUmlnaHQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhblxuICAgICAqIG9iamVjdCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAodmFsdWUsIGtleSwgb2JqZWN0KS4gSXRlcmF0ZWUgZnVuY3Rpb25zIG1heSBleGl0XG4gICAgICogaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JJblJpZ2h0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmZvckluKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScsICdiJywgdGhlbiAnYycgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ySW4ob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgICAgID8gb2JqZWN0XG4gICAgICAgIDogYmFzZUZvcihvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSwga2V5c0luKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmZvckluYCBleGNlcHQgdGhhdCBpdCBpdGVyYXRlcyBvdmVyIHByb3BlcnRpZXMgb2ZcbiAgICAgKiBgb2JqZWN0YCBpbiB0aGUgb3Bwb3NpdGUgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBzZWUgXy5mb3JJblxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JJblJpZ2h0KG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYycsICdiJywgdGhlbiAnYScgYXNzdW1pbmcgYF8uZm9ySW5gIGxvZ3MgJ2EnLCAnYicsIHRoZW4gJ2MnLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZvckluUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsXG4gICAgICAgID8gb2JqZWN0XG4gICAgICAgIDogYmFzZUZvclJpZ2h0KG9iamVjdCwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDMpLCBrZXlzSW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0ZXJhdGVzIG92ZXIgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0IGFuZFxuICAgICAqIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgICAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAgICAgKiBlYXJseSBieSBleHBsaWNpdGx5IHJldHVybmluZyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuMy4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAc2VlIF8uZm9yT3duUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8uZm9yT3duKG5ldyBGb28sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKGtleSk7XG4gICAgICogfSk7XG4gICAgICogLy8gPT4gTG9ncyAnYScgdGhlbiAnYicgKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZCkuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgJiYgYmFzZUZvck93bihvYmplY3QsIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mb3JPd25gIGV4Y2VwdCB0aGF0IGl0IGl0ZXJhdGVzIG92ZXIgcHJvcGVydGllcyBvZlxuICAgICAqIGBvYmplY3RgIGluIHRoZSBvcHBvc2l0ZSBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQHNlZSBfLmZvck93blxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5mb3JPd25SaWdodChuZXcgRm9vLCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICogICBjb25zb2xlLmxvZyhrZXkpO1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+IExvZ3MgJ2InIHRoZW4gJ2EnIGFzc3VtaW5nIGBfLmZvck93bmAgbG9ncyAnYScgdGhlbiAnYicuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9yT3duUmlnaHQob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgcmV0dXJuIG9iamVjdCAmJiBiYXNlRm9yT3duUmlnaHQob2JqZWN0LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZnJvbSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICogb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBuYW1lcy5cbiAgICAgKiBAc2VlIF8uZnVuY3Rpb25zSW5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICAgICAqICAgdGhpcy5iID0gXy5jb25zdGFudCgnYicpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IF8uY29uc3RhbnQoJ2MnKTtcbiAgICAgKlxuICAgICAqIF8uZnVuY3Rpb25zKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJ11cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmdW5jdGlvbnMob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VGdW5jdGlvbnMob2JqZWN0LCBrZXlzKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgZnVuY3Rpb24gcHJvcGVydHkgbmFtZXMgZnJvbSBvd24gYW5kIGluaGVyaXRlZFxuICAgICAqIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWVzLlxuICAgICAqIEBzZWUgXy5mdW5jdGlvbnNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gXy5jb25zdGFudCgnYScpO1xuICAgICAqICAgdGhpcy5iID0gXy5jb25zdGFudCgnYicpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IF8uY29uc3RhbnQoJ2MnKTtcbiAgICAgKlxuICAgICAqIF8uZnVuY3Rpb25zSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gWydhJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gZnVuY3Rpb25zSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBbXSA6IGJhc2VGdW5jdGlvbnMob2JqZWN0LCBrZXlzSW4ob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAgICAgKiBgdW5kZWZpbmVkYCwgdGhlIGBkZWZhdWx0VmFsdWVgIGlzIHJldHVybmVkIGluIGl0cyBwbGFjZS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAgICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiAzIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICAgICAqIC8vID0+ICdkZWZhdWx0J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3QgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogeyAnYic6IDIgfSB9O1xuICAgICAqIHZhciBvdGhlciA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAgICAgKlxuICAgICAqIF8uaGFzKG9iamVjdCwgJ2EnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsICdhLmInKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmhhcyhvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzKG90aGVyLCAnYScpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzKG9iamVjdCwgcGF0aCkge1xuICAgICAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGludmVydGVkIGtleXMgYW5kIHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKiBJZiBgb2JqZWN0YCBjb250YWlucyBkdXBsaWNhdGUgdmFsdWVzLCBzdWJzZXF1ZW50IHZhbHVlcyBvdmVyd3JpdGVcbiAgICAgKiBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgaW52ZXJ0ZWQgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH07XG4gICAgICpcbiAgICAgKiBfLmludmVydChvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzEnOiAnYycsICcyJzogJ2InIH1cbiAgICAgKi9cbiAgICB2YXIgaW52ZXJ0ID0gY3JlYXRlSW52ZXJ0ZXIoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJlxuICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b1N0cmluZyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbHVlID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFt2YWx1ZV0gPSBrZXk7XG4gICAgfSwgY29uc3RhbnQoaWRlbnRpdHkpKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaW52ZXJ0YCBleGNlcHQgdGhhdCB0aGUgaW52ZXJ0ZWQgb2JqZWN0IGlzIGdlbmVyYXRlZFxuICAgICAqIGZyb20gdGhlIHJlc3VsdHMgb2YgcnVubmluZyBlYWNoIGVsZW1lbnQgb2YgYG9iamVjdGAgdGhydSBgaXRlcmF0ZWVgLiBUaGVcbiAgICAgKiBjb3JyZXNwb25kaW5nIGludmVydGVkIHZhbHVlIG9mIGVhY2ggaW52ZXJ0ZWQga2V5IGlzIGFuIGFycmF5IG9mIGtleXNcbiAgICAgKiByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyB0aGUgaW52ZXJ0ZWQgdmFsdWUuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkXG4gICAgICogd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGludmVydC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IGludmVydGVkIG9iamVjdC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMSB9O1xuICAgICAqXG4gICAgICogXy5pbnZlcnRCeShvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJzEnOiBbJ2EnLCAnYyddLCAnMic6IFsnYiddIH1cbiAgICAgKlxuICAgICAqIF8uaW52ZXJ0Qnkob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAqICAgcmV0dXJuICdncm91cCcgKyB2YWx1ZTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdncm91cDEnOiBbJ2EnLCAnYyddLCAnZ3JvdXAyJzogWydiJ10gfVxuICAgICAqL1xuICAgIHZhciBpbnZlcnRCeSA9IGNyZWF0ZUludmVydGVyKGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiZcbiAgICAgICAgICB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHRbdmFsdWVdLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFt2YWx1ZV0gPSBba2V5XTtcbiAgICAgIH1cbiAgICB9LCBnZXRJdGVyYXRlZSk7XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBtZXRob2QgYXQgYHBhdGhgIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgbWV0aG9kIHRvIGludm9rZS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogWzEsIDIsIDMsIDRdIH0gfV0gfTtcbiAgICAgKlxuICAgICAqIF8uaW52b2tlKG9iamVjdCwgJ2FbMF0uYi5jLnNsaWNlJywgMSwgMyk7XG4gICAgICogLy8gPT4gWzIsIDNdXG4gICAgICovXG4gICAgdmFyIGludm9rZSA9IGJhc2VSZXN0KGJhc2VJbnZva2UpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICAgICAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAgICAgKiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy5rZXlzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIF8ua2V5cygnaGknKTtcbiAgICAgKiAvLyA9PiBbJzAnLCAnMSddXG4gICAgICovXG4gICAgZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLmtleXNJbihuZXcgRm9vKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gICAgICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ubWFwVmFsdWVzYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICAgKiBzYW1lIHZhbHVlcyBhcyBgb2JqZWN0YCBhbmQga2V5cyBnZW5lcmF0ZWQgYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlXG4gICAgICogc3RyaW5nIGtleWVkIHByb3BlcnR5IG9mIGBvYmplY3RgIHRocnUgYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWRcbiAgICAgKiB3aXRoIHRocmVlIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy44LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cbiAgICAgKiBAc2VlIF8ubWFwVmFsdWVzXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWFwS2V5cyh7ICdhJzogMSwgJ2InOiAyIH0sIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgKiAgIHJldHVybiBrZXkgKyB2YWx1ZTtcbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiB7ICdhMSc6IDEsICdiMic6IDIgfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcEtleXMob2JqZWN0LCBpdGVyYXRlZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMyk7XG5cbiAgICAgIGJhc2VGb3JPd24ob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcbiAgICAgICAgYmFzZUFzc2lnblZhbHVlKHJlc3VsdCwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxuICAgICAqIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydVxuICAgICAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICAgICAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuNC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXG4gICAgICogQHNlZSBfLm1hcEtleXNcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHVzZXJzID0ge1xuICAgICAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcbiAgICAgKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xuICAgICAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XG4gICAgICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpdGVyYXRlZSA9IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKTtcblxuICAgICAgYmFzZUZvck93bihvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUocmVzdWx0LCBrZXksIGl0ZXJhdGVlKHZhbHVlLCBrZXksIG9iamVjdCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBtZXJnZXMgb3duIGFuZFxuICAgICAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXG4gICAgICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gICAgICogc2tpcHBlZCBpZiBhIGRlc3RpbmF0aW9uIHZhbHVlIGV4aXN0cy4gQXJyYXkgYW5kIHBsYWluIG9iamVjdCBwcm9wZXJ0aWVzXG4gICAgICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcbiAgICAgKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAgICAgKiBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC41LjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7XG4gICAgICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiB2YXIgb3RoZXIgPSB7XG4gICAgICogICAnYSc6IFt7ICdjJzogMyB9LCB7ICdlJzogNSB9XVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLm1lcmdlKG9iamVjdCwgb3RoZXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cbiAgICAgKi9cbiAgICB2YXIgbWVyZ2UgPSBjcmVhdGVBc3NpZ25lcihmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcbiAgICAgIGJhc2VNZXJnZShvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZXJnZWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcbiAgICAgKiBpcyBpbnZva2VkIHRvIHByb2R1Y2UgdGhlIG1lcmdlZCB2YWx1ZXMgb2YgdGhlIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2VcbiAgICAgKiBwcm9wZXJ0aWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgbWVyZ2luZyBpcyBoYW5kbGVkIGJ5IHRoZVxuICAgICAqIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCBzaXggYXJndW1lbnRzOlxuICAgICAqIChvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLk9iamVjdH0gc291cmNlcyBUaGUgc291cmNlIG9iamVjdHMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSkge1xuICAgICAqICAgaWYgKF8uaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgKiAgICAgcmV0dXJuIG9ialZhbHVlLmNvbmNhdChzcmNWYWx1ZSk7XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbMV0sICdiJzogWzJdIH07XG4gICAgICogdmFyIG90aGVyID0geyAnYSc6IFszXSwgJ2InOiBbNF0gfTtcbiAgICAgKlxuICAgICAqIF8ubWVyZ2VXaXRoKG9iamVjdCwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbMSwgM10sICdiJzogWzIsIDRdIH1cbiAgICAgKi9cbiAgICB2YXIgbWVyZ2VXaXRoID0gY3JlYXRlQXNzaWduZXIoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKSB7XG4gICAgICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5waWNrYDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlXG4gICAgICogb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBwYXRocyBvZiBgb2JqZWN0YCB0aGF0IGFyZSBub3Qgb21pdHRlZC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBjb25zaWRlcmFibHkgc2xvd2VyIHRoYW4gYF8ucGlja2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBvbWl0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5vbWl0KG9iamVjdCwgWydhJywgJ2MnXSk7XG4gICAgICogLy8gPT4geyAnYic6ICcyJyB9XG4gICAgICovXG4gICAgdmFyIG9taXQgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gICAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHZhciBpc0RlZXAgPSBmYWxzZTtcbiAgICAgIHBhdGhzID0gYXJyYXlNYXAocGF0aHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgICAgIGlzRGVlcCB8fCAoaXNEZWVwID0gcGF0aC5sZW5ndGggPiAxKTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9KTtcbiAgICAgIGNvcHlPYmplY3Qob2JqZWN0LCBnZXRBbGxLZXlzSW4ob2JqZWN0KSwgcmVzdWx0KTtcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICAgICAgfVxuICAgICAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICBiYXNlVW5zZXQocmVzdWx0LCBwYXRoc1tsZW5ndGhdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucGlja0J5YDsgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2ZcbiAgICAgKiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBgb2JqZWN0YCB0aGF0XG4gICAgICogYHByZWRpY2F0ZWAgZG9lc24ndCByZXR1cm4gdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdHdvXG4gICAgICogYXJndW1lbnRzOiAodmFsdWUsIGtleSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAgICAgKlxuICAgICAqIF8ub21pdEJ5KG9iamVjdCwgXy5pc051bWJlcik7XG4gICAgICogLy8gPT4geyAnYic6ICcyJyB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gb21pdEJ5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gcGlja0J5KG9iamVjdCwgbmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gey4uLihzdHJpbmd8c3RyaW5nW10pfSBbcGF0aHNdIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5waWNrKG9iamVjdCwgWydhJywgJ2MnXSk7XG4gICAgICogLy8gPT4geyAnYSc6IDEsICdjJzogMyB9XG4gICAgICovXG4gICAgdmFyIHBpY2sgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIHBhdGhzKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB7fSA6IGJhc2VQaWNrKG9iamVjdCwgcGF0aHMpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGBvYmplY3RgIHByb3BlcnRpZXMgYHByZWRpY2F0ZWAgcmV0dXJuc1xuICAgICAqIHRydXRoeSBmb3IuIFRoZSBwcmVkaWNhdGUgaXMgaW52b2tlZCB3aXRoIHR3byBhcmd1bWVudHM6ICh2YWx1ZSwga2V5KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcmVkaWNhdGU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIHByb3BlcnR5LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICAgICAqXG4gICAgICogXy5waWNrQnkob2JqZWN0LCBfLmlzTnVtYmVyKTtcbiAgICAgKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwaWNrQnkob2JqZWN0LCBwcmVkaWNhdGUpIHtcbiAgICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICB2YXIgcHJvcHMgPSBhcnJheU1hcChnZXRBbGxLZXlzSW4ob2JqZWN0KSwgZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICByZXR1cm4gW3Byb3BdO1xuICAgICAgfSk7XG4gICAgICBwcmVkaWNhdGUgPSBnZXRJdGVyYXRlZShwcmVkaWNhdGUpO1xuICAgICAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwcm9wcywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHByZWRpY2F0ZSh2YWx1ZSwgcGF0aFswXSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmdldGAgZXhjZXB0IHRoYXQgaWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzIGFcbiAgICAgKiBmdW5jdGlvbiBpdCdzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgaXRzIHBhcmVudCBvYmplY3QgYW5kXG4gICAgICogaXRzIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHJlc29sdmUuXG4gICAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjMSc6IDMsICdjMic6IF8uY29uc3RhbnQoNCkgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMxJyk7XG4gICAgICogLy8gPT4gM1xuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMyJyk7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5yZXN1bHQob2JqZWN0LCAnYVswXS5iLmMzJywgJ2RlZmF1bHQnKTtcbiAgICAgKiAvLyA9PiAnZGVmYXVsdCdcbiAgICAgKlxuICAgICAqIF8ucmVzdWx0KG9iamVjdCwgJ2FbMF0uYi5jMycsIF8uY29uc3RhbnQoJ2RlZmF1bHQnKSk7XG4gICAgICogLy8gPT4gJ2RlZmF1bHQnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVzdWx0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICAgICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgbG9vcCBpcyBlbnRlcmVkIHdoZW4gcGF0aCBpcyBlbXB0eS5cbiAgICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICAgIGxlbmd0aCA9IDE7XG4gICAgICAgIG9iamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXhdKV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaW5kZXggPSBsZW5ndGg7XG4gICAgICAgICAgdmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgb2JqZWN0ID0gaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZS5jYWxsKG9iamVjdCkgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiBhIHBvcnRpb24gb2YgYHBhdGhgIGRvZXNuJ3QgZXhpc3QsXG4gICAgICogaXQncyBjcmVhdGVkLiBBcnJheXMgYXJlIGNyZWF0ZWQgZm9yIG1pc3NpbmcgaW5kZXggcHJvcGVydGllcyB3aGlsZSBvYmplY3RzXG4gICAgICogYXJlIGNyZWF0ZWQgZm9yIGFsbCBvdGhlciBtaXNzaW5nIHByb3BlcnRpZXMuIFVzZSBgXy5zZXRXaXRoYCB0byBjdXN0b21pemVcbiAgICAgKiBgcGF0aGAgY3JlYXRpb24uXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gICAgICpcbiAgICAgKiBfLnNldChvYmplY3QsICdhWzBdLmIuYycsIDQpO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC5hWzBdLmIuYyk7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5zZXQob2JqZWN0LCBbJ3gnLCAnMCcsICd5JywgJ3onXSwgNSk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LnhbMF0ueS56KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VTZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCB0byBwcm9kdWNlIHRoZSBvYmplY3RzIG9mIGBwYXRoYC4gIElmIGBjdXN0b21pemVyYCByZXR1cm5zIGB1bmRlZmluZWRgXG4gICAgICogcGF0aCBjcmVhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBtZXRob2QgaW5zdGVhZC4gVGhlIGBjdXN0b21pemVyYCBpcyBpbnZva2VkXG4gICAgICogd2l0aCB0aHJlZSBhcmd1bWVudHM6IChuc1ZhbHVlLCBrZXksIG5zT2JqZWN0KS5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIGBvYmplY3RgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIHNldC5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3QgPSB7fTtcbiAgICAgKlxuICAgICAqIF8uc2V0V2l0aChvYmplY3QsICdbMF1bMV0nLCAnYScsIE9iamVjdCk7XG4gICAgICogLy8gPT4geyAnMCc6IHsgJzEnOiAnYScgfSB9XG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0V2l0aChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gICAgICBjdXN0b21pemVyID0gdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJyA/IGN1c3RvbWl6ZXIgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyBvYmplY3QgOiBiYXNlU2V0KG9iamVjdCwgcGF0aCwgdmFsdWUsIGN1c3RvbWl6ZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkLXZhbHVlIHBhaXJzIGZvciBgb2JqZWN0YFxuICAgICAqIHdoaWNoIGNhbiBiZSBjb25zdW1lZCBieSBgXy5mcm9tUGFpcnNgLiBJZiBgb2JqZWN0YCBpcyBhIG1hcCBvciBzZXQsIGl0c1xuICAgICAqIGVudHJpZXMgYXJlIHJldHVybmVkLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGFsaWFzIGVudHJpZXNcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy50b1BhaXJzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFtbJ2EnLCAxXSwgWydiJywgMl1dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgdmFyIHRvUGFpcnMgPSBjcmVhdGVUb1BhaXJzKGtleXMpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZC12YWx1ZSBwYWlyc1xuICAgICAqIGZvciBgb2JqZWN0YCB3aGljaCBjYW4gYmUgY29uc3VtZWQgYnkgYF8uZnJvbVBhaXJzYC4gSWYgYG9iamVjdGAgaXMgYSBtYXBcbiAgICAgKiBvciBzZXQsIGl0cyBlbnRyaWVzIGFyZSByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBhbGlhcyBlbnRyaWVzSW5cbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBGb28oKSB7XG4gICAgICogICB0aGlzLmEgPSAxO1xuICAgICAqICAgdGhpcy5iID0gMjtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICAgICAqXG4gICAgICogXy50b1BhaXJzSW4obmV3IEZvbyk7XG4gICAgICogLy8gPT4gW1snYScsIDFdLCBbJ2InLCAyXSwgWydjJywgM11dIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gICAgICovXG4gICAgdmFyIHRvUGFpcnNJbiA9IGNyZWF0ZVRvUGFpcnMoa2V5c0luKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGFsdGVybmF0aXZlIHRvIGBfLnJlZHVjZWA7IHRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgYG9iamVjdGAgdG8gYSBuZXdcbiAgICAgKiBgYWNjdW11bGF0b3JgIG9iamVjdCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgZWFjaCBvZiBpdHMgb3duXG4gICAgICogZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyB0aHJ1IGBpdGVyYXRlZWAsIHdpdGggZWFjaCBpbnZvY2F0aW9uXG4gICAgICogcG90ZW50aWFsbHkgbXV0YXRpbmcgdGhlIGBhY2N1bXVsYXRvcmAgb2JqZWN0LiBJZiBgYWNjdW11bGF0b3JgIGlzIG5vdFxuICAgICAqIHByb3ZpZGVkLCBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgc2FtZSBgW1tQcm90b3R5cGVdXWAgd2lsbCBiZSB1c2VkLiBUaGVcbiAgICAgKiBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggZm91ciBhcmd1bWVudHM6IChhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgb2JqZWN0KS5cbiAgICAgKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgT2JqZWN0XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGN1c3RvbSBhY2N1bXVsYXRvciB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJhbnNmb3JtKFsyLCAzLCA0XSwgZnVuY3Rpb24ocmVzdWx0LCBuKSB7XG4gICAgICogICByZXN1bHQucHVzaChuICo9IG4pO1xuICAgICAqICAgcmV0dXJuIG4gJSAyID09IDA7XG4gICAgICogfSwgW10pO1xuICAgICAqIC8vID0+IFs0LCA5XVxuICAgICAqXG4gICAgICogXy50cmFuc2Zvcm0oeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAxIH0sIGZ1bmN0aW9uKHJlc3VsdCwgdmFsdWUsIGtleSkge1xuICAgICAqICAgKHJlc3VsdFt2YWx1ZV0gfHwgKHJlc3VsdFt2YWx1ZV0gPSBbXSkpLnB1c2goa2V5KTtcbiAgICAgKiB9LCB7fSk7XG4gICAgICogLy8gPT4geyAnMSc6IFsnYScsICdjJ10sICcyJzogWydiJ10gfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyYW5zZm9ybShvYmplY3QsIGl0ZXJhdGVlLCBhY2N1bXVsYXRvcikge1xuICAgICAgdmFyIGlzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgICAgIGlzQXJyTGlrZSA9IGlzQXJyIHx8IGlzQnVmZmVyKG9iamVjdCkgfHwgaXNUeXBlZEFycmF5KG9iamVjdCk7XG5cbiAgICAgIGl0ZXJhdGVlID0gZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDQpO1xuICAgICAgaWYgKGFjY3VtdWxhdG9yID09IG51bGwpIHtcbiAgICAgICAgdmFyIEN0b3IgPSBvYmplY3QgJiYgb2JqZWN0LmNvbnN0cnVjdG9yO1xuICAgICAgICBpZiAoaXNBcnJMaWtlKSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSBpc0FyciA/IG5ldyBDdG9yIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICAgIGFjY3VtdWxhdG9yID0gaXNGdW5jdGlvbihDdG9yKSA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpIDoge307XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgYWNjdW11bGF0b3IgPSB7fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKGlzQXJyTGlrZSA/IGFycmF5RWFjaCA6IGJhc2VGb3JPd24pKG9iamVjdCwgZnVuY3Rpb24odmFsdWUsIGluZGV4LCBvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIG9iamVjdCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBwcm9wZXJ0eSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byB1bnNldC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGRlbGV0ZWQsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiBbeyAnYic6IHsgJ2MnOiA3IH0gfV0gfTtcbiAgICAgKiBfLnVuc2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICdhJzogW3sgJ2InOiB7fSB9XSB9O1xuICAgICAqXG4gICAgICogXy51bnNldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3QpO1xuICAgICAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IHt9IH1dIH07XG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5zZXQob2JqZWN0LCBwYXRoKSB7XG4gICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB0cnVlIDogYmFzZVVuc2V0KG9iamVjdCwgcGF0aCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5zZXRgIGV4Y2VwdCB0aGF0IGFjY2VwdHMgYHVwZGF0ZXJgIHRvIHByb2R1Y2UgdGhlXG4gICAgICogdmFsdWUgdG8gc2V0LiBVc2UgYF8udXBkYXRlV2l0aGAgdG8gY3VzdG9taXplIGBwYXRoYCBjcmVhdGlvbi4gVGhlIGB1cGRhdGVyYFxuICAgICAqIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjYuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICAgICAqXG4gICAgICogXy51cGRhdGUob2JqZWN0LCAnYVswXS5iLmMnLCBmdW5jdGlvbihuKSB7IHJldHVybiBuICogbjsgfSk7XG4gICAgICogY29uc29sZS5sb2cob2JqZWN0LmFbMF0uYi5jKTtcbiAgICAgKiAvLyA9PiA5XG4gICAgICpcbiAgICAgKiBfLnVwZGF0ZShvYmplY3QsICd4WzBdLnkueicsIGZ1bmN0aW9uKG4pIHsgcmV0dXJuIG4gPyBuICsgMSA6IDA7IH0pO1xuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdC54WzBdLnkueik7XG4gICAgICogLy8gPT4gMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVwZGF0ZShvYmplY3QsIHBhdGgsIHVwZGF0ZXIpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IG9iamVjdCA6IGJhc2VVcGRhdGUob2JqZWN0LCBwYXRoLCBjYXN0RnVuY3Rpb24odXBkYXRlcikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udXBkYXRlYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBjdXN0b21pemVyYCB3aGljaCBpc1xuICAgICAqIGludm9rZWQgdG8gcHJvZHVjZSB0aGUgb2JqZWN0cyBvZiBgcGF0aGAuICBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYFxuICAgICAqIHBhdGggY3JlYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZFxuICAgICAqIHdpdGggdGhyZWUgYXJndW1lbnRzOiAobnNWYWx1ZSwga2V5LCBuc09iamVjdCkuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjYuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gdXBkYXRlciBUaGUgZnVuY3Rpb24gdG8gcHJvZHVjZSB0aGUgdXBkYXRlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBhc3NpZ25lZCB2YWx1ZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHt9O1xuICAgICAqXG4gICAgICogXy51cGRhdGVXaXRoKG9iamVjdCwgJ1swXVsxXScsIF8uY29uc3RhbnQoJ2EnKSwgT2JqZWN0KTtcbiAgICAgKiAvLyA9PiB7ICcwJzogeyAnMSc6ICdhJyB9IH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1cGRhdGVXaXRoKG9iamVjdCwgcGF0aCwgdXBkYXRlciwgY3VzdG9taXplcikge1xuICAgICAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gb2JqZWN0IDogYmFzZVVwZGF0ZShvYmplY3QsIHBhdGgsIGNhc3RGdW5jdGlvbih1cGRhdGVyKSwgY3VzdG9taXplcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnR5IHZhbHVlcyBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IE9iamVjdFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gRm9vKCkge1xuICAgICAqICAgdGhpcy5hID0gMTtcbiAgICAgKiAgIHRoaXMuYiA9IDI7XG4gICAgICogfVxuICAgICAqXG4gICAgICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAgICAgKlxuICAgICAqIF8udmFsdWVzKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqXG4gICAgICogXy52YWx1ZXMoJ2hpJyk7XG4gICAgICogLy8gPT4gWydoJywgJ2knXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHlcbiAgICAgKiB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBPYmplY3RcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIEZvbygpIHtcbiAgICAgKiAgIHRoaXMuYSA9IDE7XG4gICAgICogICB0aGlzLmIgPSAyO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gICAgICpcbiAgICAgKiBfLnZhbHVlc0luKG5ldyBGb28pO1xuICAgICAqIC8vID0+IFsxLCAyLCAzXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHZhbHVlc0luKG9iamVjdCkge1xuICAgICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5c0luKG9iamVjdCkpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENsYW1wcyBgbnVtYmVyYCB3aXRoaW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBOdW1iZXJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gY2xhbXAuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsb3dlcl0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB1cHBlciBUaGUgdXBwZXIgYm91bmQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY2xhbXBlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2xhbXAoLTEwLCAtNSwgNSk7XG4gICAgICogLy8gPT4gLTVcbiAgICAgKlxuICAgICAqIF8uY2xhbXAoMTAsIC01LCA1KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xhbXAobnVtYmVyLCBsb3dlciwgdXBwZXIpIHtcbiAgICAgIGlmICh1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHVwcGVyID0gbG93ZXI7XG4gICAgICAgIGxvd2VyID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdXBwZXIgPSB0b051bWJlcih1cHBlcik7XG4gICAgICAgIHVwcGVyID0gdXBwZXIgPT09IHVwcGVyID8gdXBwZXIgOiAwO1xuICAgICAgfVxuICAgICAgaWYgKGxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG93ZXIgPSB0b051bWJlcihsb3dlcik7XG4gICAgICAgIGxvd2VyID0gbG93ZXIgPT09IGxvd2VyID8gbG93ZXIgOiAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VDbGFtcCh0b051bWJlcihudW1iZXIpLCBsb3dlciwgdXBwZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiBgbmAgaXMgYmV0d2VlbiBgc3RhcnRgIGFuZCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIGBlbmRgLiBJZlxuICAgICAqIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAgICAgKiBJZiBgc3RhcnRgIGlzIGdyZWF0ZXIgdGhhbiBgZW5kYCB0aGUgcGFyYW1zIGFyZSBzd2FwcGVkIHRvIHN1cHBvcnRcbiAgICAgKiBuZWdhdGl2ZSByYW5nZXMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4zLjBcbiAgICAgKiBAY2F0ZWdvcnkgTnVtYmVyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgbnVtYmVyYCBpcyBpbiB0aGUgcmFuZ2UsIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAc2VlIF8ucmFuZ2UsIF8ucmFuZ2VSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoMywgMiwgNCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDQsIDgpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uaW5SYW5nZSg0LCAyKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKDIsIDIpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoMS4yLCAyKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmluUmFuZ2UoNS4yLCA0KTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5pblJhbmdlKC0zLCAtMiwgLTYpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCkge1xuICAgICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZW5kID0gc3RhcnQ7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZCA9IHRvRmluaXRlKGVuZCk7XG4gICAgICB9XG4gICAgICBudW1iZXIgPSB0b051bWJlcihudW1iZXIpO1xuICAgICAgcmV0dXJuIGJhc2VJblJhbmdlKG51bWJlciwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZHVjZXMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gdGhlIGluY2x1c2l2ZSBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcy5cbiAgICAgKiBJZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwcm92aWRlZCBhIG51bWJlciBiZXR3ZWVuIGAwYCBhbmQgdGhlIGdpdmVuIG51bWJlclxuICAgICAqIGlzIHJldHVybmVkLiBJZiBgZmxvYXRpbmdgIGlzIGB0cnVlYCwgb3IgZWl0aGVyIGBsb3dlcmAgb3IgYHVwcGVyYCBhcmVcbiAgICAgKiBmbG9hdHMsIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gaW50ZWdlci5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBKYXZhU2NyaXB0IGZvbGxvd3MgdGhlIElFRUUtNzU0IHN0YW5kYXJkIGZvciByZXNvbHZpbmdcbiAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDAuNy4wXG4gICAgICogQGNhdGVnb3J5IE51bWJlclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbG93ZXI9MF0gVGhlIGxvd2VyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdXBwZXI9MV0gVGhlIHVwcGVyIGJvdW5kLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zsb2F0aW5nXSBTcGVjaWZ5IHJldHVybmluZyBhIGZsb2F0aW5nLXBvaW50IG51bWJlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSByYW5kb20gbnVtYmVyLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgwLCA1KTtcbiAgICAgKiAvLyA9PiBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSk7XG4gICAgICogLy8gPT4gYWxzbyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgNVxuICAgICAqXG4gICAgICogXy5yYW5kb20oNSwgdHJ1ZSk7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAwIGFuZCA1XG4gICAgICpcbiAgICAgKiBfLnJhbmRvbSgxLjIsIDUuMik7XG4gICAgICogLy8gPT4gYSBmbG9hdGluZy1wb2ludCBudW1iZXIgYmV0d2VlbiAxLjIgYW5kIDUuMlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJhbmRvbShsb3dlciwgdXBwZXIsIGZsb2F0aW5nKSB7XG4gICAgICBpZiAoZmxvYXRpbmcgJiYgdHlwZW9mIGZsb2F0aW5nICE9ICdib29sZWFuJyAmJiBpc0l0ZXJhdGVlQ2FsbChsb3dlciwgdXBwZXIsIGZsb2F0aW5nKSkge1xuICAgICAgICB1cHBlciA9IGZsb2F0aW5nID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGZsb2F0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1cHBlciA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBmbG9hdGluZyA9IHVwcGVyO1xuICAgICAgICAgIHVwcGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBsb3dlciA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBmbG9hdGluZyA9IGxvd2VyO1xuICAgICAgICAgIGxvd2VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobG93ZXIgPT09IHVuZGVmaW5lZCAmJiB1cHBlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvd2VyID0gMDtcbiAgICAgICAgdXBwZXIgPSAxO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGxvd2VyID0gdG9GaW5pdGUobG93ZXIpO1xuICAgICAgICBpZiAodXBwZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwcGVyID0gbG93ZXI7XG4gICAgICAgICAgbG93ZXIgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVwcGVyID0gdG9GaW5pdGUodXBwZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobG93ZXIgPiB1cHBlcikge1xuICAgICAgICB2YXIgdGVtcCA9IGxvd2VyO1xuICAgICAgICBsb3dlciA9IHVwcGVyO1xuICAgICAgICB1cHBlciA9IHRlbXA7XG4gICAgICB9XG4gICAgICBpZiAoZmxvYXRpbmcgfHwgbG93ZXIgJSAxIHx8IHVwcGVyICUgMSkge1xuICAgICAgICB2YXIgcmFuZCA9IG5hdGl2ZVJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlTWluKGxvd2VyICsgKHJhbmQgKiAodXBwZXIgLSBsb3dlciArIGZyZWVQYXJzZUZsb2F0KCcxZS0nICsgKChyYW5kICsgJycpLmxlbmd0aCAtIDEpKSkpLCB1cHBlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gYmFzZVJhbmRvbShsb3dlciwgdXBwZXIpO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIFtjYW1lbCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYW1lbENhc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY2FtZWwgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmNhbWVsQ2FzZSgnRm9vIEJhcicpO1xuICAgICAqIC8vID0+ICdmb29CYXInXG4gICAgICpcbiAgICAgKiBfLmNhbWVsQ2FzZSgnLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnZm9vQmFyJ1xuICAgICAqXG4gICAgICogXy5jYW1lbENhc2UoJ19fRk9PX0JBUl9fJyk7XG4gICAgICogLy8gPT4gJ2Zvb0JhcidcbiAgICAgKi9cbiAgICB2YXIgY2FtZWxDYXNlID0gY3JlYXRlQ29tcG91bmRlcihmdW5jdGlvbihyZXN1bHQsIHdvcmQsIGluZGV4KSB7XG4gICAgICB3b3JkID0gd29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/IGNhcGl0YWxpemUod29yZCkgOiB3b3JkKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gdXBwZXIgY2FzZSBhbmQgdGhlIHJlbWFpbmluZ1xuICAgICAqIHRvIGxvd2VyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY2FwaXRhbGl6ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjYXBpdGFsaXplZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2FwaXRhbGl6ZSgnRlJFRCcpO1xuICAgICAqIC8vID0+ICdGcmVkJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdXBwZXJGaXJzdCh0b1N0cmluZyhzdHJpbmcpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYnVycnMgYHN0cmluZ2AgYnkgY29udmVydGluZ1xuICAgICAqIFtMYXRpbi0xIFN1cHBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluLTFfU3VwcGxlbWVudF8oVW5pY29kZV9ibG9jaykjQ2hhcmFjdGVyX3RhYmxlKVxuICAgICAqIGFuZCBbTGF0aW4gRXh0ZW5kZWQtQV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fRXh0ZW5kZWQtQSlcbiAgICAgKiBsZXR0ZXJzIHRvIGJhc2ljIExhdGluIGxldHRlcnMgYW5kIHJlbW92aW5nXG4gICAgICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlYnVycignZMOpasOgIHZ1Jyk7XG4gICAgICogLy8gPT4gJ2RlamEgdnUnXG4gICAgICovXG4gICAgZnVuY3Rpb24gZGVidXJyKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnJlcGxhY2UocmVMYXRpbiwgZGVidXJyTGV0dGVyKS5yZXBsYWNlKHJlQ29tYm9NYXJrLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIGVuZHMgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbdGFyZ2V0XSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3IuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtwb3NpdGlvbj1zdHJpbmcubGVuZ3RoXSBUaGUgcG9zaXRpb24gdG8gc2VhcmNoIHVwIHRvLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgc3RyaW5nYCBlbmRzIHdpdGggYHRhcmdldGAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lbmRzV2l0aCgnYWJjJywgJ2MnKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicpO1xuICAgICAqIC8vID0+IGZhbHNlXG4gICAgICpcbiAgICAgKiBfLmVuZHNXaXRoKCdhYmMnLCAnYicsIDIpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlbmRzV2l0aChzdHJpbmcsIHRhcmdldCwgcG9zaXRpb24pIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB0YXJnZXQgPSBiYXNlVG9TdHJpbmcodGFyZ2V0KTtcblxuICAgICAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID09PSB1bmRlZmluZWRcbiAgICAgICAgPyBsZW5ndGhcbiAgICAgICAgOiBiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwgMCwgbGVuZ3RoKTtcblxuICAgICAgdmFyIGVuZCA9IHBvc2l0aW9uO1xuICAgICAgcG9zaXRpb24gLT0gdGFyZ2V0Lmxlbmd0aDtcbiAgICAgIHJldHVybiBwb3NpdGlvbiA+PSAwICYmIHN0cmluZy5zbGljZShwb3NpdGlvbiwgZW5kKSA9PSB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIGNoYXJhY3RlcnMgXCImXCIsIFwiPFwiLCBcIj5cIiwgJ1wiJywgYW5kIFwiJ1wiIGluIGBzdHJpbmdgIHRvIHRoZWlyXG4gICAgICogY29ycmVzcG9uZGluZyBIVE1MIGVudGl0aWVzLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE5vIG90aGVyIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQuIFRvIGVzY2FwZSBhZGRpdGlvbmFsXG4gICAgICogY2hhcmFjdGVycyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gICAgICpcbiAgICAgKiBUaG91Z2ggdGhlIFwiPlwiIGNoYXJhY3RlciBpcyBlc2NhcGVkIGZvciBzeW1tZXRyeSwgY2hhcmFjdGVycyBsaWtlXG4gICAgICogXCI+XCIgYW5kIFwiL1wiIGRvbid0IG5lZWQgZXNjYXBpbmcgaW4gSFRNTCBhbmQgaGF2ZSBubyBzcGVjaWFsIG1lYW5pbmdcbiAgICAgKiB1bmxlc3MgdGhleSdyZSBwYXJ0IG9mIGEgdGFnIG9yIHVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4gU2VlXG4gICAgICogW01hdGhpYXMgQnluZW5zJ3MgYXJ0aWNsZV0oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2FtYmlndW91cy1hbXBlcnNhbmRzKVxuICAgICAqICh1bmRlciBcInNlbWktcmVsYXRlZCBmdW4gZmFjdFwiKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAqXG4gICAgICogV2hlbiB3b3JraW5nIHdpdGggSFRNTCB5b3Ugc2hvdWxkIGFsd2F5c1xuICAgICAqIFtxdW90ZSBhdHRyaWJ1dGUgdmFsdWVzXShodHRwOi8vd29ua28uY29tL3Bvc3QvaHRtbC1lc2NhcGluZykgdG8gcmVkdWNlXG4gICAgICogWFNTIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGVzY2FwZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmIHBlYmJsZXMnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1VuZXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlVW5lc2NhcGVkSHRtbCwgZXNjYXBlSHRtbENoYXIpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAgICAgKiBcIj9cIiwgXCIoXCIsIFwiKVwiLCBcIltcIiwgXCJdXCIsIFwie1wiLCBcIn1cIiwgYW5kIFwifFwiIGluIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGVzY2FwZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5lc2NhcGVSZWdFeHAoJ1tsb2Rhc2hdKGh0dHBzOi8vbG9kYXNoLmNvbS8pJyk7XG4gICAgICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgcmV0dXJuIChzdHJpbmcgJiYgcmVIYXNSZWdFeHBDaGFyLnRlc3Qoc3RyaW5nKSlcbiAgICAgICAgPyBzdHJpbmcucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtrZWJhYiBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTcGVjaWFsX2Nhc2Vfc3R5bGVzKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGtlYmFiIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5rZWJhYkNhc2UoJ0ZvbyBCYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vLWJhcidcbiAgICAgKlxuICAgICAqIF8ua2ViYWJDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb28tYmFyJ1xuICAgICAqL1xuICAgIHZhciBrZWJhYkNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnLScgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCwgYXMgc3BhY2Ugc2VwYXJhdGVkIHdvcmRzLCB0byBsb3dlciBjYXNlLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbG93ZXIgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxvd2VyQ2FzZSgnLS1Gb28tQmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKlxuICAgICAqIF8ubG93ZXJDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnZm9vIGJhcidcbiAgICAgKlxuICAgICAqIF8ubG93ZXJDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdmb28gYmFyJ1xuICAgICAqL1xuICAgIHZhciBsb3dlckNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIGxvd2VyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmxvd2VyRmlyc3QoJ0ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnZnJlZCdcbiAgICAgKlxuICAgICAqIF8ubG93ZXJGaXJzdCgnRlJFRCcpO1xuICAgICAqIC8vID0+ICdmUkVEJ1xuICAgICAqL1xuICAgIHZhciBsb3dlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b0xvd2VyQ2FzZScpO1xuXG4gICAgLyoqXG4gICAgICogUGFkcyBgc3RyaW5nYCBvbiB0aGUgbGVmdCBhbmQgcmlnaHQgc2lkZXMgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuXG4gICAgICogUGFkZGluZyBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBjYW4ndCBiZSBldmVubHkgZGl2aWRlZCBieSBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZCgnYWJjJywgOCk7XG4gICAgICogLy8gPT4gJyAgYWJjICAgJ1xuICAgICAqXG4gICAgICogXy5wYWQoJ2FiYycsIDgsICdfLScpO1xuICAgICAqIC8vID0+ICdfLWFiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkKCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gICAgICBpZiAoIWxlbmd0aCB8fCBzdHJMZW5ndGggPj0gbGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgbWlkID0gKGxlbmd0aCAtIHN0ckxlbmd0aCkgLyAyO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY3JlYXRlUGFkZGluZyhuYXRpdmVGbG9vcihtaWQpLCBjaGFycykgK1xuICAgICAgICBzdHJpbmcgK1xuICAgICAgICBjcmVhdGVQYWRkaW5nKG5hdGl2ZUNlaWwobWlkKSwgY2hhcnMpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIHJpZ2h0IHNpZGUgaWYgaXQncyBzaG9ydGVyIHRoYW4gYGxlbmd0aGAuIFBhZGRpbmdcbiAgICAgKiBjaGFyYWN0ZXJzIGFyZSB0cnVuY2F0ZWQgaWYgdGhleSBleGNlZWQgYGxlbmd0aGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gcGFkLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTBdIFRoZSBwYWRkaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPScgJ10gVGhlIHN0cmluZyB1c2VkIGFzIHBhZGRpbmcuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcGFkZGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5wYWRFbmQoJ2FiYycsIDYpO1xuICAgICAqIC8vID0+ICdhYmMgICAnXG4gICAgICpcbiAgICAgKiBfLnBhZEVuZCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiY18tXydcbiAgICAgKlxuICAgICAqIF8ucGFkRW5kKCdhYmMnLCAzKTtcbiAgICAgKiAvLyA9PiAnYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhZEVuZChzdHJpbmcsIGxlbmd0aCwgY2hhcnMpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBsZW5ndGggPSB0b0ludGVnZXIobGVuZ3RoKTtcblxuICAgICAgdmFyIHN0ckxlbmd0aCA9IGxlbmd0aCA/IHN0cmluZ1NpemUoc3RyaW5nKSA6IDA7XG4gICAgICByZXR1cm4gKGxlbmd0aCAmJiBzdHJMZW5ndGggPCBsZW5ndGgpXG4gICAgICAgID8gKHN0cmluZyArIGNyZWF0ZVBhZGRpbmcobGVuZ3RoIC0gc3RyTGVuZ3RoLCBjaGFycykpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZHMgYHN0cmluZ2Agb24gdGhlIGxlZnQgc2lkZSBpZiBpdCdzIHNob3J0ZXIgdGhhbiBgbGVuZ3RoYC4gUGFkZGluZ1xuICAgICAqIGNoYXJhY3RlcnMgYXJlIHRydW5jYXRlZCBpZiB0aGV5IGV4Y2VlZCBgbGVuZ3RoYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBwYWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MF0gVGhlIHBhZGRpbmcgbGVuZ3RoLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcnM9JyAnXSBUaGUgc3RyaW5nIHVzZWQgYXMgcGFkZGluZy5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBwYWRkZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnBhZFN0YXJ0KCdhYmMnLCA2KTtcbiAgICAgKiAvLyA9PiAnICAgYWJjJ1xuICAgICAqXG4gICAgICogXy5wYWRTdGFydCgnYWJjJywgNiwgJ18tJyk7XG4gICAgICogLy8gPT4gJ18tX2FiYydcbiAgICAgKlxuICAgICAqIF8ucGFkU3RhcnQoJ2FiYycsIDMpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFkU3RhcnQoc3RyaW5nLCBsZW5ndGgsIGNoYXJzKSB7XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgbGVuZ3RoID0gdG9JbnRlZ2VyKGxlbmd0aCk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBsZW5ndGggPyBzdHJpbmdTaXplKHN0cmluZykgOiAwO1xuICAgICAgcmV0dXJuIChsZW5ndGggJiYgc3RyTGVuZ3RoIDwgbGVuZ3RoKVxuICAgICAgICA/IChjcmVhdGVQYWRkaW5nKGxlbmd0aCAtIHN0ckxlbmd0aCwgY2hhcnMpICsgc3RyaW5nKVxuICAgICAgICA6IHN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBpbnRlZ2VyIG9mIHRoZSBzcGVjaWZpZWQgcmFkaXguIElmIGByYWRpeGAgaXNcbiAgICAgKiBgdW5kZWZpbmVkYCBvciBgMGAsIGEgYHJhZGl4YCBvZiBgMTBgIGlzIHVzZWQgdW5sZXNzIGB2YWx1ZWAgaXMgYVxuICAgICAqIGhleGFkZWNpbWFsLCBpbiB3aGljaCBjYXNlIGEgYHJhZGl4YCBvZiBgMTZgIGlzIHVzZWQuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgYWxpZ25zIHdpdGggdGhlXG4gICAgICogW0VTNSBpbXBsZW1lbnRhdGlvbl0oaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuMS4yLjIpIG9mIGBwYXJzZUludGAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMS4xLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtyYWRpeD0xMF0gVGhlIHJhZGl4IHRvIGludGVycHJldCBgdmFsdWVgIGJ5LlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucGFyc2VJbnQoJzA4Jyk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXAoWyc2JywgJzA4JywgJzEwJ10sIF8ucGFyc2VJbnQpO1xuICAgICAqIC8vID0+IFs2LCA4LCAxMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4LCBndWFyZCkge1xuICAgICAgaWYgKGd1YXJkIHx8IHJhZGl4ID09IG51bGwpIHtcbiAgICAgICAgcmFkaXggPSAwO1xuICAgICAgfSBlbHNlIGlmIChyYWRpeCkge1xuICAgICAgICByYWRpeCA9ICtyYWRpeDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuYXRpdmVQYXJzZUludCh0b1N0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKSwgcmFkaXggfHwgMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwZWF0cyB0aGUgZ2l2ZW4gc3RyaW5nIGBuYCB0aW1lcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byByZXBlYXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTFdIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmcuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByZXBlYXRlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCcqJywgMyk7XG4gICAgICogLy8gPT4gJyoqKidcbiAgICAgKlxuICAgICAqIF8ucmVwZWF0KCdhYmMnLCAyKTtcbiAgICAgKiAvLyA9PiAnYWJjYWJjJ1xuICAgICAqXG4gICAgICogXy5yZXBlYXQoJ2FiYycsIDApO1xuICAgICAqIC8vID0+ICcnXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVwZWF0KHN0cmluZywgbiwgZ3VhcmQpIHtcbiAgICAgIGlmICgoZ3VhcmQgPyBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIG4sIGd1YXJkKSA6IG4gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgbiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuID0gdG9JbnRlZ2VyKG4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhc2VSZXBlYXQodG9TdHJpbmcoc3RyaW5nKSwgbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgbWF0Y2hlcyBmb3IgYHBhdHRlcm5gIGluIGBzdHJpbmdgIHdpdGggYHJlcGxhY2VtZW50YC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgU3RyaW5nI3JlcGxhY2VgXShodHRwczovL21kbi5pby9TdHJpbmcvcmVwbGFjZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gbW9kaWZ5LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gcGF0dGVybiBUaGUgcGF0dGVybiB0byByZXBsYWNlLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSByZXBsYWNlbWVudCBUaGUgbWF0Y2ggcmVwbGFjZW1lbnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgbW9kaWZpZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJlcGxhY2UoJ0hpIEZyZWQnLCAnRnJlZCcsICdCYXJuZXknKTtcbiAgICAgKiAvLyA9PiAnSGkgQmFybmV5J1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHJlcGxhY2UoKSB7XG4gICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICBzdHJpbmcgPSB0b1N0cmluZyhhcmdzWzBdKTtcblxuICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoIDwgMyA/IHN0cmluZyA6IHN0cmluZy5yZXBsYWNlKGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gICAgICogW3NuYWtlIGNhc2VdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NuYWtlX2Nhc2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc25ha2UgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNuYWtlQ2FzZSgnRm9vIEJhcicpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJ2Zvb0JhcicpO1xuICAgICAqIC8vID0+ICdmb29fYmFyJ1xuICAgICAqXG4gICAgICogXy5zbmFrZUNhc2UoJy0tRk9PLUJBUi0tJyk7XG4gICAgICogLy8gPT4gJ2Zvb19iYXInXG4gICAgICovXG4gICAgdmFyIHNuYWtlQ2FzZSA9IGNyZWF0ZUNvbXBvdW5kZXIoZnVuY3Rpb24ocmVzdWx0LCB3b3JkLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICdfJyA6ICcnKSArIHdvcmQudG9Mb3dlckNhc2UoKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFNwbGl0cyBgc3RyaW5nYCBieSBgc2VwYXJhdG9yYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBiYXNlZCBvblxuICAgICAqIFtgU3RyaW5nI3NwbGl0YF0oaHR0cHM6Ly9tZG4uaW8vU3RyaW5nL3NwbGl0KS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBzcGxpdC5cbiAgICAgKiBAcGFyYW0ge1JlZ0V4cHxzdHJpbmd9IHNlcGFyYXRvciBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gc3BsaXQgYnkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsaW1pdF0gVGhlIGxlbmd0aCB0byB0cnVuY2F0ZSByZXN1bHRzIHRvLlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgc3RyaW5nIHNlZ21lbnRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnNwbGl0KCdhLWItYycsICctJywgMik7XG4gICAgICogLy8gPT4gWydhJywgJ2InXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNwbGl0KHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgaWYgKGxpbWl0ICYmIHR5cGVvZiBsaW1pdCAhPSAnbnVtYmVyJyAmJiBpc0l0ZXJhdGVlQ2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpKSB7XG4gICAgICAgIHNlcGFyYXRvciA9IGxpbWl0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgbGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX0FSUkFZX0xFTkdUSCA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKCFsaW1pdCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgaWYgKHN0cmluZyAmJiAoXG4gICAgICAgICAgICB0eXBlb2Ygc2VwYXJhdG9yID09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICAoc2VwYXJhdG9yICE9IG51bGwgJiYgIWlzUmVnRXhwKHNlcGFyYXRvcikpXG4gICAgICAgICAgKSkge1xuICAgICAgICBzZXBhcmF0b3IgPSBiYXNlVG9TdHJpbmcoc2VwYXJhdG9yKTtcbiAgICAgICAgaWYgKCFzZXBhcmF0b3IgJiYgaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJpbmdUb0FycmF5KHN0cmluZyksIDAsIGxpbWl0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cmluZy5zcGxpdChzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgc3RyaW5nYCB0b1xuICAgICAqIFtzdGFydCBjYXNlXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MZXR0ZXJfY2FzZSNTdHlsaXN0aWNfb3Jfc3BlY2lhbGlzZWRfdXNhZ2UpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMS4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RhcnQgY2FzZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN0YXJ0Q2FzZSgnLS1mb28tYmFyLS0nKTtcbiAgICAgKiAvLyA9PiAnRm9vIEJhcidcbiAgICAgKlxuICAgICAqIF8uc3RhcnRDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnRm9vIEJhcidcbiAgICAgKlxuICAgICAqIF8uc3RhcnRDYXNlKCdfX0ZPT19CQVJfXycpO1xuICAgICAqIC8vID0+ICdGT08gQkFSJ1xuICAgICAqL1xuICAgIHZhciBzdGFydENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB1cHBlckZpcnN0KHdvcmQpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGBzdHJpbmdgIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiB0YXJnZXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFt0YXJnZXRdIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3Bvc2l0aW9uPTBdIFRoZSBwb3NpdGlvbiB0byBzZWFyY2ggZnJvbS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHN0cmluZ2Agc3RhcnRzIHdpdGggYHRhcmdldGAsXG4gICAgICogIGVsc2UgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIF8uc3RhcnRzV2l0aCgnYWJjJywgJ2InKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqXG4gICAgICogXy5zdGFydHNXaXRoKCdhYmMnLCAnYicsIDEpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdGFydHNXaXRoKHN0cmluZywgdGFyZ2V0LCBwb3NpdGlvbikge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPT0gbnVsbFxuICAgICAgICA/IDBcbiAgICAgICAgOiBiYXNlQ2xhbXAodG9JbnRlZ2VyKHBvc2l0aW9uKSwgMCwgc3RyaW5nLmxlbmd0aCk7XG5cbiAgICAgIHRhcmdldCA9IGJhc2VUb1N0cmluZyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHN0cmluZy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyB0YXJnZXQubGVuZ3RoKSA9PSB0YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uIHRoYXQgY2FuIGludGVycG9sYXRlIGRhdGEgcHJvcGVydGllc1xuICAgICAqIGluIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXJzLCBIVE1MLWVzY2FwZSBpbnRlcnBvbGF0ZWQgZGF0YSBwcm9wZXJ0aWVzIGluXG4gICAgICogXCJlc2NhcGVcIiBkZWxpbWl0ZXJzLCBhbmQgZXhlY3V0ZSBKYXZhU2NyaXB0IGluIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXJzLiBEYXRhXG4gICAgICogcHJvcGVydGllcyBtYXkgYmUgYWNjZXNzZWQgYXMgZnJlZSB2YXJpYWJsZXMgaW4gdGhlIHRlbXBsYXRlLiBJZiBhIHNldHRpbmdcbiAgICAgKiBvYmplY3QgaXMgZ2l2ZW4sIGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgXy50ZW1wbGF0ZVNldHRpbmdzYCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogSW4gdGhlIGRldmVsb3BtZW50IGJ1aWxkIGBfLnRlbXBsYXRlYCB1dGlsaXplc1xuICAgICAqIFtzb3VyY2VVUkxzXShodHRwOi8vd3d3Lmh0bWw1cm9ja3MuY29tL2VuL3R1dG9yaWFscy9kZXZlbG9wZXJ0b29scy9zb3VyY2VtYXBzLyN0b2Mtc291cmNldXJsKVxuICAgICAqIGZvciBlYXNpZXIgZGVidWdnaW5nLlxuICAgICAqXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcHJlY29tcGlsaW5nIHRlbXBsYXRlcyBzZWVcbiAgICAgKiBbbG9kYXNoJ3MgY3VzdG9tIGJ1aWxkcyBkb2N1bWVudGF0aW9uXShodHRwczovL2xvZGFzaC5jb20vY3VzdG9tLWJ1aWxkcykuXG4gICAgICpcbiAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBDaHJvbWUgZXh0ZW5zaW9uIHNhbmRib3hlcyBzZWVcbiAgICAgKiBbQ2hyb21lJ3MgZXh0ZW5zaW9ucyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2V4dGVuc2lvbnMvc2FuZGJveGluZ0V2YWwpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgdGVtcGxhdGUgc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnMgb2JqZWN0LlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfSBbb3B0aW9ucy5lc2NhcGU9Xy50ZW1wbGF0ZVNldHRpbmdzLmVzY2FwZV1cbiAgICAgKiAgVGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmV2YWx1YXRlPV8udGVtcGxhdGVTZXR0aW5ncy5ldmFsdWF0ZV1cbiAgICAgKiAgVGhlIFwiZXZhbHVhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLmltcG9ydHM9Xy50ZW1wbGF0ZVNldHRpbmdzLmltcG9ydHNdXG4gICAgICogIEFuIG9iamVjdCB0byBpbXBvcnQgaW50byB0aGUgdGVtcGxhdGUgYXMgZnJlZSB2YXJpYWJsZXMuXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IFtvcHRpb25zLmludGVycG9sYXRlPV8udGVtcGxhdGVTZXR0aW5ncy5pbnRlcnBvbGF0ZV1cbiAgICAgKiAgVGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnNvdXJjZVVSTD0nbG9kYXNoLnRlbXBsYXRlU291cmNlc1tuXSddXG4gICAgICogIFRoZSBzb3VyY2VVUkwgb2YgdGhlIGNvbXBpbGVkIHRlbXBsYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy52YXJpYWJsZT0nb2JqJ11cbiAgICAgKiAgVGhlIGRhdGEgb2JqZWN0IHZhcmlhYmxlIG5hbWUuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIFwiaW50ZXJwb2xhdGVcIiBkZWxpbWl0ZXIgdG8gY3JlYXRlIGEgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGVsbG8gPCU9IHVzZXIgJT4hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdmcmVkJyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gZnJlZCEnXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIEhUTUwgXCJlc2NhcGVcIiBkZWxpbWl0ZXIgdG8gZXNjYXBlIGRhdGEgcHJvcGVydHkgdmFsdWVzLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJzxiPjwlLSB2YWx1ZSAlPjwvYj4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd2YWx1ZSc6ICc8c2NyaXB0PicgfSk7XG4gICAgICogLy8gPT4gJzxiPiZsdDtzY3JpcHQmZ3Q7PC9iPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgXCJldmFsdWF0ZVwiIGRlbGltaXRlciB0byBleGVjdXRlIEphdmFTY3JpcHQgYW5kIGdlbmVyYXRlIEhUTUwuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCUgXy5mb3JFYWNoKHVzZXJzLCBmdW5jdGlvbih1c2VyKSB7ICU+PGxpPjwlLSB1c2VyICU+PC9saT48JSB9KTsgJT4nKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2Vycyc6IFsnZnJlZCcsICdiYXJuZXknXSB9KTtcbiAgICAgKiAvLyA9PiAnPGxpPmZyZWQ8L2xpPjxsaT5iYXJuZXk8L2xpPidcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgaW50ZXJuYWwgYHByaW50YCBmdW5jdGlvbiBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVycy5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCc8JSBwcmludChcImhlbGxvIFwiICsgdXNlcik7ICU+IScpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXInOiAnYmFybmV5JyB9KTtcbiAgICAgKiAvLyA9PiAnaGVsbG8gYmFybmV5ISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgRVMgdGVtcGxhdGUgbGl0ZXJhbCBkZWxpbWl0ZXIgYXMgYW4gXCJpbnRlcnBvbGF0ZVwiIGRlbGltaXRlci5cbiAgICAgKiAvLyBEaXNhYmxlIHN1cHBvcnQgYnkgcmVwbGFjaW5nIHRoZSBcImludGVycG9sYXRlXCIgZGVsaW1pdGVyLlxuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvICR7IHVzZXIgfSEnKTtcbiAgICAgKiBjb21waWxlZCh7ICd1c2VyJzogJ3BlYmJsZXMnIH0pO1xuICAgICAqIC8vID0+ICdoZWxsbyBwZWJibGVzISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSBiYWNrc2xhc2hlcyB0byB0cmVhdCBkZWxpbWl0ZXJzIGFzIHBsYWluIHRleHQuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnPCU9IFwiXFxcXDwlLSB2YWx1ZSAlXFxcXD5cIiAlPicpO1xuICAgICAqIGNvbXBpbGVkKHsgJ3ZhbHVlJzogJ2lnbm9yZWQnIH0pO1xuICAgICAqIC8vID0+ICc8JS0gdmFsdWUgJT4nXG4gICAgICpcbiAgICAgKiAvLyBVc2UgdGhlIGBpbXBvcnRzYCBvcHRpb24gdG8gaW1wb3J0IGBqUXVlcnlgIGFzIGBqcWAuXG4gICAgICogdmFyIHRleHQgPSAnPCUganEuZWFjaCh1c2VycywgZnVuY3Rpb24odXNlcikgeyAlPjxsaT48JS0gdXNlciAlPjwvbGk+PCUgfSk7ICU+JztcbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKHRleHQsIHsgJ2ltcG9ydHMnOiB7ICdqcSc6IGpRdWVyeSB9IH0pO1xuICAgICAqIGNvbXBpbGVkKHsgJ3VzZXJzJzogWydmcmVkJywgJ2Jhcm5leSddIH0pO1xuICAgICAqIC8vID0+ICc8bGk+ZnJlZDwvbGk+PGxpPmJhcm5leTwvbGk+J1xuICAgICAqXG4gICAgICogLy8gVXNlIHRoZSBgc291cmNlVVJMYCBvcHRpb24gdG8gc3BlY2lmeSBhIGN1c3RvbSBzb3VyY2VVUkwgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgKiB2YXIgY29tcGlsZWQgPSBfLnRlbXBsYXRlKCdoZWxsbyA8JT0gdXNlciAlPiEnLCB7ICdzb3VyY2VVUkwnOiAnL2Jhc2ljL2dyZWV0aW5nLmpzdCcgfSk7XG4gICAgICogY29tcGlsZWQoZGF0YSk7XG4gICAgICogLy8gPT4gRmluZCB0aGUgc291cmNlIG9mIFwiZ3JlZXRpbmcuanN0XCIgdW5kZXIgdGhlIFNvdXJjZXMgdGFiIG9yIFJlc291cmNlcyBwYW5lbCBvZiB0aGUgd2ViIGluc3BlY3Rvci5cbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHZhcmlhYmxlYCBvcHRpb24gdG8gZW5zdXJlIGEgd2l0aC1zdGF0ZW1lbnQgaXNuJ3QgdXNlZCBpbiB0aGUgY29tcGlsZWQgdGVtcGxhdGUuXG4gICAgICogdmFyIGNvbXBpbGVkID0gXy50ZW1wbGF0ZSgnaGkgPCU9IGRhdGEudXNlciAlPiEnLCB7ICd2YXJpYWJsZSc6ICdkYXRhJyB9KTtcbiAgICAgKiBjb21waWxlZC5zb3VyY2U7XG4gICAgICogLy8gPT4gZnVuY3Rpb24oZGF0YSkge1xuICAgICAqIC8vICAgdmFyIF9fdCwgX19wID0gJyc7XG4gICAgICogLy8gICBfX3AgKz0gJ2hpICcgKyAoKF9fdCA9ICggZGF0YS51c2VyICkpID09IG51bGwgPyAnJyA6IF9fdCkgKyAnISc7XG4gICAgICogLy8gICByZXR1cm4gX19wO1xuICAgICAqIC8vIH1cbiAgICAgKlxuICAgICAqIC8vIFVzZSBjdXN0b20gdGVtcGxhdGUgZGVsaW1pdGVycy5cbiAgICAgKiBfLnRlbXBsYXRlU2V0dGluZ3MuaW50ZXJwb2xhdGUgPSAve3soW1xcc1xcU10rPyl9fS9nO1xuICAgICAqIHZhciBjb21waWxlZCA9IF8udGVtcGxhdGUoJ2hlbGxvIHt7IHVzZXIgfX0hJyk7XG4gICAgICogY29tcGlsZWQoeyAndXNlcic6ICdtdXN0YWNoZScgfSk7XG4gICAgICogLy8gPT4gJ2hlbGxvIG11c3RhY2hlISdcbiAgICAgKlxuICAgICAqIC8vIFVzZSB0aGUgYHNvdXJjZWAgcHJvcGVydHkgdG8gaW5saW5lIGNvbXBpbGVkIHRlbXBsYXRlcyBmb3IgbWVhbmluZ2Z1bFxuICAgICAqIC8vIGxpbmUgbnVtYmVycyBpbiBlcnJvciBtZXNzYWdlcyBhbmQgc3RhY2sgdHJhY2VzLlxuICAgICAqIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdqc3QuanMnKSwgJ1xcXG4gICAgICogICB2YXIgSlNUID0ge1xcXG4gICAgICogICAgIFwibWFpblwiOiAnICsgXy50ZW1wbGF0ZShtYWluVGV4dCkuc291cmNlICsgJ1xcXG4gICAgICogICB9O1xcXG4gICAgICogJyk7XG4gICAgICovXG4gICAgZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nLCBvcHRpb25zLCBndWFyZCkge1xuICAgICAgLy8gQmFzZWQgb24gSm9obiBSZXNpZydzIGB0bXBsYCBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gKGh0dHA6Ly9lam9obi5vcmcvYmxvZy9qYXZhc2NyaXB0LW1pY3JvLXRlbXBsYXRpbmcvKVxuICAgICAgLy8gYW5kIExhdXJhIERva3Rvcm92YSdzIGRvVC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL29sYWRvL2RvVCkuXG4gICAgICB2YXIgc2V0dGluZ3MgPSBsb2Rhc2gudGVtcGxhdGVTZXR0aW5ncztcblxuICAgICAgaWYgKGd1YXJkICYmIGlzSXRlcmF0ZWVDYWxsKHN0cmluZywgb3B0aW9ucywgZ3VhcmQpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgb3B0aW9ucyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucywgc2V0dGluZ3MsIGN1c3RvbURlZmF1bHRzQXNzaWduSW4pO1xuXG4gICAgICB2YXIgaW1wb3J0cyA9IGFzc2lnbkluV2l0aCh7fSwgb3B0aW9ucy5pbXBvcnRzLCBzZXR0aW5ncy5pbXBvcnRzLCBjdXN0b21EZWZhdWx0c0Fzc2lnbkluKSxcbiAgICAgICAgICBpbXBvcnRzS2V5cyA9IGtleXMoaW1wb3J0cyksXG4gICAgICAgICAgaW1wb3J0c1ZhbHVlcyA9IGJhc2VWYWx1ZXMoaW1wb3J0cywgaW1wb3J0c0tleXMpO1xuXG4gICAgICB2YXIgaXNFc2NhcGluZyxcbiAgICAgICAgICBpc0V2YWx1YXRpbmcsXG4gICAgICAgICAgaW5kZXggPSAwLFxuICAgICAgICAgIGludGVycG9sYXRlID0gb3B0aW9ucy5pbnRlcnBvbGF0ZSB8fCByZU5vTWF0Y2gsXG4gICAgICAgICAgc291cmNlID0gXCJfX3AgKz0gJ1wiO1xuXG4gICAgICAvLyBDb21waWxlIHRoZSByZWdleHAgdG8gbWF0Y2ggZWFjaCBkZWxpbWl0ZXIuXG4gICAgICB2YXIgcmVEZWxpbWl0ZXJzID0gUmVnRXhwKFxuICAgICAgICAob3B0aW9ucy5lc2NhcGUgfHwgcmVOb01hdGNoKS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICBpbnRlcnBvbGF0ZS5zb3VyY2UgKyAnfCcgK1xuICAgICAgICAoaW50ZXJwb2xhdGUgPT09IHJlSW50ZXJwb2xhdGUgPyByZUVzVGVtcGxhdGUgOiByZU5vTWF0Y2gpLnNvdXJjZSArICd8JyArXG4gICAgICAgIChvcHRpb25zLmV2YWx1YXRlIHx8IHJlTm9NYXRjaCkuc291cmNlICsgJ3wkJ1xuICAgICAgLCAnZycpO1xuXG4gICAgICAvLyBVc2UgYSBzb3VyY2VVUkwgZm9yIGVhc2llciBkZWJ1Z2dpbmcuXG4gICAgICAvLyBUaGUgc291cmNlVVJMIGdldHMgaW5qZWN0ZWQgaW50byB0aGUgc291cmNlIHRoYXQncyBldmFsLWVkLCBzbyBiZSBjYXJlZnVsXG4gICAgICAvLyB0byBub3JtYWxpemUgYWxsIGtpbmRzIG9mIHdoaXRlc3BhY2UsIHNvIGUuZy4gbmV3bGluZXMgKGFuZCB1bmljb2RlIHZlcnNpb25zIG9mIGl0KSBjYW4ndCBzbmVhayBpblxuICAgICAgLy8gYW5kIGVzY2FwZSB0aGUgY29tbWVudCwgdGh1cyBpbmplY3RpbmcgY29kZSB0aGF0IGdldHMgZXZhbGVkLlxuICAgICAgdmFyIHNvdXJjZVVSTCA9ICcvLyMgc291cmNlVVJMPScgK1xuICAgICAgICAoaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCAnc291cmNlVVJMJylcbiAgICAgICAgICA/IChvcHRpb25zLnNvdXJjZVVSTCArICcnKS5yZXBsYWNlKC9cXHMvZywgJyAnKVxuICAgICAgICAgIDogKCdsb2Rhc2gudGVtcGxhdGVTb3VyY2VzWycgKyAoKyt0ZW1wbGF0ZUNvdW50ZXIpICsgJ10nKVxuICAgICAgICApICsgJ1xcbic7XG5cbiAgICAgIHN0cmluZy5yZXBsYWNlKHJlRGVsaW1pdGVycywgZnVuY3Rpb24obWF0Y2gsIGVzY2FwZVZhbHVlLCBpbnRlcnBvbGF0ZVZhbHVlLCBlc1RlbXBsYXRlVmFsdWUsIGV2YWx1YXRlVmFsdWUsIG9mZnNldCkge1xuICAgICAgICBpbnRlcnBvbGF0ZVZhbHVlIHx8IChpbnRlcnBvbGF0ZVZhbHVlID0gZXNUZW1wbGF0ZVZhbHVlKTtcblxuICAgICAgICAvLyBFc2NhcGUgY2hhcmFjdGVycyB0aGF0IGNhbid0IGJlIGluY2x1ZGVkIGluIHN0cmluZyBsaXRlcmFscy5cbiAgICAgICAgc291cmNlICs9IHN0cmluZy5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKHJlVW5lc2NhcGVkU3RyaW5nLCBlc2NhcGVTdHJpbmdDaGFyKTtcblxuICAgICAgICAvLyBSZXBsYWNlIGRlbGltaXRlcnMgd2l0aCBzbmlwcGV0cy5cbiAgICAgICAgaWYgKGVzY2FwZVZhbHVlKSB7XG4gICAgICAgICAgaXNFc2NhcGluZyA9IHRydWU7XG4gICAgICAgICAgc291cmNlICs9IFwiJyArXFxuX19lKFwiICsgZXNjYXBlVmFsdWUgKyBcIikgK1xcbidcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZhbHVhdGVWYWx1ZSkge1xuICAgICAgICAgIGlzRXZhbHVhdGluZyA9IHRydWU7XG4gICAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlVmFsdWUgKyBcIjtcXG5fX3AgKz0gJ1wiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnRlcnBvbGF0ZVZhbHVlKSB7XG4gICAgICAgICAgc291cmNlICs9IFwiJyArXFxuKChfX3QgPSAoXCIgKyBpbnRlcnBvbGF0ZVZhbHVlICsgXCIpKSA9PSBudWxsID8gJycgOiBfX3QpICtcXG4nXCI7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSBvZmZzZXQgKyBtYXRjaC5sZW5ndGg7XG5cbiAgICAgICAgLy8gVGhlIEpTIGVuZ2luZSBlbWJlZGRlZCBpbiBBZG9iZSBwcm9kdWN0cyBuZWVkcyBgbWF0Y2hgIHJldHVybmVkIGluXG4gICAgICAgIC8vIG9yZGVyIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3QgYG9mZnNldGAgdmFsdWUuXG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH0pO1xuXG4gICAgICBzb3VyY2UgKz0gXCInO1xcblwiO1xuXG4gICAgICAvLyBJZiBgdmFyaWFibGVgIGlzIG5vdCBzcGVjaWZpZWQgd3JhcCBhIHdpdGgtc3RhdGVtZW50IGFyb3VuZCB0aGUgZ2VuZXJhdGVkXG4gICAgICAvLyBjb2RlIHRvIGFkZCB0aGUgZGF0YSBvYmplY3QgdG8gdGhlIHRvcCBvZiB0aGUgc2NvcGUgY2hhaW4uXG4gICAgICB2YXIgdmFyaWFibGUgPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsICd2YXJpYWJsZScpICYmIG9wdGlvbnMudmFyaWFibGU7XG4gICAgICBpZiAoIXZhcmlhYmxlKSB7XG4gICAgICAgIHNvdXJjZSA9ICd3aXRoIChvYmopIHtcXG4nICsgc291cmNlICsgJ1xcbn1cXG4nO1xuICAgICAgfVxuICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgYSBmb3JiaWRkZW4gY2hhcmFjdGVyIHdhcyBmb3VuZCBpbiBgdmFyaWFibGVgLCB0byBwcmV2ZW50XG4gICAgICAvLyBwb3RlbnRpYWwgY29tbWFuZCBpbmplY3Rpb24gYXR0YWNrcy5cbiAgICAgIGVsc2UgaWYgKHJlRm9yYmlkZGVuSWRlbnRpZmllckNoYXJzLnRlc3QodmFyaWFibGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTlZBTElEX1RFTVBMX1ZBUl9FUlJPUl9URVhUKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYW51cCBjb2RlIGJ5IHN0cmlwcGluZyBlbXB0eSBzdHJpbmdzLlxuICAgICAgc291cmNlID0gKGlzRXZhbHVhdGluZyA/IHNvdXJjZS5yZXBsYWNlKHJlRW1wdHlTdHJpbmdMZWFkaW5nLCAnJykgOiBzb3VyY2UpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdNaWRkbGUsICckMScpXG4gICAgICAgIC5yZXBsYWNlKHJlRW1wdHlTdHJpbmdUcmFpbGluZywgJyQxOycpO1xuXG4gICAgICAvLyBGcmFtZSBjb2RlIGFzIHRoZSBmdW5jdGlvbiBib2R5LlxuICAgICAgc291cmNlID0gJ2Z1bmN0aW9uKCcgKyAodmFyaWFibGUgfHwgJ29iaicpICsgJykge1xcbicgK1xuICAgICAgICAodmFyaWFibGVcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiAnb2JqIHx8IChvYmogPSB7fSk7XFxuJ1xuICAgICAgICApICtcbiAgICAgICAgXCJ2YXIgX190LCBfX3AgPSAnJ1wiICtcbiAgICAgICAgKGlzRXNjYXBpbmdcbiAgICAgICAgICAgPyAnLCBfX2UgPSBfLmVzY2FwZSdcbiAgICAgICAgICAgOiAnJ1xuICAgICAgICApICtcbiAgICAgICAgKGlzRXZhbHVhdGluZ1xuICAgICAgICAgID8gJywgX19qID0gQXJyYXkucHJvdG90eXBlLmpvaW47XFxuJyArXG4gICAgICAgICAgICBcImZ1bmN0aW9uIHByaW50KCkgeyBfX3AgKz0gX19qLmNhbGwoYXJndW1lbnRzLCAnJykgfVxcblwiXG4gICAgICAgICAgOiAnO1xcbidcbiAgICAgICAgKSArXG4gICAgICAgIHNvdXJjZSArXG4gICAgICAgICdyZXR1cm4gX19wXFxufSc7XG5cbiAgICAgIHZhciByZXN1bHQgPSBhdHRlbXB0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb24oaW1wb3J0c0tleXMsIHNvdXJjZVVSTCArICdyZXR1cm4gJyArIHNvdXJjZSlcbiAgICAgICAgICAuYXBwbHkodW5kZWZpbmVkLCBpbXBvcnRzVmFsdWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBmdW5jdGlvbidzIHNvdXJjZSBieSBpdHMgYHRvU3RyaW5nYCBtZXRob2Qgb3JcbiAgICAgIC8vIHRoZSBgc291cmNlYCBwcm9wZXJ0eSBhcyBhIGNvbnZlbmllbmNlIGZvciBpbmxpbmluZyBjb21waWxlZCB0ZW1wbGF0ZXMuXG4gICAgICByZXN1bHQuc291cmNlID0gc291cmNlO1xuICAgICAgaWYgKGlzRXJyb3IocmVzdWx0KSkge1xuICAgICAgICB0aHJvdyByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byBsb3dlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9Mb3dlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvTG93ZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGxvd2VyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b0xvd2VyKCctLUZvby1CYXItLScpO1xuICAgICAqIC8vID0+ICctLWZvby1iYXItLSdcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ2Zvb2JhcidcbiAgICAgKlxuICAgICAqIF8udG9Mb3dlcignX19GT09fQkFSX18nKTtcbiAgICAgKiAvLyA9PiAnX19mb29fYmFyX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9Mb3dlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBhIHdob2xlLCB0byB1cHBlciBjYXNlIGp1c3QgbGlrZVxuICAgICAqIFtTdHJpbmcjdG9VcHBlckNhc2VdKGh0dHBzOi8vbWRuLmlvL3RvVXBwZXJDYXNlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBTdHJpbmdcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHVwcGVyIGNhc2VkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50b1VwcGVyKCctLWZvby1iYXItLScpO1xuICAgICAqIC8vID0+ICctLUZPTy1CQVItLSdcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignZm9vQmFyJyk7XG4gICAgICogLy8gPT4gJ0ZPT0JBUidcbiAgICAgKlxuICAgICAqIF8udG9VcHBlcignX19mb29fYmFyX18nKTtcbiAgICAgKiAvLyA9PiAnX19GT09fQkFSX18nXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9VcHBlcih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBvciBzcGVjaWZpZWQgY2hhcmFjdGVycyBmcm9tIGBzdHJpbmdgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGFycz13aGl0ZXNwYWNlXSBUaGUgY2hhcmFjdGVycyB0byB0cmltLlxuICAgICAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udHJpbSgnICBhYmMgICcpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLnRyaW0oJy1fLWFiYy1fLScsICdfLScpO1xuICAgICAqIC8vID0+ICdhYmMnXG4gICAgICpcbiAgICAgKiBfLm1hcChbJyAgZm9vICAnLCAnICBiYXIgICddLCBfLnRyaW0pO1xuICAgICAqIC8vID0+IFsnZm9vJywgJ2JhciddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHJpbmcsIGNoYXJzLCBndWFyZCkge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIGlmIChzdHJpbmcgJiYgKGd1YXJkIHx8IGNoYXJzID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHJldHVybiBiYXNlVHJpbShzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKCFzdHJpbmcgfHwgIShjaGFycyA9IGJhc2VUb1N0cmluZyhjaGFycykpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgICB9XG4gICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKSxcbiAgICAgICAgICBjaHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShjaGFycyksXG4gICAgICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgY2hyU3ltYm9scyksXG4gICAgICAgICAgZW5kID0gY2hhcnNFbmRJbmRleChzdHJTeW1ib2xzLCBjaHJTeW1ib2xzKSArIDE7XG5cbiAgICAgIHJldHVybiBjYXN0U2xpY2Uoc3RyU3ltYm9scywgc3RhcnQsIGVuZCkuam9pbignJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0cmFpbGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmltRW5kKCcgIGFiYyAgJyk7XG4gICAgICogLy8gPT4gJyAgYWJjJ1xuICAgICAqXG4gICAgICogXy50cmltRW5kKCctXy1hYmMtXy0nLCAnXy0nKTtcbiAgICAgKiAvLyA9PiAnLV8tYWJjJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHRyaW1FbmQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0cmluZyB8fCAhKGNoYXJzID0gYmFzZVRvU3RyaW5nKGNoYXJzKSkpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgIH1cbiAgICAgIHZhciBzdHJTeW1ib2xzID0gc3RyaW5nVG9BcnJheShzdHJpbmcpLFxuICAgICAgICAgIGVuZCA9IGNoYXJzRW5kSW5kZXgoc3RyU3ltYm9scywgc3RyaW5nVG9BcnJheShjaGFycykpICsgMTtcblxuICAgICAgcmV0dXJuIGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbGVhZGluZyB3aGl0ZXNwYWNlIG9yIHNwZWNpZmllZCBjaGFyYWN0ZXJzIGZyb20gYHN0cmluZ2AuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoYXJzPXdoaXRlc3BhY2VdIFRoZSBjaGFyYWN0ZXJzIHRvIHRyaW0uXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cmltU3RhcnQoJyAgYWJjICAnKTtcbiAgICAgKiAvLyA9PiAnYWJjICAnXG4gICAgICpcbiAgICAgKiBfLnRyaW1TdGFydCgnLV8tYWJjLV8tJywgJ18tJyk7XG4gICAgICogLy8gPT4gJ2FiYy1fLSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltU3RhcnQoc3RyaW5nLCBjaGFycywgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBpZiAoc3RyaW5nICYmIChndWFyZCB8fCBjaGFycyA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaW5nIHx8ICEoY2hhcnMgPSBiYXNlVG9TdHJpbmcoY2hhcnMpKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyksXG4gICAgICAgICAgc3RhcnQgPSBjaGFyc1N0YXJ0SW5kZXgoc3RyU3ltYm9scywgc3RyaW5nVG9BcnJheShjaGFycykpO1xuXG4gICAgICByZXR1cm4gY2FzdFNsaWNlKHN0clN5bWJvbHMsIHN0YXJ0KS5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcnVuY2F0ZXMgYHN0cmluZ2AgaWYgaXQncyBsb25nZXIgdGhhbiB0aGUgZ2l2ZW4gbWF4aW11bSBzdHJpbmcgbGVuZ3RoLlxuICAgICAqIFRoZSBsYXN0IGNoYXJhY3RlcnMgb2YgdGhlIHRydW5jYXRlZCBzdHJpbmcgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG9taXNzaW9uXG4gICAgICogc3RyaW5nIHdoaWNoIGRlZmF1bHRzIHRvIFwiLi4uXCIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdHJ1bmNhdGUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmxlbmd0aD0zMF0gVGhlIG1heGltdW0gc3RyaW5nIGxlbmd0aC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub21pc3Npb249Jy4uLiddIFRoZSBzdHJpbmcgdG8gaW5kaWNhdGUgdGV4dCBpcyBvbWl0dGVkLlxuICAgICAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW29wdGlvbnMuc2VwYXJhdG9yXSBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gdHJ1bmNhdGUgdG8uXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJ1bmNhdGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycpO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm8uLi4nXG4gICAgICpcbiAgICAgKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICAgICAqICAgJ2xlbmd0aCc6IDI0LFxuICAgICAqICAgJ3NlcGFyYXRvcic6ICcgJ1xuICAgICAqIH0pO1xuICAgICAqIC8vID0+ICdoaS1kaWRkbHktaG8gdGhlcmUsLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdsZW5ndGgnOiAyNCxcbiAgICAgKiAgICdzZXBhcmF0b3InOiAvLD8gKy9cbiAgICAgKiB9KTtcbiAgICAgKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLi4uJ1xuICAgICAqXG4gICAgICogXy50cnVuY2F0ZSgnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvcmlubycsIHtcbiAgICAgKiAgICdvbWlzc2lvbic6ICcgWy4uLl0nXG4gICAgICogfSk7XG4gICAgICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZyBbLi4uXSdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBsZW5ndGggPSBERUZBVUxUX1RSVU5DX0xFTkdUSCxcbiAgICAgICAgICBvbWlzc2lvbiA9IERFRkFVTFRfVFJVTkNfT01JU1NJT047XG5cbiAgICAgIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgICAgICB2YXIgc2VwYXJhdG9yID0gJ3NlcGFyYXRvcicgaW4gb3B0aW9ucyA/IG9wdGlvbnMuc2VwYXJhdG9yIDogc2VwYXJhdG9yO1xuICAgICAgICBsZW5ndGggPSAnbGVuZ3RoJyBpbiBvcHRpb25zID8gdG9JbnRlZ2VyKG9wdGlvbnMubGVuZ3RoKSA6IGxlbmd0aDtcbiAgICAgICAgb21pc3Npb24gPSAnb21pc3Npb24nIGluIG9wdGlvbnMgPyBiYXNlVG9TdHJpbmcob3B0aW9ucy5vbWlzc2lvbikgOiBvbWlzc2lvbjtcbiAgICAgIH1cbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIHZhciBzdHJMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICAgICAgaWYgKGhhc1VuaWNvZGUoc3RyaW5nKSkge1xuICAgICAgICB2YXIgc3RyU3ltYm9scyA9IHN0cmluZ1RvQXJyYXkoc3RyaW5nKTtcbiAgICAgICAgc3RyTGVuZ3RoID0gc3RyU3ltYm9scy5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAobGVuZ3RoID49IHN0ckxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgfVxuICAgICAgdmFyIGVuZCA9IGxlbmd0aCAtIHN0cmluZ1NpemUob21pc3Npb24pO1xuICAgICAgaWYgKGVuZCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdCA9IHN0clN5bWJvbHNcbiAgICAgICAgPyBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMCwgZW5kKS5qb2luKCcnKVxuICAgICAgICA6IHN0cmluZy5zbGljZSgwLCBlbmQpO1xuXG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uO1xuICAgICAgfVxuICAgICAgaWYgKHN0clN5bWJvbHMpIHtcbiAgICAgICAgZW5kICs9IChyZXN1bHQubGVuZ3RoIC0gZW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgICAgIGlmIChzdHJpbmcuc2xpY2UoZW5kKS5zZWFyY2goc2VwYXJhdG9yKSkge1xuICAgICAgICAgIHZhciBtYXRjaCxcbiAgICAgICAgICAgICAgc3Vic3RyaW5nID0gcmVzdWx0O1xuXG4gICAgICAgICAgaWYgKCFzZXBhcmF0b3IuZ2xvYmFsKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgdG9TdHJpbmcocmVGbGFncy5leGVjKHNlcGFyYXRvcikpICsgJ2cnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VwYXJhdG9yLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHNlcGFyYXRvci5leGVjKHN1YnN0cmluZykpKSB7XG4gICAgICAgICAgICB2YXIgbmV3RW5kID0gbWF0Y2guaW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBuZXdFbmQgPT09IHVuZGVmaW5lZCA/IGVuZCA6IG5ld0VuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nLmluZGV4T2YoYmFzZVRvU3RyaW5nKHNlcGFyYXRvciksIGVuZCkgIT0gZW5kKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZihzZXBhcmF0b3IpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQgKyBvbWlzc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW52ZXJzZSBvZiBgXy5lc2NhcGVgOyB0aGlzIG1ldGhvZCBjb252ZXJ0cyB0aGUgSFRNTCBlbnRpdGllc1xuICAgICAqIGAmYW1wO2AsIGAmbHQ7YCwgYCZndDtgLCBgJnF1b3Q7YCwgYW5kIGAmIzM5O2AgaW4gYHN0cmluZ2AgdG9cbiAgICAgKiB0aGVpciBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogTm8gb3RoZXIgSFRNTCBlbnRpdGllcyBhcmUgdW5lc2NhcGVkLiBUbyB1bmVzY2FwZSBhZGRpdGlvbmFsXG4gICAgICogSFRNTCBlbnRpdGllcyB1c2UgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IGxpa2UgW19oZV9dKGh0dHBzOi8vbXRocy5iZS9oZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMC42LjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gdW5lc2NhcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdW5lc2NhcGVkIHN0cmluZy5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy51bmVzY2FwZSgnZnJlZCwgYmFybmV5LCAmYW1wOyBwZWJibGVzJyk7XG4gICAgICogLy8gPT4gJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJ1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIHVuZXNjYXBlKHN0cmluZykge1xuICAgICAgc3RyaW5nID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHJldHVybiAoc3RyaW5nICYmIHJlSGFzRXNjYXBlZEh0bWwudGVzdChzdHJpbmcpKVxuICAgICAgICA/IHN0cmluZy5yZXBsYWNlKHJlRXNjYXBlZEh0bWwsIHVuZXNjYXBlSHRtbENoYXIpXG4gICAgICAgIDogc3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnRzIGBzdHJpbmdgLCBhcyBzcGFjZSBzZXBhcmF0ZWQgd29yZHMsIHRvIHVwcGVyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1cHBlciBjYXNlZCBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udXBwZXJDYXNlKCctLWZvby1iYXInKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKlxuICAgICAqIF8udXBwZXJDYXNlKCdmb29CYXInKTtcbiAgICAgKiAvLyA9PiAnRk9PIEJBUidcbiAgICAgKlxuICAgICAqIF8udXBwZXJDYXNlKCdfX2Zvb19iYXJfXycpO1xuICAgICAqIC8vID0+ICdGT08gQkFSJ1xuICAgICAqL1xuICAgIHZhciB1cHBlckNhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiByZXN1bHQgKyAoaW5kZXggPyAnICcgOiAnJykgKyB3b3JkLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgU3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiAnRnJlZCdcbiAgICAgKlxuICAgICAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICAgICAqIC8vID0+ICdGUkVEJ1xuICAgICAqL1xuICAgIHZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG4gICAgLyoqXG4gICAgICogU3BsaXRzIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gICAgICogQHBhcmFtIHtSZWdFeHB8c3RyaW5nfSBbcGF0dGVybl0gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggd29yZHMuXG4gICAgICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHdvcmRzIG9mIGBzdHJpbmdgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycpO1xuICAgICAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAncGViYmxlcyddXG4gICAgICpcbiAgICAgKiBfLndvcmRzKCdmcmVkLCBiYXJuZXksICYgcGViYmxlcycsIC9bXiwgXSsvZyk7XG4gICAgICogLy8gPT4gWydmcmVkJywgJ2Jhcm5leScsICcmJywgJ3BlYmJsZXMnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHdvcmRzKHN0cmluZywgcGF0dGVybiwgZ3VhcmQpIHtcbiAgICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICBwYXR0ZXJuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBwYXR0ZXJuO1xuXG4gICAgICBpZiAocGF0dGVybiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBoYXNVbmljb2RlV29yZChzdHJpbmcpID8gdW5pY29kZVdvcmRzKHN0cmluZykgOiBhc2NpaVdvcmRzKHN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyaW5nLm1hdGNoKHBhdHRlcm4pIHx8IFtdO1xuICAgIH1cblxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIGludm9rZSBgZnVuY2AsIHJldHVybmluZyBlaXRoZXIgdGhlIHJlc3VsdCBvciB0aGUgY2F1Z2h0IGVycm9yXG4gICAgICogb2JqZWN0LiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIGBmdW5jYCB3aGVuIGl0J3MgaW52b2tlZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXR0ZW1wdC5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYGZ1bmNgIHJlc3VsdCBvciBlcnJvciBvYmplY3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIC8vIEF2b2lkIHRocm93aW5nIGVycm9ycyBmb3IgaW52YWxpZCBzZWxlY3RvcnMuXG4gICAgICogdmFyIGVsZW1lbnRzID0gXy5hdHRlbXB0KGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICogICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgICogfSwgJz5fPicpO1xuICAgICAqXG4gICAgICogaWYgKF8uaXNFcnJvcihlbGVtZW50cykpIHtcbiAgICAgKiAgIGVsZW1lbnRzID0gW107XG4gICAgICogfVxuICAgICAqL1xuICAgIHZhciBhdHRlbXB0ID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgYXJncykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBpc0Vycm9yKGUpID8gZSA6IG5ldyBFcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEJpbmRzIG1ldGhvZHMgb2YgYW4gb2JqZWN0IHRvIHRoZSBvYmplY3QgaXRzZWxmLCBvdmVyd3JpdGluZyB0aGUgZXhpc3RpbmdcbiAgICAgKiBtZXRob2QuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgYm91bmQgZnVuY3Rpb25zLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gYmluZCBhbmQgYXNzaWduIHRoZSBib3VuZCBtZXRob2RzIHRvLlxuICAgICAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IG1ldGhvZE5hbWVzIFRoZSBvYmplY3QgbWV0aG9kIG5hbWVzIHRvIGJpbmQuXG4gICAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIHZpZXcgPSB7XG4gICAgICogICAnbGFiZWwnOiAnZG9jcycsXG4gICAgICogICAnY2xpY2snOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ2NsaWNrZWQgJyArIHRoaXMubGFiZWwpO1xuICAgICAqICAgfVxuICAgICAqIH07XG4gICAgICpcbiAgICAgKiBfLmJpbmRBbGwodmlldywgWydjbGljayddKTtcbiAgICAgKiBqUXVlcnkoZWxlbWVudCkub24oJ2NsaWNrJywgdmlldy5jbGljayk7XG4gICAgICogLy8gPT4gTG9ncyAnY2xpY2tlZCBkb2NzJyB3aGVuIGNsaWNrZWQuXG4gICAgICovXG4gICAgdmFyIGJpbmRBbGwgPSBmbGF0UmVzdChmdW5jdGlvbihvYmplY3QsIG1ldGhvZE5hbWVzKSB7XG4gICAgICBhcnJheUVhY2gobWV0aG9kTmFtZXMsIGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBrZXkgPSB0b0tleShrZXkpO1xuICAgICAgICBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIGJpbmQob2JqZWN0W2tleV0sIG9iamVjdCkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXRlcmF0ZXMgb3ZlciBgcGFpcnNgIGFuZCBpbnZva2VzIHRoZSBjb3JyZXNwb25kaW5nXG4gICAgICogZnVuY3Rpb24gb2YgdGhlIGZpcnN0IHByZWRpY2F0ZSB0byByZXR1cm4gdHJ1dGh5LiBUaGUgcHJlZGljYXRlLWZ1bmN0aW9uXG4gICAgICogcGFpcnMgYXJlIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgYW5kIGFyZ3VtZW50cyBvZiB0aGUgY3JlYXRlZFxuICAgICAqIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBwYWlycyBUaGUgcHJlZGljYXRlLWZ1bmN0aW9uIHBhaXJzLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLmNvbmQoW1xuICAgICAqICAgW18ubWF0Y2hlcyh7ICdhJzogMSB9KSwgICAgICAgICAgIF8uY29uc3RhbnQoJ21hdGNoZXMgQScpXSxcbiAgICAgKiAgIFtfLmNvbmZvcm1zKHsgJ2InOiBfLmlzTnVtYmVyIH0pLCBfLmNvbnN0YW50KCdtYXRjaGVzIEInKV0sXG4gICAgICogICBbXy5zdHViVHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgXy5jb25zdGFudCgnbm8gbWF0Y2gnKV1cbiAgICAgKiBdKTtcbiAgICAgKlxuICAgICAqIGZ1bmMoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAgICAgKiAvLyA9PiAnbWF0Y2hlcyBBJ1xuICAgICAqXG4gICAgICogZnVuYyh7ICdhJzogMCwgJ2InOiAxIH0pO1xuICAgICAqIC8vID0+ICdtYXRjaGVzIEInXG4gICAgICpcbiAgICAgKiBmdW5jKHsgJ2EnOiAnMScsICdiJzogJzInIH0pO1xuICAgICAqIC8vID0+ICdubyBtYXRjaCdcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb25kKHBhaXJzKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gcGFpcnMgPT0gbnVsbCA/IDAgOiBwYWlycy5sZW5ndGgsXG4gICAgICAgICAgdG9JdGVyYXRlZSA9IGdldEl0ZXJhdGVlKCk7XG5cbiAgICAgIHBhaXJzID0gIWxlbmd0aCA/IFtdIDogYXJyYXlNYXAocGFpcnMsIGZ1bmN0aW9uKHBhaXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYWlyWzFdICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0b0l0ZXJhdGVlKHBhaXJbMF0pLCBwYWlyWzFdXTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcGFpciA9IHBhaXJzW2luZGV4XTtcbiAgICAgICAgICBpZiAoYXBwbHkocGFpclswXSwgdGhpcywgYXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBseShwYWlyWzFdLCB0aGlzLCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdGhlIHByZWRpY2F0ZSBwcm9wZXJ0aWVzIG9mIGBzb3VyY2VgIHdpdGhcbiAgICAgKiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB2YWx1ZXMgb2YgYSBnaXZlbiBvYmplY3QsIHJldHVybmluZyBgdHJ1ZWAgaWZcbiAgICAgKiBhbGwgcHJlZGljYXRlcyByZXR1cm4gdHJ1dGh5LCBlbHNlIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogVGhlIGNyZWF0ZWQgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBgXy5jb25mb3Jtc1RvYCB3aXRoXG4gICAgICogYHNvdXJjZWAgcGFydGlhbGx5IGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSBwcmVkaWNhdGVzIHRvIGNvbmZvcm0gdG8uXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbXG4gICAgICogICB7ICdhJzogMiwgJ2InOiAxIH0sXG4gICAgICogICB7ICdhJzogMSwgJ2InOiAyIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5jb25mb3Jtcyh7ICdiJzogZnVuY3Rpb24obikgeyByZXR1cm4gbiA+IDE7IH0gfSkpO1xuICAgICAqIC8vID0+IFt7ICdhJzogMSwgJ2InOiAyIH1dXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uZm9ybXMoc291cmNlKSB7XG4gICAgICByZXR1cm4gYmFzZUNvbmZvcm1zKGJhc2VDbG9uZShzb3VyY2UsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAyLjQuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICAgICAqXG4gICAgICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgYHZhbHVlYCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGRlZmF1bHQgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGluXG4gICAgICogaXRzIHBsYWNlLiBUaGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaWYgYHZhbHVlYCBpcyBgTmFOYCwgYG51bGxgLFxuICAgICAqIG9yIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTQuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gICAgICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUgVGhlIGRlZmF1bHQgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLmRlZmF1bHRUbygxLCAxMCk7XG4gICAgICogLy8gPT4gMVxuICAgICAqXG4gICAgICogXy5kZWZhdWx0VG8odW5kZWZpbmVkLCAxMCk7XG4gICAgICogLy8gPT4gMTBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkZWZhdWx0VG8odmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGdpdmVuIGZ1bmN0aW9uc1xuICAgICAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBjcmVhdGVkIGZ1bmN0aW9uLCB3aGVyZSBlYWNoIHN1Y2Nlc3NpdmVcbiAgICAgKiBpbnZvY2F0aW9uIGlzIHN1cHBsaWVkIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHByZXZpb3VzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0gey4uLihGdW5jdGlvbnxGdW5jdGlvbltdKX0gW2Z1bmNzXSBUaGUgZnVuY3Rpb25zIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3NpdGUgZnVuY3Rpb24uXG4gICAgICogQHNlZSBfLmZsb3dSaWdodFxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3coW18uYWRkLCBzcXVhcmVdKTtcbiAgICAgKiBhZGRTcXVhcmUoMSwgMik7XG4gICAgICogLy8gPT4gOVxuICAgICAqL1xuICAgIHZhciBmbG93ID0gY3JlYXRlRmxvdygpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5mbG93YCBleGNlcHQgdGhhdCBpdCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdFxuICAgICAqIGludm9rZXMgdGhlIGdpdmVuIGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbZnVuY3NdIFRoZSBmdW5jdGlvbnMgdG8gaW52b2tlLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbXBvc2l0ZSBmdW5jdGlvbi5cbiAgICAgKiBAc2VlIF8uZmxvd1xuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICAgICAqICAgcmV0dXJuIG4gKiBuO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHZhciBhZGRTcXVhcmUgPSBfLmZsb3dSaWdodChbc3F1YXJlLCBfLmFkZF0pO1xuICAgICAqIGFkZFNxdWFyZSgxLCAyKTtcbiAgICAgKiAvLyA9PiA5XG4gICAgICovXG4gICAgdmFyIGZsb3dSaWdodCA9IGNyZWF0ZUZsb3codHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCB0aGUgYXJndW1lbnRzIG9mIHRoZSBjcmVhdGVkXG4gICAgICogZnVuY3Rpb24uIElmIGBmdW5jYCBpcyBhIHByb3BlcnR5IG5hbWUsIHRoZSBjcmVhdGVkIGZ1bmN0aW9uIHJldHVybnMgdGhlXG4gICAgICogcHJvcGVydHkgdmFsdWUgZm9yIGEgZ2l2ZW4gZWxlbWVudC4gSWYgYGZ1bmNgIGlzIGFuIGFycmF5IG9yIG9iamVjdCwgdGhlXG4gICAgICogY3JlYXRlZCBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBmb3IgZWxlbWVudHMgdGhhdCBjb250YWluIHRoZSBlcXVpdmFsZW50XG4gICAgICogc291cmNlIHByb3BlcnRpZXMsIG90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Kn0gW2Z1bmM9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBjYWxsYmFjay5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGNhbGxiYWNrLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgdXNlcnMgPSBbXG4gICAgICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAgICAgKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICAgICAqIF8uZmlsdGVyKHVzZXJzLCBfLml0ZXJhdGVlKHsgJ3VzZXInOiAnYmFybmV5JywgJ2FjdGl2ZSc6IHRydWUgfSkpO1xuICAgICAqIC8vID0+IFt7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfV1cbiAgICAgKlxuICAgICAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLmZpbHRlcih1c2VycywgXy5pdGVyYXRlZShbJ3VzZXInLCAnZnJlZCddKSk7XG4gICAgICogLy8gPT4gW3sgJ3VzZXInOiAnZnJlZCcsICdhZ2UnOiA0MCB9XVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXAodXNlcnMsIF8uaXRlcmF0ZWUoJ3VzZXInKSk7XG4gICAgICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gICAgICpcbiAgICAgKiAvLyBDcmVhdGUgY3VzdG9tIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gICAgICogXy5pdGVyYXRlZSA9IF8ud3JhcChfLml0ZXJhdGVlLCBmdW5jdGlvbihpdGVyYXRlZSwgZnVuYykge1xuICAgICAqICAgcmV0dXJuICFfLmlzUmVnRXhwKGZ1bmMpID8gaXRlcmF0ZWUoZnVuYykgOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgKiAgICAgcmV0dXJuIGZ1bmMudGVzdChzdHJpbmcpO1xuICAgICAqICAgfTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIF8uZmlsdGVyKFsnYWJjJywgJ2RlZiddLCAvZWYvKTtcbiAgICAgKiAvLyA9PiBbJ2RlZiddXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXRlcmF0ZWUoZnVuYykge1xuICAgICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh0eXBlb2YgZnVuYyA9PSAnZnVuY3Rpb24nID8gZnVuYyA6IGJhc2VDbG9uZShmdW5jLCBDTE9ORV9ERUVQX0ZMQUcpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyBhIHBhcnRpYWwgZGVlcCBjb21wYXJpc29uIGJldHdlZW4gYSBnaXZlblxuICAgICAqIG9iamVjdCBhbmQgYHNvdXJjZWAsIHJldHVybmluZyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgZXF1aXZhbGVudFxuICAgICAqIHByb3BlcnR5IHZhbHVlcywgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYF8uaXNNYXRjaGAgd2l0aCBgc291cmNlYFxuICAgICAqIHBhcnRpYWxseSBhcHBsaWVkLlxuICAgICAqXG4gICAgICogUGFydGlhbCBjb21wYXJpc29ucyB3aWxsIG1hdGNoIGVtcHR5IGFycmF5IGFuZCBlbXB0eSBvYmplY3QgYHNvdXJjZWBcbiAgICAgKiB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZSBgXy5pc0VxdWFsYFxuICAgICAqIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE11bHRpcGxlIHZhbHVlcyBjYW4gYmUgY2hlY2tlZCBieSBjb21iaW5pbmcgc2V2ZXJhbCBtYXRjaGVyc1xuICAgICAqIHVzaW5nIGBfLm92ZXJTb21lYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMC4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbHRlcihvYmplY3RzLCBfLm1hdGNoZXMoeyAnYSc6IDQsICdjJzogNiB9KSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiA0LCAnYic6IDUsICdjJzogNiB9XVxuICAgICAqXG4gICAgICogLy8gQ2hlY2tpbmcgZm9yIHNldmVyYWwgcG9zc2libGUgdmFsdWVzXG4gICAgICogXy5maWx0ZXIob2JqZWN0cywgXy5vdmVyU29tZShbXy5tYXRjaGVzKHsgJ2EnOiAxIH0pLCBfLm1hdGNoZXMoeyAnYSc6IDQgfSldKSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LCB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIGJhc2VNYXRjaGVzKGJhc2VDbG9uZShzb3VyY2UsIENMT05FX0RFRVBfRkxBRykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGEgcGFydGlhbCBkZWVwIGNvbXBhcmlzb24gYmV0d2VlbiB0aGVcbiAgICAgKiB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QgdG8gYHNyY1ZhbHVlYCwgcmV0dXJuaW5nIGB0cnVlYCBpZiB0aGVcbiAgICAgKiBvYmplY3QgdmFsdWUgaXMgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFBhcnRpYWwgY29tcGFyaXNvbnMgd2lsbCBtYXRjaCBlbXB0eSBhcnJheSBhbmQgZW1wdHkgb2JqZWN0XG4gICAgICogYHNyY1ZhbHVlYCB2YWx1ZXMgYWdhaW5zdCBhbnkgYXJyYXkgb3Igb2JqZWN0IHZhbHVlLCByZXNwZWN0aXZlbHkuIFNlZVxuICAgICAqIGBfLmlzRXF1YWxgIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZhbHVlIGNvbXBhcmlzb25zLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIE11bHRpcGxlIHZhbHVlcyBjYW4gYmUgY2hlY2tlZCBieSBjb21iaW5pbmcgc2V2ZXJhbCBtYXRjaGVyc1xuICAgICAqIHVzaW5nIGBfLm92ZXJTb21lYFxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMi4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICAgICAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH0sXG4gICAgICogICB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfVxuICAgICAqIF07XG4gICAgICpcbiAgICAgKiBfLmZpbmQob2JqZWN0cywgXy5tYXRjaGVzUHJvcGVydHkoJ2EnLCA0KSk7XG4gICAgICogLy8gPT4geyAnYSc6IDQsICdiJzogNSwgJ2MnOiA2IH1cbiAgICAgKlxuICAgICAqIC8vIENoZWNraW5nIGZvciBzZXZlcmFsIHBvc3NpYmxlIHZhbHVlc1xuICAgICAqIF8uZmlsdGVyKG9iamVjdHMsIF8ub3ZlclNvbWUoW18ubWF0Y2hlc1Byb3BlcnR5KCdhJywgMSksIF8ubWF0Y2hlc1Byb3BlcnR5KCdhJywgNCldKSk7XG4gICAgICogLy8gPT4gW3sgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9LCB7ICdhJzogNCwgJ2InOiA1LCAnYyc6IDYgfV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcbiAgICAgIHJldHVybiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIGJhc2VDbG9uZShzcmNWYWx1ZSwgQ0xPTkVfREVFUF9GTEFHKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgbWV0aG9kIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAgICAgKiBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIHRvIHRoZSBpbnZva2VkIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjcuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIG1ldGhvZCB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIHsuLi4qfSBbYXJnc10gVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgdGhlIG1ldGhvZCB3aXRoLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGludm9rZXIgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiBfLmNvbnN0YW50KDIpIH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogXy5jb25zdGFudCgxKSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5tZXRob2QoJ2EuYicpKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKlxuICAgICAqIF8ubWFwKG9iamVjdHMsIF8ubWV0aG9kKFsnYScsICdiJ10pKTtcbiAgICAgKiAvLyA9PiBbMiwgMV1cbiAgICAgKi9cbiAgICB2YXIgbWV0aG9kID0gYmFzZVJlc3QoZnVuY3Rpb24ocGF0aCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgICAgICByZXR1cm4gYmFzZUludm9rZShvYmplY3QsIHBhdGgsIGFyZ3MpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBvcHBvc2l0ZSBvZiBgXy5tZXRob2RgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzXG4gICAgICogdGhlIG1ldGhvZCBhdCBhIGdpdmVuIHBhdGggb2YgYG9iamVjdGAuIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmVcbiAgICAgKiBwcm92aWRlZCB0byB0aGUgaW52b2tlZCBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy43LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAgICAgKiBAcGFyYW0gey4uLip9IFthcmdzXSBUaGUgYXJndW1lbnRzIHRvIGludm9rZSB0aGUgbWV0aG9kIHdpdGguXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgaW52b2tlciBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGFycmF5ID0gXy50aW1lcygzLCBfLmNvbnN0YW50KSxcbiAgICAgKiAgICAgb2JqZWN0ID0geyAnYSc6IGFycmF5LCAnYic6IGFycmF5LCAnYyc6IGFycmF5IH07XG4gICAgICpcbiAgICAgKiBfLm1hcChbJ2FbMl0nLCAnY1swXSddLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqXG4gICAgICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLm1ldGhvZE9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqL1xuICAgIHZhciBtZXRob2RPZiA9IGJhc2VSZXN0KGZ1bmN0aW9uKG9iamVjdCwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2Uob2JqZWN0LCBwYXRoLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGFsbCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgZnVuY3Rpb24gcHJvcGVydGllcyBvZiBhIHNvdXJjZVxuICAgICAqIG9iamVjdCB0byB0aGUgZGVzdGluYXRpb24gb2JqZWN0LiBJZiBgb2JqZWN0YCBpcyBhIGZ1bmN0aW9uLCB0aGVuIG1ldGhvZHNcbiAgICAgKiBhcmUgYWRkZWQgdG8gaXRzIHByb3RvdHlwZSBhcyB3ZWxsLlxuICAgICAqXG4gICAgICogKipOb3RlOioqIFVzZSBgXy5ydW5JbkNvbnRleHRgIHRvIGNyZWF0ZSBhIHByaXN0aW5lIGBsb2Rhc2hgIGZ1bmN0aW9uIHRvXG4gICAgICogYXZvaWQgY29uZmxpY3RzIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gW29iamVjdD1sb2Rhc2hdIFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIGZ1bmN0aW9ucyB0byBhZGQuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jaGFpbj10cnVlXSBTcGVjaWZ5IHdoZXRoZXIgbWl4aW5zIGFyZSBjaGFpbmFibGUuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gdm93ZWxzKHN0cmluZykge1xuICAgICAqICAgcmV0dXJuIF8uZmlsdGVyKHN0cmluZywgZnVuY3Rpb24odikge1xuICAgICAqICAgICByZXR1cm4gL1thZWlvdV0vaS50ZXN0KHYpO1xuICAgICAqICAgfSk7XG4gICAgICogfVxuICAgICAqXG4gICAgICogXy5taXhpbih7ICd2b3dlbHMnOiB2b3dlbHMgfSk7XG4gICAgICogXy52b3dlbHMoJ2ZyZWQnKTtcbiAgICAgKiAvLyA9PiBbJ2UnXVxuICAgICAqXG4gICAgICogXygnZnJlZCcpLnZvd2VscygpLnZhbHVlKCk7XG4gICAgICogLy8gPT4gWydlJ11cbiAgICAgKlxuICAgICAqIF8ubWl4aW4oeyAndm93ZWxzJzogdm93ZWxzIH0sIHsgJ2NoYWluJzogZmFsc2UgfSk7XG4gICAgICogXygnZnJlZCcpLnZvd2VscygpO1xuICAgICAqIC8vID0+IFsnZSddXG4gICAgICovXG4gICAgZnVuY3Rpb24gbWl4aW4ob2JqZWN0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBwcm9wcyA9IGtleXMoc291cmNlKSxcbiAgICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBwcm9wcyk7XG5cbiAgICAgIGlmIChvcHRpb25zID09IG51bGwgJiZcbiAgICAgICAgICAhKGlzT2JqZWN0KHNvdXJjZSkgJiYgKG1ldGhvZE5hbWVzLmxlbmd0aCB8fCAhcHJvcHMubGVuZ3RoKSkpIHtcbiAgICAgICAgb3B0aW9ucyA9IHNvdXJjZTtcbiAgICAgICAgc291cmNlID0gb2JqZWN0O1xuICAgICAgICBvYmplY3QgPSB0aGlzO1xuICAgICAgICBtZXRob2ROYW1lcyA9IGJhc2VGdW5jdGlvbnMoc291cmNlLCBrZXlzKHNvdXJjZSkpO1xuICAgICAgfVxuICAgICAgdmFyIGNoYWluID0gIShpc09iamVjdChvcHRpb25zKSAmJiAnY2hhaW4nIGluIG9wdGlvbnMpIHx8ICEhb3B0aW9ucy5jaGFpbixcbiAgICAgICAgICBpc0Z1bmMgPSBpc0Z1bmN0aW9uKG9iamVjdCk7XG5cbiAgICAgIGFycmF5RWFjaChtZXRob2ROYW1lcywgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgICB2YXIgZnVuYyA9IHNvdXJjZVttZXRob2ROYW1lXTtcbiAgICAgICAgb2JqZWN0W21ldGhvZE5hbWVdID0gZnVuYztcbiAgICAgICAgaWYgKGlzRnVuYykge1xuICAgICAgICAgIG9iamVjdC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fO1xuICAgICAgICAgICAgaWYgKGNoYWluIHx8IGNoYWluQWxsKSB7XG4gICAgICAgICAgICAgIHZhciByZXN1bHQgPSBvYmplY3QodGhpcy5fX3dyYXBwZWRfXyksXG4gICAgICAgICAgICAgICAgICBhY3Rpb25zID0gcmVzdWx0Ll9fYWN0aW9uc19fID0gY29weUFycmF5KHRoaXMuX19hY3Rpb25zX18pO1xuXG4gICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7ICdmdW5jJzogZnVuYywgJ2FyZ3MnOiBhcmd1bWVudHMsICd0aGlzQXJnJzogb2JqZWN0IH0pO1xuICAgICAgICAgICAgICByZXN1bHQuX19jaGFpbl9fID0gY2hhaW5BbGw7XG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseShvYmplY3QsIGFycmF5UHVzaChbdGhpcy52YWx1ZSgpXSwgYXJndW1lbnRzKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV2ZXJ0cyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cyBwcmV2aW91cyB2YWx1ZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0b1xuICAgICAqIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAc2luY2UgMC4xLjBcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBgbG9kYXNoYCBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGxvZGFzaCA9IF8ubm9Db25mbGljdCgpO1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vQ29uZmxpY3QoKSB7XG4gICAgICBpZiAocm9vdC5fID09PSB0aGlzKSB7XG4gICAgICAgIHJvb3QuXyA9IG9sZERhc2g7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDIuMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLm5vb3ApO1xuICAgICAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub29wKCkge1xuICAgICAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIHRoZSBhcmd1bWVudCBhdCBpbmRleCBgbmAuIElmIGBuYCBpcyBuZWdhdGl2ZSxcbiAgICAgKiB0aGUgbnRoIGFyZ3VtZW50IGZyb20gdGhlIGVuZCBpcyByZXR1cm5lZC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtuPTBdIFRoZSBpbmRleCBvZiB0aGUgYXJndW1lbnQgdG8gcmV0dXJuLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhc3MtdGhydSBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm50aEFyZygxKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2InXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ubnRoQXJnKC0yKTtcbiAgICAgKiBmdW5jKCdhJywgJ2InLCAnYycsICdkJyk7XG4gICAgICogLy8gPT4gJ2MnXG4gICAgICovXG4gICAgZnVuY3Rpb24gbnRoQXJnKG4pIHtcbiAgICAgIG4gPSB0b0ludGVnZXIobik7XG4gICAgICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24oYXJncykge1xuICAgICAgICByZXR1cm4gYmFzZU50aChhcmdzLCBuKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGl0ZXJhdGVlc2Agd2l0aCB0aGUgYXJndW1lbnRzIGl0IHJlY2VpdmVzXG4gICAgICogYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsuLi4oRnVuY3Rpb258RnVuY3Rpb25bXSl9IFtpdGVyYXRlZXM9W18uaWRlbnRpdHldXVxuICAgICAqICBUaGUgaXRlcmF0ZWVzIHRvIGludm9rZS5cbiAgICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIGZ1bmMgPSBfLm92ZXIoW01hdGgubWF4LCBNYXRoLm1pbl0pO1xuICAgICAqXG4gICAgICogZnVuYygxLCAyLCAzLCA0KTtcbiAgICAgKiAvLyA9PiBbNCwgMV1cbiAgICAgKi9cbiAgICB2YXIgb3ZlciA9IGNyZWF0ZU92ZXIoYXJyYXlNYXApO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYWxsKiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEZvbGxvd2luZyBzaG9ydGhhbmRzIGFyZSBwb3NzaWJsZSBmb3IgcHJvdmlkaW5nIHByZWRpY2F0ZXMuXG4gICAgICogUGFzcyBhbiBgT2JqZWN0YCBhbmQgaXQgd2lsbCBiZSB1c2VkIGFzIGFuIHBhcmFtZXRlciBmb3IgYF8ubWF0Y2hlc2AgdG8gY3JlYXRlIHRoZSBwcmVkaWNhdGUuXG4gICAgICogUGFzcyBhbiBgQXJyYXlgIG9mIHBhcmFtZXRlcnMgZm9yIGBfLm1hdGNoZXNQcm9wZXJ0eWAgYW5kIHRoZSBwcmVkaWNhdGUgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRoZW0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlckV2ZXJ5KFtCb29sZWFuLCBpc0Zpbml0ZV0pO1xuICAgICAqXG4gICAgICogZnVuYygnMScpO1xuICAgICAqIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqIGZ1bmMobnVsbCk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIGZ1bmMoTmFOKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIHZhciBvdmVyRXZlcnkgPSBjcmVhdGVPdmVyKGFycmF5RXZlcnkpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmICoqYW55Kiogb2YgdGhlIGBwcmVkaWNhdGVzYCByZXR1cm5cbiAgICAgKiB0cnV0aHkgd2hlbiBpbnZva2VkIHdpdGggdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAgICAgKlxuICAgICAqIEZvbGxvd2luZyBzaG9ydGhhbmRzIGFyZSBwb3NzaWJsZSBmb3IgcHJvdmlkaW5nIHByZWRpY2F0ZXMuXG4gICAgICogUGFzcyBhbiBgT2JqZWN0YCBhbmQgaXQgd2lsbCBiZSB1c2VkIGFzIGFuIHBhcmFtZXRlciBmb3IgYF8ubWF0Y2hlc2AgdG8gY3JlYXRlIHRoZSBwcmVkaWNhdGUuXG4gICAgICogUGFzcyBhbiBgQXJyYXlgIG9mIHBhcmFtZXRlcnMgZm9yIGBfLm1hdGNoZXNQcm9wZXJ0eWAgYW5kIHRoZSBwcmVkaWNhdGUgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRoZW0uXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7Li4uKEZ1bmN0aW9ufEZ1bmN0aW9uW10pfSBbcHJlZGljYXRlcz1bXy5pZGVudGl0eV1dXG4gICAgICogIFRoZSBwcmVkaWNhdGVzIHRvIGNoZWNrLlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgZnVuYyA9IF8ub3ZlclNvbWUoW0Jvb2xlYW4sIGlzRmluaXRlXSk7XG4gICAgICpcbiAgICAgKiBmdW5jKCcxJyk7XG4gICAgICogLy8gPT4gdHJ1ZVxuICAgICAqXG4gICAgICogZnVuYyhudWxsKTtcbiAgICAgKiAvLyA9PiB0cnVlXG4gICAgICpcbiAgICAgKiBmdW5jKE5hTik7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKlxuICAgICAqIHZhciBtYXRjaGVzRnVuYyA9IF8ub3ZlclNvbWUoW3sgJ2EnOiAxIH0sIHsgJ2EnOiAyIH1dKVxuICAgICAqIHZhciBtYXRjaGVzUHJvcGVydHlGdW5jID0gXy5vdmVyU29tZShbWydhJywgMV0sIFsnYScsIDJdXSlcbiAgICAgKi9cbiAgICB2YXIgb3ZlclNvbWUgPSBjcmVhdGVPdmVyKGFycmF5U29tZSk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMi40LjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gICAgICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW1xuICAgICAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAgICAgKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICAgICAqIC8vID0+IFsyLCAxXVxuICAgICAqXG4gICAgICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAgICAgKiAvLyA9PiBbMSwgMl1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gICAgICByZXR1cm4gaXNLZXkocGF0aCkgPyBiYXNlUHJvcGVydHkodG9LZXkocGF0aCkpIDogYmFzZVByb3BlcnR5RGVlcChwYXRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgb3Bwb3NpdGUgb2YgYF8ucHJvcGVydHlgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zXG4gICAgICogdGhlIHZhbHVlIGF0IGEgZ2l2ZW4gcGF0aCBvZiBgb2JqZWN0YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXkgPSBbMCwgMSwgMl0sXG4gICAgICogICAgIG9iamVjdCA9IHsgJ2EnOiBhcnJheSwgJ2InOiBhcnJheSwgJ2MnOiBhcnJheSB9O1xuICAgICAqXG4gICAgICogXy5tYXAoWydhWzJdJywgJ2NbMF0nXSwgXy5wcm9wZXJ0eU9mKG9iamVjdCkpO1xuICAgICAqIC8vID0+IFsyLCAwXVxuICAgICAqXG4gICAgICogXy5tYXAoW1snYScsICcyJ10sIFsnYycsICcwJ11dLCBfLnByb3BlcnR5T2Yob2JqZWN0KSk7XG4gICAgICogLy8gPT4gWzIsIDBdXG4gICAgICovXG4gICAgZnVuY3Rpb24gcHJvcGVydHlPZihvYmplY3QpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAgICAgKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICAgICAqIGBzdGFydGAgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYW4gYGVuZGAgb3IgYHN0ZXBgLiBJZiBgZW5kYCBpcyBub3Qgc3BlY2lmaWVkLFxuICAgICAqIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAgICAgKlxuICAgICAqICoqTm90ZToqKiBKYXZhU2NyaXB0IGZvbGxvd3MgdGhlIElFRUUtNzU0IHN0YW5kYXJkIGZvciByZXNvbHZpbmdcbiAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXA9MV0gVGhlIHZhbHVlIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgYnkuXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICAgICAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5yYW5nZSg0KTtcbiAgICAgKiAvLyA9PiBbMCwgMSwgMiwgM11cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoLTQpO1xuICAgICAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgxLCA1KTtcbiAgICAgKiAvLyA9PiBbMSwgMiwgMywgNF1cbiAgICAgKlxuICAgICAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICAgICAqIC8vID0+IFswLCA1LCAxMCwgMTVdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gICAgICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlKDEsIDQsIDApO1xuICAgICAqIC8vID0+IFsxLCAxLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZSgwKTtcbiAgICAgKiAvLyA9PiBbXVxuICAgICAqL1xuICAgIHZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnJhbmdlYCBleGNlcHQgdGhhdCBpdCBwb3B1bGF0ZXMgdmFsdWVzIGluXG4gICAgICogZGVzY2VuZGluZyBvcmRlci5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAgICAgKiBAc2VlIF8uaW5SYW5nZSwgXy5yYW5nZVxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoNCk7XG4gICAgICogLy8gPT4gWzMsIDIsIDEsIDBdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoLTQpO1xuICAgICAqIC8vID0+IFstMywgLTIsIC0xLCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDEsIDUpO1xuICAgICAqIC8vID0+IFs0LCAzLCAyLCAxXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDAsIDIwLCA1KTtcbiAgICAgKiAvLyA9PiBbMTUsIDEwLCA1LCAwXVxuICAgICAqXG4gICAgICogXy5yYW5nZVJpZ2h0KDAsIC00LCAtMSk7XG4gICAgICogLy8gPT4gWy0zLCAtMiwgLTEsIDBdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMSwgNCwgMCk7XG4gICAgICogLy8gPT4gWzEsIDEsIDFdXG4gICAgICpcbiAgICAgKiBfLnJhbmdlUmlnaHQoMCk7XG4gICAgICogLy8gPT4gW11cbiAgICAgKi9cbiAgICB2YXIgcmFuZ2VSaWdodCA9IGNyZWF0ZVJhbmdlKHRydWUpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjEzLjBcbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICAgICAqIC8vID0+IFtbXSwgW11dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gICAgICogLy8gPT4gZmFsc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMTMuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gICAgICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgb2JqZWN0LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5zdHViT2JqZWN0KTtcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICAgICAqIC8vID0+IFt7fSwge31dXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAgICAgKiAvLyA9PiBmYWxzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJPYmplY3QoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViU3RyaW5nKTtcbiAgICAgKiAvLyA9PiBbJycsICcnXVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0dWJTdHJpbmcoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC4xMy4wXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udGltZXMoMiwgXy5zdHViVHJ1ZSk7XG4gICAgICogLy8gPT4gW3RydWUsIHRydWVdXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3R1YlRydWUoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBpdGVyYXRlZSBgbmAgdGltZXMsIHJldHVybmluZyBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZlxuICAgICAqIGVhY2ggaW52b2NhdGlvbi4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ7IChpbmRleCkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgVXRpbFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gICAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRpbWVzKDMsIFN0cmluZyk7XG4gICAgICogLy8gPT4gWycwJywgJzEnLCAnMiddXG4gICAgICpcbiAgICAgKiAgXy50aW1lcyg0LCBfLmNvbnN0YW50KDApKTtcbiAgICAgKiAvLyA9PiBbMCwgMCwgMCwgMF1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0aW1lcyhuLCBpdGVyYXRlZSkge1xuICAgICAgbiA9IHRvSW50ZWdlcihuKTtcbiAgICAgIGlmIChuIDwgMSB8fCBuID4gTUFYX1NBRkVfSU5URUdFUikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgaW5kZXggPSBNQVhfQVJSQVlfTEVOR1RILFxuICAgICAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihuLCBNQVhfQVJSQVlfTEVOR1RIKTtcblxuICAgICAgaXRlcmF0ZWUgPSBnZXRJdGVyYXRlZShpdGVyYXRlZSk7XG4gICAgICBuIC09IE1BWF9BUlJBWV9MRU5HVEg7XG5cbiAgICAgIHZhciByZXN1bHQgPSBiYXNlVGltZXMobGVuZ3RoLCBpdGVyYXRlZSk7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICAgICAgaXRlcmF0ZWUoaW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBVdGlsXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnRvUGF0aCgnYS5iLmMnKTtcbiAgICAgKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAgICAgKlxuICAgICAqIF8udG9QYXRoKCdhWzBdLmIuYycpO1xuICAgICAqIC8vID0+IFsnYScsICcwJywgJ2InLCAnYyddXG4gICAgICovXG4gICAgZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCB0b0tleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNTeW1ib2wodmFsdWUpID8gW3ZhbHVlXSA6IGNvcHlBcnJheShzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgdW5pcXVlIElELiBJZiBgcHJlZml4YCBpcyBnaXZlbiwgdGhlIElEIGlzIGFwcGVuZGVkIHRvIGl0LlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBzaW5jZSAwLjEuMFxuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQGNhdGVnb3J5IFV0aWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3ByZWZpeD0nJ10gVGhlIHZhbHVlIHRvIHByZWZpeCB0aGUgSUQgd2l0aC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB1bmlxdWUgSUQuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8udW5pcXVlSWQoJ2NvbnRhY3RfJyk7XG4gICAgICogLy8gPT4gJ2NvbnRhY3RfMTA0J1xuICAgICAqXG4gICAgICogXy51bmlxdWVJZCgpO1xuICAgICAqIC8vID0+ICcxMDUnXG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gICAgICB2YXIgaWQgPSArK2lkQ291bnRlcjtcbiAgICAgIHJldHVybiB0b1N0cmluZyhwcmVmaXgpICsgaWQ7XG4gICAgfVxuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLyoqXG4gICAgICogQWRkcyB0d28gbnVtYmVycy5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSAzLjQuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGF1Z2VuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGFuIGFkZGl0aW9uLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhZGRlbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYW4gYWRkaXRpb24uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgdG90YWwuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uYWRkKDYsIDQpO1xuICAgICAqIC8vID0+IDEwXG4gICAgICovXG4gICAgdmFyIGFkZCA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oYXVnZW5kLCBhZGRlbmQpIHtcbiAgICAgIHJldHVybiBhdWdlbmQgKyBhZGRlbmQ7XG4gICAgfSwgMCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBgbnVtYmVyYCByb3VuZGVkIHVwIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kIHVwLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdXAgdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCB1cCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8uY2VpbCg0LjAwNik7XG4gICAgICogLy8gPT4gNVxuICAgICAqXG4gICAgICogXy5jZWlsKDYuMDA0LCAyKTtcbiAgICAgKiAvLyA9PiA2LjAxXG4gICAgICpcbiAgICAgKiBfLmNlaWwoNjA0MCwgLTIpO1xuICAgICAqIC8vID0+IDYxMDBcbiAgICAgKi9cbiAgICB2YXIgY2VpbCA9IGNyZWF0ZVJvdW5kKCdjZWlsJyk7XG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGUgdHdvIG51bWJlcnMuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBkaXZpZGVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgZGl2aXNpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRpdmlzb3IgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBkaXZpc2lvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBxdW90aWVudC5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5kaXZpZGUoNiwgNCk7XG4gICAgICogLy8gPT4gMS41XG4gICAgICovXG4gICAgdmFyIGRpdmlkZSA9IGNyZWF0ZU1hdGhPcGVyYXRpb24oZnVuY3Rpb24oZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgIHJldHVybiBkaXZpZGVuZCAvIGRpdmlzb3I7XG4gICAgfSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBgbnVtYmVyYCByb3VuZGVkIGRvd24gdG8gYHByZWNpc2lvbmAuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgMy4xMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIFRoZSBudW1iZXIgdG8gcm91bmQgZG93bi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBUaGUgcHJlY2lzaW9uIHRvIHJvdW5kIGRvd24gdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBkb3duIG51bWJlci5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5mbG9vcig0LjAwNik7XG4gICAgICogLy8gPT4gNFxuICAgICAqXG4gICAgICogXy5mbG9vcigwLjA0NiwgMik7XG4gICAgICogLy8gPT4gMC4wNFxuICAgICAqXG4gICAgICogXy5mbG9vcig0MDYwLCAtMik7XG4gICAgICogLy8gPT4gNDAwMFxuICAgICAqL1xuICAgIHZhciBmbG9vciA9IGNyZWF0ZVJvdW5kKCdmbG9vcicpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIG1heGltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gICAgICogYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWF4KFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gOFxuICAgICAqXG4gICAgICogXy5tYXgoW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1heChhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBpZGVudGl0eSwgYmFzZUd0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1heGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaFxuICAgICAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF4aW11bSB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDEgfSwgeyAnbic6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLm1heEJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4geyAnbic6IDIgfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5tYXhCeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IHsgJ24nOiAyIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtYXhCeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlR3QpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBtZWFuIG9mIHRoZSB2YWx1ZXMgaW4gYGFycmF5YC5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtZWFuLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLm1lYW4oWzQsIDIsIDgsIDZdKTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICovXG4gICAgZnVuY3Rpb24gbWVhbihhcnJheSkge1xuICAgICAgcmV0dXJuIGJhc2VNZWFuKGFycmF5LCBpZGVudGl0eSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5tZWFuYCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGBpdGVyYXRlZWAgd2hpY2ggaXNcbiAgICAgKiBpbnZva2VkIGZvciBlYWNoIGVsZW1lbnQgaW4gYGFycmF5YCB0byBnZW5lcmF0ZSB0aGUgdmFsdWUgdG8gYmUgYXZlcmFnZWQuXG4gICAgICogVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCBvbmUgYXJndW1lbnQ6ICh2YWx1ZSkuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAc2luY2UgNC43LjBcbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIG1lYW4uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIHZhciBvYmplY3RzID0gW3sgJ24nOiA0IH0sIHsgJ24nOiAyIH0sIHsgJ24nOiA4IH0sIHsgJ24nOiA2IH1dO1xuICAgICAqXG4gICAgICogXy5tZWFuQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgKiAvLyA9PiA1XG4gICAgICpcbiAgICAgKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAgICAgKiBfLm1lYW5CeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IDVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZWFuQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gYmFzZU1lYW4oYXJyYXksIGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAyKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIG1pbmltdW0gdmFsdWUgb2YgYGFycmF5YC4gSWYgYGFycmF5YCBpcyBlbXB0eSBvciBmYWxzZXksXG4gICAgICogYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQHNpbmNlIDAuMS4wXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAY2F0ZWdvcnkgTWF0aFxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gICAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1pbmltdW0gdmFsdWUuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubWluKFs0LCAyLCA4LCA2XSk7XG4gICAgICogLy8gPT4gMlxuICAgICAqXG4gICAgICogXy5taW4oW10pO1xuICAgICAqIC8vID0+IHVuZGVmaW5lZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1pbihhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZUV4dHJlbXVtKGFycmF5LCBpZGVudGl0eSwgYmFzZUx0KVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLm1pbmAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIGNyaXRlcmlvbiBieSB3aGljaFxuICAgICAqIHRoZSB2YWx1ZSBpcyByYW5rZWQuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggb25lIGFyZ3VtZW50OiAodmFsdWUpLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWluaW11bSB2YWx1ZS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogdmFyIG9iamVjdHMgPSBbeyAnbic6IDEgfSwgeyAnbic6IDIgfV07XG4gICAgICpcbiAgICAgKiBfLm1pbkJ5KG9iamVjdHMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8ubjsgfSk7XG4gICAgICogLy8gPT4geyAnbic6IDEgfVxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5taW5CeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IHsgJ24nOiAxIH1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtaW5CeShhcnJheSwgaXRlcmF0ZWUpIHtcbiAgICAgIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKVxuICAgICAgICA/IGJhc2VFeHRyZW11bShhcnJheSwgZ2V0SXRlcmF0ZWUoaXRlcmF0ZWUsIDIpLCBiYXNlTHQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE11bHRpcGx5IHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuNy4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbXVsdGlwbGllciBUaGUgZmlyc3QgbnVtYmVyIGluIGEgbXVsdGlwbGljYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG11bHRpcGxpY2FuZCBUaGUgc2Vjb25kIG51bWJlciBpbiBhIG11bHRpcGxpY2F0aW9uLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHByb2R1Y3QuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ubXVsdGlwbHkoNiwgNCk7XG4gICAgICogLy8gPT4gMjRcbiAgICAgKi9cbiAgICB2YXIgbXVsdGlwbHkgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKG11bHRpcGxpZXIsIG11bHRpcGxpY2FuZCkge1xuICAgICAgcmV0dXJuIG11bHRpcGxpZXIgKiBtdWx0aXBsaWNhbmQ7XG4gICAgfSwgMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBgbnVtYmVyYCByb3VuZGVkIHRvIGBwcmVjaXNpb25gLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuMTAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciBUaGUgbnVtYmVyIHRvIHJvdW5kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFRoZSBwcmVjaXNpb24gdG8gcm91bmQgdG8uXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgcm91bmRlZCBudW1iZXIuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqIF8ucm91bmQoNC4wMDYpO1xuICAgICAqIC8vID0+IDRcbiAgICAgKlxuICAgICAqIF8ucm91bmQoNC4wMDYsIDIpO1xuICAgICAqIC8vID0+IDQuMDFcbiAgICAgKlxuICAgICAqIF8ucm91bmQoNDA2MCwgLTIpO1xuICAgICAqIC8vID0+IDQxMDBcbiAgICAgKi9cbiAgICB2YXIgcm91bmQgPSBjcmVhdGVSb3VuZCgncm91bmQnKTtcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0IHR3byBudW1iZXJzLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDQuMC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbWludWVuZCBUaGUgZmlyc3QgbnVtYmVyIGluIGEgc3VidHJhY3Rpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHN1YnRyYWhlbmQgVGhlIHNlY29uZCBudW1iZXIgaW4gYSBzdWJ0cmFjdGlvbi5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiBfLnN1YnRyYWN0KDYsIDQpO1xuICAgICAqIC8vID0+IDJcbiAgICAgKi9cbiAgICB2YXIgc3VidHJhY3QgPSBjcmVhdGVNYXRoT3BlcmF0aW9uKGZ1bmN0aW9uKG1pbnVlbmQsIHN1YnRyYWhlbmQpIHtcbiAgICAgIHJldHVybiBtaW51ZW5kIC0gc3VidHJhaGVuZDtcbiAgICB9LCAwKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBpbiBgYXJyYXlgLlxuICAgICAqXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBtZW1iZXJPZiBfXG4gICAgICogQHNpbmNlIDMuNC4wXG4gICAgICogQGNhdGVnb3J5IE1hdGhcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN1bS5cbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogXy5zdW0oWzQsIDIsIDgsIDZdKTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN1bShhcnJheSkge1xuICAgICAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpXG4gICAgICAgID8gYmFzZVN1bShhcnJheSwgaWRlbnRpdHkpXG4gICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnN1bWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgaXRlcmF0ZWVgIHdoaWNoIGlzXG4gICAgICogaW52b2tlZCBmb3IgZWFjaCBlbGVtZW50IGluIGBhcnJheWAgdG8gZ2VuZXJhdGUgdGhlIHZhbHVlIHRvIGJlIHN1bW1lZC5cbiAgICAgKiBUaGUgaXRlcmF0ZWUgaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDogKHZhbHVlKS5cbiAgICAgKlxuICAgICAqIEBzdGF0aWNcbiAgICAgKiBAbWVtYmVyT2YgX1xuICAgICAqIEBzaW5jZSA0LjAuMFxuICAgICAqIEBjYXRlZ29yeSBNYXRoXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gICAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3VtLlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiB2YXIgb2JqZWN0cyA9IFt7ICduJzogNCB9LCB7ICduJzogMiB9LCB7ICduJzogOCB9LCB7ICduJzogNiB9XTtcbiAgICAgKlxuICAgICAqIF8uc3VtQnkob2JqZWN0cywgZnVuY3Rpb24obykgeyByZXR1cm4gby5uOyB9KTtcbiAgICAgKiAvLyA9PiAyMFxuICAgICAqXG4gICAgICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gICAgICogXy5zdW1CeShvYmplY3RzLCAnbicpO1xuICAgICAqIC8vID0+IDIwXG4gICAgICovXG4gICAgZnVuY3Rpb24gc3VtQnkoYXJyYXksIGl0ZXJhdGVlKSB7XG4gICAgICByZXR1cm4gKGFycmF5ICYmIGFycmF5Lmxlbmd0aClcbiAgICAgICAgPyBiYXNlU3VtKGFycmF5LCBnZXRJdGVyYXRlZShpdGVyYXRlZSwgMikpXG4gICAgICAgIDogMDtcbiAgICB9XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0aGF0IHJldHVybiB3cmFwcGVkIHZhbHVlcyBpbiBjaGFpbiBzZXF1ZW5jZXMuXG4gICAgbG9kYXNoLmFmdGVyID0gYWZ0ZXI7XG4gICAgbG9kYXNoLmFyeSA9IGFyeTtcbiAgICBsb2Rhc2guYXNzaWduID0gYXNzaWduO1xuICAgIGxvZGFzaC5hc3NpZ25JbiA9IGFzc2lnbkluO1xuICAgIGxvZGFzaC5hc3NpZ25JbldpdGggPSBhc3NpZ25JbldpdGg7XG4gICAgbG9kYXNoLmFzc2lnbldpdGggPSBhc3NpZ25XaXRoO1xuICAgIGxvZGFzaC5hdCA9IGF0O1xuICAgIGxvZGFzaC5iZWZvcmUgPSBiZWZvcmU7XG4gICAgbG9kYXNoLmJpbmQgPSBiaW5kO1xuICAgIGxvZGFzaC5iaW5kQWxsID0gYmluZEFsbDtcbiAgICBsb2Rhc2guYmluZEtleSA9IGJpbmRLZXk7XG4gICAgbG9kYXNoLmNhc3RBcnJheSA9IGNhc3RBcnJheTtcbiAgICBsb2Rhc2guY2hhaW4gPSBjaGFpbjtcbiAgICBsb2Rhc2guY2h1bmsgPSBjaHVuaztcbiAgICBsb2Rhc2guY29tcGFjdCA9IGNvbXBhY3Q7XG4gICAgbG9kYXNoLmNvbmNhdCA9IGNvbmNhdDtcbiAgICBsb2Rhc2guY29uZCA9IGNvbmQ7XG4gICAgbG9kYXNoLmNvbmZvcm1zID0gY29uZm9ybXM7XG4gICAgbG9kYXNoLmNvbnN0YW50ID0gY29uc3RhbnQ7XG4gICAgbG9kYXNoLmNvdW50QnkgPSBjb3VudEJ5O1xuICAgIGxvZGFzaC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgbG9kYXNoLmN1cnJ5ID0gY3Vycnk7XG4gICAgbG9kYXNoLmN1cnJ5UmlnaHQgPSBjdXJyeVJpZ2h0O1xuICAgIGxvZGFzaC5kZWJvdW5jZSA9IGRlYm91bmNlO1xuICAgIGxvZGFzaC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuICAgIGxvZGFzaC5kZWZhdWx0c0RlZXAgPSBkZWZhdWx0c0RlZXA7XG4gICAgbG9kYXNoLmRlZmVyID0gZGVmZXI7XG4gICAgbG9kYXNoLmRlbGF5ID0gZGVsYXk7XG4gICAgbG9kYXNoLmRpZmZlcmVuY2UgPSBkaWZmZXJlbmNlO1xuICAgIGxvZGFzaC5kaWZmZXJlbmNlQnkgPSBkaWZmZXJlbmNlQnk7XG4gICAgbG9kYXNoLmRpZmZlcmVuY2VXaXRoID0gZGlmZmVyZW5jZVdpdGg7XG4gICAgbG9kYXNoLmRyb3AgPSBkcm9wO1xuICAgIGxvZGFzaC5kcm9wUmlnaHQgPSBkcm9wUmlnaHQ7XG4gICAgbG9kYXNoLmRyb3BSaWdodFdoaWxlID0gZHJvcFJpZ2h0V2hpbGU7XG4gICAgbG9kYXNoLmRyb3BXaGlsZSA9IGRyb3BXaGlsZTtcbiAgICBsb2Rhc2guZmlsbCA9IGZpbGw7XG4gICAgbG9kYXNoLmZpbHRlciA9IGZpbHRlcjtcbiAgICBsb2Rhc2guZmxhdE1hcCA9IGZsYXRNYXA7XG4gICAgbG9kYXNoLmZsYXRNYXBEZWVwID0gZmxhdE1hcERlZXA7XG4gICAgbG9kYXNoLmZsYXRNYXBEZXB0aCA9IGZsYXRNYXBEZXB0aDtcbiAgICBsb2Rhc2guZmxhdHRlbiA9IGZsYXR0ZW47XG4gICAgbG9kYXNoLmZsYXR0ZW5EZWVwID0gZmxhdHRlbkRlZXA7XG4gICAgbG9kYXNoLmZsYXR0ZW5EZXB0aCA9IGZsYXR0ZW5EZXB0aDtcbiAgICBsb2Rhc2guZmxpcCA9IGZsaXA7XG4gICAgbG9kYXNoLmZsb3cgPSBmbG93O1xuICAgIGxvZGFzaC5mbG93UmlnaHQgPSBmbG93UmlnaHQ7XG4gICAgbG9kYXNoLmZyb21QYWlycyA9IGZyb21QYWlycztcbiAgICBsb2Rhc2guZnVuY3Rpb25zID0gZnVuY3Rpb25zO1xuICAgIGxvZGFzaC5mdW5jdGlvbnNJbiA9IGZ1bmN0aW9uc0luO1xuICAgIGxvZGFzaC5ncm91cEJ5ID0gZ3JvdXBCeTtcbiAgICBsb2Rhc2guaW5pdGlhbCA9IGluaXRpYWw7XG4gICAgbG9kYXNoLmludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbjtcbiAgICBsb2Rhc2guaW50ZXJzZWN0aW9uQnkgPSBpbnRlcnNlY3Rpb25CeTtcbiAgICBsb2Rhc2guaW50ZXJzZWN0aW9uV2l0aCA9IGludGVyc2VjdGlvbldpdGg7XG4gICAgbG9kYXNoLmludmVydCA9IGludmVydDtcbiAgICBsb2Rhc2guaW52ZXJ0QnkgPSBpbnZlcnRCeTtcbiAgICBsb2Rhc2guaW52b2tlTWFwID0gaW52b2tlTWFwO1xuICAgIGxvZGFzaC5pdGVyYXRlZSA9IGl0ZXJhdGVlO1xuICAgIGxvZGFzaC5rZXlCeSA9IGtleUJ5O1xuICAgIGxvZGFzaC5rZXlzID0ga2V5cztcbiAgICBsb2Rhc2gua2V5c0luID0ga2V5c0luO1xuICAgIGxvZGFzaC5tYXAgPSBtYXA7XG4gICAgbG9kYXNoLm1hcEtleXMgPSBtYXBLZXlzO1xuICAgIGxvZGFzaC5tYXBWYWx1ZXMgPSBtYXBWYWx1ZXM7XG4gICAgbG9kYXNoLm1hdGNoZXMgPSBtYXRjaGVzO1xuICAgIGxvZGFzaC5tYXRjaGVzUHJvcGVydHkgPSBtYXRjaGVzUHJvcGVydHk7XG4gICAgbG9kYXNoLm1lbW9pemUgPSBtZW1vaXplO1xuICAgIGxvZGFzaC5tZXJnZSA9IG1lcmdlO1xuICAgIGxvZGFzaC5tZXJnZVdpdGggPSBtZXJnZVdpdGg7XG4gICAgbG9kYXNoLm1ldGhvZCA9IG1ldGhvZDtcbiAgICBsb2Rhc2gubWV0aG9kT2YgPSBtZXRob2RPZjtcbiAgICBsb2Rhc2gubWl4aW4gPSBtaXhpbjtcbiAgICBsb2Rhc2gubmVnYXRlID0gbmVnYXRlO1xuICAgIGxvZGFzaC5udGhBcmcgPSBudGhBcmc7XG4gICAgbG9kYXNoLm9taXQgPSBvbWl0O1xuICAgIGxvZGFzaC5vbWl0QnkgPSBvbWl0Qnk7XG4gICAgbG9kYXNoLm9uY2UgPSBvbmNlO1xuICAgIGxvZGFzaC5vcmRlckJ5ID0gb3JkZXJCeTtcbiAgICBsb2Rhc2gub3ZlciA9IG92ZXI7XG4gICAgbG9kYXNoLm92ZXJBcmdzID0gb3ZlckFyZ3M7XG4gICAgbG9kYXNoLm92ZXJFdmVyeSA9IG92ZXJFdmVyeTtcbiAgICBsb2Rhc2gub3ZlclNvbWUgPSBvdmVyU29tZTtcbiAgICBsb2Rhc2gucGFydGlhbCA9IHBhcnRpYWw7XG4gICAgbG9kYXNoLnBhcnRpYWxSaWdodCA9IHBhcnRpYWxSaWdodDtcbiAgICBsb2Rhc2gucGFydGl0aW9uID0gcGFydGl0aW9uO1xuICAgIGxvZGFzaC5waWNrID0gcGljaztcbiAgICBsb2Rhc2gucGlja0J5ID0gcGlja0J5O1xuICAgIGxvZGFzaC5wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIGxvZGFzaC5wcm9wZXJ0eU9mID0gcHJvcGVydHlPZjtcbiAgICBsb2Rhc2gucHVsbCA9IHB1bGw7XG4gICAgbG9kYXNoLnB1bGxBbGwgPSBwdWxsQWxsO1xuICAgIGxvZGFzaC5wdWxsQWxsQnkgPSBwdWxsQWxsQnk7XG4gICAgbG9kYXNoLnB1bGxBbGxXaXRoID0gcHVsbEFsbFdpdGg7XG4gICAgbG9kYXNoLnB1bGxBdCA9IHB1bGxBdDtcbiAgICBsb2Rhc2gucmFuZ2UgPSByYW5nZTtcbiAgICBsb2Rhc2gucmFuZ2VSaWdodCA9IHJhbmdlUmlnaHQ7XG4gICAgbG9kYXNoLnJlYXJnID0gcmVhcmc7XG4gICAgbG9kYXNoLnJlamVjdCA9IHJlamVjdDtcbiAgICBsb2Rhc2gucmVtb3ZlID0gcmVtb3ZlO1xuICAgIGxvZGFzaC5yZXN0ID0gcmVzdDtcbiAgICBsb2Rhc2gucmV2ZXJzZSA9IHJldmVyc2U7XG4gICAgbG9kYXNoLnNhbXBsZVNpemUgPSBzYW1wbGVTaXplO1xuICAgIGxvZGFzaC5zZXQgPSBzZXQ7XG4gICAgbG9kYXNoLnNldFdpdGggPSBzZXRXaXRoO1xuICAgIGxvZGFzaC5zaHVmZmxlID0gc2h1ZmZsZTtcbiAgICBsb2Rhc2guc2xpY2UgPSBzbGljZTtcbiAgICBsb2Rhc2guc29ydEJ5ID0gc29ydEJ5O1xuICAgIGxvZGFzaC5zb3J0ZWRVbmlxID0gc29ydGVkVW5pcTtcbiAgICBsb2Rhc2guc29ydGVkVW5pcUJ5ID0gc29ydGVkVW5pcUJ5O1xuICAgIGxvZGFzaC5zcGxpdCA9IHNwbGl0O1xuICAgIGxvZGFzaC5zcHJlYWQgPSBzcHJlYWQ7XG4gICAgbG9kYXNoLnRhaWwgPSB0YWlsO1xuICAgIGxvZGFzaC50YWtlID0gdGFrZTtcbiAgICBsb2Rhc2gudGFrZVJpZ2h0ID0gdGFrZVJpZ2h0O1xuICAgIGxvZGFzaC50YWtlUmlnaHRXaGlsZSA9IHRha2VSaWdodFdoaWxlO1xuICAgIGxvZGFzaC50YWtlV2hpbGUgPSB0YWtlV2hpbGU7XG4gICAgbG9kYXNoLnRhcCA9IHRhcDtcbiAgICBsb2Rhc2gudGhyb3R0bGUgPSB0aHJvdHRsZTtcbiAgICBsb2Rhc2gudGhydSA9IHRocnU7XG4gICAgbG9kYXNoLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIGxvZGFzaC50b1BhaXJzID0gdG9QYWlycztcbiAgICBsb2Rhc2gudG9QYWlyc0luID0gdG9QYWlyc0luO1xuICAgIGxvZGFzaC50b1BhdGggPSB0b1BhdGg7XG4gICAgbG9kYXNoLnRvUGxhaW5PYmplY3QgPSB0b1BsYWluT2JqZWN0O1xuICAgIGxvZGFzaC50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgbG9kYXNoLnVuYXJ5ID0gdW5hcnk7XG4gICAgbG9kYXNoLnVuaW9uID0gdW5pb247XG4gICAgbG9kYXNoLnVuaW9uQnkgPSB1bmlvbkJ5O1xuICAgIGxvZGFzaC51bmlvbldpdGggPSB1bmlvbldpdGg7XG4gICAgbG9kYXNoLnVuaXEgPSB1bmlxO1xuICAgIGxvZGFzaC51bmlxQnkgPSB1bmlxQnk7XG4gICAgbG9kYXNoLnVuaXFXaXRoID0gdW5pcVdpdGg7XG4gICAgbG9kYXNoLnVuc2V0ID0gdW5zZXQ7XG4gICAgbG9kYXNoLnVuemlwID0gdW56aXA7XG4gICAgbG9kYXNoLnVuemlwV2l0aCA9IHVuemlwV2l0aDtcbiAgICBsb2Rhc2gudXBkYXRlID0gdXBkYXRlO1xuICAgIGxvZGFzaC51cGRhdGVXaXRoID0gdXBkYXRlV2l0aDtcbiAgICBsb2Rhc2gudmFsdWVzID0gdmFsdWVzO1xuICAgIGxvZGFzaC52YWx1ZXNJbiA9IHZhbHVlc0luO1xuICAgIGxvZGFzaC53aXRob3V0ID0gd2l0aG91dDtcbiAgICBsb2Rhc2gud29yZHMgPSB3b3JkcztcbiAgICBsb2Rhc2gud3JhcCA9IHdyYXA7XG4gICAgbG9kYXNoLnhvciA9IHhvcjtcbiAgICBsb2Rhc2gueG9yQnkgPSB4b3JCeTtcbiAgICBsb2Rhc2gueG9yV2l0aCA9IHhvcldpdGg7XG4gICAgbG9kYXNoLnppcCA9IHppcDtcbiAgICBsb2Rhc2guemlwT2JqZWN0ID0gemlwT2JqZWN0O1xuICAgIGxvZGFzaC56aXBPYmplY3REZWVwID0gemlwT2JqZWN0RGVlcDtcbiAgICBsb2Rhc2guemlwV2l0aCA9IHppcFdpdGg7XG5cbiAgICAvLyBBZGQgYWxpYXNlcy5cbiAgICBsb2Rhc2guZW50cmllcyA9IHRvUGFpcnM7XG4gICAgbG9kYXNoLmVudHJpZXNJbiA9IHRvUGFpcnNJbjtcbiAgICBsb2Rhc2guZXh0ZW5kID0gYXNzaWduSW47XG4gICAgbG9kYXNoLmV4dGVuZFdpdGggPSBhc3NpZ25JbldpdGg7XG5cbiAgICAvLyBBZGQgbWV0aG9kcyB0byBgbG9kYXNoLnByb3RvdHlwZWAuXG4gICAgbWl4aW4obG9kYXNoLCBsb2Rhc2gpO1xuXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4gICAgLy8gQWRkIG1ldGhvZHMgdGhhdCByZXR1cm4gdW53cmFwcGVkIHZhbHVlcyBpbiBjaGFpbiBzZXF1ZW5jZXMuXG4gICAgbG9kYXNoLmFkZCA9IGFkZDtcbiAgICBsb2Rhc2guYXR0ZW1wdCA9IGF0dGVtcHQ7XG4gICAgbG9kYXNoLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbiAgICBsb2Rhc2guY2FwaXRhbGl6ZSA9IGNhcGl0YWxpemU7XG4gICAgbG9kYXNoLmNlaWwgPSBjZWlsO1xuICAgIGxvZGFzaC5jbGFtcCA9IGNsYW1wO1xuICAgIGxvZGFzaC5jbG9uZSA9IGNsb25lO1xuICAgIGxvZGFzaC5jbG9uZURlZXAgPSBjbG9uZURlZXA7XG4gICAgbG9kYXNoLmNsb25lRGVlcFdpdGggPSBjbG9uZURlZXBXaXRoO1xuICAgIGxvZGFzaC5jbG9uZVdpdGggPSBjbG9uZVdpdGg7XG4gICAgbG9kYXNoLmNvbmZvcm1zVG8gPSBjb25mb3Jtc1RvO1xuICAgIGxvZGFzaC5kZWJ1cnIgPSBkZWJ1cnI7XG4gICAgbG9kYXNoLmRlZmF1bHRUbyA9IGRlZmF1bHRUbztcbiAgICBsb2Rhc2guZGl2aWRlID0gZGl2aWRlO1xuICAgIGxvZGFzaC5lbmRzV2l0aCA9IGVuZHNXaXRoO1xuICAgIGxvZGFzaC5lcSA9IGVxO1xuICAgIGxvZGFzaC5lc2NhcGUgPSBlc2NhcGU7XG4gICAgbG9kYXNoLmVzY2FwZVJlZ0V4cCA9IGVzY2FwZVJlZ0V4cDtcbiAgICBsb2Rhc2guZXZlcnkgPSBldmVyeTtcbiAgICBsb2Rhc2guZmluZCA9IGZpbmQ7XG4gICAgbG9kYXNoLmZpbmRJbmRleCA9IGZpbmRJbmRleDtcbiAgICBsb2Rhc2guZmluZEtleSA9IGZpbmRLZXk7XG4gICAgbG9kYXNoLmZpbmRMYXN0ID0gZmluZExhc3Q7XG4gICAgbG9kYXNoLmZpbmRMYXN0SW5kZXggPSBmaW5kTGFzdEluZGV4O1xuICAgIGxvZGFzaC5maW5kTGFzdEtleSA9IGZpbmRMYXN0S2V5O1xuICAgIGxvZGFzaC5mbG9vciA9IGZsb29yO1xuICAgIGxvZGFzaC5mb3JFYWNoID0gZm9yRWFjaDtcbiAgICBsb2Rhc2guZm9yRWFjaFJpZ2h0ID0gZm9yRWFjaFJpZ2h0O1xuICAgIGxvZGFzaC5mb3JJbiA9IGZvckluO1xuICAgIGxvZGFzaC5mb3JJblJpZ2h0ID0gZm9ySW5SaWdodDtcbiAgICBsb2Rhc2guZm9yT3duID0gZm9yT3duO1xuICAgIGxvZGFzaC5mb3JPd25SaWdodCA9IGZvck93blJpZ2h0O1xuICAgIGxvZGFzaC5nZXQgPSBnZXQ7XG4gICAgbG9kYXNoLmd0ID0gZ3Q7XG4gICAgbG9kYXNoLmd0ZSA9IGd0ZTtcbiAgICBsb2Rhc2guaGFzID0gaGFzO1xuICAgIGxvZGFzaC5oYXNJbiA9IGhhc0luO1xuICAgIGxvZGFzaC5oZWFkID0gaGVhZDtcbiAgICBsb2Rhc2guaWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICBsb2Rhc2guaW5jbHVkZXMgPSBpbmNsdWRlcztcbiAgICBsb2Rhc2guaW5kZXhPZiA9IGluZGV4T2Y7XG4gICAgbG9kYXNoLmluUmFuZ2UgPSBpblJhbmdlO1xuICAgIGxvZGFzaC5pbnZva2UgPSBpbnZva2U7XG4gICAgbG9kYXNoLmlzQXJndW1lbnRzID0gaXNBcmd1bWVudHM7XG4gICAgbG9kYXNoLmlzQXJyYXkgPSBpc0FycmF5O1xuICAgIGxvZGFzaC5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbiAgICBsb2Rhc2guaXNBcnJheUxpa2UgPSBpc0FycmF5TGlrZTtcbiAgICBsb2Rhc2guaXNBcnJheUxpa2VPYmplY3QgPSBpc0FycmF5TGlrZU9iamVjdDtcbiAgICBsb2Rhc2guaXNCb29sZWFuID0gaXNCb29sZWFuO1xuICAgIGxvZGFzaC5pc0J1ZmZlciA9IGlzQnVmZmVyO1xuICAgIGxvZGFzaC5pc0RhdGUgPSBpc0RhdGU7XG4gICAgbG9kYXNoLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbiAgICBsb2Rhc2guaXNFbXB0eSA9IGlzRW1wdHk7XG4gICAgbG9kYXNoLmlzRXF1YWwgPSBpc0VxdWFsO1xuICAgIGxvZGFzaC5pc0VxdWFsV2l0aCA9IGlzRXF1YWxXaXRoO1xuICAgIGxvZGFzaC5pc0Vycm9yID0gaXNFcnJvcjtcbiAgICBsb2Rhc2guaXNGaW5pdGUgPSBpc0Zpbml0ZTtcbiAgICBsb2Rhc2guaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG4gICAgbG9kYXNoLmlzSW50ZWdlciA9IGlzSW50ZWdlcjtcbiAgICBsb2Rhc2guaXNMZW5ndGggPSBpc0xlbmd0aDtcbiAgICBsb2Rhc2guaXNNYXAgPSBpc01hcDtcbiAgICBsb2Rhc2guaXNNYXRjaCA9IGlzTWF0Y2g7XG4gICAgbG9kYXNoLmlzTWF0Y2hXaXRoID0gaXNNYXRjaFdpdGg7XG4gICAgbG9kYXNoLmlzTmFOID0gaXNOYU47XG4gICAgbG9kYXNoLmlzTmF0aXZlID0gaXNOYXRpdmU7XG4gICAgbG9kYXNoLmlzTmlsID0gaXNOaWw7XG4gICAgbG9kYXNoLmlzTnVsbCA9IGlzTnVsbDtcbiAgICBsb2Rhc2guaXNOdW1iZXIgPSBpc051bWJlcjtcbiAgICBsb2Rhc2guaXNPYmplY3QgPSBpc09iamVjdDtcbiAgICBsb2Rhc2guaXNPYmplY3RMaWtlID0gaXNPYmplY3RMaWtlO1xuICAgIGxvZGFzaC5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcbiAgICBsb2Rhc2guaXNSZWdFeHAgPSBpc1JlZ0V4cDtcbiAgICBsb2Rhc2guaXNTYWZlSW50ZWdlciA9IGlzU2FmZUludGVnZXI7XG4gICAgbG9kYXNoLmlzU2V0ID0gaXNTZXQ7XG4gICAgbG9kYXNoLmlzU3RyaW5nID0gaXNTdHJpbmc7XG4gICAgbG9kYXNoLmlzU3ltYm9sID0gaXNTeW1ib2w7XG4gICAgbG9kYXNoLmlzVHlwZWRBcnJheSA9IGlzVHlwZWRBcnJheTtcbiAgICBsb2Rhc2guaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZDtcbiAgICBsb2Rhc2guaXNXZWFrTWFwID0gaXNXZWFrTWFwO1xuICAgIGxvZGFzaC5pc1dlYWtTZXQgPSBpc1dlYWtTZXQ7XG4gICAgbG9kYXNoLmpvaW4gPSBqb2luO1xuICAgIGxvZGFzaC5rZWJhYkNhc2UgPSBrZWJhYkNhc2U7XG4gICAgbG9kYXNoLmxhc3QgPSBsYXN0O1xuICAgIGxvZGFzaC5sYXN0SW5kZXhPZiA9IGxhc3RJbmRleE9mO1xuICAgIGxvZGFzaC5sb3dlckNhc2UgPSBsb3dlckNhc2U7XG4gICAgbG9kYXNoLmxvd2VyRmlyc3QgPSBsb3dlckZpcnN0O1xuICAgIGxvZGFzaC5sdCA9IGx0O1xuICAgIGxvZGFzaC5sdGUgPSBsdGU7XG4gICAgbG9kYXNoLm1heCA9IG1heDtcbiAgICBsb2Rhc2gubWF4QnkgPSBtYXhCeTtcbiAgICBsb2Rhc2gubWVhbiA9IG1lYW47XG4gICAgbG9kYXNoLm1lYW5CeSA9IG1lYW5CeTtcbiAgICBsb2Rhc2gubWluID0gbWluO1xuICAgIGxvZGFzaC5taW5CeSA9IG1pbkJ5O1xuICAgIGxvZGFzaC5zdHViQXJyYXkgPSBzdHViQXJyYXk7XG4gICAgbG9kYXNoLnN0dWJGYWxzZSA9IHN0dWJGYWxzZTtcbiAgICBsb2Rhc2guc3R1Yk9iamVjdCA9IHN0dWJPYmplY3Q7XG4gICAgbG9kYXNoLnN0dWJTdHJpbmcgPSBzdHViU3RyaW5nO1xuICAgIGxvZGFzaC5zdHViVHJ1ZSA9IHN0dWJUcnVlO1xuICAgIGxvZGFzaC5tdWx0aXBseSA9IG11bHRpcGx5O1xuICAgIGxvZGFzaC5udGggPSBudGg7XG4gICAgbG9kYXNoLm5vQ29uZmxpY3QgPSBub0NvbmZsaWN0O1xuICAgIGxvZGFzaC5ub29wID0gbm9vcDtcbiAgICBsb2Rhc2gubm93ID0gbm93O1xuICAgIGxvZGFzaC5wYWQgPSBwYWQ7XG4gICAgbG9kYXNoLnBhZEVuZCA9IHBhZEVuZDtcbiAgICBsb2Rhc2gucGFkU3RhcnQgPSBwYWRTdGFydDtcbiAgICBsb2Rhc2gucGFyc2VJbnQgPSBwYXJzZUludDtcbiAgICBsb2Rhc2gucmFuZG9tID0gcmFuZG9tO1xuICAgIGxvZGFzaC5yZWR1Y2UgPSByZWR1Y2U7XG4gICAgbG9kYXNoLnJlZHVjZVJpZ2h0ID0gcmVkdWNlUmlnaHQ7XG4gICAgbG9kYXNoLnJlcGVhdCA9IHJlcGVhdDtcbiAgICBsb2Rhc2gucmVwbGFjZSA9IHJlcGxhY2U7XG4gICAgbG9kYXNoLnJlc3VsdCA9IHJlc3VsdDtcbiAgICBsb2Rhc2gucm91bmQgPSByb3VuZDtcbiAgICBsb2Rhc2gucnVuSW5Db250ZXh0ID0gcnVuSW5Db250ZXh0O1xuICAgIGxvZGFzaC5zYW1wbGUgPSBzYW1wbGU7XG4gICAgbG9kYXNoLnNpemUgPSBzaXplO1xuICAgIGxvZGFzaC5zbmFrZUNhc2UgPSBzbmFrZUNhc2U7XG4gICAgbG9kYXNoLnNvbWUgPSBzb21lO1xuICAgIGxvZGFzaC5zb3J0ZWRJbmRleCA9IHNvcnRlZEluZGV4O1xuICAgIGxvZGFzaC5zb3J0ZWRJbmRleEJ5ID0gc29ydGVkSW5kZXhCeTtcbiAgICBsb2Rhc2guc29ydGVkSW5kZXhPZiA9IHNvcnRlZEluZGV4T2Y7XG4gICAgbG9kYXNoLnNvcnRlZExhc3RJbmRleCA9IHNvcnRlZExhc3RJbmRleDtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4QnkgPSBzb3J0ZWRMYXN0SW5kZXhCeTtcbiAgICBsb2Rhc2guc29ydGVkTGFzdEluZGV4T2YgPSBzb3J0ZWRMYXN0SW5kZXhPZjtcbiAgICBsb2Rhc2guc3RhcnRDYXNlID0gc3RhcnRDYXNlO1xuICAgIGxvZGFzaC5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcbiAgICBsb2Rhc2guc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICBsb2Rhc2guc3VtID0gc3VtO1xuICAgIGxvZGFzaC5zdW1CeSA9IHN1bUJ5O1xuICAgIGxvZGFzaC50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIGxvZGFzaC50aW1lcyA9IHRpbWVzO1xuICAgIGxvZGFzaC50b0Zpbml0ZSA9IHRvRmluaXRlO1xuICAgIGxvZGFzaC50b0ludGVnZXIgPSB0b0ludGVnZXI7XG4gICAgbG9kYXNoLnRvTGVuZ3RoID0gdG9MZW5ndGg7XG4gICAgbG9kYXNoLnRvTG93ZXIgPSB0b0xvd2VyO1xuICAgIGxvZGFzaC50b051bWJlciA9IHRvTnVtYmVyO1xuICAgIGxvZGFzaC50b1NhZmVJbnRlZ2VyID0gdG9TYWZlSW50ZWdlcjtcbiAgICBsb2Rhc2gudG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBsb2Rhc2gudG9VcHBlciA9IHRvVXBwZXI7XG4gICAgbG9kYXNoLnRyaW0gPSB0cmltO1xuICAgIGxvZGFzaC50cmltRW5kID0gdHJpbUVuZDtcbiAgICBsb2Rhc2gudHJpbVN0YXJ0ID0gdHJpbVN0YXJ0O1xuICAgIGxvZGFzaC50cnVuY2F0ZSA9IHRydW5jYXRlO1xuICAgIGxvZGFzaC51bmVzY2FwZSA9IHVuZXNjYXBlO1xuICAgIGxvZGFzaC51bmlxdWVJZCA9IHVuaXF1ZUlkO1xuICAgIGxvZGFzaC51cHBlckNhc2UgPSB1cHBlckNhc2U7XG4gICAgbG9kYXNoLnVwcGVyRmlyc3QgPSB1cHBlckZpcnN0O1xuXG4gICAgLy8gQWRkIGFsaWFzZXMuXG4gICAgbG9kYXNoLmVhY2ggPSBmb3JFYWNoO1xuICAgIGxvZGFzaC5lYWNoUmlnaHQgPSBmb3JFYWNoUmlnaHQ7XG4gICAgbG9kYXNoLmZpcnN0ID0gaGVhZDtcblxuICAgIG1peGluKGxvZGFzaCwgKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHt9O1xuICAgICAgYmFzZUZvck93bihsb2Rhc2gsIGZ1bmN0aW9uKGZ1bmMsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKGxvZGFzaC5wcm90b3R5cGUsIG1ldGhvZE5hbWUpKSB7XG4gICAgICAgICAgc291cmNlW21ldGhvZE5hbWVdID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH0oKSksIHsgJ2NoYWluJzogZmFsc2UgfSk7XG5cbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgICAvKipcbiAgICAgKiBUaGUgc2VtYW50aWMgdmVyc2lvbiBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAc3RhdGljXG4gICAgICogQG1lbWJlck9mIF9cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGxvZGFzaC5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIC8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbiAgICBhcnJheUVhY2goWydiaW5kJywgJ2JpbmRLZXknLCAnY3VycnknLCAnY3VycnlSaWdodCcsICdwYXJ0aWFsJywgJ3BhcnRpYWxSaWdodCddLCBmdW5jdGlvbihtZXRob2ROYW1lKSB7XG4gICAgICBsb2Rhc2hbbWV0aG9kTmFtZV0ucGxhY2Vob2xkZXIgPSBsb2Rhc2g7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5kcm9wYCBhbmQgYF8udGFrZWAgdmFyaWFudHMuXG4gICAgYXJyYXlFYWNoKFsnZHJvcCcsICd0YWtlJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIG4gPSBuID09PSB1bmRlZmluZWQgPyAxIDogbmF0aXZlTWF4KHRvSW50ZWdlcihuKSwgMCk7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9ICh0aGlzLl9fZmlsdGVyZWRfXyAmJiAhaW5kZXgpXG4gICAgICAgICAgPyBuZXcgTGF6eVdyYXBwZXIodGhpcylcbiAgICAgICAgICA6IHRoaXMuY2xvbmUoKTtcblxuICAgICAgICBpZiAocmVzdWx0Ll9fZmlsdGVyZWRfXykge1xuICAgICAgICAgIHJlc3VsdC5fX3Rha2VDb3VudF9fID0gbmF0aXZlTWluKG4sIHJlc3VsdC5fX3Rha2VDb3VudF9fKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQuX192aWV3c19fLnB1c2goe1xuICAgICAgICAgICAgJ3NpemUnOiBuYXRpdmVNaW4obiwgTUFYX0FSUkFZX0xFTkdUSCksXG4gICAgICAgICAgICAndHlwZSc6IG1ldGhvZE5hbWUgKyAocmVzdWx0Ll9fZGlyX18gPCAwID8gJ1JpZ2h0JyA6ICcnKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZSArICdSaWdodCddID0gZnVuY3Rpb24obikge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXZlcnNlKClbbWV0aG9kTmFtZV0obikucmV2ZXJzZSgpO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgdGhhdCBhY2NlcHQgYW4gYGl0ZXJhdGVlYCB2YWx1ZS5cbiAgICBhcnJheUVhY2goWydmaWx0ZXInLCAnbWFwJywgJ3Rha2VXaGlsZSddLCBmdW5jdGlvbihtZXRob2ROYW1lLCBpbmRleCkge1xuICAgICAgdmFyIHR5cGUgPSBpbmRleCArIDEsXG4gICAgICAgICAgaXNGaWx0ZXIgPSB0eXBlID09IExBWllfRklMVEVSX0ZMQUcgfHwgdHlwZSA9PSBMQVpZX1dISUxFX0ZMQUc7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKGl0ZXJhdGVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5fX2l0ZXJhdGVlc19fLnB1c2goe1xuICAgICAgICAgICdpdGVyYXRlZSc6IGdldEl0ZXJhdGVlKGl0ZXJhdGVlLCAzKSxcbiAgICAgICAgICAndHlwZSc6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdC5fX2ZpbHRlcmVkX18gPSByZXN1bHQuX19maWx0ZXJlZF9fIHx8IGlzRmlsdGVyO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgTGF6eVdyYXBwZXJgIG1ldGhvZHMgZm9yIGBfLmhlYWRgIGFuZCBgXy5sYXN0YC5cbiAgICBhcnJheUVhY2goWydoZWFkJywgJ2xhc3QnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSwgaW5kZXgpIHtcbiAgICAgIHZhciB0YWtlTmFtZSA9ICd0YWtlJyArIChpbmRleCA/ICdSaWdodCcgOiAnJyk7XG5cbiAgICAgIExhenlXcmFwcGVyLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpc1t0YWtlTmFtZV0oMSkudmFsdWUoKVswXTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIGZvciBgXy5pbml0aWFsYCBhbmQgYF8udGFpbGAuXG4gICAgYXJyYXlFYWNoKFsnaW5pdGlhbCcsICd0YWlsJ10sIGZ1bmN0aW9uKG1ldGhvZE5hbWUsIGluZGV4KSB7XG4gICAgICB2YXIgZHJvcE5hbWUgPSAnZHJvcCcgKyAoaW5kZXggPyAnJyA6ICdSaWdodCcpO1xuXG4gICAgICBMYXp5V3JhcHBlci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19maWx0ZXJlZF9fID8gbmV3IExhenlXcmFwcGVyKHRoaXMpIDogdGhpc1tkcm9wTmFtZV0oMSk7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbXBhY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlcihpZGVudGl0eSk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIocHJlZGljYXRlKS5oZWFkKCk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5maW5kTGFzdCA9IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQocHJlZGljYXRlKTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmludm9rZU1hcCA9IGJhc2VSZXN0KGZ1bmN0aW9uKHBhdGgsIGFyZ3MpIHtcbiAgICAgIGlmICh0eXBlb2YgcGF0aCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VJbnZva2UodmFsdWUsIHBhdGgsIGFyZ3MpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUucmVqZWN0ID0gZnVuY3Rpb24ocHJlZGljYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIobmVnYXRlKGdldEl0ZXJhdGVlKHByZWRpY2F0ZSkpKTtcbiAgICB9O1xuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgc3RhcnQgPSB0b0ludGVnZXIoc3RhcnQpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gdGhpcztcbiAgICAgIGlmIChyZXN1bHQuX19maWx0ZXJlZF9fICYmIChzdGFydCA+IDAgfHwgZW5kIDwgMCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5V3JhcHBlcihyZXN1bHQpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGFrZVJpZ2h0KC1zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5kcm9wKHN0YXJ0KTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbmQgPSB0b0ludGVnZXIoZW5kKTtcbiAgICAgICAgcmVzdWx0ID0gZW5kIDwgMCA/IHJlc3VsdC5kcm9wUmlnaHQoLWVuZCkgOiByZXN1bHQudGFrZShlbmQgLSBzdGFydCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBMYXp5V3JhcHBlci5wcm90b3R5cGUudGFrZVJpZ2h0V2hpbGUgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUocHJlZGljYXRlKS5yZXZlcnNlKCk7XG4gICAgfTtcblxuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWtlKE1BWF9BUlJBWV9MRU5HVEgpO1xuICAgIH07XG5cbiAgICAvLyBBZGQgYExhenlXcmFwcGVyYCBtZXRob2RzIHRvIGBsb2Rhc2gucHJvdG90eXBlYC5cbiAgICBiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGNoZWNrSXRlcmF0ZWUgPSAvXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdChtZXRob2ROYW1lKSxcbiAgICAgICAgICBpc1Rha2VyID0gL14oPzpoZWFkfGxhc3QpJC8udGVzdChtZXRob2ROYW1lKSxcbiAgICAgICAgICBsb2Rhc2hGdW5jID0gbG9kYXNoW2lzVGFrZXIgPyAoJ3Rha2UnICsgKG1ldGhvZE5hbWUgPT0gJ2xhc3QnID8gJ1JpZ2h0JyA6ICcnKSkgOiBtZXRob2ROYW1lXSxcbiAgICAgICAgICByZXRVbndyYXBwZWQgPSBpc1Rha2VyIHx8IC9eZmluZC8udGVzdChtZXRob2ROYW1lKTtcblxuICAgICAgaWYgKCFsb2Rhc2hGdW5jKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXyxcbiAgICAgICAgICAgIGFyZ3MgPSBpc1Rha2VyID8gWzFdIDogYXJndW1lbnRzLFxuICAgICAgICAgICAgaXNMYXp5ID0gdmFsdWUgaW5zdGFuY2VvZiBMYXp5V3JhcHBlcixcbiAgICAgICAgICAgIGl0ZXJhdGVlID0gYXJnc1swXSxcbiAgICAgICAgICAgIHVzZUxhenkgPSBpc0xhenkgfHwgaXNBcnJheSh2YWx1ZSk7XG5cbiAgICAgICAgdmFyIGludGVyY2VwdG9yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gbG9kYXNoRnVuYy5hcHBseShsb2Rhc2gsIGFycmF5UHVzaChbdmFsdWVdLCBhcmdzKSk7XG4gICAgICAgICAgcmV0dXJuIChpc1Rha2VyICYmIGNoYWluQWxsKSA/IHJlc3VsdFswXSA6IHJlc3VsdDtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodXNlTGF6eSAmJiBjaGVja0l0ZXJhdGVlICYmIHR5cGVvZiBpdGVyYXRlZSA9PSAnZnVuY3Rpb24nICYmIGl0ZXJhdGVlLmxlbmd0aCAhPSAxKSB7XG4gICAgICAgICAgLy8gQXZvaWQgbGF6eSB1c2UgaWYgdGhlIGl0ZXJhdGVlIGhhcyBhIFwibGVuZ3RoXCIgdmFsdWUgb3RoZXIgdGhhbiBgMWAuXG4gICAgICAgICAgaXNMYXp5ID0gdXNlTGF6eSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjaGFpbkFsbCA9IHRoaXMuX19jaGFpbl9fLFxuICAgICAgICAgICAgaXNIeWJyaWQgPSAhIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLFxuICAgICAgICAgICAgaXNVbndyYXBwZWQgPSByZXRVbndyYXBwZWQgJiYgIWNoYWluQWxsLFxuICAgICAgICAgICAgb25seUxhenkgPSBpc0xhenkgJiYgIWlzSHlicmlkO1xuXG4gICAgICAgIGlmICghcmV0VW53cmFwcGVkICYmIHVzZUxhenkpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9ubHlMYXp5ID8gdmFsdWUgOiBuZXcgTGF6eVdyYXBwZXIodGhpcyk7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodmFsdWUsIGFyZ3MpO1xuICAgICAgICAgIHJlc3VsdC5fX2FjdGlvbnNfXy5wdXNoKHsgJ2Z1bmMnOiB0aHJ1LCAnYXJncyc6IFtpbnRlcmNlcHRvcl0sICd0aGlzQXJnJzogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcihyZXN1bHQsIGNoYWluQWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNVbndyYXBwZWQgJiYgb25seUxhenkpIHtcbiAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB0aGlzLnRocnUoaW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gaXNVbndyYXBwZWQgPyAoaXNUYWtlciA/IHJlc3VsdC52YWx1ZSgpWzBdIDogcmVzdWx0LnZhbHVlKCkpIDogcmVzdWx0O1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIEFkZCBgQXJyYXlgIG1ldGhvZHMgdG8gYGxvZGFzaC5wcm90b3R5cGVgLlxuICAgIGFycmF5RWFjaChbJ3BvcCcsICdwdXNoJywgJ3NoaWZ0JywgJ3NvcnQnLCAnc3BsaWNlJywgJ3Vuc2hpZnQnXSwgZnVuY3Rpb24obWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBhcnJheVByb3RvW21ldGhvZE5hbWVdLFxuICAgICAgICAgIGNoYWluTmFtZSA9IC9eKD86cHVzaHxzb3J0fHVuc2hpZnQpJC8udGVzdChtZXRob2ROYW1lKSA/ICd0YXAnIDogJ3RocnUnLFxuICAgICAgICAgIHJldFVud3JhcHBlZCA9IC9eKD86cG9wfHNoaWZ0KSQvLnRlc3QobWV0aG9kTmFtZSk7XG5cbiAgICAgIGxvZGFzaC5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGlmIChyZXRVbndyYXBwZWQgJiYgIXRoaXMuX19jaGFpbl9fKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXNbY2hhaW5OYW1lXShmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSwgYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIE1hcCBtaW5pZmllZCBtZXRob2QgbmFtZXMgdG8gdGhlaXIgcmVhbCBuYW1lcy5cbiAgICBiYXNlRm9yT3duKExhenlXcmFwcGVyLnByb3RvdHlwZSwgZnVuY3Rpb24oZnVuYywgbWV0aG9kTmFtZSkge1xuICAgICAgdmFyIGxvZGFzaEZ1bmMgPSBsb2Rhc2hbbWV0aG9kTmFtZV07XG4gICAgICBpZiAobG9kYXNoRnVuYykge1xuICAgICAgICB2YXIga2V5ID0gbG9kYXNoRnVuYy5uYW1lICsgJyc7XG4gICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIGtleSkpIHtcbiAgICAgICAgICByZWFsTmFtZXNba2V5XSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlYWxOYW1lc1trZXldLnB1c2goeyAnbmFtZSc6IG1ldGhvZE5hbWUsICdmdW5jJzogbG9kYXNoRnVuYyB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlYWxOYW1lc1tjcmVhdGVIeWJyaWQodW5kZWZpbmVkLCBXUkFQX0JJTkRfS0VZX0ZMQUcpLm5hbWVdID0gW3tcbiAgICAgICduYW1lJzogJ3dyYXBwZXInLFxuICAgICAgJ2Z1bmMnOiB1bmRlZmluZWRcbiAgICB9XTtcblxuICAgIC8vIEFkZCBtZXRob2RzIHRvIGBMYXp5V3JhcHBlcmAuXG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLmNsb25lID0gbGF6eUNsb25lO1xuICAgIExhenlXcmFwcGVyLnByb3RvdHlwZS5yZXZlcnNlID0gbGF6eVJldmVyc2U7XG4gICAgTGF6eVdyYXBwZXIucHJvdG90eXBlLnZhbHVlID0gbGF6eVZhbHVlO1xuXG4gICAgLy8gQWRkIGNoYWluIHNlcXVlbmNlIG1ldGhvZHMgdG8gdGhlIGBsb2Rhc2hgIHdyYXBwZXIuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5hdCA9IHdyYXBwZXJBdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLmNoYWluID0gd3JhcHBlckNoYWluO1xuICAgIGxvZGFzaC5wcm90b3R5cGUuY29tbWl0ID0gd3JhcHBlckNvbW1pdDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLm5leHQgPSB3cmFwcGVyTmV4dDtcbiAgICBsb2Rhc2gucHJvdG90eXBlLnBsYW50ID0gd3JhcHBlclBsYW50O1xuICAgIGxvZGFzaC5wcm90b3R5cGUucmV2ZXJzZSA9IHdyYXBwZXJSZXZlcnNlO1xuICAgIGxvZGFzaC5wcm90b3R5cGUudG9KU09OID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZU9mID0gbG9kYXNoLnByb3RvdHlwZS52YWx1ZSA9IHdyYXBwZXJWYWx1ZTtcblxuICAgIC8vIEFkZCBsYXp5IGFsaWFzZXMuXG4gICAgbG9kYXNoLnByb3RvdHlwZS5maXJzdCA9IGxvZGFzaC5wcm90b3R5cGUuaGVhZDtcblxuICAgIGlmIChzeW1JdGVyYXRvcikge1xuICAgICAgbG9kYXNoLnByb3RvdHlwZVtzeW1JdGVyYXRvcl0gPSB3cmFwcGVyVG9JdGVyYXRvcjtcbiAgICB9XG4gICAgcmV0dXJuIGxvZGFzaDtcbiAgfSk7XG5cbiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiAgLy8gRXhwb3J0IGxvZGFzaC5cbiAgdmFyIF8gPSBydW5JbkNvbnRleHQoKTtcblxuICAvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBjb25kaXRpb24gcGF0dGVybnMgbGlrZTpcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gRXhwb3NlIExvZGFzaCBvbiB0aGUgZ2xvYmFsIG9iamVjdCB0byBwcmV2ZW50IGVycm9ycyB3aGVuIExvZGFzaCBpc1xuICAgIC8vIGxvYWRlZCBieSBhIHNjcmlwdCB0YWcgaW4gdGhlIHByZXNlbmNlIG9mIGFuIEFNRCBsb2FkZXIuXG4gICAgLy8gU2VlIGh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjbWlzbWF0Y2ggZm9yIG1vcmUgZGV0YWlscy5cbiAgICAvLyBVc2UgYF8ubm9Db25mbGljdGAgdG8gcmVtb3ZlIExvZGFzaCBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LlxuICAgIHJvb3QuXyA9IF87XG5cbiAgICAvLyBEZWZpbmUgYXMgYW4gYW5vbnltb3VzIG1vZHVsZSBzbywgdGhyb3VnaCBwYXRoIG1hcHBpbmcsIGl0IGNhbiBiZVxuICAgIC8vIHJlZmVyZW5jZWQgYXMgdGhlIFwidW5kZXJzY29yZVwiIG1vZHVsZS5cbiAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gXztcbiAgICB9KTtcbiAgfVxuICAvLyBDaGVjayBmb3IgYGV4cG9ydHNgIGFmdGVyIGBkZWZpbmVgIGluIGNhc2UgYSBidWlsZCBvcHRpbWl6ZXIgYWRkcyBpdC5cbiAgZWxzZSBpZiAoZnJlZU1vZHVsZSkge1xuICAgIC8vIEV4cG9ydCBmb3IgTm9kZS5qcy5cbiAgICAoZnJlZU1vZHVsZS5leHBvcnRzID0gXykuXyA9IF87XG4gICAgLy8gRXhwb3J0IGZvciBDb21tb25KUyBzdXBwb3J0LlxuICAgIGZyZWVFeHBvcnRzLl8gPSBfO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIEV4cG9ydCB0byB0aGUgZ2xvYmFsIG9iamVjdC5cbiAgICByb290Ll8gPSBfO1xuICB9XG59LmNhbGwodGhpcykpO1xuIiwiKGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdC5uZWFybGV5ID0gZmFjdG9yeSgpO1xuICAgIH1cbn0odGhpcywgZnVuY3Rpb24oKSB7XG5cbiAgICBmdW5jdGlvbiBSdWxlKG5hbWUsIHN5bWJvbHMsIHBvc3Rwcm9jZXNzKSB7XG4gICAgICAgIHRoaXMuaWQgPSArK1J1bGUuaGlnaGVzdElkO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzOyAgICAgICAgLy8gYSBsaXN0IG9mIGxpdGVyYWwgfCByZWdleCBjbGFzcyB8IG5vbnRlcm1pbmFsXG4gICAgICAgIHRoaXMucG9zdHByb2Nlc3MgPSBwb3N0cHJvY2VzcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIFJ1bGUuaGlnaGVzdElkID0gMDtcblxuICAgIFJ1bGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24od2l0aEN1cnNvckF0KSB7XG4gICAgICAgIHZhciBzeW1ib2xTZXF1ZW5jZSA9ICh0eXBlb2Ygd2l0aEN1cnNvckF0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc3ltYm9scy5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoICAgdGhpcy5zeW1ib2xzLnNsaWNlKDAsIHdpdGhDdXJzb3JBdCkubWFwKGdldFN5bWJvbFNob3J0RGlzcGxheSkuam9pbignICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFwiIOKXjyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0aGlzLnN5bWJvbHMuc2xpY2Uod2l0aEN1cnNvckF0KS5tYXAoZ2V0U3ltYm9sU2hvcnREaXNwbGF5KS5qb2luKCcgJykgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyBcIiDihpIgXCIgKyBzeW1ib2xTZXF1ZW5jZTtcbiAgICB9XG5cblxuICAgIC8vIGEgU3RhdGUgaXMgYSBydWxlIGF0IGEgcG9zaXRpb24gZnJvbSBhIGdpdmVuIHN0YXJ0aW5nIHBvaW50IGluIHRoZSBpbnB1dCBzdHJlYW0gKHJlZmVyZW5jZSlcbiAgICBmdW5jdGlvbiBTdGF0ZShydWxlLCBkb3QsIHJlZmVyZW5jZSwgd2FudGVkQnkpIHtcbiAgICAgICAgdGhpcy5ydWxlID0gcnVsZTtcbiAgICAgICAgdGhpcy5kb3QgPSBkb3Q7XG4gICAgICAgIHRoaXMucmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgdGhpcy53YW50ZWRCeSA9IHdhbnRlZEJ5O1xuICAgICAgICB0aGlzLmlzQ29tcGxldGUgPSB0aGlzLmRvdCA9PT0gcnVsZS5zeW1ib2xzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFwie1wiICsgdGhpcy5ydWxlLnRvU3RyaW5nKHRoaXMuZG90KSArIFwifSwgZnJvbTogXCIgKyAodGhpcy5yZWZlcmVuY2UgfHwgMCk7XG4gICAgfTtcblxuICAgIFN0YXRlLnByb3RvdHlwZS5uZXh0U3RhdGUgPSBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBuZXcgU3RhdGUodGhpcy5ydWxlLCB0aGlzLmRvdCArIDEsIHRoaXMucmVmZXJlbmNlLCB0aGlzLndhbnRlZEJ5KTtcbiAgICAgICAgc3RhdGUubGVmdCA9IHRoaXM7XG4gICAgICAgIHN0YXRlLnJpZ2h0ID0gY2hpbGQ7XG4gICAgICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBzdGF0ZS5kYXRhID0gc3RhdGUuYnVpbGQoKTtcbiAgICAgICAgICAgIC8vIEhhdmluZyByaWdodCBzZXQgaGVyZSB3aWxsIHByZXZlbnQgdGhlIHJpZ2h0IHN0YXRlIGFuZCBpdHMgY2hpbGRyZW5cbiAgICAgICAgICAgIC8vIGZvcm0gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWRcbiAgICAgICAgICAgIHN0YXRlLnJpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuXG4gICAgU3RhdGUucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXM7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2gobm9kZS5yaWdodC5kYXRhKTtcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLmxlZnQ7XG4gICAgICAgIH0gd2hpbGUgKG5vZGUubGVmdCk7XG4gICAgICAgIGNoaWxkcmVuLnJldmVyc2UoKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH07XG5cbiAgICBTdGF0ZS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnJ1bGUucG9zdHByb2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMucnVsZS5wb3N0cHJvY2Vzcyh0aGlzLmRhdGEsIHRoaXMucmVmZXJlbmNlLCBQYXJzZXIuZmFpbCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBmdW5jdGlvbiBDb2x1bW4oZ3JhbW1hciwgaW5kZXgpIHtcbiAgICAgICAgdGhpcy5ncmFtbWFyID0gZ3JhbW1hcjtcbiAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLnN0YXRlcyA9IFtdO1xuICAgICAgICB0aGlzLndhbnRzID0ge307IC8vIHN0YXRlcyBpbmRleGVkIGJ5IHRoZSBub24tdGVybWluYWwgdGhleSBleHBlY3RcbiAgICAgICAgdGhpcy5zY2FubmFibGUgPSBbXTsgLy8gbGlzdCBvZiBzdGF0ZXMgdGhhdCBleHBlY3QgYSB0b2tlblxuICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHt9OyAvLyBzdGF0ZXMgdGhhdCBhcmUgbnVsbGFibGVcbiAgICB9XG5cblxuICAgIENvbHVtbi5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uKG5leHRDb2x1bW4pIHtcbiAgICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgICB2YXIgd2FudHMgPSB0aGlzLndhbnRzO1xuICAgICAgICB2YXIgY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWQ7XG5cbiAgICAgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBzdGF0ZXMubGVuZ3RoOyB3KyspIHsgLy8gbmIuIHdlIHB1c2goKSBkdXJpbmcgaXRlcmF0aW9uXG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbd107XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZmluaXNoKCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmRhdGEgIT09IFBhcnNlci5mYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIHZhciB3YW50ZWRCeSA9IHN0YXRlLndhbnRlZEJ5O1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gd2FudGVkQnkubGVuZ3RoOyBpLS07ICkgeyAvLyB0aGlzIGxpbmUgaXMgaG90XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IHdhbnRlZEJ5W2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0ZShsZWZ0LCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsLWNhc2UgbnVsbGFibGVzXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZWZlcmVuY2UgPT09IHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBmdXR1cmUgcHJlZGljdG9ycyBvZiB0aGlzIHJ1bGUgZ2V0IGNvbXBsZXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHAgPSBzdGF0ZS5ydWxlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jb21wbGV0ZWRbZXhwXSA9IHRoaXMuY29tcGxldGVkW2V4cF0gfHwgW10pLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHF1ZXVlIHNjYW5uYWJsZSBzdGF0ZXNcbiAgICAgICAgICAgICAgICB2YXIgZXhwID0gc3RhdGUucnVsZS5zeW1ib2xzW3N0YXRlLmRvdF07XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBleHAgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nhbm5hYmxlLnB1c2goc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBwcmVkaWN0XG4gICAgICAgICAgICAgICAgaWYgKHdhbnRzW2V4cF0pIHtcbiAgICAgICAgICAgICAgICAgICAgd2FudHNbZXhwXS5wdXNoKHN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkLmhhc093blByb3BlcnR5KGV4cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudWxscyA9IGNvbXBsZXRlZFtleHBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9IG51bGxzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoc3RhdGUsIHJpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbnRzW2V4cF0gPSBbc3RhdGVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWRpY3QoZXhwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBDb2x1bW4ucHJvdG90eXBlLnByZWRpY3QgPSBmdW5jdGlvbihleHApIHtcbiAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5ncmFtbWFyLmJ5TmFtZVtleHBdIHx8IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByID0gcnVsZXNbaV07XG4gICAgICAgICAgICB2YXIgd2FudGVkQnkgPSB0aGlzLndhbnRzW2V4cF07XG4gICAgICAgICAgICB2YXIgcyA9IG5ldyBTdGF0ZShyLCAwLCB0aGlzLmluZGV4LCB3YW50ZWRCeSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlcy5wdXNoKHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQ29sdW1uLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHZhciBjb3B5ID0gbGVmdC5uZXh0U3RhdGUocmlnaHQpO1xuICAgICAgICB0aGlzLnN0YXRlcy5wdXNoKGNvcHkpO1xuICAgIH1cblxuXG4gICAgZnVuY3Rpb24gR3JhbW1hcihydWxlcywgc3RhcnQpIHtcbiAgICAgICAgdGhpcy5ydWxlcyA9IHJ1bGVzO1xuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQgfHwgdGhpcy5ydWxlc1swXS5uYW1lO1xuICAgICAgICB2YXIgYnlOYW1lID0gdGhpcy5ieU5hbWUgPSB7fTtcbiAgICAgICAgdGhpcy5ydWxlcy5mb3JFYWNoKGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICAgICAgICAgIGlmICghYnlOYW1lLmhhc093blByb3BlcnR5KHJ1bGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICBieU5hbWVbcnVsZS5uYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnlOYW1lW3J1bGUubmFtZV0ucHVzaChydWxlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU28gd2UgY2FuIGFsbG93IHBhc3NpbmcgKHJ1bGVzLCBzdGFydCkgZGlyZWN0bHkgdG8gUGFyc2VyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIEdyYW1tYXIuZnJvbUNvbXBpbGVkID0gZnVuY3Rpb24ocnVsZXMsIHN0YXJ0KSB7XG4gICAgICAgIHZhciBsZXhlciA9IHJ1bGVzLkxleGVyO1xuICAgICAgICBpZiAocnVsZXMuUGFyc2VyU3RhcnQpIHtcbiAgICAgICAgICBzdGFydCA9IHJ1bGVzLlBhcnNlclN0YXJ0O1xuICAgICAgICAgIHJ1bGVzID0gcnVsZXMuUGFyc2VyUnVsZXM7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVzID0gcnVsZXMubWFwKGZ1bmN0aW9uIChyKSB7IHJldHVybiAobmV3IFJ1bGUoci5uYW1lLCByLnN5bWJvbHMsIHIucG9zdHByb2Nlc3MpKTsgfSk7XG4gICAgICAgIHZhciBnID0gbmV3IEdyYW1tYXIocnVsZXMsIHN0YXJ0KTtcbiAgICAgICAgZy5sZXhlciA9IGxleGVyOyAvLyBuYi4gc3RvcmluZyBsZXhlciBvbiBHcmFtbWFyIGlzIGlmZnksIGJ1dCB1bmF2b2lkYWJsZVxuICAgICAgICByZXR1cm4gZztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIFN0cmVhbUxleGVyKCkge1xuICAgICAgdGhpcy5yZXNldChcIlwiKTtcbiAgICB9XG5cbiAgICBTdHJlYW1MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihkYXRhLCBzdGF0ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLmxpbmUgPSBzdGF0ZSA/IHN0YXRlLmxpbmUgOiAxO1xuICAgICAgICB0aGlzLmxhc3RMaW5lQnJlYWsgPSBzdGF0ZSA/IC1zdGF0ZS5jb2wgOiAwO1xuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4IDwgdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4KytdO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXFxuJykge1xuICAgICAgICAgICAgICB0aGlzLmxpbmUgKz0gMTtcbiAgICAgICAgICAgICAgdGhpcy5sYXN0TGluZUJyZWFrID0gdGhpcy5pbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IGNofTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIFN0cmVhbUxleGVyLnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgIGNvbDogdGhpcy5pbmRleCAtIHRoaXMubGFzdExpbmVCcmVhayxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBTdHJlYW1MZXhlci5wcm90b3R5cGUuZm9ybWF0RXJyb3IgPSBmdW5jdGlvbih0b2tlbiwgbWVzc2FnZSkge1xuICAgICAgICAvLyBuYi4gdGhpcyBnZXRzIGNhbGxlZCBhZnRlciBjb25zdW1pbmcgdGhlIG9mZmVuZGluZyB0b2tlbixcbiAgICAgICAgLy8gc28gdGhlIGN1bHByaXQgaXMgaW5kZXgtMVxuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgIGlmICh0eXBlb2YgYnVmZmVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIGxpbmVzID0gYnVmZmVyXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAgICAgLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgwLCB0aGlzLmxpbmUgLSA1KSwgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGluZVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHZhciBuZXh0TGluZUJyZWFrID0gYnVmZmVyLmluZGV4T2YoJ1xcbicsIHRoaXMuaW5kZXgpO1xuICAgICAgICAgICAgaWYgKG5leHRMaW5lQnJlYWsgPT09IC0xKSBuZXh0TGluZUJyZWFrID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBjb2wgPSB0aGlzLmluZGV4IC0gdGhpcy5sYXN0TGluZUJyZWFrO1xuICAgICAgICAgICAgdmFyIGxhc3RMaW5lRGlnaXRzID0gU3RyaW5nKHRoaXMubGluZSkubGVuZ3RoO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBcIiBhdCBsaW5lIFwiICsgdGhpcy5saW5lICsgXCIgY29sIFwiICsgY29sICsgXCI6XFxuXFxuXCI7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGxpbmVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihsaW5lLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWQodGhpcy5saW5lIC0gbGluZXMubGVuZ3RoICsgaSArIDEsIGxhc3RMaW5lRGlnaXRzKSArIFwiIFwiICsgbGluZTtcbiAgICAgICAgICAgICAgICB9LCB0aGlzKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBcIlxcblwiICsgcGFkKFwiXCIsIGxhc3RMaW5lRGlnaXRzICsgY29sKSArIFwiXlxcblwiO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWVzc2FnZSArIFwiIGF0IGluZGV4IFwiICsgKHRoaXMuaW5kZXggLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhZChuLCBsZW5ndGgpIHtcbiAgICAgICAgICAgIHZhciBzID0gU3RyaW5nKG4pO1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5KGxlbmd0aCAtIHMubGVuZ3RoICsgMSkuam9pbihcIiBcIikgKyBzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gUGFyc2VyKHJ1bGVzLCBzdGFydCwgb3B0aW9ucykge1xuICAgICAgICBpZiAocnVsZXMgaW5zdGFuY2VvZiBHcmFtbWFyKSB7XG4gICAgICAgICAgICB2YXIgZ3JhbW1hciA9IHJ1bGVzO1xuICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSBzdGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBncmFtbWFyID0gR3JhbW1hci5mcm9tQ29tcGlsZWQocnVsZXMsIHN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyYW1tYXIgPSBncmFtbWFyO1xuXG4gICAgICAgIC8vIFJlYWQgb3B0aW9uc1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZWVwSGlzdG9yeTogZmFsc2UsXG4gICAgICAgICAgICBsZXhlcjogZ3JhbW1hci5sZXhlciB8fCBuZXcgU3RyZWFtTGV4ZXIsXG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGtleSBpbiAob3B0aW9ucyB8fCB7fSkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dXAgbGV4ZXJcbiAgICAgICAgdGhpcy5sZXhlciA9IHRoaXMub3B0aW9ucy5sZXhlcjtcbiAgICAgICAgdGhpcy5sZXhlclN0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIFNldHVwIGEgdGFibGVcbiAgICAgICAgdmFyIGNvbHVtbiA9IG5ldyBDb2x1bW4oZ3JhbW1hciwgMCk7XG4gICAgICAgIHZhciB0YWJsZSA9IHRoaXMudGFibGUgPSBbY29sdW1uXTtcblxuICAgICAgICAvLyBJIGNvdWxkIGJlIGV4cGVjdGluZyBhbnl0aGluZy5cbiAgICAgICAgY29sdW1uLndhbnRzW2dyYW1tYXIuc3RhcnRdID0gW107XG4gICAgICAgIGNvbHVtbi5wcmVkaWN0KGdyYW1tYXIuc3RhcnQpO1xuICAgICAgICAvLyBUT0RPIHdoYXQgaWYgc3RhcnQgcnVsZSBpcyBudWxsYWJsZT9cbiAgICAgICAgY29sdW1uLnByb2Nlc3MoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsgLy8gdG9rZW4gaW5kZXhcbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgYSByZXNlcnZlZCB0b2tlbiBmb3IgaW5kaWNhdGluZyBhIHBhcnNlIGZhaWxcbiAgICBQYXJzZXIuZmFpbCA9IHt9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5mZWVkID0gZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgdmFyIGxleGVyID0gdGhpcy5sZXhlcjtcbiAgICAgICAgbGV4ZXIucmVzZXQoY2h1bmssIHRoaXMubGV4ZXJTdGF0ZSk7XG5cbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IGxleGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIG5leHQgY29sdW1uIHNvIHRoYXQgdGhlIGVycm9yIHJlcG9ydGVyXG4gICAgICAgICAgICAgICAgLy8gY2FuIGRpc3BsYXkgdGhlIGNvcnJlY3RseSBwcmVkaWN0ZWQgc3RhdGVzLlxuICAgICAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gbmV3IENvbHVtbih0aGlzLmdyYW1tYXIsIHRoaXMuY3VycmVudCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUucHVzaChuZXh0Q29sdW1uKTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKHRoaXMucmVwb3J0TGV4ZXJFcnJvcihlKSk7XG4gICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICBlcnIudG9rZW4gPSBlLnRva2VuO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdlIGFkZCBuZXcgc3RhdGVzIHRvIHRhYmxlW2N1cnJlbnQrMV1cbiAgICAgICAgICAgIHZhciBjb2x1bW4gPSB0aGlzLnRhYmxlW3RoaXMuY3VycmVudF07XG5cbiAgICAgICAgICAgIC8vIEdDIHVudXNlZCBzdGF0ZXNcbiAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmtlZXBIaXN0b3J5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGFibGVbdGhpcy5jdXJyZW50IC0gMV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuID0gdGhpcy5jdXJyZW50ICsgMTtcbiAgICAgICAgICAgIHZhciBuZXh0Q29sdW1uID0gbmV3IENvbHVtbih0aGlzLmdyYW1tYXIsIG4pO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5wdXNoKG5leHRDb2x1bW4pO1xuXG4gICAgICAgICAgICAvLyBBZHZhbmNlIGFsbCB0b2tlbnMgdGhhdCBleHBlY3QgdGhlIHN5bWJvbFxuICAgICAgICAgICAgdmFyIGxpdGVyYWwgPSB0b2tlbi50ZXh0ICE9PSB1bmRlZmluZWQgPyB0b2tlbi50ZXh0IDogdG9rZW4udmFsdWU7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBsZXhlci5jb25zdHJ1Y3RvciA9PT0gU3RyZWFtTGV4ZXIgPyB0b2tlbi52YWx1ZSA6IHRva2VuO1xuICAgICAgICAgICAgdmFyIHNjYW5uYWJsZSA9IGNvbHVtbi5zY2FubmFibGU7XG4gICAgICAgICAgICBmb3IgKHZhciB3ID0gc2Nhbm5hYmxlLmxlbmd0aDsgdy0tOyApIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzY2FubmFibGVbd107XG4gICAgICAgICAgICAgICAgdmFyIGV4cGVjdCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBjb25zdW1lIHRoZSB0b2tlblxuICAgICAgICAgICAgICAgIC8vIGVpdGhlciByZWdleCBvciBsaXRlcmFsXG4gICAgICAgICAgICAgICAgaWYgKGV4cGVjdC50ZXN0ID8gZXhwZWN0LnRlc3QodmFsdWUpIDpcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0LnR5cGUgPyBleHBlY3QudHlwZSA9PT0gdG9rZW4udHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGV4cGVjdC5saXRlcmFsID09PSBsaXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBpdFxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHN0YXRlLm5leHRTdGF0ZSh7ZGF0YTogdmFsdWUsIHRva2VuOiB0b2tlbiwgaXNUb2tlbjogdHJ1ZSwgcmVmZXJlbmNlOiBuIC0gMX0pO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Q29sdW1uLnN0YXRlcy5wdXNoKG5leHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTmV4dCwgZm9yIGVhY2ggb2YgdGhlIHJ1bGVzLCB3ZSBlaXRoZXJcbiAgICAgICAgICAgIC8vIChhKSBjb21wbGV0ZSBpdCwgYW5kIHRyeSB0byBzZWUgaWYgdGhlIHJlZmVyZW5jZSByb3cgZXhwZWN0ZWQgdGhhdFxuICAgICAgICAgICAgLy8gICAgIHJ1bGVcbiAgICAgICAgICAgIC8vIChiKSBwcmVkaWN0IHRoZSBuZXh0IG5vbnRlcm1pbmFsIGl0IGV4cGVjdHMgYnkgYWRkaW5nIHRoYXRcbiAgICAgICAgICAgIC8vICAgICBub250ZXJtaW5hbCdzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICAvLyBUbyBwcmV2ZW50IGR1cGxpY2F0aW9uLCB3ZSBhbHNvIGtlZXAgdHJhY2sgb2YgcnVsZXMgd2UgaGF2ZSBhbHJlYWR5XG4gICAgICAgICAgICAvLyBhZGRlZFxuXG4gICAgICAgICAgICBuZXh0Q29sdW1uLnByb2Nlc3MoKTtcblxuICAgICAgICAgICAgLy8gSWYgbmVlZGVkLCB0aHJvdyBhbiBlcnJvcjpcbiAgICAgICAgICAgIGlmIChuZXh0Q29sdW1uLnN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBObyBzdGF0ZXMgYXQgYWxsISBUaGlzIGlzIG5vdCBnb29kLlxuICAgICAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IodGhpcy5yZXBvcnRFcnJvcih0b2tlbikpO1xuICAgICAgICAgICAgICAgIGVyci5vZmZzZXQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgZXJyLnRva2VuID0gdG9rZW47XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtYXliZSBzYXZlIGxleGVyIHN0YXRlXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmtlZXBIaXN0b3J5KSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5sZXhlclN0YXRlID0gbGV4ZXIuc2F2ZSgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSBsZXhlci5zYXZlKClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY3JlbWVudGFsbHkga2VlcCB0cmFjayBvZiByZXN1bHRzXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZmluaXNoKCk7XG5cbiAgICAgICAgLy8gQWxsb3cgY2hhaW5pbmcsIGZvciB3aGF0ZXZlciBpdCdzIHdvcnRoXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydExleGVyRXJyb3IgPSBmdW5jdGlvbihsZXhlckVycm9yKSB7XG4gICAgICAgIHZhciB0b2tlbkRpc3BsYXksIGxleGVyTWVzc2FnZTtcbiAgICAgICAgLy8gUGxhbm5pbmcgdG8gYWRkIGEgdG9rZW4gcHJvcGVydHkgdG8gbW9vJ3MgdGhyb3duIGVycm9yXG4gICAgICAgIC8vIGV2ZW4gb24gZXJyb3JpbmcgdG9rZW5zIHRvIGJlIHVzZWQgaW4gZXJyb3IgZGlzcGxheSBiZWxvd1xuICAgICAgICB2YXIgdG9rZW4gPSBsZXhlckVycm9yLnRva2VuO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHRva2VuRGlzcGxheSA9IFwiaW5wdXQgXCIgKyBKU09OLnN0cmluZ2lmeSh0b2tlbi50ZXh0WzBdKSArIFwiIChsZXhlciBlcnJvcilcIjtcbiAgICAgICAgICAgIGxleGVyTWVzc2FnZSA9IHRoaXMubGV4ZXIuZm9ybWF0RXJyb3IodG9rZW4sIFwiU3ludGF4IGVycm9yXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9rZW5EaXNwbGF5ID0gXCJpbnB1dCAobGV4ZXIgZXJyb3IpXCI7XG4gICAgICAgICAgICBsZXhlck1lc3NhZ2UgPSBsZXhlckVycm9yLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVwb3J0RXJyb3JDb21tb24obGV4ZXJNZXNzYWdlLCB0b2tlbkRpc3BsYXkpO1xuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24odG9rZW4pIHtcbiAgICAgICAgdmFyIHRva2VuRGlzcGxheSA9ICh0b2tlbi50eXBlID8gdG9rZW4udHlwZSArIFwiIHRva2VuOiBcIiA6IFwiXCIpICsgSlNPTi5zdHJpbmdpZnkodG9rZW4udmFsdWUgIT09IHVuZGVmaW5lZCA/IHRva2VuLnZhbHVlIDogdG9rZW4pO1xuICAgICAgICB2YXIgbGV4ZXJNZXNzYWdlID0gdGhpcy5sZXhlci5mb3JtYXRFcnJvcih0b2tlbiwgXCJTeW50YXggZXJyb3JcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG9ydEVycm9yQ29tbW9uKGxleGVyTWVzc2FnZSwgdG9rZW5EaXNwbGF5KTtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXBvcnRFcnJvckNvbW1vbiA9IGZ1bmN0aW9uKGxleGVyTWVzc2FnZSwgdG9rZW5EaXNwbGF5KSB7XG4gICAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgICBsaW5lcy5wdXNoKGxleGVyTWVzc2FnZSk7XG4gICAgICAgIHZhciBsYXN0Q29sdW1uSW5kZXggPSB0aGlzLnRhYmxlLmxlbmd0aCAtIDI7XG4gICAgICAgIHZhciBsYXN0Q29sdW1uID0gdGhpcy50YWJsZVtsYXN0Q29sdW1uSW5kZXhdO1xuICAgICAgICB2YXIgZXhwZWN0YW50U3RhdGVzID0gbGFzdENvbHVtbi5zdGF0ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24oc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbmV4dFN5bWJvbCA9IHN0YXRlLnJ1bGUuc3ltYm9sc1tzdGF0ZS5kb3RdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0U3ltYm9sICYmIHR5cGVvZiBuZXh0U3ltYm9sICE9PSBcInN0cmluZ1wiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGV4cGVjdGFudFN0YXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGxpbmVzLnB1c2goJ1VuZXhwZWN0ZWQgJyArIHRva2VuRGlzcGxheSArICcuIEkgZGlkIG5vdCBleHBlY3QgYW55IG1vcmUgaW5wdXQuIEhlcmUgaXMgdGhlIHN0YXRlIG9mIG15IHBhcnNlIHRhYmxlOlxcbicpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5U3RhdGVTdGFjayhsYXN0Q29sdW1uLnN0YXRlcywgbGluZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZXMucHVzaCgnVW5leHBlY3RlZCAnICsgdG9rZW5EaXNwbGF5ICsgJy4gSW5zdGVhZCwgSSB3YXMgZXhwZWN0aW5nIHRvIHNlZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcXG4nKTtcbiAgICAgICAgICAgIC8vIERpc3BsYXkgYSBcInN0YXRlIHN0YWNrXCIgZm9yIGVhY2ggZXhwZWN0YW50IHN0YXRlXG4gICAgICAgICAgICAvLyAtIHdoaWNoIHNob3dzIHlvdSBob3cgdGhpcyBzdGF0ZSBjYW1lIHRvIGJlLCBzdGVwIGJ5IHN0ZXAuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGRlcml2YXRpb24sIHdlIG9ubHkgZGlzcGxheSB0aGUgZmlyc3Qgb25lLlxuICAgICAgICAgICAgdmFyIHN0YXRlU3RhY2tzID0gZXhwZWN0YW50U3RhdGVzXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEZpcnN0U3RhdGVTdGFjayhzdGF0ZSwgW10pIHx8IFtzdGF0ZV07XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAvLyBEaXNwbGF5IGVhY2ggc3RhdGUgdGhhdCBpcyBleHBlY3RpbmcgYSB0ZXJtaW5hbCBzeW1ib2wgbmV4dC5cbiAgICAgICAgICAgIHN0YXRlU3RhY2tzLmZvckVhY2goZnVuY3Rpb24oc3RhdGVTdGFjaykge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlU3RhY2tbMF07XG4gICAgICAgICAgICAgICAgdmFyIG5leHRTeW1ib2wgPSBzdGF0ZS5ydWxlLnN5bWJvbHNbc3RhdGUuZG90XTtcbiAgICAgICAgICAgICAgICB2YXIgc3ltYm9sRGlzcGxheSA9IHRoaXMuZ2V0U3ltYm9sRGlzcGxheShuZXh0U3ltYm9sKTtcbiAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKCdBICcgKyBzeW1ib2xEaXNwbGF5ICsgJyBiYXNlZCBvbjonKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlTdGF0ZVN0YWNrKHN0YXRlU3RhY2ssIGxpbmVzKTtcbiAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGxpbmVzLnB1c2goXCJcIik7XG4gICAgICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBcbiAgICBQYXJzZXIucHJvdG90eXBlLmRpc3BsYXlTdGF0ZVN0YWNrID0gZnVuY3Rpb24oc3RhdGVTdGFjaywgbGluZXMpIHtcbiAgICAgICAgdmFyIGxhc3REaXNwbGF5O1xuICAgICAgICB2YXIgc2FtZURpc3BsYXlDb3VudCA9IDA7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3RhdGVTdGFjay5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVTdGFja1tqXTtcbiAgICAgICAgICAgIHZhciBkaXNwbGF5ID0gc3RhdGUucnVsZS50b1N0cmluZyhzdGF0ZS5kb3QpO1xuICAgICAgICAgICAgaWYgKGRpc3BsYXkgPT09IGxhc3REaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgc2FtZURpc3BsYXlDb3VudCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoc2FtZURpc3BsYXlDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaCgnICAgIF4gJyArIHNhbWVEaXNwbGF5Q291bnQgKyAnIG1vcmUgbGluZXMgaWRlbnRpY2FsIHRvIHRoaXMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2FtZURpc3BsYXlDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgbGluZXMucHVzaCgnICAgICcgKyBkaXNwbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3REaXNwbGF5ID0gZGlzcGxheTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmdldFN5bWJvbERpc3BsYXkgPSBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICAgICAgcmV0dXJuIGdldFN5bWJvbExvbmdEaXNwbGF5KHN5bWJvbCk7XG4gICAgfTtcblxuICAgIC8qXG4gICAgQnVpbGRzIGEgdGhlIGZpcnN0IHN0YXRlIHN0YWNrLiBZb3UgY2FuIHRoaW5rIG9mIGEgc3RhdGUgc3RhY2sgYXMgdGhlIGNhbGwgc3RhY2tcbiAgICBvZiB0aGUgcmVjdXJzaXZlLWRlc2NlbnQgcGFyc2VyIHdoaWNoIHRoZSBOZWFybGV5IHBhcnNlIGFsZ29yaXRobSBzaW11bGF0ZXMuXG4gICAgQSBzdGF0ZSBzdGFjayBpcyByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBvZiBzdGF0ZSBvYmplY3RzLiBXaXRoaW4gYVxuICAgIHN0YXRlIHN0YWNrLCB0aGUgZmlyc3QgaXRlbSBvZiB0aGUgYXJyYXkgd2lsbCBiZSB0aGUgc3RhcnRpbmdcbiAgICBzdGF0ZSwgd2l0aCBlYWNoIHN1Y2Nlc3NpdmUgaXRlbSBpbiB0aGUgYXJyYXkgZ29pbmcgZnVydGhlciBiYWNrIGludG8gaGlzdG9yeS5cblxuICAgIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZ2l2ZW4gYSBzdGFydGluZyBzdGF0ZSBhbmQgYW4gZW1wdHkgYXJyYXkgcmVwcmVzZW50aW5nXG4gICAgdGhlIHZpc2l0ZWQgc3RhdGVzLCBhbmQgaXQgcmV0dXJucyBhbiBzaW5nbGUgc3RhdGUgc3RhY2suXG5cbiAgICAqL1xuICAgIFBhcnNlci5wcm90b3R5cGUuYnVpbGRGaXJzdFN0YXRlU3RhY2sgPSBmdW5jdGlvbihzdGF0ZSwgdmlzaXRlZCkge1xuICAgICAgICBpZiAodmlzaXRlZC5pbmRleE9mKHN0YXRlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIEZvdW5kIGN5Y2xlLCByZXR1cm4gbnVsbFxuICAgICAgICAgICAgLy8gdG8gZWxpbWluYXRlIHRoaXMgcGF0aCBmcm9tIHRoZSByZXN1bHRzLCBiZWNhdXNlXG4gICAgICAgICAgICAvLyB3ZSBkb24ndCBrbm93IGhvdyB0byBkaXNwbGF5IGl0IG1lYW5pbmdmdWxseVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLndhbnRlZEJ5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtzdGF0ZV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZTdGF0ZSA9IHN0YXRlLndhbnRlZEJ5WzBdO1xuICAgICAgICB2YXIgY2hpbGRWaXNpdGVkID0gW3N0YXRlXS5jb25jYXQodmlzaXRlZCk7XG4gICAgICAgIHZhciBjaGlsZFJlc3VsdCA9IHRoaXMuYnVpbGRGaXJzdFN0YXRlU3RhY2socHJldlN0YXRlLCBjaGlsZFZpc2l0ZWQpO1xuICAgICAgICBpZiAoY2hpbGRSZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbc3RhdGVdLmNvbmNhdChjaGlsZFJlc3VsdCk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuc2F2ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY29sdW1uID0gdGhpcy50YWJsZVt0aGlzLmN1cnJlbnRdO1xuICAgICAgICBjb2x1bW4ubGV4ZXJTdGF0ZSA9IHRoaXMubGV4ZXJTdGF0ZTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXN0b3JlID0gZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvbHVtbi5pbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGFibGVbaW5kZXhdID0gY29sdW1uO1xuICAgICAgICB0aGlzLnRhYmxlLnNwbGljZShpbmRleCArIDEpO1xuICAgICAgICB0aGlzLmxleGVyU3RhdGUgPSBjb2x1bW4ubGV4ZXJTdGF0ZTtcblxuICAgICAgICAvLyBJbmNyZW1lbnRhbGx5IGtlZXAgdHJhY2sgb2YgcmVzdWx0c1xuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmZpbmlzaCgpO1xuICAgIH07XG5cbiAgICAvLyBuYi4gZGVwcmVjYXRlZDogdXNlIHNhdmUvcmVzdG9yZSBpbnN0ZWFkIVxuICAgIFBhcnNlci5wcm90b3R5cGUucmV3aW5kID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMua2VlcEhpc3RvcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0IG9wdGlvbiBga2VlcEhpc3RvcnlgIHRvIGVuYWJsZSByZXdpbmRpbmcnKVxuICAgICAgICB9XG4gICAgICAgIC8vIG5iLiByZWNhbGwgY29sdW1uICh0YWJsZSkgaW5kaWNpZXMgZmFsbCBiZXR3ZWVuIHRva2VuIGluZGljaWVzLlxuICAgICAgICAvLyAgICAgICAgY29sIDAgICAtLSAgIHRva2VuIDAgICAtLSAgIGNvbCAxXG4gICAgICAgIHRoaXMucmVzdG9yZSh0aGlzLnRhYmxlW2luZGV4XSk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgcG9zc2libGUgcGFyc2luZ3NcbiAgICAgICAgdmFyIGNvbnNpZGVyYXRpb25zID0gW107XG4gICAgICAgIHZhciBzdGFydCA9IHRoaXMuZ3JhbW1hci5zdGFydDtcbiAgICAgICAgdmFyIGNvbHVtbiA9IHRoaXMudGFibGVbdGhpcy50YWJsZS5sZW5ndGggLSAxXVxuICAgICAgICBjb2x1bW4uc3RhdGVzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGlmICh0LnJ1bGUubmFtZSA9PT0gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgJiYgdC5kb3QgPT09IHQucnVsZS5zeW1ib2xzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAmJiB0LnJlZmVyZW5jZSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAmJiB0LmRhdGEgIT09IFBhcnNlci5mYWlsKSB7XG4gICAgICAgICAgICAgICAgY29uc2lkZXJhdGlvbnMucHVzaCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb25zaWRlcmF0aW9ucy5tYXAoZnVuY3Rpb24oYykge3JldHVybiBjLmRhdGE7IH0pO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBnZXRTeW1ib2xMb25nRGlzcGxheShzeW1ib2wpIHtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2Ygc3ltYm9sO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sLmxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3ltYm9sLmxpdGVyYWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NoYXJhY3RlciBtYXRjaGluZyAnICsgc3ltYm9sO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2wudHlwZSArICcgdG9rZW4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudGVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndG9rZW4gbWF0Y2hpbmcgJyArIFN0cmluZyhzeW1ib2wudGVzdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBzeW1ib2wgdHlwZTogJyArIHN5bWJvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTeW1ib2xTaG9ydERpc3BsYXkoc3ltYm9sKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHN5bWJvbDtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKHN5bWJvbC5saXRlcmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN5bWJvbC5saXRlcmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbC50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzeW1ib2wudHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJScgKyBzeW1ib2wudHlwZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ltYm9sLnRlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzwnICsgU3RyaW5nKHN5bWJvbC50ZXN0KSArICc+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHN5bWJvbCB0eXBlOiAnICsgc3ltYm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIFBhcnNlcjogUGFyc2VyLFxuICAgICAgICBHcmFtbWFyOiBHcmFtbWFyLFxuICAgICAgICBSdWxlOiBSdWxlLFxuICAgIH07XG5cbn0pKTtcbiIsImltcG9ydCBncmFtbWFyIGZyb20gJy4uL2dyYW1tYXIvbGVkZ2VyJztcbmltcG9ydCB7IGZsYXRNYXAsIHNvcnRlZFVuaXEgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgR3JhbW1hciwgUGFyc2VyIH0gZnJvbSAnbmVhcmxleSc7XG5leHBvcnQgY29uc3QgcGFyc2UgPSAoZmlsZUNvbnRlbnRzKSA9PiB7XG4gICAgY29uc3Qgc3BsaXRGaWxlQ29udGVudHMgPSBmaWxlQ29udGVudHMuc3BsaXQoL1xcblsgXFx0XSpcXG4vKTsgLy8gU3BsaXQgb24gYmxhbmsgbGluZXNcbiAgICBjb25zdCByZXN1bHRzID0gc3BsaXRGaWxlQ29udGVudHNcbiAgICAgICAgLmZpbHRlcigobGluZXMpID0+IGxpbmVzLnRyaW0oKSAhPT0gJycpXG4gICAgICAgIC5tYXAoKGxpbmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoR3JhbW1hci5mcm9tQ29tcGlsZWQoZ3JhbW1hcikpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJyZXN1bHRzID0gcGFyc2VyLmZlZWQobGluZXMpLmZpbmlzaCgpO1xuICAgICAgICAgICAgaWYgKGlubmVycmVzdWx0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2UgKCR7aW5uZXJyZXN1bHRzLmxlbmd0aH0gcmVzdWx0cyk6IFwiJHtsaW5lc31cImApO1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5uZXJyZXN1bHRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHBhcnNlOiBcIiR7bGluZXN9XCJgKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9KVxuICAgICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLmZsYXQoMSk7XG4gICAgLy8gVE9ETzogVXNlIGFsaWFzIHJvd3MgdG8gY29udmVydCBjYXRlZ29yaWVzXG4gICAgY29uc3QgdHhzID0gcmVzdWx0cy5mbGF0TWFwKChlbCkgPT4gZWwudHlwZSA9PT0gJ3R4JyA/IGVsIDogW10pO1xuICAgIGNvbnN0IHBheWVlcyA9IHNvcnRlZFVuaXEodHhzXG4gICAgICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUucGF5ZWUpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS50b0xvd2VyQ2FzZSgpID4gYi50b0xvd2VyQ2FzZSgpID8gMSA6IC0xKSkpO1xuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBzb3J0ZWRVbmlxKGZsYXRNYXAodHhzLCAoeyB2YWx1ZSB9KSA9PiB2YWx1ZS5leHBlbnNlbGluZXMuZmxhdE1hcCgobGluZSkgPT4gbGluZS5jYXRlZ29yeSA/IGxpbmUuY2F0ZWdvcnkgOiBbXSkpLnNvcnQoKGEsIGIpID0+IChhLnRvTG93ZXJDYXNlKCkgPiBiLnRvTG93ZXJDYXNlKCkgPyAxIDogLTEpKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiB0eHMsXG4gICAgICAgIHBheWVlcyxcbiAgICAgICAgY2F0ZWdvcmllcyxcbiAgICB9O1xufTtcbiIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICcuL3BhcnNlcic7XG5leHBvcnQgY29uc3QgZm9ybWF0RXhwZW5zZSA9ICh0eCwgc2V0dGluZ3MpID0+IHtcbiAgICBjb25zdCBzeW1iID0gc2V0dGluZ3MuY3VycmVuY3lTeW1ib2w7XG4gICAgLy8gVGhlIGZpbmFsIGxpbmUgbmVlZHMgdG8gaGF2ZSB0aGUgYW1vdW50IHVwZGF0ZWQgc28gYWxsIGxpbmVzIHRvdGFsIDAuXG4gICAgY29uc3QgdG90YWwgPSB0eC52YWx1ZS5leHBlbnNlbGluZXNcbiAgICAgICAgLnNsaWNlKDAsIC0xKVxuICAgICAgICAubWFwKCh7IGFtb3VudCB9KSA9PiBhbW91bnQpXG4gICAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IGN1cnIgKyBwcmV2LCAwKTtcbiAgICB0eC52YWx1ZS5leHBlbnNlbGluZXNbdHgudmFsdWUuZXhwZW5zZWxpbmVzLmxlbmd0aCAtIDFdLmFtb3VudCA9IHRvdGFsICogLTE7XG4gICAgY29uc3Qgam9pbmVkTGluZXMgPSB0eC52YWx1ZS5leHBlbnNlbGluZXNcbiAgICAgICAgLm1hcCgoeyBjYXRlZ29yeSwgYW1vdW50IH0sIGkpID0+IHtcbiAgICAgICAgaWYgKGkgIT09IHR4LnZhbHVlLmV4cGVuc2VsaW5lcy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICBzZXR0aW5ncy5pbmNsdWRlRmluYWxMaW5lQW1vdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICAke2NhdGVnb3J5fSAgICAke3N5bWJ9JHthbW91bnQudG9GaXhlZCgyKX1gO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBhbW91bnQgaXMgb3B0aW9uYWwgb24gdGhlIGZpbmFsIGxpbmVcbiAgICAgICAgcmV0dXJuIGAgICAgJHtjYXRlZ29yeX1gO1xuICAgIH0pXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICByZXR1cm4gYFxcbiR7dHgudmFsdWUuZGF0ZX0gJHt0eC52YWx1ZS5wYXllZX1cXG4ke2pvaW5lZExpbmVzfWA7XG59O1xuZXhwb3J0IGNvbnN0IGFwcGVuZExlZGdlciA9IChjYWNoZSwgdmF1bHQsIHNldHRpbmdzLCBuZXdFeHBlbnNlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBmaWxlID0gY2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3Qoc2V0dGluZ3MubGVkZ2VyRmlsZSwgJycpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50cyA9IHlpZWxkIHZhdWx0LnJlYWQoZmlsZSk7XG4gICAgICAgIGNvbnN0IG5ld0ZpbGVDb250ZW50cyA9IGAke2ZpbGVDb250ZW50c31cXG4ke25ld0V4cGVuc2V9YDtcbiAgICAgICAgeWllbGQgdmF1bHQubW9kaWZ5KGZpbGUsIG5ld0ZpbGVDb250ZW50cyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB5aWVsZCB2YXVsdC5jcmVhdGUoc2V0dGluZ3MubGVkZ2VyRmlsZSwgbmV3RXhwZW5zZSk7XG4gICAgfVxufSk7XG5leHBvcnQgY29uc3QgZ2V0VHJhbnNhY3Rpb25DYWNoZSA9IChjYWNoZSwgdmF1bHQsIHNldHRpbmdzKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBmaWxlID0gY2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3Qoc2V0dGluZ3MubGVkZ2VyRmlsZSwgJycpIHx8XG4gICAgICAgICh5aWVsZCB2YXVsdC5jcmVhdGUoc2V0dGluZ3MubGVkZ2VyRmlsZSwgJycpKTtcbiAgICBjb25zdCBmaWxlQ29udGVudHMgPSB5aWVsZCB2YXVsdC5yZWFkKGZpbGUpO1xuICAgIHJldHVybiBwYXJzZShmaWxlQ29udGVudHMpO1xufSk7XG4iLCIvKipcbiAqIEljb24gdXNlZCBpbiB0aGUgc2lkZSByaWJib24uIFZpZXdib3ggMTAweDEwMFxuICovXG5leHBvcnQgY29uc3QgYmlsbEljb24gPSAnPHBhdGggZD1cIm0zNy41IDQyLjUxMWgxMi41YTUgNC45OTkgMCAwIDAgMC05Ljk5OGgtNXYtMi40OTk1YTUgNC45OTkgMCAwIDAtMTAgMHYyLjc0OTVhMTIuNSAxMi40OTggMCAwIDAgMi41IDI0Ljc0NWg1YTIuNSAyLjQ5OTUgMCAwIDEgMCA0Ljk5OWgtMTIuNWE1IDQuOTk5IDAgMCAwIDAgOS45OThoNXYyLjQ5OTVhNSA0Ljk5OSAwIDAgMCAxMCAwdi0yLjc0OTVhMTIuNSAxMi40OTggMCAwIDAtMi41LTI0Ljc0NWgtNWEyLjUgMi40OTk1IDAgMCAxIDAtNC45OTl6bTU3LjUgNy40OTg1aC0xNXYtNDQuOTkxYTUgNC45OTkgMCAwIDAtMi41LTQuMzQ5MSA1IDQuOTk5IDAgMCAwLTUgMGwtMTUgOC41OTgzLTE1LTguNTk4M2E1IDQuOTk5IDAgMCAwLTUgMGwtMTUgOC41OTgzLTE1LTguNTk4M2E1IDQuOTk5IDAgMCAwLTUgMCA1IDQuOTk5IDAgMCAwLTIuNSA0LjM0OTF2NzkuOTg0YTE1IDE0Ljk5NyAwIDAgMCAxNSAxNC45OTdoNzBhMTUgMTQuOTk3IDAgMCAwIDE1LTE0Ljk5N3YtMjkuOTk0YTUgNC45OTkgMCAwIDAtNS00Ljk5OXptLTgwIDM5Ljk5MmE1IDQuOTk5IDAgMCAxLTUtNC45OTl2LTcxLjMzNmwxMCA1LjY5ODlhNS40IDUuMzk4OSAwIDAgMCA1IDBsMTUtOC41OTgzIDE1IDguNTk4M2E1LjQgNS4zOTg5IDAgMCAwIDUgMGwxMC01LjY5ODl2NzEuMzM2YTE1IDE0Ljk5NyAwIDAgMCAwLjkgNC45OTl6bTc1LTQuOTk5YTUgNC45OTkgMCAwIDEtMTAgMHYtMjQuOTk1aDEwelwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCI0Ljk5OTVcIi8+JztcbmV4cG9ydCBjb25zdCBidXlNZUFDb2ZmZWUgPSBgXG48c3ZnIHdpZHRoPVwiMTUwXCIgaGVpZ2h0PVwiNDJcIiBmaWxsPVwibm9uZVwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDI2MCA3M1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiA8cGF0aCBkPVwiTTAgMTEuNjhDMCA1LjIyOTMyIDUuMjI5MzEgMCAxMS42OCAwSDI0OC4yQzI1NC42NTEgMCAyNTkuODggNS4yMjkzMSAyNTkuODggMTEuNjhWNjEuMzJDMjU5Ljg4IDY3Ljc3MDcgMjU0LjY1MSA3MyAyNDguMiA3M0gxMS42OEM1LjIyOTMxIDczIDAgNjcuNzcwNyAwIDYxLjMyVjExLjY4WlwiIGZpbGw9XCIjZmQwXCIvPlxuIDxnIGZpbGw9XCIjMEQwQzIyXCI+XG4gIDxwYXRoIGQ9XCJtNTIuMjU3IDI0LjAwOC0wLjAzMi0wLjAxODktMC4wNzQyLTAuMDIyNmMwLjAyOTggMC4wMjUyIDAuMDY3MiAwLjAzOTggMC4xMDYyIDAuMDQxNXpcIi8+XG4gIDxwYXRoIGQ9XCJtNTIuNzI1IDI3LjM0Ni0wLjAzNTMgMC4wMDk5IDAuMDM1My0wLjAwOTl6XCIvPlxuICA8cGF0aCBkPVwibTUyLjI3IDI0LjAwMmMtMC4wMDQxLTVlLTQgLTAuMDA4Mi0wLjAwMTUtMC4wMTIxLTAuMDAyOS0yZS00IDAuMDAyNy0yZS00IDAuMDA1NCAwIDAuMDA4MSAwLjAwNDQtNmUtNCAwLjAwODYtMC4wMDI0IDAuMDEyMS0wLjAwNTJ6XCIvPlxuICA8cGF0aCBkPVwibTUyLjI1OCAyNC4wMDloMC4wMDY1di00ZS0zbC0wLjAwNjUgNGUtM3pcIi8+XG4gIDxwYXRoIGQ9XCJtNTIuNjk3IDI3LjMzOSAwLjA1NC0wLjAzMDggMC4wMjAxLTAuMDExMyAwLjAxODMtMC4wMTk1Yy0wLjAzNDMgMC4wMTQ4LTAuMDY1NiAwLjAzNTctMC4wOTI0IDAuMDYxNnpcIi8+XG4gIDxwYXRoIGQ9XCJtNTIuMzQ4IDI0LjA4MS0wLjA1MjgtMC4wNTAyLTAuMDM1OC0wLjAxOTVjMC4wMTkyIDAuMDMzOSAwLjA1MSAwLjA1OSAwLjA4ODYgMC4wNjk3elwiLz5cbiAgPHBhdGggZD1cIm0zOS4wNjggNTYuNDY5Yy0wLjA0MjIgMC4wMTgyLTAuMDc5MSAwLjA0NjgtMC4xMDc1IDAuMDgzbDAuMDMzNC0wLjAyMTRjMC4wMjI2LTAuMDIwOCAwLjA1NDYtMC4wNDUzIDAuMDc0MS0wLjA2MTZ6XCIvPlxuICA8cGF0aCBkPVwibTQ2Ljc4IDU0Ljk1MmMwLTAuMDQ3Ny0wLjAyMzMtMC4wMzg5LTAuMDE3NiAwLjEzMDggMC0wLjAxMzkgMC4wMDU3LTAuMDI3NyAwLjAwODItMC4wNDA5IDAuMDAzMS0wLjAzMDIgMC4wMDU2LTAuMDU5NyAwLjAwOTQtMC4wODk5elwiLz5cbiAgPHBhdGggZD1cIm00NS45ODQgNTYuNDY5Yy0wLjA0MjIgMC4wMTgyLTAuMDc5MSAwLjA0NjgtMC4xMDc0IDAuMDgzbDAuMDMzMy0wLjAyMTRjMC4wMjI2LTAuMDIwOCAwLjA1NDYtMC4wNDUzIDAuMDc0MS0wLjA2MTZ6XCIvPlxuICA8cGF0aCBkPVwibTMzLjYzMSA1Ni44M2MtMC4wMzItMC4wMjc4LTAuMDcxMi0wLjA0NjEtMC4xMTMxLTAuMDUyOCAwLjAzMzkgMC4wMTY0IDAuMDY3OSAwLjAzMjcgMC4wOTA1IDAuMDQ1M2wwLjAyMjYgMC4wMDc1elwiLz5cbiAgPHBhdGggZD1cIm0zMi40MTIgNTUuNjZjLTVlLTMgLTAuMDQ5NS0wLjAyMDItMC4wOTc0LTAuMDQ0Ni0wLjE0MDggMC4wMTczIDAuMDQ1MiAwLjAzMTggMC4wOTE0IDAuMDQzNCAwLjEzODNsMC4wMDEyIDAuMDAyNXpcIi8+XG4gPC9nPlxuIDxwYXRoIGQ9XCJtNDAuNjIzIDM0LjcyMmMtMS42NzgxIDAuNzE4NC0zLjU4MjYgMS41MzMtNi4wNTA4IDEuNTMzLTEuMDMyNS0yZS0zIC0yLjA2LTAuMTQzNy0zLjA1NDYtMC40MjExbDEuNzA3MSAxNy41MjZjMC4wNjA0IDAuNzMyNSAwLjM5NDEgMS40MTU2IDAuOTM0OCAxLjkxMzQgMC41NDA4IDAuNDk3OSAxLjI0OSAwLjc3NDMgMS45ODQgMC43NzQxIDAgMCAyLjQyMDUgMC4xMjU3IDMuMjI4MSAwLjEyNTcgMC44NjkzIDAgMy40NzU4LTAuMTI1NyAzLjQ3NTgtMC4xMjU3IDAuNzM0OSAwIDEuNDQzLTAuMjc2NCAxLjk4MzYtMC43NzQzIDAuNTQwNi0wLjQ5NzggMC44NzQyLTEuMTgwOCAwLjkzNDYtMS45MTMybDEuODI4NC0xOS4zNjhjLTAuODE3MS0wLjI3OS0xLjY0MTctMC40NjQ0LTIuNTcxMy0wLjQ2NDQtMS42MDc3LTdlLTQgLTIuOTAzMSAwLjU1MzEtNC4zOTk3IDEuMTkzNXpcIiBmaWxsPVwiI2ZmZlwiLz5cbiA8cGF0aCBkPVwibTI2LjIzNCAyNy4yNDUgMC4wMjg5IDAuMDI3IDAuMDE4OCAwLjAxMTNjLTAuMDE0NS0wLjAxNDQtMC4wMzA1LTAuMDI3My0wLjA0NzctMC4wMzgzelwiIGZpbGw9XCIjMEQwQzIyXCIvPlxuIDxwYXRoIGQ9XCJtNTUuNDkxIDI1LjYyNy0wLjI1Ny0xLjI5NjdjLTAuMjMwNy0xLjE2MzQtMC43NTQzLTIuMjYyNy0xLjk0ODUtMi42ODMyLTAuMzgyNy0wLjEzNDUtMC44MTcxLTAuMTkyMy0xLjExMDYtMC40NzA3LTAuMjkzNS0wLjI3ODUtMC4zODAyLTAuNzEwOS0wLjQ0ODEtMS4xMTE5LTAuMTI1Ny0wLjczNi0wLjI0MzktMS40NzI2LTAuMzcyNy0yLjIwNzQtMC4xMTEzLTAuNjMxNi0wLjE5OTMtMS4zNDEyLTAuNDg5LTEuOTIwNy0wLjM3NzEtMC43NzgyLTEuMTU5Ny0xLjIzMzItMS45Mzc4LTEuNTM0My0wLjM5ODctMC4xNDg4LTAuODA1Ni0wLjI3NDctMS4yMTg3LTAuMzc3MS0xLjk0NC0wLjUxMjktMy45ODgtMC43MDE0LTUuOTg4LTAuODA4OS0yLjQwMDUtMC4xMzI1LTQuODA3NC0wLjA5MjYtNy4yMDIyIDAuMTE5NC0xLjc4MjUgMC4xNjIyLTMuNjU5OSAwLjM1ODMtNS4zNTM4IDAuOTc0OS0wLjYxOTEgMC4yMjU2LTEuMjU3MSAwLjQ5NjUtMS43Mjc4IDAuOTc0OC0wLjU3NzcgMC41ODc3LTAuNzY2MiAxLjQ5NjUtMC4zNDQ1IDIuMjI5NCAwLjI5OTggMC41MjA0IDAuODA3NyAwLjg4ODEgMS4zNDYzIDEuMTMxMyAwLjcwMTYgMC4zMTM0IDEuNDM0NCAwLjU1MTkgMi4xODYgMC43MTE1IDIuMDkzIDAuNDYyNiA0LjI2MDggMC42NDQzIDYuMzk5MSAwLjcyMTYgMi4zNjk5IDAuMDk1NiA0Ljc0MzcgMC4wMTgxIDcuMTAyMy0wLjIzMiAwLjU4MzMtMC4wNjQxIDEuMTY1NS0wLjE0MSAxLjc0NjctMC4yMzA2IDAuNjg0NS0wLjEwNSAxLjEyMzgtMSAwLjkyMi0xLjYyMzUtMC4yNDEzLTAuNzQ1NC0wLjg4OTktMS4wMzQ2LTEuNjIzNC0wLjkyMjEtMC45MDM4NyAwLjE0Mzk2LTEuODUzNCAwLjIxMTQtMi42OTA4IDAuMjgzNS0xLjE1NTIgMC4wODA1LTIuMzEzNiAwLjExNzUtMy40NzEzIDAuMTE5NC0xLjEzNzYgMC0yLjI3NTktMC4wMzItMy40MTEtMC4xMDY4LTEuNTY4OS0wLjEzOTM3LTIuOTEyNS0wLjMwNjItNC4yODIxLTAuNjAyOC0wLjE2ODQ0LTAuMTUyNzMtMC4xMDE0OC0wLjI3MjUgMC4xMTkzLTAuMzM5NCAwLjU2NzY4LTAuMTIyNzcgMS4xMTIyLTAuMTk3NSAxLjYzODYtMC4yODY2aDAuMDAzOGMwLjI1NTgtMC4wMTcgMC41MTI5LTAuMDYyOCAwLjc2NzQtMC4wOTMgMi4yMTQ3LTAuMjMwNCA0LjQ0MjYtMC4zMDg5IDYuNjY4LTAuMjM1MSAyLjEzNDkgMC4wNTQ0NSAzLjk1MDggMC4yNTgxNiA1LjkyMzkgMC42MjM1IDAuNzYzIDAuMTY2IDEuNzQyOSAwLjIyIDIuMDgyMyAxLjA1NTkgMC4zNDQ3MyAxLjIyMTcgMC41ODg4MSAyLjU3MTIgMC44MzcyIDMuNzI3MiAwLjA3Njc1IDAuMzY1OCAwLjAxMTY5IDAuNDY1NjUtMC4zODcyIDAuNTUyNS03LjQ4NTMgMS4yNTQtMTUuMDUzIDAuNTk5NDktMjEuMzA4LTAuNDE4LTAuNzYzNi0wLjEyNTctMS40OTQtMC4wNjI4LTIuMTg0NyAwLjMxNDMtMC41NjcgMC4zMTAyLTEuMDI1OSAwLjc4Ni0xLjMxNTUgMS4zNjM5LTAuMjk3OSAwLjYxNTktMC4zODY2IDEuMjg2Ni0wLjUxOTggMS45NDg0LTAuMTMzMyAwLjY2MTgtMC4zNDA3IDEuMzc0LTAuMjYyMSAyLjA1MzQgMC4xNjkxIDEuNDY2NCAxLjE5NDIgMi42NTggMi42Njg3IDIuOTI0NSAxLjM4NzIgMC4yNTE0IDIuNzgxOSAwLjQ1NTEgNC4xODAzIDAuNjI4NiA2LjM5NzUgMC41ODUyOSAxMi4zMyAwLjY3MDg4IDE3Ljg5OSAwLjEwMyAwLjg0NzI4LTAuMDYwODQgMS4xMzQxIDAuMTgzNDUgMS4wNDA4IDEuMDMzMy0wLjg2MDE4IDguMjA5NS0xLjYwMTYgMTUuNzcyLTIuMzYzMiAyMy4wNS0wLjIzODkgMS4yMzk0LTEuMDc4IDIuMDAwNi0yLjMwMjMgMi4yNzktMS4xMjE3IDAuMjU1My0yLjI2NzYgMC4zODkzLTMuNDE3OSAwLjM5OTgtMS4yNzUzIDAuMDA2OS0yLjU1LTAuMDQ5Ny0zLjgyNTMtMC4wNDI4LTEuMzYxMyAwLjAwNzYtMy4wMjg4LTAuMTE4Mi00LjA3OTctMS4xMzEzLTAuOTIzMy0wLjg5LTEuMDUwOS0yLjI4MzUtMS4xNzY2LTMuNDg4NC0wLjczNDgxLTcuMDQ2NC0xLjQ1NjItMTMuOTc3LTIuMDQ5Ni0xOS42NzUtMC4wNzE3LTAuNjg0NS0wLjU1NjMtMS4zNTQ1LTEuMzItMS4zMTk5LTAuNjUzNiAwLjAyODktMS4zOTY1IDAuNTg0NS0xLjMxOTkgMS4zMTk5IDAuODE0MzggNy44MTMyIDEuNTgxMiAxNS4xOTIgMi4yOTEgMjEuOTkxIDAuMjg3MyAyLjYxNzEgMi4yODYgNC4wMjc2IDQuNzYxMSA0LjQyNDggMS40NDU2IDAuMjMyNSAyLjkyNjQgMC4yODAzIDQuMzkzNCAwLjMwNDIgMS44ODA2IDAuMDMwMiAzLjc4IDAuMTAyNCA1LjYyOTctMC4yMzgyIDIuNzQxLTAuNTAyOCA0Ljc5NzYtMi4zMzMxIDUuMDkxMS01LjE3MjIgMC45MDk4My04Ljg4MDQgMS41Nzc4LTE1LjM5MiAyLjQxMTYtMjMuNTE5IDAuMDUzNDUtMC42NDc2MyAwLjExNDI0LTAuNzE0NTYgMC43NTkzLTAuODI5IDAuNzgzOC0wLjE1MjggMS41MzMtMC40MTM2IDIuMDkwNS0xLjAxMDEgMC44ODc1LTAuOTQ5NyAxLjA2NDEtMi4xODc5IDAuNzUwNC0zLjQzNjF6bS0yLjg3NzQgMS41MDI4Yy0wLjI4MTUgMC4yNjc3LTAuNzA1OCAwLjM5MjItMS4xMjUgMC40NTQ0LTQuNzAxNCAwLjY5NzctOS40NzEzIDEuMDUwOS0xNC4yMjQgMC44OTUtMy40MDE2LTAuMTE2My02Ljc2NzMtMC40OTQtMTAuMTM1LTAuOTY5OC0xLjI5MzUtMC4zMjIxNC0xLjExOTUtMS4wNzE1LTEuMDIwNy0yLjI4NzIgMC4xMDE4LTAuNTA3OCAwLjI5NjctMS4xODQ4IDAuOTAwNy0xLjI1NyAwLjk0MjgtMC4xMTA3IDIuMDM3NiAwLjI4NzIgMi45NzA0IDAuNDI4NiAxLjEyMjkgMC4xNzE0IDIuMjUwMSAwLjMwODYgMy4zODE1IDAuNDExNyA0LjgyODMgMC40NCA5LjczNzcgMC4zNzE1IDE0LjU0NS0wLjI3MjIgMC44NzYxLTAuMTE3NyAxLjc0OTItMC4yNTQ1IDIuNjE5LTAuNDEwNCAwLjc3NS0wLjEzODkgMS42MzQyLTAuMzk5NyAyLjEwMjUgMC40MDI5IDAuMzIxMSAwLjU0NjggMC4zNjM5IDEuMjc4NCAwLjMxNDIgMS44OTYzLTAuMDE1MyAwLjI2OTItMC4xMzI5IDAuNTIyMy0wLjMyODcgMC43MDc3elwiIGZpbGw9XCIjMEQwQzIyXCIvPlxuIDxnIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gIDxnIGZpbGw9XCIjMGQwYzIzXCI+XG4gICA8cGF0aCBkPVwibTgxLjEzIDQwLjE5M2MtMC4yNzQ2IDAuNTI0LTAuNjUyMSAwLjk4MDMtMS4xMzI0IDEuMzY3NS0wLjQ4MDMgMC4zODc1LTEuMDQwNyAwLjcwMjktMS42ODEyIDAuOTQ1OC0wLjY0MDUgMC4yNDM1LTEuMjg1MSAwLjQwNjktMS45MzMxIDAuNDkwMi0wLjY0ODMgMC4wODM1LTEuMjc3NSAwLjA3NjMtMS44ODcyLTAuMDIyOS0wLjYxLTAuMDk4Ni0xLjEyODktMC4yOTk4LTEuNTU1NS0wLjYwNGwwLjQ4MDYtNC45OTE2YzAuNDQxOS0wLjE1MTggMC45OTgzLTAuMzA3NiAxLjY2OTUtMC40NjcyIDAuNjcxLTAuMTU5NCAxLjM2MTEtMC4yNzM2IDIuMDcwNC0wLjM0MTggMC43MDkyLTAuMDY4NiAxLjM3OTktMC4wNjA1IDIuMDEzMSAwLjAyMjggMC42MzI0IDAuMDgzNiAxLjEzMjEgMC4yODQ4IDEuNDk4MSAwLjYwNDEgMC4xOTgyIDAuMTgyMiAwLjM2NjIgMC4zNzk2IDAuNTAzNSAwLjU5MjUgMC4xMzcgMC4yMTI4IDAuMjIwOSAwLjQzMzEgMC4yNTE2IDAuNjYxIDAuMDc2MSAwLjYzODItMC4wMjI5IDEuMjE5NC0wLjI5NzQgMS43NDM2em0tNi45NzcyLTEwLjYzM2MwLjMyMDQtMC4xOTc1IDAuNzA1NS0wLjM3MjUgMS4xNTUzLTAuNTI0NiAwLjQ0OTgtMC4xNTE1IDAuOTExMi0wLjI1ODIgMS4zODQtMC4zMTg5IDAuNDcyNS0wLjA2MDUgMC45MzM5LTAuMDY4NiAxLjM4NC0wLjAyMjkgMC40NDk1IDAuMDQ1NyAwLjg0NjUgMC4xNzA5IDEuMTg5NiAwLjM3NTkgMC4zNDMgMC4yMDU0IDAuNTk4NCAwLjUwMTcgMC43NjYxIDAuODg4OSAwLjE2NzcgMC4zODc4IDAuMjEzNiAwLjg3NzkgMC4xMzczIDEuNDcwNC0wLjA2MSAwLjQ3MTEtMC4yNDgyIDAuODcwMS0wLjU2MDQgMS4xOTY2LTAuMzEyNiAwLjMyNy0wLjY5NDIgMC42MDAzLTEuMTQzNyAwLjgyMDYtMC45MzY0NSAwLjQ3NjE1LTEuOTI0NCAwLjYyNjY2LTIuODgyNCAwLjgwOTEtMC42NTY2NSAwLjEwNTU0LTEuMjM0MiAwLjEwMDQ3LTEuODg3MiAwLjEzNjh6bTkuNDQ3NyA3LjQwNzRjLTAuMjQ0MS0wLjUzMTUtMC41NzItMC45OTg3LTAuOTgzNS0xLjQwMTgtMC40MTE4LTAuNDAyNS0wLjkwMDItMC42OTQ5LTEuNDY0MS0wLjg3NzMgMC4yNDM4LTAuMTk3NSAwLjQ4NC0wLjUwOSAwLjcyMDYtMC45MzQ2IDAuMjM2Mi0wLjQyNTEgMC40MzgyLTAuODg4OSAwLjYwNTktMS4zOTAzIDAuMTY3OC0wLjUwMTcgMC4yODI0LTEuMDA2NiAwLjM0MzMtMS41MTU4IDAuMDYwNy0wLjUwODkgMC4wMzc4LTAuOTQ1OC0wLjA2ODUtMS4zMTA4LTAuMjU5Ny0wLjkxMTQtMC42Njc0LTEuNjI1Ni0xLjIyNDEtMi4xNDI0LTAuNTU2OS0wLjUxNjQtMS4yMDQ2LTAuODczNS0xLjk0NDMtMS4wNzEzLTAuNzM5OC0wLjE5NjktMS41NTU2LTAuMjM5MS0yLjQ0NzctMC4xMjUycy0xLjgwMzYgMC4zMzgtMi43MzM0IDAuNjcyM2MwLTAuMDc1OCAwLjAwNzUtMC4xNTU2IDAuMDIyOS0wLjIzOTIgMC4wMTQ4LTAuMDgzMiAwLjAyMjYtMC4xNzA4IDAuMDIyNi0wLjI2MjIgMC0wLjIyNzktMC4xMTQzLTAuNDI1MS0wLjM0My0wLjU5MjUtMC4yMjg3LTAuMTY3Mi0wLjQ5MTktMC4yNjU4LTAuNzg5MS0wLjI5NjQtMC4yOTc0LTAuMDMwMS0wLjU4NzMgMC4wMzQxLTAuODY5NCAwLjE5MzctMC4yODI0IDAuMTU5Ni0wLjQ3NjggMC40NTI2LTAuNTgzMyAwLjg3NzMtMC41MzIxOSA2LjE3MTItMS4wMjAxIDExLjgwNi0xLjU3ODUgMTcuNDgyIDAuMDQ1OSAwLjQxMDMgMC4xNjAyIDAuNzI5NiAwLjM0MzMgMC45NTc0IDAuMTgyOSAwLjIyODIgMC4zOTY0IDAuMzY0OSAwLjY0MDUgMC40MTAzIDAuMjQzOCAwLjA0NTcgMC40OTk1IDAuMDAzNSAwLjc2NjItMC4xMjU1IDAuMjY2Ny0wLjEyODYgMC40OTk0LTAuMzUzMyAwLjY5NzktMC42NzIzIDAuNjA5NyAwLjMzNDMgMS4yOTYxIDAuNTUwOSAyLjA1ODggMC42NDk4IDAuNzYyMyAwLjA5ODYgMS41MzYgMC4wOTg2IDIuMzIxOSAwIDAuNzg1LTAuMDk4OSAxLjU1OS0wLjI4NDggMi4zMjE3LTAuNTU4NyAwLjc2MjMtMC4yNzMyIDEuNDU2Mi0wLjYxNTMgMi4wODE2LTEuMDI1MyAwLjYyNTEtMC40MTA0IDEuMTUxMy0wLjg3NzkgMS41Nzg1LTEuNDAxOSAwLjQyNjktMC41MjQ1IDAuNzA5LTEuMDkwNCAwLjg0NjItMS42OTggMC4xMzczLTAuNjIzMSAwLjE3NTMtMS4yNDYgMC4xMTQ0LTEuODY5MS0wLjA2MS0wLjYyMjktMC4yMTM2LTEuMi0wLjQ1NzQtMS43MzI0elwiLz5cbiAgIDxwYXRoIGQ9XCJtMTA1LjU2IDUwLjU4NmMtMC4xNTMgMC41NTQzLTAuMzMyIDEuMDU5OC0wLjUzOCAxLjUxNTgtMC4yMDUgMC40NTU3LTAuNDM0IDAuODIzOC0wLjY4NiAxLjEwNTItMC4yNTIgMC4yODEtMC41MjIgMC4zOTktMC44MTIgMC4zNTM2LTAuMjI5LTAuMDMwOS0wLjM3NC0wLjE3NTItMC40MzQtMC40MzMyLTAuMDYyLTAuMjU4OC0wLjA2Mi0wLjU3NzcgMC0wLjk1NzQgMC4yNDcxOC0xLjUwMzMgMC43MjQ3OC0yLjQ4OTIgMS44NTItNC4wNjg1IDAuMzIxLTAuNDMyOSAwLjY1Ni0wLjc5NCAxLjAwNy0xLjA4MjYgMC4wNzYgMC4wOTExIDAuMTEgMC4zMTg5IDAuMTAzIDAuNjgzOS0wLjAyNCAxLjAxMDUtMC4yODExNCAxLjk3Ny0wLjQ5MiAyLjg4MzJ6bTguMTA5LTExLjQ3NmMtMC4yMDYtMC4yMjc4LTAuNDU3LTAuMzU2OC0wLjc1NS0wLjM4NzQtMC4yOTctMC4wMzA0LTAuNTk4IDAuMTM2Ny0wLjkwMyAwLjUwMTQtMC42MTk4MSAxLjEzOTYtMS43MTQ0IDEuOTQ0LTIuNjQyIDIuNjY2Ni0wLjI5OCAwLjE5NzgtMC41MyAwLjM0MjEtMC42OTggMC40MzMyLTAuMDYxLTAuNDg2MS0wLjA5Ni0xLjAxMDMtMC4xMDMtMS41NzI4LTAuMDUxMS0xLjQzMDItMC4wNDc5LTIuNjk4NiAwLjMyLTQuMTkzNyAwLjE0NS0wLjgzNTcgMC4zNTUtMS42NTYzIDAuNjI5LTIuNDYxOSAwLTAuNDI1MS0wLjA5OS0wLjc3MDktMC4yOTctMS4wMzY5LTAuMTk5LTAuMjY1OC0wLjQzOS0wLjQzMzItMC43MjEtMC41MDE1LTAuMjgyLTAuMDY4Mi0wLjU3MS0wLjAzMDMtMC44NjkgMC4xMTQtMC4yOTcgMC4xNDQ2LTAuNTUzIDAuNDA2OC0wLjc2NiAwLjc4NjItMC40MzY1MyAxLjI1NDctMC45NDIwOCAyLjQ1NjQtMS40MyAzLjU5LTAuNTU5NjggMS4zMzAxLTEuMTc2OSAyLjQ2NzctMi4xOTYgMy40OTg4LTAuNDM1IDAuNDcxMS0wLjkwOCAwLjgzOTctMS40MTggMS4xMDU1LTAuNTExIDAuMjY2LTEuMDY0IDAuMzgzNy0xLjY1OSAwLjM1MzMtMC4yNzQ0LTAuMDc2LTAuNDcyNy0wLjI4MS0wLjU5NDUtMC42MTU2LTAuMTIyMi0wLjMzNC0wLjE5NDUtMC43NTIxLTAuMjE3MS0xLjI1MzUtMC4wMjI5LTAuNTAxNCAwLTEuMDUyMyAwLjA2ODUtMS42NTI2IDAuMTI0NjgtMS4yMTQ2IDAuMTc3NzgtMS44NTEgMC42NTIxLTMuNDc1NyAwLjEzNy0wLjUzMTggMC4yNjYtMC45ODAzIDAuMzg5LTEuMzQ0OSAwLjE4My0wLjQ0MDQgMC4xODMtMC44MDkzIDAtMS4xMDU1LTAuMTgzLTAuMjk2My0wLjQzNS0wLjQ5MzYtMC43NTUtMC41OTI3LTAuMzIwNC0wLjA5ODYtMC42NTYxLTAuMDk0Ni0xLjAwNjcgMC4wMTE1LTAuMzUwOSAwLjEwNjQtMC42MDI1IDAuMzQxOC0wLjc1NDggMC43MDY1LTAuMjU5NSAwLjYyMzQtMC40OTYgMS4zMjItMC43MDkzIDIuMDk3LTAuMjEzNiAwLjc3NDktMC4zODUxIDEuNTc2OC0wLjUxNDUgMi40MDQ2LTAuMTMwMSAwLjgyODUtMC4yMDI2IDEuNjQ5MS0wLjIxNzcgMi40NjItOWUtNCAwLjA1MjkgMC4wMDE3IDAuMTAzMiAwLjAwMTQgMC4xNTU4LTAuMzMyNSAwLjg4MzQtMC42NDk0IDEuNTUxMS0wLjk1MDQgMS45OTc4LTAuMzg4OSAwLjU3NzgtMC44Mjc3IDAuODI4NS0xLjMxNTUgMC43NTIxLTAuMjEzOS0wLjA5MS0wLjM1NDMtMC4zMDM2LTAuNDIyOC0wLjYzODEtMC4wNjk0LTAuMzM0LTAuMDkyLTAuNzQ0My0wLjA2OTQtMS4yMzEgMC4wMjM1LTAuNDg1OCAwLjA4MDctMS4wMzY2IDAuMTcxOC0xLjY1MjMgMC4zMzgzMS0yLjA2NTcgMC43ODA2OC0zLjg5OTUgMS4xODk5LTUuODAwOC0wLjAxNTQtMC41MzE4LTAuMTcxOC0wLjkzODEtMC40NjkzLTEuMjE5NC0wLjI5NzItMC4yODA4LTAuNzEzLTAuMzkxLTEuMjQ2NC0wLjMzMDYtMC4zNjYgMC4xNTIxLTAuNjM3MSAwLjM0OTktMC44MTIzIDAuNTkyOC0wLjE3NTYgMC4yNDI5LTAuMzE2NyAwLjU1NDYtMC40MjMyIDAuOTM0My0wLjA2MTIgMC4xOTc4LTAuMTUyNiAwLjU5MjgtMC4yNzQ1IDEuMTg1Ni0wLjMwNzkzIDEuNTQ2MS0wLjczNjcgMy4wNDE4LTEuMTQzNyA0LjQ0NDQtMC4yNTk1IDAuODM1Ny0wLjU0OTEgMS41OTIxLTAuODY5MiAyLjI2NzktMC4zMjA0IDAuNjc2LTAuNjcxMiAxLjIxOTQtMS4wNTIzIDEuNjI5Ny0wLjM4MTMgMC40MS0wLjc5MzEgMC41Nzc1LTEuMjM1NCAwLjUwMTQtMC4yNDQxLTAuMDQ1Ny0wLjQwMDItMC4yOTY0LTAuNDY4Ny0wLjc1MjEtMC4wNjg4LTAuNDU2LTAuMDgwMS0xLjAxNzgtMC4wMzQ1LTEuNjg2NyAwLjE3NTgtMi4xNjIxIDAuNjg0MzgtNC4zOTY4IDEuMDk4MS02LjM1OTIgMC4xMjE5LTAuNTQ3MSAwLjIwNTgtMC45MTE4IDAuMjUxNi0xLjA5MzkgMC0wLjQ0MDctMC4wOTk1LTAuNzkzOC0wLjI5NzQtMS4wNjAxLTAuMTk4NS0wLjI2NTQtMC40Mzg1LTAuNDMyOS0wLjcyMDYtMC41MDE0LTAuMjgyNC0wLjA2ODItMC41NzItMC4wMzA0LTAuODY5MiAwLjExMzktMC4yOTc0IDAuMTQ0Ni0wLjU1MjggMC40MDY5LTAuNzY2NCAwLjc4NjMtMC4wNzYzIDAuNDEwMy0wLjE3NTYgMC44ODU0LTAuMjk3NSAxLjQyNDctMC41MjIyMSAyLjEzNjgtMC43NjYzNiA0LjAzODQtMC45OTQ4IDUuOTQ4OS0wLjAzODMgMC40NjM4LTAuMDU3NSAwLjk1MzYtMC4wNTc1IDEuNDcwMSAwIDAuNTE3IDAuMDM4IDEuMDI5NyAwLjExNDcgMS41Mzg2IDAuMDc2IDAuNTA5MiAwLjIxMzMgMC45NzY1IDAuNDExNSAxLjQwMTYgMC4xOTgyIDAuNDI1NiAwLjQ3NjUgMC43NzQ5IDAuODM1MiAxLjA0ODUgMC4zNTgxIDAuMjczNSAwLjgxMiAwLjQyNTMgMS4zNjExIDAuNDU2IDAuNTYzOCAwLjAzMDEgMS4wNTU3LTAuMDExMyAxLjQ3NTQtMC4xMjU1IDAuNDE5My0wLjExMzkgMC44MDA0LTAuMjkyNiAxLjE0MzctMC41MzU4IDAuMzQzLTAuMjQyNiAwLjY1NTYtMC41MzE1IDAuOTM3OS0wLjg2NjEgMC4yODE4LTAuMzMzOSAwLjU2MDQtMC42OTg2IDAuODM1LTEuMDkzOSAwLjI1OTEgMC41Nzc4IDAuNTk0NiAxLjAyNTcgMS4wMDY0IDEuMzQ0OSAwLjQxMTggMC4zMTkgMC44NDY2IDAuNTA5MiAxLjMwMzkgMC41Njk3IDAuNDU3NCAwLjA2MDQgMC45MjI5LTAuMDAzNSAxLjM5NTYtMC4xOTM4IDAuNDcyNS0wLjE4OTYgMC44OTk0LTAuNTEyNiAxLjI4MS0wLjk2ODcgMC4yNTEtMC4yNzk2IDAuNDg3OS0wLjU5NzQgMC43MTAyLTAuOTQ4NyAwLjA5NDMgMC4xNjQ1IDAuMTk0NyAwLjMyMzMgMC4zMDc2IDAuNDY5OSAwLjM3MzggMC40ODY3IDAuODgxIDAuODIwNiAxLjUyMTUgMS4wMDMxIDAuNjg2MSAwLjE4MjUgMS4zNTY1IDAuMjEzMSAyLjAxMjUgMC4wOTE0IDAuNjU2LTAuMTIxNSAxLjI4MS0wLjM0MjEgMS44NzYtMC42NjEgMC41OTUtMC4zMTkzIDEuMTQ4LTAuNzAyNyAxLjY1OS0xLjE1MTIgMC41MS0wLjQ0ODIgMC45NTYtMC45MTUyIDEuMzM4LTEuNDAxOS0wLjAxOTMgMC42ODU2My0wLjAzNDUgMS4zODI2LTAuMDQ2IDIuMDA2LTAuNzYzIDAuNTMyLTEuNDgzIDEuMTcwMi0yLjE2MiAxLjkxNDUtMS40MTIgMS40NzI5LTIuMzk1MyAzLjAwMDMtMi45ODUgNC45NDU4LTAuMjkgMC44NjY2LTAuNDMxIDEuNjc1NC0wLjQyMyAyLjQyNzggN2UtMyAwLjc1MjEgMC4xODcgMS40MDkxIDAuNTM3IDEuOTcxMiAwLjM1MSAwLjU2MjUgMC45MjMgMC45NjUgMS43MTYgMS4yMDgyIDAuODI0IDAuMjU4NSAxLjU0OCAwLjI2NTcgMi4xNzMgMC4wMjI4IDAuNjI2LTAuMjQzMiAxLjE3MS0wLjY0NiAxLjYzNi0xLjIwODFzMC44NDYtMS4yNDIgMS4xNDQtMi4wMzk4YzAuMjk3LTAuNzk3OCAwLjUzMy0xLjYyOTcgMC43MDktMi40OTU3IDAuMTc1LTAuODY2MSAwLjI4Ni0xLjcxNzYgMC4zMzEtMi41NTI3IDAuMDQ2LTAuODM2IDAuMDQ2LTEuNTgwOSAwLTIuMjM0MSAxLjMxMi0wLjU0NjggMi4zODctMS4yMzgyIDMuMjI2LTIuMDc0MiAwLjgzOS0wLjgzNTEgMS41MzItMS43MTY3IDIuMDgxLTIuNjQzOCAwLjE2OC0wLjIyNzggMC4yMjUtMC41MDE0IDAuMTcyLTAuODIwMy0wLjA1My0wLjMxOTMtMC4xODMtMC41OTI4LTAuMzg5LTAuODIwN3pcIi8+XG4gICA8cGF0aCBkPVwibTE0Mi41MyAzNy42NTJjMC4wNDUtMC4zNDkzIDAuMTE0LTAuNzE4IDAuMjA1LTEuMTA1NSAwLjA5Mi0wLjM4NzUgMC4yMDYtMC43NjM3IDAuMzQ0LTEuMTI4MyAwLjEzNy0wLjM2NDYgMC4yOTctMC42Nzk4IDAuNDgtMC45NDU5IDAuMTgzLTAuMjY1NyAwLjM3OC0wLjQ1NTcgMC41ODMtMC41Njk5IDAuMjA2LTAuMTEzNiAwLjQxNi0wLjEwMjQgMC42MjkgMC4wMzQxIDAuMjI5IDAuMTM3MSAwLjM3IDAuNDI1NyAwLjQyNCAwLjg2NjEgMC4wNTMgMC40NDEyIDAgMC45MTItMC4xNjEgMS40MTM0LTAuMTYgMC41MDE3LTAuNDQ2IDAuOTcyNC0wLjg1NyAxLjQxMzEtMC40MTIgMC40NDEtMC45NjkgMC43MjkzLTEuNjcgMC44NjYxLTAuMDMxLTAuMjEyMy0wLjAyMy0wLjQ5MzYgMC4wMjMtMC44NDMyem03LjkyNiAwLjkzNDJjLTAuMjUyLTAuMDc1NC0wLjQ5Mi0wLjA4MzItMC43MjEtMC4wMjI1cy0wLjM3NCAwLjIyMDMtMC40MzQgMC40Nzg4Yy0wLjEyMyAwLjQ4NjEtMC4zMTcgMC45ODM4LTAuNTg0IDEuNDkyNy0wLjI2NyAwLjUwOTItMC41OTUgMC45OTE1LTAuOTgzIDEuNDQ3NS0wLjM4OSAwLjQ1NTgtMC44MjggMC44NTg2LTEuMzE2IDEuMjA3OS0wLjQ4OCAwLjM0OTYtMC45OTkgMC42MDAzLTEuNTMyIDAuNzUyMS0wLjUzNSAwLjE2NzQtMC45NzYgMC4xODYyLTEuMzI3IDAuMDU2OS0wLjM1MS0wLjEyODYtMC42MjktMC4zNDkzLTAuODM1LTAuNjYwN3MtMC4zNTUtMC42ODc2LTAuNDQ2LTEuMTI4M2MtMC4wOTItMC40NDA3LTAuMTQ1LTAuODk2NC0wLjE2LTEuMzY3NyAwLjg2OSAwLjA2MSAxLjY0My0wLjA5NDYgMi4zMjItMC40NjczIDAuNjc4LTAuMzcxOSAxLjI1NC0wLjg2NjEgMS43MjctMS40ODE0IDAuNDcyLTAuNjE1MyAwLjgzMS0xLjMwNjcgMS4wNzUtMi4wNzQyIDAuMjQzLTAuNzY3MSAwLjM4MS0xLjUzMDggMC40MTEtMi4yOTA3IDAuMDE2LTAuNzE0Mi0wLjA5MS0xLjMxOC0wLjMyLTEuODExOS0wLjIyOC0wLjQ5MzYtMC41MzctMC44Nzc5LTAuOTI2LTEuMTUxMS0wLjM4OS0wLjI3MzYtMC44MzUtMC40MzMyLTEuMzM4LTAuNDc4Ni0wLjUwMy0wLjA0NTctMS4wMTUgMC4wMjI4LTEuNTMzIDAuMjA1LTAuNjI2IDAuMjEyOC0xLjE1NSAwLjU1ODQtMS41OSAxLjAzNzItMC40MzQgMC40Nzg2LTAuNzk3IDEuMDMzNS0xLjA4NiAxLjY2MzktMC4yOSAwLjYzMDYtMC41MTkgMS4zMTA1LTAuNjg3IDIuMDM5Ny0wLjE2OCAwLjcyOTYtMC4yOSAxLjQ0NzYtMC4zNjYgMi4xNTQzLTAuMDY4IDAuNjM0MS0wLjEwNSAxLjI0MDUtMC4xMTggMS44MjU3LTAuMjU0NjggMC42MzU1Ni0wLjY0MDI0IDEuMjgwNi0wLjkyMyAxLjgwOTYtMC4zMTIgMC41MTY4LTAuNjU5IDAuOTQ5OS0xLjA0IDEuMjk5Mi0wLjM4MiAwLjM0OTYtMC43NzggMC40NzExLTEuMTkgMC4zNjQ3LTAuMjQ0LTAuMDYwNS0wLjM3Ny0wLjM0MjEtMC40LTAuODQzMi0wLjAyMy0wLjUwMTcgM2UtMyAtMS4xMjQ2IDAuMDgtMS44NjkyIDAuMjA5MDgtMS42ODUyIDAuMzQ1MS0zLjMwMDQgMC40MTItNC45MDA0IDAtMC42ODM5LTAuMTMtMS4zNDA4LTAuMzg5LTEuOTcxOC0wLjI2LTAuNjMwMS0wLjYxNC0xLjE1NDYtMS4wNjQtMS41NzI1LTAuNDUtMC40MTgxLTAuOTcyLTAuNjk1NC0xLjU2Ny0wLjgzMTktMC41OTUtMC4xMzctMS4yMzUtMC4wNDU3LTEuOTIxIDAuMjczMy0wLjY4NyAwLjMxOTItMS4yMzIgMC43Njc0LTEuNjM2IDEuMzQ0OS0wLjQwNCAwLjU3NzctMC43NzQgMS4xODUyLTEuMTA5IDEuODIzNC0wLjEyMy0wLjQ4NjMtMC4zMDEtMC45MzgtMC41MzgtMS4zNTYxLTAuMjM3LTAuNDE3OS0wLjUyNi0wLjc4MjUtMC44NjktMS4wOTQyLTAuMzQ0LTAuMzExMi0wLjcyOS0wLjU1NDQtMS4xNTUtMC43MjkzLTAuNDI3LTAuMTc0NC0wLjg3OC0wLjI2Mi0xLjM1LTAuMjYyLTAuNDU4IDAtMC44ODEgMC4wODc2LTEuMjcgMC4yNjItMC4zODkgMC4xNzQ5LTAuNzQzIDAuMzk4OC0xLjA2NCAwLjY3MjMtMC4zMiAwLjI3MzgtMC42MDkgMC41ODEyLTAuODY5IDAuOTIzMy0wLjI1OSAwLjM0MTgtMC40ODggMC42ODAxLTAuNjg2IDEuMDE0MS0wLjAzMS0wLjM5NS0wLjA2NS0wLjc0MDYtMC4xMDMtMS4wMzcyLTAuMDM4LTAuMjk2MS0wLjEwNy0wLjU0NjgtMC4yMDYtMC43NTE5LTAuMDk5LTAuMjA1My0wLjI0LTAuMzYwOC0wLjQyMy0wLjQ2NzItMC4xODMtMC4xMDYyLTAuNDQyLTAuMTU5Ny0wLjc3Ny0wLjE1OTctMC4xNjggMC0wLjMzNiAwLjAzNDItMC41MDQgMC4xMDI0LTAuMTY4IDAuMDY4NS0wLjMxNyAwLjE2MzctMC40NDYgMC4yODUxLTAuMTMgMC4xMjItMC4yMjkgMC4yNjk4LTAuMjk3IDAuNDQ0NS0wLjA2OSAwLjE3NDYtMC4wODggMC4zNzYyLTAuMDU4IDAuNjA0IDAuMDE1IDAuMTY3NCAwLjA1OCAwLjM2ODQgMC4xMjYgMC42MDQxIDAuMDY5IDAuMjM1NiAwLjEzNCAwLjU0MzYgMC4xOTUgMC45MjMgMC4wNiAwLjM3OTkgMC4xMSAwLjgzOTcgMC4xNDggMS4zNzkgMC4xMTQwNyAxLjYxOS0wLjAyOTIgMy4yNjMzLTAuMTM3IDQuNzI5NS0wLjA5OSAxLjA0ODUtMC4yNTYgMi4yNjQyLTAuNDY5IDMuNjQ2Ni0wLjAzIDAuMzE5MyAwLjA5MiAwLjU3NzggMC4zNjYgMC43NzUzIDAuMjc1IDAuMTk3MiAwLjU4NyAwLjMxMTEgMC45MzggMC4zNDE4IDAuMzUxIDAuMDMwMyAwLjY4My0wLjAzMDcgMC45OTUtMC4xODIyIDAuMzEzLTAuMTUyNCAwLjQ5Mi0wLjQxODEgMC41MzgtMC43OTc4IDAuMDkzOS0xLjYzMTEgMC40MjU1Ni0zLjE4NTIgMC43NDMtNC42NzI2IDAuMzE3NzQtMS40OTcxIDAuNjk5OTQtMi43MTgzIDEuNDY0LTQuMTQ4MyAwLjI5OC0wLjU0NzEgMC42MDYtMC45ODM3IDAuOTI3LTEuMzEwNSAwLjMyLTAuMzI2NyAwLjY1NS0wLjQ5MDEgMS4wMDYtMC40OTAxIDAuNDI3IDAgMC43NTkgMC4xOTM1IDAuOTk1IDAuNTgwOSAwLjIzNiAwLjM4NzggMC40MDQgMC44ODU3IDAuNTA0IDEuNDkzIDAuMDk5IDAuNjA4MSAwLjE0NCAxLjI3MzIgMC4xMzcgMS45OTQ2LTguNGUtNCAxLjM0MzctMC4xMzk2MyAyLjYwNjctMC4yNzUgMy44NzQ4LTAuMDY4IDAuNTI0Mi0wLjExOCAwLjg4NTQtMC4xNDggMS4wODI2IDAgMC4zNDk2IDAuMTMzIDAuNjI2NiAwLjQgMC44MzE5IDAuMjY2IDAuMjA1IDAuNTY0IDAuMzI2OCAwLjg5MiAwLjM2NDcgMC4zMjggMC4wMzgxIDAuNjM3LTAuMDIyOSAwLjkyNi0wLjE4MjUgMC4yOS0wLjE1OTYgMC40NTgtMC40Mjg4IDAuNTA0LTAuODA5MSAwLjE1Mi0xLjA5MzkgMC4zNjItMi4xOTE1IDAuNjI5LTMuMjkzMiAwLjI2Ni0xLjEwMTcgMC41NzItMi4wODkyIDAuOTE1LTIuOTYzMSAwLjM0My0wLjg3MzggMC43MjQtMS41ODgxIDEuMTQ0LTIuMTQyNyAwLjQxOS0wLjU1NDMgMC44NjUtMC44MzE5IDEuMzM4LTAuODMxOSAwLjI0MyAwIDAuNDMxIDAuMTY3NCAwLjU2IDAuNTAxNCAwLjEzIDAuMzM0MyAwLjE5NSAwLjc5IDAuMTk1IDEuMzY3NS05ZS00IDAuOTQwMDMtMC4xOTQ1OCAxLjg0OTMtMC4zNDMgMi43MDEtMC4wOTIgMC40Nzg5LTAuMTcyIDAuOTY4Ny0wLjI0MSAxLjQ3MDEtMC4xNzU1MyAxLjAxLTAuMTg4NzQgMS45MzQ0IDAuMDEyIDIuODk0OCAwLjA3NiAwLjUwMTEgMC4yMjEgMC45NzY1IDAuNDM0IDEuNDI0NCAwLjIxNCAwLjQ0ODUgMC41MDcgMC44MjgyIDAuODgxIDEuMTM5NiAwLjM3NCAwLjMxMTUgMC44NSAwLjQ2NzMgMS40MyAwLjQ2NzMgMC44NjkgMCAxLjYzOS0wLjE4NjIgMi4zMS0wLjU1ODQgMC43Nzk5OC0wLjQwNDUyIDEuMjgxOS0xLjA0NDkgMS43OTktMS41NTQ4IDAuMjU0MjggMC43OTIwNyAwLjk2MzQ3IDEuMzY2MyAxLjQ1IDEuODE3MSAwLjU2MyAwLjM2NDYgMS4yMjcgMC41NjU5IDEuOTkgMC42MDQxIDAuNzYyIDAuMDM3NiAxLjU5My0wLjEwMyAyLjQ5My0wLjQyMTkgMC42NzEtMC4yNDMyIDEuMjU0LTAuNTQ3MSAxLjc1LTAuOTExNyAwLjQ5NS0wLjM2NDcgMC45NDEtMC44MDkxIDEuMzM4LTEuMzMzNCAwLjM5Ny0wLjUyNDIgMC43NTktMS4xMjgzIDEuMDg3LTEuODExOSAwLjMyOC0wLjY4NDEgMC42NTktMS40NjYzIDAuOTk1LTIuMzQ4IDAuMDYxLTAuMjQyNiA0ZS0zIC0wLjQ1OTEtMC4xNzEtMC42NDk0LTAuMTc2LTAuMTg5Ny0wLjM4OS0wLjMyMjctMC42NDEtMC4zOTkxelwiLz5cbiAgPC9nPlxuICA8cGF0aCBkPVwibTE2Mi44OSAzNi4wNDNjLTAuMDc3IDAuNDQ4NC0wLjE4IDAuOTQyNi0wLjMwOSAxLjQ4MTYtMC4xMyAwLjUzOTYtMC4yOTQgMS4wOTgtMC40OTIgMS42NzU0LTAuMTk4IDAuNTc3NS0wLjQ0MiAxLjA5OC0wLjczMiAxLjU2MTItMC4yOSAwLjQ2MzgtMC42MjEgMC44MzE5LTAuOTk1IDEuMTA1NS0wLjM3NCAwLjI3MzUtMC44MDQgMC4zODc1LTEuMjkzIDAuMzQxOC0wLjI0NC0wLjAzMDEtMC40MzEtMC4xOTcyLTAuNTYtMC41MDE0LTAuMTMtMC4zMDM3LTAuMTk4LTAuNjkxNC0wLjIwNi0xLjE2MjUtOGUtMyAtMC40NzA3IDAuMDM0LTAuOTg3NSAwLjEyNi0xLjU0OTkgMC4wOTEtMC41NjE4IDAuMjMyLTEuMTEzIDAuNDIzLTEuNjUyNSAwLjE5MS0wLjUzOSAwLjQyMy0xLjAzNyAwLjY5OC0xLjQ5MyAwLjI3NC0wLjQ1NTcgMC41OTEtMC44MDkxIDAuOTQ5LTEuMDU5OHMwLjc1MS0wLjM2ODEgMS4xNzgtMC4zNTMzYzAuNDI3IDAuMDE1MyAwLjg4NSAwLjIyNzggMS4zNzMgMC42MzgyLTAuMDMxIDAuMTk3OC0wLjA4NCAwLjUyMDctMC4xNiAwLjk2ODd6bTguMTMyIDEuNzQzNmMtMC4yMzctMC4xMjE0LTAuNDgxLTAuMTQ3OC0wLjczMi0wLjA3OTUtMC4yNTIgMC4wNjgyLTAuNDMxIDAuMzAwMS0wLjUzOCAwLjY5NTEtMC4wNjEgMC40MjU3LTAuMTk4IDAuOTI2OC0wLjQxMSAxLjUwNDMtMC4yMTQgMC41Nzc0LTAuNDc3IDEuMTI0OC0wLjc5IDEuNjQwOS0wLjMxMiAwLjUxNjgtMC42NzEgMC45NDYyLTEuMDc1IDEuMjg4LTAuNDA0IDAuMzQyLTAuODM1IDAuNDk3OS0xLjI5MiAwLjQ2Ny0wLjM4Mi0wLjAzMDEtMC42NDktMC4yMjM4LTAuODAxLTAuNTgxLTAuMTUzLTAuMzU3MS0wLjIzMy0wLjgwNS0wLjI0LTEuMzQ0OS04ZS0zIC0wLjUzODkgMC4wNDYtMS4xNDY4IDAuMTYtMS44MjMxIDAuMTE0LTAuNjc2MSAwLjI1Mi0xLjM0ODQgMC40MTItMi4wMTc1IDAuMTYtMC42NjgzIDAuMzI0LTEuMzEwNSAwLjQ5Mi0xLjkyNTggMC4xNjctMC42MTU0IDAuMzA0LTEuMTM1OCAwLjQxMi0xLjU2MTIgMC4xMjItMC4zOCAwLjA4My0wLjcwMjctMC4xMTUtMC45NjktMC4xOTgtMC4yNjU0LTAuNDQ2LTAuNDU1Ny0wLjc0My0wLjU2OTYtMC4yOTgtMC4xMTQtMC41OTktMC4xNDQzLTAuOTA0LTAuMDkxMXMtMC41MDMgMC4yMTY2LTAuNTk1IDAuNDg5OGMtMC45LTAuNzc0OS0xLjc2NS0xLjE5MjgtMi41OTYtMS4yNTM1LTAuODMyLTAuMDYwNy0xLjU5OCAwLjEyMTctMi4yOTkgMC41NDcxLTAuNzAyIDAuNDI1NC0xLjMyMyAxLjA0MDctMS44NjQgMS44NDYzLTAuNTQyIDAuODA1Ni0wLjk4IDEuNjgyOS0xLjMxNiAyLjYzMjUtMC4zMzUgMC45NDk2LTAuNTQ1IDEuOTE4Ni0wLjYyOSAyLjkwNjEtMC4wODQgMC45ODc4LTAuMDE5IDEuODg4MiAwLjE5NSAyLjcwMTEgMC4yMTMgMC44MTI4IDAuNTkgMS40Nzc5IDEuMTMyIDEuOTk0IDAuNTQxIDAuNTE2OCAxLjI3NyAwLjc3NTMgMi4yMDcgMC43NzUzIDAuNDEyIDAgMC44MDktMC4wODM2IDEuMTktMC4yNTA3IDAuMzgxLTAuMTY3NSAwLjczMi0wLjM2NSAxLjA1Mi0wLjU5MjggMC4zMi0wLjIyNzkgMC42MDItMC40NjczIDAuODQ3LTAuNzE4IDAuMjQzLTAuMjUwNyAwLjQzNC0wLjQ1OTUgMC41NzEtMC42MjY5IDAuMTA3IDAuNTQ3MSAwLjI4MyAxLjAxMDkgMC41MjcgMS4zOTA2IDAuMjQzIDAuMzc5NiAwLjUyMiAwLjY5MTYgMC44MzUgMC45MzQzIDAuMzEyIDAuMjQyOCAwLjY0IDAuNDIxNiAwLjk4MyAwLjUzNTggMC4zNDMgMC4xMTM5IDAuNjc1IDAuMTcwOSAwLjk5NSAwLjE3MDkgMC43MTcgMCAxLjM4OC0wLjI0MzIgMi4wMTMtMC43Mjk2IDAuNjI1LTAuNDg1OCAxLjE4Ni0xLjA4MjYgMS42ODItMS43ODkgMC40OTUtMC43MDY3IDAuOTAzLTEuNDUxIDEuMjIzLTIuMjMzOCAwLjMyMS0wLjc4MjUgMC41MzQtMS40Nzc2IDAuNjQxLTIuMDg1NyAwLjEwNy0wLjIyNzkgMC4wODctMC40NjctMC4wNTctMC43MTc3LTAuMTQ1LTAuMjUwNy0wLjMzNi0wLjQzNjctMC41NzItMC41NTg3elwiIGZpbGw9XCIjMEQwQzIzXCIvPlxuICA8cGF0aCBkPVwibTIxMi4xOSA1MC4zN2MtMC4xMyAwLjUxNjUtMC4zMzIgMC45NTM3LTAuNjA3IDEuMzEwNS0wLjI3NCAwLjM1NzEtMC42MTcgMC41NDMzLTEuMDI5IDAuNTU4Ny0wLjI1OSAwLjAxNS0wLjQ1Ny0wLjEyMTgtMC41OTUtMC40MTA0LTAuMTM3LTAuMjg4OC0wLjIzMi0wLjY2MS0wLjI4NS0xLjExNjctMC4wNTQtMC40NTYtMC4wNzctMC45NjUyLTAuMDY5LTEuNTI3MyA3ZS0zIC0wLjU2MjIgMC4wMy0xLjExNjggMC4wNjktMS42NjM5IDAuMDM3LTAuNTQ2OCAwLjA4My0xLjA1NjMgMC4xMzctMS41MjcxIDAuMDUzLTAuNDcxMyAwLjA5NS0wLjgzNTMgMC4xMjUtMS4wOTM5IDAuNTE5IDAuMDYwOCAwLjk1IDAuMjg0NiAxLjI5MyAwLjY3MjMgMC4zNDMgMC4zODc1IDAuNjA2IDAuODQ3IDAuNzg5IDEuMzc5MSAwLjE4MyAwLjUzMTcgMC4yOSAxLjEwNTQgMC4zMjEgMS43MjA4IDAuMDMgMC42MTUzLTAuMDIgMS4xODEyLTAuMTQ5IDEuNjk3OXptLTguMjgxIDBjLTAuMTMgMC41MTY1LTAuMzMyIDAuOTUzNy0wLjYwNiAxLjMxMDUtMC4yNzUgMC4zNTcxLTAuNjE4IDAuNTQzMy0xLjAzIDAuNTU4Ny0wLjI1OSAwLjAxNS0wLjQ1Ny0wLjEyMTgtMC41OTQtMC40MTA0LTAuMTM4LTAuMjg4OC0wLjIzMy0wLjY2MS0wLjI4Ni0xLjExNjctMC4wNTQtMC40NTYtMC4wNzctMC45NjUyLTAuMDY5LTEuNTI3MyA4ZS0zIC0wLjU2MjIgMC4wMy0xLjExNjggMC4wNjktMS42NjM5IDAuMDM3LTAuNTQ2OCAwLjA4My0xLjA1NjMgMC4xMzctMS41MjcxIDAuMDUzLTAuNDcxMyAwLjA5NS0wLjgzNTMgMC4xMjYtMS4wOTM5IDAuNTE4IDAuMDYwOCAwLjk0OSAwLjI4NDYgMS4yOTIgMC42NzIzIDAuMzQzIDAuMzg3NSAwLjYwNiAwLjg0NyAwLjc4OSAxLjM3OTEgMC4xODMgMC41MzE3IDAuMjkgMS4xMDU0IDAuMzIxIDEuNzIwOCAwLjAzIDAuNjE1My0wLjAyIDEuMTgxMi0wLjE0OSAxLjY5Nzl6bS04LjQ5OC0xMi45NDZjLTAuMDE2IDAuMzY0My0wLjA1IDAuNjg3My0wLjEwMyAwLjk2ODQtMC4wNTQgMC4yODE2LTAuMTI2IDAuNDU5Ny0wLjIxNyAwLjUzNTgtMC4xNjgtMC4wOTE0LTAuMzc0LTAuMzI2NS0wLjYxOC0wLjcwNjctMC4yNDQtMC4zNzk3LTAuNDM1LTAuODA5NC0wLjU3Mi0xLjI4OC0wLjEzNy0wLjQ3ODUtMC4xOC0wLjk0OTMtMC4xMjYtMS40MTMxIDAuMDUzLTAuNDYzMiAwLjI5NC0wLjgyMzggMC43MjEtMS4wODI2IDAuMTY3LTAuMDkxMSAwLjMxMi0wLjA1NyAwLjQzNCAwLjEwMjZzMC4yMjEgMC4zOTEzIDAuMjk4IDAuNjk1MmMwLjA3NiAwLjMwNDIgMC4xMjkgMC42NTM1IDAuMTYgMS4wNDg1IDAuMDMgMC4zOTUzIDAuMDM4IDAuNzc0OSAwLjAyMyAxLjEzOTl6bS0yLjAyNSA0LjU0N2MtMC4yMzYgMC4yNTA0LTAuNSAwLjQ2Ny0wLjc4OSAwLjY0OTUtMC4yOSAwLjE4MjQtMC41ODcgMC4zMTkyLTAuODkyIDAuNDEwMy0wLjMwNSAwLjA5MTQtMC41OCAwLjExMzktMC44MjQgMC4wNjgyLTAuNjg2LTAuMTM2NC0xLjIxMi0wLjQzMzEtMS41NzgtMC44ODg4LTAuMzY2LTAuNDU1OC0wLjU5OS0wLjk5MTMtMC42OTgtMS42MDY2LTAuMDk5LTAuNjE1Ni0wLjA4OC0xLjI3MjkgMC4wMzUtMS45NzE4IDAuMTIxLTAuNjk4OSAwLjMyNy0xLjM0ODQgMC42MTctMS45NDg3czAuNjQxLTEuMTE3IDEuMDUyLTEuNTQ5OWMwLjQxMi0wLjQzMzIgMC44NjItMC43MDI3IDEuMzUtMC44MDk0LTAuMTgzIDAuNzc1LTAuMjQ0IDEuNTc2OC0wLjE4MyAyLjQwNDcgMC4wNjEgMC44MjgyIDAuMjU5IDEuNjA2OSAwLjU5NSAyLjMzNjIgMC4yMTMgMC40NDEyIDAuNDY5IDAuODQzNCAwLjc2NiAxLjIwODEgMC4yOTggMC4zNjQ5IDAuNjYgMC42NzYzIDEuMDg3IDAuOTM0Ni0wLjEyMiAwLjI1ODUtMC4zMDIgMC41MTI5LTAuNTM4IDAuNzYzNnptMjUuMzEyLTQuMzE5MmMwLjA0NS0wLjM0OTMgMC4xMTQtMC43MTgzIDAuMjA2LTEuMTA1NyAwLjA5MS0wLjM4NzIgMC4yMDYtMC43NjM0IDAuMzQzLTEuMTI4MSAwLjEzNy0wLjM2NDkgMC4yOTctMC42ODAxIDAuNDgtMC45NDU4IDAuMTgzLTAuMjY1OCAwLjM3Ny0wLjQ1NiAwLjU4My0wLjU2OTkgMC4yMDYtMC4xMTQgMC40MTYtMC4xMDI3IDAuNjI5IDAuMDM0MSAwLjIyOSAwLjEzNyAwLjM3IDAuNDI1NiAwLjQyNCAwLjg2NiAwLjA1MyAwLjQ0MSAwIDAuOTExNy0wLjE2IDEuNDEzNC0wLjE2MSAwLjUwMTQtMC40NDYgMC45NzI1LTAuODU4IDEuNDEyOS0wLjQxMiAwLjQ0MTItMC45NjkgMC43Mjk1LTEuNjcgMC44NjYzLTAuMDMxLTAuMjEyNS0wLjAyMy0wLjQ5MzYgMC4wMjMtMC44NDMyem05LjIxOSAwYzAuMDQ1LTAuMzQ5MyAwLjExNC0wLjcxODMgMC4yMDUtMS4xMDU3IDAuMDkyLTAuMzg3MiAwLjIwNi0wLjc2MzQgMC4zNDQtMS4xMjgxIDAuMTM3LTAuMzY0OSAwLjI5Ny0wLjY4MDEgMC40OC0wLjk0NTggMC4xODMtMC4yNjU4IDAuMzc4LTAuNDU2IDAuNTgzLTAuNTY5OSAwLjIwNi0wLjExNCAwLjQxNi0wLjEwMjcgMC42MjkgMC4wMzQxIDAuMjI5IDAuMTM3IDAuMzcgMC40MjU2IDAuNDI0IDAuODY2IDAuMDUzIDAuNDQxIDAgMC45MTE3LTAuMTYxIDEuNDEzNC0wLjE2IDAuNTAxNC0wLjQ0NiAwLjk3MjUtMC44NTcgMS40MTI5LTAuNDEyIDAuNDQxMi0wLjk2OSAwLjcyOTUtMS42NyAwLjg2NjMtMC4wMzEtMC4yMTI1LTAuMDIzLTAuNDkzNiAwLjAyMy0wLjg0MzJ6bTguNTY3IDEuMzMzM2MtMC4xNzYtMC4xODk3LTAuMzg5LTAuMzIyNy0wLjY0MS0wLjM5OS0wLjI1Mi0wLjA3NTgtMC40OTItMC4wODMzLTAuNzIxLTAuMDIyNi0wLjIyOSAwLjA2MDgtMC4zNzQgMC4yMjA0LTAuNDM0IDAuNDc4Ni0wLjEyMiAwLjQ4NjQtMC4zMTcgMC45ODQtMC41ODQgMS40OTI3LTAuMjY3IDAuNTA5NS0wLjU5NCAwLjk5MTgtMC45ODMgMS40NDc1cy0wLjgyOCAwLjg1ODgtMS4zMTUgMS4yMDgxYy0wLjQ4OSAwLjM0OTYtMSAwLjYwMDMtMS41MzMgMC43NTE4LTAuNTM0IDAuMTY3OC0wLjk3NiAwLjE4NjYtMS4zMjcgMC4wNTczLTAuMzUxLTAuMTI5LTAuNjI5LTAuMzQ5My0wLjgzNS0wLjY2MDctMC4yMDYtMC4zMTE4LTAuMzU0LTAuNjg3Ny0wLjQ0Ni0xLjEyODYtMC4wOTEtMC40NDA0LTAuMTQ1LTAuODk2MS0wLjE2LTEuMzY3NSAwLjg2OSAwLjA2MSAxLjY0My0wLjA5NDUgMi4zMjItMC40NjczIDAuNjc4LTAuMzcyMSAxLjI1NC0wLjg2NjMgMS43MjctMS40ODE2IDAuNDczLTAuNjE1MSAwLjgzMS0xLjMwNjUgMS4wNzUtMi4wNzM5czAuMzgxLTEuNTMwOCAwLjQxMi0yLjI5MDdjMC4wMTUtMC43MTQzLTAuMDkyLTEuMzE4My0wLjMyMS0xLjgxMjItMC4yMjgtMC40OTM2LTAuNTM3LTAuODc3Ni0wLjkyNi0xLjE1MDktMC4zODktMC4yNzM4LTAuODM1LTAuNDMzMi0xLjMzOC0wLjQ3ODgtMC41MDMtMC4wNDU3LTEuMDE1IDAuMDIzMS0xLjUzMyAwLjIwNS0wLjYyNSAwLjIxMzEtMS4xNTUgMC41NTg2LTEuNTg5IDEuMDM3Mi0wLjQzNSAwLjQ3ODktMC43OTggMS4wMzM4LTEuMDg3IDEuNjYzOC0wLjI5IDAuNjMxLTAuNTE5IDEuMzEwNS0wLjY4NyAyLjA0MDEtMC4xNjggMC43MjkyLTAuMjkgMS40NDc1LTAuMzY1IDIuMTUzOS0wLjA3NSAwLjY4NTYtMC4xMTUgMS4zNDE4LTAuMTI0IDEuOTY5OC0wLjI4MjEzIDAuNjc4Ni0wLjc5ODQ4IDEuMzAxMi0xLjE2OSAxLjgyNTItMC4zODkgMC40NTU3LTAuODI4IDAuODU4OC0xLjMxNSAxLjIwODEtMC40ODkgMC4zNDk2LTAuOTk5IDAuNjAwMy0xLjUzMyAwLjc1MTgtMC41MzQgMC4xNjc4LTAuOTc2IDAuMTg2Ni0xLjMyNyAwLjA1NzMtMC4zNTEtMC4xMjktMC42MjktMC4zNDkzLTAuODM1LTAuNjYwNy0wLjIwNS0wLjMxMTgtMC4zNTQtMC42ODc3LTAuNDQ2LTEuMTI4Ni0wLjA5MS0wLjQ0MDQtMC4xNDUtMC44OTYxLTAuMTYtMS4zNjc1IDAuODY5IDAuMDYxIDEuNjQzLTAuMDk0NSAyLjMyMi0wLjQ2NzMgMC42NzgtMC4zNzIxIDEuMjU0LTAuODY2MyAxLjcyNy0xLjQ4MTYgMC40NzItMC42MTUxIDAuODMxLTEuMzA2NSAxLjA3NS0yLjA3MzlzMC4zODEtMS41MzA4IDAuNDEyLTIuMjkwN2MwLjAxNS0wLjcxNDMtMC4wOTItMS4zMTgzLTAuMzItMS44MTIyLTAuMjI5LTAuNDkzNi0wLjUzOC0wLjg3NzYtMC45MjctMS4xNTA5LTAuMzg5LTAuMjczOC0wLjgzNS0wLjQzMzItMS4zMzgtMC40Nzg4LTAuNTAzLTAuMDQ1Ny0xLjAxNCAwLjAyMzEtMS41MzMgMC4yMDUtMC42MjUgMC4yMTMxLTEuMTU1IDAuNTU4Ni0xLjU4OSAxLjAzNzItMC40MzUgMC40Nzg5LTAuNzk4IDEuMDMzOC0xLjA4NyAxLjY2MzgtMC4yOSAwLjYzMS0wLjUxOSAxLjMxMDUtMC42ODYgMi4wNDAxLTAuMTY4IDAuNzI5Mi0wLjI5IDEuNDQ3NS0wLjM2NiAyLjE1MzktMC4wNDQgMC4zOTg1LTAuMDczIDAuNzg0OC0wLjA5NCAxLjE2NDItMC42NDI1MSAwLjU5MDA0LTEuNDUyNyAxLjA5MTUtMi4xMDIgMS41MjUzLTAuNTggMC4zNDIxLTEuMTgzIDAuNjIzMi0xLjgwNyAwLjg0MzUtMC42MjYgMC4yMjA0LTEuMjY3IDAuMzUzNC0xLjkyMiAwLjM5ODhsMS40MTgtMTUuMTM0YzAuMDkyLTAuMzE5MiAwLjA0Ni0wLjYtMC4xMzctMC44NDMycy0wLjQyLTAuNDEwMy0wLjcwOS0wLjUwMTRjLTAuMjktMC4wOTEzLTAuNTk5LTAuMDgzNS0wLjkyNyAwLjAyMjYtMC4zMjggMC4xMDY3LTAuNTk4IDAuMzQ5OS0wLjgxMiAwLjcyOTItMC42MjQwNSA0LjIxNy0xLjAwMDQgOS4wMDA1LTEuMzE1IDEyLjg1NS00ZS0zIDAuMDQ4Ni03ZS0zIDAuMDkyNi0wLjAxMSAwLjE0MDYtMC4xMzMgMC4xMTI3LTAuMjYzIDAuMjI2NC0wLjQwMSAwLjMzOC0wLjUyNiAwLjQyNTYtMS4wNzkgMC44MDkxLTEuNjU4IDEuMTUxMS0wLjU4IDAuMzQyMS0xLjE4MiAwLjYyMzItMS44MDcgMC44NDM1LTAuNjI2IDAuMjIwNC0xLjI2NyAwLjM1MzQtMS45MjIgMC4zOTg4bDEuNDE4LTE1LjEzNGMwLjA5Mi0wLjMxOTIgMC4wNDYtMC42LTAuMTM3LTAuODQzMnMtMC40Mi0wLjQxMDMtMC43MDktMC41MDE0Yy0wLjI5LTAuMDkxMy0wLjU5OS0wLjA4MzUtMC45MjcgMC4wMjI2LTAuMzI4IDAuMTA2Ny0wLjU5OCAwLjM0OTktMC44MTIgMC43MjkyLTAuNjIzMzIgNC4yMTcxLTEuMDAwNCA5LjAwMDUtMS4zMTUgMTIuODU1LTJlLTMgMC4wMjItM2UtMyAwLjA0MTktNWUtMyAwLjA2MzktMC4yMzkgMC4xMTA4LTAuNTAxIDAuMjA3OS0wLjc4NCAwLjI4OTUtMC4yOSAwLjA4MzgtMC42MTggMC4xMzMzLTAuOTg0IDAuMTQ4MyAwLjA2MS0wLjI3MzggMC4xMTEtMC41Nzc3IDAuMTQ5LTAuOTEyIDAuMTA0NjUtMC43MzI5MyAwLjA5MzktMS40NTUzIDAuMTE0LTIuMTQyNC04ZS0zIC0wLjM2NDktMC4wMjctMC42OTg5LTAuMDU3LTEuMDAzMS0wLjA3Ni0wLjY1MjktMC4yMTctMS4yNzIzLTAuNDIzLTEuODU3Ni0wLjIwNi0wLjU4NDctMC40ODQtMS4wNzQ1LTAuODM1LTEuNDcwMS0wLjM1MS0wLjM5NS0wLjc4OS0wLjY2MS0xLjMxNi0wLjc5NzUtMC41MjUtMC4xMzY4LTEuMTM5LTAuMDkxNC0xLjg0MSAwLjEzNjUtMS4wMzctMC4xMzY1LTEuOTcxLTAuMDQxNC0yLjgwMiAwLjI4NTEtMC44MzEgMC4zMjcxLTEuNTUyIDAuODAxNi0yLjE2MiAxLjQyNDQtMC42MSAwLjYyMzUtMS4xMDkgMS4zNTYyLTEuNDk4IDIuMTk5Ny0wLjM4OSAwLjg0MzItMC42NDggMS43MDk1LTAuNzc4IDIuNTk4MS0wLjA1NSAwLjM3NjgtMC4wODIgMC43NTE4LTAuMDkgMS4xMjYtMC4yMzYgMC40ODE3LTAuNDk0IDAuOTAyOC0wLjc3OSAxLjI1NjEtMC40MDQgMC41MDE0LTAuODI0IDAuOTExNy0xLjI1OCAxLjIzMDctMC40MzUgMC4zMTkyLTAuODY2IDAuNTYyNC0xLjI5MyAwLjcyOTUtMC40MjcgMC4xNjc1LTAuODA4IDAuMjgxNC0xLjE0MyAwLjM0MTgtMC4zOTcgMC4wNzYxLTAuNzc4IDAuMDgzOS0xLjE0NCAwLjAyMjktMC4zNjYtMC4wNjA1LTAuNzAyLTAuMjM1NC0xLjAwNi0wLjUyNDMtMC4yNDUtMC4yMTI1LTAuNDMyLTAuNTU0Ni0wLjU2MS0xLjAyNTYtMC4xMy0wLjQ3MTEtMC4yMDYtMS4wMDYzLTAuMjI5LTEuNjA2OS0wLjAyMy0wLjYwMDMgMC0xLjIyNzIgMC4wNjktMS44ODA0czAuMTg2LTEuMjcyNiAwLjM1NC0xLjg1NzYgMC4zODEtMS4xMDkyIDAuNjQxLTEuNTczYzAuMjU5LTAuNDYzIDAuNTY0LTAuNzkzOCAwLjkxNS0wLjk5MTMgMC4xOTggMC4wMzA3IDAuMzIgMC4xNDgxIDAuMzY2IDAuMzUzMSAwLjA0NiAwLjIwNTMgMC4wNTcgMC40NDg1IDAuMDM0IDAuNzI5NS0wLjAyMyAwLjI4MTQtMC4wNTcgMC41Ny0wLjEwMyAwLjg2NjEtMC4wNDYgMC4yOTY0LTAuMDY4IDAuNTQzNi0wLjA2OCAwLjc0MDggMC4wNzYgMC40MTAzIDAuMjI0IDAuNzI5NiAwLjQ0NiAwLjk1NzQgMC4yMiAwLjIyNzkgMC40NjkgMC4zNjEyIDAuNzQzIDAuMzk4OCAwLjI3NSAwLjAzODEgMC41NDUtMC4wMjYzIDAuODEyLTAuMTkzOCAwLjI2Ny0wLjE2NjggMC40ODQtMC40MzI4IDAuNjUyLTAuNzk3OCAwLjAxNSAwLjAxNTQgMC4wMzggMC4wMjI5IDAuMDY5IDAuMDIyOWwwLjMyLTIuODk0NWMwLjA5Mi0wLjM5NTMgMC4wMy0wLjc0NDYtMC4xODMtMS4wNDg1LTAuMjE0LTAuMzAzOS0wLjQ5Ni0wLjQ3ODktMC44NDYtMC41MjQzLTAuNDQzLTAuNjM4Mi0xLjA0MS0wLjk3NjItMS43OTYtMS4wMTQ0LTAuNzU1LTAuMDM3OC0xLjUyOSAwLjIwOTEtMi4zMjIgMC43NDA5LTAuNDg4IDAuMzQ5OS0wLjkxOSAwLjgzMTktMS4yOTIgMS40NDcyLTAuMzc0IDAuNjE1Ny0wLjY3OSAxLjI5OTItMC45MTUgMi4wNTEzLTAuMjM3IDAuNzUyMi0wLjQwNSAxLjU0NjUtMC41MDQgMi4zODIyLTAuMDk5IDAuODM1Ni0wLjExOCAxLjY0ODgtMC4wNTcgMi40Mzg1IDAuMDYxIDAuNzkwNSAwLjIwMiAxLjUzNTEgMC40MjMgMi4yMzM3IDAuMjIxIDAuNjk5MiAwLjUzIDEuMjg0MiAwLjkyNyAxLjc1NSAwLjMzNSAwLjQxMDMgMC43MTYgMC43MTA3IDEuMTQzIDAuOTAwN3MwLjg3MyAwLjMwNzQgMS4zMzkgMC4zNTMxYzAuNDY1IDAuMDQ1NCAwLjkyNiAwLjAyNjMgMS4zODQtMC4wNTcgMC40NTctMC4wODMzIDAuODkyLTAuMjAxIDEuMzAzLTAuMzUzNCAwLjUzNC0wLjE5NzIgMS4wODQtMC40NDgyIDEuNjQ4LTAuNzUyMSAwLjU2NC0wLjMwMzYgMS4xMDUtMC42Njg1IDEuNjI0LTEuMDk0MiAwLjI3My0wLjIyMzggMC41MzUtMC40Njc4IDAuNzg5LTAuNzI5NSAwLjExNiAwLjI4NTcgMC4yNDUgMC41NjIxIDAuNCAwLjgyMDkgMC40MTIgMC42ODM2IDAuOTY4IDEuMjM4NSAxLjY3IDEuNjYzOSAwLjcwMSAwLjQyNTMgMS41NjMgMC42MyAyLjU4NSAwLjYxNTMgMS4wOTgtMC4wMTUzIDIuMTEyLTAuMjkyMyAzLjA0My0wLjgzMTkgMC45My0wLjUzOSAxLjY5Mi0xLjMzMzYgMi4yODctMi4zODE4IDAuODkxIDAgMS43NjctMC4xNDY0IDIuNjI5LTAuNDM3LTAuMDU3MyAwLjYyOTItMC4wNzg4IDEuMjc3MS0wLjExMyAxLjkxODYtMC4wMTUgMC41MDE0LTAuMDQ5IDEuMTIwNS0wLjEwMyAxLjg1NzMtMC4wNTMgMC43MzcxLTAuMDg3IDEuNTEyLTAuMTAyIDIuMzI0OS0wLjAxNSAwLjgxMjggMC4wMTUgMS42MzM0IDAuMDkxIDIuNDYxOSAwLjA3NiAwLjgyNzkgMC4yMzYgMS41ODAzIDAuNDggMi4yNTY2IDAuMjQ0IDAuNjc1OCAwLjU5MSAxLjI0OTUgMS4wNDEgMS43MjA4IDAuNDUgMC40NzA4IDEuMDQxIDAuNzUyMSAxLjc3MyAwLjg0MzIgMC43NzggMC4xMDYxIDEuNDQ5LTAuMDMwNiAyLjAxMy0wLjQxMDMgMC41NjQtMC4zOCAxLjAyMi0wLjkwMDIgMS4zNzMtMS41NjEyIDAuMzUtMC42NjEzIDAuNTk4LTEuNDI0NyAwLjc0My0yLjI5MDcgMC4xNDUtMC44NjYxIDAuMTg3LTEuNzM2MiAwLjEyNi0yLjYxLTAuMDYxLTAuODczOS0wLjIyMi0xLjY5OC0wLjQ4MS0yLjQ3MjYtMC4yNTktMC43NzUzLTAuNjE4LTEuNDEzNS0xLjA3NS0xLjkxNTIgMC4yNzUtMC4wNzU0IDAuNjAzLTAuMjE5NyAwLjk4NC0wLjQzMjggMC41NjEwMS0wLjMwMTUzIDAuOTkzNTItMC42MTI4NCAxLjQ3NC0wLjkxOTMtMC4wMzcgMC41Mzg0LTAuMDU2IDAuOTIyNC0wLjA1NiAxLjE0NzQtMC4wMTUgMC41MDE0LTAuMDQ5IDEuMTIwNS0wLjEwMyAxLjg1NzMtMC4wNTMgMC43MzcxLTAuMDg4IDEuNTEyLTAuMTAzIDIuMzI0OS0wLjAxNSAwLjgxMjggMC4wMTUgMS42MzM0IDAuMDkyIDIuNDYxOSAwLjA3NiAwLjgyNzkgMC4yMzYgMS41ODAzIDAuNDggMi4yNTY2IDAuMjQ0IDAuNjc1OCAwLjU5MSAxLjI0OTUgMS4wNDEgMS43MjA4IDAuNDUgMC40NzA4IDEuMDQxIDAuNzUyMSAxLjc3MyAwLjg0MzIgMC43NzcgMC4xMDYxIDEuNDQ4LTAuMDMwNiAyLjAxMy0wLjQxMDMgMC41NjQtMC4zOCAxLjAyMS0wLjkwMDIgMS4zNzMtMS41NjEyIDAuMzUtMC42NjEzIDAuNTk4LTEuNDI0NyAwLjc0My0yLjI5MDcgMC4xNDUtMC44NjYxIDAuMTg2LTEuNzM2MiAwLjEyNi0yLjYxLTAuMDYyLTAuODczOS0wLjIyMi0xLjY5OC0wLjQ4MS0yLjQ3MjYtMC4yNTktMC43NzUzLTAuNjE3LTEuNDEzNS0xLjA3NS0xLjkxNTIgMC4yNzUtMC4wNzU0IDAuNjAyLTAuMjE5NyAwLjk4NC0wLjQzMjggMC4zODEtMC4yMTI2IDAuNzczLTAuNDUyIDEuMTc4LTAuNzE4IDAuMjEtMC4xMzgyIDAuNDE5LTAuMjgwOCAwLjYyNy0wLjQyNzQgMC4wNzggMC43NDMxIDAuMjQ3IDEuMzk0OSAwLjUxNiAxLjk0MzIgMC4zMjggMC42Njg4IDAuNzc0IDEuMTg1MiAxLjMzOSAxLjU1MDIgMC41NjQgMC4zNjQzIDEuMjI3IDAuNTY1OSAxLjk5IDAuNjAzNyAwLjc2MiAwLjAzNzYgMS41OTMtMC4xMDI2IDIuNDk0LTAuNDIxOSAwLjY3LTAuMjQyOCAxLjI1NC0wLjU0NjggMS43NDktMC45MTE0IDAuNDk2LTAuMzY0OSAwLjk0Mi0wLjgwOTQgMS4zMzgtMS4zMzMzIDAuMDIzLTAuMDMwNCAwLjA0NS0wLjA2MzMgMC4wNjctMC4wOTQgMC4wNzEgMC4yMTI4IDAuMTQ5IDAuNDE3MyAwLjI0MiAwLjYwNjcgMC4zMjggMC42Njg4IDAuNzc0IDEuMTg1MiAxLjMzOSAxLjU1MDIgMC41NjMgMC4zNjQzIDEuMjI3IDAuNTY1OSAxLjk5IDAuNjAzNyAwLjc2MiAwLjAzNzYgMS41OTMtMC4xMDI2IDIuNDkzLTAuNDIxOSAwLjY3MS0wLjI0MjggMS4yNTUtMC41NDY4IDEuNzUtMC45MTE0IDAuNDk2LTAuMzY0OSAwLjk0Mi0wLjgwOTQgMS4zMzgtMS4zMzMzIDAuMzk3LTAuNTI0NiAwLjc1OS0xLjEyODYgMS4wODctMS44MTIyIDAuMzI4LTAuNjgzOSAwLjY1OS0xLjQ2NiAwLjk5NS0yLjM0NzcgMC4wNjEtMC4yNDI5IDRlLTMgLTAuNDU5NS0wLjE3MS0wLjY0OTV6XCIgZmlsbD1cIiMwZDBjMjNcIi8+XG4gPC9nPlxuPC9zdmc+YDtcbmV4cG9ydCBjb25zdCBwYXlwYWwgPSBgXG48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE1MFwiIGhlaWdodD1cIjQwXCI+XG48cGF0aCBmaWxsPVwiIzI1M0I4MFwiIGQ9XCJNNDYuMjExIDYuNzQ5aC02LjgzOWEuOTUuOTUgMCAwIDAtLjkzOS44MDJsLTIuNzY2IDE3LjUzN2EuNTcuNTcgMCAwIDAgLjU2NC42NThoMy4yNjVhLjk1Ljk1IDAgMCAwIC45MzktLjgwM2wuNzQ2LTQuNzNhLjk1Ljk1IDAgMCAxIC45MzgtLjgwM2gyLjE2NWM0LjUwNSAwIDcuMTA1LTIuMTggNy43ODQtNi41LjMwNi0xLjg5LjAxMy0zLjM3NS0uODcyLTQuNDE1LS45NzItMS4xNDItMi42OTYtMS43NDYtNC45ODUtMS43NDZ6TTQ3IDEzLjE1NGMtLjM3NCAyLjQ1NC0yLjI0OSAyLjQ1NC00LjA2MiAyLjQ1NGgtMS4wMzJsLjcyNC00LjU4M2EuNTcuNTcgMCAwIDEgLjU2My0uNDgxaC40NzNjMS4yMzUgMCAyLjQgMCAzLjAwMi43MDQuMzU5LjQyLjQ2OSAxLjA0NC4zMzIgMS45MDZ6TTY2LjY1NCAxMy4wNzVoLTMuMjc1YS41Ny41NyAwIDAgMC0uNTYzLjQ4MWwtLjE0NS45MTYtLjIyOS0uMzMyYy0uNzA5LTEuMDI5LTIuMjktMS4zNzMtMy44NjgtMS4zNzMtMy42MTkgMC02LjcxIDIuNzQxLTcuMzEyIDYuNTg2LS4zMTMgMS45MTguMTMyIDMuNzUyIDEuMjIgNS4wMzEuOTk4IDEuMTc2IDIuNDI2IDEuNjY2IDQuMTI1IDEuNjY2IDIuOTE2IDAgNC41MzMtMS44NzUgNC41MzMtMS44NzVsLS4xNDYuOTFhLjU3LjU3IDAgMCAwIC41NjIuNjZoMi45NWEuOTUuOTUgMCAwIDAgLjkzOS0uODAzbDEuNzctMTEuMjA5YS41NjguNTY4IDAgMCAwLS41NjEtLjY1OHptLTQuNTY1IDYuMzc0Yy0uMzE2IDEuODcxLTEuODAxIDMuMTI3LTMuNjk1IDMuMTI3LS45NTEgMC0xLjcxMS0uMzA1LTIuMTk5LS44ODMtLjQ4NC0uNTc0LS42NjgtMS4zOTEtLjUxNC0yLjMwMS4yOTUtMS44NTUgMS44MDUtMy4xNTIgMy42Ny0zLjE1Mi45MyAwIDEuNjg2LjMwOSAyLjE4NC44OTIuNDk5LjU4OS42OTcgMS40MTEuNTU0IDIuMzE3ek04NC4wOTYgMTMuMDc1aC0zLjI5MWEuOTU0Ljk1NCAwIDAgMC0uNzg3LjQxN2wtNC41MzkgNi42ODYtMS45MjQtNi40MjVhLjk1My45NTMgMCAwIDAtLjkxMi0uNjc4aC0zLjIzNGEuNTcuNTcgMCAwIDAtLjU0MS43NTRsMy42MjUgMTAuNjM4LTMuNDA4IDQuODExYS41Ny41NyAwIDAgMCAuNDY1LjloMy4yODdhLjk0OS45NDkgMCAwIDAgLjc4MS0uNDA4bDEwLjk0Ni0xNS44YS41Ny41NyAwIDAgMC0uNDY4LS44OTV6XCIvPlxuPHBhdGggZmlsbD1cIiMxNzlCRDdcIiBkPVwiTTk0Ljk5MiA2Ljc0OWgtNi44NGEuOTUuOTUgMCAwIDAtLjkzOC44MDJsLTIuNzY2IDE3LjUzN2EuNTY5LjU2OSAwIDAgMCAuNTYyLjY1OGgzLjUxYS42NjUuNjY1IDAgMCAwIC42NTYtLjU2MmwuNzg1LTQuOTcxYS45NS45NSAwIDAgMSAuOTM4LS44MDNoMi4xNjRjNC41MDYgMCA3LjEwNS0yLjE4IDcuNzg1LTYuNS4zMDctMS44OS4wMTItMy4zNzUtLjg3My00LjQxNS0uOTcxLTEuMTQyLTIuNjk0LTEuNzQ2LTQuOTgzLTEuNzQ2em0uNzg5IDYuNDA1Yy0uMzczIDIuNDU0LTIuMjQ4IDIuNDU0LTQuMDYyIDIuNDU0aC0xLjAzMWwuNzI1LTQuNTgzYS41NjguNTY4IDAgMCAxIC41NjItLjQ4MWguNDczYzEuMjM0IDAgMi40IDAgMy4wMDIuNzA0LjM1OS40Mi40NjggMS4wNDQuMzMxIDEuOTA2ek0xMTUuNDM0IDEzLjA3NWgtMy4yNzNhLjU2Ny41NjcgMCAwIDAtLjU2Mi40ODFsLS4xNDUuOTE2LS4yMy0uMzMyYy0uNzA5LTEuMDI5LTIuMjg5LTEuMzczLTMuODY3LTEuMzczLTMuNjE5IDAtNi43MDkgMi43NDEtNy4zMTEgNi41ODYtLjMxMiAxLjkxOC4xMzEgMy43NTIgMS4yMTkgNS4wMzEgMSAxLjE3NiAyLjQyNiAxLjY2NiA0LjEyNSAxLjY2NiAyLjkxNiAwIDQuNTMzLTEuODc1IDQuNTMzLTEuODc1bC0uMTQ2LjkxYS41Ny41NyAwIDAgMCAuNTY0LjY2aDIuOTQ5YS45NS45NSAwIDAgMCAuOTM4LS44MDNsMS43NzEtMTEuMjA5YS41NzEuNTcxIDAgMCAwLS41NjUtLjY1OHptLTQuNTY1IDYuMzc0Yy0uMzE0IDEuODcxLTEuODAxIDMuMTI3LTMuNjk1IDMuMTI3LS45NDkgMC0xLjcxMS0uMzA1LTIuMTk5LS44ODMtLjQ4NC0uNTc0LS42NjYtMS4zOTEtLjUxNC0yLjMwMS4yOTctMS44NTUgMS44MDUtMy4xNTIgMy42Ny0zLjE1Mi45MyAwIDEuNjg2LjMwOSAyLjE4NC44OTIuNTAxLjU4OS42OTkgMS40MTEuNTU0IDIuMzE3ek0xMTkuMjk1IDcuMjNsLTIuODA3IDE3Ljg1OGEuNTY5LjU2OSAwIDAgMCAuNTYyLjY1OGgyLjgyMmMuNDY5IDAgLjg2Ny0uMzQuOTM5LS44MDNsMi43NjgtMTcuNTM2YS41Ny41NyAwIDAgMC0uNTYyLS42NTloLTMuMTZhLjU3MS41NzEgMCAwIDAtLjU2Mi40ODJ6XCIvPlxuPHBhdGggZmlsbD1cIiMyNTNCODBcIiBkPVwiTTcuMjY2IDI5LjE1NGwuNTIzLTMuMzIyLTEuMTY1LS4wMjdIMS4wNjFMNC45MjcgMS4yOTJhLjMxNi4zMTYgMCAwIDEgLjMxNC0uMjY4aDkuMzhjMy4xMTQgMCA1LjI2My42NDggNi4zODUgMS45MjcuNTI2LjYuODYxIDEuMjI3IDEuMDIzIDEuOTE3LjE3LjcyNC4xNzMgMS41ODkuMDA3IDIuNjQ0bC0uMDEyLjA3N3YuNjc2bC41MjYuMjk4YTMuNjkgMy42OSAwIDAgMSAxLjA2NS44MTJjLjQ1LjUxMy43NDEgMS4xNjUuODY0IDEuOTM4LjEyNy43OTUuMDg1IDEuNzQxLS4xMjMgMi44MTItLjI0IDEuMjMyLS42MjggMi4zMDUtMS4xNTIgMy4xODNhNi41NDcgNi41NDcgMCAwIDEtMS44MjUgMmMtLjY5Ni40OTQtMS41MjMuODY5LTIuNDU4IDEuMTA5LS45MDYuMjM2LTEuOTM5LjM1NS0zLjA3Mi4zNTVoLS43M2MtLjUyMiAwLTEuMDI5LjE4OC0xLjQyNy41MjVhMi4yMSAyLjIxIDAgMCAwLS43NDQgMS4zMjhsLS4wNTUuMjk5LS45MjQgNS44NTUtLjA0Mi4yMTVjLS4wMTEuMDY4LS4wMy4xMDItLjA1OC4xMjVhLjE1NS4xNTUgMCAwIDEtLjA5Ni4wMzVINy4yNjZ6XCIvPlxuPHBhdGggZmlsbD1cIiMxNzlCRDdcIiBkPVwiTTIzLjA0OCA3LjY2N2MtLjAyOC4xNzktLjA2LjM2Mi0uMDk2LjU1LTEuMjM3IDYuMzUxLTUuNDY5IDguNTQ1LTEwLjg3NCA4LjU0NUg5LjMyNmMtLjY2MSAwLTEuMjE4LjQ4LTEuMzIxIDEuMTMyTDYuNTk2IDI2LjgzbC0uMzk5IDIuNTMzYS43MDQuNzA0IDAgMCAwIC42OTUuODE0aDQuODgxYy41NzggMCAxLjA2OS0uNDIgMS4xNi0uOTlsLjA0OC0uMjQ4LjkxOS01LjgzMi4wNTktLjMyYy4wOS0uNTcyLjU4Mi0uOTkyIDEuMTYtLjk5MmguNzNjNC43MjkgMCA4LjQzMS0xLjkyIDkuNTEzLTcuNDc2LjQ1Mi0yLjMyMS4yMTgtNC4yNTktLjk3OC01LjYyMmE0LjY2NyA0LjY2NyAwIDAgMC0xLjMzNi0xLjAzelwiLz5cbjxwYXRoIGZpbGw9XCIjMjIyRDY1XCIgZD1cIk0yMS43NTQgNy4xNTFhOS43NTcgOS43NTcgMCAwIDAtMS4yMDMtLjI2NyAxNS4yODQgMTUuMjg0IDAgMCAwLTIuNDI2LS4xNzdoLTcuMzUyYTEuMTcyIDEuMTcyIDAgMCAwLTEuMTU5Ljk5Mkw4LjA1IDE3LjYwNWwtLjA0NS4yODlhMS4zMzYgMS4zMzYgMCAwIDEgMS4zMjEtMS4xMzJoMi43NTJjNS40MDUgMCA5LjYzNy0yLjE5NSAxMC44NzQtOC41NDUuMDM3LS4xODguMDY4LS4zNzEuMDk2LS41NWE2LjU5NCA2LjU5NCAwIDAgMC0xLjAxNy0uNDI5IDkuMDQ1IDkuMDQ1IDAgMCAwLS4yNzctLjA4N3pcIi8+XG48cGF0aCBmaWxsPVwiIzI1M0I4MFwiIGQ9XCJNOS42MTQgNy42OTlhMS4xNjkgMS4xNjkgMCAwIDEgMS4xNTktLjk5MWg3LjM1MmMuODcxIDAgMS42ODQuMDU3IDIuNDI2LjE3N2E5Ljc1NyA5Ljc1NyAwIDAgMSAxLjQ4MS4zNTNjLjM2NS4xMjEuNzA0LjI2NCAxLjAxNy40MjkuMzY4LTIuMzQ3LS4wMDMtMy45NDUtMS4yNzItNS4zOTJDMjAuMzc4LjY4MiAxNy44NTMgMCAxNC42MjIgMGgtOS4zOGMtLjY2IDAtMS4yMjMuNDgtMS4zMjUgMS4xMzNMLjAxIDI1Ljg5OGEuODA2LjgwNiAwIDAgMCAuNzk1LjkzMmg1Ljc5MWwxLjQ1NC05LjIyNSAxLjU2NC05LjkwNnpcIi8+XG48L3N2Zz5gO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihmKSB7XG4gIGxldCBkZWx0YSA9IGY7XG4gIGxldCBjb21wYXJlID0gZjtcblxuICBpZiAoZi5sZW5ndGggPT09IDEpIHtcbiAgICBkZWx0YSA9IChkLCB4KSA9PiBmKGQpIC0geDtcbiAgICBjb21wYXJlID0gYXNjZW5kaW5nQ29tcGFyYXRvcihmKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZnQoYSwgeCwgbG8sIGhpKSB7XG4gICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJpZ2h0KGEsIHgsIGxvLCBoaSkge1xuICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgIGlmIChjb21wYXJlKGFbbWlkXSwgeCkgPiAwKSBoaSA9IG1pZDtcbiAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiBjZW50ZXIoYSwgeCwgbG8sIGhpKSB7XG4gICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIGFzY2VuZGluZ0NvbXBhcmF0b3IoZikge1xuICByZXR1cm4gKGQsIHgpID0+IGFzY2VuZGluZyhmKGQpLCB4KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuaW1wb3J0IGJpc2VjdG9yIGZyb20gXCIuL2Jpc2VjdG9yLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG5jb25zdCBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuZXhwb3J0IGNvbnN0IGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IGNvbnN0IGJpc2VjdExlZnQgPSBhc2NlbmRpbmdCaXNlY3QubGVmdDtcbmV4cG9ydCBjb25zdCBiaXNlY3RDZW50ZXIgPSBiaXNlY3RvcihudW1iZXIpLmNlbnRlcjtcbmV4cG9ydCBkZWZhdWx0IGJpc2VjdFJpZ2h0O1xuIiwidmFyIGUxMCA9IE1hdGguc3FydCg1MCksXG4gICAgZTUgPSBNYXRoLnNxcnQoMTApLFxuICAgIGUyID0gTWF0aC5zcXJ0KDIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHJldmVyc2UsXG4gICAgICBpID0gLTEsXG4gICAgICBuLFxuICAgICAgdGlja3MsXG4gICAgICBzdGVwO1xuXG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoc3RhcnQgPT09IHN0b3AgJiYgY291bnQgPiAwKSByZXR1cm4gW3N0YXJ0XTtcbiAgaWYgKHJldmVyc2UgPSBzdG9wIDwgc3RhcnQpIG4gPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gbjtcbiAgaWYgKChzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpKSA9PT0gMCB8fCAhaXNGaW5pdGUoc3RlcCkpIHJldHVybiBbXTtcblxuICBpZiAoc3RlcCA+IDApIHtcbiAgICBsZXQgcjAgPSBNYXRoLnJvdW5kKHN0YXJ0IC8gc3RlcCksIHIxID0gTWF0aC5yb3VuZChzdG9wIC8gc3RlcCk7XG4gICAgaWYgKHIwICogc3RlcCA8IHN0YXJ0KSArK3IwO1xuICAgIGlmIChyMSAqIHN0ZXAgPiBzdG9wKSAtLXIxO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSByMSAtIHIwICsgMSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHIwICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0ZXAgPSAtc3RlcDtcbiAgICBsZXQgcjAgPSBNYXRoLnJvdW5kKHN0YXJ0ICogc3RlcCksIHIxID0gTWF0aC5yb3VuZChzdG9wICogc3RlcCk7XG4gICAgaWYgKHIwIC8gc3RlcCA8IHN0YXJ0KSArK3IwO1xuICAgIGlmIChyMSAvIHN0ZXAgPiBzdG9wKSAtLXIxO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSByMSAtIHIwICsgMSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHIwICsgaSkgLyBzdGVwO1xuICB9XG5cbiAgaWYgKHJldmVyc2UpIHRpY2tzLnJldmVyc2UoKTtcblxuICByZXR1cm4gdGlja3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgcG93ZXIgPSBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXApIC8gTWF0aC5MTjEwKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlcik7XG4gIHJldHVybiBwb3dlciA+PSAwXG4gICAgICA/IChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpICogTWF0aC5wb3coMTAsIHBvd2VyKVxuICAgICAgOiAtTWF0aC5wb3coMTAsIC1wb3dlcikgLyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgc3RlcDEgPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwMCkgLyBNYXRoLkxOMTApKSxcbiAgICAgIGVycm9yID0gc3RlcDAgLyBzdGVwMTtcbiAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gIGVsc2UgaWYgKGVycm9yID49IGU1KSBzdGVwMSAqPSA1O1xuICBlbHNlIGlmIChlcnJvciA+PSBlMikgc3RlcDEgKj0gMjtcbiAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZS5qc1wiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gbm9uZSgpIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBncm91cCA9PSBudWxsID8gW10gOiBhcnJheShncm91cCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZE1hdGNoZXIoc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaW5kID0gQXJyYXkucHJvdG90eXBlLmZpbmQ7XG5cbmZ1bmN0aW9uIGNoaWxkRmluZChtYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZpbmQuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkRmlyc3QoKSB7XG4gIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QobWF0Y2ggPT0gbnVsbCA/IGNoaWxkRmlyc3RcbiAgICAgIDogY2hpbGRGaW5kKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7RW50ZXJOb2RlfSBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBiaW5kSW5kZXgocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSkge1xuICB2YXIgaSA9IDAsXG4gICAgICBub2RlLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXG4gIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICB2YXIgaSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlQnlLZXlWYWx1ZSA9IG5ldyBNYXAsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApICsgXCJcIjtcbiAgICAgIGlmIChub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUpKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWUuc2V0KGtleVZhbHVlLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKSArIFwiXCI7XG4gICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWUpKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZS5kZWxldGUoa2V5VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZXNbaV0pID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRhdHVtKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX19kYXRhX187XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLCBkYXR1bSk7XG5cbiAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxuICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB2YWx1ZSA9IGNvbnN0YW50KHZhbHVlKTtcblxuICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhID0gYXJyYXkodmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvbmVudGVyLCBvbnVwZGF0ZSwgb25leGl0KSB7XG4gIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xuICBlbnRlciA9IHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIgPyBvbmVudGVyKGVudGVyKSA6IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIGlmIChvbnVwZGF0ZSAhPSBudWxsKSB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuICBpZiAoIShzZWxlY3Rpb24gaW5zdGFuY2VvZiBTZWxlY3Rpb24pKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG1lcmdlXCIpO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xuICAgICAgICBuZXh0ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgc2l6ZSA9IDA7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSArK3NpemU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qKCkge1xuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgeWllbGQgbm9kZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwiaW1wb3J0IHtTZWxlY3Rpb24sIHJvb3R9IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4vY3JlYXRvci5qc1wiO1xuaW1wb3J0IHNlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0KGNyZWF0b3IobmFtZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnN0cnVjdG9yLCBmYWN0b3J5LCBwcm90b3R5cGUpIHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gZmFjdG9yeS5wcm90b3R5cGUgPSBwcm90b3R5cGU7XG4gIHByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKHBhcmVudCwgZGVmaW5pdGlvbikge1xuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQucHJvdG90eXBlKTtcbiAgZm9yICh2YXIga2V5IGluIGRlZmluaXRpb24pIHByb3RvdHlwZVtrZXldID0gZGVmaW5pdGlvbltrZXldO1xuICByZXR1cm4gcHJvdG90eXBlO1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBDb2xvcigpIHt9XG5cbmV4cG9ydCB2YXIgZGFya2VyID0gMC43O1xuZXhwb3J0IHZhciBicmlnaHRlciA9IDEgLyBkYXJrZXI7XG5cbnZhciByZUkgPSBcIlxcXFxzKihbKy1dP1xcXFxkKylcXFxccypcIixcbiAgICByZU4gPSBcIlxcXFxzKihbKy1dP1xcXFxkKlxcXFwuP1xcXFxkKyg/OltlRV1bKy1dP1xcXFxkKyk/KVxcXFxzKlwiLFxuICAgIHJlUCA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlSSwgcmVJLCByZUldICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5yZ2JcXFxcKFwiICsgW3JlUCwgcmVQLCByZVBdICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhSW50ZWdlciA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVJLCByZUksIHJlSSwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlUmdiYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYmFcXFxcKFwiICsgW3JlUCwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbFxcXFwoXCIgKyBbcmVOLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZUhzbGFQZXJjZW50ID0gbmV3IFJlZ0V4cChcIl5oc2xhXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQLCByZU5dICsgXCJcXFxcKSRcIik7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHk6IGZ1bmN0aW9uKGNoYW5uZWxzKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsIHRoaXMsIGNoYW5uZWxzKTtcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIGhleDogY29sb3JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IGNvbG9yX2Zvcm1hdEhleCxcbiAgZm9ybWF0SHNsOiBjb2xvcl9mb3JtYXRIc2wsXG4gIGZvcm1hdFJnYjogY29sb3JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogY29sb3JfZm9ybWF0UmdiXG59KTtcblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgUmdiKHRoaXMuciAqIGssIHRoaXMuZyAqIGssIHRoaXMuYiAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGRpc3BsYXlhYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKC0wLjUgPD0gdGhpcy5yICYmIHRoaXMuciA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmcgJiYgdGhpcy5nIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuYiAmJiB0aGlzLmIgPCAyNTUuNSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5vcGFjaXR5ICYmIHRoaXMub3BhY2l0eSA8PSAxKTtcbiAgfSxcbiAgaGV4OiByZ2JfZm9ybWF0SGV4LCAvLyBEZXByZWNhdGVkISBVc2UgY29sb3IuZm9ybWF0SGV4LlxuICBmb3JtYXRIZXg6IHJnYl9mb3JtYXRIZXgsXG4gIGZvcm1hdFJnYjogcmdiX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IHJnYl9mb3JtYXRSZ2Jcbn0pKTtcblxuZnVuY3Rpb24gcmdiX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIFwiI1wiICsgaGV4KHRoaXMucikgKyBoZXgodGhpcy5nKSArIGhleCh0aGlzLmIpO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0UmdiKCkge1xuICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgcmV0dXJuIChhID09PSAxID8gXCJyZ2IoXCIgOiBcInJnYmEoXCIpXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLnIpIHx8IDApKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMuYikgfHwgMCkpXG4gICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodmFsdWUpIHx8IDApKTtcbiAgcmV0dXJuICh2YWx1ZSA8IDE2ID8gXCIwXCIgOiBcIlwiKSArIHZhbHVlLnRvU3RyaW5nKDE2KTtcbn1cblxuZnVuY3Rpb24gaHNsYShoLCBzLCBsLCBhKSB7XG4gIGlmIChhIDw9IDApIGggPSBzID0gbCA9IE5hTjtcbiAgZWxzZSBpZiAobCA8PSAwIHx8IGwgPj0gMSkgaCA9IHMgPSBOYU47XG4gIGVsc2UgaWYgKHMgPD0gMCkgaCA9IE5hTjtcbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoc2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBuZXcgSHNsKG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IEhzbDtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIc2wpIHJldHVybiBvO1xuICBvID0gby5yZ2IoKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpLFxuICAgICAgbWF4ID0gTWF0aC5tYXgociwgZywgYiksXG4gICAgICBoID0gTmFOLFxuICAgICAgcyA9IG1heCAtIG1pbixcbiAgICAgIGwgPSAobWF4ICsgbWluKSAvIDI7XG4gIGlmIChzKSB7XG4gICAgaWYgKHIgPT09IG1heCkgaCA9IChnIC0gYikgLyBzICsgKGcgPCBiKSAqIDY7XG4gICAgZWxzZSBpZiAoZyA9PT0gbWF4KSBoID0gKGIgLSByKSAvIHMgKyAyO1xuICAgIGVsc2UgaCA9IChyIC0gZykgLyBzICsgNDtcbiAgICBzIC89IGwgPCAwLjUgPyBtYXggKyBtaW4gOiAyIC0gbWF4IC0gbWluO1xuICAgIGggKj0gNjA7XG4gIH0gZWxzZSB7XG4gICAgcyA9IGwgPiAwICYmIGwgPCAxID8gMCA6IGg7XG4gIH1cbiAgcmV0dXJuIG5ldyBIc2woaCwgcywgbCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXG4gICAgICAgIGwgPSB0aGlzLmwsXG4gICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgIG0xID0gMiAqIGwgLSBtMjtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2w6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICAgIHJldHVybiAoYSA9PT0gMSA/IFwiaHNsKFwiIDogXCJoc2xhKFwiKVxuICAgICAgICArICh0aGlzLmggfHwgMCkgKyBcIiwgXCJcbiAgICAgICAgKyAodGhpcy5zIHx8IDApICogMTAwICsgXCIlLCBcIlxuICAgICAgICArICh0aGlzLmwgfHwgMCkgKiAxMDAgKyBcIiVcIlxuICAgICAgICArIChhID09PSAxID8gXCIpXCIgOiBcIiwgXCIgKyBhICsgXCIpXCIpO1xuICB9XG59KSk7XG5cbi8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcbiAgICAgIDogaCA8IDE4MCA/IG0yXG4gICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICA6IG0xKSAqIDI1NTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiAoaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5IDogZ2VuZXJpY0FycmF5KShhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlLmpzXCI7XG5cbnZhciBzdmdOb2RlO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGNvbnN0IG0gPSBuZXcgKHR5cGVvZiBET01NYXRyaXggPT09IFwiZnVuY3Rpb25cIiA/IERPTU1hdHJpeCA6IFdlYktpdENTU01hdHJpeCkodmFsdWUgKyBcIlwiKTtcbiAgcmV0dXJuIG0uaXNJZGVudGl0eSA/IGlkZW50aXR5IDogZGVjb21wb3NlKG0uYSwgbS5iLCBtLmMsIG0uZCwgbS5lLCBtLmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlci5qc1wiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJ2YXIgZnJhbWUgPSAwLCAvLyBpcyBhbiBhbmltYXRpb24gZnJhbWUgcGVuZGluZz9cbiAgICB0aW1lb3V0ID0gMCwgLy8gaXMgYSB0aW1lb3V0IHBlbmRpbmc/XG4gICAgaW50ZXJ2YWwgPSAwLCAvLyBhcmUgYW55IHRpbWVycyBhY3RpdmU/XG4gICAgcG9rZURlbGF5ID0gMTAwMCwgLy8gaG93IGZyZXF1ZW50bHkgd2UgY2hlY2sgZm9yIGNsb2NrIHNrZXdcbiAgICB0YXNrSGVhZCxcbiAgICB0YXNrVGFpbCxcbiAgICBjbG9ja0xhc3QgPSAwLFxuICAgIGNsb2NrTm93ID0gMCxcbiAgICBjbG9ja1NrZXcgPSAwLFxuICAgIGNsb2NrID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSBcIm9iamVjdFwiICYmIHBlcmZvcm1hbmNlLm5vdyA/IHBlcmZvcm1hbmNlIDogRGF0ZSxcbiAgICBzZXRGcmFtZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpIDogZnVuY3Rpb24oZikgeyBzZXRUaW1lb3V0KGYsIDE3KTsgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIGNsb2NrTm93IHx8IChzZXRGcmFtZShjbGVhck5vdyksIGNsb2NrTm93ID0gY2xvY2subm93KCkgKyBjbG9ja1NrZXcpO1xufVxuXG5mdW5jdGlvbiBjbGVhck5vdygpIHtcbiAgY2xvY2tOb3cgPSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZXIoKSB7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl90aW1lID1cbiAgdGhpcy5fbmV4dCA9IG51bGw7XG59XG5cblRpbWVyLnByb3RvdHlwZSA9IHRpbWVyLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRpbWVyLFxuICByZXN0YXJ0OiBmdW5jdGlvbihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICB0aW1lID0gKHRpbWUgPT0gbnVsbCA/IG5vdygpIDogK3RpbWUpICsgKGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5KTtcbiAgICBpZiAoIXRoaXMuX25leHQgJiYgdGFza1RhaWwgIT09IHRoaXMpIHtcbiAgICAgIGlmICh0YXNrVGFpbCkgdGFza1RhaWwuX25leHQgPSB0aGlzO1xuICAgICAgZWxzZSB0YXNrSGVhZCA9IHRoaXM7XG4gICAgICB0YXNrVGFpbCA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMuX2NhbGwgPSBjYWxsYmFjaztcbiAgICB0aGlzLl90aW1lID0gdGltZTtcbiAgICBzbGVlcCgpO1xuICB9LFxuICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY2FsbCkge1xuICAgICAgdGhpcy5fY2FsbCA9IG51bGw7XG4gICAgICB0aGlzLl90aW1lID0gSW5maW5pdHk7XG4gICAgICBzbGVlcCgpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgdC5yZXN0YXJ0KGNhbGxiYWNrLCBkZWxheSwgdGltZSk7XG4gIHJldHVybiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGltZXJGbHVzaCgpIHtcbiAgbm93KCk7IC8vIEdldCB0aGUgY3VycmVudCB0aW1lLCBpZiBub3QgYWxyZWFkeSBzZXQuXG4gICsrZnJhbWU7IC8vIFByZXRlbmQgd2XigJl2ZSBzZXQgYW4gYWxhcm0sIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5LlxuICB2YXIgdCA9IHRhc2tIZWFkLCBlO1xuICB3aGlsZSAodCkge1xuICAgIGlmICgoZSA9IGNsb2NrTm93IC0gdC5fdGltZSkgPj0gMCkgdC5fY2FsbC5jYWxsKG51bGwsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGVsYXBzZWQgPT4ge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiIsImltcG9ydCB7U1RBUlRJTkcsIEVORElORywgRU5ERUR9IGZyb20gXCIuL3RyYW5zaXRpb24vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICBzY2hlZHVsZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGVtcHR5ID0gdHJ1ZSxcbiAgICAgIGk7XG5cbiAgaWYgKCFzY2hlZHVsZXMpIHJldHVybjtcblxuICBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuXG4gIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICBpZiAoKHNjaGVkdWxlID0gc2NoZWR1bGVzW2ldKS5uYW1lICE9PSBuYW1lKSB7IGVtcHR5ID0gZmFsc2U7IGNvbnRpbnVlOyB9XG4gICAgYWN0aXZlID0gc2NoZWR1bGUuc3RhdGUgPiBTVEFSVElORyAmJiBzY2hlZHVsZS5zdGF0ZSA8IEVORElORztcbiAgICBzY2hlZHVsZS5zdGF0ZSA9IEVOREVEO1xuICAgIHNjaGVkdWxlLnRpbWVyLnN0b3AoKTtcbiAgICBzY2hlZHVsZS5vbi5jYWxsKGFjdGl2ZSA/IFwiaW50ZXJydXB0XCIgOiBcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZWFzZVZhcnlpbmcoaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiB2ICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgICBzZXQodGhpcywgaWQpLmVhc2UgPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMuZWFjaChlYXNlVmFyeWluZyh0aGlzLl9pZCwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaS5jYWxsKHRoaXMsIHQpLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciB0LCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdCA9IChpMCA9IGkpICYmIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUxID0gdmFsdWUodGhpcyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlMSA9PSBudWxsID8gXCJcIiA6IHZhbHVlMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMudHdlZW4oXCJ0ZXh0XCIsIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IHRleHRGdW5jdGlvbih0d2VlblZhbHVlKHRoaXMsIFwidGV4dFwiLCB2YWx1ZSkpXG4gICAgICA6IHRleHRDb25zdGFudCh2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIikpO1xufVxuIiwiZnVuY3Rpb24gdGV4dEludGVycG9sYXRlKGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gaS5jYWxsKHRoaXMsIHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0VHdlZW4odmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiB0ZXh0SW50ZXJwb2xhdGUoaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcInRleHRcIjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHRleHRUd2Vlbih2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBvbjAsIG9uMSwgdGhhdCA9IHRoaXMsIGlkID0gdGhhdC5faWQsIHNpemUgPSB0aGF0LnNpemUoKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBjYW5jZWwgPSB7dmFsdWU6IHJlamVjdH0sXG4gICAgICAgIGVuZCA9IHt2YWx1ZTogZnVuY3Rpb24oKSB7IGlmICgtLXNpemUgPT09IDApIHJlc29sdmUoKTsgfX07XG5cbiAgICB0aGF0LmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgICBpZiAob24gIT09IG9uMCkge1xuICAgICAgICBvbjEgPSAob24wID0gb24pLmNvcHkoKTtcbiAgICAgICAgb24xLl8uY2FuY2VsLnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uaW50ZXJydXB0LnB1c2goY2FuY2VsKTtcbiAgICAgICAgb24xLl8uZW5kLnB1c2goZW5kKTtcbiAgICAgIH1cblxuICAgICAgc2NoZWR1bGUub24gPSBvbjE7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc2VsZWN0aW9uIHdhcyBlbXB0eSwgcmVzb2x2ZSBlbmQgaW1tZWRpYXRlbHlcbiAgICBpZiAoc2l6ZSA9PT0gMCkgcmVzb2x2ZSgpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHJUd2VlbiBmcm9tIFwiLi9hdHRyVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2RlbGF5IGZyb20gXCIuL2RlbGF5LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kdXJhdGlvbiBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZSBmcm9tIFwiLi9lYXNlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlVmFyeWluZyBmcm9tIFwiLi9lYXNlVmFyeWluZy5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHQuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHRUd2VlbiBmcm9tIFwiLi90ZXh0VHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2VuZCBmcm9tIFwiLi9lbmQuanNcIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICB0ZXh0VHdlZW46IHRyYW5zaXRpb25fdGV4dFR3ZWVuLFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2UsXG4gIGVhc2VWYXJ5aW5nOiB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX3Byb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdXG59O1xuIiwiZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW4odCkge1xuICByZXR1cm4gdCAqIHQgKiB0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNPdXQodCkge1xuICByZXR1cm4gLS10ICogdCAqIHQgKyAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3ViaWNJbk91dCh0KSB7XG4gIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IHQgKiB0ICogdCA6ICh0IC09IDIpICogdCAqIHQgKyAyKSAvIDI7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2lkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ludGVycnVwdCBmcm9tIFwiLi9pbnRlcnJ1cHQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5cbnNlbGVjdGlvbi5wcm90b3R5cGUuaW50ZXJydXB0ID0gc2VsZWN0aW9uX2ludGVycnVwdDtcbnNlbGVjdGlvbi5wcm90b3R5cGUudHJhbnNpdGlvbiA9IHNlbGVjdGlvbl90cmFuc2l0aW9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCA9IE1hdGgucm91bmQoeCkpID49IDFlMjFcbiAgICAgID8geC50b0xvY2FsZVN0cmluZyhcImVuXCIpLnJlcGxhY2UoLywvZywgXCJcIilcbiAgICAgIDogeC50b1N0cmluZygxMCk7XG59XG5cbi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWxQYXJ0cygxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCkge1xuICBpZiAoKGkgPSAoeCA9IHAgPyB4LnRvRXhwb25lbnRpYWwocCAtIDEpIDogeC50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoXCJlXCIpKSA8IDApIHJldHVybiBudWxsOyAvLyBOYU4sIMKxSW5maW5pdHlcbiAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRvRXhwb25lbnRpYWwgZWl0aGVyIGhhcyB0aGUgZm9ybSBcXGRcXC5cXGQrZVstK11cXGQrXG4gIC8vIChlLmcuLCAxLjJlKzMpIG9yIHRoZSBmb3JtIFxcZGVbLStdXFxkKyAoZS5nLiwgMWUrMykuXG4gIHJldHVybiBbXG4gICAgY29lZmZpY2llbnQubGVuZ3RoID4gMSA/IGNvZWZmaWNpZW50WzBdICsgY29lZmZpY2llbnQuc2xpY2UoMikgOiBjb2VmZmljaWVudCxcbiAgICAreC5zbGljZShpICsgMSlcbiAgXTtcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPSBmb3JtYXREZWNpbWFsUGFydHMoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCB3aWR0aCkge1xuICAgIHZhciBpID0gdmFsdWUubGVuZ3RoLFxuICAgICAgICB0ID0gW10sXG4gICAgICAgIGogPSAwLFxuICAgICAgICBnID0gZ3JvdXBpbmdbMF0sXG4gICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoaSA+IDAgJiYgZyA+IDApIHtcbiAgICAgIGlmIChsZW5ndGggKyBnICsgMSA+IHdpZHRoKSBnID0gTWF0aC5tYXgoMSwgd2lkdGggLSBsZW5ndGgpO1xuICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICBpZiAoKGxlbmd0aCArPSBnICsgMSkgPiB3aWR0aCkgYnJlYWs7XG4gICAgICBnID0gZ3JvdXBpbmdbaiA9IChqICsgMSkgJSBncm91cGluZy5sZW5ndGhdO1xuICAgIH1cblxuICAgIHJldHVybiB0LnJldmVyc2UoKS5qb2luKHRob3VzYW5kcyk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihudW1lcmFscykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvWzAtOV0vZywgZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIG51bWVyYWxzWytpXTtcbiAgICB9KTtcbiAgfTtcbn1cbiIsIi8vIFtbZmlsbF1hbGlnbl1bc2lnbl1bc3ltYm9sXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bfl1bdHlwZV1cbnZhciByZSA9IC9eKD86KC4pPyhbPD49Xl0pKT8oWytcXC0oIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KH4pPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICBpZiAoIShtYXRjaCA9IHJlLmV4ZWMoc3BlY2lmaWVyKSkpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0OiBcIiArIHNwZWNpZmllcik7XG4gIHZhciBtYXRjaDtcbiAgcmV0dXJuIG5ldyBGb3JtYXRTcGVjaWZpZXIoe1xuICAgIGZpbGw6IG1hdGNoWzFdLFxuICAgIGFsaWduOiBtYXRjaFsyXSxcbiAgICBzaWduOiBtYXRjaFszXSxcbiAgICBzeW1ib2w6IG1hdGNoWzRdLFxuICAgIHplcm86IG1hdGNoWzVdLFxuICAgIHdpZHRoOiBtYXRjaFs2XSxcbiAgICBjb21tYTogbWF0Y2hbN10sXG4gICAgcHJlY2lzaW9uOiBtYXRjaFs4XSAmJiBtYXRjaFs4XS5zbGljZSgxKSxcbiAgICB0cmltOiBtYXRjaFs5XSxcbiAgICB0eXBlOiBtYXRjaFsxMF1cbiAgfSk7XG59XG5cbmZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUgPSBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlOyAvLyBpbnN0YW5jZW9mXG5cbmV4cG9ydCBmdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIHRoaXMuZmlsbCA9IHNwZWNpZmllci5maWxsID09PSB1bmRlZmluZWQgPyBcIiBcIiA6IHNwZWNpZmllci5maWxsICsgXCJcIjtcbiAgdGhpcy5hbGlnbiA9IHNwZWNpZmllci5hbGlnbiA9PT0gdW5kZWZpbmVkID8gXCI+XCIgOiBzcGVjaWZpZXIuYWxpZ24gKyBcIlwiO1xuICB0aGlzLnNpZ24gPSBzcGVjaWZpZXIuc2lnbiA9PT0gdW5kZWZpbmVkID8gXCItXCIgOiBzcGVjaWZpZXIuc2lnbiArIFwiXCI7XG4gIHRoaXMuc3ltYm9sID0gc3BlY2lmaWVyLnN5bWJvbCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHNwZWNpZmllci5zeW1ib2wgKyBcIlwiO1xuICB0aGlzLnplcm8gPSAhIXNwZWNpZmllci56ZXJvO1xuICB0aGlzLndpZHRoID0gc3BlY2lmaWVyLndpZHRoID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLndpZHRoO1xuICB0aGlzLmNvbW1hID0gISFzcGVjaWZpZXIuY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogK3NwZWNpZmllci5wcmVjaXNpb247XG4gIHRoaXMudHJpbSA9ICEhc3BlY2lmaWVyLnRyaW07XG4gIHRoaXMudHlwZSA9IHNwZWNpZmllci50eXBlID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnR5cGUgKyBcIlwiO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArICh0aGlzLnRyaW0gPyBcIn5cIiA6IFwiXCIpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCIvLyBUcmltcyBpbnNpZ25pZmljYW50IHplcm9zLCBlLmcuLCByZXBsYWNlcyAxLjIwMDBrIHdpdGggMS4yay5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHMpIHtcbiAgb3V0OiBmb3IgKHZhciBuID0gcy5sZW5ndGgsIGkgPSAxLCBpMCA9IC0xLCBpMTsgaSA8IG47ICsraSkge1xuICAgIHN3aXRjaCAoc1tpXSkge1xuICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgY2FzZSBcIjBcIjogaWYgKGkwID09PSAwKSBpMCA9IGk7IGkxID0gaTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBpZiAoIStzW2ldKSBicmVhayBvdXQ7IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBpMCA+IDAgPyBzLnNsaWNlKDAsIGkwKSArIHMuc2xpY2UoaTEgKyAxKSA6IHM7XG59XG4iLCJpbXBvcnQge2Zvcm1hdERlY2ltYWxQYXJ0c30gZnJvbSBcIi4vZm9ybWF0RGVjaW1hbC5qc1wiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbFBhcnRzKHgsIHApO1xuICBpZiAoIWQpIHJldHVybiB4ICsgXCJcIjtcbiAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgIGkgPSBleHBvbmVudCAtIChwcmVmaXhFeHBvbmVudCA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50IC8gMykpKSAqIDMpICsgMSxcbiAgICAgIG4gPSBjb2VmZmljaWVudC5sZW5ndGg7XG4gIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgIDogaSA+IG4gPyBjb2VmZmljaWVudCArIG5ldyBBcnJheShpIC0gbiArIDEpLmpvaW4oXCIwXCIpXG4gICAgICA6IGkgPiAwID8gY29lZmZpY2llbnQuc2xpY2UoMCwgaSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGkpXG4gICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsUGFydHMoeCwgTWF0aC5tYXgoMCwgcCArIGkgLSAxKSlbMF07IC8vIGxlc3MgdGhhbiAxeSFcbn1cbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICByZXR1cm4gZXhwb25lbnQgPCAwID8gXCIwLlwiICsgbmV3IEFycmF5KC1leHBvbmVudCkuam9pbihcIjBcIikgKyBjb2VmZmljaWVudFxuICAgICAgOiBjb2VmZmljaWVudC5sZW5ndGggPiBleHBvbmVudCArIDEgPyBjb2VmZmljaWVudC5zbGljZSgwLCBleHBvbmVudCArIDEpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShleHBvbmVudCArIDEpXG4gICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG59XG4iLCJpbXBvcnQgZm9ybWF0RGVjaW1hbCBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5pbXBvcnQgZm9ybWF0UHJlZml4QXV0byBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgZm9ybWF0Um91bmRlZCBmcm9tIFwiLi9mb3JtYXRSb3VuZGVkLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXCIlXCI6ICh4LCBwKSA9PiAoeCAqIDEwMCkudG9GaXhlZChwKSxcbiAgXCJiXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpLFxuICBcImNcIjogKHgpID0+IHggKyBcIlwiLFxuICBcImRcIjogZm9ybWF0RGVjaW1hbCxcbiAgXCJlXCI6ICh4LCBwKSA9PiB4LnRvRXhwb25lbnRpYWwocCksXG4gIFwiZlwiOiAoeCwgcCkgPT4geC50b0ZpeGVkKHApLFxuICBcImdcIjogKHgsIHApID0+IHgudG9QcmVjaXNpb24ocCksXG4gIFwib1wiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZyg4KSxcbiAgXCJwXCI6ICh4LCBwKSA9PiBmb3JtYXRSb3VuZGVkKHggKiAxMDAsIHApLFxuICBcInJcIjogZm9ybWF0Um91bmRlZCxcbiAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gIFwiWFwiOiAoeCkgPT4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSxcbiAgXCJ4XCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KVxufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cC5qc1wiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzLmpzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllci5qc1wiO1xuaW1wb3J0IGZvcm1hdFRyaW0gZnJvbSBcIi4vZm9ybWF0VHJpbS5qc1wiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzLmpzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcblxudmFyIG1hcCA9IEFycmF5LnByb3RvdHlwZS5tYXAsXG4gICAgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsb2NhbGUpIHtcbiAgdmFyIGdyb3VwID0gbG9jYWxlLmdyb3VwaW5nID09PSB1bmRlZmluZWQgfHwgbG9jYWxlLnRob3VzYW5kcyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXRHcm91cChtYXAuY2FsbChsb2NhbGUuZ3JvdXBpbmcsIE51bWJlciksIGxvY2FsZS50aG91c2FuZHMgKyBcIlwiKSxcbiAgICAgIGN1cnJlbmN5UHJlZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzBdICsgXCJcIixcbiAgICAgIGN1cnJlbmN5U3VmZml4ID0gbG9jYWxlLmN1cnJlbmN5ID09PSB1bmRlZmluZWQgPyBcIlwiIDogbG9jYWxlLmN1cnJlbmN5WzFdICsgXCJcIixcbiAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbCA9PT0gdW5kZWZpbmVkID8gXCIuXCIgOiBsb2NhbGUuZGVjaW1hbCArIFwiXCIsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA9PT0gdW5kZWZpbmVkID8gaWRlbnRpdHkgOiBmb3JtYXROdW1lcmFscyhtYXAuY2FsbChsb2NhbGUubnVtZXJhbHMsIFN0cmluZykpLFxuICAgICAgcGVyY2VudCA9IGxvY2FsZS5wZXJjZW50ID09PSB1bmRlZmluZWQgPyBcIiVcIiA6IGxvY2FsZS5wZXJjZW50ICsgXCJcIixcbiAgICAgIG1pbnVzID0gbG9jYWxlLm1pbnVzID09PSB1bmRlZmluZWQgPyBcIuKIklwiIDogbG9jYWxlLm1pbnVzICsgXCJcIixcbiAgICAgIG5hbiA9IGxvY2FsZS5uYW4gPT09IHVuZGVmaW5lZCA/IFwiTmFOXCIgOiBsb2NhbGUubmFuICsgXCJcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHJpbSA9IHNwZWNpZmllci50cmltLFxuICAgICAgICB0eXBlID0gc3BlY2lmaWVyLnR5cGU7XG5cbiAgICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICAgIGlmICh0eXBlID09PSBcIm5cIikgY29tbWEgPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBUaGUgXCJcIiB0eXBlLCBhbmQgYW55IGludmFsaWQgdHlwZSwgaXMgYW4gYWxpYXMgZm9yIFwiLjEyfmdcIi5cbiAgICBlbHNlIGlmICghZm9ybWF0VHlwZXNbdHlwZV0pIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkICYmIChwcmVjaXNpb24gPSAxMiksIHRyaW0gPSB0cnVlLCB0eXBlID0gXCJnXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgIC8vIEZvciBTSS1wcmVmaXgsIHRoZSBzdWZmaXggaXMgbGF6aWx5IGNvbXB1dGVkLlxuICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lQcmVmaXggOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgIHN1ZmZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVN1ZmZpeCA6IC9bJXBdLy50ZXN0KHR5cGUpID8gcGVyY2VudCA6IFwiXCI7XG5cbiAgICAvLyBXaGF0IGZvcm1hdCBmdW5jdGlvbiBzaG91bGQgd2UgdXNlP1xuICAgIC8vIElzIHRoaXMgYW4gaW50ZWdlciB0eXBlP1xuICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgdmFyIGZvcm1hdFR5cGUgPSBmb3JtYXRUeXBlc1t0eXBlXSxcbiAgICAgICAgbWF5YmVTdWZmaXggPSAvW2RlZmdwcnMlXS8udGVzdCh0eXBlKTtcblxuICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAvLyBvciBjbGFtcCB0aGUgc3BlY2lmaWVkIHByZWNpc2lvbiB0byB0aGUgc3VwcG9ydGVkIHJhbmdlLlxuICAgIC8vIEZvciBzaWduaWZpY2FudCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzEsIDIxXS5cbiAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyA2XG4gICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICA6IE1hdGgubWF4KDAsIE1hdGgubWluKDIwLCBwcmVjaXNpb24pKTtcblxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSkge1xuICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgIHZhbHVlU3VmZml4ID0gc3VmZml4LFxuICAgICAgICAgIGksIG4sIGM7XG5cbiAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IGZvcm1hdFR5cGUodmFsdWUpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gK3ZhbHVlO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgc2lnbi4gLTAgaXMgbm90IGxlc3MgdGhhbiAwLCBidXQgMSAvIC0wIGlzIVxuICAgICAgICB2YXIgdmFsdWVOZWdhdGl2ZSA9IHZhbHVlIDwgMCB8fCAxIC8gdmFsdWUgPCAwO1xuXG4gICAgICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgZm9ybWF0dGluZy5cbiAgICAgICAgdmFsdWUgPSBpc05hTih2YWx1ZSkgPyBuYW4gOiBmb3JtYXRUeXBlKE1hdGguYWJzKHZhbHVlKSwgcHJlY2lzaW9uKTtcblxuICAgICAgICAvLyBUcmltIGluc2lnbmlmaWNhbnQgemVyb3MuXG4gICAgICAgIGlmICh0cmltKSB2YWx1ZSA9IGZvcm1hdFRyaW0odmFsdWUpO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gYWZ0ZXIgZm9ybWF0dGluZywgYW5kIG5vIGV4cGxpY2l0IHBvc2l0aXZlIHNpZ24gaXMgcmVxdWVzdGVkLCBoaWRlIHRoZSBzaWduLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDAgJiYgc2lnbiAhPT0gXCIrXCIpIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBtaW51cykgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9ICh0eXBlID09PSBcInNcIiA/IHByZWZpeGVzWzggKyBwcmVmaXhFeHBvbmVudCAvIDNdIDogXCJcIikgKyB2YWx1ZVN1ZmZpeCArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIHRob3VzYW5kczogXCIsXCIsXG4gIGdyb3VwaW5nOiBbM10sXG4gIGN1cnJlbmN5OiBbXCIkXCIsIFwiXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgZm9ybWF0UHJlZml4ID0gbG9jYWxlLmZvcm1hdFByZWZpeDtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwKSB7XG4gIHJldHVybiBNYXRoLm1heCgwLCAtZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIG1heCkge1xuICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBudW1iZXIoeCkge1xuICByZXR1cm4gK3g7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHVuaXQgPSBbMCwgMV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGlzTmFOKGIpID8gTmFOIDogMC41KTtcbn1cblxuZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XG4gIHZhciB0O1xuICBpZiAoYSA+IGIpIHQgPSBhLCBhID0gYiwgYiA9IHQ7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG59XG5cbi8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcbiAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICByID0gbmV3IEFycmF5KGopLFxuICAgICAgaSA9IC0xO1xuXG4gIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIH1cblxuICB3aGlsZSAoKytpIDwgaikge1xuICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpID0gYmlzZWN0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xuICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcbiAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcbiAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICB1bmtub3duLFxuICAgICAgY2xhbXAgPSBpZGVudGl0eSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpO1xuICAgIGlmIChjbGFtcCAhPT0gaWRlbnRpdHkpIGNsYW1wID0gY2xhbXBlcihkb21haW5bMF0sIGRvbWFpbltuIC0gMV0pO1xuICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xuICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gQXJyYXkuZnJvbShfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gdHJ1ZSA6IGlkZW50aXR5LCByZXNjYWxlKCkpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cygpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKCkoaWRlbnRpdHksIGlkZW50aXR5KTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrRm9ybWF0KHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImltcG9ydCB7dGlja3MsIHRpY2tJbmNyZW1lbnR9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IHRpY2tGb3JtYXQgZnJvbSBcIi4vdGlja0Zvcm1hdC5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gbGluZWFyaXNoKHNjYWxlKSB7XG4gIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja0Zvcm1hdChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50LCBzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xuICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuXG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICB2YXIgaTAgPSAwO1xuICAgIHZhciBpMSA9IGQubGVuZ3RoIC0gMTtcbiAgICB2YXIgc3RhcnQgPSBkW2kwXTtcbiAgICB2YXIgc3RvcCA9IGRbaTFdO1xuICAgIHZhciBwcmVzdGVwO1xuICAgIHZhciBzdGVwO1xuICAgIHZhciBtYXhJdGVyID0gMTA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG4gICAgXG4gICAgd2hpbGUgKG1heEl0ZXItLSA+IDApIHtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgICBpZiAoc3RlcCA9PT0gcHJlc3RlcCkge1xuICAgICAgICBkW2kwXSA9IHN0YXJ0XG4gICAgICAgIGRbaTFdID0gc3RvcFxuICAgICAgICByZXR1cm4gZG9tYWluKGQpO1xuICAgICAgfSBlbHNlIGlmIChzdGVwID4gMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcDtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICAgIHN0b3AgPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHByZXN0ZXAgPSBzdGVwO1xuICAgIH1cblxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICByZXR1cm4gc2NhbGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpbmVhcigpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cygpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbGluZWFyKCkpO1xuICB9O1xuXG4gIGluaXRSYW5nZS5hcHBseShzY2FsZSwgYXJndW1lbnRzKTtcblxuICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbn1cbiIsImltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCB7IHJhbmdlLCBzY2FsZUxpbmVhciB9IGZyb20gJ2QzJztcbmltcG9ydCB7IEl0ZW1WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuZXhwb3J0IGNvbnN0IExlZGdlclZpZXdUeXBlID0gJ2xlZGdlcic7XG5leHBvcnQgY2xhc3MgTGVkZ2VyVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcbiAgICBjb25zdHJ1Y3RvcihsZWFmLCBwbHVnaW4pIHtcbiAgICAgICAgc3VwZXIobGVhZik7XG4gICAgICAgIHRoaXMucmVkcmF3ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGVudEVsID0gdGhpcy5jb250YWluZXJFbC5jaGlsZHJlblsxXTtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ2xlZGdlcjogUmVuZGVyaW5nIHByZXZpZXcgZm9yIGxlZGdlciBmaWxlJyk7XG4gICAgICAgICAgICBjb250ZW50RWwuZW1wdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBjb250ZW50RWwuY3JlYXRlRWwoJ3AnKTtcbiAgICAgICAgICAgIHAuc2V0VGV4dCgnSGVsbG8gd29ybGQgMicpO1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gY29udGVudEVsLmNyZWF0ZURpdigpO1xuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHRoaXMubWFrZVNpbXBsZUJhckQzKCkpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1ha2VTaW1wbGVCYXJEMyA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmVzc3ljb2RlLmNvbS9wb3N0cy9jcmVhdGUtc3BhcmtsaW5lLWNoYXJ0cy1kMy9cbiAgICAgICAgICAgIGNvbnN0IFdJRFRIID0gMTYwO1xuICAgICAgICAgICAgY29uc3QgSEVJR0hUID0gMzA7XG4gICAgICAgICAgICBjb25zdCBEQVRBX0NPVU5UID0gNDA7XG4gICAgICAgICAgICBjb25zdCBCQVJfV0lEVEggPSAoV0lEVEggLSBEQVRBX0NPVU5UKSAvIERBVEFfQ09VTlQ7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmFuZ2UoREFUQV9DT1VOVCkubWFwKChkKSA9PiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgICAgIGNvbnN0IHggPSBzY2FsZUxpbmVhcigpLmRvbWFpbihbMCwgREFUQV9DT1VOVF0pLnJhbmdlKFswLCBXSURUSF0pO1xuICAgICAgICAgICAgY29uc3QgeSA9IHNjYWxlTGluZWFyKCkuZG9tYWluKFswLCAxXSkucmFuZ2UoW0hFSUdIVCwgMF0pO1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gZDMuY3JlYXRlKCdzdmcnKS5hdHRyKCd3aWR0aCcsIFdJRFRIKS5hdHRyKCdoZWlnaHQnLCBIRUlHSFQpO1xuICAgICAgICAgICAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoJ2cnKTtcbiAgICAgICAgICAgIGcuc2VsZWN0QWxsKCcuYmFyJylcbiAgICAgICAgICAgICAgICAuZGF0YShkYXRhKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZCgncmVjdCcpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhcicpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ3gnLCAoZCwgaSkgPT4geChpKSlcbiAgICAgICAgICAgICAgICAuYXR0cigneScsIChkKSA9PiBIRUlHSFQgLSB5KGQpKVxuICAgICAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIEJBUl9XSURUSClcbiAgICAgICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgKGQpID0+IHkoZCkpXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnTWVkaXVtU2VhR3JlZW4nKTtcbiAgICAgICAgICAgIHJldHVybiBzdmcubm9kZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlbG9hZERhdGEgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBJbXBsZW1lbnRlZCcpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLnZhdWx0Lm9uKCdtb2RpZnknLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbGUucGF0aCA9PT0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGVkZ2VyRmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgICAgICB0aGlzLnJlZHJhdygpO1xuICAgIH1cbiAgICBnZXRWaWV3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIExlZGdlclZpZXdUeXBlO1xuICAgIH1cbiAgICBnZXREaXNwbGF5VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuICdMZWRnZXInO1xuICAgIH1cbiAgICBnZXRJY29uKCkge1xuICAgICAgICByZXR1cm4gJ2xlZGdlcic7XG4gICAgfVxufVxuIiwiY29uc3QgZGVmYXVsdFNldHRpbmdzID0ge1xuICAgIGN1cnJlbmN5U3ltYm9sOiAnJCcsXG4gICAgbGVkZ2VyRmlsZTogJ0xlZGdlci5tZCcsXG4gICAgaW5jbHVkZUZpbmFsTGluZUFtb3VudDogZmFsc2UsXG4gICAgZW5hYmxlTGVkZ2VyVmlzOiBmYWxzZSxcbn07XG5leHBvcnQgY29uc3Qgc2V0dGluZ3NXaXRoRGVmYXVsdHMgPSAoc2V0dGluZ3MpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRTZXR0aW5ncyksIHNldHRpbmdzKSk7XG4iLCJmdW5jdGlvbiBub29wKCkgeyB9XG5jb25zdCBpZGVudGl0eSA9IHggPT4geDtcbmZ1bmN0aW9uIGFzc2lnbih0YXIsIHNyYykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBmb3IgKGNvbnN0IGsgaW4gc3JjKVxuICAgICAgICB0YXJba10gPSBzcmNba107XG4gICAgcmV0dXJuIHRhcjtcbn1cbmZ1bmN0aW9uIGlzX3Byb21pc2UodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGFkZF9sb2NhdGlvbihlbGVtZW50LCBmaWxlLCBsaW5lLCBjb2x1bW4sIGNoYXIpIHtcbiAgICBlbGVtZW50Ll9fc3ZlbHRlX21ldGEgPSB7XG4gICAgICAgIGxvYzogeyBmaWxlLCBsaW5lLCBjb2x1bW4sIGNoYXIgfVxuICAgIH07XG59XG5mdW5jdGlvbiBydW4oZm4pIHtcbiAgICByZXR1cm4gZm4oKTtcbn1cbmZ1bmN0aW9uIGJsYW5rX29iamVjdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cbmZ1bmN0aW9uIHJ1bl9hbGwoZm5zKSB7XG4gICAgZm5zLmZvckVhY2gocnVuKTtcbn1cbmZ1bmN0aW9uIGlzX2Z1bmN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIHNhZmVfbm90X2VxdWFsKGEsIGIpIHtcbiAgICByZXR1cm4gYSAhPSBhID8gYiA9PSBiIDogYSAhPT0gYiB8fCAoKGEgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB8fCB0eXBlb2YgYSA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5mdW5jdGlvbiBub3RfZXF1YWwoYSwgYikge1xuICAgIHJldHVybiBhICE9IGEgPyBiID09IGIgOiBhICE9PSBiO1xufVxuZnVuY3Rpb24gaXNfZW1wdHkob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVfc3RvcmUoc3RvcmUsIG5hbWUpIHtcbiAgICBpZiAoc3RvcmUgIT0gbnVsbCAmJiB0eXBlb2Ygc3RvcmUuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7bmFtZX0nIGlzIG5vdCBhIHN0b3JlIHdpdGggYSAnc3Vic2NyaWJlJyBtZXRob2RgKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdWJzY3JpYmUoc3RvcmUsIC4uLmNhbGxiYWNrcykge1xuICAgIGlmIChzdG9yZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBub29wO1xuICAgIH1cbiAgICBjb25zdCB1bnN1YiA9IHN0b3JlLnN1YnNjcmliZSguLi5jYWxsYmFja3MpO1xuICAgIHJldHVybiB1bnN1Yi51bnN1YnNjcmliZSA/ICgpID0+IHVuc3ViLnVuc3Vic2NyaWJlKCkgOiB1bnN1Yjtcbn1cbmZ1bmN0aW9uIGdldF9zdG9yZV92YWx1ZShzdG9yZSkge1xuICAgIGxldCB2YWx1ZTtcbiAgICBzdWJzY3JpYmUoc3RvcmUsIF8gPT4gdmFsdWUgPSBfKSgpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGNvbXBvbmVudF9zdWJzY3JpYmUoY29tcG9uZW50LCBzdG9yZSwgY2FsbGJhY2spIHtcbiAgICBjb21wb25lbnQuJCQub25fZGVzdHJveS5wdXNoKHN1YnNjcmliZShzdG9yZSwgY2FsbGJhY2spKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZV9zbG90KGRlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZm4pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBzbG90X2N0eCA9IGdldF9zbG90X2NvbnRleHQoZGVmaW5pdGlvbiwgY3R4LCAkJHNjb3BlLCBmbik7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uWzBdKHNsb3RfY3R4KTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRfc2xvdF9jb250ZXh0KGRlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZm4pIHtcbiAgICByZXR1cm4gZGVmaW5pdGlvblsxXSAmJiBmblxuICAgICAgICA/IGFzc2lnbigkJHNjb3BlLmN0eC5zbGljZSgpLCBkZWZpbml0aW9uWzFdKGZuKGN0eCkpKVxuICAgICAgICA6ICQkc2NvcGUuY3R4O1xufVxuZnVuY3Rpb24gZ2V0X3Nsb3RfY2hhbmdlcyhkZWZpbml0aW9uLCAkJHNjb3BlLCBkaXJ0eSwgZm4pIHtcbiAgICBpZiAoZGVmaW5pdGlvblsyXSAmJiBmbikge1xuICAgICAgICBjb25zdCBsZXRzID0gZGVmaW5pdGlvblsyXShmbihkaXJ0eSkpO1xuICAgICAgICBpZiAoJCRzY29wZS5kaXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbGV0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxldHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWF4KCQkc2NvcGUuZGlydHkubGVuZ3RoLCBsZXRzLmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkW2ldID0gJCRzY29wZS5kaXJ0eVtpXSB8IGxldHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkJHNjb3BlLmRpcnR5IHwgbGV0cztcbiAgICB9XG4gICAgcmV0dXJuICQkc2NvcGUuZGlydHk7XG59XG5mdW5jdGlvbiB1cGRhdGVfc2xvdChzbG90LCBzbG90X2RlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZGlydHksIGdldF9zbG90X2NoYW5nZXNfZm4sIGdldF9zbG90X2NvbnRleHRfZm4pIHtcbiAgICBjb25zdCBzbG90X2NoYW5nZXMgPSBnZXRfc2xvdF9jaGFuZ2VzKHNsb3RfZGVmaW5pdGlvbiwgJCRzY29wZSwgZGlydHksIGdldF9zbG90X2NoYW5nZXNfZm4pO1xuICAgIGlmIChzbG90X2NoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qgc2xvdF9jb250ZXh0ID0gZ2V0X3Nsb3RfY29udGV4dChzbG90X2RlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZ2V0X3Nsb3RfY29udGV4dF9mbik7XG4gICAgICAgIHNsb3QucChzbG90X2NvbnRleHQsIHNsb3RfY2hhbmdlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gdXBkYXRlX3Nsb3Rfc3ByZWFkKHNsb3QsIHNsb3RfZGVmaW5pdGlvbiwgY3R4LCAkJHNjb3BlLCBkaXJ0eSwgZ2V0X3Nsb3RfY2hhbmdlc19mbiwgZ2V0X3Nsb3Rfc3ByZWFkX2NoYW5nZXNfZm4sIGdldF9zbG90X2NvbnRleHRfZm4pIHtcbiAgICBjb25zdCBzbG90X2NoYW5nZXMgPSBnZXRfc2xvdF9zcHJlYWRfY2hhbmdlc19mbihkaXJ0eSkgfCBnZXRfc2xvdF9jaGFuZ2VzKHNsb3RfZGVmaW5pdGlvbiwgJCRzY29wZSwgZGlydHksIGdldF9zbG90X2NoYW5nZXNfZm4pO1xuICAgIGlmIChzbG90X2NoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qgc2xvdF9jb250ZXh0ID0gZ2V0X3Nsb3RfY29udGV4dChzbG90X2RlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZ2V0X3Nsb3RfY29udGV4dF9mbik7XG4gICAgICAgIHNsb3QucChzbG90X2NvbnRleHQsIHNsb3RfY2hhbmdlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZXhjbHVkZV9pbnRlcm5hbF9wcm9wcyhwcm9wcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgayBpbiBwcm9wcylcbiAgICAgICAgaWYgKGtbMF0gIT09ICckJylcbiAgICAgICAgICAgIHJlc3VsdFtrXSA9IHByb3BzW2tdO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBjb21wdXRlX3Jlc3RfcHJvcHMocHJvcHMsIGtleXMpIHtcbiAgICBjb25zdCByZXN0ID0ge307XG4gICAga2V5cyA9IG5ldyBTZXQoa2V5cyk7XG4gICAgZm9yIChjb25zdCBrIGluIHByb3BzKVxuICAgICAgICBpZiAoIWtleXMuaGFzKGspICYmIGtbMF0gIT09ICckJylcbiAgICAgICAgICAgIHJlc3Rba10gPSBwcm9wc1trXTtcbiAgICByZXR1cm4gcmVzdDtcbn1cbmZ1bmN0aW9uIGNvbXB1dGVfc2xvdHMoc2xvdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzbG90cykge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBvbmNlKGZuKSB7XG4gICAgbGV0IHJhbiA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICBpZiAocmFuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICByYW4gPSB0cnVlO1xuICAgICAgICBmbi5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgIH07XG59XG5mdW5jdGlvbiBudWxsX3RvX2VtcHR5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlO1xufVxuZnVuY3Rpb24gc2V0X3N0b3JlX3ZhbHVlKHN0b3JlLCByZXQsIHZhbHVlID0gcmV0KSB7XG4gICAgc3RvcmUuc2V0KHZhbHVlKTtcbiAgICByZXR1cm4gcmV0O1xufVxuY29uc3QgaGFzX3Byb3AgPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbmZ1bmN0aW9uIGFjdGlvbl9kZXN0cm95ZXIoYWN0aW9uX3Jlc3VsdCkge1xuICAgIHJldHVybiBhY3Rpb25fcmVzdWx0ICYmIGlzX2Z1bmN0aW9uKGFjdGlvbl9yZXN1bHQuZGVzdHJveSkgPyBhY3Rpb25fcmVzdWx0LmRlc3Ryb3kgOiBub29wO1xufVxuXG5jb25zdCBpc19jbGllbnQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbmxldCBub3cgPSBpc19jbGllbnRcbiAgICA/ICgpID0+IHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKVxuICAgIDogKCkgPT4gRGF0ZS5ub3coKTtcbmxldCByYWYgPSBpc19jbGllbnQgPyBjYiA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpIDogbm9vcDtcbi8vIHVzZWQgaW50ZXJuYWxseSBmb3IgdGVzdGluZ1xuZnVuY3Rpb24gc2V0X25vdyhmbikge1xuICAgIG5vdyA9IGZuO1xufVxuZnVuY3Rpb24gc2V0X3JhZihmbikge1xuICAgIHJhZiA9IGZuO1xufVxuXG5jb25zdCB0YXNrcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIHJ1bl90YXNrcyhub3cpIHtcbiAgICB0YXNrcy5mb3JFYWNoKHRhc2sgPT4ge1xuICAgICAgICBpZiAoIXRhc2suYyhub3cpKSB7XG4gICAgICAgICAgICB0YXNrcy5kZWxldGUodGFzayk7XG4gICAgICAgICAgICB0YXNrLmYoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0YXNrcy5zaXplICE9PSAwKVxuICAgICAgICByYWYocnVuX3Rhc2tzKTtcbn1cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seSFcbiAqL1xuZnVuY3Rpb24gY2xlYXJfbG9vcHMoKSB7XG4gICAgdGFza3MuY2xlYXIoKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB0YXNrIHRoYXQgcnVucyBvbiBlYWNoIHJhZiBmcmFtZVxuICogdW50aWwgaXQgcmV0dXJucyBhIGZhbHN5IHZhbHVlIG9yIGlzIGFib3J0ZWRcbiAqL1xuZnVuY3Rpb24gbG9vcChjYWxsYmFjaykge1xuICAgIGxldCB0YXNrO1xuICAgIGlmICh0YXNrcy5zaXplID09PSAwKVxuICAgICAgICByYWYocnVuX3Rhc2tzKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBwcm9taXNlOiBuZXcgUHJvbWlzZShmdWxmaWxsID0+IHtcbiAgICAgICAgICAgIHRhc2tzLmFkZCh0YXNrID0geyBjOiBjYWxsYmFjaywgZjogZnVsZmlsbCB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIGFib3J0KCkge1xuICAgICAgICAgICAgdGFza3MuZGVsZXRlKHRhc2spO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKHRhcmdldCwgbm9kZSkge1xuICAgIHRhcmdldC5hcHBlbmRDaGlsZChub2RlKTtcbn1cbmZ1bmN0aW9uIGluc2VydCh0YXJnZXQsIG5vZGUsIGFuY2hvcikge1xuICAgIHRhcmdldC5pbnNlcnRCZWZvcmUobm9kZSwgYW5jaG9yIHx8IG51bGwpO1xufVxuZnVuY3Rpb24gZGV0YWNoKG5vZGUpIHtcbiAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5mdW5jdGlvbiBkZXN0cm95X2VhY2goaXRlcmF0aW9ucywgZGV0YWNoaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChpdGVyYXRpb25zW2ldKVxuICAgICAgICAgICAgaXRlcmF0aW9uc1tpXS5kKGRldGFjaGluZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XG59XG5mdW5jdGlvbiBlbGVtZW50X2lzKG5hbWUsIGlzKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSwgeyBpcyB9KTtcbn1cbmZ1bmN0aW9uIG9iamVjdF93aXRob3V0X3Byb3BlcnRpZXMob2JqLCBleGNsdWRlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge307XG4gICAgZm9yIChjb25zdCBrIGluIG9iaikge1xuICAgICAgICBpZiAoaGFzX3Byb3Aob2JqLCBrKVxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgJiYgZXhjbHVkZS5pbmRleE9mKGspID09PSAtMSkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGFyZ2V0W2tdID0gb2JqW2tdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBzdmdfZWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBuYW1lKTtcbn1cbmZ1bmN0aW9uIHRleHQoZGF0YSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhKTtcbn1cbmZ1bmN0aW9uIHNwYWNlKCkge1xuICAgIHJldHVybiB0ZXh0KCcgJyk7XG59XG5mdW5jdGlvbiBlbXB0eSgpIHtcbiAgICByZXR1cm4gdGV4dCgnJyk7XG59XG5mdW5jdGlvbiBsaXN0ZW4obm9kZSwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcHJldmVudF9kZWZhdWx0KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gc3RvcF9wcm9wYWdhdGlvbihmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH07XG59XG5mdW5jdGlvbiBzZWxmKGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMpXG4gICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gYXR0cihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgZWxzZSBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSAhPT0gdmFsdWUpXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpO1xufVxuZnVuY3Rpb24gc2V0X2F0dHJpYnV0ZXMobm9kZSwgYXR0cmlidXRlcykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG5vZGUuX19wcm90b19fKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzW2tleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuY3NzVGV4dCA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdfX3ZhbHVlJykge1xuICAgICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGVba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkZXNjcmlwdG9yc1trZXldICYmIGRlc2NyaXB0b3JzW2tleV0uc2V0KSB7XG4gICAgICAgICAgICBub2RlW2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhdHRyKG5vZGUsIGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHNldF9zdmdfYXR0cmlidXRlcyhub2RlLCBhdHRyaWJ1dGVzKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gYXR0cmlidXRlcykge1xuICAgICAgICBhdHRyKG5vZGUsIGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzZXRfY3VzdG9tX2VsZW1lbnRfZGF0YShub2RlLCBwcm9wLCB2YWx1ZSkge1xuICAgIGlmIChwcm9wIGluIG5vZGUpIHtcbiAgICAgICAgbm9kZVtwcm9wXSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYXR0cihub2RlLCBwcm9wLCB2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24geGxpbmtfYXR0cihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGVOUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycsIGF0dHJpYnV0ZSwgdmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0X2JpbmRpbmdfZ3JvdXBfdmFsdWUoZ3JvdXAsIF9fdmFsdWUsIGNoZWNrZWQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBTZXQoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChncm91cFtpXS5jaGVja2VkKVxuICAgICAgICAgICAgdmFsdWUuYWRkKGdyb3VwW2ldLl9fdmFsdWUpO1xuICAgIH1cbiAgICBpZiAoIWNoZWNrZWQpIHtcbiAgICAgICAgdmFsdWUuZGVsZXRlKF9fdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZSk7XG59XG5mdW5jdGlvbiB0b19udW1iZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICcnID8gbnVsbCA6ICt2YWx1ZTtcbn1cbmZ1bmN0aW9uIHRpbWVfcmFuZ2VzX3RvX2FycmF5KHJhbmdlcykge1xuICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5nZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyYXkucHVzaCh7IHN0YXJ0OiByYW5nZXMuc3RhcnQoaSksIGVuZDogcmFuZ2VzLmVuZChpKSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xufVxuZnVuY3Rpb24gY2hpbGRyZW4oZWxlbWVudCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuY2hpbGROb2Rlcyk7XG59XG5mdW5jdGlvbiBjbGFpbV9lbGVtZW50KG5vZGVzLCBuYW1lLCBhdHRyaWJ1dGVzLCBzdmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIGxldCBqID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZSA9IFtdO1xuICAgICAgICAgICAgd2hpbGUgKGogPCBub2RlLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyaWJ1dGVzW2orK107XG4gICAgICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzW2F0dHJpYnV0ZS5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZW1vdmUucHVzaChhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCByZW1vdmUubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShyZW1vdmVba10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3ZnID8gc3ZnX2VsZW1lbnQobmFtZSkgOiBlbGVtZW50KG5hbWUpO1xufVxuZnVuY3Rpb24gY2xhaW1fdGV4dChub2RlcywgZGF0YSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICAgICAgbm9kZS5kYXRhID0gJycgKyBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzLnNwbGljZShpLCAxKVswXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGV4dChkYXRhKTtcbn1cbmZ1bmN0aW9uIGNsYWltX3NwYWNlKG5vZGVzKSB7XG4gICAgcmV0dXJuIGNsYWltX3RleHQobm9kZXMsICcgJyk7XG59XG5mdW5jdGlvbiBzZXRfZGF0YSh0ZXh0LCBkYXRhKSB7XG4gICAgZGF0YSA9ICcnICsgZGF0YTtcbiAgICBpZiAodGV4dC53aG9sZVRleHQgIT09IGRhdGEpXG4gICAgICAgIHRleHQuZGF0YSA9IGRhdGE7XG59XG5mdW5jdGlvbiBzZXRfaW5wdXRfdmFsdWUoaW5wdXQsIHZhbHVlKSB7XG4gICAgaW5wdXQudmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHNldF9pbnB1dF90eXBlKGlucHV0LCB0eXBlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaW5wdXQudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiBzZXRfc3R5bGUobm9kZSwga2V5LCB2YWx1ZSwgaW1wb3J0YW50KSB7XG4gICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlLCBpbXBvcnRhbnQgPyAnaW1wb3J0YW50JyA6ICcnKTtcbn1cbmZ1bmN0aW9uIHNlbGVjdF9vcHRpb24oc2VsZWN0LCB2YWx1ZSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0Lm9wdGlvbnNbaV07XG4gICAgICAgIGlmIChvcHRpb24uX192YWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBzZWxlY3Rfb3B0aW9ucyhzZWxlY3QsIHZhbHVlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Qub3B0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3Qub3B0aW9uc1tpXTtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gfnZhbHVlLmluZGV4T2Yob3B0aW9uLl9fdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNlbGVjdF92YWx1ZShzZWxlY3QpIHtcbiAgICBjb25zdCBzZWxlY3RlZF9vcHRpb24gPSBzZWxlY3QucXVlcnlTZWxlY3RvcignOmNoZWNrZWQnKSB8fCBzZWxlY3Qub3B0aW9uc1swXTtcbiAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW9uICYmIHNlbGVjdGVkX29wdGlvbi5fX3ZhbHVlO1xufVxuZnVuY3Rpb24gc2VsZWN0X211bHRpcGxlX3ZhbHVlKHNlbGVjdCkge1xuICAgIHJldHVybiBbXS5tYXAuY2FsbChzZWxlY3QucXVlcnlTZWxlY3RvckFsbCgnOmNoZWNrZWQnKSwgb3B0aW9uID0+IG9wdGlvbi5fX3ZhbHVlKTtcbn1cbi8vIHVuZm9ydHVuYXRlbHkgdGhpcyBjYW4ndCBiZSBhIGNvbnN0YW50IGFzIHRoYXQgd291bGRuJ3QgYmUgdHJlZS1zaGFrZWFibGVcbi8vIHNvIHdlIGNhY2hlIHRoZSByZXN1bHQgaW5zdGVhZFxubGV0IGNyb3Nzb3JpZ2luO1xuZnVuY3Rpb24gaXNfY3Jvc3NvcmlnaW4oKSB7XG4gICAgaWYgKGNyb3Nzb3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY3Jvc3NvcmlnaW4gPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdm9pZCB3aW5kb3cucGFyZW50LmRvY3VtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgY3Jvc3NvcmlnaW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcm9zc29yaWdpbjtcbn1cbmZ1bmN0aW9uIGFkZF9yZXNpemVfbGlzdGVuZXIobm9kZSwgZm4pIHtcbiAgICBjb25zdCBjb21wdXRlZF9zdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobm9kZSk7XG4gICAgaWYgKGNvbXB1dGVkX3N0eWxlLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgICBub2RlLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICB9XG4gICAgY29uc3QgaWZyYW1lID0gZWxlbWVudCgnaWZyYW1lJyk7XG4gICAgaWZyYW1lLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyAnICtcbiAgICAgICAgJ292ZXJmbG93OiBoaWRkZW47IGJvcmRlcjogMDsgb3BhY2l0eTogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IC0xOycpO1xuICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcbiAgICBpZnJhbWUudGFiSW5kZXggPSAtMTtcbiAgICBjb25zdCBjcm9zc29yaWdpbiA9IGlzX2Nyb3Nzb3JpZ2luKCk7XG4gICAgbGV0IHVuc3Vic2NyaWJlO1xuICAgIGlmIChjcm9zc29yaWdpbikge1xuICAgICAgICBpZnJhbWUuc3JjID0gXCJkYXRhOnRleHQvaHRtbCw8c2NyaXB0Pm9ucmVzaXplPWZ1bmN0aW9uKCl7cGFyZW50LnBvc3RNZXNzYWdlKDAsJyonKX08L3NjcmlwdD5cIjtcbiAgICAgICAgdW5zdWJzY3JpYmUgPSBsaXN0ZW4od2luZG93LCAnbWVzc2FnZScsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gaWZyYW1lLmNvbnRlbnRXaW5kb3cpXG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZnJhbWUuc3JjID0gJ2Fib3V0OmJsYW5rJztcbiAgICAgICAgaWZyYW1lLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gbGlzdGVuKGlmcmFtZS5jb250ZW50V2luZG93LCAncmVzaXplJywgZm4pO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBhcHBlbmQobm9kZSwgaWZyYW1lKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoY3Jvc3NvcmlnaW4pIHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5zdWJzY3JpYmUgJiYgaWZyYW1lLmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGV0YWNoKGlmcmFtZSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHRvZ2dsZV9jbGFzcyhlbGVtZW50LCBuYW1lLCB0b2dnbGUpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdFt0b2dnbGUgPyAnYWRkJyA6ICdyZW1vdmUnXShuYW1lKTtcbn1cbmZ1bmN0aW9uIGN1c3RvbV9ldmVudCh0eXBlLCBkZXRhaWwpIHtcbiAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50Jyk7XG4gICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlLCBkZXRhaWwpO1xuICAgIHJldHVybiBlO1xufVxuZnVuY3Rpb24gcXVlcnlfc2VsZWN0b3JfYWxsKHNlbGVjdG9yLCBwYXJlbnQgPSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20ocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTtcbn1cbmNsYXNzIEh0bWxUYWcge1xuICAgIGNvbnN0cnVjdG9yKGFuY2hvciA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5hID0gYW5jaG9yO1xuICAgICAgICB0aGlzLmUgPSB0aGlzLm4gPSBudWxsO1xuICAgIH1cbiAgICBtKGh0bWwsIHRhcmdldCwgYW5jaG9yID0gbnVsbCkge1xuICAgICAgICBpZiAoIXRoaXMuZSkge1xuICAgICAgICAgICAgdGhpcy5lID0gZWxlbWVudCh0YXJnZXQubm9kZU5hbWUpO1xuICAgICAgICAgICAgdGhpcy50ID0gdGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5oKGh0bWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaShhbmNob3IpO1xuICAgIH1cbiAgICBoKGh0bWwpIHtcbiAgICAgICAgdGhpcy5lLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICAgIHRoaXMubiA9IEFycmF5LmZyb20odGhpcy5lLmNoaWxkTm9kZXMpO1xuICAgIH1cbiAgICBpKGFuY2hvcikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubi5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgaW5zZXJ0KHRoaXMudCwgdGhpcy5uW2ldLCBhbmNob3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHAoaHRtbCkge1xuICAgICAgICB0aGlzLmQoKTtcbiAgICAgICAgdGhpcy5oKGh0bWwpO1xuICAgICAgICB0aGlzLmkodGhpcy5hKTtcbiAgICB9XG4gICAgZCgpIHtcbiAgICAgICAgdGhpcy5uLmZvckVhY2goZGV0YWNoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhdHRyaWJ1dGVfdG9fb2JqZWN0KGF0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJlc3VsdFthdHRyaWJ1dGUubmFtZV0gPSBhdHRyaWJ1dGUudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRfY3VzdG9tX2VsZW1lbnRzX3Nsb3RzKGVsZW1lbnQpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBlbGVtZW50LmNoaWxkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICByZXN1bHRbbm9kZS5zbG90IHx8ICdkZWZhdWx0J10gPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IGFjdGl2ZV9kb2NzID0gbmV3IFNldCgpO1xubGV0IGFjdGl2ZSA9IDA7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGFya3NreWFwcC9zdHJpbmctaGFzaC9ibG9iL21hc3Rlci9pbmRleC5qc1xuZnVuY3Rpb24gaGFzaChzdHIpIHtcbiAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgbGV0IGkgPSBzdHIubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pXG4gICAgICAgIGhhc2ggPSAoKGhhc2ggPDwgNSkgLSBoYXNoKSBeIHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBoYXNoID4+PiAwO1xufVxuZnVuY3Rpb24gY3JlYXRlX3J1bGUobm9kZSwgYSwgYiwgZHVyYXRpb24sIGRlbGF5LCBlYXNlLCBmbiwgdWlkID0gMCkge1xuICAgIGNvbnN0IHN0ZXAgPSAxNi42NjYgLyBkdXJhdGlvbjtcbiAgICBsZXQga2V5ZnJhbWVzID0gJ3tcXG4nO1xuICAgIGZvciAobGV0IHAgPSAwOyBwIDw9IDE7IHAgKz0gc3RlcCkge1xuICAgICAgICBjb25zdCB0ID0gYSArIChiIC0gYSkgKiBlYXNlKHApO1xuICAgICAgICBrZXlmcmFtZXMgKz0gcCAqIDEwMCArIGAleyR7Zm4odCwgMSAtIHQpfX1cXG5gO1xuICAgIH1cbiAgICBjb25zdCBydWxlID0ga2V5ZnJhbWVzICsgYDEwMCUgeyR7Zm4oYiwgMSAtIGIpfX1cXG59YDtcbiAgICBjb25zdCBuYW1lID0gYF9fc3ZlbHRlXyR7aGFzaChydWxlKX1fJHt1aWR9YDtcbiAgICBjb25zdCBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgYWN0aXZlX2RvY3MuYWRkKGRvYyk7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IGRvYy5fX3N2ZWx0ZV9zdHlsZXNoZWV0IHx8IChkb2MuX19zdmVsdGVfc3R5bGVzaGVldCA9IGRvYy5oZWFkLmFwcGVuZENoaWxkKGVsZW1lbnQoJ3N0eWxlJykpLnNoZWV0KTtcbiAgICBjb25zdCBjdXJyZW50X3J1bGVzID0gZG9jLl9fc3ZlbHRlX3J1bGVzIHx8IChkb2MuX19zdmVsdGVfcnVsZXMgPSB7fSk7XG4gICAgaWYgKCFjdXJyZW50X3J1bGVzW25hbWVdKSB7XG4gICAgICAgIGN1cnJlbnRfcnVsZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoYEBrZXlmcmFtZXMgJHtuYW1lfSAke3J1bGV9YCwgc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgIH1cbiAgICBjb25zdCBhbmltYXRpb24gPSBub2RlLnN0eWxlLmFuaW1hdGlvbiB8fCAnJztcbiAgICBub2RlLnN0eWxlLmFuaW1hdGlvbiA9IGAke2FuaW1hdGlvbiA/IGAke2FuaW1hdGlvbn0sIGAgOiAnJ30ke25hbWV9ICR7ZHVyYXRpb259bXMgbGluZWFyICR7ZGVsYXl9bXMgMSBib3RoYDtcbiAgICBhY3RpdmUgKz0gMTtcbiAgICByZXR1cm4gbmFtZTtcbn1cbmZ1bmN0aW9uIGRlbGV0ZV9ydWxlKG5vZGUsIG5hbWUpIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IChub2RlLnN0eWxlLmFuaW1hdGlvbiB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgY29uc3QgbmV4dCA9IHByZXZpb3VzLmZpbHRlcihuYW1lXG4gICAgICAgID8gYW5pbSA9PiBhbmltLmluZGV4T2YobmFtZSkgPCAwIC8vIHJlbW92ZSBzcGVjaWZpYyBhbmltYXRpb25cbiAgICAgICAgOiBhbmltID0+IGFuaW0uaW5kZXhPZignX19zdmVsdGUnKSA9PT0gLTEgLy8gcmVtb3ZlIGFsbCBTdmVsdGUgYW5pbWF0aW9uc1xuICAgICk7XG4gICAgY29uc3QgZGVsZXRlZCA9IHByZXZpb3VzLmxlbmd0aCAtIG5leHQubGVuZ3RoO1xuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgIG5vZGUuc3R5bGUuYW5pbWF0aW9uID0gbmV4dC5qb2luKCcsICcpO1xuICAgICAgICBhY3RpdmUgLT0gZGVsZXRlZDtcbiAgICAgICAgaWYgKCFhY3RpdmUpXG4gICAgICAgICAgICBjbGVhcl9ydWxlcygpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNsZWFyX3J1bGVzKCkge1xuICAgIHJhZigoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGFjdGl2ZV9kb2NzLmZvckVhY2goZG9jID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBkb2MuX19zdmVsdGVfc3R5bGVzaGVldDtcbiAgICAgICAgICAgIGxldCBpID0gc3R5bGVzaGVldC5jc3NSdWxlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKVxuICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuZGVsZXRlUnVsZShpKTtcbiAgICAgICAgICAgIGRvYy5fX3N2ZWx0ZV9ydWxlcyA9IHt9O1xuICAgICAgICB9KTtcbiAgICAgICAgYWN0aXZlX2RvY3MuY2xlYXIoKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2FuaW1hdGlvbihub2RlLCBmcm9tLCBmbiwgcGFyYW1zKSB7XG4gICAgaWYgKCFmcm9tKVxuICAgICAgICByZXR1cm4gbm9vcDtcbiAgICBjb25zdCB0byA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGZyb20ubGVmdCA9PT0gdG8ubGVmdCAmJiBmcm9tLnJpZ2h0ID09PSB0by5yaWdodCAmJiBmcm9tLnRvcCA9PT0gdG8udG9wICYmIGZyb20uYm90dG9tID09PSB0by5ib3R0b20pXG4gICAgICAgIHJldHVybiBub29wO1xuICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIFxuICAgIC8vIEB0cy1pZ25vcmUgdG9kbzogc2hvdWxkIHRoaXMgYmUgc2VwYXJhdGVkIGZyb20gZGVzdHJ1Y3R1cmluZz8gT3Igc3RhcnQvZW5kIGFkZGVkIHRvIHB1YmxpYyBhcGkgYW5kIGRvY3VtZW50YXRpb24/XG4gICAgc3RhcnQ6IHN0YXJ0X3RpbWUgPSBub3coKSArIGRlbGF5LCBcbiAgICAvLyBAdHMtaWdub3JlIHRvZG86XG4gICAgZW5kID0gc3RhcnRfdGltZSArIGR1cmF0aW9uLCB0aWNrID0gbm9vcCwgY3NzIH0gPSBmbihub2RlLCB7IGZyb20sIHRvIH0sIHBhcmFtcyk7XG4gICAgbGV0IHJ1bm5pbmcgPSB0cnVlO1xuICAgIGxldCBzdGFydGVkID0gZmFsc2U7XG4gICAgbGV0IG5hbWU7XG4gICAgZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgIGlmIChjc3MpIHtcbiAgICAgICAgICAgIG5hbWUgPSBjcmVhdGVfcnVsZShub2RlLCAwLCAxLCBkdXJhdGlvbiwgZGVsYXksIGVhc2luZywgY3NzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlbGF5KSB7XG4gICAgICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICBpZiAoY3NzKVxuICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSwgbmFtZSk7XG4gICAgICAgIHJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgbG9vcChub3cgPT4ge1xuICAgICAgICBpZiAoIXN0YXJ0ZWQgJiYgbm93ID49IHN0YXJ0X3RpbWUpIHtcbiAgICAgICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydGVkICYmIG5vdyA+PSBlbmQpIHtcbiAgICAgICAgICAgIHRpY2soMSwgMCk7XG4gICAgICAgICAgICBzdG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFydW5uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBub3cgLSBzdGFydF90aW1lO1xuICAgICAgICAgICAgY29uc3QgdCA9IDAgKyAxICogZWFzaW5nKHAgLyBkdXJhdGlvbik7XG4gICAgICAgICAgICB0aWNrKHQsIDEgLSB0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBzdGFydCgpO1xuICAgIHRpY2soMCwgMSk7XG4gICAgcmV0dXJuIHN0b3A7XG59XG5mdW5jdGlvbiBmaXhfcG9zaXRpb24obm9kZSkge1xuICAgIGNvbnN0IHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcbiAgICBpZiAoc3R5bGUucG9zaXRpb24gIT09ICdhYnNvbHV0ZScgJiYgc3R5bGUucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzdHlsZTtcbiAgICAgICAgY29uc3QgYSA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBub2RlLnN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgICAgIG5vZGUuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBhZGRfdHJhbnNmb3JtKG5vZGUsIGEpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZF90cmFuc2Zvcm0obm9kZSwgYSkge1xuICAgIGNvbnN0IGIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChhLmxlZnQgIT09IGIubGVmdCB8fCBhLnRvcCAhPT0gYi50b3ApIHtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKG5vZGUpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBzdHlsZS50cmFuc2Zvcm0gPT09ICdub25lJyA/ICcnIDogc3R5bGUudHJhbnNmb3JtO1xuICAgICAgICBub2RlLnN0eWxlLnRyYW5zZm9ybSA9IGAke3RyYW5zZm9ybX0gdHJhbnNsYXRlKCR7YS5sZWZ0IC0gYi5sZWZ0fXB4LCAke2EudG9wIC0gYi50b3B9cHgpYDtcbiAgICB9XG59XG5cbmxldCBjdXJyZW50X2NvbXBvbmVudDtcbmZ1bmN0aW9uIHNldF9jdXJyZW50X2NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICBjdXJyZW50X2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIGdldF9jdXJyZW50X2NvbXBvbmVudCgpIHtcbiAgICBpZiAoIWN1cnJlbnRfY29tcG9uZW50KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIGNhbGxlZCBvdXRzaWRlIGNvbXBvbmVudCBpbml0aWFsaXphdGlvbicpO1xuICAgIHJldHVybiBjdXJyZW50X2NvbXBvbmVudDtcbn1cbmZ1bmN0aW9uIGJlZm9yZVVwZGF0ZShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmJlZm9yZV91cGRhdGUucHVzaChmbik7XG59XG5mdW5jdGlvbiBvbk1vdW50KGZuKSB7XG4gICAgZ2V0X2N1cnJlbnRfY29tcG9uZW50KCkuJCQub25fbW91bnQucHVzaChmbik7XG59XG5mdW5jdGlvbiBhZnRlclVwZGF0ZShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmFmdGVyX3VwZGF0ZS5wdXNoKGZuKTtcbn1cbmZ1bmN0aW9uIG9uRGVzdHJveShmbikge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLm9uX2Rlc3Ryb3kucHVzaChmbik7XG59XG5mdW5jdGlvbiBjcmVhdGVFdmVudERpc3BhdGNoZXIoKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gZ2V0X2N1cnJlbnRfY29tcG9uZW50KCk7XG4gICAgcmV0dXJuICh0eXBlLCBkZXRhaWwpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gY29tcG9uZW50LiQkLmNhbGxiYWNrc1t0eXBlXTtcbiAgICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICAgICAgLy8gVE9ETyBhcmUgdGhlcmUgc2l0dWF0aW9ucyB3aGVyZSBldmVudHMgY291bGQgYmUgZGlzcGF0Y2hlZFxuICAgICAgICAgICAgLy8gaW4gYSBzZXJ2ZXIgKG5vbi1ET00pIGVudmlyb25tZW50P1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBjdXN0b21fZXZlbnQodHlwZSwgZGV0YWlsKTtcbiAgICAgICAgICAgIGNhbGxiYWNrcy5zbGljZSgpLmZvckVhY2goZm4gPT4ge1xuICAgICAgICAgICAgICAgIGZuLmNhbGwoY29tcG9uZW50LCBldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBzZXRDb250ZXh0KGtleSwgY29udGV4dCkge1xuICAgIGdldF9jdXJyZW50X2NvbXBvbmVudCgpLiQkLmNvbnRleHQuc2V0KGtleSwgY29udGV4dCk7XG59XG5mdW5jdGlvbiBnZXRDb250ZXh0KGtleSkge1xuICAgIHJldHVybiBnZXRfY3VycmVudF9jb21wb25lbnQoKS4kJC5jb250ZXh0LmdldChrZXkpO1xufVxuZnVuY3Rpb24gaGFzQ29udGV4dChrZXkpIHtcbiAgICByZXR1cm4gZ2V0X2N1cnJlbnRfY29tcG9uZW50KCkuJCQuY29udGV4dC5oYXMoa2V5KTtcbn1cbi8vIFRPRE8gZmlndXJlIG91dCBpZiB3ZSBzdGlsbCB3YW50IHRvIHN1cHBvcnRcbi8vIHNob3J0aGFuZCBldmVudHMsIG9yIGlmIHdlIHdhbnQgdG8gaW1wbGVtZW50XG4vLyBhIHJlYWwgYnViYmxpbmcgbWVjaGFuaXNtXG5mdW5jdGlvbiBidWJibGUoY29tcG9uZW50LCBldmVudCkge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9IGNvbXBvbmVudC4kJC5jYWxsYmFja3NbZXZlbnQudHlwZV07XG4gICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICBjYWxsYmFja3Muc2xpY2UoKS5mb3JFYWNoKGZuID0+IGZuKGV2ZW50KSk7XG4gICAgfVxufVxuXG5jb25zdCBkaXJ0eV9jb21wb25lbnRzID0gW107XG5jb25zdCBpbnRyb3MgPSB7IGVuYWJsZWQ6IGZhbHNlIH07XG5jb25zdCBiaW5kaW5nX2NhbGxiYWNrcyA9IFtdO1xuY29uc3QgcmVuZGVyX2NhbGxiYWNrcyA9IFtdO1xuY29uc3QgZmx1c2hfY2FsbGJhY2tzID0gW107XG5jb25zdCByZXNvbHZlZF9wcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5sZXQgdXBkYXRlX3NjaGVkdWxlZCA9IGZhbHNlO1xuZnVuY3Rpb24gc2NoZWR1bGVfdXBkYXRlKCkge1xuICAgIGlmICghdXBkYXRlX3NjaGVkdWxlZCkge1xuICAgICAgICB1cGRhdGVfc2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgcmVzb2x2ZWRfcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0aWNrKCkge1xuICAgIHNjaGVkdWxlX3VwZGF0ZSgpO1xuICAgIHJldHVybiByZXNvbHZlZF9wcm9taXNlO1xufVxuZnVuY3Rpb24gYWRkX3JlbmRlcl9jYWxsYmFjayhmbikge1xuICAgIHJlbmRlcl9jYWxsYmFja3MucHVzaChmbik7XG59XG5mdW5jdGlvbiBhZGRfZmx1c2hfY2FsbGJhY2soZm4pIHtcbiAgICBmbHVzaF9jYWxsYmFja3MucHVzaChmbik7XG59XG5sZXQgZmx1c2hpbmcgPSBmYWxzZTtcbmNvbnN0IHNlZW5fY2FsbGJhY2tzID0gbmV3IFNldCgpO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgaWYgKGZsdXNoaW5nKVxuICAgICAgICByZXR1cm47XG4gICAgZmx1c2hpbmcgPSB0cnVlO1xuICAgIGRvIHtcbiAgICAgICAgLy8gZmlyc3QsIGNhbGwgYmVmb3JlVXBkYXRlIGZ1bmN0aW9uc1xuICAgICAgICAvLyBhbmQgdXBkYXRlIGNvbXBvbmVudHNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXJ0eV9jb21wb25lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBkaXJ0eV9jb21wb25lbnRzW2ldO1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KGNvbXBvbmVudCk7XG4gICAgICAgICAgICB1cGRhdGUoY29tcG9uZW50LiQkKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQobnVsbCk7XG4gICAgICAgIGRpcnR5X2NvbXBvbmVudHMubGVuZ3RoID0gMDtcbiAgICAgICAgd2hpbGUgKGJpbmRpbmdfY2FsbGJhY2tzLmxlbmd0aClcbiAgICAgICAgICAgIGJpbmRpbmdfY2FsbGJhY2tzLnBvcCgpKCk7XG4gICAgICAgIC8vIHRoZW4sIG9uY2UgY29tcG9uZW50cyBhcmUgdXBkYXRlZCwgY2FsbFxuICAgICAgICAvLyBhZnRlclVwZGF0ZSBmdW5jdGlvbnMuIFRoaXMgbWF5IGNhdXNlXG4gICAgICAgIC8vIHN1YnNlcXVlbnQgdXBkYXRlcy4uLlxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlcl9jYWxsYmFja3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gcmVuZGVyX2NhbGxiYWNrc1tpXTtcbiAgICAgICAgICAgIGlmICghc2Vlbl9jYWxsYmFja3MuaGFzKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgIC8vIC4uLnNvIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHNcbiAgICAgICAgICAgICAgICBzZWVuX2NhbGxiYWNrcy5hZGQoY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyX2NhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgIH0gd2hpbGUgKGRpcnR5X2NvbXBvbmVudHMubGVuZ3RoKTtcbiAgICB3aGlsZSAoZmx1c2hfY2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICBmbHVzaF9jYWxsYmFja3MucG9wKCkoKTtcbiAgICB9XG4gICAgdXBkYXRlX3NjaGVkdWxlZCA9IGZhbHNlO1xuICAgIGZsdXNoaW5nID0gZmFsc2U7XG4gICAgc2Vlbl9jYWxsYmFja3MuY2xlYXIoKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZSgkJCkge1xuICAgIGlmICgkJC5mcmFnbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAkJC51cGRhdGUoKTtcbiAgICAgICAgcnVuX2FsbCgkJC5iZWZvcmVfdXBkYXRlKTtcbiAgICAgICAgY29uc3QgZGlydHkgPSAkJC5kaXJ0eTtcbiAgICAgICAgJCQuZGlydHkgPSBbLTFdO1xuICAgICAgICAkJC5mcmFnbWVudCAmJiAkJC5mcmFnbWVudC5wKCQkLmN0eCwgZGlydHkpO1xuICAgICAgICAkJC5hZnRlcl91cGRhdGUuZm9yRWFjaChhZGRfcmVuZGVyX2NhbGxiYWNrKTtcbiAgICB9XG59XG5cbmxldCBwcm9taXNlO1xuZnVuY3Rpb24gd2FpdCgpIHtcbiAgICBpZiAoIXByb21pc2UpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZSA9IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoKG5vZGUsIGRpcmVjdGlvbiwga2luZCkge1xuICAgIG5vZGUuZGlzcGF0Y2hFdmVudChjdXN0b21fZXZlbnQoYCR7ZGlyZWN0aW9uID8gJ2ludHJvJyA6ICdvdXRybyd9JHtraW5kfWApKTtcbn1cbmNvbnN0IG91dHJvaW5nID0gbmV3IFNldCgpO1xubGV0IG91dHJvcztcbmZ1bmN0aW9uIGdyb3VwX291dHJvcygpIHtcbiAgICBvdXRyb3MgPSB7XG4gICAgICAgIHI6IDAsXG4gICAgICAgIGM6IFtdLFxuICAgICAgICBwOiBvdXRyb3MgLy8gcGFyZW50IGdyb3VwXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNoZWNrX291dHJvcygpIHtcbiAgICBpZiAoIW91dHJvcy5yKSB7XG4gICAgICAgIHJ1bl9hbGwob3V0cm9zLmMpO1xuICAgIH1cbiAgICBvdXRyb3MgPSBvdXRyb3MucDtcbn1cbmZ1bmN0aW9uIHRyYW5zaXRpb25faW4oYmxvY2ssIGxvY2FsKSB7XG4gICAgaWYgKGJsb2NrICYmIGJsb2NrLmkpIHtcbiAgICAgICAgb3V0cm9pbmcuZGVsZXRlKGJsb2NrKTtcbiAgICAgICAgYmxvY2suaShsb2NhbCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdHJhbnNpdGlvbl9vdXQoYmxvY2ssIGxvY2FsLCBkZXRhY2gsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGJsb2NrICYmIGJsb2NrLm8pIHtcbiAgICAgICAgaWYgKG91dHJvaW5nLmhhcyhibG9jaykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIG91dHJvaW5nLmFkZChibG9jayk7XG4gICAgICAgIG91dHJvcy5jLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgb3V0cm9pbmcuZGVsZXRlKGJsb2NrKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIGlmIChkZXRhY2gpXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrLmQoMSk7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGJsb2NrLm8obG9jYWwpO1xuICAgIH1cbn1cbmNvbnN0IG51bGxfdHJhbnNpdGlvbiA9IHsgZHVyYXRpb246IDAgfTtcbmZ1bmN0aW9uIGNyZWF0ZV9pbl90cmFuc2l0aW9uKG5vZGUsIGZuLCBwYXJhbXMpIHtcbiAgICBsZXQgY29uZmlnID0gZm4obm9kZSwgcGFyYW1zKTtcbiAgICBsZXQgcnVubmluZyA9IGZhbHNlO1xuICAgIGxldCBhbmltYXRpb25fbmFtZTtcbiAgICBsZXQgdGFzaztcbiAgICBsZXQgdWlkID0gMDtcbiAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICBpZiAoYW5pbWF0aW9uX25hbWUpXG4gICAgICAgICAgICBkZWxldGVfcnVsZShub2RlLCBhbmltYXRpb25fbmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdvKCkge1xuICAgICAgICBjb25zdCB7IGRlbGF5ID0gMCwgZHVyYXRpb24gPSAzMDAsIGVhc2luZyA9IGlkZW50aXR5LCB0aWNrID0gbm9vcCwgY3NzIH0gPSBjb25maWcgfHwgbnVsbF90cmFuc2l0aW9uO1xuICAgICAgICBpZiAoY3NzKVxuICAgICAgICAgICAgYW5pbWF0aW9uX25hbWUgPSBjcmVhdGVfcnVsZShub2RlLCAwLCAxLCBkdXJhdGlvbiwgZGVsYXksIGVhc2luZywgY3NzLCB1aWQrKyk7XG4gICAgICAgIHRpY2soMCwgMSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0X3RpbWUgPSBub3coKSArIGRlbGF5O1xuICAgICAgICBjb25zdCBlbmRfdGltZSA9IHN0YXJ0X3RpbWUgKyBkdXJhdGlvbjtcbiAgICAgICAgaWYgKHRhc2spXG4gICAgICAgICAgICB0YXNrLmFib3J0KCk7XG4gICAgICAgIHJ1bm5pbmcgPSB0cnVlO1xuICAgICAgICBhZGRfcmVuZGVyX2NhbGxiYWNrKCgpID0+IGRpc3BhdGNoKG5vZGUsIHRydWUsICdzdGFydCcpKTtcbiAgICAgICAgdGFzayA9IGxvb3Aobm93ID0+IHtcbiAgICAgICAgICAgIGlmIChydW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdyA+PSBlbmRfdGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aWNrKDEsIDApO1xuICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChub2RlLCB0cnVlLCAnZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vdyA+PSBzdGFydF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBlYXNpbmcoKG5vdyAtIHN0YXJ0X3RpbWUpIC8gZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aWNrKHQsIDEgLSB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVubmluZztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxldCBzdGFydGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RhcnQoKSB7XG4gICAgICAgICAgICBpZiAoc3RhcnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWxldGVfcnVsZShub2RlKTtcbiAgICAgICAgICAgIGlmIChpc19mdW5jdGlvbihjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnID0gY29uZmlnKCk7XG4gICAgICAgICAgICAgICAgd2FpdCgpLnRoZW4oZ28pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZ28oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZGF0ZSgpIHtcbiAgICAgICAgICAgIHN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5kKCkge1xuICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgcnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZV9vdXRfdHJhbnNpdGlvbihub2RlLCBmbiwgcGFyYW1zKSB7XG4gICAgbGV0IGNvbmZpZyA9IGZuKG5vZGUsIHBhcmFtcyk7XG4gICAgbGV0IHJ1bm5pbmcgPSB0cnVlO1xuICAgIGxldCBhbmltYXRpb25fbmFtZTtcbiAgICBjb25zdCBncm91cCA9IG91dHJvcztcbiAgICBncm91cC5yICs9IDE7XG4gICAgZnVuY3Rpb24gZ28oKSB7XG4gICAgICAgIGNvbnN0IHsgZGVsYXkgPSAwLCBkdXJhdGlvbiA9IDMwMCwgZWFzaW5nID0gaWRlbnRpdHksIHRpY2sgPSBub29wLCBjc3MgfSA9IGNvbmZpZyB8fCBudWxsX3RyYW5zaXRpb247XG4gICAgICAgIGlmIChjc3MpXG4gICAgICAgICAgICBhbmltYXRpb25fbmFtZSA9IGNyZWF0ZV9ydWxlKG5vZGUsIDEsIDAsIGR1cmF0aW9uLCBkZWxheSwgZWFzaW5nLCBjc3MpO1xuICAgICAgICBjb25zdCBzdGFydF90aW1lID0gbm93KCkgKyBkZWxheTtcbiAgICAgICAgY29uc3QgZW5kX3RpbWUgPSBzdGFydF90aW1lICsgZHVyYXRpb247XG4gICAgICAgIGFkZF9yZW5kZXJfY2FsbGJhY2soKCkgPT4gZGlzcGF0Y2gobm9kZSwgZmFsc2UsICdzdGFydCcpKTtcbiAgICAgICAgbG9vcChub3cgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93ID49IGVuZF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRpY2soMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG5vZGUsIGZhbHNlLCAnZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghLS1ncm91cC5yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgcmVzdWx0IGluIGBlbmQoKWAgYmVpbmcgY2FsbGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhbiB1cCBoZXJlXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsKGdyb3VwLmMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vdyA+PSBzdGFydF90aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBlYXNpbmcoKG5vdyAtIHN0YXJ0X3RpbWUpIC8gZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB0aWNrKDEgLSB0LCB0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcnVubmluZztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc19mdW5jdGlvbihjb25maWcpKSB7XG4gICAgICAgIHdhaXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbmZpZyA9IGNvbmZpZygpO1xuICAgICAgICAgICAgZ28oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBnbygpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBlbmQocmVzZXQpIHtcbiAgICAgICAgICAgIGlmIChyZXNldCAmJiBjb25maWcudGljaykge1xuICAgICAgICAgICAgICAgIGNvbmZpZy50aWNrKDEsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uX25hbWUpXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZV9ydWxlKG5vZGUsIGFuaW1hdGlvbl9uYW1lKTtcbiAgICAgICAgICAgICAgICBydW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlX2JpZGlyZWN0aW9uYWxfdHJhbnNpdGlvbihub2RlLCBmbiwgcGFyYW1zLCBpbnRybykge1xuICAgIGxldCBjb25maWcgPSBmbihub2RlLCBwYXJhbXMpO1xuICAgIGxldCB0ID0gaW50cm8gPyAwIDogMTtcbiAgICBsZXQgcnVubmluZ19wcm9ncmFtID0gbnVsbDtcbiAgICBsZXQgcGVuZGluZ19wcm9ncmFtID0gbnVsbDtcbiAgICBsZXQgYW5pbWF0aW9uX25hbWUgPSBudWxsO1xuICAgIGZ1bmN0aW9uIGNsZWFyX2FuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKGFuaW1hdGlvbl9uYW1lKVxuICAgICAgICAgICAgZGVsZXRlX3J1bGUobm9kZSwgYW5pbWF0aW9uX25hbWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0KHByb2dyYW0sIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGQgPSBwcm9ncmFtLmIgLSB0O1xuICAgICAgICBkdXJhdGlvbiAqPSBNYXRoLmFicyhkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGE6IHQsXG4gICAgICAgICAgICBiOiBwcm9ncmFtLmIsXG4gICAgICAgICAgICBkLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgICAgICBzdGFydDogcHJvZ3JhbS5zdGFydCxcbiAgICAgICAgICAgIGVuZDogcHJvZ3JhbS5zdGFydCArIGR1cmF0aW9uLFxuICAgICAgICAgICAgZ3JvdXA6IHByb2dyYW0uZ3JvdXBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ28oYikge1xuICAgICAgICBjb25zdCB7IGRlbGF5ID0gMCwgZHVyYXRpb24gPSAzMDAsIGVhc2luZyA9IGlkZW50aXR5LCB0aWNrID0gbm9vcCwgY3NzIH0gPSBjb25maWcgfHwgbnVsbF90cmFuc2l0aW9uO1xuICAgICAgICBjb25zdCBwcm9ncmFtID0ge1xuICAgICAgICAgICAgc3RhcnQ6IG5vdygpICsgZGVsYXksXG4gICAgICAgICAgICBiXG4gICAgICAgIH07XG4gICAgICAgIGlmICghYikge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB0b2RvOiBpbXByb3ZlIHR5cGluZ3NcbiAgICAgICAgICAgIHByb2dyYW0uZ3JvdXAgPSBvdXRyb3M7XG4gICAgICAgICAgICBvdXRyb3MuciArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW5uaW5nX3Byb2dyYW0gfHwgcGVuZGluZ19wcm9ncmFtKSB7XG4gICAgICAgICAgICBwZW5kaW5nX3Byb2dyYW0gPSBwcm9ncmFtO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhbiBpbnRybywgYW5kIHRoZXJlJ3MgYSBkZWxheSwgd2UgbmVlZCB0byBkb1xuICAgICAgICAgICAgLy8gYW4gaW5pdGlhbCB0aWNrIGFuZC9vciBhcHBseSBDU1MgYW5pbWF0aW9uIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICBpZiAoY3NzKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJfYW5pbWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uX25hbWUgPSBjcmVhdGVfcnVsZShub2RlLCB0LCBiLCBkdXJhdGlvbiwgZGVsYXksIGVhc2luZywgY3NzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiKVxuICAgICAgICAgICAgICAgIHRpY2soMCwgMSk7XG4gICAgICAgICAgICBydW5uaW5nX3Byb2dyYW0gPSBpbml0KHByb2dyYW0sIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIGFkZF9yZW5kZXJfY2FsbGJhY2soKCkgPT4gZGlzcGF0Y2gobm9kZSwgYiwgJ3N0YXJ0JykpO1xuICAgICAgICAgICAgbG9vcChub3cgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nX3Byb2dyYW0gJiYgbm93ID4gcGVuZGluZ19wcm9ncmFtLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdfcHJvZ3JhbSA9IGluaXQocGVuZGluZ19wcm9ncmFtLCBkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfcHJvZ3JhbSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoKG5vZGUsIHJ1bm5pbmdfcHJvZ3JhbS5iLCAnc3RhcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfYW5pbWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25fbmFtZSA9IGNyZWF0ZV9ydWxlKG5vZGUsIHQsIHJ1bm5pbmdfcHJvZ3JhbS5iLCBydW5uaW5nX3Byb2dyYW0uZHVyYXRpb24sIDAsIGVhc2luZywgY29uZmlnLmNzcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmdfcHJvZ3JhbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm93ID49IHJ1bm5pbmdfcHJvZ3JhbS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2sodCA9IHJ1bm5pbmdfcHJvZ3JhbS5iLCAxIC0gdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaChub2RlLCBydW5uaW5nX3Byb2dyYW0uYiwgJ2VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nX3Byb2dyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBkb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bm5pbmdfcHJvZ3JhbS5iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludHJvIOKAlCB3ZSBjYW4gdGlkeSB1cCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcl9hbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dHJvIOKAlCBuZWVkcyB0byBiZSBjb29yZGluYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS0tcnVubmluZ19wcm9ncmFtLmdyb3VwLnIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fYWxsKHJ1bm5pbmdfcHJvZ3JhbS5ncm91cC5jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBydW5uaW5nX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vdyA+PSBydW5uaW5nX3Byb2dyYW0uc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBub3cgLSBydW5uaW5nX3Byb2dyYW0uc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gcnVubmluZ19wcm9ncmFtLmEgKyBydW5uaW5nX3Byb2dyYW0uZCAqIGVhc2luZyhwIC8gcnVubmluZ19wcm9ncmFtLmR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpY2sodCwgMSAtIHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAhIShydW5uaW5nX3Byb2dyYW0gfHwgcGVuZGluZ19wcm9ncmFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJ1bihiKSB7XG4gICAgICAgICAgICBpZiAoaXNfZnVuY3Rpb24oY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHdhaXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBjb25maWcgPSBjb25maWcoKTtcbiAgICAgICAgICAgICAgICAgICAgZ28oYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnbyhiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZW5kKCkge1xuICAgICAgICAgICAgY2xlYXJfYW5pbWF0aW9uKCk7XG4gICAgICAgICAgICBydW5uaW5nX3Byb2dyYW0gPSBwZW5kaW5nX3Byb2dyYW0gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlX3Byb21pc2UocHJvbWlzZSwgaW5mbykge1xuICAgIGNvbnN0IHRva2VuID0gaW5mby50b2tlbiA9IHt9O1xuICAgIGZ1bmN0aW9uIHVwZGF0ZSh0eXBlLCBpbmRleCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaW5mby50b2tlbiAhPT0gdG9rZW4pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluZm8ucmVzb2x2ZWQgPSB2YWx1ZTtcbiAgICAgICAgbGV0IGNoaWxkX2N0eCA9IGluZm8uY3R4O1xuICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoaWxkX2N0eCA9IGNoaWxkX2N0eC5zbGljZSgpO1xuICAgICAgICAgICAgY2hpbGRfY3R4W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBibG9jayA9IHR5cGUgJiYgKGluZm8uY3VycmVudCA9IHR5cGUpKGNoaWxkX2N0eCk7XG4gICAgICAgIGxldCBuZWVkc19mbHVzaCA9IGZhbHNlO1xuICAgICAgICBpZiAoaW5mby5ibG9jaykge1xuICAgICAgICAgICAgaWYgKGluZm8uYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgaW5mby5ibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IGluZGV4ICYmIGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cF9vdXRyb3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25fb3V0KGJsb2NrLCAxLCAxLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uYmxvY2tzW2ldID09PSBibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmJsb2Nrc1tpXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja19vdXRyb3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5mby5ibG9jay5kKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmxvY2suYygpO1xuICAgICAgICAgICAgdHJhbnNpdGlvbl9pbihibG9jaywgMSk7XG4gICAgICAgICAgICBibG9jay5tKGluZm8ubW91bnQoKSwgaW5mby5hbmNob3IpO1xuICAgICAgICAgICAgbmVlZHNfZmx1c2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uYmxvY2sgPSBibG9jaztcbiAgICAgICAgaWYgKGluZm8uYmxvY2tzKVxuICAgICAgICAgICAgaW5mby5ibG9ja3NbaW5kZXhdID0gYmxvY2s7XG4gICAgICAgIGlmIChuZWVkc19mbHVzaCkge1xuICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNfcHJvbWlzZShwcm9taXNlKSkge1xuICAgICAgICBjb25zdCBjdXJyZW50X2NvbXBvbmVudCA9IGdldF9jdXJyZW50X2NvbXBvbmVudCgpO1xuICAgICAgICBwcm9taXNlLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KGN1cnJlbnRfY29tcG9uZW50KTtcbiAgICAgICAgICAgIHVwZGF0ZShpbmZvLnRoZW4sIDEsIGluZm8udmFsdWUsIHZhbHVlKTtcbiAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChudWxsKTtcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KGN1cnJlbnRfY29tcG9uZW50KTtcbiAgICAgICAgICAgIHVwZGF0ZShpbmZvLmNhdGNoLCAyLCBpbmZvLmVycm9yLCBlcnJvcik7XG4gICAgICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQobnVsbCk7XG4gICAgICAgICAgICBpZiAoIWluZm8uaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGlmIHdlIHByZXZpb3VzbHkgaGFkIGEgdGhlbi9jYXRjaCBibG9jaywgZGVzdHJveSBpdFxuICAgICAgICBpZiAoaW5mby5jdXJyZW50ICE9PSBpbmZvLnBlbmRpbmcpIHtcbiAgICAgICAgICAgIHVwZGF0ZShpbmZvLnBlbmRpbmcsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChpbmZvLmN1cnJlbnQgIT09IGluZm8udGhlbikge1xuICAgICAgICAgICAgdXBkYXRlKGluZm8udGhlbiwgMSwgaW5mby52YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnJlc29sdmVkID0gcHJvbWlzZTtcbiAgICB9XG59XG5cbmNvbnN0IGdsb2JhbHMgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IHdpbmRvd1xuICAgIDogdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gZ2xvYmFsVGhpc1xuICAgICAgICA6IGdsb2JhbCk7XG5cbmZ1bmN0aW9uIGRlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCkge1xuICAgIGJsb2NrLmQoMSk7XG4gICAgbG9va3VwLmRlbGV0ZShibG9jay5rZXkpO1xufVxuZnVuY3Rpb24gb3V0cm9fYW5kX2Rlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCkge1xuICAgIHRyYW5zaXRpb25fb3V0KGJsb2NrLCAxLCAxLCAoKSA9PiB7XG4gICAgICAgIGxvb2t1cC5kZWxldGUoYmxvY2sua2V5KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZpeF9hbmRfZGVzdHJveV9ibG9jayhibG9jaywgbG9va3VwKSB7XG4gICAgYmxvY2suZigpO1xuICAgIGRlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCk7XG59XG5mdW5jdGlvbiBmaXhfYW5kX291dHJvX2FuZF9kZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApIHtcbiAgICBibG9jay5mKCk7XG4gICAgb3V0cm9fYW5kX2Rlc3Ryb3lfYmxvY2soYmxvY2ssIGxvb2t1cCk7XG59XG5mdW5jdGlvbiB1cGRhdGVfa2V5ZWRfZWFjaChvbGRfYmxvY2tzLCBkaXJ0eSwgZ2V0X2tleSwgZHluYW1pYywgY3R4LCBsaXN0LCBsb29rdXAsIG5vZGUsIGRlc3Ryb3ksIGNyZWF0ZV9lYWNoX2Jsb2NrLCBuZXh0LCBnZXRfY29udGV4dCkge1xuICAgIGxldCBvID0gb2xkX2Jsb2Nrcy5sZW5ndGg7XG4gICAgbGV0IG4gPSBsaXN0Lmxlbmd0aDtcbiAgICBsZXQgaSA9IG87XG4gICAgY29uc3Qgb2xkX2luZGV4ZXMgPSB7fTtcbiAgICB3aGlsZSAoaS0tKVxuICAgICAgICBvbGRfaW5kZXhlc1tvbGRfYmxvY2tzW2ldLmtleV0gPSBpO1xuICAgIGNvbnN0IG5ld19ibG9ja3MgPSBbXTtcbiAgICBjb25zdCBuZXdfbG9va3VwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGRlbHRhcyA9IG5ldyBNYXAoKTtcbiAgICBpID0gbjtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkX2N0eCA9IGdldF9jb250ZXh0KGN0eCwgbGlzdCwgaSk7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldF9rZXkoY2hpbGRfY3R4KTtcbiAgICAgICAgbGV0IGJsb2NrID0gbG9va3VwLmdldChrZXkpO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICBibG9jayA9IGNyZWF0ZV9lYWNoX2Jsb2NrKGtleSwgY2hpbGRfY3R4KTtcbiAgICAgICAgICAgIGJsb2NrLmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkeW5hbWljKSB7XG4gICAgICAgICAgICBibG9jay5wKGNoaWxkX2N0eCwgZGlydHkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld19sb29rdXAuc2V0KGtleSwgbmV3X2Jsb2Nrc1tpXSA9IGJsb2NrKTtcbiAgICAgICAgaWYgKGtleSBpbiBvbGRfaW5kZXhlcylcbiAgICAgICAgICAgIGRlbHRhcy5zZXQoa2V5LCBNYXRoLmFicyhpIC0gb2xkX2luZGV4ZXNba2V5XSkpO1xuICAgIH1cbiAgICBjb25zdCB3aWxsX21vdmUgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZGlkX21vdmUgPSBuZXcgU2V0KCk7XG4gICAgZnVuY3Rpb24gaW5zZXJ0KGJsb2NrKSB7XG4gICAgICAgIHRyYW5zaXRpb25faW4oYmxvY2ssIDEpO1xuICAgICAgICBibG9jay5tKG5vZGUsIG5leHQpO1xuICAgICAgICBsb29rdXAuc2V0KGJsb2NrLmtleSwgYmxvY2spO1xuICAgICAgICBuZXh0ID0gYmxvY2suZmlyc3Q7XG4gICAgICAgIG4tLTtcbiAgICB9XG4gICAgd2hpbGUgKG8gJiYgbikge1xuICAgICAgICBjb25zdCBuZXdfYmxvY2sgPSBuZXdfYmxvY2tzW24gLSAxXTtcbiAgICAgICAgY29uc3Qgb2xkX2Jsb2NrID0gb2xkX2Jsb2Nrc1tvIC0gMV07XG4gICAgICAgIGNvbnN0IG5ld19rZXkgPSBuZXdfYmxvY2sua2V5O1xuICAgICAgICBjb25zdCBvbGRfa2V5ID0gb2xkX2Jsb2NrLmtleTtcbiAgICAgICAgaWYgKG5ld19ibG9jayA9PT0gb2xkX2Jsb2NrKSB7XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBuZXh0ID0gbmV3X2Jsb2NrLmZpcnN0O1xuICAgICAgICAgICAgby0tO1xuICAgICAgICAgICAgbi0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFuZXdfbG9va3VwLmhhcyhvbGRfa2V5KSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9sZCBibG9ja1xuICAgICAgICAgICAgZGVzdHJveShvbGRfYmxvY2ssIGxvb2t1cCk7XG4gICAgICAgICAgICBvLS07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWxvb2t1cC5oYXMobmV3X2tleSkgfHwgd2lsbF9tb3ZlLmhhcyhuZXdfa2V5KSkge1xuICAgICAgICAgICAgaW5zZXJ0KG5ld19ibG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGlkX21vdmUuaGFzKG9sZF9rZXkpKSB7XG4gICAgICAgICAgICBvLS07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGVsdGFzLmdldChuZXdfa2V5KSA+IGRlbHRhcy5nZXQob2xkX2tleSkpIHtcbiAgICAgICAgICAgIGRpZF9tb3ZlLmFkZChuZXdfa2V5KTtcbiAgICAgICAgICAgIGluc2VydChuZXdfYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2lsbF9tb3ZlLmFkZChvbGRfa2V5KTtcbiAgICAgICAgICAgIG8tLTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAoby0tKSB7XG4gICAgICAgIGNvbnN0IG9sZF9ibG9jayA9IG9sZF9ibG9ja3Nbb107XG4gICAgICAgIGlmICghbmV3X2xvb2t1cC5oYXMob2xkX2Jsb2NrLmtleSkpXG4gICAgICAgICAgICBkZXN0cm95KG9sZF9ibG9jaywgbG9va3VwKTtcbiAgICB9XG4gICAgd2hpbGUgKG4pXG4gICAgICAgIGluc2VydChuZXdfYmxvY2tzW24gLSAxXSk7XG4gICAgcmV0dXJuIG5ld19ibG9ja3M7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV9lYWNoX2tleXMoY3R4LCBsaXN0LCBnZXRfY29udGV4dCwgZ2V0X2tleSkge1xuICAgIGNvbnN0IGtleXMgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldF9rZXkoZ2V0X2NvbnRleHQoY3R4LCBsaXN0LCBpKSk7XG4gICAgICAgIGlmIChrZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBoYXZlIGR1cGxpY2F0ZSBrZXlzIGluIGEga2V5ZWQgZWFjaCcpO1xuICAgICAgICB9XG4gICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRfc3ByZWFkX3VwZGF0ZShsZXZlbHMsIHVwZGF0ZXMpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7fTtcbiAgICBjb25zdCB0b19udWxsX291dCA9IHt9O1xuICAgIGNvbnN0IGFjY291bnRlZF9mb3IgPSB7ICQkc2NvcGU6IDEgfTtcbiAgICBsZXQgaSA9IGxldmVscy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb25zdCBvID0gbGV2ZWxzW2ldO1xuICAgICAgICBjb25zdCBuID0gdXBkYXRlc1tpXTtcbiAgICAgICAgaWYgKG4pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG8pIHtcbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gbikpXG4gICAgICAgICAgICAgICAgICAgIHRvX251bGxfb3V0W2tleV0gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbikge1xuICAgICAgICAgICAgICAgIGlmICghYWNjb3VudGVkX2ZvcltrZXldKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVtrZXldID0gbltrZXldO1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50ZWRfZm9yW2tleV0gPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldmVsc1tpXSA9IG47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvKSB7XG4gICAgICAgICAgICAgICAgYWNjb3VudGVkX2ZvcltrZXldID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0b19udWxsX291dCkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdXBkYXRlKSlcbiAgICAgICAgICAgIHVwZGF0ZVtrZXldID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdXBkYXRlO1xufVxuZnVuY3Rpb24gZ2V0X3NwcmVhZF9vYmplY3Qoc3ByZWFkX3Byb3BzKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzcHJlYWRfcHJvcHMgPT09ICdvYmplY3QnICYmIHNwcmVhZF9wcm9wcyAhPT0gbnVsbCA/IHNwcmVhZF9wcm9wcyA6IHt9O1xufVxuXG4vLyBzb3VyY2U6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbFxuY29uc3QgYm9vbGVhbl9hdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICAgJ2FsbG93ZnVsbHNjcmVlbicsXG4gICAgJ2FsbG93cGF5bWVudHJlcXVlc3QnLFxuICAgICdhc3luYycsXG4gICAgJ2F1dG9mb2N1cycsXG4gICAgJ2F1dG9wbGF5JyxcbiAgICAnY2hlY2tlZCcsXG4gICAgJ2NvbnRyb2xzJyxcbiAgICAnZGVmYXVsdCcsXG4gICAgJ2RlZmVyJyxcbiAgICAnZGlzYWJsZWQnLFxuICAgICdmb3Jtbm92YWxpZGF0ZScsXG4gICAgJ2hpZGRlbicsXG4gICAgJ2lzbWFwJyxcbiAgICAnbG9vcCcsXG4gICAgJ211bHRpcGxlJyxcbiAgICAnbXV0ZWQnLFxuICAgICdub21vZHVsZScsXG4gICAgJ25vdmFsaWRhdGUnLFxuICAgICdvcGVuJyxcbiAgICAncGxheXNpbmxpbmUnLFxuICAgICdyZWFkb25seScsXG4gICAgJ3JlcXVpcmVkJyxcbiAgICAncmV2ZXJzZWQnLFxuICAgICdzZWxlY3RlZCdcbl0pO1xuXG5jb25zdCBpbnZhbGlkX2F0dHJpYnV0ZV9uYW1lX2NoYXJhY3RlciA9IC9bXFxzJ1wiPi89XFx1e0ZERDB9LVxcdXtGREVGfVxcdXtGRkZFfVxcdXtGRkZGfVxcdXsxRkZGRX1cXHV7MUZGRkZ9XFx1ezJGRkZFfVxcdXsyRkZGRn1cXHV7M0ZGRkV9XFx1ezNGRkZGfVxcdXs0RkZGRX1cXHV7NEZGRkZ9XFx1ezVGRkZFfVxcdXs1RkZGRn1cXHV7NkZGRkV9XFx1ezZGRkZGfVxcdXs3RkZGRX1cXHV7N0ZGRkZ9XFx1ezhGRkZFfVxcdXs4RkZGRn1cXHV7OUZGRkV9XFx1ezlGRkZGfVxcdXtBRkZGRX1cXHV7QUZGRkZ9XFx1e0JGRkZFfVxcdXtCRkZGRn1cXHV7Q0ZGRkV9XFx1e0NGRkZGfVxcdXtERkZGRX1cXHV7REZGRkZ9XFx1e0VGRkZFfVxcdXtFRkZGRn1cXHV7RkZGRkV9XFx1e0ZGRkZGfVxcdXsxMEZGRkV9XFx1ezEwRkZGRn1dL3U7XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNub25jaGFyYWN0ZXJcbmZ1bmN0aW9uIHNwcmVhZChhcmdzLCBjbGFzc2VzX3RvX2FkZCkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3QuYXNzaWduKHt9LCAuLi5hcmdzKTtcbiAgICBpZiAoY2xhc3Nlc190b19hZGQpIHtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMuY2xhc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5jbGFzcyA9IGNsYXNzZXNfdG9fYWRkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5jbGFzcyArPSAnICcgKyBjbGFzc2VzX3RvX2FkZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgc3RyID0gJyc7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgaWYgKGludmFsaWRfYXR0cmlidXRlX25hbWVfY2hhcmFjdGVyLnRlc3QobmFtZSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKVxuICAgICAgICAgICAgc3RyICs9ICcgJyArIG5hbWU7XG4gICAgICAgIGVsc2UgaWYgKGJvb2xlYW5fYXR0cmlidXRlcy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAgICAgIHN0ciArPSAnICcgKyBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHN0ciArPSBgICR7bmFtZX09XCIke1N0cmluZyh2YWx1ZSkucmVwbGFjZSgvXCIvZywgJyYjMzQ7JykucmVwbGFjZSgvJy9nLCAnJiMzOTsnKX1cImA7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3RyO1xufVxuY29uc3QgZXNjYXBlZCA9IHtcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjMzk7JyxcbiAgICAnJic6ICcmYW1wOycsXG4gICAgJzwnOiAnJmx0OycsXG4gICAgJz4nOiAnJmd0Oydcbn07XG5mdW5jdGlvbiBlc2NhcGUoaHRtbCkge1xuICAgIHJldHVybiBTdHJpbmcoaHRtbCkucmVwbGFjZSgvW1wiJyY8Pl0vZywgbWF0Y2ggPT4gZXNjYXBlZFttYXRjaF0pO1xufVxuZnVuY3Rpb24gZWFjaChpdGVtcywgZm4pIHtcbiAgICBsZXQgc3RyID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBzdHIgKz0gZm4oaXRlbXNbaV0sIGkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuY29uc3QgbWlzc2luZ19jb21wb25lbnQgPSB7XG4gICAgJCRyZW5kZXI6ICgpID0+ICcnXG59O1xuZnVuY3Rpb24gdmFsaWRhdGVfY29tcG9uZW50KGNvbXBvbmVudCwgbmFtZSkge1xuICAgIGlmICghY29tcG9uZW50IHx8ICFjb21wb25lbnQuJCRyZW5kZXIpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzdmVsdGU6Y29tcG9uZW50JylcbiAgICAgICAgICAgIG5hbWUgKz0gJyB0aGlzPXsuLi59JztcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGA8JHtuYW1lfT4gaXMgbm90IGEgdmFsaWQgU1NSIGNvbXBvbmVudC4gWW91IG1heSBuZWVkIHRvIHJldmlldyB5b3VyIGJ1aWxkIGNvbmZpZyB0byBlbnN1cmUgdGhhdCBkZXBlbmRlbmNpZXMgYXJlIGNvbXBpbGVkLCByYXRoZXIgdGhhbiBpbXBvcnRlZCBhcyBwcmUtY29tcGlsZWQgbW9kdWxlc2ApO1xuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZnVuY3Rpb24gZGVidWcoZmlsZSwgbGluZSwgY29sdW1uLCB2YWx1ZXMpIHtcbiAgICBjb25zb2xlLmxvZyhge0BkZWJ1Z30gJHtmaWxlID8gZmlsZSArICcgJyA6ICcnfSgke2xpbmV9OiR7Y29sdW1ufSlgKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2codmFsdWVzKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgcmV0dXJuICcnO1xufVxubGV0IG9uX2Rlc3Ryb3k7XG5mdW5jdGlvbiBjcmVhdGVfc3NyX2NvbXBvbmVudChmbikge1xuICAgIGZ1bmN0aW9uICQkcmVuZGVyKHJlc3VsdCwgcHJvcHMsIGJpbmRpbmdzLCBzbG90cykge1xuICAgICAgICBjb25zdCBwYXJlbnRfY29tcG9uZW50ID0gY3VycmVudF9jb21wb25lbnQ7XG4gICAgICAgIGNvbnN0ICQkID0ge1xuICAgICAgICAgICAgb25fZGVzdHJveSxcbiAgICAgICAgICAgIGNvbnRleHQ6IG5ldyBNYXAocGFyZW50X2NvbXBvbmVudCA/IHBhcmVudF9jb21wb25lbnQuJCQuY29udGV4dCA6IFtdKSxcbiAgICAgICAgICAgIC8vIHRoZXNlIHdpbGwgYmUgaW1tZWRpYXRlbHkgZGlzY2FyZGVkXG4gICAgICAgICAgICBvbl9tb3VudDogW10sXG4gICAgICAgICAgICBiZWZvcmVfdXBkYXRlOiBbXSxcbiAgICAgICAgICAgIGFmdGVyX3VwZGF0ZTogW10sXG4gICAgICAgICAgICBjYWxsYmFja3M6IGJsYW5rX29iamVjdCgpXG4gICAgICAgIH07XG4gICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudCh7ICQkIH0pO1xuICAgICAgICBjb25zdCBodG1sID0gZm4ocmVzdWx0LCBwcm9wcywgYmluZGluZ3MsIHNsb3RzKTtcbiAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KHBhcmVudF9jb21wb25lbnQpO1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVuZGVyOiAocHJvcHMgPSB7fSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgICAgICBvbl9kZXN0cm95ID0gW107XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7IHRpdGxlOiAnJywgaGVhZDogJycsIGNzczogbmV3IFNldCgpIH07XG4gICAgICAgICAgICBjb25zdCBodG1sID0gJCRyZW5kZXIocmVzdWx0LCBwcm9wcywge30sIG9wdGlvbnMpO1xuICAgICAgICAgICAgcnVuX2FsbChvbl9kZXN0cm95KTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogQXJyYXkuZnJvbShyZXN1bHQuY3NzKS5tYXAoY3NzID0+IGNzcy5jb2RlKS5qb2luKCdcXG4nKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwOiBudWxsIC8vIFRPRE9cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGhlYWQ6IHJlc3VsdC50aXRsZSArIHJlc3VsdC5oZWFkXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICAkJHJlbmRlclxuICAgIH07XG59XG5mdW5jdGlvbiBhZGRfYXR0cmlidXRlKG5hbWUsIHZhbHVlLCBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgKGJvb2xlYW4gJiYgIXZhbHVlKSlcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIHJldHVybiBgICR7bmFtZX0ke3ZhbHVlID09PSB0cnVlID8gJycgOiBgPSR7dHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGVzY2FwZSh2YWx1ZSkpIDogYFwiJHt2YWx1ZX1cImB9YH1gO1xufVxuZnVuY3Rpb24gYWRkX2NsYXNzZXMoY2xhc3Nlcykge1xuICAgIHJldHVybiBjbGFzc2VzID8gYCBjbGFzcz1cIiR7Y2xhc3Nlc31cImAgOiAnJztcbn1cblxuZnVuY3Rpb24gYmluZChjb21wb25lbnQsIG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW5kZXggPSBjb21wb25lbnQuJCQucHJvcHNbbmFtZV07XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29tcG9uZW50LiQkLmJvdW5kW2luZGV4XSA9IGNhbGxiYWNrO1xuICAgICAgICBjYWxsYmFjayhjb21wb25lbnQuJCQuY3R4W2luZGV4XSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlX2NvbXBvbmVudChibG9jaykge1xuICAgIGJsb2NrICYmIGJsb2NrLmMoKTtcbn1cbmZ1bmN0aW9uIGNsYWltX2NvbXBvbmVudChibG9jaywgcGFyZW50X25vZGVzKSB7XG4gICAgYmxvY2sgJiYgYmxvY2subChwYXJlbnRfbm9kZXMpO1xufVxuZnVuY3Rpb24gbW91bnRfY29tcG9uZW50KGNvbXBvbmVudCwgdGFyZ2V0LCBhbmNob3IpIHtcbiAgICBjb25zdCB7IGZyYWdtZW50LCBvbl9tb3VudCwgb25fZGVzdHJveSwgYWZ0ZXJfdXBkYXRlIH0gPSBjb21wb25lbnQuJCQ7XG4gICAgZnJhZ21lbnQgJiYgZnJhZ21lbnQubSh0YXJnZXQsIGFuY2hvcik7XG4gICAgLy8gb25Nb3VudCBoYXBwZW5zIGJlZm9yZSB0aGUgaW5pdGlhbCBhZnRlclVwZGF0ZVxuICAgIGFkZF9yZW5kZXJfY2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdfb25fZGVzdHJveSA9IG9uX21vdW50Lm1hcChydW4pLmZpbHRlcihpc19mdW5jdGlvbik7XG4gICAgICAgIGlmIChvbl9kZXN0cm95KSB7XG4gICAgICAgICAgICBvbl9kZXN0cm95LnB1c2goLi4ubmV3X29uX2Rlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gRWRnZSBjYXNlIC0gY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgICAvLyBtb3N0IGxpa2VseSBhcyBhIHJlc3VsdCBvZiBhIGJpbmRpbmcgaW5pdGlhbGlzaW5nXG4gICAgICAgICAgICBydW5fYWxsKG5ld19vbl9kZXN0cm95KTtcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuJCQub25fbW91bnQgPSBbXTtcbiAgICB9KTtcbiAgICBhZnRlcl91cGRhdGUuZm9yRWFjaChhZGRfcmVuZGVyX2NhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIGRlc3Ryb3lfY29tcG9uZW50KGNvbXBvbmVudCwgZGV0YWNoaW5nKSB7XG4gICAgY29uc3QgJCQgPSBjb21wb25lbnQuJCQ7XG4gICAgaWYgKCQkLmZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJ1bl9hbGwoJCQub25fZGVzdHJveSk7XG4gICAgICAgICQkLmZyYWdtZW50ICYmICQkLmZyYWdtZW50LmQoZGV0YWNoaW5nKTtcbiAgICAgICAgLy8gVE9ETyBudWxsIG91dCBvdGhlciByZWZzLCBpbmNsdWRpbmcgY29tcG9uZW50LiQkIChidXQgbmVlZCB0b1xuICAgICAgICAvLyBwcmVzZXJ2ZSBmaW5hbCBzdGF0ZT8pXG4gICAgICAgICQkLm9uX2Rlc3Ryb3kgPSAkJC5mcmFnbWVudCA9IG51bGw7XG4gICAgICAgICQkLmN0eCA9IFtdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG1ha2VfZGlydHkoY29tcG9uZW50LCBpKSB7XG4gICAgaWYgKGNvbXBvbmVudC4kJC5kaXJ0eVswXSA9PT0gLTEpIHtcbiAgICAgICAgZGlydHlfY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgIHNjaGVkdWxlX3VwZGF0ZSgpO1xuICAgICAgICBjb21wb25lbnQuJCQuZGlydHkuZmlsbCgwKTtcbiAgICB9XG4gICAgY29tcG9uZW50LiQkLmRpcnR5WyhpIC8gMzEpIHwgMF0gfD0gKDEgPDwgKGkgJSAzMSkpO1xufVxuZnVuY3Rpb24gaW5pdChjb21wb25lbnQsIG9wdGlvbnMsIGluc3RhbmNlLCBjcmVhdGVfZnJhZ21lbnQsIG5vdF9lcXVhbCwgcHJvcHMsIGRpcnR5ID0gWy0xXSkge1xuICAgIGNvbnN0IHBhcmVudF9jb21wb25lbnQgPSBjdXJyZW50X2NvbXBvbmVudDtcbiAgICBzZXRfY3VycmVudF9jb21wb25lbnQoY29tcG9uZW50KTtcbiAgICBjb25zdCAkJCA9IGNvbXBvbmVudC4kJCA9IHtcbiAgICAgICAgZnJhZ21lbnQ6IG51bGwsXG4gICAgICAgIGN0eDogbnVsbCxcbiAgICAgICAgLy8gc3RhdGVcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIHVwZGF0ZTogbm9vcCxcbiAgICAgICAgbm90X2VxdWFsLFxuICAgICAgICBib3VuZDogYmxhbmtfb2JqZWN0KCksXG4gICAgICAgIC8vIGxpZmVjeWNsZVxuICAgICAgICBvbl9tb3VudDogW10sXG4gICAgICAgIG9uX2Rlc3Ryb3k6IFtdLFxuICAgICAgICBiZWZvcmVfdXBkYXRlOiBbXSxcbiAgICAgICAgYWZ0ZXJfdXBkYXRlOiBbXSxcbiAgICAgICAgY29udGV4dDogbmV3IE1hcChwYXJlbnRfY29tcG9uZW50ID8gcGFyZW50X2NvbXBvbmVudC4kJC5jb250ZXh0IDogW10pLFxuICAgICAgICAvLyBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgY2FsbGJhY2tzOiBibGFua19vYmplY3QoKSxcbiAgICAgICAgZGlydHksXG4gICAgICAgIHNraXBfYm91bmQ6IGZhbHNlXG4gICAgfTtcbiAgICBsZXQgcmVhZHkgPSBmYWxzZTtcbiAgICAkJC5jdHggPSBpbnN0YW5jZVxuICAgICAgICA/IGluc3RhbmNlKGNvbXBvbmVudCwgb3B0aW9ucy5wcm9wcyB8fCB7fSwgKGksIHJldCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN0Lmxlbmd0aCA/IHJlc3RbMF0gOiByZXQ7XG4gICAgICAgICAgICBpZiAoJCQuY3R4ICYmIG5vdF9lcXVhbCgkJC5jdHhbaV0sICQkLmN0eFtpXSA9IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICghJCQuc2tpcF9ib3VuZCAmJiAkJC5ib3VuZFtpXSlcbiAgICAgICAgICAgICAgICAgICAgJCQuYm91bmRbaV0odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSlcbiAgICAgICAgICAgICAgICAgICAgbWFrZV9kaXJ0eShjb21wb25lbnQsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSlcbiAgICAgICAgOiBbXTtcbiAgICAkJC51cGRhdGUoKTtcbiAgICByZWFkeSA9IHRydWU7XG4gICAgcnVuX2FsbCgkJC5iZWZvcmVfdXBkYXRlKTtcbiAgICAvLyBgZmFsc2VgIGFzIGEgc3BlY2lhbCBjYXNlIG9mIG5vIERPTSBjb21wb25lbnRcbiAgICAkJC5mcmFnbWVudCA9IGNyZWF0ZV9mcmFnbWVudCA/IGNyZWF0ZV9mcmFnbWVudCgkJC5jdHgpIDogZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMudGFyZ2V0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4ob3B0aW9ucy50YXJnZXQpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICQkLmZyYWdtZW50ICYmICQkLmZyYWdtZW50Lmwobm9kZXMpO1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaChkZXRhY2gpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICQkLmZyYWdtZW50ICYmICQkLmZyYWdtZW50LmMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbnRybylcbiAgICAgICAgICAgIHRyYW5zaXRpb25faW4oY29tcG9uZW50LiQkLmZyYWdtZW50KTtcbiAgICAgICAgbW91bnRfY29tcG9uZW50KGNvbXBvbmVudCwgb3B0aW9ucy50YXJnZXQsIG9wdGlvbnMuYW5jaG9yKTtcbiAgICAgICAgZmx1c2goKTtcbiAgICB9XG4gICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KHBhcmVudF9jb21wb25lbnQpO1xufVxubGV0IFN2ZWx0ZUVsZW1lbnQ7XG5pZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgU3ZlbHRlRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgdG9kbzogaW1wcm92ZSB0eXBpbmdzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLiQkLnNsb3R0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIHRvZG86IGltcHJvdmUgdHlwaW5nc1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQodGhpcy4kJC5zbG90dGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyLCBfb2xkVmFsdWUsIG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzW2F0dHJdID0gbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgJGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBkZXN0cm95X2NvbXBvbmVudCh0aGlzLCAxKTtcbiAgICAgICAgICAgIHRoaXMuJGRlc3Ryb3kgPSBub29wO1xuICAgICAgICB9XG4gICAgICAgICRvbih0eXBlLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gVE9ETyBzaG91bGQgdGhpcyBkZWxlZ2F0ZSB0byBhZGRFdmVudExpc3RlbmVyP1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2tzID0gKHRoaXMuJCQuY2FsbGJhY2tzW3R5cGVdIHx8ICh0aGlzLiQkLmNhbGxiYWNrc1t0eXBlXSA9IFtdKSk7XG4gICAgICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAkc2V0KCQkcHJvcHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiQkc2V0ICYmICFpc19lbXB0eSgkJHByb3BzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJCQuc2tpcF9ib3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy4kJHNldCgkJHByb3BzKTtcbiAgICAgICAgICAgICAgICB0aGlzLiQkLnNraXBfYm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFN2ZWx0ZSBjb21wb25lbnRzLiBVc2VkIHdoZW4gZGV2PWZhbHNlLlxuICovXG5jbGFzcyBTdmVsdGVDb21wb25lbnQge1xuICAgICRkZXN0cm95KCkge1xuICAgICAgICBkZXN0cm95X2NvbXBvbmVudCh0aGlzLCAxKTtcbiAgICAgICAgdGhpcy4kZGVzdHJveSA9IG5vb3A7XG4gICAgfVxuICAgICRvbih0eXBlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSAodGhpcy4kJC5jYWxsYmFja3NbdHlwZV0gfHwgKHRoaXMuJCQuY2FsbGJhY2tzW3R5cGVdID0gW10pKTtcbiAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAkc2V0KCQkcHJvcHMpIHtcbiAgICAgICAgaWYgKHRoaXMuJCRzZXQgJiYgIWlzX2VtcHR5KCQkcHJvcHMpKSB7XG4gICAgICAgICAgICB0aGlzLiQkLnNraXBfYm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kJHNldCgkJHByb3BzKTtcbiAgICAgICAgICAgIHRoaXMuJCQuc2tpcF9ib3VuZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaF9kZXYodHlwZSwgZGV0YWlsKSB7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21fZXZlbnQodHlwZSwgT2JqZWN0LmFzc2lnbih7IHZlcnNpb246ICczLjMyLjMnIH0sIGRldGFpbCkpKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZF9kZXYodGFyZ2V0LCBub2RlKSB7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01JbnNlcnQnLCB7IHRhcmdldCwgbm9kZSB9KTtcbiAgICBhcHBlbmQodGFyZ2V0LCBub2RlKTtcbn1cbmZ1bmN0aW9uIGluc2VydF9kZXYodGFyZ2V0LCBub2RlLCBhbmNob3IpIHtcbiAgICBkaXNwYXRjaF9kZXYoJ1N2ZWx0ZURPTUluc2VydCcsIHsgdGFyZ2V0LCBub2RlLCBhbmNob3IgfSk7XG4gICAgaW5zZXJ0KHRhcmdldCwgbm9kZSwgYW5jaG9yKTtcbn1cbmZ1bmN0aW9uIGRldGFjaF9kZXYobm9kZSkge1xuICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NUmVtb3ZlJywgeyBub2RlIH0pO1xuICAgIGRldGFjaChub2RlKTtcbn1cbmZ1bmN0aW9uIGRldGFjaF9iZXR3ZWVuX2RldihiZWZvcmUsIGFmdGVyKSB7XG4gICAgd2hpbGUgKGJlZm9yZS5uZXh0U2libGluZyAmJiBiZWZvcmUubmV4dFNpYmxpbmcgIT09IGFmdGVyKSB7XG4gICAgICAgIGRldGFjaF9kZXYoYmVmb3JlLm5leHRTaWJsaW5nKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZXRhY2hfYmVmb3JlX2RldihhZnRlcikge1xuICAgIHdoaWxlIChhZnRlci5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgZGV0YWNoX2RldihhZnRlci5wcmV2aW91c1NpYmxpbmcpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRldGFjaF9hZnRlcl9kZXYoYmVmb3JlKSB7XG4gICAgd2hpbGUgKGJlZm9yZS5uZXh0U2libGluZykge1xuICAgICAgICBkZXRhY2hfZGV2KGJlZm9yZS5uZXh0U2libGluZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gbGlzdGVuX2Rldihub2RlLCBldmVudCwgaGFuZGxlciwgb3B0aW9ucywgaGFzX3ByZXZlbnRfZGVmYXVsdCwgaGFzX3N0b3BfcHJvcGFnYXRpb24pIHtcbiAgICBjb25zdCBtb2RpZmllcnMgPSBvcHRpb25zID09PSB0cnVlID8gWydjYXB0dXJlJ10gOiBvcHRpb25zID8gQXJyYXkuZnJvbShPYmplY3Qua2V5cyhvcHRpb25zKSkgOiBbXTtcbiAgICBpZiAoaGFzX3ByZXZlbnRfZGVmYXVsdClcbiAgICAgICAgbW9kaWZpZXJzLnB1c2goJ3ByZXZlbnREZWZhdWx0Jyk7XG4gICAgaWYgKGhhc19zdG9wX3Byb3BhZ2F0aW9uKVxuICAgICAgICBtb2RpZmllcnMucHVzaCgnc3RvcFByb3BhZ2F0aW9uJyk7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01BZGRFdmVudExpc3RlbmVyJywgeyBub2RlLCBldmVudCwgaGFuZGxlciwgbW9kaWZpZXJzIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBsaXN0ZW4obm9kZSwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NUmVtb3ZlRXZlbnRMaXN0ZW5lcicsIHsgbm9kZSwgZXZlbnQsIGhhbmRsZXIsIG1vZGlmaWVycyB9KTtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgIH07XG59XG5mdW5jdGlvbiBhdHRyX2Rldihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgYXR0cihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICBpZiAodmFsdWUgPT0gbnVsbClcbiAgICAgICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01SZW1vdmVBdHRyaWJ1dGUnLCB7IG5vZGUsIGF0dHJpYnV0ZSB9KTtcbiAgICBlbHNlXG4gICAgICAgIGRpc3BhdGNoX2RldignU3ZlbHRlRE9NU2V0QXR0cmlidXRlJywgeyBub2RlLCBhdHRyaWJ1dGUsIHZhbHVlIH0pO1xufVxuZnVuY3Rpb24gcHJvcF9kZXYobm9kZSwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgbm9kZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICBkaXNwYXRjaF9kZXYoJ1N2ZWx0ZURPTVNldFByb3BlcnR5JywgeyBub2RlLCBwcm9wZXJ0eSwgdmFsdWUgfSk7XG59XG5mdW5jdGlvbiBkYXRhc2V0X2Rldihub2RlLCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICBub2RlLmRhdGFzZXRbcHJvcGVydHldID0gdmFsdWU7XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01TZXREYXRhc2V0JywgeyBub2RlLCBwcm9wZXJ0eSwgdmFsdWUgfSk7XG59XG5mdW5jdGlvbiBzZXRfZGF0YV9kZXYodGV4dCwgZGF0YSkge1xuICAgIGRhdGEgPSAnJyArIGRhdGE7XG4gICAgaWYgKHRleHQud2hvbGVUZXh0ID09PSBkYXRhKVxuICAgICAgICByZXR1cm47XG4gICAgZGlzcGF0Y2hfZGV2KCdTdmVsdGVET01TZXREYXRhJywgeyBub2RlOiB0ZXh0LCBkYXRhIH0pO1xuICAgIHRleHQuZGF0YSA9IGRhdGE7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZV9lYWNoX2FyZ3VtZW50KGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnc3RyaW5nJyAmJiAhKGFyZyAmJiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBhcmcpKSB7XG4gICAgICAgIGxldCBtc2cgPSAneyNlYWNofSBvbmx5IGl0ZXJhdGVzIG92ZXIgYXJyYXktbGlrZSBvYmplY3RzLic7XG4gICAgICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIGFyZyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gYXJnKSB7XG4gICAgICAgICAgICBtc2cgKz0gJyBZb3UgY2FuIHVzZSBhIHNwcmVhZCB0byBjb252ZXJ0IHRoaXMgaXRlcmFibGUgaW50byBhbiBhcnJheS4nO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlX3Nsb3RzKG5hbWUsIHNsb3QsIGtleXMpIHtcbiAgICBmb3IgKGNvbnN0IHNsb3Rfa2V5IG9mIE9iamVjdC5rZXlzKHNsb3QpKSB7XG4gICAgICAgIGlmICghfmtleXMuaW5kZXhPZihzbG90X2tleSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgPCR7bmFtZX0+IHJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgc2xvdCBcIiR7c2xvdF9rZXl9XCIuYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFN2ZWx0ZSBjb21wb25lbnRzIHdpdGggc29tZSBtaW5vciBkZXYtZW5oYW5jZW1lbnRzLiBVc2VkIHdoZW4gZGV2PXRydWUuXG4gKi9cbmNsYXNzIFN2ZWx0ZUNvbXBvbmVudERldiBleHRlbmRzIFN2ZWx0ZUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICBpZiAoIW9wdGlvbnMgfHwgKCFvcHRpb25zLnRhcmdldCAmJiAhb3B0aW9ucy4kJGlubGluZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIid0YXJnZXQnIGlzIGEgcmVxdWlyZWQgb3B0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgICRkZXN0cm95KCkge1xuICAgICAgICBzdXBlci4kZGVzdHJveSgpO1xuICAgICAgICB0aGlzLiRkZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnQgd2FzIGFscmVhZHkgZGVzdHJveWVkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgICAgICB9O1xuICAgIH1cbiAgICAkY2FwdHVyZV9zdGF0ZSgpIHsgfVxuICAgICRpbmplY3Rfc3RhdGUoKSB7IH1cbn1cbi8qKlxuICogQmFzZSBjbGFzcyB0byBjcmVhdGUgc3Ryb25nbHkgdHlwZWQgU3ZlbHRlIGNvbXBvbmVudHMuXG4gKiBUaGlzIG9ubHkgZXhpc3RzIGZvciB0eXBpbmcgcHVycG9zZXMgYW5kIHNob3VsZCBiZSB1c2VkIGluIGAuZC50c2AgZmlsZXMuXG4gKlxuICogIyMjIEV4YW1wbGU6XG4gKlxuICogWW91IGhhdmUgY29tcG9uZW50IGxpYnJhcnkgb24gbnBtIGNhbGxlZCBgY29tcG9uZW50LWxpYnJhcnlgLCBmcm9tIHdoaWNoXG4gKiB5b3UgZXhwb3J0IGEgY29tcG9uZW50IGNhbGxlZCBgTXlDb21wb25lbnRgLiBGb3IgU3ZlbHRlK1R5cGVTY3JpcHQgdXNlcnMsXG4gKiB5b3Ugd2FudCB0byBwcm92aWRlIHR5cGluZ3MuIFRoZXJlZm9yZSB5b3UgY3JlYXRlIGEgYGluZGV4LmQudHNgOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IFN2ZWx0ZUNvbXBvbmVudFR5cGVkIH0gZnJvbSBcInN2ZWx0ZVwiO1xuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50VHlwZWQ8e2Zvbzogc3RyaW5nfT4ge31cbiAqIGBgYFxuICogVHlwaW5nIHRoaXMgbWFrZXMgaXQgcG9zc2libGUgZm9yIElERXMgbGlrZSBWUyBDb2RlIHdpdGggdGhlIFN2ZWx0ZSBleHRlbnNpb25cbiAqIHRvIHByb3ZpZGUgaW50ZWxsaXNlbnNlIGFuZCB0byB1c2UgdGhlIGNvbXBvbmVudCBsaWtlIHRoaXMgaW4gYSBTdmVsdGUgZmlsZVxuICogd2l0aCBUeXBlU2NyaXB0OlxuICogYGBgc3ZlbHRlXG4gKiA8c2NyaXB0IGxhbmc9XCJ0c1wiPlxuICogXHRpbXBvcnQgeyBNeUNvbXBvbmVudCB9IGZyb20gXCJjb21wb25lbnQtbGlicmFyeVwiO1xuICogPC9zY3JpcHQ+XG4gKiA8TXlDb21wb25lbnQgZm9vPXsnYmFyJ30gLz5cbiAqIGBgYFxuICpcbiAqICMjIyMgV2h5IG5vdCBtYWtlIHRoaXMgcGFydCBvZiBgU3ZlbHRlQ29tcG9uZW50KERldilgP1xuICogQmVjYXVzZVxuICogYGBgdHNcbiAqIGNsYXNzIEFTdWJjbGFzc09mU3ZlbHRlQ29tcG9uZW50IGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50PHtmb286IHN0cmluZ30+IHt9XG4gKiBjb25zdCBjb21wb25lbnQ6IHR5cGVvZiBTdmVsdGVDb21wb25lbnQgPSBBU3ViY2xhc3NPZlN2ZWx0ZUNvbXBvbmVudDtcbiAqIGBgYFxuICogd2lsbCB0aHJvdyBhIHR5cGUgZXJyb3IsIHNvIHdlIG5lZWQgdG8gc2VwZXJhdGUgdGhlIG1vcmUgc3RyaWN0bHkgdHlwZWQgY2xhc3MuXG4gKi9cbmNsYXNzIFN2ZWx0ZUNvbXBvbmVudFR5cGVkIGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50RGV2IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGxvb3BfZ3VhcmQodGltZW91dCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID4gdGltZW91dCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmZpbml0ZSBsb29wIGRldGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgeyBIdG1sVGFnLCBTdmVsdGVDb21wb25lbnQsIFN2ZWx0ZUNvbXBvbmVudERldiwgU3ZlbHRlQ29tcG9uZW50VHlwZWQsIFN2ZWx0ZUVsZW1lbnQsIGFjdGlvbl9kZXN0cm95ZXIsIGFkZF9hdHRyaWJ1dGUsIGFkZF9jbGFzc2VzLCBhZGRfZmx1c2hfY2FsbGJhY2ssIGFkZF9sb2NhdGlvbiwgYWRkX3JlbmRlcl9jYWxsYmFjaywgYWRkX3Jlc2l6ZV9saXN0ZW5lciwgYWRkX3RyYW5zZm9ybSwgYWZ0ZXJVcGRhdGUsIGFwcGVuZCwgYXBwZW5kX2RldiwgYXNzaWduLCBhdHRyLCBhdHRyX2RldiwgYXR0cmlidXRlX3RvX29iamVjdCwgYmVmb3JlVXBkYXRlLCBiaW5kLCBiaW5kaW5nX2NhbGxiYWNrcywgYmxhbmtfb2JqZWN0LCBidWJibGUsIGNoZWNrX291dHJvcywgY2hpbGRyZW4sIGNsYWltX2NvbXBvbmVudCwgY2xhaW1fZWxlbWVudCwgY2xhaW1fc3BhY2UsIGNsYWltX3RleHQsIGNsZWFyX2xvb3BzLCBjb21wb25lbnRfc3Vic2NyaWJlLCBjb21wdXRlX3Jlc3RfcHJvcHMsIGNvbXB1dGVfc2xvdHMsIGNyZWF0ZUV2ZW50RGlzcGF0Y2hlciwgY3JlYXRlX2FuaW1hdGlvbiwgY3JlYXRlX2JpZGlyZWN0aW9uYWxfdHJhbnNpdGlvbiwgY3JlYXRlX2NvbXBvbmVudCwgY3JlYXRlX2luX3RyYW5zaXRpb24sIGNyZWF0ZV9vdXRfdHJhbnNpdGlvbiwgY3JlYXRlX3Nsb3QsIGNyZWF0ZV9zc3JfY29tcG9uZW50LCBjdXJyZW50X2NvbXBvbmVudCwgY3VzdG9tX2V2ZW50LCBkYXRhc2V0X2RldiwgZGVidWcsIGRlc3Ryb3lfYmxvY2ssIGRlc3Ryb3lfY29tcG9uZW50LCBkZXN0cm95X2VhY2gsIGRldGFjaCwgZGV0YWNoX2FmdGVyX2RldiwgZGV0YWNoX2JlZm9yZV9kZXYsIGRldGFjaF9iZXR3ZWVuX2RldiwgZGV0YWNoX2RldiwgZGlydHlfY29tcG9uZW50cywgZGlzcGF0Y2hfZGV2LCBlYWNoLCBlbGVtZW50LCBlbGVtZW50X2lzLCBlbXB0eSwgZXNjYXBlLCBlc2NhcGVkLCBleGNsdWRlX2ludGVybmFsX3Byb3BzLCBmaXhfYW5kX2Rlc3Ryb3lfYmxvY2ssIGZpeF9hbmRfb3V0cm9fYW5kX2Rlc3Ryb3lfYmxvY2ssIGZpeF9wb3NpdGlvbiwgZmx1c2gsIGdldENvbnRleHQsIGdldF9iaW5kaW5nX2dyb3VwX3ZhbHVlLCBnZXRfY3VycmVudF9jb21wb25lbnQsIGdldF9jdXN0b21fZWxlbWVudHNfc2xvdHMsIGdldF9zbG90X2NoYW5nZXMsIGdldF9zbG90X2NvbnRleHQsIGdldF9zcHJlYWRfb2JqZWN0LCBnZXRfc3ByZWFkX3VwZGF0ZSwgZ2V0X3N0b3JlX3ZhbHVlLCBnbG9iYWxzLCBncm91cF9vdXRyb3MsIGhhbmRsZV9wcm9taXNlLCBoYXNDb250ZXh0LCBoYXNfcHJvcCwgaWRlbnRpdHksIGluaXQsIGluc2VydCwgaW5zZXJ0X2RldiwgaW50cm9zLCBpbnZhbGlkX2F0dHJpYnV0ZV9uYW1lX2NoYXJhY3RlciwgaXNfY2xpZW50LCBpc19jcm9zc29yaWdpbiwgaXNfZW1wdHksIGlzX2Z1bmN0aW9uLCBpc19wcm9taXNlLCBsaXN0ZW4sIGxpc3Rlbl9kZXYsIGxvb3AsIGxvb3BfZ3VhcmQsIG1pc3NpbmdfY29tcG9uZW50LCBtb3VudF9jb21wb25lbnQsIG5vb3AsIG5vdF9lcXVhbCwgbm93LCBudWxsX3RvX2VtcHR5LCBvYmplY3Rfd2l0aG91dF9wcm9wZXJ0aWVzLCBvbkRlc3Ryb3ksIG9uTW91bnQsIG9uY2UsIG91dHJvX2FuZF9kZXN0cm95X2Jsb2NrLCBwcmV2ZW50X2RlZmF1bHQsIHByb3BfZGV2LCBxdWVyeV9zZWxlY3Rvcl9hbGwsIHJhZiwgcnVuLCBydW5fYWxsLCBzYWZlX25vdF9lcXVhbCwgc2NoZWR1bGVfdXBkYXRlLCBzZWxlY3RfbXVsdGlwbGVfdmFsdWUsIHNlbGVjdF9vcHRpb24sIHNlbGVjdF9vcHRpb25zLCBzZWxlY3RfdmFsdWUsIHNlbGYsIHNldENvbnRleHQsIHNldF9hdHRyaWJ1dGVzLCBzZXRfY3VycmVudF9jb21wb25lbnQsIHNldF9jdXN0b21fZWxlbWVudF9kYXRhLCBzZXRfZGF0YSwgc2V0X2RhdGFfZGV2LCBzZXRfaW5wdXRfdHlwZSwgc2V0X2lucHV0X3ZhbHVlLCBzZXRfbm93LCBzZXRfcmFmLCBzZXRfc3RvcmVfdmFsdWUsIHNldF9zdHlsZSwgc2V0X3N2Z19hdHRyaWJ1dGVzLCBzcGFjZSwgc3ByZWFkLCBzdG9wX3Byb3BhZ2F0aW9uLCBzdWJzY3JpYmUsIHN2Z19lbGVtZW50LCB0ZXh0LCB0aWNrLCB0aW1lX3Jhbmdlc190b19hcnJheSwgdG9fbnVtYmVyLCB0b2dnbGVfY2xhc3MsIHRyYW5zaXRpb25faW4sIHRyYW5zaXRpb25fb3V0LCB1cGRhdGVfa2V5ZWRfZWFjaCwgdXBkYXRlX3Nsb3QsIHVwZGF0ZV9zbG90X3NwcmVhZCwgdmFsaWRhdGVfY29tcG9uZW50LCB2YWxpZGF0ZV9lYWNoX2FyZ3VtZW50LCB2YWxpZGF0ZV9lYWNoX2tleXMsIHZhbGlkYXRlX3Nsb3RzLCB2YWxpZGF0ZV9zdG9yZSwgeGxpbmtfYXR0ciB9O1xuIiwiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICB0b3A6IHJlY3QudG9wLFxuICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgIGJvdHRvbTogcmVjdC5ib3R0b20sXG4gICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgIHg6IHJlY3QubGVmdCxcbiAgICB5OiByZWN0LnRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpICE9PSAtMTtcbiAgdmFyIGlzSUUgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQnKSAhPT0gLTE7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB3aXRoaW4gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQocm91bmQoeCAqIGRwcikgLyBkcHIpIHx8IDAsXG4gICAgeTogcm91bmQocm91bmQoeSAqIGRwcikgLyBkcHIpIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cztcblxuICB2YXIgX3JlZjMgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUihvZmZzZXRzKSA6IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMob2Zmc2V0cykgOiBvZmZzZXRzLFxuICAgICAgX3JlZjMkeCA9IF9yZWYzLngsXG4gICAgICB4ID0gX3JlZjMkeCA9PT0gdm9pZCAwID8gMCA6IF9yZWYzJHgsXG4gICAgICBfcmVmMyR5ID0gX3JlZjMueSxcbiAgICAgIHkgPSBfcmVmMyR5ID09PSB2b2lkIDAgPyAwIDogX3JlZjMkeTtcblxuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCkge1xuICAgICAgc2lkZVkgPSBib3R0b207IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgICB5IC09IG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCkge1xuICAgICAgc2lkZVggPSByaWdodDsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgICAgIHggLT0gb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF0gLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPCAyID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY0KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY0LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY0Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB2YXIgdHJhbnNpdGlvblByb3BlcnR5ID0gZ2V0Q29tcHV0ZWRTdHlsZShzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLnRyYW5zaXRpb25Qcm9wZXJ0eSB8fCAnJztcblxuICAgIGlmIChhZGFwdGl2ZSAmJiBbJ3RyYW5zZm9ybScsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25Qcm9wZXJ0eS5pbmRleE9mKHByb3BlcnR5KSA+PSAwO1xuICAgIH0pKSB7XG4gICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IERldGVjdGVkIENTUyB0cmFuc2l0aW9ucyBvbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZycsICdDU1MgcHJvcGVydGllczogXCJ0cmFuc2Zvcm1cIiwgXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIi4nLCAnXFxuXFxuJywgJ0Rpc2FibGUgdGhlIFwiY29tcHV0ZVN0eWxlc1wiIG1vZGlmaWVyXFwncyBgYWRhcHRpdmVgIG9wdGlvbiB0byBhbGxvdycsICdmb3Igc21vb3RoIHRyYW5zaXRpb25zLCBvciByZW1vdmUgdGhlc2UgcHJvcGVydGllcyBmcm9tIHRoZSBDU1MnLCAndHJhbnNpdGlvbiBkZWNsYXJhdGlvbiBvbiB0aGUgcG9wcGVyIGVsZW1lbnQgaWYgb25seSB0cmFuc2l0aW9uaW5nJywgJ29wYWNpdHkgb3IgYmFja2dyb3VuZC1jb2xvciBmb3IgZXhhbXBsZS4nLCAnXFxuXFxuJywgJ1dlIHJlY29tbWVuZCB1c2luZyB0aGUgcG9wcGVyIGVsZW1lbnQgYXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBpbm5lcicsICdlbGVtZW50IHRoYXQgY2FuIGhhdmUgYW55IENTUyBwcm9wZXJ0eSB0cmFuc2l0aW9uZWQgZm9yIGFuaW1hdGlvbnMuJ10uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvblxuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7IC8vIE5COiBUaGlzIGlzbid0IHN1cHBvcnRlZCBvbiBpT1MgPD0gMTIuIElmIHRoZSBrZXlib2FyZCBpcyBvcGVuLCB0aGUgcG9wcGVyXG4gIC8vIGNhbiBiZSBvYnNjdXJlZCB1bmRlcm5lYXRoIGl0LlxuICAvLyBBbHNvLCBgaHRtbC5jbGllbnRIZWlnaHRgIGFkZHMgdGhlIGJvdHRvbSBiYXIgaGVpZ2h0IGluIFNhZmFyaSBpT1MsIGV2ZW5cbiAgLy8gaWYgaXQgaXNuJ3Qgb3Blbiwgc28gaWYgdGhpcyBpc24ndCBhdmFpbGFibGUsIHRoZSBwb3BwZXIgd2lsbCBiZSBkZXRlY3RlZFxuICAvLyB0byBvdmVyZmxvdyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gdG9vIGVhcmx5LlxuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0OyAvLyBVc2VzIExheW91dCBWaWV3cG9ydCAobGlrZSBDaHJvbWU7IFNhZmFyaSBkb2VzIG5vdCBjdXJyZW50bHkpXG4gICAgLy8gSW4gQ2hyb21lLCBpdCByZXR1cm5zIGEgdmFsdWUgdmVyeSBjbG9zZSB0byAwICgrLy0pIGJ1dCBjb250YWlucyByb3VuZGluZ1xuICAgIC8vIGVycm9ycyBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgc28gd2UgbmVlZCB0byBjaGVjayBwcmVjaXNpb24uXG4gICAgLy8gU2FmYXJpIHJldHVybnMgYSBudW1iZXIgPD0gMCwgdXN1YWxseSA8IC0xIHdoZW4gcGluY2gtem9vbWVkXG4gICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gZmFpbHMgaW4gbW9iaWxlIGVtdWxhdGlvbiBtb2RlIGluIENocm9tZS5cbiAgICAvLyBNYXRoLmFicyh3aW4uaW5uZXJXaWR0aCAvIHZpc3VhbFZpZXdwb3J0LnNjYWxlIC0gdmlzdWFsVmlld3BvcnQud2lkdGgpIDxcbiAgICAvLyAwLjAwMVxuICAgIC8vIEZhbGxiYWNrIGhlcmU6IFwiTm90IFNhZmFyaVwiIHVzZXJBZ2VudFxuXG4gICAgaWYgKCEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50KSkgOiBpc0hUTUxFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcmVmZXJlbmNlRWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlRWxlbWVudCk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFRoZSBgYWxsb3dlZEF1dG9QbGFjZW1lbnRzYCBvcHRpb24gZGlkIG5vdCBhbGxvdyBhbnknLCAncGxhY2VtZW50cy4gRW5zdXJlIHRoZSBgcGxhY2VtZW50YCBvcHRpb24gbWF0Y2hlcyB0aGUgdmFyaWF0aW9uJywgJ29mIHRoZSBhbGxvd2VkIHBsYWNlbWVudHMuJywgJ0ZvciBleGFtcGxlLCBcImF1dG9cIiBjYW5ub3QgYmUgdXNlZCB0byBhbGxvdyBcImJvdHRvbS1zdGFydFwiLicsICdVc2UgXCJhdXRvLXN0YXJ0XCIgaW5zdGVhZC4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgd2l0aGluIGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcyB8fCBjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gdGV0aGVyT2Zmc2V0VmFsdWUgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIHRldGhlck9mZnNldFZhbHVlO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyB0ZXRoZXJPZmZzZXRWYWx1ZSA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgdGV0aGVyT2Zmc2V0VmFsdWU7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdW21haW5BeGlzXSA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4oX21pbiwgdGV0aGVyTWluKSA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IG1hdGhNYXgoX21heCwgdGV0aGVyTWF4KSA6IF9tYXgpO1xuXG4gICAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjsgLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQpO1xuICB2YXIgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KHN0cikge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gW10uY29uY2F0KGFyZ3MpLnJlZHVjZShmdW5jdGlvbiAocCwgYykge1xuICAgIHJldHVybiBwLnJlcGxhY2UoLyVzLywgYyk7XG4gIH0sIHN0cik7XG59IiwiaW1wb3J0IGZvcm1hdCBmcm9tIFwiLi9mb3JtYXQuanNcIjtcbmltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG52YXIgSU5WQUxJRF9NT0RJRklFUl9FUlJPUiA9ICdQb3BwZXI6IG1vZGlmaWVyIFwiJXNcIiBwcm92aWRlZCBhbiBpbnZhbGlkICVzIHByb3BlcnR5LCBleHBlY3RlZCAlcyBidXQgZ290ICVzJztcbnZhciBNSVNTSU5HX0RFUEVOREVOQ1lfRVJST1IgPSAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcmVxdWlyZXMgXCIlc1wiLCBidXQgXCIlc1wiIG1vZGlmaWVyIGlzIG5vdCBhdmFpbGFibGUnO1xudmFyIFZBTElEX1BST1BFUlRJRVMgPSBbJ25hbWUnLCAnZW5hYmxlZCcsICdwaGFzZScsICdmbicsICdlZmZlY3QnLCAncmVxdWlyZXMnLCAnb3B0aW9ucyddO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIE9iamVjdC5rZXlzKG1vZGlmaWVyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgJ1wibmFtZVwiJywgJ1wic3RyaW5nXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5uYW1lKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVuYWJsZWRcIicsICdcImJvb2xlYW5cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmVuYWJsZWQpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAncGhhc2UnOlxuICAgICAgICAgIGlmIChtb2RpZmllclBoYXNlcy5pbmRleE9mKG1vZGlmaWVyLnBoYXNlKSA8IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcInBoYXNlXCInLCBcImVpdGhlciBcIiArIG1vZGlmaWVyUGhhc2VzLmpvaW4oJywgJyksIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnBoYXNlKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZm4nOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIuZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImZuXCInLCAnXCJmdW5jdGlvblwiJywgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIuZm4pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlZmZlY3QnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIuZWZmZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChJTlZBTElEX01PRElGSUVSX0VSUk9SLCBtb2RpZmllci5uYW1lLCAnXCJlZmZlY3RcIicsICdcImZ1bmN0aW9uXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5mbikgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlcXVpcmVzJzpcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobW9kaWZpZXIucmVxdWlyZXMpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChJTlZBTElEX01PRElGSUVSX0VSUk9SLCBtb2RpZmllci5uYW1lLCAnXCJyZXF1aXJlc1wiJywgJ1wiYXJyYXlcIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVxdWlyZXNJZkV4aXN0cyc6XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChJTlZBTElEX01PRElGSUVSX0VSUk9SLCBtb2RpZmllci5uYW1lLCAnXCJyZXF1aXJlc0lmRXhpc3RzXCInLCAnXCJhcnJheVwiJywgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cykgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgICBjYXNlICdkYXRhJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJQb3BwZXJKUzogYW4gaW52YWxpZCBwcm9wZXJ0eSBoYXMgYmVlbiBwcm92aWRlZCB0byB0aGUgXFxcIlwiICsgbW9kaWZpZXIubmFtZSArIFwiXFxcIiBtb2RpZmllciwgdmFsaWQgcHJvcGVydGllcyBhcmUgXCIgKyBWQUxJRF9QUk9QRVJUSUVTLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIFwiXFxcIlwiICsgcyArIFwiXFxcIlwiO1xuICAgICAgICAgIH0pLmpvaW4oJywgJykgKyBcIjsgYnV0IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgcHJvdmlkZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBtb2RpZmllci5yZXF1aXJlcyAmJiBtb2RpZmllci5yZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1aXJlbWVudCkge1xuICAgICAgICBpZiAobW9kaWZpZXJzLmZpbmQoZnVuY3Rpb24gKG1vZCkge1xuICAgICAgICAgIHJldHVybiBtb2QubmFtZSA9PT0gcmVxdWlyZW1lbnQ7XG4gICAgICAgIH0pID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChNSVNTSU5HX0RFUEVOREVOQ1lfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgcmVxdWlyZW1lbnQsIHJlcXVpcmVtZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxdWVCeShhcnIsIGZuKSB7XG4gIHZhciBpZGVudGlmaWVycyA9IG5ldyBTZXQoKTtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgaWRlbnRpZmllciA9IGZuKGl0ZW0pO1xuXG4gICAgaWYgKCFpZGVudGlmaWVycy5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgIGlkZW50aWZpZXJzLmFkZChpZGVudGlmaWVyKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IHZhbGlkYXRlTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgdW5pcXVlQnkgZnJvbSBcIi4vdXRpbHMvdW5pcXVlQnkuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG52YXIgSU5WQUxJRF9FTEVNRU5UX0VSUk9SID0gJ1BvcHBlcjogSW52YWxpZCByZWZlcmVuY2Ugb3IgcG9wcGVyIGFyZ3VtZW50IHByb3ZpZGVkLiBUaGV5IG11c3QgYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgdmlydHVhbCBlbGVtZW50Lic7XG52YXIgSU5GSU5JVEVfTE9PUF9FUlJPUiA9ICdQb3BwZXI6IEFuIGluZmluaXRlIGxvb3AgaW4gdGhlIG1vZGlmaWVycyBjeWNsZSBoYXMgYmVlbiBkZXRlY3RlZCEgVGhlIGN5Y2xlIGhhcyBiZWVuIGludGVycnVwdGVkIHRvIHByZXZlbnQgYSBicm93c2VyIGNyYXNoLic7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pOyAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbW9kaWZpZXJzIHNvIHRoYXQgdGhlIGNvbnN1bWVyIHdpbGwgZ2V0IHdhcm5lZFxuICAgICAgICAvLyBpZiBvbmUgb2YgdGhlIG1vZGlmaWVycyBpcyBpbnZhbGlkIGZvciBhbnkgcmVhc29uXG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgIHZhciBtb2RpZmllcnMgPSB1bmlxdWVCeShbXS5jb25jYXQob3JkZXJlZE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpO1xuXG4gICAgICAgICAgaWYgKGdldEJhc2VQbGFjZW1lbnQoc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgICAgICAgICB2YXIgZmxpcE1vZGlmaWVyID0gc3RhdGUub3JkZXJlZE1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYyLm5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAnZmxpcCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFmbGlwTW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhdXRvXCIgcGxhY2VtZW50cyByZXF1aXJlIHRoZSBcImZsaXBcIiBtb2RpZmllciBiZScsICdwcmVzZW50IGFuZCBlbmFibGVkIHRvIHdvcmsuJ10uam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBvcHBlciksXG4gICAgICAgICAgICAgIG1hcmdpblRvcCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblRvcCxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCxcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdDsgLy8gV2Ugbm8gbG9uZ2VyIHRha2UgaW50byBhY2NvdW50IGBtYXJnaW5zYCBvbiB0aGUgcG9wcGVyLCBhbmQgaXQgY2FuXG4gICAgICAgICAgLy8gY2F1c2UgYnVncyB3aXRoIHBvc2l0aW9uaW5nLCBzbyB3ZSdsbCB3YXJuIHRoZSBjb25zdW1lclxuXG5cbiAgICAgICAgICBpZiAoW21hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdF0uc29tZShmdW5jdGlvbiAobWFyZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXJnaW4pO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IENTUyBcIm1hcmdpblwiIHN0eWxlcyBjYW5ub3QgYmUgdXNlZCB0byBhcHBseSBwYWRkaW5nJywgJ2JldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50IG9yIGJvdW5kYXJ5LicsICdUbyByZXBsaWNhdGUgbWFyZ2luLCB1c2UgdGhlIGBvZmZzZXRgIG1vZGlmaWVyLCBhcyB3ZWxsIGFzJywgJ3RoZSBgcGFkZGluZ2Agb3B0aW9uIGluIHRoZSBgcHJldmVudE92ZXJmbG93YCBhbmQgYGZsaXBgJywgJ21vZGlmaWVycy4nXS5qb2luKCcgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fZGVidWdfbG9vcHNfXyA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgX19kZWJ1Z19sb29wc19fICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChfX2RlYnVnX2xvb3BzX18gPiAxMDApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTkZJTklURV9MT09QX0VSUk9SKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmMyRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsImltcG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcbmltcG9ydCB7IFNjb3BlIH0gZnJvbSAnb2JzaWRpYW4nO1xuZXhwb3J0IGNvbnN0IHdyYXBBcm91bmQgPSAodmFsdWUsIHNpemUpID0+ICgodmFsdWUgJSBzaXplKSArIHNpemUpICUgc2l6ZTtcbi8qKlxuICogUmVwcm9kdWNlZCB3aXRoIHBlcm1pc3Npb24gZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2xpYW1jYWluL29ic2lkaWFuLXBlcmlvZGljLW5vdGVzL2Jsb2IvMTBmYTM1ODc0ZDkyNzUwNTA4OTY3ZDRmMWU1OGIzZmEwZWI4Nzk5Ni9zcmMvdWkvc3VnZ2VzdC50c1xuICogQXV0aG9yOiBMaWFtIENhaW5cbiAqL1xuY2xhc3MgU3VnZ2VzdCB7XG4gICAgY29uc3RydWN0b3Iob3duZXIsIGNvbnRhaW5lckVsLCBzY29wZSkge1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbkNsaWNrID0gKGV2ZW50LCBlbCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnN1Z2dlc3Rpb25zLmluZGV4T2YoZWwpO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW0oaXRlbSwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy51c2VTZWxlY3RlZEl0ZW0oZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbk1vdXNlb3ZlciA9IChfZXZlbnQsIGVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zdWdnZXN0aW9ucy5pbmRleE9mKGVsKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtKGl0ZW0sIGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vd25lciA9IG93bmVyO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckVsID0gY29udGFpbmVyRWw7XG4gICAgICAgIGNvbnRhaW5lckVsLm9uKCdjbGljaycsICcuc3VnZ2VzdGlvbi1pdGVtJywgdGhpcy5vblN1Z2dlc3Rpb25DbGljayk7XG4gICAgICAgIGNvbnRhaW5lckVsLm9uKCdtb3VzZW1vdmUnLCAnLnN1Z2dlc3Rpb24taXRlbScsIHRoaXMub25TdWdnZXN0aW9uTW91c2VvdmVyKTtcbiAgICAgICAgc2NvcGUucmVnaXN0ZXIoW10sICdBcnJvd1VwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmlzQ29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW0odGhpcy5zZWxlY3RlZEl0ZW0gLSAxLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzY29wZS5yZWdpc3RlcihbXSwgJ0Fycm93RG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtICsgMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc2NvcGUucmVnaXN0ZXIoW10sICdFbnRlcicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFldmVudC5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlU2VsZWN0ZWRJdGVtKGV2ZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRTdWdnZXN0aW9ucyh2YWx1ZXMpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uRWxzID0gW107XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbkVsID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVEaXYoJ3N1Z2dlc3Rpb24taXRlbScpO1xuICAgICAgICAgICAgdGhpcy5vd25lci5yZW5kZXJTdWdnZXN0aW9uKHZhbHVlLCBzdWdnZXN0aW9uRWwpO1xuICAgICAgICAgICAgc3VnZ2VzdGlvbkVscy5wdXNoKHN1Z2dlc3Rpb25FbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcztcbiAgICAgICAgdGhpcy5zdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25FbHM7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtKDAsIGZhbHNlKTtcbiAgICB9XG4gICAgdXNlU2VsZWN0ZWRJdGVtKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWVzW3RoaXMuc2VsZWN0ZWRJdGVtXTtcbiAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vd25lci5zZWxlY3RTdWdnZXN0aW9uKGN1cnJlbnRWYWx1ZSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldFNlbGVjdGVkSXRlbShzZWxlY3RlZEluZGV4LCBzY3JvbGxJbnRvVmlldykge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkSW5kZXggPSB3cmFwQXJvdW5kKHNlbGVjdGVkSW5kZXgsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcHJldlNlbGVjdGVkU3VnZ2VzdGlvbiA9IHRoaXMuc3VnZ2VzdGlvbnNbdGhpcy5zZWxlY3RlZEl0ZW1dO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFN1Z2dlc3Rpb24gPSB0aGlzLnN1Z2dlc3Rpb25zW25vcm1hbGl6ZWRJbmRleF07XG4gICAgICAgIHByZXZTZWxlY3RlZFN1Z2dlc3Rpb24gPT09IG51bGwgfHwgcHJldlNlbGVjdGVkU3VnZ2VzdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJldlNlbGVjdGVkU3VnZ2VzdGlvbi5yZW1vdmVDbGFzcygnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgc2VsZWN0ZWRTdWdnZXN0aW9uID09PSBudWxsIHx8IHNlbGVjdGVkU3VnZ2VzdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRTdWdnZXN0aW9uLmFkZENsYXNzKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG5vcm1hbGl6ZWRJbmRleDtcbiAgICAgICAgaWYgKHNjcm9sbEludG9WaWV3KSB7XG4gICAgICAgICAgICBzZWxlY3RlZFN1Z2dlc3Rpb24uc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZXByb2R1Y2VkIHdpdGggcGVybWlzc2lvbiBmcm9tXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbGlhbWNhaW4vb2JzaWRpYW4tcGVyaW9kaWMtbm90ZXMvYmxvYi8xMGZhMzU4NzRkOTI3NTA1MDg5NjdkNGYxZTU4YjNmYTBlYjg3OTk2L3NyYy91aS9zdWdnZXN0LnRzXG4gKiBBdXRob3I6IExpYW0gQ2FpblxuICovXG5jbGFzcyBUZXh0SW5wdXRTdWdnZXN0IHtcbiAgICBjb25zdHJ1Y3RvcihhcHAsIGlucHV0RWwpIHtcbiAgICAgICAgdGhpcy5vcGVuID0gKGNvbnRhaW5lciwgaW5wdXRFbCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHRoaXMuYXBwLmtleW1hcC5wdXNoU2NvcGUodGhpcy5zY29wZSk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5zdWdnZXN0RWwpO1xuICAgICAgICAgICAgdGhpcy5wb3BwZXIgPSBjcmVhdGVQb3BwZXIoaW5wdXRFbCwgdGhpcy5zdWdnZXN0RWwsIHtcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2FtZVdpZHRoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmbjogKHsgc3RhdGUsIGluc3RhbmNlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiBwb3NpdGlvbmluZyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIHR3aWNlIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBwYXNzIC0gcG9zaXRpb25pbmcgaXQgYWNjb3JkaW5nIHRvIHRoZSB3aWR0aCBvZiB0aGUgcG9wcGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2Vjb25kIHBhc3MgLSBwb3NpdGlvbiBpdCB3aXRoIHRoZSB3aWR0aCBib3VuZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGVhcmx5IGV4aXQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFdpZHRoID0gYCR7c3RhdGUucmVjdHMucmVmZXJlbmNlLndpZHRofXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGVzLnBvcHBlci53aWR0aCA9PT0gdGFyZ2V0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZXMucG9wcGVyLndpZHRoID0gdGFyZ2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHRoaXMuYXBwLmtleW1hcC5wb3BTY29wZSh0aGlzLnNjb3BlKTtcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdC5zZXRTdWdnZXN0aW9ucyhbXSk7XG4gICAgICAgICAgICB0aGlzLnBvcHBlci5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3RFbC5kZXRhY2goKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0U3RyID0gdGhpcy5pbnB1dEVsLnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFN1Z2dlc3Rpb25zKGlucHV0U3RyKTtcbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWdnZXN0LnNldFN1Z2dlc3Rpb25zKHN1Z2dlc3Rpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgICAgIHRoaXMub3Blbih0aGlzLmFwcC5kb20uYXBwQ29udGFpbmVyRWwsIHRoaXMuaW5wdXRFbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgICAgICB0aGlzLmlucHV0RWwgPSBpbnB1dEVsO1xuICAgICAgICB0aGlzLnNjb3BlID0gbmV3IFNjb3BlKCk7XG4gICAgICAgIHRoaXMuc3VnZ2VzdEVsID0gY3JlYXRlRGl2KCdzdWdnZXN0aW9uLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uID0gdGhpcy5zdWdnZXN0RWwuY3JlYXRlRGl2KCdzdWdnZXN0aW9uJyk7XG4gICAgICAgIHRoaXMuc3VnZ2VzdCA9IG5ldyBTdWdnZXN0KHRoaXMsIHN1Z2dlc3Rpb24sIHRoaXMuc2NvcGUpO1xuICAgICAgICB0aGlzLnNjb3BlLnJlZ2lzdGVyKFtdLCAnRXNjYXBlJywgdGhpcy5jbG9zZSk7XG4gICAgICAgIHRoaXMuaW5wdXRFbC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHRoaXMub25JbnB1dENoYW5nZWQpO1xuICAgICAgICB0aGlzLmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uSW5wdXRDaGFuZ2VkKTtcbiAgICAgICAgdGhpcy5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLmNsb3NlKTtcbiAgICAgICAgdGhpcy5zdWdnZXN0RWwub24oJ21vdXNlZG93bicsICcuc3VnZ2VzdGlvbi1jb250YWluZXInLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBTdGF0aWNTdWdnZXN0IGV4dGVuZHMgVGV4dElucHV0U3VnZ2VzdCB7XG4gICAgY29uc3RydWN0b3IoYXBwLCBpbnB1dEVsLCBzdWdnZXN0aW9ucykge1xuICAgICAgICBzdXBlcihhcHAsIGlucHV0RWwpO1xuICAgICAgICB0aGlzLmdldFN1Z2dlc3Rpb25zID0gKGlucHV0U3RyKSA9PiB0aGlzLnN1Z2dlc3Rpb25zLmZpbHRlcigodmFsKSA9PiB2YWwudG9Mb3dlckNhc2UoKS5jb250YWlucyhpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIHRoaXMucmVuZGVyU3VnZ2VzdGlvbiA9IChzdHJpbmcsIGVsKSA9PiB7XG4gICAgICAgICAgICBlbC5zZXRUZXh0KHN0cmluZyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2VsZWN0U3VnZ2VzdGlvbiA9IChzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbC52YWx1ZSA9IHN0cmluZztcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbC50cmlnZ2VyKCdpbnB1dCcpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnM7XG4gICAgfVxufVxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIj5cbiAgaW1wb3J0IHsgb25Nb3VudCB9IGZyb20gJ3N2ZWx0ZSc7XG4gIGltcG9ydCB7IFN0YXRpY1N1Z2dlc3QgfSBmcm9tICcuL3N1Z2dlc3QnO1xuXG4gIGV4cG9ydCBsZXQgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdO1xuICBleHBvcnQgbGV0IHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIGV4cG9ydCBsZXQgdmFsdWU6IHN0cmluZztcbiAgZXhwb3J0IGxldCBjbGFzc2VzOiBzdHJpbmc7XG5cbiAgbGV0IGlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgb25Nb3VudCgoKSA9PiB7XG4gICAgbmV3IFN0YXRpY1N1Z2dlc3Qod2luZG93LmFwcCwgaW5wdXRFbCwgc3VnZ2VzdGlvbnMpO1xuICB9KTtcbjwvc2NyaXB0PlxuXG48aW5wdXRcbiAgY2xhc3M9e2NsYXNzZXN9XG4gIHR5cGU9XCJ0ZXh0XCJcbiAge3BsYWNlaG9sZGVyfVxuICBiaW5kOnRoaXM9e2lucHV0RWx9XG4gIGJpbmQ6dmFsdWVcbi8+XG5cbjxzdHlsZT5cbiAgLmV4cGVuc2UtcGF5ZWUge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLmV4cGVuc2UtY2F0ZWdvcnkge1xuICAgIGZsZXg6IDE7XG4gIH1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgJ29ic2lkaWFuJztcblxuZnVuY3Rpb24gbm9vcCgpIHsgfVxuZnVuY3Rpb24gYXNzaWduKHRhciwgc3JjKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGZvciAoY29uc3QgayBpbiBzcmMpXG4gICAgICAgIHRhcltrXSA9IHNyY1trXTtcbiAgICByZXR1cm4gdGFyO1xufVxuZnVuY3Rpb24gaXNfcHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gcnVuKGZuKSB7XG4gICAgcmV0dXJuIGZuKCk7XG59XG5mdW5jdGlvbiBibGFua19vYmplY3QoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5mdW5jdGlvbiBydW5fYWxsKGZucykge1xuICAgIGZucy5mb3JFYWNoKHJ1bik7XG59XG5mdW5jdGlvbiBpc19mdW5jdGlvbih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09ICdmdW5jdGlvbic7XG59XG5mdW5jdGlvbiBzYWZlX25vdF9lcXVhbChhLCBiKSB7XG4gICAgcmV0dXJuIGEgIT0gYSA/IGIgPT0gYiA6IGEgIT09IGIgfHwgKChhICYmIHR5cGVvZiBhID09PSAnb2JqZWN0JykgfHwgdHlwZW9mIGEgPT09ICdmdW5jdGlvbicpO1xufVxuZnVuY3Rpb24gbm90X2VxdWFsKGEsIGIpIHtcbiAgICByZXR1cm4gYSAhPSBhID8gYiA9PSBiIDogYSAhPT0gYjtcbn1cbmZ1bmN0aW9uIGlzX2VtcHR5KG9iaikge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZV9zbG90KGRlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZm4pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICBjb25zdCBzbG90X2N0eCA9IGdldF9zbG90X2NvbnRleHQoZGVmaW5pdGlvbiwgY3R4LCAkJHNjb3BlLCBmbik7XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uWzBdKHNsb3RfY3R4KTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRfc2xvdF9jb250ZXh0KGRlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZm4pIHtcbiAgICByZXR1cm4gZGVmaW5pdGlvblsxXSAmJiBmblxuICAgICAgICA/IGFzc2lnbigkJHNjb3BlLmN0eC5zbGljZSgpLCBkZWZpbml0aW9uWzFdKGZuKGN0eCkpKVxuICAgICAgICA6ICQkc2NvcGUuY3R4O1xufVxuZnVuY3Rpb24gZ2V0X3Nsb3RfY2hhbmdlcyhkZWZpbml0aW9uLCAkJHNjb3BlLCBkaXJ0eSwgZm4pIHtcbiAgICBpZiAoZGVmaW5pdGlvblsyXSAmJiBmbikge1xuICAgICAgICBjb25zdCBsZXRzID0gZGVmaW5pdGlvblsyXShmbihkaXJ0eSkpO1xuICAgICAgICBpZiAoJCRzY29wZS5kaXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbGV0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGxldHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBtZXJnZWQgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IE1hdGgubWF4KCQkc2NvcGUuZGlydHkubGVuZ3RoLCBsZXRzLmxlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkW2ldID0gJCRzY29wZS5kaXJ0eVtpXSB8IGxldHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAkJHNjb3BlLmRpcnR5IHwgbGV0cztcbiAgICB9XG4gICAgcmV0dXJuICQkc2NvcGUuZGlydHk7XG59XG5mdW5jdGlvbiB1cGRhdGVfc2xvdChzbG90LCBzbG90X2RlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZGlydHksIGdldF9zbG90X2NoYW5nZXNfZm4sIGdldF9zbG90X2NvbnRleHRfZm4pIHtcbiAgICBjb25zdCBzbG90X2NoYW5nZXMgPSBnZXRfc2xvdF9jaGFuZ2VzKHNsb3RfZGVmaW5pdGlvbiwgJCRzY29wZSwgZGlydHksIGdldF9zbG90X2NoYW5nZXNfZm4pO1xuICAgIGlmIChzbG90X2NoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qgc2xvdF9jb250ZXh0ID0gZ2V0X3Nsb3RfY29udGV4dChzbG90X2RlZmluaXRpb24sIGN0eCwgJCRzY29wZSwgZ2V0X3Nsb3RfY29udGV4dF9mbik7XG4gICAgICAgIHNsb3QucChzbG90X2NvbnRleHQsIHNsb3RfY2hhbmdlcyk7XG4gICAgfVxufVxuZnVuY3Rpb24gbnVsbF90b19lbXB0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKHRhcmdldCwgbm9kZSkge1xuICAgIHRhcmdldC5hcHBlbmRDaGlsZChub2RlKTtcbn1cbmZ1bmN0aW9uIGluc2VydCh0YXJnZXQsIG5vZGUsIGFuY2hvcikge1xuICAgIHRhcmdldC5pbnNlcnRCZWZvcmUobm9kZSwgYW5jaG9yIHx8IG51bGwpO1xufVxuZnVuY3Rpb24gZGV0YWNoKG5vZGUpIHtcbiAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG59XG5mdW5jdGlvbiBkZXN0cm95X2VhY2goaXRlcmF0aW9ucywgZGV0YWNoaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVyYXRpb25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChpdGVyYXRpb25zW2ldKVxuICAgICAgICAgICAgaXRlcmF0aW9uc1tpXS5kKGRldGFjaGluZyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSk7XG59XG5mdW5jdGlvbiBzdmdfZWxlbWVudChuYW1lKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBuYW1lKTtcbn1cbmZ1bmN0aW9uIHRleHQoZGF0YSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhKTtcbn1cbmZ1bmN0aW9uIHNwYWNlKCkge1xuICAgIHJldHVybiB0ZXh0KCcgJyk7XG59XG5mdW5jdGlvbiBlbXB0eSgpIHtcbiAgICByZXR1cm4gdGV4dCgnJyk7XG59XG5mdW5jdGlvbiBsaXN0ZW4obm9kZSwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xuICAgIHJldHVybiAoKSA9PiBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gYXR0cihub2RlLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgZWxzZSBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSAhPT0gdmFsdWUpXG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpO1xufVxuZnVuY3Rpb24gc2V0X2F0dHJpYnV0ZXMobm9kZSwgYXR0cmlidXRlcykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG5vZGUuX19wcm90b19fKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmIChhdHRyaWJ1dGVzW2tleV0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdzdHlsZScpIHtcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuY3NzVGV4dCA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXkgPT09ICdfX3ZhbHVlJykge1xuICAgICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGVba2V5XSA9IGF0dHJpYnV0ZXNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkZXNjcmlwdG9yc1trZXldICYmIGRlc2NyaXB0b3JzW2tleV0uc2V0KSB7XG4gICAgICAgICAgICBub2RlW2tleV0gPSBhdHRyaWJ1dGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhdHRyKG5vZGUsIGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShlbGVtZW50LmNoaWxkTm9kZXMpO1xufVxuZnVuY3Rpb24gc2V0X2RhdGEodGV4dCwgZGF0YSkge1xuICAgIGRhdGEgPSAnJyArIGRhdGE7XG4gICAgaWYgKHRleHQud2hvbGVUZXh0ICE9PSBkYXRhKVxuICAgICAgICB0ZXh0LmRhdGEgPSBkYXRhO1xufVxuZnVuY3Rpb24gdG9nZ2xlX2NsYXNzKGVsZW1lbnQsIG5hbWUsIHRvZ2dsZSkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0W3RvZ2dsZSA/ICdhZGQnIDogJ3JlbW92ZSddKG5hbWUpO1xufVxuXG5sZXQgY3VycmVudF9jb21wb25lbnQ7XG5mdW5jdGlvbiBzZXRfY3VycmVudF9jb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgY3VycmVudF9jb21wb25lbnQgPSBjb21wb25lbnQ7XG59XG5mdW5jdGlvbiBnZXRfY3VycmVudF9jb21wb25lbnQoKSB7XG4gICAgaWYgKCFjdXJyZW50X2NvbXBvbmVudClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBjYWxsZWQgb3V0c2lkZSBjb21wb25lbnQgaW5pdGlhbGl6YXRpb24nKTtcbiAgICByZXR1cm4gY3VycmVudF9jb21wb25lbnQ7XG59XG5cbmNvbnN0IGRpcnR5X2NvbXBvbmVudHMgPSBbXTtcbmNvbnN0IGJpbmRpbmdfY2FsbGJhY2tzID0gW107XG5jb25zdCByZW5kZXJfY2FsbGJhY2tzID0gW107XG5jb25zdCBmbHVzaF9jYWxsYmFja3MgPSBbXTtcbmNvbnN0IHJlc29sdmVkX3Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbmxldCB1cGRhdGVfc2NoZWR1bGVkID0gZmFsc2U7XG5mdW5jdGlvbiBzY2hlZHVsZV91cGRhdGUoKSB7XG4gICAgaWYgKCF1cGRhdGVfc2NoZWR1bGVkKSB7XG4gICAgICAgIHVwZGF0ZV9zY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICByZXNvbHZlZF9wcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZF9yZW5kZXJfY2FsbGJhY2soZm4pIHtcbiAgICByZW5kZXJfY2FsbGJhY2tzLnB1c2goZm4pO1xufVxubGV0IGZsdXNoaW5nID0gZmFsc2U7XG5jb25zdCBzZWVuX2NhbGxiYWNrcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIGlmIChmbHVzaGluZylcbiAgICAgICAgcmV0dXJuO1xuICAgIGZsdXNoaW5nID0gdHJ1ZTtcbiAgICBkbyB7XG4gICAgICAgIC8vIGZpcnN0LCBjYWxsIGJlZm9yZVVwZGF0ZSBmdW5jdGlvbnNcbiAgICAgICAgLy8gYW5kIHVwZGF0ZSBjb21wb25lbnRzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlydHlfY29tcG9uZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZGlydHlfY29tcG9uZW50c1tpXTtcbiAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChjb21wb25lbnQpO1xuICAgICAgICAgICAgdXBkYXRlKGNvbXBvbmVudC4kJCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KG51bGwpO1xuICAgICAgICBkaXJ0eV9jb21wb25lbnRzLmxlbmd0aCA9IDA7XG4gICAgICAgIHdoaWxlIChiaW5kaW5nX2NhbGxiYWNrcy5sZW5ndGgpXG4gICAgICAgICAgICBiaW5kaW5nX2NhbGxiYWNrcy5wb3AoKSgpO1xuICAgICAgICAvLyB0aGVuLCBvbmNlIGNvbXBvbmVudHMgYXJlIHVwZGF0ZWQsIGNhbGxcbiAgICAgICAgLy8gYWZ0ZXJVcGRhdGUgZnVuY3Rpb25zLiBUaGlzIG1heSBjYXVzZVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHVwZGF0ZXMuLi5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJfY2FsbGJhY2tzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9IHJlbmRlcl9jYWxsYmFja3NbaV07XG4gICAgICAgICAgICBpZiAoIXNlZW5fY2FsbGJhY2tzLmhhcyhjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAvLyAuLi5zbyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzXG4gICAgICAgICAgICAgICAgc2Vlbl9jYWxsYmFja3MuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcl9jYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICB9IHdoaWxlIChkaXJ0eV9jb21wb25lbnRzLmxlbmd0aCk7XG4gICAgd2hpbGUgKGZsdXNoX2NhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgZmx1c2hfY2FsbGJhY2tzLnBvcCgpKCk7XG4gICAgfVxuICAgIHVwZGF0ZV9zY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBmbHVzaGluZyA9IGZhbHNlO1xuICAgIHNlZW5fY2FsbGJhY2tzLmNsZWFyKCk7XG59XG5mdW5jdGlvbiB1cGRhdGUoJCQpIHtcbiAgICBpZiAoJCQuZnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgJCQudXBkYXRlKCk7XG4gICAgICAgIHJ1bl9hbGwoJCQuYmVmb3JlX3VwZGF0ZSk7XG4gICAgICAgIGNvbnN0IGRpcnR5ID0gJCQuZGlydHk7XG4gICAgICAgICQkLmRpcnR5ID0gWy0xXTtcbiAgICAgICAgJCQuZnJhZ21lbnQgJiYgJCQuZnJhZ21lbnQucCgkJC5jdHgsIGRpcnR5KTtcbiAgICAgICAgJCQuYWZ0ZXJfdXBkYXRlLmZvckVhY2goYWRkX3JlbmRlcl9jYWxsYmFjayk7XG4gICAgfVxufVxuY29uc3Qgb3V0cm9pbmcgPSBuZXcgU2V0KCk7XG5sZXQgb3V0cm9zO1xuZnVuY3Rpb24gZ3JvdXBfb3V0cm9zKCkge1xuICAgIG91dHJvcyA9IHtcbiAgICAgICAgcjogMCxcbiAgICAgICAgYzogW10sXG4gICAgICAgIHA6IG91dHJvcyAvLyBwYXJlbnQgZ3JvdXBcbiAgICB9O1xufVxuZnVuY3Rpb24gY2hlY2tfb3V0cm9zKCkge1xuICAgIGlmICghb3V0cm9zLnIpIHtcbiAgICAgICAgcnVuX2FsbChvdXRyb3MuYyk7XG4gICAgfVxuICAgIG91dHJvcyA9IG91dHJvcy5wO1xufVxuZnVuY3Rpb24gdHJhbnNpdGlvbl9pbihibG9jaywgbG9jYWwpIHtcbiAgICBpZiAoYmxvY2sgJiYgYmxvY2suaSkge1xuICAgICAgICBvdXRyb2luZy5kZWxldGUoYmxvY2spO1xuICAgICAgICBibG9jay5pKGxvY2FsKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmFuc2l0aW9uX291dChibG9jaywgbG9jYWwsIGRldGFjaCwgY2FsbGJhY2spIHtcbiAgICBpZiAoYmxvY2sgJiYgYmxvY2subykge1xuICAgICAgICBpZiAob3V0cm9pbmcuaGFzKGJsb2NrKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb3V0cm9pbmcuYWRkKGJsb2NrKTtcbiAgICAgICAgb3V0cm9zLmMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICBvdXRyb2luZy5kZWxldGUoYmxvY2spO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRldGFjaClcbiAgICAgICAgICAgICAgICAgICAgYmxvY2suZCgxKTtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYmxvY2subyhsb2NhbCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVfcHJvbWlzZShwcm9taXNlLCBpbmZvKSB7XG4gICAgY29uc3QgdG9rZW4gPSBpbmZvLnRva2VuID0ge307XG4gICAgZnVuY3Rpb24gdXBkYXRlKHR5cGUsIGluZGV4LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpbmZvLnRva2VuICE9PSB0b2tlbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaW5mby5yZXNvbHZlZCA9IHZhbHVlO1xuICAgICAgICBsZXQgY2hpbGRfY3R4ID0gaW5mby5jdHg7XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hpbGRfY3R4ID0gY2hpbGRfY3R4LnNsaWNlKCk7XG4gICAgICAgICAgICBjaGlsZF9jdHhba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2NrID0gdHlwZSAmJiAoaW5mby5jdXJyZW50ID0gdHlwZSkoY2hpbGRfY3R4KTtcbiAgICAgICAgbGV0IG5lZWRzX2ZsdXNoID0gZmFsc2U7XG4gICAgICAgIGlmIChpbmZvLmJsb2NrKSB7XG4gICAgICAgICAgICBpZiAoaW5mby5ibG9ja3MpIHtcbiAgICAgICAgICAgICAgICBpbmZvLmJsb2Nrcy5mb3JFYWNoKChibG9jaywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gaW5kZXggJiYgYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwX291dHJvcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbl9vdXQoYmxvY2ssIDEsIDEsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5ibG9ja3NbaV0gPT09IGJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uYmxvY2tzW2ldID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX291dHJvcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmZvLmJsb2NrLmQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBibG9jay5jKCk7XG4gICAgICAgICAgICB0cmFuc2l0aW9uX2luKGJsb2NrLCAxKTtcbiAgICAgICAgICAgIGJsb2NrLm0oaW5mby5tb3VudCgpLCBpbmZvLmFuY2hvcik7XG4gICAgICAgICAgICBuZWVkc19mbHVzaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5ibG9jayA9IGJsb2NrO1xuICAgICAgICBpZiAoaW5mby5ibG9ja3MpXG4gICAgICAgICAgICBpbmZvLmJsb2Nrc1tpbmRleF0gPSBibG9jaztcbiAgICAgICAgaWYgKG5lZWRzX2ZsdXNoKSB7XG4gICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc19wcm9taXNlKHByb21pc2UpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRfY29tcG9uZW50ID0gZ2V0X2N1cnJlbnRfY29tcG9uZW50KCk7XG4gICAgICAgIHByb21pc2UudGhlbih2YWx1ZSA9PiB7XG4gICAgICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQoY3VycmVudF9jb21wb25lbnQpO1xuICAgICAgICAgICAgdXBkYXRlKGluZm8udGhlbiwgMSwgaW5mby52YWx1ZSwgdmFsdWUpO1xuICAgICAgICAgICAgc2V0X2N1cnJlbnRfY29tcG9uZW50KG51bGwpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICBzZXRfY3VycmVudF9jb21wb25lbnQoY3VycmVudF9jb21wb25lbnQpO1xuICAgICAgICAgICAgdXBkYXRlKGluZm8uY2F0Y2gsIDIsIGluZm8uZXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChudWxsKTtcbiAgICAgICAgICAgIGlmICghaW5mby5oYXNDYXRjaCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgd2UgcHJldmlvdXNseSBoYWQgYSB0aGVuL2NhdGNoIGJsb2NrLCBkZXN0cm95IGl0XG4gICAgICAgIGlmIChpbmZvLmN1cnJlbnQgIT09IGluZm8ucGVuZGluZykge1xuICAgICAgICAgICAgdXBkYXRlKGluZm8ucGVuZGluZywgMCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGluZm8uY3VycmVudCAhPT0gaW5mby50aGVuKSB7XG4gICAgICAgICAgICB1cGRhdGUoaW5mby50aGVuLCAxLCBpbmZvLnZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGluZm8ucmVzb2x2ZWQgPSBwcm9taXNlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG91dHJvX2FuZF9kZXN0cm95X2Jsb2NrKGJsb2NrLCBsb29rdXApIHtcbiAgICB0cmFuc2l0aW9uX291dChibG9jaywgMSwgMSwgKCkgPT4ge1xuICAgICAgICBsb29rdXAuZGVsZXRlKGJsb2NrLmtleSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB1cGRhdGVfa2V5ZWRfZWFjaChvbGRfYmxvY2tzLCBkaXJ0eSwgZ2V0X2tleSwgZHluYW1pYywgY3R4LCBsaXN0LCBsb29rdXAsIG5vZGUsIGRlc3Ryb3ksIGNyZWF0ZV9lYWNoX2Jsb2NrLCBuZXh0LCBnZXRfY29udGV4dCkge1xuICAgIGxldCBvID0gb2xkX2Jsb2Nrcy5sZW5ndGg7XG4gICAgbGV0IG4gPSBsaXN0Lmxlbmd0aDtcbiAgICBsZXQgaSA9IG87XG4gICAgY29uc3Qgb2xkX2luZGV4ZXMgPSB7fTtcbiAgICB3aGlsZSAoaS0tKVxuICAgICAgICBvbGRfaW5kZXhlc1tvbGRfYmxvY2tzW2ldLmtleV0gPSBpO1xuICAgIGNvbnN0IG5ld19ibG9ja3MgPSBbXTtcbiAgICBjb25zdCBuZXdfbG9va3VwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGRlbHRhcyA9IG5ldyBNYXAoKTtcbiAgICBpID0gbjtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkX2N0eCA9IGdldF9jb250ZXh0KGN0eCwgbGlzdCwgaSk7XG4gICAgICAgIGNvbnN0IGtleSA9IGdldF9rZXkoY2hpbGRfY3R4KTtcbiAgICAgICAgbGV0IGJsb2NrID0gbG9va3VwLmdldChrZXkpO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICBibG9jayA9IGNyZWF0ZV9lYWNoX2Jsb2NrKGtleSwgY2hpbGRfY3R4KTtcbiAgICAgICAgICAgIGJsb2NrLmMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkeW5hbWljKSB7XG4gICAgICAgICAgICBibG9jay5wKGNoaWxkX2N0eCwgZGlydHkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld19sb29rdXAuc2V0KGtleSwgbmV3X2Jsb2Nrc1tpXSA9IGJsb2NrKTtcbiAgICAgICAgaWYgKGtleSBpbiBvbGRfaW5kZXhlcylcbiAgICAgICAgICAgIGRlbHRhcy5zZXQoa2V5LCBNYXRoLmFicyhpIC0gb2xkX2luZGV4ZXNba2V5XSkpO1xuICAgIH1cbiAgICBjb25zdCB3aWxsX21vdmUgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZGlkX21vdmUgPSBuZXcgU2V0KCk7XG4gICAgZnVuY3Rpb24gaW5zZXJ0KGJsb2NrKSB7XG4gICAgICAgIHRyYW5zaXRpb25faW4oYmxvY2ssIDEpO1xuICAgICAgICBibG9jay5tKG5vZGUsIG5leHQpO1xuICAgICAgICBsb29rdXAuc2V0KGJsb2NrLmtleSwgYmxvY2spO1xuICAgICAgICBuZXh0ID0gYmxvY2suZmlyc3Q7XG4gICAgICAgIG4tLTtcbiAgICB9XG4gICAgd2hpbGUgKG8gJiYgbikge1xuICAgICAgICBjb25zdCBuZXdfYmxvY2sgPSBuZXdfYmxvY2tzW24gLSAxXTtcbiAgICAgICAgY29uc3Qgb2xkX2Jsb2NrID0gb2xkX2Jsb2Nrc1tvIC0gMV07XG4gICAgICAgIGNvbnN0IG5ld19rZXkgPSBuZXdfYmxvY2sua2V5O1xuICAgICAgICBjb25zdCBvbGRfa2V5ID0gb2xkX2Jsb2NrLmtleTtcbiAgICAgICAgaWYgKG5ld19ibG9jayA9PT0gb2xkX2Jsb2NrKSB7XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBuZXh0ID0gbmV3X2Jsb2NrLmZpcnN0O1xuICAgICAgICAgICAgby0tO1xuICAgICAgICAgICAgbi0tO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFuZXdfbG9va3VwLmhhcyhvbGRfa2V5KSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9sZCBibG9ja1xuICAgICAgICAgICAgZGVzdHJveShvbGRfYmxvY2ssIGxvb2t1cCk7XG4gICAgICAgICAgICBvLS07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIWxvb2t1cC5oYXMobmV3X2tleSkgfHwgd2lsbF9tb3ZlLmhhcyhuZXdfa2V5KSkge1xuICAgICAgICAgICAgaW5zZXJ0KG5ld19ibG9jayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGlkX21vdmUuaGFzKG9sZF9rZXkpKSB7XG4gICAgICAgICAgICBvLS07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGVsdGFzLmdldChuZXdfa2V5KSA+IGRlbHRhcy5nZXQob2xkX2tleSkpIHtcbiAgICAgICAgICAgIGRpZF9tb3ZlLmFkZChuZXdfa2V5KTtcbiAgICAgICAgICAgIGluc2VydChuZXdfYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd2lsbF9tb3ZlLmFkZChvbGRfa2V5KTtcbiAgICAgICAgICAgIG8tLTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAoby0tKSB7XG4gICAgICAgIGNvbnN0IG9sZF9ibG9jayA9IG9sZF9ibG9ja3Nbb107XG4gICAgICAgIGlmICghbmV3X2xvb2t1cC5oYXMob2xkX2Jsb2NrLmtleSkpXG4gICAgICAgICAgICBkZXN0cm95KG9sZF9ibG9jaywgbG9va3VwKTtcbiAgICB9XG4gICAgd2hpbGUgKG4pXG4gICAgICAgIGluc2VydChuZXdfYmxvY2tzW24gLSAxXSk7XG4gICAgcmV0dXJuIG5ld19ibG9ja3M7XG59XG5cbmZ1bmN0aW9uIGdldF9zcHJlYWRfdXBkYXRlKGxldmVscywgdXBkYXRlcykge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHt9O1xuICAgIGNvbnN0IHRvX251bGxfb3V0ID0ge307XG4gICAgY29uc3QgYWNjb3VudGVkX2ZvciA9IHsgJCRzY29wZTogMSB9O1xuICAgIGxldCBpID0gbGV2ZWxzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNvbnN0IG8gPSBsZXZlbHNbaV07XG4gICAgICAgIGNvbnN0IG4gPSB1cGRhdGVzW2ldO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbykge1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBuKSlcbiAgICAgICAgICAgICAgICAgICAgdG9fbnVsbF9vdXRba2V5XSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhY2NvdW50ZWRfZm9yW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlW2tleV0gPSBuW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGFjY291bnRlZF9mb3Jba2V5XSA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV2ZWxzW2ldID0gbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG8pIHtcbiAgICAgICAgICAgICAgICBhY2NvdW50ZWRfZm9yW2tleV0gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRvX251bGxfb3V0KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB1cGRhdGUpKVxuICAgICAgICAgICAgdXBkYXRlW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBnZXRfc3ByZWFkX29iamVjdChzcHJlYWRfcHJvcHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHNwcmVhZF9wcm9wcyA9PT0gJ29iamVjdCcgJiYgc3ByZWFkX3Byb3BzICE9PSBudWxsID8gc3ByZWFkX3Byb3BzIDoge307XG59XG5mdW5jdGlvbiBjcmVhdGVfY29tcG9uZW50KGJsb2NrKSB7XG4gICAgYmxvY2sgJiYgYmxvY2suYygpO1xufVxuZnVuY3Rpb24gbW91bnRfY29tcG9uZW50KGNvbXBvbmVudCwgdGFyZ2V0LCBhbmNob3IsIGN1c3RvbUVsZW1lbnQpIHtcbiAgICBjb25zdCB7IGZyYWdtZW50LCBvbl9tb3VudCwgb25fZGVzdHJveSwgYWZ0ZXJfdXBkYXRlIH0gPSBjb21wb25lbnQuJCQ7XG4gICAgZnJhZ21lbnQgJiYgZnJhZ21lbnQubSh0YXJnZXQsIGFuY2hvcik7XG4gICAgaWYgKCFjdXN0b21FbGVtZW50KSB7XG4gICAgICAgIC8vIG9uTW91bnQgaGFwcGVucyBiZWZvcmUgdGhlIGluaXRpYWwgYWZ0ZXJVcGRhdGVcbiAgICAgICAgYWRkX3JlbmRlcl9jYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdfb25fZGVzdHJveSA9IG9uX21vdW50Lm1hcChydW4pLmZpbHRlcihpc19mdW5jdGlvbik7XG4gICAgICAgICAgICBpZiAob25fZGVzdHJveSkge1xuICAgICAgICAgICAgICAgIG9uX2Rlc3Ryb3kucHVzaCguLi5uZXdfb25fZGVzdHJveSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBFZGdlIGNhc2UgLSBjb21wb25lbnQgd2FzIGRlc3Ryb3llZCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAgICAgICAvLyBtb3N0IGxpa2VseSBhcyBhIHJlc3VsdCBvZiBhIGJpbmRpbmcgaW5pdGlhbGlzaW5nXG4gICAgICAgICAgICAgICAgcnVuX2FsbChuZXdfb25fZGVzdHJveSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wb25lbnQuJCQub25fbW91bnQgPSBbXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFmdGVyX3VwZGF0ZS5mb3JFYWNoKGFkZF9yZW5kZXJfY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gZGVzdHJveV9jb21wb25lbnQoY29tcG9uZW50LCBkZXRhY2hpbmcpIHtcbiAgICBjb25zdCAkJCA9IGNvbXBvbmVudC4kJDtcbiAgICBpZiAoJCQuZnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgcnVuX2FsbCgkJC5vbl9kZXN0cm95KTtcbiAgICAgICAgJCQuZnJhZ21lbnQgJiYgJCQuZnJhZ21lbnQuZChkZXRhY2hpbmcpO1xuICAgICAgICAvLyBUT0RPIG51bGwgb3V0IG90aGVyIHJlZnMsIGluY2x1ZGluZyBjb21wb25lbnQuJCQgKGJ1dCBuZWVkIHRvXG4gICAgICAgIC8vIHByZXNlcnZlIGZpbmFsIHN0YXRlPylcbiAgICAgICAgJCQub25fZGVzdHJveSA9ICQkLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgJCQuY3R4ID0gW107XG4gICAgfVxufVxuZnVuY3Rpb24gbWFrZV9kaXJ0eShjb21wb25lbnQsIGkpIHtcbiAgICBpZiAoY29tcG9uZW50LiQkLmRpcnR5WzBdID09PSAtMSkge1xuICAgICAgICBkaXJ0eV9jb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgc2NoZWR1bGVfdXBkYXRlKCk7XG4gICAgICAgIGNvbXBvbmVudC4kJC5kaXJ0eS5maWxsKDApO1xuICAgIH1cbiAgICBjb21wb25lbnQuJCQuZGlydHlbKGkgLyAzMSkgfCAwXSB8PSAoMSA8PCAoaSAlIDMxKSk7XG59XG5mdW5jdGlvbiBpbml0KGNvbXBvbmVudCwgb3B0aW9ucywgaW5zdGFuY2UsIGNyZWF0ZV9mcmFnbWVudCwgbm90X2VxdWFsLCBwcm9wcywgZGlydHkgPSBbLTFdKSB7XG4gICAgY29uc3QgcGFyZW50X2NvbXBvbmVudCA9IGN1cnJlbnRfY29tcG9uZW50O1xuICAgIHNldF9jdXJyZW50X2NvbXBvbmVudChjb21wb25lbnQpO1xuICAgIGNvbnN0ICQkID0gY29tcG9uZW50LiQkID0ge1xuICAgICAgICBmcmFnbWVudDogbnVsbCxcbiAgICAgICAgY3R4OiBudWxsLFxuICAgICAgICAvLyBzdGF0ZVxuICAgICAgICBwcm9wcyxcbiAgICAgICAgdXBkYXRlOiBub29wLFxuICAgICAgICBub3RfZXF1YWwsXG4gICAgICAgIGJvdW5kOiBibGFua19vYmplY3QoKSxcbiAgICAgICAgLy8gbGlmZWN5Y2xlXG4gICAgICAgIG9uX21vdW50OiBbXSxcbiAgICAgICAgb25fZGVzdHJveTogW10sXG4gICAgICAgIG9uX2Rpc2Nvbm5lY3Q6IFtdLFxuICAgICAgICBiZWZvcmVfdXBkYXRlOiBbXSxcbiAgICAgICAgYWZ0ZXJfdXBkYXRlOiBbXSxcbiAgICAgICAgY29udGV4dDogbmV3IE1hcChwYXJlbnRfY29tcG9uZW50ID8gcGFyZW50X2NvbXBvbmVudC4kJC5jb250ZXh0IDogW10pLFxuICAgICAgICAvLyBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgY2FsbGJhY2tzOiBibGFua19vYmplY3QoKSxcbiAgICAgICAgZGlydHksXG4gICAgICAgIHNraXBfYm91bmQ6IGZhbHNlXG4gICAgfTtcbiAgICBsZXQgcmVhZHkgPSBmYWxzZTtcbiAgICAkJC5jdHggPSBpbnN0YW5jZVxuICAgICAgICA/IGluc3RhbmNlKGNvbXBvbmVudCwgb3B0aW9ucy5wcm9wcyB8fCB7fSwgKGksIHJldCwgLi4ucmVzdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZXN0Lmxlbmd0aCA/IHJlc3RbMF0gOiByZXQ7XG4gICAgICAgICAgICBpZiAoJCQuY3R4ICYmIG5vdF9lcXVhbCgkJC5jdHhbaV0sICQkLmN0eFtpXSA9IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICghJCQuc2tpcF9ib3VuZCAmJiAkJC5ib3VuZFtpXSlcbiAgICAgICAgICAgICAgICAgICAgJCQuYm91bmRbaV0odmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChyZWFkeSlcbiAgICAgICAgICAgICAgICAgICAgbWFrZV9kaXJ0eShjb21wb25lbnQsIGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSlcbiAgICAgICAgOiBbXTtcbiAgICAkJC51cGRhdGUoKTtcbiAgICByZWFkeSA9IHRydWU7XG4gICAgcnVuX2FsbCgkJC5iZWZvcmVfdXBkYXRlKTtcbiAgICAvLyBgZmFsc2VgIGFzIGEgc3BlY2lhbCBjYXNlIG9mIG5vIERPTSBjb21wb25lbnRcbiAgICAkJC5mcmFnbWVudCA9IGNyZWF0ZV9mcmFnbWVudCA/IGNyZWF0ZV9mcmFnbWVudCgkJC5jdHgpIDogZmFsc2U7XG4gICAgaWYgKG9wdGlvbnMudGFyZ2V0KSB7XG4gICAgICAgIGlmIChvcHRpb25zLmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gY2hpbGRyZW4ob3B0aW9ucy50YXJnZXQpO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICQkLmZyYWdtZW50ICYmICQkLmZyYWdtZW50Lmwobm9kZXMpO1xuICAgICAgICAgICAgbm9kZXMuZm9yRWFjaChkZXRhY2gpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICQkLmZyYWdtZW50ICYmICQkLmZyYWdtZW50LmMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5pbnRybylcbiAgICAgICAgICAgIHRyYW5zaXRpb25faW4oY29tcG9uZW50LiQkLmZyYWdtZW50KTtcbiAgICAgICAgbW91bnRfY29tcG9uZW50KGNvbXBvbmVudCwgb3B0aW9ucy50YXJnZXQsIG9wdGlvbnMuYW5jaG9yLCBvcHRpb25zLmN1c3RvbUVsZW1lbnQpO1xuICAgICAgICBmbHVzaCgpO1xuICAgIH1cbiAgICBzZXRfY3VycmVudF9jb21wb25lbnQocGFyZW50X2NvbXBvbmVudCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFN2ZWx0ZSBjb21wb25lbnRzLiBVc2VkIHdoZW4gZGV2PWZhbHNlLlxuICovXG5jbGFzcyBTdmVsdGVDb21wb25lbnQge1xuICAgICRkZXN0cm95KCkge1xuICAgICAgICBkZXN0cm95X2NvbXBvbmVudCh0aGlzLCAxKTtcbiAgICAgICAgdGhpcy4kZGVzdHJveSA9IG5vb3A7XG4gICAgfVxuICAgICRvbih0eXBlLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSAodGhpcy4kJC5jYWxsYmFja3NbdHlwZV0gfHwgKHRoaXMuJCQuY2FsbGJhY2tzW3R5cGVdID0gW10pKTtcbiAgICAgICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKVxuICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICAkc2V0KCQkcHJvcHMpIHtcbiAgICAgICAgaWYgKHRoaXMuJCRzZXQgJiYgIWlzX2VtcHR5KCQkcHJvcHMpKSB7XG4gICAgICAgICAgICB0aGlzLiQkLnNraXBfYm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4kJHNldCgkJHByb3BzKTtcbiAgICAgICAgICAgIHRoaXMuJCQuc2tpcF9ib3VuZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIGRhdGVVSUQgaXMgYSB3YXkgb2Ygd2Vla2x5IGlkZW50aWZ5aW5nIGRhaWx5L3dlZWtseS9tb250aGx5IG5vdGVzLlxuICogVGhleSBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgZ3JhbnVsYXJpdHkgdG8gYXZvaWQgYW1iaWd1aXR5LlxuICovXG5mdW5jdGlvbiBnZXREYXRlVUlEKGRhdGUsIGdyYW51bGFyaXR5ID0gXCJkYXlcIikge1xuICAgIGNvbnN0IHRzID0gZGF0ZS5jbG9uZSgpLnN0YXJ0T2YoZ3JhbnVsYXJpdHkpLmZvcm1hdCgpO1xuICAgIHJldHVybiBgJHtncmFudWxhcml0eX0tJHt0c31gO1xufVxudmFyIGdldERhdGVVSURfMSA9IGdldERhdGVVSUQ7XG5cbi8qIHNyYy9jb21wb25lbnRzL0RvdC5zdmVsdGUgZ2VuZXJhdGVkIGJ5IFN2ZWx0ZSB2My4zNS4wICovXG5cbmZ1bmN0aW9uIGFkZF9jc3MkNSgpIHtcblx0dmFyIHN0eWxlID0gZWxlbWVudChcInN0eWxlXCIpO1xuXHRzdHlsZS5pZCA9IFwic3ZlbHRlLTF3aWR2enEtc3R5bGVcIjtcblx0c3R5bGUudGV4dENvbnRlbnQgPSBcIi5kb3Quc3ZlbHRlLTF3aWR2enEsLmhvbGxvdy5zdmVsdGUtMXdpZHZ6cXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6NnB4O3dpZHRoOjZweDttYXJnaW46MCAxcHh9LmZpbGxlZC5zdmVsdGUtMXdpZHZ6cXtmaWxsOnZhcigtLWNvbG9yLWRvdCl9LmFjdGl2ZS5maWxsZWQuc3ZlbHRlLTF3aWR2enF7ZmlsbDp2YXIoLS10ZXh0LW9uLWFjY2VudCl9LmhvbGxvdy5zdmVsdGUtMXdpZHZ6cXtmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWNvbG9yLWRvdCl9LmFjdGl2ZS5ob2xsb3cuc3ZlbHRlLTF3aWR2enF7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS10ZXh0LW9uLWFjY2VudCl9XCI7XG5cdGFwcGVuZChkb2N1bWVudC5oZWFkLCBzdHlsZSk7XG59XG5cbi8vICgxNDowKSB7OmVsc2V9XG5mdW5jdGlvbiBjcmVhdGVfZWxzZV9ibG9jayQxKGN0eCkge1xuXHRsZXQgc3ZnO1xuXHRsZXQgY2lyY2xlO1xuXHRsZXQgc3ZnX2NsYXNzX3ZhbHVlO1xuXG5cdHJldHVybiB7XG5cdFx0YygpIHtcblx0XHRcdHN2ZyA9IHN2Z19lbGVtZW50KFwic3ZnXCIpO1xuXHRcdFx0Y2lyY2xlID0gc3ZnX2VsZW1lbnQoXCJjaXJjbGVcIik7XG5cdFx0XHRhdHRyKGNpcmNsZSwgXCJjeFwiLCBcIjNcIik7XG5cdFx0XHRhdHRyKGNpcmNsZSwgXCJjeVwiLCBcIjNcIik7XG5cdFx0XHRhdHRyKGNpcmNsZSwgXCJyXCIsIFwiMlwiKTtcblx0XHRcdGF0dHIoc3ZnLCBcImNsYXNzXCIsIHN2Z19jbGFzc192YWx1ZSA9IFwiXCIgKyAobnVsbF90b19lbXB0eShgaG9sbG93ICR7LypjbGFzc05hbWUqLyBjdHhbMF19YCkgKyBcIiBzdmVsdGUtMXdpZHZ6cVwiKSk7XG5cdFx0XHRhdHRyKHN2ZywgXCJ2aWV3Qm94XCIsIFwiMCAwIDYgNlwiKTtcblx0XHRcdGF0dHIoc3ZnLCBcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIik7XG5cdFx0XHR0b2dnbGVfY2xhc3Moc3ZnLCBcImFjdGl2ZVwiLCAvKmlzQWN0aXZlKi8gY3R4WzJdKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGluc2VydCh0YXJnZXQsIHN2ZywgYW5jaG9yKTtcblx0XHRcdGFwcGVuZChzdmcsIGNpcmNsZSk7XG5cdFx0fSxcblx0XHRwKGN0eCwgZGlydHkpIHtcblx0XHRcdGlmIChkaXJ0eSAmIC8qY2xhc3NOYW1lKi8gMSAmJiBzdmdfY2xhc3NfdmFsdWUgIT09IChzdmdfY2xhc3NfdmFsdWUgPSBcIlwiICsgKG51bGxfdG9fZW1wdHkoYGhvbGxvdyAkey8qY2xhc3NOYW1lKi8gY3R4WzBdfWApICsgXCIgc3ZlbHRlLTF3aWR2enFcIikpKSB7XG5cdFx0XHRcdGF0dHIoc3ZnLCBcImNsYXNzXCIsIHN2Z19jbGFzc192YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkaXJ0eSAmIC8qY2xhc3NOYW1lLCBpc0FjdGl2ZSovIDUpIHtcblx0XHRcdFx0dG9nZ2xlX2NsYXNzKHN2ZywgXCJhY3RpdmVcIiwgLyppc0FjdGl2ZSovIGN0eFsyXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKHN2Zyk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyAoNjowKSB7I2lmIGlzRmlsbGVkfVxuZnVuY3Rpb24gY3JlYXRlX2lmX2Jsb2NrJDIoY3R4KSB7XG5cdGxldCBzdmc7XG5cdGxldCBjaXJjbGU7XG5cdGxldCBzdmdfY2xhc3NfdmFsdWU7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0c3ZnID0gc3ZnX2VsZW1lbnQoXCJzdmdcIik7XG5cdFx0XHRjaXJjbGUgPSBzdmdfZWxlbWVudChcImNpcmNsZVwiKTtcblx0XHRcdGF0dHIoY2lyY2xlLCBcImN4XCIsIFwiM1wiKTtcblx0XHRcdGF0dHIoY2lyY2xlLCBcImN5XCIsIFwiM1wiKTtcblx0XHRcdGF0dHIoY2lyY2xlLCBcInJcIiwgXCIyXCIpO1xuXHRcdFx0YXR0cihzdmcsIFwiY2xhc3NcIiwgc3ZnX2NsYXNzX3ZhbHVlID0gXCJcIiArIChudWxsX3RvX2VtcHR5KGBkb3QgZmlsbGVkICR7LypjbGFzc05hbWUqLyBjdHhbMF19YCkgKyBcIiBzdmVsdGUtMXdpZHZ6cVwiKSk7XG5cdFx0XHRhdHRyKHN2ZywgXCJ2aWV3Qm94XCIsIFwiMCAwIDYgNlwiKTtcblx0XHRcdGF0dHIoc3ZnLCBcInhtbG5zXCIsIFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIik7XG5cdFx0XHR0b2dnbGVfY2xhc3Moc3ZnLCBcImFjdGl2ZVwiLCAvKmlzQWN0aXZlKi8gY3R4WzJdKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGluc2VydCh0YXJnZXQsIHN2ZywgYW5jaG9yKTtcblx0XHRcdGFwcGVuZChzdmcsIGNpcmNsZSk7XG5cdFx0fSxcblx0XHRwKGN0eCwgZGlydHkpIHtcblx0XHRcdGlmIChkaXJ0eSAmIC8qY2xhc3NOYW1lKi8gMSAmJiBzdmdfY2xhc3NfdmFsdWUgIT09IChzdmdfY2xhc3NfdmFsdWUgPSBcIlwiICsgKG51bGxfdG9fZW1wdHkoYGRvdCBmaWxsZWQgJHsvKmNsYXNzTmFtZSovIGN0eFswXX1gKSArIFwiIHN2ZWx0ZS0xd2lkdnpxXCIpKSkge1xuXHRcdFx0XHRhdHRyKHN2ZywgXCJjbGFzc1wiLCBzdmdfY2xhc3NfdmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGlydHkgJiAvKmNsYXNzTmFtZSwgaXNBY3RpdmUqLyA1KSB7XG5cdFx0XHRcdHRvZ2dsZV9jbGFzcyhzdmcsIFwiYWN0aXZlXCIsIC8qaXNBY3RpdmUqLyBjdHhbMl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZXRhY2hpbmcpIGRldGFjaChzdmcpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2ZyYWdtZW50JDYoY3R4KSB7XG5cdGxldCBpZl9ibG9ja19hbmNob3I7XG5cblx0ZnVuY3Rpb24gc2VsZWN0X2Jsb2NrX3R5cGUoY3R4LCBkaXJ0eSkge1xuXHRcdGlmICgvKmlzRmlsbGVkKi8gY3R4WzFdKSByZXR1cm4gY3JlYXRlX2lmX2Jsb2NrJDI7XG5cdFx0cmV0dXJuIGNyZWF0ZV9lbHNlX2Jsb2NrJDE7XG5cdH1cblxuXHRsZXQgY3VycmVudF9ibG9ja190eXBlID0gc2VsZWN0X2Jsb2NrX3R5cGUoY3R4KTtcblx0bGV0IGlmX2Jsb2NrID0gY3VycmVudF9ibG9ja190eXBlKGN0eCk7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0aWZfYmxvY2suYygpO1xuXHRcdFx0aWZfYmxvY2tfYW5jaG9yID0gZW1wdHkoKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGlmX2Jsb2NrLm0odGFyZ2V0LCBhbmNob3IpO1xuXHRcdFx0aW5zZXJ0KHRhcmdldCwgaWZfYmxvY2tfYW5jaG9yLCBhbmNob3IpO1xuXHRcdH0sXG5cdFx0cChjdHgsIFtkaXJ0eV0pIHtcblx0XHRcdGlmIChjdXJyZW50X2Jsb2NrX3R5cGUgPT09IChjdXJyZW50X2Jsb2NrX3R5cGUgPSBzZWxlY3RfYmxvY2tfdHlwZShjdHgpKSAmJiBpZl9ibG9jaykge1xuXHRcdFx0XHRpZl9ibG9jay5wKGN0eCwgZGlydHkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWZfYmxvY2suZCgxKTtcblx0XHRcdFx0aWZfYmxvY2sgPSBjdXJyZW50X2Jsb2NrX3R5cGUoY3R4KTtcblxuXHRcdFx0XHRpZiAoaWZfYmxvY2spIHtcblx0XHRcdFx0XHRpZl9ibG9jay5jKCk7XG5cdFx0XHRcdFx0aWZfYmxvY2subShpZl9ibG9ja19hbmNob3IucGFyZW50Tm9kZSwgaWZfYmxvY2tfYW5jaG9yKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aTogbm9vcCxcblx0XHRvOiBub29wLFxuXHRcdGQoZGV0YWNoaW5nKSB7XG5cdFx0XHRpZl9ibG9jay5kKGRldGFjaGluZyk7XG5cdFx0XHRpZiAoZGV0YWNoaW5nKSBkZXRhY2goaWZfYmxvY2tfYW5jaG9yKTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGluc3RhbmNlJDYoJCRzZWxmLCAkJHByb3BzLCAkJGludmFsaWRhdGUpIHtcblx0bGV0IHsgY2xhc3NOYW1lID0gXCJcIiB9ID0gJCRwcm9wcztcblx0bGV0IHsgaXNGaWxsZWQgfSA9ICQkcHJvcHM7XG5cdGxldCB7IGlzQWN0aXZlIH0gPSAkJHByb3BzO1xuXG5cdCQkc2VsZi4kJHNldCA9ICQkcHJvcHMgPT4ge1xuXHRcdGlmIChcImNsYXNzTmFtZVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgwLCBjbGFzc05hbWUgPSAkJHByb3BzLmNsYXNzTmFtZSk7XG5cdFx0aWYgKFwiaXNGaWxsZWRcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMSwgaXNGaWxsZWQgPSAkJHByb3BzLmlzRmlsbGVkKTtcblx0XHRpZiAoXCJpc0FjdGl2ZVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgyLCBpc0FjdGl2ZSA9ICQkcHJvcHMuaXNBY3RpdmUpO1xuXHR9O1xuXG5cdHJldHVybiBbY2xhc3NOYW1lLCBpc0ZpbGxlZCwgaXNBY3RpdmVdO1xufVxuXG5jbGFzcyBEb3QgZXh0ZW5kcyBTdmVsdGVDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3ZlbHRlLTF3aWR2enEtc3R5bGVcIikpIGFkZF9jc3MkNSgpO1xuXHRcdGluaXQodGhpcywgb3B0aW9ucywgaW5zdGFuY2UkNiwgY3JlYXRlX2ZyYWdtZW50JDYsIHNhZmVfbm90X2VxdWFsLCB7IGNsYXNzTmFtZTogMCwgaXNGaWxsZWQ6IDEsIGlzQWN0aXZlOiAyIH0pO1xuXHR9XG59XG5cbi8qIHNyYy9jb21wb25lbnRzL01ldGFkYXRhUmVzb2x2ZXIuc3ZlbHRlIGdlbmVyYXRlZCBieSBTdmVsdGUgdjMuMzUuMCAqL1xuXG5jb25zdCBnZXRfZGVmYXVsdF9zbG90X2NoYW5nZXNfMSA9IGRpcnR5ID0+ICh7fSk7XG5jb25zdCBnZXRfZGVmYXVsdF9zbG90X2NvbnRleHRfMSA9IGN0eCA9PiAoeyBtZXRhZGF0YTogbnVsbCB9KTtcbmNvbnN0IGdldF9kZWZhdWx0X3Nsb3RfY2hhbmdlcyA9IGRpcnR5ID0+ICh7IG1ldGFkYXRhOiBkaXJ0eSAmIC8qbWV0YWRhdGEqLyAxIH0pO1xuY29uc3QgZ2V0X2RlZmF1bHRfc2xvdF9jb250ZXh0ID0gY3R4ID0+ICh7IG1ldGFkYXRhOiAvKnJlc29sdmVkTWV0YSovIGN0eFszXSB9KTtcblxuLy8gKDExOjApIHs6ZWxzZX1cbmZ1bmN0aW9uIGNyZWF0ZV9lbHNlX2Jsb2NrKGN0eCkge1xuXHRsZXQgY3VycmVudDtcblx0Y29uc3QgZGVmYXVsdF9zbG90X3RlbXBsYXRlID0gLyojc2xvdHMqLyBjdHhbMl0uZGVmYXVsdDtcblx0Y29uc3QgZGVmYXVsdF9zbG90ID0gY3JlYXRlX3Nsb3QoZGVmYXVsdF9zbG90X3RlbXBsYXRlLCBjdHgsIC8qJCRzY29wZSovIGN0eFsxXSwgZ2V0X2RlZmF1bHRfc2xvdF9jb250ZXh0XzEpO1xuXG5cdHJldHVybiB7XG5cdFx0YygpIHtcblx0XHRcdGlmIChkZWZhdWx0X3Nsb3QpIGRlZmF1bHRfc2xvdC5jKCk7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpZiAoZGVmYXVsdF9zbG90KSB7XG5cdFx0XHRcdGRlZmF1bHRfc2xvdC5tKHRhcmdldCwgYW5jaG9yKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRwKGN0eCwgZGlydHkpIHtcblx0XHRcdGlmIChkZWZhdWx0X3Nsb3QpIHtcblx0XHRcdFx0aWYgKGRlZmF1bHRfc2xvdC5wICYmIGRpcnR5ICYgLyokJHNjb3BlKi8gMikge1xuXHRcdFx0XHRcdHVwZGF0ZV9zbG90KGRlZmF1bHRfc2xvdCwgZGVmYXVsdF9zbG90X3RlbXBsYXRlLCBjdHgsIC8qJCRzY29wZSovIGN0eFsxXSwgZGlydHksIGdldF9kZWZhdWx0X3Nsb3RfY2hhbmdlc18xLCBnZXRfZGVmYXVsdF9zbG90X2NvbnRleHRfMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdGkobG9jYWwpIHtcblx0XHRcdGlmIChjdXJyZW50KSByZXR1cm47XG5cdFx0XHR0cmFuc2l0aW9uX2luKGRlZmF1bHRfc2xvdCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRvKGxvY2FsKSB7XG5cdFx0XHR0cmFuc2l0aW9uX291dChkZWZhdWx0X3Nsb3QsIGxvY2FsKTtcblx0XHRcdGN1cnJlbnQgPSBmYWxzZTtcblx0XHR9LFxuXHRcdGQoZGV0YWNoaW5nKSB7XG5cdFx0XHRpZiAoZGVmYXVsdF9zbG90KSBkZWZhdWx0X3Nsb3QuZChkZXRhY2hpbmcpO1xuXHRcdH1cblx0fTtcbn1cblxuLy8gKDc6MCkgeyNpZiBtZXRhZGF0YX1cbmZ1bmN0aW9uIGNyZWF0ZV9pZl9ibG9jayQxKGN0eCkge1xuXHRsZXQgYXdhaXRfYmxvY2tfYW5jaG9yO1xuXHRsZXQgcHJvbWlzZTtcblx0bGV0IGN1cnJlbnQ7XG5cblx0bGV0IGluZm8gPSB7XG5cdFx0Y3R4LFxuXHRcdGN1cnJlbnQ6IG51bGwsXG5cdFx0dG9rZW46IG51bGwsXG5cdFx0aGFzQ2F0Y2g6IGZhbHNlLFxuXHRcdHBlbmRpbmc6IGNyZWF0ZV9wZW5kaW5nX2Jsb2NrLFxuXHRcdHRoZW46IGNyZWF0ZV90aGVuX2Jsb2NrLFxuXHRcdGNhdGNoOiBjcmVhdGVfY2F0Y2hfYmxvY2ssXG5cdFx0dmFsdWU6IDMsXG5cdFx0YmxvY2tzOiBbLCwsXVxuXHR9O1xuXG5cdGhhbmRsZV9wcm9taXNlKHByb21pc2UgPSAvKm1ldGFkYXRhKi8gY3R4WzBdLCBpbmZvKTtcblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHRhd2FpdF9ibG9ja19hbmNob3IgPSBlbXB0eSgpO1xuXHRcdFx0aW5mby5ibG9jay5jKCk7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpbnNlcnQodGFyZ2V0LCBhd2FpdF9ibG9ja19hbmNob3IsIGFuY2hvcik7XG5cdFx0XHRpbmZvLmJsb2NrLm0odGFyZ2V0LCBpbmZvLmFuY2hvciA9IGFuY2hvcik7XG5cdFx0XHRpbmZvLm1vdW50ID0gKCkgPT4gYXdhaXRfYmxvY2tfYW5jaG9yLnBhcmVudE5vZGU7XG5cdFx0XHRpbmZvLmFuY2hvciA9IGF3YWl0X2Jsb2NrX2FuY2hvcjtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0cChuZXdfY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y3R4ID0gbmV3X2N0eDtcblx0XHRcdGluZm8uY3R4ID0gY3R4O1xuXG5cdFx0XHRpZiAoZGlydHkgJiAvKm1ldGFkYXRhKi8gMSAmJiBwcm9taXNlICE9PSAocHJvbWlzZSA9IC8qbWV0YWRhdGEqLyBjdHhbMF0pICYmIGhhbmRsZV9wcm9taXNlKHByb21pc2UsIGluZm8pKSA7IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBjaGlsZF9jdHggPSBjdHguc2xpY2UoKTtcblx0XHRcdFx0Y2hpbGRfY3R4WzNdID0gaW5mby5yZXNvbHZlZDtcblx0XHRcdFx0aW5mby5ibG9jay5wKGNoaWxkX2N0eCwgZGlydHkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4oaW5mby5ibG9jayk7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG5cdFx0XHRcdGNvbnN0IGJsb2NrID0gaW5mby5ibG9ja3NbaV07XG5cdFx0XHRcdHRyYW5zaXRpb25fb3V0KGJsb2NrKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZXRhY2hpbmcpIGRldGFjaChhd2FpdF9ibG9ja19hbmNob3IpO1xuXHRcdFx0aW5mby5ibG9jay5kKGRldGFjaGluZyk7XG5cdFx0XHRpbmZvLnRva2VuID0gbnVsbDtcblx0XHRcdGluZm8gPSBudWxsO1xuXHRcdH1cblx0fTtcbn1cblxuLy8gKDE6MCkgPHN2ZWx0ZTpvcHRpb25zIGltbXV0YWJsZSAvPiAgPHNjcmlwdCBsYW5nPVwidHNcIj47IGV4cG9ydCBsZXQgbWV0YWRhdGE7IDwvc2NyaXB0PiAgeyNpZiBtZXRhZGF0YX1cbmZ1bmN0aW9uIGNyZWF0ZV9jYXRjaF9ibG9jayhjdHgpIHtcblx0cmV0dXJuIHtcblx0XHRjOiBub29wLFxuXHRcdG06IG5vb3AsXG5cdFx0cDogbm9vcCxcblx0XHRpOiBub29wLFxuXHRcdG86IG5vb3AsXG5cdFx0ZDogbm9vcFxuXHR9O1xufVxuXG4vLyAoODozNykgICAgICA8c2xvdCBtZXRhZGF0YT1cIntyZXNvbHZlZE1ldGF9XG5mdW5jdGlvbiBjcmVhdGVfdGhlbl9ibG9jayhjdHgpIHtcblx0bGV0IGN1cnJlbnQ7XG5cdGNvbnN0IGRlZmF1bHRfc2xvdF90ZW1wbGF0ZSA9IC8qI3Nsb3RzKi8gY3R4WzJdLmRlZmF1bHQ7XG5cdGNvbnN0IGRlZmF1bHRfc2xvdCA9IGNyZWF0ZV9zbG90KGRlZmF1bHRfc2xvdF90ZW1wbGF0ZSwgY3R4LCAvKiQkc2NvcGUqLyBjdHhbMV0sIGdldF9kZWZhdWx0X3Nsb3RfY29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0aWYgKGRlZmF1bHRfc2xvdCkgZGVmYXVsdF9zbG90LmMoKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGlmIChkZWZhdWx0X3Nsb3QpIHtcblx0XHRcdFx0ZGVmYXVsdF9zbG90Lm0odGFyZ2V0LCBhbmNob3IpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdHAoY3R4LCBkaXJ0eSkge1xuXHRcdFx0aWYgKGRlZmF1bHRfc2xvdCkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdF9zbG90LnAgJiYgZGlydHkgJiAvKiQkc2NvcGUsIG1ldGFkYXRhKi8gMykge1xuXHRcdFx0XHRcdHVwZGF0ZV9zbG90KGRlZmF1bHRfc2xvdCwgZGVmYXVsdF9zbG90X3RlbXBsYXRlLCBjdHgsIC8qJCRzY29wZSovIGN0eFsxXSwgZGlydHksIGdldF9kZWZhdWx0X3Nsb3RfY2hhbmdlcywgZ2V0X2RlZmF1bHRfc2xvdF9jb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4oZGVmYXVsdF9zbG90LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdHRyYW5zaXRpb25fb3V0KGRlZmF1bHRfc2xvdCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZWZhdWx0X3Nsb3QpIGRlZmF1bHRfc2xvdC5kKGRldGFjaGluZyk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyAoMTowKSA8c3ZlbHRlOm9wdGlvbnMgaW1tdXRhYmxlIC8+ICA8c2NyaXB0IGxhbmc9XCJ0c1wiPjsgZXhwb3J0IGxldCBtZXRhZGF0YTsgPC9zY3JpcHQ+ICB7I2lmIG1ldGFkYXRhfVxuZnVuY3Rpb24gY3JlYXRlX3BlbmRpbmdfYmxvY2soY3R4KSB7XG5cdHJldHVybiB7XG5cdFx0Yzogbm9vcCxcblx0XHRtOiBub29wLFxuXHRcdHA6IG5vb3AsXG5cdFx0aTogbm9vcCxcblx0XHRvOiBub29wLFxuXHRcdGQ6IG5vb3Bcblx0fTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2ZyYWdtZW50JDUoY3R4KSB7XG5cdGxldCBjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXg7XG5cdGxldCBpZl9ibG9jaztcblx0bGV0IGlmX2Jsb2NrX2FuY2hvcjtcblx0bGV0IGN1cnJlbnQ7XG5cdGNvbnN0IGlmX2Jsb2NrX2NyZWF0b3JzID0gW2NyZWF0ZV9pZl9ibG9jayQxLCBjcmVhdGVfZWxzZV9ibG9ja107XG5cdGNvbnN0IGlmX2Jsb2NrcyA9IFtdO1xuXG5cdGZ1bmN0aW9uIHNlbGVjdF9ibG9ja190eXBlKGN0eCwgZGlydHkpIHtcblx0XHRpZiAoLyptZXRhZGF0YSovIGN0eFswXSkgcmV0dXJuIDA7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXggPSBzZWxlY3RfYmxvY2tfdHlwZShjdHgpO1xuXHRpZl9ibG9jayA9IGlmX2Jsb2Nrc1tjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXhdID0gaWZfYmxvY2tfY3JlYXRvcnNbY3VycmVudF9ibG9ja190eXBlX2luZGV4XShjdHgpO1xuXG5cdHJldHVybiB7XG5cdFx0YygpIHtcblx0XHRcdGlmX2Jsb2NrLmMoKTtcblx0XHRcdGlmX2Jsb2NrX2FuY2hvciA9IGVtcHR5KCk7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpZl9ibG9ja3NbY3VycmVudF9ibG9ja190eXBlX2luZGV4XS5tKHRhcmdldCwgYW5jaG9yKTtcblx0XHRcdGluc2VydCh0YXJnZXQsIGlmX2Jsb2NrX2FuY2hvciwgYW5jaG9yKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0cChjdHgsIFtkaXJ0eV0pIHtcblx0XHRcdGxldCBwcmV2aW91c19ibG9ja19pbmRleCA9IGN1cnJlbnRfYmxvY2tfdHlwZV9pbmRleDtcblx0XHRcdGN1cnJlbnRfYmxvY2tfdHlwZV9pbmRleCA9IHNlbGVjdF9ibG9ja190eXBlKGN0eCk7XG5cblx0XHRcdGlmIChjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXggPT09IHByZXZpb3VzX2Jsb2NrX2luZGV4KSB7XG5cdFx0XHRcdGlmX2Jsb2Nrc1tjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXhdLnAoY3R4LCBkaXJ0eSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRncm91cF9vdXRyb3MoKTtcblxuXHRcdFx0XHR0cmFuc2l0aW9uX291dChpZl9ibG9ja3NbcHJldmlvdXNfYmxvY2tfaW5kZXhdLCAxLCAxLCAoKSA9PiB7XG5cdFx0XHRcdFx0aWZfYmxvY2tzW3ByZXZpb3VzX2Jsb2NrX2luZGV4XSA9IG51bGw7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNoZWNrX291dHJvcygpO1xuXHRcdFx0XHRpZl9ibG9jayA9IGlmX2Jsb2Nrc1tjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXhdO1xuXG5cdFx0XHRcdGlmICghaWZfYmxvY2spIHtcblx0XHRcdFx0XHRpZl9ibG9jayA9IGlmX2Jsb2Nrc1tjdXJyZW50X2Jsb2NrX3R5cGVfaW5kZXhdID0gaWZfYmxvY2tfY3JlYXRvcnNbY3VycmVudF9ibG9ja190eXBlX2luZGV4XShjdHgpO1xuXHRcdFx0XHRcdGlmX2Jsb2NrLmMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZl9ibG9jay5wKGN0eCwgZGlydHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJhbnNpdGlvbl9pbihpZl9ibG9jaywgMSk7XG5cdFx0XHRcdGlmX2Jsb2NrLm0oaWZfYmxvY2tfYW5jaG9yLnBhcmVudE5vZGUsIGlmX2Jsb2NrX2FuY2hvcik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRpKGxvY2FsKSB7XG5cdFx0XHRpZiAoY3VycmVudCkgcmV0dXJuO1xuXHRcdFx0dHJhbnNpdGlvbl9pbihpZl9ibG9jayk7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdHRyYW5zaXRpb25fb3V0KGlmX2Jsb2NrKTtcblx0XHRcdGN1cnJlbnQgPSBmYWxzZTtcblx0XHR9LFxuXHRcdGQoZGV0YWNoaW5nKSB7XG5cdFx0XHRpZl9ibG9ja3NbY3VycmVudF9ibG9ja190eXBlX2luZGV4XS5kKGRldGFjaGluZyk7XG5cdFx0XHRpZiAoZGV0YWNoaW5nKSBkZXRhY2goaWZfYmxvY2tfYW5jaG9yKTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGluc3RhbmNlJDUoJCRzZWxmLCAkJHByb3BzLCAkJGludmFsaWRhdGUpIHtcblx0bGV0IHsgJCRzbG90czogc2xvdHMgPSB7fSwgJCRzY29wZSB9ID0gJCRwcm9wcztcblx0XG5cdGxldCB7IG1ldGFkYXRhIH0gPSAkJHByb3BzO1xuXG5cdCQkc2VsZi4kJHNldCA9ICQkcHJvcHMgPT4ge1xuXHRcdGlmIChcIm1ldGFkYXRhXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDAsIG1ldGFkYXRhID0gJCRwcm9wcy5tZXRhZGF0YSk7XG5cdFx0aWYgKFwiJCRzY29wZVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgxLCAkJHNjb3BlID0gJCRwcm9wcy4kJHNjb3BlKTtcblx0fTtcblxuXHRyZXR1cm4gW21ldGFkYXRhLCAkJHNjb3BlLCBzbG90c107XG59XG5cbmNsYXNzIE1ldGFkYXRhUmVzb2x2ZXIgZXh0ZW5kcyBTdmVsdGVDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpbml0KHRoaXMsIG9wdGlvbnMsIGluc3RhbmNlJDUsIGNyZWF0ZV9mcmFnbWVudCQ1LCBub3RfZXF1YWwsIHsgbWV0YWRhdGE6IDAgfSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaXNNYWNPUygpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZihcIk1hY1wiKSAhPT0gLTE7XG59XG5mdW5jdGlvbiBpc01ldGFQcmVzc2VkKGUpIHtcbiAgICByZXR1cm4gaXNNYWNPUygpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xufVxuZnVuY3Rpb24gZ2V0RGF5c09mV2VlayguLi5fYXJncykge1xuICAgIHJldHVybiB3aW5kb3cubW9tZW50LndlZWtkYXlzU2hvcnQodHJ1ZSk7XG59XG5mdW5jdGlvbiBpc1dlZWtlbmQoZGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmlzb1dlZWtkYXkoKSA9PT0gNiB8fCBkYXRlLmlzb1dlZWtkYXkoKSA9PT0gNztcbn1cbmZ1bmN0aW9uIGdldFN0YXJ0T2ZXZWVrKGRheXMpIHtcbiAgICByZXR1cm4gZGF5c1swXS53ZWVrZGF5KDApO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIDJEIGFycmF5IG9mIGRhaWx5IGluZm9ybWF0aW9uIHRvIHBvd2VyXG4gKiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqL1xuZnVuY3Rpb24gZ2V0TW9udGgoZGlzcGxheWVkTW9udGgsIC4uLl9hcmdzKSB7XG4gICAgY29uc3QgbG9jYWxlID0gd2luZG93Lm1vbWVudCgpLmxvY2FsZSgpO1xuICAgIGNvbnN0IG1vbnRoID0gW107XG4gICAgbGV0IHdlZWs7XG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gZGlzcGxheWVkTW9udGguY2xvbmUoKS5sb2NhbGUobG9jYWxlKS5kYXRlKDEpO1xuICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gc3RhcnRPZk1vbnRoLndlZWtkYXkoKTtcbiAgICBsZXQgZGF0ZSA9IHN0YXJ0T2ZNb250aC5jbG9uZSgpLnN1YnRyYWN0KHN0YXJ0T2Zmc2V0LCBcImRheXNcIik7XG4gICAgZm9yIChsZXQgX2RheSA9IDA7IF9kYXkgPCA0MjsgX2RheSsrKSB7XG4gICAgICAgIGlmIChfZGF5ICUgNyA9PT0gMCkge1xuICAgICAgICAgICAgd2VlayA9IHtcbiAgICAgICAgICAgICAgICBkYXlzOiBbXSxcbiAgICAgICAgICAgICAgICB3ZWVrTnVtOiBkYXRlLndlZWsoKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtb250aC5wdXNoKHdlZWspO1xuICAgICAgICB9XG4gICAgICAgIHdlZWsuZGF5cy5wdXNoKGRhdGUpO1xuICAgICAgICBkYXRlID0gZGF0ZS5jbG9uZSgpLmFkZCgxLCBcImRheXNcIik7XG4gICAgfVxuICAgIHJldHVybiBtb250aDtcbn1cblxuLyogc3JjL2NvbXBvbmVudHMvRGF5LnN2ZWx0ZSBnZW5lcmF0ZWQgYnkgU3ZlbHRlIHYzLjM1LjAgKi9cblxuZnVuY3Rpb24gYWRkX2NzcyQ0KCkge1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50KFwic3R5bGVcIik7XG5cdHN0eWxlLmlkID0gXCJzdmVsdGUtcTN3cWc5LXN0eWxlXCI7XG5cdHN0eWxlLnRleHRDb250ZW50ID0gXCIuZGF5LnN2ZWx0ZS1xM3dxZzl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWRheSk7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6dmFyKC0tY29sb3ItdGV4dC1kYXkpO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTowLjhlbTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4xcyBlYXNlLWluLCBjb2xvciAwLjFzIGVhc2UtaW47dmVydGljYWwtYWxpZ246YmFzZWxpbmV9LmRheS5zdmVsdGUtcTN3cWc5OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW50ZXJhY3RpdmUtaG92ZXIpfS5kYXkuYWN0aXZlLnN2ZWx0ZS1xM3dxZzk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnRlcmFjdGl2ZS1hY2NlbnQtaG92ZXIpfS5hZGphY2VudC1tb250aC5zdmVsdGUtcTN3cWc5e29wYWNpdHk6MC4yNX0udG9kYXkuc3ZlbHRlLXEzd3FnOXtjb2xvcjp2YXIoLS1jb2xvci10ZXh0LXRvZGF5KX0uZGF5LnN2ZWx0ZS1xM3dxZzk6YWN0aXZlLC5hY3RpdmUuc3ZlbHRlLXEzd3FnOSwuYWN0aXZlLnRvZGF5LnN2ZWx0ZS1xM3dxZzl7Y29sb3I6dmFyKC0tdGV4dC1vbi1hY2NlbnQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW50ZXJhY3RpdmUtYWNjZW50KX0uZG90LWNvbnRhaW5lci5zdmVsdGUtcTN3cWc5e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjZweDttaW4taGVpZ2h0OjZweH1cIjtcblx0YXBwZW5kKGRvY3VtZW50LmhlYWQsIHN0eWxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0X2VhY2hfY29udGV4dCQyKGN0eCwgbGlzdCwgaSkge1xuXHRjb25zdCBjaGlsZF9jdHggPSBjdHguc2xpY2UoKTtcblx0Y2hpbGRfY3R4WzExXSA9IGxpc3RbaV07XG5cdHJldHVybiBjaGlsZF9jdHg7XG59XG5cbi8vICgzNjo4KSB7I2VhY2ggbWV0YWRhdGEuZG90cyBhcyBkb3R9XG5mdW5jdGlvbiBjcmVhdGVfZWFjaF9ibG9jayQyKGN0eCkge1xuXHRsZXQgZG90O1xuXHRsZXQgY3VycmVudDtcblx0Y29uc3QgZG90X3NwcmVhZF9sZXZlbHMgPSBbLypkb3QqLyBjdHhbMTFdXTtcblx0bGV0IGRvdF9wcm9wcyA9IHt9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgZG90X3NwcmVhZF9sZXZlbHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkb3RfcHJvcHMgPSBhc3NpZ24oZG90X3Byb3BzLCBkb3Rfc3ByZWFkX2xldmVsc1tpXSk7XG5cdH1cblxuXHRkb3QgPSBuZXcgRG90KHsgcHJvcHM6IGRvdF9wcm9wcyB9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHRjcmVhdGVfY29tcG9uZW50KGRvdC4kJC5mcmFnbWVudCk7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRtb3VudF9jb21wb25lbnQoZG90LCB0YXJnZXQsIGFuY2hvcik7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdHAoY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y29uc3QgZG90X2NoYW5nZXMgPSAoZGlydHkgJiAvKm1ldGFkYXRhKi8gMTI4KVxuXHRcdFx0PyBnZXRfc3ByZWFkX3VwZGF0ZShkb3Rfc3ByZWFkX2xldmVscywgW2dldF9zcHJlYWRfb2JqZWN0KC8qZG90Ki8gY3R4WzExXSldKVxuXHRcdFx0OiB7fTtcblxuXHRcdFx0ZG90LiRzZXQoZG90X2NoYW5nZXMpO1xuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4oZG90LiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdHRyYW5zaXRpb25fb3V0KGRvdC4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGRlc3Ryb3lfY29tcG9uZW50KGRvdCwgZGV0YWNoaW5nKTtcblx0XHR9XG5cdH07XG59XG5cbi8vICgyMjoyKSA8TWV0YWRhdGFSZXNvbHZlciBtZXRhZGF0YT1cInttZXRhZGF0YX1cIiBsZXQ6bWV0YWRhdGE+XG5mdW5jdGlvbiBjcmVhdGVfZGVmYXVsdF9zbG90JDEoY3R4KSB7XG5cdGxldCBkaXYxO1xuXHRsZXQgdDBfdmFsdWUgPSAvKmRhdGUqLyBjdHhbMF0uZm9ybWF0KFwiRFwiKSArIFwiXCI7XG5cdGxldCB0MDtcblx0bGV0IHQxO1xuXHRsZXQgZGl2MDtcblx0bGV0IGRpdjFfY2xhc3NfdmFsdWU7XG5cdGxldCBjdXJyZW50O1xuXHRsZXQgbW91bnRlZDtcblx0bGV0IGRpc3Bvc2U7XG5cdGxldCBlYWNoX3ZhbHVlID0gLyptZXRhZGF0YSovIGN0eFs3XS5kb3RzO1xuXHRsZXQgZWFjaF9ibG9ja3MgPSBbXTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfdmFsdWUubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRlYWNoX2Jsb2Nrc1tpXSA9IGNyZWF0ZV9lYWNoX2Jsb2NrJDIoZ2V0X2VhY2hfY29udGV4dCQyKGN0eCwgZWFjaF92YWx1ZSwgaSkpO1xuXHR9XG5cblx0Y29uc3Qgb3V0ID0gaSA9PiB0cmFuc2l0aW9uX291dChlYWNoX2Jsb2Nrc1tpXSwgMSwgMSwgKCkgPT4ge1xuXHRcdGVhY2hfYmxvY2tzW2ldID0gbnVsbDtcblx0fSk7XG5cblx0bGV0IGRpdjFfbGV2ZWxzID0gW1xuXHRcdHtcblx0XHRcdGNsYXNzOiBkaXYxX2NsYXNzX3ZhbHVlID0gYGRheSAkey8qbWV0YWRhdGEqLyBjdHhbN10uY2xhc3Nlcy5qb2luKFwiIFwiKX1gXG5cdFx0fSxcblx0XHQvKm1ldGFkYXRhKi8gY3R4WzddLmRhdGFBdHRyaWJ1dGVzIHx8IHt9XG5cdF07XG5cblx0bGV0IGRpdjFfZGF0YSA9IHt9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgZGl2MV9sZXZlbHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkaXYxX2RhdGEgPSBhc3NpZ24oZGl2MV9kYXRhLCBkaXYxX2xldmVsc1tpXSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHRkaXYxID0gZWxlbWVudChcImRpdlwiKTtcblx0XHRcdHQwID0gdGV4dCh0MF92YWx1ZSk7XG5cdFx0XHR0MSA9IHNwYWNlKCk7XG5cdFx0XHRkaXYwID0gZWxlbWVudChcImRpdlwiKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5jKCk7XG5cdFx0XHR9XG5cblx0XHRcdGF0dHIoZGl2MCwgXCJjbGFzc1wiLCBcImRvdC1jb250YWluZXIgc3ZlbHRlLXEzd3FnOVwiKTtcblx0XHRcdHNldF9hdHRyaWJ1dGVzKGRpdjEsIGRpdjFfZGF0YSk7XG5cdFx0XHR0b2dnbGVfY2xhc3MoZGl2MSwgXCJhY3RpdmVcIiwgLypzZWxlY3RlZElkKi8gY3R4WzZdID09PSBnZXREYXRlVUlEXzEoLypkYXRlKi8gY3R4WzBdLCBcImRheVwiKSk7XG5cdFx0XHR0b2dnbGVfY2xhc3MoZGl2MSwgXCJhZGphY2VudC1tb250aFwiLCAhLypkYXRlKi8gY3R4WzBdLmlzU2FtZSgvKmRpc3BsYXllZE1vbnRoKi8gY3R4WzVdLCBcIm1vbnRoXCIpKTtcblx0XHRcdHRvZ2dsZV9jbGFzcyhkaXYxLCBcInRvZGF5XCIsIC8qZGF0ZSovIGN0eFswXS5pc1NhbWUoLyp0b2RheSovIGN0eFs0XSwgXCJkYXlcIikpO1xuXHRcdFx0dG9nZ2xlX2NsYXNzKGRpdjEsIFwic3ZlbHRlLXEzd3FnOVwiLCB0cnVlKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGluc2VydCh0YXJnZXQsIGRpdjEsIGFuY2hvcik7XG5cdFx0XHRhcHBlbmQoZGl2MSwgdDApO1xuXHRcdFx0YXBwZW5kKGRpdjEsIHQxKTtcblx0XHRcdGFwcGVuZChkaXYxLCBkaXYwKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5tKGRpdjAsIG51bGwpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblxuXHRcdFx0aWYgKCFtb3VudGVkKSB7XG5cdFx0XHRcdGRpc3Bvc2UgPSBbXG5cdFx0XHRcdFx0bGlzdGVuKGRpdjEsIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKGlzX2Z1bmN0aW9uKC8qb25DbGljayovIGN0eFsyXSAmJiAvKmNsaWNrX2hhbmRsZXIqLyBjdHhbOF0pKSAoLypvbkNsaWNrKi8gY3R4WzJdICYmIC8qY2xpY2tfaGFuZGxlciovIGN0eFs4XSkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRsaXN0ZW4oZGl2MSwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNfZnVuY3Rpb24oLypvbkNvbnRleHRNZW51Ki8gY3R4WzNdICYmIC8qY29udGV4dG1lbnVfaGFuZGxlciovIGN0eFs5XSkpICgvKm9uQ29udGV4dE1lbnUqLyBjdHhbM10gJiYgLypjb250ZXh0bWVudV9oYW5kbGVyKi8gY3R4WzldKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGxpc3RlbihkaXYxLCBcInBvaW50ZXJvdmVyXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChpc19mdW5jdGlvbigvKm9uSG92ZXIqLyBjdHhbMV0gJiYgLypwb2ludGVyb3Zlcl9oYW5kbGVyKi8gY3R4WzEwXSkpICgvKm9uSG92ZXIqLyBjdHhbMV0gJiYgLypwb2ludGVyb3Zlcl9oYW5kbGVyKi8gY3R4WzEwXSkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdO1xuXG5cdFx0XHRcdG1vdW50ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cChuZXdfY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y3R4ID0gbmV3X2N0eDtcblx0XHRcdGlmICgoIWN1cnJlbnQgfHwgZGlydHkgJiAvKmRhdGUqLyAxKSAmJiB0MF92YWx1ZSAhPT0gKHQwX3ZhbHVlID0gLypkYXRlKi8gY3R4WzBdLmZvcm1hdChcIkRcIikgKyBcIlwiKSkgc2V0X2RhdGEodDAsIHQwX3ZhbHVlKTtcblxuXHRcdFx0aWYgKGRpcnR5ICYgLyptZXRhZGF0YSovIDEyOCkge1xuXHRcdFx0XHRlYWNoX3ZhbHVlID0gLyptZXRhZGF0YSovIGN0eFs3XS5kb3RzO1xuXHRcdFx0XHRsZXQgaTtcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZWFjaF92YWx1ZS5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRcdGNvbnN0IGNoaWxkX2N0eCA9IGdldF9lYWNoX2NvbnRleHQkMihjdHgsIGVhY2hfdmFsdWUsIGkpO1xuXG5cdFx0XHRcdFx0aWYgKGVhY2hfYmxvY2tzW2ldKSB7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5wKGNoaWxkX2N0eCwgZGlydHkpO1xuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbl9pbihlYWNoX2Jsb2Nrc1tpXSwgMSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGVhY2hfYmxvY2tzW2ldID0gY3JlYXRlX2VhY2hfYmxvY2skMihjaGlsZF9jdHgpO1xuXHRcdFx0XHRcdFx0ZWFjaF9ibG9ja3NbaV0uYygpO1xuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbl9pbihlYWNoX2Jsb2Nrc1tpXSwgMSk7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5tKGRpdjAsIG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGdyb3VwX291dHJvcygpO1xuXG5cdFx0XHRcdGZvciAoaSA9IGVhY2hfdmFsdWUubGVuZ3RoOyBpIDwgZWFjaF9ibG9ja3MubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdFx0XHRvdXQoaSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjaGVja19vdXRyb3MoKTtcblx0XHRcdH1cblxuXHRcdFx0c2V0X2F0dHJpYnV0ZXMoZGl2MSwgZGl2MV9kYXRhID0gZ2V0X3NwcmVhZF91cGRhdGUoZGl2MV9sZXZlbHMsIFtcblx0XHRcdFx0KCFjdXJyZW50IHx8IGRpcnR5ICYgLyptZXRhZGF0YSovIDEyOCAmJiBkaXYxX2NsYXNzX3ZhbHVlICE9PSAoZGl2MV9jbGFzc192YWx1ZSA9IGBkYXkgJHsvKm1ldGFkYXRhKi8gY3R4WzddLmNsYXNzZXMuam9pbihcIiBcIil9YCkpICYmIHsgY2xhc3M6IGRpdjFfY2xhc3NfdmFsdWUgfSxcblx0XHRcdFx0ZGlydHkgJiAvKm1ldGFkYXRhKi8gMTI4ICYmICgvKm1ldGFkYXRhKi8gY3R4WzddLmRhdGFBdHRyaWJ1dGVzIHx8IHt9KVxuXHRcdFx0XSkpO1xuXG5cdFx0XHR0b2dnbGVfY2xhc3MoZGl2MSwgXCJhY3RpdmVcIiwgLypzZWxlY3RlZElkKi8gY3R4WzZdID09PSBnZXREYXRlVUlEXzEoLypkYXRlKi8gY3R4WzBdLCBcImRheVwiKSk7XG5cdFx0XHR0b2dnbGVfY2xhc3MoZGl2MSwgXCJhZGphY2VudC1tb250aFwiLCAhLypkYXRlKi8gY3R4WzBdLmlzU2FtZSgvKmRpc3BsYXllZE1vbnRoKi8gY3R4WzVdLCBcIm1vbnRoXCIpKTtcblx0XHRcdHRvZ2dsZV9jbGFzcyhkaXYxLCBcInRvZGF5XCIsIC8qZGF0ZSovIGN0eFswXS5pc1NhbWUoLyp0b2RheSovIGN0eFs0XSwgXCJkYXlcIikpO1xuXHRcdFx0dG9nZ2xlX2NsYXNzKGRpdjEsIFwic3ZlbHRlLXEzd3FnOVwiLCB0cnVlKTtcblx0XHR9LFxuXHRcdGkobG9jYWwpIHtcblx0XHRcdGlmIChjdXJyZW50KSByZXR1cm47XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZWFjaF92YWx1ZS5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHR0cmFuc2l0aW9uX2luKGVhY2hfYmxvY2tzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRvKGxvY2FsKSB7XG5cdFx0XHRlYWNoX2Jsb2NrcyA9IGVhY2hfYmxvY2tzLmZpbHRlcihCb29sZWFuKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHR0cmFuc2l0aW9uX291dChlYWNoX2Jsb2Nrc1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnQgPSBmYWxzZTtcblx0XHR9LFxuXHRcdGQoZGV0YWNoaW5nKSB7XG5cdFx0XHRpZiAoZGV0YWNoaW5nKSBkZXRhY2goZGl2MSk7XG5cdFx0XHRkZXN0cm95X2VhY2goZWFjaF9ibG9ja3MsIGRldGFjaGluZyk7XG5cdFx0XHRtb3VudGVkID0gZmFsc2U7XG5cdFx0XHRydW5fYWxsKGRpc3Bvc2UpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2ZyYWdtZW50JDQoY3R4KSB7XG5cdGxldCB0ZDtcblx0bGV0IG1ldGFkYXRhcmVzb2x2ZXI7XG5cdGxldCBjdXJyZW50O1xuXG5cdG1ldGFkYXRhcmVzb2x2ZXIgPSBuZXcgTWV0YWRhdGFSZXNvbHZlcih7XG5cdFx0XHRwcm9wczoge1xuXHRcdFx0XHRtZXRhZGF0YTogLyptZXRhZGF0YSovIGN0eFs3XSxcblx0XHRcdFx0JCRzbG90czoge1xuXHRcdFx0XHRcdGRlZmF1bHQ6IFtcblx0XHRcdFx0XHRcdGNyZWF0ZV9kZWZhdWx0X3Nsb3QkMSxcblx0XHRcdFx0XHRcdCh7IG1ldGFkYXRhIH0pID0+ICh7IDc6IG1ldGFkYXRhIH0pLFxuXHRcdFx0XHRcdFx0KHsgbWV0YWRhdGEgfSkgPT4gbWV0YWRhdGEgPyAxMjggOiAwXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQkJHNjb3BlOiB7IGN0eCB9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0dGQgPSBlbGVtZW50KFwidGRcIik7XG5cdFx0XHRjcmVhdGVfY29tcG9uZW50KG1ldGFkYXRhcmVzb2x2ZXIuJCQuZnJhZ21lbnQpO1xuXHRcdH0sXG5cdFx0bSh0YXJnZXQsIGFuY2hvcikge1xuXHRcdFx0aW5zZXJ0KHRhcmdldCwgdGQsIGFuY2hvcik7XG5cdFx0XHRtb3VudF9jb21wb25lbnQobWV0YWRhdGFyZXNvbHZlciwgdGQsIG51bGwpO1xuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRwKGN0eCwgW2RpcnR5XSkge1xuXHRcdFx0Y29uc3QgbWV0YWRhdGFyZXNvbHZlcl9jaGFuZ2VzID0ge307XG5cdFx0XHRpZiAoZGlydHkgJiAvKm1ldGFkYXRhKi8gMTI4KSBtZXRhZGF0YXJlc29sdmVyX2NoYW5nZXMubWV0YWRhdGEgPSAvKm1ldGFkYXRhKi8gY3R4WzddO1xuXG5cdFx0XHRpZiAoZGlydHkgJiAvKiQkc2NvcGUsIG1ldGFkYXRhLCBzZWxlY3RlZElkLCBkYXRlLCBkaXNwbGF5ZWRNb250aCwgdG9kYXksIG9uQ2xpY2ssIG9uQ29udGV4dE1lbnUsIG9uSG92ZXIqLyAxNjYzOSkge1xuXHRcdFx0XHRtZXRhZGF0YXJlc29sdmVyX2NoYW5nZXMuJCRzY29wZSA9IHsgZGlydHksIGN0eCB9O1xuXHRcdFx0fVxuXG5cdFx0XHRtZXRhZGF0YXJlc29sdmVyLiRzZXQobWV0YWRhdGFyZXNvbHZlcl9jaGFuZ2VzKTtcblx0XHR9LFxuXHRcdGkobG9jYWwpIHtcblx0XHRcdGlmIChjdXJyZW50KSByZXR1cm47XG5cdFx0XHR0cmFuc2l0aW9uX2luKG1ldGFkYXRhcmVzb2x2ZXIuJCQuZnJhZ21lbnQsIGxvY2FsKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0byhsb2NhbCkge1xuXHRcdFx0dHJhbnNpdGlvbl9vdXQobWV0YWRhdGFyZXNvbHZlci4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZXRhY2hpbmcpIGRldGFjaCh0ZCk7XG5cdFx0XHRkZXN0cm95X2NvbXBvbmVudChtZXRhZGF0YXJlc29sdmVyKTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGluc3RhbmNlJDQoJCRzZWxmLCAkJHByb3BzLCAkJGludmFsaWRhdGUpIHtcblx0XG5cdFxuXHRsZXQgeyBkYXRlIH0gPSAkJHByb3BzO1xuXHRsZXQgeyBtZXRhZGF0YSB9ID0gJCRwcm9wcztcblx0bGV0IHsgb25Ib3ZlciB9ID0gJCRwcm9wcztcblx0bGV0IHsgb25DbGljayB9ID0gJCRwcm9wcztcblx0bGV0IHsgb25Db250ZXh0TWVudSB9ID0gJCRwcm9wcztcblx0bGV0IHsgdG9kYXkgfSA9ICQkcHJvcHM7XG5cdGxldCB7IGRpc3BsYXllZE1vbnRoID0gbnVsbCB9ID0gJCRwcm9wcztcblx0bGV0IHsgc2VsZWN0ZWRJZCA9IG51bGwgfSA9ICQkcHJvcHM7XG5cdGNvbnN0IGNsaWNrX2hhbmRsZXIgPSBlID0+IG9uQ2xpY2soZGF0ZSwgaXNNZXRhUHJlc3NlZChlKSk7XG5cdGNvbnN0IGNvbnRleHRtZW51X2hhbmRsZXIgPSBlID0+IG9uQ29udGV4dE1lbnUoZGF0ZSwgZSk7XG5cdGNvbnN0IHBvaW50ZXJvdmVyX2hhbmRsZXIgPSBlID0+IG9uSG92ZXIoZGF0ZSwgZS50YXJnZXQsIGlzTWV0YVByZXNzZWQoZSkpO1xuXG5cdCQkc2VsZi4kJHNldCA9ICQkcHJvcHMgPT4ge1xuXHRcdGlmIChcImRhdGVcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMCwgZGF0ZSA9ICQkcHJvcHMuZGF0ZSk7XG5cdFx0aWYgKFwibWV0YWRhdGFcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoNywgbWV0YWRhdGEgPSAkJHByb3BzLm1ldGFkYXRhKTtcblx0XHRpZiAoXCJvbkhvdmVyXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDEsIG9uSG92ZXIgPSAkJHByb3BzLm9uSG92ZXIpO1xuXHRcdGlmIChcIm9uQ2xpY2tcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMiwgb25DbGljayA9ICQkcHJvcHMub25DbGljayk7XG5cdFx0aWYgKFwib25Db250ZXh0TWVudVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgzLCBvbkNvbnRleHRNZW51ID0gJCRwcm9wcy5vbkNvbnRleHRNZW51KTtcblx0XHRpZiAoXCJ0b2RheVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSg0LCB0b2RheSA9ICQkcHJvcHMudG9kYXkpO1xuXHRcdGlmIChcImRpc3BsYXllZE1vbnRoXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDUsIGRpc3BsYXllZE1vbnRoID0gJCRwcm9wcy5kaXNwbGF5ZWRNb250aCk7XG5cdFx0aWYgKFwic2VsZWN0ZWRJZFwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSg2LCBzZWxlY3RlZElkID0gJCRwcm9wcy5zZWxlY3RlZElkKTtcblx0fTtcblxuXHRyZXR1cm4gW1xuXHRcdGRhdGUsXG5cdFx0b25Ib3Zlcixcblx0XHRvbkNsaWNrLFxuXHRcdG9uQ29udGV4dE1lbnUsXG5cdFx0dG9kYXksXG5cdFx0ZGlzcGxheWVkTW9udGgsXG5cdFx0c2VsZWN0ZWRJZCxcblx0XHRtZXRhZGF0YSxcblx0XHRjbGlja19oYW5kbGVyLFxuXHRcdGNvbnRleHRtZW51X2hhbmRsZXIsXG5cdFx0cG9pbnRlcm92ZXJfaGFuZGxlclxuXHRdO1xufVxuXG5jbGFzcyBEYXkgZXh0ZW5kcyBTdmVsdGVDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3ZlbHRlLXEzd3FnOS1zdHlsZVwiKSkgYWRkX2NzcyQ0KCk7XG5cblx0XHRpbml0KHRoaXMsIG9wdGlvbnMsIGluc3RhbmNlJDQsIGNyZWF0ZV9mcmFnbWVudCQ0LCBub3RfZXF1YWwsIHtcblx0XHRcdGRhdGU6IDAsXG5cdFx0XHRtZXRhZGF0YTogNyxcblx0XHRcdG9uSG92ZXI6IDEsXG5cdFx0XHRvbkNsaWNrOiAyLFxuXHRcdFx0b25Db250ZXh0TWVudTogMyxcblx0XHRcdHRvZGF5OiA0LFxuXHRcdFx0ZGlzcGxheWVkTW9udGg6IDUsXG5cdFx0XHRzZWxlY3RlZElkOiA2XG5cdFx0fSk7XG5cdH1cbn1cblxuLyogc3JjL2NvbXBvbmVudHMvQXJyb3cuc3ZlbHRlIGdlbmVyYXRlZCBieSBTdmVsdGUgdjMuMzUuMCAqL1xuXG5mdW5jdGlvbiBhZGRfY3NzJDMoKSB7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQoXCJzdHlsZVwiKTtcblx0c3R5bGUuaWQgPSBcInN2ZWx0ZS0xNTZ3N25hLXN0eWxlXCI7XG5cdHN0eWxlLnRleHRDb250ZW50ID0gXCIuYXJyb3cuc3ZlbHRlLTE1Nnc3bmEuc3ZlbHRlLTE1Nnc3bmF7YWxpZ24taXRlbXM6Y2VudGVyO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjI0cHh9LmFycm93LmlzLW1vYmlsZS5zdmVsdGUtMTU2dzduYS5zdmVsdGUtMTU2dzduYXt3aWR0aDozMnB4fS5yaWdodC5zdmVsdGUtMTU2dzduYS5zdmVsdGUtMTU2dzduYXt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9LmFycm93LnN2ZWx0ZS0xNTZ3N25hIHN2Zy5zdmVsdGUtMTU2dzduYXtjb2xvcjp2YXIoLS1jb2xvci1hcnJvdyk7aGVpZ2h0OjE2cHg7d2lkdGg6MTZweH1cIjtcblx0YXBwZW5kKGRvY3VtZW50LmhlYWQsIHN0eWxlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlX2ZyYWdtZW50JDMoY3R4KSB7XG5cdGxldCBkaXY7XG5cdGxldCBzdmc7XG5cdGxldCBwYXRoO1xuXHRsZXQgbW91bnRlZDtcblx0bGV0IGRpc3Bvc2U7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0ZGl2ID0gZWxlbWVudChcImRpdlwiKTtcblx0XHRcdHN2ZyA9IHN2Z19lbGVtZW50KFwic3ZnXCIpO1xuXHRcdFx0cGF0aCA9IHN2Z19lbGVtZW50KFwicGF0aFwiKTtcblx0XHRcdGF0dHIocGF0aCwgXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpO1xuXHRcdFx0YXR0cihwYXRoLCBcImRcIiwgXCJNMzQuNTIgMjM5LjAzTDIyOC44NyA0NC42OWM5LjM3LTkuMzcgMjQuNTctOS4zNyAzMy45NCAwbDIyLjY3IDIyLjY3YzkuMzYgOS4zNiA5LjM3IDI0LjUyLjA0IDMzLjlMMTMxLjQ5IDI1NmwxNTQuMDIgMTU0Ljc1YzkuMzQgOS4zOCA5LjMyIDI0LjU0LS4wNCAzMy45bC0yMi42NyAyMi42N2MtOS4zNyA5LjM3LTI0LjU3IDkuMzctMzMuOTQgMEwzNC41MiAyNzIuOTdjLTkuMzctOS4zNy05LjM3LTI0LjU3IDAtMzMuOTR6XCIpO1xuXHRcdFx0YXR0cihzdmcsIFwiZm9jdXNhYmxlXCIsIFwiZmFsc2VcIik7XG5cdFx0XHRhdHRyKHN2ZywgXCJyb2xlXCIsIFwiaW1nXCIpO1xuXHRcdFx0YXR0cihzdmcsIFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiKTtcblx0XHRcdGF0dHIoc3ZnLCBcInZpZXdCb3hcIiwgXCIwIDAgMzIwIDUxMlwiKTtcblx0XHRcdGF0dHIoc3ZnLCBcImNsYXNzXCIsIFwic3ZlbHRlLTE1Nnc3bmFcIik7XG5cdFx0XHRhdHRyKGRpdiwgXCJjbGFzc1wiLCBcImFycm93IHN2ZWx0ZS0xNTZ3N25hXCIpO1xuXHRcdFx0YXR0cihkaXYsIFwiYXJpYS1sYWJlbFwiLCAvKnRvb2x0aXAqLyBjdHhbMV0pO1xuXHRcdFx0dG9nZ2xlX2NsYXNzKGRpdiwgXCJpcy1tb2JpbGVcIiwgLyppc01vYmlsZSovIGN0eFszXSk7XG5cdFx0XHR0b2dnbGVfY2xhc3MoZGl2LCBcInJpZ2h0XCIsIC8qZGlyZWN0aW9uKi8gY3R4WzJdID09PSBcInJpZ2h0XCIpO1xuXHRcdH0sXG5cdFx0bSh0YXJnZXQsIGFuY2hvcikge1xuXHRcdFx0aW5zZXJ0KHRhcmdldCwgZGl2LCBhbmNob3IpO1xuXHRcdFx0YXBwZW5kKGRpdiwgc3ZnKTtcblx0XHRcdGFwcGVuZChzdmcsIHBhdGgpO1xuXG5cdFx0XHRpZiAoIW1vdW50ZWQpIHtcblx0XHRcdFx0ZGlzcG9zZSA9IGxpc3RlbihkaXYsIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChpc19mdW5jdGlvbigvKm9uQ2xpY2sqLyBjdHhbMF0pKSAvKm9uQ2xpY2sqLyBjdHhbMF0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bW91bnRlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRwKG5ld19jdHgsIFtkaXJ0eV0pIHtcblx0XHRcdGN0eCA9IG5ld19jdHg7XG5cblx0XHRcdGlmIChkaXJ0eSAmIC8qdG9vbHRpcCovIDIpIHtcblx0XHRcdFx0YXR0cihkaXYsIFwiYXJpYS1sYWJlbFwiLCAvKnRvb2x0aXAqLyBjdHhbMV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGlydHkgJiAvKmRpcmVjdGlvbiovIDQpIHtcblx0XHRcdFx0dG9nZ2xlX2NsYXNzKGRpdiwgXCJyaWdodFwiLCAvKmRpcmVjdGlvbiovIGN0eFsyXSA9PT0gXCJyaWdodFwiKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGk6IG5vb3AsXG5cdFx0bzogbm9vcCxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKGRpdik7XG5cdFx0XHRtb3VudGVkID0gZmFsc2U7XG5cdFx0XHRkaXNwb3NlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBpbnN0YW5jZSQzKCQkc2VsZiwgJCRwcm9wcywgJCRpbnZhbGlkYXRlKSB7XG5cdGxldCB7IG9uQ2xpY2sgfSA9ICQkcHJvcHM7XG5cdGxldCB7IHRvb2x0aXAgfSA9ICQkcHJvcHM7XG5cdGxldCB7IGRpcmVjdGlvbiB9ID0gJCRwcm9wcztcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRsZXQgaXNNb2JpbGUgPSB3aW5kb3cuYXBwLmlzTW9iaWxlO1xuXG5cdCQkc2VsZi4kJHNldCA9ICQkcHJvcHMgPT4ge1xuXHRcdGlmIChcIm9uQ2xpY2tcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMCwgb25DbGljayA9ICQkcHJvcHMub25DbGljayk7XG5cdFx0aWYgKFwidG9vbHRpcFwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgxLCB0b29sdGlwID0gJCRwcm9wcy50b29sdGlwKTtcblx0XHRpZiAoXCJkaXJlY3Rpb25cIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMiwgZGlyZWN0aW9uID0gJCRwcm9wcy5kaXJlY3Rpb24pO1xuXHR9O1xuXG5cdHJldHVybiBbb25DbGljaywgdG9vbHRpcCwgZGlyZWN0aW9uLCBpc01vYmlsZV07XG59XG5cbmNsYXNzIEFycm93IGV4dGVuZHMgU3ZlbHRlQ29tcG9uZW50IHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cdFx0aWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN2ZWx0ZS0xNTZ3N25hLXN0eWxlXCIpKSBhZGRfY3NzJDMoKTtcblx0XHRpbml0KHRoaXMsIG9wdGlvbnMsIGluc3RhbmNlJDMsIGNyZWF0ZV9mcmFnbWVudCQzLCBzYWZlX25vdF9lcXVhbCwgeyBvbkNsaWNrOiAwLCB0b29sdGlwOiAxLCBkaXJlY3Rpb246IDIgfSk7XG5cdH1cbn1cblxuLyogc3JjL2NvbXBvbmVudHMvTmF2LnN2ZWx0ZSBnZW5lcmF0ZWQgYnkgU3ZlbHRlIHYzLjM1LjAgKi9cblxuZnVuY3Rpb24gYWRkX2NzcyQyKCkge1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50KFwic3R5bGVcIik7XG5cdHN0eWxlLmlkID0gXCJzdmVsdGUtMXZ3cjlkZC1zdHlsZVwiO1xuXHRzdHlsZS50ZXh0Q29udGVudCA9IFwiLm5hdi5zdmVsdGUtMXZ3cjlkZC5zdmVsdGUtMXZ3cjlkZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O21hcmdpbjowLjZlbSAwIDFlbTtwYWRkaW5nOjAgOHB4O3dpZHRoOjEwMCV9Lm5hdi5pcy1tb2JpbGUuc3ZlbHRlLTF2d3I5ZGQuc3ZlbHRlLTF2d3I5ZGR7cGFkZGluZzowfS50aXRsZS5zdmVsdGUtMXZ3cjlkZC5zdmVsdGUtMXZ3cjlkZHtjb2xvcjp2YXIoLS1jb2xvci10ZXh0LXRpdGxlKTtmb250LXNpemU6MS41ZW07bWFyZ2luOjB9LmlzLW1vYmlsZS5zdmVsdGUtMXZ3cjlkZCAudGl0bGUuc3ZlbHRlLTF2d3I5ZGR7Zm9udC1zaXplOjEuM2VtfS5tb250aC5zdmVsdGUtMXZ3cjlkZC5zdmVsdGUtMXZ3cjlkZHtmb250LXdlaWdodDo1MDA7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX0ueWVhci5zdmVsdGUtMXZ3cjlkZC5zdmVsdGUtMXZ3cjlkZHtjb2xvcjp2YXIoLS1pbnRlcmFjdGl2ZS1hY2NlbnQpfS5yaWdodC1uYXYuc3ZlbHRlLTF2d3I5ZGQuc3ZlbHRlLTF2d3I5ZGR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWxlZnQ6YXV0b30ucmVzZXQtYnV0dG9uLnN2ZWx0ZS0xdndyOWRkLnN2ZWx0ZS0xdndyOWRke2N1cnNvcjpwb2ludGVyO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOnZhcigtLXRleHQtbXV0ZWQpO2ZvbnQtc2l6ZTowLjdlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6MXB4O21hcmdpbjowIDRweDtwYWRkaW5nOjBweCA0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pcy1tb2JpbGUuc3ZlbHRlLTF2d3I5ZGQgLnJlc2V0LWJ1dHRvbi5zdmVsdGUtMXZ3cjlkZHtkaXNwbGF5Om5vbmV9XCI7XG5cdGFwcGVuZChkb2N1bWVudC5oZWFkLCBzdHlsZSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZV9mcmFnbWVudCQyKGN0eCkge1xuXHRsZXQgZGl2Mjtcblx0bGV0IGgzO1xuXHRsZXQgc3BhbjA7XG5cdGxldCB0MF92YWx1ZSA9IC8qZGlzcGxheWVkTW9udGgqLyBjdHhbMF0uZm9ybWF0KFwiTU1NXCIpICsgXCJcIjtcblx0bGV0IHQwO1xuXHRsZXQgdDE7XG5cdGxldCBzcGFuMTtcblx0bGV0IHQyX3ZhbHVlID0gLypkaXNwbGF5ZWRNb250aCovIGN0eFswXS5mb3JtYXQoXCJZWVlZXCIpICsgXCJcIjtcblx0bGV0IHQyO1xuXHRsZXQgdDM7XG5cdGxldCBkaXYxO1xuXHRsZXQgYXJyb3cwO1xuXHRsZXQgdDQ7XG5cdGxldCBkaXYwO1xuXHRsZXQgdDY7XG5cdGxldCBhcnJvdzE7XG5cdGxldCBjdXJyZW50O1xuXHRsZXQgbW91bnRlZDtcblx0bGV0IGRpc3Bvc2U7XG5cblx0YXJyb3cwID0gbmV3IEFycm93KHtcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdGRpcmVjdGlvbjogXCJsZWZ0XCIsXG5cdFx0XHRcdG9uQ2xpY2s6IC8qZGVjcmVtZW50RGlzcGxheWVkTW9udGgqLyBjdHhbM10sXG5cdFx0XHRcdHRvb2x0aXA6IFwiUHJldmlvdXMgTW9udGhcIlxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdGFycm93MSA9IG5ldyBBcnJvdyh7XG5cdFx0XHRwcm9wczoge1xuXHRcdFx0XHRkaXJlY3Rpb246IFwicmlnaHRcIixcblx0XHRcdFx0b25DbGljazogLyppbmNyZW1lbnREaXNwbGF5ZWRNb250aCovIGN0eFsyXSxcblx0XHRcdFx0dG9vbHRpcDogXCJOZXh0IE1vbnRoXCJcblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHRkaXYyID0gZWxlbWVudChcImRpdlwiKTtcblx0XHRcdGgzID0gZWxlbWVudChcImgzXCIpO1xuXHRcdFx0c3BhbjAgPSBlbGVtZW50KFwic3BhblwiKTtcblx0XHRcdHQwID0gdGV4dCh0MF92YWx1ZSk7XG5cdFx0XHR0MSA9IHNwYWNlKCk7XG5cdFx0XHRzcGFuMSA9IGVsZW1lbnQoXCJzcGFuXCIpO1xuXHRcdFx0dDIgPSB0ZXh0KHQyX3ZhbHVlKTtcblx0XHRcdHQzID0gc3BhY2UoKTtcblx0XHRcdGRpdjEgPSBlbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y3JlYXRlX2NvbXBvbmVudChhcnJvdzAuJCQuZnJhZ21lbnQpO1xuXHRcdFx0dDQgPSBzcGFjZSgpO1xuXHRcdFx0ZGl2MCA9IGVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRkaXYwLnRleHRDb250ZW50ID0gYCR7Lyp0b2RheURpc3BsYXlTdHIqLyBjdHhbNF19YDtcblx0XHRcdHQ2ID0gc3BhY2UoKTtcblx0XHRcdGNyZWF0ZV9jb21wb25lbnQoYXJyb3cxLiQkLmZyYWdtZW50KTtcblx0XHRcdGF0dHIoc3BhbjAsIFwiY2xhc3NcIiwgXCJtb250aCBzdmVsdGUtMXZ3cjlkZFwiKTtcblx0XHRcdGF0dHIoc3BhbjEsIFwiY2xhc3NcIiwgXCJ5ZWFyIHN2ZWx0ZS0xdndyOWRkXCIpO1xuXHRcdFx0YXR0cihoMywgXCJjbGFzc1wiLCBcInRpdGxlIHN2ZWx0ZS0xdndyOWRkXCIpO1xuXHRcdFx0YXR0cihkaXYwLCBcImNsYXNzXCIsIFwicmVzZXQtYnV0dG9uIHN2ZWx0ZS0xdndyOWRkXCIpO1xuXHRcdFx0YXR0cihkaXYxLCBcImNsYXNzXCIsIFwicmlnaHQtbmF2IHN2ZWx0ZS0xdndyOWRkXCIpO1xuXHRcdFx0YXR0cihkaXYyLCBcImNsYXNzXCIsIFwibmF2IHN2ZWx0ZS0xdndyOWRkXCIpO1xuXHRcdFx0dG9nZ2xlX2NsYXNzKGRpdjIsIFwiaXMtbW9iaWxlXCIsIC8qaXNNb2JpbGUqLyBjdHhbNV0pO1xuXHRcdH0sXG5cdFx0bSh0YXJnZXQsIGFuY2hvcikge1xuXHRcdFx0aW5zZXJ0KHRhcmdldCwgZGl2MiwgYW5jaG9yKTtcblx0XHRcdGFwcGVuZChkaXYyLCBoMyk7XG5cdFx0XHRhcHBlbmQoaDMsIHNwYW4wKTtcblx0XHRcdGFwcGVuZChzcGFuMCwgdDApO1xuXHRcdFx0YXBwZW5kKGgzLCB0MSk7XG5cdFx0XHRhcHBlbmQoaDMsIHNwYW4xKTtcblx0XHRcdGFwcGVuZChzcGFuMSwgdDIpO1xuXHRcdFx0YXBwZW5kKGRpdjIsIHQzKTtcblx0XHRcdGFwcGVuZChkaXYyLCBkaXYxKTtcblx0XHRcdG1vdW50X2NvbXBvbmVudChhcnJvdzAsIGRpdjEsIG51bGwpO1xuXHRcdFx0YXBwZW5kKGRpdjEsIHQ0KTtcblx0XHRcdGFwcGVuZChkaXYxLCBkaXYwKTtcblx0XHRcdGFwcGVuZChkaXYxLCB0Nik7XG5cdFx0XHRtb3VudF9jb21wb25lbnQoYXJyb3cxLCBkaXYxLCBudWxsKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXG5cdFx0XHRpZiAoIW1vdW50ZWQpIHtcblx0XHRcdFx0ZGlzcG9zZSA9IFtcblx0XHRcdFx0XHRsaXN0ZW4oaDMsIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKGlzX2Z1bmN0aW9uKC8qcmVzZXREaXNwbGF5ZWRNb250aCovIGN0eFsxXSkpIC8qcmVzZXREaXNwbGF5ZWRNb250aCovIGN0eFsxXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGxpc3RlbihkaXYwLCBcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChpc19mdW5jdGlvbigvKnJlc2V0RGlzcGxheWVkTW9udGgqLyBjdHhbMV0pKSAvKnJlc2V0RGlzcGxheWVkTW9udGgqLyBjdHhbMV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdO1xuXG5cdFx0XHRcdG1vdW50ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cChuZXdfY3R4LCBbZGlydHldKSB7XG5cdFx0XHRjdHggPSBuZXdfY3R4O1xuXHRcdFx0aWYgKCghY3VycmVudCB8fCBkaXJ0eSAmIC8qZGlzcGxheWVkTW9udGgqLyAxKSAmJiB0MF92YWx1ZSAhPT0gKHQwX3ZhbHVlID0gLypkaXNwbGF5ZWRNb250aCovIGN0eFswXS5mb3JtYXQoXCJNTU1cIikgKyBcIlwiKSkgc2V0X2RhdGEodDAsIHQwX3ZhbHVlKTtcblx0XHRcdGlmICgoIWN1cnJlbnQgfHwgZGlydHkgJiAvKmRpc3BsYXllZE1vbnRoKi8gMSkgJiYgdDJfdmFsdWUgIT09ICh0Ml92YWx1ZSA9IC8qZGlzcGxheWVkTW9udGgqLyBjdHhbMF0uZm9ybWF0KFwiWVlZWVwiKSArIFwiXCIpKSBzZXRfZGF0YSh0MiwgdDJfdmFsdWUpO1xuXHRcdFx0Y29uc3QgYXJyb3cwX2NoYW5nZXMgPSB7fTtcblx0XHRcdGlmIChkaXJ0eSAmIC8qZGVjcmVtZW50RGlzcGxheWVkTW9udGgqLyA4KSBhcnJvdzBfY2hhbmdlcy5vbkNsaWNrID0gLypkZWNyZW1lbnREaXNwbGF5ZWRNb250aCovIGN0eFszXTtcblx0XHRcdGFycm93MC4kc2V0KGFycm93MF9jaGFuZ2VzKTtcblx0XHRcdGNvbnN0IGFycm93MV9jaGFuZ2VzID0ge307XG5cdFx0XHRpZiAoZGlydHkgJiAvKmluY3JlbWVudERpc3BsYXllZE1vbnRoKi8gNCkgYXJyb3cxX2NoYW5nZXMub25DbGljayA9IC8qaW5jcmVtZW50RGlzcGxheWVkTW9udGgqLyBjdHhbMl07XG5cdFx0XHRhcnJvdzEuJHNldChhcnJvdzFfY2hhbmdlcyk7XG5cdFx0fSxcblx0XHRpKGxvY2FsKSB7XG5cdFx0XHRpZiAoY3VycmVudCkgcmV0dXJuO1xuXHRcdFx0dHJhbnNpdGlvbl9pbihhcnJvdzAuJCQuZnJhZ21lbnQsIGxvY2FsKTtcblx0XHRcdHRyYW5zaXRpb25faW4oYXJyb3cxLiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdHRyYW5zaXRpb25fb3V0KGFycm93MC4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXHRcdFx0dHJhbnNpdGlvbl9vdXQoYXJyb3cxLiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKGRpdjIpO1xuXHRcdFx0ZGVzdHJveV9jb21wb25lbnQoYXJyb3cwKTtcblx0XHRcdGRlc3Ryb3lfY29tcG9uZW50KGFycm93MSk7XG5cdFx0XHRtb3VudGVkID0gZmFsc2U7XG5cdFx0XHRydW5fYWxsKGRpc3Bvc2UpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gaW5zdGFuY2UkMigkJHNlbGYsICQkcHJvcHMsICQkaW52YWxpZGF0ZSkge1xuXHRcblx0bGV0IHsgZGlzcGxheWVkTW9udGggfSA9ICQkcHJvcHM7XG5cdGxldCB7IHRvZGF5IH0gPSAkJHByb3BzO1xuXHRsZXQgeyByZXNldERpc3BsYXllZE1vbnRoIH0gPSAkJHByb3BzO1xuXHRsZXQgeyBpbmNyZW1lbnREaXNwbGF5ZWRNb250aCB9ID0gJCRwcm9wcztcblx0bGV0IHsgZGVjcmVtZW50RGlzcGxheWVkTW9udGggfSA9ICQkcHJvcHM7XG5cblx0Ly8gR2V0IHRoZSB3b3JkICdUb2RheScgYnV0IGxvY2FsaXplZCB0byB0aGUgY3VycmVudCBsYW5ndWFnZVxuXHRjb25zdCB0b2RheURpc3BsYXlTdHIgPSB0b2RheS5jYWxlbmRhcigpLnNwbGl0KC9cXGR8XFxzLylbMF07XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0bGV0IGlzTW9iaWxlID0gd2luZG93LmFwcC5pc01vYmlsZTtcblxuXHQkJHNlbGYuJCRzZXQgPSAkJHByb3BzID0+IHtcblx0XHRpZiAoXCJkaXNwbGF5ZWRNb250aFwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgwLCBkaXNwbGF5ZWRNb250aCA9ICQkcHJvcHMuZGlzcGxheWVkTW9udGgpO1xuXHRcdGlmIChcInRvZGF5XCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDYsIHRvZGF5ID0gJCRwcm9wcy50b2RheSk7XG5cdFx0aWYgKFwicmVzZXREaXNwbGF5ZWRNb250aFwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgxLCByZXNldERpc3BsYXllZE1vbnRoID0gJCRwcm9wcy5yZXNldERpc3BsYXllZE1vbnRoKTtcblx0XHRpZiAoXCJpbmNyZW1lbnREaXNwbGF5ZWRNb250aFwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgyLCBpbmNyZW1lbnREaXNwbGF5ZWRNb250aCA9ICQkcHJvcHMuaW5jcmVtZW50RGlzcGxheWVkTW9udGgpO1xuXHRcdGlmIChcImRlY3JlbWVudERpc3BsYXllZE1vbnRoXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDMsIGRlY3JlbWVudERpc3BsYXllZE1vbnRoID0gJCRwcm9wcy5kZWNyZW1lbnREaXNwbGF5ZWRNb250aCk7XG5cdH07XG5cblx0cmV0dXJuIFtcblx0XHRkaXNwbGF5ZWRNb250aCxcblx0XHRyZXNldERpc3BsYXllZE1vbnRoLFxuXHRcdGluY3JlbWVudERpc3BsYXllZE1vbnRoLFxuXHRcdGRlY3JlbWVudERpc3BsYXllZE1vbnRoLFxuXHRcdHRvZGF5RGlzcGxheVN0cixcblx0XHRpc01vYmlsZSxcblx0XHR0b2RheVxuXHRdO1xufVxuXG5jbGFzcyBOYXYgZXh0ZW5kcyBTdmVsdGVDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3ZlbHRlLTF2d3I5ZGQtc3R5bGVcIikpIGFkZF9jc3MkMigpO1xuXG5cdFx0aW5pdCh0aGlzLCBvcHRpb25zLCBpbnN0YW5jZSQyLCBjcmVhdGVfZnJhZ21lbnQkMiwgc2FmZV9ub3RfZXF1YWwsIHtcblx0XHRcdGRpc3BsYXllZE1vbnRoOiAwLFxuXHRcdFx0dG9kYXk6IDYsXG5cdFx0XHRyZXNldERpc3BsYXllZE1vbnRoOiAxLFxuXHRcdFx0aW5jcmVtZW50RGlzcGxheWVkTW9udGg6IDIsXG5cdFx0XHRkZWNyZW1lbnREaXNwbGF5ZWRNb250aDogM1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qIHNyYy9jb21wb25lbnRzL1dlZWtOdW0uc3ZlbHRlIGdlbmVyYXRlZCBieSBTdmVsdGUgdjMuMzUuMCAqL1xuXG5mdW5jdGlvbiBhZGRfY3NzJDEoKSB7XG5cdHZhciBzdHlsZSA9IGVsZW1lbnQoXCJzdHlsZVwiKTtcblx0c3R5bGUuaWQgPSBcInN2ZWx0ZS1lZ3QweWQtc3R5bGVcIjtcblx0c3R5bGUudGV4dENvbnRlbnQgPSBcInRkLnN2ZWx0ZS1lZ3QweWR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCB2YXIoLS1iYWNrZ3JvdW5kLW1vZGlmaWVyLWJvcmRlcil9LndlZWstbnVtLnN2ZWx0ZS1lZ3QweWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdlZWtudW0pO2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOnZhcigtLWNvbG9yLXRleHQtd2Vla251bSk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjAuNjVlbTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgMC4xcyBlYXNlLWluLCBjb2xvciAwLjFzIGVhc2UtaW47dmVydGljYWwtYWxpZ246YmFzZWxpbmV9LndlZWstbnVtLnN2ZWx0ZS1lZ3QweWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbnRlcmFjdGl2ZS1ob3Zlcil9LndlZWstbnVtLmFjdGl2ZS5zdmVsdGUtZWd0MHlkOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW50ZXJhY3RpdmUtYWNjZW50LWhvdmVyKX0uYWN0aXZlLnN2ZWx0ZS1lZ3QweWR7Y29sb3I6dmFyKC0tdGV4dC1vbi1hY2NlbnQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0taW50ZXJhY3RpdmUtYWNjZW50KX0uZG90LWNvbnRhaW5lci5zdmVsdGUtZWd0MHlke2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjZweDttaW4taGVpZ2h0OjZweH1cIjtcblx0YXBwZW5kKGRvY3VtZW50LmhlYWQsIHN0eWxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0X2VhY2hfY29udGV4dCQxKGN0eCwgbGlzdCwgaSkge1xuXHRjb25zdCBjaGlsZF9jdHggPSBjdHguc2xpY2UoKTtcblx0Y2hpbGRfY3R4WzExXSA9IGxpc3RbaV07XG5cdHJldHVybiBjaGlsZF9jdHg7XG59XG5cbi8vICgzNTo4KSB7I2VhY2ggbWV0YWRhdGEuZG90cyBhcyBkb3R9XG5mdW5jdGlvbiBjcmVhdGVfZWFjaF9ibG9jayQxKGN0eCkge1xuXHRsZXQgZG90O1xuXHRsZXQgY3VycmVudDtcblx0Y29uc3QgZG90X3NwcmVhZF9sZXZlbHMgPSBbLypkb3QqLyBjdHhbMTFdXTtcblx0bGV0IGRvdF9wcm9wcyA9IHt9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgZG90X3NwcmVhZF9sZXZlbHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRkb3RfcHJvcHMgPSBhc3NpZ24oZG90X3Byb3BzLCBkb3Rfc3ByZWFkX2xldmVsc1tpXSk7XG5cdH1cblxuXHRkb3QgPSBuZXcgRG90KHsgcHJvcHM6IGRvdF9wcm9wcyB9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHRjcmVhdGVfY29tcG9uZW50KGRvdC4kJC5mcmFnbWVudCk7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRtb3VudF9jb21wb25lbnQoZG90LCB0YXJnZXQsIGFuY2hvcik7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdHAoY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y29uc3QgZG90X2NoYW5nZXMgPSAoZGlydHkgJiAvKm1ldGFkYXRhKi8gNjQpXG5cdFx0XHQ/IGdldF9zcHJlYWRfdXBkYXRlKGRvdF9zcHJlYWRfbGV2ZWxzLCBbZ2V0X3NwcmVhZF9vYmplY3QoLypkb3QqLyBjdHhbMTFdKV0pXG5cdFx0XHQ6IHt9O1xuXG5cdFx0XHRkb3QuJHNldChkb3RfY2hhbmdlcyk7XG5cdFx0fSxcblx0XHRpKGxvY2FsKSB7XG5cdFx0XHRpZiAoY3VycmVudCkgcmV0dXJuO1xuXHRcdFx0dHJhbnNpdGlvbl9pbihkb3QuJCQuZnJhZ21lbnQsIGxvY2FsKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0byhsb2NhbCkge1xuXHRcdFx0dHJhbnNpdGlvbl9vdXQoZG90LiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0ZGVzdHJveV9jb21wb25lbnQoZG90LCBkZXRhY2hpbmcpO1xuXHRcdH1cblx0fTtcbn1cblxuLy8gKDI0OjIpIDxNZXRhZGF0YVJlc29sdmVyIG1ldGFkYXRhPVwie21ldGFkYXRhfVwiIGxldDptZXRhZGF0YT5cbmZ1bmN0aW9uIGNyZWF0ZV9kZWZhdWx0X3Nsb3QoY3R4KSB7XG5cdGxldCBkaXYxO1xuXHRsZXQgdDA7XG5cdGxldCB0MTtcblx0bGV0IGRpdjA7XG5cdGxldCBkaXYxX2NsYXNzX3ZhbHVlO1xuXHRsZXQgY3VycmVudDtcblx0bGV0IG1vdW50ZWQ7XG5cdGxldCBkaXNwb3NlO1xuXHRsZXQgZWFjaF92YWx1ZSA9IC8qbWV0YWRhdGEqLyBjdHhbNl0uZG90cztcblx0bGV0IGVhY2hfYmxvY2tzID0gW107XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX3ZhbHVlLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZWFjaF9ibG9ja3NbaV0gPSBjcmVhdGVfZWFjaF9ibG9jayQxKGdldF9lYWNoX2NvbnRleHQkMShjdHgsIGVhY2hfdmFsdWUsIGkpKTtcblx0fVxuXG5cdGNvbnN0IG91dCA9IGkgPT4gdHJhbnNpdGlvbl9vdXQoZWFjaF9ibG9ja3NbaV0sIDEsIDEsICgpID0+IHtcblx0XHRlYWNoX2Jsb2Nrc1tpXSA9IG51bGw7XG5cdH0pO1xuXG5cdHJldHVybiB7XG5cdFx0YygpIHtcblx0XHRcdGRpdjEgPSBlbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0dDAgPSB0ZXh0KC8qd2Vla051bSovIGN0eFswXSk7XG5cdFx0XHR0MSA9IHNwYWNlKCk7XG5cdFx0XHRkaXYwID0gZWxlbWVudChcImRpdlwiKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5jKCk7XG5cdFx0XHR9XG5cblx0XHRcdGF0dHIoZGl2MCwgXCJjbGFzc1wiLCBcImRvdC1jb250YWluZXIgc3ZlbHRlLWVndDB5ZFwiKTtcblx0XHRcdGF0dHIoZGl2MSwgXCJjbGFzc1wiLCBkaXYxX2NsYXNzX3ZhbHVlID0gXCJcIiArIChudWxsX3RvX2VtcHR5KGB3ZWVrLW51bSAkey8qbWV0YWRhdGEqLyBjdHhbNl0uY2xhc3Nlcy5qb2luKFwiIFwiKX1gKSArIFwiIHN2ZWx0ZS1lZ3QweWRcIikpO1xuXHRcdFx0dG9nZ2xlX2NsYXNzKGRpdjEsIFwiYWN0aXZlXCIsIC8qc2VsZWN0ZWRJZCovIGN0eFs1XSA9PT0gZ2V0RGF0ZVVJRF8xKC8qZGF5cyovIGN0eFsxXVswXSwgXCJ3ZWVrXCIpKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGluc2VydCh0YXJnZXQsIGRpdjEsIGFuY2hvcik7XG5cdFx0XHRhcHBlbmQoZGl2MSwgdDApO1xuXHRcdFx0YXBwZW5kKGRpdjEsIHQxKTtcblx0XHRcdGFwcGVuZChkaXYxLCBkaXYwKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5tKGRpdjAsIG51bGwpO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblxuXHRcdFx0aWYgKCFtb3VudGVkKSB7XG5cdFx0XHRcdGRpc3Bvc2UgPSBbXG5cdFx0XHRcdFx0bGlzdGVuKGRpdjEsIFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0aWYgKGlzX2Z1bmN0aW9uKC8qb25DbGljayovIGN0eFszXSAmJiAvKmNsaWNrX2hhbmRsZXIqLyBjdHhbOF0pKSAoLypvbkNsaWNrKi8gY3R4WzNdICYmIC8qY2xpY2tfaGFuZGxlciovIGN0eFs4XSkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRsaXN0ZW4oZGl2MSwgXCJjb250ZXh0bWVudVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRpZiAoaXNfZnVuY3Rpb24oLypvbkNvbnRleHRNZW51Ki8gY3R4WzRdICYmIC8qY29udGV4dG1lbnVfaGFuZGxlciovIGN0eFs5XSkpICgvKm9uQ29udGV4dE1lbnUqLyBjdHhbNF0gJiYgLypjb250ZXh0bWVudV9oYW5kbGVyKi8gY3R4WzldKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdGxpc3RlbihkaXYxLCBcInBvaW50ZXJvdmVyXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGlmIChpc19mdW5jdGlvbigvKm9uSG92ZXIqLyBjdHhbMl0gJiYgLypwb2ludGVyb3Zlcl9oYW5kbGVyKi8gY3R4WzEwXSkpICgvKm9uSG92ZXIqLyBjdHhbMl0gJiYgLypwb2ludGVyb3Zlcl9oYW5kbGVyKi8gY3R4WzEwXSkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRdO1xuXG5cdFx0XHRcdG1vdW50ZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cChuZXdfY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y3R4ID0gbmV3X2N0eDtcblx0XHRcdGlmICghY3VycmVudCB8fCBkaXJ0eSAmIC8qd2Vla051bSovIDEpIHNldF9kYXRhKHQwLCAvKndlZWtOdW0qLyBjdHhbMF0pO1xuXG5cdFx0XHRpZiAoZGlydHkgJiAvKm1ldGFkYXRhKi8gNjQpIHtcblx0XHRcdFx0ZWFjaF92YWx1ZSA9IC8qbWV0YWRhdGEqLyBjdHhbNl0uZG90cztcblx0XHRcdFx0bGV0IGk7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGVhY2hfdmFsdWUubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdFx0XHRjb25zdCBjaGlsZF9jdHggPSBnZXRfZWFjaF9jb250ZXh0JDEoY3R4LCBlYWNoX3ZhbHVlLCBpKTtcblxuXHRcdFx0XHRcdGlmIChlYWNoX2Jsb2Nrc1tpXSkge1xuXHRcdFx0XHRcdFx0ZWFjaF9ibG9ja3NbaV0ucChjaGlsZF9jdHgsIGRpcnR5KTtcblx0XHRcdFx0XHRcdHRyYW5zaXRpb25faW4oZWFjaF9ibG9ja3NbaV0sIDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXSA9IGNyZWF0ZV9lYWNoX2Jsb2NrJDEoY2hpbGRfY3R4KTtcblx0XHRcdFx0XHRcdGVhY2hfYmxvY2tzW2ldLmMoKTtcblx0XHRcdFx0XHRcdHRyYW5zaXRpb25faW4oZWFjaF9ibG9ja3NbaV0sIDEpO1xuXHRcdFx0XHRcdFx0ZWFjaF9ibG9ja3NbaV0ubShkaXYwLCBudWxsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRncm91cF9vdXRyb3MoKTtcblxuXHRcdFx0XHRmb3IgKGkgPSBlYWNoX3ZhbHVlLmxlbmd0aDsgaSA8IGVhY2hfYmxvY2tzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdFx0b3V0KGkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2hlY2tfb3V0cm9zKCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY3VycmVudCB8fCBkaXJ0eSAmIC8qbWV0YWRhdGEqLyA2NCAmJiBkaXYxX2NsYXNzX3ZhbHVlICE9PSAoZGl2MV9jbGFzc192YWx1ZSA9IFwiXCIgKyAobnVsbF90b19lbXB0eShgd2Vlay1udW0gJHsvKm1ldGFkYXRhKi8gY3R4WzZdLmNsYXNzZXMuam9pbihcIiBcIil9YCkgKyBcIiBzdmVsdGUtZWd0MHlkXCIpKSkge1xuXHRcdFx0XHRhdHRyKGRpdjEsIFwiY2xhc3NcIiwgZGl2MV9jbGFzc192YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChkaXJ0eSAmIC8qbWV0YWRhdGEsIHNlbGVjdGVkSWQsIGdldERhdGVVSUQsIGRheXMqLyA5OCkge1xuXHRcdFx0XHR0b2dnbGVfY2xhc3MoZGl2MSwgXCJhY3RpdmVcIiwgLypzZWxlY3RlZElkKi8gY3R4WzVdID09PSBnZXREYXRlVUlEXzEoLypkYXlzKi8gY3R4WzFdWzBdLCBcIndlZWtcIikpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX3ZhbHVlLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdHRyYW5zaXRpb25faW4oZWFjaF9ibG9ja3NbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdGVhY2hfYmxvY2tzID0gZWFjaF9ibG9ja3MuZmlsdGVyKEJvb2xlYW4pO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfYmxvY2tzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdHRyYW5zaXRpb25fb3V0KGVhY2hfYmxvY2tzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZXRhY2hpbmcpIGRldGFjaChkaXYxKTtcblx0XHRcdGRlc3Ryb3lfZWFjaChlYWNoX2Jsb2NrcywgZGV0YWNoaW5nKTtcblx0XHRcdG1vdW50ZWQgPSBmYWxzZTtcblx0XHRcdHJ1bl9hbGwoZGlzcG9zZSk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVfZnJhZ21lbnQkMShjdHgpIHtcblx0bGV0IHRkO1xuXHRsZXQgbWV0YWRhdGFyZXNvbHZlcjtcblx0bGV0IGN1cnJlbnQ7XG5cblx0bWV0YWRhdGFyZXNvbHZlciA9IG5ldyBNZXRhZGF0YVJlc29sdmVyKHtcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdG1ldGFkYXRhOiAvKm1ldGFkYXRhKi8gY3R4WzZdLFxuXHRcdFx0XHQkJHNsb3RzOiB7XG5cdFx0XHRcdFx0ZGVmYXVsdDogW1xuXHRcdFx0XHRcdFx0Y3JlYXRlX2RlZmF1bHRfc2xvdCxcblx0XHRcdFx0XHRcdCh7IG1ldGFkYXRhIH0pID0+ICh7IDY6IG1ldGFkYXRhIH0pLFxuXHRcdFx0XHRcdFx0KHsgbWV0YWRhdGEgfSkgPT4gbWV0YWRhdGEgPyA2NCA6IDBcblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCQkc2NvcGU6IHsgY3R4IH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHR0ZCA9IGVsZW1lbnQoXCJ0ZFwiKTtcblx0XHRcdGNyZWF0ZV9jb21wb25lbnQobWV0YWRhdGFyZXNvbHZlci4kJC5mcmFnbWVudCk7XG5cdFx0XHRhdHRyKHRkLCBcImNsYXNzXCIsIFwic3ZlbHRlLWVndDB5ZFwiKTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGluc2VydCh0YXJnZXQsIHRkLCBhbmNob3IpO1xuXHRcdFx0bW91bnRfY29tcG9uZW50KG1ldGFkYXRhcmVzb2x2ZXIsIHRkLCBudWxsKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0cChjdHgsIFtkaXJ0eV0pIHtcblx0XHRcdGNvbnN0IG1ldGFkYXRhcmVzb2x2ZXJfY2hhbmdlcyA9IHt9O1xuXHRcdFx0aWYgKGRpcnR5ICYgLyptZXRhZGF0YSovIDY0KSBtZXRhZGF0YXJlc29sdmVyX2NoYW5nZXMubWV0YWRhdGEgPSAvKm1ldGFkYXRhKi8gY3R4WzZdO1xuXG5cdFx0XHRpZiAoZGlydHkgJiAvKiQkc2NvcGUsIG1ldGFkYXRhLCBzZWxlY3RlZElkLCBkYXlzLCBvbkNsaWNrLCBzdGFydE9mV2Vlaywgb25Db250ZXh0TWVudSwgb25Ib3Zlciwgd2Vla051bSovIDE2NjM5KSB7XG5cdFx0XHRcdG1ldGFkYXRhcmVzb2x2ZXJfY2hhbmdlcy4kJHNjb3BlID0geyBkaXJ0eSwgY3R4IH07XG5cdFx0XHR9XG5cblx0XHRcdG1ldGFkYXRhcmVzb2x2ZXIuJHNldChtZXRhZGF0YXJlc29sdmVyX2NoYW5nZXMpO1xuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4obWV0YWRhdGFyZXNvbHZlci4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRvKGxvY2FsKSB7XG5cdFx0XHR0cmFuc2l0aW9uX291dChtZXRhZGF0YXJlc29sdmVyLiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKHRkKTtcblx0XHRcdGRlc3Ryb3lfY29tcG9uZW50KG1ldGFkYXRhcmVzb2x2ZXIpO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gaW5zdGFuY2UkMSgkJHNlbGYsICQkcHJvcHMsICQkaW52YWxpZGF0ZSkge1xuXHRcblx0XG5cdGxldCB7IHdlZWtOdW0gfSA9ICQkcHJvcHM7XG5cdGxldCB7IGRheXMgfSA9ICQkcHJvcHM7XG5cdGxldCB7IG1ldGFkYXRhIH0gPSAkJHByb3BzO1xuXHRsZXQgeyBvbkhvdmVyIH0gPSAkJHByb3BzO1xuXHRsZXQgeyBvbkNsaWNrIH0gPSAkJHByb3BzO1xuXHRsZXQgeyBvbkNvbnRleHRNZW51IH0gPSAkJHByb3BzO1xuXHRsZXQgeyBzZWxlY3RlZElkID0gbnVsbCB9ID0gJCRwcm9wcztcblx0bGV0IHN0YXJ0T2ZXZWVrO1xuXHRjb25zdCBjbGlja19oYW5kbGVyID0gZSA9PiBvbkNsaWNrKHN0YXJ0T2ZXZWVrLCBpc01ldGFQcmVzc2VkKGUpKTtcblx0Y29uc3QgY29udGV4dG1lbnVfaGFuZGxlciA9IGUgPT4gb25Db250ZXh0TWVudShkYXlzWzBdLCBlKTtcblx0Y29uc3QgcG9pbnRlcm92ZXJfaGFuZGxlciA9IGUgPT4gb25Ib3ZlcihzdGFydE9mV2VlaywgZS50YXJnZXQsIGlzTWV0YVByZXNzZWQoZSkpO1xuXG5cdCQkc2VsZi4kJHNldCA9ICQkcHJvcHMgPT4ge1xuXHRcdGlmIChcIndlZWtOdW1cIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMCwgd2Vla051bSA9ICQkcHJvcHMud2Vla051bSk7XG5cdFx0aWYgKFwiZGF5c1wiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgxLCBkYXlzID0gJCRwcm9wcy5kYXlzKTtcblx0XHRpZiAoXCJtZXRhZGF0YVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSg2LCBtZXRhZGF0YSA9ICQkcHJvcHMubWV0YWRhdGEpO1xuXHRcdGlmIChcIm9uSG92ZXJcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMiwgb25Ib3ZlciA9ICQkcHJvcHMub25Ib3Zlcik7XG5cdFx0aWYgKFwib25DbGlja1wiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgzLCBvbkNsaWNrID0gJCRwcm9wcy5vbkNsaWNrKTtcblx0XHRpZiAoXCJvbkNvbnRleHRNZW51XCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDQsIG9uQ29udGV4dE1lbnUgPSAkJHByb3BzLm9uQ29udGV4dE1lbnUpO1xuXHRcdGlmIChcInNlbGVjdGVkSWRcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoNSwgc2VsZWN0ZWRJZCA9ICQkcHJvcHMuc2VsZWN0ZWRJZCk7XG5cdH07XG5cblx0JCRzZWxmLiQkLnVwZGF0ZSA9ICgpID0+IHtcblx0XHRpZiAoJCRzZWxmLiQkLmRpcnR5ICYgLypkYXlzKi8gMikge1xuXHRcdFx0JCRpbnZhbGlkYXRlKDcsIHN0YXJ0T2ZXZWVrID0gZ2V0U3RhcnRPZldlZWsoZGF5cykpO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gW1xuXHRcdHdlZWtOdW0sXG5cdFx0ZGF5cyxcblx0XHRvbkhvdmVyLFxuXHRcdG9uQ2xpY2ssXG5cdFx0b25Db250ZXh0TWVudSxcblx0XHRzZWxlY3RlZElkLFxuXHRcdG1ldGFkYXRhLFxuXHRcdHN0YXJ0T2ZXZWVrLFxuXHRcdGNsaWNrX2hhbmRsZXIsXG5cdFx0Y29udGV4dG1lbnVfaGFuZGxlcixcblx0XHRwb2ludGVyb3Zlcl9oYW5kbGVyXG5cdF07XG59XG5cbmNsYXNzIFdlZWtOdW0gZXh0ZW5kcyBTdmVsdGVDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3ZlbHRlLWVndDB5ZC1zdHlsZVwiKSkgYWRkX2NzcyQxKCk7XG5cblx0XHRpbml0KHRoaXMsIG9wdGlvbnMsIGluc3RhbmNlJDEsIGNyZWF0ZV9mcmFnbWVudCQxLCBub3RfZXF1YWwsIHtcblx0XHRcdHdlZWtOdW06IDAsXG5cdFx0XHRkYXlzOiAxLFxuXHRcdFx0bWV0YWRhdGE6IDYsXG5cdFx0XHRvbkhvdmVyOiAyLFxuXHRcdFx0b25DbGljazogMyxcblx0XHRcdG9uQ29udGV4dE1lbnU6IDQsXG5cdFx0XHRzZWxlY3RlZElkOiA1XG5cdFx0fSk7XG5cdH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWV0YWRhdGFSZWR1Y2VyKHByb21pc2VkTWV0YWRhdGEpIHtcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgICBkb3RzOiBbXSxcbiAgICAgICAgY2xhc3NlczogW10sXG4gICAgICAgIGRhdGFBdHRyaWJ1dGVzOiB7fSxcbiAgICB9O1xuICAgIGNvbnN0IG1ldGFzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZWRNZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFzLnJlZHVjZSgoYWNjLCBtZXRhKSA9PiAoe1xuICAgICAgICBjbGFzc2VzOiBbLi4uYWNjLmNsYXNzZXMsIC4uLihtZXRhLmNsYXNzZXMgfHwgW10pXSxcbiAgICAgICAgZGF0YUF0dHJpYnV0ZXM6IE9iamVjdC5hc3NpZ24oYWNjLmRhdGFBdHRyaWJ1dGVzLCBtZXRhLmRhdGFBdHRyaWJ1dGVzKSxcbiAgICAgICAgZG90czogWy4uLmFjYy5kb3RzLCAuLi4obWV0YS5kb3RzIHx8IFtdKV0sXG4gICAgfSksIG1ldGEpO1xufVxuZnVuY3Rpb24gZ2V0RGFpbHlNZXRhZGF0YShzb3VyY2VzLCBkYXRlLCAuLi5fYXJncykge1xuICAgIHJldHVybiBtZXRhZGF0YVJlZHVjZXIoc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gc291cmNlLmdldERhaWx5TWV0YWRhdGEoZGF0ZSkpKTtcbn1cbmZ1bmN0aW9uIGdldFdlZWtseU1ldGFkYXRhKHNvdXJjZXMsIGRhdGUsIC4uLl9hcmdzKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhUmVkdWNlcihzb3VyY2VzLm1hcCgoc291cmNlKSA9PiBzb3VyY2UuZ2V0V2Vla2x5TWV0YWRhdGEoZGF0ZSkpKTtcbn1cblxuLyogc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIuc3ZlbHRlIGdlbmVyYXRlZCBieSBTdmVsdGUgdjMuMzUuMCAqL1xuXG5mdW5jdGlvbiBhZGRfY3NzKCkge1xuXHR2YXIgc3R5bGUgPSBlbGVtZW50KFwic3R5bGVcIik7XG5cdHN0eWxlLmlkID0gXCJzdmVsdGUtcGNpbXU4LXN0eWxlXCI7XG5cdHN0eWxlLnRleHRDb250ZW50ID0gXCIuY29udGFpbmVyLnN2ZWx0ZS1wY2ltdTh7LS1jb2xvci1iYWNrZ3JvdW5kLWhlYWRpbmc6dHJhbnNwYXJlbnQ7LS1jb2xvci1iYWNrZ3JvdW5kLWRheTp0cmFuc3BhcmVudDstLWNvbG9yLWJhY2tncm91bmQtd2Vla251bTp0cmFuc3BhcmVudDstLWNvbG9yLWJhY2tncm91bmQtd2Vla2VuZDp0cmFuc3BhcmVudDstLWNvbG9yLWRvdDp2YXIoLS10ZXh0LW11dGVkKTstLWNvbG9yLWFycm93OnZhcigtLXRleHQtbXV0ZWQpOy0tY29sb3ItYnV0dG9uOnZhcigtLXRleHQtbXV0ZWQpOy0tY29sb3ItdGV4dC10aXRsZTp2YXIoLS10ZXh0LW5vcm1hbCk7LS1jb2xvci10ZXh0LWhlYWRpbmc6dmFyKC0tdGV4dC1tdXRlZCk7LS1jb2xvci10ZXh0LWRheTp2YXIoLS10ZXh0LW5vcm1hbCk7LS1jb2xvci10ZXh0LXRvZGF5OnZhcigtLWludGVyYWN0aXZlLWFjY2VudCk7LS1jb2xvci10ZXh0LXdlZWtudW06dmFyKC0tdGV4dC1tdXRlZCl9LmNvbnRhaW5lci5zdmVsdGUtcGNpbXU4e3BhZGRpbmc6MCA4cHh9LmNvbnRhaW5lci5pcy1tb2JpbGUuc3ZlbHRlLXBjaW11OHtwYWRkaW5nOjB9dGguc3ZlbHRlLXBjaW11OHt0ZXh0LWFsaWduOmNlbnRlcn0ud2Vla2VuZC5zdmVsdGUtcGNpbXU4e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYmFja2dyb3VuZC13ZWVrZW5kKX0uY2FsZW5kYXIuc3ZlbHRlLXBjaW11OHtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7d2lkdGg6MTAwJX10aC5zdmVsdGUtcGNpbXU4e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY29sb3ItYmFja2dyb3VuZC1oZWFkaW5nKTtjb2xvcjp2YXIoLS1jb2xvci10ZXh0LWhlYWRpbmcpO2ZvbnQtc2l6ZTowLjZlbTtsZXR0ZXItc3BhY2luZzoxcHg7cGFkZGluZzo0cHg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfVwiO1xuXHRhcHBlbmQoZG9jdW1lbnQuaGVhZCwgc3R5bGUpO1xufVxuXG5mdW5jdGlvbiBnZXRfZWFjaF9jb250ZXh0KGN0eCwgbGlzdCwgaSkge1xuXHRjb25zdCBjaGlsZF9jdHggPSBjdHguc2xpY2UoKTtcblx0Y2hpbGRfY3R4WzE4XSA9IGxpc3RbaV07XG5cdHJldHVybiBjaGlsZF9jdHg7XG59XG5cbmZ1bmN0aW9uIGdldF9lYWNoX2NvbnRleHRfMShjdHgsIGxpc3QsIGkpIHtcblx0Y29uc3QgY2hpbGRfY3R4ID0gY3R4LnNsaWNlKCk7XG5cdGNoaWxkX2N0eFsyMV0gPSBsaXN0W2ldO1xuXHRyZXR1cm4gY2hpbGRfY3R4O1xufVxuXG5mdW5jdGlvbiBnZXRfZWFjaF9jb250ZXh0XzIoY3R4LCBsaXN0LCBpKSB7XG5cdGNvbnN0IGNoaWxkX2N0eCA9IGN0eC5zbGljZSgpO1xuXHRjaGlsZF9jdHhbMjRdID0gbGlzdFtpXTtcblx0cmV0dXJuIGNoaWxkX2N0eDtcbn1cblxuZnVuY3Rpb24gZ2V0X2VhY2hfY29udGV4dF8zKGN0eCwgbGlzdCwgaSkge1xuXHRjb25zdCBjaGlsZF9jdHggPSBjdHguc2xpY2UoKTtcblx0Y2hpbGRfY3R4WzI3XSA9IGxpc3RbaV07XG5cdHJldHVybiBjaGlsZF9jdHg7XG59XG5cbi8vICg1NTo2KSB7I2lmIHNob3dXZWVrTnVtc31cbmZ1bmN0aW9uIGNyZWF0ZV9pZl9ibG9ja18yKGN0eCkge1xuXHRsZXQgY29sO1xuXG5cdHJldHVybiB7XG5cdFx0YygpIHtcblx0XHRcdGNvbCA9IGVsZW1lbnQoXCJjb2xcIik7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpbnNlcnQodGFyZ2V0LCBjb2wsIGFuY2hvcik7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKGNvbCk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyAoNTg6NikgeyNlYWNoIG1vbnRoWzFdLmRheXMgYXMgZGF0ZX1cbmZ1bmN0aW9uIGNyZWF0ZV9lYWNoX2Jsb2NrXzMoY3R4KSB7XG5cdGxldCBjb2w7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0Y29sID0gZWxlbWVudChcImNvbFwiKTtcblx0XHRcdGF0dHIoY29sLCBcImNsYXNzXCIsIFwic3ZlbHRlLXBjaW11OFwiKTtcblx0XHRcdHRvZ2dsZV9jbGFzcyhjb2wsIFwid2Vla2VuZFwiLCBpc1dlZWtlbmQoLypkYXRlKi8gY3R4WzI3XSkpO1xuXHRcdH0sXG5cdFx0bSh0YXJnZXQsIGFuY2hvcikge1xuXHRcdFx0aW5zZXJ0KHRhcmdldCwgY29sLCBhbmNob3IpO1xuXHRcdH0sXG5cdFx0cChjdHgsIGRpcnR5KSB7XG5cdFx0XHRpZiAoZGlydHkgJiAvKmlzV2Vla2VuZCwgbW9udGgqLyAxNjM4NCkge1xuXHRcdFx0XHR0b2dnbGVfY2xhc3MoY29sLCBcIndlZWtlbmRcIiwgaXNXZWVrZW5kKC8qZGF0ZSovIGN0eFsyN10pKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGQoZGV0YWNoaW5nKSB7XG5cdFx0XHRpZiAoZGV0YWNoaW5nKSBkZXRhY2goY29sKTtcblx0XHR9XG5cdH07XG59XG5cbi8vICg2NDo4KSB7I2lmIHNob3dXZWVrTnVtc31cbmZ1bmN0aW9uIGNyZWF0ZV9pZl9ibG9ja18xKGN0eCkge1xuXHRsZXQgdGg7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0dGggPSBlbGVtZW50KFwidGhcIik7XG5cdFx0XHR0aC50ZXh0Q29udGVudCA9IFwiV1wiO1xuXHRcdFx0YXR0cih0aCwgXCJjbGFzc1wiLCBcInN2ZWx0ZS1wY2ltdThcIik7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpbnNlcnQodGFyZ2V0LCB0aCwgYW5jaG9yKTtcblx0XHR9LFxuXHRcdGQoZGV0YWNoaW5nKSB7XG5cdFx0XHRpZiAoZGV0YWNoaW5nKSBkZXRhY2godGgpO1xuXHRcdH1cblx0fTtcbn1cblxuLy8gKDY3OjgpIHsjZWFjaCBkYXlzT2ZXZWVrIGFzIGRheU9mV2Vla31cbmZ1bmN0aW9uIGNyZWF0ZV9lYWNoX2Jsb2NrXzIoY3R4KSB7XG5cdGxldCB0aDtcblx0bGV0IHRfdmFsdWUgPSAvKmRheU9mV2VlayovIGN0eFsyNF0gKyBcIlwiO1xuXHRsZXQgdDtcblxuXHRyZXR1cm4ge1xuXHRcdGMoKSB7XG5cdFx0XHR0aCA9IGVsZW1lbnQoXCJ0aFwiKTtcblx0XHRcdHQgPSB0ZXh0KHRfdmFsdWUpO1xuXHRcdFx0YXR0cih0aCwgXCJjbGFzc1wiLCBcInN2ZWx0ZS1wY2ltdThcIik7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpbnNlcnQodGFyZ2V0LCB0aCwgYW5jaG9yKTtcblx0XHRcdGFwcGVuZCh0aCwgdCk7XG5cdFx0fSxcblx0XHRwKGN0eCwgZGlydHkpIHtcblx0XHRcdGlmIChkaXJ0eSAmIC8qZGF5c09mV2VlayovIDMyNzY4ICYmIHRfdmFsdWUgIT09ICh0X3ZhbHVlID0gLypkYXlPZldlZWsqLyBjdHhbMjRdICsgXCJcIikpIHNldF9kYXRhKHQsIHRfdmFsdWUpO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZXRhY2hpbmcpIGRldGFjaCh0aCk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyAoNzU6MTApIHsjaWYgc2hvd1dlZWtOdW1zfVxuZnVuY3Rpb24gY3JlYXRlX2lmX2Jsb2NrKGN0eCkge1xuXHRsZXQgd2Vla251bTtcblx0bGV0IGN1cnJlbnQ7XG5cblx0Y29uc3Qgd2Vla251bV9zcHJlYWRfbGV2ZWxzID0gW1xuXHRcdC8qd2VlayovIGN0eFsxOF0sXG5cdFx0e1xuXHRcdFx0bWV0YWRhdGE6IGdldFdlZWtseU1ldGFkYXRhKC8qc291cmNlcyovIGN0eFs4XSwgLyp3ZWVrKi8gY3R4WzE4XS5kYXlzWzBdLCAvKnRvZGF5Ki8gY3R4WzEwXSlcblx0XHR9LFxuXHRcdHsgb25DbGljazogLypvbkNsaWNrV2VlayovIGN0eFs3XSB9LFxuXHRcdHtcblx0XHRcdG9uQ29udGV4dE1lbnU6IC8qb25Db250ZXh0TWVudVdlZWsqLyBjdHhbNV1cblx0XHR9LFxuXHRcdHsgb25Ib3ZlcjogLypvbkhvdmVyV2VlayovIGN0eFszXSB9LFxuXHRcdHsgc2VsZWN0ZWRJZDogLypzZWxlY3RlZElkKi8gY3R4WzldIH1cblx0XTtcblxuXHRsZXQgd2Vla251bV9wcm9wcyA9IHt9O1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgd2Vla251bV9zcHJlYWRfbGV2ZWxzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0d2Vla251bV9wcm9wcyA9IGFzc2lnbih3ZWVrbnVtX3Byb3BzLCB3ZWVrbnVtX3NwcmVhZF9sZXZlbHNbaV0pO1xuXHR9XG5cblx0d2Vla251bSA9IG5ldyBXZWVrTnVtKHsgcHJvcHM6IHdlZWtudW1fcHJvcHMgfSk7XG5cblx0cmV0dXJuIHtcblx0XHRjKCkge1xuXHRcdFx0Y3JlYXRlX2NvbXBvbmVudCh3ZWVrbnVtLiQkLmZyYWdtZW50KTtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdG1vdW50X2NvbXBvbmVudCh3ZWVrbnVtLCB0YXJnZXQsIGFuY2hvcik7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdHAoY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y29uc3Qgd2Vla251bV9jaGFuZ2VzID0gKGRpcnR5ICYgLyptb250aCwgZ2V0V2Vla2x5TWV0YWRhdGEsIHNvdXJjZXMsIHRvZGF5LCBvbkNsaWNrV2Vlaywgb25Db250ZXh0TWVudVdlZWssIG9uSG92ZXJXZWVrLCBzZWxlY3RlZElkKi8gMTgzNDQpXG5cdFx0XHQ/IGdldF9zcHJlYWRfdXBkYXRlKHdlZWtudW1fc3ByZWFkX2xldmVscywgW1xuXHRcdFx0XHRcdGRpcnR5ICYgLyptb250aCovIDE2Mzg0ICYmIGdldF9zcHJlYWRfb2JqZWN0KC8qd2VlayovIGN0eFsxOF0pLFxuXHRcdFx0XHRcdGRpcnR5ICYgLypnZXRXZWVrbHlNZXRhZGF0YSwgc291cmNlcywgbW9udGgsIHRvZGF5Ki8gMTc2NjQgJiYge1xuXHRcdFx0XHRcdFx0bWV0YWRhdGE6IGdldFdlZWtseU1ldGFkYXRhKC8qc291cmNlcyovIGN0eFs4XSwgLyp3ZWVrKi8gY3R4WzE4XS5kYXlzWzBdLCAvKnRvZGF5Ki8gY3R4WzEwXSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRpcnR5ICYgLypvbkNsaWNrV2VlayovIDEyOCAmJiB7IG9uQ2xpY2s6IC8qb25DbGlja1dlZWsqLyBjdHhbN10gfSxcblx0XHRcdFx0XHRkaXJ0eSAmIC8qb25Db250ZXh0TWVudVdlZWsqLyAzMiAmJiB7XG5cdFx0XHRcdFx0XHRvbkNvbnRleHRNZW51OiAvKm9uQ29udGV4dE1lbnVXZWVrKi8gY3R4WzVdXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkaXJ0eSAmIC8qb25Ib3ZlcldlZWsqLyA4ICYmIHsgb25Ib3ZlcjogLypvbkhvdmVyV2VlayovIGN0eFszXSB9LFxuXHRcdFx0XHRcdGRpcnR5ICYgLypzZWxlY3RlZElkKi8gNTEyICYmIHsgc2VsZWN0ZWRJZDogLypzZWxlY3RlZElkKi8gY3R4WzldIH1cblx0XHRcdFx0XSlcblx0XHRcdDoge307XG5cblx0XHRcdHdlZWtudW0uJHNldCh3ZWVrbnVtX2NoYW5nZXMpO1xuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4od2Vla251bS4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRvKGxvY2FsKSB7XG5cdFx0XHR0cmFuc2l0aW9uX291dCh3ZWVrbnVtLiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0ZGVzdHJveV9jb21wb25lbnQod2Vla251bSwgZGV0YWNoaW5nKTtcblx0XHR9XG5cdH07XG59XG5cbi8vICg4NToxMCkgeyNlYWNoIHdlZWsuZGF5cyBhcyBkYXkgKGRheS5mb3JtYXQoKSl9XG5mdW5jdGlvbiBjcmVhdGVfZWFjaF9ibG9ja18xKGtleV8xLCBjdHgpIHtcblx0bGV0IGZpcnN0O1xuXHRsZXQgZGF5O1xuXHRsZXQgY3VycmVudDtcblxuXHRkYXkgPSBuZXcgRGF5KHtcblx0XHRcdHByb3BzOiB7XG5cdFx0XHRcdGRhdGU6IC8qZGF5Ki8gY3R4WzIxXSxcblx0XHRcdFx0dG9kYXk6IC8qdG9kYXkqLyBjdHhbMTBdLFxuXHRcdFx0XHRkaXNwbGF5ZWRNb250aDogLypkaXNwbGF5ZWRNb250aCovIGN0eFswXSxcblx0XHRcdFx0b25DbGljazogLypvbkNsaWNrRGF5Ki8gY3R4WzZdLFxuXHRcdFx0XHRvbkNvbnRleHRNZW51OiAvKm9uQ29udGV4dE1lbnVEYXkqLyBjdHhbNF0sXG5cdFx0XHRcdG9uSG92ZXI6IC8qb25Ib3ZlckRheSovIGN0eFsyXSxcblx0XHRcdFx0bWV0YWRhdGE6IGdldERhaWx5TWV0YWRhdGEoLypzb3VyY2VzKi8gY3R4WzhdLCAvKmRheSovIGN0eFsyMV0sIC8qdG9kYXkqLyBjdHhbMTBdKSxcblx0XHRcdFx0c2VsZWN0ZWRJZDogLypzZWxlY3RlZElkKi8gY3R4WzldXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0cmV0dXJuIHtcblx0XHRrZXk6IGtleV8xLFxuXHRcdGZpcnN0OiBudWxsLFxuXHRcdGMoKSB7XG5cdFx0XHRmaXJzdCA9IGVtcHR5KCk7XG5cdFx0XHRjcmVhdGVfY29tcG9uZW50KGRheS4kJC5mcmFnbWVudCk7XG5cdFx0XHR0aGlzLmZpcnN0ID0gZmlyc3Q7XG5cdFx0fSxcblx0XHRtKHRhcmdldCwgYW5jaG9yKSB7XG5cdFx0XHRpbnNlcnQodGFyZ2V0LCBmaXJzdCwgYW5jaG9yKTtcblx0XHRcdG1vdW50X2NvbXBvbmVudChkYXksIHRhcmdldCwgYW5jaG9yKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0cChuZXdfY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y3R4ID0gbmV3X2N0eDtcblx0XHRcdGNvbnN0IGRheV9jaGFuZ2VzID0ge307XG5cdFx0XHRpZiAoZGlydHkgJiAvKm1vbnRoKi8gMTYzODQpIGRheV9jaGFuZ2VzLmRhdGUgPSAvKmRheSovIGN0eFsyMV07XG5cdFx0XHRpZiAoZGlydHkgJiAvKnRvZGF5Ki8gMTAyNCkgZGF5X2NoYW5nZXMudG9kYXkgPSAvKnRvZGF5Ki8gY3R4WzEwXTtcblx0XHRcdGlmIChkaXJ0eSAmIC8qZGlzcGxheWVkTW9udGgqLyAxKSBkYXlfY2hhbmdlcy5kaXNwbGF5ZWRNb250aCA9IC8qZGlzcGxheWVkTW9udGgqLyBjdHhbMF07XG5cdFx0XHRpZiAoZGlydHkgJiAvKm9uQ2xpY2tEYXkqLyA2NCkgZGF5X2NoYW5nZXMub25DbGljayA9IC8qb25DbGlja0RheSovIGN0eFs2XTtcblx0XHRcdGlmIChkaXJ0eSAmIC8qb25Db250ZXh0TWVudURheSovIDE2KSBkYXlfY2hhbmdlcy5vbkNvbnRleHRNZW51ID0gLypvbkNvbnRleHRNZW51RGF5Ki8gY3R4WzRdO1xuXHRcdFx0aWYgKGRpcnR5ICYgLypvbkhvdmVyRGF5Ki8gNCkgZGF5X2NoYW5nZXMub25Ib3ZlciA9IC8qb25Ib3ZlckRheSovIGN0eFsyXTtcblx0XHRcdGlmIChkaXJ0eSAmIC8qc291cmNlcywgbW9udGgsIHRvZGF5Ki8gMTc2NjQpIGRheV9jaGFuZ2VzLm1ldGFkYXRhID0gZ2V0RGFpbHlNZXRhZGF0YSgvKnNvdXJjZXMqLyBjdHhbOF0sIC8qZGF5Ki8gY3R4WzIxXSwgLyp0b2RheSovIGN0eFsxMF0pO1xuXHRcdFx0aWYgKGRpcnR5ICYgLypzZWxlY3RlZElkKi8gNTEyKSBkYXlfY2hhbmdlcy5zZWxlY3RlZElkID0gLypzZWxlY3RlZElkKi8gY3R4WzldO1xuXHRcdFx0ZGF5LiRzZXQoZGF5X2NoYW5nZXMpO1xuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4oZGF5LiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cdFx0XHRjdXJyZW50ID0gdHJ1ZTtcblx0XHR9LFxuXHRcdG8obG9jYWwpIHtcblx0XHRcdHRyYW5zaXRpb25fb3V0KGRheS4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXHRcdFx0Y3VycmVudCA9IGZhbHNlO1xuXHRcdH0sXG5cdFx0ZChkZXRhY2hpbmcpIHtcblx0XHRcdGlmIChkZXRhY2hpbmcpIGRldGFjaChmaXJzdCk7XG5cdFx0XHRkZXN0cm95X2NvbXBvbmVudChkYXksIGRldGFjaGluZyk7XG5cdFx0fVxuXHR9O1xufVxuXG4vLyAoNzM6NikgeyNlYWNoIG1vbnRoIGFzIHdlZWsgKHdlZWsud2Vla051bSl9XG5mdW5jdGlvbiBjcmVhdGVfZWFjaF9ibG9jayhrZXlfMSwgY3R4KSB7XG5cdGxldCB0cjtcblx0bGV0IHQwO1xuXHRsZXQgZWFjaF9ibG9ja3MgPSBbXTtcblx0bGV0IGVhY2hfMV9sb29rdXAgPSBuZXcgTWFwKCk7XG5cdGxldCB0MTtcblx0bGV0IGN1cnJlbnQ7XG5cdGxldCBpZl9ibG9jayA9IC8qc2hvd1dlZWtOdW1zKi8gY3R4WzFdICYmIGNyZWF0ZV9pZl9ibG9jayhjdHgpO1xuXHRsZXQgZWFjaF92YWx1ZV8xID0gLyp3ZWVrKi8gY3R4WzE4XS5kYXlzO1xuXHRjb25zdCBnZXRfa2V5ID0gY3R4ID0+IC8qZGF5Ki8gY3R4WzIxXS5mb3JtYXQoKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfdmFsdWVfMS5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdGxldCBjaGlsZF9jdHggPSBnZXRfZWFjaF9jb250ZXh0XzEoY3R4LCBlYWNoX3ZhbHVlXzEsIGkpO1xuXHRcdGxldCBrZXkgPSBnZXRfa2V5KGNoaWxkX2N0eCk7XG5cdFx0ZWFjaF8xX2xvb2t1cC5zZXQoa2V5LCBlYWNoX2Jsb2Nrc1tpXSA9IGNyZWF0ZV9lYWNoX2Jsb2NrXzEoa2V5LCBjaGlsZF9jdHgpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0a2V5OiBrZXlfMSxcblx0XHRmaXJzdDogbnVsbCxcblx0XHRjKCkge1xuXHRcdFx0dHIgPSBlbGVtZW50KFwidHJcIik7XG5cdFx0XHRpZiAoaWZfYmxvY2spIGlmX2Jsb2NrLmMoKTtcblx0XHRcdHQwID0gc3BhY2UoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5jKCk7XG5cdFx0XHR9XG5cblx0XHRcdHQxID0gc3BhY2UoKTtcblx0XHRcdHRoaXMuZmlyc3QgPSB0cjtcblx0XHR9LFxuXHRcdG0odGFyZ2V0LCBhbmNob3IpIHtcblx0XHRcdGluc2VydCh0YXJnZXQsIHRyLCBhbmNob3IpO1xuXHRcdFx0aWYgKGlmX2Jsb2NrKSBpZl9ibG9jay5tKHRyLCBudWxsKTtcblx0XHRcdGFwcGVuZCh0ciwgdDApO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfYmxvY2tzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdGVhY2hfYmxvY2tzW2ldLm0odHIsIG51bGwpO1xuXHRcdFx0fVxuXG5cdFx0XHRhcHBlbmQodHIsIHQxKTtcblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0cChuZXdfY3R4LCBkaXJ0eSkge1xuXHRcdFx0Y3R4ID0gbmV3X2N0eDtcblxuXHRcdFx0aWYgKC8qc2hvd1dlZWtOdW1zKi8gY3R4WzFdKSB7XG5cdFx0XHRcdGlmIChpZl9ibG9jaykge1xuXHRcdFx0XHRcdGlmX2Jsb2NrLnAoY3R4LCBkaXJ0eSk7XG5cblx0XHRcdFx0XHRpZiAoZGlydHkgJiAvKnNob3dXZWVrTnVtcyovIDIpIHtcblx0XHRcdFx0XHRcdHRyYW5zaXRpb25faW4oaWZfYmxvY2ssIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZl9ibG9jayA9IGNyZWF0ZV9pZl9ibG9jayhjdHgpO1xuXHRcdFx0XHRcdGlmX2Jsb2NrLmMoKTtcblx0XHRcdFx0XHR0cmFuc2l0aW9uX2luKGlmX2Jsb2NrLCAxKTtcblx0XHRcdFx0XHRpZl9ibG9jay5tKHRyLCB0MCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaWZfYmxvY2spIHtcblx0XHRcdFx0Z3JvdXBfb3V0cm9zKCk7XG5cblx0XHRcdFx0dHJhbnNpdGlvbl9vdXQoaWZfYmxvY2ssIDEsIDEsICgpID0+IHtcblx0XHRcdFx0XHRpZl9ibG9jayA9IG51bGw7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNoZWNrX291dHJvcygpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGlydHkgJiAvKm1vbnRoLCB0b2RheSwgZGlzcGxheWVkTW9udGgsIG9uQ2xpY2tEYXksIG9uQ29udGV4dE1lbnVEYXksIG9uSG92ZXJEYXksIGdldERhaWx5TWV0YWRhdGEsIHNvdXJjZXMsIHNlbGVjdGVkSWQqLyAxODI2MSkge1xuXHRcdFx0XHRlYWNoX3ZhbHVlXzEgPSAvKndlZWsqLyBjdHhbMThdLmRheXM7XG5cdFx0XHRcdGdyb3VwX291dHJvcygpO1xuXHRcdFx0XHRlYWNoX2Jsb2NrcyA9IHVwZGF0ZV9rZXllZF9lYWNoKGVhY2hfYmxvY2tzLCBkaXJ0eSwgZ2V0X2tleSwgMSwgY3R4LCBlYWNoX3ZhbHVlXzEsIGVhY2hfMV9sb29rdXAsIHRyLCBvdXRyb19hbmRfZGVzdHJveV9ibG9jaywgY3JlYXRlX2VhY2hfYmxvY2tfMSwgdDEsIGdldF9lYWNoX2NvbnRleHRfMSk7XG5cdFx0XHRcdGNoZWNrX291dHJvcygpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aShsb2NhbCkge1xuXHRcdFx0aWYgKGN1cnJlbnQpIHJldHVybjtcblx0XHRcdHRyYW5zaXRpb25faW4oaWZfYmxvY2spO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfdmFsdWVfMS5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHR0cmFuc2l0aW9uX2luKGVhY2hfYmxvY2tzW2ldKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudCA9IHRydWU7XG5cdFx0fSxcblx0XHRvKGxvY2FsKSB7XG5cdFx0XHR0cmFuc2l0aW9uX291dChpZl9ibG9jayk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZWFjaF9ibG9ja3MubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdFx0dHJhbnNpdGlvbl9vdXQoZWFjaF9ibG9ja3NbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50ID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKHRyKTtcblx0XHRcdGlmIChpZl9ibG9jaykgaWZfYmxvY2suZCgpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfYmxvY2tzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdGVhY2hfYmxvY2tzW2ldLmQoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZV9mcmFnbWVudChjdHgpIHtcblx0bGV0IGRpdjtcblx0bGV0IG5hdjtcblx0bGV0IHQwO1xuXHRsZXQgdGFibGU7XG5cdGxldCBjb2xncm91cDtcblx0bGV0IHQxO1xuXHRsZXQgdDI7XG5cdGxldCB0aGVhZDtcblx0bGV0IHRyO1xuXHRsZXQgdDM7XG5cdGxldCB0NDtcblx0bGV0IHRib2R5O1xuXHRsZXQgZWFjaF9ibG9ja3MgPSBbXTtcblx0bGV0IGVhY2gyX2xvb2t1cCA9IG5ldyBNYXAoKTtcblx0bGV0IGN1cnJlbnQ7XG5cblx0bmF2ID0gbmV3IE5hdih7XG5cdFx0XHRwcm9wczoge1xuXHRcdFx0XHR0b2RheTogLyp0b2RheSovIGN0eFsxMF0sXG5cdFx0XHRcdGRpc3BsYXllZE1vbnRoOiAvKmRpc3BsYXllZE1vbnRoKi8gY3R4WzBdLFxuXHRcdFx0XHRpbmNyZW1lbnREaXNwbGF5ZWRNb250aDogLyppbmNyZW1lbnREaXNwbGF5ZWRNb250aCovIGN0eFsxMV0sXG5cdFx0XHRcdGRlY3JlbWVudERpc3BsYXllZE1vbnRoOiAvKmRlY3JlbWVudERpc3BsYXllZE1vbnRoKi8gY3R4WzEyXSxcblx0XHRcdFx0cmVzZXREaXNwbGF5ZWRNb250aDogLypyZXNldERpc3BsYXllZE1vbnRoKi8gY3R4WzEzXVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdGxldCBpZl9ibG9jazAgPSAvKnNob3dXZWVrTnVtcyovIGN0eFsxXSAmJiBjcmVhdGVfaWZfYmxvY2tfMigpO1xuXHRsZXQgZWFjaF92YWx1ZV8zID0gLyptb250aCovIGN0eFsxNF1bMV0uZGF5cztcblx0bGV0IGVhY2hfYmxvY2tzXzIgPSBbXTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfdmFsdWVfMy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdGVhY2hfYmxvY2tzXzJbaV0gPSBjcmVhdGVfZWFjaF9ibG9ja18zKGdldF9lYWNoX2NvbnRleHRfMyhjdHgsIGVhY2hfdmFsdWVfMywgaSkpO1xuXHR9XG5cblx0bGV0IGlmX2Jsb2NrMSA9IC8qc2hvd1dlZWtOdW1zKi8gY3R4WzFdICYmIGNyZWF0ZV9pZl9ibG9ja18xKCk7XG5cdGxldCBlYWNoX3ZhbHVlXzIgPSAvKmRheXNPZldlZWsqLyBjdHhbMTVdO1xuXHRsZXQgZWFjaF9ibG9ja3NfMSA9IFtdO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgZWFjaF92YWx1ZV8yLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZWFjaF9ibG9ja3NfMVtpXSA9IGNyZWF0ZV9lYWNoX2Jsb2NrXzIoZ2V0X2VhY2hfY29udGV4dF8yKGN0eCwgZWFjaF92YWx1ZV8yLCBpKSk7XG5cdH1cblxuXHRsZXQgZWFjaF92YWx1ZSA9IC8qbW9udGgqLyBjdHhbMTRdO1xuXHRjb25zdCBnZXRfa2V5ID0gY3R4ID0+IC8qd2VlayovIGN0eFsxOF0ud2Vla051bTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfdmFsdWUubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRsZXQgY2hpbGRfY3R4ID0gZ2V0X2VhY2hfY29udGV4dChjdHgsIGVhY2hfdmFsdWUsIGkpO1xuXHRcdGxldCBrZXkgPSBnZXRfa2V5KGNoaWxkX2N0eCk7XG5cdFx0ZWFjaDJfbG9va3VwLnNldChrZXksIGVhY2hfYmxvY2tzW2ldID0gY3JlYXRlX2VhY2hfYmxvY2soa2V5LCBjaGlsZF9jdHgpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0YygpIHtcblx0XHRcdGRpdiA9IGVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRjcmVhdGVfY29tcG9uZW50KG5hdi4kJC5mcmFnbWVudCk7XG5cdFx0XHR0MCA9IHNwYWNlKCk7XG5cdFx0XHR0YWJsZSA9IGVsZW1lbnQoXCJ0YWJsZVwiKTtcblx0XHRcdGNvbGdyb3VwID0gZWxlbWVudChcImNvbGdyb3VwXCIpO1xuXHRcdFx0aWYgKGlmX2Jsb2NrMCkgaWZfYmxvY2swLmMoKTtcblx0XHRcdHQxID0gc3BhY2UoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrc18yLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdGVhY2hfYmxvY2tzXzJbaV0uYygpO1xuXHRcdFx0fVxuXG5cdFx0XHR0MiA9IHNwYWNlKCk7XG5cdFx0XHR0aGVhZCA9IGVsZW1lbnQoXCJ0aGVhZFwiKTtcblx0XHRcdHRyID0gZWxlbWVudChcInRyXCIpO1xuXHRcdFx0aWYgKGlmX2Jsb2NrMSkgaWZfYmxvY2sxLmMoKTtcblx0XHRcdHQzID0gc3BhY2UoKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrc18xLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdGVhY2hfYmxvY2tzXzFbaV0uYygpO1xuXHRcdFx0fVxuXG5cdFx0XHR0NCA9IHNwYWNlKCk7XG5cdFx0XHR0Ym9keSA9IGVsZW1lbnQoXCJ0Ym9keVwiKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc1tpXS5jKCk7XG5cdFx0XHR9XG5cblx0XHRcdGF0dHIodGFibGUsIFwiY2xhc3NcIiwgXCJjYWxlbmRhciBzdmVsdGUtcGNpbXU4XCIpO1xuXHRcdFx0YXR0cihkaXYsIFwiaWRcIiwgXCJjYWxlbmRhci1jb250YWluZXJcIik7XG5cdFx0XHRhdHRyKGRpdiwgXCJjbGFzc1wiLCBcImNvbnRhaW5lciBzdmVsdGUtcGNpbXU4XCIpO1xuXHRcdFx0dG9nZ2xlX2NsYXNzKGRpdiwgXCJpcy1tb2JpbGVcIiwgLyppc01vYmlsZSovIGN0eFsxNl0pO1xuXHRcdH0sXG5cdFx0bSh0YXJnZXQsIGFuY2hvcikge1xuXHRcdFx0aW5zZXJ0KHRhcmdldCwgZGl2LCBhbmNob3IpO1xuXHRcdFx0bW91bnRfY29tcG9uZW50KG5hdiwgZGl2LCBudWxsKTtcblx0XHRcdGFwcGVuZChkaXYsIHQwKTtcblx0XHRcdGFwcGVuZChkaXYsIHRhYmxlKTtcblx0XHRcdGFwcGVuZCh0YWJsZSwgY29sZ3JvdXApO1xuXHRcdFx0aWYgKGlmX2Jsb2NrMCkgaWZfYmxvY2swLm0oY29sZ3JvdXAsIG51bGwpO1xuXHRcdFx0YXBwZW5kKGNvbGdyb3VwLCB0MSk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZWFjaF9ibG9ja3NfMi5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRlYWNoX2Jsb2Nrc18yW2ldLm0oY29sZ3JvdXAsIG51bGwpO1xuXHRcdFx0fVxuXG5cdFx0XHRhcHBlbmQodGFibGUsIHQyKTtcblx0XHRcdGFwcGVuZCh0YWJsZSwgdGhlYWQpO1xuXHRcdFx0YXBwZW5kKHRoZWFkLCB0cik7XG5cdFx0XHRpZiAoaWZfYmxvY2sxKSBpZl9ibG9jazEubSh0ciwgbnVsbCk7XG5cdFx0XHRhcHBlbmQodHIsIHQzKTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBlYWNoX2Jsb2Nrc18xLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdGVhY2hfYmxvY2tzXzFbaV0ubSh0ciwgbnVsbCk7XG5cdFx0XHR9XG5cblx0XHRcdGFwcGVuZCh0YWJsZSwgdDQpO1xuXHRcdFx0YXBwZW5kKHRhYmxlLCB0Ym9keSk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZWFjaF9ibG9ja3MubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdFx0ZWFjaF9ibG9ja3NbaV0ubSh0Ym9keSwgbnVsbCk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0cChjdHgsIFtkaXJ0eV0pIHtcblx0XHRcdGNvbnN0IG5hdl9jaGFuZ2VzID0ge307XG5cdFx0XHRpZiAoZGlydHkgJiAvKnRvZGF5Ki8gMTAyNCkgbmF2X2NoYW5nZXMudG9kYXkgPSAvKnRvZGF5Ki8gY3R4WzEwXTtcblx0XHRcdGlmIChkaXJ0eSAmIC8qZGlzcGxheWVkTW9udGgqLyAxKSBuYXZfY2hhbmdlcy5kaXNwbGF5ZWRNb250aCA9IC8qZGlzcGxheWVkTW9udGgqLyBjdHhbMF07XG5cdFx0XHRuYXYuJHNldChuYXZfY2hhbmdlcyk7XG5cblx0XHRcdGlmICgvKnNob3dXZWVrTnVtcyovIGN0eFsxXSkge1xuXHRcdFx0XHRpZiAoaWZfYmxvY2swKSA7IGVsc2Uge1xuXHRcdFx0XHRcdGlmX2Jsb2NrMCA9IGNyZWF0ZV9pZl9ibG9ja18yKCk7XG5cdFx0XHRcdFx0aWZfYmxvY2swLmMoKTtcblx0XHRcdFx0XHRpZl9ibG9jazAubShjb2xncm91cCwgdDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlmX2Jsb2NrMCkge1xuXHRcdFx0XHRpZl9ibG9jazAuZCgxKTtcblx0XHRcdFx0aWZfYmxvY2swID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRpcnR5ICYgLyppc1dlZWtlbmQsIG1vbnRoKi8gMTYzODQpIHtcblx0XHRcdFx0ZWFjaF92YWx1ZV8zID0gLyptb250aCovIGN0eFsxNF1bMV0uZGF5cztcblx0XHRcdFx0bGV0IGk7XG5cblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGVhY2hfdmFsdWVfMy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRcdGNvbnN0IGNoaWxkX2N0eCA9IGdldF9lYWNoX2NvbnRleHRfMyhjdHgsIGVhY2hfdmFsdWVfMywgaSk7XG5cblx0XHRcdFx0XHRpZiAoZWFjaF9ibG9ja3NfMltpXSkge1xuXHRcdFx0XHRcdFx0ZWFjaF9ibG9ja3NfMltpXS5wKGNoaWxkX2N0eCwgZGlydHkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc18yW2ldID0gY3JlYXRlX2VhY2hfYmxvY2tfMyhjaGlsZF9jdHgpO1xuXHRcdFx0XHRcdFx0ZWFjaF9ibG9ja3NfMltpXS5jKCk7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc18yW2ldLm0oY29sZ3JvdXAsIG51bGwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvciAoOyBpIDwgZWFjaF9ibG9ja3NfMi5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdFx0XHRcdGVhY2hfYmxvY2tzXzJbaV0uZCgxKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGVhY2hfYmxvY2tzXzIubGVuZ3RoID0gZWFjaF92YWx1ZV8zLmxlbmd0aDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKC8qc2hvd1dlZWtOdW1zKi8gY3R4WzFdKSB7XG5cdFx0XHRcdGlmIChpZl9ibG9jazEpIDsgZWxzZSB7XG5cdFx0XHRcdFx0aWZfYmxvY2sxID0gY3JlYXRlX2lmX2Jsb2NrXzEoKTtcblx0XHRcdFx0XHRpZl9ibG9jazEuYygpO1xuXHRcdFx0XHRcdGlmX2Jsb2NrMS5tKHRyLCB0Myk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaWZfYmxvY2sxKSB7XG5cdFx0XHRcdGlmX2Jsb2NrMS5kKDEpO1xuXHRcdFx0XHRpZl9ibG9jazEgPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGlydHkgJiAvKmRheXNPZldlZWsqLyAzMjc2OCkge1xuXHRcdFx0XHRlYWNoX3ZhbHVlXzIgPSAvKmRheXNPZldlZWsqLyBjdHhbMTVdO1xuXHRcdFx0XHRsZXQgaTtcblxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgZWFjaF92YWx1ZV8yLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2hpbGRfY3R4ID0gZ2V0X2VhY2hfY29udGV4dF8yKGN0eCwgZWFjaF92YWx1ZV8yLCBpKTtcblxuXHRcdFx0XHRcdGlmIChlYWNoX2Jsb2Nrc18xW2ldKSB7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc18xW2ldLnAoY2hpbGRfY3R4LCBkaXJ0eSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGVhY2hfYmxvY2tzXzFbaV0gPSBjcmVhdGVfZWFjaF9ibG9ja18yKGNoaWxkX2N0eCk7XG5cdFx0XHRcdFx0XHRlYWNoX2Jsb2Nrc18xW2ldLmMoKTtcblx0XHRcdFx0XHRcdGVhY2hfYmxvY2tzXzFbaV0ubSh0ciwgbnVsbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICg7IGkgPCBlYWNoX2Jsb2Nrc18xLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdFx0ZWFjaF9ibG9ja3NfMVtpXS5kKDEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWFjaF9ibG9ja3NfMS5sZW5ndGggPSBlYWNoX3ZhbHVlXzIubGVuZ3RoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZGlydHkgJiAvKm1vbnRoLCB0b2RheSwgZGlzcGxheWVkTW9udGgsIG9uQ2xpY2tEYXksIG9uQ29udGV4dE1lbnVEYXksIG9uSG92ZXJEYXksIGdldERhaWx5TWV0YWRhdGEsIHNvdXJjZXMsIHNlbGVjdGVkSWQsIGdldFdlZWtseU1ldGFkYXRhLCBvbkNsaWNrV2Vlaywgb25Db250ZXh0TWVudVdlZWssIG9uSG92ZXJXZWVrLCBzaG93V2Vla051bXMqLyAxODQzMSkge1xuXHRcdFx0XHRlYWNoX3ZhbHVlID0gLyptb250aCovIGN0eFsxNF07XG5cdFx0XHRcdGdyb3VwX291dHJvcygpO1xuXHRcdFx0XHRlYWNoX2Jsb2NrcyA9IHVwZGF0ZV9rZXllZF9lYWNoKGVhY2hfYmxvY2tzLCBkaXJ0eSwgZ2V0X2tleSwgMSwgY3R4LCBlYWNoX3ZhbHVlLCBlYWNoMl9sb29rdXAsIHRib2R5LCBvdXRyb19hbmRfZGVzdHJveV9ibG9jaywgY3JlYXRlX2VhY2hfYmxvY2ssIG51bGwsIGdldF9lYWNoX2NvbnRleHQpO1xuXHRcdFx0XHRjaGVja19vdXRyb3MoKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGkobG9jYWwpIHtcblx0XHRcdGlmIChjdXJyZW50KSByZXR1cm47XG5cdFx0XHR0cmFuc2l0aW9uX2luKG5hdi4kJC5mcmFnbWVudCwgbG9jYWwpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfdmFsdWUubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdFx0dHJhbnNpdGlvbl9pbihlYWNoX2Jsb2Nrc1tpXSk7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnQgPSB0cnVlO1xuXHRcdH0sXG5cdFx0byhsb2NhbCkge1xuXHRcdFx0dHJhbnNpdGlvbl9vdXQobmF2LiQkLmZyYWdtZW50LCBsb2NhbCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZWFjaF9ibG9ja3MubGVuZ3RoOyBpICs9IDEpIHtcblx0XHRcdFx0dHJhbnNpdGlvbl9vdXQoZWFjaF9ibG9ja3NbaV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50ID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkKGRldGFjaGluZykge1xuXHRcdFx0aWYgKGRldGFjaGluZykgZGV0YWNoKGRpdik7XG5cdFx0XHRkZXN0cm95X2NvbXBvbmVudChuYXYpO1xuXHRcdFx0aWYgKGlmX2Jsb2NrMCkgaWZfYmxvY2swLmQoKTtcblx0XHRcdGRlc3Ryb3lfZWFjaChlYWNoX2Jsb2Nrc18yLCBkZXRhY2hpbmcpO1xuXHRcdFx0aWYgKGlmX2Jsb2NrMSkgaWZfYmxvY2sxLmQoKTtcblx0XHRcdGRlc3Ryb3lfZWFjaChlYWNoX2Jsb2Nrc18xLCBkZXRhY2hpbmcpO1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGVhY2hfYmxvY2tzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0XHRcdGVhY2hfYmxvY2tzW2ldLmQoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGluc3RhbmNlKCQkc2VsZiwgJCRwcm9wcywgJCRpbnZhbGlkYXRlKSB7XG5cdFxuXHRcblx0bGV0IHsgbG9jYWxlRGF0YSB9ID0gJCRwcm9wcztcblx0bGV0IHsgc2hvd1dlZWtOdW1zID0gZmFsc2UgfSA9ICQkcHJvcHM7XG5cdGxldCB7IG9uSG92ZXJEYXkgfSA9ICQkcHJvcHM7XG5cdGxldCB7IG9uSG92ZXJXZWVrIH0gPSAkJHByb3BzO1xuXHRsZXQgeyBvbkNvbnRleHRNZW51RGF5IH0gPSAkJHByb3BzO1xuXHRsZXQgeyBvbkNvbnRleHRNZW51V2VlayB9ID0gJCRwcm9wcztcblx0bGV0IHsgb25DbGlja0RheSB9ID0gJCRwcm9wcztcblx0bGV0IHsgb25DbGlja1dlZWsgfSA9ICQkcHJvcHM7XG5cdGxldCB7IHNvdXJjZXMgPSBbXSB9ID0gJCRwcm9wcztcblx0bGV0IHsgc2VsZWN0ZWRJZCB9ID0gJCRwcm9wcztcblx0bGV0IHsgdG9kYXkgPSB3aW5kb3cubW9tZW50KCkgfSA9ICQkcHJvcHM7XG5cdGxldCB7IGRpc3BsYXllZE1vbnRoID0gdG9kYXkgfSA9ICQkcHJvcHM7XG5cdGxldCBtb250aDtcblx0bGV0IGRheXNPZldlZWs7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0bGV0IGlzTW9iaWxlID0gd2luZG93LmFwcC5pc01vYmlsZTtcblxuXHRmdW5jdGlvbiBpbmNyZW1lbnREaXNwbGF5ZWRNb250aCgpIHtcblx0XHQkJGludmFsaWRhdGUoMCwgZGlzcGxheWVkTW9udGggPSBkaXNwbGF5ZWRNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRlY3JlbWVudERpc3BsYXllZE1vbnRoKCkge1xuXHRcdCQkaW52YWxpZGF0ZSgwLCBkaXNwbGF5ZWRNb250aCA9IGRpc3BsYXllZE1vbnRoLmNsb25lKCkuc3VidHJhY3QoMSwgXCJtb250aFwiKSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldERpc3BsYXllZE1vbnRoKCkge1xuXHRcdCQkaW52YWxpZGF0ZSgwLCBkaXNwbGF5ZWRNb250aCA9IHRvZGF5LmNsb25lKCkpO1xuXHR9XG5cblx0JCRzZWxmLiQkc2V0ID0gJCRwcm9wcyA9PiB7XG5cdFx0aWYgKFwibG9jYWxlRGF0YVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSgxNywgbG9jYWxlRGF0YSA9ICQkcHJvcHMubG9jYWxlRGF0YSk7XG5cdFx0aWYgKFwic2hvd1dlZWtOdW1zXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDEsIHNob3dXZWVrTnVtcyA9ICQkcHJvcHMuc2hvd1dlZWtOdW1zKTtcblx0XHRpZiAoXCJvbkhvdmVyRGF5XCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDIsIG9uSG92ZXJEYXkgPSAkJHByb3BzLm9uSG92ZXJEYXkpO1xuXHRcdGlmIChcIm9uSG92ZXJXZWVrXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDMsIG9uSG92ZXJXZWVrID0gJCRwcm9wcy5vbkhvdmVyV2Vlayk7XG5cdFx0aWYgKFwib25Db250ZXh0TWVudURheVwiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSg0LCBvbkNvbnRleHRNZW51RGF5ID0gJCRwcm9wcy5vbkNvbnRleHRNZW51RGF5KTtcblx0XHRpZiAoXCJvbkNvbnRleHRNZW51V2Vla1wiIGluICQkcHJvcHMpICQkaW52YWxpZGF0ZSg1LCBvbkNvbnRleHRNZW51V2VlayA9ICQkcHJvcHMub25Db250ZXh0TWVudVdlZWspO1xuXHRcdGlmIChcIm9uQ2xpY2tEYXlcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoNiwgb25DbGlja0RheSA9ICQkcHJvcHMub25DbGlja0RheSk7XG5cdFx0aWYgKFwib25DbGlja1dlZWtcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoNywgb25DbGlja1dlZWsgPSAkJHByb3BzLm9uQ2xpY2tXZWVrKTtcblx0XHRpZiAoXCJzb3VyY2VzXCIgaW4gJCRwcm9wcykgJCRpbnZhbGlkYXRlKDgsIHNvdXJjZXMgPSAkJHByb3BzLnNvdXJjZXMpO1xuXHRcdGlmIChcInNlbGVjdGVkSWRcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoOSwgc2VsZWN0ZWRJZCA9ICQkcHJvcHMuc2VsZWN0ZWRJZCk7XG5cdFx0aWYgKFwidG9kYXlcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMTAsIHRvZGF5ID0gJCRwcm9wcy50b2RheSk7XG5cdFx0aWYgKFwiZGlzcGxheWVkTW9udGhcIiBpbiAkJHByb3BzKSAkJGludmFsaWRhdGUoMCwgZGlzcGxheWVkTW9udGggPSAkJHByb3BzLmRpc3BsYXllZE1vbnRoKTtcblx0fTtcblxuXHQkJHNlbGYuJCQudXBkYXRlID0gKCkgPT4ge1xuXHRcdGlmICgkJHNlbGYuJCQuZGlydHkgJiAvKmRpc3BsYXllZE1vbnRoLCBsb2NhbGVEYXRhKi8gMTMxMDczKSB7XG5cdFx0XHQkJGludmFsaWRhdGUoMTQsIG1vbnRoID0gZ2V0TW9udGgoZGlzcGxheWVkTW9udGgsIGxvY2FsZURhdGEpKTtcblx0XHR9XG5cblx0XHRpZiAoJCRzZWxmLiQkLmRpcnR5ICYgLyp0b2RheSwgbG9jYWxlRGF0YSovIDEzMjA5Nikge1xuXHRcdFx0JCRpbnZhbGlkYXRlKDE1LCBkYXlzT2ZXZWVrID0gZ2V0RGF5c09mV2Vlayh0b2RheSwgbG9jYWxlRGF0YSkpO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gW1xuXHRcdGRpc3BsYXllZE1vbnRoLFxuXHRcdHNob3dXZWVrTnVtcyxcblx0XHRvbkhvdmVyRGF5LFxuXHRcdG9uSG92ZXJXZWVrLFxuXHRcdG9uQ29udGV4dE1lbnVEYXksXG5cdFx0b25Db250ZXh0TWVudVdlZWssXG5cdFx0b25DbGlja0RheSxcblx0XHRvbkNsaWNrV2Vlayxcblx0XHRzb3VyY2VzLFxuXHRcdHNlbGVjdGVkSWQsXG5cdFx0dG9kYXksXG5cdFx0aW5jcmVtZW50RGlzcGxheWVkTW9udGgsXG5cdFx0ZGVjcmVtZW50RGlzcGxheWVkTW9udGgsXG5cdFx0cmVzZXREaXNwbGF5ZWRNb250aCxcblx0XHRtb250aCxcblx0XHRkYXlzT2ZXZWVrLFxuXHRcdGlzTW9iaWxlLFxuXHRcdGxvY2FsZURhdGFcblx0XTtcbn1cblxuY2xhc3MgQ2FsZW5kYXIgZXh0ZW5kcyBTdmVsdGVDb21wb25lbnQge1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHRpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3ZlbHRlLXBjaW11OC1zdHlsZVwiKSkgYWRkX2NzcygpO1xuXG5cdFx0aW5pdCh0aGlzLCBvcHRpb25zLCBpbnN0YW5jZSwgY3JlYXRlX2ZyYWdtZW50LCBub3RfZXF1YWwsIHtcblx0XHRcdGxvY2FsZURhdGE6IDE3LFxuXHRcdFx0c2hvd1dlZWtOdW1zOiAxLFxuXHRcdFx0b25Ib3ZlckRheTogMixcblx0XHRcdG9uSG92ZXJXZWVrOiAzLFxuXHRcdFx0b25Db250ZXh0TWVudURheTogNCxcblx0XHRcdG9uQ29udGV4dE1lbnVXZWVrOiA1LFxuXHRcdFx0b25DbGlja0RheTogNixcblx0XHRcdG9uQ2xpY2tXZWVrOiA3LFxuXHRcdFx0c291cmNlczogOCxcblx0XHRcdHNlbGVjdGVkSWQ6IDksXG5cdFx0XHR0b2RheTogMTAsXG5cdFx0XHRkaXNwbGF5ZWRNb250aDogMCxcblx0XHRcdGluY3JlbWVudERpc3BsYXllZE1vbnRoOiAxMSxcblx0XHRcdGRlY3JlbWVudERpc3BsYXllZE1vbnRoOiAxMixcblx0XHRcdHJlc2V0RGlzcGxheWVkTW9udGg6IDEzXG5cdFx0fSk7XG5cdH1cblxuXHRnZXQgaW5jcmVtZW50RGlzcGxheWVkTW9udGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuJCQuY3R4WzExXTtcblx0fVxuXG5cdGdldCBkZWNyZW1lbnREaXNwbGF5ZWRNb250aCgpIHtcblx0XHRyZXR1cm4gdGhpcy4kJC5jdHhbMTJdO1xuXHR9XG5cblx0Z2V0IHJlc2V0RGlzcGxheWVkTW9udGgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuJCQuY3R4WzEzXTtcblx0fVxufVxuXG5jb25zdCBsYW5nVG9Nb21lbnRMb2NhbGUgPSB7XG4gICAgZW46IFwiZW4tZ2JcIixcbiAgICB6aDogXCJ6aC1jblwiLFxuICAgIFwiemgtVFdcIjogXCJ6aC10d1wiLFxuICAgIHJ1OiBcInJ1XCIsXG4gICAga286IFwia29cIixcbiAgICBpdDogXCJpdFwiLFxuICAgIGlkOiBcImlkXCIsXG4gICAgcm86IFwicm9cIixcbiAgICBcInB0LUJSXCI6IFwicHQtYnJcIixcbiAgICBjejogXCJjc1wiLFxuICAgIGRhOiBcImRhXCIsXG4gICAgZGU6IFwiZGVcIixcbiAgICBlczogXCJlc1wiLFxuICAgIGZyOiBcImZyXCIsXG4gICAgbm86IFwibm5cIixcbiAgICBwbDogXCJwbFwiLFxuICAgIHB0OiBcInB0XCIsXG4gICAgdHI6IFwidHJcIixcbiAgICBoaTogXCJoaVwiLFxuICAgIG5sOiBcIm5sXCIsXG4gICAgYXI6IFwiYXJcIixcbiAgICBqYTogXCJqYVwiLFxufTtcbmNvbnN0IHdlZWtkYXlzID0gW1xuICAgIFwic3VuZGF5XCIsXG4gICAgXCJtb25kYXlcIixcbiAgICBcInR1ZXNkYXlcIixcbiAgICBcIndlZG5lc2RheVwiLFxuICAgIFwidGh1cnNkYXlcIixcbiAgICBcImZyaWRheVwiLFxuICAgIFwic2F0dXJkYXlcIixcbl07XG5mdW5jdGlvbiBvdmVycmlkZUdsb2JhbE1vbWVudFdlZWtTdGFydCh3ZWVrU3RhcnQpIHtcbiAgICBjb25zdCB7IG1vbWVudCB9ID0gd2luZG93O1xuICAgIGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBtb21lbnQubG9jYWxlKCk7XG4gICAgLy8gU2F2ZSB0aGUgaW5pdGlhbCBsb2NhbGUgd2Vla3NwZWMgc28gdGhhdCB3ZSBjYW4gcmVzdG9yZVxuICAgIC8vIGl0IHdoZW4gdG9nZ2xpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IG9wdGlvbnMgaW4gc2V0dGluZ3MuXG4gICAgaWYgKCF3aW5kb3cuX2J1bmRsZWRMb2NhbGVXZWVrU3BlYykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuX2J1bmRsZWRMb2NhbGVXZWVrU3BlYyA9IG1vbWVudC5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgfVxuICAgIGlmICh3ZWVrU3RhcnQgPT09IFwibG9jYWxlXCIpIHtcbiAgICAgICAgbW9tZW50LnVwZGF0ZUxvY2FsZShjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICB3ZWVrOiB3aW5kb3cuX2J1bmRsZWRMb2NhbGVXZWVrU3BlYyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBtb21lbnQudXBkYXRlTG9jYWxlKGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgICAgICBkb3c6IHdlZWtkYXlzLmluZGV4T2Yod2Vla1N0YXJ0KSB8fCAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSBsb2NhbGUgdXNlZCBieSB0aGUgY2FsZW5kYXIuIFRoaXMgYWxsb3dzIHRoZSBjYWxlbmRhciB0b1xuICogZGVmYXVsdCB0byB0aGUgdXNlcidzIGxvY2FsZSAoZS5nLiBTdGFydCBXZWVrIG9uIFN1bmRheS9Nb25kYXkvRnJpZGF5KVxuICpcbiAqIEBwYXJhbSBsb2NhbGVPdmVycmlkZSBsb2NhbGUgc3RyaW5nIChlLmcuIFwiZW4tVVNcIilcbiAqL1xuZnVuY3Rpb24gY29uZmlndXJlR2xvYmFsTW9tZW50TG9jYWxlKGxvY2FsZU92ZXJyaWRlID0gXCJzeXN0ZW0tZGVmYXVsdFwiLCB3ZWVrU3RhcnQgPSBcImxvY2FsZVwiKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IG9ic2lkaWFuTGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgfHwgXCJlblwiO1xuICAgIGNvbnN0IHN5c3RlbUxhbmcgPSAoX2EgPSBuYXZpZ2F0b3IubGFuZ3VhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b0xvd2VyQ2FzZSgpO1xuICAgIGxldCBtb21lbnRMb2NhbGUgPSBsYW5nVG9Nb21lbnRMb2NhbGVbb2JzaWRpYW5MYW5nXTtcbiAgICBpZiAobG9jYWxlT3ZlcnJpZGUgIT09IFwic3lzdGVtLWRlZmF1bHRcIikge1xuICAgICAgICBtb21lbnRMb2NhbGUgPSBsb2NhbGVPdmVycmlkZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3lzdGVtTGFuZy5zdGFydHNXaXRoKG9ic2lkaWFuTGFuZykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN5c3RlbSBsb2NhbGUgaXMgbW9yZSBzcGVjaWZpYyAoZW4tZ2IgdnMgZW4pLCB1c2UgdGhlIHN5c3RlbSBsb2NhbGUuXG4gICAgICAgIG1vbWVudExvY2FsZSA9IHN5c3RlbUxhbmc7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRMb2NhbGUgPSB3aW5kb3cubW9tZW50LmxvY2FsZShtb21lbnRMb2NhbGUpO1xuICAgIGNvbnNvbGUuZGVidWcoYFtDYWxlbmRhcl0gVHJ5aW5nIHRvIHN3aXRjaCBNb21lbnQuanMgZ2xvYmFsIGxvY2FsZSB0byAke21vbWVudExvY2FsZX0sIGdvdCAke2N1cnJlbnRMb2NhbGV9YCk7XG4gICAgb3ZlcnJpZGVHbG9iYWxNb21lbnRXZWVrU3RhcnQod2Vla1N0YXJ0KTtcbiAgICByZXR1cm4gY3VycmVudExvY2FsZTtcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIGNvbmZpZ3VyZUdsb2JhbE1vbWVudExvY2FsZSB9O1xuIiwiPHNjcmlwdCBsYW5nPVwidHNcIj5cbiAgaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkNhY2hlLCBFeHBlbnNlbGluZSB9IGZyb20gJy4uL3BhcnNlcic7XG4gIGltcG9ydCBUZXh0U3VnZ2VzdCBmcm9tICcuL1RleHRTdWdnZXN0LnN2ZWx0ZSc7XG4gIGltcG9ydCB7IG1heCB9IGZyb20gJ2xvZGFzaCc7XG5cbiAgZXhwb3J0IGxldCBjdXJyZW5jeVN5bWJvbDogc3RyaW5nO1xuICBleHBvcnQgbGV0IHR4Q2FjaGU6IFRyYW5zYWN0aW9uQ2FjaGU7XG4gIGV4cG9ydCBsZXQgbGluZXM6IEV4cGVuc2VsaW5lW107XG5cbiAgJDogcmVtYWluZGVyID0gKFxuICAgIC0xICpcbiAgICBsaW5lcy5tYXAoKHsgYW1vdW50IH0pID0+IGFtb3VudCkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBjdXJyICsgcHJldiwgMClcbiAgKS50b0ZpeGVkKDIpO1xuXG4gIGNvbnN0IGFkZFJvdyA9ICgpOiB2b2lkID0+IHtcbiAgICBsaW5lcy5zcGxpY2UobGluZXMubGVuZ3RoIC0gMSwgMCwge1xuICAgICAgY2F0ZWdvcnk6ICcnLFxuICAgICAgYW1vdW50OiAwLjAsXG4gICAgICBpZDogbWF4KGxpbmVzLm1hcCgobGluZSkgPT4gbGluZS5pZCkpICsgMSxcbiAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeVN5bWJvbCxcbiAgICAgIHJlY29uY2lsZTogJycsXG4gICAgICBjb21tZW50OiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgbGluZXMgPSBsaW5lczsgLy8gU3ZlbHRlIHJlYWN0aXZpdHkgaGFja1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZVJvdyA9IChpZDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgbGluZXMgPSBsaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUuaWQgIT09IGlkKTtcbiAgfTtcblxuICBjb25zdCBmb3JtYXRBbW91bnQgPSAoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0YXJnZXQudmFsdWUgPSB0YXJnZXQudmFsdWVBc051bWJlci50b0ZpeGVkKDIpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbnsjZWFjaCBsaW5lcyBhcyBsaW5lLCBpIChsaW5lLmlkKX1cbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgeyNpZiBpID4gMCAmJiBpICE9PSBsaW5lcy5sZW5ndGggLSAxfVxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzcz1cInJlbW92ZS1yb3dcIlxuICAgICAgICBvbjpjbGljaz17KCkgPT4ge1xuICAgICAgICAgIHJlbW92ZVJvdyhsaW5lLmlkKTtcbiAgICAgICAgfX1cbiAgICAgICAgdmlld0JveD1cIjAgMCAxMDAgMTAwXCJcbiAgICAgICAgd2lkdGg9XCIxNlwiXG4gICAgICAgIGhlaWdodD1cIjE2XCJcbiAgICAgICAgPjxwYXRoXG4gICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICBkPVwiTTE4LDhDMTIuNSw4LDgsMTIuNSw4LDE4djY0YzAsNS41LDQuNSwxMCwxMCwxMGg2NGM1LjUsMCwxMC00LjUsMTAtMTBWMThjMC01LjUtNC41LTEwLTEwLTEwTDE4LDh6IE0xOCwxMmg2NCBjMy4zLDAsNiwyLjcsNiw2djY0YzAsMy4zLTIuNyw2LTYsNkgxOGMtMy4zLDAtNi0yLjctNi02VjE4QzEyLDE0LjcsMTQuNywxMiwxOCwxMnogTTMzLjQsMzAuNmwtMi44LDIuOEw0Ny4yLDUwTDMwLjYsNjYuNiBsMi44LDIuOEw1MCw1Mi44bDE2LjYsMTYuNmwyLjgtMi44TDUyLjgsNTBsMTYuNi0xNi42bC0yLjgtMi44TDUwLDQ3LjJMMzMuNCwzMC42elwiXG4gICAgICAgIC8+PC9zdmdcbiAgICAgID5cbiAgICB7L2lmfVxuICAgIDxUZXh0U3VnZ2VzdFxuICAgICAgcGxhY2Vob2xkZXI9XCJBY2NvdW50XCJcbiAgICAgIGJpbmQ6dmFsdWU9e2xpbmUuY2F0ZWdvcnl9XG4gICAgICBjbGFzc2VzPVwiZXhwZW5zZS1jYXRlZ29yeVwiXG4gICAgICBzdWdnZXN0aW9ucz17dHhDYWNoZS5jYXRlZ29yaWVzfVxuICAgIC8+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWljb25cIj5cbiAgICAgIHsjaWYgaSA9PT0gbGluZXMubGVuZ3RoIC0gMX1cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgY2xhc3M9XCJleHBlbnNlLWFtb3VudFwiXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJBbW91bnRcIlxuICAgICAgICAgIGRpc2FibGVkPXt0cnVlfVxuICAgICAgICAgIHZhbHVlPXtyZW1haW5kZXJ9XG4gICAgICAgIC8+XG4gICAgICB7OmVsc2V9XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGNsYXNzPVwiZXhwZW5zZS1hbW91bnRcIlxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQW1vdW50XCJcbiAgICAgICAgICBvbjpibHVyPXtmb3JtYXRBbW91bnR9XG4gICAgICAgICAgYmluZDp2YWx1ZT17bGluZS5hbW91bnR9XG4gICAgICAgIC8+XG4gICAgICB7L2lmfVxuICAgICAgPGk+e2N1cnJlbmN5U3ltYm9sfTwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG57L2VhY2h9XG5cbjxidXR0b24gb246Y2xpY2s9e2FkZFJvd30+IEFkZCBSb3cgPC9idXR0b24+XG5cbjxzdHlsZT5cbiAgLmZvcm0tcm93IHtcbiAgICBwYWRkaW5nOiA1cHggMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgLnJlbW92ZS1yb3cge1xuICAgIG1hcmdpbjogN3B4IDRweCA3cHggMDtcbiAgfVxuXG4gIC5mb3JtLXJvdyA+ICoge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG4gIH1cbiAgLmZvcm0tcm93ID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gIH1cblxuICBpbnB1dC5leHBlbnNlLWFtb3VudCB7XG4gICAgd2lkdGg6IDI0JTtcbiAgfVxuXG4gIC5pbnB1dC1pY29uIHtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmlucHV0LWljb24gPiBpIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSk7XG4gICAgdG9wOiA1MCU7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgd2lkdGg6IDI1cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgfVxuXG4gIC5pbnB1dC1pY29uID4gaW5wdXQge1xuICAgIC8qIGltcG9ydGFudCByZXF1aXJlZCB0byBvdmVycmlkZSBtb2JpbGUgc3R5bGVzaGVldCAqL1xuICAgIHBhZGRpbmctbGVmdDogMjVweCAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG48L3N0eWxlPlxuIiwiPHNjcmlwdCBsYW5nPVwidHNcIj5cbiAgaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuICBpbXBvcnQgVGV4dFN1Z2dlc3QgZnJvbSAnLi9UZXh0U3VnZ2VzdC5zdmVsdGUnO1xuICBpbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ29ic2lkaWFuLWNhbGVuZGFyLXVpJztcbiAgaW1wb3J0IEV4cGVuc2VMaW5lc0lucHV0IGZyb20gJy4vRXhwZW5zZUxpbmVzSW5wdXQuc3ZlbHRlJztcbiAgaW1wb3J0IHsgbWF4IH0gZnJvbSAnbG9kYXNoJztcblxuICBpbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQ2FjaGUsIEV4cGVuc2VsaW5lLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3BhcnNlcic7XG4gIGltcG9ydCB0eXBlIHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuICBleHBvcnQgbGV0IGN1cnJlbmN5U3ltYm9sOiBzdHJpbmc7XG4gIGV4cG9ydCBsZXQgdHhDYWNoZTogVHJhbnNhY3Rpb25DYWNoZTtcbiAgZXhwb3J0IGxldCBzYXZlRm46ICh0eDogVHJhbnNhY3Rpb24pID0+IFByb21pc2U8dm9pZD47XG4gIGV4cG9ydCBsZXQgY2xvc2U6ICgpID0+IHZvaWQ7XG5cbiAgbGV0IHRvZGF5ID0gd2luZG93Lm1vbWVudCgpO1xuICBsZXQgc2VsZWN0ZWREYXk6IHN0cmluZztcbiAgbGV0IHBheWVlOiBzdHJpbmc7XG4gIGxldCBsaW5lczogRXhwZW5zZWxpbmVbXSA9IFtcbiAgICB7XG4gICAgICBjYXRlZ29yeTogJycsXG4gICAgICBhbW91bnQ6IDAsXG4gICAgICBpZDogMSxcbiAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeVN5bWJvbCxcbiAgICAgIHJlY29uY2lsZTogJycsXG4gICAgICBjb21tZW50OiB1bmRlZmluZWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBjYXRlZ29yeTogJycsXG4gICAgICBhbW91bnQ6IDAsXG4gICAgICBpZDogMixcbiAgICAgIGN1cnJlbmN5OiBjdXJyZW5jeVN5bWJvbCxcbiAgICAgIHJlY29uY2lsZTogJycsXG4gICAgICBjb21tZW50OiB1bmRlZmluZWQsXG4gICAgfSxcbiAgXTtcblxuICBjb25zdCBzZWxlY3REYXkgPSAoZGF0ZTogTW9tZW50KTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWREYXkgPSBgZGF5LWAgKyBkYXRlLnN0YXJ0T2YoJ2RheScpLmZvcm1hdCgpO1xuICB9O1xuXG4gIHNlbGVjdERheSh3aW5kb3cubW9tZW50KCkuY2xvbmUoKSk7XG5cbiAgY29uc3Qgc2F2ZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkYXRlTWF0Y2hlcyA9IC9bXFxkXXs0fS1bXFxkXXsyfS1bXFxkXXsyfS8uZXhlYyhzZWxlY3RlZERheSk7XG4gICAgaWYgKCFkYXRlTWF0Y2hlcyB8fCBkYXRlTWF0Y2hlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIG5ldyBOb3RpY2UoJ1VuYWJsZSB0byBkZXRlcm1pbmUgc2VsZWN0ZWQgZGF0ZScpO1xuICAgICAgY29uc29sZS5lcnJvcignbGVkZ2VyOiBVbmFibGUgdG8gcHJvY2VzcyBzZWxlY3RlZCBkYXRlOiAnICsgc2VsZWN0ZWREYXkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gZGF0ZU1hdGNoZXNbMF0ucmVwbGFjZSgvLS9nLCAnLycpO1xuXG4gICAgaWYgKCFwYXllZSB8fCBwYXllZSA9PT0gJycpIHtcbiAgICAgIG5ldyBOb3RpY2UoJ1BheWVlIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChsaW5lcy5zb21lKCh7IGNhdGVnb3J5IH0pID0+IGNhdGVnb3J5ID09PSAnJykpIHtcbiAgICAgIG5ldyBOb3RpY2UoJ1RyYW5zYWN0aW9uIGxpbmVzIG11c3QgaGF2ZSBhIGNhdGVnb3J5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHg6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogJ3R4JyxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGNoZWNrOiB1bmRlZmluZWQsXG4gICAgICAgIGRhdGUsXG4gICAgICAgIHBheWVlLFxuICAgICAgICBleHBlbnNlbGluZXM6IGxpbmVzLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgYXdhaXQgc2F2ZUZuKHR4KTtcbiAgICBjbG9zZSgpO1xuICB9O1xuPC9zY3JpcHQ+XG5cbjxoMj5BZGQgdG8gTGVkZ2VyPC9oMj5cblxuPGRpdiBjbGFzcz1cImxlZGdlci1hZGQtZXhwZW5zZS1mb3JtXCI+XG4gIDxDYWxlbmRhclxuICAgIHt0b2RheX1cbiAgICBvbkNsaWNrRGF5PXtzZWxlY3REYXl9XG4gICAgYmluZDpzZWxlY3RlZElkPXtzZWxlY3RlZERheX1cbiAgICBzaG93V2Vla051bXM9e2ZhbHNlfVxuICAvPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICA8VGV4dFN1Z2dlc3RcbiAgICAgIGJpbmQ6dmFsdWU9e3BheWVlfVxuICAgICAgcGxhY2Vob2xkZXI9XCJQYXllZVwiXG4gICAgICBzdWdnZXN0aW9ucz17dHhDYWNoZS5wYXllZXN9XG4gICAgICBjbGFzc2VzPVwiZXhwZW5zZS1wYXllZVwiXG4gICAgLz5cbiAgPC9kaXY+XG5cbiAgPEV4cGVuc2VMaW5lc0lucHV0IHtjdXJyZW5jeVN5bWJvbH0ge3R4Q2FjaGV9IHtsaW5lc30gLz5cblxuICA8IS0tIFRPRE86IE1vdmUgdG90YWwgcm93IGJhY2sgaGVyZSAtLT5cblxuICA8YnV0dG9uIG9uOmNsaWNrPXtzYXZlfT4gU2F2ZSA8L2J1dHRvbj5cbjwvZGl2PlxuXG48c3R5bGU+XG4gIC5mb3JtLXJvdyB7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgYXBwZW5kTGVkZ2VyLCBmb3JtYXRFeHBlbnNlLCBnZXRUcmFuc2FjdGlvbkNhY2hlLCB9IGZyb20gJy4vZmlsZS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgYmlsbEljb24sIGJ1eU1lQUNvZmZlZSwgcGF5cGFsIH0gZnJvbSAnLi9ncmFwaGljcyc7XG5pbXBvcnQgeyBMZWRnZXJWaWV3LCBMZWRnZXJWaWV3VHlwZSB9IGZyb20gJy4vbGVkZ2Vydmlldyc7XG5pbXBvcnQgeyBzZXR0aW5nc1dpdGhEZWZhdWx0cyB9IGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IEFkZEV4cGVuc2VVSSBmcm9tICcuL3VpL0FkZEV4cGVuc2VVSS5zdmVsdGUnO1xuaW1wb3J0IHsgYWRkSWNvbiwgTW9kYWwsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZywgfSBmcm9tICdvYnNpZGlhbic7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMZWRnZXJQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zYWN0aW9uQ2FjaGUgPSAoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKCdsZWRnZXI6IFVwZGF0aW5nIHRoZSB0cmFuc2FjdGlvbiBjYWNoZScpO1xuICAgICAgICAgICAgdGhpcy50eENhY2hlID0geWllbGQgZ2V0VHJhbnNhY3Rpb25DYWNoZSh0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLCB0aGlzLmFwcC52YXVsdCwgdGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN3aXRjaFRvTGVkZ2VyVmlldyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUxlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TW9zdFJlY2VudExlYWYoKTtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdTdGF0ZSA9IGFjdGl2ZUxlYWYuZ2V0Vmlld1N0YXRlKCkuc3RhdGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZW5hYmxlTGVkZ2VyVmlzIHx8XG4gICAgICAgICAgICAgICAgIXZpZXdTdGF0ZSB8fFxuICAgICAgICAgICAgICAgIHZpZXdTdGF0ZS5maWxlICE9PSB0aGlzLnNldHRpbmdzLmxlZGdlckZpbGUgfHxcbiAgICAgICAgICAgICAgICB2aWV3U3RhdGUubW9kZSAhPT0gJ3ByZXZpZXcnKSB7XG4gICAgICAgICAgICAgICAgLy8gT25seSByZW5kZXIgd2hlbiBwcmV2aWV3aW5nIHRoZSBMZWRnZXIgZmlsZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZzID0gYWN0aXZlTGVhZi5nZXRWaWV3U3RhdGUoKTtcbiAgICAgICAgICAgIHZzLnR5cGUgPSAnbGVkZ2VyJztcbiAgICAgICAgICAgIGFjdGl2ZUxlYWYuc2V0Vmlld1N0YXRlKHZzKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgb25sb2FkKCkge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2xlZGdlcjogTG9hZGluZyBwbHVnaW4gdicgKyB0aGlzLm1hbmlmZXN0LnZlcnNpb24pO1xuICAgICAgICAgICAgeWllbGQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgU2V0dGluZ3NUYWIodGhpcykpO1xuICAgICAgICAgICAgYWRkSWNvbignbGVkZ2VyJywgYmlsbEljb24pO1xuICAgICAgICAgICAgdGhpcy5hZGRSaWJib25JY29uKCdsZWRnZXInLCAnQWRkIHRvIExlZGdlcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgQWRkRXhwZW5zZU1vZGFsKHRoaXMpLm9wZW4oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KHRoaXMuYXBwLnZhdWx0Lm9uKCdtb2RpZnknLCAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLnBhdGggPT09IHRoaXMuc2V0dGluZ3MubGVkZ2VyRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYW5zYWN0aW9uQ2FjaGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVmlldyhMZWRnZXJWaWV3VHlwZSwgKGxlYWYpID0+IG5ldyBMZWRnZXJWaWV3KGxlYWYsIHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFeHRlbnNpb25zKFsnbGVkZ2VyJ10sIExlZGdlclZpZXdUeXBlKTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2xheW91dC1jaGFuZ2UnLCB0aGlzLnN3aXRjaFRvTGVkZ2VyVmlldykpO1xuICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhbnNhY3Rpb25DYWNoZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3NXaXRoRGVmYXVsdHMoeWllbGQgdGhpcy5sb2FkRGF0YSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIEFkZEV4cGVuc2VNb2RhbCBleHRlbmRzIE1vZGFsIHtcbiAgICBjb25zdHJ1Y3RvcihwbHVnaW4pIHtcbiAgICAgICAgc3VwZXIocGx1Z2luLmFwcCk7XG4gICAgICAgIHRoaXMub25PcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgICAgICAgICBuZXcgQWRkRXhwZW5zZVVJKHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGNvbnRlbnRFbCxcbiAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW5jeVN5bWJvbDogdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVuY3lTeW1ib2wsXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGbjogKHR4KSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRFeHBlbnNlKHR4LCB0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBhcHBlbmRMZWRnZXIodGhpcy5hcHAubWV0YWRhdGFDYWNoZSwgdGhpcy5hcHAudmF1bHQsIHRoaXMucGx1Z2luLnNldHRpbmdzLCBmb3JtYXR0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdHhDYWNoZTogdGhpcy5wbHVnaW4udHhDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2U6ICgpID0+IHRoaXMuY2xvc2UoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25DbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgICAgICAgICAgY29udGVudEVsLmVtcHR5KCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIH1cbn1cbmNsYXNzIFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gICAgY29uc3RydWN0b3IocGx1Z2luKSB7XG4gICAgICAgIHN1cGVyKHBsdWdpbi5hcHAsIHBsdWdpbik7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIH1cbiAgICBkaXNwbGF5KCkge1xuICAgICAgICBjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuICAgICAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdMZWRnZXIgUGx1Z2luIC0gU2V0dGluZ3MnIH0pO1xuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdDdXJyZW5jeSBTeW1ib2wnKVxuICAgICAgICAgICAgLnNldERlc2MoJ1ByZWZpeGVzIGFsbCB0cmFuc2FjdGlvbiBhbW91bnRzJylcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICB0ZXh0LnNldFBsYWNlaG9sZGVyKCckJykuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVuY3lTeW1ib2wpO1xuICAgICAgICAgICAgdGV4dC5pbnB1dEVsLm9uYmx1ciA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVuY3lTeW1ib2wgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZSgnTGVkZ2VyIEZpbGUnKVxuICAgICAgICAgICAgLnNldERlc2MoJ1BhdGggaW4gdGhlIFZhdWx0IHRvIHlvdXIgTGVkZ2VyIGZpbGUuIE11c3QgYmUgYSAubWQgZmlsZS4nKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+IHtcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGVkZ2VyRmlsZSlcbiAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoJ0xlZGdlci5tZCcpO1xuICAgICAgICAgICAgdGV4dC5pbnB1dEVsLm9uYmx1ciA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGVkZ2VyRmlsZSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdJbmNsdWRlIGZpbmFsIGxpbmUgYW1vdW50JylcbiAgICAgICAgICAgIC5zZXREZXNjKCdJbmNsdWRlIHRoZSBkb2xsYXIgYW1vdW50IG9uIHRoZSBmaW5hbCBsaW5lIG9mIGEgdHJhbnNhY3Rpb24uIFRoaXMgdmFsdWUgaXMgb3B0aW9uYWwsIGFuZCBpcyBhbHdheSBlcXVhbCB0byB0aGUgc3VtIG9mIHRoZSBwcmV2aW91cyBsaW5lcyAqIC0xLicpXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+IHtcbiAgICAgICAgICAgIHRvZ2dsZVxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmNsdWRlRmluYWxMaW5lQW1vdW50KVxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmNsdWRlRmluYWxMaW5lQW1vdW50ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXYgPSBjb250YWluZXJFbC5jcmVhdGVFbCgnZGl2Jywge1xuICAgICAgICAgICAgY2xzOiAnbGVkZ2VyLWRvbmF0aW9uJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRvbmF0ZVRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgIGRvbmF0ZVRleHQuYXBwZW5kVGV4dCgnSWYgdGhpcyBwbHVnaW4gYWRkcyB2YWx1ZSBmb3IgeW91IGFuZCB5b3Ugd291bGQgbGlrZSB0byBoZWxwIHN1cHBvcnQgJyArXG4gICAgICAgICAgICAnY29udGludWVkIGRldmVsb3BtZW50LCBwbGVhc2UgdXNlIHRoZSBidXR0b25zIGJlbG93OicpO1xuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9uYXRlVGV4dCk7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZURvbmF0ZUJ1dHRvbignaHR0cHM6Ly9wYXlwYWwubWUvdGdyb3NpbmdlcicsIHBhcnNlci5wYXJzZUZyb21TdHJpbmcocGF5cGFsLCAndGV4dC94bWwnKS5kb2N1bWVudEVsZW1lbnQpKTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZURvbmF0ZUJ1dHRvbignaHR0cHM6Ly93d3cuYnV5bWVhY29mZmVlLmNvbS90Z3Jvc2luZ2VyJywgcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhidXlNZUFDb2ZmZWUsICd0ZXh0L3htbCcpLmRvY3VtZW50RWxlbWVudCkpO1xuICAgIH1cbn1cbmNvbnN0IGNyZWF0ZURvbmF0ZUJ1dHRvbiA9IChsaW5rLCBpbWcpID0+IHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgbGluayk7XG4gICAgYS5hZGRDbGFzcygnbGVkZ2VyLWRvbmF0ZS1idXR0b24nKTtcbiAgICBhLmFwcGVuZENoaWxkKGltZyk7XG4gICAgcmV0dXJuIGE7XG59O1xuIl0sIm5hbWVzIjpbInRoaXMiLCJ1bmRlZmluZWQiLCJnbG9iYWwiLCJQYXJzZXIiLCJHcmFtbWFyIiwic29ydGVkVW5pcSIsImZsYXRNYXAiLCJudW1iZXIiLCJhc2NlbmRpbmciLCJwYXJzZVR5cGVuYW1lcyIsImNvbnN0YW50IiwicmdiIiwiY29sb3JSZ2IiLCJ2YWx1ZSIsInN0cmluZyIsImRhdGUiLCJjcmVhdGUiLCJnZXQiLCJzZXQiLCJ0aW1lb3V0IiwiYXR0clJlbW92ZSIsImF0dHJSZW1vdmVOUyIsImF0dHJDb25zdGFudCIsImF0dHJDb25zdGFudE5TIiwiYXR0ckZ1bmN0aW9uIiwiYXR0ckZ1bmN0aW9uTlMiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsImludGVycG9sYXRlIiwiU2VsZWN0aW9uIiwic3R5bGUiLCJzdHlsZVJlbW92ZSIsInN0eWxlQ29uc3RhbnQiLCJzdHlsZUZ1bmN0aW9uIiwidGV4dENvbnN0YW50IiwidGV4dEZ1bmN0aW9uIiwiaWQiLCJlYXNlQ3ViaWNJbk91dCIsImlkZW50aXR5IiwiYmlzZWN0IiwiaW50ZXJwb2xhdGVWYWx1ZSIsImxpbmVhciIsIkl0ZW1WaWV3Iiwic2NhbGVMaW5lYXIiLCJkMy5jcmVhdGUiLCJub29wIiwiY2hpbGRyZW4iLCJpbml0Iiwic3RhcnQiLCJtaW4iLCJtYXgiLCJtYXRoTWF4IiwibWF0aE1pbiIsImVmZmVjdCIsImhhc2giLCJhbGxQbGFjZW1lbnRzIiwicGxhY2VtZW50cyIsImZvcm1hdCIsInBvcHBlck9mZnNldHMiLCJjb21wdXRlU3R5bGVzIiwiYXBwbHlTdHlsZXMiLCJvZmZzZXQiLCJmbGlwIiwicHJldmVudE92ZXJmbG93IiwiYXJyb3ciLCJoaWRlIiwiU2NvcGUiLCJydW4iLCJibGFua19vYmplY3QiLCJydW5fYWxsIiwiaXNfZnVuY3Rpb24iLCJzYWZlX25vdF9lcXVhbCIsImlzX2VtcHR5IiwibnVsbF90b19lbXB0eSIsImFwcGVuZCIsImluc2VydCIsImRldGFjaCIsImVsZW1lbnQiLCJzdmdfZWxlbWVudCIsInRleHQiLCJzcGFjZSIsImVtcHR5IiwibGlzdGVuIiwiYXR0ciIsInNldF9kYXRhIiwiY3VycmVudF9jb21wb25lbnQiLCJzZXRfY3VycmVudF9jb21wb25lbnQiLCJnZXRfY3VycmVudF9jb21wb25lbnQiLCJkaXJ0eV9jb21wb25lbnRzIiwiYmluZGluZ19jYWxsYmFja3MiLCJyZW5kZXJfY2FsbGJhY2tzIiwiZmx1c2hfY2FsbGJhY2tzIiwicmVzb2x2ZWRfcHJvbWlzZSIsInVwZGF0ZV9zY2hlZHVsZWQiLCJzY2hlZHVsZV91cGRhdGUiLCJmbHVzaCIsImFkZF9yZW5kZXJfY2FsbGJhY2siLCJmbHVzaGluZyIsInNlZW5fY2FsbGJhY2tzIiwidXBkYXRlIiwib3V0cm9pbmciLCJvdXRyb3MiLCJncm91cF9vdXRyb3MiLCJjaGVja19vdXRyb3MiLCJ0cmFuc2l0aW9uX2luIiwidHJhbnNpdGlvbl9vdXQiLCJvdXRyb19hbmRfZGVzdHJveV9ibG9jayIsInVwZGF0ZV9rZXllZF9lYWNoIiwiY3JlYXRlX2NvbXBvbmVudCIsIm1vdW50X2NvbXBvbmVudCIsImRlc3Ryb3lfY29tcG9uZW50IiwibWFrZV9kaXJ0eSIsIlN2ZWx0ZUNvbXBvbmVudCIsImFkZF9jc3MiLCJjcmVhdGVfZnJhZ21lbnQiLCJpbnN0YW5jZSIsIk5vdGljZSIsIlBsdWdpbiIsImFkZEljb24iLCJNb2RhbCIsIlBsdWdpblNldHRpbmdUYWIiLCJTZXR0aW5nIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8s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LE1BQU0sQ0FBQyxJQUFJLEVBQUM7QUFDckMsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUM7QUFDdkIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUM7QUFDckQsS0FBSztBQUNMLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFDO0FBQ3ZCLE1BQU0sSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBQztBQUM5QixNQUFNLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFDO0FBQ3hDLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQzNCLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUTtBQUNuQyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQztBQUMzQixRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzdELFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFJO0FBQ3ZDLFVBQVUsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUks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QUFDLEVBQUUsS0FBSyxDQUFDO0FBQzVELEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRTtBQUNwQixJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsTUFBSztBQUN4QixJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFDO0FBQy9CO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFLO0FBQzFCLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3ZCLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzFFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUM7QUFDckMsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7QUFDakQsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQUs7QUFDOUIsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUk7QUFDNUI7QUFDQTtBQUNBLE1BQU0sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ3hFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQzFDLElBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxLQUFLLEVB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QkFBb0IsRUFBRSxTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMvSixRQUFRLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUU7QUFDdEYsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksRUFBRTtBQUNsRixRQUFRLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUU7QUFDbEYsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksRUFBRTtBQUNsRixRQUFRLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7QUFDdkQsUUFBUSxFQUFFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMvSixRQUFRLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFF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LEVBQUUsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM3SixRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRTtBQUNySyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RULFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtB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QUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0FBQ2pGLElBQUksTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRztBQUM3QixJQUFJLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUc7QUFDN0IsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRztBQUN2RCxJQUFJLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0FBQ3ZELElBQUksTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUc7QUFDdkQsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRztBQUN2RCxJQUFJLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUc7QUFDN0IsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUc7QUFDakYsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUc7QUFDakYsSUFBSSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRztBQUN2RCxJQUFJLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0FBQ3ZELElBQUksTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0FBQzFDLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtBQUM5QixJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUk7QUFDOUIsSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQjtBQUNBLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQ2hELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQ2hELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDL0QsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUMvRCxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQy9ELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUM5RSxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDOUUsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUMvRCxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQy9ELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDL0QsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQzlFLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUM5RSxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUc7QUFDakMsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDaEQsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQzlFLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUM5RSxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQy9ELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDL0QsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDaEQsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDaEQsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDaEQsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7QUFDaEQsSUFBSSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUMvRCxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQy9ELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQ2hELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQ2hELElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQzdGLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0FBQzdGLElBQUksUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRztBQUNqQyxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUNoRCxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUNoRCxJQUFJLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztBQUNoRCxJQUFJLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUk7QUFDbEMsSUFBSSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJO0FBQ2xDLElBQUksUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRztBQUNqQyxHQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0EsRUFBRSxJQUFJLFdBQVcsR0FBRztBQUNwQixJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ2hCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxHQUFHLEVBQUUsUUFBUTtBQUNqQixJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ2hCLEdBQUcsQ0FBQztBQUNKO0FBQ0E7QUFDQSxFQUFFLElBQUksYUFBYSxHQUFHO0FBQ3RCLElBQUksT0FBTyxFQUFFLEdBQUc7QUFDaEIsSUFBSSxNQUFNLEVBQUUsR0FBRztBQUNmLElBQUksTUFBTSxFQUFFLEdBQUc7QUFDZixJQUFJLFFBQVEsRUFBRSxHQUFHO0FBQ2pCLElBQUksT0FBTyxFQUFFLEdBQUc7QUFDaEIsR0FBRyxDQUFDO0FBQ0o7QUFDQTtBQUNBLEVBQUUsSUFBSSxhQUFhLEdBQUc7QUFDdEIsSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUNkLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksUUFBUSxFQUFFLE9BQU87QUFDckIsSUFBSSxRQUFRLEVBQUUsT0FBTztBQUNyQixHQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0EsRUFBRSxJQUFJLGNBQWMsR0FBRyxVQUFVO0FBQ2pDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQztBQUM5QjtBQUNBO0FBQ0EsRUFBRSxJQUFJLFVBQVUsR0FBRyxPQUFPQyxjQUFNLElBQUksUUFBUSxJQUFJQSxjQUFNLElBQUlBLGNBQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJQSxjQUFNLENBQUM7QUFDN0Y7QUFDQTtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUcsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbkY7QUFDQTtBQUNBLEVBQUUsSUFBSSxJQUFJLEdBQUcsVUFBVSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztBQUNqRTtBQUNBO0FBQ0EsRUFBRSxJQUFJLFdBQVcsSUFBaUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDMUY7QUFDQTtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUcsV0FBVyxJQUFJLFFBQWEsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7QUFDcEc7QUFDQTtBQUNBLEVBQUUsSUFBSSxhQUFhLEdBQUcsVUFBVSxJQUFJLFVBQVUsQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDO0FBQ3ZFO0FBQ0E7QUFDQSxFQUFFLElBQUksV0FBVyxHQUFHLGFBQWEsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQ3hEO0FBQ0E7QUFDQSxFQUFFLElBQUksUUFBUSxJQUFJLFdBQVc7QUFDN0IsSUFBSSxJQUFJO0FBQ1I7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3ZGO0FBQ0EsTUFBTSxJQUFJLEtBQUssRUFBRTtBQUNqQixRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTSxPQUFPLFdBQVcsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUU7QUFDbEIsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNQO0FBQ0E7QUFDQSxFQUFFLElBQUksaUJBQWlCLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhO0FBQzVELE1BQU0sVUFBVSxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTTtBQUM5QyxNQUFNLFNBQVMsR0FBRyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUs7QUFDNUMsTUFBTSxZQUFZLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRO0FBQ2xELE1BQU0sU0FBUyxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSztBQUM1QyxNQUFNLGdCQUFnQixHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRTtBQUN0QyxJQUFJLFFBQVEsSUFBSSxDQUFDLE1BQU07QUFDdkIsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFO0FBQ2pFLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQVEsTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbEQ7QUFDQSxJQUFJLE9BQU8sRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFO0FBQzdCLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLE1BQU0sTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pELEtBQUs7QUFDTCxJQUFJLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtBQUN0QyxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFRLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsTUFB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLFNBQVMsWUFBWSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxJQUFJLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0MsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUksWUFBWSxJQUFJLFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUNyRCxJQUFJLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN0RztBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSztBQUM3QixRQUFRLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtBQUMzQixRQUFRLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSztBQUM3QixRQUFRLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUTtBQUNuQyxRQUFRLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtBQUMzQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUMvQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUMvQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTTtBQUMvQixRQUFRLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3RDO0FBQ0E7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFT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LENBQUMsQ0FBQyxDQUFDO0FBQzdELFVBQVUsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxVQUFVLEtBQUssQ0FBQyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLFVBQVUsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLFVBQVUsS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRyxTQUFTO0FBQ1QsUUFBUSxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNwRCxZQUFZLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FB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RUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDcEQsTUFBTSxJQUFJLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3BELE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEIsT0FBTztBQUNQLE1BQU0sSUFBSSxLQUFLLEdBQUcsU0FBUyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLE9BQU87QUFDUCxNQUFNLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJ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LEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1AsTUFBTSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUM1QixNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsTUFBTSxPQUFPLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNuRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsU0FBUyxNQUFNLEVBQUU7QUFDakQsTUFBTSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDekQsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RCxVQUFVLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztBQUNsQyxVQUFVLEVBQUUsQ0FBQztBQUNiLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsU0FBUyxNQUFNLEVBQUU7QUFDbkQsTUFBTSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2pDLFVBQVUsTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN6RDtBQUNBLE1BQU0sSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3JDLFFBQVEsUUFBUSxHQUFHQSxXQUFTLENBQUM7QUFDN0IsT0FBTyxNQUFNO0FBQ2IsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsT0FBTztBQUNQLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEQsVUFBVSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RCxVQUFVLEVBQUUsQ0FBQztBQUNiLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFNBQVMsTUFBTSxFQUFFO0FBQ3JELE1BQU0sSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNuQyxVQUFVLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDekQ7QUFDQSxNQUFNLFVBQVUsR0FBRyxPQUFPLFVBQVUsSUFBSSxVQUFVLEdBQUcsVUFBVSxHQUFHQSxXQUFTLENBQUM7QUFDNUUsTUFBTSxJQUFJLFVBQVUsRUFBRTtBQUN0QixRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixPQUFPO0FBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RCxVQUFVLGdCQUFnQixDQUFDLE1BQU0sRUFBRUEsV0FBUyxFQUFFLFVBQVUsQ0FBQztBQUN6RCxVQUFVLEVBQUUsQ0FBQztBQUNiLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDcEMsTUFBTSxPQUFPLEtBQUssSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN6QixNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsTUFBTSxPQUFPLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHQSxXQUFTLENBQUM7QUFDcEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtBQUNsRCxNQUFNLElBQUksTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDcEQsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1AsTUFBTSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxJQUFJLFNBQVMsS0FBS0EsV0FBUyxFQUFFO0FBQ25DLFFBQVEsS0FBSyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyQyxRQUFRLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLE9BQU87QUFDUCxNQUFNLE9BQU8sS0FBSyxLQUFLLEtBQUs7QUFDNUIsVUFBVSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUNoRCxVQUFVLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUU7QUFDM0IsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsV0FBUyxDQUFDO0FBQ2hGLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDcEMsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNO0FBQzlELFVBQVUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7QUFDcEMsVUFBVSxLQUFLLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDaEQsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNO0FBQzlELFVBQVUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxVQUFVLEtBQUssQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUs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QUFLLEdBQUcsSUFBSSxDQUFDLFdBQVc7QUFDbEMsVUFBVSxXQUFXLEdBQUcsU0FBUyxNQUFNLEVBQUUsRUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNFO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNO0FBQy9DLFVBQVUsRUFBRSxLQUFLLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDOUQsUUFBUSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdEMsT0FBTztBQUNQLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxNQUFNLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQzdCLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDcEIsUUFBUSxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUM7QUFDN0IsUUFBUSxTQUFTLEVBQUVBLFdBQVM7QUFDNUIsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sSUFBSSxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLEVBQUU7QUFDM0UsUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDckMsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDQSxXQUFTLENBQUMsQ0FBQztBQUNoQyxTQUFTO0FBQ1QsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPLENBQUMsQ0FBQztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsTUFBTSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUU7QUFDM0MsTUFBTSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUNoRSxNQUFNLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFO0FBQzNDLE1BQU0sT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFdBQVcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFO0FBQy9DLE1BQU0sT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsWUFBWSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFO0FBQ3ZELE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBS0EsV0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekQsTUFBTSxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRTtBQUMzQyxNQUFNLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzVELE1BQU0sT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFO0FBQ2hELE1BQU0sSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7QUFDdEUsTUFBTSxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDaEUsTUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxPQUFPLE1BQU07QUFDYixRQUFRLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM5QyxPQUFPO0FBQ1AsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQzNELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzdFLE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxNQUFNLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDckMsTUFBTSxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7QUFDekIsUUFBUSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckQsT0FBTztBQUNQLE1BQU0sT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDO0FBQ2pDLFdBQVcsU0FBUyxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0UsV0FBVyxDQUFDLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDOUQsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEIsVUFBVSxNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUksVUFBVTtBQUM1QyxVQUFVLE1BQU0sR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0U7QUFDQSxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxLQUFLLEVBQUU7QUFDM0MsUUFBUSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUYsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUM5RCxNQUFNLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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VUFBVSxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFVBQVUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVDLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3hCLE1BQU0sT0FBTyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3ZELE1BQU0sVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxVQUFVLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDM0QsVUFBVSxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pFO0FBQ0EsTUFBTSxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQzFDLE1BQU0sT0FBTyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUU7QUFDckMsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdEIsWUFBWSxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLE9BQU8sRUFBRSxLQUFLLEdBQUcsTUFBTSxFQUFFO0FBQ2pDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ3BELE1BQU0sSUFBSSxPQUFPLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNqRSxNQUFNLE9BQU8sVUFBVSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRUEsV0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRSxLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUN6RCxNQUFNLElBQUksT0FBTyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDdEUsTUFBTSxPQUFPLFVBQVUsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUVBLFdBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckYsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2pELE1BQU0sT0FBTyxVQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRUEsV0FBUyxFQUFFQSxXQUFTLEVBQUVBLFdBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6RixLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDL0IsTUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUNyQyxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQLE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBS0EsV0FBUyxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsTUFBTSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDakMsTUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUNyQyxRQUFRLE1BQU0sSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsTUFBTSxPQUFPLFFBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtBQUNyQyxRQUFRLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDL0IsWUFBWSxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQ7QUFDQSxRQUFR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S0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQzFCLE1BQU0sT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDbEQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7QUFDMUMsTUFBTSxVQUFVLEdBQUcsT0FBTyxVQUFVLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBR0EsV0FBUyxDQUFDO0FBQzVFLE1BQU0sT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO0FBQzlDLE1BQU0sVUFBVSxHQUFHLE9BQU8sVUFBVSxJQUFJLFVBQVUsR0FBRyxVQUFVLEdBQUdBLFdBQVMsQ0FBQztBQUM1RSxNQUFNLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxlQUFlLEdBQUcsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3hDLE1BQU0sT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzVFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDOUIsTUFBTSxPQUFPLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDckUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEdBQUcsR0FBRyx5QkFBeUIsQ0FBQyxTQUFTLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDL0QsTUFBTSxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDNUIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxXQUFXLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGVBQWUsR0FBRyxTQUFTLEtBQUssRUFBRTtBQUM5RyxNQUFNLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUN4RSxRQUFRLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwRCxLQUFLLENBQUM7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDaEMsTUFBTSxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFDdEMsTUFBTSxPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkQsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzlCLE1BQU0sT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxLQUFLO0FBQzlDLFNBQVMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzdCLE1BQU0sT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRO0FBQ3JDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxnQkFBZ0IsQ0FBQztBQUNsRSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzdCLE1BQU0sSUFBSSxJQUFJLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDOUIsTUFBTSxPQUFPLEtBQUssSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDakMsTUFBTSxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDO0FBQ3ZELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDckMsTUFBTSxPQUFPLE1BQU0sS0FBSyxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDcEYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUU7QUFDckQsTUFBTSxVQUFVLEdBQUcsT0FBTyxVQUFVLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBR0EsV0FBUyxDQUFDO0FBQzVFLE1BQU0sT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDM0UsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxNQUFNLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM3QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDekMsT0FBTztBQUNQLE1BQU0sT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzVCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtBQUMxQixNQUFNLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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TUFBTSxLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTtBQUM5QixRQUFRLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDOUMsVUFBVSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxRQUFRLEdBQUcsY0FBYyxDQUFDLFNBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMzRCxNQUFNLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pELEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDckYsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0QsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxjQUFjLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkYsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDM0QsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQzNDLE1BQU0sSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sT0FBTyxVQUFVLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUN0QyxNQUFNLE9BQU8sTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDM0MsTUFBTSxPQUFPLE1BQU0sSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDL0IsTUFBTSxPQUFPLE1BQU0sSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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TSxFQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDdkMsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQztBQUNBLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3RELFFBQVEsZUFBZSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRSxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDekMsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQztBQUNBLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3RELFFBQVEsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRSxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sT0FBTyxNQUFNLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxHQUFHLGNBQWMsQ0FBQyxTQUFTLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0FBQ2xFLE1BQU0sU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDMUMsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbEYsTUFBTSxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdEQsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxT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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN0QyxNQUFNLE9BQU8sTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7QUFDdEQsTUFBTSxVQUFVLEdBQUcsT0FBTyxVQUFVLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBR0EsV0FBUyxDQUFDO0FBQzVFLE1BQU0sT0FBTyxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7QUFDdEQsTUFBTSxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2pDLFVBQVUsU0FBUyxHQUFHLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksV0FBVyxJQUFJLElBQUksRUFBRTtBQUMvQixRQUFRLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQ2hELFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDdkIsVUFBVSxXQUFXLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsYUFBYSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQyxVQUFVLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqRixTQUFTO0FBQ1QsYUFBYTtBQUNiLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUMzQixTQUFTO0FBQ1QsT0FBTztBQUNQLE1BQU0sQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNsRixRQUFRLE9BQU8sUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNELE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxPQUFPLFdBQVcsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDakMsTUFBTSxPQUFPLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUMzQyxNQUFNLE9BQU8sTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdkYsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUU7QUFDM0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxVQUFVLElBQUksVUFBVSxHQUFHLFVBQVUsR0FBR0EsV0FBUyxDQUFDO0FBQzVFLE1BQU0sT0FBTyxNQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkcsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzVCLE1BQU0sT0FBTyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsTUFBTSxFQUFFO0FBQzlCLE1BQU0sT0FBTyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDbEQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sUUFBUSxHQUFHLFFBQVEsSUFBSSxJQUFJO0FBQ2pDLFVBQVUsQ0FBQztBQUNYLFVBQVUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUN4RSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7QUFDNUMsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdkUsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLFVBQVUsRUFBRSxDQUFDO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzdCLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDNUIsTUFBTSxPQUFPLFlBQVksQ0FBQyxPQUFPLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUMvRixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDN0IsTUFBTSxPQUFPLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzdDLE1BQU0sT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUMvQyxNQUFNLE9BQU8sU0FBUyxNQUFNLEVBQUU7QUFDOUIsUUFBUSxPQUFPLFVBQVUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLE9BQU8sQ0FBQztBQUNSLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQ25ELE1BQU0sT0FBTyxTQUFTLElBQUksRUFBRTtBQUM1QixRQUFRLE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsT0FBTyxDQUFDO0FBQ1IsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDNUMsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlCLFVBQVUsV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQ7QUFDQSxNQUFNLElBQUksT0FBTyxJQUFJLElBQUk7QUFDekIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDeEUsUUFBUSxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4QixRQUFRLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBUSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMxRCxPQUFPO0FBQ1AsTUFBTSxJQUFJLEtBQUssR0FBRyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLO0FBQy9FLFVBQVUsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QztBQUNBLE1BQU0sU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLFVBQVUsRUFBRTtBQUNsRCxRQUFRLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN0QyxRQUFRLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUNwQixVQUFVLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVztBQUNwRCxZQUFZLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDMUMsWUFBWSxJQUFJLEtBQUssSUFBSSxRQUFRLEVBQUU7QUFDbkMsY0FBYyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNuRCxrQkFBa0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM3RTtBQUNBLGNBQWMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNuRixjQUFjLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQzFDLGNBQWMsT0FBTyxNQUFNLENBQUM7QUFDNUIsYUFBYTtBQUNiLFlBQVksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzVFLFdBQVcsQ0FBQztBQUNaLFNBQVM7QUFDVCxPQUFPLENBQUMsQ0FBQztBQUNUO0FBQ0EsTUFBTSxPQUFPLE1BQU0sQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxVQUFVLEdBQUc7QUFDMUIsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzNCLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDekIsT0FBTztBQUNQLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLElBQUksR0FBRztBQUNwQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRTtBQUN2QixNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxPQUFPLFFBQVEsQ0FBQyxTQUFTLElBQUksRUFBRTtBQUNyQyxRQUFRLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxPQUFPLENBQUMsQ0FBQztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzVCLE1BQU0sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlFLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxTQUFTLElBQUksRUFBRTtBQUM1QixRQUFRLE9BQU8sTUFBTSxJQUFJLElBQUksR0FBR0EsV0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEUsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxLQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxTQUFTLEdBQUc7QUFDekIsTUFBTSxPQUFPLEVBQUUsQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7QUFDL0MsVUFBVUEsV0FBUyxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDcEMsTUFBTSxPQUFPLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNO0FBQ25DLFVBQVUsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUMvRCxVQUFVQSxXQUFTLENBQUM7QUFDcEIsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3pCLE1BQU0sT0FBTyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDckMsTUFBTSxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q3pGLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVGLENBQUM7QUFDRDtBQUNPLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQzdDLEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkUsTUFBTSxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUM1QixFQUFFLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0FBQ2hDLE9BQU8sSUFBSSxLQUFLLElBQUksRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDbkMsT0FBTyxJQUFJLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUNuQyxFQUFFLE9BQU8sSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdkM7O0FDckRlLGNBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUMzQyxFQUFFLEtBQUssR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFN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LENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BGLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNILEVBQUUsSUFBSSxFQUFFLFdBQVc7QUFDbkIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUIsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVDLElBQUksT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixHQUFHO0FBQ0gsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzdCLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxSCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9FLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pGLEdBQUc7QUFDSCxFQUFFLEtBQUssRUFBRSxTQUFTLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3BDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0UsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RixHQUFHO0FBQ0gsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3pCLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEQsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ3JDLE1BQU0sT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkMsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdB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QUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pILFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQztBQUN4RixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUMvSixRQUFRLElBQUk7QUFDWixRQUFRLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUcsUUFBUSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsUUFBUSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0csUUFBUSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMvRSxRQUFRLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25GLFFBQVEsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFELFFBQVEsTUFBTSxLQUFLLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUQsUUFBUSxJQUFJLENBQUM7QUFDYixDQUFDO0FBQ0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDakIsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUNEO0FBQ0EsU0FBUyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QixFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsQ0FBQztBQUNEO0FBQ08sU0FBUyxVQUFVLENBQUMsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsSUFBSSxFQUFFLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO0FBQ3pCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNkLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNEO0FBQ08sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0FBQ3RDLEVBQUUsT0FBTyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDbEcsQ0FBQztBQUNEO0FBQ08sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUMxQixDQUFDO0FBQ0Q7QUFDQSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQy9CLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckUsR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckUsR0FBRztBQUNILEVBQUUsR0FBRyxFQUFFLFdBQVc7QUFDbEIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0gsRUFBRSxXQUFXLEVBQUUsV0FBVztBQUMxQixJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUM1QyxZQUFZLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDN0MsWUFBWSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzdDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0gsRUFBRSxHQUFHLEVBQUUsYUFBYTtBQUNwQixFQUFFLFNBQVMsRUFBRSxhQUFhO0FBQzFCLEVBQUUsU0FBUyxFQUFFLGFBQWE7QUFDMUIsRUFBRSxRQUFRLEVBQUUsYUFBYTtBQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0o7QUFDQSxTQUFTLGFBQWEsR0FBRztBQUN6QixFQUFFLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFDRDtBQUNBLFNBQVMsYUFBYSxHQUFHO0FBQ3pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLEdBQUcsT0FBTztBQUNwQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUNsRSxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNELFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUU7QUFDcEIsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFDRDtBQUNBLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNCLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBQ0Q7QUFDTyxTQUFTLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDOUIsRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7QUFDekIsRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7QUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHO0FBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRztBQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IsTUFBTSxDQUFDLEdBQUcsR0FBRztBQUNiLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHO0FBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDMUIsRUFBRSxJQUFJLENBQUMsRUFBRTtBQUNULElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsU0FBUyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUM3QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDWixHQUFHLE1BQU07QUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBQ0Q7QUFDTyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7QUFDdEMsRUFBRSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUNsRyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUU7QUFDL0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQzFCLENBQUM7QUFDRDtBQUNBLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDL0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckQsSUFBSSxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0QsR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELElBQUksT0FBTyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdELEdBQUc7QUFDSCxFQUFFLEdBQUcsRUFBRSxXQUFXO0FBQ2xCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHO0FBQzdDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsRCxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNsQixRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDMUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEIsSUFBSSxPQUFPLElBQUksR0FBRztBQUNsQixNQUFNLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25ELE1BQU0sT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sT0FBTyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbEQsTUFBTSxJQUFJLENBQUMsT0FBTztBQUNsQixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0gsRUFBRSxXQUFXLEVBQUUsV0FBVztBQUMxQixJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0gsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUN4QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxHQUFHLE9BQU87QUFDdEMsV0FBVyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUk7QUFDOUIsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxLQUFLO0FBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRztBQUNuQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSjtBQUNBO0FBQ0EsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDNUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQzFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQ3BCLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2pELFFBQVEsRUFBRSxJQUFJLEdBQUcsQ0FBQztBQUNsQjs7QUNsWEEsaUJBQWUsQ0FBQyxJQUFJLE1BQU0sQ0FBQzs7QUNFM0IsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUU7QUFDckIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUM1RSxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxHQUFHLENBQUM7QUFDSixDQUFDO0FBTUQ7QUFDTyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDekIsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ25ELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHQyxVQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDZSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixFQUFFLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUdBLFVBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEOztBQ3ZCQSxxQkFBZSxDQUFDLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNyQyxFQUFFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QjtBQUNBLEVBQUUsU0FBU0MsS0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUdDLEdBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUdBLEdBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkUsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0RCxJQUFJLE9BQU8sU0FBUyxDQUFDLEVBQUU7QUFDdkIsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixNQUFNLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxLQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxNQUFNLE9BQU8sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFRCxLQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztBQUN2QjtBQUNBLEVBQUUsT0FBT0EsS0FBRyxDQUFDO0FBQ2IsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUN6QlUsb0JBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFO0FBQ25CLE1BQU0sQ0FBQyxDQUFDO0FBQ1IsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQ3JCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RCxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ08sU0FBUyxhQUFhLENBQUMsQ0FBQyxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQzNEOztBQ05PLFNBQVMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN6QyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sQ0FBQyxDQUFDO0FBQ1I7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0UsV0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQ3JCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRyxDQUFDO0FBQ0o7O0FDckJlLGVBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUM7QUFDbkIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUU7QUFDckMsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLEdBQUcsQ0FBQztBQUNKOztBQ0xlLDBCQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNyQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLEdBQUcsQ0FBQztBQUNKOztBQ0ZlLGVBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNaLE1BQU0sQ0FBQyxHQUFHLEVBQUU7QUFDWixNQUFNLENBQUMsQ0FBQztBQUNSO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEQsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEQ7QUFDQSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxXQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLEtBQUssTUFBTTtBQUNYLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQ3JCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUcsQ0FBQztBQUNKOztBQ3BCQSxJQUFJLEdBQUcsR0FBRyw2Q0FBNkM7QUFDdkQsSUFBSSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QztBQUNBLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNqQixFQUFFLE9BQU8sV0FBVztBQUNwQixJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRyxDQUFDO0FBQ0osQ0FBQztBQUNEO0FBQ0EsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2hCLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRTtBQUNyQixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDZSwwQkFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQztBQUM1QyxNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUU7QUFDUixNQUFNLEVBQUU7QUFDUixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixNQUFNLENBQUMsR0FBRyxFQUFFO0FBQ1osTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2I7QUFDQTtBQUNBLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQTtBQUNBLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFO0FBQzlCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQixXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdkMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLEtBQUssTUFBTTtBQUNYLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFTixpQkFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsS0FBSztBQUNMLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0E7QUFDQSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDckIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDekIsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNuQyxVQUFVLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxD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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRUEsaUJBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRTtBQUNsQixNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7QUFDL0MsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdkMsSUFBSSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNoQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUVBLGlCQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUVBLGlCQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxLQUFLLE1BQU0sSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDckMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdEQsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2QsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsSUFBSSxPQUFPLFNBQVMsQ0FBQyxFQUFFO0FBQ3ZCLE1BQU0sSUFBSSxDQUFDLEdBQUcs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QUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFFLE9BQU9HLFNBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRDtBQUNBO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFFO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0E7QUFDQSxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ3hCLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25FLFFBQVEsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSUEsU0FBTyxDQUFDLFdBQVc7QUFDdkIsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUFFO0FBQ2xDLFFBQVEsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDN0IsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUs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QUFLLFVBQVUsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDO0FBQ25ELEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakQ7O0FDVmUsMEJBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDL0IsRUFBRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsRUFBRSxLQUFLLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekcsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMxRSxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJ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QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsRUFBRSxLQUFLLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRyxJQUFJLEtBQUssSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUgsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUN2RixRQUFRLElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDakUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzlCLFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUVBLEtBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRSxPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUQ7O0FDakJlLDZCQUFRLENBQUMsTUFBTSxFQUFFO0FBQ2hDLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUs7QUFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwQjtBQUNBLEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRTtBQUNBLEVBQUUsS0FBSyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEcsSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzNFLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzNCLFFBQVEsS0FBSyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxHQUFHQSxLQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVB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QUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkIsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuQixJQUFJLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25CLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDbkIsR0FBRyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBQ0Q7QUFDQSxlQUFlLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7QUFDdEQ7QUFDTyxTQUFTLGVBQWUsQ0FBQyxTQUFTLEVBQUU7QUFDM0MsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN2RSxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzFFLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDdkUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUM1RSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7QUFDL0IsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDNUUsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQ3hGLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztBQUMvQixFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3RFLENBQUM7QUFDRDtBQUNBLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLFdBQVc7QUFDaEQsRUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJO0FBQ2xCLFFBQVEsSUFBSSxDQUFDLEtBQUs7QUFDbEIsUUFBUSxJQUFJLENBQUMsSUFBSTtBQUNqQixRQUFRLElBQUksQ0FBQyxNQUFNO0FBQ25CLFNBQVMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzlCLFNBQVMsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckUsU0FBUyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDL0IsU0FBUyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkYsU0FBUyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2xCLENBQUM7O0FDOUNEO0FBQ2UsbUJBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDM0IsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzlELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ25DLE1BQU0sS0FBSyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxNQUFNLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ2hFLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZEOztBQ1JPLElBQUksY0FBYyxDQUFDO0FBQzFCO0FBQ2UseUJBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEIsRUFBRSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLEdBQUcsUUFBUSxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ25HLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDN0IsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVztBQUM5QixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM1RCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3Rjs7QUNiZSxzQkFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDOUIsRUFBRSxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4QixFQUFFLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXO0FBQzNFLFFBQVEsV0FBVyxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RILFFBQVEsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RTs7QUNOQSxrQkFBZTtBQUNmLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDcEIsRUFBRSxHQUFHLEVBQUUsYUFBYTtBQUNwQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDdkMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLGFBQWEsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxQyxFQUFFLEdBQUcsRUFBRSxhQUFhO0FBQ3BCLEVBQUUsR0FBRyxFQUFFLGdCQUFnQjtBQUN2QixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7QUFDdEQsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3hDLENBQUM7O0FDbEJjLG1CQUFRLENBQUMsQ0FBQyxFQUFFO0FBQzNCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWDs7QUNPQSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUc7QUFDN0IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEY7QUFDZSxxQkFBUSxDQUFDLE1BQU0sRUFBRTtBQUNoQyxFQUFFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxHQUFHQyxVQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNoSyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ25GLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDbkYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUN4RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBR0EsVUFBUSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0csTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRTtBQUN4RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2xFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMvRDtBQUNBLEVBQUUsU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFO0FBQ2hDLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUk7QUFDN0IsUUFBUSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFDL0IsUUFBUSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUk7QUFDN0IsUUFBUSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU07QUFDakMsUUFBUSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUk7QUFDN0IsUUFBUSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFDL0IsUUFBUSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUs7QUFDL0IsUUFBUSxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVM7QUFDdkMsUUFBUSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUk7QUFDN0IsUUFBUSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztBQUM5QjtBQUNBO0FBQ0EsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQy9DO0FBQ0E7QUFDQSxTQUFTLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxLQUFLLFNBQVMsS0FBSyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3RHO0FBQ0E7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsTUFBTSxLQUFLLEdBQUcsR0FBRyxjQUFjLEdBQUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtBQUN4SCxRQUFRLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7QUFDdEMsUUFBUSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxTQUFTLEdBQUcsU0FBUyxLQUFLLFNBQVMsR0FBRyxDQUFDO0FBQzNDLFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRSxVQUFVLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDL0M7QUFDQSxJQUFJLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRTtBQUMzQixNQUFNLElBQUksV0FBVyxHQUFHLE1BQU07QUFDOUIsVUFBVSxXQUFXLEdBQUcsTUFBTTtBQUM5QixVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDeEIsUUFBUSxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN0RCxRQUFRLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbkIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDdkI7QUFDQTtBQUNBLFFBQVEsSUFBSSxhQUFhLEdBQUcsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2RDtBQUNBO0FBQ0EsUUFBUSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RTtBQUNBO0FBQ0EsUUFBUSxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0FBQ0E7QUFDQSxRQUFRLElBQUksYUFBYSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssR0FBRyxFQUFFLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDakY7QUFDQTtBQUNBLFFBQVEsV0FBVyxHQUFHLENBQUMsYUFBYSxJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksSUFBSSxXQUFXLENBQUM7QUFDL0gsUUFBUSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxXQUFXLElBQUksYUFBYSxJQUFJLElBQUksS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hJO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBSSxXQUFXLEVBQUU7QUFDekIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbkMsVUFBVSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMxQixZQUFZLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzNELGNBQWMsV0FBVyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUM7QUFDckcsY0FBYyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0EsTUFBTSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RDtBQUNBO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU07QUFDekUsVUFBVSxPQUFPLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkY7QUFDQTtBQUNBLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxFQUFFLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDOUg7QUFDQTtBQUNBLE1BQU0sUUFBUSxLQUFLO0FBQ25CLFFBQVEsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLFdBQVcsR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLE1BQU07QUFDN0UsUUFBUSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsV0FBVyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsTUFBTTtBQUM3RSxRQUFRLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUM1SSxRQUFRLFNBQVMsS0FBSyxHQUFHLE9BQU8sR0FBRyxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLE1BQU07QUFDNUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsV0FBVztBQUNqQyxNQUFNLE9BQU8sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUM1QixLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFlBQVksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQzFDLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFO0FBQ2hHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDMUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxPQUFPLFNBQVMsS0FBSyxFQUFFO0FBQzNCLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQyxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU87QUFDVCxJQUFJLE1BQU0sRUFBRSxTQUFTO0FBQ3JCLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsR0FBRyxDQUFDO0FBQ0o7O0FDakpBLElBQUksTUFBTSxDQUFDO0FBQ0osSUFBSSxNQUFNLENBQUM7QUFDWCxJQUFJLFlBQVksQ0FBQztBQUN4QjtBQUNBLGFBQWEsQ0FBQztBQUNkLEVBQUUsU0FBUyxFQUFFLEdBQUc7QUFDaEIsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDZixFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDckIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNlLFNBQVMsYUFBYSxDQUFDLFVBQVUsRUFBRTtBQUNsRCxFQUFFLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEMsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN6QixFQUFFLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO0FBQ3JDLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEI7O0FDZmUsdUJBQVEsQ0FBQyxJQUFJLEVBQUU7QUFDOUIsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hEOztBQ0ZlLHdCQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNyQyxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoSDs7QUNGZSx1QkFBUSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7QUFDbkMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDcEQsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekQ7O0FDTE8sU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtBQUN6QyxFQUFFLFFBQVEsU0FBUyxDQUFDLE1BQU07QUFDMUIsSUFBSSxLQUFLLENBQUMsRUFBRSxNQUFNO0FBQ2xCLElBQUksS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDdEMsSUFBSSxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNyRCxHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkOztBQ1BlLFNBQVMsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNyQyxFQUFFLE9BQU8sV0FBVztBQUNwQixJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRyxDQUFDO0FBQ0o7O0FDSmUsU0FBUzlCLFFBQU0sQ0FBQyxDQUFDLEVBQUU7QUFDbEMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ1o7O0FDR0EsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFDTyxTQUFTOEIsVUFBUSxDQUFDLENBQUMsRUFBRTtBQUM1QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6QixFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMzQyxRQUFRM0IsU0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2QixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsRUFBRSxPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3RCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDM0MsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEUsT0FBTyxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RCxFQUFFLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUNEO0FBQ0EsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDN0MsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDbkQsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0QixNQUFNLENBQUMsR0FB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U0FBUyxLQUFLLEVBQUU7QUFDL0IsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNsQztBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLElBQUksSUFBSSxPQUFPLENBQUM7QUFDaEIsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNiLElBQUksSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUU7QUFDdEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM5QyxNQUFNLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDMUIsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0MsTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDNUIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBSztBQUNyQixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFJO0FBQ3BCLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsT0FBTyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsRUFB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 diff --git a/.obsidian/plugins/ledger-obsidian/manifest.json b/.obsidian/plugins/ledger-obsidian/manifest.json new file mode 100644 index 00000000..6a2f3a00 --- /dev/null +++ b/.obsidian/plugins/ledger-obsidian/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "ledger-obsidian", + "name": "Ledger", + "author": "Tony Grosinger", + "authorUrl": "https://grosinger.net", + "description": "Plain text accounting", + "isDesktopOnly": false, + "version": "0.0.8", + "minAppVersion": "0.11.12", + "js": "main.js" +} diff --git a/.obsidian/plugins/ledger-obsidian/styles.css b/.obsidian/plugins/ledger-obsidian/styles.css new file mode 100644 index 00000000..6360a305 --- /dev/null +++ b/.obsidian/plugins/ledger-obsidian/styles.css @@ -0,0 +1,35 @@ +/* +Transaction Entry Modal +*/ + +.is-mobile .remove-row { + margin: 11px 4px 11px 0 !important; +} + +.is-mobile input[type='number'] { + padding: 8px 14px; + height: auto; + font-size: 17px; +} + +.is-mobile button { + margin: 5px 0; +} + +/* +Settings Page +*/ + +.ledger-input-error { + border-color: var(--text-error) !important; +} + +.ledger-donation { + width: 70%; + margin: 0 auto; + text-align: center; +} + +.ledger-donate-button { + margin: 10px; +} diff --git a/.obsidian/plugins/metaedit/data.json b/.obsidian/plugins/metaedit/data.json new file mode 100644 index 00000000..6afafa97 --- /dev/null +++ b/.obsidian/plugins/metaedit/data.json @@ -0,0 +1,29 @@ +{ + "ProgressProperties": { + "enabled": false, + "properties": [] + }, + "IgnoredProperties": { + "enabled": false, + "properties": [] + }, + "AutoProperties": { + "enabled": false, + "properties": [] + }, + "EditMode": { + "mode": "Some Multi", + "properties": [ + "Tag", + "Alias", + "Location" + ] + }, + "KanbanHelper": { + "enabled": false, + "boards": [] + }, + "UIElements": { + "enabled": true + } +} \ No newline at end of file diff --git a/.obsidian/plugins/metaedit/main.js b/.obsidian/plugins/metaedit/main.js new file mode 100644 index 00000000..e6b115b7 --- /dev/null +++ b/.obsidian/plugins/metaedit/main.js @@ -0,0 +1,5247 @@ +'use strict'; + +var obsidian = require('obsidian'); +var fs_1 = require('fs'); +var path_1 = require('path'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var fs_1__default = /*#__PURE__*/_interopDefaultLegacy(fs_1); +var path_1__default = /*#__PURE__*/_interopDefaultLegacy(path_1); + +var EditMode; +(function (EditMode) { + EditMode["AllSingle"] = "All Single"; + EditMode["AllMulti"] = "All Multi"; + EditMode["SomeMulti"] = "Some Multi"; +})(EditMode || (EditMode = {})); + +function noop() { } +function run(fn) { + return fn(); +} +function blank_object() { + return Object.create(null); +} +function run_all(fns) { + fns.forEach(run); +} +function is_function(thing) { + return typeof thing === 'function'; +} +function safe_not_equal(a, b) { + return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); +} +function is_empty(obj) { + return Object.keys(obj).length === 0; +} + +// Track which nodes are claimed during hydration. Unclaimed nodes can then be removed from the DOM +// at the end of hydration without touching the remaining nodes. +let is_hydrating = false; +function start_hydrating() { + is_hydrating = true; +} +function end_hydrating() { + is_hydrating = false; +} +function upper_bound(low, high, key, value) { + // Return first index of value larger than input value in the range [low, high) + while (low < high) { + const mid = low + ((high - low) >> 1); + if (key(mid) <= value) { + low = mid + 1; + } + else { + high = mid; + } + } + return low; +} +function init_hydrate(target) { + if (target.hydrate_init) + return; + target.hydrate_init = true; + // We know that all children have claim_order values since the unclaimed have been detached + const children = target.childNodes; + /* + * Reorder claimed children optimally. + * We can reorder claimed children optimally by finding the longest subsequence of + * nodes that are already claimed in order and only moving the rest. The longest + * subsequence subsequence of nodes that are claimed in order can be found by + * computing the longest increasing subsequence of .claim_order values. + * + * This algorithm is optimal in generating the least amount of reorder operations + * possible. + * + * Proof: + * We know that, given a set of reordering operations, the nodes that do not move + * always form an increasing subsequence, since they do not move among each other + * meaning that they must be already ordered among each other. Thus, the maximal + * set of nodes that do not move form a longest increasing subsequence. + */ + // Compute longest increasing subsequence + // m: subsequence length j => index k of smallest value that ends an increasing subsequence of length j + const m = new Int32Array(children.length + 1); + // Predecessor indices + 1 + const p = new Int32Array(children.length); + m[0] = -1; + let longest = 0; + for (let i = 0; i < children.length; i++) { + const current = children[i].claim_order; + // Find the largest subsequence length such that it ends in a value less than our current value + // upper_bound returns first greater value, so we subtract one + const seqLen = upper_bound(1, longest + 1, idx => children[m[idx]].claim_order, current) - 1; + p[i] = m[seqLen] + 1; + const newLen = seqLen + 1; + // We can guarantee that current is the smallest value. Otherwise, we would have generated a longer sequence. + m[newLen] = i; + longest = Math.max(newLen, longest); + } + // The longest increasing subsequence of nodes (initially reversed) + const lis = []; + // The rest of the nodes, nodes that will be moved + const toMove = []; + let last = children.length - 1; + for (let cur = m[longest] + 1; cur != 0; cur = p[cur - 1]) { + lis.push(children[cur - 1]); + for (; last >= cur; last--) { + toMove.push(children[last]); + } + last--; + } + for (; last >= 0; last--) { + toMove.push(children[last]); + } + lis.reverse(); + // We sort the nodes being moved to guarantee that their insertion order matches the claim order + toMove.sort((a, b) => a.claim_order - b.claim_order); + // Finally, we move the nodes + for (let i = 0, j = 0; i < toMove.length; i++) { + while (j < lis.length && toMove[i].claim_order >= lis[j].claim_order) { + j++; + } + const anchor = j < lis.length ? lis[j] : null; + target.insertBefore(toMove[i], anchor); + } +} +function append(target, node) { + if (is_hydrating) { + init_hydrate(target); + if ((target.actual_end_child === undefined) || ((target.actual_end_child !== null) && (target.actual_end_child.parentElement !== target))) { + target.actual_end_child = target.firstChild; + } + if (node !== target.actual_end_child) { + target.insertBefore(node, target.actual_end_child); + } + else { + target.actual_end_child = node.nextSibling; + } + } + else if (node.parentNode !== target) { + target.appendChild(node); + } +} +function insert(target, node, anchor) { + if (is_hydrating && !anchor) { + append(target, node); + } + else if (node.parentNode !== target || (anchor && node.nextSibling !== anchor)) { + target.insertBefore(node, anchor || null); + } +} +function detach(node) { + node.parentNode.removeChild(node); +} +function destroy_each(iterations, detaching) { + for (let i = 0; i < iterations.length; i += 1) { + if (iterations[i]) + iterations[i].d(detaching); + } +} +function element(name) { + return document.createElement(name); +} +function text(data) { + return document.createTextNode(data); +} +function space() { + return text(' '); +} +function listen(node, event, handler, options) { + node.addEventListener(event, handler, options); + return () => node.removeEventListener(event, handler, options); +} +function attr(node, attribute, value) { + if (value == null) + node.removeAttribute(attribute); + else if (node.getAttribute(attribute) !== value) + node.setAttribute(attribute, value); +} +function children(element) { + return Array.from(element.childNodes); +} +function set_data(text, data) { + data = '' + data; + if (text.wholeText !== data) + text.data = data; +} +function set_input_value(input, value) { + input.value = value == null ? '' : value; +} +function set_style(node, key, value, important) { + node.style.setProperty(key, value, important ? 'important' : ''); +} +function select_option(select, value) { + for (let i = 0; i < select.options.length; i += 1) { + const option = select.options[i]; + if (option.__value === value) { + option.selected = true; + return; + } + } +} +function select_value(select) { + const selected_option = select.querySelector(':checked') || select.options[0]; + return selected_option && selected_option.__value; +} + +let current_component; +function set_current_component(component) { + current_component = component; +} +function get_current_component() { + if (!current_component) + throw new Error('Function called outside component initialization'); + return current_component; +} +function onMount(fn) { + get_current_component().$$.on_mount.push(fn); +} + +const dirty_components = []; +const binding_callbacks = []; +const render_callbacks = []; +const flush_callbacks = []; +const resolved_promise = Promise.resolve(); +let update_scheduled = false; +function schedule_update() { + if (!update_scheduled) { + update_scheduled = true; + resolved_promise.then(flush); + } +} +function add_render_callback(fn) { + render_callbacks.push(fn); +} +let flushing = false; +const seen_callbacks = new Set(); +function flush() { + if (flushing) + return; + flushing = true; + do { + // first, call beforeUpdate functions + // and update components + for (let i = 0; i < dirty_components.length; i += 1) { + const component = dirty_components[i]; + set_current_component(component); + update(component.$$); + } + set_current_component(null); + dirty_components.length = 0; + while (binding_callbacks.length) + binding_callbacks.pop()(); + // then, once components are updated, call + // afterUpdate functions. This may cause + // subsequent updates... + for (let i = 0; i < render_callbacks.length; i += 1) { + const callback = render_callbacks[i]; + if (!seen_callbacks.has(callback)) { + // ...so guard against infinite loops + seen_callbacks.add(callback); + callback(); + } + } + render_callbacks.length = 0; + } while (dirty_components.length); + while (flush_callbacks.length) { + flush_callbacks.pop()(); + } + update_scheduled = false; + flushing = false; + seen_callbacks.clear(); +} +function update($$) { + if ($$.fragment !== null) { + $$.update(); + run_all($$.before_update); + const dirty = $$.dirty; + $$.dirty = [-1]; + $$.fragment && $$.fragment.p($$.ctx, dirty); + $$.after_update.forEach(add_render_callback); + } +} +const outroing = new Set(); +function transition_in(block, local) { + if (block && block.i) { + outroing.delete(block); + block.i(local); + } +} +function mount_component(component, target, anchor, customElement) { + const { fragment, on_mount, on_destroy, after_update } = component.$$; + fragment && fragment.m(target, anchor); + if (!customElement) { + // onMount happens before the initial afterUpdate + add_render_callback(() => { + const new_on_destroy = on_mount.map(run).filter(is_function); + if (on_destroy) { + on_destroy.push(...new_on_destroy); + } + else { + // Edge case - component was destroyed immediately, + // most likely as a result of a binding initialising + run_all(new_on_destroy); + } + component.$$.on_mount = []; + }); + } + after_update.forEach(add_render_callback); +} +function destroy_component(component, detaching) { + const $$ = component.$$; + if ($$.fragment !== null) { + run_all($$.on_destroy); + $$.fragment && $$.fragment.d(detaching); + // TODO null out other refs, including component.$$ (but need to + // preserve final state?) + $$.on_destroy = $$.fragment = null; + $$.ctx = []; + } +} +function make_dirty(component, i) { + if (component.$$.dirty[0] === -1) { + dirty_components.push(component); + schedule_update(); + component.$$.dirty.fill(0); + } + component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31)); +} +function init(component, options, instance, create_fragment, not_equal, props, dirty = [-1]) { + const parent_component = current_component; + set_current_component(component); + const $$ = component.$$ = { + fragment: null, + ctx: null, + // state + props, + update: noop, + not_equal, + bound: blank_object(), + // lifecycle + on_mount: [], + on_destroy: [], + on_disconnect: [], + before_update: [], + after_update: [], + context: new Map(parent_component ? parent_component.$$.context : options.context || []), + // everything else + callbacks: blank_object(), + dirty, + skip_bound: false + }; + let ready = false; + $$.ctx = instance + ? instance(component, options.props || {}, (i, ret, ...rest) => { + const value = rest.length ? rest[0] : ret; + if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { + if (!$$.skip_bound && $$.bound[i]) + $$.bound[i](value); + if (ready) + make_dirty(component, i); + } + return ret; + }) + : []; + $$.update(); + ready = true; + run_all($$.before_update); + // `false` as a special case of no DOM component + $$.fragment = create_fragment ? create_fragment($$.ctx) : false; + if (options.target) { + if (options.hydrate) { + start_hydrating(); + const nodes = children(options.target); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.l(nodes); + nodes.forEach(detach); + } + else { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + $$.fragment && $$.fragment.c(); + } + if (options.intro) + transition_in(component.$$.fragment); + mount_component(component, options.target, options.anchor, options.customElement); + end_hydrating(); + flush(); + } + set_current_component(parent_component); +} +/** + * Base class for Svelte components. Used when dev=false. + */ +class SvelteComponent { + $destroy() { + destroy_component(this, 1); + this.$destroy = noop; + } + $on(type, callback) { + const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = [])); + callbacks.push(callback); + return () => { + const index = callbacks.indexOf(callback); + if (index !== -1) + callbacks.splice(index, 1); + }; + } + $set($$props) { + if (this.$$set && !is_empty($$props)) { + this.$$.skip_bound = true; + this.$$set($$props); + this.$$.skip_bound = false; + } + } +} + +var ProgressPropertyOptions; +(function (ProgressPropertyOptions) { + ProgressPropertyOptions["TaskTotal"] = "Total Tasks"; + ProgressPropertyOptions["TaskComplete"] = "Completed Tasks"; + ProgressPropertyOptions["TaskIncomplete"] = "Incomplete Tasks"; +})(ProgressPropertyOptions || (ProgressPropertyOptions = {})); + +/* src/Modals/ProgressPropertiesSettingModal/ProgressPropertiesModalContent.svelte generated by Svelte v3.38.3 */ + +function add_css$3() { + var style = element("style"); + style.id = "svelte-kqcr7b-style"; + style.textContent = ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}select.svelte-kqcr7b{border-radius:4px;width:100%;height:30px;border:1px solid #dbdbdc;color:#383a42;background-color:#fff;padding:3px}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}"; + append(document.head, style); +} + +function get_each_context$3(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[10] = list[i]; + child_ctx[11] = list; + child_ctx[12] = i; + return child_ctx; +} + +function get_each_context_1$1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[13] = list[i]; + return child_ctx; +} + +// (33:24) {#each options as text} +function create_each_block_1$1(ctx) { + let option; + + return { + c() { + option = element("option"); + option.__value = /*text*/ ctx[13]; + option.value = option.__value; + attr(option, "label", /*text*/ ctx[13]); + }, + m(target, anchor) { + insert(target, option, anchor); + }, + p: noop, + d(detaching) { + if (detaching) detach(option); + } + }; +} + +// (26:8) {#each properties as property} +function create_each_block$3(ctx) { + let tr; + let td0; + let input0; + let t0; + let td1; + let select; + let t1; + let td2; + let input1; + let t2; + let mounted; + let dispose; + + function input0_input_handler() { + /*input0_input_handler*/ ctx[5].call(input0, /*each_value*/ ctx[11], /*property_index*/ ctx[12]); + } + + let each_value_1 = /*options*/ ctx[2]; + let each_blocks = []; + + for (let i = 0; i < each_value_1.length; i += 1) { + each_blocks[i] = create_each_block_1$1(get_each_context_1$1(ctx, each_value_1, i)); + } + + function select_change_handler() { + /*select_change_handler*/ ctx[7].call(select, /*each_value*/ ctx[11], /*property_index*/ ctx[12]); + } + + function click_handler() { + return /*click_handler*/ ctx[9](/*property*/ ctx[10]); + } + + return { + c() { + tr = element("tr"); + td0 = element("td"); + input0 = element("input"); + t0 = space(); + td1 = element("td"); + select = element("select"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t1 = space(); + td2 = element("td"); + input1 = element("input"); + t2 = space(); + attr(input0, "type", "text"); + attr(input0, "placeholder", "Property name"); + attr(select, "class", "svelte-kqcr7b"); + if (/*property*/ ctx[10].type === void 0) add_render_callback(select_change_handler); + attr(input1, "type", "button"); + attr(input1, "class", "not-a-button"); + input1.value = "❌"; + }, + m(target, anchor) { + insert(target, tr, anchor); + append(tr, td0); + append(td0, input0); + set_input_value(input0, /*property*/ ctx[10].name); + append(tr, t0); + append(tr, td1); + append(td1, select); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(select, null); + } + + select_option(select, /*property*/ ctx[10].type); + append(tr, t1); + append(tr, td2); + append(td2, input1); + append(tr, t2); + + if (!mounted) { + dispose = [ + listen(input0, "input", input0_input_handler), + listen(input0, "change", /*change_handler*/ ctx[6]), + listen(select, "change", select_change_handler), + listen(select, "change", /*change_handler_1*/ ctx[8]), + listen(input1, "click", click_handler) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (dirty & /*properties, options*/ 5 && input0.value !== /*property*/ ctx[10].name) { + set_input_value(input0, /*property*/ ctx[10].name); + } + + if (dirty & /*options*/ 4) { + each_value_1 = /*options*/ ctx[2]; + let i; + + for (i = 0; i < each_value_1.length; i += 1) { + const child_ctx = get_each_context_1$1(ctx, each_value_1, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block_1$1(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(select, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + + each_blocks.length = each_value_1.length; + } + + if (dirty & /*properties, options*/ 5) { + select_option(select, /*property*/ ctx[10].type); + } + }, + d(detaching) { + if (detaching) detach(tr); + destroy_each(each_blocks, detaching); + mounted = false; + run_all(dispose); + } + }; +} + +function create_fragment$4(ctx) { + let div1; + let table; + let thead; + let t3; + let t4; + let div0; + let button; + let mounted; + let dispose; + let each_value = /*properties*/ ctx[0]; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i)); + } + + return { + c() { + div1 = element("div"); + table = element("table"); + thead = element("thead"); + + thead.innerHTML = `Name + Type`; + + t3 = space(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t4 = space(); + div0 = element("div"); + button = element("button"); + button.textContent = "Add"; + set_style(table, "width", "100%"); + attr(button, "class", "mod-cta svelte-kqcr7b"); + attr(div0, "class", "buttonContainer svelte-kqcr7b"); + attr(div1, "class", "centerSettingContent"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, table); + append(table, thead); + append(table, t3); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(table, null); + } + + append(div1, t4); + append(div1, div0); + append(div0, button); + + if (!mounted) { + dispose = listen(button, "click", /*addNewProperty*/ ctx[3]); + mounted = true; + } + }, + p(ctx, [dirty]) { + if (dirty & /*removeProperty, properties, save, options*/ 23) { + each_value = /*properties*/ ctx[0]; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$3(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block$3(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(table, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + + each_blocks.length = each_value.length; + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) detach(div1); + destroy_each(each_blocks, detaching); + mounted = false; + dispose(); + } + }; +} + +function instance$4($$self, $$props, $$invalidate) { + + const options = Object.keys(ProgressPropertyOptions).map(k => ProgressPropertyOptions[k]); + let { save } = $$props; + let { properties } = $$props; + + function addNewProperty() { + let newProp = { + name: "", + type: ProgressPropertyOptions.TaskTotal + }; + + $$invalidate(0, properties = [...properties, newProp]); + save(properties); + } + + function removeProperty(property) { + $$invalidate(0, properties = properties.filter(prop => prop !== property)); + save(properties); + } + + function input0_input_handler(each_value, property_index) { + each_value[property_index].name = this.value; + $$invalidate(0, properties); + $$invalidate(2, options); + } + + const change_handler = () => save(properties); + + function select_change_handler(each_value, property_index) { + each_value[property_index].type = select_value(this); + $$invalidate(0, properties); + $$invalidate(2, options); + } + + const change_handler_1 = () => save(properties); + const click_handler = property => removeProperty(property); + + $$self.$$set = $$props => { + if ("save" in $$props) $$invalidate(1, save = $$props.save); + if ("properties" in $$props) $$invalidate(0, properties = $$props.properties); + }; + + return [ + properties, + save, + options, + addNewProperty, + removeProperty, + input0_input_handler, + change_handler, + select_change_handler, + change_handler_1, + click_handler + ]; +} + +class ProgressPropertiesModalContent extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-kqcr7b-style")) add_css$3(); + init(this, options, instance$4, create_fragment$4, safe_not_equal, { save: 1, properties: 0 }); + } +} + +/* src/Modals/AutoPropertiesSettingModal/AutoPropertiesModalContent.svelte generated by Svelte v3.38.3 */ + +function add_css$2() { + var style = element("style"); + style.id = "svelte-kqcr7b-style"; + style.textContent = ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}"; + append(document.head, style); +} + +function get_each_context$2(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[13] = list[i]; + child_ctx[14] = list; + child_ctx[15] = i; + return child_ctx; +} + +function get_each_context_1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[16] = list[i]; + child_ctx[17] = list; + child_ctx[18] = i; + return child_ctx; +} + +// (50:20) {#each property.choices as choice, i} +function create_each_block_1(ctx) { + let div; + let input0; + let t0; + let input1; + let t1; + let mounted; + let dispose; + + function input0_input_handler() { + /*input0_input_handler*/ ctx[10].call(input0, /*each_value_1*/ ctx[17], /*i*/ ctx[18]); + } + + function click_handler_1() { + return /*click_handler_1*/ ctx[11](/*property*/ ctx[13], /*i*/ ctx[18]); + } + + return { + c() { + div = element("div"); + input0 = element("input"); + t0 = space(); + input1 = element("input"); + t1 = space(); + attr(input0, "type", "text"); + attr(input1, "class", "not-a-button"); + attr(input1, "type", "button"); + input1.value = "❌"; + set_style(div, "display", "block"); + }, + m(target, anchor) { + insert(target, div, anchor); + append(div, input0); + set_input_value(input0, /*choice*/ ctx[16]); + append(div, t0); + append(div, input1); + append(div, t1); + + if (!mounted) { + dispose = [ + listen(input0, "change", /*change_handler_1*/ ctx[9]), + listen(input0, "input", input0_input_handler), + listen(input1, "click", click_handler_1) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (dirty & /*autoProperties*/ 1 && input0.value !== /*choice*/ ctx[16]) { + set_input_value(input0, /*choice*/ ctx[16]); + } + }, + d(detaching) { + if (detaching) detach(div); + mounted = false; + run_all(dispose); + } + }; +} + +// (41:8) {#each autoProperties as property} +function create_each_block$2(ctx) { + let tr; + let td0; + let input0; + let t0; + let td1; + let input1; + let t1; + let td2; + let t2; + let td3; + let div; + let input2; + let t3; + let br; + let mounted; + let dispose; + + function click_handler() { + return /*click_handler*/ ctx[6](/*property*/ ctx[13]); + } + + function input1_input_handler() { + /*input1_input_handler*/ ctx[8].call(input1, /*each_value*/ ctx[14], /*property_index*/ ctx[15]); + } + + let each_value_1 = /*property*/ ctx[13].choices; + let each_blocks = []; + + for (let i = 0; i < each_value_1.length; i += 1) { + each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); + } + + function click_handler_2() { + return /*click_handler_2*/ ctx[12](/*property*/ ctx[13]); + } + + return { + c() { + tr = element("tr"); + td0 = element("td"); + input0 = element("input"); + t0 = space(); + td1 = element("td"); + input1 = element("input"); + t1 = space(); + td2 = element("td"); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t2 = space(); + td3 = element("td"); + div = element("div"); + input2 = element("input"); + t3 = space(); + br = element("br"); + attr(input0, "type", "button"); + input0.value = "❌"; + attr(input0, "class", "not-a-button"); + attr(input1, "type", "text"); + attr(input1, "placeholder", "Property name"); + attr(input2, "class", "not-a-button"); + attr(input2, "type", "button"); + input2.value = "➕"; + set_style(div, "width", "50%"); + set_style(div, "text-align", "center"); + set_style(div, "margin", "5px auto auto"); + }, + m(target, anchor) { + insert(target, tr, anchor); + append(tr, td0); + append(td0, input0); + append(tr, t0); + append(tr, td1); + append(td1, input1); + set_input_value(input1, /*property*/ ctx[13].name); + append(tr, t1); + append(tr, td2); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(td2, null); + } + + append(tr, t2); + append(tr, td3); + append(td3, div); + append(div, input2); + insert(target, t3, anchor); + insert(target, br, anchor); + + if (!mounted) { + dispose = [ + listen(input0, "click", click_handler), + listen(input1, "change", /*change_handler*/ ctx[7]), + listen(input1, "input", input1_input_handler), + listen(input2, "click", click_handler_2) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (dirty & /*autoProperties*/ 1 && input1.value !== /*property*/ ctx[13].name) { + set_input_value(input1, /*property*/ ctx[13].name); + } + + if (dirty & /*removeChoice, autoProperties, save*/ 19) { + each_value_1 = /*property*/ ctx[13].choices; + let i; + + for (i = 0; i < each_value_1.length; i += 1) { + const child_ctx = get_each_context_1(ctx, each_value_1, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block_1(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(td2, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + + each_blocks.length = each_value_1.length; + } + }, + d(detaching) { + if (detaching) detach(tr); + destroy_each(each_blocks, detaching); + if (detaching) detach(t3); + if (detaching) detach(br); + mounted = false; + run_all(dispose); + } + }; +} + +function create_fragment$3(ctx) { + let div1; + let table; + let thead; + let t4; + let t5; + let div0; + let button; + let mounted; + let dispose; + let each_value = /*autoProperties*/ ctx[0]; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i)); + } + + return { + c() { + div1 = element("div"); + table = element("table"); + thead = element("thead"); + + thead.innerHTML = ` + Name + Values`; + + t4 = space(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t5 = space(); + div0 = element("div"); + button = element("button"); + button.textContent = "Add"; + attr(button, "class", "mod-cta svelte-kqcr7b"); + attr(div0, "class", "buttonContainer svelte-kqcr7b"); + attr(div1, "class", "centerSettingContent"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, table); + append(table, thead); + append(table, t4); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(table, null); + } + + append(div1, t5); + append(div1, div0); + append(div0, button); + + if (!mounted) { + dispose = listen(button, "click", /*addNewProperty*/ ctx[2]); + mounted = true; + } + }, + p(ctx, [dirty]) { + if (dirty & /*addChoice, autoProperties, removeChoice, save, removeProperty*/ 59) { + each_value = /*autoProperties*/ ctx[0]; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$2(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block$2(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(table, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + + each_blocks.length = each_value.length; + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) detach(div1); + destroy_each(each_blocks, detaching); + mounted = false; + dispose(); + } + }; +} + +function instance$3($$self, $$props, $$invalidate) { + + let { save } = $$props; + let { autoProperties = [] } = $$props; + + function addNewProperty() { + let newProp = { name: "", choices: [""] }; + if (typeof autoProperties[Symbol.iterator] !== "function") $$invalidate(0, autoProperties = [newProp]); else $$invalidate(0, autoProperties = [...autoProperties, newProp]); + save(autoProperties); + } + + function removeProperty(property) { + $$invalidate(0, autoProperties = autoProperties.filter(ac => ac !== property)); + save(autoProperties); + } + + function removeChoice(property, i) { + property.choices.splice(i, 1); + $$invalidate(0, autoProperties); // Svelte + save(autoProperties); + } + + function addChoice(property) { + $$invalidate(0, autoProperties = autoProperties.map(prop => { + if (prop === property) { + prop.choices.push(""); + } + + return prop; + })); + + save(autoProperties); + } + + const click_handler = property => removeProperty(property); + const change_handler = () => save(autoProperties); + + function input1_input_handler(each_value, property_index) { + each_value[property_index].name = this.value; + $$invalidate(0, autoProperties); + } + + const change_handler_1 = () => save(autoProperties); + + function input0_input_handler(each_value_1, i) { + each_value_1[i] = this.value; + $$invalidate(0, autoProperties); + } + + const click_handler_1 = (property, i) => removeChoice(property, i); + const click_handler_2 = property => addChoice(property); + + $$self.$$set = $$props => { + if ("save" in $$props) $$invalidate(1, save = $$props.save); + if ("autoProperties" in $$props) $$invalidate(0, autoProperties = $$props.autoProperties); + }; + + return [ + autoProperties, + save, + addNewProperty, + removeProperty, + removeChoice, + addChoice, + click_handler, + change_handler, + input1_input_handler, + change_handler_1, + input0_input_handler, + click_handler_1, + click_handler_2 + ]; +} + +class AutoPropertiesModalContent extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-kqcr7b-style")) add_css$2(); + init(this, options, instance$3, create_fragment$3, safe_not_equal, { save: 1, autoProperties: 0 }); + } +} + +var top = 'top'; +var bottom = 'bottom'; +var right = 'right'; +var left = 'left'; +var auto = 'auto'; +var basePlacements = [top, bottom, right, left]; +var start = 'start'; +var end = 'end'; +var clippingParents = 'clippingParents'; +var viewport = 'viewport'; +var popper = 'popper'; +var reference = 'reference'; +var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); +}, []); +var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); +}, []); // modifiers that need to read the DOM + +var beforeRead = 'beforeRead'; +var read = 'read'; +var afterRead = 'afterRead'; // pure-logic modifiers + +var beforeMain = 'beforeMain'; +var main = 'main'; +var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) + +var beforeWrite = 'beforeWrite'; +var write = 'write'; +var afterWrite = 'afterWrite'; +var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + +function getNodeName(element) { + return element ? (element.nodeName || '').toLowerCase() : null; +} + +function getWindow(node) { + if (node == null) { + return window; + } + + if (node.toString() !== '[object Window]') { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + + return node; +} + +function isElement(node) { + var OwnElement = getWindow(node).Element; + return node instanceof OwnElement || node instanceof Element; +} + +function isHTMLElement(node) { + var OwnElement = getWindow(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; +} + +function isShadowRoot(node) { + // IE 11 has no ShadowRoot + if (typeof ShadowRoot === 'undefined') { + return false; + } + + var OwnElement = getWindow(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; +} + +// and applies them to the HTMLElements such as popper and arrow + +function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function (name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } // Flow doesn't support to extend this property, but it's the most + // effective way to apply styles to an HTMLElement + // $FlowFixMe[cannot-write] + + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (name) { + var value = attributes[name]; + + if (value === false) { + element.removeAttribute(name); + } else { + element.setAttribute(name, value === true ? '' : value); + } + }); + }); +} + +function effect$2(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: '0', + top: '0', + margin: '0' + }, + arrow: { + position: 'absolute' + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + + return function () { + Object.keys(state.elements).forEach(function (name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them + + var style = styleProperties.reduce(function (style, property) { + style[property] = ''; + return style; + }, {}); // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (attribute) { + element.removeAttribute(attribute); + }); + }); + }; +} // eslint-disable-next-line import/no-unused-modules + + +var applyStyles$1 = { + name: 'applyStyles', + enabled: true, + phase: 'write', + fn: applyStyles, + effect: effect$2, + requires: ['computeStyles'] +}; + +function getBasePlacement(placement) { + return placement.split('-')[0]; +} + +function getBoundingClientRect(element) { + var rect = element.getBoundingClientRect(); + return { + width: rect.width, + height: rect.height, + top: rect.top, + right: rect.right, + bottom: rect.bottom, + left: rect.left, + x: rect.left, + y: rect.top + }; +} + +// means it doesn't take into account transforms. + +function getLayoutRect(element) { + var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. + // Fixes https://github.com/popperjs/popper-core/issues/1223 + + var width = element.offsetWidth; + var height = element.offsetHeight; + + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + + return { + x: element.offsetLeft, + y: element.offsetTop, + width: width, + height: height + }; +} + +function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method + + if (parent.contains(child)) { + return true; + } // then fallback to custom implementation with Shadow DOM support + else if (rootNode && isShadowRoot(rootNode)) { + var next = child; + + do { + if (next && parent.isSameNode(next)) { + return true; + } // $FlowFixMe[prop-missing]: need a better way to handle this... + + + next = next.parentNode || next.host; + } while (next); + } // Give up, the result is false + + + return false; +} + +function getComputedStyle(element) { + return getWindow(element).getComputedStyle(element); +} + +function isTableElement(element) { + return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; +} + +function getDocumentElement(element) { + // $FlowFixMe[incompatible-return]: assume body is always available + return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] + element.document) || window.document).documentElement; +} + +function getParentNode(element) { + if (getNodeName(element) === 'html') { + return element; + } + + return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || ( // DOM Element detected + isShadowRoot(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + getDocumentElement(element) // fallback + + ); +} + +function getTrueOffsetParent(element) { + if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 + getComputedStyle(element).position === 'fixed') { + return null; + } + + return element.offsetParent; +} // `.offsetParent` reports `null` for fixed elements, while absolute elements +// return the containing block + + +function getContainingBlock(element) { + var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1; + var isIE = navigator.userAgent.indexOf('Trident') !== -1; + + if (isIE && isHTMLElement(element)) { + // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport + var elementCss = getComputedStyle(element); + + if (elementCss.position === 'fixed') { + return null; + } + } + + var currentNode = getParentNode(element); + + while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { + var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that + // create a containing block. + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + + if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + + return null; +} // Gets the closest ancestor positioned element. Handles some edge cases, +// such as table ancestors and cross browser bugs. + + +function getOffsetParent(element) { + var window = getWindow(element); + var offsetParent = getTrueOffsetParent(element); + + while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') { + offsetParent = getTrueOffsetParent(offsetParent); + } + + if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) { + return window; + } + + return offsetParent || getContainingBlock(element) || window; +} + +function getMainAxisFromPlacement(placement) { + return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; +} + +var max = Math.max; +var min = Math.min; +var round = Math.round; + +function within(min$1, value, max$1) { + return max(min$1, min(value, max$1)); +} + +function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; +} + +function mergePaddingObject(paddingObject) { + return Object.assign({}, getFreshSideObject(), paddingObject); +} + +function expandToHashMap(value, keys) { + return keys.reduce(function (hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); +} + +var toPaddingObject = function toPaddingObject(padding, state) { + padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); +}; + +function arrow(_ref) { + var _state$modifiersData$; + + var state = _ref.state, + name = _ref.name, + options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets = state.modifiersData.popperOffsets; + var basePlacement = getBasePlacement(state.placement); + var axis = getMainAxisFromPlacement(basePlacement); + var isVertical = [left, right].indexOf(basePlacement) >= 0; + var len = isVertical ? 'height' : 'width'; + + if (!arrowElement || !popperOffsets) { + return; + } + + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = getLayoutRect(arrowElement); + var minProp = axis === 'y' ? top : left; + var maxProp = axis === 'y' ? bottom : right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; + var startDiff = popperOffsets[axis] - state.rects.reference[axis]; + var arrowOffsetParent = getOffsetParent(arrowElement); + var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is + // outside of the popper bounds + + var min = paddingObject[minProp]; + var max = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset = within(min, center, max); // Prevents breaking syntax highlighting... + + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); +} + +function effect$1(_ref2) { + var state = _ref2.state, + options = _ref2.options; + var _options$element = options.element, + arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; + + if (arrowElement == null) { + return; + } // CSS selector + + + if (typeof arrowElement === 'string') { + arrowElement = state.elements.popper.querySelector(arrowElement); + + if (!arrowElement) { + return; + } + } + + if (process.env.NODE_ENV !== "production") { + if (!isHTMLElement(arrowElement)) { + console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); + } + } + + if (!contains(state.elements.popper, arrowElement)) { + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); + } + + return; + } + + state.elements.arrow = arrowElement; +} // eslint-disable-next-line import/no-unused-modules + + +var arrow$1 = { + name: 'arrow', + enabled: true, + phase: 'main', + fn: arrow, + effect: effect$1, + requires: ['popperOffsets'], + requiresIfExists: ['preventOverflow'] +}; + +var unsetSides = { + top: 'auto', + right: 'auto', + bottom: 'auto', + left: 'auto' +}; // Round the offsets to the nearest suitable subpixel based on the DPR. +// Zooming can change the DPR, but it seems to report a value that will +// cleanly divide the values into the appropriate subpixels. + +function roundOffsetsByDPR(_ref) { + var x = _ref.x, + y = _ref.y; + var win = window; + var dpr = win.devicePixelRatio || 1; + return { + x: round(round(x * dpr) / dpr) || 0, + y: round(round(y * dpr) / dpr) || 0 + }; +} + +function mapToStyles(_ref2) { + var _Object$assign2; + + var popper = _ref2.popper, + popperRect = _ref2.popperRect, + placement = _ref2.placement, + offsets = _ref2.offsets, + position = _ref2.position, + gpuAcceleration = _ref2.gpuAcceleration, + adaptive = _ref2.adaptive, + roundOffsets = _ref2.roundOffsets; + + var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets, + _ref3$x = _ref3.x, + x = _ref3$x === void 0 ? 0 : _ref3$x, + _ref3$y = _ref3.y, + y = _ref3$y === void 0 ? 0 : _ref3$y; + + var hasX = offsets.hasOwnProperty('x'); + var hasY = offsets.hasOwnProperty('y'); + var sideX = left; + var sideY = top; + var win = window; + + if (adaptive) { + var offsetParent = getOffsetParent(popper); + var heightProp = 'clientHeight'; + var widthProp = 'clientWidth'; + + if (offsetParent === getWindow(popper)) { + offsetParent = getDocumentElement(popper); + + if (getComputedStyle(offsetParent).position !== 'static') { + heightProp = 'scrollHeight'; + widthProp = 'scrollWidth'; + } + } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it + + + offsetParent = offsetParent; + + if (placement === top) { + sideY = bottom; // $FlowFixMe[prop-missing] + + y -= offsetParent[heightProp] - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + + if (placement === left) { + sideX = right; // $FlowFixMe[prop-missing] + + x -= offsetParent[widthProp] - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + + var commonStyles = Object.assign({ + position: position + }, adaptive && unsetSides); + + if (gpuAcceleration) { + var _Object$assign; + + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); +} + +function computeStyles(_ref4) { + var state = _ref4.state, + options = _ref4.options; + var _options$gpuAccelerat = options.gpuAcceleration, + gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, + _options$adaptive = options.adaptive, + adaptive = _options$adaptive === void 0 ? true : _options$adaptive, + _options$roundOffsets = options.roundOffsets, + roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + + if (process.env.NODE_ENV !== "production") { + var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || ''; + + if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { + return transitionProperty.indexOf(property) >= 0; + })) { + console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); + } + } + + var commonStyles = { + placement: getBasePlacement(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration: gpuAcceleration + }; + + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive: adaptive, + roundOffsets: roundOffsets + }))); + } + + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: 'absolute', + adaptive: false, + roundOffsets: roundOffsets + }))); + } + + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-placement': state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var computeStyles$1 = { + name: 'computeStyles', + enabled: true, + phase: 'beforeWrite', + fn: computeStyles, + data: {} +}; + +var passive = { + passive: true +}; + +function effect(_ref) { + var state = _ref.state, + instance = _ref.instance, + options = _ref.options; + var _options$scroll = options.scroll, + scroll = _options$scroll === void 0 ? true : _options$scroll, + _options$resize = options.resize, + resize = _options$resize === void 0 ? true : _options$resize; + var window = getWindow(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.addEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.addEventListener('resize', instance.update, passive); + } + + return function () { + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.removeEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.removeEventListener('resize', instance.update, passive); + } + }; +} // eslint-disable-next-line import/no-unused-modules + + +var eventListeners = { + name: 'eventListeners', + enabled: true, + phase: 'write', + fn: function fn() {}, + effect: effect, + data: {} +}; + +var hash$1 = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' +}; +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function (matched) { + return hash$1[matched]; + }); +} + +var hash = { + start: 'end', + end: 'start' +}; +function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function (matched) { + return hash[matched]; + }); +} + +function getWindowScroll(node) { + var win = getWindow(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft: scrollLeft, + scrollTop: scrollTop + }; +} + +function getWindowScrollBarX(element) { + // If has a CSS width greater than the viewport, then this will be + // incorrect for RTL. + // Popper 1 is broken in this case and never had a bug report so let's assume + // it's not an issue. I don't think anyone ever specifies width on + // anyway. + // Browsers where the left scrollbar doesn't cause an issue report `0` for + // this (e.g. Edge 2019, IE11, Safari) + return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; +} + +function getViewportRect(element) { + var win = getWindow(element); + var html = getDocumentElement(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper + // can be obscured underneath it. + // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even + // if it isn't open, so if this isn't available, the popper will be detected + // to overflow the bottom of the screen too early. + + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently) + // In Chrome, it returns a value very close to 0 (+/-) but contains rounding + // errors due to floating point numbers, so we need to check precision. + // Safari returns a number <= 0, usually < -1 when pinch-zoomed + // Feature detection fails in mobile emulation mode in Chrome. + // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < + // 0.001 + // Fallback here: "Not Safari" userAgent + + if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + + return { + width: width, + height: height, + x: x + getWindowScrollBarX(element), + y: y + }; +} + +// of the `` and `` rect bounds if horizontally scrollable + +function getDocumentRect(element) { + var _element$ownerDocumen; + + var html = getDocumentElement(element); + var winScroll = getWindowScroll(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + getWindowScrollBarX(element); + var y = -winScroll.scrollTop; + + if (getComputedStyle(body || html).direction === 'rtl') { + x += max(html.clientWidth, body ? body.clientWidth : 0) - width; + } + + return { + width: width, + height: height, + x: x, + y: y + }; +} + +function isScrollParent(element) { + // Firefox wants us to check `-x` and `-y` variations as well + var _getComputedStyle = getComputedStyle(element), + overflow = _getComputedStyle.overflow, + overflowX = _getComputedStyle.overflowX, + overflowY = _getComputedStyle.overflowY; + + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); +} + +function getScrollParent(node) { + if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { + // $FlowFixMe[incompatible-return]: assume body is always available + return node.ownerDocument.body; + } + + if (isHTMLElement(node) && isScrollParent(node)) { + return node; + } + + return getScrollParent(getParentNode(node)); +} + +/* +given a DOM element, return the list of all scroll parents, up the list of ancesors +until we get to the top window object. This list is what we attach scroll listeners +to, because if any of these parent elements scroll, we'll need to re-calculate the +reference element's position. +*/ + +function listScrollParents(element, list) { + var _element$ownerDocumen; + + if (list === void 0) { + list = []; + } + + var scrollParent = getScrollParent(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = getWindow(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here + updatedList.concat(listScrollParents(getParentNode(target))); +} + +function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); +} + +function getInnerBoundingClientRect(element) { + var rect = getBoundingClientRect(element); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; +} + +function getClientRectFromMixedType(element, clippingParent) { + return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); +} // A "clipping parent" is an overflowable container with the characteristic of +// clipping (or hiding) overflowing elements with a position different from +// `initial` + + +function getClippingParents(element) { + var clippingParents = listScrollParents(getParentNode(element)); + var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0; + var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; + + if (!isElement(clipperElement)) { + return []; + } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 + + + return clippingParents.filter(function (clippingParent) { + return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; + }); +} // Gets the maximum area that the element is visible in due to any number of +// clipping parents + + +function getClippingRect(element, boundary, rootBoundary) { + var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); + var clippingParents = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents[0]; + var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; +} + +function getVariation(placement) { + return placement.split('-')[1]; +} + +function computeOffsets(_ref) { + var reference = _ref.reference, + element = _ref.element, + placement = _ref.placement; + var basePlacement = placement ? getBasePlacement(placement) : null; + var variation = placement ? getVariation(placement) : null; + var commonX = reference.x + reference.width / 2 - element.width / 2; + var commonY = reference.y + reference.height / 2 - element.height / 2; + var offsets; + + switch (basePlacement) { + case top: + offsets = { + x: commonX, + y: reference.y - element.height + }; + break; + + case bottom: + offsets = { + x: commonX, + y: reference.y + reference.height + }; + break; + + case right: + offsets = { + x: reference.x + reference.width, + y: commonY + }; + break; + + case left: + offsets = { + x: reference.x - element.width, + y: commonY + }; + break; + + default: + offsets = { + x: reference.x, + y: reference.y + }; + } + + var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; + + if (mainAxis != null) { + var len = mainAxis === 'y' ? 'height' : 'width'; + + switch (variation) { + case start: + offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); + break; + + case end: + offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); + break; + } + } + + return offsets; +} + +function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$placement = _options.placement, + placement = _options$placement === void 0 ? state.placement : _options$placement, + _options$boundary = _options.boundary, + boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, + _options$rootBoundary = _options.rootBoundary, + rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, + _options$elementConte = _options.elementContext, + elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, + _options$altBoundary = _options.altBoundary, + altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, + _options$padding = _options.padding, + padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); + var altContext = elementContext === popper ? reference : popper; + var referenceElement = state.elements.reference; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); + var referenceClientRect = getBoundingClientRect(referenceElement); + var popperOffsets = computeOffsets({ + reference: referenceClientRect, + element: popperRect, + strategy: 'absolute', + placement: placement + }); + var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); + var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect + // 0 or negative = within the clipping rect + + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element + + if (elementContext === popper && offsetData) { + var offset = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function (key) { + var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; + overflowOffsets[key] += offset[axis] * multiply; + }); + } + + return overflowOffsets; +} + +function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + placement = _options.placement, + boundary = _options.boundary, + rootBoundary = _options.rootBoundary, + padding = _options.padding, + flipVariations = _options.flipVariations, + _options$allowedAutoP = _options.allowedAutoPlacements, + allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; + var variation = getVariation(placement); + var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { + return getVariation(placement) === variation; + }) : basePlacements; + var allowedPlacements = placements$1.filter(function (placement) { + return allowedAutoPlacements.indexOf(placement) >= 0; + }); + + if (allowedPlacements.length === 0) { + allowedPlacements = placements$1; + + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); + } + } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... + + + var overflows = allowedPlacements.reduce(function (acc, placement) { + acc[placement] = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding + })[getBasePlacement(placement)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function (a, b) { + return overflows[a] - overflows[b]; + }); +} + +function getExpandedFallbackPlacements(placement) { + if (getBasePlacement(placement) === auto) { + return []; + } + + var oppositePlacement = getOppositePlacement(placement); + return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; +} + +function flip(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + + if (state.modifiersData[name]._skip) { + return; + } + + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, + specifiedFallbackPlacements = options.fallbackPlacements, + padding = options.padding, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + _options$flipVariatio = options.flipVariations, + flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, + allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = getBasePlacement(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { + return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + flipVariations: flipVariations, + allowedAutoPlacements: allowedAutoPlacements + }) : placement); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements[0]; + + for (var i = 0; i < placements.length; i++) { + var placement = placements[i]; + + var _basePlacement = getBasePlacement(placement); + + var isStartVariation = getVariation(placement) === start; + var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? 'width' : 'height'; + var overflow = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + altBoundary: altBoundary, + padding: padding + }); + var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; + + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = getOppositePlacement(mainVariationSide); + } + + var altVariationSide = getOppositePlacement(mainVariationSide); + var checks = []; + + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + + if (checks.every(function (check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + + checksMap.set(placement, checks); + } + + if (makeFallbackChecks) { + // `2` may be desired in some cases – research later + var numberOfChecks = flipVariations ? 3 : 1; + + var _loop = function _loop(_i) { + var fittingPlacement = placements.find(function (placement) { + var checks = checksMap.get(placement); + + if (checks) { + return checks.slice(0, _i).every(function (check) { + return check; + }); + } + }); + + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + + if (_ret === "break") break; + } + } + + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } +} // eslint-disable-next-line import/no-unused-modules + + +var flip$1 = { + name: 'flip', + enabled: true, + phase: 'main', + fn: flip, + requiresIfExists: ['offset'], + data: { + _skip: false + } +}; + +function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; +} + +function isAnySideFullyClipped(overflow) { + return [top, right, bottom, left].some(function (side) { + return overflow[side] >= 0; + }); +} + +function hide(_ref) { + var state = _ref.state, + name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = detectOverflow(state, { + elementContext: 'reference' + }); + var popperAltOverflow = detectOverflow(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets: referenceClippingOffsets, + popperEscapeOffsets: popperEscapeOffsets, + isReferenceHidden: isReferenceHidden, + hasPopperEscaped: hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-reference-hidden': isReferenceHidden, + 'data-popper-escaped': hasPopperEscaped + }); +} // eslint-disable-next-line import/no-unused-modules + + +var hide$1 = { + name: 'hide', + enabled: true, + phase: 'main', + requiresIfExists: ['preventOverflow'], + fn: hide +}; + +function distanceAndSkiddingToXY(placement, rects, offset) { + var basePlacement = getBasePlacement(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + + var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { + placement: placement + })) : offset, + skidding = _ref[0], + distance = _ref[1]; + + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} + +function offset(_ref2) { + var state = _ref2.state, + options = _ref2.options, + name = _ref2.name; + var _options$offset = options.offset, + offset = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function (acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); + return acc; + }, {}); + var _data$state$placement = data[state.placement], + x = _data$state$placement.x, + y = _data$state$placement.y; + + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var offset$1 = { + name: 'offset', + enabled: true, + phase: 'main', + requires: ['popperOffsets'], + fn: offset +}; + +function popperOffsets(_ref) { + var state = _ref.state, + name = _ref.name; + // Offsets are the actual position the popper needs to have to be + // properly positioned near its reference element + // This is the most basic placement, and will be adjusted by + // the modifiers in the next step + state.modifiersData[name] = computeOffsets({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: 'absolute', + placement: state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var popperOffsets$1 = { + name: 'popperOffsets', + enabled: true, + phase: 'read', + fn: popperOffsets, + data: {} +}; + +function getAltAxis(axis) { + return axis === 'x' ? 'y' : 'x'; +} + +function preventOverflow(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + padding = options.padding, + _options$tether = options.tether, + tether = _options$tether === void 0 ? true : _options$tether, + _options$tetherOffset = options.tetherOffset, + tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = detectOverflow(state, { + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + altBoundary: altBoundary + }); + var basePlacement = getBasePlacement(state.placement); + var variation = getVariation(state.placement); + var isBasePlacement = !variation; + var mainAxis = getMainAxisFromPlacement(basePlacement); + var altAxis = getAltAxis(mainAxis); + var popperOffsets = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var data = { + x: 0, + y: 0 + }; + + if (!popperOffsets) { + return; + } + + if (checkMainAxis || checkAltAxis) { + var mainSide = mainAxis === 'y' ? top : left; + var altSide = mainAxis === 'y' ? bottom : right; + var len = mainAxis === 'y' ? 'height' : 'width'; + var offset = popperOffsets[mainAxis]; + var min$1 = popperOffsets[mainAxis] + overflow[mainSide]; + var max$1 = popperOffsets[mainAxis] - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go + // outside the reference bounds + + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want + // to include its full size in the calculation. If the reference is small + // and near the edge of a boundary, the popper can overflow even if the + // reference is not overflowing as well (e.g. virtual elements with no + // width or height) + + var arrowLen = within(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue; + var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0; + var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset; + var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue; + + if (checkMainAxis) { + var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); + popperOffsets[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset; + } + + if (checkAltAxis) { + var _mainSide = mainAxis === 'x' ? top : left; + + var _altSide = mainAxis === 'x' ? bottom : right; + + var _offset = popperOffsets[altAxis]; + + var _min = _offset + overflow[_mainSide]; + + var _max = _offset - overflow[_altSide]; + + var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max); + + popperOffsets[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var preventOverflow$1 = { + name: 'preventOverflow', + enabled: true, + phase: 'main', + fn: preventOverflow, + requiresIfExists: ['offset'] +}; + +function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; +} + +function getNodeScroll(node) { + if (node === getWindow(node) || !isHTMLElement(node)) { + return getWindowScroll(node); + } else { + return getHTMLElementScroll(node); + } +} + +// Composite means it takes into account transforms as well as layout. + +function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement); + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 + isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +} + +function order(modifiers) { + var map = new Map(); + var visited = new Set(); + var result = []; + modifiers.forEach(function (modifier) { + map.set(modifier.name, modifier); + }); // On visiting object, check for its dependencies and visit them recursively + + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function (dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + + modifiers.forEach(function (modifier) { + if (!visited.has(modifier.name)) { + // check for visited object + sort(modifier); + } + }); + return result; +} + +function orderModifiers(modifiers) { + // order based on dependencies + var orderedModifiers = order(modifiers); // order based on phase + + return modifierPhases.reduce(function (acc, phase) { + return acc.concat(orderedModifiers.filter(function (modifier) { + return modifier.phase === phase; + })); + }, []); +} + +function debounce(fn) { + var pending; + return function () { + if (!pending) { + pending = new Promise(function (resolve) { + Promise.resolve().then(function () { + pending = undefined; + resolve(fn()); + }); + }); + } + + return pending; + }; +} + +function format(str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return [].concat(args).reduce(function (p, c) { + return p.replace(/%s/, c); + }, str); +} + +var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; +var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; +var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; +function validateModifiers(modifiers) { + modifiers.forEach(function (modifier) { + Object.keys(modifier).forEach(function (key) { + switch (key) { + case 'name': + if (typeof modifier.name !== 'string') { + console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); + } + + break; + + case 'enabled': + if (typeof modifier.enabled !== 'boolean') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); + } + + case 'phase': + if (modifierPhases.indexOf(modifier.phase) < 0) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); + } + + break; + + case 'fn': + if (typeof modifier.fn !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'effect': + if (typeof modifier.effect !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'requires': + if (!Array.isArray(modifier.requires)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); + } + + break; + + case 'requiresIfExists': + if (!Array.isArray(modifier.requiresIfExists)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); + } + + break; + + case 'options': + case 'data': + break; + + default: + console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { + return "\"" + s + "\""; + }).join(', ') + "; but \"" + key + "\" was provided."); + } + + modifier.requires && modifier.requires.forEach(function (requirement) { + if (modifiers.find(function (mod) { + return mod.name === requirement; + }) == null) { + console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); + } + }); + }); + }); +} + +function uniqueBy(arr, fn) { + var identifiers = new Set(); + return arr.filter(function (item) { + var identifier = fn(item); + + if (!identifiers.has(identifier)) { + identifiers.add(identifier); + return true; + } + }); +} + +function mergeByName(modifiers) { + var merged = modifiers.reduce(function (merged, current) { + var existing = merged[current.name]; + merged[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged; + }, {}); // IE11 does not support Object.values + + return Object.keys(merged).map(function (key) { + return merged[key]; + }); +} + +var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; +var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; +var DEFAULT_OPTIONS = { + placement: 'bottom', + modifiers: [], + strategy: 'absolute' +}; + +function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return !args.some(function (element) { + return !(element && typeof element.getBoundingClientRect === 'function'); + }); +} + +function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + + var _generatorOptions = generatorOptions, + _generatorOptions$def = _generatorOptions.defaultModifiers, + defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, + _generatorOptions$def2 = _generatorOptions.defaultOptions, + defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper(reference, popper, options) { + if (options === void 0) { + options = defaultOptions; + } + + var state = { + placement: 'bottom', + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), + modifiersData: {}, + elements: { + reference: reference, + popper: popper + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state: state, + setOptions: function setOptions(options) { + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions, state.options, options); + state.scrollParents = { + reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], + popper: listScrollParents(popper) + }; // Orders the modifiers based on their dependencies and `phase` + // properties + + var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers + + state.orderedModifiers = orderedModifiers.filter(function (m) { + return m.enabled; + }); // Validate the provided modifiers so that the consumer will get warned + // if one of the modifiers is invalid for any reason + + if (process.env.NODE_ENV !== "production") { + var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) { + var name = _ref.name; + return name; + }); + validateModifiers(modifiers); + + if (getBasePlacement(state.options.placement) === auto) { + var flipModifier = state.orderedModifiers.find(function (_ref2) { + var name = _ref2.name; + return name === 'flip'; + }); + + if (!flipModifier) { + console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); + } + } + + var _getComputedStyle = getComputedStyle(popper), + marginTop = _getComputedStyle.marginTop, + marginRight = _getComputedStyle.marginRight, + marginBottom = _getComputedStyle.marginBottom, + marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can + // cause bugs with positioning, so we'll warn the consumer + + + if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { + return parseFloat(margin); + })) { + console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); + } + } + + runModifierEffects(); + return instance.update(); + }, + // Sync update – it will always be executed, even if not necessary. This + // is useful for low frequency updates where sync behavior simplifies the + // logic. + // For high frequency updates (e.g. `resize` and `scroll` events), always + // prefer the async Popper#update method + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + + var _state$elements = state.elements, + reference = _state$elements.reference, + popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements + // anymore + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return; + } // Store the reference and popper rects to be read by modifiers + + + state.rects = { + reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), + popper: getLayoutRect(popper) + }; // Modifiers have the ability to reset the current update cycle. The + // most common use case for this is the `flip` modifier changing the + // placement, which then needs to re-run all the modifiers, because the + // logic was previously ran for the previous placement and is therefore + // stale/incorrect + + state.reset = false; + state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier + // is filled with the initial data specified by the modifier. This means + // it doesn't persist and is fresh on each update. + // To ensure persistent data, use `${name}#persistent` + + state.orderedModifiers.forEach(function (modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + var __debug_loops__ = 0; + + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (process.env.NODE_ENV !== "production") { + __debug_loops__ += 1; + + if (__debug_loops__ > 100) { + console.error(INFINITE_LOOP_ERROR); + break; + } + } + + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + + var _state$orderedModifie = state.orderedModifiers[index], + fn = _state$orderedModifie.fn, + _state$orderedModifie2 = _state$orderedModifie.options, + _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, + name = _state$orderedModifie.name; + + if (typeof fn === 'function') { + state = fn({ + state: state, + options: _options, + name: name, + instance: instance + }) || state; + } + } + }, + // Async and optimistically optimized update – it will not be executed if + // not necessary (debounced to run at most once-per-tick) + update: debounce(function () { + return new Promise(function (resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return instance; + } + + instance.setOptions(options).then(function (state) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state); + } + }); // Modifiers have the ability to execute arbitrary code before the first + // update cycle runs. They will be executed in the same order as the update + // cycle. This is useful when a modifier adds some persistent data that + // other modifiers need to use, but the modifier is run after the dependent + // one. + + function runModifierEffects() { + state.orderedModifiers.forEach(function (_ref3) { + var name = _ref3.name, + _ref3$options = _ref3.options, + options = _ref3$options === void 0 ? {} : _ref3$options, + effect = _ref3.effect; + + if (typeof effect === 'function') { + var cleanupFn = effect({ + state: state, + name: name, + instance: instance, + options: options + }); + + var noopFn = function noopFn() {}; + + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + + function cleanupModifierEffects() { + effectCleanupFns.forEach(function (fn) { + return fn(); + }); + effectCleanupFns = []; + } + + return instance; + }; +} + +var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; +var createPopper = /*#__PURE__*/popperGenerator({ + defaultModifiers: defaultModifiers +}); // eslint-disable-next-line import/no-unused-modules + +// Sam stole all this from Liam's Periodic Notes Plugin: https://github.com/liamcain/obsidian-periodic-notes +const wrapAround = (value, size) => { + return ((value % size) + size) % size; +}; +class Suggest { + constructor(owner, containerEl, scope) { + this.owner = owner; + this.containerEl = containerEl; + containerEl.on("click", ".suggestion-item", this.onSuggestionClick.bind(this)); + containerEl.on("mousemove", ".suggestion-item", this.onSuggestionMouseover.bind(this)); + scope.register([], "ArrowUp", (event) => { + if (!event.isComposing) { + this.setSelectedItem(this.selectedItem - 1, true); + return false; + } + }); + scope.register([], "ArrowDown", (event) => { + if (!event.isComposing) { + this.setSelectedItem(this.selectedItem + 1, true); + return false; + } + }); + scope.register([], "Enter", (event) => { + if (!event.isComposing) { + this.useSelectedItem(event); + return false; + } + }); + } + onSuggestionClick(event, el) { + event.preventDefault(); + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + this.useSelectedItem(event); + } + onSuggestionMouseover(_event, el) { + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + } + setSuggestions(values) { + this.containerEl.empty(); + const suggestionEls = []; + values.forEach((value) => { + const suggestionEl = this.containerEl.createDiv("suggestion-item"); + this.owner.renderSuggestion(value, suggestionEl); + suggestionEls.push(suggestionEl); + }); + this.values = values; + this.suggestions = suggestionEls; + this.setSelectedItem(0, false); + } + useSelectedItem(event) { + const currentValue = this.values[this.selectedItem]; + if (currentValue) { + this.owner.selectSuggestion(currentValue, event); + } + } + setSelectedItem(selectedIndex, scrollIntoView) { + const normalizedIndex = wrapAround(selectedIndex, this.suggestions.length); + const prevSelectedSuggestion = this.suggestions[this.selectedItem]; + const selectedSuggestion = this.suggestions[normalizedIndex]; + prevSelectedSuggestion === null || prevSelectedSuggestion === void 0 ? void 0 : prevSelectedSuggestion.removeClass("is-selected"); + selectedSuggestion === null || selectedSuggestion === void 0 ? void 0 : selectedSuggestion.addClass("is-selected"); + this.selectedItem = normalizedIndex; + if (scrollIntoView) { + selectedSuggestion.scrollIntoView(false); + } + } +} +class TextInputSuggest { + constructor(app, inputEl) { + this.app = app; + this.inputEl = inputEl; + this.scope = new obsidian.Scope(); + this.suggestEl = createDiv("suggestion-container"); + const suggestion = this.suggestEl.createDiv("suggestion"); + this.suggest = new Suggest(this, suggestion, this.scope); + this.scope.register([], "Escape", this.close.bind(this)); + this.inputEl.addEventListener("input", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("focus", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("blur", this.close.bind(this)); + this.suggestEl.on("mousedown", ".suggestion-container", (event) => { + event.preventDefault(); + }); + } + onInputChanged() { + const inputStr = this.inputEl.value; + const suggestions = this.getSuggestions(inputStr); + if (!suggestions) { + this.close(); + return; + } + if (suggestions.length > 0) { + this.suggest.setSuggestions(suggestions); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.open(this.app.dom.appContainerEl, this.inputEl); + } + else { + this.close(); + } + } + open(container, inputEl) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.app.keymap.pushScope(this.scope); + container.appendChild(this.suggestEl); + this.popper = createPopper(inputEl, this.suggestEl, { + placement: "bottom-start", + modifiers: [ + { + name: "sameWidth", + enabled: true, + fn: ({ state, instance }) => { + // Note: positioning needs to be calculated twice - + // first pass - positioning it according to the width of the popper + // second pass - position it with the width bound to the reference element + // we need to early exit to avoid an infinite loop + const targetWidth = `${state.rects.reference.width}px`; + if (state.styles.popper.width === targetWidth) { + return; + } + state.styles.popper.width = targetWidth; + instance.update(); + }, + phase: "beforeWrite", + requires: ["computeStyles"], + }, + ], + }); + } + close() { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.app.keymap.popScope(this.scope); + this.suggest.setSuggestions([]); + this.popper.destroy(); + this.suggestEl.detach(); + } +} + +class KanbanHelperSettingSuggester extends TextInputSuggest { + constructor(app, inputEl, boards) { + super(app, inputEl); + this.app = app; + this.inputEl = inputEl; + this.boards = boards; + } + getSuggestions(inputStr) { + const inputLowerCase = inputStr.toLowerCase(); + return this.boards.map(board => { + if (board.basename.toLowerCase().contains(inputLowerCase)) + return board; + }); + } + selectSuggestion(item) { + this.inputEl.value = item.basename; + this.inputEl.trigger("input"); + this.close(); + } + renderSuggestion(value, el) { + if (value) + el.setText(value.basename); + } +} + +/* src/Modals/KanbanHelperSetting/KanbanHelperSettingContent.svelte generated by Svelte v3.38.3 */ + +function add_css$1() { + var style = element("style"); + style.id = "svelte-kqcr7b-style"; + style.textContent = ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}"; + append(document.head, style); +} + +function get_each_context$1(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[15] = list[i]; + child_ctx[16] = list; + child_ctx[17] = i; + return child_ctx; +} + +// (51:8) {#each kanbanProperties as kanbanProperty, i} +function create_each_block$1(ctx) { + let tr; + let td0; + let input0; + let t0; + let td1; + let t1_value = /*kanbanProperty*/ ctx[15].boardName + ""; + let t1; + let t2; + let td2; + let input1; + let t3; + let td3; + let t4_value = /*getHeadingsInBoard*/ ctx[6](/*kanbanProperty*/ ctx[15].boardName) + ""; + let t4; + let t5; + let br; + let mounted; + let dispose; + + function click_handler() { + return /*click_handler*/ ctx[9](/*i*/ ctx[17]); + } + + function input1_input_handler() { + /*input1_input_handler*/ ctx[11].call(input1, /*each_value*/ ctx[16], /*i*/ ctx[17]); + } + + return { + c() { + tr = element("tr"); + td0 = element("td"); + input0 = element("input"); + t0 = space(); + td1 = element("td"); + t1 = text(t1_value); + t2 = space(); + td2 = element("td"); + input1 = element("input"); + t3 = space(); + td3 = element("td"); + t4 = text(t4_value); + t5 = space(); + br = element("br"); + attr(input0, "type", "button"); + input0.value = "❌"; + attr(input0, "class", "not-a-button"); + attr(input1, "type", "text"); + attr(input1, "placeholder", "Property name"); + }, + m(target, anchor) { + insert(target, tr, anchor); + append(tr, td0); + append(td0, input0); + append(tr, t0); + append(tr, td1); + append(td1, t1); + append(tr, t2); + append(tr, td2); + append(td2, input1); + set_input_value(input1, /*kanbanProperty*/ ctx[15].property); + append(tr, t3); + append(tr, td3); + append(td3, t4); + insert(target, t5, anchor); + insert(target, br, anchor); + + if (!mounted) { + dispose = [ + listen(input0, "click", click_handler), + listen(input1, "change", /*change_handler*/ ctx[10]), + listen(input1, "input", input1_input_handler) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + if (dirty & /*kanbanProperties*/ 1 && t1_value !== (t1_value = /*kanbanProperty*/ ctx[15].boardName + "")) set_data(t1, t1_value); + + if (dirty & /*kanbanProperties*/ 1 && input1.value !== /*kanbanProperty*/ ctx[15].property) { + set_input_value(input1, /*kanbanProperty*/ ctx[15].property); + } + + if (dirty & /*kanbanProperties*/ 1 && t4_value !== (t4_value = /*getHeadingsInBoard*/ ctx[6](/*kanbanProperty*/ ctx[15].boardName) + "")) set_data(t4, t4_value); + }, + d(detaching) { + if (detaching) detach(tr); + if (detaching) detach(t5); + if (detaching) detach(br); + mounted = false; + run_all(dispose); + } + }; +} + +function create_fragment$2(ctx) { + let div1; + let table; + let thead; + let t6; + let t7; + let input; + let t8; + let div0; + let button; + let mounted; + let dispose; + let each_value = /*kanbanProperties*/ ctx[0]; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i)); + } + + return { + c() { + div1 = element("div"); + table = element("table"); + thead = element("thead"); + + thead.innerHTML = ` + Board + Property in link + Possible values`; + + t6 = space(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t7 = space(); + input = element("input"); + t8 = space(); + div0 = element("div"); + button = element("button"); + button.textContent = "Add"; + set_style(table, "width", "100%"); + attr(input, "type", "text"); + attr(button, "class", "mod-cta svelte-kqcr7b"); + attr(div0, "class", "buttonContainer svelte-kqcr7b"); + attr(div1, "class", "centerSettingContent"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, table); + append(table, thead); + append(table, t6); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(table, null); + } + + append(div1, t7); + append(div1, input); + /*input_binding*/ ctx[12](input); + set_input_value(input, /*inputValue*/ ctx[3]); + append(div1, t8); + append(div1, div0); + append(div0, button); + + if (!mounted) { + dispose = [ + listen(input, "input", /*input_input_handler*/ ctx[13]), + listen(button, "click", /*addNewProperty*/ ctx[4]) + ]; + + mounted = true; + } + }, + p(ctx, [dirty]) { + if (dirty & /*getHeadingsInBoard, kanbanProperties, save, removeProperty*/ 99) { + each_value = /*kanbanProperties*/ ctx[0]; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context$1(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block$1(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(table, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + + each_blocks.length = each_value.length; + } + + if (dirty & /*inputValue*/ 8 && input.value !== /*inputValue*/ ctx[3]) { + set_input_value(input, /*inputValue*/ ctx[3]); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) detach(div1); + destroy_each(each_blocks, detaching); + /*input_binding*/ ctx[12](null); + mounted = false; + run_all(dispose); + } + }; +} + +function instance$2($$self, $$props, $$invalidate) { + + let { save } = $$props; + let { kanbanProperties = [] } = $$props; + let { boards } = $$props; + let { app } = $$props; + let suggestEl; + let inputValue; + + onMount(() => { + new KanbanHelperSettingSuggester(app, suggestEl, boards); + }); + + function addNewProperty() { + const board = boards.find(board => board.basename === inputValue); + const exists = !!kanbanProperties.find(kp => kp.boardName === board.basename); + if (!board || exists) return; + kanbanProperties.push({ property: "", boardName: board.basename }); + $$invalidate(0, kanbanProperties); // Svelte + save(kanbanProperties); + } + + function removeProperty(i) { + kanbanProperties.splice(i, 1); + $$invalidate(0, kanbanProperties); // Svelte + save(kanbanProperties); + } + + function getHeadingsInBoard(boardName) { + const file = boards.find(board => board.basename === boardName); + const headings = app.metadataCache.getFileCache(file).headings; + if (!headings) return ""; + return headings.map(heading => heading.heading).join(", "); + } + + const click_handler = i => removeProperty(i); + const change_handler = () => save(kanbanProperties); + + function input1_input_handler(each_value, i) { + each_value[i].property = this.value; + $$invalidate(0, kanbanProperties); + } + + function input_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + suggestEl = $$value; + $$invalidate(2, suggestEl); + }); + } + + function input_input_handler() { + inputValue = this.value; + $$invalidate(3, inputValue); + } + + $$self.$$set = $$props => { + if ("save" in $$props) $$invalidate(1, save = $$props.save); + if ("kanbanProperties" in $$props) $$invalidate(0, kanbanProperties = $$props.kanbanProperties); + if ("boards" in $$props) $$invalidate(7, boards = $$props.boards); + if ("app" in $$props) $$invalidate(8, app = $$props.app); + }; + + return [ + kanbanProperties, + save, + suggestEl, + inputValue, + addNewProperty, + removeProperty, + getHeadingsInBoard, + boards, + app, + click_handler, + change_handler, + input1_input_handler, + input_binding, + input_input_handler + ]; +} + +class KanbanHelperSettingContent extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-kqcr7b-style")) add_css$1(); + + init(this, options, instance$2, create_fragment$2, safe_not_equal, { + save: 1, + kanbanProperties: 0, + boards: 7, + app: 8 + }); + } +} + +/* src/Modals/shared/SingleValueTableEditorContent.svelte generated by Svelte v3.38.3 */ + +function add_css() { + var style = element("style"); + style.id = "svelte-kqcr7b-style"; + style.textContent = ".buttonContainer.svelte-kqcr7b{display:flex;justify-content:center;margin-top:1rem}button.svelte-kqcr7b{margin-left:5px;margin-right:5px;font-size:15px}"; + append(document.head, style); +} + +function get_each_context(ctx, list, i) { + const child_ctx = ctx.slice(); + child_ctx[7] = list[i]; + child_ctx[8] = list; + child_ctx[9] = i; + return child_ctx; +} + +// (23:8) {#each properties as property, i} +function create_each_block(ctx) { + let tr; + let td0; + let input0; + let t0; + let td1; + let input1; + let t1; + let mounted; + let dispose; + + function click_handler() { + return /*click_handler*/ ctx[4](/*i*/ ctx[9]); + } + + function input1_input_handler() { + /*input1_input_handler*/ ctx[6].call(input1, /*each_value*/ ctx[8], /*i*/ ctx[9]); + } + + return { + c() { + tr = element("tr"); + td0 = element("td"); + input0 = element("input"); + t0 = space(); + td1 = element("td"); + input1 = element("input"); + t1 = space(); + attr(input0, "type", "button"); + input0.value = "❌"; + attr(input0, "class", "not-a-button"); + set_style(input1, "width", "100%"); + attr(input1, "type", "text"); + attr(input1, "placeholder", "Property name"); + }, + m(target, anchor) { + insert(target, tr, anchor); + append(tr, td0); + append(td0, input0); + append(tr, t0); + append(tr, td1); + append(td1, input1); + set_input_value(input1, /*property*/ ctx[7]); + append(tr, t1); + + if (!mounted) { + dispose = [ + listen(input0, "click", click_handler), + listen(input1, "change", /*change_handler*/ ctx[5]), + listen(input1, "input", input1_input_handler) + ]; + + mounted = true; + } + }, + p(new_ctx, dirty) { + ctx = new_ctx; + + if (dirty & /*properties*/ 1 && input1.value !== /*property*/ ctx[7]) { + set_input_value(input1, /*property*/ ctx[7]); + } + }, + d(detaching) { + if (detaching) detach(tr); + mounted = false; + run_all(dispose); + } + }; +} + +function create_fragment$1(ctx) { + let div1; + let table; + let thead; + let t2; + let t3; + let div0; + let button; + let mounted; + let dispose; + let each_value = /*properties*/ ctx[0]; + let each_blocks = []; + + for (let i = 0; i < each_value.length; i += 1) { + each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); + } + + return { + c() { + div1 = element("div"); + table = element("table"); + thead = element("thead"); + + thead.innerHTML = ` + Property`; + + t2 = space(); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].c(); + } + + t3 = space(); + div0 = element("div"); + button = element("button"); + button.textContent = "Add"; + set_style(table, "width", "100%"); + attr(button, "class", "mod-cta svelte-kqcr7b"); + attr(div0, "class", "buttonContainer svelte-kqcr7b"); + attr(div1, "class", "centerSettingContent"); + }, + m(target, anchor) { + insert(target, div1, anchor); + append(div1, table); + append(table, thead); + append(table, t2); + + for (let i = 0; i < each_blocks.length; i += 1) { + each_blocks[i].m(table, null); + } + + append(div1, t3); + append(div1, div0); + append(div0, button); + + if (!mounted) { + dispose = listen(button, "click", /*addNewProperty*/ ctx[2]); + mounted = true; + } + }, + p(ctx, [dirty]) { + if (dirty & /*properties, save, removeProperty*/ 11) { + each_value = /*properties*/ ctx[0]; + let i; + + for (i = 0; i < each_value.length; i += 1) { + const child_ctx = get_each_context(ctx, each_value, i); + + if (each_blocks[i]) { + each_blocks[i].p(child_ctx, dirty); + } else { + each_blocks[i] = create_each_block(child_ctx); + each_blocks[i].c(); + each_blocks[i].m(table, null); + } + } + + for (; i < each_blocks.length; i += 1) { + each_blocks[i].d(1); + } + + each_blocks.length = each_value.length; + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) detach(div1); + destroy_each(each_blocks, detaching); + mounted = false; + dispose(); + } + }; +} + +function instance$1($$self, $$props, $$invalidate) { + let { save } = $$props; + let { properties = [] } = $$props; + + function addNewProperty() { + properties.push(""); + $$invalidate(0, properties); // Svelte + save(properties); + } + + function removeProperty(i) { + properties.splice(i, 1); + $$invalidate(0, properties); // Svelte + save(properties); + } + + const click_handler = i => removeProperty(i); + const change_handler = async () => save(properties); + + function input1_input_handler(each_value, i) { + each_value[i] = this.value; + $$invalidate(0, properties); + } + + $$self.$$set = $$props => { + if ("save" in $$props) $$invalidate(1, save = $$props.save); + if ("properties" in $$props) $$invalidate(0, properties = $$props.properties); + }; + + return [ + properties, + save, + addNewProperty, + removeProperty, + click_handler, + change_handler, + input1_input_handler + ]; +} + +class SingleValueTableEditorContent extends SvelteComponent { + constructor(options) { + super(); + if (!document.getElementById("svelte-kqcr7b-style")) add_css(); + init(this, options, instance$1, create_fragment$1, safe_not_equal, { save: 1, properties: 0 }); + } +} + +function toggleHiddenEl(el, bShow) { + if (el && !bShow) { + el.style.display = "none"; + return true; + } + else if (el && bShow) { + el.style.display = "block"; + return false; + } + return bShow; +} +class MetaEditSettingsTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.svelteElements = []; + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl('h2', { text: 'MetaEdit Settings' }); + this.addProgressPropertiesSetting(containerEl); + this.addAutoPropertiesSetting(containerEl); + this.addIgnorePropertiesSetting(containerEl); + this.addEditModeSetting(containerEl); + this.addKanbanHelperSetting(containerEl); + this.addUIElementsSetting(containerEl); + } + addProgressPropertiesSetting(containerEl) { + let modal, div, hidden = true; + const setting = new obsidian.Setting(containerEl) + .setName("Progress Properties") + .setDesc("Update properties automatically.") + .addToggle(toggle => { + toggle + .setTooltip("Toggle Progress Properties") + .setValue(this.plugin.settings.ProgressProperties.enabled) + .onChange(async (value) => { + if (value === this.plugin.settings.ProgressProperties.enabled) + return; + this.plugin.settings.ProgressProperties.enabled = value; + await this.plugin.saveSettings(); + }); + }) + .addExtraButton(button => button.onClick(() => hidden = toggleHiddenEl(div, hidden))); + div = setting.settingEl.createDiv(); + setting.settingEl.style.display = "block"; + div.style.display = "none"; + modal = new ProgressPropertiesModalContent({ + target: div, + props: { + properties: this.plugin.settings.ProgressProperties.properties, + save: async (progressProperties) => { + this.plugin.settings.ProgressProperties.properties = progressProperties; + await this.plugin.saveSettings(); + } + }, + }); + this.svelteElements.push(modal); + } + addAutoPropertiesSetting(containerEl) { + let modal, div, hidden = true; + const setting = new obsidian.Setting(containerEl) + .setName("Auto Properties") + .setDesc("Quick switch for values you know the value of.") + .addToggle(toggle => { + toggle + .setTooltip("Toggle Auto Properties") + .setValue(this.plugin.settings.AutoProperties.enabled) + .onChange(async (value) => { + if (value === this.plugin.settings.AutoProperties.enabled) + return; + this.plugin.settings.AutoProperties.enabled = value; + await this.plugin.saveSettings(); + }); + }) + .addExtraButton(b => b.onClick(() => hidden = toggleHiddenEl(div, hidden))); + div = setting.settingEl.createDiv(); + setting.settingEl.style.display = "block"; + div.style.display = "none"; + modal = new AutoPropertiesModalContent({ + target: div, + props: { + autoProperties: this.plugin.settings.AutoProperties.properties, + save: async (autoProperties) => { + this.plugin.settings.AutoProperties.properties = autoProperties; + await this.plugin.saveSettings(); + } + }, + }); + this.svelteElements.push(modal); + } + addIgnorePropertiesSetting(containerEl) { + let modal, div, hidden = true; + const setting = new obsidian.Setting(containerEl) + .setName("Ignore Properties") + .setDesc("Hide these properties from the menu.") + .addToggle(toggle => { + toggle + .setTooltip("Toggle Ignored Properties") + .setValue(this.plugin.settings.IgnoredProperties.enabled) + .onChange(async (value) => { + if (value === this.plugin.settings.IgnoredProperties.enabled) + return; + this.plugin.settings.IgnoredProperties.enabled = value; + await this.plugin.saveSettings(); + this.display(); + }); + }).addExtraButton(b => b.onClick(() => hidden = toggleHiddenEl(div, hidden))); + if (this.plugin.settings.IgnoredProperties.enabled) { + div = setting.settingEl.createDiv(); + setting.settingEl.style.display = "block"; + div.style.display = "none"; + modal = new SingleValueTableEditorContent({ + target: div, + props: { + properties: this.plugin.settings.IgnoredProperties.properties, + save: async (ignoredProperties) => { + this.plugin.settings.IgnoredProperties.properties = ignoredProperties; + await this.plugin.saveSettings(); + } + }, + }); + this.svelteElements.push(modal); + } + } + addEditModeSetting(containerEl) { + let modal, div, bDivToggle = true, extraButtonEl; + // For linebreaks + const df = new DocumentFragment(); + df.createEl('p', { text: "Single: property values are just one value. " }); + df.createEl('p', { text: "Multi: properties are arrays. " }); + df.createEl('p', { text: "Some Multi: all options are single, except those specified in the settings (click button)." }); + const setting = new obsidian.Setting(containerEl) + .setName("Edit Mode") + .setDesc(df) + .addDropdown(dropdown => { + dropdown + .addOption(EditMode.AllSingle, EditMode.AllSingle) + .addOption(EditMode.AllMulti, EditMode.AllMulti) + .addOption(EditMode.SomeMulti, EditMode.SomeMulti) + .setValue(this.plugin.settings.EditMode.mode) + .onChange(async (value) => { + switch (value) { + case EditMode.AllMulti: + this.plugin.settings.EditMode.mode = EditMode.AllMulti; + toggleHiddenEl(extraButtonEl, false); + bDivToggle = toggleHiddenEl(div, false); + break; + case EditMode.AllSingle: + this.plugin.settings.EditMode.mode = EditMode.AllSingle; + toggleHiddenEl(extraButtonEl, false); + bDivToggle = toggleHiddenEl(div, false); + break; + case EditMode.SomeMulti: + this.plugin.settings.EditMode.mode = EditMode.SomeMulti; + toggleHiddenEl(extraButtonEl, true); + break; + } + await this.plugin.saveSettings(); + }); + }) + .addExtraButton(b => { + extraButtonEl = b.extraSettingsEl; + b.setTooltip("Configure which properties are Multi."); + return b.onClick(() => bDivToggle = toggleHiddenEl(div, bDivToggle)); + }); + if (this.plugin.settings.EditMode.mode != EditMode.SomeMulti) { + toggleHiddenEl(extraButtonEl, false); + } + div = setting.settingEl.createDiv(); + setting.settingEl.style.display = "block"; + div.style.display = "none"; + modal = new SingleValueTableEditorContent({ + target: div, + props: { + properties: this.plugin.settings.EditMode.properties, + save: async (properties) => { + this.plugin.settings.EditMode.properties = properties; + await this.plugin.saveSettings(); + } + }, + }); + this.svelteElements.push(modal); + } + hide() { + this.svelteElements.forEach(el => el.$destroy()); + return super.hide(); + } + addKanbanHelperSetting(containerEl) { + let modal, div, hidden = true; + const setting = new obsidian.Setting(containerEl) + .setName("Kanban Board Helper") + .setDesc("Update properties in links in kanban boards automatically when a card is moved to a new lane.") + .addToggle(toggle => { + toggle + .setTooltip("Toggle Kanban Helper") + .setValue(this.plugin.settings.KanbanHelper.enabled) + .onChange(async (value) => { + if (value === this.plugin.settings.KanbanHelper.enabled) + return; + this.plugin.settings.KanbanHelper.enabled = value; + await this.plugin.saveSettings(); + }); + }) + .addExtraButton(button => button.onClick(() => hidden = toggleHiddenEl(div, hidden))); + div = setting.settingEl.createDiv(); + setting.settingEl.style.display = "block"; + div.style.display = "none"; + modal = new KanbanHelperSettingContent({ + target: div, + props: { + kanbanProperties: this.plugin.settings.KanbanHelper.boards, + boards: this.plugin.getFilesWithProperty("kanban-plugin"), + app: this.app, + save: async (kanbanProperties) => { + this.plugin.settings.KanbanHelper.boards = kanbanProperties; + await this.plugin.saveSettings(); + } + }, + }); + this.svelteElements.push(modal); + } + addUIElementsSetting(containerEl) { + new obsidian.Setting(containerEl) + .setName("UI Elements") + .setDesc("Toggle UI elements: the 'Edit Meta' right-click menu option.") + .addToggle(toggle => { + toggle + .setTooltip("Toggle UI elements") + .setValue(this.plugin.settings.UIElements.enabled) + .onChange(async (value) => { + if (value === this.plugin.settings.UIElements.enabled) + return; + this.plugin.settings.UIElements.enabled = value; + value ? this.plugin.linkMenu.registerEvent() : this.plugin.linkMenu.unregisterEvent(); + await this.plugin.saveSettings(); + }); + }); + } +} + +var MetaType; +(function (MetaType) { + MetaType[MetaType["YAML"] = 0] = "YAML"; + MetaType[MetaType["Dataview"] = 1] = "Dataview"; + MetaType[MetaType["Tag"] = 2] = "Tag"; + MetaType[MetaType["Option"] = 3] = "Option"; +})(MetaType || (MetaType = {})); + +const ADD_FIRST_ELEMENT = "cmd:addfirst"; +const ADD_TO_BEGINNING = "cmd:beg"; +const ADD_TO_END = "cmd:end"; +const newDataView = "New Dataview field"; +const newYaml = "New YAML property"; +const MAIN_SUGGESTER_OPTIONS = [ + { key: newYaml, content: newYaml, type: MetaType.Option }, + { key: newDataView, content: newDataView, type: MetaType.Option } +]; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +function createCommonjsModule(fn) { + var module = { exports: {} }; + return fn(module, module.exports), module.exports; +} + +function commonjsRequire (path) { + throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); +} + +var utils = createCommonjsModule(function (module, exports) { +var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setProp = exports.findUp = exports.isValidLocalPath = exports.hasDepInstalled = exports.getIncludePaths = exports.concat = exports.importAny = void 0; + + +async function importAny(...modules) { + try { + const mod = await modules.reduce((acc, moduleName) => acc.catch(() => Promise.resolve().then(() => __importStar(commonjsRequire(moduleName)))), Promise.reject()); + return mod; + } + catch (e) { + throw new Error(`Cannot find any of modules: ${modules}\n\n${e}`); + } +} +exports.importAny = importAny; +function concat(...arrs) { + return arrs.reduce((acc, a) => { + if (a) { + return acc.concat(a); + } + return acc; + }, []); +} +exports.concat = concat; +/** Paths used by preprocessors to resolve @imports */ +function getIncludePaths(fromFilename, base = []) { + return [ + ...new Set([...base, 'node_modules', process.cwd(), path_1__default['default'].dirname(fromFilename)]), + ]; +} +exports.getIncludePaths = getIncludePaths; +const cachedResult = {}; +/** + * Checks if a package is installed. + * + * @export + * @param {string} dep + * @returns boolean + */ +async function hasDepInstalled(dep) { + if (cachedResult[dep] != null) { + return cachedResult[dep]; + } + let result = false; + try { + await Promise.resolve().then(() => __importStar(commonjsRequire(dep))); + result = true; + } + catch (e) { + result = false; + } + return (cachedResult[dep] = result); +} +exports.hasDepInstalled = hasDepInstalled; +const REMOTE_SRC_PATTERN = /^(https?:)?\/\//; +function isValidLocalPath(path) { + return (path.match(REMOTE_SRC_PATTERN) == null && + // only literal strings allowed + !path.startsWith('{') && + !path.endsWith('}')); +} +exports.isValidLocalPath = isValidLocalPath; +// finds a existing path up the tree +function findUp({ what, from }) { + const { root, dir } = path_1__default['default'].parse(from); + let cur = dir; + try { + while (cur !== root) { + const possiblePath = path_1__default['default'].join(cur, what); + if (fs_1__default['default'].existsSync(possiblePath)) { + return possiblePath; + } + cur = path_1__default['default'].dirname(cur); + } + } + catch (e) { + console.error(e); + } + return null; +} +exports.findUp = findUp; +// set deep property in object +function setProp(obj, keyList, val) { + let i = 0; + for (; i < keyList.length - 1; i++) { + const key = keyList[i]; + if (typeof obj[key] !== 'object') { + obj[key] = {}; + } + obj = obj[key]; + } + obj[keyList[i]] = val; +} +exports.setProp = setProp; +}); + +class MetaEditSuggester extends obsidian.FuzzySuggestModal { + constructor(app, plugin, data, file, controller) { + super(app); + this.file = file; + this.app = app; + this.plugin = plugin; + this.data = this.removeIgnored(data); + this.controller = controller; + this.options = MAIN_SUGGESTER_OPTIONS; + this.setSuggestValues(); + this.setInstructions([ + { command: "❌", purpose: "Delete property" }, + { command: "🔃", purpose: "Transform to YAML/Dataview" } + ]); + } + renderSuggestion(item, el) { + super.renderSuggestion(item, el); + if (Object.values(this.options).find(v => v === item.item)) { + el.style.fontWeight = "bold"; + } + else { + this.createButton(el, "❌", this.deleteItem(item)); + this.createButton(el, "🔃", this.transformProperty(item)); + } + } + getItemText(item) { + return item.key; + } + getItems() { + return utils.concat(this.options, this.data); + } + async onChooseItem(item, evt) { + if (item.content === newYaml) { + const newProperty = await this.controller.createNewProperty(this.suggestValues); + if (!newProperty) + return null; + const { propName, propValue } = newProperty; + await this.controller.addYamlProp(propName, propValue, this.file); + return; + } + if (item.content === newDataView) { + const newProperty = await this.controller.createNewProperty(this.suggestValues); + if (!newProperty) + return null; + const { propName, propValue } = newProperty; + await this.controller.addDataviewField(propName, propValue, this.file); + return; + } + await this.controller.editMetaElement(item, this.data, this.file); + } + deleteItem(item) { + return async (evt) => { + evt.stopPropagation(); + await this.controller.deleteProperty(item.item, this.file); + this.close(); + }; + } + transformProperty(item) { + return async (evt) => { + evt.stopPropagation(); + const { item: property } = item; + if (property.type === MetaType.YAML) { + await this.toDataview(property); + } + else { + await this.toYaml(property); + } + this.close(); + }; + } + async toYaml(property) { + await this.controller.deleteProperty(property, this.file); + await this.controller.addYamlProp(property.key, property.content, this.file); + } + async toDataview(property) { + await this.controller.deleteProperty(property, this.file); + await this.controller.addDataviewField(property.key, property.content, this.file); + } + createButton(el, content, callback) { + const itemButton = el.createEl("button"); + itemButton.textContent = content; + itemButton.classList.add("not-a-button"); + itemButton.style.float = "right"; + itemButton.style.marginRight = "4px"; + itemButton.addEventListener("click", callback); + } + removeIgnored(data) { + const ignored = this.plugin.settings.IgnoredProperties.properties; + let purged = []; + for (let item in data) { + if (!ignored.contains(data[item].key)) + purged.push(data[item]); + } + return purged; + } + setSuggestValues() { + const autoProps = this.plugin.settings.AutoProperties.properties; + this.suggestValues = autoProps.reduce((arr, val) => { + if (!this.data.find(prop => val.name === prop.key || val.name.startsWith('#'))) { + arr.push(val.name); + } + return arr; + }, []); + } +} + +class MetaEditParser { + constructor(app) { + this.app = app; + } + async getTagsForFile(file) { + const cache = this.app.metadataCache.getFileCache(file); + if (!cache) + return []; + const tags = cache.tags; + if (!tags) + return []; + let mTags = []; + tags.forEach(tag => mTags.push({ key: tag.tag, content: tag.tag, type: MetaType.Tag })); + return mTags; + } + async parseFrontmatter(file) { + var _a; + const frontmatter = (_a = this.app.metadataCache.getFileCache(file)) === null || _a === void 0 ? void 0 : _a.frontmatter; + if (!frontmatter) + return []; + const { position: { start, end } } = frontmatter; + const filecontent = await this.app.vault.cachedRead(file); + const yamlContent = filecontent.split("\n").slice(start.line, end.line).join("\n"); + const parsedYaml = obsidian.parseYaml(yamlContent); + let metaYaml = []; + for (const key in parsedYaml) { + metaYaml.push({ key, content: parsedYaml[key], type: MetaType.YAML }); + } + return metaYaml; + } + async parseInlineFields(file) { + const content = await this.app.vault.cachedRead(file); + return content.split("\n").reduce((obj, str) => { + let parts = str.split("::"); + if (parts[0] && parts[1]) { + obj.push({ key: parts[0], content: parts[1].trim(), type: MetaType.Dataview }); + } + else if (str.includes("::")) { + const key = str.replace("::", ''); + obj.push({ key, content: "", type: MetaType.Dataview }); + } + return obj; + }, []); + } +} + +class GenericTextSuggester extends TextInputSuggest { + constructor(app, inputEl, items) { + super(app, inputEl); + this.app = app; + this.inputEl = inputEl; + this.items = items; + } + getSuggestions(inputStr) { + const inputLowerCase = inputStr.toLowerCase(); + const filtered = this.items.filter(item => { + if (item.toLowerCase().contains(inputLowerCase)) + return item; + }); + if (!filtered) + this.close(); + if ((filtered === null || filtered === void 0 ? void 0 : filtered.length) === 1) + return [inputStr, ...filtered]; + if ((filtered === null || filtered === void 0 ? void 0 : filtered.length) > 1) + return filtered; + } + selectSuggestion(item) { + this.inputEl.value = item; + this.inputEl.trigger("input"); + this.close(); + } + renderSuggestion(value, el) { + if (value) + el.setText(value); + } +} + +/* src/Modals/GenericPrompt/GenericPromptContent.svelte generated by Svelte v3.38.3 */ + +function create_fragment(ctx) { + let div; + let h1; + let t0; + let t1; + let input; + let mounted; + let dispose; + + return { + c() { + div = element("div"); + h1 = element("h1"); + t0 = text(/*header*/ ctx[1]); + t1 = space(); + input = element("input"); + set_style(h1, "text-align", "center"); + attr(input, "class", "metaEditPromptInput"); + attr(input, "placeholder", /*placeholder*/ ctx[2]); + set_style(input, "width", "100%"); + attr(input, "type", "text"); + attr(div, "class", "metaEditPrompt"); + }, + m(target, anchor) { + insert(target, div, anchor); + append(div, h1); + append(h1, t0); + append(div, t1); + append(div, input); + /*input_binding*/ ctx[8](input); + set_input_value(input, /*value*/ ctx[0]); + + if (!mounted) { + dispose = [ + listen(input, "input", /*input_input_handler*/ ctx[9]), + listen(input, "keydown", /*submit*/ ctx[4]) + ]; + + mounted = true; + } + }, + p(ctx, [dirty]) { + if (dirty & /*header*/ 2) set_data(t0, /*header*/ ctx[1]); + + if (dirty & /*placeholder*/ 4) { + attr(input, "placeholder", /*placeholder*/ ctx[2]); + } + + if (dirty & /*value*/ 1 && input.value !== /*value*/ ctx[0]) { + set_input_value(input, /*value*/ ctx[0]); + } + }, + i: noop, + o: noop, + d(detaching) { + if (detaching) detach(div); + /*input_binding*/ ctx[8](null); + mounted = false; + run_all(dispose); + } + }; +} + +function instance($$self, $$props, $$invalidate) { + + let { app } = $$props; + let { header = "" } = $$props; + let { placeholder = "" } = $$props; + let { value = "" } = $$props; + let { onSubmit } = $$props; + let { suggestValues } = $$props; + let inputEl; + + onMount(() => { + if (suggestValues && suggestValues.length > 0) new GenericTextSuggester(app, inputEl, suggestValues); + inputEl.select(); + inputEl.focus(); + }); + + function submit(evt) { + if (evt.key === "Enter") { + evt.preventDefault(); + onSubmit(value); + } + } + + function input_binding($$value) { + binding_callbacks[$$value ? "unshift" : "push"](() => { + inputEl = $$value; + $$invalidate(3, inputEl); + }); + } + + function input_input_handler() { + value = this.value; + $$invalidate(0, value); + } + + $$self.$$set = $$props => { + if ("app" in $$props) $$invalidate(5, app = $$props.app); + if ("header" in $$props) $$invalidate(1, header = $$props.header); + if ("placeholder" in $$props) $$invalidate(2, placeholder = $$props.placeholder); + if ("value" in $$props) $$invalidate(0, value = $$props.value); + if ("onSubmit" in $$props) $$invalidate(6, onSubmit = $$props.onSubmit); + if ("suggestValues" in $$props) $$invalidate(7, suggestValues = $$props.suggestValues); + }; + + return [ + value, + header, + placeholder, + inputEl, + submit, + app, + onSubmit, + suggestValues, + input_binding, + input_input_handler + ]; +} + +class GenericPromptContent extends SvelteComponent { + constructor(options) { + super(); + + init(this, options, instance, create_fragment, safe_not_equal, { + app: 5, + header: 1, + placeholder: 2, + value: 0, + onSubmit: 6, + suggestValues: 7 + }); + } +} + +class GenericPrompt extends obsidian.Modal { + constructor(app, header, placeholder, value, suggestValues) { + super(app); + this.didSubmit = false; + this.modalContent = new GenericPromptContent({ + target: this.contentEl, + props: { + app, + header, + placeholder, + value, + suggestValues, + onSubmit: (input) => { + this.input = input; + this.didSubmit = true; + this.close(); + } + } + }); + this.waitForClose = new Promise((resolve, reject) => { + this.resolvePromise = resolve; + this.rejectPromise = reject; + }); + this.open(); + } + static Prompt(app, header, placeholder, value, suggestValues) { + const newPromptModal = new GenericPrompt(app, header, placeholder, value, suggestValues); + return newPromptModal.waitForClose; + } + onOpen() { + super.onOpen(); + const modalPrompt = document.querySelector('.metaEditPrompt'); + const modalInput = modalPrompt.querySelector('.metaEditPromptInput'); + modalInput.focus(); + modalInput.select(); + } + onClose() { + super.onClose(); + this.modalContent.$destroy(); + if (!this.didSubmit) + this.rejectPromise("No input given."); + else + this.resolvePromise(this.input); + } +} + +class GenericSuggester extends obsidian.FuzzySuggestModal { + constructor(app, displayItems, items) { + super(app); + this.displayItems = displayItems; + this.items = items; + this.promise = new Promise((resolve) => (this.resolvePromise = resolve)); + this.open(); + } + static Suggest(app, displayItems, items) { + const newSuggester = new GenericSuggester(app, displayItems, items); + return newSuggester.promise; + } + getItemText(item) { + return this.displayItems[this.items.indexOf(item)]; + } + getItems() { + return this.items; + } + onChooseItem(item, evt) { + this.resolvePromise(item); + } +} + +class MetaController { + constructor(app, plugin) { + this.hasTrackerPlugin = false; + this.useTrackerPlugin = false; + this.app = app; + this.parser = new MetaEditParser(app); + this.plugin = plugin; + // @ts-ignore + this.hasTrackerPlugin = !!this.app.plugins.plugins["obsidian-tracker"]; + } + async getPropertiesInFile(file) { + const yaml = await this.parser.parseFrontmatter(file); + const inlineFields = await this.parser.parseInlineFields(file); + const tags = await this.parser.getTagsForFile(file); + return [...tags, ...yaml, ...inlineFields]; + } + async addYamlProp(propName, propValue, file) { + const fileContent = await this.app.vault.read(file); + const frontmatter = await this.parser.parseFrontmatter(file); + const isYamlEmpty = ((!frontmatter || frontmatter.length === 0) && !fileContent.match(/^-{3}\s*\n*\r*-{3}/)); + if (frontmatter.some(value => value.key === propName)) { + new obsidian.Notice(`Frontmatter in file '${file.name}' already has property '${propName}. Will not add.'`); + return; + } + const settings = this.plugin.settings; + if (settings.EditMode.mode === EditMode.AllMulti || + (settings.EditMode.mode === EditMode.SomeMulti && settings.EditMode.properties.contains(propName))) { + propValue = `[${propValue}]`; + } + let splitContent = fileContent.split("\n"); + if (isYamlEmpty) { + splitContent.unshift("---"); + splitContent.unshift(`${propName}: ${propValue}`); + splitContent.unshift("---"); + } + else { + splitContent.splice(1, 0, `${propName}: ${propValue}`); + } + const newFileContent = splitContent.join("\n"); + await this.app.vault.modify(file, newFileContent); + } + async addDataviewField(propName, propValue, file) { + const fileContent = await this.app.vault.read(file); + let lines = fileContent.split("\n").reduce((obj, line, idx) => { + obj[idx] = !!line ? line : ""; + return obj; + }, {}); + let appendAfter = await GenericSuggester.Suggest(this.app, Object.values(lines), Object.keys(lines)); + if (!appendAfter) + return; + let splitContent = fileContent.split("\n"); + if (typeof appendAfter === "number" || parseInt(appendAfter)) { + splitContent.splice(parseInt(appendAfter), 0, `${propName}:: ${propValue}`); + } + const newFileContent = splitContent.join("\n"); + await this.app.vault.modify(file, newFileContent); + } + async editMetaElement(property, meta, file) { + const mode = this.plugin.settings.EditMode.mode; + if (property.type === MetaType.Tag) + await this.editTag(property, file); + else if (mode === EditMode.AllMulti || mode === EditMode.SomeMulti) + await this.multiValueMode(property, file); + else + await this.standardMode(property, file); + } + async editTag(property, file) { + const splitTag = property.key.split("/"); + const allButLast = splitTag.slice(0, splitTag.length - 1).join("/"); + const trackerPluginMethod = "Use Tracker", metaEditMethod = "Use MetaEdit", choices = [trackerPluginMethod, metaEditMethod]; + let newValue; + let method = metaEditMethod; + if (this.hasTrackerPlugin) + method = await GenericSuggester.Suggest(this.app, choices, choices); + if (!method) + return; + if (method === trackerPluginMethod) { + newValue = await GenericPrompt.Prompt(this.app, `Enter a new value for ${property.key}`); + this.useTrackerPlugin = true; + } + else if (method === metaEditMethod) { + const autoProp = await this.handleAutoProperties(allButLast); + if (autoProp) + newValue = autoProp; + else + newValue = await GenericPrompt.Prompt(this.app, `Enter a new value for ${property.key}`); + } + if (newValue) { + await this.updatePropertyInFile(property, newValue, file); + } + } + async handleProgressProps(meta, file) { + var _a, _b; + try { + const { enabled, properties } = this.plugin.settings.ProgressProperties; + if (!enabled) + return; + const tasks = (_b = (_a = this.app.metadataCache.getFileCache(file)) === null || _a === void 0 ? void 0 : _a.listItems) === null || _b === void 0 ? void 0 : _b.filter(li => li.task); + if (!tasks) + return; + let total = 0, complete = 0, incomplete = 0; + total = tasks.length; + complete = tasks.filter(i => i.task != " ").length; + incomplete = total - complete; + const props = await this.progressPropHelper(properties, meta, { total, complete, incomplete }); + await this.updateMultipleInFile(props, file); + } + catch (e) { + this.plugin.logError(e); + } + } + async createNewProperty(suggestValues) { + let propName = await GenericPrompt.Prompt(this.app, "Enter a property name", "Property", "", suggestValues); + if (!propName) + return null; + let propValue; + const autoProp = await this.handleAutoProperties(propName); + if (autoProp) { + propValue = autoProp; + } + else { + propValue = await GenericPrompt.Prompt(this.app, "Enter a property value", "Value") + .catch(() => null); + } + if (propValue === null) + return null; + return { propName, propValue: propValue.trim() }; + } + async deleteProperty(property, file) { + const fileContent = await this.app.vault.read(file); + const splitContent = fileContent.split("\n"); + const regexp = new RegExp(`^\s*${property.key}:`); + const idx = splitContent.findIndex(s => s.match(regexp)); + const newFileContent = splitContent.filter((v, i) => { + if (i != idx) + return true; + }).join("\n"); + await this.app.vault.modify(file, newFileContent); + } + async progressPropHelper(progressProps, meta, counts) { + return progressProps.reduce((obj, el) => { + const property = meta.find(prop => prop.key === el.name); + if (property) { + switch (el.type) { + case ProgressPropertyOptions.TaskComplete: + obj.push(Object.assign(Object.assign({}, property), { content: counts.complete.toString() })); + break; + case ProgressPropertyOptions.TaskIncomplete: + obj.push(Object.assign(Object.assign({}, property), { content: counts.incomplete.toString() })); + break; + case ProgressPropertyOptions.TaskTotal: + obj.push(Object.assign(Object.assign({}, property), { content: counts.total.toString() })); + break; + } + } + return obj; + }, []); + } + async standardMode(property, file) { + const autoProp = await this.handleAutoProperties(property.key); + let newValue; + if (autoProp) + newValue = autoProp; + else + newValue = await GenericPrompt.Prompt(this.app, `Enter a new value for ${property.key}`, property.content, property.content); + if (newValue) { + await this.updatePropertyInFile(property, newValue, file); + } + } + async multiValueMode(property, file) { + const settings = this.plugin.settings; + let newValue; + if (settings.EditMode.mode == EditMode.SomeMulti && !settings.EditMode.properties.includes(property.key)) { + await this.standardMode(property, file); + return false; + } + let selectedOption, tempValue, splitValues; + let currentPropValue = property.content; + if (currentPropValue !== null) + currentPropValue = currentPropValue.toString(); + else + currentPropValue = ""; + if (property.type === MetaType.YAML) { + splitValues = currentPropValue.split('').filter(c => !c.includes("[]")).join('').split(","); + } + else { + splitValues = currentPropValue.split(",").map(prop => prop.trim()); + } + if (splitValues.length == 0 || (splitValues.length == 1 && splitValues[0] == "")) { + const options = ["Add new value"]; + selectedOption = await GenericSuggester.Suggest(this.app, options, [ADD_FIRST_ELEMENT]); + } + else if (splitValues.length == 1) { + const options = [splitValues[0], "Add to end", "Add to beginning"]; + selectedOption = await GenericSuggester.Suggest(this.app, options, [splitValues[0], ADD_TO_END, ADD_TO_BEGINNING]); + } + else { + const options = ["Add to end", ...splitValues, "Add to beginning"]; + selectedOption = await GenericSuggester.Suggest(this.app, options, [ADD_TO_END, ...splitValues, ADD_TO_BEGINNING]); + } + if (!selectedOption) + return; + let selectedIndex; + const autoProp = await this.handleAutoProperties(property.key); + if (autoProp) { + tempValue = autoProp; + } + else if (selectedOption.includes("cmd")) { + tempValue = await GenericPrompt.Prompt(this.app, "Enter a new value"); + } + else { + selectedIndex = splitValues.findIndex(el => el == selectedOption); + tempValue = await GenericPrompt.Prompt(this.app, `Change ${selectedOption} to`, selectedOption); + } + if (!tempValue) + return; + switch (selectedOption) { + case ADD_FIRST_ELEMENT: + newValue = `${tempValue}`; + break; + case ADD_TO_BEGINNING: + newValue = `${[tempValue, ...splitValues].join(", ")}`; + break; + case ADD_TO_END: + newValue = `${[...splitValues, tempValue].join(", ")}`; + break; + default: + if (selectedIndex) + splitValues[selectedIndex] = tempValue; + else + splitValues = [tempValue]; + newValue = `${splitValues.join(", ")}`; + break; + } + if (property.type === MetaType.YAML) + newValue = `[${newValue}]`; + if (newValue) { + await this.updatePropertyInFile(property, newValue, file); + return true; + } + return false; + } + async handleAutoProperties(propertyName) { + const autoProp = this.plugin.settings.AutoProperties.properties.find(a => a.name === propertyName); + if (this.plugin.settings.AutoProperties.enabled && autoProp) { + const options = autoProp.choices; + return await GenericPrompt.Prompt(this.app, `Enter a new value for ${propertyName}`, '', '', options); + } + return null; + } + async updatePropertyInFile(property, newValue, file) { + const fileContent = await this.app.vault.read(file); + const newFileContent = fileContent.split("\n").map(line => { + if (this.lineMatch(property, line)) { + return this.updatePropertyLine(property, newValue); + } + return line; + }).join("\n"); + await this.app.vault.modify(file, newFileContent); + } + lineMatch(property, line) { + const propertyRegex = new RegExp(`^\s*${property.key}\:{1,2}`); + const tagRegex = new RegExp(`^\s*${property.key}`); + if (property.key.contains('#')) { + return tagRegex.test(line); + } + return propertyRegex.test(line); + } + updatePropertyLine(property, newValue) { + let newLine; + switch (property.type) { + case MetaType.Dataview: + newLine = `${property.key}:: ${newValue}`; + break; + case MetaType.YAML: + newLine = `${property.key}: ${newValue}`; + break; + case MetaType.Tag: + if (this.useTrackerPlugin) { + newLine = `${property.key}:${newValue}`; + } + else { + const splitTag = property.key.split("/"); + if (splitTag.length === 1) + newLine = `${splitTag[0]}/${newValue}`; + else if (splitTag.length > 1) { + const allButLast = splitTag.slice(0, splitTag.length - 1).join("/"); + newLine = `${allButLast}/${newValue}`; + } + else + newLine = property.key; + } + break; + default: + newLine = property.key; + break; + } + return newLine; + } + async updateMultipleInFile(properties, file) { + let fileContent = (await this.app.vault.read(file)).split("\n"); + for (const prop of properties) { + fileContent = fileContent.map(line => { + if (this.lineMatch(prop, line)) { + return this.updatePropertyLine(prop, prop.content); + } + return line; + }); + } + const newFileContent = fileContent.join("\n"); + await this.app.vault.modify(file, newFileContent); + } +} + +const DEFAULT_SETTINGS = Object.freeze({ + ProgressProperties: { + enabled: false, + properties: [] + }, + IgnoredProperties: { + enabled: false, + properties: [] + }, + AutoProperties: { + enabled: false, + properties: [] + }, + EditMode: { + mode: EditMode.AllSingle, + properties: [], + }, + KanbanHelper: { + enabled: false, + boards: [] + }, + UIElements: { + enabled: true + } +}); + +class LinkMenu { + constructor(plugin) { + this.plugin = plugin; + } + registerEvent() { + this.eventRef = this.plugin.app.workspace.on('file-menu', (menu, file, source) => this.onMenuOpenCallback(menu, file, source)); + this.plugin.registerEvent(this.eventRef); + } + unregisterEvent() { + if (this.eventRef) { + this.plugin.app.workspace.offref(this.eventRef); + } + } + onMenuOpenCallback(menu, file, source) { + const bCorrectSource = (source === "link-context-menu" || + source === "calendar-context-menu" || + source == "file-explorer-context-menu"); + if (bCorrectSource) { + if (file instanceof obsidian.TFile && file.extension === "md") { + this.targetFile = file; + this.addFileOptions(menu); + } + if (file instanceof obsidian.TFolder && file.children && file.children.some(f => f instanceof obsidian.TFile && f.extension === "md")) { + this.targetFolder = file; + this.addFolderOptions(menu); + } + } + } + addFileOptions(menu) { + menu.addItem(item => { + item.setIcon('pencil'); + item.setTitle("Edit Meta"); + item.onClick(async (evt) => { + await this.plugin.runMetaEditForFile(this.targetFile); + }); + }); + } + addFolderOptions(menu) { + menu.addItem(item => { + item.setIcon('pencil'); + item.setTitle("Add YAML property to all files in this folder (and subfolders)"); + item.onClick(async (evt) => { + await this.plugin.runMetaEditForFolder(this.targetFolder); + }); + }); + } +} + +class MetaEditApi { + constructor(plugin) { + this.plugin = plugin; + } + make() { + return { + autoprop: this.getAutopropFunction(), + update: this.getUpdateFunction(), + getPropertyValue: this.getGetPropertyValueFunction(), + getFilesWithProperty: this.getGetFilesWithPropertyFunction(), + createYamlProperty: this.getCreateYamlPropertyFunction(), + getPropertiesInFile: this.getGetPropertiesInFile(), + }; + } + getAutopropFunction() { + return (propertyName) => new MetaController(this.plugin.app, this.plugin).handleAutoProperties(propertyName); + } + getUpdateFunction() { + return async (propertyName, propertyValue, file) => { + const targetFile = this.getFileFromTFileOrPath(file); + if (!targetFile) + return; + const controller = new MetaController(this.plugin.app, this.plugin); + const propsInFile = await controller.getPropertiesInFile(targetFile); + const targetProperty = propsInFile.find(prop => prop.key === propertyName); + if (!targetProperty) + return; + return controller.updatePropertyInFile(targetProperty, propertyValue, targetFile); + }; + } + getFileFromTFileOrPath(file) { + let targetFile; + if (file instanceof obsidian.TFile) + targetFile = file; + if (typeof file === "string") { + const abstractFile = this.plugin.app.vault.getAbstractFileByPath(file); + if (abstractFile instanceof obsidian.TFile) { + targetFile = abstractFile; + } + } + return targetFile; + } + getGetPropertyValueFunction() { + return async (propertyName, file) => { + const targetFile = this.getFileFromTFileOrPath(file); + if (!targetFile) + return; + const controller = new MetaController(this.plugin.app, this.plugin); + const propsInFile = await controller.getPropertiesInFile(targetFile); + const targetProperty = propsInFile.find(prop => prop.key === propertyName); + if (!targetProperty) + return; + return targetProperty.content; + }; + } + getGetFilesWithPropertyFunction() { + return (propertyName) => { + return this.plugin.getFilesWithProperty(propertyName); + }; + } + getCreateYamlPropertyFunction() { + return async (propertyName, propertyValue, file) => { + const targetFile = this.getFileFromTFileOrPath(file); + if (!targetFile) + return; + const controller = new MetaController(this.plugin.app, this.plugin); + await controller.addYamlProp(propertyName, propertyValue, targetFile); + }; + } + getGetPropertiesInFile() { + return async (file) => { + const targetFile = this.getFileFromTFileOrPath(file); + if (!targetFile) + return; + const controller = new MetaController(this.plugin.app, this.plugin); + return await controller.getPropertiesInFile(targetFile); + }; + } +} + +class UniqueQueue { + constructor() { + this.elements = []; + } + enqueue(item) { + if (this.elements.find(i => i === item)) { + return false; + } + this.elements.push(item); + return true; + } + dequeue() { + return this.elements.shift(); + } + peek() { + return this.elements[0]; + } + isEmpty() { + return this.elements.length === 0; + } + length() { + return this.elements.length; + } +} + +class UpdatedFileCache { + constructor() { + this.map = new Map(); + } + get(key) { + return this.map.get(key); + } + set(key, content) { + if (this.map.has(key) && this.map.get(key).content === content) + return false; + this.map.set(key, { content, updateTime: Date.now() }); + this.clean(); + return true; + } + delete(key) { + this.map.delete(key); + } + clean() { + const five_minutes = 300000; + this.map.forEach((item, key) => { + if (item.updateTime < Date.now() - five_minutes) { + this.delete(key); + } + }); + } +} + +class MetaEdit extends obsidian.Plugin { + constructor() { + super(...arguments); + this.update = obsidian.debounce(async () => { + while (!this.updateFileQueue.isEmpty()) { + const file = this.updateFileQueue.dequeue(); + if (this.settings.ProgressProperties.enabled) { + await this.updateProgressProperties(file); + } + if (this.settings.KanbanHelper.enabled) { + await this.kanbanHelper(file); + } + } + }, 5000, true); + this.onModifyCallback = async (file) => await this.onModify(file); + } + async onload() { + this.controller = new MetaController(this.app, this); + this.updateFileQueue = new UniqueQueue(); + this.updatedFileCache = new UpdatedFileCache(); + console.log('Loading MetaEdit'); + await this.loadSettings(); + this.addCommand({ + id: 'metaEditRun', + name: 'Run MetaEdit', + callback: async () => { + const file = this.getCurrentFile(); + if (!file) + return; + await this.runMetaEditForFile(file); + } + }); + this.onModifyCallbackToggle(true); + this.addSettingTab(new MetaEditSettingsTab(this.app, this)); + this.linkMenu = new LinkMenu(this); + if (this.settings.UIElements.enabled) { + this.linkMenu.registerEvent(); + } + this.api = new MetaEditApi(this).make(); + } + async runMetaEditForFile(file) { + const data = await this.controller.getPropertiesInFile(file); + if (!data) + return; + const suggester = new MetaEditSuggester(this.app, this, data, file, this.controller); + suggester.open(); + } + onunload() { + console.log('Unloading MetaEdit'); + this.onModifyCallbackToggle(false); + this.linkMenu.unregisterEvent(); + } + getCurrentFile() { + const currentFile = this.abstractFileToMarkdownTFile(this.app.workspace.getActiveFile()); + if (!currentFile) { + this.logError("could not get current file content."); + return null; + } + return currentFile; + } + abstractFileToMarkdownTFile(file) { + if (file instanceof obsidian.TFile && file.extension === "md") + return file; + return null; + } + onModifyCallbackToggle(enable) { + if (enable) { + this.app.vault.on("modify", this.onModifyCallback); + } + else if (this.onModifyCallback && !enable) { + this.app.vault.off("modify", this.onModifyCallback); + } + } + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + async saveSettings() { + await this.saveData(this.settings); + } + logError(error) { + new obsidian.Notice(`MetaEdit: ${error}`); + } + getFilesWithProperty(property) { + const markdownFiles = this.app.vault.getMarkdownFiles(); + let files = []; + markdownFiles.forEach(file => { + const fileCache = this.app.metadataCache.getFileCache(file); + if (fileCache) { + const fileFrontmatter = fileCache.frontmatter; + if (fileFrontmatter && fileFrontmatter[property]) { + files.push(file); + } + } + }); + return files; + } + async onModify(file) { + const outfile = this.abstractFileToMarkdownTFile(file); + if (!outfile) + return; + const fileContent = await this.app.vault.cachedRead(outfile); + if (!this.updatedFileCache.set(file.path, fileContent)) + return; + if (this.updateFileQueue.enqueue(outfile)) { + await this.update(); + } + } + async updateProgressProperties(file) { + const data = await this.controller.getPropertiesInFile(file); + if (!data) + return; + await this.controller.handleProgressProps(data, file); + } + async kanbanHelper(file) { + const fileContent = await this.app.vault.cachedRead(file); + const boards = this.settings.KanbanHelper.boards; + const board = boards.find(board => board.boardName === file.basename); + const fileCache = this.app.metadataCache.getFileCache(file); + if (board && fileCache) { + const { links } = fileCache; + if (links) { + for (const link of links) { + // Because of how links are formatted, I have to do it this way. + // If there are duplicates (two files with the same name) for a link, the path will be in the link. + // If not, the link won't specify the folder. Therefore, we check all files. + const markdownFiles = this.app.vault.getMarkdownFiles(); + const linkFile = markdownFiles.find(f => f.path.includes(`${link.link}.md`)); + if (linkFile instanceof obsidian.TFile) { + const headingAttempt1 = this.getTaskHeading(linkFile.path.replace('.md', ''), fileContent); + const headingAttempt2 = this.getTaskHeading(link.link, fileContent); + const heading = headingAttempt1 !== null && headingAttempt1 !== void 0 ? headingAttempt1 : headingAttempt2; + if (!heading) { + this.logError("could not open linked file (KanbanHelper)"); + return; + } + const fileProperties = await this.controller.getPropertiesInFile(linkFile); + if (!fileProperties) + return; + const targetProperty = fileProperties.find(prop => prop.key === board.property); + if (!targetProperty) + return; + await this.controller.updatePropertyInFile(targetProperty, heading, linkFile); + } + } + } + } + } + getTaskHeading(taskName, fileContent) { + const MARKDOWN_HEADING = new RegExp(/#+\s+(.+)/); + const TASK_REGEX = new RegExp(/(\s*)-\s*\[([ Xx\.]?)\]\s*(.+)/, "i"); + let lastHeading = ""; + const splitContent = fileContent.split("\n"); + for (const line of splitContent) { + const heading = MARKDOWN_HEADING.exec(line); + if (heading) { + lastHeading = heading[1]; + } + const taskMatch = TASK_REGEX.exec(line); + if (taskMatch && taskMatch[3].includes(`${taskName}`)) { + return lastHeading; + } + } + return null; + } + async runMetaEditForFolder(targetFolder) { + const pName = await GenericPrompt.Prompt(this.app, `Add a new property to all files in ${targetFolder.name} (and subfolders)`); + if (!pName) + return; + const pVal = await GenericPrompt.Prompt(this.app, "Enter a value"); + if (!pVal) + return; + const updateFilesInFolder = async (targetFolder, propertyName, propertyValue) => { + for (const child of targetFolder.children) { + if (child instanceof obsidian.TFile && child.extension == "md") + await this.controller.addYamlProp(pName, pVal, child); + if (child instanceof obsidian.TFolder) + await updateFilesInFolder(child); + } + }; + await updateFilesInFolder(targetFolder); + } +} + +module.exports = MetaEdit; diff --git a/.obsidian/plugins/metaedit/manifest.json b/.obsidian/plugins/metaedit/manifest.json new file mode 100644 index 00000000..093301b4 --- /dev/null +++ b/.obsidian/plugins/metaedit/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "metaedit", + "name": "MetaEdit", + "version": "1.6.16", + "minAppVersion": "0.12.0", + "description": "MetaEdit helps you manage your metadata.", + "author": "Christian B. B. Houmann", + "authorUrl": "https://bagerbach.com", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/metaedit/styles.css b/.obsidian/plugins/metaedit/styles.css new file mode 100644 index 00000000..75539c74 --- /dev/null +++ b/.obsidian/plugins/metaedit/styles.css @@ -0,0 +1,15 @@ +.centerSettingContent { + display: grid; + align-items: center; + justify-content: center; +} + +.not-a-button { + background: none; + color: inherit; + border: none; + padding: 0; + font: inherit; + cursor: pointer; + outline: inherit; +} \ No newline at end of file diff --git a/.obsidian/plugins/music-code-blocks/main.js b/.obsidian/plugins/music-code-blocks/main.js new file mode 100644 index 00000000..1f0a9527 --- /dev/null +++ b/.obsidian/plugins/music-code-blocks/main.js @@ -0,0 +1,17653 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +var version = '5.12.0'; + +var version_1 = version; + +// Copyright (C) 2014-2018 Gregory Dyke (gregdyke at gmail dot com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var spacing = {}; + +spacing.FONTEM = 360; +spacing.FONTSIZE = 30; +spacing.STEP = spacing.FONTSIZE*93/720; +spacing.SPACE = 10; +spacing.TOPNOTE = 15; +spacing.STAVEHEIGHT = 100; +spacing.INDENT = 50; + +var abc_spacing = spacing; + +// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var parseCommon = {}; + +parseCommon.clone = function(source) { + var destination = {}; + for (var property in source) + if (source.hasOwnProperty(property)) + destination[property] = source[property]; + return destination; +}; + +parseCommon.cloneArray = function(source) { + var destination = []; + for (var i = 0; i < source.length; i++) { + destination.push(parseCommon.clone(source[i])); + } + return destination; +}; + +parseCommon.cloneHashOfHash = function(source) { + var destination = {}; + for (var property in source) + if (source.hasOwnProperty(property)) + destination[property] = parseCommon.clone(source[property]); + return destination; +}; + +parseCommon.cloneHashOfArrayOfHash = function(source) { + var destination = {}; + for (var property in source) + if (source.hasOwnProperty(property)) + destination[property] = parseCommon.cloneArray(source[property]); + return destination; +}; + +parseCommon.gsub = function(source, pattern, replacement) { + return source.split(pattern).join(replacement); +}; + +parseCommon.strip = function(str) { + return str.replace(/^\s+/, '').replace(/\s+$/, ''); +}; + +parseCommon.startsWith = function(str, pattern) { + return str.indexOf(pattern) === 0; +}; + +parseCommon.endsWith = function(str, pattern) { + var d = str.length - pattern.length; + return d >= 0 && str.lastIndexOf(pattern) === d; +}; + +parseCommon.each = function(arr, iterator, context) { + for (var i = 0, length = arr.length; i < length; i++) + iterator.apply(context, [arr[i],i]); +}; + +parseCommon.last = function(arr) { + if (arr.length === 0) + return null; + return arr[arr.length-1]; +}; + +parseCommon.compact = function(arr) { + var output = []; + for (var i = 0; i < arr.length; i++) { + if (arr[i]) + output.push(arr[i]); + } + return output; +}; + +parseCommon.detect = function(arr, iterator) { + for (var i = 0; i < arr.length; i++) { + if (iterator(arr[i])) + return true; + } + return false; +}; + +// The following is a polyfill for Object.remove for IE9, IE10, and IE11. +// from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md +(function (arr) { + arr.forEach(function (item) { + if (item.hasOwnProperty('remove')) { + return; + } + Object.defineProperty(item, 'remove', { + configurable: true, + enumerable: true, + writable: true, + value: function remove() { + if (this.parentNode !== null) + this.parentNode.removeChild(this); + } + }); + }); +})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); + +var abc_common = parseCommon; + +var TimingCallbacks = function(target, params) { + var self = this; + if (!params) params = {}; + self.qpm = params.qpm ? parseInt(params.qpm, 10) : null; + if (!self.qpm) { + var tempo = target.metaText ? target.metaText.tempo : null; + self.qpm = target.getBpm(tempo); + } + self.extraMeasuresAtBeginning = params.extraMeasuresAtBeginning ? parseInt(params.extraMeasuresAtBeginning, 10) : 0; + self.beatCallback = params.beatCallback; // This is called for each beat. + self.eventCallback = params.eventCallback; // This is called for each note or rest encountered. + self.lineEndCallback = params.lineEndCallback; // This is called when the end of a line is approaching. + self.lineEndAnticipation = params.lineEndAnticipation ? parseInt(params.lineEndAnticipation, 10) : 0; // How many milliseconds before the end should the call happen. + self.beatSubdivisions = params.beatSubdivisions ? parseInt(params.beatSubdivisions, 10) : 1; // how many callbacks per beat is desired. + + self.replaceTarget = function(newTarget) { + newTarget.setTiming(self.qpm, self.extraMeasuresAtBeginning); + if (newTarget.noteTimings.length === 0) + newTarget.setTiming(0,0); + if (self.lineEndCallback) { + self.lineEndTimings = getLineEndTimings(newTarget.noteTimings, self.lineEndAnticipation); + } + self.noteTimings = newTarget.noteTimings; + }; + + self.replaceTarget(target); + if (self.noteTimings.length === 0) + return; + + // noteTimings contains an array of events sorted by time. Events that happen at the same time are in the same element of the array. + self.noteTimings = target.noteTimings; + self.millisecondsPerBeat = 1000 / (self.qpm / 60) / self.beatSubdivisions; + self.lastMoment = self.noteTimings[self.noteTimings.length-1].milliseconds; + self.totalBeats = Math.round(self.lastMoment / self.millisecondsPerBeat); + + self.startTime = null; + self.currentBeat = 0; + self.currentEvent = 0; + self.isPaused = false; + self.isRunning = false; + self.pausedTime = null; + self.justUnpaused = false; + + self.newSeekPercent = 0; + self.justSeeked = false; + + function setCurrentLocation(timestamp) { + // First find the relative amount to move: that is, the difference between the current percentage and the passed in percent. + var currentPercent = (timestamp - self.startTime) / self.lastMoment; + var percentDifference = currentPercent - self.newSeekPercent; + var timeDifference = self.lastMoment * percentDifference; + self.startTime = self.startTime + timeDifference; + + var currentTime = timestamp - self.startTime; + currentTime += 50; // Add a little slop because this function isn't called exactly. + + var oldBeat = self.currentBeat; + self.currentBeat = Math.floor(currentTime / self.millisecondsPerBeat); + if (self.beatCallback && oldBeat !== self.currentBeat) // If the movement caused the beat to change, then immediately report it to the client. + self.beatCallback(self.currentBeat / self.beatSubdivisions, self.totalBeats / self.beatSubdivisions, self.lastMoment); + + self.currentEvent = 0; + while (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < currentTime) { + self.currentEvent++; + } + if (self.eventCallback && self.currentEvent > 0 && self.noteTimings[self.currentEvent - 1].type === 'event') + self.eventCallback(self.noteTimings[self.currentEvent - 1]); + + // console.log("currentPercent="+currentPercent+ + // " newSeekPercent="+self.newSeekPercent+ + // " percentDifference="+percentDifference+ + // " timeDifference=",timeDifference+ + // " currentBeat="+self.currentBeat+ + // " currentEvent="+self.currentEvent); + } + + self.doTiming = function (timestamp) { + if (!self.startTime) { + self.startTime = timestamp; + } else if (self.justUnpaused) { + // Add the amount we paused to the start time to get the right place. + var timePaused = (timestamp - self.pausedTime); + self.startTime += timePaused; + } + self.justUnpaused = false; + + if (self.justSeeked) { + setCurrentLocation(timestamp); + self.justSeeked = false; + } + if (self.isPaused) { + self.pausedTime = timestamp; + } else if (self.isRunning) { + var currentTime = timestamp - self.startTime; + currentTime += 50; // Add a little slop because this function isn't called exactly. + while (self.noteTimings.length > self.currentEvent && self.noteTimings[self.currentEvent].milliseconds < currentTime) { + if (self.eventCallback && self.noteTimings[self.currentEvent].type === 'event') + self.eventCallback(self.noteTimings[self.currentEvent]); + self.currentEvent++; + } + if (currentTime < self.lastMoment) { + requestAnimationFrame(self.doTiming); + if (self.currentBeat * self.millisecondsPerBeat < currentTime) { + if (self.beatCallback) + self.beatCallback(self.currentBeat / self.beatSubdivisions, self.totalBeats / self.beatSubdivisions, self.lastMoment); + self.currentBeat++; + } + } else if (self.currentBeat <= self.totalBeats) { + // Because of timing issues (for instance, if the browser tab isn't active), the beat callbacks might not have happened when they are supposed to. To keep the client programs from having to deal with that, this will keep calling the loop until all of them have been sent. + if (self.beatCallback) { + self.beatCallback(self.currentBeat / self.beatSubdivisions, self.totalBeats / self.beatSubdivisions, self.lastMoment); + self.currentBeat++; + requestAnimationFrame(self.doTiming); + } + } + + if (self.lineEndCallback && self.lineEndTimings.length && self.lineEndTimings[0].milliseconds <= currentTime) { + self.lineEndCallback(self.lineEndTimings[0]); + self.lineEndTimings.shift(); + } + + if (currentTime >= self.lastMoment && self.eventCallback) + self.eventCallback(null); + } + }; + + self.start = function() { + self.isRunning = true; + if (self.isPaused) { + self.isPaused = false; + self.justUnpaused = true; + } + requestAnimationFrame(self.doTiming); + }; + self.pause = function() { + self.isPaused = true; + self.isRunning = false; + }; + self.reset = function() { + self.currentBeat = 0; + self.currentEvent = 0; + self.startTime = null; + self.pausedTime = null; + if (self.lineEndCallback) { + self.lineEndTimings = getLineEndTimings(self.noteTimings, self.lineEndAnticipation); + } + }; + self.stop = function() { + self.pause(); + self.reset(); + }; + self.setProgress = function(percent) { + // this is passed a value between 0 and 1. + // the effect of this function is to move startTime so that the callbacks happen correctly for the new seek. + if (percent < 0) percent = 0; + if (percent > 1) percent = 1; + + self.newSeekPercent = percent; + self.justSeeked = true; + requestAnimationFrame(self.doTiming); + }; +}; + +function getLineEndTimings(timings, anticipation) { + // Returns an array of milliseconds to call the lineEndCallback. + // This figures out the timing of the beginning of each line and subtracts the anticipation from it. + var callbackTimes = []; + var lastTop = null; + for (var i = 0; i < timings.length; i++) { + var timing = timings[i]; + if (timing.top !== lastTop) { + callbackTimes.push({ milliseconds: timing.milliseconds - anticipation, top: timing.top, bottom: timing.top+timing.height }); + lastTop = timing.top; + } + } + return callbackTimes; +} + +var abc_timing_callbacks = TimingCallbacks; + +// abc_animation.js: handles animating the music in real time. +// Copyright (C) 2014-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + +var animation = {}; + +(function() { + + var timer; + var cursor; + animation.startAnimation = function(paper, tune, options) { + //options.bpm + //options.showCursor + //options.hideCurrentMeasure + //options.hideFinishedMeasures + if (timer) { + timer.stop(); + timer = undefined; + } + + if (options.showCursor) { + cursor = paper.querySelector('.abcjs-cursor'); + if (!cursor) { + cursor = document.createElement('DIV'); + cursor.className = 'abcjs-cursor cursor'; + cursor.style.position = 'absolute'; + + paper.appendChild(cursor); + paper.style.position = 'relative'; + } + } + + function hideMeasures(elements) { + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + if (!element.classList.contains('abcjs-bar')) + element.style.display = "none"; + } + } + + var lastMeasure; + function disappearMeasuresAfter(selector) { + if (lastMeasure) { + var elements = paper.querySelectorAll(lastMeasure); + hideMeasures(elements); + } + lastMeasure = selector; + } + + function disappearMeasuresBefore(selector) { + var elements = paper.querySelectorAll(selector); + hideMeasures(elements); + } + + function measureCallback(selector) { + if (options.hideCurrentMeasure) { + disappearMeasuresBefore(selector); + } else if (options.hideFinishedMeasures) { + disappearMeasuresAfter(selector); + } + } + + function getLineAndMeasure(element) { + return '.abcjs-l' + element.line + '.abcjs-m' + element.measureNumber; + } + + function setCursor(range) { + if (range) { + if (range.measureStart) { + var selector = getLineAndMeasure(range); + if (selector) + measureCallback(selector); + } + if (cursor) { + cursor.style.left = range.left + "px"; + cursor.style.top = range.top + "px"; + cursor.style.width = range.width + "px"; + cursor.style.height = range.height + "px"; + } + } else { + timer.stop(); + timer = undefined; + } + } + + timer = new abc_timing_callbacks(tune, { + qpm: options.bpm, + eventCallback: setCursor + }); + timer.start(); + }; + + animation.pauseAnimation = function(pause) { + if (timer) { + if (pause) + timer.pause(); + else + timer.start(); + } + }; + + animation.stopAnimation = function() { + if (timer) { + timer.stop(); + timer = undefined; + } + }; + +})(); + +var abc_animation = animation; + +/*global window */ + + + +var parseDirective = {}; + +(function() { + var tokenizer; + var warn; + var multilineVars; + var tune; + parseDirective.initialize = function(tokenizer_, warn_, multilineVars_, tune_) { + tokenizer = tokenizer_; + warn = warn_; + multilineVars = multilineVars_; + tune = tune_; + initializeFonts(); + }; + + function initializeFonts() { + multilineVars.annotationfont = { face: "Helvetica", size: 12, weight: "normal", style: "normal", decoration: "none" }; + multilineVars.gchordfont = { face: "Helvetica", size: 12, weight: "normal", style: "normal", decoration: "none" }; + multilineVars.historyfont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; + multilineVars.infofont = { face: "\"Times New Roman\"", size: 14, weight: "normal", style: "italic", decoration: "none" }; + multilineVars.measurefont = { face: "\"Times New Roman\"", size: 14, weight: "normal", style: "italic", decoration: "none" }; + multilineVars.partsfont = { face: "\"Times New Roman\"", size: 15, weight: "normal", style: "normal", decoration: "none" }; + multilineVars.repeatfont = { face: "\"Times New Roman\"", size: 13, weight: "normal", style: "normal", decoration: "none" }; + multilineVars.textfont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; + multilineVars.tripletfont = {face: "Times", size: 11, weight: "normal", style: "italic", decoration: "none"}; + multilineVars.vocalfont = { face: "\"Times New Roman\"", size: 13, weight: "bold", style: "normal", decoration: "none" }; + multilineVars.wordsfont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; + + // These fonts are global for the entire tune. + tune.formatting.composerfont = { face: "\"Times New Roman\"", size: 14, weight: "normal", style: "italic", decoration: "none" }; + tune.formatting.subtitlefont = { face: "\"Times New Roman\"", size: 16, weight: "normal", style: "normal", decoration: "none" }; + tune.formatting.tempofont = { face: "\"Times New Roman\"", size: 15, weight: "bold", style: "normal", decoration: "none" }; + tune.formatting.titlefont = { face: "\"Times New Roman\"", size: 20, weight: "normal", style: "normal", decoration: "none" }; + tune.formatting.footerfont = { face: "\"Times New Roman\"", size: 12, weight: "normal", style: "normal", decoration: "none" }; + tune.formatting.headerfont = { face: "\"Times New Roman\"", size: 12, weight: "normal", style: "normal", decoration: "none" }; + tune.formatting.voicefont = { face: "\"Times New Roman\"", size: 13, weight: "bold", style: "normal", decoration: "none" }; + + // these are the default fonts for these element types. In the printer, these fonts might change as the tune progresses. + tune.formatting.annotationfont = multilineVars.annotationfont; + tune.formatting.gchordfont = multilineVars.gchordfont; + tune.formatting.historyfont = multilineVars.historyfont; + tune.formatting.infofont = multilineVars.infofont; + tune.formatting.measurefont = multilineVars.measurefont; + tune.formatting.partsfont = multilineVars.partsfont; + tune.formatting.repeatfont = multilineVars.repeatfont; + tune.formatting.textfont = multilineVars.textfont; + tune.formatting.tripletfont = multilineVars.tripletfont; + tune.formatting.vocalfont = multilineVars.vocalfont; + tune.formatting.wordsfont = multilineVars.wordsfont; + } + + var fontTypeCanHaveBox = { gchordfont: true, measurefont: true, partsfont: true }; + + var fontTranslation = function(fontFace) { + // This translates Postscript fonts for a web alternative. + // Note that the postscript fonts contain italic and bold info in them, so what is returned is a hash. + + switch (fontFace) { + case "Arial-Italic": + return { face: "Arial", weight: "normal", style: "italic", decoration: "none" }; + case "Arial-Bold": + return { face: "Arial", weight: "bold", style: "normal", decoration: "none" }; + case "Bookman-Demi": + return { face: "Bookman,serif", weight: "bold", style: "normal", decoration: "none" }; + case "Bookman-DemiItalic": + return { face: "Bookman,serif", weight: "bold", style: "italic", decoration: "none" }; + case "Bookman-Light": + return { face: "Bookman,serif", weight: "normal", style: "normal", decoration: "none" }; + case "Bookman-LightItalic": + return { face: "Bookman,serif", weight: "normal", style: "italic", decoration: "none" }; + case "Courier": + return { face: "\"Courier New\"", weight: "normal", style: "normal", decoration: "none" }; + case "Courier-Oblique": + return { face: "\"Courier New\"", weight: "normal", style: "italic", decoration: "none" }; + case "Courier-Bold": + return { face: "\"Courier New\"", weight: "bold", style: "normal", decoration: "none" }; + case "Courier-BoldOblique": + return { face: "\"Courier New\"", weight: "bold", style: "italic", decoration: "none" }; + case "AvantGarde-Book": + return { face: "AvantGarde,Arial", weight: "normal", style: "normal", decoration: "none" }; + case "AvantGarde-BookOblique": + return { face: "AvantGarde,Arial", weight: "normal", style: "italic", decoration: "none" }; + case "AvantGarde-Demi": + case "Avant-Garde-Demi": + return { face: "AvantGarde,Arial", weight: "bold", style: "normal", decoration: "none" }; + case "AvantGarde-DemiOblique": + return { face: "AvantGarde,Arial", weight: "bold", style: "italic", decoration: "none" }; + case "Helvetica-Oblique": + return { face: "Helvetica", weight: "normal", style: "italic", decoration: "none" }; + case "Helvetica-Bold": + return { face: "Helvetica", weight: "bold", style: "normal", decoration: "none" }; + case "Helvetica-BoldOblique": + return { face: "Helvetica", weight: "bold", style: "italic", decoration: "none" }; + case "Helvetica-Narrow": + return { face: "\"Helvetica Narrow\",Helvetica", weight: "normal", style: "normal", decoration: "none" }; + case "Helvetica-Narrow-Oblique": + return { face: "\"Helvetica Narrow\",Helvetica", weight: "normal", style: "italic", decoration: "none" }; + case "Helvetica-Narrow-Bold": + return { face: "\"Helvetica Narrow\",Helvetica", weight: "bold", style: "normal", decoration: "none" }; + case "Helvetica-Narrow-BoldOblique": + return { face: "\"Helvetica Narrow\",Helvetica", weight: "bold", style: "italic", decoration: "none" }; + case "Palatino-Roman": + return { face: "Palatino", weight: "normal", style: "normal", decoration: "none" }; + case "Palatino-Italic": + return { face: "Palatino", weight: "normal", style: "italic", decoration: "none" }; + case "Palatino-Bold": + return { face: "Palatino", weight: "bold", style: "normal", decoration: "none" }; + case "Palatino-BoldItalic": + return { face: "Palatino", weight: "bold", style: "italic", decoration: "none" }; + case "NewCenturySchlbk-Roman": + return { face: "\"New Century\",serif", weight: "normal", style: "normal", decoration: "none" }; + case "NewCenturySchlbk-Italic": + return { face: "\"New Century\",serif", weight: "normal", style: "italic", decoration: "none" }; + case "NewCenturySchlbk-Bold": + return { face: "\"New Century\",serif", weight: "bold", style: "normal", decoration: "none" }; + case "NewCenturySchlbk-BoldItalic": + return { face: "\"New Century\",serif", weight: "bold", style: "italic", decoration: "none" }; + case "Times": + case "Times-Roman": + case "Times-Narrow": + case "Times-Courier": + case "Times-New-Roman": + return { face: "\"Times New Roman\"", weight: "normal", style: "normal", decoration: "none" }; + case "Times-Italic": + case "Times-Italics": + return { face: "\"Times New Roman\"", weight: "normal", style: "italic", decoration: "none" }; + case "Times-Bold": + return { face: "\"Times New Roman\"", weight: "bold", style: "normal", decoration: "none" }; + case "Times-BoldItalic": + return { face: "\"Times New Roman\"", weight: "bold", style: "italic", decoration: "none" }; + case "ZapfChancery-MediumItalic": + return { face: "\"Zapf Chancery\",cursive,serif", weight: "normal", style: "normal", decoration: "none" }; + default: + return null; + } + }; + + var getFontParameter = function(tokens, currentSetting, str, position, cmd) { + // Every font parameter has the following format: + // + // Where: + // face: either a standard web font name, or a postscript font, enumerated in fontTranslation. This could also be an * or be missing if the face shouldn't change. + // utf8: This is optional, and specifies utf8. That's all that is supported so the field is just silently ignored. + // size: The size, in pixels. This may be omitted if the size is not changing. + // modifiers: zero or more of "bold", "italic", "underline" + // box: Only applies to the measure numbers, gchords, and the parts. If present, then a box is drawn around the characters. + // If face is present, then all the modifiers are cleared. If face is absent, then the modifiers are illegal. + // The face can be a single word, a set of words separated by hyphens, or a quoted string. + // + // So, in practicality, there are three types of font definitions: a number only, an asterisk and a number only, or the full definition (with an optional size). + function processNumberOnly() { + var size = parseInt(tokens[0].token); + tokens.shift(); + if (!currentSetting) { + warn("Can't set just the size of the font since there is no default value.", str, position); + return { face: "\"Times New Roman\"", weight: "normal", style: "normal", decoration: "none", size: size}; + } + if (tokens.length === 0) { + return { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size}; + } + if (tokens.length === 1 && tokens[0].token === "box" && fontTypeCanHaveBox[cmd]) + return { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size, box: true}; + warn("Extra parameters in font definition.", str, position); + return { face: currentSetting.face, weight: currentSetting.weight, style: currentSetting.style, decoration: currentSetting.decoration, size: size}; + } + + // format 1: asterisk and number only + if (tokens[0].token === '*') { + tokens.shift(); + if (tokens[0].type === 'number') + return processNumberOnly(); + else { + warn("Expected font size number after *.", str, position); + } + } + + // format 2: number only + if (tokens[0].type === 'number') { + return processNumberOnly(); + } + + // format 3: whole definition + var face = []; + var size; + var weight = "normal"; + var style = "normal"; + var decoration = "none"; + var box = false; + var state = 'face'; + var hyphenLast = false; + while (tokens.length) { + var currToken = tokens.shift(); + var word = currToken.token.toLowerCase(); + switch (state) { + case 'face': + if (hyphenLast || (word !== 'utf' && currToken.type !== 'number' && word !== "bold" && word !== "italic" && word !== "underline" && word !== "box")) { + if (face.length > 0 && currToken.token === '-') { + hyphenLast = true; + face[face.length-1] = face[face.length-1] + currToken.token; + } + else { + if (hyphenLast) { + hyphenLast = false; + face[face.length-1] = face[face.length-1] + currToken.token; + } else + face.push(currToken.token); + } + } else { + if (currToken.type === 'number') { + if (size) { + warn("Font size specified twice in font definition.", str, position); + } else { + size = currToken.token; + } + state = 'modifier'; + } else if (word === "bold") + weight = "bold"; + else if (word === "italic") + style = "italic"; + else if (word === "underline") + decoration = "underline"; + else if (word === "box") { + if (fontTypeCanHaveBox[cmd]) + box = true; + else + warn("This font style doesn't support \"box\"", str, position); + state = "finished"; + } else if (word === "utf") { + currToken = tokens.shift(); // this gets rid of the "8" after "utf" + state = "size"; + } else + warn("Unknown parameter " + currToken.token + " in font definition.", str, position); + } + break; + case "size": + if (currToken.type === 'number') { + if (size) { + warn("Font size specified twice in font definition.", str, position); + } else { + size = currToken.token; + } + } else { + warn("Expected font size in font definition.", str, position); + } + state = 'modifier'; + break; + case "modifier": + if (word === "bold") + weight = "bold"; + else if (word === "italic") + style = "italic"; + else if (word === "underline") + decoration = "underline"; + else if (word === "box") { + if (fontTypeCanHaveBox[cmd]) + box = true; + else + warn("This font style doesn't support \"box\"", str, position); + state = "finished"; + } else + warn("Unknown parameter " + currToken.token + " in font definition.", str, position); + break; + case "finished": + warn("Extra characters found after \"box\" in font definition.", str, position); + break; + } + } + + if (size === undefined) { + if (!currentSetting) { + warn("Must specify the size of the font since there is no default value.", str, position); + size = 12; + } else + size = currentSetting.size; + } else + size = parseFloat(size); + + face = face.join(' '); + var psFont = fontTranslation(face); + var font = {}; + if (psFont) { + font.face = psFont.face; + font.weight = psFont.weight; + font.style = psFont.style; + font.decoration = psFont.decoration; + font.size = size; + if (box) + font.box = true; + return font; + } + font.face = face; + font.weight = weight; + font.style = style; + font.decoration = decoration; + font.size = size; + if (box) + font.box = true; + return font; + }; + + var getChangingFont = function(cmd, tokens, str) { + if (tokens.length === 0) + return "Directive \"" + cmd + "\" requires a font as a parameter."; + multilineVars[cmd] = getFontParameter(tokens, multilineVars[cmd], str, 0, cmd); + if (multilineVars.is_in_header) // If the font appears in the header, then it becomes the default font. + tune.formatting[cmd] = multilineVars[cmd]; + return null; + }; + var getGlobalFont = function(cmd, tokens, str) { + if (tokens.length === 0) + return "Directive \"" + cmd + "\" requires a font as a parameter."; + tune.formatting[cmd] = getFontParameter(tokens, tune.formatting[cmd], str, 0, cmd); + return null; + }; + + var setScale = function(cmd, tokens) { + var scratch = ""; + abc_common.each(tokens, function(tok) { + scratch += tok.token; + }); + var num = parseFloat(scratch); + if (isNaN(num) || num === 0) + return "Directive \"" + cmd + "\" requires a number as a parameter."; + tune.formatting.scale = num; + + }; + + var getRequiredMeasurement = function(cmd, tokens) { + var points = tokenizer.getMeasurement(tokens); + if (points.used === 0 || tokens.length !== 0) + return { error: "Directive \"" + cmd + "\" requires a measurement as a parameter."}; + return points.value; + }; + var oneParameterMeasurement = function(cmd, tokens) { + var points = tokenizer.getMeasurement(tokens); + if (points.used === 0 || tokens.length !== 0) + return "Directive \"" + cmd + "\" requires a measurement as a parameter."; + tune.formatting[cmd] = points.value; + return null; + }; + + var addMultilineVar = function(key, cmd, tokens, min, max) { + if (tokens.length !== 1 || tokens[0].type !== 'number') + return "Directive \"" + cmd + "\" requires a number as a parameter."; + var i = tokens[0].intt; + if (min !== undefined && i < min) + return "Directive \"" + cmd + "\" requires a number greater than or equal to " + min + " as a parameter."; + if (max !== undefined && i > max) + return "Directive \"" + cmd + "\" requires a number less than or equal to " + max + " as a parameter."; + multilineVars[key] = i; + return null; + }; + + var addMultilineVarBool = function(key, cmd, tokens) { + if (tokens.length === 1 && (tokens[0].token === 'true' || tokens[0].token === 'false')) { + multilineVars[key] = tokens[0].token === 'true'; + return null; + } + var str = addMultilineVar(key, cmd, tokens, 0, 1); + if (str !== null) return str; + multilineVars[key] = (multilineVars[key] === 1); + return null; + }; + + var addMultilineVarOneParamChoice = function(key, cmd, tokens, choices) { + if (tokens.length !== 1) + return "Directive \"" + cmd + "\" requires one of [ " + choices.join(", ") + " ] as a parameter."; + var choice = tokens[0].token; + var found = false; + for (var i = 0; !found && i < choices.length; i++) { + if (choices[i] === choice) + found = true; + } + if (!found) + return "Directive \"" + cmd + "\" requires one of [ " + choices.join(", ") + " ] as a parameter."; + multilineVars[key] = choice; + return null; + }; + + var midiCmdParam0 = [ + "nobarlines", + "barlines", + "beataccents", + "nobeataccents", + "droneon", + "droneoff", + "drumon", + "drumoff", + "fermatafixed", + "fermataproportional", + "gchordon", + "gchordoff", + "controlcombo", + "temperamentnormal", + "noportamento" + ]; + var midiCmdParam1String = [ + "gchord", + "ptstress", + "beatstring" + ]; + var midiCmdParam1Integer = [ + "bassvol", + "chordvol", + "c", + "channel", + "beatmod", + "deltaloudness", + "drumbars", + "gracedivider", + "makechordchannels", + "randomchordattack", + "chordattack", + "stressmodel", + "transpose", + "rtranspose", + "vol", + "volinc" + ]; + var midiCmdParam1Integer1OptionalInteger = [ + "program" + ]; + var midiCmdParam2Integer = [ + "ratio", + "snt", + "bendvelocity", + "pitchbend", + "control", + "temperamentlinear" + ]; + var midiCmdParam4Integer = [ + "beat" + ]; + var midiCmdParam5Integer = [ + "drone" + ]; + var midiCmdParam1String1Integer = [ + "portamento" + ]; + var midiCmdParamFraction = [ + "expand", + "grace", + "trim" + ]; + var midiCmdParam1StringVariableIntegers = [ + "drum", + "chordname" + ]; + + var parseMidiCommand = function(midi, tune, restOfString) { + var midi_cmd = midi.shift().token; + var midi_params = []; + if (midiCmdParam0.indexOf(midi_cmd) >= 0) { + // NO PARAMETERS + if (midi.length !== 0) + warn("Unexpected parameter in MIDI " + midi_cmd, restOfString, 0); + } else if (midiCmdParam1String.indexOf(midi_cmd) >= 0) { + // ONE STRING PARAMETER + if (midi.length !== 1) + warn("Expected one parameter in MIDI " + midi_cmd, restOfString, 0); + else + midi_params.push(midi[0].token); + } else if (midiCmdParam1Integer.indexOf(midi_cmd) >= 0) { + // ONE INT PARAMETER + if (midi.length !== 1) + warn("Expected one parameter in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number") + warn("Expected one integer parameter in MIDI " + midi_cmd, restOfString, 0); + else + midi_params.push(midi[0].intt); + } else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) { + // ONE INT PARAMETER, ONE OPTIONAL PARAMETER + if (midi.length !== 1 && midi.length !== 2) + warn("Expected one or two parameters in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number") + warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); + else if (midi.length === 2 && midi[1].type !== "number") + warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); + else { + midi_params.push(midi[0].intt); + if (midi.length === 2) + midi_params.push(midi[1].intt); + } + } else if (midiCmdParam2Integer.indexOf(midi_cmd) >= 0) { + // TWO INT PARAMETERS + if (midi.length !== 2) + warn("Expected two parameters in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number" || midi[1].type !== "number") + warn("Expected two integer parameters in MIDI " + midi_cmd, restOfString, 0); + else { + midi_params.push(midi[0].intt); + midi_params.push(midi[1].intt); + } + } else if (midiCmdParam1String1Integer.indexOf(midi_cmd) >= 0) { + // ONE STRING PARAMETER, ONE INT PARAMETER + if (midi.length !== 2) + warn("Expected two parameters in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "alpha" || midi[1].type !== "number") + warn("Expected one string and one integer parameters in MIDI " + midi_cmd, restOfString, 0); + else { + midi_params.push(midi[0].token); + midi_params.push(midi[1].intt); + } + } else if (midi_cmd === 'drummap') { + // BUILD AN OBJECT OF ABC NOTE => MIDI NOTE + if (midi.length === 2 && midi[0].type === 'alpha' && midi[1].type === 'number') { + if (!tune.formatting) tune.formatting = {}; + if (!tune.formatting.midi) tune.formatting.midi = {}; + if (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {}; + tune.formatting.midi.drummap[midi[0].token] = midi[1].intt; + midi_params = tune.formatting.midi.drummap; + } else if (midi.length === 3 && midi[0].type === 'punct' && midi[1].type === 'alpha' && midi[2].type === 'number') { + if (!tune.formatting) tune.formatting = {}; + if (!tune.formatting.midi) tune.formatting.midi = {}; + if (!tune.formatting.midi.drummap) tune.formatting.midi.drummap = {}; + tune.formatting.midi.drummap[midi[0].token+midi[1].token] = midi[2].intt; + midi_params = tune.formatting.midi.drummap; + } else { + warn("Expected one note name and one integer parameter in MIDI " + midi_cmd, restOfString, 0); + } + } else if (midiCmdParamFraction.indexOf(midi_cmd) >= 0) { + // ONE FRACTION PARAMETER + if (midi.length !== 3) + warn("Expected fraction parameter in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number" || midi[1].token !== "/" || midi[2].type !== "number") + warn("Expected fraction parameter in MIDI " + midi_cmd, restOfString, 0); + else { + midi_params.push(midi[0].intt); + midi_params.push(midi[2].intt); + } + } else if (midiCmdParam4Integer.indexOf(midi_cmd) >= 0) { + // FOUR INT PARAMETERS + if (midi.length !== 4) + warn("Expected four parameters in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number" || midi[1].type !== "number" || midi[2].type !== "number" || midi[3].type !== "number") + warn("Expected four integer parameters in MIDI " + midi_cmd, restOfString, 0); + else { + midi_params.push(midi[0].intt); + midi_params.push(midi[1].intt); + midi_params.push(midi[2].intt); + midi_params.push(midi[3].intt); + } + } else if (midiCmdParam5Integer.indexOf(midi_cmd) >= 0) { + // FIVE INT PARAMETERS + if (midi.length !== 5) + warn("Expected five parameters in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number" || midi[1].type !== "number" || midi[2].type !== "number" || midi[3].type !== "number" || midi[4].type !== "number") + warn("Expected five integer parameters in MIDI " + midi_cmd, restOfString, 0); + else { + midi_params.push(midi[0].intt); + midi_params.push(midi[1].intt); + midi_params.push(midi[2].intt); + midi_params.push(midi[3].intt); + midi_params.push(midi[4].intt); + } + } else if (midiCmdParam1Integer1OptionalInteger.indexOf(midi_cmd) >= 0) { + // ONE INT PARAMETER, ONE OPTIONAL OCTAVE PARAMETER + if (midi.length !== 1 || midi.length !== 4) + warn("Expected one or two parameters in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "number") + warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); + else if (midi.length === 4) { + if (midi[1].token !== "octave") + warn("Expected octave parameter in MIDI " + midi_cmd, restOfString, 0); + if (midi[2].token !== "=") + warn("Expected octave parameter in MIDI " + midi_cmd, restOfString, 0); + if (midi[3].type !== "number") + warn("Expected integer parameter for octave in MIDI " + midi_cmd, restOfString, 0); + } else { + midi_params.push(midi[0].intt); + if (midi.length === 4) + midi_params.push(midi[3].intt); + } + } else if (midiCmdParam1StringVariableIntegers.indexOf(midi_cmd) >= 0) { + // ONE STRING, VARIABLE INT PARAMETERS + if (midi.length < 2) + warn("Expected string parameter and at least one integer parameter in MIDI " + midi_cmd, restOfString, 0); + else if (midi[0].type !== "alpha") + warn("Expected string parameter and at least one integer parameter in MIDI " + midi_cmd, restOfString, 0); + else { + var p = midi.shift(); + midi_params.push(p.token); + while (midi.length > 0) { + p = midi.shift(); + if (p.type !== "number") + warn("Expected integer parameter in MIDI " + midi_cmd, restOfString, 0); + midi_params.push(p.intt); + } + } + } + + if (tune.hasBeginMusic()) + tune.appendElement('midi', -1, -1, { cmd: midi_cmd, params: midi_params }); + else { + if (tune.formatting['midi'] === undefined) + tune.formatting['midi'] = {}; + tune.formatting['midi'][midi_cmd] = midi_params; + } + }; + + parseDirective.parseFontChangeLine = function(textstr) { + var textParts = textstr.split('$'); + if (textParts.length > 1 && multilineVars.setfont) { + var textarr = [ { text: textParts[0] }]; + for (var i = 1; i < textParts.length; i++) { + if (textParts[i].charAt(0) === '0') + textarr.push({ text: textParts[i].substring(1) }); + else if (textParts[i].charAt(0) === '1' && multilineVars.setfont[1]) + textarr.push({font: multilineVars.setfont[1], text: textParts[i].substring(1) }); + else if (textParts[i].charAt(0) === '2' && multilineVars.setfont[2]) + textarr.push({font: multilineVars.setfont[2], text: textParts[i].substring(1) }); + else if (textParts[i].charAt(0) === '3' && multilineVars.setfont[3]) + textarr.push({font: multilineVars.setfont[3], text: textParts[i].substring(1) }); + else if (textParts[i].charAt(0) === '4' && multilineVars.setfont[4]) + textarr.push({font: multilineVars.setfont[4], text: textParts[i].substring(1) }); + else + textarr[textarr.length-1].text += '$' + textParts[i]; + } + if (textarr.length > 1) + return textarr; + } + return textstr; + }; + + var positionChoices = [ 'auto', 'above', 'below', 'hidden' ]; + parseDirective.addDirective = function(str) { + var tokens = tokenizer.tokenize(str, 0, str.length); // 3 or more % in a row, or just spaces after %% is just a comment + if (tokens.length === 0 || tokens[0].type !== 'alpha') return null; + var restOfString = str.substring(str.indexOf(tokens[0].token)+tokens[0].token.length); + restOfString = tokenizer.stripComment(restOfString); + var cmd = tokens.shift().token.toLowerCase(); + var scratch = ""; + switch (cmd) + { + // The following directives were added to abc_parser_lint, but haven't been implemented here. + // Most of them are direct translations from the directives that will be parsed in. See abcm2ps's format.txt for info on each of these. + // alignbars: { type: "number", optional: true }, + // aligncomposer: { type: "string", Enum: [ 'left', 'center','right' ], optional: true }, + // bstemdown: { type: "boolean", optional: true }, + // continueall: { type: "boolean", optional: true }, + // dynalign: { type: "boolean", optional: true }, + // exprabove: { type: "boolean", optional: true }, + // exprbelow: { type: "boolean", optional: true }, + // gchordbox: { type: "boolean", optional: true }, + // graceslurs: { type: "boolean", optional: true }, + // gracespacebefore: { type: "number", optional: true }, + // gracespaceinside: { type: "number", optional: true }, + // gracespaceafter: { type: "number", optional: true }, + // infospace: { type: "number", optional: true }, + // lineskipfac: { type: "number", optional: true }, + // maxshrink: { type: "number", optional: true }, + // maxstaffsep: { type: "number", optional: true }, + // maxsysstaffsep: { type: "number", optional: true }, + // notespacingfactor: { type: "number", optional: true }, + // parskipfac: { type: "number", optional: true }, + // slurheight: { type: "number", optional: true }, + // splittune: { type: "boolean", optional: true }, + // squarebreve: { type: "boolean", optional: true }, + // stemheight: { type: "number", optional: true }, + // straightflags: { type: "boolean", optional: true }, + // stretchstaff: { type: "boolean", optional: true }, + // titleformat: { type: "string", optional: true }, + case "bagpipes":tune.formatting.bagpipes = true;break; + case "flatbeams":tune.formatting.flatbeams = true;break; + case "landscape":multilineVars.landscape = true;break; + case "papersize":multilineVars.papersize = restOfString;break; + case "slurgraces":tune.formatting.slurgraces = true;break; + case "stretchlast":tune.formatting.stretchlast = true;break; + case "titlecaps":multilineVars.titlecaps = true;break; + case "titleleft":tune.formatting.titleleft = true;break; + case "measurebox":tune.formatting.measurebox = true;break; + + case "vocal": return addMultilineVarOneParamChoice("vocalPosition", cmd, tokens, positionChoices); + case "dynamic": return addMultilineVarOneParamChoice("dynamicPosition", cmd, tokens, positionChoices); + case "gchord": return addMultilineVarOneParamChoice("chordPosition", cmd, tokens, positionChoices); + case "ornament": return addMultilineVarOneParamChoice("ornamentPosition", cmd, tokens, positionChoices); + case "volume": return addMultilineVarOneParamChoice("volumePosition", cmd, tokens, positionChoices); + + case "botmargin": + case "botspace": + case "composerspace": + case "indent": + case "leftmargin": + case "linesep": + case "musicspace": + case "partsspace": + case "pageheight": + case "pagewidth": + case "rightmargin": + case "staffsep": + case "staffwidth": + case "subtitlespace": + case "sysstaffsep": + case "systemsep": + case "textspace": + case "titlespace": + case "topmargin": + case "topspace": + case "vocalspace": + case "wordsspace": + return oneParameterMeasurement(cmd, tokens); + case "voicescale": + if (tokens.length !== 1 || tokens[0].type !== 'number') + return "voicescale requires one float as a parameter"; + var voiceScale = tokens.shift(); + if (multilineVars.currentVoice) { + multilineVars.currentVoice.scale = voiceScale.floatt; + tune.changeVoiceScale(multilineVars.currentVoice.scale); + } + return null; + case "vskip": + var vskip = getRequiredMeasurement(cmd, tokens); + if (vskip.error) + return vskip.error; + tune.addSpacing(vskip); + return null; + case "scale": + setScale(cmd, tokens); + break; + case "sep": + if (tokens.length === 0) + tune.addSeparator(); + else { + var points = tokenizer.getMeasurement(tokens); + if (points.used === 0) + return "Directive \"" + cmd + "\" requires 3 numbers: space above, space below, length of line"; + var spaceAbove = points.value; + + points = tokenizer.getMeasurement(tokens); + if (points.used === 0) + return "Directive \"" + cmd + "\" requires 3 numbers: space above, space below, length of line"; + var spaceBelow = points.value; + + points = tokenizer.getMeasurement(tokens); + if (points.used === 0 || tokens.length !== 0) + return "Directive \"" + cmd + "\" requires 3 numbers: space above, space below, length of line"; + var lenLine = points.value; + tune.addSeparator(spaceAbove, spaceBelow, lenLine); + } + break; + case "barsperstaff": + scratch = addMultilineVar('barsperstaff', cmd, tokens); + if (scratch !== null) return scratch; + break; + case "staffnonote": + // The sense of the boolean is opposite here. "0" means true. + if (tokens.length !== 1) + return "Directive staffnonote requires one parameter: 0 or 1"; + if (tokens[0].token === '0') + multilineVars.staffnonote = true; + else if (tokens[0].token === '1') + multilineVars.staffnonote = false; + else + return "Directive staffnonote requires one parameter: 0 or 1 (received " + tokens[0].token + ')'; + break; + case "printtempo": + scratch = addMultilineVarBool('printTempo', cmd, tokens); + if (scratch !== null) return scratch; + break; + case "partsbox": + scratch = addMultilineVarBool('partsBox', cmd, tokens); + if (scratch !== null) return scratch; + multilineVars.partsfont.box = multilineVars.partsBox; + break; + case "freegchord": + scratch = addMultilineVarBool('freegchord', cmd, tokens); + if (scratch !== null) return scratch; + break; + case "measurenb": + case "barnumbers": + scratch = addMultilineVar('barNumbers', cmd, tokens); + if (scratch !== null) return scratch; + break; + case "setbarnb": + if (tokens.length !== 1 || tokens[0].type !== 'number') { + return 'Directive setbarnb requires a number as a parameter.'; + } + multilineVars.currBarNumber = tune.setBarNumberImmediate(tokens[0].intt); + break; + case "begintext": + multilineVars.inTextBlock = true; + break; + case "continueall": + multilineVars.continueall = true; + break; + case "beginps": + multilineVars.inPsBlock = true; + warn("Postscript ignored", str, 0); + break; + case "deco": + if (restOfString.length > 0) + multilineVars.ignoredDecorations.push(restOfString.substring(0, restOfString.indexOf(' '))); + warn("Decoration redefinition ignored", str, 0); + break; + case "text": + var textstr = tokenizer.translateString(restOfString); + tune.addText(parseDirective.parseFontChangeLine(textstr)); + break; + case "center": + var centerstr = tokenizer.translateString(restOfString); + tune.addCentered(parseDirective.parseFontChangeLine(centerstr)); + break; + case "font": + // don't need to do anything for this; it is a useless directive + break; + case "setfont": + var sfTokens = tokenizer.tokenize(restOfString, 0, restOfString.length); +// var sfDone = false; + if (sfTokens.length >= 4) { + if (sfTokens[0].token === '-' && sfTokens[1].type === 'number') { + var sfNum = parseInt(sfTokens[1].token); + if (sfNum >= 1 && sfNum <= 4) { + if (!multilineVars.setfont) + multilineVars.setfont = []; + sfTokens.shift(); + sfTokens.shift(); + multilineVars.setfont[sfNum] = getFontParameter(sfTokens, multilineVars.setfont[sfNum], str, 0, 'setfont'); +// var sfSize = sfTokens.pop(); +// if (sfSize.type === 'number') { +// sfSize = parseInt(sfSize.token); +// var sfFontName = ''; +// for (var sfi = 2; sfi < sfTokens.length; sfi++) +// sfFontName += sfTokens[sfi].token; +// multilineVars.setfont[sfNum] = { face: sfFontName, size: sfSize }; +// sfDone = true; +// } + } + } + } +// if (!sfDone) +// return "Bad parameters: " + cmd; + break; + case "gchordfont": + case "partsfont": + case "tripletfont": + case "vocalfont": + case "textfont": + case "annotationfont": + case "historyfont": + case "infofont": + case "measurefont": + case "repeatfont": + case "wordsfont": + return getChangingFont(cmd, tokens, str); + case "composerfont": + case "subtitlefont": + case "tempofont": + case "titlefont": + case "voicefont": + case "footerfont": + case "headerfont": + return getGlobalFont(cmd, tokens, str); + case "barlabelfont": + case "barnumberfont": + case "barnumfont": + return getChangingFont("measurefont", tokens, str); + case "staves": + case "score": + multilineVars.score_is_present = true; + var addVoice = function(id, newStaff, bracket, brace, continueBar) { + if (newStaff || multilineVars.staves.length === 0) { + multilineVars.staves.push({index: multilineVars.staves.length, numVoices: 0}); + } + var staff = abc_common.last(multilineVars.staves); + if (bracket !== undefined) staff.bracket = bracket; + if (brace !== undefined) staff.brace = brace; + if (continueBar) staff.connectBarLines = 'end'; + if (multilineVars.voices[id] === undefined) { + multilineVars.voices[id] = {staffNum: staff.index, index: staff.numVoices}; + staff.numVoices++; + } + }; + + var openParen = false; + var openBracket = false; + var openBrace = false; + var justOpenParen = false; + var justOpenBracket = false; + var justOpenBrace = false; + var continueBar = false; + var lastVoice; + var addContinueBar = function() { + continueBar = true; + if (lastVoice) { + var ty = 'start'; + if (lastVoice.staffNum > 0) { + if (multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'start' || + multilineVars.staves[lastVoice.staffNum-1].connectBarLines === 'continue') + ty = 'continue'; + } + multilineVars.staves[lastVoice.staffNum].connectBarLines = ty; + } + }; + while (tokens.length) { + var t = tokens.shift(); + switch (t.token) { + case '(': + if (openParen) warn("Can't nest parenthesis in %%score", str, t.start); + else {openParen = true;justOpenParen = true;} + break; + case ')': + if (!openParen || justOpenParen) warn("Unexpected close parenthesis in %%score", str, t.start); + else openParen = false; + break; + case '[': + if (openBracket) warn("Can't nest brackets in %%score", str, t.start); + else {openBracket = true;justOpenBracket = true;} + break; + case ']': + if (!openBracket || justOpenBracket) warn("Unexpected close bracket in %%score", str, t.start); + else {openBracket = false;multilineVars.staves[lastVoice.staffNum].bracket = 'end';} + break; + case '{': + if (openBrace ) warn("Can't nest braces in %%score", str, t.start); + else {openBrace = true;justOpenBrace = true;} + break; + case '}': + if (!openBrace || justOpenBrace) warn("Unexpected close brace in %%score", str, t.start); + else {openBrace = false;multilineVars.staves[lastVoice.staffNum].brace = 'end';} + break; + case '|': + addContinueBar(); + break; + default: + var vc = ""; + while (t.type === 'alpha' || t.type === 'number') { + vc += t.token; + if (t.continueId) + t = tokens.shift(); + else + break; + } + var newStaff = !openParen || justOpenParen; + var bracket = justOpenBracket ? 'start' : openBracket ? 'continue' : undefined; + var brace = justOpenBrace ? 'start' : openBrace ? 'continue' : undefined; + addVoice(vc, newStaff, bracket, brace, continueBar); + justOpenParen = false; + justOpenBracket = false; + justOpenBrace = false; + continueBar = false; + lastVoice = multilineVars.voices[vc]; + if (cmd === 'staves') + addContinueBar(); + break; + } + } + break; + + case "newpage": + var pgNum = tokenizer.getInt(restOfString); + tune.addNewPage(pgNum.digits === 0 ? -1 : pgNum.value); + break; + + case "abc": + var arr = restOfString.split(' '); + switch (arr[0]) { + case "-copyright": + case "-creator": + case "-edited-by": + case "-version": + case "-charset": + var subCmd = arr.shift(); + tune.addMetaText(cmd+subCmd, arr.join(' ')); + break; + default: + return "Unknown directive: " + cmd+arr[0]; + } + break; + case "header": + case "footer": + var footerStr = tokenizer.getMeat(restOfString, 0, restOfString.length); + footerStr = restOfString.substring(footerStr.start, footerStr.end); + if (footerStr.charAt(0) === '"' && footerStr.charAt(footerStr.length-1) === '"' ) + footerStr = footerStr.substring(1, footerStr.length-1); + var footerArr = footerStr.split('\t'); + var footer = {}; + if (footerArr.length === 1) + footer = { left: "", center: footerArr[0], right: "" }; + else if (footerArr.length === 2) + footer = { left: footerArr[0], center: footerArr[1], right: "" }; + else + footer = { left: footerArr[0], center: footerArr[1], right: footerArr[2] }; + if (footerArr.length > 3) + warn("Too many tabs in " + cmd + ": " + footerArr.length + " found.", restOfString, 0); + + tune.addMetaTextObj(cmd, footer); + break; + + case "midi": + var midi = tokenizer.tokenize(restOfString, 0, restOfString.length, true); + if (midi.length > 0 && midi[0].token === '=') + midi.shift(); + if (midi.length === 0) + warn("Expected midi command", restOfString, 0); + else + parseMidiCommand(midi, tune, restOfString); + break; + + case "map": + case "percmap": + case "playtempo": + case "auquality": + case "continuous": + case "nobarcheck": + // TODO-PER: Actually handle the parameters of these + tune.formatting[cmd] = restOfString; + break; + default: + return "Unknown directive: " + cmd; + } + return null; + }; + parseDirective.globalFormatting = function(formatHash) { + for (var cmd in formatHash) { + if (formatHash.hasOwnProperty(cmd)) { + var value = ''+formatHash[cmd]; + var tokens = tokenizer.tokenize(value, 0, value.length); + var scratch; + switch (cmd) { + case "titlefont": + case "gchordfont": + case "composerfont": + case "footerfont": + case "headerfont": + case "historyfont": + case "infofont": + case "measurefont": + case "partsfont": + case "repeatfont": + case "subtitlefont": + case "tempofont": + case "textfont": + case "voicefont": + case "tripletfont": + case "vocalfont": + case "wordsfont": + case "annotationfont": + getChangingFont(cmd, tokens, value); + break; + case "scale": + setScale(cmd, tokens); + break; + case "partsbox": + scratch = addMultilineVarBool('partsBox', cmd, tokens); + if (scratch !== null) warn(scratch); + multilineVars.partsfont.box = multilineVars.partsBox; + break; + case "freegchord": + scratch = addMultilineVarBool('freegchord', cmd, tokens); + if (scratch !== null) warn(scratch); + default: + warn("Formatting directive unrecognized: ", cmd, 0); + } + } + } + }; +})(); + +var abc_parse_directive = parseDirective; + +// abc_transpose.js: Handles the automatic transposition of key signatures, chord symbols, and notes. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var transpose = {}; + +var keyIndex = { + 'C': 0, + 'C#': 1, + 'Db': 1, + 'D': 2, + 'D#': 3, + 'Eb': 3, + 'E': 4, + 'F': 5, + 'F#': 6, + 'Gb': 6, + 'G': 7, + 'G#': 8, + 'Ab': 8, + 'A': 9, + 'A#': 10, + 'Bb': 10, + 'B': 11 +}; +var newKey = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'F#', 'G', 'Ab', 'A', 'Bb', 'B']; +var newKeyMinor = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'Bb', 'B']; + +transpose.keySignature = function(multilineVars, keys, keyName, root, acc, localTranspose) { + if (!localTranspose) localTranspose = 0; + multilineVars.localTransposeVerticalMovement = 0; + multilineVars.localTransposePreferFlats = false; + var k = keys[keyName]; + if (!k) return multilineVars.key; // If the key isn't in the list, it is non-standard. We won't attempt to transpose it. + multilineVars.localTranspose = (multilineVars.globalTranspose ? multilineVars.globalTranspose : 0) + localTranspose; + + if (!multilineVars.localTranspose) + return { accidentals: k, root: root, acc: acc }; + multilineVars.globalTransposeOrigKeySig = k; + if (multilineVars.localTranspose % 12 === 0) { + multilineVars.localTransposeVerticalMovement = (multilineVars.localTranspose / 12) * 7; + return { accidentals: k, root: root, acc: acc }; + } + + var baseKey = keyName[0]; + if (keyName[1] === 'b' || keyName[1] === '#') { + baseKey += keyName[1]; + keyName = keyName.substr(2); + } else + keyName = keyName.substr(1); + var index = keyIndex[baseKey] + multilineVars.localTranspose; + while (index < 0) index += 12; + if (index > 11) index = index % 12; + var newKeyName = (keyName[0] === 'm' ? newKeyMinor[index] : newKey[index]); + var transposedKey = newKeyName + keyName; + var newKeySig = keys[transposedKey]; + if (newKeySig.length > 0 && newKeySig[0].acc === 'flat') + multilineVars.localTransposePreferFlats = true; + var distance = transposedKey.charCodeAt(0) - baseKey.charCodeAt(0); + if (multilineVars.localTranspose > 0) { + if (distance < 0) + distance += 7; + else if (distance === 0) { + // There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A. + // If the distance is positive (we are raising pitch), and the change is higher (that is, Ab -> A), then raise an octave. + // This test is easier because we know the keys are not equal (or we wouldn't get this far), so if the base key is a flat key, then + // the transposed key must be higher. Likewise, if the transposed key is sharp, then the base key must be lower. And one + // of those two things must be true because they are not both natural. + if (baseKey[1] === '#' || transposedKey[1] === 'b') + distance += 7; + } + } else if (multilineVars.localTranspose < 0) { + if (distance > 0) + distance -= 7; + else if (distance === 0) { + // There's a funny thing that happens when the key changes only an accidental's distance, for instance, from Ab to A. + // If the distance is negative (we are dropping pitch), and the change is lower (that is, A -> Ab), then drop an octave. + if (baseKey[1] === 'b' || transposedKey[1] === '#') + distance -= 7; + } + } + + if (multilineVars.localTranspose > 0) + multilineVars.localTransposeVerticalMovement = distance + Math.floor(multilineVars.localTranspose / 12) * 7; + else + multilineVars.localTransposeVerticalMovement = distance + Math.ceil(multilineVars.localTranspose / 12) * 7; + return { accidentals: newKeySig, root: newKeyName[0], acc: newKeyName.length > 1 ? newKeyName[1] : "" }; +}; + +var sharpChords = [ 'C', 'C♯', 'D', "D♯", 'E', 'F', "F♯", 'G', 'G♯', 'A', 'A♯', 'B']; +var flatChords = [ 'C', 'D♭', 'D', 'E♭', 'E', 'F', 'G♭', 'G', 'A♭', 'A', 'B♭', 'B']; +var sharpChordsFree = [ 'C', 'C#', 'D', "D#", 'E', 'F', "F#", 'G', 'G#', 'A', 'A#', 'B']; +var flatChordsFree = [ 'C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']; + +transpose.chordName = function(multilineVars, chord) { + if (multilineVars.localTranspose && (multilineVars.localTranspose % 12 !== 0)) { // The chords are the same if it is an exact octave change. + var transposeFactor = multilineVars.localTranspose; + while (transposeFactor < 0) transposeFactor += 12; + if (transposeFactor > 11) transposeFactor = transposeFactor % 12; + if (multilineVars.freegchord) { + chord = chord.replace(/Cb/g, "`~11`"); + chord = chord.replace(/Db/g, "`~1`"); + chord = chord.replace(/Eb/g, "`~3`"); + chord = chord.replace(/Fb/g, "`~4`"); + chord = chord.replace(/Gb/g, "`~6`"); + chord = chord.replace(/Ab/g, "`~8`"); + chord = chord.replace(/Bb/g, "`~10`"); + chord = chord.replace(/C#/g, "`~1`"); + chord = chord.replace(/D#/g, "`~3`"); + chord = chord.replace(/E#/g, "`~5`"); + chord = chord.replace(/F#/g, "`~6`"); + chord = chord.replace(/G#/g, "`~8`"); + chord = chord.replace(/A#/g, "`~10`"); + chord = chord.replace(/B#/g, "`~0`"); + } else { + chord = chord.replace(/C♭/g, "`~11`"); + chord = chord.replace(/D♭/g, "`~1`"); + chord = chord.replace(/E♭/g, "`~3`"); + chord = chord.replace(/F♭/g, "`~4`"); + chord = chord.replace(/G♭/g, "`~6`"); + chord = chord.replace(/A♭/g, "`~8`"); + chord = chord.replace(/B♭/g, "`~10`"); + chord = chord.replace(/C♯/g, "`~1`"); + chord = chord.replace(/D♯/g, "`~3`"); + chord = chord.replace(/E♯/g, "`~5`"); + chord = chord.replace(/F♯/g, "`~6`"); + chord = chord.replace(/G♯/g, "`~8`"); + chord = chord.replace(/A♯/g, "`~10`"); + chord = chord.replace(/B♯/g, "`~0`"); + } + chord = chord.replace(/C/g, "`~0`"); + chord = chord.replace(/D/g, "`~2`"); + chord = chord.replace(/E/g, "`~4`"); + chord = chord.replace(/F/g, "`~5`"); + chord = chord.replace(/G/g, "`~7`"); + chord = chord.replace(/A/g, "`~9`"); + chord = chord.replace(/B/g, "`~11`"); + var arr = chord.split("`"); + for (var i = 0; i < arr.length; i++) { + if (arr[i][0] === '~') { + var chordNum = parseInt(arr[i].substr(1),10); + chordNum += transposeFactor; + if (chordNum > 11) chordNum -= 12; + if (multilineVars.freegchord) + arr[i] = multilineVars.localTransposePreferFlats ? flatChordsFree[chordNum] : sharpChordsFree[chordNum]; + else + arr[i] = multilineVars.localTransposePreferFlats ? flatChords[chordNum] : sharpChords[chordNum]; + } + } + chord = arr.join(""); + } + return chord; +}; + +var pitchToLetter = [ 'c', 'd', 'e', 'f', 'g', 'a', 'b' ]; +function accidentalChange(origPitch, newPitch, accidental, origKeySig, newKeySig) { + var origPitchLetter = pitchToLetter[(origPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing. + var origAccidental = 0; + for (var i = 0; i < origKeySig.length; i++) { + if (origKeySig[i].note.toLowerCase() === origPitchLetter) + origAccidental = accidentals[origKeySig[i].acc]; + } + + var currentAccidental = accidentals[accidental]; + var delta = currentAccidental - origAccidental; + + var newPitchLetter = pitchToLetter[(newPitch + 49) % 7]; // Make sure it is a positive pitch before normalizing. + var newAccidental = 0; + for (var j = 0; j < newKeySig.accidentals.length; j++) { + if (newKeySig.accidentals[j].note.toLowerCase() === newPitchLetter) + newAccidental = accidentals[newKeySig.accidentals[j].acc]; + } + var calcAccidental = delta + newAccidental; + if (calcAccidental < -2) { + newPitch--; + calcAccidental += (newPitchLetter === 'c' || newPitchLetter === 'f') ? 1 : 2; + } + if (calcAccidental > 2) { + newPitch++; + calcAccidental -= (newPitchLetter === 'b' || newPitchLetter === 'e') ? 1 : 2; + } + return [newPitch, calcAccidental]; +} + +var accidentals = { + dblflat: -2, + flat: -1, + natural: 0, + sharp: 1, + dblsharp: 2 +}; +var accidentals2 = { + "-2": "dblflat", + "-1": "flat", + "0": "natural", + "1": "sharp", + "2": "dblsharp" +}; +transpose.note = function(multilineVars, el) { + // the "el" that is passed in has el.accidental, and el.pitch. "pitch" is the vertical position (0=middle C) + // localTranspose is the number of half steps + // localTransposeVerticalMovement is the vertical distance to move. + if (!multilineVars.localTranspose) + return; + var origPitch = el.pitch; + el.pitch = el.pitch + multilineVars.localTransposeVerticalMovement; + + if (el.accidental) { + var ret = accidentalChange(origPitch, el.pitch, el.accidental, multilineVars.globalTransposeOrigKeySig, multilineVars.targetKey); + el.pitch = ret[0]; + el.accidental = accidentals2[ret[1]]; + } + +}; + +var abc_transpose = transpose; + +/*global window */ + + + + + +var parseKeyVoice = {}; + +(function() { + var tokenizer; + var warn; + var multilineVars; + var tune; + parseKeyVoice.initialize = function(tokenizer_, warn_, multilineVars_, tune_) { + tokenizer = tokenizer_; + warn = warn_; + multilineVars = multilineVars_; + tune = tune_; + }; + + parseKeyVoice.standardKey = function(keyName, root, acc, localTranspose) { + var key1sharp = {acc: 'sharp', note: 'f'}; + var key2sharp = {acc: 'sharp', note: 'c'}; + var key3sharp = {acc: 'sharp', note: 'g'}; + var key4sharp = {acc: 'sharp', note: 'd'}; + var key5sharp = {acc: 'sharp', note: 'A'}; + var key6sharp = {acc: 'sharp', note: 'e'}; + var key7sharp = {acc: 'sharp', note: 'B'}; + var key1flat = {acc: 'flat', note: 'B'}; + var key2flat = {acc: 'flat', note: 'e'}; + var key3flat = {acc: 'flat', note: 'A'}; + var key4flat = {acc: 'flat', note: 'd'}; + var key5flat = {acc: 'flat', note: 'G'}; + var key6flat = {acc: 'flat', note: 'c'}; + var key7flat = {acc: 'flat', note: 'F'}; + + var keys = { + 'C#': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + 'A#m': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + 'G#Mix': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + 'D#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + 'E#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + 'F#Lyd': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + 'B#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ], + + 'F#': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + 'D#m': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + 'C#Mix': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + 'G#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + 'A#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + 'BLyd': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + 'E#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp ], + + 'B': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + 'G#m': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + 'F#Mix': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + 'C#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + 'D#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + 'ELyd': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + 'A#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp ], + + 'E': [ key1sharp, key2sharp, key3sharp, key4sharp ], + 'C#m': [ key1sharp, key2sharp, key3sharp, key4sharp ], + 'BMix': [ key1sharp, key2sharp, key3sharp, key4sharp ], + 'F#Dor': [ key1sharp, key2sharp, key3sharp, key4sharp ], + 'G#Phr': [ key1sharp, key2sharp, key3sharp, key4sharp ], + 'ALyd': [ key1sharp, key2sharp, key3sharp, key4sharp ], + 'D#Loc': [ key1sharp, key2sharp, key3sharp, key4sharp ], + + 'A': [ key1sharp, key2sharp, key3sharp ], + 'F#m': [ key1sharp, key2sharp, key3sharp ], + 'EMix': [ key1sharp, key2sharp, key3sharp ], + 'BDor': [ key1sharp, key2sharp, key3sharp ], + 'C#Phr': [ key1sharp, key2sharp, key3sharp ], + 'DLyd': [ key1sharp, key2sharp, key3sharp ], + 'G#Loc': [ key1sharp, key2sharp, key3sharp ], + + 'D': [ key1sharp, key2sharp ], + 'Bm': [ key1sharp, key2sharp ], + 'AMix': [ key1sharp, key2sharp ], + 'EDor': [ key1sharp, key2sharp ], + 'F#Phr': [ key1sharp, key2sharp ], + 'GLyd': [ key1sharp, key2sharp ], + 'C#Loc': [ key1sharp, key2sharp ], + + 'G': [ key1sharp ], + 'Em': [ key1sharp ], + 'DMix': [ key1sharp ], + 'ADor': [ key1sharp ], + 'BPhr': [ key1sharp ], + 'CLyd': [ key1sharp ], + 'F#Loc': [ key1sharp ], + + 'C': [], + 'Am': [], + 'GMix': [], + 'DDor': [], + 'EPhr': [], + 'FLyd': [], + 'BLoc': [], + + 'F': [ key1flat ], + 'Dm': [ key1flat ], + 'CMix': [ key1flat ], + 'GDor': [ key1flat ], + 'APhr': [ key1flat ], + 'BbLyd': [ key1flat ], + 'ELoc': [ key1flat ], + + 'Bb': [ key1flat, key2flat ], + 'Gm': [ key1flat, key2flat ], + 'FMix': [ key1flat, key2flat ], + 'CDor': [ key1flat, key2flat ], + 'DPhr': [ key1flat, key2flat ], + 'EbLyd': [ key1flat, key2flat ], + 'ALoc': [ key1flat, key2flat ], + + 'Eb': [ key1flat, key2flat, key3flat ], + 'Cm': [ key1flat, key2flat, key3flat ], + 'BbMix': [ key1flat, key2flat, key3flat ], + 'FDor': [ key1flat, key2flat, key3flat ], + 'GPhr': [ key1flat, key2flat, key3flat ], + 'AbLyd': [ key1flat, key2flat, key3flat ], + 'DLoc': [ key1flat, key2flat, key3flat ], + + 'Ab': [ key1flat, key2flat, key3flat, key4flat ], + 'Fm': [ key1flat, key2flat, key3flat, key4flat ], + 'EbMix': [ key1flat, key2flat, key3flat, key4flat ], + 'BbDor': [ key1flat, key2flat, key3flat, key4flat ], + 'CPhr': [ key1flat, key2flat, key3flat, key4flat ], + 'DbLyd': [ key1flat, key2flat, key3flat, key4flat ], + 'GLoc': [ key1flat, key2flat, key3flat, key4flat ], + + 'Db': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + 'Bbm': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + 'AbMix': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + 'EbDor': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + 'FPhr': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + 'GbLyd': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + 'CLoc': [ key1flat, key2flat, key3flat, key4flat, key5flat ], + + 'Gb': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + 'Ebm': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + 'DbMix': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + 'AbDor': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + 'BbPhr': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + 'CbLyd': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + 'FLoc': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat ], + + 'Cb': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + 'Abm': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + 'GbMix': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + 'DbDor': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + 'EbPhr': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + 'FbLyd': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + 'BbLoc': [ key1flat, key2flat, key3flat, key4flat, key5flat, key6flat, key7flat ], + + // The following are not in the 2.0 spec, but seem normal enough. + // TODO-PER: These SOUND the same as what's written, but they aren't right + 'A#': [ key1flat, key2flat ], + 'B#': [], + 'D#': [ key1flat, key2flat, key3flat ], + 'E#': [ key1flat ], + 'G#': [ key1flat, key2flat, key3flat, key4flat ], + 'Gbm': [ key1sharp, key2sharp, key3sharp, key4sharp, key5sharp, key6sharp, key7sharp ] + }; + + return abc_transpose.keySignature(multilineVars, keys, keyName, root, acc, localTranspose); + }; + + var clefLines = { + 'treble': { clef: 'treble', pitch: 4, mid: 0 }, + 'treble+8': { clef: 'treble+8', pitch: 4, mid: 0 }, + 'treble-8': { clef: 'treble-8', pitch: 4, mid: 0 }, + 'treble^8': { clef: 'treble+8', pitch: 4, mid: 0 }, + 'treble_8': { clef: 'treble-8', pitch: 4, mid: 0 }, + 'treble1': { clef: 'treble', pitch: 2, mid: 2 }, + 'treble2': { clef: 'treble', pitch: 4, mid: 0 }, + 'treble3': { clef: 'treble', pitch: 6, mid: -2 }, + 'treble4': { clef: 'treble', pitch: 8, mid: -4 }, + 'treble5': { clef: 'treble', pitch: 10, mid: -6 }, + 'perc': { clef: 'perc', pitch: 6, mid: 0 }, + 'none': { clef: 'none', mid: 0 }, + 'bass': { clef: 'bass', pitch: 8, mid: -12 }, + 'bass+8': { clef: 'bass+8', pitch: 8, mid: -12 }, + 'bass-8': { clef: 'bass-8', pitch: 8, mid: -12 }, + 'bass^8': { clef: 'bass+8', pitch: 8, mid: -12 }, + 'bass_8': { clef: 'bass-8', pitch: 8, mid: -12 }, + 'bass+16': { clef: 'bass', pitch: 8, mid: -12 }, + 'bass-16': { clef: 'bass', pitch: 8, mid: -12 }, + 'bass^16': { clef: 'bass', pitch: 8, mid: -12 }, + 'bass_16': { clef: 'bass', pitch: 8, mid: -12 }, + 'bass1': { clef: 'bass', pitch: 2, mid: -6 }, + 'bass2': { clef: 'bass', pitch: 4, mid: -8 }, + 'bass3': { clef: 'bass', pitch: 6, mid: -10 }, + 'bass4': { clef: 'bass', pitch: 8, mid: -12 }, + 'bass5': { clef: 'bass', pitch: 10, mid: -14 }, + 'tenor': { clef: 'alto', pitch: 8, mid: -8 }, + 'tenor1': { clef: 'alto', pitch: 2, mid: -2 }, + 'tenor2': { clef: 'alto', pitch: 4, mid: -4 }, + 'tenor3': { clef: 'alto', pitch: 6, mid: -6 }, + 'tenor4': { clef: 'alto', pitch: 8, mid: -8 }, + 'tenor5': { clef: 'alto', pitch: 10, mid: -10 }, + 'alto': { clef: 'alto', pitch: 6, mid: -6 }, + 'alto1': { clef: 'alto', pitch: 2, mid: -2 }, + 'alto2': { clef: 'alto', pitch: 4, mid: -4 }, + 'alto3': { clef: 'alto', pitch: 6, mid: -6 }, + 'alto4': { clef: 'alto', pitch: 8, mid: -8 }, + 'alto5': { clef: 'alto', pitch: 10, mid: -10 }, + 'alto+8': { clef: 'alto+8', pitch: 6, mid: -6 }, + 'alto-8': { clef: 'alto-8', pitch: 6, mid: -6 }, + 'alto^8': { clef: 'alto+8', pitch: 6, mid: -6 }, + 'alto_8': { clef: 'alto-8', pitch: 6, mid: -6 } + }; + + var calcMiddle = function(clef, oct) { + var value = clefLines[clef]; + var mid = value ? value.mid : 0; + return mid+oct; + }; + + parseKeyVoice.fixClef = function(clef) { + var value = clefLines[clef.type]; + if (value) { + clef.clefPos = value.pitch; + clef.type = value.clef; + } + }; + + parseKeyVoice.deepCopyKey = function(key) { + var ret = { accidentals: [], root: key.root, acc: key.acc, mode: key.mode }; + abc_common.each(key.accidentals, function(k) { + ret.accidentals.push(abc_common.clone(k)); + }); + return ret; + }; + + var pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11}; + + parseKeyVoice.addPosToKey = function(clef, key) { + // Shift the key signature from the treble positions to whatever position is needed for the clef. + // This may put the key signature unnaturally high or low, so if it does, then shift it. + var mid = clef.verticalPos; + abc_common.each(key.accidentals, function(acc) { + var pitch = pitches[acc.note]; + pitch = pitch - mid; + acc.verticalPos = pitch; + }); + if (key.impliedNaturals) + abc_common.each(key.impliedNaturals, function(acc) { + var pitch = pitches[acc.note]; + pitch = pitch - mid; + acc.verticalPos = pitch; + }); + + if (mid < -10) { + abc_common.each(key.accidentals, function(acc) { + acc.verticalPos -= 7; + if (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat')) + acc.verticalPos -= 7; + if (acc.note === 'A' && acc.acc === 'sharp' ) + acc.verticalPos -=7; + if ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' ) + acc.verticalPos -=7; + }); + if (key.impliedNaturals) + abc_common.each(key.impliedNaturals, function(acc) { + acc.verticalPos -= 7; + if (acc.verticalPos >= 11 || (acc.verticalPos === 10 && acc.acc === 'flat')) + acc.verticalPos -= 7; + if (acc.note === 'A' && acc.acc === 'sharp' ) + acc.verticalPos -=7; + if ((acc.note === 'G' || acc.note === 'F') && acc.acc === 'flat' ) + acc.verticalPos -=7; + }); + } else if (mid < -4) { + abc_common.each(key.accidentals, function(acc) { + acc.verticalPos -= 7; + if (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' ) + acc.verticalPos -=7; + }); + if (key.impliedNaturals) + abc_common.each(key.impliedNaturals, function(acc) { + acc.verticalPos -= 7; + if (mid === -8 && (acc.note === 'f' || acc.note === 'g') && acc.acc === 'sharp' ) + acc.verticalPos -=7; + }); + } else if (mid >= 7) { + abc_common.each(key.accidentals, function(acc) { + acc.verticalPos += 7; + }); + if (key.impliedNaturals) + abc_common.each(key.impliedNaturals, function(acc) { + acc.verticalPos += 7; + }); + } + }; + + parseKeyVoice.fixKey = function(clef, key) { + var fixedKey = abc_common.clone(key); + parseKeyVoice.addPosToKey(clef, fixedKey); + return fixedKey; + }; + + var parseMiddle = function(str) { + var i = 0; + var p = str.charAt(i++); + if (p === '^' || p === '_') + p = str.charAt(i++); + var mid = pitches[p]; + if (mid === undefined) + mid = 6; // If a legal middle note wasn't received, just ignore it. + for ( ; i < str.length; i++) { + if (str.charAt(i) === ',') mid -= 7; + else if (str.charAt(i) === "'") mid += 7; + else break; + } + return { mid: mid - 6, str: str.substring(i) }; // We get the note in the middle of the staff. We want the note that appears as the first ledger line below the staff. + }; + + var normalizeAccidentals = function(accs) { + for (var i = 0; i < accs.length; i++) { + if (accs[i].note === 'b') + accs[i].note = 'B'; + else if (accs[i].note === 'a') + accs[i].note = 'A'; + else if (accs[i].note === 'F') + accs[i].note = 'f'; + else if (accs[i].note === 'E') + accs[i].note = 'e'; + else if (accs[i].note === 'D') + accs[i].note = 'd'; + else if (accs[i].note === 'C') + accs[i].note = 'c'; + else if (accs[i].note === 'G' && accs[i].acc === 'sharp') + accs[i].note = 'g'; + else if (accs[i].note === 'g' && accs[i].acc === 'flat') + accs[i].note = 'G'; + } + }; + + parseKeyVoice.parseKey = function(str) // (and clef) + { + // returns: + // { foundClef: true, foundKey: true } + // Side effects: + // calls warn() when there is a syntax error + // sets these members of multilineVars: + // clef + // key + // style + // + // The format is: + // K: [⟹key⟩] [⟹modifiers⟩*] + // modifiers are any of the following in any order: + // [⟹clef⟩] [middle=⟹pitch⟩] [transpose=[-]⟹number⟩] [stafflines=⟹number⟩] [staffscale=⟹number⟩][style=⟹style⟩] + // key is none|HP|Hp|⟹specified_key⟩ + // clef is [clef=] [⟹clef type⟩] [⟹line number⟩] [+8|-8] + // specified_key is ⟹pitch⟩[#|b][mode(first three chars are significant)][accidentals*] + if (str.length === 0) { + // an empty K: field is the same as K:none + str = 'none'; + } + var tokens = tokenizer.tokenize(str, 0, str.length); + var ret = {}; + + // first the key + switch (tokens[0].token) { + case 'HP': + abc_parse_directive.addDirective("bagpipes"); + multilineVars.key = { root: "HP", accidentals: [], acc: "", mode: "" }; + ret.foundKey = true; + tokens.shift(); + break; + case 'Hp': + abc_parse_directive.addDirective("bagpipes"); + multilineVars.key = { root: "Hp", accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}], acc: "", mode: "" }; + ret.foundKey = true; + tokens.shift(); + break; + case 'none': + // we got the none key - that's the same as C to us + multilineVars.key = { root: "none", accidentals: [], acc: "", mode: "" }; + ret.foundKey = true; + tokens.shift(); + break; + default: + var retPitch = tokenizer.getKeyPitch(tokens[0].token); + if (retPitch.len > 0) { + ret.foundKey = true; + var acc = ""; + var mode = ""; + // The accidental and mode might be attached to the pitch, so we might want to just remove the first character. + if (tokens[0].token.length > 1) + tokens[0].token = tokens[0].token.substring(1); + else + tokens.shift(); + var key = retPitch.token; + // We got a pitch to start with, so we might also have an accidental and a mode + if (tokens.length > 0) { + var retAcc = tokenizer.getSharpFlat(tokens[0].token); + if (retAcc.len > 0) { + if (tokens[0].token.length > 1) + tokens[0].token = tokens[0].token.substring(1); + else + tokens.shift(); + key += retAcc.token; + acc = retAcc.token; + } + if (tokens.length > 0) { + var retMode = tokenizer.getMode(tokens[0].token); + if (retMode.len > 0) { + tokens.shift(); + key += retMode.token; + mode = retMode.token; + } + } + // Be sure that the key specified is in the list: not all keys are physically possible, like Cbmin. + if (parseKeyVoice.standardKey(key, retPitch.token, acc, 0) === undefined) { + warn("Unsupported key signature: " + key, str, 0); + return ret; + } + } + // We need to do a deep copy because we are going to modify it + var oldKey = parseKeyVoice.deepCopyKey(multilineVars.key); + //TODO-PER: HACK! To get the local transpose to work, the transposition is done for each line. This caused the global transposition variable to be factored in twice, so, instead of rewriting that right now, I'm just subtracting one of them here. + var keyCompensate = multilineVars.globalTranspose ? -multilineVars.globalTranspose : 0; + multilineVars.key = parseKeyVoice.deepCopyKey(parseKeyVoice.standardKey(key, retPitch.token, acc, keyCompensate)); + multilineVars.key.mode = mode; + if (oldKey) { + // Add natural in all places that the old key had an accidental. + var kk; + for (var k = 0; k < multilineVars.key.accidentals.length; k++) { + for (kk = 0; kk < oldKey.accidentals.length; kk++) { + if (oldKey.accidentals[kk].note && multilineVars.key.accidentals[k].note.toLowerCase() === oldKey.accidentals[kk].note.toLowerCase()) + oldKey.accidentals[kk].note = null; + } + } + for (kk = 0; kk < oldKey.accidentals.length; kk++) { + if (oldKey.accidentals[kk].note) { + if (!multilineVars.key.impliedNaturals) + multilineVars.key.impliedNaturals = []; + multilineVars.key.impliedNaturals.push({ acc: 'natural', note: oldKey.accidentals[kk].note }); + } + } + } + } + break; + } + + // There are two special cases of deprecated syntax. Ignore them if they occur + if (tokens.length === 0) return ret; + if (tokens[0].token === 'exp') tokens.shift(); + if (tokens.length === 0) return ret; + if (tokens[0].token === 'oct') tokens.shift(); + + // now see if there are extra accidentals + if (tokens.length === 0) return ret; + var accs = tokenizer.getKeyAccidentals2(tokens); + if (accs.warn) + warn(accs.warn, str, 0); + // If we have extra accidentals, first replace ones that are of the same pitch before adding them to the end. + if (accs.accs) { + if (!ret.foundKey) { // if there are only extra accidentals, make sure this is set. + ret.foundKey = true; + multilineVars.key = { root: "none", acc: "", mode: "", accidentals: [] }; + } + normalizeAccidentals(accs.accs); + for (var i = 0; i < accs.accs.length; i++) { + var found = false; + for (var j = 0; j < multilineVars.key.accidentals.length && !found; j++) { + if (multilineVars.key.accidentals[j].note === accs.accs[i].note) { + found = true; + if (multilineVars.key.accidentals[j].acc !== accs.accs[i].acc) { + // If the accidental is different, then replace it. If it is the same, then the declaration was redundant, so just ignore it. + multilineVars.key.accidentals[j].acc = accs.accs[i].acc; + if (!multilineVars.key.explicitAccidentals) + multilineVars.key.explicitAccidentals = []; + multilineVars.key.explicitAccidentals.push(accs.accs[i]); + } + } + } + if (!found) { + if (!multilineVars.key.explicitAccidentals) + multilineVars.key.explicitAccidentals = []; + multilineVars.key.explicitAccidentals.push(accs.accs[i]); + multilineVars.key.accidentals.push(accs.accs[i]); + if (multilineVars.key.impliedNaturals) { + for (var kkk = 0; kkk < multilineVars.key.impliedNaturals.length; kkk++) { + if (multilineVars.key.impliedNaturals[kkk].note === accs.accs[i].note) + multilineVars.key.impliedNaturals.splice(kkk, 1); + } + } + } + } + } + + // Now see if any optional parameters are present. They have the form "key=value", except that "clef=" is optional + var token; + while (tokens.length > 0) { + switch (tokens[0].token) { + case "m": + case "middle": + tokens.shift(); + if (tokens.length === 0) { warn("Expected = after middle", str, 0); return ret; } + token = tokens.shift(); + if (token.token !== "=") { warn("Expected = after middle", str, token.start); break; } + if (tokens.length === 0) { warn("Expected parameter after middle=", str, 0); return ret; } + var pitch = tokenizer.getPitchFromTokens(tokens); + if (pitch.warn) + warn(pitch.warn, str, 0); + if (pitch.position) + multilineVars.clef.verticalPos = pitch.position - 6; // we get the position from the middle line, but want to offset it to the first ledger line. + break; + case "transpose": + tokens.shift(); + if (tokens.length === 0) { warn("Expected = after transpose", str, 0); return ret; } + token = tokens.shift(); + if (token.token !== "=") { warn("Expected = after transpose", str, token.start); break; } + if (tokens.length === 0) { warn("Expected parameter after transpose=", str, 0); return ret; } + if (tokens[0].type !== 'number') { warn("Expected number after transpose", str, tokens[0].start); break; } + multilineVars.clef.transpose = tokens[0].intt; + tokens.shift(); + break; + case "stafflines": + tokens.shift(); + if (tokens.length === 0) { warn("Expected = after stafflines", str, 0); return ret; } + token = tokens.shift(); + if (token.token !== "=") { warn("Expected = after stafflines", str, token.start); break; } + if (tokens.length === 0) { warn("Expected parameter after stafflines=", str, 0); return ret; } + if (tokens[0].type !== 'number') { warn("Expected number after stafflines", str, tokens[0].start); break; } + multilineVars.clef.stafflines = tokens[0].intt; + tokens.shift(); + break; + case "staffscale": + tokens.shift(); + if (tokens.length === 0) { warn("Expected = after staffscale", str, 0); return ret; } + token = tokens.shift(); + if (token.token !== "=") { warn("Expected = after staffscale", str, token.start); break; } + if (tokens.length === 0) { warn("Expected parameter after staffscale=", str, 0); return ret; } + if (tokens[0].type !== 'number') { warn("Expected number after staffscale", str, tokens[0].start); break; } + multilineVars.clef.staffscale = tokens[0].floatt; + tokens.shift(); + break; + case "style": + tokens.shift(); + if (tokens.length === 0) { warn("Expected = after style", str, 0); return ret; } + token = tokens.shift(); + if (token.token !== "=") { warn("Expected = after style", str, token.start); break; } + if (tokens.length === 0) { warn("Expected parameter after style=", str, 0); return ret; } + switch (tokens[0].token) { + case "normal": + case "harmonic": + case "rhythm": + case "x": + multilineVars.style = tokens[0].token; + tokens.shift(); + break; + default: + warn("error parsing style element: " + tokens[0].token, str, tokens[0].start); + break; + } + break; + case "clef": + tokens.shift(); + if (tokens.length === 0) { warn("Expected = after clef", str, 0); return ret; } + token = tokens.shift(); + if (token.token !== "=") { warn("Expected = after clef", str, token.start); break; } + if (tokens.length === 0) { warn("Expected parameter after clef=", str, 0); return ret; } + //break; yes, we want to fall through. That allows "clef=" to be optional. + case "treble": + case "bass": + case "alto": + case "tenor": + case "perc": + // clef is [clef=] [⟹clef type⟩] [⟹line number⟩] [+8|-8] + var clef = tokens.shift(); + switch (clef.token) { + case 'treble': + case 'tenor': + case 'alto': + case 'bass': + case 'perc': + case 'none': + break; + case 'C': clef.token = 'alto'; break; + case 'F': clef.token = 'bass'; break; + case 'G': clef.token = 'treble'; break; + case 'c': clef.token = 'alto'; break; + case 'f': clef.token = 'bass'; break; + case 'g': clef.token = 'treble'; break; + default: + warn("Expected clef name. Found " + clef.token, str, clef.start); + break; + } + if (tokens.length > 0 && tokens[0].type === 'number') { + clef.token += tokens[0].token; + tokens.shift(); + } + if (tokens.length > 1 && (tokens[0].token === '-' || tokens[0].token === '+' || tokens[0].token === '^' || tokens[0].token === '_') && tokens[1].token === '8') { + clef.token += tokens[0].token + tokens[1].token; + tokens.shift(); + tokens.shift(); + } + multilineVars.clef = {type: clef.token, verticalPos: calcMiddle(clef.token, 0)}; + if (multilineVars.currentVoice && multilineVars.currentVoice.transpose !== undefined) + multilineVars.clef.transpose = multilineVars.currentVoice.transpose; + ret.foundClef = true; + break; + default: + warn("Unknown parameter: " + tokens[0].token, str, tokens[0].start); + tokens.shift(); + } + } + return ret; + }; + + var setCurrentVoice = function(id) { + multilineVars.currentVoice = multilineVars.voices[id]; + tune.setCurrentVoice(multilineVars.currentVoice.staffNum, multilineVars.currentVoice.index); + }; + + parseKeyVoice.parseVoice = function(line, i, e) { + //First truncate the string to the first non-space character after V: through either the + //end of the line or a % character. Then remove trailing spaces, too. + var ret = tokenizer.getMeat(line, i, e); + var start = ret.start; + var end = ret.end; + //The first thing on the line is the ID. It can be any non-space string and terminates at the + //first space. + var id = tokenizer.getToken(line, start, end); + if (id.length === 0) { + warn("Expected a voice id", line, start); + return; + } + var isNew = false; + if (multilineVars.voices[id] === undefined) { + multilineVars.voices[id] = {}; + isNew = true; + if (multilineVars.score_is_present) + warn("Can't have an unknown V: id when the %score directive is present", line, start); + } + start += id.length; + start += tokenizer.eatWhiteSpace(line, start); + + var staffInfo = {startStaff: isNew}; + var addNextTokenToStaffInfo = function(name) { + var attr = tokenizer.getVoiceToken(line, start, end); + if (attr.warn !== undefined) + warn("Expected value for " + name + " in voice: " + attr.warn, line, start); + else if (attr.token.length === 0 && line.charAt(start) !== '"') + warn("Expected value for " + name + " in voice", line, start); + else + staffInfo[name] = attr.token; + start += attr.len; + }; + var addNextTokenToVoiceInfo = function(id, name, type) { + var attr = tokenizer.getVoiceToken(line, start, end); + if (attr.warn !== undefined) + warn("Expected value for " + name + " in voice: " + attr.warn, line, start); + else if (attr.token.length === 0 && line.charAt(start) !== '"') + warn("Expected value for " + name + " in voice", line, start); + else { + if (type === 'number') + attr.token = parseFloat(attr.token); + multilineVars.voices[id][name] = attr.token; + } + start += attr.len; + }; + var getNextToken = function(name, type) { + var attr = tokenizer.getVoiceToken(line, start, end); + if (attr.warn !== undefined) + warn("Expected value for " + name + " in voice: " + attr.warn, line, start); + else if (attr.token.length === 0 && line.charAt(start) !== '"') + warn("Expected value for " + name + " in voice", line, start); + else { + if (type === 'number') + attr.token = parseFloat(attr.token); + return attr.token; + } + start += attr.len; + }; + var addNextNoteTokenToVoiceInfo = function(id, name) { + var noteToTransposition = { + "_B": 2, + "_E": 9, + "_b": -10, + "_e": -3 + }; + var attr = tokenizer.getVoiceToken(line, start, end); + if (attr.warn !== undefined) + warn("Expected one of (_B, _E, _b, _e) for " + name + " in voice: " + attr.warn, line, start); + else if (attr.token.length === 0 && line.charAt(start) !== '"') + warn("Expected one of (_B, _E, _b, _e) for " + name + " in voice", line, start); + else { + var t = noteToTransposition[attr.token]; + if (!t) + warn("Expected one of (_B, _E, _b, _e) for " + name + " in voice", line, start); + else + multilineVars.voices[id][name] = t; + } + start += attr.len; + }; + + //Then the following items can occur in any order: + while (start < end) { + var token = tokenizer.getVoiceToken(line, start, end); + start += token.len; + + if (token.warn) { + warn("Error parsing voice: " + token.warn, line, start); + } else { + var attr = null; + switch (token.token) { + case 'clef': + case 'cl': + addNextTokenToStaffInfo('clef'); + // TODO-PER: check for a legal clef; do octavizing + var oct = 0; + // for (var ii = 0; ii < staffInfo.clef.length; ii++) { + // if (staffInfo.clef[ii] === ',') oct -= 7; + // else if (staffInfo.clef[ii] === "'") oct += 7; + // } + if (staffInfo.clef !== undefined) { + staffInfo.clef = staffInfo.clef.replace(/[',]/g, ""); //'//comment for emacs formatting of regexp + if (staffInfo.clef.indexOf('+16') !== -1) { + oct += 14; + staffInfo.clef = staffInfo.clef.replace('+16', ''); + } + staffInfo.verticalPos = calcMiddle(staffInfo.clef, oct); + } + break; + case 'treble': + case 'bass': + case 'tenor': + case 'alto': + case 'perc': + case 'none': + case 'treble\'': + case 'bass\'': + case 'tenor\'': + case 'alto\'': + case 'none\'': + case 'treble\'\'': + case 'bass\'\'': + case 'tenor\'\'': + case 'alto\'\'': + case 'none\'\'': + case 'treble,': + case 'bass,': + case 'tenor,': + case 'alto,': + case 'none,': + case 'treble,,': + case 'bass,,': + case 'tenor,,': + case 'alto,,': + case 'none,,': + // TODO-PER: handle the octave indicators on the clef by changing the middle property + var oct2 = 0; + // for (var iii = 0; iii < token.token.length; iii++) { + // if (token.token[iii] === ',') oct2 -= 7; + // else if (token.token[iii] === "'") oct2 += 7; + // } + staffInfo.clef = token.token.replace(/[',]/g, ""); //'//comment for emacs formatting of regexp + staffInfo.verticalPos = calcMiddle(staffInfo.clef, oct2); + multilineVars.voices[id].clef = token.token; + break; + case 'staves': + case 'stave': + case 'stv': + addNextTokenToStaffInfo('staves'); + break; + case 'brace': + case 'brc': + addNextTokenToStaffInfo('brace'); + break; + case 'bracket': + case 'brk': + addNextTokenToStaffInfo('bracket'); + break; + case 'name': + case 'nm': + addNextTokenToStaffInfo('name'); + break; + case 'subname': + case 'sname': + case 'snm': + addNextTokenToStaffInfo('subname'); + break; + case 'merge': + staffInfo.startStaff = false; + break; + case 'stem': + case 'stems': + attr = tokenizer.getVoiceToken(line, start, end); + if (attr.warn !== undefined) + warn("Expected value for stems in voice: " + attr.warn, line, start); + else if (attr.token === 'up' || attr.token === 'down') + multilineVars.voices[id].stem = attr.token; + else + warn("Expected up or down for voice stem", line, start); + start += attr.len; + break; + case 'up': + case 'down': + multilineVars.voices[id].stem = token.token; + break; + case 'middle': + case 'm': + addNextTokenToStaffInfo('verticalPos'); + staffInfo.verticalPos = parseMiddle(staffInfo.verticalPos).mid; + break; + case 'gchords': + case 'gch': + multilineVars.voices[id].suppressChords = true; + // gchords can stand on its own, or it could be gchords=0. + attr = tokenizer.getVoiceToken(line, start, end); + if (attr.token === "0") + start = start + attr.len; + break; + case 'space': + case 'spc': + addNextTokenToStaffInfo('spacing'); + break; + case 'scale': + addNextTokenToVoiceInfo(id, 'scale', 'number'); + break; + case 'score': + addNextNoteTokenToVoiceInfo(id, 'scoreTranspose'); + break; + case 'transpose': + addNextTokenToVoiceInfo(id, 'transpose', 'number'); + break; + case 'stafflines': + addNextTokenToVoiceInfo(id, 'stafflines', 'number'); + break; + case 'staffscale': + // TODO-PER: This is passed to the engraver, but the engraver ignores it. + addNextTokenToVoiceInfo(id, 'staffscale', 'number'); + break; + case 'octave': + // TODO-PER: This is accepted, but not implemented, yet. + addNextTokenToVoiceInfo(id, 'octave', 'number'); + break; + case 'volume': + // TODO-PER: This is accepted, but not implemented, yet. + addNextTokenToVoiceInfo(id, 'volume', 'number'); + break; + case 'cue': + // TODO-PER: This is accepted, but not implemented, yet. + var cue = getNextToken('cue', 'string'); + if (cue === 'on') + multilineVars.voices[id].scale = 0.6; + else multilineVars.voices[id].scale = 1; + break; + case "style": + attr = tokenizer.getVoiceToken(line, start, end); + if (attr.warn !== undefined) + warn("Expected value for style in voice: " + attr.warn, line, start); + else if (attr.token === 'normal' || attr.token === 'harmonic' || attr.token === 'rhythm' || attr.token === 'x') + multilineVars.voices[id].style = attr.token; + else + warn("Expected one of [normal, harmonic, rhythm, x] for voice style", line, start); + start += attr.len; + break; + // default: + // Use this to find V: usages that aren't handled. + // console.log("parse voice", token, tune.metaText.title); + } + } + start += tokenizer.eatWhiteSpace(line, start); + } + + // now we've filled up staffInfo, figure out what to do with this voice + // TODO-PER: It is unclear from the standard and the examples what to do with brace, bracket, and staves, so they are ignored for now. + if (staffInfo.startStaff || multilineVars.staves.length === 0) { + multilineVars.staves.push({index: multilineVars.staves.length, meter: multilineVars.origMeter}); + if (!multilineVars.score_is_present) + multilineVars.staves[multilineVars.staves.length-1].numVoices = 0; + } + if (multilineVars.voices[id].staffNum === undefined) { + // store where to write this for quick access later. + multilineVars.voices[id].staffNum = multilineVars.staves.length-1; + var vi = 0; + for(var v in multilineVars.voices) { + if(multilineVars.voices.hasOwnProperty(v)) { + if (multilineVars.voices[v].staffNum === multilineVars.voices[id].staffNum) + vi++; + } + } + multilineVars.voices[id].index = vi-1; + } + var s = multilineVars.staves[multilineVars.voices[id].staffNum]; + if (!multilineVars.score_is_present) + s.numVoices++; + if (staffInfo.clef) s.clef = {type: staffInfo.clef, verticalPos: staffInfo.verticalPos}; + if (staffInfo.spacing) s.spacing_below_offset = staffInfo.spacing; + if (staffInfo.verticalPos) s.verticalPos = staffInfo.verticalPos; + + if (staffInfo.name) {if (s.name) s.name.push(staffInfo.name); else s.name = [ staffInfo.name ];} + if (staffInfo.subname) {if (s.subname) s.subname.push(staffInfo.subname); else s.subname = [ staffInfo.subname ];} + + setCurrentVoice(id); + }; + +})(); + +var abc_parse_key_voice = parseKeyVoice; + +// abc_parse_header.js: parses a the header fields from a string representing ABC Music Notation into a usable internal structure. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +/*global window */ + + + + + +var ParseHeader = function(tokenizer, warn, multilineVars, tune) { + this.reset = function(tokenizer, warn, multilineVars, tune) { + abc_parse_key_voice.initialize(tokenizer, warn, multilineVars, tune); + abc_parse_directive.initialize(tokenizer, warn, multilineVars, tune); + }; + this.reset(tokenizer, warn, multilineVars, tune); + + this.setTitle = function(title) { + if (multilineVars.hasMainTitle) + tune.addSubtitle(tokenizer.translateString(tokenizer.stripComment(title))); // display secondary title + else + { + var titleStr = tokenizer.translateString(tokenizer.theReverser(tokenizer.stripComment(title))); + if (multilineVars.titlecaps) + titleStr = titleStr.toUpperCase(); + tune.addMetaText("title", titleStr); + multilineVars.hasMainTitle = true; + } + }; + + this.setMeter = function(line) { + line = tokenizer.stripComment(line); + if (line === 'C') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return {type: 'common_time'}; + } else if (line === 'C|') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return {type: 'cut_time'}; + } else if (line === 'o') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return {type: 'tempus_perfectum'}; + } else if (line === 'c') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return {type: 'tempus_imperfectum'}; + } else if (line === 'o.') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return {type: 'tempus_perfectum_prolatio'}; + } else if (line === 'c.') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return {type: 'tempus_imperfectum_prolatio'}; + } else if (line.length === 0 || line.toLowerCase() === 'none') { + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = 0.125; + multilineVars.havent_set_length = false; + } + return null; + } + else + { + var tokens = tokenizer.tokenize(line, 0, line.length); + // the form is [open_paren] decimal [ plus|dot decimal ]... [close_paren] slash decimal [plus same_as_before] + try { + var parseNum = function() { + // handles this much: [open_paren] decimal [ plus|dot decimal ]... [close_paren] + var ret = {value: 0, num: ""}; + + var tok = tokens.shift(); + if (tok.token === '(') + tok = tokens.shift(); + while (1) { + if (tok.type !== 'number') throw "Expected top number of meter"; + ret.value += parseInt(tok.token); + ret.num += tok.token; + if (tokens.length === 0 || tokens[0].token === '/') return ret; + tok = tokens.shift(); + if (tok.token === ')') { + if (tokens.length === 0 || tokens[0].token === '/') return ret; + throw "Unexpected paren in meter"; + } + if (tok.token !== '.' && tok.token !== '+') throw "Expected top number of meter"; + ret.num += tok.token; + if (tokens.length === 0) throw "Expected top number of meter"; + tok = tokens.shift(); + } + return ret; // just to suppress warning + }; + + var parseFraction = function() { + // handles this much: parseNum slash decimal + var ret = parseNum(); + if (tokens.length === 0) return ret; + var tok = tokens.shift(); + if (tok.token !== '/') throw "Expected slash in meter"; + tok = tokens.shift(); + if (tok.type !== 'number') throw "Expected bottom number of meter"; + ret.den = tok.token; + ret.value = ret.value / parseInt(ret.den); + return ret; + }; + + if (tokens.length === 0) throw "Expected meter definition in M: line"; + var meter = {type: 'specified', value: [ ]}; + var totalLength = 0; + while (1) { + var ret = parseFraction(); + totalLength += ret.value; + var mv = { num: ret.num }; + if (ret.den !== undefined) + mv.den = ret.den; + meter.value.push(mv); + if (tokens.length === 0) break; + //var tok = tokens.shift(); + //if (tok.token !== '+') throw "Extra characters in M: line"; + } + + if (multilineVars.havent_set_length === true) { + multilineVars.default_length = totalLength < 0.75 ? 0.0625 : 0.125; + multilineVars.havent_set_length = false; + } + return meter; + } catch (e) { + warn(e, line, 0); + } + } + return null; + }; + + this.calcTempo = function(relTempo) { + var dur = 1/4; + if (multilineVars.meter && multilineVars.meter.type === 'specified') { + dur = 1 / parseInt(multilineVars.meter.value[0].den); + } else if (multilineVars.origMeter && multilineVars.origMeter.type === 'specified') { + dur = 1 / parseInt(multilineVars.origMeter.value[0].den); + } + //var dur = multilineVars.default_length ? multilineVars.default_length : 1; + for (var i = 0; i < relTempo.duration; i++) + relTempo.duration[i] = dur * relTempo.duration[i]; + return relTempo; + }; + + this.resolveTempo = function() { + if (multilineVars.tempo) { // If there's a tempo waiting to be resolved + this.calcTempo(multilineVars.tempo); + tune.metaText.tempo = multilineVars.tempo; + delete multilineVars.tempo; + } + }; + + this.addUserDefinition = function(line, start, end) { + var equals = line.indexOf('=', start); + if (equals === -1) { + warn("Need an = in a macro definition", line, start); + return; + } + + var before = abc_common.strip(line.substring(start, equals)); + var after = abc_common.strip(line.substring(equals+1)); + + if (before.length !== 1) { + warn("Macro definitions can only be one character", line, start); + return; + } + var legalChars = "HIJKLMNOPQRSTUVWXYhijklmnopqrstuvw~"; + if (legalChars.indexOf(before) === -1) { + warn("Macro definitions must be H-Y, h-w, or tilde", line, start); + return; + } + if (after.length === 0) { + warn("Missing macro definition", line, start); + return; + } + if (multilineVars.macros === undefined) + multilineVars.macros = {}; + multilineVars.macros[before] = after; + }; + + this.setDefaultLength = function(line, start, end) { + var len = abc_common.gsub(line.substring(start, end), " ", ""); + var len_arr = len.split('/'); + if (len_arr.length === 2) { + var n = parseInt(len_arr[0]); + var d = parseInt(len_arr[1]); + if (d > 0) { + multilineVars.default_length = n / d; // a whole note is 1 + multilineVars.havent_set_length = false; + } + } else if (len_arr.length === 1 && len_arr[0] === '1') { + multilineVars.default_length = 1; + multilineVars.havent_set_length = false; + } + }; + + + var tempoString = { + + larghissimo: 20, + adagissimo: 24, + sostenuto: 28, + grave: 32, + largo: 40, + lento: 50, + larghetto: 60, + adagio: 68, + adagietto: 74, + andante: 80, + andantino: 88, + "marcia moderato": 84, + "andante moderato": 100, + moderato: 112, + allegretto: 116, + "allegro moderato": 120, + allegro: 126, + animato: 132, + agitato: 140, + veloce: 148, + "mosso vivo": 156, + vivace: 164, + vivacissimo: 172, + allegrissimo: 176, + presto: 184, + prestissimo: 210, + }; + + this.setTempo = function(line, start, end) { + //Q - tempo; can be used to specify the notes per minute, e.g. If + //the meter denominator is a 4 note then Q:120 or Q:C=120 + //is 120 quarter notes per minute. Similarly Q:C3=40 would be 40 + //dotted half notes per minute. An absolute tempo may also be + //set, e.g. Q:1/8=120 is 120 eighth notes per minute, + //irrespective of the meter's denominator. + // + // This is either a number, "C=number", "Cnumber=number", or fraction [fraction...]=number + // It depends on the M: field, which may either not be present, or may appear after this. + // If M: is not present, an eighth note is used. + // That means that this field can't be calculated until the end, if it is the first three types, since we don't know if we'll see an M: field. + // So, if it is the fourth type, set it here, otherwise, save the info in the multilineVars. + // The temporary variables we keep are the duration and the bpm. In the first two forms, the duration is 1. + // In addition, a quoted string may both precede and follow. If a quoted string is present, then the duration part is optional. + try { + var tokens = tokenizer.tokenize(line, start, end); + + if (tokens.length === 0) throw "Missing parameter in Q: field"; + + var tempo = {}; + var delaySet = true; + var token = tokens.shift(); + if (token.type === 'quote') { + tempo.preString = token.token; + token = tokens.shift(); + if (tokens.length === 0) { // It's ok to just get a string for the tempo + // If the string is a well-known tempo, put in the bpm + if (tempoString[tempo.preString.toLowerCase()]) { + tempo.bpm = tempoString[tempo.preString.toLowerCase()]; + tempo.suppressBpm = true; + } + return {type: 'immediate', tempo: tempo}; + } + } + if (token.type === 'alpha' && token.token === 'C') { // either type 2 or type 3 + if (tokens.length === 0) throw "Missing tempo after C in Q: field"; + token = tokens.shift(); + if (token.type === 'punct' && token.token === '=') { + // This is a type 2 format. The duration is an implied 1 + if (tokens.length === 0) throw "Missing tempo after = in Q: field"; + token = tokens.shift(); + if (token.type !== 'number') throw "Expected number after = in Q: field"; + tempo.duration = [1]; + tempo.bpm = parseInt(token.token); + } else if (token.type === 'number') { + // This is a type 3 format. + tempo.duration = [parseInt(token.token)]; + if (tokens.length === 0) throw "Missing = after duration in Q: field"; + token = tokens.shift(); + if (token.type !== 'punct' || token.token !== '=') throw "Expected = after duration in Q: field"; + if (tokens.length === 0) throw "Missing tempo after = in Q: field"; + token = tokens.shift(); + if (token.type !== 'number') throw "Expected number after = in Q: field"; + tempo.bpm = parseInt(token.token); + } else throw "Expected number or equal after C in Q: field"; + + } else if (token.type === 'number') { // either type 1 or type 4 + var num = parseInt(token.token); + if (tokens.length === 0 || tokens[0].type === 'quote') { + // This is type 1 + tempo.duration = [1]; + tempo.bpm = num; + } else { // This is type 4 + delaySet = false; + token = tokens.shift(); + if (token.type !== 'punct' && token.token !== '/') throw "Expected fraction in Q: field"; + token = tokens.shift(); + if (token.type !== 'number') throw "Expected fraction in Q: field"; + var den = parseInt(token.token); + tempo.duration = [num/den]; + // We got the first fraction, keep getting more as long as we find them. + while (tokens.length > 0 && tokens[0].token !== '=' && tokens[0].type !== 'quote') { + token = tokens.shift(); + if (token.type !== 'number') throw "Expected fraction in Q: field"; + num = parseInt(token.token); + token = tokens.shift(); + if (token.type !== 'punct' && token.token !== '/') throw "Expected fraction in Q: field"; + token = tokens.shift(); + if (token.type !== 'number') throw "Expected fraction in Q: field"; + den = parseInt(token.token); + tempo.duration.push(num/den); + } + token = tokens.shift(); + if (token.type !== 'punct' && token.token !== '=') throw "Expected = in Q: field"; + token = tokens.shift(); + if (token.type !== 'number') throw "Expected tempo in Q: field"; + tempo.bpm = parseInt(token.token); + } + } else throw "Unknown value in Q: field"; + if (tokens.length !== 0) { + token = tokens.shift(); + if (token.type === 'quote') { + tempo.postString = token.token; + token = tokens.shift(); + } + if (tokens.length !== 0) throw "Unexpected string at end of Q: field"; + } + if (multilineVars.printTempo === false) + tempo.suppress = true; + return {type: delaySet?'delaySet':'immediate', tempo: tempo}; + } catch (msg) { + warn(msg, line, start); + return {type: 'none'}; + } + }; + + this.letter_to_inline_header = function(line, i) + { + var ws = tokenizer.eatWhiteSpace(line, i); + i +=ws; + if (line.length >= i+5 && line.charAt(i) === '[' && line.charAt(i+2) === ':') { + var e = line.indexOf(']', i); + var startChar = multilineVars.iChar + i; + var endChar = multilineVars.iChar + e + 1; + switch(line.substring(i, i+3)) + { + case "[I:": + var err = abc_parse_directive.addDirective(line.substring(i+3, e)); + if (err) warn(err, line, i); + return [ e-i+1+ws ]; + case "[M:": + var meter = this.setMeter(line.substring(i+3, e)); + if (tune.hasBeginMusic() && meter) + tune.appendStartingElement('meter', startChar, endChar, meter); + else + multilineVars.meter = meter; + return [ e-i+1+ws ]; + case "[K:": + var result = abc_parse_key_voice.parseKey(line.substring(i+3, e)); + if (result.foundClef && tune.hasBeginMusic()) + tune.appendStartingElement('clef', startChar, endChar, multilineVars.clef); + if (result.foundKey && tune.hasBeginMusic()) + tune.appendStartingElement('key', startChar, endChar, abc_parse_key_voice.fixKey(multilineVars.clef, multilineVars.key)); + return [ e-i+1+ws ]; + case "[P:": + if (tune.lines.length <= tune.lineNum) + multilineVars.partForNextLine = { title: line.substring(i+3, e), startChar: startChar, endChar: endChar }; + else + tune.appendElement('part', startChar, endChar, {title: line.substring(i+3, e)}); + return [ e-i+1+ws ]; + case "[L:": + this.setDefaultLength(line, i+3, e); + return [ e-i+1+ws ]; + case "[Q:": + if (e > 0) { + var tempo = this.setTempo(line, i+3, e); + if (tempo.type === 'delaySet') tune.appendElement('tempo', startChar, endChar, this.calcTempo(tempo.tempo)); + else if (tempo.type === 'immediate') tune.appendElement('tempo', startChar, endChar, tempo.tempo); + return [ e-i+1+ws, line.charAt(i+1), line.substring(i+3, e)]; + } + break; + case "[V:": + if (e > 0) { + abc_parse_key_voice.parseVoice(line, i+3, e); + //startNewLine(); + return [ e-i+1+ws, line.charAt(i+1), line.substring(i+3, e)]; + } + break; + // TODO: complain about unhandled header + } + } + return [ 0 ]; + }; + + this.letter_to_body_header = function(line, i) + { + if (line.length >= i+3) { + switch(line.substring(i, i+2)) + { + case "I:": + var err = abc_parse_directive.addDirective(line.substring(i+2)); + if (err) warn(err, line, i); + return [ line.length ]; + case "M:": + var meter = this.setMeter(line.substring(i+2)); + if (tune.hasBeginMusic() && meter) + tune.appendStartingElement('meter', multilineVars.iChar + i, multilineVars.iChar + line.length, meter); + return [ line.length ]; + case "K:": + var result = abc_parse_key_voice.parseKey(line.substring(i+2)); + if (result.foundClef && tune.hasBeginMusic()) + tune.appendStartingElement('clef', multilineVars.iChar + i, multilineVars.iChar + line.length, multilineVars.clef); + if (result.foundKey && tune.hasBeginMusic()) + tune.appendStartingElement('key', multilineVars.iChar + i, multilineVars.iChar + line.length, abc_parse_key_voice.fixKey(multilineVars.clef, multilineVars.key)); + return [ line.length ]; + case "P:": + if (tune.hasBeginMusic()) + tune.appendElement('part', multilineVars.iChar + i, multilineVars.iChar + line.length, {title: line.substring(i+2)}); + return [ line.length ]; + case "L:": + this.setDefaultLength(line, i+2, line.length); + return [ line.length ]; + case "Q:": + var e = line.indexOf('\x12', i+2); + if (e === -1) e = line.length; + var tempo = this.setTempo(line, i+2, e); + if (tempo.type === 'delaySet') tune.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, this.calcTempo(tempo.tempo)); + else if (tempo.type === 'immediate') tune.appendElement('tempo', multilineVars.iChar + i, multilineVars.iChar + line.length, tempo.tempo); + return [ e, line.charAt(i), abc_common.strip(line.substring(i+2))]; + case "V:": + abc_parse_key_voice.parseVoice(line, i+2, line.length); +// startNewLine(); + return [ line.length, line.charAt(i), abc_common.strip(line.substring(i+2))]; + // TODO: complain about unhandled header + } + } + return [ 0 ]; + }; + + var metaTextHeaders = { + A: 'author', + B: 'book', + C: 'composer', + D: 'discography', + F: 'url', + G: 'group', + I: 'instruction', + N: 'notes', + O: 'origin', + R: 'rhythm', + S: 'source', + W: 'unalignedWords', + Z: 'transcription' + }; + + this.parseHeader = function(line) { + if (abc_common.startsWith(line, '%%')) { + var err = abc_parse_directive.addDirective(line.substring(2)); + if (err) warn(err, line, 2); + return {}; + } + var i = line.indexOf('%'); + if (i >= 0) + line = line.substring(0, i); + line = line.replace(/\s+$/, ''); + + if (line.length === 0) + return {}; + + if (line.length >= 2) { + if (line.charAt(1) === ':') { + var nextLine = ""; + if (line.indexOf('\x12') >= 0 && line.charAt(0) !== 'w') { // w: is the only header field that can have a continuation. + nextLine = line.substring(line.indexOf('\x12')+1); + line = line.substring(0, line.indexOf('\x12')); //This handles a continuation mark on a header field + } + var field = metaTextHeaders[line.charAt(0)]; + if (field !== undefined) { + if (field === 'unalignedWords') + tune.addMetaTextArray(field, abc_parse_directive.parseFontChangeLine(tokenizer.translateString(tokenizer.stripComment(line.substring(2))))); + else + tune.addMetaText(field, tokenizer.translateString(tokenizer.stripComment(line.substring(2)))); + return {}; + } else { + var startChar = multilineVars.iChar; + var endChar = startChar + line.length; + switch(line.charAt(0)) + { + case 'H': + tune.addMetaText("history", tokenizer.translateString(tokenizer.stripComment(line.substring(2)))); + multilineVars.is_in_history = true; + break; + case 'K': + // since the key is the last thing that can happen in the header, we can resolve the tempo now + this.resolveTempo(); + var result = abc_parse_key_voice.parseKey(line.substring(2)); + if (!multilineVars.is_in_header && tune.hasBeginMusic()) { + if (result.foundClef) + tune.appendStartingElement('clef', startChar, endChar, multilineVars.clef); + if (result.foundKey) + tune.appendStartingElement('key', startChar, endChar, abc_parse_key_voice.fixKey(multilineVars.clef, multilineVars.key)); + } + multilineVars.is_in_header = false; // The first key signifies the end of the header. + break; + case 'L': + this.setDefaultLength(line, 2, line.length); + break; + case 'M': + multilineVars.origMeter = multilineVars.meter = this.setMeter(line.substring(2)); + break; + case 'P': + // TODO-PER: There is more to do with parts, but the writer doesn't care. + if (multilineVars.is_in_header) + tune.addMetaText("partOrder", tokenizer.translateString(tokenizer.stripComment(line.substring(2)))); + else + multilineVars.partForNextLine = { title: tokenizer.translateString(tokenizer.stripComment(line.substring(2))), startChar: startChar, endChar: endChar}; + break; + case 'Q': + var tempo = this.setTempo(line, 2, line.length); + if (tempo.type === 'delaySet') multilineVars.tempo = tempo.tempo; + else if (tempo.type === 'immediate') tune.metaText.tempo = tempo.tempo; + break; + case 'T': + this.setTitle(line.substring(2)); + break; + case 'U': + this.addUserDefinition(line, 2, line.length); + break; + case 'V': + abc_parse_key_voice.parseVoice(line, 2, line.length); + if (!multilineVars.is_in_header) + return {newline: true}; + break; + case 's': + return {symbols: true}; + case 'w': + return {words: true}; + case 'X': + break; + case 'E': + case 'm': + warn("Ignored header", line, 0); + break; + default: + // It wasn't a recognized header value, so parse it as music. + if (nextLine.length) + nextLine = "\x12" + nextLine; + //parseRegularMusicLine(line+nextLine); + //nextLine = ""; + return {regular: true, str: line+nextLine}; + } + } + if (nextLine.length > 0) + return {recurse: true, str: nextLine}; + return {}; + } + } + + // If we got this far, we have a regular line of mulsic + return {regular: true, str: line}; + }; +}; + +var abc_parse_header = ParseHeader; + +// abc_tokenizer.js: tokenizes an ABC Music Notation string to support abc_parse. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +// this is a series of functions that get a particular element out of the passed stream. +// the return is the number of characters consumed, so 0 means that the element wasn't found. +// also returned is the element found. This may be a different length because spaces may be consumed that aren't part of the string. +// The return structure for most calls is { len: num_chars_consumed, token: str } +var Tokenizer = function() { + this.skipWhiteSpace = function(str) { + for (var i = 0; i < str.length; i++) { + if (!this.isWhiteSpace(str.charAt(i))) + return i; + } + return str.length; // It must have been all white space + }; + var finished = function(str, i) { + return i >= str.length; + }; + this.eatWhiteSpace = function(line, index) { + for (var i = index; i < line.length; i++) { + if (!this.isWhiteSpace(line.charAt(i))) + return i-index; + } + return i-index; + }; + + // This just gets the basic pitch letter, ignoring leading spaces, and normalizing it to a capital + this.getKeyPitch = function(str) { + var i = this.skipWhiteSpace(str); + if (finished(str, i)) + return {len: 0}; + switch (str.charAt(i)) { + case 'A':return {len: i+1, token: 'A'}; + case 'B':return {len: i+1, token: 'B'}; + case 'C':return {len: i+1, token: 'C'}; + case 'D':return {len: i+1, token: 'D'}; + case 'E':return {len: i+1, token: 'E'}; + case 'F':return {len: i+1, token: 'F'}; + case 'G':return {len: i+1, token: 'G'}; +// case 'a':return {len: i+1, token: 'A'}; +// case 'b':return {len: i+1, token: 'B'}; +// case 'c':return {len: i+1, token: 'C'}; +// case 'd':return {len: i+1, token: 'D'}; +// case 'e':return {len: i+1, token: 'E'}; +// case 'f':return {len: i+1, token: 'F'}; +// case 'g':return {len: i+1, token: 'G'}; + } + return {len: 0}; + }; + + // This just gets the basic accidental, ignoring leading spaces, and only the ones that appear in a key + this.getSharpFlat = function(str) { + if (str === 'bass') + return {len: 0}; + switch (str.charAt(0)) { + case '#':return {len: 1, token: '#'}; + case 'b':return {len: 1, token: 'b'}; + } + return {len: 0}; + }; + + this.getMode = function(str) { + var skipAlpha = function(str, start) { + // This returns the index of the next non-alphabetic char, or the entire length of the string if not found. + while (start < str.length && ((str.charAt(start) >= 'a' && str.charAt(start) <= 'z') || (str.charAt(start) >= 'A' && str.charAt(start) <= 'Z'))) + start++; + return start; + }; + + var i = this.skipWhiteSpace(str); + if (finished(str, i)) + return {len: 0}; + var firstThree = str.substring(i,i+3).toLowerCase(); + if (firstThree.length > 1 && firstThree.charAt(1) === ' ' || firstThree.charAt(1) === '^' || firstThree.charAt(1) === '_' || firstThree.charAt(1) === '=') firstThree = firstThree.charAt(0); // This will handle the case of 'm' + switch (firstThree) { + case 'mix':return {len: skipAlpha(str, i), token: 'Mix'}; + case 'dor':return {len: skipAlpha(str, i), token: 'Dor'}; + case 'phr':return {len: skipAlpha(str, i), token: 'Phr'}; + case 'lyd':return {len: skipAlpha(str, i), token: 'Lyd'}; + case 'loc':return {len: skipAlpha(str, i), token: 'Loc'}; + case 'aeo':return {len: skipAlpha(str, i), token: 'm'}; + case 'maj':return {len: skipAlpha(str, i), token: ''}; + case 'ion':return {len: skipAlpha(str, i), token: ''}; + case 'min':return {len: skipAlpha(str, i), token: 'm'}; + case 'm':return {len: skipAlpha(str, i), token: 'm'}; + } + return {len: 0}; + }; + + this.getClef = function(str, bExplicitOnly) { + var strOrig = str; + var i = this.skipWhiteSpace(str); + if (finished(str, i)) + return {len: 0}; + // The word 'clef' is optional, but if it appears, a clef MUST appear + var needsClef = false; + var strClef = str.substring(i); + if (abc_common.startsWith(strClef, 'clef=')) { + needsClef = true; + strClef = strClef.substring(5); + i += 5; + } + if (strClef.length === 0 && needsClef) + return {len: i+5, warn: "No clef specified: " + strOrig}; + + var j = this.skipWhiteSpace(strClef); + if (finished(strClef, j)) + return {len: 0}; + if (j > 0) { + i += j; + strClef = strClef.substring(j); + } + var name = null; + if (abc_common.startsWith(strClef, 'treble')) + name = 'treble'; + else if (abc_common.startsWith(strClef, 'bass3')) + name = 'bass3'; + else if (abc_common.startsWith(strClef, 'bass')) + name = 'bass'; + else if (abc_common.startsWith(strClef, 'tenor')) + name = 'tenor'; + else if (abc_common.startsWith(strClef, 'alto2')) + name = 'alto2'; + else if (abc_common.startsWith(strClef, 'alto1')) + name = 'alto1'; + else if (abc_common.startsWith(strClef, 'alto')) + name = 'alto'; + else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'none'))) + name = 'none'; + else if (abc_common.startsWith(strClef, 'perc')) + name = 'perc'; + else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'C'))) + name = 'tenor'; + else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'F'))) + name = 'bass'; + else if (!bExplicitOnly && (needsClef && abc_common.startsWith(strClef, 'G'))) + name = 'treble'; + else + return {len: i+5, warn: "Unknown clef specified: " + strOrig}; + + strClef = strClef.substring(name.length); + j = this.isMatch(strClef, '+8'); + if (j > 0) + name += "+8"; + else { + j = this.isMatch(strClef, '-8'); + if (j > 0) + name += "-8"; + } + return {len: i+name.length, token: name, explicit: needsClef}; + }; + + // This returns one of the legal bar lines + // This is called alot and there is no obvious tokenable items, so this is broken apart. + this.getBarLine = function(line, i) { + switch (line.charAt(i)) { + case ']': + ++i; + switch (line.charAt(i)) { + case '|': return {len: 2, token: "bar_thick_thin"}; + case '[': + ++i; + if ((line.charAt(i) >= '1' && line.charAt(i) <= '9') || line.charAt(i) === '"') + return {len: 2, token: "bar_invisible"}; + return {len: 1, warn: "Unknown bar symbol"}; + default: + return {len: 1, token: "bar_invisible"}; + } + case ':': + ++i; + switch (line.charAt(i)) { + case ':': return {len: 2, token: "bar_dbl_repeat"}; + case '|': // :| + ++i; + switch (line.charAt(i)) { + case ']': // :|] + ++i; + switch (line.charAt(i)) { + case '|': // :|]| + ++i; + if (line.charAt(i) === ':') return {len: 5, token: "bar_dbl_repeat"}; + return {len: 3, token: "bar_right_repeat"}; + default: + return {len: 3, token: "bar_right_repeat"}; + } + case '|': // :|| + ++i; + if (line.charAt(i) === ':') return {len: 4, token: "bar_dbl_repeat"}; + return {len: 3, token: "bar_right_repeat"}; + default: + return {len: 2, token: "bar_right_repeat"}; + } + default: + return {len: 1, warn: "Unknown bar symbol"}; + } + case '[': // [ + ++i; + if (line.charAt(i) === '|') { // [| + ++i; + switch (line.charAt(i)) { + case ':': return {len: 3, token: "bar_left_repeat"}; + case ']': return {len: 3, token: "bar_invisible"}; + default: return {len: 2, token: "bar_thick_thin"}; + } + } else { + if ((line.charAt(i) >= '1' && line.charAt(i) <= '9') || line.charAt(i) === '"') + return {len: 1, token: "bar_invisible"}; + return {len: 0}; + } + case '|': // | + ++i; + switch (line.charAt(i)) { + case ']': return {len: 2, token: "bar_thin_thick"}; + case '|': // || + ++i; + if (line.charAt(i) === ':') return {len: 3, token: "bar_left_repeat"}; + return {len: 2, token: "bar_thin_thin"}; + case ':': // |: + var colons = 0; + while (line.charAt(i+colons) === ':') colons++; + return { len: 1+colons, token: "bar_left_repeat"}; + default: return {len: 1, token: "bar_thin"}; + } + } + return {len: 0}; + }; + + // this returns all the characters in the string that match one of the characters in the legalChars string + this.getTokenOf = function(str, legalChars) { + for (var i = 0; i < str.length; i++) { + if (legalChars.indexOf(str.charAt(i)) < 0) + return {len: i, token: str.substring(0, i)}; + } + return {len: i, token: str}; + }; + + this.getToken = function(str, start, end) { + // This returns the next set of chars that doesn't contain spaces + var i = start; + while (i < end && !this.isWhiteSpace(str.charAt(i))) + i++; + return str.substring(start, i); + }; + + // This just sees if the next token is the word passed in, with possible leading spaces + this.isMatch = function(str, match) { + var i = this.skipWhiteSpace(str); + if (finished(str, i)) + return 0; + if (abc_common.startsWith(str.substring(i), match)) + return i+match.length; + return 0; + }; + + this.getPitchFromTokens = function(tokens) { + var ret = { }; + var pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11}; + ret.position = pitches[tokens[0].token]; + if (ret.position === undefined) + return { warn: "Pitch expected. Found: " + tokens[0].token }; + tokens.shift(); + while (tokens.length) { + switch (tokens[0].token) { + case ',': ret.position -= 7; tokens.shift(); break; + case '\'': ret.position += 7; tokens.shift(); break; + default: return ret; + } + } + return ret; + }; + + this.getKeyAccidentals2 = function(tokens) { + var accs; + // find and strip off all accidentals in the token list + while (tokens.length > 0) { + var acc; + if (tokens[0].token === '^') { + acc = 'sharp'; + tokens.shift(); + if (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc}; + switch (tokens[0].token) { + case '^': acc = 'dblsharp'; tokens.shift(); break; + case '/': acc = 'quartersharp'; tokens.shift(); break; + } + } else if (tokens[0].token === '=') { + acc = 'natural'; + tokens.shift(); + } else if (tokens[0].token === '_') { + acc = 'flat'; + tokens.shift(); + if (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc}; + switch (tokens[0].token) { + case '_': acc = 'dblflat'; tokens.shift(); break; + case '/': acc = 'quarterflat'; tokens.shift(); break; + } + } else { + // Not an accidental, we'll assume that a later parse will recognize it. + return { accs: accs }; + } + if (tokens.length === 0) return {accs: accs, warn: 'Expected note name after ' + acc}; + switch (tokens[0].token.charAt(0)) + { + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + if (accs === undefined) + accs = []; + accs.push({ acc: acc, note: tokens[0].token.charAt(0) }); + if (tokens[0].token.length === 1) + tokens.shift(); + else + tokens[0].token = tokens[0].token.substring(1); + break; + default: + return {accs: accs, warn: 'Expected note name after ' + acc + ' Found: ' + tokens[0].token }; + } + } + return { accs: accs }; + }; + + // This gets an accidental marking for the key signature. It has the accidental then the pitch letter. + this.getKeyAccidental = function(str) { + var accTranslation = { + '^': 'sharp', + '^^': 'dblsharp', + '=': 'natural', + '_': 'flat', + '__': 'dblflat', + '_/': 'quarterflat', + '^/': 'quartersharp' + }; + var i = this.skipWhiteSpace(str); + if (finished(str, i)) + return {len: 0}; + var acc = null; + switch (str.charAt(i)) + { + case '^': + case '_': + case '=': + acc = str.charAt(i); + break; + default:return {len: 0}; + } + i++; + if (finished(str, i)) + return {len: 1, warn: 'Expected note name after accidental'}; + switch (str.charAt(i)) + { + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + return {len: i+1, token: {acc: accTranslation[acc], note: str.charAt(i)}}; + case '^': + case '_': + case '/': + acc += str.charAt(i); + i++; + if (finished(str, i)) + return {len: 2, warn: 'Expected note name after accidental'}; + switch (str.charAt(i)) + { + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + return {len: i+1, token: {acc: accTranslation[acc], note: str.charAt(i)}}; + default: + return {len: 2, warn: 'Expected note name after accidental'}; + } + break; + default: + return {len: 1, warn: 'Expected note name after accidental'}; + } + }; + + this.isWhiteSpace = function(ch) { + return ch === ' ' || ch === '\t' || ch === '\x12'; + }; + + this.getMeat = function(line, start, end) { + // This removes any comments starting with '%' and trims the ends of the string so that there are no leading or trailing spaces. + // it returns just the start and end characters that contain the meat. + var comment = line.indexOf('%', start); + if (comment >= 0 && comment < end) + end = comment; + while (start < end && (line.charAt(start) === ' ' || line.charAt(start) === '\t' || line.charAt(start) === '\x12')) + start++; + while (start < end && (line.charAt(end-1) === ' ' || line.charAt(end-1) === '\t' || line.charAt(end-1) === '\x12')) + end--; + return {start: start, end: end}; + }; + + var isLetter = function(ch) { + return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); + }; + + var isNumber = function(ch) { + return (ch >= '0' && ch <= '9'); + }; + + this.tokenize = function(line, start, end, alphaUntilWhiteSpace) { + // this returns all the tokens inside the passed string. A token is a punctuation mark, a string of digits, a string of letters. + // Quoted strings are one token. + // If there is a minus sign next to a number, then it is included in the number. + // If there is a period immediately after a number, with a number immediately following, then a float is returned. + // The type of token is returned: quote, alpha, number, punct + // If alphaUntilWhiteSpace is true, then the behavior of the alpha token changes. + + var ret = this.getMeat(line, start, end); + start = ret.start; + end = ret.end; + var tokens = []; + var i; + while (start < end) { + if (line.charAt(start) === '"') { + i = start+1; + while (i < end && line.charAt(i) !== '"') i++; + tokens.push({ type: 'quote', token: line.substring(start+1, i), start: start+1, end: i}); + i++; + } else if (isLetter(line.charAt(start))) { + i = start+1; + if (alphaUntilWhiteSpace) + while (i < end && !this.isWhiteSpace(line.charAt(i))) i++; + else + while (i < end && isLetter(line.charAt(i))) i++; + tokens.push({ type: 'alpha', token: line.substring(start, i), continueId: isNumber(line.charAt(i)), start: start, end: i}); + start = i + 1; + } else if (line.charAt(start) === '.' && isNumber(line.charAt(i+1))) { + i = start+1; + var int2 = null; + var float2 = null; + while (i < end && isNumber(line.charAt(i))) i++; + + float2 = parseFloat(line.substring(start, i)); + tokens.push({ type: 'number', token: line.substring(start, i), intt: int2, floatt: float2, continueId: isLetter(line.charAt(i)), start: start, end: i}); + start = i + 1; + } else if (isNumber(line.charAt(start)) || (line.charAt(start) === '-' && isNumber(line.charAt(i+1)))) { + i = start+1; + var intt = null; + var floatt = null; + while (i < end && isNumber(line.charAt(i))) i++; + if (line.charAt(i) === '.' && isNumber(line.charAt(i+1))) { + i++; + while (i < end && isNumber(line.charAt(i))) i++; + } else + intt = parseInt(line.substring(start, i)); + + floatt = parseFloat(line.substring(start, i)); + tokens.push({ type: 'number', token: line.substring(start, i), intt: intt, floatt: floatt, continueId: isLetter(line.charAt(i)), start: start, end: i}); + start = i + 1; + } else if (line.charAt(start) === ' ' || line.charAt(start) === '\t') { + i = start+1; + } else { + tokens.push({ type: 'punct', token: line.charAt(start), start: start, end: start+1}); + i = start+1; + } + start = i; + } + return tokens; + }; + + this.getVoiceToken = function(line, start, end) { + // This finds the next token. A token is delimited by a space or an equal sign. If it starts with a quote, then the portion between the quotes is returned. + var i = start; + while (i < end && this.isWhiteSpace(line.charAt(i)) || line.charAt(i) === '=') + i++; + + if (line.charAt(i) === '"') { + var close = line.indexOf('"', i+1); + if (close === -1 || close >= end) + return {len: 1, err: "Missing close quote"}; + return {len: close-start+1, token: this.translateString(line.substring(i+1, close))}; + } else { + var ii = i; + while (ii < end && !this.isWhiteSpace(line.charAt(ii)) && line.charAt(ii) !== '=') + ii++; + return {len: ii-start+1, token: line.substring(i, ii)}; + } + }; + + var charMap = { + "`a": 'Ă ', "'a": "ĂĄ", "^a": "Ăą", "~a": "ĂŁ", "\"a": "Ă€", "oa": "Ă„", "aa": "Ă„", "=a": "ā", "ua": "ă", ";a": "ą", + "`e": 'Ăš', "'e": "Ă©", "^e": "ĂȘ", "\"e": "Ă«", "=e": "ē", "ue": "ĕ", ";e": "ę", ".e": "ė", + "`i": 'ĂŹ', "'i": "Ă­", "^i": "Ăź", "\"i": "ĂŻ", "=i": "Ä«", "ui": "Ä­", ";i": "ÄŻ", + "`o": 'ĂČ', "'o": "Ăł", "^o": "ĂŽ", "~o": "Ă”", "\"o": "ö", "=o": "ƍ", "uo": "Ə", "/o": "Ăž", + "`u": 'Ăč', "'u": "Ăș", "^u": "Ă»", "~u": "Ć©", "\"u": "ĂŒ", "ou": "ĆŻ", "=u": "Ć«", "uu": "Ć­", ";u": "Ćł", + "`A": 'À', "'A": "Á", "^A": "Â", "~A": "Ã", "\"A": "Ä", "oA": "Å", "AA": "Å", "=A": "Ā", "uA": "Ă", ";A": "Ą", + "`E": 'È', "'E": "É", "^E": "Ê", "\"E": "Ë", "=E": "Ē", "uE": "Ĕ", ";E": "Ę", ".E": "Ė", + "`I": 'Ì', "'I": "Í", "^I": "Î", "~I": "Äš", "\"I": "Ï", "=I": "ÄȘ", "uI": "ÄŹ", ";I": "Äź", ".I": "Ä°", + "`O": 'Ò', "'O": "Ó", "^O": "Ô", "~O": "Õ", "\"O": "Ö", "=O": "ƌ", "uO": "Ǝ", "/O": "Ø", + "`U": 'Ù', "'U": "Ú", "^U": "Û", "~U": "Ćš", "\"U": "Ü", "oU": "Ćź", "=U": "ĆȘ", "uU": "ĆŹ", ";U": "ĆČ", + "ae": "ĂŠ", "AE": "Æ", "oe": "Ɠ", "OE": "ƒ", "ss": "ß", + "'c": "ć", "^c": "ĉ", "uc": "č", "cc": "ç", ".c": "ċ", "cC": "Ç", "'C": "Ć", "^C": "Ĉ", "uC": "Č", ".C": "Ċ", + "~N": "Ñ", "~n": "ñ", + "=s": "ĆĄ", "vs": "ĆĄ", + "DH": "Ð", "dh": "Ă°", + "HO": "Ɛ", "Ho": "Ƒ", "HU": "Ć°", "Hu": "Ʊ", + "'Y": "Ý", "'y": "Ăœ", "^Y": "ƶ", "^y": "Ć·", "\"Y": "Ćž", "\"y": "Ăż", + "vS": "Ć ", "vZ": "Ćœ", "vz": 'ĆŸ' + +// More chars: ÄČ Äł Ď ď Đ đ Ĝ ĝ Ğ ğ Ä  ÄĄ Äą ÄŁ Ä€ Ä„ ÄŠ ħ ÄŽ Ä” Ķ Ä· Äž Äč Äș Ä» ÄŒ Äœ ÄŸ Äż ƀ Ɓ Ƃ ƃ Ƅ ƅ Ɔ Ƈ ƈ Ɖ Ɗ Ƌ Ɣ ƕ Ɩ Ɨ Ƙ ƙ ƚ ƛ Ɯ Ɲ ƞ Ɵ Ć  Ćą ĆŁ Ć€ Ć„ ĆŠ Ƨ ĆŽ Ć” Ćč Ćș Ć» ĆŒ Ćœ + }; + var charMap1 = { + "#": "♯", + "b": "♭", + "=": "♼" + }; + var charMap2 = { + "201": "♯", + "202": "♭", + "203": "♼", + "241": "ÂĄ", + "242": "Âą", "252": "a", "262": "2", "272": "o", "302": "Â", "312": "Ê", "322": "Ò", "332": "Ú", "342": "Ăą", "352": "ĂȘ", "362": "ĂČ", "372": "Ăș", + "243": "ÂŁ", "253": "«", "263": "3", "273": "»", "303": "Ã", "313": "Ë", "323": "Ó", "333": "Û", "343": "ĂŁ", "353": "Ă«", "363": "Ăł", "373": "Ă»", + "244": "€", "254": "ÂŹ", "264": " ́", "274": "1⁄4", "304": "Ä", "314": "Ì", "324": "Ô", "334": "Ü", "344": "Ă€", "354": "ĂŹ", "364": "ĂŽ", "374": "ĂŒ", + "245": "„", "255": "-", "265": "ÎŒ", "275": "1⁄2", "305": "Å", "315": "Í", "325": "Õ", "335": "Ý", "345": "Ă„", "355": "Ă­", "365": "Ă”", "375": "Ăœ", + "246": "Š", "256": "Âź", "266": "¶", "276": "3⁄4", "306": "Æ", "316": "Î", "326": "Ö", "336": "Þ", "346": "ĂŠ", "356": "Ăź", "366": "ö", "376": "ĂŸ", + "247": "§", "257": " ̄", "267": "·", "277": "Âż", "307": "Ç", "317": "Ï", "327": "×", "337": "ß", "347": "ç", "357": "ĂŻ", "367": "Ă·", "377": "Ăż", + "250": " ̈", "260": "°", "270": " ̧", "300": "À", "310": "È", "320": "Ð", "330": "Ø", "340": "Ă ", "350": "Ăš", "360": "Ă°", "370": "Ăž", + "251": "©", "261": "±", "271": "1", "301": "Á", "311": "É", "321": "Ñ", "331": "Ù", "341": "ĂĄ", "351": "Ă©", "361": "ñ", "371": "Ăč" }; + this.translateString = function(str) { + var arr = str.split('\\'); + if (arr.length === 1) return str; + var out = null; + abc_common.each(arr, function(s) { + if (out === null) + out = s; + else { + var c = charMap[s.substring(0, 2)]; + if (c !== undefined) + out += c + s.substring(2); + else { + c = charMap2[s.substring(0, 3)]; + if (c !== undefined) + out += c + s.substring(3); + else { + c = charMap1[s.substring(0, 1)]; + if (c !== undefined) + out += c + s.substring(1); + else + out += "\\" + s; + } + } + } + }); + return out; + }; + this.getNumber = function(line, index) { + var num = 0; + while (index < line.length) { + switch (line.charAt(index)) { + case '0':num = num*10;index++;break; + case '1':num = num*10+1;index++;break; + case '2':num = num*10+2;index++;break; + case '3':num = num*10+3;index++;break; + case '4':num = num*10+4;index++;break; + case '5':num = num*10+5;index++;break; + case '6':num = num*10+6;index++;break; + case '7':num = num*10+7;index++;break; + case '8':num = num*10+8;index++;break; + case '9':num = num*10+9;index++;break; + default: + return {num: num, index: index}; + } + } + return {num: num, index: index}; + }; + + this.getFraction = function(line, index) { + var num = 1; + var den = 1; + if (line.charAt(index) !== '/') { + var ret = this.getNumber(line, index); + num = ret.num; + index = ret.index; + } + if (line.charAt(index) === '/') { + index++; + if (line.charAt(index) === '/') { + var div = 0.5; + while (line.charAt(index++) === '/') + div = div /2; + return {value: num * div, index: index-1}; + } else { + var iSave = index; + var ret2 = this.getNumber(line, index); + if (ret2.num === 0 && iSave === index) // If we didn't use any characters, it is an implied 2 + ret2.num = 2; + if (ret2.num !== 0) + den = ret2.num; + index = ret2.index; + } + } + + return {value: num/den, index: index}; + }; + + this.theReverser = function(str) { + if (abc_common.endsWith(str, ", The")) + return "The " + str.substring(0, str.length-5); + if (abc_common.endsWith(str, ", A")) + return "A " + str.substring(0, str.length-3); + return str; + }; + + this.stripComment = function(str) { + var i = str.indexOf('%'); + if (i >= 0) + return abc_common.strip(str.substring(0, i)); + return abc_common.strip(str); + }; + + this.getInt = function(str) { + // This parses the beginning of the string for a number and returns { value: num, digits: num } + // If digits is 0, then the string didn't point to a number. + var x = parseInt(str); + if (isNaN(x)) + return {digits: 0}; + var s = "" + x; + var i = str.indexOf(s); // This is to account for leading spaces + return {value: x, digits: i+s.length}; + }; + + this.getFloat = function(str) { + // This parses the beginning of the string for a number and returns { value: num, digits: num } + // If digits is 0, then the string didn't point to a number. + var x = parseFloat(str); + if (isNaN(x)) + return {digits: 0}; + var s = "" + x; + var i = str.indexOf(s); // This is to account for leading spaces + return {value: x, digits: i+s.length}; + }; + + this.getMeasurement = function(tokens) { + if (tokens.length === 0) return { used: 0 }; + var used = 1; + var num = ''; + if (tokens[0].token === '-') { + tokens.shift(); + num = '-'; + used++; + } + else if (tokens[0].type !== 'number') return { used: 0 }; + num += tokens.shift().token; + if (tokens.length === 0) return { used: 1, value: parseInt(num) }; + var x = tokens.shift(); + if (x.token === '.') { + used++; + if (tokens.length === 0) return { used: used, value: parseInt(num) }; + if (tokens[0].type === 'number') { + x = tokens.shift(); + num = num + '.' + x.token; + used++; + if (tokens.length === 0) return { used: used, value: parseFloat(num) }; + } + x = tokens.shift(); + } + switch (x.token) { + case 'pt': return { used: used+1, value: parseFloat(num) }; + case 'cm': return { used: used+1, value: parseFloat(num)/2.54*72 }; + case 'in': return { used: used+1, value: parseFloat(num)*72 }; + default: tokens.unshift(x); return { used: used, value: parseFloat(num) }; + } + }; + var substInChord = function(str) + { + while ( str.indexOf("\\n") !== -1) + { + str = str.replace("\\n", "\n"); + } + return str; + }; + this.getBrackettedSubstring = function(line, i, maxErrorChars, _matchChar) + { + // This extracts the sub string by looking at the first character and searching for that + // character later in the line (or search for the optional _matchChar). + // For instance, if the first character is a quote it will look for + // the end quote. If the end of the line is reached, then only up to the default number + // of characters are returned, so that a missing end quote won't eat up the entire line. + // It returns the substring and the number of characters consumed. + // The number of characters consumed is normally two more than the size of the substring, + // but in the error case it might not be. + var matchChar = _matchChar || line.charAt(i); + var pos = i+1; + while ((pos < line.length) && (line.charAt(pos) !== matchChar)) + ++pos; + if (line.charAt(pos) === matchChar) + return [pos-i+1,substInChord(line.substring(i+1, pos)), true]; + else // we hit the end of line, so we'll just pick an arbitrary num of chars so the line doesn't disappear. + { + pos = i+maxErrorChars; + if (pos > line.length-1) + pos = line.length-1; + return [pos-i+1, substInChord(line.substring(i+1, pos)), false]; + } + }; +}; + +var abc_tokenizer = Tokenizer; + +// wrap_lines.js: does line wrap on an already parsed tune. +// Copyright (C) 2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +function wrapLines(tune, lineBreaks) { + if (!lineBreaks || tune.lines.length === 0) + return; + + // tune.lines contains nested arrays: there is an array of lines (that's the part this function rewrites), + // there is an array of staffs per line (for instance, piano will have 2, orchestra will have many) + // there is an array of voices per staff (for instance, 4-part harmony might have bass and tenor on a single staff) + // The measure numbers start at zero for each staff, but on the succeeding lines, the measure numbers are reset to the beginning of the line. + var newLines = []; + // keep track of our counters for each staff and voice + var startNewLine = []; + var currentLine = []; + var measureNumber = []; + var measureMarker = []; + var lastMeter = ''; + var voiceStart = {}; + var linesWithoutStaff = 0; + + for (var i = 0; i < tune.lines.length; i++) { + var line = tune.lines[i]; + if (line.staff) { + var staffs = line.staff; + for (var j = 0; j < staffs.length; j++) { + if (startNewLine[j] === undefined) { + startNewLine[j] = []; + currentLine[j] = []; + measureNumber[j] = []; + measureMarker[j] = []; + } + var staff = staffs[j]; + var voices = staff.voices; + for (var k = 0; k < voices.length; k++) { + if (startNewLine[j][k] === undefined) { + startNewLine[j][k] = true; + currentLine[j][k] = 0; + measureNumber[j][k] = 0; + measureMarker[j][k] = 0; + } + if (linesWithoutStaff > 0) currentLine[j][k] += linesWithoutStaff; + var voice = voices[k]; + for (var e = 0; e < voice.length; e++) { + if (startNewLine[j][k]) { + if (!newLines[currentLine[j][k]]) + newLines[currentLine[j][k]] = { staff: [] }; + if (!newLines[currentLine[j][k]].staff[j]) { + newLines[currentLine[j][k]].staff[j] = {voices: []}; + for (var key in staff) { + if (staff.hasOwnProperty(key)) { + if (key === 'meter') { + if (newLines.length === 1 || lastMeter !== JSON.stringify(staff[key])) { + lastMeter = JSON.stringify(staff[key]); + newLines[currentLine[j][k]].staff[j][key] = staff[key]; + } + } else if (key !== 'voices') { + newLines[currentLine[j][k]].staff[j][key] = staff[key]; + } + } + } + } + if (measureMarker[j][k]) + newLines[currentLine[j][k]].staff[j].barNumber = measureMarker[j][k]; + startNewLine[j][k] = false; + } + var element = voice[e]; + if (!newLines[currentLine[j][k]].staff[j].voices[k]) { + newLines[currentLine[j][k]].staff[j].voices[k] = []; + for (var startItem in voiceStart) { + if (voiceStart.hasOwnProperty(startItem)) { + newLines[currentLine[j][k]].staff[j].voices[k].push(voiceStart[startItem]); + } + } + } + newLines[currentLine[j][k]].staff[j].voices[k].push(element); + if (element.el_type === 'stem') { + // This is a nice trick to just pay attention to the last setting of each type. + voiceStart[element.el_type] = element; + } + + if (element.el_type === 'bar') { + measureNumber[j][k]++; + if (lineBreaks[measureNumber[j][k]]) { + startNewLine[j][k] = true; + currentLine[j][k]++; + measureMarker[j][k] = element.barNumber; + delete element.barNumber; + } + } + } + + } + } + linesWithoutStaff = 0; + } else { + newLines.push(line); + linesWithoutStaff++; + } + } + tune.lines = newLines; +} + +function freeFormLineBreaks(widths, lineBreakPoint) { + var lineBreaks = []; + var totals = []; + var totalThisLine = 0; + // run through each measure and see if the accumulation is less than the ideal. + // if it passes the ideal, then see whether the last or this one is closer to the ideal. + for (var i = 0; i < widths.length; i++) { + var width = widths[i]; + var attemptedWidth = totalThisLine + width; + if (attemptedWidth < lineBreakPoint) + totalThisLine = attemptedWidth; + else { + // This just passed the ideal, so see whether the previous or the current number of measures is closer. + var oldDistance = lineBreakPoint - totalThisLine; + var newDistance = attemptedWidth - lineBreakPoint; + if (oldDistance < newDistance && totalThisLine > 0) { + lineBreaks.push(i - 1); + totals.push(Math.round(totalThisLine - width)); + totalThisLine = width; + } else { + if (i < widths.length-1) { + lineBreaks.push(i); + totals.push(Math.round(totalThisLine)); + totalThisLine = 0; + } + } + } + } + totals.push(Math.round(totalThisLine)); + return { lineBreaks: lineBreaks, totals: totals }; +} + +function clone(arr) { + var newArr = []; + for (var i = 0; i < arr.length; i++) + newArr.push(arr[i]); + return newArr; +} + +function oneTry(measureWidths, idealWidths, accumulator, lineAccumulator, lineWidths, lastVariance, highestVariance, currLine, lineBreaks, startIndex, otherTries) { + for (var i = startIndex; i < measureWidths.length; i++) { + var measureWidth = measureWidths[i]; + accumulator += measureWidth; + lineAccumulator += measureWidth; + var thisVariance = Math.abs(accumulator - idealWidths[currLine]); + var varianceIsClose = Math.abs(thisVariance - lastVariance) < idealWidths[0] / 10; // see if the difference is less than 10%, if so, run the test both ways. + if (varianceIsClose) { + if (thisVariance < lastVariance) { + // Also attempt one less measure on the current line - sometimes that works out better. + var newWidths = clone(lineWidths); + var newBreaks = clone(lineBreaks); + newBreaks.push(i-1); + newWidths.push(lineAccumulator - measureWidth); + otherTries.push({ + accumulator: accumulator, + lineAccumulator: measureWidth, + lineWidths: newWidths, + lastVariance: Math.abs(accumulator - idealWidths[currLine+1]), + highestVariance: Math.max(highestVariance, lastVariance), + currLine: currLine+1, + lineBreaks: newBreaks, + startIndex: i+1}); + } else if (thisVariance > lastVariance && i < measureWidths.length-1) { + // Also attempt one extra measure on this line. + newWidths = clone(lineWidths); + newBreaks = clone(lineBreaks); + // newBreaks[newBreaks.length-1] = i; + // newWidths[newWidths.length-1] = lineAccumulator; + otherTries.push({ + accumulator: accumulator, + lineAccumulator: lineAccumulator, + lineWidths: newWidths, + lastVariance: thisVariance, + highestVariance: Math.max(highestVariance, thisVariance), + currLine: currLine, + lineBreaks: newBreaks, + startIndex: i+1}); + } + } + if (thisVariance > lastVariance) { + lineBreaks.push(i - 1); + currLine++; + highestVariance = Math.max(highestVariance, lastVariance); + lastVariance = Math.abs(accumulator - idealWidths[currLine]); + lineWidths.push(lineAccumulator - measureWidth); + lineAccumulator = measureWidth; + } else { + lastVariance = thisVariance; + } + } + lineWidths.push(lineAccumulator); +} + +function optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation) { + // figure out how many lines - That's one more than was tried before. + var numLines = Math.ceil(widths.total / lineBreakPoint) + 1; + + // get the ideal width for a line (cumulative width / num lines) - approx the same as lineBreakPoint except for rounding + var idealWidth = Math.floor(widths.total / numLines); + + // get each ideal line width (1*ideal, 2*ideal, 3*ideal, etc) + var idealWidths = []; + for (var i = 0; i < numLines; i++) + idealWidths.push(idealWidth*(i+1)); + + // from first measure, step through accum. Widths until the abs of the ideal is greater than the last one. + // This can sometimes look funny in edge cases, so when the length is within 10%, try one more or one less to see which is better. + // This is better than trying all the possibilities because that would get to be a huge number for even a medium size piece. + // This method seems to never generate more than about 16 tries and it is usually 4 or less. + var otherTries = []; + otherTries.push({ + accumulator: 0, + lineAccumulator: 0, + lineWidths: [], + lastVariance: 999999, + highestVariance: 0, + currLine: 0, + lineBreaks: [], // These are the zero-based last measure on each line + startIndex: 0}); + var index = 0; + while (index < otherTries.length) { + oneTry(widths.measureWidths, + idealWidths, + otherTries[index].accumulator, + otherTries[index].lineAccumulator, + otherTries[index].lineWidths, + otherTries[index].lastVariance, + otherTries[index].highestVariance, + otherTries[index].currLine, + otherTries[index].lineBreaks, + otherTries[index].startIndex, + otherTries); + index++; + } + for (i = 0; i < otherTries.length; i++) { + var otherTry = otherTries[i]; + otherTry.variances = []; + otherTry.aveVariance = 0; + for (var j = 0; j < otherTry.lineWidths.length; j++) { + var lineWidth = otherTry.lineWidths[j]; + otherTry.variances.push(lineWidth - idealWidths[0]); + otherTry.aveVariance += Math.abs(lineWidth - idealWidths[0]); + } + otherTry.aveVariance = otherTry.aveVariance / otherTry.lineWidths.length; + explanation.attempts.push({ type: "optimizeLineWidths", lineBreaks: otherTry.lineBreaks, variances: otherTry.variances, aveVariance: otherTry.aveVariance, widths: widths.measureWidths }); + } + var smallest = 9999999; + var smallestIndex = -1; + for (i = 0; i < otherTries.length; i++) { + otherTry = otherTries[i]; + if (otherTry.aveVariance < smallest) { + smallest = otherTry.aveVariance; + smallestIndex = i; + } + } + return { failed: false, lineBreaks: otherTries[smallestIndex].lineBreaks, variance: otherTries[smallestIndex].highestVariance }; +} +// // Instead of having to try all the different combinations to find the best, we start with an important piece of knowledge about the lineBreaks we are given: +// // If there is a line too short, it is the last one. +// // So, let's just do a couple of tweaks to see how it works to add one or two measures to the last line. +// var avg = widths.total / (lineBreaks.length + 1); +// var variance = getVariance(widths, lineBreaks); +// var variancePct = variance/lineBreakPoint*100; +// +// if (lineBreaks.length === 0) +// return { failed: true, reason: "Only one line." }; +// +// var lastLineStart = lineBreaks[lineBreaks.length-1]+1; +// var lastLineVariance = lineVariance(widths.measureWidths, lastLineStart, widths.measureWidths.length, avg); +// if (variance > lastLineVariance) +// return { failed: true, reason: "Last line is not too short." }; +// +// // Let's get a list of all combinations that have a possibility of working. That is, all combinations where no line has a variance larger than "variance". +// var lastLines = lastLinePossibilities(widths.measureWidths, lastLineStart, avg - variance, avg + variance); +// var attempts = getAttempts(widths.measureWidths, 0, lineBreaks.length, avg - variance, avg + variance, lastLines); +// //console.log(attempts, avg - variance, avg + variance); +// +// var failed = true; +// for (var i = 0; i < attempts.length; i++) { +// var newVariance = getVariance(widths, attempts[i]); +// if (newVariance < variance) { +// explanation.attempts.push({ +// type: "Optimize try", lineBreaks: attempts[i], +// variance: Math.round(variance), newVariance: Math.round(newVariance), +// totalAttempts: attempts.length +// }); +// variance = newVariance; +// lineBreaks = attempts[i]; +// failed = false; +// } +// } +// if (failed) { +// explanation.attempts.push({ type: "Optimize try", lineBreaks: lineBreaks, variance: variance, reason: "None of the " + attempts.length + " attempts were better." }); +// // TODO-PER: This shouldn't be necessary, but just try to move one measure down and see if it helps. +// if (lineBreaks.length > 0) { +// var attempt = [].concat(lineBreaks); +// attempt[attempt.length - 1]--; +// newVariance = getVariance(widths, attempt); +// explanation.attempts.push({ +// type: "Optimize last try", lineBreaks: attempts[i], +// variance: Math.round(variance), newVariance: Math.round(newVariance), +// totalAttempts: attempts.length +// }); +// if (newVariance < variance) { +// variance = newVariance; +// lineBreaks = attempt; +// failed = false; +// } +// } +// } +// // Let's squeeze the line successively until it spills onto an extra line, then take the option with the lowest variance +// // var targetNumLines = lineBreaks.length; +// // var newNumLines = targetNumLines; +// // var TRY_INCREMENT = 1; +// // var tryBreakPoint = lineBreakPoint - TRY_INCREMENT; +// // var failed = true; +// // while (targetNumLines === newNumLines && tryBreakPoint > 50) { +// // var ff = freeFormLineBreaks(widths.measureWidths, tryBreakPoint); +// // newNumLines = ff.lineBreaks.length; +// // if (newNumLines === targetNumLines) { +// // var newVariance = getVariance(widths, ff.lineBreaks); +// // var newVariancePct = newVariance/tryBreakPoint*100; +// // explanation.attempts.push({type: "Optimize try", tryBreakPoint: Math.round(tryBreakPoint), lineBreaks: ff.lineBreaks, totals: ff.totals, +// // variance: Math.round(variance), newVariance: Math.round(newVariance), variancePct: Math.round(variancePct), newVariancePct: Math.round(newVariancePct) +// // }); +// // if (newVariancePct < variancePct) { +// // variancePct = newVariancePct; +// // lineBreaks = ff.lineBreaks; +// // failed = false; +// // } +// // } else { +// // explanation.attempts.push({type: "Optimize try", explanation: "Exceeded number of lines." , tryBreakPoint: Math.round(tryBreakPoint), lineBreaks: ff.lineBreaks, totals: ff.totals, variance: variance, avg: avg, variancePct: variancePct}); +// // } +// // tryBreakPoint -= TRY_INCREMENT; +// // } +// +// return { failed: failed, lineBreaks: lineBreaks, variance: variance }; +// } + +// function fixedNumLinesBreaks(widths, numLines, allowOver, allowableVariance) { +// var idealLineBreak = widths.total / numLines; +// // If all the measures had the same amount of stuff, then the ave would be correct. +// // We will test all the combinations from one less to one more than the average. +// var averageMeasuresPerLine = Math.round(widths.measureWidths.length / numLines); +// var minMeasuresPerLine = Math.max(averageMeasuresPerLine - 1, 1); +// var maxMeasuresPerLine = averageMeasuresPerLine + 1; +// var tries = createLineTestArray(numLines, widths.measureWidths.length, maxMeasuresPerLine, minMeasuresPerLine); +// console.log("fixedNumLinesBreaks tests ("+minMeasuresPerLine+'-'+maxMeasuresPerLine+")", numLines, tries.length) +// +// // For each possible number of measures per line, see which has the closest spacing to the ideal. +// var bestCase = -1; +// var bestCaseVariance = 1000000; +// for (var i = 0 ; i < tries.length; i++) { +// var attempt = tries[i]; +// var variance = getVariance(attempt, idealLineBreak, widths.measureWidths, allowOver ? allowableVariance : 0); +// if (variance !== null) { +// if (variance < bestCaseVariance) { +// bestCaseVariance = variance; +// bestCase = i; +// } +// } +// } +// var failed = true; +// // For debugging, recreate the line widths +// var totals = []; +// if (bestCase >= 0) { +// failed = false; +// var index = 0; +// for (i = 0; i < tries[bestCase].length; i++) { +// var total = 0; +// for (var j = 0; j < tries[bestCase][i]; j++) { +// total += widths.measureWidths[index++]; +// } +// totals.push(Math.round(total)); +// } +// // We now have an array that contains the number of measures per line, but we want to return the absolute measure number to break on. +// if (tries[bestCase].length > 0) { +// tries[bestCase][0]--; // The results should contain the last measure number on the line, zero-based. +// for (i = 1; i < tries[bestCase].length; i++) +// tries[bestCase][i] += tries[bestCase][i - 1]; // This sets the zero-based measure number +// // The last line is implied and we don't need to return it +// tries[bestCase].pop(); +// } +// } +// return { failed: failed, lineBreaks: tries[bestCase], bestCaseVariance: Math.round(bestCaseVariance), totals: totals }; +// } + +function fixedMeasureLineBreaks(widths, lineBreakPoint, preferredMeasuresPerLine) { + var lineBreaks = []; + var totals = []; + var thisWidth = 0; + var failed = false; + for (var i = 0; i < widths.length; i++) { + thisWidth += widths[i]; + if (thisWidth > lineBreakPoint) { + failed = true; + } + if (i % preferredMeasuresPerLine === (preferredMeasuresPerLine-1)) { + if (i !== widths.length-1) // Don't bother putting a line break for the last line - it's already a break. + lineBreaks.push(i); + totals.push(Math.round(thisWidth)); + thisWidth = 0; + } + } + return { failed: failed, totals: totals, lineBreaks: lineBreaks }; +} + +function getRevisedTune(lineBreaks, staffWidth, abcString, params, Parse) { + var abcParser = new Parse(); + var revisedParams = { + lineBreaks: lineBreaks, + staffwidth: staffWidth + }; + for (var key in params) { + if (params.hasOwnProperty(key) && key !== 'wrap' && key !== 'staffwidth') { + revisedParams[key] = params[key]; + } + } + + abcParser.parse(abcString, revisedParams); + return { tune: abcParser.getTune(), revisedParams: revisedParams }; +} + +function calcLineWraps(tune, widths, abcString, params, Parse, engraver_controller) { + // For calculating how much can go on the line, it depends on the width of the line. It is a convenience to just divide it here + // by the minimum spacing instead of multiplying the min spacing later. + // The scaling works differently: this is done by changing the scaling of the outer SVG, so the scaling needs to be compensated + // for here, because the actual width will be different from the calculated numbers. + + // If the desired width is less than the margin, just punt and return the original tune + if (params.staffwidth < widths.left) { + return { + explanation: "Staffwidth is narrower than the margin", + tune: tune, + revisedParams: params + }; + } + var scale = params.scale ? Math.max(params.scale, 0.1) : 1; + var minSpacing = params.wrap.minSpacing ? Math.max(parseFloat(params.wrap.minSpacing), 1) : 1; + var minSpacingLimit = params.wrap.minSpacingLimit ? Math.max(parseFloat(params.wrap.minSpacingLimit), 1) : minSpacing - 0.1; + var maxSpacing = params.wrap.maxSpacing ? Math.max(parseFloat(params.wrap.maxSpacing), 1) : undefined; + if (params.wrap.lastLineLimit && !maxSpacing) + maxSpacing = Math.max(parseFloat(params.wrap.lastLineLimit), 1); + var targetHeight = params.wrap.targetHeight ? Math.max(parseInt(params.wrap.targetHeight, 10), 100) : undefined; + var preferredMeasuresPerLine = params.wrap.preferredMeasuresPerLine ? Math.max(parseInt(params.wrap.preferredMeasuresPerLine, 10), 1) : undefined; + + var lineBreakPoint = (params.staffwidth - widths.left) / minSpacing / scale; + var minLineSize = (params.staffwidth - widths.left) / maxSpacing / scale; + var allowableVariance = (params.staffwidth - widths.left) / minSpacingLimit / scale; + var explanation = { widths: widths, lineBreakPoint: lineBreakPoint, minLineSize: minLineSize, attempts: [], staffWidth: params.staffwidth, minWidth: Math.round(allowableVariance) }; + + // If there is a preferred number of measures per line, test that first. If none of the lines is too long, then we're finished. + var lineBreaks = null; + if (preferredMeasuresPerLine) { + var f = fixedMeasureLineBreaks(widths.measureWidths, lineBreakPoint, preferredMeasuresPerLine); + explanation.attempts.push({ type: "Fixed Measures Per Line", preferredMeasuresPerLine: preferredMeasuresPerLine, lineBreaks: f.lineBreaks, failed: f.failed, totals: f.totals }); + if (!f.failed) + lineBreaks = f.lineBreaks; + } + + // If we don't have lineBreaks yet, use the free form method of line breaks. + // This will be called either if Preferred Measures is not used, or if the music is just weird - like a single measure is way too crowded. + if (!lineBreaks) { + var ff = freeFormLineBreaks(widths.measureWidths, lineBreakPoint); + explanation.attempts.push({ type: "Free Form", lineBreaks: ff.lineBreaks, totals: ff.totals }); + lineBreaks = ff.lineBreaks; + + // We now have an acceptable number of lines, but the measures may not be optimally distributed. See if there is a better distribution. + ff = optimizeLineWidths(widths, lineBreakPoint, lineBreaks, explanation); + explanation.attempts.push({ type: "Optimize", failed: ff.failed, reason: ff.reason, lineBreaks: ff.lineBreaks, totals: ff.totals }); + if (!ff.failed) + lineBreaks = ff.lineBreaks; + } + + // If the vertical space exceeds targetHeight, remove a line and try again. If that is too crowded, then don't use it. + var staffWidth = params.staffwidth; + var ret = getRevisedTune(lineBreaks, staffWidth, abcString, params, Parse); + var newWidths = engraver_controller.getMeasureWidths(ret.tune); + var gotTune = true; // If we adjust the num lines, set this to false + explanation.attempts.push({type: "heightCheck", height: newWidths.height }); + + // if all of the lines are too sparse, make the width narrower. + // TODO-PER: implement this case. + + // If one line and the spacing is > maxSpacing, make the width narrower. + if (lineBreaks.length === 0 && minLineSize > widths.total) { + staffWidth = (widths.total * maxSpacing * scale) + widths.left; + explanation.attempts.push({type: "too sparse", newWidth: Math.round(staffWidth)}); + gotTune = false; + } + + // if (ret.lineBreaks.length === 0) { + // // Everything fits on one line, so see if there is TOO much space and the staff width needs to be shortened. + // if (minLineSize > 0 && ret.totalThisLine > 0 && ret.totalThisLine < minLineSize) + // staffWidth = staffWidth / (minLineSize / ret.totalThisLine); + // } else if (ret.totalThisLine < minLineSize) { + // // the last line is too short, so attempt to redistribute by changing the min. + // // We will try more and less space alternatively. The space can't be less than 1.0, and we'll try in 0.1 increments. + // var minTrys = []; + // if (minSpacing > 1.1) + // minTrys.push(minSpacing - 0.1); + // minTrys.push(minSpacing + 0.1); + // if (minSpacing > 1.2) + // minTrys.push(minSpacing - 0.2); + // minTrys.push(minSpacing + 0.2); + // if (minSpacing > 1.3) + // minTrys.push(minSpacing - 0.3); + // minTrys.push(minSpacing + 0.3); + // for (var i = 0; i < minTrys.length && ret.totalThisLine < minLineSize; i++) { + // lineBreakPoint = (params.staffwidth - widths.left) / minTrys[i] / scale; + // ret = calcLineBreaks(widths.measureWidths, lineBreakPoint); + // } + // } + + if (!gotTune) + ret = getRevisedTune(lineBreaks, staffWidth, abcString, params, Parse); + ret.explanation = explanation; + return ret; +} + +var wrap_lines = { wrapLines: wrapLines, calcLineWraps: calcLineWraps }; + +// abc_tune.js: a computer usable internal structure representing one tune. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + +/** + * This is the data for a single ABC tune. It is created and populated by the window.ABCJS.parse.Parse class. + * Also known as the ABCJS Abstract Syntax Tree + * @alternateClassName ABCJS.Tune + */ +var Tune = function() { + // The structure consists of a hash with the following two items: + // metaText: a hash of {key, value}, where key is one of: title, author, rhythm, source, transcription, unalignedWords, etc... + // tempo: { noteLength: number (e.g. .125), bpm: number } + // lines: an array of elements, or one of the following: + // + // STAFF: array of elements + // SUBTITLE: string + // + // TODO: actually, the start and end char should modify each part of the note type + // The elements all have a type field and a start and end char + // field. The rest of the fields depend on the type and are listed below: + // REST: duration=1,2,4,8; chord: string + // NOTE: accidental=none,dbl_flat,flat,natural,sharp,dbl_sharp + // pitch: "C" is 0. The numbers refer to the pitch letter. + // duration: .5 (sixteenth), .75 (dotted sixteenth), 1 (eighth), 1.5 (dotted eighth) + // 2 (quarter), 3 (dotted quarter), 4 (half), 6 (dotted half) 8 (whole) + // chord: { name:chord, position: one of 'default', 'above', 'below' } + // end_beam = true or undefined if this is the last note in a beam. + // lyric: array of { syllable: xxx, divider: one of " -_" } + // startTie = true|undefined + // endTie = true|undefined + // startTriplet = num <- that is the number to print + // endTriplet = true|undefined (the last note of the triplet) + // TODO: actually, decoration should be an array. + // decoration: upbow, downbow, accent + // BAR: type=bar_thin, bar_thin_thick, bar_thin_thin, bar_thick_thin, bar_right_repeat, bar_left_repeat, bar_double_repeat + // number: 1 or 2: if it is the start of a first or second ending + // CLEF: type=treble,bass + // KEY-SIG: + // accidentals[]: { acc:sharp|dblsharp|natural|flat|dblflat, note:a|b|c|d|e|f|g } + // METER: type: common_time,cut_time,specified + // if specified, { num: 99, den: 99 } + + this.getBeatLength = function() { + for (var i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff) { + for (var j = 0; j < this.lines[i].staff.length; j++) { + if (this.lines[i].staff[j].meter) { + var meter = this.lines[i].staff[j].meter; + if (meter.type === "specified") { + if (meter.value.length > 0) { + var num = parseInt(meter.value[0].num, 10); + var den = parseInt(meter.value[0].den, 10); + if (num === 3 && den === 8) return 3/8; + if (num === 6 && den === 8) return 3/8; + if (num === 6 && den === 4) return 3/4; + if (num === 9 && den === 8) return 3/8; + if (num === 12 && den === 8) return 3/8; + return 1/den; + } + else + return 1/4; // No meter was specified, so use this default + } else if (meter.type === 'cut_time') { + return 1/2; + } else { + return 1/4; // TODO-PER: this works for common time, but not for the ancient meters. + } + } + } + } + } + return 1/4; // No meter was specified, so use this default + }; + + this.getPickupLength = function() { + var pickupLength = 0; + var barLength = this.getBarLength(); + for (var i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff) { + for (var j = 0; j < this.lines[i].staff.length; j++) { + for (var v = 0; v < this.lines[i].staff[j].voices.length; v++) { + var voice = this.lines[i].staff[j].voices[v]; + var tripletMultiplier = 1; + for (var el = 0; el < voice.length; el++) { + var isSpacer = voice[el].rest && voice[el].rest.type === "spacer"; + if (voice[el].startTriplet) + tripletMultiplier = voice[el].tripletMultiplier; + if (voice[el].duration && !isSpacer) + pickupLength += voice[el].duration * tripletMultiplier; + if (voice[el].endTriplet) + tripletMultiplier = 1; + if (pickupLength >= barLength) + pickupLength -= barLength; + if (voice[el].el_type === 'bar') + return pickupLength; + } + } + } + } + } + return pickupLength; + }; + + this.getBarLength = function() { + var meter = this.getMeterFraction(); + return meter.num / meter.den; + }; + + this.millisecondsPerMeasure = function(bpmOverride) { + var bpm; + if (bpmOverride) { + bpm = bpmOverride; + } else { + var tempo = this.metaText ? this.metaText.tempo : null; + bpm = this.getBpm(tempo); + } + if (bpm <= 0) + bpm = 1; // I don't think this can happen, but we don't want a possibility of dividing by zero. + + var beatsPerMeasure = this.getBeatsPerMeasure(); + + var minutesPerMeasure = beatsPerMeasure / bpm; + return minutesPerMeasure * 60000; + }; + + this.getBeatsPerMeasure = function() { + var beatsPerMeasure; + var meter = this.getMeterFraction(); + if (meter.den === 8) { + beatsPerMeasure = meter.num / 3; + } else { + beatsPerMeasure = meter.num; + } + if (beatsPerMeasure <= 0) // This probably won't happen in any normal case - but it is possible that the meter could be set to something nonsensical. + beatsPerMeasure = 1; + return beatsPerMeasure; + }; + + this.reset = function () { + this.version = "1.0.1"; + this.media = "screen"; + this.metaText = {}; + this.formatting = {}; + this.lines = []; + this.staffNum = 0; + this.voiceNum = 0; + this.lineNum = 0; + }; + + this.resolveOverlays = function() { + var madeChanges = false; + for (var i = 0; i < this.lines.length; i++) { + var line = this.lines[i]; + if (line.staff) { + for (var j = 0; j < line.staff.length; j++) { + var staff = line.staff[j]; + var overlayVoice = []; + for (var k = 0; k < staff.voices.length; k++) { + var voice = staff.voices[k]; + overlayVoice.push({ hasOverlay: false, voice: [], snip: []}); + var durationThisBar = 0; + var inOverlay = false; + var snipStart = -1; + for (var kk = 0; kk < voice.length; kk++) { + var event = voice[kk]; + if (event.el_type === "overlay" && !inOverlay) { + madeChanges = true; + inOverlay = true; + snipStart = kk; + overlayVoice[k].hasOverlay = true; + } else if (event.el_type === "bar") { + if (inOverlay) { + // delete the overlay events from this array without messing up this loop. + inOverlay = false; + overlayVoice[k].snip.push({ start: snipStart, len: kk - snipStart}); + overlayVoice[k].voice.push(event); // Also end the overlay with the barline. + } else { + // This keeps the voices lined up: if the overlay isn't in the first measure then we need a bunch of invisible rests. + if (durationThisBar > 0) + overlayVoice[k].voice.push({ el_type: "note", duration: durationThisBar, rest: {type: "invisible"}, startChar: event.startChar, endChar: event.endChar }); + overlayVoice[k].voice.push(event); + } + durationThisBar = 0; + } else if (event.el_type === "note") { + if (inOverlay) { + overlayVoice[k].voice.push(event); + } else { + durationThisBar += event.duration; + } + } else if (event.el_type === "scale" || event.el_type === "stem" || event.el_type === "overlay" || event.el_type === "style" || event.el_type === "transpose") { + // These types of events are duplicated on the overlay layer. + overlayVoice[k].voice.push(event); + } + } + if (overlayVoice[k].hasOverlay && overlayVoice[k].snip.length === 0) { + // there was no closing bar, so we didn't set the snip amount. + overlayVoice[k].snip.push({ start: snipStart, len: voice.length - snipStart}); + } + } + for (k = 0; k < overlayVoice.length; k++) { + var ov = overlayVoice[k]; + if (ov.hasOverlay) { + staff.voices.push(ov.voice); + for (var kkk = ov.snip.length-1; kkk >= 0; kkk--) { + var snip = ov.snip[kkk]; + staff.voices[k].splice(snip.start, snip.len); + } + // remove ending marks from the overlay voice so they are not repeated + for (kkk = 0; kkk < staff.voices[staff.voices.length-1].length; kkk++) { + staff.voices[staff.voices.length-1][kkk] = abc_common.clone(staff.voices[staff.voices.length-1][kkk]); + var el = staff.voices[staff.voices.length-1][kkk]; + if (el.el_type === 'bar' && el.startEnding) { + delete el.startEnding; + } + if (el.el_type === 'bar' && el.endEnding) + delete el.endEnding; + } + } + } + } + } + } + return madeChanges; + }; + + function fixTitles(lines) { + // We might have name and subname defined. We now know what line everything is on, so we can determine which to use. + var firstMusicLine = true; + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + if (line.staff) { + for (var j = 0; j < line.staff.length; j++) { + var staff = line.staff[j]; + if (staff.title) { + var hasATitle = false; + for (var k = 0; k < staff.title.length; k++) { + if (staff.title[k]) { + staff.title[k] = (firstMusicLine) ? staff.title[k].name : staff.title[k].subname; + if (staff.title[k]) + hasATitle = true; + else + staff.title[k] = ''; + } else + staff.title[k] = ''; + } + if (!hasATitle) + delete staff.title; + } + } + firstMusicLine = false; + } + } + } + + this.cleanUp = function(defWidth, defLength, barsperstaff, staffnonote, currSlur) { + this.closeLine(); // Close the last line. + + // If the tempo was created with a string like "Allegro", then the duration of a beat needs to be set at the last moment, when it is most likely known. + if (this.metaText.tempo && this.metaText.tempo.bpm && !this.metaText.tempo.duration) + this.metaText.tempo.duration = [ this.getBeatLength() ]; + + // Remove any blank lines + var anyDeleted = false; + var i, s, v; + for (i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff !== undefined) { + var hasAny = false; + for (s = 0; s < this.lines[i].staff.length; s++) { + if (this.lines[i].staff[s] === undefined) { + anyDeleted = true; + this.lines[i].staff[s] = null; + //this.lines[i].staff[s] = { voices: []}; // TODO-PER: There was a part missing in the abc music. How should we recover? + } else { + for (v = 0; v < this.lines[i].staff[s].voices.length; v++) { + if (this.lines[i].staff[s].voices[v] === undefined) + this.lines[i].staff[s].voices[v] = []; // TODO-PER: There was a part missing in the abc music. How should we recover? + else + if (this.containsNotes(this.lines[i].staff[s].voices[v])) hasAny = true; + } + } + } + if (!hasAny) { + this.lines[i] = null; + anyDeleted = true; + } + } + } + if (anyDeleted) { + this.lines = abc_common.compact(this.lines); + abc_common.each(this.lines, function(line) { + if (line.staff) + line.staff = abc_common.compact(line.staff); + }); + } + + // if we exceeded the number of bars allowed on a line, then force a new line + if (barsperstaff) { + while (wrapMusicLines(this.lines, barsperstaff)) { + // This will keep wrapping until the end of the piece. + } + } + + // If we were passed staffnonote, then we want to get rid of all staffs that contain only rests. + if (staffnonote) { + anyDeleted = false; + for (i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff !== undefined) { + for (s = 0; s < this.lines[i].staff.length; s++) { + var keepThis = false; + for (v = 0; v < this.lines[i].staff[s].voices.length; v++) { + if (this.containsNotesStrict(this.lines[i].staff[s].voices[v])) { + keepThis = true; + } + } + if (!keepThis) { + anyDeleted = true; + this.lines[i].staff[s] = null; + } + } + } + } + if (anyDeleted) { + abc_common.each(this.lines, function(line) { + if (line.staff) + line.staff = abc_common.compact(line.staff); + }); + } + } + + fixTitles(this.lines); + + // Remove the temporary working variables + for (i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff) { + for (s = 0; s < this.lines[i].staff.length; s++) + delete this.lines[i].staff[s].workingClef; + } + } + + // If there are overlays, create new voices for them. + while (this.resolveOverlays()) { + // keep resolving overlays as long as any are found. + } + + function cleanUpSlursInLine(line) { + var x; +// var lyr = null; // TODO-PER: debugging. + + var addEndSlur = function(obj, num, chordPos) { + if (currSlur[chordPos] === undefined) { + // There isn't an exact match for note position, but we'll take any other open slur. + for (x = 0; x < currSlur.length; x++) { + if (currSlur[x] !== undefined) { + chordPos = x; + break; + } + } + if (currSlur[chordPos] === undefined) { + var offNum = chordPos*100+1; + abc_common.each(obj.endSlur, function(x) { if (offNum === x) --offNum; }); + currSlur[chordPos] = [offNum]; + } + } + var slurNum; + for (var i = 0; i < num; i++) { + slurNum = currSlur[chordPos].pop(); + obj.endSlur.push(slurNum); +// lyr.syllable += '<' + slurNum; // TODO-PER: debugging + } + if (currSlur[chordPos].length === 0) + delete currSlur[chordPos]; + return slurNum; + }; + + var addStartSlur = function(obj, num, chordPos, usedNums) { + obj.startSlur = []; + if (currSlur[chordPos] === undefined) { + currSlur[chordPos] = []; + } + var nextNum = chordPos*100+1; + for (var i = 0; i < num; i++) { + if (usedNums) { + abc_common.each(usedNums, function(x) { if (nextNum === x) ++nextNum; }); + abc_common.each(usedNums, function(x) { if (nextNum === x) ++nextNum; }); + abc_common.each(usedNums, function(x) { if (nextNum === x) ++nextNum; }); + } + abc_common.each(currSlur[chordPos], function(x) { if (nextNum === x) ++nextNum; }); + abc_common.each(currSlur[chordPos], function(x) { if (nextNum === x) ++nextNum; }); + + currSlur[chordPos].push(nextNum); + obj.startSlur.push({ label: nextNum }); +// lyr.syllable += ' ' + nextNum + '>'; // TODO-PER:debugging + nextNum++; + } + }; + + for (var i = 0; i < line.length; i++) { + var el = line[i]; +// if (el.lyric === undefined) // TODO-PER: debugging +// el.lyric = [{ divider: '-' }]; // TODO-PER: debugging +// lyr = el.lyric[0]; // TODO-PER: debugging +// lyr.syllable = ''; // TODO-PER: debugging + if (el.el_type === 'note') { + if (el.gracenotes) { + for (var g = 0; g < el.gracenotes.length; g++) { + if (el.gracenotes[g].endSlur) { + var gg = el.gracenotes[g].endSlur; + el.gracenotes[g].endSlur = []; + for (var ggg = 0; ggg < gg; ggg++) + addEndSlur(el.gracenotes[g], 1, 20); + } + if (el.gracenotes[g].startSlur) { + x = el.gracenotes[g].startSlur; + addStartSlur(el.gracenotes[g], x, 20); + } + } + } + if (el.endSlur) { + x = el.endSlur; + el.endSlur = []; + addEndSlur(el, x, 0); + } + if (el.startSlur) { + x = el.startSlur; + addStartSlur(el, x, 0); + } + if (el.pitches) { + var usedNums = []; + for (var p = 0; p < el.pitches.length; p++) { + if (el.pitches[p].endSlur) { + var k = el.pitches[p].endSlur; + el.pitches[p].endSlur = []; + for (var j = 0; j < k; j++) { + var slurNum = addEndSlur(el.pitches[p], 1, p+1); + usedNums.push(slurNum); + } + } + } + for (p = 0; p < el.pitches.length; p++) { + if (el.pitches[p].startSlur) { + x = el.pitches[p].startSlur; + addStartSlur(el.pitches[p], x, p+1, usedNums); + } + } + // Correct for the weird gracenote case where ({g}a) should match. + // The end slur was already assigned to the note, and needs to be moved to the first note of the graces. + if (el.gracenotes && el.pitches[0].endSlur && el.pitches[0].endSlur[0] === 100 && el.pitches[0].startSlur) { + if (el.gracenotes[0].endSlur) + el.gracenotes[0].endSlur.push(el.pitches[0].startSlur[0].label); + else + el.gracenotes[0].endSlur = [el.pitches[0].startSlur[0].label]; + if (el.pitches[0].endSlur.length === 1) + delete el.pitches[0].endSlur; + else if (el.pitches[0].endSlur[0] === 100) + el.pitches[0].endSlur.shift(); + else if (el.pitches[0].endSlur[el.pitches[0].endSlur.length-1] === 100) + el.pitches[0].endSlur.pop(); + if (currSlur[1].length === 1) + delete currSlur[1]; + else + currSlur[1].pop(); + } + } + } + } + } + + // TODO-PER: This could be done faster as we go instead of as the last step. + function fixClefPlacement(el) { + abc_parse_key_voice.fixClef(el); + //if (el.el_type === 'clef') { +// var min = -2; +// var max = 5; +// switch(el.type) { +// case 'treble+8': +// case 'treble-8': +// break; +// case 'bass': +// case 'bass+8': +// case 'bass-8': +// el.verticalPos = 20 + el.verticalPos; min += 6; max += 6; +// break; +// case 'tenor': +// case 'tenor+8': +// case 'tenor-8': +// el.verticalPos = - el.verticalPos; min = -40; max = 40; +//// el.verticalPos+=2; min += 6; max += 6; +// break; +// case 'alto': +// case 'alto+8': +// case 'alto-8': +// el.verticalPos = - el.verticalPos; min = -40; max = 40; +//// el.verticalPos-=2; min += 4; max += 4; +// break; +// } +// if (el.verticalPos < min) { +// while (el.verticalPos < min) +// el.verticalPos += 7; +// } else if (el.verticalPos > max) { +// while (el.verticalPos > max) +// el.verticalPos -= 7; +// } + //} + } + + function wrapMusicLines(lines, barsperstaff) { + for (i = 0; i < lines.length; i++) { + if (lines[i].staff !== undefined) { + for (s = 0; s < lines[i].staff.length; s++) { + var permanentItems = []; + for (v = 0; v < lines[i].staff[s].voices.length; v++) { + var voice = lines[i].staff[s].voices[v]; + var barNumThisLine = 0; + for (var n = 0; n < voice.length; n++) { + if (voice[n].el_type === 'bar') { + barNumThisLine++; + if (barNumThisLine >= barsperstaff) { + // push everything else to the next line, if there is anything else, + // and there is a next line. If there isn't a next line, create one. + if (n < voice.length - 1) { + var nextLine = getNextMusicLine(lines, i); + if (!nextLine) { + var cp = JSON.parse(JSON.stringify(lines[i])); + lines.push(abc_common.clone(cp)); + nextLine = lines[lines.length - 1]; + for (var ss = 0; ss < nextLine.staff.length; ss++) { + for (var vv = 0; vv < nextLine.staff[ss].voices.length; vv++) + nextLine.staff[ss].voices[vv] = []; + } + } + var startElement = n + 1; + var section = lines[i].staff[s].voices[v].slice(startElement); + lines[i].staff[s].voices[v] = lines[i].staff[s].voices[v].slice(0, startElement); + nextLine.staff[s].voices[v] = permanentItems.concat(section.concat(nextLine.staff[s].voices[v])); + return true; + } + } + } else if (!voice[n].duration) { + permanentItems.push(voice[n]); + } + } + } + } + } + } + return false; + } + + function getNextMusicLine(lines, currentLine) { + currentLine++; + while (lines.length > currentLine) { + if (lines[currentLine].staff) + return lines[currentLine]; + currentLine++; + } + return null; + } + + for (this.lineNum = 0; this.lineNum < this.lines.length; this.lineNum++) { + var staff = this.lines[this.lineNum].staff; + if (staff) { + for (this.staffNum = 0; this.staffNum < staff.length; this.staffNum++) { + if (staff[this.staffNum].clef) + fixClefPlacement(staff[this.staffNum].clef); + for (this.voiceNum = 0; this.voiceNum < staff[this.staffNum].voices.length; this.voiceNum++) { + var voice = staff[this.staffNum].voices[this.voiceNum]; + cleanUpSlursInLine(voice); + for (var j = 0; j < voice.length; j++) { + if (voice[j].el_type === 'clef') + fixClefPlacement(voice[j]); + } + if (voice.length > 0 && voice[voice.length-1].barNumber) { + // Don't hang a bar number on the last bar line: it should go on the next line. + var nextLine = getNextMusicLine(this.lines, this.lineNum); + if (nextLine) + nextLine.staff[0].barNumber = voice[voice.length-1].barNumber; + delete voice[voice.length-1].barNumber; + } + } + } + } + } + + if (!this.formatting.pagewidth) + this.formatting.pagewidth = defWidth; + if (!this.formatting.pageheight) + this.formatting.pageheight = defLength; + + // Remove temporary variables that the outside doesn't need to know about + delete this.staffNum; + delete this.voiceNum; + delete this.lineNum; + delete this.potentialStartBeam; + delete this.potentialEndBeam; + delete this.vskipPending; + + return currSlur; + }; + + this.reset(); + + this.getLastNote = function() { + if (this.lines[this.lineNum] && this.lines[this.lineNum].staff && this.lines[this.lineNum].staff[this.staffNum] && + this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum]) { + for (var i = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum].length-1; i >= 0; i--) { + var el = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum][i]; + if (el.el_type === 'note') { + return el; + } + } + } + return null; + }; + + this.addTieToLastNote = function() { + // TODO-PER: if this is a chord, which note? + var el = this.getLastNote(); + if (el && el.pitches && el.pitches.length > 0) { + el.pitches[0].startTie = {}; + return true; + } + return false; + }; + + this.getDuration = function(el) { + if (el.duration) return el.duration; + //if (el.pitches && el.pitches.length > 0) return el.pitches[0].duration; + return 0; + }; + + this.closeLine = function() { + if (this.potentialStartBeam && this.potentialEndBeam) { + this.potentialStartBeam.startBeam = true; + this.potentialEndBeam.endBeam = true; + } + delete this.potentialStartBeam; + delete this.potentialEndBeam; + }; + + this.appendElement = function(type, startChar, endChar, hashParams) + { + var This = this; + var pushNote = function(hp) { + var currStaff = This.lines[This.lineNum].staff[This.staffNum]; + if (!currStaff) { + // TODO-PER: This prevents a crash, but it drops the element. Need to figure out how to start a new line, or delay adding this. + return; + } + if (hp.pitches !== undefined) { + var mid = currStaff.workingClef.verticalPos; + abc_common.each(hp.pitches, function(p) { p.verticalPos = p.pitch - mid; }); + } + if (hp.gracenotes !== undefined) { + var mid2 = currStaff.workingClef.verticalPos; + abc_common.each(hp.gracenotes, function(p) { p.verticalPos = p.pitch - mid2; }); + } + currStaff.voices[This.voiceNum].push(hp); + }; + hashParams.el_type = type; + if (startChar !== null) + hashParams.startChar = startChar; + if (endChar !== null) + hashParams.endChar = endChar; + var endBeamHere = function() { + This.potentialStartBeam.startBeam = true; + hashParams.endBeam = true; + delete This.potentialStartBeam; + delete This.potentialEndBeam; + }; + var endBeamLast = function() { + if (This.potentialStartBeam !== undefined && This.potentialEndBeam !== undefined) { // Do we have a set of notes to beam? + This.potentialStartBeam.startBeam = true; + This.potentialEndBeam.endBeam = true; + } + delete This.potentialStartBeam; + delete This.potentialEndBeam; + }; + if (type === 'note') { // && (hashParams.rest !== undefined || hashParams.end_beam === undefined)) { + // Now, add the startBeam and endBeam where it is needed. + // end_beam is already set on the places where there is a forced end_beam. We'll remove that here after using that info. + // this.potentialStartBeam either points to null or the start beam. + // this.potentialEndBeam either points to null or the start beam. + // If we have a beam break (note is longer than a quarter, or an end_beam is on this element), then set the beam if we have one. + // reset the variables for the next notes. + var dur = This.getDuration(hashParams); + if (dur >= 0.25) { // The beam ends on the note before this. + endBeamLast(); + } else if (hashParams.force_end_beam_last && This.potentialStartBeam !== undefined) { + endBeamLast(); + } else if (hashParams.end_beam && This.potentialStartBeam !== undefined) { // the beam is forced to end on this note, probably because of a space in the ABC + if (hashParams.rest === undefined) + endBeamHere(); + else + endBeamLast(); + } else if (hashParams.rest === undefined) { // this a short note and we aren't about to end the beam + if (This.potentialStartBeam === undefined) { // We aren't collecting notes for a beam, so start here. + if (!hashParams.end_beam) { + This.potentialStartBeam = hashParams; + delete This.potentialEndBeam; + } + } else { + This.potentialEndBeam = hashParams; // Continue the beaming, look for the end next note. + } + } + + // end_beam goes on rests and notes which precede rests _except_ when a rest (or set of adjacent rests) has normal notes on both sides (no spaces) +// if (hashParams.rest !== undefined) +// { +// hashParams.end_beam = true; +// var el2 = this.getLastNote(); +// if (el2) el2.end_beam = true; +// // TODO-PER: implement exception mentioned in the comment. +// } + } else { // It's not a note, so there definitely isn't beaming after it. + endBeamLast(); + } + delete hashParams.end_beam; // We don't want this temporary variable hanging around. + delete hashParams.force_end_beam_last; // We don't want this temporary variable hanging around. + pushNote(hashParams); + }; + + this.appendStartingElement = function(type, startChar, endChar, hashParams2) + { + // If we're in the middle of beaming, then end the beam. + this.closeLine(); + + // We only ever want implied naturals the first time. + var impliedNaturals; + if (type === 'key') { + impliedNaturals = hashParams2.impliedNaturals; + delete hashParams2.impliedNaturals; + delete hashParams2.explicitAccidentals; + } + + // Clone the object because it will be sticking around for the next line and we don't want the extra fields in it. + var hashParams = abc_common.clone(hashParams2); + + if (this.lines[this.lineNum].staff) { // be sure that we are on a music type line before doing the following. + // If this is the first item in this staff, then we might have to initialize the staff, first. + if (this.lines[this.lineNum].staff.length <= this.staffNum) { + this.lines[this.lineNum].staff[this.staffNum] = {}; + this.lines[this.lineNum].staff[this.staffNum].clef = abc_common.clone(this.lines[this.lineNum].staff[0].clef); + this.lines[this.lineNum].staff[this.staffNum].key = abc_common.clone(this.lines[this.lineNum].staff[0].key); + if (this.lines[this.lineNum].staff[0].meter) + this.lines[this.lineNum].staff[this.staffNum].meter = abc_common.clone(this.lines[this.lineNum].staff[0].meter); + this.lines[this.lineNum].staff[this.staffNum].workingClef = abc_common.clone(this.lines[this.lineNum].staff[0].workingClef); + this.lines[this.lineNum].staff[this.staffNum].voices = [[]]; + } + // If this is a clef type, then we replace the working clef on the line. This is kept separate from + // the clef in case there is an inline clef field. We need to know what the current position for + // the note is. + if (type === 'clef') { + this.lines[this.lineNum].staff[this.staffNum].workingClef = hashParams; + } + + // These elements should not be added twice, so if the element exists on this line without a note or bar before it, just replace the staff version. + var voice = this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum]; + for (var i = 0; i < voice.length; i++) { + if (voice[i].el_type === 'note' || voice[i].el_type === 'bar') { + hashParams.el_type = type; + hashParams.startChar = startChar; + hashParams.endChar = endChar; + if (impliedNaturals) + hashParams.accidentals = impliedNaturals.concat(hashParams.accidentals); + voice.push(hashParams); + return; + } + if (voice[i].el_type === type) { + hashParams.el_type = type; + hashParams.startChar = startChar; + hashParams.endChar = endChar; + if (impliedNaturals) + hashParams.accidentals = impliedNaturals.concat(hashParams.accidentals); + voice[i] = hashParams; + return; + } + } + // We didn't see either that type or a note, so replace the element to the staff. + this.lines[this.lineNum].staff[this.staffNum][type] = hashParams2; + } + }; + + this.getNumLines = function() { + return this.lines.length; + }; + + this.pushLine = function(hash) { + if (this.vskipPending) { + hash.vskip = this.vskipPending; + delete this.vskipPending; + } + this.lines.push(hash); + }; + + this.addSubtitle = function(str) { + this.pushLine({subtitle: str}); + }; + + this.addSpacing = function(num) { + this.vskipPending = num; + }; + + this.addNewPage = function(num) { + this.pushLine({newpage: num}); + }; + + this.addSeparator = function(spaceAbove, spaceBelow, lineLength) { + this.pushLine({separator: {spaceAbove: spaceAbove, spaceBelow: spaceBelow, lineLength: lineLength}}); + }; + + this.addText = function(str) { + this.pushLine({text: str}); + }; + + this.addCentered = function(str) { + this.pushLine({text: [{text: str, center: true }]}); + }; + + this.containsNotes = function(voice) { + for (var i = 0; i < voice.length; i++) { + if (voice[i].el_type === 'note' || voice[i].el_type === 'bar') + return true; + } + return false; + }; + + this.containsNotesStrict = function(voice) { + for (var i = 0; i < voice.length; i++) { + if (voice[i].el_type === 'note' && voice[i].rest === undefined) + return true; + } + return false; + }; + +// anyVoiceContainsNotes: function(line) { +// for (var i = 0; i < line.staff.voices.length; i++) { +// if (this.containsNotes(line.staff.voices[i])) +// return true; +// } +// return false; +// }, + this.changeVoiceScale = function(scale) { + var This = this; + This.appendElement('scale', null, null, { size: scale} ); + }; + + this.startNewLine = function(params) { + // If the pointed to line doesn't exist, just create that. If the line does exist, but doesn't have any music on it, just use it. + // If it does exist and has music, then increment the line number. If the new element doesn't exist, create it. + var This = this; + this.closeLine(); // Close the previous line. + var createVoice = function(params) { + var thisStaff = This.lines[This.lineNum].staff[This.staffNum]; + thisStaff.voices[This.voiceNum] = []; + if (!thisStaff.title) + thisStaff.title = []; + thisStaff.title[This.voiceNum] = { name: params.name, subname: params.subname }; + if (params.style) + This.appendElement('style', null, null, {head: params.style}); + if (params.stem) + This.appendElement('stem', null, null, {direction: params.stem}); + else if (This.voiceNum > 0) { + if (thisStaff.voices[0]!== undefined) { + var found = false; + for (var i = 0; i < thisStaff.voices[0].length; i++) { + if (thisStaff.voices[0].el_type === 'stem') + found = true; + } + if (!found) { + var stem = { el_type: 'stem', direction: 'up' }; + thisStaff.voices[0].splice(0,0,stem); + } + } + This.appendElement('stem', null, null, {direction: 'down'}); + } + if (params.scale) + This.appendElement('scale', null, null, { size: params.scale} ); + }; + var createStaff = function(params) { + if (params.key && params.key.impliedNaturals) { + params.key.accidentals = params.key.accidentals.concat(params.key.impliedNaturals); + delete params.key.impliedNaturals; + } + + This.lines[This.lineNum].staff[This.staffNum] = {voices: [ ], clef: params.clef, key: params.key, workingClef: params.clef }; + if (params.stafflines !== undefined) { + This.lines[This.lineNum].staff[This.staffNum].clef.stafflines = params.stafflines; + This.lines[This.lineNum].staff[This.staffNum].workingClef.stafflines = params.stafflines; + } + if (params.staffscale) { + This.lines[This.lineNum].staff[This.staffNum].staffscale = params.staffscale; + } + if (params.tripletfont) This.lines[This.lineNum].staff[This.staffNum].tripletfont = params.tripletfont; + if (params.vocalfont) This.lines[This.lineNum].staff[This.staffNum].vocalfont = params.vocalfont; + if (params.bracket) This.lines[This.lineNum].staff[This.staffNum].bracket = params.bracket; + if (params.brace) This.lines[This.lineNum].staff[This.staffNum].brace = params.brace; + if (params.connectBarLines) This.lines[This.lineNum].staff[This.staffNum].connectBarLines = params.connectBarLines; + if (params.barNumber) This.lines[This.lineNum].staff[This.staffNum].barNumber = params.barNumber; + createVoice(params); + // Some stuff just happens for the first voice + if (params.part) + This.appendElement('part', params.part.startChar, params.part.endChar, {title: params.part.title}); + if (params.meter !== undefined) This.lines[This.lineNum].staff[This.staffNum].meter = params.meter; + }; + var createLine = function(params) { + This.lines[This.lineNum] = {staff: []}; + createStaff(params); + }; + if (this.lines[this.lineNum] === undefined) createLine(params); + else if (this.lines[this.lineNum].staff === undefined) { + this.lineNum++; + this.startNewLine(params); + } else if (this.lines[this.lineNum].staff[this.staffNum] === undefined) createStaff(params); + else if (this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum] === undefined) createVoice(params); + else if (!this.containsNotes(this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum])) return; + else { + this.lineNum++; + this.startNewLine(params); + } + }; + + this.setBarNumberImmediate = function(barNumber) { + // If this is called right at the beginning of a line, then correct the measure number that is already written. + // If this is called at the beginning of a measure, then correct the measure number that was just created. + // If this is called in the middle of a measure, then subtract one from it, because it will be incremented before applied. + var currentVoice = this.getCurrentVoice(); + if (currentVoice && currentVoice.length > 0) { + var lastElement = currentVoice[currentVoice.length-1]; + if (lastElement.el_type === 'bar') { + if (lastElement.barNumber !== undefined) // the measure number might not be written for this bar, don't override that. + lastElement.barNumber = barNumber; + } else + return barNumber-1; + } + return barNumber; + }; + + this.hasBeginMusic = function() { + // return true if there exists at least one line that contains "staff" + for (var i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff) + return true; + } + return false; + }; + + this.isFirstLine = function(index) { + for (var i = index-1; i >= 0; i--) { + if (this.lines[i].staff !== undefined) return false; + } + return true; + }; + + this.getMeter = function() { + for (var i = 0; i < this.lines.length; i++) { + var line = this.lines[i]; + if (line.staff) { + for (var j = 0; j < line.staff.length; j++) { + var meter = line.staff[j].meter; + if (meter) { + return meter; + } + } + } + } + return { type: "common_time" }; + }; + + this.getMeterFraction = function() { + var meter = this.getMeter(); + var num = 4; + var den = 4; + if (meter) { + if (meter.type === 'specified') { + num = parseInt(meter.value[0].num, 10); + den = parseInt(meter.value[0].den,10); + } else if (meter.type === 'cut_time') { + num = 2; + den = 2; + } else if (meter.type === 'common_time') { + num = 4; + den = 4; + } + } + this.meter = { num: num, den: den }; + return this.meter; // TODO-PER: is this saved value used anywhere? A get function shouldn't change state. + }; + + this.getKeySignature = function() { + for (var i = 0; i < this.lines.length; i++) { + var line = this.lines[i]; + if (line.staff) { + for (var j = 0; j < line.staff.length; j++) { + if (line.staff[j].key) + return line.staff[j].key; + } + } + } + return { }; + }; + + this.getCurrentVoice = function() { + if (this.lines[this.lineNum] !== undefined && this.lines[this.lineNum].staff[this.staffNum] !== undefined && this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum] !== undefined) + return this.lines[this.lineNum].staff[this.staffNum].voices[this.voiceNum]; + else return null; + }; + + this.setCurrentVoice = function(staffNum, voiceNum) { + this.staffNum = staffNum; + this.voiceNum = voiceNum; + for (var i = 0; i < this.lines.length; i++) { + if (this.lines[i].staff) { + if (this.lines[i].staff[staffNum] === undefined || this.lines[i].staff[staffNum].voices[voiceNum] === undefined || + !this.containsNotes(this.lines[i].staff[staffNum].voices[voiceNum] )) { + this.lineNum = i; + return; + } + } + } + this.lineNum = i; + }; + + this.addMetaText = function(key, value) { + if (this.metaText[key] === undefined) + this.metaText[key] = value; + else + this.metaText[key] += "\n" + value; + }; + + this.addMetaTextArray = function(key, value) { + if (this.metaText[key] === undefined) + this.metaText[key] = [value]; + else + this.metaText[key].push(value); + }; + this.addMetaTextObj = function(key, value) { + this.metaText[key] = value; + }; + + function addVerticalInfo(timingEvents) { + // Add vertical info to the bar events: put the next event's top, and the event after the next measure's top. + var lastBarTop; + var lastBarBottom; + var lastEventTop; + var lastEventBottom; + for (var e = timingEvents.length - 1; e >= 0; e--) { + var ev = timingEvents[e]; + if (ev.type === 'bar') { + ev.top = lastEventTop; + ev.nextTop = lastBarTop; + lastBarTop = lastEventTop; + + ev.bottom = lastEventBottom; + ev.nextBottom = lastBarBottom; + lastBarBottom = lastEventBottom; + } else if (ev.type === 'event') { + lastEventTop = ev.top; + lastEventBottom = ev.top + ev.height; + } + } + } + + function makeSortedArray(hash) { + var arr = []; + for (var k in hash) { + if (hash.hasOwnProperty(k)) + arr.push(hash[k]); + } + arr = arr.sort(function (a, b) { + var diff = a.milliseconds - b.milliseconds; + // if the events have the same time, make sure a bar comes before a note + if (diff !== 0) { + return diff; + } + else { + return a.type === "bar" ? -1 : 1; + } + }); + return arr; + } + + this.addElementToEvents = function(eventHash, element, voiceTimeMilliseconds, top, height, line, measureNumber, timeDivider, isTiedState, nextIsBar) { + if (element.hint) + return { isTiedState: undefined, duration: 0 }; + var realDuration = element.durationClass ? element.durationClass : element.duration; + if (element.abcelem.rest && element.abcelem.rest.type === "spacer") + realDuration = 0; + if (realDuration > 0) { + var es = []; + // If there is an invisible rest, then there are not elements, so don't push a null one. + for (var i = 0; i < element.elemset.length; i++) { + if (element.elemset[i] !== null) + es.push(element.elemset[i]); + } + var isTiedToNext = element.startTie; + if (isTiedState !== undefined) { + eventHash["event" + isTiedState].elements.push(es); // Add the tied note to the first note that it is tied to + if (nextIsBar) { + if (!eventHash["event" + voiceTimeMilliseconds]) { + eventHash["event" + voiceTimeMilliseconds] = { + type: "event", + milliseconds: voiceTimeMilliseconds, + line: line, + measureNumber: measureNumber, + top: top, + height: height, + left: null, + width: 0, + elements: [], + startChar: null, + endChar: null, + startCharArray: [], + endCharArray: [] + }; + } + eventHash["event" + voiceTimeMilliseconds].measureStart = true; + nextIsBar = false; + } + if (!isTiedToNext) + isTiedState = undefined; + } else { + // the last note wasn't tied. + if (!eventHash["event" + voiceTimeMilliseconds]) { + eventHash["event" + voiceTimeMilliseconds] = { + type: "event", + milliseconds: voiceTimeMilliseconds, + line: line, + measureNumber: measureNumber, + top: top, + height: height, + left: element.x, + width: element.w, + elements: [es], + startChar: element.abcelem.startChar, + endChar: element.abcelem.endChar, + startCharArray: [element.abcelem.startChar], + endCharArray: [element.abcelem.endChar], + midiPitches: element.abcelem.midiPitches ? abc_common.cloneArray(element.abcelem.midiPitches) : [] + }; + if (element.abcelem.midiGraceNotePitches) + eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches = abc_common.cloneArray(element.abcelem.midiGraceNotePitches); + } else { + // If there is more than one voice then two notes can fall at the same time. Usually they would be lined up in the same place, but if it is a whole rest, then it is placed funny. In any case, the left most element wins. + if (eventHash["event" + voiceTimeMilliseconds].left) + eventHash["event" + voiceTimeMilliseconds].left = Math.min(eventHash["event" + voiceTimeMilliseconds].left, element.x); + else + eventHash["event" + voiceTimeMilliseconds].left = element.x; + eventHash["event" + voiceTimeMilliseconds].elements.push(es); + eventHash["event" + voiceTimeMilliseconds].startCharArray.push(element.abcelem.startChar); + eventHash["event" + voiceTimeMilliseconds].endCharArray.push(element.abcelem.endChar); + if (eventHash["event" + voiceTimeMilliseconds].startChar === null) + eventHash["event" + voiceTimeMilliseconds].startChar =element.abcelem.startChar; + if (eventHash["event" + voiceTimeMilliseconds].endChar === null) + eventHash["event" + voiceTimeMilliseconds].endChar =element.abcelem.endChar; + if (element.abcelem.midiPitches && element.abcelem.midiPitches.length) { + if (!eventHash["event" + voiceTimeMilliseconds].midiPitches) + eventHash["event" + voiceTimeMilliseconds].midiPitches = []; + for (var i = 0; i < element.abcelem.midiPitches.length; i++) + eventHash["event" + voiceTimeMilliseconds].midiPitches.push(element.abcelem.midiPitches[i]); + } + if (element.abcelem.midiGraceNotePitches && element.abcelem.midiGraceNotePitches.length) { + if (!eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches) + eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches = []; + for (var j = 0; j < element.abcelem.midiGraceNotePitches.length; j++) + eventHash["event" + voiceTimeMilliseconds].midiGraceNotePitches.push(element.abcelem.midiGraceNotePitches[j]); + } + } + if (nextIsBar) { + eventHash["event" + voiceTimeMilliseconds].measureStart = true; + nextIsBar = false; + } + if (isTiedToNext) + isTiedState = voiceTimeMilliseconds; + } + } + return { isTiedState: isTiedState, duration: realDuration / timeDivider, nextIsBar: nextIsBar || element.type === 'bar' }; + }; + + this.makeVoicesArray = function() { + // First make a new array that is arranged by voice so that the repeats that span different lines are handled correctly. + var voicesArr = []; + for (var line = 0; line < this.engraver.staffgroups.length; line++) { + var group = this.engraver.staffgroups[line]; + var firstStaff = group.staffs[0]; + var middleC = firstStaff.absoluteY; + var top = middleC - firstStaff.top * abc_spacing.STEP; + var lastStaff = group.staffs[group.staffs.length - 1]; + middleC = lastStaff.absoluteY; + var bottom = middleC - lastStaff.bottom * abc_spacing.STEP; + var height = bottom - top; + + var voices = group.voices; + for (var v = 0; v < voices.length; v++) { + var measureNumber = 0; + var noteFound = false; + if (!voicesArr[v]) + voicesArr[v] = []; + var elements = voices[v].children; + for (var elem = 0; elem < elements.length; elem++) { + voicesArr[v].push({top: top, height: height, line: line, measureNumber: measureNumber, elem: elements[elem]}); + if (elements[elem].type === 'bar' && noteFound) // Count the measures by counting the bar lines, but skip a bar line that appears at the left of the music, before any notes. + measureNumber++; + if (elements[elem].type === 'note' || elements[elem].type === 'rest') + noteFound = true; + } + } + } + return voicesArr; + }; + + this.setupEvents = function(startingDelay, timeDivider, bpm) { + var timingEvents = []; + + var eventHash = {}; + // The time is the number of seconds from the beginning of the piece. + // The units we are scanning are in notation units (i.e. 0.25 is a quarter note) + var time = startingDelay; + var isTiedState; + var nextIsBar = true; + var voices = this.makeVoicesArray(); + for (var v = 0; v < voices.length; v++) { + var voiceTime = time; + var voiceTimeMilliseconds = Math.round(voiceTime * 1000); + var startingRepeatElem = 0; + var endingRepeatElem = -1; + var elements = voices[v]; + for (var elem = 0; elem < elements.length; elem++) { + var element = elements[elem].elem; + if (element.abcelem.el_type === "tempo") { + var bpm = this.getBpm(element.abcelem); + var beatLength = this.getBeatLength(); + var beatsPerSecond = bpm / 60; + timeDivider = beatLength * beatsPerSecond; + } + var ret = this.addElementToEvents(eventHash, element, voiceTimeMilliseconds, elements[elem].top, elements[elem].height, elements[elem].line, elements[elem].measureNumber, timeDivider, isTiedState, nextIsBar); + isTiedState = ret.isTiedState; + nextIsBar = ret.nextIsBar; + voiceTime += ret.duration; + voiceTimeMilliseconds = Math.round(voiceTime * 1000); + if (element.type === 'bar') { + var barType = element.abcelem.type; + var endRepeat = (barType === "bar_right_repeat" || barType === "bar_dbl_repeat"); + var startEnding = (element.abcelem.startEnding === '1'); + var startRepeat = (barType === "bar_left_repeat" || barType === "bar_dbl_repeat" || barType === "bar_right_repeat"); + if (endRepeat) { + if (endingRepeatElem === -1) + endingRepeatElem = elem; + for (var el2 = startingRepeatElem; el2 < endingRepeatElem; el2++) { + var element2 = elements[el2].elem; + ret = this.addElementToEvents(eventHash, element2, voiceTimeMilliseconds, elements[el2].top, elements[el2].height, elements[el2].line, elements[el2].measureNumber, timeDivider, isTiedState, nextIsBar); + isTiedState = ret.isTiedState; + nextIsBar = ret.nextIsBar; + voiceTime += ret.duration; + voiceTimeMilliseconds = Math.round(voiceTime * 1000); + } + nextIsBar = true; + endingRepeatElem = -1; + } + if (startEnding) + endingRepeatElem = elem; + if (startRepeat) + startingRepeatElem = elem; + } + } + } + // now we have all the events, but if there are multiple voices then there may be events out of order or duplicated, so normalize it. + timingEvents = makeSortedArray(eventHash); + addVerticalInfo(timingEvents); + timingEvents.push({ type: "end", milliseconds: voiceTimeMilliseconds }); + this.addUsefulCallbackInfo(timingEvents, bpm); + return timingEvents; + }; + + this.addUsefulCallbackInfo = function(timingEvents, bpm) { + var millisecondsPerMeasure = this.millisecondsPerMeasure(bpm); + for (var i = 0; i < timingEvents.length; i++) { + var ev = timingEvents[i]; + ev.millisecondsPerMeasure = millisecondsPerMeasure; + } + }; + + this.getBpm = function(tempo) { + var bpm; + if (tempo) { + bpm = tempo.bpm; + var beatLength = this.getBeatLength(); + var statedBeatLength = tempo.duration && tempo.duration.length > 0 ? tempo.duration[0] : beatLength; + bpm = bpm * statedBeatLength / beatLength; + } + if (!bpm) { + bpm = 180; + // Compensate for compound meter, where the beat isn't a beat. + var meter = this.getMeterFraction(); + if (meter && meter.den === 8) { + bpm = 120; + } + } + return bpm; + }; + + this.setTiming = function (bpm, measuresOfDelay) { + if (!bpm) { + var tempo = this.metaText ? this.metaText.tempo : null; + bpm = this.getBpm(tempo); + } + + var beatLength = this.getBeatLength(); + var beatsPerSecond = bpm / 60; + + var measureLength = this.getBarLength(); + + var startingDelay = measureLength / beatLength * measuresOfDelay / beatsPerSecond; + if (startingDelay) + startingDelay -= this.getPickupLength() / beatLength / beatsPerSecond; + var timeDivider = beatLength * beatsPerSecond; + + this.noteTimings = this.setupEvents(startingDelay, timeDivider, bpm); + }; +}; + +var abc_tune = Tune; + +// abc_parse.js: parses a string representing ABC Music Notation into a usable internal structure. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +/*global window */ + + + + + + + + + + + +var Parse = function() { + var tune = new abc_tune(); + var tokenizer = new abc_tokenizer(); + + this.getTune = function() { + return { + formatting: tune.formatting, + lines: tune.lines, + media: tune.media, + metaText: tune.metaText, + version: tune.version, + + addElementToEvents: tune.addElementToEvents, + addUsefulCallbackInfo: tune.addUsefulCallbackInfo, + getBarLength: tune.getBarLength, + getBeatLength: tune.getBeatLength, + getBeatsPerMeasure: tune.getBeatsPerMeasure, + getBpm: tune.getBpm, + getMeter: tune.getMeter, + getMeterFraction: tune.getMeterFraction, + getPickupLength: tune.getPickupLength, + getKeySignature: tune.getKeySignature, + makeVoicesArray: tune.makeVoicesArray, + millisecondsPerMeasure: tune.millisecondsPerMeasure, + setupEvents: tune.setupEvents, + setTiming: tune.setTiming + }; + }; + + function addPositioning(el, type, value) { + if (!el.positioning) el.positioning = {}; + el.positioning[type] = value; + } + + function addFont(el, type, value) { + if (!el.fonts) el.fonts = {}; + el.fonts[type] = value; + } + + var multilineVars = { + reset: function() { + for (var property in this) { + if (this.hasOwnProperty(property) && typeof this[property] !== "function") { + delete this[property]; + } + } + this.iChar = 0; + this.key = {accidentals: [], root: 'none', acc: '', mode: '' }; + this.meter = null; // if no meter is specified, free meter is assumed + this.origMeter = null; // this is for new voices that are created after we set the meter. + this.hasMainTitle = false; + this.default_length = 0.125; + this.clef = { type: 'treble', verticalPos: 0 }; + this.next_note_duration = 0; + this.start_new_line = true; + this.is_in_header = true; + this.is_in_history = false; + this.partForNextLine = {}; + this.havent_set_length = true; + this.voices = {}; + this.staves = []; + this.macros = {}; + this.currBarNumber = 1; + this.barCounter = {}; + this.inTextBlock = false; + this.inPsBlock = false; + this.ignoredDecorations = []; + this.textBlock = ""; + this.score_is_present = false; // Can't have original V: lines when there is the score directive + this.inEnding = false; + this.inTie = []; + this.inTieChord = {}; + this.vocalPosition = "auto"; + this.dynamicPosition = "auto"; + this.chordPosition = "auto"; + this.ornamentPosition = "auto"; + this.volumePosition = "auto"; + this.openSlurs = []; + this.freegchord = false; + }, + differentFont: function(type, defaultFonts) { + if (this[type].decoration !== defaultFonts[type].decoration) return true; + if (this[type].face !== defaultFonts[type].face) return true; + if (this[type].size !== defaultFonts[type].size) return true; + if (this[type].style !== defaultFonts[type].style) return true; + if (this[type].weight !== defaultFonts[type].weight) return true; + return false; + }, + addFormattingOptions: function(el, defaultFonts, elType) { + if (elType === 'note') { + if (this.vocalPosition !== 'auto') addPositioning(el, 'vocalPosition', this.vocalPosition); + if (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition); + if (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition); + if (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition); + if (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition); + if (this.differentFont("annotationfont", defaultFonts)) addFont(el, 'annotationfont', this.annotationfont); + if (this.differentFont("gchordfont", defaultFonts)) addFont(el, 'gchordfont', this.gchordfont); + if (this.differentFont("vocalfont", defaultFonts)) addFont(el, 'vocalfont', this.vocalfont); + if (this.differentFont("tripletfont", defaultFonts)) addFont(el, 'tripletfont', this.tripletfont); + } else if (elType === 'bar') { + if (this.dynamicPosition !== 'auto') addPositioning(el, 'dynamicPosition', this.dynamicPosition); + if (this.chordPosition !== 'auto') addPositioning(el, 'chordPosition', this.chordPosition); + if (this.ornamentPosition !== 'auto') addPositioning(el, 'ornamentPosition', this.ornamentPosition); + if (this.volumePosition !== 'auto') addPositioning(el, 'volumePosition', this.volumePosition); + if (this.differentFont("measurefont", defaultFonts)) addFont(el, 'measurefont', this.measurefont); + if (this.differentFont("repeatfont", defaultFonts)) addFont(el, 'repeatfont', this.repeatfont); + } + } + }; + + var addWarning = function(str) { + if (!multilineVars.warnings) + multilineVars.warnings = []; + multilineVars.warnings.push(str); + }; + + var addWarningObject = function(warningObject) { + if (!multilineVars.warningObjects) + multilineVars.warningObjects = []; + multilineVars.warningObjects.push(warningObject); + }; + + var encode = function(str) { + var ret = abc_common.gsub(str, '\x12', ' '); + ret = abc_common.gsub(ret, '&', '&'); + ret = abc_common.gsub(ret, '<', '<'); + return abc_common.gsub(ret, '>', '>'); + }; + + var warn = function(str, line, col_num) { + if (!line) line = " "; + var bad_char = line.charAt(col_num); + if (bad_char === ' ') + bad_char = "SPACE"; + var clean_line = encode(line.substring(0, col_num)) + + '' + bad_char + '' + + encode(line.substring(col_num+1)); + addWarning("Music Line:" + tune.getNumLines() + ":" + (col_num+1) + ': ' + str + ": " + clean_line); + addWarningObject({message:str, line:line, startChar: multilineVars.iChar + col_num, column: col_num}); + }; + var header = new abc_parse_header(tokenizer, warn, multilineVars, tune); + + this.getWarnings = function() { + return multilineVars.warnings; + }; + this.getWarningObjects = function() { + return multilineVars.warningObjects; + }; + + var letter_to_chord = function(line, i) + { + if (line.charAt(i) === '"') + { + var chord = tokenizer.getBrackettedSubstring(line, i, 5); + if (!chord[2]) + warn("Missing the closing quote while parsing the chord symbol", line , i); + // If it starts with ^, then the chord appears above. + // If it starts with _ then the chord appears below. + // (note that the 2.0 draft standard defines them as not chords, but annotations and also defines @.) + if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '^') { + chord[1] = chord[1].substring(1); + chord[2] = 'above'; + } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '_') { + chord[1] = chord[1].substring(1); + chord[2] = 'below'; + } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '<') { + chord[1] = chord[1].substring(1); + chord[2] = 'left'; + } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '>') { + chord[1] = chord[1].substring(1); + chord[2] = 'right'; + } else if (chord[0] > 0 && chord[1].length > 0 && chord[1].charAt(0) === '@') { + // @-15,5.7 + chord[1] = chord[1].substring(1); + var x = tokenizer.getFloat(chord[1]); + if (x.digits === 0) + warn("Missing first position in absolutely positioned annotation.", line , i); + chord[1] = chord[1].substring(x.digits); + if (chord[1][0] !== ',') + warn("Missing comma absolutely positioned annotation.", line , i); + chord[1] = chord[1].substring(1); + var y = tokenizer.getFloat(chord[1]); + if (y.digits === 0) + warn("Missing second position in absolutely positioned annotation.", line , i); + chord[1] = chord[1].substring(y.digits); + var ws = tokenizer.skipWhiteSpace(chord[1]); + chord[1] = chord[1].substring(ws); + chord[2] = null; + chord[3] = { x: x.value, y: y.value }; + } else { + if (multilineVars.freegchord !== true) { + chord[1] = chord[1].replace(/([ABCDEFG0-9])b/g, "$1♭"); + chord[1] = chord[1].replace(/([ABCDEFG0-9])#/g, "$1♯"); + } + chord[2] = 'default'; + chord[1] = abc_transpose.chordName(multilineVars, chord[1]); + } + return chord; + } + return [0, ""]; + }; + + var legalAccents = [ "trill", "lowermordent", "uppermordent", "mordent", "pralltriller", "accent", + "fermata", "invertedfermata", "tenuto", "0", "1", "2", "3", "4", "5", "+", "wedge", + "open", "thumb", "snap", "turn", "roll", "breath", "shortphrase", "mediumphrase", "longphrase", + "segno", "coda", "D.S.", "D.C.", "fine", + "slide", "^", "marcato", + "upbow", "downbow", "/", "//", "///", "////", "trem1", "trem2", "trem3", "trem4", + "turnx", "invertedturn", "invertedturnx", "trill(", "trill)", "arpeggio", "xstem", "mark", "umarcato", + "style=normal", "style=harmonic", "style=rhythm", "style=x" + ]; + var volumeDecorations = [ "p", "pp", "f", "ff", "mf", "mp", "ppp", "pppp", "fff", "ffff", "sfz" ]; + var dynamicDecorations = ["crescendo(", "crescendo)", "diminuendo(", "diminuendo)"]; + + var accentPseudonyms = [ ["<", "accent"], [">", "accent"], ["tr", "trill"], + ["plus", "+"], [ "emphasis", "accent"], + [ "^", "umarcato" ], [ "marcato", "umarcato" ] ]; + var accentDynamicPseudonyms = [ ["<(", "crescendo("], ["<)", "crescendo)"], + [">(", "diminuendo("], [">)", "diminuendo)"] ]; + var letter_to_accent = function(line, i) + { + var macro = multilineVars.macros[line.charAt(i)]; + + if (macro !== undefined) { + if (macro.charAt(0) === '!' || macro.charAt(0) === '+') + macro = macro.substring(1); + if (macro.charAt(macro.length-1) === '!' || macro.charAt(macro.length-1) === '+') + macro = macro.substring(0, macro.length-1); + if (abc_common.detect(legalAccents, function(acc) { + return (macro === acc); + })) + return [ 1, macro ]; + else if (abc_common.detect(volumeDecorations, function(acc) { + return (macro === acc); + })) { + if (multilineVars.volumePosition === 'hidden') + macro = ""; + return [1, macro]; + } else if (abc_common.detect(dynamicDecorations, function(acc) { + if (multilineVars.dynamicPosition === 'hidden') + macro = ""; + return (macro === acc); + })) { + return [1, macro]; + } else { + if (!abc_common.detect(multilineVars.ignoredDecorations, function(dec) { + return (macro === dec); + })) + warn("Unknown macro: " + macro, line, i); + return [1, '' ]; + } + } + switch (line.charAt(i)) + { + case '.':return [1, 'staccato']; + case 'u':return [1, 'upbow']; + case 'v':return [1, 'downbow']; + case '~':return [1, 'irishroll']; + case '!': + case '+': + var ret = tokenizer.getBrackettedSubstring(line, i, 5); + // Be sure that the accent is recognizable. + if (ret[1].length > 0 && (ret[1].charAt(0) === '^' || ret[1].charAt(0) ==='_')) + ret[1] = ret[1].substring(1); // TODO-PER: The test files have indicators forcing the ornament to the top or bottom, but that isn't in the standard. We'll just ignore them. + if (abc_common.detect(legalAccents, function(acc) { + return (ret[1] === acc); + })) + return ret; + if (abc_common.detect(volumeDecorations, function(acc) { + return (ret[1] === acc); + })) { + if (multilineVars.volumePosition === 'hidden' ) + ret[1] = ''; + return ret; + } + if (abc_common.detect(dynamicDecorations, function(acc) { + return (ret[1] === acc); + })) { + if (multilineVars.dynamicPosition === 'hidden' ) + ret[1] = ''; + return ret; + } + + if (abc_common.detect(accentPseudonyms, function(acc) { + if (ret[1] === acc[0]) { + ret[1] = acc[1]; + return true; + } else + return false; + })) + return ret; + + if (abc_common.detect(accentDynamicPseudonyms, function(acc) { + if (ret[1] === acc[0]) { + ret[1] = acc[1]; + return true; + } else + return false; + })) { + if (multilineVars.dynamicPosition === 'hidden' ) + ret[1] = ''; + return ret; + } + // We didn't find the accent in the list, so consume the space, but don't return an accent. + // Although it is possible that ! was used as a line break, so accept that. + if (line.charAt(i) === '!' && (ret[0] === 1 || line.charAt(i+ret[0]-1) !== '!')) + return [1, null ]; + warn("Unknown decoration: " + ret[1], line, i); + ret[1] = ""; + return ret; + case 'H':return [1, 'fermata']; + case 'J':return [1, 'slide']; + case 'L':return [1, 'accent']; + case 'M':return [1, 'mordent']; + case 'O':return [1, 'coda']; + case 'P':return [1, 'pralltriller']; + case 'R':return [1, 'roll']; + case 'S':return [1, 'segno']; + case 'T':return [1, 'trill']; + } + return [0, 0]; + }; + + var letter_to_spacer = function(line, i) + { + var start = i; + while (tokenizer.isWhiteSpace(line.charAt(i))) + i++; + return [ i-start ]; + }; + + // returns the class of the bar line + // the number of the repeat + // and the number of characters used up + // if 0 is returned, then the next element was not a bar line + var letter_to_bar = function(line, curr_pos) + { + var ret = tokenizer.getBarLine(line, curr_pos); + if (ret.len === 0) + return [0,""]; + if (ret.warn) { + warn(ret.warn, line, curr_pos); + return [ret.len,""]; + } + + // Now see if this is a repeated ending + // A repeated ending is all of the characters 1,2,3,4,5,6,7,8,9,0,-, and comma + // It can also optionally start with '[', which is ignored. + // Also, it can have white space before the '['. + for (var ws = 0; ws < line.length; ws++) + if (line.charAt(curr_pos + ret.len + ws) !== ' ') + break; + var orig_bar_len = ret.len; + if (line.charAt(curr_pos+ret.len+ws) === '[') { + ret.len += ws + 1; + } + + // It can also be a quoted string. It is unclear whether that construct requires '[', but it seems like it would. otherwise it would be confused with a regular chord. + if (line.charAt(curr_pos+ret.len) === '"' && line.charAt(curr_pos+ret.len-1) === '[') { + var ending = tokenizer.getBrackettedSubstring(line, curr_pos+ret.len, 5); + return [ret.len+ending[0], ret.token, ending[1]]; + } + var retRep = tokenizer.getTokenOf(line.substring(curr_pos+ret.len), "1234567890-,"); + if (retRep.len === 0 || retRep.token[0] === '-') + return [orig_bar_len, ret.token]; + + return [ret.len+retRep.len, ret.token, retRep.token]; + }; + + var tripletQ = { + 2: 3, + 3: 2, + 4: 3, + 5: 2, // TODO-PER: not handling 6/8 rhythm yet + 6: 2, + 7: 2, // TODO-PER: not handling 6/8 rhythm yet + 8: 3, + 9: 2 // TODO-PER: not handling 6/8 rhythm yet + }; + var letter_to_open_slurs_and_triplets = function(line, i) { + // consume spaces, and look for all the open parens. If there is a number after the open paren, + // that is a triplet. Otherwise that is a slur. Collect all the slurs and the first triplet. + var ret = {}; + var start = i; + while (line.charAt(i) === '(' || tokenizer.isWhiteSpace(line.charAt(i))) { + if (line.charAt(i) === '(') { + if (i+1 < line.length && (line.charAt(i+1) >= '2' && line.charAt(i+1) <= '9')) { + if (ret.triplet !== undefined) + warn("Can't nest triplets", line, i); + else { + ret.triplet = line.charAt(i+1) - '0'; + ret.tripletQ = tripletQ[ret.triplet]; + ret.num_notes = ret.triplet; + if (i+2 < line.length && line.charAt(i+2) === ':') { + // We are expecting "(p:q:r" or "(p:q" or "(p::r" + // That is: "put p notes into the time of q for the next r notes" + // if r is missing, then it is equal to p. + // if q is missing, it is determined from this table: + // (2 notes in the time of 3 + // (3 notes in the time of 2 + // (4 notes in the time of 3 + // (5 notes in the time of n | if time sig is (6/8, 9/8, 12/8), n=3, else n=2 + // (6 notes in the time of 2 + // (7 notes in the time of n + // (8 notes in the time of 3 + // (9 notes in the time of n + if (i+3 < line.length && line.charAt(i+3) === ':') { + // The second number, 'q', is not present. + if (i+4 < line.length && (line.charAt(i+4) >= '1' && line.charAt(i+4) <= '9')) { + ret.num_notes = line.charAt(i+4) - '0'; + i += 3; + } else + warn("expected number after the two colons after the triplet to mark the duration", line, i); + } else if (i+3 < line.length && (line.charAt(i+3) >= '1' && line.charAt(i+3) <= '9')) { + ret.tripletQ = line.charAt(i+3) - '0'; + if (i+4 < line.length && line.charAt(i+4) === ':') { + if (i+5 < line.length && (line.charAt(i+5) >= '1' && line.charAt(i+5) <= '9')) { + ret.num_notes = line.charAt(i+5) - '0'; + i += 4; + } + } else { + i += 2; + } + } else + warn("expected number after the triplet to mark the duration", line, i); + } + } + i++; + } + else { + if (ret.startSlur === undefined) + ret.startSlur = 1; + else + ret.startSlur++; + } + } + i++; + } + ret.consumed = i-start; + return ret; + }; + + var addWords = function(line, words) { + if (!line) { warn("Can't add words before the first line of music", line, 0); return; } + words = abc_common.strip(words); + if (words.charAt(words.length-1) !== '-') + words = words + ' '; // Just makes it easier to parse below, since every word has a divider after it. + var word_list = []; + // first make a list of words from the string we are passed. A word is divided on either a space or dash. + var last_divider = 0; + var replace = false; + var addWord = function(i) { + var word = abc_common.strip(words.substring(last_divider, i)); + last_divider = i+1; + if (word.length > 0) { + if (replace) + word = abc_common.gsub(word,'~', ' '); + var div = words.charAt(i); + if (div !== '_' && div !== '-') + div = ' '; + word_list.push({syllable: tokenizer.translateString(word), divider: div}); + replace = false; + return true; + } + return false; + }; + for (var i = 0; i < words.length; i++) { + switch (words.charAt(i)) { + case ' ': + case '\x12': + addWord(i); + break; + case '-': + if (!addWord(i) && word_list.length > 0) { + abc_common.last(word_list).divider = '-'; + word_list.push({skip: true, to: 'next'}); + } + break; + case '_': + addWord(i); + word_list.push({skip: true, to: 'slur'}); + break; + case '*': + addWord(i); + word_list.push({skip: true, to: 'next'}); + break; + case '|': + addWord(i); + word_list.push({skip: true, to: 'bar'}); + break; + case '~': + replace = true; + break; + } + } + + var inSlur = false; + abc_common.each(line, function(el) { + if (word_list.length !== 0) { + if (word_list[0].skip) { + switch (word_list[0].to) { + case 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break; + case 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break; + case 'bar': if (el.el_type === 'bar') word_list.shift(); break; + } + if (el.el_type !== 'bar') { + if (el.lyric === undefined) + el.lyric = [{syllable: "", divider: " "}]; + else + el.lyric.push({syllable: "", divider: " "}); + } + } else { + if (el.el_type === 'note' && el.rest === undefined && !inSlur) { + var lyric = word_list.shift(); + if (lyric.syllable) + lyric.syllable = lyric.syllable.replace(/ +/g,'\xA0'); + if (el.lyric === undefined) + el.lyric = [ lyric ]; + else + el.lyric.push(lyric); + } + } + } + }); + }; + + var addSymbols = function(line, words) { + // TODO-PER: Currently copied from w: line. This needs to be read as symbols instead. + if (!line) { warn("Can't add symbols before the first line of music", line, 0); return; } + words = abc_common.strip(words); + if (words.charAt(words.length-1) !== '-') + words = words + ' '; // Just makes it easier to parse below, since every word has a divider after it. + var word_list = []; + // first make a list of words from the string we are passed. A word is divided on either a space or dash. + var last_divider = 0; + var replace = false; + var addWord = function(i) { + var word = abc_common.strip(words.substring(last_divider, i)); + last_divider = i+1; + if (word.length > 0) { + if (replace) + word = abc_common.gsub(word, '~', ' '); + var div = words.charAt(i); + if (div !== '_' && div !== '-') + div = ' '; + word_list.push({syllable: tokenizer.translateString(word), divider: div}); + replace = false; + return true; + } + return false; + }; + for (var i = 0; i < words.length; i++) { + switch (words.charAt(i)) { + case ' ': + case '\x12': + addWord(i); + break; + case '-': + if (!addWord(i) && word_list.length > 0) { + abc_common.last(word_list).divider = '-'; + word_list.push({skip: true, to: 'next'}); + } + break; + case '_': + addWord(i); + word_list.push({skip: true, to: 'slur'}); + break; + case '*': + addWord(i); + word_list.push({skip: true, to: 'next'}); + break; + case '|': + addWord(i); + word_list.push({skip: true, to: 'bar'}); + break; + case '~': + replace = true; + break; + } + } + + var inSlur = false; + abc_common.each(line, function(el) { + if (word_list.length !== 0) { + if (word_list[0].skip) { + switch (word_list[0].to) { + case 'next': if (el.el_type === 'note' && el.pitches !== null && !inSlur) word_list.shift(); break; + case 'slur': if (el.el_type === 'note' && el.pitches !== null) word_list.shift(); break; + case 'bar': if (el.el_type === 'bar') word_list.shift(); break; + } + } else { + if (el.el_type === 'note' && el.rest === undefined && !inSlur) { + var lyric = word_list.shift(); + if (el.lyric === undefined) + el.lyric = [ lyric ]; + else + el.lyric.push(lyric); + } + } + } + }); + }; + + var getBrokenRhythm = function(line, index) { + switch (line.charAt(index)) { + case '>': + if (index < line.length - 1 && line.charAt(index+1) === '>') // double >> + return [2, 1.75, 0.25]; + else + return [1, 1.5, 0.5]; + case '<': + if (index < line.length - 1 && line.charAt(index+1) === '<') // double << + return [2, 0.25, 1.75]; + else + return [1, 0.5, 1.5]; + } + return null; + }; + + // TODO-PER: make this a method in el. + var addEndBeam = function(el) { + if (el.duration !== undefined && el.duration < 0.25) + el.end_beam = true; + return el; + }; + + var pitches = {A: 5, B: 6, C: 0, D: 1, E: 2, F: 3, G: 4, a: 12, b: 13, c: 7, d: 8, e: 9, f: 10, g: 11}; + var rests = {x: 'invisible', y: 'spacer', z: 'rest', Z: 'multimeasure' }; + var getCoreNote = function(line, index, el, canHaveBrokenRhythm) { + //var el = { startChar: index }; + var isComplete = function(state) { + return (state === 'octave' || state === 'duration' || state === 'Zduration' || state === 'broken_rhythm' || state === 'end_slur'); + }; + var state = 'startSlur'; + var durationSetByPreviousNote = false; + while (1) { + switch(line.charAt(index)) { + case '(': + if (state === 'startSlur') { + if (el.startSlur === undefined) el.startSlur = 1; else el.startSlur++; + } else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case ')': + if (isComplete(state)) { + if (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++; + } else return null; + break; + case '^': + if (state === 'startSlur') {el.accidental = 'sharp';state = 'sharp2';} + else if (state === 'sharp2') {el.accidental = 'dblsharp';state = 'pitch';} + else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case '_': + if (state === 'startSlur') {el.accidental = 'flat';state = 'flat2';} + else if (state === 'flat2') {el.accidental = 'dblflat';state = 'pitch';} + else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case '=': + if (state === 'startSlur') {el.accidental = 'natural';state = 'pitch';} + else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + if (state === 'startSlur' || state === 'sharp2' || state === 'flat2' || state === 'pitch') { + el.pitch = pitches[line.charAt(index)]; + abc_transpose.note(multilineVars, el); + state = 'octave'; + // At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below + if (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) { + el.duration = multilineVars.default_length * multilineVars.next_note_duration; + multilineVars.next_note_duration = 0; + durationSetByPreviousNote = true; + } else + el.duration = multilineVars.default_length; + // If the clef is percussion, there is probably some translation of the pitch to a particular drum kit item. + if ((multilineVars.clef && multilineVars.clef.type === "perc") || + (multilineVars.currentVoice && multilineVars.currentVoice.clef === "perc")) { + var key = line.charAt(index); + if (el.accidental) { + var accMap = { 'dblflat': '__', 'flat': '_', 'natural': '=', 'sharp': '^', 'dblsharp': '^^'}; + key = accMap[el.accidental] + key; + } + if (tune.formatting && tune.formatting.midi && tune.formatting.midi.drummap) + el.midipitch = tune.formatting.midi.drummap[key]; + } + } else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case ',': + if (state === 'octave') {el.pitch -= 7;} + else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case '\'': + if (state === 'octave') {el.pitch += 7;} + else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case 'x': + case 'y': + case 'z': + case 'Z': + if (state === 'startSlur') { + el.rest = { type: rests[line.charAt(index)] }; + // There shouldn't be some of the properties that notes have. If some sneak in due to bad syntax in the abc file, + // just nix them here. + delete el.accidental; + delete el.startSlur; + delete el.startTie; + delete el.endSlur; + delete el.endTie; + delete el.end_beam; + delete el.grace_notes; + // At this point we have a valid note. The rest is optional. Set the duration in case we don't get one below + if (el.rest.type === 'multimeasure') { + el.duration = 1; + state = 'Zduration'; + } else { + if (canHaveBrokenRhythm && multilineVars.next_note_duration !== 0) { + el.duration = multilineVars.default_length * multilineVars.next_note_duration; + multilineVars.next_note_duration = 0; + durationSetByPreviousNote = true; + } else + el.duration = multilineVars.default_length; + state = 'duration'; + } + } else if (isComplete(state)) {el.endChar = index;return el;} + else return null; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '0': + case '/': + if (state === 'octave' || state === 'duration') { + var fraction = tokenizer.getFraction(line, index); + //if (!durationSetByPreviousNote) + el.duration = el.duration * fraction.value; + // TODO-PER: We can test the returned duration here and give a warning if it isn't the one expected. + el.endChar = fraction.index; + while (fraction.index < line.length && (tokenizer.isWhiteSpace(line.charAt(fraction.index)) || line.charAt(fraction.index) === '-')) { + if (line.charAt(fraction.index) === '-') + el.startTie = {}; + else + el = addEndBeam(el); + fraction.index++; + } + index = fraction.index-1; + state = 'broken_rhythm'; + } else if (state === 'sharp2') { + el.accidental = 'quartersharp';state = 'pitch'; + } else if (state === 'flat2') { + el.accidental = 'quarterflat';state = 'pitch'; + } else if (state === 'Zduration') { + var num = tokenizer.getNumber(line, index); + el.duration = num.num; + el.endChar = num.index; + return el; + } else return null; + break; + case '-': + if (state === 'startSlur') { + // This is the first character, so it must have been meant for the previous note. Correct that here. + tune.addTieToLastNote(); + el.endTie = true; + } else if (state === 'octave' || state === 'duration' || state === 'end_slur') { + el.startTie = {}; + if (!durationSetByPreviousNote && canHaveBrokenRhythm) + state = 'broken_rhythm'; + else { + // Peek ahead to the next character. If it is a space, then we have an end beam. + if (tokenizer.isWhiteSpace(line.charAt(index + 1))) + addEndBeam(el); + el.endChar = index+1; + return el; + } + } else if (state === 'broken_rhythm') {el.endChar = index;return el;} + else return null; + break; + case ' ': + case '\t': + if (isComplete(state)) { + el.end_beam = true; + // look ahead to see if there is a tie + do { + if (line.charAt(index) === '-') + el.startTie = {}; + index++; + } while (index < line.length && (tokenizer.isWhiteSpace(line.charAt(index)) || line.charAt(index) === '-')); + el.endChar = index; + if (!durationSetByPreviousNote && canHaveBrokenRhythm && (line.charAt(index) === '<' || line.charAt(index) === '>')) { // TODO-PER: Don't need the test for < and >, but that makes the endChar work out for the regression test. + index--; + state = 'broken_rhythm'; + } else + return el; + } + else return null; + break; + case '>': + case '<': + if (isComplete(state)) { + if (canHaveBrokenRhythm) { + var br2 = getBrokenRhythm(line, index); + index += br2[0] - 1; // index gets incremented below, so we'll let that happen + multilineVars.next_note_duration = br2[2]; + el.duration = br2[1]*el.duration; + state = 'end_slur'; + } else { + el.endChar = index; + return el; + } + } else + return null; + break; + default: + if (isComplete(state)) { + el.endChar = index; + return el; + } + return null; + } + index++; + if (index === line.length) { + if (isComplete(state)) {el.endChar = index;return el;} + else return null; + } + } + return null; + }; + + function startNewLine() { + var params = { startChar: -1, endChar: -1}; + if (multilineVars.partForNextLine.title) + params.part = multilineVars.partForNextLine; + params.clef = multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].clef !== undefined ? abc_common.clone(multilineVars.staves[multilineVars.currentVoice.staffNum].clef) : abc_common.clone(multilineVars.clef); + var scoreTranspose = multilineVars.currentVoice ? multilineVars.currentVoice.scoreTranspose : 0; + params.key = abc_parse_key_voice.standardKey(multilineVars.key.root+multilineVars.key.acc+multilineVars.key.mode, multilineVars.key.root, multilineVars.key.acc, scoreTranspose); + params.key.mode = multilineVars.key.mode; + if (multilineVars.key.impliedNaturals) + params.key.impliedNaturals = multilineVars.key.impliedNaturals; + if (multilineVars.key.explicitAccidentals) { + for (var i = 0; i < multilineVars.key.explicitAccidentals.length; i++) { + var found = false; + for (var j = 0; j < params.key.accidentals.length; j++) { + if (params.key.accidentals[j].note === multilineVars.key.explicitAccidentals[i].note) { + // If the note is already in the list, override it with the new value + params.key.accidentals[j].acc = multilineVars.key.explicitAccidentals[i].acc; + found = true; + } + } + if (!found) + params.key.accidentals.push(multilineVars.key.explicitAccidentals[i]); + } + } + multilineVars.targetKey = params.key; + if (params.key.explicitAccidentals) + delete params.key.explicitAccidentals; + abc_parse_key_voice.addPosToKey(params.clef, params.key); + if (multilineVars.meter !== null) { + if (multilineVars.currentVoice) { + abc_common.each(multilineVars.staves, function(st) { + st.meter = multilineVars.meter; + }); + params.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter; + multilineVars.staves[multilineVars.currentVoice.staffNum].meter = null; + } else + params.meter = multilineVars.meter; + multilineVars.meter = null; + } else if (multilineVars.currentVoice && multilineVars.staves[multilineVars.currentVoice.staffNum].meter) { + // Make sure that each voice gets the meter marking. + params.meter = multilineVars.staves[multilineVars.currentVoice.staffNum].meter; + multilineVars.staves[multilineVars.currentVoice.staffNum].meter = null; + } + if (multilineVars.currentVoice && multilineVars.currentVoice.name) + params.name = multilineVars.currentVoice.name; + if (multilineVars.vocalfont) + params.vocalfont = multilineVars.vocalfont; + if (multilineVars.tripletfont) + params.tripletfont = multilineVars.tripletfont; + if (multilineVars.style) + params.style = multilineVars.style; + if (multilineVars.currentVoice) { + var staff = multilineVars.staves[multilineVars.currentVoice.staffNum]; + if (staff.brace) params.brace = staff.brace; + if (staff.bracket) params.bracket = staff.bracket; + if (staff.connectBarLines) params.connectBarLines = staff.connectBarLines; + if (staff.name) params.name = staff.name[multilineVars.currentVoice.index]; + if (staff.subname) params.subname = staff.subname[multilineVars.currentVoice.index]; + if (multilineVars.currentVoice.stem) + params.stem = multilineVars.currentVoice.stem; + if (multilineVars.currentVoice.stafflines) + params.stafflines = multilineVars.currentVoice.stafflines; + if (multilineVars.currentVoice.staffscale) + params.staffscale = multilineVars.currentVoice.staffscale; + if (multilineVars.currentVoice.scale) + params.scale = multilineVars.currentVoice.scale; + if (multilineVars.currentVoice.style) + params.style = multilineVars.currentVoice.style; + if (multilineVars.currentVoice.transpose) + params.clef.transpose = multilineVars.currentVoice.transpose; + } + var isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0); + if (multilineVars.barNumbers === 0 && isFirstVoice && multilineVars.currBarNumber !== 1) + params.barNumber = multilineVars.currBarNumber; + tune.startNewLine(params); + if (multilineVars.key.impliedNaturals) + delete multilineVars.key.impliedNaturals; + + multilineVars.partForNextLine = {}; + } + + var letter_to_grace = function(line, i) { + // Grace notes are an array of: startslur, note, endslur, space; where note is accidental, pitch, duration + if (line.charAt(i) === '{') { + // fetch the gracenotes string and consume that into the array + var gra = tokenizer.getBrackettedSubstring(line, i, 1, '}'); + if (!gra[2]) + warn("Missing the closing '}' while parsing grace note", line, i); + // If there is a slur after the grace construction, then move it to the last note inside the grace construction + if (line[i+gra[0]] === ')') { + gra[0]++; + gra[1] += ')'; + } + + var gracenotes = []; + var ii = 0; + var inTie = false; + while (ii < gra[1].length) { + var acciaccatura = false; + if (gra[1].charAt(ii) === '/') { + acciaccatura = true; + ii++; + } + var note = getCoreNote(gra[1], ii, {}, false); + if (note !== null) { + // The grace note durations should not be affected by the default length: they should be based on 1/16, so if that isn't the default, then multiply here. + note.duration = note.duration / (multilineVars.default_length * 8); + if (acciaccatura) + note.acciaccatura = true; + gracenotes.push(note); + + if (inTie) { + note.endTie = true; + inTie = false; + } + if (note.startTie) + inTie = true; + + ii = note.endChar; + delete note.endChar; + } + else { + // We shouldn't get anything but notes or a space here, so report an error + if (gra[1].charAt(ii) === ' ') { + if (gracenotes.length > 0) + gracenotes[gracenotes.length-1].end_beam = true; + } else + warn("Unknown character '" + gra[1].charAt(ii) + "' while parsing grace note", line, i); + ii++; + } + } + if (gracenotes.length) + return [gra[0], gracenotes]; + } + return [ 0 ]; + }; + + function letter_to_overlay(line, i) { + if (line.charAt(i) === '&') { + var start = i; + while (line.charAt(i) && line.charAt(i) !== ':' && line.charAt(i) !== '|') + i++; + return [ i-start, line.substring(start+1, i) ]; + } + return [ 0 ]; + } + + function durationOfMeasure(multilineVars) { + // TODO-PER: This could be more complicated if one of the unusual measures is used. + var meter = multilineVars.origMeter; + if (!meter || meter.type !== 'specified') + return 1; + if (!meter.value || meter.value.length === 0) + return 1; + return parseInt(meter.value[0].num, 10) / parseInt(meter.value[0].den, 10); + } + + // + // Parse line of music + // + // This is a stream of <(bar-marking|header|note-group)...> in any order, with optional spaces between each element + // core-note is with no spaces within that + // chord is with no spaces within that + // grace-notes is spaces are allowed + // note-group is spaces are allowed between items + // bar-marking is or spaces allowed + // header is spaces can occur between the colon, in the field, and before the close bracket + // header can also be the only thing on a line. This is true even if it is a continuation line. In this case the brackets are not required. + // a space is a back-tick, a space, or a tab. If it is a back-tick, then there is no end-beam. + + // Line preprocessing: anything after a % is ignored (the double %% should have been taken care of before this) + // Then, all leading and trailing spaces are ignored. + // If there was a line continuation, the \n was replaced by a \r and the \ was replaced by a space. This allows the construct + // of having a header mid-line conceptually, but actually be at the start of the line. This is equivolent to putting the header in [ ]. + + // TODO-PER: How to handle ! for line break? + // TODO-PER: dots before bar, dots before slur + // TODO-PER: U: redefinable symbols. + + // Ambiguous symbols: + // "[" can be the start of a chord, the start of a header element or part of a bar line. + // --- if it is immediately followed by "|", it is a bar line + // --- if it is immediately followed by K: L: M: V: it is a header (note: there are other headers mentioned in the standard, but I'm not sure how they would be used.) + // --- otherwise it is the beginning of a chord + // "(" can be the start of a slur or a triplet + // --- if it is followed by a number from 2-9, then it is a triplet + // --- otherwise it is a slur + // "]" + // --- if there is a chord open, then this is the close + // --- if it is after a [|, then it is an invisible bar line + // --- otherwise, it is par of a bar + // "." can be a bar modifier or a slur modifier, or a decoration + // --- if it comes immediately before a bar, it is a bar modifier + // --- if it comes immediately before a slur, it is a slur modifier + // --- otherwise it is a decoration for the next note. + // number: + // --- if it is after a bar, with no space, it is an ending marker + // --- if it is after a ( with no space, it is a triplet count + // --- if it is after a pitch or octave or slash, then it is a duration + + // Unambiguous symbols (except inside quoted strings): + // vertical-bar, colon: part of a bar + // ABCDEFGabcdefg: pitch + // xyzZ: rest + // comma, prime: octave + // close-paren: end-slur + // hyphen: tie + // tilde, v, u, bang, plus, THLMPSO: decoration + // carat, underscore, equal: accidental + // ampersand: time reset + // open-curly, close-curly: grace notes + // double-quote: chord symbol + // less-than, greater-than, slash: duration + // back-tick, space, tab: space + var nonDecorations = "ABCDEFGabcdefgxyzZ[]|^_{"; // use this to prescreen so we don't have to look for a decoration at every note. + + var parseRegularMusicLine = function(line) { + header.resolveTempo(); + //multilineVars.havent_set_length = false; // To late to set this now. + multilineVars.is_in_header = false; // We should have gotten a key header by now, but just in case, this is definitely out of the header. + var i = 0; + var startOfLine = multilineVars.iChar; + // see if there is nothing but a comment on this line. If so, just ignore it. A full line comment is optional white space followed by % + while (tokenizer.isWhiteSpace(line.charAt(i)) && i < line.length) + i++; + if (i === line.length || line.charAt(i) === '%') + return; + + // Start with the standard staff, clef and key symbols on each line + var delayStartNewLine = multilineVars.start_new_line; + if (multilineVars.continueall === undefined) + multilineVars.start_new_line = true; + else + multilineVars.start_new_line = false; + var tripletNotesLeft = 0; + + // See if the line starts with a header field + var retHeader = header.letter_to_body_header(line, i); + if (retHeader[0] > 0) { + i += retHeader[0]; + if (retHeader[1] === 'V') + delayStartNewLine = true; // fixes bug on this: c[V:2]d + // TODO-PER: Handle inline headers + } + var el = { }; + + var overlayLevel = 0; + while (i < line.length) + { + var startI = i; + if (line.charAt(i) === '%') + break; + + var retInlineHeader = header.letter_to_inline_header(line, i); + if (retInlineHeader[0] > 0) { + i += retInlineHeader[0]; + if (retInlineHeader[1] === 'V') + delayStartNewLine = true; // fixes bug on this: c[V:2]d + // TODO-PER: Handle inline headers + //multilineVars.start_new_line = false; + } else { + // Wait until here to actually start the line because we know we're past the inline statements. + if (delayStartNewLine) { + startNewLine(); + delayStartNewLine = false; + } + + // We need to decide if the following characters are a bar-marking or a note-group. + // Unfortunately, that is ambiguous. Both can contain chord symbols and decorations. + // If there is a grace note either before or after the chord symbols and decorations, then it is definitely a note-group. + // If there is a bar marker, it is definitely a bar-marking. + // If there is either a core-note or chord, it is definitely a note-group. + // So, loop while we find grace-notes, chords-symbols, or decorations. [It is an error to have more than one grace-note group in a row; the others can be multiple] + // Then, if there is a grace-note, we know where to go. + // Else see if we have a chord, core-note, slur, triplet, or bar. + + var ret; + while (1) { + ret = tokenizer.eatWhiteSpace(line, i); + if (ret > 0) { + i += ret; + } + if (i > 0 && line.charAt(i-1) === '\x12') { + // there is one case where a line continuation isn't the same as being on the same line, and that is if the next character after it is a header. + ret = header.letter_to_body_header(line, i); + if (ret[0] > 0) { + if (ret[1] === 'V') + startNewLine(); // fixes bug on this: c\\nV:2]\\nd + // TODO: insert header here + i = ret[0]; + multilineVars.start_new_line = false; + } + } + // gather all the grace notes, chord symbols and decorations + ret = letter_to_spacer(line, i); + if (ret[0] > 0) { + i += ret[0]; + } + + ret = letter_to_chord(line, i); + if (ret[0] > 0) { + // There could be more than one chord here if they have different positions. + // If two chords have the same position, then connect them with newline. + if (!el.chord) + el.chord = []; + var chordName = tokenizer.translateString(ret[1]); + chordName = chordName.replace(/;/g, "\n"); + var addedChord = false; + for (var ci = 0; ci < el.chord.length; ci++) { + if (el.chord[ci].position === ret[2]) { + addedChord = true; + el.chord[ci].name += "\n" + chordName; + } + } + if (addedChord === false) { + if (ret[2] === null && ret[3]) + el.chord.push({name: chordName, rel_position: ret[3]}); + else + el.chord.push({name: chordName, position: ret[2]}); + } + + i += ret[0]; + var ii = tokenizer.skipWhiteSpace(line.substring(i)); + if (ii > 0) + el.force_end_beam_last = true; + i += ii; + } else { + if (nonDecorations.indexOf(line.charAt(i)) === -1) + ret = letter_to_accent(line, i); + else ret = [ 0 ]; + if (ret[0] > 0) { + if (ret[1] === null) { + if (i + 1 < line.length) + startNewLine(); // There was a ! in the middle of the line. Start a new line if there is anything after it. + } else if (ret[1].length > 0) { + if (ret[1].indexOf("style=") === 0) { + el.style = ret[1].substr(6); + } else { + if (el.decoration === undefined) + el.decoration = []; + el.decoration.push(ret[1]); + } + } + i += ret[0]; + } else { + ret = letter_to_grace(line, i); + // TODO-PER: Be sure there aren't already grace notes defined. That is an error. + if (ret[0] > 0) { + el.gracenotes = ret[1]; + i += ret[0]; + } else + break; + } + } + } + + ret = letter_to_bar(line, i); + if (ret[0] > 0) { + // This is definitely a bar + overlayLevel = 0; + if (el.gracenotes !== undefined) { + // Attach the grace note to an invisible note + el.rest = { type: 'spacer' }; + el.duration = 0.125; // TODO-PER: I don't think the duration of this matters much, but figure out if it does. + multilineVars.addFormattingOptions(el, tune.formatting, 'note'); + tune.appendElement('note', startOfLine+i, startOfLine+i+ret[0], el); + multilineVars.measureNotEmpty = true; + el = {}; + } + var bar = {type: ret[1]}; + if (bar.type.length === 0) + warn("Unknown bar type", line, i); + else { + if (multilineVars.inEnding && bar.type !== 'bar_thin') { + bar.endEnding = true; + multilineVars.inEnding = false; + } + if (ret[2]) { + bar.startEnding = ret[2]; + if (multilineVars.inEnding) + bar.endEnding = true; + multilineVars.inEnding = true; + } + if (el.decoration !== undefined) + bar.decoration = el.decoration; + if (el.chord !== undefined) + bar.chord = el.chord; + if (bar.startEnding && multilineVars.barFirstEndingNum === undefined) + multilineVars.barFirstEndingNum = multilineVars.currBarNumber; + else if (bar.startEnding && bar.endEnding && multilineVars.barFirstEndingNum) + multilineVars.currBarNumber = multilineVars.barFirstEndingNum; + else if (bar.endEnding) + multilineVars.barFirstEndingNum = undefined; + if (bar.type !== 'bar_invisible' && multilineVars.measureNotEmpty) { + var isFirstVoice = multilineVars.currentVoice === undefined || (multilineVars.currentVoice.staffNum === 0 && multilineVars.currentVoice.index === 0); + if (isFirstVoice) { + multilineVars.currBarNumber++; + if (multilineVars.barNumbers && multilineVars.currBarNumber % multilineVars.barNumbers === 0) + bar.barNumber = multilineVars.currBarNumber; + } + } + multilineVars.addFormattingOptions(el, tune.formatting, 'bar'); + tune.appendElement('bar', startOfLine+i, startOfLine+i+ret[0], bar); + multilineVars.measureNotEmpty = false; + el = {}; + } + i += ret[0]; + var cv = multilineVars.currentVoice ? multilineVars.currentVoice.staffNum + '-' + multilineVars.currentVoice.index : 'ONLY'; + // if (multilineVars.lineBreaks) { + // if (!multilineVars.barCounter[cv]) + // multilineVars.barCounter[cv] = 0; + // var breakNow = multilineVars.lineBreaks[''+multilineVars.barCounter[cv]]; + // multilineVars.barCounter[cv]++; + // if (breakNow) + // startNewLine(); + // } + } else if (line[i] === '&') { // backtrack to beginning of measure + ret = letter_to_overlay(line, i); + if (ret[0] > 0) { + tune.appendElement('overlay', startOfLine, startOfLine+1, {}); + i += 1; + overlayLevel++; + } + + } else { + // This is definitely a note group + // + // Look for as many open slurs and triplets as there are. (Note: only the first triplet is valid.) + ret = letter_to_open_slurs_and_triplets(line, i); + if (ret.consumed > 0) { + if (ret.startSlur !== undefined) + el.startSlur = ret.startSlur; + if (ret.triplet !== undefined) { + if (tripletNotesLeft > 0) + warn("Can't nest triplets", line, i); + else { + el.startTriplet = ret.triplet; + el.tripletMultiplier = ret.tripletQ / ret.triplet; + tripletNotesLeft = ret.num_notes === undefined ? ret.triplet : ret.num_notes; + } + } + i += ret.consumed; + } + + // handle chords. + if (line.charAt(i) === '[') { + var chordStartChar = i; + i++; + var chordDuration = null; + var rememberEndBeam = false; + + var done = false; + while (!done) { + var accent = letter_to_accent(line, i); + if (accent[0] > 0) { + i += accent[0]; + } + + var chordNote = getCoreNote(line, i, {}, false); + if (chordNote !== null) { + if (accent[0] > 0) { // If we found a decoration above, it modifies the entire chord. "style" is handled below. + if (accent[1].indexOf("style=") !== 0) { + if (el.decoration === undefined) + el.decoration = []; + el.decoration.push(accent[1]); + } + } + if (chordNote.end_beam) { + el.end_beam = true; + delete chordNote.end_beam; + } + if (el.pitches === undefined) { + el.duration = chordNote.duration; + el.pitches = [ chordNote ]; + } else // Just ignore the note lengths of all but the first note. The standard isn't clear here, but this seems less confusing. + el.pitches.push(chordNote); + delete chordNote.duration; + if (accent[0] > 0) { // If we found a style above, it modifies the individual pitch, not the entire chord. + if (accent[1].indexOf("style=") === 0) { + el.pitches[el.pitches.length-1].style = accent[1].substr(6); + } + } + + if (multilineVars.inTieChord[el.pitches.length]) { + chordNote.endTie = true; + multilineVars.inTieChord[el.pitches.length] = undefined; + } + if (chordNote.startTie) + multilineVars.inTieChord[el.pitches.length] = true; + + i = chordNote.endChar; + delete chordNote.endChar; + } else if (line.charAt(i) === ' ') { + // Spaces are not allowed in chords, but we can recover from it by ignoring it. + warn("Spaces are not allowed in chords", line, i); + i++; + } else { + if (i < line.length && line.charAt(i) === ']') { + // consume the close bracket + i++; + + if (multilineVars.next_note_duration !== 0) { + el.duration = el.duration * multilineVars.next_note_duration; + multilineVars.next_note_duration = 0; + } + + if (isInTie(multilineVars, overlayLevel, el)) { + abc_common.each(el.pitches, function(pitch) { pitch.endTie = true; }); + setIsInTie(multilineVars, overlayLevel, false); + } + + if (tripletNotesLeft > 0) { + tripletNotesLeft--; + if (tripletNotesLeft === 0) { + el.endTriplet = true; + } + } + + var postChordDone = false; + while (i < line.length && !postChordDone) { + switch (line.charAt(i)) { + case ' ': + case '\t': + addEndBeam(el); + break; + case ')': + if (el.endSlur === undefined) el.endSlur = 1; else el.endSlur++; + break; + case '-': + abc_common.each(el.pitches, function(pitch) { pitch.startTie = {}; }); + setIsInTie(multilineVars, overlayLevel, true); + break; + case '>': + case '<': + var br2 = getBrokenRhythm(line, i); + i += br2[0] - 1; // index gets incremented below, so we'll let that happen + multilineVars.next_note_duration = br2[2]; + if (chordDuration) + chordDuration = chordDuration * br2[1]; + else + chordDuration = br2[1]; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '/': + var fraction = tokenizer.getFraction(line, i); + chordDuration = fraction.value; + i = fraction.index; + if (line.charAt(i) === ' ') + rememberEndBeam = true; + if (line.charAt(i) === '-' || line.charAt(i) === ')' || line.charAt(i) === ' ' || line.charAt(i) === '<' || line.charAt(i) === '>') + i--; // Subtracting one because one is automatically added below + else + postChordDone = true; + break; + default: + postChordDone = true; + break; + } + if (!postChordDone) { + i++; + } + } + } else + warn("Expected ']' to end the chords", line, i); + + if (el.pitches !== undefined) { + if (chordDuration !== null) { + el.duration = el.duration * chordDuration; + if (rememberEndBeam) + addEndBeam(el); + } + + multilineVars.addFormattingOptions(el, tune.formatting, 'note'); + tune.appendElement('note', startOfLine+chordStartChar, startOfLine+i, el); + multilineVars.measureNotEmpty = true; + el = {}; + } + done = true; + } + } + + } else { + // Single pitch + var el2 = {}; + var core = getCoreNote(line, i, el2, true); + if (el2.endTie !== undefined) setIsInTie(multilineVars, overlayLevel, true); + if (core !== null) { + if (core.pitch !== undefined) { + el.pitches = [ { } ]; + // TODO-PER: straighten this out so there is not so much copying: getCoreNote shouldn't change e' + if (core.accidental !== undefined) el.pitches[0].accidental = core.accidental; + el.pitches[0].pitch = core.pitch; + if (core.midipitch) + el.pitches[0].midipitch = core.midipitch; + if (core.endSlur !== undefined) el.pitches[0].endSlur = core.endSlur; + if (core.endTie !== undefined) el.pitches[0].endTie = core.endTie; + if (core.startSlur !== undefined) el.pitches[0].startSlur = core.startSlur; + if (el.startSlur !== undefined) el.pitches[0].startSlur = el.startSlur; + if (core.startTie !== undefined) el.pitches[0].startTie = core.startTie; + if (el.startTie !== undefined) el.pitches[0].startTie = el.startTie; + } else { + el.rest = core.rest; + if (core.endSlur !== undefined) el.endSlur = core.endSlur; + if (core.endTie !== undefined) el.rest.endTie = core.endTie; + if (core.startSlur !== undefined) el.startSlur = core.startSlur; + if (core.startTie !== undefined) el.rest.startTie = core.startTie; + if (el.startTie !== undefined) el.rest.startTie = el.startTie; + } + + if (core.chord !== undefined) el.chord = core.chord; + if (core.duration !== undefined) el.duration = core.duration; + if (core.decoration !== undefined) el.decoration = core.decoration; + if (core.graceNotes !== undefined) el.graceNotes = core.graceNotes; + delete el.startSlur; + if (isInTie(multilineVars, overlayLevel, el)) { + if (el.pitches !== undefined) { + el.pitches[0].endTie = true; + } else if (el.rest.type !== 'spacer') { + el.rest.endTie = true; + } + setIsInTie(multilineVars, overlayLevel, false); + } + if (core.startTie || el.startTie) + setIsInTie(multilineVars, overlayLevel, true); + i = core.endChar; + + if (tripletNotesLeft > 0) { + tripletNotesLeft--; + if (tripletNotesLeft === 0) { + el.endTriplet = true; + } + } + + if (core.end_beam) + addEndBeam(el); + + // If there is a whole rest, then it should be the duration of the measure, not it's own duration. We need to special case it. + // If the time signature length is greater than 4/4, though, then a whole rest has no special treatment. + if (el.rest && el.rest.type === 'rest' && el.duration === 1 && durationOfMeasure(multilineVars) <= 1) { + el.rest.type = 'whole'; + + el.duration = durationOfMeasure(multilineVars); + } + + multilineVars.addFormattingOptions(el, tune.formatting, 'note'); + tune.appendElement('note', startOfLine+startI, startOfLine+i, el); + multilineVars.measureNotEmpty = true; + el = {}; + } + } + + if (i === startI) { // don't know what this is, so ignore it. + if (line.charAt(i) !== ' ' && line.charAt(i) !== '`') + warn("Unknown character ignored", line, i); + i++; + } + } + } + } + }; + + var isInTie = function(multilineVars, overlayLevel, el) { + if (multilineVars.inTie[overlayLevel] === undefined) + return false; + // If this is single voice music then the voice index isn't set, so we use the first voice. + var voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.index : 0; + if (multilineVars.inTie[overlayLevel][voiceIndex]) { + if (el.pitches !== undefined || el.rest.type !== 'spacer') + return true; + } + return false; + }; + + var setIsInTie =function(multilineVars, overlayLevel, value) { + // If this is single voice music then the voice index isn't set, so we use the first voice. + var voiceIndex = multilineVars.currentVoice ? multilineVars.currentVoice.index : 0; + if (multilineVars.inTie[overlayLevel] === undefined) + multilineVars.inTie[overlayLevel] = []; + multilineVars.inTie[overlayLevel][voiceIndex] = value; + }; + + var parseLine = function(line) { + var ret = header.parseHeader(line); + if (ret.regular) + parseRegularMusicLine(ret.str); + if (ret.newline) + startNewLine(); + if (ret.words) + addWords(tune.getCurrentVoice(), line.substring(2)); + if (ret.symbols) + addSymbols(tune.getCurrentVoice(), line.substring(2)); + if (ret.recurse) + parseLine(ret.str); + }; + + function appendLastMeasure(voice, nextVoice) { + voice.push({ + el_type: 'hint' + }); + for (var i = 0; i < nextVoice.length; i++) { + var element = nextVoice[i]; + var hint = abc_common.clone(element); + voice.push(hint); + if (element.el_type === 'bar') + return; + } + } + + function addHintMeasure(staff, nextStaff) { + for (var i = 0; i < staff.length; i++) { + var stave = staff[i]; + var nextStave = nextStaff[i]; + if (nextStave) { // Be sure there is the same number of staves on the next line. + for (var j = 0; j < nextStave.voices.length; j++) { + var nextVoice = nextStave.voices[j]; + var voice = stave.voices[j]; + if (voice) { // Be sure there are the same number of voices on the previous line. + appendLastMeasure(voice, nextVoice); + } + } + } + } + } + + function addHintMeasures() { + for (var i = 0; i < tune.lines.length; i++) { + var line = tune.lines[i].staff; + if (line) { + var j = i+1; + while (j < tune.lines.length && tune.lines[j].staff === undefined) + j++; + if (j < tune.lines.length) { + var nextLine = tune.lines[j].staff; + addHintMeasure(line, nextLine); + } + } + } + } + + this.parse = function(strTune, switches, startPos) { + // the switches are optional and cause a difference in the way the tune is parsed. + // switches.header_only : stop parsing when the header is finished + // switches.stop_on_warning : stop at the first warning encountered. + // switches.print: format for the page instead of the browser. + // switches.format: a hash of the desired formatting commands. + // switches.hint_measures: put the next measure at the end of the current line. + // switches.transpose: change the key signature, chords, and notes by a number of half-steps. + if (!switches) switches = {}; + if (!startPos) startPos = 0; + tune.reset(); + if (switches.print) + tune.media = 'print'; + multilineVars.reset(); + multilineVars.iChar = startPos; + if (switches.visualTranspose) { + multilineVars.globalTranspose = parseInt(switches.visualTranspose); + if (multilineVars.globalTranspose === 0) + multilineVars.globalTranspose = undefined; + } else + multilineVars.globalTranspose = undefined; + if (switches.lineBreaks) { + // change the format of the the line breaks for easy testing. + // The line break numbers are 0-based and they reflect the last measure of the current line. + multilineVars.lineBreaks = {}; + //multilineVars.continueall = true; + for (var i = 0; i < switches.lineBreaks.length; i++) + multilineVars.lineBreaks[''+(switches.lineBreaks[i]+1)] = true; // Add 1 so that the line break is the first measure of the next line. + } + header.reset(tokenizer, warn, multilineVars, tune); + + // Take care of whatever line endings come our way + strTune = abc_common.gsub(strTune, '\r\n', '\n'); + strTune = abc_common.gsub(strTune, '\r', '\n'); + strTune += '\n'; // Tacked on temporarily to make the last line continuation work + strTune = strTune.replace(/\n\\.*\n/g, "\n"); // get rid of latex commands. + var continuationReplacement = function(all, backslash, comment){ + var spaces = " "; + var padding = comment ? spaces.substring(0, comment.length) : ""; + return backslash + " \x12" + padding; + }; + strTune = strTune.replace(/\\([ \t]*)(%.*)*\n/g, continuationReplacement); // take care of line continuations right away, but keep the same number of characters + var lines = strTune.split('\n'); + if (abc_common.last(lines).length === 0) // remove the blank line we added above. + lines.pop(); + try { + if (switches.format) { + abc_parse_directive.globalFormatting(switches.format); + } + abc_common.each(lines, function(line) { + if (switches.header_only && multilineVars.is_in_header === false) + throw "normal_abort"; + if (switches.stop_on_warning && multilineVars.warnings) + throw "normal_abort"; + if (multilineVars.is_in_history) { + if (line.charAt(1) === ':') { + multilineVars.is_in_history = false; + parseLine(line); + } else + tune.addMetaText("history", tokenizer.translateString(tokenizer.stripComment(line))); + } else if (multilineVars.inTextBlock) { + if (abc_common.startsWith(line, "%%endtext")) { + //tune.addMetaText("textBlock", multilineVars.textBlock); + tune.addText(multilineVars.textBlock); + multilineVars.inTextBlock = false; + } + else { + if (abc_common.startsWith(line, "%%")) + multilineVars.textBlock += ' ' + line.substring(2); + else + multilineVars.textBlock += ' ' + line; + } + } else if (multilineVars.inPsBlock) { + if (abc_common.startsWith(line, "%%endps")) { + // Just ignore postscript + multilineVars.inPsBlock = false; + } + else + multilineVars.textBlock += ' ' + line; + } else + parseLine(line); + multilineVars.iChar += line.length + 1; + }); + var ph = 11*72; + var pl = 8.5*72; + switch (multilineVars.papersize) { + //case "letter": ph = 11*72; pl = 8.5*72; break; + case "legal": ph = 14*72; pl = 8.5*72; break; + case "A4": ph = 11.7*72; pl = 8.3*72; break; + } + if (multilineVars.landscape) { + var x = ph; + ph = pl; + pl = x; + } + multilineVars.openSlurs = tune.cleanUp(pl, ph, multilineVars.barsperstaff, multilineVars.staffnonote, multilineVars.openSlurs); + } catch (err) { + if (err !== "normal_abort") + throw err; + } + if (switches.hint_measures) { + addHintMeasures(); + } + + wrap_lines.wrapLines(tune, multilineVars.lineBreaks); + }; +}; + +var abc_parse = Parse; + +// abc_tunebook.js: splits a string representing ABC Music Notation into individual tunes. +// Copyright (C) 2010-2018 Paul Rosen (paul at paulrosen dot net) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +/*global document */ +/*global window, ABCJS, console */ + + + + +var tunebook = {}; + +(function() { + + tunebook.numberOfTunes = function(abc) { + var tunes = abc.split("\nX:"); + var num = tunes.length; + if (num === 0) num = 1; + return num; + }; + + var TuneBook = tunebook.TuneBook = function(book) { + var This = this; + var directives = ""; + book = abc_common.strip(book); + var tunes = book.split("\nX:"); + for (var i = 1; i < tunes.length; i++) // Put back the X: that we lost when splitting the tunes. + tunes[i] = "X:" + tunes[i]; + // Keep track of the character position each tune starts with. + var pos = 0; + This.tunes = []; + abc_common.each(tunes, function(tune) { + This.tunes.push({ abc: tune, startPos: pos}); + pos += tune.length + 1; // We also lost a newline when splitting, so count that. + }); + if (This.tunes.length > 1 && !abc_common.startsWith(This.tunes[0].abc, 'X:')) { // If there is only one tune, the X: might be missing, otherwise assume the top of the file is "intertune" + // There could be file-wide directives in this, if so, we need to insert it into each tune. We can probably get away with + // just looking for file-wide directives here (before the first tune) and inserting them at the bottom of each tune, since + // the tune is parsed all at once. The directives will be seen before the engraver begins processing. + var dir = This.tunes.shift(); + var arrDir = dir.abc.split('\n'); + abc_common.each(arrDir, function(line) { + if (abc_common.startsWith(line, '%%')) + directives += line + '\n'; + }); + } + This.header = directives; + + // Now, the tune ends at a blank line, so truncate it if needed. There may be "intertune" stuff. + abc_common.each(This.tunes, function(tune) { + var end = tune.abc.indexOf('\n\n'); + if (end > 0) + tune.abc = tune.abc.substring(0, end); + tune.pure = tune.abc; + tune.abc = directives + tune.abc; + + // for the user's convenience, parse and store the title separately. The title is between the first T: and the next \n + var title = tune.pure.split("T:"); + if (title.length > 1) { + title = title[1].split("\n"); + tune.title = title[0].replace(/^\s+|\s+$/g, ''); + } else + tune.title = ""; + + // for the user's convenience, parse and store the id separately. The id is between the first X: and the next \n + var id = tune.pure.substring(2, tune.pure.indexOf("\n")); + tune.id = id.replace(/^\s+|\s+$/g, ''); + }); + }; + + TuneBook.prototype.getTuneById = function(id) { + for (var i = 0; i < this.tunes.length; i++) { + if (this.tunes[i].id === ''+id) + return this.tunes[i]; + } + return null; + }; + + TuneBook.prototype.getTuneByTitle = function(title) { + for (var i = 0; i < this.tunes.length; i++) { + if (this.tunes[i].title === title) + return this.tunes[i]; + } + return null; + }; + + tunebook.parseOnly = function(abc, params) { + var numTunes = tunebook.numberOfTunes(abc); + + // this just needs to be passed in because this tells the engine how many tunes to process. + var output = []; + for (var i = 0; i < numTunes; i++) { + output.push(1); + } + function callback() { + // Don't need to do anything with the parsed tunes. + } + return tunebook.renderEngine(callback, output, abc, params); + }; + + tunebook.renderEngine = function (callback, output, abc, params) { + var ret = []; + var isArray = function(testObject) { + return testObject && !(testObject.propertyIsEnumerable('length')) && typeof testObject === 'object' && typeof testObject.length === 'number'; + }; + + // check and normalize input parameters + if (output === undefined || abc === undefined) + return; + if (!isArray(output)) + output = [ output ]; + if (params === undefined) + params = {}; + var currentTune = params.startingTune ? parseInt(params.startingTune, 10) : 0; + + // parse the abc string + var book = new TuneBook(abc); + var abcParser = new abc_parse(); + + // output each tune, if it exists. Otherwise clear the div. + for (var i = 0; i < output.length; i++) { + var div = output[i]; + if (div === "*") ; else if (typeof(div) === "string") + div = document.getElementById(div); + if (div) { + if (currentTune >= 0 && currentTune < book.tunes.length) { + abcParser.parse(book.tunes[currentTune].abc, params, book.tunes[currentTune].startPos - book.header.length); + var tune = abcParser.getTune(); + var override = callback(div, tune, i, book.tunes[currentTune].abc); + ret.push(override ? override : tune); + } else { + if (div.hasOwnProperty('innerHTML')) + div.innerHTML = ""; + } + } + currentTune++; + } + return ret; + }; + + tunebook.extractMeasures = function(abc) { + var tunes = []; + var book = new TuneBook(abc); + for (var i = 0; i < book.tunes.length; i++) { + var tune = book.tunes[i]; + var arr = tune.abc.split("K:"); + var arr2 = arr[1].split("\n"); + var header = arr[0] + "K:" + arr2[0] + "\n"; + var lastChord = null; + var measureStartChord = null; + var fragStart = null; + var measures = []; + var hasNotes = false; + var tuneObj = tunebook.parseOnly(tune.abc)[0]; + var hasPickup = tuneObj.getPickupLength() > 0; + // var staves = flattenTune(tuneObj); + // for (var s = 0; s < staves.length; s++) { + // var voices = measuresParser(staves[s], tune); + // if (s === 0) + // measures = voices; + // else { + // for (var ss = 0; ss < voices.length; ss++) { + // var voice = voices[ss]; + // if (measures.length <= ss) + // measures.push([]); + // var measureVoice = measures[ss]; + // for (var sss = 0; sss < voice.length; sss++) { + // if (measureVoice.length > sss) + // measureVoice[sss].abc += "\n" + voice[sss].abc; + // else + // measures.push(voice[sss]); + // } + // } + // } + // console.log(voices); + // } + // measures = measures[0]; + + for (var j = 0; j < tuneObj.lines.length; j++) { + var line = tuneObj.lines[j]; + if (line.staff) { + for (var k = 0; k < 1 /*line.staff.length*/; k++) { + var staff = line.staff[k]; + for (var kk = 0; kk < 1 /*staff.voices.length*/; kk++) { + var voice = staff.voices[kk]; + for (var kkk = 0; kkk < voice.length; kkk++) { + var elem = voice[kkk]; + if (fragStart === null && elem.startChar >= 0) { + fragStart = elem.startChar; + if (elem.chord === undefined) + measureStartChord = lastChord; + else + measureStartChord = null; + } + if (elem.chord) + lastChord = elem; + if (elem.el_type === 'bar') { + if (hasNotes) { + var frag = tune.abc.substring(fragStart, elem.endChar); + var measure = {abc: frag}; + lastChord = measureStartChord && measureStartChord.chord && measureStartChord.chord.length > 0 ? measureStartChord.chord[0].name : null; + if (lastChord) + measure.lastChord = lastChord; + if (elem.startEnding) + measure.startEnding = elem.startEnding; + if (elem.endEnding) + measure.endEnding = elem.endEnding; + measures.push(measure); + fragStart = null; + hasNotes = false; + } + } else if (elem.el_type === 'note') { + hasNotes = true; + } + } + } + } + } + } + tunes.push({ + header: header, + measures: measures, + hasPickup: hasPickup + }); + } + return tunes; + }; +})(); + +var abc_tunebook = tunebook; + +// abc_absolute_element.js: Definition of the AbsoluteElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +// duration - actual musical duration - different from notehead duration in triplets. refer to abcelem to get the notehead duration +// minspacing - spacing which must be taken on top of the width defined by the duration +// type is a meta-type for the element. It is not necessary for drawing, but it is useful to make semantic sense of the element. For instance, it can be used in the element's class name. +var AbsoluteElement = function AbsoluteElement(abcelem, duration, minspacing, type, tuneNumber, options) { + //console.log("Absolute:",abcelem, type); + if (!options) + options = {}; + this.tuneNumber = tuneNumber; + this.abcelem = abcelem; + this.duration = duration; + this.durationClass = options.durationClassOveride ? options.durationClassOveride : this.duration; + this.minspacing = minspacing || 0; + this.x = 0; + this.children = []; + this.heads = []; + this.extra = []; + this.extraw = 0; + //this.decs = []; + this.w = 0; + this.right = []; + this.invisible = false; + this.bottom = undefined; + this.top = undefined; + this.type = type; + // these are the heights of all of the vertical elements that can't be placed until the end of the line. + // the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric + // the vertical order of elements that are below is: lyric, chord, volume/dynamic + this.specialY = { + tempoHeightAbove: 0, + partHeightAbove: 0, + volumeHeightAbove: 0, + dynamicHeightAbove: 0, + endingHeightAbove: 0, + chordHeightAbove: 0, + lyricHeightAbove: 0, + + lyricHeightBelow: 0, + chordHeightBelow: 0, + volumeHeightBelow: 0, + dynamicHeightBelow: 0 + }; +}; + +// For each of the relative elements that can't be placed in advance (because their vertical placement depends on everything +// else on the line), this iterates through them and sets their pitch. By the time this is called, specialYResolved contains a +// hash with the vertical placement (in pitch units) for each type. +// TODO-PER: I think this needs to be separated by "above" and "below". How do we know that for dynamics at the point where they are being defined, though? We need a pass through all the relative elements to set "above" and "below". +AbsoluteElement.prototype.setUpperAndLowerElements = function(specialYResolved) { + // specialYResolved contains the actual pitch for each of the classes of elements. + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + for (var key in this.specialY) { // for each class of element that needs to be placed vertically + if (this.specialY.hasOwnProperty(key)) { + if (child[key]) { // If this relative element has defined a height for this class of element + child.pitch = specialYResolved[key]; + if (child.top === undefined) { // TODO-PER: HACK! Not sure this is the right place to do this. + child.setUpperAndLowerElements(specialYResolved); + this.pushTop(child.top); + this.pushBottom(child.bottom); + } + } + } + } + } +}; + +AbsoluteElement.prototype.getMinWidth = function () { // absolute space taken to the right of the note + return this.w; +}; + +AbsoluteElement.prototype.getExtraWidth = function () { // space needed to the left of the note + return -this.extraw; +}; + +AbsoluteElement.prototype.addExtra = function (extra) { + if (extra.dxthis.w) this.w = right.dx+right.w; + this.right[this.right.length] = right; + this.addChild(right); +}; + +AbsoluteElement.prototype.addCentered = function (elem) { + var half = elem.w/2; + if (-halfthis.w) this.w = elem.dx+half; + this.right[this.right.length] = elem; + this.addChild(elem); +}; + +AbsoluteElement.prototype.setLimit = function(member, child) { + if (!child[member]) return; + if (!this.specialY[member]) + this.specialY[member] = child[member]; + else + this.specialY[member] = Math.max(this.specialY[member], child[member]); +}; + +AbsoluteElement.prototype.addChild = function (child) { + //console.log("Relative:",child); + child.parent = this; + this.children[this.children.length] = child; + this.pushTop(child.top); + this.pushBottom(child.bottom); + this.setLimit('tempoHeightAbove', child); + this.setLimit('partHeightAbove', child); + this.setLimit('volumeHeightAbove', child); + this.setLimit('dynamicHeightAbove', child); + this.setLimit('endingHeightAbove', child); + this.setLimit('chordHeightAbove', child); + this.setLimit('lyricHeightAbove', child); + this.setLimit('lyricHeightBelow', child); + this.setLimit('chordHeightBelow', child); + this.setLimit('volumeHeightBelow', child); + this.setLimit('dynamicHeightBelow', child); +}; + +AbsoluteElement.prototype.pushTop = function (top) { + if (top !== undefined) { + if (this.top === undefined) + this.top = top; + else + this.top = Math.max(top, this.top); + } +}; + +AbsoluteElement.prototype.pushBottom = function (bottom) { + if (bottom !== undefined) { + if (this.bottom === undefined) + this.bottom = bottom; + else + this.bottom = Math.min(bottom, this.bottom); + } +}; + +AbsoluteElement.prototype.setX = function (x) { + this.x = x; + for (var i=0; i 0) { + if (kls.length > 0 && kls.charAt(kls.length - 1) !== ' ') kls += " "; + kls += addClass; + } + el.setAttribute("class", kls); + } +}; + +AbsoluteElement.prototype.highlight = function (klass, color) { + if (klass === undefined) + klass = "abcjs-note_selected"; + if (color === undefined) + color = "#ff0000"; + this.setClass(klass, "", color); +}; + +AbsoluteElement.prototype.unhighlight = function (klass, color) { + if (klass === undefined) + klass = "abcjs-note_selected"; + if (color === undefined) + color = "#000000"; + this.setClass("", klass, color); +}; + +var abc_absolute_element = AbsoluteElement; + +// abc_relative_element.js: Definition of the RelativeElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) { + opt = opt || {}; + this.x = 0; + this.c = c; // character or path or string + this.dx = dx; // relative x position + this.w = w; // minimum width taken up by this element (can include gratuitous space) + this.pitch = pitch; // relative y position by pitch + this.scalex = opt.scalex || 1; // should the character/path be scaled? + this.scaley = opt.scaley || 1; // should the character/path be scaled? + this.type = opt.type || "symbol"; // cheap types. + this.pitch2 = opt.pitch2; + this.linewidth = opt.linewidth; + this.klass = opt.klass; + this.top = pitch; + if (this.pitch2 !== undefined && this.pitch2 > this.top) this.top = this.pitch2; + this.bottom = pitch; + if (this.pitch2 !== undefined && this.pitch2 < this.bottom) this.bottom = this.pitch2; + if (opt.thickness) { + this.top += opt.thickness/2; + this.bottom -= opt.thickness/2; + } + if (opt.stemHeight) { + if (opt.stemHeight > 0) + this.top += opt.stemHeight; + else + this.bottom += opt.stemHeight; + } + //if (this.type === "symbol") { + // var offset = glyphs.getYCorr(this.c); + // this.top += offset; + // this.bottom += offset; + //} + this.height = opt.height ? opt.height : 4; // The +1 is to give a little bit of padding. + this.centerVertically = false; + switch (this.type) { + case "debug": + this.chordHeightAbove = this.height; + break; + case "lyric": + if (opt.position && opt.position === 'below') + this.lyricHeightBelow = this.height; + else + this.lyricHeightAbove = this.height; + break; + case "chord": + if (opt.position && opt.position === 'below') + this.chordHeightBelow = this.height; + else + this.chordHeightAbove = this.height; + break; + case "text": + if (this.pitch === undefined) { + if (opt.position && opt.position === 'below') + this.chordHeightBelow = this.height; + else + this.chordHeightAbove = this.height; + } else + this.centerVertically = true; + break; + case "part": this.partHeightAbove = this.height; break; + } +}; + +RelativeElement.prototype.setX = function (x) { + this.x = x+this.dx; +}; + +RelativeElement.prototype.setUpperAndLowerElements = function(positionY) { + switch(this.type) { + case "part": + this.top = positionY.partHeightAbove + this.height; + this.bottom = positionY.partHeightAbove; + break; + case "text": + case "chord": + if (this.chordHeightAbove) { + this.top = positionY.chordHeightAbove; + this.bottom = positionY.chordHeightAbove; + } else { + this.top = positionY.chordHeightBelow; + this.bottom = positionY.chordHeightBelow; + } + break; + case "lyric": + if (this.lyricHeightAbove) { + this.top = positionY.lyricHeightAbove; + this.bottom = positionY.lyricHeightAbove; + } else { + this.top = positionY.lyricHeightBelow; + this.bottom = positionY.lyricHeightBelow; + } + break; + case "debug": + this.top = positionY.chordHeightAbove; + this.bottom = positionY.chordHeightAbove; + break; + } + if (this.pitch === undefined || this.top === undefined) + window.console.error("RelativeElement position not set.", this.type, this.pitch, this.top, positionY); +}; + +RelativeElement.prototype.draw = function (renderer, bartop) { + if (this.pitch === undefined) + window.console.error(this.type + " Relative Element y-coordinate not set."); + var y = renderer.calcY(this.pitch); + switch(this.type) { + case "symbol": + if (this.c===null) return null; + var klass = "symbol"; + if (this.klass) klass += " " + this.klass; + this.graphelem = renderer.printSymbol(this.x, this.pitch, this.c, this.scalex, this.scaley, renderer.addClasses(klass)); break; + case "debug": + this.graphelem = renderer.renderText(this.x, renderer.calcY(15), ""+this.c, "debugfont", 'debug-msg', 'start'); break; + case "barNumber": + this.graphelem = renderer.renderText(this.x, y, ""+this.c, "measurefont", 'bar-number', "middle"); + break; + case "lyric": + this.graphelem = renderer.renderText(this.x, y, this.c, "vocalfont", 'lyric', "middle"); + break; + case "chord": + this.graphelem = renderer.renderText(this.x, y, this.c, 'gchordfont', "chord", "middle"); + break; + case "decoration": + this.graphelem = renderer.renderText(this.x, y, this.c, 'annotationfont', "annotation", "middle", true); + break; + case "text": + this.graphelem = renderer.renderText(this.x, y, this.c, 'annotationfont', "annotation", "start", this.centerVertically); + break; + case "multimeasure-text": + this.graphelem = renderer.renderText(this.x+this.w/2, y, this.c, 'tempofont', "rest", "middle", false); + break; + case "part": + this.graphelem = renderer.renderText(this.x, y, this.c, 'partsfont', "part", "start"); + break; + case "bar": + this.graphelem = renderer.printStem(this.x, this.linewidth, y, (bartop)?bartop:renderer.calcY(this.pitch2)); break; // bartop can't be 0 + case "stem": + this.graphelem = renderer.printStem(this.x, this.linewidth, y, renderer.calcY(this.pitch2)); break; + case "ledger": + this.graphelem = renderer.printStaveLine(this.x, this.x+this.w, this.pitch); break; + } + if (this.scalex!==1 && this.graphelem) { + renderer.scaleExistingElem(this.graphelem, this.scalex, this.scaley, this.x, y); + } + return this.graphelem; +}; + +var abc_relative_element = RelativeElement; + +// abc_beam_element.js: Definition of the BeamElem class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + +var getDurlog = function(duration) { + // TODO-PER: This is a hack to prevent a Chrome lockup. Duration should have been defined already, + // but there's definitely a case where it isn't. [Probably something to do with triplets.] + if (duration === undefined) { + return 0; + } +// console.log("getDurlog: " + duration); + return Math.floor(Math.log(duration)/Math.log(2)); +}; + + +// Most elements on the page are related to a particular absolute element -- notes, rests, bars, etc. Beams, however, span multiple elements. +// This means that beams can't be laid out until the absolute elements are placed. There is the further complication that the stems for beamed +// notes can't be laid out until the beams are because we don't know how long they will be until we know the slope of the beam and the horizontal +// spacing of the absolute elements. +// +// So, when a beam is detected, a BeamElem is created, then all notes belonging to that beam are added to it. These notes are not given stems at that time. +// Then, after the horizontal layout is complete, all of the BeamElem are iterated to set the beam position, then all of the notes that are beamed are given +// stems. After that, we are ready for the drawing step. + +// There are three phases: the setup phase, when new elements are being discovered, the layout phase, when everything is calculated, and the drawing phase, +// when the object is not changed, but is used to put the elements on the page. + +var BeamElem; + +(function() { + + // + // Setup phase + // + BeamElem = function BeamElem(stemHeight, type, flat) { + // type is "grace", "up", "down", or undefined. flat is used to force flat beams, as it commonly found in the grace notes of bagpipe music. + this.isflat = flat; + this.isgrace = (type && type === "grace"); + this.forceup = this.isgrace || (type && type === "up"); + this.forcedown = (type && type === "down"); + this.elems = []; // all the AbsoluteElements that this beam touches. It may include embedded rests. + this.total = 0; + this.allrests = true; + this.stemHeight = stemHeight; + this.beams = []; // During the layout phase, this will become a list of the beams that need to be drawn. + }; + + BeamElem.prototype.setHint = function () { + this.hint = true; + }; + + BeamElem.prototype.add = function(abselem) { + var pitch = abselem.abcelem.averagepitch; + if (pitch === undefined) return; // don't include elements like spacers in beams + this.allrests = this.allrests && abselem.abcelem.rest; + abselem.beam = this; + this.elems.push(abselem); + //var pitch = abselem.abcelem.averagepitch; + this.total += pitch; // TODO CHORD (get pitches from abselem.heads) + if (this.min === undefined || abselem.abcelem.minpitch < this.min) { + this.min = abselem.abcelem.minpitch; + } + if (this.max === undefined || abselem.abcelem.maxpitch > this.max) { + this.max = abselem.abcelem.maxpitch; + } + }; + + var middleLine = 6; // hardcoded 6 is B + + BeamElem.prototype.calcDir = function() { + if (this.forceup) return true; + if (this.forcedown) return false; + var average = calcAverage(this.total, this.elems.length); + return average < middleLine; + }; + + // + // layout phase + // + BeamElem.prototype.layout = function() { + if (this.elems.length === 0 || this.allrests) return; + + this.stemsUp = this.calcDir(); // True means the stems are facing up. + var dy = calcDy(this.stemsUp, this.isgrace); // This is the width of the beam line. + + // create the main beam + var firstElement = this.elems[0]; + var lastElement = this.elems[this.elems.length - 1]; + var minStemHeight = 0; // The following is to leave space for "!///!" marks. + var referencePitch = this.stemsUp ? firstElement.abcelem.maxpitch : firstElement.abcelem.minpitch; + minStemHeight = minStem(firstElement, this.stemsUp, referencePitch, minStemHeight); + minStemHeight = minStem(lastElement, this.stemsUp, referencePitch, minStemHeight); + minStemHeight = Math.max(this.stemHeight, minStemHeight + 3); // TODO-PER: The 3 is the width of a 16th beam. The actual height of the beam should be used instead. + var yPos = calcYPos(this.total, this.elems.length, minStemHeight, this.stemsUp, firstElement.abcelem.averagepitch, lastElement.abcelem.averagepitch, this.isflat, this.min, this.max, this.isgrace); + var xPos = calcXPos(this.stemsUp, firstElement, lastElement); + this.beams.push({ startX: xPos[0], endX: xPos[1], startY: yPos[0], endY: yPos[1], dy: dy }); + + // create the rest of the beams (in the case of 1/16th notes, etc. + var beams = createAdditionalBeams(this.elems, this.stemsUp, this.beams[0], this.isgrace, dy); + for (var i = 0; i < beams.length; i++) + this.beams.push(beams[i]); + + // Now that the main beam is defined, we know how tall the stems should be, so create them and attach them to the original notes. + createStems(this.elems, this.stemsUp, this.beams[0], dy, this.mainNote); + }; + + BeamElem.prototype.isAbove = function() { + return this.stemsUp; + }; + + // We can't just use the entire beam for the calculation. The range has to be passed in, because the beam might extend into some unrelated notes. for instance, (3_a'f'e'f'2 when L:16 + BeamElem.prototype.heightAtMidpoint = function(startX, endX) { + if (this.beams.length === 0) + return 0; + var beam = this.beams[0]; + var midPoint = startX + (endX - startX) / 2; + return getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, midPoint); + }; + + BeamElem.prototype.yAtNote = function(element) { + var beam = this.beams[0]; + return getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, element.x); + }; + + BeamElem.prototype.xAtMidpoint = function(startX, endX) { + return startX + (endX - startX)/2; + }; + + // + // Drawing phase + // + BeamElem.prototype.draw = function(renderer) { + if (this.beams.length === 0) return; + + renderer.beginGroup(); + for (var i = 0; i < this.beams.length; i++) { + var beam = this.beams[i]; + drawBeam(renderer, beam.startX, beam.startY, beam.endX, beam.endY, beam.dy, this.hint); + } + renderer.endGroup('beam-elem'); + }; + + // + // private functions + // + function minStem(element, stemsUp, referencePitch, minStemHeight) { + if (!element.children) + return minStemHeight; + for (var i = 0; i < element.children.length; i++) { + var elem = element.children[i]; + if (stemsUp && elem.top !== undefined && elem.c === "flags.ugrace") + minStemHeight = Math.max(minStemHeight, elem.top - referencePitch); + else if (!stemsUp && elem.bottom !== undefined && elem.c === "flags.ugrace") + minStemHeight = Math.max(minStemHeight, referencePitch - elem.bottom + 7); // The extra 7 is because we are measuring the slash from the top. + } + return minStemHeight; + } + + function calcSlant(leftAveragePitch, rightAveragePitch, numStems, isFlat) { + if (isFlat) + return 0; + var slant = leftAveragePitch - rightAveragePitch; + var maxSlant = numStems / 2; + + if (slant > maxSlant) slant = maxSlant; + if (slant < -maxSlant) slant = -maxSlant; + return slant; + } + + function calcAverage(total, numElements) { + if (!numElements) + return 0; + return total / numElements; + } + + function getBarYAt(startx, starty, endx, endy, x) { + return starty + (endy - starty) / (endx - startx) * (x - startx); + } + + function calcDy(asc, isGrace) { + var dy = (asc) ? abc_spacing.STEP : -abc_spacing.STEP; + if (isGrace) dy = dy * 0.4; + return dy; + } + + function drawBeam(renderer, startX, startY, endX, endY, dy, isHint) { + var klass = 'beam-elem'; + if (isHint) + klass += " abcjs-hint"; + + // the X coordinates are actual coordinates, but the Y coordinates are in pitches. + startY = renderer.calcY(startY); + endY = renderer.calcY(endY); + var pathString = "M" + startX + " " + startY + " L" + endX + " " + endY + + "L" + endX + " " + (endY + dy) + " L" + startX + " " + (startY + dy) + "z"; + renderer.printPath({ + path: pathString, + stroke: "none", + fill: "#000000", + 'class': renderer.addClasses(klass) + }); + } + + function calcXPos(asc, firstElement, lastElement) { + var starthead = firstElement.heads[asc ? 0 : firstElement.heads.length - 1]; + var endhead = lastElement.heads[asc ? 0 : lastElement.heads.length - 1]; + var startX = starthead.x; + if (asc) startX += starthead.w - 0.6; + var endX = endhead.x; + if (asc) endX += endhead.w; + return [ startX, endX ]; + } + + function calcYPos(total, numElements, stemHeight, asc, firstAveragePitch, lastAveragePitch, isFlat, minPitch, maxPitch, isGrace) { + var average = calcAverage(total, numElements); // This is the average pitch for the all the notes that will be beamed. + var barpos = stemHeight - 2; // (isGrace)? 5:7; + var barminpos = stemHeight - 2; + var pos = Math.round(asc ? Math.max(average + barpos, maxPitch + barminpos) : Math.min(average - barpos, minPitch - barminpos)); + + var slant = calcSlant(firstAveragePitch, lastAveragePitch, numElements, isFlat); + var startY = pos + Math.floor(slant / 2); + var endY = pos + Math.floor(-slant / 2); + + // If the notes are too high or too low, make the beam go down to the middle + if (!isGrace) { + if (asc && pos < 6) { + startY = 6; + endY = 6; + } else if (!asc && pos > 6) { + startY = 6; + endY = 6; + } + } + + return [ startY, endY]; + } + + function createStems(elems, asc, beam, dy, mainNote) { + for (var i = 0; i < elems.length; i++) { + var elem = elems[i]; + if (elem.abcelem.rest) + continue; + // TODO-PER: This is odd. If it is a regular beam then elems is an array of AbsoluteElements, if it is a grace beam then it is an array of objects , so we directly attach the element to the parent. We tell it if is a grace note because they are passed in as a generic object instead of an AbsoluteElement. + var isGrace = elem.addExtra ? false : true; + var parent = isGrace ? mainNote : elem; + var furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1]; + var ovalDelta = 1 / 5;//(isGrace)?1/3:1/5; + var pitch = furthestHead.pitch + ((asc) ? ovalDelta : -ovalDelta); + var dx = asc ? furthestHead.w : 0; // down-pointing stems start on the left side of the note, up-pointing stems start on the right side, so we offset by the note width. + var x = furthestHead.x + dx; // this is now the actual x location in pixels. + var bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x); + var lineWidth = (asc) ? -0.6 : 0.6; + if (!asc) + bary -= (dy / 2) / abc_spacing.STEP; // TODO-PER: This is just a fudge factor so the down-pointing stems don't overlap. + if (isGrace) + dx += elem.heads[0].dx; + // TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated: + if (furthestHead.c === 'noteheads.slash.quarter') { + if (asc) + pitch += 1; + else + pitch -= 1; + } + var stem = new abc_relative_element(null, dx, 0, pitch, { + "type": "stem", + "pitch2": bary, + linewidth: lineWidth + }); + stem.setX(parent.x); // This is after the x coordinates were set, so we have to set it directly. + parent.addExtra(stem); + } + + } + + function createAdditionalBeams(elems, asc, beam, isGrace, dy) { + var beams = []; + var auxBeams = []; // auxbeam will be {x, y, durlog, single} auxbeam[0] should match with durlog=-4 (16th) (j=-4-durlog) + for (var i = 0; i < elems.length; i++) { + var elem = elems[i]; + if (elem.abcelem.rest) + continue; + var furthestHead = elem.heads[(asc) ? 0 : elem.heads.length - 1]; + var x = furthestHead.x + ((asc) ? furthestHead.w : 0); + var bary = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, x); + + var sy = (asc) ? -1.5 : 1.5; + if (isGrace) sy = sy * 2 / 3; // This makes the second beam on grace notes closer to the first one. + var duration = elem.abcelem.duration; // get the duration via abcelem because of triplets + if (duration === 0) duration = 0.25; // if this is stemless, then we use quarter note as the duration. + for (var durlog = getDurlog(duration); durlog < -3; durlog++) { + if (auxBeams[-4 - durlog]) { + auxBeams[-4 - durlog].single = false; + } else { + auxBeams[-4 - durlog] = { + x: x + ((asc) ? -0.6 : 0), y: bary + sy * (-4 - durlog + 1), + durlog: durlog, single: true + }; + } + } + + for (var j = auxBeams.length - 1; j >= 0; j--) { + if (i === elems.length - 1 || getDurlog(elems[i + 1].abcelem.duration) > (-j - 4)) { + + var auxBeamEndX = x; + var auxBeamEndY = bary + sy * (j + 1); + + + if (auxBeams[j].single) { + auxBeamEndX = (i === 0) ? x + 5 : x - 5; + auxBeamEndY = getBarYAt(beam.startX, beam.startY, beam.endX, beam.endY, auxBeamEndX) + sy * (j + 1); + } + beams.push({ startX: auxBeams[j].x, endX: auxBeamEndX, startY: auxBeams[j].y, endY: auxBeamEndY, dy: dy }); + auxBeams = auxBeams.slice(0, j); + } + } + } + return beams; + } +})(); + +var abc_beam_element = BeamElem; + +// abc_brace_element.js: Definition of the BraceElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var BraceElem = function BraceElem() { + this.length = 1; +}; + +BraceElem.prototype.increaseStavesIncluded = function() { + this.length++; +}; + +BraceElem.prototype.setLocation = function(x) { + this.x = x; +}; + +BraceElem.prototype.getWidth = function() { + return 10; // TODO-PER: right now the drawing function doesn't vary the width at all. If it does in the future then this will change. +}; + +BraceElem.prototype.layout = function (renderer, top, bottom) { + this.startY = top; + this.endY = bottom; +}; + +BraceElem.prototype.draw = function (renderer, top, bottom) { + this.layout(renderer, top, bottom); + renderer.drawBrace(this.x,this.startY, this.endY); + +}; + +var abc_brace_element = BraceElem; + +/** + * Glyphs and some methods to adjust for their x and y baseline + */ + var glyphs = + {'0':{d:[['M',4.83,-14.97],['c',0.33,-0.03,1.11,0.00,1.47,0.06],['c',1.68,0.36,2.97,1.59,3.78,3.60],['c',1.20,2.97,0.81,6.96,-0.90,9.27],['c',-0.78,1.08,-1.71,1.71,-2.91,1.95],['c',-0.45,0.09,-1.32,0.09,-1.77,0.00],['c',-0.81,-0.18,-1.47,-0.51,-2.07,-1.02],['c',-2.34,-2.07,-3.15,-6.72,-1.74,-10.20],['c',0.87,-2.16,2.28,-3.42,4.14,-3.66],['z'],['m',1.11,0.87],['c',-0.21,-0.06,-0.69,-0.09,-0.87,-0.06],['c',-0.54,0.12,-0.87,0.42,-1.17,0.99],['c',-0.36,0.66,-0.51,1.56,-0.60,3.00],['c',-0.03,0.75,-0.03,4.59,0.00,5.31],['c',0.09,1.50,0.27,2.40,0.60,3.06],['c',0.24,0.48,0.57,0.78,0.96,0.90],['c',0.27,0.09,0.78,0.09,1.05,0.00],['c',0.39,-0.12,0.72,-0.42,0.96,-0.90],['c',0.33,-0.66,0.51,-1.56,0.60,-3.06],['c',0.03,-0.72,0.03,-4.56,0.00,-5.31],['c',-0.09,-1.47,-0.27,-2.37,-0.60,-3.03],['c',-0.24,-0.48,-0.54,-0.78,-0.93,-0.90],['z']],w:10.78,h:14.959}, + '1':{d:[['M',3.30,-15.06],['c',0.06,-0.06,0.21,-0.03,0.66,0.15],['c',0.81,0.39,1.08,0.39,1.83,0.03],['c',0.21,-0.09,0.39,-0.15,0.42,-0.15],['c',0.12,0.00,0.21,0.09,0.27,0.21],['c',0.06,0.12,0.06,0.33,0.06,5.94],['c',0.00,3.93,0.00,5.85,0.03,6.03],['c',0.06,0.36,0.15,0.69,0.27,0.96],['c',0.36,0.75,0.93,1.17,1.68,1.26],['c',0.30,0.03,0.39,0.09,0.39,0.30],['c',0.00,0.15,-0.03,0.18,-0.09,0.24],['c',-0.06,0.06,-0.09,0.06,-0.48,0.06],['c',-0.42,0.00,-0.69,-0.03,-2.10,-0.24],['c',-0.90,-0.15,-1.77,-0.15,-2.67,0.00],['c',-1.41,0.21,-1.68,0.24,-2.10,0.24],['c',-0.39,0.00,-0.42,0.00,-0.48,-0.06],['c',-0.06,-0.06,-0.06,-0.09,-0.06,-0.24],['c',0.00,-0.21,0.06,-0.27,0.36,-0.30],['c',0.75,-0.09,1.32,-0.51,1.68,-1.26],['c',0.12,-0.27,0.21,-0.60,0.27,-0.96],['c',0.03,-0.18,0.03,-1.59,0.03,-4.29],['c',0.00,-3.87,0.00,-4.05,-0.06,-4.14],['c',-0.09,-0.15,-0.18,-0.24,-0.39,-0.24],['c',-0.12,0.00,-0.15,0.03,-0.21,0.06],['c',-0.03,0.06,-0.45,0.99,-0.96,2.13],['c',-0.48,1.14,-0.90,2.10,-0.93,2.16],['c',-0.06,0.15,-0.21,0.24,-0.33,0.24],['c',-0.24,0.00,-0.42,-0.18,-0.42,-0.39],['c',0.00,-0.06,3.27,-7.62,3.33,-7.74],['z']],w:8.94,h:15.058}, + '2':{d:[['M',4.23,-14.97],['c',0.57,-0.06,1.68,0.00,2.34,0.18],['c',0.69,0.18,1.50,0.54,2.01,0.90],['c',1.35,0.96,1.95,2.25,1.77,3.81],['c',-0.15,1.35,-0.66,2.34,-1.68,3.15],['c',-0.60,0.48,-1.44,0.93,-3.12,1.65],['c',-1.32,0.57,-1.80,0.81,-2.37,1.14],['c',-0.57,0.33,-0.57,0.33,-0.24,0.27],['c',0.39,-0.09,1.26,-0.09,1.68,0.00],['c',0.72,0.15,1.41,0.45,2.10,0.90],['c',0.99,0.63,1.86,0.87,2.55,0.75],['c',0.24,-0.06,0.42,-0.15,0.57,-0.30],['c',0.12,-0.09,0.30,-0.42,0.30,-0.51],['c',0.00,-0.09,0.12,-0.21,0.24,-0.24],['c',0.18,-0.03,0.39,0.12,0.39,0.30],['c',0.00,0.12,-0.15,0.57,-0.30,0.87],['c',-0.54,1.02,-1.56,1.74,-2.79,2.01],['c',-0.42,0.09,-1.23,0.09,-1.62,0.03],['c',-0.81,-0.18,-1.32,-0.45,-2.01,-1.11],['c',-0.45,-0.45,-0.63,-0.57,-0.96,-0.69],['c',-0.84,-0.27,-1.89,0.12,-2.25,0.90],['c',-0.12,0.21,-0.21,0.54,-0.21,0.72],['c',0.00,0.12,-0.12,0.21,-0.27,0.24],['c',-0.15,0.00,-0.27,-0.03,-0.33,-0.15],['c',-0.09,-0.21,0.09,-1.08,0.33,-1.71],['c',0.24,-0.66,0.66,-1.26,1.29,-1.89],['c',0.45,-0.45,0.90,-0.81,1.92,-1.56],['c',1.29,-0.93,1.89,-1.44,2.34,-1.98],['c',0.87,-1.05,1.26,-2.19,1.20,-3.63],['c',-0.06,-1.29,-0.39,-2.31,-0.96,-2.91],['c',-0.36,-0.33,-0.72,-0.51,-1.17,-0.54],['c',-0.84,-0.03,-1.53,0.42,-1.59,1.05],['c',-0.03,0.33,0.12,0.60,0.57,1.14],['c',0.45,0.54,0.54,0.87,0.42,1.41],['c',-0.15,0.63,-0.54,1.11,-1.08,1.38],['c',-0.63,0.33,-1.20,0.33,-1.83,0.00],['c',-0.24,-0.12,-0.33,-0.18,-0.54,-0.39],['c',-0.18,-0.18,-0.27,-0.30,-0.36,-0.51],['c',-0.24,-0.45,-0.27,-0.84,-0.21,-1.38],['c',0.12,-0.75,0.45,-1.41,1.02,-1.98],['c',0.72,-0.72,1.74,-1.17,2.85,-1.32],['z']],w:10.764,h:14.97}, + '3':{d:[['M',3.78,-14.97],['c',0.30,-0.03,1.41,0.00,1.83,0.06],['c',2.22,0.30,3.51,1.32,3.72,2.91],['c',0.03,0.33,0.03,1.26,-0.03,1.65],['c',-0.12,0.84,-0.48,1.47,-1.05,1.77],['c',-0.27,0.15,-0.36,0.24,-0.45,0.39],['c',-0.09,0.21,-0.09,0.36,0.00,0.57],['c',0.09,0.15,0.18,0.24,0.51,0.39],['c',0.75,0.42,1.23,1.14,1.41,2.13],['c',0.06,0.42,0.06,1.35,0.00,1.71],['c',-0.18,0.81,-0.48,1.38,-1.02,1.95],['c',-0.75,0.72,-1.80,1.20,-3.18,1.38],['c',-0.42,0.06,-1.56,0.06,-1.95,0.00],['c',-1.89,-0.33,-3.18,-1.29,-3.51,-2.64],['c',-0.03,-0.12,-0.03,-0.33,-0.03,-0.60],['c',0.00,-0.36,0.00,-0.42,0.06,-0.63],['c',0.12,-0.30,0.27,-0.51,0.51,-0.75],['c',0.24,-0.24,0.45,-0.39,0.75,-0.51],['c',0.21,-0.06,0.27,-0.06,0.60,-0.06],['c',0.33,0.00,0.39,0.00,0.60,0.06],['c',0.30,0.12,0.51,0.27,0.75,0.51],['c',0.36,0.33,0.57,0.75,0.60,1.20],['c',0.00,0.21,0.00,0.27,-0.06,0.42],['c',-0.09,0.18,-0.12,0.24,-0.54,0.54],['c',-0.51,0.36,-0.63,0.54,-0.60,0.87],['c',0.06,0.54,0.54,0.90,1.38,0.99],['c',0.36,0.06,0.72,0.03,0.96,-0.06],['c',0.81,-0.27,1.29,-1.23,1.44,-2.79],['c',0.03,-0.45,0.03,-1.95,-0.03,-2.37],['c',-0.09,-0.75,-0.33,-1.23,-0.75,-1.44],['c',-0.33,-0.18,-0.45,-0.18,-1.98,-0.18],['c',-1.35,0.00,-1.41,0.00,-1.50,-0.06],['c',-0.18,-0.12,-0.24,-0.39,-0.12,-0.60],['c',0.12,-0.15,0.15,-0.15,1.68,-0.15],['c',1.50,0.00,1.62,0.00,1.89,-0.15],['c',0.18,-0.09,0.42,-0.36,0.54,-0.57],['c',0.18,-0.42,0.27,-0.90,0.30,-1.95],['c',0.03,-1.20,-0.06,-1.80,-0.36,-2.37],['c',-0.24,-0.48,-0.63,-0.81,-1.14,-0.96],['c',-0.30,-0.06,-1.08,-0.06,-1.38,0.03],['c',-0.60,0.15,-0.90,0.42,-0.96,0.84],['c',-0.03,0.30,0.06,0.45,0.63,0.84],['c',0.33,0.24,0.42,0.39,0.45,0.63],['c',0.03,0.72,-0.57,1.50,-1.32,1.65],['c',-1.05,0.27,-2.10,-0.57,-2.10,-1.65],['c',0.00,-0.45,0.15,-0.96,0.39,-1.38],['c',0.12,-0.21,0.54,-0.63,0.81,-0.81],['c',0.57,-0.42,1.38,-0.69,2.25,-0.81],['z']],w:9.735,h:14.967}, + '4':{d:[['M',8.64,-14.94],['c',0.27,-0.09,0.42,-0.12,0.54,-0.03],['c',0.09,0.06,0.15,0.21,0.15,0.30],['c',-0.03,0.06,-1.92,2.31,-4.23,5.04],['c',-2.31,2.73,-4.23,4.98,-4.26,5.01],['c',-0.03,0.06,0.12,0.06,2.55,0.06],['l',2.61,0.00],['l',0.00,-2.37],['c',0.00,-2.19,0.03,-2.37,0.06,-2.46],['c',0.03,-0.06,0.21,-0.18,0.57,-0.42],['c',1.08,-0.72,1.38,-1.08,1.86,-2.16],['c',0.12,-0.30,0.24,-0.54,0.27,-0.57],['c',0.12,-0.12,0.39,-0.06,0.45,0.12],['c',0.06,0.09,0.06,0.57,0.06,3.96],['l',0.00,3.90],['l',1.08,0.00],['c',1.05,0.00,1.11,0.00,1.20,0.06],['c',0.24,0.15,0.24,0.54,0.00,0.69],['c',-0.09,0.06,-0.15,0.06,-1.20,0.06],['l',-1.08,0.00],['l',0.00,0.33],['c',0.00,0.57,0.09,1.11,0.30,1.53],['c',0.36,0.75,0.93,1.17,1.68,1.26],['c',0.30,0.03,0.39,0.09,0.39,0.30],['c',0.00,0.15,-0.03,0.18,-0.09,0.24],['c',-0.06,0.06,-0.09,0.06,-0.48,0.06],['c',-0.42,0.00,-0.69,-0.03,-2.10,-0.24],['c',-0.90,-0.15,-1.77,-0.15,-2.67,0.00],['c',-1.41,0.21,-1.68,0.24,-2.10,0.24],['c',-0.39,0.00,-0.42,0.00,-0.48,-0.06],['c',-0.06,-0.06,-0.06,-0.09,-0.06,-0.24],['c',0.00,-0.21,0.06,-0.27,0.36,-0.30],['c',0.75,-0.09,1.32,-0.51,1.68,-1.26],['c',0.21,-0.42,0.30,-0.96,0.30,-1.53],['l',0.00,-0.33],['l',-2.70,0.00],['c',-2.91,0.00,-2.85,0.00,-3.09,-0.15],['c',-0.18,-0.12,-0.30,-0.39,-0.27,-0.54],['c',0.03,-0.06,0.18,-0.24,0.33,-0.45],['c',0.75,-0.90,1.59,-2.07,2.13,-3.03],['c',0.33,-0.54,0.84,-1.62,1.05,-2.16],['c',0.57,-1.41,0.84,-2.64,0.90,-4.05],['c',0.03,-0.63,0.06,-0.72,0.24,-0.81],['l',0.12,-0.06],['l',0.45,0.12],['c',0.66,0.18,1.02,0.24,1.47,0.27],['c',0.60,0.03,1.23,-0.09,2.01,-0.33],['z']],w:11.795,h:14.994}, + '5':{d:[['M',1.02,-14.94],['c',0.12,-0.09,0.03,-0.09,1.08,0.06],['c',2.49,0.36,4.35,0.36,6.96,-0.06],['c',0.57,-0.09,0.66,-0.06,0.81,0.06],['c',0.15,0.18,0.12,0.24,-0.15,0.51],['c',-1.29,1.26,-3.24,2.04,-5.58,2.31],['c',-0.60,0.09,-1.20,0.12,-1.71,0.12],['c',-0.39,0.00,-0.45,0.00,-0.57,0.06],['c',-0.09,0.06,-0.15,0.12,-0.21,0.21],['l',-0.06,0.12],['l',0.00,1.65],['l',0.00,1.65],['l',0.21,-0.21],['c',0.66,-0.57,1.41,-0.96,2.19,-1.14],['c',0.33,-0.06,1.41,-0.06,1.95,0.00],['c',2.61,0.36,4.02,1.74,4.26,4.14],['c',0.03,0.45,0.03,1.08,-0.03,1.44],['c',-0.18,1.02,-0.78,2.01,-1.59,2.70],['c',-0.72,0.57,-1.62,1.02,-2.49,1.20],['c',-1.38,0.27,-3.03,0.06,-4.20,-0.54],['c',-1.08,-0.54,-1.71,-1.32,-1.86,-2.28],['c',-0.09,-0.69,0.09,-1.29,0.57,-1.74],['c',0.24,-0.24,0.45,-0.39,0.75,-0.51],['c',0.21,-0.06,0.27,-0.06,0.60,-0.06],['c',0.33,0.00,0.39,0.00,0.60,0.06],['c',0.30,0.12,0.51,0.27,0.75,0.51],['c',0.36,0.33,0.57,0.75,0.60,1.20],['c',0.00,0.21,0.00,0.27,-0.06,0.42],['c',-0.09,0.18,-0.12,0.24,-0.54,0.54],['c',-0.18,0.12,-0.36,0.30,-0.42,0.33],['c',-0.36,0.42,-0.18,0.99,0.36,1.26],['c',0.51,0.27,1.47,0.36,2.01,0.27],['c',0.93,-0.21,1.47,-1.17,1.65,-2.91],['c',0.06,-0.45,0.06,-1.89,0.00,-2.31],['c',-0.15,-1.20,-0.51,-2.10,-1.05,-2.55],['c',-0.21,-0.18,-0.54,-0.36,-0.81,-0.39],['c',-0.30,-0.06,-0.84,-0.03,-1.26,0.06],['c',-0.93,0.18,-1.65,0.60,-2.16,1.20],['c',-0.15,0.21,-0.27,0.30,-0.39,0.30],['c',-0.15,0.00,-0.30,-0.09,-0.36,-0.18],['c',-0.06,-0.09,-0.06,-0.15,-0.06,-3.66],['c',0.00,-3.39,0.00,-3.57,0.06,-3.66],['c',0.03,-0.06,0.09,-0.15,0.15,-0.18],['z']],w:10.212,h:14.997}, + '6':{d:[['M',4.98,-14.97],['c',0.36,-0.03,1.20,0.00,1.59,0.06],['c',0.90,0.15,1.68,0.51,2.25,1.05],['c',0.57,0.51,0.87,1.23,0.84,1.98],['c',-0.03,0.51,-0.21,0.90,-0.60,1.26],['c',-0.24,0.24,-0.45,0.39,-0.75,0.51],['c',-0.21,0.06,-0.27,0.06,-0.60,0.06],['c',-0.33,0.00,-0.39,0.00,-0.60,-0.06],['c',-0.30,-0.12,-0.51,-0.27,-0.75,-0.51],['c',-0.39,-0.36,-0.57,-0.78,-0.57,-1.26],['c',0.00,-0.27,0.00,-0.30,0.09,-0.42],['c',0.03,-0.09,0.18,-0.21,0.30,-0.30],['c',0.12,-0.09,0.30,-0.21,0.39,-0.27],['c',0.09,-0.06,0.21,-0.18,0.27,-0.24],['c',0.06,-0.12,0.09,-0.15,0.09,-0.33],['c',0.00,-0.18,-0.03,-0.24,-0.09,-0.36],['c',-0.24,-0.39,-0.75,-0.60,-1.38,-0.57],['c',-0.54,0.03,-0.90,0.18,-1.23,0.48],['c',-0.81,0.72,-1.08,2.16,-0.96,5.37],['l',0.00,0.63],['l',0.30,-0.12],['c',0.78,-0.27,1.29,-0.33,2.10,-0.27],['c',1.47,0.12,2.49,0.54,3.27,1.29],['c',0.48,0.51,0.81,1.11,0.96,1.89],['c',0.06,0.27,0.06,0.42,0.06,0.93],['c',0.00,0.54,0.00,0.69,-0.06,0.96],['c',-0.15,0.78,-0.48,1.38,-0.96,1.89],['c',-0.54,0.51,-1.17,0.87,-1.98,1.08],['c',-1.14,0.30,-2.40,0.33,-3.24,0.03],['c',-1.50,-0.48,-2.64,-1.89,-3.27,-4.02],['c',-0.36,-1.23,-0.51,-2.82,-0.42,-4.08],['c',0.30,-3.66,2.28,-6.30,4.95,-6.66],['z'],['m',0.66,7.41],['c',-0.27,-0.09,-0.81,-0.12,-1.08,-0.06],['c',-0.72,0.18,-1.08,0.69,-1.23,1.71],['c',-0.06,0.54,-0.06,3.00,0.00,3.54],['c',0.18,1.26,0.72,1.77,1.80,1.74],['c',0.39,-0.03,0.63,-0.09,0.90,-0.27],['c',0.66,-0.42,0.90,-1.32,0.90,-3.24],['c',0.00,-2.22,-0.36,-3.12,-1.29,-3.42],['z']],w:9.956,h:14.982}, + '7':{d:[['M',0.21,-14.97],['c',0.21,-0.06,0.45,0.00,0.54,0.15],['c',0.06,0.09,0.06,0.15,0.06,0.39],['c',0.00,0.24,0.00,0.33,0.06,0.42],['c',0.06,0.12,0.21,0.24,0.27,0.24],['c',0.03,0.00,0.12,-0.12,0.24,-0.21],['c',0.96,-1.20,2.58,-1.35,3.99,-0.42],['c',0.15,0.12,0.42,0.30,0.54,0.45],['c',0.48,0.39,0.81,0.57,1.29,0.60],['c',0.69,0.03,1.50,-0.30,2.13,-0.87],['c',0.09,-0.09,0.27,-0.30,0.39,-0.45],['c',0.12,-0.15,0.24,-0.27,0.30,-0.30],['c',0.18,-0.06,0.39,0.03,0.51,0.21],['c',0.06,0.18,0.06,0.24,-0.27,0.72],['c',-0.18,0.24,-0.54,0.78,-0.78,1.17],['c',-2.37,3.54,-3.54,6.27,-3.87,9.00],['c',-0.03,0.33,-0.03,0.66,-0.03,1.26],['c',0.00,0.90,0.00,1.08,0.15,1.89],['c',0.06,0.45,0.06,0.48,0.03,0.60],['c',-0.06,0.09,-0.21,0.21,-0.30,0.21],['c',-0.03,0.00,-0.27,-0.06,-0.54,-0.15],['c',-0.84,-0.27,-1.11,-0.30,-1.65,-0.30],['c',-0.57,0.00,-0.84,0.03,-1.56,0.27],['c',-0.60,0.18,-0.69,0.21,-0.81,0.15],['c',-0.12,-0.06,-0.21,-0.18,-0.21,-0.30],['c',0.00,-0.15,0.60,-1.44,1.20,-2.61],['c',1.14,-2.22,2.73,-4.68,5.10,-8.01],['c',0.21,-0.27,0.36,-0.48,0.33,-0.48],['c',0.00,0.00,-0.12,0.06,-0.27,0.12],['c',-0.54,0.30,-0.99,0.39,-1.56,0.39],['c',-0.75,0.03,-1.20,-0.18,-1.83,-0.75],['c',-0.99,-0.90,-1.83,-1.17,-2.31,-0.72],['c',-0.18,0.15,-0.36,0.51,-0.45,0.84],['c',-0.06,0.24,-0.06,0.33,-0.09,1.98],['c',0.00,1.62,-0.03,1.74,-0.06,1.80],['c',-0.15,0.24,-0.54,0.24,-0.69,0.00],['c',-0.06,-0.09,-0.06,-0.15,-0.06,-3.57],['c',0.00,-3.42,0.00,-3.48,0.06,-3.57],['c',0.03,-0.06,0.09,-0.12,0.15,-0.15],['z']],w:10.561,h:15.093}, + '8':{d:[['M',4.98,-14.97],['c',0.33,-0.03,1.02,-0.03,1.32,0.00],['c',1.32,0.12,2.49,0.60,3.21,1.32],['c',0.39,0.39,0.66,0.81,0.78,1.29],['c',0.09,0.36,0.09,1.08,0.00,1.44],['c',-0.21,0.84,-0.66,1.59,-1.59,2.55],['l',-0.30,0.30],['l',0.27,0.18],['c',1.47,0.93,2.31,2.31,2.25,3.75],['c',-0.03,0.75,-0.24,1.35,-0.63,1.95],['c',-0.45,0.66,-1.02,1.14,-1.83,1.53],['c',-1.80,0.87,-4.20,0.87,-6.00,0.03],['c',-1.62,-0.78,-2.52,-2.16,-2.46,-3.66],['c',0.06,-0.99,0.54,-1.77,1.80,-2.97],['c',0.54,-0.51,0.54,-0.54,0.48,-0.57],['c',-0.39,-0.27,-0.96,-0.78,-1.20,-1.14],['c',-0.75,-1.11,-0.87,-2.40,-0.30,-3.60],['c',0.69,-1.35,2.25,-2.25,4.20,-2.40],['z'],['m',1.53,0.69],['c',-0.42,-0.09,-1.11,-0.12,-1.38,-0.06],['c',-0.30,0.06,-0.60,0.18,-0.81,0.30],['c',-0.21,0.12,-0.60,0.51,-0.72,0.72],['c',-0.51,0.87,-0.42,1.89,0.21,2.52],['c',0.21,0.21,0.36,0.30,1.95,1.23],['c',0.96,0.54,1.74,0.99,1.77,1.02],['c',0.09,0.00,0.63,-0.60,0.99,-1.11],['c',0.21,-0.36,0.48,-0.87,0.57,-1.23],['c',0.06,-0.24,0.06,-0.36,0.06,-0.72],['c',0.00,-0.45,-0.03,-0.66,-0.15,-0.99],['c',-0.39,-0.81,-1.29,-1.44,-2.49,-1.68],['z'],['m',-1.44,8.07],['l',-1.89,-1.08],['c',-0.03,0.00,-0.18,0.15,-0.39,0.33],['c',-1.20,1.08,-1.65,1.95,-1.59,3.00],['c',0.09,1.59,1.35,2.85,3.21,3.24],['c',0.33,0.06,0.45,0.06,0.93,0.06],['c',0.63,0.00,0.81,-0.03,1.29,-0.27],['c',0.90,-0.42,1.47,-1.41,1.41,-2.40],['c',-0.06,-0.66,-0.39,-1.29,-0.90,-1.65],['c',-0.12,-0.09,-1.05,-0.63,-2.07,-1.23],['z']],w:10.926,h:14.989}, + '9':{d:[['M',4.23,-14.97],['c',0.42,-0.03,1.29,0.00,1.62,0.06],['c',0.51,0.12,0.93,0.30,1.38,0.57],['c',1.53,1.02,2.52,3.24,2.73,5.94],['c',0.18,2.55,-0.48,4.98,-1.83,6.57],['c',-1.05,1.26,-2.40,1.89,-3.93,1.83],['c',-1.23,-0.06,-2.31,-0.45,-3.03,-1.14],['c',-0.57,-0.51,-0.87,-1.23,-0.84,-1.98],['c',0.03,-0.51,0.21,-0.90,0.60,-1.26],['c',0.24,-0.24,0.45,-0.39,0.75,-0.51],['c',0.21,-0.06,0.27,-0.06,0.60,-0.06],['c',0.33,0.00,0.39,0.00,0.60,0.06],['c',0.30,0.12,0.51,0.27,0.75,0.51],['c',0.39,0.36,0.57,0.78,0.57,1.26],['c',0.00,0.27,0.00,0.30,-0.09,0.42],['c',-0.03,0.09,-0.18,0.21,-0.30,0.30],['c',-0.12,0.09,-0.30,0.21,-0.39,0.27],['c',-0.09,0.06,-0.21,0.18,-0.27,0.24],['c',-0.06,0.12,-0.06,0.15,-0.06,0.33],['c',0.00,0.18,0.00,0.24,0.06,0.36],['c',0.24,0.39,0.75,0.60,1.38,0.57],['c',0.54,-0.03,0.90,-0.18,1.23,-0.48],['c',0.81,-0.72,1.08,-2.16,0.96,-5.37],['l',0.00,-0.63],['l',-0.30,0.12],['c',-0.78,0.27,-1.29,0.33,-2.10,0.27],['c',-1.47,-0.12,-2.49,-0.54,-3.27,-1.29],['c',-0.48,-0.51,-0.81,-1.11,-0.96,-1.89],['c',-0.06,-0.27,-0.06,-0.42,-0.06,-0.96],['c',0.00,-0.51,0.00,-0.66,0.06,-0.93],['c',0.15,-0.78,0.48,-1.38,0.96,-1.89],['c',0.15,-0.12,0.33,-0.27,0.42,-0.36],['c',0.69,-0.51,1.62,-0.81,2.76,-0.93],['z'],['m',1.17,0.66],['c',-0.21,-0.06,-0.57,-0.06,-0.81,-0.03],['c',-0.78,0.12,-1.26,0.69,-1.41,1.74],['c',-0.12,0.63,-0.15,1.95,-0.09,2.79],['c',0.12,1.71,0.63,2.40,1.77,2.46],['c',1.08,0.03,1.62,-0.48,1.80,-1.74],['c',0.06,-0.54,0.06,-3.00,0.00,-3.54],['c',-0.15,-1.05,-0.51,-1.53,-1.26,-1.68],['z']],w:9.959,h:14.986}, + 'rests.multimeasure':{d:[['M',0,-4],['l',0,16],['l',1,0],['l',0,-5],['l',40,0],['l',0,5],['l',1,0],['l',0,-16],['l',-1,0],['l',0,5],['l',-40,0],['l',0,-5],['z']],w:42,h:18}, + 'rests.whole':{d:[['M',0.06,0.03],['l',0.09,-0.06],['l',5.46,0.00],['l',5.49,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,2.19],['l',0.00,2.19],['l',-0.06,0.09],['l',-0.09,0.06],['l',-5.49,0.00],['l',-5.46,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-2.19],['l',0.00,-2.19],['z']],w:11.25,h:4.68}, + 'rests.half':{d:[['M',0.06,-4.62],['l',0.09,-0.06],['l',5.46,0.00],['l',5.49,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,2.19],['l',0.00,2.19],['l',-0.06,0.09],['l',-0.09,0.06],['l',-5.49,0.00],['l',-5.46,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-2.19],['l',0.00,-2.19],['z']],w:11.25,h:4.68}, + 'rests.quarter':{d:[['M',1.89,-11.82],['c',0.12,-0.06,0.24,-0.06,0.36,-0.03],['c',0.09,0.06,4.74,5.58,4.86,5.82],['c',0.21,0.39,0.15,0.78,-0.15,1.26],['c',-0.24,0.33,-0.72,0.81,-1.62,1.56],['c',-0.45,0.36,-0.87,0.75,-0.96,0.84],['c',-0.93,0.99,-1.14,2.49,-0.60,3.63],['c',0.18,0.39,0.27,0.48,1.32,1.68],['c',1.92,2.25,1.83,2.16,1.83,2.34],['c',0.00,0.18,-0.18,0.36,-0.36,0.39],['c',-0.15,0.00,-0.27,-0.06,-0.48,-0.27],['c',-0.75,-0.75,-2.46,-1.29,-3.39,-1.08],['c',-0.45,0.09,-0.69,0.27,-0.90,0.69],['c',-0.12,0.30,-0.21,0.66,-0.24,1.14],['c',-0.03,0.66,0.09,1.35,0.30,2.01],['c',0.15,0.42,0.24,0.66,0.45,0.96],['c',0.18,0.24,0.18,0.33,0.03,0.42],['c',-0.12,0.06,-0.18,0.03,-0.45,-0.30],['c',-1.08,-1.38,-2.07,-3.36,-2.40,-4.83],['c',-0.27,-1.05,-0.15,-1.77,0.27,-2.07],['c',0.21,-0.12,0.42,-0.15,0.87,-0.15],['c',0.87,0.06,2.10,0.39,3.30,0.90],['l',0.39,0.18],['l',-1.65,-1.95],['c',-2.52,-2.97,-2.61,-3.09,-2.70,-3.27],['c',-0.09,-0.24,-0.12,-0.48,-0.03,-0.75],['c',0.15,-0.48,0.57,-0.96,1.83,-2.01],['c',0.45,-0.36,0.84,-0.72,0.93,-0.78],['c',0.69,-0.75,1.02,-1.80,0.90,-2.79],['c',-0.06,-0.33,-0.21,-0.84,-0.39,-1.11],['c',-0.09,-0.15,-0.45,-0.60,-0.81,-1.05],['c',-0.36,-0.42,-0.69,-0.81,-0.72,-0.87],['c',-0.09,-0.18,0.00,-0.42,0.21,-0.51],['z']],w:7.888,h:21.435}, + 'rests.8th':{d:[['M',1.68,-6.12],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.12,0.00,0.18,0.00,0.33,-0.09],['c',0.39,-0.18,1.32,-1.29,1.68,-1.98],['c',0.09,-0.21,0.24,-0.30,0.39,-0.30],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.27,1.11,-1.86,6.42],['c',-1.02,3.48,-1.89,6.39,-1.92,6.42],['c',0.00,0.03,-0.12,0.12,-0.24,0.15],['c',-0.18,0.09,-0.21,0.09,-0.45,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.15,-0.57,1.68,-4.92],['c',0.96,-2.67,1.74,-4.89,1.71,-4.89],['l',-0.51,0.15],['c',-1.08,0.36,-1.74,0.48,-2.55,0.48],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:7.534,h:13.883}, + 'rests.16th':{d:[['M',3.33,-6.12],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.15,0.39,0.57,0.57,0.87,0.42],['c',0.39,-0.18,1.20,-1.23,1.62,-2.07],['c',0.06,-0.15,0.24,-0.24,0.36,-0.24],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.45,1.86,-2.67,10.17],['c',-1.50,5.55,-2.73,10.14,-2.76,10.17],['c',-0.03,0.03,-0.12,0.12,-0.24,0.15],['c',-0.18,0.09,-0.21,0.09,-0.45,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.12,-0.57,1.44,-4.92],['c',0.81,-2.67,1.47,-4.86,1.47,-4.89],['c',-0.03,0.00,-0.27,0.06,-0.54,0.15],['c',-1.08,0.36,-1.77,0.48,-2.58,0.48],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.09,0.09,0.27,0.18,0.45,0.21],['c',0.12,0.00,0.18,0.00,0.33,-0.09],['c',0.33,-0.15,1.02,-0.93,1.41,-1.59],['c',0.12,-0.21,0.18,-0.39,0.39,-1.08],['c',0.66,-2.10,1.17,-3.84,1.17,-3.87],['c',0.00,0.00,-0.21,0.06,-0.42,0.15],['c',-0.51,0.15,-1.20,0.33,-1.68,0.42],['c',-0.33,0.06,-0.51,0.06,-0.96,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:9.724,h:21.383}, + 'rests.32nd':{d:[['M',4.23,-13.62],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.12,0.00,0.18,0.00,0.27,-0.06],['c',0.33,-0.21,0.99,-1.11,1.44,-1.98],['c',0.09,-0.24,0.21,-0.33,0.39,-0.33],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.57,2.67,-3.21,13.89],['c',-1.80,7.62,-3.30,13.89,-3.30,13.92],['c',-0.03,0.06,-0.12,0.12,-0.24,0.18],['c',-0.21,0.09,-0.24,0.09,-0.48,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.09,-0.57,1.23,-4.92],['c',0.69,-2.67,1.26,-4.86,1.29,-4.89],['c',0.00,-0.03,-0.12,-0.03,-0.48,0.12],['c',-1.17,0.39,-2.22,0.57,-3.00,0.54],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.12,0.09,0.30,0.18,0.48,0.21],['c',0.12,0.00,0.18,0.00,0.30,-0.09],['c',0.42,-0.21,1.29,-1.29,1.56,-1.89],['c',0.03,-0.12,1.23,-4.59,1.23,-4.65],['c',0.00,-0.03,-0.18,0.03,-0.39,0.12],['c',-0.63,0.18,-1.20,0.36,-1.74,0.45],['c',-0.39,0.06,-0.54,0.06,-1.02,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.18,0.18,0.51,0.27,0.72,0.15],['c',0.30,-0.12,0.69,-0.57,1.08,-1.17],['c',0.42,-0.60,0.39,-0.51,1.05,-3.03],['c',0.33,-1.26,0.60,-2.31,0.60,-2.34],['c',0.00,0.00,-0.21,0.03,-0.45,0.12],['c',-0.57,0.18,-1.14,0.33,-1.62,0.42],['c',-0.33,0.06,-0.51,0.06,-0.96,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:11.373,h:28.883}, + 'rests.64th':{d:[['M',5.13,-13.62],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.18,0.21,0.54,0.30,0.75,0.18],['c',0.24,-0.12,0.63,-0.66,1.08,-1.56],['c',0.33,-0.66,0.39,-0.72,0.60,-0.72],['c',0.12,0.00,0.27,0.09,0.33,0.18],['c',0.03,0.06,-0.69,3.66,-3.54,17.64],['c',-1.95,9.66,-3.57,17.61,-3.57,17.64],['c',-0.03,0.06,-0.12,0.12,-0.24,0.18],['c',-0.21,0.09,-0.24,0.09,-0.48,0.09],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.06,-0.57,1.05,-4.95],['c',0.60,-2.70,1.08,-4.89,1.08,-4.92],['c',0.00,0.00,-0.24,0.06,-0.51,0.15],['c',-0.66,0.24,-1.20,0.36,-1.77,0.48],['c',-0.42,0.06,-0.57,0.06,-1.05,0.06],['c',-0.69,0.00,-0.87,-0.03,-1.35,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.72,-1.05,2.22,-1.23,3.06,-0.42],['c',0.30,0.33,0.42,0.60,0.60,1.38],['c',0.09,0.45,0.21,0.78,0.33,0.90],['c',0.09,0.09,0.27,0.18,0.45,0.21],['c',0.21,0.03,0.39,-0.09,0.72,-0.42],['c',0.45,-0.45,1.02,-1.26,1.17,-1.65],['c',0.03,-0.09,0.27,-1.14,0.54,-2.34],['c',0.27,-1.20,0.48,-2.19,0.51,-2.22],['c',0.00,-0.03,-0.09,-0.03,-0.48,0.12],['c',-1.17,0.39,-2.22,0.57,-3.00,0.54],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.15,0.39,0.57,0.57,0.90,0.42],['c',0.36,-0.18,1.20,-1.26,1.47,-1.89],['c',0.03,-0.09,0.30,-1.20,0.57,-2.43],['l',0.51,-2.28],['l',-0.54,0.18],['c',-1.11,0.36,-1.80,0.48,-2.61,0.48],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.21,0.21,0.54,0.30,0.75,0.18],['c',0.36,-0.18,0.93,-0.93,1.29,-1.68],['c',0.12,-0.24,0.18,-0.48,0.63,-2.55],['l',0.51,-2.31],['c',0.00,-0.03,-0.18,0.03,-0.39,0.12],['c',-1.14,0.36,-2.10,0.54,-2.82,0.51],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:12.453,h:36.383}, + 'rests.128th':{d:[['M',6.03,-21.12],['c',0.66,-0.09,1.23,0.09,1.68,0.51],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.21,0.00,0.33,-0.06,0.54,-0.36],['c',0.15,-0.21,0.54,-0.93,0.78,-1.47],['c',0.15,-0.33,0.18,-0.39,0.30,-0.48],['c',0.18,-0.09,0.45,0.00,0.51,0.15],['c',0.03,0.09,-7.11,42.75,-7.17,42.84],['c',-0.03,0.03,-0.15,0.09,-0.24,0.15],['c',-0.18,0.06,-0.24,0.06,-0.45,0.06],['c',-0.24,0.00,-0.30,0.00,-0.48,-0.06],['c',-0.09,-0.06,-0.21,-0.12,-0.21,-0.15],['c',-0.06,-0.03,0.03,-0.57,0.84,-4.98],['c',0.51,-2.70,0.93,-4.92,0.90,-4.92],['c',0.00,0.00,-0.15,0.06,-0.36,0.12],['c',-0.78,0.27,-1.62,0.48,-2.31,0.57],['c',-0.15,0.03,-0.54,0.03,-0.81,0.03],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.63,0.48],['c',0.12,0.00,0.18,0.00,0.30,-0.09],['c',0.42,-0.21,1.14,-1.11,1.50,-1.83],['c',0.12,-0.27,0.12,-0.27,0.54,-2.52],['c',0.24,-1.23,0.42,-2.25,0.39,-2.25],['c',0.00,0.00,-0.24,0.06,-0.51,0.18],['c',-1.26,0.39,-2.25,0.57,-3.06,0.54],['c',-0.42,-0.03,-0.75,-0.12,-1.11,-0.30],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.18,0.21,0.51,0.30,0.75,0.18],['c',0.36,-0.15,1.05,-0.99,1.41,-1.77],['l',0.15,-0.30],['l',0.42,-2.25],['c',0.21,-1.26,0.42,-2.28,0.39,-2.28],['l',-0.51,0.15],['c',-1.11,0.39,-1.89,0.51,-2.70,0.51],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.15,0.63,0.21,0.81,0.33,0.96],['c',0.18,0.18,0.48,0.27,0.72,0.21],['c',0.33,-0.12,1.14,-1.26,1.41,-1.95],['c',0.00,-0.09,0.21,-1.11,0.45,-2.34],['c',0.21,-1.20,0.39,-2.22,0.39,-2.28],['c',0.03,-0.03,0.00,-0.03,-0.45,0.12],['c',-0.57,0.18,-1.20,0.33,-1.71,0.42],['c',-0.30,0.06,-0.51,0.06,-0.93,0.06],['c',-0.66,0.00,-0.84,-0.03,-1.32,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.36,-0.54,0.96,-0.87,1.65,-0.93],['c',0.54,-0.03,1.02,0.15,1.41,0.54],['c',0.27,0.30,0.39,0.54,0.57,1.26],['c',0.09,0.33,0.18,0.66,0.21,0.72],['c',0.12,0.27,0.33,0.45,0.60,0.48],['c',0.18,0.00,0.36,-0.09,0.57,-0.33],['c',0.33,-0.36,0.78,-1.14,0.93,-1.56],['c',0.03,-0.12,0.24,-1.20,0.45,-2.40],['c',0.24,-1.20,0.42,-2.22,0.42,-2.28],['c',0.03,-0.03,0.00,-0.03,-0.39,0.09],['c',-1.05,0.36,-1.80,0.48,-2.58,0.48],['c',-0.63,0.00,-0.84,-0.03,-1.29,-0.27],['c',-1.32,-0.63,-1.77,-2.16,-1.02,-3.30],['c',0.33,-0.45,0.84,-0.81,1.38,-0.90],['z']],w:12.992,h:43.883}, + 'accidentals.sharp':{d:[['M',5.73,-11.19],['c',0.21,-0.12,0.54,-0.03,0.66,0.24],['c',0.06,0.12,0.06,0.21,0.06,2.31],['c',0.00,1.23,0.00,2.22,0.03,2.22],['c',0.00,0.00,0.27,-0.12,0.60,-0.24],['c',0.69,-0.27,0.78,-0.30,0.96,-0.15],['c',0.21,0.15,0.21,0.18,0.21,1.38],['c',0.00,1.02,0.00,1.11,-0.06,1.20],['c',-0.03,0.06,-0.09,0.12,-0.12,0.15],['c',-0.06,0.03,-0.42,0.21,-0.84,0.36],['l',-0.75,0.33],['l',-0.03,2.43],['c',0.00,1.32,0.00,2.43,0.03,2.43],['c',0.00,0.00,0.27,-0.12,0.60,-0.24],['c',0.69,-0.27,0.78,-0.30,0.96,-0.15],['c',0.21,0.15,0.21,0.18,0.21,1.38],['c',0.00,1.02,0.00,1.11,-0.06,1.20],['c',-0.03,0.06,-0.09,0.12,-0.12,0.15],['c',-0.06,0.03,-0.42,0.21,-0.84,0.36],['l',-0.75,0.33],['l',-0.03,2.52],['c',0.00,2.28,-0.03,2.55,-0.06,2.64],['c',-0.21,0.36,-0.72,0.36,-0.93,0.00],['c',-0.03,-0.09,-0.06,-0.33,-0.06,-2.43],['l',0.00,-2.31],['l',-1.29,0.51],['l',-1.26,0.51],['l',0.00,2.43],['c',0.00,2.58,0.00,2.52,-0.15,2.67],['c',-0.06,0.09,-0.27,0.18,-0.36,0.18],['c',-0.12,0.00,-0.33,-0.09,-0.39,-0.18],['c',-0.15,-0.15,-0.15,-0.09,-0.15,-2.43],['c',0.00,-1.23,0.00,-2.22,-0.03,-2.22],['c',0.00,0.00,-0.27,0.12,-0.60,0.24],['c',-0.69,0.27,-0.78,0.30,-0.96,0.15],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.38],['c',0.00,-1.02,0.00,-1.11,0.06,-1.20],['c',0.03,-0.06,0.09,-0.12,0.12,-0.15],['c',0.06,-0.03,0.42,-0.21,0.84,-0.36],['l',0.78,-0.33],['l',0.00,-2.43],['c',0.00,-1.32,0.00,-2.43,-0.03,-2.43],['c',0.00,0.00,-0.27,0.12,-0.60,0.24],['c',-0.69,0.27,-0.78,0.30,-0.96,0.15],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.38],['c',0.00,-1.02,0.00,-1.11,0.06,-1.20],['c',0.03,-0.06,0.09,-0.12,0.12,-0.15],['c',0.06,-0.03,0.42,-0.21,0.84,-0.36],['l',0.78,-0.33],['l',0.00,-2.52],['c',0.00,-2.28,0.03,-2.55,0.06,-2.64],['c',0.21,-0.36,0.72,-0.36,0.93,0.00],['c',0.03,0.09,0.06,0.33,0.06,2.43],['l',0.03,2.31],['l',1.26,-0.51],['l',1.26,-0.51],['l',0.00,-2.43],['c',0.00,-2.28,0.00,-2.43,0.06,-2.55],['c',0.06,-0.12,0.12,-0.18,0.27,-0.24],['z'],['m',-0.33,10.65],['l',0.00,-2.43],['l',-1.29,0.51],['l',-1.26,0.51],['l',0.00,2.46],['l',0.00,2.43],['l',0.09,-0.03],['c',0.06,-0.03,0.63,-0.27,1.29,-0.51],['l',1.17,-0.48],['l',0.00,-2.46],['z']],w:8.25,h:22.462}, + 'accidentals.halfsharp':{d:[['M',2.43,-10.05],['c',0.21,-0.12,0.54,-0.03,0.66,0.24],['c',0.06,0.12,0.06,0.21,0.06,2.01],['c',0.00,1.05,0.00,1.89,0.03,1.89],['l',0.72,-0.48],['c',0.69,-0.48,0.69,-0.51,0.87,-0.51],['c',0.15,0.00,0.18,0.03,0.27,0.09],['c',0.21,0.15,0.21,0.18,0.21,1.41],['c',0.00,1.11,-0.03,1.14,-0.09,1.23],['c',-0.03,0.03,-0.48,0.39,-1.02,0.75],['l',-0.99,0.66],['l',0.00,2.37],['c',0.00,1.32,0.00,2.37,0.03,2.37],['l',0.72,-0.48],['c',0.69,-0.48,0.69,-0.51,0.87,-0.51],['c',0.15,0.00,0.18,0.03,0.27,0.09],['c',0.21,0.15,0.21,0.18,0.21,1.41],['c',0.00,1.11,-0.03,1.14,-0.09,1.23],['c',-0.03,0.03,-0.48,0.39,-1.02,0.75],['l',-0.99,0.66],['l',0.00,2.25],['c',0.00,1.95,0.00,2.28,-0.06,2.37],['c',-0.06,0.12,-0.12,0.21,-0.24,0.27],['c',-0.27,0.12,-0.54,0.03,-0.69,-0.24],['c',-0.06,-0.12,-0.06,-0.21,-0.06,-2.01],['c',0.00,-1.05,0.00,-1.89,-0.03,-1.89],['l',-0.72,0.48],['c',-0.69,0.48,-0.69,0.48,-0.87,0.48],['c',-0.15,0.00,-0.18,0.00,-0.27,-0.06],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.41],['c',0.00,-1.11,0.03,-1.14,0.09,-1.23],['c',0.03,-0.03,0.48,-0.39,1.02,-0.75],['l',0.99,-0.66],['l',0.00,-2.37],['c',0.00,-1.32,0.00,-2.37,-0.03,-2.37],['l',-0.72,0.48],['c',-0.69,0.48,-0.69,0.48,-0.87,0.48],['c',-0.15,0.00,-0.18,0.00,-0.27,-0.06],['c',-0.21,-0.15,-0.21,-0.18,-0.21,-1.41],['c',0.00,-1.11,0.03,-1.14,0.09,-1.23],['c',0.03,-0.03,0.48,-0.39,1.02,-0.75],['l',0.99,-0.66],['l',0.00,-2.25],['c',0.00,-2.13,0.00,-2.28,0.06,-2.40],['c',0.06,-0.12,0.12,-0.18,0.27,-0.24],['z']],w:5.25,h:20.174}, + 'accidentals.nat':{d:[['M',0.21,-11.40],['c',0.24,-0.06,0.78,0.00,0.99,0.15],['c',0.03,0.03,0.03,0.48,0.00,2.61],['c',-0.03,1.44,-0.03,2.61,-0.03,2.61],['c',0.00,0.03,0.75,-0.09,1.68,-0.24],['c',0.96,-0.18,1.71,-0.27,1.74,-0.27],['c',0.15,0.03,0.27,0.15,0.36,0.30],['l',0.06,0.12],['l',0.09,8.67],['c',0.09,6.96,0.12,8.67,0.09,8.67],['c',-0.03,0.03,-0.12,0.06,-0.21,0.09],['c',-0.24,0.09,-0.72,0.09,-0.96,0.00],['c',-0.09,-0.03,-0.18,-0.06,-0.21,-0.09],['c',-0.03,-0.03,-0.03,-0.48,0.00,-2.61],['c',0.03,-1.44,0.03,-2.61,0.03,-2.61],['c',0.00,-0.03,-0.75,0.09,-1.68,0.24],['c',-0.96,0.18,-1.71,0.27,-1.74,0.27],['c',-0.15,-0.03,-0.27,-0.15,-0.36,-0.30],['l',-0.06,-0.15],['l',-0.09,-7.53],['c',-0.06,-4.14,-0.09,-8.04,-0.12,-8.67],['l',0.00,-1.11],['l',0.15,-0.06],['c',0.09,-0.03,0.21,-0.06,0.27,-0.09],['z'],['m',3.75,8.40],['c',0.00,-0.33,0.00,-0.42,-0.03,-0.42],['c',-0.12,0.00,-2.79,0.45,-2.79,0.48],['c',-0.03,0.00,-0.09,6.30,-0.09,6.33],['c',0.03,0.00,2.79,-0.45,2.82,-0.48],['c',0.00,0.00,0.09,-4.53,0.09,-5.91],['z']],w:5.4,h:22.8}, + 'accidentals.flat':{d:[['M',-0.36,-14.07],['c',0.33,-0.06,0.87,0.00,1.08,0.15],['c',0.06,0.03,0.06,0.36,-0.03,5.25],['c',-0.06,2.85,-0.09,5.19,-0.09,5.19],['c',0.00,0.03,0.12,-0.03,0.24,-0.12],['c',0.63,-0.42,1.41,-0.66,2.19,-0.72],['c',0.81,-0.03,1.47,0.21,2.04,0.78],['c',0.57,0.54,0.87,1.26,0.93,2.04],['c',0.03,0.57,-0.09,1.08,-0.36,1.62],['c',-0.42,0.81,-1.02,1.38,-2.82,2.61],['c',-1.14,0.78,-1.44,1.02,-1.80,1.44],['c',-0.18,0.18,-0.39,0.39,-0.45,0.42],['c',-0.27,0.18,-0.57,0.15,-0.81,-0.06],['c',-0.06,-0.09,-0.12,-0.18,-0.15,-0.27],['c',-0.03,-0.06,-0.09,-3.27,-0.18,-8.34],['c',-0.09,-4.53,-0.15,-8.58,-0.18,-9.03],['l',0.00,-0.78],['l',0.12,-0.06],['c',0.06,-0.03,0.18,-0.09,0.27,-0.12],['z'],['m',3.18,11.01],['c',-0.21,-0.12,-0.54,-0.15,-0.81,-0.06],['c',-0.54,0.15,-0.99,0.63,-1.17,1.26],['c',-0.06,0.30,-0.12,2.88,-0.06,3.87],['c',0.03,0.42,0.03,0.81,0.06,0.90],['l',0.03,0.12],['l',0.45,-0.39],['c',0.63,-0.54,1.26,-1.17,1.56,-1.59],['c',0.30,-0.42,0.60,-0.99,0.72,-1.41],['c',0.18,-0.69,0.09,-1.47,-0.18,-2.07],['c',-0.15,-0.30,-0.33,-0.51,-0.60,-0.63],['z']],w:6.75,h:18.801}, + 'accidentals.halfflat':{d:[['M',4.83,-14.07],['c',0.33,-0.06,0.87,0.00,1.08,0.15],['c',0.06,0.03,0.06,0.60,-0.12,9.06],['c',-0.09,5.55,-0.15,9.06,-0.18,9.12],['c',-0.03,0.09,-0.09,0.18,-0.15,0.27],['c',-0.24,0.21,-0.54,0.24,-0.81,0.06],['c',-0.06,-0.03,-0.27,-0.24,-0.45,-0.42],['c',-0.36,-0.42,-0.66,-0.66,-1.80,-1.44],['c',-1.23,-0.84,-1.83,-1.32,-2.25,-1.77],['c',-0.66,-0.78,-0.96,-1.56,-0.93,-2.46],['c',0.09,-1.41,1.11,-2.58,2.40,-2.79],['c',0.30,-0.06,0.84,-0.03,1.23,0.06],['c',0.54,0.12,1.08,0.33,1.53,0.63],['c',0.12,0.09,0.24,0.15,0.24,0.12],['c',0.00,0.00,-0.12,-8.37,-0.18,-9.75],['l',0.00,-0.66],['l',0.12,-0.06],['c',0.06,-0.03,0.18,-0.09,0.27,-0.12],['z'],['m',-1.65,10.95],['c',-0.60,-0.18,-1.08,0.09,-1.38,0.69],['c',-0.27,0.60,-0.36,1.38,-0.18,2.07],['c',0.12,0.42,0.42,0.99,0.72,1.41],['c',0.30,0.42,0.93,1.05,1.56,1.59],['l',0.48,0.39],['l',0.00,-0.12],['c',0.03,-0.09,0.03,-0.48,0.06,-0.90],['c',0.03,-0.57,0.03,-1.08,0.00,-2.22],['c',-0.03,-1.62,-0.03,-1.62,-0.24,-2.07],['c',-0.21,-0.42,-0.60,-0.75,-1.02,-0.84],['z']],w:6.728,h:18.801}, + 'accidentals.dblflat':{d:[['M',-0.36,-14.07],['c',0.33,-0.06,0.87,0.00,1.08,0.15],['c',0.06,0.03,0.06,0.33,-0.03,4.89],['c',-0.06,2.67,-0.09,5.01,-0.09,5.22],['l',0.00,0.36],['l',0.15,-0.15],['c',0.36,-0.30,0.75,-0.51,1.20,-0.63],['c',0.33,-0.09,0.96,-0.09,1.26,-0.03],['c',0.27,0.09,0.63,0.27,0.87,0.45],['l',0.21,0.15],['l',0.00,-0.27],['c',0.00,-0.15,-0.03,-2.43,-0.09,-5.10],['c',-0.09,-4.56,-0.09,-4.86,-0.03,-4.89],['c',0.15,-0.12,0.39,-0.15,0.72,-0.15],['c',0.30,0.00,0.54,0.03,0.69,0.15],['c',0.06,0.03,0.06,0.33,-0.03,4.95],['c',-0.06,2.70,-0.09,5.04,-0.09,5.22],['l',0.03,0.30],['l',0.21,-0.15],['c',0.69,-0.48,1.44,-0.69,2.28,-0.69],['c',0.51,0.00,0.78,0.03,1.20,0.21],['c',1.32,0.63,2.01,2.28,1.53,3.69],['c',-0.21,0.57,-0.51,1.02,-1.05,1.56],['c',-0.42,0.42,-0.81,0.72,-1.92,1.50],['c',-1.26,0.87,-1.50,1.08,-1.86,1.50],['c',-0.39,0.45,-0.54,0.54,-0.81,0.51],['c',-0.18,0.00,-0.21,0.00,-0.33,-0.06],['l',-0.21,-0.21],['l',-0.06,-0.12],['l',-0.03,-0.99],['c',-0.03,-0.54,-0.03,-1.29,-0.06,-1.68],['l',0.00,-0.69],['l',-0.21,0.24],['c',-0.36,0.42,-0.75,0.75,-1.80,1.62],['c',-1.02,0.84,-1.20,0.99,-1.44,1.38],['c',-0.36,0.51,-0.54,0.60,-0.90,0.51],['c',-0.15,-0.03,-0.39,-0.27,-0.42,-0.42],['c',-0.03,-0.06,-0.09,-3.27,-0.18,-8.34],['c',-0.09,-4.53,-0.15,-8.58,-0.18,-9.03],['l',0.00,-0.78],['l',0.12,-0.06],['c',0.06,-0.03,0.18,-0.09,0.27,-0.12],['z'],['m',2.52,10.98],['c',-0.18,-0.09,-0.48,-0.12,-0.66,-0.06],['c',-0.39,0.15,-0.69,0.54,-0.84,1.14],['c',-0.06,0.24,-0.06,0.39,-0.09,1.74],['c',-0.03,1.44,0.00,2.73,0.06,3.18],['l',0.03,0.15],['l',0.27,-0.27],['c',0.93,-0.96,1.50,-1.95,1.74,-3.06],['c',0.06,-0.27,0.06,-0.39,0.06,-0.96],['c',0.00,-0.54,0.00,-0.69,-0.06,-0.93],['c',-0.09,-0.51,-0.27,-0.81,-0.51,-0.93],['z'],['m',5.43,0.00],['c',-0.18,-0.09,-0.51,-0.12,-0.72,-0.06],['c',-0.54,0.12,-0.96,0.63,-1.17,1.26],['c',-0.06,0.30,-0.12,2.88,-0.06,3.90],['c',0.03,0.42,0.03,0.81,0.06,0.90],['l',0.03,0.12],['l',0.36,-0.30],['c',0.42,-0.36,1.02,-0.96,1.29,-1.29],['c',0.36,-0.45,0.66,-0.99,0.81,-1.41],['c',0.42,-1.23,0.15,-2.76,-0.60,-3.12],['z']],w:11.613,h:18.804}, + 'accidentals.dblsharp':{d:[['M',-0.18,-3.96],['c',0.06,-0.03,0.12,-0.06,0.15,-0.06],['c',0.09,0.00,2.76,0.27,2.79,0.30],['c',0.12,0.03,0.15,0.12,0.15,0.51],['c',0.06,0.96,0.24,1.59,0.57,2.10],['c',0.06,0.09,0.15,0.21,0.18,0.24],['l',0.09,0.06],['l',0.09,-0.06],['c',0.03,-0.03,0.12,-0.15,0.18,-0.24],['c',0.33,-0.51,0.51,-1.14,0.57,-2.10],['c',0.00,-0.39,0.03,-0.45,0.12,-0.51],['c',0.03,0.00,0.66,-0.09,1.44,-0.15],['c',1.47,-0.15,1.50,-0.15,1.56,-0.03],['c',0.03,0.06,0.00,0.42,-0.09,1.44],['c',-0.09,0.72,-0.15,1.35,-0.15,1.38],['c',0.00,0.03,-0.03,0.09,-0.06,0.12],['c',-0.06,0.06,-0.12,0.09,-0.51,0.09],['c',-1.08,0.06,-1.80,0.30,-2.28,0.75],['l',-0.12,0.09],['l',0.09,0.09],['c',0.12,0.15,0.39,0.33,0.63,0.45],['c',0.42,0.18,0.96,0.27,1.68,0.33],['c',0.39,0.00,0.45,0.03,0.51,0.09],['c',0.03,0.03,0.06,0.09,0.06,0.12],['c',0.00,0.03,0.06,0.66,0.15,1.38],['c',0.09,1.02,0.12,1.38,0.09,1.44],['c',-0.06,0.12,-0.09,0.12,-1.56,-0.03],['c',-0.78,-0.06,-1.41,-0.15,-1.44,-0.15],['c',-0.09,-0.06,-0.12,-0.12,-0.12,-0.54],['c',-0.06,-0.93,-0.24,-1.56,-0.57,-2.07],['c',-0.06,-0.09,-0.15,-0.21,-0.18,-0.24],['l',-0.09,-0.06],['l',-0.09,0.06],['c',-0.03,0.03,-0.12,0.15,-0.18,0.24],['c',-0.33,0.51,-0.51,1.14,-0.57,2.07],['c',0.00,0.42,-0.03,0.48,-0.12,0.54],['c',-0.03,0.00,-0.66,0.09,-1.44,0.15],['c',-1.47,0.15,-1.50,0.15,-1.56,0.03],['c',-0.03,-0.06,0.00,-0.42,0.09,-1.44],['c',0.09,-0.72,0.15,-1.35,0.15,-1.38],['c',0.00,-0.03,0.03,-0.09,0.06,-0.12],['c',0.06,-0.06,0.12,-0.09,0.51,-0.09],['c',0.72,-0.06,1.26,-0.15,1.68,-0.33],['c',0.24,-0.12,0.51,-0.30,0.63,-0.45],['l',0.09,-0.09],['l',-0.12,-0.09],['c',-0.48,-0.45,-1.20,-0.69,-2.28,-0.75],['c',-0.39,0.00,-0.45,-0.03,-0.51,-0.09],['c',-0.03,-0.03,-0.06,-0.09,-0.06,-0.12],['c',0.00,-0.03,-0.06,-0.63,-0.12,-1.38],['c',-0.09,-0.72,-0.15,-1.35,-0.15,-1.38],['z']],w:7.95,h:7.977}, + 'dots.dot':{d:[['M',1.32,-1.68],['c',0.09,-0.03,0.27,-0.06,0.39,-0.06],['c',0.96,0.00,1.74,0.78,1.74,1.71],['c',0.00,0.96,-0.78,1.74,-1.71,1.74],['c',-0.96,0.00,-1.74,-0.78,-1.74,-1.71],['c',0.00,-0.78,0.54,-1.50,1.32,-1.68],['z']],w:3.45,h:3.45}, + 'noteheads.dbl':{d:[['M',-0.69,-4.02],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['c',0.06,0.15,0.06,0.18,0.06,1.41],['l',0.00,1.23],['l',0.12,-0.18],['c',0.72,-1.26,2.64,-2.31,4.86,-2.64],['c',0.81,-0.15,1.11,-0.15,2.13,-0.15],['c',0.99,0.00,1.29,0.00,2.10,0.15],['c',0.75,0.12,1.38,0.27,2.04,0.54],['c',1.35,0.51,2.34,1.26,2.82,2.10],['l',0.12,0.18],['l',0.00,-1.23],['c',0.00,-1.20,0.00,-1.26,0.06,-1.38],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['l',0.06,0.15],['l',0.00,3.54],['l',0.00,3.54],['l',-0.06,0.15],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.18,0.09,-0.36,0.09,-0.54,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.06,-0.12,-0.06,-0.18,-0.06,-1.38],['l',0.00,-1.23],['l',-0.12,0.18],['c',-0.48,0.84,-1.47,1.59,-2.82,2.10],['c',-0.84,0.33,-1.71,0.54,-2.85,0.66],['c',-0.45,0.06,-2.16,0.06,-2.61,0.00],['c',-1.14,-0.12,-2.01,-0.33,-2.85,-0.66],['c',-1.35,-0.51,-2.34,-1.26,-2.82,-2.10],['l',-0.12,-0.18],['l',0.00,1.23],['c',0.00,1.23,0.00,1.26,-0.06,1.38],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.18,0.09,-0.36,0.09,-0.54,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['l',-0.06,-0.15],['l',0.00,-3.54],['c',0.00,-3.48,0.00,-3.54,0.06,-3.66],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['z'],['m',7.71,0.63],['c',-0.36,-0.06,-0.90,-0.06,-1.14,0.00],['c',-0.30,0.03,-0.66,0.24,-0.87,0.42],['c',-0.60,0.54,-0.90,1.62,-0.75,2.82],['c',0.12,0.93,0.51,1.68,1.11,2.31],['c',0.75,0.72,1.83,1.20,2.85,1.26],['c',1.05,0.06,1.83,-0.54,2.10,-1.65],['c',0.21,-0.90,0.12,-1.95,-0.24,-2.82],['c',-0.36,-0.81,-1.08,-1.53,-1.95,-1.95],['c',-0.30,-0.15,-0.78,-0.30,-1.11,-0.39],['z']],w:16.83,h:8.145}, + 'noteheads.whole':{d:[['M',6.51,-4.05],['c',0.51,-0.03,2.01,0.00,2.52,0.03],['c',1.41,0.18,2.64,0.51,3.72,1.08],['c',1.20,0.63,1.95,1.41,2.19,2.31],['c',0.09,0.33,0.09,0.90,0.00,1.23],['c',-0.24,0.90,-0.99,1.68,-2.19,2.31],['c',-1.08,0.57,-2.28,0.90,-3.75,1.08],['c',-0.66,0.06,-2.31,0.06,-2.97,0.00],['c',-1.47,-0.18,-2.67,-0.51,-3.75,-1.08],['c',-1.20,-0.63,-1.95,-1.41,-2.19,-2.31],['c',-0.09,-0.33,-0.09,-0.90,0.00,-1.23],['c',0.24,-0.90,0.99,-1.68,2.19,-2.31],['c',1.20,-0.63,2.61,-0.99,4.23,-1.11],['z'],['m',0.57,0.66],['c',-0.87,-0.15,-1.53,0.00,-2.04,0.51],['c',-0.15,0.15,-0.24,0.27,-0.33,0.48],['c',-0.24,0.51,-0.36,1.08,-0.33,1.77],['c',0.03,0.69,0.18,1.26,0.42,1.77],['c',0.60,1.17,1.74,1.98,3.18,2.22],['c',1.11,0.21,1.95,-0.15,2.34,-0.99],['c',0.24,-0.51,0.36,-1.08,0.33,-1.80],['c',-0.06,-1.11,-0.45,-2.04,-1.17,-2.76],['c',-0.63,-0.63,-1.47,-1.05,-2.40,-1.20],['z']],w:14.985,h:8.097}, + 'noteheads.half':{d:[['M',7.44,-4.05],['c',0.06,-0.03,0.27,-0.03,0.48,-0.03],['c',1.05,0.00,1.71,0.24,2.10,0.81],['c',0.42,0.60,0.45,1.35,0.18,2.40],['c',-0.42,1.59,-1.14,2.73,-2.16,3.39],['c',-1.41,0.93,-3.18,1.44,-5.40,1.53],['c',-1.17,0.03,-1.89,-0.21,-2.28,-0.81],['c',-0.42,-0.60,-0.45,-1.35,-0.18,-2.40],['c',0.42,-1.59,1.14,-2.73,2.16,-3.39],['c',0.63,-0.42,1.23,-0.72,1.98,-0.96],['c',0.90,-0.30,1.65,-0.42,3.12,-0.54],['z'],['m',1.29,0.87],['c',-0.27,-0.09,-0.63,-0.12,-0.90,-0.03],['c',-0.72,0.24,-1.53,0.69,-3.27,1.80],['c',-2.34,1.50,-3.30,2.25,-3.57,2.79],['c',-0.36,0.72,-0.06,1.50,0.66,1.77],['c',0.24,0.12,0.69,0.09,0.99,0.00],['c',0.84,-0.30,1.92,-0.93,4.14,-2.37],['c',1.62,-1.08,2.37,-1.71,2.61,-2.19],['c',0.36,-0.72,0.06,-1.50,-0.66,-1.77],['z']],w:10.37,h:8.132}, + 'noteheads.quarter':{d:[['M',6.09,-4.05],['c',0.36,-0.03,1.20,0.00,1.53,0.06],['c',1.17,0.24,1.89,0.84,2.16,1.83],['c',0.06,0.18,0.06,0.30,0.06,0.66],['c',0.00,0.45,0.00,0.63,-0.15,1.08],['c',-0.66,2.04,-3.06,3.93,-5.52,4.38],['c',-0.54,0.09,-1.44,0.09,-1.83,0.03],['c',-1.23,-0.27,-1.98,-0.87,-2.25,-1.86],['c',-0.06,-0.18,-0.06,-0.30,-0.06,-0.66],['c',0.00,-0.45,0.00,-0.63,0.15,-1.08],['c',0.24,-0.78,0.75,-1.53,1.44,-2.22],['c',1.20,-1.20,2.85,-2.01,4.47,-2.22],['z']],w:9.81,h:8.094}, + 'noteheads.slash.nostem':{d:[['M',9.30,-7.77],['c',0.06,-0.06,0.18,-0.06,1.71,-0.06],['l',1.65,0.00],['l',0.09,0.09],['c',0.06,0.06,0.06,0.09,0.06,0.15],['c',-0.03,0.12,-9.21,15.24,-9.30,15.33],['c',-0.06,0.06,-0.18,0.06,-1.71,0.06],['l',-1.65,0.00],['l',-0.09,-0.09],['c',-0.06,-0.06,-0.06,-0.09,-0.06,-0.15],['c',0.03,-0.12,9.21,-15.24,9.30,-15.33],['z']],w:12.81,h:15.63}, + 'noteheads.indeterminate':{d:[['M',0.78,-4.05],['c',0.12,-0.03,0.24,-0.03,0.36,0.03],['c',0.03,0.03,0.93,0.72,1.95,1.56],['l',1.86,1.50],['l',1.86,-1.50],['c',1.02,-0.84,1.92,-1.53,1.95,-1.56],['c',0.21,-0.12,0.33,-0.09,0.75,0.24],['c',0.30,0.27,0.36,0.36,0.36,0.54],['c',0.00,0.03,-0.03,0.12,-0.06,0.18],['c',-0.03,0.06,-0.90,0.75,-1.89,1.56],['l',-1.80,1.47],['c',0.00,0.03,0.81,0.69,1.80,1.50],['c',0.99,0.81,1.86,1.50,1.89,1.56],['c',0.03,0.06,0.06,0.15,0.06,0.18],['c',0.00,0.18,-0.06,0.27,-0.36,0.54],['c',-0.42,0.33,-0.54,0.36,-0.75,0.24],['c',-0.03,-0.03,-0.93,-0.72,-1.95,-1.56],['l',-1.86,-1.50],['l',-1.86,1.50],['c',-1.02,0.84,-1.92,1.53,-1.95,1.56],['c',-0.21,0.12,-0.33,0.09,-0.75,-0.24],['c',-0.30,-0.27,-0.36,-0.36,-0.36,-0.54],['c',0.00,-0.03,0.03,-0.12,0.06,-0.18],['c',0.03,-0.06,0.90,-0.75,1.89,-1.56],['l',1.80,-1.47],['c',0.00,-0.03,-0.81,-0.69,-1.80,-1.50],['c',-0.99,-0.81,-1.86,-1.50,-1.89,-1.56],['c',-0.06,-0.12,-0.09,-0.21,-0.03,-0.36],['c',0.03,-0.09,0.57,-0.57,0.72,-0.63],['z']],w:9.843,h:8.139}, + 'scripts.ufermata':{d:[['M',-0.75,-10.77],['c',0.12,0.00,0.45,-0.03,0.69,-0.03],['c',2.91,-0.03,5.55,1.53,7.41,4.35],['c',1.17,1.71,1.95,3.72,2.43,6.03],['c',0.12,0.51,0.12,0.57,0.03,0.69],['c',-0.12,0.21,-0.48,0.27,-0.69,0.12],['c',-0.12,-0.09,-0.18,-0.24,-0.27,-0.69],['c',-0.78,-3.63,-3.42,-6.54,-6.78,-7.38],['c',-0.78,-0.21,-1.20,-0.24,-2.07,-0.24],['c',-0.63,0.00,-0.84,0.00,-1.20,0.06],['c',-1.83,0.27,-3.42,1.08,-4.80,2.37],['c',-1.41,1.35,-2.40,3.21,-2.85,5.19],['c',-0.09,0.45,-0.15,0.60,-0.27,0.69],['c',-0.21,0.15,-0.57,0.09,-0.69,-0.12],['c',-0.09,-0.12,-0.09,-0.18,0.03,-0.69],['c',0.33,-1.62,0.78,-3.00,1.47,-4.38],['c',1.77,-3.54,4.44,-5.67,7.56,-5.97],['z'],['m',0.33,7.47],['c',1.38,-0.30,2.58,0.90,2.31,2.25],['c',-0.15,0.72,-0.78,1.35,-1.47,1.50],['c',-1.38,0.27,-2.58,-0.93,-2.31,-2.31],['c',0.15,-0.69,0.78,-1.29,1.47,-1.44],['z']],w:19.748,h:11.289}, + 'scripts.dfermata':{d:[['M',-9.63,-0.42],['c',0.15,-0.09,0.36,-0.06,0.51,0.03],['c',0.12,0.09,0.18,0.24,0.27,0.66],['c',0.78,3.66,3.42,6.57,6.78,7.41],['c',0.78,0.21,1.20,0.24,2.07,0.24],['c',0.63,0.00,0.84,0.00,1.20,-0.06],['c',1.83,-0.27,3.42,-1.08,4.80,-2.37],['c',1.41,-1.35,2.40,-3.21,2.85,-5.22],['c',0.09,-0.42,0.15,-0.57,0.27,-0.66],['c',0.21,-0.15,0.57,-0.09,0.69,0.12],['c',0.09,0.12,0.09,0.18,-0.03,0.69],['c',-0.33,1.62,-0.78,3.00,-1.47,4.38],['c',-1.92,3.84,-4.89,6.00,-8.31,6.00],['c',-3.42,0.00,-6.39,-2.16,-8.31,-6.00],['c',-0.48,-0.96,-0.84,-1.92,-1.14,-2.97],['c',-0.18,-0.69,-0.42,-1.74,-0.42,-1.92],['c',0.00,-0.12,0.09,-0.27,0.24,-0.33],['z'],['m',9.21,0.00],['c',1.20,-0.27,2.34,0.63,2.34,1.86],['c',0.00,0.90,-0.66,1.68,-1.50,1.89],['c',-1.38,0.27,-2.58,-0.93,-2.31,-2.31],['c',0.15,-0.69,0.78,-1.29,1.47,-1.44],['z']],w:19.744,h:11.274}, + 'scripts.sforzato':{d:[['M',-6.45,-3.69],['c',0.06,-0.03,0.15,-0.06,0.18,-0.06],['c',0.06,0.00,2.85,0.72,6.24,1.59],['l',6.33,1.65],['c',0.33,0.06,0.45,0.21,0.45,0.51],['c',0.00,0.30,-0.12,0.45,-0.45,0.51],['l',-6.33,1.65],['c',-3.39,0.87,-6.18,1.59,-6.21,1.59],['c',-0.21,0.00,-0.48,-0.24,-0.51,-0.45],['c',0.00,-0.15,0.06,-0.36,0.18,-0.45],['c',0.09,-0.06,0.87,-0.27,3.84,-1.05],['c',2.04,-0.54,3.84,-0.99,4.02,-1.02],['c',0.15,-0.06,1.14,-0.24,2.22,-0.42],['c',1.05,-0.18,1.92,-0.36,1.92,-0.36],['c',0.00,0.00,-0.87,-0.18,-1.92,-0.36],['c',-1.08,-0.18,-2.07,-0.36,-2.22,-0.42],['c',-0.18,-0.03,-1.98,-0.48,-4.02,-1.02],['c',-2.97,-0.78,-3.75,-0.99,-3.84,-1.05],['c',-0.12,-0.09,-0.18,-0.30,-0.18,-0.45],['c',0.03,-0.15,0.15,-0.30,0.30,-0.39],['z']],w:13.5,h:7.5}, + 'scripts.staccato':{d:[['M',-0.36,-1.47],['c',0.93,-0.21,1.86,0.51,1.86,1.47],['c',0.00,0.93,-0.87,1.65,-1.80,1.47],['c',-0.54,-0.12,-1.02,-0.57,-1.14,-1.08],['c',-0.21,-0.81,0.27,-1.65,1.08,-1.86],['z']],w:2.989,h:3.004}, + 'scripts.tenuto':{d:[['M',-4.20,-0.48],['l',0.12,-0.06],['l',4.08,0.00],['l',4.08,0.00],['l',0.12,0.06],['c',0.39,0.21,0.39,0.75,0.00,0.96],['l',-0.12,0.06],['l',-4.08,0.00],['l',-4.08,0.00],['l',-0.12,-0.06],['c',-0.39,-0.21,-0.39,-0.75,0.00,-0.96],['z']],w:8.985,h:1.08}, + 'scripts.umarcato':{d:[['M',-0.15,-8.19],['c',0.15,-0.12,0.36,-0.03,0.45,0.15],['c',0.21,0.42,3.45,7.65,3.45,7.71],['c',0.00,0.12,-0.12,0.27,-0.21,0.30],['c',-0.03,0.03,-0.51,0.03,-1.14,0.03],['c',-1.05,0.00,-1.08,0.00,-1.17,-0.06],['c',-0.09,-0.06,-0.24,-0.36,-1.17,-2.40],['c',-0.57,-1.29,-1.05,-2.34,-1.08,-2.34],['c',0.00,-0.03,-0.51,1.02,-1.08,2.34],['c',-0.93,2.07,-1.08,2.34,-1.14,2.40],['c',-0.06,0.03,-0.15,0.06,-0.18,0.06],['c',-0.15,0.00,-0.33,-0.18,-0.33,-0.33],['c',0.00,-0.06,3.24,-7.32,3.45,-7.71],['c',0.03,-0.06,0.09,-0.15,0.15,-0.15],['z']],w:7.5,h:8.245}, + 'scripts.dmarcato':{d:[['M',-3.57,0.03],['c',0.03,0.00,0.57,-0.03,1.17,-0.03],['c',1.05,0.00,1.08,0.00,1.17,0.06],['c',0.09,0.06,0.24,0.36,1.17,2.40],['c',0.57,1.29,1.05,2.34,1.08,2.34],['c',0.00,0.03,0.51,-1.02,1.08,-2.34],['c',0.93,-2.07,1.08,-2.34,1.14,-2.40],['c',0.06,-0.03,0.15,-0.06,0.18,-0.06],['c',0.15,0.00,0.33,0.18,0.33,0.33],['c',0.00,0.09,-3.45,7.74,-3.54,7.83],['c',-0.12,0.12,-0.30,0.12,-0.42,0.00],['c',-0.09,-0.09,-3.54,-7.74,-3.54,-7.83],['c',0.00,-0.09,0.12,-0.27,0.18,-0.30],['z']],w:7.5,h:8.25}, + 'scripts.stopped':{d:[['M',-0.27,-4.08],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['l',0.06,0.15],['l',0.00,1.50],['l',0.00,1.47],['l',1.47,0.00],['l',1.50,0.00],['l',0.15,0.06],['c',0.15,0.09,0.21,0.15,0.30,0.33],['c',0.09,0.18,0.09,0.36,0.00,0.54],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.12,0.06,-0.18,0.06,-1.62,0.06],['l',-1.47,0.00],['l',0.00,1.47],['l',0.00,1.47],['l',-0.06,0.15],['c',-0.09,0.18,-0.15,0.24,-0.33,0.33],['c',-0.18,0.09,-0.36,0.09,-0.54,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['l',-0.06,-0.15],['l',0.00,-1.47],['l',0.00,-1.47],['l',-1.47,0.00],['c',-1.44,0.00,-1.50,0.00,-1.62,-0.06],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.09,-0.18,-0.09,-0.36,0.00,-0.54],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['l',0.15,-0.06],['l',1.47,0.00],['l',1.47,0.00],['l',0.00,-1.47],['c',0.00,-1.44,0.00,-1.50,0.06,-1.62],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['z']],w:8.295,h:8.295}, + 'scripts.upbow':{d:[['M',-4.65,-15.54],['c',0.12,-0.09,0.36,-0.06,0.48,0.03],['c',0.03,0.03,0.09,0.09,0.12,0.15],['c',0.03,0.06,0.66,2.13,1.41,4.62],['c',1.35,4.41,1.38,4.56,2.01,6.96],['l',0.63,2.46],['l',0.63,-2.46],['c',0.63,-2.40,0.66,-2.55,2.01,-6.96],['c',0.75,-2.49,1.38,-4.56,1.41,-4.62],['c',0.06,-0.15,0.18,-0.21,0.36,-0.24],['c',0.15,0.00,0.30,0.06,0.39,0.18],['c',0.15,0.21,0.24,-0.18,-2.10,7.56],['c',-1.20,3.96,-2.22,7.32,-2.25,7.41],['c',0.00,0.12,-0.06,0.27,-0.09,0.30],['c',-0.12,0.21,-0.60,0.21,-0.72,0.00],['c',-0.03,-0.03,-0.09,-0.18,-0.09,-0.30],['c',-0.03,-0.09,-1.05,-3.45,-2.25,-7.41],['c',-2.34,-7.74,-2.25,-7.35,-2.10,-7.56],['c',0.03,-0.03,0.09,-0.09,0.15,-0.12],['z']],w:9.73,h:15.608}, + 'scripts.downbow':{d:[['M',-5.55,-9.93],['l',0.09,-0.06],['l',5.46,0.00],['l',5.46,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,4.77],['c',0.00,5.28,0.00,4.89,-0.18,5.01],['c',-0.18,0.12,-0.42,0.06,-0.54,-0.12],['c',-0.06,-0.09,-0.06,-0.18,-0.06,-2.97],['l',0.00,-2.85],['l',-4.83,0.00],['l',-4.83,0.00],['l',0.00,2.85],['c',0.00,2.79,0.00,2.88,-0.06,2.97],['c',-0.15,0.24,-0.51,0.24,-0.66,0.00],['c',-0.06,-0.09,-0.06,-0.21,-0.06,-4.89],['l',0.00,-4.77],['z']],w:11.22,h:9.992}, + 'scripts.turn':{d:[['M',-4.77,-3.90],['c',0.36,-0.06,1.05,-0.06,1.44,0.03],['c',0.78,0.15,1.50,0.51,2.34,1.14],['c',0.60,0.45,1.05,0.87,2.22,2.01],['c',1.11,1.08,1.62,1.50,2.22,1.86],['c',0.60,0.36,1.32,0.57,1.92,0.57],['c',0.90,0.00,1.71,-0.57,1.89,-1.35],['c',0.24,-0.93,-0.39,-1.89,-1.35,-2.10],['l',-0.15,-0.06],['l',-0.09,0.15],['c',-0.03,0.09,-0.15,0.24,-0.24,0.33],['c',-0.72,0.72,-2.04,0.54,-2.49,-0.36],['c',-0.48,-0.93,0.03,-1.86,1.17,-2.19],['c',0.30,-0.09,1.02,-0.09,1.35,0.00],['c',0.99,0.27,1.74,0.87,2.25,1.83],['c',0.69,1.41,0.63,3.00,-0.21,4.26],['c',-0.21,0.30,-0.69,0.81,-0.99,1.02],['c',-0.30,0.21,-0.84,0.45,-1.17,0.54],['c',-1.23,0.36,-2.49,0.15,-3.72,-0.60],['c',-0.75,-0.48,-1.41,-1.02,-2.85,-2.46],['c',-1.11,-1.08,-1.62,-1.50,-2.22,-1.86],['c',-0.60,-0.36,-1.32,-0.57,-1.92,-0.57],['c',-0.90,0.00,-1.71,0.57,-1.89,1.35],['c',-0.24,0.93,0.39,1.89,1.35,2.10],['l',0.15,0.06],['l',0.09,-0.15],['c',0.03,-0.09,0.15,-0.24,0.24,-0.33],['c',0.72,-0.72,2.04,-0.54,2.49,0.36],['c',0.48,0.93,-0.03,1.86,-1.17,2.19],['c',-0.30,0.09,-1.02,0.09,-1.35,0.00],['c',-0.99,-0.27,-1.74,-0.87,-2.25,-1.83],['c',-0.69,-1.41,-0.63,-3.00,0.21,-4.26],['c',0.21,-0.30,0.69,-0.81,0.99,-1.02],['c',0.48,-0.33,1.11,-0.57,1.74,-0.66],['z']],w:16.366,h:7.893}, + 'scripts.trill':{d:[['M',-0.51,-16.02],['c',0.12,-0.09,0.21,-0.18,0.21,-0.18],['l',-0.81,4.02],['l',-0.81,4.02],['c',0.03,0.00,0.51,-0.27,1.08,-0.60],['c',0.60,-0.30,1.14,-0.63,1.26,-0.66],['c',1.14,-0.54,2.31,-0.60,3.09,-0.18],['c',0.27,0.15,0.54,0.36,0.60,0.51],['l',0.06,0.12],['l',0.21,-0.21],['c',0.90,-0.81,2.22,-0.99,3.12,-0.42],['c',0.60,0.42,0.90,1.14,0.78,2.07],['c',-0.15,1.29,-1.05,2.31,-1.95,2.25],['c',-0.48,-0.03,-0.78,-0.30,-0.96,-0.81],['c',-0.09,-0.27,-0.09,-0.90,-0.03,-1.20],['c',0.21,-0.75,0.81,-1.23,1.59,-1.32],['l',0.24,-0.03],['l',-0.09,-0.12],['c',-0.51,-0.66,-1.62,-0.63,-2.31,0.03],['c',-0.39,0.42,-0.30,0.09,-1.23,4.77],['l',-0.81,4.14],['c',-0.03,0.00,-0.12,-0.03,-0.21,-0.09],['c',-0.33,-0.15,-0.54,-0.18,-0.99,-0.18],['c',-0.42,0.00,-0.66,0.03,-1.05,0.18],['c',-0.12,0.06,-0.21,0.09,-0.21,0.09],['c',0.00,-0.03,0.36,-1.86,0.81,-4.11],['c',0.90,-4.47,0.87,-4.26,0.69,-4.53],['c',-0.21,-0.36,-0.66,-0.51,-1.17,-0.36],['c',-0.15,0.06,-2.22,1.14,-2.58,1.38],['c',-0.12,0.09,-0.12,0.09,-0.21,0.60],['l',-0.09,0.51],['l',0.21,0.24],['c',0.63,0.75,1.02,1.47,1.20,2.19],['c',0.06,0.27,0.06,0.36,0.06,0.81],['c',0.00,0.42,0.00,0.54,-0.06,0.78],['c',-0.15,0.54,-0.33,0.93,-0.63,1.35],['c',-0.18,0.24,-0.57,0.63,-0.81,0.78],['c',-0.24,0.15,-0.63,0.36,-0.84,0.42],['c',-0.27,0.06,-0.66,0.06,-0.87,0.03],['c',-0.81,-0.18,-1.32,-1.05,-1.38,-2.46],['c',-0.03,-0.60,0.03,-0.99,0.33,-2.46],['c',0.21,-1.08,0.24,-1.32,0.21,-1.29],['c',-1.20,0.48,-2.40,0.75,-3.21,0.72],['c',-0.69,-0.06,-1.17,-0.30,-1.41,-0.72],['c',-0.39,-0.75,-0.12,-1.80,0.66,-2.46],['c',0.24,-0.18,0.69,-0.42,1.02,-0.51],['c',0.69,-0.18,1.53,-0.15,2.31,0.09],['c',0.30,0.09,0.75,0.30,0.99,0.45],['c',0.12,0.09,0.15,0.09,0.15,0.03],['c',0.03,-0.03,0.33,-1.59,0.72,-3.45],['c',0.36,-1.86,0.66,-3.42,0.69,-3.45],['c',0.00,-0.03,0.03,-0.03,0.21,0.03],['c',0.21,0.06,0.27,0.06,0.48,0.06],['c',0.42,-0.03,0.78,-0.18,1.26,-0.48],['c',0.15,-0.12,0.36,-0.27,0.48,-0.39],['z'],['m',-5.73,7.68],['c',-0.27,-0.03,-0.96,-0.06,-1.20,-0.03],['c',-0.81,0.12,-1.35,0.57,-1.50,1.20],['c',-0.18,0.66,0.12,1.14,0.75,1.29],['c',0.66,0.12,1.92,-0.12,3.18,-0.66],['l',0.33,-0.15],['l',0.09,-0.39],['c',0.06,-0.21,0.09,-0.42,0.09,-0.45],['c',0.00,-0.03,-0.45,-0.30,-0.75,-0.45],['c',-0.27,-0.15,-0.66,-0.27,-0.99,-0.36],['z'],['m',4.29,3.63],['c',-0.24,-0.39,-0.51,-0.75,-0.51,-0.69],['c',-0.06,0.12,-0.39,1.92,-0.45,2.28],['c',-0.09,0.54,-0.12,1.14,-0.06,1.38],['c',0.06,0.42,0.21,0.60,0.51,0.57],['c',0.39,-0.06,0.75,-0.48,0.93,-1.14],['c',0.09,-0.33,0.09,-1.05,0.00,-1.38],['c',-0.09,-0.39,-0.24,-0.69,-0.42,-1.02],['z']],w:17.963,h:16.49}, + 'scripts.segno':{d:[['M',-3.72,-11.22],['c',0.78,-0.09,1.59,0.03,2.31,0.42],['c',1.20,0.60,2.01,1.71,2.31,3.09],['c',0.09,0.42,0.09,1.20,0.03,1.50],['c',-0.15,0.45,-0.39,0.81,-0.66,0.93],['c',-0.33,0.18,-0.84,0.21,-1.23,0.15],['c',-0.81,-0.18,-1.32,-0.93,-1.26,-1.89],['c',0.03,-0.36,0.09,-0.57,0.24,-0.90],['c',0.15,-0.33,0.45,-0.60,0.72,-0.75],['c',0.12,-0.06,0.18,-0.09,0.18,-0.12],['c',0.00,-0.03,-0.03,-0.15,-0.09,-0.24],['c',-0.18,-0.45,-0.54,-0.87,-0.96,-1.08],['c',-1.11,-0.57,-2.34,-0.18,-2.88,0.90],['c',-0.24,0.51,-0.33,1.11,-0.24,1.83],['c',0.27,1.92,1.50,3.54,3.93,5.13],['c',0.48,0.33,1.26,0.78,1.29,0.78],['c',0.03,0.00,1.35,-2.19,2.94,-4.89],['l',2.88,-4.89],['l',0.84,0.00],['l',0.87,0.00],['l',-0.03,0.06],['c',-0.15,0.21,-6.15,10.41,-6.15,10.44],['c',0.00,0.00,0.21,0.15,0.48,0.27],['c',2.61,1.47,4.35,3.03,5.13,4.65],['c',1.14,2.34,0.51,5.07,-1.44,6.39],['c',-0.66,0.42,-1.32,0.63,-2.13,0.69],['c',-2.01,0.09,-3.81,-1.41,-4.26,-3.54],['c',-0.09,-0.42,-0.09,-1.20,-0.03,-1.50],['c',0.15,-0.45,0.39,-0.81,0.66,-0.93],['c',0.33,-0.18,0.84,-0.21,1.23,-0.15],['c',0.81,0.18,1.32,0.93,1.26,1.89],['c',-0.03,0.36,-0.09,0.57,-0.24,0.90],['c',-0.15,0.33,-0.45,0.60,-0.72,0.75],['c',-0.12,0.06,-0.18,0.09,-0.18,0.12],['c',0.00,0.03,0.03,0.15,0.09,0.24],['c',0.18,0.45,0.54,0.87,0.96,1.08],['c',1.11,0.57,2.34,0.18,2.88,-0.90],['c',0.24,-0.51,0.33,-1.11,0.24,-1.83],['c',-0.27,-1.92,-1.50,-3.54,-3.93,-5.13],['c',-0.48,-0.33,-1.26,-0.78,-1.29,-0.78],['c',-0.03,0.00,-1.35,2.19,-2.91,4.89],['l',-2.88,4.89],['l',-0.87,0.00],['l',-0.87,0.00],['l',0.03,-0.06],['c',0.15,-0.21,6.15,-10.41,6.15,-10.44],['c',0.00,0.00,-0.21,-0.15,-0.48,-0.30],['c',-2.61,-1.44,-4.35,-3.00,-5.13,-4.62],['c',-0.90,-1.89,-0.72,-4.02,0.48,-5.52],['c',0.69,-0.84,1.68,-1.41,2.73,-1.53],['z'],['m',8.76,9.09],['c',0.03,-0.03,0.15,-0.03,0.27,-0.03],['c',0.33,0.03,0.57,0.18,0.72,0.48],['c',0.09,0.18,0.09,0.57,0.00,0.75],['c',-0.09,0.18,-0.21,0.30,-0.36,0.39],['c',-0.15,0.06,-0.21,0.06,-0.39,0.06],['c',-0.21,0.00,-0.27,0.00,-0.39,-0.06],['c',-0.30,-0.15,-0.48,-0.45,-0.48,-0.75],['c',0.00,-0.39,0.24,-0.72,0.63,-0.84],['z'],['m',-10.53,2.61],['c',0.03,-0.03,0.15,-0.03,0.27,-0.03],['c',0.33,0.03,0.57,0.18,0.72,0.48],['c',0.09,0.18,0.09,0.57,0.00,0.75],['c',-0.09,0.18,-0.21,0.30,-0.36,0.39],['c',-0.15,0.06,-0.21,0.06,-0.39,0.06],['c',-0.21,0.00,-0.27,0.00,-0.39,-0.06],['c',-0.30,-0.15,-0.48,-0.45,-0.48,-0.75],['c',0.00,-0.39,0.24,-0.72,0.63,-0.84],['z']],w:15,h:22.504}, + 'scripts.coda':{d:[['M',-0.21,-10.47],['c',0.18,-0.12,0.42,-0.06,0.54,0.12],['c',0.06,0.09,0.06,0.18,0.06,1.50],['l',0.00,1.38],['l',0.18,0.00],['c',0.39,0.06,0.96,0.24,1.38,0.48],['c',1.68,0.93,2.82,3.24,3.03,6.12],['c',0.03,0.24,0.03,0.45,0.03,0.45],['c',0.00,0.03,0.60,0.03,1.35,0.03],['c',1.50,0.00,1.47,0.00,1.59,0.18],['c',0.09,0.12,0.09,0.30,0.00,0.42],['c',-0.12,0.18,-0.09,0.18,-1.59,0.18],['c',-0.75,0.00,-1.35,0.00,-1.35,0.03],['c',0.00,0.00,0.00,0.21,-0.03,0.42],['c',-0.24,3.15,-1.53,5.58,-3.45,6.36],['c',-0.27,0.12,-0.72,0.24,-0.96,0.27],['l',-0.18,0.00],['l',0.00,1.38],['c',0.00,1.32,0.00,1.41,-0.06,1.50],['c',-0.15,0.24,-0.51,0.24,-0.66,0.00],['c',-0.06,-0.09,-0.06,-0.18,-0.06,-1.50],['l',0.00,-1.38],['l',-0.18,0.00],['c',-0.39,-0.06,-0.96,-0.24,-1.38,-0.48],['c',-1.68,-0.93,-2.82,-3.24,-3.03,-6.15],['c',-0.03,-0.21,-0.03,-0.42,-0.03,-0.42],['c',0.00,-0.03,-0.60,-0.03,-1.35,-0.03],['c',-1.50,0.00,-1.47,0.00,-1.59,-0.18],['c',-0.09,-0.12,-0.09,-0.30,0.00,-0.42],['c',0.12,-0.18,0.09,-0.18,1.59,-0.18],['c',0.75,0.00,1.35,0.00,1.35,-0.03],['c',0.00,0.00,0.00,-0.21,0.03,-0.45],['c',0.24,-3.12,1.53,-5.55,3.45,-6.33],['c',0.27,-0.12,0.72,-0.24,0.96,-0.27],['l',0.18,0.00],['l',0.00,-1.38],['c',0.00,-1.53,0.00,-1.50,0.18,-1.62],['z'],['m',-0.18,6.93],['c',0.00,-2.97,0.00,-3.15,-0.06,-3.15],['c',-0.09,0.00,-0.51,0.15,-0.66,0.21],['c',-0.87,0.51,-1.38,1.62,-1.56,3.51],['c',-0.06,0.54,-0.12,1.59,-0.12,2.16],['l',0.00,0.42],['l',1.20,0.00],['l',1.20,0.00],['l',0.00,-3.15],['z'],['m',1.17,-3.06],['c',-0.09,-0.03,-0.21,-0.06,-0.27,-0.09],['l',-0.12,0.00],['l',0.00,3.15],['l',0.00,3.15],['l',1.20,0.00],['l',1.20,0.00],['l',0.00,-0.81],['c',-0.06,-2.40,-0.33,-3.69,-0.93,-4.59],['c',-0.27,-0.39,-0.66,-0.69,-1.08,-0.81],['z'],['m',-1.17,10.14],['l',0.00,-3.15],['l',-1.20,0.00],['l',-1.20,0.00],['l',0.00,0.81],['c',0.03,0.96,0.06,1.47,0.15,2.13],['c',0.24,2.04,0.96,3.12,2.13,3.36],['l',0.12,0.00],['l',0.00,-3.15],['z'],['m',3.18,-2.34],['l',0.00,-0.81],['l',-1.20,0.00],['l',-1.20,0.00],['l',0.00,3.15],['l',0.00,3.15],['l',0.12,0.00],['c',1.17,-0.24,1.89,-1.32,2.13,-3.36],['c',0.09,-0.66,0.12,-1.17,0.15,-2.13],['z']],w:16.035,h:21.062}, + 'scripts.comma':{d:[['M',1.14,-4.62],['c',0.30,-0.12,0.69,-0.03,0.93,0.15],['c',0.12,0.12,0.36,0.45,0.51,0.78],['c',0.90,1.77,0.54,4.05,-1.08,6.75],['c',-0.36,0.63,-0.87,1.38,-0.96,1.44],['c',-0.18,0.12,-0.42,0.06,-0.54,-0.12],['c',-0.09,-0.18,-0.09,-0.30,0.12,-0.60],['c',0.96,-1.44,1.44,-2.97,1.38,-4.35],['c',-0.06,-0.93,-0.30,-1.68,-0.78,-2.46],['c',-0.27,-0.39,-0.33,-0.63,-0.24,-0.96],['c',0.09,-0.27,0.36,-0.54,0.66,-0.63],['z']],w:3.042,h:9.237}, + 'scripts.roll':{d:[['M',1.95,-6.00],['c',0.21,-0.09,0.36,-0.09,0.57,0.00],['c',0.39,0.15,0.63,0.39,1.47,1.35],['c',0.66,0.75,0.78,0.87,1.08,1.05],['c',0.75,0.45,1.65,0.42,2.40,-0.06],['c',0.12,-0.09,0.27,-0.27,0.54,-0.60],['c',0.42,-0.54,0.51,-0.63,0.69,-0.63],['c',0.09,0.00,0.30,0.12,0.36,0.21],['c',0.09,0.12,0.12,0.30,0.03,0.42],['c',-0.06,0.12,-3.15,3.90,-3.30,4.08],['c',-0.06,0.06,-0.18,0.12,-0.27,0.18],['c',-0.27,0.12,-0.60,0.06,-0.99,-0.27],['c',-0.27,-0.21,-0.42,-0.39,-1.08,-1.14],['c',-0.63,-0.72,-0.81,-0.90,-1.17,-1.08],['c',-0.36,-0.18,-0.57,-0.21,-0.99,-0.21],['c',-0.39,0.00,-0.63,0.03,-0.93,0.18],['c',-0.36,0.15,-0.51,0.27,-0.90,0.81],['c',-0.24,0.27,-0.45,0.51,-0.48,0.54],['c',-0.12,0.09,-0.27,0.06,-0.39,0.00],['c',-0.24,-0.15,-0.33,-0.39,-0.21,-0.60],['c',0.09,-0.12,3.18,-3.87,3.33,-4.02],['c',0.06,-0.06,0.18,-0.15,0.24,-0.21],['z']],w:10.817,h:6.125}, + 'scripts.prall':{d:[['M',-4.38,-3.69],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['c',0.03,0.00,0.57,-0.84,1.23,-1.83],['c',1.14,-1.68,1.23,-1.83,1.35,-1.89],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['l',0.48,-0.69],['c',0.51,-0.78,0.54,-0.84,0.69,-0.90],['c',0.42,-0.18,0.87,0.15,0.81,0.60],['c',-0.03,0.12,-0.30,0.51,-1.50,2.37],['c',-1.38,2.07,-1.50,2.22,-1.62,2.28],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.89,-1.95],['l',-1.53,-1.83],['c',-0.03,0.00,-0.57,0.84,-1.23,1.83],['c',-1.14,1.68,-1.23,1.83,-1.35,1.89],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.89,-1.95],['l',-1.53,-1.83],['l',-0.48,0.69],['c',-0.51,0.78,-0.54,0.84,-0.69,0.90],['c',-0.42,0.18,-0.87,-0.15,-0.81,-0.60],['c',0.03,-0.12,0.30,-0.51,1.50,-2.37],['c',1.38,-2.07,1.50,-2.22,1.62,-2.28],['z']],w:15.011,h:7.5}, + 'scripts.arpeggio':{d:[['M',1.5,0],['c',1.5,2,1.5,3,1.5,3],['s',0,1,-2,1.5],['s',-0.5,3,1,5.5],['l',1.5,0],['s',-1.75,-2,-1.9,-3.25],['s',2.15,-0.6,2.95,-1.6],['s',0.45,-1,0.5,-1.25],['s',0,-1,-2,-3.9],['l',-1.5,0],['z']],w:5,h:10}, + 'scripts.mordent':{d:[['M',-0.21,-4.95],['c',0.27,-0.15,0.63,0.00,0.75,0.27],['c',0.06,0.12,0.06,0.24,0.06,1.44],['l',0.00,1.29],['l',0.57,-0.84],['c',0.51,-0.75,0.57,-0.84,0.69,-0.90],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['l',0.48,-0.69],['c',0.51,-0.78,0.54,-0.84,0.69,-0.90],['c',0.42,-0.18,0.87,0.15,0.81,0.60],['c',-0.03,0.12,-0.30,0.51,-1.50,2.37],['c',-1.38,2.07,-1.50,2.22,-1.62,2.28],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.83,-1.89],['c',-0.81,-0.99,-1.50,-1.80,-1.53,-1.86],['c',-0.06,-0.03,-0.06,-0.03,-0.12,0.03],['c',-0.06,0.06,-0.06,0.15,-0.06,2.28],['c',0.00,1.95,0.00,2.25,-0.06,2.34],['c',-0.18,0.45,-0.81,0.48,-1.05,0.03],['c',-0.03,-0.06,-0.06,-0.24,-0.06,-1.41],['l',0.00,-1.35],['l',-0.57,0.84],['c',-0.54,0.78,-0.60,0.87,-0.72,0.93],['c',-0.06,0.03,-0.18,0.06,-0.24,0.06],['c',-0.30,0.00,-0.27,0.03,-1.89,-1.95],['l',-1.53,-1.83],['l',-0.48,0.69],['c',-0.51,0.78,-0.54,0.84,-0.69,0.90],['c',-0.42,0.18,-0.87,-0.15,-0.81,-0.60],['c',0.03,-0.12,0.30,-0.51,1.50,-2.37],['c',1.38,-2.07,1.50,-2.22,1.62,-2.28],['c',0.06,-0.03,0.18,-0.06,0.24,-0.06],['c',0.30,0.00,0.27,-0.03,1.89,1.95],['l',1.53,1.83],['c',0.03,0.00,0.06,-0.06,0.09,-0.09],['c',0.06,-0.12,0.06,-0.15,0.06,-2.28],['c',0.00,-1.92,0.00,-2.22,0.06,-2.31],['c',0.06,-0.15,0.15,-0.24,0.30,-0.30],['z']],w:15.011,h:10.012}, + 'flags.u8th':{d:[['M',-0.42,3.75],['l',0.00,-3.75],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.18],['c',0.00,0.30,0.06,0.84,0.12,1.23],['c',0.24,1.53,0.90,3.12,2.13,5.16],['l',0.99,1.59],['c',0.87,1.44,1.38,2.34,1.77,3.09],['c',0.81,1.68,1.20,3.06,1.26,4.53],['c',0.03,1.53,-0.21,3.27,-0.75,5.01],['c',-0.21,0.69,-0.51,1.50,-0.60,1.59],['c',-0.09,0.12,-0.27,0.21,-0.42,0.21],['c',-0.15,0.00,-0.42,-0.12,-0.51,-0.21],['c',-0.15,-0.18,-0.18,-0.42,-0.09,-0.66],['c',0.15,-0.33,0.45,-1.20,0.57,-1.62],['c',0.42,-1.38,0.60,-2.58,0.60,-3.90],['c',0.00,-0.66,0.00,-0.81,-0.06,-1.11],['c',-0.39,-2.07,-1.80,-4.26,-4.59,-7.14],['l',-0.42,-0.45],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-3.75],['z']],w:6.692,h:22.59}, + 'flags.u16th':{d:[['M',-0.42,7.50],['l',0.00,-7.50],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.39],['c',0.06,1.08,0.39,2.19,0.99,3.39],['c',0.45,0.90,0.87,1.59,1.95,3.12],['c',1.29,1.86,1.77,2.64,2.22,3.57],['c',0.45,0.93,0.72,1.80,0.87,2.64],['c',0.06,0.51,0.06,1.50,0.00,1.92],['c',-0.12,0.60,-0.30,1.20,-0.54,1.71],['l',-0.09,0.24],['l',0.18,0.45],['c',0.51,1.20,0.72,2.22,0.69,3.42],['c',-0.06,1.53,-0.39,3.03,-0.99,4.53],['c',-0.30,0.75,-0.36,0.81,-0.57,0.90],['c',-0.15,0.09,-0.33,0.06,-0.48,0.00],['c',-0.18,-0.09,-0.27,-0.18,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.30,0.12,-0.75],['c',0.66,-1.41,1.02,-2.88,1.08,-4.32],['c',0.00,-0.60,-0.03,-1.05,-0.18,-1.59],['c',-0.30,-1.20,-0.99,-2.40,-2.25,-3.87],['c',-0.42,-0.48,-1.53,-1.62,-2.19,-2.22],['l',-0.45,-0.42],['l',-0.03,1.11],['l',0.00,1.11],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-7.50],['z'],['m',1.65,0.09],['c',-0.30,-0.30,-0.69,-0.72,-0.90,-0.87],['l',-0.33,-0.33],['l',0.00,0.15],['c',0.00,0.30,0.06,0.81,0.15,1.26],['c',0.27,1.29,0.87,2.61,2.04,4.29],['c',0.15,0.24,0.60,0.87,0.96,1.38],['l',1.08,1.53],['l',0.42,0.63],['c',0.03,0.00,0.12,-0.36,0.21,-0.72],['c',0.06,-0.33,0.06,-1.20,0.00,-1.62],['c',-0.33,-1.71,-1.44,-3.48,-3.63,-5.70],['z']],w:6.693,h:26.337}, + 'flags.u32nd':{d:[['M',-0.42,11.25],['l',0.00,-11.25],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.36],['c',0.09,1.68,0.69,3.27,2.07,5.46],['l',0.87,1.35],['c',1.02,1.62,1.47,2.37,1.86,3.18],['c',0.48,1.02,0.78,1.92,0.93,2.88],['c',0.06,0.48,0.06,1.50,0.00,1.89],['c',-0.09,0.42,-0.21,0.87,-0.36,1.26],['l',-0.12,0.30],['l',0.15,0.39],['c',0.69,1.56,0.84,2.88,0.54,4.38],['c',-0.09,0.45,-0.27,1.08,-0.45,1.47],['l',-0.12,0.24],['l',0.18,0.36],['c',0.33,0.72,0.57,1.56,0.69,2.34],['c',0.12,1.02,-0.06,2.52,-0.42,3.84],['c',-0.27,0.93,-0.75,2.13,-0.93,2.31],['c',-0.18,0.15,-0.45,0.18,-0.66,0.09],['c',-0.18,-0.09,-0.27,-0.18,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.30,0.06,-0.60],['c',0.21,-0.36,0.42,-0.90,0.57,-1.38],['c',0.51,-1.41,0.69,-3.06,0.48,-4.08],['c',-0.15,-0.81,-0.57,-1.68,-1.20,-2.55],['c',-0.72,-0.99,-1.83,-2.13,-3.30,-3.33],['l',-0.48,-0.42],['l',-0.03,1.53],['l',0.00,1.56],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-11.25],['z'],['m',1.26,-3.96],['c',-0.27,-0.30,-0.54,-0.60,-0.66,-0.72],['l',-0.18,-0.21],['l',0.00,0.42],['c',0.06,0.87,0.24,1.74,0.66,2.67],['c',0.36,0.87,0.96,1.86,1.92,3.18],['c',0.21,0.33,0.63,0.87,0.87,1.23],['c',0.27,0.39,0.60,0.84,0.75,1.08],['l',0.27,0.39],['l',0.03,-0.12],['c',0.12,-0.45,0.15,-1.05,0.09,-1.59],['c',-0.27,-1.86,-1.38,-3.78,-3.75,-6.33],['z'],['m',-0.27,6.09],['c',-0.27,-0.21,-0.48,-0.42,-0.51,-0.45],['c',-0.06,-0.03,-0.06,-0.03,-0.06,0.21],['c',0.00,0.90,0.30,2.04,0.81,3.09],['c',0.48,1.02,0.96,1.77,2.37,3.63],['c',0.60,0.78,1.05,1.44,1.29,1.77],['c',0.06,0.12,0.15,0.21,0.15,0.18],['c',0.03,-0.03,0.18,-0.57,0.24,-0.87],['c',0.06,-0.45,0.06,-1.32,-0.03,-1.74],['c',-0.09,-0.48,-0.24,-0.90,-0.51,-1.44],['c',-0.66,-1.35,-1.83,-2.70,-3.75,-4.38],['z']],w:6.697,h:32.145}, + 'flags.u64th':{d:[['M',-0.42,15.00],['l',0.00,-15.00],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,0.36],['c',0.06,1.20,0.39,2.37,1.02,3.66],['c',0.39,0.81,0.84,1.56,1.80,3.09],['c',0.81,1.26,1.05,1.68,1.35,2.22],['c',0.87,1.50,1.35,2.79,1.56,4.08],['c',0.06,0.54,0.06,1.56,-0.03,2.04],['c',-0.09,0.48,-0.21,0.99,-0.36,1.35],['l',-0.12,0.27],['l',0.12,0.27],['c',0.09,0.15,0.21,0.45,0.27,0.66],['c',0.69,1.89,0.63,3.66,-0.18,5.46],['l',-0.18,0.39],['l',0.15,0.33],['c',0.30,0.66,0.51,1.44,0.63,2.10],['c',0.06,0.48,0.06,1.35,0.00,1.71],['c',-0.15,0.57,-0.42,1.20,-0.78,1.68],['l',-0.21,0.27],['l',0.18,0.33],['c',0.57,1.05,0.93,2.13,1.02,3.18],['c',0.06,0.72,0.00,1.83,-0.21,2.79],['c',-0.18,1.02,-0.63,2.34,-1.02,3.09],['c',-0.15,0.33,-0.48,0.45,-0.78,0.30],['c',-0.18,-0.09,-0.27,-0.18,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.30,0.03,-0.54],['c',0.75,-1.50,1.23,-3.45,1.17,-4.89],['c',-0.06,-1.02,-0.42,-2.01,-1.17,-3.15],['c',-0.48,-0.72,-1.02,-1.35,-1.89,-2.22],['c',-0.57,-0.57,-1.56,-1.50,-1.92,-1.77],['l',-0.12,-0.09],['l',0.00,1.68],['l',0.00,1.68],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-15.00],['z'],['m',0.93,-8.07],['c',-0.27,-0.30,-0.48,-0.54,-0.51,-0.54],['c',0.00,0.00,0.00,0.69,0.03,1.02],['c',0.15,1.47,0.75,2.94,2.04,4.83],['l',1.08,1.53],['c',0.39,0.57,0.84,1.20,0.99,1.44],['c',0.15,0.24,0.30,0.45,0.30,0.45],['c',0.00,0.00,0.03,-0.09,0.06,-0.21],['c',0.36,-1.59,-0.15,-3.33,-1.47,-5.40],['c',-0.63,-0.93,-1.35,-1.83,-2.52,-3.12],['z'],['m',0.06,6.72],['c',-0.24,-0.21,-0.48,-0.42,-0.51,-0.45],['l',-0.06,-0.06],['l',0.00,0.33],['c',0.00,1.20,0.30,2.34,0.93,3.60],['c',0.45,0.90,0.96,1.68,2.25,3.51],['c',0.39,0.54,0.84,1.17,1.02,1.44],['c',0.21,0.33,0.33,0.51,0.33,0.48],['c',0.06,-0.09,0.21,-0.63,0.30,-0.99],['c',0.06,-0.33,0.06,-0.45,0.06,-0.96],['c',0.00,-0.60,-0.03,-0.84,-0.18,-1.35],['c',-0.30,-1.08,-1.02,-2.28,-2.13,-3.57],['c',-0.39,-0.45,-1.44,-1.47,-2.01,-1.98],['z'],['m',0.00,6.72],['c',-0.24,-0.21,-0.48,-0.39,-0.51,-0.42],['l',-0.06,-0.06],['l',0.00,0.33],['c',0.00,1.41,0.45,2.82,1.38,4.35],['c',0.42,0.72,0.72,1.14,1.86,2.73],['c',0.36,0.45,0.75,0.99,0.87,1.20],['c',0.15,0.21,0.30,0.36,0.30,0.36],['c',0.06,0.00,0.30,-0.48,0.39,-0.75],['c',0.09,-0.36,0.12,-0.63,0.12,-1.05],['c',-0.06,-1.05,-0.45,-2.04,-1.20,-3.18],['c',-0.57,-0.87,-1.11,-1.53,-2.07,-2.49],['c',-0.36,-0.33,-0.84,-0.78,-1.08,-1.02],['z']],w:6.682,h:39.694}, + 'flags.d8th':{d:[['M',5.67,-21.63],['c',0.24,-0.12,0.54,-0.06,0.69,0.15],['c',0.06,0.06,0.21,0.36,0.39,0.66],['c',0.84,1.77,1.26,3.36,1.32,5.10],['c',0.03,1.29,-0.21,2.37,-0.81,3.63],['c',-0.60,1.23,-1.26,2.13,-3.21,4.38],['c',-1.35,1.53,-1.86,2.19,-2.40,2.97],['c',-0.63,0.93,-1.11,1.92,-1.38,2.79],['c',-0.15,0.54,-0.27,1.35,-0.27,1.80],['l',0.00,0.15],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-3.75],['l',0.00,-3.75],['l',0.21,0.00],['l',0.21,0.00],['l',0.48,-0.30],['c',1.83,-1.11,3.12,-2.10,4.17,-3.12],['c',0.78,-0.81,1.32,-1.53,1.71,-2.31],['c',0.45,-0.93,0.60,-1.74,0.51,-2.88],['c',-0.12,-1.56,-0.63,-3.18,-1.47,-4.68],['c',-0.12,-0.21,-0.15,-0.33,-0.06,-0.51],['c',0.06,-0.15,0.15,-0.24,0.33,-0.33],['z']],w:8.492,h:21.691}, + 'flags.ugrace':{d:[['M',6.03,6.93],['c',0.15,-0.09,0.33,-0.06,0.51,0.00],['c',0.15,0.09,0.21,0.15,0.30,0.33],['c',0.09,0.18,0.06,0.39,-0.03,0.54],['c',-0.06,0.15,-10.89,8.88,-11.07,8.97],['c',-0.15,0.09,-0.33,0.06,-0.48,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.09,-0.18,-0.06,-0.39,0.03,-0.54],['c',0.06,-0.15,10.89,-8.88,11.07,-8.97],['z']],w:12.019,h:9.954}, + 'flags.dgrace':{d:[['M',-6.06,-15.93],['c',0.18,-0.09,0.33,-0.12,0.48,-0.06],['c',0.18,0.09,14.01,8.04,14.10,8.10],['c',0.12,0.12,0.18,0.33,0.18,0.51],['c',-0.03,0.21,-0.15,0.39,-0.36,0.48],['c',-0.18,0.09,-0.33,0.12,-0.48,0.06],['c',-0.18,-0.09,-14.01,-8.04,-14.10,-8.10],['c',-0.12,-0.12,-0.18,-0.33,-0.18,-0.51],['c',0.03,-0.21,0.15,-0.39,0.36,-0.48],['z']],w:15.12,h:9.212}, + 'flags.d16th':{d:[['M',6.84,-22.53],['c',0.27,-0.12,0.57,-0.06,0.72,0.15],['c',0.15,0.15,0.33,0.87,0.45,1.56],['c',0.06,0.33,0.06,1.35,0.00,1.65],['c',-0.06,0.33,-0.15,0.78,-0.27,1.11],['c',-0.12,0.33,-0.45,0.96,-0.66,1.32],['l',-0.18,0.27],['l',0.09,0.18],['c',0.48,1.02,0.72,2.25,0.69,3.30],['c',-0.06,1.23,-0.42,2.28,-1.26,3.45],['c',-0.57,0.87,-0.99,1.32,-3.00,3.39],['c',-1.56,1.56,-2.22,2.40,-2.76,3.45],['c',-0.42,0.84,-0.66,1.80,-0.66,2.55],['l',0.00,0.15],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-7.50],['l',0.00,-7.50],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,1.14],['l',0.00,1.11],['l',0.27,-0.15],['c',1.11,-0.57,1.77,-0.99,2.52,-1.47],['c',2.37,-1.56,3.69,-3.15,4.05,-4.83],['c',0.03,-0.18,0.03,-0.39,0.03,-0.78],['c',0.00,-0.60,-0.03,-0.93,-0.24,-1.50],['c',-0.06,-0.18,-0.12,-0.39,-0.15,-0.45],['c',-0.03,-0.24,0.12,-0.48,0.36,-0.60],['z'],['m',-0.63,7.50],['c',-0.06,-0.18,-0.15,-0.36,-0.15,-0.36],['c',-0.03,0.00,-0.03,0.03,-0.06,0.06],['c',-0.06,0.12,-0.96,1.02,-1.95,1.98],['c',-0.63,0.57,-1.26,1.17,-1.44,1.35],['c',-1.53,1.62,-2.28,2.85,-2.55,4.32],['c',-0.03,0.18,-0.03,0.54,-0.06,0.99],['l',0.00,0.69],['l',0.18,-0.09],['c',0.93,-0.54,2.10,-1.29,2.82,-1.83],['c',0.69,-0.51,1.02,-0.81,1.53,-1.29],['c',1.86,-1.89,2.37,-3.66,1.68,-5.82],['z']],w:8.475,h:22.591}, + 'flags.d32nd':{d:[['M',6.84,-29.13],['c',0.27,-0.12,0.57,-0.06,0.72,0.15],['c',0.12,0.12,0.27,0.63,0.36,1.11],['c',0.33,1.59,0.06,3.06,-0.81,4.47],['l',-0.18,0.27],['l',0.09,0.15],['c',0.12,0.24,0.33,0.69,0.45,1.05],['c',0.63,1.83,0.45,3.57,-0.57,5.22],['l',-0.18,0.30],['l',0.15,0.27],['c',0.42,0.87,0.60,1.71,0.57,2.61],['c',-0.06,1.29,-0.48,2.46,-1.35,3.78],['c',-0.54,0.81,-0.93,1.29,-2.46,3.00],['c',-0.51,0.54,-1.05,1.17,-1.26,1.41],['c',-1.56,1.86,-2.25,3.36,-2.37,5.01],['l',0.00,0.33],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-11.25],['l',0.00,-11.25],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,1.35],['l',0.03,1.35],['l',0.78,-0.39],['c',1.38,-0.69,2.34,-1.26,3.24,-1.92],['c',1.38,-1.02,2.28,-2.13,2.64,-3.21],['c',0.15,-0.48,0.18,-0.72,0.18,-1.29],['c',0.00,-0.57,-0.06,-0.90,-0.24,-1.47],['c',-0.06,-0.18,-0.12,-0.39,-0.15,-0.45],['c',-0.03,-0.24,0.12,-0.48,0.36,-0.60],['z'],['m',-0.63,7.20],['c',-0.09,-0.18,-0.12,-0.21,-0.12,-0.15],['c',-0.03,0.09,-1.02,1.08,-2.04,2.04],['c',-1.17,1.08,-1.65,1.56,-2.07,2.04],['c',-0.84,0.96,-1.38,1.86,-1.68,2.76],['c',-0.21,0.57,-0.27,0.99,-0.30,1.65],['l',0.00,0.54],['l',0.66,-0.33],['c',3.57,-1.86,5.49,-3.69,5.94,-5.70],['c',0.06,-0.39,0.06,-1.20,-0.03,-1.65],['c',-0.06,-0.39,-0.24,-0.90,-0.36,-1.20],['z'],['m',-0.06,7.20],['c',-0.06,-0.15,-0.12,-0.33,-0.15,-0.45],['l',-0.06,-0.18],['l',-0.18,0.21],['l',-1.83,1.83],['c',-0.87,0.90,-1.77,1.80,-1.95,2.01],['c',-1.08,1.29,-1.62,2.31,-1.89,3.51],['c',-0.06,0.30,-0.06,0.51,-0.09,0.93],['l',0.00,0.57],['l',0.09,-0.06],['c',0.75,-0.45,1.89,-1.26,2.52,-1.74],['c',0.81,-0.66,1.74,-1.53,2.22,-2.16],['c',1.26,-1.53,1.68,-3.06,1.32,-4.47],['z']],w:8.385,h:29.191}, + 'flags.d64th':{d:[['M',7.08,-32.88],['c',0.30,-0.12,0.66,-0.03,0.78,0.24],['c',0.18,0.33,0.27,2.10,0.15,2.64],['c',-0.09,0.39,-0.21,0.78,-0.39,1.08],['l',-0.15,0.30],['l',0.09,0.27],['c',0.03,0.12,0.09,0.45,0.12,0.69],['c',0.27,1.44,0.18,2.55,-0.30,3.60],['l',-0.12,0.33],['l',0.06,0.42],['c',0.27,1.35,0.33,2.82,0.21,3.63],['c',-0.12,0.60,-0.30,1.23,-0.57,1.80],['l',-0.15,0.27],['l',0.03,0.42],['c',0.06,1.02,0.06,2.70,0.03,3.06],['c',-0.15,1.47,-0.66,2.76,-1.74,4.41],['c',-0.45,0.69,-0.75,1.11,-1.74,2.37],['c',-1.05,1.38,-1.50,1.98,-1.95,2.73],['c',-0.93,1.50,-1.38,2.82,-1.44,4.20],['l',0.00,0.42],['l',-0.21,0.00],['l',-0.21,0.00],['l',0.00,-15.00],['l',0.00,-15.00],['l',0.21,0.00],['l',0.21,0.00],['l',0.00,1.86],['l',0.00,1.89],['c',0.00,0.00,0.21,-0.03,0.45,-0.09],['c',2.22,-0.39,4.08,-1.11,5.19,-2.01],['c',0.63,-0.54,1.02,-1.14,1.20,-1.80],['c',0.06,-0.30,0.06,-1.14,-0.03,-1.65],['c',-0.03,-0.18,-0.06,-0.39,-0.09,-0.48],['c',-0.03,-0.24,0.12,-0.48,0.36,-0.60],['z'],['m',-0.45,6.15],['c',-0.03,-0.18,-0.06,-0.42,-0.06,-0.54],['l',-0.03,-0.18],['l',-0.33,0.30],['c',-0.42,0.36,-0.87,0.72,-1.68,1.29],['c',-1.98,1.38,-2.25,1.59,-2.85,2.16],['c',-0.75,0.69,-1.23,1.44,-1.47,2.19],['c',-0.15,0.45,-0.18,0.63,-0.21,1.35],['l',0.00,0.66],['l',0.39,-0.18],['c',1.83,-0.90,3.45,-1.95,4.47,-2.91],['c',0.93,-0.90,1.53,-1.83,1.74,-2.82],['c',0.06,-0.33,0.06,-0.87,0.03,-1.32],['z'],['m',-0.27,4.86],['c',-0.03,-0.21,-0.06,-0.36,-0.06,-0.36],['c',0.00,-0.03,-0.12,0.09,-0.24,0.24],['c',-0.39,0.48,-0.99,1.08,-2.16,2.19],['c',-1.47,1.38,-1.92,1.83,-2.46,2.49],['c',-0.66,0.87,-1.08,1.74,-1.29,2.58],['c',-0.09,0.42,-0.15,0.87,-0.15,1.44],['l',0.00,0.54],['l',0.48,-0.33],['c',1.50,-1.02,2.58,-1.89,3.51,-2.82],['c',1.47,-1.47,2.25,-2.85,2.40,-4.26],['c',0.03,-0.39,0.03,-1.17,-0.03,-1.71],['z'],['m',-0.66,7.68],['c',0.03,-0.15,0.03,-0.60,0.03,-0.99],['l',0.00,-0.72],['l',-0.27,0.33],['l',-1.74,1.98],['c',-1.77,1.92,-2.43,2.76,-2.97,3.90],['c',-0.51,1.02,-0.72,1.77,-0.75,2.91],['c',0.00,0.63,0.00,0.63,0.06,0.60],['c',0.03,-0.03,0.30,-0.27,0.63,-0.54],['c',0.66,-0.60,1.86,-1.80,2.31,-2.31],['c',1.65,-1.89,2.52,-3.54,2.70,-5.16],['z']],w:8.485,h:32.932}, + 'clefs.C':{d:[['M',0.06,-14.94],['l',0.09,-0.06],['l',1.92,0.00],['l',1.92,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,14.85],['l',0.00,14.82],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.92,0.00],['l',-1.92,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-14.82],['l',0.00,-14.85],['z'],['m',5.37,0.00],['c',0.09,-0.06,0.09,-0.06,0.57,-0.06],['c',0.45,0.00,0.45,0.00,0.54,0.06],['l',0.06,0.09],['l',0.00,7.14],['l',0.00,7.11],['l',0.09,-0.06],['c',0.18,-0.18,0.72,-0.84,0.96,-1.20],['c',0.30,-0.45,0.66,-1.17,0.84,-1.65],['c',0.36,-0.90,0.57,-1.83,0.60,-2.79],['c',0.03,-0.48,0.03,-0.54,0.09,-0.63],['c',0.12,-0.18,0.36,-0.21,0.54,-0.12],['c',0.18,0.09,0.21,0.15,0.24,0.66],['c',0.06,0.87,0.21,1.56,0.57,2.22],['c',0.51,1.02,1.26,1.68,2.22,1.92],['c',0.21,0.06,0.33,0.06,0.78,0.06],['c',0.45,0.00,0.57,0.00,0.84,-0.06],['c',0.45,-0.12,0.81,-0.33,1.08,-0.60],['c',0.57,-0.57,0.87,-1.41,0.99,-2.88],['c',0.06,-0.54,0.06,-3.00,0.00,-3.57],['c',-0.21,-2.58,-0.84,-3.87,-2.16,-4.50],['c',-0.48,-0.21,-1.17,-0.36,-1.77,-0.36],['c',-0.69,0.00,-1.29,0.27,-1.50,0.72],['c',-0.06,0.15,-0.06,0.21,-0.06,0.42],['c',0.00,0.24,0.00,0.30,0.06,0.45],['c',0.12,0.24,0.24,0.39,0.63,0.66],['c',0.42,0.30,0.57,0.48,0.69,0.72],['c',0.06,0.15,0.06,0.21,0.06,0.48],['c',0.00,0.39,-0.03,0.63,-0.21,0.96],['c',-0.30,0.60,-0.87,1.08,-1.50,1.26],['c',-0.27,0.06,-0.87,0.06,-1.14,0.00],['c',-0.78,-0.24,-1.44,-0.87,-1.65,-1.68],['c',-0.12,-0.42,-0.09,-1.17,0.09,-1.71],['c',0.51,-1.65,1.98,-2.82,3.81,-3.09],['c',0.84,-0.09,2.46,0.03,3.51,0.27],['c',2.22,0.57,3.69,1.80,4.44,3.75],['c',0.36,0.93,0.57,2.13,0.57,3.36],['c',0.00,1.44,-0.48,2.73,-1.38,3.81],['c',-1.26,1.50,-3.27,2.43,-5.28,2.43],['c',-0.48,0.00,-0.51,0.00,-0.75,-0.09],['c',-0.15,-0.03,-0.48,-0.21,-0.78,-0.36],['c',-0.69,-0.36,-0.87,-0.42,-1.26,-0.42],['c',-0.27,0.00,-0.30,0.00,-0.51,0.09],['c',-0.57,0.30,-0.81,0.90,-0.81,2.10],['c',0.00,1.23,0.24,1.83,0.81,2.13],['c',0.21,0.09,0.24,0.09,0.51,0.09],['c',0.39,0.00,0.57,-0.06,1.26,-0.42],['c',0.30,-0.15,0.63,-0.33,0.78,-0.36],['c',0.24,-0.09,0.27,-0.09,0.75,-0.09],['c',2.01,0.00,4.02,0.93,5.28,2.40],['c',0.90,1.11,1.38,2.40,1.38,3.84],['c',0.00,1.50,-0.30,2.88,-0.84,3.96],['c',-0.78,1.59,-2.19,2.64,-4.17,3.15],['c',-1.05,0.24,-2.67,0.36,-3.51,0.27],['c',-1.83,-0.27,-3.30,-1.44,-3.81,-3.09],['c',-0.18,-0.54,-0.21,-1.29,-0.09,-1.74],['c',0.15,-0.60,0.63,-1.20,1.23,-1.47],['c',0.36,-0.18,0.57,-0.21,0.99,-0.21],['c',0.42,0.00,0.63,0.03,1.02,0.21],['c',0.42,0.21,0.84,0.63,1.05,1.05],['c',0.18,0.36,0.21,0.60,0.21,0.96],['c',0.00,0.30,0.00,0.36,-0.06,0.51],['c',-0.12,0.24,-0.27,0.42,-0.69,0.72],['c',-0.57,0.42,-0.69,0.63,-0.69,1.08],['c',0.00,0.24,0.00,0.30,0.06,0.45],['c',0.12,0.21,0.30,0.39,0.57,0.54],['c',0.42,0.18,0.87,0.21,1.53,0.15],['c',1.08,-0.15,1.80,-0.57,2.34,-1.32],['c',0.54,-0.75,0.84,-1.83,0.99,-3.51],['c',0.06,-0.57,0.06,-3.03,0.00,-3.57],['c',-0.12,-1.47,-0.42,-2.31,-0.99,-2.88],['c',-0.27,-0.27,-0.63,-0.48,-1.08,-0.60],['c',-0.27,-0.06,-0.39,-0.06,-0.84,-0.06],['c',-0.45,0.00,-0.57,0.00,-0.78,0.06],['c',-1.14,0.27,-2.01,1.17,-2.46,2.49],['c',-0.21,0.57,-0.30,0.99,-0.33,1.65],['c',-0.03,0.51,-0.06,0.57,-0.24,0.66],['c',-0.12,0.06,-0.27,0.06,-0.39,0.00],['c',-0.21,-0.09,-0.21,-0.15,-0.24,-0.75],['c',-0.09,-1.92,-0.78,-3.72,-2.01,-5.19],['c',-0.18,-0.21,-0.36,-0.42,-0.39,-0.45],['l',-0.09,-0.06],['l',0.00,7.11],['l',0.00,7.14],['l',-0.06,0.09],['c',-0.09,0.06,-0.09,0.06,-0.54,0.06],['c',-0.48,0.00,-0.48,0.00,-0.57,-0.06],['l',-0.06,-0.09],['l',0.00,-14.82],['l',0.00,-14.85],['z']],w:20.31,h:29.97}, + 'clefs.F':{d:[['M',6.30,-7.80],['c',0.36,-0.03,1.65,0.00,2.13,0.03],['c',3.60,0.42,6.03,2.10,6.93,4.86],['c',0.27,0.84,0.36,1.50,0.36,2.58],['c',0.00,0.90,-0.03,1.35,-0.18,2.16],['c',-0.78,3.78,-3.54,7.08,-8.37,9.96],['c',-1.74,1.05,-3.87,2.13,-6.18,3.12],['c',-0.39,0.18,-0.75,0.33,-0.81,0.36],['c',-0.06,0.03,-0.15,0.06,-0.18,0.06],['c',-0.15,0.00,-0.33,-0.18,-0.33,-0.33],['c',0.00,-0.15,0.06,-0.21,0.51,-0.48],['c',3.00,-1.77,5.13,-3.21,6.84,-4.74],['c',0.51,-0.45,1.59,-1.50,1.95,-1.95],['c',1.89,-2.19,2.88,-4.32,3.15,-6.78],['c',0.06,-0.42,0.06,-1.77,0.00,-2.19],['c',-0.24,-2.01,-0.93,-3.63,-2.04,-4.71],['c',-0.63,-0.63,-1.29,-1.02,-2.07,-1.20],['c',-1.62,-0.39,-3.36,0.15,-4.56,1.44],['c',-0.54,0.60,-1.05,1.47,-1.32,2.22],['l',-0.09,0.21],['l',0.24,-0.12],['c',0.39,-0.21,0.63,-0.24,1.11,-0.24],['c',0.30,0.00,0.45,0.00,0.66,0.06],['c',1.92,0.48,2.85,2.55,1.95,4.38],['c',-0.45,0.99,-1.41,1.62,-2.46,1.71],['c',-1.47,0.09,-2.91,-0.87,-3.39,-2.25],['c',-0.18,-0.57,-0.21,-1.32,-0.03,-2.28],['c',0.39,-2.25,1.83,-4.20,3.81,-5.19],['c',0.69,-0.36,1.59,-0.60,2.37,-0.69],['z'],['m',11.58,2.52],['c',0.84,-0.21,1.71,0.30,1.89,1.14],['c',0.30,1.17,-0.72,2.19,-1.89,1.89],['c',-0.99,-0.21,-1.50,-1.32,-1.02,-2.25],['c',0.18,-0.39,0.60,-0.69,1.02,-0.78],['z'],['m',0.00,7.50],['c',0.84,-0.21,1.71,0.30,1.89,1.14],['c',0.21,0.87,-0.30,1.71,-1.14,1.89],['c',-0.87,0.21,-1.71,-0.30,-1.89,-1.14],['c',-0.21,-0.84,0.30,-1.71,1.14,-1.89],['z']],w:20.153,h:23.142}, + 'clefs.G':{d:[['M',9.69,-37.41],['c',0.09,-0.09,0.24,-0.06,0.36,0.00],['c',0.12,0.09,0.57,0.60,0.96,1.11],['c',1.77,2.34,3.21,5.85,3.57,8.73],['c',0.21,1.56,0.03,3.27,-0.45,4.86],['c',-0.69,2.31,-1.92,4.47,-4.23,7.44],['c',-0.30,0.39,-0.57,0.72,-0.60,0.75],['c',-0.03,0.06,0.00,0.15,0.18,0.78],['c',0.54,1.68,1.38,4.44,1.68,5.49],['l',0.09,0.42],['l',0.39,0.00],['c',1.47,0.09,2.76,0.51,3.96,1.29],['c',1.83,1.23,3.06,3.21,3.39,5.52],['c',0.09,0.45,0.12,1.29,0.06,1.74],['c',-0.09,1.02,-0.33,1.83,-0.75,2.73],['c',-0.84,1.71,-2.28,3.06,-4.02,3.72],['l',-0.33,0.12],['l',0.03,1.26],['c',0.00,1.74,-0.06,3.63,-0.21,4.62],['c',-0.45,3.06,-2.19,5.49,-4.47,6.21],['c',-0.57,0.18,-0.90,0.21,-1.59,0.21],['c',-0.69,0.00,-1.02,-0.03,-1.65,-0.21],['c',-1.14,-0.27,-2.13,-0.84,-2.94,-1.65],['c',-0.99,-0.99,-1.56,-2.16,-1.71,-3.54],['c',-0.09,-0.81,0.06,-1.53,0.45,-2.13],['c',0.63,-0.99,1.83,-1.56,3.00,-1.53],['c',1.50,0.09,2.64,1.32,2.73,2.94],['c',0.06,1.47,-0.93,2.70,-2.37,2.97],['c',-0.45,0.06,-0.84,0.03,-1.29,-0.09],['l',-0.21,-0.09],['l',0.09,0.12],['c',0.39,0.54,0.78,0.93,1.32,1.26],['c',1.35,0.87,3.06,1.02,4.35,0.36],['c',1.44,-0.72,2.52,-2.28,2.97,-4.35],['c',0.15,-0.66,0.24,-1.50,0.30,-3.03],['c',0.03,-0.84,0.03,-2.94,0.00,-3.00],['c',-0.03,0.00,-0.18,0.00,-0.36,0.03],['c',-0.66,0.12,-0.99,0.12,-1.83,0.12],['c',-1.05,0.00,-1.71,-0.06,-2.61,-0.30],['c',-4.02,-0.99,-7.11,-4.35,-7.80,-8.46],['c',-0.12,-0.66,-0.12,-0.99,-0.12,-1.83],['c',0.00,-0.84,0.00,-1.14,0.15,-1.92],['c',0.36,-2.28,1.41,-4.62,3.30,-7.29],['l',2.79,-3.60],['c',0.54,-0.66,0.96,-1.20,0.96,-1.23],['c',0.00,-0.03,-0.09,-0.33,-0.18,-0.69],['c',-0.96,-3.21,-1.41,-5.28,-1.59,-7.68],['c',-0.12,-1.38,-0.15,-3.09,-0.06,-3.96],['c',0.33,-2.67,1.38,-5.07,3.12,-7.08],['c',0.36,-0.42,0.99,-1.05,1.17,-1.14],['z'],['m',2.01,4.71],['c',-0.15,-0.30,-0.30,-0.54,-0.30,-0.54],['c',-0.03,0.00,-0.18,0.09,-0.30,0.21],['c',-2.40,1.74,-3.87,4.20,-4.26,7.11],['c',-0.06,0.54,-0.06,1.41,-0.03,1.89],['c',0.09,1.29,0.48,3.12,1.08,5.22],['c',0.15,0.42,0.24,0.78,0.24,0.81],['c',0.00,0.03,0.84,-1.11,1.23,-1.68],['c',1.89,-2.73,2.88,-5.07,3.15,-7.53],['c',0.09,-0.57,0.12,-1.74,0.06,-2.37],['c',-0.09,-1.23,-0.27,-1.92,-0.87,-3.12],['z'],['m',-2.94,20.70],['c',-0.21,-0.72,-0.39,-1.32,-0.42,-1.32],['c',0.00,0.00,-1.20,1.47,-1.86,2.37],['c',-2.79,3.63,-4.02,6.30,-4.35,9.30],['c',-0.03,0.21,-0.03,0.69,-0.03,1.08],['c',0.00,0.69,0.00,0.75,0.06,1.11],['c',0.12,0.54,0.27,0.99,0.51,1.47],['c',0.69,1.38,1.83,2.55,3.42,3.42],['c',0.96,0.54,2.07,0.90,3.21,1.08],['c',0.78,0.12,2.04,0.12,2.94,-0.03],['c',0.51,-0.06,0.45,-0.03,0.42,-0.30],['c',-0.24,-3.33,-0.72,-6.33,-1.62,-10.08],['c',-0.09,-0.39,-0.18,-0.75,-0.18,-0.78],['c',-0.03,-0.03,-0.42,0.00,-0.81,0.09],['c',-0.90,0.18,-1.65,0.57,-2.22,1.14],['c',-0.72,0.72,-1.08,1.65,-1.05,2.64],['c',0.06,0.96,0.48,1.83,1.23,2.58],['c',0.36,0.36,0.72,0.63,1.17,0.90],['c',0.33,0.18,0.36,0.21,0.42,0.33],['c',0.18,0.42,-0.18,0.90,-0.60,0.87],['c',-0.18,-0.03,-0.84,-0.36,-1.26,-0.63],['c',-0.78,-0.51,-1.38,-1.11,-1.86,-1.83],['c',-1.77,-2.70,-0.99,-6.42,1.71,-8.19],['c',0.30,-0.21,0.81,-0.48,1.17,-0.63],['c',0.30,-0.09,1.02,-0.30,1.14,-0.30],['c',0.06,0.00,0.09,0.00,0.09,-0.03],['c',0.03,-0.03,-0.51,-1.92,-1.23,-4.26],['z'],['m',3.78,7.41],['c',-0.18,-0.03,-0.36,-0.06,-0.39,-0.06],['c',-0.03,0.00,0.00,0.21,0.18,1.02],['c',0.75,3.18,1.26,6.30,1.50,9.09],['c',0.06,0.72,0.00,0.69,0.51,0.42],['c',0.78,-0.36,1.44,-0.96,1.98,-1.77],['c',1.08,-1.62,1.20,-3.69,0.30,-5.55],['c',-0.81,-1.62,-2.31,-2.79,-4.08,-3.15],['z']],w:19.051,h:57.057}, + 'clefs.perc':{d:[['M',5.07,-7.44],['l',0.09,-0.06],['l',1.53,0.00],['l',1.53,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,7.35],['l',0.00,7.32],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.53,0.00],['l',-1.53,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-7.32],['l',0.00,-7.35],['z'],['m',6.63,0.00],['l',0.09,-0.06],['l',1.53,0.00],['l',1.53,0.00],['l',0.09,0.06],['l',0.06,0.09],['l',0.00,7.35],['l',0.00,7.32],['l',-0.06,0.09],['l',-0.09,0.06],['l',-1.53,0.00],['l',-1.53,0.00],['l',-0.09,-0.06],['l',-0.06,-0.09],['l',0.00,-7.32],['l',0.00,-7.35],['z']],w:9.99,h:14.97}, + 'timesig.common':{d:[['M',6.66,-7.83],['c',0.72,-0.06,1.41,-0.03,1.98,0.09],['c',1.20,0.27,2.34,0.96,3.09,1.92],['c',0.63,0.81,1.08,1.86,1.14,2.73],['c',0.06,1.02,-0.51,1.92,-1.44,2.22],['c',-0.24,0.09,-0.30,0.09,-0.63,0.09],['c',-0.33,0.00,-0.42,0.00,-0.63,-0.06],['c',-0.66,-0.24,-1.14,-0.63,-1.41,-1.20],['c',-0.15,-0.30,-0.21,-0.51,-0.24,-0.90],['c',-0.06,-1.08,0.57,-2.04,1.56,-2.37],['c',0.18,-0.06,0.27,-0.06,0.63,-0.06],['l',0.45,0.00],['c',0.06,0.03,0.09,0.03,0.09,0.00],['c',0.00,0.00,-0.09,-0.12,-0.24,-0.27],['c',-1.02,-1.11,-2.55,-1.68,-4.08,-1.50],['c',-1.29,0.15,-2.04,0.69,-2.40,1.74],['c',-0.36,0.93,-0.42,1.89,-0.42,5.37],['c',0.00,2.97,0.06,3.96,0.24,4.77],['c',0.24,1.08,0.63,1.68,1.41,2.07],['c',0.81,0.39,2.16,0.45,3.18,0.09],['c',1.29,-0.45,2.37,-1.53,3.03,-2.97],['c',0.15,-0.33,0.33,-0.87,0.39,-1.17],['c',0.09,-0.24,0.15,-0.36,0.30,-0.39],['c',0.21,-0.03,0.42,0.15,0.39,0.36],['c',-0.06,0.39,-0.42,1.38,-0.69,1.89],['c',-0.96,1.80,-2.49,2.94,-4.23,3.18],['c',-0.99,0.12,-2.58,-0.06,-3.63,-0.45],['c',-0.96,-0.36,-1.71,-0.84,-2.40,-1.50],['c',-1.11,-1.11,-1.80,-2.61,-2.04,-4.56],['c',-0.06,-0.60,-0.06,-2.01,0.00,-2.61],['c',0.24,-1.95,0.90,-3.45,2.01,-4.56],['c',0.69,-0.66,1.44,-1.11,2.37,-1.47],['c',0.63,-0.24,1.47,-0.42,2.22,-0.48],['z']],w:13.038,h:15.689}, + 'timesig.cut':{d:[['M',6.24,-10.44],['c',0.09,-0.06,0.09,-0.06,0.48,-0.06],['c',0.36,0.00,0.36,0.00,0.45,0.06],['l',0.06,0.09],['l',0.00,1.23],['l',0.00,1.26],['l',0.27,0.00],['c',1.26,0.00,2.49,0.45,3.48,1.29],['c',1.05,0.87,1.80,2.28,1.89,3.48],['c',0.06,1.02,-0.51,1.92,-1.44,2.22],['c',-0.24,0.09,-0.30,0.09,-0.63,0.09],['c',-0.33,0.00,-0.42,0.00,-0.63,-0.06],['c',-0.66,-0.24,-1.14,-0.63,-1.41,-1.20],['c',-0.15,-0.30,-0.21,-0.51,-0.24,-0.90],['c',-0.06,-1.08,0.57,-2.04,1.56,-2.37],['c',0.18,-0.06,0.27,-0.06,0.63,-0.06],['l',0.45,0.00],['c',0.06,0.03,0.09,0.03,0.09,0.00],['c',0.00,-0.03,-0.45,-0.51,-0.66,-0.69],['c',-0.87,-0.69,-1.83,-1.05,-2.94,-1.11],['l',-0.42,0.00],['l',0.00,7.17],['l',0.00,7.14],['l',0.42,0.00],['c',0.69,-0.03,1.23,-0.18,1.86,-0.51],['c',1.05,-0.51,1.89,-1.47,2.46,-2.70],['c',0.15,-0.33,0.33,-0.87,0.39,-1.17],['c',0.09,-0.24,0.15,-0.36,0.30,-0.39],['c',0.21,-0.03,0.42,0.15,0.39,0.36],['c',-0.03,0.24,-0.21,0.78,-0.39,1.20],['c',-0.96,2.37,-2.94,3.90,-5.13,3.90],['l',-0.30,0.00],['l',0.00,1.26],['l',0.00,1.23],['l',-0.06,0.09],['c',-0.09,0.06,-0.09,0.06,-0.45,0.06],['c',-0.39,0.00,-0.39,0.00,-0.48,-0.06],['l',-0.06,-0.09],['l',0.00,-1.29],['l',0.00,-1.29],['l',-0.21,-0.03],['c',-1.23,-0.21,-2.31,-0.63,-3.21,-1.29],['c',-0.15,-0.09,-0.45,-0.36,-0.66,-0.57],['c',-1.11,-1.11,-1.80,-2.61,-2.04,-4.56],['c',-0.06,-0.60,-0.06,-2.01,0.00,-2.61],['c',0.24,-1.95,0.93,-3.45,2.04,-4.59],['c',0.42,-0.39,0.78,-0.66,1.26,-0.93],['c',0.75,-0.45,1.65,-0.75,2.61,-0.90],['l',0.21,-0.03],['l',0.00,-1.29],['l',0.00,-1.29],['z'],['m',-0.06,10.44],['c',0.00,-5.58,0.00,-6.99,-0.03,-6.99],['c',-0.15,0.00,-0.63,0.27,-0.87,0.45],['c',-0.45,0.36,-0.75,0.93,-0.93,1.77],['c',-0.18,0.81,-0.24,1.80,-0.24,4.74],['c',0.00,2.97,0.06,3.96,0.24,4.77],['c',0.24,1.08,0.66,1.68,1.41,2.07],['c',0.12,0.06,0.30,0.12,0.33,0.15],['l',0.09,0.00],['l',0.00,-6.96],['z']],w:13.038,h:20.97}, + 'timesig.imperfectum':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, + 'timesig.imperfectum2':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, + 'timesig.perfectum':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, + 'timesig.perfectum2':{d:[['M',13,-5],['a',8,8,0,1,0,0,10]],w:13.038,h:20.97}, + 'f':{d:[['M',9.93,-14.28],['c',1.53,-0.18,2.88,0.45,3.12,1.50],['c',0.12,0.51,0.00,1.32,-0.27,1.86],['c',-0.15,0.30,-0.42,0.57,-0.63,0.69],['c',-0.69,0.36,-1.56,0.03,-1.83,-0.69],['c',-0.09,-0.24,-0.09,-0.69,0.00,-0.87],['c',0.06,-0.12,0.21,-0.24,0.45,-0.42],['c',0.42,-0.24,0.57,-0.45,0.60,-0.72],['c',0.03,-0.33,-0.09,-0.39,-0.63,-0.42],['c',-0.30,0.00,-0.45,0.00,-0.60,0.03],['c',-0.81,0.21,-1.35,0.93,-1.74,2.46],['c',-0.06,0.27,-0.48,2.25,-0.48,2.31],['c',0.00,0.03,0.39,0.03,0.90,0.03],['c',0.72,0.00,0.90,0.00,0.99,0.06],['c',0.42,0.15,0.45,0.72,0.03,0.90],['c',-0.12,0.06,-0.24,0.06,-1.17,0.06],['l',-1.05,0.00],['l',-0.78,2.55],['c',-0.45,1.41,-0.87,2.79,-0.96,3.06],['c',-0.87,2.37,-2.37,4.74,-3.78,5.91],['c',-1.05,0.90,-2.04,1.23,-3.09,1.08],['c',-1.11,-0.18,-1.89,-0.78,-2.04,-1.59],['c',-0.12,-0.66,0.15,-1.71,0.54,-2.19],['c',0.69,-0.75,1.86,-0.54,2.22,0.39],['c',0.06,0.15,0.09,0.27,0.09,0.48],['c',0.00,0.24,-0.03,0.27,-0.12,0.42],['c',-0.03,0.09,-0.15,0.18,-0.27,0.27],['c',-0.09,0.06,-0.27,0.21,-0.36,0.27],['c',-0.24,0.18,-0.36,0.36,-0.39,0.60],['c',-0.03,0.33,0.09,0.39,0.63,0.42],['c',0.42,0.00,0.63,-0.03,0.90,-0.15],['c',0.60,-0.30,0.96,-0.96,1.38,-2.64],['c',0.09,-0.42,0.63,-2.55,1.17,-4.77],['l',1.02,-4.08],['c',0.00,-0.03,-0.36,-0.03,-0.81,-0.03],['c',-0.72,0.00,-0.81,0.00,-0.93,-0.06],['c',-0.42,-0.18,-0.39,-0.75,0.03,-0.90],['c',0.09,-0.06,0.27,-0.06,1.05,-0.06],['l',0.96,0.00],['l',0.00,-0.09],['c',0.06,-0.18,0.30,-0.72,0.51,-1.17],['c',1.20,-2.46,3.30,-4.23,5.34,-4.50],['z']],w:16.155,h:19.445}, + 'm':{d:[['M',2.79,-8.91],['c',0.09,0.00,0.30,-0.03,0.45,-0.03],['c',0.24,0.03,0.30,0.03,0.45,0.12],['c',0.36,0.15,0.63,0.54,0.75,1.02],['l',0.03,0.21],['l',0.33,-0.30],['c',0.69,-0.69,1.38,-1.02,2.07,-1.02],['c',0.27,0.00,0.33,0.00,0.48,0.06],['c',0.21,0.09,0.48,0.36,0.63,0.60],['c',0.03,0.09,0.12,0.27,0.18,0.42],['c',0.03,0.15,0.09,0.27,0.12,0.27],['c',0.00,0.00,0.09,-0.09,0.18,-0.21],['c',0.33,-0.39,0.87,-0.81,1.29,-0.99],['c',0.78,-0.33,1.47,-0.21,2.01,0.33],['c',0.30,0.33,0.48,0.69,0.60,1.14],['c',0.09,0.42,0.06,0.54,-0.54,3.06],['c',-0.33,1.29,-0.57,2.40,-0.57,2.43],['c',0.00,0.12,0.09,0.21,0.21,0.21],['c',0.24,0.00,0.75,-0.30,1.20,-0.72],['c',0.45,-0.39,0.60,-0.45,0.78,-0.27],['c',0.18,0.18,0.09,0.36,-0.45,0.87],['c',-1.05,0.96,-1.83,1.47,-2.58,1.71],['c',-0.93,0.33,-1.53,0.21,-1.80,-0.33],['c',-0.06,-0.15,-0.06,-0.21,-0.06,-0.45],['c',0.00,-0.24,0.03,-0.48,0.60,-2.82],['c',0.42,-1.71,0.60,-2.64,0.63,-2.79],['c',0.03,-0.57,-0.30,-0.75,-0.84,-0.48],['c',-0.24,0.12,-0.54,0.39,-0.66,0.63],['c',-0.03,0.09,-0.42,1.38,-0.90,3.00],['c',-0.90,3.15,-0.84,3.00,-1.14,3.15],['l',-0.15,0.09],['l',-0.78,0.00],['c',-0.60,0.00,-0.78,0.00,-0.84,-0.06],['c',-0.09,-0.03,-0.18,-0.18,-0.18,-0.27],['c',0.00,-0.03,0.36,-1.38,0.84,-2.97],['c',0.57,-2.04,0.81,-2.97,0.84,-3.12],['c',0.03,-0.54,-0.30,-0.72,-0.84,-0.45],['c',-0.24,0.12,-0.57,0.42,-0.66,0.63],['c',-0.06,0.09,-0.51,1.44,-1.05,2.97],['c',-0.51,1.56,-0.99,2.85,-0.99,2.91],['c',-0.06,0.12,-0.21,0.24,-0.36,0.30],['c',-0.12,0.06,-0.21,0.06,-0.90,0.06],['c',-0.60,0.00,-0.78,0.00,-0.84,-0.06],['c',-0.09,-0.03,-0.18,-0.18,-0.18,-0.27],['c',0.00,-0.03,0.45,-1.38,0.99,-2.97],['c',1.05,-3.18,1.05,-3.18,0.93,-3.45],['c',-0.12,-0.27,-0.39,-0.30,-0.72,-0.15],['c',-0.54,0.27,-1.14,1.17,-1.56,2.40],['c',-0.06,0.15,-0.15,0.30,-0.18,0.36],['c',-0.21,0.21,-0.57,0.27,-0.72,0.09],['c',-0.09,-0.09,-0.06,-0.21,0.06,-0.63],['c',0.48,-1.26,1.26,-2.46,2.01,-3.21],['c',0.57,-0.54,1.20,-0.87,1.83,-1.02],['z']],w:14.687,h:9.126}, + 'p':{d:[['M',1.92,-8.70],['c',0.27,-0.09,0.81,-0.06,1.11,0.03],['c',0.54,0.18,0.93,0.51,1.17,0.99],['c',0.09,0.15,0.15,0.33,0.18,0.36],['l',0.00,0.12],['l',0.30,-0.27],['c',0.66,-0.60,1.35,-1.02,2.13,-1.20],['c',0.21,-0.06,0.33,-0.06,0.78,-0.06],['c',0.45,0.00,0.51,0.00,0.84,0.09],['c',1.29,0.33,2.07,1.32,2.25,2.79],['c',0.09,0.81,-0.09,2.01,-0.45,2.79],['c',-0.54,1.26,-1.86,2.55,-3.18,3.03],['c',-0.45,0.18,-0.81,0.24,-1.29,0.24],['c',-0.69,-0.03,-1.35,-0.18,-1.86,-0.45],['c',-0.30,-0.15,-0.51,-0.18,-0.69,-0.09],['c',-0.09,0.03,-0.18,0.09,-0.18,0.12],['c',-0.09,0.12,-1.05,2.94,-1.05,3.06],['c',0.00,0.24,0.18,0.48,0.51,0.63],['c',0.18,0.06,0.54,0.15,0.75,0.15],['c',0.21,0.00,0.36,0.06,0.42,0.18],['c',0.12,0.18,0.06,0.42,-0.12,0.54],['c',-0.09,0.03,-0.15,0.03,-0.78,0.00],['c',-1.98,-0.15,-3.81,-0.15,-5.79,0.00],['c',-0.63,0.03,-0.69,0.03,-0.78,0.00],['c',-0.24,-0.15,-0.24,-0.57,0.03,-0.66],['c',0.06,-0.03,0.48,-0.09,0.99,-0.12],['c',0.87,-0.06,1.11,-0.09,1.35,-0.21],['c',0.18,-0.06,0.33,-0.18,0.39,-0.30],['c',0.06,-0.12,3.24,-9.42,3.27,-9.60],['c',0.06,-0.33,0.03,-0.57,-0.15,-0.69],['c',-0.09,-0.06,-0.12,-0.06,-0.30,-0.06],['c',-0.69,0.06,-1.53,1.02,-2.28,2.61],['c',-0.09,0.21,-0.21,0.45,-0.27,0.51],['c',-0.09,0.12,-0.33,0.24,-0.48,0.24],['c',-0.18,0.00,-0.36,-0.15,-0.36,-0.30],['c',0.00,-0.24,0.78,-1.83,1.26,-2.55],['c',0.72,-1.11,1.47,-1.74,2.28,-1.92],['z'],['m',5.37,1.47],['c',-0.27,-0.12,-0.75,-0.03,-1.14,0.21],['c',-0.75,0.48,-1.47,1.68,-1.89,3.15],['c',-0.45,1.47,-0.42,2.34,0.00,2.70],['c',0.45,0.39,1.26,0.21,1.83,-0.36],['c',0.51,-0.51,0.99,-1.68,1.38,-3.27],['c',0.30,-1.17,0.33,-1.74,0.15,-2.13],['c',-0.09,-0.15,-0.15,-0.21,-0.33,-0.30],['z']],w:14.689,h:13.127}, + 'r':{d:[['M',6.33,-9.12],['c',0.27,-0.03,0.93,0.00,1.20,0.06],['c',0.84,0.21,1.23,0.81,1.02,1.53],['c',-0.24,0.75,-0.90,1.17,-1.56,0.96],['c',-0.33,-0.09,-0.51,-0.30,-0.66,-0.75],['c',-0.03,-0.12,-0.09,-0.24,-0.12,-0.30],['c',-0.09,-0.15,-0.30,-0.24,-0.48,-0.24],['c',-0.57,0.00,-1.38,0.54,-1.65,1.08],['c',-0.06,0.15,-0.33,1.17,-0.90,3.27],['c',-0.57,2.31,-0.81,3.12,-0.87,3.21],['c',-0.03,0.06,-0.12,0.15,-0.18,0.21],['l',-0.12,0.06],['l',-0.81,0.03],['c',-0.69,0.00,-0.81,0.00,-0.90,-0.03],['c',-0.09,-0.06,-0.18,-0.21,-0.18,-0.30],['c',0.00,-0.06,0.39,-1.62,0.90,-3.51],['c',0.84,-3.24,0.87,-3.45,0.87,-3.72],['c',0.00,-0.21,0.00,-0.27,-0.03,-0.36],['c',-0.12,-0.15,-0.21,-0.24,-0.42,-0.24],['c',-0.24,0.00,-0.45,0.15,-0.78,0.42],['c',-0.33,0.36,-0.45,0.54,-0.72,1.14],['c',-0.03,0.12,-0.21,0.24,-0.36,0.27],['c',-0.12,0.00,-0.15,0.00,-0.24,-0.06],['c',-0.18,-0.12,-0.18,-0.21,-0.06,-0.54],['c',0.21,-0.57,0.42,-0.93,0.78,-1.32],['c',0.54,-0.51,1.20,-0.81,1.95,-0.87],['c',0.81,-0.03,1.53,0.30,1.92,0.87],['l',0.12,0.18],['l',0.09,-0.09],['c',0.57,-0.45,1.41,-0.84,2.19,-0.96],['z']],w:9.41,h:9.132}, + 's':{d:[['M',4.47,-8.73],['c',0.09,0.00,0.36,-0.03,0.57,-0.03],['c',0.75,0.03,1.29,0.24,1.71,0.63],['c',0.51,0.54,0.66,1.26,0.36,1.83],['c',-0.24,0.42,-0.63,0.57,-1.11,0.42],['c',-0.33,-0.09,-0.60,-0.36,-0.60,-0.57],['c',0.00,-0.03,0.06,-0.21,0.15,-0.39],['c',0.12,-0.21,0.15,-0.33,0.18,-0.48],['c',0.00,-0.24,-0.06,-0.48,-0.15,-0.60],['c',-0.15,-0.21,-0.42,-0.24,-0.75,-0.15],['c',-0.27,0.06,-0.48,0.18,-0.69,0.36],['c',-0.39,0.39,-0.51,0.96,-0.33,1.38],['c',0.09,0.21,0.42,0.51,0.78,0.72],['c',1.11,0.69,1.59,1.11,1.89,1.68],['c',0.21,0.39,0.24,0.78,0.15,1.29],['c',-0.18,1.20,-1.17,2.16,-2.52,2.52],['c',-1.02,0.24,-1.95,0.12,-2.70,-0.42],['c',-0.72,-0.51,-0.99,-1.47,-0.60,-2.19],['c',0.24,-0.48,0.72,-0.63,1.17,-0.42],['c',0.33,0.18,0.54,0.45,0.57,0.81],['c',0.00,0.21,-0.03,0.30,-0.33,0.51],['c',-0.33,0.24,-0.39,0.42,-0.27,0.69],['c',0.06,0.15,0.21,0.27,0.45,0.33],['c',0.30,0.09,0.87,0.09,1.20,0.00],['c',0.75,-0.21,1.23,-0.72,1.29,-1.35],['c',0.03,-0.42,-0.15,-0.81,-0.54,-1.20],['c',-0.24,-0.24,-0.48,-0.42,-1.41,-1.02],['c',-0.69,-0.42,-1.05,-0.93,-1.05,-1.47],['c',0.00,-0.39,0.12,-0.87,0.30,-1.23],['c',0.27,-0.57,0.78,-1.05,1.38,-1.35],['c',0.24,-0.12,0.63,-0.27,0.90,-0.30],['z']],w:6.632,h:8.758}, + 'z':{d:[['M',2.64,-7.95],['c',0.36,-0.09,0.81,-0.03,1.71,0.27],['c',0.78,0.21,0.96,0.27,1.74,0.30],['c',0.87,0.06,1.02,0.03,1.38,-0.21],['c',0.21,-0.15,0.33,-0.15,0.48,-0.06],['c',0.15,0.09,0.21,0.30,0.15,0.45],['c',-0.03,0.06,-1.26,1.26,-2.76,2.67],['l',-2.73,2.55],['l',0.54,0.03],['c',0.54,0.03,0.72,0.03,2.01,0.15],['c',0.36,0.03,0.90,0.06,1.20,0.09],['c',0.66,0.00,0.81,-0.03,1.02,-0.24],['c',0.30,-0.30,0.39,-0.72,0.27,-1.23],['c',-0.06,-0.27,-0.06,-0.27,-0.03,-0.39],['c',0.15,-0.30,0.54,-0.27,0.69,0.03],['c',0.15,0.33,0.27,1.02,0.27,1.50],['c',0.00,1.47,-1.11,2.70,-2.52,2.79],['c',-0.57,0.03,-1.02,-0.09,-2.01,-0.51],['c',-1.02,-0.42,-1.23,-0.48,-2.13,-0.54],['c',-0.81,-0.06,-0.96,-0.03,-1.26,0.18],['c',-0.12,0.06,-0.24,0.12,-0.27,0.12],['c',-0.27,0.00,-0.45,-0.30,-0.36,-0.51],['c',0.03,-0.06,1.32,-1.32,2.91,-2.79],['l',2.88,-2.73],['c',-0.03,0.00,-0.21,0.03,-0.42,0.06],['c',-0.21,0.03,-0.78,0.09,-1.23,0.12],['c',-1.11,0.12,-1.23,0.15,-1.95,0.27],['c',-0.72,0.15,-1.17,0.18,-1.29,0.09],['c',-0.27,-0.18,-0.21,-0.75,0.12,-1.26],['c',0.39,-0.60,0.93,-1.02,1.59,-1.20],['z']],w:8.573,h:8.743}, + '+':{d:[['M',3.48,-9.3],['c',0.18,-0.09,0.36,-0.09,0.54,0.00],['c',0.18,0.09,0.24,0.15,0.33,0.30],['l',0.06,0.15],['l',0.00,1.29],['l',0.00,1.29],['l',1.29,0.00],['c',1.23,0.00,1.29,0.00,1.41,0.06],['c',0.06,0.03,0.15,0.09,0.18,0.12],['c',0.12,0.09,0.21,0.33,0.21,0.48],['c',0.00,0.15,-0.09,0.39,-0.21,0.48],['c',-0.03,0.03,-0.12,0.09,-0.18,0.12],['c',-0.12,0.06,-0.18,0.06,-1.41,0.06],['l',-1.29,0.00],['l',0.00,1.29],['c',0.00,1.23,0.00,1.29,-0.06,1.41],['c',-0.09,0.18,-0.15,0.24,-0.30,0.33],['c',-0.21,0.09,-0.39,0.09,-0.57,0.00],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.06,-0.12,-0.06,-0.18,-0.06,-1.41],['l',0.00,-1.29],['l',-1.29,0.00],['c',-1.23,0.00,-1.29,0.00,-1.41,-0.06],['c',-0.18,-0.09,-0.24,-0.15,-0.33,-0.33],['c',-0.09,-0.18,-0.09,-0.36,0.00,-0.54],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['l',0.15,-0.06],['l',1.26,0.00],['l',1.29,0.00],['l',0.00,-1.29],['c',0.00,-1.23,0.00,-1.29,0.06,-1.41],['c',0.09,-0.18,0.15,-0.24,0.33,-0.33],['z']],w:7.507,h:7.515}, + ',':{d:[['M',1.32,-3.36],['c',0.57,-0.15,1.17,0.03,1.59,0.45],['c',0.45,0.45,0.60,0.96,0.51,1.89],['c',-0.09,1.23,-0.42,2.46,-0.99,3.93],['c',-0.30,0.72,-0.72,1.62,-0.78,1.68],['c',-0.18,0.21,-0.51,0.18,-0.66,-0.06],['c',-0.03,-0.06,-0.06,-0.15,-0.06,-0.18],['c',0.00,-0.06,0.12,-0.33,0.24,-0.63],['c',0.84,-1.80,1.02,-2.61,0.69,-3.24],['c',-0.12,-0.24,-0.27,-0.36,-0.75,-0.60],['c',-0.36,-0.15,-0.42,-0.21,-0.60,-0.39],['c',-0.69,-0.69,-0.69,-1.71,0.00,-2.40],['c',0.21,-0.21,0.51,-0.39,0.81,-0.45],['z']],w:3.452,h:8.143}, + '-':{d:[['M',0.18,-5.34],['c',0.09,-0.06,0.15,-0.06,2.31,-0.06],['c',2.46,0.00,2.37,0.00,2.46,0.21],['c',0.12,0.21,0.03,0.42,-0.15,0.54],['c',-0.09,0.06,-0.15,0.06,-2.28,0.06],['c',-2.16,0.00,-2.22,0.00,-2.31,-0.06],['c',-0.27,-0.15,-0.27,-0.54,-0.03,-0.69],['z']],w:5.001,h:0.81}, + '.':{d:[['M',1.32,-3.36],['c',1.05,-0.27,2.10,0.57,2.10,1.65],['c',0.00,1.08,-1.05,1.92,-2.10,1.65],['c',-0.90,-0.21,-1.50,-1.14,-1.26,-2.04],['c',0.12,-0.63,0.63,-1.11,1.26,-1.26],['z']],w:3.413,h:3.402}, + 'scripts.wedge':{d:[['M',-3.66,-7.44],['c',0.06,-0.09,0.00,-0.09,0.81,0.03],['c',1.86,0.30,3.84,0.30,5.73,0.00],['c',0.78,-0.12,0.72,-0.12,0.78,-0.03],['c',0.15,0.15,0.12,0.24,-0.24,0.60],['c',-0.93,0.93,-1.98,2.76,-2.67,4.62],['c',-0.30,0.78,-0.51,1.71,-0.51,2.13],['c',0.00,0.15,0.00,0.18,-0.06,0.27],['c',-0.12,0.09,-0.24,0.09,-0.36,0.00],['c',-0.06,-0.09,-0.06,-0.12,-0.06,-0.27],['c',0.00,-0.42,-0.21,-1.35,-0.51,-2.13],['c',-0.69,-1.86,-1.74,-3.69,-2.67,-4.62],['c',-0.36,-0.36,-0.39,-0.45,-0.24,-0.60],['z']],w:7.49,h:7.752}, + 'scripts.thumb':{d:[['M',-0.54,-3.69],['c',0.15,-0.03,0.36,-0.06,0.51,-0.06],['c',1.44,0.00,2.58,1.11,2.94,2.85],['c',0.09,0.48,0.09,1.32,0.00,1.80],['c',-0.27,1.41,-1.08,2.43,-2.16,2.73],['l',-0.18,0.06],['l',0.00,0.12],['c',0.03,0.06,0.06,0.45,0.09,0.87],['c',0.03,0.57,0.03,0.78,0.00,0.84],['c',-0.09,0.27,-0.39,0.48,-0.66,0.48],['c',-0.27,0.00,-0.57,-0.21,-0.66,-0.48],['c',-0.03,-0.06,-0.03,-0.27,0.00,-0.84],['c',0.03,-0.42,0.06,-0.81,0.09,-0.87],['l',0.00,-0.12],['l',-0.18,-0.06],['c',-1.08,-0.30,-1.89,-1.32,-2.16,-2.73],['c',-0.09,-0.48,-0.09,-1.32,0.00,-1.80],['c',0.15,-0.84,0.51,-1.53,1.02,-2.04],['c',0.39,-0.39,0.84,-0.63,1.35,-0.75],['z'],['m',1.05,0.90],['c',-0.15,-0.09,-0.21,-0.09,-0.45,-0.12],['c',-0.15,0.00,-0.30,0.03,-0.39,0.03],['c',-0.57,0.18,-0.90,0.72,-1.08,1.74],['c',-0.06,0.48,-0.06,1.80,0.00,2.28],['c',0.15,0.90,0.42,1.44,0.90,1.65],['c',0.18,0.09,0.21,0.09,0.51,0.09],['c',0.30,0.00,0.33,0.00,0.51,-0.09],['c',0.48,-0.21,0.75,-0.75,0.90,-1.65],['c',0.03,-0.27,0.03,-0.54,0.03,-1.14],['c',0.00,-0.60,0.00,-0.87,-0.03,-1.14],['c',-0.15,-0.90,-0.45,-1.44,-0.90,-1.65],['z']],w:5.955,h:9.75}, + 'scripts.open':{d:[['M',-0.54,-3.69],['c',0.15,-0.03,0.36,-0.06,0.51,-0.06],['c',1.44,0.00,2.58,1.11,2.94,2.85],['c',0.09,0.48,0.09,1.32,0.00,1.80],['c',-0.33,1.74,-1.47,2.85,-2.91,2.85],['c',-1.44,0.00,-2.58,-1.11,-2.91,-2.85],['c',-0.09,-0.48,-0.09,-1.32,0.00,-1.80],['c',0.15,-0.84,0.51,-1.53,1.02,-2.04],['c',0.39,-0.39,0.84,-0.63,1.35,-0.75],['z'],['m',1.11,0.90],['c',-0.21,-0.09,-0.27,-0.09,-0.51,-0.12],['c',-0.30,0.00,-0.42,0.03,-0.66,0.15],['c',-0.24,0.12,-0.51,0.39,-0.66,0.63],['c',-0.54,0.93,-0.63,2.64,-0.21,3.81],['c',0.21,0.54,0.51,0.90,0.93,1.11],['c',0.21,0.09,0.24,0.09,0.54,0.09],['c',0.30,0.00,0.33,0.00,0.54,-0.09],['c',0.42,-0.21,0.72,-0.57,0.93,-1.11],['c',0.36,-0.99,0.36,-2.37,0.00,-3.36],['c',-0.21,-0.54,-0.51,-0.90,-0.90,-1.11],['z']],w:5.955,h:7.5}, + 'scripts.longphrase':{d:[['M',1.47,-15.09],['c',0.36,-0.09,0.66,-0.18,0.69,-0.18],['c',0.06,0.00,0.06,0.54,0.06,11.25],['l',0.00,11.25],['l',-0.63,0.15],['c',-0.66,0.18,-1.44,0.39,-1.50,0.39],['c',-0.03,0.00,-0.03,-3.39,-0.03,-11.25],['l',0.00,-11.25],['l',0.36,-0.09],['c',0.21,-0.06,0.66,-0.18,1.05,-0.27],['z']],w:2.16,h:23.04}, + 'scripts.mediumphrase':{d:[['M',1.47,-7.59],['c',0.36,-0.09,0.66,-0.18,0.69,-0.18],['c',0.06,0.00,0.06,0.39,0.06,7.50],['l',0.00,7.50],['l',-0.63,0.15],['c',-0.66,0.18,-1.44,0.39,-1.50,0.39],['c',-0.03,0.00,-0.03,-2.28,-0.03,-7.50],['l',0.00,-7.50],['l',0.36,-0.09],['c',0.21,-0.06,0.66,-0.18,1.05,-0.27],['z']],w:2.16,h:15.54}, + 'scripts.shortphrase':{d:[['M',1.47,-7.59],['c',0.36,-0.09,0.66,-0.18,0.69,-0.18],['c',0.06,0.00,0.06,0.21,0.06,3.75],['l',0.00,3.75],['l',-0.42,0.09],['c',-0.57,0.18,-1.65,0.45,-1.71,0.45],['c',-0.03,0.00,-0.03,-0.72,-0.03,-3.75],['l',0.00,-3.75],['l',0.36,-0.09],['c',0.21,-0.06,0.66,-0.18,1.05,-0.27],['z']],w:2.16,h:8.04}, + 'scripts.snap':{d:[['M',4.50,-3.39],['c',0.36,-0.03,0.96,-0.03,1.35,0.00],['c',1.56,0.15,3.15,0.90,4.20,2.01],['c',0.24,0.27,0.33,0.42,0.33,0.60],['c',0.00,0.27,0.03,0.24,-2.46,2.22],['c',-1.29,1.02,-2.40,1.86,-2.49,1.92],['c',-0.18,0.09,-0.30,0.09,-0.48,0.00],['c',-0.09,-0.06,-1.20,-0.90,-2.49,-1.92],['c',-2.49,-1.98,-2.46,-1.95,-2.46,-2.22],['c',0.00,-0.18,0.09,-0.33,0.33,-0.60],['c',1.05,-1.08,2.64,-1.86,4.17,-2.01],['z'],['m',1.29,1.17],['c',-1.47,-0.15,-2.97,0.30,-4.14,1.20],['l',-0.18,0.15],['l',0.06,0.09],['c',0.15,0.12,3.63,2.85,3.66,2.85],['c',0.03,0.00,3.51,-2.73,3.66,-2.85],['l',0.06,-0.09],['l',-0.18,-0.15],['c',-0.84,-0.66,-1.89,-1.08,-2.94,-1.20],['z']],w:10.38,h:6.84}}; + + // Custom characters that weren't generated from the font: + glyphs['noteheads.slash.whole'] = {d:[['M',5,-5],['l',1,1],['l',-5,5],['l',-1,-1],['z'],['m',4,6],['l',-5,-5],['l',2,-2],['l',5,5],['z'],['m',0,-2],['l',1,1],['l',-5,5],['l',-1,-1],['z'],['m',-4,6],['l',-5,-5],['l',2,-2],['l',5,5],['z']],w:10.81,h:15.63}; + + glyphs['noteheads.slash.quarter'] = {d:[['M',9,-6],['l',0,4],['l',-9,9],['l',0,-4],['z']],w:9,h:9}; + + glyphs['noteheads.harmonic.quarter'] = {d:[['M',3.63,-4.02],['c',0.09,-0.06,0.18,-0.09,0.24,-0.03],['c',0.03,0.03,0.87,0.93,1.83,2.01],['c',1.50,1.65,1.80,1.98,1.80,2.04],['c',0.00,0.06,-0.30,0.39,-1.80,2.04],['c',-0.96,1.08,-1.80,1.98,-1.83,2.01],['c',-0.06,0.06,-0.15,0.03,-0.24,-0.03],['c',-0.12,-0.09,-3.54,-3.84,-3.60,-3.93],['c',-0.03,-0.03,-0.03,-0.09,-0.03,-0.15],['c',0.03,-0.06,3.45,-3.84,3.63,-3.96],['z']],w:7.5,h:8.165}; + +var pathClone = function (pathArray) { + var res = []; + for (var i = 0, ii = pathArray.length; i < ii; i++) { + res[i] = []; + for (var j = 0, jj = pathArray[i].length; j < jj; j++) { + res[i][j] = pathArray[i][j]; + } + } + return res; +}; + +var pathScale = function (pathArray, kx, ky) { + for (var i = 0, ii = pathArray.length; i < ii; i++) { + var p = pathArray[i]; + var j, jj; + for (j = 1, jj = p.length; j < jj; j++) { + p[j] *= (j % 2) ? kx : ky; + } + } +}; + +var Glyphs = { + printSymbol: function (x,y,symb,paper, klass) { + if (!glyphs[symb]) return null; + var pathArray = pathClone(glyphs[symb].d); + pathArray[0][1] +=x; + pathArray[0][2] +=y; + var path = ""; + for (var i = 0; i < pathArray.length; i++) + path += pathArray[i].join(" "); + return paper.path({path:path, stroke:"none", fill:"#000000", 'class': klass }); + }, + + getPathForSymbol: function (x,y,symb,scalex, scaley) { + scalex = scalex || 1; + scaley = scaley || 1; + if (!glyphs[symb]) return null; + var pathArray = pathClone(glyphs[symb].d); + if (scalex!==1 || scaley!==1) pathScale(pathArray,scalex,scaley); + pathArray[0][1] +=x; + pathArray[0][2] +=y; + + return pathArray; + }, + + getSymbolWidth: function (symbol) { + if (glyphs[symbol]) return glyphs[symbol].w; + return 0; + }, + + symbolHeightInPitches: function(symbol) { + var height = glyphs[symbol] ? glyphs[symbol].h : 0; + return height / abc_spacing.STEP; + }, + + getSymbolAlign: function (symbol) { + if (symbol.substring(0,7)==="scripts" && + symbol!=="scripts.roll") { + return "center"; + } + return "left"; + }, + + getYCorr: function (symbol) { + switch(symbol) { + case "0": + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + case "+": return -2; + case "timesig.common": + case "timesig.cut": return 0; + case "flags.d32nd": return -1; + case "flags.d64th": return -2; + case "flags.u32nd": return 1; + case "flags.u64th": return 3; + case "rests.whole": return 1; + case "rests.half": return -1; + case "rests.8th": return -1; + case "rests.quarter": return -1; + case "rests.16th": return -1; + case "rests.32nd": return -1; + case "rests.64th": return -1; + case "f": + case "m": + case "p": + case "s": + case "z": + return -4; + case "scripts.trill": + case "scripts.upbow": + case "scripts.downbow": + return -2; + case "scripts.ufermata": + case "scripts.wedge": + case "scripts.roll": + case "scripts.shortphrase": + case "scripts.longphrase": + return -1; + case "scripts.dfermata": + return 1; + default: return 0; + } + }, + setSymbol: function(name, path) { + glyphs[name] = path; + } +}; + +var abc_glyphs = Glyphs; // we need the glyphs for layout information + +// abc_create_clef.js +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + +var createClef; + +(function() { + + createClef = function(elem, tuneNumber) { + var clef; + var octave = 0; + var abselem = new abc_absolute_element(elem,0,10, 'staff-extra', tuneNumber); + abselem.isClef = true; + switch (elem.type) { + case "treble": clef = "clefs.G"; break; + case "tenor": clef="clefs.C"; break; + case "alto": clef="clefs.C"; break; + case "bass": clef="clefs.F"; break; + case 'treble+8': clef = "clefs.G"; octave = 1; break; + case 'tenor+8':clef="clefs.C"; octave = 1; break; + case 'bass+8': clef="clefs.F"; octave = 1; break; + case 'alto+8': clef="clefs.C"; octave = 1; break; + case 'treble-8': clef = "clefs.G"; octave = -1; break; + case 'tenor-8':clef="clefs.C"; octave = -1; break; + case 'bass-8': clef="clefs.F"; octave = -1; break; + case 'alto-8': clef="clefs.C"; octave = -1; break; + case 'none': return null; + case 'perc': clef="clefs.perc"; break; + default: abselem.addChild(new abc_relative_element("clef="+elem.type, 0, 0, undefined, {type:"debug"})); + } + // if (elem.verticalPos) { + // pitch = elem.verticalPos; + // } + var dx =5; + if (clef) { + abselem.addRight(new abc_relative_element(clef, dx, abc_glyphs.getSymbolWidth(clef), elem.clefPos)); + + if (clef === 'clefs.G') { + abselem.top = 13; + abselem.bottom = -1; + } else { + abselem.top = 10; + abselem.bottom = 2; + } + if (octave !== 0) { + var scale = 2 / 3; + var adjustspacing = (abc_glyphs.getSymbolWidth(clef) - abc_glyphs.getSymbolWidth("8") * scale) / 2; + abselem.addRight(new abc_relative_element("8", dx + adjustspacing, abc_glyphs.getSymbolWidth("8") * scale, (octave > 0) ? abselem.top + 3 : abselem.bottom - 1, { + scalex: scale, + scaley: scale + })); + abselem.top += 2; + } + } + return abselem; + }; + +})(); + +var abc_create_clef = createClef; + +// abc_create_key_signature.js +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + + + +var createKeySignature; + +(function() { + + createKeySignature = function(elem, tuneNumber) { + if (!elem.accidentals || elem.accidentals.length === 0) + return null; + var abselem = new abc_absolute_element(elem, 0, 10, 'staff-extra', tuneNumber); + abselem.isKeySig = true; + var dx = 0; + abc_common.each(elem.accidentals, function(acc) { + var symbol; + switch(acc.acc) { + case "sharp": symbol = "accidentals.sharp"; break; + case "natural": symbol = "accidentals.nat"; break; + case "flat": symbol = "accidentals.flat"; break; + case "quartersharp": symbol = "accidentals.halfsharp"; break; + case "quarterflat": symbol = "accidentals.halfflat"; break; + default: symbol = "accidentals.flat"; + } + abselem.addRight(new abc_relative_element(symbol, dx, abc_glyphs.getSymbolWidth(symbol), acc.verticalPos, {thickness: abc_glyphs.symbolHeightInPitches(symbol)})); + dx += abc_glyphs.getSymbolWidth(symbol) + 2; + }, this); + return abselem; + }; +})(); + +var abc_create_key_signature = createKeySignature; + +// abc_create_time_signature.js +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + + +var createTimeSignature; + +(function() { + + createTimeSignature = function(elem, tuneNumber) { + var abselem = new abc_absolute_element(elem,0,10, 'staff-extra', tuneNumber); + if (elem.type === "specified") { + var x = 0; + for (var i = 0; i < elem.value.length; i++) { + if (i !== 0) { + abselem.addRight(new abc_relative_element('+', x+1, abc_glyphs.getSymbolWidth("+"), 6, {thickness: abc_glyphs.symbolHeightInPitches("+")})); + x += abc_glyphs.getSymbolWidth("+")+2; + } + if (elem.value[i].den) { + var numWidth = 0; + for (var i2 = 0; i2 < elem.value[i].num.length; i2++) + numWidth += abc_glyphs.getSymbolWidth(elem.value[i].num.charAt(i2)); + var denWidth = 0; + for (i2 = 0; i2 < elem.value[i].num.length; i2++) + denWidth += abc_glyphs.getSymbolWidth(elem.value[i].den.charAt(i2)); + var maxWidth = Math.max(numWidth, denWidth); + abselem.addRight(new abc_relative_element(elem.value[i].num, x+(maxWidth-numWidth)/2, numWidth, 8, { thickness: abc_glyphs.symbolHeightInPitches(elem.value[i].num.charAt(0)) })); + abselem.addRight(new abc_relative_element(elem.value[i].den, x+(maxWidth-denWidth)/2, denWidth, 4, { thickness: abc_glyphs.symbolHeightInPitches(elem.value[i].den.charAt(0)) })); + x += maxWidth; + } else { + var thisWidth = 0; + for (var i3 = 0; i3 < elem.value[i].num.length; i3++) + thisWidth += abc_glyphs.getSymbolWidth(elem.value[i].num.charAt(i3)); + abselem.addRight(new abc_relative_element(elem.value[i].num, x, thisWidth, 6, { thickness: abc_glyphs.symbolHeightInPitches(elem.value[i].num.charAt(0)) })); + x += thisWidth; + } + } + } else if (elem.type === "common_time") { + abselem.addRight(new abc_relative_element("timesig.common", 0, abc_glyphs.getSymbolWidth("timesig.common"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.common") })); + + } else if (elem.type === "cut_time") { + abselem.addRight(new abc_relative_element("timesig.cut", 0, abc_glyphs.getSymbolWidth("timesig.cut"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.cut") })); + } else if (elem.type === "tempus_imperfectum") { + abselem.addRight(new abc_relative_element("timesig.imperfectum", 0, abc_glyphs.getSymbolWidth("timesig.imperfectum"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.imperfectum") })); + } else if (elem.type === "tempus_imperfectum_prolatio") { + abselem.addRight(new abc_relative_element("timesig.imperfectum2", 0, abc_glyphs.getSymbolWidth("timesig.imperfectum2"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.imperfectum2") })); + } else if (elem.type === "tempus_perfectum") { + abselem.addRight(new abc_relative_element("timesig.perfectum", 0, abc_glyphs.getSymbolWidth("timesig.perfectum"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.perfectum") })); + } else if (elem.type === "tempus_perfectum_prolatio") { + abselem.addRight(new abc_relative_element("timesig.perfectum2", 0, abc_glyphs.getSymbolWidth("timesig.perfectum2"), 6, { thickness: abc_glyphs.symbolHeightInPitches("timesig.perfectum2") })); + } else { + console.log("time signature:",elem); + } + return abselem; + }; +})(); + +var abc_create_time_signature = createTimeSignature; + +// abc_dynamic_decoration.js: Definition of the DynamicDecoration class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var DynamicDecoration = function DynamicDecoration(anchor, dec, position) { + this.anchor = anchor; + this.dec = dec; + if (position === 'below') + this.volumeHeightBelow = 5; + else + this.volumeHeightAbove = 5; + this.pitch = undefined; // This will be set later +}; + +DynamicDecoration.prototype.setUpperAndLowerElements = function(positionY) { + if (this.volumeHeightAbove) + this.pitch = positionY.volumeHeightAbove; + else + this.pitch = positionY.volumeHeightBelow; +}; + +DynamicDecoration.prototype.draw = function(renderer, linestartx, lineendx) { + if (this.pitch === undefined) + window.console.error("Dynamic Element y-coordinate not set."); + var scalex = 1; + var scaley = 1; + renderer.printSymbol(this.anchor.x, this.pitch, this.dec, scalex, scaley, renderer.addClasses('decoration')); +}; + +var abc_dynamic_decoration = DynamicDecoration; + +/** + * sprintf() for JavaScript v.0.4 + * + Copyright (c) 2007-present, Alexandru Mărășteanu + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of this software nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR + ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +//function str_repeat(i, m) { for (var o = []; m > 0; o[--m] = i); return(o.join('')); } + +var sprintf = function() { + var i = 0, a, f = arguments[i++], o = [], m, p, c, x; + while (f) { + if (m = /^[^\x25]+/.exec(f)) o.push(m[0]); + else if (m = /^\x25{2}/.exec(f)) o.push('%'); + else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) { + if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) throw("Too few arguments."); + if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) + throw("Expecting number but found " + typeof(a)); + switch (m[7]) { + case 'b': a = a.toString(2); break; + case 'c': a = String.fromCharCode(a); break; + case 'd': a = parseInt(a); break; + case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break; + case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break; + case 'o': a = a.toString(8); break; + case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break; + case 'u': a = Math.abs(a); break; + case 'x': a = a.toString(16); break; + case 'X': a = a.toString(16).toUpperCase(); break; + } + a = (/[def]/.test(m[7]) && m[2] && a > 0 ? '+' + a : a); + c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' '; + x = m[5] - String(a).length; + p = m[5] ? str_repeat(c, x) : ''; + o.push(m[4] ? a + p : p + a); + } + else throw ("Huh ?!"); + f = f.substring(m[0].length); + } + return o.join(''); +}; + +var sprintf_1 = sprintf; + +// abc_crescendo_element.js: Definition of the CrescendoElem class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var CrescendoElem = function CrescendoElem(anchor1, anchor2, dir, positioning) { + this.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the "beginning" of the line - after keysig) + this.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line) + this.dir = dir; // either "<" or ">" + if (positioning === 'above') + this.dynamicHeightAbove = 4; + else + this.dynamicHeightBelow = 4; + this.pitch = undefined; // This will be set later +}; + +CrescendoElem.prototype.setUpperAndLowerElements = function(positionY) { + if (this.dynamicHeightAbove) + this.pitch = positionY.dynamicHeightAbove; + else + this.pitch = positionY.dynamicHeightBelow; +}; + +CrescendoElem.prototype.draw = function (renderer) { + if (this.pitch === undefined) + window.console.error("Crescendo Element y-coordinate not set."); + var y = renderer.calcY(this.pitch) + 4; // This is the top pixel to use (it is offset a little so that it looks good with the volume marks.) + var height = 8; + if (this.dir === "<") { + this.drawLine(renderer, y+height/2, y); + this.drawLine(renderer, y+height/2, y+height); + } else { + this.drawLine(renderer, y, y+height/2); + this.drawLine(renderer, y+height, y+height/2); + } +}; + +CrescendoElem.prototype.drawLine = function (renderer, y1, y2) { + // TODO-PER: This is just a quick hack to make the dynamic marks not crash if they are mismatched. See the slur treatment for the way to get the beginning and end. + var left = this.anchor1 ? this.anchor1.x : 0; + var right = this.anchor2 ? this.anchor2.x : 800; + var pathString = sprintf_1("M %f %f L %f %f", + left, y1, right, y2); + renderer.printPath({path:pathString, stroke:"#000000", 'class': renderer.addClasses('decoration')}); +}; + +var abc_crescendo_element = CrescendoElem; + +// abc_tie_element.js: Definition of the TieElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var TieElem = function TieElem(options) { +// console.log("constructor", options.anchor1 ? options.anchor1.pitch : "N/A", options.anchor2 ? options.anchor2.pitch : "N/A", options.isTie, options.isGrace); + this.anchor1 = options.anchor1; // must have a .x and a .pitch, and a .parent property or be null (means starts at the "beginning" of the line - after keysig) + this.anchor2 = options.anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line) + if (options.isGrace) + this.isGrace = true; + if (options.fixedY) + this.fixedY = true; + if (options.stemDir) + this.stemDir = options.stemDir; + if (options.voiceNumber !== undefined) + this.voiceNumber = options.voiceNumber; + this.internalNotes = []; +}; + +TieElem.prototype.addInternalNote = function(note) { + this.internalNotes.push(note); +}; + +TieElem.prototype.setEndAnchor = function(anchor2) { +// console.log("end", this.anchor1 ? this.anchor1.pitch : "N/A", anchor2 ? anchor2.pitch : "N/A", this.isTie, this.isGrace); + this.anchor2 = anchor2; // must have a .x and a .pitch property or be null (means ends at the end of the line) +}; + +// If we encounter a repeat sign, then we don't want to extend either a tie or a slur past it, so these are called to be a limit. +TieElem.prototype.setStartX = function(startLimitElem) { + this.startLimitX = startLimitElem; +}; + +TieElem.prototype.setEndX = function(endLimitElem) { + this.endLimitX = endLimitElem; +}; + +TieElem.prototype.setHint = function () { + this.hint = true; +}; + +TieElem.prototype.setUpperAndLowerElements = function(positionY) { + // Doesn't depend on the highest and lowest, so there's nothing to do here. +}; + +TieElem.prototype.calcTieDirection = function () { + // The rules: + // 1) If it is in a grace note group, then the direction is always BELOW. + // 2) If it is in a single voice, then the direction is always OPPOSITE of the stem (or where the stem would have been in the case of whole notes.) + // 3) If the stem direction is forced (probably because there are two voices on the same line), then the direction is the SAME as the stem direction. + + if (this.isGrace) + this.above = false; + else if (this.voiceNumber === 0) + this.above = true; + else if (this.voiceNumber > 0) + this.above = false; + else { + var referencePitch; + if (this.anchor1) + referencePitch = this.anchor1.pitch; + else if (this.anchor2) + referencePitch = this.anchor2.pitch; + else + referencePitch = 14; // TODO-PER: this can't really happen normally. This would imply that a tie crossed over three lines, something like "C-\nz\nC" + // Put the arc in the opposite direction of the stem. That isn't always the pitch if one or both of the notes are beamed with something that affects its stem. + if ((this.anchor1 && this.anchor1.stemDir === 'down') && (this.anchor2 && this.anchor2.stemDir === "down")) + this.above = true; + else if ((this.anchor1 && this.anchor1.stemDir === 'up') && (this.anchor2 && this.anchor2.stemDir === "up")) + this.above = false; + else if (this.anchor1 && this.anchor2) + this.above = referencePitch >= 6; + else if (this.anchor1) + this.above = this.anchor1.stemDir === "down"; + else if (this.anchor2) + this.above = this.anchor2.stemDir === "down"; + else + this.above = referencePitch >= 6; + } +}; + +// From "standard music notation practice" by Music Publishers’ Association: +// 1) Slurs are placed under the note heads if all stems go up. +// 2) Slurs are placed over the note heads if all stems go down. +// 3) If there are both up stems and down stems, prefer placing the slur over. +// 4) When the staff has opposite stemmed voices, all slurs should be on the stemmed side. + +TieElem.prototype.calcSlurDirection = function () { + if (this.isGrace) + this.above = false; + else if (this.voiceNumber === 0) + this.above = true; + else if (this.voiceNumber > 0) + this.above = false; + else { + var hasDownStem = false; + if (this.anchor1 && this.anchor1.stemDir === "down") + hasDownStem = true; + if (this.anchor2 && this.anchor2.stemDir === "down") + hasDownStem = true; + for (var i = 0; i < this.internalNotes.length; i++) { + var n = this.internalNotes[i]; + if (n.stemDir === "down") + hasDownStem = true; + } + this.above = hasDownStem; + } +}; + +TieElem.prototype.calcX = function (lineStartX, lineEndX) { + if (this.anchor1) { + this.startX = this.anchor1.x; // The normal case where there is a starting element to attach to. + if (this.anchor1.scalex < 1) // this is a grace note - don't offset the tie as much. + this.startX -= 3; + } else if (this.startLimitX) + this.startX = this.startLimitX.x+this.startLimitX.w; // if there is no start element, but there is a repeat mark before the start of the line. + else + this.startX = lineStartX; // There is no element and no repeat mark: extend to the beginning of the line. + + if (this.anchor2) + this.endX = this.anchor2.x; // The normal case where there is a starting element to attach to. + else if (this.endLimitX) + this.endX = this.endLimitX.x; // if there is no start element, but there is a repeat mark before the start of the line. + else + this.endX = lineEndX; // There is no element and no repeat mark: extend to the beginning of the line. +}; + +TieElem.prototype.calcTieY = function () { + // If the tie comes from another line, then one or both anchors will be missing. + if (this.anchor1) + this.startY = this.anchor1.pitch; + else if (this.anchor2) + this.startY = this.anchor2.pitch; + else + this.startY = this.above ? 14 : 0; + + if (this.anchor2) + this.endY = this.anchor2.pitch; + else if (this.anchor1) + this.endY = this.anchor1.pitch; + else + this.endY = this.above ? 14 : 0; +}; + +// From "standard music notation practice" by Music Publishers’ Association: +// 1) If the anchor note is down stem, the slur points to the note head. +// 2) If the anchor note is up stem, and the slur is over, then point to middle of stem. + +TieElem.prototype.calcSlurY = function () { + if (this.anchor1 && this.anchor2) { + if (this.above && this.anchor1.stemDir === "up" && !this.fixedY) { + this.startY = (this.anchor1.highestVert + this.anchor1.pitch) / 2; + this.startX += this.anchor1.w/2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right. + } else + this.startY = this.anchor1.pitch; + + // If the closing note has an up stem, and it is beamed, and it isn't the first note in the beam, then the beam will get in the way. + var beamInterferes = this.anchor2.parent.beam && this.anchor2.parent.beam.stemsUp && this.anchor2.parent.beam.elems[0] !== this.anchor2.parent; + var midPoint = (this.anchor2.highestVert + this.anchor2.pitch) / 2; + if (this.above && this.anchor2.stemDir === "up" && !this.fixedY && !beamInterferes && (midPoint < this.startY)) { + this.endY = midPoint; + this.endX += this.anchor2.w/2; // When going to the middle of the stem, bump the line to the right a little bit to make it look right. + } else + this.endY = this.above && beamInterferes ? this.anchor2.highestVert : this.anchor2.pitch; + + } else if (this.anchor1) { + this.startY = this.endY = this.anchor1.pitch; + } else if (this.anchor2) { + this.startY = this.endY = this.anchor2.pitch; + } else { + // This is the case where the slur covers the entire line. + // TODO-PER: figure out where the real top and bottom of the line are. + this.startY = this.above ? 14 : 0; + this.endY = this.above ? 14 : 0; + } +}; + +TieElem.prototype.avoidCollisionAbove = function () { + // Double check that an interior note in the slur isn't so high that it interferes. + if (this.above) { + var maxInnerHeight = -50; + for (var i = 0; i < this.internalNotes.length; i++) { + if (this.internalNotes[i].highestVert > maxInnerHeight) + maxInnerHeight = this.internalNotes[i].highestVert; + } + if (maxInnerHeight > this.startY && maxInnerHeight > this.endY) + this.startY = this.endY = maxInnerHeight - 1; + } +}; + +TieElem.prototype.layout = function (lineStartX, lineEndX) { + // We now have all of the input variables set, so we can figure out the start and ending x,y coordinates, and finalize the direction of the arc. + + // Ties and slurs are handled a little differently, so do calculations for them separately. + if (!this.anchor1 || !this.anchor2) + this.isTie = true; // if the slur goes off the end of the line, then draw it like a tie + else if (this.anchor1.pitch === this.anchor2.pitch && this.internalNotes.length === 0) + this.isTie = true; + else + this.isTie = false; + + // TODO-PER: Not sure why this would be needed, but it would be better to figure out a way to have the anchors be immutable here anyway. + // if (this.isTie) { + // if (this.anchor1) // this can happen if the tie comes from the previous line. + // this.anchor1.isTie = true; + // if (this.anchor2) // this can happen if the tie does not go to the next line. + // this.anchor2.isTie = true; + // } + + if (this.isTie) { + this.calcTieDirection(); + // TODO-PER: Not sure why this would be needed, but it would be better to figure out a way to have the anchors be immutable here anyway. + // if (this.anchor1) // this can happen if the tie comes from the previous line. + // this.anchor1.tieAbove = this.above; + // if (this.anchor2) // this can happen if the tie goes to the next line. + // this.anchor2.tieAbove = this.above; + this.calcX(lineStartX, lineEndX); + this.calcTieY(); + + } else { + this.calcSlurDirection(); + this.calcX(lineStartX, lineEndX); + this.calcSlurY(); + } + this.avoidCollisionAbove(); +}; + +TieElem.prototype.draw = function (renderer, linestartx, lineendx) { + this.layout(linestartx, lineendx); + + var klass; + if (this.hint) + klass = "abcjs-hint"; + var fudgeY = this.fixedY ? 1.5 : 0; // TODO-PER: This just compensates for drawArc, which contains too much knowledge of ties and slurs. + renderer.drawArc(this.startX, this.endX, this.startY+fudgeY, this.endY+fudgeY, this.above, klass, this.isTie); + +}; + +var abc_tie_element = TieElem; + +// abc_decoration.js: Creates a data structure suitable for printing a line of abc +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) & Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +/*global window */ + + + + + + + +var Decoration; + +(function() { + + Decoration = function Decoration() { + this.startDiminuendoX = undefined; + this.startCrescendoX = undefined; + this.minTop = 12; // TODO-PER: this is assuming a 5-line staff. Pass that info in. + this.minBottom = 0; + }; + + var closeDecoration = function(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch) { + var yPos; + for (var i=0;i9) yPos++; // take up some room of those that are above + var deltaX = width/2; + if (abc_glyphs.getSymbolAlign(symbol)!=="center") { + deltaX -= (abc_glyphs.getSymbolWidth(symbol)/2); + } + abselem.addChild(new abc_relative_element(symbol, deltaX, abc_glyphs.getSymbolWidth(symbol), yPos)); + } + if (decoration[i]==="slide" && abselem.heads[0]) { + var yPos2 = abselem.heads[0].pitch; + yPos2 -= 2; // TODO-PER: not sure what this fudge factor is. + var blank1 = new abc_relative_element("", -roomtaken-15, 0, yPos2-1); + var blank2 = new abc_relative_element("", -roomtaken-5, 0, yPos2+1); + abselem.addChild(blank1); + abselem.addChild(blank2); + voice.addOther(new abc_tie_element({ anchor1: blank1, anchor2: blank2, fixedY: true})); + } + } + if (yPos === undefined) + yPos = pitch; + + return { above: yPos, below: abselem.bottom }; + }; + + var volumeDecoration = function(voice, decoration, abselem, positioning) { + for (var i=0;i minBottom) + y = minBottom; + } + return y; + } + function textDecoration(text, placement) { + var y = getPlacement(placement); + var textFudge = 2; + var textHeight = 5; + // TODO-PER: Get the height of the current font and use that for the thickness. + abselem.addChild(new abc_relative_element(text, width/2, 0, y+textFudge, {type:"decoration", klass: 'ornament', thickness: 3})); + + incrementPlacement(placement, textHeight); + } + function symbolDecoration(symbol, placement) { + var deltaX = width/2; + if (abc_glyphs.getSymbolAlign(symbol) !== "center") { + deltaX -= (abc_glyphs.getSymbolWidth(symbol) / 2); + } + var height = abc_glyphs.symbolHeightInPitches(symbol) + 1; // adding a little padding so nothing touches. + var y = getPlacement(placement); + y = (placement === 'above') ? y + height/2 : y - height/2;// Center the element vertically. + abselem.addChild(new abc_relative_element(symbol, deltaX, abc_glyphs.getSymbolWidth(symbol), y, { klass: 'ornament', thickness: abc_glyphs.symbolHeightInPitches(symbol) })); + + incrementPlacement(placement, height); + } + + var symbolList = { + "+": "scripts.stopped", + "open": "scripts.open", + "snap": "scripts.snap", + "wedge": "scripts.wedge", + "thumb": "scripts.thumb", + "shortphrase": "scripts.shortphrase", + "mediumphrase": "scripts.mediumphrase", + "longphrase": "scripts.longphrase", + "trill": "scripts.trill", + "roll": "scripts.roll", + "irishroll": "scripts.roll", + "marcato": "scripts.umarcato", + "dmarcato": "scripts.dmarcato", + "umarcato": "scripts.umarcato", + "turn": "scripts.turn", + "uppermordent": "scripts.prall", + "pralltriller": "scripts.prall", + "mordent": "scripts.mordent", + "lowermordent": "scripts.mordent", + "downbow": "scripts.downbow", + "upbow": "scripts.upbow", + "fermata": "scripts.ufermata", + "invertedfermata": "scripts.dfermata", + "breath": ",", + "coda": "scripts.coda", + "segno": "scripts.segno" + }; + + var hasOne = false; + for (var i=0;i", positioning)); + } + if (crescendo) { + voice.addOther(new abc_crescendo_element(crescendo.start, crescendo.stop, "<", positioning)); + } + }; + + Decoration.prototype.createDecoration = function(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch, positioning, hasVocals) { + if (!positioning) + positioning = { ornamentPosition: 'above', volumePosition: hasVocals ? 'above' :'below', dynamicPosition: hasVocals ? 'above' : 'below' }; + // These decorations don't affect the placement of other decorations + volumeDecoration(voice, decoration, abselem, positioning.volumePosition); + this.dynamicDecoration(voice, decoration, abselem, positioning.dynamicPosition); + compoundDecoration(decoration, pitch, width, abselem, dir); + + // treat staccato, accent, and tenuto first (may need to shift other markers) + var yPos = closeDecoration(voice, decoration, pitch, width, abselem, roomtaken, dir, minPitch); + // yPos is an object containing 'above' and 'below'. That is the placement of the next symbol on either side. + + yPos.above = Math.max(yPos.above, this.minTop); + var hasOne = stackedDecoration(decoration, width, abselem, yPos, positioning.ornamentPosition, this.minTop, this.minBottom); + leftDecoration(decoration, abselem, roomtaken); + }; + +})(); + +var abc_decoration = Decoration; + +// abc_ending_element.js: Definition of the EndingElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var EndingElem = function EndingElem(text, anchor1, anchor2) { + this.text = text; // text to be displayed top left + this.anchor1 = anchor1; // must have a .x property or be null (means starts at the "beginning" of the line - after keysig) + this.anchor2 = anchor2; // must have a .x property or be null (means ends at the end of the line) + this.endingHeightAbove = 5; + this.pitch = undefined; // This will be set later +}; + +EndingElem.prototype.setUpperAndLowerElements = function(positionY) { + this.pitch = positionY.endingHeightAbove - 2; +}; + +EndingElem.prototype.draw = function (renderer, linestartx, lineendx) { + if (this.pitch === undefined) + window.console.error("Ending Element y-coordinate not set."); + var y = renderer.calcY(this.pitch); + var height = 20; + var pathString; + if (this.anchor1) { + linestartx = this.anchor1.x+this.anchor1.w; + pathString = sprintf_1("M %f %f L %f %f", + linestartx, y, linestartx, y+height); + renderer.printPath({path:pathString, stroke:"#000000", fill:"#000000", 'class': renderer.addClasses('ending')}); + renderer.renderText(linestartx+5, renderer.calcY(this.pitch-0.5), this.text, 'repeatfont', 'ending',"start"); + } + + if (this.anchor2) { + lineendx = this.anchor2.x; + pathString = sprintf_1("M %f %f L %f %f", + lineendx, y, lineendx, y+height); + renderer.printPath({path:pathString, stroke:"#000000", fill:"#000000", 'class': renderer.addClasses('ending')}); + } + + + pathString = sprintf_1("M %f %f L %f %f", + linestartx, y, lineendx, y); + renderer.printPath({path:pathString, stroke:"#000000", fill:"#000000", 'class': renderer.addClasses('ending')}); +}; + +var abc_ending_element = EndingElem; + +// abc_staff_group_element.js: Definition of the StaffGroupElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +/*globals console */ + + + +// StaffGroupElement contains all the elements that go together to make one line of music. +// That might be multiple staves that are tied together, and it might be multiple voices on one staff. +// +// Methods: +// constructor: some basic initialization +// addVoice(): Called once for each voice. May add a new staff if needed. +// finished(): Called only internally by layout() +// layout(): This does all the layout. It sets the following: spacingunits, startx, minspace, w, and the x-coordinate of each element in each voice. +// draw(): Calls the underlying methods on the voice objects to do the drawing. Sets y and height. +// +// Members: +// staffs: an array of all the staves in this group. Each staff contains the following elements: +// { top, bottom, highest, lowest, y } +// voices: array of VoiceElement objects. This is mostly passed in, but the VoiceElement objects are modified here. +// +// spacingunits: number of relative x-units in the line. Used by the calling function to pass back in as the "spacing" input parameter. +// TODO-PER: This should actually be passed back as a return value. +// minspace: smallest space between two notes. Used by the calling function to pass back in as the "spacing" input parameter. +// TODO-PER: This should actually be passed back as a return value. +// startx: The left edge, taking the margin and the optional voice name. Used by the draw() method. +// w: The width of the line. Used by calling function to pass back in as the "spacing" input parameter, and the draw() method. +// TODO-PER: This should actually be passed back as a return value. (TODO-PER: in pixels or spacing units?) +// y: The top of the staff group, in pixels. This is set in the draw method. +// TODO-PER: Where is that used? It looks like it might not be needed. +// height: Set in the draw() method to the height actually used. Used by the calling function to know where to start the next staff group. +// TODO-PER: This should actually be set in the layout method and passed back as a return value. + +var StaffGroupElement = function() { + this.voices = []; + this.staffs = []; + this.brace = undefined; //tony +}; + +StaffGroupElement.prototype.setLimit = function(member, voice) { + if (!voice.specialY[member]) return; + if (!voice.staff.specialY[member]) + voice.staff.specialY[member] = voice.specialY[member]; + else + voice.staff.specialY[member] = Math.max(voice.staff.specialY[member], voice.specialY[member]); +}; + +StaffGroupElement.prototype.addVoice = function (voice, staffnumber, stafflines) { + var voiceNum = this.voices.length; + this.voices[voiceNum] = voice; + if (this.staffs[staffnumber]) + this.staffs[staffnumber].voices.push(voiceNum); + else { + // TODO-PER: how does the min/max change when stafflines is not 5? + this.staffs[this.staffs.length] = { + top: 10, + bottom: 2, + lines: stafflines, + voices: [voiceNum], + specialY: { + tempoHeightAbove: 0, + partHeightAbove: 0, + volumeHeightAbove: 0, + dynamicHeightAbove: 0, + endingHeightAbove: 0, + chordHeightAbove: 0, + lyricHeightAbove: 0, + + lyricHeightBelow: 0, + chordHeightBelow: 0, + volumeHeightBelow: 0, + dynamicHeightBelow: 0 + } + }; + } + voice.staff = this.staffs[staffnumber]; +}; + +StaffGroupElement.prototype.setStaffLimits = function (voice) { + voice.staff.top = Math.max(voice.staff.top, voice.top); + voice.staff.bottom = Math.min(voice.staff.bottom, voice.bottom); + this.setLimit('tempoHeightAbove', voice); + this.setLimit('partHeightAbove', voice); + this.setLimit('volumeHeightAbove', voice); + this.setLimit('dynamicHeightAbove', voice); + this.setLimit('endingHeightAbove', voice); + this.setLimit('chordHeightAbove', voice); + this.setLimit('lyricHeightAbove', voice); + this.setLimit('lyricHeightBelow', voice); + this.setLimit('chordHeightBelow', voice); + this.setLimit('volumeHeightBelow', voice); + this.setLimit('dynamicHeightBelow', voice); +}; + +StaffGroupElement.prototype.setUpperAndLowerElements = function(renderer) { + // Each staff already has the top and bottom set, now we see if there are elements that are always on top and bottom, and resolve their pitch. + // Also, get the overall height of all the staves in this group. + var lastStaffBottom; + for (var i = 0; i < this.staffs.length; i++) { + var staff = this.staffs[i]; + // the vertical order of elements that are above is: tempo, part, volume/dynamic, ending/chord, lyric + // the vertical order of elements that are below is: lyric, chord, volume/dynamic + var positionY = { + tempoHeightAbove: 0, + partHeightAbove: 0, + volumeHeightAbove: 0, + dynamicHeightAbove: 0, + endingHeightAbove: 0, + chordHeightAbove: 0, + lyricHeightAbove: 0, + + lyricHeightBelow: 0, + chordHeightBelow: 0, + volumeHeightBelow: 0, + dynamicHeightBelow: 0 + }; + + if (staff.specialY.lyricHeightAbove) { staff.top += staff.specialY.lyricHeightAbove; positionY.lyricHeightAbove = staff.top; } + if (staff.specialY.chordHeightAbove) { staff.top += staff.specialY.chordHeightAbove; positionY.chordHeightAbove = staff.top; } + if (staff.specialY.endingHeightAbove) { + if (staff.specialY.chordHeightAbove) + staff.top += 2; + else + staff.top += staff.specialY.endingHeightAbove; + positionY.endingHeightAbove = staff.top; + } + if (staff.specialY.dynamicHeightAbove && staff.specialY.volumeHeightAbove) { + staff.top += Math.max(staff.specialY.dynamicHeightAbove, staff.specialY.volumeHeightAbove); + positionY.dynamicHeightAbove = staff.top; + positionY.volumeHeightAbove = staff.top; + } else if (staff.specialY.dynamicHeightAbove) { + staff.top += staff.specialY.dynamicHeightAbove; positionY.dynamicHeightAbove = staff.top; + } else if (staff.specialY.volumeHeightAbove) { staff.top += staff.specialY.volumeHeightAbove; positionY.volumeHeightAbove = staff.top; } + if (staff.specialY.partHeightAbove) { staff.top += staff.specialY.partHeightAbove; positionY.partHeightAbove = staff.top; } + if (staff.specialY.tempoHeightAbove) { staff.top += staff.specialY.tempoHeightAbove; positionY.tempoHeightAbove = staff.top; } + + if (staff.specialY.lyricHeightBelow) { positionY.lyricHeightBelow = staff.bottom; staff.bottom -= staff.specialY.lyricHeightBelow; } + if (staff.specialY.chordHeightBelow) { positionY.chordHeightBelow = staff.bottom; staff.bottom -= staff.specialY.chordHeightBelow; } + if (staff.specialY.volumeHeightBelow && staff.specialY.dynamicHeightBelow) { + positionY.volumeHeightBelow = staff.bottom; + positionY.dynamicHeightBelow = staff.bottom; + staff.bottom -= Math.max(staff.specialY.volumeHeightBelow, staff.specialY.dynamicHeightBelow); + } else if (staff.specialY.volumeHeightBelow) { + positionY.volumeHeightBelow = staff.bottom; staff.bottom -= staff.specialY.volumeHeightBelow; + } else if (staff.specialY.dynamicHeightBelow) { + positionY.dynamicHeightBelow = staff.bottom; staff.bottom -= staff.specialY.dynamicHeightBelow; + } + + for (var j = 0; j < staff.voices.length; j++) { + var voice = this.voices[staff.voices[j]]; + voice.setUpperAndLowerElements(positionY); + } + // We might need a little space in between staves if the staves haven't been pushed far enough apart by notes or extra vertical stuff. + // Only try to put in extra space if this isn't the top staff. + if (lastStaffBottom !== undefined) { + var thisStaffTop = staff.top - 10; + var forcedSpacingBetween = lastStaffBottom + thisStaffTop; + var minSpacingInPitches = renderer.spacing.systemStaffSeparation/abc_spacing.STEP; + var addedSpace = minSpacingInPitches - forcedSpacingBetween; + if (addedSpace > 0) + staff.top += addedSpace; + } + lastStaffBottom = 2 - staff.bottom; // the staff starts at position 2 and the bottom variable is negative. Therefore to find out how large the bottom is, we reverse the sign of the bottom, and add the 2 in. + + // Now we need a little margin on the top, so we'll just throw that in. + //staff.top += 4; + //console.log("Staff Y: ",i,heightInPitches,staff.top,staff.bottom); + } + //console.log("Staff Height: ",heightInPitches,this.height); +}; + +StaffGroupElement.prototype.finished = function() { + for (var i=0;i epsilon) { + othervoices.push(this.voices[i]); + //console.log("out: voice ",i); + } else { + currentvoices.push(this.voices[i]); + //if (debug) console.log("in: voice ",i); + } + } + + // among the current duration level find the one which needs starting furthest right + spacingunit = 0; // number of spacingunits coming from the previously laid out element to this one + var spacingduration = 0; + for (i=0;ix) { + x=currentvoices[i].getNextX(); + spacingunit=currentvoices[i].getSpacingUnits(); + spacingduration = currentvoices[i].spacingduration; + } + } + spacingunits+=spacingunit; + minspace = Math.min(minspace,spacingunit); + if (debug) console.log("currentduration: ",currentduration, spacingunits, minspace); + + for (i=0;i0) { + x = voicechildx; //update x + for (var j=0;jx) { + x=this.voices[i].getNextX(); + spacingunit=this.voices[i].getSpacingUnits(); + } + } + //console.log("greatest remaining",spacingunit,x); + spacingunits+=spacingunit; + this.w = x; + + for (i=0;i1) { + renderer.printStem(this.startx, 0.6, topLine, bottomLine); + } + renderer.y = startY; +}; + +var abc_staff_group_element = StaffGroupElement; + +// abc_tempo_element.js: Definition of the TempoElement class. +// Copyright (C) 2014-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + + +var TempoElement; +(function() { + var totalHeightInPitches = 5; + + TempoElement = function TempoElement(tempo, tuneNumber, createNoteHead) { + this.tempo = tempo; + this.tuneNumber = tuneNumber; + this.tempoHeightAbove = totalHeightInPitches; + this.pitch = undefined; // This will be set later + if (this.tempo.duration && !this.tempo.suppressBpm) { + this.note = this.createNote(createNoteHead, tempo, tuneNumber); + } + }; + + TempoElement.prototype.setUpperAndLowerElements = function(positionY) { // TODO-PER: This might not be called. + this.pitch = positionY.tempoHeightAbove; + this.top = positionY.tempoHeightAbove; + this.bottom = positionY.tempoHeightAbove; + if (this.note) { + var tempoPitch = this.pitch - totalHeightInPitches + 1; // The pitch we receive is the top of the allotted area: change that to practically the bottom. + this.note.top = tempoPitch; + this.note.bottom = tempoPitch; + for (var i = 0; i < this.note.children.length; i++) { + var child = this.note.children[i]; + child.top += tempoPitch; + child.bottom += tempoPitch; + child.pitch += tempoPitch; + if (child.pitch2 !== undefined) + child.pitch2 += tempoPitch; + } + } + }; + + TempoElement.prototype.setX = function (x) { + this.x = x; + }; + + TempoElement.prototype.createNote = function(createNoteHead, tempo, tuneNumber) { + var temposcale = 0.75; + var duration = tempo.duration[0]; // TODO when multiple durations + var absElem = new abc_absolute_element(tempo, duration, 1, 'tempo', tuneNumber); + // There aren't an infinite number of note values, but we are passed a float, so just in case something is off upstream, + // merge all of the in between points. + var dot; + var flag; + var note; + if (duration <= 1/32) { note = "noteheads.quarter"; flag = "flags.u32nd"; dot = 0; } + else if (duration <= 1/16) { note = "noteheads.quarter"; flag = "flags.u16th"; dot = 0; } + else if (duration <= 3/32) { note = "noteheads.quarter"; flag = "flags.u16nd"; dot = 1; } + else if (duration <= 1/8) { note = "noteheads.quarter"; flag = "flags.u8th"; dot = 0; } + else if (duration <= 3/16) { note = "noteheads.quarter"; flag = "flags.u8th"; dot = 1; } + else if (duration <= 1/4) { note = "noteheads.quarter"; dot = 0; } + else if (duration <= 3/8) { note = "noteheads.quarter"; dot = 1; } + else if (duration <= 1/2) { note = "noteheads.half"; dot = 0; } + else if (duration <= 3/4) { note = "noteheads.half"; dot = 1; } + else if (duration <= 1) { note = "noteheads.whole"; dot = 0; } + else if (duration <= 1.5) { note = "noteheads.whole"; dot = 1; } + else if (duration <= 2) { note = "noteheads.dbl"; dot = 0; } + else { note = "noteheads.dbl"; dot = 1; } + + var ret = createNoteHead(absElem, + note, + { verticalPos: 0}, // This is just temporary: we'll offset the vertical positioning when we get the actual vertical spot. + "up", + 0, + 0, + flag, + dot, + 0, + temposcale, + [], + false + ); + var tempoNote = ret.notehead; + absElem.addHead(tempoNote); + var stem; + if (note !== "noteheads.whole" && note !== "noteheads.dbl") { + var p1 = 1 / 3 * temposcale; + var p2 = 7 * temposcale; + var dx = tempoNote.dx + tempoNote.w; + var width = -0.6; + stem = new abc_relative_element(null, dx, 0, p1, {"type": "stem", "pitch2": p2, linewidth: width}); + absElem.addExtra(stem); + } + return absElem; + }; + + TempoElement.prototype.draw = function(renderer) { + var x = this.x; + if (this.pitch === undefined) + window.console.error("Tempo Element y-coordinate not set."); + + var y = renderer.calcY(this.pitch); + var text; + if (this.tempo.preString) { + text = renderer.renderText(x, y, this.tempo.preString, 'tempofont', 'tempo', "start"); + var size = renderer.getTextSize(this.tempo.preString, 'tempofont', 'tempo', text); + var preWidth = size.width; + var charWidth = preWidth / this.tempo.preString.length; // Just get some average number to increase the spacing. + x += preWidth + charWidth; + } + if (this.note) { + if (this.note) + this.note.setX(x); + for (var i = 0; i < this.note.children.length; i++) + this.note.children[i].draw(renderer, x); + x += (this.note.w + 5); + var str = "= " + this.tempo.bpm; + text = renderer.renderText(x, y, str, 'tempofont', 'tempo', "start"); + size = renderer.getTextSize(str, 'tempofont', 'tempo', text); + var postWidth = size.width; + var charWidth2 = postWidth / str.length; // Just get some average number to increase the spacing. + x += postWidth + charWidth2; + } + if (this.tempo.postString) { + renderer.renderText(x, y, this.tempo.postString, 'tempofont', 'tempo', "start"); + } + }; +})(); + +var abc_tempo_element = TempoElement; + +// abc_triplet_element.js: Definition of the TripletElem class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var TripletElem; + +(function() { + + TripletElem = function TripletElem(number, anchor1, options) { + this.anchor1 = anchor1; // must have a .x and a .parent property or be null (means starts at the "beginning" of the line - after key signature) + this.number = number; + this.duration = (''+anchor1.parent.durationClass).replace(/\./, '-'); + this.middleElems = []; // This is to calculate the highest interior pitch. It is used to make sure that the drawn bracket never crosses a really high middle note. + this.flatBeams = options.flatBeams; + }; + + TripletElem.prototype.isClosed = function() { + return this.anchor2; + }; + + TripletElem.prototype.middleNote = function(elem) { + this.middleElems.push(elem); + }; + + TripletElem.prototype.setCloseAnchor = function(anchor2) { + this.anchor2 = anchor2; + // TODO-PER: Unfortunately, I don't know if there is a beam above until after the vertical positioning is done, + // so I don't know whether to leave room for the number above. Therefore, If there is a beam on the first note, I'll leave room just in case. + if (this.anchor1.parent.beam) + this.endingHeightAbove = 4; + }; + + TripletElem.prototype.setUpperAndLowerElements = function(/*positionY*/) { + }; + + TripletElem.prototype.layout = function() { + // TODO end and beginning of line (PER: P.S. I'm not sure this can happen: I think the parser will always specify both the start and end points.) + if (this.anchor1 && this.anchor2) { + this.hasBeam = this.anchor1.parent.beam && this.anchor1.parent.beam === this.anchor2.parent.beam; + + if (this.hasBeam) { + // If there is a beam then we don't need to draw anything except the text. The beam could either be above or below. + var beam = this.anchor1.parent.beam; + var left = beam.isAbove() ? this.anchor1.x + this.anchor1.w : this.anchor1.x; + this.yTextPos = beam.heightAtMidpoint(left, this.anchor2.x); + this.yTextPos += beam.isAbove() ? 3 : -2; // This creates some space between the beam and the number. + this.top = this.yTextPos + 1; + this.bottom = this.yTextPos - 2; + if (beam.isAbove()) + this.endingHeightAbove = 4; + } else { + // If there isn't a beam, then we need to draw the bracket and the text. The bracket is always above. + // The bracket is never lower than the 'a' line, but is 4 pitches above the first and last notes. If there is + // a tall note in the middle, the bracket is horizontal and above the highest note. + this.startNote = Math.max(this.anchor1.parent.top, 9) + 4; + this.endNote = Math.max(this.anchor2.parent.top, 9) + 4; + // If it starts or ends on a rest, make the beam horizontal + if (this.anchor1.parent.type === "rest" && this.anchor2.parent.type !== "rest") + this.startNote = this.endNote; + else if (this.anchor2.parent.type === "rest" && this.anchor1.parent.type !== "rest") + this.endNote = this.startNote; + // See if the middle note is really high. + var max = 0; + for (var i = 0; i < this.middleElems.length; i++) { + max = Math.max(max, this.middleElems[i].top); + } + max += 4; + if (max > this.startNote || max > this.endNote) { + this.startNote = max; + this.endNote = max; + } + if (this.flatBeams) { + this.startNote = Math.max(this.startNote, this.endNote); + this.endNote = Math.max(this.startNote, this.endNote); + } + + this.yTextPos = this.startNote + (this.endNote - this.startNote) / 2; + this.top = this.yTextPos + 1; + } + } + delete this.middleElems; + delete this.flatBeams; + }; + + TripletElem.prototype.draw = function(renderer) { + var xTextPos; + if (this.hasBeam) { + var left = this.anchor1.parent.beam.isAbove() ? this.anchor1.x + this.anchor1.w : this.anchor1.x; + xTextPos = this.anchor1.parent.beam.xAtMidpoint(left, this.anchor2.x); + } else { + xTextPos = this.anchor1.x + (this.anchor2.x + this.anchor2.w - this.anchor1.x) / 2; + drawBracket(renderer, this.anchor1.x, this.startNote, this.anchor2.x + this.anchor2.w, this.endNote, this.duration); + } + renderer.renderText(xTextPos, renderer.calcY(this.yTextPos), "" + this.number, 'tripletfont', renderer.addClasses('triplet d'+this.duration), "middle", true); + }; + + function drawLine(renderer, l, t, r, b, duration) { + var pathString = sprintf_1("M %f %f L %f %f", + l, t, r, b); + renderer.printPath({path: pathString, stroke: "#000000", 'class': renderer.addClasses('triplet d'+duration)}); + } + + function drawBracket(renderer, x1, y1, x2, y2, duration) { + y1 = renderer.calcY(y1); + y2 = renderer.calcY(y2); + var bracketHeight = 5; + + // Draw vertical lines at the beginning and end + drawLine(renderer, x1, y1, x1, y1 + bracketHeight, duration); + drawLine(renderer, x2, y2, x2, y2 + bracketHeight, duration); + + // figure out midpoints to draw the broken line. + var midX = x1 + (x2-x1)/2; + //var midY = y1 + (y2-y1)/2; + var gapWidth = 8; + var slope = (y2 - y1) / (x2 - x1); + var leftEndX = midX - gapWidth; + var leftEndY = y1 + (leftEndX - x1) * slope; + drawLine(renderer, x1, y1, leftEndX, leftEndY, duration); + var rightStartX = midX + gapWidth; + var rightStartY = y1 + (rightStartX - x1) * slope; + drawLine(renderer, rightStartX, rightStartY, x2, y2, duration); + } +})(); + +var abc_triplet_element = TripletElem; + +// abc_voice_element.js: Definition of the VoiceElement class. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + +var VoiceElement = function VoiceElement(voicenumber, voicetotal) { + this.children = []; + this.beams = []; + this.otherchildren = []; // ties, slurs, triplets + this.w = 0; + this.duplicate = false; + this.voicenumber = voicenumber; //number of the voice on a given stave (not staffgroup) + this.voicetotal = voicetotal; + this.bottom = 7; + this.top = 7; + this.specialY = { + tempoHeightAbove: 0, + partHeightAbove: 0, + volumeHeightAbove: 0, + dynamicHeightAbove: 0, + endingHeightAbove: 0, + chordHeightAbove: 0, + lyricHeightAbove: 0, + + lyricHeightBelow: 0, + chordHeightBelow: 0, + volumeHeightBelow: 0, + dynamicHeightBelow: 0 + }; +}; + +VoiceElement.prototype.addChild = function (child) { + if (child.type === 'bar') { + var firstItem = true; + for (var i = 0; firstItem && i < this.children.length; i++) { + if (this.children[i].type !== "staff-extra" && this.children[i].type !== "tempo") + firstItem = false; + } + if (!firstItem) { + this.beams.push("bar"); + this.otherchildren.push("bar"); + } + } + this.children[this.children.length] = child; + this.setRange(child); +}; + +VoiceElement.prototype.setLimit = function(member, child) { + // Sometimes we get an absolute element in here and sometimes we get some type of relative element. + // If there is a "specialY" element, then assume it is an absolute element. If that doesn't exist, look for the + // same members at the top level, because that's where they are in relative elements. + var specialY = child.specialY; + if (!specialY) specialY = child; + if (!specialY[member]) return; + if (!this.specialY[member]) + this.specialY[member] = specialY[member]; + else + this.specialY[member] = Math.max(this.specialY[member], specialY[member]); +}; + +VoiceElement.prototype.moveDecorations = function(beam) { + var padding = 1.5; // This is the vertical padding between elements, in pitches. + for (var ch = 0; ch < beam.elems.length; ch++) { + var child = beam.elems[ch]; + if (child.top) { + // We now know where the ornaments should have been placed, so move them if they would overlap. + var top = beam.yAtNote(child); + for (var i = 0; i < child.children.length; i++) { + var el = child.children[i]; + if (el.klass === 'ornament') { + if (el.bottom - padding < top) { + var distance = top - el.bottom + padding; // Find the distance that it needs to move and add a little margin so the element doesn't touch the beam. + el.bottom += distance; + el.top += distance; + el.pitch += distance; + top = child.top = el.top; + } + } + } + } + } +}; + +VoiceElement.prototype.adjustRange = function(child) { + if (child.bottom !== undefined) + this.bottom = Math.min(this.bottom, child.bottom); + if (child.top !== undefined) + this.top = Math.max(this.top, child.top); +}; + +VoiceElement.prototype.setRange = function(child) { + this.adjustRange(child); + this.setLimit('tempoHeightAbove', child); + this.setLimit('partHeightAbove', child); + this.setLimit('volumeHeightAbove', child); + this.setLimit('dynamicHeightAbove', child); + this.setLimit('endingHeightAbove', child); + this.setLimit('chordHeightAbove', child); + this.setLimit('lyricHeightAbove', child); + this.setLimit('lyricHeightBelow', child); + this.setLimit('chordHeightBelow', child); + this.setLimit('volumeHeightBelow', child); + this.setLimit('dynamicHeightBelow', child); +}; + +VoiceElement.prototype.setUpperAndLowerElements = function(positionY) { + var i; + for (i = 0; i < this.children.length; i++) { + var abselem = this.children[i]; + abselem.setUpperAndLowerElements(positionY); + } + for (i = 0; i < this.otherchildren.length; i++) { + var abselem = this.otherchildren[i]; + if (typeof abselem !== 'string') + abselem.setUpperAndLowerElements(positionY); + } +}; + +VoiceElement.prototype.addOther = function (child) { + this.otherchildren.push(child); + this.setRange(child); +}; + +VoiceElement.prototype.addBeam = function (child) { + this.beams.push(child); +}; + +VoiceElement.prototype.updateIndices = function () { + if (!this.layoutEnded()) { + this.durationindex += this.children[this.i].duration; + if (this.children[this.i].type === 'bar') this.durationindex = Math.round(this.durationindex*64)/64; // everytime we meet a barline, do rounding to nearest 64th + this.i++; + } +}; + +VoiceElement.prototype.layoutEnded = function () { + return (this.i>=this.children.length); +}; + +VoiceElement.prototype.getDurationIndex = function () { + return this.durationindex - (this.children[this.i] && (this.children[this.i].duration>0)?0:0.0000005); // if the ith element doesn't have a duration (is not a note), its duration index is fractionally before. This enables CLEF KEYSIG TIMESIG PART, etc. to be laid out before we get to the first note of other voices +}; + +// number of spacing units expected for next positioning +VoiceElement.prototype.getSpacingUnits = function () { + return Math.sqrt(this.spacingduration*8); + // TODO-PER: On short lines, this would never trigger, so the spacing was wrong. I just changed this line empirically, though, so I don't know if there are other ramifications. + //return (this.minx= 0; i--) { + // var elem = voice.children[i]; + // if (elem.abcelem.el_type === 'bar') + // break; + // width += elem.w; + // } + // return new RelativeElement(width.toFixed(2), -70, 0, undefined, {type:"debug"}); + // } + + // return an array of AbsoluteElement +AbstractEngraver.prototype.createABCElement = function(isFirstStaff, isSingleLineStaff, voice, elem) { + var elemset = []; + switch (elem.el_type) { + case undefined: + // it is undefined if we were passed an array in - an array means a set of notes that should be beamed together. + elemset = this.createBeam(isSingleLineStaff, voice, elem); + break; + case "note": + elemset[0] = this.createNote(elem, false, isSingleLineStaff, voice); + if (this.triplet && this.triplet.isClosed()) { + voice.addOther(this.triplet); + this.triplet = null; + this.tripletmultiplier = 1; + } + break; + case "bar": + elemset[0] = this.createBarLine(voice, elem, isFirstStaff); + if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; +// elemset[0].addChild(writeMeasureWidth(voice)); + break; + case "meter": + elemset[0] = abc_create_time_signature(elem, this.tuneNumber); + this.startlimitelem = elemset[0]; // limit ties here + if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; + break; + case "clef": + elemset[0] = abc_create_clef(elem, this.tuneNumber); + if (!elemset[0]) return null; + if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; + break; + case "key": + var absKey = abc_create_key_signature(elem, this.tuneNumber); + if (absKey) { + elemset[0] = absKey; + this.startlimitelem = elemset[0]; // limit ties here + } + if (voice.duplicate && elemset.length > 0) elemset[0].invisible = true; + break; + case "stem": + this.stemdir=elem.direction; + break; + case "part": + var abselem = new abc_absolute_element(elem,0,0, 'part', this.tuneNumber); + var dim = this.renderer.getTextSize(elem.title, 'partsfont', "part"); + abselem.addChild(new abc_relative_element(elem.title, 0, 0, undefined, {type:"part", height: dim.height/abc_spacing.STEP})); + elemset[0] = abselem; + break; + case "tempo": + var abselem3 = new abc_absolute_element(elem,0,0, 'tempo', this.tuneNumber); + abselem3.addChild(new abc_tempo_element(elem, this.tuneNumber, createNoteHead)); + elemset[0] = abselem3; + break; + case "style": + if (elem.head === "normal") + delete this.style; + else + this.style = elem.head; + break; + case "hint": + hint = true; + this.saveState(); + break; + case "midi": + // This has no effect on the visible music, so just skip it. + break; + case "scale": + this.voiceScale = elem.size; + break; + + default: + var abselem2 = new abc_absolute_element(elem,0,0, 'unsupported', this.tuneNumber); + abselem2.addChild(new abc_relative_element("element type "+elem.el_type, 0, 0, undefined, {type:"debug"})); + elemset[0] = abselem2; + } + + return elemset; +}; + + function setAveragePitch(elem) { + if (elem.pitches) { + sortPitch(elem); + var sum = 0; + for (var p = 0; p < elem.pitches.length; p++) { + sum += elem.pitches[p].verticalPos; + } + elem.averagepitch = sum / elem.pitches.length; + elem.minpitch = elem.pitches[0].verticalPos; + elem.maxpitch = elem.pitches[elem.pitches.length - 1].verticalPos; + } + } + + AbstractEngraver.prototype.calcBeamDir = function (isSingleLineStaff, voice, elems) { + if (this.stemdir) // If the user or voice is forcing the stem direction, we already know the answer. + return this.stemdir; + var beamelem = new abc_beam_element(this.stemHeight * this.voiceScale, this.stemdir, this.flatBeams); + for (var i = 0; i < elems.length; i++) { + beamelem.add({abcelem: elems[i]}); // This is a hack to call beam elem with just a minimum of processing: for our purposes, we don't need to construct the whole note. + } + + var dir = beamelem.calcDir(); + return dir ? "up" : "down"; + }; + + AbstractEngraver.prototype.createBeam = function (isSingleLineStaff, voice, elems) { + var abselemset = []; + + var dir = this.calcBeamDir(isSingleLineStaff, voice, elems); + var beamelem = new abc_beam_element(this.stemHeight * this.voiceScale, dir, this.flatBeams); + if (hint) beamelem.setHint(); + var oldDir = this.stemdir; + this.stemdir = dir; + for (var i = 0; i < elems.length; i++) { + var elem = elems[i]; + var abselem = this.createNote(elem, true, isSingleLineStaff, voice); + abselemset.push(abselem); + beamelem.add(abselem); + if (this.triplet && this.triplet.isClosed()) { + voice.addOther(this.triplet); + this.triplet = null; + this.tripletmultiplier = 1; + } + } + this.stemdir = oldDir; + voice.addBeam(beamelem); + return abselemset; + }; + +var sortPitch = function(elem) { + var sorted; + do { + sorted = true; + for (var p = 0; pelem.pitches[p+1].pitch) { + sorted = false; + var tmp = elem.pitches[p]; + elem.pitches[p] = elem.pitches[p+1]; + elem.pitches[p+1] = tmp; + } + } + } while (!sorted); +}; + +var ledgerLines = function(abselem, minPitch, maxPitch, isRest, symbolWidth, additionalLedgers, dir, dx, scale) { + for (var i=maxPitch; i>11; i--) { + if (i%2===0 && !isRest) { + abselem.addChild(new abc_relative_element(null, dx, (symbolWidth+4)*scale, i, {type:"ledger"})); + } + } + + for (i=minPitch; i<1; i++) { + if (i%2===0 && !isRest) { + abselem.addChild(new abc_relative_element(null, dx, (symbolWidth+4)*scale, i, {type:"ledger"})); + } + } + + for (i = 0; i < additionalLedgers.length; i++) { // PER: draw additional ledgers + var ofs = symbolWidth; + if (dir === 'down') ofs = -ofs; + abselem.addChild(new abc_relative_element(null, ofs+dx, (symbolWidth+4)*scale, additionalLedgers[i], {type:"ledger"})); + } +}; + + AbstractEngraver.prototype.addGraceNotes = function (elem, voice, abselem, notehead, stemHeight, isBagpipes, roomtaken) { + var gracescale = 3 / 5; + var graceScaleStem = 3.5 / 5; // TODO-PER: empirically found constant. + var gracebeam = null; + var flag; + + if (elem.gracenotes.length > 1) { + gracebeam = new abc_beam_element(stemHeight * graceScaleStem, "grace", isBagpipes); + if (hint) gracebeam.setHint(); + gracebeam.mainNote = abselem; // this gives us a reference back to the note this is attached to so that the stems can be attached somewhere. + } + + var graceoffsets = []; + for (i = elem.gracenotes.length - 1; i >= 0; i--) { // figure out where to place each gracenote + roomtaken += 10; + graceoffsets[i] = roomtaken; + if (elem.gracenotes[i].accidental) { + roomtaken += 7; + } + } + + var i; + for (i = 0; i < elem.gracenotes.length; i++) { + var gracepitch = elem.gracenotes[i].verticalPos; + + flag = (gracebeam) ? null : chartable.uflags[(isBagpipes) ? 5 : 3]; + var accidentalSlot = []; + var ret = createNoteHead(abselem, "noteheads.quarter", elem.gracenotes[i], "up", -graceoffsets[i], -graceoffsets[i], flag, 0, 0, gracescale*this.voiceScale, accidentalSlot, false); + ret.notehead.highestVert = ret.notehead.pitch + stemHeight * graceScaleStem; + var grace = ret.notehead; + this.addSlursAndTies(abselem, elem.gracenotes[i], grace, voice, "up", true); + + abselem.addExtra(grace); + // PER: added acciaccatura slash + if (elem.gracenotes[i].acciaccatura) { + var pos = elem.gracenotes[i].verticalPos + 7 * gracescale; // the same formula that determines the flag position. + var dAcciaccatura = gracebeam ? 5 : 6; // just an offset to make it line up correctly. + abselem.addRight(new abc_relative_element("flags.ugrace", -graceoffsets[i] + dAcciaccatura, 0, pos, {scalex: gracescale, scaley: gracescale})); + } + if (gracebeam) { // give the beam the necessary info + var graceDuration = elem.gracenotes[i].duration / 2; + if (isBagpipes) graceDuration /= 2; + var pseudoabselem = { + heads: [grace], + abcelem: {averagepitch: gracepitch, minpitch: gracepitch, maxpitch: gracepitch, duration: graceDuration} + }; + gracebeam.add(pseudoabselem); + } else { // draw the stem + var p1 = gracepitch + 1 / 3 * gracescale; + var p2 = gracepitch + 7 * gracescale; + var dx = grace.dx + grace.w; + var width = -0.6; + abselem.addExtra(new abc_relative_element(null, dx, 0, p1, {"type": "stem", "pitch2": p2, linewidth: width})); + } + ledgerLines(abselem, gracepitch, gracepitch, false, abc_glyphs.getSymbolWidth("noteheads.quarter"), [], true, grace.dx - 1, 0.6); + + if (i === 0 && !isBagpipes && !(elem.rest && (elem.rest.type === "spacer" || elem.rest.type === "invisible"))) { + // This is the overall slur that is under the grace notes. + var isTie = (elem.gracenotes.length === 1 && grace.pitch === notehead.pitch); + voice.addOther(new abc_tie_element({ anchor1: grace, anchor2: notehead, isGrace: true})); + } + } + + if (gracebeam) { + voice.addBeam(gracebeam); + } + return roomtaken; + }; + + function addRestToAbsElement(abselem, elem, duration, dot, isMultiVoice, stemdir, isSingleLineStaff, durlog, voiceScale) { + var c; + var restpitch = 7; + var noteHead; + var roomTaken; + var roomTakenRight; + + if (isMultiVoice) { + if (stemdir === "down") restpitch = 3; + if (stemdir === "up") restpitch = 11; + } + // There is special placement for the percussion staff. If there is one staff line, then move the rest position. + if (isSingleLineStaff) { + // The half and whole rests are attached to different lines normally, so we need to tweak their position to get them to both be attached to the same one. + if (duration < 0.5) + restpitch = 7; + else if (duration < 1) + restpitch = 7; // half rest + else + restpitch = 5; // whole rest + } + switch (elem.rest.type) { + case "whole": + c = chartable.rest[0]; + elem.averagepitch = restpitch; + elem.minpitch = restpitch; + elem.maxpitch = restpitch; + dot = 0; + break; + case "rest": + if (elem.style === "rhythm") // special case for rhythm: rests are a handy way to express the rhythm. + c = chartable.rhythm[-durlog]; + else + c = chartable.rest[-durlog]; + elem.averagepitch = restpitch; + elem.minpitch = restpitch; + elem.maxpitch = restpitch; + break; + case "invisible": + case "spacer": + c = ""; + elem.averagepitch = restpitch; + elem.minpitch = restpitch; + elem.maxpitch = restpitch; + break; + case "multimeasure": + c = chartable.rest['multi']; + elem.averagepitch = restpitch; + elem.minpitch = restpitch; + elem.maxpitch = restpitch; + dot = 0; + var mmWidth = abc_glyphs.getSymbolWidth(c); + abselem.addHead(new abc_relative_element(c, -mmWidth, mmWidth * 2, 7)); + var numMeasures = new abc_relative_element("" + elem.duration, 0, mmWidth, 16, {type: "multimeasure-text"}); + abselem.addExtra(numMeasures); + } + if (elem.rest.type !== "multimeasure") { + var ret = createNoteHead(abselem, c, {verticalPos: restpitch}, null, 0, 0, null, dot, 0, voiceScale, [], false); + noteHead = ret.notehead; + if (noteHead) { + abselem.addHead(noteHead); + roomTaken = ret.accidentalshiftx; + roomTakenRight = ret.dotshiftx; + } + } + return { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight }; + } + + function addIfNotExist(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (JSON.stringify(arr[i]) === JSON.stringify(item)) + return; + } + arr.push(item); + } + + AbstractEngraver.prototype.addNoteToAbcElement = function(abselem, elem, dot, stemdir, style, zeroDuration, durlog, nostem, voice) { + var dotshiftx = 0; // room taken by chords with displaced noteheads which cause dots to shift + var noteHead; + var roomTaken = 0; + var roomTakenRight = 0; + var min; + var i; + var additionalLedgers = []; + // The accidentalSlot will hold a list of all the accidentals on this chord. Each element is a vertical place, + // and contains a pitch, which is the last pitch that contains an accidental in that slot. The slots are numbered + // from closest to the note to farther left. We only need to know the last accidental we placed because + // we know that the pitches are sorted by now. + var accidentalSlot = []; + var symbolWidth = 0; + + var dir = (elem.averagepitch>=6) ? "down": "up"; + if (stemdir) dir=stemdir; + + style = elem.style ? elem.style : style; // get the style of note head. + if (!style || style === "normal") style = "note"; + var noteSymbol; + if (zeroDuration) + noteSymbol = chartable[style].nostem; + else + noteSymbol = chartable[style][-durlog]; + if (!noteSymbol) + console.log("noteSymbol:", style, durlog, zeroDuration); + + // determine elements of chords which should be shifted + var p; + for (p=(dir==="down")?elem.pitches.length-2:1; (dir==="down")?p>=0:p 11 || curr.verticalPos < 1) { // PER: add extra ledger line + additionalLedgers.push(curr.verticalPos - (curr.verticalPos%2)); + } + if (dir==="down") { + roomTaken = abc_glyphs.getSymbolWidth(noteSymbol)+2; + } else { + dotshiftx = abc_glyphs.getSymbolWidth(noteSymbol)+2; + } + } + } + + var pp = elem.pitches.length; + for (p=0; p 0) + noteHead.bottom = noteHead.bottom - 1; // If there is a tie to the grace notes, leave a little more room for the note to avoid collisions. + abselem.addHead(noteHead); + } + roomTaken += ret.accidentalshiftx; + roomTakenRight = Math.max(roomTakenRight,ret.dotshiftx); + } + + // draw stem from the furthest note to a pitch above/below the stemmed note + if (hasStem) { + var stemHeight = 7 * this.voiceScale; + var p1 = (dir==="down") ? elem.minpitch-stemHeight : elem.minpitch+1/3; + // PER added stemdir test to make the line meet the note. + if (p1>6 && !stemdir) p1=6; + var p2 = (dir==="down") ? elem.maxpitch-1/3 : elem.maxpitch+stemHeight; + // PER added stemdir test to make the line meet the note. + if (p2<6 && !stemdir) p2=6; + var dx = (dir==="down" || abselem.heads.length === 0)?0:abselem.heads[0].w; + var width = (dir==="down")?1:-1; + // TODO-PER-HACK: One type of note head has a different placement of the stem. This should be more generically calculated: + if (noteHead.c === 'noteheads.slash.quarter') { + if (dir === 'down') + p2 -= 1; + else + p1 += 1; + } + abselem.addExtra(new abc_relative_element(null, dx, 0, p1, {"type": "stem", "pitch2":p2, linewidth: width})); + //var RelativeElement = function RelativeElement(c, dx, w, pitch, opt) { + min = Math.min(p1, p2); + } + return { noteHead: noteHead, roomTaken: roomTaken, roomTakenRight: roomTakenRight, min: min, additionalLedgers: additionalLedgers, dir: dir, symbolWidth: symbolWidth }; + }; + + AbstractEngraver.prototype.addLyric = function(abselem, elem) { + var lyricStr = ""; + abc_common.each(elem.lyric, function(ly) { + var div = ly.divider === ' ' ? "" : ly.divider; + lyricStr += ly.syllable + div + "\n"; + }); + var lyricDim = this.renderer.getTextSize(lyricStr, 'vocalfont', "lyric"); + var position = elem.positioning ? elem.positioning.vocalPosition : 'below'; + abselem.addCentered(new abc_relative_element(lyricStr, 0, lyricDim.width, undefined, {type:"lyric", position: position, height: lyricDim.height / abc_spacing.STEP })); + }; + + AbstractEngraver.prototype.addChord = function(abselem, elem, roomTaken, roomTakenRight) { + var chordMargin = 8; // If there are chords next to each other, this is how close they can get. + for (var i = 0; i < elem.chord.length; i++) { + var x = 0; + var y; + var dim = this.renderer.getTextSize(elem.chord[i].name, 'annotationfont', "annotation"); + var chordWidth = dim.width; + var chordHeight = dim.height / abc_spacing.STEP; + switch (elem.chord[i].position) { + case "left": + roomTaken+=chordWidth+7; + x = -roomTaken; // TODO-PER: This is just a guess from trial and error + y = elem.averagepitch; + abselem.addExtra(new abc_relative_element(elem.chord[i].name, x, chordWidth+4, y, {type:"text", height: chordHeight})); + break; + case "right": + roomTakenRight+=4; + x = roomTakenRight;// TODO-PER: This is just a guess from trial and error + y = elem.averagepitch; + abselem.addRight(new abc_relative_element(elem.chord[i].name, x, chordWidth+4, y, {type:"text", height: chordHeight})); + break; + case "below": + // setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is. + abselem.addRight(new abc_relative_element(elem.chord[i].name, 0, chordWidth+chordMargin, undefined, {type: "text", position: "below", height: chordHeight})); + break; + case "above": + // setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is. + abselem.addRight(new abc_relative_element(elem.chord[i].name, 0, chordWidth+chordMargin, undefined, {type: "text", height: chordHeight})); + break; + default: + if (elem.chord[i].rel_position) { + var relPositionY = elem.chord[i].rel_position.y + 3*abc_spacing.STEP; // TODO-PER: this is a fudge factor to make it line up with abcm2ps + abselem.addChild(new abc_relative_element(elem.chord[i].name, x + elem.chord[i].rel_position.x, 0, elem.minpitch + relPositionY / abc_spacing.STEP, {type: "text", height: chordHeight})); + } else { + // setting the y-coordinate to undefined for now: it will be overwritten later on, after we figure out what the highest element on the line is. + var pos2 = 'above'; + if (elem.positioning && elem.positioning.chordPosition) + pos2 = elem.positioning.chordPosition; + + dim = this.renderer.getTextSize(elem.chord[i].name, 'gchordfont', "chord"); + chordHeight = dim.height / abc_spacing.STEP; + chordWidth = dim.width; // Since the chord is centered, we only use half the width. + abselem.addCentered(new abc_relative_element(elem.chord[i].name, x, chordWidth, undefined, {type: "chord", position: pos2, height: chordHeight })); + } + } + } + return { roomTaken: roomTaken, roomTakenRight: roomTakenRight }; + }; + +AbstractEngraver.prototype.createNote = function(elem, nostem, isSingleLineStaff, voice) { //stem presence: true for drawing stemless notehead + var notehead = null; + var roomtaken = 0; // room needed to the left of the note + var roomtakenright = 0; // room needed to the right of the note + var symbolWidth = 0; + var additionalLedgers = []; // PER: handle the case of [bc'], where the b doesn't have a ledger line + var dir; + + var duration = getDuration(elem); + var zeroDuration = false; + if (duration === 0) { zeroDuration = true; duration = 0.25; nostem = true; } //PER: zero duration will draw a quarter note head. + var durlog = Math.floor(Math.log(duration)/Math.log(2)); //TODO use getDurlog + var dot=0; + + for (var tot = Math.pow(2,durlog), inc=tot/2; tot 1, this.stemdir, isSingleLineStaff, durlog, this.voiceScale); + notehead = ret1.noteHead; + roomtaken = ret1.roomTaken; + roomtakenright = ret1.roomTakenRight; + } else { + var ret2 = this.addNoteToAbcElement(abselem, elem, dot, this.stemdir, this.style, zeroDuration, durlog, nostem, voice); + if (ret2.min !== undefined) + this.minY = Math.min(ret2.min, this.minY); + notehead = ret2.noteHead; + roomtaken = ret2.roomTaken; + roomtakenright = ret2.roomTakenRight; + additionalLedgers = ret2.additionalLedgers; + dir = ret2.dir; + symbolWidth = ret2.symbolWidth; + } + + if (elem.lyric !== undefined) { + this.addLyric(abselem, elem); + } + + if (elem.gracenotes !== undefined) { + roomtaken += this.addGraceNotes(elem, voice, abselem, notehead, this.stemHeight * this.voiceScale, this.isBagpipes, roomtaken); + } + + if (elem.decoration) { + this.decoration.createDecoration(voice, elem.decoration, abselem.top, (notehead)?notehead.w:0, abselem, roomtaken, dir, abselem.bottom, elem.positioning, this.hasVocals); + } + + if (elem.barNumber) { + abselem.addChild(new abc_relative_element(elem.barNumber, -10, 0, 0, {type:"barNumber"})); + } + + // ledger lines + ledgerLines(abselem, elem.minpitch, elem.maxpitch, elem.rest, symbolWidth, additionalLedgers, dir, -2, 1); + + if (elem.chord !== undefined) { + var ret3 = this.addChord(abselem, elem, roomtaken, roomtakenright); + roomtaken = ret3.roomTaken; + roomtakenright = ret3.roomTakenRight; + } + + + if (elem.startTriplet) { + this.triplet = new abc_triplet_element(elem.startTriplet, notehead, { flatBeams: this.flatBeams }); // above is opposite from case of slurs + } + + if (elem.endTriplet && this.triplet) { + this.triplet.setCloseAnchor(notehead); + } + + if (this.triplet && !elem.startTriplet && !elem.endTriplet) { + this.triplet.middleNote(notehead); + } + + + return abselem; +}; + + + + +var createNoteHead = function(abselem, c, pitchelem, dir, headx, extrax, flag, dot, dotshiftx, scale, accidentalSlot, shouldExtendStem) { + // TODO scale the dot as well + var pitch = pitchelem.verticalPos; + var notehead; + var accidentalshiftx = 0; + var newDotShiftX = 0; + var extraLeft = 0; + if (c === undefined) + abselem.addChild(new abc_relative_element("pitch is undefined", 0, 0, 0, {type:"debug"})); + else if (c==="") { + notehead = new abc_relative_element(null, 0, 0, pitch); + } else { + var shiftheadx = headx; + if (pitchelem.printer_shift) { + var adjust = (pitchelem.printer_shift==="same")?1:0; + shiftheadx = (dir==="down")?-abc_glyphs.getSymbolWidth(c)*scale+adjust:abc_glyphs.getSymbolWidth(c)*scale-adjust; + } + var opts = {scalex:scale, scaley: scale, thickness: abc_glyphs.symbolHeightInPitches(c)*scale }; + notehead = new abc_relative_element(c, shiftheadx, abc_glyphs.getSymbolWidth(c)*scale, pitch, opts); + notehead.stemDir = dir; + if (flag) { + var pos = pitch+((dir==="down")?-7:7)*scale; + // if this is a regular note, (not grace or tempo indicator) then the stem will have been stretched to the middle line if it is far from the center. + if (shouldExtendStem) { + if (dir==="down" && pos > 6) + pos = 6; + if (dir==="up" && pos < 6) + pos = 6; + } + //if (scale===1 && (dir==="down")?(pos>6):(pos<6)) pos=6; + var xdelta = (dir==="down")?headx:headx+notehead.w-0.6; + abselem.addRight(new abc_relative_element(flag, xdelta, abc_glyphs.getSymbolWidth(flag)*scale, pos, {scalex:scale, scaley: scale})); + } + newDotShiftX = notehead.w+dotshiftx-2+5*dot; + for (;dot>0;dot--) { + var dotadjusty = (1-Math.abs(pitch)%2); //PER: take abs value of the pitch. And the shift still happens on ledger lines. + abselem.addRight(new abc_relative_element("dots.dot", notehead.w+dotshiftx-2+5*dot, abc_glyphs.getSymbolWidth("dots.dot"), pitch+dotadjusty)); + } + } + if (notehead) + notehead.highestVert = pitchelem.highestVert; + + if (pitchelem.accidental) { + var symb; + switch (pitchelem.accidental) { + case "quartersharp": + symb = "accidentals.halfsharp"; + break; + case "dblsharp": + symb = "accidentals.dblsharp"; + break; + case "sharp": + symb = "accidentals.sharp"; + break; + case "quarterflat": + symb = "accidentals.halfflat"; + break; + case "flat": + symb = "accidentals.flat"; + break; + case "dblflat": + symb = "accidentals.dblflat"; + break; + case "natural": + symb = "accidentals.nat"; + } + // if a note is at least a sixth away, it can share a slot with another accidental + var accSlotFound = false; + var accPlace = extrax; + for (var j = 0; j < accidentalSlot.length; j++) { + if (pitch - accidentalSlot[j][0] >= 6) { + accidentalSlot[j][0] = pitch; + accPlace = accidentalSlot[j][1]; + accSlotFound = true; + break; + } + } + if (accSlotFound === false) { + accPlace -= (abc_glyphs.getSymbolWidth(symb)*scale+2); + accidentalSlot.push([pitch,accPlace]); + accidentalshiftx = (abc_glyphs.getSymbolWidth(symb)*scale+2); + } + abselem.addExtra(new abc_relative_element(symb, accPlace, abc_glyphs.getSymbolWidth(symb), pitch, {scalex:scale, scaley: scale})); + extraLeft = abc_glyphs.getSymbolWidth(symb) / 2; // TODO-PER: We need a little extra width if there is an accidental, but I'm not sure why it isn't the full width of the accidental. + } + + return { notehead: notehead, accidentalshiftx: accidentalshiftx, dotshiftx: newDotShiftX, extraLeft: extraLeft }; + +}; + + AbstractEngraver.prototype.addSlursAndTies = function(abselem, pitchelem, notehead, voice, dir, isGrace) { + if (pitchelem.endTie) { + if (this.ties.length > 0) { + // If there are multiple open ties, find the one that applies by matching the pitch, if possible. + var found = false; + for (var j = 0; j < this.ties.length; j++) { + if (this.ties[j].anchor1 && this.ties[j].anchor1.pitch === notehead.pitch) { + this.ties[j].setEndAnchor(notehead); + this.ties.splice(j, 1); + found = true; + break; + } + } + if (!found) { + this.ties[0].setEndAnchor(notehead); + this.ties.splice(0, 1); + } + } + } + + var voiceNumber = voice.voicetotal < 2 ? -1 : voice.voicenumber; + if (pitchelem.startTie) { + var tie = new abc_tie_element({ anchor1: notehead, force: (this.stemdir==="down" || this.stemdir==="up"), stemDir: this.stemdir, isGrace: isGrace, voiceNumber: voiceNumber}); + if (hint) tie.setHint(); + + this.ties[this.ties.length]=tie; + voice.addOther(tie); + // HACK-PER: For the animation, we need to know if a note is tied to the next one, so here's a flag. + // Unfortunately, only some of the notes in the current event might be tied, but this will consider it + // tied if any one of them is. That will work for most cases. + abselem.startTie = true; + } + + if (pitchelem.endSlur) { + for (var i=0; i= 0) + debugger; + el.setAttributeNS(null, key, attr[key]); + } + } + this.append(el); + return el; +}; + +Svg.prototype.text = function(text, attr, target) { + var el = document.createElementNS(svgNS, 'text'); + for (var key in attr) { + if (attr.hasOwnProperty(key)) { + el.setAttribute(key, attr[key]); + } + } + var lines = (""+text).split("\n"); + for (var i = 0; i < lines.length; i++) { + var line = document.createElementNS(svgNS, 'tspan'); + line.textContent = lines[i]; + line.setAttribute("x", attr.x ? attr.x : 0); + if (i !== 0) + line.setAttribute("dy", "1.2em"); + el.appendChild(line); + } + if (target) + target.appendChild(el); + else + this.append(el); + return el; +}; + +Svg.prototype.guessWidth = function(text, attr) { + var svg = this.createDummySvg(); + var el = this.text(text, attr, svg); + var size; + try { + size = el.getBBox(); + if (isNaN(size.height) || !size.height) // TODO-PER: I don't think this can happen unless there isn't a browser at all. + size = { width: attr['font-size']/2, height: attr['font-size'] + 2 }; // Just a wild guess. + else + size = {width: size.width, height: size.height}; + } catch (ex) { + size = { width: attr['font-size']/2, height: attr['font-size'] + 2 }; // Just a wild guess. + } + svg.removeChild(el); + return size; +}; + +Svg.prototype.createDummySvg = function() { + if (!this.dummySvg) { + this.dummySvg = createSvg(); + var styles = [ + "display: block !important;", + "height: 1px;", + "width: 1px;", + "position: absolute;" + ]; + this.dummySvg.setAttribute('style', styles.join("")); + var body = document.querySelector('body'); + body.appendChild(this.dummySvg); + } + + return this.dummySvg; +}; + +Svg.prototype.getTextSize = function(text, attr, el) { + if (typeof text === 'number') + text = ''+text; + if (!text || text.match(/^\s+$/)) + return { width: 0, height: 0 }; + var removeLater = !el; + if (!el) + el = this.text(text, attr); + var size; + try { + size = el.getBBox(); + if (isNaN(size.height) || !size.height) + size = this.guessWidth(text, attr); + else + size = {width: size.width, height: size.height}; + } catch (ex) { + size = this.guessWidth(text, attr); + } + if (removeLater) { + if (this.currentGroup) + this.currentGroup.removeChild(el); + else + this.svg.removeChild(el); + } + return size; +}; + +Svg.prototype.openGroup = function(options) { + options = options ? options : {}; + var el = document.createElementNS(svgNS, "g"); + if (options.prepend) + this.svg.insertBefore(el, this.svg.firstChild); + else + this.svg.appendChild(el); + this.currentGroup = el; + return el; +}; + +Svg.prototype.closeGroup = function() { + var g = this.currentGroup; + this.currentGroup = null; + return g; +}; + +Svg.prototype.path = function(attr) { + var el = document.createElementNS(svgNS, "path"); + for (var key in attr) { + if (attr.hasOwnProperty(key)) { + if (key === 'path') + el.setAttributeNS(null, 'd', attr.path); + else + el.setAttributeNS(null, key, attr[key]); + } + } + this.append(el); + return el; +}; + +Svg.prototype.pathToBack = function(attr) { + var el = document.createElementNS(svgNS, "path"); + for (var key in attr) { + if (attr.hasOwnProperty(key)) { + if (key === 'path') + el.setAttributeNS(null, 'd', attr.path); + else + el.setAttributeNS(null, key, attr[key]); + } + } + this.prepend(el); + return el; +}; + +Svg.prototype.append = function(el) { + if (this.currentGroup) + this.currentGroup.appendChild(el); + else + this.svg.appendChild(el); +}; + +Svg.prototype.prepend = function(el) { + // The entire group is prepended, so don't prepend the individual elements. + if (this.currentGroup) + this.currentGroup.appendChild(el); + else + this.svg.insertBefore(el, this.svg.firstChild); +}; + +Svg.prototype.setAttributeOnElement = function(el, attr) { + for (var key in attr) { + if (attr.hasOwnProperty(key)) { + el.setAttributeNS(null, key, attr[key]); + } + } +}; + +function createSvg() { + var svg = document.createElementNS(svgNS, "svg"); + svg.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xlink", "http://www.w3.org/1999/xlink"); + svg.setAttribute('role', 'img'); // for accessibility + return svg; +} + + +var svg = Svg; + +// abc_renderer.js: API to render to SVG/Raphael/whatever rendering engine +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +/*global Math, console */ + + + + + + +/** + * Implements the API for rendering ABCJS Abstract Rendering Structure to a canvas/paper (e.g. SVG, Raphael, etc) + * @param {Object} paper + * @param {bool} doRegression + */ +var Renderer = function(paper, doRegression, shouldAddClasses) { + this.paper = new svg(paper); + this.controller = null; //TODO-GD only used when drawing the ABCJS ARS to connect the controller with the elements for highlighting + + this.space = 3*abc_spacing.SPACE; + this.padding = {}; // renderer's padding is managed by the controller + this.doRegression = doRegression; + this.shouldAddClasses = shouldAddClasses; + if (this.doRegression) + this.regressionLines = []; + this.reset(); +}; + +Renderer.prototype.reset = function() { + + this.paper.clear(); + this.y = 0; + this.abctune = null; + this.lastM = null; + this.ingroup = false; + this.path = null; + this.isPrint = false; + this.initVerticalSpace(); + if (this.doRegression) + this.regressionLines = []; + // HACK-PER: There was a problem in Raphael where every path string that was sent to it was cached. + // That was causing the browser's memory to steadily grow until the browser went slower and slower until + // it crashed. The fix to that was a patch to Raphael, so it is only patched on the versions of this library that + // bundle Raphael with it. Also, if Raphael gets an update, then that patch will be lost. On version 2.1.2 of Raphael, + // the patch is on line 1542 and 1545 and it is: + // p[ps].sleep = 1; +}; + +Renderer.prototype.newTune = function(abcTune) { + this.abctune = abcTune; // TODO-PER: this is just to get the font info. + this.setVerticalSpace(abcTune.formatting); + this.measureNumber = null; + this.noteNumber = null; + this.setPrintMode(abcTune.media === 'print'); + this.setPadding(abcTune); +}; + +Renderer.prototype.createElemSet = function() { + return this.paper.openGroup(); +}; + +Renderer.prototype.closeElemSet = function() { + return this.paper.closeGroup(); +}; + +/** + * Set whether we are formatting this for the screen, or as a preview for creating a PDF version. + * @param {bool} isPrint + */ +Renderer.prototype.setPrintMode = function (isPrint) { + this.isPrint = isPrint; +}; + +/** + * Set the size of the canvas. + * @param {object} maxwidth + * @param {object} scale + */ +Renderer.prototype.setPaperSize = function (maxwidth, scale, responsive) { + var w = (maxwidth+this.padding.right)*scale; + var h = (this.y+this.padding.bottom)*scale; + if (this.isPrint) + h = Math.max(h, 1056); // 11in x 72pt/in x 1.33px/pt + // TODO-PER: We are letting the page get as long as it needs now, but eventually that should go to a second page. + if (this.doRegression) + this.regressionLines.push("PAPER SIZE: ("+w+","+h+")"); + + // for accessibility + var text = "Sheet Music"; + if (this.abctune && this.abctune.metaText && this.abctune.metaText.title) + text += " for \"" + this.abctune.metaText.title + '"'; + this.paper.setTitle(text); + + var parentStyles = { overflow: "hidden" }; + if (responsive === 'resize') { + this.paper.setResponsiveWidth(w, h); + } else { + parentStyles.width = ""; + parentStyles.height = h + "px"; + if (scale < 1) { + parentStyles.width = w + "px"; + this.paper.setSize(w / scale, h / scale); + } else + this.paper.setSize(w, h); + } + this.paper.setScale(scale); + this.paper.setParentStyles(parentStyles); +}; + +/** + * Set the padding + * @param {object} params + */ +Renderer.prototype.setPaddingOverride = function(params) { + this.paddingOverride = { top: params.paddingtop, bottom: params.paddingbottom, + right: params.paddingright, left: params.paddingleft }; +}; + +/** + * Set the padding + * @param {object} params + */ +Renderer.prototype.setPadding = function(abctune) { + // If the padding is set in the tune, then use that. + // Otherwise, if the padding is set in the override, use that. + // Otherwise, use the defaults (there are a different set of defaults for screen and print.) + function setPaddingVariable(self, paddingKey, formattingKey, printDefault, screenDefault) { + if (abctune.formatting[formattingKey] !== undefined) + self.padding[paddingKey] = abctune.formatting[formattingKey]; + else if (self.paddingOverride[paddingKey] !== undefined) + self.padding[paddingKey] = self.paddingOverride[paddingKey]; + else if (self.isPrint) + self.padding[paddingKey] = printDefault; + else + self.padding[paddingKey] = screenDefault; + } + // 1cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 38px + // 1.8cm x 0.393701in/cm x 72pt/in x 1.33px/pt = 68px + setPaddingVariable(this, 'top', 'topmargin', 38, 15); + setPaddingVariable(this, 'bottom', 'botmargin', 38, 15); + setPaddingVariable(this, 'left', 'leftmargin', 68, 15); + setPaddingVariable(this, 'right', 'rightmargin', 68, 15); +}; + +/** + * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling. + * @param {float} scale + */ +Renderer.prototype.adjustNonScaledItems = function (scale) { + this.padding.top /= scale; + this.padding.bottom /= scale; + this.padding.left /= scale; + this.padding.right /= scale; + this.abctune.formatting.headerfont.size /= scale; + this.abctune.formatting.footerfont.size /= scale; +}; + +/** + * Set the the values for all the configurable vertical space options. + */ +Renderer.prototype.initVerticalSpace = function() { + // conversion: 37.7953 = conversion factor for cm to px. + // All of the following values are in px. + this.spacing = { + composer: 7.56, // Set the vertical space above the composer. + graceBefore: 8.67, // Define the space before, inside and after the grace notes. + graceInside: 10.67, + graceAfter: 16, + info: 0, // Set the vertical space above the infoline. + lineSkipFactor: 1.1, // Set the factor for spacing between lines of text. (multiply this by the font size) + music: 7.56, // Set the vertical space above the first staff. + paragraphSkipFactor: 0.4, // Set the factor for spacing between text paragraphs. (multiply this by the font size) + parts: 11.33, // Set the vertical space above a new part. + slurHeight: 1.0, // Set the slur height factor. + staffSeparation: 61.33, // Do not put a staff system closer than from the previous system. + stemHeight: 26.67+10, // Set the stem height. + subtitle: 3.78, // Set the vertical space above the subtitle. + systemStaffSeparation: 48, // Do not place the staves closer than inside a system. * This values applies to all staves when in the tune header. Otherwise, it applies to the next staff + text: 18.9, // Set the vertical space above the history. + title: 7.56, // Set the vertical space above the title. + top: 30.24, //Set the vertical space above the tunes and on the top of the continuation pages. + vocal: 30.67, // Set the vertical space above the lyrics under the staves. + words: 0 // Set the vertical space above the lyrics at the end of the tune. + }; + /* + TODO-PER: Handle the x-coordinate spacing items, too. +maxshrink Default: 0.65 +Set how much to compress horizontally when music line breaks +are automatic. + must be between 0 (natural spacing) +and 1 (max shrinking). + +// This next value is used to compute the natural spacing of +// the notes. The base spacing of the crotchet is always +// 40 pts. When the duration of a note type is twice the +// duration of an other note type, its spacing is multiplied +// by this factor. +// The default value causes the note spacing to be multiplied +// by 2 when its duration is multiplied by 4, i.e. the +// space of the semibreve is 80 pts and the space of the +// semiquaver is 20 pts. +// Setting this value to 1 sets all note spacing to 40 pts. +noteSpacingFactor: 1.414, // Set the note spacing factor to (range 1..2). + +scale Default: 0.75 Set the page scale factor. Note that the header and footer are not scaled. + +stretchlast Default: 0.8 +Stretch the last music line of a tune when it exceeds +the fraction of the page width. + range is 0.0 to 1.0. + */ +}; + +Renderer.prototype.setVerticalSpace = function(formatting) { + // conversion from pts to px 4/3 + if (formatting.staffsep !== undefined) + this.spacing.staffSeparation = formatting.staffsep *4/3; + if (formatting.composerspace !== undefined) + this.spacing.composer = formatting.composerspace *4/3; + if (formatting.partsspace !== undefined) + this.spacing.parts = formatting.partsspace *4/3; + if (formatting.textspace !== undefined) + this.spacing.text = formatting.textspace *4/3; + if (formatting.musicspace !== undefined) + this.spacing.music = formatting.musicspace *4/3; + if (formatting.titlespace !== undefined) + this.spacing.title = formatting.titlespace *4/3; + if (formatting.sysstaffsep !== undefined) + this.spacing.systemStaffSeparation = formatting.sysstaffsep *4/3; + if (formatting.subtitlespace !== undefined) + this.spacing.subtitle = formatting.subtitlespace *4/3; + if (formatting.topspace !== undefined) + this.spacing.top = formatting.topspace *4/3; + if (formatting.vocalspace !== undefined) + this.spacing.vocal = formatting.vocalspace *4/3; + if (formatting.wordsspace !== undefined) + this.spacing.words = formatting.wordsspace *4/3; +}; + +/** + * Leave space at the top of the paper + * @param {object} abctune + */ +Renderer.prototype.topMargin = function(abctune) { + this.moveY(this.padding.top); +}; + +/** + * Leave space before printing the music + */ +Renderer.prototype.addMusicPadding = function() { + this.moveY(this.spacing.music); +}; + +/** + * Leave space before printing a staff system + */ +Renderer.prototype.addStaffPadding = function(lastStaffGroup, thisStaffGroup) { + var lastStaff = lastStaffGroup.staffs[lastStaffGroup.staffs.length-1]; + var lastBottomLine = -(lastStaff.bottom - 2); // The 2 is because the scale goes to 2 below the last line. + var nextTopLine = thisStaffGroup.staffs[0].top - 10; // Because 10 represents the top line. + var naturalSeparation = nextTopLine + lastBottomLine; // This is how far apart they'd be without extra spacing + var separationInPixels = naturalSeparation * abc_spacing.STEP; + if (separationInPixels < this.spacing.staffSeparation) + this.moveY(this.spacing.staffSeparation-separationInPixels); +}; + +/** + * Text that goes above the score + * @param {number} width + * @param {object} abctune + */ +Renderer.prototype.engraveTopText = function(width, abctune) { + if (abctune.metaText.header && this.isPrint) { + // Note: whether there is a header or not doesn't change any other positioning, so this doesn't change the Y-coordinate. + // This text goes above the margin, so we'll temporarily move up. + var headerTextHeight = this.getTextSize("XXXX", "headerfont", 'abcjs-header abcjs-meta-top').height; + this.y -=headerTextHeight; + this.outputTextIf(this.padding.left, abctune.metaText.header.left, 'headerfont', 'header meta-top', 0, null, 'start'); + this.outputTextIf(this.padding.left + width / 2, abctune.metaText.header.center, 'headerfont', 'header meta-top', 0, null, 'middle'); + this.outputTextIf(this.padding.left + width, abctune.metaText.header.right, 'headerfont', 'header meta-top', 0, null, 'end'); + this.y += headerTextHeight; + } + if (this.isPrint) + this.moveY(this.spacing.top); + this.outputTextIf(this.padding.left + width / 2, abctune.metaText.title, 'titlefont', 'title meta-top', this.spacing.title, 0, 'middle'); + if (abctune.lines[0]) + this.outputTextIf(this.padding.left + width / 2, abctune.lines[0].subtitle, 'subtitlefont', 'text meta-top', this.spacing.subtitle, 0, 'middle'); + + if (abctune.metaText.rhythm || abctune.metaText.origin || abctune.metaText.composer) { + this.moveY(this.spacing.composer); + var rSpace = this.outputTextIf(this.padding.left, abctune.metaText.rhythm, 'infofont', 'meta-top', 0, null, "start"); + + var composerLine = ""; + if (abctune.metaText.composer) composerLine += abctune.metaText.composer; + if (abctune.metaText.origin) composerLine += ' (' + abctune.metaText.origin + ')'; + if (composerLine.length > 0) { + var space = this.outputTextIf(this.padding.left + width, composerLine, 'composerfont', 'meta-top', 0, null, "end"); + this.moveY(space[1]); + } else { + this.moveY(rSpace[1]); + } + // TODO-PER: The following is a hack to make the elements line up with abcm2ps. Don't know where the extra space is coming from. + this.moveY(-6); + //} else if (this.isPrint) { + // // abcm2ps adds this space whether there is anything to write or not. + // this.moveY(this.spacing.composer); + // var space2 = this.getTextSize("M", 'composerfont', 'meta-top'); + // this.moveY(space2.height); + } + + this.outputTextIf(this.padding.left + width, abctune.metaText.author, 'composerfont', 'meta-top', 0, 0, "end"); + //this.skipSpaceY(); + + this.outputTextIf(this.padding.left, abctune.metaText.partOrder, 'partsfont', 'meta-bottom', 0, 0, "start"); +}; + +/** + * Text that goes below the score + * @param {number} width + * @param {object} abctune + */ +Renderer.prototype.engraveExtraText = function(width, abctune) { + this.lineNumber = null; + this.measureNumber = null; + this.noteNumber = null; + this.voiceNumber = null; + + if (abctune.metaText.unalignedWords) { + var hash = this.getFontAndAttr("wordsfont", 'meta-bottom'); + var space = this.getTextSize("i", 'wordsfont', 'meta-bottom'); + + if (abctune.metaText.unalignedWords.length > 0) + this.moveY(this.spacing.words, 1); + for (var j = 0; j < abctune.metaText.unalignedWords.length; j++) { + if (abctune.metaText.unalignedWords[j] === '') + this.moveY(hash.font.size, 1); + else if (typeof abctune.metaText.unalignedWords[j] === 'string') { + this.outputTextIf(this.padding.left + abc_spacing.INDENT, abctune.metaText.unalignedWords[j], 'wordsfont', 'meta-bottom', 0, 0, "start"); + } else { + var largestY = 0; + var offsetX = 0; + for (var k = 0; k < abctune.metaText.unalignedWords[j].length; k++) { + var thisWord = abctune.metaText.unalignedWords[j][k]; + var type = (thisWord.font) ? thisWord.font : "wordsfont"; + var el = this.renderText(this.padding.left + abc_spacing.INDENT + offsetX, this.y, thisWord.text, type, 'meta-bottom', false); + var size = this.getTextSize(thisWord.text, type, 'meta-bottom'); + largestY = Math.max(largestY, size.height); + offsetX += size.width; + // If the phrase ends in a space, then that is not counted in the width, so we need to add that in ourselves. + if (thisWord.text[thisWord.text.length-1] === ' ') { + offsetX += space.width; + } + } + this.moveY(largestY, 1); + } + } + if (abctune.metaText.unalignedWords.length > 0) + this.moveY(hash.font.size, 2); + } + + var extraText = ""; + if (abctune.metaText.book) extraText += "Book: " + abctune.metaText.book + "\n"; + if (abctune.metaText.source) extraText += "Source: " + abctune.metaText.source + "\n"; + if (abctune.metaText.discography) extraText += "Discography: " + abctune.metaText.discography + "\n"; + if (abctune.metaText.notes) extraText += "Notes: " + abctune.metaText.notes + "\n"; + if (abctune.metaText.transcription) extraText += "Transcription: " + abctune.metaText.transcription + "\n"; + if (abctune.metaText.history) extraText += "History: " + abctune.metaText.history + "\n"; + if (abctune.metaText['abc-copyright']) extraText += "Copyright: " + abctune.metaText['abc-copyright'] + "\n"; + if (abctune.metaText['abc-creator']) extraText += "Creator: " + abctune.metaText['abc-creator'] + "\n"; + if (abctune.metaText['abc-edited-by']) extraText += "Edited By: " + abctune.metaText['abc-edited-by'] + "\n"; + this.outputTextIf(this.padding.left, extraText, 'historyfont', 'meta-bottom', this.spacing.info, 0, "start"); + + if (abctune.metaText.footer && this.isPrint) { + // Note: whether there is a footer or not doesn't change any other positioning, so this doesn't change the Y-coordinate. + this.outputTextIf(this.padding.left, abctune.metaText.footer.left, 'footerfont', 'header meta-bottom', 0, null, 'start'); + this.outputTextIf(this.padding.left + width / 2, abctune.metaText.footer.center, 'footerfont', 'header meta-bottom', 0, null, 'middle'); + this.outputTextIf(this.padding.left + width, abctune.metaText.footer.right, 'footerfont', 'header meta-bottom', 0, null, 'end'); + } +}; + +/** + * Output text defined with %%text. + * @param {array or string} text + */ +Renderer.prototype.outputFreeText = function (text, vskip) { + if (vskip) + this.moveY(vskip); + var hash = this.getFontAndAttr('textfont', 'defined-text'); + if (text === "") { // we do want to print out blank lines if they have been specified. + this.moveY(hash.attr['font-size'] * 2); // move the distance of the line, plus the distance of the margin, which is also one line. + } else if (typeof text === 'string') { + this.moveY(hash.attr['font-size']/2); // TODO-PER: move down some - the y location should be the top of the text, but we output text specifying the center line. + this.outputTextIf(this.padding.left, text, 'textfont', 'defined-text', 0, 0, "start"); + } else { + var str = ""; + var isCentered = false; // The structure is wrong here: it requires an array to do centering, but it shouldn't have. + for (var i = 0; i < text.length; i++) { + if (text[i].font) + str += "FONT(" + text[i].font + ")"; + str += text[i].text; + if (text[i].center) + isCentered = true; + } + var alignment = isCentered ? 'middle' : 'start'; + var x = isCentered ? this.controller.width / 2 : this.padding.left; + this.outputTextIf(x, str, 'textfont', 'defined-text', 0, 1, alignment); + } +}; + +Renderer.prototype.outputSeparator = function (separator) { + if (!separator.lineLength) + return; + this.moveY(separator.spaceAbove); + this.printSeparator(separator.lineLength); + this.moveY(separator.spaceBelow); +}; + +/** + * Output an extra subtitle that is defined later in the tune. + */ +Renderer.prototype.outputSubtitle = function (width, subtitle) { + this.outputTextIf(this.padding.left + width / 2, subtitle, 'subtitlefont', 'text meta-top', this.spacing.subtitle, 0, 'middle'); +}; + +/** + * Begin a group of glyphs that will always be moved, scaled and highlighted together + */ +Renderer.prototype.beginGroup = function () { + this.path = []; + this.lastM = [0,0]; + this.ingroup = true; +}; + +/** + * Add a path to the current group + * @param {Array} path + * @private + */ +Renderer.prototype.addPath = function (path) { + path = path || []; + if (path.length===0) return; + path[0][0]="m"; + path[0][1]-=this.lastM[0]; + path[0][2]-=this.lastM[1]; + this.lastM[0]+=path[0][1]; + this.lastM[1]+=path[0][2]; + this.path.push(path[0]); + for (var i=1,ii=path.length;i 1 && symbol.indexOf(".") < 0) { + this.paper.openGroup(); + var dx = 0; + for (var i = 0; i < symbol.length; i++) { + var s = symbol.charAt(i); + ycorr = abc_glyphs.getYCorr(s); + el = abc_glyphs.printSymbol(x + dx, this.calcY(offset + ycorr), s, this.paper, klass); + if (el) { + if (this.doRegression) this.addToRegression(el); + //elemset.push(el); + if (i < symbol.length - 1) + dx += kernSymbols(s, symbol.charAt(i + 1), abc_glyphs.getSymbolWidth(s)); + } else { + this.renderText(x, this.y, "no symbol:" + symbol, "debugfont", 'debug-msg', 'start'); + } + } + return this.paper.closeGroup(); + } else { + ycorr = abc_glyphs.getYCorr(symbol); + if (this.ingroup) { + this.addPath(abc_glyphs.getPathForSymbol(x, this.calcY(offset + ycorr), symbol, scalex, scaley)); + } else { + el = abc_glyphs.printSymbol(x, this.calcY(offset + ycorr), symbol, this.paper, klass); + if (el) { + if (this.doRegression) this.addToRegression(el); + return el; + } else + this.renderText(x, this.y, "no symbol:" + symbol, "debugfont", 'debug-msg', 'start'); + } + return null; + } +}; + +Renderer.prototype.scaleExistingElem = function (elem, scaleX, scaleY, x, y) { + this.paper.setAttributeOnElement(elem, { style: "transform:scale("+scaleX+","+scaleY + ");transform-origin:" + x + "px " + y + "px;"}); +}; + +Renderer.prototype.printPath = function (attrs) { + var ret = this.paper.path(attrs); + if (this.doRegression) this.addToRegression(ret); + return ret; +}; + +Renderer.prototype.drawBrace = function(xLeft, yTop, yBottom) {//Tony + var yHeight = yBottom - yTop; + + var xCurve = [7.5, -8, 21, 0, 18.5, -10.5, 7.5]; + var yCurve = [0, yHeight/5.5, yHeight/3.14, yHeight/2, yHeight/2.93, yHeight/4.88, 0]; + + var pathString = sprintf_1("M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z", + xLeft+xCurve[0], yTop+yCurve[0], + xLeft+xCurve[1], yTop+yCurve[1], + xLeft+xCurve[2], yTop+yCurve[2], + xLeft+xCurve[3], yTop+yCurve[3], + xLeft+xCurve[4], yTop+yCurve[4], + xLeft+xCurve[5], yTop+yCurve[5], + xLeft+xCurve[6], yTop+yCurve[6]); + var ret1 = this.paper.path({path:pathString, stroke:"#000000", fill:"#000000", 'class': this.addClasses('brace')}); + + xCurve = [0, 17.5, -7.5, 6.6, -5, 20, 0]; + yCurve = [yHeight/2, yHeight/1.46, yHeight/1.22, yHeight, yHeight/1.19, yHeight/1.42, yHeight/2]; + + pathString = sprintf_1("M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z", + xLeft+xCurve[ 0], yTop+yCurve[0], + xLeft+xCurve[1], yTop+yCurve[1], + xLeft+xCurve[2], yTop+yCurve[2], + xLeft+xCurve[3], yTop+yCurve[3], + xLeft+xCurve[4], yTop+yCurve[4], + xLeft+xCurve[5], yTop+yCurve[5], + xLeft+xCurve[6], yTop+yCurve[6]); + var ret2 = this.paper.path({path:pathString, stroke:"#000000", fill:"#000000", 'class': this.addClasses('brace')}); + + if (this.doRegression){ + this.addToRegression(ret1); + this.addToRegression(ret2); + } + return ret1 + ret2; +}; + +Renderer.prototype.drawArc = function(x1, x2, pitch1, pitch2, above, klass, isTie) { + // If it is a tie vs. a slur, draw it shallower. + var spacing = isTie ? 1.2 : 1.5; + + x1 = x1 + 6; + x2 = x2 + 4; + pitch1 = pitch1 + ((above)?spacing:-spacing); + pitch2 = pitch2 + ((above)?spacing:-spacing); + var y1 = this.calcY(pitch1); + var y2 = this.calcY(pitch2); + + //unit direction vector + var dx = x2-x1; + var dy = y2-y1; + var norm= Math.sqrt(dx*dx+dy*dy); + var ux = dx/norm; + var uy = dy/norm; + + var flatten = norm/3.5; + var maxFlatten = isTie ? 10 : 25; // If it is a tie vs. a slur, draw it shallower. + var curve = ((above)?-1:1)*Math.min(maxFlatten, Math.max(4, flatten)); + + var controlx1 = x1+flatten*ux-curve*uy; + var controly1 = y1+flatten*uy+curve*ux; + var controlx2 = x2-flatten*ux-curve*uy; + var controly2 = y2-flatten*uy+curve*ux; + var thickness = 2; + var pathString = sprintf_1("M %f %f C %f %f %f %f %f %f C %f %f %f %f %f %f z", x1, y1, + controlx1, controly1, controlx2, controly2, x2, y2, + controlx2-thickness*uy, controly2+thickness*ux, controlx1-thickness*uy, controly1+thickness*ux, x1, y1); + if (klass) + klass += ' slur'; + else + klass = 'slur'; + var ret = this.paper.path({path:pathString, stroke:"none", fill:"#000000", 'class': this.addClasses(klass)}); + if (this.doRegression) this.addToRegression(ret); + + return ret; +}; +/** + * Calculates the y for a given pitch value (relative to the stave the renderer is currently printing) + * @param {number} ofs pitch value (bottom C on a G clef = 0, D=1, etc.) + */ +Renderer.prototype.calcY = function(ofs) { + return this.y - ofs*abc_spacing.STEP; +}; + +/** + * Print @param {number} numLines. If there is 1 line it is the B line. Otherwise the bottom line is the E line. + */ +Renderer.prototype.printStave = function (startx, endx, numLines) { + var klass = "top-line"; + this.paper.openGroup({ prepend: true }); + // If there is one line, it is the B line. Otherwise, the bottom line is the E line. + if (numLines === 1) { + this.printStaveLine(startx,endx,6, klass); + return; + } + for (var i = numLines-1; i >= 0; i--) { + this.printStaveLine(startx,endx,(i+1)*2, klass); + klass = undefined; + } + this.paper.closeGroup(); +}; + +/** + * + * @private + */ +Renderer.prototype.addClasses = function (c, isNote) { + if (!this.shouldAddClasses) + return ""; + var ret = []; + if (c.length > 0) ret.push(c); + if (this.lineNumber !== null && this.lineNumber !== undefined) ret.push("l"+this.lineNumber); + if (this.measureNumber !== null && this.measureNumber !== undefined) ret.push("m"+this.measureNumber); + if (this.voiceNumber !== null && this.voiceNumber !== undefined) ret.push("v"+this.voiceNumber); + if ((c.indexOf('note') >= 0 || c.indexOf('rest') >= 0 || c.indexOf('lyric') >= 0 ) && this.noteNumber !== null && this.noteNumber !== undefined) ret.push("n"+this.noteNumber); + // add a prefix to all classes that abcjs adds. + if (ret.length > 0) { + ret = ret.join(' '); // Some strings are compound classes - that is, specify more than one class in a string. + ret = ret.split(' '); + for (var i = 0; i < ret.length; i++) { + if (ret[i].indexOf('abcjs-') !== 0 && ret[i].length > 0) // if the prefix doesn't already exist and the class is not blank. + ret[i] = 'abcjs-' + ret[i]; + } + } + return ret.join(' '); +}; + +Renderer.prototype.getFontAndAttr = function(type, klass) { + var font; + if (typeof type === 'string') { + font = this.abctune.formatting[type]; + // Raphael deliberately changes the font units to pixels for some reason, so we need to change points to pixels here. + if (font) + font = {face: font.face, size: font.size * 4 / 3, decoration: font.decoration, style: font.style, weight: font.weight, box: font.box}; + else + font = {face: "Arial", size: 12 * 4 / 3, decoration: "underline", style: "normal", weight: "normal"}; + } else + font = {face: type.face, size: type.size * 4 / 3, decoration: type.decoration, style: type.style, weight: type.weight, box: type.box}; + + var attr = {"font-size": font.size, 'font-style': font.style, + "font-family": font.face, 'font-weight': font.weight, 'text-decoration': font.decoration, + 'class': this.addClasses(klass) }; + attr.font = ""; // There is a spurious font definition that is put on all text elements. This overwrites it. + return { font: font, attr: attr }; +}; + +Renderer.prototype.getTextSize = function(text, type, klass, el) { + var hash = this.getFontAndAttr(type, klass); + var size = this.paper.getTextSize(text, hash.attr, el); + if (hash.font.box) { + size.height += 8; + size.width += 8; + } + return size; +}; + +Renderer.prototype.renderText = function(x, y, text, type, klass, anchor, centerVertically) { + var hash = this.getFontAndAttr(type, klass); + if (anchor) + hash.attr["text-anchor"] = anchor; + hash.attr.x = x; + hash.attr.y = y + 7; // TODO-PER: Not sure why the text appears to be 7 pixels off. + if (!centerVertically) + hash.attr.dy = "0.5em"; + if (type === 'debugfont') { + console.log("Debug msg: " + text); + hash.attr.stroke = "#ff0000"; + } + + text = text.replace(/\n\n/g, "\n \n"); + text = text.replace(/^\n/, "\xA0\n"); + + if (hash.font.box) { + hash.attr.x += 2; + hash.attr.y += 4; + } + var el = this.paper.text(text, hash.attr); + + if (hash.font.box) { + var size = this.getTextSize(text, type, klass); + var padding = 2; + var margin = 2; + this.paper.rect({ x: x - padding, y: y, width: size.width + padding*2, height: size.height + padding*2 - margin, stroke: "#888888", fill: "transparent"}); + //size.height += 8; + } + if (this.doRegression) this.addToRegression(el); + return el; +}; + +Renderer.prototype.moveY = function (em, numLines) { + if (numLines === undefined) numLines = 1; + this.y += em*numLines; +}; + +Renderer.prototype.skipSpaceY = function () { + this.y += this.space; +}; + +// Call with 'kind' being the font type to use, +// if marginBottom === null then don't increment the Y after printing, otherwise that is the extra number of em's to leave below the line. +// and alignment being "start", "middle", or "end". +Renderer.prototype.outputTextIf = function(x, str, kind, klass, marginTop, marginBottom, alignment) { + if (str) { + if (marginTop) + this.moveY(marginTop); + var el = this.renderText(x, this.y, str, kind, klass, alignment); + var bb = this.getTextSize(str, kind, klass); + var width = isNaN(bb.width) ? 0 : bb.width; + var height = isNaN(bb.height) ? 0 : bb.height; + var hash = this.getFontAndAttr(kind, klass); + if (hash.font.box) { + width += 8; + height += 8; + } + if (marginBottom !== null) { + var numLines = str.split("\n").length; + if (!isNaN(bb.height)) + this.moveY(height/numLines, (numLines + marginBottom)); + } + return [width, height]; + } + return [0,0]; +}; + +Renderer.prototype.addInvisibleMarker = function (className) { + var dy = 0.35; + var fill = "rgba(0,0,0,0)"; + var y = this.y; + y = Math.round(y); + var x1 = 0; + var x2 = 100; + var pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x1, y-dy, x1+x2, y-dy, + x2, y+dy, x1, y+dy); + this.paper.pathToBack({path:pathString, stroke:"none", fill:fill, "fill-opacity": 0, 'class': this.addClasses(className), 'data-vertical': y }); +}; + +Renderer.prototype.printSeparator = function(width) { + var fill = "rgba(0,0,0,255)"; + var stroke = "rgba(0,0,0,0)"; + var y = Math.round(this.y); + var staffWidth = this.controller.width; + var x1 = (staffWidth - width)/2; + var x2 = x1 + width; + var pathString = 'M ' + x1 + ' ' + y + + ' L ' + x2 + ' ' + y + + ' L ' + x2 + ' ' + (y+1) + + ' L ' + x1 + ' ' + (y+1) + + ' L ' + x1 + ' ' + y + ' z'; + this.paper.pathToBack({path:pathString, stroke:stroke, fill:fill, 'class': this.addClasses('defined-text')}); +}; + +// For debugging, it is sometimes useful to know where you are vertically. +Renderer.prototype.printHorizontalLine = function (width, vertical, comment) { + var dy = 0.35; + var fill = "rgba(0,0,255,.4)"; + var y = this.y; + if (vertical) y = vertical; + y = Math.round(y); + this.paper.text(""+Math.round(y), {x: 10, y: y, "text-anchor": "start", "font-size":"18px", fill: fill, stroke: fill }); + var x1 = 50; + var x2 = width; + var pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x1, y-dy, x1+x2, y-dy, + x2, y+dy, x1, y+dy); + this.paper.pathToBack({path:pathString, stroke:"none", fill:fill, 'class': this.addClasses('staff')}); + for (var i = 1; i < width/100; i++) { + pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", i*100-dy, y-5, i*100-dy, y+5, + i*100+dy, y-5, i*100+dy, y+5); + this.paper.pathToBack({path:pathString, stroke:"none", fill:fill, 'class': this.addClasses('staff')}); + } + if (comment) + this.paper.text(comment, {x: width+70, y: y, "text-anchor": "start", "font-size":"18px", fill: fill, stroke: fill }); +}; + +Renderer.prototype.printShadedBox = function (x, y, width, height, color, opacity, comment) { + var box = this.paper.rect({ x: x, y: y, width: width, height: height, fill: color, stroke: color, "fill-opacity": opacity, "stroke-opacity": opacity }); + if (comment) + this.paper.text(comment, {x: 0, y: y+7, "text-anchor": "start", "font-size":"14px", fill: "rgba(0,0,255,.4)", stroke: "rgba(0,0,255,.4)" }); + return box; +}; + +Renderer.prototype.printVerticalLine = function (x, y1, y2) { + var dy = 0.35; + var fill = "#00aaaa"; + var pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x - dy, y1, x - dy, y2, + x + dy, y1, x + dy, y2); + this.paper.pathToBack({path: pathString, stroke: "none", fill: fill, 'class': this.addClasses('staff')}); + pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x - 20, y1, x - 20, y1+3, + x, y1, x, y1+3); + this.paper.pathToBack({path: pathString, stroke: "none", fill: fill, 'class': this.addClasses('staff')}); + pathString = sprintf_1("M %f %f L %f %f L %f %f L %f %f z", x + 20, y2, x + 20, y2+3, + x, y2, x, y2+3); + this.paper.pathToBack({path: pathString, stroke: "none", fill: fill, 'class': this.addClasses('staff')}); + +}; + +/** + * @private + */ +Renderer.prototype.addToRegression = function (el) { + var box; + try { + box = el.getBBox(); + } catch(e) { + box = { width: 0, height: 0 }; + } + //var str = "("+box.x+","+box.y+")["+box.width+","+box.height+"] " + var str = el.type + ' ' + box.toString() + ' '; + var attrs = []; + for (var key in el.attrs) { + if (el.attrs.hasOwnProperty(key)) { + if (key === 'class') + str = el.attrs[key] + " " + str; + else + attrs.push(key+": "+el.attrs[key]); + } + } + attrs.sort(); + str += "{ " +attrs.join(" ") + " }"; + this.regressionLines.push(str); +}; + +var abc_renderer = Renderer; + +// abc_engraver_controller.js: Controls the engraving process of an ABCJS abstract syntax tree as produced by ABCJS/parse +// Copyright (C) 2014-2018 Gregory Dyke (gregdyke at gmail dot com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +/*global Math */ + +var spacing$1 = abc_spacing; + + + +/** + * @class + * Controls the engraving process, from ABCJS Abstract Syntax Tree (ABCJS AST) to rendered score sheet + * + * Call engraveABC to run the process. This creates a graphelems ABCJS Abstract Engraving Structure (ABCJS AES) that can be accessed through this.staffgroups + * this data structure is first laid out (giving the graphelems x and y coordinates) and then drawn onto the renderer + * each ABCJS AES represents a single staffgroup - all elements that are not in a staffgroup are rendered directly by the controller + * + * elements in ABCJS AES know their "source data" in the ABCJS AST, and their "target shape" + * in the renderer for highlighting purposes + * + * @param {Object} paper div element that will wrap the SVG + * @param {Object} params all the params -- documented on github //TODO-GD move some of that documentation here + */ +var EngraverController = function(paper, params) { + params = params || {}; + this.responsive = params.responsive; + this.space = 3*spacing$1.SPACE; + this.scale = params.scale ? parseFloat(params.scale) : 0; + if (!(this.scale > 0.1)) + this.scale = undefined; + + if (params.staffwidth) { + // Note: Normally all measurements to the engraver are in POINTS. However, if a person is formatting for the + // screen and directly inputting the width, then it is more logical to have the measurement in pixels. + this.staffwidthScreen = params.staffwidth; + this.staffwidthPrint = params.staffwidth; + } else { + this.staffwidthScreen = 740; // TODO-PER: Not sure where this number comes from, but this is how it's always been. + this.staffwidthPrint = 680; // The number of pixels in 8.5", after 1cm of margin has been removed. + } + this.editable = params.editable || false; + this.listeners = []; + if (params.clickListener) + this.addSelectListener(params.clickListener); + + this.renderer=new abc_renderer(paper, params.regression, params.add_classes); + this.renderer.setPaddingOverride(params); + this.renderer.controller = this; // TODO-GD needed for highlighting + + this.reset(); +}; + +EngraverController.prototype.reset = function() { + this.selected = []; + this.ingroup = false; + this.staffgroups = []; + this.lastStaffGroupIndex = -1; + if (this.engraver) + this.engraver.reset(); + this.engraver = null; + this.renderer.reset(); +}; + +/** + * run the engraving process + * @param {ABCJS.Tune|ABCJS.Tune[]} abctunes + */ +EngraverController.prototype.engraveABC = function(abctunes, tuneNumber) { + if (abctunes[0]===undefined) { + abctunes = [abctunes]; + } + this.reset(); + + for (var i = 0; i < abctunes.length; i++) { + if (tuneNumber === undefined) + tuneNumber = i; + this.engraveTune(abctunes[i], tuneNumber); + } + if (this.renderer.doRegression) + return this.renderer.regressionLines.join("\n"); +}; + +/** + * Some of the items on the page are not scaled, so adjust them in the opposite direction of scaling to cancel out the scaling. + * @param {float} scale + */ +EngraverController.prototype.adjustNonScaledItems = function (scale) { + this.width /= scale; + this.renderer.adjustNonScaledItems(scale); +}; + +EngraverController.prototype.getMeasureWidths = function(abcTune) { + this.reset(); + + this.renderer.lineNumber = null; + + this.renderer.newTune(abcTune); + this.engraver = new abc_abstract_engraver(this.renderer, 0, { bagpipes: abcTune.formatting.bagpipes, flatbeams: abcTune.formatting.flatbeams }); + this.engraver.setStemHeight(this.renderer.spacing.stemHeight); + if (abcTune.formatting.staffwidth) { + this.width = abcTune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px. + } else { + this.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen; + } + + var scale = abcTune.formatting.scale ? abcTune.formatting.scale : this.scale; + if (this.responsive === "resize") // The resizing will mess with the scaling, so just don't do it explicitly. + scale = undefined; + if (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1; + this.adjustNonScaledItems(scale); + + var ret = { left: 0, measureWidths: [], height: 0, total: 0 }; + // TODO-PER: need to add the height of the title block, too. + ret.height = this.renderer.padding.top + this.renderer.spacing.music + this.renderer.padding.bottom + 24; // the 24 is the empirical value added to the bottom of all tunes. + var debug = false; + var hasPrintedTempo = false; + for(var i=0; i 0) { + var voice = abcLine.staffGroup.voices[0]; + var foundNotStaffExtra = false; + var lastXPosition = 0; + for (var k = 0; k < voice.children.length; k++) { + var child = voice.children[k]; + if (!foundNotStaffExtra && !child.isClef && !child.isKeySig) { + foundNotStaffExtra = true; + ret.left = child.x; + lastXPosition = child.x; + } + if (child.type === 'bar') { + ret.measureWidths.push(child.x - lastXPosition); + ret.total += (child.x - lastXPosition); + lastXPosition = child.x; + } + } + } + hasPrintedTempo = true; + ret.height += abcLine.staffGroup.calcHeight() * spacing$1.STEP; + } + } + return ret; +}; + +/** + * Run the engraving process on a single tune + * @param {ABCJS.Tune} abctune + */ +EngraverController.prototype.engraveTune = function (abctune, tuneNumber) { + this.renderer.lineNumber = null; + + this.renderer.newTune(abctune); + this.engraver = new abc_abstract_engraver(this.renderer, tuneNumber, { bagpipes: abctune.formatting.bagpipes, flatbeams: abctune.formatting.flatbeams }); + this.engraver.setStemHeight(this.renderer.spacing.stemHeight); + this.engraver.measureLength = abctune.getMeterFraction().num/abctune.getMeterFraction().den; + if (abctune.formatting.staffwidth) { + this.width = abctune.formatting.staffwidth * 1.33; // The width is expressed in pt; convert to px. + } else { + this.width = this.renderer.isPrint ? this.staffwidthPrint : this.staffwidthScreen; + } + + var scale = abctune.formatting.scale ? abctune.formatting.scale : this.scale; + if (this.responsive === "resize") // The resizing will mess with the scaling, so just don't do it explicitly. + scale = undefined; + if (scale === undefined) scale = this.renderer.isPrint ? 0.75 : 1; + this.adjustNonScaledItems(scale); + + // Generate the raw staff line data + var i; + var abcLine; + var hasPrintedTempo = false; + for(i=0; i maxWidth) maxWidth = abcLine.staffGroup.w; + } + } + + // Layout the beams and add the stems to the beamed notes. + for(i=0; i 0) { + spacing = (targetWidth - constSpace) / spacingUnits; + if (spacing * minSpace > 50) { + spacing = 50 / minSpace; + } + return spacing; + } + return null; +} + +/** + * Do the x-axis positioning for a single line (a group of related staffs) + * @param {ABCJS.Tune} abctune an ABCJS AST + * @param {Object} staffGroup an staffGroup + * @param {Object} formatting an formatting + * @param {boolean} isLastLine is this the last line to be printed? + * @private + */ +EngraverController.prototype.setXSpacing = function (staffGroup, formatting, isLastLine, debug) { + var newspace = this.space; + for (var it = 0; it < 8; it++) { // TODO-PER: shouldn't need multiple passes, but each pass gets it closer to the right spacing. (Only affects long lines: normal lines break out of this loop quickly.) + var ret = staffGroup.layout(newspace, this.renderer, debug); + var stretchLast = formatting.stretchlast ? formatting.stretchlast : false; + newspace = calcHorizontalSpacing(isLastLine, stretchLast, this.width+this.renderer.padding.left, staffGroup.w, newspace, ret.spacingUnits, ret.minSpace); + if (debug) + console.log("setXSpace", it, staffGroup.w, newspace, staffGroup.minspace); + if (newspace === null) break; + } + centerWholeRests(staffGroup.voices); + //this.renderer.printHorizontalLine(this.width); +}; + +/** + * Engrave a single line (a group of related staffs) + * @param {ABCJS.Tune} abctune an ABCJS AST + * @param {Object} staffGroup an staffGroup + * @private + */ +EngraverController.prototype.engraveStaffLine = function (staffGroup) { + if (this.lastStaffGroupIndex > -1) + this.renderer.addStaffPadding(this.staffgroups[this.lastStaffGroupIndex], staffGroup); + this.renderer.voiceNumber = null; + staffGroup.draw(this.renderer); + var height = staffGroup.height * spacing$1.STEP; + //this.renderer.printVerticalLine(this.width+this.renderer.padding.left, this.renderer.y, this.renderer.y+height); + this.staffgroups[this.staffgroups.length] = staffGroup; + this.lastStaffGroupIndex = this.staffgroups.length-1; + this.renderer.y += height; +}; + +/** + * Called by the Abstract Engraving Structure or any other (e.g. midi playback) to say it was selected (notehead clicked on) + * @protected + */ +EngraverController.prototype.notifySelect = function (abselem, tuneNumber, classes) { + this.clearSelection(); + if (abselem.highlight) { + this.selected = [abselem]; + abselem.highlight(); + } + var abcelem = abselem.abcelem || {}; + for (var i=0; ielStart && start=start && elems[elem].abcelem.endChar<=end) { + this.selected[this.selected.length]=elems[elem]; + elems[elem].highlight(); + } + } + } + } +}; + + +function centerWholeRests(voices) { + // whole rests are a special case: if they are by themselves in a measure, then they should be centered. + // (If they are not by themselves, that is probably a user error, but we'll just center it between the two items to either side of it.) + for (var i = 0; i < voices.length; i++) { + var voice = voices[i]; + // Look through all of the elements except for the first and last. If the whole note appears there then there isn't anything to center it between anyway. + for (var j = 1; j < voice.children.length-1; j++) { + var absElem = voice.children[j]; + if (absElem.abcelem.rest && (absElem.abcelem.rest.type === 'whole' || absElem.abcelem.rest.type === 'multimeasure')) { + var before = voice.children[j-1]; + var after = voice.children[j+1]; + var midpoint = (after.x - before.x) / 2 + before.x; + absElem.x = midpoint - absElem.w / 2; + for (var k = 0; k < absElem.children.length; k++) + absElem.children[k].x = absElem.x; + } + } + } +} + +var abc_engraver_controller = EngraverController; + +var resizeDivs = {}; +function resizeOuter() { + var width = window.innerWidth; + for (var id in resizeDivs) { + if (resizeDivs.hasOwnProperty(id)) { + var outer = resizeDivs[id]; + var ofs = outer.offsetLeft; + width -= ofs * 2; + outer.style.width = width + "px"; + } + } +} + +window.addEventListener("resize", resizeOuter); +window.addEventListener("orientationChange", resizeOuter); + +function renderOne(div, tune, params, tuneNumber) { + if (params.viewportHorizontal) { + // Create an inner div that holds the music, so that the passed in div will be the viewport. + div.innerHTML = '
'; + if (params.scrollHorizontal) { + div.style.overflowX = "auto"; + div.style.overflowY = "hidden"; + } else + div.style.overflow = "hidden"; + resizeDivs[div.id] = div; // We use a hash on the element's id so that multiple calls won't keep adding to the list. + div = div.children[0]; // The music should be rendered in the inner div. + } + else if (params.viewportVertical) { + // Create an inner div that holds the music, so that the passed in div will be the viewport. + div.innerHTML = '
'; + div.style.overflowX = "hidden"; + div.style.overflowY = "auto"; + div = div.children[0]; // The music should be rendered in the inner div. + } + else + div.innerHTML = ""; + var engraver_controller = new abc_engraver_controller(div, params); + engraver_controller.engraveABC(tune, tuneNumber); + tune.engraver = engraver_controller; + if (params.viewportVertical || params.viewportHorizontal) { + // If we added a wrapper around the div, then we need to size the wrapper, too. + var parent = div.parentNode; + parent.style.width = div.style.width; + } +} + +function renderEachLineSeparately(div, tune, params, tuneNumber) { + function initializeTuneLine(tune) { + var obj = new abc_tune(); + obj.formatting = tune.formatting; + obj.media = tune.media; + obj.version = tune.version; + obj.metaText = {}; + obj.lines = []; + return obj; + } + + // Before rendering, chop up the returned tune into an array where each element is a line. + // The first element of the array gets the title and other items that go on top, the last element + // of the array gets the extra text that goes on bottom. Each element gets any non-music info that comes before it. + var tunes = []; + var tuneLine; + for (var i = 0; i < tune.lines.length; i++) { + var line = tune.lines[i]; + if (!tuneLine) + tuneLine = initializeTuneLine(tune); + + if (i === 0) { + // These items go on top of the music + tuneLine.metaText.tempo = tune.metaText.tempo; + tuneLine.metaText.title = tune.metaText.title; + tuneLine.metaText.header = tune.metaText.header; + tuneLine.metaText.rhythm = tune.metaText.rhythm; + tuneLine.metaText.origin = tune.metaText.origin; + tuneLine.metaText.composer = tune.metaText.composer; + tuneLine.metaText.author = tune.metaText.author; + tuneLine.metaText.partOrder = tune.metaText.partOrder; + } + + // push the lines until we get to a music line + tuneLine.lines.push(line); + if (line.staff) { + tunes.push(tuneLine); + tuneLine = undefined; + } + } + // Add any extra stuff to the last line. + if (tuneLine) { + var lastLine = tunes[tunes.length-1]; + for (var j = 0; j < tuneLine.lines.length; j++) + lastLine.lines.push(tuneLine.lines[j]); + } + + // These items go below the music + tuneLine = tunes[tunes.length-1]; + tuneLine.metaText.unalignedWords = tune.metaText.unalignedWords; + tuneLine.metaText.book = tune.metaText.book; + tuneLine.metaText.source = tune.metaText.source; + tuneLine.metaText.discography = tune.metaText.discography; + tuneLine.metaText.notes = tune.metaText.notes; + tuneLine.metaText.transcription = tune.metaText.transcription; + tuneLine.metaText.history = tune.metaText.history; + tuneLine.metaText['abc-copyright'] = tune.metaText['abc-copyright']; + tuneLine.metaText['abc-creator'] = tune.metaText['abc-creator']; + tuneLine.metaText['abc-edited-by'] = tune.metaText['abc-edited-by']; + tuneLine.metaText.footer = tune.metaText.footer; + + // Now create sub-divs and render each line. Need to copy the params to change the padding for the interior slices. + var ep = {}; + for (var key in params) { + if (params.hasOwnProperty(key)) { + ep[key] = params[key]; + } + } + var origPaddingTop = ep.paddingtop; + var origPaddingBottom = ep.paddingbottom; + div.innerHTML = ""; + for (var k = 0; k < tunes.length; k++) { + var lineEl = document.createElement("div"); + div.appendChild(lineEl); + + if (k === 0) { + ep.paddingtop = origPaddingTop; + ep.paddingbottom = -20; + } else if (k === tunes.length-1) { + ep.paddingtop = 10; + ep.paddingbottom = origPaddingBottom; + } else { + ep.paddingtop = 10; + ep.paddingbottom = -20; + } + renderOne(lineEl, tunes[k], ep, tuneNumber); + if (k === 0) + tune.engraver = tunes[k].engraver; + else { + if (!tune.engraver.staffgroups) + tune.engraver.staffgroups = tunes[k].engraver.staffgroups; + else if (tunes[k].engraver.staffgroups.length > 0) + tune.engraver.staffgroups.push(tunes[k].engraver.staffgroups[0]); + } + } +} + +// A quick way to render a tune from javascript when interactivity is not required. +// This is used when a javascript routine has some abc text that it wants to render +// in a div or collection of divs. One tune or many can be rendered. +// +// parameters: +// output: an array of divs that the individual tunes are rendered to. +// If the number of tunes exceeds the number of divs in the array, then +// only the first tunes are rendered. If the number of divs exceeds the number +// of tunes, then the unused divs are cleared. The divs can be passed as either +// elements or strings of ids. If ids are passed, then the div MUST exist already. +// (if a single element is passed, then it is an implied array of length one.) +// (if a null is passed for an element, or the element doesn't exist, then that tune is skipped.) +// abc: text representing a tune or an entire tune book in ABC notation. +// renderParams: hash of: +// startingTune: an index, starting at zero, representing which tune to start rendering at. +// (If this element is not present, then rendering starts at zero.) +// width: 800 by default. The width in pixels of the output paper +var renderAbc = function(output, abc, parserParams, engraverParams, renderParams) { + // Note: all parameters have been condensed into the first ones. It doesn't hurt anything to allow the old format, so just copy them here. + var params = {}; + var key; + if (parserParams) { + for (key in parserParams) { + if (parserParams.hasOwnProperty(key)) { + params[key] = parserParams[key]; + } + } + } + if (engraverParams) { + for (key in engraverParams) { + if (engraverParams.hasOwnProperty(key)) { + // There is a conflict with the name of the parameter "listener". If it is in the second parameter, then it is for click. + if (key === "listener") { + if (engraverParams[key].highlight) + params.clickListener = engraverParams[key].highlight; + } else + params[key] = engraverParams[key]; + } + } + } + if (renderParams) { + for (key in renderParams) { + if (renderParams.hasOwnProperty(key)) { + params[key] = renderParams[key]; + } + } + } + + function callback(div, tune, tuneNumber, abcString) { + var removeDiv = false; + if (div === "*") { + removeDiv = true; + div = document.createElement("div"); + div.setAttribute("style", "display:none;"); + document.body.appendChild(div); + } + if (params.afterParsing) + params.afterParsing(tune, tuneNumber, abcString); + if (!removeDiv && params.wrap && params.staffwidth) { + tune = doLineWrapping(div, tune, tuneNumber, abcString, params); + return tune; + } + else if (removeDiv || !params.oneSvgPerLine || tune.lines.length < 2) + renderOne(div, tune, params, tuneNumber); + else + renderEachLineSeparately(div, tune, params, tuneNumber); + if (removeDiv) + div.parentNode.removeChild(div); + return null; + } + + return abc_tunebook.renderEngine(callback, output, abc, params); +}; + +function doLineWrapping(div, tune, tuneNumber, abcString, params) { + var engraver_controller = new abc_engraver_controller(div, params); + var widths = engraver_controller.getMeasureWidths(tune); + + var ret = wrap_lines.calcLineWraps(tune, widths, abcString, params, abc_parse, engraver_controller); + if (!params.oneSvgPerLine || ret.tune.lines.length < 2) + renderOne(div, ret.tune, ret.revisedParams, tuneNumber); + else + renderEachLineSeparately(div, ret.tune, ret.revisedParams, tuneNumber); + ret.tune.explanation = ret.explanation; + return ret.tune; +} + +var abc_tunebook_svg = renderAbc; + +var soundsCache = { +}; + +var soundsCache_1 = soundsCache; + +// Load one mp3 file for one note. +// url = the base url for the soundfont +// instrument = the instrument name (e.g. "acoustic_grand_piano") +// name = the pitch name (e.g. "A3") + + +var getNote = function(url, instrument, name, audioContext) { + return new Promise(function (resolve, reject) { + if (!soundsCache_1[instrument]) + soundsCache_1[instrument] = {}; + var instrumentCache = soundsCache_1[instrument]; + + if (instrumentCache[name] === 'error') { + return reject(new Error("Unable to load sound font" + ' ' + url + ' ' + instrument + ' ' + name)); + } + if (instrumentCache[name]) { + return resolve({instrument: instrument, name: name}); + } + + // if (this.debugCallback) + // this.debugCallback(`Loading sound: ${instrument} ${name}`); + instrumentCache[name] = "pending"; // This can be called in parallel, so don't call it a second time before the first one has loaded. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url+instrument+'-mp3/'+name+'.mp3', true); + xhr.responseType = 'arraybuffer'; + + var self = this; + function onSuccess(audioBuffer) { + instrumentCache[name] = audioBuffer; + // if (self.debugCallback) + // self.debugCallback(`Sound loaded: ${instrument} ${name} ${url}`); + resolve({instrument: instrument, name: name}); + } + + function onFailure(error) { + if (self.debugCallback) + self.debugCallback(error); + console.log(error); + reject(error); + } + + xhr.onload = function (e) { + if (this.status === 200) { + audioContext.decodeAudioData(this.response, onSuccess, onFailure);//.then(function() { + // return resolve({instrument: instrument, name: name}); + // }).catch(function(error) { + // return reject(new Error(cantLoadMp3 + error)); + // }); + } else { + instrumentCache[name] = "error"; // To keep this from trying to load repeatedly. + var cantLoadMp3 = "Onload error loading sound: " + name + " " + url + " " + e.currentTarget.status + " " + e.currentTarget.statusText; + if (self.debugCallback) + self.debugCallback(cantLoadMp3); + return reject(new Error(cantLoadMp3)); + } + }; + xhr.addEventListener("error", function () { + instrumentCache[name] = "error"; // To keep this from trying to load repeatedly. + var cantLoadMp3 = "Error in loading sound: " + " " + url; + if (self.debugCallback) + self.debugCallback(cantLoadMp3); + return reject(new Error(cantLoadMp3)); + }, false); + xhr.send(); + }); +}; + +var loadNote = getNote; + +var instrumentIndexToName = [ + "acoustic_grand_piano", + "bright_acoustic_piano", + "electric_grand_piano", + "honkytonk_piano", + "electric_piano_1", + "electric_piano_2", + "harpsichord", + "clavinet", + + "celesta", + "glockenspiel", + "music_box", + "vibraphone", + "marimba", + "xylophone", + "tubular_bells", + "dulcimer", + + "drawbar_organ", + "percussive_organ", + "rock_organ", + "church_organ", + "reed_organ", + "accordion", + "harmonica", + "tango_accordion", + + "acoustic_guitar_nylon", + "acoustic_guitar_steel", + "electric_guitar_jazz", + "electric_guitar_clean", + "electric_guitar_muted", + "overdriven_guitar", + "distortion_guitar", + "guitar_harmonics", + + "acoustic_bass", + "electric_bass_finger", + "electric_bass_pick", + "fretless_bass", + "slap_bass_1", + "slap_bass_2", + "synth_bass_1", + "synth_bass_2", + + "violin", + "viola", + "cello", + "contrabass", + "tremolo_strings", + "pizzicato_strings", + "orchestral_harp", + "timpani", + + "string_ensemble_1", + "string_ensemble_2", + "synth_strings_1", + "synth_strings_2", + "choir_aahs", + "voice_oohs", + "synth_choir", + "orchestra_hit", + + "trumpet", + "trombone", + "tuba", + "muted_trumpet", + "french_horn", + "brass_section", + "synth_brass_1", + "synth_brass_2", + + "soprano_sax", + "alto_sax", + "tenor_sax", + "baritone_sax", + "oboe", + "english_horn", + "bassoon", + "clarinet", + + "piccolo", + "flute", + "recorder", + "pan_flute", + "blown_bottle", + "shakuhachi", + "whistle", + "ocarina", + + "lead_1_square", + "lead_2_sawtooth", + "lead_3_calliope", + "lead_4_chiff", + "lead_5_charang", + "lead_6_voice", + "lead_7_fifths", + "lead_8_bass__lead", + + "pad_1_new_age", + "pad_2_warm", + "pad_3_polysynth", + "pad_4_choir", + "pad_5_bowed", + "pad_6_metallic", + "pad_7_halo", + "pad_8_sweep", + + "fx_1_rain", + "fx_2_soundtrack", + "fx_3_crystal", + "fx_4_atmosphere", + "fx_5_brightness", + "fx_6_goblins", + "fx_7_echoes", + "fx_8_scifi", + + "sitar", + "banjo", + "shamisen", + "koto", + "kalimba", + "bagpipe", + "fiddle", + "shanai", + + "tinkle_bell", + "agogo", + "steel_drums", + "woodblock", + "taiko_drum", + "melodic_tom", + "synth_drum", + "reverse_cymbal", + + "guitar_fret_noise", + "breath_noise", + "seashore", + "bird_tweet", + "telephone_ring", + "helicopter", + "applause", + "gunshot", + + "percussion" +]; + +var instrumentIndexToName_1 = instrumentIndexToName; + +// Convert the input structure to a more useful structure where each item has a length of its own. + + + +var createNoteMap = function(sequence) { + var map = []; + for (var i = 0; i < sequence.tracks.length; i++) + map.push([]); + + // TODO-PER: handle more than one note in a track + var nextNote = {}; + var currentInstrument = instrumentIndexToName_1[0]; + sequence.tracks.forEach(function(track, i) { + var currentTime = 0; + track.forEach(function(ev) { + switch (ev.cmd) { + case "start": + nextNote[ev.pitch] = { time: currentTime, instrument: currentInstrument, volume: ev.volume }; + break; + case "move": + currentTime += ev.duration; + break; + case "stop": + map[i].push({pitch: ev.pitch, instrument: nextNote[ev.pitch].instrument, start: nextNote[ev.pitch].time, end: currentTime, volume: nextNote[ev.pitch].volume}); + delete nextNote[ev.pitch]; + break; + case "program": + currentInstrument = instrumentIndexToName_1[ev.instrument]; + break; + default: + // TODO-PER: handle other event types + console.log("Unhanded midi event", ev); + } + }); + }); + return map; +}; + +var createNoteMap_1 = createNoteMap; + +// Call this when it is safe for the abcjs to produce sound. This is after the first user gesture on the page. +// If you call it with no parameters, then an AudioContext is created and stored. +// If you call it with a parameter, that is used as an already created AudioContext. + +function registerAudioContext(ac) { + if (!window.abcjsAudioContext) { + if (!ac) { + ac = window.AudioContext || + window.webkitAudioContext || + navigator.mozAudioContext || + navigator.msAudioContext; + ac = new ac(); + } + window.abcjsAudioContext = ac; + } + return window.abcjsAudioContext.state !== "suspended"; +} + +var registerAudioContext_1 = registerAudioContext; + +function activeAudioContext() { + return window.abcjsAudioContext; +} + +var activeAudioContext_1 = activeAudioContext; + +// +// Support for audio depends on three things: support for Promise, support for AudioContext, and support for AudioContext.resume. +// Unfortunately, AudioContext.resume cannot be detected unless an AudioContext is created, and creating an AudioContext can't +// be done until a user click, so there is no way to know for sure if audio is supported until the user tries. +// We can get close, though - we can test for Promises and AudioContext - there are just a few evergreen browsers that supported +// that before supporting resume, so we'll test what we can. + +// The best use of this routine is to call it before doing any audio related stuff to decide whether to bother. +// But then, call it again after a user interaction to test for resume. + +function supportsAudio() { + var aac = activeAudioContext_1(); + if (aac) + return aac.resume !== undefined; + + if (!window.Promise) + return false; + + return window.AudioContext || + window.webkitAudioContext || + navigator.mozAudioContext || + navigator.msAudioContext; +} + +var supportsAudio_1 = supportsAudio; + +var pitchToNoteName = { + 21: 'A0', + 22: 'Bb0', + 23: 'B0', + 24: 'C1', + 25: 'Db1', + 26: 'D1', + 27: 'Eb1', + 28: 'E1', + 29: 'F1', + 30: 'Gb1', + 31: 'G1', + 32: 'Ab1', + 33: 'A1', + 34: 'Bb1', + 35: 'B1', + 36: 'C2', + 37: 'Db2', + 38: 'D2', + 39: 'Eb2', + 40: 'E2', + 41: 'F2', + 42: 'Gb2', + 43: 'G2', + 44: 'Ab2', + 45: 'A2', + 46: 'Bb2', + 47: 'B2', + 48: 'C3', + 49: 'Db3', + 50: 'D3', + 51: 'Eb3', + 52: 'E3', + 53: 'F3', + 54: 'Gb3', + 55: 'G3', + 56: 'Ab3', + 57: 'A3', + 58: 'Bb3', + 59: 'B3', + 60: 'C4', + 61: 'Db4', + 62: 'D4', + 63: 'Eb4', + 64: 'E4', + 65: 'F4', + 66: 'Gb4', + 67: 'G4', + 68: 'Ab4', + 69: 'A4', + 70: 'Bb4', + 71: 'B4', + 72: 'C5', + 73: 'Db5', + 74: 'D5', + 75: 'Eb5', + 76: 'E5', + 77: 'F5', + 78: 'Gb5', + 79: 'G5', + 80: 'Ab5', + 81: 'A5', + 82: 'Bb5', + 83: 'B5', + 84: 'C6', + 85: 'Db6', + 86: 'D6', + 87: 'Eb6', + 88: 'E6', + 89: 'F6', + 90: 'Gb6', + 91: 'G6', + 92: 'Ab6', + 93: 'A6', + 94: 'Bb6', + 95: 'B6', + 96: 'C7', + 97: 'Db7', + 98: 'D7', + 99: 'Eb7', + 100: 'E7', + 101: 'F7', + 102: 'Gb7', + 103: 'G7', + 104: 'Ab7', + 105: 'A7', + 106: 'Bb7', + 107: 'B7', + 108: 'C8', + 109: 'Db8', + 110: 'D8', + 111: 'Eb8', + 112: 'E8', + 113: 'F8', + 114: 'Gb8', + 115: 'G8', + 116: 'Ab8', + 117: 'A8', + 118: 'Bb8', + 119: 'B8', + 120: 'C9', + 121: 'Db9' +}; + +var pitchToNoteName_1 = pitchToNoteName; + +var downloadBuffer = function(buffer) { + return window.URL.createObjectURL(bufferToWave(buffer.audioBuffers)); +}; + +// Convert an AudioBuffer to a Blob using WAVE representation +function bufferToWave(audioBuffers) { + var numOfChan = audioBuffers.length; + var length = audioBuffers[0].length * numOfChan * 2 + 44; + var buffer = new ArrayBuffer(length); + var view = new DataView(buffer); + var channels = []; + var i; + var sample; + var offset = 0; + var pos = 0; + + // write WAVE header + setUint32(0x46464952); // "RIFF" + setUint32(length - 8); // file length - 8 + setUint32(0x45564157); // "WAVE" + + setUint32(0x20746d66); // "fmt " chunk + setUint32(16); // length = 16 + setUint16(1); // PCM (uncompressed) + setUint16(numOfChan); + setUint32(audioBuffers[0].sampleRate); + setUint32(audioBuffers[0].sampleRate * 2 * numOfChan); // avg. bytes/sec + setUint16(numOfChan * 2); // block-align + setUint16(16); // 16-bit (hardcoded in this demo) + + setUint32(0x61746164); // "data" - chunk + setUint32(length - pos - 4); // chunk length + + // write interleaved data + for(i = 0; i < audioBuffers.length; i++) + channels.push(audioBuffers[i].getChannelData(0)); + + while(pos < length) { + for(i = 0; i < channels.length; i++) { // interleave channels + sample = Math.max(-1, Math.min(1, channels[i][offset])); // clamp + sample = (0.5 + sample < 0 ? sample * 32768 : sample * 32767)|0; // scale to 16-bit signed int + view.setInt16(pos, sample, true); // write 16-bit sample + pos += 2; + } + offset++; // next source sample + } + + // create Blob + return new Blob([buffer], {type: "audio/wav"}); + + function setUint16(data) { + view.setUint16(pos, data, true); + pos += 2; + } + + function setUint32(data) { + view.setUint32(pos, data, true); + pos += 4; + } +} + +var downloadBuffer_1 = downloadBuffer; + +// abc_midi_sequencer.js: Turn parsed abc into a linear series of events. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var sequence; + +(function() { + + var measureLength; + // The abc is provided to us line by line. It might have repeats in it. We want to re arrange the elements to + // be an array of voices with all the repeats embedded, and no lines. Then it is trivial to go through the events + // one at a time and turn it into midi. + + var PERCUSSION_PROGRAM = 128; + + sequence = function(abctune, options) { + // Global options + options = options || {}; + var qpm = undefined; + var program = options.program || 0; // The program if there isn't a program specified. + var transpose = options.midiTranspose || 0; + var channel = options.channel || 0; + var drumPattern = options.drum || ""; + var drumBars = options.drumBars || 1; + var drumIntro = options.drumIntro || 0; + var drumOn = drumPattern !== ""; + + // All of the above overrides need to be integers + program = parseInt(program, 10); + transpose = parseInt(transpose, 10); + channel = parseInt(channel, 10); + if (channel === 10) + program = PERCUSSION_PROGRAM; + drumPattern = drumPattern.split(" "); + drumBars = parseInt(drumBars, 10); + drumIntro = parseInt(drumIntro, 10); + + var bagpipes = abctune.formatting.bagpipes; // If it is bagpipes, then the gracenotes are played on top of the main note. + if (bagpipes) + program = 71; + + // %%MIDI fermatafixed + // %%MIDI fermataproportional + // %%MIDI deltaloudness n + // %%MIDI gracedivider b + // %%MIDI ratio n m + // %%MIDI beat a b c n + // %%MIDI grace a/b + // %%MIDI trim x/y + + // %MIDI gchordon + // %MIDI gchordoff + // %%MIDI bassprog 45 + // %%MIDI chordprog 24 + // %%MIDI chordname name n1 n2 n3 n4 n5 n6 + + //%%MIDI beat ⟹int1⟩ ⟹int2⟩ ⟹int3⟩ ⟹int4⟩: controls the volumes of the notes in a measure. The first note in a bar has volume ⟹int1⟩; other ‘strong’ notes have volume ⟹int2⟩ and all the rest have volume ⟹int3⟩. These values must be in the range 0–127. The parameter ⟹int4⟩ determines which notes are ‘strong’. If the time signature is x/y, then each note is given a position number k = 0, 1, 2. . . x-1 within each bar. If k is a multiple of ⟹int4⟩, then the note is ‘strong’. + + var startingMidi = []; + if (abctune.formatting.midi) { + //console.log("MIDI Formatting:", abctune.formatting.midi); + var globals = abctune.formatting.midi; + if (globals.program && globals.program.length > 0) { + program = globals.program[0]; + if (globals.program.length > 1) { + program = globals.program[1]; + channel = globals.program[0]; + } + } + if (globals.transpose) + transpose = globals.transpose[0]; + if (globals.channel) + channel = globals.channel[0]; + if (globals.drum) + drumPattern = globals.drum; + if (globals.drumbars) + drumBars = globals.drumbars[0]; + if (globals.drumon) + drumOn = true; + if (channel === 10) + program = PERCUSSION_PROGRAM; + if (globals.beat) + startingMidi.push({ el_type: 'beat', beats: globals.beat }); + if (globals.nobeataccents) + startingMidi.push({ el_type: 'beataccents', value: false }); + + } + + // Specified options in abc string. + + // If the tempo was passed in, use that. + // If the tempo is specified, use that. + // If there is a default, use that. + // Otherwise, use the default. + if (options.qpm) + qpm = parseInt(options.qpm, 10); + else if (abctune.metaText.tempo) + qpm = interpretTempo(abctune.metaText.tempo); + else if (options.defaultQpm) + qpm = options.defaultQpm; + else + qpm = 180; // The tempo if there isn't a tempo specified. + + var startVoice = []; + if (bagpipes) + startVoice.push({ el_type: 'bagpipes' }); + startVoice.push({ el_type: 'instrument', program: program }); + if (channel) + startVoice.push({ el_type: 'channel', channel: channel }); + if (transpose) + startVoice.push({ el_type: 'transpose', transpose: transpose }); + startVoice.push({ el_type: 'tempo', qpm: qpm }); + for (var ss = 0; ss < startingMidi.length;ss++) + startVoice.push(startingMidi[ss]); + + // the relevant part of the input structure is: + // abctune + // array lines + // array staff + // object key + // object meter + // array voices + // array abcelem + + // visit each voice completely in turn + var voices = []; + var startRepeatPlaceholder = []; // There is a place holder for each voice. + var skipEndingPlaceholder = []; // This is the place where the first ending starts. + var startingDrumSet = false; + for (var i = 0; i < abctune.lines.length; i++) { + // For each group of staff lines in the tune. + var line = abctune.lines[i]; + if (line.staff) { + var staves = line.staff; + var voiceNumber = 0; + for (var j = 0; j < staves.length; j++) { + var staff = staves[j]; + // For each staff line + for (var k = 0; k < staff.voices.length; k++) { + // For each voice in a staff line + var voice = staff.voices[k]; + if (!voices[voiceNumber]) { + voices[voiceNumber] = [].concat(JSON.parse(JSON.stringify(startVoice))); + } + if (staff.clef && staff.clef.type === 'perc') { + for (var cl = 0; cl < voices[voiceNumber].length; cl++) { + if (voices[voiceNumber][cl].el_type === 'instrument') + voices[voiceNumber][cl].program = PERCUSSION_PROGRAM; + } + } else if (staff.key) { + if (staff.key.root === 'HP') + voices[voiceNumber].push({el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]}); + else + voices[voiceNumber].push({el_type: 'key', accidentals: staff.key.accidentals }); + } + if (staff.meter) { + voices[voiceNumber].push(interpretMeter(staff.meter)); + } + if (!startingDrumSet && drumOn) { // drum information is only needed once, so use the first line and track 0. + voices[voiceNumber].push({el_type: 'drum', params: {pattern: drumPattern, bars: drumBars, on: drumOn, intro: drumIntro}}); + startingDrumSet = true; + } + if (staff.clef && staff.clef.transpose) { + staff.clef.el_type = 'clef'; + voices[voiceNumber].push({ el_type: 'transpose', transpose: staff.clef.transpose }); + } + if (abctune.formatting.midi && abctune.formatting.midi.drumoff) { + // If there is a drum off command right at the beginning it is put in the metaText instead of the stream, + // so we will just insert it here. + voices[voiceNumber].push({ el_type: 'bar' }); + voices[voiceNumber].push({el_type: 'drum', params: {pattern: "", on: false }}); + } + var noteEventsInBar = 0; + for (var v = 0; v < voice.length; v++) { + // For each element in a voice + var elem = voice[v]; + switch (elem.el_type) { + case "note": + // regular items are just pushed. + if (!elem.rest || elem.rest.type !== 'spacer') { + if (elem.decoration) { + if (elem.decoration.indexOf('ppp') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [30, 20, 10, 1] }); + else if (elem.decoration.indexOf('pp') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [45, 35, 20, 1] }); + else if (elem.decoration.indexOf('p') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [60, 50, 35, 1] }); + else if (elem.decoration.indexOf('mp') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [75, 65, 50, 1] }); + else if (elem.decoration.indexOf('mf') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [90, 80, 65, 1] }); + else if (elem.decoration.indexOf('f') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [105, 95, 80, 1] }); + else if (elem.decoration.indexOf('ff') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [120, 110, 95, 1] }); + else if (elem.decoration.indexOf('fff') >= 0) + voices[voiceNumber].push({ el_type: 'beat', beats: [127, 125, 110, 1] }); + } + voices[voiceNumber].push(elem); + noteEventsInBar++; + } + break; + case "key": + if (elem.root === 'HP') + voices[voiceNumber].push({el_type: 'key', accidentals: [{acc: 'natural', note: 'g'}, {acc: 'sharp', note: 'f'}, {acc: 'sharp', note: 'c'}]}); + else + voices[voiceNumber].push({el_type: 'key', accidentals: elem.accidentals }); + break; + case "meter": + voices[voiceNumber].push(interpretMeter(elem)); + break; + case "clef": // need to keep this to catch the "transpose" element. + if (elem.transpose) + voices[voiceNumber].push({ el_type: 'transpose', transpose: elem.transpose }); + break; + case "tempo": + qpm = interpretTempo(elem); + voices[voiceNumber].push({ el_type: 'tempo', qpm: qpm }); + break; + case "bar": + if (noteEventsInBar > 0) // don't add two bars in a row. + voices[voiceNumber].push({ el_type: 'bar' }); // We need the bar marking to reset the accidentals. + noteEventsInBar = 0; + // figure out repeats and endings -- + // The important part is where there is a start repeat, and end repeat, or a first ending. + var endRepeat = (elem.type === "bar_right_repeat" || elem.type === "bar_dbl_repeat"); + var startEnding = (elem.startEnding === '1'); + var startRepeat = (elem.type === "bar_left_repeat" || elem.type === "bar_dbl_repeat" || elem.type === "bar_right_repeat"); + if (endRepeat) { + var s = startRepeatPlaceholder[voiceNumber]; + if (!s) s = 0; // If there wasn't a left repeat, then we repeat from the beginning. + var e = skipEndingPlaceholder[voiceNumber]; + if (!e) e = voices[voiceNumber].length; // If there wasn't a first ending marker, then we copy everything. + voices[voiceNumber] = voices[voiceNumber].concat(voices[voiceNumber].slice(s, e)); + // reset these in case there is a second repeat later on. + skipEndingPlaceholder[voiceNumber] = undefined; + startRepeatPlaceholder[voiceNumber] = undefined; + } + if (startEnding) + skipEndingPlaceholder[voiceNumber] = voices[voiceNumber].length; + if (startRepeat) + startRepeatPlaceholder[voiceNumber] = voices[voiceNumber].length; + break; + case 'style': + // TODO-PER: If this is set to rhythm heads, then it should use the percussion channel. + break; + case 'part': + // TODO-PER: If there is a part section in the header, then this should probably affect the repeats. + break; + case 'stem': + case 'scale': + // These elements don't affect sound + break; + case 'midi': + //console.log("MIDI inline", elem); // TODO-PER: for debugging. Remove this. + var drumChange = false; + switch (elem.cmd) { + case "drumon": drumOn = true; drumChange = true; break; + case "drumoff": drumOn = false; drumChange = true; break; + case "drum": drumPattern = elem.params; drumChange = true; break; + case "drumbars": drumBars = elem.params[0]; drumChange = true; break; + case "drummap": + // This is handled before getting here so it can be ignored. + break; + case "program": + voices[voiceNumber].push({ el_type: 'instrument', program: elem.params[0] }); + break; + case "transpose": + voices[voiceNumber].push({ el_type: 'transpose', transpose: elem.params[0] }); + break; + case "gchordoff": + voices[voiceNumber].push({ el_type: 'gchord', tacet: true }); + break; + case "gchordon": + voices[voiceNumber].push({ el_type: 'gchord', tacet: false }); + break; + case "beat": + voices[voiceNumber].push({ el_type: 'beat', beats: elem.params }); + break; + case "nobeataccents": + voices[voiceNumber].push({ el_type: 'beataccents', value: false }); + break; + case "beataccents": + voices[voiceNumber].push({ el_type: 'beataccents', value: true }); + break; + case "vol": + voices[voiceNumber].push({ el_type: 'vol', volume: elem.params[0] }); + break; + case "volinc": + voices[voiceNumber].push({ el_type: 'volinc', volume: elem.params[0] }); + break; + default: + console.log("MIDI seq: midi cmd not handled: ", elem.cmd, elem); + } + if (drumChange) { + voices[0].push({el_type: 'drum', params: { pattern: drumPattern, bars: drumBars, intro: drumIntro, on: drumOn}}); + startingDrumSet = true; + } + break; + default: + console.log("MIDI: element type " + elem.el_type + " not handled."); + } + } + voiceNumber++; + } + } + } + } + if (drumIntro) { + var pickups = abctune.getPickupLength(); + // add some measures of rests to the start of each track. + for (var vv = 0; vv < voices.length; vv++) { + var insertPoint = 0; + while (voices[vv][insertPoint].el_type !== "note" && voices[vv].length > insertPoint) + insertPoint++; + if (voices[vv].length > insertPoint) { + for (var w = 0; w < drumIntro; w++) { + // If it is the last measure of intro, subtract the pickups. + if (pickups === 0 || w < drumIntro-1) + voices[vv].splice(insertPoint, 0, {el_type: "note", rest: {type: "rest"}, duration: measureLength}, + { el_type: "bar" }); + else { + voices[vv].splice(insertPoint, 0, {el_type: "note", rest: {type: "rest"}, duration: measureLength-pickups}); + } + } + } + } + } + return voices; + }; + + function interpretTempo(element) { + var duration = 1/4; + if (element.duration) { + duration = element.duration[0]; + } + var bpm = 60; + if (element.bpm) { + bpm = element.bpm; + } + // The tempo is defined with a beat of a 1/4 note, so we need to adjust it if the tempo is expressed with other than a quarter note. + // expressedDuration * expressedBeatsPerMinute / lengthOfQuarterNote = quarterNotesPerMinute + return duration * bpm / 0.25; + } + + function interpretMeter(element) { + var meter; + switch (element.type) { + case "common_time": + meter = { el_type: 'meter', num: 4, den: 4 }; + break; + case "cut_time": + meter = { el_type: 'meter', num: 2, den: 2 }; + break; + case "specified": + // TODO-PER: only taking the first meter, so the complex meters are not handled. + meter = { el_type: 'meter', num: element.value[0].num, den: element.value[0].den }; + break; + default: + // This should never happen. + meter = { el_type: 'meter' }; + } + measureLength = meter.num/meter.den; + return meter; + } +})(); + +var abc_midi_sequencer = sequence; + +// abc_midi_flattener.js: Turn a linear series of events into a series of MIDI commands. +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) and Paul Rosen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// We input a set of voices, but the notes are still complex. This pass changes the logical definitions +// of the grace notes, decorations, ties, triplets, rests, transpositions, keys, and accidentals into actual note durations. +// It also extracts guitar chords to a separate voice and resolves their rhythm. + +var flatten; + +(function() { + + var barAccidentals; + var accidentals; + var transpose; + var bagpipes; + var multiplier; + var tracks; + var startingTempo; + var tempoChangeFactor = 1; + var instrument; + var currentInstrument; + // var channel; + var currentTrack; + var pitchesTied; + var lastNoteDurationPosition; + var currentTrackCounter; + + var meter = { num: 4, den: 4 }; + var chordTrack; + var chordTrackFinished; + var chordChannel; + var chordInstrument = 0; + var drumInstrument = 128; + var currentChords; + var lastChord; + var barBeat; + var gChordTacet = false; + var doBeatAccents = true; + var stressBeat1 = 105; + var stressBeatDown = 95; + var stressBeatUp = 85; + var beatFraction = 0.25; + var nextVolume; + var nextVolumeDelta; + + var drumTrack; + var drumDefinition = {}; + + var normalBreakBetweenNotes = 1.0/128; // a 128th note of silence between notes for articulation. + + flatten = function(voices, options) { + if (!options) options = {}; + barAccidentals = []; + accidentals = [0,0,0,0,0,0,0]; + bagpipes = false; + multiplier = 1; + tracks = []; + startingTempo = undefined; + tempoChangeFactor = 1; + instrument = undefined; + currentInstrument = undefined; + // channel = undefined; + currentTrack = undefined; + currentTrackCounter = undefined; + pitchesTied = {}; + + // For resolving chords. + meter = { num: 4, den: 4 }; + chordTrack = []; + chordChannel = voices.length; // first free channel for chords + chordTrackFinished = false; + currentChords = []; + lastChord = undefined; + barBeat = 0; + gChordTacet = options.chordsOff ? true : false; + + doBeatAccents = true; + stressBeat1 = 105; + stressBeatDown = 95; + stressBeatUp = 85; + beatFraction = 0.25; + nextVolume = undefined; + nextVolumeDelta = undefined; + + // For the drum/metronome track. + drumTrack = []; + drumDefinition = {}; + + zeroOutMilliseconds(voices); + + for (var i = 0; i < voices.length; i++) { + transpose = 0; + lastNoteDurationPosition = -1; + var voice = voices[i]; + currentTrack = [{ cmd: 'program', channel: i, instrument: instrument }]; + currentTrackCounter = 0; + pitchesTied = {}; + for (var j = 0; j < voice.length; j++) { + var element = voice[j]; + switch (element.el_type) { + case "note": + writeNote(element, options.voicesOff); + break; + case "key": + accidentals = setKeySignature(element); + break; + case "meter": + meter = element; + beatFraction = getBeatFraction(meter); + break; + case "tempo": + if (!startingTempo) + startingTempo = element.qpm; + else + tempoChangeFactor = element.qpm ? startingTempo / element.qpm : 1; + break; + case "transpose": + transpose = element.transpose; + break; + case "bar": + if (chordTrack.length > 0 && i === 0) { + resolveChords(); + currentChords = []; + } + barBeat = 0; + barAccidentals = []; + if (i === 0) // Only write the drum part on the first voice so that it is not duplicated. + writeDrum(voices.length+1); + break; + case "bagpipes": + bagpipes = true; + break; + case "instrument": + if (instrument === undefined) + instrument = element.program; + currentInstrument = element.program; + if (currentTrack.length > 0 && currentTrack[currentTrack.length-1].cmd === 'program') + currentTrack[currentTrack.length-1].instrument = element.program; + else { + var ii; + for (ii = currentTrack.length-1; ii >= 0 && currentTrack[ii].cmd !== 'program'; ii--) + ; + if (ii < 0 || currentTrack[ii].instrument !== element.program) + currentTrack.push({cmd: 'program', channel: i, instrument: element.program}); + } + break; + case "channel": + // if (channel === undefined) + // channel = element.channel; + // currentTrack[0].channel = element.channel; + break; + case "drum": + drumDefinition = normalizeDrumDefinition(element.params); + break; + case "gchord": + if (!options.chordsOff) + gChordTacet = element.tacet; + break; + case "beat": + stressBeat1 = element.beats[0]; + stressBeatDown = element.beats[1]; + stressBeatUp = element.beats[2]; + // TODO-PER: also use the last parameter - which changes which beats are strong. + break; + case "vol": + nextVolume = element.volume; + break; + case "volinc": + nextVolumeDelta = element.volume; + break; + case "beataccents": + doBeatAccents = element.value; + break; + default: + // This should never happen + console.log("MIDI creation. Unknown el_type: " + element.el_type + "\n");// jshint ignore:line + break; + } + } + if (currentTrack[0].instrument === undefined) + currentTrack[0].instrument = instrument ? instrument : 0; + tracks.push(currentTrack); + if (chordTrack.length > 0) // Don't do chords on more than one track, so turn off chord detection after we create it. + chordTrackFinished = true; + if (drumTrack.length > 0) // Don't do drums on more than one track, so turn off drum after we create it. + ; + } + if (chordTrack.length > 0) + tracks.push(chordTrack); + if (drumTrack.length > 0) + tracks.push(drumTrack); + // Adjust the tempo according to the meter. The rules are this: + // 1) If the denominator is 2 or 4, then always make a beat be the denominator. + // + // 2) If the denominator is 8 or 16, then: + // a) If the numerator is divisible by 3, the beat is 3*denominator. + // b) Otherwise the beat is the denominator. + // + // 3) If the denominator is anything else, then don't worry about it because it doesn't make sense. Don't modify it and hope for the best. + // + // Right now, the startingTempo is calculated for a quarter note, so modify it if necessary. + // var num = startingMeter ? parseInt(startingMeter.num, 10) : meter.num; + // var den = startingMeter ? parseInt(startingMeter.den, 10) : meter.den; + // if (den === 2) + // startingTempo *= 2; + // else if (den === 8) { + // if (parseInt(num, 10) % 3 === 0) + // startingTempo *= 3/2; + // else + // startingTempo /= 2; + // } else if (den === 16) { + // if (num % 3 === 0) + // startingTempo *= 3/4; + // else + // startingTempo /= 4; + // } + + return { tempo: startingTempo, instrument: instrument, tracks: tracks, totalDuration: totalDuration(tracks) }; + }; + + function zeroOutMilliseconds(voices) { + for (var i = 0; i < voices.length; i++) { + var voice = voices[i]; + for (var j = 0; j < voice.length; j++) { + var element = voice[j]; + delete element.currentTrackMilliseconds; + } + } + } + + function totalDuration(tracks) { + var total = 0; + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + var trackTotal = 0; + for (var j = 0; j < track.length; j++) { + var event = track[j]; + if (event.duration) + trackTotal += event.duration; + } + total = Math.max(total, trackTotal); + } + return total; + } + + function getBeatFraction(meter) { + switch (meter.den) { + case 2: return 0.5; + case 4: return 0.25; + case 8: return 0.375; + case 16: return 0.125; + } + return 0.25; + } + // + // The algorithm for chords is: + // - The chords are done in a separate track. + // - If there are notes before the first chord, then put that much silence to start the track. + // - The pattern of chord expression depends on the meter, and how many chords are in a measure. + // - There is a possibility that a measure will have an incorrect number of beats, if that is the case, then + // start the pattern anew on the next measure number. + // - If a chord root is not A-G, then ignore it as if the chord wasn't there at all. + // - If a chord modification isn't in our supported list, change it to a major triad. + // + // - If there is only one chord in a measure: + // - If 2/4, play root chord + // - If cut time, play root(1) chord(3) + // - If 3/4, play root chord chord + // - If 4/4 or common time, play root chord fifth chord + // - If 6/8, play root(1) chord(3) fifth(4) chord(6) + // - For any other meter, play the full chord on each beat. (TODO-PER: expand this as more support is added.) + // + // - If there is a chord specified that is not on a beat, move it earlier to the previous beat, unless there is already a chord on that beat. + // - Otherwise, move it later, unless there is already a chord on that beat. + // - Otherwise, ignore it. (TODO-PER: expand this as more support is added.) + // + // - If there is a chord on the second beat, play a chord for the first beat instead of a bass note. + // - Likewise, if there is a chord on the fourth beat of 4/4, play a chord on the third beat instead of a bass note. + // + var breakSynonyms = [ 'break', '(break)', 'no chord', 'n.c.', 'tacet']; + + function findChord(elem) { + if (gChordTacet) + return 'break'; + + // TODO-PER: Just using the first chord if there are more than one. + if (chordTrackFinished || !elem.chord || elem.chord.length === 0) + return null; + + // Return the first annotation that is a regular chord: that is, it is in the default place or is a recognized "tacet" phrase. + for (var i = 0; i < elem.chord.length; i++) { + var ch = elem.chord[i]; + if (ch.position === 'default') + return ch.name; + if (breakSynonyms.indexOf(ch.name.toLowerCase()) >= 0) + return 'break'; + } + return null; + } + + function timeFromStart() { + var distance = 0; + for (var ct = 0; ct < currentTrack.length; ct++) { + if (currentTrack[ct].cmd === 'move') + distance += currentTrack[ct].duration; + } + return distance; + } + + function writeNote(elem, voiceOff) { + // + // Create a series of note events to append to the current track. + // The output event is one of: { pitchStart: pitch_in_abc_units, volume: from_1_to_64 } + // { pitchStop: pitch_in_abc_units } + // { moveTime: duration_in_abc_units } + // If there are guitar chords, then they are put in a separate track, but they have the same format. + // + + var volume; + if (nextVolume) { + volume = nextVolume; + nextVolume = undefined; + } else if (!doBeatAccents) { + volume = stressBeatDown; + } else { + if (barBeat === 0) + volume = stressBeat1; + else if (barBeat % beatFraction < 0.001) // A little slop because of JavaScript floating point math. + volume = stressBeatDown; + else + volume = stressBeatUp; + } + if (nextVolumeDelta) { + volume += nextVolumeDelta; + nextVolumeDelta = undefined; + } + if (volume < 0) + volume = 0; + if (volume > 127) + volume = 127; + var velocity = voiceOff ? 0 : volume; + var chord = findChord(elem); + if (chord) { + var c = interpretChord(chord); + // If this isn't a recognized chord, just completely ignore it. + if (c) { + // If we ever have a chord in this voice, then we add the chord track. + // However, if there are chords on more than one voice, then just use the first voice. + if (chordTrack.length === 0) { + chordTrack.push({cmd: 'program', channel: chordChannel, instrument: chordInstrument}); + // need to figure out how far in time the chord started: if there are pickup notes before the chords start, we need pauses. + var distance = timeFromStart(); + if (distance > 0) + chordTrack.push({cmd: 'move', duration: distance*tempoChangeFactor }); + } + + lastChord = c; + currentChords.push({chord: lastChord, beat: barBeat}); + } + } + + if (elem.startTriplet) { + multiplier = elem.tripletMultiplier; + } + + var duration = (elem.durationClass ? elem.durationClass : elem.duration) *multiplier; + barBeat += duration; + + // if there are grace notes, then also play them. + // I'm not sure there is an exact rule for the length of the notes. My rule, unless I find + // a better one is: the grace notes cannot take more than 1/2 of the main note's value. + // A grace note (of 1/8 note duration) takes 1/8 of the main note's value. + var graces; + if (elem.gracenotes) { + // There are two cases: if this is bagpipe, the grace notes are played on the beat with the current note. + // Normally, the grace notes would be played before the beat. (If this is the first note in the track, however, then it is played on the current beat.) + // The reason for the exception on the first note is that it would otherwise move the whole track in time and would affect all the other tracks. + var stealFromCurrent = (bagpipes || lastNoteDurationPosition < 0 || currentTrack.length === 0); + var stealFromDuration = stealFromCurrent ? duration : currentTrack[lastNoteDurationPosition].duration; + graces = processGraceNotes(elem.gracenotes, stealFromDuration); + if (!bagpipes) { + duration = writeGraceNotes(graces, stealFromCurrent, duration, null, velocity); + } + } + + // The currentTrackCounter is the number of whole notes from the beginning of the piece. + // The beat fraction is the note that gets a beat (.25 is a quarter note) + // The tempo is in minutes and we want to get to milliseconds. + if (!elem.currentTrackMilliseconds) + elem.currentTrackMilliseconds = []; + elem.currentTrackMilliseconds.push(currentTrackCounter / beatFraction / startingTempo * 60*1000); + if (elem.pitches) { + if (graces && bagpipes) { + // If it is bagpipes, then the graces are played with the note. If the grace has the same pitch as the note, then we just skip it. + duration = writeGraceNotes(graces, true, duration, null, velocity); + } + var pitches = []; + elem.midiPitches = []; + for (var i=0; i= 0; last--) { + if (currentTrack[last].cmd === 'start' && currentTrack[last].pitch === actualPitch && currentTrack[last].elem) { + var pitchArray = currentTrack[last].elem.midiPitches; + for (var last2 = 0; last2 < pitchArray.length; last2++) { + if (pitchArray[last2].pitch-60 === actualPitch) { // TODO-PER: the 60 is to compensate for the midi pitch numbers again. + pitchArray[last2].durationInMeasures += duration * tempoChangeFactor; + } + } + break; + } + } + } + + if (note.startTie) { + pitchesTied['' + actualPitch] = true; + currentTrack[currentTrack.length-1].elem = elem; + } else if (note.endTie) + pitchesTied[''+actualPitch] = false; + } + if (elem.gracenotes) { + for (var j = 0; j < elem.gracenotes.length; j++) { + elem.midiGraceNotePitches = []; + var grace = elem.gracenotes[j]; + elem.midiGraceNotePitches.push({ pitch: adjustPitch(grace)+60, durationInMeasures: 0, volume: volume, instrument: currentInstrument}); + } + } + var thisBreakBetweenNotes = normalBreakBetweenNotes; + var soundDuration = duration-normalBreakBetweenNotes; + if (soundDuration < 0) { + soundDuration = 0; + thisBreakBetweenNotes = 0; + } + currentTrack.push({ cmd: 'move', duration: soundDuration*tempoChangeFactor }); + lastNoteDurationPosition = currentTrack.length-1; + currentTrackCounter += soundDuration*tempoChangeFactor; + + for (var ii = 0; ii < pitches.length; ii++) { + if (!pitchesTied[''+pitches[ii].pitch]) + currentTrack.push({ cmd: 'stop', pitch: pitches[ii].pitch }); + } + currentTrack.push({ cmd: 'move', duration: thisBreakBetweenNotes*tempoChangeFactor }); + currentTrackCounter += thisBreakBetweenNotes*tempoChangeFactor; + } else if (elem.rest) { + currentTrack.push({ cmd: 'move', duration: duration*tempoChangeFactor }); + currentTrackCounter += duration*tempoChangeFactor; + } + + if (elem.endTriplet) { + multiplier=1; + } + } + + var scale = [0,2,4,5,7,9,11]; + function adjustPitch(note) { + if (note.midipitch) + return note.midipitch - 60; + var pitch = note.pitch; + if (note.accidental) { + switch(note.accidental) { // change that pitch (not other octaves) for the rest of the bar + case "sharp": + barAccidentals[pitch]=1; break; + case "flat": + barAccidentals[pitch]=-1; break; + case "natural": + barAccidentals[pitch]=0; break; + case "dblsharp": + barAccidentals[pitch]=2; break; + case "dblflat": + barAccidentals[pitch]=-2; break; + } + } + + var actualPitch = extractOctave(pitch) *12 + scale[extractNote(pitch)]; + + if ( barAccidentals[pitch]!==undefined) { + actualPitch += barAccidentals[pitch]; + } else { // use normal accidentals + actualPitch += accidentals[extractNote(pitch)]; + } + actualPitch += transpose; + return actualPitch; + } + + function setKeySignature(elem) { + var accidentals = [0,0,0,0,0,0,0]; + if (!elem.accidentals) return accidentals; + for (var i = 0; i < elem.accidentals.length; i++) { + var acc = elem.accidentals[i]; + var d = (acc.acc === "sharp") ? 1 : (acc.acc === "natural") ?0 : -1; + + var lowercase = acc.note.toLowerCase(); + var note = extractNote(lowercase.charCodeAt(0)-'c'.charCodeAt(0)); + accidentals[note]+=d; + } + return accidentals; + } + + var graceDivider = 8; // This is the fraction of a note that the grace represents. That is, if this is 2, then a grace note of 1/16 would be a 1/32. + function processGraceNotes(graces, companionDuration) { + var graceDuration = 0; + var ret = []; + var grace; + for (var g = 0; g < graces.length; g++) { + grace = graces[g]; + graceDuration += grace.duration; + } + graceDuration = graceDuration / graceDivider; + var multiplier = (graceDuration * 2 > companionDuration) ? companionDuration/(graceDuration * 2) : 1; + + for (g = 0; g < graces.length; g++) { + grace = graces[g]; + var pitch = grace.midipitch ? grace.midipitch - 60 : grace.pitch; + ret.push({ pitch: pitch, duration: grace.duration/graceDivider*multiplier }); + } + return ret; + } + + function writeGraceNotes(graces, stealFromCurrent, duration, skipNote, velocity) { + for (var g = 0; g < graces.length; g++) { + var gp = graces[g]; + if (gp !== skipNote) + currentTrack.push({cmd: 'start', pitch: gp.pitch, volume: velocity}); + currentTrack.push({cmd: 'move', duration: graces[g].duration*tempoChangeFactor }); + if (gp !== skipNote) + currentTrack.push({cmd: 'stop', pitch: gp.pitch}); + if (!stealFromCurrent) + currentTrack[lastNoteDurationPosition].duration -= graces[g].duration; + duration -= graces[g].duration; + } + return duration; + } + + function extractOctave(pitch) { + return Math.floor(pitch/7); + } + + function extractNote(pitch) { + pitch = pitch%7; + if (pitch<0) pitch+=7; + return pitch; + } + + var basses = { + 'A': -27, 'B': -25, 'C': -24, 'D': -22, 'E': -20, 'F': -19, 'G': -17 + }; + function interpretChord(name) { + // chords have the format: + // [root][acc][modifier][/][bass][acc] + // (The chord might be surrounded by parens. Just ignore them.) + // root must be present and must be from A-G. + // acc is optional and can be # or b + // The modifier can be a wide variety of things, like "maj7". As they are discovered, more are supported here. + // If there is a slash, then there is a bass note, which can be from A-G, with an optional acc. + // If the root is unrecognized, then "undefined" is returned and there is no chord. + // If the modifier is unrecognized, a major triad is returned. + // If the bass notes is unrecognized, it is ignored. + if (name.length === 0) + return undefined; + if (name === 'break') + return { chick: []}; + var root = name.substring(0,1); + if (root === '(') { + name = name.substring(1,name.length-2); + if (name.length === 0) + return undefined; + root = name.substring(0,1); + } + var bass = basses[root]; + if (!bass) // If the bass note isn't listed, then this was an unknown root. Only A-G are accepted. + return undefined; + bass += transpose; + var bass2 = bass - 5; // The alternating bass is a 4th below + var chick; + if (name.length === 1) + chick = chordNotes(bass, ''); + var remaining = name.substring(1); + var acc = remaining.substring(0,1); + if (acc === 'b' || acc === '♭') { + bass--; + bass2--; + remaining = remaining.substring(1); + } else if (acc === '#' || acc === '♯') { + bass++; + bass2++; + remaining = remaining.substring(1); + } + var arr = remaining.split('/'); + chick = chordNotes(bass, arr[0]); + if (arr.length === 2) { + var explicitBass = basses[arr[1].substring(0,1)]; + if (explicitBass) { + var bassAcc = arr[1].substring(1); + var bassShift = {'#': 1, '♯': 1, 'b': -1, '♭': -1}[bassAcc] || 0; + bass = basses[arr[1].substring(0,1)] + bassShift + transpose; + bass2 = bass; + } + } + return { boom: bass, boom2: bass2, chick: chick }; + } + + var chordIntervals = { + // diminished (all flat 5 chords) + 'dim': [ 0, 3, 6 ], + '°': [ 0, 3, 6 ], + '˚': [ 0, 3, 6 ], + + 'dim7': [ 0, 3, 6, 9 ], + '°7': [ 0, 3, 6, 9 ], + '˚7': [ 0, 3, 6, 9 ], + + 'Ăž7': [ 0, 3, 6, 10 ], + 'm7(b5)': [ 0, 3, 6, 10 ], + 'm7b5': [ 0, 3, 6, 10 ], + '-7(b5)': [ 0, 3, 6, 10 ], + '-7b5': [ 0, 3, 6, 10 ], + + '7b5': [ 0, 4, 6, 10 ], + '7(b5)': [ 0, 4, 6, 10 ], + '7♭5': [ 0, 4, 6, 10 ], + + '7(b9,b5)': [ 0, 4, 6, 10, 13 ], + '7b9,b5': [ 0, 4, 6, 10, 13 ], + '7(#9,b5)': [ 0, 4, 6, 10, 15 ], + '7#9b5': [ 0, 4, 6, 10, 15 ], + 'maj7(b5)': [ 0, 3, 6, 11 ], + 'maj7b5': [ 0, 3, 6, 11 ], + '13(b5)': [ 0, 4, 6, 10, 14, 18 ], + '13b5': [ 0, 4, 6, 10, 14, 18 ], + + // minor (all normal 5, minor 3 chords) + 'm': [ 0, 3, 7 ], + '-': [ 0, 3, 7 ], + 'm6': [ 0, 3, 7, 9 ], + '-6': [ 0, 3, 7, 9 ], + 'm7': [ 0, 3, 7, 10 ], + '-7': [ 0, 3, 7, 10 ], + + '-(b6)': [ 0, 3, 7, 8 ], + '-b6': [ 0, 3, 7, 8 ], + '-6/9': [ 0, 3, 7, 9, 14 ], + '-7(b9)': [ 0, 3, 7, 10, 13 ], + '-7b9': [ 0, 3, 7, 10, 13 ], + '-maj7': [ 0, 3, 7, 11 ], + '-9+7': [ 0, 3, 7, 11, 13 ], + '-11': [ 0, 3, 7, 11, 14, 16 ], + + // major (all normal 5, major 3 chords) + 'M': [ 0, 4, 7 ], + '6': [ 0, 4, 7, 9 ], + '6/9': [ 0, 4, 7, 9, 14 ], + + '7': [ 0, 4, 7, 10 ], + '9': [ 0, 4, 7, 10, 14 ], + '11': [ 0, 4, 7, 10, 14, 16 ], + '13': [ 0, 4, 7, 10, 14, 18 ], + '7b9': [ 0, 4, 7, 10, 13 ], + '7♭9': [ 0, 4, 7, 10, 13 ], + '7(b9)': [ 0, 4, 7, 10, 13 ], + '7(#9)': [ 0, 4, 7, 10, 15 ], + '7#9': [ 0, 4, 7, 10, 15 ], + '(13)': [ 0, 4, 7, 10, 14, 18 ], + '7(9,13)': [ 0, 4, 7, 10, 14, 18 ], + '7(#9,b13)': [ 0, 4, 7, 10, 15, 17 ], + '7(#11)': [ 0, 4, 7, 10, 14, 17 ], + '7#11': [ 0, 4, 7, 10, 14, 17 ], + '7(b13)': [ 0, 4, 7, 10, 17 ], + '7b13': [ 0, 4, 7, 10, 17 ], + '9(#11)': [ 0, 4, 7, 10, 14, 17 ], + '9#11': [ 0, 4, 7, 10, 14, 17 ], + '13(#11)': [ 0, 4, 7, 10, 15, 18 ], + '13#11': [ 0, 4, 7, 10, 15, 18 ], + + 'maj7': [ 0, 4, 7, 11 ], + '∆7': [ 0, 4, 7, 11 ], + 'Δ7': [ 0, 4, 7, 11 ], + 'maj9': [ 0, 4, 7, 11, 14 ], + 'maj7(9)': [ 0, 4, 7, 11, 14 ], + 'maj7(11)': [ 0, 4, 7, 11, 16 ], + 'maj7(#11)': [ 0, 4, 7, 11, 17 ], + 'maj7(13)': [ 0, 4, 7, 11, 18 ], + 'maj7(9,13)': [ 0, 4, 7, 11, 14, 18 ], + + '7sus4': [ 0, 5, 7, 10 ], + 'm7sus4': [ 0, 5, 7, 10 ], + 'sus4': [ 0, 5, 7 ], + 'sus2': [ 0, 2, 7 ], + '7sus2': [ 0, 2, 7, 10 ], + '9sus4': [ 0, 5, 7, 14 ], + '13sus4': [ 0, 5, 7, 18 ], + + // augmented (all sharp 5 chords) + 'aug7': [ 0, 4, 8, 10 ], + '+7': [ 0, 4, 8, 10 ], + '+': [ 0, 4, 8 ], + '7#5': [ 0, 4, 8, 10 ], + '7♯5': [ 0, 4, 8, 10 ], + '7+5': [ 0, 4, 8, 10 ], + '9#5': [ 0, 4, 8, 10, 14 ], + '9♯5': [ 0, 4, 8, 10, 14 ], + '9+5': [ 0, 4, 8, 10, 14 ], + '-7(#5)': [ 0, 3, 8, 10 ], + '-7#5': [ 0, 3, 8, 10 ], + '7(#5)': [ 0, 4, 8, 10 ], + '7(b9,#5)': [ 0, 4, 8, 10, 13 ], + '7b9#5': [ 0, 4, 8, 10, 13 ], + 'maj7(#5)': [ 0, 4, 8, 11 ], + 'maj7#5': [ 0, 4, 8, 11 ], + 'maj7(#5,#11)': [ 0, 4, 8, 11, 14 ], + 'maj7#5#11': [ 0, 4, 8, 11, 14 ], + '9(#5)': [ 0, 4, 8, 10, 14 ], + '13(#5)': [ 0, 4, 8, 10, 14, 18 ], + '13#5': [ 0, 4, 8, 10, 14, 18 ] +}; + function chordNotes(bass, modifier) { + var intervals = chordIntervals[modifier]; + if (!intervals) + intervals = chordIntervals.M; + bass += 12; // the chord is an octave above the bass note. + var notes = [ ]; + for (var i = 0; i < intervals.length; i++) { + notes.push(bass + intervals[i]); + } + return notes; + } + + function writeBoom(boom, beatLength) { + // undefined means there is a stop time. + if (boom !== undefined) + chordTrack.push({cmd: 'start', pitch: boom, volume: 64}); + chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); + if (boom !== undefined) + chordTrack.push({ cmd: 'stop', pitch: boom }); + chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); + } + + function writeChick(chick, beatLength) { + for (var c = 0; c < chick.length; c++) + chordTrack.push({cmd: 'start', pitch: chick[c], volume: 48}); + chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); + for (c = 0; c < chick.length; c++) + chordTrack.push({ cmd: 'stop', pitch: chick[c] }); + chordTrack.push({ cmd: 'move', duration: (beatLength/2)*tempoChangeFactor }); + } + + var rhythmPatterns = { "2/2": [ 'boom', 'chick' ], + "2/4": [ 'boom', 'chick' ], + "3/4": [ 'boom', 'chick', 'chick' ], + "4/4": [ 'boom', 'chick', 'boom2', 'chick' ], + "5/4": [ 'boom', 'chick', 'chick', 'boom2', 'chick' ], + "6/8": [ 'boom', '', 'chick', 'boom2', '', 'chick' ], + "9/8": [ 'boom', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick' ], + "12/8": [ 'boom', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick', 'boom2', '', 'chick' ], + }; + + function resolveChords() { + var num = meter.num; + var den = meter.den; + var beatLength = 1/den; + var pattern = rhythmPatterns[num+'/'+den]; + var thisMeasureLength = parseInt(num,10)/parseInt(den,10); + // See if this is a full measure: unfortunately, with triplets, there isn't an exact match, what with the floating point, so we just see if it is "close". + var portionOfAMeasure = Math.abs(thisMeasureLength - barBeat); + if (!pattern || portionOfAMeasure > 0.0078125) { // If it is an unsupported meter, or this isn't a full bar, just chick on each beat. + pattern = []; + var beatsPresent = barBeat / beatLength; + for (var p = 0; p < beatsPresent; p++) + pattern.push("chick"); + } + + if (currentChords.length === 0) { // there wasn't a new chord this measure, so use the last chord declared. + currentChords.push({ beat: 0, chord: lastChord}); + } + if (currentChords[0].beat !== 0 && lastChord) { // this is the case where there is a chord declared in the measure, but not on its first beat. + currentChords.unshift({ beat: 0, chord: lastChord}); + } + if (currentChords.length === 1) { + for (var m = 0; m < pattern.length; m++) { + switch (pattern[m]) { + case 'boom': + writeBoom(currentChords[0].chord.boom, beatLength); + break; + case 'boom2': + writeBoom(currentChords[0].chord.boom2, beatLength); + break; + case 'chick': + writeChick(currentChords[0].chord.chick, beatLength); + break; + case '': + chordTrack.push({ cmd: 'move', duration: beatLength*tempoChangeFactor }); + break; + } + } + return; + } + + // If we are here it is because more than one chord was declared in the measure, so we have to sort out what chord goes where. + + // First, normalize the chords on beats. + var beats = {}; + for (var i = 0; i < currentChords.length; i++) { + var cc = currentChords[i]; + var beat = Math.floor(cc.beat / beatLength); // now all the beats are integers, there may be + beats[''+beat] = cc; + } + + // - If there is a chord on the second beat, play a chord for the first beat instead of a bass note. + // - Likewise, if there is a chord on the fourth beat of 4/4, play a chord on the third beat instead of a bass note. + for (var m2 = 0; m2 < pattern.length; m2++) { + var thisChord; + if (beats[''+m2]) + thisChord = beats[''+m2]; + switch (pattern[m2]) { + case 'boom': + if (beats[''+(m2+1)]) // If there is not a chord change on the next beat, play a bass note. + writeChick(thisChord.chord.chick, beatLength); + else + writeBoom(thisChord.chord.boom, beatLength); + break; + case 'boom2': + if (beats[''+(m2+1)]) + writeChick(thisChord.chord.chick, beatLength); + else + writeBoom(thisChord.chord.boom2, beatLength); + break; + case 'chick': + writeChick(thisChord.chord.chick, beatLength); + break; + case '': + if (beats[''+m2]) // If there is an explicit chord on this beat, play it. + writeChick(thisChord.chord.chick, beatLength); + else + chordTrack.push({cmd: 'move', duration: beatLength*tempoChangeFactor }); + break; + } + } + } + + function normalizeDrumDefinition(params) { + // Be very strict with the drum definition. If anything is not perfect, + // just turn the drums off. + // Perhaps all of this logic belongs in the parser instead. + if (params.pattern.length === 0 || params.on === false) + return { on: false }; + + var str = params.pattern[0]; + var events = []; + var event = ""; + var totalPlay = 0; + for (var i = 0; i < str.length; i++) { + if (str[i] === 'd') + totalPlay++; + if (str[i] === 'd' || str[i] === 'z') { + if (event.length !== 0) { + events.push(event); + event = str[i]; + } else + event = event + str[i]; + } else { + if (event.length === 0) { + // there was an error: the string should have started with d or z + return {on: false}; + } + event = event + str[i]; + } + } + + if (event.length !== 0) + events.push(event); + + // Now the events array should have one item per event. + // There should be two more params for each event: the volume and the pitch. + if (params.pattern.length !== totalPlay*2 + 1) + return { on: false }; + + var ret = { on: true, bars: params.bars, pattern: []}; + var beatLength = 1/meter.den; + var playCount = 0; + for (var j = 0; j < events.length; j++) { + event = events[j]; + var len = 1; + var div = false; + var num = 0; + for (var k = 1; k < event.length; k++) { + switch(event[k]) { + case "/": + if (num !== 0) + len *= num; + num = 0; + div = true; + break; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + num = num*10 +event[k]; + break; + default: + return { on: false }; + } + } + if (div) { + if (num === 0) num = 2; // a slash by itself is interpreted as "/2" + len /= num; + } else if (num) + len *= num; + if (event[0] === 'd') { + ret.pattern.push({ len: len * beatLength, pitch: params.pattern[1 + playCount], velocity: params.pattern[1 + playCount + totalPlay]}); + playCount++; + } else + ret.pattern.push({ len: len * beatLength, pitch: null}); + } + // Now normalize the pattern to cover the correct number of measures. The note lengths passed are relative to each other and need to be scaled to fit a measure. + var totalTime = 0; + var measuresPerBeat = meter.num/meter.den; + for (var ii = 0; ii < ret.pattern.length; ii++) + totalTime += ret.pattern[ii].len; + var numBars = params.bars ? params.bars : 1; + var factor = totalTime / numBars / measuresPerBeat; + for (ii = 0; ii < ret.pattern.length; ii++) + ret.pattern[ii].len = ret.pattern[ii].len / factor; + return ret; + } + + function drumBeat(pitch, soundLength, volume) { + drumTrack.push({ cmd: 'start', pitch: pitch - 60, volume: volume}); + drumTrack.push({ cmd: 'move', duration: soundLength }); + drumTrack.push({ cmd: 'stop', pitch: pitch - 60 }); + } + + function writeDrum(channel) { + if (drumTrack.length === 0 && !drumDefinition.on) + return; + + var measureLen = meter.num/meter.den; + if (drumTrack.length === 0) { + drumTrack.push({cmd: 'program', channel: channel, instrument: drumInstrument}); + // need to figure out how far in time the bar started: if there are pickup notes before the chords start, we need pauses. + var distance = timeFromStart(); + if (distance > 0 && distance < measureLen - 0.01) { // because of floating point, adding the notes might not exactly equal the measure size. + drumTrack.push({cmd: 'move', duration: distance * tempoChangeFactor}); + return; + } + } + + if (!drumDefinition.on) { + // this is the case where there has been a drum track, but it was specifically turned off. + drumTrack.push({ cmd: 'move', duration: measureLen * tempoChangeFactor }); + return; + } + for (var i = 0; i < drumDefinition.pattern.length; i++) { + var len = drumDefinition.pattern[i].len * tempoChangeFactor; + if (drumDefinition.pattern[i].pitch) + drumBeat(drumDefinition.pattern[i].pitch, len, drumDefinition.pattern[i].velocity); + else + drumTrack.push({ cmd: 'move', duration: len }); + } + } +})(); + +var abc_midi_flattener = flatten; + +// TODO-PER: remove the midi tests from here: I don't think the object can be constructed unless it passes. +var notSupportedMessage = "MIDI is not supported in this browser."; + +var defaultSoundFontUrl = "https://paulrosen.github.io/midi-js-soundfonts/FluidR3_GM/"; + + +function CreateSynth() { + var self = this; + self.audioBufferPossible = undefined; + self.directSource = []; // type: AudioBufferSourceNode + self.startTimeSec = undefined; // the time that the midi started: used for pause/resume. + self.pausedTimeSec = undefined; // the time that the midi was paused: used for resume. + self.audioBuffers = []; // cache of the buffers so starting play can be fast. + self.duration = undefined; // the duration of the tune in seconds. + self.isRunning = false; // whether there is currently a sound buffer running. + + // Load and cache all needed sounds + self.init = function(options) { + if (!options) + options = {}; + registerAudioContext_1(options.audioContext); // This works no matter what - if there is already an ac it is a nop; if the context is not passed in, then it creates one. + var startTime = activeAudioContext_1().currentTime; + self.debugCallback = options.debugCallback; + if (self.debugCallback) + self.debugCallback("init called"); + self.audioBufferPossible = self._deviceCapable(); + if (!self.audioBufferPossible) + return Promise.reject({ status: "NotSupported", message: notSupportedMessage}); + self.soundFontUrl = options.soundFontUrl ? options.soundFontUrl : defaultSoundFontUrl; + self.millisecondsPerMeasure = options.millisecondsPerMeasure ? options.millisecondsPerMeasure : (options.visualObj ? options.visualObj.millisecondsPerMeasure() : 1000); + var params = options.options ? options.options : {}; + self.meterSize = 1; + if (options.visualObj) { + var seq = abc_midi_sequencer(options.visualObj, params); + self.flattened = abc_midi_flattener(seq, params); + self.meterSize = options.visualObj.getMeterFraction().num / options.visualObj.getMeterFraction().den; + } else if (options.sequence) + self.flattened = options.sequence; + else + return Promise.reject(new Error("Must pass in either a visualObj or a sequence")); + self.sequenceCallback = params.sequenceCallback; + self.callbackContext = params.callbackContext; + self.onEnded = options.onEnded; + + var allNotes = {}; + var currentInstrument = instrumentIndexToName_1[0]; + self.flattened.tracks.forEach(function(track) { + track.forEach(function(event) { + if (event.cmd === "program" && instrumentIndexToName_1[event.instrument]) + currentInstrument = instrumentIndexToName_1[event.instrument]; + if (event.pitch !== undefined) { + var pitchNumber = event.pitch + 60; + var noteName = pitchToNoteName_1[pitchNumber]; + if (noteName) { + if (!allNotes[currentInstrument]) + allNotes[currentInstrument] = {}; + allNotes[currentInstrument][pitchToNoteName_1[pitchNumber]] = true; + } else + console.log("Can't find note: ", pitchNumber); + } + }); + }); + if (self.debugCallback) + self.debugCallback("note gathering time = " + Math.floor((activeAudioContext_1().currentTime - startTime)*1000)+"ms"); + startTime = activeAudioContext_1().currentTime; + + var notes = []; + Object.keys(allNotes).forEach(function(instrument) { + Object.keys(allNotes[instrument]).forEach(function(note) { + notes.push({ instrument: instrument, note: note }); + }); + }); + // If there are lots of notes, load them in batches + var batches = []; + var CHUNK = 256; + for (var i=0; i < notes.length; i += CHUNK) { + batches.push(notes.slice(i, i + CHUNK)); + } + + return new Promise(function(resolve, reject) { + var results = []; + + var index = 0; + var next = function() { + if (index < batches.length) { + self._loadBatch(batches[index], self.soundFontUrl, startTime).then(function(data) { + startTime = activeAudioContext_1().currentTime; + results.push(data); + index++; + next(); + }, reject); + } else { + resolve(results); + } + }; + next(); + }); + }; + + self._loadBatch = (function(batch, soundFontUrl, startTime) { + var promises = []; + batch.forEach(function(item) { + promises.push(loadNote(soundFontUrl, item.instrument, item.note, activeAudioContext_1())); + }); + return Promise.all(promises).then(function(response) { + if (self.debugCallback) + self.debugCallback("mp3 load time = " + Math.floor((activeAudioContext_1().currentTime - startTime)*1000)+"ms"); + return Promise.resolve(response); + }); + }); + + self.prime = function() { + self.isRunning = false; + if (!self.audioBufferPossible) + return Promise.reject(new Error(notSupportedMessage)); + if (self.debugCallback) + self.debugCallback("prime called"); + return new Promise(function(resolve) { + var startTime = activeAudioContext_1().currentTime; + var tempoMultiplier = self.millisecondsPerMeasure / 1000 / self.meterSize; + self.duration = self.flattened.totalDuration * tempoMultiplier; + var totalSamples = Math.floor(activeAudioContext_1().sampleRate * self.duration); + + // There might be a previous run that needs to be turned off. + self.stop(); + + var noteMapTracks = createNoteMap_1(self.flattened); + if (self.sequenceCallback) + self.sequenceCallback(noteMapTracks, self.callbackContext); + //console.log(noteMapTracks); + + self.audioBuffers = []; + noteMapTracks.forEach(function(noteMap) { + var audioBuffer = activeAudioContext_1().createBuffer(1, totalSamples, activeAudioContext_1().sampleRate); + var chanData = audioBuffer.getChannelData(0); + + noteMap.forEach(function(note) { + self._placeNote(chanData, note, tempoMultiplier, soundsCache_1); + }); + + self.audioBuffers.push(audioBuffer); + }); + + if (self.debugCallback) { + self.debugCallback("sampleRate = " + activeAudioContext_1().sampleRate); + self.debugCallback("totalSamples = " + totalSamples); + self.debugCallback("creationTime = " + Math.floor((activeAudioContext_1().currentTime - startTime)*1000) + "ms"); + } + resolve({ + status: "ok", + seconds: 0 + }); + }); + }; + + // This is called after everything is set up, so it can quickly make sound + self.start = function() { + if (self.pausedTimeSec) { + self.resume(); + return; + } + + if (!self.audioBufferPossible) + throw new Error(notSupportedMessage); + if (self.debugCallback) + self.debugCallback("start called"); + + self._kickOffSound(0); + self.startTimeSec = activeAudioContext_1().currentTime; + self.pausedTimeSec = undefined; + + if (self.debugCallback) + self.debugCallback("MIDI STARTED", self.startTimeSec); + }; + + self.pause = function() { + if (!self.audioBufferPossible) + throw new Error(notSupportedMessage); + if (self.debugCallback) + self.debugCallback("pause called"); + + if (!self.pausedTimeSec) { // ignore if self is already paused. + self.stop(); + self.pausedTimeSec = activeAudioContext_1().currentTime; + } + }; + + self.resume = function() { + if (!self.audioBufferPossible) + throw new Error(notSupportedMessage); + if (self.debugCallback) + self.debugCallback("resume called"); + + var offset = self.pausedTimeSec - self.startTimeSec; + self.startTimeSec = activeAudioContext_1().currentTime - offset; // We move the start time in case there is another pause/resume. + self.pausedTimeSec = undefined; + self._kickOffSound(offset); + }; + + self.seek = function(percent) { + var offset = self.duration * percent; + + // TODO-PER: can seek when paused or when playing + if (!self.audioBufferPossible) + throw new Error(notSupportedMessage); + if (self.debugCallback) + self.debugCallback("seek called sec=" + offset); + + if (self.isRunning) { + self.stop(); + self._kickOffSound(offset); + } + var pauseDistance = self.pausedTimeSec ? self.pausedTimeSec - self.startTimeSec : undefined; + self.startTimeSec = activeAudioContext_1().currentTime - offset; + if (self.pausedTimeSec) + self.pausedTimeSec = self.startTimeSec + pauseDistance; + }; + + self.stop = function() { + self.isRunning = false; + self.pausedTimeSec = undefined; + self.directSource.forEach(function(source) { + try { + source.stop(); + } catch (error) { + // We don't care if self succeeds: it might fail if something else turned off the sound or it ended for some reason. + console.log("direct source didn't stop:", error); + } + }); + self.directSource = []; + }; + + self.download = function() { + return downloadBuffer_1(self); + }; + + /////////////// Private functions ////////////// + + self._deviceCapable = function() { + if (!supportsAudio_1()) { + console.warn(notSupportedMessage); + if (self.debugCallback) + self.debugCallback(notSupportedMessage); + return false; + } + return true; + }; + + self._kickOffSound = function(seconds) { + self.isRunning = true; + self.directSource = []; + self.audioBuffers.forEach(function(audioBuffer, trackNum) { + self.directSource[trackNum] = activeAudioContext_1().createBufferSource(); // creates a sound source + self.directSource[trackNum].buffer = audioBuffer; // tell the source which sound to play + self.directSource[trackNum].connect(activeAudioContext_1().destination); // connect the source to the context's destination (the speakers) + }); + self.directSource.forEach(function(source) { + source.start(0, seconds); + }); + if (self.onEnded) { + self.directSource[0].onended = function () { + self.onEnded(self.callbackContext); + }; + } + }; + + self._placeNote = function(chanData, note, tempoMultiplier, soundsCache) { + var start = Math.floor(note.start*activeAudioContext_1().sampleRate * tempoMultiplier); + var numBeats = note.end - note.start; + var noteTimeSec = numBeats * tempoMultiplier; + var noteName = pitchToNoteName_1[note.pitch+60]; + if (noteName) { // Just ignore pitches that don't exist. + var pitch = soundsCache[note.instrument][noteName].getChannelData(0); + var duration = Math.min(pitch.length, Math.floor(noteTimeSec * activeAudioContext_1().sampleRate)); + //console.log(pitchToNote[note.pitch+''], start, numBeats, noteTimeSec, duration); + for (var i = 0; i < duration; i++) { + var thisSample = pitch[i] * note.volume / 128; + if (chanData[start + i]) + chanData[start + i] = (chanData[start + i] + thisSample) *0.75; + else + chanData[start + i] = thisSample; + } + } + }; +} + +var createSynth = CreateSynth; + +var SynthSequence = function() { + var self = this; + self.tracks = []; + self.totalDuration = 0; + + self.addTrack = function() { + self.tracks.push([]); + return self.tracks.length - 1; + }; + + self.setInstrument = function(trackNumber, instrumentNumber) { + self.tracks[trackNumber].push({ + channel: 0, + cmd: "program", + instrument: instrumentNumber + }); + }; + + self.appendNote = function(trackNumber, pitch, durationInMeasures, volume) { + self.tracks[trackNumber].push({ + cmd: "start", + pitch: pitch - 60, + volume: volume + }); + self.tracks[trackNumber].push({ + cmd: "move", + duration: durationInMeasures + }); + self.tracks[trackNumber].push({ + cmd: "stop", + pitch: pitch - 60 + }); + var duration = 0; + self.tracks[trackNumber].forEach(function(event) { + if (event.duration) + duration += event.duration; + }); + self.totalDuration = Math.max(self.totalDuration, duration); + }; +}; + +var synthSequence = SynthSequence; + +// TODO-PER: The require statements for svg don't play well for node apps without extra plugins. The following lines would be clearer than inlining the SVG +// var loopImage = require('./images/loop.svg'); +// var playImage = require('./images/play.svg'); +// var pauseImage = require('./images/pause.svg'); +// var loadingImage = require('./images/loading.svg'); +// var resetImage = require('./images/reset.svg'); +var loopImage = '\n' + + '\n' + + '\n' + + '\n' + + '\n' + + '\n'; +var playImage = '\n' + + ' \n' + + ' \n' + + ' \n' + + ''; +var pauseImage = '\n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ''; +var loadingImage = '\n' + + ' \n' + + ''; +var resetImage = '\n' + + ' \n' + + ' \n' + + ' \n' + + ' \n' + + ''; + +function CreateSynthControl(parent, options) { + var self = this; + // parent is either an element or a selector. + if (typeof parent === "string") { + var selector = parent; + parent = document.querySelector(selector); + if (!parent) + throw new Error("Cannot find element \"" + selector + "\" in the DOM."); + } else if (!(parent instanceof HTMLElement)) + throw new Error("The first parameter must be a valid element or selector in the DOM."); + + self.parent = parent; + self.options = {}; + if (options) + self.options = abc_common.clone(options); + + // This can be called in the following cases: + // AC already registered and not suspended + // AC already registered and suspended + // AC not registered and not passed in + // AC not registered but passed in (but suspended) + // AC not registered but passed in (not suspended) + // If the AC is already registered, then just use it - ignore what is passed in + // Create the AC if necessary if there isn't one already. + // We don't care right now if the AC is suspended - whenever a button is clicked then we check it. + if (self.options.ac) + registerAudioContext_1(self.options.ac); + buildDom(self.parent, self.options); + attachListeners(self); + + self.setTempo = function(tempo) { + var el = self.parent.querySelector(".abcjs-midi-current-tempo"); + if (el) + el.innerHTML = tempo; + }; + self.resetAll = function() { + var pushedButtons = self.parent.querySelectorAll(".abcjs-pushed"); + for (var i = 0; i < pushedButtons.length; i++) { + var button = pushedButtons[i]; + button.classList.remove("abcjs-pushed"); + } + }; + self.pushPlay = function(push) { + var startButton = self.parent.querySelector(".abcjs-midi-start"); + if (!startButton) + return; + if (push) + startButton.classList.add("abcjs-pushed"); + else + startButton.classList.remove("abcjs-pushed"); + }; + self.pushLoop = function(push) { + var loopButton = self.parent.querySelector(".abcjs-midi-loop"); + if (!loopButton) + return; + if (push) + loopButton.classList.add("abcjs-pushed"); + else + loopButton.classList.remove("abcjs-pushed"); + }; + + self.setProgress = function (percent, totalTime) { + var progressBackground = self.parent.querySelector(".abcjs-midi-progress-background"); + var progressThumb = self.parent.querySelector(".abcjs-midi-progress-indicator"); + if (!progressBackground || !progressThumb) + return; + var width = progressBackground.clientWidth; + var left = width * percent; + progressThumb.style.left = left + "px"; + + var clock = self.parent.querySelector(".abcjs-midi-clock"); + if (clock) { + var totalSeconds = (totalTime * percent) / 1000; + var minutes = Math.floor(totalSeconds / 60); + var seconds = Math.floor(totalSeconds % 60); + var secondsFormatted = seconds < 10 ? "0" + seconds : seconds; + clock.innerHTML = minutes + ":" + secondsFormatted; + } + }; + + if (self.options.afterResume) { + var isResumed = false; + if (self.options.ac) { + isResumed = self.options.ac.state !== "suspended"; + } else if (activeAudioContext_1()) { + isResumed = activeAudioContext_1().state !== "suspended"; + } + if (isResumed) + self.options.afterResume(); + } +} + +function buildDom(parent, options) { + var hasLoop = !!options.loopHandler; + var hasRestart = !!options.restartHandler; + var hasPlay = !!options.playHandler || !!options.playPromiseHandler; + var hasProgress = !!options.progressHandler; + var hasWarp = !!options.warpHandler; + var hasClock = options.hasClock !== false; + + var html = '
\n'; + if (hasLoop) { + var repeatTitle = options.repeatTitle ? options.repeatTitle : "Click to toggle play once/repeat."; + var repeatAria = options.repeatAria ? options.repeatAria : repeatTitle; + html += '\n'; + } + if (hasRestart) { + var restartTitle = options.restartTitle ? options.restartTitle : "Click to go to beginning."; + var restartAria = options.restartAria ? options.restartAria : restartTitle; + html += '\n'; + } + if (hasPlay) { + var playTitle = options.playTitle ? options.playTitle : "Click to play/pause."; + var playAria = options.playAria ? options.playAria : playTitle; + html += '\n'; + } + if (hasProgress) { + var randomTitle = options.randomTitle ? options.randomTitle : "Click to change the playback position."; + var randomAria = options.randomAria ? options.randomAria : randomTitle; + html += '\n'; + } + if (hasClock) { + html += '\n'; + } + if (hasWarp) { + var warpTitle = options.warpTitle ? options.warpTitle : "Change the playback speed."; + var warpAria = options.warpAria ? options.warpAria : warpTitle; + var bpm = options.bpm ? options.bpm : "BPM"; + html += ' ( ' + bpm + ')\n'; + } + html += '
\n'; + parent.innerHTML = html; +} + +function acResumerMiddleWare(next, ev, playBtn, afterResume, isPromise) { + var needsInit = true; + if (!activeAudioContext_1()) { + registerAudioContext_1(); + } else { + needsInit = activeAudioContext_1().state === "suspended"; + } + if (!supportsAudio_1()) { + throw { status: "NotSupported", message: "This browser does not support audio."}; + } + + if ((needsInit || isPromise) && playBtn) + playBtn.classList.add("abcjs-loading"); + + if (needsInit) { + activeAudioContext_1().resume().then(function () { + if (afterResume) { + afterResume().then(function (response) { + doNext(next, ev, playBtn, isPromise); + }); + } else { + doNext(next, ev, playBtn, isPromise); + } + }); + } else { + doNext(next, ev, playBtn, isPromise); + } +} + +function doNext(next, ev, playBtn, isPromise) { + if (isPromise) { + next(ev).then(function() { + if (playBtn) + playBtn.classList.remove("abcjs-loading"); + }); + } else { + next(ev); + if (playBtn) + playBtn.classList.remove("abcjs-loading"); + } +} + +function attachListeners(self) { + var hasLoop = !!self.options.loopHandler; + var hasRestart = !!self.options.restartHandler; + var hasPlay = !!self.options.playHandler || !!self.options.playPromiseHandler; + var hasProgress = !!self.options.progressHandler; + var hasWarp = !!self.options.warpHandler; + var playBtn = self.parent.querySelector(".abcjs-midi-start"); + + if (hasLoop) + self.parent.querySelector(".abcjs-midi-loop").addEventListener("click", function(ev){acResumerMiddleWare(self.options.loopHandler, ev, playBtn, self.options.afterResume);}); + if (hasRestart) + self.parent.querySelector(".abcjs-midi-reset").addEventListener("click", function(ev){acResumerMiddleWare(self.options.restartHandler, ev, playBtn, self.options.afterResume);}); + if (hasPlay) + playBtn.addEventListener("click", function(ev){ + acResumerMiddleWare( + self.options.playPromiseHandler || self.options.playHandler, + ev, + playBtn, + self.options.afterResume, + !!self.options.playPromiseHandler); + }); + if (hasProgress) + self.parent.querySelector(".abcjs-midi-progress-background").addEventListener("click", function(ev){acResumerMiddleWare(self.options.progressHandler, ev, playBtn, self.options.afterResume);}); + if (hasWarp) + self.parent.querySelector(".abcjs-midi-tempo").addEventListener("change", function(ev){acResumerMiddleWare(self.options.warpHandler, ev, playBtn, self.options.afterResume);}); +} +var createSynthControl = CreateSynthControl; + +function playEvent(midiPitches, midiGracePitches, millisecondsPerMeasure) { + var sequence = new synthSequence(); + + for (var i = 0; i < midiPitches.length; i++) { + var note = midiPitches[i]; + var trackNum = sequence.addTrack(); + sequence.setInstrument(trackNum, note.instrument); + if (i === 0 && midiGracePitches) { + for (var j = 0; j < midiGracePitches.length; j++) { + var grace = midiGracePitches[j]; + sequence.appendNote(trackNum, grace.pitch, 1 / 64, grace.volume); + } + } + sequence.appendNote(trackNum, note.pitch, note.durationInMeasures, note.volume); + } + + var buffer = new createSynth(); + return buffer.init({ + sequence: sequence, + millisecondsPerMeasure: millisecondsPerMeasure + }).then(function () { + return buffer.prime(); + }).then(function () { + return buffer.start(); + }); +} +var playEvent_1 = playEvent; + +function SynthController() { + var self = this; + self.warp = 100; + self.cursorControl = null; + self.visualObj = null; + self.timer = null; + self.midiBuffer = null; + self.options = null; + self.currentTempo = null; + self.control = null; + self.isLooping = false; + self.isStarted = false; + self.isLoaded = false; + + self.load = function (selector, cursorControl, visualOptions) { + if (!visualOptions) + visualOptions = {}; + self.control = new createSynthControl(selector, { + loopHandler: visualOptions.displayLoop ? self.toggleLoop : undefined, + restartHandler: visualOptions.displayRestart ? self.restart : undefined, + playPromiseHandler: visualOptions.displayPlay ? self.play : undefined, + progressHandler: visualOptions.displayProgress ? self.randomAccess : undefined, + warpHandler: visualOptions.displayWarp ? self.onWarp : undefined, + afterResume: self.init + }); + self.cursorControl = cursorControl; + }; + + self.setTune = function(visualObj, userAction, audioParams) { + self.isLoaded = false; + self.visualObj = visualObj; + self.options = audioParams; + + if (self.control) { + self.pause(); + self.setProgress(0, 1); + self.control.resetAll(); + self.restart(); + self.isStarted = false; + } + self.isLooping = false; + + if (userAction) + return self.go(); + else { + return Promise.resolve({status: "no-audio-context"}); + } + }; + + self.go = function () { + var millisecondsPerMeasure = self.visualObj.millisecondsPerMeasure() * 100 / self.warp; + self.currentTempo = Math.round(self.visualObj.getBeatsPerMeasure() / millisecondsPerMeasure * 60000); + if (self.control) + self.control.setTempo(self.currentTempo); + self.percent = 0; + + if (!self.midiBuffer) + self.midiBuffer = new createSynth(); + return self.midiBuffer.init({ + visualObj: self.visualObj, + options: self.options, + millisecondsPerMeasure: millisecondsPerMeasure + }).then(function () { + return self.midiBuffer.prime(); + }).then(function () { + var subdivisions = 16; + if (self.cursorControl && + self.cursorControl.beatSubdivisions !== undefined && + parseInt(self.cursorControl.beatSubdivisions, 10) >= 1 && + parseInt(self.cursorControl.beatSubdivisions, 10) <= 64) + subdivisions = parseInt(self.cursorControl.beatSubdivisions, 10); + + // Need to create the TimingCallbacks after priming the midi so that the midi data is available for the callbacks. + self.timer = new abc_timing_callbacks(self.visualObj, { + beatCallback: self.beatCallback, + eventCallback: self.eventCallback, + lineEndCallback: self.lineEndCallback, + qpm: self.currentTempo, + + extraMeasuresAtBeginning: self.cursorControl ? self.cursorControl.extraMeasuresAtBeginning : undefined, + lineEndAnticipation: self.cursorControl ? self.cursorControl.lineEndAnticipation : undefined, + beatSubdivisions: subdivisions, + }); + if (self.cursorControl && self.cursorControl.onReady && typeof self.cursorControl.onReady === 'function') + self.cursorControl.onReady(self); + self.isLoaded = true; + return Promise.resolve({ status: "created" }); + }); + }; + + self.destroy = function () { + if (self.timer) { + self.timer.reset(); + self.timer.stop(); + self.timer = null; + } + if (self.midiBuffer) { + self.midiBuffer.stop(); + self.midiBuffer = null; + } + self.setProgress(0, 1); + if (self.control) + self.control.resetAll(); + }; + + self.play = function () { + if (!self.isLoaded) { + return self.go().then(function() { + return self._play(); + }); + } else + return self._play(); + }; + + self._play = function () { + self.isStarted = !self.isStarted; + if (self.isStarted) { + if (self.cursorControl && self.cursorControl.onStart && typeof self.cursorControl.onStart === 'function') + self.cursorControl.onStart(); + self.midiBuffer.start(); + self.timer.start(); + if (self.control) + self.control.pushPlay(true); + } else { + self.pause(); + } + return Promise.resolve({ status: "ok" }); + }; + + self.pause = function() { + if (self.timer) { + self.timer.pause(); + self.midiBuffer.pause(); + if (self.control) + self.control.pushPlay(false); + } + }; + + self.toggleLoop = function () { + self.isLooping = !self.isLooping; + if (self.control) + self.control.pushLoop(self.isLooping); + }; + + self.restart = function () { + if (self.timer) { + self.timer.setProgress(0); + self.midiBuffer.seek(0); + } + }; + + self.randomAccess = function (ev) { + if (!self.isLoaded) { + return self.go().then(function() { + return self._randomAccess(ev); + }); + } else + return self._randomAccess(ev); + }; + + self._randomAccess = function (ev) { + var background = (ev.target.classList.contains('abcjs-midi-progress-indicator')) ? ev.target.parentNode : ev.target; + var percent = (ev.x - background.offsetLeft) / background.offsetWidth; + if (percent < 0) + percent = 0; + if (percent > 100) + percent = 100; + self.timer.setProgress(percent); + self.midiBuffer.seek(percent); + }; + + self.onWarp = function (ev) { + var newWarp = ev.target.value; + if (parseInt(newWarp, 10) > 0) { + self.warp = parseInt(newWarp, 10); + var wasPlaying = self.isStarted; + var startPercent = self.percent; + self.destroy(); + self.isStarted = false; + self.go().then(function () { + self.setProgress(startPercent, self.midiBuffer.duration * 1000); + if (wasPlaying) { + self.play(); + } + self.timer.setProgress(startPercent); + self.midiBuffer.seek(startPercent); + }); + } + }; + + self.setProgress = function (percent, totalTime) { + self.percent = percent; + if (self.control) + self.control.setProgress(percent, totalTime); + }; + + self.finished = function () { + self.timer.reset(); + if (self.isLooping) { + self.timer.start(); + self.midiBuffer.start(); + } else { + self.timer.stop(); + if (self.isStarted) { + if (self.control) + self.control.pushPlay(false); + self.isStarted = false; + if (self.cursorControl && self.cursorControl.onFinished && typeof self.cursorControl.onFinished === 'function') + self.cursorControl.onFinished(); + self.setProgress(0, 1); + } + } + }; + + self.beatCallback = function (beatNumber, totalBeats, totalTime) { + var percent = beatNumber / totalBeats; + self.setProgress(percent, totalTime); + if (self.cursorControl && self.cursorControl.onBeat && typeof self.cursorControl.onBeat === 'function') + self.cursorControl.onBeat(beatNumber, totalBeats, totalTime); + }; + + self.eventCallback = function (event) { + if (event) { + if (self.cursorControl && self.cursorControl.onEvent && typeof self.cursorControl.onEvent === 'function') + self.cursorControl.onEvent(event); + } else { + self.finished(); + } + }; + + self.lineEndCallback = function (data) { + if (self.cursorControl && self.cursorControl.onLineEnd && typeof self.cursorControl.onLineEnd === 'function') + self.cursorControl.onLineEnd(data); + }; + + self.getUrl = function () { + return self.midiBuffer.download(); + }; + + self.download = function(fileName) { + var url = self.getUrl(); + var link = document.createElement('a'); + document.body.appendChild(link); + link.setAttribute("style","display: none;"); + link.href = url; + link.download = fileName ? fileName : 'output.wav'; + link.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(link); + }; +} + +var synthController = SynthController; + +// abc2abc_write.js: Prints an abc file in text format parsed by abc_parse.js +// Copyright (C) 2010-2018 Gregory Dyke (gregdyke at gmail dot com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and +// to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +// BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +var TextPrinter = function(elem, reposition) { + this.elem = elem; + this.text = ""; + this.l = 1/8; + this.reposition = reposition || false; +}; + +TextPrinter.prototype.printString = function(str, elem) { + if (this.reposition && elem) elem.startChar = this.text.length; + this.text += str; + if (this.reposition && elem) elem.endChar = this.text.length; +}; + +TextPrinter.prototype.printNewLine = function () { + this.text += "\n"; +}; + +TextPrinter.prototype.printSpace = function () { + if (this.text[this.text.length-1].match(/\s/)) return; //TODO match whitespace + this.text += " "; +}; + +TextPrinter.prototype.printABC = function(abctune) { + this.text = ""; + this.abctune = abctune; + //TODO formatting + this.printHeader(); + this.printBody(); + this.elem.value=this.text; +}; + +TextPrinter.prototype.printHeader = function() { + // much of this info is duplicated in metaTextHEaders in abc_parse_header.js + this.printHeaderLine("x","X","1"); + this.printHeaderLine("title","T"); + this.printHeaderLine("composer","C"); + this.printHeaderLine("history","H"); + this.printHeaderLine("author","A"); + this.printHeaderLine("book","B"); + this.printHeaderLine("discography","D"); + this.printHeaderLine("url","F"); + this.printHeaderLine("group","G"); + this.printHeaderLine("instruction","I"); + this.printHeaderLine("notes","N"); + this.printHeaderLine("origin","O"); + this.printHeaderLine("rhythm","R"); + this.printHeaderLine("source","S"); + this.printHeaderLine("unalignedwords","W"); + this.printHeaderLine("transcription","Z"); + //TODO part order + //TODO Q tempo + //TODO textBlock + this.printHeaderLine("NULL","L","1/8"); //TODO L + + this.printHeaderLine("NULL","M",this.getMeterString(this.abctune.lines[0].staff[0].meter)); + this.printHeaderLine("NULL","K",this.getKeyString(this.abctune.lines[0].staff[0].key));//TODO K +}; + +TextPrinter.prototype.getKeyString = function(key) { + return key.root+key.acc+key.mode; +}; + +TextPrinter.prototype.getMeterString = function(meter) { + switch (meter.type) { + case "cut_time": return "C|"; + case "common_time": return "C"; + case "specified": + if (meter.value[0].den) + return meter.value[0].num+"/"+meter.value[0].den; + else + return meter.value[0].num; + } + return ""; +}; + +TextPrinter.prototype.printHeaderLine = function(fieldname, abcfield, defaut) { + var val = this.abctune.metaText[fieldname] || defaut; + if (val !== undefined) { + var valarray = val.split("\n"); + for (var i=0; i 1) str+="["; + for (i=0; i 1) str+="]"; + } + + if (elem.pitches.length === 1 && elem.pitches[0].endSlur) { + str+=this.multiplyString(")",elem.pitches[0].endSlur.length); + } + + if (elem.endSlur) { + str+=this.multiplyString(")",elem.endSlur.length); + } + + this.printString(str,elem); + +}; + +// accidentals, ties and sometimes slurs, sometimes duration +TextPrinter.prototype.getNoteString = function(pitchelem, ignoreslur) { + var str = ""; + if (!ignoreslur && pitchelem.startSlur) { + str+="("; + } + + var symb = ""; + switch (pitchelem.accidental) { + case "quartersharp": + symb = "^/"; + break; + case "dblsharp": + symb = "^^"; + break; + case "sharp": + symb = "^"; + break; + case "quarterflat": + symb = "_/"; + break; + case "flat": + symb = "_"; + break; + case "dblflat": + symb = "__"; + break; + case "natural": + symb = "="; + } + str+=symb; + + var pitches = ["C","D","E","F","G","A","B"]; + var pitchstr = pitches[this.extractNote(pitchelem.pitch)]; + var octave = this.extractOctave(pitchelem.pitch); + if (octave>0) { + pitchstr = pitchstr.toLowerCase(); + octave--; + while (octave>0) { + pitchstr+="'"; + octave--; + } + } else { + while (octave<0) { + pitchstr+=","; + octave++; + } + } + + str+=pitchstr; + + if (pitchelem.duration) { + str+=this.getDurationString(pitchelem.duration); + } + + if (!ignoreslur && pitchelem.endSlur) { + str+=")"; + } + + if (pitchelem.startTie) { + str+="-"; + } + + return str; +}; + +TextPrinter.prototype.getDurationString = function(duration) { + //TODO detect crooked rhythm + if (duration/this.l > 1) { + return duration/this.l; + } + var ret = ""; + if (this.l/duration>1) { + ret+="/"; + if (this.l/duration>2) { + ret+=this.l/duration; + } + } + return ret; +}; + +TextPrinter.prototype.extractNote = function(pitch) { + var pitch2 = pitch%7; + if (pitch2<0) pitch2+=7; + return pitch2; +}; + +TextPrinter.prototype.extractOctave = function(pitch) { + return Math.floor(pitch/7); +}; + +TextPrinter.prototype.printBarLine = function(elem) { + var barstr = ""; + switch (elem.type) { + case "bar_thin": barstr+="|"; break; + case "bar_thin_thick": barstr+="|]"; break; + case "bar_thin_thin": barstr+="||"; break; + case "bar_thick_thin": barstr+="[|"; break; + case "bar_dbl_repeat": barstr+=":||:"; break; + case "bar_left_repeat": barstr+="|:"; break; + case "bar_right_repeat": barstr+=":|"; break; + case "bar_invisible": barstr+=""; break; + } + this.printString(barstr,elem); +}; + +TextPrinter.prototype.multiplyString = function (s, n) { + var ret = ""; + for (;n>0;n--) ret+=s; + return ret; +}; + +var abc2abc_write = TextPrinter; + +// abc_editor.js +// window.ABCJS.Editor is the interface class for the area that contains the ABC text. It is responsible for +// holding the text of the tune and calling the parser and the rendering engines. +// +// EditArea is an example of using a textarea as the control that is shown to the user. As long as +// the same interface is used, window.ABCJS.Editor can use a different type of object. +// +// EditArea: +// - constructor(textareaid) +// This contains the id of a textarea control that will be used. +// - addSelectionListener(listener) +// A callback class that contains the entry point fireSelectionChanged() +// - addChangeListener(listener) +// A callback class that contains the entry point fireChanged() +// - getSelection() +// returns the object { start: , end: } with the current selection in characters +// - setSelection(start, end) +// start and end are the character positions that should be selected. +// - getString() +// returns the ABC text that is currently displayed. +// - setString(str) +// sets the ABC text that is currently displayed, and resets the initialText variable +// - getElem() +// returns the textarea element +// - string initialText +// Contains the starting text. This can be compared against the current text to see if anything changed. +// + +/*global document, window, clearTimeout, setTimeout */ + +var TuneBook = abc_tunebook.TuneBook; + + + + + + + +// Polyfill for CustomEvent for old IE versions +if ( typeof window.CustomEvent !== "function" ) { + var CustomEvent = function(event, params) { + params = params || {bubbles: false, cancelable: false, detail: undefined}; + var evt = document.createEvent('CustomEvent'); + evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); + return evt; + }; + CustomEvent.prototype = window.Event.prototype; + window.CustomEvent = CustomEvent; +} + +var EditArea = function(textareaid) { + this.textarea = document.getElementById(textareaid); + this.initialText = this.textarea.value; + this.isDragging = false; +}; + +EditArea.prototype.addSelectionListener = function(listener) { + this.textarea.onmousemove = function(ev) { + if (this.isDragging) + listener.fireSelectionChanged(); + }; +}; + +EditArea.prototype.addChangeListener = function(listener) { + this.changelistener = listener; + this.textarea.onkeyup = function() { + listener.fireChanged(); + }; + this.textarea.onmousedown = function() { + this.isDragging = true; + listener.fireSelectionChanged(); + }; + this.textarea.onmouseup = function() { + this.isDragging = false; + listener.fireChanged(); + }; + this.textarea.onchange = function() { + listener.fireChanged(); + }; +}; + +//TODO won't work under IE? +EditArea.prototype.getSelection = function() { + return {start: this.textarea.selectionStart, end: this.textarea.selectionEnd}; +}; + +EditArea.prototype.setSelection = function(start, end) { + if(this.textarea.setSelectionRange) + this.textarea.setSelectionRange(start, end); + else if(this.textarea.createTextRange) { + // For IE8 + var e = this.textarea.createTextRange(); + e.collapse(true); + e.moveEnd('character', end); + e.moveStart('character', start); + e.select(); + } + this.textarea.focus(); +}; + +EditArea.prototype.getString = function() { + return this.textarea.value; +}; + +EditArea.prototype.setString = function(str) { + this.textarea.value = str; + this.initialText = this.getString(); + if (this.changelistener) { + this.changelistener.fireChanged(); + } +}; + +EditArea.prototype.getElem = function() { + return this.textarea; +}; + +// +// window.ABCJS.Editor: +// +// constructor(editarea, params) +// if editarea is a string, then it is an HTML id of a textarea control. +// Otherwise, it should be an instantiation of an object that expresses the EditArea interface. +// +// params is a hash of: +// canvas_id: or paper_id: HTML id to draw in. If not present, then the drawing happens just below the editor. +// generate_midi: if present, then midi is generated. +// midi_id: if present, the HTML id to place the midi control. Otherwise it is placed in the same div as the paper. +// midi_download_id: if present, the HTML id to place the midi download link. Otherwise it is placed in the same div as the paper. +// generate_warnings: if present, then parser warnings are displayed on the page. +// warnings_id: if present, the HTML id to place the warnings. Otherwise they are placed in the same div as the paper. +// onchange: if present, the callback function to call whenever there has been a change. +// gui: if present, the paper can send changes back to the editor (presumably because the user changed something directly.) +// parser_options: options to send to the parser engine. +// midi_options: options to send to the midi engine. +// render_options: options to send to the render engine. +// indicate_changed: the dirty flag is set if this is true. +// +// - setReadOnly(bool) +// adds or removes the class abc_textarea_readonly, and adds or removes the attribute readonly=yes +// - setDirtyStyle(bool) +// adds or removes the class abc_textarea_dirty +// - renderTune(abc, parserparams, div) +// Immediately renders the tune. (Useful for creating the SVG output behind the scenes, if div is hidden) +// string abc: the ABC text +// parserparams: params to send to the parser +// div: the HTML id to render to. +// - modelChanged() +// Called when the model has been changed to trigger re-rendering +// - parseABC() +// Called internally by fireChanged() +// returns true if there has been a change since last call. +// - updateSelection() +// Called when the user has changed the selection. This calls the engraver_controller to show the selection. +// - fireSelectionChanged() +// Called by the textarea object when the user has changed the selection. +// - paramChanged(engraverparams) +// Called to signal that the engraver params have changed, so re-rendering should occur. +// - fireChanged() +// Called by the textarea object when the user has changed something. +// - setNotDirty() +// Called by the client app to reset the dirty flag +// - isDirty() +// Returns true or false, whether the textarea contains the same text that it started with. +// - highlight(abcelem) +// Called by the engraver_controller to highlight an area. +// - pause(bool) +// Stops the automatic rendering when the user is typing. +// + +var Editor = function(editarea, params) { + // Copy all the options that will be passed through + this.abcjsParams = {}; + var key; + if (params.abcjsParams) { + for (key in params.abcjsParams) { + if (params.abcjsParams.hasOwnProperty(key)) { + this.abcjsParams[key] = params.abcjsParams[key]; + } + } + } + if (params.midi_options) { + for (key in params.midi_options) { + if (params.midi_options.hasOwnProperty(key)) { + this.abcjsParams[key] = params.midi_options[key]; + } + } + } + if (params.parser_options) { + for (key in params.parser_options) { + if (params.parser_options.hasOwnProperty(key)) { + this.abcjsParams[key] = params.parser_options[key]; + } + } + } + if (params.render_options) { + for (key in params.render_options) { + if (params.render_options.hasOwnProperty(key)) { + this.abcjsParams[key] = params.render_options[key]; + } + } + } + + if (params.indicate_changed) + this.indicate_changed = true; + if (typeof editarea === "string") { + this.editarea = new EditArea(editarea); + } else { + this.editarea = editarea; + } + this.editarea.addSelectionListener(this); + this.editarea.addChangeListener(this); + + if (params.canvas_id) { + this.div = document.getElementById(params.canvas_id); + } else if (params.paper_id) { + this.div = document.getElementById(params.paper_id); + } else { + this.div = document.createElement("DIV"); + this.editarea.getElem().parentNode.insertBefore(this.div, this.editarea.getElem()); + } + + if (params.selectionChangeCallback) { + this.selectionChangeCallback = params.selectionChangeCallback; + } + + if (params.synth) { + if (supportsAudio_1()) { + this.synth = { + el: params.synth.el, + cursorControl: params.synth.cursorControl, + options: params.synth.options + }; + } + } + // If the user wants midi, then store the elements that it will be written to. The element could either be passed in as an id, + // an element, or nothing. If nothing is passed in, then just put the midi on top of the generated music. + if (params.generate_midi) { + this.generate_midi = params.generate_midi; + if (this.abcjsParams.generateDownload) { + if (typeof params.midi_download_id === 'string') + this.downloadMidi = document.getElementById(params.midi_download_id); + else if (params.midi_download_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough. + this.downloadMidi = params.midi_download_id; + } + if (this.abcjsParams.generateInline !== false) { // The default for this is true, so undefined is also true. + if (typeof params.midi_id === 'string') + this.inlineMidi = document.getElementById(params.midi_id); + else if (params.midi_id) // assume, if the var is not a string it is an element. If not, it will crash soon enough. + this.inlineMidi = params.midi_id; + } + } + + if (params.generate_warnings || params.warnings_id) { + if (params.warnings_id) { + this.warningsdiv = document.getElementById(params.warnings_id); + } else { + this.warningsdiv = this.div; + } + } + + this.onchangeCallback = params.onchange; + + if (params.gui) { + this.target = document.getElementById(editarea); + this.abcjsParams.editable = true; + } + this.oldt = ""; + this.bReentry = false; + this.parseABC(); + this.modelChanged(); + + this.addClassName = function(element, className) { + var hasClassName = function(element, className) { + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName === className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }; + + this.removeClassName = function(element, className) { + element.className = abc_common.strip(element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ')); + return element; + }; + + this.setReadOnly = function(readOnly) { + var readonlyClass = 'abc_textarea_readonly'; + var el = this.editarea.getElem(); + if (readOnly) { + el.setAttribute('readonly', 'yes'); + this.addClassName(el, readonlyClass); + } else { + el.removeAttribute('readonly'); + this.removeClassName(el, readonlyClass); + } + }; +}; + +Editor.prototype.renderTune = function(abc, params, div) { + var tunebook = new TuneBook(abc); + var abcParser = abc_parse(); + abcParser.parse(tunebook.tunes[0].abc, params, tunebook.tunes[0].startPos - tunebook.header.length); //TODO handle multiple tunes + var tune = abcParser.getTune(); + var engraver_controller = new abc_engraver_controller(div, this.abcjsParams); + engraver_controller.engraveABC(tune); +}; + +Editor.prototype.redrawMidi = function() { + if (this.generate_midi && !this.midiPause) { + var event = new window.CustomEvent("generateMidi", { + detail: { + tunes: this.tunes, + abcjsParams: this.abcjsParams, + downloadMidiEl: this.downloadMidi, + inlineMidiEl: this.inlineMidi, + engravingEl: this.div + } + }); + window.dispatchEvent(event); + } + if (this.synth) { + if (!this.synth.synthControl) { + this.synth.synthControl = new synthController(); + this.synth.synthControl.load(this.synth.el, this.synth.cursorControl, this.synth.options); + } + this.synth.synthControl.setTune(this.tunes[0], false); + } +}; + +Editor.prototype.modelChanged = function() { + if (this.tunes === undefined) { + if (this.downloadMidi !== undefined) + this.downloadMidi.innerHTML = ""; + if (this.inlineMidi !== undefined) + this.inlineMidi.innerHTML = ""; + this.div.innerHTML = ""; + return; + } + + if (this.bReentry) + return; // TODO is this likely? maybe, if we rewrite abc immediately w/ abc2abc + this.bReentry = true; + this.timerId = null; + this.div.innerHTML = ""; + this.engraver_controller = new abc_engraver_controller(this.div, this.abcjsParams); + this.engraver_controller.engraveABC(this.tunes); + this.tunes[0].engraver = this.engraver_controller; // TODO-PER: We actually want an output object for each tune, not the entire controller. When refactoring, don't save data in the controller. + this.redrawMidi(); + + if (this.warningsdiv) { + this.warningsdiv.innerHTML = (this.warnings) ? this.warnings.join("
") : "No errors"; + } + if (this.target) { + var textprinter = new abc2abc_write(this.target, true); + textprinter.printABC(this.tunes[0]); //TODO handle multiple tunes + } + this.engraver_controller.addSelectListener(this.highlight.bind(this)); + this.updateSelection(); + this.bReentry = false; +}; + +// Call this to reparse in response to the printing parameters changing +Editor.prototype.paramChanged = function(engraverParams) { + if (engraverParams) { + for (var key in engraverParams) { + if (engraverParams.hasOwnProperty(key)) { + this.abcjsParams[key] = engraverParams[key]; + } + } + } + this.oldt = ""; + this.fireChanged(); +}; + +// return true if the model has changed +Editor.prototype.parseABC = function() { + var t = this.editarea.getString(); + if (t===this.oldt) { + this.updateSelection(); + return false; + } + + this.oldt = t; + if (t === "") { + this.tunes = undefined; + this.warnings = ""; + return true; + } + var tunebook = new TuneBook(t); + + this.tunes = []; + this.startPos = []; + this.warnings = []; + for (var i=0; i 0 && (elementClassName === className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }; + + if (!hasClassName(element, className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }; + + var removeClassName = function(element, className) { + element.className = abc_common.strip(element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ')); + return element; + }; + + var readonlyClass = 'abc_textarea_dirty'; + var el = this.editarea.getElem(); + if (isDirty) { + addClassName(el, readonlyClass); + } else { + removeClassName(el, readonlyClass); + } +}; + +// call when abc text is changed and needs re-parsing +Editor.prototype.fireChanged = function() { + if (this.bIsPaused) + return; + if (this.parseABC()) { + var self = this; + if (this.timerId) // If the user is still typing, cancel the update + clearTimeout(this.timerId); + this.timerId = setTimeout(function () { + self.modelChanged(); + }, 300); // Is this a good compromise between responsiveness and not redrawing too much? + var isDirty = this.isDirty(); + if (this.wasDirty !== isDirty) { + this.wasDirty = isDirty; + this.setDirtyStyle(isDirty); + } + if (this.onchangeCallback) + this.onchangeCallback(this); + } +}; + +Editor.prototype.setNotDirty = function() { + this.editarea.initialText = this.editarea.getString(); + this.wasDirty = false; + this.setDirtyStyle(false); +}; + +Editor.prototype.isDirty = function() { + if (this.indicate_changed === undefined) + return false; + return this.editarea.initialText !== this.editarea.getString(); +}; + +Editor.prototype.highlight = function(abcelem, tuneNumber, classes) { + // TODO-PER: The marker appears to get off by one for each tune parsed. I'm not sure why, but adding the tuneNumber in corrects it for the time being. +// var offset = (tuneNumber !== undefined) ? this.startPos[tuneNumber] + tuneNumber : 0; + + this.editarea.setSelection(abcelem.startChar, abcelem.endChar); + if (this.selectionChangeCallback) + this.selectionChangeCallback(abcelem.startChar, abcelem.endChar); +}; + +Editor.prototype.pause = function(shouldPause) { + this.bIsPaused = shouldPause; + if (!shouldPause) + this.fireChanged(); +}; + +Editor.prototype.millisecondsPerMeasure = function() { + return this.synth.synthControl.visualObj.millisecondsPerMeasure(); +}; + +Editor.prototype.pauseMidi = function(shouldPause) { + this.midiPause = shouldPause; + if (!shouldPause) + this.redrawMidi(); +}; + +var abc_editor = Editor; + +var abcjs = {}; + +abcjs.signature = "abcjs-basic v" + version_1; + +Object.keys(abc_animation).forEach(function (key) { + abcjs[key] = abc_animation[key]; +}); + +Object.keys(abc_tunebook).forEach(function (key) { + abcjs[key] = abc_tunebook[key]; +}); + +abcjs.renderAbc = abc_tunebook_svg; +abcjs.TimingCallbacks = abc_timing_callbacks; + + +abcjs.setGlyph = abc_glyphs.setSymbol; + + + + + + + + + + + + +abcjs.synth = { + CreateSynth: createSynth, + instrumentIndexToName: instrumentIndexToName_1, + pitchToNoteName: pitchToNoteName_1, + SynthController: synthController, + SynthSequence: synthSequence, + CreateSynthControl: createSynthControl, + registerAudioContext: registerAudioContext_1, + activeAudioContext: activeAudioContext_1, + supportsAudio: supportsAudio_1, + playEvent: playEvent_1 +}; + + +abcjs['Editor'] = abc_editor; + +var abcjs_1 = abcjs; + +var MusicPlugin = /** @class */ (function (_super) { + __extends(MusicPlugin, _super); + function MusicPlugin() { + return _super !== null && _super.apply(this, arguments) || this; + } + MusicPlugin.prototype.onload = function () { + console.log('loading abcjs plugin'); + obsidian.MarkdownPreviewRenderer.registerPostProcessor(MusicPlugin.postprocessor); + }; + MusicPlugin.prototype.onunload = function () { + console.log('unloading abcjs plugin'); + obsidian.MarkdownPreviewRenderer.unregisterPostProcessor(MusicPlugin.postprocessor); + }; + MusicPlugin.postprocessor = function (el, ctx) { + // Assumption: One section always contains only the code block + var blockToReplace = el.querySelector('pre'); + if (!blockToReplace) + return; + var musicBlock = blockToReplace.querySelector('code.language-music-abc'); + if (!musicBlock) + return; + var source = musicBlock.textContent; + var destination = document.createElement('div'); + abcjs_1.renderAbc(destination, source, { + add_classes: true, + responsive: 'resize' + }); + el.replaceChild(destination, blockToReplace); + }; + return MusicPlugin; +}(obsidian.Plugin)); + +module.exports = MusicPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfc3BhY2luZy5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX2NvbW1vbi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvYXBpL2FiY190aW1pbmdfY2FsbGJhY2tzLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9hcGkvYWJjX2FuaW1hdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlX2RpcmVjdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlX2tleV92b2ljZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlX2hlYWRlci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3Rva2VuaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2Uvd3JhcF9saW5lcy5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvZGF0YS9hYmNfdHVuZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvcGFyc2UvYWJjX3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9hcGkvYWJjX3R1bmVib29rLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfYWJzb2x1dGVfZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX3JlbGF0aXZlX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19iZWFtX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19icmFjZV9lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfZ2x5cGhzLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfY3JlYXRlX2NsZWYuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19jcmVhdGVfa2V5X3NpZ25hdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX2NyZWF0ZV90aW1lX3NpZ25hdHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX2R5bmFtaWNfZGVjb3JhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvc3ByaW50Zi5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX2NyZXNjZW5kb19lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfdGllX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19kZWNvcmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfZW5kaW5nX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19zdGFmZl9ncm91cF9lbGVtZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfdGVtcG9fZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX3RyaXBsZXRfZWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvYWJjX3ZvaWNlX2VsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19hYnN0cmFjdF9lbmdyYXZlci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvd3JpdGUvc3ZnLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy93cml0ZS9hYmNfcmVuZGVyZXIuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3dyaXRlL2FiY19lbmdyYXZlcl9jb250cm9sbGVyLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9hcGkvYWJjX3R1bmVib29rX3N2Zy5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvc291bmRzLWNhY2hlLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9sb2FkLW5vdGUuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL2luc3RydW1lbnQtaW5kZXgtdG8tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvY3JlYXRlLW5vdGUtbWFwLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9yZWdpc3Rlci1hdWRpby1jb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9hY3RpdmUtYXVkaW8tY29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvc3VwcG9ydHMtYXVkaW8uanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL3BpdGNoLXRvLW5vdGUtbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvZG93bmxvYWQtYnVmZmVyLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9taWRpL2FiY19taWRpX3NlcXVlbmNlci5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvbWlkaS9hYmNfbWlkaV9mbGF0dGVuZXIuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL2NyZWF0ZS1zeW50aC5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvc3ludGgvc3ludGgtc2VxdWVuY2UuanMiLCJub2RlX21vZHVsZXMvYWJjanMvc3JjL3N5bnRoL2NyZWF0ZS1zeW50aC1jb250cm9sLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9wbGF5LWV2ZW50LmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy9zeW50aC9zeW50aC1jb250cm9sbGVyLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL3NyYy90cmFuc2Zvcm0vYWJjMmFiY193cml0ZS5qcyIsIm5vZGVfbW9kdWxlcy9hYmNqcy9zcmMvZWRpdC9hYmNfZWRpdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FiY2pzL2luZGV4LmpzIiwibWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJ2YXIgdmVyc2lvbiA9ICc1LjEyLjAnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIvLyAgICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzcGFjaW5nID0ge307XG5cbnNwYWNpbmcuRk9OVEVNID0gMzYwO1xuc3BhY2luZy5GT05UU0laRSA9IDMwO1xuc3BhY2luZy5TVEVQID0gc3BhY2luZy5GT05UU0laRSo5My83MjA7XG5zcGFjaW5nLlNQQUNFID0gMTA7XG5zcGFjaW5nLlRPUE5PVEUgPSAxNTtcbnNwYWNpbmcuU1RBVkVIRUlHSFQgPSAxMDA7XG5zcGFjaW5nLklOREVOVCA9IDUwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNwYWNpbmc7XG4iLCIvLyAgICBhYmNfcGFyc2UuanM6IHBhcnNlcyBhIHN0cmluZyByZXByZXNlbnRpbmcgQUJDIE11c2ljIE5vdGF0aW9uIGludG8gYSB1c2FibGUgaW50ZXJuYWwgc3RydWN0dXJlLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHBhcnNlQ29tbW9uID0ge307XG5cbnBhcnNlQ29tbW9uLmNsb25lID0gZnVuY3Rpb24oc291cmNlKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpXG5cdFx0aWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG5cdFx0XHRkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBzb3VyY2VbcHJvcGVydHldO1xuXHRyZXR1cm4gZGVzdGluYXRpb247XG59O1xuXG5wYXJzZUNvbW1vbi5jbG9uZUFycmF5ID0gZnVuY3Rpb24oc291cmNlKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xuXHRcdGRlc3RpbmF0aW9uLnB1c2gocGFyc2VDb21tb24uY2xvbmUoc291cmNlW2ldKSk7XG5cdH1cblx0cmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcblxucGFyc2VDb21tb24uY2xvbmVIYXNoT2ZIYXNoID0gZnVuY3Rpb24oc291cmNlKSB7XG5cdHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuXHRmb3IgKHZhciBwcm9wZXJ0eSBpbiBzb3VyY2UpXG5cdFx0aWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG5cdFx0XHRkZXN0aW5hdGlvbltwcm9wZXJ0eV0gPSBwYXJzZUNvbW1vbi5jbG9uZShzb3VyY2VbcHJvcGVydHldKTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcblxucGFyc2VDb21tb24uY2xvbmVIYXNoT2ZBcnJheU9mSGFzaCA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuXHR2YXIgZGVzdGluYXRpb24gPSB7fTtcblx0Zm9yICh2YXIgcHJvcGVydHkgaW4gc291cmNlKVxuXHRcdGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuXHRcdFx0ZGVzdGluYXRpb25bcHJvcGVydHldID0gcGFyc2VDb21tb24uY2xvbmVBcnJheShzb3VyY2VbcHJvcGVydHldKTtcblx0cmV0dXJuIGRlc3RpbmF0aW9uO1xufTtcblxucGFyc2VDb21tb24uZ3N1YiA9IGZ1bmN0aW9uKHNvdXJjZSwgcGF0dGVybiwgcmVwbGFjZW1lbnQpIHtcblx0cmV0dXJuIHNvdXJjZS5zcGxpdChwYXR0ZXJuKS5qb2luKHJlcGxhY2VtZW50KTtcbn07XG5cbnBhcnNlQ29tbW9uLnN0cmlwID0gZnVuY3Rpb24oc3RyKSB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXlxccysvLCAnJykucmVwbGFjZSgvXFxzKyQvLCAnJyk7XG59O1xuXG5wYXJzZUNvbW1vbi5zdGFydHNXaXRoID0gZnVuY3Rpb24oc3RyLCBwYXR0ZXJuKSB7XG5cdHJldHVybiBzdHIuaW5kZXhPZihwYXR0ZXJuKSA9PT0gMDtcbn07XG5cbnBhcnNlQ29tbW9uLmVuZHNXaXRoID0gZnVuY3Rpb24oc3RyLCBwYXR0ZXJuKSB7XG5cdHZhciBkID0gc3RyLmxlbmd0aCAtIHBhdHRlcm4ubGVuZ3RoO1xuXHRyZXR1cm4gZCA+PSAwICYmIHN0ci5sYXN0SW5kZXhPZihwYXR0ZXJuKSA9PT0gZDtcbn07XG5cbnBhcnNlQ29tbW9uLmVhY2ggPSBmdW5jdGlvbihhcnIsIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBhcnIubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspXG5cdCAgaXRlcmF0b3IuYXBwbHkoY29udGV4dCwgW2FycltpXSxpXSk7XG59O1xuXG5wYXJzZUNvbW1vbi5sYXN0ID0gZnVuY3Rpb24oYXJyKSB7XG5cdGlmIChhcnIubGVuZ3RoID09PSAwKVxuXHRcdHJldHVybiBudWxsO1xuXHRyZXR1cm4gYXJyW2Fyci5sZW5ndGgtMV07XG59O1xuXG5wYXJzZUNvbW1vbi5jb21wYWN0ID0gZnVuY3Rpb24oYXJyKSB7XG5cdHZhciBvdXRwdXQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoYXJyW2ldKVxuXHRcdFx0b3V0cHV0LnB1c2goYXJyW2ldKTtcblx0fVxuXHRyZXR1cm4gb3V0cHV0O1xufTtcblxucGFyc2VDb21tb24uZGV0ZWN0ID0gZnVuY3Rpb24oYXJyLCBpdGVyYXRvcikge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChpdGVyYXRvcihhcnJbaV0pKVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLy8gVGhlIGZvbGxvd2luZyBpcyBhIHBvbHlmaWxsIGZvciBPYmplY3QucmVtb3ZlIGZvciBJRTksIElFMTAsIGFuZCBJRTExLlxuLy8gZnJvbTpodHRwczovL2dpdGh1Yi5jb20vanNlcnovanNfcGllY2UvYmxvYi9tYXN0ZXIvRE9NL0NoaWxkTm9kZS9yZW1vdmUoKS9yZW1vdmUoKS5tZFxuKGZ1bmN0aW9uIChhcnIpIHtcblx0YXJyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgncmVtb3ZlJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGl0ZW0sICdyZW1vdmUnLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuXHRcdFx0XHRpZiAodGhpcy5wYXJlbnROb2RlICE9PSBudWxsKVxuXHRcdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG59KShbRWxlbWVudC5wcm90b3R5cGUsIENoYXJhY3RlckRhdGEucHJvdG90eXBlLCBEb2N1bWVudFR5cGUucHJvdG90eXBlXSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VDb21tb247XG4iLCJcbnZhciBUaW1pbmdDYWxsYmFja3MgPSBmdW5jdGlvbih0YXJnZXQsIHBhcmFtcykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdGlmICghcGFyYW1zKSBwYXJhbXMgPSB7fTtcblx0c2VsZi5xcG0gPSBwYXJhbXMucXBtID8gcGFyc2VJbnQocGFyYW1zLnFwbSwgMTApIDogbnVsbDtcblx0aWYgKCFzZWxmLnFwbSkge1xuXHRcdHZhciB0ZW1wbyA9IHRhcmdldC5tZXRhVGV4dCA/IHRhcmdldC5tZXRhVGV4dC50ZW1wbyA6IG51bGw7XG5cdFx0c2VsZi5xcG0gPSB0YXJnZXQuZ2V0QnBtKHRlbXBvKTtcblx0fVxuXHRzZWxmLmV4dHJhTWVhc3VyZXNBdEJlZ2lubmluZyA9IHBhcmFtcy5leHRyYU1lYXN1cmVzQXRCZWdpbm5pbmcgPyBwYXJzZUludChwYXJhbXMuZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nLCAxMCkgOiAwO1xuXHRzZWxmLmJlYXRDYWxsYmFjayA9IHBhcmFtcy5iZWF0Q2FsbGJhY2s7IC8vIFRoaXMgaXMgY2FsbGVkIGZvciBlYWNoIGJlYXQuXG5cdHNlbGYuZXZlbnRDYWxsYmFjayA9IHBhcmFtcy5ldmVudENhbGxiYWNrOyAgIC8vIFRoaXMgaXMgY2FsbGVkIGZvciBlYWNoIG5vdGUgb3IgcmVzdCBlbmNvdW50ZXJlZC5cblx0c2VsZi5saW5lRW5kQ2FsbGJhY2sgPSBwYXJhbXMubGluZUVuZENhbGxiYWNrOyAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGVuZCBvZiBhIGxpbmUgaXMgYXBwcm9hY2hpbmcuXG5cdHNlbGYubGluZUVuZEFudGljaXBhdGlvbiA9IHBhcmFtcy5saW5lRW5kQW50aWNpcGF0aW9uID8gcGFyc2VJbnQocGFyYW1zLmxpbmVFbmRBbnRpY2lwYXRpb24sIDEwKSA6IDA7ICAgLy8gSG93IG1hbnkgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgZW5kIHNob3VsZCB0aGUgY2FsbCBoYXBwZW4uXG5cdHNlbGYuYmVhdFN1YmRpdmlzaW9ucyA9IHBhcmFtcy5iZWF0U3ViZGl2aXNpb25zID8gcGFyc2VJbnQocGFyYW1zLmJlYXRTdWJkaXZpc2lvbnMsIDEwKSA6IDE7IC8vIGhvdyBtYW55IGNhbGxiYWNrcyBwZXIgYmVhdCBpcyBkZXNpcmVkLlxuXG5cdHNlbGYucmVwbGFjZVRhcmdldCA9IGZ1bmN0aW9uKG5ld1RhcmdldCkge1xuXHRcdG5ld1RhcmdldC5zZXRUaW1pbmcoc2VsZi5xcG0sIHNlbGYuZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nKTtcblx0XHRpZiAobmV3VGFyZ2V0Lm5vdGVUaW1pbmdzLmxlbmd0aCA9PT0gMClcblx0XHRcdG5ld1RhcmdldC5zZXRUaW1pbmcoMCwwKTtcblx0XHRpZiAoc2VsZi5saW5lRW5kQ2FsbGJhY2spIHtcblx0XHRcdHNlbGYubGluZUVuZFRpbWluZ3MgPSBnZXRMaW5lRW5kVGltaW5ncyhuZXdUYXJnZXQubm90ZVRpbWluZ3MsIHNlbGYubGluZUVuZEFudGljaXBhdGlvbik7XG5cdFx0fVxuXHRcdHNlbGYubm90ZVRpbWluZ3MgPSBuZXdUYXJnZXQubm90ZVRpbWluZ3M7XG5cdH07XG5cblx0c2VsZi5yZXBsYWNlVGFyZ2V0KHRhcmdldCk7XG5cdGlmIChzZWxmLm5vdGVUaW1pbmdzLmxlbmd0aCA9PT0gMClcblx0XHRyZXR1cm47XG5cblx0Ly8gbm90ZVRpbWluZ3MgY29udGFpbnMgYW4gYXJyYXkgb2YgZXZlbnRzIHNvcnRlZCBieSB0aW1lLiBFdmVudHMgdGhhdCBoYXBwZW4gYXQgdGhlIHNhbWUgdGltZSBhcmUgaW4gdGhlIHNhbWUgZWxlbWVudCBvZiB0aGUgYXJyYXkuXG5cdHNlbGYubm90ZVRpbWluZ3MgPSB0YXJnZXQubm90ZVRpbWluZ3M7XG5cdHNlbGYubWlsbGlzZWNvbmRzUGVyQmVhdCA9IDEwMDAgLyAoc2VsZi5xcG0gLyA2MCkgLyBzZWxmLmJlYXRTdWJkaXZpc2lvbnM7XG5cdHNlbGYubGFzdE1vbWVudCA9IHNlbGYubm90ZVRpbWluZ3Nbc2VsZi5ub3RlVGltaW5ncy5sZW5ndGgtMV0ubWlsbGlzZWNvbmRzO1xuXHRzZWxmLnRvdGFsQmVhdHMgPSBNYXRoLnJvdW5kKHNlbGYubGFzdE1vbWVudCAvIHNlbGYubWlsbGlzZWNvbmRzUGVyQmVhdCk7XG5cblx0c2VsZi5zdGFydFRpbWUgPSBudWxsO1xuXHRzZWxmLmN1cnJlbnRCZWF0ID0gMDtcblx0c2VsZi5jdXJyZW50RXZlbnQgPSAwO1xuXHRzZWxmLmlzUGF1c2VkID0gZmFsc2U7XG5cdHNlbGYuaXNSdW5uaW5nID0gZmFsc2U7XG5cdHNlbGYucGF1c2VkVGltZSA9IG51bGw7XG5cdHNlbGYuanVzdFVucGF1c2VkID0gZmFsc2U7XG5cblx0c2VsZi5uZXdTZWVrUGVyY2VudCA9IDA7XG5cdHNlbGYuanVzdFNlZWtlZCA9IGZhbHNlO1xuXG5cdGZ1bmN0aW9uIHNldEN1cnJlbnRMb2NhdGlvbih0aW1lc3RhbXApIHtcblx0XHQvLyBGaXJzdCBmaW5kIHRoZSByZWxhdGl2ZSBhbW91bnQgdG8gbW92ZTogdGhhdCBpcywgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY3VycmVudCBwZXJjZW50YWdlIGFuZCB0aGUgcGFzc2VkIGluIHBlcmNlbnQuXG5cdFx0dmFyIGN1cnJlbnRQZXJjZW50ID0gKHRpbWVzdGFtcCAtIHNlbGYuc3RhcnRUaW1lKSAvIHNlbGYubGFzdE1vbWVudDtcblx0XHR2YXIgcGVyY2VudERpZmZlcmVuY2UgPSBjdXJyZW50UGVyY2VudCAtIHNlbGYubmV3U2Vla1BlcmNlbnQ7XG5cdFx0dmFyIHRpbWVEaWZmZXJlbmNlID0gc2VsZi5sYXN0TW9tZW50ICogcGVyY2VudERpZmZlcmVuY2U7XG5cdFx0c2VsZi5zdGFydFRpbWUgPSBzZWxmLnN0YXJ0VGltZSArIHRpbWVEaWZmZXJlbmNlO1xuXG5cdFx0dmFyIGN1cnJlbnRUaW1lID0gdGltZXN0YW1wIC0gc2VsZi5zdGFydFRpbWU7XG5cdFx0Y3VycmVudFRpbWUgKz0gNTA7IC8vIEFkZCBhIGxpdHRsZSBzbG9wIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpc24ndCBjYWxsZWQgZXhhY3RseS5cblxuXHRcdHZhciBvbGRCZWF0ID0gc2VsZi5jdXJyZW50QmVhdDtcblx0XHRzZWxmLmN1cnJlbnRCZWF0ID0gTWF0aC5mbG9vcihjdXJyZW50VGltZSAvIHNlbGYubWlsbGlzZWNvbmRzUGVyQmVhdCk7XG5cdFx0aWYgKHNlbGYuYmVhdENhbGxiYWNrICYmIG9sZEJlYXQgIT09IHNlbGYuY3VycmVudEJlYXQpIC8vIElmIHRoZSBtb3ZlbWVudCBjYXVzZWQgdGhlIGJlYXQgdG8gY2hhbmdlLCB0aGVuIGltbWVkaWF0ZWx5IHJlcG9ydCBpdCB0byB0aGUgY2xpZW50LlxuXHRcdFx0c2VsZi5iZWF0Q2FsbGJhY2soc2VsZi5jdXJyZW50QmVhdCAvIHNlbGYuYmVhdFN1YmRpdmlzaW9ucywgc2VsZi50b3RhbEJlYXRzIC8gc2VsZi5iZWF0U3ViZGl2aXNpb25zLCBzZWxmLmxhc3RNb21lbnQpO1xuXG5cdFx0c2VsZi5jdXJyZW50RXZlbnQgPSAwO1xuXHRcdHdoaWxlIChzZWxmLm5vdGVUaW1pbmdzLmxlbmd0aCA+IHNlbGYuY3VycmVudEV2ZW50ICYmIHNlbGYubm90ZVRpbWluZ3Nbc2VsZi5jdXJyZW50RXZlbnRdLm1pbGxpc2Vjb25kcyA8IGN1cnJlbnRUaW1lKSB7XG5cdFx0XHRzZWxmLmN1cnJlbnRFdmVudCsrO1xuXHRcdH1cblx0XHRpZiAoc2VsZi5ldmVudENhbGxiYWNrICYmIHNlbGYuY3VycmVudEV2ZW50ID4gMCAmJiBzZWxmLm5vdGVUaW1pbmdzW3NlbGYuY3VycmVudEV2ZW50IC0gMV0udHlwZSA9PT0gJ2V2ZW50Jylcblx0XHRcdHNlbGYuZXZlbnRDYWxsYmFjayhzZWxmLm5vdGVUaW1pbmdzW3NlbGYuY3VycmVudEV2ZW50IC0gMV0pO1xuXG5cdFx0Ly8gY29uc29sZS5sb2coXCJjdXJyZW50UGVyY2VudD1cIitjdXJyZW50UGVyY2VudCtcblx0XHQvLyBcdFwiIG5ld1NlZWtQZXJjZW50PVwiK3NlbGYubmV3U2Vla1BlcmNlbnQrXG5cdFx0Ly8gXHRcIiBwZXJjZW50RGlmZmVyZW5jZT1cIitwZXJjZW50RGlmZmVyZW5jZStcblx0XHQvLyBcdFwiIHRpbWVEaWZmZXJlbmNlPVwiLHRpbWVEaWZmZXJlbmNlK1xuXHRcdC8vIFx0XCIgY3VycmVudEJlYXQ9XCIrc2VsZi5jdXJyZW50QmVhdCtcblx0XHQvLyBcdFwiIGN1cnJlbnRFdmVudD1cIitzZWxmLmN1cnJlbnRFdmVudCk7XG5cdH1cblxuXHRzZWxmLmRvVGltaW5nID0gZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdGlmICghc2VsZi5zdGFydFRpbWUpIHtcblx0XHRcdHNlbGYuc3RhcnRUaW1lID0gdGltZXN0YW1wO1xuXHRcdH0gZWxzZSBpZiAoc2VsZi5qdXN0VW5wYXVzZWQpIHtcblx0XHRcdC8vIEFkZCB0aGUgYW1vdW50IHdlIHBhdXNlZCB0byB0aGUgc3RhcnQgdGltZSB0byBnZXQgdGhlIHJpZ2h0IHBsYWNlLlxuXHRcdFx0dmFyIHRpbWVQYXVzZWQgPSAodGltZXN0YW1wIC0gc2VsZi5wYXVzZWRUaW1lKTtcblx0XHRcdHNlbGYuc3RhcnRUaW1lICs9IHRpbWVQYXVzZWQ7XG5cdFx0fVxuXHRcdHNlbGYuanVzdFVucGF1c2VkID0gZmFsc2U7XG5cblx0XHRpZiAoc2VsZi5qdXN0U2Vla2VkKSB7XG5cdFx0XHRzZXRDdXJyZW50TG9jYXRpb24odGltZXN0YW1wKTtcblx0XHRcdHNlbGYuanVzdFNlZWtlZCA9IGZhbHNlO1xuXHRcdH1cblx0XHRpZiAoc2VsZi5pc1BhdXNlZCkge1xuXHRcdFx0c2VsZi5wYXVzZWRUaW1lID0gdGltZXN0YW1wO1xuXHRcdH0gZWxzZSBpZiAoc2VsZi5pc1J1bm5pbmcpIHtcblx0XHRcdHZhciBjdXJyZW50VGltZSA9IHRpbWVzdGFtcCAtIHNlbGYuc3RhcnRUaW1lO1xuXHRcdFx0Y3VycmVudFRpbWUgKz0gNTA7IC8vIEFkZCBhIGxpdHRsZSBzbG9wIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpc24ndCBjYWxsZWQgZXhhY3RseS5cblx0XHRcdHdoaWxlIChzZWxmLm5vdGVUaW1pbmdzLmxlbmd0aCA+IHNlbGYuY3VycmVudEV2ZW50ICYmIHNlbGYubm90ZVRpbWluZ3Nbc2VsZi5jdXJyZW50RXZlbnRdLm1pbGxpc2Vjb25kcyA8IGN1cnJlbnRUaW1lKSB7XG5cdFx0XHRcdGlmIChzZWxmLmV2ZW50Q2FsbGJhY2sgJiYgc2VsZi5ub3RlVGltaW5nc1tzZWxmLmN1cnJlbnRFdmVudF0udHlwZSA9PT0gJ2V2ZW50Jylcblx0XHRcdFx0XHRzZWxmLmV2ZW50Q2FsbGJhY2soc2VsZi5ub3RlVGltaW5nc1tzZWxmLmN1cnJlbnRFdmVudF0pO1xuXHRcdFx0XHRzZWxmLmN1cnJlbnRFdmVudCsrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRUaW1lIDwgc2VsZi5sYXN0TW9tZW50KSB7XG5cdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShzZWxmLmRvVGltaW5nKTtcblx0XHRcdFx0aWYgKHNlbGYuY3VycmVudEJlYXQgKiBzZWxmLm1pbGxpc2Vjb25kc1BlckJlYXQgPCBjdXJyZW50VGltZSkge1xuXHRcdFx0XHRcdGlmIChzZWxmLmJlYXRDYWxsYmFjaylcblx0XHRcdFx0XHRcdHNlbGYuYmVhdENhbGxiYWNrKHNlbGYuY3VycmVudEJlYXQgLyBzZWxmLmJlYXRTdWJkaXZpc2lvbnMsIHNlbGYudG90YWxCZWF0cyAvIHNlbGYuYmVhdFN1YmRpdmlzaW9ucywgc2VsZi5sYXN0TW9tZW50KTtcblx0XHRcdFx0XHRzZWxmLmN1cnJlbnRCZWF0Kys7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoc2VsZi5jdXJyZW50QmVhdCA8PSBzZWxmLnRvdGFsQmVhdHMpIHtcblx0XHRcdFx0Ly8gQmVjYXVzZSBvZiB0aW1pbmcgaXNzdWVzIChmb3IgaW5zdGFuY2UsIGlmIHRoZSBicm93c2VyIHRhYiBpc24ndCBhY3RpdmUpLCB0aGUgYmVhdCBjYWxsYmFja3MgbWlnaHQgbm90IGhhdmUgaGFwcGVuZWQgd2hlbiB0aGV5IGFyZSBzdXBwb3NlZCB0by4gVG8ga2VlcCB0aGUgY2xpZW50IHByb2dyYW1zIGZyb20gaGF2aW5nIHRvIGRlYWwgd2l0aCB0aGF0LCB0aGlzIHdpbGwga2VlcCBjYWxsaW5nIHRoZSBsb29wIHVudGlsIGFsbCBvZiB0aGVtIGhhdmUgYmVlbiBzZW50LlxuXHRcdFx0XHRpZiAoc2VsZi5iZWF0Q2FsbGJhY2spIHtcblx0XHRcdFx0XHRzZWxmLmJlYXRDYWxsYmFjayhzZWxmLmN1cnJlbnRCZWF0IC8gc2VsZi5iZWF0U3ViZGl2aXNpb25zLCBzZWxmLnRvdGFsQmVhdHMgLyBzZWxmLmJlYXRTdWJkaXZpc2lvbnMsIHNlbGYubGFzdE1vbWVudCk7XG5cdFx0XHRcdFx0c2VsZi5jdXJyZW50QmVhdCsrO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShzZWxmLmRvVGltaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc2VsZi5saW5lRW5kQ2FsbGJhY2sgJiYgc2VsZi5saW5lRW5kVGltaW5ncy5sZW5ndGggJiYgc2VsZi5saW5lRW5kVGltaW5nc1swXS5taWxsaXNlY29uZHMgPD0gY3VycmVudFRpbWUpIHtcblx0XHRcdFx0c2VsZi5saW5lRW5kQ2FsbGJhY2soc2VsZi5saW5lRW5kVGltaW5nc1swXSk7XG5cdFx0XHRcdHNlbGYubGluZUVuZFRpbWluZ3Muc2hpZnQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1cnJlbnRUaW1lID49IHNlbGYubGFzdE1vbWVudCAmJiBzZWxmLmV2ZW50Q2FsbGJhY2spXG5cdFx0XHRcdHNlbGYuZXZlbnRDYWxsYmFjayhudWxsKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRcdHNlbGYuaXNSdW5uaW5nID0gdHJ1ZTtcblx0XHRpZiAoc2VsZi5pc1BhdXNlZCkge1xuXHRcdFx0c2VsZi5pc1BhdXNlZCA9IGZhbHNlO1xuXHRcdFx0c2VsZi5qdXN0VW5wYXVzZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc2VsZi5kb1RpbWluZyk7XG5cdH07XG5cdHNlbGYucGF1c2UgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLmlzUGF1c2VkID0gdHJ1ZTtcblx0XHRzZWxmLmlzUnVubmluZyA9IGZhbHNlO1xuXHR9O1xuXHRzZWxmLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0c2VsZi5jdXJyZW50QmVhdCA9IDA7XG5cdFx0c2VsZi5jdXJyZW50RXZlbnQgPSAwO1xuXHRcdHNlbGYuc3RhcnRUaW1lID0gbnVsbDtcblx0XHRzZWxmLnBhdXNlZFRpbWUgPSBudWxsO1xuXHRcdGlmIChzZWxmLmxpbmVFbmRDYWxsYmFjaykge1xuXHRcdFx0c2VsZi5saW5lRW5kVGltaW5ncyA9IGdldExpbmVFbmRUaW1pbmdzKHNlbGYubm90ZVRpbWluZ3MsIHNlbGYubGluZUVuZEFudGljaXBhdGlvbik7XG5cdFx0fVxuXHR9O1xuXHRzZWxmLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLnBhdXNlKCk7XG5cdFx0c2VsZi5yZXNldCgpO1xuXHR9O1xuXHRzZWxmLnNldFByb2dyZXNzID0gZnVuY3Rpb24ocGVyY2VudCkge1xuXHRcdC8vIHRoaXMgaXMgcGFzc2VkIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLlxuXHRcdC8vIHRoZSBlZmZlY3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBtb3ZlIHN0YXJ0VGltZSBzbyB0aGF0IHRoZSBjYWxsYmFja3MgaGFwcGVuIGNvcnJlY3RseSBmb3IgdGhlIG5ldyBzZWVrLlxuXHRcdGlmIChwZXJjZW50IDwgMCkgcGVyY2VudCA9IDA7XG5cdFx0aWYgKHBlcmNlbnQgPiAxKSBwZXJjZW50ID0gMTtcblxuXHRcdHNlbGYubmV3U2Vla1BlcmNlbnQgPSBwZXJjZW50O1xuXHRcdHNlbGYuanVzdFNlZWtlZCA9IHRydWU7XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHNlbGYuZG9UaW1pbmcpO1xuXHR9O1xufTtcblxuZnVuY3Rpb24gZ2V0TGluZUVuZFRpbWluZ3ModGltaW5ncywgYW50aWNpcGF0aW9uKSB7XG5cdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgbWlsbGlzZWNvbmRzIHRvIGNhbGwgdGhlIGxpbmVFbmRDYWxsYmFjay5cblx0Ly8gVGhpcyBmaWd1cmVzIG91dCB0aGUgdGltaW5nIG9mIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGFuZCBzdWJ0cmFjdHMgdGhlIGFudGljaXBhdGlvbiBmcm9tIGl0LlxuXHR2YXIgY2FsbGJhY2tUaW1lcyA9IFtdO1xuXHR2YXIgbGFzdFRvcCA9IG51bGw7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGltaW5ncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0aW1pbmcgPSB0aW1pbmdzW2ldO1xuXHRcdGlmICh0aW1pbmcudG9wICE9PSBsYXN0VG9wKSB7XG5cdFx0XHRjYWxsYmFja1RpbWVzLnB1c2goeyBtaWxsaXNlY29uZHM6IHRpbWluZy5taWxsaXNlY29uZHMgLSBhbnRpY2lwYXRpb24sIHRvcDogdGltaW5nLnRvcCwgYm90dG9tOiB0aW1pbmcudG9wK3RpbWluZy5oZWlnaHQgfSk7XG5cdFx0XHRsYXN0VG9wID0gdGltaW5nLnRvcDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNhbGxiYWNrVGltZXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGltaW5nQ2FsbGJhY2tzO1xuXG4iLCIvLyAgICBhYmNfYW5pbWF0aW9uLmpzOiBoYW5kbGVzIGFuaW1hdGluZyB0aGUgbXVzaWMgaW4gcmVhbCB0aW1lLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuLi93cml0ZS9hYmNfc3BhY2luZycpO1xudmFyIHBhcnNlQ29tbW9uID0gcmVxdWlyZSgnLi4vcGFyc2UvYWJjX2NvbW1vbicpO1xudmFyIFRpbWluZ0NhbGxiYWNrcyA9IHJlcXVpcmUoJy4vYWJjX3RpbWluZ19jYWxsYmFja3MnKTtcblxudmFyIGFuaW1hdGlvbiA9IHt9O1xuXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciB0aW1lcjtcblx0dmFyIGN1cnNvcjtcblx0YW5pbWF0aW9uLnN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24ocGFwZXIsIHR1bmUsIG9wdGlvbnMpIHtcblx0XHQvL29wdGlvbnMuYnBtXG5cdFx0Ly9vcHRpb25zLnNob3dDdXJzb3Jcblx0XHQvL29wdGlvbnMuaGlkZUN1cnJlbnRNZWFzdXJlXG5cdFx0Ly9vcHRpb25zLmhpZGVGaW5pc2hlZE1lYXN1cmVzXG5cdFx0aWYgKHRpbWVyKSB7XG5cdFx0XHR0aW1lci5zdG9wKCk7XG5cdFx0XHR0aW1lciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucy5zaG93Q3Vyc29yKSB7XG5cdFx0XHRjdXJzb3IgPSBwYXBlci5xdWVyeVNlbGVjdG9yKCcuYWJjanMtY3Vyc29yJyk7XG5cdFx0XHRpZiAoIWN1cnNvcikge1xuXHRcdFx0XHRjdXJzb3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcblx0XHRcdFx0Y3Vyc29yLmNsYXNzTmFtZSA9ICdhYmNqcy1jdXJzb3IgY3Vyc29yJztcblx0XHRcdFx0Y3Vyc29yLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcblxuXHRcdFx0XHRwYXBlci5hcHBlbmRDaGlsZChjdXJzb3IpO1xuXHRcdFx0XHRwYXBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gaGlkZU1lYXN1cmVzKGVsZW1lbnRzKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBlbGVtZW50ID0gZWxlbWVudHNbaV07XG5cdFx0XHRcdGlmICghZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2FiY2pzLWJhcicpKVxuXHRcdFx0XHRcdGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBsYXN0TWVhc3VyZTtcblx0XHRmdW5jdGlvbiBkaXNhcHBlYXJNZWFzdXJlc0FmdGVyKHNlbGVjdG9yKSB7XG5cdFx0XHRpZiAobGFzdE1lYXN1cmUpIHtcblx0XHRcdFx0dmFyIGVsZW1lbnRzID0gcGFwZXIucXVlcnlTZWxlY3RvckFsbChsYXN0TWVhc3VyZSk7XG5cdFx0XHRcdGhpZGVNZWFzdXJlcyhlbGVtZW50cyk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0TWVhc3VyZSA9IHNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRpc2FwcGVhck1lYXN1cmVzQmVmb3JlKHNlbGVjdG9yKSB7XG5cdFx0XHR2YXIgZWxlbWVudHMgPSBwYXBlci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0XHRcdGhpZGVNZWFzdXJlcyhlbGVtZW50cyk7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gbWVhc3VyZUNhbGxiYWNrKHNlbGVjdG9yKSB7XG5cdFx0XHRpZiAob3B0aW9ucy5oaWRlQ3VycmVudE1lYXN1cmUpIHtcblx0XHRcdFx0ZGlzYXBwZWFyTWVhc3VyZXNCZWZvcmUoc2VsZWN0b3IpO1xuXHRcdFx0fSBlbHNlIGlmIChvcHRpb25zLmhpZGVGaW5pc2hlZE1lYXN1cmVzKSB7XG5cdFx0XHRcdGRpc2FwcGVhck1lYXN1cmVzQWZ0ZXIoc2VsZWN0b3IpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldExpbmVBbmRNZWFzdXJlKGVsZW1lbnQpIHtcblx0XHRcdHJldHVybiAnLmFiY2pzLWwnICsgZWxlbWVudC5saW5lICsgJy5hYmNqcy1tJyArIGVsZW1lbnQubWVhc3VyZU51bWJlcjtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzZXRDdXJzb3IocmFuZ2UpIHtcblx0XHRcdGlmIChyYW5nZSkge1xuXHRcdFx0XHRpZiAocmFuZ2UubWVhc3VyZVN0YXJ0KSB7XG5cdFx0XHRcdFx0dmFyIHNlbGVjdG9yID0gZ2V0TGluZUFuZE1lYXN1cmUocmFuZ2UpO1xuXHRcdFx0XHRcdGlmIChzZWxlY3Rvcilcblx0XHRcdFx0XHRcdG1lYXN1cmVDYWxsYmFjayhzZWxlY3Rvcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGN1cnNvcikge1xuXHRcdFx0XHRcdGN1cnNvci5zdHlsZS5sZWZ0ID0gcmFuZ2UubGVmdCArIFwicHhcIjtcblx0XHRcdFx0XHRjdXJzb3Iuc3R5bGUudG9wID0gcmFuZ2UudG9wICsgXCJweFwiO1xuXHRcdFx0XHRcdGN1cnNvci5zdHlsZS53aWR0aCA9IHJhbmdlLndpZHRoICsgXCJweFwiO1xuXHRcdFx0XHRcdGN1cnNvci5zdHlsZS5oZWlnaHQgPSByYW5nZS5oZWlnaHQgKyBcInB4XCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRpbWVyLnN0b3AoKTtcblx0XHRcdFx0dGltZXIgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGltZXIgPSBuZXcgVGltaW5nQ2FsbGJhY2tzKHR1bmUsIHtcblx0XHRcdHFwbTogb3B0aW9ucy5icG0sXG5cdFx0XHRldmVudENhbGxiYWNrOiBzZXRDdXJzb3Jcblx0XHR9KTtcblx0XHR0aW1lci5zdGFydCgpO1xuXHR9O1xuXG5cdGFuaW1hdGlvbi5wYXVzZUFuaW1hdGlvbiA9IGZ1bmN0aW9uKHBhdXNlKSB7XG5cdFx0aWYgKHRpbWVyKSB7XG5cdFx0XHRpZiAocGF1c2UpXG5cdFx0XHRcdHRpbWVyLnBhdXNlKCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdHRpbWVyLnN0YXJ0KCk7XG5cdFx0fVxuXHR9O1xuXG5cdGFuaW1hdGlvbi5zdG9wQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRpbWVyKSB7XG5cdFx0XHR0aW1lci5zdG9wKCk7XG5cdFx0XHR0aW1lciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH07XG5cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYW5pbWF0aW9uO1xuIiwiLypnbG9iYWwgd2luZG93ICovXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4vYWJjX2NvbW1vbicpO1xuXG52YXIgcGFyc2VEaXJlY3RpdmUgPSB7fTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0dmFyIHRva2VuaXplcjtcblx0dmFyIHdhcm47XG5cdHZhciBtdWx0aWxpbmVWYXJzO1xuXHR2YXIgdHVuZTtcblx0cGFyc2VEaXJlY3RpdmUuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKHRva2VuaXplcl8sIHdhcm5fLCBtdWx0aWxpbmVWYXJzXywgdHVuZV8pIHtcblx0XHR0b2tlbml6ZXIgPSB0b2tlbml6ZXJfO1xuXHRcdHdhcm4gPSB3YXJuXztcblx0XHRtdWx0aWxpbmVWYXJzID0gbXVsdGlsaW5lVmFyc187XG5cdFx0dHVuZSA9IHR1bmVfO1xuXHRcdGluaXRpYWxpemVGb250cygpO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGluaXRpYWxpemVGb250cygpIHtcblx0XHRtdWx0aWxpbmVWYXJzLmFubm90YXRpb25mb250ICA9IHsgZmFjZTogXCJIZWx2ZXRpY2FcIiwgc2l6ZTogMTIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5nY2hvcmRmb250ICA9IHsgZmFjZTogXCJIZWx2ZXRpY2FcIiwgc2l6ZTogMTIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5oaXN0b3J5Zm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5pbmZvZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTQsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5tZWFzdXJlZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTQsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy5wYXJ0c2ZvbnQgID0geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHNpemU6IDE1LCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdG11bHRpbGluZVZhcnMucmVwZWF0Zm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTMsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy50ZXh0Zm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0bXVsdGlsaW5lVmFycy50cmlwbGV0Zm9udCA9IHtmYWNlOiBcIlRpbWVzXCIsIHNpemU6IDExLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIn07XG5cdFx0bXVsdGlsaW5lVmFycy52b2NhbGZvbnQgID0geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHNpemU6IDEzLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRtdWx0aWxpbmVWYXJzLndvcmRzZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cblx0XHQvLyBUaGVzZSBmb250cyBhcmUgZ2xvYmFsIGZvciB0aGUgZW50aXJlIHR1bmUuXG5cdFx0dHVuZS5mb3JtYXR0aW5nLmNvbXBvc2VyZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTQsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnN1YnRpdGxlZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTYsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnRlbXBvZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTUsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdHR1bmUuZm9ybWF0dGluZy50aXRsZWZvbnQgID0geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHNpemU6IDIwLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5mb290ZXJmb250ICA9IHsgZmFjZTogXCJcXFwiVGltZXMgTmV3IFJvbWFuXFxcIlwiLCBzaXplOiAxMiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHR0dW5lLmZvcm1hdHRpbmcuaGVhZGVyZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnZvaWNlZm9udCAgPSB7IGZhY2U6IFwiXFxcIlRpbWVzIE5ldyBSb21hblxcXCJcIiwgc2l6ZTogMTMsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXG5cdFx0Ly8gdGhlc2UgYXJlIHRoZSBkZWZhdWx0IGZvbnRzIGZvciB0aGVzZSBlbGVtZW50IHR5cGVzLiBJbiB0aGUgcHJpbnRlciwgdGhlc2UgZm9udHMgbWlnaHQgY2hhbmdlIGFzIHRoZSB0dW5lIHByb2dyZXNzZXMuXG5cdFx0dHVuZS5mb3JtYXR0aW5nLmFubm90YXRpb25mb250ICA9IG11bHRpbGluZVZhcnMuYW5ub3RhdGlvbmZvbnQ7XG5cdFx0dHVuZS5mb3JtYXR0aW5nLmdjaG9yZGZvbnQgID0gbXVsdGlsaW5lVmFycy5nY2hvcmRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5oaXN0b3J5Zm9udCAgPSBtdWx0aWxpbmVWYXJzLmhpc3Rvcnlmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5pbmZvZm9udCAgPSBtdWx0aWxpbmVWYXJzLmluZm9mb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5tZWFzdXJlZm9udCAgPSBtdWx0aWxpbmVWYXJzLm1lYXN1cmVmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy5wYXJ0c2ZvbnQgID0gbXVsdGlsaW5lVmFycy5wYXJ0c2ZvbnQ7XG5cdFx0dHVuZS5mb3JtYXR0aW5nLnJlcGVhdGZvbnQgID0gbXVsdGlsaW5lVmFycy5yZXBlYXRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy50ZXh0Zm9udCAgPSBtdWx0aWxpbmVWYXJzLnRleHRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy50cmlwbGV0Zm9udCAgPSBtdWx0aWxpbmVWYXJzLnRyaXBsZXRmb250O1xuXHRcdHR1bmUuZm9ybWF0dGluZy52b2NhbGZvbnQgID0gbXVsdGlsaW5lVmFycy52b2NhbGZvbnQ7XG5cdFx0dHVuZS5mb3JtYXR0aW5nLndvcmRzZm9udCAgPSBtdWx0aWxpbmVWYXJzLndvcmRzZm9udDtcblx0fVxuXG5cdHZhciBmb250VHlwZUNhbkhhdmVCb3ggPSB7IGdjaG9yZGZvbnQ6IHRydWUsIG1lYXN1cmVmb250OiB0cnVlLCBwYXJ0c2ZvbnQ6IHRydWUgfTtcblxuXHR2YXIgZm9udFRyYW5zbGF0aW9uID0gZnVuY3Rpb24oZm9udEZhY2UpIHtcblx0XHQvLyBUaGlzIHRyYW5zbGF0ZXMgUG9zdHNjcmlwdCBmb250cyBmb3IgYSB3ZWIgYWx0ZXJuYXRpdmUuXG5cdFx0Ly8gTm90ZSB0aGF0IHRoZSBwb3N0c2NyaXB0IGZvbnRzIGNvbnRhaW4gaXRhbGljIGFuZCBib2xkIGluZm8gaW4gdGhlbSwgc28gd2hhdCBpcyByZXR1cm5lZCBpcyBhIGhhc2guXG5cblx0XHRzd2l0Y2ggKGZvbnRGYWNlKSB7XG5cdFx0XHRjYXNlIFwiQXJpYWwtSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQXJpYWxcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJBcmlhbC1Cb2xkXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQXJpYWxcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiQm9va21hbi1EZW1pXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQm9va21hbixzZXJpZlwiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJCb29rbWFuLURlbWlJdGFsaWNcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJCb29rbWFuLHNlcmlmXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkJvb2ttYW4tTGlnaHRcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJCb29rbWFuLHNlcmlmXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiQm9va21hbi1MaWdodEl0YWxpY1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIkJvb2ttYW4sc2VyaWZcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJDb3VyaWVyXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIkNvdXJpZXIgTmV3XFxcIlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkNvdXJpZXItT2JsaXF1ZVwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJDb3VyaWVyIE5ld1xcXCJcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJDb3VyaWVyLUJvbGRcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiQ291cmllciBOZXdcXFwiXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiQ291cmllciBOZXdcXFwiXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkF2YW50R2FyZGUtQm9va1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIkF2YW50R2FyZGUsQXJpYWxcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJBdmFudEdhcmRlLUJvb2tPYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiQXZhbnRHYXJkZSxBcmlhbFwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkF2YW50R2FyZGUtRGVtaVwiOlxuXHRcdFx0Y2FzZSBcIkF2YW50LUdhcmRlLURlbWlcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJBdmFudEdhcmRlLEFyaWFsXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkF2YW50R2FyZGUtRGVtaU9ibGlxdWVcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJBdmFudEdhcmRlLEFyaWFsXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkhlbHZldGljYS1PYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiSGVsdmV0aWNhXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLUJvbGRcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJIZWx2ZXRpY2FcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiSGVsdmV0aWNhXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkhlbHZldGljYS1OYXJyb3dcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiSGVsdmV0aWNhIE5hcnJvd1xcXCIsSGVsdmV0aWNhXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLU5hcnJvdy1PYmxpcXVlXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIkhlbHZldGljYSBOYXJyb3dcXFwiLEhlbHZldGljYVwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIkhlbHZldGljYS1OYXJyb3ctQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJIZWx2ZXRpY2EgTmFycm93XFxcIixIZWx2ZXRpY2FcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiSGVsdmV0aWNhLU5hcnJvdy1Cb2xkT2JsaXF1ZVwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJIZWx2ZXRpY2EgTmFycm93XFxcIixIZWx2ZXRpY2FcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiUGFsYXRpbm8tUm9tYW5cIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJQYWxhdGlub1wiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIlBhbGF0aW5vLUl0YWxpY1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlBhbGF0aW5vXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiUGFsYXRpbm8tQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlBhbGF0aW5vXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIlBhbGF0aW5vLUJvbGRJdGFsaWNcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJQYWxhdGlub1wiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJOZXdDZW50dXJ5U2NobGJrLVJvbWFuXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIk5ldyBDZW50dXJ5XFxcIixzZXJpZlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIk5ld0NlbnR1cnlTY2hsYmstSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIk5ldyBDZW50dXJ5XFxcIixzZXJpZlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIml0YWxpY1wiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIk5ld0NlbnR1cnlTY2hsYmstQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJOZXcgQ2VudHVyeVxcXCIsc2VyaWZcIiwgd2VpZ2h0OiBcImJvbGRcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiTmV3Q2VudHVyeVNjaGxiay1Cb2xkSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIk5ldyBDZW50dXJ5XFxcIixzZXJpZlwiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJUaW1lc1wiOlxuXHRcdFx0Y2FzZSBcIlRpbWVzLVJvbWFuXCI6XG5cdFx0XHRjYXNlIFwiVGltZXMtTmFycm93XCI6XG5cdFx0XHRjYXNlIFwiVGltZXMtQ291cmllclwiOlxuXHRcdFx0Y2FzZSBcIlRpbWVzLU5ldy1Sb21hblwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwibm9ybWFsXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiVGltZXMtSXRhbGljXCI6XG5cdFx0XHRjYXNlIFwiVGltZXMtSXRhbGljc1wiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHdlaWdodDogXCJub3JtYWxcIiwgc3R5bGU6IFwiaXRhbGljXCIsIGRlY29yYXRpb246IFwibm9uZVwiIH07XG5cdFx0XHRjYXNlIFwiVGltZXMtQm9sZFwiOlxuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBcIlxcXCJUaW1lcyBOZXcgUm9tYW5cXFwiXCIsIHdlaWdodDogXCJib2xkXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiB9O1xuXHRcdFx0Y2FzZSBcIlRpbWVzLUJvbGRJdGFsaWNcIjpcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiVGltZXMgTmV3IFJvbWFuXFxcIlwiLCB3ZWlnaHQ6IFwiYm9sZFwiLCBzdHlsZTogXCJpdGFsaWNcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGNhc2UgXCJaYXBmQ2hhbmNlcnktTWVkaXVtSXRhbGljXCI6XG5cdFx0XHRcdHJldHVybiB7IGZhY2U6IFwiXFxcIlphcGYgQ2hhbmNlcnlcXFwiLGN1cnNpdmUsc2VyaWZcIiwgd2VpZ2h0OiBcIm5vcm1hbFwiLCBzdHlsZTogXCJub3JtYWxcIiwgZGVjb3JhdGlvbjogXCJub25lXCIgfTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgZ2V0Rm9udFBhcmFtZXRlciA9IGZ1bmN0aW9uKHRva2VucywgY3VycmVudFNldHRpbmcsIHN0ciwgcG9zaXRpb24sIGNtZCkge1xuXHRcdC8vIEV2ZXJ5IGZvbnQgcGFyYW1ldGVyIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcblx0XHQvLyA8ZmFjZT4gPHV0Zjg+IDxzaXplPiA8bW9kaWZpZXJzPiA8Ym94PlxuXHRcdC8vIFdoZXJlOlxuXHRcdC8vIGZhY2U6IGVpdGhlciBhIHN0YW5kYXJkIHdlYiBmb250IG5hbWUsIG9yIGEgcG9zdHNjcmlwdCBmb250LCBlbnVtZXJhdGVkIGluIGZvbnRUcmFuc2xhdGlvbi4gVGhpcyBjb3VsZCBhbHNvIGJlIGFuICogb3IgYmUgbWlzc2luZyBpZiB0aGUgZmFjZSBzaG91bGRuJ3QgY2hhbmdlLlxuXHRcdC8vIHV0Zjg6IFRoaXMgaXMgb3B0aW9uYWwsIGFuZCBzcGVjaWZpZXMgdXRmOC4gVGhhdCdzIGFsbCB0aGF0IGlzIHN1cHBvcnRlZCBzbyB0aGUgZmllbGQgaXMganVzdCBzaWxlbnRseSBpZ25vcmVkLlxuXHRcdC8vIHNpemU6IFRoZSBzaXplLCBpbiBwaXhlbHMuIFRoaXMgbWF5IGJlIG9taXR0ZWQgaWYgdGhlIHNpemUgaXMgbm90IGNoYW5naW5nLlxuXHRcdC8vIG1vZGlmaWVyczogemVybyBvciBtb3JlIG9mIFwiYm9sZFwiLCBcIml0YWxpY1wiLCBcInVuZGVybGluZVwiXG5cdFx0Ly8gYm94OiBPbmx5IGFwcGxpZXMgdG8gdGhlIG1lYXN1cmUgbnVtYmVycywgZ2Nob3JkcywgYW5kIHRoZSBwYXJ0cy4gSWYgcHJlc2VudCwgdGhlbiBhIGJveCBpcyBkcmF3biBhcm91bmQgdGhlIGNoYXJhY3RlcnMuXG5cdFx0Ly8gSWYgZmFjZSBpcyBwcmVzZW50LCB0aGVuIGFsbCB0aGUgbW9kaWZpZXJzIGFyZSBjbGVhcmVkLiBJZiBmYWNlIGlzIGFic2VudCwgdGhlbiB0aGUgbW9kaWZpZXJzIGFyZSBpbGxlZ2FsLlxuXHRcdC8vIFRoZSBmYWNlIGNhbiBiZSBhIHNpbmdsZSB3b3JkLCBhIHNldCBvZiB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucywgb3IgYSBxdW90ZWQgc3RyaW5nLlxuXHRcdC8vXG5cdFx0Ly8gU28sIGluIHByYWN0aWNhbGl0eSwgdGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGZvbnQgZGVmaW5pdGlvbnM6IGEgbnVtYmVyIG9ubHksIGFuIGFzdGVyaXNrIGFuZCBhIG51bWJlciBvbmx5LCBvciB0aGUgZnVsbCBkZWZpbml0aW9uICh3aXRoIGFuIG9wdGlvbmFsIHNpemUpLlxuXHRcdGZ1bmN0aW9uIHByb2Nlc3NOdW1iZXJPbmx5KCkge1xuXHRcdFx0dmFyIHNpemUgPSBwYXJzZUludCh0b2tlbnNbMF0udG9rZW4pO1xuXHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRpZiAoIWN1cnJlbnRTZXR0aW5nKSB7XG5cdFx0XHRcdHdhcm4oXCJDYW4ndCBzZXQganVzdCB0aGUgc2l6ZSBvZiB0aGUgZm9udCBzaW5jZSB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogXCJcXFwiVGltZXMgTmV3IFJvbWFuXFxcIlwiLCB3ZWlnaHQ6IFwibm9ybWFsXCIsIHN0eWxlOiBcIm5vcm1hbFwiLCBkZWNvcmF0aW9uOiBcIm5vbmVcIiwgc2l6ZTogc2l6ZX07XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4geyBmYWNlOiBjdXJyZW50U2V0dGluZy5mYWNlLCB3ZWlnaHQ6IGN1cnJlbnRTZXR0aW5nLndlaWdodCwgc3R5bGU6IGN1cnJlbnRTZXR0aW5nLnN0eWxlLCBkZWNvcmF0aW9uOiBjdXJyZW50U2V0dGluZy5kZWNvcmF0aW9uLCBzaXplOiBzaXplfTtcblx0XHRcdH1cblx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAxICYmIHRva2Vuc1swXS50b2tlbiA9PT0gXCJib3hcIiAmJiBmb250VHlwZUNhbkhhdmVCb3hbY21kXSlcblx0XHRcdFx0cmV0dXJuIHsgZmFjZTogY3VycmVudFNldHRpbmcuZmFjZSwgd2VpZ2h0OiBjdXJyZW50U2V0dGluZy53ZWlnaHQsIHN0eWxlOiBjdXJyZW50U2V0dGluZy5zdHlsZSwgZGVjb3JhdGlvbjogY3VycmVudFNldHRpbmcuZGVjb3JhdGlvbiwgc2l6ZTogc2l6ZSwgYm94OiB0cnVlfTtcblx0XHRcdHdhcm4oXCJFeHRyYSBwYXJhbWV0ZXJzIGluIGZvbnQgZGVmaW5pdGlvbi5cIiwgc3RyLCBwb3NpdGlvbik7XG5cdFx0XHRyZXR1cm4geyBmYWNlOiBjdXJyZW50U2V0dGluZy5mYWNlLCB3ZWlnaHQ6IGN1cnJlbnRTZXR0aW5nLndlaWdodCwgc3R5bGU6IGN1cnJlbnRTZXR0aW5nLnN0eWxlLCBkZWNvcmF0aW9uOiBjdXJyZW50U2V0dGluZy5kZWNvcmF0aW9uLCBzaXplOiBzaXplfTtcblx0XHR9XG5cblx0XHQvLyBmb3JtYXQgMTogYXN0ZXJpc2sgYW5kIG51bWJlciBvbmx5XG5cdFx0aWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJyonKSB7XG5cdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdGlmICh0b2tlbnNbMF0udHlwZSA9PT0gJ251bWJlcicpXG5cdFx0XHRcdHJldHVybiBwcm9jZXNzTnVtYmVyT25seSgpO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmb250IHNpemUgbnVtYmVyIGFmdGVyICouXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGZvcm1hdCAyOiBudW1iZXIgb25seVxuXHRcdGlmICh0b2tlbnNbMF0udHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdHJldHVybiBwcm9jZXNzTnVtYmVyT25seSgpO1xuXHRcdH1cblxuXHRcdC8vIGZvcm1hdCAzOiB3aG9sZSBkZWZpbml0aW9uXG5cdFx0dmFyIGZhY2UgPSBbXTtcblx0XHR2YXIgc2l6ZTtcblx0XHR2YXIgd2VpZ2h0ID0gXCJub3JtYWxcIjtcblx0XHR2YXIgc3R5bGUgPSBcIm5vcm1hbFwiO1xuXHRcdHZhciBkZWNvcmF0aW9uID0gXCJub25lXCI7XG5cdFx0dmFyIGJveCA9IGZhbHNlO1xuXHRcdHZhciBzdGF0ZSA9ICdmYWNlJztcblx0XHR2YXIgaHlwaGVuTGFzdCA9IGZhbHNlO1xuXHRcdHdoaWxlICh0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgY3VyclRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHR2YXIgd29yZCA9IGN1cnJUb2tlbi50b2tlbi50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0c3dpdGNoIChzdGF0ZSkge1xuXHRcdFx0XHRjYXNlICdmYWNlJzpcblx0XHRcdFx0XHRpZiAoaHlwaGVuTGFzdCB8fCAod29yZCAhPT0gJ3V0ZicgJiYgY3VyclRva2VuLnR5cGUgIT09ICdudW1iZXInICYmIHdvcmQgIT09IFwiYm9sZFwiICYmIHdvcmQgIT09IFwiaXRhbGljXCIgJiYgd29yZCAhPT0gXCJ1bmRlcmxpbmVcIiAmJiB3b3JkICE9PSBcImJveFwiKSkge1xuXHRcdFx0XHRcdFx0aWYgKGZhY2UubGVuZ3RoID4gMCAmJiBjdXJyVG9rZW4udG9rZW4gPT09ICctJykge1xuXHRcdFx0XHRcdFx0XHRoeXBoZW5MYXN0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZmFjZVtmYWNlLmxlbmd0aC0xXSA9IGZhY2VbZmFjZS5sZW5ndGgtMV0gKyBjdXJyVG9rZW4udG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0aWYgKGh5cGhlbkxhc3QpIHtcblx0XHRcdFx0XHRcdFx0XHRoeXBoZW5MYXN0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0ZmFjZVtmYWNlLmxlbmd0aC0xXSA9IGZhY2VbZmFjZS5sZW5ndGgtMV0gKyBjdXJyVG9rZW4udG9rZW47XG5cdFx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGZhY2UucHVzaChjdXJyVG9rZW4udG9rZW4pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoY3VyclRva2VuLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChzaXplKSB7XG5cdFx0XHRcdFx0XHRcdFx0d2FybihcIkZvbnQgc2l6ZSBzcGVjaWZpZWQgdHdpY2UgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRzaXplID0gY3VyclRva2VuLnRva2VuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ21vZGlmaWVyJztcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAod29yZCA9PT0gXCJib2xkXCIpXG5cdFx0XHRcdFx0XHRcdHdlaWdodCA9IFwiYm9sZFwiO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAod29yZCA9PT0gXCJpdGFsaWNcIilcblx0XHRcdFx0XHRcdFx0c3R5bGUgPSBcIml0YWxpY1wiO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAod29yZCA9PT0gXCJ1bmRlcmxpbmVcIilcblx0XHRcdFx0XHRcdFx0ZGVjb3JhdGlvbiA9IFwidW5kZXJsaW5lXCI7XG5cdFx0XHRcdFx0XHRlbHNlIGlmICh3b3JkID09PSBcImJveFwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChmb250VHlwZUNhbkhhdmVCb3hbY21kXSlcblx0XHRcdFx0XHRcdFx0XHRib3ggPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0d2FybihcIlRoaXMgZm9udCBzdHlsZSBkb2Vzbid0IHN1cHBvcnQgXFxcImJveFxcXCJcIiwgc3RyLCBwb3NpdGlvbik7XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gXCJmaW5pc2hlZFwiO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh3b3JkID09PSBcInV0ZlwiKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJUb2tlbiA9IHRva2Vucy5zaGlmdCgpOyAvLyB0aGlzIGdldHMgcmlkIG9mIHRoZSBcIjhcIiBhZnRlciBcInV0ZlwiXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gXCJzaXplXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0d2FybihcIlVua25vd24gcGFyYW1ldGVyIFwiICsgY3VyclRva2VuLnRva2VuICsgXCIgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJzaXplXCI6XG5cdFx0XHRcdFx0aWYgKGN1cnJUb2tlbi50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdFx0aWYgKHNpemUpIHtcblx0XHRcdFx0XHRcdFx0d2FybihcIkZvbnQgc2l6ZSBzcGVjaWZpZWQgdHdpY2UgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHNpemUgPSBjdXJyVG9rZW4udG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmb250IHNpemUgaW4gZm9udCBkZWZpbml0aW9uLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdGUgPSAnbW9kaWZpZXInO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibW9kaWZpZXJcIjpcblx0XHRcdFx0XHRpZiAod29yZCA9PT0gXCJib2xkXCIpXG5cdFx0XHRcdFx0XHR3ZWlnaHQgPSBcImJvbGRcIjtcblx0XHRcdFx0XHRlbHNlIGlmICh3b3JkID09PSBcIml0YWxpY1wiKVxuXHRcdFx0XHRcdFx0c3R5bGUgPSBcIml0YWxpY1wiO1xuXHRcdFx0XHRcdGVsc2UgaWYgKHdvcmQgPT09IFwidW5kZXJsaW5lXCIpXG5cdFx0XHRcdFx0XHRkZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcblx0XHRcdFx0XHRlbHNlIGlmICh3b3JkID09PSBcImJveFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoZm9udFR5cGVDYW5IYXZlQm94W2NtZF0pXG5cdFx0XHRcdFx0XHRcdGJveCA9IHRydWU7XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJUaGlzIGZvbnQgc3R5bGUgZG9lc24ndCBzdXBwb3J0IFxcXCJib3hcXFwiXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0XHRcdFx0c3RhdGUgPSBcImZpbmlzaGVkXCI7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHR3YXJuKFwiVW5rbm93biBwYXJhbWV0ZXIgXCIgKyBjdXJyVG9rZW4udG9rZW4gKyBcIiBpbiBmb250IGRlZmluaXRpb24uXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZmluaXNoZWRcIjpcblx0XHRcdFx0XHR3YXJuKFwiRXh0cmEgY2hhcmFjdGVycyBmb3VuZCBhZnRlciBcXFwiYm94XFxcIiBpbiBmb250IGRlZmluaXRpb24uXCIsIHN0ciwgcG9zaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzaXplID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghY3VycmVudFNldHRpbmcpIHtcblx0XHRcdFx0d2FybihcIk11c3Qgc3BlY2lmeSB0aGUgc2l6ZSBvZiB0aGUgZm9udCBzaW5jZSB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLlwiLCBzdHIsIHBvc2l0aW9uKTtcblx0XHRcdFx0c2l6ZSA9IDEyO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHNpemUgPSBjdXJyZW50U2V0dGluZy5zaXplO1xuXHRcdH0gZWxzZVxuXHRcdFx0c2l6ZSA9IHBhcnNlRmxvYXQoc2l6ZSk7XG5cblx0XHRmYWNlID0gZmFjZS5qb2luKCcgJyk7XG5cdFx0dmFyIHBzRm9udCA9IGZvbnRUcmFuc2xhdGlvbihmYWNlKTtcblx0XHR2YXIgZm9udCA9IHt9O1xuXHRcdGlmIChwc0ZvbnQpIHtcblx0XHRcdGZvbnQuZmFjZSA9IHBzRm9udC5mYWNlO1xuXHRcdFx0Zm9udC53ZWlnaHQgPSBwc0ZvbnQud2VpZ2h0O1xuXHRcdFx0Zm9udC5zdHlsZSA9IHBzRm9udC5zdHlsZTtcblx0XHRcdGZvbnQuZGVjb3JhdGlvbiA9IHBzRm9udC5kZWNvcmF0aW9uO1xuXHRcdFx0Zm9udC5zaXplID0gc2l6ZTtcblx0XHRcdGlmIChib3gpXG5cdFx0XHRcdGZvbnQuYm94ID0gdHJ1ZTtcblx0XHRcdHJldHVybiBmb250O1xuXHRcdH1cblx0XHRmb250LmZhY2UgPSBmYWNlO1xuXHRcdGZvbnQud2VpZ2h0ID0gd2VpZ2h0O1xuXHRcdGZvbnQuc3R5bGUgPSBzdHlsZTtcblx0XHRmb250LmRlY29yYXRpb24gPSBkZWNvcmF0aW9uO1xuXHRcdGZvbnQuc2l6ZSA9IHNpemU7XG5cdFx0aWYgKGJveClcblx0XHRcdGZvbnQuYm94ID0gdHJ1ZTtcblx0XHRyZXR1cm4gZm9udDtcblx0fTtcblxuXHR2YXIgZ2V0Q2hhbmdpbmdGb250ID0gZnVuY3Rpb24oY21kLCB0b2tlbnMsIHN0cikge1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIGZvbnQgYXMgYSBwYXJhbWV0ZXIuXCI7XG5cdFx0bXVsdGlsaW5lVmFyc1tjbWRdID0gZ2V0Rm9udFBhcmFtZXRlcih0b2tlbnMsIG11bHRpbGluZVZhcnNbY21kXSwgc3RyLCAwLCBjbWQpO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmlzX2luX2hlYWRlcikgLy8gSWYgdGhlIGZvbnQgYXBwZWFycyBpbiB0aGUgaGVhZGVyLCB0aGVuIGl0IGJlY29tZXMgdGhlIGRlZmF1bHQgZm9udC5cblx0XHRcdHR1bmUuZm9ybWF0dGluZ1tjbWRdID0gbXVsdGlsaW5lVmFyc1tjbWRdO1xuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXHR2YXIgZ2V0R2xvYmFsRm9udCA9IGZ1bmN0aW9uKGNtZCwgdG9rZW5zLCBzdHIpIHtcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgYSBmb250IGFzIGEgcGFyYW1ldGVyLlwiO1xuXHRcdHR1bmUuZm9ybWF0dGluZ1tjbWRdID0gZ2V0Rm9udFBhcmFtZXRlcih0b2tlbnMsIHR1bmUuZm9ybWF0dGluZ1tjbWRdLCBzdHIsIDAsIGNtZCk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0dmFyIHNldFNjYWxlID0gZnVuY3Rpb24oY21kLCB0b2tlbnMpIHtcblx0XHR2YXIgc2NyYXRjaCA9IFwiXCI7XG5cdFx0cGFyc2VDb21tb24uZWFjaCh0b2tlbnMsIGZ1bmN0aW9uKHRvaykge1xuXHRcdFx0c2NyYXRjaCArPSB0b2sudG9rZW47XG5cdFx0fSk7XG5cdFx0dmFyIG51bSA9IHBhcnNlRmxvYXQoc2NyYXRjaCk7XG5cdFx0aWYgKGlzTmFOKG51bSkgfHwgbnVtID09PSAwKVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIG51bWJlciBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHR0dW5lLmZvcm1hdHRpbmcuc2NhbGUgPSBudW07XG5cblx0fTtcblxuXHR2YXIgZ2V0UmVxdWlyZWRNZWFzdXJlbWVudCA9IGZ1bmN0aW9uKGNtZCwgdG9rZW5zKSB7XG5cdFx0dmFyIHBvaW50cyA9IHRva2VuaXplci5nZXRNZWFzdXJlbWVudCh0b2tlbnMpO1xuXHRcdGlmIChwb2ludHMudXNlZCA9PT0gMCB8fCB0b2tlbnMubGVuZ3RoICE9PSAwKVxuXHRcdFx0cmV0dXJuIHsgZXJyb3I6IFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIG1lYXN1cmVtZW50IGFzIGEgcGFyYW1ldGVyLlwifTtcblx0XHRyZXR1cm4gcG9pbnRzLnZhbHVlO1xuXHR9O1xuXHR2YXIgb25lUGFyYW1ldGVyTWVhc3VyZW1lbnQgPSBmdW5jdGlvbihjbWQsIHRva2Vucykge1xuXHRcdHZhciBwb2ludHMgPSB0b2tlbml6ZXIuZ2V0TWVhc3VyZW1lbnQodG9rZW5zKTtcblx0XHRpZiAocG9pbnRzLnVzZWQgPT09IDAgfHwgdG9rZW5zLmxlbmd0aCAhPT0gMClcblx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgYSBtZWFzdXJlbWVudCBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHR0dW5lLmZvcm1hdHRpbmdbY21kXSA9IHBvaW50cy52YWx1ZTtcblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHR2YXIgYWRkTXVsdGlsaW5lVmFyID0gZnVuY3Rpb24oa2V5LCBjbWQsIHRva2VucywgbWluLCBtYXgpIHtcblx0XHRpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSB8fCB0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpXG5cdFx0XHRyZXR1cm4gXCJEaXJlY3RpdmUgXFxcIlwiICsgY21kICsgXCJcXFwiIHJlcXVpcmVzIGEgbnVtYmVyIGFzIGEgcGFyYW1ldGVyLlwiO1xuXHRcdHZhciBpID0gdG9rZW5zWzBdLmludHQ7XG5cdFx0aWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIGkgPCBtaW4pXG5cdFx0XHRyZXR1cm4gXCJEaXJlY3RpdmUgXFxcIlwiICsgY21kICsgXCJcXFwiIHJlcXVpcmVzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIiArIG1pbiArIFwiIGFzIGEgcGFyYW1ldGVyLlwiO1xuXHRcdGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBpID4gbWF4KVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBhIG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gXCIgKyBtYXggKyBcIiBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHRtdWx0aWxpbmVWYXJzW2tleV0gPSBpO1xuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdHZhciBhZGRNdWx0aWxpbmVWYXJCb29sID0gZnVuY3Rpb24oa2V5LCBjbWQsIHRva2Vucykge1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAxICYmICh0b2tlbnNbMF0udG9rZW4gPT09ICd0cnVlJyB8fCB0b2tlbnNbMF0udG9rZW4gPT09ICdmYWxzZScpKSB7XG5cdFx0XHRtdWx0aWxpbmVWYXJzW2tleV0gPSB0b2tlbnNbMF0udG9rZW4gPT09ICd0cnVlJztcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0XHR2YXIgc3RyID0gYWRkTXVsdGlsaW5lVmFyKGtleSwgY21kLCB0b2tlbnMsIDAsIDEpO1xuXHRcdGlmIChzdHIgIT09IG51bGwpIHJldHVybiBzdHI7XG5cdFx0bXVsdGlsaW5lVmFyc1trZXldID0gKG11bHRpbGluZVZhcnNba2V5XSA9PT0gMSk7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0dmFyIGFkZE11bHRpbGluZVZhck9uZVBhcmFtQ2hvaWNlID0gZnVuY3Rpb24oa2V5LCBjbWQsIHRva2VucywgY2hvaWNlcykge1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoICE9PSAxKVxuXHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyBvbmUgb2YgWyBcIiArIGNob2ljZXMuam9pbihcIiwgXCIpICsgXCIgXSBhcyBhIHBhcmFtZXRlci5cIjtcblx0XHR2YXIgY2hvaWNlID0gdG9rZW5zWzBdLnRva2VuO1xuXHRcdHZhciBmb3VuZCA9IGZhbHNlO1xuXHRcdGZvciAodmFyIGkgPSAwOyAhZm91bmQgJiYgaSA8IGNob2ljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChjaG9pY2VzW2ldID09PSBjaG9pY2UpXG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKCFmb3VuZClcblx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgb25lIG9mIFsgXCIgKyBjaG9pY2VzLmpvaW4oXCIsIFwiKSArIFwiIF0gYXMgYSBwYXJhbWV0ZXIuXCI7XG5cdFx0bXVsdGlsaW5lVmFyc1trZXldID0gY2hvaWNlO1xuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdHZhciBtaWRpQ21kUGFyYW0wID0gW1xuXHRcdFwibm9iYXJsaW5lc1wiLFxuXHRcdFwiYmFybGluZXNcIixcblx0XHRcImJlYXRhY2NlbnRzXCIsXG5cdFx0XCJub2JlYXRhY2NlbnRzXCIsXG5cdFx0XCJkcm9uZW9uXCIsXG5cdFx0XCJkcm9uZW9mZlwiLFxuXHRcdFwiZHJ1bW9uXCIsXG5cdFx0XCJkcnVtb2ZmXCIsXG5cdFx0XCJmZXJtYXRhZml4ZWRcIixcblx0XHRcImZlcm1hdGFwcm9wb3J0aW9uYWxcIixcblx0XHRcImdjaG9yZG9uXCIsXG5cdFx0XCJnY2hvcmRvZmZcIixcblx0XHRcImNvbnRyb2xjb21ib1wiLFxuXHRcdFwidGVtcGVyYW1lbnRub3JtYWxcIixcblx0XHRcIm5vcG9ydGFtZW50b1wiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW0xU3RyaW5nID0gW1xuXHRcdFwiZ2Nob3JkXCIsXG5cdFx0XCJwdHN0cmVzc1wiLFxuXHRcdFwiYmVhdHN0cmluZ1wiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW0xSW50ZWdlciA9IFtcblx0XHRcImJhc3N2b2xcIixcblx0XHRcImNob3Jkdm9sXCIsXG5cdFx0XCJjXCIsXG5cdFx0XCJjaGFubmVsXCIsXG5cdFx0XCJiZWF0bW9kXCIsXG5cdFx0XCJkZWx0YWxvdWRuZXNzXCIsXG5cdFx0XCJkcnVtYmFyc1wiLFxuXHRcdFwiZ3JhY2VkaXZpZGVyXCIsXG5cdFx0XCJtYWtlY2hvcmRjaGFubmVsc1wiLFxuXHRcdFwicmFuZG9tY2hvcmRhdHRhY2tcIixcblx0XHRcImNob3JkYXR0YWNrXCIsXG5cdFx0XCJzdHJlc3Ntb2RlbFwiLFxuXHRcdFwidHJhbnNwb3NlXCIsXG5cdFx0XCJydHJhbnNwb3NlXCIsXG5cdFx0XCJ2b2xcIixcblx0XHRcInZvbGluY1wiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW0xSW50ZWdlcjFPcHRpb25hbEludGVnZXIgPSBbXG5cdFx0XCJwcm9ncmFtXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTJJbnRlZ2VyID0gW1xuXHRcdFwicmF0aW9cIixcblx0XHRcInNudFwiLFxuXHRcdFwiYmVuZHZlbG9jaXR5XCIsXG5cdFx0XCJwaXRjaGJlbmRcIixcblx0XHRcImNvbnRyb2xcIixcblx0XHRcInRlbXBlcmFtZW50bGluZWFyXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTRJbnRlZ2VyID0gW1xuXHRcdFwiYmVhdFwiXG5cdF07XG5cdHZhciBtaWRpQ21kUGFyYW01SW50ZWdlciA9IFtcblx0XHRcImRyb25lXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTFJbnRlZ2VyT3B0aW9uYWxPY3RhdmUgPSBbXG5cdFx0XCJiYXNzcHJvZ1wiLFxuXHRcdFwiY2hvcmRwcm9nXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTFTdHJpbmcxSW50ZWdlciA9IFtcblx0XHRcInBvcnRhbWVudG9cIlxuXHRdO1xuXHR2YXIgbWlkaUNtZFBhcmFtRnJhY3Rpb24gPSBbXG5cdFx0XCJleHBhbmRcIixcblx0XHRcImdyYWNlXCIsXG5cdFx0XCJ0cmltXCJcblx0XTtcblx0dmFyIG1pZGlDbWRQYXJhbTFTdHJpbmdWYXJpYWJsZUludGVnZXJzID0gW1xuXHRcdFwiZHJ1bVwiLFxuXHRcdFwiY2hvcmRuYW1lXCJcblx0XTtcblxuXHR2YXIgcGFyc2VNaWRpQ29tbWFuZCA9IGZ1bmN0aW9uKG1pZGksIHR1bmUsIHJlc3RPZlN0cmluZykge1xuXHRcdHZhciBtaWRpX2NtZCA9IG1pZGkuc2hpZnQoKS50b2tlbjtcblx0XHR2YXIgbWlkaV9wYXJhbXMgPSBbXTtcblx0XHRpZiAobWlkaUNtZFBhcmFtMC5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBOTyBQQVJBTUVURVJTXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDApXG5cdFx0XHRcdHdhcm4oXCJVbmV4cGVjdGVkIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0fSBlbHNlIGlmIChtaWRpQ21kUGFyYW0xU3RyaW5nLmluZGV4T2YobWlkaV9jbWQpID49IDApIHtcblx0XHRcdC8vIE9ORSBTVFJJTkcgUEFSQU1FVEVSXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDEpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzBdLnRva2VuKTtcblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFJbnRlZ2VyLmluZGV4T2YobWlkaV9jbWQpID49IDApIHtcblx0XHRcdC8vIE9ORSBJTlQgUEFSQU1FVEVSXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDEpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBpbnRlZ2VyIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVswXS5pbnR0KTtcblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFJbnRlZ2VyMU9wdGlvbmFsSW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBPTkUgSU5UIFBBUkFNRVRFUiwgT05FIE9QVElPTkFMIFBBUkFNRVRFUlxuXHRcdFx0aWYgKG1pZGkubGVuZ3RoICE9PSAxICYmIG1pZGkubGVuZ3RoICE9PSAyKVxuXHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgb25lIG9yIHR3byBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGkubGVuZ3RoID09PSAyICYmIG1pZGlbMV0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdGlmIChtaWRpLmxlbmd0aCA9PT0gMilcblx0XHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMV0uaW50dCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtaWRpQ21kUGFyYW0ySW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBUV08gSU5UIFBBUkFNRVRFUlNcblx0XHRcdGlmIChtaWRpLmxlbmd0aCAhPT0gMilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHR3byBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzFdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCB0d28gaW50ZWdlciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFTdHJpbmcxSW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBPTkUgU1RSSU5HIFBBUkFNRVRFUiwgT05FIElOVCBQQVJBTUVURVJcblx0XHRcdGlmIChtaWRpLmxlbmd0aCAhPT0gMilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHR3byBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJhbHBoYVwiIHx8IG1pZGlbMV0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBzdHJpbmcgYW5kIG9uZSBpbnRlZ2VyIHBhcmFtZXRlcnMgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVswXS50b2tlbik7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1pZGlfY21kID09PSAnZHJ1bW1hcCcpIHtcblx0XHRcdC8vIEJVSUxEIEFOIE9CSkVDVCBPRiBBQkMgTk9URSA9PiBNSURJIE5PVEVcblx0XHRcdGlmIChtaWRpLmxlbmd0aCA9PT0gMiAmJiBtaWRpWzBdLnR5cGUgPT09ICdhbHBoYScgJiYgbWlkaVsxXS50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRpZiAoIXR1bmUuZm9ybWF0dGluZykgdHVuZS5mb3JtYXR0aW5nID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkpIHR1bmUuZm9ybWF0dGluZy5taWRpID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCkgdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCA9IHt9O1xuXHRcdFx0XHR0dW5lLmZvcm1hdHRpbmcubWlkaS5kcnVtbWFwW21pZGlbMF0udG9rZW5dID0gbWlkaVsxXS5pbnR0O1xuXHRcdFx0XHRtaWRpX3BhcmFtcyA9IHR1bmUuZm9ybWF0dGluZy5taWRpLmRydW1tYXA7XG5cdFx0XHR9IGVsc2UgaWYgKG1pZGkubGVuZ3RoID09PSAzICYmIG1pZGlbMF0udHlwZSA9PT0gJ3B1bmN0JyAmJiBtaWRpWzFdLnR5cGUgPT09ICdhbHBoYScgJiYgbWlkaVsyXS50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRpZiAoIXR1bmUuZm9ybWF0dGluZykgdHVuZS5mb3JtYXR0aW5nID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkpIHR1bmUuZm9ybWF0dGluZy5taWRpID0ge307XG5cdFx0XHRcdGlmICghdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCkgdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcCA9IHt9O1xuXHRcdFx0XHR0dW5lLmZvcm1hdHRpbmcubWlkaS5kcnVtbWFwW21pZGlbMF0udG9rZW4rbWlkaVsxXS50b2tlbl0gPSBtaWRpWzJdLmludHQ7XG5cdFx0XHRcdG1pZGlfcGFyYW1zID0gdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgbm90ZSBuYW1lIGFuZCBvbmUgaW50ZWdlciBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWlkaUNtZFBhcmFtRnJhY3Rpb24uaW5kZXhPZihtaWRpX2NtZCkgPj0gMCkge1xuXHRcdFx0Ly8gT05FIEZSQUNUSU9OIFBBUkFNRVRFUlxuXHRcdFx0aWYgKG1pZGkubGVuZ3RoICE9PSAzKVxuXHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgZnJhY3Rpb24gcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzFdLnRva2VuICE9PSBcIi9cIiB8fCBtaWRpWzJdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmcmFjdGlvbiBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVswXS5pbnR0KTtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzJdLmludHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWlkaUNtZFBhcmFtNEludGVnZXIuaW5kZXhPZihtaWRpX2NtZCkgPj0gMCkge1xuXHRcdFx0Ly8gRk9VUiBJTlQgUEFSQU1FVEVSU1xuXHRcdFx0aWYgKG1pZGkubGVuZ3RoICE9PSA0KVxuXHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgZm91ciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2UgaWYgKG1pZGlbMF0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzFdLnR5cGUgIT09IFwibnVtYmVyXCIgfHwgbWlkaVsyXS50eXBlICE9PSBcIm51bWJlclwiIHx8IG1pZGlbM10udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGZvdXIgaW50ZWdlciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzJdLmludHQpO1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbM10uaW50dCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChtaWRpQ21kUGFyYW01SW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBGSVZFIElOVCBQQVJBTUVURVJTXG5cdFx0XHRpZiAobWlkaS5sZW5ndGggIT09IDUpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBmaXZlIHBhcmFtZXRlcnMgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSBpZiAobWlkaVswXS50eXBlICE9PSBcIm51bWJlclwiIHx8IG1pZGlbMV0udHlwZSAhPT0gXCJudW1iZXJcIiB8fCBtaWRpWzJdLnR5cGUgIT09IFwibnVtYmVyXCIgfHwgbWlkaVszXS50eXBlICE9PSBcIm51bWJlclwiIHx8IG1pZGlbNF0udHlwZSAhPT0gXCJudW1iZXJcIilcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGZpdmUgaW50ZWdlciBwYXJhbWV0ZXJzIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbMF0uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVsxXS5pbnR0KTtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzJdLmludHQpO1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKG1pZGlbM10uaW50dCk7XG5cdFx0XHRcdG1pZGlfcGFyYW1zLnB1c2gobWlkaVs0XS5pbnR0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKG1pZGlDbWRQYXJhbTFJbnRlZ2VyMU9wdGlvbmFsSW50ZWdlci5pbmRleE9mKG1pZGlfY21kKSA+PSAwKSB7XG5cdFx0XHQvLyBPTkUgSU5UIFBBUkFNRVRFUiwgT05FIE9QVElPTkFMIE9DVEFWRSBQQVJBTUVURVJcblx0XHRcdGlmIChtaWRpLmxlbmd0aCAhPT0gMSB8fCBtaWRpLmxlbmd0aCAhPT0gNClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvciB0d28gcGFyYW1ldGVycyBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRlbHNlIGlmIChtaWRpWzBdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBpbnRlZ2VyIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRlbHNlIGlmIChtaWRpLmxlbmd0aCA9PT0gNCkge1xuXHRcdFx0XHRpZiAobWlkaVsxXS50b2tlbiAhPT0gXCJvY3RhdmVcIilcblx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgb2N0YXZlIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRcdGlmIChtaWRpWzJdLnRva2VuICE9PSBcIj1cIilcblx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgb2N0YXZlIHBhcmFtZXRlciBpbiBNSURJIFwiICsgbWlkaV9jbWQsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRcdGlmIChtaWRpWzNdLnR5cGUgIT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGZvciBvY3RhdmUgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzBdLmludHQpO1xuXHRcdFx0XHRpZiAobWlkaS5sZW5ndGggPT09IDQpXG5cdFx0XHRcdFx0bWlkaV9wYXJhbXMucHVzaChtaWRpWzNdLmludHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAobWlkaUNtZFBhcmFtMVN0cmluZ1ZhcmlhYmxlSW50ZWdlcnMuaW5kZXhPZihtaWRpX2NtZCkgPj0gMCkge1xuXHRcdFx0Ly8gT05FIFNUUklORywgVkFSSUFCTEUgSU5UIFBBUkFNRVRFUlNcblx0XHRcdGlmIChtaWRpLmxlbmd0aCA8IDIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBzdHJpbmcgcGFyYW1ldGVyIGFuZCBhdCBsZWFzdCBvbmUgaW50ZWdlciBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSBpZiAobWlkaVswXS50eXBlICE9PSBcImFscGhhXCIpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBzdHJpbmcgcGFyYW1ldGVyIGFuZCBhdCBsZWFzdCBvbmUgaW50ZWdlciBwYXJhbWV0ZXIgaW4gTUlESSBcIiArIG1pZGlfY21kLCByZXN0T2ZTdHJpbmcsIDApO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciBwID0gbWlkaS5zaGlmdCgpO1xuXHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKHAudG9rZW4pO1xuXHRcdFx0XHR3aGlsZSAobWlkaS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0cCA9IG1pZGkuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAocC50eXBlICE9PSBcIm51bWJlclwiKVxuXHRcdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIGludGVnZXIgcGFyYW1ldGVyIGluIE1JREkgXCIgKyBtaWRpX2NtZCwgcmVzdE9mU3RyaW5nLCAwKTtcblx0XHRcdFx0XHRtaWRpX3BhcmFtcy5wdXNoKHAuaW50dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodHVuZS5oYXNCZWdpbk11c2ljKCkpXG5cdFx0XHR0dW5lLmFwcGVuZEVsZW1lbnQoJ21pZGknLCAtMSwgLTEsIHsgY21kOiBtaWRpX2NtZCwgcGFyYW1zOiBtaWRpX3BhcmFtcyB9KTtcblx0XHRlbHNlIHtcblx0XHRcdGlmICh0dW5lLmZvcm1hdHRpbmdbJ21pZGknXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHR0dW5lLmZvcm1hdHRpbmdbJ21pZGknXSA9IHt9O1xuXHRcdFx0dHVuZS5mb3JtYXR0aW5nWydtaWRpJ11bbWlkaV9jbWRdID0gbWlkaV9wYXJhbXM7XG5cdFx0fVxuXHR9O1xuXG5cdHBhcnNlRGlyZWN0aXZlLnBhcnNlRm9udENoYW5nZUxpbmUgPSBmdW5jdGlvbih0ZXh0c3RyKSB7XG5cdFx0dmFyIHRleHRQYXJ0cyA9IHRleHRzdHIuc3BsaXQoJyQnKTtcblx0XHRpZiAodGV4dFBhcnRzLmxlbmd0aCA+IDEgJiYgbXVsdGlsaW5lVmFycy5zZXRmb250KSB7XG5cdFx0XHR2YXIgdGV4dGFyciA9IFsgeyB0ZXh0OiB0ZXh0UGFydHNbMF0gfV07XG5cdFx0XHRmb3IgKHZhciBpID0gMTsgaSA8IHRleHRQYXJ0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodGV4dFBhcnRzW2ldLmNoYXJBdCgwKSA9PT0gJzAnKVxuXHRcdFx0XHRcdHRleHRhcnIucHVzaCh7IHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICcxJyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMV0pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMV0sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICcyJyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMl0pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbMl0sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICczJyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbM10pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbM10sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2UgaWYgKHRleHRQYXJ0c1tpXS5jaGFyQXQoMCkgPT09ICc0JyAmJiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbNF0pXG5cdFx0XHRcdFx0dGV4dGFyci5wdXNoKHtmb250OiBtdWx0aWxpbmVWYXJzLnNldGZvbnRbNF0sIHRleHQ6IHRleHRQYXJ0c1tpXS5zdWJzdHJpbmcoMSkgfSk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR0ZXh0YXJyW3RleHRhcnIubGVuZ3RoLTFdLnRleHQgKz0gJyQnICsgdGV4dFBhcnRzW2ldO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRleHRhcnIubGVuZ3RoID4gMSlcblx0XHRcdFx0cmV0dXJuIHRleHRhcnI7XG5cdFx0fVxuXHRcdHJldHVybiB0ZXh0c3RyO1xuXHR9O1xuXG5cdHZhciBwb3NpdGlvbkNob2ljZXMgPSBbICdhdXRvJywgJ2Fib3ZlJywgJ2JlbG93JywgJ2hpZGRlbicgXTtcblx0cGFyc2VEaXJlY3RpdmUuYWRkRGlyZWN0aXZlID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZShzdHIsIDAsIHN0ci5sZW5ndGgpO1x0Ly8gMyBvciBtb3JlICUgaW4gYSByb3csIG9yIGp1c3Qgc3BhY2VzIGFmdGVyICUlIGlzIGp1c3QgYSBjb21tZW50XG5cdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDAgfHwgdG9rZW5zWzBdLnR5cGUgIT09ICdhbHBoYScpIHJldHVybiBudWxsO1xuXHRcdHZhciByZXN0T2ZTdHJpbmcgPSBzdHIuc3Vic3RyaW5nKHN0ci5pbmRleE9mKHRva2Vuc1swXS50b2tlbikrdG9rZW5zWzBdLnRva2VuLmxlbmd0aCk7XG5cdFx0cmVzdE9mU3RyaW5nID0gdG9rZW5pemVyLnN0cmlwQ29tbWVudChyZXN0T2ZTdHJpbmcpO1xuXHRcdHZhciBjbWQgPSB0b2tlbnMuc2hpZnQoKS50b2tlbi50b0xvd2VyQ2FzZSgpO1xuXHRcdHZhciBzY3JhdGNoID0gXCJcIjtcblx0XHRzd2l0Y2ggKGNtZClcblx0XHR7XG5cdFx0XHQvLyBUaGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgd2VyZSBhZGRlZCB0byBhYmNfcGFyc2VyX2xpbnQsIGJ1dCBoYXZlbid0IGJlZW4gaW1wbGVtZW50ZWQgaGVyZS5cblx0XHRcdC8vIE1vc3Qgb2YgdGhlbSBhcmUgZGlyZWN0IHRyYW5zbGF0aW9ucyBmcm9tIHRoZSBkaXJlY3RpdmVzIHRoYXQgd2lsbCBiZSBwYXJzZWQgaW4uIFNlZSBhYmNtMnBzJ3MgZm9ybWF0LnR4dCBmb3IgaW5mbyBvbiBlYWNoIG9mIHRoZXNlLlxuXHRcdFx0Ly9cdFx0XHRcdFx0YWxpZ25iYXJzOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRhbGlnbmNvbXBvc2VyOiB7IHR5cGU6IFwic3RyaW5nXCIsIEVudW06IFsgJ2xlZnQnLCAnY2VudGVyJywncmlnaHQnIF0sIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRic3RlbWRvd246IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRjb250aW51ZWFsbDogeyB0eXBlOiBcImJvb2xlYW5cIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGR5bmFsaWduOiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0ZXhwcmFib3ZlOiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0ZXhwcmJlbG93OiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0Z2Nob3JkYm94OiB7IHR5cGU6IFwiYm9vbGVhblwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0Z3JhY2VzbHVyczogeyB0eXBlOiBcImJvb2xlYW5cIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGdyYWNlc3BhY2ViZWZvcmU6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGdyYWNlc3BhY2VpbnNpZGU6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdGdyYWNlc3BhY2VhZnRlcjogeyB0eXBlOiBcIm51bWJlclwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0aW5mb3NwYWNlOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRsaW5lc2tpcGZhYzogeyB0eXBlOiBcIm51bWJlclwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0bWF4c2hyaW5rOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRtYXhzdGFmZnNlcDogeyB0eXBlOiBcIm51bWJlclwiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Ly9cdFx0XHRcdFx0bWF4c3lzc3RhZmZzZXA6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdG5vdGVzcGFjaW5nZmFjdG9yOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRwYXJza2lwZmFjOiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzbHVyaGVpZ2h0OiB7IHR5cGU6IFwibnVtYmVyXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzcGxpdHR1bmU6IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzcXVhcmVicmV2ZTogeyB0eXBlOiBcImJvb2xlYW5cIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdHN0ZW1oZWlnaHQ6IHsgdHlwZTogXCJudW1iZXJcIiwgb3B0aW9uYWw6IHRydWUgfSxcblx0XHRcdC8vXHRcdFx0XHRcdHN0cmFpZ2h0ZmxhZ3M6IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHRzdHJldGNoc3RhZmY6IHsgdHlwZTogXCJib29sZWFuXCIsIG9wdGlvbmFsOiB0cnVlIH0sXG5cdFx0XHQvL1x0XHRcdFx0XHR0aXRsZWZvcm1hdDogeyB0eXBlOiBcInN0cmluZ1wiLCBvcHRpb25hbDogdHJ1ZSB9LFxuXHRcdFx0Y2FzZSBcImJhZ3BpcGVzXCI6dHVuZS5mb3JtYXR0aW5nLmJhZ3BpcGVzID0gdHJ1ZTticmVhaztcblx0XHRcdGNhc2UgXCJmbGF0YmVhbXNcIjp0dW5lLmZvcm1hdHRpbmcuZmxhdGJlYW1zID0gdHJ1ZTticmVhaztcblx0XHRcdGNhc2UgXCJsYW5kc2NhcGVcIjptdWx0aWxpbmVWYXJzLmxhbmRzY2FwZSA9IHRydWU7YnJlYWs7XG5cdFx0XHRjYXNlIFwicGFwZXJzaXplXCI6bXVsdGlsaW5lVmFycy5wYXBlcnNpemUgPSByZXN0T2ZTdHJpbmc7YnJlYWs7XG5cdFx0XHRjYXNlIFwic2x1cmdyYWNlc1wiOnR1bmUuZm9ybWF0dGluZy5zbHVyZ3JhY2VzID0gdHJ1ZTticmVhaztcblx0XHRcdGNhc2UgXCJzdHJldGNobGFzdFwiOnR1bmUuZm9ybWF0dGluZy5zdHJldGNobGFzdCA9IHRydWU7YnJlYWs7XG5cdFx0XHRjYXNlIFwidGl0bGVjYXBzXCI6bXVsdGlsaW5lVmFycy50aXRsZWNhcHMgPSB0cnVlO2JyZWFrO1xuXHRcdFx0Y2FzZSBcInRpdGxlbGVmdFwiOnR1bmUuZm9ybWF0dGluZy50aXRsZWxlZnQgPSB0cnVlO2JyZWFrO1xuXHRcdFx0Y2FzZSBcIm1lYXN1cmVib3hcIjp0dW5lLmZvcm1hdHRpbmcubWVhc3VyZWJveCA9IHRydWU7YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJ2b2NhbFwiOiByZXR1cm4gYWRkTXVsdGlsaW5lVmFyT25lUGFyYW1DaG9pY2UoXCJ2b2NhbFBvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXHRcdFx0Y2FzZSBcImR5bmFtaWNcIjogcmV0dXJuIGFkZE11bHRpbGluZVZhck9uZVBhcmFtQ2hvaWNlKFwiZHluYW1pY1Bvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXHRcdFx0Y2FzZSBcImdjaG9yZFwiOiByZXR1cm4gYWRkTXVsdGlsaW5lVmFyT25lUGFyYW1DaG9pY2UoXCJjaG9yZFBvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXHRcdFx0Y2FzZSBcIm9ybmFtZW50XCI6IHJldHVybiBhZGRNdWx0aWxpbmVWYXJPbmVQYXJhbUNob2ljZShcIm9ybmFtZW50UG9zaXRpb25cIiwgY21kLCB0b2tlbnMsIHBvc2l0aW9uQ2hvaWNlcyk7XG5cdFx0XHRjYXNlIFwidm9sdW1lXCI6IHJldHVybiBhZGRNdWx0aWxpbmVWYXJPbmVQYXJhbUNob2ljZShcInZvbHVtZVBvc2l0aW9uXCIsIGNtZCwgdG9rZW5zLCBwb3NpdGlvbkNob2ljZXMpO1xuXG5cdFx0XHRjYXNlIFwiYm90bWFyZ2luXCI6XG5cdFx0XHRjYXNlIFwiYm90c3BhY2VcIjpcblx0XHRcdGNhc2UgXCJjb21wb3NlcnNwYWNlXCI6XG5cdFx0XHRjYXNlIFwiaW5kZW50XCI6XG5cdFx0XHRjYXNlIFwibGVmdG1hcmdpblwiOlxuXHRcdFx0Y2FzZSBcImxpbmVzZXBcIjpcblx0XHRcdGNhc2UgXCJtdXNpY3NwYWNlXCI6XG5cdFx0XHRjYXNlIFwicGFydHNzcGFjZVwiOlxuXHRcdFx0Y2FzZSBcInBhZ2VoZWlnaHRcIjpcblx0XHRcdGNhc2UgXCJwYWdld2lkdGhcIjpcblx0XHRcdGNhc2UgXCJyaWdodG1hcmdpblwiOlxuXHRcdFx0Y2FzZSBcInN0YWZmc2VwXCI6XG5cdFx0XHRjYXNlIFwic3RhZmZ3aWR0aFwiOlxuXHRcdFx0Y2FzZSBcInN1YnRpdGxlc3BhY2VcIjpcblx0XHRcdGNhc2UgXCJzeXNzdGFmZnNlcFwiOlxuXHRcdFx0Y2FzZSBcInN5c3RlbXNlcFwiOlxuXHRcdFx0Y2FzZSBcInRleHRzcGFjZVwiOlxuXHRcdFx0Y2FzZSBcInRpdGxlc3BhY2VcIjpcblx0XHRcdGNhc2UgXCJ0b3BtYXJnaW5cIjpcblx0XHRcdGNhc2UgXCJ0b3BzcGFjZVwiOlxuXHRcdFx0Y2FzZSBcInZvY2Fsc3BhY2VcIjpcblx0XHRcdGNhc2UgXCJ3b3Jkc3NwYWNlXCI6XG5cdFx0XHRcdHJldHVybiBvbmVQYXJhbWV0ZXJNZWFzdXJlbWVudChjbWQsIHRva2Vucyk7XG5cdFx0XHRjYXNlIFwidm9pY2VzY2FsZVwiOlxuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSB8fCB0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpXG5cdFx0XHRcdFx0cmV0dXJuIFwidm9pY2VzY2FsZSByZXF1aXJlcyBvbmUgZmxvYXQgYXMgYSBwYXJhbWV0ZXJcIjtcblx0XHRcdFx0dmFyIHZvaWNlU2NhbGUgPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlKSB7XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NhbGUgPSB2b2ljZVNjYWxlLmZsb2F0dDtcblx0XHRcdFx0XHR0dW5lLmNoYW5nZVZvaWNlU2NhbGUobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NhbGUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSBcInZza2lwXCI6XG5cdFx0XHRcdHZhciB2c2tpcCA9IGdldFJlcXVpcmVkTWVhc3VyZW1lbnQoY21kLCB0b2tlbnMpO1xuXHRcdFx0XHRpZiAodnNraXAuZXJyb3IpXG5cdFx0XHRcdFx0cmV0dXJuIHZza2lwLmVycm9yO1xuXHRcdFx0XHR0dW5lLmFkZFNwYWNpbmcodnNraXApO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdGNhc2UgXCJzY2FsZVwiOlxuXHRcdFx0XHRzZXRTY2FsZShjbWQsIHRva2Vucyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlcFwiOlxuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHR0dW5lLmFkZFNlcGFyYXRvcigpO1xuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHR2YXIgcG9pbnRzID0gdG9rZW5pemVyLmdldE1lYXN1cmVtZW50KHRva2Vucyk7XG5cdFx0XHRcdFx0aWYgKHBvaW50cy51c2VkID09PSAwKVxuXHRcdFx0XHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIFxcXCJcIiArIGNtZCArIFwiXFxcIiByZXF1aXJlcyAzIG51bWJlcnM6IHNwYWNlIGFib3ZlLCBzcGFjZSBiZWxvdywgbGVuZ3RoIG9mIGxpbmVcIjtcblx0XHRcdFx0XHR2YXIgc3BhY2VBYm92ZSA9IHBvaW50cy52YWx1ZTtcblxuXHRcdFx0XHRcdHBvaW50cyA9IHRva2VuaXplci5nZXRNZWFzdXJlbWVudCh0b2tlbnMpO1xuXHRcdFx0XHRcdGlmIChwb2ludHMudXNlZCA9PT0gMClcblx0XHRcdFx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgMyBudW1iZXJzOiBzcGFjZSBhYm92ZSwgc3BhY2UgYmVsb3csIGxlbmd0aCBvZiBsaW5lXCI7XG5cdFx0XHRcdFx0dmFyIHNwYWNlQmVsb3cgPSBwb2ludHMudmFsdWU7XG5cblx0XHRcdFx0XHRwb2ludHMgPSB0b2tlbml6ZXIuZ2V0TWVhc3VyZW1lbnQodG9rZW5zKTtcblx0XHRcdFx0XHRpZiAocG9pbnRzLnVzZWQgPT09IDAgfHwgdG9rZW5zLmxlbmd0aCAhPT0gMClcblx0XHRcdFx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBcXFwiXCIgKyBjbWQgKyBcIlxcXCIgcmVxdWlyZXMgMyBudW1iZXJzOiBzcGFjZSBhYm92ZSwgc3BhY2UgYmVsb3csIGxlbmd0aCBvZiBsaW5lXCI7XG5cdFx0XHRcdFx0dmFyIGxlbkxpbmUgPSBwb2ludHMudmFsdWU7XG5cdFx0XHRcdFx0dHVuZS5hZGRTZXBhcmF0b3Ioc3BhY2VBYm92ZSwgc3BhY2VCZWxvdywgbGVuTGluZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYmFyc3BlcnN0YWZmXCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXIoJ2JhcnNwZXJzdGFmZicsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0aWYgKHNjcmF0Y2ggIT09IG51bGwpIHJldHVybiBzY3JhdGNoO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzdGFmZm5vbm90ZVwiOlxuXHRcdFx0XHQvLyBUaGUgc2Vuc2Ugb2YgdGhlIGJvb2xlYW4gaXMgb3Bwb3NpdGUgaGVyZS4gXCIwXCIgbWVhbnMgdHJ1ZS5cblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggIT09IDEpXG5cdFx0XHRcdFx0cmV0dXJuIFwiRGlyZWN0aXZlIHN0YWZmbm9ub3RlIHJlcXVpcmVzIG9uZSBwYXJhbWV0ZXI6IDAgb3IgMVwiO1xuXHRcdFx0XHRpZiAodG9rZW5zWzBdLnRva2VuID09PSAnMCcpXG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGFmZm5vbm90ZSA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJzEnKVxuXHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc3RhZmZub25vdGUgPSBmYWxzZTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJldHVybiBcIkRpcmVjdGl2ZSBzdGFmZm5vbm90ZSByZXF1aXJlcyBvbmUgcGFyYW1ldGVyOiAwIG9yIDEgKHJlY2VpdmVkIFwiICsgdG9rZW5zWzBdLnRva2VuICsgJyknO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJwcmludHRlbXBvXCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdwcmludFRlbXBvJywgY21kLCB0b2tlbnMpO1xuXHRcdFx0XHRpZiAoc2NyYXRjaCAhPT0gbnVsbCkgcmV0dXJuIHNjcmF0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInBhcnRzYm94XCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdwYXJ0c0JveCcsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0aWYgKHNjcmF0Y2ggIT09IG51bGwpIHJldHVybiBzY3JhdGNoO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLnBhcnRzZm9udC5ib3ggPSBtdWx0aWxpbmVWYXJzLnBhcnRzQm94O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJmcmVlZ2Nob3JkXCI6XG5cdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdmcmVlZ2Nob3JkJywgY21kLCB0b2tlbnMpO1xuXHRcdFx0XHRpZiAoc2NyYXRjaCAhPT0gbnVsbCkgcmV0dXJuIHNjcmF0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm1lYXN1cmVuYlwiOlxuXHRcdFx0Y2FzZSBcImJhcm51bWJlcnNcIjpcblx0XHRcdFx0c2NyYXRjaCA9IGFkZE11bHRpbGluZVZhcignYmFyTnVtYmVycycsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0aWYgKHNjcmF0Y2ggIT09IG51bGwpIHJldHVybiBzY3JhdGNoO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzZXRiYXJuYlwiOlxuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCAhPT0gMSB8fCB0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpIHtcblx0XHRcdFx0XHRyZXR1cm4gJ0RpcmVjdGl2ZSBzZXRiYXJuYiByZXF1aXJlcyBhIG51bWJlciBhcyBhIHBhcmFtZXRlci4nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuY3VyckJhck51bWJlciA9IHR1bmUuc2V0QmFyTnVtYmVySW1tZWRpYXRlKHRva2Vuc1swXS5pbnR0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYmVnaW50ZXh0XCI6XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuaW5UZXh0QmxvY2sgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjb250aW51ZWFsbFwiOlxuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmNvbnRpbnVlYWxsID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiYmVnaW5wc1wiOlxuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmluUHNCbG9jayA9IHRydWU7XG5cdFx0XHRcdHdhcm4oXCJQb3N0c2NyaXB0IGlnbm9yZWRcIiwgc3RyLCAwKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZGVjb1wiOlxuXHRcdFx0XHRpZiAocmVzdE9mU3RyaW5nLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pZ25vcmVkRGVjb3JhdGlvbnMucHVzaChyZXN0T2ZTdHJpbmcuc3Vic3RyaW5nKDAsIHJlc3RPZlN0cmluZy5pbmRleE9mKCcgJykpKTtcblx0XHRcdFx0d2FybihcIkRlY29yYXRpb24gcmVkZWZpbml0aW9uIGlnbm9yZWRcIiwgc3RyLCAwKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidGV4dFwiOlxuXHRcdFx0XHR2YXIgdGV4dHN0ciA9IHRva2VuaXplci50cmFuc2xhdGVTdHJpbmcocmVzdE9mU3RyaW5nKTtcblx0XHRcdFx0dHVuZS5hZGRUZXh0KHBhcnNlRGlyZWN0aXZlLnBhcnNlRm9udENoYW5nZUxpbmUodGV4dHN0cikpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJjZW50ZXJcIjpcblx0XHRcdFx0dmFyIGNlbnRlcnN0ciA9IHRva2VuaXplci50cmFuc2xhdGVTdHJpbmcocmVzdE9mU3RyaW5nKTtcblx0XHRcdFx0dHVuZS5hZGRDZW50ZXJlZChwYXJzZURpcmVjdGl2ZS5wYXJzZUZvbnRDaGFuZ2VMaW5lKGNlbnRlcnN0cikpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJmb250XCI6XG5cdFx0XHRcdC8vIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZm9yIHRoaXM7IGl0IGlzIGEgdXNlbGVzcyBkaXJlY3RpdmVcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2V0Zm9udFwiOlxuXHRcdFx0XHR2YXIgc2ZUb2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUocmVzdE9mU3RyaW5nLCAwLCByZXN0T2ZTdHJpbmcubGVuZ3RoKTtcbi8vXHRcdFx0XHR2YXIgc2ZEb25lID0gZmFsc2U7XG5cdFx0XHRcdGlmIChzZlRva2Vucy5sZW5ndGggPj0gNCkge1xuXHRcdFx0XHRcdGlmIChzZlRva2Vuc1swXS50b2tlbiA9PT0gJy0nICYmIHNmVG9rZW5zWzFdLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2ZOdW0gPSBwYXJzZUludChzZlRva2Vuc1sxXS50b2tlbik7XG5cdFx0XHRcdFx0XHRpZiAoc2ZOdW0gPj0gMSAmJiBzZk51bSA8PSA0KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghbXVsdGlsaW5lVmFycy5zZXRmb250KVxuXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc2V0Zm9udCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRzZlRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRzZlRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnNldGZvbnRbc2ZOdW1dID0gZ2V0Rm9udFBhcmFtZXRlcihzZlRva2VucywgbXVsdGlsaW5lVmFycy5zZXRmb250W3NmTnVtXSwgc3RyLCAwLCAnc2V0Zm9udCcpO1xuLy9cdFx0XHRcdFx0XHRcdHZhciBzZlNpemUgPSBzZlRva2Vucy5wb3AoKTtcbi8vXHRcdFx0XHRcdFx0XHRpZiAoc2ZTaXplLnR5cGUgPT09ICdudW1iZXInKSB7XG4vL1x0XHRcdFx0XHRcdFx0XHRzZlNpemUgPSBwYXJzZUludChzZlNpemUudG9rZW4pO1xuLy9cdFx0XHRcdFx0XHRcdFx0dmFyIHNmRm9udE5hbWUgPSAnJztcbi8vXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHNmaSA9IDI7IHNmaSA8IHNmVG9rZW5zLmxlbmd0aDsgc2ZpKyspXG4vL1x0XHRcdFx0XHRcdFx0XHRcdHNmRm9udE5hbWUgKz0gc2ZUb2tlbnNbc2ZpXS50b2tlbjtcbi8vXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc2V0Zm9udFtzZk51bV0gPSB7IGZhY2U6IHNmRm9udE5hbWUsIHNpemU6IHNmU2l6ZSB9O1xuLy9cdFx0XHRcdFx0XHRcdFx0c2ZEb25lID0gdHJ1ZTtcbi8vXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4vL1x0XHRcdFx0aWYgKCFzZkRvbmUpXG4vL1x0XHRcdFx0XHRyZXR1cm4gXCJCYWQgcGFyYW1ldGVyczogXCIgKyBjbWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImdjaG9yZGZvbnRcIjpcblx0XHRcdGNhc2UgXCJwYXJ0c2ZvbnRcIjpcblx0XHRcdGNhc2UgXCJ0cmlwbGV0Zm9udFwiOlxuXHRcdFx0Y2FzZSBcInZvY2FsZm9udFwiOlxuXHRcdFx0Y2FzZSBcInRleHRmb250XCI6XG5cdFx0XHRjYXNlIFwiYW5ub3RhdGlvbmZvbnRcIjpcblx0XHRcdGNhc2UgXCJoaXN0b3J5Zm9udFwiOlxuXHRcdFx0Y2FzZSBcImluZm9mb250XCI6XG5cdFx0XHRjYXNlIFwibWVhc3VyZWZvbnRcIjpcblx0XHRcdGNhc2UgXCJyZXBlYXRmb250XCI6XG5cdFx0XHRjYXNlIFwid29yZHNmb250XCI6XG5cdFx0XHRcdHJldHVybiBnZXRDaGFuZ2luZ0ZvbnQoY21kLCB0b2tlbnMsIHN0cik7XG5cdFx0XHRjYXNlIFwiY29tcG9zZXJmb250XCI6XG5cdFx0XHRjYXNlIFwic3VidGl0bGVmb250XCI6XG5cdFx0XHRjYXNlIFwidGVtcG9mb250XCI6XG5cdFx0XHRjYXNlIFwidGl0bGVmb250XCI6XG5cdFx0XHRjYXNlIFwidm9pY2Vmb250XCI6XG5cdFx0XHRjYXNlIFwiZm9vdGVyZm9udFwiOlxuXHRcdFx0Y2FzZSBcImhlYWRlcmZvbnRcIjpcblx0XHRcdFx0cmV0dXJuIGdldEdsb2JhbEZvbnQoY21kLCB0b2tlbnMsIHN0cik7XG5cdFx0XHRjYXNlIFwiYmFybGFiZWxmb250XCI6XG5cdFx0XHRjYXNlIFwiYmFybnVtYmVyZm9udFwiOlxuXHRcdFx0Y2FzZSBcImJhcm51bWZvbnRcIjpcblx0XHRcdFx0cmV0dXJuIGdldENoYW5naW5nRm9udChcIm1lYXN1cmVmb250XCIsIHRva2Vucywgc3RyKTtcblx0XHRcdGNhc2UgXCJzdGF2ZXNcIjpcblx0XHRcdGNhc2UgXCJzY29yZVwiOlxuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLnNjb3JlX2lzX3ByZXNlbnQgPSB0cnVlO1xuXHRcdFx0XHR2YXIgYWRkVm9pY2UgPSBmdW5jdGlvbihpZCwgbmV3U3RhZmYsIGJyYWNrZXQsIGJyYWNlLCBjb250aW51ZUJhcikge1xuXHRcdFx0XHRcdGlmIChuZXdTdGFmZiB8fCBtdWx0aWxpbmVWYXJzLnN0YXZlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuc3RhdmVzLnB1c2goe2luZGV4OiBtdWx0aWxpbmVWYXJzLnN0YXZlcy5sZW5ndGgsIG51bVZvaWNlczogMH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgc3RhZmYgPSBwYXJzZUNvbW1vbi5sYXN0KG11bHRpbGluZVZhcnMuc3RhdmVzKTtcblx0XHRcdFx0XHRpZiAoYnJhY2tldCAhPT0gdW5kZWZpbmVkKSBzdGFmZi5icmFja2V0ID0gYnJhY2tldDtcblx0XHRcdFx0XHRpZiAoYnJhY2UgIT09IHVuZGVmaW5lZCkgc3RhZmYuYnJhY2UgPSBicmFjZTtcblx0XHRcdFx0XHRpZiAoY29udGludWVCYXIpIHN0YWZmLmNvbm5lY3RCYXJMaW5lcyA9ICdlbmQnO1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy52b2ljZXNbaWRdID0ge3N0YWZmTnVtOiBzdGFmZi5pbmRleCwgaW5kZXg6IHN0YWZmLm51bVZvaWNlc307XG5cdFx0XHRcdFx0XHRzdGFmZi5udW1Wb2ljZXMrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dmFyIG9wZW5QYXJlbiA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgb3BlbkJyYWNrZXQgPSBmYWxzZTtcblx0XHRcdFx0dmFyIG9wZW5CcmFjZSA9IGZhbHNlO1xuXHRcdFx0XHR2YXIganVzdE9wZW5QYXJlbiA9IGZhbHNlO1xuXHRcdFx0XHR2YXIganVzdE9wZW5CcmFja2V0ID0gZmFsc2U7XG5cdFx0XHRcdHZhciBqdXN0T3BlbkJyYWNlID0gZmFsc2U7XG5cdFx0XHRcdHZhciBjb250aW51ZUJhciA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgbGFzdFZvaWNlO1xuXHRcdFx0XHR2YXIgYWRkQ29udGludWVCYXIgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRjb250aW51ZUJhciA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKGxhc3RWb2ljZSkge1xuXHRcdFx0XHRcdFx0dmFyIHR5ID0gJ3N0YXJ0Jztcblx0XHRcdFx0XHRcdGlmIChsYXN0Vm9pY2Uuc3RhZmZOdW0gPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLnN0YXZlc1tsYXN0Vm9pY2Uuc3RhZmZOdW0tMV0uY29ubmVjdEJhckxpbmVzID09PSAnc3RhcnQnIHx8XG5cdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGF2ZXNbbGFzdFZvaWNlLnN0YWZmTnVtLTFdLmNvbm5lY3RCYXJMaW5lcyA9PT0gJ2NvbnRpbnVlJylcblx0XHRcdFx0XHRcdFx0XHR0eSA9ICdjb250aW51ZSc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXZlc1tsYXN0Vm9pY2Uuc3RhZmZOdW1dLmNvbm5lY3RCYXJMaW5lcyA9IHR5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0d2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgdCA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdHN3aXRjaCAodC50b2tlbikge1xuXHRcdFx0XHRcdFx0Y2FzZSAnKCc6XG5cdFx0XHRcdFx0XHRcdGlmIChvcGVuUGFyZW4pIHdhcm4oXCJDYW4ndCBuZXN0IHBhcmVudGhlc2lzIGluICUlc2NvcmVcIiwgc3RyLCB0LnN0YXJ0KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSB7b3BlblBhcmVuID0gdHJ1ZTtqdXN0T3BlblBhcmVuID0gdHJ1ZTt9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnKSc6XG5cdFx0XHRcdFx0XHRcdGlmICghb3BlblBhcmVuIHx8IGp1c3RPcGVuUGFyZW4pIHdhcm4oXCJVbmV4cGVjdGVkIGNsb3NlIHBhcmVudGhlc2lzIGluICUlc2NvcmVcIiwgc3RyLCB0LnN0YXJ0KTtcblx0XHRcdFx0XHRcdFx0ZWxzZSBvcGVuUGFyZW4gPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdbJzpcblx0XHRcdFx0XHRcdFx0aWYgKG9wZW5CcmFja2V0KSB3YXJuKFwiQ2FuJ3QgbmVzdCBicmFja2V0cyBpbiAlJXNjb3JlXCIsIHN0ciwgdC5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGVsc2Uge29wZW5CcmFja2V0ID0gdHJ1ZTtqdXN0T3BlbkJyYWNrZXQgPSB0cnVlO31cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICddJzpcblx0XHRcdFx0XHRcdFx0aWYgKCFvcGVuQnJhY2tldCB8fCBqdXN0T3BlbkJyYWNrZXQpIHdhcm4oXCJVbmV4cGVjdGVkIGNsb3NlIGJyYWNrZXQgaW4gJSVzY29yZVwiLCBzdHIsIHQuc3RhcnQpO1xuXHRcdFx0XHRcdFx0XHRlbHNlIHtvcGVuQnJhY2tldCA9IGZhbHNlO211bHRpbGluZVZhcnMuc3RhdmVzW2xhc3RWb2ljZS5zdGFmZk51bV0uYnJhY2tldCA9ICdlbmQnO31cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICd7Jzpcblx0XHRcdFx0XHRcdFx0aWYgKG9wZW5CcmFjZSApIHdhcm4oXCJDYW4ndCBuZXN0IGJyYWNlcyBpbiAlJXNjb3JlXCIsIHN0ciwgdC5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGVsc2Uge29wZW5CcmFjZSA9IHRydWU7anVzdE9wZW5CcmFjZSA9IHRydWU7fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ30nOlxuXHRcdFx0XHRcdFx0XHRpZiAoIW9wZW5CcmFjZSB8fCBqdXN0T3BlbkJyYWNlKSB3YXJuKFwiVW5leHBlY3RlZCBjbG9zZSBicmFjZSBpbiAlJXNjb3JlXCIsIHN0ciwgdC5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGVsc2Uge29wZW5CcmFjZSA9IGZhbHNlO211bHRpbGluZVZhcnMuc3RhdmVzW2xhc3RWb2ljZS5zdGFmZk51bV0uYnJhY2UgPSAnZW5kJzt9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnfCc6XG5cdFx0XHRcdFx0XHRcdGFkZENvbnRpbnVlQmFyKCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0dmFyIHZjID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKHQudHlwZSA9PT0gJ2FscGhhJyB8fCB0LnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmMgKz0gdC50b2tlbjtcblx0XHRcdFx0XHRcdFx0XHRpZiAodC5jb250aW51ZUlkKVxuXHRcdFx0XHRcdFx0XHRcdFx0dCA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdTdGFmZiA9ICFvcGVuUGFyZW4gfHwganVzdE9wZW5QYXJlbjtcblx0XHRcdFx0XHRcdFx0dmFyIGJyYWNrZXQgPSBqdXN0T3BlbkJyYWNrZXQgPyAnc3RhcnQnIDogb3BlbkJyYWNrZXQgPyAnY29udGludWUnIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHR2YXIgYnJhY2UgPSBqdXN0T3BlbkJyYWNlID8gJ3N0YXJ0JyA6IG9wZW5CcmFjZSA/ICdjb250aW51ZScgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdGFkZFZvaWNlKHZjLCBuZXdTdGFmZiwgYnJhY2tldCwgYnJhY2UsIGNvbnRpbnVlQmFyKTtcblx0XHRcdFx0XHRcdFx0anVzdE9wZW5QYXJlbiA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRqdXN0T3BlbkJyYWNrZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0anVzdE9wZW5CcmFjZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZUJhciA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRsYXN0Vm9pY2UgPSBtdWx0aWxpbmVWYXJzLnZvaWNlc1t2Y107XG5cdFx0XHRcdFx0XHRcdGlmIChjbWQgPT09ICdzdGF2ZXMnKVxuXHRcdFx0XHRcdFx0XHRcdGFkZENvbnRpbnVlQmFyKCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIm5ld3BhZ2VcIjpcblx0XHRcdFx0dmFyIHBnTnVtID0gdG9rZW5pemVyLmdldEludChyZXN0T2ZTdHJpbmcpO1xuXHRcdFx0XHR0dW5lLmFkZE5ld1BhZ2UocGdOdW0uZGlnaXRzID09PSAwID8gLTEgOiBwZ051bS52YWx1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiYWJjXCI6XG5cdFx0XHRcdHZhciBhcnIgPSByZXN0T2ZTdHJpbmcuc3BsaXQoJyAnKTtcblx0XHRcdFx0c3dpdGNoIChhcnJbMF0pIHtcblx0XHRcdFx0XHRjYXNlIFwiLWNvcHlyaWdodFwiOlxuXHRcdFx0XHRcdGNhc2UgXCItY3JlYXRvclwiOlxuXHRcdFx0XHRcdGNhc2UgXCItZWRpdGVkLWJ5XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIi12ZXJzaW9uXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIi1jaGFyc2V0XCI6XG5cdFx0XHRcdFx0XHR2YXIgc3ViQ21kID0gYXJyLnNoaWZ0KCk7XG5cdFx0XHRcdFx0XHR0dW5lLmFkZE1ldGFUZXh0KGNtZCtzdWJDbWQsIGFyci5qb2luKCcgJykpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBcIlVua25vd24gZGlyZWN0aXZlOiBcIiArIGNtZCthcnJbMF07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiaGVhZGVyXCI6XG5cdFx0XHRjYXNlIFwiZm9vdGVyXCI6XG5cdFx0XHRcdHZhciBmb290ZXJTdHIgPSB0b2tlbml6ZXIuZ2V0TWVhdChyZXN0T2ZTdHJpbmcsIDAsIHJlc3RPZlN0cmluZy5sZW5ndGgpO1xuXHRcdFx0XHRmb290ZXJTdHIgPSByZXN0T2ZTdHJpbmcuc3Vic3RyaW5nKGZvb3RlclN0ci5zdGFydCwgZm9vdGVyU3RyLmVuZCk7XG5cdFx0XHRcdGlmIChmb290ZXJTdHIuY2hhckF0KDApID09PSAnXCInICYmIGZvb3RlclN0ci5jaGFyQXQoZm9vdGVyU3RyLmxlbmd0aC0xKSA9PT0gJ1wiJyApXG5cdFx0XHRcdFx0Zm9vdGVyU3RyID0gZm9vdGVyU3RyLnN1YnN0cmluZygxLCBmb290ZXJTdHIubGVuZ3RoLTEpO1xuXHRcdFx0XHR2YXIgZm9vdGVyQXJyID0gZm9vdGVyU3RyLnNwbGl0KCdcXHQnKTtcblx0XHRcdFx0dmFyIGZvb3RlciA9IHt9O1xuXHRcdFx0XHRpZiAoZm9vdGVyQXJyLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRmb290ZXIgPSB7IGxlZnQ6IFwiXCIsIGNlbnRlcjogZm9vdGVyQXJyWzBdLCByaWdodDogXCJcIiB9O1xuXHRcdFx0XHRlbHNlIGlmIChmb290ZXJBcnIubGVuZ3RoID09PSAyKVxuXHRcdFx0XHRcdGZvb3RlciA9IHsgbGVmdDogZm9vdGVyQXJyWzBdLCBjZW50ZXI6IGZvb3RlckFyclsxXSwgcmlnaHQ6IFwiXCIgfTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGZvb3RlciA9IHsgbGVmdDogZm9vdGVyQXJyWzBdLCBjZW50ZXI6IGZvb3RlckFyclsxXSwgcmlnaHQ6IGZvb3RlckFyclsyXSB9O1xuXHRcdFx0XHRpZiAoZm9vdGVyQXJyLmxlbmd0aCA+IDMpXG5cdFx0XHRcdFx0d2FybihcIlRvbyBtYW55IHRhYnMgaW4gXCIgKyBjbWQgKyBcIjogXCIgKyBmb290ZXJBcnIubGVuZ3RoICsgXCIgZm91bmQuXCIsIHJlc3RPZlN0cmluZywgMCk7XG5cblx0XHRcdFx0dHVuZS5hZGRNZXRhVGV4dE9iaihjbWQsIGZvb3Rlcik7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwibWlkaVwiOlxuXHRcdFx0XHR2YXIgbWlkaSA9IHRva2VuaXplci50b2tlbml6ZShyZXN0T2ZTdHJpbmcsIDAsIHJlc3RPZlN0cmluZy5sZW5ndGgsIHRydWUpO1xuXHRcdFx0XHRpZiAobWlkaS5sZW5ndGggPiAwICYmIG1pZGlbMF0udG9rZW4gPT09ICc9Jylcblx0XHRcdFx0XHRtaWRpLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChtaWRpLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgbWlkaSBjb21tYW5kXCIsIHJlc3RPZlN0cmluZywgMCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRwYXJzZU1pZGlDb21tYW5kKG1pZGksIHR1bmUsIHJlc3RPZlN0cmluZyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRjYXNlIFwicGVyY21hcFwiOlxuXHRcdFx0Y2FzZSBcInBsYXl0ZW1wb1wiOlxuXHRcdFx0Y2FzZSBcImF1cXVhbGl0eVwiOlxuXHRcdFx0Y2FzZSBcImNvbnRpbnVvdXNcIjpcblx0XHRcdGNhc2UgXCJub2JhcmNoZWNrXCI6XG5cdFx0XHRcdC8vIFRPRE8tUEVSOiBBY3R1YWxseSBoYW5kbGUgdGhlIHBhcmFtZXRlcnMgb2YgdGhlc2Vcblx0XHRcdFx0dHVuZS5mb3JtYXR0aW5nW2NtZF0gPSByZXN0T2ZTdHJpbmc7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiVW5rbm93biBkaXJlY3RpdmU6IFwiICsgY21kO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblx0cGFyc2VEaXJlY3RpdmUuZ2xvYmFsRm9ybWF0dGluZyA9IGZ1bmN0aW9uKGZvcm1hdEhhc2gpIHtcblx0XHRmb3IgKHZhciBjbWQgaW4gZm9ybWF0SGFzaCkge1xuXHRcdFx0aWYgKGZvcm1hdEhhc2guaGFzT3duUHJvcGVydHkoY21kKSkge1xuXHRcdFx0XHR2YXIgdmFsdWUgPSAnJytmb3JtYXRIYXNoW2NtZF07XG5cdFx0XHRcdHZhciB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUodmFsdWUsIDAsIHZhbHVlLmxlbmd0aCk7XG5cdFx0XHRcdHZhciBzY3JhdGNoO1xuXHRcdFx0XHRzd2l0Y2ggKGNtZCkge1xuXHRcdFx0XHRcdGNhc2UgXCJ0aXRsZWZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwiZ2Nob3JkZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJjb21wb3NlcmZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwiZm9vdGVyZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJoZWFkZXJmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcImhpc3Rvcnlmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcImluZm9mb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIm1lYXN1cmVmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInBhcnRzZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJyZXBlYXRmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInN1YnRpdGxlZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJ0ZW1wb2ZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwidGV4dGZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwidm9pY2Vmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInRyaXBsZXRmb250XCI6XG5cdFx0XHRcdFx0Y2FzZSBcInZvY2FsZm9udFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJ3b3Jkc2ZvbnRcIjpcblx0XHRcdFx0XHRjYXNlIFwiYW5ub3RhdGlvbmZvbnRcIjpcblx0XHRcdFx0XHRcdGdldENoYW5naW5nRm9udChjbWQsIHRva2VucywgdmFsdWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInNjYWxlXCI6XG5cdFx0XHRcdFx0XHRzZXRTY2FsZShjbWQsIHRva2Vucyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwicGFydHNib3hcIjpcblx0XHRcdFx0XHRcdHNjcmF0Y2ggPSBhZGRNdWx0aWxpbmVWYXJCb29sKCdwYXJ0c0JveCcsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0XHRcdGlmIChzY3JhdGNoICE9PSBudWxsKSB3YXJuKHNjcmF0Y2gpO1xuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5wYXJ0c2ZvbnQuYm94ID0gbXVsdGlsaW5lVmFycy5wYXJ0c0JveDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJmcmVlZ2Nob3JkXCI6XG5cdFx0XHRcdFx0XHRzY3JhdGNoID0gYWRkTXVsdGlsaW5lVmFyQm9vbCgnZnJlZWdjaG9yZCcsIGNtZCwgdG9rZW5zKTtcblx0XHRcdFx0XHRcdGlmIChzY3JhdGNoICE9PSBudWxsKSB3YXJuKHNjcmF0Y2gpO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHR3YXJuKFwiRm9ybWF0dGluZyBkaXJlY3RpdmUgdW5yZWNvZ25pemVkOiBcIiwgY21kLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VEaXJlY3RpdmU7XG4iLCIvLyAgICBhYmNfdHJhbnNwb3NlLmpzOiBIYW5kbGVzIHRoZSBhdXRvbWF0aWMgdHJhbnNwb3NpdGlvbiBvZiBrZXkgc2lnbmF0dXJlcywgY2hvcmQgc3ltYm9scywgYW5kIG5vdGVzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHRyYW5zcG9zZSA9IHt9O1xuXG52YXIga2V5SW5kZXggPSB7XG5cdCdDJzogMCxcblx0J0MjJzogMSxcblx0J0RiJzogMSxcblx0J0QnOiAyLFxuXHQnRCMnOiAzLFxuXHQnRWInOiAzLFxuXHQnRSc6IDQsXG5cdCdGJzogNSxcblx0J0YjJzogNixcblx0J0diJzogNixcblx0J0cnOiA3LFxuXHQnRyMnOiA4LFxuXHQnQWInOiA4LFxuXHQnQSc6IDksXG5cdCdBIyc6IDEwLFxuXHQnQmInOiAxMCxcblx0J0InOiAxMVxufTtcbnZhciBuZXdLZXkgPSBbJ0MnLCAnRGInLCAnRCcsICdFYicsICdFJywgJ0YnLCAnRiMnLCAnRycsICdBYicsICdBJywgJ0JiJywgJ0InXTtcbnZhciBuZXdLZXlNaW5vciA9IFsnQycsICdDIycsICdEJywgJ0QjJywgJ0UnLCAnRicsICdGIycsICdHJywgJ0cjJywgJ0EnLCAnQmInLCAnQiddO1xuXG50cmFuc3Bvc2Uua2V5U2lnbmF0dXJlID0gZnVuY3Rpb24obXVsdGlsaW5lVmFycywga2V5cywga2V5TmFtZSwgcm9vdCwgYWNjLCBsb2NhbFRyYW5zcG9zZSkge1xuXHRpZiAoIWxvY2FsVHJhbnNwb3NlKSBsb2NhbFRyYW5zcG9zZSA9IDA7XG5cdG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VWZXJ0aWNhbE1vdmVtZW50ID0gMDtcblx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVByZWZlckZsYXRzID0gZmFsc2U7XG5cdHZhciBrID0ga2V5c1trZXlOYW1lXTtcblx0aWYgKCFrKSByZXR1cm4gbXVsdGlsaW5lVmFycy5rZXk7IC8vIElmIHRoZSBrZXkgaXNuJ3QgaW4gdGhlIGxpc3QsIGl0IGlzIG5vbi1zdGFuZGFyZC4gV2Ugd29uJ3QgYXR0ZW1wdCB0byB0cmFuc3Bvc2UgaXQuXG5cdG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgPSAobXVsdGlsaW5lVmFycy5nbG9iYWxUcmFuc3Bvc2UgPyBtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZSA6IDApICsgbG9jYWxUcmFuc3Bvc2U7XG5cblx0aWYgKCFtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlKVxuXHRcdHJldHVybiB7IGFjY2lkZW50YWxzOiBrLCByb290OiByb290LCBhY2M6IGFjYyB9O1xuXHRtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZU9yaWdLZXlTaWcgPSBrO1xuXHRpZiAobXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSAlIDEyID09PSAwKSB7XG5cdFx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVZlcnRpY2FsTW92ZW1lbnQgPSAobXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSAvIDEyKSAqIDc7XG5cdFx0cmV0dXJuIHsgYWNjaWRlbnRhbHM6IGssIHJvb3Q6IHJvb3QsIGFjYzogYWNjIH07XG5cdH1cblxuXHR2YXIgYmFzZUtleSA9IGtleU5hbWVbMF07XG5cdGlmIChrZXlOYW1lWzFdID09PSAnYicgfHwga2V5TmFtZVsxXSA9PT0gJyMnKSB7XG5cdFx0YmFzZUtleSArPSBrZXlOYW1lWzFdO1xuXHRcdGtleU5hbWUgPSBrZXlOYW1lLnN1YnN0cigyKTtcblx0fSBlbHNlXG5cdFx0a2V5TmFtZSA9IGtleU5hbWUuc3Vic3RyKDEpO1xuXHR2YXIgaW5kZXggPSBrZXlJbmRleFtiYXNlS2V5XSArIG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2U7XG5cdHdoaWxlIChpbmRleCA8IDApIGluZGV4ICs9IDEyO1xuXHRpZiAoaW5kZXggPiAxMSkgaW5kZXggPSBpbmRleCAlIDEyO1xuXHR2YXIgbmV3S2V5TmFtZSA9IChrZXlOYW1lWzBdID09PSAnbScgPyBuZXdLZXlNaW5vcltpbmRleF0gOiBuZXdLZXlbaW5kZXhdKTtcblx0dmFyIHRyYW5zcG9zZWRLZXkgPSBuZXdLZXlOYW1lICsga2V5TmFtZTtcblx0dmFyIG5ld0tleVNpZyA9IGtleXNbdHJhbnNwb3NlZEtleV07XG5cdGlmIChuZXdLZXlTaWcubGVuZ3RoID4gMCAmJiBuZXdLZXlTaWdbMF0uYWNjID09PSAnZmxhdCcpXG5cdFx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVByZWZlckZsYXRzID0gdHJ1ZTtcblx0dmFyIGRpc3RhbmNlID0gdHJhbnNwb3NlZEtleS5jaGFyQ29kZUF0KDApIC0gYmFzZUtleS5jaGFyQ29kZUF0KDApO1xuXHRpZiAobXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSA+IDApIHtcblx0XHRpZiAoZGlzdGFuY2UgPCAwKVxuXHRcdFx0ZGlzdGFuY2UgKz0gNztcblx0XHRlbHNlIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuXHRcdFx0Ly8gVGhlcmUncyBhIGZ1bm55IHRoaW5nIHRoYXQgaGFwcGVucyB3aGVuIHRoZSBrZXkgY2hhbmdlcyBvbmx5IGFuIGFjY2lkZW50YWwncyBkaXN0YW5jZSwgZm9yIGluc3RhbmNlLCBmcm9tIEFiIHRvIEEuXG5cdFx0XHQvLyBJZiB0aGUgZGlzdGFuY2UgaXMgcG9zaXRpdmUgKHdlIGFyZSByYWlzaW5nIHBpdGNoKSwgYW5kIHRoZSBjaGFuZ2UgaXMgaGlnaGVyICh0aGF0IGlzLCBBYiAtPiBBKSwgdGhlbiByYWlzZSBhbiBvY3RhdmUuXG5cdFx0XHQvLyBUaGlzIHRlc3QgaXMgZWFzaWVyIGJlY2F1c2Ugd2Uga25vdyB0aGUga2V5cyBhcmUgbm90IGVxdWFsIChvciB3ZSB3b3VsZG4ndCBnZXQgdGhpcyBmYXIpLCBzbyBpZiB0aGUgYmFzZSBrZXkgaXMgYSBmbGF0IGtleSwgdGhlblxuXHRcdFx0Ly8gdGhlIHRyYW5zcG9zZWQga2V5IG11c3QgYmUgaGlnaGVyLiBMaWtld2lzZSwgaWYgdGhlIHRyYW5zcG9zZWQga2V5IGlzIHNoYXJwLCB0aGVuIHRoZSBiYXNlIGtleSBtdXN0IGJlIGxvd2VyLiBBbmQgb25lXG5cdFx0XHQvLyBvZiB0aG9zZSB0d28gdGhpbmdzIG11c3QgYmUgdHJ1ZSBiZWNhdXNlIHRoZXkgYXJlIG5vdCBib3RoIG5hdHVyYWwuXG5cdFx0XHRpZiAoYmFzZUtleVsxXSA9PT0gJyMnIHx8ICB0cmFuc3Bvc2VkS2V5WzFdID09PSAnYicpXG5cdFx0XHRcdGRpc3RhbmNlICs9IDc7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgPCAwKSB7XG5cdFx0aWYgKGRpc3RhbmNlID4gMClcblx0XHRcdGRpc3RhbmNlIC09IDc7XG5cdFx0ZWxzZSBpZiAoZGlzdGFuY2UgPT09IDApIHtcblx0XHRcdC8vIFRoZXJlJ3MgYSBmdW5ueSB0aGluZyB0aGF0IGhhcHBlbnMgd2hlbiB0aGUga2V5IGNoYW5nZXMgb25seSBhbiBhY2NpZGVudGFsJ3MgZGlzdGFuY2UsIGZvciBpbnN0YW5jZSwgZnJvbSBBYiB0byBBLlxuXHRcdFx0Ly8gSWYgdGhlIGRpc3RhbmNlIGlzIG5lZ2F0aXZlICh3ZSBhcmUgZHJvcHBpbmcgcGl0Y2gpLCBhbmQgdGhlIGNoYW5nZSBpcyBsb3dlciAodGhhdCBpcywgQSAtPiBBYiksIHRoZW4gZHJvcCBhbiBvY3RhdmUuXG5cdFx0XHRpZiAoYmFzZUtleVsxXSA9PT0gJ2InIHx8ICB0cmFuc3Bvc2VkS2V5WzFdID09PSAnIycpXG5cdFx0XHRcdGRpc3RhbmNlIC09IDc7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgPiAwKVxuXHRcdG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VWZXJ0aWNhbE1vdmVtZW50ID0gZGlzdGFuY2UgKyBNYXRoLmZsb29yKG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2UgLyAxMikgKiA3O1xuXHRlbHNlXG5cdFx0bXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZVZlcnRpY2FsTW92ZW1lbnQgPSBkaXN0YW5jZSArIE1hdGguY2VpbChtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlIC8gMTIpICogNztcblx0cmV0dXJuIHsgYWNjaWRlbnRhbHM6IG5ld0tleVNpZywgcm9vdDogbmV3S2V5TmFtZVswXSwgYWNjOiBuZXdLZXlOYW1lLmxlbmd0aCA+IDEgPyBuZXdLZXlOYW1lWzFdIDogXCJcIiB9O1xufTtcblxudmFyIHNoYXJwQ2hvcmRzID0gWyAnQycsICdD4pmvJywgJ0QnLCBcIkTima9cIiwgJ0UnLCAnRicsIFwiRuKZr1wiLCAnRycsICdH4pmvJywgJ0EnLCAnQeKZrycsICdCJ107XG52YXIgZmxhdENob3JkcyA9IFsgJ0MnLCAnROKZrScsICdEJywgJ0Xima0nLCAnRScsICdGJywgJ0fima0nLCAnRycsICdB4pmtJywgJ0EnLCAnQuKZrScsICdCJ107XG52YXIgc2hhcnBDaG9yZHNGcmVlID0gWyAnQycsICdDIycsICdEJywgXCJEI1wiLCAnRScsICdGJywgXCJGI1wiLCAnRycsICdHIycsICdBJywgJ0EjJywgJ0InXTtcbnZhciBmbGF0Q2hvcmRzRnJlZSA9IFsgJ0MnLCAnRGInLCAnRCcsICdFYicsICdFJywgJ0YnLCAnR2InLCAnRycsICdBYicsICdBJywgJ0JiJywgJ0InXTtcblxudHJhbnNwb3NlLmNob3JkTmFtZSA9IGZ1bmN0aW9uKG11bHRpbGluZVZhcnMsIGNob3JkKSB7XG5cdGlmIChtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlICYmIChtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlICUgMTIgIT09IDApKSB7IC8vIFRoZSBjaG9yZHMgYXJlIHRoZSBzYW1lIGlmIGl0IGlzIGFuIGV4YWN0IG9jdGF2ZSBjaGFuZ2UuXG5cdFx0dmFyIHRyYW5zcG9zZUZhY3RvciA9IG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2U7XG5cdFx0d2hpbGUgKHRyYW5zcG9zZUZhY3RvciA8IDApIHRyYW5zcG9zZUZhY3RvciArPSAxMjtcblx0XHRpZiAodHJhbnNwb3NlRmFjdG9yID4gMTEpIHRyYW5zcG9zZUZhY3RvciA9IHRyYW5zcG9zZUZhY3RvciAlIDEyO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmZyZWVnY2hvcmQpIHtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQ2IvZywgXCJgfjExYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRGIvZywgXCJgfjFgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9FYi9nLCBcImB+M2BcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0ZiL2csIFwiYH40YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvR2IvZywgXCJgfjZgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9BYi9nLCBcImB+OGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0JiL2csIFwiYH4xMGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0MjL2csIFwiYH4xYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRCMvZywgXCJgfjNgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9FIy9nLCBcImB+NWBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0YjL2csIFwiYH42YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRyMvZywgXCJgfjhgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9BIy9nLCBcImB+MTBgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9CIy9nLCBcImB+MGBcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQ+KZrS9nLCBcImB+MTFgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9E4pmtL2csIFwiYH4xYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvReKZrS9nLCBcImB+M2BcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0bima0vZywgXCJgfjRgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9H4pmtL2csIFwiYH42YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQeKZrS9nLCBcImB+OGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0Lima0vZywgXCJgfjEwYFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvQ+KZry9nLCBcImB+MWBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0Tima8vZywgXCJgfjNgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9F4pmvL2csIFwiYH41YFwiKTtcblx0XHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRuKZry9nLCBcImB+NmBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0fima8vZywgXCJgfjhgXCIpO1xuXHRcdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9B4pmvL2csIFwiYH4xMGBcIik7XG5cdFx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0Lima8vZywgXCJgfjBgXCIpO1xuXHRcdH1cblx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0MvZywgXCJgfjBgXCIpO1xuXHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRC9nLCBcImB+MmBcIik7XG5cdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9FL2csIFwiYH40YFwiKTtcblx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0YvZywgXCJgfjVgXCIpO1xuXHRcdGNob3JkID0gY2hvcmQucmVwbGFjZSgvRy9nLCBcImB+N2BcIik7XG5cdFx0Y2hvcmQgPSBjaG9yZC5yZXBsYWNlKC9BL2csIFwiYH45YFwiKTtcblx0XHRjaG9yZCA9IGNob3JkLnJlcGxhY2UoL0IvZywgXCJgfjExYFwiKTtcblx0XHR2YXIgYXJyID0gY2hvcmQuc3BsaXQoXCJgXCIpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoYXJyW2ldWzBdID09PSAnficpIHtcblx0XHRcdFx0dmFyIGNob3JkTnVtID0gcGFyc2VJbnQoYXJyW2ldLnN1YnN0cigxKSwxMCk7XG5cdFx0XHRcdGNob3JkTnVtICs9IHRyYW5zcG9zZUZhY3Rvcjtcblx0XHRcdFx0aWYgKGNob3JkTnVtID4gMTEpIGNob3JkTnVtIC09IDEyO1xuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5mcmVlZ2Nob3JkKVxuXHRcdFx0XHRcdGFycltpXSA9IG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VQcmVmZXJGbGF0cyA/IGZsYXRDaG9yZHNGcmVlW2Nob3JkTnVtXSA6IHNoYXJwQ2hvcmRzRnJlZVtjaG9yZE51bV07XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRhcnJbaV0gPSBtdWx0aWxpbmVWYXJzLmxvY2FsVHJhbnNwb3NlUHJlZmVyRmxhdHMgPyBmbGF0Q2hvcmRzW2Nob3JkTnVtXSA6IHNoYXJwQ2hvcmRzW2Nob3JkTnVtXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y2hvcmQgPSBhcnIuam9pbihcIlwiKTtcblx0fVxuXHRyZXR1cm4gY2hvcmQ7XG59O1xuXG52YXIgcGl0Y2hUb0xldHRlciA9IFsgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICdhJywgJ2InIF07XG5mdW5jdGlvbiBhY2NpZGVudGFsQ2hhbmdlKG9yaWdQaXRjaCwgbmV3UGl0Y2gsIGFjY2lkZW50YWwsIG9yaWdLZXlTaWcsIG5ld0tleVNpZykge1xuXHR2YXIgb3JpZ1BpdGNoTGV0dGVyID0gcGl0Y2hUb0xldHRlclsob3JpZ1BpdGNoICsgNDkpICUgN107IC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHBvc2l0aXZlIHBpdGNoIGJlZm9yZSBub3JtYWxpemluZy5cblx0dmFyIG9yaWdBY2NpZGVudGFsID0gMDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvcmlnS2V5U2lnLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKG9yaWdLZXlTaWdbaV0ubm90ZS50b0xvd2VyQ2FzZSgpID09PSBvcmlnUGl0Y2hMZXR0ZXIpXG5cdFx0XHRvcmlnQWNjaWRlbnRhbCA9IGFjY2lkZW50YWxzW29yaWdLZXlTaWdbaV0uYWNjXTtcblx0fVxuXG5cdHZhciBjdXJyZW50QWNjaWRlbnRhbCA9IGFjY2lkZW50YWxzW2FjY2lkZW50YWxdO1xuXHR2YXIgZGVsdGEgPSBjdXJyZW50QWNjaWRlbnRhbCAtIG9yaWdBY2NpZGVudGFsO1xuXG5cdHZhciBuZXdQaXRjaExldHRlciA9IHBpdGNoVG9MZXR0ZXJbKG5ld1BpdGNoICsgNDkpICUgN107IC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHBvc2l0aXZlIHBpdGNoIGJlZm9yZSBub3JtYWxpemluZy5cblx0dmFyIG5ld0FjY2lkZW50YWwgPSAwO1xuXHRmb3IgKHZhciBqID0gMDsgaiA8IG5ld0tleVNpZy5hY2NpZGVudGFscy5sZW5ndGg7IGorKykge1xuXHRcdGlmIChuZXdLZXlTaWcuYWNjaWRlbnRhbHNbal0ubm90ZS50b0xvd2VyQ2FzZSgpID09PSBuZXdQaXRjaExldHRlcilcblx0XHRcdG5ld0FjY2lkZW50YWwgPSBhY2NpZGVudGFsc1tuZXdLZXlTaWcuYWNjaWRlbnRhbHNbal0uYWNjXTtcblx0fVxuXHR2YXIgY2FsY0FjY2lkZW50YWwgPSBkZWx0YSArIG5ld0FjY2lkZW50YWw7XG5cdGlmIChjYWxjQWNjaWRlbnRhbCA8IC0yKSB7XG5cdFx0bmV3UGl0Y2gtLTtcblx0XHRjYWxjQWNjaWRlbnRhbCArPSAobmV3UGl0Y2hMZXR0ZXIgPT09ICdjJyB8fCBuZXdQaXRjaExldHRlciA9PT0gJ2YnKSA/IDEgOiAyO1xuXHR9XG5cdGlmIChjYWxjQWNjaWRlbnRhbCA+IDIpIHtcblx0XHRuZXdQaXRjaCsrO1xuXHRcdGNhbGNBY2NpZGVudGFsIC09IChuZXdQaXRjaExldHRlciA9PT0gJ2InIHx8IG5ld1BpdGNoTGV0dGVyID09PSAnZScpID8gMSA6IDI7XG5cdH1cblx0cmV0dXJuIFtuZXdQaXRjaCwgY2FsY0FjY2lkZW50YWxdO1xufVxuXG52YXIgYWNjaWRlbnRhbHMgPSB7XG5cdGRibGZsYXQ6IC0yLFxuXHRmbGF0OiAtMSxcblx0bmF0dXJhbDogMCxcblx0c2hhcnA6IDEsXG5cdGRibHNoYXJwOiAyXG59O1xudmFyIGFjY2lkZW50YWxzMiA9IHtcblx0XCItMlwiOiBcImRibGZsYXRcIixcblx0XCItMVwiOiBcImZsYXRcIixcblx0XCIwXCI6IFwibmF0dXJhbFwiLFxuXHRcIjFcIjogXCJzaGFycFwiLFxuXHRcIjJcIjogXCJkYmxzaGFycFwiXG59O1xudHJhbnNwb3NlLm5vdGUgPSBmdW5jdGlvbihtdWx0aWxpbmVWYXJzLCBlbCkge1xuXHQvLyB0aGUgXCJlbFwiIHRoYXQgaXMgcGFzc2VkIGluIGhhcyBlbC5hY2NpZGVudGFsLCBhbmQgZWwucGl0Y2guIFwicGl0Y2hcIiBpcyB0aGUgdmVydGljYWwgcG9zaXRpb24gKDA9bWlkZGxlIEMpXG5cdC8vIGxvY2FsVHJhbnNwb3NlIGlzIHRoZSBudW1iZXIgb2YgaGFsZiBzdGVwc1xuXHQvLyBsb2NhbFRyYW5zcG9zZVZlcnRpY2FsTW92ZW1lbnQgaXMgdGhlIHZlcnRpY2FsIGRpc3RhbmNlIHRvIG1vdmUuXG5cdGlmICghbXVsdGlsaW5lVmFycy5sb2NhbFRyYW5zcG9zZSlcblx0XHRyZXR1cm47XG5cdHZhciBvcmlnUGl0Y2ggPSBlbC5waXRjaDtcblx0ZWwucGl0Y2ggPSBlbC5waXRjaCArIG11bHRpbGluZVZhcnMubG9jYWxUcmFuc3Bvc2VWZXJ0aWNhbE1vdmVtZW50O1xuXG5cdGlmIChlbC5hY2NpZGVudGFsKSB7XG5cdFx0dmFyIHJldCA9IGFjY2lkZW50YWxDaGFuZ2Uob3JpZ1BpdGNoLCBlbC5waXRjaCwgZWwuYWNjaWRlbnRhbCwgbXVsdGlsaW5lVmFycy5nbG9iYWxUcmFuc3Bvc2VPcmlnS2V5U2lnLCBtdWx0aWxpbmVWYXJzLnRhcmdldEtleSk7XG5cdFx0ZWwucGl0Y2ggPSByZXRbMF07XG5cdFx0ZWwuYWNjaWRlbnRhbCA9IGFjY2lkZW50YWxzMltyZXRbMV1dO1xuXHR9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gdHJhbnNwb3NlO1xuIiwiLypnbG9iYWwgd2luZG93ICovXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4vYWJjX2NvbW1vbicpO1xudmFyIHBhcnNlRGlyZWN0aXZlID0gcmVxdWlyZSgnLi9hYmNfcGFyc2VfZGlyZWN0aXZlJyk7XG52YXIgdHJhbnNwb3NlID0gcmVxdWlyZSgnLi9hYmNfdHJhbnNwb3NlJyk7XG5cbnZhciBwYXJzZUtleVZvaWNlID0ge307XG5cbihmdW5jdGlvbigpIHtcblx0dmFyIHRva2VuaXplcjtcblx0dmFyIHdhcm47XG5cdHZhciBtdWx0aWxpbmVWYXJzO1xuXHR2YXIgdHVuZTtcblx0cGFyc2VLZXlWb2ljZS5pbml0aWFsaXplID0gZnVuY3Rpb24odG9rZW5pemVyXywgd2Fybl8sIG11bHRpbGluZVZhcnNfLCB0dW5lXykge1xuXHRcdHRva2VuaXplciA9IHRva2VuaXplcl87XG5cdFx0d2FybiA9IHdhcm5fO1xuXHRcdG11bHRpbGluZVZhcnMgPSBtdWx0aWxpbmVWYXJzXztcblx0XHR0dW5lID0gdHVuZV87XG5cdH07XG5cblx0cGFyc2VLZXlWb2ljZS5zdGFuZGFyZEtleSA9IGZ1bmN0aW9uKGtleU5hbWUsIHJvb3QsIGFjYywgbG9jYWxUcmFuc3Bvc2UpIHtcblx0XHR2YXIga2V5MXNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2YnfTtcblx0XHR2YXIga2V5MnNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2MnfTtcblx0XHR2YXIga2V5M3NoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2cnfTtcblx0XHR2YXIga2V5NHNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2QnfTtcblx0XHR2YXIga2V5NXNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ0EnfTtcblx0XHR2YXIga2V5NnNoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ2UnfTtcblx0XHR2YXIga2V5N3NoYXJwID0ge2FjYzogJ3NoYXJwJywgbm90ZTogJ0InfTtcblx0XHR2YXIga2V5MWZsYXQgPSB7YWNjOiAnZmxhdCcsIG5vdGU6ICdCJ307XG5cdFx0dmFyIGtleTJmbGF0ID0ge2FjYzogJ2ZsYXQnLCBub3RlOiAnZSd9O1xuXHRcdHZhciBrZXkzZmxhdCA9IHthY2M6ICdmbGF0Jywgbm90ZTogJ0EnfTtcblx0XHR2YXIga2V5NGZsYXQgPSB7YWNjOiAnZmxhdCcsIG5vdGU6ICdkJ307XG5cdFx0dmFyIGtleTVmbGF0ID0ge2FjYzogJ2ZsYXQnLCBub3RlOiAnRyd9O1xuXHRcdHZhciBrZXk2ZmxhdCA9IHthY2M6ICdmbGF0Jywgbm90ZTogJ2MnfTtcblx0XHR2YXIga2V5N2ZsYXQgPSB7YWNjOiAnZmxhdCcsIG5vdGU6ICdGJ307XG5cblx0XHR2YXIga2V5cyA9IHtcblx0XHRcdCdDIyc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCwga2V5N3NoYXJwIF0sXG5cdFx0XHQnQSNtJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwLCBrZXk3c2hhcnAgXSxcblx0XHRcdCdHI01peCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCwga2V5N3NoYXJwIF0sXG5cdFx0XHQnRCNEb3InOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAsIGtleTdzaGFycCBdLFxuXHRcdFx0J0UjUGhyJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwLCBrZXk3c2hhcnAgXSxcblx0XHRcdCdGI0x5ZCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCwga2V5N3NoYXJwIF0sXG5cdFx0XHQnQiNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAsIGtleTdzaGFycCBdLFxuXG5cdFx0XHQnRiMnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblx0XHRcdCdEI20nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblx0XHRcdCdDI01peCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwLCBrZXk1c2hhcnAsIGtleTZzaGFycCBdLFxuXHRcdFx0J0cjRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwIF0sXG5cdFx0XHQnQSNQaHInOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblx0XHRcdCdCTHlkJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCwga2V5NnNoYXJwIF0sXG5cdFx0XHQnRSNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAgXSxcblxuXHRcdFx0J0InOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwIF0sXG5cdFx0XHQnRyNtJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0YjTWl4JzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0MjRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0QjUGhyJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAsIGtleTVzaGFycCBdLFxuXHRcdFx0J0VMeWQnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwIF0sXG5cdFx0XHQnQSNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwIF0sXG5cblx0XHRcdCdFJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAgXSxcblx0XHRcdCdDI20nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCBdLFxuXHRcdFx0J0JNaXgnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCBdLFxuXHRcdFx0J0YjRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwLCBrZXk0c2hhcnAgXSxcblx0XHRcdCdHI1Bocic6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwIF0sXG5cdFx0XHQnQUx5ZCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCwga2V5NHNoYXJwIF0sXG5cdFx0XHQnRCNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCBdLFxuXG5cdFx0XHQnQSc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCBdLFxuXHRcdFx0J0YjbSc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAsIGtleTNzaGFycCBdLFxuXHRcdFx0J0VNaXgnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAgXSxcblx0XHRcdCdCRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwIF0sXG5cdFx0XHQnQyNQaHInOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAgXSxcblx0XHRcdCdETHlkJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCwga2V5M3NoYXJwIF0sXG5cdFx0XHQnRyNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAgXSxcblxuXHRcdFx0J0QnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cdFx0XHQnQm0nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cdFx0XHQnQU1peCc6IFsga2V5MXNoYXJwLCBrZXkyc2hhcnAgXSxcblx0XHRcdCdFRG9yJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCBdLFxuXHRcdFx0J0YjUGhyJzogWyBrZXkxc2hhcnAsIGtleTJzaGFycCBdLFxuXHRcdFx0J0dMeWQnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cdFx0XHQnQyNMb2MnOiBbIGtleTFzaGFycCwga2V5MnNoYXJwIF0sXG5cblx0XHRcdCdHJzogWyBrZXkxc2hhcnAgXSxcblx0XHRcdCdFbSc6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnRE1peCc6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnQURvcic6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnQlBocic6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnQ0x5ZCc6IFsga2V5MXNoYXJwIF0sXG5cdFx0XHQnRiNMb2MnOiBbIGtleTFzaGFycCBdLFxuXG5cdFx0XHQnQyc6IFtdLFxuXHRcdFx0J0FtJzogW10sXG5cdFx0XHQnR01peCc6IFtdLFxuXHRcdFx0J0REb3InOiBbXSxcblx0XHRcdCdFUGhyJzogW10sXG5cdFx0XHQnRkx5ZCc6IFtdLFxuXHRcdFx0J0JMb2MnOiBbXSxcblxuXHRcdFx0J0YnOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnRG0nOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnQ01peCc6IFsga2V5MWZsYXQgXSxcblx0XHRcdCdHRG9yJzogWyBrZXkxZmxhdCBdLFxuXHRcdFx0J0FQaHInOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnQmJMeWQnOiBbIGtleTFmbGF0IF0sXG5cdFx0XHQnRUxvYyc6IFsga2V5MWZsYXQgXSxcblxuXHRcdFx0J0JiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQgXSxcblx0XHRcdCdHbSc6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnRk1peCc6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnQ0Rvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnRFBocic6IFsga2V5MWZsYXQsIGtleTJmbGF0IF0sXG5cdFx0XHQnRWJMeWQnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCBdLFxuXHRcdFx0J0FMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCBdLFxuXG5cdFx0XHQnRWInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblx0XHRcdCdDbSc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCBdLFxuXHRcdFx0J0JiTWl4JzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0IF0sXG5cdFx0XHQnRkRvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCBdLFxuXHRcdFx0J0dQaHInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblx0XHRcdCdBYkx5ZCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCBdLFxuXHRcdFx0J0RMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblxuXHRcdFx0J0FiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0ZtJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0ViTWl4JzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0JiRG9yJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCBdLFxuXHRcdFx0J0NQaHInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0IF0sXG5cdFx0XHQnRGJMeWQnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0IF0sXG5cdFx0XHQnR0xvYyc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQgXSxcblxuXHRcdFx0J0RiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQgXSxcblx0XHRcdCdCYm0nOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCBdLFxuXHRcdFx0J0FiTWl4JzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQgXSxcblx0XHRcdCdFYkRvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0IF0sXG5cdFx0XHQnRlBocic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0IF0sXG5cdFx0XHQnR2JMeWQnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCBdLFxuXHRcdFx0J0NMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCBdLFxuXG5cdFx0XHQnR2InOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblx0XHRcdCdFYm0nOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblx0XHRcdCdEYk1peCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCBdLFxuXHRcdFx0J0FiRG9yJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQsIGtleTZmbGF0IF0sXG5cdFx0XHQnQmJQaHInOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblx0XHRcdCdDYkx5ZCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCBdLFxuXHRcdFx0J0ZMb2MnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQsIGtleTRmbGF0LCBrZXk1ZmxhdCwga2V5NmZsYXQgXSxcblxuXHRcdFx0J0NiJzogWyBrZXkxZmxhdCwga2V5MmZsYXQsIGtleTNmbGF0LCBrZXk0ZmxhdCwga2V5NWZsYXQsIGtleTZmbGF0LCBrZXk3ZmxhdCBdLFxuXHRcdFx0J0FibSc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdHYk1peCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdEYkRvcic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdFYlBocic6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdGYkx5ZCc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblx0XHRcdCdCYkxvYyc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQsIGtleTVmbGF0LCBrZXk2ZmxhdCwga2V5N2ZsYXQgXSxcblxuXHRcdFx0Ly8gVGhlIGZvbGxvd2luZyBhcmUgbm90IGluIHRoZSAyLjAgc3BlYywgYnV0IHNlZW0gbm9ybWFsIGVub3VnaC5cblx0XHRcdC8vIFRPRE8tUEVSOiBUaGVzZSBTT1VORCB0aGUgc2FtZSBhcyB3aGF0J3Mgd3JpdHRlbiwgYnV0IHRoZXkgYXJlbid0IHJpZ2h0XG5cdFx0XHQnQSMnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCBdLFxuXHRcdFx0J0IjJzogW10sXG5cdFx0XHQnRCMnOiBbIGtleTFmbGF0LCBrZXkyZmxhdCwga2V5M2ZsYXQgXSxcblx0XHRcdCdFIyc6IFsga2V5MWZsYXQgXSxcblx0XHRcdCdHIyc6IFsga2V5MWZsYXQsIGtleTJmbGF0LCBrZXkzZmxhdCwga2V5NGZsYXQgXSxcblx0XHRcdCdHYm0nOiBbIGtleTFzaGFycCwga2V5MnNoYXJwLCBrZXkzc2hhcnAsIGtleTRzaGFycCwga2V5NXNoYXJwLCBrZXk2c2hhcnAsIGtleTdzaGFycCBdXG5cdFx0fTtcblxuXHRcdHJldHVybiB0cmFuc3Bvc2Uua2V5U2lnbmF0dXJlKG11bHRpbGluZVZhcnMsIGtleXMsIGtleU5hbWUsIHJvb3QsIGFjYywgbG9jYWxUcmFuc3Bvc2UpO1xuXHR9O1xuXG5cdHZhciBjbGVmTGluZXMgPSB7XG5cdFx0J3RyZWJsZSc6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlKzgnOiB7IGNsZWY6ICd0cmVibGUrOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlLTgnOiB7IGNsZWY6ICd0cmVibGUtOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlXjgnOiB7IGNsZWY6ICd0cmVibGUrOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlXzgnOiB7IGNsZWY6ICd0cmVibGUtOCcsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlMSc6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiAyLCBtaWQ6IDIgfSxcblx0XHQndHJlYmxlMic6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiA0LCBtaWQ6IDAgfSxcblx0XHQndHJlYmxlMyc6IHsgY2xlZjogJ3RyZWJsZScsIHBpdGNoOiA2LCBtaWQ6IC0yIH0sXG5cdFx0J3RyZWJsZTQnOiB7IGNsZWY6ICd0cmVibGUnLCBwaXRjaDogOCwgbWlkOiAtNCB9LFxuXHRcdCd0cmVibGU1JzogeyBjbGVmOiAndHJlYmxlJywgcGl0Y2g6IDEwLCBtaWQ6IC02IH0sXG5cdFx0J3BlcmMnOiB7IGNsZWY6ICdwZXJjJywgcGl0Y2g6IDYsIG1pZDogMCB9LFxuXHRcdCdub25lJzogeyBjbGVmOiAnbm9uZScsIG1pZDogMCB9LFxuXHRcdCdiYXNzJzogeyBjbGVmOiAnYmFzcycsIHBpdGNoOiA4LCBtaWQ6IC0xMiB9LFxuXHRcdCdiYXNzKzgnOiB7IGNsZWY6ICdiYXNzKzgnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzcy04JzogeyBjbGVmOiAnYmFzcy04JywgcGl0Y2g6IDgsIG1pZDogLTEyIH0sXG5cdFx0J2Jhc3NeOCc6IHsgY2xlZjogJ2Jhc3MrOCcsIHBpdGNoOiA4LCBtaWQ6IC0xMiB9LFxuXHRcdCdiYXNzXzgnOiB7IGNsZWY6ICdiYXNzLTgnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzcysxNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzcy0xNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzc14xNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzc18xNic6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogOCwgbWlkOiAtMTIgfSxcblx0XHQnYmFzczEnOiB7IGNsZWY6ICdiYXNzJywgcGl0Y2g6IDIsIG1pZDogLTYgfSxcblx0XHQnYmFzczInOiB7IGNsZWY6ICdiYXNzJywgcGl0Y2g6IDQsIG1pZDogLTggfSxcblx0XHQnYmFzczMnOiB7IGNsZWY6ICdiYXNzJywgcGl0Y2g6IDYsIG1pZDogLTEwIH0sXG5cdFx0J2Jhc3M0JzogeyBjbGVmOiAnYmFzcycsIHBpdGNoOiA4LCBtaWQ6IC0xMiB9LFxuXHRcdCdiYXNzNSc6IHsgY2xlZjogJ2Jhc3MnLCBwaXRjaDogMTAsIG1pZDogLTE0IH0sXG5cdFx0J3Rlbm9yJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA4LCBtaWQ6IC04IH0sXG5cdFx0J3Rlbm9yMSc6IHsgY2xlZjogJ2FsdG8nLCBwaXRjaDogMiwgbWlkOiAtMiB9LFxuXHRcdCd0ZW5vcjInOiB7IGNsZWY6ICdhbHRvJywgcGl0Y2g6IDQsIG1pZDogLTQgfSxcblx0XHQndGVub3IzJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA2LCBtaWQ6IC02IH0sXG5cdFx0J3Rlbm9yNCc6IHsgY2xlZjogJ2FsdG8nLCBwaXRjaDogOCwgbWlkOiAtOCB9LFxuXHRcdCd0ZW5vcjUnOiB7IGNsZWY6ICdhbHRvJywgcGl0Y2g6IDEwLCBtaWQ6IC0xMCB9LFxuXHRcdCdhbHRvJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA2LCBtaWQ6IC02IH0sXG5cdFx0J2FsdG8xJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiAyLCBtaWQ6IC0yIH0sXG5cdFx0J2FsdG8yJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA0LCBtaWQ6IC00IH0sXG5cdFx0J2FsdG8zJzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA2LCBtaWQ6IC02IH0sXG5cdFx0J2FsdG80JzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiA4LCBtaWQ6IC04IH0sXG5cdFx0J2FsdG81JzogeyBjbGVmOiAnYWx0bycsIHBpdGNoOiAxMCwgbWlkOiAtMTAgfSxcblx0XHQnYWx0bys4JzogeyBjbGVmOiAnYWx0bys4JywgcGl0Y2g6IDYsIG1pZDogLTYgfSxcblx0XHQnYWx0by04JzogeyBjbGVmOiAnYWx0by04JywgcGl0Y2g6IDYsIG1pZDogLTYgfSxcblx0XHQnYWx0b144JzogeyBjbGVmOiAnYWx0bys4JywgcGl0Y2g6IDYsIG1pZDogLTYgfSxcblx0XHQnYWx0b184JzogeyBjbGVmOiAnYWx0by04JywgcGl0Y2g6IDYsIG1pZDogLTYgfVxuXHR9O1xuXG5cdHZhciBjYWxjTWlkZGxlID0gZnVuY3Rpb24oY2xlZiwgb2N0KSB7XG5cdFx0dmFyIHZhbHVlID0gY2xlZkxpbmVzW2NsZWZdO1xuXHRcdHZhciBtaWQgPSB2YWx1ZSA/IHZhbHVlLm1pZCA6IDA7XG5cdFx0cmV0dXJuIG1pZCtvY3Q7XG5cdH07XG5cblx0cGFyc2VLZXlWb2ljZS5maXhDbGVmID0gZnVuY3Rpb24oY2xlZikge1xuXHRcdHZhciB2YWx1ZSA9IGNsZWZMaW5lc1tjbGVmLnR5cGVdO1xuXHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0Y2xlZi5jbGVmUG9zID0gdmFsdWUucGl0Y2g7XG5cdFx0XHRjbGVmLnR5cGUgPSB2YWx1ZS5jbGVmO1xuXHRcdH1cblx0fTtcblxuXHRwYXJzZUtleVZvaWNlLmRlZXBDb3B5S2V5ID0gZnVuY3Rpb24oa2V5KSB7XG5cdFx0dmFyIHJldCA9IHsgYWNjaWRlbnRhbHM6IFtdLCByb290OiBrZXkucm9vdCwgYWNjOiBrZXkuYWNjLCBtb2RlOiBrZXkubW9kZSB9O1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmFjY2lkZW50YWxzLCBmdW5jdGlvbihrKSB7XG5cdFx0cmV0LmFjY2lkZW50YWxzLnB1c2gocGFyc2VDb21tb24uY2xvbmUoaykpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cblx0dmFyIHBpdGNoZXMgPSB7QTogNSwgQjogNiwgQzogMCwgRDogMSwgRTogMiwgRjogMywgRzogNCwgYTogMTIsIGI6IDEzLCBjOiA3LCBkOiA4LCBlOiA5LCBmOiAxMCwgZzogMTF9O1xuXG5cdHBhcnNlS2V5Vm9pY2UuYWRkUG9zVG9LZXkgPSBmdW5jdGlvbihjbGVmLCBrZXkpIHtcblx0XHQvLyBTaGlmdCB0aGUga2V5IHNpZ25hdHVyZSBmcm9tIHRoZSB0cmVibGUgcG9zaXRpb25zIHRvIHdoYXRldmVyIHBvc2l0aW9uIGlzIG5lZWRlZCBmb3IgdGhlIGNsZWYuXG5cdFx0Ly8gVGhpcyBtYXkgcHV0IHRoZSBrZXkgc2lnbmF0dXJlIHVubmF0dXJhbGx5IGhpZ2ggb3IgbG93LCBzbyBpZiBpdCBkb2VzLCB0aGVuIHNoaWZ0IGl0LlxuXHRcdHZhciBtaWQgPSBjbGVmLnZlcnRpY2FsUG9zO1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmFjY2lkZW50YWxzLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdHZhciBwaXRjaCA9IHBpdGNoZXNbYWNjLm5vdGVdO1xuXHRcdFx0cGl0Y2ggPSBwaXRjaCAtIG1pZDtcblx0XHRcdGFjYy52ZXJ0aWNhbFBvcyA9IHBpdGNoO1xuXHRcdH0pO1xuXHRcdGlmIChrZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0cGFyc2VDb21tb24uZWFjaChrZXkuaW1wbGllZE5hdHVyYWxzLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0dmFyIHBpdGNoID0gcGl0Y2hlc1thY2Mubm90ZV07XG5cdFx0XHRcdHBpdGNoID0gcGl0Y2ggLSBtaWQ7XG5cdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyA9IHBpdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAobWlkIDwgLTEwKSB7XG5cdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGtleS5hY2NpZGVudGFscywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRpZiAoYWNjLnZlcnRpY2FsUG9zID49IDExIHx8IChhY2MudmVydGljYWxQb3MgPT09IDEwICYmIGFjYy5hY2MgPT09ICdmbGF0JykpXG5cdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09IDc7XG5cdFx0XHRcdGlmIChhY2Mubm90ZSA9PT0gJ0EnICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHRcdGlmICgoYWNjLm5vdGUgPT09ICdHJyB8fCBhY2Mubm90ZSA9PT0gJ0YnKSAmJiBhY2MuYWNjID09PSAnZmxhdCcgKVxuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChrZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGtleS5pbXBsaWVkTmF0dXJhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRcdGlmIChhY2MudmVydGljYWxQb3MgPj0gMTEgfHwgKGFjYy52ZXJ0aWNhbFBvcyA9PT0gMTAgJiYgYWNjLmFjYyA9PT0gJ2ZsYXQnKSlcblx0XHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRcdGlmIChhY2Mubm90ZSA9PT0gJ0EnICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09Nztcblx0XHRcdFx0XHRpZiAoKGFjYy5ub3RlID09PSAnRycgfHwgYWNjLm5vdGUgPT09ICdGJykgJiYgYWNjLmFjYyA9PT0gJ2ZsYXQnIClcblx0XHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAobWlkIDwgLTQpIHtcblx0XHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmFjY2lkZW50YWxzLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09IDc7XG5cdFx0XHRcdGlmIChtaWQgPT09IC04ICYmIChhY2Mubm90ZSA9PT0gJ2YnIHx8IGFjYy5ub3RlID09PSAnZycpICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPTc7XG5cdFx0XHR9KTtcblx0XHRcdGlmIChrZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGtleS5pbXBsaWVkTmF0dXJhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdGFjYy52ZXJ0aWNhbFBvcyAtPSA3O1xuXHRcdFx0XHRcdGlmIChtaWQgPT09IC04ICYmIChhY2Mubm90ZSA9PT0gJ2YnIHx8IGFjYy5ub3RlID09PSAnZycpICYmIGFjYy5hY2MgPT09ICdzaGFycCcgKVxuXHRcdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zIC09Nztcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChtaWQgPj0gNykge1xuXHRcdFx0cGFyc2VDb21tb24uZWFjaChrZXkuYWNjaWRlbnRhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRhY2MudmVydGljYWxQb3MgKz0gNztcblx0XHRcdH0pO1xuXHRcdFx0aWYgKGtleS5pbXBsaWVkTmF0dXJhbHMpXG5cdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goa2V5LmltcGxpZWROYXR1cmFscywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdFx0YWNjLnZlcnRpY2FsUG9zICs9IDc7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRwYXJzZUtleVZvaWNlLmZpeEtleSA9IGZ1bmN0aW9uKGNsZWYsIGtleSkge1xuXHRcdHZhciBmaXhlZEtleSA9IHBhcnNlQ29tbW9uLmNsb25lKGtleSk7XG5cdFx0cGFyc2VLZXlWb2ljZS5hZGRQb3NUb0tleShjbGVmLCBmaXhlZEtleSk7XG5cdFx0cmV0dXJuIGZpeGVkS2V5O1xuXHR9O1xuXG5cdHZhciBwYXJzZU1pZGRsZSA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdHZhciBpID0gMDtcblx0XHR2YXIgcCA9IHN0ci5jaGFyQXQoaSsrKTtcblx0XHRpZiAocCA9PT0gJ14nIHx8IHAgPT09ICdfJylcblx0XHRcdHAgPSBzdHIuY2hhckF0KGkrKyk7XG5cdCAgdmFyIG1pZCA9IHBpdGNoZXNbcF07XG5cdFx0aWYgKG1pZCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bWlkID0gNjsgLy8gSWYgYSBsZWdhbCBtaWRkbGUgbm90ZSB3YXNuJ3QgcmVjZWl2ZWQsIGp1c3QgaWdub3JlIGl0LlxuXHRcdGZvciAoIDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHN0ci5jaGFyQXQoaSkgPT09ICcsJykgbWlkIC09IDc7XG5cdFx0XHRlbHNlIGlmIChzdHIuY2hhckF0KGkpID09PSBcIidcIikgbWlkICs9IDc7XG5cdFx0XHRlbHNlIGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4geyBtaWQ6IG1pZCAtIDYsIHN0cjogc3RyLnN1YnN0cmluZyhpKSB9O1x0Ly8gV2UgZ2V0IHRoZSBub3RlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHN0YWZmLiBXZSB3YW50IHRoZSBub3RlIHRoYXQgYXBwZWFycyBhcyB0aGUgZmlyc3QgbGVkZ2VyIGxpbmUgYmVsb3cgdGhlIHN0YWZmLlxuXHR9O1xuXG5cdHZhciBub3JtYWxpemVBY2NpZGVudGFscyA9IGZ1bmN0aW9uKGFjY3MpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjY3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChhY2NzW2ldLm5vdGUgPT09ICdiJylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ0InO1xuXHRcdFx0ZWxzZSBpZiAoYWNjc1tpXS5ub3RlID09PSAnYScpXG5cdFx0XHRcdGFjY3NbaV0ubm90ZSA9ICdBJztcblx0XHRcdGVsc2UgaWYgKGFjY3NbaV0ubm90ZSA9PT0gJ0YnKVxuXHRcdFx0XHRhY2NzW2ldLm5vdGUgPSAnZic7XG5cdFx0XHRlbHNlIGlmIChhY2NzW2ldLm5vdGUgPT09ICdFJylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ2UnO1xuXHRcdFx0ZWxzZSBpZiAoYWNjc1tpXS5ub3RlID09PSAnRCcpXG5cdFx0XHRcdGFjY3NbaV0ubm90ZSA9ICdkJztcblx0XHRcdGVsc2UgaWYgKGFjY3NbaV0ubm90ZSA9PT0gJ0MnKVxuXHRcdFx0XHRhY2NzW2ldLm5vdGUgPSAnYyc7XG5cdFx0XHRlbHNlIGlmIChhY2NzW2ldLm5vdGUgPT09ICdHJyAmJiBhY2NzW2ldLmFjYyA9PT0gJ3NoYXJwJylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ2cnO1xuXHRcdFx0ZWxzZSBpZiAoYWNjc1tpXS5ub3RlID09PSAnZycgJiYgYWNjc1tpXS5hY2MgPT09ICdmbGF0Jylcblx0XHRcdFx0YWNjc1tpXS5ub3RlID0gJ0cnO1xuXHRcdH1cblx0fTtcblxuXHRwYXJzZUtleVZvaWNlLnBhcnNlS2V5ID0gZnVuY3Rpb24oc3RyKVx0Ly8gKGFuZCBjbGVmKVxuXHR7XG5cdFx0Ly8gcmV0dXJuczpcblx0XHQvL1x0XHR7IGZvdW5kQ2xlZjogdHJ1ZSwgZm91bmRLZXk6IHRydWUgfVxuXHRcdC8vIFNpZGUgZWZmZWN0czpcblx0XHQvL1x0XHRjYWxscyB3YXJuKCkgd2hlbiB0aGVyZSBpcyBhIHN5bnRheCBlcnJvclxuXHRcdC8vXHRcdHNldHMgdGhlc2UgbWVtYmVycyBvZiBtdWx0aWxpbmVWYXJzOlxuXHRcdC8vXHRcdFx0Y2xlZlxuXHRcdC8vXHRcdFx0a2V5XG5cdFx0Ly9cdFx0XHRzdHlsZVxuXHRcdC8vXG5cdFx0Ly8gVGhlIGZvcm1hdCBpczpcblx0XHQvLyBLOiBb4p+oa2V54p+pXSBb4p+obW9kaWZpZXJz4p+pKl1cblx0XHQvLyBtb2RpZmllcnMgYXJlIGFueSBvZiB0aGUgZm9sbG93aW5nIGluIGFueSBvcmRlcjpcblx0XHQvLyAgW+KfqGNsZWbin6ldIFttaWRkbGU94p+ocGl0Y2jin6ldIFt0cmFuc3Bvc2U9Wy1d4p+obnVtYmVy4p+pXSBbc3RhZmZsaW5lcz3in6hudW1iZXLin6ldIFtzdGFmZnNjYWxlPeKfqG51bWJlcuKfqV1bc3R5bGU94p+oc3R5bGXin6ldXG5cdFx0Ly8ga2V5IGlzIG5vbmV8SFB8SHB84p+oc3BlY2lmaWVkX2tleeKfqVxuXHRcdC8vIGNsZWYgaXMgW2NsZWY9XSBb4p+oY2xlZiB0eXBl4p+pXSBb4p+obGluZSBudW1iZXLin6ldIFsrOHwtOF1cblx0XHQvLyBzcGVjaWZpZWRfa2V5IGlzIOKfqHBpdGNo4p+pWyN8Yl1bbW9kZShmaXJzdCB0aHJlZSBjaGFycyBhcmUgc2lnbmlmaWNhbnQpXVthY2NpZGVudGFscypdXG5cdFx0aWYgKHN0ci5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIGFuIGVtcHR5IEs6IGZpZWxkIGlzIHRoZSBzYW1lIGFzIEs6bm9uZVxuXHRcdFx0c3RyID0gJ25vbmUnO1xuXHRcdH1cblx0XHR2YXIgdG9rZW5zID0gdG9rZW5pemVyLnRva2VuaXplKHN0ciwgMCwgc3RyLmxlbmd0aCk7XG5cdFx0dmFyIHJldCA9IHt9O1xuXG5cdFx0Ly8gZmlyc3QgdGhlIGtleVxuXHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRjYXNlICdIUCc6XG5cdFx0XHRcdHBhcnNlRGlyZWN0aXZlLmFkZERpcmVjdGl2ZShcImJhZ3BpcGVzXCIpO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleSA9IHsgcm9vdDogXCJIUFwiLCBhY2NpZGVudGFsczogW10sIGFjYzogXCJcIiwgbW9kZTogXCJcIiB9O1xuXHRcdFx0XHRyZXQuZm91bmRLZXkgPSB0cnVlO1xuXHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdIcCc6XG5cdFx0XHRcdHBhcnNlRGlyZWN0aXZlLmFkZERpcmVjdGl2ZShcImJhZ3BpcGVzXCIpO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleSA9IHsgcm9vdDogXCJIcFwiLCBhY2NpZGVudGFsczogW3thY2M6ICduYXR1cmFsJywgbm90ZTogJ2cnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2YnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2MnfV0sIGFjYzogXCJcIiwgbW9kZTogXCJcIiB9O1xuXHRcdFx0XHRyZXQuZm91bmRLZXkgPSB0cnVlO1xuXHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdub25lJzpcblx0XHRcdFx0Ly8gd2UgZ290IHRoZSBub25lIGtleSAtIHRoYXQncyB0aGUgc2FtZSBhcyBDIHRvIHVzXG5cdFx0XHRcdG11bHRpbGluZVZhcnMua2V5ID0geyByb290OiBcIm5vbmVcIiwgYWNjaWRlbnRhbHM6IFtdLCBhY2M6IFwiXCIsIG1vZGU6IFwiXCIgfTtcblx0XHRcdFx0cmV0LmZvdW5kS2V5ID0gdHJ1ZTtcblx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dmFyIHJldFBpdGNoID0gdG9rZW5pemVyLmdldEtleVBpdGNoKHRva2Vuc1swXS50b2tlbik7XG5cdFx0XHRcdGlmIChyZXRQaXRjaC5sZW4gPiAwKSB7XG5cdFx0XHRcdFx0cmV0LmZvdW5kS2V5ID0gdHJ1ZTtcblx0XHRcdFx0XHR2YXIgYWNjID0gXCJcIjtcblx0XHRcdFx0XHR2YXIgbW9kZSA9IFwiXCI7XG5cdFx0XHRcdFx0Ly8gVGhlIGFjY2lkZW50YWwgYW5kIG1vZGUgbWlnaHQgYmUgYXR0YWNoZWQgdG8gdGhlIHBpdGNoLCBzbyB3ZSBtaWdodCB3YW50IHRvIGp1c3QgcmVtb3ZlIHRoZSBmaXJzdCBjaGFyYWN0ZXIuXG5cdFx0XHRcdFx0aWYgKHRva2Vuc1swXS50b2tlbi5sZW5ndGggPiAxKVxuXHRcdFx0XHRcdFx0dG9rZW5zWzBdLnRva2VuID0gdG9rZW5zWzBdLnRva2VuLnN1YnN0cmluZygxKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHR2YXIga2V5ID0gcmV0UGl0Y2gudG9rZW47XG5cdFx0XHRcdFx0Ly8gV2UgZ290IGEgcGl0Y2ggdG8gc3RhcnQgd2l0aCwgc28gd2UgbWlnaHQgYWxzbyBoYXZlIGFuIGFjY2lkZW50YWwgYW5kIGEgbW9kZVxuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0dmFyIHJldEFjYyA9IHRva2VuaXplci5nZXRTaGFycEZsYXQodG9rZW5zWzBdLnRva2VuKTtcblx0XHRcdFx0XHRcdGlmIChyZXRBY2MubGVuID4gMCkge1xuXHRcdFx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnRva2VuLmxlbmd0aCA+IDEpXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zWzBdLnRva2VuID0gdG9rZW5zWzBdLnRva2VuLnN1YnN0cmluZygxKTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRrZXkgKz0gcmV0QWNjLnRva2VuO1xuXHRcdFx0XHRcdFx0XHRhY2MgPSByZXRBY2MudG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIHJldE1vZGUgPSB0b2tlbml6ZXIuZ2V0TW9kZSh0b2tlbnNbMF0udG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRpZiAocmV0TW9kZS5sZW4gPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0XHRcdFx0a2V5ICs9IHJldE1vZGUudG9rZW47XG5cdFx0XHRcdFx0XHRcdFx0bW9kZSA9IHJldE1vZGUudG9rZW47XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIEJlIHN1cmUgdGhhdCB0aGUga2V5IHNwZWNpZmllZCBpcyBpbiB0aGUgbGlzdDogbm90IGFsbCBrZXlzIGFyZSBwaHlzaWNhbGx5IHBvc3NpYmxlLCBsaWtlIENibWluLlxuXHRcdFx0XHRcdFx0aWYgKHBhcnNlS2V5Vm9pY2Uuc3RhbmRhcmRLZXkoa2V5LCByZXRQaXRjaC50b2tlbiwgYWNjLCAwKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJVbnN1cHBvcnRlZCBrZXkgc2lnbmF0dXJlOiBcIiArIGtleSwgc3RyLCAwKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gV2UgbmVlZCB0byBkbyBhIGRlZXAgY29weSBiZWNhdXNlIHdlIGFyZSBnb2luZyB0byBtb2RpZnkgaXRcblx0XHRcdFx0XHR2YXIgb2xkS2V5ID0gcGFyc2VLZXlWb2ljZS5kZWVwQ29weUtleShtdWx0aWxpbmVWYXJzLmtleSk7XG5cdFx0XHRcdFx0Ly9UT0RPLVBFUjogSEFDSyEgVG8gZ2V0IHRoZSBsb2NhbCB0cmFuc3Bvc2UgdG8gd29yaywgdGhlIHRyYW5zcG9zaXRpb24gaXMgZG9uZSBmb3IgZWFjaCBsaW5lLiBUaGlzIGNhdXNlZCB0aGUgZ2xvYmFsIHRyYW5zcG9zaXRpb24gdmFyaWFibGUgdG8gYmUgZmFjdG9yZWQgaW4gdHdpY2UsIHNvLCBpbnN0ZWFkIG9mIHJld3JpdGluZyB0aGF0IHJpZ2h0IG5vdywgSSdtIGp1c3Qgc3VidHJhY3Rpbmcgb25lIG9mIHRoZW0gaGVyZS5cblx0XHRcdFx0XHR2YXIga2V5Q29tcGVuc2F0ZSA9IG11bHRpbGluZVZhcnMuZ2xvYmFsVHJhbnNwb3NlID8gLW11bHRpbGluZVZhcnMuZ2xvYmFsVHJhbnNwb3NlIDogMDtcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleSA9IHBhcnNlS2V5Vm9pY2UuZGVlcENvcHlLZXkocGFyc2VLZXlWb2ljZS5zdGFuZGFyZEtleShrZXksIHJldFBpdGNoLnRva2VuLCBhY2MsIGtleUNvbXBlbnNhdGUpKTtcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleS5tb2RlID0gbW9kZTtcblx0XHRcdFx0XHRpZiAob2xkS2V5KSB7XG5cdFx0XHRcdFx0XHQvLyBBZGQgbmF0dXJhbCBpbiBhbGwgcGxhY2VzIHRoYXQgdGhlIG9sZCBrZXkgaGFkIGFuIGFjY2lkZW50YWwuXG5cdFx0XHRcdFx0XHR2YXIga2s7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IG11bHRpbGluZVZhcnMua2V5LmFjY2lkZW50YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoa2sgPSAwOyBrayA8IG9sZEtleS5hY2NpZGVudGFscy5sZW5ndGg7IGtrKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAob2xkS2V5LmFjY2lkZW50YWxzW2trXS5ub3RlICYmIG11bHRpbGluZVZhcnMua2V5LmFjY2lkZW50YWxzW2tdLm5vdGUudG9Mb3dlckNhc2UoKSA9PT0gb2xkS2V5LmFjY2lkZW50YWxzW2trXS5ub3RlLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRvbGRLZXkuYWNjaWRlbnRhbHNba2tdLm5vdGUgPSBudWxsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmb3IgKGtrID0gMDsga2sgPCBvbGRLZXkuYWNjaWRlbnRhbHMubGVuZ3RoOyBraysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvbGRLZXkuYWNjaWRlbnRhbHNba2tdLm5vdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIW11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscylcblx0XHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscy5wdXNoKHsgYWNjOiAnbmF0dXJhbCcsIG5vdGU6IG9sZEtleS5hY2NpZGVudGFsc1tra10ubm90ZSB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHQvLyBUaGVyZSBhcmUgdHdvIHNwZWNpYWwgY2FzZXMgb2YgZGVwcmVjYXRlZCBzeW50YXguIElnbm9yZSB0aGVtIGlmIHRoZXkgb2NjdXJcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcblx0XHRpZiAodG9rZW5zWzBdLnRva2VuID09PSAnZXhwJykgdG9rZW5zLnNoaWZ0KCk7XG5cdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiByZXQ7XG5cdFx0aWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJ29jdCcpIHRva2Vucy5zaGlmdCgpO1xuXG5cdFx0Ly8gbm93IHNlZSBpZiB0aGVyZSBhcmUgZXh0cmEgYWNjaWRlbnRhbHNcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHJldDtcblx0XHR2YXIgYWNjcyA9IHRva2VuaXplci5nZXRLZXlBY2NpZGVudGFsczIodG9rZW5zKTtcblx0XHRpZiAoYWNjcy53YXJuKVxuXHRcdFx0d2FybihhY2NzLndhcm4sIHN0ciwgMCk7XG5cdFx0Ly8gSWYgd2UgaGF2ZSBleHRyYSBhY2NpZGVudGFscywgZmlyc3QgcmVwbGFjZSBvbmVzIHRoYXQgYXJlIG9mIHRoZSBzYW1lIHBpdGNoIGJlZm9yZSBhZGRpbmcgdGhlbSB0byB0aGUgZW5kLlxuXHRcdGlmIChhY2NzLmFjY3MpIHtcblx0XHRcdGlmICghcmV0LmZvdW5kS2V5KSB7XHRcdC8vIGlmIHRoZXJlIGFyZSBvbmx5IGV4dHJhIGFjY2lkZW50YWxzLCBtYWtlIHN1cmUgdGhpcyBpcyBzZXQuXG5cdFx0XHRcdHJldC5mb3VuZEtleSA9IHRydWU7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMua2V5ID0geyByb290OiBcIm5vbmVcIiwgYWNjOiBcIlwiLCBtb2RlOiBcIlwiLCBhY2NpZGVudGFsczogW10gfTtcblx0XHRcdH1cblx0XHRcdG5vcm1hbGl6ZUFjY2lkZW50YWxzKGFjY3MuYWNjcyk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFjY3MuYWNjcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBtdWx0aWxpbmVWYXJzLmtleS5hY2NpZGVudGFscy5sZW5ndGggJiYgIWZvdW5kOyBqKyspIHtcblx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5rZXkuYWNjaWRlbnRhbHNbal0ubm90ZSA9PT0gYWNjcy5hY2NzW2ldLm5vdGUpIHtcblx0XHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5hY2NpZGVudGFsc1tqXS5hY2MgIT09IGFjY3MuYWNjc1tpXS5hY2MpIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIGFjY2lkZW50YWwgaXMgZGlmZmVyZW50LCB0aGVuIHJlcGxhY2UgaXQuIElmIGl0IGlzIHRoZSBzYW1lLCB0aGVuIHRoZSBkZWNsYXJhdGlvbiB3YXMgcmVkdW5kYW50LCBzbyBqdXN0IGlnbm9yZSBpdC5cblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuYWNjaWRlbnRhbHNbal0uYWNjID0gYWNjcy5hY2NzW2ldLmFjYztcblx0XHRcdFx0XHRcdFx0aWYgKCFtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzKVxuXHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuZXhwbGljaXRBY2NpZGVudGFscy5wdXNoKGFjY3MuYWNjc1tpXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghZm91bmQpIHtcblx0XHRcdFx0XHRpZiAoIW11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMpXG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzID0gW107XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuZXhwbGljaXRBY2NpZGVudGFscy5wdXNoKGFjY3MuYWNjc1tpXSk7XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5rZXkuYWNjaWRlbnRhbHMucHVzaChhY2NzLmFjY3NbaV0pO1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5pbXBsaWVkTmF0dXJhbHMpIHtcblx0XHRcdFx0XHRcdGZvciAodmFyIGtrayA9IDA7IGtrayA8IG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscy5sZW5ndGg7IGtraysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5pbXBsaWVkTmF0dXJhbHNba2trXS5ub3RlID09PSBhY2NzLmFjY3NbaV0ubm90ZSlcblx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmtleS5pbXBsaWVkTmF0dXJhbHMuc3BsaWNlKGtraywgMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTm93IHNlZSBpZiBhbnkgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgcHJlc2VudC4gVGhleSBoYXZlIHRoZSBmb3JtIFwia2V5PXZhbHVlXCIsIGV4Y2VwdCB0aGF0IFwiY2xlZj1cIiBpcyBvcHRpb25hbFxuXHRcdHZhciB0b2tlbjtcblx0XHR3aGlsZSAodG9rZW5zLmxlbmd0aCA+IDApIHtcblx0XHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRcdGNhc2UgXCJtXCI6XG5cdFx0XHRcdGNhc2UgXCJtaWRkbGVcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBtaWRkbGVcIiwgc3RyLCAwKTsgcmV0dXJuIHJldDsgfVxuXHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKHRva2VuLnRva2VuICE9PSBcIj1cIikgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBtaWRkbGVcIiwgc3RyLCB0b2tlbi5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHsgd2FybihcIkV4cGVjdGVkIHBhcmFtZXRlciBhZnRlciBtaWRkbGU9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHR2YXIgcGl0Y2ggPSB0b2tlbml6ZXIuZ2V0UGl0Y2hGcm9tVG9rZW5zKHRva2Vucyk7XG5cdFx0XHRcdFx0aWYgKHBpdGNoLndhcm4pXG5cdFx0XHRcdFx0XHR3YXJuKHBpdGNoLndhcm4sIHN0ciwgMCk7XG5cdFx0XHRcdFx0aWYgKHBpdGNoLnBvc2l0aW9uKVxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jbGVmLnZlcnRpY2FsUG9zID0gcGl0Y2gucG9zaXRpb24gLSA2O1x0Ly8gd2UgZ2V0IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBtaWRkbGUgbGluZSwgYnV0IHdhbnQgdG8gb2Zmc2V0IGl0IHRvIHRoZSBmaXJzdCBsZWRnZXIgbGluZS5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInRyYW5zcG9zZVwiOlxuXHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIHRyYW5zcG9zZVwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udG9rZW4gIT09IFwiPVwiKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIHRyYW5zcG9zZVwiLCBzdHIsIHRva2VuLnN0YXJ0KTsgYnJlYWs7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgcGFyYW1ldGVyIGFmdGVyIHRyYW5zcG9zZT1cIiwgc3RyLCAwKTsgcmV0dXJuIHJldDsgfVxuXHRcdFx0XHRcdGlmICh0b2tlbnNbMF0udHlwZSAhPT0gJ251bWJlcicpIHsgd2FybihcIkV4cGVjdGVkIG51bWJlciBhZnRlciB0cmFuc3Bvc2VcIiwgc3RyLCB0b2tlbnNbMF0uc3RhcnQpOyBicmVhazsgfVxuXHRcdFx0XHRcdG11bHRpbGluZVZhcnMuY2xlZi50cmFuc3Bvc2UgPSB0b2tlbnNbMF0uaW50dDtcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInN0YWZmbGluZXNcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBzdGFmZmxpbmVzXCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50b2tlbiAhPT0gXCI9XCIpIHsgd2FybihcIkV4cGVjdGVkID0gYWZ0ZXIgc3RhZmZsaW5lc1wiLCBzdHIsIHRva2VuLnN0YXJ0KTsgYnJlYWs7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgcGFyYW1ldGVyIGFmdGVyIHN0YWZmbGluZXM9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnR5cGUgIT09ICdudW1iZXInKSB7IHdhcm4oXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgc3RhZmZsaW5lc1wiLCBzdHIsIHRva2Vuc1swXS5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jbGVmLnN0YWZmbGluZXMgPSB0b2tlbnNbMF0uaW50dDtcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInN0YWZmc2NhbGVcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBzdGFmZnNjYWxlXCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50b2tlbiAhPT0gXCI9XCIpIHsgd2FybihcIkV4cGVjdGVkID0gYWZ0ZXIgc3RhZmZzY2FsZVwiLCBzdHIsIHRva2VuLnN0YXJ0KTsgYnJlYWs7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgcGFyYW1ldGVyIGFmdGVyIHN0YWZmc2NhbGU9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnR5cGUgIT09ICdudW1iZXInKSB7IHdhcm4oXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgc3RhZmZzY2FsZVwiLCBzdHIsIHRva2Vuc1swXS5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jbGVmLnN0YWZmc2NhbGUgPSB0b2tlbnNbMF0uZmxvYXR0O1xuXHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic3R5bGVcIjpcblx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgeyB3YXJuKFwiRXhwZWN0ZWQgPSBhZnRlciBzdHlsZVwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udG9rZW4gIT09IFwiPVwiKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIHN0eWxlXCIsIHN0ciwgdG9rZW4uc3RhcnQpOyBicmVhazsgfVxuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7IHdhcm4oXCJFeHBlY3RlZCBwYXJhbWV0ZXIgYWZ0ZXIgc3R5bGU9XCIsIHN0ciwgMCk7IHJldHVybiByZXQ7IH1cblx0XHRcdFx0XHRzd2l0Y2ggKHRva2Vuc1swXS50b2tlbikge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIm5vcm1hbFwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcImhhcm1vbmljXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwicmh5dGhtXCI6XG5cdFx0XHRcdFx0XHRjYXNlIFwieFwiOlxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnN0eWxlID0gdG9rZW5zWzBdLnRva2VuO1xuXHRcdFx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiZXJyb3IgcGFyc2luZyBzdHlsZSBlbGVtZW50OiBcIiArIHRva2Vuc1swXS50b2tlbiwgc3RyLCB0b2tlbnNbMF0uc3RhcnQpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJjbGVmXCI6XG5cdFx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHsgd2FybihcIkV4cGVjdGVkID0gYWZ0ZXIgY2xlZlwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udG9rZW4gIT09IFwiPVwiKSB7IHdhcm4oXCJFeHBlY3RlZCA9IGFmdGVyIGNsZWZcIiwgc3RyLCB0b2tlbi5zdGFydCk7IGJyZWFrOyB9XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHsgd2FybihcIkV4cGVjdGVkIHBhcmFtZXRlciBhZnRlciBjbGVmPVwiLCBzdHIsIDApOyByZXR1cm4gcmV0OyB9XG5cdFx0XHRcdFx0Ly9icmVhazsgeWVzLCB3ZSB3YW50IHRvIGZhbGwgdGhyb3VnaC4gVGhhdCBhbGxvd3MgXCJjbGVmPVwiIHRvIGJlIG9wdGlvbmFsLlxuXHRcdFx0XHRjYXNlIFwidHJlYmxlXCI6XG5cdFx0XHRcdGNhc2UgXCJiYXNzXCI6XG5cdFx0XHRcdGNhc2UgXCJhbHRvXCI6XG5cdFx0XHRcdGNhc2UgXCJ0ZW5vclwiOlxuXHRcdFx0XHRjYXNlIFwicGVyY1wiOlxuXHRcdFx0XHRcdC8vIGNsZWYgaXMgW2NsZWY9XSBb4p+oY2xlZiB0eXBl4p+pXSBb4p+obGluZSBudW1iZXLin6ldIFsrOHwtOF1cblx0XHRcdFx0XHR2YXIgY2xlZiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdHN3aXRjaCAoY2xlZi50b2tlbikge1xuXHRcdFx0XHRcdFx0Y2FzZSAndHJlYmxlJzpcblx0XHRcdFx0XHRcdGNhc2UgJ3Rlbm9yJzpcblx0XHRcdFx0XHRcdGNhc2UgJ2FsdG8nOlxuXHRcdFx0XHRcdFx0Y2FzZSAnYmFzcyc6XG5cdFx0XHRcdFx0XHRjYXNlICdwZXJjJzpcblx0XHRcdFx0XHRcdGNhc2UgJ25vbmUnOlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0MnOiBjbGVmLnRva2VuID0gJ2FsdG8nOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0YnOiBjbGVmLnRva2VuID0gJ2Jhc3MnOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0cnOiBjbGVmLnRva2VuID0gJ3RyZWJsZSc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYyc6IGNsZWYudG9rZW4gPSAnYWx0byc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZic6IGNsZWYudG9rZW4gPSAnYmFzcyc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnZyc6IGNsZWYudG9rZW4gPSAndHJlYmxlJzsgYnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgY2xlZiBuYW1lLiBGb3VuZCBcIiArIGNsZWYudG9rZW4sIHN0ciwgY2xlZi5zdGFydCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA+IDAgJiYgdG9rZW5zWzBdLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdFx0XHRjbGVmLnRva2VuICs9IHRva2Vuc1swXS50b2tlbjtcblx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA+IDEgJiYgKHRva2Vuc1swXS50b2tlbiA9PT0gJy0nIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJysnIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJ14nIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJ18nKSAmJiB0b2tlbnNbMV0udG9rZW4gPT09ICc4Jykge1xuXHRcdFx0XHRcdFx0Y2xlZi50b2tlbiArPSB0b2tlbnNbMF0udG9rZW4gKyB0b2tlbnNbMV0udG9rZW47XG5cdFx0XHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmNsZWYgPSB7dHlwZTogY2xlZi50b2tlbiwgdmVydGljYWxQb3M6IGNhbGNNaWRkbGUoY2xlZi50b2tlbiwgMCl9O1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZSAmJiBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS50cmFuc3Bvc2UgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuY2xlZi50cmFuc3Bvc2UgPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS50cmFuc3Bvc2U7XG5cdFx0XHRcdFx0cmV0LmZvdW5kQ2xlZiA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0d2FybihcIlVua25vd24gcGFyYW1ldGVyOiBcIiArIHRva2Vuc1swXS50b2tlbiwgc3RyLCB0b2tlbnNbMF0uc3RhcnQpO1xuXHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXG5cdHZhciBzZXRDdXJyZW50Vm9pY2UgPSBmdW5jdGlvbihpZCkge1xuXHRcdG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID0gbXVsdGlsaW5lVmFycy52b2ljZXNbaWRdO1xuXHRcdHR1bmUuc2V0Q3VycmVudFZvaWNlKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtLCBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5pbmRleCk7XG5cdH07XG5cblx0cGFyc2VLZXlWb2ljZS5wYXJzZVZvaWNlID0gZnVuY3Rpb24obGluZSwgaSwgZSkge1xuXHRcdC8vRmlyc3QgdHJ1bmNhdGUgdGhlIHN0cmluZyB0byB0aGUgZmlyc3Qgbm9uLXNwYWNlIGNoYXJhY3RlciBhZnRlciBWOiB0aHJvdWdoIGVpdGhlciB0aGVcblx0XHQvL2VuZCBvZiB0aGUgbGluZSBvciBhICUgY2hhcmFjdGVyLiBUaGVuIHJlbW92ZSB0cmFpbGluZyBzcGFjZXMsIHRvby5cblx0XHR2YXIgcmV0ID0gdG9rZW5pemVyLmdldE1lYXQobGluZSwgaSwgZSk7XG5cdFx0dmFyIHN0YXJ0ID0gcmV0LnN0YXJ0O1xuXHRcdHZhciBlbmQgPSByZXQuZW5kO1xuXHRcdC8vVGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBsaW5lIGlzIHRoZSBJRC4gSXQgY2FuIGJlIGFueSBub24tc3BhY2Ugc3RyaW5nIGFuZCB0ZXJtaW5hdGVzIGF0IHRoZVxuXHRcdC8vZmlyc3Qgc3BhY2UuXG5cdFx0dmFyIGlkID0gdG9rZW5pemVyLmdldFRva2VuKGxpbmUsIHN0YXJ0LCBlbmQpO1xuXHRcdGlmIChpZC5sZW5ndGggPT09IDApIHtcblx0XHRcdHdhcm4oXCJFeHBlY3RlZCBhIHZvaWNlIGlkXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dmFyIGlzTmV3ID0gZmFsc2U7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMudm9pY2VzW2lkXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0gPSB7fTtcblx0XHRcdGlzTmV3ID0gdHJ1ZTtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLnNjb3JlX2lzX3ByZXNlbnQpXG5cdFx0XHRcdHdhcm4oXCJDYW4ndCBoYXZlIGFuIHVua25vd24gVjogaWQgd2hlbiB0aGUgJXNjb3JlIGRpcmVjdGl2ZSBpcyBwcmVzZW50XCIsIGxpbmUsIHN0YXJ0KTtcblx0XHR9XG5cdFx0c3RhcnQgKz0gaWQubGVuZ3RoO1xuXHRcdHN0YXJ0ICs9IHRva2VuaXplci5lYXRXaGl0ZVNwYWNlKGxpbmUsIHN0YXJ0KTtcblxuXHRcdHZhciBzdGFmZkluZm8gPSB7c3RhcnRTdGFmZjogaXNOZXd9O1xuXHRcdHZhciBhZGROZXh0VG9rZW5Ub1N0YWZmSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRcdHZhciBhdHRyID0gdG9rZW5pemVyLmdldFZvaWNlVG9rZW4obGluZSwgc3RhcnQsIGVuZCk7XG5cdFx0XHRpZiAoYXR0ci53YXJuICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCB2YWx1ZSBmb3IgXCIgKyBuYW1lICsgXCIgaW4gdm9pY2U6IFwiICsgYXR0ci53YXJuLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIGlmIChhdHRyLnRva2VuLmxlbmd0aCA9PT0gMCAmJiBsaW5lLmNoYXJBdChzdGFydCkgIT09ICdcIicpXG5cdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCB2YWx1ZSBmb3IgXCIgKyBuYW1lICsgXCIgaW4gdm9pY2VcIiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzdGFmZkluZm9bbmFtZV0gPSBhdHRyLnRva2VuO1xuXHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0fTtcblx0XHR2YXIgYWRkTmV4dFRva2VuVG9Wb2ljZUluZm8gPSBmdW5jdGlvbihpZCwgbmFtZSwgdHlwZSkge1xuXHRcdFx0dmFyIGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdGlmIChhdHRyLndhcm4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZTogXCIgKyBhdHRyLndhcm4sIGxpbmUsIHN0YXJ0KTtcblx0XHRcdGVsc2UgaWYgKGF0dHIudG9rZW4ubGVuZ3RoID09PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KSAhPT0gJ1wiJylcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdudW1iZXInKVxuXHRcdFx0XHRcdGF0dHIudG9rZW4gPSBwYXJzZUZsb2F0KGF0dHIudG9rZW4pO1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF1bbmFtZV0gPSBhdHRyLnRva2VuO1xuXHRcdFx0fVxuXHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0fTtcblx0XHR2YXIgZ2V0TmV4dFRva2VuID0gZnVuY3Rpb24obmFtZSwgdHlwZSkge1xuXHRcdFx0dmFyIGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdGlmIChhdHRyLndhcm4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZTogXCIgKyBhdHRyLndhcm4sIGxpbmUsIHN0YXJ0KTtcblx0XHRcdGVsc2UgaWYgKGF0dHIudG9rZW4ubGVuZ3RoID09PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KSAhPT0gJ1wiJylcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHZhbHVlIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0aWYgKHR5cGUgPT09ICdudW1iZXInKVxuXHRcdFx0XHRcdGF0dHIudG9rZW4gPSBwYXJzZUZsb2F0KGF0dHIudG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYXR0ci50b2tlbjtcblx0XHRcdH1cblx0XHRcdHN0YXJ0ICs9IGF0dHIubGVuO1xuXHRcdH07XG5cdFx0dmFyIGFkZE5leHROb3RlVG9rZW5Ub1ZvaWNlSW5mbyA9IGZ1bmN0aW9uKGlkLCBuYW1lKSB7XG5cdFx0XHR2YXIgbm90ZVRvVHJhbnNwb3NpdGlvbiA9IHtcblx0XHRcdFx0XCJfQlwiOiAyLFxuXHRcdFx0XHRcIl9FXCI6IDksXG5cdFx0XHRcdFwiX2JcIjogLTEwLFxuXHRcdFx0XHRcIl9lXCI6IC0zXG5cdFx0XHR9O1xuXHRcdFx0dmFyIGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdGlmIChhdHRyLndhcm4gIT09IHVuZGVmaW5lZClcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvZiAoX0IsIF9FLCBfYiwgX2UpIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZTogXCIgKyBhdHRyLndhcm4sIGxpbmUsIHN0YXJ0KTtcblx0XHRcdGVsc2UgaWYgKGF0dHIudG9rZW4ubGVuZ3RoID09PSAwICYmIGxpbmUuY2hhckF0KHN0YXJ0KSAhPT0gJ1wiJylcblx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvZiAoX0IsIF9FLCBfYiwgX2UpIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dmFyIHQgPSBub3RlVG9UcmFuc3Bvc2l0aW9uW2F0dHIudG9rZW5dO1xuXHRcdFx0XHRpZiAoIXQpXG5cdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIG9uZSBvZiAoX0IsIF9FLCBfYiwgX2UpIGZvciBcIiArIG5hbWUgKyBcIiBpbiB2b2ljZVwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF1bbmFtZV0gPSB0O1xuXHRcdFx0fVxuXHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0fTtcblxuXHRcdC8vVGhlbiB0aGUgZm9sbG93aW5nIGl0ZW1zIGNhbiBvY2N1ciBpbiBhbnkgb3JkZXI6XG5cdFx0d2hpbGUgKHN0YXJ0IDwgZW5kKSB7XG5cdFx0XHR2YXIgdG9rZW4gPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdHN0YXJ0ICs9IHRva2VuLmxlbjtcblxuXHRcdFx0aWYgKHRva2VuLndhcm4pIHtcblx0XHRcdFx0d2FybihcIkVycm9yIHBhcnNpbmcgdm9pY2U6IFwiICsgdG9rZW4ud2FybiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGF0dHIgPSBudWxsO1xuXHRcdFx0XHRzd2l0Y2ggKHRva2VuLnRva2VuKSB7XG5cdFx0XHRcdFx0Y2FzZSAnY2xlZic6XG5cdFx0XHRcdFx0Y2FzZSAnY2wnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9TdGFmZkluZm8oJ2NsZWYnKTtcblx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBjaGVjayBmb3IgYSBsZWdhbCBjbGVmOyBkbyBvY3Rhdml6aW5nXG5cdFx0XHRcdFx0XHR2YXIgb2N0ID0gMDtcblx0Ly9cdFx0XHRcdFx0XHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBzdGFmZkluZm8uY2xlZi5sZW5ndGg7IGlpKyspIHtcblx0Ly9cdFx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmSW5mby5jbGVmW2lpXSA9PT0gJywnKSBvY3QgLT0gNztcblx0Ly9cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoc3RhZmZJbmZvLmNsZWZbaWldID09PSBcIidcIikgb2N0ICs9IDc7XG5cdC8vXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoc3RhZmZJbmZvLmNsZWYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ICBzdGFmZkluZm8uY2xlZiA9IHN0YWZmSW5mby5jbGVmLnJlcGxhY2UoL1snLF0vZywgXCJcIik7IC8vJy8vY29tbWVudCBmb3IgZW1hY3MgZm9ybWF0dGluZyBvZiByZWdleHBcblx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmSW5mby5jbGVmLmluZGV4T2YoJysxNicpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdG9jdCArPSAxNDtcblx0XHRcdFx0XHRcdFx0XHRzdGFmZkluZm8uY2xlZiA9IHN0YWZmSW5mby5jbGVmLnJlcGxhY2UoJysxNicsICcnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRzdGFmZkluZm8udmVydGljYWxQb3MgPSBjYWxjTWlkZGxlKHN0YWZmSW5mby5jbGVmLCBvY3QpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlJzpcblx0XHRcdFx0XHRjYXNlICdiYXNzJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vcic6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0byc6XG5cdFx0XHRcdFx0Y2FzZSAncGVyYyc6XG5cdFx0XHRcdFx0Y2FzZSAnbm9uZSc6XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlXFwnJzpcblx0XHRcdFx0XHRjYXNlICdiYXNzXFwnJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vclxcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0b1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnbm9uZVxcJyc6XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlXFwnXFwnJzpcblx0XHRcdFx0XHRjYXNlICdiYXNzXFwnXFwnJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vclxcJ1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0b1xcJ1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAnbm9uZVxcJ1xcJyc6XG5cdFx0XHRcdFx0Y2FzZSAndHJlYmxlLCc6XG5cdFx0XHRcdFx0Y2FzZSAnYmFzcywnOlxuXHRcdFx0XHRcdGNhc2UgJ3Rlbm9yLCc6XG5cdFx0XHRcdFx0Y2FzZSAnYWx0bywnOlxuXHRcdFx0XHRcdGNhc2UgJ25vbmUsJzpcblx0XHRcdFx0XHRjYXNlICd0cmVibGUsLCc6XG5cdFx0XHRcdFx0Y2FzZSAnYmFzcywsJzpcblx0XHRcdFx0XHRjYXNlICd0ZW5vciwsJzpcblx0XHRcdFx0XHRjYXNlICdhbHRvLCwnOlxuXHRcdFx0XHRcdGNhc2UgJ25vbmUsLCc6XG5cdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogaGFuZGxlIHRoZSBvY3RhdmUgaW5kaWNhdG9ycyBvbiB0aGUgY2xlZiBieSBjaGFuZ2luZyB0aGUgbWlkZGxlIHByb3BlcnR5XG5cdFx0XHRcdFx0XHR2YXIgb2N0MiA9IDA7XG5cdC8vXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBpaWkgPSAwOyBpaWkgPCB0b2tlbi50b2tlbi5sZW5ndGg7IGlpaSsrKSB7XG5cdC8vXHRcdFx0XHRcdFx0XHRcdGlmICh0b2tlbi50b2tlbltpaWldID09PSAnLCcpIG9jdDIgLT0gNztcblx0Ly9cdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAodG9rZW4udG9rZW5baWlpXSA9PT0gXCInXCIpIG9jdDIgKz0gNztcblx0Ly9cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIHN0YWZmSW5mby5jbGVmID0gdG9rZW4udG9rZW4ucmVwbGFjZSgvWycsXS9nLCBcIlwiKTsgLy8nLy9jb21tZW50IGZvciBlbWFjcyBmb3JtYXR0aW5nIG9mIHJlZ2V4cFxuXHRcdFx0XHRcdFx0c3RhZmZJbmZvLnZlcnRpY2FsUG9zID0gY2FsY01pZGRsZShzdGFmZkluZm8uY2xlZiwgb2N0Mik7XG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uY2xlZiA9IHRva2VuLnRva2VuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3RhdmVzJzpcblx0XHRcdFx0XHRjYXNlICdzdGF2ZSc6XG5cdFx0XHRcdFx0Y2FzZSAnc3R2Jzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCdzdGF2ZXMnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ2JyYWNlJzpcblx0XHRcdFx0XHRjYXNlICdicmMnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9TdGFmZkluZm8oJ2JyYWNlJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdFx0XHRjYXNlICdicmsnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9TdGFmZkluZm8oJ2JyYWNrZXQnKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ25hbWUnOlxuXHRcdFx0XHRcdGNhc2UgJ25tJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCduYW1lJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdzdWJuYW1lJzpcblx0XHRcdFx0XHRjYXNlICdzbmFtZSc6XG5cdFx0XHRcdFx0Y2FzZSAnc25tJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCdzdWJuYW1lJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdtZXJnZSc6XG5cdFx0XHRcdFx0XHRzdGFmZkluZm8uc3RhcnRTdGFmZiA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3RlbSc6XG5cdFx0XHRcdFx0Y2FzZSAnc3RlbXMnOlxuXHRcdFx0XHRcdFx0YXR0ciA9IHRva2VuaXplci5nZXRWb2ljZVRva2VuKGxpbmUsIHN0YXJ0LCBlbmQpO1xuXHRcdFx0XHRcdFx0aWYgKGF0dHIud2FybiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgdmFsdWUgZm9yIHN0ZW1zIGluIHZvaWNlOiBcIiArIGF0dHIud2FybiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXR0ci50b2tlbiA9PT0gJ3VwJyB8fCBhdHRyLnRva2VuID09PSAnZG93bicpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zdGVtID0gYXR0ci50b2tlbjtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0d2FybihcIkV4cGVjdGVkIHVwIG9yIGRvd24gZm9yIHZvaWNlIHN0ZW1cIiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0XHRcdFx0c3RhcnQgKz0gYXR0ci5sZW47XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd1cCc6XG5cdFx0XHRcdFx0Y2FzZSAnZG93bic6XG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uc3RlbSA9IHRva2VuLnRva2VuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnbWlkZGxlJzpcblx0XHRcdFx0XHRjYXNlICdtJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvU3RhZmZJbmZvKCd2ZXJ0aWNhbFBvcycpO1xuXHRcdFx0XHRcdFx0c3RhZmZJbmZvLnZlcnRpY2FsUG9zID0gcGFyc2VNaWRkbGUoc3RhZmZJbmZvLnZlcnRpY2FsUG9zKS5taWQ7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdnY2hvcmRzJzpcblx0XHRcdFx0XHRjYXNlICdnY2gnOlxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy52b2ljZXNbaWRdLnN1cHByZXNzQ2hvcmRzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdC8vIGdjaG9yZHMgY2FuIHN0YW5kIG9uIGl0cyBvd24sIG9yIGl0IGNvdWxkIGJlIGdjaG9yZHM9MC5cblx0XHRcdFx0XHRcdGF0dHIgPSB0b2tlbml6ZXIuZ2V0Vm9pY2VUb2tlbihsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRcdFx0XHRcdGlmIChhdHRyLnRva2VuID09PSBcIjBcIilcblx0XHRcdFx0XHRcdFx0c3RhcnQgPSBzdGFydCArIGF0dHIubGVuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc3BhY2UnOlxuXHRcdFx0XHRcdGNhc2UgJ3NwYyc6XG5cdFx0XHRcdFx0XHRhZGROZXh0VG9rZW5Ub1N0YWZmSW5mbygnc3BhY2luZycpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnc2NhbGUnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICdzY2FsZScsICdudW1iZXInKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3Njb3JlJzpcblx0XHRcdFx0XHRcdGFkZE5leHROb3RlVG9rZW5Ub1ZvaWNlSW5mbyhpZCwgJ3Njb3JlVHJhbnNwb3NlJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICd0cmFuc3Bvc2UnOlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICd0cmFuc3Bvc2UnLCAnbnVtYmVyJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdzdGFmZmxpbmVzJzpcblx0XHRcdFx0XHRcdGFkZE5leHRUb2tlblRvVm9pY2VJbmZvKGlkLCAnc3RhZmZsaW5lcycsICdudW1iZXInKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3N0YWZmc2NhbGUnOlxuXHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgaXMgcGFzc2VkIHRvIHRoZSBlbmdyYXZlciwgYnV0IHRoZSBlbmdyYXZlciBpZ25vcmVzIGl0LlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICdzdGFmZnNjYWxlJywgJ251bWJlcicpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnb2N0YXZlJzpcblx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBUaGlzIGlzIGFjY2VwdGVkLCBidXQgbm90IGltcGxlbWVudGVkLCB5ZXQuXG5cdFx0XHRcdFx0XHRhZGROZXh0VG9rZW5Ub1ZvaWNlSW5mbyhpZCwgJ29jdGF2ZScsICdudW1iZXInKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJ3ZvbHVtZSc6XG5cdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogVGhpcyBpcyBhY2NlcHRlZCwgYnV0IG5vdCBpbXBsZW1lbnRlZCwgeWV0LlxuXHRcdFx0XHRcdFx0YWRkTmV4dFRva2VuVG9Wb2ljZUluZm8oaWQsICd2b2x1bWUnLCAnbnVtYmVyJyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjdWUnOlxuXHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgaXMgYWNjZXB0ZWQsIGJ1dCBub3QgaW1wbGVtZW50ZWQsIHlldC5cblx0XHRcdFx0XHRcdHZhciBjdWUgPSBnZXROZXh0VG9rZW4oJ2N1ZScsICdzdHJpbmcnKTtcblx0XHRcdFx0XHRcdGlmIChjdWUgPT09ICdvbicpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zY2FsZSA9IDAuNjtcblx0XHRcdFx0XHRcdGVsc2UgbXVsdGlsaW5lVmFycy52b2ljZXNbaWRdLnNjYWxlID0gMTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJzdHlsZVwiOlxuXHRcdFx0XHRcdFx0YXR0ciA9IHRva2VuaXplci5nZXRWb2ljZVRva2VuKGxpbmUsIHN0YXJ0LCBlbmQpO1xuXHRcdFx0XHRcdFx0aWYgKGF0dHIud2FybiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgdmFsdWUgZm9yIHN0eWxlIGluIHZvaWNlOiBcIiArIGF0dHIud2FybiwgbGluZSwgc3RhcnQpO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYXR0ci50b2tlbiA9PT0gJ25vcm1hbCcgfHwgYXR0ci50b2tlbiA9PT0gJ2hhcm1vbmljJyB8fCBhdHRyLnRva2VuID09PSAncmh5dGhtJyB8fCBhdHRyLnRva2VuID09PSAneCcpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zdHlsZSA9IGF0dHIudG9rZW47XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJFeHBlY3RlZCBvbmUgb2YgW25vcm1hbCwgaGFybW9uaWMsIHJoeXRobSwgeF0gZm9yIHZvaWNlIHN0eWxlXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdFx0XHRcdHN0YXJ0ICs9IGF0dHIubGVuO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Ly8gZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBVc2UgdGhpcyB0byBmaW5kIFY6IHVzYWdlcyB0aGF0IGFyZW4ndCBoYW5kbGVkLlxuXHRcdFx0XHRcdC8vIFx0Y29uc29sZS5sb2coXCJwYXJzZSB2b2ljZVwiLCB0b2tlbiwgdHVuZS5tZXRhVGV4dC50aXRsZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHN0YXJ0ICs9IHRva2VuaXplci5lYXRXaGl0ZVNwYWNlKGxpbmUsIHN0YXJ0KTtcblx0XHR9XG5cblx0XHQvLyBub3cgd2UndmUgZmlsbGVkIHVwIHN0YWZmSW5mbywgZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhpcyB2b2ljZVxuXHRcdC8vIFRPRE8tUEVSOiBJdCBpcyB1bmNsZWFyIGZyb20gdGhlIHN0YW5kYXJkIGFuZCB0aGUgZXhhbXBsZXMgd2hhdCB0byBkbyB3aXRoIGJyYWNlLCBicmFja2V0LCBhbmQgc3RhdmVzLCBzbyB0aGV5IGFyZSBpZ25vcmVkIGZvciBub3cuXG5cdFx0aWYgKHN0YWZmSW5mby5zdGFydFN0YWZmIHx8IG11bHRpbGluZVZhcnMuc3RhdmVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0bXVsdGlsaW5lVmFycy5zdGF2ZXMucHVzaCh7aW5kZXg6IG11bHRpbGluZVZhcnMuc3RhdmVzLmxlbmd0aCwgbWV0ZXI6IG11bHRpbGluZVZhcnMub3JpZ01ldGVyfSk7XG5cdFx0XHRpZiAoIW11bHRpbGluZVZhcnMuc2NvcmVfaXNfcHJlc2VudClcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGF2ZXNbbXVsdGlsaW5lVmFycy5zdGF2ZXMubGVuZ3RoLTFdLm51bVZvaWNlcyA9IDA7XG5cdFx0fVxuXHRcdGlmIChtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uc3RhZmZOdW0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gc3RvcmUgd2hlcmUgdG8gd3JpdGUgdGhpcyBmb3IgcXVpY2sgYWNjZXNzIGxhdGVyLlxuXHRcdFx0bXVsdGlsaW5lVmFycy52b2ljZXNbaWRdLnN0YWZmTnVtID0gbXVsdGlsaW5lVmFycy5zdGF2ZXMubGVuZ3RoLTE7XG5cdFx0XHR2YXIgdmkgPSAwO1xuXHRcdFx0Zm9yKHZhciB2IGluIG11bHRpbGluZVZhcnMudm9pY2VzKSB7XG5cdFx0XHRcdGlmKG11bHRpbGluZVZhcnMudm9pY2VzLmhhc093blByb3BlcnR5KHYpKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMudm9pY2VzW3ZdLnN0YWZmTnVtID09PSBtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uc3RhZmZOdW0pXG5cdFx0XHRcdFx0XHR2aSsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtdWx0aWxpbmVWYXJzLnZvaWNlc1tpZF0uaW5kZXggPSB2aS0xO1xuXHRcdH1cblx0XHR2YXIgcyA9IG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMudm9pY2VzW2lkXS5zdGFmZk51bV07XG5cdFx0aWYgKCFtdWx0aWxpbmVWYXJzLnNjb3JlX2lzX3ByZXNlbnQpXG5cdFx0XHRzLm51bVZvaWNlcysrO1xuXHRcdGlmIChzdGFmZkluZm8uY2xlZikgcy5jbGVmID0ge3R5cGU6IHN0YWZmSW5mby5jbGVmLCB2ZXJ0aWNhbFBvczogc3RhZmZJbmZvLnZlcnRpY2FsUG9zfTtcblx0XHRpZiAoc3RhZmZJbmZvLnNwYWNpbmcpIHMuc3BhY2luZ19iZWxvd19vZmZzZXQgPSBzdGFmZkluZm8uc3BhY2luZztcblx0XHRpZiAoc3RhZmZJbmZvLnZlcnRpY2FsUG9zKSBzLnZlcnRpY2FsUG9zID0gc3RhZmZJbmZvLnZlcnRpY2FsUG9zO1xuXG5cdFx0aWYgKHN0YWZmSW5mby5uYW1lKSB7aWYgKHMubmFtZSkgcy5uYW1lLnB1c2goc3RhZmZJbmZvLm5hbWUpOyBlbHNlIHMubmFtZSA9IFsgc3RhZmZJbmZvLm5hbWUgXTt9XG5cdFx0aWYgKHN0YWZmSW5mby5zdWJuYW1lKSB7aWYgKHMuc3VibmFtZSkgcy5zdWJuYW1lLnB1c2goc3RhZmZJbmZvLnN1Ym5hbWUpOyBlbHNlIHMuc3VibmFtZSA9IFsgc3RhZmZJbmZvLnN1Ym5hbWUgXTt9XG5cblx0XHRzZXRDdXJyZW50Vm9pY2UoaWQpO1xuXHR9O1xuXG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlS2V5Vm9pY2U7XG4iLCIvLyAgICBhYmNfcGFyc2VfaGVhZGVyLmpzOiBwYXJzZXMgYSB0aGUgaGVhZGVyIGZpZWxkcyBmcm9tIGEgc3RyaW5nIHJlcHJlc2VudGluZyBBQkMgTXVzaWMgTm90YXRpb24gaW50byBhIHVzYWJsZSBpbnRlcm5hbCBzdHJ1Y3R1cmUuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBQYXVsIFJvc2VuIChwYXVsIGF0IHBhdWxyb3NlbiBkb3QgbmV0KVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4vKmdsb2JhbCB3aW5kb3cgKi9cblxudmFyIHBhcnNlQ29tbW9uID0gcmVxdWlyZSgnLi9hYmNfY29tbW9uJyk7XG52YXIgcGFyc2VEaXJlY3RpdmUgPSByZXF1aXJlKCcuL2FiY19wYXJzZV9kaXJlY3RpdmUnKTtcbnZhciBwYXJzZUtleVZvaWNlID0gcmVxdWlyZSgnLi9hYmNfcGFyc2Vfa2V5X3ZvaWNlJyk7XG5cbnZhciBQYXJzZUhlYWRlciA9IGZ1bmN0aW9uKHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSkge1xuXHR0aGlzLnJlc2V0ID0gZnVuY3Rpb24odG9rZW5pemVyLCB3YXJuLCBtdWx0aWxpbmVWYXJzLCB0dW5lKSB7XG5cdFx0cGFyc2VLZXlWb2ljZS5pbml0aWFsaXplKHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSk7XG5cdFx0cGFyc2VEaXJlY3RpdmUuaW5pdGlhbGl6ZSh0b2tlbml6ZXIsIHdhcm4sIG11bHRpbGluZVZhcnMsIHR1bmUpO1xuXHR9O1xuXHR0aGlzLnJlc2V0KHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSk7XG5cblx0dGhpcy5zZXRUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKSB7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMuaGFzTWFpblRpdGxlKVxuXHRcdFx0dHVuZS5hZGRTdWJ0aXRsZSh0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci5zdHJpcENvbW1lbnQodGl0bGUpKSk7XHQvLyBkaXNwbGF5IHNlY29uZGFyeSB0aXRsZVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR2YXIgdGl0bGVTdHIgPSB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci50aGVSZXZlcnNlcih0b2tlbml6ZXIuc3RyaXBDb21tZW50KHRpdGxlKSkpO1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMudGl0bGVjYXBzKVxuXHRcdFx0XHR0aXRsZVN0ciA9IHRpdGxlU3RyLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHR0dW5lLmFkZE1ldGFUZXh0KFwidGl0bGVcIiwgdGl0bGVTdHIpO1xuXHRcdFx0bXVsdGlsaW5lVmFycy5oYXNNYWluVGl0bGUgPSB0cnVlO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLnNldE1ldGVyID0gZnVuY3Rpb24obGluZSkge1xuXHRcdGxpbmUgPSB0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUpO1xuXHRcdGlmIChsaW5lID09PSAnQycpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAnY29tbW9uX3RpbWUnfTtcblx0XHR9IGVsc2UgaWYgKGxpbmUgPT09ICdDfCcpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAnY3V0X3RpbWUnfTtcblx0XHR9IGVsc2UgaWYgKGxpbmUgPT09ICdvJykge1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPT09IHRydWUpIHtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA9IDAuMTI1O1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge3R5cGU6ICd0ZW1wdXNfcGVyZmVjdHVtJ307XG5cdFx0fSBlbHNlIGlmIChsaW5lID09PSAnYycpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAndGVtcHVzX2ltcGVyZmVjdHVtJ307XG5cdFx0fSBlbHNlIGlmIChsaW5lID09PSAnby4nKSB7XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmRlZmF1bHRfbGVuZ3RoID0gMC4xMjU7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7dHlwZTogJ3RlbXB1c19wZXJmZWN0dW1fcHJvbGF0aW8nfTtcblx0XHR9IGVsc2UgaWYgKGxpbmUgPT09ICdjLicpIHtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID09PSB0cnVlKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt0eXBlOiAndGVtcHVzX2ltcGVyZmVjdHVtX3Byb2xhdGlvJ307XG5cdFx0fSBlbHNlIGlmIChsaW5lLmxlbmd0aCA9PT0gMCB8fCBsaW5lLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPT09IHRydWUpIHtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA9IDAuMTI1O1xuXHRcdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHZhciB0b2tlbnMgPSB0b2tlbml6ZXIudG9rZW5pemUobGluZSwgMCwgbGluZS5sZW5ndGgpO1xuXHRcdFx0Ly8gdGhlIGZvcm0gaXMgW29wZW5fcGFyZW5dIGRlY2ltYWwgWyBwbHVzfGRvdCBkZWNpbWFsIF0uLi4gW2Nsb3NlX3BhcmVuXSBzbGFzaCBkZWNpbWFsIFtwbHVzIHNhbWVfYXNfYmVmb3JlXVxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIHBhcnNlTnVtID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Ly8gaGFuZGxlcyB0aGlzIG11Y2g6IFtvcGVuX3BhcmVuXSBkZWNpbWFsIFsgcGx1c3xkb3QgZGVjaW1hbCBdLi4uIFtjbG9zZV9wYXJlbl1cblx0XHRcdFx0XHR2YXIgcmV0ID0ge3ZhbHVlOiAwLCBudW06IFwiXCJ9O1xuXG5cdFx0XHRcdFx0dmFyIHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2sudG9rZW4gPT09ICcoJylcblx0XHRcdFx0XHRcdHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdHdoaWxlICgxKSB7XG5cdFx0XHRcdFx0XHRpZiAodG9rLnR5cGUgIT09ICdudW1iZXInKSB0aHJvdyBcIkV4cGVjdGVkIHRvcCBudW1iZXIgb2YgbWV0ZXJcIjtcblx0XHRcdFx0XHRcdHJldC52YWx1ZSArPSBwYXJzZUludCh0b2sudG9rZW4pO1xuXHRcdFx0XHRcdFx0cmV0Lm51bSArPSB0b2sudG9rZW47XG5cdFx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCB8fCB0b2tlbnNbMF0udG9rZW4gPT09ICcvJykgcmV0dXJuIHJldDtcblx0XHRcdFx0XHRcdHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0aWYgKHRvay50b2tlbiA9PT0gJyknKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwIHx8IHRva2Vuc1swXS50b2tlbiA9PT0gJy8nKSByZXR1cm4gcmV0O1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBcIlVuZXhwZWN0ZWQgcGFyZW4gaW4gbWV0ZXJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICh0b2sudG9rZW4gIT09ICcuJyAmJiB0b2sudG9rZW4gIT09ICcrJykgdGhyb3cgXCJFeHBlY3RlZCB0b3AgbnVtYmVyIG9mIG1ldGVyXCI7XG5cdFx0XHRcdFx0XHRyZXQubnVtICs9IHRvay50b2tlbjtcblx0XHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB0aHJvdyBcIkV4cGVjdGVkIHRvcCBudW1iZXIgb2YgbWV0ZXJcIjtcblx0XHRcdFx0XHRcdHRvayA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gcmV0O1x0Ly8ganVzdCB0byBzdXBwcmVzcyB3YXJuaW5nXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dmFyIHBhcnNlRnJhY3Rpb24gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHQvLyBoYW5kbGVzIHRoaXMgbXVjaDogcGFyc2VOdW0gc2xhc2ggZGVjaW1hbFxuXHRcdFx0XHRcdHZhciByZXQgPSBwYXJzZU51bSgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuXHRcdFx0XHRcdHZhciB0b2sgPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rLnRva2VuICE9PSAnLycpIHRocm93IFwiRXhwZWN0ZWQgc2xhc2ggaW4gbWV0ZXJcIjtcblx0XHRcdFx0XHR0b2sgPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rLnR5cGUgIT09ICdudW1iZXInKSB0aHJvdyBcIkV4cGVjdGVkIGJvdHRvbSBudW1iZXIgb2YgbWV0ZXJcIjtcblx0XHRcdFx0XHRyZXQuZGVuID0gdG9rLnRva2VuO1xuXHRcdFx0XHRcdHJldC52YWx1ZSA9IHJldC52YWx1ZSAvIHBhcnNlSW50KHJldC5kZW4pO1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHRocm93IFwiRXhwZWN0ZWQgbWV0ZXIgZGVmaW5pdGlvbiBpbiBNOiBsaW5lXCI7XG5cdFx0XHRcdHZhciBtZXRlciA9IHt0eXBlOiAnc3BlY2lmaWVkJywgdmFsdWU6IFsgXX07XG5cdFx0XHRcdHZhciB0b3RhbExlbmd0aCA9IDA7XG5cdFx0XHRcdHdoaWxlICgxKSB7XG5cdFx0XHRcdFx0dmFyIHJldCA9IHBhcnNlRnJhY3Rpb24oKTtcblx0XHRcdFx0XHR0b3RhbExlbmd0aCArPSByZXQudmFsdWU7XG5cdFx0XHRcdFx0dmFyIG12ID0geyBudW06IHJldC5udW0gfTtcblx0XHRcdFx0XHRpZiAocmV0LmRlbiAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0bXYuZGVuID0gcmV0LmRlbjtcblx0XHRcdFx0XHRtZXRlci52YWx1ZS5wdXNoKG12KTtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgYnJlYWs7XG5cdFx0XHRcdFx0Ly92YXIgdG9rID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0Ly9pZiAodG9rLnRva2VuICE9PSAnKycpIHRocm93IFwiRXh0cmEgY2hhcmFjdGVycyBpbiBNOiBsaW5lXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSB0b3RhbExlbmd0aCA8IDAuNzUgPyAwLjA2MjUgOiAwLjEyNTtcblx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1ldGVyO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR3YXJuKGUsIGxpbmUsIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHR0aGlzLmNhbGNUZW1wbyA9IGZ1bmN0aW9uKHJlbFRlbXBvKSB7XG5cdFx0dmFyIGR1ciA9IDEvNDtcblx0XHRpZiAobXVsdGlsaW5lVmFycy5tZXRlciAmJiBtdWx0aWxpbmVWYXJzLm1ldGVyLnR5cGUgPT09ICdzcGVjaWZpZWQnKSB7XG5cdFx0XHRkdXIgPSAxIC8gcGFyc2VJbnQobXVsdGlsaW5lVmFycy5tZXRlci52YWx1ZVswXS5kZW4pO1xuXHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5vcmlnTWV0ZXIgJiYgbXVsdGlsaW5lVmFycy5vcmlnTWV0ZXIudHlwZSA9PT0gJ3NwZWNpZmllZCcpIHtcblx0XHRcdGR1ciA9IDEgLyBwYXJzZUludChtdWx0aWxpbmVWYXJzLm9yaWdNZXRlci52YWx1ZVswXS5kZW4pO1xuXHRcdH1cblx0XHQvL3ZhciBkdXIgPSBtdWx0aWxpbmVWYXJzLmRlZmF1bHRfbGVuZ3RoID8gbXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA6IDE7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZWxUZW1wby5kdXJhdGlvbjsgaSsrKVxuXHRcdFx0cmVsVGVtcG8uZHVyYXRpb25baV0gPSBkdXIgKiByZWxUZW1wby5kdXJhdGlvbltpXTtcblx0XHRyZXR1cm4gcmVsVGVtcG87XG5cdH07XG5cblx0dGhpcy5yZXNvbHZlVGVtcG8gPSBmdW5jdGlvbigpIHtcblx0XHRpZiAobXVsdGlsaW5lVmFycy50ZW1wbykge1x0Ly8gSWYgdGhlcmUncyBhIHRlbXBvIHdhaXRpbmcgdG8gYmUgcmVzb2x2ZWRcblx0XHRcdHRoaXMuY2FsY1RlbXBvKG11bHRpbGluZVZhcnMudGVtcG8pO1xuXHRcdFx0dHVuZS5tZXRhVGV4dC50ZW1wbyA9IG11bHRpbGluZVZhcnMudGVtcG87XG5cdFx0XHRkZWxldGUgbXVsdGlsaW5lVmFycy50ZW1wbztcblx0XHR9XG5cdH07XG5cblx0dGhpcy5hZGRVc2VyRGVmaW5pdGlvbiA9IGZ1bmN0aW9uKGxpbmUsIHN0YXJ0LCBlbmQpIHtcblx0XHR2YXIgZXF1YWxzID0gbGluZS5pbmRleE9mKCc9Jywgc3RhcnQpO1xuXHRcdGlmIChlcXVhbHMgPT09IC0xKSB7XG5cdFx0XHR3YXJuKFwiTmVlZCBhbiA9IGluIGEgbWFjcm8gZGVmaW5pdGlvblwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGJlZm9yZSA9IHBhcnNlQ29tbW9uLnN0cmlwKGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBlcXVhbHMpKTtcblx0XHR2YXIgYWZ0ZXIgPSBwYXJzZUNvbW1vbi5zdHJpcChsaW5lLnN1YnN0cmluZyhlcXVhbHMrMSkpO1xuXG5cdFx0aWYgKGJlZm9yZS5sZW5ndGggIT09IDEpIHtcblx0XHRcdHdhcm4oXCJNYWNybyBkZWZpbml0aW9ucyBjYW4gb25seSBiZSBvbmUgY2hhcmFjdGVyXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dmFyIGxlZ2FsQ2hhcnMgPSBcIkhJSktMTU5PUFFSU1RVVldYWWhpamtsbW5vcHFyc3R1dnd+XCI7XG5cdFx0aWYgKGxlZ2FsQ2hhcnMuaW5kZXhPZihiZWZvcmUpID09PSAtMSkge1xuXHRcdFx0d2FybihcIk1hY3JvIGRlZmluaXRpb25zIG11c3QgYmUgSC1ZLCBoLXcsIG9yIHRpbGRlXCIsIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGFmdGVyLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0d2FybihcIk1pc3NpbmcgbWFjcm8gZGVmaW5pdGlvblwiLCBsaW5lLCBzdGFydCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChtdWx0aWxpbmVWYXJzLm1hY3JvcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0bXVsdGlsaW5lVmFycy5tYWNyb3MgPSB7fTtcblx0XHRtdWx0aWxpbmVWYXJzLm1hY3Jvc1tiZWZvcmVdID0gYWZ0ZXI7XG5cdH07XG5cblx0dGhpcy5zZXREZWZhdWx0TGVuZ3RoID0gZnVuY3Rpb24obGluZSwgc3RhcnQsIGVuZCkge1xuXHRcdHZhciBsZW4gPSBwYXJzZUNvbW1vbi5nc3ViKGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLCBcIiBcIiwgXCJcIik7XG5cdFx0dmFyIGxlbl9hcnIgPSBsZW4uc3BsaXQoJy8nKTtcblx0XHRpZiAobGVuX2Fyci5sZW5ndGggPT09IDIpIHtcblx0XHRcdHZhciBuID0gcGFyc2VJbnQobGVuX2FyclswXSk7XG5cdFx0XHR2YXIgZCA9IHBhcnNlSW50KGxlbl9hcnJbMV0pO1xuXHRcdFx0aWYgKGQgPiAwKSB7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggPSBuIC8gZDtcdC8vIGEgd2hvbGUgbm90ZSBpcyAxXG5cdFx0XHRcdG11bHRpbGluZVZhcnMuaGF2ZW50X3NldF9sZW5ndGggPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGxlbl9hcnIubGVuZ3RoID09PSAxICYmIGxlbl9hcnJbMF0gPT09ICcxJykge1xuXHRcdFx0bXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCA9IDE7XG5cdFx0XHRtdWx0aWxpbmVWYXJzLmhhdmVudF9zZXRfbGVuZ3RoID0gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cblx0dmFyIHRlbXBvU3RyaW5nID0ge1xuXG5cdFx0bGFyZ2hpc3NpbW86IDIwLFxuXHRcdGFkYWdpc3NpbW86IDI0LFxuXHRcdHNvc3RlbnV0bzogMjgsXG5cdFx0Z3JhdmU6IDMyLFxuXHRcdGxhcmdvOiA0MCxcblx0XHRsZW50bzogNTAsXG5cdFx0bGFyZ2hldHRvOiA2MCxcblx0XHRhZGFnaW86IDY4LFxuXHRcdGFkYWdpZXR0bzogNzQsXG5cdFx0YW5kYW50ZTogODAsXG5cdFx0YW5kYW50aW5vOiA4OCxcblx0XHRcIm1hcmNpYSBtb2RlcmF0b1wiOiA4NCxcblx0XHRcImFuZGFudGUgbW9kZXJhdG9cIjogMTAwLFxuXHRcdG1vZGVyYXRvOiAxMTIsXG5cdFx0YWxsZWdyZXR0bzogMTE2LFxuXHRcdFwiYWxsZWdybyBtb2RlcmF0b1wiOiAxMjAsXG5cdFx0YWxsZWdybzogMTI2LFxuXHRcdGFuaW1hdG86IDEzMixcblx0XHRhZ2l0YXRvOiAxNDAsXG5cdFx0dmVsb2NlOiAxNDgsXG5cdFx0XCJtb3NzbyB2aXZvXCI6IDE1Nixcblx0XHR2aXZhY2U6IDE2NCxcblx0XHR2aXZhY2lzc2ltbzogMTcyLFxuXHRcdGFsbGVncmlzc2ltbzogMTc2LFxuXHRcdHByZXN0bzogMTg0LFxuXHRcdHByZXN0aXNzaW1vOiAyMTAsXG5cdH07XG5cblx0dGhpcy5zZXRUZW1wbyA9IGZ1bmN0aW9uKGxpbmUsIHN0YXJ0LCBlbmQpIHtcblx0XHQvL1EgLSB0ZW1wbzsgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbm90ZXMgcGVyIG1pbnV0ZSwgZS5nLiBJZlxuXHRcdC8vdGhlIG1ldGVyIGRlbm9taW5hdG9yIGlzIGEgNCBub3RlIHRoZW4gUToxMjAgb3IgUTpDPTEyMFxuXHRcdC8vaXMgMTIwIHF1YXJ0ZXIgbm90ZXMgcGVyIG1pbnV0ZS4gU2ltaWxhcmx5ICBROkMzPTQwIHdvdWxkIGJlIDQwXG5cdFx0Ly9kb3R0ZWQgaGFsZiBub3RlcyBwZXIgbWludXRlLiBBbiBhYnNvbHV0ZSB0ZW1wbyBtYXkgYWxzbyBiZVxuXHRcdC8vc2V0LCBlLmcuIFE6MS84PTEyMCBpcyAxMjAgZWlnaHRoIG5vdGVzIHBlciBtaW51dGUsXG5cdFx0Ly9pcnJlc3BlY3RpdmUgb2YgdGhlIG1ldGVyJ3MgZGVub21pbmF0b3IuXG5cdFx0Ly9cblx0XHQvLyBUaGlzIGlzIGVpdGhlciBhIG51bWJlciwgXCJDPW51bWJlclwiLCBcIkNudW1iZXI9bnVtYmVyXCIsIG9yIGZyYWN0aW9uIFtmcmFjdGlvbi4uLl09bnVtYmVyXG5cdFx0Ly8gSXQgZGVwZW5kcyBvbiB0aGUgTTogZmllbGQsIHdoaWNoIG1heSBlaXRoZXIgbm90IGJlIHByZXNlbnQsIG9yIG1heSBhcHBlYXIgYWZ0ZXIgdGhpcy5cblx0XHQvLyBJZiBNOiBpcyBub3QgcHJlc2VudCwgYW4gZWlnaHRoIG5vdGUgaXMgdXNlZC5cblx0XHQvLyBUaGF0IG1lYW5zIHRoYXQgdGhpcyBmaWVsZCBjYW4ndCBiZSBjYWxjdWxhdGVkIHVudGlsIHRoZSBlbmQsIGlmIGl0IGlzIHRoZSBmaXJzdCB0aHJlZSB0eXBlcywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB3ZSdsbCBzZWUgYW4gTTogZmllbGQuXG5cdFx0Ly8gU28sIGlmIGl0IGlzIHRoZSBmb3VydGggdHlwZSwgc2V0IGl0IGhlcmUsIG90aGVyd2lzZSwgc2F2ZSB0aGUgaW5mbyBpbiB0aGUgbXVsdGlsaW5lVmFycy5cblx0XHQvLyBUaGUgdGVtcG9yYXJ5IHZhcmlhYmxlcyB3ZSBrZWVwIGFyZSB0aGUgZHVyYXRpb24gYW5kIHRoZSBicG0uIEluIHRoZSBmaXJzdCB0d28gZm9ybXMsIHRoZSBkdXJhdGlvbiBpcyAxLlxuXHRcdC8vIEluIGFkZGl0aW9uLCBhIHF1b3RlZCBzdHJpbmcgbWF5IGJvdGggcHJlY2VkZSBhbmQgZm9sbG93LiBJZiBhIHF1b3RlZCBzdHJpbmcgaXMgcHJlc2VudCwgdGhlbiB0aGUgZHVyYXRpb24gcGFydCBpcyBvcHRpb25hbC5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHRva2VucyA9IHRva2VuaXplci50b2tlbml6ZShsaW5lLCBzdGFydCwgZW5kKTtcblxuXHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHRocm93IFwiTWlzc2luZyBwYXJhbWV0ZXIgaW4gUTogZmllbGRcIjtcblxuXHRcdFx0dmFyIHRlbXBvID0ge307XG5cdFx0XHR2YXIgZGVsYXlTZXQgPSB0cnVlO1xuXHRcdFx0dmFyIHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3F1b3RlJykge1xuXHRcdFx0XHR0ZW1wby5wcmVTdHJpbmcgPSB0b2tlbi50b2tlbjtcblx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcdC8vIEl0J3Mgb2sgdG8ganVzdCBnZXQgYSBzdHJpbmcgZm9yIHRoZSB0ZW1wb1xuXHRcdFx0XHRcdC8vIElmIHRoZSBzdHJpbmcgaXMgYSB3ZWxsLWtub3duIHRlbXBvLCBwdXQgaW4gdGhlIGJwbVxuXHRcdFx0XHRcdGlmICh0ZW1wb1N0cmluZ1t0ZW1wby5wcmVTdHJpbmcudG9Mb3dlckNhc2UoKV0pIHtcblx0XHRcdFx0XHRcdHRlbXBvLmJwbSA9IHRlbXBvU3RyaW5nW3RlbXBvLnByZVN0cmluZy50b0xvd2VyQ2FzZSgpXTtcblx0XHRcdFx0XHRcdHRlbXBvLnN1cHByZXNzQnBtID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHt0eXBlOiAnaW1tZWRpYXRlJywgdGVtcG86IHRlbXBvfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICdhbHBoYScgJiYgdG9rZW4udG9rZW4gPT09ICdDJylcdCB7IC8vIGVpdGhlciB0eXBlIDIgb3IgdHlwZSAzXG5cdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB0aHJvdyBcIk1pc3NpbmcgdGVtcG8gYWZ0ZXIgQyBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3B1bmN0JyAmJiB0b2tlbi50b2tlbiA9PT0gJz0nKSB7XG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHR5cGUgMiBmb3JtYXQuIFRoZSBkdXJhdGlvbiBpcyBhbiBpbXBsaWVkIDFcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgdGhyb3cgXCJNaXNzaW5nIHRlbXBvIGFmdGVyID0gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgPSBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uID0gWzFdO1xuXHRcdFx0XHRcdHRlbXBvLmJwbSA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRcdC8vIFRoaXMgaXMgYSB0eXBlIDMgZm9ybWF0LlxuXHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uID0gW3BhcnNlSW50KHRva2VuLnRva2VuKV07XG5cdFx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHRocm93IFwiTWlzc2luZyA9IGFmdGVyIGR1cmF0aW9uIGluIFE6IGZpZWxkXCI7XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ3B1bmN0JyB8fCB0b2tlbi50b2tlbiAhPT0gJz0nKSB0aHJvdyBcIkV4cGVjdGVkID0gYWZ0ZXIgZHVyYXRpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgdGhyb3cgXCJNaXNzaW5nIHRlbXBvIGFmdGVyID0gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBudW1iZXIgYWZ0ZXIgPSBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdHRlbXBvLmJwbSA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0fSBlbHNlIHRocm93IFwiRXhwZWN0ZWQgbnVtYmVyIG9yIGVxdWFsIGFmdGVyIEMgaW4gUTogZmllbGRcIjtcblxuXHRcdFx0fSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAnbnVtYmVyJykge1x0Ly8gZWl0aGVyIHR5cGUgMSBvciB0eXBlIDRcblx0XHRcdFx0dmFyIG51bSA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDAgfHwgdG9rZW5zWzBdLnR5cGUgPT09ICdxdW90ZScpIHtcblx0XHRcdFx0XHQvLyBUaGlzIGlzIHR5cGUgMVxuXHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uID0gWzFdO1xuXHRcdFx0XHRcdHRlbXBvLmJwbSA9IG51bTtcblx0XHRcdFx0fSBlbHNlIHtcdC8vIFRoaXMgaXMgdHlwZSA0XG5cdFx0XHRcdFx0ZGVsYXlTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAncHVuY3QnICYmIHRva2VuLnRva2VuICE9PSAnLycpIHRocm93IFwiRXhwZWN0ZWQgZnJhY3Rpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBmcmFjdGlvbiBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdHZhciBkZW4gPSBwYXJzZUludCh0b2tlbi50b2tlbik7XG5cdFx0XHRcdFx0dGVtcG8uZHVyYXRpb24gPSBbbnVtL2Rlbl07XG5cdFx0XHRcdFx0Ly8gV2UgZ290IHRoZSBmaXJzdCBmcmFjdGlvbiwga2VlcCBnZXR0aW5nIG1vcmUgYXMgbG9uZyBhcyB3ZSBmaW5kIHRoZW0uXG5cdFx0XHRcdFx0d2hpbGUgKHRva2Vucy5sZW5ndGggPiAwICAmJiB0b2tlbnNbMF0udG9rZW4gIT09ICc9JyAmJiB0b2tlbnNbMF0udHlwZSAhPT0gJ3F1b3RlJykge1xuXHRcdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAnbnVtYmVyJykgdGhyb3cgXCJFeHBlY3RlZCBmcmFjdGlvbiBpbiBROiBmaWVsZFwiO1xuXHRcdFx0XHRcdFx0bnVtID0gcGFyc2VJbnQodG9rZW4udG9rZW4pO1xuXHRcdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi50eXBlICE9PSAncHVuY3QnICYmIHRva2VuLnRva2VuICE9PSAnLycpIHRocm93IFwiRXhwZWN0ZWQgZnJhY3Rpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ251bWJlcicpIHRocm93IFwiRXhwZWN0ZWQgZnJhY3Rpb24gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHRcdGRlbiA9IHBhcnNlSW50KHRva2VuLnRva2VuKTtcblx0XHRcdFx0XHRcdHRlbXBvLmR1cmF0aW9uLnB1c2gobnVtL2Rlbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKHRva2VuLnR5cGUgIT09ICdwdW5jdCcgJiYgdG9rZW4udG9rZW4gIT09ICc9JykgdGhyb3cgXCJFeHBlY3RlZCA9IGluIFE6IGZpZWxkXCI7XG5cdFx0XHRcdFx0dG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ251bWJlcicpIHRocm93IFwiRXhwZWN0ZWQgdGVtcG8gaW4gUTogZmllbGRcIjtcblx0XHRcdFx0XHR0ZW1wby5icG0gPSBwYXJzZUludCh0b2tlbi50b2tlbik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB0aHJvdyBcIlVua25vd24gdmFsdWUgaW4gUTogZmllbGRcIjtcblx0XHRcdGlmICh0b2tlbnMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdGlmICh0b2tlbi50eXBlID09PSAncXVvdGUnKSB7XG5cdFx0XHRcdFx0dGVtcG8ucG9zdFN0cmluZyA9IHRva2VuLnRva2VuO1xuXHRcdFx0XHRcdHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggIT09IDApIHRocm93IFwiVW5leHBlY3RlZCBzdHJpbmcgYXQgZW5kIG9mIFE6IGZpZWxkXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5wcmludFRlbXBvID09PSBmYWxzZSlcblx0XHRcdFx0dGVtcG8uc3VwcHJlc3MgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIHt0eXBlOiBkZWxheVNldD8nZGVsYXlTZXQnOidpbW1lZGlhdGUnLCB0ZW1wbzogdGVtcG99O1xuXHRcdH0gY2F0Y2ggKG1zZykge1xuXHRcdFx0d2Fybihtc2csIGxpbmUsIHN0YXJ0KTtcblx0XHRcdHJldHVybiB7dHlwZTogJ25vbmUnfTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5sZXR0ZXJfdG9faW5saW5lX2hlYWRlciA9IGZ1bmN0aW9uKGxpbmUsIGkpXG5cdHtcblx0XHR2YXIgd3MgPSB0b2tlbml6ZXIuZWF0V2hpdGVTcGFjZShsaW5lLCBpKTtcblx0XHRpICs9d3M7XG5cdFx0aWYgKGxpbmUubGVuZ3RoID49IGkrNSAmJiBsaW5lLmNoYXJBdChpKSA9PT0gJ1snICYmIGxpbmUuY2hhckF0KGkrMikgPT09ICc6Jykge1xuXHRcdFx0dmFyIGUgPSBsaW5lLmluZGV4T2YoJ10nLCBpKTtcblx0XHRcdHZhciBzdGFydENoYXIgPSBtdWx0aWxpbmVWYXJzLmlDaGFyICsgaTtcblx0XHRcdHZhciBlbmRDaGFyID0gbXVsdGlsaW5lVmFycy5pQ2hhciArIGUgKyAxO1xuXHRcdFx0c3dpdGNoKGxpbmUuc3Vic3RyaW5nKGksIGkrMykpXG5cdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJbSTpcIjpcblx0XHRcdFx0XHR2YXIgZXJyID0gcGFyc2VEaXJlY3RpdmUuYWRkRGlyZWN0aXZlKGxpbmUuc3Vic3RyaW5nKGkrMywgZSkpO1xuXHRcdFx0XHRcdGlmIChlcnIpIHdhcm4oZXJyLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cyBdO1xuXHRcdFx0XHRjYXNlIFwiW006XCI6XG5cdFx0XHRcdFx0dmFyIG1ldGVyID0gdGhpcy5zZXRNZXRlcihsaW5lLnN1YnN0cmluZyhpKzMsIGUpKTtcblx0XHRcdFx0XHRpZiAodHVuZS5oYXNCZWdpbk11c2ljKCkgJiYgbWV0ZXIpXG5cdFx0XHRcdFx0XHR0dW5lLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCgnbWV0ZXInLCBzdGFydENoYXIsIGVuZENoYXIsIG1ldGVyKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm1ldGVyID0gbWV0ZXI7XG5cdFx0XHRcdFx0cmV0dXJuIFsgZS1pKzErd3MgXTtcblx0XHRcdFx0Y2FzZSBcIltLOlwiOlxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBwYXJzZUtleVZvaWNlLnBhcnNlS2V5KGxpbmUuc3Vic3RyaW5nKGkrMywgZSkpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRDbGVmICYmIHR1bmUuaGFzQmVnaW5NdXNpYygpKVxuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRTdGFydGluZ0VsZW1lbnQoJ2NsZWYnLCBzdGFydENoYXIsIGVuZENoYXIsIG11bHRpbGluZVZhcnMuY2xlZik7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdC5mb3VuZEtleSAmJiB0dW5lLmhhc0JlZ2luTXVzaWMoKSlcblx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kU3RhcnRpbmdFbGVtZW50KCdrZXknLCBzdGFydENoYXIsIGVuZENoYXIsIHBhcnNlS2V5Vm9pY2UuZml4S2V5KG11bHRpbGluZVZhcnMuY2xlZiwgbXVsdGlsaW5lVmFycy5rZXkpKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cyBdO1xuXHRcdFx0XHRjYXNlIFwiW1A6XCI6XG5cdFx0XHRcdFx0aWYgKHR1bmUubGluZXMubGVuZ3RoIDw9IHR1bmUubGluZU51bSlcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMucGFydEZvck5leHRMaW5lID0geyB0aXRsZTogbGluZS5zdWJzdHJpbmcoaSszLCBlKSwgc3RhcnRDaGFyOiBzdGFydENoYXIsIGVuZENoYXI6IGVuZENoYXIgfTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0dW5lLmFwcGVuZEVsZW1lbnQoJ3BhcnQnLCBzdGFydENoYXIsIGVuZENoYXIsIHt0aXRsZTogbGluZS5zdWJzdHJpbmcoaSszLCBlKX0pO1xuXHRcdFx0XHRcdHJldHVybiBbIGUtaSsxK3dzIF07XG5cdFx0XHRcdGNhc2UgXCJbTDpcIjpcblx0XHRcdFx0XHR0aGlzLnNldERlZmF1bHRMZW5ndGgobGluZSwgaSszLCBlKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cyBdO1xuXHRcdFx0XHRjYXNlIFwiW1E6XCI6XG5cdFx0XHRcdFx0aWYgKGUgPiAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgdGVtcG8gPSB0aGlzLnNldFRlbXBvKGxpbmUsIGkrMywgZSk7XG5cdFx0XHRcdFx0XHRpZiAodGVtcG8udHlwZSA9PT0gJ2RlbGF5U2V0JykgdHVuZS5hcHBlbmRFbGVtZW50KCd0ZW1wbycsIHN0YXJ0Q2hhciwgZW5kQ2hhciwgdGhpcy5jYWxjVGVtcG8odGVtcG8udGVtcG8pKTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKHRlbXBvLnR5cGUgPT09ICdpbW1lZGlhdGUnKSB0dW5lLmFwcGVuZEVsZW1lbnQoJ3RlbXBvJywgc3RhcnRDaGFyLCBlbmRDaGFyLCB0ZW1wby50ZW1wbyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cywgbGluZS5jaGFyQXQoaSsxKSwgbGluZS5zdWJzdHJpbmcoaSszLCBlKV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiW1Y6XCI6XG5cdFx0XHRcdFx0aWYgKGUgPiAwKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUtleVZvaWNlLnBhcnNlVm9pY2UobGluZSwgaSszLCBlKTtcblx0XHRcdFx0XHRcdC8vc3RhcnROZXdMaW5lKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlLWkrMSt3cywgbGluZS5jaGFyQXQoaSsxKSwgbGluZS5zdWJzdHJpbmcoaSszLCBlKV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gVE9ETzogY29tcGxhaW4gYWJvdXQgdW5oYW5kbGVkIGhlYWRlclxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gWyAwIF07XG5cdH07XG5cblx0dGhpcy5sZXR0ZXJfdG9fYm9keV9oZWFkZXIgPSBmdW5jdGlvbihsaW5lLCBpKVxuXHR7XG5cdFx0aWYgKGxpbmUubGVuZ3RoID49IGkrMykge1xuXHRcdFx0c3dpdGNoKGxpbmUuc3Vic3RyaW5nKGksIGkrMikpXG5cdFx0XHR7XG5cdFx0XHRcdGNhc2UgXCJJOlwiOlxuXHRcdFx0XHRcdHZhciBlcnIgPSBwYXJzZURpcmVjdGl2ZS5hZGREaXJlY3RpdmUobGluZS5zdWJzdHJpbmcoaSsyKSk7XG5cdFx0XHRcdFx0aWYgKGVycikgd2FybihlcnIsIGxpbmUsIGkpO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJNOlwiOlxuXHRcdFx0XHRcdHZhciBtZXRlciA9IHRoaXMuc2V0TWV0ZXIobGluZS5zdWJzdHJpbmcoaSsyKSk7XG5cdFx0XHRcdFx0aWYgKHR1bmUuaGFzQmVnaW5NdXNpYygpICYmIG1ldGVyKVxuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRTdGFydGluZ0VsZW1lbnQoJ21ldGVyJywgbXVsdGlsaW5lVmFycy5pQ2hhciArIGksIG11bHRpbGluZVZhcnMuaUNoYXIgKyBsaW5lLmxlbmd0aCwgbWV0ZXIpO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJLOlwiOlxuXHRcdFx0XHRcdHZhciByZXN1bHQgPSBwYXJzZUtleVZvaWNlLnBhcnNlS2V5KGxpbmUuc3Vic3RyaW5nKGkrMikpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRDbGVmICYmIHR1bmUuaGFzQmVnaW5NdXNpYygpKVxuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRTdGFydGluZ0VsZW1lbnQoJ2NsZWYnLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgaSwgbXVsdGlsaW5lVmFycy5pQ2hhciArIGxpbmUubGVuZ3RoLCBtdWx0aWxpbmVWYXJzLmNsZWYpO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRLZXkgJiYgdHVuZS5oYXNCZWdpbk11c2ljKCkpXG5cdFx0XHRcdFx0XHR0dW5lLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCgna2V5JywgbXVsdGlsaW5lVmFycy5pQ2hhciArIGksIG11bHRpbGluZVZhcnMuaUNoYXIgKyBsaW5lLmxlbmd0aCwgcGFyc2VLZXlWb2ljZS5maXhLZXkobXVsdGlsaW5lVmFycy5jbGVmLCBtdWx0aWxpbmVWYXJzLmtleSkpO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJQOlwiOlxuXHRcdFx0XHRcdGlmICh0dW5lLmhhc0JlZ2luTXVzaWMoKSlcblx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kRWxlbWVudCgncGFydCcsIG11bHRpbGluZVZhcnMuaUNoYXIgKyBpLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgbGluZS5sZW5ndGgsIHt0aXRsZTogbGluZS5zdWJzdHJpbmcoaSsyKX0pO1xuXHRcdFx0XHRcdHJldHVybiBbIGxpbmUubGVuZ3RoIF07XG5cdFx0XHRcdGNhc2UgXCJMOlwiOlxuXHRcdFx0XHRcdHRoaXMuc2V0RGVmYXVsdExlbmd0aChsaW5lLCBpKzIsIGxpbmUubGVuZ3RoKTtcblx0XHRcdFx0XHRyZXR1cm4gWyBsaW5lLmxlbmd0aCBdO1xuXHRcdFx0XHRjYXNlIFwiUTpcIjpcblx0XHRcdFx0XHR2YXIgZSA9IGxpbmUuaW5kZXhPZignXFx4MTInLCBpKzIpO1xuXHRcdFx0XHRcdGlmIChlID09PSAtMSkgZSA9IGxpbmUubGVuZ3RoO1xuXHRcdFx0XHRcdHZhciB0ZW1wbyA9IHRoaXMuc2V0VGVtcG8obGluZSwgaSsyLCBlKTtcblx0XHRcdFx0XHRpZiAodGVtcG8udHlwZSA9PT0gJ2RlbGF5U2V0JykgdHVuZS5hcHBlbmRFbGVtZW50KCd0ZW1wbycsIG11bHRpbGluZVZhcnMuaUNoYXIgKyBpLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgbGluZS5sZW5ndGgsIHRoaXMuY2FsY1RlbXBvKHRlbXBvLnRlbXBvKSk7XG5cdFx0XHRcdFx0ZWxzZSBpZiAodGVtcG8udHlwZSA9PT0gJ2ltbWVkaWF0ZScpIHR1bmUuYXBwZW5kRWxlbWVudCgndGVtcG8nLCBtdWx0aWxpbmVWYXJzLmlDaGFyICsgaSwgbXVsdGlsaW5lVmFycy5pQ2hhciArIGxpbmUubGVuZ3RoLCB0ZW1wby50ZW1wbyk7XG5cdFx0XHRcdHJldHVybiBbIGUsIGxpbmUuY2hhckF0KGkpLCBwYXJzZUNvbW1vbi5zdHJpcChsaW5lLnN1YnN0cmluZyhpKzIpKV07XG5cdFx0XHRcdGNhc2UgXCJWOlwiOlxuXHRcdFx0XHRcdHBhcnNlS2V5Vm9pY2UucGFyc2VWb2ljZShsaW5lLCBpKzIsIGxpbmUubGVuZ3RoKTtcbi8vXHRcdFx0XHRcdFx0c3RhcnROZXdMaW5lKCk7XG5cdFx0XHRcdFx0cmV0dXJuIFsgbGluZS5sZW5ndGgsIGxpbmUuY2hhckF0KGkpLCBwYXJzZUNvbW1vbi5zdHJpcChsaW5lLnN1YnN0cmluZyhpKzIpKV07XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gVE9ETzogY29tcGxhaW4gYWJvdXQgdW5oYW5kbGVkIGhlYWRlclxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gWyAwIF07XG5cdH07XG5cblx0dmFyIG1ldGFUZXh0SGVhZGVycyA9IHtcblx0XHRBOiAnYXV0aG9yJyxcblx0XHRCOiAnYm9vaycsXG5cdFx0QzogJ2NvbXBvc2VyJyxcblx0XHREOiAnZGlzY29ncmFwaHknLFxuXHRcdEY6ICd1cmwnLFxuXHRcdEc6ICdncm91cCcsXG5cdFx0STogJ2luc3RydWN0aW9uJyxcblx0XHROOiAnbm90ZXMnLFxuXHRcdE86ICdvcmlnaW4nLFxuXHRcdFI6ICdyaHl0aG0nLFxuXHRcdFM6ICdzb3VyY2UnLFxuXHRcdFc6ICd1bmFsaWduZWRXb3JkcycsXG5cdFx0WjogJ3RyYW5zY3JpcHRpb24nXG5cdH07XG5cblx0dGhpcy5wYXJzZUhlYWRlciA9IGZ1bmN0aW9uKGxpbmUpIHtcblx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChsaW5lLCAnJSUnKSkge1xuXHRcdFx0dmFyIGVyciA9IHBhcnNlRGlyZWN0aXZlLmFkZERpcmVjdGl2ZShsaW5lLnN1YnN0cmluZygyKSk7XG5cdFx0XHRpZiAoZXJyKSB3YXJuKGVyciwgbGluZSwgMik7XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fVxuXHRcdHZhciBpID0gbGluZS5pbmRleE9mKCclJyk7XG5cdFx0aWYgKGkgPj0gMClcblx0XHRcdGxpbmUgPSBsaW5lLnN1YnN0cmluZygwLCBpKTtcblx0XHRsaW5lID0gbGluZS5yZXBsYWNlKC9cXHMrJC8sICcnKTtcblxuXHRcdGlmIChsaW5lLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB7fTtcblxuXHRcdGlmIChsaW5lLmxlbmd0aCA+PSAyKSB7XG5cdFx0XHRpZiAobGluZS5jaGFyQXQoMSkgPT09ICc6Jykge1xuXHRcdFx0XHR2YXIgbmV4dExpbmUgPSBcIlwiO1xuXHRcdFx0XHRpZiAobGluZS5pbmRleE9mKCdcXHgxMicpID49IDAgJiYgbGluZS5jaGFyQXQoMCkgIT09ICd3Jykge1x0Ly8gdzogaXMgdGhlIG9ubHkgaGVhZGVyIGZpZWxkIHRoYXQgY2FuIGhhdmUgYSBjb250aW51YXRpb24uXG5cdFx0XHRcdFx0bmV4dExpbmUgPSBsaW5lLnN1YnN0cmluZyhsaW5lLmluZGV4T2YoJ1xceDEyJykrMSk7XG5cdFx0XHRcdFx0bGluZSA9IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUuaW5kZXhPZignXFx4MTInKSk7XHQvL1RoaXMgaGFuZGxlcyBhIGNvbnRpbnVhdGlvbiBtYXJrIG9uIGEgaGVhZGVyIGZpZWxkXG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGZpZWxkID0gbWV0YVRleHRIZWFkZXJzW2xpbmUuY2hhckF0KDApXTtcblx0XHRcdFx0aWYgKGZpZWxkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoZmllbGQgPT09ICd1bmFsaWduZWRXb3JkcycpXG5cdFx0XHRcdFx0XHR0dW5lLmFkZE1ldGFUZXh0QXJyYXkoZmllbGQsIHBhcnNlRGlyZWN0aXZlLnBhcnNlRm9udENoYW5nZUxpbmUodG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUuc3Vic3RyaW5nKDIpKSkpKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR0dW5lLmFkZE1ldGFUZXh0KGZpZWxkLCB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci5zdHJpcENvbW1lbnQobGluZS5zdWJzdHJpbmcoMikpKSk7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBzdGFydENoYXIgPSBtdWx0aWxpbmVWYXJzLmlDaGFyO1xuXHRcdFx0XHRcdHZhciBlbmRDaGFyID0gc3RhcnRDaGFyICsgbGluZS5sZW5ndGg7XG5cdFx0XHRcdFx0c3dpdGNoKGxpbmUuY2hhckF0KDApKVxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNhc2UgICdIJzpcblx0XHRcdFx0XHRcdFx0dHVuZS5hZGRNZXRhVGV4dChcImhpc3RvcnlcIiwgdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUuc3Vic3RyaW5nKDIpKSkpO1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmlzX2luX2hpc3RvcnkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgICdLJzpcblx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgdGhlIGtleSBpcyB0aGUgbGFzdCB0aGluZyB0aGF0IGNhbiBoYXBwZW4gaW4gdGhlIGhlYWRlciwgd2UgY2FuIHJlc29sdmUgdGhlIHRlbXBvIG5vd1xuXHRcdFx0XHRcdFx0XHR0aGlzLnJlc29sdmVUZW1wbygpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcmVzdWx0ID0gcGFyc2VLZXlWb2ljZS5wYXJzZUtleShsaW5lLnN1YnN0cmluZygyKSk7XG5cdFx0XHRcdFx0XHRcdGlmICghbXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgJiYgdHVuZS5oYXNCZWdpbk11c2ljKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0LmZvdW5kQ2xlZilcblx0XHRcdFx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kU3RhcnRpbmdFbGVtZW50KCdjbGVmJywgc3RhcnRDaGFyLCBlbmRDaGFyLCBtdWx0aWxpbmVWYXJzLmNsZWYpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQuZm91bmRLZXkpXG5cdFx0XHRcdFx0XHRcdFx0XHR0dW5lLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCgna2V5Jywgc3RhcnRDaGFyLCBlbmRDaGFyLCBwYXJzZUtleVZvaWNlLmZpeEtleShtdWx0aWxpbmVWYXJzLmNsZWYsIG11bHRpbGluZVZhcnMua2V5KSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgPSBmYWxzZTtcdC8vIFRoZSBmaXJzdCBrZXkgc2lnbmlmaWVzIHRoZSBlbmQgb2YgdGhlIGhlYWRlci5cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICAnTCc6XG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0RGVmYXVsdExlbmd0aChsaW5lLCAyLCBsaW5lLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ00nOlxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm9yaWdNZXRlciA9IG11bHRpbGluZVZhcnMubWV0ZXIgPSB0aGlzLnNldE1ldGVyKGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICAnUCc6XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBUaGVyZSBpcyBtb3JlIHRvIGRvIHdpdGggcGFydHMsIGJ1dCB0aGUgd3JpdGVyIGRvZXNuJ3QgY2FyZS5cblx0XHRcdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaXNfaW5faGVhZGVyKVxuXHRcdFx0XHRcdFx0XHRcdHR1bmUuYWRkTWV0YVRleHQoXCJwYXJ0T3JkZXJcIiwgdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUuc3Vic3RyaW5nKDIpKSkpO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5wYXJ0Rm9yTmV4dExpbmUgPSB7IHRpdGxlOiB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHRva2VuaXplci5zdHJpcENvbW1lbnQobGluZS5zdWJzdHJpbmcoMikpKSwgc3RhcnRDaGFyOiBzdGFydENoYXIsIGVuZENoYXI6IGVuZENoYXJ9O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgICdRJzpcblx0XHRcdFx0XHRcdFx0dmFyIHRlbXBvID0gdGhpcy5zZXRUZW1wbyhsaW5lLCAyLCBsaW5lLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGlmICh0ZW1wby50eXBlID09PSAnZGVsYXlTZXQnKSBtdWx0aWxpbmVWYXJzLnRlbXBvID0gdGVtcG8udGVtcG87XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKHRlbXBvLnR5cGUgPT09ICdpbW1lZGlhdGUnKSB0dW5lLm1ldGFUZXh0LnRlbXBvID0gdGVtcG8udGVtcG87XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ1QnOlxuXHRcdFx0XHRcdFx0XHR0aGlzLnNldFRpdGxlKGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlICdVJzpcblx0XHRcdFx0XHRcdFx0dGhpcy5hZGRVc2VyRGVmaW5pdGlvbihsaW5lLCAyLCBsaW5lLmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ1YnOlxuXHRcdFx0XHRcdFx0XHRwYXJzZUtleVZvaWNlLnBhcnNlVm9pY2UobGluZSwgMiwgbGluZS5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoIW11bHRpbGluZVZhcnMuaXNfaW5faGVhZGVyKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7bmV3bGluZTogdHJ1ZX07XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ3MnOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge3N5bWJvbHM6IHRydWV9O1xuXHRcdFx0XHRcdFx0Y2FzZSAgJ3cnOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge3dvcmRzOiB0cnVlfTtcblx0XHRcdFx0XHRcdGNhc2UgJ1gnOlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0XHRcdFx0Y2FzZSAnbSc6XG5cdFx0XHRcdFx0XHRcdHdhcm4oXCJJZ25vcmVkIGhlYWRlclwiLCBsaW5lLCAwKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHQvLyBJdCB3YXNuJ3QgYSByZWNvZ25pemVkIGhlYWRlciB2YWx1ZSwgc28gcGFyc2UgaXQgYXMgbXVzaWMuXG5cdFx0XHRcdFx0XHRcdGlmIChuZXh0TGluZS5sZW5ndGgpXG5cdFx0XHRcdFx0XHRcdFx0bmV4dExpbmUgPSBcIlxceDEyXCIgKyBuZXh0TGluZTtcblx0XHRcdFx0XHRcdFx0Ly9wYXJzZVJlZ3VsYXJNdXNpY0xpbmUobGluZStuZXh0TGluZSk7XG5cdFx0XHRcdFx0XHRcdC8vbmV4dExpbmUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge3JlZ3VsYXI6IHRydWUsIHN0cjogbGluZStuZXh0TGluZX07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuZXh0TGluZS5sZW5ndGggPiAwKVxuXHRcdFx0XHRcdHJldHVybiB7cmVjdXJzZTogdHJ1ZSwgc3RyOiBuZXh0TGluZX07XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlIGhhdmUgYSByZWd1bGFyIGxpbmUgb2YgbXVsc2ljXG5cdFx0cmV0dXJuIHtyZWd1bGFyOiB0cnVlLCBzdHI6IGxpbmV9O1xuXHR9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBQYXJzZUhlYWRlcjtcbiIsIi8vICAgIGFiY190b2tlbml6ZXIuanM6IHRva2VuaXplcyBhbiBBQkMgTXVzaWMgTm90YXRpb24gc3RyaW5nIHRvIHN1cHBvcnQgYWJjX3BhcnNlLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggUGF1bCBSb3NlbiAocGF1bCBhdCBwYXVscm9zZW4gZG90IG5ldClcbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHBhcnNlQ29tbW9uID0gcmVxdWlyZSgnLi9hYmNfY29tbW9uJyk7XG5cbi8vIHRoaXMgaXMgYSBzZXJpZXMgb2YgZnVuY3Rpb25zIHRoYXQgZ2V0IGEgcGFydGljdWxhciBlbGVtZW50IG91dCBvZiB0aGUgcGFzc2VkIHN0cmVhbS5cbi8vIHRoZSByZXR1cm4gaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkLCBzbyAwIG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgd2Fzbid0IGZvdW5kLlxuLy8gYWxzbyByZXR1cm5lZCBpcyB0aGUgZWxlbWVudCBmb3VuZC4gVGhpcyBtYXkgYmUgYSBkaWZmZXJlbnQgbGVuZ3RoIGJlY2F1c2Ugc3BhY2VzIG1heSBiZSBjb25zdW1lZCB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBzdHJpbmcuXG4vLyBUaGUgcmV0dXJuIHN0cnVjdHVyZSBmb3IgbW9zdCBjYWxscyBpcyB7IGxlbjogbnVtX2NoYXJzX2NvbnN1bWVkLCB0b2tlbjogc3RyIH1cbnZhciBUb2tlbml6ZXIgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5za2lwV2hpdGVTcGFjZSA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICBpZiAoIXRoaXMuaXNXaGl0ZVNwYWNlKHN0ci5jaGFyQXQoaSkpKVxuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdFx0cmV0dXJuIHN0ci5sZW5ndGg7XHQvLyBJdCBtdXN0IGhhdmUgYmVlbiBhbGwgd2hpdGUgc3BhY2Vcblx0fTtcblx0dmFyIGZpbmlzaGVkID0gZnVuY3Rpb24oc3RyLCBpKSB7XG5cdFx0cmV0dXJuIGkgPj0gc3RyLmxlbmd0aDtcblx0fTtcblx0dGhpcy5lYXRXaGl0ZVNwYWNlID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHRmb3IgKHZhciBpID0gaW5kZXg7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdFx0ICBpZiAoIXRoaXMuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGkpKSlcblx0XHRcdFx0cmV0dXJuIGktaW5kZXg7XG5cdFx0fVxuXHRcdHJldHVybiBpLWluZGV4O1xuXHR9O1xuXG5cdC8vIFRoaXMganVzdCBnZXRzIHRoZSBiYXNpYyBwaXRjaCBsZXR0ZXIsIGlnbm9yaW5nIGxlYWRpbmcgc3BhY2VzLCBhbmQgbm9ybWFsaXppbmcgaXQgdG8gYSBjYXBpdGFsXG5cdHRoaXMuZ2V0S2V5UGl0Y2ggPSBmdW5jdGlvbihzdHIpIHtcblx0XHR2YXIgaSA9IHRoaXMuc2tpcFdoaXRlU3BhY2Uoc3RyKTtcblx0XHRpZiAoZmluaXNoZWQoc3RyLCBpKSlcblx0XHRcdHJldHVybiB7bGVuOiAwfTtcblx0XHRzd2l0Y2ggKHN0ci5jaGFyQXQoaSkpIHtcblx0XHRcdGNhc2UgJ0EnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnQSd9O1xuXHRcdFx0Y2FzZSAnQic6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdCJ307XG5cdFx0XHRjYXNlICdDJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0MnfTtcblx0XHRcdGNhc2UgJ0QnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnRCd9O1xuXHRcdFx0Y2FzZSAnRSc6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdFJ307XG5cdFx0XHRjYXNlICdGJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0YnfTtcblx0XHRcdGNhc2UgJ0cnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnRyd9O1xuLy9cdFx0XHRjYXNlICdhJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0EnfTtcbi8vXHRcdFx0Y2FzZSAnYic6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdCJ307XG4vL1x0XHRcdGNhc2UgJ2MnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnQyd9O1xuLy9cdFx0XHRjYXNlICdkJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0QnfTtcbi8vXHRcdFx0Y2FzZSAnZSc6cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46ICdFJ307XG4vL1x0XHRcdGNhc2UgJ2YnOnJldHVybiB7bGVuOiBpKzEsIHRva2VuOiAnRid9O1xuLy9cdFx0XHRjYXNlICdnJzpyZXR1cm4ge2xlbjogaSsxLCB0b2tlbjogJ0cnfTtcblx0XHR9XG5cdFx0cmV0dXJuIHtsZW46IDB9O1xuXHR9O1xuXG5cdC8vIFRoaXMganVzdCBnZXRzIHRoZSBiYXNpYyBhY2NpZGVudGFsLCBpZ25vcmluZyBsZWFkaW5nIHNwYWNlcywgYW5kIG9ubHkgdGhlIG9uZXMgdGhhdCBhcHBlYXIgaW4gYSBrZXlcblx0dGhpcy5nZXRTaGFycEZsYXQgPSBmdW5jdGlvbihzdHIpIHtcblx0XHRpZiAoc3RyID09PSAnYmFzcycpXG5cdFx0XHRyZXR1cm4ge2xlbjogMH07XG5cdFx0c3dpdGNoIChzdHIuY2hhckF0KDApKSB7XG5cdFx0XHRjYXNlICcjJzpyZXR1cm4ge2xlbjogMSwgdG9rZW46ICcjJ307XG5cdFx0XHRjYXNlICdiJzpyZXR1cm4ge2xlbjogMSwgdG9rZW46ICdiJ307XG5cdFx0fVxuXHRcdHJldHVybiB7bGVuOiAwfTtcblx0fTtcblxuXHR0aGlzLmdldE1vZGUgPSBmdW5jdGlvbihzdHIpIHtcblx0XHR2YXIgc2tpcEFscGhhID0gZnVuY3Rpb24oc3RyLCBzdGFydCkge1xuXHRcdFx0Ly8gVGhpcyByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBub24tYWxwaGFiZXRpYyBjaGFyLCBvciB0aGUgZW50aXJlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGlmIG5vdCBmb3VuZC5cblx0XHQgIHdoaWxlIChzdGFydCA8IHN0ci5sZW5ndGggJiYgKChzdHIuY2hhckF0KHN0YXJ0KSA+PSAnYScgJiYgc3RyLmNoYXJBdChzdGFydCkgPD0gJ3onKSB8fCAoc3RyLmNoYXJBdChzdGFydCkgPj0gJ0EnICYmIHN0ci5jaGFyQXQoc3RhcnQpIDw9ICdaJykpKVxuXHRcdFx0XHRzdGFydCsrO1xuXHRcdFx0cmV0dXJuIHN0YXJ0O1xuXHRcdH07XG5cblx0XHR2YXIgaSA9IHRoaXMuc2tpcFdoaXRlU3BhY2Uoc3RyKTtcblx0XHRpZiAoZmluaXNoZWQoc3RyLCBpKSlcblx0XHRcdHJldHVybiB7bGVuOiAwfTtcblx0XHR2YXIgZmlyc3RUaHJlZSA9IHN0ci5zdWJzdHJpbmcoaSxpKzMpLnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKGZpcnN0VGhyZWUubGVuZ3RoID4gMSAmJiBmaXJzdFRocmVlLmNoYXJBdCgxKSA9PT0gJyAnIHx8IGZpcnN0VGhyZWUuY2hhckF0KDEpID09PSAnXicgfHwgZmlyc3RUaHJlZS5jaGFyQXQoMSkgPT09ICdfJyB8fCBmaXJzdFRocmVlLmNoYXJBdCgxKSA9PT0gJz0nKSBmaXJzdFRocmVlID0gZmlyc3RUaHJlZS5jaGFyQXQoMCk7XHQvLyBUaGlzIHdpbGwgaGFuZGxlIHRoZSBjYXNlIG9mICdtJ1xuXHRcdHN3aXRjaCAoZmlyc3RUaHJlZSkge1xuXHRcdFx0Y2FzZSAnbWl4JzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnTWl4J307XG5cdFx0XHRjYXNlICdkb3InOnJldHVybiB7bGVuOiBza2lwQWxwaGEoc3RyLCBpKSwgdG9rZW46ICdEb3InfTtcblx0XHRcdGNhc2UgJ3Bocic6cmV0dXJuIHtsZW46IHNraXBBbHBoYShzdHIsIGkpLCB0b2tlbjogJ1Bocid9O1xuXHRcdFx0Y2FzZSAnbHlkJzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnTHlkJ307XG5cdFx0XHRjYXNlICdsb2MnOnJldHVybiB7bGVuOiBza2lwQWxwaGEoc3RyLCBpKSwgdG9rZW46ICdMb2MnfTtcblx0XHRcdGNhc2UgJ2Flbyc6cmV0dXJuIHtsZW46IHNraXBBbHBoYShzdHIsIGkpLCB0b2tlbjogJ20nfTtcblx0XHRcdGNhc2UgJ21haic6cmV0dXJuIHtsZW46IHNraXBBbHBoYShzdHIsIGkpLCB0b2tlbjogJyd9O1xuXHRcdFx0Y2FzZSAnaW9uJzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnJ307XG5cdFx0XHRjYXNlICdtaW4nOnJldHVybiB7bGVuOiBza2lwQWxwaGEoc3RyLCBpKSwgdG9rZW46ICdtJ307XG5cdFx0XHRjYXNlICdtJzpyZXR1cm4ge2xlbjogc2tpcEFscGhhKHN0ciwgaSksIHRva2VuOiAnbSd9O1xuXHRcdH1cblx0XHRyZXR1cm4ge2xlbjogMH07XG5cdH07XG5cblx0dGhpcy5nZXRDbGVmID0gZnVuY3Rpb24oc3RyLCBiRXhwbGljaXRPbmx5KSB7XG5cdFx0dmFyIHN0ck9yaWcgPSBzdHI7XG5cdFx0dmFyIGkgPSB0aGlzLnNraXBXaGl0ZVNwYWNlKHN0cik7XG5cdFx0aWYgKGZpbmlzaGVkKHN0ciwgaSkpXG5cdFx0XHRyZXR1cm4ge2xlbjogMH07XG5cdFx0Ly8gVGhlIHdvcmQgJ2NsZWYnIGlzIG9wdGlvbmFsLCBidXQgaWYgaXQgYXBwZWFycywgYSBjbGVmIE1VU1QgYXBwZWFyXG5cdFx0dmFyIG5lZWRzQ2xlZiA9IGZhbHNlO1xuXHRcdHZhciBzdHJDbGVmID0gc3RyLnN1YnN0cmluZyhpKTtcblx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnY2xlZj0nKSkge1xuXHRcdFx0bmVlZHNDbGVmID0gdHJ1ZTtcblx0XHRcdHN0ckNsZWYgPSBzdHJDbGVmLnN1YnN0cmluZyg1KTtcblx0XHRcdGkgKz0gNTtcblx0XHR9XG5cdFx0aWYgKHN0ckNsZWYubGVuZ3RoID09PSAwICYmIG5lZWRzQ2xlZilcblx0XHRcdHJldHVybiB7bGVuOiBpKzUsIHdhcm46IFwiTm8gY2xlZiBzcGVjaWZpZWQ6IFwiICsgc3RyT3JpZ307XG5cblx0XHR2YXIgaiA9IHRoaXMuc2tpcFdoaXRlU3BhY2Uoc3RyQ2xlZik7XG5cdFx0aWYgKGZpbmlzaGVkKHN0ckNsZWYsIGopKVxuXHRcdFx0cmV0dXJuIHtsZW46IDB9O1xuXHRcdGlmIChqID4gMCkge1xuXHRcdFx0aSArPSBqO1xuXHRcdFx0c3RyQ2xlZiA9IHN0ckNsZWYuc3Vic3RyaW5nKGopO1xuXHRcdH1cblx0XHR2YXIgbmFtZSA9IG51bGw7XG5cdFx0aWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ3RyZWJsZScpKVxuXHRcdFx0bmFtZSA9ICd0cmVibGUnO1xuXHRcdGVsc2UgaWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ2Jhc3MzJykpXG5cdFx0XHRuYW1lID0gJ2Jhc3MzJztcblx0XHRlbHNlIGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdiYXNzJykpXG5cdFx0XHRuYW1lID0gJ2Jhc3MnO1xuXHRcdGVsc2UgaWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ3Rlbm9yJykpXG5cdFx0XHRuYW1lID0gJ3Rlbm9yJztcblx0XHRlbHNlIGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdhbHRvMicpKVxuXHRcdFx0bmFtZSA9ICdhbHRvMic7XG5cdFx0ZWxzZSBpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnYWx0bzEnKSlcblx0XHRcdG5hbWUgPSAnYWx0bzEnO1xuXHRcdGVsc2UgaWYgKHBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoc3RyQ2xlZiwgJ2FsdG8nKSlcblx0XHRcdG5hbWUgPSAnYWx0byc7XG5cdFx0ZWxzZSBpZiAoIWJFeHBsaWNpdE9ubHkgJiYgKG5lZWRzQ2xlZiAmJiBwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdub25lJykpKVxuXHRcdFx0bmFtZSA9ICdub25lJztcblx0XHRlbHNlIGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdwZXJjJykpXG5cdFx0XHRuYW1lID0gJ3BlcmMnO1xuXHRcdGVsc2UgaWYgKCFiRXhwbGljaXRPbmx5ICYmIChuZWVkc0NsZWYgJiYgcGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnQycpKSlcblx0XHRcdG5hbWUgPSAndGVub3InO1xuXHRcdGVsc2UgaWYgKCFiRXhwbGljaXRPbmx5ICYmIChuZWVkc0NsZWYgJiYgcGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHJDbGVmLCAnRicpKSlcblx0XHRcdG5hbWUgPSAnYmFzcyc7XG5cdFx0ZWxzZSBpZiAoIWJFeHBsaWNpdE9ubHkgJiYgKG5lZWRzQ2xlZiAmJiBwYXJzZUNvbW1vbi5zdGFydHNXaXRoKHN0ckNsZWYsICdHJykpKVxuXHRcdFx0bmFtZSA9ICd0cmVibGUnO1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB7bGVuOiBpKzUsIHdhcm46IFwiVW5rbm93biBjbGVmIHNwZWNpZmllZDogXCIgKyBzdHJPcmlnfTtcblxuXHRcdHN0ckNsZWYgPSBzdHJDbGVmLnN1YnN0cmluZyhuYW1lLmxlbmd0aCk7XG5cdFx0aiA9IHRoaXMuaXNNYXRjaChzdHJDbGVmLCAnKzgnKTtcblx0XHRpZiAoaiA+IDApXG5cdFx0XHRuYW1lICs9IFwiKzhcIjtcblx0XHRlbHNlIHtcblx0XHRcdGogPSB0aGlzLmlzTWF0Y2goc3RyQ2xlZiwgJy04Jyk7XG5cdFx0XHRpZiAoaiA+IDApXG5cdFx0XHRcdG5hbWUgKz0gXCItOFwiO1xuXHRcdH1cblx0XHRyZXR1cm4ge2xlbjogaStuYW1lLmxlbmd0aCwgdG9rZW46IG5hbWUsIGV4cGxpY2l0OiBuZWVkc0NsZWZ9O1xuXHR9O1xuXG5cdC8vIFRoaXMgcmV0dXJucyBvbmUgb2YgdGhlIGxlZ2FsIGJhciBsaW5lc1xuXHQvLyBUaGlzIGlzIGNhbGxlZCBhbG90IGFuZCB0aGVyZSBpcyBubyBvYnZpb3VzIHRva2VuYWJsZSBpdGVtcywgc28gdGhpcyBpcyBicm9rZW4gYXBhcnQuXG5cdHRoaXMuZ2V0QmFyTGluZSA9IGZ1bmN0aW9uKGxpbmUsIGkpIHtcblx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRjYXNlICddJzpcblx0XHRcdFx0KytpO1xuXHRcdFx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnfCc6IHJldHVybiB7bGVuOiAyLCB0b2tlbjogXCJiYXJfdGhpY2tfdGhpblwifTtcblx0XHRcdFx0XHRjYXNlICdbJzpcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdGlmICgobGluZS5jaGFyQXQoaSkgPj0gJzEnICYmIGxpbmUuY2hhckF0KGkpIDw9ICc5JykgfHwgbGluZS5jaGFyQXQoaSkgPT09ICdcIicpXG5cdFx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiAyLCB0b2tlbjogXCJiYXJfaW52aXNpYmxlXCJ9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtsZW46IDEsIHdhcm46IFwiVW5rbm93biBiYXIgc3ltYm9sXCJ9O1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMSwgdG9rZW46IFwiYmFyX2ludmlzaWJsZVwifTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgJzonOlxuXHRcdFx0XHQrK2k7XG5cdFx0XHRcdHN3aXRjaCAobGluZS5jaGFyQXQoaSkpIHtcblx0XHRcdFx0XHRjYXNlICc6JzogcmV0dXJuIHtsZW46IDIsIHRva2VuOiBcImJhcl9kYmxfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdGNhc2UgJ3wnOlx0Ly8gOnxcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdHN3aXRjaCAobGluZS5jaGFyQXQoaSkpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSAnXSc6XHQvLyA6fF1cblx0XHRcdFx0XHRcdFx0XHQrK2k7XG5cdFx0XHRcdFx0XHRcdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnfCc6XHQvLyA6fF18XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnOicpICByZXR1cm4ge2xlbjogNSwgdG9rZW46IFwiYmFyX2RibF9yZXBlYXRcIn07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiAzLCB0b2tlbjogXCJiYXJfcmlnaHRfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtsZW46IDMsIHRva2VuOiBcImJhcl9yaWdodF9yZXBlYXRcIn07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlICd8JzpcdC8vIDp8fFxuXHRcdFx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICc6JykgIHJldHVybiB7bGVuOiA0LCB0b2tlbjogXCJiYXJfZGJsX3JlcGVhdFwifTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMywgdG9rZW46IFwiYmFyX3JpZ2h0X3JlcGVhdFwifTtcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMiwgdG9rZW46IFwiYmFyX3JpZ2h0X3JlcGVhdFwifTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMSwgd2FybjogXCJVbmtub3duIGJhciBzeW1ib2xcIn07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICdbJzpcdC8vIFtcblx0XHRcdFx0KytpO1xuXHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICd8Jykge1x0Ly8gW3xcblx0XHRcdFx0XHQrK2k7XG5cdFx0XHRcdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpKSkge1xuXHRcdFx0XHRcdFx0Y2FzZSAnOic6IHJldHVybiB7bGVuOiAzLCB0b2tlbjogXCJiYXJfbGVmdF9yZXBlYXRcIn07XG5cdFx0XHRcdFx0XHRjYXNlICddJzogcmV0dXJuIHtsZW46IDMsIHRva2VuOiBcImJhcl9pbnZpc2libGVcIn07XG5cdFx0XHRcdFx0XHRkZWZhdWx0OiByZXR1cm4ge2xlbjogMiwgdG9rZW46IFwiYmFyX3RoaWNrX3RoaW5cIn07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICgobGluZS5jaGFyQXQoaSkgPj0gJzEnICYmIGxpbmUuY2hhckF0KGkpIDw9ICc5JykgfHwgbGluZS5jaGFyQXQoaSkgPT09ICdcIicpXG5cdFx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMSwgdG9rZW46IFwiYmFyX2ludmlzaWJsZVwifTtcblx0XHRcdFx0XHRyZXR1cm4ge2xlbjogMH07XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICd8JzpcdC8vIHxcblx0XHRcdFx0KytpO1xuXHRcdFx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0Y2FzZSAnXSc6IHJldHVybiB7bGVuOiAyLCB0b2tlbjogXCJiYXJfdGhpbl90aGlja1wifTtcblx0XHRcdFx0XHRjYXNlICd8JzogLy8gfHxcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJzonKSByZXR1cm4ge2xlbjogMywgdG9rZW46IFwiYmFyX2xlZnRfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtsZW46IDIsIHRva2VuOiBcImJhcl90aGluX3RoaW5cIn07XG5cdFx0XHRcdFx0Y2FzZSAnOic6XHQvLyB8OlxuXHRcdFx0XHRcdFx0dmFyIGNvbG9ucyA9IDA7XG5cdFx0XHRcdFx0XHR3aGlsZSAobGluZS5jaGFyQXQoaStjb2xvbnMpID09PSAnOicpIGNvbG9ucysrO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHsgbGVuOiAxK2NvbG9ucywgdG9rZW46IFwiYmFyX2xlZnRfcmVwZWF0XCJ9O1xuXHRcdFx0XHRcdGRlZmF1bHQ6IHJldHVybiB7bGVuOiAxLCB0b2tlbjogXCJiYXJfdGhpblwifTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHtsZW46IDB9O1xuXHR9O1xuXG5cdC8vIHRoaXMgcmV0dXJucyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyB0aGF0IG1hdGNoIG9uZSBvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgbGVnYWxDaGFycyBzdHJpbmdcblx0dGhpcy5nZXRUb2tlbk9mID0gZnVuY3Rpb24oc3RyLCBsZWdhbENoYXJzKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChsZWdhbENoYXJzLmluZGV4T2Yoc3RyLmNoYXJBdChpKSkgPCAwKVxuXHRcdFx0XHRyZXR1cm4ge2xlbjogaSwgdG9rZW46IHN0ci5zdWJzdHJpbmcoMCwgaSl9O1xuXHRcdH1cblx0XHRyZXR1cm4ge2xlbjogaSwgdG9rZW46IHN0cn07XG5cdH07XG5cblx0dGhpcy5nZXRUb2tlbiA9IGZ1bmN0aW9uKHN0ciwgc3RhcnQsIGVuZCkge1xuXHRcdC8vIFRoaXMgcmV0dXJucyB0aGUgbmV4dCBzZXQgb2YgY2hhcnMgdGhhdCBkb2Vzbid0IGNvbnRhaW4gc3BhY2VzXG5cdFx0dmFyIGkgPSBzdGFydDtcblx0XHR3aGlsZSAoaSA8IGVuZCAmJiAhdGhpcy5pc1doaXRlU3BhY2Uoc3RyLmNoYXJBdChpKSkpXG5cdFx0XHRpKys7XG5cdFx0cmV0dXJuIHN0ci5zdWJzdHJpbmcoc3RhcnQsIGkpO1xuXHR9O1xuXG5cdC8vIFRoaXMganVzdCBzZWVzIGlmIHRoZSBuZXh0IHRva2VuIGlzIHRoZSB3b3JkIHBhc3NlZCBpbiwgd2l0aCBwb3NzaWJsZSBsZWFkaW5nIHNwYWNlc1xuXHR0aGlzLmlzTWF0Y2ggPSBmdW5jdGlvbihzdHIsIG1hdGNoKSB7XG5cdFx0dmFyIGkgPSB0aGlzLnNraXBXaGl0ZVNwYWNlKHN0cik7XG5cdFx0aWYgKGZpbmlzaGVkKHN0ciwgaSkpXG5cdFx0XHRyZXR1cm4gMDtcblx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChzdHIuc3Vic3RyaW5nKGkpLCBtYXRjaCkpXG5cdFx0XHRyZXR1cm4gaSttYXRjaC5sZW5ndGg7XG5cdFx0cmV0dXJuIDA7XG5cdH07XG5cblx0dGhpcy5nZXRQaXRjaEZyb21Ub2tlbnMgPSBmdW5jdGlvbih0b2tlbnMpIHtcblx0XHR2YXIgcmV0ID0geyB9O1xuXHRcdHZhciBwaXRjaGVzID0ge0E6IDUsIEI6IDYsIEM6IDAsIEQ6IDEsIEU6IDIsIEY6IDMsIEc6IDQsIGE6IDEyLCBiOiAxMywgYzogNywgZDogOCwgZTogOSwgZjogMTAsIGc6IDExfTtcblx0XHRyZXQucG9zaXRpb24gPSBwaXRjaGVzW3Rva2Vuc1swXS50b2tlbl07XG5cdFx0aWYgKHJldC5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIHsgd2FybjogXCJQaXRjaCBleHBlY3RlZC4gRm91bmQ6IFwiICsgdG9rZW5zWzBdLnRva2VuIH07XG5cdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0d2hpbGUgKHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRcdGNhc2UgJywnOiByZXQucG9zaXRpb24gLT0gNzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRjYXNlICdcXCcnOiByZXQucG9zaXRpb24gKz0gNzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiByZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXG5cdHRoaXMuZ2V0S2V5QWNjaWRlbnRhbHMyID0gZnVuY3Rpb24odG9rZW5zKSB7XG5cdFx0dmFyIGFjY3M7XG5cdFx0Ly8gZmluZCBhbmQgc3RyaXAgb2ZmIGFsbCBhY2NpZGVudGFscyBpbiB0aGUgdG9rZW4gbGlzdFxuXHRcdHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0dmFyIGFjYztcblx0XHRcdGlmICh0b2tlbnNbMF0udG9rZW4gPT09ICdeJykge1xuXHRcdFx0XHRhY2MgPSAnc2hhcnAnO1xuXHRcdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiB7YWNjczogYWNjcywgd2FybjogJ0V4cGVjdGVkIG5vdGUgbmFtZSBhZnRlciAnICsgYWNjfTtcblx0XHRcdFx0c3dpdGNoICh0b2tlbnNbMF0udG9rZW4pIHtcblx0XHRcdFx0XHRjYXNlICdeJzogYWNjID0gJ2RibHNoYXJwJzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJy8nOiBhY2MgPSAncXVhcnRlcnNoYXJwJzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJz0nKSB7XG5cdFx0XHRcdGFjYyA9ICduYXR1cmFsJztcblx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJ18nKSB7XG5cdFx0XHRcdGFjYyA9ICdmbGF0Jztcblx0XHRcdFx0dG9rZW5zLnNoaWZ0KCk7XG5cdFx0XHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSByZXR1cm4ge2FjY3M6IGFjY3MsIHdhcm46ICdFeHBlY3RlZCBub3RlIG5hbWUgYWZ0ZXIgJyArIGFjY307XG5cdFx0XHRcdHN3aXRjaCAodG9rZW5zWzBdLnRva2VuKSB7XG5cdFx0XHRcdFx0Y2FzZSAnXyc6IGFjYyA9ICdkYmxmbGF0JzsgdG9rZW5zLnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgJy8nOiBhY2MgPSAncXVhcnRlcmZsYXQnOyB0b2tlbnMuc2hpZnQoKTsgYnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIE5vdCBhbiBhY2NpZGVudGFsLCB3ZSdsbCBhc3N1bWUgdGhhdCBhIGxhdGVyIHBhcnNlIHdpbGwgcmVjb2duaXplIGl0LlxuXHRcdFx0XHRyZXR1cm4geyBhY2NzOiBhY2NzIH07XG5cdFx0XHR9XG5cdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHthY2NzOiBhY2NzLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyICcgKyBhY2N9O1xuXHRcdFx0c3dpdGNoICh0b2tlbnNbMF0udG9rZW4uY2hhckF0KDApKVxuXHRcdFx0e1xuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0Y2FzZSAnYic6XG5cdFx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0Y2FzZSAnZSc6XG5cdFx0XHRcdGNhc2UgJ2YnOlxuXHRcdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0Y2FzZSAnQSc6XG5cdFx0XHRcdGNhc2UgJ0InOlxuXHRcdFx0XHRjYXNlICdDJzpcblx0XHRcdFx0Y2FzZSAnRCc6XG5cdFx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0XHRjYXNlICdGJzpcblx0XHRcdFx0Y2FzZSAnRyc6XG5cdFx0XHRcdFx0aWYgKGFjY3MgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdGFjY3MgPSBbXTtcblx0XHRcdFx0XHRhY2NzLnB1c2goeyBhY2M6IGFjYywgbm90ZTogdG9rZW5zWzBdLnRva2VuLmNoYXJBdCgwKSB9KTtcblx0XHRcdFx0XHRpZiAodG9rZW5zWzBdLnRva2VuLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRcdHRva2Vucy5zaGlmdCgpO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHRva2Vuc1swXS50b2tlbiA9IHRva2Vuc1swXS50b2tlbi5zdWJzdHJpbmcoMSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIHthY2NzOiBhY2NzLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyICcgKyBhY2MgKyAnIEZvdW5kOiAnICsgdG9rZW5zWzBdLnRva2VuIH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IGFjY3M6IGFjY3MgfTtcblx0fTtcblxuXHQvLyBUaGlzIGdldHMgYW4gYWNjaWRlbnRhbCBtYXJraW5nIGZvciB0aGUga2V5IHNpZ25hdHVyZS4gSXQgaGFzIHRoZSBhY2NpZGVudGFsIHRoZW4gdGhlIHBpdGNoIGxldHRlci5cblx0dGhpcy5nZXRLZXlBY2NpZGVudGFsID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIGFjY1RyYW5zbGF0aW9uID0ge1xuXHRcdFx0J14nOiAnc2hhcnAnLFxuXHRcdFx0J15eJzogJ2RibHNoYXJwJyxcblx0XHRcdCc9JzogJ25hdHVyYWwnLFxuXHRcdFx0J18nOiAnZmxhdCcsXG5cdFx0XHQnX18nOiAnZGJsZmxhdCcsXG5cdFx0XHQnXy8nOiAncXVhcnRlcmZsYXQnLFxuXHRcdFx0J14vJzogJ3F1YXJ0ZXJzaGFycCdcblx0XHR9O1xuXHRcdHZhciBpID0gdGhpcy5za2lwV2hpdGVTcGFjZShzdHIpO1xuXHRcdGlmIChmaW5pc2hlZChzdHIsIGkpKVxuXHRcdFx0cmV0dXJuIHtsZW46IDB9O1xuXHRcdHZhciBhY2MgPSBudWxsO1xuXHRcdHN3aXRjaCAoc3RyLmNoYXJBdChpKSlcblx0XHR7XG5cdFx0XHRjYXNlICdeJzpcblx0XHRcdGNhc2UgJ18nOlxuXHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdGFjYyA9IHN0ci5jaGFyQXQoaSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpyZXR1cm4ge2xlbjogMH07XG5cdFx0fVxuXHRcdGkrKztcblx0XHRpZiAoZmluaXNoZWQoc3RyLCBpKSlcblx0XHRcdHJldHVybiB7bGVuOiAxLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyIGFjY2lkZW50YWwnfTtcblx0XHRzd2l0Y2ggKHN0ci5jaGFyQXQoaSkpXG5cdFx0e1xuXHRcdFx0Y2FzZSAnYSc6XG5cdFx0XHRjYXNlICdiJzpcblx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0Y2FzZSAnZCc6XG5cdFx0XHRjYXNlICdlJzpcblx0XHRcdGNhc2UgJ2YnOlxuXHRcdFx0Y2FzZSAnZyc6XG5cdFx0XHRjYXNlICdBJzpcblx0XHRcdGNhc2UgJ0InOlxuXHRcdFx0Y2FzZSAnQyc6XG5cdFx0XHRjYXNlICdEJzpcblx0XHRcdGNhc2UgJ0UnOlxuXHRcdFx0Y2FzZSAnRic6XG5cdFx0XHRjYXNlICdHJzpcblx0XHRcdFx0cmV0dXJuIHtsZW46IGkrMSwgdG9rZW46IHthY2M6IGFjY1RyYW5zbGF0aW9uW2FjY10sIG5vdGU6IHN0ci5jaGFyQXQoaSl9fTtcblx0XHRcdGNhc2UgJ14nOlxuXHRcdFx0Y2FzZSAnXyc6XG5cdFx0XHRjYXNlICcvJzpcblx0XHRcdFx0YWNjICs9IHN0ci5jaGFyQXQoaSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdFx0aWYgKGZpbmlzaGVkKHN0ciwgaSkpXG5cdFx0XHRcdFx0cmV0dXJuIHtsZW46IDIsIHdhcm46ICdFeHBlY3RlZCBub3RlIG5hbWUgYWZ0ZXIgYWNjaWRlbnRhbCd9O1xuXHRcdFx0XHRzd2l0Y2ggKHN0ci5jaGFyQXQoaSkpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0XHRjYXNlICdiJzpcblx0XHRcdFx0XHRjYXNlICdjJzpcblx0XHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0XHRjYXNlICdlJzpcblx0XHRcdFx0XHRjYXNlICdmJzpcblx0XHRcdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0XHRjYXNlICdBJzpcblx0XHRcdFx0XHRjYXNlICdCJzpcblx0XHRcdFx0XHRjYXNlICdDJzpcblx0XHRcdFx0XHRjYXNlICdEJzpcblx0XHRcdFx0XHRjYXNlICdFJzpcblx0XHRcdFx0XHRjYXNlICdGJzpcblx0XHRcdFx0XHRjYXNlICdHJzpcblx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiBpKzEsIHRva2VuOiB7YWNjOiBhY2NUcmFuc2xhdGlvblthY2NdLCBub3RlOiBzdHIuY2hhckF0KGkpfX07XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiB7bGVuOiAyLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyIGFjY2lkZW50YWwnfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB7bGVuOiAxLCB3YXJuOiAnRXhwZWN0ZWQgbm90ZSBuYW1lIGFmdGVyIGFjY2lkZW50YWwnfTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5pc1doaXRlU3BhY2UgPSBmdW5jdGlvbihjaCkge1xuXHRcdHJldHVybiBjaCA9PT0gJyAnIHx8IGNoID09PSAnXFx0JyB8fCBjaCA9PT0gJ1xceDEyJztcblx0fTtcblxuXHR0aGlzLmdldE1lYXQgPSBmdW5jdGlvbihsaW5lLCBzdGFydCwgZW5kKSB7XG5cdFx0Ly8gVGhpcyByZW1vdmVzIGFueSBjb21tZW50cyBzdGFydGluZyB3aXRoICclJyBhbmQgdHJpbXMgdGhlIGVuZHMgb2YgdGhlIHN0cmluZyBzbyB0aGF0IHRoZXJlIGFyZSBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlcy5cblx0XHQvLyBpdCByZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGFuZCBlbmQgY2hhcmFjdGVycyB0aGF0IGNvbnRhaW4gdGhlIG1lYXQuXG5cdFx0dmFyIGNvbW1lbnQgPSBsaW5lLmluZGV4T2YoJyUnLCBzdGFydCk7XG5cdFx0aWYgKGNvbW1lbnQgPj0gMCAmJiBjb21tZW50IDwgZW5kKVxuXHRcdFx0ZW5kID0gY29tbWVudDtcblx0XHR3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKGxpbmUuY2hhckF0KHN0YXJ0KSA9PT0gJyAnIHx8IGxpbmUuY2hhckF0KHN0YXJ0KSA9PT0gJ1xcdCcgfHwgbGluZS5jaGFyQXQoc3RhcnQpID09PSAnXFx4MTInKSlcblx0XHRcdHN0YXJ0Kys7XG5cdFx0d2hpbGUgKHN0YXJ0IDwgZW5kICYmIChsaW5lLmNoYXJBdChlbmQtMSkgPT09ICcgJyB8fCBsaW5lLmNoYXJBdChlbmQtMSkgPT09ICdcXHQnIHx8IGxpbmUuY2hhckF0KGVuZC0xKSA9PT0gJ1xceDEyJykpXG5cdFx0XHRlbmQtLTtcblx0XHRyZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9O1xuXHR9O1xuXG5cdHZhciBpc0xldHRlciA9IGZ1bmN0aW9uKGNoKSB7XG5cdFx0cmV0dXJuIChjaCA+PSAnQScgJiYgY2ggPD0gJ1onKSB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6Jyk7XG5cdH07XG5cblx0dmFyIGlzTnVtYmVyID0gZnVuY3Rpb24oY2gpIHtcblx0XHRyZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpO1xuXHR9O1xuXG5cdHRoaXMudG9rZW5pemUgPSBmdW5jdGlvbihsaW5lLCBzdGFydCwgZW5kLCBhbHBoYVVudGlsV2hpdGVTcGFjZSkge1xuXHRcdC8vIHRoaXMgcmV0dXJucyBhbGwgdGhlIHRva2VucyBpbnNpZGUgdGhlIHBhc3NlZCBzdHJpbmcuIEEgdG9rZW4gaXMgYSBwdW5jdHVhdGlvbiBtYXJrLCBhIHN0cmluZyBvZiBkaWdpdHMsIGEgc3RyaW5nIG9mIGxldHRlcnMuXG5cdFx0Ly8gIFF1b3RlZCBzdHJpbmdzIGFyZSBvbmUgdG9rZW4uXG5cdFx0Ly8gIElmIHRoZXJlIGlzIGEgbWludXMgc2lnbiBuZXh0IHRvIGEgbnVtYmVyLCB0aGVuIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBudW1iZXIuXG5cdFx0Ly8gSWYgdGhlcmUgaXMgYSBwZXJpb2QgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBudW1iZXIsIHdpdGggYSBudW1iZXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nLCB0aGVuIGEgZmxvYXQgaXMgcmV0dXJuZWQuXG5cdFx0Ly8gVGhlIHR5cGUgb2YgdG9rZW4gaXMgcmV0dXJuZWQ6IHF1b3RlLCBhbHBoYSwgbnVtYmVyLCBwdW5jdFxuXHRcdC8vIElmIGFscGhhVW50aWxXaGl0ZVNwYWNlIGlzIHRydWUsIHRoZW4gdGhlIGJlaGF2aW9yIG9mIHRoZSBhbHBoYSB0b2tlbiBjaGFuZ2VzLlxuXG5cdFx0dmFyIHJldCA9IHRoaXMuZ2V0TWVhdChsaW5lLCBzdGFydCwgZW5kKTtcblx0XHRzdGFydCA9IHJldC5zdGFydDtcblx0XHRlbmQgPSByZXQuZW5kO1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHR2YXIgaTtcblx0XHR3aGlsZSAoc3RhcnQgPCBlbmQpIHtcblx0XHRcdGlmIChsaW5lLmNoYXJBdChzdGFydCkgPT09ICdcIicpIHtcblx0XHRcdFx0aSA9IHN0YXJ0KzE7XG5cdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmIGxpbmUuY2hhckF0KGkpICE9PSAnXCInKSBpKys7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHsgdHlwZTogJ3F1b3RlJywgdG9rZW46IGxpbmUuc3Vic3RyaW5nKHN0YXJ0KzEsIGkpLCBzdGFydDogc3RhcnQrMSwgZW5kOiBpfSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH0gZWxzZSBpZiAoaXNMZXR0ZXIobGluZS5jaGFyQXQoc3RhcnQpKSkge1xuXHRcdFx0XHRpID0gc3RhcnQrMTtcblx0XHRcdFx0aWYgKGFscGhhVW50aWxXaGl0ZVNwYWNlKVxuXHRcdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmICF0aGlzLmlzV2hpdGVTcGFjZShsaW5lLmNoYXJBdChpKSkpIGkrKztcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmIGlzTGV0dGVyKGxpbmUuY2hhckF0KGkpKSkgaSsrO1xuXHRcdFx0XHR0b2tlbnMucHVzaCh7IHR5cGU6ICdhbHBoYScsIHRva2VuOiBsaW5lLnN1YnN0cmluZyhzdGFydCwgaSksIGNvbnRpbnVlSWQ6IGlzTnVtYmVyKGxpbmUuY2hhckF0KGkpKSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGl9KTtcblx0XHRcdFx0c3RhcnQgPSBpICsgMTtcblx0XHRcdH0gZWxzZSBpZiAobGluZS5jaGFyQXQoc3RhcnQpID09PSAnLicgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSsxKSkpIHtcblx0XHRcdFx0aSA9IHN0YXJ0KzE7XG5cdFx0XHRcdHZhciBpbnQyID0gbnVsbDtcblx0XHRcdFx0dmFyIGZsb2F0MiA9IG51bGw7XG5cdFx0XHRcdHdoaWxlIChpIDwgZW5kICYmIGlzTnVtYmVyKGxpbmUuY2hhckF0KGkpKSkgaSsrO1xuXG5cdFx0XHRcdGZsb2F0MiA9IHBhcnNlRmxvYXQobGluZS5zdWJzdHJpbmcoc3RhcnQsIGkpKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goeyB0eXBlOiAnbnVtYmVyJywgdG9rZW46IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBpKSwgaW50dDogaW50MiwgZmxvYXR0OiBmbG9hdDIsIGNvbnRpbnVlSWQ6IGlzTGV0dGVyKGxpbmUuY2hhckF0KGkpKSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGl9KTtcblx0XHRcdFx0c3RhcnQgPSBpICsgMTtcblx0XHRcdH0gZWxzZSBpZiAoaXNOdW1iZXIobGluZS5jaGFyQXQoc3RhcnQpKSB8fCAobGluZS5jaGFyQXQoc3RhcnQpID09PSAnLScgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSsxKSkpKSB7XG5cdFx0XHRcdGkgPSBzdGFydCsxO1xuXHRcdFx0XHR2YXIgaW50dCA9IG51bGw7XG5cdFx0XHRcdHZhciBmbG9hdHQgPSBudWxsO1xuXHRcdFx0XHR3aGlsZSAoaSA8IGVuZCAmJiBpc051bWJlcihsaW5lLmNoYXJBdChpKSkpIGkrKztcblx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnLicgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSsxKSkpIHtcblx0XHRcdFx0XHRpKys7XG5cdFx0XHRcdFx0d2hpbGUgKGkgPCBlbmQgJiYgaXNOdW1iZXIobGluZS5jaGFyQXQoaSkpKSBpKys7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdGludHQgPSBwYXJzZUludChsaW5lLnN1YnN0cmluZyhzdGFydCwgaSkpO1xuXG5cdFx0XHRcdGZsb2F0dCA9IHBhcnNlRmxvYXQobGluZS5zdWJzdHJpbmcoc3RhcnQsIGkpKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goeyB0eXBlOiAnbnVtYmVyJywgdG9rZW46IGxpbmUuc3Vic3RyaW5nKHN0YXJ0LCBpKSwgaW50dDogaW50dCwgZmxvYXR0OiBmbG9hdHQsIGNvbnRpbnVlSWQ6IGlzTGV0dGVyKGxpbmUuY2hhckF0KGkpKSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGl9KTtcblx0XHRcdFx0c3RhcnQgPSBpICsgMTtcblx0XHRcdH0gZWxzZSBpZiAobGluZS5jaGFyQXQoc3RhcnQpID09PSAnICcgfHwgbGluZS5jaGFyQXQoc3RhcnQpID09PSAnXFx0Jykge1xuXHRcdFx0XHRpID0gc3RhcnQrMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRva2Vucy5wdXNoKHsgdHlwZTogJ3B1bmN0JywgdG9rZW46IGxpbmUuY2hhckF0KHN0YXJ0KSwgc3RhcnQ6IHN0YXJ0LCBlbmQ6IHN0YXJ0KzF9KTtcblx0XHRcdFx0aSA9IHN0YXJ0KzE7XG5cdFx0XHR9XG5cdFx0XHRzdGFydCA9IGk7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbnM7XG5cdH07XG5cblx0dGhpcy5nZXRWb2ljZVRva2VuID0gZnVuY3Rpb24obGluZSwgc3RhcnQsIGVuZCkge1xuXHRcdC8vIFRoaXMgZmluZHMgdGhlIG5leHQgdG9rZW4uIEEgdG9rZW4gaXMgZGVsaW1pdGVkIGJ5IGEgc3BhY2Ugb3IgYW4gZXF1YWwgc2lnbi4gSWYgaXQgc3RhcnRzIHdpdGggYSBxdW90ZSwgdGhlbiB0aGUgcG9ydGlvbiBiZXR3ZWVuIHRoZSBxdW90ZXMgaXMgcmV0dXJuZWQuXG5cdFx0dmFyIGkgPSBzdGFydDtcblx0XHR3aGlsZSAoaSA8IGVuZCAmJiB0aGlzLmlzV2hpdGVTcGFjZShsaW5lLmNoYXJBdChpKSkgfHwgbGluZS5jaGFyQXQoaSkgPT09ICc9Jylcblx0XHRcdGkrKztcblxuXHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJ1wiJykge1xuXHRcdFx0dmFyIGNsb3NlID0gbGluZS5pbmRleE9mKCdcIicsIGkrMSk7XG5cdFx0XHRpZiAoY2xvc2UgPT09IC0xIHx8IGNsb3NlID49IGVuZClcblx0XHRcdFx0cmV0dXJuIHtsZW46IDEsIGVycjogXCJNaXNzaW5nIGNsb3NlIHF1b3RlXCJ9O1xuXHRcdFx0cmV0dXJuIHtsZW46IGNsb3NlLXN0YXJ0KzEsIHRva2VuOiB0aGlzLnRyYW5zbGF0ZVN0cmluZyhsaW5lLnN1YnN0cmluZyhpKzEsIGNsb3NlKSl9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgaWkgPSBpO1xuXHRcdFx0d2hpbGUgKGlpIDwgZW5kICYmICF0aGlzLmlzV2hpdGVTcGFjZShsaW5lLmNoYXJBdChpaSkpICYmIGxpbmUuY2hhckF0KGlpKSAhPT0gJz0nKVxuXHRcdFx0XHRpaSsrO1xuXHRcdFx0cmV0dXJuIHtsZW46IGlpLXN0YXJ0KzEsIHRva2VuOiBsaW5lLnN1YnN0cmluZyhpLCBpaSl9O1xuXHRcdH1cblx0fTtcblxuXHR2YXIgY2hhck1hcCA9IHtcblx0XHRcImBhXCI6ICfDoCcsIFwiJ2FcIjogXCLDoVwiLCBcIl5hXCI6IFwiw6JcIiwgXCJ+YVwiOiBcIsOjXCIsIFwiXFxcImFcIjogXCLDpFwiLCBcIm9hXCI6IFwiw6VcIiwgXCJhYVwiOiBcIsOlXCIsIFwiPWFcIjogXCLEgVwiLCBcInVhXCI6IFwixINcIiwgXCI7YVwiOiBcIsSFXCIsXG5cdFx0XCJgZVwiOiAnw6gnLCBcIidlXCI6IFwiw6lcIiwgXCJeZVwiOiBcIsOqXCIsIFwiXFxcImVcIjogXCLDq1wiLCBcIj1lXCI6IFwixJNcIiwgXCJ1ZVwiOiBcIsSVXCIsIFwiO2VcIjogXCLEmVwiLCBcIi5lXCI6IFwixJdcIixcblx0XHRcImBpXCI6ICfDrCcsIFwiJ2lcIjogXCLDrVwiLCBcIl5pXCI6IFwiw65cIiwgXCJcXFwiaVwiOiBcIsOvXCIsIFwiPWlcIjogXCLEq1wiLCBcInVpXCI6IFwixK1cIiwgXCI7aVwiOiBcIsSvXCIsXG5cdFx0XCJgb1wiOiAnw7InLCBcIidvXCI6IFwiw7NcIiwgXCJeb1wiOiBcIsO0XCIsIFwifm9cIjogXCLDtVwiLCBcIlxcXCJvXCI6IFwiw7ZcIiwgXCI9b1wiOiBcIsWNXCIsIFwidW9cIjogXCLFj1wiLCBcIi9vXCI6IFwiw7hcIixcblx0XHRcImB1XCI6ICfDuScsIFwiJ3VcIjogXCLDulwiLCBcIl51XCI6IFwiw7tcIiwgXCJ+dVwiOiBcIsWpXCIsIFwiXFxcInVcIjogXCLDvFwiLCBcIm91XCI6IFwixa9cIiwgXCI9dVwiOiBcIsWrXCIsIFwidXVcIjogXCLFrVwiLCBcIjt1XCI6IFwixbNcIixcblx0XHRcImBBXCI6ICfDgCcsIFwiJ0FcIjogXCLDgVwiLCBcIl5BXCI6IFwiw4JcIiwgXCJ+QVwiOiBcIsODXCIsIFwiXFxcIkFcIjogXCLDhFwiLCBcIm9BXCI6IFwiw4VcIiwgXCJBQVwiOiBcIsOFXCIsIFwiPUFcIjogXCLEgFwiLCBcInVBXCI6IFwixIJcIiwgXCI7QVwiOiBcIsSEXCIsXG5cdFx0XCJgRVwiOiAnw4gnLCBcIidFXCI6IFwiw4lcIiwgXCJeRVwiOiBcIsOKXCIsIFwiXFxcIkVcIjogXCLDi1wiLCBcIj1FXCI6IFwixJJcIiwgXCJ1RVwiOiBcIsSUXCIsIFwiO0VcIjogXCLEmFwiLCBcIi5FXCI6IFwixJZcIixcblx0XHRcImBJXCI6ICfDjCcsIFwiJ0lcIjogXCLDjVwiLCBcIl5JXCI6IFwiw45cIiwgXCJ+SVwiOiBcIsSoXCIsIFwiXFxcIklcIjogXCLDj1wiLCBcIj1JXCI6IFwixKpcIiwgXCJ1SVwiOiBcIsSsXCIsIFwiO0lcIjogXCLErlwiLCBcIi5JXCI6IFwixLBcIixcblx0XHRcImBPXCI6ICfDkicsIFwiJ09cIjogXCLDk1wiLCBcIl5PXCI6IFwiw5RcIiwgXCJ+T1wiOiBcIsOVXCIsIFwiXFxcIk9cIjogXCLDllwiLCBcIj1PXCI6IFwixYxcIiwgXCJ1T1wiOiBcIsWOXCIsIFwiL09cIjogXCLDmFwiLFxuXHRcdFwiYFVcIjogJ8OZJywgXCInVVwiOiBcIsOaXCIsIFwiXlVcIjogXCLDm1wiLCBcIn5VXCI6IFwixahcIiwgXCJcXFwiVVwiOiBcIsOcXCIsIFwib1VcIjogXCLFrlwiLCBcIj1VXCI6IFwixapcIiwgXCJ1VVwiOiBcIsWsXCIsIFwiO1VcIjogXCLFslwiLFxuXHRcdFwiYWVcIjogXCLDplwiLCBcIkFFXCI6IFwiw4ZcIiwgXCJvZVwiOiBcIsWTXCIsIFwiT0VcIjogXCLFklwiLCBcInNzXCI6IFwiw59cIixcblx0XHRcIidjXCI6IFwixIdcIiwgXCJeY1wiOiBcIsSJXCIsIFwidWNcIjogXCLEjVwiLCBcImNjXCI6IFwiw6dcIiwgXCIuY1wiOiBcIsSLXCIsIFwiY0NcIjogXCLDh1wiLCBcIidDXCI6IFwixIZcIiwgXCJeQ1wiOiBcIsSIXCIsIFwidUNcIjogXCLEjFwiLCBcIi5DXCI6IFwixIpcIixcblx0XHRcIn5OXCI6IFwiw5FcIiwgXCJ+blwiOiBcIsOxXCIsXG5cdFx0XCI9c1wiOiBcIsWhXCIsIFwidnNcIjogXCLFoVwiLFxuXHRcdFwiREhcIjogXCLDkFwiLCBcImRoXCI6IFwiw7BcIixcblx0XHRcIkhPXCI6IFwixZBcIiwgXCJIb1wiOiBcIsWRXCIsIFwiSFVcIjogXCLFsFwiLCBcIkh1XCI6IFwixbFcIixcblx0XHRcIidZXCI6IFwiw51cIiwgXCIneVwiOiBcIsO9XCIsIFwiXllcIjogXCLFtlwiLCBcIl55XCI6IFwixbdcIiwgXCJcXFwiWVwiOiBcIsW4XCIsIFwiXFxcInlcIjogXCLDv1wiLFxuXHRcdFwidlNcIjogXCLFoFwiLCBcInZaXCI6IFwixb1cIiwgXCJ2elwiOiAnxb4nXG5cbi8vIE1vcmUgY2hhcnM6IMSyIMSzIMSOIMSPIMSQIMSRIMScIMSdIMSeIMSfIMSgIMShIMSiIMSjIMSkIMSlIMSmIMSnIMS0IMS1IMS2IMS3IMS4IMS5IMS6IMS7IMS8IMS9IMS+IMS/IMWAIMWBIMWCIMWDIMWEIMWFIMWGIMWHIMWIIMWJIMWKIMWLIMWUIMWVIMWWIMWXIMWYIMWZIMWaIMWbIMWcIMWdIMWeIMWfIMWgIMWiIMWjIMWkIMWlIMWmIMWnIMW0IMW1IMW5IMW6IMW7IMW8IMW9XG5cdH07XG5cdHZhciBjaGFyTWFwMSA9IHtcblx0XHRcIiNcIjogXCLima9cIixcblx0XHRcImJcIjogXCLima1cIixcblx0XHRcIj1cIjogXCLima5cIlxuXHR9O1xuXHR2YXIgY2hhck1hcDIgPSB7XG5cdFx0XCIyMDFcIjogXCLima9cIixcblx0XHRcIjIwMlwiOiBcIuKZrVwiLFxuXHRcdFwiMjAzXCI6IFwi4pmuXCIsXG5cdFx0XCIyNDFcIjogXCLCoVwiLFxuXHRcdFwiMjQyXCI6IFwiwqJcIiwgXCIyNTJcIjogXCJhXCIsIFwiMjYyXCI6IFwiMlwiLCBcIjI3MlwiOiBcIm9cIiwgXCIzMDJcIjogXCLDglwiLCBcIjMxMlwiOiBcIsOKXCIsIFwiMzIyXCI6IFwiw5JcIiwgXCIzMzJcIjogXCLDmlwiLCBcIjM0MlwiOiBcIsOiXCIsIFwiMzUyXCI6IFwiw6pcIiwgXCIzNjJcIjogXCLDslwiLCBcIjM3MlwiOiBcIsO6XCIsXG5cdFx0XCIyNDNcIjogXCLCo1wiLCBcIjI1M1wiOiBcIsKrXCIsIFwiMjYzXCI6IFwiM1wiLCBcIjI3M1wiOiBcIsK7XCIsIFwiMzAzXCI6IFwiw4NcIiwgXCIzMTNcIjogXCLDi1wiLCBcIjMyM1wiOiBcIsOTXCIsIFwiMzMzXCI6IFwiw5tcIiwgXCIzNDNcIjogXCLDo1wiLCBcIjM1M1wiOiBcIsOrXCIsIFwiMzYzXCI6IFwiw7NcIiwgXCIzNzNcIjogXCLDu1wiLFxuXHRcdFwiMjQ0XCI6IFwiwqRcIiwgXCIyNTRcIjogXCLCrFwiLCBcIjI2NFwiOiBcIiAgzIFcIiwgXCIyNzRcIjogXCIx4oGENFwiLCBcIjMwNFwiOiBcIsOEXCIsIFwiMzE0XCI6IFwiw4xcIiwgXCIzMjRcIjogXCLDlFwiLCBcIjMzNFwiOiBcIsOcXCIsIFwiMzQ0XCI6IFwiw6RcIiwgXCIzNTRcIjogXCLDrFwiLCBcIjM2NFwiOiBcIsO0XCIsIFwiMzc0XCI6IFwiw7xcIixcblx0XHRcIjI0NVwiOiBcIsKlXCIsIFwiMjU1XCI6IFwiLVwiLCBcIjI2NVwiOiBcIs68XCIsIFwiMjc1XCI6IFwiMeKBhDJcIiwgXCIzMDVcIjogXCLDhVwiLCBcIjMxNVwiOiBcIsONXCIsIFwiMzI1XCI6IFwiw5VcIiwgXCIzMzVcIjogXCLDnVwiLCAgXCIzNDVcIjogXCLDpVwiLCBcIjM1NVwiOiBcIsOtXCIsIFwiMzY1XCI6IFwiw7VcIiwgXCIzNzVcIjogXCLDvVwiLFxuXHRcdFwiMjQ2XCI6IFwiwqZcIiwgXCIyNTZcIjogXCLCrlwiLCBcIjI2NlwiOiBcIsK2XCIsIFwiMjc2XCI6IFwiM+KBhDRcIiwgXCIzMDZcIjogXCLDhlwiLCBcIjMxNlwiOiBcIsOOXCIsIFwiMzI2XCI6IFwiw5ZcIiwgXCIzMzZcIjogXCLDnlwiLCBcIjM0NlwiOiBcIsOmXCIsIFwiMzU2XCI6IFwiw65cIiwgXCIzNjZcIjogXCLDtlwiLCBcIjM3NlwiOiBcIsO+XCIsXG5cdFx0XCIyNDdcIjogXCLCp1wiLCBcIjI1N1wiOiBcIiDMhFwiLCBcIjI2N1wiOiBcIsK3XCIsIFwiMjc3XCI6IFwiwr9cIiwgXCIzMDdcIjogXCLDh1wiLCBcIjMxN1wiOiBcIsOPXCIsIFwiMzI3XCI6IFwiw5dcIiwgXCIzMzdcIjogXCLDn1wiLCBcIjM0N1wiOiBcIsOnXCIsIFwiMzU3XCI6IFwiw69cIiwgXCIzNjdcIjogXCLDt1wiLCBcIjM3N1wiOiBcIsO/XCIsXG5cdFx0XCIyNTBcIjogXCIgzIhcIiwgXCIyNjBcIjogXCLCsFwiLCBcIjI3MFwiOiBcIiDMp1wiLCBcIjMwMFwiOiBcIsOAXCIsIFwiMzEwXCI6IFwiw4hcIiwgXCIzMjBcIjogXCLDkFwiLCBcIjMzMFwiOiBcIsOYXCIsIFwiMzQwXCI6IFwiw6BcIiwgXCIzNTBcIjogXCLDqFwiLCBcIjM2MFwiOiBcIsOwXCIsIFwiMzcwXCI6IFwiw7hcIixcblx0XHRcIjI1MVwiOiBcIsKpXCIsIFwiMjYxXCI6IFwiwrFcIiwgXCIyNzFcIjogXCIxXCIsIFwiMzAxXCI6IFwiw4FcIiwgXCIzMTFcIjogXCLDiVwiLCBcIjMyMVwiOiBcIsORXCIsIFwiMzMxXCI6IFwiw5lcIiwgXCIzNDFcIjogXCLDoVwiLCBcIjM1MVwiOiBcIsOpXCIsIFwiMzYxXCI6IFwiw7FcIiwgXCIzNzFcIjogXCLDuVwiIH07XG5cdHRoaXMudHJhbnNsYXRlU3RyaW5nID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIGFyciA9IHN0ci5zcGxpdCgnXFxcXCcpO1xuXHRcdGlmIChhcnIubGVuZ3RoID09PSAxKSByZXR1cm4gc3RyO1xuXHRcdHZhciBvdXQgPSBudWxsO1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goYXJyLCBmdW5jdGlvbihzKSB7XG5cdFx0XHRpZiAob3V0ID09PSBudWxsKVxuXHRcdFx0XHRvdXQgPSBzO1xuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciBjID0gY2hhck1hcFtzLnN1YnN0cmluZygwLCAyKV07XG5cdFx0XHRcdGlmIChjICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3V0ICs9IGMgKyBzLnN1YnN0cmluZygyKTtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0YyA9IGNoYXJNYXAyW3Muc3Vic3RyaW5nKDAsIDMpXTtcblx0XHRcdFx0XHRpZiAoYyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0b3V0ICs9IGMgKyBzLnN1YnN0cmluZygzKTtcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGMgPSBjaGFyTWFwMVtzLnN1YnN0cmluZygwLCAxKV07XG5cdFx0XHRcdFx0XHRpZiAoYyAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRvdXQgKz0gYyArIHMuc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRvdXQgKz0gXCJcXFxcXCIgKyBzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvdXQ7XG5cdH07XG5cdHRoaXMuZ2V0TnVtYmVyID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHR2YXIgbnVtID0gMDtcblx0XHR3aGlsZSAoaW5kZXggPCBsaW5lLmxlbmd0aCkge1xuXHRcdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpbmRleCkpIHtcblx0XHRcdFx0Y2FzZSAnMCc6bnVtID0gbnVtKjEwO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzEnOm51bSA9IG51bSoxMCsxO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzInOm51bSA9IG51bSoxMCsyO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzMnOm51bSA9IG51bSoxMCszO2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzQnOm51bSA9IG51bSoxMCs0O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzUnOm51bSA9IG51bSoxMCs1O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzYnOm51bSA9IG51bSoxMCs2O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzcnOm51bSA9IG51bSoxMCs3O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzgnOm51bSA9IG51bSoxMCs4O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGNhc2UgJzknOm51bSA9IG51bSoxMCs5O2luZGV4Kys7YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0cmV0dXJuIHtudW06IG51bSwgaW5kZXg6IGluZGV4fTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtudW06IG51bSwgaW5kZXg6IGluZGV4fTtcblx0fTtcblxuXHR0aGlzLmdldEZyYWN0aW9uID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHR2YXIgbnVtID0gMTtcblx0XHR2YXIgZGVuID0gMTtcblx0XHRpZiAobGluZS5jaGFyQXQoaW5kZXgpICE9PSAnLycpIHtcblx0XHRcdHZhciByZXQgPSB0aGlzLmdldE51bWJlcihsaW5lLCBpbmRleCk7XG5cdFx0XHRudW0gPSByZXQubnVtO1xuXHRcdFx0aW5kZXggPSByZXQuaW5kZXg7XG5cdFx0fVxuXHRcdGlmIChsaW5lLmNoYXJBdChpbmRleCkgPT09ICcvJykge1xuXHRcdFx0aW5kZXgrKztcblx0XHRcdGlmIChsaW5lLmNoYXJBdChpbmRleCkgPT09ICcvJykge1xuXHRcdFx0XHR2YXIgZGl2ID0gMC41O1xuXHRcdFx0XHR3aGlsZSAobGluZS5jaGFyQXQoaW5kZXgrKykgPT09ICcvJylcblx0XHRcdFx0XHRkaXYgPSBkaXYgLzI7XG5cdFx0XHRcdHJldHVybiB7dmFsdWU6IG51bSAqIGRpdiwgaW5kZXg6IGluZGV4LTF9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGlTYXZlID0gaW5kZXg7XG5cdFx0XHRcdHZhciByZXQyID0gdGhpcy5nZXROdW1iZXIobGluZSwgaW5kZXgpO1xuXHRcdFx0XHRpZiAocmV0Mi5udW0gPT09IDAgJiYgaVNhdmUgPT09IGluZGV4KVx0Ly8gSWYgd2UgZGlkbid0IHVzZSBhbnkgY2hhcmFjdGVycywgaXQgaXMgYW4gaW1wbGllZCAyXG5cdFx0XHRcdFx0cmV0Mi5udW0gPSAyO1xuXHRcdFx0XHRpZiAocmV0Mi5udW0gIT09IDApXG5cdFx0XHRcdFx0ZGVuID0gcmV0Mi5udW07XG5cdFx0XHRcdGluZGV4ID0gcmV0Mi5pbmRleDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge3ZhbHVlOiBudW0vZGVuLCBpbmRleDogaW5kZXh9O1xuXHR9O1xuXG5cdHRoaXMudGhlUmV2ZXJzZXIgPSBmdW5jdGlvbihzdHIpIHtcblx0XHRpZiAocGFyc2VDb21tb24uZW5kc1dpdGgoc3RyLCBcIiwgVGhlXCIpKVxuXHRcdFx0cmV0dXJuIFwiVGhlIFwiICsgc3RyLnN1YnN0cmluZygwLCBzdHIubGVuZ3RoLTUpO1xuXHRcdGlmIChwYXJzZUNvbW1vbi5lbmRzV2l0aChzdHIsIFwiLCBBXCIpKVxuXHRcdFx0cmV0dXJuIFwiQSBcIiArIHN0ci5zdWJzdHJpbmcoMCwgc3RyLmxlbmd0aC0zKTtcblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHRoaXMuc3RyaXBDb21tZW50ID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dmFyIGkgPSBzdHIuaW5kZXhPZignJScpO1xuXHRcdGlmIChpID49IDApXG5cdFx0XHRyZXR1cm4gcGFyc2VDb21tb24uc3RyaXAoc3RyLnN1YnN0cmluZygwLCBpKSk7XG5cdFx0cmV0dXJuIHBhcnNlQ29tbW9uLnN0cmlwKHN0cik7XG5cdH07XG5cblx0dGhpcy5nZXRJbnQgPSBmdW5jdGlvbihzdHIpIHtcblx0XHQvLyBUaGlzIHBhcnNlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgZm9yIGEgbnVtYmVyIGFuZCByZXR1cm5zIHsgdmFsdWU6IG51bSwgZGlnaXRzOiBudW0gfVxuXHRcdC8vIElmIGRpZ2l0cyBpcyAwLCB0aGVuIHRoZSBzdHJpbmcgZGlkbid0IHBvaW50IHRvIGEgbnVtYmVyLlxuXHRcdHZhciB4ID0gcGFyc2VJbnQoc3RyKTtcblx0XHRpZiAoaXNOYU4oeCkpXG5cdFx0XHRyZXR1cm4ge2RpZ2l0czogMH07XG5cdFx0dmFyIHMgPSBcIlwiICsgeDtcblx0XHR2YXIgaSA9IHN0ci5pbmRleE9mKHMpO1x0Ly8gVGhpcyBpcyB0byBhY2NvdW50IGZvciBsZWFkaW5nIHNwYWNlc1xuXHRcdHJldHVybiB7dmFsdWU6IHgsIGRpZ2l0czogaStzLmxlbmd0aH07XG5cdH07XG5cblx0dGhpcy5nZXRGbG9hdCA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdC8vIFRoaXMgcGFyc2VzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBmb3IgYSBudW1iZXIgYW5kIHJldHVybnMgeyB2YWx1ZTogbnVtLCBkaWdpdHM6IG51bSB9XG5cdFx0Ly8gSWYgZGlnaXRzIGlzIDAsIHRoZW4gdGhlIHN0cmluZyBkaWRuJ3QgcG9pbnQgdG8gYSBudW1iZXIuXG5cdFx0dmFyIHggPSBwYXJzZUZsb2F0KHN0cik7XG5cdFx0aWYgKGlzTmFOKHgpKVxuXHRcdFx0cmV0dXJuIHtkaWdpdHM6IDB9O1xuXHRcdHZhciBzID0gXCJcIiArIHg7XG5cdFx0dmFyIGkgPSBzdHIuaW5kZXhPZihzKTtcdC8vIFRoaXMgaXMgdG8gYWNjb3VudCBmb3IgbGVhZGluZyBzcGFjZXNcblx0XHRyZXR1cm4ge3ZhbHVlOiB4LCBkaWdpdHM6IGkrcy5sZW5ndGh9O1xuXHR9O1xuXG5cdHRoaXMuZ2V0TWVhc3VyZW1lbnQgPSBmdW5jdGlvbih0b2tlbnMpIHtcblx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgdXNlZDogMCB9O1xuXHRcdHZhciB1c2VkID0gMTtcblx0XHR2YXIgbnVtID0gJyc7XG5cdFx0aWYgKHRva2Vuc1swXS50b2tlbiA9PT0gJy0nKSB7XG5cdFx0XHR0b2tlbnMuc2hpZnQoKTtcblx0XHRcdG51bSA9ICctJztcblx0XHRcdHVzZWQrKztcblx0XHR9XG5cdFx0ZWxzZSBpZiAodG9rZW5zWzBdLnR5cGUgIT09ICdudW1iZXInKSByZXR1cm4geyB1c2VkOiAwIH07XG5cdFx0bnVtICs9IHRva2Vucy5zaGlmdCgpLnRva2VuO1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSByZXR1cm4geyB1c2VkOiAxLCB2YWx1ZTogcGFyc2VJbnQobnVtKSB9O1xuXHRcdHZhciB4ID0gdG9rZW5zLnNoaWZ0KCk7XG5cdFx0aWYgKHgudG9rZW4gPT09ICcuJykge1xuXHRcdFx0dXNlZCsrO1xuXHRcdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDApIHJldHVybiB7IHVzZWQ6IHVzZWQsIHZhbHVlOiBwYXJzZUludChudW0pIH07XG5cdFx0XHRpZiAodG9rZW5zWzBdLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0XHRcdHggPSB0b2tlbnMuc2hpZnQoKTtcblx0XHRcdFx0bnVtID0gbnVtICsgJy4nICsgeC50b2tlbjtcblx0XHRcdFx0dXNlZCsrO1xuXHRcdFx0XHRpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHsgdXNlZDogdXNlZCwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKSB9O1xuXHRcdFx0fVxuXHRcdFx0eCA9IHRva2Vucy5zaGlmdCgpO1xuXHRcdH1cblx0XHRzd2l0Y2ggKHgudG9rZW4pIHtcblx0XHRcdGNhc2UgJ3B0JzogcmV0dXJuIHsgdXNlZDogdXNlZCsxLCB2YWx1ZTogcGFyc2VGbG9hdChudW0pIH07XG5cdFx0XHRjYXNlICdjbSc6IHJldHVybiB7IHVzZWQ6IHVzZWQrMSwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKS8yLjU0KjcyIH07XG5cdFx0XHRjYXNlICdpbic6IHJldHVybiB7IHVzZWQ6IHVzZWQrMSwgdmFsdWU6IHBhcnNlRmxvYXQobnVtKSo3MiB9O1xuXHRcdFx0ZGVmYXVsdDogdG9rZW5zLnVuc2hpZnQoeCk7IHJldHVybiB7IHVzZWQ6IHVzZWQsIHZhbHVlOiBwYXJzZUZsb2F0KG51bSkgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHsgdXNlZDogMCB9O1xuXHR9O1xuXHR2YXIgc3Vic3RJbkNob3JkID0gZnVuY3Rpb24oc3RyKVxuXHR7XG5cdFx0d2hpbGUgKCBzdHIuaW5kZXhPZihcIlxcXFxuXCIpICE9PSAtMSlcblx0XHR7XG5cdFx0XHRzdHIgPSBzdHIucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXHR0aGlzLmdldEJyYWNrZXR0ZWRTdWJzdHJpbmcgPSBmdW5jdGlvbihsaW5lLCBpLCBtYXhFcnJvckNoYXJzLCBfbWF0Y2hDaGFyKVxuXHR7XG5cdFx0Ly8gVGhpcyBleHRyYWN0cyB0aGUgc3ViIHN0cmluZyBieSBsb29raW5nIGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYW5kIHNlYXJjaGluZyBmb3IgdGhhdFxuXHRcdC8vIGNoYXJhY3RlciBsYXRlciBpbiB0aGUgbGluZSAob3Igc2VhcmNoIGZvciB0aGUgb3B0aW9uYWwgX21hdGNoQ2hhcikuXG5cdFx0Ly8gRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGEgcXVvdGUgaXQgd2lsbCBsb29rIGZvclxuXHRcdC8vIHRoZSBlbmQgcXVvdGUuIElmIHRoZSBlbmQgb2YgdGhlIGxpbmUgaXMgcmVhY2hlZCwgdGhlbiBvbmx5IHVwIHRvIHRoZSBkZWZhdWx0IG51bWJlclxuXHRcdC8vIG9mIGNoYXJhY3RlcnMgYXJlIHJldHVybmVkLCBzbyB0aGF0IGEgbWlzc2luZyBlbmQgcXVvdGUgd29uJ3QgZWF0IHVwIHRoZSBlbnRpcmUgbGluZS5cblx0XHQvLyBJdCByZXR1cm5zIHRoZSBzdWJzdHJpbmcgYW5kIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZC5cblx0XHQvLyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQgaXMgbm9ybWFsbHkgdHdvIG1vcmUgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgc3Vic3RyaW5nLFxuXHRcdC8vIGJ1dCBpbiB0aGUgZXJyb3IgY2FzZSBpdCBtaWdodCBub3QgYmUuXG5cdFx0dmFyIG1hdGNoQ2hhciA9IF9tYXRjaENoYXIgfHwgbGluZS5jaGFyQXQoaSk7XG5cdFx0dmFyIHBvcyA9IGkrMTtcblx0XHR3aGlsZSAoKHBvcyA8IGxpbmUubGVuZ3RoKSAmJiAobGluZS5jaGFyQXQocG9zKSAhPT0gbWF0Y2hDaGFyKSlcblx0XHRcdCsrcG9zO1xuXHRcdGlmIChsaW5lLmNoYXJBdChwb3MpID09PSBtYXRjaENoYXIpXG5cdFx0XHRyZXR1cm4gW3Bvcy1pKzEsc3Vic3RJbkNob3JkKGxpbmUuc3Vic3RyaW5nKGkrMSwgcG9zKSksIHRydWVdO1xuXHRcdGVsc2VcdC8vIHdlIGhpdCB0aGUgZW5kIG9mIGxpbmUsIHNvIHdlJ2xsIGp1c3QgcGljayBhbiBhcmJpdHJhcnkgbnVtIG9mIGNoYXJzIHNvIHRoZSBsaW5lIGRvZXNuJ3QgZGlzYXBwZWFyLlxuXHRcdHtcblx0XHRcdHBvcyA9IGkrbWF4RXJyb3JDaGFycztcblx0XHRcdGlmIChwb3MgPiBsaW5lLmxlbmd0aC0xKVxuXHRcdFx0XHRwb3MgPSBsaW5lLmxlbmd0aC0xO1xuXHRcdFx0cmV0dXJuIFtwb3MtaSsxLCBzdWJzdEluQ2hvcmQobGluZS5zdWJzdHJpbmcoaSsxLCBwb3MpKSwgZmFsc2VdO1xuXHRcdH1cblx0fTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVG9rZW5pemVyO1xuIiwiLy8gICAgd3JhcF9saW5lcy5qczogZG9lcyBsaW5lIHdyYXAgb24gYW4gYWxyZWFkeSBwYXJzZWQgdHVuZS5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxOCBQYXVsIFJvc2VuIChwYXVsIGF0IHBhdWxyb3NlbiBkb3QgbmV0KVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiB3cmFwTGluZXModHVuZSwgbGluZUJyZWFrcykge1xuXHRpZiAoIWxpbmVCcmVha3MgfHwgdHVuZS5saW5lcy5sZW5ndGggPT09IDApXG5cdFx0cmV0dXJuO1xuXG5cdC8vIHR1bmUubGluZXMgY29udGFpbnMgbmVzdGVkIGFycmF5czogdGhlcmUgaXMgYW4gYXJyYXkgb2YgbGluZXMgKHRoYXQncyB0aGUgcGFydCB0aGlzIGZ1bmN0aW9uIHJld3JpdGVzKSxcblx0Ly8gdGhlcmUgaXMgYW4gYXJyYXkgb2Ygc3RhZmZzIHBlciBsaW5lIChmb3IgaW5zdGFuY2UsIHBpYW5vIHdpbGwgaGF2ZSAyLCBvcmNoZXN0cmEgd2lsbCBoYXZlIG1hbnkpXG5cdC8vIHRoZXJlIGlzIGFuIGFycmF5IG9mIHZvaWNlcyBwZXIgc3RhZmYgKGZvciBpbnN0YW5jZSwgNC1wYXJ0IGhhcm1vbnkgbWlnaHQgaGF2ZSBiYXNzIGFuZCB0ZW5vciBvbiBhIHNpbmdsZSBzdGFmZilcblx0Ly8gVGhlIG1lYXN1cmUgbnVtYmVycyBzdGFydCBhdCB6ZXJvIGZvciBlYWNoIHN0YWZmLCBidXQgb24gdGhlIHN1Y2NlZWRpbmcgbGluZXMsIHRoZSBtZWFzdXJlIG51bWJlcnMgYXJlIHJlc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuXG5cdHZhciBuZXdMaW5lcyA9IFtdO1xuXHQvLyBrZWVwIHRyYWNrIG9mIG91ciBjb3VudGVycyBmb3IgZWFjaCBzdGFmZiBhbmQgdm9pY2Vcblx0dmFyIHN0YXJ0TmV3TGluZSA9IFtdO1xuXHR2YXIgY3VycmVudExpbmUgPSBbXTtcblx0dmFyIG1lYXN1cmVOdW1iZXIgPSBbXTtcblx0dmFyIG1lYXN1cmVNYXJrZXIgPSBbXTtcblx0dmFyIGxhc3RNZXRlciA9ICcnO1xuXHR2YXIgdm9pY2VTdGFydCA9IHt9O1xuXHR2YXIgbGluZXNXaXRob3V0U3RhZmYgPSAwO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdHVuZS5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBsaW5lID0gdHVuZS5saW5lc1tpXTtcblx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0dmFyIHN0YWZmcyA9IGxpbmUuc3RhZmY7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHN0YWZmcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoc3RhcnROZXdMaW5lW2pdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzdGFydE5ld0xpbmVbal0gPSBbXTtcblx0XHRcdFx0XHRjdXJyZW50TGluZVtqXSA9IFtdO1xuXHRcdFx0XHRcdG1lYXN1cmVOdW1iZXJbal0gPSBbXTtcblx0XHRcdFx0XHRtZWFzdXJlTWFya2VyW2pdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHN0YWZmID0gc3RhZmZzW2pdO1xuXHRcdFx0XHR2YXIgdm9pY2VzID0gc3RhZmYudm9pY2VzO1xuXHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IHZvaWNlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdGlmIChzdGFydE5ld0xpbmVbal1ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0c3RhcnROZXdMaW5lW2pdW2tdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGN1cnJlbnRMaW5lW2pdW2tdID0gMDtcblx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXJbal1ba10gPSAwO1xuXHRcdFx0XHRcdFx0bWVhc3VyZU1hcmtlcltqXVtrXSA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChsaW5lc1dpdGhvdXRTdGFmZiA+IDApIGN1cnJlbnRMaW5lW2pdW2tdICs9IGxpbmVzV2l0aG91dFN0YWZmO1xuXHRcdFx0XHRcdHZhciB2b2ljZSA9IHZvaWNlc1trXTtcblx0XHRcdFx0XHRmb3IgKHZhciBlID0gMDsgZSA8IHZvaWNlLmxlbmd0aDsgZSsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoc3RhcnROZXdMaW5lW2pdW2tdKSB7XG5cdFx0XHRcdFx0XHRcdGlmICghbmV3TGluZXNbY3VycmVudExpbmVbal1ba11dKVxuXHRcdFx0XHRcdFx0XHRcdG5ld0xpbmVzW2N1cnJlbnRMaW5lW2pdW2tdXSA9IHsgc3RhZmY6IFtdIH07XG5cdFx0XHRcdFx0XHRcdGlmICghbmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdID0ge3ZvaWNlczogW119O1xuXHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBzdGFmZikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGtleSA9PT0gJ21ldGVyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChuZXdMaW5lcy5sZW5ndGggPT09IDEgfHwgbGFzdE1ldGVyICE9PSBKU09OLnN0cmluZ2lmeShzdGFmZltrZXldKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFzdE1ldGVyID0gSlNPTi5zdHJpbmdpZnkoc3RhZmZba2V5XSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdMaW5lc1tjdXJyZW50TGluZVtqXVtrXV0uc3RhZmZbal1ba2V5XSA9IHN0YWZmW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGtleSAhPT0gJ3ZvaWNlcycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdMaW5lc1tjdXJyZW50TGluZVtqXVtrXV0uc3RhZmZbal1ba2V5XSA9IHN0YWZmW2tleV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKG1lYXN1cmVNYXJrZXJbal1ba10pXG5cdFx0XHRcdFx0XHRcdFx0bmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdLmJhck51bWJlciA9IG1lYXN1cmVNYXJrZXJbal1ba107XG5cdFx0XHRcdFx0XHRcdHN0YXJ0TmV3TGluZVtqXVtrXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIGVsZW1lbnQgPSB2b2ljZVtlXTtcblx0XHRcdFx0XHRcdGlmICghbmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdLnZvaWNlc1trXSkge1xuXHRcdFx0XHRcdFx0XHRuZXdMaW5lc1tjdXJyZW50TGluZVtqXVtrXV0uc3RhZmZbal0udm9pY2VzW2tdID0gW107XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIHN0YXJ0SXRlbSBpbiB2b2ljZVN0YXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHZvaWNlU3RhcnQuaGFzT3duUHJvcGVydHkoc3RhcnRJdGVtKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3TGluZXNbY3VycmVudExpbmVbal1ba11dLnN0YWZmW2pdLnZvaWNlc1trXS5wdXNoKHZvaWNlU3RhcnRbc3RhcnRJdGVtXSlcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG5ld0xpbmVzW2N1cnJlbnRMaW5lW2pdW2tdXS5zdGFmZltqXS52b2ljZXNba10ucHVzaChlbGVtZW50KTtcblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmVsX3R5cGUgPT09ICdzdGVtJykge1xuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgbmljZSB0cmljayB0byBqdXN0IHBheSBhdHRlbnRpb24gdG8gdGhlIGxhc3Qgc2V0dGluZyBvZiBlYWNoIHR5cGUuXG5cdFx0XHRcdFx0XHRcdHZvaWNlU3RhcnRbZWxlbWVudC5lbF90eXBlXSA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChlbGVtZW50LmVsX3R5cGUgPT09ICdiYXInKSB7XG5cdFx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXJbal1ba10rKztcblx0XHRcdFx0XHRcdFx0aWYgKGxpbmVCcmVha3NbbWVhc3VyZU51bWJlcltqXVtrXV0pIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFydE5ld0xpbmVbal1ba10gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRMaW5lW2pdW2tdKys7XG5cdFx0XHRcdFx0XHRcdFx0bWVhc3VyZU1hcmtlcltqXVtrXSA9IGVsZW1lbnQuYmFyTnVtYmVyO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbGVtZW50LmJhck51bWJlcjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsaW5lc1dpdGhvdXRTdGFmZiA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0xpbmVzLnB1c2gobGluZSk7XG5cdFx0XHRsaW5lc1dpdGhvdXRTdGFmZisrO1xuXHRcdH1cblx0fVxuXHR0dW5lLmxpbmVzID0gbmV3TGluZXM7XG59XG5cbmZ1bmN0aW9uIGZyZWVGb3JtTGluZUJyZWFrcyh3aWR0aHMsIGxpbmVCcmVha1BvaW50KSB7XG5cdHZhciBsaW5lQnJlYWtzID0gW107XG5cdHZhciB0b3RhbHMgPSBbXTtcblx0dmFyIHRvdGFsVGhpc0xpbmUgPSAwO1xuXHQvLyBydW4gdGhyb3VnaCBlYWNoIG1lYXN1cmUgYW5kIHNlZSBpZiB0aGUgYWNjdW11bGF0aW9uIGlzIGxlc3MgdGhhbiB0aGUgaWRlYWwuXG5cdC8vIGlmIGl0IHBhc3NlcyB0aGUgaWRlYWwsIHRoZW4gc2VlIHdoZXRoZXIgdGhlIGxhc3Qgb3IgdGhpcyBvbmUgaXMgY2xvc2VyIHRvIHRoZSBpZGVhbC5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB3aWR0aHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgd2lkdGggPSB3aWR0aHNbaV07XG5cdFx0dmFyIGF0dGVtcHRlZFdpZHRoID0gdG90YWxUaGlzTGluZSArIHdpZHRoO1xuXHRcdGlmIChhdHRlbXB0ZWRXaWR0aCA8IGxpbmVCcmVha1BvaW50KVxuXHRcdFx0dG90YWxUaGlzTGluZSA9IGF0dGVtcHRlZFdpZHRoO1xuXHRcdGVsc2Uge1xuXHRcdFx0Ly8gVGhpcyBqdXN0IHBhc3NlZCB0aGUgaWRlYWwsIHNvIHNlZSB3aGV0aGVyIHRoZSBwcmV2aW91cyBvciB0aGUgY3VycmVudCBudW1iZXIgb2YgbWVhc3VyZXMgaXMgY2xvc2VyLlxuXHRcdFx0dmFyIG9sZERpc3RhbmNlID0gbGluZUJyZWFrUG9pbnQgLSB0b3RhbFRoaXNMaW5lO1xuXHRcdFx0dmFyIG5ld0Rpc3RhbmNlID0gYXR0ZW1wdGVkV2lkdGggLSBsaW5lQnJlYWtQb2ludDtcblx0XHRcdGlmIChvbGREaXN0YW5jZSA8IG5ld0Rpc3RhbmNlICYmIHRvdGFsVGhpc0xpbmUgPiAwKSB7XG5cdFx0XHRcdGxpbmVCcmVha3MucHVzaChpIC0gMSk7XG5cdFx0XHRcdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWxUaGlzTGluZSAtIHdpZHRoKSk7XG5cdFx0XHRcdHRvdGFsVGhpc0xpbmUgPSB3aWR0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChpIDwgd2lkdGhzLmxlbmd0aC0xKSB7XG5cdFx0XHRcdFx0bGluZUJyZWFrcy5wdXNoKGkpO1xuXHRcdFx0XHRcdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWxUaGlzTGluZSkpO1xuXHRcdFx0XHRcdHRvdGFsVGhpc0xpbmUgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWxUaGlzTGluZSkpO1xuXHRyZXR1cm4geyBsaW5lQnJlYWtzOiBsaW5lQnJlYWtzLCB0b3RhbHM6IHRvdGFscyB9O1xufVxuXG4vLyBmdW5jdGlvbiBjcmVhdGVMaW5lVGVzdEFycmF5KG51bUxpbmVzLCBudW1NZWFzdXJlcywgbWF4TWVhc3VyZXNQZXJMaW5lLCBtaW5NZWFzdXJlc1BlckxpbmUpIHtcbi8vIFx0dmFyIHRyaWVzID0gW107XG4vLyBcdC8vIFRvIGdldCBhbGwgdGhlIGl0ZXJhdGlvbnMsIGl0IGlzIGV2ZXJ5IGRpZ2l0IGluIGEgcGFydGljdWxhciBiYXNlLW51bWJlcmluZyBzeXN0ZW0uXG4vLyBcdC8vIFRoYXQgaXMsIHdlIHdhbnQgdG8gZ2VuZXJhdGUgZXZlcnkgbnVtYmVyIHRoYXQgaXMgKG51bUxpbmVzLTEpIGRpZ2l0cywgaW4gYmFzZSAobWF4LW1pbisxKVxuLy8gXHQvLyBGb3IgaW5zdGFuY2UsIGZvciA1IGxpbmVzIHdoZXJlIHRoZSBtaW4gaXMgNiBhbmQgbWF4IGlzIDgsIHdlIHdhbnQgZXZlciBjb21iaW5hdGlvbiBvZiA0IGRpZ2l0cyBpbiBiYXNlIDMuXG4vLyBcdHZhciBiYXNlID0gbWF4TWVhc3VyZXNQZXJMaW5lIC0gbWluTWVhc3VyZXNQZXJMaW5lICsgMTtcbi8vIFx0dmFyIGRpZ2l0cyA9IG51bUxpbmVzIC0gMTsgLy8gVGhlIGxhc3QgZGlnaXQgaXMgZml4ZWQ6IGl0IGlzIHdoYXQgZXZlciBpcyBuZWVkZWQgdG8gc3VtIHVwIHRvIHRoZSB0b3RhbCBudW1iZXIgb2YgbWVhc3VyZXMuXG4vLyBcdHZhciBkb25lID0gZmFsc2U7XG4vLyBcdHZhciBpdGVyID0gMDtcbi8vIFx0d2hpbGUgKCFkb25lKSB7XG4vLyBcdFx0dmFyIGF0dGVtcHQgPSBbXTtcbi8vIFx0XHR2YXIgbnVtID0gaXRlcjtcbi8vIFx0XHR2YXIgdG90YWwgPSAwO1xuLy8gXHRcdGZvciAodmFyIGQgPSBkaWdpdHMgLSAxOyBkID49IDA7IGQtLSkge1xuLy8gXHRcdFx0YXR0ZW1wdFtkXSA9IChudW0gJSBiYXNlKSArIG1pbk1lYXN1cmVzUGVyTGluZTtcbi8vIFx0XHRcdG51bSA9IE1hdGguZmxvb3IobnVtIC8gYmFzZSk7XG4vLyBcdFx0XHR0b3RhbCArPSBhdHRlbXB0W2RdO1xuLy8gXHRcdH1cbi8vIFx0XHRpZiAobnVtID4gMClcbi8vIFx0XHRcdGRvbmUgPSB0cnVlOyAvLyBjb250aW51ZSB1bnRpbCB3ZSBleGNlZWQgdGhlIGdyZWF0ZXN0IG51bWJlci4gV2Uga25vdyBiZWNhdXNlIHRoZXJlIGlzIGEgcmVtYWluZXIuXG4vLyBcdFx0ZWxzZSB7XG4vLyBcdFx0XHR2YXIgbGFzdExpbmUgPSBudW1NZWFzdXJlcyAtIHRvdGFsO1xuLy8gXHRcdFx0aWYgKGxhc3RMaW5lID49IG1pbk1lYXN1cmVzUGVyTGluZSAmJiBsYXN0TGluZSA8PSBtYXhNZWFzdXJlc1BlckxpbmUpIHtcbi8vIFx0XHRcdFx0YXR0ZW1wdFtkaWdpdHNdID0gbGFzdExpbmU7XG4vLyBcdFx0XHRcdHRyaWVzLnB1c2goYXR0ZW1wdCk7XG4vLyBcdFx0XHR9XG4vLyBcdFx0XHRpdGVyKys7XG4vLyBcdFx0fVxuLy8gXHR9XG4vLyBcdHJldHVybiB0cmllcztcbi8vIH1cblxuLy8gZnVuY3Rpb24gZ2V0VmFyaWFuY2UoYXR0ZW1wdCwgaWRlYWxMaW5lQnJlYWssIHdpZHRocywgYWxsb3dhYmxlT3ZlcmFnZSkge1xuLy8gXHR2YXIgbWVhc3VyZU51bWJlciA9IDA7XG4vLyBcdHZhciB0aGlzV29yc3RWYXJpYW5jZSA9IDA7XG4vLyBcdGZvciAodmFyIGogPSAwOyBqIDwgYXR0ZW1wdC5sZW5ndGg7IGorKykge1xuLy8gXHRcdHZhciBsaW5lV2lkdGggPSAwO1xuLy8gXHRcdHZhciBtZWFzdXJlc1RoaXNMaW5lID0gYXR0ZW1wdFtqXTtcbi8vIFx0XHRmb3IgKHZhciBrID0gMDsgayA8IG1lYXN1cmVzVGhpc0xpbmU7IGsrKykge1xuLy8gXHRcdFx0bGluZVdpZHRoICs9IHdpZHRoc1ttZWFzdXJlTnVtYmVyKytdO1xuLy8gXHRcdH1cbi8vIFx0XHRpZiAobGluZVdpZHRoID4gYWxsb3dhYmxlT3ZlcmFnZSlcbi8vIFx0XHRcdHJldHVybiBudWxsO1xuLy8gXHRcdHZhciB2YXJpYW5jZSA9IE1hdGguYWJzKGxpbmVXaWR0aCAtIGlkZWFsTGluZUJyZWFrKTtcbi8vIFx0XHRpZiAodmFyaWFuY2UgPiB0aGlzV29yc3RWYXJpYW5jZSlcbi8vIFx0XHRcdHRoaXNXb3JzdFZhcmlhbmNlID0gdmFyaWFuY2U7XG4vLyBcdH1cbi8vIFx0cmV0dXJuIHRoaXNXb3JzdFZhcmlhbmNlO1xuLy8gfVxuXG4vLyBmdW5jdGlvbiBnZXRNYXhWYXJpYW5jZSh3aWR0aHMsIGxpbmVCcmVha1BvaW50LCBsaW5lQnJlYWtzKSB7XG4vLyBcdHZhciBtYXhWYXJpYW5jZSA9IDA7XG4vLyBcdHZhciBudW1MaW5lcyA9IGxpbmVCcmVha3MubGVuZ3RoICsgMTsgLy8gdGhlIGxhc3QgbGluZSBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgYnJlYWtcbi8vIFx0dmFyIG1lYXN1cmVOdW1iZXIgPSAwO1xuLy8gXHR2YXIgdG90YWxzID0gW107XG4vLyBcdGZvciAodmFyIGkgPSAwOyBpIDw9IGxpbmVCcmVha3MubGVuZ3RoOyBpKyspIHtcbi8vIFx0XHR2YXIgYnJlYWtNZWFzdXJlID0gKGkgPT09IGxpbmVCcmVha3MubGVuZ3RoKSA/IHdpZHRocy5sZW5ndGggOiBsaW5lQnJlYWtzW2ldO1xuLy8gXHRcdHZhciB0aGlzVG90YWwgPSAwO1xuLy8gXHRcdGZvciAodmFyIGogPSBtZWFzdXJlTnVtYmVyOyBqIDwgYnJlYWtNZWFzdXJlOyBqKyspIHtcbi8vIFx0XHRcdHRoaXNUb3RhbCArPSB3aWR0aHNbal07XG4vLyBcdFx0fVxuLy8gXHRcdG1lYXN1cmVOdW1iZXIgPSBicmVha01lYXN1cmU7XG4vLyBcdFx0dmFyIHRoaXNWYXJpYW5jZSA9IHRoaXNUb3RhbCA8PSBsaW5lQnJlYWtQb2ludCA/IGxpbmVCcmVha1BvaW50IC0gdGhpc1RvdGFsIDogMTAwMDAwMDtcbi8vIFx0XHR0b3RhbHMucHVzaCh7dG90YWw6IHRoaXNUb3RhbCwgdmFyaWFuY2U6IHRoaXNWYXJpYW5jZX0pXG4vLyBcdFx0bWF4VmFyaWFuY2UgPSBNYXRoLm1heChtYXhWYXJpYW5jZSwgdGhpc1ZhcmlhbmNlKTtcbi8vIFx0fVxuLy9cbi8vIFx0Y29uc29sZS5sb2cobGluZUJyZWFrUG9pbnQsIHRvdGFscylcbi8vIFx0cmV0dXJuIG1heFZhcmlhbmNlO1xuLy8gfVxuXG5mdW5jdGlvbiBnZXRWYXJpYW5jZSh3aWR0aHMsIGxpbmVCcmVha3MpIHtcblx0dmFyIG51bUxpbmVzID0gbGluZUJyZWFrcy5sZW5ndGggKyAxOyAvLyB0aGUgbGFzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBicmVha1xuXHR2YXIgYXZnID0gd2lkdGhzLnRvdGFsIC8gbnVtTGluZXM7XG5cdHZhciBsYXJnZXN0VmFyaWFuY2UgPSAwO1xuXHR2YXIgbWVhc3VyZU51bWJlciA9IDA7XG5cdGZvciAodmFyIGkgPSAwOyBpIDw9IGxpbmVCcmVha3MubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgYnJlYWtNZWFzdXJlID0gKGkgPT09IGxpbmVCcmVha3MubGVuZ3RoKSA/IHdpZHRocy5tZWFzdXJlV2lkdGhzLmxlbmd0aC0xIDogbGluZUJyZWFrc1tpXTtcblx0XHR2YXIgdGhpc1ZhcmlhbmNlID0gbGluZVZhcmlhbmNlKHdpZHRocy5tZWFzdXJlV2lkdGhzLCBtZWFzdXJlTnVtYmVyLCBicmVha01lYXN1cmUsIGF2Zyk7XG5cdFx0bWVhc3VyZU51bWJlciA9IGJyZWFrTWVhc3VyZSsxO1xuXHRcdGxhcmdlc3RWYXJpYW5jZSA9IE1hdGgubWF4KGxhcmdlc3RWYXJpYW5jZSwgdGhpc1ZhcmlhbmNlKTtcblx0fVxuXG5cdHJldHVybiBsYXJnZXN0VmFyaWFuY2U7XG59XG5cbi8vIGZ1bmN0aW9uIGdldEF2Z1ZhcmlhbmNlKHdpZHRocywgbGluZUJyZWFrUG9pbnQsIGxpbmVCcmVha3MpIHtcbi8vIFx0dmFyIHRvdGFsVmFyaWFuY2UgPSAwO1xuLy8gXHR2YXIgbnVtTGluZXMgPSBsaW5lQnJlYWtzLmxlbmd0aCArIDE7IC8vIHRoZSBsYXN0IGxpbmUgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGJyZWFrXG4vLyBcdHZhciBtZWFzdXJlTnVtYmVyID0gMDtcbi8vIFx0Zm9yICh2YXIgaSA9IDA7IGkgPD0gbGluZUJyZWFrcy5sZW5ndGg7IGkrKykge1xuLy8gXHRcdHZhciBicmVha01lYXN1cmUgPSAoaSA9PT0gbGluZUJyZWFrcy5sZW5ndGgpID8gd2lkdGhzLmxlbmd0aCA6IGxpbmVCcmVha3NbaV07XG4vLyBcdFx0dmFyIHRoaXNUb3RhbCA9IDA7XG4vLyBcdFx0Zm9yICh2YXIgaiA9IG1lYXN1cmVOdW1iZXI7IGogPCBicmVha01lYXN1cmU7IGorKykge1xuLy8gXHRcdFx0dGhpc1RvdGFsICs9IHdpZHRoc1tqXTtcbi8vIFx0XHR9XG4vLyBcdFx0bWVhc3VyZU51bWJlciA9IGJyZWFrTWVhc3VyZTtcbi8vIFx0XHR2YXIgdGhpc1ZhcmlhbmNlID0gTWF0aC5hYnMobGluZUJyZWFrUG9pbnQgLSB0aGlzVG90YWwpO1xuLy8gXHRcdHRvdGFsVmFyaWFuY2UgKz0gdGhpc1ZhcmlhbmNlO1xuLy8gXHR9XG4vL1xuLy8gXHRyZXR1cm4gdG90YWxWYXJpYW5jZSAvIG51bUxpbmVzO1xuLy8gfVxuXG5mdW5jdGlvbiBsaW5lVmFyaWFuY2Uod2lkdGhzLCBzdGFydCwgZW5kLCBhdmcpIHtcblx0dmFyIHRoaXNUb3RhbCA9IGxpbmVXaWR0aCh3aWR0aHMsIHN0YXJ0LCBlbmQpO1xuXHR2YXIgdGhpc1ZhcmlhbmNlID0gTWF0aC5hYnMoYXZnIC0gdGhpc1RvdGFsKTtcblx0cmV0dXJuIHRoaXNWYXJpYW5jZTtcbn1cblxuZnVuY3Rpb24gbGluZVdpZHRoKHdpZHRocywgc3RhcnQsIGVuZCkge1xuXHR2YXIgdGhpc1RvdGFsID0gMDtcblx0Zm9yICh2YXIgaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKVxuXHRcdHRoaXNUb3RhbCArPSB3aWR0aHNbal07XG5cdHJldHVybiB0aGlzVG90YWw7XG59XG5cbi8vIFRPRE8tUEVSOiBGb3IgbG9uZyBwaWVjZXMgb2YgbXVzaWMsIHRoaXMgY2FuIGdldCBsb25nLCBzbyBzdG9wIGZpbmRpbmcgdGhlIGNvbWJpbmF0aW9ucyBhdCBhbiBhcmJpdHJhcnkgcGxhY2UuXG5mdW5jdGlvbiBnZXRBdHRlbXB0cyh3aWR0aHMsIHN0YXJ0LCBsaW5lc0xlZnQsIG1pbiwgbWF4LCBsYXN0TGluZXMpIHtcblx0dmFyIE1BWF9DT01CSU5BVElPTlMgPSAxMjAwO1xuXHR2YXIgYWNjID0gMDtcblx0dmFyIGF0dGVtcHRzID0gW107XG5cdGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHdpZHRocy5sZW5ndGggJiYgYWNjIDwgbWF4OyBpKyspIHtcblx0XHRhY2MgKz0gd2lkdGhzW2ldO1xuXHRcdGlmIChhY2MgPiBtYXgpXG5cdFx0XHRicmVhaztcblx0XHRpZiAoYWNjID4gbWluKSB7XG5cdFx0XHRpZiAobGluZXNMZWZ0ID4gMCAmJiBhdHRlbXB0cy5sZW5ndGggPCBNQVhfQ09NQklOQVRJT05TKSB7XG5cdFx0XHRcdHZhciBuZXh0TGluZXMgPSBnZXRBdHRlbXB0cyh3aWR0aHMsIGkgKyAxLCBsaW5lc0xlZnQgLSAxLCBtaW4sIG1heCwgbGFzdExpbmVzKTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBuZXh0TGluZXMubGVuZ3RoOyBqKyspXG5cdFx0XHRcdFx0YXR0ZW1wdHMucHVzaChbaV0uY29uY2F0KG5leHRMaW5lc1tqXSkpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmVzTGVmdCA9PT0gMSAmJiBsYXN0TGluZXMuaW5kZXhPZihpKSA+PSAwKVxuXHRcdFx0XHRhdHRlbXB0cy5wdXNoKFtpXSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhdHRlbXB0cztcbn1cblxuZnVuY3Rpb24gbGFzdExpbmVQb3NzaWJpbGl0aWVzKHdpZHRocywgc3RhcnQsIG1pbiwgbWF4KSB7XG5cdHZhciBhY2MgPSAwO1xuXHR2YXIgcG9zc2liaWxpdGllcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gd2lkdGhzLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuXHRcdGFjYyArPSB3aWR0aHNbaV07XG5cdFx0aWYgKGFjYyA+IG1heClcblx0XHRcdGJyZWFrO1xuXHRcdGlmIChhY2MgPiBtaW4gJiYgaSA8IHN0YXJ0KSB7XG5cdFx0XHRwb3NzaWJpbGl0aWVzLnB1c2goaS0xKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBvc3NpYmlsaXRpZXM7XG59XG5cbmZ1bmN0aW9uIGNsb25lKGFycikge1xuXHR2YXIgbmV3QXJyID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKVxuXHRcdG5ld0Fyci5wdXNoKGFycltpXSk7XG5cdHJldHVybiBuZXdBcnI7XG59XG5cbmZ1bmN0aW9uIG9uZVRyeShtZWFzdXJlV2lkdGhzLCBpZGVhbFdpZHRocywgYWNjdW11bGF0b3IsIGxpbmVBY2N1bXVsYXRvciwgbGluZVdpZHRocywgbGFzdFZhcmlhbmNlLCBoaWdoZXN0VmFyaWFuY2UsIGN1cnJMaW5lLCBsaW5lQnJlYWtzLCBzdGFydEluZGV4LCBvdGhlclRyaWVzKSB7XG5cdGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgbWVhc3VyZVdpZHRocy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBtZWFzdXJlV2lkdGggPSBtZWFzdXJlV2lkdGhzW2ldO1xuXHRcdGFjY3VtdWxhdG9yICs9IG1lYXN1cmVXaWR0aDtcblx0XHRsaW5lQWNjdW11bGF0b3IgKz0gbWVhc3VyZVdpZHRoO1xuXHRcdHZhciB0aGlzVmFyaWFuY2UgPSBNYXRoLmFicyhhY2N1bXVsYXRvciAtIGlkZWFsV2lkdGhzW2N1cnJMaW5lXSk7XG5cdFx0dmFyIHZhcmlhbmNlSXNDbG9zZSA9IE1hdGguYWJzKHRoaXNWYXJpYW5jZSAtIGxhc3RWYXJpYW5jZSkgPCBpZGVhbFdpZHRoc1swXSAvIDEwOyAvLyBzZWUgaWYgdGhlIGRpZmZlcmVuY2UgaXMgbGVzcyB0aGFuIDEwJSwgaWYgc28sIHJ1biB0aGUgdGVzdCBib3RoIHdheXMuXG5cdFx0aWYgKHZhcmlhbmNlSXNDbG9zZSkge1xuXHRcdFx0aWYgKHRoaXNWYXJpYW5jZSA8IGxhc3RWYXJpYW5jZSkge1xuXHRcdFx0XHQvLyBBbHNvIGF0dGVtcHQgb25lIGxlc3MgbWVhc3VyZSBvbiB0aGUgY3VycmVudCBsaW5lIC0gc29tZXRpbWVzIHRoYXQgd29ya3Mgb3V0IGJldHRlci5cblx0XHRcdFx0dmFyIG5ld1dpZHRocyA9IGNsb25lKGxpbmVXaWR0aHMpO1xuXHRcdFx0XHR2YXIgbmV3QnJlYWtzID0gY2xvbmUobGluZUJyZWFrcyk7XG5cdFx0XHRcdG5ld0JyZWFrcy5wdXNoKGktMSk7XG5cdFx0XHRcdG5ld1dpZHRocy5wdXNoKGxpbmVBY2N1bXVsYXRvciAtIG1lYXN1cmVXaWR0aCk7XG5cdFx0XHRcdG90aGVyVHJpZXMucHVzaCh7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3I6IGFjY3VtdWxhdG9yLFxuXHRcdFx0XHRcdGxpbmVBY2N1bXVsYXRvcjogbWVhc3VyZVdpZHRoLFxuXHRcdFx0XHRcdGxpbmVXaWR0aHM6IG5ld1dpZHRocyxcblx0XHRcdFx0XHRsYXN0VmFyaWFuY2U6IE1hdGguYWJzKGFjY3VtdWxhdG9yIC0gaWRlYWxXaWR0aHNbY3VyckxpbmUrMV0pLFxuXHRcdFx0XHRcdGhpZ2hlc3RWYXJpYW5jZTogTWF0aC5tYXgoaGlnaGVzdFZhcmlhbmNlLCBsYXN0VmFyaWFuY2UpLFxuXHRcdFx0XHRcdGN1cnJMaW5lOiBjdXJyTGluZSsxLFxuXHRcdFx0XHRcdGxpbmVCcmVha3M6IG5ld0JyZWFrcyxcblx0XHRcdFx0XHRzdGFydEluZGV4OiBpKzF9KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpc1ZhcmlhbmNlID4gbGFzdFZhcmlhbmNlICYmIGkgPCBtZWFzdXJlV2lkdGhzLmxlbmd0aC0xKSB7XG5cdFx0XHRcdC8vIEFsc28gYXR0ZW1wdCBvbmUgZXh0cmEgbWVhc3VyZSBvbiB0aGlzIGxpbmUuXG5cdFx0XHRcdG5ld1dpZHRocyA9IGNsb25lKGxpbmVXaWR0aHMpO1xuXHRcdFx0XHRuZXdCcmVha3MgPSBjbG9uZShsaW5lQnJlYWtzKTtcblx0XHRcdFx0Ly8gbmV3QnJlYWtzW25ld0JyZWFrcy5sZW5ndGgtMV0gPSBpO1xuXHRcdFx0XHQvLyBuZXdXaWR0aHNbbmV3V2lkdGhzLmxlbmd0aC0xXSA9IGxpbmVBY2N1bXVsYXRvcjtcblx0XHRcdFx0b3RoZXJUcmllcy5wdXNoKHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcjogYWNjdW11bGF0b3IsXG5cdFx0XHRcdFx0bGluZUFjY3VtdWxhdG9yOiBsaW5lQWNjdW11bGF0b3IsXG5cdFx0XHRcdFx0bGluZVdpZHRoczogbmV3V2lkdGhzLFxuXHRcdFx0XHRcdGxhc3RWYXJpYW5jZTogdGhpc1ZhcmlhbmNlLFxuXHRcdFx0XHRcdGhpZ2hlc3RWYXJpYW5jZTogTWF0aC5tYXgoaGlnaGVzdFZhcmlhbmNlLCB0aGlzVmFyaWFuY2UpLFxuXHRcdFx0XHRcdGN1cnJMaW5lOiBjdXJyTGluZSxcblx0XHRcdFx0XHRsaW5lQnJlYWtzOiBuZXdCcmVha3MsXG5cdFx0XHRcdFx0c3RhcnRJbmRleDogaSsxfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0aGlzVmFyaWFuY2UgPiBsYXN0VmFyaWFuY2UpIHtcblx0XHRcdGxpbmVCcmVha3MucHVzaChpIC0gMSk7XG5cdFx0XHRjdXJyTGluZSsrO1xuXHRcdFx0aGlnaGVzdFZhcmlhbmNlID0gTWF0aC5tYXgoaGlnaGVzdFZhcmlhbmNlLCBsYXN0VmFyaWFuY2UpO1xuXHRcdFx0bGFzdFZhcmlhbmNlID0gTWF0aC5hYnMoYWNjdW11bGF0b3IgLSBpZGVhbFdpZHRoc1tjdXJyTGluZV0pO1xuXHRcdFx0bGluZVdpZHRocy5wdXNoKGxpbmVBY2N1bXVsYXRvciAtIG1lYXN1cmVXaWR0aCk7XG5cdFx0XHRsaW5lQWNjdW11bGF0b3IgPSBtZWFzdXJlV2lkdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxhc3RWYXJpYW5jZSA9IHRoaXNWYXJpYW5jZTtcblx0XHR9XG5cdH1cblx0bGluZVdpZHRocy5wdXNoKGxpbmVBY2N1bXVsYXRvcik7XG59XG5cbmZ1bmN0aW9uIG9wdGltaXplTGluZVdpZHRocyh3aWR0aHMsIGxpbmVCcmVha1BvaW50LCBsaW5lQnJlYWtzLCBleHBsYW5hdGlvbikge1xuXHQvL1x0ZmlndXJlIG91dCBob3cgbWFueSBsaW5lcyAtIFRoYXQncyBvbmUgbW9yZSB0aGFuIHdhcyB0cmllZCBiZWZvcmUuXG5cdHZhciBudW1MaW5lcyA9IE1hdGguY2VpbCh3aWR0aHMudG90YWwgLyBsaW5lQnJlYWtQb2ludCkgKyAxO1xuXG5cdC8vXHRnZXQgdGhlIGlkZWFsIHdpZHRoIGZvciBhIGxpbmUgKGN1bXVsYXRpdmUgd2lkdGggLyBudW0gbGluZXMpIC0gYXBwcm94IHRoZSBzYW1lIGFzIGxpbmVCcmVha1BvaW50IGV4Y2VwdCBmb3Igcm91bmRpbmdcblx0dmFyIGlkZWFsV2lkdGggPSBNYXRoLmZsb29yKHdpZHRocy50b3RhbCAvIG51bUxpbmVzKTtcblxuXHQvL1x0Z2V0IGVhY2ggaWRlYWwgbGluZSB3aWR0aCAoMSppZGVhbCwgMippZGVhbCwgMyppZGVhbCwgZXRjKVxuXHR2YXIgaWRlYWxXaWR0aHMgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1MaW5lczsgaSsrKVxuXHRcdGlkZWFsV2lkdGhzLnB1c2goaWRlYWxXaWR0aCooaSsxKSk7XG5cblx0Ly9cdGZyb20gZmlyc3QgbWVhc3VyZSwgc3RlcCB0aHJvdWdoIGFjY3VtLiBXaWR0aHMgdW50aWwgdGhlIGFicyBvZiB0aGUgaWRlYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IG9uZS5cblx0Ly8gVGhpcyBjYW4gc29tZXRpbWVzIGxvb2sgZnVubnkgaW4gZWRnZSBjYXNlcywgc28gd2hlbiB0aGUgbGVuZ3RoIGlzIHdpdGhpbiAxMCUsIHRyeSBvbmUgbW9yZSBvciBvbmUgbGVzcyB0byBzZWUgd2hpY2ggaXMgYmV0dGVyLlxuXHQvLyBUaGlzIGlzIGJldHRlciB0aGFuIHRyeWluZyBhbGwgdGhlIHBvc3NpYmlsaXRpZXMgYmVjYXVzZSB0aGF0IHdvdWxkIGdldCB0byBiZSBhIGh1Z2UgbnVtYmVyIGZvciBldmVuIGEgbWVkaXVtIHNpemUgcGllY2UuXG5cdC8vIFRoaXMgbWV0aG9kIHNlZW1zIHRvIG5ldmVyIGdlbmVyYXRlIG1vcmUgdGhhbiBhYm91dCAxNiB0cmllcyBhbmQgaXQgaXMgdXN1YWxseSA0IG9yIGxlc3MuXG5cdHZhciBvdGhlclRyaWVzID0gW107XG5cdG90aGVyVHJpZXMucHVzaCh7XG5cdFx0YWNjdW11bGF0b3I6IDAsXG5cdFx0bGluZUFjY3VtdWxhdG9yOiAwLFxuXHRcdGxpbmVXaWR0aHM6IFtdLFxuXHRcdGxhc3RWYXJpYW5jZTogOTk5OTk5LFxuXHRcdGhpZ2hlc3RWYXJpYW5jZTogMCxcblx0XHRjdXJyTGluZTogMCxcblx0XHRsaW5lQnJlYWtzOiBbXSwgLy8gVGhlc2UgYXJlIHRoZSB6ZXJvLWJhc2VkIGxhc3QgbWVhc3VyZSBvbiBlYWNoIGxpbmVcblx0XHRzdGFydEluZGV4OiAwfSk7XG5cdHZhciBpbmRleCA9IDA7XG5cdHdoaWxlIChpbmRleCA8IG90aGVyVHJpZXMubGVuZ3RoKSB7XG5cdFx0b25lVHJ5KHdpZHRocy5tZWFzdXJlV2lkdGhzLFxuXHRcdFx0aWRlYWxXaWR0aHMsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5hY2N1bXVsYXRvcixcblx0XHRcdG90aGVyVHJpZXNbaW5kZXhdLmxpbmVBY2N1bXVsYXRvcixcblx0XHRcdG90aGVyVHJpZXNbaW5kZXhdLmxpbmVXaWR0aHMsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5sYXN0VmFyaWFuY2UsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5oaWdoZXN0VmFyaWFuY2UsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5jdXJyTGluZSxcblx0XHRcdG90aGVyVHJpZXNbaW5kZXhdLmxpbmVCcmVha3MsXG5cdFx0XHRvdGhlclRyaWVzW2luZGV4XS5zdGFydEluZGV4LFxuXHRcdFx0b3RoZXJUcmllcyk7XG5cdFx0aW5kZXgrKztcblx0fVxuXHRmb3IgKGkgPSAwOyBpIDwgb3RoZXJUcmllcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBvdGhlclRyeSA9IG90aGVyVHJpZXNbaV07XG5cdFx0b3RoZXJUcnkudmFyaWFuY2VzID0gW107XG5cdFx0b3RoZXJUcnkuYXZlVmFyaWFuY2UgPSAwO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgb3RoZXJUcnkubGluZVdpZHRocy5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGxpbmVXaWR0aCA9IG90aGVyVHJ5LmxpbmVXaWR0aHNbal07XG5cdFx0XHRvdGhlclRyeS52YXJpYW5jZXMucHVzaChsaW5lV2lkdGggLSBpZGVhbFdpZHRoc1swXSk7XG5cdFx0XHRvdGhlclRyeS5hdmVWYXJpYW5jZSArPSBNYXRoLmFicyhsaW5lV2lkdGggLSBpZGVhbFdpZHRoc1swXSk7XG5cdFx0fVxuXHRcdG90aGVyVHJ5LmF2ZVZhcmlhbmNlID0gIG90aGVyVHJ5LmF2ZVZhcmlhbmNlIC8gb3RoZXJUcnkubGluZVdpZHRocy5sZW5ndGg7XG5cdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7IHR5cGU6IFwib3B0aW1pemVMaW5lV2lkdGhzXCIsIGxpbmVCcmVha3M6IG90aGVyVHJ5LmxpbmVCcmVha3MsIHZhcmlhbmNlczogb3RoZXJUcnkudmFyaWFuY2VzLCBhdmVWYXJpYW5jZTogb3RoZXJUcnkuYXZlVmFyaWFuY2UsIHdpZHRoczogd2lkdGhzLm1lYXN1cmVXaWR0aHMgfSk7XG5cdH1cblx0dmFyIHNtYWxsZXN0ID0gOTk5OTk5OTtcblx0dmFyIHNtYWxsZXN0SW5kZXggPSAtMTtcblx0Zm9yIChpID0gMDsgaSA8IG90aGVyVHJpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRvdGhlclRyeSA9IG90aGVyVHJpZXNbaV07XG5cdFx0aWYgKG90aGVyVHJ5LmF2ZVZhcmlhbmNlIDwgc21hbGxlc3QpIHtcblx0XHRcdHNtYWxsZXN0ID0gb3RoZXJUcnkuYXZlVmFyaWFuY2U7XG5cdFx0XHRzbWFsbGVzdEluZGV4ID0gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHsgZmFpbGVkOiBmYWxzZSwgbGluZUJyZWFrczogb3RoZXJUcmllc1tzbWFsbGVzdEluZGV4XS5saW5lQnJlYWtzLCB2YXJpYW5jZTogb3RoZXJUcmllc1tzbWFsbGVzdEluZGV4XS5oaWdoZXN0VmFyaWFuY2UgfTtcbn1cbi8vIFx0Ly8gSW5zdGVhZCBvZiBoYXZpbmcgdG8gdHJ5IGFsbCB0aGUgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyB0byBmaW5kIHRoZSBiZXN0LCB3ZSBzdGFydCB3aXRoIGFuIGltcG9ydGFudCBwaWVjZSBvZiBrbm93bGVkZ2UgYWJvdXQgdGhlIGxpbmVCcmVha3Mgd2UgYXJlIGdpdmVuOlxuLy8gXHQvLyBJZiB0aGVyZSBpcyBhIGxpbmUgdG9vIHNob3J0LCBpdCBpcyB0aGUgbGFzdCBvbmUuXG4vLyBcdC8vIFNvLCBsZXQncyBqdXN0IGRvIGEgY291cGxlIG9mIHR3ZWFrcyB0byBzZWUgaG93IGl0IHdvcmtzIHRvIGFkZCBvbmUgb3IgdHdvIG1lYXN1cmVzIHRvIHRoZSBsYXN0IGxpbmUuXG4vLyBcdHZhciBhdmcgPSB3aWR0aHMudG90YWwgLyAobGluZUJyZWFrcy5sZW5ndGggKyAxKTtcbi8vIFx0dmFyIHZhcmlhbmNlID0gZ2V0VmFyaWFuY2Uod2lkdGhzLCBsaW5lQnJlYWtzKTtcbi8vIFx0dmFyIHZhcmlhbmNlUGN0ID0gdmFyaWFuY2UvbGluZUJyZWFrUG9pbnQqMTAwO1xuLy9cbi8vIFx0aWYgKGxpbmVCcmVha3MubGVuZ3RoID09PSAwKVxuLy8gXHRcdHJldHVybiB7IGZhaWxlZDogdHJ1ZSwgcmVhc29uOiBcIk9ubHkgb25lIGxpbmUuXCIgfTtcbi8vXG4vLyBcdHZhciBsYXN0TGluZVN0YXJ0ID0gbGluZUJyZWFrc1tsaW5lQnJlYWtzLmxlbmd0aC0xXSsxO1xuLy8gXHR2YXIgbGFzdExpbmVWYXJpYW5jZSA9IGxpbmVWYXJpYW5jZSh3aWR0aHMubWVhc3VyZVdpZHRocywgbGFzdExpbmVTdGFydCwgd2lkdGhzLm1lYXN1cmVXaWR0aHMubGVuZ3RoLCBhdmcpO1xuLy8gXHRpZiAodmFyaWFuY2UgPiBsYXN0TGluZVZhcmlhbmNlKVxuLy8gXHRcdHJldHVybiB7IGZhaWxlZDogdHJ1ZSwgcmVhc29uOiBcIkxhc3QgbGluZSBpcyBub3QgdG9vIHNob3J0LlwiIH07XG4vL1xuLy8gXHQvLyBMZXQncyBnZXQgYSBsaXN0IG9mIGFsbCBjb21iaW5hdGlvbnMgdGhhdCBoYXZlIGEgcG9zc2liaWxpdHkgb2Ygd29ya2luZy4gVGhhdCBpcywgYWxsIGNvbWJpbmF0aW9ucyB3aGVyZSBubyBsaW5lIGhhcyBhIHZhcmlhbmNlIGxhcmdlciB0aGFuIFwidmFyaWFuY2VcIi5cbi8vIFx0dmFyIGxhc3RMaW5lcyA9IGxhc3RMaW5lUG9zc2liaWxpdGllcyh3aWR0aHMubWVhc3VyZVdpZHRocywgbGFzdExpbmVTdGFydCwgYXZnIC0gdmFyaWFuY2UsIGF2ZyArIHZhcmlhbmNlKTtcbi8vIFx0dmFyIGF0dGVtcHRzID0gZ2V0QXR0ZW1wdHMod2lkdGhzLm1lYXN1cmVXaWR0aHMsIDAsIGxpbmVCcmVha3MubGVuZ3RoLCBhdmcgLSB2YXJpYW5jZSwgYXZnICsgdmFyaWFuY2UsIGxhc3RMaW5lcyk7XG4vLyBcdC8vY29uc29sZS5sb2coYXR0ZW1wdHMsIGF2ZyAtIHZhcmlhbmNlLCBhdmcgKyB2YXJpYW5jZSk7XG4vL1xuLy8gXHR2YXIgZmFpbGVkID0gdHJ1ZTtcbi8vIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhdHRlbXB0cy5sZW5ndGg7IGkrKykge1xuLy8gXHRcdHZhciBuZXdWYXJpYW5jZSA9IGdldFZhcmlhbmNlKHdpZHRocywgYXR0ZW1wdHNbaV0pO1xuLy8gXHRcdGlmIChuZXdWYXJpYW5jZSA8IHZhcmlhbmNlKSB7XG4vLyBcdFx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHtcbi8vIFx0XHRcdFx0dHlwZTogXCJPcHRpbWl6ZSB0cnlcIiwgbGluZUJyZWFrczogYXR0ZW1wdHNbaV0sXG4vLyBcdFx0XHRcdHZhcmlhbmNlOiBNYXRoLnJvdW5kKHZhcmlhbmNlKSwgbmV3VmFyaWFuY2U6IE1hdGgucm91bmQobmV3VmFyaWFuY2UpLFxuLy8gXHRcdFx0XHR0b3RhbEF0dGVtcHRzOiBhdHRlbXB0cy5sZW5ndGhcbi8vIFx0XHRcdH0pO1xuLy8gXHRcdFx0dmFyaWFuY2UgPSBuZXdWYXJpYW5jZTtcbi8vIFx0XHRcdGxpbmVCcmVha3MgPSBhdHRlbXB0c1tpXTtcbi8vIFx0XHRcdGZhaWxlZCA9IGZhbHNlO1xuLy8gXHRcdH1cbi8vIFx0fVxuLy8gXHRpZiAoZmFpbGVkKSB7XG4vLyBcdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7IHR5cGU6IFwiT3B0aW1pemUgdHJ5XCIsIGxpbmVCcmVha3M6IGxpbmVCcmVha3MsIHZhcmlhbmNlOiB2YXJpYW5jZSwgcmVhc29uOiBcIk5vbmUgb2YgdGhlIFwiICsgYXR0ZW1wdHMubGVuZ3RoICsgXCIgYXR0ZW1wdHMgd2VyZSBiZXR0ZXIuXCIgfSk7XG4vLyBcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IGp1c3QgdHJ5IHRvIG1vdmUgb25lIG1lYXN1cmUgZG93biBhbmQgc2VlIGlmIGl0IGhlbHBzLlxuLy8gXHRcdGlmIChsaW5lQnJlYWtzLmxlbmd0aCA+IDApIHtcbi8vIFx0XHRcdHZhciBhdHRlbXB0ID0gW10uY29uY2F0KGxpbmVCcmVha3MpO1xuLy8gXHRcdFx0YXR0ZW1wdFthdHRlbXB0Lmxlbmd0aCAtIDFdLS07XG4vLyBcdFx0XHRuZXdWYXJpYW5jZSA9IGdldFZhcmlhbmNlKHdpZHRocywgYXR0ZW1wdCk7XG4vLyBcdFx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHtcbi8vIFx0XHRcdFx0dHlwZTogXCJPcHRpbWl6ZSBsYXN0IHRyeVwiLCBsaW5lQnJlYWtzOiBhdHRlbXB0c1tpXSxcbi8vIFx0XHRcdFx0dmFyaWFuY2U6IE1hdGgucm91bmQodmFyaWFuY2UpLCBuZXdWYXJpYW5jZTogTWF0aC5yb3VuZChuZXdWYXJpYW5jZSksXG4vLyBcdFx0XHRcdHRvdGFsQXR0ZW1wdHM6IGF0dGVtcHRzLmxlbmd0aFxuLy8gXHRcdFx0fSk7XG4vLyBcdFx0XHRpZiAobmV3VmFyaWFuY2UgPCB2YXJpYW5jZSkge1xuLy8gXHRcdFx0XHR2YXJpYW5jZSA9IG5ld1ZhcmlhbmNlO1xuLy8gXHRcdFx0XHRsaW5lQnJlYWtzID0gYXR0ZW1wdDtcbi8vIFx0XHRcdFx0ZmFpbGVkID0gZmFsc2U7XG4vLyBcdFx0XHR9XG4vLyBcdFx0fVxuLy8gXHR9XG4vLyBcdC8vIExldCdzIHNxdWVlemUgdGhlIGxpbmUgc3VjY2Vzc2l2ZWx5IHVudGlsIGl0IHNwaWxscyBvbnRvIGFuIGV4dHJhIGxpbmUsIHRoZW4gdGFrZSB0aGUgb3B0aW9uIHdpdGggdGhlIGxvd2VzdCB2YXJpYW5jZVxuLy8gXHQvLyB2YXIgdGFyZ2V0TnVtTGluZXMgPSBsaW5lQnJlYWtzLmxlbmd0aDtcbi8vIFx0Ly8gdmFyIG5ld051bUxpbmVzID0gdGFyZ2V0TnVtTGluZXM7XG4vLyBcdC8vIHZhciBUUllfSU5DUkVNRU5UID0gMTtcbi8vIFx0Ly8gdmFyIHRyeUJyZWFrUG9pbnQgPSBsaW5lQnJlYWtQb2ludCAtIFRSWV9JTkNSRU1FTlQ7XG4vLyBcdC8vIHZhciBmYWlsZWQgPSB0cnVlO1xuLy8gXHQvLyB3aGlsZSAodGFyZ2V0TnVtTGluZXMgPT09IG5ld051bUxpbmVzICYmIHRyeUJyZWFrUG9pbnQgPiA1MCkge1xuLy8gXHQvLyBcdHZhciBmZiA9IGZyZWVGb3JtTGluZUJyZWFrcyh3aWR0aHMubWVhc3VyZVdpZHRocywgdHJ5QnJlYWtQb2ludCk7XG4vLyBcdC8vIFx0bmV3TnVtTGluZXMgPSBmZi5saW5lQnJlYWtzLmxlbmd0aDtcbi8vIFx0Ly8gXHRpZiAobmV3TnVtTGluZXMgPT09IHRhcmdldE51bUxpbmVzKSB7XG4vLyBcdC8vIFx0XHR2YXIgbmV3VmFyaWFuY2UgPSBnZXRWYXJpYW5jZSh3aWR0aHMsIGZmLmxpbmVCcmVha3MpO1xuLy8gXHQvLyBcdFx0dmFyIG5ld1ZhcmlhbmNlUGN0ID0gbmV3VmFyaWFuY2UvdHJ5QnJlYWtQb2ludCoxMDA7XG4vLyBcdC8vIFx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHt0eXBlOiBcIk9wdGltaXplIHRyeVwiLCB0cnlCcmVha1BvaW50OiBNYXRoLnJvdW5kKHRyeUJyZWFrUG9pbnQpLCBsaW5lQnJlYWtzOiBmZi5saW5lQnJlYWtzLCB0b3RhbHM6IGZmLnRvdGFscyxcbi8vIFx0Ly8gXHRcdFx0dmFyaWFuY2U6IE1hdGgucm91bmQodmFyaWFuY2UpLCBuZXdWYXJpYW5jZTogTWF0aC5yb3VuZChuZXdWYXJpYW5jZSksIHZhcmlhbmNlUGN0OiBNYXRoLnJvdW5kKHZhcmlhbmNlUGN0KSwgbmV3VmFyaWFuY2VQY3Q6IE1hdGgucm91bmQobmV3VmFyaWFuY2VQY3QpXG4vLyBcdC8vIFx0XHR9KTtcbi8vIFx0Ly8gXHRcdGlmIChuZXdWYXJpYW5jZVBjdCA8IHZhcmlhbmNlUGN0KSB7XG4vLyBcdC8vIFx0XHRcdHZhcmlhbmNlUGN0ID0gbmV3VmFyaWFuY2VQY3Q7XG4vLyBcdC8vIFx0XHRcdGxpbmVCcmVha3MgPSBmZi5saW5lQnJlYWtzO1xuLy8gXHQvLyBcdFx0XHRmYWlsZWQgPSBmYWxzZTtcbi8vIFx0Ly8gXHRcdH1cbi8vIFx0Ly8gXHR9IGVsc2Uge1xuLy8gXHQvLyBcdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7dHlwZTogXCJPcHRpbWl6ZSB0cnlcIiwgZXhwbGFuYXRpb246IFwiRXhjZWVkZWQgbnVtYmVyIG9mIGxpbmVzLlwiICwgdHJ5QnJlYWtQb2ludDogTWF0aC5yb3VuZCh0cnlCcmVha1BvaW50KSwgbGluZUJyZWFrczogZmYubGluZUJyZWFrcywgdG90YWxzOiBmZi50b3RhbHMsIHZhcmlhbmNlOiB2YXJpYW5jZSwgYXZnOiBhdmcsIHZhcmlhbmNlUGN0OiB2YXJpYW5jZVBjdH0pO1xuLy8gXHQvLyBcdH1cbi8vIFx0Ly8gXHR0cnlCcmVha1BvaW50IC09IFRSWV9JTkNSRU1FTlQ7XG4vLyBcdC8vIH1cbi8vXG4vLyBcdHJldHVybiB7IGZhaWxlZDogZmFpbGVkLCBsaW5lQnJlYWtzOiBsaW5lQnJlYWtzLCB2YXJpYW5jZTogdmFyaWFuY2UgfTtcbi8vIH1cblxuLy8gZnVuY3Rpb24gZml4ZWROdW1MaW5lc0JyZWFrcyh3aWR0aHMsIG51bUxpbmVzLCBhbGxvd092ZXIsIGFsbG93YWJsZVZhcmlhbmNlKSB7XG4vLyBcdHZhciBpZGVhbExpbmVCcmVhayA9IHdpZHRocy50b3RhbCAvIG51bUxpbmVzO1xuLy8gXHQvLyBJZiBhbGwgdGhlIG1lYXN1cmVzIGhhZCB0aGUgc2FtZSBhbW91bnQgb2Ygc3R1ZmYsIHRoZW4gdGhlIGF2ZSB3b3VsZCBiZSBjb3JyZWN0LlxuLy8gXHQvLyBXZSB3aWxsIHRlc3QgYWxsIHRoZSBjb21iaW5hdGlvbnMgZnJvbSBvbmUgbGVzcyB0byBvbmUgbW9yZSB0aGFuIHRoZSBhdmVyYWdlLlxuLy8gXHR2YXIgYXZlcmFnZU1lYXN1cmVzUGVyTGluZSA9IE1hdGgucm91bmQod2lkdGhzLm1lYXN1cmVXaWR0aHMubGVuZ3RoIC8gbnVtTGluZXMpO1xuLy8gXHR2YXIgbWluTWVhc3VyZXNQZXJMaW5lID0gTWF0aC5tYXgoYXZlcmFnZU1lYXN1cmVzUGVyTGluZSAtIDEsIDEpO1xuLy8gXHR2YXIgbWF4TWVhc3VyZXNQZXJMaW5lID0gYXZlcmFnZU1lYXN1cmVzUGVyTGluZSArIDE7XG4vLyBcdHZhciB0cmllcyA9IGNyZWF0ZUxpbmVUZXN0QXJyYXkobnVtTGluZXMsIHdpZHRocy5tZWFzdXJlV2lkdGhzLmxlbmd0aCwgbWF4TWVhc3VyZXNQZXJMaW5lLCBtaW5NZWFzdXJlc1BlckxpbmUpO1xuLy8gXHRjb25zb2xlLmxvZyhcImZpeGVkTnVtTGluZXNCcmVha3MgdGVzdHMgKFwiK21pbk1lYXN1cmVzUGVyTGluZSsnLScrbWF4TWVhc3VyZXNQZXJMaW5lK1wiKVwiLCBudW1MaW5lcywgdHJpZXMubGVuZ3RoKVxuLy9cbi8vIFx0Ly8gRm9yIGVhY2ggcG9zc2libGUgbnVtYmVyIG9mIG1lYXN1cmVzIHBlciBsaW5lLCBzZWUgd2hpY2ggaGFzIHRoZSBjbG9zZXN0IHNwYWNpbmcgdG8gdGhlIGlkZWFsLlxuLy8gXHR2YXIgYmVzdENhc2UgPSAtMTtcbi8vIFx0dmFyIGJlc3RDYXNlVmFyaWFuY2UgPSAxMDAwMDAwO1xuLy8gXHRmb3IgKHZhciBpID0gMCA7IGkgPCB0cmllcy5sZW5ndGg7IGkrKykge1xuLy8gXHRcdHZhciBhdHRlbXB0ID0gdHJpZXNbaV07XG4vLyBcdFx0dmFyIHZhcmlhbmNlID0gZ2V0VmFyaWFuY2UoYXR0ZW1wdCwgaWRlYWxMaW5lQnJlYWssIHdpZHRocy5tZWFzdXJlV2lkdGhzLCBhbGxvd092ZXIgPyBhbGxvd2FibGVWYXJpYW5jZSA6IDApO1xuLy8gXHRcdGlmICh2YXJpYW5jZSAhPT0gbnVsbCkge1xuLy8gXHRcdFx0aWYgKHZhcmlhbmNlIDwgYmVzdENhc2VWYXJpYW5jZSkge1xuLy8gXHRcdFx0XHRiZXN0Q2FzZVZhcmlhbmNlID0gdmFyaWFuY2U7XG4vLyBcdFx0XHRcdGJlc3RDYXNlID0gaTtcbi8vIFx0XHRcdH1cbi8vIFx0XHR9XG4vLyBcdH1cbi8vIFx0dmFyIGZhaWxlZCA9IHRydWU7XG4vLyBcdC8vIEZvciBkZWJ1Z2dpbmcsIHJlY3JlYXRlIHRoZSBsaW5lIHdpZHRoc1xuLy8gXHR2YXIgdG90YWxzID0gW107XG4vLyBcdGlmIChiZXN0Q2FzZSA+PSAwKSB7XG4vLyBcdFx0ZmFpbGVkID0gZmFsc2U7XG4vLyBcdFx0dmFyIGluZGV4ID0gMDtcbi8vIFx0XHRmb3IgKGkgPSAwOyBpIDwgdHJpZXNbYmVzdENhc2VdLmxlbmd0aDsgaSsrKSB7XG4vLyBcdFx0XHR2YXIgdG90YWwgPSAwO1xuLy8gXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0cmllc1tiZXN0Q2FzZV1baV07IGorKykge1xuLy8gXHRcdFx0XHR0b3RhbCArPSB3aWR0aHMubWVhc3VyZVdpZHRoc1tpbmRleCsrXTtcbi8vIFx0XHRcdH1cbi8vIFx0XHRcdHRvdGFscy5wdXNoKE1hdGgucm91bmQodG90YWwpKTtcbi8vIFx0XHR9XG4vLyBcdFx0Ly8gV2Ugbm93IGhhdmUgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgbnVtYmVyIG9mIG1lYXN1cmVzIHBlciBsaW5lLCBidXQgd2Ugd2FudCB0byByZXR1cm4gdGhlIGFic29sdXRlIG1lYXN1cmUgbnVtYmVyIHRvIGJyZWFrIG9uLlxuLy8gXHRcdGlmICh0cmllc1tiZXN0Q2FzZV0ubGVuZ3RoID4gMCkge1xuLy8gXHRcdFx0dHJpZXNbYmVzdENhc2VdWzBdLS07IC8vIFRoZSByZXN1bHRzIHNob3VsZCBjb250YWluIHRoZSBsYXN0IG1lYXN1cmUgbnVtYmVyIG9uIHRoZSBsaW5lLCB6ZXJvLWJhc2VkLlxuLy8gXHRcdFx0Zm9yIChpID0gMTsgaSA8IHRyaWVzW2Jlc3RDYXNlXS5sZW5ndGg7IGkrKylcbi8vIFx0XHRcdFx0dHJpZXNbYmVzdENhc2VdW2ldICs9IHRyaWVzW2Jlc3RDYXNlXVtpIC0gMV07IC8vIFRoaXMgc2V0cyB0aGUgemVyby1iYXNlZCBtZWFzdXJlIG51bWJlclxuLy8gXHRcdFx0Ly8gVGhlIGxhc3QgbGluZSBpcyBpbXBsaWVkIGFuZCB3ZSBkb24ndCBuZWVkIHRvIHJldHVybiBpdFxuLy8gXHRcdFx0dHJpZXNbYmVzdENhc2VdLnBvcCgpO1xuLy8gXHRcdH1cbi8vIFx0fVxuLy8gXHRyZXR1cm4geyBmYWlsZWQ6IGZhaWxlZCwgbGluZUJyZWFrczogdHJpZXNbYmVzdENhc2VdLCBiZXN0Q2FzZVZhcmlhbmNlOiBNYXRoLnJvdW5kKGJlc3RDYXNlVmFyaWFuY2UpLCB0b3RhbHM6IHRvdGFscyB9O1xuLy8gfVxuXG5mdW5jdGlvbiBmaXhlZE1lYXN1cmVMaW5lQnJlYWtzKHdpZHRocywgbGluZUJyZWFrUG9pbnQsIHByZWZlcnJlZE1lYXN1cmVzUGVyTGluZSkge1xuXHR2YXIgbGluZUJyZWFrcyA9IFtdO1xuXHR2YXIgdG90YWxzID0gW107XG5cdHZhciB0aGlzV2lkdGggPSAwO1xuXHR2YXIgZmFpbGVkID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGhzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dGhpc1dpZHRoICs9IHdpZHRoc1tpXTtcblx0XHRpZiAodGhpc1dpZHRoID4gbGluZUJyZWFrUG9pbnQpIHtcblx0XHRcdGZhaWxlZCA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChpICUgcHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lID09PSAocHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lLTEpKSB7XG5cdFx0XHRpZiAoaSAhPT0gd2lkdGhzLmxlbmd0aC0xKSAvLyBEb24ndCBib3RoZXIgcHV0dGluZyBhIGxpbmUgYnJlYWsgZm9yIHRoZSBsYXN0IGxpbmUgLSBpdCdzIGFscmVhZHkgYSBicmVhay5cblx0XHRcdFx0bGluZUJyZWFrcy5wdXNoKGkpO1xuXHRcdFx0dG90YWxzLnB1c2goTWF0aC5yb3VuZCh0aGlzV2lkdGgpKTtcblx0XHRcdHRoaXNXaWR0aCA9IDA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB7IGZhaWxlZDogZmFpbGVkLCB0b3RhbHM6IHRvdGFscywgbGluZUJyZWFrczogbGluZUJyZWFrcyB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZXZpc2VkVHVuZShsaW5lQnJlYWtzLCBzdGFmZldpZHRoLCBhYmNTdHJpbmcsIHBhcmFtcywgUGFyc2UpIHtcblx0dmFyIGFiY1BhcnNlciA9IG5ldyBQYXJzZSgpO1xuXHR2YXIgcmV2aXNlZFBhcmFtcyA9IHtcblx0XHRsaW5lQnJlYWtzOiBsaW5lQnJlYWtzLFxuXHRcdHN0YWZmd2lkdGg6IHN0YWZmV2lkdGhcblx0fTtcblx0Zm9yICh2YXIga2V5IGluIHBhcmFtcykge1xuXHRcdGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkgIT09ICd3cmFwJyAmJiBrZXkgIT09ICdzdGFmZndpZHRoJykge1xuXHRcdFx0cmV2aXNlZFBhcmFtc1trZXldID0gcGFyYW1zW2tleV07XG5cdFx0fVxuXHR9XG5cblx0YWJjUGFyc2VyLnBhcnNlKGFiY1N0cmluZywgcmV2aXNlZFBhcmFtcyk7XG5cdHJldHVybiB7IHR1bmU6IGFiY1BhcnNlci5nZXRUdW5lKCksIHJldmlzZWRQYXJhbXM6IHJldmlzZWRQYXJhbXMgfTtcbn1cblxuZnVuY3Rpb24gY2FsY0xpbmVXcmFwcyh0dW5lLCB3aWR0aHMsIGFiY1N0cmluZywgcGFyYW1zLCBQYXJzZSwgZW5ncmF2ZXJfY29udHJvbGxlcikge1xuXHQvLyBGb3IgY2FsY3VsYXRpbmcgaG93IG11Y2ggY2FuIGdvIG9uIHRoZSBsaW5lLCBpdCBkZXBlbmRzIG9uIHRoZSB3aWR0aCBvZiB0aGUgbGluZS4gSXQgaXMgYSBjb252ZW5pZW5jZSB0byBqdXN0IGRpdmlkZSBpdCBoZXJlXG5cdC8vIGJ5IHRoZSBtaW5pbXVtIHNwYWNpbmcgaW5zdGVhZCBvZiBtdWx0aXBseWluZyB0aGUgbWluIHNwYWNpbmcgbGF0ZXIuXG5cdC8vIFRoZSBzY2FsaW5nIHdvcmtzIGRpZmZlcmVudGx5OiB0aGlzIGlzIGRvbmUgYnkgY2hhbmdpbmcgdGhlIHNjYWxpbmcgb2YgdGhlIG91dGVyIFNWRywgc28gdGhlIHNjYWxpbmcgbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWRcblx0Ly8gZm9yIGhlcmUsIGJlY2F1c2UgdGhlIGFjdHVhbCB3aWR0aCB3aWxsIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBjYWxjdWxhdGVkIG51bWJlcnMuXG5cblx0Ly8gSWYgdGhlIGRlc2lyZWQgd2lkdGggaXMgbGVzcyB0aGFuIHRoZSBtYXJnaW4sIGp1c3QgcHVudCBhbmQgcmV0dXJuIHRoZSBvcmlnaW5hbCB0dW5lXG5cdGlmIChwYXJhbXMuc3RhZmZ3aWR0aCA8IHdpZHRocy5sZWZ0KSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGV4cGxhbmF0aW9uOiBcIlN0YWZmd2lkdGggaXMgbmFycm93ZXIgdGhhbiB0aGUgbWFyZ2luXCIsXG5cdFx0XHR0dW5lOiB0dW5lLFxuXHRcdFx0cmV2aXNlZFBhcmFtczogcGFyYW1zXG5cdFx0fTtcblx0fVxuXHR2YXIgc2NhbGUgPSBwYXJhbXMuc2NhbGUgPyBNYXRoLm1heChwYXJhbXMuc2NhbGUsIDAuMSkgOiAxO1xuXHR2YXIgbWluU3BhY2luZyA9IHBhcmFtcy53cmFwLm1pblNwYWNpbmcgPyBNYXRoLm1heChwYXJzZUZsb2F0KHBhcmFtcy53cmFwLm1pblNwYWNpbmcpLCAxKSA6IDE7XG5cdHZhciBtaW5TcGFjaW5nTGltaXQgPSBwYXJhbXMud3JhcC5taW5TcGFjaW5nTGltaXQgPyBNYXRoLm1heChwYXJzZUZsb2F0KHBhcmFtcy53cmFwLm1pblNwYWNpbmdMaW1pdCksIDEpIDogbWluU3BhY2luZyAtIDAuMTtcblx0dmFyIG1heFNwYWNpbmcgPSBwYXJhbXMud3JhcC5tYXhTcGFjaW5nID8gTWF0aC5tYXgocGFyc2VGbG9hdChwYXJhbXMud3JhcC5tYXhTcGFjaW5nKSwgMSkgOiB1bmRlZmluZWQ7XG5cdGlmIChwYXJhbXMud3JhcC5sYXN0TGluZUxpbWl0ICYmICFtYXhTcGFjaW5nKVxuXHRcdG1heFNwYWNpbmcgPSBNYXRoLm1heChwYXJzZUZsb2F0KHBhcmFtcy53cmFwLmxhc3RMaW5lTGltaXQpLCAxKTtcblx0dmFyIHRhcmdldEhlaWdodCA9IHBhcmFtcy53cmFwLnRhcmdldEhlaWdodCA/IE1hdGgubWF4KHBhcnNlSW50KHBhcmFtcy53cmFwLnRhcmdldEhlaWdodCwgMTApLCAxMDApIDogdW5kZWZpbmVkO1xuXHR2YXIgcHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lID0gcGFyYW1zLndyYXAucHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lID8gTWF0aC5tYXgocGFyc2VJbnQocGFyYW1zLndyYXAucHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lLCAxMCksIDEpIDogdW5kZWZpbmVkO1xuXG5cdHZhciBsaW5lQnJlYWtQb2ludCA9IChwYXJhbXMuc3RhZmZ3aWR0aCAtIHdpZHRocy5sZWZ0KSAvIG1pblNwYWNpbmcgLyBzY2FsZTtcblx0dmFyIG1pbkxpbmVTaXplID0gKHBhcmFtcy5zdGFmZndpZHRoIC0gd2lkdGhzLmxlZnQpIC8gbWF4U3BhY2luZyAvIHNjYWxlO1xuXHR2YXIgYWxsb3dhYmxlVmFyaWFuY2UgPSAocGFyYW1zLnN0YWZmd2lkdGggLSB3aWR0aHMubGVmdCkgLyBtaW5TcGFjaW5nTGltaXQgLyBzY2FsZTtcblx0dmFyIGV4cGxhbmF0aW9uID0geyB3aWR0aHM6IHdpZHRocywgbGluZUJyZWFrUG9pbnQ6IGxpbmVCcmVha1BvaW50LCBtaW5MaW5lU2l6ZTogbWluTGluZVNpemUsIGF0dGVtcHRzOiBbXSwgc3RhZmZXaWR0aDogcGFyYW1zLnN0YWZmd2lkdGgsIG1pbldpZHRoOiBNYXRoLnJvdW5kKGFsbG93YWJsZVZhcmlhbmNlKSB9O1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgcHJlZmVycmVkIG51bWJlciBvZiBtZWFzdXJlcyBwZXIgbGluZSwgdGVzdCB0aGF0IGZpcnN0LiBJZiBub25lIG9mIHRoZSBsaW5lcyBpcyB0b28gbG9uZywgdGhlbiB3ZSdyZSBmaW5pc2hlZC5cblx0dmFyIGxpbmVCcmVha3MgPSBudWxsO1xuXHRpZiAocHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lKSB7XG5cdFx0dmFyIGYgPSBmaXhlZE1lYXN1cmVMaW5lQnJlYWtzKHdpZHRocy5tZWFzdXJlV2lkdGhzLCBsaW5lQnJlYWtQb2ludCwgcHJlZmVycmVkTWVhc3VyZXNQZXJMaW5lKTtcblx0XHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHsgdHlwZTogXCJGaXhlZCBNZWFzdXJlcyBQZXIgTGluZVwiLCBwcmVmZXJyZWRNZWFzdXJlc1BlckxpbmU6IHByZWZlcnJlZE1lYXN1cmVzUGVyTGluZSwgbGluZUJyZWFrczogZi5saW5lQnJlYWtzLCBmYWlsZWQ6IGYuZmFpbGVkLCB0b3RhbHM6IGYudG90YWxzIH0pO1xuXHRcdGlmICghZi5mYWlsZWQpXG5cdFx0XHRsaW5lQnJlYWtzID0gZi5saW5lQnJlYWtzO1xuXHR9XG5cblx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBsaW5lQnJlYWtzIHlldCwgdXNlIHRoZSBmcmVlIGZvcm0gbWV0aG9kIG9mIGxpbmUgYnJlYWtzLlxuXHQvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIGVpdGhlciBpZiBQcmVmZXJyZWQgTWVhc3VyZXMgaXMgbm90IHVzZWQsIG9yIGlmIHRoZSBtdXNpYyBpcyBqdXN0IHdlaXJkIC0gbGlrZSBhIHNpbmdsZSBtZWFzdXJlIGlzIHdheSB0b28gY3Jvd2RlZC5cblx0aWYgKCFsaW5lQnJlYWtzKSB7XG5cdFx0dmFyIGZmID0gZnJlZUZvcm1MaW5lQnJlYWtzKHdpZHRocy5tZWFzdXJlV2lkdGhzLCBsaW5lQnJlYWtQb2ludCk7XG5cdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7IHR5cGU6IFwiRnJlZSBGb3JtXCIsIGxpbmVCcmVha3M6IGZmLmxpbmVCcmVha3MsIHRvdGFsczogZmYudG90YWxzIH0pO1xuXHRcdGxpbmVCcmVha3MgPSBmZi5saW5lQnJlYWtzO1xuXG5cdFx0Ly8gV2Ugbm93IGhhdmUgYW4gYWNjZXB0YWJsZSBudW1iZXIgb2YgbGluZXMsIGJ1dCB0aGUgbWVhc3VyZXMgbWF5IG5vdCBiZSBvcHRpbWFsbHkgZGlzdHJpYnV0ZWQuIFNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBkaXN0cmlidXRpb24uXG5cdFx0ZmYgPSBvcHRpbWl6ZUxpbmVXaWR0aHMod2lkdGhzLCBsaW5lQnJlYWtQb2ludCwgbGluZUJyZWFrcywgZXhwbGFuYXRpb24pO1xuXHRcdGV4cGxhbmF0aW9uLmF0dGVtcHRzLnB1c2goeyB0eXBlOiBcIk9wdGltaXplXCIsIGZhaWxlZDogZmYuZmFpbGVkLCByZWFzb246IGZmLnJlYXNvbiwgbGluZUJyZWFrczogZmYubGluZUJyZWFrcywgdG90YWxzOiBmZi50b3RhbHMgfSk7XG5cdFx0aWYgKCFmZi5mYWlsZWQpXG5cdFx0XHRsaW5lQnJlYWtzID0gZmYubGluZUJyZWFrcztcblx0fVxuXG5cdC8vIElmIHRoZSB2ZXJ0aWNhbCBzcGFjZSBleGNlZWRzIHRhcmdldEhlaWdodCwgcmVtb3ZlIGEgbGluZSBhbmQgdHJ5IGFnYWluLiBJZiB0aGF0IGlzIHRvbyBjcm93ZGVkLCB0aGVuIGRvbid0IHVzZSBpdC5cblx0dmFyIHN0YWZmV2lkdGggPSBwYXJhbXMuc3RhZmZ3aWR0aDtcblx0dmFyIHJldCA9IGdldFJldmlzZWRUdW5lKGxpbmVCcmVha3MsIHN0YWZmV2lkdGgsIGFiY1N0cmluZywgcGFyYW1zLCBQYXJzZSk7XG5cdHZhciBuZXdXaWR0aHMgPSBlbmdyYXZlcl9jb250cm9sbGVyLmdldE1lYXN1cmVXaWR0aHMocmV0LnR1bmUpO1xuXHR2YXIgZ290VHVuZSA9IHRydWU7IC8vIElmIHdlIGFkanVzdCB0aGUgbnVtIGxpbmVzLCBzZXQgdGhpcyB0byBmYWxzZVxuXHRleHBsYW5hdGlvbi5hdHRlbXB0cy5wdXNoKHt0eXBlOiBcImhlaWdodENoZWNrXCIsIGhlaWdodDogbmV3V2lkdGhzLmhlaWdodCB9KTtcblxuXHQvLyBcdGlmIGFsbCBvZiB0aGUgbGluZXMgYXJlIHRvbyBzcGFyc2UsIG1ha2UgdGhlIHdpZHRoIG5hcnJvd2VyLlxuXHQvLyBUT0RPLVBFUjogaW1wbGVtZW50IHRoaXMgY2FzZS5cblxuXHQvLyBJZiBvbmUgbGluZSBhbmQgdGhlIHNwYWNpbmcgaXMgPiBtYXhTcGFjaW5nLCBtYWtlIHRoZSB3aWR0aCBuYXJyb3dlci5cblx0aWYgKGxpbmVCcmVha3MubGVuZ3RoID09PSAwICYmIG1pbkxpbmVTaXplID4gd2lkdGhzLnRvdGFsKSB7XG5cdFx0c3RhZmZXaWR0aCA9ICh3aWR0aHMudG90YWwgKiBtYXhTcGFjaW5nICogc2NhbGUpICsgd2lkdGhzLmxlZnQ7XG5cdFx0ZXhwbGFuYXRpb24uYXR0ZW1wdHMucHVzaCh7dHlwZTogXCJ0b28gc3BhcnNlXCIsIG5ld1dpZHRoOiBNYXRoLnJvdW5kKHN0YWZmV2lkdGgpfSlcblx0XHRnb3RUdW5lID0gZmFsc2U7XG5cdH1cblxuXHQvLyBpZiAocmV0LmxpbmVCcmVha3MubGVuZ3RoID09PSAwKSB7XG5cdC8vIFx0Ly8gRXZlcnl0aGluZyBmaXRzIG9uIG9uZSBsaW5lLCBzbyBzZWUgaWYgdGhlcmUgaXMgVE9PIG11Y2ggc3BhY2UgYW5kIHRoZSBzdGFmZiB3aWR0aCBuZWVkcyB0byBiZSBzaG9ydGVuZWQuXG5cdC8vIFx0aWYgKG1pbkxpbmVTaXplID4gMCAmJiByZXQudG90YWxUaGlzTGluZSA+IDAgJiYgcmV0LnRvdGFsVGhpc0xpbmUgPCBtaW5MaW5lU2l6ZSlcblx0Ly8gXHRcdHN0YWZmV2lkdGggPSBzdGFmZldpZHRoIC8gKG1pbkxpbmVTaXplIC8gcmV0LnRvdGFsVGhpc0xpbmUpO1xuXHQvLyB9IGVsc2UgaWYgKHJldC50b3RhbFRoaXNMaW5lIDwgbWluTGluZVNpemUpIHtcblx0Ly8gXHQvLyB0aGUgbGFzdCBsaW5lIGlzIHRvbyBzaG9ydCwgc28gYXR0ZW1wdCB0byByZWRpc3RyaWJ1dGUgYnkgY2hhbmdpbmcgdGhlIG1pbi5cblx0Ly8gXHQvLyBXZSB3aWxsIHRyeSBtb3JlIGFuZCBsZXNzIHNwYWNlIGFsdGVybmF0aXZlbHkuIFRoZSBzcGFjZSBjYW4ndCBiZSBsZXNzIHRoYW4gMS4wLCBhbmQgd2UnbGwgdHJ5IGluIDAuMSBpbmNyZW1lbnRzLlxuXHQvLyBcdHZhciBtaW5UcnlzID0gW107XG5cdC8vIFx0aWYgKG1pblNwYWNpbmcgPiAxLjEpXG5cdC8vIFx0XHRtaW5UcnlzLnB1c2gobWluU3BhY2luZyAtIDAuMSk7XG5cdC8vIFx0bWluVHJ5cy5wdXNoKG1pblNwYWNpbmcgKyAwLjEpO1xuXHQvLyBcdGlmIChtaW5TcGFjaW5nID4gMS4yKVxuXHQvLyBcdFx0bWluVHJ5cy5wdXNoKG1pblNwYWNpbmcgLSAwLjIpO1xuXHQvLyBcdG1pblRyeXMucHVzaChtaW5TcGFjaW5nICsgMC4yKTtcblx0Ly8gXHRpZiAobWluU3BhY2luZyA+IDEuMylcblx0Ly8gXHRcdG1pblRyeXMucHVzaChtaW5TcGFjaW5nIC0gMC4zKTtcblx0Ly8gXHRtaW5UcnlzLnB1c2gobWluU3BhY2luZyArIDAuMyk7XG5cdC8vIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtaW5UcnlzLmxlbmd0aCAmJiByZXQudG90YWxUaGlzTGluZSA8IG1pbkxpbmVTaXplOyBpKyspIHtcblx0Ly8gXHRcdGxpbmVCcmVha1BvaW50ID0gKHBhcmFtcy5zdGFmZndpZHRoIC0gd2lkdGhzLmxlZnQpIC8gbWluVHJ5c1tpXSAvIHNjYWxlO1xuXHQvLyBcdFx0cmV0ID0gY2FsY0xpbmVCcmVha3Mod2lkdGhzLm1lYXN1cmVXaWR0aHMsIGxpbmVCcmVha1BvaW50KTtcblx0Ly8gXHR9XG5cdC8vIH1cblxuXHRpZiAoIWdvdFR1bmUpXG5cdFx0cmV0ID0gZ2V0UmV2aXNlZFR1bmUobGluZUJyZWFrcywgc3RhZmZXaWR0aCwgYWJjU3RyaW5nLCBwYXJhbXMsIFBhcnNlKTtcblx0cmV0LmV4cGxhbmF0aW9uID0gZXhwbGFuYXRpb247XG5cdHJldHVybiByZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyB3cmFwTGluZXM6IHdyYXBMaW5lcywgY2FsY0xpbmVXcmFwczogY2FsY0xpbmVXcmFwcyB9O1xuIiwiLy8gICAgYWJjX3R1bmUuanM6IGEgY29tcHV0ZXIgdXNhYmxlIGludGVybmFsIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb25lIHR1bmUuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBQYXVsIFJvc2VuIChwYXVsIGF0IHBhdWxyb3NlbiBkb3QgbmV0KVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG52YXIgcGFyc2VLZXlWb2ljZSA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19wYXJzZV9rZXlfdm9pY2UnKTtcbnZhciBzcGFjaW5nID0gcmVxdWlyZSgnLi4vd3JpdGUvYWJjX3NwYWNpbmcnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBkYXRhIGZvciBhIHNpbmdsZSBBQkMgdHVuZS4gSXQgaXMgY3JlYXRlZCBhbmQgcG9wdWxhdGVkIGJ5IHRoZSB3aW5kb3cuQUJDSlMucGFyc2UuUGFyc2UgY2xhc3MuXG4gKiBBbHNvIGtub3duIGFzIHRoZSBBQkNKUyBBYnN0cmFjdCBTeW50YXggVHJlZVxuICogQGFsdGVybmF0ZUNsYXNzTmFtZSBBQkNKUy5UdW5lXG4gKi9cbnZhciBUdW5lID0gZnVuY3Rpb24oKSB7XG5cdC8vIFRoZSBzdHJ1Y3R1cmUgY29uc2lzdHMgb2YgYSBoYXNoIHdpdGggdGhlIGZvbGxvd2luZyB0d28gaXRlbXM6XG5cdC8vIG1ldGFUZXh0OiBhIGhhc2ggb2Yge2tleSwgdmFsdWV9LCB3aGVyZSBrZXkgaXMgb25lIG9mOiB0aXRsZSwgYXV0aG9yLCByaHl0aG0sIHNvdXJjZSwgdHJhbnNjcmlwdGlvbiwgdW5hbGlnbmVkV29yZHMsIGV0Yy4uLlxuXHQvLyB0ZW1wbzogeyBub3RlTGVuZ3RoOiBudW1iZXIgKGUuZy4gLjEyNSksIGJwbTogbnVtYmVyIH1cblx0Ly8gbGluZXM6IGFuIGFycmF5IG9mIGVsZW1lbnRzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZzpcblx0Ly9cblx0Ly8gU1RBRkY6IGFycmF5IG9mIGVsZW1lbnRzXG5cdC8vIFNVQlRJVExFOiBzdHJpbmdcblx0Ly9cblx0Ly8gVE9ETzogYWN0dWFsbHksIHRoZSBzdGFydCBhbmQgZW5kIGNoYXIgc2hvdWxkIG1vZGlmeSBlYWNoIHBhcnQgb2YgdGhlIG5vdGUgdHlwZVxuXHQvLyBUaGUgZWxlbWVudHMgYWxsIGhhdmUgYSB0eXBlIGZpZWxkIGFuZCBhIHN0YXJ0IGFuZCBlbmQgY2hhclxuXHQvLyBmaWVsZC4gVGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBkZXBlbmQgb24gdGhlIHR5cGUgYW5kIGFyZSBsaXN0ZWQgYmVsb3c6XG5cdC8vIFJFU1Q6IGR1cmF0aW9uPTEsMiw0LDg7IGNob3JkOiBzdHJpbmdcblx0Ly8gTk9URTogYWNjaWRlbnRhbD1ub25lLGRibF9mbGF0LGZsYXQsbmF0dXJhbCxzaGFycCxkYmxfc2hhcnBcblx0Ly9cdFx0cGl0Y2g6IFwiQ1wiIGlzIDAuIFRoZSBudW1iZXJzIHJlZmVyIHRvIHRoZSBwaXRjaCBsZXR0ZXIuXG5cdC8vXHRcdGR1cmF0aW9uOiAuNSAoc2l4dGVlbnRoKSwgLjc1IChkb3R0ZWQgc2l4dGVlbnRoKSwgMSAoZWlnaHRoKSwgMS41IChkb3R0ZWQgZWlnaHRoKVxuXHQvL1x0XHRcdDIgKHF1YXJ0ZXIpLCAzIChkb3R0ZWQgcXVhcnRlciksIDQgKGhhbGYpLCA2IChkb3R0ZWQgaGFsZikgOCAod2hvbGUpXG5cdC8vXHRcdGNob3JkOiB7IG5hbWU6Y2hvcmQsIHBvc2l0aW9uOiBvbmUgb2YgJ2RlZmF1bHQnLCAnYWJvdmUnLCAnYmVsb3cnIH1cblx0Ly9cdFx0ZW5kX2JlYW0gPSB0cnVlIG9yIHVuZGVmaW5lZCBpZiB0aGlzIGlzIHRoZSBsYXN0IG5vdGUgaW4gYSBiZWFtLlxuXHQvL1x0XHRseXJpYzogYXJyYXkgb2YgeyBzeWxsYWJsZTogeHh4LCBkaXZpZGVyOiBvbmUgb2YgXCIgLV9cIiB9XG5cdC8vXHRcdHN0YXJ0VGllID0gdHJ1ZXx1bmRlZmluZWRcblx0Ly9cdFx0ZW5kVGllID0gdHJ1ZXx1bmRlZmluZWRcblx0Ly9cdFx0c3RhcnRUcmlwbGV0ID0gbnVtIDwtIHRoYXQgaXMgdGhlIG51bWJlciB0byBwcmludFxuXHQvL1x0XHRlbmRUcmlwbGV0ID0gdHJ1ZXx1bmRlZmluZWQgKHRoZSBsYXN0IG5vdGUgb2YgdGhlIHRyaXBsZXQpXG5cdC8vIFRPRE86IGFjdHVhbGx5LCBkZWNvcmF0aW9uIHNob3VsZCBiZSBhbiBhcnJheS5cblx0Ly9cdFx0ZGVjb3JhdGlvbjogdXBib3csIGRvd25ib3csIGFjY2VudFxuXHQvLyBCQVI6IHR5cGU9YmFyX3RoaW4sIGJhcl90aGluX3RoaWNrLCBiYXJfdGhpbl90aGluLCBiYXJfdGhpY2tfdGhpbiwgYmFyX3JpZ2h0X3JlcGVhdCwgYmFyX2xlZnRfcmVwZWF0LCBiYXJfZG91YmxlX3JlcGVhdFxuXHQvL1x0bnVtYmVyOiAxIG9yIDI6IGlmIGl0IGlzIHRoZSBzdGFydCBvZiBhIGZpcnN0IG9yIHNlY29uZCBlbmRpbmdcblx0Ly8gQ0xFRjogdHlwZT10cmVibGUsYmFzc1xuXHQvLyBLRVktU0lHOlxuXHQvL1x0XHRhY2NpZGVudGFsc1tdOiB7IGFjYzpzaGFycHxkYmxzaGFycHxuYXR1cmFsfGZsYXR8ZGJsZmxhdCwgIG5vdGU6YXxifGN8ZHxlfGZ8ZyB9XG5cdC8vIE1FVEVSOiB0eXBlOiBjb21tb25fdGltZSxjdXRfdGltZSxzcGVjaWZpZWRcblx0Ly9cdFx0aWYgc3BlY2lmaWVkLCB7IG51bTogOTksIGRlbjogOTkgfVxuXG5cdHRoaXMuZ2V0QmVhdExlbmd0aCA9IGZ1bmN0aW9uKCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmxpbmVzW2ldLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmZbal0ubWV0ZXIpIHtcblx0XHRcdFx0XHRcdHZhciBtZXRlciA9IHRoaXMubGluZXNbaV0uc3RhZmZbal0ubWV0ZXI7XG5cdFx0XHRcdFx0XHRpZiAobWV0ZXIudHlwZSA9PT0gXCJzcGVjaWZpZWRcIikge1xuXHRcdFx0XHRcdFx0XHRpZiAobWV0ZXIudmFsdWUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBudW0gPSBwYXJzZUludChtZXRlci52YWx1ZVswXS5udW0sIDEwKTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZGVuID0gcGFyc2VJbnQobWV0ZXIudmFsdWVbMF0uZGVuLCAxMCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gMyAmJiBkZW4gPT09IDgpIHJldHVybiAzLzg7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gNiAmJiBkZW4gPT09IDgpIHJldHVybiAzLzg7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gNiAmJiBkZW4gPT09IDQpIHJldHVybiAzLzQ7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gOSAmJiBkZW4gPT09IDgpIHJldHVybiAzLzg7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG51bSA9PT0gMTIgJiYgZGVuID09PSA4KSByZXR1cm4gMy84O1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAxL2Rlbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIDEvNDsgLy8gTm8gbWV0ZXIgd2FzIHNwZWNpZmllZCwgc28gdXNlIHRoaXMgZGVmYXVsdFxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChtZXRlci50eXBlID09PSAnY3V0X3RpbWUnKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAxLzI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gMS80OyAvLyBUT0RPLVBFUjogdGhpcyB3b3JrcyBmb3IgY29tbW9uIHRpbWUsIGJ1dCBub3QgZm9yIHRoZSBhbmNpZW50IG1ldGVycy5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIDEvNDsgLy8gTm8gbWV0ZXIgd2FzIHNwZWNpZmllZCwgc28gdXNlIHRoaXMgZGVmYXVsdFxuXHR9O1xuXG5cdHRoaXMuZ2V0UGlja3VwTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG5cdFx0dmFyIHBpY2t1cExlbmd0aCA9IDA7XG5cdFx0dmFyIGJhckxlbmd0aCA9IHRoaXMuZ2V0QmFyTGVuZ3RoKCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5saW5lc1tpXS5zdGFmZikge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRoaXMubGluZXNbaV0uc3RhZmYubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRmb3IgKHZhciB2ID0gMDsgdiA8IHRoaXMubGluZXNbaV0uc3RhZmZbal0udm9pY2VzLmxlbmd0aDsgdisrKSB7XG5cdFx0XHRcdFx0XHR2YXIgdm9pY2UgPSB0aGlzLmxpbmVzW2ldLnN0YWZmW2pdLnZvaWNlc1t2XTtcblx0XHRcdFx0XHRcdHZhciBoYXNOb3RlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR2YXIgdHJpcGxldE11bHRpcGxpZXIgPSAxO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgZWwgPSAwOyBlbCA8IHZvaWNlLmxlbmd0aDsgZWwrKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgaXNTcGFjZXIgPSB2b2ljZVtlbF0ucmVzdCAmJiB2b2ljZVtlbF0ucmVzdC50eXBlID09PSBcInNwYWNlclwiO1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2VbZWxdLnN0YXJ0VHJpcGxldClcblx0XHRcdFx0XHRcdFx0XHR0cmlwbGV0TXVsdGlwbGllciA9IHZvaWNlW2VsXS50cmlwbGV0TXVsdGlwbGllcjtcblx0XHRcdFx0XHRcdFx0aWYgKHZvaWNlW2VsXS5kdXJhdGlvbiAmJiAhaXNTcGFjZXIpXG5cdFx0XHRcdFx0XHRcdFx0cGlja3VwTGVuZ3RoICs9IHZvaWNlW2VsXS5kdXJhdGlvbiAqIHRyaXBsZXRNdWx0aXBsaWVyO1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2VbZWxdLmVuZFRyaXBsZXQpXG5cdFx0XHRcdFx0XHRcdFx0dHJpcGxldE11bHRpcGxpZXIgPSAxO1xuXHRcdFx0XHRcdFx0XHRpZiAocGlja3VwTGVuZ3RoID49IGJhckxlbmd0aClcblx0XHRcdFx0XHRcdFx0XHRwaWNrdXBMZW5ndGggLT0gYmFyTGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2VbZWxdLmVsX3R5cGUgPT09ICdiYXInKVxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwaWNrdXBMZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBwaWNrdXBMZW5ndGg7XG5cdH07XG5cblx0dGhpcy5nZXRCYXJMZW5ndGggPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWV0ZXIgPSB0aGlzLmdldE1ldGVyRnJhY3Rpb24oKTtcblx0XHRyZXR1cm4gbWV0ZXIubnVtIC8gbWV0ZXIuZGVuO1xuXHR9O1xuXG5cdHRoaXMubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSA9IGZ1bmN0aW9uKGJwbU92ZXJyaWRlKSB7XG5cdFx0dmFyIGJwbTtcblx0XHRpZiAoYnBtT3ZlcnJpZGUpIHtcblx0XHRcdGJwbSA9IGJwbU92ZXJyaWRlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgdGVtcG8gPSB0aGlzLm1ldGFUZXh0ID8gdGhpcy5tZXRhVGV4dC50ZW1wbyA6IG51bGw7XG5cdFx0XHRicG0gPSB0aGlzLmdldEJwbSh0ZW1wbyk7XG5cdFx0fVxuXHRcdGlmIChicG0gPD0gMClcblx0XHRcdGJwbSA9IDE7IC8vIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYW4gaGFwcGVuLCBidXQgd2UgZG9uJ3Qgd2FudCBhIHBvc3NpYmlsaXR5IG9mIGRpdmlkaW5nIGJ5IHplcm8uXG5cblx0XHR2YXIgYmVhdHNQZXJNZWFzdXJlID0gdGhpcy5nZXRCZWF0c1Blck1lYXN1cmUoKTtcblxuXHRcdHZhciBtaW51dGVzUGVyTWVhc3VyZSA9IGJlYXRzUGVyTWVhc3VyZSAvIGJwbTtcblx0XHRyZXR1cm4gbWludXRlc1Blck1lYXN1cmUgKiA2MDAwMDtcblx0fTtcblxuXHR0aGlzLmdldEJlYXRzUGVyTWVhc3VyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBiZWF0c1Blck1lYXN1cmU7XG5cdFx0dmFyIG1ldGVyID0gdGhpcy5nZXRNZXRlckZyYWN0aW9uKCk7XG5cdFx0aWYgKG1ldGVyLmRlbiA9PT0gOCkge1xuXHRcdFx0YmVhdHNQZXJNZWFzdXJlID0gbWV0ZXIubnVtIC8gMztcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmVhdHNQZXJNZWFzdXJlID0gbWV0ZXIubnVtO1xuXHRcdH1cblx0XHRpZiAoYmVhdHNQZXJNZWFzdXJlIDw9IDApIC8vIFRoaXMgcHJvYmFibHkgd29uJ3QgaGFwcGVuIGluIGFueSBub3JtYWwgY2FzZSAtIGJ1dCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBtZXRlciBjb3VsZCBiZSBzZXQgdG8gc29tZXRoaW5nIG5vbnNlbnNpY2FsLlxuXHRcdFx0YmVhdHNQZXJNZWFzdXJlID0gMTtcblx0XHRyZXR1cm4gYmVhdHNQZXJNZWFzdXJlO1xuXHR9O1xuXG5cdHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy52ZXJzaW9uID0gXCIxLjAuMVwiO1xuXHRcdHRoaXMubWVkaWEgPSBcInNjcmVlblwiO1xuXHRcdHRoaXMubWV0YVRleHQgPSB7fTtcblx0XHR0aGlzLmZvcm1hdHRpbmcgPSB7fTtcblx0XHR0aGlzLmxpbmVzID0gW107XG5cdFx0dGhpcy5zdGFmZk51bSA9IDA7XG5cdFx0dGhpcy52b2ljZU51bSA9IDA7XG5cdFx0dGhpcy5saW5lTnVtID0gMDtcblx0fTtcblxuXHR0aGlzLnJlc29sdmVPdmVybGF5cyA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBtYWRlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWZmID0gbGluZS5zdGFmZltqXTtcblx0XHRcdFx0XHR2YXIgb3ZlcmxheVZvaWNlID0gW107XG5cdFx0XHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBzdGFmZi52b2ljZXMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdHZhciB2b2ljZSA9IHN0YWZmLnZvaWNlc1trXTtcblx0XHRcdFx0XHRcdG92ZXJsYXlWb2ljZS5wdXNoKHsgaGFzT3ZlcmxheTogZmFsc2UsIHZvaWNlOiBbXSwgc25pcDogW119KTtcblx0XHRcdFx0XHRcdHZhciBkdXJhdGlvblRoaXNCYXIgPSAwO1xuXHRcdFx0XHRcdFx0dmFyIGluT3ZlcmxheSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0dmFyIHNuaXBTdGFydCA9IC0xO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIga2sgPSAwOyBrayA8IHZvaWNlLmxlbmd0aDsga2srKykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZXZlbnQgPSB2b2ljZVtra107XG5cdFx0XHRcdFx0XHRcdGlmIChldmVudC5lbF90eXBlID09PSBcIm92ZXJsYXlcIiAmJiAhaW5PdmVybGF5KSB7XG5cdFx0XHRcdFx0XHRcdFx0bWFkZUNoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGluT3ZlcmxheSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0c25pcFN0YXJ0ID0ga2s7XG5cdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLmhhc092ZXJsYXkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmVsX3R5cGUgPT09IFwiYmFyXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5PdmVybGF5KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBkZWxldGUgdGhlIG92ZXJsYXkgZXZlbnRzIGZyb20gdGhpcyBhcnJheSB3aXRob3V0IG1lc3NpbmcgdXAgdGhpcyBsb29wLlxuXHRcdFx0XHRcdFx0XHRcdFx0aW5PdmVybGF5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRvdmVybGF5Vm9pY2Vba10uc25pcC5wdXNoKHsgc3RhcnQ6IHNuaXBTdGFydCwgbGVuOiBrayAtIHNuaXBTdGFydH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnZvaWNlLnB1c2goZXZlbnQpOyAvLyBBbHNvIGVuZCB0aGUgb3ZlcmxheSB3aXRoIHRoZSBiYXJsaW5lLlxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGlzIGtlZXBzIHRoZSB2b2ljZXMgbGluZWQgdXA6IGlmIHRoZSBvdmVybGF5IGlzbid0IGluIHRoZSBmaXJzdCBtZWFzdXJlIHRoZW4gd2UgbmVlZCBhIGJ1bmNoIG9mIGludmlzaWJsZSByZXN0cy5cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChkdXJhdGlvblRoaXNCYXIgPiAwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvdmVybGF5Vm9pY2Vba10udm9pY2UucHVzaCh7IGVsX3R5cGU6IFwibm90ZVwiLCBkdXJhdGlvbjogZHVyYXRpb25UaGlzQmFyLCByZXN0OiB7dHlwZTogXCJpbnZpc2libGVcIn0sIHN0YXJ0Q2hhcjogZXZlbnQuc3RhcnRDaGFyLCBlbmRDaGFyOiBldmVudC5lbmRDaGFyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnZvaWNlLnB1c2goZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvblRoaXNCYXIgPSAwO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmVsX3R5cGUgPT09IFwibm90ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluT3ZlcmxheSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnZvaWNlLnB1c2goZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvblRoaXNCYXIgKz0gZXZlbnQuZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmVsX3R5cGUgPT09IFwic2NhbGVcIiB8fCBldmVudC5lbF90eXBlID09PSBcInN0ZW1cIiB8fCBldmVudC5lbF90eXBlID09PSBcIm92ZXJsYXlcIiB8fCBldmVudC5lbF90eXBlID09PSBcInN0eWxlXCIgfHwgZXZlbnQuZWxfdHlwZSA9PT0gXCJ0cmFuc3Bvc2VcIikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRoZXNlIHR5cGVzIG9mIGV2ZW50cyBhcmUgZHVwbGljYXRlZCBvbiB0aGUgb3ZlcmxheSBsYXllci5cblx0XHRcdFx0XHRcdFx0XHRvdmVybGF5Vm9pY2Vba10udm9pY2UucHVzaChldmVudCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChvdmVybGF5Vm9pY2Vba10uaGFzT3ZlcmxheSAmJiBvdmVybGF5Vm9pY2Vba10uc25pcC5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRcdFx0Ly8gdGhlcmUgd2FzIG5vIGNsb3NpbmcgYmFyLCBzbyB3ZSBkaWRuJ3Qgc2V0IHRoZSBzbmlwIGFtb3VudC5cblx0XHRcdFx0XHRcdFx0b3ZlcmxheVZvaWNlW2tdLnNuaXAucHVzaCh7IHN0YXJ0OiBzbmlwU3RhcnQsIGxlbjogdm9pY2UubGVuZ3RoIC0gc25pcFN0YXJ0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGZvciAoayA9IDA7IGsgPCBvdmVybGF5Vm9pY2UubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdHZhciBvdiA9IG92ZXJsYXlWb2ljZVtrXTtcblx0XHRcdFx0XHRcdGlmIChvdi5oYXNPdmVybGF5KSB7XG5cdFx0XHRcdFx0XHRcdHN0YWZmLnZvaWNlcy5wdXNoKG92LnZvaWNlKTtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIga2trID0gb3Yuc25pcC5sZW5ndGgtMTsga2trID49IDA7IGtray0tKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNuaXAgPSBvdi5zbmlwW2tra107XG5cdFx0XHRcdFx0XHRcdFx0c3RhZmYudm9pY2VzW2tdLnNwbGljZShzbmlwLnN0YXJ0LCBzbmlwLmxlbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIGVuZGluZyBtYXJrcyBmcm9tIHRoZSBvdmVybGF5IHZvaWNlIHNvIHRoZXkgYXJlIG5vdCByZXBlYXRlZFxuXHRcdFx0XHRcdFx0XHRmb3IgKGtrayA9IDA7IGtrayA8IHN0YWZmLnZvaWNlc1tzdGFmZi52b2ljZXMubGVuZ3RoLTFdLmxlbmd0aDsga2trKyspIHtcblx0XHRcdFx0XHRcdFx0XHRzdGFmZi52b2ljZXNbc3RhZmYudm9pY2VzLmxlbmd0aC0xXVtra2tdID0gcGFyc2VDb21tb24uY2xvbmUoc3RhZmYudm9pY2VzW3N0YWZmLnZvaWNlcy5sZW5ndGgtMV1ba2trXSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVsID0gc3RhZmYudm9pY2VzW3N0YWZmLnZvaWNlcy5sZW5ndGgtMV1ba2trXTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWwuZWxfdHlwZSA9PT0gJ2JhcicgJiYgZWwuc3RhcnRFbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5zdGFydEVuZGluZztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsLmVsX3R5cGUgPT09ICdiYXInICYmIGVsLmVuZEVuZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5lbmRFbmRpbmc7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1hZGVDaGFuZ2VzO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpeFRpdGxlcyhsaW5lcykge1xuXHRcdC8vIFdlIG1pZ2h0IGhhdmUgbmFtZSBhbmQgc3VibmFtZSBkZWZpbmVkLiBXZSBub3cga25vdyB3aGF0IGxpbmUgZXZlcnl0aGluZyBpcyBvbiwgc28gd2UgY2FuIGRldGVybWluZSB3aGljaCB0byB1c2UuXG5cdFx0dmFyIGZpcnN0TXVzaWNMaW5lID0gdHJ1ZTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbGluZSA9IGxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWZmID0gbGluZS5zdGFmZltqXTtcblx0XHRcdFx0XHRpZiAoc3RhZmYudGl0bGUpIHtcblx0XHRcdFx0XHRcdHZhciBoYXNBVGl0bGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgc3RhZmYudGl0bGUubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmLnRpdGxlW2tdKSB7XG5cdFx0XHRcdFx0XHRcdHN0YWZmLnRpdGxlW2tdID0gKGZpcnN0TXVzaWNMaW5lKSA/IHN0YWZmLnRpdGxlW2tdLm5hbWUgOiBzdGFmZi50aXRsZVtrXS5zdWJuYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhZmYudGl0bGVba10pXG5cdFx0XHRcdFx0XHRcdFx0aGFzQVRpdGxlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0c3RhZmYudGl0bGVba10gPSAnJztcblx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0c3RhZmYudGl0bGVba10gPSAnJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghaGFzQVRpdGxlKVxuXHRcdFx0XHRcdFx0XHRkZWxldGUgc3RhZmYudGl0bGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZpcnN0TXVzaWNMaW5lID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5jbGVhblVwID0gZnVuY3Rpb24oZGVmV2lkdGgsIGRlZkxlbmd0aCwgYmFyc3BlcnN0YWZmLCBzdGFmZm5vbm90ZSwgY3VyclNsdXIpIHtcblx0XHR0aGlzLmNsb3NlTGluZSgpO1x0Ly8gQ2xvc2UgdGhlIGxhc3QgbGluZS5cblxuXHRcdC8vIElmIHRoZSB0ZW1wbyB3YXMgY3JlYXRlZCB3aXRoIGEgc3RyaW5nIGxpa2UgXCJBbGxlZ3JvXCIsIHRoZW4gdGhlIGR1cmF0aW9uIG9mIGEgYmVhdCBuZWVkcyB0byBiZSBzZXQgYXQgdGhlIGxhc3QgbW9tZW50LCB3aGVuIGl0IGlzIG1vc3QgbGlrZWx5IGtub3duLlxuXHRcdGlmICh0aGlzLm1ldGFUZXh0LnRlbXBvICYmIHRoaXMubWV0YVRleHQudGVtcG8uYnBtICYmICF0aGlzLm1ldGFUZXh0LnRlbXBvLmR1cmF0aW9uKVxuXHRcdFx0dGhpcy5tZXRhVGV4dC50ZW1wby5kdXJhdGlvbiA9IFsgdGhpcy5nZXRCZWF0TGVuZ3RoKCkgXTtcblxuXHRcdC8vIFJlbW92ZSBhbnkgYmxhbmsgbGluZXNcblx0XHR2YXIgYW55RGVsZXRlZCA9IGZhbHNlO1xuXHRcdHZhciBpLCBzLCB2O1xuXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5saW5lc1tpXS5zdGFmZiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBoYXNBbnkgPSBmYWxzZTtcblx0XHRcdFx0Zm9yIChzID0gMDsgcyA8IHRoaXMubGluZXNbaV0uc3RhZmYubGVuZ3RoOyBzKyspIHtcblx0XHRcdFx0XHRpZiAodGhpcy5saW5lc1tpXS5zdGFmZltzXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRhbnlEZWxldGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMubGluZXNbaV0uc3RhZmZbc10gPSBudWxsO1xuXHRcdFx0XHRcdFx0Ly90aGlzLmxpbmVzW2ldLnN0YWZmW3NdID0geyB2b2ljZXM6IFtdfTtcdC8vIFRPRE8tUEVSOiBUaGVyZSB3YXMgYSBwYXJ0IG1pc3NpbmcgaW4gdGhlIGFiYyBtdXNpYy4gSG93IHNob3VsZCB3ZSByZWNvdmVyP1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IgKHYgPSAwOyB2IDwgdGhpcy5saW5lc1tpXS5zdGFmZltzXS52b2ljZXMubGVuZ3RoOyB2KyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmZbc10udm9pY2VzW3ZdID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5saW5lc1tpXS5zdGFmZltzXS52b2ljZXNbdl0gPSBbXTtcdC8vIFRPRE8tUEVSOiBUaGVyZSB3YXMgYSBwYXJ0IG1pc3NpbmcgaW4gdGhlIGFiYyBtdXNpYy4gSG93IHNob3VsZCB3ZSByZWNvdmVyP1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnNOb3Rlcyh0aGlzLmxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XSkpIGhhc0FueSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaGFzQW55KSB7XG5cdFx0XHRcdFx0dGhpcy5saW5lc1tpXSA9IG51bGw7XG5cdFx0XHRcdFx0YW55RGVsZXRlZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGFueURlbGV0ZWQpIHtcblx0XHRcdHRoaXMubGluZXMgPSBwYXJzZUNvbW1vbi5jb21wYWN0KHRoaXMubGluZXMpO1xuXHRcdFx0cGFyc2VDb21tb24uZWFjaCh0aGlzLmxpbmVzLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdGlmIChsaW5lLnN0YWZmKVxuXHRcdFx0XHRcdGxpbmUuc3RhZmYgPSBwYXJzZUNvbW1vbi5jb21wYWN0KGxpbmUuc3RhZmYpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gaWYgd2UgZXhjZWVkZWQgdGhlIG51bWJlciBvZiBiYXJzIGFsbG93ZWQgb24gYSBsaW5lLCB0aGVuIGZvcmNlIGEgbmV3IGxpbmVcblx0XHRpZiAoYmFyc3BlcnN0YWZmKSB7XG5cdFx0XHR3aGlsZSAod3JhcE11c2ljTGluZXModGhpcy5saW5lcywgYmFyc3BlcnN0YWZmKSkge1xuXHRcdFx0XHQvLyBUaGlzIHdpbGwga2VlcCB3cmFwcGluZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwaWVjZS5cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB3ZSB3ZXJlIHBhc3NlZCBzdGFmZm5vbm90ZSwgdGhlbiB3ZSB3YW50IHRvIGdldCByaWQgb2YgYWxsIHN0YWZmcyB0aGF0IGNvbnRhaW4gb25seSByZXN0cy5cblx0XHRpZiAoc3RhZmZub25vdGUpIHtcblx0XHRcdGFueURlbGV0ZWQgPSBmYWxzZTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0aGlzLmxpbmVzW2ldLnN0YWZmICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRmb3IgKHMgPSAwOyBzIDwgdGhpcy5saW5lc1tpXS5zdGFmZi5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0dmFyIGtlZXBUaGlzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKHYgPSAwOyB2IDwgdGhpcy5saW5lc1tpXS5zdGFmZltzXS52b2ljZXMubGVuZ3RoOyB2KyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuY29udGFpbnNOb3Rlc1N0cmljdCh0aGlzLmxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XSkpIHtcblx0XHRcdFx0XHRcdFx0XHRrZWVwVGhpcyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICgha2VlcFRoaXMpIHtcblx0XHRcdFx0XHRcdFx0YW55RGVsZXRlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdHRoaXMubGluZXNbaV0uc3RhZmZbc10gPSBudWxsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGFueURlbGV0ZWQpIHtcblx0XHRcdFx0cGFyc2VDb21tb24uZWFjaCh0aGlzLmxpbmVzLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdFx0aWYgKGxpbmUuc3RhZmYpXG5cdFx0XHRcdFx0XHRsaW5lLnN0YWZmID0gcGFyc2VDb21tb24uY29tcGFjdChsaW5lLnN0YWZmKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zml4VGl0bGVzKHRoaXMubGluZXMpO1xuXG5cdFx0Ly8gUmVtb3ZlIHRoZSB0ZW1wb3Jhcnkgd29ya2luZyB2YXJpYWJsZXNcblx0XHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYpIHtcblx0XHRcdFx0Zm9yIChzID0gMDsgcyA8IHRoaXMubGluZXNbaV0uc3RhZmYubGVuZ3RoOyBzKyspXG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5saW5lc1tpXS5zdGFmZltzXS53b3JraW5nQ2xlZjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgb3ZlcmxheXMsIGNyZWF0ZSBuZXcgdm9pY2VzIGZvciB0aGVtLlxuXHRcdHdoaWxlICh0aGlzLnJlc29sdmVPdmVybGF5cygpKSB7XG5cdFx0XHQvLyBrZWVwIHJlc29sdmluZyBvdmVybGF5cyBhcyBsb25nIGFzIGFueSBhcmUgZm91bmQuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2xlYW5VcFNsdXJzSW5MaW5lKGxpbmUpIHtcblx0XHRcdHZhciB4O1xuLy9cdFx0XHR2YXIgbHlyID0gbnVsbDtcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmcuXG5cblx0XHRcdHZhciBhZGRFbmRTbHVyID0gZnVuY3Rpb24ob2JqLCBudW0sIGNob3JkUG9zKSB7XG5cdFx0XHRcdGlmIChjdXJyU2x1cltjaG9yZFBvc10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdC8vIFRoZXJlIGlzbid0IGFuIGV4YWN0IG1hdGNoIGZvciBub3RlIHBvc2l0aW9uLCBidXQgd2UnbGwgdGFrZSBhbnkgb3RoZXIgb3BlbiBzbHVyLlxuXHRcdFx0XHRcdGZvciAoeCA9IDA7IHggPCBjdXJyU2x1ci5sZW5ndGg7IHgrKykge1xuXHRcdFx0XHRcdFx0aWYgKGN1cnJTbHVyW3hdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Y2hvcmRQb3MgPSB4O1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGN1cnJTbHVyW2Nob3JkUG9zXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHR2YXIgb2ZmTnVtID0gY2hvcmRQb3MqMTAwKzE7XG5cdFx0XHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKG9iai5lbmRTbHVyLCBmdW5jdGlvbih4KSB7IGlmIChvZmZOdW0gPT09IHgpIC0tb2ZmTnVtOyB9KTtcblx0XHRcdFx0XHRcdGN1cnJTbHVyW2Nob3JkUG9zXSA9IFtvZmZOdW1dO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgc2x1ck51bTtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW07IGkrKykge1xuXHRcdFx0XHRcdHNsdXJOdW0gPSBjdXJyU2x1cltjaG9yZFBvc10ucG9wKCk7XG5cdFx0XHRcdFx0b2JqLmVuZFNsdXIucHVzaChzbHVyTnVtKTtcbi8vXHRcdFx0XHRcdGx5ci5zeWxsYWJsZSArPSAnPCcgKyBzbHVyTnVtO1x0Ly8gVE9ETy1QRVI6IGRlYnVnZ2luZ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChjdXJyU2x1cltjaG9yZFBvc10ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdGRlbGV0ZSBjdXJyU2x1cltjaG9yZFBvc107XG5cdFx0XHRcdHJldHVybiBzbHVyTnVtO1xuXHRcdFx0fTtcblxuXHRcdFx0dmFyIGFkZFN0YXJ0U2x1ciA9IGZ1bmN0aW9uKG9iaiwgbnVtLCBjaG9yZFBvcywgdXNlZE51bXMpIHtcblx0XHRcdFx0b2JqLnN0YXJ0U2x1ciA9IFtdO1xuXHRcdFx0XHRpZiAoY3VyclNsdXJbY2hvcmRQb3NdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjdXJyU2x1cltjaG9yZFBvc10gPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgbmV4dE51bSA9IGNob3JkUG9zKjEwMCsxO1xuXHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG51bTsgaSsrKSB7XG5cdFx0XHRcdFx0aWYgKHVzZWROdW1zKSB7XG5cdFx0XHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKHVzZWROdW1zLCBmdW5jdGlvbih4KSB7IGlmIChuZXh0TnVtID09PSB4KSArK25leHROdW07IH0pO1xuXHRcdFx0XHRcdFx0cGFyc2VDb21tb24uZWFjaCh1c2VkTnVtcywgZnVuY3Rpb24oeCkgeyBpZiAobmV4dE51bSA9PT0geCkgKytuZXh0TnVtOyB9KTtcblx0XHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2godXNlZE51bXMsIGZ1bmN0aW9uKHgpIHsgaWYgKG5leHROdW0gPT09IHgpICsrbmV4dE51bTsgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goY3VyclNsdXJbY2hvcmRQb3NdLCBmdW5jdGlvbih4KSB7IGlmIChuZXh0TnVtID09PSB4KSArK25leHROdW07IH0pO1xuXHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goY3VyclNsdXJbY2hvcmRQb3NdLCBmdW5jdGlvbih4KSB7IGlmIChuZXh0TnVtID09PSB4KSArK25leHROdW07IH0pO1xuXG5cdFx0XHRcdFx0Y3VyclNsdXJbY2hvcmRQb3NdLnB1c2gobmV4dE51bSk7XG5cdFx0XHRcdFx0b2JqLnN0YXJ0U2x1ci5wdXNoKHsgbGFiZWw6IG5leHROdW0gfSk7XG4vL1x0XHRcdFx0XHRseXIuc3lsbGFibGUgKz0gJyAnICsgbmV4dE51bSArICc+JztcdC8vIFRPRE8tUEVSOmRlYnVnZ2luZ1xuXHRcdFx0XHRcdG5leHROdW0rKztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBlbCA9IGxpbmVbaV07XG4vL1x0XHRcdFx0aWYgKGVsLmx5cmljID09PSB1bmRlZmluZWQpXHQvLyBUT0RPLVBFUjogZGVidWdnaW5nXG4vL1x0XHRcdFx0XHRlbC5seXJpYyA9IFt7IGRpdmlkZXI6ICctJyB9XTtcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmdcbi8vXHRcdFx0XHRseXIgPSBlbC5seXJpY1swXTtcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmdcbi8vXHRcdFx0XHRseXIuc3lsbGFibGUgPSAnJztcdC8vIFRPRE8tUEVSOiBkZWJ1Z2dpbmdcblx0XHRcdFx0aWYgKGVsLmVsX3R5cGUgPT09ICdub3RlJykge1xuXHRcdFx0XHRcdGlmIChlbC5ncmFjZW5vdGVzKSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBnID0gMDsgZyA8IGVsLmdyYWNlbm90ZXMubGVuZ3RoOyBnKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKGVsLmdyYWNlbm90ZXNbZ10uZW5kU2x1cikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnZyA9IGVsLmdyYWNlbm90ZXNbZ10uZW5kU2x1cjtcblx0XHRcdFx0XHRcdFx0XHRlbC5ncmFjZW5vdGVzW2ddLmVuZFNsdXIgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKHZhciBnZ2cgPSAwOyBnZ2cgPCBnZzsgZ2dnKyspXG5cdFx0XHRcdFx0XHRcdFx0XHRhZGRFbmRTbHVyKGVsLmdyYWNlbm90ZXNbZ10sIDEsIDIwKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAoZWwuZ3JhY2Vub3Rlc1tnXS5zdGFydFNsdXIpIHtcblx0XHRcdFx0XHRcdFx0XHR4ID0gZWwuZ3JhY2Vub3Rlc1tnXS5zdGFydFNsdXI7XG5cdFx0XHRcdFx0XHRcdFx0YWRkU3RhcnRTbHVyKGVsLmdyYWNlbm90ZXNbZ10sIHgsIDIwKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZWwuZW5kU2x1cikge1xuXHRcdFx0XHRcdFx0eCA9IGVsLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRlbC5lbmRTbHVyID0gW107XG5cdFx0XHRcdFx0XHRhZGRFbmRTbHVyKGVsLCB4LCAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsLnN0YXJ0U2x1cikge1xuXHRcdFx0XHRcdFx0eCA9IGVsLnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdGFkZFN0YXJ0U2x1cihlbCwgeCwgMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbC5waXRjaGVzKSB7XG5cdFx0XHRcdFx0XHR2YXIgdXNlZE51bXMgPSBbXTtcblx0XHRcdFx0XHRcdGZvciAodmFyIHAgPSAwOyBwIDwgZWwucGl0Y2hlcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZWwucGl0Y2hlc1twXS5lbmRTbHVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGsgPSBlbC5waXRjaGVzW3BdLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1twXS5lbmRTbHVyID0gW107XG5cdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBrOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBzbHVyTnVtID0gYWRkRW5kU2x1cihlbC5waXRjaGVzW3BdLCAxLCBwKzEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlZE51bXMucHVzaChzbHVyTnVtKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvciAocCA9IDA7IHAgPCBlbC5waXRjaGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbC5waXRjaGVzW3BdLnN0YXJ0U2x1cikge1xuXHRcdFx0XHRcdFx0XHRcdHggPSBlbC5waXRjaGVzW3BdLnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdFx0XHRhZGRTdGFydFNsdXIoZWwucGl0Y2hlc1twXSwgeCwgcCsxLCB1c2VkTnVtcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIENvcnJlY3QgZm9yIHRoZSB3ZWlyZCBncmFjZW5vdGUgY2FzZSB3aGVyZSAoe2d9YSkgc2hvdWxkIG1hdGNoLlxuXHRcdFx0XHRcdFx0Ly8gVGhlIGVuZCBzbHVyIHdhcyBhbHJlYWR5IGFzc2lnbmVkIHRvIHRoZSBub3RlLCBhbmQgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIGZpcnN0IG5vdGUgb2YgdGhlIGdyYWNlcy5cblx0XHRcdFx0XHRcdGlmIChlbC5ncmFjZW5vdGVzICYmIGVsLnBpdGNoZXNbMF0uZW5kU2x1ciAmJiBlbC5waXRjaGVzWzBdLmVuZFNsdXJbMF0gPT09IDEwMCAmJiBlbC5waXRjaGVzWzBdLnN0YXJ0U2x1cikge1xuXHRcdFx0XHRcdFx0XHRpZiAoZWwuZ3JhY2Vub3Rlc1swXS5lbmRTbHVyKVxuXHRcdFx0XHRcdFx0XHRcdGVsLmdyYWNlbm90ZXNbMF0uZW5kU2x1ci5wdXNoKGVsLnBpdGNoZXNbMF0uc3RhcnRTbHVyWzBdLmxhYmVsKTtcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdGVsLmdyYWNlbm90ZXNbMF0uZW5kU2x1ciA9IFtlbC5waXRjaGVzWzBdLnN0YXJ0U2x1clswXS5sYWJlbF07XG5cdFx0XHRcdFx0XHRcdGlmIChlbC5waXRjaGVzWzBdLmVuZFNsdXIubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5waXRjaGVzWzBdLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGVsLnBpdGNoZXNbMF0uZW5kU2x1clswXSA9PT0gMTAwKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnBpdGNoZXNbMF0uZW5kU2x1ci5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0XHRlbHNlIGlmIChlbC5waXRjaGVzWzBdLmVuZFNsdXJbZWwucGl0Y2hlc1swXS5lbmRTbHVyLmxlbmd0aC0xXSA9PT0gMTAwKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnBpdGNoZXNbMF0uZW5kU2x1ci5wb3AoKTtcblx0XHRcdFx0XHRcdFx0aWYgKGN1cnJTbHVyWzFdLmxlbmd0aCA9PT0gMSlcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY3VyclNsdXJbMV07XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRjdXJyU2x1clsxXS5wb3AoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBUT0RPLVBFUjogVGhpcyBjb3VsZCBiZSBkb25lIGZhc3RlciBhcyB3ZSBnbyBpbnN0ZWFkIG9mIGFzIHRoZSBsYXN0IHN0ZXAuXG5cdFx0ZnVuY3Rpb24gZml4Q2xlZlBsYWNlbWVudChlbCkge1xuXHRcdFx0cGFyc2VLZXlWb2ljZS5maXhDbGVmKGVsKTtcblx0XHRcdC8vaWYgKGVsLmVsX3R5cGUgPT09ICdjbGVmJykge1xuLy9cdFx0XHRcdHZhciBtaW4gPSAtMjtcbi8vXHRcdFx0XHR2YXIgbWF4ID0gNTtcbi8vXHRcdFx0XHRzd2l0Y2goZWwudHlwZSkge1xuLy9cdFx0XHRcdFx0Y2FzZSAndHJlYmxlKzgnOlxuLy9cdFx0XHRcdFx0Y2FzZSAndHJlYmxlLTgnOlxuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHRcdGNhc2UgJ2Jhc3MnOlxuLy9cdFx0XHRcdFx0Y2FzZSAnYmFzcys4Jzpcbi8vXHRcdFx0XHRcdGNhc2UgJ2Jhc3MtOCc6XG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zID0gMjAgKyBlbC52ZXJ0aWNhbFBvczsgbWluICs9IDY7IG1heCArPSA2O1xuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHRcdGNhc2UgJ3Rlbm9yJzpcbi8vXHRcdFx0XHRcdGNhc2UgJ3Rlbm9yKzgnOlxuLy9cdFx0XHRcdFx0Y2FzZSAndGVub3ItOCc6XG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zID0gLSBlbC52ZXJ0aWNhbFBvczsgbWluID0gLTQwOyBtYXggPSA0MDtcbi8vLy9cdFx0XHRcdFx0XHRlbC52ZXJ0aWNhbFBvcys9MjsgbWluICs9IDY7IG1heCArPSA2O1xuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHRcdGNhc2UgJ2FsdG8nOlxuLy9cdFx0XHRcdFx0Y2FzZSAnYWx0bys4Jzpcbi8vXHRcdFx0XHRcdGNhc2UgJ2FsdG8tOCc6XG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zID0gLSBlbC52ZXJ0aWNhbFBvczsgbWluID0gLTQwOyBtYXggPSA0MDtcbi8vLy9cdFx0XHRcdFx0XHRlbC52ZXJ0aWNhbFBvcy09MjsgbWluICs9IDQ7IG1heCArPSA0O1xuLy9cdFx0XHRcdFx0XHRicmVhaztcbi8vXHRcdFx0XHR9XG4vL1x0XHRcdFx0aWYgKGVsLnZlcnRpY2FsUG9zIDwgbWluKSB7XG4vL1x0XHRcdFx0XHR3aGlsZSAoZWwudmVydGljYWxQb3MgPCBtaW4pXG4vL1x0XHRcdFx0XHRcdGVsLnZlcnRpY2FsUG9zICs9IDc7XG4vL1x0XHRcdFx0fSBlbHNlIGlmIChlbC52ZXJ0aWNhbFBvcyA+IG1heCkge1xuLy9cdFx0XHRcdFx0d2hpbGUgKGVsLnZlcnRpY2FsUG9zID4gbWF4KVxuLy9cdFx0XHRcdFx0XHRlbC52ZXJ0aWNhbFBvcyAtPSA3O1xuLy9cdFx0XHRcdH1cblx0XHRcdC8vfVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHdyYXBNdXNpY0xpbmVzKGxpbmVzLCBiYXJzcGVyc3RhZmYpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAobGluZXNbaV0uc3RhZmYgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGZvciAocyA9IDA7IHMgPCBsaW5lc1tpXS5zdGFmZi5sZW5ndGg7IHMrKykge1xuXHRcdFx0XHRcdFx0dmFyIHBlcm1hbmVudEl0ZW1zID0gW107XG5cdFx0XHRcdFx0XHRmb3IgKHYgPSAwOyB2IDwgbGluZXNbaV0uc3RhZmZbc10udm9pY2VzLmxlbmd0aDsgdisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2b2ljZSA9IGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XTtcblx0XHRcdFx0XHRcdFx0dmFyIGJhck51bVRoaXNMaW5lID0gMDtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbiA9IDA7IG4gPCB2b2ljZS5sZW5ndGg7IG4rKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmICh2b2ljZVtuXS5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0YmFyTnVtVGhpc0xpbmUrKztcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiYXJOdW1UaGlzTGluZSA+PSBiYXJzcGVyc3RhZmYpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gcHVzaCBldmVyeXRoaW5nIGVsc2UgdG8gdGhlIG5leHQgbGluZSwgaWYgdGhlcmUgaXMgYW55dGhpbmcgZWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIHRoZXJlIGlzIGEgbmV4dCBsaW5lLiBJZiB0aGVyZSBpc24ndCBhIG5leHQgbGluZSwgY3JlYXRlIG9uZS5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG4gPCB2b2ljZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5leHRMaW5lID0gZ2V0TmV4dE11c2ljTGluZShsaW5lcywgaSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFuZXh0TGluZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaW5lc1tpXSkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGluZXMucHVzaChwYXJzZUNvbW1vbi5jbG9uZShjcCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV4dExpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvciAodmFyIHNzID0gMDsgc3MgPCBuZXh0TGluZS5zdGFmZi5sZW5ndGg7IHNzKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgdnYgPSAwOyB2diA8IG5leHRMaW5lLnN0YWZmW3NzXS52b2ljZXMubGVuZ3RoOyB2disrKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRMaW5lLnN0YWZmW3NzXS52b2ljZXNbdnZdID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdGFydEVsZW1lbnQgPSBuICsgMTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgc2VjdGlvbiA9IGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XS5zbGljZShzdGFydEVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XSA9IGxpbmVzW2ldLnN0YWZmW3NdLnZvaWNlc1t2XS5zbGljZSgwLCBzdGFydEVsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5leHRMaW5lLnN0YWZmW3NdLnZvaWNlc1t2XSA9IHBlcm1hbmVudEl0ZW1zLmNvbmNhdChzZWN0aW9uLmNvbmNhdChuZXh0TGluZS5zdGFmZltzXS52b2ljZXNbdl0pKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIXZvaWNlW25dLmR1cmF0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwZXJtYW5lbnRJdGVtcy5wdXNoKHZvaWNlW25dKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXROZXh0TXVzaWNMaW5lKGxpbmVzLCBjdXJyZW50TGluZSkge1xuXHRcdFx0Y3VycmVudExpbmUrKztcblx0XHRcdHdoaWxlIChsaW5lcy5sZW5ndGggPiBjdXJyZW50TGluZSkge1xuXHRcdFx0XHRpZiAobGluZXNbY3VycmVudExpbmVdLnN0YWZmKVxuXHRcdFx0XHRcdHJldHVybiBsaW5lc1tjdXJyZW50TGluZV07XG5cdFx0XHRcdGN1cnJlbnRMaW5lKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRmb3IgKHRoaXMubGluZU51bSA9IDA7IHRoaXMubGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyB0aGlzLmxpbmVOdW0rKykge1xuXHRcdFx0dmFyIHN0YWZmID0gdGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmO1xuXHRcdFx0aWYgKHN0YWZmKSB7XG5cdFx0XHRcdGZvciAodGhpcy5zdGFmZk51bSA9IDA7IHRoaXMuc3RhZmZOdW0gPCBzdGFmZi5sZW5ndGg7IHRoaXMuc3RhZmZOdW0rKykge1xuXHRcdFx0XHRcdGlmIChzdGFmZlt0aGlzLnN0YWZmTnVtXS5jbGVmKVxuXHRcdFx0XHRcdFx0Zml4Q2xlZlBsYWNlbWVudChzdGFmZlt0aGlzLnN0YWZmTnVtXS5jbGVmKTtcblx0XHRcdFx0XHRmb3IgKHRoaXMudm9pY2VOdW0gPSAwOyB0aGlzLnZvaWNlTnVtIDwgc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzLmxlbmd0aDsgdGhpcy52b2ljZU51bSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgdm9pY2UgPSBzdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV07XG5cdFx0XHRcdFx0XHRjbGVhblVwU2x1cnNJbkxpbmUodm9pY2UpO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB2b2ljZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRpZiAodm9pY2Vbal0uZWxfdHlwZSA9PT0gJ2NsZWYnKVxuXHRcdFx0XHRcdFx0XHRcdGZpeENsZWZQbGFjZW1lbnQodm9pY2Vbal0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHZvaWNlLmxlbmd0aCA+IDAgJiYgdm9pY2Vbdm9pY2UubGVuZ3RoLTFdLmJhck51bWJlcikge1xuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCBoYW5nIGEgYmFyIG51bWJlciBvbiB0aGUgbGFzdCBiYXIgbGluZTogaXQgc2hvdWxkIGdvIG9uIHRoZSBuZXh0IGxpbmUuXG5cdFx0XHRcdFx0XHRcdHZhciBuZXh0TGluZSA9IGdldE5leHRNdXNpY0xpbmUodGhpcy5saW5lcywgdGhpcy5saW5lTnVtKTtcblx0XHRcdFx0XHRcdFx0aWYgKG5leHRMaW5lKVxuXHRcdFx0XHRcdFx0XHRcdG5leHRMaW5lLnN0YWZmWzBdLmJhck51bWJlciA9IHZvaWNlW3ZvaWNlLmxlbmd0aC0xXS5iYXJOdW1iZXI7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSB2b2ljZVt2b2ljZS5sZW5ndGgtMV0uYmFyTnVtYmVyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICghdGhpcy5mb3JtYXR0aW5nLnBhZ2V3aWR0aClcblx0XHRcdHRoaXMuZm9ybWF0dGluZy5wYWdld2lkdGggPSBkZWZXaWR0aDtcblx0XHRpZiAoIXRoaXMuZm9ybWF0dGluZy5wYWdlaGVpZ2h0KVxuXHRcdFx0dGhpcy5mb3JtYXR0aW5nLnBhZ2VoZWlnaHQgPSBkZWZMZW5ndGg7XG5cblx0XHQvLyBSZW1vdmUgdGVtcG9yYXJ5IHZhcmlhYmxlcyB0aGF0IHRoZSBvdXRzaWRlIGRvZXNuJ3QgbmVlZCB0byBrbm93IGFib3V0XG5cdFx0ZGVsZXRlIHRoaXMuc3RhZmZOdW07XG5cdFx0ZGVsZXRlIHRoaXMudm9pY2VOdW07XG5cdFx0ZGVsZXRlIHRoaXMubGluZU51bTtcblx0XHRkZWxldGUgdGhpcy5wb3RlbnRpYWxTdGFydEJlYW07XG5cdFx0ZGVsZXRlIHRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHRkZWxldGUgdGhpcy52c2tpcFBlbmRpbmc7XG5cblx0XHRyZXR1cm4gY3VyclNsdXI7XG5cdH07XG5cblx0dGhpcy5yZXNldCgpO1xuXG5cdHRoaXMuZ2V0TGFzdE5vdGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dICYmIHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZiAmJiB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0gJiZcblx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV0pIHtcblx0XHRcdGZvciAodmFyIGkgPSB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzW3RoaXMudm9pY2VOdW1dLmxlbmd0aC0xOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHR2YXIgZWwgPSB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzW3RoaXMudm9pY2VOdW1dW2ldO1xuXHRcdFx0XHRpZiAoZWwuZWxfdHlwZSA9PT0gJ25vdGUnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdHRoaXMuYWRkVGllVG9MYXN0Tm90ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIFRPRE8tUEVSOiBpZiB0aGlzIGlzIGEgY2hvcmQsIHdoaWNoIG5vdGU/XG5cdFx0dmFyIGVsID0gdGhpcy5nZXRMYXN0Tm90ZSgpO1xuXHRcdGlmIChlbCAmJiBlbC5waXRjaGVzICYmIGVsLnBpdGNoZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0ZWwucGl0Y2hlc1swXS5zdGFydFRpZSA9IHt9O1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR0aGlzLmdldER1cmF0aW9uID0gZnVuY3Rpb24oZWwpIHtcblx0XHRpZiAoZWwuZHVyYXRpb24pIHJldHVybiBlbC5kdXJhdGlvbjtcblx0XHQvL2lmIChlbC5waXRjaGVzICYmIGVsLnBpdGNoZXMubGVuZ3RoID4gMCkgcmV0dXJuIGVsLnBpdGNoZXNbMF0uZHVyYXRpb247XG5cdFx0cmV0dXJuIDA7XG5cdH07XG5cblx0dGhpcy5jbG9zZUxpbmUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5wb3RlbnRpYWxTdGFydEJlYW0gJiYgdGhpcy5wb3RlbnRpYWxFbmRCZWFtKSB7XG5cdFx0XHR0aGlzLnBvdGVudGlhbFN0YXJ0QmVhbS5zdGFydEJlYW0gPSB0cnVlO1xuXHRcdFx0dGhpcy5wb3RlbnRpYWxFbmRCZWFtLmVuZEJlYW0gPSB0cnVlO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5wb3RlbnRpYWxTdGFydEJlYW07XG5cdFx0ZGVsZXRlIHRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0fTtcblxuXHR0aGlzLmFwcGVuZEVsZW1lbnQgPSBmdW5jdGlvbih0eXBlLCBzdGFydENoYXIsIGVuZENoYXIsIGhhc2hQYXJhbXMpXG5cdHtcblx0XHR2YXIgVGhpcyA9IHRoaXM7XG5cdFx0dmFyIHB1c2hOb3RlID0gZnVuY3Rpb24oaHApIHtcblx0XHRcdHZhciBjdXJyU3RhZmYgPSBUaGlzLmxpbmVzW1RoaXMubGluZU51bV0uc3RhZmZbVGhpcy5zdGFmZk51bV07XG5cdFx0XHRpZiAoIWN1cnJTdGFmZikge1xuXHRcdFx0XHQvLyBUT0RPLVBFUjogVGhpcyBwcmV2ZW50cyBhIGNyYXNoLCBidXQgaXQgZHJvcHMgdGhlIGVsZW1lbnQuIE5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc3RhcnQgYSBuZXcgbGluZSwgb3IgZGVsYXkgYWRkaW5nIHRoaXMuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChocC5waXRjaGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIG1pZCA9IGN1cnJTdGFmZi53b3JraW5nQ2xlZi52ZXJ0aWNhbFBvcztcblx0XHRcdFx0cGFyc2VDb21tb24uZWFjaChocC5waXRjaGVzLCBmdW5jdGlvbihwKSB7IHAudmVydGljYWxQb3MgPSBwLnBpdGNoIC0gbWlkOyB9KTtcblx0XHRcdH1cblx0XHRcdGlmIChocC5ncmFjZW5vdGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIG1pZDIgPSBjdXJyU3RhZmYud29ya2luZ0NsZWYudmVydGljYWxQb3M7XG5cdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goaHAuZ3JhY2Vub3RlcywgZnVuY3Rpb24ocCkgeyBwLnZlcnRpY2FsUG9zID0gcC5waXRjaCAtIG1pZDI7IH0pO1xuXHRcdFx0fVxuXHRcdFx0Y3VyclN0YWZmLnZvaWNlc1tUaGlzLnZvaWNlTnVtXS5wdXNoKGhwKTtcblx0XHR9O1xuXHRcdGhhc2hQYXJhbXMuZWxfdHlwZSA9IHR5cGU7XG5cdFx0aWYgKHN0YXJ0Q2hhciAhPT0gbnVsbClcblx0XHRcdGhhc2hQYXJhbXMuc3RhcnRDaGFyID0gc3RhcnRDaGFyO1xuXHRcdGlmIChlbmRDaGFyICE9PSBudWxsKVxuXHRcdFx0aGFzaFBhcmFtcy5lbmRDaGFyID0gZW5kQ2hhcjtcblx0XHR2YXIgZW5kQmVhbUhlcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFRoaXMucG90ZW50aWFsU3RhcnRCZWFtLnN0YXJ0QmVhbSA9IHRydWU7XG5cdFx0XHRoYXNoUGFyYW1zLmVuZEJlYW0gPSB0cnVlO1xuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsU3RhcnRCZWFtO1xuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHR9O1xuXHRcdHZhciBlbmRCZWFtTGFzdCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKFRoaXMucG90ZW50aWFsU3RhcnRCZWFtICE9PSB1bmRlZmluZWQgJiYgVGhpcy5wb3RlbnRpYWxFbmRCZWFtICE9PSB1bmRlZmluZWQpIHtcdC8vIERvIHdlIGhhdmUgYSBzZXQgb2Ygbm90ZXMgdG8gYmVhbT9cblx0XHRcdFx0VGhpcy5wb3RlbnRpYWxTdGFydEJlYW0uc3RhcnRCZWFtID0gdHJ1ZTtcblx0XHRcdFx0VGhpcy5wb3RlbnRpYWxFbmRCZWFtLmVuZEJlYW0gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsU3RhcnRCZWFtO1xuXHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHR9O1xuXHRcdGlmICh0eXBlID09PSAnbm90ZScpIHsgLy8gJiYgKGhhc2hQYXJhbXMucmVzdCAhPT0gdW5kZWZpbmVkIHx8IGhhc2hQYXJhbXMuZW5kX2JlYW0gPT09IHVuZGVmaW5lZCkpIHtcblx0XHRcdC8vIE5vdywgYWRkIHRoZSBzdGFydEJlYW0gYW5kIGVuZEJlYW0gd2hlcmUgaXQgaXMgbmVlZGVkLlxuXHRcdFx0Ly8gZW5kX2JlYW0gaXMgYWxyZWFkeSBzZXQgb24gdGhlIHBsYWNlcyB3aGVyZSB0aGVyZSBpcyBhIGZvcmNlZCBlbmRfYmVhbS4gV2UnbGwgcmVtb3ZlIHRoYXQgaGVyZSBhZnRlciB1c2luZyB0aGF0IGluZm8uXG5cdFx0XHQvLyB0aGlzLnBvdGVudGlhbFN0YXJ0QmVhbSBlaXRoZXIgcG9pbnRzIHRvIG51bGwgb3IgdGhlIHN0YXJ0IGJlYW0uXG5cdFx0XHQvLyB0aGlzLnBvdGVudGlhbEVuZEJlYW0gZWl0aGVyIHBvaW50cyB0byBudWxsIG9yIHRoZSBzdGFydCBiZWFtLlxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIGJlYW0gYnJlYWsgKG5vdGUgaXMgbG9uZ2VyIHRoYW4gYSBxdWFydGVyLCBvciBhbiBlbmRfYmVhbSBpcyBvbiB0aGlzIGVsZW1lbnQpLCB0aGVuIHNldCB0aGUgYmVhbSBpZiB3ZSBoYXZlIG9uZS5cblx0XHRcdC8vIHJlc2V0IHRoZSB2YXJpYWJsZXMgZm9yIHRoZSBuZXh0IG5vdGVzLlxuXHRcdFx0dmFyIGR1ciA9IFRoaXMuZ2V0RHVyYXRpb24oaGFzaFBhcmFtcyk7XG5cdFx0XHRpZiAoZHVyID49IDAuMjUpIHtcdC8vIFRoZSBiZWFtIGVuZHMgb24gdGhlIG5vdGUgYmVmb3JlIHRoaXMuXG5cdFx0XHRcdGVuZEJlYW1MYXN0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc2hQYXJhbXMuZm9yY2VfZW5kX2JlYW1fbGFzdCAmJiBUaGlzLnBvdGVudGlhbFN0YXJ0QmVhbSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGVuZEJlYW1MYXN0KCk7XG5cdFx0XHR9IGVsc2UgaWYgKGhhc2hQYXJhbXMuZW5kX2JlYW0gJiYgVGhpcy5wb3RlbnRpYWxTdGFydEJlYW0gIT09IHVuZGVmaW5lZCkge1x0Ly8gdGhlIGJlYW0gaXMgZm9yY2VkIHRvIGVuZCBvbiB0aGlzIG5vdGUsIHByb2JhYmx5IGJlY2F1c2Ugb2YgYSBzcGFjZSBpbiB0aGUgQUJDXG5cdFx0XHRcdGlmIChoYXNoUGFyYW1zLnJlc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRlbmRCZWFtSGVyZSgpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0ZW5kQmVhbUxhc3QoKTtcblx0XHRcdH0gZWxzZSBpZiAoaGFzaFBhcmFtcy5yZXN0ID09PSB1bmRlZmluZWQpIHtcdC8vIHRoaXMgYSBzaG9ydCBub3RlIGFuZCB3ZSBhcmVuJ3QgYWJvdXQgdG8gZW5kIHRoZSBiZWFtXG5cdFx0XHRcdGlmIChUaGlzLnBvdGVudGlhbFN0YXJ0QmVhbSA9PT0gdW5kZWZpbmVkKSB7XHQvLyBXZSBhcmVuJ3QgY29sbGVjdGluZyBub3RlcyBmb3IgYSBiZWFtLCBzbyBzdGFydCBoZXJlLlxuXHRcdFx0XHRcdGlmICghaGFzaFBhcmFtcy5lbmRfYmVhbSkge1xuXHRcdFx0XHRcdFx0VGhpcy5wb3RlbnRpYWxTdGFydEJlYW0gPSBoYXNoUGFyYW1zO1xuXHRcdFx0XHRcdFx0ZGVsZXRlIFRoaXMucG90ZW50aWFsRW5kQmVhbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0VGhpcy5wb3RlbnRpYWxFbmRCZWFtID0gaGFzaFBhcmFtcztcdC8vIENvbnRpbnVlIHRoZSBiZWFtaW5nLCBsb29rIGZvciB0aGUgZW5kIG5leHQgbm90ZS5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyAgZW5kX2JlYW0gZ29lcyBvbiByZXN0cyBhbmQgbm90ZXMgd2hpY2ggcHJlY2VkZSByZXN0cyBfZXhjZXB0XyB3aGVuIGEgcmVzdCAob3Igc2V0IG9mIGFkamFjZW50IHJlc3RzKSBoYXMgbm9ybWFsIG5vdGVzIG9uIGJvdGggc2lkZXMgKG5vIHNwYWNlcylcbi8vXHRcdFx0aWYgKGhhc2hQYXJhbXMucmVzdCAhPT0gdW5kZWZpbmVkKVxuLy9cdFx0XHR7XG4vL1x0XHRcdFx0aGFzaFBhcmFtcy5lbmRfYmVhbSA9IHRydWU7XG4vL1x0XHRcdFx0dmFyIGVsMiA9IHRoaXMuZ2V0TGFzdE5vdGUoKTtcbi8vXHRcdFx0XHRpZiAoZWwyKSBlbDIuZW5kX2JlYW0gPSB0cnVlO1xuLy9cdFx0XHRcdC8vIFRPRE8tUEVSOiBpbXBsZW1lbnQgZXhjZXB0aW9uIG1lbnRpb25lZCBpbiB0aGUgY29tbWVudC5cbi8vXHRcdFx0fVxuXHRcdH0gZWxzZSB7XHQvLyBJdCdzIG5vdCBhIG5vdGUsIHNvIHRoZXJlIGRlZmluaXRlbHkgaXNuJ3QgYmVhbWluZyBhZnRlciBpdC5cblx0XHRcdGVuZEJlYW1MYXN0KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBoYXNoUGFyYW1zLmVuZF9iZWFtO1x0Ly8gV2UgZG9uJ3Qgd2FudCB0aGlzIHRlbXBvcmFyeSB2YXJpYWJsZSBoYW5naW5nIGFyb3VuZC5cblx0XHRkZWxldGUgaGFzaFBhcmFtcy5mb3JjZV9lbmRfYmVhbV9sYXN0O1x0Ly8gV2UgZG9uJ3Qgd2FudCB0aGlzIHRlbXBvcmFyeSB2YXJpYWJsZSBoYW5naW5nIGFyb3VuZC5cblx0XHRwdXNoTm90ZShoYXNoUGFyYW1zKTtcblx0fTtcblxuXHR0aGlzLmFwcGVuZFN0YXJ0aW5nRWxlbWVudCA9IGZ1bmN0aW9uKHR5cGUsIHN0YXJ0Q2hhciwgZW5kQ2hhciwgaGFzaFBhcmFtczIpXG5cdHtcblx0XHQvLyBJZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGJlYW1pbmcsIHRoZW4gZW5kIHRoZSBiZWFtLlxuXHRcdHRoaXMuY2xvc2VMaW5lKCk7XG5cblx0XHQvLyBXZSBvbmx5IGV2ZXIgd2FudCBpbXBsaWVkIG5hdHVyYWxzIHRoZSBmaXJzdCB0aW1lLlxuXHRcdHZhciBpbXBsaWVkTmF0dXJhbHM7XG5cdFx0aWYgKHR5cGUgPT09ICdrZXknKSB7XG5cdFx0XHRpbXBsaWVkTmF0dXJhbHMgPSBoYXNoUGFyYW1zMi5pbXBsaWVkTmF0dXJhbHM7XG5cdFx0XHRkZWxldGUgaGFzaFBhcmFtczIuaW1wbGllZE5hdHVyYWxzO1xuXHRcdFx0ZGVsZXRlIGhhc2hQYXJhbXMyLmV4cGxpY2l0QWNjaWRlbnRhbHM7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgdGhlIG9iamVjdCBiZWNhdXNlIGl0IHdpbGwgYmUgc3RpY2tpbmcgYXJvdW5kIGZvciB0aGUgbmV4dCBsaW5lIGFuZCB3ZSBkb24ndCB3YW50IHRoZSBleHRyYSBmaWVsZHMgaW4gaXQuXG5cdFx0dmFyIGhhc2hQYXJhbXMgPSBwYXJzZUNvbW1vbi5jbG9uZShoYXNoUGFyYW1zMik7XG5cblx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmKSB7IC8vIGJlIHN1cmUgdGhhdCB3ZSBhcmUgb24gYSBtdXNpYyB0eXBlIGxpbmUgYmVmb3JlIGRvaW5nIHRoZSBmb2xsb3dpbmcuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoaXMgc3RhZmYsIHRoZW4gd2UgbWlnaHQgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBzdGFmZiwgZmlyc3QuXG5cdFx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmLmxlbmd0aCA8PSB0aGlzLnN0YWZmTnVtKSB7XG5cdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXSA9IHt9O1xuXHRcdFx0XHR0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0uY2xlZiA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS5jbGVmKTtcblx0XHRcdFx0dGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dLmtleSA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS5rZXkpO1xuXHRcdFx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmWzBdLm1ldGVyKVxuXHRcdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS5tZXRlciA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS5tZXRlcik7XG5cdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS53b3JraW5nQ2xlZiA9IHBhcnNlQ29tbW9uLmNsb25lKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlswXS53b3JraW5nQ2xlZik7XG5cdFx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXMgPSBbW11dO1xuXHRcdFx0fVxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIGNsZWYgdHlwZSwgdGhlbiB3ZSByZXBsYWNlIHRoZSB3b3JraW5nIGNsZWYgb24gdGhlIGxpbmUuIFRoaXMgaXMga2VwdCBzZXBhcmF0ZSBmcm9tXG5cdFx0XHQvLyB0aGUgY2xlZiBpbiBjYXNlIHRoZXJlIGlzIGFuIGlubGluZSBjbGVmIGZpZWxkLiBXZSBuZWVkIHRvIGtub3cgd2hhdCB0aGUgY3VycmVudCBwb3NpdGlvbiBmb3Jcblx0XHRcdC8vIHRoZSBub3RlIGlzLlxuXHRcdFx0aWYgKHR5cGUgPT09ICdjbGVmJykge1xuXHRcdFx0XHR0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0ud29ya2luZ0NsZWYgPSBoYXNoUGFyYW1zO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGVzZSBlbGVtZW50cyBzaG91bGQgbm90IGJlIGFkZGVkIHR3aWNlLCBzbyBpZiB0aGUgZWxlbWVudCBleGlzdHMgb24gdGhpcyBsaW5lIHdpdGhvdXQgYSBub3RlIG9yIGJhciBiZWZvcmUgaXQsIGp1c3QgcmVwbGFjZSB0aGUgc3RhZmYgdmVyc2lvbi5cblx0XHRcdHZhciB2b2ljZSA9IHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV07XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh2b2ljZVtpXS5lbF90eXBlID09PSAnbm90ZScgfHwgdm9pY2VbaV0uZWxfdHlwZSA9PT0gJ2JhcicpIHtcblx0XHRcdFx0XHRoYXNoUGFyYW1zLmVsX3R5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdGhhc2hQYXJhbXMuc3RhcnRDaGFyID0gc3RhcnRDaGFyO1xuXHRcdFx0XHRcdGhhc2hQYXJhbXMuZW5kQ2hhciA9IGVuZENoYXI7XG5cdFx0XHRcdFx0aWYgKGltcGxpZWROYXR1cmFscylcblx0XHRcdFx0XHRcdGhhc2hQYXJhbXMuYWNjaWRlbnRhbHMgPSBpbXBsaWVkTmF0dXJhbHMuY29uY2F0KGhhc2hQYXJhbXMuYWNjaWRlbnRhbHMpO1xuXHRcdFx0XHRcdHZvaWNlLnB1c2goaGFzaFBhcmFtcyk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh2b2ljZVtpXS5lbF90eXBlID09PSB0eXBlKSB7XG5cdFx0XHRcdFx0aGFzaFBhcmFtcy5lbF90eXBlID0gdHlwZTtcblx0XHRcdFx0XHRoYXNoUGFyYW1zLnN0YXJ0Q2hhciA9IHN0YXJ0Q2hhcjtcblx0XHRcdFx0XHRoYXNoUGFyYW1zLmVuZENoYXIgPSBlbmRDaGFyO1xuXHRcdFx0XHRcdGlmIChpbXBsaWVkTmF0dXJhbHMpXG5cdFx0XHRcdFx0XHRoYXNoUGFyYW1zLmFjY2lkZW50YWxzID0gaW1wbGllZE5hdHVyYWxzLmNvbmNhdChoYXNoUGFyYW1zLmFjY2lkZW50YWxzKTtcblx0XHRcdFx0XHR2b2ljZVtpXSA9IGhhc2hQYXJhbXM7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBXZSBkaWRuJ3Qgc2VlIGVpdGhlciB0aGF0IHR5cGUgb3IgYSBub3RlLCBzbyByZXBsYWNlIHRoZSBlbGVtZW50IHRvIHRoZSBzdGFmZi5cblx0XHRcdHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXVt0eXBlXSA9IGhhc2hQYXJhbXMyO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmdldE51bUxpbmVzID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubGluZXMubGVuZ3RoO1xuXHR9O1xuXG5cdHRoaXMucHVzaExpbmUgPSBmdW5jdGlvbihoYXNoKSB7XG5cdFx0aWYgKHRoaXMudnNraXBQZW5kaW5nKSB7XG5cdFx0XHRoYXNoLnZza2lwID0gdGhpcy52c2tpcFBlbmRpbmc7XG5cdFx0XHRkZWxldGUgdGhpcy52c2tpcFBlbmRpbmc7XG5cdFx0fVxuXHRcdHRoaXMubGluZXMucHVzaChoYXNoKTtcblx0fTtcblxuXHR0aGlzLmFkZFN1YnRpdGxlID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dGhpcy5wdXNoTGluZSh7c3VidGl0bGU6IHN0cn0pO1xuXHR9O1xuXG5cdHRoaXMuYWRkU3BhY2luZyA9IGZ1bmN0aW9uKG51bSkge1xuXHRcdHRoaXMudnNraXBQZW5kaW5nID0gbnVtO1xuXHR9O1xuXG5cdHRoaXMuYWRkTmV3UGFnZSA9IGZ1bmN0aW9uKG51bSkge1xuXHRcdHRoaXMucHVzaExpbmUoe25ld3BhZ2U6IG51bX0pO1xuXHR9O1xuXG5cdHRoaXMuYWRkU2VwYXJhdG9yID0gZnVuY3Rpb24oc3BhY2VBYm92ZSwgc3BhY2VCZWxvdywgbGluZUxlbmd0aCkge1xuXHRcdHRoaXMucHVzaExpbmUoe3NlcGFyYXRvcjoge3NwYWNlQWJvdmU6IHNwYWNlQWJvdmUsIHNwYWNlQmVsb3c6IHNwYWNlQmVsb3csIGxpbmVMZW5ndGg6IGxpbmVMZW5ndGh9fSk7XG5cdH07XG5cblx0dGhpcy5hZGRUZXh0ID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0dGhpcy5wdXNoTGluZSh7dGV4dDogc3RyfSk7XG5cdH07XG5cblx0dGhpcy5hZGRDZW50ZXJlZCA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdHRoaXMucHVzaExpbmUoe3RleHQ6IFt7dGV4dDogc3RyLCBjZW50ZXI6IHRydWUgfV19KTtcblx0fTtcblxuXHR0aGlzLmNvbnRhaW5zTm90ZXMgPSBmdW5jdGlvbih2b2ljZSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdm9pY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh2b2ljZVtpXS5lbF90eXBlID09PSAnbm90ZScgfHwgdm9pY2VbaV0uZWxfdHlwZSA9PT0gJ2JhcicpXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG5cblx0dGhpcy5jb250YWluc05vdGVzU3RyaWN0ID0gZnVuY3Rpb24odm9pY2UpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodm9pY2VbaV0uZWxfdHlwZSA9PT0gJ25vdGUnICYmIHZvaWNlW2ldLnJlc3QgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuLy9cdGFueVZvaWNlQ29udGFpbnNOb3RlczogZnVuY3Rpb24obGluZSkge1xuLy9cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lLnN0YWZmLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuLy9cdFx0XHRpZiAodGhpcy5jb250YWluc05vdGVzKGxpbmUuc3RhZmYudm9pY2VzW2ldKSlcbi8vXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbi8vXHRcdH1cbi8vXHRcdHJldHVybiBmYWxzZTtcbi8vXHR9LFxuXHR0aGlzLmNoYW5nZVZvaWNlU2NhbGUgPSBmdW5jdGlvbihzY2FsZSkge1xuXHRcdHZhciBUaGlzID0gdGhpcztcblx0XHRUaGlzLmFwcGVuZEVsZW1lbnQoJ3NjYWxlJywgbnVsbCwgbnVsbCwgeyBzaXplOiBzY2FsZX0gKTtcblx0fTtcblxuXHR0aGlzLnN0YXJ0TmV3TGluZSA9IGZ1bmN0aW9uKHBhcmFtcykge1xuXHRcdC8vIElmIHRoZSBwb2ludGVkIHRvIGxpbmUgZG9lc24ndCBleGlzdCwganVzdCBjcmVhdGUgdGhhdC4gSWYgdGhlIGxpbmUgZG9lcyBleGlzdCwgYnV0IGRvZXNuJ3QgaGF2ZSBhbnkgbXVzaWMgb24gaXQsIGp1c3QgdXNlIGl0LlxuXHRcdC8vIElmIGl0IGRvZXMgZXhpc3QgYW5kIGhhcyBtdXNpYywgdGhlbiBpbmNyZW1lbnQgdGhlIGxpbmUgbnVtYmVyLiBJZiB0aGUgbmV3IGVsZW1lbnQgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0LlxuXHRcdHZhciBUaGlzID0gdGhpcztcblx0XHR0aGlzLmNsb3NlTGluZSgpO1x0Ly8gQ2xvc2UgdGhlIHByZXZpb3VzIGxpbmUuXG5cdFx0dmFyIGNyZWF0ZVZvaWNlID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdFx0XHR2YXIgdGhpc1N0YWZmID0gVGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dO1xuXHRcdFx0dGhpc1N0YWZmLnZvaWNlc1tUaGlzLnZvaWNlTnVtXSA9IFtdO1xuXHRcdFx0aWYgKCF0aGlzU3RhZmYudGl0bGUpXG5cdFx0XHRcdHRoaXNTdGFmZi50aXRsZSA9IFtdO1xuXHRcdFx0dGhpc1N0YWZmLnRpdGxlW1RoaXMudm9pY2VOdW1dID0geyBuYW1lOiBwYXJhbXMubmFtZSwgc3VibmFtZTogcGFyYW1zLnN1Ym5hbWUgfTtcblx0XHRcdGlmIChwYXJhbXMuc3R5bGUpXG5cdFx0XHRcdFRoaXMuYXBwZW5kRWxlbWVudCgnc3R5bGUnLCBudWxsLCBudWxsLCB7aGVhZDogcGFyYW1zLnN0eWxlfSk7XG5cdFx0XHRpZiAocGFyYW1zLnN0ZW0pXG5cdFx0XHRcdFRoaXMuYXBwZW5kRWxlbWVudCgnc3RlbScsIG51bGwsIG51bGwsIHtkaXJlY3Rpb246IHBhcmFtcy5zdGVtfSk7XG5cdFx0XHRlbHNlIGlmIChUaGlzLnZvaWNlTnVtID4gMCkge1xuXHRcdFx0XHRpZiAodGhpc1N0YWZmLnZvaWNlc1swXSE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXNTdGFmZi52b2ljZXNbMF0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzU3RhZmYudm9pY2VzWzBdLmVsX3R5cGUgPT09ICdzdGVtJylcblx0XHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIWZvdW5kKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3RlbSA9IHsgZWxfdHlwZTogJ3N0ZW0nLCBkaXJlY3Rpb246ICd1cCcgfTtcblx0XHRcdFx0XHRcdHRoaXNTdGFmZi52b2ljZXNbMF0uc3BsaWNlKDAsMCxzdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0VGhpcy5hcHBlbmRFbGVtZW50KCdzdGVtJywgbnVsbCwgbnVsbCwge2RpcmVjdGlvbjogJ2Rvd24nfSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGFyYW1zLnNjYWxlKVxuXHRcdFx0XHRUaGlzLmFwcGVuZEVsZW1lbnQoJ3NjYWxlJywgbnVsbCwgbnVsbCwgeyBzaXplOiBwYXJhbXMuc2NhbGV9ICk7XG5cdFx0fTtcblx0XHR2YXIgY3JlYXRlU3RhZmYgPSBmdW5jdGlvbihwYXJhbXMpIHtcblx0XHRcdGlmIChwYXJhbXMua2V5ICYmIHBhcmFtcy5rZXkuaW1wbGllZE5hdHVyYWxzKSB7XG5cdFx0XHRcdHBhcmFtcy5rZXkuYWNjaWRlbnRhbHMgPSBwYXJhbXMua2V5LmFjY2lkZW50YWxzLmNvbmNhdChwYXJhbXMua2V5LmltcGxpZWROYXR1cmFscyk7XG5cdFx0XHRcdGRlbGV0ZSBwYXJhbXMua2V5LmltcGxpZWROYXR1cmFscztcblx0XHRcdH1cblxuXHRcdFx0VGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dID0ge3ZvaWNlczogWyBdLCBjbGVmOiBwYXJhbXMuY2xlZiwga2V5OiBwYXJhbXMua2V5LCB3b3JraW5nQ2xlZjogcGFyYW1zLmNsZWYgfTtcblx0XHRcdGlmIChwYXJhbXMuc3RhZmZsaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5jbGVmLnN0YWZmbGluZXMgPSBwYXJhbXMuc3RhZmZsaW5lcztcblx0XHRcdFx0VGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dLndvcmtpbmdDbGVmLnN0YWZmbGluZXMgPSBwYXJhbXMuc3RhZmZsaW5lcztcblx0XHRcdH1cblx0XHRcdGlmIChwYXJhbXMuc3RhZmZzY2FsZSkge1xuXHRcdFx0XHRUaGlzLmxpbmVzW1RoaXMubGluZU51bV0uc3RhZmZbVGhpcy5zdGFmZk51bV0uc3RhZmZzY2FsZSA9IHBhcmFtcy5zdGFmZnNjYWxlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHBhcmFtcy50cmlwbGV0Zm9udCkgVGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dLnRyaXBsZXRmb250ID0gcGFyYW1zLnRyaXBsZXRmb250O1xuXHRcdFx0aWYgKHBhcmFtcy52b2NhbGZvbnQpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS52b2NhbGZvbnQgPSBwYXJhbXMudm9jYWxmb250O1xuXHRcdFx0aWYgKHBhcmFtcy5icmFja2V0KSBUaGlzLmxpbmVzW1RoaXMubGluZU51bV0uc3RhZmZbVGhpcy5zdGFmZk51bV0uYnJhY2tldCA9IHBhcmFtcy5icmFja2V0O1xuXHRcdFx0aWYgKHBhcmFtcy5icmFjZSkgVGhpcy5saW5lc1tUaGlzLmxpbmVOdW1dLnN0YWZmW1RoaXMuc3RhZmZOdW1dLmJyYWNlID0gcGFyYW1zLmJyYWNlO1xuXHRcdFx0aWYgKHBhcmFtcy5jb25uZWN0QmFyTGluZXMpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5jb25uZWN0QmFyTGluZXMgPSBwYXJhbXMuY29ubmVjdEJhckxpbmVzO1xuXHRcdFx0aWYgKHBhcmFtcy5iYXJOdW1iZXIpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5iYXJOdW1iZXIgPSBwYXJhbXMuYmFyTnVtYmVyO1xuXHRcdFx0Y3JlYXRlVm9pY2UocGFyYW1zKTtcblx0XHRcdC8vIFNvbWUgc3R1ZmYganVzdCBoYXBwZW5zIGZvciB0aGUgZmlyc3Qgdm9pY2Vcblx0XHRcdGlmIChwYXJhbXMucGFydClcblx0XHRcdFx0VGhpcy5hcHBlbmRFbGVtZW50KCdwYXJ0JywgcGFyYW1zLnBhcnQuc3RhcnRDaGFyLCBwYXJhbXMucGFydC5lbmRDaGFyLCB7dGl0bGU6IHBhcmFtcy5wYXJ0LnRpdGxlfSk7XG5cdFx0XHRpZiAocGFyYW1zLm1ldGVyICE9PSB1bmRlZmluZWQpIFRoaXMubGluZXNbVGhpcy5saW5lTnVtXS5zdGFmZltUaGlzLnN0YWZmTnVtXS5tZXRlciA9IHBhcmFtcy5tZXRlcjtcblx0XHR9O1xuXHRcdHZhciBjcmVhdGVMaW5lID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdFx0XHRUaGlzLmxpbmVzW1RoaXMubGluZU51bV0gPSB7c3RhZmY6IFtdfTtcblx0XHRcdGNyZWF0ZVN0YWZmKHBhcmFtcyk7XG5cdFx0fTtcblx0XHRpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dID09PSB1bmRlZmluZWQpIGNyZWF0ZUxpbmUocGFyYW1zKTtcblx0XHRlbHNlIGlmICh0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmYgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5saW5lTnVtKys7XG5cdFx0XHR0aGlzLnN0YXJ0TmV3TGluZShwYXJhbXMpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dID09PSB1bmRlZmluZWQpIGNyZWF0ZVN0YWZmKHBhcmFtcyk7XG5cdFx0ZWxzZSBpZiAodGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dLnZvaWNlc1t0aGlzLnZvaWNlTnVtXSA9PT0gdW5kZWZpbmVkKSBjcmVhdGVWb2ljZShwYXJhbXMpO1xuXHRcdGVsc2UgaWYgKCF0aGlzLmNvbnRhaW5zTm90ZXModGhpcy5saW5lc1t0aGlzLmxpbmVOdW1dLnN0YWZmW3RoaXMuc3RhZmZOdW1dLnZvaWNlc1t0aGlzLnZvaWNlTnVtXSkpIHJldHVybjtcblx0XHRlbHNlIHtcblx0XHRcdHRoaXMubGluZU51bSsrO1xuXHRcdFx0dGhpcy5zdGFydE5ld0xpbmUocGFyYW1zKTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5zZXRCYXJOdW1iZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihiYXJOdW1iZXIpIHtcblx0XHQvLyBJZiB0aGlzIGlzIGNhbGxlZCByaWdodCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgdGhlbiBjb3JyZWN0IHRoZSBtZWFzdXJlIG51bWJlciB0aGF0IGlzIGFscmVhZHkgd3JpdHRlbi5cblx0XHQvLyBJZiB0aGlzIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbWVhc3VyZSwgdGhlbiBjb3JyZWN0IHRoZSBtZWFzdXJlIG51bWJlciB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuXG5cdFx0Ly8gSWYgdGhpcyBpcyBjYWxsZWQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lYXN1cmUsIHRoZW4gc3VidHJhY3Qgb25lIGZyb20gaXQsIGJlY2F1c2UgaXQgd2lsbCBiZSBpbmNyZW1lbnRlZCBiZWZvcmUgYXBwbGllZC5cblx0XHR2YXIgY3VycmVudFZvaWNlID0gdGhpcy5nZXRDdXJyZW50Vm9pY2UoKTtcblx0XHRpZiAoY3VycmVudFZvaWNlICYmIGN1cnJlbnRWb2ljZS5sZW5ndGggPiAwKSB7XG5cdFx0XHR2YXIgbGFzdEVsZW1lbnQgPSBjdXJyZW50Vm9pY2VbY3VycmVudFZvaWNlLmxlbmd0aC0xXTtcblx0XHRcdGlmIChsYXN0RWxlbWVudC5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRpZiAobGFzdEVsZW1lbnQuYmFyTnVtYmVyICE9PSB1bmRlZmluZWQpIC8vIHRoZSBtZWFzdXJlIG51bWJlciBtaWdodCBub3QgYmUgd3JpdHRlbiBmb3IgdGhpcyBiYXIsIGRvbid0IG92ZXJyaWRlIHRoYXQuXG5cdFx0XHRcdFx0bGFzdEVsZW1lbnQuYmFyTnVtYmVyID0gYmFyTnVtYmVyO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJldHVybiBiYXJOdW1iZXItMTtcblx0XHR9XG5cdFx0cmV0dXJuIGJhck51bWJlcjtcblx0fTtcblxuXHR0aGlzLmhhc0JlZ2luTXVzaWMgPSBmdW5jdGlvbigpIHtcblx0XHQvLyByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBleGlzdHMgYXQgbGVhc3Qgb25lIGxpbmUgdGhhdCBjb250YWlucyBcInN0YWZmXCJcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLmxpbmVzW2ldLnN0YWZmKVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdHRoaXMuaXNGaXJzdExpbmUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRcdGZvciAodmFyIGkgPSBpbmRleC0xOyBpID49IDA7IGktLSkge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHR0aGlzLmdldE1ldGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbGluZSA9IHRoaXMubGluZXNbaV07XG5cdFx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGxpbmUuc3RhZmYubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHR2YXIgbWV0ZXIgPSBsaW5lLnN0YWZmW2pdLm1ldGVyO1xuXHRcdFx0XHRcdGlmIChtZXRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1ldGVyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyB0eXBlOiBcImNvbW1vbl90aW1lXCIgfTtcblx0fTtcblxuXHR0aGlzLmdldE1ldGVyRnJhY3Rpb24gPSBmdW5jdGlvbigpIHtcblx0XHR2YXIgbWV0ZXIgPSB0aGlzLmdldE1ldGVyKCk7XG5cdFx0dmFyIG51bSA9IDQ7XG5cdFx0dmFyIGRlbiA9IDQ7XG5cdFx0aWYgKG1ldGVyKSB7XG5cdFx0XHRpZiAobWV0ZXIudHlwZSA9PT0gJ3NwZWNpZmllZCcpIHtcblx0XHRcdFx0bnVtID0gcGFyc2VJbnQobWV0ZXIudmFsdWVbMF0ubnVtLCAxMCk7XG5cdFx0XHRcdGRlbiA9IHBhcnNlSW50KG1ldGVyLnZhbHVlWzBdLmRlbiwxMCk7XG5cdFx0XHR9IGVsc2UgaWYgKG1ldGVyLnR5cGUgPT09ICdjdXRfdGltZScpIHtcblx0XHRcdFx0bnVtID0gMjtcblx0XHRcdFx0ZGVuID0gMjtcblx0XHRcdH0gZWxzZSBpZiAobWV0ZXIudHlwZSA9PT0gJ2NvbW1vbl90aW1lJykge1xuXHRcdFx0XHRudW0gPSA0O1xuXHRcdFx0XHRkZW4gPSA0O1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLm1ldGVyID0geyBudW06IG51bSwgZGVuOiBkZW4gfTtcblx0XHRyZXR1cm4gdGhpcy5tZXRlcjsgLy8gVE9ETy1QRVI6IGlzIHRoaXMgc2F2ZWQgdmFsdWUgdXNlZCBhbnl3aGVyZT8gQSBnZXQgZnVuY3Rpb24gc2hvdWxkbid0IGNoYW5nZSBzdGF0ZS5cblx0fTtcblxuXHR0aGlzLmdldEtleVNpZ25hdHVyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGxpbmUgPSB0aGlzLmxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBsaW5lLnN0YWZmLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0aWYgKGxpbmUuc3RhZmZbal0ua2V5KVxuXHRcdFx0XHRcdFx0cmV0dXJuIGxpbmUuc3RhZmZbal0ua2V5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7ICB9O1xuXHR9O1xuXG5cdHRoaXMuZ2V0Q3VycmVudFZvaWNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMubGluZXNbdGhpcy5saW5lTnVtXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXSAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGluZXNbdGhpcy5saW5lTnVtXS5zdGFmZlt0aGlzLnN0YWZmTnVtXS52b2ljZXNbdGhpcy52b2ljZU51bV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiB0aGlzLmxpbmVzW3RoaXMubGluZU51bV0uc3RhZmZbdGhpcy5zdGFmZk51bV0udm9pY2VzW3RoaXMudm9pY2VOdW1dO1xuXHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdH07XG5cblx0dGhpcy5zZXRDdXJyZW50Vm9pY2UgPSBmdW5jdGlvbihzdGFmZk51bSwgdm9pY2VOdW0pIHtcblx0XHR0aGlzLnN0YWZmTnVtID0gc3RhZmZOdW07XG5cdFx0dGhpcy52b2ljZU51bSA9IHZvaWNlTnVtO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmYpIHtcblx0XHRcdFx0aWYgKHRoaXMubGluZXNbaV0uc3RhZmZbc3RhZmZOdW1dID09PSB1bmRlZmluZWQgfHwgdGhpcy5saW5lc1tpXS5zdGFmZltzdGFmZk51bV0udm9pY2VzW3ZvaWNlTnVtXSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0IXRoaXMuY29udGFpbnNOb3Rlcyh0aGlzLmxpbmVzW2ldLnN0YWZmW3N0YWZmTnVtXS52b2ljZXNbdm9pY2VOdW1dICkpIHtcblx0XHRcdFx0XHR0aGlzLmxpbmVOdW0gPSAgaTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5saW5lTnVtID0gIGk7XG5cdH07XG5cblx0dGhpcy5hZGRNZXRhVGV4dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRpZiAodGhpcy5tZXRhVGV4dFtrZXldID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLm1ldGFUZXh0W2tleV0gPSB2YWx1ZTtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLm1ldGFUZXh0W2tleV0gKz0gXCJcXG5cIiArIHZhbHVlO1xuXHR9O1xuXG5cdHRoaXMuYWRkTWV0YVRleHRBcnJheSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHRpZiAodGhpcy5tZXRhVGV4dFtrZXldID09PSB1bmRlZmluZWQpXG5cdFx0XHR0aGlzLm1ldGFUZXh0W2tleV0gPSBbdmFsdWVdO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMubWV0YVRleHRba2V5XS5wdXNoKHZhbHVlKTtcblx0fTtcblx0dGhpcy5hZGRNZXRhVGV4dE9iaiA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcblx0XHR0aGlzLm1ldGFUZXh0W2tleV0gPSB2YWx1ZTtcblx0fTtcblxuXHRmdW5jdGlvbiBhZGRWZXJ0aWNhbEluZm8odGltaW5nRXZlbnRzKSB7XG5cdFx0Ly8gQWRkIHZlcnRpY2FsIGluZm8gdG8gdGhlIGJhciBldmVudHM6IHB1dCB0aGUgbmV4dCBldmVudCdzIHRvcCwgYW5kIHRoZSBldmVudCBhZnRlciB0aGUgbmV4dCBtZWFzdXJlJ3MgdG9wLlxuXHRcdHZhciBsYXN0QmFyVG9wO1xuXHRcdHZhciBsYXN0QmFyQm90dG9tO1xuXHRcdHZhciBsYXN0RXZlbnRUb3A7XG5cdFx0dmFyIGxhc3RFdmVudEJvdHRvbTtcblx0XHRmb3IgKHZhciBlID0gdGltaW5nRXZlbnRzLmxlbmd0aCAtIDE7IGUgPj0gMDsgZS0tKSB7XG5cdFx0XHR2YXIgZXYgPSB0aW1pbmdFdmVudHNbZV07XG5cdFx0XHRpZiAoZXYudHlwZSA9PT0gJ2JhcicpIHtcblx0XHRcdFx0ZXYudG9wID0gbGFzdEV2ZW50VG9wO1xuXHRcdFx0XHRldi5uZXh0VG9wID0gbGFzdEJhclRvcDtcblx0XHRcdFx0bGFzdEJhclRvcCA9IGxhc3RFdmVudFRvcDtcblxuXHRcdFx0XHRldi5ib3R0b20gPSBsYXN0RXZlbnRCb3R0b207XG5cdFx0XHRcdGV2Lm5leHRCb3R0b20gPSBsYXN0QmFyQm90dG9tO1xuXHRcdFx0XHRsYXN0QmFyQm90dG9tID0gbGFzdEV2ZW50Qm90dG9tO1xuXHRcdFx0fSBlbHNlIGlmIChldi50eXBlID09PSAnZXZlbnQnKSB7XG5cdFx0XHRcdGxhc3RFdmVudFRvcCA9IGV2LnRvcDtcblx0XHRcdFx0bGFzdEV2ZW50Qm90dG9tID0gZXYudG9wICsgZXYuaGVpZ2h0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIG1ha2VTb3J0ZWRBcnJheShoYXNoKSB7XG5cdFx0dmFyIGFyciA9IFtdO1xuXHRcdGZvciAodmFyIGsgaW4gaGFzaCkge1xuXHRcdFx0aWYgKGhhc2guaGFzT3duUHJvcGVydHkoaykpXG5cdFx0XHRcdGFyci5wdXNoKGhhc2hba10pO1xuXHRcdH1cblx0XHRhcnIgPSBhcnIuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0dmFyIGRpZmYgPSBhLm1pbGxpc2Vjb25kcyAtIGIubWlsbGlzZWNvbmRzO1xuXHRcdFx0Ly8gaWYgdGhlIGV2ZW50cyBoYXZlIHRoZSBzYW1lIHRpbWUsIG1ha2Ugc3VyZSBhIGJhciBjb21lcyBiZWZvcmUgYSBub3RlXG5cdFx0XHRpZiAoZGlmZiAhPT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gZGlmZjtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYS50eXBlID09PSBcImJhclwiID8gLTEgOiAxO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHR0aGlzLmFkZEVsZW1lbnRUb0V2ZW50cyA9IGZ1bmN0aW9uKGV2ZW50SGFzaCwgZWxlbWVudCwgdm9pY2VUaW1lTWlsbGlzZWNvbmRzLCB0b3AsIGhlaWdodCwgbGluZSwgbWVhc3VyZU51bWJlciwgdGltZURpdmlkZXIsIGlzVGllZFN0YXRlLCBuZXh0SXNCYXIpIHtcblx0XHRpZiAoZWxlbWVudC5oaW50KVxuXHRcdFx0cmV0dXJuIHsgaXNUaWVkU3RhdGU6IHVuZGVmaW5lZCwgZHVyYXRpb246IDAgfTtcblx0XHR2YXIgcmVhbER1cmF0aW9uID0gZWxlbWVudC5kdXJhdGlvbkNsYXNzID8gZWxlbWVudC5kdXJhdGlvbkNsYXNzIDogZWxlbWVudC5kdXJhdGlvbjtcblx0XHRpZiAoZWxlbWVudC5hYmNlbGVtLnJlc3QgJiYgZWxlbWVudC5hYmNlbGVtLnJlc3QudHlwZSA9PT0gXCJzcGFjZXJcIilcblx0XHRcdHJlYWxEdXJhdGlvbiA9IDA7XG5cdFx0aWYgKHJlYWxEdXJhdGlvbiA+IDApIHtcblx0XHRcdHZhciBlcyA9IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gaW52aXNpYmxlIHJlc3QsIHRoZW4gdGhlcmUgYXJlIG5vdCBlbGVtZW50cywgc28gZG9uJ3QgcHVzaCBhIG51bGwgb25lLlxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmVsZW1zZXQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGVsZW1lbnQuZWxlbXNldFtpXSAhPT0gbnVsbClcblx0XHRcdFx0XHRlcy5wdXNoKGVsZW1lbnQuZWxlbXNldFtpXSk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgaXNUaWVkVG9OZXh0ID0gZWxlbWVudC5zdGFydFRpZTtcblx0XHRcdGlmIChpc1RpZWRTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyBpc1RpZWRTdGF0ZV0uZWxlbWVudHMucHVzaChlcyk7IC8vIEFkZCB0aGUgdGllZCBub3RlIHRvIHRoZSBmaXJzdCBub3RlIHRoYXQgaXQgaXMgdGllZCB0b1xuXHRcdFx0XHRpZiAobmV4dElzQmFyKSB7XG5cdFx0XHRcdFx0aWYgKCFldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXSkge1xuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10gPSB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZXZlbnRcIixcblx0XHRcdFx0XHRcdFx0bWlsbGlzZWNvbmRzOiB2b2ljZVRpbWVNaWxsaXNlY29uZHMsXG5cdFx0XHRcdFx0XHRcdGxpbmU6IGxpbmUsXG5cdFx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXI6IG1lYXN1cmVOdW1iZXIsXG5cdFx0XHRcdFx0XHRcdHRvcDogdG9wLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdFx0XHRcdFx0bGVmdDogbnVsbCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IDAsXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRzOiBbXSxcblx0XHRcdFx0XHRcdFx0c3RhcnRDaGFyOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRlbmRDaGFyOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRzdGFydENoYXJBcnJheTogW10sXG5cdFx0XHRcdFx0XHRcdGVuZENoYXJBcnJheTogW11cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1lYXN1cmVTdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0bmV4dElzQmFyID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFpc1RpZWRUb05leHQpXG5cdFx0XHRcdFx0aXNUaWVkU3RhdGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyB0aGUgbGFzdCBub3RlIHdhc24ndCB0aWVkLlxuXHRcdFx0XHRpZiAoIWV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdKSB7XG5cdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10gPSB7XG5cdFx0XHRcdFx0XHR0eXBlOiBcImV2ZW50XCIsXG5cdFx0XHRcdFx0XHRtaWxsaXNlY29uZHM6IHZvaWNlVGltZU1pbGxpc2Vjb25kcyxcblx0XHRcdFx0XHRcdGxpbmU6IGxpbmUsXG5cdFx0XHRcdFx0XHRtZWFzdXJlTnVtYmVyOiBtZWFzdXJlTnVtYmVyLFxuXHRcdFx0XHRcdFx0dG9wOiB0b3AsXG5cdFx0XHRcdFx0XHRoZWlnaHQ6IGhlaWdodCxcblx0XHRcdFx0XHRcdGxlZnQ6IGVsZW1lbnQueCxcblx0XHRcdFx0XHRcdHdpZHRoOiBlbGVtZW50LncsXG5cdFx0XHRcdFx0XHRlbGVtZW50czogW2VzXSxcblx0XHRcdFx0XHRcdHN0YXJ0Q2hhcjogZWxlbWVudC5hYmNlbGVtLnN0YXJ0Q2hhcixcblx0XHRcdFx0XHRcdGVuZENoYXI6IGVsZW1lbnQuYWJjZWxlbS5lbmRDaGFyLFxuXHRcdFx0XHRcdFx0c3RhcnRDaGFyQXJyYXk6IFtlbGVtZW50LmFiY2VsZW0uc3RhcnRDaGFyXSxcblx0XHRcdFx0XHRcdGVuZENoYXJBcnJheTogW2VsZW1lbnQuYWJjZWxlbS5lbmRDaGFyXSxcblx0XHRcdFx0XHRcdG1pZGlQaXRjaGVzOiBlbGVtZW50LmFiY2VsZW0ubWlkaVBpdGNoZXMgPyBwYXJzZUNvbW1vbi5jbG9uZUFycmF5KGVsZW1lbnQuYWJjZWxlbS5taWRpUGl0Y2hlcykgOiBbXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5taWRpR3JhY2VOb3RlUGl0Y2hlcylcblx0XHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlHcmFjZU5vdGVQaXRjaGVzID0gcGFyc2VDb21tb24uY2xvbmVBcnJheShlbGVtZW50LmFiY2VsZW0ubWlkaUdyYWNlTm90ZVBpdGNoZXMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdm9pY2UgdGhlbiB0d28gbm90ZXMgY2FuIGZhbGwgYXQgdGhlIHNhbWUgdGltZS4gVXN1YWxseSB0aGV5IHdvdWxkIGJlIGxpbmVkIHVwIGluIHRoZSBzYW1lIHBsYWNlLCBidXQgaWYgaXQgaXMgYSB3aG9sZSByZXN0LCB0aGVuIGl0IGlzIHBsYWNlZCBmdW5ueS4gSW4gYW55IGNhc2UsIHRoZSBsZWZ0IG1vc3QgZWxlbWVudCB3aW5zLlxuXHRcdFx0XHRcdGlmIChldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5sZWZ0KVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10ubGVmdCA9IE1hdGgubWluKGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLmxlZnQsIGVsZW1lbnQueCk7XG5cdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10ubGVmdCA9IGVsZW1lbnQueDtcblx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5lbGVtZW50cy5wdXNoKGVzKTtcblx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5zdGFydENoYXJBcnJheS5wdXNoKGVsZW1lbnQuYWJjZWxlbS5zdGFydENoYXIpO1xuXHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLmVuZENoYXJBcnJheS5wdXNoKGVsZW1lbnQuYWJjZWxlbS5lbmRDaGFyKTtcblx0XHRcdFx0XHRpZiAoZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10uc3RhcnRDaGFyID09PSBudWxsKVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10uc3RhcnRDaGFyID1lbGVtZW50LmFiY2VsZW0uc3RhcnRDaGFyO1xuXHRcdFx0XHRcdGlmIChldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5lbmRDaGFyID09PSBudWxsKVxuXHRcdFx0XHRcdFx0ZXZlbnRIYXNoW1wiZXZlbnRcIiArIHZvaWNlVGltZU1pbGxpc2Vjb25kc10uZW5kQ2hhciA9ZWxlbWVudC5hYmNlbGVtLmVuZENoYXI7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5taWRpUGl0Y2hlcyAmJiBlbGVtZW50LmFiY2VsZW0ubWlkaVBpdGNoZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlQaXRjaGVzKVxuXHRcdFx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5taWRpUGl0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmFiY2VsZW0ubWlkaVBpdGNoZXMubGVuZ3RoOyBpKyspXG5cdFx0XHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlQaXRjaGVzLnB1c2goZWxlbWVudC5hYmNlbGVtLm1pZGlQaXRjaGVzW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5taWRpR3JhY2VOb3RlUGl0Y2hlcyAmJiBlbGVtZW50LmFiY2VsZW0ubWlkaUdyYWNlTm90ZVBpdGNoZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlHcmFjZU5vdGVQaXRjaGVzKVxuXHRcdFx0XHRcdFx0XHRldmVudEhhc2hbXCJldmVudFwiICsgdm9pY2VUaW1lTWlsbGlzZWNvbmRzXS5taWRpR3JhY2VOb3RlUGl0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBlbGVtZW50LmFiY2VsZW0ubWlkaUdyYWNlTm90ZVBpdGNoZXMubGVuZ3RoOyBqKyspXG5cdFx0XHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1pZGlHcmFjZU5vdGVQaXRjaGVzLnB1c2goZWxlbWVudC5hYmNlbGVtLm1pZGlHcmFjZU5vdGVQaXRjaGVzW2pdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG5leHRJc0Jhcikge1xuXHRcdFx0XHRcdGV2ZW50SGFzaFtcImV2ZW50XCIgKyB2b2ljZVRpbWVNaWxsaXNlY29uZHNdLm1lYXN1cmVTdGFydCA9IHRydWU7XG5cdFx0XHRcdFx0bmV4dElzQmFyID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGlzVGllZFRvTmV4dClcblx0XHRcdFx0XHRpc1RpZWRTdGF0ZSA9IHZvaWNlVGltZU1pbGxpc2Vjb25kcztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgaXNUaWVkU3RhdGU6IGlzVGllZFN0YXRlLCBkdXJhdGlvbjogcmVhbER1cmF0aW9uIC8gdGltZURpdmlkZXIsIG5leHRJc0JhcjogbmV4dElzQmFyIHx8IGVsZW1lbnQudHlwZSA9PT0gJ2JhcicgfTtcblx0fTtcblxuXHR0aGlzLm1ha2VWb2ljZXNBcnJheSA9IGZ1bmN0aW9uKCkge1xuXHRcdC8vIEZpcnN0IG1ha2UgYSBuZXcgYXJyYXkgdGhhdCBpcyBhcnJhbmdlZCBieSB2b2ljZSBzbyB0aGF0IHRoZSByZXBlYXRzIHRoYXQgc3BhbiBkaWZmZXJlbnQgbGluZXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlxuXHRcdHZhciB2b2ljZXNBcnIgPSBbXTtcblx0XHRmb3IgKHZhciBsaW5lID0gMDsgbGluZSA8IHRoaXMuZW5ncmF2ZXIuc3RhZmZncm91cHMubGVuZ3RoOyBsaW5lKyspIHtcblx0XHRcdHZhciBncm91cCA9IHRoaXMuZW5ncmF2ZXIuc3RhZmZncm91cHNbbGluZV07XG5cdFx0XHR2YXIgZmlyc3RTdGFmZiA9IGdyb3VwLnN0YWZmc1swXTtcblx0XHRcdHZhciBtaWRkbGVDID0gZmlyc3RTdGFmZi5hYnNvbHV0ZVk7XG5cdFx0XHR2YXIgdG9wID0gbWlkZGxlQyAtIGZpcnN0U3RhZmYudG9wICogc3BhY2luZy5TVEVQO1xuXHRcdFx0dmFyIGxhc3RTdGFmZiA9IGdyb3VwLnN0YWZmc1tncm91cC5zdGFmZnMubGVuZ3RoIC0gMV07XG5cdFx0XHRtaWRkbGVDID0gbGFzdFN0YWZmLmFic29sdXRlWTtcblx0XHRcdHZhciBib3R0b20gPSBtaWRkbGVDIC0gbGFzdFN0YWZmLmJvdHRvbSAqIHNwYWNpbmcuU1RFUDtcblx0XHRcdHZhciBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cblx0XHRcdHZhciB2b2ljZXMgPSBncm91cC52b2ljZXM7XG5cdFx0XHRmb3IgKHZhciB2ID0gMDsgdiA8IHZvaWNlcy5sZW5ndGg7IHYrKykge1xuXHRcdFx0XHR2YXIgbWVhc3VyZU51bWJlciA9IDA7XG5cdFx0XHRcdHZhciBub3RlRm91bmQgPSBmYWxzZTtcblx0XHRcdFx0aWYgKCF2b2ljZXNBcnJbdl0pXG5cdFx0XHRcdFx0dm9pY2VzQXJyW3ZdID0gW107XG5cdFx0XHRcdHZhciBlbGVtZW50cyA9IHZvaWNlc1t2XS5jaGlsZHJlbjtcblx0XHRcdFx0Zm9yICh2YXIgZWxlbSA9IDA7IGVsZW0gPCBlbGVtZW50cy5sZW5ndGg7IGVsZW0rKykge1xuXHRcdFx0XHRcdHZvaWNlc0Fyclt2XS5wdXNoKHt0b3A6IHRvcCwgaGVpZ2h0OiBoZWlnaHQsIGxpbmU6IGxpbmUsIG1lYXN1cmVOdW1iZXI6IG1lYXN1cmVOdW1iZXIsIGVsZW06IGVsZW1lbnRzW2VsZW1dfSk7XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnRzW2VsZW1dLnR5cGUgPT09ICdiYXInICYmIG5vdGVGb3VuZCkgLy8gQ291bnQgdGhlIG1lYXN1cmVzIGJ5IGNvdW50aW5nIHRoZSBiYXIgbGluZXMsIGJ1dCBza2lwIGEgYmFyIGxpbmUgdGhhdCBhcHBlYXJzIGF0IHRoZSBsZWZ0IG9mIHRoZSBtdXNpYywgYmVmb3JlIGFueSBub3Rlcy5cblx0XHRcdFx0XHRcdG1lYXN1cmVOdW1iZXIrKztcblx0XHRcdFx0XHRpZiAoZWxlbWVudHNbZWxlbV0udHlwZSA9PT0gJ25vdGUnIHx8IGVsZW1lbnRzW2VsZW1dLnR5cGUgPT09ICdyZXN0Jylcblx0XHRcdFx0XHRcdG5vdGVGb3VuZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZvaWNlc0Fycjtcblx0fTtcblxuXHR0aGlzLnNldHVwRXZlbnRzID0gZnVuY3Rpb24oc3RhcnRpbmdEZWxheSwgdGltZURpdmlkZXIsIGJwbSkge1xuXHRcdHZhciB0aW1pbmdFdmVudHMgPSBbXTtcblxuXHRcdHZhciBldmVudEhhc2ggPSB7fTtcblx0XHQvLyBUaGUgdGltZSBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwaWVjZS5cblx0XHQvLyBUaGUgdW5pdHMgd2UgYXJlIHNjYW5uaW5nIGFyZSBpbiBub3RhdGlvbiB1bml0cyAoaS5lLiAwLjI1IGlzIGEgcXVhcnRlciBub3RlKVxuXHRcdHZhciB0aW1lID0gc3RhcnRpbmdEZWxheTtcblx0XHR2YXIgaXNUaWVkU3RhdGU7XG5cdFx0dmFyIG5leHRJc0JhciA9IHRydWU7XG5cdFx0dmFyIHZvaWNlcyA9IHRoaXMubWFrZVZvaWNlc0FycmF5KCk7XG5cdFx0Zm9yICh2YXIgdiA9IDA7IHYgPCB2b2ljZXMubGVuZ3RoOyB2KyspIHtcblx0XHRcdHZhciB2b2ljZVRpbWUgPSB0aW1lO1xuXHRcdFx0dmFyIHZvaWNlVGltZU1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodm9pY2VUaW1lICogMTAwMCk7XG5cdFx0XHR2YXIgc3RhcnRpbmdSZXBlYXRFbGVtID0gMDtcblx0XHRcdHZhciBlbmRpbmdSZXBlYXRFbGVtID0gLTE7XG5cdFx0XHR2YXIgZWxlbWVudHMgPSB2b2ljZXNbdl07XG5cdFx0XHRmb3IgKHZhciBlbGVtID0gMDsgZWxlbSA8IGVsZW1lbnRzLmxlbmd0aDsgZWxlbSsrKSB7XG5cdFx0XHRcdHZhciBlbGVtZW50ID0gZWxlbWVudHNbZWxlbV0uZWxlbTtcblx0XHRcdFx0aWYgKGVsZW1lbnQuYWJjZWxlbS5lbF90eXBlID09PSBcInRlbXBvXCIpIHtcblx0XHRcdFx0XHR2YXIgYnBtID0gdGhpcy5nZXRCcG0oZWxlbWVudC5hYmNlbGVtKTtcblx0XHRcdFx0XHR2YXIgYmVhdExlbmd0aCA9IHRoaXMuZ2V0QmVhdExlbmd0aCgpO1xuXHRcdFx0XHRcdHZhciBiZWF0c1BlclNlY29uZCA9IGJwbSAvIDYwO1xuXHRcdFx0XHRcdHRpbWVEaXZpZGVyID0gYmVhdExlbmd0aCAqIGJlYXRzUGVyU2Vjb25kO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciByZXQgPSB0aGlzLmFkZEVsZW1lbnRUb0V2ZW50cyhldmVudEhhc2gsIGVsZW1lbnQsIHZvaWNlVGltZU1pbGxpc2Vjb25kcywgZWxlbWVudHNbZWxlbV0udG9wLCBlbGVtZW50c1tlbGVtXS5oZWlnaHQsIGVsZW1lbnRzW2VsZW1dLmxpbmUsIGVsZW1lbnRzW2VsZW1dLm1lYXN1cmVOdW1iZXIsIHRpbWVEaXZpZGVyLCBpc1RpZWRTdGF0ZSwgbmV4dElzQmFyKTtcblx0XHRcdFx0aXNUaWVkU3RhdGUgPSByZXQuaXNUaWVkU3RhdGU7XG5cdFx0XHRcdG5leHRJc0JhciA9IHJldC5uZXh0SXNCYXI7XG5cdFx0XHRcdHZvaWNlVGltZSArPSByZXQuZHVyYXRpb247XG5cdFx0XHRcdHZvaWNlVGltZU1pbGxpc2Vjb25kcyA9IE1hdGgucm91bmQodm9pY2VUaW1lICogMTAwMCk7XG5cdFx0XHRcdGlmIChlbGVtZW50LnR5cGUgPT09ICdiYXInKSB7XG5cdFx0XHRcdFx0dmFyIGJhclR5cGUgPSBlbGVtZW50LmFiY2VsZW0udHlwZTtcblx0XHRcdFx0XHR2YXIgZW5kUmVwZWF0ID0gKGJhclR5cGUgPT09IFwiYmFyX3JpZ2h0X3JlcGVhdFwiIHx8IGJhclR5cGUgPT09IFwiYmFyX2RibF9yZXBlYXRcIik7XG5cdFx0XHRcdFx0dmFyIHN0YXJ0RW5kaW5nID0gKGVsZW1lbnQuYWJjZWxlbS5zdGFydEVuZGluZyA9PT0gJzEnKTtcblx0XHRcdFx0XHR2YXIgc3RhcnRSZXBlYXQgPSAoYmFyVHlwZSA9PT0gXCJiYXJfbGVmdF9yZXBlYXRcIiB8fCBiYXJUeXBlID09PSBcImJhcl9kYmxfcmVwZWF0XCIgfHwgYmFyVHlwZSA9PT0gXCJiYXJfcmlnaHRfcmVwZWF0XCIpO1xuXHRcdFx0XHRcdGlmIChlbmRSZXBlYXQpIHtcblx0XHRcdFx0XHRcdGlmIChlbmRpbmdSZXBlYXRFbGVtID09PSAtMSlcblx0XHRcdFx0XHRcdFx0ZW5kaW5nUmVwZWF0RWxlbSA9IGVsZW07XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBlbDIgPSBzdGFydGluZ1JlcGVhdEVsZW07IGVsMiA8IGVuZGluZ1JlcGVhdEVsZW07IGVsMisrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBlbGVtZW50MiA9IGVsZW1lbnRzW2VsMl0uZWxlbTtcblx0XHRcdFx0XHRcdFx0cmV0ID0gdGhpcy5hZGRFbGVtZW50VG9FdmVudHMoZXZlbnRIYXNoLCBlbGVtZW50Miwgdm9pY2VUaW1lTWlsbGlzZWNvbmRzLCBlbGVtZW50c1tlbDJdLnRvcCwgZWxlbWVudHNbZWwyXS5oZWlnaHQsIGVsZW1lbnRzW2VsMl0ubGluZSwgZWxlbWVudHNbZWwyXS5tZWFzdXJlTnVtYmVyLCB0aW1lRGl2aWRlciwgaXNUaWVkU3RhdGUsIG5leHRJc0Jhcik7XG5cdFx0XHRcdFx0XHRcdGlzVGllZFN0YXRlID0gcmV0LmlzVGllZFN0YXRlO1xuXHRcdFx0XHRcdFx0XHRuZXh0SXNCYXIgPSByZXQubmV4dElzQmFyO1xuXHRcdFx0XHRcdFx0XHR2b2ljZVRpbWUgKz0gcmV0LmR1cmF0aW9uO1xuXHRcdFx0XHRcdFx0XHR2b2ljZVRpbWVNaWxsaXNlY29uZHMgPSBNYXRoLnJvdW5kKHZvaWNlVGltZSAqIDEwMDApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bmV4dElzQmFyID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGVuZGluZ1JlcGVhdEVsZW0gPSAtMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHN0YXJ0RW5kaW5nKVxuXHRcdFx0XHRcdFx0ZW5kaW5nUmVwZWF0RWxlbSA9IGVsZW07XG5cdFx0XHRcdFx0aWYgKHN0YXJ0UmVwZWF0KVxuXHRcdFx0XHRcdFx0c3RhcnRpbmdSZXBlYXRFbGVtID0gZWxlbTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBub3cgd2UgaGF2ZSBhbGwgdGhlIGV2ZW50cywgYnV0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2b2ljZXMgdGhlbiB0aGVyZSBtYXkgYmUgZXZlbnRzIG91dCBvZiBvcmRlciBvciBkdXBsaWNhdGVkLCBzbyBub3JtYWxpemUgaXQuXG5cdFx0dGltaW5nRXZlbnRzID0gbWFrZVNvcnRlZEFycmF5KGV2ZW50SGFzaCk7XG5cdFx0YWRkVmVydGljYWxJbmZvKHRpbWluZ0V2ZW50cyk7XG5cdFx0dGltaW5nRXZlbnRzLnB1c2goeyB0eXBlOiBcImVuZFwiLCBtaWxsaXNlY29uZHM6IHZvaWNlVGltZU1pbGxpc2Vjb25kcyB9KTtcblx0XHR0aGlzLmFkZFVzZWZ1bENhbGxiYWNrSW5mbyh0aW1pbmdFdmVudHMsIGJwbSk7XG5cdFx0cmV0dXJuIHRpbWluZ0V2ZW50cztcblx0fTtcblxuXHR0aGlzLmFkZFVzZWZ1bENhbGxiYWNrSW5mbyA9IGZ1bmN0aW9uKHRpbWluZ0V2ZW50cywgYnBtKSB7XG5cdFx0dmFyIG1pbGxpc2Vjb25kc1Blck1lYXN1cmUgPSB0aGlzLm1pbGxpc2Vjb25kc1Blck1lYXN1cmUoYnBtKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRpbWluZ0V2ZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGV2ID0gdGltaW5nRXZlbnRzW2ldO1xuXHRcdFx0ZXYubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSA9IG1pbGxpc2Vjb25kc1Blck1lYXN1cmU7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGdldFZlcnRpY2FsKGdyb3VwKSB7XG5cdFx0dmFyIHZvaWNlcyA9IGdyb3VwLnZvaWNlcztcblx0XHR2YXIgZmlyc3RTdGFmZiA9IGdyb3VwLnN0YWZmc1swXTtcblx0XHR2YXIgbWlkZGxlQyA9IGZpcnN0U3RhZmYuYWJzb2x1dGVZO1xuXHRcdHZhciB0b3AgPSBtaWRkbGVDIC0gZmlyc3RTdGFmZi50b3Aqc3BhY2luZy5TVEVQO1xuXHRcdHZhciBsYXN0U3RhZmYgPSBncm91cC5zdGFmZnNbZ3JvdXAuc3RhZmZzLmxlbmd0aC0xXTtcblx0XHRtaWRkbGVDID0gbGFzdFN0YWZmLmFic29sdXRlWTtcblx0XHR2YXIgYm90dG9tID0gbWlkZGxlQyAtIGxhc3RTdGFmZi5ib3R0b20qc3BhY2luZy5TVEVQO1xuXHRcdHZhciBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG5cdFx0cmV0dXJuIHsgdG9wOiB0b3AsIGhlaWdodDogaGVpZ2h0IH07XG5cdH1cblxuXHR0aGlzLmdldEJwbSA9IGZ1bmN0aW9uKHRlbXBvKSB7XG5cdFx0dmFyIGJwbTtcblx0XHRpZiAodGVtcG8pIHtcblx0XHRcdGJwbSA9IHRlbXBvLmJwbTtcblx0XHRcdHZhciBiZWF0TGVuZ3RoID0gdGhpcy5nZXRCZWF0TGVuZ3RoKCk7XG5cdFx0XHR2YXIgc3RhdGVkQmVhdExlbmd0aCA9IHRlbXBvLmR1cmF0aW9uICYmIHRlbXBvLmR1cmF0aW9uLmxlbmd0aCA+IDAgPyB0ZW1wby5kdXJhdGlvblswXSA6IGJlYXRMZW5ndGg7XG5cdFx0XHRicG0gPSBicG0gKiBzdGF0ZWRCZWF0TGVuZ3RoIC8gYmVhdExlbmd0aDtcblx0XHR9XG5cdFx0aWYgKCFicG0pIHtcblx0XHRcdGJwbSA9IDE4MDtcblx0XHRcdC8vIENvbXBlbnNhdGUgZm9yIGNvbXBvdW5kIG1ldGVyLCB3aGVyZSB0aGUgYmVhdCBpc24ndCBhIGJlYXQuXG5cdFx0XHR2YXIgbWV0ZXIgPSB0aGlzLmdldE1ldGVyRnJhY3Rpb24oKTtcblx0XHRcdGlmIChtZXRlciAmJiBtZXRlci5kZW4gPT09IDgpIHtcblx0XHRcdFx0YnBtID0gMTIwO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYnBtO1xuXHR9O1xuXG5cdHRoaXMuc2V0VGltaW5nID0gZnVuY3Rpb24gKGJwbSwgbWVhc3VyZXNPZkRlbGF5KSB7XG5cdFx0aWYgKCFicG0pIHtcblx0XHRcdHZhciB0ZW1wbyA9IHRoaXMubWV0YVRleHQgPyB0aGlzLm1ldGFUZXh0LnRlbXBvIDogbnVsbDtcblx0XHRcdGJwbSA9IHRoaXMuZ2V0QnBtKHRlbXBvKTtcblx0XHR9XG5cblx0XHR2YXIgYmVhdExlbmd0aCA9IHRoaXMuZ2V0QmVhdExlbmd0aCgpO1xuXHRcdHZhciBiZWF0c1BlclNlY29uZCA9IGJwbSAvIDYwO1xuXG5cdFx0dmFyIG1lYXN1cmVMZW5ndGggPSB0aGlzLmdldEJhckxlbmd0aCgpO1xuXG5cdFx0dmFyIHN0YXJ0aW5nRGVsYXkgPSBtZWFzdXJlTGVuZ3RoIC8gYmVhdExlbmd0aCAqIG1lYXN1cmVzT2ZEZWxheSAvIGJlYXRzUGVyU2Vjb25kO1xuXHRcdGlmIChzdGFydGluZ0RlbGF5KVxuXHRcdFx0c3RhcnRpbmdEZWxheSAtPSB0aGlzLmdldFBpY2t1cExlbmd0aCgpIC8gYmVhdExlbmd0aCAvIGJlYXRzUGVyU2Vjb25kO1xuXHRcdHZhciB0aW1lRGl2aWRlciA9IGJlYXRMZW5ndGggKiBiZWF0c1BlclNlY29uZDtcblxuXHRcdHRoaXMubm90ZVRpbWluZ3MgPSB0aGlzLnNldHVwRXZlbnRzKHN0YXJ0aW5nRGVsYXksIHRpbWVEaXZpZGVyLCBicG0pO1xuXHR9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUdW5lO1xuIiwiLy8gICAgYWJjX3BhcnNlLmpzOiBwYXJzZXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIEFCQyBNdXNpYyBOb3RhdGlvbiBpbnRvIGEgdXNhYmxlIGludGVybmFsIHN0cnVjdHVyZS5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IFBhdWwgUm9zZW4gKHBhdWwgYXQgcGF1bHJvc2VuIGRvdCBuZXQpXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8qZ2xvYmFsIHdpbmRvdyAqL1xuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuL2FiY19jb21tb24nKTtcbnZhciBwYXJzZURpcmVjdGl2ZSA9IHJlcXVpcmUoJy4vYWJjX3BhcnNlX2RpcmVjdGl2ZScpO1xudmFyIFBhcnNlSGVhZGVyID0gcmVxdWlyZSgnLi9hYmNfcGFyc2VfaGVhZGVyJyk7XG52YXIgcGFyc2VLZXlWb2ljZSA9IHJlcXVpcmUoJy4vYWJjX3BhcnNlX2tleV92b2ljZScpO1xudmFyIFRva2VuaXplciA9IHJlcXVpcmUoJy4vYWJjX3Rva2VuaXplcicpO1xudmFyIHRyYW5zcG9zZSA9IHJlcXVpcmUoJy4vYWJjX3RyYW5zcG9zZScpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL3dyYXBfbGluZXMnKTtcblxudmFyIFR1bmUgPSByZXF1aXJlKCcuLi9kYXRhL2FiY190dW5lJyk7XG5cbnZhciBQYXJzZSA9IGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblx0dmFyIHR1bmUgPSBuZXcgVHVuZSgpO1xuXHR2YXIgdG9rZW5pemVyID0gbmV3IFRva2VuaXplcigpO1xuXG5cdHRoaXMuZ2V0VHVuZSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRmb3JtYXR0aW5nOiB0dW5lLmZvcm1hdHRpbmcsXG5cdFx0XHRsaW5lczogdHVuZS5saW5lcyxcblx0XHRcdG1lZGlhOiB0dW5lLm1lZGlhLFxuXHRcdFx0bWV0YVRleHQ6IHR1bmUubWV0YVRleHQsXG5cdFx0XHR2ZXJzaW9uOiB0dW5lLnZlcnNpb24sXG5cblx0XHRcdGFkZEVsZW1lbnRUb0V2ZW50czogdHVuZS5hZGRFbGVtZW50VG9FdmVudHMsXG5cdFx0XHRhZGRVc2VmdWxDYWxsYmFja0luZm86IHR1bmUuYWRkVXNlZnVsQ2FsbGJhY2tJbmZvLFxuXHRcdFx0Z2V0QmFyTGVuZ3RoOiB0dW5lLmdldEJhckxlbmd0aCxcblx0XHRcdGdldEJlYXRMZW5ndGg6IHR1bmUuZ2V0QmVhdExlbmd0aCxcblx0XHRcdGdldEJlYXRzUGVyTWVhc3VyZTogdHVuZS5nZXRCZWF0c1Blck1lYXN1cmUsXG5cdFx0XHRnZXRCcG06IHR1bmUuZ2V0QnBtLFxuXHRcdFx0Z2V0TWV0ZXI6IHR1bmUuZ2V0TWV0ZXIsXG5cdFx0XHRnZXRNZXRlckZyYWN0aW9uOiB0dW5lLmdldE1ldGVyRnJhY3Rpb24sXG5cdFx0XHRnZXRQaWNrdXBMZW5ndGg6IHR1bmUuZ2V0UGlja3VwTGVuZ3RoLFxuXHRcdFx0Z2V0S2V5U2lnbmF0dXJlOiB0dW5lLmdldEtleVNpZ25hdHVyZSxcblx0XHRcdG1ha2VWb2ljZXNBcnJheTogdHVuZS5tYWtlVm9pY2VzQXJyYXksXG5cdFx0XHRtaWxsaXNlY29uZHNQZXJNZWFzdXJlOiB0dW5lLm1pbGxpc2Vjb25kc1Blck1lYXN1cmUsXG5cdFx0XHRzZXR1cEV2ZW50czogdHVuZS5zZXR1cEV2ZW50cyxcblx0XHRcdHNldFRpbWluZzogdHVuZS5zZXRUaW1pbmdcblx0XHR9O1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGFkZFBvc2l0aW9uaW5nKGVsLCB0eXBlLCB2YWx1ZSkge1xuXHRcdGlmICghZWwucG9zaXRpb25pbmcpIGVsLnBvc2l0aW9uaW5nID0ge307XG5cdFx0ZWwucG9zaXRpb25pbmdbdHlwZV0gPSB2YWx1ZTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZEZvbnQoZWwsIHR5cGUsIHZhbHVlKSB7XG5cdFx0aWYgKCFlbC5mb250cykgZWwuZm9udHMgPSB7fTtcblx0XHRlbC5mb250c1t0eXBlXSA9IHZhbHVlO1xuXHR9XG5cblx0dmFyIG11bHRpbGluZVZhcnMgPSB7XG5cdFx0cmVzZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Zm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykge1xuXHRcdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgdHlwZW9mIHRoaXNbcHJvcGVydHldICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpc1twcm9wZXJ0eV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRoaXMuaUNoYXIgPSAwO1xuXHRcdFx0dGhpcy5rZXkgPSB7YWNjaWRlbnRhbHM6IFtdLCByb290OiAnbm9uZScsIGFjYzogJycsIG1vZGU6ICcnIH07XG5cdFx0XHR0aGlzLm1ldGVyID0gbnVsbDsgLy8gaWYgbm8gbWV0ZXIgaXMgc3BlY2lmaWVkLCBmcmVlIG1ldGVyIGlzIGFzc3VtZWRcblx0XHRcdHRoaXMub3JpZ01ldGVyID0gbnVsbDtcdC8vIHRoaXMgaXMgZm9yIG5ldyB2b2ljZXMgdGhhdCBhcmUgY3JlYXRlZCBhZnRlciB3ZSBzZXQgdGhlIG1ldGVyLlxuXHRcdFx0dGhpcy5oYXNNYWluVGl0bGUgPSBmYWxzZTtcblx0XHRcdHRoaXMuZGVmYXVsdF9sZW5ndGggPSAwLjEyNTtcblx0XHRcdHRoaXMuY2xlZiA9IHsgdHlwZTogJ3RyZWJsZScsIHZlcnRpY2FsUG9zOiAwIH07XG5cdFx0XHR0aGlzLm5leHRfbm90ZV9kdXJhdGlvbiA9IDA7XG5cdFx0XHR0aGlzLnN0YXJ0X25ld19saW5lID0gdHJ1ZTtcblx0XHRcdHRoaXMuaXNfaW5faGVhZGVyID0gdHJ1ZTtcblx0XHRcdHRoaXMuaXNfaW5faGlzdG9yeSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5wYXJ0Rm9yTmV4dExpbmUgPSB7fTtcblx0XHRcdHRoaXMuaGF2ZW50X3NldF9sZW5ndGggPSB0cnVlO1xuXHRcdFx0dGhpcy52b2ljZXMgPSB7fTtcblx0XHRcdHRoaXMuc3RhdmVzID0gW107XG5cdFx0XHR0aGlzLm1hY3JvcyA9IHt9O1xuXHRcdFx0dGhpcy5jdXJyQmFyTnVtYmVyID0gMTtcblx0XHRcdHRoaXMuYmFyQ291bnRlciA9IHt9O1xuXHRcdFx0dGhpcy5pblRleHRCbG9jayA9IGZhbHNlO1xuXHRcdFx0dGhpcy5pblBzQmxvY2sgPSBmYWxzZTtcblx0XHRcdHRoaXMuaWdub3JlZERlY29yYXRpb25zID0gW107XG5cdFx0XHR0aGlzLnRleHRCbG9jayA9IFwiXCI7XG5cdFx0XHR0aGlzLnNjb3JlX2lzX3ByZXNlbnQgPSBmYWxzZTtcdC8vIENhbid0IGhhdmUgb3JpZ2luYWwgVjogbGluZXMgd2hlbiB0aGVyZSBpcyB0aGUgc2NvcmUgZGlyZWN0aXZlXG5cdFx0XHR0aGlzLmluRW5kaW5nID0gZmFsc2U7XG5cdFx0XHR0aGlzLmluVGllID0gW107XG5cdFx0XHR0aGlzLmluVGllQ2hvcmQgPSB7fTtcblx0XHRcdHRoaXMudm9jYWxQb3NpdGlvbiA9IFwiYXV0b1wiO1xuXHRcdFx0dGhpcy5keW5hbWljUG9zaXRpb24gPSBcImF1dG9cIjtcblx0XHRcdHRoaXMuY2hvcmRQb3NpdGlvbiA9IFwiYXV0b1wiO1xuXHRcdFx0dGhpcy5vcm5hbWVudFBvc2l0aW9uID0gXCJhdXRvXCI7XG5cdFx0XHR0aGlzLnZvbHVtZVBvc2l0aW9uID0gXCJhdXRvXCI7XG5cdFx0XHR0aGlzLm9wZW5TbHVycyA9IFtdO1xuXHRcdFx0dGhpcy5mcmVlZ2Nob3JkID0gZmFsc2U7XG5cdFx0fSxcblx0XHRkaWZmZXJlbnRGb250OiBmdW5jdGlvbih0eXBlLCBkZWZhdWx0Rm9udHMpIHtcblx0XHRcdGlmICh0aGlzW3R5cGVdLmRlY29yYXRpb24gIT09IGRlZmF1bHRGb250c1t0eXBlXS5kZWNvcmF0aW9uKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzW3R5cGVdLmZhY2UgIT09IGRlZmF1bHRGb250c1t0eXBlXS5mYWNlKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzW3R5cGVdLnNpemUgIT09IGRlZmF1bHRGb250c1t0eXBlXS5zaXplKSByZXR1cm4gdHJ1ZTtcblx0XHRcdGlmICh0aGlzW3R5cGVdLnN0eWxlICE9PSBkZWZhdWx0Rm9udHNbdHlwZV0uc3R5bGUpIHJldHVybiB0cnVlO1xuXHRcdFx0aWYgKHRoaXNbdHlwZV0ud2VpZ2h0ICE9PSBkZWZhdWx0Rm9udHNbdHlwZV0ud2VpZ2h0KSByZXR1cm4gdHJ1ZTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFkZEZvcm1hdHRpbmdPcHRpb25zOiBmdW5jdGlvbihlbCwgZGVmYXVsdEZvbnRzLCBlbFR5cGUpIHtcblx0XHRcdGlmIChlbFR5cGUgPT09ICdub3RlJykge1xuXHRcdFx0XHRpZiAodGhpcy52b2NhbFBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAndm9jYWxQb3NpdGlvbicsIHRoaXMudm9jYWxQb3NpdGlvbik7XG5cdFx0XHRcdGlmICh0aGlzLmR5bmFtaWNQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2R5bmFtaWNQb3NpdGlvbicsIHRoaXMuZHluYW1pY1Bvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuY2hvcmRQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2Nob3JkUG9zaXRpb24nLCB0aGlzLmNob3JkUG9zaXRpb24pO1xuXHRcdFx0XHRpZiAodGhpcy5vcm5hbWVudFBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAnb3JuYW1lbnRQb3NpdGlvbicsIHRoaXMub3JuYW1lbnRQb3NpdGlvbik7XG5cdFx0XHRcdGlmICh0aGlzLnZvbHVtZVBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAndm9sdW1lUG9zaXRpb24nLCB0aGlzLnZvbHVtZVBvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuZGlmZmVyZW50Rm9udChcImFubm90YXRpb25mb250XCIsIGRlZmF1bHRGb250cykpIGFkZEZvbnQoZWwsICdhbm5vdGF0aW9uZm9udCcsIHRoaXMuYW5ub3RhdGlvbmZvbnQpO1xuXHRcdFx0XHRpZiAodGhpcy5kaWZmZXJlbnRGb250KFwiZ2Nob3JkZm9udFwiLCBkZWZhdWx0Rm9udHMpKSBhZGRGb250KGVsLCAnZ2Nob3JkZm9udCcsIHRoaXMuZ2Nob3JkZm9udCk7XG5cdFx0XHRcdGlmICh0aGlzLmRpZmZlcmVudEZvbnQoXCJ2b2NhbGZvbnRcIiwgZGVmYXVsdEZvbnRzKSkgYWRkRm9udChlbCwgJ3ZvY2FsZm9udCcsIHRoaXMudm9jYWxmb250KTtcblx0XHRcdFx0aWYgKHRoaXMuZGlmZmVyZW50Rm9udChcInRyaXBsZXRmb250XCIsIGRlZmF1bHRGb250cykpIGFkZEZvbnQoZWwsICd0cmlwbGV0Zm9udCcsIHRoaXMudHJpcGxldGZvbnQpO1xuXHRcdFx0fSBlbHNlIGlmIChlbFR5cGUgPT09ICdiYXInKSB7XG5cdFx0XHRcdGlmICh0aGlzLmR5bmFtaWNQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2R5bmFtaWNQb3NpdGlvbicsIHRoaXMuZHluYW1pY1Bvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuY2hvcmRQb3NpdGlvbiAhPT0gJ2F1dG8nKSBhZGRQb3NpdGlvbmluZyhlbCwgJ2Nob3JkUG9zaXRpb24nLCB0aGlzLmNob3JkUG9zaXRpb24pO1xuXHRcdFx0XHRpZiAodGhpcy5vcm5hbWVudFBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAnb3JuYW1lbnRQb3NpdGlvbicsIHRoaXMub3JuYW1lbnRQb3NpdGlvbik7XG5cdFx0XHRcdGlmICh0aGlzLnZvbHVtZVBvc2l0aW9uICE9PSAnYXV0bycpIGFkZFBvc2l0aW9uaW5nKGVsLCAndm9sdW1lUG9zaXRpb24nLCB0aGlzLnZvbHVtZVBvc2l0aW9uKTtcblx0XHRcdFx0aWYgKHRoaXMuZGlmZmVyZW50Rm9udChcIm1lYXN1cmVmb250XCIsIGRlZmF1bHRGb250cykpIGFkZEZvbnQoZWwsICdtZWFzdXJlZm9udCcsIHRoaXMubWVhc3VyZWZvbnQpO1xuXHRcdFx0XHRpZiAodGhpcy5kaWZmZXJlbnRGb250KFwicmVwZWF0Zm9udFwiLCBkZWZhdWx0Rm9udHMpKSBhZGRGb250KGVsLCAncmVwZWF0Zm9udCcsIHRoaXMucmVwZWF0Zm9udCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGRXYXJuaW5nID0gZnVuY3Rpb24oc3RyKSB7XG5cdFx0aWYgKCFtdWx0aWxpbmVWYXJzLndhcm5pbmdzKVxuXHRcdFx0bXVsdGlsaW5lVmFycy53YXJuaW5ncyA9IFtdO1xuXHRcdG11bHRpbGluZVZhcnMud2FybmluZ3MucHVzaChzdHIpO1xuXHR9O1xuXG5cdHZhciBhZGRXYXJuaW5nT2JqZWN0ID0gZnVuY3Rpb24od2FybmluZ09iamVjdCkge1xuXHRcdGlmICghbXVsdGlsaW5lVmFycy53YXJuaW5nT2JqZWN0cylcblx0XHRcdG11bHRpbGluZVZhcnMud2FybmluZ09iamVjdHMgPSBbXTtcblx0XHRtdWx0aWxpbmVWYXJzLndhcm5pbmdPYmplY3RzLnB1c2god2FybmluZ09iamVjdCk7XG5cdH07XG5cblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKHN0cikge1xuXHRcdHZhciByZXQgPSBwYXJzZUNvbW1vbi5nc3ViKHN0ciwgJ1xceDEyJywgJyAnKTtcblx0XHRyZXQgPSBwYXJzZUNvbW1vbi5nc3ViKHJldCwgJyYnLCAnJmFtcDsnKTtcblx0XHRyZXQgPSBwYXJzZUNvbW1vbi5nc3ViKHJldCwgJzwnLCAnJmx0OycpO1xuXHRcdHJldHVybiBwYXJzZUNvbW1vbi5nc3ViKHJldCwgJz4nLCAnJmd0OycpO1xuXHR9O1xuXG5cdHZhciB3YXJuID0gZnVuY3Rpb24oc3RyLCBsaW5lLCBjb2xfbnVtKSB7XG5cdFx0aWYgKCFsaW5lKSBsaW5lID0gXCIgXCI7XG5cdFx0dmFyIGJhZF9jaGFyID0gbGluZS5jaGFyQXQoY29sX251bSk7XG5cdFx0aWYgKGJhZF9jaGFyID09PSAnICcpXG5cdFx0XHRiYWRfY2hhciA9IFwiU1BBQ0VcIjtcblx0XHR2YXIgY2xlYW5fbGluZSA9IGVuY29kZShsaW5lLnN1YnN0cmluZygwLCBjb2xfbnVtKSkgK1xuXHRcdFx0JzxzcGFuIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXNpemU6MS4zZW07Zm9udC13ZWlnaHQ6Ym9sZDtcIj4nICsgYmFkX2NoYXIgKyAnPC9zcGFuPicgK1xuXHRcdFx0ZW5jb2RlKGxpbmUuc3Vic3RyaW5nKGNvbF9udW0rMSkpO1xuXHRcdGFkZFdhcm5pbmcoXCJNdXNpYyBMaW5lOlwiICsgdHVuZS5nZXROdW1MaW5lcygpICsgXCI6XCIgKyAoY29sX251bSsxKSArICc6ICcgKyBzdHIgKyBcIjogIFwiICsgY2xlYW5fbGluZSk7XG5cdFx0YWRkV2FybmluZ09iamVjdCh7bWVzc2FnZTpzdHIsIGxpbmU6bGluZSwgc3RhcnRDaGFyOiBtdWx0aWxpbmVWYXJzLmlDaGFyICsgY29sX251bSwgY29sdW1uOiBjb2xfbnVtfSk7XG5cdH07XG5cdHZhciBoZWFkZXIgPSBuZXcgUGFyc2VIZWFkZXIodG9rZW5pemVyLCB3YXJuLCBtdWx0aWxpbmVWYXJzLCB0dW5lKTtcblxuXHR0aGlzLmdldFdhcm5pbmdzID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG11bHRpbGluZVZhcnMud2FybmluZ3M7XG5cdH07XG5cdHRoaXMuZ2V0V2FybmluZ09iamVjdHMgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gbXVsdGlsaW5lVmFycy53YXJuaW5nT2JqZWN0cztcblx0fTtcblxuXHR2YXIgbGV0dGVyX3RvX2Nob3JkID0gZnVuY3Rpb24obGluZSwgaSlcblx0e1xuXHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJ1wiJylcblx0XHR7XG5cdFx0XHR2YXIgY2hvcmQgPSB0b2tlbml6ZXIuZ2V0QnJhY2tldHRlZFN1YnN0cmluZyhsaW5lLCBpLCA1KTtcblx0XHRcdGlmICghY2hvcmRbMl0pXG5cdFx0XHRcdHdhcm4oXCJNaXNzaW5nIHRoZSBjbG9zaW5nIHF1b3RlIHdoaWxlIHBhcnNpbmcgdGhlIGNob3JkIHN5bWJvbFwiLCBsaW5lICwgaSk7XG5cdFx0XHQvLyBJZiBpdCBzdGFydHMgd2l0aCBeLCB0aGVuIHRoZSBjaG9yZCBhcHBlYXJzIGFib3ZlLlxuXHRcdFx0Ly8gSWYgaXQgc3RhcnRzIHdpdGggXyB0aGVuIHRoZSBjaG9yZCBhcHBlYXJzIGJlbG93LlxuXHRcdFx0Ly8gKG5vdGUgdGhhdCB0aGUgMi4wIGRyYWZ0IHN0YW5kYXJkIGRlZmluZXMgdGhlbSBhcyBub3QgY2hvcmRzLCBidXQgYW5ub3RhdGlvbnMgYW5kIGFsc28gZGVmaW5lcyBALilcblx0XHRcdGlmIChjaG9yZFswXSA+IDAgJiYgY2hvcmRbMV0ubGVuZ3RoID4gMCAmJiBjaG9yZFsxXS5jaGFyQXQoMCkgPT09ICdeJykge1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0Y2hvcmRbMl0gPSAnYWJvdmUnO1xuXHRcdFx0fSBlbHNlIGlmIChjaG9yZFswXSA+IDAgJiYgY2hvcmRbMV0ubGVuZ3RoID4gMCAmJiBjaG9yZFsxXS5jaGFyQXQoMCkgPT09ICdfJykge1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0Y2hvcmRbMl0gPSAnYmVsb3cnO1xuXHRcdFx0fSBlbHNlIGlmIChjaG9yZFswXSA+IDAgJiYgY2hvcmRbMV0ubGVuZ3RoID4gMCAmJiBjaG9yZFsxXS5jaGFyQXQoMCkgPT09ICc8Jykge1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0Y2hvcmRbMl0gPSAnbGVmdCc7XG5cdFx0XHR9IGVsc2UgaWYgKGNob3JkWzBdID4gMCAmJiBjaG9yZFsxXS5sZW5ndGggPiAwICYmIGNob3JkWzFdLmNoYXJBdCgwKSA9PT0gJz4nKSB7XG5cdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0uc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHRjaG9yZFsyXSA9ICdyaWdodCc7XG5cdFx0XHR9IGVsc2UgaWYgKGNob3JkWzBdID4gMCAmJiBjaG9yZFsxXS5sZW5ndGggPiAwICYmIGNob3JkWzFdLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG5cdFx0XHRcdC8vIEAtMTUsNS43XG5cdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0uc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR2YXIgeCA9IHRva2VuaXplci5nZXRGbG9hdChjaG9yZFsxXSk7XG5cdFx0XHRcdGlmICh4LmRpZ2l0cyA9PT0gMClcblx0XHRcdFx0XHR3YXJuKFwiTWlzc2luZyBmaXJzdCBwb3NpdGlvbiBpbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYW5ub3RhdGlvbi5cIiwgbGluZSAsIGkpO1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZyh4LmRpZ2l0cyk7XG5cdFx0XHRcdGlmIChjaG9yZFsxXVswXSAhPT0gJywnKVxuXHRcdFx0XHRcdHdhcm4oXCJNaXNzaW5nIGNvbW1hIGFic29sdXRlbHkgcG9zaXRpb25lZCBhbm5vdGF0aW9uLlwiLCBsaW5lICwgaSk7XG5cdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0uc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR2YXIgeSA9IHRva2VuaXplci5nZXRGbG9hdChjaG9yZFsxXSk7XG5cdFx0XHRcdGlmICh5LmRpZ2l0cyA9PT0gMClcblx0XHRcdFx0XHR3YXJuKFwiTWlzc2luZyBzZWNvbmQgcG9zaXRpb24gaW4gYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFubm90YXRpb24uXCIsIGxpbmUgLCBpKTtcblx0XHRcdFx0Y2hvcmRbMV0gPSBjaG9yZFsxXS5zdWJzdHJpbmcoeS5kaWdpdHMpO1xuXHRcdFx0XHR2YXIgd3MgPSB0b2tlbml6ZXIuc2tpcFdoaXRlU3BhY2UoY2hvcmRbMV0pO1xuXHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnN1YnN0cmluZyh3cyk7XG5cdFx0XHRcdGNob3JkWzJdID0gbnVsbDtcblx0XHRcdFx0Y2hvcmRbM10gPSB7IHg6IHgudmFsdWUsIHk6IHkudmFsdWUgfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmZyZWVnY2hvcmQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRjaG9yZFsxXSA9IGNob3JkWzFdLnJlcGxhY2UoLyhbQUJDREVGRzAtOV0pYi9nLCBcIiQx4pmtXCIpO1xuXHRcdFx0XHRcdGNob3JkWzFdID0gY2hvcmRbMV0ucmVwbGFjZSgvKFtBQkNERUZHMC05XSkjL2csIFwiJDHima9cIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hvcmRbMl0gPSAnZGVmYXVsdCc7XG5cdFx0XHRcdGNob3JkWzFdID0gdHJhbnNwb3NlLmNob3JkTmFtZShtdWx0aWxpbmVWYXJzLCBjaG9yZFsxXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2hvcmQ7XG5cdFx0fVxuXHRcdHJldHVybiBbMCwgXCJcIl07XG5cdH07XG5cblx0dmFyIGxlZ2FsQWNjZW50cyA9IFsgXCJ0cmlsbFwiLCBcImxvd2VybW9yZGVudFwiLCBcInVwcGVybW9yZGVudFwiLCBcIm1vcmRlbnRcIiwgXCJwcmFsbHRyaWxsZXJcIiwgXCJhY2NlbnRcIixcblx0XHRcImZlcm1hdGFcIiwgXCJpbnZlcnRlZGZlcm1hdGFcIiwgXCJ0ZW51dG9cIiwgXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCIrXCIsIFwid2VkZ2VcIixcblx0XHRcIm9wZW5cIiwgXCJ0aHVtYlwiLCBcInNuYXBcIiwgXCJ0dXJuXCIsIFwicm9sbFwiLCBcImJyZWF0aFwiLCBcInNob3J0cGhyYXNlXCIsIFwibWVkaXVtcGhyYXNlXCIsIFwibG9uZ3BocmFzZVwiLFxuXHRcdFwic2Vnbm9cIiwgXCJjb2RhXCIsIFwiRC5TLlwiLCBcIkQuQy5cIiwgXCJmaW5lXCIsXG5cdFx0XCJzbGlkZVwiLCBcIl5cIiwgXCJtYXJjYXRvXCIsXG5cdFx0XCJ1cGJvd1wiLCBcImRvd25ib3dcIiwgXCIvXCIsIFwiLy9cIiwgXCIvLy9cIiwgXCIvLy8vXCIsIFwidHJlbTFcIiwgXCJ0cmVtMlwiLCBcInRyZW0zXCIsIFwidHJlbTRcIixcblx0XHRcInR1cm54XCIsIFwiaW52ZXJ0ZWR0dXJuXCIsIFwiaW52ZXJ0ZWR0dXJueFwiLCBcInRyaWxsKFwiLCBcInRyaWxsKVwiLCBcImFycGVnZ2lvXCIsIFwieHN0ZW1cIiwgXCJtYXJrXCIsIFwidW1hcmNhdG9cIixcblx0XHRcInN0eWxlPW5vcm1hbFwiLCBcInN0eWxlPWhhcm1vbmljXCIsIFwic3R5bGU9cmh5dGhtXCIsIFwic3R5bGU9eFwiXG5cdF07XG5cdHZhciB2b2x1bWVEZWNvcmF0aW9ucyA9IFsgXCJwXCIsIFwicHBcIiwgXCJmXCIsIFwiZmZcIiwgXCJtZlwiLCBcIm1wXCIsIFwicHBwXCIsIFwicHBwcFwiLCAgXCJmZmZcIiwgXCJmZmZmXCIsIFwic2Z6XCIgXTtcblx0dmFyIGR5bmFtaWNEZWNvcmF0aW9ucyA9IFtcImNyZXNjZW5kbyhcIiwgXCJjcmVzY2VuZG8pXCIsIFwiZGltaW51ZW5kbyhcIiwgXCJkaW1pbnVlbmRvKVwiXTtcblxuXHR2YXIgYWNjZW50UHNldWRvbnltcyA9IFsgW1wiPFwiLCBcImFjY2VudFwiXSwgW1wiPlwiLCBcImFjY2VudFwiXSwgW1widHJcIiwgXCJ0cmlsbFwiXSxcblx0XHRbXCJwbHVzXCIsIFwiK1wiXSwgWyBcImVtcGhhc2lzXCIsIFwiYWNjZW50XCJdLFxuXHRcdFsgXCJeXCIsIFwidW1hcmNhdG9cIiBdLCBbIFwibWFyY2F0b1wiLCBcInVtYXJjYXRvXCIgXSBdO1xuXHR2YXIgYWNjZW50RHluYW1pY1BzZXVkb255bXMgPSBbIFtcIjwoXCIsIFwiY3Jlc2NlbmRvKFwiXSwgW1wiPClcIiwgXCJjcmVzY2VuZG8pXCJdLFxuXHRcdFtcIj4oXCIsIFwiZGltaW51ZW5kbyhcIl0sIFtcIj4pXCIsIFwiZGltaW51ZW5kbylcIl0gXTtcblx0dmFyIGxldHRlcl90b19hY2NlbnQgPSBmdW5jdGlvbihsaW5lLCBpKVxuXHR7XG5cdFx0dmFyIG1hY3JvID0gbXVsdGlsaW5lVmFycy5tYWNyb3NbbGluZS5jaGFyQXQoaSldO1xuXG5cdFx0aWYgKG1hY3JvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChtYWNyby5jaGFyQXQoMCkgPT09ICchJyB8fCBtYWNyby5jaGFyQXQoMCkgPT09ICcrJylcblx0XHRcdFx0bWFjcm8gPSBtYWNyby5zdWJzdHJpbmcoMSk7XG5cdFx0XHRpZiAobWFjcm8uY2hhckF0KG1hY3JvLmxlbmd0aC0xKSA9PT0gJyEnIHx8IG1hY3JvLmNoYXJBdChtYWNyby5sZW5ndGgtMSkgPT09ICcrJylcblx0XHRcdFx0bWFjcm8gPSBtYWNyby5zdWJzdHJpbmcoMCwgbWFjcm8ubGVuZ3RoLTEpO1xuXHRcdFx0aWYgKHBhcnNlQ29tbW9uLmRldGVjdChsZWdhbEFjY2VudHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdHJldHVybiAobWFjcm8gPT09IGFjYyk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0XHRyZXR1cm4gWyAxLCBtYWNybyBdO1xuXHRcdFx0ZWxzZSBpZiAocGFyc2VDb21tb24uZGV0ZWN0KHZvbHVtZURlY29yYXRpb25zLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0XHRyZXR1cm4gKG1hY3JvID09PSBhY2MpO1xuXHRcdFx0XHR9KSkge1xuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy52b2x1bWVQb3NpdGlvbiA9PT0gJ2hpZGRlbicpXG5cdFx0XHRcdFx0bWFjcm8gPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gWzEsIG1hY3JvXTtcblx0XHRcdH0gZWxzZSBpZiAocGFyc2VDb21tb24uZGV0ZWN0KGR5bmFtaWNEZWNvcmF0aW9ucywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuZHluYW1pY1Bvc2l0aW9uID09PSAnaGlkZGVuJylcblx0XHRcdFx0XHRcdG1hY3JvID0gXCJcIjtcblx0XHRcdFx0XHRyZXR1cm4gKG1hY3JvID09PSBhY2MpO1xuXHRcdFx0XHR9KSkge1xuXHRcdFx0XHRyZXR1cm4gWzEsIG1hY3JvXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICghcGFyc2VDb21tb24uZGV0ZWN0KG11bHRpbGluZVZhcnMuaWdub3JlZERlY29yYXRpb25zLCBmdW5jdGlvbihkZWMpIHtcblx0XHRcdFx0XHRyZXR1cm4gKG1hY3JvID09PSBkZWMpO1xuXHRcdFx0XHR9KSlcblx0XHRcdFx0XHR3YXJuKFwiVW5rbm93biBtYWNybzogXCIgKyBtYWNybywgbGluZSwgaSk7XG5cdFx0XHRcdHJldHVybiBbMSwgJycgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0c3dpdGNoIChsaW5lLmNoYXJBdChpKSlcblx0XHR7XG5cdFx0XHRjYXNlICcuJzpyZXR1cm4gWzEsICdzdGFjY2F0byddO1xuXHRcdFx0Y2FzZSAndSc6cmV0dXJuIFsxLCAndXBib3cnXTtcblx0XHRcdGNhc2UgJ3YnOnJldHVybiBbMSwgJ2Rvd25ib3cnXTtcblx0XHRcdGNhc2UgJ34nOnJldHVybiBbMSwgJ2lyaXNocm9sbCddO1xuXHRcdFx0Y2FzZSAnISc6XG5cdFx0XHRjYXNlICcrJzpcblx0XHRcdFx0dmFyIHJldCA9IHRva2VuaXplci5nZXRCcmFja2V0dGVkU3Vic3RyaW5nKGxpbmUsIGksIDUpO1xuXHRcdFx0XHQvLyBCZSBzdXJlIHRoYXQgdGhlIGFjY2VudCBpcyByZWNvZ25pemFibGUuXG5cdFx0XHRpZiAocmV0WzFdLmxlbmd0aCA+IDAgJiYgKHJldFsxXS5jaGFyQXQoMCkgPT09ICdeJyB8fCByZXRbMV0uY2hhckF0KDApID09PSdfJykpXG5cdFx0XHRcdFx0cmV0WzFdID0gcmV0WzFdLnN1YnN0cmluZygxKTtcdC8vIFRPRE8tUEVSOiBUaGUgdGVzdCBmaWxlcyBoYXZlIGluZGljYXRvcnMgZm9yY2luZyB0aGUgb3JuYW1lbnQgdG8gdGhlIHRvcCBvciBib3R0b20sIGJ1dCB0aGF0IGlzbid0IGluIHRoZSBzdGFuZGFyZC4gV2UnbGwganVzdCBpZ25vcmUgdGhlbS5cblx0XHRcdFx0aWYgKHBhcnNlQ29tbW9uLmRldGVjdChsZWdhbEFjY2VudHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdHJldHVybiAocmV0WzFdID09PSBhY2MpO1xuXHRcdFx0XHR9KSlcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHRpZiAocGFyc2VDb21tb24uZGV0ZWN0KHZvbHVtZURlY29yYXRpb25zLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0XHRcdHJldHVybiAocmV0WzFdID09PSBhY2MpO1xuXHRcdFx0XHRcdH0pKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMudm9sdW1lUG9zaXRpb24gPT09ICdoaWRkZW4nIClcblx0XHRcdFx0XHRcdHJldFsxXSA9ICcnO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGFyc2VDb21tb24uZGV0ZWN0KGR5bmFtaWNEZWNvcmF0aW9ucywgZnVuY3Rpb24oYWNjKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKHJldFsxXSA9PT0gYWNjKTtcblx0XHRcdFx0XHR9KSkge1xuXHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmR5bmFtaWNQb3NpdGlvbiA9PT0gJ2hpZGRlbicgKVxuXHRcdFx0XHRcdFx0cmV0WzFdID0gJyc7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcnNlQ29tbW9uLmRldGVjdChhY2NlbnRQc2V1ZG9ueW1zLCBmdW5jdGlvbihhY2MpIHtcblx0XHRcdFx0XHRpZiAocmV0WzFdID09PSBhY2NbMF0pIHtcblx0XHRcdFx0XHRcdHJldFsxXSA9IGFjY1sxXTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9KSlcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXG5cdFx0XHRcdGlmIChwYXJzZUNvbW1vbi5kZXRlY3QoYWNjZW50RHluYW1pY1BzZXVkb255bXMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0XHRcdGlmIChyZXRbMV0gPT09IGFjY1swXSkge1xuXHRcdFx0XHRcdFx0cmV0WzFdID0gYWNjWzFdO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH0pKSB7XG5cdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuZHluYW1pY1Bvc2l0aW9uID09PSAnaGlkZGVuJyApXG5cdFx0XHRcdFx0XHRyZXRbMV0gPSAnJztcblx0XHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV2UgZGlkbid0IGZpbmQgdGhlIGFjY2VudCBpbiB0aGUgbGlzdCwgc28gY29uc3VtZSB0aGUgc3BhY2UsIGJ1dCBkb24ndCByZXR1cm4gYW4gYWNjZW50LlxuXHRcdFx0XHQvLyBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0aGF0ICEgd2FzIHVzZWQgYXMgYSBsaW5lIGJyZWFrLCBzbyBhY2NlcHQgdGhhdC5cblx0XHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJyEnICYmIChyZXRbMF0gPT09IDEgfHwgbGluZS5jaGFyQXQoaStyZXRbMF0tMSkgIT09ICchJykpXG5cdFx0XHRcdFx0cmV0dXJuIFsxLCBudWxsIF07XG5cdFx0XHRcdHdhcm4oXCJVbmtub3duIGRlY29yYXRpb246IFwiICsgcmV0WzFdLCBsaW5lLCBpKTtcblx0XHRcdFx0cmV0WzFdID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdGNhc2UgJ0gnOnJldHVybiBbMSwgJ2Zlcm1hdGEnXTtcblx0XHRcdGNhc2UgJ0onOnJldHVybiBbMSwgJ3NsaWRlJ107XG5cdFx0XHRjYXNlICdMJzpyZXR1cm4gWzEsICdhY2NlbnQnXTtcblx0XHRcdGNhc2UgJ00nOnJldHVybiBbMSwgJ21vcmRlbnQnXTtcblx0XHRcdGNhc2UgJ08nOnJldHVyblsxLCAnY29kYSddO1xuXHRcdFx0Y2FzZSAnUCc6cmV0dXJuWzEsICdwcmFsbHRyaWxsZXInXTtcblx0XHRcdGNhc2UgJ1InOnJldHVybiBbMSwgJ3JvbGwnXTtcblx0XHRcdGNhc2UgJ1MnOnJldHVybiBbMSwgJ3NlZ25vJ107XG5cdFx0XHRjYXNlICdUJzpyZXR1cm4gWzEsICd0cmlsbCddO1xuXHRcdH1cblx0XHRyZXR1cm4gWzAsIDBdO1xuXHR9O1xuXG5cdHZhciBsZXR0ZXJfdG9fc3BhY2VyID0gZnVuY3Rpb24obGluZSwgaSlcblx0e1xuXHRcdHZhciBzdGFydCA9IGk7XG5cdFx0d2hpbGUgKHRva2VuaXplci5pc1doaXRlU3BhY2UobGluZS5jaGFyQXQoaSkpKVxuXHRcdFx0aSsrO1xuXHRcdHJldHVybiBbIGktc3RhcnQgXTtcblx0fTtcblxuXHQvLyByZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgYmFyIGxpbmVcblx0Ly8gdGhlIG51bWJlciBvZiB0aGUgcmVwZWF0XG5cdC8vIGFuZCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdXNlZCB1cFxuXHQvLyBpZiAwIGlzIHJldHVybmVkLCB0aGVuIHRoZSBuZXh0IGVsZW1lbnQgd2FzIG5vdCBhIGJhciBsaW5lXG5cdHZhciBsZXR0ZXJfdG9fYmFyID0gZnVuY3Rpb24obGluZSwgY3Vycl9wb3MpXG5cdHtcblx0XHR2YXIgcmV0ID0gdG9rZW5pemVyLmdldEJhckxpbmUobGluZSwgY3Vycl9wb3MpO1xuXHRcdGlmIChyZXQubGVuID09PSAwKVxuXHRcdFx0cmV0dXJuIFswLFwiXCJdO1xuXHRcdGlmIChyZXQud2Fybikge1xuXHRcdFx0d2FybihyZXQud2FybiwgbGluZSwgY3Vycl9wb3MpO1xuXHRcdFx0cmV0dXJuIFtyZXQubGVuLFwiXCJdO1xuXHRcdH1cblxuXHRcdC8vIE5vdyBzZWUgaWYgdGhpcyBpcyBhIHJlcGVhdGVkIGVuZGluZ1xuXHRcdC8vIEEgcmVwZWF0ZWQgZW5kaW5nIGlzIGFsbCBvZiB0aGUgY2hhcmFjdGVycyAxLDIsMyw0LDUsNiw3LDgsOSwwLC0sIGFuZCBjb21tYVxuXHRcdC8vIEl0IGNhbiBhbHNvIG9wdGlvbmFsbHkgc3RhcnQgd2l0aCAnWycsIHdoaWNoIGlzIGlnbm9yZWQuXG5cdFx0Ly8gQWxzbywgaXQgY2FuIGhhdmUgd2hpdGUgc3BhY2UgYmVmb3JlIHRoZSAnWycuXG5cdFx0Zm9yICh2YXIgd3MgPSAwOyB3cyA8IGxpbmUubGVuZ3RoOyB3cysrKVxuXHRcdFx0aWYgKGxpbmUuY2hhckF0KGN1cnJfcG9zICsgcmV0LmxlbiArIHdzKSAhPT0gJyAnKVxuXHRcdFx0XHRicmVhaztcblx0XHR2YXIgb3JpZ19iYXJfbGVuID0gcmV0Lmxlbjtcblx0XHRpZiAobGluZS5jaGFyQXQoY3Vycl9wb3MrcmV0Lmxlbit3cykgPT09ICdbJykge1xuXHRcdFx0cmV0LmxlbiArPSB3cyArIDE7XG5cdFx0fVxuXG5cdFx0Ly8gSXQgY2FuIGFsc28gYmUgYSBxdW90ZWQgc3RyaW5nLiBJdCBpcyB1bmNsZWFyIHdoZXRoZXIgdGhhdCBjb25zdHJ1Y3QgcmVxdWlyZXMgJ1snLCBidXQgaXQgc2VlbXMgbGlrZSBpdCB3b3VsZC4gb3RoZXJ3aXNlIGl0IHdvdWxkIGJlIGNvbmZ1c2VkIHdpdGggYSByZWd1bGFyIGNob3JkLlxuXHRcdGlmIChsaW5lLmNoYXJBdChjdXJyX3BvcytyZXQubGVuKSA9PT0gJ1wiJyAmJiBsaW5lLmNoYXJBdChjdXJyX3BvcytyZXQubGVuLTEpID09PSAnWycpIHtcblx0XHRcdHZhciBlbmRpbmcgPSB0b2tlbml6ZXIuZ2V0QnJhY2tldHRlZFN1YnN0cmluZyhsaW5lLCBjdXJyX3BvcytyZXQubGVuLCA1KTtcblx0XHRcdHJldHVybiBbcmV0LmxlbitlbmRpbmdbMF0sIHJldC50b2tlbiwgZW5kaW5nWzFdXTtcblx0XHR9XG5cdFx0dmFyIHJldFJlcCA9IHRva2VuaXplci5nZXRUb2tlbk9mKGxpbmUuc3Vic3RyaW5nKGN1cnJfcG9zK3JldC5sZW4pLCBcIjEyMzQ1Njc4OTAtLFwiKTtcblx0XHRpZiAocmV0UmVwLmxlbiA9PT0gMCB8fCByZXRSZXAudG9rZW5bMF0gPT09ICctJylcblx0XHRcdHJldHVybiBbb3JpZ19iYXJfbGVuLCByZXQudG9rZW5dO1xuXG5cdFx0cmV0dXJuIFtyZXQubGVuK3JldFJlcC5sZW4sIHJldC50b2tlbiwgcmV0UmVwLnRva2VuXTtcblx0fTtcblxuXHR2YXIgdHJpcGxldFEgPSB7XG5cdFx0MjogMyxcblx0XHQzOiAyLFxuXHRcdDQ6IDMsXG5cdFx0NTogMiwgLy8gVE9ETy1QRVI6IG5vdCBoYW5kbGluZyA2Lzggcmh5dGhtIHlldFxuXHRcdDY6IDIsXG5cdFx0NzogMiwgLy8gVE9ETy1QRVI6IG5vdCBoYW5kbGluZyA2Lzggcmh5dGhtIHlldFxuXHRcdDg6IDMsXG5cdFx0OTogMiAvLyBUT0RPLVBFUjogbm90IGhhbmRsaW5nIDYvOCByaHl0aG0geWV0XG5cdH07XG5cdHZhciBsZXR0ZXJfdG9fb3Blbl9zbHVyc19hbmRfdHJpcGxldHMgPSAgZnVuY3Rpb24obGluZSwgaSkge1xuXHRcdC8vIGNvbnN1bWUgc3BhY2VzLCBhbmQgbG9vayBmb3IgYWxsIHRoZSBvcGVuIHBhcmVucy4gSWYgdGhlcmUgaXMgYSBudW1iZXIgYWZ0ZXIgdGhlIG9wZW4gcGFyZW4sXG5cdFx0Ly8gdGhhdCBpcyBhIHRyaXBsZXQuIE90aGVyd2lzZSB0aGF0IGlzIGEgc2x1ci4gQ29sbGVjdCBhbGwgdGhlIHNsdXJzIGFuZCB0aGUgZmlyc3QgdHJpcGxldC5cblx0XHR2YXIgcmV0ID0ge307XG5cdFx0dmFyIHN0YXJ0ID0gaTtcblx0XHR3aGlsZSAobGluZS5jaGFyQXQoaSkgPT09ICcoJyB8fCB0b2tlbml6ZXIuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGkpKSkge1xuXHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnKCcpIHtcblx0XHRcdFx0aWYgKGkrMSA8IGxpbmUubGVuZ3RoICYmIChsaW5lLmNoYXJBdChpKzEpID49ICcyJyAmJiBsaW5lLmNoYXJBdChpKzEpIDw9ICc5JykpIHtcblx0XHRcdFx0XHRpZiAocmV0LnRyaXBsZXQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdHdhcm4oXCJDYW4ndCBuZXN0IHRyaXBsZXRzXCIsIGxpbmUsIGkpO1xuXHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0LnRyaXBsZXQgPSBsaW5lLmNoYXJBdChpKzEpIC0gJzAnO1xuXHRcdFx0XHRcdFx0cmV0LnRyaXBsZXRRID0gdHJpcGxldFFbcmV0LnRyaXBsZXRdO1xuXHRcdFx0XHRcdFx0cmV0Lm51bV9ub3RlcyA9IHJldC50cmlwbGV0O1xuXHRcdFx0XHRcdFx0aWYgKGkrMiA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGkrMikgPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHQvLyBXZSBhcmUgZXhwZWN0aW5nIFwiKHA6cTpyXCIgb3IgXCIocDpxXCIgb3IgXCIocDo6clwiXG5cdFx0XHRcdFx0XHRcdC8vIFRoYXQgaXM6IFwicHV0IHAgbm90ZXMgaW50byB0aGUgdGltZSBvZiBxIGZvciB0aGUgbmV4dCByIG5vdGVzXCJcblx0XHRcdFx0XHRcdFx0Ly8gaWYgciBpcyBtaXNzaW5nLCB0aGVuIGl0IGlzIGVxdWFsIHRvIHAuXG5cdFx0XHRcdFx0XHRcdC8vIGlmIHEgaXMgbWlzc2luZywgaXQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoaXMgdGFibGU6XG5cdFx0XHRcdFx0XHRcdC8vICgyIG5vdGVzIGluIHRoZSB0aW1lIG9mIDNcblx0XHRcdFx0XHRcdFx0Ly8gKDMgbm90ZXMgaW4gdGhlIHRpbWUgb2YgMlxuXHRcdFx0XHRcdFx0XHQvLyAoNCBub3RlcyBpbiB0aGUgdGltZSBvZiAzXG5cdFx0XHRcdFx0XHRcdC8vICg1IG5vdGVzIGluIHRoZSB0aW1lIG9mIG4gfCBpZiB0aW1lIHNpZyBpcyAoNi84LCA5LzgsIDEyLzgpLCBuPTMsIGVsc2Ugbj0yXG5cdFx0XHRcdFx0XHRcdC8vICg2IG5vdGVzIGluIHRoZSB0aW1lIG9mIDJcblx0XHRcdFx0XHRcdFx0Ly8gKDcgbm90ZXMgaW4gdGhlIHRpbWUgb2YgblxuXHRcdFx0XHRcdFx0XHQvLyAoOCBub3RlcyBpbiB0aGUgdGltZSBvZiAzXG5cdFx0XHRcdFx0XHRcdC8vICg5IG5vdGVzIGluIHRoZSB0aW1lIG9mIG5cblx0XHRcdFx0XHRcdFx0aWYgKGkrMyA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGkrMykgPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBzZWNvbmQgbnVtYmVyLCAncScsIGlzIG5vdCBwcmVzZW50LlxuXHRcdFx0XHRcdFx0XHRcdGlmIChpKzQgPCBsaW5lLmxlbmd0aCAmJiAobGluZS5jaGFyQXQoaSs0KSA+PSAnMScgJiYgbGluZS5jaGFyQXQoaSs0KSA8PSAnOScpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXQubnVtX25vdGVzID0gbGluZS5jaGFyQXQoaSs0KSAtICcwJztcblx0XHRcdFx0XHRcdFx0XHRcdGkgKz0gMztcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdHdhcm4oXCJleHBlY3RlZCBudW1iZXIgYWZ0ZXIgdGhlIHR3byBjb2xvbnMgYWZ0ZXIgdGhlIHRyaXBsZXQgdG8gbWFyayB0aGUgZHVyYXRpb25cIiwgbGluZSwgaSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaSszIDwgbGluZS5sZW5ndGggJiYgKGxpbmUuY2hhckF0KGkrMykgPj0gJzEnICYmIGxpbmUuY2hhckF0KGkrMykgPD0gJzknKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldC50cmlwbGV0USA9IGxpbmUuY2hhckF0KGkrMykgLSAnMCc7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGkrNCA8IGxpbmUubGVuZ3RoICYmIGxpbmUuY2hhckF0KGkrNCkgPT09ICc6Jykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGkrNSA8IGxpbmUubGVuZ3RoICYmIChsaW5lLmNoYXJBdChpKzUpID49ICcxJyAmJiBsaW5lLmNoYXJBdChpKzUpIDw9ICc5JykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0Lm51bV9ub3RlcyA9IGxpbmUuY2hhckF0KGkrNSkgLSAnMCc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGkgKz0gNDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aSArPSAyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0d2FybihcImV4cGVjdGVkIG51bWJlciBhZnRlciB0aGUgdHJpcGxldCB0byBtYXJrIHRoZSBkdXJhdGlvblwiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmIChyZXQuc3RhcnRTbHVyID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRyZXQuc3RhcnRTbHVyID0gMTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRyZXQuc3RhcnRTbHVyKys7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGkrKztcblx0XHR9XG5cdFx0cmV0LmNvbnN1bWVkID0gaS1zdGFydDtcblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xuXG5cdHZhciBhZGRXb3JkcyA9IGZ1bmN0aW9uKGxpbmUsIHdvcmRzKSB7XG5cdFx0aWYgKCFsaW5lKSB7IHdhcm4oXCJDYW4ndCBhZGQgd29yZHMgYmVmb3JlIHRoZSBmaXJzdCBsaW5lIG9mIG11c2ljXCIsIGxpbmUsIDApOyByZXR1cm47IH1cblx0XHR3b3JkcyA9IHBhcnNlQ29tbW9uLnN0cmlwKHdvcmRzKTtcblx0XHRpZiAod29yZHMuY2hhckF0KHdvcmRzLmxlbmd0aC0xKSAhPT0gJy0nKVxuXHRcdFx0d29yZHMgPSB3b3JkcyArICcgJztcdC8vIEp1c3QgbWFrZXMgaXQgZWFzaWVyIHRvIHBhcnNlIGJlbG93LCBzaW5jZSBldmVyeSB3b3JkIGhhcyBhIGRpdmlkZXIgYWZ0ZXIgaXQuXG5cdFx0dmFyIHdvcmRfbGlzdCA9IFtdO1xuXHRcdC8vIGZpcnN0IG1ha2UgYSBsaXN0IG9mIHdvcmRzIGZyb20gdGhlIHN0cmluZyB3ZSBhcmUgcGFzc2VkLiBBIHdvcmQgaXMgZGl2aWRlZCBvbiBlaXRoZXIgYSBzcGFjZSBvciBkYXNoLlxuXHRcdHZhciBsYXN0X2RpdmlkZXIgPSAwO1xuXHRcdHZhciByZXBsYWNlID0gZmFsc2U7XG5cdFx0dmFyIGFkZFdvcmQgPSBmdW5jdGlvbihpKSB7XG5cdFx0XHR2YXIgd29yZCA9IHBhcnNlQ29tbW9uLnN0cmlwKHdvcmRzLnN1YnN0cmluZyhsYXN0X2RpdmlkZXIsIGkpKTtcblx0XHRcdGxhc3RfZGl2aWRlciA9IGkrMTtcblx0XHRcdGlmICh3b3JkLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aWYgKHJlcGxhY2UpXG5cdFx0XHRcdFx0d29yZCA9IHBhcnNlQ29tbW9uLmdzdWIod29yZCwnficsICcgJyk7XG5cdFx0XHRcdHZhciBkaXYgPSB3b3Jkcy5jaGFyQXQoaSk7XG5cdFx0XHRcdGlmIChkaXYgIT09ICdfJyAmJiBkaXYgIT09ICctJylcblx0XHRcdFx0XHRkaXYgPSAnICc7XG5cdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtzeWxsYWJsZTogdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh3b3JkKSwgZGl2aWRlcjogZGl2fSk7XG5cdFx0XHRcdHJlcGxhY2UgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzd2l0Y2ggKHdvcmRzLmNoYXJBdChpKSkge1xuXHRcdFx0XHRjYXNlICcgJzpcblx0XHRcdFx0Y2FzZSAnXFx4MTInOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0nOlxuXHRcdFx0XHRcdGlmICghYWRkV29yZChpKSAmJiB3b3JkX2xpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cGFyc2VDb21tb24ubGFzdCh3b3JkX2xpc3QpLmRpdmlkZXIgPSAnLSc7XG5cdFx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICduZXh0J30pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnXyc6XG5cdFx0XHRcdFx0YWRkV29yZChpKTtcblx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICdzbHVyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcqJzpcblx0XHRcdFx0XHRhZGRXb3JkKGkpO1xuXHRcdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtza2lwOiB0cnVlLCB0bzogJ25leHQnfSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3wnOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0d29yZF9saXN0LnB1c2goe3NraXA6IHRydWUsIHRvOiAnYmFyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd+Jzpcblx0XHRcdFx0XHRyZXBsYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaW5TbHVyID0gZmFsc2U7XG5cdFx0cGFyc2VDb21tb24uZWFjaChsaW5lLCBmdW5jdGlvbihlbCkge1xuXHRcdFx0aWYgKHdvcmRfbGlzdC5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0aWYgKHdvcmRfbGlzdFswXS5za2lwKSB7XG5cdFx0XHRcdFx0c3dpdGNoICh3b3JkX2xpc3RbMF0udG8pIHtcblx0XHRcdFx0XHRcdGNhc2UgJ25leHQnOiBpZiAoZWwuZWxfdHlwZSA9PT0gJ25vdGUnICYmIGVsLnBpdGNoZXMgIT09IG51bGwgJiYgIWluU2x1cikgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc2x1cic6IGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucGl0Y2hlcyAhPT0gbnVsbCkgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmFyJzogaWYgKGVsLmVsX3R5cGUgPT09ICdiYXInKSB3b3JkX2xpc3Quc2hpZnQoKTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChlbC5lbF90eXBlICE9PSAnYmFyJykge1xuXHRcdFx0XHRcdFx0aWYgKGVsLmx5cmljID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdGVsLmx5cmljID0gW3tzeWxsYWJsZTogXCJcIiwgZGl2aWRlcjogXCIgXCJ9XTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0ZWwubHlyaWMucHVzaCh7c3lsbGFibGU6IFwiXCIsIGRpdmlkZXI6IFwiIFwifSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucmVzdCA9PT0gdW5kZWZpbmVkICYmICFpblNsdXIpIHtcblx0XHRcdFx0XHRcdHZhciBseXJpYyA9IHdvcmRfbGlzdC5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0aWYgKGx5cmljLnN5bGxhYmxlKVxuXHRcdFx0XHRcdFx0XHRseXJpYy5zeWxsYWJsZSA9IGx5cmljLnN5bGxhYmxlLnJlcGxhY2UoLyArL2csJ1xceEEwJyk7XG5cdFx0XHRcdFx0XHRpZiAoZWwubHlyaWMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0ZWwubHlyaWMgPSBbIGx5cmljIF07XG5cdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdGVsLmx5cmljLnB1c2gobHlyaWMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5cdHZhciBhZGRTeW1ib2xzID0gZnVuY3Rpb24obGluZSwgd29yZHMpIHtcblx0XHQvLyBUT0RPLVBFUjogQ3VycmVudGx5IGNvcGllZCBmcm9tIHc6IGxpbmUuIFRoaXMgbmVlZHMgdG8gYmUgcmVhZCBhcyBzeW1ib2xzIGluc3RlYWQuXG5cdFx0aWYgKCFsaW5lKSB7IHdhcm4oXCJDYW4ndCBhZGQgc3ltYm9scyBiZWZvcmUgdGhlIGZpcnN0IGxpbmUgb2YgbXVzaWNcIiwgbGluZSwgMCk7IHJldHVybjsgfVxuXHRcdHdvcmRzID0gcGFyc2VDb21tb24uc3RyaXAod29yZHMpO1xuXHRcdGlmICh3b3Jkcy5jaGFyQXQod29yZHMubGVuZ3RoLTEpICE9PSAnLScpXG5cdFx0XHR3b3JkcyA9IHdvcmRzICsgJyAnO1x0Ly8gSnVzdCBtYWtlcyBpdCBlYXNpZXIgdG8gcGFyc2UgYmVsb3csIHNpbmNlIGV2ZXJ5IHdvcmQgaGFzIGEgZGl2aWRlciBhZnRlciBpdC5cblx0XHR2YXIgd29yZF9saXN0ID0gW107XG5cdFx0Ly8gZmlyc3QgbWFrZSBhIGxpc3Qgb2Ygd29yZHMgZnJvbSB0aGUgc3RyaW5nIHdlIGFyZSBwYXNzZWQuIEEgd29yZCBpcyBkaXZpZGVkIG9uIGVpdGhlciBhIHNwYWNlIG9yIGRhc2guXG5cdFx0dmFyIGxhc3RfZGl2aWRlciA9IDA7XG5cdFx0dmFyIHJlcGxhY2UgPSBmYWxzZTtcblx0XHR2YXIgYWRkV29yZCA9IGZ1bmN0aW9uKGkpIHtcblx0XHRcdHZhciB3b3JkID0gcGFyc2VDb21tb24uc3RyaXAod29yZHMuc3Vic3RyaW5nKGxhc3RfZGl2aWRlciwgaSkpO1xuXHRcdFx0bGFzdF9kaXZpZGVyID0gaSsxO1xuXHRcdFx0aWYgKHdvcmQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpZiAocmVwbGFjZSlcblx0XHRcdFx0XHR3b3JkID0gcGFyc2VDb21tb24uZ3N1Yih3b3JkLCAnficsICcgJyk7XG5cdFx0XHRcdHZhciBkaXYgPSB3b3Jkcy5jaGFyQXQoaSk7XG5cdFx0XHRcdGlmIChkaXYgIT09ICdfJyAmJiBkaXYgIT09ICctJylcblx0XHRcdFx0XHRkaXYgPSAnICc7XG5cdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtzeWxsYWJsZTogdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh3b3JkKSwgZGl2aWRlcjogZGl2fSk7XG5cdFx0XHRcdHJlcGxhY2UgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzd2l0Y2ggKHdvcmRzLmNoYXJBdChpKSkge1xuXHRcdFx0XHRjYXNlICcgJzpcblx0XHRcdFx0Y2FzZSAnXFx4MTInOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJy0nOlxuXHRcdFx0XHRcdGlmICghYWRkV29yZChpKSAmJiB3b3JkX2xpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0cGFyc2VDb21tb24ubGFzdCh3b3JkX2xpc3QpLmRpdmlkZXIgPSAnLSc7XG5cdFx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICduZXh0J30pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnXyc6XG5cdFx0XHRcdFx0YWRkV29yZChpKTtcblx0XHRcdFx0XHR3b3JkX2xpc3QucHVzaCh7c2tpcDogdHJ1ZSwgdG86ICdzbHVyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcqJzpcblx0XHRcdFx0XHRhZGRXb3JkKGkpO1xuXHRcdFx0XHRcdHdvcmRfbGlzdC5wdXNoKHtza2lwOiB0cnVlLCB0bzogJ25leHQnfSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3wnOlxuXHRcdFx0XHRcdGFkZFdvcmQoaSk7XG5cdFx0XHRcdFx0d29yZF9saXN0LnB1c2goe3NraXA6IHRydWUsIHRvOiAnYmFyJ30pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICd+Jzpcblx0XHRcdFx0XHRyZXBsYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgaW5TbHVyID0gZmFsc2U7XG5cdFx0cGFyc2VDb21tb24uZWFjaChsaW5lLCBmdW5jdGlvbihlbCkge1xuXHRcdFx0aWYgKHdvcmRfbGlzdC5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0aWYgKHdvcmRfbGlzdFswXS5za2lwKSB7XG5cdFx0XHRcdFx0c3dpdGNoICh3b3JkX2xpc3RbMF0udG8pIHtcblx0XHRcdFx0XHRcdGNhc2UgJ25leHQnOiBpZiAoZWwuZWxfdHlwZSA9PT0gJ25vdGUnICYmIGVsLnBpdGNoZXMgIT09IG51bGwgJiYgIWluU2x1cikgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnc2x1cic6IGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucGl0Y2hlcyAhPT0gbnVsbCkgd29yZF9saXN0LnNoaWZ0KCk7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSAnYmFyJzogaWYgKGVsLmVsX3R5cGUgPT09ICdiYXInKSB3b3JkX2xpc3Quc2hpZnQoKTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChlbC5lbF90eXBlID09PSAnbm90ZScgJiYgZWwucmVzdCA9PT0gdW5kZWZpbmVkICYmICFpblNsdXIpIHtcblx0XHRcdFx0XHRcdHZhciBseXJpYyA9IHdvcmRfbGlzdC5zaGlmdCgpO1xuXHRcdFx0XHRcdFx0aWYgKGVsLmx5cmljID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdGVsLmx5cmljID0gWyBseXJpYyBdO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRlbC5seXJpYy5wdXNoKGx5cmljKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fTtcblxuXHR2YXIgZ2V0QnJva2VuUmh5dGhtID0gZnVuY3Rpb24obGluZSwgaW5kZXgpIHtcblx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGluZGV4KSkge1xuXHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRpZiAoaW5kZXggPCBsaW5lLmxlbmd0aCAtIDEgJiYgbGluZS5jaGFyQXQoaW5kZXgrMSkgPT09ICc+JylcdC8vIGRvdWJsZSA+PlxuXHRcdFx0XHRcdHJldHVybiBbMiwgMS43NSwgMC4yNV07XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRyZXR1cm4gWzEsIDEuNSwgMC41XTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICc8Jzpcblx0XHRcdGlmIChpbmRleCA8IGxpbmUubGVuZ3RoIC0gMSAmJiBsaW5lLmNoYXJBdChpbmRleCsxKSA9PT0gJzwnKVx0Ly8gZG91YmxlIDw8XG5cdFx0XHRcdFx0cmV0dXJuIFsyLCAwLjI1LCAxLjc1XTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJldHVybiBbMSwgMC41LCAxLjVdO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH07XG5cblx0Ly8gVE9ETy1QRVI6IG1ha2UgdGhpcyBhIG1ldGhvZCBpbiBlbC5cblx0dmFyIGFkZEVuZEJlYW0gPSBmdW5jdGlvbihlbCkge1xuXHRcdGlmIChlbC5kdXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIGVsLmR1cmF0aW9uIDwgMC4yNSlcblx0XHRcdGVsLmVuZF9iZWFtID0gdHJ1ZTtcblx0XHRyZXR1cm4gZWw7XG5cdH07XG5cblx0dmFyIHBpdGNoZXMgPSB7QTogNSwgQjogNiwgQzogMCwgRDogMSwgRTogMiwgRjogMywgRzogNCwgYTogMTIsIGI6IDEzLCBjOiA3LCBkOiA4LCBlOiA5LCBmOiAxMCwgZzogMTF9O1xuXHR2YXIgcmVzdHMgPSB7eDogJ2ludmlzaWJsZScsIHk6ICdzcGFjZXInLCB6OiAncmVzdCcsIFo6ICdtdWx0aW1lYXN1cmUnIH07XG5cdHZhciBnZXRDb3JlTm90ZSA9IGZ1bmN0aW9uKGxpbmUsIGluZGV4LCBlbCwgY2FuSGF2ZUJyb2tlblJoeXRobSkge1xuXHRcdC8vdmFyIGVsID0geyBzdGFydENoYXI6IGluZGV4IH07XG5cdFx0dmFyIGlzQ29tcGxldGUgPSBmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0cmV0dXJuIChzdGF0ZSA9PT0gJ29jdGF2ZScgfHwgc3RhdGUgPT09ICdkdXJhdGlvbicgfHwgc3RhdGUgPT09ICdaZHVyYXRpb24nIHx8IHN0YXRlID09PSAnYnJva2VuX3JoeXRobScgfHwgc3RhdGUgPT09ICdlbmRfc2x1cicpO1xuXHRcdH07XG5cdFx0dmFyIHN0YXRlID0gJ3N0YXJ0U2x1cic7XG5cdFx0dmFyIGR1cmF0aW9uU2V0QnlQcmV2aW91c05vdGUgPSBmYWxzZTtcblx0XHR3aGlsZSAoMSkge1xuXHRcdFx0c3dpdGNoKGxpbmUuY2hhckF0KGluZGV4KSkge1xuXHRcdFx0XHRjYXNlICcoJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdzdGFydFNsdXInKSB7XG5cdFx0XHRcdFx0XHRpZiAoZWwuc3RhcnRTbHVyID09PSB1bmRlZmluZWQpIGVsLnN0YXJ0U2x1ciA9IDE7IGVsc2UgZWwuc3RhcnRTbHVyKys7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJyknOlxuXHRcdFx0XHRcdGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge1xuXHRcdFx0XHRcdFx0aWYgKGVsLmVuZFNsdXIgPT09IHVuZGVmaW5lZCkgZWwuZW5kU2x1ciA9IDE7IGVsc2UgZWwuZW5kU2x1cisrO1xuXHRcdFx0XHRcdH0gZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnXic6XG5cdFx0XHRcdFx0aWYgKHN0YXRlID09PSAnc3RhcnRTbHVyJykge2VsLmFjY2lkZW50YWwgPSAnc2hhcnAnO3N0YXRlID0gJ3NoYXJwMic7fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSAnc2hhcnAyJykge2VsLmFjY2lkZW50YWwgPSAnZGJsc2hhcnAnO3N0YXRlID0gJ3BpdGNoJzt9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHtlbC5lbmRDaGFyID0gaW5kZXg7cmV0dXJuIGVsO31cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdfJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdzdGFydFNsdXInKSB7ZWwuYWNjaWRlbnRhbCA9ICdmbGF0JztzdGF0ZSA9ICdmbGF0Mic7fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHN0YXRlID09PSAnZmxhdDInKSB7ZWwuYWNjaWRlbnRhbCA9ICdkYmxmbGF0JztzdGF0ZSA9ICdwaXRjaCc7fVxuXHRcdFx0XHRcdGVsc2UgaWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7ZWwuZW5kQ2hhciA9IGluZGV4O3JldHVybiBlbDt9XG5cdFx0XHRcdFx0ZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnPSc6XG5cdFx0XHRcdFx0aWYgKHN0YXRlID09PSAnc3RhcnRTbHVyJykge2VsLmFjY2lkZW50YWwgPSAnbmF0dXJhbCc7c3RhdGUgPSAncGl0Y2gnO31cblx0XHRcdFx0XHRlbHNlIGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ0EnOlxuXHRcdFx0XHRjYXNlICdCJzpcblx0XHRcdFx0Y2FzZSAnQyc6XG5cdFx0XHRcdGNhc2UgJ0QnOlxuXHRcdFx0XHRjYXNlICdFJzpcblx0XHRcdFx0Y2FzZSAnRic6XG5cdFx0XHRcdGNhc2UgJ0cnOlxuXHRcdFx0XHRjYXNlICdhJzpcblx0XHRcdFx0Y2FzZSAnYic6XG5cdFx0XHRcdGNhc2UgJ2MnOlxuXHRcdFx0XHRjYXNlICdkJzpcblx0XHRcdFx0Y2FzZSAnZSc6XG5cdFx0XHRcdGNhc2UgJ2YnOlxuXHRcdFx0XHRjYXNlICdnJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdzdGFydFNsdXInIHx8IHN0YXRlID09PSAnc2hhcnAyJyB8fCBzdGF0ZSA9PT0gJ2ZsYXQyJyB8fCBzdGF0ZSA9PT0gJ3BpdGNoJykge1xuXHRcdFx0XHRcdFx0ZWwucGl0Y2ggPSBwaXRjaGVzW2xpbmUuY2hhckF0KGluZGV4KV07XG5cdFx0XHRcdFx0XHR0cmFuc3Bvc2Uubm90ZShtdWx0aWxpbmVWYXJzLCBlbCk7XG5cdFx0XHRcdFx0XHRzdGF0ZSA9ICdvY3RhdmUnO1xuXHRcdFx0XHRcdFx0Ly8gQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgdmFsaWQgbm90ZS4gVGhlIHJlc3QgaXMgb3B0aW9uYWwuIFNldCB0aGUgZHVyYXRpb24gaW4gY2FzZSB3ZSBkb24ndCBnZXQgb25lIGJlbG93XG5cdFx0XHRcdFx0XHRpZiAoY2FuSGF2ZUJyb2tlblJoeXRobSAmJiBtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiAhPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGggKiBtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbjtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb24gPSAwO1xuXHRcdFx0XHRcdFx0XHRkdXJhdGlvblNldEJ5UHJldmlvdXNOb3RlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGg7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgY2xlZiBpcyBwZXJjdXNzaW9uLCB0aGVyZSBpcyBwcm9iYWJseSBzb21lIHRyYW5zbGF0aW9uIG9mIHRoZSBwaXRjaCB0byBhIHBhcnRpY3VsYXIgZHJ1bSBraXQgaXRlbS5cblx0XHRcdFx0XHRcdGlmICgobXVsdGlsaW5lVmFycy5jbGVmICYmIG11bHRpbGluZVZhcnMuY2xlZi50eXBlID09PSBcInBlcmNcIikgfHxcblx0XHRcdFx0XHRcdFx0KG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlICYmIG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLmNsZWYgPT09IFwicGVyY1wiKSkge1xuXHRcdFx0XHRcdFx0XHR2YXIga2V5ID0gbGluZS5jaGFyQXQoaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZWwuYWNjaWRlbnRhbCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhY2NNYXAgPSB7ICdkYmxmbGF0JzogJ19fJywgJ2ZsYXQnOiAnXycsICduYXR1cmFsJzogJz0nLCAnc2hhcnAnOiAnXicsICdkYmxzaGFycCc6ICdeXid9O1xuXHRcdFx0XHRcdFx0XHRcdGtleSA9IGFjY01hcFtlbC5hY2NpZGVudGFsXSArIGtleTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZiAodHVuZS5mb3JtYXR0aW5nICYmIHR1bmUuZm9ybWF0dGluZy5taWRpICYmIHR1bmUuZm9ybWF0dGluZy5taWRpLmRydW1tYXApXG5cdFx0XHRcdFx0XHRcdFx0ZWwubWlkaXBpdGNoID0gdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW1hcFtrZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHtlbC5lbmRDaGFyID0gaW5kZXg7cmV0dXJuIGVsO31cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICcsJzpcblx0XHRcdFx0XHRpZiAoc3RhdGUgPT09ICdvY3RhdmUnKSB7ZWwucGl0Y2ggLT0gNzt9XG5cdFx0XHRcdFx0ZWxzZSBpZiAoaXNDb21wbGV0ZShzdGF0ZSkpIHtlbC5lbmRDaGFyID0gaW5kZXg7cmV0dXJuIGVsO31cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICdcXCcnOlxuXHRcdFx0XHRcdGlmIChzdGF0ZSA9PT0gJ29jdGF2ZScpIHtlbC5waXRjaCArPSA3O31cblx0XHRcdFx0XHRlbHNlIGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ3gnOlxuXHRcdFx0XHRjYXNlICd5Jzpcblx0XHRcdFx0Y2FzZSAneic6XG5cdFx0XHRcdGNhc2UgJ1onOlxuXHRcdFx0XHRcdGlmIChzdGF0ZSA9PT0gJ3N0YXJ0U2x1cicpIHtcblx0XHRcdFx0XHRcdGVsLnJlc3QgPSB7IHR5cGU6IHJlc3RzW2xpbmUuY2hhckF0KGluZGV4KV0gfTtcblx0XHRcdFx0XHRcdC8vIFRoZXJlIHNob3VsZG4ndCBiZSBzb21lIG9mIHRoZSBwcm9wZXJ0aWVzIHRoYXQgbm90ZXMgaGF2ZS4gSWYgc29tZSBzbmVhayBpbiBkdWUgdG8gYmFkIHN5bnRheCBpbiB0aGUgYWJjIGZpbGUsXG5cdFx0XHRcdFx0XHQvLyBqdXN0IG5peCB0aGVtIGhlcmUuXG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuYWNjaWRlbnRhbDtcblx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5zdGFydFNsdXI7XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuc3RhcnRUaWU7XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuZW5kU2x1cjtcblx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5lbmRUaWU7XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuZW5kX2JlYW07XG5cdFx0XHRcdFx0XHRkZWxldGUgZWwuZ3JhY2Vfbm90ZXM7XG5cdFx0XHRcdFx0XHQvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSB2YWxpZCBub3RlLiBUaGUgcmVzdCBpcyBvcHRpb25hbC4gU2V0IHRoZSBkdXJhdGlvbiBpbiBjYXNlIHdlIGRvbid0IGdldCBvbmUgYmVsb3dcblx0XHRcdFx0XHRcdGlmIChlbC5yZXN0LnR5cGUgPT09ICdtdWx0aW1lYXN1cmUnKSB7XG5cdFx0XHRcdFx0XHRcdGVsLmR1cmF0aW9uID0gMTtcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSAnWmR1cmF0aW9uJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjYW5IYXZlQnJva2VuUmh5dGhtICYmIG11bHRpbGluZVZhcnMubmV4dF9ub3RlX2R1cmF0aW9uICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBtdWx0aWxpbmVWYXJzLmRlZmF1bHRfbGVuZ3RoICogbXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb24gPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uU2V0QnlQcmV2aW91c05vdGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG11bHRpbGluZVZhcnMuZGVmYXVsdF9sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ2R1cmF0aW9uJztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7ZWwuZW5kQ2hhciA9IGluZGV4O3JldHVybiBlbDt9XG5cdFx0XHRcdFx0ZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnMSc6XG5cdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRjYXNlICczJzpcblx0XHRcdFx0Y2FzZSAnNCc6XG5cdFx0XHRcdGNhc2UgJzUnOlxuXHRcdFx0XHRjYXNlICc2Jzpcblx0XHRcdFx0Y2FzZSAnNyc6XG5cdFx0XHRcdGNhc2UgJzgnOlxuXHRcdFx0XHRjYXNlICc5Jzpcblx0XHRcdFx0Y2FzZSAnMCc6XG5cdFx0XHRcdGNhc2UgJy8nOlxuXHRcdFx0XHRcdGlmIChzdGF0ZSA9PT0gJ29jdGF2ZScgfHwgc3RhdGUgPT09ICdkdXJhdGlvbicpIHtcblx0XHRcdFx0XHRcdHZhciBmcmFjdGlvbiA9IHRva2VuaXplci5nZXRGcmFjdGlvbihsaW5lLCBpbmRleCk7XG5cdFx0XHRcdFx0XHQvL2lmICghZHVyYXRpb25TZXRCeVByZXZpb3VzTm90ZSlcblx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBlbC5kdXJhdGlvbiAqIGZyYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IFdlIGNhbiB0ZXN0IHRoZSByZXR1cm5lZCBkdXJhdGlvbiBoZXJlIGFuZCBnaXZlIGEgd2FybmluZyBpZiBpdCBpc24ndCB0aGUgb25lIGV4cGVjdGVkLlxuXHRcdFx0XHRcdFx0ZWwuZW5kQ2hhciA9IGZyYWN0aW9uLmluZGV4O1xuXHRcdFx0XHRcdFx0d2hpbGUgKGZyYWN0aW9uLmluZGV4IDwgbGluZS5sZW5ndGggJiYgKHRva2VuaXplci5pc1doaXRlU3BhY2UobGluZS5jaGFyQXQoZnJhY3Rpb24uaW5kZXgpKSB8fCBsaW5lLmNoYXJBdChmcmFjdGlvbi5pbmRleCkgPT09ICctJykpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGZyYWN0aW9uLmluZGV4KSA9PT0gJy0nKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnN0YXJ0VGllID0ge307XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRlbCA9IGFkZEVuZEJlYW0oZWwpO1xuXHRcdFx0XHRcdFx0XHRmcmFjdGlvbi5pbmRleCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW5kZXggPSBmcmFjdGlvbi5pbmRleC0xO1xuXHRcdFx0XHRcdFx0c3RhdGUgPSAnYnJva2VuX3JoeXRobSc7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gJ3NoYXJwMicpIHtcblx0XHRcdFx0XHRcdGVsLmFjY2lkZW50YWwgPSAncXVhcnRlcnNoYXJwJztzdGF0ZSA9ICdwaXRjaCc7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzdGF0ZSA9PT0gJ2ZsYXQyJykge1xuXHRcdFx0XHRcdFx0ZWwuYWNjaWRlbnRhbCA9ICdxdWFydGVyZmxhdCc7c3RhdGUgPSAncGl0Y2gnO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICdaZHVyYXRpb24nKSB7XG5cdFx0XHRcdFx0XHR2YXIgbnVtID0gdG9rZW5pemVyLmdldE51bWJlcihsaW5lLCBpbmRleCk7XG5cdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IG51bS5udW07XG5cdFx0XHRcdFx0XHRlbC5lbmRDaGFyID0gbnVtLmluZGV4O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdH0gZWxzZSByZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnLSc6XG5cdFx0XHRcdFx0aWYgKHN0YXRlID09PSAnc3RhcnRTbHVyJykge1xuXHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyLCBzbyBpdCBtdXN0IGhhdmUgYmVlbiBtZWFudCBmb3IgdGhlIHByZXZpb3VzIG5vdGUuIENvcnJlY3QgdGhhdCBoZXJlLlxuXHRcdFx0XHRcdFx0dHVuZS5hZGRUaWVUb0xhc3ROb3RlKCk7XG5cdFx0XHRcdFx0XHRlbC5lbmRUaWUgPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICdvY3RhdmUnIHx8IHN0YXRlID09PSAnZHVyYXRpb24nIHx8IHN0YXRlID09PSAnZW5kX3NsdXInKSB7XG5cdFx0XHRcdFx0XHRlbC5zdGFydFRpZSA9IHt9O1xuXHRcdFx0XHRcdFx0aWYgKCFkdXJhdGlvblNldEJ5UHJldmlvdXNOb3RlICYmIGNhbkhhdmVCcm9rZW5SaHl0aG0pXG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ2Jyb2tlbl9yaHl0aG0nO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFBlZWsgYWhlYWQgdG8gdGhlIG5leHQgY2hhcmFjdGVyLiBJZiBpdCBpcyBhIHNwYWNlLCB0aGVuIHdlIGhhdmUgYW4gZW5kIGJlYW0uXG5cdFx0XHRcdFx0XHRcdGlmICh0b2tlbml6ZXIuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGluZGV4ICsgMSkpKVxuXHRcdFx0XHRcdFx0XHRcdGFkZEVuZEJlYW0oZWwpO1xuXHRcdFx0XHRcdFx0XHRlbC5lbmRDaGFyID0gaW5kZXgrMTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGUgPT09ICdicm9rZW5fcmh5dGhtJykge2VsLmVuZENoYXIgPSBpbmRleDtyZXR1cm4gZWw7fVxuXHRcdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJyAnOlxuXHRcdFx0XHRjYXNlICdcXHQnOlxuXHRcdFx0XHRcdGlmIChpc0NvbXBsZXRlKHN0YXRlKSkge1xuXHRcdFx0XHRcdFx0ZWwuZW5kX2JlYW0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0Ly8gbG9vayBhaGVhZCB0byBzZWUgaWYgdGhlcmUgaXMgYSB0aWVcblx0XHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGluZGV4KSA9PT0gJy0nKVxuXHRcdFx0XHRcdFx0XHRcdGVsLnN0YXJ0VGllID0ge307XG5cdFx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHR9IHdoaWxlIChpbmRleCA8IGxpbmUubGVuZ3RoICYmICh0b2tlbml6ZXIuaXNXaGl0ZVNwYWNlKGxpbmUuY2hhckF0KGluZGV4KSkgfHwgbGluZS5jaGFyQXQoaW5kZXgpID09PSAnLScpKTtcblx0XHRcdFx0XHRcdGVsLmVuZENoYXIgPSBpbmRleDtcblx0XHRcdFx0XHRcdGlmICghZHVyYXRpb25TZXRCeVByZXZpb3VzTm90ZSAmJiBjYW5IYXZlQnJva2VuUmh5dGhtICYmIChsaW5lLmNoYXJBdChpbmRleCkgPT09ICc8JyB8fCBsaW5lLmNoYXJBdChpbmRleCkgPT09ICc+JykpIHtcdC8vIFRPRE8tUEVSOiBEb24ndCBuZWVkIHRoZSB0ZXN0IGZvciA8IGFuZCA+LCBidXQgdGhhdCBtYWtlcyB0aGUgZW5kQ2hhciB3b3JrIG91dCBmb3IgdGhlIHJlZ3Jlc3Npb24gdGVzdC5cblx0XHRcdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0XHRcdFx0c3RhdGUgPSAnYnJva2VuX3JoeXRobSc7XG5cdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbHNlIHJldHVybiBudWxsO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlICc+Jzpcblx0XHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdFx0aWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY2FuSGF2ZUJyb2tlblJoeXRobSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYnIyID0gZ2V0QnJva2VuUmh5dGhtKGxpbmUsIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0aW5kZXggKz0gYnIyWzBdIC0gMTtcdC8vIGluZGV4IGdldHMgaW5jcmVtZW50ZWQgYmVsb3csIHNvIHdlJ2xsIGxldCB0aGF0IGhhcHBlblxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiA9IGJyMlsyXTtcblx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBicjJbMV0qZWwuZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdHN0YXRlID0gJ2VuZF9zbHVyJztcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGVsLmVuZENoYXIgPSBpbmRleDtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7XG5cdFx0XHRcdFx0XHRlbC5lbmRDaGFyID0gaW5kZXg7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXHRcdFx0aW5kZXgrKztcblx0XHRcdGlmIChpbmRleCA9PT0gbGluZS5sZW5ndGgpIHtcblx0XHRcdFx0aWYgKGlzQ29tcGxldGUoc3RhdGUpKSB7ZWwuZW5kQ2hhciA9IGluZGV4O3JldHVybiBlbDt9XG5cdFx0XHRcdGVsc2UgcmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIHN0YXJ0TmV3TGluZSgpIHtcblx0XHR2YXIgcGFyYW1zID0geyBzdGFydENoYXI6IC0xLCBlbmRDaGFyOiAtMX07XG5cdFx0aWYgKG11bHRpbGluZVZhcnMucGFydEZvck5leHRMaW5lLnRpdGxlKVxuXHRcdFx0cGFyYW1zLnBhcnQgPSBtdWx0aWxpbmVWYXJzLnBhcnRGb3JOZXh0TGluZTtcblx0XHRwYXJhbXMuY2xlZiA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlICYmIG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtXS5jbGVmICE9PSB1bmRlZmluZWQgPyBwYXJzZUNvbW1vbi5jbG9uZShtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0uY2xlZikgOiBwYXJzZUNvbW1vbi5jbG9uZShtdWx0aWxpbmVWYXJzLmNsZWYpO1xuXHRcdHZhciBzY29yZVRyYW5zcG9zZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID8gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NvcmVUcmFuc3Bvc2UgOiAwO1xuXHRcdHBhcmFtcy5rZXkgPSBwYXJzZUtleVZvaWNlLnN0YW5kYXJkS2V5KG11bHRpbGluZVZhcnMua2V5LnJvb3QrbXVsdGlsaW5lVmFycy5rZXkuYWNjK211bHRpbGluZVZhcnMua2V5Lm1vZGUsIG11bHRpbGluZVZhcnMua2V5LnJvb3QsIG11bHRpbGluZVZhcnMua2V5LmFjYywgc2NvcmVUcmFuc3Bvc2UpO1xuXHRcdHBhcmFtcy5rZXkubW9kZSA9IG11bHRpbGluZVZhcnMua2V5Lm1vZGU7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscylcblx0XHRcdHBhcmFtcy5rZXkuaW1wbGllZE5hdHVyYWxzID0gbXVsdGlsaW5lVmFycy5rZXkuaW1wbGllZE5hdHVyYWxzO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgcGFyYW1zLmtleS5hY2NpZGVudGFscy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdGlmIChwYXJhbXMua2V5LmFjY2lkZW50YWxzW2pdLm5vdGUgPT09IG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHNbaV0ubm90ZSkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIG5vdGUgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdCwgb3ZlcnJpZGUgaXQgd2l0aCB0aGUgbmV3IHZhbHVlXG5cdFx0XHRcdFx0XHRwYXJhbXMua2V5LmFjY2lkZW50YWxzW2pdLmFjYyA9IG11bHRpbGluZVZhcnMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHNbaV0uYWNjO1xuXHRcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWZvdW5kKVxuXHRcdFx0XHRcdHBhcmFtcy5rZXkuYWNjaWRlbnRhbHMucHVzaChtdWx0aWxpbmVWYXJzLmtleS5leHBsaWNpdEFjY2lkZW50YWxzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0bXVsdGlsaW5lVmFycy50YXJnZXRLZXkgPSBwYXJhbXMua2V5O1xuXHRcdGlmIChwYXJhbXMua2V5LmV4cGxpY2l0QWNjaWRlbnRhbHMpXG5cdFx0XHRkZWxldGUgcGFyYW1zLmtleS5leHBsaWNpdEFjY2lkZW50YWxzO1xuXHRcdHBhcnNlS2V5Vm9pY2UuYWRkUG9zVG9LZXkocGFyYW1zLmNsZWYsIHBhcmFtcy5rZXkpO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLm1ldGVyICE9PSBudWxsKSB7XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UpIHtcblx0XHRcdFx0cGFyc2VDb21tb24uZWFjaChtdWx0aWxpbmVWYXJzLnN0YXZlcywgZnVuY3Rpb24oc3QpIHtcblx0XHRcdFx0XHRzdC5tZXRlciA9IG11bHRpbGluZVZhcnMubWV0ZXI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRwYXJhbXMubWV0ZXIgPSBtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0ubWV0ZXI7XG5cdFx0XHRcdG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtXS5tZXRlciA9IG51bGw7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0cGFyYW1zLm1ldGVyID0gbXVsdGlsaW5lVmFycy5tZXRlcjtcblx0XHRcdG11bHRpbGluZVZhcnMubWV0ZXIgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UgJiYgbXVsdGlsaW5lVmFycy5zdGF2ZXNbbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RhZmZOdW1dLm1ldGVyKSB7XG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBlYWNoIHZvaWNlIGdldHMgdGhlIG1ldGVyIG1hcmtpbmcuXG5cdFx0XHRwYXJhbXMubWV0ZXIgPSBtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0ubWV0ZXI7XG5cdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXZlc1ttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZk51bV0ubWV0ZXIgPSBudWxsO1xuXHRcdH1cblx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UgJiYgbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UubmFtZSlcblx0XHRcdHBhcmFtcy5uYW1lID0gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UubmFtZTtcblx0XHRpZiAobXVsdGlsaW5lVmFycy52b2NhbGZvbnQpXG5cdFx0XHRwYXJhbXMudm9jYWxmb250ID0gbXVsdGlsaW5lVmFycy52b2NhbGZvbnQ7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMudHJpcGxldGZvbnQpXG5cdFx0XHRwYXJhbXMudHJpcGxldGZvbnQgPSBtdWx0aWxpbmVWYXJzLnRyaXBsZXRmb250O1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLnN0eWxlKVxuXHRcdFx0cGFyYW1zLnN0eWxlID0gbXVsdGlsaW5lVmFycy5zdHlsZTtcblx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UpIHtcblx0XHRcdHZhciBzdGFmZiA9IG11bHRpbGluZVZhcnMuc3RhdmVzW211bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtXTtcblx0XHRcdGlmIChzdGFmZi5icmFjZSkgcGFyYW1zLmJyYWNlID0gc3RhZmYuYnJhY2U7XG5cdFx0XHRpZiAoc3RhZmYuYnJhY2tldCkgcGFyYW1zLmJyYWNrZXQgPSBzdGFmZi5icmFja2V0O1xuXHRcdFx0aWYgKHN0YWZmLmNvbm5lY3RCYXJMaW5lcykgcGFyYW1zLmNvbm5lY3RCYXJMaW5lcyA9IHN0YWZmLmNvbm5lY3RCYXJMaW5lcztcblx0XHRcdGlmIChzdGFmZi5uYW1lKSBwYXJhbXMubmFtZSA9IHN0YWZmLm5hbWVbbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXhdO1xuXHRcdFx0aWYgKHN0YWZmLnN1Ym5hbWUpIHBhcmFtcy5zdWJuYW1lID0gc3RhZmYuc3VibmFtZVttdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5pbmRleF07XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RlbSlcblx0XHRcdFx0cGFyYW1zLnN0ZW0gPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGVtO1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmbGluZXMpXG5cdFx0XHRcdHBhcmFtcy5zdGFmZmxpbmVzID0gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RhZmZsaW5lcztcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdGFmZnNjYWxlKVxuXHRcdFx0XHRwYXJhbXMuc3RhZmZzY2FsZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmc2NhbGU7XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc2NhbGUpXG5cdFx0XHRcdHBhcmFtcy5zY2FsZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnNjYWxlO1xuXHRcdFx0aWYgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0eWxlKVxuXHRcdFx0XHRwYXJhbXMuc3R5bGUgPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5zdHlsZTtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS50cmFuc3Bvc2UpXG5cdFx0XHRcdHBhcmFtcy5jbGVmLnRyYW5zcG9zZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnRyYW5zcG9zZTtcblx0XHR9XG5cdFx0dmFyIGlzRmlyc3RWb2ljZSA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID09PSB1bmRlZmluZWQgfHwgKG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtID09PSAgMCAmJiBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZS5pbmRleCA9PT0gIDApO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmJhck51bWJlcnMgPT09IDAgJiYgaXNGaXJzdFZvaWNlICYmIG11bHRpbGluZVZhcnMuY3VyckJhck51bWJlciAhPT0gMSlcblx0XHRcdHBhcmFtcy5iYXJOdW1iZXIgPSBtdWx0aWxpbmVWYXJzLmN1cnJCYXJOdW1iZXI7XG5cdFx0dHVuZS5zdGFydE5ld0xpbmUocGFyYW1zKTtcblx0XHRpZiAobXVsdGlsaW5lVmFycy5rZXkuaW1wbGllZE5hdHVyYWxzKVxuXHRcdFx0ZGVsZXRlIG11bHRpbGluZVZhcnMua2V5LmltcGxpZWROYXR1cmFscztcblxuXHRcdG11bHRpbGluZVZhcnMucGFydEZvck5leHRMaW5lID0ge307XG5cdH1cblxuXHR2YXIgbGV0dGVyX3RvX2dyYWNlID0gIGZ1bmN0aW9uKGxpbmUsIGkpIHtcblx0XHQvLyBHcmFjZSBub3RlcyBhcmUgYW4gYXJyYXkgb2Y6IHN0YXJ0c2x1ciwgbm90ZSwgZW5kc2x1ciwgc3BhY2U7IHdoZXJlIG5vdGUgaXMgYWNjaWRlbnRhbCwgcGl0Y2gsIGR1cmF0aW9uXG5cdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAneycpIHtcblx0XHRcdC8vIGZldGNoIHRoZSBncmFjZW5vdGVzIHN0cmluZyBhbmQgY29uc3VtZSB0aGF0IGludG8gdGhlIGFycmF5XG5cdFx0XHR2YXIgZ3JhID0gdG9rZW5pemVyLmdldEJyYWNrZXR0ZWRTdWJzdHJpbmcobGluZSwgaSwgMSwgJ30nKTtcblx0XHRcdGlmICghZ3JhWzJdKVxuXHRcdFx0XHR3YXJuKFwiTWlzc2luZyB0aGUgY2xvc2luZyAnfScgd2hpbGUgcGFyc2luZyBncmFjZSBub3RlXCIsIGxpbmUsIGkpO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBzbHVyIGFmdGVyIHRoZSBncmFjZSBjb25zdHJ1Y3Rpb24sIHRoZW4gbW92ZSBpdCB0byB0aGUgbGFzdCBub3RlIGluc2lkZSB0aGUgZ3JhY2UgY29uc3RydWN0aW9uXG5cdFx0XHRpZiAobGluZVtpK2dyYVswXV0gPT09ICcpJykge1xuXHRcdFx0XHRncmFbMF0rKztcblx0XHRcdFx0Z3JhWzFdICs9ICcpJztcblx0XHRcdH1cblxuXHRcdFx0dmFyIGdyYWNlbm90ZXMgPSBbXTtcblx0XHRcdHZhciBpaSA9IDA7XG5cdFx0XHR2YXIgaW5UaWUgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChpaSA8IGdyYVsxXS5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGFjY2lhY2NhdHVyYSA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoZ3JhWzFdLmNoYXJBdChpaSkgPT09ICcvJykge1xuXHRcdFx0XHRcdGFjY2lhY2NhdHVyYSA9IHRydWU7XG5cdFx0XHRcdFx0aWkrKztcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgbm90ZSA9IGdldENvcmVOb3RlKGdyYVsxXSwgaWksIHt9LCBmYWxzZSk7XG5cdFx0XHRcdGlmIChub3RlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0Ly8gVGhlIGdyYWNlIG5vdGUgZHVyYXRpb25zIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlIGRlZmF1bHQgbGVuZ3RoOiB0aGV5IHNob3VsZCBiZSBiYXNlZCBvbiAxLzE2LCBzbyBpZiB0aGF0IGlzbid0IHRoZSBkZWZhdWx0LCB0aGVuIG11bHRpcGx5IGhlcmUuXG5cdFx0XHRcdFx0bm90ZS5kdXJhdGlvbiA9IG5vdGUuZHVyYXRpb24gLyAobXVsdGlsaW5lVmFycy5kZWZhdWx0X2xlbmd0aCAqIDgpO1xuXHRcdFx0XHRcdGlmIChhY2NpYWNjYXR1cmEpXG5cdFx0XHRcdFx0XHRub3RlLmFjY2lhY2NhdHVyYSA9IHRydWU7XG5cdFx0XHRcdFx0Z3JhY2Vub3Rlcy5wdXNoKG5vdGUpO1xuXG5cdFx0XHRcdFx0aWYgKGluVGllKSB7XG5cdFx0XHRcdFx0XHRub3RlLmVuZFRpZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRpblRpZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobm90ZS5zdGFydFRpZSlcblx0XHRcdFx0XHRcdGluVGllID0gdHJ1ZTtcblxuXHRcdFx0XHRcdGlpICA9IG5vdGUuZW5kQ2hhcjtcblx0XHRcdFx0XHRkZWxldGUgbm90ZS5lbmRDaGFyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdC8vIFdlIHNob3VsZG4ndCBnZXQgYW55dGhpbmcgYnV0IG5vdGVzIG9yIGEgc3BhY2UgaGVyZSwgc28gcmVwb3J0IGFuIGVycm9yXG5cdFx0XHRcdFx0aWYgKGdyYVsxXS5jaGFyQXQoaWkpID09PSAnICcpIHtcblx0XHRcdFx0XHRcdGlmIChncmFjZW5vdGVzLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0XHRcdGdyYWNlbm90ZXNbZ3JhY2Vub3Rlcy5sZW5ndGgtMV0uZW5kX2JlYW0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0d2FybihcIlVua25vd24gY2hhcmFjdGVyICdcIiArIGdyYVsxXS5jaGFyQXQoaWkpICsgXCInIHdoaWxlIHBhcnNpbmcgZ3JhY2Ugbm90ZVwiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRpaSsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JhY2Vub3Rlcy5sZW5ndGgpXG5cdFx0XHRcdHJldHVybiBbZ3JhWzBdLCBncmFjZW5vdGVzXTtcblx0XHR9XG5cdFx0cmV0dXJuIFsgMCBdO1xuXHR9O1xuXG5cdGZ1bmN0aW9uIGxldHRlcl90b19vdmVybGF5KGxpbmUsIGkpIHtcblx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICcmJykge1xuXHRcdFx0dmFyIHN0YXJ0ID0gaTtcblx0XHRcdHdoaWxlIChsaW5lLmNoYXJBdChpKSAmJiBsaW5lLmNoYXJBdChpKSAhPT0gJzonICYmIGxpbmUuY2hhckF0KGkpICE9PSAnfCcpXG5cdFx0XHRcdGkrKztcblx0XHRcdHJldHVybiBbIGktc3RhcnQsIGxpbmUuc3Vic3RyaW5nKHN0YXJ0KzEsIGkpIF07XG5cdFx0fVxuXHRcdHJldHVybiBbIDAgXTtcblx0fVxuXG5cdGZ1bmN0aW9uIGR1cmF0aW9uT2ZNZWFzdXJlKG11bHRpbGluZVZhcnMpIHtcblx0XHQvLyBUT0RPLVBFUjogVGhpcyBjb3VsZCBiZSBtb3JlIGNvbXBsaWNhdGVkIGlmIG9uZSBvZiB0aGUgdW51c3VhbCBtZWFzdXJlcyBpcyB1c2VkLlxuXHRcdHZhciBtZXRlciA9IG11bHRpbGluZVZhcnMub3JpZ01ldGVyO1xuXHRcdGlmICghbWV0ZXIgfHwgbWV0ZXIudHlwZSAhPT0gJ3NwZWNpZmllZCcpXG5cdFx0XHRyZXR1cm4gMTtcblx0XHRpZiAoIW1ldGVyLnZhbHVlIHx8IG1ldGVyLnZhbHVlLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiAxO1xuXHRcdHJldHVybiBwYXJzZUludChtZXRlci52YWx1ZVswXS5udW0sIDEwKSAvIHBhcnNlSW50KG1ldGVyLnZhbHVlWzBdLmRlbiwgMTApO1xuXHR9XG5cblx0Ly9cblx0Ly8gUGFyc2UgbGluZSBvZiBtdXNpY1xuXHQvL1xuXHQvLyBUaGlzIGlzIGEgc3RyZWFtIG9mIDwoYmFyLW1hcmtpbmd8aGVhZGVyfG5vdGUtZ3JvdXApLi4uPiBpbiBhbnkgb3JkZXIsIHdpdGggb3B0aW9uYWwgc3BhY2VzIGJldHdlZW4gZWFjaCBlbGVtZW50XG5cdC8vIGNvcmUtbm90ZSBpcyA8b3Blbi1zbHVyLCBhY2NpZGVudGFsLCBwaXRjaDpyZXF1aXJlZCwgb2N0YXZlLCBkdXJhdGlvbiwgY2xvc2Utc2x1ciZ8dGllPiB3aXRoIG5vIHNwYWNlcyB3aXRoaW4gdGhhdFxuXHQvLyBjaG9yZCBpcyA8b3Blbi1icmFja2V0OnJlcXVpcmVkLCBjb3JlLW5vdGU6cmVxdWlyZWQuLi4gY2xvc2UtYnJhY2tldDpyZXF1aXJlZCBkdXJhdGlvbj4gd2l0aCBubyBzcGFjZXMgd2l0aGluIHRoYXRcblx0Ly8gZ3JhY2Utbm90ZXMgaXMgPG9wZW4tYnJhY2U6cmVxdWlyZWQsIChvcGVuLXNsdXJ8Y29yZS1ub3RlOnJlcXVpcmVkfGNsb3NlLXNsdXIpLi4uLCBjbG9zZS1icmFjZTpyZXF1aXJlZD4gc3BhY2VzIGFyZSBhbGxvd2VkXG5cdC8vIG5vdGUtZ3JvdXAgaXMgPGdyYWNlLW5vdGVzLCBjaG9yZCBzeW1ib2xzJnxkZWNvcmF0aW9ucy4uLiwgZ3JhY2Utbm90ZXMsIHNsdXImfHRyaXBsZXQsIGNob3JkfGNvcmUtbm90ZSwgZW5kLXNsdXJ8dGllPiBzcGFjZXMgYXJlIGFsbG93ZWQgYmV0d2VlbiBpdGVtc1xuXHQvLyBiYXItbWFya2luZyBpcyA8YW1wZXJzYW5kPiBvciA8Y2hvcmQgc3ltYm9scyZ8ZGVjb3JhdGlvbnMuLi4sIGJhcjpyZXF1aXJlZD4gc3BhY2VzIGFsbG93ZWRcblx0Ly8gaGVhZGVyIGlzIDxvcGVuLWJyYWNrZXQ6cmVxdWlyZWQsIEt8TXxMfFY6cmVxdWlyZWQsIGNvbG9uOnJlcXVpcmVkLCBmaWVsZDpyZXF1aXJlZCwgY2xvc2UtYnJhY2tldDpyZXF1aXJlZD4gc3BhY2VzIGNhbiBvY2N1ciBiZXR3ZWVuIHRoZSBjb2xvbiwgaW4gdGhlIGZpZWxkLCBhbmQgYmVmb3JlIHRoZSBjbG9zZSBicmFja2V0XG5cdC8vIGhlYWRlciBjYW4gYWxzbyBiZSB0aGUgb25seSB0aGluZyBvbiBhIGxpbmUuIFRoaXMgaXMgdHJ1ZSBldmVuIGlmIGl0IGlzIGEgY29udGludWF0aW9uIGxpbmUuIEluIHRoaXMgY2FzZSB0aGUgYnJhY2tldHMgYXJlIG5vdCByZXF1aXJlZC5cblx0Ly8gYSBzcGFjZSBpcyBhIGJhY2stdGljaywgYSBzcGFjZSwgb3IgYSB0YWIuIElmIGl0IGlzIGEgYmFjay10aWNrLCB0aGVuIHRoZXJlIGlzIG5vIGVuZC1iZWFtLlxuXG5cdC8vIExpbmUgcHJlcHJvY2Vzc2luZzogYW55dGhpbmcgYWZ0ZXIgYSAlIGlzIGlnbm9yZWQgKHRoZSBkb3VibGUgJSUgc2hvdWxkIGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mIGJlZm9yZSB0aGlzKVxuXHQvLyBUaGVuLCBhbGwgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSBpZ25vcmVkLlxuXHQvLyBJZiB0aGVyZSB3YXMgYSBsaW5lIGNvbnRpbnVhdGlvbiwgdGhlIFxcbiB3YXMgcmVwbGFjZWQgYnkgYSBcXHIgYW5kIHRoZSBcXCB3YXMgcmVwbGFjZWQgYnkgYSBzcGFjZS4gVGhpcyBhbGxvd3MgdGhlIGNvbnN0cnVjdFxuXHQvLyBvZiBoYXZpbmcgYSBoZWFkZXIgbWlkLWxpbmUgY29uY2VwdHVhbGx5LCBidXQgYWN0dWFsbHkgYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLiBUaGlzIGlzIGVxdWl2b2xlbnQgdG8gcHV0dGluZyB0aGUgaGVhZGVyIGluIFsgXS5cblxuXHQvLyBUT0RPLVBFUjogSG93IHRvIGhhbmRsZSAhIGZvciBsaW5lIGJyZWFrP1xuXHQvLyBUT0RPLVBFUjogZG90cyBiZWZvcmUgYmFyLCBkb3RzIGJlZm9yZSBzbHVyXG5cdC8vIFRPRE8tUEVSOiBVOiByZWRlZmluYWJsZSBzeW1ib2xzLlxuXG5cdC8vIEFtYmlndW91cyBzeW1ib2xzOlxuXHQvLyBcIltcIiBjYW4gYmUgdGhlIHN0YXJ0IG9mIGEgY2hvcmQsIHRoZSBzdGFydCBvZiBhIGhlYWRlciBlbGVtZW50IG9yIHBhcnQgb2YgYSBiYXIgbGluZS5cblx0Ly8gLS0tIGlmIGl0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwifFwiLCBpdCBpcyBhIGJhciBsaW5lXG5cdC8vIC0tLSBpZiBpdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBLOiBMOiBNOiBWOiBpdCBpcyBhIGhlYWRlciAobm90ZTogdGhlcmUgYXJlIG90aGVyIGhlYWRlcnMgbWVudGlvbmVkIGluIHRoZSBzdGFuZGFyZCwgYnV0IEknbSBub3Qgc3VyZSBob3cgdGhleSB3b3VsZCBiZSB1c2VkLilcblx0Ly8gLS0tIG90aGVyd2lzZSBpdCBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgY2hvcmRcblx0Ly8gXCIoXCIgY2FuIGJlIHRoZSBzdGFydCBvZiBhIHNsdXIgb3IgYSB0cmlwbGV0XG5cdC8vIC0tLSBpZiBpdCBpcyBmb2xsb3dlZCBieSBhIG51bWJlciBmcm9tIDItOSwgdGhlbiBpdCBpcyBhIHRyaXBsZXRcblx0Ly8gLS0tIG90aGVyd2lzZSBpdCBpcyBhIHNsdXJcblx0Ly8gXCJdXCJcblx0Ly8gLS0tIGlmIHRoZXJlIGlzIGEgY2hvcmQgb3BlbiwgdGhlbiB0aGlzIGlzIHRoZSBjbG9zZVxuXHQvLyAtLS0gaWYgaXQgaXMgYWZ0ZXIgYSBbfCwgdGhlbiBpdCBpcyBhbiBpbnZpc2libGUgYmFyIGxpbmVcblx0Ly8gLS0tIG90aGVyd2lzZSwgaXQgaXMgcGFyIG9mIGEgYmFyXG5cdC8vIFwiLlwiIGNhbiBiZSBhIGJhciBtb2RpZmllciBvciBhIHNsdXIgbW9kaWZpZXIsIG9yIGEgZGVjb3JhdGlvblxuXHQvLyAtLS0gaWYgaXQgY29tZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGEgYmFyLCBpdCBpcyBhIGJhciBtb2RpZmllclxuXHQvLyAtLS0gaWYgaXQgY29tZXMgaW1tZWRpYXRlbHkgYmVmb3JlIGEgc2x1ciwgaXQgaXMgYSBzbHVyIG1vZGlmaWVyXG5cdC8vIC0tLSBvdGhlcndpc2UgaXQgaXMgYSBkZWNvcmF0aW9uIGZvciB0aGUgbmV4dCBub3RlLlxuXHQvLyBudW1iZXI6XG5cdC8vIC0tLSBpZiBpdCBpcyBhZnRlciBhIGJhciwgd2l0aCBubyBzcGFjZSwgaXQgaXMgYW4gZW5kaW5nIG1hcmtlclxuXHQvLyAtLS0gaWYgaXQgaXMgYWZ0ZXIgYSAoIHdpdGggbm8gc3BhY2UsIGl0IGlzIGEgdHJpcGxldCBjb3VudFxuXHQvLyAtLS0gaWYgaXQgaXMgYWZ0ZXIgYSBwaXRjaCBvciBvY3RhdmUgb3Igc2xhc2gsIHRoZW4gaXQgaXMgYSBkdXJhdGlvblxuXG5cdC8vIFVuYW1iaWd1b3VzIHN5bWJvbHMgKGV4Y2VwdCBpbnNpZGUgcXVvdGVkIHN0cmluZ3MpOlxuXHQvLyB2ZXJ0aWNhbC1iYXIsIGNvbG9uOiBwYXJ0IG9mIGEgYmFyXG5cdC8vIEFCQ0RFRkdhYmNkZWZnOiBwaXRjaFxuXHQvLyB4eXpaOiByZXN0XG5cdC8vIGNvbW1hLCBwcmltZTogb2N0YXZlXG5cdC8vIGNsb3NlLXBhcmVuOiBlbmQtc2x1clxuXHQvLyBoeXBoZW46IHRpZVxuXHQvLyB0aWxkZSwgdiwgdSwgYmFuZywgcGx1cywgVEhMTVBTTzogZGVjb3JhdGlvblxuXHQvLyBjYXJhdCwgdW5kZXJzY29yZSwgZXF1YWw6IGFjY2lkZW50YWxcblx0Ly8gYW1wZXJzYW5kOiB0aW1lIHJlc2V0XG5cdC8vIG9wZW4tY3VybHksIGNsb3NlLWN1cmx5OiBncmFjZSBub3Rlc1xuXHQvLyBkb3VibGUtcXVvdGU6IGNob3JkIHN5bWJvbFxuXHQvLyBsZXNzLXRoYW4sIGdyZWF0ZXItdGhhbiwgc2xhc2g6IGR1cmF0aW9uXG5cdC8vIGJhY2stdGljaywgc3BhY2UsIHRhYjogc3BhY2Vcblx0dmFyIG5vbkRlY29yYXRpb25zID0gXCJBQkNERUZHYWJjZGVmZ3h5elpbXXxeX3tcIjtcdC8vIHVzZSB0aGlzIHRvIHByZXNjcmVlbiBzbyB3ZSBkb24ndCBoYXZlIHRvIGxvb2sgZm9yIGEgZGVjb3JhdGlvbiBhdCBldmVyeSBub3RlLlxuXG5cdHZhciBwYXJzZVJlZ3VsYXJNdXNpY0xpbmUgPSBmdW5jdGlvbihsaW5lKSB7XG5cdFx0aGVhZGVyLnJlc29sdmVUZW1wbygpO1xuXHRcdC8vbXVsdGlsaW5lVmFycy5oYXZlbnRfc2V0X2xlbmd0aCA9IGZhbHNlO1x0Ly8gVG8gbGF0ZSB0byBzZXQgdGhpcyBub3cuXG5cdFx0bXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgPSBmYWxzZTtcdC8vIFdlIHNob3VsZCBoYXZlIGdvdHRlbiBhIGtleSBoZWFkZXIgYnkgbm93LCBidXQganVzdCBpbiBjYXNlLCB0aGlzIGlzIGRlZmluaXRlbHkgb3V0IG9mIHRoZSBoZWFkZXIuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBzdGFydE9mTGluZSA9IG11bHRpbGluZVZhcnMuaUNoYXI7XG5cdFx0Ly8gc2VlIGlmIHRoZXJlIGlzIG5vdGhpbmcgYnV0IGEgY29tbWVudCBvbiB0aGlzIGxpbmUuIElmIHNvLCBqdXN0IGlnbm9yZSBpdC4gQSBmdWxsIGxpbmUgY29tbWVudCBpcyBvcHRpb25hbCB3aGl0ZSBzcGFjZSBmb2xsb3dlZCBieSAlXG5cdFx0d2hpbGUgKHRva2VuaXplci5pc1doaXRlU3BhY2UobGluZS5jaGFyQXQoaSkpICYmIGkgPCBsaW5lLmxlbmd0aClcblx0XHRcdGkrKztcblx0XHRpZiAoaSA9PT0gbGluZS5sZW5ndGggfHwgbGluZS5jaGFyQXQoaSkgPT09ICclJylcblx0XHRcdHJldHVybjtcblxuXHRcdC8vIFN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIHN0YWZmLCBjbGVmIGFuZCBrZXkgc3ltYm9scyBvbiBlYWNoIGxpbmVcblx0XHR2YXIgZGVsYXlTdGFydE5ld0xpbmUgPSBtdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmNvbnRpbnVlYWxsID09PSB1bmRlZmluZWQpXG5cdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lID0gdHJ1ZTtcblx0XHRlbHNlXG5cdFx0XHRtdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lID0gZmFsc2U7XG5cdFx0dmFyIHRyaXBsZXROb3Rlc0xlZnQgPSAwO1xuXG5cdFx0Ly8gU2VlIGlmIHRoZSBsaW5lIHN0YXJ0cyB3aXRoIGEgaGVhZGVyIGZpZWxkXG5cdFx0dmFyIHJldEhlYWRlciA9IGhlYWRlci5sZXR0ZXJfdG9fYm9keV9oZWFkZXIobGluZSwgaSk7XG5cdFx0aWYgKHJldEhlYWRlclswXSA+IDApIHtcblx0XHRcdGkgKz0gcmV0SGVhZGVyWzBdO1xuXHRcdFx0aWYgKHJldEhlYWRlclsxXSA9PT0gJ1YnKVxuXHRcdFx0XHRkZWxheVN0YXJ0TmV3TGluZSA9IHRydWU7IC8vIGZpeGVzIGJ1ZyBvbiB0aGlzOiBjW1Y6Ml1kXG5cdFx0XHQvLyBUT0RPLVBFUjogSGFuZGxlIGlubGluZSBoZWFkZXJzXG5cdFx0fVxuXHRcdHZhciBlbCA9IHsgfTtcblxuXHRcdHZhciBvdmVybGF5TGV2ZWwgPSAwO1xuXHRcdHdoaWxlIChpIDwgbGluZS5sZW5ndGgpXG5cdFx0e1xuXHRcdFx0dmFyIHN0YXJ0SSA9IGk7XG5cdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICclJylcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdHZhciByZXRJbmxpbmVIZWFkZXIgPSBoZWFkZXIubGV0dGVyX3RvX2lubGluZV9oZWFkZXIobGluZSwgaSk7XG5cdFx0XHRpZiAocmV0SW5saW5lSGVhZGVyWzBdID4gMCkge1xuXHRcdFx0XHRcdGkgKz0gcmV0SW5saW5lSGVhZGVyWzBdO1xuXHRcdFx0XHRcdGlmIChyZXRJbmxpbmVIZWFkZXJbMV0gPT09ICdWJylcblx0XHRcdFx0XHRcdGRlbGF5U3RhcnROZXdMaW5lID0gdHJ1ZTsgLy8gZml4ZXMgYnVnIG9uIHRoaXM6IGNbVjoyXWRcblx0XHRcdFx0XHQvLyBUT0RPLVBFUjogSGFuZGxlIGlubGluZSBoZWFkZXJzXG5cdFx0XHRcdFx0Ly9tdWx0aWxpbmVWYXJzLnN0YXJ0X25ld19saW5lID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBXYWl0IHVudGlsIGhlcmUgdG8gYWN0dWFsbHkgc3RhcnQgdGhlIGxpbmUgYmVjYXVzZSB3ZSBrbm93IHdlJ3JlIHBhc3QgdGhlIGlubGluZSBzdGF0ZW1lbnRzLlxuXHRcdFx0XHRpZiAoZGVsYXlTdGFydE5ld0xpbmUpIHtcblx0XHRcdFx0XHRzdGFydE5ld0xpbmUoKTtcblx0XHRcdFx0XHRkZWxheVN0YXJ0TmV3TGluZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBkZWNpZGUgaWYgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGFyZSBhIGJhci1tYXJraW5nIG9yIGEgbm90ZS1ncm91cC5cblx0XHRcdFx0Ly8gVW5mb3J0dW5hdGVseSwgdGhhdCBpcyBhbWJpZ3VvdXMuIEJvdGggY2FuIGNvbnRhaW4gY2hvcmQgc3ltYm9scyBhbmQgZGVjb3JhdGlvbnMuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgZ3JhY2Ugbm90ZSBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBjaG9yZCBzeW1ib2xzIGFuZCBkZWNvcmF0aW9ucywgdGhlbiBpdCBpcyBkZWZpbml0ZWx5IGEgbm90ZS1ncm91cC5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBiYXIgbWFya2VyLCBpdCBpcyBkZWZpbml0ZWx5IGEgYmFyLW1hcmtpbmcuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGVpdGhlciBhIGNvcmUtbm90ZSBvciBjaG9yZCwgaXQgaXMgZGVmaW5pdGVseSBhIG5vdGUtZ3JvdXAuXG5cdFx0XHRcdC8vIFNvLCBsb29wIHdoaWxlIHdlIGZpbmQgZ3JhY2Utbm90ZXMsIGNob3Jkcy1zeW1ib2xzLCBvciBkZWNvcmF0aW9ucy4gW0l0IGlzIGFuIGVycm9yIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBncmFjZS1ub3RlIGdyb3VwIGluIGEgcm93OyB0aGUgb3RoZXJzIGNhbiBiZSBtdWx0aXBsZV1cblx0XHRcdFx0Ly8gVGhlbiwgaWYgdGhlcmUgaXMgYSBncmFjZS1ub3RlLCB3ZSBrbm93IHdoZXJlIHRvIGdvLlxuXHRcdFx0XHQvLyBFbHNlIHNlZSBpZiB3ZSBoYXZlIGEgY2hvcmQsIGNvcmUtbm90ZSwgc2x1ciwgdHJpcGxldCwgb3IgYmFyLlxuXG5cdFx0XHRcdHZhciByZXQ7XG5cdFx0XHRcdHdoaWxlICgxKSB7XG5cdFx0XHRcdFx0cmV0ID0gdG9rZW5pemVyLmVhdFdoaXRlU3BhY2UobGluZSwgaSk7XG5cdFx0XHRcdFx0aWYgKHJldCA+IDApIHtcblx0XHRcdFx0XHRcdGkgKz0gcmV0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgbGluZS5jaGFyQXQoaS0xKSA9PT0gJ1xceDEyJykge1xuXHRcdFx0XHRcdFx0Ly8gdGhlcmUgaXMgb25lIGNhc2Ugd2hlcmUgYSBsaW5lIGNvbnRpbnVhdGlvbiBpc24ndCB0aGUgc2FtZSBhcyBiZWluZyBvbiB0aGUgc2FtZSBsaW5lLCBhbmQgdGhhdCBpcyBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgYWZ0ZXIgaXQgaXMgYSBoZWFkZXIuXG5cdFx0XHRcdFx0XHRyZXQgPSBoZWFkZXIubGV0dGVyX3RvX2JvZHlfaGVhZGVyKGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdFx0aWYgKHJldFsxXSA9PT0gJ1YnKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0TmV3TGluZSgpOyAvLyBmaXhlcyBidWcgb24gdGhpczogY1xcXFxuVjoyXVxcXFxuZFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpbnNlcnQgaGVhZGVyIGhlcmVcblx0XHRcdFx0XHRcdFx0aSA9IHJldFswXTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5zdGFydF9uZXdfbGluZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBnYXRoZXIgYWxsIHRoZSBncmFjZSBub3RlcywgY2hvcmQgc3ltYm9scyBhbmQgZGVjb3JhdGlvbnNcblx0XHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fc3BhY2VyKGxpbmUsIGkpO1xuXHRcdFx0XHRcdGlmIChyZXRbMF0gPiAwKSB7XG5cdFx0XHRcdFx0XHRpICs9IHJldFswXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fY2hvcmQobGluZSwgaSk7XG5cdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgY2hvcmQgaGVyZSBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IHBvc2l0aW9ucy5cblx0XHRcdFx0XHRcdC8vIElmIHR3byBjaG9yZHMgaGF2ZSB0aGUgc2FtZSBwb3NpdGlvbiwgdGhlbiBjb25uZWN0IHRoZW0gd2l0aCBuZXdsaW5lLlxuXHRcdFx0XHRcdFx0aWYgKCFlbC5jaG9yZClcblx0XHRcdFx0XHRcdFx0ZWwuY2hvcmQgPSBbXTtcblx0XHRcdFx0XHRcdHZhciBjaG9yZE5hbWUgPSB0b2tlbml6ZXIudHJhbnNsYXRlU3RyaW5nKHJldFsxXSk7XG5cdFx0XHRcdFx0XHRjaG9yZE5hbWUgPSBjaG9yZE5hbWUucmVwbGFjZSgvOy9nLCBcIlxcblwiKTtcblx0XHRcdFx0XHRcdHZhciBhZGRlZENob3JkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBjaSA9IDA7IGNpIDwgZWwuY2hvcmQubGVuZ3RoOyBjaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbC5jaG9yZFtjaV0ucG9zaXRpb24gPT09IHJldFsyXSkge1xuXHRcdFx0XHRcdFx0XHRcdGFkZGVkQ2hvcmQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGVsLmNob3JkW2NpXS5uYW1lICs9IFwiXFxuXCIgKyBjaG9yZE5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhZGRlZENob3JkID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRpZiAocmV0WzJdID09PSBudWxsICYmIHJldFszXSlcblx0XHRcdFx0XHRcdFx0XHRlbC5jaG9yZC5wdXNoKHtuYW1lOiBjaG9yZE5hbWUsIHJlbF9wb3NpdGlvbjogcmV0WzNdfSk7XG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRlbC5jaG9yZC5wdXNoKHtuYW1lOiBjaG9yZE5hbWUsIHBvc2l0aW9uOiByZXRbMl19KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aSArPSByZXRbMF07XG5cdFx0XHRcdFx0XHR2YXIgaWkgPSB0b2tlbml6ZXIuc2tpcFdoaXRlU3BhY2UobGluZS5zdWJzdHJpbmcoaSkpO1xuXHRcdFx0XHRcdFx0aWYgKGlpID4gMClcblx0XHRcdFx0XHRcdFx0ZWwuZm9yY2VfZW5kX2JlYW1fbGFzdCA9IHRydWU7XG5cdFx0XHRcdFx0XHRpICs9IGlpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAobm9uRGVjb3JhdGlvbnMuaW5kZXhPZihsaW5lLmNoYXJBdChpKSkgPT09IC0xKVxuXHRcdFx0XHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fYWNjZW50KGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0ZWxzZSByZXQgPSBbIDAgXTtcblx0XHRcdFx0XHRcdGlmIChyZXRbMF0gPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChyZXRbMV0gPT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaSArIDEgPCBsaW5lLmxlbmd0aClcblx0XHRcdFx0XHRcdFx0XHRcdHN0YXJ0TmV3TGluZSgpO1x0Ly8gVGhlcmUgd2FzIGEgISBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsaW5lLiBTdGFydCBhIG5ldyBsaW5lIGlmIHRoZXJlIGlzIGFueXRoaW5nIGFmdGVyIGl0LlxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHJldFsxXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHJldFsxXS5pbmRleE9mKFwic3R5bGU9XCIpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5zdHlsZSA9IHJldFsxXS5zdWJzdHIoNik7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbC5kZWNvcmF0aW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmRlY29yYXRpb24gPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmRlY29yYXRpb24ucHVzaChyZXRbMV0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpICs9IHJldFswXTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldCA9IGxldHRlcl90b19ncmFjZShsaW5lLCBpKTtcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IEJlIHN1cmUgdGhlcmUgYXJlbid0IGFscmVhZHkgZ3JhY2Ugbm90ZXMgZGVmaW5lZC4gVGhhdCBpcyBhbiBlcnJvci5cblx0XHRcdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRlbC5ncmFjZW5vdGVzID0gcmV0WzFdO1xuXHRcdFx0XHRcdFx0XHRcdGkgKz0gcmV0WzBdO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBsZXR0ZXJfdG9fYmFyKGxpbmUsIGkpO1xuXHRcdFx0XHRpZiAocmV0WzBdID4gMCkge1xuXHRcdFx0XHRcdC8vIFRoaXMgaXMgZGVmaW5pdGVseSBhIGJhclxuXHRcdFx0XHRcdG92ZXJsYXlMZXZlbCA9IDA7XG5cdFx0XHRcdFx0aWYgKGVsLmdyYWNlbm90ZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Ly8gQXR0YWNoIHRoZSBncmFjZSBub3RlIHRvIGFuIGludmlzaWJsZSBub3RlXG5cdFx0XHRcdFx0XHRlbC5yZXN0ID0geyB0eXBlOiAnc3BhY2VyJyB9O1xuXHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSAwLjEyNTsgLy8gVE9ETy1QRVI6IEkgZG9uJ3QgdGhpbmsgdGhlIGR1cmF0aW9uIG9mIHRoaXMgbWF0dGVycyBtdWNoLCBidXQgZmlndXJlIG91dCBpZiBpdCBkb2VzLlxuXHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5hZGRGb3JtYXR0aW5nT3B0aW9ucyhlbCwgdHVuZS5mb3JtYXR0aW5nLCAnbm90ZScpO1xuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRFbGVtZW50KCdub3RlJywgc3RhcnRPZkxpbmUraSwgc3RhcnRPZkxpbmUraStyZXRbMF0sIGVsKTtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMubWVhc3VyZU5vdEVtcHR5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGVsID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBiYXIgPSB7dHlwZTogcmV0WzFdfTtcblx0XHRcdFx0XHRpZiAoYmFyLnR5cGUubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdFx0d2FybihcIlVua25vd24gYmFyIHR5cGVcIiwgbGluZSwgaSk7XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5pbkVuZGluZyAmJiBiYXIudHlwZSAhPT0gJ2Jhcl90aGluJykge1xuXHRcdFx0XHRcdFx0XHRiYXIuZW5kRW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pbkVuZGluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKHJldFsyXSkge1xuXHRcdFx0XHRcdFx0XHRiYXIuc3RhcnRFbmRpbmcgPSByZXRbMl07XG5cdFx0XHRcdFx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmluRW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRcdGJhci5lbmRFbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmluRW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChlbC5kZWNvcmF0aW9uICE9PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdGJhci5kZWNvcmF0aW9uID0gZWwuZGVjb3JhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChlbC5jaG9yZCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRiYXIuY2hvcmQgPSBlbC5jaG9yZDtcblx0XHRcdFx0XHRcdGlmIChiYXIuc3RhcnRFbmRpbmcgJiYgbXVsdGlsaW5lVmFycy5iYXJGaXJzdEVuZGluZ051bSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmJhckZpcnN0RW5kaW5nTnVtID0gbXVsdGlsaW5lVmFycy5jdXJyQmFyTnVtYmVyO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoYmFyLnN0YXJ0RW5kaW5nICYmIGJhci5lbmRFbmRpbmcgJiYgbXVsdGlsaW5lVmFycy5iYXJGaXJzdEVuZGluZ051bSlcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5jdXJyQmFyTnVtYmVyID0gbXVsdGlsaW5lVmFycy5iYXJGaXJzdEVuZGluZ051bTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKGJhci5lbmRFbmRpbmcpXG5cdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuYmFyRmlyc3RFbmRpbmdOdW0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRpZiAoYmFyLnR5cGUgIT09ICdiYXJfaW52aXNpYmxlJyAmJiBtdWx0aWxpbmVWYXJzLm1lYXN1cmVOb3RFbXB0eSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgaXNGaXJzdFZvaWNlID0gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UgPT09IHVuZGVmaW5lZCB8fCAobXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2Uuc3RhZmZOdW0gPT09ICAwICYmIG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLmluZGV4ID09PSAgMCk7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0ZpcnN0Vm9pY2UpIHtcblx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLmN1cnJCYXJOdW1iZXIrKztcblx0XHRcdFx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5iYXJOdW1iZXJzICYmIG11bHRpbGluZVZhcnMuY3VyckJhck51bWJlciAlIG11bHRpbGluZVZhcnMuYmFyTnVtYmVycyA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRcdGJhci5iYXJOdW1iZXIgPSBtdWx0aWxpbmVWYXJzLmN1cnJCYXJOdW1iZXI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuYWRkRm9ybWF0dGluZ09wdGlvbnMoZWwsIHR1bmUuZm9ybWF0dGluZywgJ2JhcicpO1xuXHRcdFx0XHRcdFx0dHVuZS5hcHBlbmRFbGVtZW50KCdiYXInLCBzdGFydE9mTGluZStpLCBzdGFydE9mTGluZStpK3JldFswXSwgYmFyKTtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMubWVhc3VyZU5vdEVtcHR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRlbCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpICs9IHJldFswXTtcblx0XHRcdFx0XHR2YXIgY3YgPSBtdWx0aWxpbmVWYXJzLmN1cnJlbnRWb2ljZSA/IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlLnN0YWZmTnVtICsgJy0nICsgbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXggOiAnT05MWSc7XG5cdFx0XHRcdFx0Ly8gaWYgKG11bHRpbGluZVZhcnMubGluZUJyZWFrcykge1xuXHRcdFx0XHRcdC8vIFx0aWYgKCFtdWx0aWxpbmVWYXJzLmJhckNvdW50ZXJbY3ZdKVxuXHRcdFx0XHRcdC8vIFx0XHRtdWx0aWxpbmVWYXJzLmJhckNvdW50ZXJbY3ZdID0gMDtcblx0XHRcdFx0XHQvLyBcdHZhciBicmVha05vdyA9IG11bHRpbGluZVZhcnMubGluZUJyZWFrc1snJyttdWx0aWxpbmVWYXJzLmJhckNvdW50ZXJbY3ZdXTtcblx0XHRcdFx0XHQvLyBcdG11bHRpbGluZVZhcnMuYmFyQ291bnRlcltjdl0rKztcblx0XHRcdFx0XHQvLyBcdGlmIChicmVha05vdylcblx0XHRcdFx0XHQvLyBcdFx0c3RhcnROZXdMaW5lKCk7XG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHR9IGVsc2UgaWYgKGxpbmVbaV0gPT09ICcmJykge1x0Ly8gYmFja3RyYWNrIHRvIGJlZ2lubmluZyBvZiBtZWFzdXJlXG5cdFx0XHRcdFx0cmV0ID0gbGV0dGVyX3RvX292ZXJsYXkobGluZSwgaSk7XG5cdFx0XHRcdFx0aWYgKHJldFswXSA+IDApIHtcblx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kRWxlbWVudCgnb3ZlcmxheScsIHN0YXJ0T2ZMaW5lLCBzdGFydE9mTGluZSsxLCB7fSk7XG5cdFx0XHRcdFx0XHRpICs9IDE7XG5cdFx0XHRcdFx0XHRvdmVybGF5TGV2ZWwrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUaGlzIGlzIGRlZmluaXRlbHkgYSBub3RlIGdyb3VwXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHQvLyBMb29rIGZvciBhcyBtYW55IG9wZW4gc2x1cnMgYW5kIHRyaXBsZXRzIGFzIHRoZXJlIGFyZS4gKE5vdGU6IG9ubHkgdGhlIGZpcnN0IHRyaXBsZXQgaXMgdmFsaWQuKVxuXHRcdFx0XHRcdHJldCA9IGxldHRlcl90b19vcGVuX3NsdXJzX2FuZF90cmlwbGV0cyhsaW5lLCBpKTtcblx0XHRcdFx0XHRpZiAocmV0LmNvbnN1bWVkID4gMCkge1xuXHRcdFx0XHRcdFx0aWYgKHJldC5zdGFydFNsdXIgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0ZWwuc3RhcnRTbHVyID0gcmV0LnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdGlmIChyZXQudHJpcGxldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGlmICh0cmlwbGV0Tm90ZXNMZWZ0ID4gMClcblx0XHRcdFx0XHRcdFx0XHR3YXJuKFwiQ2FuJ3QgbmVzdCB0cmlwbGV0c1wiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwuc3RhcnRUcmlwbGV0ID0gcmV0LnRyaXBsZXQ7XG5cdFx0XHRcdFx0XHRcdFx0ZWwudHJpcGxldE11bHRpcGxpZXIgPSByZXQudHJpcGxldFEgLyByZXQudHJpcGxldDtcblx0XHRcdFx0XHRcdFx0XHR0cmlwbGV0Tm90ZXNMZWZ0ID0gcmV0Lm51bV9ub3RlcyA9PT0gdW5kZWZpbmVkID8gcmV0LnRyaXBsZXQgOiByZXQubnVtX25vdGVzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpICs9IHJldC5jb25zdW1lZDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBoYW5kbGUgY2hvcmRzLlxuXHRcdFx0XHRcdGlmIChsaW5lLmNoYXJBdChpKSA9PT0gJ1snKSB7XG5cdFx0XHRcdFx0XHR2YXIgY2hvcmRTdGFydENoYXIgPSBpO1xuXHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdFx0dmFyIGNob3JkRHVyYXRpb24gPSBudWxsO1xuXHRcdFx0XHRcdFx0dmFyIHJlbWVtYmVyRW5kQmVhbSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0XHR2YXIgZG9uZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCFkb25lKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhY2NlbnQgPSBsZXR0ZXJfdG9fYWNjZW50KGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzBdID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdGkgKz0gYWNjZW50WzBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIGNob3JkTm90ZSA9IGdldENvcmVOb3RlKGxpbmUsIGksIHt9LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChjaG9yZE5vdGUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzBdID4gMCkgeyAvLyBJZiB3ZSBmb3VuZCBhIGRlY29yYXRpb24gYWJvdmUsIGl0IG1vZGlmaWVzIHRoZSBlbnRpcmUgY2hvcmQuIFwic3R5bGVcIiBpcyBoYW5kbGVkIGJlbG93LlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFjY2VudFsxXS5pbmRleE9mKFwic3R5bGU9XCIpICE9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbC5kZWNvcmF0aW9uID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZGVjb3JhdGlvbiA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5kZWNvcmF0aW9uLnB1c2goYWNjZW50WzFdKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNob3JkTm90ZS5lbmRfYmVhbSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuZW5kX2JlYW0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNob3JkTm90ZS5lbmRfYmVhbTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsLnBpdGNoZXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBjaG9yZE5vdGUuZHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5waXRjaGVzID0gWyBjaG9yZE5vdGUgXTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2VcdC8vIEp1c3QgaWdub3JlIHRoZSBub3RlIGxlbmd0aHMgb2YgYWxsIGJ1dCB0aGUgZmlyc3Qgbm90ZS4gVGhlIHN0YW5kYXJkIGlzbid0IGNsZWFyIGhlcmUsIGJ1dCB0aGlzIHNlZW1zIGxlc3MgY29uZnVzaW5nLlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlcy5wdXNoKGNob3JkTm90ZSk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNob3JkTm90ZS5kdXJhdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzBdID4gMCkgeyAvLyBJZiB3ZSBmb3VuZCBhIHN0eWxlIGFib3ZlLCBpdCBtb2RpZmllcyB0aGUgaW5kaXZpZHVhbCBwaXRjaCwgbm90IHRoZSBlbnRpcmUgY2hvcmQuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoYWNjZW50WzFdLmluZGV4T2YoXCJzdHlsZT1cIikgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1tlbC5waXRjaGVzLmxlbmd0aC0xXS5zdHlsZSA9IGFjY2VudFsxXS5zdWJzdHIoNik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG11bHRpbGluZVZhcnMuaW5UaWVDaG9yZFtlbC5waXRjaGVzLmxlbmd0aF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNob3JkTm90ZS5lbmRUaWUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5pblRpZUNob3JkW2VsLnBpdGNoZXMubGVuZ3RoXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNob3JkTm90ZS5zdGFydFRpZSlcblx0XHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaW5UaWVDaG9yZFtlbC5waXRjaGVzLmxlbmd0aF0gPSB0cnVlO1xuXG5cdFx0XHRcdFx0XHRcdFx0aSAgPSBjaG9yZE5vdGUuZW5kQ2hhcjtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgY2hvcmROb3RlLmVuZENoYXI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAobGluZS5jaGFyQXQoaSkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFNwYWNlcyBhcmUgbm90IGFsbG93ZWQgaW4gY2hvcmRzLCBidXQgd2UgY2FuIHJlY292ZXIgZnJvbSBpdCBieSBpZ25vcmluZyBpdC5cblx0XHRcdFx0XHRcdFx0XHR3YXJuKFwiU3BhY2VzIGFyZSBub3QgYWxsb3dlZCBpbiBjaG9yZHNcIiwgbGluZSwgaSk7XG5cdFx0XHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpIDwgbGluZS5sZW5ndGggJiYgbGluZS5jaGFyQXQoaSkgPT09ICddJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gY29uc3VtZSB0aGUgY2xvc2UgYnJhY2tldFxuXHRcdFx0XHRcdFx0XHRcdFx0aSsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5uZXh0X25vdGVfZHVyYXRpb24gIT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBlbC5kdXJhdGlvbiAqIG11bHRpbGluZVZhcnMubmV4dF9ub3RlX2R1cmF0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIGVsKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGVsLnBpdGNoZXMsIGZ1bmN0aW9uKHBpdGNoKSB7IHBpdGNoLmVuZFRpZSA9IHRydWU7IH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRJc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIGZhbHNlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRyaXBsZXROb3Rlc0xlZnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyaXBsZXROb3Rlc0xlZnQtLTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRyaXBsZXROb3Rlc0xlZnQgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5lbmRUcmlwbGV0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcG9zdENob3JkRG9uZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0d2hpbGUgKGkgPCBsaW5lLmxlbmd0aCAmJiAhcG9zdENob3JkRG9uZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGxpbmUuY2hhckF0KGkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnICc6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnXFx0Jzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFkZEVuZEJlYW0oZWwpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnKSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWwuZW5kU2x1ciA9PT0gdW5kZWZpbmVkKSBlbC5lbmRTbHVyID0gMTsgZWxzZSBlbC5lbmRTbHVyKys7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlICctJzpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlQ29tbW9uLmVhY2goZWwucGl0Y2hlcywgZnVuY3Rpb24ocGl0Y2gpIHsgcGl0Y2guc3RhcnRUaWUgPSB7fTsgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXRJc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnPic6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAnPCc6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgYnIyID0gZ2V0QnJva2VuUmh5dGhtKGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSArPSBicjJbMF0gLSAxO1x0Ly8gaW5kZXggZ2V0cyBpbmNyZW1lbnRlZCBiZWxvdywgc28gd2UnbGwgbGV0IHRoYXQgaGFwcGVuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm5leHRfbm90ZV9kdXJhdGlvbiA9IGJyMlsyXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChjaG9yZER1cmF0aW9uKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaG9yZER1cmF0aW9uID0gY2hvcmREdXJhdGlvbiAqIGJyMlsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hvcmREdXJhdGlvbiA9IGJyMlsxXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzEnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzInOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzMnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzQnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzYnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzcnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzgnOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJzknOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgJy8nOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGZyYWN0aW9uID0gdG9rZW5pemVyLmdldEZyYWN0aW9uKGxpbmUsIGkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hvcmREdXJhdGlvbiA9IGZyYWN0aW9uLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSA9IGZyYWN0aW9uLmluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KGkpID09PSAnICcpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbWVtYmVyRW5kQmVhbSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgPT09ICctJyB8fCBsaW5lLmNoYXJBdChpKSA9PT0gJyknIHx8IGxpbmUuY2hhckF0KGkpID09PSAnICcgfHwgbGluZS5jaGFyQXQoaSkgPT09ICc8JyB8fCBsaW5lLmNoYXJBdChpKSA9PT0gJz4nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpLS07IC8vIFN1YnRyYWN0aW5nIG9uZSBiZWNhdXNlIG9uZSBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGJlbG93XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBvc3RDaG9yZERvbmUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBvc3RDaG9yZERvbmUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFwb3N0Q2hvcmREb25lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHR3YXJuKFwiRXhwZWN0ZWQgJ10nIHRvIGVuZCB0aGUgY2hvcmRzXCIsIGxpbmUsIGkpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGVsLnBpdGNoZXMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGNob3JkRHVyYXRpb24gIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuZHVyYXRpb24gPSBlbC5kdXJhdGlvbiAqIGNob3JkRHVyYXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChyZW1lbWJlckVuZEJlYW0pXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWRkRW5kQmVhbShlbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuYWRkRm9ybWF0dGluZ09wdGlvbnMoZWwsIHR1bmUuZm9ybWF0dGluZywgJ25vdGUnKTtcblx0XHRcdFx0XHRcdFx0XHRcdHR1bmUuYXBwZW5kRWxlbWVudCgnbm90ZScsIHN0YXJ0T2ZMaW5lK2Nob3JkU3RhcnRDaGFyLCBzdGFydE9mTGluZStpLCBlbCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLm1lYXN1cmVOb3RFbXB0eSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbCA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkb25lID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFNpbmdsZSBwaXRjaFxuXHRcdFx0XHRcdFx0dmFyIGVsMiA9IHt9O1xuXHRcdFx0XHRcdFx0dmFyIGNvcmUgPSBnZXRDb3JlTm90ZShsaW5lLCBpLCBlbDIsIHRydWUpO1xuXHRcdFx0XHRcdFx0aWYgKGVsMi5lbmRUaWUgIT09IHVuZGVmaW5lZCkgc2V0SXNJblRpZShtdWx0aWxpbmVWYXJzLCAgb3ZlcmxheUxldmVsLCB0cnVlKTtcblx0XHRcdFx0XHRcdGlmIChjb3JlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChjb3JlLnBpdGNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRlbC5waXRjaGVzID0gWyB7IH0gXTtcblx0XHRcdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogc3RyYWlnaHRlbiB0aGlzIG91dCBzbyB0aGVyZSBpcyBub3Qgc28gbXVjaCBjb3B5aW5nOiBnZXRDb3JlTm90ZSBzaG91bGRuJ3QgY2hhbmdlIGUnXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuYWNjaWRlbnRhbCAhPT0gdW5kZWZpbmVkKSBlbC5waXRjaGVzWzBdLmFjY2lkZW50YWwgPSBjb3JlLmFjY2lkZW50YWw7XG5cdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1swXS5waXRjaCA9IGNvcmUucGl0Y2g7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUubWlkaXBpdGNoKVxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwucGl0Y2hlc1swXS5taWRpcGl0Y2ggPSBjb3JlLm1pZGlwaXRjaDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRTbHVyICE9PSB1bmRlZmluZWQpIGVsLnBpdGNoZXNbMF0uZW5kU2x1ciA9IGNvcmUuZW5kU2x1cjtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRUaWUgIT09IHVuZGVmaW5lZCkgZWwucGl0Y2hlc1swXS5lbmRUaWUgPSBjb3JlLmVuZFRpZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5zdGFydFNsdXIgIT09IHVuZGVmaW5lZCkgZWwucGl0Y2hlc1swXS5zdGFydFNsdXIgPSBjb3JlLnN0YXJ0U2x1cjtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWwuc3RhcnRTbHVyICE9PSB1bmRlZmluZWQpIGVsLnBpdGNoZXNbMF0uc3RhcnRTbHVyID0gZWwuc3RhcnRTbHVyO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjb3JlLnN0YXJ0VGllICE9PSB1bmRlZmluZWQpIGVsLnBpdGNoZXNbMF0uc3RhcnRUaWUgPSBjb3JlLnN0YXJ0VGllO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbC5zdGFydFRpZSAhPT0gdW5kZWZpbmVkKSBlbC5waXRjaGVzWzBdLnN0YXJ0VGllID0gZWwuc3RhcnRUaWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZWwucmVzdCA9IGNvcmUucmVzdDtcblx0XHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRTbHVyICE9PSB1bmRlZmluZWQpIGVsLmVuZFNsdXIgPSBjb3JlLmVuZFNsdXI7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuZW5kVGllICE9PSB1bmRlZmluZWQpIGVsLnJlc3QuZW5kVGllID0gY29yZS5lbmRUaWU7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuc3RhcnRTbHVyICE9PSB1bmRlZmluZWQpIGVsLnN0YXJ0U2x1ciA9IGNvcmUuc3RhcnRTbHVyO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChjb3JlLnN0YXJ0VGllICE9PSB1bmRlZmluZWQpIGVsLnJlc3Quc3RhcnRUaWUgPSBjb3JlLnN0YXJ0VGllO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbC5zdGFydFRpZSAhPT0gdW5kZWZpbmVkKSBlbC5yZXN0LnN0YXJ0VGllID0gZWwuc3RhcnRUaWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoY29yZS5jaG9yZCAhPT0gdW5kZWZpbmVkKSBlbC5jaG9yZCA9IGNvcmUuY2hvcmQ7XG5cdFx0XHRcdFx0XHRcdGlmIChjb3JlLmR1cmF0aW9uICE9PSB1bmRlZmluZWQpIGVsLmR1cmF0aW9uID0gY29yZS5kdXJhdGlvbjtcblx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuZGVjb3JhdGlvbiAhPT0gdW5kZWZpbmVkKSBlbC5kZWNvcmF0aW9uID0gY29yZS5kZWNvcmF0aW9uO1xuXHRcdFx0XHRcdFx0XHRpZiAoY29yZS5ncmFjZU5vdGVzICE9PSB1bmRlZmluZWQpIGVsLmdyYWNlTm90ZXMgPSBjb3JlLmdyYWNlTm90ZXM7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBlbC5zdGFydFNsdXI7XG5cdFx0XHRcdFx0XHRcdGlmIChpc0luVGllKG11bHRpbGluZVZhcnMsICBvdmVybGF5TGV2ZWwsIGVsKSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChlbC5waXRjaGVzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnBpdGNoZXNbMF0uZW5kVGllID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsLnJlc3QudHlwZSAhPT0gJ3NwYWNlcicpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVsLnJlc3QuZW5kVGllID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0c2V0SXNJblRpZShtdWx0aWxpbmVWYXJzLCAgb3ZlcmxheUxldmVsLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGNvcmUuc3RhcnRUaWUgfHwgZWwuc3RhcnRUaWUpXG5cdFx0XHRcdFx0XHRcdFx0c2V0SXNJblRpZShtdWx0aWxpbmVWYXJzLCAgb3ZlcmxheUxldmVsLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0aSAgPSBjb3JlLmVuZENoYXI7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHRyaXBsZXROb3Rlc0xlZnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dHJpcGxldE5vdGVzTGVmdC0tO1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0cmlwbGV0Tm90ZXNMZWZ0ID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5lbmRUcmlwbGV0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoY29yZS5lbmRfYmVhbSlcblx0XHRcdFx0XHRcdFx0XHRhZGRFbmRCZWFtKGVsKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIHdob2xlIHJlc3QsIHRoZW4gaXQgc2hvdWxkIGJlIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWVhc3VyZSwgbm90IGl0J3Mgb3duIGR1cmF0aW9uLiBXZSBuZWVkIHRvIHNwZWNpYWwgY2FzZSBpdC5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHRpbWUgc2lnbmF0dXJlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNC80LCB0aG91Z2gsIHRoZW4gYSB3aG9sZSByZXN0IGhhcyBubyBzcGVjaWFsIHRyZWF0bWVudC5cblx0XHRcdFx0XHRcdFx0aWYgKGVsLnJlc3QgJiYgZWwucmVzdC50eXBlID09PSAncmVzdCcgJiYgZWwuZHVyYXRpb24gPT09IDEgJiYgZHVyYXRpb25PZk1lYXN1cmUobXVsdGlsaW5lVmFycykgPD0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGVsLnJlc3QudHlwZSA9ICd3aG9sZSc7XG5cblx0XHRcdFx0XHRcdFx0XHRlbC5kdXJhdGlvbiA9IGR1cmF0aW9uT2ZNZWFzdXJlKG11bHRpbGluZVZhcnMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5hZGRGb3JtYXR0aW5nT3B0aW9ucyhlbCwgdHVuZS5mb3JtYXR0aW5nLCAnbm90ZScpO1xuXHRcdFx0XHRcdFx0XHR0dW5lLmFwcGVuZEVsZW1lbnQoJ25vdGUnLCBzdGFydE9mTGluZStzdGFydEksIHN0YXJ0T2ZMaW5lK2ksIGVsKTtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy5tZWFzdXJlTm90RW1wdHkgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRlbCA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChpID09PSBzdGFydEkpIHtcdC8vIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzLCBzbyBpZ25vcmUgaXQuXG5cdFx0XHRcdFx0XHRpZiAobGluZS5jaGFyQXQoaSkgIT09ICcgJyAmJiBsaW5lLmNoYXJBdChpKSAhPT0gJ2AnKVxuXHRcdFx0XHRcdFx0XHR3YXJuKFwiVW5rbm93biBjaGFyYWN0ZXIgaWdub3JlZFwiLCBsaW5lLCBpKTtcblx0XHRcdFx0XHRcdGkrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGlzSW5UaWUgPSBmdW5jdGlvbihtdWx0aWxpbmVWYXJzLCBvdmVybGF5TGV2ZWwsIGVsKSB7XG5cdFx0aWYgKG11bHRpbGluZVZhcnMuaW5UaWVbb3ZlcmxheUxldmVsXSA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdC8vIElmIHRoaXMgaXMgc2luZ2xlIHZvaWNlIG11c2ljIHRoZW4gdGhlIHZvaWNlIGluZGV4IGlzbid0IHNldCwgc28gd2UgdXNlIHRoZSBmaXJzdCB2b2ljZS5cblx0XHR2YXIgdm9pY2VJbmRleCA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID8gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXggOiAwO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmluVGllW292ZXJsYXlMZXZlbF1bdm9pY2VJbmRleF0pIHtcblx0XHRcdGlmIChlbC5waXRjaGVzICE9PSB1bmRlZmluZWQgfHwgZWwucmVzdC50eXBlICE9PSAnc3BhY2VyJylcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcblxuXHR2YXIgc2V0SXNJblRpZSA9ZnVuY3Rpb24obXVsdGlsaW5lVmFycywgb3ZlcmxheUxldmVsLCB2YWx1ZSkge1xuXHRcdC8vIElmIHRoaXMgaXMgc2luZ2xlIHZvaWNlIG11c2ljIHRoZW4gdGhlIHZvaWNlIGluZGV4IGlzbid0IHNldCwgc28gd2UgdXNlIHRoZSBmaXJzdCB2b2ljZS5cblx0XHR2YXIgdm9pY2VJbmRleCA9IG11bHRpbGluZVZhcnMuY3VycmVudFZvaWNlID8gbXVsdGlsaW5lVmFycy5jdXJyZW50Vm9pY2UuaW5kZXggOiAwO1xuXHRcdGlmIChtdWx0aWxpbmVWYXJzLmluVGllW292ZXJsYXlMZXZlbF0gPT09IHVuZGVmaW5lZClcblx0XHRcdG11bHRpbGluZVZhcnMuaW5UaWVbb3ZlcmxheUxldmVsXSA9IFtdO1xuXHRcdG11bHRpbGluZVZhcnMuaW5UaWVbb3ZlcmxheUxldmVsXVt2b2ljZUluZGV4XSA9IHZhbHVlO1xuXHR9O1xuXG5cdHZhciBwYXJzZUxpbmUgPSBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dmFyIHJldCA9IGhlYWRlci5wYXJzZUhlYWRlcihsaW5lKTtcblx0XHRpZiAocmV0LnJlZ3VsYXIpXG5cdFx0XHRwYXJzZVJlZ3VsYXJNdXNpY0xpbmUocmV0LnN0cik7XG5cdFx0aWYgKHJldC5uZXdsaW5lKVxuXHRcdFx0c3RhcnROZXdMaW5lKCk7XG5cdFx0aWYgKHJldC53b3Jkcylcblx0XHRcdGFkZFdvcmRzKHR1bmUuZ2V0Q3VycmVudFZvaWNlKCksIGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRpZiAocmV0LnN5bWJvbHMpXG5cdFx0XHRhZGRTeW1ib2xzKHR1bmUuZ2V0Q3VycmVudFZvaWNlKCksIGxpbmUuc3Vic3RyaW5nKDIpKTtcblx0XHRpZiAocmV0LnJlY3Vyc2UpXG5cdFx0XHRwYXJzZUxpbmUocmV0LnN0cik7XG5cdH07XG5cblx0ZnVuY3Rpb24gYXBwZW5kTGFzdE1lYXN1cmUodm9pY2UsIG5leHRWb2ljZSkge1xuXHRcdHZvaWNlLnB1c2goe1xuXHRcdFx0ZWxfdHlwZTogJ2hpbnQnXG5cdFx0fSk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Vm9pY2UubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtZW50ID0gbmV4dFZvaWNlW2ldO1xuXHRcdFx0dmFyIGhpbnQgPSBwYXJzZUNvbW1vbi5jbG9uZShlbGVtZW50KTtcblx0XHRcdHZvaWNlLnB1c2goaGludCk7XG5cdFx0XHRpZiAoZWxlbWVudC5lbF90eXBlID09PSAnYmFyJylcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYWRkSGludE1lYXN1cmUoc3RhZmYsIG5leHRTdGFmZikge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RhZmYubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBzdGF2ZSA9IHN0YWZmW2ldO1xuXHRcdFx0dmFyIG5leHRTdGF2ZSA9IG5leHRTdGFmZltpXTtcblx0XHRcdGlmIChuZXh0U3RhdmUpIHsgLy8gQmUgc3VyZSB0aGVyZSBpcyB0aGUgc2FtZSBudW1iZXIgb2Ygc3RhdmVzIG9uIHRoZSBuZXh0IGxpbmUuXG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgbmV4dFN0YXZlLnZvaWNlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdHZhciBuZXh0Vm9pY2UgPSBuZXh0U3RhdmUudm9pY2VzW2pdO1xuXHRcdFx0XHRcdHZhciB2b2ljZSA9IHN0YXZlLnZvaWNlc1tqXTtcblx0XHRcdFx0XHRpZiAodm9pY2UpIHsgLy8gQmUgc3VyZSB0aGVyZSBhcmUgdGhlIHNhbWUgbnVtYmVyIG9mIHZvaWNlcyBvbiB0aGUgcHJldmlvdXMgbGluZS5cblx0XHRcdFx0XHRcdGFwcGVuZExhc3RNZWFzdXJlKHZvaWNlLCBuZXh0Vm9pY2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZEhpbnRNZWFzdXJlcygpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHR1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsaW5lID0gdHVuZS5saW5lc1tpXS5zdGFmZjtcblx0XHRcdGlmIChsaW5lKSB7XG5cdFx0XHRcdHZhciBqID0gaSsxO1xuXHRcdFx0XHR3aGlsZSAoaiA8IHR1bmUubGluZXMubGVuZ3RoICYmIHR1bmUubGluZXNbal0uc3RhZmYgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRqKys7XG5cdFx0XHRcdGlmIChqIDwgdHVuZS5saW5lcy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgbmV4dExpbmUgPSB0dW5lLmxpbmVzW2pdLnN0YWZmO1xuXHRcdFx0XHRcdGFkZEhpbnRNZWFzdXJlKGxpbmUsIG5leHRMaW5lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMucGFyc2UgPSBmdW5jdGlvbihzdHJUdW5lLCBzd2l0Y2hlcywgc3RhcnRQb3MpIHtcblx0XHQvLyB0aGUgc3dpdGNoZXMgYXJlIG9wdGlvbmFsIGFuZCBjYXVzZSBhIGRpZmZlcmVuY2UgaW4gdGhlIHdheSB0aGUgdHVuZSBpcyBwYXJzZWQuXG5cdFx0Ly8gc3dpdGNoZXMuaGVhZGVyX29ubHkgOiBzdG9wIHBhcnNpbmcgd2hlbiB0aGUgaGVhZGVyIGlzIGZpbmlzaGVkXG5cdFx0Ly8gc3dpdGNoZXMuc3RvcF9vbl93YXJuaW5nIDogc3RvcCBhdCB0aGUgZmlyc3Qgd2FybmluZyBlbmNvdW50ZXJlZC5cblx0XHQvLyBzd2l0Y2hlcy5wcmludDogZm9ybWF0IGZvciB0aGUgcGFnZSBpbnN0ZWFkIG9mIHRoZSBicm93c2VyLlxuXHRcdC8vIHN3aXRjaGVzLmZvcm1hdDogYSBoYXNoIG9mIHRoZSBkZXNpcmVkIGZvcm1hdHRpbmcgY29tbWFuZHMuXG5cdFx0Ly8gc3dpdGNoZXMuaGludF9tZWFzdXJlczogcHV0IHRoZSBuZXh0IG1lYXN1cmUgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsaW5lLlxuXHRcdC8vIHN3aXRjaGVzLnRyYW5zcG9zZTogY2hhbmdlIHRoZSBrZXkgc2lnbmF0dXJlLCBjaG9yZHMsIGFuZCBub3RlcyBieSBhIG51bWJlciBvZiBoYWxmLXN0ZXBzLlxuXHRcdGlmICghc3dpdGNoZXMpIHN3aXRjaGVzID0ge307XG5cdFx0aWYgKCFzdGFydFBvcykgc3RhcnRQb3MgPSAwO1xuXHRcdHR1bmUucmVzZXQoKTtcblx0XHRpZiAoc3dpdGNoZXMucHJpbnQpXG5cdFx0XHR0dW5lLm1lZGlhID0gJ3ByaW50Jztcblx0XHRtdWx0aWxpbmVWYXJzLnJlc2V0KCk7XG5cdFx0bXVsdGlsaW5lVmFycy5pQ2hhciA9IHN0YXJ0UG9zO1xuXHRcdGlmIChzd2l0Y2hlcy52aXN1YWxUcmFuc3Bvc2UpIHtcblx0XHRcdG11bHRpbGluZVZhcnMuZ2xvYmFsVHJhbnNwb3NlID0gcGFyc2VJbnQoc3dpdGNoZXMudmlzdWFsVHJhbnNwb3NlKTtcblx0XHRcdGlmIChtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZSA9PT0gMClcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5nbG9iYWxUcmFuc3Bvc2UgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlXG5cdFx0XHRtdWx0aWxpbmVWYXJzLmdsb2JhbFRyYW5zcG9zZSA9IHVuZGVmaW5lZDtcblx0XHRpZiAoc3dpdGNoZXMubGluZUJyZWFrcykge1xuXHRcdFx0Ly8gY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIHRoZSBsaW5lIGJyZWFrcyBmb3IgZWFzeSB0ZXN0aW5nLlxuXHRcdFx0Ly8gVGhlIGxpbmUgYnJlYWsgbnVtYmVycyBhcmUgMC1iYXNlZCBhbmQgdGhleSByZWZsZWN0IHRoZSBsYXN0IG1lYXN1cmUgb2YgdGhlIGN1cnJlbnQgbGluZS5cblx0XHRcdG11bHRpbGluZVZhcnMubGluZUJyZWFrcyA9IHt9O1xuXHRcdFx0Ly9tdWx0aWxpbmVWYXJzLmNvbnRpbnVlYWxsID0gdHJ1ZTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3dpdGNoZXMubGluZUJyZWFrcy5sZW5ndGg7IGkrKylcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5saW5lQnJlYWtzWycnKyhzd2l0Y2hlcy5saW5lQnJlYWtzW2ldKzEpXSA9IHRydWU7IC8vIEFkZCAxIHNvIHRoYXQgdGhlIGxpbmUgYnJlYWsgaXMgdGhlIGZpcnN0IG1lYXN1cmUgb2YgdGhlIG5leHQgbGluZS5cblx0XHR9XG5cdFx0aGVhZGVyLnJlc2V0KHRva2VuaXplciwgd2FybiwgbXVsdGlsaW5lVmFycywgdHVuZSk7XG5cblx0XHQvLyBUYWtlIGNhcmUgb2Ygd2hhdGV2ZXIgbGluZSBlbmRpbmdzIGNvbWUgb3VyIHdheVxuXHRcdHN0clR1bmUgPSBwYXJzZUNvbW1vbi5nc3ViKHN0clR1bmUsICdcXHJcXG4nLCAnXFxuJyk7XG5cdFx0c3RyVHVuZSA9IHBhcnNlQ29tbW9uLmdzdWIoc3RyVHVuZSwgJ1xccicsICdcXG4nKTtcblx0XHRzdHJUdW5lICs9ICdcXG4nO1x0Ly8gVGFja2VkIG9uIHRlbXBvcmFyaWx5IHRvIG1ha2UgdGhlIGxhc3QgbGluZSBjb250aW51YXRpb24gd29ya1xuXHRcdHN0clR1bmUgPSBzdHJUdW5lLnJlcGxhY2UoL1xcblxcXFwuKlxcbi9nLCBcIlxcblwiKTtcdC8vIGdldCByaWQgb2YgbGF0ZXggY29tbWFuZHMuXG5cdFx0dmFyIGNvbnRpbnVhdGlvblJlcGxhY2VtZW50ID0gZnVuY3Rpb24oYWxsLCBiYWNrc2xhc2gsIGNvbW1lbnQpe1xuXHRcdFx0dmFyIHNwYWNlcyA9IFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjtcblx0XHRcdHZhciBwYWRkaW5nID0gY29tbWVudCA/IHNwYWNlcy5zdWJzdHJpbmcoMCwgY29tbWVudC5sZW5ndGgpIDogXCJcIjtcblx0XHRcdHJldHVybiBiYWNrc2xhc2ggKyBcIiBcXHgxMlwiICsgcGFkZGluZztcblx0XHR9O1xuXHRcdHN0clR1bmUgPSBzdHJUdW5lLnJlcGxhY2UoL1xcXFwoWyBcXHRdKikoJS4qKSpcXG4vZywgY29udGludWF0aW9uUmVwbGFjZW1lbnQpO1x0Ly8gdGFrZSBjYXJlIG9mIGxpbmUgY29udGludWF0aW9ucyByaWdodCBhd2F5LCBidXQga2VlcCB0aGUgc2FtZSBudW1iZXIgb2YgY2hhcmFjdGVyc1xuXHRcdHZhciBsaW5lcyA9IHN0clR1bmUuc3BsaXQoJ1xcbicpO1xuXHRcdGlmIChwYXJzZUNvbW1vbi5sYXN0KGxpbmVzKS5sZW5ndGggPT09IDApXHQvLyByZW1vdmUgdGhlIGJsYW5rIGxpbmUgd2UgYWRkZWQgYWJvdmUuXG5cdFx0XHRsaW5lcy5wb3AoKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHN3aXRjaGVzLmZvcm1hdCkge1xuXHRcdFx0XHRwYXJzZURpcmVjdGl2ZS5nbG9iYWxGb3JtYXR0aW5nKHN3aXRjaGVzLmZvcm1hdCk7XG5cdFx0XHR9XG5cdFx0XHRwYXJzZUNvbW1vbi5lYWNoKGxpbmVzLCAgZnVuY3Rpb24obGluZSkge1xuXHRcdFx0XHRpZiAoc3dpdGNoZXMuaGVhZGVyX29ubHkgJiYgbXVsdGlsaW5lVmFycy5pc19pbl9oZWFkZXIgPT09IGZhbHNlKVxuXHRcdFx0XHRcdHRocm93IFwibm9ybWFsX2Fib3J0XCI7XG5cdFx0XHRcdGlmIChzd2l0Y2hlcy5zdG9wX29uX3dhcm5pbmcgJiYgbXVsdGlsaW5lVmFycy53YXJuaW5ncylcblx0XHRcdFx0XHR0aHJvdyBcIm5vcm1hbF9hYm9ydFwiO1xuXHRcdFx0XHRpZiAobXVsdGlsaW5lVmFycy5pc19pbl9oaXN0b3J5KSB7XG5cdFx0XHRcdFx0aWYgKGxpbmUuY2hhckF0KDEpID09PSAnOicpIHtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaXNfaW5faGlzdG9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0cGFyc2VMaW5lKGxpbmUpO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0dHVuZS5hZGRNZXRhVGV4dChcImhpc3RvcnlcIiwgdG9rZW5pemVyLnRyYW5zbGF0ZVN0cmluZyh0b2tlbml6ZXIuc3RyaXBDb21tZW50KGxpbmUpKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5pblRleHRCbG9jaykge1xuXHRcdFx0XHRcdGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKGxpbmUsIFwiJSVlbmR0ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHQvL3R1bmUuYWRkTWV0YVRleHQoXCJ0ZXh0QmxvY2tcIiwgbXVsdGlsaW5lVmFycy50ZXh0QmxvY2spO1xuXHRcdFx0XHRcdFx0dHVuZS5hZGRUZXh0KG11bHRpbGluZVZhcnMudGV4dEJsb2NrKTtcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaW5UZXh0QmxvY2sgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChsaW5lLCBcIiUlXCIpKVxuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmVWYXJzLnRleHRCbG9jayArPSAnICcgKyBsaW5lLnN1YnN0cmluZygyKTtcblx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lVmFycy50ZXh0QmxvY2sgKz0gJyAnICsgbGluZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAobXVsdGlsaW5lVmFycy5pblBzQmxvY2spIHtcblx0XHRcdFx0XHRpZiAocGFyc2VDb21tb24uc3RhcnRzV2l0aChsaW5lLCBcIiUlZW5kcHNcIikpIHtcblx0XHRcdFx0XHRcdC8vIEp1c3QgaWdub3JlIHBvc3RzY3JpcHRcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMuaW5Qc0Jsb2NrID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdG11bHRpbGluZVZhcnMudGV4dEJsb2NrICs9ICcgJyArIGxpbmU7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdHBhcnNlTGluZShsaW5lKTtcblx0XHRcdFx0bXVsdGlsaW5lVmFycy5pQ2hhciArPSBsaW5lLmxlbmd0aCArIDE7XG5cdFx0XHR9KTtcblx0XHRcdHZhciBwaCA9IDExKjcyO1xuXHRcdFx0dmFyIHBsID0gOC41KjcyO1xuXHRcdFx0c3dpdGNoIChtdWx0aWxpbmVWYXJzLnBhcGVyc2l6ZSkge1xuXHRcdFx0XHQvL2Nhc2UgXCJsZXR0ZXJcIjogcGggPSAxMSo3MjsgcGwgPSA4LjUqNzI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibGVnYWxcIjogcGggPSAxNCo3MjsgcGwgPSA4LjUqNzI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiQTRcIjogcGggPSAxMS43KjcyOyBwbCA9IDguMyo3MjsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAobXVsdGlsaW5lVmFycy5sYW5kc2NhcGUpIHtcblx0XHRcdFx0dmFyIHggPSBwaDtcblx0XHRcdFx0cGggPSBwbDtcblx0XHRcdFx0cGwgPSB4O1xuXHRcdFx0fVxuXHRcdFx0bXVsdGlsaW5lVmFycy5vcGVuU2x1cnMgPSB0dW5lLmNsZWFuVXAocGwsIHBoLCBtdWx0aWxpbmVWYXJzLmJhcnNwZXJzdGFmZiwgbXVsdGlsaW5lVmFycy5zdGFmZm5vbm90ZSwgbXVsdGlsaW5lVmFycy5vcGVuU2x1cnMpO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0aWYgKGVyciAhPT0gXCJub3JtYWxfYWJvcnRcIilcblx0XHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0XHRpZiAoc3dpdGNoZXMuaGludF9tZWFzdXJlcykge1xuXHRcdFx0YWRkSGludE1lYXN1cmVzKCk7XG5cdFx0fVxuXG5cdFx0d3JhcC53cmFwTGluZXModHVuZSwgbXVsdGlsaW5lVmFycy5saW5lQnJlYWtzKTtcblx0fTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUGFyc2U7XG4iLCIvLyAgICBhYmNfdHVuZWJvb2suanM6IHNwbGl0cyBhIHN0cmluZyByZXByZXNlbnRpbmcgQUJDIE11c2ljIE5vdGF0aW9uIGludG8gaW5kaXZpZHVhbCB0dW5lcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IFBhdWwgUm9zZW4gKHBhdWwgYXQgcGF1bHJvc2VuIGRvdCBuZXQpXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbi8qZ2xvYmFsIGRvY3VtZW50ICovXG4vKmdsb2JhbCB3aW5kb3csIEFCQ0pTLCBjb25zb2xlICovXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19jb21tb24nKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19wYXJzZScpO1xuXG52YXIgdHVuZWJvb2sgPSB7fTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR0dW5lYm9vay5udW1iZXJPZlR1bmVzID0gZnVuY3Rpb24oYWJjKSB7XG5cdFx0dmFyIHR1bmVzID0gYWJjLnNwbGl0KFwiXFxuWDpcIik7XG5cdFx0dmFyIG51bSA9IHR1bmVzLmxlbmd0aDtcblx0XHRpZiAobnVtID09PSAwKSBudW0gPSAxO1xuXHRcdHJldHVybiBudW07XG5cdH07XG5cblx0dmFyIFR1bmVCb29rID0gdHVuZWJvb2suVHVuZUJvb2sgPSBmdW5jdGlvbihib29rKSB7XG5cdFx0dmFyIFRoaXMgPSB0aGlzO1xuXHRcdHZhciBkaXJlY3RpdmVzID0gXCJcIjtcblx0XHRib29rID0gcGFyc2VDb21tb24uc3RyaXAoYm9vayk7XG5cdFx0dmFyIHR1bmVzID0gYm9vay5zcGxpdChcIlxcblg6XCIpO1xuXHRcdGZvciAodmFyIGkgPSAxOyBpIDwgdHVuZXMubGVuZ3RoOyBpKyspXHQvLyBQdXQgYmFjayB0aGUgWDogdGhhdCB3ZSBsb3N0IHdoZW4gc3BsaXR0aW5nIHRoZSB0dW5lcy5cblx0XHRcdHR1bmVzW2ldID0gXCJYOlwiICsgdHVuZXNbaV07XG5cdFx0Ly8gS2VlcCB0cmFjayBvZiB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGVhY2ggdHVuZSBzdGFydHMgd2l0aC5cblx0XHR2YXIgcG9zID0gMDtcblx0XHRUaGlzLnR1bmVzID0gW107XG5cdFx0cGFyc2VDb21tb24uZWFjaCh0dW5lcywgZnVuY3Rpb24odHVuZSkge1xuXHRcdFx0VGhpcy50dW5lcy5wdXNoKHsgYWJjOiB0dW5lLCBzdGFydFBvczogcG9zfSk7XG5cdFx0XHRwb3MgKz0gdHVuZS5sZW5ndGggKyAxOyAvLyBXZSBhbHNvIGxvc3QgYSBuZXdsaW5lIHdoZW4gc3BsaXR0aW5nLCBzbyBjb3VudCB0aGF0LlxuXHRcdH0pO1xuXHRcdGlmIChUaGlzLnR1bmVzLmxlbmd0aCA+IDEgJiYgIXBhcnNlQ29tbW9uLnN0YXJ0c1dpdGgoVGhpcy50dW5lc1swXS5hYmMsICdYOicpKSB7XHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSB0dW5lLCB0aGUgWDogbWlnaHQgYmUgbWlzc2luZywgb3RoZXJ3aXNlIGFzc3VtZSB0aGUgdG9wIG9mIHRoZSBmaWxlIGlzIFwiaW50ZXJ0dW5lXCJcblx0XHRcdC8vIFRoZXJlIGNvdWxkIGJlIGZpbGUtd2lkZSBkaXJlY3RpdmVzIGluIHRoaXMsIGlmIHNvLCB3ZSBuZWVkIHRvIGluc2VydCBpdCBpbnRvIGVhY2ggdHVuZS4gV2UgY2FuIHByb2JhYmx5IGdldCBhd2F5IHdpdGhcblx0XHRcdC8vIGp1c3QgbG9va2luZyBmb3IgZmlsZS13aWRlIGRpcmVjdGl2ZXMgaGVyZSAoYmVmb3JlIHRoZSBmaXJzdCB0dW5lKSBhbmQgaW5zZXJ0aW5nIHRoZW0gYXQgdGhlIGJvdHRvbSBvZiBlYWNoIHR1bmUsIHNpbmNlXG5cdFx0XHQvLyB0aGUgdHVuZSBpcyBwYXJzZWQgYWxsIGF0IG9uY2UuIFRoZSBkaXJlY3RpdmVzIHdpbGwgYmUgc2VlbiBiZWZvcmUgdGhlIGVuZ3JhdmVyIGJlZ2lucyBwcm9jZXNzaW5nLlxuXHRcdFx0dmFyIGRpciA9IFRoaXMudHVuZXMuc2hpZnQoKTtcblx0XHRcdHZhciBhcnJEaXIgPSBkaXIuYWJjLnNwbGl0KCdcXG4nKTtcblx0XHRcdHBhcnNlQ29tbW9uLmVhY2goYXJyRGlyLCBmdW5jdGlvbihsaW5lKSB7XG5cdFx0XHRcdGlmIChwYXJzZUNvbW1vbi5zdGFydHNXaXRoKGxpbmUsICclJScpKVxuXHRcdFx0XHRcdGRpcmVjdGl2ZXMgKz0gbGluZSArICdcXG4nO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdFRoaXMuaGVhZGVyID0gZGlyZWN0aXZlcztcblxuXHRcdC8vIE5vdywgdGhlIHR1bmUgZW5kcyBhdCBhIGJsYW5rIGxpbmUsIHNvIHRydW5jYXRlIGl0IGlmIG5lZWRlZC4gVGhlcmUgbWF5IGJlIFwiaW50ZXJ0dW5lXCIgc3R1ZmYuXG5cdFx0cGFyc2VDb21tb24uZWFjaChUaGlzLnR1bmVzLCBmdW5jdGlvbih0dW5lKSB7XG5cdFx0XHR2YXIgZW5kID0gdHVuZS5hYmMuaW5kZXhPZignXFxuXFxuJyk7XG5cdFx0XHRpZiAoZW5kID4gMClcblx0XHRcdFx0dHVuZS5hYmMgPSB0dW5lLmFiYy5zdWJzdHJpbmcoMCwgZW5kKTtcblx0XHRcdHR1bmUucHVyZSA9IHR1bmUuYWJjO1xuXHRcdFx0dHVuZS5hYmMgPSBkaXJlY3RpdmVzICsgdHVuZS5hYmM7XG5cblx0XHRcdC8vIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlLCBwYXJzZSBhbmQgc3RvcmUgdGhlIHRpdGxlIHNlcGFyYXRlbHkuIFRoZSB0aXRsZSBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBUOiBhbmQgdGhlIG5leHQgXFxuXG5cdFx0XHR2YXIgdGl0bGUgPSB0dW5lLnB1cmUuc3BsaXQoXCJUOlwiKTtcblx0XHRcdGlmICh0aXRsZS5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdHRpdGxlID0gdGl0bGVbMV0uc3BsaXQoXCJcXG5cIik7XG5cdFx0XHRcdHR1bmUudGl0bGUgPSB0aXRsZVswXS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0dHVuZS50aXRsZSA9IFwiXCI7XG5cblx0XHRcdC8vIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlLCBwYXJzZSBhbmQgc3RvcmUgdGhlIGlkIHNlcGFyYXRlbHkuIFRoZSBpZCBpcyBiZXR3ZWVuIHRoZSBmaXJzdCBYOiBhbmQgdGhlIG5leHQgXFxuXG5cdFx0XHR2YXIgaWQgPSB0dW5lLnB1cmUuc3Vic3RyaW5nKDIsIHR1bmUucHVyZS5pbmRleE9mKFwiXFxuXCIpKTtcblx0XHRcdHR1bmUuaWQgPSBpZC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJyk7XG5cdFx0fSk7XG5cdH07XG5cblx0VHVuZUJvb2sucHJvdG90eXBlLmdldFR1bmVCeUlkID0gZnVuY3Rpb24oaWQpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudHVuZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLnR1bmVzW2ldLmlkID09PSAnJytpZClcblx0XHRcdFx0cmV0dXJuIHRoaXMudHVuZXNbaV07XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9O1xuXG5cdFR1bmVCb29rLnByb3RvdHlwZS5nZXRUdW5lQnlUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnR1bmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy50dW5lc1tpXS50aXRsZSA9PT0gdGl0bGUpXG5cdFx0XHRcdHJldHVybiB0aGlzLnR1bmVzW2ldO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fTtcblxuXHR0dW5lYm9vay5wYXJzZU9ubHkgPSBmdW5jdGlvbihhYmMsIHBhcmFtcykge1xuXHRcdHZhciB0dW5lcyA9IFtdO1xuXHRcdHZhciBudW1UdW5lcyA9IHR1bmVib29rLm51bWJlck9mVHVuZXMoYWJjKTtcblxuXHRcdC8vIHRoaXMganVzdCBuZWVkcyB0byBiZSBwYXNzZWQgaW4gYmVjYXVzZSB0aGlzIHRlbGxzIHRoZSBlbmdpbmUgaG93IG1hbnkgdHVuZXMgdG8gcHJvY2Vzcy5cblx0XHR2YXIgb3V0cHV0ID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBudW1UdW5lczsgaSsrKSB7XG5cdFx0XHRvdXRwdXQucHVzaCgxKTtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gY2FsbGJhY2soKSB7XG5cdFx0XHQvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlIHBhcnNlZCB0dW5lcy5cblx0XHR9XG5cdFx0cmV0dXJuIHR1bmVib29rLnJlbmRlckVuZ2luZShjYWxsYmFjaywgb3V0cHV0LCBhYmMsIHBhcmFtcyk7XG5cdH07XG5cblx0dHVuZWJvb2sucmVuZGVyRW5naW5lID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBvdXRwdXQsIGFiYywgcGFyYW1zKSB7XG5cdFx0dmFyIHJldCA9IFtdO1xuXHRcdHZhciBpc0FycmF5ID0gZnVuY3Rpb24odGVzdE9iamVjdCkge1xuXHRcdFx0cmV0dXJuIHRlc3RPYmplY3QgJiYgISh0ZXN0T2JqZWN0LnByb3BlcnR5SXNFbnVtZXJhYmxlKCdsZW5ndGgnKSkgJiYgdHlwZW9mIHRlc3RPYmplY3QgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0ZXN0T2JqZWN0Lmxlbmd0aCA9PT0gJ251bWJlcic7XG5cdFx0fTtcblxuXHRcdC8vIGNoZWNrIGFuZCBub3JtYWxpemUgaW5wdXQgcGFyYW1ldGVyc1xuXHRcdGlmIChvdXRwdXQgPT09IHVuZGVmaW5lZCB8fCBhYmMgPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybjtcblx0XHRpZiAoIWlzQXJyYXkob3V0cHV0KSlcblx0XHRcdG91dHB1dCA9IFsgb3V0cHV0IF07XG5cdFx0aWYgKHBhcmFtcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0cGFyYW1zID0ge307XG5cdFx0dmFyIGN1cnJlbnRUdW5lID0gcGFyYW1zLnN0YXJ0aW5nVHVuZSA/IHBhcnNlSW50KHBhcmFtcy5zdGFydGluZ1R1bmUsIDEwKSA6IDA7XG5cblx0XHQvLyBwYXJzZSB0aGUgYWJjIHN0cmluZ1xuXHRcdHZhciBib29rID0gbmV3IFR1bmVCb29rKGFiYyk7XG5cdFx0dmFyIGFiY1BhcnNlciA9IG5ldyBQYXJzZSgpO1xuXG5cdFx0Ly8gb3V0cHV0IGVhY2ggdHVuZSwgaWYgaXQgZXhpc3RzLiBPdGhlcndpc2UgY2xlYXIgdGhlIGRpdi5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG91dHB1dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGRpdiA9IG91dHB1dFtpXTtcblx0XHRcdGlmIChkaXYgPT09IFwiKlwiKSB7XG5cdFx0XHRcdC8vIFRoaXMgaXMgZm9yIFwiaGVhZGxlc3NcIiByZW5kZXJpbmc6IGRvaW5nIHRoZSB3b3JrIGJ1dCBub3Qgc2hvd2luZyB0aGUgc3ZnLlxuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YoZGl2KSA9PT0gXCJzdHJpbmdcIilcblx0XHRcdFx0ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2KTtcblx0XHRcdGlmIChkaXYpIHtcblx0XHRcdFx0aWYgKGN1cnJlbnRUdW5lID49IDAgJiYgY3VycmVudFR1bmUgPCBib29rLnR1bmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdGFiY1BhcnNlci5wYXJzZShib29rLnR1bmVzW2N1cnJlbnRUdW5lXS5hYmMsIHBhcmFtcywgYm9vay50dW5lc1tjdXJyZW50VHVuZV0uc3RhcnRQb3MgLSBib29rLmhlYWRlci5sZW5ndGgpO1xuXHRcdFx0XHRcdHZhciB0dW5lID0gYWJjUGFyc2VyLmdldFR1bmUoKTtcblx0XHRcdFx0XHR2YXIgb3ZlcnJpZGUgPSBjYWxsYmFjayhkaXYsIHR1bmUsIGksIGJvb2sudHVuZXNbY3VycmVudFR1bmVdLmFiYyk7XG5cdFx0XHRcdFx0cmV0LnB1c2gob3ZlcnJpZGUgPyBvdmVycmlkZSA6IHR1bmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmIChkaXYuaGFzT3duUHJvcGVydHkoJ2lubmVySFRNTCcpKVxuXHRcdFx0XHRcdFx0ZGl2LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUdW5lKys7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG5cblx0ZnVuY3Rpb24gZmxhdHRlblR1bmUodHVuZU9iaikge1xuXHRcdC8vIFRoaXMgcmVtb3ZlcyB0aGUgbGluZSBicmVha3MgYW5kIHJlbW92ZXMgdGhlIG5vbi1tdXNpYyBsaW5lcy5cblx0XHR2YXIgc3RhdmVzID0gW107XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0dW5lT2JqLmxpbmVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgbGluZSA9IHR1bmVPYmoubGluZXNbal07XG5cdFx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGxpbmUuc3RhZmYubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHR2YXIgc3RhZmYgPSBsaW5lLnN0YWZmW2tdO1xuXHRcdFx0XHRcdGlmICghc3RhdmVzW2tdKVxuXHRcdFx0XHRcdFx0c3RhdmVzW2tdID0gc3RhZmY7XG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0YWZmLnZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhdmVzW2tdLnZvaWNlc1tpXSlcblx0XHRcdFx0XHRcdFx0XHRzdGF2ZXNba10udm9pY2VzW2ldID0gc3RhdmVzW2tdLnZvaWNlc1tpXS5jb25jYXQoc3RhZmYudm9pY2VzW2ldKTtcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IElmIHN0YXZlc1trXS52b2ljZXNbaV0gZG9lc24ndCBleGlzdCwgdGhhdCBtZWFucyBhIHZvaWNlIGFwcGVhcmVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIHR1bmUuIFRoYXQgaXNuJ3QgaGFuZGxlZCB5ZXQuXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzdGF2ZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBtZWFzdXJlc1BhcnNlcihzdGFmZiwgdHVuZSkge1xuXHRcdHZhciB2b2ljZXMgPSBbXTtcblx0XHR2YXIgbGFzdENob3JkID0gbnVsbDtcblx0XHR2YXIgbWVhc3VyZVN0YXJ0Q2hvcmQgPSBudWxsO1xuXHRcdHZhciBmcmFnU3RhcnQgPSBudWxsO1xuXHRcdHZhciBoYXNOb3RlcyA9IGZhbHNlO1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdGFmZi52b2ljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB2b2ljZSA9IHN0YWZmLnZvaWNlc1tpXTtcblx0XHRcdHZvaWNlcy5wdXNoKFtdKTtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdm9pY2UubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB2b2ljZVtqXTtcblx0XHRcdFx0aWYgKGZyYWdTdGFydCA9PT0gbnVsbCAmJiBlbGVtLnN0YXJ0Q2hhciA+PSAwKSB7XG5cdFx0XHRcdFx0ZnJhZ1N0YXJ0ID0gZWxlbS5zdGFydENoYXI7XG5cdFx0XHRcdFx0aWYgKGVsZW0uY2hvcmQgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdG1lYXN1cmVTdGFydENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdG1lYXN1cmVTdGFydENob3JkID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZWxlbS5jaG9yZClcblx0XHRcdFx0XHRsYXN0Q2hvcmQgPSBlbGVtO1xuXHRcdFx0XHRpZiAoZWxlbS5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRcdGlmIChoYXNOb3Rlcykge1xuXHRcdFx0XHRcdFx0dmFyIGZyYWcgPSB0dW5lLmFiYy5zdWJzdHJpbmcoZnJhZ1N0YXJ0LCBlbGVtLmVuZENoYXIpO1xuXHRcdFx0XHRcdFx0dmFyIG1lYXN1cmUgPSB7YWJjOiBmcmFnfTtcblx0XHRcdFx0XHRcdGxhc3RDaG9yZCA9IG1lYXN1cmVTdGFydENob3JkICYmIG1lYXN1cmVTdGFydENob3JkLmNob3JkICYmIG1lYXN1cmVTdGFydENob3JkLmNob3JkLmxlbmd0aCA+IDAgPyBtZWFzdXJlU3RhcnRDaG9yZC5jaG9yZFswXS5uYW1lIDogbnVsbDtcblx0XHRcdFx0XHRcdGlmIChsYXN0Q2hvcmQpXG5cdFx0XHRcdFx0XHRcdG1lYXN1cmUubGFzdENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdFx0aWYgKGVsZW0uc3RhcnRFbmRpbmcpXG5cdFx0XHRcdFx0XHRcdG1lYXN1cmUuc3RhcnRFbmRpbmcgPSBlbGVtLnN0YXJ0RW5kaW5nO1xuXHRcdFx0XHRcdFx0aWYgKGVsZW0uZW5kRW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRtZWFzdXJlLmVuZEVuZGluZyA9IGVsZW0uZW5kRW5kaW5nO1xuXHRcdFx0XHRcdFx0dm9pY2VzW2ldLnB1c2gobWVhc3VyZSk7XG5cdFx0XHRcdFx0XHRmcmFnU3RhcnQgPSBudWxsO1xuXHRcdFx0XHRcdFx0aGFzTm90ZXMgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbS5lbF90eXBlID09PSAnbm90ZScpIHtcblx0XHRcdFx0XHRoYXNOb3RlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZvaWNlcztcblx0fVxuXG5cdHR1bmVib29rLmV4dHJhY3RNZWFzdXJlcyA9IGZ1bmN0aW9uKGFiYykge1xuXHRcdHZhciB0dW5lcyA9IFtdO1xuXHRcdHZhciBib29rID0gbmV3IFR1bmVCb29rKGFiYyk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBib29rLnR1bmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdHVuZSA9IGJvb2sudHVuZXNbaV07XG5cdFx0XHR2YXIgYXJyID0gdHVuZS5hYmMuc3BsaXQoXCJLOlwiKTtcblx0XHRcdHZhciBhcnIyID0gYXJyWzFdLnNwbGl0KFwiXFxuXCIpO1xuXHRcdFx0dmFyIGhlYWRlciA9IGFyclswXSArIFwiSzpcIiArIGFycjJbMF0gKyBcIlxcblwiO1xuXHRcdFx0dmFyIGxhc3RDaG9yZCA9IG51bGw7XG5cdFx0XHR2YXIgbWVhc3VyZVN0YXJ0Q2hvcmQgPSBudWxsO1xuXHRcdFx0dmFyIGZyYWdTdGFydCA9IG51bGw7XG5cdFx0XHR2YXIgbWVhc3VyZXMgPSBbXTtcblx0XHRcdHZhciBoYXNOb3RlcyA9IGZhbHNlO1xuXHRcdFx0dmFyIHR1bmVPYmogPSB0dW5lYm9vay5wYXJzZU9ubHkodHVuZS5hYmMpWzBdO1xuXHRcdFx0dmFyIGhhc1BpY2t1cCA9IHR1bmVPYmouZ2V0UGlja3VwTGVuZ3RoKCkgPiAwO1xuXHRcdFx0Ly8gdmFyIHN0YXZlcyA9IGZsYXR0ZW5UdW5lKHR1bmVPYmopO1xuXHRcdFx0Ly8gZm9yICh2YXIgcyA9IDA7IHMgPCBzdGF2ZXMubGVuZ3RoOyBzKyspIHtcblx0XHRcdC8vIFx0dmFyIHZvaWNlcyA9IG1lYXN1cmVzUGFyc2VyKHN0YXZlc1tzXSwgdHVuZSk7XG5cdFx0XHQvLyBcdGlmIChzID09PSAwKVxuXHRcdFx0Ly8gXHRcdG1lYXN1cmVzID0gdm9pY2VzO1xuXHRcdFx0Ly8gXHRlbHNlIHtcblx0XHRcdC8vIFx0XHRmb3IgKHZhciBzcyA9IDA7IHNzIDwgdm9pY2VzLmxlbmd0aDsgc3MrKykge1xuXHRcdFx0Ly8gXHRcdFx0dmFyIHZvaWNlID0gdm9pY2VzW3NzXTtcblx0XHRcdC8vIFx0XHRcdGlmIChtZWFzdXJlcy5sZW5ndGggPD0gc3MpXG5cdFx0XHQvLyBcdFx0XHRcdG1lYXN1cmVzLnB1c2goW10pO1xuXHRcdFx0Ly8gXHRcdFx0dmFyIG1lYXN1cmVWb2ljZSA9IG1lYXN1cmVzW3NzXTtcblx0XHRcdC8vIFx0XHRcdGZvciAodmFyIHNzcyA9IDA7IHNzcyA8IHZvaWNlLmxlbmd0aDsgc3NzKyspIHtcblx0XHRcdC8vIFx0XHRcdFx0aWYgKG1lYXN1cmVWb2ljZS5sZW5ndGggPiBzc3MpXG5cdFx0XHQvLyBcdFx0XHRcdFx0bWVhc3VyZVZvaWNlW3Nzc10uYWJjICs9IFwiXFxuXCIgKyB2b2ljZVtzc3NdLmFiYztcblx0XHRcdC8vIFx0XHRcdFx0ZWxzZVxuXHRcdFx0Ly8gXHRcdFx0XHRcdG1lYXN1cmVzLnB1c2godm9pY2Vbc3NzXSk7XG5cdFx0XHQvLyBcdFx0XHR9XG5cdFx0XHQvLyBcdFx0fVxuXHRcdFx0Ly8gXHR9XG5cdFx0XHQvLyBcdGNvbnNvbGUubG9nKHZvaWNlcyk7XG5cdFx0XHQvLyB9XG5cdFx0XHQvLyBtZWFzdXJlcyA9IG1lYXN1cmVzWzBdO1xuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHR1bmVPYmoubGluZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIGxpbmUgPSB0dW5lT2JqLmxpbmVzW2pdO1xuXHRcdFx0XHRpZiAobGluZS5zdGFmZikge1xuXHRcdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgMSAvKmxpbmUuc3RhZmYubGVuZ3RoKi87IGsrKykge1xuXHRcdFx0XHRcdFx0dmFyIHN0YWZmID0gbGluZS5zdGFmZltrXTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGtrID0gMDsga2sgPCAxIC8qc3RhZmYudm9pY2VzLmxlbmd0aCovOyBraysrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2b2ljZSA9IHN0YWZmLnZvaWNlc1tra107XG5cdFx0XHRcdFx0XHRcdGZvciAodmFyIGtrayA9IDA7IGtrayA8IHZvaWNlLmxlbmd0aDsga2trKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZWxlbSA9IHZvaWNlW2tra107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGZyYWdTdGFydCA9PT0gbnVsbCAmJiBlbGVtLnN0YXJ0Q2hhciA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmcmFnU3RhcnQgPSBlbGVtLnN0YXJ0Q2hhcjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtLmNob3JkID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmVTdGFydENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtZWFzdXJlU3RhcnRDaG9yZCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtLmNob3JkKVxuXHRcdFx0XHRcdFx0XHRcdFx0bGFzdENob3JkID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5lbF90eXBlID09PSAnYmFyJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGhhc05vdGVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBmcmFnID0gdHVuZS5hYmMuc3Vic3RyaW5nKGZyYWdTdGFydCwgZWxlbS5lbmRDaGFyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG1lYXN1cmUgPSB7YWJjOiBmcmFnfTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGFzdENob3JkID0gbWVhc3VyZVN0YXJ0Q2hvcmQgJiYgbWVhc3VyZVN0YXJ0Q2hvcmQuY2hvcmQgJiYgbWVhc3VyZVN0YXJ0Q2hvcmQuY2hvcmQubGVuZ3RoID4gMCA/IG1lYXN1cmVTdGFydENob3JkLmNob3JkWzBdLm5hbWUgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAobGFzdENob3JkKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmUubGFzdENob3JkID0gbGFzdENob3JkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5zdGFydEVuZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZWFzdXJlLnN0YXJ0RW5kaW5nID0gZWxlbS5zdGFydEVuZGluZztcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW0uZW5kRW5kaW5nKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmUuZW5kRW5kaW5nID0gZWxlbS5lbmRFbmRpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1lYXN1cmVzLnB1c2gobWVhc3VyZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZyYWdTdGFydCA9IG51bGw7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhhc05vdGVzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtLmVsX3R5cGUgPT09ICdub3RlJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aGFzTm90ZXMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dHVuZXMucHVzaCh7XG5cdFx0XHRcdGhlYWRlcjogaGVhZGVyLFxuXHRcdFx0XHRtZWFzdXJlczogbWVhc3VyZXMsXG5cdFx0XHRcdGhhc1BpY2t1cDogaGFzUGlja3VwXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHR1bmVzO1xuXHR9O1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB0dW5lYm9vaztcbiIsIi8vICAgIGFiY19hYnNvbHV0ZV9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBBYnNvbHV0ZUVsZW1lbnQgY2xhc3MuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzcGFjaW5nID0gcmVxdWlyZSgnLi9hYmNfc3BhY2luZycpO1xuXG4vLyBkdXJhdGlvbiAtIGFjdHVhbCBtdXNpY2FsIGR1cmF0aW9uIC0gZGlmZmVyZW50IGZyb20gbm90ZWhlYWQgZHVyYXRpb24gaW4gdHJpcGxldHMuIHJlZmVyIHRvIGFiY2VsZW0gdG8gZ2V0IHRoZSBub3RlaGVhZCBkdXJhdGlvblxuLy8gbWluc3BhY2luZyAtIHNwYWNpbmcgd2hpY2ggbXVzdCBiZSB0YWtlbiBvbiB0b3Agb2YgdGhlIHdpZHRoIGRlZmluZWQgYnkgdGhlIGR1cmF0aW9uXG4vLyB0eXBlIGlzIGEgbWV0YS10eXBlIGZvciB0aGUgZWxlbWVudC4gSXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgZHJhd2luZywgYnV0IGl0IGlzIHVzZWZ1bCB0byBtYWtlIHNlbWFudGljIHNlbnNlIG9mIHRoZSBlbGVtZW50LiBGb3IgaW5zdGFuY2UsIGl0IGNhbiBiZSB1c2VkIGluIHRoZSBlbGVtZW50J3MgY2xhc3MgbmFtZS5cbnZhciBBYnNvbHV0ZUVsZW1lbnQgPSBmdW5jdGlvbiBBYnNvbHV0ZUVsZW1lbnQoYWJjZWxlbSwgZHVyYXRpb24sIG1pbnNwYWNpbmcsIHR5cGUsIHR1bmVOdW1iZXIsIG9wdGlvbnMpIHtcblx0Ly9jb25zb2xlLmxvZyhcIkFic29sdXRlOlwiLGFiY2VsZW0sIHR5cGUpO1xuXHRpZiAoIW9wdGlvbnMpXG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR0aGlzLnR1bmVOdW1iZXIgPSB0dW5lTnVtYmVyO1xuXHR0aGlzLmFiY2VsZW0gPSBhYmNlbGVtO1xuXHR0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247XG5cdHRoaXMuZHVyYXRpb25DbGFzcyA9IG9wdGlvbnMuZHVyYXRpb25DbGFzc092ZXJpZGUgPyBvcHRpb25zLmR1cmF0aW9uQ2xhc3NPdmVyaWRlIDogdGhpcy5kdXJhdGlvbjtcblx0dGhpcy5taW5zcGFjaW5nID0gbWluc3BhY2luZyB8fCAwO1xuXHR0aGlzLnggPSAwO1xuXHR0aGlzLmNoaWxkcmVuID0gW107XG5cdHRoaXMuaGVhZHMgPSBbXTtcblx0dGhpcy5leHRyYSA9IFtdO1xuXHR0aGlzLmV4dHJhdyA9IDA7XG5cdC8vdGhpcy5kZWNzID0gW107XG5cdHRoaXMudyA9IDA7XG5cdHRoaXMucmlnaHQgPSBbXTtcblx0dGhpcy5pbnZpc2libGUgPSBmYWxzZTtcblx0dGhpcy5ib3R0b20gPSB1bmRlZmluZWQ7XG5cdHRoaXMudG9wID0gdW5kZWZpbmVkO1xuXHR0aGlzLnR5cGUgPSB0eXBlO1xuXHQvLyB0aGVzZSBhcmUgdGhlIGhlaWdodHMgb2YgYWxsIG9mIHRoZSB2ZXJ0aWNhbCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIHBsYWNlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lLlxuXHQvLyB0aGUgdmVydGljYWwgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgYWJvdmUgaXM6IHRlbXBvLCBwYXJ0LCB2b2x1bWUvZHluYW1pYywgZW5kaW5nL2Nob3JkLCBseXJpY1xuXHQvLyB0aGUgdmVydGljYWwgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgYmVsb3cgaXM6IGx5cmljLCBjaG9yZCwgdm9sdW1lL2R5bmFtaWNcblx0dGhpcy5zcGVjaWFsWSA9IHtcblx0XHR0ZW1wb0hlaWdodEFib3ZlOiAwLFxuXHRcdHBhcnRIZWlnaHRBYm92ZTogMCxcblx0XHR2b2x1bWVIZWlnaHRBYm92ZTogMCxcblx0XHRkeW5hbWljSGVpZ2h0QWJvdmU6IDAsXG5cdFx0ZW5kaW5nSGVpZ2h0QWJvdmU6IDAsXG5cdFx0Y2hvcmRIZWlnaHRBYm92ZTogMCxcblx0XHRseXJpY0hlaWdodEFib3ZlOiAwLFxuXG5cdFx0bHlyaWNIZWlnaHRCZWxvdzogMCxcblx0XHRjaG9yZEhlaWdodEJlbG93OiAwLFxuXHRcdHZvbHVtZUhlaWdodEJlbG93OiAwLFxuXHRcdGR5bmFtaWNIZWlnaHRCZWxvdzogMFxuXHR9O1xufTtcblxuLy8gRm9yIGVhY2ggb2YgdGhlIHJlbGF0aXZlIGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgcGxhY2VkIGluIGFkdmFuY2UgKGJlY2F1c2UgdGhlaXIgdmVydGljYWwgcGxhY2VtZW50IGRlcGVuZHMgb24gZXZlcnl0aGluZ1xuLy8gZWxzZSBvbiB0aGUgbGluZSksIHRoaXMgaXRlcmF0ZXMgdGhyb3VnaCB0aGVtIGFuZCBzZXRzIHRoZWlyIHBpdGNoLiBCeSB0aGUgdGltZSB0aGlzIGlzIGNhbGxlZCwgc3BlY2lhbFlSZXNvbHZlZCBjb250YWlucyBhXG4vLyBoYXNoIHdpdGggdGhlIHZlcnRpY2FsIHBsYWNlbWVudCAoaW4gcGl0Y2ggdW5pdHMpIGZvciBlYWNoIHR5cGUuXG4vLyBUT0RPLVBFUjogSSB0aGluayB0aGlzIG5lZWRzIHRvIGJlIHNlcGFyYXRlZCBieSBcImFib3ZlXCIgYW5kIFwiYmVsb3dcIi4gSG93IGRvIHdlIGtub3cgdGhhdCBmb3IgZHluYW1pY3MgYXQgdGhlIHBvaW50IHdoZXJlIHRoZXkgYXJlIGJlaW5nIGRlZmluZWQsIHRob3VnaD8gV2UgbmVlZCBhIHBhc3MgdGhyb3VnaCBhbGwgdGhlIHJlbGF0aXZlIGVsZW1lbnRzIHRvIHNldCBcImFib3ZlXCIgYW5kIFwiYmVsb3dcIi5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24oc3BlY2lhbFlSZXNvbHZlZCkge1xuXHQvLyBzcGVjaWFsWVJlc29sdmVkIGNvbnRhaW5zIHRoZSBhY3R1YWwgcGl0Y2ggZm9yIGVhY2ggb2YgdGhlIGNsYXNzZXMgb2YgZWxlbWVudHMuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG5cdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuc3BlY2lhbFkpIHsgLy8gZm9yIGVhY2ggY2xhc3Mgb2YgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIHBsYWNlZCB2ZXJ0aWNhbGx5XG5cdFx0XHRpZiAodGhpcy5zcGVjaWFsWS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdGlmIChjaGlsZFtrZXldKSB7IC8vIElmIHRoaXMgcmVsYXRpdmUgZWxlbWVudCBoYXMgZGVmaW5lZCBhIGhlaWdodCBmb3IgdGhpcyBjbGFzcyBvZiBlbGVtZW50XG5cdFx0XHRcdFx0Y2hpbGQucGl0Y2ggPSBzcGVjaWFsWVJlc29sdmVkW2tleV07XG5cdFx0XHRcdFx0aWYgKGNoaWxkLnRvcCA9PT0gdW5kZWZpbmVkKSB7IC8vIFRPRE8tUEVSOiBIQUNLISBOb3Qgc3VyZSB0aGlzIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyB0aGlzLlxuXHRcdFx0XHRcdFx0Y2hpbGQuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzKHNwZWNpYWxZUmVzb2x2ZWQpO1xuXHRcdFx0XHRcdFx0dGhpcy5wdXNoVG9wKGNoaWxkLnRvcCk7XG5cdFx0XHRcdFx0XHR0aGlzLnB1c2hCb3R0b20oY2hpbGQuYm90dG9tKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuZ2V0TWluV2lkdGggPSBmdW5jdGlvbiAoKSB7IC8vIGFic29sdXRlIHNwYWNlIHRha2VuIHRvIHRoZSByaWdodCBvZiB0aGUgbm90ZVxuXHRyZXR1cm4gdGhpcy53O1xufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5nZXRFeHRyYVdpZHRoID0gZnVuY3Rpb24gKCkgeyAvLyBzcGFjZSBuZWVkZWQgdG8gdGhlIGxlZnQgb2YgdGhlIG5vdGVcblx0cmV0dXJuIC10aGlzLmV4dHJhdztcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkRXh0cmEgPSBmdW5jdGlvbiAoZXh0cmEpIHtcblx0aWYgKGV4dHJhLmR4PHRoaXMuZXh0cmF3KSB0aGlzLmV4dHJhdyA9IGV4dHJhLmR4O1xuXHR0aGlzLmV4dHJhW3RoaXMuZXh0cmEubGVuZ3RoXSA9IGV4dHJhO1xuXHR0aGlzLmFkZENoaWxkKGV4dHJhKTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkSGVhZCA9IGZ1bmN0aW9uIChoZWFkKSB7XG5cdGlmIChoZWFkLmR4PHRoaXMuZXh0cmF3KSB0aGlzLmV4dHJhdyA9IGhlYWQuZHg7XG5cdHRoaXMuaGVhZHNbdGhpcy5oZWFkcy5sZW5ndGhdID0gaGVhZDtcblx0dGhpcy5hZGRSaWdodChoZWFkKTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkUmlnaHQgPSBmdW5jdGlvbiAocmlnaHQpIHtcblx0aWYgKHJpZ2h0LmR4K3JpZ2h0Lnc+dGhpcy53KSB0aGlzLncgPSByaWdodC5keCtyaWdodC53O1xuXHR0aGlzLnJpZ2h0W3RoaXMucmlnaHQubGVuZ3RoXSA9IHJpZ2h0O1xuXHR0aGlzLmFkZENoaWxkKHJpZ2h0KTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuYWRkQ2VudGVyZWQgPSBmdW5jdGlvbiAoZWxlbSkge1xuXHR2YXIgaGFsZiA9IGVsZW0udy8yO1xuXHRpZiAoLWhhbGY8dGhpcy5leHRyYXcpIHRoaXMuZXh0cmF3ID0gLWhhbGY7XG5cdHRoaXMuZXh0cmFbdGhpcy5leHRyYS5sZW5ndGhdID0gZWxlbTtcblx0aWYgKGVsZW0uZHgraGFsZj50aGlzLncpIHRoaXMudyA9IGVsZW0uZHgraGFsZjtcblx0dGhpcy5yaWdodFt0aGlzLnJpZ2h0Lmxlbmd0aF0gPSBlbGVtO1xuXHR0aGlzLmFkZENoaWxkKGVsZW0pO1xufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5zZXRMaW1pdCA9IGZ1bmN0aW9uKG1lbWJlciwgY2hpbGQpIHtcblx0aWYgKCFjaGlsZFttZW1iZXJdKSByZXR1cm47XG5cdGlmICghdGhpcy5zcGVjaWFsWVttZW1iZXJdKVxuXHRcdHRoaXMuc3BlY2lhbFlbbWVtYmVyXSA9IGNoaWxkW21lbWJlcl07XG5cdGVsc2Vcblx0XHR0aGlzLnNwZWNpYWxZW21lbWJlcl0gPSBNYXRoLm1heCh0aGlzLnNwZWNpYWxZW21lbWJlcl0sIGNoaWxkW21lbWJlcl0pO1xufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xuXHQvL2NvbnNvbGUubG9nKFwiUmVsYXRpdmU6XCIsY2hpbGQpO1xuXHRjaGlsZC5wYXJlbnQgPSB0aGlzO1xuXHR0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoXSA9IGNoaWxkO1xuXHR0aGlzLnB1c2hUb3AoY2hpbGQudG9wKTtcblx0dGhpcy5wdXNoQm90dG9tKGNoaWxkLmJvdHRvbSk7XG5cdHRoaXMuc2V0TGltaXQoJ3RlbXBvSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ3BhcnRIZWlnaHRBYm92ZScsIGNoaWxkKTtcblx0dGhpcy5zZXRMaW1pdCgndm9sdW1lSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2R5bmFtaWNIZWlnaHRBYm92ZScsIGNoaWxkKTtcblx0dGhpcy5zZXRMaW1pdCgnZW5kaW5nSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2Nob3JkSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2x5cmljSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2x5cmljSGVpZ2h0QmVsb3cnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2Nob3JkSGVpZ2h0QmVsb3cnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ3ZvbHVtZUhlaWdodEJlbG93JywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdkeW5hbWljSGVpZ2h0QmVsb3cnLCBjaGlsZCk7XG59O1xuXG5BYnNvbHV0ZUVsZW1lbnQucHJvdG90eXBlLnB1c2hUb3AgPSBmdW5jdGlvbiAodG9wKSB7XG5cdGlmICh0b3AgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmICh0aGlzLnRvcCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0dGhpcy50b3AgPSB0b3A7XG5cdFx0ZWxzZVxuXHRcdFx0dGhpcy50b3AgPSBNYXRoLm1heCh0b3AsIHRoaXMudG9wKTtcblx0fVxufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5wdXNoQm90dG9tID0gZnVuY3Rpb24gKGJvdHRvbSkge1xuXHRpZiAoYm90dG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAodGhpcy5ib3R0b20gPT09IHVuZGVmaW5lZClcblx0XHRcdHRoaXMuYm90dG9tID0gYm90dG9tO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCB0aGlzLmJvdHRvbSk7XG5cdH1cbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0WCA9IGZ1bmN0aW9uICh4KSB7XG5cdHRoaXMueCA9IHg7XG5cdGZvciAodmFyIGk9MDsgaTx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuXHRcdHRoaXMuY2hpbGRyZW5baV0uc2V0WCh4KTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0SGludCA9IGZ1bmN0aW9uICgpIHtcblx0dGhpcy5oaW50ID0gdHJ1ZTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJlciwgYmFydG9wKSB7XG5cdGlmICh0aGlzLmludmlzaWJsZSkgcmV0dXJuO1xuXHR0aGlzLmVsZW1zZXQgPSBbXTtcblx0cmVuZGVyZXIuYmVnaW5Hcm91cCgpO1xuXHRmb3IgKHZhciBpPTA7IGk8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdGlmICgvKkFCQ0pTLndyaXRlLmRlYnVnUGxhY2VtZW50Ki9mYWxzZSkge1xuXHRcdFx0aWYgKHRoaXMuY2hpbGRyZW5baV0ua2xhc3MgPT09ICdvcm5hbWVudCcpXG5cdFx0XHRcdHJlbmRlcmVyLnByaW50U2hhZGVkQm94KHRoaXMueCwgcmVuZGVyZXIuY2FsY1kodGhpcy5jaGlsZHJlbltpXS50b3ApLCB0aGlzLncsIHJlbmRlcmVyLmNhbGNZKHRoaXMuY2hpbGRyZW5baV0uYm90dG9tKS1yZW5kZXJlci5jYWxjWSh0aGlzLmNoaWxkcmVuW2ldLnRvcCksIFwicmdiKDAsMCwyMDApXCIsIDAuMyk7XG5cdFx0fVxuXHRcdHZhciBlbCA9IHRoaXMuY2hpbGRyZW5baV0uZHJhdyhyZW5kZXJlcixiYXJ0b3ApO1xuXHRcdGlmIChlbClcblx0XHRcdHRoaXMuZWxlbXNldC5wdXNoKGVsKTtcblx0fVxuXHR2YXIga2xhc3MgPSB0aGlzLnR5cGU7XG5cdGlmICh0aGlzLnR5cGUgPT09ICdub3RlJyB8fCB0aGlzLnR5cGUgPT09ICdyZXN0Jykge1xuXHRcdGtsYXNzICs9ICcgZCcgKyB0aGlzLmR1cmF0aW9uQ2xhc3M7XG5cdFx0a2xhc3MgPSBrbGFzcy5yZXBsYWNlKC9cXC4vZywgJy0nKTtcblx0XHRpZiAodGhpcy5hYmNlbGVtLnBpdGNoZXMpIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5hYmNlbGVtLnBpdGNoZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0a2xhc3MgKz0gJyBwJyArIHRoaXMuYWJjZWxlbS5waXRjaGVzW2pdLnBpdGNoO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR2YXIgZyA9IHJlbmRlcmVyLmVuZEdyb3VwKGtsYXNzKTtcblx0aWYgKGcpXG5cdFx0dGhpcy5lbGVtc2V0LnB1c2goZyk7XG5cdGlmICh0aGlzLmtsYXNzKVxuXHRcdHRoaXMuc2V0Q2xhc3MoXCJtYXJrXCIsIFwiXCIsIFwiIzAwZmYwMFwiKTtcblx0aWYgKHRoaXMuaGludClcblx0XHR0aGlzLnNldENsYXNzKFwiYWJjanMtaGludFwiLCBcIlwiLCBudWxsKTtcblx0dmFyIG9wYWNpdHkgPSAvKkFCQ0pTLndyaXRlLmRlYnVnUGxhY2VtZW50Ki9mYWxzZSA/IDAuMyA6IDA7IC8vIENyZWF0ZSB0cmFuc3BhcmVudCBib3ggdGhhdCBlbmNvbXBhc3NlcyB0aGUgZWxlbWVudCwgYW5kIG5vdCBzbyB0cmFuc3BhcmVudCB0byBkZWJ1ZyBpdC5cblx0dmFyIHRhcmdldCA9IHJlbmRlcmVyLnByaW50U2hhZGVkQm94KHRoaXMueCwgcmVuZGVyZXIuY2FsY1kodGhpcy50b3ApLCB0aGlzLncsIHJlbmRlcmVyLmNhbGNZKHRoaXMuYm90dG9tKS1yZW5kZXJlci5jYWxjWSh0aGlzLnRvcCksIFwiIzAwMDAwMFwiLCBvcGFjaXR5KTtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHR2YXIgY29udHJvbGxlciA9IHJlbmRlcmVyLmNvbnRyb2xsZXI7XG5cdHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZnVuY3Rpb24gKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cdFx0aWYgKHNlbGYuZWxlbXNldCkge1xuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBzZWxmLmVsZW1zZXQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0dmFyIGVzID0gc2VsZi5lbGVtc2V0W2pdO1xuXHRcdFx0XHRpZiAoZXMpXG5cdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGVzLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29udHJvbGxlci5ub3RpZnlTZWxlY3Qoc2VsZiwgc2VsZi50dW5lTnVtYmVyLCBjbGFzc2VzKTtcblx0fSk7XG5cdHRoaXMuYWJjZWxlbS5hYnNlbGVtID0gdGhpcztcblxuXHR2YXIgc3RlcCA9IHNwYWNpbmcuU1RFUDtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuaXNJRT0vKkBjY19vbiFAKi9mYWxzZTsvL0lFIGRldGVjdG9yXG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUuc2V0Q2xhc3MgPSBmdW5jdGlvbiAoYWRkQ2xhc3MsIHJlbW92ZUNsYXNzLCBjb2xvcikge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZWxlbXNldC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBlbCA9IHRoaXMuZWxlbXNldFtpXTtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIGNvbG9yKTtcblx0XHR2YXIga2xzID0gZWwuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG5cdFx0aWYgKCFrbHMpIGtscyA9IFwiXCI7XG5cdFx0a2xzID0ga2xzLnJlcGxhY2UocmVtb3ZlQ2xhc3MsIFwiXCIpO1xuXHRcdGtscyA9IGtscy5yZXBsYWNlKGFkZENsYXNzLCBcIlwiKTtcblx0XHRpZiAoYWRkQ2xhc3MubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKGtscy5sZW5ndGggPiAwICYmIGtscy5jaGFyQXQoa2xzLmxlbmd0aCAtIDEpICE9PSAnICcpIGtscyArPSBcIiBcIjtcblx0XHRcdGtscyArPSBhZGRDbGFzcztcblx0XHR9XG5cdFx0ZWwuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwga2xzKTtcblx0fVxufTtcblxuQWJzb2x1dGVFbGVtZW50LnByb3RvdHlwZS5oaWdobGlnaHQgPSBmdW5jdGlvbiAoa2xhc3MsIGNvbG9yKSB7XG5cdGlmIChrbGFzcyA9PT0gdW5kZWZpbmVkKVxuXHRcdGtsYXNzID0gXCJhYmNqcy1ub3RlX3NlbGVjdGVkXCI7XG5cdGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKVxuXHRcdGNvbG9yID0gXCIjZmYwMDAwXCI7XG5cdHRoaXMuc2V0Q2xhc3Moa2xhc3MsIFwiXCIsIGNvbG9yKTtcbn07XG5cbkFic29sdXRlRWxlbWVudC5wcm90b3R5cGUudW5oaWdobGlnaHQgPSBmdW5jdGlvbiAoa2xhc3MsIGNvbG9yKSB7XG5cdGlmIChrbGFzcyA9PT0gdW5kZWZpbmVkKVxuXHRcdGtsYXNzID0gXCJhYmNqcy1ub3RlX3NlbGVjdGVkXCI7XG5cdGlmIChjb2xvciA9PT0gdW5kZWZpbmVkKVxuXHRcdGNvbG9yID0gXCIjMDAwMDAwXCI7XG5cdHRoaXMuc2V0Q2xhc3MoXCJcIiwga2xhc3MsIGNvbG9yKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQWJzb2x1dGVFbGVtZW50O1xuIiwiLy8gICAgYWJjX3JlbGF0aXZlX2VsZW1lbnQuanM6IERlZmluaXRpb24gb2YgdGhlIFJlbGF0aXZlRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIFJlbGF0aXZlRWxlbWVudCA9IGZ1bmN0aW9uIFJlbGF0aXZlRWxlbWVudChjLCBkeCwgdywgcGl0Y2gsIG9wdCkge1xuXHRvcHQgPSBvcHQgfHwge307XG5cdHRoaXMueCA9IDA7XG5cdHRoaXMuYyA9IGM7ICAgICAgLy8gY2hhcmFjdGVyIG9yIHBhdGggb3Igc3RyaW5nXG5cdHRoaXMuZHggPSBkeDsgICAgLy8gcmVsYXRpdmUgeCBwb3NpdGlvblxuXHR0aGlzLncgPSB3OyAgICAgIC8vIG1pbmltdW0gd2lkdGggdGFrZW4gdXAgYnkgdGhpcyBlbGVtZW50IChjYW4gaW5jbHVkZSBncmF0dWl0b3VzIHNwYWNlKVxuXHR0aGlzLnBpdGNoID0gcGl0Y2g7IC8vIHJlbGF0aXZlIHkgcG9zaXRpb24gYnkgcGl0Y2hcblx0dGhpcy5zY2FsZXggPSBvcHQuc2NhbGV4IHx8IDE7IC8vIHNob3VsZCB0aGUgY2hhcmFjdGVyL3BhdGggYmUgc2NhbGVkP1xuXHR0aGlzLnNjYWxleSA9IG9wdC5zY2FsZXkgfHwgMTsgLy8gc2hvdWxkIHRoZSBjaGFyYWN0ZXIvcGF0aCBiZSBzY2FsZWQ/XG5cdHRoaXMudHlwZSA9IG9wdC50eXBlIHx8IFwic3ltYm9sXCI7IC8vIGNoZWFwIHR5cGVzLlxuXHR0aGlzLnBpdGNoMiA9IG9wdC5waXRjaDI7XG5cdHRoaXMubGluZXdpZHRoID0gb3B0LmxpbmV3aWR0aDtcblx0dGhpcy5rbGFzcyA9IG9wdC5rbGFzcztcblx0dGhpcy50b3AgPSBwaXRjaDtcblx0aWYgKHRoaXMucGl0Y2gyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5waXRjaDIgPiB0aGlzLnRvcCkgdGhpcy50b3AgPSB0aGlzLnBpdGNoMjtcblx0dGhpcy5ib3R0b20gPSBwaXRjaDtcblx0aWYgKHRoaXMucGl0Y2gyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5waXRjaDIgPCB0aGlzLmJvdHRvbSkgdGhpcy5ib3R0b20gPSB0aGlzLnBpdGNoMjtcblx0aWYgKG9wdC50aGlja25lc3MpIHtcblx0XHR0aGlzLnRvcCArPSBvcHQudGhpY2tuZXNzLzI7XG5cdFx0dGhpcy5ib3R0b20gLT0gb3B0LnRoaWNrbmVzcy8yO1xuXHR9XG5cdGlmIChvcHQuc3RlbUhlaWdodCkge1xuXHRcdGlmIChvcHQuc3RlbUhlaWdodCA+IDApXG5cdFx0XHR0aGlzLnRvcCArPSBvcHQuc3RlbUhlaWdodDtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmJvdHRvbSArPSBvcHQuc3RlbUhlaWdodDtcblx0fVxuXHQvL2lmICh0aGlzLnR5cGUgPT09IFwic3ltYm9sXCIpIHtcblx0Ly9cdHZhciBvZmZzZXQgPSBnbHlwaHMuZ2V0WUNvcnIodGhpcy5jKTtcblx0Ly9cdHRoaXMudG9wICs9IG9mZnNldDtcblx0Ly9cdHRoaXMuYm90dG9tICs9IG9mZnNldDtcblx0Ly99XG5cdHRoaXMuaGVpZ2h0ID0gb3B0LmhlaWdodCA/IG9wdC5oZWlnaHQgOiA0OyAvLyBUaGUgKzEgaXMgdG8gZ2l2ZSBhIGxpdHRsZSBiaXQgb2YgcGFkZGluZy5cblx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5ID0gZmFsc2U7XG5cdHN3aXRjaCAodGhpcy50eXBlKSB7XG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHR0aGlzLmNob3JkSGVpZ2h0QWJvdmUgPSB0aGlzLmhlaWdodDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJseXJpY1wiOlxuXHRcdFx0aWYgKG9wdC5wb3NpdGlvbiAmJiBvcHQucG9zaXRpb24gPT09ICdiZWxvdycpXG5cdFx0XHRcdHRoaXMubHlyaWNIZWlnaHRCZWxvdyA9IHRoaXMuaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLmx5cmljSGVpZ2h0QWJvdmUgPSB0aGlzLmhlaWdodDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJjaG9yZFwiOlxuXHRcdFx0aWYgKG9wdC5wb3NpdGlvbiAmJiBvcHQucG9zaXRpb24gPT09ICdiZWxvdycpXG5cdFx0XHRcdHRoaXMuY2hvcmRIZWlnaHRCZWxvdyA9IHRoaXMuaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR0aGlzLmNob3JkSGVpZ2h0QWJvdmUgPSB0aGlzLmhlaWdodDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ0ZXh0XCI6XG5cdFx0XHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGlmIChvcHQucG9zaXRpb24gJiYgb3B0LnBvc2l0aW9uID09PSAnYmVsb3cnKVxuXHRcdFx0XHRcdHRoaXMuY2hvcmRIZWlnaHRCZWxvdyA9IHRoaXMuaGVpZ2h0O1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0dGhpcy5jaG9yZEhlaWdodEFib3ZlID0gdGhpcy5oZWlnaHQ7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdFx0dGhpcy5jZW50ZXJWZXJ0aWNhbGx5ID0gdHJ1ZTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwYXJ0XCI6IHRoaXMucGFydEhlaWdodEFib3ZlID0gdGhpcy5oZWlnaHQ7IGJyZWFrO1xuXHR9XG59O1xuXG5SZWxhdGl2ZUVsZW1lbnQucHJvdG90eXBlLnNldFggPSBmdW5jdGlvbiAoeCkge1xuXHR0aGlzLnggPSB4K3RoaXMuZHg7XG59O1xuXG5SZWxhdGl2ZUVsZW1lbnQucHJvdG90eXBlLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKHBvc2l0aW9uWSkge1xuXHRzd2l0Y2godGhpcy50eXBlKSB7XG5cdFx0Y2FzZSBcInBhcnRcIjpcblx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLnBhcnRIZWlnaHRBYm92ZSArIHRoaXMuaGVpZ2h0O1xuXHRcdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkucGFydEhlaWdodEFib3ZlO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRleHRcIjpcblx0XHRjYXNlIFwiY2hvcmRcIjpcblx0XHRcdGlmICh0aGlzLmNob3JkSGVpZ2h0QWJvdmUpIHtcblx0XHRcdFx0dGhpcy50b3AgPSBwb3NpdGlvblkuY2hvcmRIZWlnaHRBYm92ZTtcblx0XHRcdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkuY2hvcmRIZWlnaHRBYm92ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLmNob3JkSGVpZ2h0QmVsb3c7XG5cdFx0XHRcdHRoaXMuYm90dG9tID0gcG9zaXRpb25ZLmNob3JkSGVpZ2h0QmVsb3c7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibHlyaWNcIjpcblx0XHRcdGlmICh0aGlzLmx5cmljSGVpZ2h0QWJvdmUpIHtcblx0XHRcdFx0dGhpcy50b3AgPSBwb3NpdGlvblkubHlyaWNIZWlnaHRBYm92ZTtcblx0XHRcdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkubHlyaWNIZWlnaHRBYm92ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLmx5cmljSGVpZ2h0QmVsb3c7XG5cdFx0XHRcdHRoaXMuYm90dG9tID0gcG9zaXRpb25ZLmx5cmljSGVpZ2h0QmVsb3c7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiZGVidWdcIjpcblx0XHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLmNob3JkSGVpZ2h0QWJvdmU7XG5cdFx0XHR0aGlzLmJvdHRvbSA9IHBvc2l0aW9uWS5jaG9yZEhlaWdodEFib3ZlO1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKHRoaXMucGl0Y2ggPT09IHVuZGVmaW5lZCB8fCB0aGlzLnRvcCA9PT0gdW5kZWZpbmVkKVxuXHRcdHdpbmRvdy5jb25zb2xlLmVycm9yKFwiUmVsYXRpdmVFbGVtZW50IHBvc2l0aW9uIG5vdCBzZXQuXCIsIHRoaXMudHlwZSwgdGhpcy5waXRjaCwgdGhpcy50b3AsIHBvc2l0aW9uWSk7XG59O1xuXG5SZWxhdGl2ZUVsZW1lbnQucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGJhcnRvcCkge1xuXHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKVxuXHRcdHdpbmRvdy5jb25zb2xlLmVycm9yKHRoaXMudHlwZSArIFwiIFJlbGF0aXZlIEVsZW1lbnQgeS1jb29yZGluYXRlIG5vdCBzZXQuXCIpO1xuXHR2YXIgeSA9IHJlbmRlcmVyLmNhbGNZKHRoaXMucGl0Y2gpO1xuXHRzd2l0Y2godGhpcy50eXBlKSB7XG5cdFx0Y2FzZSBcInN5bWJvbFwiOlxuXHRcdFx0aWYgKHRoaXMuYz09PW51bGwpIHJldHVybiBudWxsO1xuXHRcdFx0dmFyIGtsYXNzID0gXCJzeW1ib2xcIjtcblx0XHRcdGlmICh0aGlzLmtsYXNzKSBrbGFzcyArPSBcIiBcIiArIHRoaXMua2xhc3M7XG5cdFx0XHR0aGlzLmdyYXBoZWxlbSA9IHJlbmRlcmVyLnByaW50U3ltYm9sKHRoaXMueCwgdGhpcy5waXRjaCwgdGhpcy5jLCB0aGlzLnNjYWxleCwgdGhpcy5zY2FsZXksIHJlbmRlcmVyLmFkZENsYXNzZXMoa2xhc3MpKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHR0aGlzLmdyYXBoZWxlbSA9IHJlbmRlcmVyLnJlbmRlclRleHQodGhpcy54LCByZW5kZXJlci5jYWxjWSgxNSksIFwiXCIrdGhpcy5jLCBcImRlYnVnZm9udFwiLCAnZGVidWctbXNnJywgJ3N0YXJ0Jyk7IGJyZWFrO1xuXHRcdGNhc2UgXCJiYXJOdW1iZXJcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIFwiXCIrdGhpcy5jLCBcIm1lYXN1cmVmb250XCIsICdiYXItbnVtYmVyJywgXCJtaWRkbGVcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibHlyaWNcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgXCJ2b2NhbGZvbnRcIiwgJ2x5cmljJywgXCJtaWRkbGVcIik7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY2hvcmRcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgJ2djaG9yZGZvbnQnLCBcImNob3JkXCIsIFwibWlkZGxlXCIpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImRlY29yYXRpb25cIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgJ2Fubm90YXRpb25mb250JywgXCJhbm5vdGF0aW9uXCIsIFwibWlkZGxlXCIsIHRydWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRleHRcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucmVuZGVyVGV4dCh0aGlzLngsIHksIHRoaXMuYywgJ2Fubm90YXRpb25mb250JywgXCJhbm5vdGF0aW9uXCIsIFwic3RhcnRcIiwgdGhpcy5jZW50ZXJWZXJ0aWNhbGx5KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJtdWx0aW1lYXN1cmUtdGV4dFwiOlxuXHRcdFx0dGhpcy5ncmFwaGVsZW0gPSByZW5kZXJlci5yZW5kZXJUZXh0KHRoaXMueCt0aGlzLncvMiwgeSwgdGhpcy5jLCAndGVtcG9mb250JywgXCJyZXN0XCIsIFwibWlkZGxlXCIsIGZhbHNlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJwYXJ0XCI6XG5cdFx0XHR0aGlzLmdyYXBoZWxlbSA9IHJlbmRlcmVyLnJlbmRlclRleHQodGhpcy54LCB5LCB0aGlzLmMsICdwYXJ0c2ZvbnQnLCBcInBhcnRcIiwgXCJzdGFydFwiKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJiYXJcIjpcblx0XHRcdHRoaXMuZ3JhcGhlbGVtID0gcmVuZGVyZXIucHJpbnRTdGVtKHRoaXMueCwgdGhpcy5saW5ld2lkdGgsIHksIChiYXJ0b3ApP2JhcnRvcDpyZW5kZXJlci5jYWxjWSh0aGlzLnBpdGNoMikpOyBicmVhazsgLy8gYmFydG9wIGNhbid0IGJlIDBcblx0XHRjYXNlIFwic3RlbVwiOlxuXHRcdFx0dGhpcy5ncmFwaGVsZW0gPSByZW5kZXJlci5wcmludFN0ZW0odGhpcy54LCB0aGlzLmxpbmV3aWR0aCwgeSwgcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaDIpKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImxlZGdlclwiOlxuXHRcdFx0dGhpcy5ncmFwaGVsZW0gPSByZW5kZXJlci5wcmludFN0YXZlTGluZSh0aGlzLngsIHRoaXMueCt0aGlzLncsIHRoaXMucGl0Y2gpOyBicmVhaztcblx0fVxuXHRpZiAodGhpcy5zY2FsZXghPT0xICYmIHRoaXMuZ3JhcGhlbGVtKSB7XG5cdFx0cmVuZGVyZXIuc2NhbGVFeGlzdGluZ0VsZW0odGhpcy5ncmFwaGVsZW0sIHRoaXMuc2NhbGV4LCB0aGlzLnNjYWxleSwgdGhpcy54LCB5KTtcblx0fVxuXHRyZXR1cm4gdGhpcy5ncmFwaGVsZW07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlbGF0aXZlRWxlbWVudDtcbiIsIi8vICAgIGFiY19iZWFtX2VsZW1lbnQuanM6IERlZmluaXRpb24gb2YgdGhlIEJlYW1FbGVtIGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcbnZhciBzcGFjaW5nID0gcmVxdWlyZSgnLi9hYmNfc3BhY2luZycpO1xuXG52YXIgZ2V0RHVybG9nID0gZnVuY3Rpb24oZHVyYXRpb24pIHtcbiAgICAgICAgLy8gVE9ETy1QRVI6IFRoaXMgaXMgYSBoYWNrIHRvIHByZXZlbnQgYSBDaHJvbWUgbG9ja3VwLiBEdXJhdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGRlZmluZWQgYWxyZWFkeSxcbiAgICAgICAgLy8gYnV0IHRoZXJlJ3MgZGVmaW5pdGVseSBhIGNhc2Ugd2hlcmUgaXQgaXNuJ3QuIFtQcm9iYWJseSBzb21ldGhpbmcgdG8gZG8gd2l0aCB0cmlwbGV0cy5dXG4gICAgICAgIGlmIChkdXJhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbi8vICAgICAgICBjb25zb2xlLmxvZyhcImdldER1cmxvZzogXCIgKyBkdXJhdGlvbik7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgubG9nKGR1cmF0aW9uKS9NYXRoLmxvZygyKSk7XG59O1xuXG5cbi8vIE1vc3QgZWxlbWVudHMgb24gdGhlIHBhZ2UgYXJlIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGFic29sdXRlIGVsZW1lbnQgLS0gbm90ZXMsIHJlc3RzLCBiYXJzLCBldGMuIEJlYW1zLCBob3dldmVyLCBzcGFuIG11bHRpcGxlIGVsZW1lbnRzLlxuLy8gVGhpcyBtZWFucyB0aGF0IGJlYW1zIGNhbid0IGJlIGxhaWQgb3V0IHVudGlsIHRoZSBhYnNvbHV0ZSBlbGVtZW50cyBhcmUgcGxhY2VkLiBUaGVyZSBpcyB0aGUgZnVydGhlciBjb21wbGljYXRpb24gdGhhdCB0aGUgc3RlbXMgZm9yIGJlYW1lZFxuLy8gbm90ZXMgY2FuJ3QgYmUgbGFpZCBvdXQgdW50aWwgdGhlIGJlYW1zIGFyZSBiZWNhdXNlIHdlIGRvbid0IGtub3cgaG93IGxvbmcgdGhleSB3aWxsIGJlIHVudGlsIHdlIGtub3cgdGhlIHNsb3BlIG9mIHRoZSBiZWFtIGFuZCB0aGUgaG9yaXpvbnRhbFxuLy8gc3BhY2luZyBvZiB0aGUgYWJzb2x1dGUgZWxlbWVudHMuXG4vL1xuLy8gU28sIHdoZW4gYSBiZWFtIGlzIGRldGVjdGVkLCBhIEJlYW1FbGVtIGlzIGNyZWF0ZWQsIHRoZW4gYWxsIG5vdGVzIGJlbG9uZ2luZyB0byB0aGF0IGJlYW0gYXJlIGFkZGVkIHRvIGl0LiBUaGVzZSBub3RlcyBhcmUgbm90IGdpdmVuIHN0ZW1zIGF0IHRoYXQgdGltZS5cbi8vIFRoZW4sIGFmdGVyIHRoZSBob3Jpem9udGFsIGxheW91dCBpcyBjb21wbGV0ZSwgYWxsIG9mIHRoZSBCZWFtRWxlbSBhcmUgaXRlcmF0ZWQgdG8gc2V0IHRoZSBiZWFtIHBvc2l0aW9uLCB0aGVuIGFsbCBvZiB0aGUgbm90ZXMgdGhhdCBhcmUgYmVhbWVkIGFyZSBnaXZlblxuLy8gc3RlbXMuIEFmdGVyIHRoYXQsIHdlIGFyZSByZWFkeSBmb3IgdGhlIGRyYXdpbmcgc3RlcC5cblxuLy8gVGhlcmUgYXJlIHRocmVlIHBoYXNlczogdGhlIHNldHVwIHBoYXNlLCB3aGVuIG5ldyBlbGVtZW50cyBhcmUgYmVpbmcgZGlzY292ZXJlZCwgdGhlIGxheW91dCBwaGFzZSwgd2hlbiBldmVyeXRoaW5nIGlzIGNhbGN1bGF0ZWQsIGFuZCB0aGUgZHJhd2luZyBwaGFzZSxcbi8vIHdoZW4gdGhlIG9iamVjdCBpcyBub3QgY2hhbmdlZCwgYnV0IGlzIHVzZWQgdG8gcHV0IHRoZSBlbGVtZW50cyBvbiB0aGUgcGFnZS5cblxudmFyIEJlYW1FbGVtO1xuXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vXG5cdC8vIFNldHVwIHBoYXNlXG5cdC8vXG5cdEJlYW1FbGVtID0gZnVuY3Rpb24gQmVhbUVsZW0oc3RlbUhlaWdodCwgdHlwZSwgZmxhdCkge1xuXHRcdC8vIHR5cGUgaXMgXCJncmFjZVwiLCBcInVwXCIsIFwiZG93blwiLCBvciB1bmRlZmluZWQuIGZsYXQgaXMgdXNlZCB0byBmb3JjZSBmbGF0IGJlYW1zLCBhcyBpdCBjb21tb25seSBmb3VuZCBpbiB0aGUgZ3JhY2Ugbm90ZXMgb2YgYmFncGlwZSBtdXNpYy5cblx0XHR0aGlzLmlzZmxhdCA9IGZsYXQ7XG5cdFx0dGhpcy5pc2dyYWNlID0gKHR5cGUgJiYgdHlwZSA9PT0gXCJncmFjZVwiKTtcblx0XHR0aGlzLmZvcmNldXAgPSB0aGlzLmlzZ3JhY2UgfHwgKHR5cGUgJiYgdHlwZSA9PT0gXCJ1cFwiKTtcblx0XHR0aGlzLmZvcmNlZG93biA9ICh0eXBlICYmIHR5cGUgPT09IFwiZG93blwiKTtcblx0XHR0aGlzLmVsZW1zID0gW107IC8vIGFsbCB0aGUgQWJzb2x1dGVFbGVtZW50cyB0aGF0IHRoaXMgYmVhbSB0b3VjaGVzLiBJdCBtYXkgaW5jbHVkZSBlbWJlZGRlZCByZXN0cy5cblx0XHR0aGlzLnRvdGFsID0gMDtcblx0XHR0aGlzLmFsbHJlc3RzID0gdHJ1ZTtcblx0XHR0aGlzLnN0ZW1IZWlnaHQgPSBzdGVtSGVpZ2h0O1xuXHRcdHRoaXMuYmVhbXMgPSBbXTsgLy8gRHVyaW5nIHRoZSBsYXlvdXQgcGhhc2UsIHRoaXMgd2lsbCBiZWNvbWUgYSBsaXN0IG9mIHRoZSBiZWFtcyB0aGF0IG5lZWQgdG8gYmUgZHJhd24uXG5cdH07XG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLnNldEhpbnQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhpcy5oaW50ID0gdHJ1ZTtcblx0fTtcblxuXHRCZWFtRWxlbS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oYWJzZWxlbSkge1xuXHRcdHZhciBwaXRjaCA9IGFic2VsZW0uYWJjZWxlbS5hdmVyYWdlcGl0Y2g7XG5cdFx0aWYgKHBpdGNoID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gZG9uJ3QgaW5jbHVkZSBlbGVtZW50cyBsaWtlIHNwYWNlcnMgaW4gYmVhbXNcblx0XHR0aGlzLmFsbHJlc3RzID0gdGhpcy5hbGxyZXN0cyAmJiBhYnNlbGVtLmFiY2VsZW0ucmVzdDtcblx0XHRhYnNlbGVtLmJlYW0gPSB0aGlzO1xuXHRcdHRoaXMuZWxlbXMucHVzaChhYnNlbGVtKTtcblx0XHQvL3ZhciBwaXRjaCA9IGFic2VsZW0uYWJjZWxlbS5hdmVyYWdlcGl0Y2g7XG5cdFx0dGhpcy50b3RhbCArPSBwaXRjaDsgLy8gVE9ETyBDSE9SRCAoZ2V0IHBpdGNoZXMgZnJvbSBhYnNlbGVtLmhlYWRzKVxuXHRcdGlmICh0aGlzLm1pbiA9PT0gdW5kZWZpbmVkIHx8IGFic2VsZW0uYWJjZWxlbS5taW5waXRjaCA8IHRoaXMubWluKSB7XG5cdFx0XHR0aGlzLm1pbiA9IGFic2VsZW0uYWJjZWxlbS5taW5waXRjaDtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWF4ID09PSB1bmRlZmluZWQgfHwgYWJzZWxlbS5hYmNlbGVtLm1heHBpdGNoID4gdGhpcy5tYXgpIHtcblx0XHRcdHRoaXMubWF4ID0gYWJzZWxlbS5hYmNlbGVtLm1heHBpdGNoO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgbWlkZGxlTGluZSA9IDY7XHQvLyBoYXJkY29kZWQgNiBpcyBCXG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLmNhbGNEaXIgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5mb3JjZXVwKSByZXR1cm4gdHJ1ZTtcblx0XHRpZiAodGhpcy5mb3JjZWRvd24pIHJldHVybiBmYWxzZTtcblx0XHR2YXIgYXZlcmFnZSA9IGNhbGNBdmVyYWdlKHRoaXMudG90YWwsIHRoaXMuZWxlbXMubGVuZ3RoKTtcblx0XHRyZXR1cm4gYXZlcmFnZSA8IG1pZGRsZUxpbmU7XG5cdH07XG5cblx0Ly9cblx0Ly8gbGF5b3V0IHBoYXNlXG5cdC8vXG5cdEJlYW1FbGVtLnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAodGhpcy5lbGVtcy5sZW5ndGggPT09IDAgfHwgdGhpcy5hbGxyZXN0cykgcmV0dXJuO1xuXG5cdFx0dGhpcy5zdGVtc1VwID0gdGhpcy5jYWxjRGlyKCk7IC8vIFRydWUgbWVhbnMgdGhlIHN0ZW1zIGFyZSBmYWNpbmcgdXAuXG5cdFx0dmFyIGR5ID0gY2FsY0R5KHRoaXMuc3RlbXNVcCwgdGhpcy5pc2dyYWNlKTsgLy8gVGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGJlYW0gbGluZS5cblxuXHRcdC8vIGNyZWF0ZSB0aGUgbWFpbiBiZWFtXG5cdFx0dmFyIGZpcnN0RWxlbWVudCA9IHRoaXMuZWxlbXNbMF07XG5cdFx0dmFyIGxhc3RFbGVtZW50ID0gdGhpcy5lbGVtc1t0aGlzLmVsZW1zLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBtaW5TdGVtSGVpZ2h0ID0gMDsgLy8gVGhlIGZvbGxvd2luZyBpcyB0byBsZWF2ZSBzcGFjZSBmb3IgXCIhLy8vIVwiIG1hcmtzLlxuXHRcdHZhciByZWZlcmVuY2VQaXRjaCA9IHRoaXMuc3RlbXNVcCA/IGZpcnN0RWxlbWVudC5hYmNlbGVtLm1heHBpdGNoIDogZmlyc3RFbGVtZW50LmFiY2VsZW0ubWlucGl0Y2g7XG5cdFx0bWluU3RlbUhlaWdodCA9IG1pblN0ZW0oZmlyc3RFbGVtZW50LCB0aGlzLnN0ZW1zVXAsIHJlZmVyZW5jZVBpdGNoLCBtaW5TdGVtSGVpZ2h0KTtcblx0XHRtaW5TdGVtSGVpZ2h0ID0gbWluU3RlbShsYXN0RWxlbWVudCwgdGhpcy5zdGVtc1VwLCByZWZlcmVuY2VQaXRjaCwgbWluU3RlbUhlaWdodCk7XG5cdFx0bWluU3RlbUhlaWdodCA9IE1hdGgubWF4KHRoaXMuc3RlbUhlaWdodCwgbWluU3RlbUhlaWdodCArIDMpOyAvLyBUT0RPLVBFUjogVGhlIDMgaXMgdGhlIHdpZHRoIG9mIGEgMTZ0aCBiZWFtLiBUaGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgYmVhbSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuXHRcdHZhciB5UG9zID0gY2FsY1lQb3ModGhpcy50b3RhbCwgdGhpcy5lbGVtcy5sZW5ndGgsIG1pblN0ZW1IZWlnaHQsIHRoaXMuc3RlbXNVcCwgZmlyc3RFbGVtZW50LmFiY2VsZW0uYXZlcmFnZXBpdGNoLCBsYXN0RWxlbWVudC5hYmNlbGVtLmF2ZXJhZ2VwaXRjaCwgdGhpcy5pc2ZsYXQsIHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy5pc2dyYWNlKTtcblx0XHR2YXIgeFBvcyA9IGNhbGNYUG9zKHRoaXMuc3RlbXNVcCwgZmlyc3RFbGVtZW50LCBsYXN0RWxlbWVudCk7XG5cdFx0dGhpcy5iZWFtcy5wdXNoKHsgc3RhcnRYOiB4UG9zWzBdLCBlbmRYOiB4UG9zWzFdLCBzdGFydFk6IHlQb3NbMF0sIGVuZFk6IHlQb3NbMV0sIGR5OiBkeSB9KTtcblxuXHRcdC8vIGNyZWF0ZSB0aGUgcmVzdCBvZiB0aGUgYmVhbXMgKGluIHRoZSBjYXNlIG9mIDEvMTZ0aCBub3RlcywgZXRjLlxuXHRcdHZhciBiZWFtcyA9IGNyZWF0ZUFkZGl0aW9uYWxCZWFtcyh0aGlzLmVsZW1zLCB0aGlzLnN0ZW1zVXAsIHRoaXMuYmVhbXNbMF0sIHRoaXMuaXNncmFjZSwgZHkpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYmVhbXMubGVuZ3RoOyBpKyspXG5cdFx0XHR0aGlzLmJlYW1zLnB1c2goYmVhbXNbaV0pO1xuXG5cdFx0Ly8gTm93IHRoYXQgdGhlIG1haW4gYmVhbSBpcyBkZWZpbmVkLCB3ZSBrbm93IGhvdyB0YWxsIHRoZSBzdGVtcyBzaG91bGQgYmUsIHNvIGNyZWF0ZSB0aGVtIGFuZCBhdHRhY2ggdGhlbSB0byB0aGUgb3JpZ2luYWwgbm90ZXMuXG5cdFx0Y3JlYXRlU3RlbXModGhpcy5lbGVtcywgdGhpcy5zdGVtc1VwLCB0aGlzLmJlYW1zWzBdLCBkeSwgdGhpcy5tYWluTm90ZSk7XG5cdH07XG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLmlzQWJvdmUgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGVtc1VwO1xuXHR9O1xuXG5cdC8vIFdlIGNhbid0IGp1c3QgdXNlIHRoZSBlbnRpcmUgYmVhbSBmb3IgdGhlIGNhbGN1bGF0aW9uLiBUaGUgcmFuZ2UgaGFzIHRvIGJlIHBhc3NlZCBpbiwgYmVjYXVzZSB0aGUgYmVhbSBtaWdodCBleHRlbmQgaW50byBzb21lIHVucmVsYXRlZCBub3Rlcy4gZm9yIGluc3RhbmNlLCAoM19hJ2YnZSdmJzIgd2hlbiBMOjE2XG5cdEJlYW1FbGVtLnByb3RvdHlwZS5oZWlnaHRBdE1pZHBvaW50ID0gZnVuY3Rpb24oc3RhcnRYLCBlbmRYKSB7XG5cdFx0aWYgKHRoaXMuYmVhbXMubGVuZ3RoID09PSAwKVxuXHRcdFx0cmV0dXJuIDA7XG5cdFx0dmFyIGJlYW0gPSB0aGlzLmJlYW1zWzBdO1xuXHRcdHZhciBtaWRQb2ludCA9IHN0YXJ0WCArIChlbmRYIC0gc3RhcnRYKSAvIDI7XG5cdFx0cmV0dXJuIGdldEJhcllBdChiZWFtLnN0YXJ0WCwgYmVhbS5zdGFydFksIGJlYW0uZW5kWCwgYmVhbS5lbmRZLCBtaWRQb2ludCk7XG5cdH07XG5cblx0QmVhbUVsZW0ucHJvdG90eXBlLnlBdE5vdGUgPSBmdW5jdGlvbihlbGVtZW50KSB7XG5cdFx0dmFyIGJlYW0gPSB0aGlzLmJlYW1zWzBdO1xuXHRcdHJldHVybiBnZXRCYXJZQXQoYmVhbS5zdGFydFgsIGJlYW0uc3RhcnRZLCBiZWFtLmVuZFgsIGJlYW0uZW5kWSwgZWxlbWVudC54KTtcblx0fTtcblxuXHRCZWFtRWxlbS5wcm90b3R5cGUueEF0TWlkcG9pbnQgPSBmdW5jdGlvbihzdGFydFgsIGVuZFgpIHtcblx0XHRyZXR1cm4gc3RhcnRYICsgKGVuZFggLSBzdGFydFgpLzI7XG5cdH07XG5cblx0Ly9cblx0Ly8gRHJhd2luZyBwaGFzZVxuXHQvL1xuXHRCZWFtRWxlbS5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uKHJlbmRlcmVyKSB7XG5cdFx0aWYgKHRoaXMuYmVhbXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cblx0XHRyZW5kZXJlci5iZWdpbkdyb3VwKCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJlYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYmVhbSA9IHRoaXMuYmVhbXNbaV07XG5cdFx0XHRkcmF3QmVhbShyZW5kZXJlciwgYmVhbS5zdGFydFgsIGJlYW0uc3RhcnRZLCBiZWFtLmVuZFgsIGJlYW0uZW5kWSwgYmVhbS5keSwgdGhpcy5oaW50KTtcblx0XHR9XG5cdFx0cmVuZGVyZXIuZW5kR3JvdXAoJ2JlYW0tZWxlbScpO1xuXHR9O1xuXG5cdC8vXG5cdC8vIHByaXZhdGUgZnVuY3Rpb25zXG5cdC8vXG5cdGZ1bmN0aW9uIG1pblN0ZW0oZWxlbWVudCwgc3RlbXNVcCwgcmVmZXJlbmNlUGl0Y2gsIG1pblN0ZW1IZWlnaHQpIHtcblx0XHRpZiAoIWVsZW1lbnQuY2hpbGRyZW4pXG5cdFx0XHRyZXR1cm4gbWluU3RlbUhlaWdodDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtID0gZWxlbWVudC5jaGlsZHJlbltpXTtcblx0XHRcdGlmIChzdGVtc1VwICYmIGVsZW0udG9wICE9PSB1bmRlZmluZWQgJiYgZWxlbS5jID09PSBcImZsYWdzLnVncmFjZVwiKVxuXHRcdFx0XHRtaW5TdGVtSGVpZ2h0ID0gTWF0aC5tYXgobWluU3RlbUhlaWdodCwgZWxlbS50b3AgLSByZWZlcmVuY2VQaXRjaCk7XG5cdFx0XHRlbHNlIGlmICghc3RlbXNVcCAmJiBlbGVtLmJvdHRvbSAhPT0gdW5kZWZpbmVkICYmIGVsZW0uYyA9PT0gXCJmbGFncy51Z3JhY2VcIilcblx0XHRcdFx0bWluU3RlbUhlaWdodCA9IE1hdGgubWF4KG1pblN0ZW1IZWlnaHQsIHJlZmVyZW5jZVBpdGNoIC0gZWxlbS5ib3R0b20gKyA3KTsgLy8gVGhlIGV4dHJhIDcgaXMgYmVjYXVzZSB3ZSBhcmUgbWVhc3VyaW5nIHRoZSBzbGFzaCBmcm9tIHRoZSB0b3AuXG5cdFx0fVxuXHRcdHJldHVybiBtaW5TdGVtSGVpZ2h0O1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY1NsYW50KGxlZnRBdmVyYWdlUGl0Y2gsIHJpZ2h0QXZlcmFnZVBpdGNoLCBudW1TdGVtcywgaXNGbGF0KSB7XG5cdFx0aWYgKGlzRmxhdClcblx0XHRcdHJldHVybiAwO1xuXHRcdHZhciBzbGFudCA9IGxlZnRBdmVyYWdlUGl0Y2ggLSByaWdodEF2ZXJhZ2VQaXRjaDtcblx0XHR2YXIgbWF4U2xhbnQgPSBudW1TdGVtcyAvIDI7XG5cblx0XHRpZiAoc2xhbnQgPiBtYXhTbGFudCkgc2xhbnQgPSBtYXhTbGFudDtcblx0XHRpZiAoc2xhbnQgPCAtbWF4U2xhbnQpIHNsYW50ID0gLW1heFNsYW50O1xuXHRcdHJldHVybiBzbGFudDtcblx0fVxuXG5cdGZ1bmN0aW9uIGNhbGNBdmVyYWdlKHRvdGFsLCBudW1FbGVtZW50cykge1xuXHRcdGlmICghbnVtRWxlbWVudHMpXG5cdFx0XHRyZXR1cm4gMDtcblx0XHRyZXR1cm4gdG90YWwgLyBudW1FbGVtZW50cztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEJhcllBdChzdGFydHgsIHN0YXJ0eSwgZW5keCwgZW5keSwgeCkge1xuXHRcdHJldHVybiBzdGFydHkgKyAoZW5keSAtIHN0YXJ0eSkgLyAoZW5keCAtIHN0YXJ0eCkgKiAoeCAtIHN0YXJ0eCk7XG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjRHkoYXNjLCBpc0dyYWNlKSB7XG5cdFx0dmFyIGR5ID0gKGFzYykgPyBzcGFjaW5nLlNURVAgOiAtc3BhY2luZy5TVEVQO1xuXHRcdGlmIChpc0dyYWNlKSBkeSA9IGR5ICogMC40O1xuXHRcdHJldHVybiBkeTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdCZWFtKHJlbmRlcmVyLCBzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgZHksIGlzSGludCkge1xuXHRcdHZhciBrbGFzcyA9ICdiZWFtLWVsZW0nO1xuXHRcdGlmIChpc0hpbnQpXG5cdFx0XHRrbGFzcyArPSBcIiBhYmNqcy1oaW50XCI7XG5cblx0XHQvLyB0aGUgWCBjb29yZGluYXRlcyBhcmUgYWN0dWFsIGNvb3JkaW5hdGVzLCBidXQgdGhlIFkgY29vcmRpbmF0ZXMgYXJlIGluIHBpdGNoZXMuXG5cdFx0c3RhcnRZID0gcmVuZGVyZXIuY2FsY1koc3RhcnRZKTtcblx0XHRlbmRZID0gcmVuZGVyZXIuY2FsY1koZW5kWSk7XG5cdFx0dmFyIHBhdGhTdHJpbmcgPSBcIk1cIiArIHN0YXJ0WCArIFwiIFwiICsgc3RhcnRZICsgXCIgTFwiICsgZW5kWCArIFwiIFwiICsgZW5kWSArXG5cdFx0XHRcIkxcIiArIGVuZFggKyBcIiBcIiArIChlbmRZICsgZHkpICsgXCIgTFwiICsgc3RhcnRYICsgXCIgXCIgKyAoc3RhcnRZICsgZHkpICsgXCJ6XCI7XG5cdFx0cmVuZGVyZXIucHJpbnRQYXRoKHtcblx0XHRcdHBhdGg6IHBhdGhTdHJpbmcsXG5cdFx0XHRzdHJva2U6IFwibm9uZVwiLFxuXHRcdFx0ZmlsbDogXCIjMDAwMDAwXCIsXG5cdFx0XHQnY2xhc3MnOiByZW5kZXJlci5hZGRDbGFzc2VzKGtsYXNzKVxuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY1hQb3MoYXNjLCBmaXJzdEVsZW1lbnQsIGxhc3RFbGVtZW50KSB7XG5cdFx0dmFyIHN0YXJ0aGVhZCA9IGZpcnN0RWxlbWVudC5oZWFkc1thc2MgPyAwIDogZmlyc3RFbGVtZW50LmhlYWRzLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBlbmRoZWFkID0gbGFzdEVsZW1lbnQuaGVhZHNbYXNjID8gMCA6IGxhc3RFbGVtZW50LmhlYWRzLmxlbmd0aCAtIDFdO1xuXHRcdHZhciBzdGFydFggPSBzdGFydGhlYWQueDtcblx0XHRpZiAoYXNjKSBzdGFydFggKz0gc3RhcnRoZWFkLncgLSAwLjY7XG5cdFx0dmFyIGVuZFggPSBlbmRoZWFkLng7XG5cdFx0aWYgKGFzYykgZW5kWCArPSBlbmRoZWFkLnc7XG5cdFx0cmV0dXJuIFsgc3RhcnRYLCBlbmRYIF07XG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjWVBvcyh0b3RhbCwgbnVtRWxlbWVudHMsIHN0ZW1IZWlnaHQsIGFzYywgZmlyc3RBdmVyYWdlUGl0Y2gsIGxhc3RBdmVyYWdlUGl0Y2gsIGlzRmxhdCwgbWluUGl0Y2gsIG1heFBpdGNoLCBpc0dyYWNlKSB7XG5cdFx0dmFyIGF2ZXJhZ2UgPSBjYWxjQXZlcmFnZSh0b3RhbCwgbnVtRWxlbWVudHMpOyAvLyBUaGlzIGlzIHRoZSBhdmVyYWdlIHBpdGNoIGZvciB0aGUgYWxsIHRoZSBub3RlcyB0aGF0IHdpbGwgYmUgYmVhbWVkLlxuXHRcdHZhciBiYXJwb3MgPSBzdGVtSGVpZ2h0IC0gMjsgLy8gKGlzR3JhY2UpPyA1Ojc7XG5cdFx0dmFyIGJhcm1pbnBvcyA9IHN0ZW1IZWlnaHQgLSAyO1xuXHRcdHZhciBwb3MgPSBNYXRoLnJvdW5kKGFzYyA/IE1hdGgubWF4KGF2ZXJhZ2UgKyBiYXJwb3MsIG1heFBpdGNoICsgYmFybWlucG9zKSA6IE1hdGgubWluKGF2ZXJhZ2UgLSBiYXJwb3MsIG1pblBpdGNoIC0gYmFybWlucG9zKSk7XG5cblx0XHR2YXIgc2xhbnQgPSBjYWxjU2xhbnQoZmlyc3RBdmVyYWdlUGl0Y2gsIGxhc3RBdmVyYWdlUGl0Y2gsIG51bUVsZW1lbnRzLCBpc0ZsYXQpO1xuXHRcdHZhciBzdGFydFkgPSBwb3MgKyBNYXRoLmZsb29yKHNsYW50IC8gMik7XG5cdFx0dmFyIGVuZFkgPSBwb3MgKyBNYXRoLmZsb29yKC1zbGFudCAvIDIpO1xuXG5cdFx0Ly8gSWYgdGhlIG5vdGVzIGFyZSB0b28gaGlnaCBvciB0b28gbG93LCBtYWtlIHRoZSBiZWFtIGdvIGRvd24gdG8gdGhlIG1pZGRsZVxuXHRcdGlmICghaXNHcmFjZSkge1xuXHRcdFx0aWYgKGFzYyAmJiBwb3MgPCA2KSB7XG5cdFx0XHRcdHN0YXJ0WSA9IDY7XG5cdFx0XHRcdGVuZFkgPSA2O1xuXHRcdFx0fSBlbHNlIGlmICghYXNjICYmIHBvcyA+IDYpIHtcblx0XHRcdFx0c3RhcnRZID0gNjtcblx0XHRcdFx0ZW5kWSA9IDY7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFsgc3RhcnRZLCBlbmRZXTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVN0ZW1zKGVsZW1zLCBhc2MsIGJlYW0sIGR5LCBtYWluTm90ZSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBlbGVtID0gZWxlbXNbaV07XG5cdFx0XHRpZiAoZWxlbS5hYmNlbGVtLnJlc3QpXG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0Ly8gVE9ETy1QRVI6IFRoaXMgaXMgb2RkLiBJZiBpdCBpcyBhIHJlZ3VsYXIgYmVhbSB0aGVuIGVsZW1zIGlzIGFuIGFycmF5IG9mIEFic29sdXRlRWxlbWVudHMsIGlmIGl0IGlzIGEgZ3JhY2UgYmVhbSB0aGVuIGl0IGlzIGFuIGFycmF5IG9mIG9iamVjdHMgLCBzbyB3ZSBkaXJlY3RseSBhdHRhY2ggdGhlIGVsZW1lbnQgdG8gdGhlIHBhcmVudC4gV2UgdGVsbCBpdCBpZiBpcyBhIGdyYWNlIG5vdGUgYmVjYXVzZSB0aGV5IGFyZSBwYXNzZWQgaW4gYXMgYSBnZW5lcmljIG9iamVjdCBpbnN0ZWFkIG9mIGFuIEFic29sdXRlRWxlbWVudC5cblx0XHRcdHZhciBpc0dyYWNlID0gZWxlbS5hZGRFeHRyYSA/IGZhbHNlIDogdHJ1ZTtcblx0XHRcdHZhciBwYXJlbnQgPSBpc0dyYWNlID8gbWFpbk5vdGUgOiBlbGVtO1xuXHRcdFx0dmFyIGZ1cnRoZXN0SGVhZCA9IGVsZW0uaGVhZHNbKGFzYykgPyAwIDogZWxlbS5oZWFkcy5sZW5ndGggLSAxXTtcblx0XHRcdHZhciBvdmFsRGVsdGEgPSAxIC8gNTsvLyhpc0dyYWNlKT8xLzM6MS81O1xuXHRcdFx0dmFyIHBpdGNoID0gZnVydGhlc3RIZWFkLnBpdGNoICsgKChhc2MpID8gb3ZhbERlbHRhIDogLW92YWxEZWx0YSk7XG5cdFx0XHR2YXIgZHggPSBhc2MgPyBmdXJ0aGVzdEhlYWQudyA6IDA7IC8vIGRvd24tcG9pbnRpbmcgc3RlbXMgc3RhcnQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgbm90ZSwgdXAtcG9pbnRpbmcgc3RlbXMgc3RhcnQgb24gdGhlIHJpZ2h0IHNpZGUsIHNvIHdlIG9mZnNldCBieSB0aGUgbm90ZSB3aWR0aC5cblx0XHRcdHZhciB4ID0gZnVydGhlc3RIZWFkLnggKyBkeDsgLy8gdGhpcyBpcyBub3cgdGhlIGFjdHVhbCB4IGxvY2F0aW9uIGluIHBpeGVscy5cblx0XHRcdHZhciBiYXJ5ID0gZ2V0QmFyWUF0KGJlYW0uc3RhcnRYLCBiZWFtLnN0YXJ0WSwgYmVhbS5lbmRYLCBiZWFtLmVuZFksIHgpO1xuXHRcdFx0dmFyIGxpbmVXaWR0aCA9IChhc2MpID8gLTAuNiA6IDAuNjtcblx0XHRcdGlmICghYXNjKVxuXHRcdFx0XHRiYXJ5IC09IChkeSAvIDIpIC8gc3BhY2luZy5TVEVQO1x0Ly8gVE9ETy1QRVI6IFRoaXMgaXMganVzdCBhIGZ1ZGdlIGZhY3RvciBzbyB0aGUgZG93bi1wb2ludGluZyBzdGVtcyBkb24ndCBvdmVybGFwLlxuXHRcdFx0aWYgKGlzR3JhY2UpXG5cdFx0XHRcdGR4ICs9IGVsZW0uaGVhZHNbMF0uZHg7XG5cdFx0XHQvLyBUT0RPLVBFUi1IQUNLOiBPbmUgdHlwZSBvZiBub3RlIGhlYWQgaGFzIGEgZGlmZmVyZW50IHBsYWNlbWVudCBvZiB0aGUgc3RlbS4gVGhpcyBzaG91bGQgYmUgbW9yZSBnZW5lcmljYWxseSBjYWxjdWxhdGVkOlxuXHRcdFx0aWYgKGZ1cnRoZXN0SGVhZC5jID09PSAnbm90ZWhlYWRzLnNsYXNoLnF1YXJ0ZXInKSB7XG5cdFx0XHRcdGlmIChhc2MpXG5cdFx0XHRcdFx0cGl0Y2ggKz0gMTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHBpdGNoIC09IDE7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RlbSA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDAsIHBpdGNoLCB7XG5cdFx0XHRcdFwidHlwZVwiOiBcInN0ZW1cIixcblx0XHRcdFx0XCJwaXRjaDJcIjogYmFyeSxcblx0XHRcdFx0bGluZXdpZHRoOiBsaW5lV2lkdGhcblx0XHRcdH0pO1xuXHRcdFx0c3RlbS5zZXRYKHBhcmVudC54KTsgLy8gVGhpcyBpcyBhZnRlciB0aGUgeCBjb29yZGluYXRlcyB3ZXJlIHNldCwgc28gd2UgaGF2ZSB0byBzZXQgaXQgZGlyZWN0bHkuXG5cdFx0XHRwYXJlbnQuYWRkRXh0cmEoc3RlbSk7XG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjcmVhdGVBZGRpdGlvbmFsQmVhbXMoZWxlbXMsIGFzYywgYmVhbSwgaXNHcmFjZSwgZHkpIHtcblx0XHR2YXIgYmVhbXMgPSBbXTtcblx0XHR2YXIgYXV4QmVhbXMgPSBbXTsgIC8vIGF1eGJlYW0gd2lsbCBiZSB7eCwgeSwgZHVybG9nLCBzaW5nbGV9IGF1eGJlYW1bMF0gc2hvdWxkIG1hdGNoIHdpdGggZHVybG9nPS00ICgxNnRoKSAoaj0tNC1kdXJsb2cpXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGVsZW0gPSBlbGVtc1tpXTtcblx0XHRcdGlmIChlbGVtLmFiY2VsZW0ucmVzdClcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR2YXIgZnVydGhlc3RIZWFkID0gZWxlbS5oZWFkc1soYXNjKSA/IDAgOiBlbGVtLmhlYWRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0dmFyIHggPSBmdXJ0aGVzdEhlYWQueCArICgoYXNjKSA/IGZ1cnRoZXN0SGVhZC53IDogMCk7XG5cdFx0XHR2YXIgYmFyeSA9IGdldEJhcllBdChiZWFtLnN0YXJ0WCwgYmVhbS5zdGFydFksIGJlYW0uZW5kWCwgYmVhbS5lbmRZLCB4KTtcblxuXHRcdFx0dmFyIHN5ID0gKGFzYykgPyAtMS41IDogMS41O1xuXHRcdFx0aWYgKGlzR3JhY2UpIHN5ID0gc3kgKiAyIC8gMzsgLy8gVGhpcyBtYWtlcyB0aGUgc2Vjb25kIGJlYW0gb24gZ3JhY2Ugbm90ZXMgY2xvc2VyIHRvIHRoZSBmaXJzdCBvbmUuXG5cdFx0XHR2YXIgZHVyYXRpb24gPSBlbGVtLmFiY2VsZW0uZHVyYXRpb247IC8vIGdldCB0aGUgZHVyYXRpb24gdmlhIGFiY2VsZW0gYmVjYXVzZSBvZiB0cmlwbGV0c1xuXHRcdFx0aWYgKGR1cmF0aW9uID09PSAwKSBkdXJhdGlvbiA9IDAuMjU7IC8vIGlmIHRoaXMgaXMgc3RlbWxlc3MsIHRoZW4gd2UgdXNlIHF1YXJ0ZXIgbm90ZSBhcyB0aGUgZHVyYXRpb24uXG5cdFx0XHRmb3IgKHZhciBkdXJsb2cgPSBnZXREdXJsb2coZHVyYXRpb24pOyBkdXJsb2cgPCAtMzsgZHVybG9nKyspIHtcblx0XHRcdFx0aWYgKGF1eEJlYW1zWy00IC0gZHVybG9nXSkge1xuXHRcdFx0XHRcdGF1eEJlYW1zWy00IC0gZHVybG9nXS5zaW5nbGUgPSBmYWxzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhdXhCZWFtc1stNCAtIGR1cmxvZ10gPSB7XG5cdFx0XHRcdFx0XHR4OiB4ICsgKChhc2MpID8gLTAuNiA6IDApLCB5OiBiYXJ5ICsgc3kgKiAoLTQgLSBkdXJsb2cgKyAxKSxcblx0XHRcdFx0XHRcdGR1cmxvZzogZHVybG9nLCBzaW5nbGU6IHRydWVcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIGogPSBhdXhCZWFtcy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuXHRcdFx0XHRpZiAoaSA9PT0gZWxlbXMubGVuZ3RoIC0gMSB8fCBnZXREdXJsb2coZWxlbXNbaSArIDFdLmFiY2VsZW0uZHVyYXRpb24pID4gKC1qIC0gNCkpIHtcblxuXHRcdFx0XHRcdHZhciBhdXhCZWFtRW5kWCA9IHg7XG5cdFx0XHRcdFx0dmFyIGF1eEJlYW1FbmRZID0gYmFyeSArIHN5ICogKGogKyAxKTtcblxuXG5cdFx0XHRcdFx0aWYgKGF1eEJlYW1zW2pdLnNpbmdsZSkge1xuXHRcdFx0XHRcdFx0YXV4QmVhbUVuZFggPSAoaSA9PT0gMCkgPyB4ICsgNSA6IHggLSA1O1xuXHRcdFx0XHRcdFx0YXV4QmVhbUVuZFkgPSBnZXRCYXJZQXQoYmVhbS5zdGFydFgsIGJlYW0uc3RhcnRZLCBiZWFtLmVuZFgsIGJlYW0uZW5kWSwgYXV4QmVhbUVuZFgpICsgc3kgKiAoaiArIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRiZWFtcy5wdXNoKHsgc3RhcnRYOiBhdXhCZWFtc1tqXS54LCBlbmRYOiBhdXhCZWFtRW5kWCwgc3RhcnRZOiBhdXhCZWFtc1tqXS55LCBlbmRZOiBhdXhCZWFtRW5kWSwgZHk6IGR5IH0pO1xuXHRcdFx0XHRcdGF1eEJlYW1zID0gYXV4QmVhbXMuc2xpY2UoMCwgaik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJlYW1zO1xuXHR9XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJlYW1FbGVtO1xuIiwiLy8gICAgYWJjX2JyYWNlX2VsZW1lbnQuanM6IERlZmluaXRpb24gb2YgdGhlIEJyYWNlRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIEJyYWNlRWxlbSA9IGZ1bmN0aW9uIEJyYWNlRWxlbSgpIHtcbiAgICB0aGlzLmxlbmd0aCA9IDE7XG59O1xuXG5CcmFjZUVsZW0ucHJvdG90eXBlLmluY3JlYXNlU3RhdmVzSW5jbHVkZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmxlbmd0aCsrO1xufTtcblxuQnJhY2VFbGVtLnByb3RvdHlwZS5zZXRMb2NhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcblx0dGhpcy54ID0geDtcbn07XG5cbkJyYWNlRWxlbS5wcm90b3R5cGUuZ2V0V2lkdGggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDEwOyAvLyBUT0RPLVBFUjogcmlnaHQgbm93IHRoZSBkcmF3aW5nIGZ1bmN0aW9uIGRvZXNuJ3QgdmFyeSB0aGUgd2lkdGggYXQgYWxsLiBJZiBpdCBkb2VzIGluIHRoZSBmdXR1cmUgdGhlbiB0aGlzIHdpbGwgY2hhbmdlLlxufTtcblxuQnJhY2VFbGVtLnByb3RvdHlwZS5sYXlvdXQgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHRvcCwgYm90dG9tKSB7XG4gICAgdGhpcy5zdGFydFkgPSB0b3A7XG4gICAgdGhpcy5lbmRZID0gYm90dG9tO1xufTtcblxuQnJhY2VFbGVtLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKHJlbmRlcmVyLCB0b3AsIGJvdHRvbSkge1xuICAgIHRoaXMubGF5b3V0KHJlbmRlcmVyLCB0b3AsIGJvdHRvbSk7XG4gICAgcmVuZGVyZXIuZHJhd0JyYWNlKHRoaXMueCx0aGlzLnN0YXJ0WSwgdGhpcy5lbmRZKTtcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBCcmFjZUVsZW07XG4iLCJ2YXIgc3BhY2luZyA9IHJlcXVpcmUoJy4vYWJjX3NwYWNpbmcnKTtcblxuLyoqXG4gKiBHbHlwaHMgYW5kIHNvbWUgbWV0aG9kcyB0byBhZGp1c3QgZm9yIHRoZWlyIHggYW5kIHkgYmFzZWxpbmVcbiAqL1xuXHR2YXIgZ2x5cGhzID1cblx0eycwJzp7ZDpbWydNJyw0LjgzLC0xNC45N10sWydjJywwLjMzLC0wLjAzLDEuMTEsMC4wMCwxLjQ3LDAuMDZdLFsnYycsMS42OCwwLjM2LDIuOTcsMS41OSwzLjc4LDMuNjBdLFsnYycsMS4yMCwyLjk3LDAuODEsNi45NiwtMC45MCw5LjI3XSxbJ2MnLC0wLjc4LDEuMDgsLTEuNzEsMS43MSwtMi45MSwxLjk1XSxbJ2MnLC0wLjQ1LDAuMDksLTEuMzIsMC4wOSwtMS43NywwLjAwXSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjQ3LC0wLjUxLC0yLjA3LC0xLjAyXSxbJ2MnLC0yLjM0LC0yLjA3LC0zLjE1LC02LjcyLC0xLjc0LC0xMC4yMF0sWydjJywwLjg3LC0yLjE2LDIuMjgsLTMuNDIsNC4xNCwtMy42Nl0sWyd6J10sWydtJywxLjExLDAuODddLFsnYycsLTAuMjEsLTAuMDYsLTAuNjksLTAuMDksLTAuODcsLTAuMDZdLFsnYycsLTAuNTQsMC4xMiwtMC44NywwLjQyLC0xLjE3LDAuOTldLFsnYycsLTAuMzYsMC42NiwtMC41MSwxLjU2LC0wLjYwLDMuMDBdLFsnYycsLTAuMDMsMC43NSwtMC4wMyw0LjU5LDAuMDAsNS4zMV0sWydjJywwLjA5LDEuNTAsMC4yNywyLjQwLDAuNjAsMy4wNl0sWydjJywwLjI0LDAuNDgsMC41NywwLjc4LDAuOTYsMC45MF0sWydjJywwLjI3LDAuMDksMC43OCwwLjA5LDEuMDUsMC4wMF0sWydjJywwLjM5LC0wLjEyLDAuNzIsLTAuNDIsMC45NiwtMC45MF0sWydjJywwLjMzLC0wLjY2LDAuNTEsLTEuNTYsMC42MCwtMy4wNl0sWydjJywwLjAzLC0wLjcyLDAuMDMsLTQuNTYsMC4wMCwtNS4zMV0sWydjJywtMC4wOSwtMS40NywtMC4yNywtMi4zNywtMC42MCwtMy4wM10sWydjJywtMC4yNCwtMC40OCwtMC41NCwtMC43OCwtMC45MywtMC45MF0sWyd6J11dLHc6MTAuNzgsaDoxNC45NTl9LFxuXHRcdCcxJzp7ZDpbWydNJywzLjMwLC0xNS4wNl0sWydjJywwLjA2LC0wLjA2LDAuMjEsLTAuMDMsMC42NiwwLjE1XSxbJ2MnLDAuODEsMC4zOSwxLjA4LDAuMzksMS44MywwLjAzXSxbJ2MnLDAuMjEsLTAuMDksMC4zOSwtMC4xNSwwLjQyLC0wLjE1XSxbJ2MnLDAuMTIsMC4wMCwwLjIxLDAuMDksMC4yNywwLjIxXSxbJ2MnLDAuMDYsMC4xMiwwLjA2LDAuMzMsMC4wNiw1Ljk0XSxbJ2MnLDAuMDAsMy45MywwLjAwLDUuODUsMC4wMyw2LjAzXSxbJ2MnLDAuMDYsMC4zNiwwLjE1LDAuNjksMC4yNywwLjk2XSxbJ2MnLDAuMzYsMC43NSwwLjkzLDEuMTcsMS42OCwxLjI2XSxbJ2MnLDAuMzAsMC4wMywwLjM5LDAuMDksMC4zOSwwLjMwXSxbJ2MnLDAuMDAsMC4xNSwtMC4wMywwLjE4LC0wLjA5LDAuMjRdLFsnYycsLTAuMDYsMC4wNiwtMC4wOSwwLjA2LC0wLjQ4LDAuMDZdLFsnYycsLTAuNDIsMC4wMCwtMC42OSwtMC4wMywtMi4xMCwtMC4yNF0sWydjJywtMC45MCwtMC4xNSwtMS43NywtMC4xNSwtMi42NywwLjAwXSxbJ2MnLC0xLjQxLDAuMjEsLTEuNjgsMC4yNCwtMi4xMCwwLjI0XSxbJ2MnLC0wLjM5LDAuMDAsLTAuNDIsMC4wMCwtMC40OCwtMC4wNl0sWydjJywtMC4wNiwtMC4wNiwtMC4wNiwtMC4wOSwtMC4wNiwtMC4yNF0sWydjJywwLjAwLC0wLjIxLDAuMDYsLTAuMjcsMC4zNiwtMC4zMF0sWydjJywwLjc1LC0wLjA5LDEuMzIsLTAuNTEsMS42OCwtMS4yNl0sWydjJywwLjEyLC0wLjI3LDAuMjEsLTAuNjAsMC4yNywtMC45Nl0sWydjJywwLjAzLC0wLjE4LDAuMDMsLTEuNTksMC4wMywtNC4yOV0sWydjJywwLjAwLC0zLjg3LDAuMDAsLTQuMDUsLTAuMDYsLTQuMTRdLFsnYycsLTAuMDksLTAuMTUsLTAuMTgsLTAuMjQsLTAuMzksLTAuMjRdLFsnYycsLTAuMTIsMC4wMCwtMC4xNSwwLjAzLC0wLjIxLDAuMDZdLFsnYycsLTAuMDMsMC4wNiwtMC40NSwwLjk5LC0wLjk2LDIuMTNdLFsnYycsLTAuNDgsMS4xNCwtMC45MCwyLjEwLC0wLjkzLDIuMTZdLFsnYycsLTAuMDYsMC4xNSwtMC4yMSwwLjI0LC0wLjMzLDAuMjRdLFsnYycsLTAuMjQsMC4wMCwtMC40MiwtMC4xOCwtMC40MiwtMC4zOV0sWydjJywwLjAwLC0wLjA2LDMuMjcsLTcuNjIsMy4zMywtNy43NF0sWyd6J11dLHc6OC45NCxoOjE1LjA1OH0sXG5cdFx0JzInOntkOltbJ00nLDQuMjMsLTE0Ljk3XSxbJ2MnLDAuNTcsLTAuMDYsMS42OCwwLjAwLDIuMzQsMC4xOF0sWydjJywwLjY5LDAuMTgsMS41MCwwLjU0LDIuMDEsMC45MF0sWydjJywxLjM1LDAuOTYsMS45NSwyLjI1LDEuNzcsMy44MV0sWydjJywtMC4xNSwxLjM1LC0wLjY2LDIuMzQsLTEuNjgsMy4xNV0sWydjJywtMC42MCwwLjQ4LC0xLjQ0LDAuOTMsLTMuMTIsMS42NV0sWydjJywtMS4zMiwwLjU3LC0xLjgwLDAuODEsLTIuMzcsMS4xNF0sWydjJywtMC41NywwLjMzLC0wLjU3LDAuMzMsLTAuMjQsMC4yN10sWydjJywwLjM5LC0wLjA5LDEuMjYsLTAuMDksMS42OCwwLjAwXSxbJ2MnLDAuNzIsMC4xNSwxLjQxLDAuNDUsMi4xMCwwLjkwXSxbJ2MnLDAuOTksMC42MywxLjg2LDAuODcsMi41NSwwLjc1XSxbJ2MnLDAuMjQsLTAuMDYsMC40MiwtMC4xNSwwLjU3LC0wLjMwXSxbJ2MnLDAuMTIsLTAuMDksMC4zMCwtMC40MiwwLjMwLC0wLjUxXSxbJ2MnLDAuMDAsLTAuMDksMC4xMiwtMC4yMSwwLjI0LC0wLjI0XSxbJ2MnLDAuMTgsLTAuMDMsMC4zOSwwLjEyLDAuMzksMC4zMF0sWydjJywwLjAwLDAuMTIsLTAuMTUsMC41NywtMC4zMCwwLjg3XSxbJ2MnLC0wLjU0LDEuMDIsLTEuNTYsMS43NCwtMi43OSwyLjAxXSxbJ2MnLC0wLjQyLDAuMDksLTEuMjMsMC4wOSwtMS42MiwwLjAzXSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjMyLC0wLjQ1LC0yLjAxLC0xLjExXSxbJ2MnLC0wLjQ1LC0wLjQ1LC0wLjYzLC0wLjU3LC0wLjk2LC0wLjY5XSxbJ2MnLC0wLjg0LC0wLjI3LC0xLjg5LDAuMTIsLTIuMjUsMC45MF0sWydjJywtMC4xMiwwLjIxLC0wLjIxLDAuNTQsLTAuMjEsMC43Ml0sWydjJywwLjAwLDAuMTIsLTAuMTIsMC4yMSwtMC4yNywwLjI0XSxbJ2MnLC0wLjE1LDAuMDAsLTAuMjcsLTAuMDMsLTAuMzMsLTAuMTVdLFsnYycsLTAuMDksLTAuMjEsMC4wOSwtMS4wOCwwLjMzLC0xLjcxXSxbJ2MnLDAuMjQsLTAuNjYsMC42NiwtMS4yNiwxLjI5LC0xLjg5XSxbJ2MnLDAuNDUsLTAuNDUsMC45MCwtMC44MSwxLjkyLC0xLjU2XSxbJ2MnLDEuMjksLTAuOTMsMS44OSwtMS40NCwyLjM0LC0xLjk4XSxbJ2MnLDAuODcsLTEuMDUsMS4yNiwtMi4xOSwxLjIwLC0zLjYzXSxbJ2MnLC0wLjA2LC0xLjI5LC0wLjM5LC0yLjMxLC0wLjk2LC0yLjkxXSxbJ2MnLC0wLjM2LC0wLjMzLC0wLjcyLC0wLjUxLC0xLjE3LC0wLjU0XSxbJ2MnLC0wLjg0LC0wLjAzLC0xLjUzLDAuNDIsLTEuNTksMS4wNV0sWydjJywtMC4wMywwLjMzLDAuMTIsMC42MCwwLjU3LDEuMTRdLFsnYycsMC40NSwwLjU0LDAuNTQsMC44NywwLjQyLDEuNDFdLFsnYycsLTAuMTUsMC42MywtMC41NCwxLjExLC0xLjA4LDEuMzhdLFsnYycsLTAuNjMsMC4zMywtMS4yMCwwLjMzLC0xLjgzLDAuMDBdLFsnYycsLTAuMjQsLTAuMTIsLTAuMzMsLTAuMTgsLTAuNTQsLTAuMzldLFsnYycsLTAuMTgsLTAuMTgsLTAuMjcsLTAuMzAsLTAuMzYsLTAuNTFdLFsnYycsLTAuMjQsLTAuNDUsLTAuMjcsLTAuODQsLTAuMjEsLTEuMzhdLFsnYycsMC4xMiwtMC43NSwwLjQ1LC0xLjQxLDEuMDIsLTEuOThdLFsnYycsMC43MiwtMC43MiwxLjc0LC0xLjE3LDIuODUsLTEuMzJdLFsneiddXSx3OjEwLjc2NCxoOjE0Ljk3fSxcblx0XHQnMyc6e2Q6W1snTScsMy43OCwtMTQuOTddLFsnYycsMC4zMCwtMC4wMywxLjQxLDAuMDAsMS44MywwLjA2XSxbJ2MnLDIuMjIsMC4zMCwzLjUxLDEuMzIsMy43MiwyLjkxXSxbJ2MnLDAuMDMsMC4zMywwLjAzLDEuMjYsLTAuMDMsMS42NV0sWydjJywtMC4xMiwwLjg0LC0wLjQ4LDEuNDcsLTEuMDUsMS43N10sWydjJywtMC4yNywwLjE1LC0wLjM2LDAuMjQsLTAuNDUsMC4zOV0sWydjJywtMC4wOSwwLjIxLC0wLjA5LDAuMzYsMC4wMCwwLjU3XSxbJ2MnLDAuMDksMC4xNSwwLjE4LDAuMjQsMC41MSwwLjM5XSxbJ2MnLDAuNzUsMC40MiwxLjIzLDEuMTQsMS40MSwyLjEzXSxbJ2MnLDAuMDYsMC40MiwwLjA2LDEuMzUsMC4wMCwxLjcxXSxbJ2MnLC0wLjE4LDAuODEsLTAuNDgsMS4zOCwtMS4wMiwxLjk1XSxbJ2MnLC0wLjc1LDAuNzIsLTEuODAsMS4yMCwtMy4xOCwxLjM4XSxbJ2MnLC0wLjQyLDAuMDYsLTEuNTYsMC4wNiwtMS45NSwwLjAwXSxbJ2MnLC0xLjg5LC0wLjMzLC0zLjE4LC0xLjI5LC0zLjUxLC0yLjY0XSxbJ2MnLC0wLjAzLC0wLjEyLC0wLjAzLC0wLjMzLC0wLjAzLC0wLjYwXSxbJ2MnLDAuMDAsLTAuMzYsMC4wMCwtMC40MiwwLjA2LC0wLjYzXSxbJ2MnLDAuMTIsLTAuMzAsMC4yNywtMC41MSwwLjUxLC0wLjc1XSxbJ2MnLDAuMjQsLTAuMjQsMC40NSwtMC4zOSwwLjc1LC0wLjUxXSxbJ2MnLDAuMjEsLTAuMDYsMC4yNywtMC4wNiwwLjYwLC0wLjA2XSxbJ2MnLDAuMzMsMC4wMCwwLjM5LDAuMDAsMC42MCwwLjA2XSxbJ2MnLDAuMzAsMC4xMiwwLjUxLDAuMjcsMC43NSwwLjUxXSxbJ2MnLDAuMzYsMC4zMywwLjU3LDAuNzUsMC42MCwxLjIwXSxbJ2MnLDAuMDAsMC4yMSwwLjAwLDAuMjcsLTAuMDYsMC40Ml0sWydjJywtMC4wOSwwLjE4LC0wLjEyLDAuMjQsLTAuNTQsMC41NF0sWydjJywtMC41MSwwLjM2LC0wLjYzLDAuNTQsLTAuNjAsMC44N10sWydjJywwLjA2LDAuNTQsMC41NCwwLjkwLDEuMzgsMC45OV0sWydjJywwLjM2LDAuMDYsMC43MiwwLjAzLDAuOTYsLTAuMDZdLFsnYycsMC44MSwtMC4yNywxLjI5LC0xLjIzLDEuNDQsLTIuNzldLFsnYycsMC4wMywtMC40NSwwLjAzLC0xLjk1LC0wLjAzLC0yLjM3XSxbJ2MnLC0wLjA5LC0wLjc1LC0wLjMzLC0xLjIzLC0wLjc1LC0xLjQ0XSxbJ2MnLC0wLjMzLC0wLjE4LC0wLjQ1LC0wLjE4LC0xLjk4LC0wLjE4XSxbJ2MnLC0xLjM1LDAuMDAsLTEuNDEsMC4wMCwtMS41MCwtMC4wNl0sWydjJywtMC4xOCwtMC4xMiwtMC4yNCwtMC4zOSwtMC4xMiwtMC42MF0sWydjJywwLjEyLC0wLjE1LDAuMTUsLTAuMTUsMS42OCwtMC4xNV0sWydjJywxLjUwLDAuMDAsMS42MiwwLjAwLDEuODksLTAuMTVdLFsnYycsMC4xOCwtMC4wOSwwLjQyLC0wLjM2LDAuNTQsLTAuNTddLFsnYycsMC4xOCwtMC40MiwwLjI3LC0wLjkwLDAuMzAsLTEuOTVdLFsnYycsMC4wMywtMS4yMCwtMC4wNiwtMS44MCwtMC4zNiwtMi4zN10sWydjJywtMC4yNCwtMC40OCwtMC42MywtMC44MSwtMS4xNCwtMC45Nl0sWydjJywtMC4zMCwtMC4wNiwtMS4wOCwtMC4wNiwtMS4zOCwwLjAzXSxbJ2MnLC0wLjYwLDAuMTUsLTAuOTAsMC40MiwtMC45NiwwLjg0XSxbJ2MnLC0wLjAzLDAuMzAsMC4wNiwwLjQ1LDAuNjMsMC44NF0sWydjJywwLjMzLDAuMjQsMC40MiwwLjM5LDAuNDUsMC42M10sWydjJywwLjAzLDAuNzIsLTAuNTcsMS41MCwtMS4zMiwxLjY1XSxbJ2MnLC0xLjA1LDAuMjcsLTIuMTAsLTAuNTcsLTIuMTAsLTEuNjVdLFsnYycsMC4wMCwtMC40NSwwLjE1LC0wLjk2LDAuMzksLTEuMzhdLFsnYycsMC4xMiwtMC4yMSwwLjU0LC0wLjYzLDAuODEsLTAuODFdLFsnYycsMC41NywtMC40MiwxLjM4LC0wLjY5LDIuMjUsLTAuODFdLFsneiddXSx3OjkuNzM1LGg6MTQuOTY3fSxcblx0XHQnNCc6e2Q6W1snTScsOC42NCwtMTQuOTRdLFsnYycsMC4yNywtMC4wOSwwLjQyLC0wLjEyLDAuNTQsLTAuMDNdLFsnYycsMC4wOSwwLjA2LDAuMTUsMC4yMSwwLjE1LDAuMzBdLFsnYycsLTAuMDMsMC4wNiwtMS45MiwyLjMxLC00LjIzLDUuMDRdLFsnYycsLTIuMzEsMi43MywtNC4yMyw0Ljk4LC00LjI2LDUuMDFdLFsnYycsLTAuMDMsMC4wNiwwLjEyLDAuMDYsMi41NSwwLjA2XSxbJ2wnLDIuNjEsMC4wMF0sWydsJywwLjAwLC0yLjM3XSxbJ2MnLDAuMDAsLTIuMTksMC4wMywtMi4zNywwLjA2LC0yLjQ2XSxbJ2MnLDAuMDMsLTAuMDYsMC4yMSwtMC4xOCwwLjU3LC0wLjQyXSxbJ2MnLDEuMDgsLTAuNzIsMS4zOCwtMS4wOCwxLjg2LC0yLjE2XSxbJ2MnLDAuMTIsLTAuMzAsMC4yNCwtMC41NCwwLjI3LC0wLjU3XSxbJ2MnLDAuMTIsLTAuMTIsMC4zOSwtMC4wNiwwLjQ1LDAuMTJdLFsnYycsMC4wNiwwLjA5LDAuMDYsMC41NywwLjA2LDMuOTZdLFsnbCcsMC4wMCwzLjkwXSxbJ2wnLDEuMDgsMC4wMF0sWydjJywxLjA1LDAuMDAsMS4xMSwwLjAwLDEuMjAsMC4wNl0sWydjJywwLjI0LDAuMTUsMC4yNCwwLjU0LDAuMDAsMC42OV0sWydjJywtMC4wOSwwLjA2LC0wLjE1LDAuMDYsLTEuMjAsMC4wNl0sWydsJywtMS4wOCwwLjAwXSxbJ2wnLDAuMDAsMC4zM10sWydjJywwLjAwLDAuNTcsMC4wOSwxLjExLDAuMzAsMS41M10sWydjJywwLjM2LDAuNzUsMC45MywxLjE3LDEuNjgsMS4yNl0sWydjJywwLjMwLDAuMDMsMC4zOSwwLjA5LDAuMzksMC4zMF0sWydjJywwLjAwLDAuMTUsLTAuMDMsMC4xOCwtMC4wOSwwLjI0XSxbJ2MnLC0wLjA2LDAuMDYsLTAuMDksMC4wNiwtMC40OCwwLjA2XSxbJ2MnLC0wLjQyLDAuMDAsLTAuNjksLTAuMDMsLTIuMTAsLTAuMjRdLFsnYycsLTAuOTAsLTAuMTUsLTEuNzcsLTAuMTUsLTIuNjcsMC4wMF0sWydjJywtMS40MSwwLjIxLC0xLjY4LDAuMjQsLTIuMTAsMC4yNF0sWydjJywtMC4zOSwwLjAwLC0wLjQyLDAuMDAsLTAuNDgsLTAuMDZdLFsnYycsLTAuMDYsLTAuMDYsLTAuMDYsLTAuMDksLTAuMDYsLTAuMjRdLFsnYycsMC4wMCwtMC4yMSwwLjA2LC0wLjI3LDAuMzYsLTAuMzBdLFsnYycsMC43NSwtMC4wOSwxLjMyLC0wLjUxLDEuNjgsLTEuMjZdLFsnYycsMC4yMSwtMC40MiwwLjMwLC0wLjk2LDAuMzAsLTEuNTNdLFsnbCcsMC4wMCwtMC4zM10sWydsJywtMi43MCwwLjAwXSxbJ2MnLC0yLjkxLDAuMDAsLTIuODUsMC4wMCwtMy4wOSwtMC4xNV0sWydjJywtMC4xOCwtMC4xMiwtMC4zMCwtMC4zOSwtMC4yNywtMC41NF0sWydjJywwLjAzLC0wLjA2LDAuMTgsLTAuMjQsMC4zMywtMC40NV0sWydjJywwLjc1LC0wLjkwLDEuNTksLTIuMDcsMi4xMywtMy4wM10sWydjJywwLjMzLC0wLjU0LDAuODQsLTEuNjIsMS4wNSwtMi4xNl0sWydjJywwLjU3LC0xLjQxLDAuODQsLTIuNjQsMC45MCwtNC4wNV0sWydjJywwLjAzLC0wLjYzLDAuMDYsLTAuNzIsMC4yNCwtMC44MV0sWydsJywwLjEyLC0wLjA2XSxbJ2wnLDAuNDUsMC4xMl0sWydjJywwLjY2LDAuMTgsMS4wMiwwLjI0LDEuNDcsMC4yN10sWydjJywwLjYwLDAuMDMsMS4yMywtMC4wOSwyLjAxLC0wLjMzXSxbJ3onXV0sdzoxMS43OTUsaDoxNC45OTR9LFxuXHRcdCc1Jzp7ZDpbWydNJywxLjAyLC0xNC45NF0sWydjJywwLjEyLC0wLjA5LDAuMDMsLTAuMDksMS4wOCwwLjA2XSxbJ2MnLDIuNDksMC4zNiw0LjM1LDAuMzYsNi45NiwtMC4wNl0sWydjJywwLjU3LC0wLjA5LDAuNjYsLTAuMDYsMC44MSwwLjA2XSxbJ2MnLDAuMTUsMC4xOCwwLjEyLDAuMjQsLTAuMTUsMC41MV0sWydjJywtMS4yOSwxLjI2LC0zLjI0LDIuMDQsLTUuNTgsMi4zMV0sWydjJywtMC42MCwwLjA5LC0xLjIwLDAuMTIsLTEuNzEsMC4xMl0sWydjJywtMC4zOSwwLjAwLC0wLjQ1LDAuMDAsLTAuNTcsMC4wNl0sWydjJywtMC4wOSwwLjA2LC0wLjE1LDAuMTIsLTAuMjEsMC4yMV0sWydsJywtMC4wNiwwLjEyXSxbJ2wnLDAuMDAsMS42NV0sWydsJywwLjAwLDEuNjVdLFsnbCcsMC4yMSwtMC4yMV0sWydjJywwLjY2LC0wLjU3LDEuNDEsLTAuOTYsMi4xOSwtMS4xNF0sWydjJywwLjMzLC0wLjA2LDEuNDEsLTAuMDYsMS45NSwwLjAwXSxbJ2MnLDIuNjEsMC4zNiw0LjAyLDEuNzQsNC4yNiw0LjE0XSxbJ2MnLDAuMDMsMC40NSwwLjAzLDEuMDgsLTAuMDMsMS40NF0sWydjJywtMC4xOCwxLjAyLC0wLjc4LDIuMDEsLTEuNTksMi43MF0sWydjJywtMC43MiwwLjU3LC0xLjYyLDEuMDIsLTIuNDksMS4yMF0sWydjJywtMS4zOCwwLjI3LC0zLjAzLDAuMDYsLTQuMjAsLTAuNTRdLFsnYycsLTEuMDgsLTAuNTQsLTEuNzEsLTEuMzIsLTEuODYsLTIuMjhdLFsnYycsLTAuMDksLTAuNjksMC4wOSwtMS4yOSwwLjU3LC0xLjc0XSxbJ2MnLDAuMjQsLTAuMjQsMC40NSwtMC4zOSwwLjc1LC0wLjUxXSxbJ2MnLDAuMjEsLTAuMDYsMC4yNywtMC4wNiwwLjYwLC0wLjA2XSxbJ2MnLDAuMzMsMC4wMCwwLjM5LDAuMDAsMC42MCwwLjA2XSxbJ2MnLDAuMzAsMC4xMiwwLjUxLDAuMjcsMC43NSwwLjUxXSxbJ2MnLDAuMzYsMC4zMywwLjU3LDAuNzUsMC42MCwxLjIwXSxbJ2MnLDAuMDAsMC4yMSwwLjAwLDAuMjcsLTAuMDYsMC40Ml0sWydjJywtMC4wOSwwLjE4LC0wLjEyLDAuMjQsLTAuNTQsMC41NF0sWydjJywtMC4xOCwwLjEyLC0wLjM2LDAuMzAsLTAuNDIsMC4zM10sWydjJywtMC4zNiwwLjQyLC0wLjE4LDAuOTksMC4zNiwxLjI2XSxbJ2MnLDAuNTEsMC4yNywxLjQ3LDAuMzYsMi4wMSwwLjI3XSxbJ2MnLDAuOTMsLTAuMjEsMS40NywtMS4xNywxLjY1LC0yLjkxXSxbJ2MnLDAuMDYsLTAuNDUsMC4wNiwtMS44OSwwLjAwLC0yLjMxXSxbJ2MnLC0wLjE1LC0xLjIwLC0wLjUxLC0yLjEwLC0xLjA1LC0yLjU1XSxbJ2MnLC0wLjIxLC0wLjE4LC0wLjU0LC0wLjM2LC0wLjgxLC0wLjM5XSxbJ2MnLC0wLjMwLC0wLjA2LC0wLjg0LC0wLjAzLC0xLjI2LDAuMDZdLFsnYycsLTAuOTMsMC4xOCwtMS42NSwwLjYwLC0yLjE2LDEuMjBdLFsnYycsLTAuMTUsMC4yMSwtMC4yNywwLjMwLC0wLjM5LDAuMzBdLFsnYycsLTAuMTUsMC4wMCwtMC4zMCwtMC4wOSwtMC4zNiwtMC4xOF0sWydjJywtMC4wNiwtMC4wOSwtMC4wNiwtMC4xNSwtMC4wNiwtMy42Nl0sWydjJywwLjAwLC0zLjM5LDAuMDAsLTMuNTcsMC4wNiwtMy42Nl0sWydjJywwLjAzLC0wLjA2LDAuMDksLTAuMTUsMC4xNSwtMC4xOF0sWyd6J11dLHc6MTAuMjEyLGg6MTQuOTk3fSxcblx0XHQnNic6e2Q6W1snTScsNC45OCwtMTQuOTddLFsnYycsMC4zNiwtMC4wMywxLjIwLDAuMDAsMS41OSwwLjA2XSxbJ2MnLDAuOTAsMC4xNSwxLjY4LDAuNTEsMi4yNSwxLjA1XSxbJ2MnLDAuNTcsMC41MSwwLjg3LDEuMjMsMC44NCwxLjk4XSxbJ2MnLC0wLjAzLDAuNTEsLTAuMjEsMC45MCwtMC42MCwxLjI2XSxbJ2MnLC0wLjI0LDAuMjQsLTAuNDUsMC4zOSwtMC43NSwwLjUxXSxbJ2MnLC0wLjIxLDAuMDYsLTAuMjcsMC4wNiwtMC42MCwwLjA2XSxbJ2MnLC0wLjMzLDAuMDAsLTAuMzksMC4wMCwtMC42MCwtMC4wNl0sWydjJywtMC4zMCwtMC4xMiwtMC41MSwtMC4yNywtMC43NSwtMC41MV0sWydjJywtMC4zOSwtMC4zNiwtMC41NywtMC43OCwtMC41NywtMS4yNl0sWydjJywwLjAwLC0wLjI3LDAuMDAsLTAuMzAsMC4wOSwtMC40Ml0sWydjJywwLjAzLC0wLjA5LDAuMTgsLTAuMjEsMC4zMCwtMC4zMF0sWydjJywwLjEyLC0wLjA5LDAuMzAsLTAuMjEsMC4zOSwtMC4yN10sWydjJywwLjA5LC0wLjA2LDAuMjEsLTAuMTgsMC4yNywtMC4yNF0sWydjJywwLjA2LC0wLjEyLDAuMDksLTAuMTUsMC4wOSwtMC4zM10sWydjJywwLjAwLC0wLjE4LC0wLjAzLC0wLjI0LC0wLjA5LC0wLjM2XSxbJ2MnLC0wLjI0LC0wLjM5LC0wLjc1LC0wLjYwLC0xLjM4LC0wLjU3XSxbJ2MnLC0wLjU0LDAuMDMsLTAuOTAsMC4xOCwtMS4yMywwLjQ4XSxbJ2MnLC0wLjgxLDAuNzIsLTEuMDgsMi4xNiwtMC45Niw1LjM3XSxbJ2wnLDAuMDAsMC42M10sWydsJywwLjMwLC0wLjEyXSxbJ2MnLDAuNzgsLTAuMjcsMS4yOSwtMC4zMywyLjEwLC0wLjI3XSxbJ2MnLDEuNDcsMC4xMiwyLjQ5LDAuNTQsMy4yNywxLjI5XSxbJ2MnLDAuNDgsMC41MSwwLjgxLDEuMTEsMC45NiwxLjg5XSxbJ2MnLDAuMDYsMC4yNywwLjA2LDAuNDIsMC4wNiwwLjkzXSxbJ2MnLDAuMDAsMC41NCwwLjAwLDAuNjksLTAuMDYsMC45Nl0sWydjJywtMC4xNSwwLjc4LC0wLjQ4LDEuMzgsLTAuOTYsMS44OV0sWydjJywtMC41NCwwLjUxLC0xLjE3LDAuODcsLTEuOTgsMS4wOF0sWydjJywtMS4xNCwwLjMwLC0yLjQwLDAuMzMsLTMuMjQsMC4wM10sWydjJywtMS41MCwtMC40OCwtMi42NCwtMS44OSwtMy4yNywtNC4wMl0sWydjJywtMC4zNiwtMS4yMywtMC41MSwtMi44MiwtMC40MiwtNC4wOF0sWydjJywwLjMwLC0zLjY2LDIuMjgsLTYuMzAsNC45NSwtNi42Nl0sWyd6J10sWydtJywwLjY2LDcuNDFdLFsnYycsLTAuMjcsLTAuMDksLTAuODEsLTAuMTIsLTEuMDgsLTAuMDZdLFsnYycsLTAuNzIsMC4xOCwtMS4wOCwwLjY5LC0xLjIzLDEuNzFdLFsnYycsLTAuMDYsMC41NCwtMC4wNiwzLjAwLDAuMDAsMy41NF0sWydjJywwLjE4LDEuMjYsMC43MiwxLjc3LDEuODAsMS43NF0sWydjJywwLjM5LC0wLjAzLDAuNjMsLTAuMDksMC45MCwtMC4yN10sWydjJywwLjY2LC0wLjQyLDAuOTAsLTEuMzIsMC45MCwtMy4yNF0sWydjJywwLjAwLC0yLjIyLC0wLjM2LC0zLjEyLC0xLjI5LC0zLjQyXSxbJ3onXV0sdzo5Ljk1NixoOjE0Ljk4Mn0sXG5cdFx0JzcnOntkOltbJ00nLDAuMjEsLTE0Ljk3XSxbJ2MnLDAuMjEsLTAuMDYsMC40NSwwLjAwLDAuNTQsMC4xNV0sWydjJywwLjA2LDAuMDksMC4wNiwwLjE1LDAuMDYsMC4zOV0sWydjJywwLjAwLDAuMjQsMC4wMCwwLjMzLDAuMDYsMC40Ml0sWydjJywwLjA2LDAuMTIsMC4yMSwwLjI0LDAuMjcsMC4yNF0sWydjJywwLjAzLDAuMDAsMC4xMiwtMC4xMiwwLjI0LC0wLjIxXSxbJ2MnLDAuOTYsLTEuMjAsMi41OCwtMS4zNSwzLjk5LC0wLjQyXSxbJ2MnLDAuMTUsMC4xMiwwLjQyLDAuMzAsMC41NCwwLjQ1XSxbJ2MnLDAuNDgsMC4zOSwwLjgxLDAuNTcsMS4yOSwwLjYwXSxbJ2MnLDAuNjksMC4wMywxLjUwLC0wLjMwLDIuMTMsLTAuODddLFsnYycsMC4wOSwtMC4wOSwwLjI3LC0wLjMwLDAuMzksLTAuNDVdLFsnYycsMC4xMiwtMC4xNSwwLjI0LC0wLjI3LDAuMzAsLTAuMzBdLFsnYycsMC4xOCwtMC4wNiwwLjM5LDAuMDMsMC41MSwwLjIxXSxbJ2MnLDAuMDYsMC4xOCwwLjA2LDAuMjQsLTAuMjcsMC43Ml0sWydjJywtMC4xOCwwLjI0LC0wLjU0LDAuNzgsLTAuNzgsMS4xN10sWydjJywtMi4zNywzLjU0LC0zLjU0LDYuMjcsLTMuODcsOS4wMF0sWydjJywtMC4wMywwLjMzLC0wLjAzLDAuNjYsLTAuMDMsMS4yNl0sWydjJywwLjAwLDAuOTAsMC4wMCwxLjA4LDAuMTUsMS44OV0sWydjJywwLjA2LDAuNDUsMC4wNiwwLjQ4LDAuMDMsMC42MF0sWydjJywtMC4wNiwwLjA5LC0wLjIxLDAuMjEsLTAuMzAsMC4yMV0sWydjJywtMC4wMywwLjAwLC0wLjI3LC0wLjA2LC0wLjU0LC0wLjE1XSxbJ2MnLC0wLjg0LC0wLjI3LC0xLjExLC0wLjMwLC0xLjY1LC0wLjMwXSxbJ2MnLC0wLjU3LDAuMDAsLTAuODQsMC4wMywtMS41NiwwLjI3XSxbJ2MnLC0wLjYwLDAuMTgsLTAuNjksMC4yMSwtMC44MSwwLjE1XSxbJ2MnLC0wLjEyLC0wLjA2LC0wLjIxLC0wLjE4LC0wLjIxLC0wLjMwXSxbJ2MnLDAuMDAsLTAuMTUsMC42MCwtMS40NCwxLjIwLC0yLjYxXSxbJ2MnLDEuMTQsLTIuMjIsMi43MywtNC42OCw1LjEwLC04LjAxXSxbJ2MnLDAuMjEsLTAuMjcsMC4zNiwtMC40OCwwLjMzLC0wLjQ4XSxbJ2MnLDAuMDAsMC4wMCwtMC4xMiwwLjA2LC0wLjI3LDAuMTJdLFsnYycsLTAuNTQsMC4zMCwtMC45OSwwLjM5LC0xLjU2LDAuMzldLFsnYycsLTAuNzUsMC4wMywtMS4yMCwtMC4xOCwtMS44MywtMC43NV0sWydjJywtMC45OSwtMC45MCwtMS44MywtMS4xNywtMi4zMSwtMC43Ml0sWydjJywtMC4xOCwwLjE1LC0wLjM2LDAuNTEsLTAuNDUsMC44NF0sWydjJywtMC4wNiwwLjI0LC0wLjA2LDAuMzMsLTAuMDksMS45OF0sWydjJywwLjAwLDEuNjIsLTAuMDMsMS43NCwtMC4wNiwxLjgwXSxbJ2MnLC0wLjE1LDAuMjQsLTAuNTQsMC4yNCwtMC42OSwwLjAwXSxbJ2MnLC0wLjA2LC0wLjA5LC0wLjA2LC0wLjE1LC0wLjA2LC0zLjU3XSxbJ2MnLDAuMDAsLTMuNDIsMC4wMCwtMy40OCwwLjA2LC0zLjU3XSxbJ2MnLDAuMDMsLTAuMDYsMC4wOSwtMC4xMiwwLjE1LC0wLjE1XSxbJ3onXV0sdzoxMC41NjEsaDoxNS4wOTN9LFxuXHRcdCc4Jzp7ZDpbWydNJyw0Ljk4LC0xNC45N10sWydjJywwLjMzLC0wLjAzLDEuMDIsLTAuMDMsMS4zMiwwLjAwXSxbJ2MnLDEuMzIsMC4xMiwyLjQ5LDAuNjAsMy4yMSwxLjMyXSxbJ2MnLDAuMzksMC4zOSwwLjY2LDAuODEsMC43OCwxLjI5XSxbJ2MnLDAuMDksMC4zNiwwLjA5LDEuMDgsMC4wMCwxLjQ0XSxbJ2MnLC0wLjIxLDAuODQsLTAuNjYsMS41OSwtMS41OSwyLjU1XSxbJ2wnLC0wLjMwLDAuMzBdLFsnbCcsMC4yNywwLjE4XSxbJ2MnLDEuNDcsMC45MywyLjMxLDIuMzEsMi4yNSwzLjc1XSxbJ2MnLC0wLjAzLDAuNzUsLTAuMjQsMS4zNSwtMC42MywxLjk1XSxbJ2MnLC0wLjQ1LDAuNjYsLTEuMDIsMS4xNCwtMS44MywxLjUzXSxbJ2MnLC0xLjgwLDAuODcsLTQuMjAsMC44NywtNi4wMCwwLjAzXSxbJ2MnLC0xLjYyLC0wLjc4LC0yLjUyLC0yLjE2LC0yLjQ2LC0zLjY2XSxbJ2MnLDAuMDYsLTAuOTksMC41NCwtMS43NywxLjgwLC0yLjk3XSxbJ2MnLDAuNTQsLTAuNTEsMC41NCwtMC41NCwwLjQ4LC0wLjU3XSxbJ2MnLC0wLjM5LC0wLjI3LC0wLjk2LC0wLjc4LC0xLjIwLC0xLjE0XSxbJ2MnLC0wLjc1LC0xLjExLC0wLjg3LC0yLjQwLC0wLjMwLC0zLjYwXSxbJ2MnLDAuNjksLTEuMzUsMi4yNSwtMi4yNSw0LjIwLC0yLjQwXSxbJ3onXSxbJ20nLDEuNTMsMC42OV0sWydjJywtMC40MiwtMC4wOSwtMS4xMSwtMC4xMiwtMS4zOCwtMC4wNl0sWydjJywtMC4zMCwwLjA2LC0wLjYwLDAuMTgsLTAuODEsMC4zMF0sWydjJywtMC4yMSwwLjEyLC0wLjYwLDAuNTEsLTAuNzIsMC43Ml0sWydjJywtMC41MSwwLjg3LC0wLjQyLDEuODksMC4yMSwyLjUyXSxbJ2MnLDAuMjEsMC4yMSwwLjM2LDAuMzAsMS45NSwxLjIzXSxbJ2MnLDAuOTYsMC41NCwxLjc0LDAuOTksMS43NywxLjAyXSxbJ2MnLDAuMDksMC4wMCwwLjYzLC0wLjYwLDAuOTksLTEuMTFdLFsnYycsMC4yMSwtMC4zNiwwLjQ4LC0wLjg3LDAuNTcsLTEuMjNdLFsnYycsMC4wNiwtMC4yNCwwLjA2LC0wLjM2LDAuMDYsLTAuNzJdLFsnYycsMC4wMCwtMC40NSwtMC4wMywtMC42NiwtMC4xNSwtMC45OV0sWydjJywtMC4zOSwtMC44MSwtMS4yOSwtMS40NCwtMi40OSwtMS42OF0sWyd6J10sWydtJywtMS40NCw4LjA3XSxbJ2wnLC0xLjg5LC0xLjA4XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMTgsMC4xNSwtMC4zOSwwLjMzXSxbJ2MnLC0xLjIwLDEuMDgsLTEuNjUsMS45NSwtMS41OSwzLjAwXSxbJ2MnLDAuMDksMS41OSwxLjM1LDIuODUsMy4yMSwzLjI0XSxbJ2MnLDAuMzMsMC4wNiwwLjQ1LDAuMDYsMC45MywwLjA2XSxbJ2MnLDAuNjMsMC4wMCwwLjgxLC0wLjAzLDEuMjksLTAuMjddLFsnYycsMC45MCwtMC40MiwxLjQ3LC0xLjQxLDEuNDEsLTIuNDBdLFsnYycsLTAuMDYsLTAuNjYsLTAuMzksLTEuMjksLTAuOTAsLTEuNjVdLFsnYycsLTAuMTIsLTAuMDksLTEuMDUsLTAuNjMsLTIuMDcsLTEuMjNdLFsneiddXSx3OjEwLjkyNixoOjE0Ljk4OX0sXG5cdFx0JzknOntkOltbJ00nLDQuMjMsLTE0Ljk3XSxbJ2MnLDAuNDIsLTAuMDMsMS4yOSwwLjAwLDEuNjIsMC4wNl0sWydjJywwLjUxLDAuMTIsMC45MywwLjMwLDEuMzgsMC41N10sWydjJywxLjUzLDEuMDIsMi41MiwzLjI0LDIuNzMsNS45NF0sWydjJywwLjE4LDIuNTUsLTAuNDgsNC45OCwtMS44Myw2LjU3XSxbJ2MnLC0xLjA1LDEuMjYsLTIuNDAsMS44OSwtMy45MywxLjgzXSxbJ2MnLC0xLjIzLC0wLjA2LC0yLjMxLC0wLjQ1LC0zLjAzLC0xLjE0XSxbJ2MnLC0wLjU3LC0wLjUxLC0wLjg3LC0xLjIzLC0wLjg0LC0xLjk4XSxbJ2MnLDAuMDMsLTAuNTEsMC4yMSwtMC45MCwwLjYwLC0xLjI2XSxbJ2MnLDAuMjQsLTAuMjQsMC40NSwtMC4zOSwwLjc1LC0wLjUxXSxbJ2MnLDAuMjEsLTAuMDYsMC4yNywtMC4wNiwwLjYwLC0wLjA2XSxbJ2MnLDAuMzMsMC4wMCwwLjM5LDAuMDAsMC42MCwwLjA2XSxbJ2MnLDAuMzAsMC4xMiwwLjUxLDAuMjcsMC43NSwwLjUxXSxbJ2MnLDAuMzksMC4zNiwwLjU3LDAuNzgsMC41NywxLjI2XSxbJ2MnLDAuMDAsMC4yNywwLjAwLDAuMzAsLTAuMDksMC40Ml0sWydjJywtMC4wMywwLjA5LC0wLjE4LDAuMjEsLTAuMzAsMC4zMF0sWydjJywtMC4xMiwwLjA5LC0wLjMwLDAuMjEsLTAuMzksMC4yN10sWydjJywtMC4wOSwwLjA2LC0wLjIxLDAuMTgsLTAuMjcsMC4yNF0sWydjJywtMC4wNiwwLjEyLC0wLjA2LDAuMTUsLTAuMDYsMC4zM10sWydjJywwLjAwLDAuMTgsMC4wMCwwLjI0LDAuMDYsMC4zNl0sWydjJywwLjI0LDAuMzksMC43NSwwLjYwLDEuMzgsMC41N10sWydjJywwLjU0LC0wLjAzLDAuOTAsLTAuMTgsMS4yMywtMC40OF0sWydjJywwLjgxLC0wLjcyLDEuMDgsLTIuMTYsMC45NiwtNS4zN10sWydsJywwLjAwLC0wLjYzXSxbJ2wnLC0wLjMwLDAuMTJdLFsnYycsLTAuNzgsMC4yNywtMS4yOSwwLjMzLC0yLjEwLDAuMjddLFsnYycsLTEuNDcsLTAuMTIsLTIuNDksLTAuNTQsLTMuMjcsLTEuMjldLFsnYycsLTAuNDgsLTAuNTEsLTAuODEsLTEuMTEsLTAuOTYsLTEuODldLFsnYycsLTAuMDYsLTAuMjcsLTAuMDYsLTAuNDIsLTAuMDYsLTAuOTZdLFsnYycsMC4wMCwtMC41MSwwLjAwLC0wLjY2LDAuMDYsLTAuOTNdLFsnYycsMC4xNSwtMC43OCwwLjQ4LC0xLjM4LDAuOTYsLTEuODldLFsnYycsMC4xNSwtMC4xMiwwLjMzLC0wLjI3LDAuNDIsLTAuMzZdLFsnYycsMC42OSwtMC41MSwxLjYyLC0wLjgxLDIuNzYsLTAuOTNdLFsneiddLFsnbScsMS4xNywwLjY2XSxbJ2MnLC0wLjIxLC0wLjA2LC0wLjU3LC0wLjA2LC0wLjgxLC0wLjAzXSxbJ2MnLC0wLjc4LDAuMTIsLTEuMjYsMC42OSwtMS40MSwxLjc0XSxbJ2MnLC0wLjEyLDAuNjMsLTAuMTUsMS45NSwtMC4wOSwyLjc5XSxbJ2MnLDAuMTIsMS43MSwwLjYzLDIuNDAsMS43NywyLjQ2XSxbJ2MnLDEuMDgsMC4wMywxLjYyLC0wLjQ4LDEuODAsLTEuNzRdLFsnYycsMC4wNiwtMC41NCwwLjA2LC0zLjAwLDAuMDAsLTMuNTRdLFsnYycsLTAuMTUsLTEuMDUsLTAuNTEsLTEuNTMsLTEuMjYsLTEuNjhdLFsneiddXSx3OjkuOTU5LGg6MTQuOTg2fSxcblx0XHQncmVzdHMubXVsdGltZWFzdXJlJzp7ZDpbWydNJywwLC00XSxbJ2wnLDAsMTZdLFsnbCcsMSwwXSxbJ2wnLDAsLTVdLFsnbCcsNDAsMF0sWydsJywwLDVdLFsnbCcsMSwwXSxbJ2wnLDAsLTE2XSxbJ2wnLC0xLDBdLFsnbCcsMCw1XSxbJ2wnLC00MCwwXSxbJ2wnLDAsLTVdLFsneiddXSx3OjQyLGg6MTh9LFxuXHRcdCdyZXN0cy53aG9sZSc6e2Q6W1snTScsMC4wNiwwLjAzXSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsNS40NiwwLjAwXSxbJ2wnLDUuNDksMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsMi4xOV0sWydsJywwLjAwLDIuMTldLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC01LjQ5LDAuMDBdLFsnbCcsLTUuNDYsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC0yLjE5XSxbJ2wnLDAuMDAsLTIuMTldLFsneiddXSx3OjExLjI1LGg6NC42OH0sXG5cdFx0J3Jlc3RzLmhhbGYnOntkOltbJ00nLDAuMDYsLTQuNjJdLFsnbCcsMC4wOSwtMC4wNl0sWydsJyw1LjQ2LDAuMDBdLFsnbCcsNS40OSwwLjAwXSxbJ2wnLDAuMDksMC4wNl0sWydsJywwLjA2LDAuMDldLFsnbCcsMC4wMCwyLjE5XSxbJ2wnLDAuMDAsMi4xOV0sWydsJywtMC4wNiwwLjA5XSxbJ2wnLC0wLjA5LDAuMDZdLFsnbCcsLTUuNDksMC4wMF0sWydsJywtNS40NiwwLjAwXSxbJ2wnLC0wLjA5LC0wLjA2XSxbJ2wnLC0wLjA2LC0wLjA5XSxbJ2wnLDAuMDAsLTIuMTldLFsnbCcsMC4wMCwtMi4xOV0sWyd6J11dLHc6MTEuMjUsaDo0LjY4fSxcblx0XHQncmVzdHMucXVhcnRlcic6e2Q6W1snTScsMS44OSwtMTEuODJdLFsnYycsMC4xMiwtMC4wNiwwLjI0LC0wLjA2LDAuMzYsLTAuMDNdLFsnYycsMC4wOSwwLjA2LDQuNzQsNS41OCw0Ljg2LDUuODJdLFsnYycsMC4yMSwwLjM5LDAuMTUsMC43OCwtMC4xNSwxLjI2XSxbJ2MnLC0wLjI0LDAuMzMsLTAuNzIsMC44MSwtMS42MiwxLjU2XSxbJ2MnLC0wLjQ1LDAuMzYsLTAuODcsMC43NSwtMC45NiwwLjg0XSxbJ2MnLC0wLjkzLDAuOTksLTEuMTQsMi40OSwtMC42MCwzLjYzXSxbJ2MnLDAuMTgsMC4zOSwwLjI3LDAuNDgsMS4zMiwxLjY4XSxbJ2MnLDEuOTIsMi4yNSwxLjgzLDIuMTYsMS44MywyLjM0XSxbJ2MnLDAuMDAsMC4xOCwtMC4xOCwwLjM2LC0wLjM2LDAuMzldLFsnYycsLTAuMTUsMC4wMCwtMC4yNywtMC4wNiwtMC40OCwtMC4yN10sWydjJywtMC43NSwtMC43NSwtMi40NiwtMS4yOSwtMy4zOSwtMS4wOF0sWydjJywtMC40NSwwLjA5LC0wLjY5LDAuMjcsLTAuOTAsMC42OV0sWydjJywtMC4xMiwwLjMwLC0wLjIxLDAuNjYsLTAuMjQsMS4xNF0sWydjJywtMC4wMywwLjY2LDAuMDksMS4zNSwwLjMwLDIuMDFdLFsnYycsMC4xNSwwLjQyLDAuMjQsMC42NiwwLjQ1LDAuOTZdLFsnYycsMC4xOCwwLjI0LDAuMTgsMC4zMywwLjAzLDAuNDJdLFsnYycsLTAuMTIsMC4wNiwtMC4xOCwwLjAzLC0wLjQ1LC0wLjMwXSxbJ2MnLC0xLjA4LC0xLjM4LC0yLjA3LC0zLjM2LC0yLjQwLC00LjgzXSxbJ2MnLC0wLjI3LC0xLjA1LC0wLjE1LC0xLjc3LDAuMjcsLTIuMDddLFsnYycsMC4yMSwtMC4xMiwwLjQyLC0wLjE1LDAuODcsLTAuMTVdLFsnYycsMC44NywwLjA2LDIuMTAsMC4zOSwzLjMwLDAuOTBdLFsnbCcsMC4zOSwwLjE4XSxbJ2wnLC0xLjY1LC0xLjk1XSxbJ2MnLC0yLjUyLC0yLjk3LC0yLjYxLC0zLjA5LC0yLjcwLC0zLjI3XSxbJ2MnLC0wLjA5LC0wLjI0LC0wLjEyLC0wLjQ4LC0wLjAzLC0wLjc1XSxbJ2MnLDAuMTUsLTAuNDgsMC41NywtMC45NiwxLjgzLC0yLjAxXSxbJ2MnLDAuNDUsLTAuMzYsMC44NCwtMC43MiwwLjkzLC0wLjc4XSxbJ2MnLDAuNjksLTAuNzUsMS4wMiwtMS44MCwwLjkwLC0yLjc5XSxbJ2MnLC0wLjA2LC0wLjMzLC0wLjIxLC0wLjg0LC0wLjM5LC0xLjExXSxbJ2MnLC0wLjA5LC0wLjE1LC0wLjQ1LC0wLjYwLC0wLjgxLC0xLjA1XSxbJ2MnLC0wLjM2LC0wLjQyLC0wLjY5LC0wLjgxLC0wLjcyLC0wLjg3XSxbJ2MnLC0wLjA5LC0wLjE4LDAuMDAsLTAuNDIsMC4yMSwtMC41MV0sWyd6J11dLHc6Ny44ODgsaDoyMS40MzV9LFxuXHRcdCdyZXN0cy44dGgnOntkOltbJ00nLDEuNjgsLTYuMTJdLFsnYycsMC42NiwtMC4wOSwxLjIzLDAuMDksMS42OCwwLjUxXSxbJ2MnLDAuMjcsMC4zMCwwLjM5LDAuNTQsMC41NywxLjI2XSxbJ2MnLDAuMDksMC4zMywwLjE4LDAuNjYsMC4yMSwwLjcyXSxbJ2MnLDAuMTIsMC4yNywwLjMzLDAuNDUsMC42MCwwLjQ4XSxbJ2MnLDAuMTIsMC4wMCwwLjE4LDAuMDAsMC4zMywtMC4wOV0sWydjJywwLjM5LC0wLjE4LDEuMzIsLTEuMjksMS42OCwtMS45OF0sWydjJywwLjA5LC0wLjIxLDAuMjQsLTAuMzAsMC4zOSwtMC4zMF0sWydjJywwLjEyLDAuMDAsMC4yNywwLjA5LDAuMzMsMC4xOF0sWydjJywwLjAzLDAuMDYsLTAuMjcsMS4xMSwtMS44Niw2LjQyXSxbJ2MnLC0xLjAyLDMuNDgsLTEuODksNi4zOSwtMS45Miw2LjQyXSxbJ2MnLDAuMDAsMC4wMywtMC4xMiwwLjEyLC0wLjI0LDAuMTVdLFsnYycsLTAuMTgsMC4wOSwtMC4yMSwwLjA5LC0wLjQ1LDAuMDldLFsnYycsLTAuMjQsMC4wMCwtMC4zMCwwLjAwLC0wLjQ4LC0wLjA2XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjIxLC0wLjEyLC0wLjIxLC0wLjE1XSxbJ2MnLC0wLjA2LC0wLjAzLDAuMTUsLTAuNTcsMS42OCwtNC45Ml0sWydjJywwLjk2LC0yLjY3LDEuNzQsLTQuODksMS43MSwtNC44OV0sWydsJywtMC41MSwwLjE1XSxbJ2MnLC0xLjA4LDAuMzYsLTEuNzQsMC40OCwtMi41NSwwLjQ4XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC4zMywtMC40NSwwLjg0LC0wLjgxLDEuMzgsLTAuOTBdLFsneiddXSx3OjcuNTM0LGg6MTMuODgzfSxcblx0XHQncmVzdHMuMTZ0aCc6e2Q6W1snTScsMy4zMywtNi4xMl0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xNSwwLjM5LDAuNTcsMC41NywwLjg3LDAuNDJdLFsnYycsMC4zOSwtMC4xOCwxLjIwLC0xLjIzLDEuNjIsLTIuMDddLFsnYycsMC4wNiwtMC4xNSwwLjI0LC0wLjI0LDAuMzYsLTAuMjRdLFsnYycsMC4xMiwwLjAwLDAuMjcsMC4wOSwwLjMzLDAuMThdLFsnYycsMC4wMywwLjA2LC0wLjQ1LDEuODYsLTIuNjcsMTAuMTddLFsnYycsLTEuNTAsNS41NSwtMi43MywxMC4xNCwtMi43NiwxMC4xN10sWydjJywtMC4wMywwLjAzLC0wLjEyLDAuMTIsLTAuMjQsMC4xNV0sWydjJywtMC4xOCwwLjA5LC0wLjIxLDAuMDksLTAuNDUsMC4wOV0sWydjJywtMC4yNCwwLjAwLC0wLjMwLDAuMDAsLTAuNDgsLTAuMDZdLFsnYycsLTAuMDksLTAuMDYsLTAuMjEsLTAuMTIsLTAuMjEsLTAuMTVdLFsnYycsLTAuMDYsLTAuMDMsMC4xMiwtMC41NywxLjQ0LC00LjkyXSxbJ2MnLDAuODEsLTIuNjcsMS40NywtNC44NiwxLjQ3LC00Ljg5XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMjcsMC4wNiwtMC41NCwwLjE1XSxbJ2MnLC0xLjA4LDAuMzYsLTEuNzcsMC40OCwtMi41OCwwLjQ4XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC43MiwtMS4wNSwyLjIyLC0xLjIzLDMuMDYsLTAuNDJdLFsnYycsMC4zMCwwLjMzLDAuNDIsMC42MCwwLjYwLDEuMzhdLFsnYycsMC4wOSwwLjQ1LDAuMjEsMC43OCwwLjMzLDAuOTBdLFsnYycsMC4wOSwwLjA5LDAuMjcsMC4xOCwwLjQ1LDAuMjFdLFsnYycsMC4xMiwwLjAwLDAuMTgsMC4wMCwwLjMzLC0wLjA5XSxbJ2MnLDAuMzMsLTAuMTUsMS4wMiwtMC45MywxLjQxLC0xLjU5XSxbJ2MnLDAuMTIsLTAuMjEsMC4xOCwtMC4zOSwwLjM5LC0xLjA4XSxbJ2MnLDAuNjYsLTIuMTAsMS4xNywtMy44NCwxLjE3LC0zLjg3XSxbJ2MnLDAuMDAsMC4wMCwtMC4yMSwwLjA2LC0wLjQyLDAuMTVdLFsnYycsLTAuNTEsMC4xNSwtMS4yMCwwLjMzLC0xLjY4LDAuNDJdLFsnYycsLTAuMzMsMC4wNiwtMC41MSwwLjA2LC0wLjk2LDAuMDZdLFsnYycsLTAuNjYsMC4wMCwtMC44NCwtMC4wMywtMS4zMiwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjMzLC0wLjQ1LDAuODQsLTAuODEsMS4zOCwtMC45MF0sWyd6J11dLHc6OS43MjQsaDoyMS4zODN9LFxuXHRcdCdyZXN0cy4zMm5kJzp7ZDpbWydNJyw0LjIzLC0xMy42Ml0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xMiwwLjI3LDAuMzMsMC40NSwwLjYwLDAuNDhdLFsnYycsMC4xMiwwLjAwLDAuMTgsMC4wMCwwLjI3LC0wLjA2XSxbJ2MnLDAuMzMsLTAuMjEsMC45OSwtMS4xMSwxLjQ0LC0xLjk4XSxbJ2MnLDAuMDksLTAuMjQsMC4yMSwtMC4zMywwLjM5LC0wLjMzXSxbJ2MnLDAuMTIsMC4wMCwwLjI3LDAuMDksMC4zMywwLjE4XSxbJ2MnLDAuMDMsMC4wNiwtMC41NywyLjY3LC0zLjIxLDEzLjg5XSxbJ2MnLC0xLjgwLDcuNjIsLTMuMzAsMTMuODksLTMuMzAsMTMuOTJdLFsnYycsLTAuMDMsMC4wNiwtMC4xMiwwLjEyLC0wLjI0LDAuMThdLFsnYycsLTAuMjEsMC4wOSwtMC4yNCwwLjA5LC0wLjQ4LDAuMDldLFsnYycsLTAuMjQsMC4wMCwtMC4zMCwwLjAwLC0wLjQ4LC0wLjA2XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjIxLC0wLjEyLC0wLjIxLC0wLjE1XSxbJ2MnLC0wLjA2LC0wLjAzLDAuMDksLTAuNTcsMS4yMywtNC45Ml0sWydjJywwLjY5LC0yLjY3LDEuMjYsLTQuODYsMS4yOSwtNC44OV0sWydjJywwLjAwLC0wLjAzLC0wLjEyLC0wLjAzLC0wLjQ4LDAuMTJdLFsnYycsLTEuMTcsMC4zOSwtMi4yMiwwLjU3LC0zLjAwLDAuNTRdLFsnYycsLTAuNDIsLTAuMDMsLTAuNzUsLTAuMTIsLTEuMTEsLTAuMzBdLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC43MiwtMS4wNSwyLjIyLC0xLjIzLDMuMDYsLTAuNDJdLFsnYycsMC4zMCwwLjMzLDAuNDIsMC42MCwwLjYwLDEuMzhdLFsnYycsMC4wOSwwLjQ1LDAuMjEsMC43OCwwLjMzLDAuOTBdLFsnYycsMC4xMiwwLjA5LDAuMzAsMC4xOCwwLjQ4LDAuMjFdLFsnYycsMC4xMiwwLjAwLDAuMTgsMC4wMCwwLjMwLC0wLjA5XSxbJ2MnLDAuNDIsLTAuMjEsMS4yOSwtMS4yOSwxLjU2LC0xLjg5XSxbJ2MnLDAuMDMsLTAuMTIsMS4yMywtNC41OSwxLjIzLC00LjY1XSxbJ2MnLDAuMDAsLTAuMDMsLTAuMTgsMC4wMywtMC4zOSwwLjEyXSxbJ2MnLC0wLjYzLDAuMTgsLTEuMjAsMC4zNiwtMS43NCwwLjQ1XSxbJ2MnLC0wLjM5LDAuMDYsLTAuNTQsMC4wNiwtMS4wMiwwLjA2XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC43MiwtMS4wNSwyLjIyLC0xLjIzLDMuMDYsLTAuNDJdLFsnYycsMC4zMCwwLjMzLDAuNDIsMC42MCwwLjYwLDEuMzhdLFsnYycsMC4wOSwwLjQ1LDAuMjEsMC43OCwwLjMzLDAuOTBdLFsnYycsMC4xOCwwLjE4LDAuNTEsMC4yNywwLjcyLDAuMTVdLFsnYycsMC4zMCwtMC4xMiwwLjY5LC0wLjU3LDEuMDgsLTEuMTddLFsnYycsMC40MiwtMC42MCwwLjM5LC0wLjUxLDEuMDUsLTMuMDNdLFsnYycsMC4zMywtMS4yNiwwLjYwLC0yLjMxLDAuNjAsLTIuMzRdLFsnYycsMC4wMCwwLjAwLC0wLjIxLDAuMDMsLTAuNDUsMC4xMl0sWydjJywtMC41NywwLjE4LC0xLjE0LDAuMzMsLTEuNjIsMC40Ml0sWydjJywtMC4zMywwLjA2LC0wLjUxLDAuMDYsLTAuOTYsMC4wNl0sWydjJywtMC42NiwwLjAwLC0wLjg0LC0wLjAzLC0xLjMyLC0wLjI3XSxbJ2MnLC0xLjMyLC0wLjYzLC0xLjc3LC0yLjE2LC0xLjAyLC0zLjMwXSxbJ2MnLDAuMzMsLTAuNDUsMC44NCwtMC44MSwxLjM4LC0wLjkwXSxbJ3onXV0sdzoxMS4zNzMsaDoyOC44ODN9LFxuXHRcdCdyZXN0cy42NHRoJzp7ZDpbWydNJyw1LjEzLC0xMy42Ml0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4xNSwwLjYzLDAuMjEsMC44MSwwLjMzLDAuOTZdLFsnYycsMC4xOCwwLjIxLDAuNTQsMC4zMCwwLjc1LDAuMThdLFsnYycsMC4yNCwtMC4xMiwwLjYzLC0wLjY2LDEuMDgsLTEuNTZdLFsnYycsMC4zMywtMC42NiwwLjM5LC0wLjcyLDAuNjAsLTAuNzJdLFsnYycsMC4xMiwwLjAwLDAuMjcsMC4wOSwwLjMzLDAuMThdLFsnYycsMC4wMywwLjA2LC0wLjY5LDMuNjYsLTMuNTQsMTcuNjRdLFsnYycsLTEuOTUsOS42NiwtMy41NywxNy42MSwtMy41NywxNy42NF0sWydjJywtMC4wMywwLjA2LC0wLjEyLDAuMTIsLTAuMjQsMC4xOF0sWydjJywtMC4yMSwwLjA5LC0wLjI0LDAuMDksLTAuNDgsMC4wOV0sWydjJywtMC4yNCwwLjAwLC0wLjMwLDAuMDAsLTAuNDgsLTAuMDZdLFsnYycsLTAuMDksLTAuMDYsLTAuMjEsLTAuMTIsLTAuMjEsLTAuMTVdLFsnYycsLTAuMDYsLTAuMDMsMC4wNiwtMC41NywxLjA1LC00Ljk1XSxbJ2MnLDAuNjAsLTIuNzAsMS4wOCwtNC44OSwxLjA4LC00LjkyXSxbJ2MnLDAuMDAsMC4wMCwtMC4yNCwwLjA2LC0wLjUxLDAuMTVdLFsnYycsLTAuNjYsMC4yNCwtMS4yMCwwLjM2LC0xLjc3LDAuNDhdLFsnYycsLTAuNDIsMC4wNiwtMC41NywwLjA2LC0xLjA1LDAuMDZdLFsnYycsLTAuNjksMC4wMCwtMC44NywtMC4wMywtMS4zNSwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjcyLC0xLjA1LDIuMjIsLTEuMjMsMy4wNiwtMC40Ml0sWydjJywwLjMwLDAuMzMsMC40MiwwLjYwLDAuNjAsMS4zOF0sWydjJywwLjA5LDAuNDUsMC4yMSwwLjc4LDAuMzMsMC45MF0sWydjJywwLjA5LDAuMDksMC4yNywwLjE4LDAuNDUsMC4yMV0sWydjJywwLjIxLDAuMDMsMC4zOSwtMC4wOSwwLjcyLC0wLjQyXSxbJ2MnLDAuNDUsLTAuNDUsMS4wMiwtMS4yNiwxLjE3LC0xLjY1XSxbJ2MnLDAuMDMsLTAuMDksMC4yNywtMS4xNCwwLjU0LC0yLjM0XSxbJ2MnLDAuMjcsLTEuMjAsMC40OCwtMi4xOSwwLjUxLC0yLjIyXSxbJ2MnLDAuMDAsLTAuMDMsLTAuMDksLTAuMDMsLTAuNDgsMC4xMl0sWydjJywtMS4xNywwLjM5LC0yLjIyLDAuNTcsLTMuMDAsMC41NF0sWydjJywtMC40MiwtMC4wMywtMC43NSwtMC4xMiwtMS4xMSwtMC4zMF0sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xNSwwLjM5LDAuNTcsMC41NywwLjkwLDAuNDJdLFsnYycsMC4zNiwtMC4xOCwxLjIwLC0xLjI2LDEuNDcsLTEuODldLFsnYycsMC4wMywtMC4wOSwwLjMwLC0xLjIwLDAuNTcsLTIuNDNdLFsnbCcsMC41MSwtMi4yOF0sWydsJywtMC41NCwwLjE4XSxbJ2MnLC0xLjExLDAuMzYsLTEuODAsMC40OCwtMi42MSwwLjQ4XSxbJ2MnLC0wLjY2LDAuMDAsLTAuODQsLTAuMDMsLTEuMzIsLTAuMjddLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC4zNiwtMC41NCwwLjk2LC0wLjg3LDEuNjUsLTAuOTNdLFsnYycsMC41NCwtMC4wMywxLjAyLDAuMTUsMS40MSwwLjU0XSxbJ2MnLDAuMjcsMC4zMCwwLjM5LDAuNTQsMC41NywxLjI2XSxbJ2MnLDAuMTUsMC42MywwLjIxLDAuODEsMC4zMywwLjk2XSxbJ2MnLDAuMjEsMC4yMSwwLjU0LDAuMzAsMC43NSwwLjE4XSxbJ2MnLDAuMzYsLTAuMTgsMC45MywtMC45MywxLjI5LC0xLjY4XSxbJ2MnLDAuMTIsLTAuMjQsMC4xOCwtMC40OCwwLjYzLC0yLjU1XSxbJ2wnLDAuNTEsLTIuMzFdLFsnYycsMC4wMCwtMC4wMywtMC4xOCwwLjAzLC0wLjM5LDAuMTJdLFsnYycsLTEuMTQsMC4zNiwtMi4xMCwwLjU0LC0yLjgyLDAuNTFdLFsnYycsLTAuNDIsLTAuMDMsLTAuNzUsLTAuMTIsLTEuMTEsLTAuMzBdLFsnYycsLTEuMzIsLTAuNjMsLTEuNzcsLTIuMTYsLTEuMDIsLTMuMzBdLFsnYycsMC4zMywtMC40NSwwLjg0LC0wLjgxLDEuMzgsLTAuOTBdLFsneiddXSx3OjEyLjQ1MyxoOjM2LjM4M30sXG5cdFx0J3Jlc3RzLjEyOHRoJzp7ZDpbWydNJyw2LjAzLC0yMS4xMl0sWydjJywwLjY2LC0wLjA5LDEuMjMsMC4wOSwxLjY4LDAuNTFdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xMiwwLjI3LDAuMzMsMC40NSwwLjYwLDAuNDhdLFsnYycsMC4yMSwwLjAwLDAuMzMsLTAuMDYsMC41NCwtMC4zNl0sWydjJywwLjE1LC0wLjIxLDAuNTQsLTAuOTMsMC43OCwtMS40N10sWydjJywwLjE1LC0wLjMzLDAuMTgsLTAuMzksMC4zMCwtMC40OF0sWydjJywwLjE4LC0wLjA5LDAuNDUsMC4wMCwwLjUxLDAuMTVdLFsnYycsMC4wMywwLjA5LC03LjExLDQyLjc1LC03LjE3LDQyLjg0XSxbJ2MnLC0wLjAzLDAuMDMsLTAuMTUsMC4wOSwtMC4yNCwwLjE1XSxbJ2MnLC0wLjE4LDAuMDYsLTAuMjQsMC4wNiwtMC40NSwwLjA2XSxbJ2MnLC0wLjI0LDAuMDAsLTAuMzAsMC4wMCwtMC40OCwtMC4wNl0sWydjJywtMC4wOSwtMC4wNiwtMC4yMSwtMC4xMiwtMC4yMSwtMC4xNV0sWydjJywtMC4wNiwtMC4wMywwLjAzLC0wLjU3LDAuODQsLTQuOThdLFsnYycsMC41MSwtMi43MCwwLjkzLC00LjkyLDAuOTAsLTQuOTJdLFsnYycsMC4wMCwwLjAwLC0wLjE1LDAuMDYsLTAuMzYsMC4xMl0sWydjJywtMC43OCwwLjI3LC0xLjYyLDAuNDgsLTIuMzEsMC41N10sWydjJywtMC4xNSwwLjAzLC0wLjU0LDAuMDMsLTAuODEsMC4wM10sWydjJywtMC42NiwwLjAwLC0wLjg0LC0wLjAzLC0xLjMyLC0wLjI3XSxbJ2MnLC0xLjMyLC0wLjYzLC0xLjc3LC0yLjE2LC0xLjAyLC0zLjMwXSxbJ2MnLDAuMzYsLTAuNTQsMC45NiwtMC44NywxLjY1LC0wLjkzXSxbJ2MnLDAuNTQsLTAuMDMsMS4wMiwwLjE1LDEuNDEsMC41NF0sWydjJywwLjI3LDAuMzAsMC4zOSwwLjU0LDAuNTcsMS4yNl0sWydjJywwLjA5LDAuMzMsMC4xOCwwLjY2LDAuMjEsMC43Ml0sWydjJywwLjEyLDAuMjcsMC4zMywwLjQ1LDAuNjMsMC40OF0sWydjJywwLjEyLDAuMDAsMC4xOCwwLjAwLDAuMzAsLTAuMDldLFsnYycsMC40MiwtMC4yMSwxLjE0LC0xLjExLDEuNTAsLTEuODNdLFsnYycsMC4xMiwtMC4yNywwLjEyLC0wLjI3LDAuNTQsLTIuNTJdLFsnYycsMC4yNCwtMS4yMywwLjQyLC0yLjI1LDAuMzksLTIuMjVdLFsnYycsMC4wMCwwLjAwLC0wLjI0LDAuMDYsLTAuNTEsMC4xOF0sWydjJywtMS4yNiwwLjM5LC0yLjI1LDAuNTcsLTMuMDYsMC41NF0sWydjJywtMC40MiwtMC4wMywtMC43NSwtMC4xMiwtMS4xMSwtMC4zMF0sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4xNSwwLjYzLDAuMjEsMC44MSwwLjMzLDAuOTZdLFsnYycsMC4xOCwwLjIxLDAuNTEsMC4zMCwwLjc1LDAuMThdLFsnYycsMC4zNiwtMC4xNSwxLjA1LC0wLjk5LDEuNDEsLTEuNzddLFsnbCcsMC4xNSwtMC4zMF0sWydsJywwLjQyLC0yLjI1XSxbJ2MnLDAuMjEsLTEuMjYsMC40MiwtMi4yOCwwLjM5LC0yLjI4XSxbJ2wnLC0wLjUxLDAuMTVdLFsnYycsLTEuMTEsMC4zOSwtMS44OSwwLjUxLC0yLjcwLDAuNTFdLFsnYycsLTAuNjYsMC4wMCwtMC44NCwtMC4wMywtMS4zMiwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4xNSwwLjYzLDAuMjEsMC44MSwwLjMzLDAuOTZdLFsnYycsMC4xOCwwLjE4LDAuNDgsMC4yNywwLjcyLDAuMjFdLFsnYycsMC4zMywtMC4xMiwxLjE0LC0xLjI2LDEuNDEsLTEuOTVdLFsnYycsMC4wMCwtMC4wOSwwLjIxLC0xLjExLDAuNDUsLTIuMzRdLFsnYycsMC4yMSwtMS4yMCwwLjM5LC0yLjIyLDAuMzksLTIuMjhdLFsnYycsMC4wMywtMC4wMywwLjAwLC0wLjAzLC0wLjQ1LDAuMTJdLFsnYycsLTAuNTcsMC4xOCwtMS4yMCwwLjMzLC0xLjcxLDAuNDJdLFsnYycsLTAuMzAsMC4wNiwtMC41MSwwLjA2LC0wLjkzLDAuMDZdLFsnYycsLTAuNjYsMC4wMCwtMC44NCwtMC4wMywtMS4zMiwtMC4yN10sWydjJywtMS4zMiwtMC42MywtMS43NywtMi4xNiwtMS4wMiwtMy4zMF0sWydjJywwLjM2LC0wLjU0LDAuOTYsLTAuODcsMS42NSwtMC45M10sWydjJywwLjU0LC0wLjAzLDEuMDIsMC4xNSwxLjQxLDAuNTRdLFsnYycsMC4yNywwLjMwLDAuMzksMC41NCwwLjU3LDEuMjZdLFsnYycsMC4wOSwwLjMzLDAuMTgsMC42NiwwLjIxLDAuNzJdLFsnYycsMC4xMiwwLjI3LDAuMzMsMC40NSwwLjYwLDAuNDhdLFsnYycsMC4xOCwwLjAwLDAuMzYsLTAuMDksMC41NywtMC4zM10sWydjJywwLjMzLC0wLjM2LDAuNzgsLTEuMTQsMC45MywtMS41Nl0sWydjJywwLjAzLC0wLjEyLDAuMjQsLTEuMjAsMC40NSwtMi40MF0sWydjJywwLjI0LC0xLjIwLDAuNDIsLTIuMjIsMC40MiwtMi4yOF0sWydjJywwLjAzLC0wLjAzLDAuMDAsLTAuMDMsLTAuMzksMC4wOV0sWydjJywtMS4wNSwwLjM2LC0xLjgwLDAuNDgsLTIuNTgsMC40OF0sWydjJywtMC42MywwLjAwLC0wLjg0LC0wLjAzLC0xLjI5LC0wLjI3XSxbJ2MnLC0xLjMyLC0wLjYzLC0xLjc3LC0yLjE2LC0xLjAyLC0zLjMwXSxbJ2MnLDAuMzMsLTAuNDUsMC44NCwtMC44MSwxLjM4LC0wLjkwXSxbJ3onXV0sdzoxMi45OTIsaDo0My44ODN9LFxuXHRcdCdhY2NpZGVudGFscy5zaGFycCc6e2Q6W1snTScsNS43MywtMTEuMTldLFsnYycsMC4yMSwtMC4xMiwwLjU0LC0wLjAzLDAuNjYsMC4yNF0sWydjJywwLjA2LDAuMTIsMC4wNiwwLjIxLDAuMDYsMi4zMV0sWydjJywwLjAwLDEuMjMsMC4wMCwyLjIyLDAuMDMsMi4yMl0sWydjJywwLjAwLDAuMDAsMC4yNywtMC4xMiwwLjYwLC0wLjI0XSxbJ2MnLDAuNjksLTAuMjcsMC43OCwtMC4zMCwwLjk2LC0wLjE1XSxbJ2MnLDAuMjEsMC4xNSwwLjIxLDAuMTgsMC4yMSwxLjM4XSxbJ2MnLDAuMDAsMS4wMiwwLjAwLDEuMTEsLTAuMDYsMS4yMF0sWydjJywtMC4wMywwLjA2LC0wLjA5LDAuMTIsLTAuMTIsMC4xNV0sWydjJywtMC4wNiwwLjAzLC0wLjQyLDAuMjEsLTAuODQsMC4zNl0sWydsJywtMC43NSwwLjMzXSxbJ2wnLC0wLjAzLDIuNDNdLFsnYycsMC4wMCwxLjMyLDAuMDAsMi40MywwLjAzLDIuNDNdLFsnYycsMC4wMCwwLjAwLDAuMjcsLTAuMTIsMC42MCwtMC4yNF0sWydjJywwLjY5LC0wLjI3LDAuNzgsLTAuMzAsMC45NiwtMC4xNV0sWydjJywwLjIxLDAuMTUsMC4yMSwwLjE4LDAuMjEsMS4zOF0sWydjJywwLjAwLDEuMDIsMC4wMCwxLjExLC0wLjA2LDEuMjBdLFsnYycsLTAuMDMsMC4wNiwtMC4wOSwwLjEyLC0wLjEyLDAuMTVdLFsnYycsLTAuMDYsMC4wMywtMC40MiwwLjIxLC0wLjg0LDAuMzZdLFsnbCcsLTAuNzUsMC4zM10sWydsJywtMC4wMywyLjUyXSxbJ2MnLDAuMDAsMi4yOCwtMC4wMywyLjU1LC0wLjA2LDIuNjRdLFsnYycsLTAuMjEsMC4zNiwtMC43MiwwLjM2LC0wLjkzLDAuMDBdLFsnYycsLTAuMDMsLTAuMDksLTAuMDYsLTAuMzMsLTAuMDYsLTIuNDNdLFsnbCcsMC4wMCwtMi4zMV0sWydsJywtMS4yOSwwLjUxXSxbJ2wnLC0xLjI2LDAuNTFdLFsnbCcsMC4wMCwyLjQzXSxbJ2MnLDAuMDAsMi41OCwwLjAwLDIuNTIsLTAuMTUsMi42N10sWydjJywtMC4wNiwwLjA5LC0wLjI3LDAuMTgsLTAuMzYsMC4xOF0sWydjJywtMC4xMiwwLjAwLC0wLjMzLC0wLjA5LC0wLjM5LC0wLjE4XSxbJ2MnLC0wLjE1LC0wLjE1LC0wLjE1LC0wLjA5LC0wLjE1LC0yLjQzXSxbJ2MnLDAuMDAsLTEuMjMsMC4wMCwtMi4yMiwtMC4wMywtMi4yMl0sWydjJywwLjAwLDAuMDAsLTAuMjcsMC4xMiwtMC42MCwwLjI0XSxbJ2MnLC0wLjY5LDAuMjcsLTAuNzgsMC4zMCwtMC45NiwwLjE1XSxbJ2MnLC0wLjIxLC0wLjE1LC0wLjIxLC0wLjE4LC0wLjIxLC0xLjM4XSxbJ2MnLDAuMDAsLTEuMDIsMC4wMCwtMS4xMSwwLjA2LC0xLjIwXSxbJ2MnLDAuMDMsLTAuMDYsMC4wOSwtMC4xMiwwLjEyLC0wLjE1XSxbJ2MnLDAuMDYsLTAuMDMsMC40MiwtMC4yMSwwLjg0LC0wLjM2XSxbJ2wnLDAuNzgsLTAuMzNdLFsnbCcsMC4wMCwtMi40M10sWydjJywwLjAwLC0xLjMyLDAuMDAsLTIuNDMsLTAuMDMsLTIuNDNdLFsnYycsMC4wMCwwLjAwLC0wLjI3LDAuMTIsLTAuNjAsMC4yNF0sWydjJywtMC42OSwwLjI3LC0wLjc4LDAuMzAsLTAuOTYsMC4xNV0sWydjJywtMC4yMSwtMC4xNSwtMC4yMSwtMC4xOCwtMC4yMSwtMS4zOF0sWydjJywwLjAwLC0xLjAyLDAuMDAsLTEuMTEsMC4wNiwtMS4yMF0sWydjJywwLjAzLC0wLjA2LDAuMDksLTAuMTIsMC4xMiwtMC4xNV0sWydjJywwLjA2LC0wLjAzLDAuNDIsLTAuMjEsMC44NCwtMC4zNl0sWydsJywwLjc4LC0wLjMzXSxbJ2wnLDAuMDAsLTIuNTJdLFsnYycsMC4wMCwtMi4yOCwwLjAzLC0yLjU1LDAuMDYsLTIuNjRdLFsnYycsMC4yMSwtMC4zNiwwLjcyLC0wLjM2LDAuOTMsMC4wMF0sWydjJywwLjAzLDAuMDksMC4wNiwwLjMzLDAuMDYsMi40M10sWydsJywwLjAzLDIuMzFdLFsnbCcsMS4yNiwtMC41MV0sWydsJywxLjI2LC0wLjUxXSxbJ2wnLDAuMDAsLTIuNDNdLFsnYycsMC4wMCwtMi4yOCwwLjAwLC0yLjQzLDAuMDYsLTIuNTVdLFsnYycsMC4wNiwtMC4xMiwwLjEyLC0wLjE4LDAuMjcsLTAuMjRdLFsneiddLFsnbScsLTAuMzMsMTAuNjVdLFsnbCcsMC4wMCwtMi40M10sWydsJywtMS4yOSwwLjUxXSxbJ2wnLC0xLjI2LDAuNTFdLFsnbCcsMC4wMCwyLjQ2XSxbJ2wnLDAuMDAsMi40M10sWydsJywwLjA5LC0wLjAzXSxbJ2MnLDAuMDYsLTAuMDMsMC42MywtMC4yNywxLjI5LC0wLjUxXSxbJ2wnLDEuMTcsLTAuNDhdLFsnbCcsMC4wMCwtMi40Nl0sWyd6J11dLHc6OC4yNSxoOjIyLjQ2Mn0sXG5cdFx0J2FjY2lkZW50YWxzLmhhbGZzaGFycCc6e2Q6W1snTScsMi40MywtMTAuMDVdLFsnYycsMC4yMSwtMC4xMiwwLjU0LC0wLjAzLDAuNjYsMC4yNF0sWydjJywwLjA2LDAuMTIsMC4wNiwwLjIxLDAuMDYsMi4wMV0sWydjJywwLjAwLDEuMDUsMC4wMCwxLjg5LDAuMDMsMS44OV0sWydsJywwLjcyLC0wLjQ4XSxbJ2MnLDAuNjksLTAuNDgsMC42OSwtMC41MSwwLjg3LC0wLjUxXSxbJ2MnLDAuMTUsMC4wMCwwLjE4LDAuMDMsMC4yNywwLjA5XSxbJ2MnLDAuMjEsMC4xNSwwLjIxLDAuMTgsMC4yMSwxLjQxXSxbJ2MnLDAuMDAsMS4xMSwtMC4wMywxLjE0LC0wLjA5LDEuMjNdLFsnYycsLTAuMDMsMC4wMywtMC40OCwwLjM5LC0xLjAyLDAuNzVdLFsnbCcsLTAuOTksMC42Nl0sWydsJywwLjAwLDIuMzddLFsnYycsMC4wMCwxLjMyLDAuMDAsMi4zNywwLjAzLDIuMzddLFsnbCcsMC43MiwtMC40OF0sWydjJywwLjY5LC0wLjQ4LDAuNjksLTAuNTEsMC44NywtMC41MV0sWydjJywwLjE1LDAuMDAsMC4xOCwwLjAzLDAuMjcsMC4wOV0sWydjJywwLjIxLDAuMTUsMC4yMSwwLjE4LDAuMjEsMS40MV0sWydjJywwLjAwLDEuMTEsLTAuMDMsMS4xNCwtMC4wOSwxLjIzXSxbJ2MnLC0wLjAzLDAuMDMsLTAuNDgsMC4zOSwtMS4wMiwwLjc1XSxbJ2wnLC0wLjk5LDAuNjZdLFsnbCcsMC4wMCwyLjI1XSxbJ2MnLDAuMDAsMS45NSwwLjAwLDIuMjgsLTAuMDYsMi4zN10sWydjJywtMC4wNiwwLjEyLC0wLjEyLDAuMjEsLTAuMjQsMC4yN10sWydjJywtMC4yNywwLjEyLC0wLjU0LDAuMDMsLTAuNjksLTAuMjRdLFsnYycsLTAuMDYsLTAuMTIsLTAuMDYsLTAuMjEsLTAuMDYsLTIuMDFdLFsnYycsMC4wMCwtMS4wNSwwLjAwLC0xLjg5LC0wLjAzLC0xLjg5XSxbJ2wnLC0wLjcyLDAuNDhdLFsnYycsLTAuNjksMC40OCwtMC42OSwwLjQ4LC0wLjg3LDAuNDhdLFsnYycsLTAuMTUsMC4wMCwtMC4xOCwwLjAwLC0wLjI3LC0wLjA2XSxbJ2MnLC0wLjIxLC0wLjE1LC0wLjIxLC0wLjE4LC0wLjIxLC0xLjQxXSxbJ2MnLDAuMDAsLTEuMTEsMC4wMywtMS4xNCwwLjA5LC0xLjIzXSxbJ2MnLDAuMDMsLTAuMDMsMC40OCwtMC4zOSwxLjAyLC0wLjc1XSxbJ2wnLDAuOTksLTAuNjZdLFsnbCcsMC4wMCwtMi4zN10sWydjJywwLjAwLC0xLjMyLDAuMDAsLTIuMzcsLTAuMDMsLTIuMzddLFsnbCcsLTAuNzIsMC40OF0sWydjJywtMC42OSwwLjQ4LC0wLjY5LDAuNDgsLTAuODcsMC40OF0sWydjJywtMC4xNSwwLjAwLC0wLjE4LDAuMDAsLTAuMjcsLTAuMDZdLFsnYycsLTAuMjEsLTAuMTUsLTAuMjEsLTAuMTgsLTAuMjEsLTEuNDFdLFsnYycsMC4wMCwtMS4xMSwwLjAzLC0xLjE0LDAuMDksLTEuMjNdLFsnYycsMC4wMywtMC4wMywwLjQ4LC0wLjM5LDEuMDIsLTAuNzVdLFsnbCcsMC45OSwtMC42Nl0sWydsJywwLjAwLC0yLjI1XSxbJ2MnLDAuMDAsLTIuMTMsMC4wMCwtMi4yOCwwLjA2LC0yLjQwXSxbJ2MnLDAuMDYsLTAuMTIsMC4xMiwtMC4xOCwwLjI3LC0wLjI0XSxbJ3onXV0sdzo1LjI1LGg6MjAuMTc0fSxcblx0XHQnYWNjaWRlbnRhbHMubmF0Jzp7ZDpbWydNJywwLjIxLC0xMS40MF0sWydjJywwLjI0LC0wLjA2LDAuNzgsMC4wMCwwLjk5LDAuMTVdLFsnYycsMC4wMywwLjAzLDAuMDMsMC40OCwwLjAwLDIuNjFdLFsnYycsLTAuMDMsMS40NCwtMC4wMywyLjYxLC0wLjAzLDIuNjFdLFsnYycsMC4wMCwwLjAzLDAuNzUsLTAuMDksMS42OCwtMC4yNF0sWydjJywwLjk2LC0wLjE4LDEuNzEsLTAuMjcsMS43NCwtMC4yN10sWydjJywwLjE1LDAuMDMsMC4yNywwLjE1LDAuMzYsMC4zMF0sWydsJywwLjA2LDAuMTJdLFsnbCcsMC4wOSw4LjY3XSxbJ2MnLDAuMDksNi45NiwwLjEyLDguNjcsMC4wOSw4LjY3XSxbJ2MnLC0wLjAzLDAuMDMsLTAuMTIsMC4wNiwtMC4yMSwwLjA5XSxbJ2MnLC0wLjI0LDAuMDksLTAuNzIsMC4wOSwtMC45NiwwLjAwXSxbJ2MnLC0wLjA5LC0wLjAzLC0wLjE4LC0wLjA2LC0wLjIxLC0wLjA5XSxbJ2MnLC0wLjAzLC0wLjAzLC0wLjAzLC0wLjQ4LDAuMDAsLTIuNjFdLFsnYycsMC4wMywtMS40NCwwLjAzLC0yLjYxLDAuMDMsLTIuNjFdLFsnYycsMC4wMCwtMC4wMywtMC43NSwwLjA5LC0xLjY4LDAuMjRdLFsnYycsLTAuOTYsMC4xOCwtMS43MSwwLjI3LC0xLjc0LDAuMjddLFsnYycsLTAuMTUsLTAuMDMsLTAuMjcsLTAuMTUsLTAuMzYsLTAuMzBdLFsnbCcsLTAuMDYsLTAuMTVdLFsnbCcsLTAuMDksLTcuNTNdLFsnYycsLTAuMDYsLTQuMTQsLTAuMDksLTguMDQsLTAuMTIsLTguNjddLFsnbCcsMC4wMCwtMS4xMV0sWydsJywwLjE1LC0wLjA2XSxbJ2MnLDAuMDksLTAuMDMsMC4yMSwtMC4wNiwwLjI3LC0wLjA5XSxbJ3onXSxbJ20nLDMuNzUsOC40MF0sWydjJywwLjAwLC0wLjMzLDAuMDAsLTAuNDIsLTAuMDMsLTAuNDJdLFsnYycsLTAuMTIsMC4wMCwtMi43OSwwLjQ1LC0yLjc5LDAuNDhdLFsnYycsLTAuMDMsMC4wMCwtMC4wOSw2LjMwLC0wLjA5LDYuMzNdLFsnYycsMC4wMywwLjAwLDIuNzksLTAuNDUsMi44MiwtMC40OF0sWydjJywwLjAwLDAuMDAsMC4wOSwtNC41MywwLjA5LC01LjkxXSxbJ3onXV0sdzo1LjQsaDoyMi44fSxcblx0XHQnYWNjaWRlbnRhbHMuZmxhdCc6e2Q6W1snTScsLTAuMzYsLTE0LjA3XSxbJ2MnLDAuMzMsLTAuMDYsMC44NywwLjAwLDEuMDgsMC4xNV0sWydjJywwLjA2LDAuMDMsMC4wNiwwLjM2LC0wLjAzLDUuMjVdLFsnYycsLTAuMDYsMi44NSwtMC4wOSw1LjE5LC0wLjA5LDUuMTldLFsnYycsMC4wMCwwLjAzLDAuMTIsLTAuMDMsMC4yNCwtMC4xMl0sWydjJywwLjYzLC0wLjQyLDEuNDEsLTAuNjYsMi4xOSwtMC43Ml0sWydjJywwLjgxLC0wLjAzLDEuNDcsMC4yMSwyLjA0LDAuNzhdLFsnYycsMC41NywwLjU0LDAuODcsMS4yNiwwLjkzLDIuMDRdLFsnYycsMC4wMywwLjU3LC0wLjA5LDEuMDgsLTAuMzYsMS42Ml0sWydjJywtMC40MiwwLjgxLC0xLjAyLDEuMzgsLTIuODIsMi42MV0sWydjJywtMS4xNCwwLjc4LC0xLjQ0LDEuMDIsLTEuODAsMS40NF0sWydjJywtMC4xOCwwLjE4LC0wLjM5LDAuMzksLTAuNDUsMC40Ml0sWydjJywtMC4yNywwLjE4LC0wLjU3LDAuMTUsLTAuODEsLTAuMDZdLFsnYycsLTAuMDYsLTAuMDksLTAuMTIsLTAuMTgsLTAuMTUsLTAuMjddLFsnYycsLTAuMDMsLTAuMDYsLTAuMDksLTMuMjcsLTAuMTgsLTguMzRdLFsnYycsLTAuMDksLTQuNTMsLTAuMTUsLTguNTgsLTAuMTgsLTkuMDNdLFsnbCcsMC4wMCwtMC43OF0sWydsJywwLjEyLC0wLjA2XSxbJ2MnLDAuMDYsLTAuMDMsMC4xOCwtMC4wOSwwLjI3LC0wLjEyXSxbJ3onXSxbJ20nLDMuMTgsMTEuMDFdLFsnYycsLTAuMjEsLTAuMTIsLTAuNTQsLTAuMTUsLTAuODEsLTAuMDZdLFsnYycsLTAuNTQsMC4xNSwtMC45OSwwLjYzLC0xLjE3LDEuMjZdLFsnYycsLTAuMDYsMC4zMCwtMC4xMiwyLjg4LC0wLjA2LDMuODddLFsnYycsMC4wMywwLjQyLDAuMDMsMC44MSwwLjA2LDAuOTBdLFsnbCcsMC4wMywwLjEyXSxbJ2wnLDAuNDUsLTAuMzldLFsnYycsMC42MywtMC41NCwxLjI2LC0xLjE3LDEuNTYsLTEuNTldLFsnYycsMC4zMCwtMC40MiwwLjYwLC0wLjk5LDAuNzIsLTEuNDFdLFsnYycsMC4xOCwtMC42OSwwLjA5LC0xLjQ3LC0wLjE4LC0yLjA3XSxbJ2MnLC0wLjE1LC0wLjMwLC0wLjMzLC0wLjUxLC0wLjYwLC0wLjYzXSxbJ3onXV0sdzo2Ljc1LGg6MTguODAxfSxcblx0XHQnYWNjaWRlbnRhbHMuaGFsZmZsYXQnOntkOltbJ00nLDQuODMsLTE0LjA3XSxbJ2MnLDAuMzMsLTAuMDYsMC44NywwLjAwLDEuMDgsMC4xNV0sWydjJywwLjA2LDAuMDMsMC4wNiwwLjYwLC0wLjEyLDkuMDZdLFsnYycsLTAuMDksNS41NSwtMC4xNSw5LjA2LC0wLjE4LDkuMTJdLFsnYycsLTAuMDMsMC4wOSwtMC4wOSwwLjE4LC0wLjE1LDAuMjddLFsnYycsLTAuMjQsMC4yMSwtMC41NCwwLjI0LC0wLjgxLDAuMDZdLFsnYycsLTAuMDYsLTAuMDMsLTAuMjcsLTAuMjQsLTAuNDUsLTAuNDJdLFsnYycsLTAuMzYsLTAuNDIsLTAuNjYsLTAuNjYsLTEuODAsLTEuNDRdLFsnYycsLTEuMjMsLTAuODQsLTEuODMsLTEuMzIsLTIuMjUsLTEuNzddLFsnYycsLTAuNjYsLTAuNzgsLTAuOTYsLTEuNTYsLTAuOTMsLTIuNDZdLFsnYycsMC4wOSwtMS40MSwxLjExLC0yLjU4LDIuNDAsLTIuNzldLFsnYycsMC4zMCwtMC4wNiwwLjg0LC0wLjAzLDEuMjMsMC4wNl0sWydjJywwLjU0LDAuMTIsMS4wOCwwLjMzLDEuNTMsMC42M10sWydjJywwLjEyLDAuMDksMC4yNCwwLjE1LDAuMjQsMC4xMl0sWydjJywwLjAwLDAuMDAsLTAuMTIsLTguMzcsLTAuMTgsLTkuNzVdLFsnbCcsMC4wMCwtMC42Nl0sWydsJywwLjEyLC0wLjA2XSxbJ2MnLDAuMDYsLTAuMDMsMC4xOCwtMC4wOSwwLjI3LC0wLjEyXSxbJ3onXSxbJ20nLC0xLjY1LDEwLjk1XSxbJ2MnLC0wLjYwLC0wLjE4LC0xLjA4LDAuMDksLTEuMzgsMC42OV0sWydjJywtMC4yNywwLjYwLC0wLjM2LDEuMzgsLTAuMTgsMi4wN10sWydjJywwLjEyLDAuNDIsMC40MiwwLjk5LDAuNzIsMS40MV0sWydjJywwLjMwLDAuNDIsMC45MywxLjA1LDEuNTYsMS41OV0sWydsJywwLjQ4LDAuMzldLFsnbCcsMC4wMCwtMC4xMl0sWydjJywwLjAzLC0wLjA5LDAuMDMsLTAuNDgsMC4wNiwtMC45MF0sWydjJywwLjAzLC0wLjU3LDAuMDMsLTEuMDgsMC4wMCwtMi4yMl0sWydjJywtMC4wMywtMS42MiwtMC4wMywtMS42MiwtMC4yNCwtMi4wN10sWydjJywtMC4yMSwtMC40MiwtMC42MCwtMC43NSwtMS4wMiwtMC44NF0sWyd6J11dLHc6Ni43MjgsaDoxOC44MDF9LFxuXHRcdCdhY2NpZGVudGFscy5kYmxmbGF0Jzp7ZDpbWydNJywtMC4zNiwtMTQuMDddLFsnYycsMC4zMywtMC4wNiwwLjg3LDAuMDAsMS4wOCwwLjE1XSxbJ2MnLDAuMDYsMC4wMywwLjA2LDAuMzMsLTAuMDMsNC44OV0sWydjJywtMC4wNiwyLjY3LC0wLjA5LDUuMDEsLTAuMDksNS4yMl0sWydsJywwLjAwLDAuMzZdLFsnbCcsMC4xNSwtMC4xNV0sWydjJywwLjM2LC0wLjMwLDAuNzUsLTAuNTEsMS4yMCwtMC42M10sWydjJywwLjMzLC0wLjA5LDAuOTYsLTAuMDksMS4yNiwtMC4wM10sWydjJywwLjI3LDAuMDksMC42MywwLjI3LDAuODcsMC40NV0sWydsJywwLjIxLDAuMTVdLFsnbCcsMC4wMCwtMC4yN10sWydjJywwLjAwLC0wLjE1LC0wLjAzLC0yLjQzLC0wLjA5LC01LjEwXSxbJ2MnLC0wLjA5LC00LjU2LC0wLjA5LC00Ljg2LC0wLjAzLC00Ljg5XSxbJ2MnLDAuMTUsLTAuMTIsMC4zOSwtMC4xNSwwLjcyLC0wLjE1XSxbJ2MnLDAuMzAsMC4wMCwwLjU0LDAuMDMsMC42OSwwLjE1XSxbJ2MnLDAuMDYsMC4wMywwLjA2LDAuMzMsLTAuMDMsNC45NV0sWydjJywtMC4wNiwyLjcwLC0wLjA5LDUuMDQsLTAuMDksNS4yMl0sWydsJywwLjAzLDAuMzBdLFsnbCcsMC4yMSwtMC4xNV0sWydjJywwLjY5LC0wLjQ4LDEuNDQsLTAuNjksMi4yOCwtMC42OV0sWydjJywwLjUxLDAuMDAsMC43OCwwLjAzLDEuMjAsMC4yMV0sWydjJywxLjMyLDAuNjMsMi4wMSwyLjI4LDEuNTMsMy42OV0sWydjJywtMC4yMSwwLjU3LC0wLjUxLDEuMDIsLTEuMDUsMS41Nl0sWydjJywtMC40MiwwLjQyLC0wLjgxLDAuNzIsLTEuOTIsMS41MF0sWydjJywtMS4yNiwwLjg3LC0xLjUwLDEuMDgsLTEuODYsMS41MF0sWydjJywtMC4zOSwwLjQ1LC0wLjU0LDAuNTQsLTAuODEsMC41MV0sWydjJywtMC4xOCwwLjAwLC0wLjIxLDAuMDAsLTAuMzMsLTAuMDZdLFsnbCcsLTAuMjEsLTAuMjFdLFsnbCcsLTAuMDYsLTAuMTJdLFsnbCcsLTAuMDMsLTAuOTldLFsnYycsLTAuMDMsLTAuNTQsLTAuMDMsLTEuMjksLTAuMDYsLTEuNjhdLFsnbCcsMC4wMCwtMC42OV0sWydsJywtMC4yMSwwLjI0XSxbJ2MnLC0wLjM2LDAuNDIsLTAuNzUsMC43NSwtMS44MCwxLjYyXSxbJ2MnLC0xLjAyLDAuODQsLTEuMjAsMC45OSwtMS40NCwxLjM4XSxbJ2MnLC0wLjM2LDAuNTEsLTAuNTQsMC42MCwtMC45MCwwLjUxXSxbJ2MnLC0wLjE1LC0wLjAzLC0wLjM5LC0wLjI3LC0wLjQyLC0wLjQyXSxbJ2MnLC0wLjAzLC0wLjA2LC0wLjA5LC0zLjI3LC0wLjE4LC04LjM0XSxbJ2MnLC0wLjA5LC00LjUzLC0wLjE1LC04LjU4LC0wLjE4LC05LjAzXSxbJ2wnLDAuMDAsLTAuNzhdLFsnbCcsMC4xMiwtMC4wNl0sWydjJywwLjA2LC0wLjAzLDAuMTgsLTAuMDksMC4yNywtMC4xMl0sWyd6J10sWydtJywyLjUyLDEwLjk4XSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjQ4LC0wLjEyLC0wLjY2LC0wLjA2XSxbJ2MnLC0wLjM5LDAuMTUsLTAuNjksMC41NCwtMC44NCwxLjE0XSxbJ2MnLC0wLjA2LDAuMjQsLTAuMDYsMC4zOSwtMC4wOSwxLjc0XSxbJ2MnLC0wLjAzLDEuNDQsMC4wMCwyLjczLDAuMDYsMy4xOF0sWydsJywwLjAzLDAuMTVdLFsnbCcsMC4yNywtMC4yN10sWydjJywwLjkzLC0wLjk2LDEuNTAsLTEuOTUsMS43NCwtMy4wNl0sWydjJywwLjA2LC0wLjI3LDAuMDYsLTAuMzksMC4wNiwtMC45Nl0sWydjJywwLjAwLC0wLjU0LDAuMDAsLTAuNjksLTAuMDYsLTAuOTNdLFsnYycsLTAuMDksLTAuNTEsLTAuMjcsLTAuODEsLTAuNTEsLTAuOTNdLFsneiddLFsnbScsNS40MywwLjAwXSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjUxLC0wLjEyLC0wLjcyLC0wLjA2XSxbJ2MnLC0wLjU0LDAuMTIsLTAuOTYsMC42MywtMS4xNywxLjI2XSxbJ2MnLC0wLjA2LDAuMzAsLTAuMTIsMi44OCwtMC4wNiwzLjkwXSxbJ2MnLDAuMDMsMC40MiwwLjAzLDAuODEsMC4wNiwwLjkwXSxbJ2wnLDAuMDMsMC4xMl0sWydsJywwLjM2LC0wLjMwXSxbJ2MnLDAuNDIsLTAuMzYsMS4wMiwtMC45NiwxLjI5LC0xLjI5XSxbJ2MnLDAuMzYsLTAuNDUsMC42NiwtMC45OSwwLjgxLC0xLjQxXSxbJ2MnLDAuNDIsLTEuMjMsMC4xNSwtMi43NiwtMC42MCwtMy4xMl0sWyd6J11dLHc6MTEuNjEzLGg6MTguODA0fSxcblx0XHQnYWNjaWRlbnRhbHMuZGJsc2hhcnAnOntkOltbJ00nLC0wLjE4LC0zLjk2XSxbJ2MnLDAuMDYsLTAuMDMsMC4xMiwtMC4wNiwwLjE1LC0wLjA2XSxbJ2MnLDAuMDksMC4wMCwyLjc2LDAuMjcsMi43OSwwLjMwXSxbJ2MnLDAuMTIsMC4wMywwLjE1LDAuMTIsMC4xNSwwLjUxXSxbJ2MnLDAuMDYsMC45NiwwLjI0LDEuNTksMC41NywyLjEwXSxbJ2MnLDAuMDYsMC4wOSwwLjE1LDAuMjEsMC4xOCwwLjI0XSxbJ2wnLDAuMDksMC4wNl0sWydsJywwLjA5LC0wLjA2XSxbJ2MnLDAuMDMsLTAuMDMsMC4xMiwtMC4xNSwwLjE4LC0wLjI0XSxbJ2MnLDAuMzMsLTAuNTEsMC41MSwtMS4xNCwwLjU3LC0yLjEwXSxbJ2MnLDAuMDAsLTAuMzksMC4wMywtMC40NSwwLjEyLC0wLjUxXSxbJ2MnLDAuMDMsMC4wMCwwLjY2LC0wLjA5LDEuNDQsLTAuMTVdLFsnYycsMS40NywtMC4xNSwxLjUwLC0wLjE1LDEuNTYsLTAuMDNdLFsnYycsMC4wMywwLjA2LDAuMDAsMC40MiwtMC4wOSwxLjQ0XSxbJ2MnLC0wLjA5LDAuNzIsLTAuMTUsMS4zNSwtMC4xNSwxLjM4XSxbJ2MnLDAuMDAsMC4wMywtMC4wMywwLjA5LC0wLjA2LDAuMTJdLFsnYycsLTAuMDYsMC4wNiwtMC4xMiwwLjA5LC0wLjUxLDAuMDldLFsnYycsLTEuMDgsMC4wNiwtMS44MCwwLjMwLC0yLjI4LDAuNzVdLFsnbCcsLTAuMTIsMC4wOV0sWydsJywwLjA5LDAuMDldLFsnYycsMC4xMiwwLjE1LDAuMzksMC4zMywwLjYzLDAuNDVdLFsnYycsMC40MiwwLjE4LDAuOTYsMC4yNywxLjY4LDAuMzNdLFsnYycsMC4zOSwwLjAwLDAuNDUsMC4wMywwLjUxLDAuMDldLFsnYycsMC4wMywwLjAzLDAuMDYsMC4wOSwwLjA2LDAuMTJdLFsnYycsMC4wMCwwLjAzLDAuMDYsMC42NiwwLjE1LDEuMzhdLFsnYycsMC4wOSwxLjAyLDAuMTIsMS4zOCwwLjA5LDEuNDRdLFsnYycsLTAuMDYsMC4xMiwtMC4wOSwwLjEyLC0xLjU2LC0wLjAzXSxbJ2MnLC0wLjc4LC0wLjA2LC0xLjQxLC0wLjE1LC0xLjQ0LC0wLjE1XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjEyLC0wLjEyLC0wLjEyLC0wLjU0XSxbJ2MnLC0wLjA2LC0wLjkzLC0wLjI0LC0xLjU2LC0wLjU3LC0yLjA3XSxbJ2MnLC0wLjA2LC0wLjA5LC0wLjE1LC0wLjIxLC0wLjE4LC0wLjI0XSxbJ2wnLC0wLjA5LC0wLjA2XSxbJ2wnLC0wLjA5LDAuMDZdLFsnYycsLTAuMDMsMC4wMywtMC4xMiwwLjE1LC0wLjE4LDAuMjRdLFsnYycsLTAuMzMsMC41MSwtMC41MSwxLjE0LC0wLjU3LDIuMDddLFsnYycsMC4wMCwwLjQyLC0wLjAzLDAuNDgsLTAuMTIsMC41NF0sWydjJywtMC4wMywwLjAwLC0wLjY2LDAuMDksLTEuNDQsMC4xNV0sWydjJywtMS40NywwLjE1LC0xLjUwLDAuMTUsLTEuNTYsMC4wM10sWydjJywtMC4wMywtMC4wNiwwLjAwLC0wLjQyLDAuMDksLTEuNDRdLFsnYycsMC4wOSwtMC43MiwwLjE1LC0xLjM1LDAuMTUsLTEuMzhdLFsnYycsMC4wMCwtMC4wMywwLjAzLC0wLjA5LDAuMDYsLTAuMTJdLFsnYycsMC4wNiwtMC4wNiwwLjEyLC0wLjA5LDAuNTEsLTAuMDldLFsnYycsMC43MiwtMC4wNiwxLjI2LC0wLjE1LDEuNjgsLTAuMzNdLFsnYycsMC4yNCwtMC4xMiwwLjUxLC0wLjMwLDAuNjMsLTAuNDVdLFsnbCcsMC4wOSwtMC4wOV0sWydsJywtMC4xMiwtMC4wOV0sWydjJywtMC40OCwtMC40NSwtMS4yMCwtMC42OSwtMi4yOCwtMC43NV0sWydjJywtMC4zOSwwLjAwLC0wLjQ1LC0wLjAzLC0wLjUxLC0wLjA5XSxbJ2MnLC0wLjAzLC0wLjAzLC0wLjA2LC0wLjA5LC0wLjA2LC0wLjEyXSxbJ2MnLDAuMDAsLTAuMDMsLTAuMDYsLTAuNjMsLTAuMTIsLTEuMzhdLFsnYycsLTAuMDksLTAuNzIsLTAuMTUsLTEuMzUsLTAuMTUsLTEuMzhdLFsneiddXSx3OjcuOTUsaDo3Ljk3N30sXG5cdFx0J2RvdHMuZG90Jzp7ZDpbWydNJywxLjMyLC0xLjY4XSxbJ2MnLDAuMDksLTAuMDMsMC4yNywtMC4wNiwwLjM5LC0wLjA2XSxbJ2MnLDAuOTYsMC4wMCwxLjc0LDAuNzgsMS43NCwxLjcxXSxbJ2MnLDAuMDAsMC45NiwtMC43OCwxLjc0LC0xLjcxLDEuNzRdLFsnYycsLTAuOTYsMC4wMCwtMS43NCwtMC43OCwtMS43NCwtMS43MV0sWydjJywwLjAwLC0wLjc4LDAuNTQsLTEuNTAsMS4zMiwtMS42OF0sWyd6J11dLHc6My40NSxoOjMuNDV9LFxuXHRcdCdub3RlaGVhZHMuZGJsJzp7ZDpbWydNJywtMC42OSwtNC4wMl0sWydjJywwLjE4LC0wLjA5LDAuMzYsLTAuMDksMC41NCwwLjAwXSxbJ2MnLDAuMTgsMC4wOSwwLjI0LDAuMTUsMC4zMywwLjMwXSxbJ2MnLDAuMDYsMC4xNSwwLjA2LDAuMTgsMC4wNiwxLjQxXSxbJ2wnLDAuMDAsMS4yM10sWydsJywwLjEyLC0wLjE4XSxbJ2MnLDAuNzIsLTEuMjYsMi42NCwtMi4zMSw0Ljg2LC0yLjY0XSxbJ2MnLDAuODEsLTAuMTUsMS4xMSwtMC4xNSwyLjEzLC0wLjE1XSxbJ2MnLDAuOTksMC4wMCwxLjI5LDAuMDAsMi4xMCwwLjE1XSxbJ2MnLDAuNzUsMC4xMiwxLjM4LDAuMjcsMi4wNCwwLjU0XSxbJ2MnLDEuMzUsMC41MSwyLjM0LDEuMjYsMi44MiwyLjEwXSxbJ2wnLDAuMTIsMC4xOF0sWydsJywwLjAwLC0xLjIzXSxbJ2MnLDAuMDAsLTEuMjAsMC4wMCwtMS4yNiwwLjA2LC0xLjM4XSxbJ2MnLDAuMDksLTAuMTgsMC4xNSwtMC4yNCwwLjMzLC0wLjMzXSxbJ2MnLDAuMTgsLTAuMDksMC4zNiwtMC4wOSwwLjU0LDAuMDBdLFsnYycsMC4xOCwwLjA5LDAuMjQsMC4xNSwwLjMzLDAuMzBdLFsnbCcsMC4wNiwwLjE1XSxbJ2wnLDAuMDAsMy41NF0sWydsJywwLjAwLDMuNTRdLFsnbCcsLTAuMDYsMC4xNV0sWydjJywtMC4wOSwwLjE4LC0wLjE1LDAuMjQsLTAuMzMsMC4zM10sWydjJywtMC4xOCwwLjA5LC0wLjM2LDAuMDksLTAuNTQsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydjJywtMC4wNiwtMC4xMiwtMC4wNiwtMC4xOCwtMC4wNiwtMS4zOF0sWydsJywwLjAwLC0xLjIzXSxbJ2wnLC0wLjEyLDAuMThdLFsnYycsLTAuNDgsMC44NCwtMS40NywxLjU5LC0yLjgyLDIuMTBdLFsnYycsLTAuODQsMC4zMywtMS43MSwwLjU0LC0yLjg1LDAuNjZdLFsnYycsLTAuNDUsMC4wNiwtMi4xNiwwLjA2LC0yLjYxLDAuMDBdLFsnYycsLTEuMTQsLTAuMTIsLTIuMDEsLTAuMzMsLTIuODUsLTAuNjZdLFsnYycsLTEuMzUsLTAuNTEsLTIuMzQsLTEuMjYsLTIuODIsLTIuMTBdLFsnbCcsLTAuMTIsLTAuMThdLFsnbCcsMC4wMCwxLjIzXSxbJ2MnLDAuMDAsMS4yMywwLjAwLDEuMjYsLTAuMDYsMS4zOF0sWydjJywtMC4wOSwwLjE4LC0wLjE1LDAuMjQsLTAuMzMsMC4zM10sWydjJywtMC4xOCwwLjA5LC0wLjM2LDAuMDksLTAuNTQsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydsJywtMC4wNiwtMC4xNV0sWydsJywwLjAwLC0zLjU0XSxbJ2MnLDAuMDAsLTMuNDgsMC4wMCwtMy41NCwwLjA2LC0zLjY2XSxbJ2MnLDAuMDksLTAuMTgsMC4xNSwtMC4yNCwwLjMzLC0wLjMzXSxbJ3onXSxbJ20nLDcuNzEsMC42M10sWydjJywtMC4zNiwtMC4wNiwtMC45MCwtMC4wNiwtMS4xNCwwLjAwXSxbJ2MnLC0wLjMwLDAuMDMsLTAuNjYsMC4yNCwtMC44NywwLjQyXSxbJ2MnLC0wLjYwLDAuNTQsLTAuOTAsMS42MiwtMC43NSwyLjgyXSxbJ2MnLDAuMTIsMC45MywwLjUxLDEuNjgsMS4xMSwyLjMxXSxbJ2MnLDAuNzUsMC43MiwxLjgzLDEuMjAsMi44NSwxLjI2XSxbJ2MnLDEuMDUsMC4wNiwxLjgzLC0wLjU0LDIuMTAsLTEuNjVdLFsnYycsMC4yMSwtMC45MCwwLjEyLC0xLjk1LC0wLjI0LC0yLjgyXSxbJ2MnLC0wLjM2LC0wLjgxLC0xLjA4LC0xLjUzLC0xLjk1LC0xLjk1XSxbJ2MnLC0wLjMwLC0wLjE1LC0wLjc4LC0wLjMwLC0xLjExLC0wLjM5XSxbJ3onXV0sdzoxNi44MyxoOjguMTQ1fSxcblx0XHQnbm90ZWhlYWRzLndob2xlJzp7ZDpbWydNJyw2LjUxLC00LjA1XSxbJ2MnLDAuNTEsLTAuMDMsMi4wMSwwLjAwLDIuNTIsMC4wM10sWydjJywxLjQxLDAuMTgsMi42NCwwLjUxLDMuNzIsMS4wOF0sWydjJywxLjIwLDAuNjMsMS45NSwxLjQxLDIuMTksMi4zMV0sWydjJywwLjA5LDAuMzMsMC4wOSwwLjkwLDAuMDAsMS4yM10sWydjJywtMC4yNCwwLjkwLC0wLjk5LDEuNjgsLTIuMTksMi4zMV0sWydjJywtMS4wOCwwLjU3LC0yLjI4LDAuOTAsLTMuNzUsMS4wOF0sWydjJywtMC42NiwwLjA2LC0yLjMxLDAuMDYsLTIuOTcsMC4wMF0sWydjJywtMS40NywtMC4xOCwtMi42NywtMC41MSwtMy43NSwtMS4wOF0sWydjJywtMS4yMCwtMC42MywtMS45NSwtMS40MSwtMi4xOSwtMi4zMV0sWydjJywtMC4wOSwtMC4zMywtMC4wOSwtMC45MCwwLjAwLC0xLjIzXSxbJ2MnLDAuMjQsLTAuOTAsMC45OSwtMS42OCwyLjE5LC0yLjMxXSxbJ2MnLDEuMjAsLTAuNjMsMi42MSwtMC45OSw0LjIzLC0xLjExXSxbJ3onXSxbJ20nLDAuNTcsMC42Nl0sWydjJywtMC44NywtMC4xNSwtMS41MywwLjAwLC0yLjA0LDAuNTFdLFsnYycsLTAuMTUsMC4xNSwtMC4yNCwwLjI3LC0wLjMzLDAuNDhdLFsnYycsLTAuMjQsMC41MSwtMC4zNiwxLjA4LC0wLjMzLDEuNzddLFsnYycsMC4wMywwLjY5LDAuMTgsMS4yNiwwLjQyLDEuNzddLFsnYycsMC42MCwxLjE3LDEuNzQsMS45OCwzLjE4LDIuMjJdLFsnYycsMS4xMSwwLjIxLDEuOTUsLTAuMTUsMi4zNCwtMC45OV0sWydjJywwLjI0LC0wLjUxLDAuMzYsLTEuMDgsMC4zMywtMS44MF0sWydjJywtMC4wNiwtMS4xMSwtMC40NSwtMi4wNCwtMS4xNywtMi43Nl0sWydjJywtMC42MywtMC42MywtMS40NywtMS4wNSwtMi40MCwtMS4yMF0sWyd6J11dLHc6MTQuOTg1LGg6OC4wOTd9LFxuXHRcdCdub3RlaGVhZHMuaGFsZic6e2Q6W1snTScsNy40NCwtNC4wNV0sWydjJywwLjA2LC0wLjAzLDAuMjcsLTAuMDMsMC40OCwtMC4wM10sWydjJywxLjA1LDAuMDAsMS43MSwwLjI0LDIuMTAsMC44MV0sWydjJywwLjQyLDAuNjAsMC40NSwxLjM1LDAuMTgsMi40MF0sWydjJywtMC40MiwxLjU5LC0xLjE0LDIuNzMsLTIuMTYsMy4zOV0sWydjJywtMS40MSwwLjkzLC0zLjE4LDEuNDQsLTUuNDAsMS41M10sWydjJywtMS4xNywwLjAzLC0xLjg5LC0wLjIxLC0yLjI4LC0wLjgxXSxbJ2MnLC0wLjQyLC0wLjYwLC0wLjQ1LC0xLjM1LC0wLjE4LC0yLjQwXSxbJ2MnLDAuNDIsLTEuNTksMS4xNCwtMi43MywyLjE2LC0zLjM5XSxbJ2MnLDAuNjMsLTAuNDIsMS4yMywtMC43MiwxLjk4LC0wLjk2XSxbJ2MnLDAuOTAsLTAuMzAsMS42NSwtMC40MiwzLjEyLC0wLjU0XSxbJ3onXSxbJ20nLDEuMjksMC44N10sWydjJywtMC4yNywtMC4wOSwtMC42MywtMC4xMiwtMC45MCwtMC4wM10sWydjJywtMC43MiwwLjI0LC0xLjUzLDAuNjksLTMuMjcsMS44MF0sWydjJywtMi4zNCwxLjUwLC0zLjMwLDIuMjUsLTMuNTcsMi43OV0sWydjJywtMC4zNiwwLjcyLC0wLjA2LDEuNTAsMC42NiwxLjc3XSxbJ2MnLDAuMjQsMC4xMiwwLjY5LDAuMDksMC45OSwwLjAwXSxbJ2MnLDAuODQsLTAuMzAsMS45MiwtMC45Myw0LjE0LC0yLjM3XSxbJ2MnLDEuNjIsLTEuMDgsMi4zNywtMS43MSwyLjYxLC0yLjE5XSxbJ2MnLDAuMzYsLTAuNzIsMC4wNiwtMS41MCwtMC42NiwtMS43N10sWyd6J11dLHc6MTAuMzcsaDo4LjEzMn0sXG5cdFx0J25vdGVoZWFkcy5xdWFydGVyJzp7ZDpbWydNJyw2LjA5LC00LjA1XSxbJ2MnLDAuMzYsLTAuMDMsMS4yMCwwLjAwLDEuNTMsMC4wNl0sWydjJywxLjE3LDAuMjQsMS44OSwwLjg0LDIuMTYsMS44M10sWydjJywwLjA2LDAuMTgsMC4wNiwwLjMwLDAuMDYsMC42Nl0sWydjJywwLjAwLDAuNDUsMC4wMCwwLjYzLC0wLjE1LDEuMDhdLFsnYycsLTAuNjYsMi4wNCwtMy4wNiwzLjkzLC01LjUyLDQuMzhdLFsnYycsLTAuNTQsMC4wOSwtMS40NCwwLjA5LC0xLjgzLDAuMDNdLFsnYycsLTEuMjMsLTAuMjcsLTEuOTgsLTAuODcsLTIuMjUsLTEuODZdLFsnYycsLTAuMDYsLTAuMTgsLTAuMDYsLTAuMzAsLTAuMDYsLTAuNjZdLFsnYycsMC4wMCwtMC40NSwwLjAwLC0wLjYzLDAuMTUsLTEuMDhdLFsnYycsMC4yNCwtMC43OCwwLjc1LC0xLjUzLDEuNDQsLTIuMjJdLFsnYycsMS4yMCwtMS4yMCwyLjg1LC0yLjAxLDQuNDcsLTIuMjJdLFsneiddXSx3OjkuODEsaDo4LjA5NH0sXG5cdFx0J25vdGVoZWFkcy5zbGFzaC5ub3N0ZW0nOntkOltbJ00nLDkuMzAsLTcuNzddLFsnYycsMC4wNiwtMC4wNiwwLjE4LC0wLjA2LDEuNzEsLTAuMDZdLFsnbCcsMS42NSwwLjAwXSxbJ2wnLDAuMDksMC4wOV0sWydjJywwLjA2LDAuMDYsMC4wNiwwLjA5LDAuMDYsMC4xNV0sWydjJywtMC4wMywwLjEyLC05LjIxLDE1LjI0LC05LjMwLDE1LjMzXSxbJ2MnLC0wLjA2LDAuMDYsLTAuMTgsMC4wNiwtMS43MSwwLjA2XSxbJ2wnLC0xLjY1LDAuMDBdLFsnbCcsLTAuMDksLTAuMDldLFsnYycsLTAuMDYsLTAuMDYsLTAuMDYsLTAuMDksLTAuMDYsLTAuMTVdLFsnYycsMC4wMywtMC4xMiw5LjIxLC0xNS4yNCw5LjMwLC0xNS4zM10sWyd6J11dLHc6MTIuODEsaDoxNS42M30sXG5cdFx0J25vdGVoZWFkcy5pbmRldGVybWluYXRlJzp7ZDpbWydNJywwLjc4LC00LjA1XSxbJ2MnLDAuMTIsLTAuMDMsMC4yNCwtMC4wMywwLjM2LDAuMDNdLFsnYycsMC4wMywwLjAzLDAuOTMsMC43MiwxLjk1LDEuNTZdLFsnbCcsMS44NiwxLjUwXSxbJ2wnLDEuODYsLTEuNTBdLFsnYycsMS4wMiwtMC44NCwxLjkyLC0xLjUzLDEuOTUsLTEuNTZdLFsnYycsMC4yMSwtMC4xMiwwLjMzLC0wLjA5LDAuNzUsMC4yNF0sWydjJywwLjMwLDAuMjcsMC4zNiwwLjM2LDAuMzYsMC41NF0sWydjJywwLjAwLDAuMDMsLTAuMDMsMC4xMiwtMC4wNiwwLjE4XSxbJ2MnLC0wLjAzLDAuMDYsLTAuOTAsMC43NSwtMS44OSwxLjU2XSxbJ2wnLC0xLjgwLDEuNDddLFsnYycsMC4wMCwwLjAzLDAuODEsMC42OSwxLjgwLDEuNTBdLFsnYycsMC45OSwwLjgxLDEuODYsMS41MCwxLjg5LDEuNTZdLFsnYycsMC4wMywwLjA2LDAuMDYsMC4xNSwwLjA2LDAuMThdLFsnYycsMC4wMCwwLjE4LC0wLjA2LDAuMjcsLTAuMzYsMC41NF0sWydjJywtMC40MiwwLjMzLC0wLjU0LDAuMzYsLTAuNzUsMC4yNF0sWydjJywtMC4wMywtMC4wMywtMC45MywtMC43MiwtMS45NSwtMS41Nl0sWydsJywtMS44NiwtMS41MF0sWydsJywtMS44NiwxLjUwXSxbJ2MnLC0xLjAyLDAuODQsLTEuOTIsMS41MywtMS45NSwxLjU2XSxbJ2MnLC0wLjIxLDAuMTIsLTAuMzMsMC4wOSwtMC43NSwtMC4yNF0sWydjJywtMC4zMCwtMC4yNywtMC4zNiwtMC4zNiwtMC4zNiwtMC41NF0sWydjJywwLjAwLC0wLjAzLDAuMDMsLTAuMTIsMC4wNiwtMC4xOF0sWydjJywwLjAzLC0wLjA2LDAuOTAsLTAuNzUsMS44OSwtMS41Nl0sWydsJywxLjgwLC0xLjQ3XSxbJ2MnLDAuMDAsLTAuMDMsLTAuODEsLTAuNjksLTEuODAsLTEuNTBdLFsnYycsLTAuOTksLTAuODEsLTEuODYsLTEuNTAsLTEuODksLTEuNTZdLFsnYycsLTAuMDYsLTAuMTIsLTAuMDksLTAuMjEsLTAuMDMsLTAuMzZdLFsnYycsMC4wMywtMC4wOSwwLjU3LC0wLjU3LDAuNzIsLTAuNjNdLFsneiddXSx3OjkuODQzLGg6OC4xMzl9LFxuXHRcdCdzY3JpcHRzLnVmZXJtYXRhJzp7ZDpbWydNJywtMC43NSwtMTAuNzddLFsnYycsMC4xMiwwLjAwLDAuNDUsLTAuMDMsMC42OSwtMC4wM10sWydjJywyLjkxLC0wLjAzLDUuNTUsMS41Myw3LjQxLDQuMzVdLFsnYycsMS4xNywxLjcxLDEuOTUsMy43MiwyLjQzLDYuMDNdLFsnYycsMC4xMiwwLjUxLDAuMTIsMC41NywwLjAzLDAuNjldLFsnYycsLTAuMTIsMC4yMSwtMC40OCwwLjI3LC0wLjY5LDAuMTJdLFsnYycsLTAuMTIsLTAuMDksLTAuMTgsLTAuMjQsLTAuMjcsLTAuNjldLFsnYycsLTAuNzgsLTMuNjMsLTMuNDIsLTYuNTQsLTYuNzgsLTcuMzhdLFsnYycsLTAuNzgsLTAuMjEsLTEuMjAsLTAuMjQsLTIuMDcsLTAuMjRdLFsnYycsLTAuNjMsMC4wMCwtMC44NCwwLjAwLC0xLjIwLDAuMDZdLFsnYycsLTEuODMsMC4yNywtMy40MiwxLjA4LC00LjgwLDIuMzddLFsnYycsLTEuNDEsMS4zNSwtMi40MCwzLjIxLC0yLjg1LDUuMTldLFsnYycsLTAuMDksMC40NSwtMC4xNSwwLjYwLC0wLjI3LDAuNjldLFsnYycsLTAuMjEsMC4xNSwtMC41NywwLjA5LC0wLjY5LC0wLjEyXSxbJ2MnLC0wLjA5LC0wLjEyLC0wLjA5LC0wLjE4LDAuMDMsLTAuNjldLFsnYycsMC4zMywtMS42MiwwLjc4LC0zLjAwLDEuNDcsLTQuMzhdLFsnYycsMS43NywtMy41NCw0LjQ0LC01LjY3LDcuNTYsLTUuOTddLFsneiddLFsnbScsMC4zMyw3LjQ3XSxbJ2MnLDEuMzgsLTAuMzAsMi41OCwwLjkwLDIuMzEsMi4yNV0sWydjJywtMC4xNSwwLjcyLC0wLjc4LDEuMzUsLTEuNDcsMS41MF0sWydjJywtMS4zOCwwLjI3LC0yLjU4LC0wLjkzLC0yLjMxLC0yLjMxXSxbJ2MnLDAuMTUsLTAuNjksMC43OCwtMS4yOSwxLjQ3LC0xLjQ0XSxbJ3onXV0sdzoxOS43NDgsaDoxMS4yODl9LFxuXHRcdCdzY3JpcHRzLmRmZXJtYXRhJzp7ZDpbWydNJywtOS42MywtMC40Ml0sWydjJywwLjE1LC0wLjA5LDAuMzYsLTAuMDYsMC41MSwwLjAzXSxbJ2MnLDAuMTIsMC4wOSwwLjE4LDAuMjQsMC4yNywwLjY2XSxbJ2MnLDAuNzgsMy42NiwzLjQyLDYuNTcsNi43OCw3LjQxXSxbJ2MnLDAuNzgsMC4yMSwxLjIwLDAuMjQsMi4wNywwLjI0XSxbJ2MnLDAuNjMsMC4wMCwwLjg0LDAuMDAsMS4yMCwtMC4wNl0sWydjJywxLjgzLC0wLjI3LDMuNDIsLTEuMDgsNC44MCwtMi4zN10sWydjJywxLjQxLC0xLjM1LDIuNDAsLTMuMjEsMi44NSwtNS4yMl0sWydjJywwLjA5LC0wLjQyLDAuMTUsLTAuNTcsMC4yNywtMC42Nl0sWydjJywwLjIxLC0wLjE1LDAuNTcsLTAuMDksMC42OSwwLjEyXSxbJ2MnLDAuMDksMC4xMiwwLjA5LDAuMTgsLTAuMDMsMC42OV0sWydjJywtMC4zMywxLjYyLC0wLjc4LDMuMDAsLTEuNDcsNC4zOF0sWydjJywtMS45MiwzLjg0LC00Ljg5LDYuMDAsLTguMzEsNi4wMF0sWydjJywtMy40MiwwLjAwLC02LjM5LC0yLjE2LC04LjMxLC02LjAwXSxbJ2MnLC0wLjQ4LC0wLjk2LC0wLjg0LC0xLjkyLC0xLjE0LC0yLjk3XSxbJ2MnLC0wLjE4LC0wLjY5LC0wLjQyLC0xLjc0LC0wLjQyLC0xLjkyXSxbJ2MnLDAuMDAsLTAuMTIsMC4wOSwtMC4yNywwLjI0LC0wLjMzXSxbJ3onXSxbJ20nLDkuMjEsMC4wMF0sWydjJywxLjIwLC0wLjI3LDIuMzQsMC42MywyLjM0LDEuODZdLFsnYycsMC4wMCwwLjkwLC0wLjY2LDEuNjgsLTEuNTAsMS44OV0sWydjJywtMS4zOCwwLjI3LC0yLjU4LC0wLjkzLC0yLjMxLC0yLjMxXSxbJ2MnLDAuMTUsLTAuNjksMC43OCwtMS4yOSwxLjQ3LC0xLjQ0XSxbJ3onXV0sdzoxOS43NDQsaDoxMS4yNzR9LFxuXHRcdCdzY3JpcHRzLnNmb3J6YXRvJzp7ZDpbWydNJywtNi40NSwtMy42OV0sWydjJywwLjA2LC0wLjAzLDAuMTUsLTAuMDYsMC4xOCwtMC4wNl0sWydjJywwLjA2LDAuMDAsMi44NSwwLjcyLDYuMjQsMS41OV0sWydsJyw2LjMzLDEuNjVdLFsnYycsMC4zMywwLjA2LDAuNDUsMC4yMSwwLjQ1LDAuNTFdLFsnYycsMC4wMCwwLjMwLC0wLjEyLDAuNDUsLTAuNDUsMC41MV0sWydsJywtNi4zMywxLjY1XSxbJ2MnLC0zLjM5LDAuODcsLTYuMTgsMS41OSwtNi4yMSwxLjU5XSxbJ2MnLC0wLjIxLDAuMDAsLTAuNDgsLTAuMjQsLTAuNTEsLTAuNDVdLFsnYycsMC4wMCwtMC4xNSwwLjA2LC0wLjM2LDAuMTgsLTAuNDVdLFsnYycsMC4wOSwtMC4wNiwwLjg3LC0wLjI3LDMuODQsLTEuMDVdLFsnYycsMi4wNCwtMC41NCwzLjg0LC0wLjk5LDQuMDIsLTEuMDJdLFsnYycsMC4xNSwtMC4wNiwxLjE0LC0wLjI0LDIuMjIsLTAuNDJdLFsnYycsMS4wNSwtMC4xOCwxLjkyLC0wLjM2LDEuOTIsLTAuMzZdLFsnYycsMC4wMCwwLjAwLC0wLjg3LC0wLjE4LC0xLjkyLC0wLjM2XSxbJ2MnLC0xLjA4LC0wLjE4LC0yLjA3LC0wLjM2LC0yLjIyLC0wLjQyXSxbJ2MnLC0wLjE4LC0wLjAzLC0xLjk4LC0wLjQ4LC00LjAyLC0xLjAyXSxbJ2MnLC0yLjk3LC0wLjc4LC0zLjc1LC0wLjk5LC0zLjg0LC0xLjA1XSxbJ2MnLC0wLjEyLC0wLjA5LC0wLjE4LC0wLjMwLC0wLjE4LC0wLjQ1XSxbJ2MnLDAuMDMsLTAuMTUsMC4xNSwtMC4zMCwwLjMwLC0wLjM5XSxbJ3onXV0sdzoxMy41LGg6Ny41fSxcblx0XHQnc2NyaXB0cy5zdGFjY2F0byc6e2Q6W1snTScsLTAuMzYsLTEuNDddLFsnYycsMC45MywtMC4yMSwxLjg2LDAuNTEsMS44NiwxLjQ3XSxbJ2MnLDAuMDAsMC45MywtMC44NywxLjY1LC0xLjgwLDEuNDddLFsnYycsLTAuNTQsLTAuMTIsLTEuMDIsLTAuNTcsLTEuMTQsLTEuMDhdLFsnYycsLTAuMjEsLTAuODEsMC4yNywtMS42NSwxLjA4LC0xLjg2XSxbJ3onXV0sdzoyLjk4OSxoOjMuMDA0fSxcblx0XHQnc2NyaXB0cy50ZW51dG8nOntkOltbJ00nLC00LjIwLC0wLjQ4XSxbJ2wnLDAuMTIsLTAuMDZdLFsnbCcsNC4wOCwwLjAwXSxbJ2wnLDQuMDgsMC4wMF0sWydsJywwLjEyLDAuMDZdLFsnYycsMC4zOSwwLjIxLDAuMzksMC43NSwwLjAwLDAuOTZdLFsnbCcsLTAuMTIsMC4wNl0sWydsJywtNC4wOCwwLjAwXSxbJ2wnLC00LjA4LDAuMDBdLFsnbCcsLTAuMTIsLTAuMDZdLFsnYycsLTAuMzksLTAuMjEsLTAuMzksLTAuNzUsMC4wMCwtMC45Nl0sWyd6J11dLHc6OC45ODUsaDoxLjA4fSxcblx0XHQnc2NyaXB0cy51bWFyY2F0byc6e2Q6W1snTScsLTAuMTUsLTguMTldLFsnYycsMC4xNSwtMC4xMiwwLjM2LC0wLjAzLDAuNDUsMC4xNV0sWydjJywwLjIxLDAuNDIsMy40NSw3LjY1LDMuNDUsNy43MV0sWydjJywwLjAwLDAuMTIsLTAuMTIsMC4yNywtMC4yMSwwLjMwXSxbJ2MnLC0wLjAzLDAuMDMsLTAuNTEsMC4wMywtMS4xNCwwLjAzXSxbJ2MnLC0xLjA1LDAuMDAsLTEuMDgsMC4wMCwtMS4xNywtMC4wNl0sWydjJywtMC4wOSwtMC4wNiwtMC4yNCwtMC4zNiwtMS4xNywtMi40MF0sWydjJywtMC41NywtMS4yOSwtMS4wNSwtMi4zNCwtMS4wOCwtMi4zNF0sWydjJywwLjAwLC0wLjAzLC0wLjUxLDEuMDIsLTEuMDgsMi4zNF0sWydjJywtMC45MywyLjA3LC0xLjA4LDIuMzQsLTEuMTQsMi40MF0sWydjJywtMC4wNiwwLjAzLC0wLjE1LDAuMDYsLTAuMTgsMC4wNl0sWydjJywtMC4xNSwwLjAwLC0wLjMzLC0wLjE4LC0wLjMzLC0wLjMzXSxbJ2MnLDAuMDAsLTAuMDYsMy4yNCwtNy4zMiwzLjQ1LC03LjcxXSxbJ2MnLDAuMDMsLTAuMDYsMC4wOSwtMC4xNSwwLjE1LC0wLjE1XSxbJ3onXV0sdzo3LjUsaDo4LjI0NX0sXG5cdFx0J3NjcmlwdHMuZG1hcmNhdG8nOntkOltbJ00nLC0zLjU3LDAuMDNdLFsnYycsMC4wMywwLjAwLDAuNTcsLTAuMDMsMS4xNywtMC4wM10sWydjJywxLjA1LDAuMDAsMS4wOCwwLjAwLDEuMTcsMC4wNl0sWydjJywwLjA5LDAuMDYsMC4yNCwwLjM2LDEuMTcsMi40MF0sWydjJywwLjU3LDEuMjksMS4wNSwyLjM0LDEuMDgsMi4zNF0sWydjJywwLjAwLDAuMDMsMC41MSwtMS4wMiwxLjA4LC0yLjM0XSxbJ2MnLDAuOTMsLTIuMDcsMS4wOCwtMi4zNCwxLjE0LC0yLjQwXSxbJ2MnLDAuMDYsLTAuMDMsMC4xNSwtMC4wNiwwLjE4LC0wLjA2XSxbJ2MnLDAuMTUsMC4wMCwwLjMzLDAuMTgsMC4zMywwLjMzXSxbJ2MnLDAuMDAsMC4wOSwtMy40NSw3Ljc0LC0zLjU0LDcuODNdLFsnYycsLTAuMTIsMC4xMiwtMC4zMCwwLjEyLC0wLjQyLDAuMDBdLFsnYycsLTAuMDksLTAuMDksLTMuNTQsLTcuNzQsLTMuNTQsLTcuODNdLFsnYycsMC4wMCwtMC4wOSwwLjEyLC0wLjI3LDAuMTgsLTAuMzBdLFsneiddXSx3OjcuNSxoOjguMjV9LFxuXHRcdCdzY3JpcHRzLnN0b3BwZWQnOntkOltbJ00nLC0wLjI3LC00LjA4XSxbJ2MnLDAuMTgsLTAuMDksMC4zNiwtMC4wOSwwLjU0LDAuMDBdLFsnYycsMC4xOCwwLjA5LDAuMjQsMC4xNSwwLjMzLDAuMzBdLFsnbCcsMC4wNiwwLjE1XSxbJ2wnLDAuMDAsMS41MF0sWydsJywwLjAwLDEuNDddLFsnbCcsMS40NywwLjAwXSxbJ2wnLDEuNTAsMC4wMF0sWydsJywwLjE1LDAuMDZdLFsnYycsMC4xNSwwLjA5LDAuMjEsMC4xNSwwLjMwLDAuMzNdLFsnYycsMC4wOSwwLjE4LDAuMDksMC4zNiwwLjAwLDAuNTRdLFsnYycsLTAuMDksMC4xOCwtMC4xNSwwLjI0LC0wLjMzLDAuMzNdLFsnYycsLTAuMTIsMC4wNiwtMC4xOCwwLjA2LC0xLjYyLDAuMDZdLFsnbCcsLTEuNDcsMC4wMF0sWydsJywwLjAwLDEuNDddLFsnbCcsMC4wMCwxLjQ3XSxbJ2wnLC0wLjA2LDAuMTVdLFsnYycsLTAuMDksMC4xOCwtMC4xNSwwLjI0LC0wLjMzLDAuMzNdLFsnYycsLTAuMTgsMC4wOSwtMC4zNiwwLjA5LC0wLjU0LDAuMDBdLFsnYycsLTAuMTgsLTAuMDksLTAuMjQsLTAuMTUsLTAuMzMsLTAuMzNdLFsnbCcsLTAuMDYsLTAuMTVdLFsnbCcsMC4wMCwtMS40N10sWydsJywwLjAwLC0xLjQ3XSxbJ2wnLC0xLjQ3LDAuMDBdLFsnYycsLTEuNDQsMC4wMCwtMS41MCwwLjAwLC0xLjYyLC0wLjA2XSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjI0LC0wLjE1LC0wLjMzLC0wLjMzXSxbJ2MnLC0wLjA5LC0wLjE4LC0wLjA5LC0wLjM2LDAuMDAsLTAuNTRdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsnbCcsMC4xNSwtMC4wNl0sWydsJywxLjQ3LDAuMDBdLFsnbCcsMS40NywwLjAwXSxbJ2wnLDAuMDAsLTEuNDddLFsnYycsMC4wMCwtMS40NCwwLjAwLC0xLjUwLDAuMDYsLTEuNjJdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsneiddXSx3OjguMjk1LGg6OC4yOTV9LFxuXHRcdCdzY3JpcHRzLnVwYm93Jzp7ZDpbWydNJywtNC42NSwtMTUuNTRdLFsnYycsMC4xMiwtMC4wOSwwLjM2LC0wLjA2LDAuNDgsMC4wM10sWydjJywwLjAzLDAuMDMsMC4wOSwwLjA5LDAuMTIsMC4xNV0sWydjJywwLjAzLDAuMDYsMC42NiwyLjEzLDEuNDEsNC42Ml0sWydjJywxLjM1LDQuNDEsMS4zOCw0LjU2LDIuMDEsNi45Nl0sWydsJywwLjYzLDIuNDZdLFsnbCcsMC42MywtMi40Nl0sWydjJywwLjYzLC0yLjQwLDAuNjYsLTIuNTUsMi4wMSwtNi45Nl0sWydjJywwLjc1LC0yLjQ5LDEuMzgsLTQuNTYsMS40MSwtNC42Ml0sWydjJywwLjA2LC0wLjE1LDAuMTgsLTAuMjEsMC4zNiwtMC4yNF0sWydjJywwLjE1LDAuMDAsMC4zMCwwLjA2LDAuMzksMC4xOF0sWydjJywwLjE1LDAuMjEsMC4yNCwtMC4xOCwtMi4xMCw3LjU2XSxbJ2MnLC0xLjIwLDMuOTYsLTIuMjIsNy4zMiwtMi4yNSw3LjQxXSxbJ2MnLDAuMDAsMC4xMiwtMC4wNiwwLjI3LC0wLjA5LDAuMzBdLFsnYycsLTAuMTIsMC4yMSwtMC42MCwwLjIxLC0wLjcyLDAuMDBdLFsnYycsLTAuMDMsLTAuMDMsLTAuMDksLTAuMTgsLTAuMDksLTAuMzBdLFsnYycsLTAuMDMsLTAuMDksLTEuMDUsLTMuNDUsLTIuMjUsLTcuNDFdLFsnYycsLTIuMzQsLTcuNzQsLTIuMjUsLTcuMzUsLTIuMTAsLTcuNTZdLFsnYycsMC4wMywtMC4wMywwLjA5LC0wLjA5LDAuMTUsLTAuMTJdLFsneiddXSx3OjkuNzMsaDoxNS42MDh9LFxuXHRcdCdzY3JpcHRzLmRvd25ib3cnOntkOltbJ00nLC01LjU1LC05LjkzXSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsNS40NiwwLjAwXSxbJ2wnLDUuNDYsMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNC43N10sWydjJywwLjAwLDUuMjgsMC4wMCw0Ljg5LC0wLjE4LDUuMDFdLFsnYycsLTAuMTgsMC4xMiwtMC40MiwwLjA2LC0wLjU0LC0wLjEyXSxbJ2MnLC0wLjA2LC0wLjA5LC0wLjA2LC0wLjE4LC0wLjA2LC0yLjk3XSxbJ2wnLDAuMDAsLTIuODVdLFsnbCcsLTQuODMsMC4wMF0sWydsJywtNC44MywwLjAwXSxbJ2wnLDAuMDAsMi44NV0sWydjJywwLjAwLDIuNzksMC4wMCwyLjg4LC0wLjA2LDIuOTddLFsnYycsLTAuMTUsMC4yNCwtMC41MSwwLjI0LC0wLjY2LDAuMDBdLFsnYycsLTAuMDYsLTAuMDksLTAuMDYsLTAuMjEsLTAuMDYsLTQuODldLFsnbCcsMC4wMCwtNC43N10sWyd6J11dLHc6MTEuMjIsaDo5Ljk5Mn0sXG5cdFx0J3NjcmlwdHMudHVybic6e2Q6W1snTScsLTQuNzcsLTMuOTBdLFsnYycsMC4zNiwtMC4wNiwxLjA1LC0wLjA2LDEuNDQsMC4wM10sWydjJywwLjc4LDAuMTUsMS41MCwwLjUxLDIuMzQsMS4xNF0sWydjJywwLjYwLDAuNDUsMS4wNSwwLjg3LDIuMjIsMi4wMV0sWydjJywxLjExLDEuMDgsMS42MiwxLjUwLDIuMjIsMS44Nl0sWydjJywwLjYwLDAuMzYsMS4zMiwwLjU3LDEuOTIsMC41N10sWydjJywwLjkwLDAuMDAsMS43MSwtMC41NywxLjg5LC0xLjM1XSxbJ2MnLDAuMjQsLTAuOTMsLTAuMzksLTEuODksLTEuMzUsLTIuMTBdLFsnbCcsLTAuMTUsLTAuMDZdLFsnbCcsLTAuMDksMC4xNV0sWydjJywtMC4wMywwLjA5LC0wLjE1LDAuMjQsLTAuMjQsMC4zM10sWydjJywtMC43MiwwLjcyLC0yLjA0LDAuNTQsLTIuNDksLTAuMzZdLFsnYycsLTAuNDgsLTAuOTMsMC4wMywtMS44NiwxLjE3LC0yLjE5XSxbJ2MnLDAuMzAsLTAuMDksMS4wMiwtMC4wOSwxLjM1LDAuMDBdLFsnYycsMC45OSwwLjI3LDEuNzQsMC44NywyLjI1LDEuODNdLFsnYycsMC42OSwxLjQxLDAuNjMsMy4wMCwtMC4yMSw0LjI2XSxbJ2MnLC0wLjIxLDAuMzAsLTAuNjksMC44MSwtMC45OSwxLjAyXSxbJ2MnLC0wLjMwLDAuMjEsLTAuODQsMC40NSwtMS4xNywwLjU0XSxbJ2MnLC0xLjIzLDAuMzYsLTIuNDksMC4xNSwtMy43MiwtMC42MF0sWydjJywtMC43NSwtMC40OCwtMS40MSwtMS4wMiwtMi44NSwtMi40Nl0sWydjJywtMS4xMSwtMS4wOCwtMS42MiwtMS41MCwtMi4yMiwtMS44Nl0sWydjJywtMC42MCwtMC4zNiwtMS4zMiwtMC41NywtMS45MiwtMC41N10sWydjJywtMC45MCwwLjAwLC0xLjcxLDAuNTcsLTEuODksMS4zNV0sWydjJywtMC4yNCwwLjkzLDAuMzksMS44OSwxLjM1LDIuMTBdLFsnbCcsMC4xNSwwLjA2XSxbJ2wnLDAuMDksLTAuMTVdLFsnYycsMC4wMywtMC4wOSwwLjE1LC0wLjI0LDAuMjQsLTAuMzNdLFsnYycsMC43MiwtMC43MiwyLjA0LC0wLjU0LDIuNDksMC4zNl0sWydjJywwLjQ4LDAuOTMsLTAuMDMsMS44NiwtMS4xNywyLjE5XSxbJ2MnLC0wLjMwLDAuMDksLTEuMDIsMC4wOSwtMS4zNSwwLjAwXSxbJ2MnLC0wLjk5LC0wLjI3LC0xLjc0LC0wLjg3LC0yLjI1LC0xLjgzXSxbJ2MnLC0wLjY5LC0xLjQxLC0wLjYzLC0zLjAwLDAuMjEsLTQuMjZdLFsnYycsMC4yMSwtMC4zMCwwLjY5LC0wLjgxLDAuOTksLTEuMDJdLFsnYycsMC40OCwtMC4zMywxLjExLC0wLjU3LDEuNzQsLTAuNjZdLFsneiddXSx3OjE2LjM2NixoOjcuODkzfSxcblx0XHQnc2NyaXB0cy50cmlsbCc6e2Q6W1snTScsLTAuNTEsLTE2LjAyXSxbJ2MnLDAuMTIsLTAuMDksMC4yMSwtMC4xOCwwLjIxLC0wLjE4XSxbJ2wnLC0wLjgxLDQuMDJdLFsnbCcsLTAuODEsNC4wMl0sWydjJywwLjAzLDAuMDAsMC41MSwtMC4yNywxLjA4LC0wLjYwXSxbJ2MnLDAuNjAsLTAuMzAsMS4xNCwtMC42MywxLjI2LC0wLjY2XSxbJ2MnLDEuMTQsLTAuNTQsMi4zMSwtMC42MCwzLjA5LC0wLjE4XSxbJ2MnLDAuMjcsMC4xNSwwLjU0LDAuMzYsMC42MCwwLjUxXSxbJ2wnLDAuMDYsMC4xMl0sWydsJywwLjIxLC0wLjIxXSxbJ2MnLDAuOTAsLTAuODEsMi4yMiwtMC45OSwzLjEyLC0wLjQyXSxbJ2MnLDAuNjAsMC40MiwwLjkwLDEuMTQsMC43OCwyLjA3XSxbJ2MnLC0wLjE1LDEuMjksLTEuMDUsMi4zMSwtMS45NSwyLjI1XSxbJ2MnLC0wLjQ4LC0wLjAzLC0wLjc4LC0wLjMwLC0wLjk2LC0wLjgxXSxbJ2MnLC0wLjA5LC0wLjI3LC0wLjA5LC0wLjkwLC0wLjAzLC0xLjIwXSxbJ2MnLDAuMjEsLTAuNzUsMC44MSwtMS4yMywxLjU5LC0xLjMyXSxbJ2wnLDAuMjQsLTAuMDNdLFsnbCcsLTAuMDksLTAuMTJdLFsnYycsLTAuNTEsLTAuNjYsLTEuNjIsLTAuNjMsLTIuMzEsMC4wM10sWydjJywtMC4zOSwwLjQyLC0wLjMwLDAuMDksLTEuMjMsNC43N10sWydsJywtMC44MSw0LjE0XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMTIsLTAuMDMsLTAuMjEsLTAuMDldLFsnYycsLTAuMzMsLTAuMTUsLTAuNTQsLTAuMTgsLTAuOTksLTAuMThdLFsnYycsLTAuNDIsMC4wMCwtMC42NiwwLjAzLC0xLjA1LDAuMThdLFsnYycsLTAuMTIsMC4wNiwtMC4yMSwwLjA5LC0wLjIxLDAuMDldLFsnYycsMC4wMCwtMC4wMywwLjM2LC0xLjg2LDAuODEsLTQuMTFdLFsnYycsMC45MCwtNC40NywwLjg3LC00LjI2LDAuNjksLTQuNTNdLFsnYycsLTAuMjEsLTAuMzYsLTAuNjYsLTAuNTEsLTEuMTcsLTAuMzZdLFsnYycsLTAuMTUsMC4wNiwtMi4yMiwxLjE0LC0yLjU4LDEuMzhdLFsnYycsLTAuMTIsMC4wOSwtMC4xMiwwLjA5LC0wLjIxLDAuNjBdLFsnbCcsLTAuMDksMC41MV0sWydsJywwLjIxLDAuMjRdLFsnYycsMC42MywwLjc1LDEuMDIsMS40NywxLjIwLDIuMTldLFsnYycsMC4wNiwwLjI3LDAuMDYsMC4zNiwwLjA2LDAuODFdLFsnYycsMC4wMCwwLjQyLDAuMDAsMC41NCwtMC4wNiwwLjc4XSxbJ2MnLC0wLjE1LDAuNTQsLTAuMzMsMC45MywtMC42MywxLjM1XSxbJ2MnLC0wLjE4LDAuMjQsLTAuNTcsMC42MywtMC44MSwwLjc4XSxbJ2MnLC0wLjI0LDAuMTUsLTAuNjMsMC4zNiwtMC44NCwwLjQyXSxbJ2MnLC0wLjI3LDAuMDYsLTAuNjYsMC4wNiwtMC44NywwLjAzXSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjMyLC0xLjA1LC0xLjM4LC0yLjQ2XSxbJ2MnLC0wLjAzLC0wLjYwLDAuMDMsLTAuOTksMC4zMywtMi40Nl0sWydjJywwLjIxLC0xLjA4LDAuMjQsLTEuMzIsMC4yMSwtMS4yOV0sWydjJywtMS4yMCwwLjQ4LC0yLjQwLDAuNzUsLTMuMjEsMC43Ml0sWydjJywtMC42OSwtMC4wNiwtMS4xNywtMC4zMCwtMS40MSwtMC43Ml0sWydjJywtMC4zOSwtMC43NSwtMC4xMiwtMS44MCwwLjY2LC0yLjQ2XSxbJ2MnLDAuMjQsLTAuMTgsMC42OSwtMC40MiwxLjAyLC0wLjUxXSxbJ2MnLDAuNjksLTAuMTgsMS41MywtMC4xNSwyLjMxLDAuMDldLFsnYycsMC4zMCwwLjA5LDAuNzUsMC4zMCwwLjk5LDAuNDVdLFsnYycsMC4xMiwwLjA5LDAuMTUsMC4wOSwwLjE1LDAuMDNdLFsnYycsMC4wMywtMC4wMywwLjMzLC0xLjU5LDAuNzIsLTMuNDVdLFsnYycsMC4zNiwtMS44NiwwLjY2LC0zLjQyLDAuNjksLTMuNDVdLFsnYycsMC4wMCwtMC4wMywwLjAzLC0wLjAzLDAuMjEsMC4wM10sWydjJywwLjIxLDAuMDYsMC4yNywwLjA2LDAuNDgsMC4wNl0sWydjJywwLjQyLC0wLjAzLDAuNzgsLTAuMTgsMS4yNiwtMC40OF0sWydjJywwLjE1LC0wLjEyLDAuMzYsLTAuMjcsMC40OCwtMC4zOV0sWyd6J10sWydtJywtNS43Myw3LjY4XSxbJ2MnLC0wLjI3LC0wLjAzLC0wLjk2LC0wLjA2LC0xLjIwLC0wLjAzXSxbJ2MnLC0wLjgxLDAuMTIsLTEuMzUsMC41NywtMS41MCwxLjIwXSxbJ2MnLC0wLjE4LDAuNjYsMC4xMiwxLjE0LDAuNzUsMS4yOV0sWydjJywwLjY2LDAuMTIsMS45MiwtMC4xMiwzLjE4LC0wLjY2XSxbJ2wnLDAuMzMsLTAuMTVdLFsnbCcsMC4wOSwtMC4zOV0sWydjJywwLjA2LC0wLjIxLDAuMDksLTAuNDIsMC4wOSwtMC40NV0sWydjJywwLjAwLC0wLjAzLC0wLjQ1LC0wLjMwLC0wLjc1LC0wLjQ1XSxbJ2MnLC0wLjI3LC0wLjE1LC0wLjY2LC0wLjI3LC0wLjk5LC0wLjM2XSxbJ3onXSxbJ20nLDQuMjksMy42M10sWydjJywtMC4yNCwtMC4zOSwtMC41MSwtMC43NSwtMC41MSwtMC42OV0sWydjJywtMC4wNiwwLjEyLC0wLjM5LDEuOTIsLTAuNDUsMi4yOF0sWydjJywtMC4wOSwwLjU0LC0wLjEyLDEuMTQsLTAuMDYsMS4zOF0sWydjJywwLjA2LDAuNDIsMC4yMSwwLjYwLDAuNTEsMC41N10sWydjJywwLjM5LC0wLjA2LDAuNzUsLTAuNDgsMC45MywtMS4xNF0sWydjJywwLjA5LC0wLjMzLDAuMDksLTEuMDUsMC4wMCwtMS4zOF0sWydjJywtMC4wOSwtMC4zOSwtMC4yNCwtMC42OSwtMC40MiwtMS4wMl0sWyd6J11dLHc6MTcuOTYzLGg6MTYuNDl9LFxuXHRcdCdzY3JpcHRzLnNlZ25vJzp7ZDpbWydNJywtMy43MiwtMTEuMjJdLFsnYycsMC43OCwtMC4wOSwxLjU5LDAuMDMsMi4zMSwwLjQyXSxbJ2MnLDEuMjAsMC42MCwyLjAxLDEuNzEsMi4zMSwzLjA5XSxbJ2MnLDAuMDksMC40MiwwLjA5LDEuMjAsMC4wMywxLjUwXSxbJ2MnLC0wLjE1LDAuNDUsLTAuMzksMC44MSwtMC42NiwwLjkzXSxbJ2MnLC0wLjMzLDAuMTgsLTAuODQsMC4yMSwtMS4yMywwLjE1XSxbJ2MnLC0wLjgxLC0wLjE4LC0xLjMyLC0wLjkzLC0xLjI2LC0xLjg5XSxbJ2MnLDAuMDMsLTAuMzYsMC4wOSwtMC41NywwLjI0LC0wLjkwXSxbJ2MnLDAuMTUsLTAuMzMsMC40NSwtMC42MCwwLjcyLC0wLjc1XSxbJ2MnLDAuMTIsLTAuMDYsMC4xOCwtMC4wOSwwLjE4LC0wLjEyXSxbJ2MnLDAuMDAsLTAuMDMsLTAuMDMsLTAuMTUsLTAuMDksLTAuMjRdLFsnYycsLTAuMTgsLTAuNDUsLTAuNTQsLTAuODcsLTAuOTYsLTEuMDhdLFsnYycsLTEuMTEsLTAuNTcsLTIuMzQsLTAuMTgsLTIuODgsMC45MF0sWydjJywtMC4yNCwwLjUxLC0wLjMzLDEuMTEsLTAuMjQsMS44M10sWydjJywwLjI3LDEuOTIsMS41MCwzLjU0LDMuOTMsNS4xM10sWydjJywwLjQ4LDAuMzMsMS4yNiwwLjc4LDEuMjksMC43OF0sWydjJywwLjAzLDAuMDAsMS4zNSwtMi4xOSwyLjk0LC00Ljg5XSxbJ2wnLDIuODgsLTQuODldLFsnbCcsMC44NCwwLjAwXSxbJ2wnLDAuODcsMC4wMF0sWydsJywtMC4wMywwLjA2XSxbJ2MnLC0wLjE1LDAuMjEsLTYuMTUsMTAuNDEsLTYuMTUsMTAuNDRdLFsnYycsMC4wMCwwLjAwLDAuMjEsMC4xNSwwLjQ4LDAuMjddLFsnYycsMi42MSwxLjQ3LDQuMzUsMy4wMyw1LjEzLDQuNjVdLFsnYycsMS4xNCwyLjM0LDAuNTEsNS4wNywtMS40NCw2LjM5XSxbJ2MnLC0wLjY2LDAuNDIsLTEuMzIsMC42MywtMi4xMywwLjY5XSxbJ2MnLC0yLjAxLDAuMDksLTMuODEsLTEuNDEsLTQuMjYsLTMuNTRdLFsnYycsLTAuMDksLTAuNDIsLTAuMDksLTEuMjAsLTAuMDMsLTEuNTBdLFsnYycsMC4xNSwtMC40NSwwLjM5LC0wLjgxLDAuNjYsLTAuOTNdLFsnYycsMC4zMywtMC4xOCwwLjg0LC0wLjIxLDEuMjMsLTAuMTVdLFsnYycsMC44MSwwLjE4LDEuMzIsMC45MywxLjI2LDEuODldLFsnYycsLTAuMDMsMC4zNiwtMC4wOSwwLjU3LC0wLjI0LDAuOTBdLFsnYycsLTAuMTUsMC4zMywtMC40NSwwLjYwLC0wLjcyLDAuNzVdLFsnYycsLTAuMTIsMC4wNiwtMC4xOCwwLjA5LC0wLjE4LDAuMTJdLFsnYycsMC4wMCwwLjAzLDAuMDMsMC4xNSwwLjA5LDAuMjRdLFsnYycsMC4xOCwwLjQ1LDAuNTQsMC44NywwLjk2LDEuMDhdLFsnYycsMS4xMSwwLjU3LDIuMzQsMC4xOCwyLjg4LC0wLjkwXSxbJ2MnLDAuMjQsLTAuNTEsMC4zMywtMS4xMSwwLjI0LC0xLjgzXSxbJ2MnLC0wLjI3LC0xLjkyLC0xLjUwLC0zLjU0LC0zLjkzLC01LjEzXSxbJ2MnLC0wLjQ4LC0wLjMzLC0xLjI2LC0wLjc4LC0xLjI5LC0wLjc4XSxbJ2MnLC0wLjAzLDAuMDAsLTEuMzUsMi4xOSwtMi45MSw0Ljg5XSxbJ2wnLC0yLjg4LDQuODldLFsnbCcsLTAuODcsMC4wMF0sWydsJywtMC44NywwLjAwXSxbJ2wnLDAuMDMsLTAuMDZdLFsnYycsMC4xNSwtMC4yMSw2LjE1LC0xMC40MSw2LjE1LC0xMC40NF0sWydjJywwLjAwLDAuMDAsLTAuMjEsLTAuMTUsLTAuNDgsLTAuMzBdLFsnYycsLTIuNjEsLTEuNDQsLTQuMzUsLTMuMDAsLTUuMTMsLTQuNjJdLFsnYycsLTAuOTAsLTEuODksLTAuNzIsLTQuMDIsMC40OCwtNS41Ml0sWydjJywwLjY5LC0wLjg0LDEuNjgsLTEuNDEsMi43MywtMS41M10sWyd6J10sWydtJyw4Ljc2LDkuMDldLFsnYycsMC4wMywtMC4wMywwLjE1LC0wLjAzLDAuMjcsLTAuMDNdLFsnYycsMC4zMywwLjAzLDAuNTcsMC4xOCwwLjcyLDAuNDhdLFsnYycsMC4wOSwwLjE4LDAuMDksMC41NywwLjAwLDAuNzVdLFsnYycsLTAuMDksMC4xOCwtMC4yMSwwLjMwLC0wLjM2LDAuMzldLFsnYycsLTAuMTUsMC4wNiwtMC4yMSwwLjA2LC0wLjM5LDAuMDZdLFsnYycsLTAuMjEsMC4wMCwtMC4yNywwLjAwLC0wLjM5LC0wLjA2XSxbJ2MnLC0wLjMwLC0wLjE1LC0wLjQ4LC0wLjQ1LC0wLjQ4LC0wLjc1XSxbJ2MnLDAuMDAsLTAuMzksMC4yNCwtMC43MiwwLjYzLC0wLjg0XSxbJ3onXSxbJ20nLC0xMC41MywyLjYxXSxbJ2MnLDAuMDMsLTAuMDMsMC4xNSwtMC4wMywwLjI3LC0wLjAzXSxbJ2MnLDAuMzMsMC4wMywwLjU3LDAuMTgsMC43MiwwLjQ4XSxbJ2MnLDAuMDksMC4xOCwwLjA5LDAuNTcsMC4wMCwwLjc1XSxbJ2MnLC0wLjA5LDAuMTgsLTAuMjEsMC4zMCwtMC4zNiwwLjM5XSxbJ2MnLC0wLjE1LDAuMDYsLTAuMjEsMC4wNiwtMC4zOSwwLjA2XSxbJ2MnLC0wLjIxLDAuMDAsLTAuMjcsMC4wMCwtMC4zOSwtMC4wNl0sWydjJywtMC4zMCwtMC4xNSwtMC40OCwtMC40NSwtMC40OCwtMC43NV0sWydjJywwLjAwLC0wLjM5LDAuMjQsLTAuNzIsMC42MywtMC44NF0sWyd6J11dLHc6MTUsaDoyMi41MDR9LFxuXHRcdCdzY3JpcHRzLmNvZGEnOntkOltbJ00nLC0wLjIxLC0xMC40N10sWydjJywwLjE4LC0wLjEyLDAuNDIsLTAuMDYsMC41NCwwLjEyXSxbJ2MnLDAuMDYsMC4wOSwwLjA2LDAuMTgsMC4wNiwxLjUwXSxbJ2wnLDAuMDAsMS4zOF0sWydsJywwLjE4LDAuMDBdLFsnYycsMC4zOSwwLjA2LDAuOTYsMC4yNCwxLjM4LDAuNDhdLFsnYycsMS42OCwwLjkzLDIuODIsMy4yNCwzLjAzLDYuMTJdLFsnYycsMC4wMywwLjI0LDAuMDMsMC40NSwwLjAzLDAuNDVdLFsnYycsMC4wMCwwLjAzLDAuNjAsMC4wMywxLjM1LDAuMDNdLFsnYycsMS41MCwwLjAwLDEuNDcsMC4wMCwxLjU5LDAuMThdLFsnYycsMC4wOSwwLjEyLDAuMDksMC4zMCwwLjAwLDAuNDJdLFsnYycsLTAuMTIsMC4xOCwtMC4wOSwwLjE4LC0xLjU5LDAuMThdLFsnYycsLTAuNzUsMC4wMCwtMS4zNSwwLjAwLC0xLjM1LDAuMDNdLFsnYycsMC4wMCwwLjAwLDAuMDAsMC4yMSwtMC4wMywwLjQyXSxbJ2MnLC0wLjI0LDMuMTUsLTEuNTMsNS41OCwtMy40NSw2LjM2XSxbJ2MnLC0wLjI3LDAuMTIsLTAuNzIsMC4yNCwtMC45NiwwLjI3XSxbJ2wnLC0wLjE4LDAuMDBdLFsnbCcsMC4wMCwxLjM4XSxbJ2MnLDAuMDAsMS4zMiwwLjAwLDEuNDEsLTAuMDYsMS41MF0sWydjJywtMC4xNSwwLjI0LC0wLjUxLDAuMjQsLTAuNjYsMC4wMF0sWydjJywtMC4wNiwtMC4wOSwtMC4wNiwtMC4xOCwtMC4wNiwtMS41MF0sWydsJywwLjAwLC0xLjM4XSxbJ2wnLC0wLjE4LDAuMDBdLFsnYycsLTAuMzksLTAuMDYsLTAuOTYsLTAuMjQsLTEuMzgsLTAuNDhdLFsnYycsLTEuNjgsLTAuOTMsLTIuODIsLTMuMjQsLTMuMDMsLTYuMTVdLFsnYycsLTAuMDMsLTAuMjEsLTAuMDMsLTAuNDIsLTAuMDMsLTAuNDJdLFsnYycsMC4wMCwtMC4wMywtMC42MCwtMC4wMywtMS4zNSwtMC4wM10sWydjJywtMS41MCwwLjAwLC0xLjQ3LDAuMDAsLTEuNTksLTAuMThdLFsnYycsLTAuMDksLTAuMTIsLTAuMDksLTAuMzAsMC4wMCwtMC40Ml0sWydjJywwLjEyLC0wLjE4LDAuMDksLTAuMTgsMS41OSwtMC4xOF0sWydjJywwLjc1LDAuMDAsMS4zNSwwLjAwLDEuMzUsLTAuMDNdLFsnYycsMC4wMCwwLjAwLDAuMDAsLTAuMjEsMC4wMywtMC40NV0sWydjJywwLjI0LC0zLjEyLDEuNTMsLTUuNTUsMy40NSwtNi4zM10sWydjJywwLjI3LC0wLjEyLDAuNzIsLTAuMjQsMC45NiwtMC4yN10sWydsJywwLjE4LDAuMDBdLFsnbCcsMC4wMCwtMS4zOF0sWydjJywwLjAwLC0xLjUzLDAuMDAsLTEuNTAsMC4xOCwtMS42Ml0sWyd6J10sWydtJywtMC4xOCw2LjkzXSxbJ2MnLDAuMDAsLTIuOTcsMC4wMCwtMy4xNSwtMC4wNiwtMy4xNV0sWydjJywtMC4wOSwwLjAwLC0wLjUxLDAuMTUsLTAuNjYsMC4yMV0sWydjJywtMC44NywwLjUxLC0xLjM4LDEuNjIsLTEuNTYsMy41MV0sWydjJywtMC4wNiwwLjU0LC0wLjEyLDEuNTksLTAuMTIsMi4xNl0sWydsJywwLjAwLDAuNDJdLFsnbCcsMS4yMCwwLjAwXSxbJ2wnLDEuMjAsMC4wMF0sWydsJywwLjAwLC0zLjE1XSxbJ3onXSxbJ20nLDEuMTcsLTMuMDZdLFsnYycsLTAuMDksLTAuMDMsLTAuMjEsLTAuMDYsLTAuMjcsLTAuMDldLFsnbCcsLTAuMTIsMC4wMF0sWydsJywwLjAwLDMuMTVdLFsnbCcsMC4wMCwzLjE1XSxbJ2wnLDEuMjAsMC4wMF0sWydsJywxLjIwLDAuMDBdLFsnbCcsMC4wMCwtMC44MV0sWydjJywtMC4wNiwtMi40MCwtMC4zMywtMy42OSwtMC45MywtNC41OV0sWydjJywtMC4yNywtMC4zOSwtMC42NiwtMC42OSwtMS4wOCwtMC44MV0sWyd6J10sWydtJywtMS4xNywxMC4xNF0sWydsJywwLjAwLC0zLjE1XSxbJ2wnLC0xLjIwLDAuMDBdLFsnbCcsLTEuMjAsMC4wMF0sWydsJywwLjAwLDAuODFdLFsnYycsMC4wMywwLjk2LDAuMDYsMS40NywwLjE1LDIuMTNdLFsnYycsMC4yNCwyLjA0LDAuOTYsMy4xMiwyLjEzLDMuMzZdLFsnbCcsMC4xMiwwLjAwXSxbJ2wnLDAuMDAsLTMuMTVdLFsneiddLFsnbScsMy4xOCwtMi4zNF0sWydsJywwLjAwLC0wLjgxXSxbJ2wnLC0xLjIwLDAuMDBdLFsnbCcsLTEuMjAsMC4wMF0sWydsJywwLjAwLDMuMTVdLFsnbCcsMC4wMCwzLjE1XSxbJ2wnLDAuMTIsMC4wMF0sWydjJywxLjE3LC0wLjI0LDEuODksLTEuMzIsMi4xMywtMy4zNl0sWydjJywwLjA5LC0wLjY2LDAuMTIsLTEuMTcsMC4xNSwtMi4xM10sWyd6J11dLHc6MTYuMDM1LGg6MjEuMDYyfSxcblx0XHQnc2NyaXB0cy5jb21tYSc6e2Q6W1snTScsMS4xNCwtNC42Ml0sWydjJywwLjMwLC0wLjEyLDAuNjksLTAuMDMsMC45MywwLjE1XSxbJ2MnLDAuMTIsMC4xMiwwLjM2LDAuNDUsMC41MSwwLjc4XSxbJ2MnLDAuOTAsMS43NywwLjU0LDQuMDUsLTEuMDgsNi43NV0sWydjJywtMC4zNiwwLjYzLC0wLjg3LDEuMzgsLTAuOTYsMS40NF0sWydjJywtMC4xOCwwLjEyLC0wLjQyLDAuMDYsLTAuNTQsLTAuMTJdLFsnYycsLTAuMDksLTAuMTgsLTAuMDksLTAuMzAsMC4xMiwtMC42MF0sWydjJywwLjk2LC0xLjQ0LDEuNDQsLTIuOTcsMS4zOCwtNC4zNV0sWydjJywtMC4wNiwtMC45MywtMC4zMCwtMS42OCwtMC43OCwtMi40Nl0sWydjJywtMC4yNywtMC4zOSwtMC4zMywtMC42MywtMC4yNCwtMC45Nl0sWydjJywwLjA5LC0wLjI3LDAuMzYsLTAuNTQsMC42NiwtMC42M10sWyd6J11dLHc6My4wNDIsaDo5LjIzN30sXG5cdFx0J3NjcmlwdHMucm9sbCc6e2Q6W1snTScsMS45NSwtNi4wMF0sWydjJywwLjIxLC0wLjA5LDAuMzYsLTAuMDksMC41NywwLjAwXSxbJ2MnLDAuMzksMC4xNSwwLjYzLDAuMzksMS40NywxLjM1XSxbJ2MnLDAuNjYsMC43NSwwLjc4LDAuODcsMS4wOCwxLjA1XSxbJ2MnLDAuNzUsMC40NSwxLjY1LDAuNDIsMi40MCwtMC4wNl0sWydjJywwLjEyLC0wLjA5LDAuMjcsLTAuMjcsMC41NCwtMC42MF0sWydjJywwLjQyLC0wLjU0LDAuNTEsLTAuNjMsMC42OSwtMC42M10sWydjJywwLjA5LDAuMDAsMC4zMCwwLjEyLDAuMzYsMC4yMV0sWydjJywwLjA5LDAuMTIsMC4xMiwwLjMwLDAuMDMsMC40Ml0sWydjJywtMC4wNiwwLjEyLC0zLjE1LDMuOTAsLTMuMzAsNC4wOF0sWydjJywtMC4wNiwwLjA2LC0wLjE4LDAuMTIsLTAuMjcsMC4xOF0sWydjJywtMC4yNywwLjEyLC0wLjYwLDAuMDYsLTAuOTksLTAuMjddLFsnYycsLTAuMjcsLTAuMjEsLTAuNDIsLTAuMzksLTEuMDgsLTEuMTRdLFsnYycsLTAuNjMsLTAuNzIsLTAuODEsLTAuOTAsLTEuMTcsLTEuMDhdLFsnYycsLTAuMzYsLTAuMTgsLTAuNTcsLTAuMjEsLTAuOTksLTAuMjFdLFsnYycsLTAuMzksMC4wMCwtMC42MywwLjAzLC0wLjkzLDAuMThdLFsnYycsLTAuMzYsMC4xNSwtMC41MSwwLjI3LC0wLjkwLDAuODFdLFsnYycsLTAuMjQsMC4yNywtMC40NSwwLjUxLC0wLjQ4LDAuNTRdLFsnYycsLTAuMTIsMC4wOSwtMC4yNywwLjA2LC0wLjM5LDAuMDBdLFsnYycsLTAuMjQsLTAuMTUsLTAuMzMsLTAuMzksLTAuMjEsLTAuNjBdLFsnYycsMC4wOSwtMC4xMiwzLjE4LC0zLjg3LDMuMzMsLTQuMDJdLFsnYycsMC4wNiwtMC4wNiwwLjE4LC0wLjE1LDAuMjQsLTAuMjFdLFsneiddXSx3OjEwLjgxNyxoOjYuMTI1fSxcblx0XHQnc2NyaXB0cy5wcmFsbCc6e2Q6W1snTScsLTQuMzgsLTMuNjldLFsnYycsMC4wNiwtMC4wMywwLjE4LC0wLjA2LDAuMjQsLTAuMDZdLFsnYycsMC4zMCwwLjAwLDAuMjcsLTAuMDMsMS44OSwxLjk1XSxbJ2wnLDEuNTMsMS44M10sWydjJywwLjAzLDAuMDAsMC41NywtMC44NCwxLjIzLC0xLjgzXSxbJ2MnLDEuMTQsLTEuNjgsMS4yMywtMS44MywxLjM1LC0xLjg5XSxbJ2MnLDAuMDYsLTAuMDMsMC4xOCwtMC4wNiwwLjI0LC0wLjA2XSxbJ2MnLDAuMzAsMC4wMCwwLjI3LC0wLjAzLDEuODksMS45NV0sWydsJywxLjUzLDEuODNdLFsnbCcsMC40OCwtMC42OV0sWydjJywwLjUxLC0wLjc4LDAuNTQsLTAuODQsMC42OSwtMC45MF0sWydjJywwLjQyLC0wLjE4LDAuODcsMC4xNSwwLjgxLDAuNjBdLFsnYycsLTAuMDMsMC4xMiwtMC4zMCwwLjUxLC0xLjUwLDIuMzddLFsnYycsLTEuMzgsMi4wNywtMS41MCwyLjIyLC0xLjYyLDIuMjhdLFsnYycsLTAuMDYsMC4wMywtMC4xOCwwLjA2LC0wLjI0LDAuMDZdLFsnYycsLTAuMzAsMC4wMCwtMC4yNywwLjAzLC0xLjg5LC0xLjk1XSxbJ2wnLC0xLjUzLC0xLjgzXSxbJ2MnLC0wLjAzLDAuMDAsLTAuNTcsMC44NCwtMS4yMywxLjgzXSxbJ2MnLC0xLjE0LDEuNjgsLTEuMjMsMS44MywtMS4zNSwxLjg5XSxbJ2MnLC0wLjA2LDAuMDMsLTAuMTgsMC4wNiwtMC4yNCwwLjA2XSxbJ2MnLC0wLjMwLDAuMDAsLTAuMjcsMC4wMywtMS44OSwtMS45NV0sWydsJywtMS41MywtMS44M10sWydsJywtMC40OCwwLjY5XSxbJ2MnLC0wLjUxLDAuNzgsLTAuNTQsMC44NCwtMC42OSwwLjkwXSxbJ2MnLC0wLjQyLDAuMTgsLTAuODcsLTAuMTUsLTAuODEsLTAuNjBdLFsnYycsMC4wMywtMC4xMiwwLjMwLC0wLjUxLDEuNTAsLTIuMzddLFsnYycsMS4zOCwtMi4wNywxLjUwLC0yLjIyLDEuNjIsLTIuMjhdLFsneiddXSx3OjE1LjAxMSxoOjcuNX0sXG5cdFx0J3NjcmlwdHMuYXJwZWdnaW8nOntkOltbJ00nLDEuNSwwXSxbJ2MnLDEuNSwyLDEuNSwzLDEuNSwzXSxbJ3MnLDAsMSwtMiwxLjVdLFsncycsLTAuNSwzLDEsNS41XSxbJ2wnLDEuNSwwXSxbJ3MnLC0xLjc1LC0yLC0xLjksLTMuMjVdLFsncycsMi4xNSwtMC42LDIuOTUsLTEuNl0sWydzJywwLjQ1LC0xLDAuNSwtMS4yNV0sWydzJywwLC0xLC0yLC0zLjldLFsnbCcsLTEuNSwwXSxbJ3onXV0sdzo1LGg6MTB9LFxuXHRcdCdzY3JpcHRzLm1vcmRlbnQnOntkOltbJ00nLC0wLjIxLC00Ljk1XSxbJ2MnLDAuMjcsLTAuMTUsMC42MywwLjAwLDAuNzUsMC4yN10sWydjJywwLjA2LDAuMTIsMC4wNiwwLjI0LDAuMDYsMS40NF0sWydsJywwLjAwLDEuMjldLFsnbCcsMC41NywtMC44NF0sWydjJywwLjUxLC0wLjc1LDAuNTcsLTAuODQsMC42OSwtMC45MF0sWydjJywwLjA2LC0wLjAzLDAuMTgsLTAuMDYsMC4yNCwtMC4wNl0sWydjJywwLjMwLDAuMDAsMC4yNywtMC4wMywxLjg5LDEuOTVdLFsnbCcsMS41MywxLjgzXSxbJ2wnLDAuNDgsLTAuNjldLFsnYycsMC41MSwtMC43OCwwLjU0LC0wLjg0LDAuNjksLTAuOTBdLFsnYycsMC40MiwtMC4xOCwwLjg3LDAuMTUsMC44MSwwLjYwXSxbJ2MnLC0wLjAzLDAuMTIsLTAuMzAsMC41MSwtMS41MCwyLjM3XSxbJ2MnLC0xLjM4LDIuMDcsLTEuNTAsMi4yMiwtMS42MiwyLjI4XSxbJ2MnLC0wLjA2LDAuMDMsLTAuMTgsMC4wNiwtMC4yNCwwLjA2XSxbJ2MnLC0wLjMwLDAuMDAsLTAuMjcsMC4wMywtMS44MywtMS44OV0sWydjJywtMC44MSwtMC45OSwtMS41MCwtMS44MCwtMS41MywtMS44Nl0sWydjJywtMC4wNiwtMC4wMywtMC4wNiwtMC4wMywtMC4xMiwwLjAzXSxbJ2MnLC0wLjA2LDAuMDYsLTAuMDYsMC4xNSwtMC4wNiwyLjI4XSxbJ2MnLDAuMDAsMS45NSwwLjAwLDIuMjUsLTAuMDYsMi4zNF0sWydjJywtMC4xOCwwLjQ1LC0wLjgxLDAuNDgsLTEuMDUsMC4wM10sWydjJywtMC4wMywtMC4wNiwtMC4wNiwtMC4yNCwtMC4wNiwtMS40MV0sWydsJywwLjAwLC0xLjM1XSxbJ2wnLC0wLjU3LDAuODRdLFsnYycsLTAuNTQsMC43OCwtMC42MCwwLjg3LC0wLjcyLDAuOTNdLFsnYycsLTAuMDYsMC4wMywtMC4xOCwwLjA2LC0wLjI0LDAuMDZdLFsnYycsLTAuMzAsMC4wMCwtMC4yNywwLjAzLC0xLjg5LC0xLjk1XSxbJ2wnLC0xLjUzLC0xLjgzXSxbJ2wnLC0wLjQ4LDAuNjldLFsnYycsLTAuNTEsMC43OCwtMC41NCwwLjg0LC0wLjY5LDAuOTBdLFsnYycsLTAuNDIsMC4xOCwtMC44NywtMC4xNSwtMC44MSwtMC42MF0sWydjJywwLjAzLC0wLjEyLDAuMzAsLTAuNTEsMS41MCwtMi4zN10sWydjJywxLjM4LC0yLjA3LDEuNTAsLTIuMjIsMS42MiwtMi4yOF0sWydjJywwLjA2LC0wLjAzLDAuMTgsLTAuMDYsMC4yNCwtMC4wNl0sWydjJywwLjMwLDAuMDAsMC4yNywtMC4wMywxLjg5LDEuOTVdLFsnbCcsMS41MywxLjgzXSxbJ2MnLDAuMDMsMC4wMCwwLjA2LC0wLjA2LDAuMDksLTAuMDldLFsnYycsMC4wNiwtMC4xMiwwLjA2LC0wLjE1LDAuMDYsLTIuMjhdLFsnYycsMC4wMCwtMS45MiwwLjAwLC0yLjIyLDAuMDYsLTIuMzFdLFsnYycsMC4wNiwtMC4xNSwwLjE1LC0wLjI0LDAuMzAsLTAuMzBdLFsneiddXSx3OjE1LjAxMSxoOjEwLjAxMn0sXG5cdFx0J2ZsYWdzLnU4dGgnOntkOltbJ00nLC0wLjQyLDMuNzVdLFsnbCcsMC4wMCwtMy43NV0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMDAsMC4xOF0sWydjJywwLjAwLDAuMzAsMC4wNiwwLjg0LDAuMTIsMS4yM10sWydjJywwLjI0LDEuNTMsMC45MCwzLjEyLDIuMTMsNS4xNl0sWydsJywwLjk5LDEuNTldLFsnYycsMC44NywxLjQ0LDEuMzgsMi4zNCwxLjc3LDMuMDldLFsnYycsMC44MSwxLjY4LDEuMjAsMy4wNiwxLjI2LDQuNTNdLFsnYycsMC4wMywxLjUzLC0wLjIxLDMuMjcsLTAuNzUsNS4wMV0sWydjJywtMC4yMSwwLjY5LC0wLjUxLDEuNTAsLTAuNjAsMS41OV0sWydjJywtMC4wOSwwLjEyLC0wLjI3LDAuMjEsLTAuNDIsMC4yMV0sWydjJywtMC4xNSwwLjAwLC0wLjQyLC0wLjEyLC0wLjUxLC0wLjIxXSxbJ2MnLC0wLjE1LC0wLjE4LC0wLjE4LC0wLjQyLC0wLjA5LC0wLjY2XSxbJ2MnLDAuMTUsLTAuMzMsMC40NSwtMS4yMCwwLjU3LC0xLjYyXSxbJ2MnLDAuNDIsLTEuMzgsMC42MCwtMi41OCwwLjYwLC0zLjkwXSxbJ2MnLDAuMDAsLTAuNjYsMC4wMCwtMC44MSwtMC4wNiwtMS4xMV0sWydjJywtMC4zOSwtMi4wNywtMS44MCwtNC4yNiwtNC41OSwtNy4xNF0sWydsJywtMC40MiwtMC40NV0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsMC4wMCwtMy43NV0sWyd6J11dLHc6Ni42OTIsaDoyMi41OX0sXG5cdFx0J2ZsYWdzLnUxNnRoJzp7ZDpbWydNJywtMC40Miw3LjUwXSxbJ2wnLDAuMDAsLTcuNTBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDAuMzldLFsnYycsMC4wNiwxLjA4LDAuMzksMi4xOSwwLjk5LDMuMzldLFsnYycsMC40NSwwLjkwLDAuODcsMS41OSwxLjk1LDMuMTJdLFsnYycsMS4yOSwxLjg2LDEuNzcsMi42NCwyLjIyLDMuNTddLFsnYycsMC40NSwwLjkzLDAuNzIsMS44MCwwLjg3LDIuNjRdLFsnYycsMC4wNiwwLjUxLDAuMDYsMS41MCwwLjAwLDEuOTJdLFsnYycsLTAuMTIsMC42MCwtMC4zMCwxLjIwLC0wLjU0LDEuNzFdLFsnbCcsLTAuMDksMC4yNF0sWydsJywwLjE4LDAuNDVdLFsnYycsMC41MSwxLjIwLDAuNzIsMi4yMiwwLjY5LDMuNDJdLFsnYycsLTAuMDYsMS41MywtMC4zOSwzLjAzLC0wLjk5LDQuNTNdLFsnYycsLTAuMzAsMC43NSwtMC4zNiwwLjgxLC0wLjU3LDAuOTBdLFsnYycsLTAuMTUsMC4wOSwtMC4zMywwLjA2LC0wLjQ4LDAuMDBdLFsnYycsLTAuMTgsLTAuMDksLTAuMjcsLTAuMTgsLTAuMzMsLTAuMzNdLFsnYycsLTAuMDksLTAuMTgsLTAuMDYsLTAuMzAsMC4xMiwtMC43NV0sWydjJywwLjY2LC0xLjQxLDEuMDIsLTIuODgsMS4wOCwtNC4zMl0sWydjJywwLjAwLC0wLjYwLC0wLjAzLC0xLjA1LC0wLjE4LC0xLjU5XSxbJ2MnLC0wLjMwLC0xLjIwLC0wLjk5LC0yLjQwLC0yLjI1LC0zLjg3XSxbJ2MnLC0wLjQyLC0wLjQ4LC0xLjUzLC0xLjYyLC0yLjE5LC0yLjIyXSxbJ2wnLC0wLjQ1LC0wLjQyXSxbJ2wnLC0wLjAzLDEuMTFdLFsnbCcsMC4wMCwxLjExXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywwLjAwLC03LjUwXSxbJ3onXSxbJ20nLDEuNjUsMC4wOV0sWydjJywtMC4zMCwtMC4zMCwtMC42OSwtMC43MiwtMC45MCwtMC44N10sWydsJywtMC4zMywtMC4zM10sWydsJywwLjAwLDAuMTVdLFsnYycsMC4wMCwwLjMwLDAuMDYsMC44MSwwLjE1LDEuMjZdLFsnYycsMC4yNywxLjI5LDAuODcsMi42MSwyLjA0LDQuMjldLFsnYycsMC4xNSwwLjI0LDAuNjAsMC44NywwLjk2LDEuMzhdLFsnbCcsMS4wOCwxLjUzXSxbJ2wnLDAuNDIsMC42M10sWydjJywwLjAzLDAuMDAsMC4xMiwtMC4zNiwwLjIxLC0wLjcyXSxbJ2MnLDAuMDYsLTAuMzMsMC4wNiwtMS4yMCwwLjAwLC0xLjYyXSxbJ2MnLC0wLjMzLC0xLjcxLC0xLjQ0LC0zLjQ4LC0zLjYzLC01LjcwXSxbJ3onXV0sdzo2LjY5MyxoOjI2LjMzN30sXG5cdFx0J2ZsYWdzLnUzMm5kJzp7ZDpbWydNJywtMC40MiwxMS4yNV0sWydsJywwLjAwLC0xMS4yNV0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMDAsMC4zNl0sWydjJywwLjA5LDEuNjgsMC42OSwzLjI3LDIuMDcsNS40Nl0sWydsJywwLjg3LDEuMzVdLFsnYycsMS4wMiwxLjYyLDEuNDcsMi4zNywxLjg2LDMuMThdLFsnYycsMC40OCwxLjAyLDAuNzgsMS45MiwwLjkzLDIuODhdLFsnYycsMC4wNiwwLjQ4LDAuMDYsMS41MCwwLjAwLDEuODldLFsnYycsLTAuMDksMC40MiwtMC4yMSwwLjg3LC0wLjM2LDEuMjZdLFsnbCcsLTAuMTIsMC4zMF0sWydsJywwLjE1LDAuMzldLFsnYycsMC42OSwxLjU2LDAuODQsMi44OCwwLjU0LDQuMzhdLFsnYycsLTAuMDksMC40NSwtMC4yNywxLjA4LC0wLjQ1LDEuNDddLFsnbCcsLTAuMTIsMC4yNF0sWydsJywwLjE4LDAuMzZdLFsnYycsMC4zMywwLjcyLDAuNTcsMS41NiwwLjY5LDIuMzRdLFsnYycsMC4xMiwxLjAyLC0wLjA2LDIuNTIsLTAuNDIsMy44NF0sWydjJywtMC4yNywwLjkzLC0wLjc1LDIuMTMsLTAuOTMsMi4zMV0sWydjJywtMC4xOCwwLjE1LC0wLjQ1LDAuMTgsLTAuNjYsMC4wOV0sWydjJywtMC4xOCwtMC4wOSwtMC4yNywtMC4xOCwtMC4zMywtMC4zM10sWydjJywtMC4wOSwtMC4xOCwtMC4wNiwtMC4zMCwwLjA2LC0wLjYwXSxbJ2MnLDAuMjEsLTAuMzYsMC40MiwtMC45MCwwLjU3LC0xLjM4XSxbJ2MnLDAuNTEsLTEuNDEsMC42OSwtMy4wNiwwLjQ4LC00LjA4XSxbJ2MnLC0wLjE1LC0wLjgxLC0wLjU3LC0xLjY4LC0xLjIwLC0yLjU1XSxbJ2MnLC0wLjcyLC0wLjk5LC0xLjgzLC0yLjEzLC0zLjMwLC0zLjMzXSxbJ2wnLC0wLjQ4LC0wLjQyXSxbJ2wnLC0wLjAzLDEuNTNdLFsnbCcsMC4wMCwxLjU2XSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywwLjAwLC0xMS4yNV0sWyd6J10sWydtJywxLjI2LC0zLjk2XSxbJ2MnLC0wLjI3LC0wLjMwLC0wLjU0LC0wLjYwLC0wLjY2LC0wLjcyXSxbJ2wnLC0wLjE4LC0wLjIxXSxbJ2wnLDAuMDAsMC40Ml0sWydjJywwLjA2LDAuODcsMC4yNCwxLjc0LDAuNjYsMi42N10sWydjJywwLjM2LDAuODcsMC45NiwxLjg2LDEuOTIsMy4xOF0sWydjJywwLjIxLDAuMzMsMC42MywwLjg3LDAuODcsMS4yM10sWydjJywwLjI3LDAuMzksMC42MCwwLjg0LDAuNzUsMS4wOF0sWydsJywwLjI3LDAuMzldLFsnbCcsMC4wMywtMC4xMl0sWydjJywwLjEyLC0wLjQ1LDAuMTUsLTEuMDUsMC4wOSwtMS41OV0sWydjJywtMC4yNywtMS44NiwtMS4zOCwtMy43OCwtMy43NSwtNi4zM10sWyd6J10sWydtJywtMC4yNyw2LjA5XSxbJ2MnLC0wLjI3LC0wLjIxLC0wLjQ4LC0wLjQyLC0wLjUxLC0wLjQ1XSxbJ2MnLC0wLjA2LC0wLjAzLC0wLjA2LC0wLjAzLC0wLjA2LDAuMjFdLFsnYycsMC4wMCwwLjkwLDAuMzAsMi4wNCwwLjgxLDMuMDldLFsnYycsMC40OCwxLjAyLDAuOTYsMS43NywyLjM3LDMuNjNdLFsnYycsMC42MCwwLjc4LDEuMDUsMS40NCwxLjI5LDEuNzddLFsnYycsMC4wNiwwLjEyLDAuMTUsMC4yMSwwLjE1LDAuMThdLFsnYycsMC4wMywtMC4wMywwLjE4LC0wLjU3LDAuMjQsLTAuODddLFsnYycsMC4wNiwtMC40NSwwLjA2LC0xLjMyLC0wLjAzLC0xLjc0XSxbJ2MnLC0wLjA5LC0wLjQ4LC0wLjI0LC0wLjkwLC0wLjUxLC0xLjQ0XSxbJ2MnLC0wLjY2LC0xLjM1LC0xLjgzLC0yLjcwLC0zLjc1LC00LjM4XSxbJ3onXV0sdzo2LjY5NyxoOjMyLjE0NX0sXG5cdFx0J2ZsYWdzLnU2NHRoJzp7ZDpbWydNJywtMC40MiwxNS4wMF0sWydsJywwLjAwLC0xNS4wMF0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMDAsMC4zNl0sWydjJywwLjA2LDEuMjAsMC4zOSwyLjM3LDEuMDIsMy42Nl0sWydjJywwLjM5LDAuODEsMC44NCwxLjU2LDEuODAsMy4wOV0sWydjJywwLjgxLDEuMjYsMS4wNSwxLjY4LDEuMzUsMi4yMl0sWydjJywwLjg3LDEuNTAsMS4zNSwyLjc5LDEuNTYsNC4wOF0sWydjJywwLjA2LDAuNTQsMC4wNiwxLjU2LC0wLjAzLDIuMDRdLFsnYycsLTAuMDksMC40OCwtMC4yMSwwLjk5LC0wLjM2LDEuMzVdLFsnbCcsLTAuMTIsMC4yN10sWydsJywwLjEyLDAuMjddLFsnYycsMC4wOSwwLjE1LDAuMjEsMC40NSwwLjI3LDAuNjZdLFsnYycsMC42OSwxLjg5LDAuNjMsMy42NiwtMC4xOCw1LjQ2XSxbJ2wnLC0wLjE4LDAuMzldLFsnbCcsMC4xNSwwLjMzXSxbJ2MnLDAuMzAsMC42NiwwLjUxLDEuNDQsMC42MywyLjEwXSxbJ2MnLDAuMDYsMC40OCwwLjA2LDEuMzUsMC4wMCwxLjcxXSxbJ2MnLC0wLjE1LDAuNTcsLTAuNDIsMS4yMCwtMC43OCwxLjY4XSxbJ2wnLC0wLjIxLDAuMjddLFsnbCcsMC4xOCwwLjMzXSxbJ2MnLDAuNTcsMS4wNSwwLjkzLDIuMTMsMS4wMiwzLjE4XSxbJ2MnLDAuMDYsMC43MiwwLjAwLDEuODMsLTAuMjEsMi43OV0sWydjJywtMC4xOCwxLjAyLC0wLjYzLDIuMzQsLTEuMDIsMy4wOV0sWydjJywtMC4xNSwwLjMzLC0wLjQ4LDAuNDUsLTAuNzgsMC4zMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNywtMC4xOCwtMC4zMywtMC4zM10sWydjJywtMC4wOSwtMC4xOCwtMC4wNiwtMC4zMCwwLjAzLC0wLjU0XSxbJ2MnLDAuNzUsLTEuNTAsMS4yMywtMy40NSwxLjE3LC00Ljg5XSxbJ2MnLC0wLjA2LC0xLjAyLC0wLjQyLC0yLjAxLC0xLjE3LC0zLjE1XSxbJ2MnLC0wLjQ4LC0wLjcyLC0xLjAyLC0xLjM1LC0xLjg5LC0yLjIyXSxbJ2MnLC0wLjU3LC0wLjU3LC0xLjU2LC0xLjUwLC0xLjkyLC0xLjc3XSxbJ2wnLC0wLjEyLC0wLjA5XSxbJ2wnLDAuMDAsMS42OF0sWydsJywwLjAwLDEuNjhdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLDAuMDAsLTE1LjAwXSxbJ3onXSxbJ20nLDAuOTMsLTguMDddLFsnYycsLTAuMjcsLTAuMzAsLTAuNDgsLTAuNTQsLTAuNTEsLTAuNTRdLFsnYycsMC4wMCwwLjAwLDAuMDAsMC42OSwwLjAzLDEuMDJdLFsnYycsMC4xNSwxLjQ3LDAuNzUsMi45NCwyLjA0LDQuODNdLFsnbCcsMS4wOCwxLjUzXSxbJ2MnLDAuMzksMC41NywwLjg0LDEuMjAsMC45OSwxLjQ0XSxbJ2MnLDAuMTUsMC4yNCwwLjMwLDAuNDUsMC4zMCwwLjQ1XSxbJ2MnLDAuMDAsMC4wMCwwLjAzLC0wLjA5LDAuMDYsLTAuMjFdLFsnYycsMC4zNiwtMS41OSwtMC4xNSwtMy4zMywtMS40NywtNS40MF0sWydjJywtMC42MywtMC45MywtMS4zNSwtMS44MywtMi41MiwtMy4xMl0sWyd6J10sWydtJywwLjA2LDYuNzJdLFsnYycsLTAuMjQsLTAuMjEsLTAuNDgsLTAuNDIsLTAuNTEsLTAuNDVdLFsnbCcsLTAuMDYsLTAuMDZdLFsnbCcsMC4wMCwwLjMzXSxbJ2MnLDAuMDAsMS4yMCwwLjMwLDIuMzQsMC45MywzLjYwXSxbJ2MnLDAuNDUsMC45MCwwLjk2LDEuNjgsMi4yNSwzLjUxXSxbJ2MnLDAuMzksMC41NCwwLjg0LDEuMTcsMS4wMiwxLjQ0XSxbJ2MnLDAuMjEsMC4zMywwLjMzLDAuNTEsMC4zMywwLjQ4XSxbJ2MnLDAuMDYsLTAuMDksMC4yMSwtMC42MywwLjMwLC0wLjk5XSxbJ2MnLDAuMDYsLTAuMzMsMC4wNiwtMC40NSwwLjA2LC0wLjk2XSxbJ2MnLDAuMDAsLTAuNjAsLTAuMDMsLTAuODQsLTAuMTgsLTEuMzVdLFsnYycsLTAuMzAsLTEuMDgsLTEuMDIsLTIuMjgsLTIuMTMsLTMuNTddLFsnYycsLTAuMzksLTAuNDUsLTEuNDQsLTEuNDcsLTIuMDEsLTEuOThdLFsneiddLFsnbScsMC4wMCw2LjcyXSxbJ2MnLC0wLjI0LC0wLjIxLC0wLjQ4LC0wLjM5LC0wLjUxLC0wLjQyXSxbJ2wnLC0wLjA2LC0wLjA2XSxbJ2wnLDAuMDAsMC4zM10sWydjJywwLjAwLDEuNDEsMC40NSwyLjgyLDEuMzgsNC4zNV0sWydjJywwLjQyLDAuNzIsMC43MiwxLjE0LDEuODYsMi43M10sWydjJywwLjM2LDAuNDUsMC43NSwwLjk5LDAuODcsMS4yMF0sWydjJywwLjE1LDAuMjEsMC4zMCwwLjM2LDAuMzAsMC4zNl0sWydjJywwLjA2LDAuMDAsMC4zMCwtMC40OCwwLjM5LC0wLjc1XSxbJ2MnLDAuMDksLTAuMzYsMC4xMiwtMC42MywwLjEyLC0xLjA1XSxbJ2MnLC0wLjA2LC0xLjA1LC0wLjQ1LC0yLjA0LC0xLjIwLC0zLjE4XSxbJ2MnLC0wLjU3LC0wLjg3LC0xLjExLC0xLjUzLC0yLjA3LC0yLjQ5XSxbJ2MnLC0wLjM2LC0wLjMzLC0wLjg0LC0wLjc4LC0xLjA4LC0xLjAyXSxbJ3onXV0sdzo2LjY4MixoOjM5LjY5NH0sXG5cdFx0J2ZsYWdzLmQ4dGgnOntkOltbJ00nLDUuNjcsLTIxLjYzXSxbJ2MnLDAuMjQsLTAuMTIsMC41NCwtMC4wNiwwLjY5LDAuMTVdLFsnYycsMC4wNiwwLjA2LDAuMjEsMC4zNiwwLjM5LDAuNjZdLFsnYycsMC44NCwxLjc3LDEuMjYsMy4zNiwxLjMyLDUuMTBdLFsnYycsMC4wMywxLjI5LC0wLjIxLDIuMzcsLTAuODEsMy42M10sWydjJywtMC42MCwxLjIzLC0xLjI2LDIuMTMsLTMuMjEsNC4zOF0sWydjJywtMS4zNSwxLjUzLC0xLjg2LDIuMTksLTIuNDAsMi45N10sWydjJywtMC42MywwLjkzLC0xLjExLDEuOTIsLTEuMzgsMi43OV0sWydjJywtMC4xNSwwLjU0LC0wLjI3LDEuMzUsLTAuMjcsMS44MF0sWydsJywwLjAwLDAuMTVdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLDAuMDAsLTMuNzVdLFsnbCcsMC4wMCwtMy43NV0sWydsJywwLjIxLDAuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuNDgsLTAuMzBdLFsnYycsMS44MywtMS4xMSwzLjEyLC0yLjEwLDQuMTcsLTMuMTJdLFsnYycsMC43OCwtMC44MSwxLjMyLC0xLjUzLDEuNzEsLTIuMzFdLFsnYycsMC40NSwtMC45MywwLjYwLC0xLjc0LDAuNTEsLTIuODhdLFsnYycsLTAuMTIsLTEuNTYsLTAuNjMsLTMuMTgsLTEuNDcsLTQuNjhdLFsnYycsLTAuMTIsLTAuMjEsLTAuMTUsLTAuMzMsLTAuMDYsLTAuNTFdLFsnYycsMC4wNiwtMC4xNSwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsneiddXSx3OjguNDkyLGg6MjEuNjkxfSxcblx0XHQnZmxhZ3MudWdyYWNlJzp7ZDpbWydNJyw2LjAzLDYuOTNdLFsnYycsMC4xNSwtMC4wOSwwLjMzLC0wLjA2LDAuNTEsMC4wMF0sWydjJywwLjE1LDAuMDksMC4yMSwwLjE1LDAuMzAsMC4zM10sWydjJywwLjA5LDAuMTgsMC4wNiwwLjM5LC0wLjAzLDAuNTRdLFsnYycsLTAuMDYsMC4xNSwtMTAuODksOC44OCwtMTEuMDcsOC45N10sWydjJywtMC4xNSwwLjA5LC0wLjMzLDAuMDYsLTAuNDgsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydjJywtMC4wOSwtMC4xOCwtMC4wNiwtMC4zOSwwLjAzLC0wLjU0XSxbJ2MnLDAuMDYsLTAuMTUsMTAuODksLTguODgsMTEuMDcsLTguOTddLFsneiddXSx3OjEyLjAxOSxoOjkuOTU0fSxcblx0XHQnZmxhZ3MuZGdyYWNlJzp7ZDpbWydNJywtNi4wNiwtMTUuOTNdLFsnYycsMC4xOCwtMC4wOSwwLjMzLC0wLjEyLDAuNDgsLTAuMDZdLFsnYycsMC4xOCwwLjA5LDE0LjAxLDguMDQsMTQuMTAsOC4xMF0sWydjJywwLjEyLDAuMTIsMC4xOCwwLjMzLDAuMTgsMC41MV0sWydjJywtMC4wMywwLjIxLC0wLjE1LDAuMzksLTAuMzYsMC40OF0sWydjJywtMC4xOCwwLjA5LC0wLjMzLDAuMTIsLTAuNDgsMC4wNl0sWydjJywtMC4xOCwtMC4wOSwtMTQuMDEsLTguMDQsLTE0LjEwLC04LjEwXSxbJ2MnLC0wLjEyLC0wLjEyLC0wLjE4LC0wLjMzLC0wLjE4LC0wLjUxXSxbJ2MnLDAuMDMsLTAuMjEsMC4xNSwtMC4zOSwwLjM2LC0wLjQ4XSxbJ3onXV0sdzoxNS4xMixoOjkuMjEyfSxcblx0XHQnZmxhZ3MuZDE2dGgnOntkOltbJ00nLDYuODQsLTIyLjUzXSxbJ2MnLDAuMjcsLTAuMTIsMC41NywtMC4wNiwwLjcyLDAuMTVdLFsnYycsMC4xNSwwLjE1LDAuMzMsMC44NywwLjQ1LDEuNTZdLFsnYycsMC4wNiwwLjMzLDAuMDYsMS4zNSwwLjAwLDEuNjVdLFsnYycsLTAuMDYsMC4zMywtMC4xNSwwLjc4LC0wLjI3LDEuMTFdLFsnYycsLTAuMTIsMC4zMywtMC40NSwwLjk2LC0wLjY2LDEuMzJdLFsnbCcsLTAuMTgsMC4yN10sWydsJywwLjA5LDAuMThdLFsnYycsMC40OCwxLjAyLDAuNzIsMi4yNSwwLjY5LDMuMzBdLFsnYycsLTAuMDYsMS4yMywtMC40MiwyLjI4LC0xLjI2LDMuNDVdLFsnYycsLTAuNTcsMC44NywtMC45OSwxLjMyLC0zLjAwLDMuMzldLFsnYycsLTEuNTYsMS41NiwtMi4yMiwyLjQwLC0yLjc2LDMuNDVdLFsnYycsLTAuNDIsMC44NCwtMC42NiwxLjgwLC0wLjY2LDIuNTVdLFsnbCcsMC4wMCwwLjE1XSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsLTAuMjEsMC4wMF0sWydsJywwLjAwLC03LjUwXSxbJ2wnLDAuMDAsLTcuNTBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDEuMTRdLFsnbCcsMC4wMCwxLjExXSxbJ2wnLDAuMjcsLTAuMTVdLFsnYycsMS4xMSwtMC41NywxLjc3LC0wLjk5LDIuNTIsLTEuNDddLFsnYycsMi4zNywtMS41NiwzLjY5LC0zLjE1LDQuMDUsLTQuODNdLFsnYycsMC4wMywtMC4xOCwwLjAzLC0wLjM5LDAuMDMsLTAuNzhdLFsnYycsMC4wMCwtMC42MCwtMC4wMywtMC45MywtMC4yNCwtMS41MF0sWydjJywtMC4wNiwtMC4xOCwtMC4xMiwtMC4zOSwtMC4xNSwtMC40NV0sWydjJywtMC4wMywtMC4yNCwwLjEyLC0wLjQ4LDAuMzYsLTAuNjBdLFsneiddLFsnbScsLTAuNjMsNy41MF0sWydjJywtMC4wNiwtMC4xOCwtMC4xNSwtMC4zNiwtMC4xNSwtMC4zNl0sWydjJywtMC4wMywwLjAwLC0wLjAzLDAuMDMsLTAuMDYsMC4wNl0sWydjJywtMC4wNiwwLjEyLC0wLjk2LDEuMDIsLTEuOTUsMS45OF0sWydjJywtMC42MywwLjU3LC0xLjI2LDEuMTcsLTEuNDQsMS4zNV0sWydjJywtMS41MywxLjYyLC0yLjI4LDIuODUsLTIuNTUsNC4zMl0sWydjJywtMC4wMywwLjE4LC0wLjAzLDAuNTQsLTAuMDYsMC45OV0sWydsJywwLjAwLDAuNjldLFsnbCcsMC4xOCwtMC4wOV0sWydjJywwLjkzLC0wLjU0LDIuMTAsLTEuMjksMi44MiwtMS44M10sWydjJywwLjY5LC0wLjUxLDEuMDIsLTAuODEsMS41MywtMS4yOV0sWydjJywxLjg2LC0xLjg5LDIuMzcsLTMuNjYsMS42OCwtNS44Ml0sWyd6J11dLHc6OC40NzUsaDoyMi41OTF9LFxuXHRcdCdmbGFncy5kMzJuZCc6e2Q6W1snTScsNi44NCwtMjkuMTNdLFsnYycsMC4yNywtMC4xMiwwLjU3LC0wLjA2LDAuNzIsMC4xNV0sWydjJywwLjEyLDAuMTIsMC4yNywwLjYzLDAuMzYsMS4xMV0sWydjJywwLjMzLDEuNTksMC4wNiwzLjA2LC0wLjgxLDQuNDddLFsnbCcsLTAuMTgsMC4yN10sWydsJywwLjA5LDAuMTVdLFsnYycsMC4xMiwwLjI0LDAuMzMsMC42OSwwLjQ1LDEuMDVdLFsnYycsMC42MywxLjgzLDAuNDUsMy41NywtMC41Nyw1LjIyXSxbJ2wnLC0wLjE4LDAuMzBdLFsnbCcsMC4xNSwwLjI3XSxbJ2MnLDAuNDIsMC44NywwLjYwLDEuNzEsMC41NywyLjYxXSxbJ2MnLC0wLjA2LDEuMjksLTAuNDgsMi40NiwtMS4zNSwzLjc4XSxbJ2MnLC0wLjU0LDAuODEsLTAuOTMsMS4yOSwtMi40NiwzLjAwXSxbJ2MnLC0wLjUxLDAuNTQsLTEuMDUsMS4xNywtMS4yNiwxLjQxXSxbJ2MnLC0xLjU2LDEuODYsLTIuMjUsMy4zNiwtMi4zNyw1LjAxXSxbJ2wnLDAuMDAsMC4zM10sWydsJywtMC4yMSwwLjAwXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsMC4wMCwtMTEuMjVdLFsnbCcsMC4wMCwtMTEuMjVdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDEuMzVdLFsnbCcsMC4wMywxLjM1XSxbJ2wnLDAuNzgsLTAuMzldLFsnYycsMS4zOCwtMC42OSwyLjM0LC0xLjI2LDMuMjQsLTEuOTJdLFsnYycsMS4zOCwtMS4wMiwyLjI4LC0yLjEzLDIuNjQsLTMuMjFdLFsnYycsMC4xNSwtMC40OCwwLjE4LC0wLjcyLDAuMTgsLTEuMjldLFsnYycsMC4wMCwtMC41NywtMC4wNiwtMC45MCwtMC4yNCwtMS40N10sWydjJywtMC4wNiwtMC4xOCwtMC4xMiwtMC4zOSwtMC4xNSwtMC40NV0sWydjJywtMC4wMywtMC4yNCwwLjEyLC0wLjQ4LDAuMzYsLTAuNjBdLFsneiddLFsnbScsLTAuNjMsNy4yMF0sWydjJywtMC4wOSwtMC4xOCwtMC4xMiwtMC4yMSwtMC4xMiwtMC4xNV0sWydjJywtMC4wMywwLjA5LC0xLjAyLDEuMDgsLTIuMDQsMi4wNF0sWydjJywtMS4xNywxLjA4LC0xLjY1LDEuNTYsLTIuMDcsMi4wNF0sWydjJywtMC44NCwwLjk2LC0xLjM4LDEuODYsLTEuNjgsMi43Nl0sWydjJywtMC4yMSwwLjU3LC0wLjI3LDAuOTksLTAuMzAsMS42NV0sWydsJywwLjAwLDAuNTRdLFsnbCcsMC42NiwtMC4zM10sWydjJywzLjU3LC0xLjg2LDUuNDksLTMuNjksNS45NCwtNS43MF0sWydjJywwLjA2LC0wLjM5LDAuMDYsLTEuMjAsLTAuMDMsLTEuNjVdLFsnYycsLTAuMDYsLTAuMzksLTAuMjQsLTAuOTAsLTAuMzYsLTEuMjBdLFsneiddLFsnbScsLTAuMDYsNy4yMF0sWydjJywtMC4wNiwtMC4xNSwtMC4xMiwtMC4zMywtMC4xNSwtMC40NV0sWydsJywtMC4wNiwtMC4xOF0sWydsJywtMC4xOCwwLjIxXSxbJ2wnLC0xLjgzLDEuODNdLFsnYycsLTAuODcsMC45MCwtMS43NywxLjgwLC0xLjk1LDIuMDFdLFsnYycsLTEuMDgsMS4yOSwtMS42MiwyLjMxLC0xLjg5LDMuNTFdLFsnYycsLTAuMDYsMC4zMCwtMC4wNiwwLjUxLC0wLjA5LDAuOTNdLFsnbCcsMC4wMCwwLjU3XSxbJ2wnLDAuMDksLTAuMDZdLFsnYycsMC43NSwtMC40NSwxLjg5LC0xLjI2LDIuNTIsLTEuNzRdLFsnYycsMC44MSwtMC42NiwxLjc0LC0xLjUzLDIuMjIsLTIuMTZdLFsnYycsMS4yNiwtMS41MywxLjY4LC0zLjA2LDEuMzIsLTQuNDddLFsneiddXSx3OjguMzg1LGg6MjkuMTkxfSxcblx0XHQnZmxhZ3MuZDY0dGgnOntkOltbJ00nLDcuMDgsLTMyLjg4XSxbJ2MnLDAuMzAsLTAuMTIsMC42NiwtMC4wMywwLjc4LDAuMjRdLFsnYycsMC4xOCwwLjMzLDAuMjcsMi4xMCwwLjE1LDIuNjRdLFsnYycsLTAuMDksMC4zOSwtMC4yMSwwLjc4LC0wLjM5LDEuMDhdLFsnbCcsLTAuMTUsMC4zMF0sWydsJywwLjA5LDAuMjddLFsnYycsMC4wMywwLjEyLDAuMDksMC40NSwwLjEyLDAuNjldLFsnYycsMC4yNywxLjQ0LDAuMTgsMi41NSwtMC4zMCwzLjYwXSxbJ2wnLC0wLjEyLDAuMzNdLFsnbCcsMC4wNiwwLjQyXSxbJ2MnLDAuMjcsMS4zNSwwLjMzLDIuODIsMC4yMSwzLjYzXSxbJ2MnLC0wLjEyLDAuNjAsLTAuMzAsMS4yMywtMC41NywxLjgwXSxbJ2wnLC0wLjE1LDAuMjddLFsnbCcsMC4wMywwLjQyXSxbJ2MnLDAuMDYsMS4wMiwwLjA2LDIuNzAsMC4wMywzLjA2XSxbJ2MnLC0wLjE1LDEuNDcsLTAuNjYsMi43NiwtMS43NCw0LjQxXSxbJ2MnLC0wLjQ1LDAuNjksLTAuNzUsMS4xMSwtMS43NCwyLjM3XSxbJ2MnLC0xLjA1LDEuMzgsLTEuNTAsMS45OCwtMS45NSwyLjczXSxbJ2MnLC0wLjkzLDEuNTAsLTEuMzgsMi44MiwtMS40NCw0LjIwXSxbJ2wnLDAuMDAsMC40Ml0sWydsJywtMC4yMSwwLjAwXSxbJ2wnLC0wLjIxLDAuMDBdLFsnbCcsMC4wMCwtMTUuMDBdLFsnbCcsMC4wMCwtMTUuMDBdLFsnbCcsMC4yMSwwLjAwXSxbJ2wnLDAuMjEsMC4wMF0sWydsJywwLjAwLDEuODZdLFsnbCcsMC4wMCwxLjg5XSxbJ2MnLDAuMDAsMC4wMCwwLjIxLC0wLjAzLDAuNDUsLTAuMDldLFsnYycsMi4yMiwtMC4zOSw0LjA4LC0xLjExLDUuMTksLTIuMDFdLFsnYycsMC42MywtMC41NCwxLjAyLC0xLjE0LDEuMjAsLTEuODBdLFsnYycsMC4wNiwtMC4zMCwwLjA2LC0xLjE0LC0wLjAzLC0xLjY1XSxbJ2MnLC0wLjAzLC0wLjE4LC0wLjA2LC0wLjM5LC0wLjA5LC0wLjQ4XSxbJ2MnLC0wLjAzLC0wLjI0LDAuMTIsLTAuNDgsMC4zNiwtMC42MF0sWyd6J10sWydtJywtMC40NSw2LjE1XSxbJ2MnLC0wLjAzLC0wLjE4LC0wLjA2LC0wLjQyLC0wLjA2LC0wLjU0XSxbJ2wnLC0wLjAzLC0wLjE4XSxbJ2wnLC0wLjMzLDAuMzBdLFsnYycsLTAuNDIsMC4zNiwtMC44NywwLjcyLC0xLjY4LDEuMjldLFsnYycsLTEuOTgsMS4zOCwtMi4yNSwxLjU5LC0yLjg1LDIuMTZdLFsnYycsLTAuNzUsMC42OSwtMS4yMywxLjQ0LC0xLjQ3LDIuMTldLFsnYycsLTAuMTUsMC40NSwtMC4xOCwwLjYzLC0wLjIxLDEuMzVdLFsnbCcsMC4wMCwwLjY2XSxbJ2wnLDAuMzksLTAuMThdLFsnYycsMS44MywtMC45MCwzLjQ1LC0xLjk1LDQuNDcsLTIuOTFdLFsnYycsMC45MywtMC45MCwxLjUzLC0xLjgzLDEuNzQsLTIuODJdLFsnYycsMC4wNiwtMC4zMywwLjA2LC0wLjg3LDAuMDMsLTEuMzJdLFsneiddLFsnbScsLTAuMjcsNC44Nl0sWydjJywtMC4wMywtMC4yMSwtMC4wNiwtMC4zNiwtMC4wNiwtMC4zNl0sWydjJywwLjAwLC0wLjAzLC0wLjEyLDAuMDksLTAuMjQsMC4yNF0sWydjJywtMC4zOSwwLjQ4LC0wLjk5LDEuMDgsLTIuMTYsMi4xOV0sWydjJywtMS40NywxLjM4LC0xLjkyLDEuODMsLTIuNDYsMi40OV0sWydjJywtMC42NiwwLjg3LC0xLjA4LDEuNzQsLTEuMjksMi41OF0sWydjJywtMC4wOSwwLjQyLC0wLjE1LDAuODcsLTAuMTUsMS40NF0sWydsJywwLjAwLDAuNTRdLFsnbCcsMC40OCwtMC4zM10sWydjJywxLjUwLC0xLjAyLDIuNTgsLTEuODksMy41MSwtMi44Ml0sWydjJywxLjQ3LC0xLjQ3LDIuMjUsLTIuODUsMi40MCwtNC4yNl0sWydjJywwLjAzLC0wLjM5LDAuMDMsLTEuMTcsLTAuMDMsLTEuNzFdLFsneiddLFsnbScsLTAuNjYsNy42OF0sWydjJywwLjAzLC0wLjE1LDAuMDMsLTAuNjAsMC4wMywtMC45OV0sWydsJywwLjAwLC0wLjcyXSxbJ2wnLC0wLjI3LDAuMzNdLFsnbCcsLTEuNzQsMS45OF0sWydjJywtMS43NywxLjkyLC0yLjQzLDIuNzYsLTIuOTcsMy45MF0sWydjJywtMC41MSwxLjAyLC0wLjcyLDEuNzcsLTAuNzUsMi45MV0sWydjJywwLjAwLDAuNjMsMC4wMCwwLjYzLDAuMDYsMC42MF0sWydjJywwLjAzLC0wLjAzLDAuMzAsLTAuMjcsMC42MywtMC41NF0sWydjJywwLjY2LC0wLjYwLDEuODYsLTEuODAsMi4zMSwtMi4zMV0sWydjJywxLjY1LC0xLjg5LDIuNTIsLTMuNTQsMi43MCwtNS4xNl0sWyd6J11dLHc6OC40ODUsaDozMi45MzJ9LFxuXHRcdCdjbGVmcy5DJzp7ZDpbWydNJywwLjA2LC0xNC45NF0sWydsJywwLjA5LC0wLjA2XSxbJ2wnLDEuOTIsMC4wMF0sWydsJywxLjkyLDAuMDBdLFsnbCcsMC4wOSwwLjA2XSxbJ2wnLDAuMDYsMC4wOV0sWydsJywwLjAwLDE0Ljg1XSxbJ2wnLDAuMDAsMTQuODJdLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC0xLjkyLDAuMDBdLFsnbCcsLTEuOTIsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC0xNC44Ml0sWydsJywwLjAwLC0xNC44NV0sWyd6J10sWydtJyw1LjM3LDAuMDBdLFsnYycsMC4wOSwtMC4wNiwwLjA5LC0wLjA2LDAuNTcsLTAuMDZdLFsnYycsMC40NSwwLjAwLDAuNDUsMC4wMCwwLjU0LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNy4xNF0sWydsJywwLjAwLDcuMTFdLFsnbCcsMC4wOSwtMC4wNl0sWydjJywwLjE4LC0wLjE4LDAuNzIsLTAuODQsMC45NiwtMS4yMF0sWydjJywwLjMwLC0wLjQ1LDAuNjYsLTEuMTcsMC44NCwtMS42NV0sWydjJywwLjM2LC0wLjkwLDAuNTcsLTEuODMsMC42MCwtMi43OV0sWydjJywwLjAzLC0wLjQ4LDAuMDMsLTAuNTQsMC4wOSwtMC42M10sWydjJywwLjEyLC0wLjE4LDAuMzYsLTAuMjEsMC41NCwtMC4xMl0sWydjJywwLjE4LDAuMDksMC4yMSwwLjE1LDAuMjQsMC42Nl0sWydjJywwLjA2LDAuODcsMC4yMSwxLjU2LDAuNTcsMi4yMl0sWydjJywwLjUxLDEuMDIsMS4yNiwxLjY4LDIuMjIsMS45Ml0sWydjJywwLjIxLDAuMDYsMC4zMywwLjA2LDAuNzgsMC4wNl0sWydjJywwLjQ1LDAuMDAsMC41NywwLjAwLDAuODQsLTAuMDZdLFsnYycsMC40NSwtMC4xMiwwLjgxLC0wLjMzLDEuMDgsLTAuNjBdLFsnYycsMC41NywtMC41NywwLjg3LC0xLjQxLDAuOTksLTIuODhdLFsnYycsMC4wNiwtMC41NCwwLjA2LC0zLjAwLDAuMDAsLTMuNTddLFsnYycsLTAuMjEsLTIuNTgsLTAuODQsLTMuODcsLTIuMTYsLTQuNTBdLFsnYycsLTAuNDgsLTAuMjEsLTEuMTcsLTAuMzYsLTEuNzcsLTAuMzZdLFsnYycsLTAuNjksMC4wMCwtMS4yOSwwLjI3LC0xLjUwLDAuNzJdLFsnYycsLTAuMDYsMC4xNSwtMC4wNiwwLjIxLC0wLjA2LDAuNDJdLFsnYycsMC4wMCwwLjI0LDAuMDAsMC4zMCwwLjA2LDAuNDVdLFsnYycsMC4xMiwwLjI0LDAuMjQsMC4zOSwwLjYzLDAuNjZdLFsnYycsMC40MiwwLjMwLDAuNTcsMC40OCwwLjY5LDAuNzJdLFsnYycsMC4wNiwwLjE1LDAuMDYsMC4yMSwwLjA2LDAuNDhdLFsnYycsMC4wMCwwLjM5LC0wLjAzLDAuNjMsLTAuMjEsMC45Nl0sWydjJywtMC4zMCwwLjYwLC0wLjg3LDEuMDgsLTEuNTAsMS4yNl0sWydjJywtMC4yNywwLjA2LC0wLjg3LDAuMDYsLTEuMTQsMC4wMF0sWydjJywtMC43OCwtMC4yNCwtMS40NCwtMC44NywtMS42NSwtMS42OF0sWydjJywtMC4xMiwtMC40MiwtMC4wOSwtMS4xNywwLjA5LC0xLjcxXSxbJ2MnLDAuNTEsLTEuNjUsMS45OCwtMi44MiwzLjgxLC0zLjA5XSxbJ2MnLDAuODQsLTAuMDksMi40NiwwLjAzLDMuNTEsMC4yN10sWydjJywyLjIyLDAuNTcsMy42OSwxLjgwLDQuNDQsMy43NV0sWydjJywwLjM2LDAuOTMsMC41NywyLjEzLDAuNTcsMy4zNl0sWydjJywwLjAwLDEuNDQsLTAuNDgsMi43MywtMS4zOCwzLjgxXSxbJ2MnLC0xLjI2LDEuNTAsLTMuMjcsMi40MywtNS4yOCwyLjQzXSxbJ2MnLC0wLjQ4LDAuMDAsLTAuNTEsMC4wMCwtMC43NSwtMC4wOV0sWydjJywtMC4xNSwtMC4wMywtMC40OCwtMC4yMSwtMC43OCwtMC4zNl0sWydjJywtMC42OSwtMC4zNiwtMC44NywtMC40MiwtMS4yNiwtMC40Ml0sWydjJywtMC4yNywwLjAwLC0wLjMwLDAuMDAsLTAuNTEsMC4wOV0sWydjJywtMC41NywwLjMwLC0wLjgxLDAuOTAsLTAuODEsMi4xMF0sWydjJywwLjAwLDEuMjMsMC4yNCwxLjgzLDAuODEsMi4xM10sWydjJywwLjIxLDAuMDksMC4yNCwwLjA5LDAuNTEsMC4wOV0sWydjJywwLjM5LDAuMDAsMC41NywtMC4wNiwxLjI2LC0wLjQyXSxbJ2MnLDAuMzAsLTAuMTUsMC42MywtMC4zMywwLjc4LC0wLjM2XSxbJ2MnLDAuMjQsLTAuMDksMC4yNywtMC4wOSwwLjc1LC0wLjA5XSxbJ2MnLDIuMDEsMC4wMCw0LjAyLDAuOTMsNS4yOCwyLjQwXSxbJ2MnLDAuOTAsMS4xMSwxLjM4LDIuNDAsMS4zOCwzLjg0XSxbJ2MnLDAuMDAsMS41MCwtMC4zMCwyLjg4LC0wLjg0LDMuOTZdLFsnYycsLTAuNzgsMS41OSwtMi4xOSwyLjY0LC00LjE3LDMuMTVdLFsnYycsLTEuMDUsMC4yNCwtMi42NywwLjM2LC0zLjUxLDAuMjddLFsnYycsLTEuODMsLTAuMjcsLTMuMzAsLTEuNDQsLTMuODEsLTMuMDldLFsnYycsLTAuMTgsLTAuNTQsLTAuMjEsLTEuMjksLTAuMDksLTEuNzRdLFsnYycsMC4xNSwtMC42MCwwLjYzLC0xLjIwLDEuMjMsLTEuNDddLFsnYycsMC4zNiwtMC4xOCwwLjU3LC0wLjIxLDAuOTksLTAuMjFdLFsnYycsMC40MiwwLjAwLDAuNjMsMC4wMywxLjAyLDAuMjFdLFsnYycsMC40MiwwLjIxLDAuODQsMC42MywxLjA1LDEuMDVdLFsnYycsMC4xOCwwLjM2LDAuMjEsMC42MCwwLjIxLDAuOTZdLFsnYycsMC4wMCwwLjMwLDAuMDAsMC4zNiwtMC4wNiwwLjUxXSxbJ2MnLC0wLjEyLDAuMjQsLTAuMjcsMC40MiwtMC42OSwwLjcyXSxbJ2MnLC0wLjU3LDAuNDIsLTAuNjksMC42MywtMC42OSwxLjA4XSxbJ2MnLDAuMDAsMC4yNCwwLjAwLDAuMzAsMC4wNiwwLjQ1XSxbJ2MnLDAuMTIsMC4yMSwwLjMwLDAuMzksMC41NywwLjU0XSxbJ2MnLDAuNDIsMC4xOCwwLjg3LDAuMjEsMS41MywwLjE1XSxbJ2MnLDEuMDgsLTAuMTUsMS44MCwtMC41NywyLjM0LC0xLjMyXSxbJ2MnLDAuNTQsLTAuNzUsMC44NCwtMS44MywwLjk5LC0zLjUxXSxbJ2MnLDAuMDYsLTAuNTcsMC4wNiwtMy4wMywwLjAwLC0zLjU3XSxbJ2MnLC0wLjEyLC0xLjQ3LC0wLjQyLC0yLjMxLC0wLjk5LC0yLjg4XSxbJ2MnLC0wLjI3LC0wLjI3LC0wLjYzLC0wLjQ4LC0xLjA4LC0wLjYwXSxbJ2MnLC0wLjI3LC0wLjA2LC0wLjM5LC0wLjA2LC0wLjg0LC0wLjA2XSxbJ2MnLC0wLjQ1LDAuMDAsLTAuNTcsMC4wMCwtMC43OCwwLjA2XSxbJ2MnLC0xLjE0LDAuMjcsLTIuMDEsMS4xNywtMi40NiwyLjQ5XSxbJ2MnLC0wLjIxLDAuNTcsLTAuMzAsMC45OSwtMC4zMywxLjY1XSxbJ2MnLC0wLjAzLDAuNTEsLTAuMDYsMC41NywtMC4yNCwwLjY2XSxbJ2MnLC0wLjEyLDAuMDYsLTAuMjcsMC4wNiwtMC4zOSwwLjAwXSxbJ2MnLC0wLjIxLC0wLjA5LC0wLjIxLC0wLjE1LC0wLjI0LC0wLjc1XSxbJ2MnLC0wLjA5LC0xLjkyLC0wLjc4LC0zLjcyLC0yLjAxLC01LjE5XSxbJ2MnLC0wLjE4LC0wLjIxLC0wLjM2LC0wLjQyLC0wLjM5LC0wLjQ1XSxbJ2wnLC0wLjA5LC0wLjA2XSxbJ2wnLDAuMDAsNy4xMV0sWydsJywwLjAwLDcuMTRdLFsnbCcsLTAuMDYsMC4wOV0sWydjJywtMC4wOSwwLjA2LC0wLjA5LDAuMDYsLTAuNTQsMC4wNl0sWydjJywtMC40OCwwLjAwLC0wLjQ4LDAuMDAsLTAuNTcsLTAuMDZdLFsnbCcsLTAuMDYsLTAuMDldLFsnbCcsMC4wMCwtMTQuODJdLFsnbCcsMC4wMCwtMTQuODVdLFsneiddXSx3OjIwLjMxLGg6MjkuOTd9LFxuXHRcdCdjbGVmcy5GJzp7ZDpbWydNJyw2LjMwLC03LjgwXSxbJ2MnLDAuMzYsLTAuMDMsMS42NSwwLjAwLDIuMTMsMC4wM10sWydjJywzLjYwLDAuNDIsNi4wMywyLjEwLDYuOTMsNC44Nl0sWydjJywwLjI3LDAuODQsMC4zNiwxLjUwLDAuMzYsMi41OF0sWydjJywwLjAwLDAuOTAsLTAuMDMsMS4zNSwtMC4xOCwyLjE2XSxbJ2MnLC0wLjc4LDMuNzgsLTMuNTQsNy4wOCwtOC4zNyw5Ljk2XSxbJ2MnLC0xLjc0LDEuMDUsLTMuODcsMi4xMywtNi4xOCwzLjEyXSxbJ2MnLC0wLjM5LDAuMTgsLTAuNzUsMC4zMywtMC44MSwwLjM2XSxbJ2MnLC0wLjA2LDAuMDMsLTAuMTUsMC4wNiwtMC4xOCwwLjA2XSxbJ2MnLC0wLjE1LDAuMDAsLTAuMzMsLTAuMTgsLTAuMzMsLTAuMzNdLFsnYycsMC4wMCwtMC4xNSwwLjA2LC0wLjIxLDAuNTEsLTAuNDhdLFsnYycsMy4wMCwtMS43Nyw1LjEzLC0zLjIxLDYuODQsLTQuNzRdLFsnYycsMC41MSwtMC40NSwxLjU5LC0xLjUwLDEuOTUsLTEuOTVdLFsnYycsMS44OSwtMi4xOSwyLjg4LC00LjMyLDMuMTUsLTYuNzhdLFsnYycsMC4wNiwtMC40MiwwLjA2LC0xLjc3LDAuMDAsLTIuMTldLFsnYycsLTAuMjQsLTIuMDEsLTAuOTMsLTMuNjMsLTIuMDQsLTQuNzFdLFsnYycsLTAuNjMsLTAuNjMsLTEuMjksLTEuMDIsLTIuMDcsLTEuMjBdLFsnYycsLTEuNjIsLTAuMzksLTMuMzYsMC4xNSwtNC41NiwxLjQ0XSxbJ2MnLC0wLjU0LDAuNjAsLTEuMDUsMS40NywtMS4zMiwyLjIyXSxbJ2wnLC0wLjA5LDAuMjFdLFsnbCcsMC4yNCwtMC4xMl0sWydjJywwLjM5LC0wLjIxLDAuNjMsLTAuMjQsMS4xMSwtMC4yNF0sWydjJywwLjMwLDAuMDAsMC40NSwwLjAwLDAuNjYsMC4wNl0sWydjJywxLjkyLDAuNDgsMi44NSwyLjU1LDEuOTUsNC4zOF0sWydjJywtMC40NSwwLjk5LC0xLjQxLDEuNjIsLTIuNDYsMS43MV0sWydjJywtMS40NywwLjA5LC0yLjkxLC0wLjg3LC0zLjM5LC0yLjI1XSxbJ2MnLC0wLjE4LC0wLjU3LC0wLjIxLC0xLjMyLC0wLjAzLC0yLjI4XSxbJ2MnLDAuMzksLTIuMjUsMS44MywtNC4yMCwzLjgxLC01LjE5XSxbJ2MnLDAuNjksLTAuMzYsMS41OSwtMC42MCwyLjM3LC0wLjY5XSxbJ3onXSxbJ20nLDExLjU4LDIuNTJdLFsnYycsMC44NCwtMC4yMSwxLjcxLDAuMzAsMS44OSwxLjE0XSxbJ2MnLDAuMzAsMS4xNywtMC43MiwyLjE5LC0xLjg5LDEuODldLFsnYycsLTAuOTksLTAuMjEsLTEuNTAsLTEuMzIsLTEuMDIsLTIuMjVdLFsnYycsMC4xOCwtMC4zOSwwLjYwLC0wLjY5LDEuMDIsLTAuNzhdLFsneiddLFsnbScsMC4wMCw3LjUwXSxbJ2MnLDAuODQsLTAuMjEsMS43MSwwLjMwLDEuODksMS4xNF0sWydjJywwLjIxLDAuODcsLTAuMzAsMS43MSwtMS4xNCwxLjg5XSxbJ2MnLC0wLjg3LDAuMjEsLTEuNzEsLTAuMzAsLTEuODksLTEuMTRdLFsnYycsLTAuMjEsLTAuODQsMC4zMCwtMS43MSwxLjE0LC0xLjg5XSxbJ3onXV0sdzoyMC4xNTMsaDoyMy4xNDJ9LFxuXHRcdCdjbGVmcy5HJzp7ZDpbWydNJyw5LjY5LC0zNy40MV0sWydjJywwLjA5LC0wLjA5LDAuMjQsLTAuMDYsMC4zNiwwLjAwXSxbJ2MnLDAuMTIsMC4wOSwwLjU3LDAuNjAsMC45NiwxLjExXSxbJ2MnLDEuNzcsMi4zNCwzLjIxLDUuODUsMy41Nyw4LjczXSxbJ2MnLDAuMjEsMS41NiwwLjAzLDMuMjcsLTAuNDUsNC44Nl0sWydjJywtMC42OSwyLjMxLC0xLjkyLDQuNDcsLTQuMjMsNy40NF0sWydjJywtMC4zMCwwLjM5LC0wLjU3LDAuNzIsLTAuNjAsMC43NV0sWydjJywtMC4wMywwLjA2LDAuMDAsMC4xNSwwLjE4LDAuNzhdLFsnYycsMC41NCwxLjY4LDEuMzgsNC40NCwxLjY4LDUuNDldLFsnbCcsMC4wOSwwLjQyXSxbJ2wnLDAuMzksMC4wMF0sWydjJywxLjQ3LDAuMDksMi43NiwwLjUxLDMuOTYsMS4yOV0sWydjJywxLjgzLDEuMjMsMy4wNiwzLjIxLDMuMzksNS41Ml0sWydjJywwLjA5LDAuNDUsMC4xMiwxLjI5LDAuMDYsMS43NF0sWydjJywtMC4wOSwxLjAyLC0wLjMzLDEuODMsLTAuNzUsMi43M10sWydjJywtMC44NCwxLjcxLC0yLjI4LDMuMDYsLTQuMDIsMy43Ml0sWydsJywtMC4zMywwLjEyXSxbJ2wnLDAuMDMsMS4yNl0sWydjJywwLjAwLDEuNzQsLTAuMDYsMy42MywtMC4yMSw0LjYyXSxbJ2MnLC0wLjQ1LDMuMDYsLTIuMTksNS40OSwtNC40Nyw2LjIxXSxbJ2MnLC0wLjU3LDAuMTgsLTAuOTAsMC4yMSwtMS41OSwwLjIxXSxbJ2MnLC0wLjY5LDAuMDAsLTEuMDIsLTAuMDMsLTEuNjUsLTAuMjFdLFsnYycsLTEuMTQsLTAuMjcsLTIuMTMsLTAuODQsLTIuOTQsLTEuNjVdLFsnYycsLTAuOTksLTAuOTksLTEuNTYsLTIuMTYsLTEuNzEsLTMuNTRdLFsnYycsLTAuMDksLTAuODEsMC4wNiwtMS41MywwLjQ1LC0yLjEzXSxbJ2MnLDAuNjMsLTAuOTksMS44MywtMS41NiwzLjAwLC0xLjUzXSxbJ2MnLDEuNTAsMC4wOSwyLjY0LDEuMzIsMi43MywyLjk0XSxbJ2MnLDAuMDYsMS40NywtMC45MywyLjcwLC0yLjM3LDIuOTddLFsnYycsLTAuNDUsMC4wNiwtMC44NCwwLjAzLC0xLjI5LC0wLjA5XSxbJ2wnLC0wLjIxLC0wLjA5XSxbJ2wnLDAuMDksMC4xMl0sWydjJywwLjM5LDAuNTQsMC43OCwwLjkzLDEuMzIsMS4yNl0sWydjJywxLjM1LDAuODcsMy4wNiwxLjAyLDQuMzUsMC4zNl0sWydjJywxLjQ0LC0wLjcyLDIuNTIsLTIuMjgsMi45NywtNC4zNV0sWydjJywwLjE1LC0wLjY2LDAuMjQsLTEuNTAsMC4zMCwtMy4wM10sWydjJywwLjAzLC0wLjg0LDAuMDMsLTIuOTQsMC4wMCwtMy4wMF0sWydjJywtMC4wMywwLjAwLC0wLjE4LDAuMDAsLTAuMzYsMC4wM10sWydjJywtMC42NiwwLjEyLC0wLjk5LDAuMTIsLTEuODMsMC4xMl0sWydjJywtMS4wNSwwLjAwLC0xLjcxLC0wLjA2LC0yLjYxLC0wLjMwXSxbJ2MnLC00LjAyLC0wLjk5LC03LjExLC00LjM1LC03LjgwLC04LjQ2XSxbJ2MnLC0wLjEyLC0wLjY2LC0wLjEyLC0wLjk5LC0wLjEyLC0xLjgzXSxbJ2MnLDAuMDAsLTAuODQsMC4wMCwtMS4xNCwwLjE1LC0xLjkyXSxbJ2MnLDAuMzYsLTIuMjgsMS40MSwtNC42MiwzLjMwLC03LjI5XSxbJ2wnLDIuNzksLTMuNjBdLFsnYycsMC41NCwtMC42NiwwLjk2LC0xLjIwLDAuOTYsLTEuMjNdLFsnYycsMC4wMCwtMC4wMywtMC4wOSwtMC4zMywtMC4xOCwtMC42OV0sWydjJywtMC45NiwtMy4yMSwtMS40MSwtNS4yOCwtMS41OSwtNy42OF0sWydjJywtMC4xMiwtMS4zOCwtMC4xNSwtMy4wOSwtMC4wNiwtMy45Nl0sWydjJywwLjMzLC0yLjY3LDEuMzgsLTUuMDcsMy4xMiwtNy4wOF0sWydjJywwLjM2LC0wLjQyLDAuOTksLTEuMDUsMS4xNywtMS4xNF0sWyd6J10sWydtJywyLjAxLDQuNzFdLFsnYycsLTAuMTUsLTAuMzAsLTAuMzAsLTAuNTQsLTAuMzAsLTAuNTRdLFsnYycsLTAuMDMsMC4wMCwtMC4xOCwwLjA5LC0wLjMwLDAuMjFdLFsnYycsLTIuNDAsMS43NCwtMy44Nyw0LjIwLC00LjI2LDcuMTFdLFsnYycsLTAuMDYsMC41NCwtMC4wNiwxLjQxLC0wLjAzLDEuODldLFsnYycsMC4wOSwxLjI5LDAuNDgsMy4xMiwxLjA4LDUuMjJdLFsnYycsMC4xNSwwLjQyLDAuMjQsMC43OCwwLjI0LDAuODFdLFsnYycsMC4wMCwwLjAzLDAuODQsLTEuMTEsMS4yMywtMS42OF0sWydjJywxLjg5LC0yLjczLDIuODgsLTUuMDcsMy4xNSwtNy41M10sWydjJywwLjA5LC0wLjU3LDAuMTIsLTEuNzQsMC4wNiwtMi4zN10sWydjJywtMC4wOSwtMS4yMywtMC4yNywtMS45MiwtMC44NywtMy4xMl0sWyd6J10sWydtJywtMi45NCwyMC43MF0sWydjJywtMC4yMSwtMC43MiwtMC4zOSwtMS4zMiwtMC40MiwtMS4zMl0sWydjJywwLjAwLDAuMDAsLTEuMjAsMS40NywtMS44NiwyLjM3XSxbJ2MnLC0yLjc5LDMuNjMsLTQuMDIsNi4zMCwtNC4zNSw5LjMwXSxbJ2MnLC0wLjAzLDAuMjEsLTAuMDMsMC42OSwtMC4wMywxLjA4XSxbJ2MnLDAuMDAsMC42OSwwLjAwLDAuNzUsMC4wNiwxLjExXSxbJ2MnLDAuMTIsMC41NCwwLjI3LDAuOTksMC41MSwxLjQ3XSxbJ2MnLDAuNjksMS4zOCwxLjgzLDIuNTUsMy40MiwzLjQyXSxbJ2MnLDAuOTYsMC41NCwyLjA3LDAuOTAsMy4yMSwxLjA4XSxbJ2MnLDAuNzgsMC4xMiwyLjA0LDAuMTIsMi45NCwtMC4wM10sWydjJywwLjUxLC0wLjA2LDAuNDUsLTAuMDMsMC40MiwtMC4zMF0sWydjJywtMC4yNCwtMy4zMywtMC43MiwtNi4zMywtMS42MiwtMTAuMDhdLFsnYycsLTAuMDksLTAuMzksLTAuMTgsLTAuNzUsLTAuMTgsLTAuNzhdLFsnYycsLTAuMDMsLTAuMDMsLTAuNDIsMC4wMCwtMC44MSwwLjA5XSxbJ2MnLC0wLjkwLDAuMTgsLTEuNjUsMC41NywtMi4yMiwxLjE0XSxbJ2MnLC0wLjcyLDAuNzIsLTEuMDgsMS42NSwtMS4wNSwyLjY0XSxbJ2MnLDAuMDYsMC45NiwwLjQ4LDEuODMsMS4yMywyLjU4XSxbJ2MnLDAuMzYsMC4zNiwwLjcyLDAuNjMsMS4xNywwLjkwXSxbJ2MnLDAuMzMsMC4xOCwwLjM2LDAuMjEsMC40MiwwLjMzXSxbJ2MnLDAuMTgsMC40MiwtMC4xOCwwLjkwLC0wLjYwLDAuODddLFsnYycsLTAuMTgsLTAuMDMsLTAuODQsLTAuMzYsLTEuMjYsLTAuNjNdLFsnYycsLTAuNzgsLTAuNTEsLTEuMzgsLTEuMTEsLTEuODYsLTEuODNdLFsnYycsLTEuNzcsLTIuNzAsLTAuOTksLTYuNDIsMS43MSwtOC4xOV0sWydjJywwLjMwLC0wLjIxLDAuODEsLTAuNDgsMS4xNywtMC42M10sWydjJywwLjMwLC0wLjA5LDEuMDIsLTAuMzAsMS4xNCwtMC4zMF0sWydjJywwLjA2LDAuMDAsMC4wOSwwLjAwLDAuMDksLTAuMDNdLFsnYycsMC4wMywtMC4wMywtMC41MSwtMS45MiwtMS4yMywtNC4yNl0sWyd6J10sWydtJywzLjc4LDcuNDFdLFsnYycsLTAuMTgsLTAuMDMsLTAuMzYsLTAuMDYsLTAuMzksLTAuMDZdLFsnYycsLTAuMDMsMC4wMCwwLjAwLDAuMjEsMC4xOCwxLjAyXSxbJ2MnLDAuNzUsMy4xOCwxLjI2LDYuMzAsMS41MCw5LjA5XSxbJ2MnLDAuMDYsMC43MiwwLjAwLDAuNjksMC41MSwwLjQyXSxbJ2MnLDAuNzgsLTAuMzYsMS40NCwtMC45NiwxLjk4LC0xLjc3XSxbJ2MnLDEuMDgsLTEuNjIsMS4yMCwtMy42OSwwLjMwLC01LjU1XSxbJ2MnLC0wLjgxLC0xLjYyLC0yLjMxLC0yLjc5LC00LjA4LC0zLjE1XSxbJ3onXV0sdzoxOS4wNTEsaDo1Ny4wNTd9LFxuXHRcdCdjbGVmcy5wZXJjJzp7ZDpbWydNJyw1LjA3LC03LjQ0XSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsMS41MywwLjAwXSxbJ2wnLDEuNTMsMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNy4zNV0sWydsJywwLjAwLDcuMzJdLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC0xLjUzLDAuMDBdLFsnbCcsLTEuNTMsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC03LjMyXSxbJ2wnLDAuMDAsLTcuMzVdLFsneiddLFsnbScsNi42MywwLjAwXSxbJ2wnLDAuMDksLTAuMDZdLFsnbCcsMS41MywwLjAwXSxbJ2wnLDEuNTMsMC4wMF0sWydsJywwLjA5LDAuMDZdLFsnbCcsMC4wNiwwLjA5XSxbJ2wnLDAuMDAsNy4zNV0sWydsJywwLjAwLDcuMzJdLFsnbCcsLTAuMDYsMC4wOV0sWydsJywtMC4wOSwwLjA2XSxbJ2wnLC0xLjUzLDAuMDBdLFsnbCcsLTEuNTMsMC4wMF0sWydsJywtMC4wOSwtMC4wNl0sWydsJywtMC4wNiwtMC4wOV0sWydsJywwLjAwLC03LjMyXSxbJ2wnLDAuMDAsLTcuMzVdLFsneiddXSx3OjkuOTksaDoxNC45N30sXG5cdFx0J3RpbWVzaWcuY29tbW9uJzp7ZDpbWydNJyw2LjY2LC03LjgzXSxbJ2MnLDAuNzIsLTAuMDYsMS40MSwtMC4wMywxLjk4LDAuMDldLFsnYycsMS4yMCwwLjI3LDIuMzQsMC45NiwzLjA5LDEuOTJdLFsnYycsMC42MywwLjgxLDEuMDgsMS44NiwxLjE0LDIuNzNdLFsnYycsMC4wNiwxLjAyLC0wLjUxLDEuOTIsLTEuNDQsMi4yMl0sWydjJywtMC4yNCwwLjA5LC0wLjMwLDAuMDksLTAuNjMsMC4wOV0sWydjJywtMC4zMywwLjAwLC0wLjQyLDAuMDAsLTAuNjMsLTAuMDZdLFsnYycsLTAuNjYsLTAuMjQsLTEuMTQsLTAuNjMsLTEuNDEsLTEuMjBdLFsnYycsLTAuMTUsLTAuMzAsLTAuMjEsLTAuNTEsLTAuMjQsLTAuOTBdLFsnYycsLTAuMDYsLTEuMDgsMC41NywtMi4wNCwxLjU2LC0yLjM3XSxbJ2MnLDAuMTgsLTAuMDYsMC4yNywtMC4wNiwwLjYzLC0wLjA2XSxbJ2wnLDAuNDUsMC4wMF0sWydjJywwLjA2LDAuMDMsMC4wOSwwLjAzLDAuMDksMC4wMF0sWydjJywwLjAwLDAuMDAsLTAuMDksLTAuMTIsLTAuMjQsLTAuMjddLFsnYycsLTEuMDIsLTEuMTEsLTIuNTUsLTEuNjgsLTQuMDgsLTEuNTBdLFsnYycsLTEuMjksMC4xNSwtMi4wNCwwLjY5LC0yLjQwLDEuNzRdLFsnYycsLTAuMzYsMC45MywtMC40MiwxLjg5LC0wLjQyLDUuMzddLFsnYycsMC4wMCwyLjk3LDAuMDYsMy45NiwwLjI0LDQuNzddLFsnYycsMC4yNCwxLjA4LDAuNjMsMS42OCwxLjQxLDIuMDddLFsnYycsMC44MSwwLjM5LDIuMTYsMC40NSwzLjE4LDAuMDldLFsnYycsMS4yOSwtMC40NSwyLjM3LC0xLjUzLDMuMDMsLTIuOTddLFsnYycsMC4xNSwtMC4zMywwLjMzLC0wLjg3LDAuMzksLTEuMTddLFsnYycsMC4wOSwtMC4yNCwwLjE1LC0wLjM2LDAuMzAsLTAuMzldLFsnYycsMC4yMSwtMC4wMywwLjQyLDAuMTUsMC4zOSwwLjM2XSxbJ2MnLC0wLjA2LDAuMzksLTAuNDIsMS4zOCwtMC42OSwxLjg5XSxbJ2MnLC0wLjk2LDEuODAsLTIuNDksMi45NCwtNC4yMywzLjE4XSxbJ2MnLC0wLjk5LDAuMTIsLTIuNTgsLTAuMDYsLTMuNjMsLTAuNDVdLFsnYycsLTAuOTYsLTAuMzYsLTEuNzEsLTAuODQsLTIuNDAsLTEuNTBdLFsnYycsLTEuMTEsLTEuMTEsLTEuODAsLTIuNjEsLTIuMDQsLTQuNTZdLFsnYycsLTAuMDYsLTAuNjAsLTAuMDYsLTIuMDEsMC4wMCwtMi42MV0sWydjJywwLjI0LC0xLjk1LDAuOTAsLTMuNDUsMi4wMSwtNC41Nl0sWydjJywwLjY5LC0wLjY2LDEuNDQsLTEuMTEsMi4zNywtMS40N10sWydjJywwLjYzLC0wLjI0LDEuNDcsLTAuNDIsMi4yMiwtMC40OF0sWyd6J11dLHc6MTMuMDM4LGg6MTUuNjg5fSxcblx0XHQndGltZXNpZy5jdXQnOntkOltbJ00nLDYuMjQsLTEwLjQ0XSxbJ2MnLDAuMDksLTAuMDYsMC4wOSwtMC4wNiwwLjQ4LC0wLjA2XSxbJ2MnLDAuMzYsMC4wMCwwLjM2LDAuMDAsMC40NSwwLjA2XSxbJ2wnLDAuMDYsMC4wOV0sWydsJywwLjAwLDEuMjNdLFsnbCcsMC4wMCwxLjI2XSxbJ2wnLDAuMjcsMC4wMF0sWydjJywxLjI2LDAuMDAsMi40OSwwLjQ1LDMuNDgsMS4yOV0sWydjJywxLjA1LDAuODcsMS44MCwyLjI4LDEuODksMy40OF0sWydjJywwLjA2LDEuMDIsLTAuNTEsMS45MiwtMS40NCwyLjIyXSxbJ2MnLC0wLjI0LDAuMDksLTAuMzAsMC4wOSwtMC42MywwLjA5XSxbJ2MnLC0wLjMzLDAuMDAsLTAuNDIsMC4wMCwtMC42MywtMC4wNl0sWydjJywtMC42NiwtMC4yNCwtMS4xNCwtMC42MywtMS40MSwtMS4yMF0sWydjJywtMC4xNSwtMC4zMCwtMC4yMSwtMC41MSwtMC4yNCwtMC45MF0sWydjJywtMC4wNiwtMS4wOCwwLjU3LC0yLjA0LDEuNTYsLTIuMzddLFsnYycsMC4xOCwtMC4wNiwwLjI3LC0wLjA2LDAuNjMsLTAuMDZdLFsnbCcsMC40NSwwLjAwXSxbJ2MnLDAuMDYsMC4wMywwLjA5LDAuMDMsMC4wOSwwLjAwXSxbJ2MnLDAuMDAsLTAuMDMsLTAuNDUsLTAuNTEsLTAuNjYsLTAuNjldLFsnYycsLTAuODcsLTAuNjksLTEuODMsLTEuMDUsLTIuOTQsLTEuMTFdLFsnbCcsLTAuNDIsMC4wMF0sWydsJywwLjAwLDcuMTddLFsnbCcsMC4wMCw3LjE0XSxbJ2wnLDAuNDIsMC4wMF0sWydjJywwLjY5LC0wLjAzLDEuMjMsLTAuMTgsMS44NiwtMC41MV0sWydjJywxLjA1LC0wLjUxLDEuODksLTEuNDcsMi40NiwtMi43MF0sWydjJywwLjE1LC0wLjMzLDAuMzMsLTAuODcsMC4zOSwtMS4xN10sWydjJywwLjA5LC0wLjI0LDAuMTUsLTAuMzYsMC4zMCwtMC4zOV0sWydjJywwLjIxLC0wLjAzLDAuNDIsMC4xNSwwLjM5LDAuMzZdLFsnYycsLTAuMDMsMC4yNCwtMC4yMSwwLjc4LC0wLjM5LDEuMjBdLFsnYycsLTAuOTYsMi4zNywtMi45NCwzLjkwLC01LjEzLDMuOTBdLFsnbCcsLTAuMzAsMC4wMF0sWydsJywwLjAwLDEuMjZdLFsnbCcsMC4wMCwxLjIzXSxbJ2wnLC0wLjA2LDAuMDldLFsnYycsLTAuMDksMC4wNiwtMC4wOSwwLjA2LC0wLjQ1LDAuMDZdLFsnYycsLTAuMzksMC4wMCwtMC4zOSwwLjAwLC0wLjQ4LC0wLjA2XSxbJ2wnLC0wLjA2LC0wLjA5XSxbJ2wnLDAuMDAsLTEuMjldLFsnbCcsMC4wMCwtMS4yOV0sWydsJywtMC4yMSwtMC4wM10sWydjJywtMS4yMywtMC4yMSwtMi4zMSwtMC42MywtMy4yMSwtMS4yOV0sWydjJywtMC4xNSwtMC4wOSwtMC40NSwtMC4zNiwtMC42NiwtMC41N10sWydjJywtMS4xMSwtMS4xMSwtMS44MCwtMi42MSwtMi4wNCwtNC41Nl0sWydjJywtMC4wNiwtMC42MCwtMC4wNiwtMi4wMSwwLjAwLC0yLjYxXSxbJ2MnLDAuMjQsLTEuOTUsMC45MywtMy40NSwyLjA0LC00LjU5XSxbJ2MnLDAuNDIsLTAuMzksMC43OCwtMC42NiwxLjI2LC0wLjkzXSxbJ2MnLDAuNzUsLTAuNDUsMS42NSwtMC43NSwyLjYxLC0wLjkwXSxbJ2wnLDAuMjEsLTAuMDNdLFsnbCcsMC4wMCwtMS4yOV0sWydsJywwLjAwLC0xLjI5XSxbJ3onXSxbJ20nLC0wLjA2LDEwLjQ0XSxbJ2MnLDAuMDAsLTUuNTgsMC4wMCwtNi45OSwtMC4wMywtNi45OV0sWydjJywtMC4xNSwwLjAwLC0wLjYzLDAuMjcsLTAuODcsMC40NV0sWydjJywtMC40NSwwLjM2LC0wLjc1LDAuOTMsLTAuOTMsMS43N10sWydjJywtMC4xOCwwLjgxLC0wLjI0LDEuODAsLTAuMjQsNC43NF0sWydjJywwLjAwLDIuOTcsMC4wNiwzLjk2LDAuMjQsNC43N10sWydjJywwLjI0LDEuMDgsMC42NiwxLjY4LDEuNDEsMi4wN10sWydjJywwLjEyLDAuMDYsMC4zMCwwLjEyLDAuMzMsMC4xNV0sWydsJywwLjA5LDAuMDBdLFsnbCcsMC4wMCwtNi45Nl0sWyd6J11dLHc6MTMuMDM4LGg6MjAuOTd9LFxuXHRcdCd0aW1lc2lnLmltcGVyZmVjdHVtJzp7ZDpbWydNJywxMywtNV0sWydhJyw4LDgsMCwxLDAsMCwxMF1dLHc6MTMuMDM4LGg6MjAuOTd9LFxuXHRcdCd0aW1lc2lnLmltcGVyZmVjdHVtMic6e2Q6W1snTScsMTMsLTVdLFsnYScsOCw4LDAsMSwwLDAsMTBdXSx3OjEzLjAzOCxoOjIwLjk3fSxcblx0XHQndGltZXNpZy5wZXJmZWN0dW0nOntkOltbJ00nLDEzLC01XSxbJ2EnLDgsOCwwLDEsMCwwLDEwXV0sdzoxMy4wMzgsaDoyMC45N30sXG5cdFx0J3RpbWVzaWcucGVyZmVjdHVtMic6e2Q6W1snTScsMTMsLTVdLFsnYScsOCw4LDAsMSwwLDAsMTBdXSx3OjEzLjAzOCxoOjIwLjk3fSxcblx0XHQnZic6e2Q6W1snTScsOS45MywtMTQuMjhdLFsnYycsMS41MywtMC4xOCwyLjg4LDAuNDUsMy4xMiwxLjUwXSxbJ2MnLDAuMTIsMC41MSwwLjAwLDEuMzIsLTAuMjcsMS44Nl0sWydjJywtMC4xNSwwLjMwLC0wLjQyLDAuNTcsLTAuNjMsMC42OV0sWydjJywtMC42OSwwLjM2LC0xLjU2LDAuMDMsLTEuODMsLTAuNjldLFsnYycsLTAuMDksLTAuMjQsLTAuMDksLTAuNjksMC4wMCwtMC44N10sWydjJywwLjA2LC0wLjEyLDAuMjEsLTAuMjQsMC40NSwtMC40Ml0sWydjJywwLjQyLC0wLjI0LDAuNTcsLTAuNDUsMC42MCwtMC43Ml0sWydjJywwLjAzLC0wLjMzLC0wLjA5LC0wLjM5LC0wLjYzLC0wLjQyXSxbJ2MnLC0wLjMwLDAuMDAsLTAuNDUsMC4wMCwtMC42MCwwLjAzXSxbJ2MnLC0wLjgxLDAuMjEsLTEuMzUsMC45MywtMS43NCwyLjQ2XSxbJ2MnLC0wLjA2LDAuMjcsLTAuNDgsMi4yNSwtMC40OCwyLjMxXSxbJ2MnLDAuMDAsMC4wMywwLjM5LDAuMDMsMC45MCwwLjAzXSxbJ2MnLDAuNzIsMC4wMCwwLjkwLDAuMDAsMC45OSwwLjA2XSxbJ2MnLDAuNDIsMC4xNSwwLjQ1LDAuNzIsMC4wMywwLjkwXSxbJ2MnLC0wLjEyLDAuMDYsLTAuMjQsMC4wNiwtMS4xNywwLjA2XSxbJ2wnLC0xLjA1LDAuMDBdLFsnbCcsLTAuNzgsMi41NV0sWydjJywtMC40NSwxLjQxLC0wLjg3LDIuNzksLTAuOTYsMy4wNl0sWydjJywtMC44NywyLjM3LC0yLjM3LDQuNzQsLTMuNzgsNS45MV0sWydjJywtMS4wNSwwLjkwLC0yLjA0LDEuMjMsLTMuMDksMS4wOF0sWydjJywtMS4xMSwtMC4xOCwtMS44OSwtMC43OCwtMi4wNCwtMS41OV0sWydjJywtMC4xMiwtMC42NiwwLjE1LC0xLjcxLDAuNTQsLTIuMTldLFsnYycsMC42OSwtMC43NSwxLjg2LC0wLjU0LDIuMjIsMC4zOV0sWydjJywwLjA2LDAuMTUsMC4wOSwwLjI3LDAuMDksMC40OF0sWydjJywwLjAwLDAuMjQsLTAuMDMsMC4yNywtMC4xMiwwLjQyXSxbJ2MnLC0wLjAzLDAuMDksLTAuMTUsMC4xOCwtMC4yNywwLjI3XSxbJ2MnLC0wLjA5LDAuMDYsLTAuMjcsMC4yMSwtMC4zNiwwLjI3XSxbJ2MnLC0wLjI0LDAuMTgsLTAuMzYsMC4zNiwtMC4zOSwwLjYwXSxbJ2MnLC0wLjAzLDAuMzMsMC4wOSwwLjM5LDAuNjMsMC40Ml0sWydjJywwLjQyLDAuMDAsMC42MywtMC4wMywwLjkwLC0wLjE1XSxbJ2MnLDAuNjAsLTAuMzAsMC45NiwtMC45NiwxLjM4LC0yLjY0XSxbJ2MnLDAuMDksLTAuNDIsMC42MywtMi41NSwxLjE3LC00Ljc3XSxbJ2wnLDEuMDIsLTQuMDhdLFsnYycsMC4wMCwtMC4wMywtMC4zNiwtMC4wMywtMC44MSwtMC4wM10sWydjJywtMC43MiwwLjAwLC0wLjgxLDAuMDAsLTAuOTMsLTAuMDZdLFsnYycsLTAuNDIsLTAuMTgsLTAuMzksLTAuNzUsMC4wMywtMC45MF0sWydjJywwLjA5LC0wLjA2LDAuMjcsLTAuMDYsMS4wNSwtMC4wNl0sWydsJywwLjk2LDAuMDBdLFsnbCcsMC4wMCwtMC4wOV0sWydjJywwLjA2LC0wLjE4LDAuMzAsLTAuNzIsMC41MSwtMS4xN10sWydjJywxLjIwLC0yLjQ2LDMuMzAsLTQuMjMsNS4zNCwtNC41MF0sWyd6J11dLHc6MTYuMTU1LGg6MTkuNDQ1fSxcblx0XHQnbSc6e2Q6W1snTScsMi43OSwtOC45MV0sWydjJywwLjA5LDAuMDAsMC4zMCwtMC4wMywwLjQ1LC0wLjAzXSxbJ2MnLDAuMjQsMC4wMywwLjMwLDAuMDMsMC40NSwwLjEyXSxbJ2MnLDAuMzYsMC4xNSwwLjYzLDAuNTQsMC43NSwxLjAyXSxbJ2wnLDAuMDMsMC4yMV0sWydsJywwLjMzLC0wLjMwXSxbJ2MnLDAuNjksLTAuNjksMS4zOCwtMS4wMiwyLjA3LC0xLjAyXSxbJ2MnLDAuMjcsMC4wMCwwLjMzLDAuMDAsMC40OCwwLjA2XSxbJ2MnLDAuMjEsMC4wOSwwLjQ4LDAuMzYsMC42MywwLjYwXSxbJ2MnLDAuMDMsMC4wOSwwLjEyLDAuMjcsMC4xOCwwLjQyXSxbJ2MnLDAuMDMsMC4xNSwwLjA5LDAuMjcsMC4xMiwwLjI3XSxbJ2MnLDAuMDAsMC4wMCwwLjA5LC0wLjA5LDAuMTgsLTAuMjFdLFsnYycsMC4zMywtMC4zOSwwLjg3LC0wLjgxLDEuMjksLTAuOTldLFsnYycsMC43OCwtMC4zMywxLjQ3LC0wLjIxLDIuMDEsMC4zM10sWydjJywwLjMwLDAuMzMsMC40OCwwLjY5LDAuNjAsMS4xNF0sWydjJywwLjA5LDAuNDIsMC4wNiwwLjU0LC0wLjU0LDMuMDZdLFsnYycsLTAuMzMsMS4yOSwtMC41NywyLjQwLC0wLjU3LDIuNDNdLFsnYycsMC4wMCwwLjEyLDAuMDksMC4yMSwwLjIxLDAuMjFdLFsnYycsMC4yNCwwLjAwLDAuNzUsLTAuMzAsMS4yMCwtMC43Ml0sWydjJywwLjQ1LC0wLjM5LDAuNjAsLTAuNDUsMC43OCwtMC4yN10sWydjJywwLjE4LDAuMTgsMC4wOSwwLjM2LC0wLjQ1LDAuODddLFsnYycsLTEuMDUsMC45NiwtMS44MywxLjQ3LC0yLjU4LDEuNzFdLFsnYycsLTAuOTMsMC4zMywtMS41MywwLjIxLC0xLjgwLC0wLjMzXSxbJ2MnLC0wLjA2LC0wLjE1LC0wLjA2LC0wLjIxLC0wLjA2LC0wLjQ1XSxbJ2MnLDAuMDAsLTAuMjQsMC4wMywtMC40OCwwLjYwLC0yLjgyXSxbJ2MnLDAuNDIsLTEuNzEsMC42MCwtMi42NCwwLjYzLC0yLjc5XSxbJ2MnLDAuMDMsLTAuNTcsLTAuMzAsLTAuNzUsLTAuODQsLTAuNDhdLFsnYycsLTAuMjQsMC4xMiwtMC41NCwwLjM5LC0wLjY2LDAuNjNdLFsnYycsLTAuMDMsMC4wOSwtMC40MiwxLjM4LC0wLjkwLDMuMDBdLFsnYycsLTAuOTAsMy4xNSwtMC44NCwzLjAwLC0xLjE0LDMuMTVdLFsnbCcsLTAuMTUsMC4wOV0sWydsJywtMC43OCwwLjAwXSxbJ2MnLC0wLjYwLDAuMDAsLTAuNzgsMC4wMCwtMC44NCwtMC4wNl0sWydjJywtMC4wOSwtMC4wMywtMC4xOCwtMC4xOCwtMC4xOCwtMC4yN10sWydjJywwLjAwLC0wLjAzLDAuMzYsLTEuMzgsMC44NCwtMi45N10sWydjJywwLjU3LC0yLjA0LDAuODEsLTIuOTcsMC44NCwtMy4xMl0sWydjJywwLjAzLC0wLjU0LC0wLjMwLC0wLjcyLC0wLjg0LC0wLjQ1XSxbJ2MnLC0wLjI0LDAuMTIsLTAuNTcsMC40MiwtMC42NiwwLjYzXSxbJ2MnLC0wLjA2LDAuMDksLTAuNTEsMS40NCwtMS4wNSwyLjk3XSxbJ2MnLC0wLjUxLDEuNTYsLTAuOTksMi44NSwtMC45OSwyLjkxXSxbJ2MnLC0wLjA2LDAuMTIsLTAuMjEsMC4yNCwtMC4zNiwwLjMwXSxbJ2MnLC0wLjEyLDAuMDYsLTAuMjEsMC4wNiwtMC45MCwwLjA2XSxbJ2MnLC0wLjYwLDAuMDAsLTAuNzgsMC4wMCwtMC44NCwtMC4wNl0sWydjJywtMC4wOSwtMC4wMywtMC4xOCwtMC4xOCwtMC4xOCwtMC4yN10sWydjJywwLjAwLC0wLjAzLDAuNDUsLTEuMzgsMC45OSwtMi45N10sWydjJywxLjA1LC0zLjE4LDEuMDUsLTMuMTgsMC45MywtMy40NV0sWydjJywtMC4xMiwtMC4yNywtMC4zOSwtMC4zMCwtMC43MiwtMC4xNV0sWydjJywtMC41NCwwLjI3LC0xLjE0LDEuMTcsLTEuNTYsMi40MF0sWydjJywtMC4wNiwwLjE1LC0wLjE1LDAuMzAsLTAuMTgsMC4zNl0sWydjJywtMC4yMSwwLjIxLC0wLjU3LDAuMjcsLTAuNzIsMC4wOV0sWydjJywtMC4wOSwtMC4wOSwtMC4wNiwtMC4yMSwwLjA2LC0wLjYzXSxbJ2MnLDAuNDgsLTEuMjYsMS4yNiwtMi40NiwyLjAxLC0zLjIxXSxbJ2MnLDAuNTcsLTAuNTQsMS4yMCwtMC44NywxLjgzLC0xLjAyXSxbJ3onXV0sdzoxNC42ODcsaDo5LjEyNn0sXG5cdFx0J3AnOntkOltbJ00nLDEuOTIsLTguNzBdLFsnYycsMC4yNywtMC4wOSwwLjgxLC0wLjA2LDEuMTEsMC4wM10sWydjJywwLjU0LDAuMTgsMC45MywwLjUxLDEuMTcsMC45OV0sWydjJywwLjA5LDAuMTUsMC4xNSwwLjMzLDAuMTgsMC4zNl0sWydsJywwLjAwLDAuMTJdLFsnbCcsMC4zMCwtMC4yN10sWydjJywwLjY2LC0wLjYwLDEuMzUsLTEuMDIsMi4xMywtMS4yMF0sWydjJywwLjIxLC0wLjA2LDAuMzMsLTAuMDYsMC43OCwtMC4wNl0sWydjJywwLjQ1LDAuMDAsMC41MSwwLjAwLDAuODQsMC4wOV0sWydjJywxLjI5LDAuMzMsMi4wNywxLjMyLDIuMjUsMi43OV0sWydjJywwLjA5LDAuODEsLTAuMDksMi4wMSwtMC40NSwyLjc5XSxbJ2MnLC0wLjU0LDEuMjYsLTEuODYsMi41NSwtMy4xOCwzLjAzXSxbJ2MnLC0wLjQ1LDAuMTgsLTAuODEsMC4yNCwtMS4yOSwwLjI0XSxbJ2MnLC0wLjY5LC0wLjAzLC0xLjM1LC0wLjE4LC0xLjg2LC0wLjQ1XSxbJ2MnLC0wLjMwLC0wLjE1LC0wLjUxLC0wLjE4LC0wLjY5LC0wLjA5XSxbJ2MnLC0wLjA5LDAuMDMsLTAuMTgsMC4wOSwtMC4xOCwwLjEyXSxbJ2MnLC0wLjA5LDAuMTIsLTEuMDUsMi45NCwtMS4wNSwzLjA2XSxbJ2MnLDAuMDAsMC4yNCwwLjE4LDAuNDgsMC41MSwwLjYzXSxbJ2MnLDAuMTgsMC4wNiwwLjU0LDAuMTUsMC43NSwwLjE1XSxbJ2MnLDAuMjEsMC4wMCwwLjM2LDAuMDYsMC40MiwwLjE4XSxbJ2MnLDAuMTIsMC4xOCwwLjA2LDAuNDIsLTAuMTIsMC41NF0sWydjJywtMC4wOSwwLjAzLC0wLjE1LDAuMDMsLTAuNzgsMC4wMF0sWydjJywtMS45OCwtMC4xNSwtMy44MSwtMC4xNSwtNS43OSwwLjAwXSxbJ2MnLC0wLjYzLDAuMDMsLTAuNjksMC4wMywtMC43OCwwLjAwXSxbJ2MnLC0wLjI0LC0wLjE1LC0wLjI0LC0wLjU3LDAuMDMsLTAuNjZdLFsnYycsMC4wNiwtMC4wMywwLjQ4LC0wLjA5LDAuOTksLTAuMTJdLFsnYycsMC44NywtMC4wNiwxLjExLC0wLjA5LDEuMzUsLTAuMjFdLFsnYycsMC4xOCwtMC4wNiwwLjMzLC0wLjE4LDAuMzksLTAuMzBdLFsnYycsMC4wNiwtMC4xMiwzLjI0LC05LjQyLDMuMjcsLTkuNjBdLFsnYycsMC4wNiwtMC4zMywwLjAzLC0wLjU3LC0wLjE1LC0wLjY5XSxbJ2MnLC0wLjA5LC0wLjA2LC0wLjEyLC0wLjA2LC0wLjMwLC0wLjA2XSxbJ2MnLC0wLjY5LDAuMDYsLTEuNTMsMS4wMiwtMi4yOCwyLjYxXSxbJ2MnLC0wLjA5LDAuMjEsLTAuMjEsMC40NSwtMC4yNywwLjUxXSxbJ2MnLC0wLjA5LDAuMTIsLTAuMzMsMC4yNCwtMC40OCwwLjI0XSxbJ2MnLC0wLjE4LDAuMDAsLTAuMzYsLTAuMTUsLTAuMzYsLTAuMzBdLFsnYycsMC4wMCwtMC4yNCwwLjc4LC0xLjgzLDEuMjYsLTIuNTVdLFsnYycsMC43MiwtMS4xMSwxLjQ3LC0xLjc0LDIuMjgsLTEuOTJdLFsneiddLFsnbScsNS4zNywxLjQ3XSxbJ2MnLC0wLjI3LC0wLjEyLC0wLjc1LC0wLjAzLC0xLjE0LDAuMjFdLFsnYycsLTAuNzUsMC40OCwtMS40NywxLjY4LC0xLjg5LDMuMTVdLFsnYycsLTAuNDUsMS40NywtMC40MiwyLjM0LDAuMDAsMi43MF0sWydjJywwLjQ1LDAuMzksMS4yNiwwLjIxLDEuODMsLTAuMzZdLFsnYycsMC41MSwtMC41MSwwLjk5LC0xLjY4LDEuMzgsLTMuMjddLFsnYycsMC4zMCwtMS4xNywwLjMzLC0xLjc0LDAuMTUsLTIuMTNdLFsnYycsLTAuMDksLTAuMTUsLTAuMTUsLTAuMjEsLTAuMzMsLTAuMzBdLFsneiddXSx3OjE0LjY4OSxoOjEzLjEyN30sXG5cdFx0J3InOntkOltbJ00nLDYuMzMsLTkuMTJdLFsnYycsMC4yNywtMC4wMywwLjkzLDAuMDAsMS4yMCwwLjA2XSxbJ2MnLDAuODQsMC4yMSwxLjIzLDAuODEsMS4wMiwxLjUzXSxbJ2MnLC0wLjI0LDAuNzUsLTAuOTAsMS4xNywtMS41NiwwLjk2XSxbJ2MnLC0wLjMzLC0wLjA5LC0wLjUxLC0wLjMwLC0wLjY2LC0wLjc1XSxbJ2MnLC0wLjAzLC0wLjEyLC0wLjA5LC0wLjI0LC0wLjEyLC0wLjMwXSxbJ2MnLC0wLjA5LC0wLjE1LC0wLjMwLC0wLjI0LC0wLjQ4LC0wLjI0XSxbJ2MnLC0wLjU3LDAuMDAsLTEuMzgsMC41NCwtMS42NSwxLjA4XSxbJ2MnLC0wLjA2LDAuMTUsLTAuMzMsMS4xNywtMC45MCwzLjI3XSxbJ2MnLC0wLjU3LDIuMzEsLTAuODEsMy4xMiwtMC44NywzLjIxXSxbJ2MnLC0wLjAzLDAuMDYsLTAuMTIsMC4xNSwtMC4xOCwwLjIxXSxbJ2wnLC0wLjEyLDAuMDZdLFsnbCcsLTAuODEsMC4wM10sWydjJywtMC42OSwwLjAwLC0wLjgxLDAuMDAsLTAuOTAsLTAuMDNdLFsnYycsLTAuMDksLTAuMDYsLTAuMTgsLTAuMjEsLTAuMTgsLTAuMzBdLFsnYycsMC4wMCwtMC4wNiwwLjM5LC0xLjYyLDAuOTAsLTMuNTFdLFsnYycsMC44NCwtMy4yNCwwLjg3LC0zLjQ1LDAuODcsLTMuNzJdLFsnYycsMC4wMCwtMC4yMSwwLjAwLC0wLjI3LC0wLjAzLC0wLjM2XSxbJ2MnLC0wLjEyLC0wLjE1LC0wLjIxLC0wLjI0LC0wLjQyLC0wLjI0XSxbJ2MnLC0wLjI0LDAuMDAsLTAuNDUsMC4xNSwtMC43OCwwLjQyXSxbJ2MnLC0wLjMzLDAuMzYsLTAuNDUsMC41NCwtMC43MiwxLjE0XSxbJ2MnLC0wLjAzLDAuMTIsLTAuMjEsMC4yNCwtMC4zNiwwLjI3XSxbJ2MnLC0wLjEyLDAuMDAsLTAuMTUsMC4wMCwtMC4yNCwtMC4wNl0sWydjJywtMC4xOCwtMC4xMiwtMC4xOCwtMC4yMSwtMC4wNiwtMC41NF0sWydjJywwLjIxLC0wLjU3LDAuNDIsLTAuOTMsMC43OCwtMS4zMl0sWydjJywwLjU0LC0wLjUxLDEuMjAsLTAuODEsMS45NSwtMC44N10sWydjJywwLjgxLC0wLjAzLDEuNTMsMC4zMCwxLjkyLDAuODddLFsnbCcsMC4xMiwwLjE4XSxbJ2wnLDAuMDksLTAuMDldLFsnYycsMC41NywtMC40NSwxLjQxLC0wLjg0LDIuMTksLTAuOTZdLFsneiddXSx3OjkuNDEsaDo5LjEzMn0sXG5cdFx0J3MnOntkOltbJ00nLDQuNDcsLTguNzNdLFsnYycsMC4wOSwwLjAwLDAuMzYsLTAuMDMsMC41NywtMC4wM10sWydjJywwLjc1LDAuMDMsMS4yOSwwLjI0LDEuNzEsMC42M10sWydjJywwLjUxLDAuNTQsMC42NiwxLjI2LDAuMzYsMS44M10sWydjJywtMC4yNCwwLjQyLC0wLjYzLDAuNTcsLTEuMTEsMC40Ml0sWydjJywtMC4zMywtMC4wOSwtMC42MCwtMC4zNiwtMC42MCwtMC41N10sWydjJywwLjAwLC0wLjAzLDAuMDYsLTAuMjEsMC4xNSwtMC4zOV0sWydjJywwLjEyLC0wLjIxLDAuMTUsLTAuMzMsMC4xOCwtMC40OF0sWydjJywwLjAwLC0wLjI0LC0wLjA2LC0wLjQ4LC0wLjE1LC0wLjYwXSxbJ2MnLC0wLjE1LC0wLjIxLC0wLjQyLC0wLjI0LC0wLjc1LC0wLjE1XSxbJ2MnLC0wLjI3LDAuMDYsLTAuNDgsMC4xOCwtMC42OSwwLjM2XSxbJ2MnLC0wLjM5LDAuMzksLTAuNTEsMC45NiwtMC4zMywxLjM4XSxbJ2MnLDAuMDksMC4yMSwwLjQyLDAuNTEsMC43OCwwLjcyXSxbJ2MnLDEuMTEsMC42OSwxLjU5LDEuMTEsMS44OSwxLjY4XSxbJ2MnLDAuMjEsMC4zOSwwLjI0LDAuNzgsMC4xNSwxLjI5XSxbJ2MnLC0wLjE4LDEuMjAsLTEuMTcsMi4xNiwtMi41MiwyLjUyXSxbJ2MnLC0xLjAyLDAuMjQsLTEuOTUsMC4xMiwtMi43MCwtMC40Ml0sWydjJywtMC43MiwtMC41MSwtMC45OSwtMS40NywtMC42MCwtMi4xOV0sWydjJywwLjI0LC0wLjQ4LDAuNzIsLTAuNjMsMS4xNywtMC40Ml0sWydjJywwLjMzLDAuMTgsMC41NCwwLjQ1LDAuNTcsMC44MV0sWydjJywwLjAwLDAuMjEsLTAuMDMsMC4zMCwtMC4zMywwLjUxXSxbJ2MnLC0wLjMzLDAuMjQsLTAuMzksMC40MiwtMC4yNywwLjY5XSxbJ2MnLDAuMDYsMC4xNSwwLjIxLDAuMjcsMC40NSwwLjMzXSxbJ2MnLDAuMzAsMC4wOSwwLjg3LDAuMDksMS4yMCwwLjAwXSxbJ2MnLDAuNzUsLTAuMjEsMS4yMywtMC43MiwxLjI5LC0xLjM1XSxbJ2MnLDAuMDMsLTAuNDIsLTAuMTUsLTAuODEsLTAuNTQsLTEuMjBdLFsnYycsLTAuMjQsLTAuMjQsLTAuNDgsLTAuNDIsLTEuNDEsLTEuMDJdLFsnYycsLTAuNjksLTAuNDIsLTEuMDUsLTAuOTMsLTEuMDUsLTEuNDddLFsnYycsMC4wMCwtMC4zOSwwLjEyLC0wLjg3LDAuMzAsLTEuMjNdLFsnYycsMC4yNywtMC41NywwLjc4LC0xLjA1LDEuMzgsLTEuMzVdLFsnYycsMC4yNCwtMC4xMiwwLjYzLC0wLjI3LDAuOTAsLTAuMzBdLFsneiddXSx3OjYuNjMyLGg6OC43NTh9LFxuXHRcdCd6Jzp7ZDpbWydNJywyLjY0LC03Ljk1XSxbJ2MnLDAuMzYsLTAuMDksMC44MSwtMC4wMywxLjcxLDAuMjddLFsnYycsMC43OCwwLjIxLDAuOTYsMC4yNywxLjc0LDAuMzBdLFsnYycsMC44NywwLjA2LDEuMDIsMC4wMywxLjM4LC0wLjIxXSxbJ2MnLDAuMjEsLTAuMTUsMC4zMywtMC4xNSwwLjQ4LC0wLjA2XSxbJ2MnLDAuMTUsMC4wOSwwLjIxLDAuMzAsMC4xNSwwLjQ1XSxbJ2MnLC0wLjAzLDAuMDYsLTEuMjYsMS4yNiwtMi43NiwyLjY3XSxbJ2wnLC0yLjczLDIuNTVdLFsnbCcsMC41NCwwLjAzXSxbJ2MnLDAuNTQsMC4wMywwLjcyLDAuMDMsMi4wMSwwLjE1XSxbJ2MnLDAuMzYsMC4wMywwLjkwLDAuMDYsMS4yMCwwLjA5XSxbJ2MnLDAuNjYsMC4wMCwwLjgxLC0wLjAzLDEuMDIsLTAuMjRdLFsnYycsMC4zMCwtMC4zMCwwLjM5LC0wLjcyLDAuMjcsLTEuMjNdLFsnYycsLTAuMDYsLTAuMjcsLTAuMDYsLTAuMjcsLTAuMDMsLTAuMzldLFsnYycsMC4xNSwtMC4zMCwwLjU0LC0wLjI3LDAuNjksMC4wM10sWydjJywwLjE1LDAuMzMsMC4yNywxLjAyLDAuMjcsMS41MF0sWydjJywwLjAwLDEuNDcsLTEuMTEsMi43MCwtMi41MiwyLjc5XSxbJ2MnLC0wLjU3LDAuMDMsLTEuMDIsLTAuMDksLTIuMDEsLTAuNTFdLFsnYycsLTEuMDIsLTAuNDIsLTEuMjMsLTAuNDgsLTIuMTMsLTAuNTRdLFsnYycsLTAuODEsLTAuMDYsLTAuOTYsLTAuMDMsLTEuMjYsMC4xOF0sWydjJywtMC4xMiwwLjA2LC0wLjI0LDAuMTIsLTAuMjcsMC4xMl0sWydjJywtMC4yNywwLjAwLC0wLjQ1LC0wLjMwLC0wLjM2LC0wLjUxXSxbJ2MnLDAuMDMsLTAuMDYsMS4zMiwtMS4zMiwyLjkxLC0yLjc5XSxbJ2wnLDIuODgsLTIuNzNdLFsnYycsLTAuMDMsMC4wMCwtMC4yMSwwLjAzLC0wLjQyLDAuMDZdLFsnYycsLTAuMjEsMC4wMywtMC43OCwwLjA5LC0xLjIzLDAuMTJdLFsnYycsLTEuMTEsMC4xMiwtMS4yMywwLjE1LC0xLjk1LDAuMjddLFsnYycsLTAuNzIsMC4xNSwtMS4xNywwLjE4LC0xLjI5LDAuMDldLFsnYycsLTAuMjcsLTAuMTgsLTAuMjEsLTAuNzUsMC4xMiwtMS4yNl0sWydjJywwLjM5LC0wLjYwLDAuOTMsLTEuMDIsMS41OSwtMS4yMF0sWyd6J11dLHc6OC41NzMsaDo4Ljc0M30sXG5cdFx0JysnOntkOltbJ00nLDMuNDgsLTkuM10sWydjJywwLjE4LC0wLjA5LDAuMzYsLTAuMDksMC41NCwwLjAwXSxbJ2MnLDAuMTgsMC4wOSwwLjI0LDAuMTUsMC4zMywwLjMwXSxbJ2wnLDAuMDYsMC4xNV0sWydsJywwLjAwLDEuMjldLFsnbCcsMC4wMCwxLjI5XSxbJ2wnLDEuMjksMC4wMF0sWydjJywxLjIzLDAuMDAsMS4yOSwwLjAwLDEuNDEsMC4wNl0sWydjJywwLjA2LDAuMDMsMC4xNSwwLjA5LDAuMTgsMC4xMl0sWydjJywwLjEyLDAuMDksMC4yMSwwLjMzLDAuMjEsMC40OF0sWydjJywwLjAwLDAuMTUsLTAuMDksMC4zOSwtMC4yMSwwLjQ4XSxbJ2MnLC0wLjAzLDAuMDMsLTAuMTIsMC4wOSwtMC4xOCwwLjEyXSxbJ2MnLC0wLjEyLDAuMDYsLTAuMTgsMC4wNiwtMS40MSwwLjA2XSxbJ2wnLC0xLjI5LDAuMDBdLFsnbCcsMC4wMCwxLjI5XSxbJ2MnLDAuMDAsMS4yMywwLjAwLDEuMjksLTAuMDYsMS40MV0sWydjJywtMC4wOSwwLjE4LC0wLjE1LDAuMjQsLTAuMzAsMC4zM10sWydjJywtMC4yMSwwLjA5LC0wLjM5LDAuMDksLTAuNTcsMC4wMF0sWydjJywtMC4xOCwtMC4wOSwtMC4yNCwtMC4xNSwtMC4zMywtMC4zM10sWydjJywtMC4wNiwtMC4xMiwtMC4wNiwtMC4xOCwtMC4wNiwtMS40MV0sWydsJywwLjAwLC0xLjI5XSxbJ2wnLC0xLjI5LDAuMDBdLFsnYycsLTEuMjMsMC4wMCwtMS4yOSwwLjAwLC0xLjQxLC0wLjA2XSxbJ2MnLC0wLjE4LC0wLjA5LC0wLjI0LC0wLjE1LC0wLjMzLC0wLjMzXSxbJ2MnLC0wLjA5LC0wLjE4LC0wLjA5LC0wLjM2LDAuMDAsLTAuNTRdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsnbCcsMC4xNSwtMC4wNl0sWydsJywxLjI2LDAuMDBdLFsnbCcsMS4yOSwwLjAwXSxbJ2wnLDAuMDAsLTEuMjldLFsnYycsMC4wMCwtMS4yMywwLjAwLC0xLjI5LDAuMDYsLTEuNDFdLFsnYycsMC4wOSwtMC4xOCwwLjE1LC0wLjI0LDAuMzMsLTAuMzNdLFsneiddXSx3OjcuNTA3LGg6Ny41MTV9LFxuXHRcdCcsJzp7ZDpbWydNJywxLjMyLC0zLjM2XSxbJ2MnLDAuNTcsLTAuMTUsMS4xNywwLjAzLDEuNTksMC40NV0sWydjJywwLjQ1LDAuNDUsMC42MCwwLjk2LDAuNTEsMS44OV0sWydjJywtMC4wOSwxLjIzLC0wLjQyLDIuNDYsLTAuOTksMy45M10sWydjJywtMC4zMCwwLjcyLC0wLjcyLDEuNjIsLTAuNzgsMS42OF0sWydjJywtMC4xOCwwLjIxLC0wLjUxLDAuMTgsLTAuNjYsLTAuMDZdLFsnYycsLTAuMDMsLTAuMDYsLTAuMDYsLTAuMTUsLTAuMDYsLTAuMThdLFsnYycsMC4wMCwtMC4wNiwwLjEyLC0wLjMzLDAuMjQsLTAuNjNdLFsnYycsMC44NCwtMS44MCwxLjAyLC0yLjYxLDAuNjksLTMuMjRdLFsnYycsLTAuMTIsLTAuMjQsLTAuMjcsLTAuMzYsLTAuNzUsLTAuNjBdLFsnYycsLTAuMzYsLTAuMTUsLTAuNDIsLTAuMjEsLTAuNjAsLTAuMzldLFsnYycsLTAuNjksLTAuNjksLTAuNjksLTEuNzEsMC4wMCwtMi40MF0sWydjJywwLjIxLC0wLjIxLDAuNTEsLTAuMzksMC44MSwtMC40NV0sWyd6J11dLHc6My40NTIsaDo4LjE0M30sXG5cdFx0Jy0nOntkOltbJ00nLDAuMTgsLTUuMzRdLFsnYycsMC4wOSwtMC4wNiwwLjE1LC0wLjA2LDIuMzEsLTAuMDZdLFsnYycsMi40NiwwLjAwLDIuMzcsMC4wMCwyLjQ2LDAuMjFdLFsnYycsMC4xMiwwLjIxLDAuMDMsMC40MiwtMC4xNSwwLjU0XSxbJ2MnLC0wLjA5LDAuMDYsLTAuMTUsMC4wNiwtMi4yOCwwLjA2XSxbJ2MnLC0yLjE2LDAuMDAsLTIuMjIsMC4wMCwtMi4zMSwtMC4wNl0sWydjJywtMC4yNywtMC4xNSwtMC4yNywtMC41NCwtMC4wMywtMC42OV0sWyd6J11dLHc6NS4wMDEsaDowLjgxfSxcblx0XHQnLic6e2Q6W1snTScsMS4zMiwtMy4zNl0sWydjJywxLjA1LC0wLjI3LDIuMTAsMC41NywyLjEwLDEuNjVdLFsnYycsMC4wMCwxLjA4LC0xLjA1LDEuOTIsLTIuMTAsMS42NV0sWydjJywtMC45MCwtMC4yMSwtMS41MCwtMS4xNCwtMS4yNiwtMi4wNF0sWydjJywwLjEyLC0wLjYzLDAuNjMsLTEuMTEsMS4yNiwtMS4yNl0sWyd6J11dLHc6My40MTMsaDozLjQwMn0sXG5cdFx0J3NjcmlwdHMud2VkZ2UnOntkOltbJ00nLC0zLjY2LC03LjQ0XSxbJ2MnLDAuMDYsLTAuMDksMC4wMCwtMC4wOSwwLjgxLDAuMDNdLFsnYycsMS44NiwwLjMwLDMuODQsMC4zMCw1LjczLDAuMDBdLFsnYycsMC43OCwtMC4xMiwwLjcyLC0wLjEyLDAuNzgsLTAuMDNdLFsnYycsMC4xNSwwLjE1LDAuMTIsMC4yNCwtMC4yNCwwLjYwXSxbJ2MnLC0wLjkzLDAuOTMsLTEuOTgsMi43NiwtMi42Nyw0LjYyXSxbJ2MnLC0wLjMwLDAuNzgsLTAuNTEsMS43MSwtMC41MSwyLjEzXSxbJ2MnLDAuMDAsMC4xNSwwLjAwLDAuMTgsLTAuMDYsMC4yN10sWydjJywtMC4xMiwwLjA5LC0wLjI0LDAuMDksLTAuMzYsMC4wMF0sWydjJywtMC4wNiwtMC4wOSwtMC4wNiwtMC4xMiwtMC4wNiwtMC4yN10sWydjJywwLjAwLC0wLjQyLC0wLjIxLC0xLjM1LC0wLjUxLC0yLjEzXSxbJ2MnLC0wLjY5LC0xLjg2LC0xLjc0LC0zLjY5LC0yLjY3LC00LjYyXSxbJ2MnLC0wLjM2LC0wLjM2LC0wLjM5LC0wLjQ1LC0wLjI0LC0wLjYwXSxbJ3onXV0sdzo3LjQ5LGg6Ny43NTJ9LFxuXHRcdCdzY3JpcHRzLnRodW1iJzp7ZDpbWydNJywtMC41NCwtMy42OV0sWydjJywwLjE1LC0wLjAzLDAuMzYsLTAuMDYsMC41MSwtMC4wNl0sWydjJywxLjQ0LDAuMDAsMi41OCwxLjExLDIuOTQsMi44NV0sWydjJywwLjA5LDAuNDgsMC4wOSwxLjMyLDAuMDAsMS44MF0sWydjJywtMC4yNywxLjQxLC0xLjA4LDIuNDMsLTIuMTYsMi43M10sWydsJywtMC4xOCwwLjA2XSxbJ2wnLDAuMDAsMC4xMl0sWydjJywwLjAzLDAuMDYsMC4wNiwwLjQ1LDAuMDksMC44N10sWydjJywwLjAzLDAuNTcsMC4wMywwLjc4LDAuMDAsMC44NF0sWydjJywtMC4wOSwwLjI3LC0wLjM5LDAuNDgsLTAuNjYsMC40OF0sWydjJywtMC4yNywwLjAwLC0wLjU3LC0wLjIxLC0wLjY2LC0wLjQ4XSxbJ2MnLC0wLjAzLC0wLjA2LC0wLjAzLC0wLjI3LDAuMDAsLTAuODRdLFsnYycsMC4wMywtMC40MiwwLjA2LC0wLjgxLDAuMDksLTAuODddLFsnbCcsMC4wMCwtMC4xMl0sWydsJywtMC4xOCwtMC4wNl0sWydjJywtMS4wOCwtMC4zMCwtMS44OSwtMS4zMiwtMi4xNiwtMi43M10sWydjJywtMC4wOSwtMC40OCwtMC4wOSwtMS4zMiwwLjAwLC0xLjgwXSxbJ2MnLDAuMTUsLTAuODQsMC41MSwtMS41MywxLjAyLC0yLjA0XSxbJ2MnLDAuMzksLTAuMzksMC44NCwtMC42MywxLjM1LC0wLjc1XSxbJ3onXSxbJ20nLDEuMDUsMC45MF0sWydjJywtMC4xNSwtMC4wOSwtMC4yMSwtMC4wOSwtMC40NSwtMC4xMl0sWydjJywtMC4xNSwwLjAwLC0wLjMwLDAuMDMsLTAuMzksMC4wM10sWydjJywtMC41NywwLjE4LC0wLjkwLDAuNzIsLTEuMDgsMS43NF0sWydjJywtMC4wNiwwLjQ4LC0wLjA2LDEuODAsMC4wMCwyLjI4XSxbJ2MnLDAuMTUsMC45MCwwLjQyLDEuNDQsMC45MCwxLjY1XSxbJ2MnLDAuMTgsMC4wOSwwLjIxLDAuMDksMC41MSwwLjA5XSxbJ2MnLDAuMzAsMC4wMCwwLjMzLDAuMDAsMC41MSwtMC4wOV0sWydjJywwLjQ4LC0wLjIxLDAuNzUsLTAuNzUsMC45MCwtMS42NV0sWydjJywwLjAzLC0wLjI3LDAuMDMsLTAuNTQsMC4wMywtMS4xNF0sWydjJywwLjAwLC0wLjYwLDAuMDAsLTAuODcsLTAuMDMsLTEuMTRdLFsnYycsLTAuMTUsLTAuOTAsLTAuNDUsLTEuNDQsLTAuOTAsLTEuNjVdLFsneiddXSx3OjUuOTU1LGg6OS43NX0sXG5cdFx0J3NjcmlwdHMub3Blbic6e2Q6W1snTScsLTAuNTQsLTMuNjldLFsnYycsMC4xNSwtMC4wMywwLjM2LC0wLjA2LDAuNTEsLTAuMDZdLFsnYycsMS40NCwwLjAwLDIuNTgsMS4xMSwyLjk0LDIuODVdLFsnYycsMC4wOSwwLjQ4LDAuMDksMS4zMiwwLjAwLDEuODBdLFsnYycsLTAuMzMsMS43NCwtMS40NywyLjg1LC0yLjkxLDIuODVdLFsnYycsLTEuNDQsMC4wMCwtMi41OCwtMS4xMSwtMi45MSwtMi44NV0sWydjJywtMC4wOSwtMC40OCwtMC4wOSwtMS4zMiwwLjAwLC0xLjgwXSxbJ2MnLDAuMTUsLTAuODQsMC41MSwtMS41MywxLjAyLC0yLjA0XSxbJ2MnLDAuMzksLTAuMzksMC44NCwtMC42MywxLjM1LC0wLjc1XSxbJ3onXSxbJ20nLDEuMTEsMC45MF0sWydjJywtMC4yMSwtMC4wOSwtMC4yNywtMC4wOSwtMC41MSwtMC4xMl0sWydjJywtMC4zMCwwLjAwLC0wLjQyLDAuMDMsLTAuNjYsMC4xNV0sWydjJywtMC4yNCwwLjEyLC0wLjUxLDAuMzksLTAuNjYsMC42M10sWydjJywtMC41NCwwLjkzLC0wLjYzLDIuNjQsLTAuMjEsMy44MV0sWydjJywwLjIxLDAuNTQsMC41MSwwLjkwLDAuOTMsMS4xMV0sWydjJywwLjIxLDAuMDksMC4yNCwwLjA5LDAuNTQsMC4wOV0sWydjJywwLjMwLDAuMDAsMC4zMywwLjAwLDAuNTQsLTAuMDldLFsnYycsMC40MiwtMC4yMSwwLjcyLC0wLjU3LDAuOTMsLTEuMTFdLFsnYycsMC4zNiwtMC45OSwwLjM2LC0yLjM3LDAuMDAsLTMuMzZdLFsnYycsLTAuMjEsLTAuNTQsLTAuNTEsLTAuOTAsLTAuOTAsLTEuMTFdLFsneiddXSx3OjUuOTU1LGg6Ny41fSxcblx0XHQnc2NyaXB0cy5sb25ncGhyYXNlJzp7ZDpbWydNJywxLjQ3LC0xNS4wOV0sWydjJywwLjM2LC0wLjA5LDAuNjYsLTAuMTgsMC42OSwtMC4xOF0sWydjJywwLjA2LDAuMDAsMC4wNiwwLjU0LDAuMDYsMTEuMjVdLFsnbCcsMC4wMCwxMS4yNV0sWydsJywtMC42MywwLjE1XSxbJ2MnLC0wLjY2LDAuMTgsLTEuNDQsMC4zOSwtMS41MCwwLjM5XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMDMsLTMuMzksLTAuMDMsLTExLjI1XSxbJ2wnLDAuMDAsLTExLjI1XSxbJ2wnLDAuMzYsLTAuMDldLFsnYycsMC4yMSwtMC4wNiwwLjY2LC0wLjE4LDEuMDUsLTAuMjddLFsneiddXSx3OjIuMTYsaDoyMy4wNH0sXG5cdFx0J3NjcmlwdHMubWVkaXVtcGhyYXNlJzp7ZDpbWydNJywxLjQ3LC03LjU5XSxbJ2MnLDAuMzYsLTAuMDksMC42NiwtMC4xOCwwLjY5LC0wLjE4XSxbJ2MnLDAuMDYsMC4wMCwwLjA2LDAuMzksMC4wNiw3LjUwXSxbJ2wnLDAuMDAsNy41MF0sWydsJywtMC42MywwLjE1XSxbJ2MnLC0wLjY2LDAuMTgsLTEuNDQsMC4zOSwtMS41MCwwLjM5XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMDMsLTIuMjgsLTAuMDMsLTcuNTBdLFsnbCcsMC4wMCwtNy41MF0sWydsJywwLjM2LC0wLjA5XSxbJ2MnLDAuMjEsLTAuMDYsMC42NiwtMC4xOCwxLjA1LC0wLjI3XSxbJ3onXV0sdzoyLjE2LGg6MTUuNTR9LFxuXHRcdCdzY3JpcHRzLnNob3J0cGhyYXNlJzp7ZDpbWydNJywxLjQ3LC03LjU5XSxbJ2MnLDAuMzYsLTAuMDksMC42NiwtMC4xOCwwLjY5LC0wLjE4XSxbJ2MnLDAuMDYsMC4wMCwwLjA2LDAuMjEsMC4wNiwzLjc1XSxbJ2wnLDAuMDAsMy43NV0sWydsJywtMC40MiwwLjA5XSxbJ2MnLC0wLjU3LDAuMTgsLTEuNjUsMC40NSwtMS43MSwwLjQ1XSxbJ2MnLC0wLjAzLDAuMDAsLTAuMDMsLTAuNzIsLTAuMDMsLTMuNzVdLFsnbCcsMC4wMCwtMy43NV0sWydsJywwLjM2LC0wLjA5XSxbJ2MnLDAuMjEsLTAuMDYsMC42NiwtMC4xOCwxLjA1LC0wLjI3XSxbJ3onXV0sdzoyLjE2LGg6OC4wNH0sXG5cdFx0J3NjcmlwdHMuc25hcCc6e2Q6W1snTScsNC41MCwtMy4zOV0sWydjJywwLjM2LC0wLjAzLDAuOTYsLTAuMDMsMS4zNSwwLjAwXSxbJ2MnLDEuNTYsMC4xNSwzLjE1LDAuOTAsNC4yMCwyLjAxXSxbJ2MnLDAuMjQsMC4yNywwLjMzLDAuNDIsMC4zMywwLjYwXSxbJ2MnLDAuMDAsMC4yNywwLjAzLDAuMjQsLTIuNDYsMi4yMl0sWydjJywtMS4yOSwxLjAyLC0yLjQwLDEuODYsLTIuNDksMS45Ml0sWydjJywtMC4xOCwwLjA5LC0wLjMwLDAuMDksLTAuNDgsMC4wMF0sWydjJywtMC4wOSwtMC4wNiwtMS4yMCwtMC45MCwtMi40OSwtMS45Ml0sWydjJywtMi40OSwtMS45OCwtMi40NiwtMS45NSwtMi40NiwtMi4yMl0sWydjJywwLjAwLC0wLjE4LDAuMDksLTAuMzMsMC4zMywtMC42MF0sWydjJywxLjA1LC0xLjA4LDIuNjQsLTEuODYsNC4xNywtMi4wMV0sWyd6J10sWydtJywxLjI5LDEuMTddLFsnYycsLTEuNDcsLTAuMTUsLTIuOTcsMC4zMCwtNC4xNCwxLjIwXSxbJ2wnLC0wLjE4LDAuMTVdLFsnbCcsMC4wNiwwLjA5XSxbJ2MnLDAuMTUsMC4xMiwzLjYzLDIuODUsMy42NiwyLjg1XSxbJ2MnLDAuMDMsMC4wMCwzLjUxLC0yLjczLDMuNjYsLTIuODVdLFsnbCcsMC4wNiwtMC4wOV0sWydsJywtMC4xOCwtMC4xNV0sWydjJywtMC44NCwtMC42NiwtMS44OSwtMS4wOCwtMi45NCwtMS4yMF0sWyd6J11dLHc6MTAuMzgsaDo2Ljg0fX07XG5cblx0Ly8gQ3VzdG9tIGNoYXJhY3RlcnMgdGhhdCB3ZXJlbid0IGdlbmVyYXRlZCBmcm9tIHRoZSBmb250OlxuXHRnbHlwaHNbJ25vdGVoZWFkcy5zbGFzaC53aG9sZSddID0ge2Q6W1snTScsNSwtNV0sWydsJywxLDFdLFsnbCcsLTUsNV0sWydsJywtMSwtMV0sWyd6J10sWydtJyw0LDZdLFsnbCcsLTUsLTVdLFsnbCcsMiwtMl0sWydsJyw1LDVdLFsneiddLFsnbScsMCwtMl0sWydsJywxLDFdLFsnbCcsLTUsNV0sWydsJywtMSwtMV0sWyd6J10sWydtJywtNCw2XSxbJ2wnLC01LC01XSxbJ2wnLDIsLTJdLFsnbCcsNSw1XSxbJ3onXV0sdzoxMC44MSxoOjE1LjYzfTtcblxuXHRnbHlwaHNbJ25vdGVoZWFkcy5zbGFzaC5xdWFydGVyJ10gPSB7ZDpbWydNJyw5LC02XSxbJ2wnLDAsNF0sWydsJywtOSw5XSxbJ2wnLDAsLTRdLFsneiddXSx3OjksaDo5fTtcblxuXHRnbHlwaHNbJ25vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyJ10gPSB7ZDpbWydNJywzLjYzLC00LjAyXSxbJ2MnLDAuMDksLTAuMDYsMC4xOCwtMC4wOSwwLjI0LC0wLjAzXSxbJ2MnLDAuMDMsMC4wMywwLjg3LDAuOTMsMS44MywyLjAxXSxbJ2MnLDEuNTAsMS42NSwxLjgwLDEuOTgsMS44MCwyLjA0XSxbJ2MnLDAuMDAsMC4wNiwtMC4zMCwwLjM5LC0xLjgwLDIuMDRdLFsnYycsLTAuOTYsMS4wOCwtMS44MCwxLjk4LC0xLjgzLDIuMDFdLFsnYycsLTAuMDYsMC4wNiwtMC4xNSwwLjAzLC0wLjI0LC0wLjAzXSxbJ2MnLC0wLjEyLC0wLjA5LC0zLjU0LC0zLjg0LC0zLjYwLC0zLjkzXSxbJ2MnLC0wLjAzLC0wLjAzLC0wLjAzLC0wLjA5LC0wLjAzLC0wLjE1XSxbJ2MnLDAuMDMsLTAuMDYsMy40NSwtMy44NCwzLjYzLC0zLjk2XSxbJ3onXV0sdzo3LjUsaDo4LjE2NX07XG5cbnZhciBwYXRoQ2xvbmUgPSBmdW5jdGlvbiAocGF0aEFycmF5KSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDAsIGlpID0gcGF0aEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcblx0XHRyZXNbaV0gPSBbXTtcblx0XHRmb3IgKHZhciBqID0gMCwgamogPSBwYXRoQXJyYXlbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykge1xuXHRcdFx0cmVzW2ldW2pdID0gcGF0aEFycmF5W2ldW2pdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxudmFyIHBhdGhTY2FsZSA9IGZ1bmN0aW9uIChwYXRoQXJyYXksIGt4LCBreSkge1xuXHRmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuXHRcdHZhciBwID0gcGF0aEFycmF5W2ldO1xuXHRcdHZhciBqLCBqajtcblx0XHRmb3IgKGogPSAxLCBqaiA9IHAubGVuZ3RoOyBqIDwgamo7IGorKykge1xuXHRcdFx0cFtqXSAqPSAoaiAlIDIpID8ga3ggOiBreTtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBHbHlwaHMgPSB7XG5cdHByaW50U3ltYm9sOiBmdW5jdGlvbiAoeCx5LHN5bWIscGFwZXIsIGtsYXNzKSB7XG4gICAgaWYgKCFnbHlwaHNbc3ltYl0pIHJldHVybiBudWxsO1xuICAgIHZhciBwYXRoQXJyYXkgPSBwYXRoQ2xvbmUoZ2x5cGhzW3N5bWJdLmQpO1xuICAgIHBhdGhBcnJheVswXVsxXSArPXg7XG4gICAgcGF0aEFycmF5WzBdWzJdICs9eTtcbiAgICB2YXIgcGF0aCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRoQXJyYXkubGVuZ3RoOyBpKyspXG4gICAgXHRwYXRoICs9IHBhdGhBcnJheVtpXS5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gcGFwZXIucGF0aCh7cGF0aDpwYXRoLCBzdHJva2U6XCJub25lXCIsIGZpbGw6XCIjMDAwMDAwXCIsICdjbGFzcyc6IGtsYXNzIH0pO1xuICAgfSxcblxuICBnZXRQYXRoRm9yU3ltYm9sOiBmdW5jdGlvbiAoeCx5LHN5bWIsc2NhbGV4LCBzY2FsZXkpIHtcbiAgICBzY2FsZXggPSBzY2FsZXggfHwgMTtcbiAgICBzY2FsZXkgPSBzY2FsZXkgfHwgMTtcbiAgICBpZiAoIWdseXBoc1tzeW1iXSkgcmV0dXJuIG51bGw7XG4gICAgdmFyIHBhdGhBcnJheSA9IHBhdGhDbG9uZShnbHlwaHNbc3ltYl0uZCk7XG4gICAgaWYgKHNjYWxleCE9PTEgfHwgc2NhbGV5IT09MSkgcGF0aFNjYWxlKHBhdGhBcnJheSxzY2FsZXgsc2NhbGV5KTtcbiAgICBwYXRoQXJyYXlbMF1bMV0gKz14O1xuICAgIHBhdGhBcnJheVswXVsyXSArPXk7XG5cbiAgICByZXR1cm4gcGF0aEFycmF5O1xuICB9LFxuXG4gIGdldFN5bWJvbFdpZHRoOiBmdW5jdGlvbiAoc3ltYm9sKSB7XG4gICAgaWYgKGdseXBoc1tzeW1ib2xdKSByZXR1cm4gZ2x5cGhzW3N5bWJvbF0udztcbiAgICByZXR1cm4gMDtcbiAgfSxcblxuXHRzeW1ib2xIZWlnaHRJblBpdGNoZXM6IGZ1bmN0aW9uKHN5bWJvbCkge1xuXHRcdHZhciBoZWlnaHQgPSBnbHlwaHNbc3ltYm9sXSA/IGdseXBoc1tzeW1ib2xdLmggOiAwO1xuXHRcdHJldHVybiBoZWlnaHQgLyBzcGFjaW5nLlNURVA7XG5cdH0sXG5cbiAgZ2V0U3ltYm9sQWxpZ246IGZ1bmN0aW9uIChzeW1ib2wpIHtcbiAgICBpZiAoc3ltYm9sLnN1YnN0cmluZygwLDcpPT09XCJzY3JpcHRzXCIgJiZcblx0c3ltYm9sIT09XCJzY3JpcHRzLnJvbGxcIikge1xuICAgICAgcmV0dXJuIFwiY2VudGVyXCI7XG4gICAgfVxuICAgIHJldHVybiBcImxlZnRcIjtcbiAgfSxcblxuICBnZXRZQ29ycjogZnVuY3Rpb24gKHN5bWJvbCkge1xuICAgIHN3aXRjaChzeW1ib2wpIHtcbiAgICBjYXNlIFwiMFwiOlxuICAgIGNhc2UgXCIxXCI6XG4gICAgY2FzZSBcIjJcIjpcbiAgICBjYXNlIFwiM1wiOlxuICAgIGNhc2UgXCI0XCI6XG4gICAgY2FzZSBcIjVcIjpcbiAgICBjYXNlIFwiNlwiOlxuICAgIGNhc2UgXCI3XCI6XG4gICAgY2FzZSBcIjhcIjpcbiAgICBjYXNlIFwiOVwiOlxuICAgIGNhc2UgXCIrXCI6IHJldHVybiAtMjtcbiAgICBjYXNlIFwidGltZXNpZy5jb21tb25cIjpcbiAgICBjYXNlIFwidGltZXNpZy5jdXRcIjogcmV0dXJuIDA7XG4gICAgY2FzZSBcImZsYWdzLmQzMm5kXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwiZmxhZ3MuZDY0dGhcIjogcmV0dXJuIC0yO1xuICAgIGNhc2UgXCJmbGFncy51MzJuZFwiOiByZXR1cm4gMTtcbiAgICBjYXNlIFwiZmxhZ3MudTY0dGhcIjogcmV0dXJuIDM7XG4gICAgY2FzZSBcInJlc3RzLndob2xlXCI6IHJldHVybiAxO1xuICAgIGNhc2UgXCJyZXN0cy5oYWxmXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwicmVzdHMuOHRoXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwicmVzdHMucXVhcnRlclwiOiByZXR1cm4gLTE7XG4gICAgY2FzZSBcInJlc3RzLjE2dGhcIjogcmV0dXJuIC0xO1xuICAgIGNhc2UgXCJyZXN0cy4zMm5kXCI6IHJldHVybiAtMTtcbiAgICBjYXNlIFwicmVzdHMuNjR0aFwiOiByZXR1cm4gLTE7XG5cdFx0Y2FzZSBcImZcIjpcblx0XHRjYXNlIFwibVwiOlxuXHRcdGNhc2UgXCJwXCI6XG5cdFx0Y2FzZSBcInNcIjpcblx0XHRjYXNlIFwielwiOlxuXHRcdFx0cmV0dXJuIC00O1xuXHRcdGNhc2UgXCJzY3JpcHRzLnRyaWxsXCI6XG5cdFx0Y2FzZSBcInNjcmlwdHMudXBib3dcIjpcblx0XHRjYXNlIFwic2NyaXB0cy5kb3duYm93XCI6XG5cdFx0XHRyZXR1cm4gLTI7XG5cdFx0Y2FzZSBcInNjcmlwdHMudWZlcm1hdGFcIjpcblx0XHRjYXNlIFwic2NyaXB0cy53ZWRnZVwiOlxuXHRcdGNhc2UgXCJzY3JpcHRzLnJvbGxcIjpcblx0XHRjYXNlIFwic2NyaXB0cy5zaG9ydHBocmFzZVwiOlxuXHRcdGNhc2UgXCJzY3JpcHRzLmxvbmdwaHJhc2VcIjpcblx0XHRcdHJldHVybiAtMTtcblx0XHRjYXNlIFwic2NyaXB0cy5kZmVybWF0YVwiOlxuXHRcdFx0cmV0dXJuIDE7XG4gICAgZGVmYXVsdDogcmV0dXJuIDA7XG4gICAgfVxuICB9LFxuXHRzZXRTeW1ib2w6IGZ1bmN0aW9uKG5hbWUsIHBhdGgpIHtcblx0XHRnbHlwaHNbbmFtZV0gPSBwYXRoO1xuXHR9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEdseXBoczsgLy8gd2UgbmVlZCB0aGUgZ2x5cGhzIGZvciBsYXlvdXQgaW5mb3JtYXRpb25cbiIsIi8vICAgIGFiY19jcmVhdGVfY2xlZi5qc1xuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vYWJjX2dseXBocycpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcblxudmFyIGNyZWF0ZUNsZWY7XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Y3JlYXRlQ2xlZiA9IGZ1bmN0aW9uKGVsZW0sIHR1bmVOdW1iZXIpIHtcblx0XHR2YXIgY2xlZjtcblx0XHR2YXIgb2N0YXZlID0gMDtcblx0XHR2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwwLDEwLCAnc3RhZmYtZXh0cmEnLCB0dW5lTnVtYmVyKTtcblx0XHRhYnNlbGVtLmlzQ2xlZiA9IHRydWU7XG5cdFx0c3dpdGNoIChlbGVtLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJ0cmVibGVcIjogY2xlZiA9IFwiY2xlZnMuR1wiOyBicmVhaztcblx0XHRcdGNhc2UgXCJ0ZW5vclwiOiBjbGVmPVwiY2xlZnMuQ1wiOyBicmVhaztcblx0XHRcdGNhc2UgXCJhbHRvXCI6IGNsZWY9XCJjbGVmcy5DXCI7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImJhc3NcIjogY2xlZj1cImNsZWZzLkZcIjsgYnJlYWs7XG5cdFx0XHRjYXNlICd0cmVibGUrOCc6IGNsZWYgPSBcImNsZWZzLkdcIjsgb2N0YXZlID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICd0ZW5vcis4JzpjbGVmPVwiY2xlZnMuQ1wiOyBvY3RhdmUgPSAxOyBicmVhaztcblx0XHRcdGNhc2UgJ2Jhc3MrOCc6IGNsZWY9XCJjbGVmcy5GXCI7IG9jdGF2ZSA9IDE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWx0bys4JzogY2xlZj1cImNsZWZzLkNcIjsgb2N0YXZlID0gMTsgYnJlYWs7XG5cdFx0XHRjYXNlICd0cmVibGUtOCc6IGNsZWYgPSBcImNsZWZzLkdcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAndGVub3ItOCc6Y2xlZj1cImNsZWZzLkNcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYmFzcy04JzogY2xlZj1cImNsZWZzLkZcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnYWx0by04JzogY2xlZj1cImNsZWZzLkNcIjsgb2N0YXZlID0gLTE7IGJyZWFrO1xuXHRcdFx0Y2FzZSAnbm9uZSc6IHJldHVybiBudWxsO1xuXHRcdFx0Y2FzZSAncGVyYyc6IGNsZWY9XCJjbGVmcy5wZXJjXCI7IGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDogYWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KFwiY2xlZj1cIitlbGVtLnR5cGUsIDAsIDAsIHVuZGVmaW5lZCwge3R5cGU6XCJkZWJ1Z1wifSkpO1xuXHRcdH1cblx0XHQvLyBpZiAoZWxlbS52ZXJ0aWNhbFBvcykge1xuXHRcdC8vIHBpdGNoID0gZWxlbS52ZXJ0aWNhbFBvcztcblx0XHQvLyB9XG5cdFx0dmFyIGR4ID01O1xuXHRcdGlmIChjbGVmKSB7XG5cdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoY2xlZiwgZHgsIGdseXBocy5nZXRTeW1ib2xXaWR0aChjbGVmKSwgZWxlbS5jbGVmUG9zKSk7XG5cblx0XHRcdGlmIChjbGVmID09PSAnY2xlZnMuRycpIHtcblx0XHRcdFx0YWJzZWxlbS50b3AgPSAxMztcblx0XHRcdFx0YWJzZWxlbS5ib3R0b20gPSAtMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFic2VsZW0udG9wID0gMTA7XG5cdFx0XHRcdGFic2VsZW0uYm90dG9tID0gMjtcblx0XHRcdH1cblx0XHRcdGlmIChvY3RhdmUgIT09IDApIHtcblx0XHRcdFx0dmFyIHNjYWxlID0gMiAvIDM7XG5cdFx0XHRcdHZhciBhZGp1c3RzcGFjaW5nID0gKGdseXBocy5nZXRTeW1ib2xXaWR0aChjbGVmKSAtIGdseXBocy5nZXRTeW1ib2xXaWR0aChcIjhcIikgKiBzY2FsZSkgLyAyO1xuXHRcdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCI4XCIsIGR4ICsgYWRqdXN0c3BhY2luZywgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwiOFwiKSAqIHNjYWxlLCAob2N0YXZlID4gMCkgPyBhYnNlbGVtLnRvcCArIDMgOiBhYnNlbGVtLmJvdHRvbSAtIDEsIHtcblx0XHRcdFx0XHRzY2FsZXg6IHNjYWxlLFxuXHRcdFx0XHRcdHNjYWxleTogc2NhbGVcblx0XHRcdFx0fSkpO1xuXHRcdFx0XHRhYnNlbGVtLnRvcCArPSAyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWJzZWxlbTtcblx0fTtcblxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDbGVmO1xuIiwiLy8gICAgYWJjX2NyZWF0ZV9rZXlfc2lnbmF0dXJlLmpzXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBBYnNvbHV0ZUVsZW1lbnQgPSByZXF1aXJlKCcuL2FiY19hYnNvbHV0ZV9lbGVtZW50Jyk7XG52YXIgZ2x5cGhzID0gcmVxdWlyZSgnLi9hYmNfZ2x5cGhzJyk7XG52YXIgUmVsYXRpdmVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfcmVsYXRpdmVfZWxlbWVudCcpO1xuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG5cbnZhciBjcmVhdGVLZXlTaWduYXR1cmU7XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Y3JlYXRlS2V5U2lnbmF0dXJlID0gZnVuY3Rpb24oZWxlbSwgdHVuZU51bWJlcikge1xuXHRcdGlmICghZWxlbS5hY2NpZGVudGFscyB8fCBlbGVtLmFjY2lkZW50YWxzLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdHZhciBhYnNlbGVtID0gbmV3IEFic29sdXRlRWxlbWVudChlbGVtLCAwLCAxMCwgJ3N0YWZmLWV4dHJhJywgdHVuZU51bWJlcik7XG5cdFx0YWJzZWxlbS5pc0tleVNpZyA9IHRydWU7XG5cdFx0dmFyIGR4ID0gMDtcblx0XHRwYXJzZUNvbW1vbi5lYWNoKGVsZW0uYWNjaWRlbnRhbHMsIGZ1bmN0aW9uKGFjYykge1xuXHRcdFx0dmFyIHN5bWJvbDtcblx0XHRcdHN3aXRjaChhY2MuYWNjKSB7XG5cdFx0XHRcdGNhc2UgXCJzaGFycFwiOiBzeW1ib2wgPSBcImFjY2lkZW50YWxzLnNoYXJwXCI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwibmF0dXJhbFwiOiBzeW1ib2wgPSBcImFjY2lkZW50YWxzLm5hdFwiOyBicmVhaztcblx0XHRcdFx0Y2FzZSBcImZsYXRcIjogc3ltYm9sID0gXCJhY2NpZGVudGFscy5mbGF0XCI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicXVhcnRlcnNoYXJwXCI6IHN5bWJvbCA9IFwiYWNjaWRlbnRhbHMuaGFsZnNoYXJwXCI7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicXVhcnRlcmZsYXRcIjogc3ltYm9sID0gXCJhY2NpZGVudGFscy5oYWxmZmxhdFwiOyBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogc3ltYm9sID0gXCJhY2NpZGVudGFscy5mbGF0XCI7XG5cdFx0XHR9XG5cdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoc3ltYm9sLCBkeCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCksIGFjYy52ZXJ0aWNhbFBvcywge3RoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhzeW1ib2wpfSkpO1xuXHRcdFx0ZHggKz0gZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCkgKyAyO1xuXHRcdH0sIHRoaXMpO1xuXHRcdHJldHVybiBhYnNlbGVtO1xuXHR9O1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVLZXlTaWduYXR1cmU7XG4iLCIvLyAgICBhYmNfY3JlYXRlX3RpbWVfc2lnbmF0dXJlLmpzXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBBYnNvbHV0ZUVsZW1lbnQgPSByZXF1aXJlKCcuL2FiY19hYnNvbHV0ZV9lbGVtZW50Jyk7XG52YXIgZ2x5cGhzID0gcmVxdWlyZSgnLi9hYmNfZ2x5cGhzJyk7XG52YXIgUmVsYXRpdmVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfcmVsYXRpdmVfZWxlbWVudCcpO1xuXG52YXIgY3JlYXRlVGltZVNpZ25hdHVyZTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRjcmVhdGVUaW1lU2lnbmF0dXJlID0gZnVuY3Rpb24oZWxlbSwgdHVuZU51bWJlcikge1xuXHRcdHZhciBhYnNlbGVtID0gbmV3IEFic29sdXRlRWxlbWVudChlbGVtLDAsMTAsICdzdGFmZi1leHRyYScsIHR1bmVOdW1iZXIpO1xuXHRcdGlmIChlbGVtLnR5cGUgPT09IFwic3BlY2lmaWVkXCIpIHtcblx0XHRcdHZhciB4ID0gMDtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS52YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoaSAhPT0gMCkge1xuXHRcdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudCgnKycsIHgrMSwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwiK1wiKSwgNiwge3RoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhcIitcIil9KSk7XG5cdFx0XHRcdFx0eCArPSBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoXCIrXCIpKzI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVsZW0udmFsdWVbaV0uZGVuKSB7XG5cdFx0XHRcdFx0dmFyIG51bVdpZHRoID0gMDtcblx0XHRcdFx0XHRmb3IgKHZhciBpMiA9IDA7IGkyIDwgZWxlbS52YWx1ZVtpXS5udW0ubGVuZ3RoOyBpMisrKVxuXHRcdFx0XHRcdFx0bnVtV2lkdGggKz0gZ2x5cGhzLmdldFN5bWJvbFdpZHRoKGVsZW0udmFsdWVbaV0ubnVtLmNoYXJBdChpMikpO1xuXHRcdFx0XHRcdHZhciBkZW5XaWR0aCA9IDA7XG5cdFx0XHRcdFx0Zm9yIChpMiA9IDA7IGkyIDwgZWxlbS52YWx1ZVtpXS5udW0ubGVuZ3RoOyBpMisrKVxuXHRcdFx0XHRcdFx0ZGVuV2lkdGggKz0gZ2x5cGhzLmdldFN5bWJvbFdpZHRoKGVsZW0udmFsdWVbaV0uZGVuLmNoYXJBdChpMikpO1xuXHRcdFx0XHRcdHZhciBtYXhXaWR0aCA9IE1hdGgubWF4KG51bVdpZHRoLCBkZW5XaWR0aCk7XG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0udmFsdWVbaV0ubnVtLCB4KyhtYXhXaWR0aC1udW1XaWR0aCkvMiwgbnVtV2lkdGgsIDgsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKGVsZW0udmFsdWVbaV0ubnVtLmNoYXJBdCgwKSkgfSkpO1xuXHRcdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLnZhbHVlW2ldLmRlbiwgeCsobWF4V2lkdGgtZGVuV2lkdGgpLzIsIGRlbldpZHRoLCA0LCB7IHRoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhlbGVtLnZhbHVlW2ldLmRlbi5jaGFyQXQoMCkpIH0pKTtcblx0XHRcdFx0XHR4ICs9IG1heFdpZHRoXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIHRoaXNXaWR0aCA9IDA7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaTMgPSAwOyBpMyA8IGVsZW0udmFsdWVbaV0ubnVtLmxlbmd0aDsgaTMrKylcblx0XHRcdFx0XHRcdHRoaXNXaWR0aCArPSBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoZWxlbS52YWx1ZVtpXS5udW0uY2hhckF0KGkzKSk7XG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0udmFsdWVbaV0ubnVtLCB4LCB0aGlzV2lkdGgsIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKGVsZW0udmFsdWVbaV0ubnVtLmNoYXJBdCgwKSkgfSkpO1xuXHRcdFx0XHRcdHggKz0gdGhpc1dpZHRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChlbGVtLnR5cGUgPT09IFwiY29tbW9uX3RpbWVcIikge1xuXHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwidGltZXNpZy5jb21tb25cIiwgMCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwidGltZXNpZy5jb21tb25cIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5jb21tb25cIikgfSkpO1xuXG5cdFx0fSBlbHNlIGlmIChlbGVtLnR5cGUgPT09IFwiY3V0X3RpbWVcIikge1xuXHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwidGltZXNpZy5jdXRcIiwgMCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwidGltZXNpZy5jdXRcIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5jdXRcIikgfSkpO1xuXHRcdH0gZWxzZSBpZiAoZWxlbS50eXBlID09PSBcInRlbXB1c19pbXBlcmZlY3R1bVwiKSB7XG5cdFx0XHRhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCJ0aW1lc2lnLmltcGVyZmVjdHVtXCIsIDAsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcInRpbWVzaWcuaW1wZXJmZWN0dW1cIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5pbXBlcmZlY3R1bVwiKSB9KSk7XG5cdFx0fSBlbHNlIGlmIChlbGVtLnR5cGUgPT09IFwidGVtcHVzX2ltcGVyZmVjdHVtX3Byb2xhdGlvXCIpIHtcblx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcInRpbWVzaWcuaW1wZXJmZWN0dW0yXCIsIDAsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcInRpbWVzaWcuaW1wZXJmZWN0dW0yXCIpLCA2LCB7IHRoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhcInRpbWVzaWcuaW1wZXJmZWN0dW0yXCIpIH0pKTtcblx0XHR9IGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gXCJ0ZW1wdXNfcGVyZmVjdHVtXCIpIHtcblx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcInRpbWVzaWcucGVyZmVjdHVtXCIsIDAsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcInRpbWVzaWcucGVyZmVjdHVtXCIpLCA2LCB7IHRoaWNrbmVzczogZ2x5cGhzLnN5bWJvbEhlaWdodEluUGl0Y2hlcyhcInRpbWVzaWcucGVyZmVjdHVtXCIpIH0pKTtcblx0XHR9IGVsc2UgaWYgKGVsZW0udHlwZSA9PT0gXCJ0ZW1wdXNfcGVyZmVjdHVtX3Byb2xhdGlvXCIpIHtcblx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcInRpbWVzaWcucGVyZmVjdHVtMlwiLCAwLCBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoXCJ0aW1lc2lnLnBlcmZlY3R1bTJcIiksIDYsIHsgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwidGltZXNpZy5wZXJmZWN0dW0yXCIpIH0pKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc29sZS5sb2coXCJ0aW1lIHNpZ25hdHVyZTpcIixlbGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFic2VsZW07XG5cdH07XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVRpbWVTaWduYXR1cmU7XG4iLCIvLyAgICBhYmNfZHluYW1pY19kZWNvcmF0aW9uLmpzOiBEZWZpbml0aW9uIG9mIHRoZSBEeW5hbWljRGVjb3JhdGlvbiBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG5cbnZhciBEeW5hbWljRGVjb3JhdGlvbiA9IGZ1bmN0aW9uIER5bmFtaWNEZWNvcmF0aW9uKGFuY2hvciwgZGVjLCBwb3NpdGlvbikge1xuXHR0aGlzLmFuY2hvciA9IGFuY2hvcjtcblx0dGhpcy5kZWMgPSBkZWM7XG5cdGlmIChwb3NpdGlvbiA9PT0gJ2JlbG93Jylcblx0XHR0aGlzLnZvbHVtZUhlaWdodEJlbG93ID0gNTtcblx0ZWxzZVxuXHRcdHRoaXMudm9sdW1lSGVpZ2h0QWJvdmUgPSA1O1xuXHR0aGlzLnBpdGNoID0gdW5kZWZpbmVkOyAvLyBUaGlzIHdpbGwgYmUgc2V0IGxhdGVyXG59O1xuXG5EeW5hbWljRGVjb3JhdGlvbi5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24ocG9zaXRpb25ZKSB7XG5cdGlmICh0aGlzLnZvbHVtZUhlaWdodEFib3ZlKVxuXHRcdHRoaXMucGl0Y2ggPSBwb3NpdGlvblkudm9sdW1lSGVpZ2h0QWJvdmU7XG5cdGVsc2Vcblx0XHR0aGlzLnBpdGNoID0gcG9zaXRpb25ZLnZvbHVtZUhlaWdodEJlbG93O1xufTtcblxuRHluYW1pY0RlY29yYXRpb24ucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihyZW5kZXJlciwgbGluZXN0YXJ0eCwgbGluZWVuZHgpIHtcblx0aWYgKHRoaXMucGl0Y2ggPT09IHVuZGVmaW5lZClcblx0XHR3aW5kb3cuY29uc29sZS5lcnJvcihcIkR5bmFtaWMgRWxlbWVudCB5LWNvb3JkaW5hdGUgbm90IHNldC5cIik7XG5cdHZhciBzY2FsZXggPSAxO1xuXHR2YXIgc2NhbGV5ID0gMTtcblx0cmVuZGVyZXIucHJpbnRTeW1ib2wodGhpcy5hbmNob3IueCwgdGhpcy5waXRjaCwgdGhpcy5kZWMsIHNjYWxleCwgc2NhbGV5LCByZW5kZXJlci5hZGRDbGFzc2VzKCdkZWNvcmF0aW9uJykpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBEeW5hbWljRGVjb3JhdGlvbjtcbiIsIi8qKlxuICogc3ByaW50ZigpIGZvciBKYXZhU2NyaXB0IHYuMC40XG4gKlxuIENvcHlyaWdodCAoYykgMjAwNy1wcmVzZW50LCBBbGV4YW5kcnUgTcSDcsSDyJl0ZWFudSA8aGVsbG9AYWxleGVpLnJvPlxuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cbiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlXG4gZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhpcyBzb2Z0d2FyZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlXG4gdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dFxuIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cblxuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEXG4gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1JcbiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7XG4gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EXG4gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICovXG5cbi8vZnVuY3Rpb24gc3RyX3JlcGVhdChpLCBtKSB7IGZvciAodmFyIG8gPSBbXTsgbSA+IDA7IG9bLS1tXSA9IGkpOyByZXR1cm4oby5qb2luKCcnKSk7IH1cblxudmFyIHNwcmludGYgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGkgPSAwLCBhLCBmID0gYXJndW1lbnRzW2krK10sIG8gPSBbXSwgbSwgcCwgYywgeDtcbiAgd2hpbGUgKGYpIHtcbiAgICBpZiAobSA9IC9eW15cXHgyNV0rLy5leGVjKGYpKSBvLnB1c2gobVswXSk7XG4gICAgZWxzZSBpZiAobSA9IC9eXFx4MjV7Mn0vLmV4ZWMoZikpIG8ucHVzaCgnJScpO1xuICAgIGVsc2UgaWYgKG0gPSAvXlxceDI1KD86KFxcZCspXFwkKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1mb3N1eFhdKS8uZXhlYyhmKSkge1xuICAgICAgaWYgKCgoYSA9IGFyZ3VtZW50c1ttWzFdIHx8IGkrK10pID09IG51bGwpIHx8IChhID09IHVuZGVmaW5lZCkpIHRocm93KFwiVG9vIGZldyBhcmd1bWVudHMuXCIpO1xuICAgICAgaWYgKC9bXnNdLy50ZXN0KG1bN10pICYmICh0eXBlb2YoYSkgIT0gJ251bWJlcicpKVxuICAgICAgICB0aHJvdyhcIkV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kIFwiICsgdHlwZW9mKGEpKTtcbiAgICAgIHN3aXRjaCAobVs3XSkge1xuICAgICAgICBjYXNlICdiJzogYSA9IGEudG9TdHJpbmcoMik7IGJyZWFrO1xuICAgICAgICBjYXNlICdjJzogYSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYSk7IGJyZWFrO1xuICAgICAgICBjYXNlICdkJzogYSA9IHBhcnNlSW50KGEpOyBicmVhaztcbiAgICAgICAgY2FzZSAnZSc6IGEgPSBtWzZdID8gYS50b0V4cG9uZW50aWFsKG1bNl0pIDogYS50b0V4cG9uZW50aWFsKCk7IGJyZWFrO1xuICAgICAgICBjYXNlICdmJzogYSA9IG1bNl0gPyBwYXJzZUZsb2F0KGEpLnRvRml4ZWQobVs2XSkgOiBwYXJzZUZsb2F0KGEpOyBicmVhaztcbiAgICAgICAgY2FzZSAnbyc6IGEgPSBhLnRvU3RyaW5nKDgpOyBicmVhaztcbiAgICAgICAgY2FzZSAncyc6IGEgPSAoKGEgPSBTdHJpbmcoYSkpICYmIG1bNl0gPyBhLnN1YnN0cmluZygwLCBtWzZdKSA6IGEpOyBicmVhaztcbiAgICAgICAgY2FzZSAndSc6IGEgPSBNYXRoLmFicyhhKTsgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3gnOiBhID0gYS50b1N0cmluZygxNik7IGJyZWFrO1xuICAgICAgICBjYXNlICdYJzogYSA9IGEudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IGJyZWFrO1xuICAgICAgfVxuICAgICAgYSA9ICgvW2RlZl0vLnRlc3QobVs3XSkgJiYgbVsyXSAmJiBhID4gMCA/ICcrJyArIGEgOiBhKTtcbiAgICAgIGMgPSBtWzNdID8gbVszXSA9PSAnMCcgPyAnMCcgOiBtWzNdLmNoYXJBdCgxKSA6ICcgJztcbiAgICAgIHggPSBtWzVdIC0gU3RyaW5nKGEpLmxlbmd0aDtcbiAgICAgIHAgPSBtWzVdID8gc3RyX3JlcGVhdChjLCB4KSA6ICcnO1xuICAgICAgby5wdXNoKG1bNF0gPyBhICsgcCA6IHAgKyBhKTtcbiAgICB9XG4gICAgZWxzZSB0aHJvdyAoXCJIdWggPyFcIik7XG4gICAgZiA9IGYuc3Vic3RyaW5nKG1bMF0ubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gby5qb2luKCcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc3ByaW50ZjtcbiIsIi8vICAgIGFiY19jcmVzY2VuZG9fZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgQ3Jlc2NlbmRvRWxlbSBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwcmludGYgPSByZXF1aXJlKCcuL3NwcmludGYnKTtcblxudmFyIENyZXNjZW5kb0VsZW0gPSBmdW5jdGlvbiBDcmVzY2VuZG9FbGVtKGFuY2hvcjEsIGFuY2hvcjIsIGRpciwgcG9zaXRpb25pbmcpIHtcblx0dGhpcy5hbmNob3IxID0gYW5jaG9yMTsgLy8gbXVzdCBoYXZlIGEgLnggYW5kIGEgLnBhcmVudCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBzdGFydHMgYXQgdGhlIFwiYmVnaW5uaW5nXCIgb2YgdGhlIGxpbmUgLSBhZnRlciBrZXlzaWcpXG5cdHRoaXMuYW5jaG9yMiA9IGFuY2hvcjI7IC8vIG11c3QgaGF2ZSBhIC54IHByb3BlcnR5IG9yIGJlIG51bGwgKG1lYW5zIGVuZHMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSlcblx0dGhpcy5kaXIgPSBkaXI7IC8vIGVpdGhlciBcIjxcIiBvciBcIj5cIlxuXHRpZiAocG9zaXRpb25pbmcgPT09ICdhYm92ZScpXG5cdFx0dGhpcy5keW5hbWljSGVpZ2h0QWJvdmUgPSA0O1xuXHRlbHNlXG5cdFx0dGhpcy5keW5hbWljSGVpZ2h0QmVsb3cgPSA0O1xuXHR0aGlzLnBpdGNoID0gdW5kZWZpbmVkOyAvLyBUaGlzIHdpbGwgYmUgc2V0IGxhdGVyXG59O1xuXG5DcmVzY2VuZG9FbGVtLnByb3RvdHlwZS5zZXRVcHBlckFuZExvd2VyRWxlbWVudHMgPSBmdW5jdGlvbihwb3NpdGlvblkpIHtcblx0aWYgKHRoaXMuZHluYW1pY0hlaWdodEFib3ZlKVxuXHRcdHRoaXMucGl0Y2ggPSBwb3NpdGlvblkuZHluYW1pY0hlaWdodEFib3ZlO1xuXHRlbHNlXG5cdFx0dGhpcy5waXRjaCA9IHBvc2l0aW9uWS5keW5hbWljSGVpZ2h0QmVsb3c7XG59O1xuXG5DcmVzY2VuZG9FbGVtLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKHJlbmRlcmVyKSB7XG5cdGlmICh0aGlzLnBpdGNoID09PSB1bmRlZmluZWQpXG5cdFx0d2luZG93LmNvbnNvbGUuZXJyb3IoXCJDcmVzY2VuZG8gRWxlbWVudCB5LWNvb3JkaW5hdGUgbm90IHNldC5cIik7XG5cdHZhciB5ID0gcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaCkgKyA0OyAvLyBUaGlzIGlzIHRoZSB0b3AgcGl4ZWwgdG8gdXNlIChpdCBpcyBvZmZzZXQgYSBsaXR0bGUgc28gdGhhdCBpdCBsb29rcyBnb29kIHdpdGggdGhlIHZvbHVtZSBtYXJrcy4pXG5cdHZhciBoZWlnaHQgPSA4O1xuXHRpZiAodGhpcy5kaXIgPT09IFwiPFwiKSB7XG5cdFx0dGhpcy5kcmF3TGluZShyZW5kZXJlciwgeStoZWlnaHQvMiwgeSk7XG5cdFx0dGhpcy5kcmF3TGluZShyZW5kZXJlciwgeStoZWlnaHQvMiwgeStoZWlnaHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuZHJhd0xpbmUocmVuZGVyZXIsIHksIHkraGVpZ2h0LzIpO1xuXHRcdHRoaXMuZHJhd0xpbmUocmVuZGVyZXIsIHkraGVpZ2h0LCB5K2hlaWdodC8yKTtcblx0fVxufTtcblxuQ3Jlc2NlbmRvRWxlbS5wcm90b3R5cGUuZHJhd0xpbmUgPSBmdW5jdGlvbiAocmVuZGVyZXIsIHkxLCB5Mikge1xuXHQvLyBUT0RPLVBFUjogVGhpcyBpcyBqdXN0IGEgcXVpY2sgaGFjayB0byBtYWtlIHRoZSBkeW5hbWljIG1hcmtzIG5vdCBjcmFzaCBpZiB0aGV5IGFyZSBtaXNtYXRjaGVkLiBTZWUgdGhlIHNsdXIgdHJlYXRtZW50IGZvciB0aGUgd2F5IHRvIGdldCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQuXG5cdHZhciBsZWZ0ID0gdGhpcy5hbmNob3IxID8gdGhpcy5hbmNob3IxLnggOiAwO1xuXHR2YXIgcmlnaHQgPSB0aGlzLmFuY2hvcjIgPyB0aGlzLmFuY2hvcjIueCA6IDgwMDtcblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmXCIsXG5cdFx0bGVmdCwgeTEsIHJpZ2h0LCB5Mik7XG5cdHJlbmRlcmVyLnByaW50UGF0aCh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCIjMDAwMDAwXCIsICdjbGFzcyc6IHJlbmRlcmVyLmFkZENsYXNzZXMoJ2RlY29yYXRpb24nKX0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDcmVzY2VuZG9FbGVtO1xuIiwiLy8gICAgYWJjX3RpZV9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBUaWVFbGVtZW50IGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgVGllRWxlbSA9IGZ1bmN0aW9uIFRpZUVsZW0ob3B0aW9ucykge1xuLy9cdGNvbnNvbGUubG9nKFwiY29uc3RydWN0b3JcIiwgb3B0aW9ucy5hbmNob3IxID8gb3B0aW9ucy5hbmNob3IxLnBpdGNoIDogXCJOL0FcIiwgb3B0aW9ucy5hbmNob3IyID8gb3B0aW9ucy5hbmNob3IyLnBpdGNoIDogXCJOL0FcIiwgb3B0aW9ucy5pc1RpZSwgb3B0aW9ucy5pc0dyYWNlKTtcblx0dGhpcy5hbmNob3IxID0gb3B0aW9ucy5hbmNob3IxOyAvLyBtdXN0IGhhdmUgYSAueCBhbmQgYSAucGl0Y2gsIGFuZCBhIC5wYXJlbnQgcHJvcGVydHkgb3IgYmUgbnVsbCAobWVhbnMgc3RhcnRzIGF0IHRoZSBcImJlZ2lubmluZ1wiIG9mIHRoZSBsaW5lIC0gYWZ0ZXIga2V5c2lnKVxuXHR0aGlzLmFuY2hvcjIgPSBvcHRpb25zLmFuY2hvcjI7IC8vIG11c3QgaGF2ZSBhIC54IGFuZCBhIC5waXRjaCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpXG5cdGlmIChvcHRpb25zLmlzR3JhY2UpXG5cdFx0dGhpcy5pc0dyYWNlID0gdHJ1ZTtcblx0aWYgKG9wdGlvbnMuZml4ZWRZKVxuXHRcdHRoaXMuZml4ZWRZID0gdHJ1ZTtcblx0aWYgKG9wdGlvbnMuc3RlbURpcilcblx0XHR0aGlzLnN0ZW1EaXIgPSBvcHRpb25zLnN0ZW1EaXI7XG5cdGlmIChvcHRpb25zLnZvaWNlTnVtYmVyICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy52b2ljZU51bWJlciA9IG9wdGlvbnMudm9pY2VOdW1iZXI7XG5cdHRoaXMuaW50ZXJuYWxOb3RlcyA9IFtdO1xufTtcblxuVGllRWxlbS5wcm90b3R5cGUuYWRkSW50ZXJuYWxOb3RlID0gZnVuY3Rpb24obm90ZSkge1xuXHR0aGlzLmludGVybmFsTm90ZXMucHVzaChub3RlKTtcbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLnNldEVuZEFuY2hvciA9IGZ1bmN0aW9uKGFuY2hvcjIpIHtcbi8vXHRjb25zb2xlLmxvZyhcImVuZFwiLCB0aGlzLmFuY2hvcjEgPyB0aGlzLmFuY2hvcjEucGl0Y2ggOiBcIk4vQVwiLCBhbmNob3IyID8gYW5jaG9yMi5waXRjaCA6IFwiTi9BXCIsIHRoaXMuaXNUaWUsIHRoaXMuaXNHcmFjZSk7XG5cdHRoaXMuYW5jaG9yMiA9IGFuY2hvcjI7IC8vIG11c3QgaGF2ZSBhIC54IGFuZCBhIC5waXRjaCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpXG59O1xuXG4vLyBJZiB3ZSBlbmNvdW50ZXIgYSByZXBlYXQgc2lnbiwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGV4dGVuZCBlaXRoZXIgYSB0aWUgb3IgYSBzbHVyIHBhc3QgaXQsIHNvIHRoZXNlIGFyZSBjYWxsZWQgdG8gYmUgYSBsaW1pdC5cblRpZUVsZW0ucHJvdG90eXBlLnNldFN0YXJ0WCA9IGZ1bmN0aW9uKHN0YXJ0TGltaXRFbGVtKSB7XG5cdHRoaXMuc3RhcnRMaW1pdFggPSBzdGFydExpbWl0RWxlbTtcbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLnNldEVuZFggPSBmdW5jdGlvbihlbmRMaW1pdEVsZW0pIHtcblx0dGhpcy5lbmRMaW1pdFggPSBlbmRMaW1pdEVsZW07XG59O1xuXG5UaWVFbGVtLnByb3RvdHlwZS5zZXRIaW50ID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLmhpbnQgPSB0cnVlO1xufTtcblxuVGllRWxlbS5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24ocG9zaXRpb25ZKSB7XG5cdC8vIERvZXNuJ3QgZGVwZW5kIG9uIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLlxufTtcblxuVGllRWxlbS5wcm90b3R5cGUuY2FsY1RpZURpcmVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0Ly8gVGhlIHJ1bGVzOlxuXHQvLyAxKSBJZiBpdCBpcyBpbiBhIGdyYWNlIG5vdGUgZ3JvdXAsIHRoZW4gdGhlIGRpcmVjdGlvbiBpcyBhbHdheXMgQkVMT1cuXG5cdC8vIDIpIElmIGl0IGlzIGluIGEgc2luZ2xlIHZvaWNlLCB0aGVuIHRoZSBkaXJlY3Rpb24gaXMgYWx3YXlzIE9QUE9TSVRFIG9mIHRoZSBzdGVtIChvciB3aGVyZSB0aGUgc3RlbSB3b3VsZCBoYXZlIGJlZW4gaW4gdGhlIGNhc2Ugb2Ygd2hvbGUgbm90ZXMuKVxuXHQvLyAzKSBJZiB0aGUgc3RlbSBkaXJlY3Rpb24gaXMgZm9yY2VkIChwcm9iYWJseSBiZWNhdXNlIHRoZXJlIGFyZSB0d28gdm9pY2VzIG9uIHRoZSBzYW1lIGxpbmUpLCB0aGVuIHRoZSBkaXJlY3Rpb24gaXMgdGhlIFNBTUUgYXMgdGhlIHN0ZW0gZGlyZWN0aW9uLlxuXG5cdGlmICh0aGlzLmlzR3JhY2UpXG5cdFx0dGhpcy5hYm92ZSA9IGZhbHNlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID09PSAwKVxuXHRcdHRoaXMuYWJvdmUgPSB0cnVlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID4gMClcblx0XHR0aGlzLmFib3ZlID0gZmFsc2U7XG5cdGVsc2Uge1xuXHRcdHZhciByZWZlcmVuY2VQaXRjaDtcblx0XHRpZiAodGhpcy5hbmNob3IxKVxuXHRcdFx0cmVmZXJlbmNlUGl0Y2ggPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IyKVxuXHRcdFx0cmVmZXJlbmNlUGl0Y2ggPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdFx0ZWxzZVxuXHRcdFx0cmVmZXJlbmNlUGl0Y2ggPSAxNDsgLy8gVE9ETy1QRVI6IHRoaXMgY2FuJ3QgcmVhbGx5IGhhcHBlbiBub3JtYWxseS4gVGhpcyB3b3VsZCBpbXBseSB0aGF0IGEgdGllIGNyb3NzZWQgb3ZlciB0aHJlZSBsaW5lcywgc29tZXRoaW5nIGxpa2UgXCJDLVxcbnpcXG5DXCJcblx0XHQvLyBQdXQgdGhlIGFyYyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIG9mIHRoZSBzdGVtLiBUaGF0IGlzbid0IGFsd2F5cyB0aGUgcGl0Y2ggaWYgb25lIG9yIGJvdGggb2YgdGhlIG5vdGVzIGFyZSBiZWFtZWQgd2l0aCBzb21ldGhpbmcgdGhhdCBhZmZlY3RzIGl0cyBzdGVtLlxuXHRcdGlmICgodGhpcy5hbmNob3IxICYmIHRoaXMuYW5jaG9yMS5zdGVtRGlyID09PSAnZG93bicpICYmICh0aGlzLmFuY2hvcjIgJiYgdGhpcy5hbmNob3IyLnN0ZW1EaXIgPT09IFwiZG93blwiKSlcblx0XHRcdHRoaXMuYWJvdmUgPSB0cnVlO1xuXHRcdGVsc2UgaWYgKCh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IxLnN0ZW1EaXIgPT09ICd1cCcpICYmICh0aGlzLmFuY2hvcjIgJiYgdGhpcy5hbmNob3IyLnN0ZW1EaXIgPT09IFwidXBcIikpXG5cdFx0XHR0aGlzLmFib3ZlID0gZmFsc2U7XG5cdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IxICYmIHRoaXMuYW5jaG9yMilcblx0XHRcdHRoaXMuYWJvdmUgPSByZWZlcmVuY2VQaXRjaCA+PSA2O1xuXHRcdGVsc2UgaWYgKHRoaXMuYW5jaG9yMSlcblx0XHRcdHRoaXMuYWJvdmUgPSB0aGlzLmFuY2hvcjEuc3RlbURpciA9PT0gXCJkb3duXCI7XG5cdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IyKVxuXHRcdFx0dGhpcy5hYm92ZSA9IHRoaXMuYW5jaG9yMi5zdGVtRGlyID09PSBcImRvd25cIjtcblx0XHRlbHNlXG5cdFx0XHR0aGlzLmFib3ZlID0gcmVmZXJlbmNlUGl0Y2ggPj0gNjtcblx0fVxufTtcblxuLy8gRnJvbSBcInN0YW5kYXJkIG11c2ljIG5vdGF0aW9uIHByYWN0aWNlXCIgYnkgTXVzaWMgUHVibGlzaGVyc+KAmSBBc3NvY2lhdGlvbjpcbi8vIDEpIFNsdXJzIGFyZSBwbGFjZWQgdW5kZXIgdGhlIG5vdGUgaGVhZHMgaWYgYWxsIHN0ZW1zIGdvIHVwLlxuLy8gMikgU2x1cnMgYXJlIHBsYWNlZCBvdmVyIHRoZSBub3RlIGhlYWRzIGlmIGFsbCBzdGVtcyBnbyBkb3duLlxuLy8gMykgSWYgdGhlcmUgYXJlIGJvdGggdXAgc3RlbXMgYW5kIGRvd24gc3RlbXMsIHByZWZlciBwbGFjaW5nIHRoZSBzbHVyIG92ZXIuXG4vLyA0KSBXaGVuIHRoZSBzdGFmZiBoYXMgb3Bwb3NpdGUgc3RlbW1lZCB2b2ljZXMsIGFsbCBzbHVycyBzaG91bGQgYmUgb24gdGhlIHN0ZW1tZWQgc2lkZS5cblxuVGllRWxlbS5wcm90b3R5cGUuY2FsY1NsdXJEaXJlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLmlzR3JhY2UpXG5cdFx0dGhpcy5hYm92ZSA9IGZhbHNlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID09PSAwKVxuXHRcdHRoaXMuYWJvdmUgPSB0cnVlO1xuXHRlbHNlIGlmICh0aGlzLnZvaWNlTnVtYmVyID4gMClcblx0XHR0aGlzLmFib3ZlID0gZmFsc2U7XG5cdGVsc2Uge1xuXHRcdHZhciBoYXNEb3duU3RlbSA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IxLnN0ZW1EaXIgPT09IFwiZG93blwiKVxuXHRcdFx0aGFzRG93blN0ZW0gPSB0cnVlO1xuXHRcdGlmICh0aGlzLmFuY2hvcjIgJiYgdGhpcy5hbmNob3IyLnN0ZW1EaXIgPT09IFwiZG93blwiKVxuXHRcdFx0aGFzRG93blN0ZW0gPSB0cnVlO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcm5hbE5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbiA9IHRoaXMuaW50ZXJuYWxOb3Rlc1tpXTtcblx0XHRcdGlmIChuLnN0ZW1EaXIgPT09IFwiZG93blwiKVxuXHRcdFx0XHRoYXNEb3duU3RlbSA9IHRydWU7XG5cdFx0fVxuXHRcdHRoaXMuYWJvdmUgPSBoYXNEb3duU3RlbTtcblx0fVxufTtcblxuVGllRWxlbS5wcm90b3R5cGUuY2FsY1ggPSBmdW5jdGlvbiAobGluZVN0YXJ0WCwgbGluZUVuZFgpIHtcblx0aWYgKHRoaXMuYW5jaG9yMSkge1xuXHRcdHRoaXMuc3RhcnRYID0gdGhpcy5hbmNob3IxLng7IC8vIFRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHN0YXJ0aW5nIGVsZW1lbnQgdG8gYXR0YWNoIHRvLlxuXHRcdGlmICh0aGlzLmFuY2hvcjEuc2NhbGV4IDwgMSkgLy8gdGhpcyBpcyBhIGdyYWNlIG5vdGUgLSBkb24ndCBvZmZzZXQgdGhlIHRpZSBhcyBtdWNoLlxuXHRcdFx0dGhpcy5zdGFydFggLT0gMztcblx0fSBlbHNlIGlmICh0aGlzLnN0YXJ0TGltaXRYKVxuXHRcdHRoaXMuc3RhcnRYID0gdGhpcy5zdGFydExpbWl0WC54K3RoaXMuc3RhcnRMaW1pdFgudzsgLy8gaWYgdGhlcmUgaXMgbm8gc3RhcnQgZWxlbWVudCwgYnV0IHRoZXJlIGlzIGEgcmVwZWF0IG1hcmsgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgbGluZS5cblx0ZWxzZVxuXHRcdHRoaXMuc3RhcnRYID0gbGluZVN0YXJ0WDsgLy8gVGhlcmUgaXMgbm8gZWxlbWVudCBhbmQgbm8gcmVwZWF0IG1hcms6IGV4dGVuZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLlxuXG5cdGlmICh0aGlzLmFuY2hvcjIpXG5cdFx0dGhpcy5lbmRYID0gdGhpcy5hbmNob3IyLng7IC8vIFRoZSBub3JtYWwgY2FzZSB3aGVyZSB0aGVyZSBpcyBhIHN0YXJ0aW5nIGVsZW1lbnQgdG8gYXR0YWNoIHRvLlxuXHRlbHNlIGlmICh0aGlzLmVuZExpbWl0WClcblx0XHR0aGlzLmVuZFggPSB0aGlzLmVuZExpbWl0WC54OyAvLyBpZiB0aGVyZSBpcyBubyBzdGFydCBlbGVtZW50LCBidXQgdGhlcmUgaXMgYSByZXBlYXQgbWFyayBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lLlxuXHRlbHNlXG5cdFx0dGhpcy5lbmRYID0gbGluZUVuZFg7IC8vIFRoZXJlIGlzIG5vIGVsZW1lbnQgYW5kIG5vIHJlcGVhdCBtYXJrOiBleHRlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZS5cbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLmNhbGNUaWVZID0gZnVuY3Rpb24gKCkge1xuXHQvLyBJZiB0aGUgdGllIGNvbWVzIGZyb20gYW5vdGhlciBsaW5lLCB0aGVuIG9uZSBvciBib3RoIGFuY2hvcnMgd2lsbCBiZSBtaXNzaW5nLlxuXHRpZiAodGhpcy5hbmNob3IxKVxuXHRcdHRoaXMuc3RhcnRZID0gdGhpcy5hbmNob3IxLnBpdGNoO1xuXHRlbHNlIGlmICh0aGlzLmFuY2hvcjIpXG5cdFx0dGhpcy5zdGFydFkgPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdGVsc2Vcblx0XHR0aGlzLnN0YXJ0WSA9IHRoaXMuYWJvdmUgPyAxNCA6IDA7XG5cblx0aWYgKHRoaXMuYW5jaG9yMilcblx0XHR0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdGVsc2UgaWYgKHRoaXMuYW5jaG9yMSlcblx0XHR0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cdGVsc2Vcblx0XHR0aGlzLmVuZFkgPSB0aGlzLmFib3ZlID8gMTQgOiAwO1xufTtcblxuLy8gRnJvbSBcInN0YW5kYXJkIG11c2ljIG5vdGF0aW9uIHByYWN0aWNlXCIgYnkgTXVzaWMgUHVibGlzaGVyc+KAmSBBc3NvY2lhdGlvbjpcbi8vIDEpIElmIHRoZSBhbmNob3Igbm90ZSBpcyBkb3duIHN0ZW0sIHRoZSBzbHVyIHBvaW50cyB0byB0aGUgbm90ZSBoZWFkLlxuLy8gMikgSWYgdGhlIGFuY2hvciBub3RlIGlzIHVwIHN0ZW0sIGFuZCB0aGUgc2x1ciBpcyBvdmVyLCB0aGVuIHBvaW50IHRvIG1pZGRsZSBvZiBzdGVtLlxuXG5UaWVFbGVtLnByb3RvdHlwZS5jYWxjU2x1clkgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IyKSB7XG5cdFx0aWYgKHRoaXMuYWJvdmUgJiYgdGhpcy5hbmNob3IxLnN0ZW1EaXIgPT09IFwidXBcIiAmJiAhdGhpcy5maXhlZFkpIHtcblx0XHRcdHRoaXMuc3RhcnRZID0gKHRoaXMuYW5jaG9yMS5oaWdoZXN0VmVydCArIHRoaXMuYW5jaG9yMS5waXRjaCkgLyAyO1xuXHRcdFx0dGhpcy5zdGFydFggKz0gdGhpcy5hbmNob3IxLncvMjsgLy8gV2hlbiBnb2luZyB0byB0aGUgbWlkZGxlIG9mIHRoZSBzdGVtLCBidW1wIHRoZSBsaW5lIHRvIHRoZSByaWdodCBhIGxpdHRsZSBiaXQgdG8gbWFrZSBpdCBsb29rIHJpZ2h0LlxuXHRcdH0gZWxzZVxuXHRcdFx0dGhpcy5zdGFydFkgPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cblx0XHQvLyBJZiB0aGUgY2xvc2luZyBub3RlIGhhcyBhbiB1cCBzdGVtLCBhbmQgaXQgaXMgYmVhbWVkLCBhbmQgaXQgaXNuJ3QgdGhlIGZpcnN0IG5vdGUgaW4gdGhlIGJlYW0sIHRoZW4gdGhlIGJlYW0gd2lsbCBnZXQgaW4gdGhlIHdheS5cblx0XHR2YXIgYmVhbUludGVyZmVyZXMgPSB0aGlzLmFuY2hvcjIucGFyZW50LmJlYW0gJiYgdGhpcy5hbmNob3IyLnBhcmVudC5iZWFtLnN0ZW1zVXAgJiYgdGhpcy5hbmNob3IyLnBhcmVudC5iZWFtLmVsZW1zWzBdICE9PSB0aGlzLmFuY2hvcjIucGFyZW50O1xuXHRcdHZhciBtaWRQb2ludCA9ICh0aGlzLmFuY2hvcjIuaGlnaGVzdFZlcnQgKyB0aGlzLmFuY2hvcjIucGl0Y2gpIC8gMjtcblx0XHRpZiAodGhpcy5hYm92ZSAmJiB0aGlzLmFuY2hvcjIuc3RlbURpciA9PT0gXCJ1cFwiICYmICF0aGlzLmZpeGVkWSAmJiAhYmVhbUludGVyZmVyZXMgJiYgKG1pZFBvaW50IDwgdGhpcy5zdGFydFkpKSB7XG5cdFx0XHR0aGlzLmVuZFkgPSBtaWRQb2ludDtcblx0XHRcdHRoaXMuZW5kWCArPSB0aGlzLmFuY2hvcjIudy8yOyAvLyBXaGVuIGdvaW5nIHRvIHRoZSBtaWRkbGUgb2YgdGhlIHN0ZW0sIGJ1bXAgdGhlIGxpbmUgdG8gdGhlIHJpZ2h0IGEgbGl0dGxlIGJpdCB0byBtYWtlIGl0IGxvb2sgcmlnaHQuXG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLmVuZFkgPSB0aGlzLmFib3ZlICYmIGJlYW1JbnRlcmZlcmVzID8gdGhpcy5hbmNob3IyLmhpZ2hlc3RWZXJ0IDogdGhpcy5hbmNob3IyLnBpdGNoO1xuXG5cdH0gZWxzZSBpZiAodGhpcy5hbmNob3IxKSB7XG5cdFx0dGhpcy5zdGFydFkgPSB0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjEucGl0Y2g7XG5cdH0gZWxzZSBpZiAodGhpcy5hbmNob3IyKSB7XG5cdFx0dGhpcy5zdGFydFkgPSB0aGlzLmVuZFkgPSB0aGlzLmFuY2hvcjIucGl0Y2g7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGUgc2x1ciBjb3ZlcnMgdGhlIGVudGlyZSBsaW5lLlxuXHRcdC8vIFRPRE8tUEVSOiBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFsIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBsaW5lIGFyZS5cblx0XHR0aGlzLnN0YXJ0WSA9IHRoaXMuYWJvdmUgPyAxNCA6IDA7XG5cdFx0dGhpcy5lbmRZID0gdGhpcy5hYm92ZSA/IDE0IDogMDtcblx0fVxufTtcblxuVGllRWxlbS5wcm90b3R5cGUuYXZvaWRDb2xsaXNpb25BYm92ZSA9IGZ1bmN0aW9uICgpIHtcblx0Ly8gRG91YmxlIGNoZWNrIHRoYXQgYW4gaW50ZXJpb3Igbm90ZSBpbiB0aGUgc2x1ciBpc24ndCBzbyBoaWdoIHRoYXQgaXQgaW50ZXJmZXJlcy5cblx0aWYgKHRoaXMuYWJvdmUpIHtcblx0XHR2YXIgbWF4SW5uZXJIZWlnaHQgPSAtNTA7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmludGVybmFsTm90ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmICh0aGlzLmludGVybmFsTm90ZXNbaV0uaGlnaGVzdFZlcnQgPiBtYXhJbm5lckhlaWdodClcblx0XHRcdFx0bWF4SW5uZXJIZWlnaHQgPSB0aGlzLmludGVybmFsTm90ZXNbaV0uaGlnaGVzdFZlcnQ7XG5cdFx0fVxuXHRcdGlmIChtYXhJbm5lckhlaWdodCA+IHRoaXMuc3RhcnRZICYmIG1heElubmVySGVpZ2h0ID4gdGhpcy5lbmRZKVxuXHRcdFx0dGhpcy5zdGFydFkgPSB0aGlzLmVuZFkgPSBtYXhJbm5lckhlaWdodCAtIDE7XG5cdH1cbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLmxheW91dCA9IGZ1bmN0aW9uIChsaW5lU3RhcnRYLCBsaW5lRW5kWCkge1xuXHQvLyBXZSBub3cgaGF2ZSBhbGwgb2YgdGhlIGlucHV0IHZhcmlhYmxlcyBzZXQsIHNvIHdlIGNhbiBmaWd1cmUgb3V0IHRoZSBzdGFydCBhbmQgZW5kaW5nIHgseSBjb29yZGluYXRlcywgYW5kIGZpbmFsaXplIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFyYy5cblxuXHQvLyBUaWVzIGFuZCBzbHVycyBhcmUgaGFuZGxlZCBhIGxpdHRsZSBkaWZmZXJlbnRseSwgc28gZG8gY2FsY3VsYXRpb25zIGZvciB0aGVtIHNlcGFyYXRlbHkuXG5cdGlmICghdGhpcy5hbmNob3IxIHx8ICF0aGlzLmFuY2hvcjIpXG5cdFx0dGhpcy5pc1RpZSA9IHRydWU7IC8vIGlmIHRoZSBzbHVyIGdvZXMgb2ZmIHRoZSBlbmQgb2YgdGhlIGxpbmUsIHRoZW4gZHJhdyBpdCBsaWtlIGEgdGllXG5cdGVsc2UgaWYgKHRoaXMuYW5jaG9yMS5waXRjaCA9PT0gdGhpcy5hbmNob3IyLnBpdGNoICYmIHRoaXMuaW50ZXJuYWxOb3Rlcy5sZW5ndGggPT09IDApXG5cdFx0dGhpcy5pc1RpZSA9IHRydWU7XG5cdGVsc2Vcblx0XHR0aGlzLmlzVGllID0gZmFsc2U7XG5cblx0Ly8gVE9ETy1QRVI6IE5vdCBzdXJlIHdoeSB0aGlzIHdvdWxkIGJlIG5lZWRlZCwgYnV0IGl0IHdvdWxkIGJlIGJldHRlciB0byBmaWd1cmUgb3V0IGEgd2F5IHRvIGhhdmUgdGhlIGFuY2hvcnMgYmUgaW1tdXRhYmxlIGhlcmUgYW55d2F5LlxuXHQvLyBpZiAodGhpcy5pc1RpZSkge1xuXHQvLyBcdGlmICh0aGlzLmFuY2hvcjEpIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdGllIGNvbWVzIGZyb20gdGhlIHByZXZpb3VzIGxpbmUuXG5cdC8vIFx0XHR0aGlzLmFuY2hvcjEuaXNUaWUgPSB0cnVlO1xuXHQvLyBcdGlmICh0aGlzLmFuY2hvcjIpIC8vIHRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdGllIGRvZXMgbm90IGdvIHRvIHRoZSBuZXh0IGxpbmUuXG5cdC8vIFx0XHR0aGlzLmFuY2hvcjIuaXNUaWUgPSB0cnVlO1xuXHQvLyB9XG5cblx0aWYgKHRoaXMuaXNUaWUpIHtcblx0XHR0aGlzLmNhbGNUaWVEaXJlY3Rpb24oKTtcblx0XHQvLyBUT0RPLVBFUjogTm90IHN1cmUgd2h5IHRoaXMgd291bGQgYmUgbmVlZGVkLCBidXQgaXQgd291bGQgYmUgYmV0dGVyIHRvIGZpZ3VyZSBvdXQgYSB3YXkgdG8gaGF2ZSB0aGUgYW5jaG9ycyBiZSBpbW11dGFibGUgaGVyZSBhbnl3YXkuXG5cdFx0Ly8gaWYgKHRoaXMuYW5jaG9yMSkgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB0aWUgY29tZXMgZnJvbSB0aGUgcHJldmlvdXMgbGluZS5cblx0XHQvLyBcdHRoaXMuYW5jaG9yMS50aWVBYm92ZSA9IHRoaXMuYWJvdmU7XG5cdFx0Ly8gaWYgKHRoaXMuYW5jaG9yMikgLy8gdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSB0aWUgZ29lcyB0byB0aGUgbmV4dCBsaW5lLlxuXHRcdC8vIFx0dGhpcy5hbmNob3IyLnRpZUFib3ZlID0gdGhpcy5hYm92ZTtcblx0XHR0aGlzLmNhbGNYKGxpbmVTdGFydFgsIGxpbmVFbmRYKTtcblx0XHR0aGlzLmNhbGNUaWVZKCk7XG5cblx0fSBlbHNlIHtcblx0XHR0aGlzLmNhbGNTbHVyRGlyZWN0aW9uKCk7XG5cdFx0dGhpcy5jYWxjWChsaW5lU3RhcnRYLCBsaW5lRW5kWCk7XG5cdFx0dGhpcy5jYWxjU2x1clkoKTtcblx0fVxuXHR0aGlzLmF2b2lkQ29sbGlzaW9uQWJvdmUoKTtcbn07XG5cblRpZUVsZW0ucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAocmVuZGVyZXIsIGxpbmVzdGFydHgsIGxpbmVlbmR4KSB7XG5cdHRoaXMubGF5b3V0KGxpbmVzdGFydHgsIGxpbmVlbmR4KTtcblxuXHR2YXIga2xhc3M7XG5cdGlmICh0aGlzLmhpbnQpXG5cdFx0XHRrbGFzcyA9IFwiYWJjanMtaGludFwiO1xuXHR2YXIgZnVkZ2VZID0gIHRoaXMuZml4ZWRZID8gMS41IDogMDsgLy8gVE9ETy1QRVI6IFRoaXMganVzdCBjb21wZW5zYXRlcyBmb3IgZHJhd0FyYywgd2hpY2ggY29udGFpbnMgdG9vIG11Y2gga25vd2xlZGdlIG9mIHRpZXMgYW5kIHNsdXJzLlxuXHRyZW5kZXJlci5kcmF3QXJjKHRoaXMuc3RhcnRYLCB0aGlzLmVuZFgsIHRoaXMuc3RhcnRZK2Z1ZGdlWSwgdGhpcy5lbmRZK2Z1ZGdlWSwgIHRoaXMuYWJvdmUsIGtsYXNzLCB0aGlzLmlzVGllKTtcblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUaWVFbGVtO1xuIiwiLy8gYWJjX2RlY29yYXRpb24uanM6IENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgcHJpbnRpbmcgYSBsaW5lIG9mIGFiY1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSAmIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLypnbG9iYWwgd2luZG93ICovXG5cbnZhciBEeW5hbWljRGVjb3JhdGlvbiA9IHJlcXVpcmUoJy4vYWJjX2R5bmFtaWNfZGVjb3JhdGlvbicpO1xudmFyIENyZXNjZW5kb0VsZW0gPSByZXF1aXJlKCcuL2FiY19jcmVzY2VuZG9fZWxlbWVudCcpO1xudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vYWJjX2dseXBocycpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcbnZhciBUaWVFbGVtID0gcmVxdWlyZSgnLi9hYmNfdGllX2VsZW1lbnQnKTtcblxudmFyIERlY29yYXRpb247XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0RGVjb3JhdGlvbiA9IGZ1bmN0aW9uIERlY29yYXRpb24oKSB7XG5cdFx0dGhpcy5zdGFydERpbWludWVuZG9YID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuc3RhcnRDcmVzY2VuZG9YID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMubWluVG9wID0gMTI7XHQvLyBUT0RPLVBFUjogdGhpcyBpcyBhc3N1bWluZyBhIDUtbGluZSBzdGFmZi4gUGFzcyB0aGF0IGluZm8gaW4uXG5cdFx0dGhpcy5taW5Cb3R0b20gPSAwO1xuXHR9O1xuXG5cdHZhciBjbG9zZURlY29yYXRpb24gPSBmdW5jdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCByb29tdGFrZW4sIGRpciwgbWluUGl0Y2gpIHtcblx0XHR2YXIgeVBvcztcblx0XHRmb3IgKHZhciBpPTA7aTxkZWNvcmF0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoZGVjb3JhdGlvbltpXT09PVwic3RhY2NhdG9cIiB8fCBkZWNvcmF0aW9uW2ldPT09XCJ0ZW51dG9cIiB8fCBkZWNvcmF0aW9uW2ldID09PSBcImFjY2VudFwiKSB7XG5cdFx0XHRcdHZhciBzeW1ib2wgPSBcInNjcmlwdHMuXCIgKyBkZWNvcmF0aW9uW2ldO1xuXHRcdFx0XHRpZiAoZGVjb3JhdGlvbltpXSA9PT0gXCJhY2NlbnRcIikgc3ltYm9sID0gXCJzY3JpcHRzLnNmb3J6YXRvXCI7XG5cdFx0XHRcdGlmICh5UG9zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0eVBvcyA9IChkaXI9PT1cImRvd25cIikgPyBwaXRjaCsyOm1pblBpdGNoLTI7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHR5UG9zID0gKGRpcj09PVwiZG93blwiKSA/IHlQb3MrMjp5UG9zLTI7XG5cdFx0XHRcdGlmIChkZWNvcmF0aW9uW2ldID09PSBcImFjY2VudFwiKSB7XG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHBsYWNlIHRoZSBhY2NlbnQgdGhyZWUgcGl0Y2hlcyBhd2F5LCBubyBtYXR0ZXIgd2hldGhlciB0aGF0IGlzIGEgbGluZSBvciBzcGFjZS5cblx0XHRcdFx0XHRpZiAoZGlyID09PSBcInVwXCIpIHlQb3MtLTtcblx0XHRcdFx0XHRlbHNlIHlQb3MrKztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBkb24ndCBwbGFjZSBvbiBhIHN0YXZlIGxpbmUuIFRoZSBzdGF2ZSBsaW5lcyBhcmUgMiw0LDYsOCwxMFxuXHRcdFx0XHRcdHN3aXRjaCAoeVBvcykge1xuXHRcdFx0XHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRcdFx0Y2FzZSA0OlxuXHRcdFx0XHRcdFx0Y2FzZSA2OlxuXHRcdFx0XHRcdFx0Y2FzZSA4OlxuXHRcdFx0XHRcdFx0Y2FzZSAxMDpcblx0XHRcdFx0XHRcdFx0aWYgKGRpciA9PT0gXCJ1cFwiKSB5UG9zLS07XG5cdFx0XHRcdFx0XHRcdGVsc2UgeVBvcysrO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHBpdGNoPjkpIHlQb3MrKzsgLy8gdGFrZSB1cCBzb21lIHJvb20gb2YgdGhvc2UgdGhhdCBhcmUgYWJvdmVcblx0XHRcdFx0dmFyIGRlbHRhWCA9IHdpZHRoLzI7XG5cdFx0XHRcdGlmIChnbHlwaHMuZ2V0U3ltYm9sQWxpZ24oc3ltYm9sKSE9PVwiY2VudGVyXCIpIHtcblx0XHRcdFx0XHRkZWx0YVggLT0gKGdseXBocy5nZXRTeW1ib2xXaWR0aChzeW1ib2wpLzIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChzeW1ib2wsIGRlbHRhWCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCksIHlQb3MpKTtcblx0XHRcdH1cblx0XHRcdGlmIChkZWNvcmF0aW9uW2ldPT09XCJzbGlkZVwiICYmIGFic2VsZW0uaGVhZHNbMF0pIHtcblx0XHRcdFx0dmFyIHlQb3MyID0gYWJzZWxlbS5oZWFkc1swXS5waXRjaDtcblx0XHRcdFx0eVBvczIgLT0gMjsgLy8gVE9ETy1QRVI6IG5vdCBzdXJlIHdoYXQgdGhpcyBmdWRnZSBmYWN0b3IgaXMuXG5cdFx0XHRcdHZhciBibGFuazEgPSBuZXcgUmVsYXRpdmVFbGVtZW50KFwiXCIsIC1yb29tdGFrZW4tMTUsIDAsIHlQb3MyLTEpO1xuXHRcdFx0XHR2YXIgYmxhbmsyID0gbmV3IFJlbGF0aXZlRWxlbWVudChcIlwiLCAtcm9vbXRha2VuLTUsIDAsIHlQb3MyKzEpO1xuXHRcdFx0XHRhYnNlbGVtLmFkZENoaWxkKGJsYW5rMSk7XG5cdFx0XHRcdGFic2VsZW0uYWRkQ2hpbGQoYmxhbmsyKTtcblx0XHRcdFx0dm9pY2UuYWRkT3RoZXIobmV3IFRpZUVsZW0oeyBhbmNob3IxOiBibGFuazEsIGFuY2hvcjI6IGJsYW5rMiwgZml4ZWRZOiB0cnVlfSkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoeVBvcyA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0eVBvcyA9IHBpdGNoO1xuXG5cdFx0cmV0dXJuIHsgYWJvdmU6IHlQb3MsIGJlbG93OiBhYnNlbGVtLmJvdHRvbSB9O1xuXHR9O1xuXG5cdHZhciB2b2x1bWVEZWNvcmF0aW9uID0gZnVuY3Rpb24odm9pY2UsIGRlY29yYXRpb24sIGFic2VsZW0sIHBvc2l0aW9uaW5nKSB7XG5cdFx0Zm9yICh2YXIgaT0wO2k8ZGVjb3JhdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3dpdGNoKGRlY29yYXRpb25baV0pIHtcblx0XHRcdFx0Y2FzZSBcInBcIjpcblx0XHRcdFx0Y2FzZSBcIm1wXCI6XG5cdFx0XHRcdGNhc2UgXCJwcFwiOlxuXHRcdFx0XHRjYXNlIFwicHBwXCI6XG5cdFx0XHRcdGNhc2UgXCJwcHBwXCI6XG5cdFx0XHRcdGNhc2UgXCJmXCI6XG5cdFx0XHRcdGNhc2UgXCJmZlwiOlxuXHRcdFx0XHRjYXNlIFwiZmZmXCI6XG5cdFx0XHRcdGNhc2UgXCJmZmZmXCI6XG5cdFx0XHRcdGNhc2UgXCJzZnpcIjpcblx0XHRcdFx0Y2FzZSBcIm1mXCI6XG5cdFx0XHRcdFx0dmFyIGVsZW0gPSBuZXcgRHluYW1pY0RlY29yYXRpb24oYWJzZWxlbSwgZGVjb3JhdGlvbltpXSwgcG9zaXRpb25pbmcpO1xuXHRcdFx0XHRcdHZvaWNlLmFkZE90aGVyKGVsZW0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgY29tcG91bmREZWNvcmF0aW9uID0gZnVuY3Rpb24oZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCBkaXIpIHtcblx0XHRmdW5jdGlvbiBoaWdoZXN0UGl0Y2goKSB7XG5cdFx0XHRpZiAoYWJzZWxlbS5oZWFkcy5sZW5ndGggPT09IDApXG5cdFx0XHRcdHJldHVybiAxMDtcdC8vIFRPRE8tUEVSOiBJIGRvbid0IGtub3cgaWYgdGhpcyBjYW4gaGFwcGVuLCBidXQgd2UnbGwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIHN0YWZmIGlmIHNvLlxuXHRcdFx0dmFyIHBpdGNoID0gYWJzZWxlbS5oZWFkc1swXS5waXRjaDtcblx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgYWJzZWxlbS5oZWFkcy5sZW5ndGg7IGkrKylcblx0XHRcdFx0cGl0Y2ggPSBNYXRoLm1heChwaXRjaCwgYWJzZWxlbS5oZWFkc1tpXS5waXRjaCk7XG5cdFx0XHRyZXR1cm4gcGl0Y2g7XG5cdFx0fVxuXHRcdGZ1bmN0aW9uIGxvd2VzdFBpdGNoKCkge1xuXHRcdFx0aWYgKGFic2VsZW0uaGVhZHMubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRyZXR1cm4gMjtcdC8vIFRPRE8tUEVSOiBJIGRvbid0IGtub3cgaWYgdGhpcyBjYW4gaGFwcGVuLCBidXQgd2UnbGwgcmV0dXJuIHRoZSBib3R0b20gb2YgdGhlIHN0YWZmIGlmIHNvLlxuXHRcdFx0dmFyIHBpdGNoID0gYWJzZWxlbS5oZWFkc1swXS5waXRjaDtcblx0XHRcdGZvciAodmFyIGkgPSAxOyBpIDwgYWJzZWxlbS5oZWFkcy5sZW5ndGg7IGkrKylcblx0XHRcdFx0cGl0Y2ggPSBNYXRoLm1pbihwaXRjaCwgYWJzZWxlbS5oZWFkc1tpXS5waXRjaCk7XG5cdFx0XHRyZXR1cm4gcGl0Y2g7XG5cdFx0fVxuXHRcdGZ1bmN0aW9uIGNvbXBvdW5kRGVjb3JhdGlvbihzeW1ib2wsIGNvdW50KSB7XG5cdFx0XHR2YXIgcGxhY2VtZW50ID0gKGRpciA9PT0gJ2Rvd24nKSA/IGxvd2VzdFBpdGNoKCkrMTpoaWdoZXN0UGl0Y2goKSs5O1xuXHRcdFx0aWYgKGRpciAhPT0gJ2Rvd24nICYmIGNvdW50ID09PSAxKVxuXHRcdFx0XHRwbGFjZW1lbnQtLTtcblx0XHRcdHZhciBkZWx0YVggPSB3aWR0aC8yO1xuXHRcdFx0ZGVsdGFYICs9IChkaXIgPT09ICdkb3duJykgPyAtNSA6IDM7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0cGxhY2VtZW50IC09IDE7XG5cdFx0XHRcdGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChzeW1ib2wsIGRlbHRhWCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWJvbCksIHBsYWNlbWVudCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAodmFyIGk9MDtpPGRlY29yYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHN3aXRjaChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCIvXCI6IGNvbXBvdW5kRGVjb3JhdGlvbihcImZsYWdzLnVncmFjZVwiLCAxKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCIvL1wiOiBjb21wb3VuZERlY29yYXRpb24oXCJmbGFncy51Z3JhY2VcIiwgMik7IGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiLy8vXCI6IGNvbXBvdW5kRGVjb3JhdGlvbihcImZsYWdzLnVncmFjZVwiLCAzKTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCIvLy8vXCI6IGNvbXBvdW5kRGVjb3JhdGlvbihcImZsYWdzLnVncmFjZVwiLCA0KTsgYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBzdGFja2VkRGVjb3JhdGlvbiA9IGZ1bmN0aW9uKGRlY29yYXRpb24sIHdpZHRoLCBhYnNlbGVtLCB5UG9zLCBwb3NpdGlvbmluZywgbWluVG9wLCBtaW5Cb3R0b20pIHtcblx0XHRmdW5jdGlvbiBpbmNyZW1lbnRQbGFjZW1lbnQocGxhY2VtZW50LCBoZWlnaHQpIHtcblx0XHRcdGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScpXG5cdFx0XHRcdHlQb3MuYWJvdmUgKz0gaGVpZ2h0O1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHR5UG9zLmJlbG93IC09IGhlaWdodDtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gZ2V0UGxhY2VtZW50KHBsYWNlbWVudCkge1xuXHRcdFx0dmFyIHk7XG5cdFx0XHRpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnKSB7XG5cdFx0XHRcdHkgPSB5UG9zLmFib3ZlO1xuXHRcdFx0XHRpZiAoeSA8IG1pblRvcClcblx0XHRcdFx0XHR5ID0gbWluVG9wO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0eSA9IHlQb3MuYmVsb3c7XG5cdFx0XHRcdGlmICh5ID4gbWluQm90dG9tKVxuXHRcdFx0XHRcdHkgPSBtaW5Cb3R0b207XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geTtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gdGV4dERlY29yYXRpb24odGV4dCwgcGxhY2VtZW50KSB7XG5cdFx0XHR2YXIgeSA9IGdldFBsYWNlbWVudChwbGFjZW1lbnQpO1xuXHRcdFx0dmFyIHRleHRGdWRnZSA9IDI7XG5cdFx0XHR2YXIgdGV4dEhlaWdodCA9IDU7XG5cdFx0XHQvLyBUT0RPLVBFUjogR2V0IHRoZSBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgZm9udCBhbmQgdXNlIHRoYXQgZm9yIHRoZSB0aGlja25lc3MuXG5cdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQodGV4dCwgd2lkdGgvMiwgMCwgeSt0ZXh0RnVkZ2UsIHt0eXBlOlwiZGVjb3JhdGlvblwiLCBrbGFzczogJ29ybmFtZW50JywgdGhpY2tuZXNzOiAzfSkpO1xuXG5cdFx0XHRpbmNyZW1lbnRQbGFjZW1lbnQocGxhY2VtZW50LCB0ZXh0SGVpZ2h0KTtcblx0XHR9XG5cdFx0ZnVuY3Rpb24gc3ltYm9sRGVjb3JhdGlvbihzeW1ib2wsIHBsYWNlbWVudCkge1xuXHRcdFx0dmFyIGRlbHRhWCA9IHdpZHRoLzI7XG5cdFx0XHRpZiAoZ2x5cGhzLmdldFN5bWJvbEFsaWduKHN5bWJvbCkgIT09IFwiY2VudGVyXCIpIHtcblx0XHRcdFx0ZGVsdGFYIC09IChnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoc3ltYm9sKSAvIDIpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGhlaWdodCA9IGdseXBocy5zeW1ib2xIZWlnaHRJblBpdGNoZXMoc3ltYm9sKSArIDE7IC8vIGFkZGluZyBhIGxpdHRsZSBwYWRkaW5nIHNvIG5vdGhpbmcgdG91Y2hlcy5cblx0XHRcdHZhciB5ID0gZ2V0UGxhY2VtZW50KHBsYWNlbWVudCk7XG5cdFx0XHR5ID0gKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJykgPyB5ICsgaGVpZ2h0LzIgOiB5IC0gaGVpZ2h0LzI7Ly8gQ2VudGVyIHRoZSBlbGVtZW50IHZlcnRpY2FsbHkuXG5cdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoc3ltYm9sLCBkZWx0YVgsIGdseXBocy5nZXRTeW1ib2xXaWR0aChzeW1ib2wpLCB5LCB7IGtsYXNzOiAnb3JuYW1lbnQnLCB0aGlja25lc3M6IGdseXBocy5zeW1ib2xIZWlnaHRJblBpdGNoZXMoc3ltYm9sKSB9KSk7XG5cblx0XHRcdGluY3JlbWVudFBsYWNlbWVudChwbGFjZW1lbnQsIGhlaWdodCk7XG5cdFx0fVxuXG5cdFx0dmFyIHN5bWJvbExpc3QgPSB7XG5cdFx0XHRcIitcIjogXCJzY3JpcHRzLnN0b3BwZWRcIixcblx0XHRcdFwib3BlblwiOiBcInNjcmlwdHMub3BlblwiLFxuXHRcdFx0XCJzbmFwXCI6IFwic2NyaXB0cy5zbmFwXCIsXG5cdFx0XHRcIndlZGdlXCI6IFwic2NyaXB0cy53ZWRnZVwiLFxuXHRcdFx0XCJ0aHVtYlwiOiBcInNjcmlwdHMudGh1bWJcIixcblx0XHRcdFwic2hvcnRwaHJhc2VcIjogXCJzY3JpcHRzLnNob3J0cGhyYXNlXCIsXG5cdFx0XHRcIm1lZGl1bXBocmFzZVwiOiBcInNjcmlwdHMubWVkaXVtcGhyYXNlXCIsXG5cdFx0XHRcImxvbmdwaHJhc2VcIjogXCJzY3JpcHRzLmxvbmdwaHJhc2VcIixcblx0XHRcdFwidHJpbGxcIjogXCJzY3JpcHRzLnRyaWxsXCIsXG5cdFx0XHRcInJvbGxcIjogXCJzY3JpcHRzLnJvbGxcIixcblx0XHRcdFwiaXJpc2hyb2xsXCI6IFwic2NyaXB0cy5yb2xsXCIsXG5cdFx0XHRcIm1hcmNhdG9cIjogXCJzY3JpcHRzLnVtYXJjYXRvXCIsXG5cdFx0XHRcImRtYXJjYXRvXCI6IFwic2NyaXB0cy5kbWFyY2F0b1wiLFxuXHRcdFx0XCJ1bWFyY2F0b1wiOiBcInNjcmlwdHMudW1hcmNhdG9cIixcblx0XHRcdFwidHVyblwiOiBcInNjcmlwdHMudHVyblwiLFxuXHRcdFx0XCJ1cHBlcm1vcmRlbnRcIjogXCJzY3JpcHRzLnByYWxsXCIsXG5cdFx0XHRcInByYWxsdHJpbGxlclwiOiBcInNjcmlwdHMucHJhbGxcIixcblx0XHRcdFwibW9yZGVudFwiOiBcInNjcmlwdHMubW9yZGVudFwiLFxuXHRcdFx0XCJsb3dlcm1vcmRlbnRcIjogXCJzY3JpcHRzLm1vcmRlbnRcIixcblx0XHRcdFwiZG93bmJvd1wiOiBcInNjcmlwdHMuZG93bmJvd1wiLFxuXHRcdFx0XCJ1cGJvd1wiOiBcInNjcmlwdHMudXBib3dcIixcblx0XHRcdFwiZmVybWF0YVwiOiBcInNjcmlwdHMudWZlcm1hdGFcIixcblx0XHRcdFwiaW52ZXJ0ZWRmZXJtYXRhXCI6IFwic2NyaXB0cy5kZmVybWF0YVwiLFxuXHRcdFx0XCJicmVhdGhcIjogXCIsXCIsXG5cdFx0XHRcImNvZGFcIjogXCJzY3JpcHRzLmNvZGFcIixcblx0XHRcdFwic2Vnbm9cIjogXCJzY3JpcHRzLnNlZ25vXCJcblx0XHR9O1xuXG5cdFx0dmFyIGhhc09uZSA9IGZhbHNlO1xuXHRcdGZvciAodmFyIGk9MDtpPGRlY29yYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHN3aXRjaChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCIwXCI6XG5cdFx0XHRcdGNhc2UgXCIxXCI6XG5cdFx0XHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRcdGNhc2UgXCIzXCI6XG5cdFx0XHRcdGNhc2UgXCI0XCI6XG5cdFx0XHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRcdGNhc2UgXCJELkMuXCI6XG5cdFx0XHRcdGNhc2UgXCJELlMuXCI6XG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb24oZGVjb3JhdGlvbltpXSwgcG9zaXRpb25pbmcpO1xuXHRcdFx0XHRcdGhhc09uZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJmaW5lXCI6XG5cdFx0XHRcdFx0dGV4dERlY29yYXRpb24oXCJGSU5FXCIsIHBvc2l0aW9uaW5nKTtcblx0XHRcdFx0XHRoYXNPbmUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiK1wiOlxuXHRcdFx0XHRjYXNlIFwib3BlblwiOlxuXHRcdFx0XHRjYXNlIFwic25hcFwiOlxuXHRcdFx0XHRjYXNlIFwid2VkZ2VcIjpcblx0XHRcdFx0Y2FzZSBcInRodW1iXCI6XG5cdFx0XHRcdGNhc2UgXCJzaG9ydHBocmFzZVwiOlxuXHRcdFx0XHRjYXNlIFwibWVkaXVtcGhyYXNlXCI6XG5cdFx0XHRcdGNhc2UgXCJsb25ncGhyYXNlXCI6XG5cdFx0XHRcdGNhc2UgXCJ0cmlsbFwiOlxuXHRcdFx0XHRjYXNlIFwicm9sbFwiOlxuXHRcdFx0XHRjYXNlIFwiaXJpc2hyb2xsXCI6XG5cdFx0XHRcdGNhc2UgXCJtYXJjYXRvXCI6XG5cdFx0XHRcdGNhc2UgXCJkbWFyY2F0b1wiOlxuXHRcdFx0XHRjYXNlIFwidHVyblwiOlxuXHRcdFx0XHRjYXNlIFwidXBwZXJtb3JkZW50XCI6XG5cdFx0XHRcdGNhc2UgXCJwcmFsbHRyaWxsZXJcIjpcblx0XHRcdFx0Y2FzZSBcIm1vcmRlbnRcIjpcblx0XHRcdFx0Y2FzZSBcImxvd2VybW9yZGVudFwiOlxuXHRcdFx0XHRjYXNlIFwiZG93bmJvd1wiOlxuXHRcdFx0XHRjYXNlIFwidXBib3dcIjpcblx0XHRcdFx0Y2FzZSBcImZlcm1hdGFcIjpcblx0XHRcdFx0Y2FzZSBcImJyZWF0aFwiOlxuXHRcdFx0XHRjYXNlIFwidW1hcmNhdG9cIjpcblx0XHRcdFx0Y2FzZSBcImNvZGFcIjpcblx0XHRcdFx0Y2FzZSBcInNlZ25vXCI6XG5cdFx0XHRcdFx0c3ltYm9sRGVjb3JhdGlvbihzeW1ib2xMaXN0W2RlY29yYXRpb25baV1dLCBwb3NpdGlvbmluZyk7XG5cdFx0XHRcdFx0aGFzT25lID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImludmVydGVkZmVybWF0YVwiOlxuXHRcdFx0XHRcdHN5bWJvbERlY29yYXRpb24oc3ltYm9sTGlzdFtkZWNvcmF0aW9uW2ldXSwgJ2JlbG93Jyk7XG5cdFx0XHRcdFx0aGFzT25lID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm1hcmtcIjpcblx0XHRcdFx0XHRhYnNlbGVtLmtsYXNzID0gXCJtYXJrXCI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBoYXNPbmU7XG5cdH07XG5cblx0ZnVuY3Rpb24gbGVmdERlY29yYXRpb24oZGVjb3JhdGlvbiwgYWJzZWxlbSwgcm9vbXRha2VuKSB7XG5cdFx0Zm9yICh2YXIgaT0wO2k8ZGVjb3JhdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3dpdGNoIChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCJhcnBlZ2dpb1wiOlxuXHRcdFx0XHRcdC8vIFRoZSBhcnBlZ2dpbyBzeW1ib2wgaXMgdGhlIGhlaWdodCBvZiBhIG5vdGUgKHRoYXQgaXMsIHR3byBZIHVuaXRzKS4gVGhpcyBzdGFja3MgYXMgbWFueSBhcyB3ZSBuZWVkIHRvIGdvIGZyb20gdGhlXG5cdFx0XHRcdFx0Ly8gdG9wIG5vdGUgdG8gdGhlIGJvdHRvbSBub3RlLiBUaGUgYXJwZWdnaW8gc2hvdWxkIGFsc28gYmUgYSBsaXR0bGUgdGFsbGVyIHRoYW4gdGhlIHN0YWNrZWQgbm90ZXMsIHNvIHRoZXJlIGlzIGFuIGV4dHJhXG5cdFx0XHRcdFx0Ly8gb25lIGRyYXduIGFuZCBpdCBpcyBvZmZzZXQgYnkgaGFsZiBvZiBhIG5vdGUgaGVpZ2h0ICh0aGF0IGlzLCBvbmUgWSB1bml0KS5cblx0XHRcdFx0XHRmb3IgKHZhciBqID0gYWJzZWxlbS5hYmNlbGVtLm1pbnBpdGNoIC0gMTsgaiA8PSBhYnNlbGVtLmFiY2VsZW0ubWF4cGl0Y2g7IGogKz0gMikge1xuXHRcdFx0XHRcdFx0YWJzZWxlbS5hZGRFeHRyYShcblx0XHRcdFx0XHRcdFx0bmV3IFJlbGF0aXZlRWxlbWVudChcblx0XHRcdFx0XHRcdFx0XHRcInNjcmlwdHMuYXJwZWdnaW9cIixcblx0XHRcdFx0XHRcdFx0XHQtZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwic2NyaXB0cy5hcnBlZ2dpb1wiKSoyIC0gcm9vbXRha2VuLFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0aisyLFxuXHRcdFx0XHRcdFx0XHRcdHtrbGFzczogJ29ybmFtZW50JywgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKFwic2NyaXB0cy5hcnBlZ2dpb1wiKX1cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0RGVjb3JhdGlvbi5wcm90b3R5cGUuZHluYW1pY0RlY29yYXRpb24gPSBmdW5jdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgYWJzZWxlbSwgcG9zaXRpb25pbmcpIHtcblx0XHR2YXIgZGltaW51ZW5kbztcblx0XHR2YXIgY3Jlc2NlbmRvO1xuXHRcdGZvciAodmFyIGk9MDtpPGRlY29yYXRpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHN3aXRjaChkZWNvcmF0aW9uW2ldKSB7XG5cdFx0XHRcdGNhc2UgXCJkaW1pbnVlbmRvKFwiOlxuXHRcdFx0XHRcdHRoaXMuc3RhcnREaW1pbnVlbmRvWCA9IGFic2VsZW07XG5cdFx0XHRcdFx0ZGltaW51ZW5kbyA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRpbWludWVuZG8pXCI6XG5cdFx0XHRcdFx0ZGltaW51ZW5kbyA9IHsgc3RhcnQ6IHRoaXMuc3RhcnREaW1pbnVlbmRvWCwgc3RvcDogYWJzZWxlbX07XG5cdFx0XHRcdFx0dGhpcy5zdGFydERpbWludWVuZG9YID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiY3Jlc2NlbmRvKFwiOlxuXHRcdFx0XHRcdHRoaXMuc3RhcnRDcmVzY2VuZG9YID0gYWJzZWxlbTtcblx0XHRcdFx0XHRjcmVzY2VuZG8gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJjcmVzY2VuZG8pXCI6XG5cdFx0XHRcdFx0Y3Jlc2NlbmRvID0geyBzdGFydDogdGhpcy5zdGFydENyZXNjZW5kb1gsIHN0b3A6IGFic2VsZW19O1xuXHRcdFx0XHRcdHRoaXMuc3RhcnRDcmVzY2VuZG9YID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoZGltaW51ZW5kbykge1xuXHRcdFx0dm9pY2UuYWRkT3RoZXIobmV3IENyZXNjZW5kb0VsZW0oZGltaW51ZW5kby5zdGFydCwgZGltaW51ZW5kby5zdG9wLCBcIj5cIiwgcG9zaXRpb25pbmcpKTtcblx0XHR9XG5cdFx0aWYgKGNyZXNjZW5kbykge1xuXHRcdFx0dm9pY2UuYWRkT3RoZXIobmV3IENyZXNjZW5kb0VsZW0oY3Jlc2NlbmRvLnN0YXJ0LCBjcmVzY2VuZG8uc3RvcCwgXCI8XCIsIHBvc2l0aW9uaW5nKSk7XG5cdFx0fVxuXHR9O1xuXG5cdERlY29yYXRpb24ucHJvdG90eXBlLmNyZWF0ZURlY29yYXRpb24gPSBmdW5jdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCByb29tdGFrZW4sIGRpciwgbWluUGl0Y2gsIHBvc2l0aW9uaW5nLCBoYXNWb2NhbHMpIHtcblx0XHRpZiAoIXBvc2l0aW9uaW5nKVxuXHRcdFx0cG9zaXRpb25pbmcgPSB7IG9ybmFtZW50UG9zaXRpb246ICdhYm92ZScsIHZvbHVtZVBvc2l0aW9uOiBoYXNWb2NhbHMgPyAnYWJvdmUnIDonYmVsb3cnLCBkeW5hbWljUG9zaXRpb246IGhhc1ZvY2FscyA/ICdhYm92ZScgOiAnYmVsb3cnIH07XG5cdFx0Ly8gVGhlc2UgZGVjb3JhdGlvbnMgZG9uJ3QgYWZmZWN0IHRoZSBwbGFjZW1lbnQgb2Ygb3RoZXIgZGVjb3JhdGlvbnNcblx0XHR2b2x1bWVEZWNvcmF0aW9uKHZvaWNlLCBkZWNvcmF0aW9uLCBhYnNlbGVtLCBwb3NpdGlvbmluZy52b2x1bWVQb3NpdGlvbik7XG5cdFx0dGhpcy5keW5hbWljRGVjb3JhdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgYWJzZWxlbSwgcG9zaXRpb25pbmcuZHluYW1pY1Bvc2l0aW9uKTtcblx0XHRjb21wb3VuZERlY29yYXRpb24oZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCBkaXIpO1xuXG5cdFx0Ly8gdHJlYXQgc3RhY2NhdG8sIGFjY2VudCwgYW5kIHRlbnV0byBmaXJzdCAobWF5IG5lZWQgdG8gc2hpZnQgb3RoZXIgbWFya2Vycylcblx0XHR2YXIgeVBvcyA9IGNsb3NlRGVjb3JhdGlvbih2b2ljZSwgZGVjb3JhdGlvbiwgcGl0Y2gsIHdpZHRoLCBhYnNlbGVtLCByb29tdGFrZW4sIGRpciwgbWluUGl0Y2gpO1xuXHRcdC8vIHlQb3MgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgJ2Fib3ZlJyBhbmQgJ2JlbG93Jy4gVGhhdCBpcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBuZXh0IHN5bWJvbCBvbiBlaXRoZXIgc2lkZS5cblxuXHRcdHlQb3MuYWJvdmUgPSBNYXRoLm1heCh5UG9zLmFib3ZlLCB0aGlzLm1pblRvcCk7XG5cdFx0dmFyIGhhc09uZSA9IHN0YWNrZWREZWNvcmF0aW9uKGRlY29yYXRpb24sIHdpZHRoLCBhYnNlbGVtLCB5UG9zLCBwb3NpdGlvbmluZy5vcm5hbWVudFBvc2l0aW9uLCB0aGlzLm1pblRvcCwgdGhpcy5taW5Cb3R0b20pO1xuXHRcdGlmIChoYXNPbmUpIHtcbi8vXHRcdFx0YWJzZWxlbS50b3AgPSBNYXRoLm1heCh5UG9zLmFib3ZlICsgMywgYWJzZWxlbS50b3ApOyAvLyBUT0RPLVBFUjogTm90IHN1cmUgd2h5IHdlIG5lZWQgdGhpcyBmdWRnZSBmYWN0b3IuXG5cdFx0fVxuXHRcdGxlZnREZWNvcmF0aW9uKGRlY29yYXRpb24sIGFic2VsZW0sIHJvb210YWtlbik7XG5cdH07XG5cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb3JhdGlvbjtcbiIsIi8vICAgIGFiY19lbmRpbmdfZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgRW5kaW5nRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHNwcmludGYgPSByZXF1aXJlKCcuL3NwcmludGYnKTtcblxudmFyIEVuZGluZ0VsZW0gPSBmdW5jdGlvbiBFbmRpbmdFbGVtKHRleHQsIGFuY2hvcjEsIGFuY2hvcjIpIHtcblx0dGhpcy50ZXh0ID0gdGV4dDsgLy8gdGV4dCB0byBiZSBkaXNwbGF5ZWQgdG9wIGxlZnRcblx0dGhpcy5hbmNob3IxID0gYW5jaG9yMTsgLy8gbXVzdCBoYXZlIGEgLnggcHJvcGVydHkgb3IgYmUgbnVsbCAobWVhbnMgc3RhcnRzIGF0IHRoZSBcImJlZ2lubmluZ1wiIG9mIHRoZSBsaW5lIC0gYWZ0ZXIga2V5c2lnKVxuXHR0aGlzLmFuY2hvcjIgPSBhbmNob3IyOyAvLyBtdXN0IGhhdmUgYSAueCBwcm9wZXJ0eSBvciBiZSBudWxsIChtZWFucyBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUpXG5cdHRoaXMuZW5kaW5nSGVpZ2h0QWJvdmUgPSA1O1xuXHR0aGlzLnBpdGNoID0gdW5kZWZpbmVkOyAvLyBUaGlzIHdpbGwgYmUgc2V0IGxhdGVyXG59O1xuXG5FbmRpbmdFbGVtLnByb3RvdHlwZS5zZXRVcHBlckFuZExvd2VyRWxlbWVudHMgPSBmdW5jdGlvbihwb3NpdGlvblkpIHtcblx0dGhpcy5waXRjaCA9IHBvc2l0aW9uWS5lbmRpbmdIZWlnaHRBYm92ZSAtIDI7XG59O1xuXG5FbmRpbmdFbGVtLnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24gKHJlbmRlcmVyLCBsaW5lc3RhcnR4LCBsaW5lZW5keCkge1xuXHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKVxuXHRcdHdpbmRvdy5jb25zb2xlLmVycm9yKFwiRW5kaW5nIEVsZW1lbnQgeS1jb29yZGluYXRlIG5vdCBzZXQuXCIpO1xuXHR2YXIgeSA9IHJlbmRlcmVyLmNhbGNZKHRoaXMucGl0Y2gpO1xuXHR2YXIgaGVpZ2h0ID0gMjA7XG5cdHZhciBwYXRoU3RyaW5nO1xuXHRpZiAodGhpcy5hbmNob3IxKSB7XG5cdFx0bGluZXN0YXJ0eCA9IHRoaXMuYW5jaG9yMS54K3RoaXMuYW5jaG9yMS53O1xuXHRcdHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmXCIsXG5cdFx0XHRsaW5lc3RhcnR4LCB5LCBsaW5lc3RhcnR4LCB5K2hlaWdodCk7XG5cdFx0cmVuZGVyZXIucHJpbnRQYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIiMwMDAwMDBcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogcmVuZGVyZXIuYWRkQ2xhc3NlcygnZW5kaW5nJyl9KTtcblx0XHRyZW5kZXJlci5yZW5kZXJUZXh0KGxpbmVzdGFydHgrNSwgcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaC0wLjUpLCB0aGlzLnRleHQsICdyZXBlYXRmb250JywgJ2VuZGluZycsXCJzdGFydFwiKTtcblx0fVxuXG5cdGlmICh0aGlzLmFuY2hvcjIpIHtcblx0XHRsaW5lZW5keCA9IHRoaXMuYW5jaG9yMi54O1xuXHRcdHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmXCIsXG5cdFx0XHRsaW5lZW5keCwgeSwgbGluZWVuZHgsIHkraGVpZ2h0KTtcblx0XHRyZW5kZXJlci5wcmludFBhdGgoe3BhdGg6cGF0aFN0cmluZywgc3Ryb2tlOlwiIzAwMDAwMFwiLCBmaWxsOlwiIzAwMDAwMFwiLCAnY2xhc3MnOiByZW5kZXJlci5hZGRDbGFzc2VzKCdlbmRpbmcnKX0pO1xuXHR9XG5cblxuXHRwYXRoU3RyaW5nID0gc3ByaW50ZihcIk0gJWYgJWYgTCAlZiAlZlwiLFxuXHRcdGxpbmVzdGFydHgsIHksIGxpbmVlbmR4LCB5KTtcblx0cmVuZGVyZXIucHJpbnRQYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIiMwMDAwMDBcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogcmVuZGVyZXIuYWRkQ2xhc3NlcygnZW5kaW5nJyl9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRW5kaW5nRWxlbTtcbiIsIi8vICAgIGFiY19zdGFmZl9ncm91cF9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBTdGFmZkdyb3VwRWxlbWVudCBjbGFzcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLypnbG9iYWxzIGNvbnNvbGUgKi9cblxudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG5cbi8vIFN0YWZmR3JvdXBFbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBnbyB0b2dldGhlciB0byBtYWtlIG9uZSBsaW5lIG9mIG11c2ljLlxuLy8gVGhhdCBtaWdodCBiZSBtdWx0aXBsZSBzdGF2ZXMgdGhhdCBhcmUgdGllZCB0b2dldGhlciwgYW5kIGl0IG1pZ2h0IGJlIG11bHRpcGxlIHZvaWNlcyBvbiBvbmUgc3RhZmYuXG4vL1xuLy8gTWV0aG9kczpcbi8vIGNvbnN0cnVjdG9yOiBzb21lIGJhc2ljIGluaXRpYWxpemF0aW9uXG4vLyBhZGRWb2ljZSgpOiBDYWxsZWQgb25jZSBmb3IgZWFjaCB2b2ljZS4gTWF5IGFkZCBhIG5ldyBzdGFmZiBpZiBuZWVkZWQuXG4vLyBmaW5pc2hlZCgpOiBDYWxsZWQgb25seSBpbnRlcm5hbGx5IGJ5IGxheW91dCgpXG4vLyBsYXlvdXQoKTogVGhpcyBkb2VzIGFsbCB0aGUgbGF5b3V0LiBJdCBzZXRzIHRoZSBmb2xsb3dpbmc6IHNwYWNpbmd1bml0cywgc3RhcnR4LCBtaW5zcGFjZSwgdywgYW5kIHRoZSB4LWNvb3JkaW5hdGUgb2YgZWFjaCBlbGVtZW50IGluIGVhY2ggdm9pY2UuXG4vLyBkcmF3KCk6IENhbGxzIHRoZSB1bmRlcmx5aW5nIG1ldGhvZHMgb24gdGhlIHZvaWNlIG9iamVjdHMgdG8gZG8gdGhlIGRyYXdpbmcuIFNldHMgeSBhbmQgaGVpZ2h0LlxuLy9cbi8vIE1lbWJlcnM6XG4vLyBzdGFmZnM6IGFuIGFycmF5IG9mIGFsbCB0aGUgc3RhdmVzIGluIHRoaXMgZ3JvdXAuIEVhY2ggc3RhZmYgY29udGFpbnMgdGhlIGZvbGxvd2luZyBlbGVtZW50czpcbi8vICAgIHsgdG9wLCBib3R0b20sIGhpZ2hlc3QsIGxvd2VzdCwgeSB9XG4vLyB2b2ljZXM6IGFycmF5IG9mIFZvaWNlRWxlbWVudCBvYmplY3RzLiBUaGlzIGlzIG1vc3RseSBwYXNzZWQgaW4sIGJ1dCB0aGUgVm9pY2VFbGVtZW50IG9iamVjdHMgYXJlIG1vZGlmaWVkIGhlcmUuXG4vL1xuLy8gc3BhY2luZ3VuaXRzOiBudW1iZXIgb2YgcmVsYXRpdmUgeC11bml0cyBpbiB0aGUgbGluZS4gVXNlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byBwYXNzIGJhY2sgaW4gYXMgdGhlIFwic3BhY2luZ1wiIGlucHV0IHBhcmFtZXRlci5cbi8vIFRPRE8tUEVSOiBUaGlzIHNob3VsZCBhY3R1YWxseSBiZSBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS5cbi8vIG1pbnNwYWNlOiBzbWFsbGVzdCBzcGFjZSBiZXR3ZWVuIHR3byBub3Rlcy4gVXNlZCBieSB0aGUgY2FsbGluZyBmdW5jdGlvbiB0byBwYXNzIGJhY2sgaW4gYXMgdGhlIFwic3BhY2luZ1wiIGlucHV0IHBhcmFtZXRlci5cbi8vIFRPRE8tUEVSOiBUaGlzIHNob3VsZCBhY3R1YWxseSBiZSBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS5cbi8vIHN0YXJ0eDogVGhlIGxlZnQgZWRnZSwgdGFraW5nIHRoZSBtYXJnaW4gYW5kIHRoZSBvcHRpb25hbCB2b2ljZSBuYW1lLiBVc2VkIGJ5IHRoZSBkcmF3KCkgbWV0aG9kLlxuLy8gdzogVGhlIHdpZHRoIG9mIHRoZSBsaW5lLiBVc2VkIGJ5IGNhbGxpbmcgZnVuY3Rpb24gdG8gcGFzcyBiYWNrIGluIGFzIHRoZSBcInNwYWNpbmdcIiBpbnB1dCBwYXJhbWV0ZXIsIGFuZCB0aGUgZHJhdygpIG1ldGhvZC5cbi8vIFRPRE8tUEVSOiBUaGlzIHNob3VsZCBhY3R1YWxseSBiZSBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS4gIChUT0RPLVBFUjogaW4gcGl4ZWxzIG9yIHNwYWNpbmcgdW5pdHM/KVxuLy8geTogVGhlIHRvcCBvZiB0aGUgc3RhZmYgZ3JvdXAsIGluIHBpeGVscy4gVGhpcyBpcyBzZXQgaW4gdGhlIGRyYXcgbWV0aG9kLlxuLy8gVE9ETy1QRVI6IFdoZXJlIGlzIHRoYXQgdXNlZD8gSXQgbG9va3MgbGlrZSBpdCBtaWdodCBub3QgYmUgbmVlZGVkLlxuLy8gaGVpZ2h0OiBTZXQgaW4gdGhlIGRyYXcoKSBtZXRob2QgdG8gdGhlIGhlaWdodCBhY3R1YWxseSB1c2VkLiBVc2VkIGJ5IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHRvIGtub3cgd2hlcmUgdG8gc3RhcnQgdGhlIG5leHQgc3RhZmYgZ3JvdXAuXG4vLyBUT0RPLVBFUjogVGhpcyBzaG91bGQgYWN0dWFsbHkgYmUgc2V0IGluIHRoZSBsYXlvdXQgbWV0aG9kIGFuZCBwYXNzZWQgYmFjayBhcyBhIHJldHVybiB2YWx1ZS5cblxudmFyIFN0YWZmR3JvdXBFbGVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMudm9pY2VzID0gW107XG5cdHRoaXMuc3RhZmZzID0gW107XG5cdHRoaXMuYnJhY2UgPSB1bmRlZmluZWQ7IC8vdG9ueVxufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLnNldExpbWl0ID0gZnVuY3Rpb24obWVtYmVyLCB2b2ljZSkge1xuXHRpZiAoIXZvaWNlLnNwZWNpYWxZW21lbWJlcl0pIHJldHVybjtcblx0aWYgKCF2b2ljZS5zdGFmZi5zcGVjaWFsWVttZW1iZXJdKVxuXHRcdHZvaWNlLnN0YWZmLnNwZWNpYWxZW21lbWJlcl0gPSB2b2ljZS5zcGVjaWFsWVttZW1iZXJdO1xuXHRlbHNlXG5cdFx0dm9pY2Uuc3RhZmYuc3BlY2lhbFlbbWVtYmVyXSA9IE1hdGgubWF4KHZvaWNlLnN0YWZmLnNwZWNpYWxZW21lbWJlcl0sIHZvaWNlLnNwZWNpYWxZW21lbWJlcl0pO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLmFkZFZvaWNlID0gZnVuY3Rpb24gKHZvaWNlLCBzdGFmZm51bWJlciwgc3RhZmZsaW5lcykge1xuXHR2YXIgdm9pY2VOdW0gPSB0aGlzLnZvaWNlcy5sZW5ndGg7XG5cdHRoaXMudm9pY2VzW3ZvaWNlTnVtXSA9IHZvaWNlO1xuXHRpZiAodGhpcy5zdGFmZnNbc3RhZmZudW1iZXJdKVxuXHRcdHRoaXMuc3RhZmZzW3N0YWZmbnVtYmVyXS52b2ljZXMucHVzaCh2b2ljZU51bSk7XG5cdGVsc2Uge1xuXHRcdC8vIFRPRE8tUEVSOiBob3cgZG9lcyB0aGUgbWluL21heCBjaGFuZ2Ugd2hlbiBzdGFmZmxpbmVzIGlzIG5vdCA1P1xuXHRcdHRoaXMuc3RhZmZzW3RoaXMuc3RhZmZzLmxlbmd0aF0gPSB7XG5cdFx0XHR0b3A6IDEwLFxuXHRcdFx0Ym90dG9tOiAyLFxuXHRcdFx0bGluZXM6IHN0YWZmbGluZXMsXG5cdFx0XHR2b2ljZXM6IFt2b2ljZU51bV0sXG5cdFx0XHRzcGVjaWFsWToge1xuXHRcdFx0XHR0ZW1wb0hlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRwYXJ0SGVpZ2h0QWJvdmU6IDAsXG5cdFx0XHRcdHZvbHVtZUhlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRkeW5hbWljSGVpZ2h0QWJvdmU6IDAsXG5cdFx0XHRcdGVuZGluZ0hlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRjaG9yZEhlaWdodEFib3ZlOiAwLFxuXHRcdFx0XHRseXJpY0hlaWdodEFib3ZlOiAwLFxuXG5cdFx0XHRcdGx5cmljSGVpZ2h0QmVsb3c6IDAsXG5cdFx0XHRcdGNob3JkSGVpZ2h0QmVsb3c6IDAsXG5cdFx0XHRcdHZvbHVtZUhlaWdodEJlbG93OiAwLFxuXHRcdFx0XHRkeW5hbWljSGVpZ2h0QmVsb3c6IDBcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHZvaWNlLnN0YWZmID0gdGhpcy5zdGFmZnNbc3RhZmZudW1iZXJdO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLnNldFN0YWZmTGltaXRzID0gZnVuY3Rpb24gKHZvaWNlKSB7XG5cdHZvaWNlLnN0YWZmLnRvcCA9IE1hdGgubWF4KHZvaWNlLnN0YWZmLnRvcCwgdm9pY2UudG9wKTtcblx0dm9pY2Uuc3RhZmYuYm90dG9tID0gTWF0aC5taW4odm9pY2Uuc3RhZmYuYm90dG9tLCB2b2ljZS5ib3R0b20pO1xuXHR0aGlzLnNldExpbWl0KCd0ZW1wb0hlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdwYXJ0SGVpZ2h0QWJvdmUnLCB2b2ljZSk7XG5cdHRoaXMuc2V0TGltaXQoJ3ZvbHVtZUhlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdkeW5hbWljSGVpZ2h0QWJvdmUnLCB2b2ljZSk7XG5cdHRoaXMuc2V0TGltaXQoJ2VuZGluZ0hlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEFib3ZlJywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEJlbG93Jywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEJlbG93Jywgdm9pY2UpO1xuXHR0aGlzLnNldExpbWl0KCd2b2x1bWVIZWlnaHRCZWxvdycsIHZvaWNlKTtcblx0dGhpcy5zZXRMaW1pdCgnZHluYW1pY0hlaWdodEJlbG93Jywgdm9pY2UpO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKHJlbmRlcmVyKSB7XG5cdC8vIEVhY2ggc3RhZmYgYWxyZWFkeSBoYXMgdGhlIHRvcCBhbmQgYm90dG9tIHNldCwgbm93IHdlIHNlZSBpZiB0aGVyZSBhcmUgZWxlbWVudHMgdGhhdCBhcmUgYWx3YXlzIG9uIHRvcCBhbmQgYm90dG9tLCBhbmQgcmVzb2x2ZSB0aGVpciBwaXRjaC5cblx0Ly8gQWxzbywgZ2V0IHRoZSBvdmVyYWxsIGhlaWdodCBvZiBhbGwgdGhlIHN0YXZlcyBpbiB0aGlzIGdyb3VwLlxuXHR2YXIgbGFzdFN0YWZmQm90dG9tO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuc3RhZmZzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHN0YWZmID0gdGhpcy5zdGFmZnNbaV07XG5cdFx0Ly8gdGhlIHZlcnRpY2FsIG9yZGVyIG9mIGVsZW1lbnRzIHRoYXQgYXJlIGFib3ZlIGlzOiB0ZW1wbywgcGFydCwgdm9sdW1lL2R5bmFtaWMsIGVuZGluZy9jaG9yZCwgbHlyaWNcblx0XHQvLyB0aGUgdmVydGljYWwgb3JkZXIgb2YgZWxlbWVudHMgdGhhdCBhcmUgYmVsb3cgaXM6IGx5cmljLCBjaG9yZCwgdm9sdW1lL2R5bmFtaWNcblx0XHR2YXIgcG9zaXRpb25ZID0ge1xuXHRcdFx0dGVtcG9IZWlnaHRBYm92ZTogMCxcblx0XHRcdHBhcnRIZWlnaHRBYm92ZTogMCxcblx0XHRcdHZvbHVtZUhlaWdodEFib3ZlOiAwLFxuXHRcdFx0ZHluYW1pY0hlaWdodEFib3ZlOiAwLFxuXHRcdFx0ZW5kaW5nSGVpZ2h0QWJvdmU6IDAsXG5cdFx0XHRjaG9yZEhlaWdodEFib3ZlOiAwLFxuXHRcdFx0bHlyaWNIZWlnaHRBYm92ZTogMCxcblxuXHRcdFx0bHlyaWNIZWlnaHRCZWxvdzogMCxcblx0XHRcdGNob3JkSGVpZ2h0QmVsb3c6IDAsXG5cdFx0XHR2b2x1bWVIZWlnaHRCZWxvdzogMCxcblx0XHRcdGR5bmFtaWNIZWlnaHRCZWxvdzogMFxuXHRcdH07XG5cblx0XHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpIHtcblx0XHRcdHN0YWZmLm9yaWdpbmFsVG9wID0gc3RhZmYudG9wOyAvLyBUaGlzIGlzIGp1c3QgYmVpbmcgc3RvcmVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXG5cdFx0XHRzdGFmZi5vcmlnaW5hbEJvdHRvbSA9IHN0YWZmLmJvdHRvbTsgLy8gVGhpcyBpcyBqdXN0IGJlaW5nIHN0b3JlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuXHRcdH1cblxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5seXJpY0hlaWdodEFib3ZlKSB7IHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS5seXJpY0hlaWdodEFib3ZlOyBwb3NpdGlvblkubHlyaWNIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5jaG9yZEhlaWdodEFib3ZlKSB7IHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS5jaG9yZEhlaWdodEFib3ZlOyBwb3NpdGlvblkuY2hvcmRIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5lbmRpbmdIZWlnaHRBYm92ZSkge1xuXHRcdFx0aWYgKHN0YWZmLnNwZWNpYWxZLmNob3JkSGVpZ2h0QWJvdmUpXG5cdFx0XHRcdHN0YWZmLnRvcCArPSAyO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRzdGFmZi50b3AgKz0gc3RhZmYuc3BlY2lhbFkuZW5kaW5nSGVpZ2h0QWJvdmU7XG5cdFx0XHRwb3NpdGlvblkuZW5kaW5nSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0fVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmUgJiYgc3RhZmYuc3BlY2lhbFkudm9sdW1lSGVpZ2h0QWJvdmUpIHtcblx0XHRcdHN0YWZmLnRvcCArPSBNYXRoLm1heChzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmUsIHN0YWZmLnNwZWNpYWxZLnZvbHVtZUhlaWdodEFib3ZlKTtcblx0XHRcdHBvc2l0aW9uWS5keW5hbWljSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0XHRwb3NpdGlvblkudm9sdW1lSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0fSBlbHNlIGlmIChzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmUpIHtcblx0XHRcdHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS5keW5hbWljSGVpZ2h0QWJvdmU7IHBvc2l0aW9uWS5keW5hbWljSGVpZ2h0QWJvdmUgPSBzdGFmZi50b3A7XG5cdFx0fSBlbHNlIGlmIChzdGFmZi5zcGVjaWFsWS52b2x1bWVIZWlnaHRBYm92ZSkgeyBzdGFmZi50b3AgKz0gc3RhZmYuc3BlY2lhbFkudm9sdW1lSGVpZ2h0QWJvdmU7IHBvc2l0aW9uWS52b2x1bWVIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS5wYXJ0SGVpZ2h0QWJvdmUpIHsgc3RhZmYudG9wICs9IHN0YWZmLnNwZWNpYWxZLnBhcnRIZWlnaHRBYm92ZTsgcG9zaXRpb25ZLnBhcnRIZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXHRcdGlmIChzdGFmZi5zcGVjaWFsWS50ZW1wb0hlaWdodEFib3ZlKSB7IHN0YWZmLnRvcCArPSBzdGFmZi5zcGVjaWFsWS50ZW1wb0hlaWdodEFib3ZlOyBwb3NpdGlvblkudGVtcG9IZWlnaHRBYm92ZSA9IHN0YWZmLnRvcDsgfVxuXG5cdFx0aWYgKHN0YWZmLnNwZWNpYWxZLmx5cmljSGVpZ2h0QmVsb3cpIHsgcG9zaXRpb25ZLmx5cmljSGVpZ2h0QmVsb3cgPSBzdGFmZi5ib3R0b207IHN0YWZmLmJvdHRvbSAtPSBzdGFmZi5zcGVjaWFsWS5seXJpY0hlaWdodEJlbG93OyB9XG5cdFx0aWYgKHN0YWZmLnNwZWNpYWxZLmNob3JkSGVpZ2h0QmVsb3cpIHsgcG9zaXRpb25ZLmNob3JkSGVpZ2h0QmVsb3cgPSBzdGFmZi5ib3R0b207IHN0YWZmLmJvdHRvbSAtPSBzdGFmZi5zcGVjaWFsWS5jaG9yZEhlaWdodEJlbG93OyB9XG5cdFx0aWYgKHN0YWZmLnNwZWNpYWxZLnZvbHVtZUhlaWdodEJlbG93ICYmIHN0YWZmLnNwZWNpYWxZLmR5bmFtaWNIZWlnaHRCZWxvdykge1xuXHRcdFx0cG9zaXRpb25ZLnZvbHVtZUhlaWdodEJlbG93ID0gc3RhZmYuYm90dG9tO1xuXHRcdFx0cG9zaXRpb25ZLmR5bmFtaWNIZWlnaHRCZWxvdyA9IHN0YWZmLmJvdHRvbTtcblx0XHRcdHN0YWZmLmJvdHRvbSAtPSBNYXRoLm1heChzdGFmZi5zcGVjaWFsWS52b2x1bWVIZWlnaHRCZWxvdywgc3RhZmYuc3BlY2lhbFkuZHluYW1pY0hlaWdodEJlbG93KTtcblx0XHR9IGVsc2UgaWYgKHN0YWZmLnNwZWNpYWxZLnZvbHVtZUhlaWdodEJlbG93KSB7XG5cdFx0XHRwb3NpdGlvblkudm9sdW1lSGVpZ2h0QmVsb3cgPSBzdGFmZi5ib3R0b207IHN0YWZmLmJvdHRvbSAtPSBzdGFmZi5zcGVjaWFsWS52b2x1bWVIZWlnaHRCZWxvdztcblx0XHR9IGVsc2UgaWYgKHN0YWZmLnNwZWNpYWxZLmR5bmFtaWNIZWlnaHRCZWxvdykge1xuXHRcdFx0cG9zaXRpb25ZLmR5bmFtaWNIZWlnaHRCZWxvdyA9IHN0YWZmLmJvdHRvbTsgc3RhZmYuYm90dG9tIC09IHN0YWZmLnNwZWNpYWxZLmR5bmFtaWNIZWlnaHRCZWxvdztcblx0XHR9XG5cblx0XHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpXG5cdFx0XHRzdGFmZi5wb3NpdGlvblkgPSBwb3NpdGlvblk7IC8vIFRoaXMgaXMganVzdCBiZWluZyBzdG9yZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cblxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgc3RhZmYudm9pY2VzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdm9pY2UgPSB0aGlzLnZvaWNlc1tzdGFmZi52b2ljZXNbal1dO1xuXHRcdFx0dm9pY2Uuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzKHBvc2l0aW9uWSk7XG5cdFx0fVxuXHRcdC8vIFdlIG1pZ2h0IG5lZWQgYSBsaXR0bGUgc3BhY2UgaW4gYmV0d2VlbiBzdGF2ZXMgaWYgdGhlIHN0YXZlcyBoYXZlbid0IGJlZW4gcHVzaGVkIGZhciBlbm91Z2ggYXBhcnQgYnkgbm90ZXMgb3IgZXh0cmEgdmVydGljYWwgc3R1ZmYuXG5cdFx0Ly8gT25seSB0cnkgdG8gcHV0IGluIGV4dHJhIHNwYWNlIGlmIHRoaXMgaXNuJ3QgdGhlIHRvcCBzdGFmZi5cblx0XHRpZiAobGFzdFN0YWZmQm90dG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciB0aGlzU3RhZmZUb3AgPSBzdGFmZi50b3AgLSAxMDtcblx0XHRcdHZhciBmb3JjZWRTcGFjaW5nQmV0d2VlbiA9IGxhc3RTdGFmZkJvdHRvbSArIHRoaXNTdGFmZlRvcDtcblx0XHRcdHZhciBtaW5TcGFjaW5nSW5QaXRjaGVzID0gcmVuZGVyZXIuc3BhY2luZy5zeXN0ZW1TdGFmZlNlcGFyYXRpb24vc3BhY2luZy5TVEVQO1xuXHRcdFx0dmFyIGFkZGVkU3BhY2UgPSBtaW5TcGFjaW5nSW5QaXRjaGVzIC0gZm9yY2VkU3BhY2luZ0JldHdlZW47XG5cdFx0XHRpZiAoYWRkZWRTcGFjZSA+IDApXG5cdFx0XHRcdHN0YWZmLnRvcCArPSBhZGRlZFNwYWNlO1xuXHRcdH1cblx0XHRsYXN0U3RhZmZCb3R0b20gPSAyIC0gc3RhZmYuYm90dG9tOyAvLyB0aGUgc3RhZmYgc3RhcnRzIGF0IHBvc2l0aW9uIDIgYW5kIHRoZSBib3R0b20gdmFyaWFibGUgaXMgbmVnYXRpdmUuIFRoZXJlZm9yZSB0byBmaW5kIG91dCBob3cgbGFyZ2UgdGhlIGJvdHRvbSBpcywgd2UgcmV2ZXJzZSB0aGUgc2lnbiBvZiB0aGUgYm90dG9tLCBhbmQgYWRkIHRoZSAyIGluLlxuXG5cdFx0Ly8gTm93IHdlIG5lZWQgYSBsaXR0bGUgbWFyZ2luIG9uIHRoZSB0b3AsIHNvIHdlJ2xsIGp1c3QgdGhyb3cgdGhhdCBpbi5cblx0XHQvL3N0YWZmLnRvcCArPSA0O1xuXHRcdC8vY29uc29sZS5sb2coXCJTdGFmZiBZOiBcIixpLGhlaWdodEluUGl0Y2hlcyxzdGFmZi50b3Asc3RhZmYuYm90dG9tKTtcblx0fVxuXHQvL2NvbnNvbGUubG9nKFwiU3RhZmYgSGVpZ2h0OiBcIixoZWlnaHRJblBpdGNoZXMsdGhpcy5oZWlnaHQpO1xufTtcblxuU3RhZmZHcm91cEVsZW1lbnQucHJvdG90eXBlLmZpbmlzaGVkID0gZnVuY3Rpb24oKSB7XG5cdGZvciAodmFyIGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRpZiAoIXRoaXMudm9pY2VzW2ldLmxheW91dEVuZGVkKCkpIHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIGdldExlZnRFZGdlT2ZTdGFmZihyZW5kZXJlciwgdm9pY2VzLCBicmFjZSkge1xuXHR2YXIgeCA9IHJlbmRlcmVyLnBhZGRpbmcubGVmdDtcblxuXHQvLyBmaW5kIG91dCBob3cgbXVjaCBzcGFjZSB3aWxsIGJlIHRha2VuIHVwIGJ5IHZvaWNlIGhlYWRlcnNcblx0dmFyIHZvaWNlaGVhZGVydyA9IDA7XG5cdGZvciAodmFyIGk9MDtpPHZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0aWYodm9pY2VzW2ldLmhlYWRlcikge1xuXHRcdFx0dmFyIHNpemUgPSByZW5kZXJlci5nZXRUZXh0U2l6ZSh2b2ljZXNbaV0uaGVhZGVyLCAndm9pY2Vmb250JywgJycpO1xuXHRcdFx0dm9pY2VoZWFkZXJ3ID0gTWF0aC5tYXgodm9pY2VoZWFkZXJ3LHNpemUud2lkdGgpO1xuXHRcdH1cblx0fVxuXHRpZiAodm9pY2VoZWFkZXJ3KSB7XG5cdFx0Ly8gR2l2ZSBlbm91Z2ggc3BhY2luZyB0byB0aGUgcmlnaHQgLSB3ZSB1c2UgdGhlIHdpZHRoIG9mIGFuIEEgZm9yIHRoZSBhbW91bnQgb2Ygc3BhY2luZy5cblx0XHR2YXIgc2l6ZVcgPSByZW5kZXJlci5nZXRUZXh0U2l6ZShcIkFcIiwgJ3ZvaWNlZm9udCcsICcnKTtcblx0XHR2b2ljZWhlYWRlcncgKz0gc2l6ZVcud2lkdGg7XG5cdH1cblx0eCArPSB2b2ljZWhlYWRlcnc7XG5cblx0aWYgKGJyYWNlKSB7XG5cdFx0YnJhY2Uuc2V0TG9jYXRpb24oeCk7XG5cdFx0eCArPSBicmFjZS5nZXRXaWR0aCgpO1xuXHR9XG5cdHJldHVybiB4O1xufVxuXG5TdGFmZkdyb3VwRWxlbWVudC5wcm90b3R5cGUubGF5b3V0ID0gZnVuY3Rpb24oc3BhY2luZywgcmVuZGVyZXIsIGRlYnVnKSB7XG5cdHZhciBlcHNpbG9uID0gMC4wMDAwMDAxOyAvLyBGdWRnaW5nIGZvciBpbmV4YWN0bmVzcyBvZiBmbG9hdGluZyBwb2ludCBtYXRoLlxuXHR2YXIgc3BhY2luZ3VuaXRzID0gMDsgLy8gbnVtYmVyIG9mIHRpbWVzIHdlIHdpbGwgaGF2ZSBlbmRlZCB1cCB1c2luZyB0aGUgc3BhY2luZyBkaXN0YW5jZSAoYXMgb3Bwb3NlZCB0byBmaXhlZCB3aWR0aCBkaXN0YW5jZXMpXG5cdHZhciBtaW5zcGFjZSA9IDEwMDA7IC8vIGEgYmlnIG51bWJlciB0byBzdGFydCBvZmYgd2l0aCAtIHVzZWQgdG8gZmluZCBvdXQgd2hhdCB0aGUgc21hbGxlc3Qgc3BhY2UgYmV0d2VlbiB0d28gbm90ZXMgaXMgLS0gR0QgMjAxNC4xLjdcblxuXHR2YXIgeCA9IGdldExlZnRFZGdlT2ZTdGFmZihyZW5kZXJlciwgdGhpcy52b2ljZXMsIHRoaXMuYnJhY2UpO1xuXHR0aGlzLnN0YXJ0eD14O1xuXHR2YXIgaTtcblxuXHR2YXIgY3VycmVudGR1cmF0aW9uID0gMDtcblx0aWYgKGRlYnVnKSBjb25zb2xlLmxvZyhcImluaXQgbGF5b3V0XCIsIHNwYWNpbmcpO1xuXHRmb3IgKGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHR0aGlzLnZvaWNlc1tpXS5iZWdpbkxheW91dCh4KTtcblx0fVxuXG5cdHZhciBzcGFjaW5ndW5pdCA9IDA7IC8vIG51bWJlciBvZiBzcGFjaW5ndW5pdHMgY29taW5nIGZyb20gdGhlIHByZXZpb3VzbHkgbGFpZCBvdXQgZWxlbWVudCB0byB0aGlzIG9uZVxuXHR3aGlsZSAoIXRoaXMuZmluaXNoZWQoKSkge1xuXHRcdC8vIGZpbmQgZmlyc3QgZHVyYXRpb24gbGV2ZWwgdG8gYmUgbGFpZCBvdXQgYW1vbmcgY2FuZGlkYXRlcyBhY3Jvc3Mgdm9pY2VzXG5cdFx0Y3VycmVudGR1cmF0aW9uPSBudWxsOyAvLyBjYW5kaWRhdGUgc21hbGxlc3QgZHVyYXRpb24gbGV2ZWxcblx0XHRmb3IgKGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRcdGlmICghdGhpcy52b2ljZXNbaV0ubGF5b3V0RW5kZWQoKSAmJiAoIWN1cnJlbnRkdXJhdGlvbiB8fCB0aGlzLnZvaWNlc1tpXS5nZXREdXJhdGlvbkluZGV4KCk8Y3VycmVudGR1cmF0aW9uKSlcblx0XHRcdFx0Y3VycmVudGR1cmF0aW9uPXRoaXMudm9pY2VzW2ldLmdldER1cmF0aW9uSW5kZXgoKTtcblx0XHR9XG5cblxuXHRcdC8vIGlzb2xhdGUgdm9pY2VzIGF0IGN1cnJlbnQgZHVyYXRpb24gbGV2ZWxcblx0XHR2YXIgY3VycmVudHZvaWNlcyA9IFtdO1xuXHRcdHZhciBvdGhlcnZvaWNlcyA9IFtdO1xuXHRcdGZvciAoaT0wO2k8dGhpcy52b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdFx0dmFyIGR1cmF0aW9uSW5kZXggPSB0aGlzLnZvaWNlc1tpXS5nZXREdXJhdGlvbkluZGV4KCk7XG5cdFx0XHQvLyBQRVI6IEJlY2F1c2Ugb2YgdGhlIGluZXhhY3RuZXNzIG9mIEpTIGZsb2F0aW5nIHBvaW50IG1hdGgsIHdlIGp1c3QgZ2V0IGNsb3NlLlxuXHRcdFx0aWYgKGR1cmF0aW9uSW5kZXggLSBjdXJyZW50ZHVyYXRpb24gPiBlcHNpbG9uKSB7XG5cdFx0XHRcdG90aGVydm9pY2VzLnB1c2godGhpcy52b2ljZXNbaV0pO1xuXHRcdFx0XHQvL2NvbnNvbGUubG9nKFwib3V0OiB2b2ljZSBcIixpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGN1cnJlbnR2b2ljZXMucHVzaCh0aGlzLnZvaWNlc1tpXSk7XG5cdFx0XHRcdC8vaWYgKGRlYnVnKSBjb25zb2xlLmxvZyhcImluOiB2b2ljZSBcIixpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhbW9uZyB0aGUgY3VycmVudCBkdXJhdGlvbiBsZXZlbCBmaW5kIHRoZSBvbmUgd2hpY2ggbmVlZHMgc3RhcnRpbmcgZnVydGhlc3QgcmlnaHRcblx0XHRzcGFjaW5ndW5pdCA9IDA7IC8vIG51bWJlciBvZiBzcGFjaW5ndW5pdHMgY29taW5nIGZyb20gdGhlIHByZXZpb3VzbHkgbGFpZCBvdXQgZWxlbWVudCB0byB0aGlzIG9uZVxuXHRcdHZhciBzcGFjaW5nZHVyYXRpb24gPSAwO1xuXHRcdGZvciAoaT0wO2k8Y3VycmVudHZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHQvL2NvbnNvbGUubG9nKFwiZ3JlYXRlc3Qgc3BhY2luZyB1bml0XCIsIHgsIGN1cnJlbnR2b2ljZXNbaV0uZ2V0TmV4dFgoKSwgY3VycmVudHZvaWNlc1tpXS5nZXRTcGFjaW5nVW5pdHMoKSwgY3VycmVudHZvaWNlc1tpXS5zcGFjaW5nZHVyYXRpb24pO1xuXHRcdFx0aWYgKGN1cnJlbnR2b2ljZXNbaV0uZ2V0TmV4dFgoKT54KSB7XG5cdFx0XHRcdHg9Y3VycmVudHZvaWNlc1tpXS5nZXROZXh0WCgpO1xuXHRcdFx0XHRzcGFjaW5ndW5pdD1jdXJyZW50dm9pY2VzW2ldLmdldFNwYWNpbmdVbml0cygpO1xuXHRcdFx0XHRzcGFjaW5nZHVyYXRpb24gPSBjdXJyZW50dm9pY2VzW2ldLnNwYWNpbmdkdXJhdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdFx0c3BhY2luZ3VuaXRzKz1zcGFjaW5ndW5pdDtcblx0XHRtaW5zcGFjZSA9IE1hdGgubWluKG1pbnNwYWNlLHNwYWNpbmd1bml0KTtcblx0XHRpZiAoZGVidWcpIGNvbnNvbGUubG9nKFwiY3VycmVudGR1cmF0aW9uOiBcIixjdXJyZW50ZHVyYXRpb24sIHNwYWNpbmd1bml0cywgbWluc3BhY2UpO1xuXG5cdFx0Zm9yIChpPTA7aTxjdXJyZW50dm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRcdHZhciB2b2ljZWNoaWxkeCA9IGN1cnJlbnR2b2ljZXNbaV0ubGF5b3V0T25lSXRlbSh4LHNwYWNpbmcpO1xuXHRcdFx0dmFyIGR4ID0gdm9pY2VjaGlsZHgteDtcblx0XHRcdGlmIChkeD4wKSB7XG5cdFx0XHRcdHggPSB2b2ljZWNoaWxkeDsgLy91cGRhdGUgeFxuXHRcdFx0XHRmb3IgKHZhciBqPTA7ajxpO2orKykgeyAvLyBzaGlmdCBvdmVyIGFsbCBwcmV2aW91c2x5IGxhaWQgb3V0IGVsZW1lbnRzXG5cdFx0XHRcdFx0Y3VycmVudHZvaWNlc1tqXS5zaGlmdFJpZ2h0KGR4KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSB0aGUgdmFsdWUgb2YgYWxyZWFkeSBjb3VudGVkIHNwYWNpbmcgdW5pdHMgaW4gb3RoZXIgdm9pY2VzIChlLmcuIGlmIGEgdm9pY2UgaGFkIHBsYW5uZWQgdG8gdXNlIHVwIDUgc3BhY2luZyB1bml0cyBidXQgaXMgbm90IGluIGxpbmUgdG8gYmUgbGFpZCBvdXQgYXQgdGhpcyBkdXJhdGlvbiBsZXZlbCAtIHdoZXJlIHdlJ3ZlIHVzZWQgMiBzcGFjaW5nIHVuaXRzIC0gdGhlbiB3ZSBtdXN0IHVzZSB1cCAzIHNwYWNpbmcgdW5pdHMsIG5vdCA1KVxuXHRcdGZvciAoaT0wO2k8b3RoZXJ2b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdFx0b3RoZXJ2b2ljZXNbaV0uc3BhY2luZ2R1cmF0aW9uLT1zcGFjaW5nZHVyYXRpb247XG5cdFx0XHRvdGhlcnZvaWNlc1tpXS51cGRhdGVOZXh0WCh4LHNwYWNpbmcpOyAvLyBhZGp1c3Qgb3RoZXIgdm9pY2VzIGV4cGVjdGF0aW9uc1xuXHRcdH1cblxuXHRcdC8vIHVwZGF0ZSBpbmRleGVzIG9mIGN1cnJlbnRseSBsYWlkIG91dCBlbGVtc1xuXHRcdGZvciAoaT0wO2k8Y3VycmVudHZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0XHR2YXIgdm9pY2UgPSBjdXJyZW50dm9pY2VzW2ldO1xuXHRcdFx0dm9pY2UudXBkYXRlSW5kaWNlcygpO1xuXHRcdH1cblx0fSAvLyBmaW5pc2hlZCBsYXlpbmcgb3V0XG5cblxuXHQvLyBmaW5kIHRoZSBncmVhdGVzdCByZW1haW5pbmcgeCBhcyBhIGJhc2UgZm9yIHRoZSB3aWR0aFxuXHRmb3IgKGk9MDtpPHRoaXMudm9pY2VzLmxlbmd0aDtpKyspIHtcblx0XHRpZiAodGhpcy52b2ljZXNbaV0uZ2V0TmV4dFgoKT54KSB7XG5cdFx0XHR4PXRoaXMudm9pY2VzW2ldLmdldE5leHRYKCk7XG5cdFx0XHRzcGFjaW5ndW5pdD10aGlzLnZvaWNlc1tpXS5nZXRTcGFjaW5nVW5pdHMoKTtcblx0XHR9XG5cdH1cblx0Ly9jb25zb2xlLmxvZyhcImdyZWF0ZXN0IHJlbWFpbmluZ1wiLHNwYWNpbmd1bml0LHgpO1xuXHRzcGFjaW5ndW5pdHMrPXNwYWNpbmd1bml0O1xuXHR0aGlzLncgPSB4O1xuXG5cdGZvciAoaT0wO2k8dGhpcy52b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdHRoaXMudm9pY2VzW2ldLnc9dGhpcy53O1xuXHR9XG5cdHJldHVybiB7IHNwYWNpbmdVbml0czogc3BhY2luZ3VuaXRzLCBtaW5TcGFjZTogbWluc3BhY2UgfTtcbn07XG5cblN0YWZmR3JvdXBFbGVtZW50LnByb3RvdHlwZS5jYWxjSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHQvLyB0aGUgaGVpZ2h0IGlzIGNhbGN1bGF0ZWQgaGVyZSBpbiBhIHBhcmFsbGVsIHdheSB0byB0aGUgZHJhd2luZyBiZWxvdyBpbiBob3BlcyB0aGF0IGJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgbW9kaWZpZWQgdG9nZXRoZXIuXG5cdC8vIFRPRE8tUEVSOiBhbHNvIGFkZCB0aGUgc3BhY2UgYmV0d2VlbiBzdGF2ZXMuIChUaGF0J3Mgc3lzdGVtU3RhZmZTZXBhcmF0aW9uLCB3aGljaCBpcyB0aGUgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBzdGFmZiBMSU5FUy4pXG5cdHZhciBoZWlnaHQgPSAwO1xuXHRmb3IgKHZhciBpPTA7aTx0aGlzLnZvaWNlcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIHN0YWZmID0gdGhpcy52b2ljZXNbaV0uc3RhZmY7XG5cdFx0aWYgKCF0aGlzLnZvaWNlc1tpXS5kdXBsaWNhdGUpIHtcblx0XHRcdGhlaWdodCArPSBzdGFmZi50b3A7XG5cdFx0XHRpZiAoc3RhZmYuYm90dG9tIDwgMClcblx0XHRcdFx0aGVpZ2h0ICs9IC1zdGFmZi5ib3R0b207XG5cdFx0fVxuXHR9XG5cdHJldHVybiBoZWlnaHQ7XG59O1xuXG5TdGFmZkdyb3VwRWxlbWVudC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJlcikge1xuXHQvLyBXZSBlbnRlciB0aGlzIG1ldGhvZCB3aXRoIHJlbmRlcmVyLnkgcG9pbnRpbmcgdG8gdGhlIHRvcG1vc3QgY29vcmRpbmF0ZSB0aGF0IHdlJ3JlIGFsbG93ZWQgdG8gZHJhdy5cblx0Ly8gQWxsIG9mIHRoZSBjaGlsZHJlbiB0aGF0IHdpbGwgYmUgZHJhd24gaGF2ZSBhIHJlbGF0aXZlIFwicGl0Y2hcIiBzZXQsIHdoZXJlIHplcm8gaXMgdGhlIGZpcnN0IGxlZGdlciBsaW5lIGJlbG93IHRoZSBzdGFmZi5cblx0Ly8gcmVuZGVyZXIueSB3aWxsIGJlIG9mZnNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc3RhZmYgYnkgdGhlIGFtb3VudCByZXF1aXJlZCB0byBtYWtlIHRoZSByZWxhdGl2ZSBwaXRjaCB3b3JrLlxuXHQvLyBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgc3RhdmVzLCB0aGVuIHJlbmRlcmVyLnkgd2lsbCBiZSBpbmNyZW1lbnRlZCBmb3IgZWFjaCBuZXcgc3RhZmYuXG5cblx0dmFyIGRlYnVnUHJpbnQ7XG5cdHZhciBjb2xvckluZGV4O1xuXHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpIHtcblx0XHR2YXIgY29sb3JzID0gWyBcInJnYigyMDcsMjcsMzYpXCIsIFwicmdiKDE2OCwyMTQsODApXCIsIFwicmdiKDExMCwxNjEsMjI0KVwiLCBcInJnYigxOTEsMTE5LDIxOClcIiwgXCJyZ2IoMTk1LDMwLDE1MSlcIixcblx0XHRcdFwicmdiKDMxLDE3MCwxNzcpXCIsIFwicmdiKDIyMCwxNjYsMTQyKVwiIF07XG5cdFx0ZGVidWdQcmludCA9IGZ1bmN0aW9uKHN0YWZmLCBrZXkpIHtcblx0XHRcdGlmIChzdGFmZi5wb3NpdGlvbllba2V5XSkge1xuXHRcdFx0XHQvL3JlbmRlcmVyLnByaW50SG9yaXpvbnRhbExpbmUoNTAsIHJlbmRlcmVyLmNhbGNZKHN0YWZmLnBvc2l0aW9uWVtrZXldKSwga2V5LnN1YnN0cigwLCA0KSArIFwiIFwiICsgTWF0aC5yb3VuZChzdGFmZi5wb3NpdGlvbllba2V5XSkpO1xuXHRcdFx0XHR2YXIgaGVpZ2h0ID0gc3RhZmYuc3BlY2lhbFlba2V5XSAqIHNwYWNpbmcuU1RFUDtcblx0XHRcdFx0cmVuZGVyZXIucHJpbnRTaGFkZWRCb3gocmVuZGVyZXIucGFkZGluZy5sZWZ0LCByZW5kZXJlci5jYWxjWShzdGFmZi5wb3NpdGlvbllba2V5XSksIHJlbmRlcmVyLmNvbnRyb2xsZXIud2lkdGgsIGhlaWdodCxjb2xvcnNbY29sb3JJbmRleF0sIDAuNCwga2V5LnN1YnN0cigwLCA0KSk7XG5cdFx0XHRcdGNvbG9ySW5kZXggKz0gMTsgaWYgKGNvbG9ySW5kZXggPiA2KSBjb2xvckluZGV4ID0gMDtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gQW4gaW52aXNpYmxlIG1hcmtlciBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBmaW5kIHdoZXJlIGVhY2ggc3lzdGVtIHN0YXJ0cy5cblx0cmVuZGVyZXIuYWRkSW52aXNpYmxlTWFya2VyKFwiYWJjanMtdG9wLW9mLXN5c3RlbVwiKTtcblxuXHR2YXIgc3RhcnRZID0gcmVuZGVyZXIueTsgLy8gU28gdGhhdCBpdCBjYW4gYmUgcmVzdG9yZWQgYWZ0ZXIgd2UncmUgZG9uZS5cblx0Ly8gU2V0IHRoZSBhYnNvbHV0ZSBZIHBvc2l0aW9uIGZvciBlYWNoIHN0YWZmIGhlcmUsIHNvIHRoZSB2b2ljZSBkcmF3aW5nIGJlbG93IGNhbiBqdXN0IHVzZSBpZi5cblx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnN0YWZmcy5sZW5ndGg7IGorKykge1xuXHRcdHZhciBzdGFmZjEgPSB0aGlzLnN0YWZmc1tqXTtcblx0XHQvL3JlbmRlcmVyLnByaW50SG9yaXpvbnRhbExpbmUoNTAsIHJlbmRlcmVyLnksIFwic3RhcnRcIik7XG5cdFx0cmVuZGVyZXIubW92ZVkoc3BhY2luZy5TVEVQLCBzdGFmZjEudG9wKTtcblx0XHRzdGFmZjEuYWJzb2x1dGVZID0gcmVuZGVyZXIueTtcblx0XHRpZiAoLypBQkNKUy53cml0ZS5kZWJ1Z1BsYWNlbWVudCovZmFsc2UpIHtcblx0XHRcdGNvbG9ySW5kZXggPSAwO1xuXHRcdFx0cmVuZGVyZXIucHJpbnRTaGFkZWRCb3gocmVuZGVyZXIucGFkZGluZy5sZWZ0LCByZW5kZXJlci5jYWxjWShzdGFmZjEub3JpZ2luYWxUb3ApLCByZW5kZXJlci5jb250cm9sbGVyLndpZHRoLCByZW5kZXJlci5jYWxjWShzdGFmZjEub3JpZ2luYWxCb3R0b20pLXJlbmRlcmVyLmNhbGNZKHN0YWZmMS5vcmlnaW5hbFRvcCksIFwiIzAwMDAwMFwiLCAwLjEpO1xuXHRcdFx0ZGVidWdQcmludChzdGFmZjEsICdjaG9yZEhlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ2Nob3JkSGVpZ2h0QmVsb3cnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAnZHluYW1pY0hlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ2R5bmFtaWNIZWlnaHRCZWxvdycpO1xuXHRcdFx0ZGVidWdQcmludChzdGFmZjEsICdlbmRpbmdIZWlnaHRBYm92ZScpO1xuXHRcdFx0ZGVidWdQcmludChzdGFmZjEsICdseXJpY0hlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ2x5cmljSGVpZ2h0QmVsb3cnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAncGFydEhlaWdodEFib3ZlJyk7XG5cdFx0XHRkZWJ1Z1ByaW50KHN0YWZmMSwgJ3RlbXBvSGVpZ2h0QWJvdmUnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAndm9sdW1lSGVpZ2h0QWJvdmUnKTtcblx0XHRcdGRlYnVnUHJpbnQoc3RhZmYxLCAndm9sdW1lSGVpZ2h0QmVsb3cnKTtcblx0XHR9XG5cdFx0aWYgKHN0YWZmMS5ib3R0b20gPCAwKVxuXHRcdFx0cmVuZGVyZXIubW92ZVkoc3BhY2luZy5TVEVQLCAtc3RhZmYxLmJvdHRvbSk7XG5cdH1cblx0dmFyIHRvcExpbmU7IC8vIHRoZXNlIGFyZSB0byBjb25uZWN0IG11bHRpcGxlIHN0YXZlcy4gV2UgbmVlZCB0byByZW1lbWJlciB3aGVyZSB0aGV5IGFyZS5cblx0dmFyIGJvdHRvbUxpbmU7XG5cblx0dmFyIGJhcnRvcCA9IDA7XG5cdHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPSBudWxsO1xuXHRyZW5kZXJlci5ub3RlTnVtYmVyID0gbnVsbDtcblx0Zm9yICh2YXIgaT0wO2k8dGhpcy52b2ljZXMubGVuZ3RoO2krKykge1xuXHRcdHZhciBzdGFmZiA9IHRoaXMudm9pY2VzW2ldLnN0YWZmO1xuXHRcdHJlbmRlcmVyLnkgPSBzdGFmZi5hYnNvbHV0ZVk7XG5cdFx0cmVuZGVyZXIudm9pY2VOdW1iZXIgPSBpO1xuXHRcdC8vcmVuZGVyZXIueSA9IHN0YWZmLnk7XG5cdFx0Ly8gb2Zmc2V0IGZvciBzdGFydGluZyB0aGUgY291bnRpbmcgYXQgbWlkZGxlIENcblx0XHRpZiAoIXRoaXMudm9pY2VzW2ldLmR1cGxpY2F0ZSkge1xuLy9cdFx0XHRyZW5kZXJlci5tb3ZlWShzcGFjaW5nLlNURVAsIHN0YWZmLnRvcCk7XG5cdFx0XHRpZiAoIXRvcExpbmUpIHRvcExpbmUgID0gcmVuZGVyZXIuY2FsY1koMTApO1xuXHRcdFx0Ym90dG9tTGluZSAgPSByZW5kZXJlci5jYWxjWSgyKTtcblx0XHRcdGlmIChzdGFmZi5saW5lcyAhPT0gMCkge1xuXHRcdFx0XHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gbnVsbDtcblx0XHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IG51bGw7XG5cdFx0XHRcdHJlbmRlcmVyLnByaW50U3RhdmUodGhpcy5zdGFydHgsIHRoaXMudywgc3RhZmYubGluZXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnZvaWNlc1tpXS5kcmF3KHJlbmRlcmVyLCBiYXJ0b3ApO1xuXHRcdHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPSBudWxsO1xuXHRcdHJlbmRlcmVyLm5vdGVOdW1iZXIgPSBudWxsO1xuXHRcdGlmICghdGhpcy52b2ljZXNbaV0uZHVwbGljYXRlKSB7XG5cdFx0XHRiYXJ0b3AgPSByZW5kZXJlci5jYWxjWSgyKTsgLy8gVGhpcyBjb25uZWN0cyB0aGUgYmFyIGxpbmVzIGJldHdlZW4gdHdvIGRpZmZlcmVudCBzdGF2ZXMuXG4vL1x0XHRcdGlmIChzdGFmZi5ib3R0b20gPCAwKVxuLy9cdFx0XHRcdHJlbmRlcmVyLm1vdmVZKHNwYWNpbmcuU1RFUCwgLXN0YWZmLmJvdHRvbSk7XG5cdFx0fVxuXHRcdGlmKHRoaXMuYnJhY2UpIHsvL1Rvbnlcblx0XHRcdGlmIChpID09PSB0aGlzLmJyYWNlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aWYgKHRoaXMuYnJhY2UpIHtcblx0XHRcdFx0XHR0aGlzLmJyYWNlLmRyYXcocmVuZGVyZXIsIHRvcExpbmUsIGJvdHRvbUxpbmUpOyAvL3Rvbnlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gbnVsbDtcblx0cmVuZGVyZXIubm90ZU51bWJlciA9IG51bGw7XG5cblx0Ly8gY29ubmVjdCBhbGwgdGhlIHN0YXZlcyB0b2dldGhlciB3aXRoIGEgdmVydGljYWwgbGluZVxuXHRpZiAodGhpcy5zdGFmZnMubGVuZ3RoPjEpIHtcblx0XHRyZW5kZXJlci5wcmludFN0ZW0odGhpcy5zdGFydHgsIDAuNiwgdG9wTGluZSwgYm90dG9tTGluZSk7XG5cdH1cblx0cmVuZGVyZXIueSA9IHN0YXJ0WTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhZmZHcm91cEVsZW1lbnQ7XG4iLCIvLyAgICBhYmNfdGVtcG9fZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgVGVtcG9FbGVtZW50IGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIFJlbGF0aXZlRWxlbWVudCA9IHJlcXVpcmUoJy4vYWJjX3JlbGF0aXZlX2VsZW1lbnQnKTtcblxudmFyIFRlbXBvRWxlbWVudDtcbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cdHZhciB0b3RhbEhlaWdodEluUGl0Y2hlcyA9IDU7XG5cblx0VGVtcG9FbGVtZW50ID0gZnVuY3Rpb24gVGVtcG9FbGVtZW50KHRlbXBvLCB0dW5lTnVtYmVyLCBjcmVhdGVOb3RlSGVhZCkge1xuXHRcdHRoaXMudGVtcG8gPSB0ZW1wbztcblx0XHR0aGlzLnR1bmVOdW1iZXIgPSB0dW5lTnVtYmVyO1xuXHRcdHRoaXMudGVtcG9IZWlnaHRBYm92ZSA9IHRvdGFsSGVpZ2h0SW5QaXRjaGVzO1xuXHRcdHRoaXMucGl0Y2ggPSB1bmRlZmluZWQ7IC8vIFRoaXMgd2lsbCBiZSBzZXQgbGF0ZXJcblx0XHRpZiAodGhpcy50ZW1wby5kdXJhdGlvbiAmJiAhdGhpcy50ZW1wby5zdXBwcmVzc0JwbSkge1xuXHRcdFx0dGhpcy5ub3RlID0gdGhpcy5jcmVhdGVOb3RlKGNyZWF0ZU5vdGVIZWFkLCB0ZW1wbywgdHVuZU51bWJlcik7XG5cdFx0fVxuXHR9O1xuXG5cdFRlbXBvRWxlbWVudC5wcm90b3R5cGUuc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzID0gZnVuY3Rpb24ocG9zaXRpb25ZKSB7IC8vIFRPRE8tUEVSOiBUaGlzIG1pZ2h0IG5vdCBiZSBjYWxsZWQuXG5cdFx0dGhpcy5waXRjaCA9IHBvc2l0aW9uWS50ZW1wb0hlaWdodEFib3ZlO1xuXHRcdHRoaXMudG9wID0gcG9zaXRpb25ZLnRlbXBvSGVpZ2h0QWJvdmU7XG5cdFx0dGhpcy5ib3R0b20gPSBwb3NpdGlvblkudGVtcG9IZWlnaHRBYm92ZTtcblx0XHRpZiAodGhpcy5ub3RlKSB7XG5cdFx0XHR2YXIgdGVtcG9QaXRjaCA9IHRoaXMucGl0Y2ggLSB0b3RhbEhlaWdodEluUGl0Y2hlcyArIDE7IC8vIFRoZSBwaXRjaCB3ZSByZWNlaXZlIGlzIHRoZSB0b3Agb2YgdGhlIGFsbG90dGVkIGFyZWE6IGNoYW5nZSB0aGF0IHRvIHByYWN0aWNhbGx5IHRoZSBib3R0b20uXG5cdFx0XHR0aGlzLm5vdGUudG9wID0gdGVtcG9QaXRjaDtcblx0XHRcdHRoaXMubm90ZS5ib3R0b20gPSB0ZW1wb1BpdGNoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm5vdGUuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGNoaWxkID0gdGhpcy5ub3RlLmNoaWxkcmVuW2ldO1xuXHRcdFx0XHRjaGlsZC50b3AgKz0gdGVtcG9QaXRjaDtcblx0XHRcdFx0Y2hpbGQuYm90dG9tICs9IHRlbXBvUGl0Y2g7XG5cdFx0XHRcdGNoaWxkLnBpdGNoICs9IHRlbXBvUGl0Y2g7XG5cdFx0XHRcdGlmIChjaGlsZC5waXRjaDIgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRjaGlsZC5waXRjaDIgKz0gdGVtcG9QaXRjaDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0VGVtcG9FbGVtZW50LnByb3RvdHlwZS5zZXRYID0gZnVuY3Rpb24gKHgpIHtcblx0XHR0aGlzLnggPSB4O1xuXHR9O1xuXG5cdFRlbXBvRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlTm90ZSA9IGZ1bmN0aW9uKGNyZWF0ZU5vdGVIZWFkLCB0ZW1wbywgdHVuZU51bWJlcikge1xuXHRcdHZhciB0ZW1wb3NjYWxlID0gMC43NTtcblx0XHR2YXIgZHVyYXRpb24gPSB0ZW1wby5kdXJhdGlvblswXTsgLy8gVE9ETyB3aGVuIG11bHRpcGxlIGR1cmF0aW9uc1xuXHRcdHZhciBhYnNFbGVtID0gbmV3IEFic29sdXRlRWxlbWVudCh0ZW1wbywgZHVyYXRpb24sIDEsICd0ZW1wbycsIHR1bmVOdW1iZXIpO1xuXHRcdC8vIFRoZXJlIGFyZW4ndCBhbiBpbmZpbml0ZSBudW1iZXIgb2Ygbm90ZSB2YWx1ZXMsIGJ1dCB3ZSBhcmUgcGFzc2VkIGEgZmxvYXQsIHNvIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgaXMgb2ZmIHVwc3RyZWFtLFxuXHRcdC8vIG1lcmdlIGFsbCBvZiB0aGUgaW4gYmV0d2VlbiBwb2ludHMuXG5cdFx0dmFyIGRvdDtcblx0XHR2YXIgZmxhZztcblx0XHR2YXIgbm90ZTtcblx0XHRpZiAoZHVyYXRpb24gPD0gMS8zMikgeyBub3RlID0gXCJub3RlaGVhZHMucXVhcnRlclwiOyBmbGFnID0gXCJmbGFncy51MzJuZFwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS8xNikgeyBub3RlID0gXCJub3RlaGVhZHMucXVhcnRlclwiOyBmbGFnID0gXCJmbGFncy51MTZ0aFwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMy8zMikgeyBub3RlID0gXCJub3RlaGVhZHMucXVhcnRlclwiOyBmbGFnID0gXCJmbGFncy51MTZuZFwiOyBkb3QgPSAxOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS84KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy5xdWFydGVyXCI7IGZsYWcgPSBcImZsYWdzLnU4dGhcIjsgZG90ID0gMDsgfVxuXHRcdGVsc2UgaWYgKGR1cmF0aW9uIDw9IDMvMTYpIHsgbm90ZSA9IFwibm90ZWhlYWRzLnF1YXJ0ZXJcIjsgZmxhZyA9IFwiZmxhZ3MudTh0aFwiOyBkb3QgPSAxOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS80KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy5xdWFydGVyXCI7IGRvdCA9IDA7IH1cblx0XHRlbHNlIGlmIChkdXJhdGlvbiA8PSAzLzgpIHsgbm90ZSA9IFwibm90ZWhlYWRzLnF1YXJ0ZXJcIjsgZG90ID0gMTsgfVxuXHRcdGVsc2UgaWYgKGR1cmF0aW9uIDw9IDEvMikgeyBub3RlID0gXCJub3RlaGVhZHMuaGFsZlwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMy80KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy5oYWxmXCI7IGRvdCA9IDE7IH1cblx0XHRlbHNlIGlmIChkdXJhdGlvbiA8PSAxKSB7IG5vdGUgPSBcIm5vdGVoZWFkcy53aG9sZVwiOyBkb3QgPSAwOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMS41KSB7IG5vdGUgPSBcIm5vdGVoZWFkcy53aG9sZVwiOyBkb3QgPSAxOyB9XG5cdFx0ZWxzZSBpZiAoZHVyYXRpb24gPD0gMikgeyBub3RlID0gXCJub3RlaGVhZHMuZGJsXCI7IGRvdCA9IDA7IH1cblx0XHRlbHNlIHsgbm90ZSA9IFwibm90ZWhlYWRzLmRibFwiOyBkb3QgPSAxOyB9XG5cblx0XHR2YXIgcmV0ID0gY3JlYXRlTm90ZUhlYWQoYWJzRWxlbSxcblx0XHRcdG5vdGUsXG5cdFx0XHR7IHZlcnRpY2FsUG9zOiAwfSwgLy8gVGhpcyBpcyBqdXN0IHRlbXBvcmFyeTogd2UnbGwgb2Zmc2V0IHRoZSB2ZXJ0aWNhbCBwb3NpdGlvbmluZyB3aGVuIHdlIGdldCB0aGUgYWN0dWFsIHZlcnRpY2FsIHNwb3QuXG5cdFx0XHRcInVwXCIsXG5cdFx0XHQwLFxuXHRcdFx0MCxcblx0XHRcdGZsYWcsXG5cdFx0XHRkb3QsXG5cdFx0XHQwLFxuXHRcdFx0dGVtcG9zY2FsZSxcblx0XHRcdFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHRcdHZhciB0ZW1wb05vdGUgPSByZXQubm90ZWhlYWQ7XG5cdFx0YWJzRWxlbS5hZGRIZWFkKHRlbXBvTm90ZSk7XG5cdFx0dmFyIHN0ZW07XG5cdFx0aWYgKG5vdGUgIT09IFwibm90ZWhlYWRzLndob2xlXCIgJiYgbm90ZSAhPT0gXCJub3RlaGVhZHMuZGJsXCIpIHtcblx0XHRcdHZhciBwMSA9IDEgLyAzICogdGVtcG9zY2FsZTtcblx0XHRcdHZhciBwMiA9IDcgKiB0ZW1wb3NjYWxlO1xuXHRcdFx0dmFyIGR4ID0gdGVtcG9Ob3RlLmR4ICsgdGVtcG9Ob3RlLnc7XG5cdFx0XHR2YXIgd2lkdGggPSAtMC42O1xuXHRcdFx0c3RlbSA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDAsIHAxLCB7XCJ0eXBlXCI6IFwic3RlbVwiLCBcInBpdGNoMlwiOiBwMiwgbGluZXdpZHRoOiB3aWR0aH0pO1xuXHRcdFx0YWJzRWxlbS5hZGRFeHRyYShzdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFic0VsZW07XG5cdH07XG5cblx0VGVtcG9FbGVtZW50LnByb3RvdHlwZS5kcmF3ID0gZnVuY3Rpb24ocmVuZGVyZXIpIHtcblx0XHR2YXIgeCA9IHRoaXMueDtcblx0XHRpZiAodGhpcy5waXRjaCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0d2luZG93LmNvbnNvbGUuZXJyb3IoXCJUZW1wbyBFbGVtZW50IHktY29vcmRpbmF0ZSBub3Qgc2V0LlwiKTtcblxuXHRcdHZhciB5ID0gcmVuZGVyZXIuY2FsY1kodGhpcy5waXRjaCk7XG5cdFx0dmFyIHRleHQ7XG5cdFx0aWYgKHRoaXMudGVtcG8ucHJlU3RyaW5nKSB7XG5cdFx0XHR0ZXh0ID0gcmVuZGVyZXIucmVuZGVyVGV4dCh4LCB5LCB0aGlzLnRlbXBvLnByZVN0cmluZywgJ3RlbXBvZm9udCcsICd0ZW1wbycsIFwic3RhcnRcIik7XG5cdFx0XHR2YXIgc2l6ZSA9IHJlbmRlcmVyLmdldFRleHRTaXplKHRoaXMudGVtcG8ucHJlU3RyaW5nLCAndGVtcG9mb250JywgJ3RlbXBvJywgdGV4dCk7XG5cdFx0XHR2YXIgcHJlV2lkdGggPSBzaXplLndpZHRoO1xuXHRcdFx0dmFyIGNoYXJXaWR0aCA9IHByZVdpZHRoIC8gdGhpcy50ZW1wby5wcmVTdHJpbmcubGVuZ3RoOyAvLyBKdXN0IGdldCBzb21lIGF2ZXJhZ2UgbnVtYmVyIHRvIGluY3JlYXNlIHRoZSBzcGFjaW5nLlxuXHRcdFx0eCArPSBwcmVXaWR0aCArIGNoYXJXaWR0aDtcblx0XHR9XG5cdFx0aWYgKHRoaXMubm90ZSkge1xuXHRcdFx0aWYgKHRoaXMubm90ZSlcblx0XHRcdFx0dGhpcy5ub3RlLnNldFgoeCk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubm90ZS5jaGlsZHJlbi5sZW5ndGg7IGkrKylcblx0XHRcdFx0dGhpcy5ub3RlLmNoaWxkcmVuW2ldLmRyYXcocmVuZGVyZXIsIHgpO1xuXHRcdFx0eCArPSAodGhpcy5ub3RlLncgKyA1KTtcblx0XHRcdHZhciBzdHIgPSBcIj0gXCIgKyB0aGlzLnRlbXBvLmJwbTtcblx0XHRcdHRleHQgPSByZW5kZXJlci5yZW5kZXJUZXh0KHgsIHksIHN0ciwgJ3RlbXBvZm9udCcsICd0ZW1wbycsIFwic3RhcnRcIik7XG5cdFx0XHRzaXplID0gcmVuZGVyZXIuZ2V0VGV4dFNpemUoc3RyLCAndGVtcG9mb250JywgJ3RlbXBvJywgdGV4dCk7XG5cdFx0XHR2YXIgcG9zdFdpZHRoID0gc2l6ZS53aWR0aDtcblx0XHRcdHZhciBjaGFyV2lkdGgyID0gcG9zdFdpZHRoIC8gc3RyLmxlbmd0aDsgLy8gSnVzdCBnZXQgc29tZSBhdmVyYWdlIG51bWJlciB0byBpbmNyZWFzZSB0aGUgc3BhY2luZy5cblx0XHRcdHggKz0gcG9zdFdpZHRoICsgY2hhcldpZHRoMjtcblx0XHR9XG5cdFx0aWYgKHRoaXMudGVtcG8ucG9zdFN0cmluZykge1xuXHRcdFx0cmVuZGVyZXIucmVuZGVyVGV4dCh4LCB5LCB0aGlzLnRlbXBvLnBvc3RTdHJpbmcsICd0ZW1wb2ZvbnQnLCAndGVtcG8nLCBcInN0YXJ0XCIpO1xuXHRcdH1cblx0fTtcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gVGVtcG9FbGVtZW50O1xuIiwiLy8gICAgYWJjX3RyaXBsZXRfZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgVHJpcGxldEVsZW0gY2xhc3MuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzcHJpbnRmID0gcmVxdWlyZSgnLi9zcHJpbnRmJyk7XG5cbnZhciBUcmlwbGV0RWxlbTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRUcmlwbGV0RWxlbSA9IGZ1bmN0aW9uIFRyaXBsZXRFbGVtKG51bWJlciwgYW5jaG9yMSwgb3B0aW9ucykge1xuXHRcdHRoaXMuYW5jaG9yMSA9IGFuY2hvcjE7IC8vIG11c3QgaGF2ZSBhIC54IGFuZCBhIC5wYXJlbnQgcHJvcGVydHkgb3IgYmUgbnVsbCAobWVhbnMgc3RhcnRzIGF0IHRoZSBcImJlZ2lubmluZ1wiIG9mIHRoZSBsaW5lIC0gYWZ0ZXIga2V5IHNpZ25hdHVyZSlcblx0XHR0aGlzLm51bWJlciA9IG51bWJlcjtcblx0XHR0aGlzLmR1cmF0aW9uID0gKCcnK2FuY2hvcjEucGFyZW50LmR1cmF0aW9uQ2xhc3MpLnJlcGxhY2UoL1xcLi8sICctJyk7XG5cdFx0dGhpcy5taWRkbGVFbGVtcyA9IFtdOyAvLyBUaGlzIGlzIHRvIGNhbGN1bGF0ZSB0aGUgaGlnaGVzdCBpbnRlcmlvciBwaXRjaC4gSXQgaXMgdXNlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZHJhd24gYnJhY2tldCBuZXZlciBjcm9zc2VzIGEgcmVhbGx5IGhpZ2ggbWlkZGxlIG5vdGUuXG5cdFx0dGhpcy5mbGF0QmVhbXMgPSBvcHRpb25zLmZsYXRCZWFtcztcblx0fTtcblxuXHRUcmlwbGV0RWxlbS5wcm90b3R5cGUuaXNDbG9zZWQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5hbmNob3IyO1xuXHR9O1xuXG5cdFRyaXBsZXRFbGVtLnByb3RvdHlwZS5taWRkbGVOb3RlID0gZnVuY3Rpb24oZWxlbSkge1xuXHRcdHRoaXMubWlkZGxlRWxlbXMucHVzaChlbGVtKTtcblx0fTtcblxuXHRUcmlwbGV0RWxlbS5wcm90b3R5cGUuc2V0Q2xvc2VBbmNob3IgPSBmdW5jdGlvbihhbmNob3IyKSB7XG5cdFx0dGhpcy5hbmNob3IyID0gYW5jaG9yMjtcblx0XHQvLyBUT0RPLVBFUjogVW5mb3J0dW5hdGVseSwgSSBkb24ndCBrbm93IGlmIHRoZXJlIGlzIGEgYmVhbSBhYm92ZSB1bnRpbCBhZnRlciB0aGUgdmVydGljYWwgcG9zaXRpb25pbmcgaXMgZG9uZSxcblx0XHQvLyBzbyBJIGRvbid0IGtub3cgd2hldGhlciB0byBsZWF2ZSByb29tIGZvciB0aGUgbnVtYmVyIGFib3ZlLiBUaGVyZWZvcmUsIElmIHRoZXJlIGlzIGEgYmVhbSBvbiB0aGUgZmlyc3Qgbm90ZSwgSSdsbCBsZWF2ZSByb29tIGp1c3QgaW4gY2FzZS5cblx0XHRpZiAodGhpcy5hbmNob3IxLnBhcmVudC5iZWFtKVxuXHRcdFx0dGhpcy5lbmRpbmdIZWlnaHRBYm92ZSA9IDQ7XG5cdH07XG5cblx0VHJpcGxldEVsZW0ucHJvdG90eXBlLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyA9IGZ1bmN0aW9uKC8qcG9zaXRpb25ZKi8pIHtcblx0fTtcblxuXHRUcmlwbGV0RWxlbS5wcm90b3R5cGUubGF5b3V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0Ly8gVE9ETyBlbmQgYW5kIGJlZ2lubmluZyBvZiBsaW5lIChQRVI6IFAuUy4gSSdtIG5vdCBzdXJlIHRoaXMgY2FuIGhhcHBlbjogSSB0aGluayB0aGUgcGFyc2VyIHdpbGwgYWx3YXlzIHNwZWNpZnkgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCBwb2ludHMuKVxuXHRcdGlmICh0aGlzLmFuY2hvcjEgJiYgdGhpcy5hbmNob3IyKSB7XG5cdFx0XHR0aGlzLmhhc0JlYW0gPSB0aGlzLmFuY2hvcjEucGFyZW50LmJlYW0gJiYgdGhpcy5hbmNob3IxLnBhcmVudC5iZWFtID09PSB0aGlzLmFuY2hvcjIucGFyZW50LmJlYW07XG5cblx0XHRcdGlmICh0aGlzLmhhc0JlYW0pIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYSBiZWFtIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkcmF3IGFueXRoaW5nIGV4Y2VwdCB0aGUgdGV4dC4gVGhlIGJlYW0gY291bGQgZWl0aGVyIGJlIGFib3ZlIG9yIGJlbG93LlxuXHRcdFx0XHR2YXIgYmVhbSA9IHRoaXMuYW5jaG9yMS5wYXJlbnQuYmVhbTtcblx0XHRcdFx0dmFyIGxlZnQgPSBiZWFtLmlzQWJvdmUoKSA/IHRoaXMuYW5jaG9yMS54ICsgdGhpcy5hbmNob3IxLncgOiB0aGlzLmFuY2hvcjEueDtcblx0XHRcdFx0dGhpcy55VGV4dFBvcyA9IGJlYW0uaGVpZ2h0QXRNaWRwb2ludChsZWZ0LCAgdGhpcy5hbmNob3IyLngpO1xuXHRcdFx0XHR0aGlzLnlUZXh0UG9zICs9IGJlYW0uaXNBYm92ZSgpID8gMyA6IC0yOyAvLyBUaGlzIGNyZWF0ZXMgc29tZSBzcGFjZSBiZXR3ZWVuIHRoZSBiZWFtIGFuZCB0aGUgbnVtYmVyLlxuXHRcdFx0XHR0aGlzLnRvcCA9IHRoaXMueVRleHRQb3MgKyAxO1xuXHRcdFx0XHR0aGlzLmJvdHRvbSA9IHRoaXMueVRleHRQb3MgLSAyO1xuXHRcdFx0XHRpZiAoYmVhbS5pc0Fib3ZlKCkpXG5cdFx0XHRcdFx0dGhpcy5lbmRpbmdIZWlnaHRBYm92ZSA9IDQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJZiB0aGVyZSBpc24ndCBhIGJlYW0sIHRoZW4gd2UgbmVlZCB0byBkcmF3IHRoZSBicmFja2V0IGFuZCB0aGUgdGV4dC4gVGhlIGJyYWNrZXQgaXMgYWx3YXlzIGFib3ZlLlxuXHRcdFx0XHQvLyBUaGUgYnJhY2tldCBpcyBuZXZlciBsb3dlciB0aGFuIHRoZSAnYScgbGluZSwgYnV0IGlzIDQgcGl0Y2hlcyBhYm92ZSB0aGUgZmlyc3QgYW5kIGxhc3Qgbm90ZXMuIElmIHRoZXJlIGlzXG5cdFx0XHRcdC8vIGEgdGFsbCBub3RlIGluIHRoZSBtaWRkbGUsIHRoZSBicmFja2V0IGlzIGhvcml6b250YWwgYW5kIGFib3ZlIHRoZSBoaWdoZXN0IG5vdGUuXG5cdFx0XHRcdHRoaXMuc3RhcnROb3RlID0gTWF0aC5tYXgodGhpcy5hbmNob3IxLnBhcmVudC50b3AsIDkpICsgNDtcblx0XHRcdFx0dGhpcy5lbmROb3RlID0gTWF0aC5tYXgodGhpcy5hbmNob3IyLnBhcmVudC50b3AsIDkpICsgNDtcblx0XHRcdFx0Ly8gSWYgaXQgc3RhcnRzIG9yIGVuZHMgb24gYSByZXN0LCBtYWtlIHRoZSBiZWFtIGhvcml6b250YWxcblx0XHRcdFx0aWYgKHRoaXMuYW5jaG9yMS5wYXJlbnQudHlwZSA9PT0gXCJyZXN0XCIgJiYgdGhpcy5hbmNob3IyLnBhcmVudC50eXBlICE9PSBcInJlc3RcIilcblx0XHRcdFx0XHR0aGlzLnN0YXJ0Tm90ZSA9IHRoaXMuZW5kTm90ZTtcblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5hbmNob3IyLnBhcmVudC50eXBlID09PSBcInJlc3RcIiAmJiB0aGlzLmFuY2hvcjEucGFyZW50LnR5cGUgIT09IFwicmVzdFwiKVxuXHRcdFx0XHRcdHRoaXMuZW5kTm90ZSA9IHRoaXMuc3RhcnROb3RlO1xuXHRcdFx0XHQvLyBTZWUgaWYgdGhlIG1pZGRsZSBub3RlIGlzIHJlYWxseSBoaWdoLlxuXHRcdFx0XHR2YXIgbWF4ID0gMDtcblx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1pZGRsZUVsZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bWF4ID0gTWF0aC5tYXgobWF4LCB0aGlzLm1pZGRsZUVsZW1zW2ldLnRvcCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0bWF4ICs9IDQ7XG5cdFx0XHRcdGlmIChtYXggPiB0aGlzLnN0YXJ0Tm90ZSB8fCBtYXggPiB0aGlzLmVuZE5vdGUpIHtcblx0XHRcdFx0XHR0aGlzLnN0YXJ0Tm90ZSA9IG1heDtcblx0XHRcdFx0XHR0aGlzLmVuZE5vdGUgPSBtYXg7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuZmxhdEJlYW1zKSB7XG5cdFx0XHRcdFx0dGhpcy5zdGFydE5vdGUgPSBNYXRoLm1heCh0aGlzLnN0YXJ0Tm90ZSwgdGhpcy5lbmROb3RlKTtcblx0XHRcdFx0XHR0aGlzLmVuZE5vdGUgPSBNYXRoLm1heCh0aGlzLnN0YXJ0Tm90ZSwgdGhpcy5lbmROb3RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMueVRleHRQb3MgPSB0aGlzLnN0YXJ0Tm90ZSArICh0aGlzLmVuZE5vdGUgLSB0aGlzLnN0YXJ0Tm90ZSkgLyAyO1xuXHRcdFx0XHR0aGlzLnRvcCA9IHRoaXMueVRleHRQb3MgKyAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5taWRkbGVFbGVtcztcblx0XHRkZWxldGUgdGhpcy5mbGF0QmVhbXM7XG5cdH07XG5cblx0VHJpcGxldEVsZW0ucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbihyZW5kZXJlcikge1xuXHRcdHZhciB4VGV4dFBvcztcblx0XHRpZiAodGhpcy5oYXNCZWFtKSB7XG5cdFx0XHR2YXIgbGVmdCA9IHRoaXMuYW5jaG9yMS5wYXJlbnQuYmVhbS5pc0Fib3ZlKCkgPyB0aGlzLmFuY2hvcjEueCArIHRoaXMuYW5jaG9yMS53IDogdGhpcy5hbmNob3IxLng7XG5cdFx0XHR4VGV4dFBvcyA9IHRoaXMuYW5jaG9yMS5wYXJlbnQuYmVhbS54QXRNaWRwb2ludChsZWZ0LCB0aGlzLmFuY2hvcjIueCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHhUZXh0UG9zID0gdGhpcy5hbmNob3IxLnggKyAodGhpcy5hbmNob3IyLnggKyB0aGlzLmFuY2hvcjIudyAtIHRoaXMuYW5jaG9yMS54KSAvIDI7XG5cdFx0XHRkcmF3QnJhY2tldChyZW5kZXJlciwgdGhpcy5hbmNob3IxLngsIHRoaXMuc3RhcnROb3RlLCB0aGlzLmFuY2hvcjIueCArIHRoaXMuYW5jaG9yMi53LCB0aGlzLmVuZE5vdGUsIHRoaXMuZHVyYXRpb24pO1xuXHRcdH1cblx0XHRyZW5kZXJlci5yZW5kZXJUZXh0KHhUZXh0UG9zLCByZW5kZXJlci5jYWxjWSh0aGlzLnlUZXh0UG9zKSwgXCJcIiArIHRoaXMubnVtYmVyLCAndHJpcGxldGZvbnQnLCByZW5kZXJlci5hZGRDbGFzc2VzKCd0cmlwbGV0IGQnK3RoaXMuZHVyYXRpb24pLCBcIm1pZGRsZVwiLCB0cnVlKTtcblx0fTtcblxuXHRmdW5jdGlvbiBkcmF3TGluZShyZW5kZXJlciwgbCwgdCwgciwgYiwgZHVyYXRpb24pIHtcblx0XHR2YXIgcGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWZcIixcblx0XHRcdGwsIHQsIHIsIGIpO1xuXHRcdHJlbmRlcmVyLnByaW50UGF0aCh7cGF0aDogcGF0aFN0cmluZywgc3Ryb2tlOiBcIiMwMDAwMDBcIiwgJ2NsYXNzJzogcmVuZGVyZXIuYWRkQ2xhc3NlcygndHJpcGxldCBkJytkdXJhdGlvbil9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdCcmFja2V0KHJlbmRlcmVyLCB4MSwgeTEsIHgyLCB5MiwgZHVyYXRpb24pIHtcblx0XHR5MSA9IHJlbmRlcmVyLmNhbGNZKHkxKTtcblx0XHR5MiA9IHJlbmRlcmVyLmNhbGNZKHkyKTtcblx0XHR2YXIgYnJhY2tldEhlaWdodCA9IDU7XG5cblx0XHQvLyBEcmF3IHZlcnRpY2FsIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZFxuXHRcdGRyYXdMaW5lKHJlbmRlcmVyLCB4MSwgeTEsIHgxLCB5MSArIGJyYWNrZXRIZWlnaHQsIGR1cmF0aW9uKTtcblx0XHRkcmF3TGluZShyZW5kZXJlciwgeDIsIHkyLCB4MiwgeTIgKyBicmFja2V0SGVpZ2h0LCBkdXJhdGlvbik7XG5cblx0XHQvLyBmaWd1cmUgb3V0IG1pZHBvaW50cyB0byBkcmF3IHRoZSBicm9rZW4gbGluZS5cblx0XHR2YXIgbWlkWCA9IHgxICsgKHgyLXgxKS8yO1xuXHRcdC8vdmFyIG1pZFkgPSB5MSArICh5Mi15MSkvMjtcblx0XHR2YXIgZ2FwV2lkdGggPSA4O1xuXHRcdHZhciBzbG9wZSA9ICh5MiAtIHkxKSAvICh4MiAtIHgxKTtcblx0XHR2YXIgbGVmdEVuZFggPSBtaWRYIC0gZ2FwV2lkdGg7XG5cdFx0dmFyIGxlZnRFbmRZID0geTEgKyAobGVmdEVuZFggLSB4MSkgKiBzbG9wZTtcblx0XHRkcmF3TGluZShyZW5kZXJlciwgeDEsIHkxLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGR1cmF0aW9uKTtcblx0XHR2YXIgcmlnaHRTdGFydFggPSBtaWRYICsgZ2FwV2lkdGg7XG5cdFx0dmFyIHJpZ2h0U3RhcnRZID0geTEgKyAocmlnaHRTdGFydFggLSB4MSkgKiBzbG9wZTtcblx0XHRkcmF3TGluZShyZW5kZXJlciwgcmlnaHRTdGFydFgsIHJpZ2h0U3RhcnRZLCB4MiwgeTIsIGR1cmF0aW9uKTtcblx0fVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmlwbGV0RWxlbTtcbiIsIi8vICAgIGFiY192b2ljZV9lbGVtZW50LmpzOiBEZWZpbml0aW9uIG9mIHRoZSBWb2ljZUVsZW1lbnQgY2xhc3MuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19jb21tb24nKTtcblxudmFyIFZvaWNlRWxlbWVudCA9IGZ1bmN0aW9uIFZvaWNlRWxlbWVudCh2b2ljZW51bWJlciwgdm9pY2V0b3RhbCkge1xuXHR0aGlzLmNoaWxkcmVuID0gW107XG5cdHRoaXMuYmVhbXMgPSBbXTtcblx0dGhpcy5vdGhlcmNoaWxkcmVuID0gW107IC8vIHRpZXMsIHNsdXJzLCB0cmlwbGV0c1xuXHR0aGlzLncgPSAwO1xuXHR0aGlzLmR1cGxpY2F0ZSA9IGZhbHNlO1xuXHR0aGlzLnZvaWNlbnVtYmVyID0gdm9pY2VudW1iZXI7IC8vbnVtYmVyIG9mIHRoZSB2b2ljZSBvbiBhIGdpdmVuIHN0YXZlIChub3Qgc3RhZmZncm91cClcblx0dGhpcy52b2ljZXRvdGFsID0gdm9pY2V0b3RhbDtcblx0dGhpcy5ib3R0b20gPSA3O1xuXHR0aGlzLnRvcCA9IDc7XG5cdHRoaXMuc3BlY2lhbFkgPSB7XG5cdFx0dGVtcG9IZWlnaHRBYm92ZTogMCxcblx0XHRwYXJ0SGVpZ2h0QWJvdmU6IDAsXG5cdFx0dm9sdW1lSGVpZ2h0QWJvdmU6IDAsXG5cdFx0ZHluYW1pY0hlaWdodEFib3ZlOiAwLFxuXHRcdGVuZGluZ0hlaWdodEFib3ZlOiAwLFxuXHRcdGNob3JkSGVpZ2h0QWJvdmU6IDAsXG5cdFx0bHlyaWNIZWlnaHRBYm92ZTogMCxcblxuXHRcdGx5cmljSGVpZ2h0QmVsb3c6IDAsXG5cdFx0Y2hvcmRIZWlnaHRCZWxvdzogMCxcblx0XHR2b2x1bWVIZWlnaHRCZWxvdzogMCxcblx0XHRkeW5hbWljSGVpZ2h0QmVsb3c6IDBcblx0fTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0aWYgKGNoaWxkLnR5cGUgPT09ICdiYXInKSB7XG5cdFx0dmFyIGZpcnN0SXRlbSA9IHRydWU7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGZpcnN0SXRlbSAmJiBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHRoaXMuY2hpbGRyZW5baV0udHlwZSAhPT0gXCJzdGFmZi1leHRyYVwiICYmIHRoaXMuY2hpbGRyZW5baV0udHlwZSAhPT0gXCJ0ZW1wb1wiKVxuXHRcdFx0XHRmaXJzdEl0ZW0gPSBmYWxzZTtcblx0XHR9XG5cdFx0aWYgKCFmaXJzdEl0ZW0pIHtcblx0XHRcdHRoaXMuYmVhbXMucHVzaChcImJhclwiKTtcblx0XHRcdHRoaXMub3RoZXJjaGlsZHJlbi5wdXNoKFwiYmFyXCIpO1xuXHRcdH1cblx0fVxuXHR0aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoXSA9IGNoaWxkO1xuXHR0aGlzLnNldFJhbmdlKGNoaWxkKTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuc2V0TGltaXQgPSBmdW5jdGlvbihtZW1iZXIsIGNoaWxkKSB7XG5cdC8vIFNvbWV0aW1lcyB3ZSBnZXQgYW4gYWJzb2x1dGUgZWxlbWVudCBpbiBoZXJlIGFuZCBzb21ldGltZXMgd2UgZ2V0IHNvbWUgdHlwZSBvZiByZWxhdGl2ZSBlbGVtZW50LlxuXHQvLyBJZiB0aGVyZSBpcyBhIFwic3BlY2lhbFlcIiBlbGVtZW50LCB0aGVuIGFzc3VtZSBpdCBpcyBhbiBhYnNvbHV0ZSBlbGVtZW50LiBJZiB0aGF0IGRvZXNuJ3QgZXhpc3QsIGxvb2sgZm9yIHRoZVxuXHQvLyBzYW1lIG1lbWJlcnMgYXQgdGhlIHRvcCBsZXZlbCwgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhleSBhcmUgaW4gcmVsYXRpdmUgZWxlbWVudHMuXG5cdHZhciBzcGVjaWFsWSA9IGNoaWxkLnNwZWNpYWxZO1xuXHRpZiAoIXNwZWNpYWxZKSBzcGVjaWFsWSA9IGNoaWxkO1xuXHRpZiAoIXNwZWNpYWxZW21lbWJlcl0pIHJldHVybjtcblx0aWYgKCF0aGlzLnNwZWNpYWxZW21lbWJlcl0pXG5cdFx0dGhpcy5zcGVjaWFsWVttZW1iZXJdID0gc3BlY2lhbFlbbWVtYmVyXTtcblx0ZWxzZVxuXHRcdHRoaXMuc3BlY2lhbFlbbWVtYmVyXSA9IE1hdGgubWF4KHRoaXMuc3BlY2lhbFlbbWVtYmVyXSwgc3BlY2lhbFlbbWVtYmVyXSk7XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLm1vdmVEZWNvcmF0aW9ucyA9IGZ1bmN0aW9uKGJlYW0pIHtcblx0dmFyIHBhZGRpbmcgPSAxLjU7IC8vIFRoaXMgaXMgdGhlIHZlcnRpY2FsIHBhZGRpbmcgYmV0d2VlbiBlbGVtZW50cywgaW4gcGl0Y2hlcy5cblx0Zm9yICh2YXIgY2ggPSAwOyBjaCA8IGJlYW0uZWxlbXMubGVuZ3RoOyBjaCsrKSB7XG5cdFx0dmFyIGNoaWxkID0gYmVhbS5lbGVtc1tjaF07XG5cdFx0aWYgKGNoaWxkLnRvcCkge1xuXHRcdFx0Ly8gV2Ugbm93IGtub3cgd2hlcmUgdGhlIG9ybmFtZW50cyBzaG91bGQgaGF2ZSBiZWVuIHBsYWNlZCwgc28gbW92ZSB0aGVtIGlmIHRoZXkgd291bGQgb3ZlcmxhcC5cblx0XHRcdHZhciB0b3AgPSBiZWFtLnlBdE5vdGUoY2hpbGQpO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZC5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZWwgPSBjaGlsZC5jaGlsZHJlbltpXTtcblx0XHRcdFx0aWYgKGVsLmtsYXNzID09PSAnb3JuYW1lbnQnKSB7XG5cdFx0XHRcdFx0aWYgKGVsLmJvdHRvbSAtIHBhZGRpbmcgPCB0b3ApIHtcblx0XHRcdFx0XHRcdHZhciBkaXN0YW5jZSA9IHRvcCAtIGVsLmJvdHRvbSArIHBhZGRpbmc7IC8vIEZpbmQgdGhlIGRpc3RhbmNlIHRoYXQgaXQgbmVlZHMgdG8gbW92ZSBhbmQgYWRkIGEgbGl0dGxlIG1hcmdpbiBzbyB0aGUgZWxlbWVudCBkb2Vzbid0IHRvdWNoIHRoZSBiZWFtLlxuXHRcdFx0XHRcdFx0ZWwuYm90dG9tICs9IGRpc3RhbmNlO1xuXHRcdFx0XHRcdFx0ZWwudG9wICs9IGRpc3RhbmNlO1xuXHRcdFx0XHRcdFx0ZWwucGl0Y2ggKz0gZGlzdGFuY2U7XG5cdFx0XHRcdFx0XHR0b3AgPSBjaGlsZC50b3AgPSBlbC50b3A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmFkanVzdFJhbmdlID0gZnVuY3Rpb24oY2hpbGQpIHtcblx0aWYgKGNoaWxkLmJvdHRvbSAhPT0gdW5kZWZpbmVkKVxuXHRcdHRoaXMuYm90dG9tID0gTWF0aC5taW4odGhpcy5ib3R0b20sIGNoaWxkLmJvdHRvbSk7XG5cdGlmIChjaGlsZC50b3AgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnRvcCA9IE1hdGgubWF4KHRoaXMudG9wLCBjaGlsZC50b3ApO1xufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5zZXRSYW5nZSA9IGZ1bmN0aW9uKGNoaWxkKSB7XG5cdHRoaXMuYWRqdXN0UmFuZ2UoY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCd0ZW1wb0hlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdwYXJ0SGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ3ZvbHVtZUhlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdkeW5hbWljSGVpZ2h0QWJvdmUnLCBjaGlsZCk7XG5cdHRoaXMuc2V0TGltaXQoJ2VuZGluZ0hlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEFib3ZlJywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdseXJpY0hlaWdodEJlbG93JywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCdjaG9yZEhlaWdodEJlbG93JywgY2hpbGQpO1xuXHR0aGlzLnNldExpbWl0KCd2b2x1bWVIZWlnaHRCZWxvdycsIGNoaWxkKTtcblx0dGhpcy5zZXRMaW1pdCgnZHluYW1pY0hlaWdodEJlbG93JywgY2hpbGQpO1xufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5zZXRVcHBlckFuZExvd2VyRWxlbWVudHMgPSBmdW5jdGlvbihwb3NpdGlvblkpIHtcblx0dmFyIGk7XG5cdGZvciAoaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGFic2VsZW0gPSB0aGlzLmNoaWxkcmVuW2ldO1xuXHRcdGFic2VsZW0uc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzKHBvc2l0aW9uWSk7XG5cdH1cblx0Zm9yIChpID0gMDsgaSA8IHRoaXMub3RoZXJjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBhYnNlbGVtID0gdGhpcy5vdGhlcmNoaWxkcmVuW2ldO1xuXHRcdGlmICh0eXBlb2YgYWJzZWxlbSAhPT0gJ3N0cmluZycpXG5cdFx0XHRhYnNlbGVtLnNldFVwcGVyQW5kTG93ZXJFbGVtZW50cyhwb3NpdGlvblkpO1xuXHR9XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmFkZE90aGVyID0gZnVuY3Rpb24gKGNoaWxkKSB7XG5cdHRoaXMub3RoZXJjaGlsZHJlbi5wdXNoKGNoaWxkKTtcblx0dGhpcy5zZXRSYW5nZShjaGlsZCk7XG59O1xuXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmFkZEJlYW0gPSBmdW5jdGlvbiAoY2hpbGQpIHtcblx0dGhpcy5iZWFtcy5wdXNoKGNoaWxkKTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUudXBkYXRlSW5kaWNlcyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCF0aGlzLmxheW91dEVuZGVkKCkpIHtcblx0XHR0aGlzLmR1cmF0aW9uaW5kZXggKz0gdGhpcy5jaGlsZHJlblt0aGlzLmldLmR1cmF0aW9uO1xuXHRcdGlmICh0aGlzLmNoaWxkcmVuW3RoaXMuaV0udHlwZSA9PT0gJ2JhcicpIHRoaXMuZHVyYXRpb25pbmRleCA9IE1hdGgucm91bmQodGhpcy5kdXJhdGlvbmluZGV4KjY0KS82NDsgLy8gZXZlcnl0aW1lIHdlIG1lZXQgYSBiYXJsaW5lLCBkbyByb3VuZGluZyB0byBuZWFyZXN0IDY0dGhcblx0XHR0aGlzLmkrKztcblx0fVxufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5sYXlvdXRFbmRlZCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuICh0aGlzLmk+PXRoaXMuY2hpbGRyZW4ubGVuZ3RoKTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuZ2V0RHVyYXRpb25JbmRleCA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIHRoaXMuZHVyYXRpb25pbmRleCAtICh0aGlzLmNoaWxkcmVuW3RoaXMuaV0gJiYgKHRoaXMuY2hpbGRyZW5bdGhpcy5pXS5kdXJhdGlvbj4wKT8wOjAuMDAwMDAwNSk7IC8vIGlmIHRoZSBpdGggZWxlbWVudCBkb2Vzbid0IGhhdmUgYSBkdXJhdGlvbiAoaXMgbm90IGEgbm90ZSksIGl0cyBkdXJhdGlvbiBpbmRleCBpcyBmcmFjdGlvbmFsbHkgYmVmb3JlLiBUaGlzIGVuYWJsZXMgQ0xFRiBLRVlTSUcgVElNRVNJRyBQQVJULCBldGMuIHRvIGJlIGxhaWQgb3V0IGJlZm9yZSB3ZSBnZXQgdG8gdGhlIGZpcnN0IG5vdGUgb2Ygb3RoZXIgdm9pY2VzXG59O1xuXG4vLyBudW1iZXIgb2Ygc3BhY2luZyB1bml0cyBleHBlY3RlZCBmb3IgbmV4dCBwb3NpdGlvbmluZ1xuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5nZXRTcGFjaW5nVW5pdHMgPSBmdW5jdGlvbiAoKSB7XG5cdHJldHVybiBNYXRoLnNxcnQodGhpcy5zcGFjaW5nZHVyYXRpb24qOCk7XG5cdC8vIFRPRE8tUEVSOiBPbiBzaG9ydCBsaW5lcywgdGhpcyB3b3VsZCBuZXZlciB0cmlnZ2VyLCBzbyB0aGUgc3BhY2luZyB3YXMgd3JvbmcuIEkganVzdCBjaGFuZ2VkIHRoaXMgbGluZSBlbXBpcmljYWxseSwgdGhvdWdoLCBzbyBJIGRvbid0IGtub3cgaWYgdGhlcmUgYXJlIG90aGVyIHJhbWlmaWNhdGlvbnMuXG5cdC8vcmV0dXJuICh0aGlzLm1pbng8dGhpcy5uZXh0eCkgPyBNYXRoLnNxcnQodGhpcy5zcGFjaW5nZHVyYXRpb24qOCkgOiAwOyAvLyB3ZSBoYXZlbid0IHVzZWQgYW55IHNwYWNpbmcgdW5pdHMgaWYgd2UgZW5kIHVwIHVzaW5nIG1pbnhcbn07XG5cbi8vXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmdldE5leHRYID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4gTWF0aC5tYXgodGhpcy5taW54LCB0aGlzLm5leHR4KTtcbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuYmVnaW5MYXlvdXQgPSBmdW5jdGlvbiAoc3RhcnR4KSB7XG5cdHRoaXMuaT0wO1xuXHR0aGlzLmR1cmF0aW9uaW5kZXg9MDtcblx0Ly90aGlzLmlpPXRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuXHR0aGlzLnN0YXJ0eD1zdGFydHg7XG5cdHRoaXMubWlueD1zdGFydHg7IC8vIGZ1cnRoZXN0IGxlZnQgdG8gd2hlcmUgbmVnYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnRzIGFyZSBhbGxvd2VkIHRvIGdvXG5cdHRoaXMubmV4dHg9c3RhcnR4OyAvLyB4IHBvc2l0aW9uIHdoZXJlIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhpcyB2b2ljZSBzaG91bGQgYmUgcGxhY2VkIGFzc3VtaW5nIG5vIG90aGVyIHZvaWNlcyBhbmQgbm8gZml4ZWQgd2lkdGggY29uc3RyYWludHNcblx0dGhpcy5zcGFjaW5nZHVyYXRpb249MDsgLy8gZHVyYXRpb24gbGVmdCB0byBiZSBsYWlkIG91dCBpbiBjdXJyZW50IGl0ZXJhdGlvbiAob21pdHRpbmcgYWRkaXRpb25hbCBzcGFjaW5nIGR1ZSB0byBvdGhlciBhc3BlY3RzLCBzdWNoIGFzIGJhcnMsIGRvdHMsIHNoYXJwcyBhbmQgZmxhdHMpXG59O1xuXG4vLyBUcnkgdG8gbGF5b3V0IHRoZSBlbGVtZW50IGF0IGluZGV4IHRoaXMuaVxuLy8geCAtIHBvc2l0aW9uIHRvIHRyeSB0byBsYXlvdXQgdGhlIGVsZW1lbnQgYXRcbi8vIHNwYWNpbmcgLSBiYXNlIHNwYWNpbmdcbi8vIGNhbid0IGNhbGwgdGhpcyBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZSBwZXIgaXRlcmF0aW9uXG5Wb2ljZUVsZW1lbnQucHJvdG90eXBlLmxheW91dE9uZUl0ZW0gPSBmdW5jdGlvbiAoeCwgc3BhY2luZykge1xuXHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW3RoaXMuaV07XG5cdGlmICghY2hpbGQpIHJldHVybiAwO1xuXHR2YXIgZXIgPSB4IC0gdGhpcy5taW54OyAvLyBhdmFpbGFibGUgZXh0cmF3aWR0aCB0byB0aGUgbGVmdFxuXHR2YXIgZXh0cmFXaWR0aCA9IGNoaWxkLmdldEV4dHJhV2lkdGgoKTtcblx0aWYgKGVyPGV4dHJhV2lkdGgpIHsgLy8gc2hpZnQgcmlnaHQgYnkgbmVlZGVkIGFtb3VudFxuXHRcdC8vIFRoZXJlJ3MgYW4gZXhjZXB0aW9uIGlmIGEgYmFyIGVsZW1lbnQgaXMgYWZ0ZXIgYSBQYXJ0IGVsZW1lbnQsIHRoZXJlIGlzIG5vIHNoaWZ0LlxuXHRcdGlmICh0aGlzLmkgPT09IDAgfHwgY2hpbGQudHlwZSAhPT0gJ2JhcicgfHwgKHRoaXMuY2hpbGRyZW5bdGhpcy5pLTFdLnR5cGUgIT09ICdwYXJ0JyAmJiB0aGlzLmNoaWxkcmVuW3RoaXMuaS0xXS50eXBlICE9PSAndGVtcG8nKSApXG5cdFx0XHR4Kz1leHRyYVdpZHRoLWVyO1xuXHR9XG5cdGNoaWxkLnNldFgoeCk7XG5cblx0dGhpcy5zcGFjaW5nZHVyYXRpb24gPSBjaGlsZC5kdXJhdGlvbjtcblx0Ly91cGRhdGUgbWlueFxuXHR0aGlzLm1pbnggPSB4K2NoaWxkLmdldE1pbldpZHRoKCk7IC8vIGFkZCBuZWNlc3NhcnkgbGF5b3V0IHNwYWNlXG5cdGlmICh0aGlzLmkhPT10aGlzLmNoaWxkcmVuLmxlbmd0aC0xKSB0aGlzLm1pbngrPWNoaWxkLm1pbnNwYWNpbmc7IC8vIGFkZCBtaW5pbXVtc3BhY2luZyBleGNlcHQgb24gbGFzdCBlbGVtXG5cblx0dGhpcy51cGRhdGVOZXh0WCh4LCBzcGFjaW5nKTtcblxuXHQvLyBjb250cmlidXRlIHRvIHN0YWZmIHkgcG9zaXRpb25cblx0Ly90aGlzLnN0YWZmLnRvcCA9IE1hdGgubWF4KGNoaWxkLnRvcCx0aGlzLnN0YWZmLnRvcCk7XG5cdC8vdGhpcy5zdGFmZi5ib3R0b20gPSBNYXRoLm1pbihjaGlsZC5ib3R0b20sdGhpcy5zdGFmZi5ib3R0b20pO1xuXG5cdHJldHVybiB4OyAvLyB3aGVyZSB3ZSBlbmQgdXAgaGF2aW5nIHBsYWNlZCB0aGUgY2hpbGRcbn07XG5cbi8vIGNhbGwgd2hlbiBzcGFjaW5nZHVyYXRpb24gaGFzIGJlZW4gdXBkYXRlZFxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS51cGRhdGVOZXh0WCA9IGZ1bmN0aW9uICh4LCBzcGFjaW5nKSB7XG5cdHRoaXMubmV4dHg9IHggKyAoc3BhY2luZypNYXRoLnNxcnQodGhpcy5zcGFjaW5nZHVyYXRpb24qOCkpO1xufTtcblxuVm9pY2VFbGVtZW50LnByb3RvdHlwZS5zaGlmdFJpZ2h0ID0gZnVuY3Rpb24gKGR4KSB7XG5cdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5pXTtcblx0aWYgKCFjaGlsZCkgcmV0dXJuO1xuXHRjaGlsZC5zZXRYKGNoaWxkLngrZHgpO1xuXHR0aGlzLm1pbngrPWR4O1xuXHR0aGlzLm5leHR4Kz1keDtcbn07XG5cbmZ1bmN0aW9uIGlzTm9uU3BhY2VyUmVzdChlbGVtKSB7XG5cdGlmIChlbGVtLnR5cGUgIT09ICdyZXN0Jylcblx0XHRyZXR1cm4gZmFsc2U7XG5cdGlmIChlbGVtLmFiY2VsZW0gJiYgZWxlbS5hYmNlbGVtLnJlc3QgJiYgZWxlbS5hYmNlbGVtLnJlc3QudHlwZSAhPT0gJ3NwYWNlcicpXG5cdFx0cmV0dXJuIHRydWU7XG5cdHJldHVybiBmYWxzZTtcbn1cblZvaWNlRWxlbWVudC5wcm90b3R5cGUuZHJhdyA9IGZ1bmN0aW9uIChyZW5kZXJlciwgYmFydG9wKSB7XG5cdHZhciB3aWR0aCA9IHRoaXMudy0xO1xuXHRyZW5kZXJlci5zdGFmZmJvdHRvbSA9IHRoaXMuc3RhZmYuYm90dG9tO1xuXHQvL3RoaXMuYmFyYm90dG9tID0gcmVuZGVyZXIuY2FsY1koMik7XG5cblx0cmVuZGVyZXIubWVhc3VyZU51bWJlciA9IG51bGw7XG5cdHJlbmRlcmVyLm5vdGVOdW1iZXIgPSBudWxsO1xuXHRpZiAodGhpcy5oZWFkZXIpIHsgLy8gcHJpbnQgdm9pY2UgbmFtZVxuXHRcdHZhciB0ZXh0cGl0Y2ggPSAxNCAtICh0aGlzLnZvaWNlbnVtYmVyKzEpKigxMi8odGhpcy52b2ljZXRvdGFsKzEpKTtcblx0XHRyZW5kZXJlci5yZW5kZXJUZXh0KHJlbmRlcmVyLnBhZGRpbmcubGVmdCwgcmVuZGVyZXIuY2FsY1kodGV4dHBpdGNoKSwgdGhpcy5oZWFkZXIsICd2b2ljZWZvbnQnLCAnc3RhZmYtZXh0cmEgdm9pY2UtbmFtZScsICdzdGFydCcpO1xuXHR9XG5cblx0Zm9yICh2YXIgaT0wLCBpaT10aGlzLmNoaWxkcmVuLmxlbmd0aDsgaTxpaTsgaSsrKSB7XG5cdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXTtcblx0XHR2YXIganVzdEluaXRpYWxpemVkTWVhc3VyZU51bWJlciA9IGZhbHNlO1xuXHRcdGlmIChjaGlsZC50eXBlICE9PSAnc3RhZmYtZXh0cmEnICYmIHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRcdHJlbmRlcmVyLm1lYXN1cmVOdW1iZXIgPSAwO1xuXHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdFx0XHRqdXN0SW5pdGlhbGl6ZWRNZWFzdXJlTnVtYmVyID0gdHJ1ZTtcblx0XHR9XG5cdFx0Y2hpbGQuZHJhdyhyZW5kZXJlciwgKHRoaXMuYmFydG8gfHwgaT09PWlpLTEpP2JhcnRvcDowKTtcblx0XHRpZiAoY2hpbGQudHlwZSA9PT0gJ25vdGUnIHx8IGlzTm9uU3BhY2VyUmVzdChjaGlsZCkpXG5cdFx0XHRyZW5kZXJlci5ub3RlTnVtYmVyKys7XG5cdFx0aWYgKGNoaWxkLnR5cGUgPT09ICdiYXInICYmICFqdXN0SW5pdGlhbGl6ZWRNZWFzdXJlTnVtYmVyKSB7XG5cdFx0XHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyKys7XG5cdFx0XHRyZW5kZXJlci5ub3RlTnVtYmVyID0gMDtcblx0XHR9XG5cdH1cblxuXHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gMDtcblx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdHBhcnNlQ29tbW9uLmVhY2godGhpcy5iZWFtcywgZnVuY3Rpb24oYmVhbSkge1xuXHRcdGlmIChiZWFtID09PSAnYmFyJykge1xuXHRcdFx0cmVuZGVyZXIubWVhc3VyZU51bWJlcisrO1xuXHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdFx0fSBlbHNlXG5cdFx0XHRiZWFtLmRyYXcocmVuZGVyZXIpOyAvLyBiZWFtcyBtdXN0IGJlIGRyYXduIGZpcnN0IGZvciBwcm9wZXIgcHJpbnRpbmcgb2YgdHJpcGxldHMsIHNsdXJzIGFuZCB0aWVzLlxuXHR9KTtcblxuXHRyZW5kZXJlci5tZWFzdXJlTnVtYmVyID0gMDtcblx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdHZhciBzZWxmID0gdGhpcztcblx0cGFyc2VDb21tb24uZWFjaCh0aGlzLm90aGVyY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG5cdFx0aWYgKGNoaWxkID09PSAnYmFyJykge1xuXHRcdFx0cmVuZGVyZXIubWVhc3VyZU51bWJlcisrO1xuXHRcdFx0cmVuZGVyZXIubm90ZU51bWJlciA9IDA7XG5cdFx0fSBlbHNlXG5cdFx0XHRjaGlsZC5kcmF3KHJlbmRlcmVyLHNlbGYuc3RhcnR4KzEwLHdpZHRoKTtcblx0fSk7XG5cbn07XG5cblZvaWNlRWxlbWVudC5wcm90b3R5cGUubGF5b3V0QmVhbXMgPSBmdW5jdGlvbigpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJlYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMuYmVhbXNbaV0ubGF5b3V0KSB7XG5cdFx0XHR0aGlzLmJlYW1zW2ldLmxheW91dCgpO1xuXHRcdFx0dGhpcy5tb3ZlRGVjb3JhdGlvbnModGhpcy5iZWFtc1tpXSk7XG5cdFx0XHQvLyBUaGUgYWJvdmUgd2lsbCBjaGFuZ2UgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBhYnNlbGVtIGNoaWxkcmVuLCBzbyBzZWUgaWYgd2UgbmVlZCB0byBleHBhbmQgb3VyIHJhbmdlLlxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmJlYW1zW2ldLmVsZW1zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHRoaXMuYWRqdXN0UmFuZ2UodGhpcy5iZWFtc1tpXS5lbGVtc1tqXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIE5vdyB3ZSBjYW4gbGF5b3V0IHRoZSB0cmlwbGV0c1xuXHRmb3IgKGkgPSAwOyBpIDwgdGhpcy5vdGhlcmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNoaWxkID0gdGhpcy5vdGhlcmNoaWxkcmVuW2ldO1xuXHRcdGlmIChjaGlsZC5sYXlvdXQpIHtcblx0XHRcdGNoaWxkLmxheW91dCgpO1xuXHRcdFx0dGhpcy5hZGp1c3RSYW5nZShjaGlsZCk7XG5cdFx0fVxuXHR9XG5cdHRoaXMuc3RhZmYudG9wID0gTWF0aC5tYXgodGhpcy5zdGFmZi50b3AsIHRoaXMudG9wKTtcblx0dGhpcy5zdGFmZi5ib3R0b20gPSBNYXRoLm1pbih0aGlzLnN0YWZmLmJvdHRvbSwgdGhpcy5ib3R0b20pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBWb2ljZUVsZW1lbnQ7XG4iLCIvLyBhYmNfYWJzdHJhY3RfZW5ncmF2ZXIuanM6IENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgcHJpbnRpbmcgYSBsaW5lIG9mIGFiY1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG52YXIgQWJzb2x1dGVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfYWJzb2x1dGVfZWxlbWVudCcpO1xudmFyIEJlYW1FbGVtID0gcmVxdWlyZSgnLi9hYmNfYmVhbV9lbGVtZW50Jyk7XG52YXIgQnJhY2VFbGVtID0gcmVxdWlyZSgnLi9hYmNfYnJhY2VfZWxlbWVudCcpO1xudmFyIGNyZWF0ZUNsZWYgPSByZXF1aXJlKCcuL2FiY19jcmVhdGVfY2xlZicpO1xudmFyIGNyZWF0ZUtleVNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vYWJjX2NyZWF0ZV9rZXlfc2lnbmF0dXJlJyk7XG52YXIgY3JlYXRlVGltZVNpZ25hdHVyZSA9IHJlcXVpcmUoJy4vYWJjX2NyZWF0ZV90aW1lX3NpZ25hdHVyZScpO1xudmFyIERlY29yYXRpb24gPSByZXF1aXJlKCcuL2FiY19kZWNvcmF0aW9uJyk7XG52YXIgRW5kaW5nRWxlbSA9IHJlcXVpcmUoJy4vYWJjX2VuZGluZ19lbGVtZW50Jyk7XG52YXIgZ2x5cGhzID0gcmVxdWlyZSgnLi9hYmNfZ2x5cGhzJyk7XG52YXIgUmVsYXRpdmVFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfcmVsYXRpdmVfZWxlbWVudCcpO1xudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG52YXIgU3RhZmZHcm91cEVsZW1lbnQgPSByZXF1aXJlKCcuL2FiY19zdGFmZl9ncm91cF9lbGVtZW50Jyk7XG52YXIgVGVtcG9FbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfdGVtcG9fZWxlbWVudCcpO1xudmFyIFRpZUVsZW0gPSByZXF1aXJlKCcuL2FiY190aWVfZWxlbWVudCcpO1xudmFyIFRyaXBsZXRFbGVtID0gcmVxdWlyZSgnLi9hYmNfdHJpcGxldF9lbGVtZW50Jyk7XG52YXIgVm9pY2VFbGVtZW50ID0gcmVxdWlyZSgnLi9hYmNfdm9pY2VfZWxlbWVudCcpO1xuXG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG5cbnZhciBBYnN0cmFjdEVuZ3JhdmVyO1xuXG4oZnVuY3Rpb24oKSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG52YXIgZ2V0RHVyYXRpb24gPSBmdW5jdGlvbihlbGVtKSB7XG4gIHZhciBkID0gMDtcbiAgaWYgKGVsZW0uZHVyYXRpb24pIHtcbiAgICBkID0gZWxlbS5kdXJhdGlvbjtcbiAgfVxuICByZXR1cm4gZDtcbn07XG5cbnZhciBoaW50ID0gZmFsc2U7XG5cblx0dmFyIGNoYXJ0YWJsZSA9IHtcblx0XHRyZXN0OnswOlwicmVzdHMud2hvbGVcIiwgMTpcInJlc3RzLmhhbGZcIiwgMjpcInJlc3RzLnF1YXJ0ZXJcIiwgMzpcInJlc3RzLjh0aFwiLCA0OiBcInJlc3RzLjE2dGhcIiw1OiBcInJlc3RzLjMybmRcIiwgNjogXCJyZXN0cy42NHRoXCIsIDc6IFwicmVzdHMuMTI4dGhcIiwgXCJtdWx0aVwiOiBcInJlc3RzLm11bHRpbWVhc3VyZVwifSxcblx0XHRub3RlOntcIi0xXCI6IFwibm90ZWhlYWRzLmRibFwiLCAwOlwibm90ZWhlYWRzLndob2xlXCIsIDE6XCJub3RlaGVhZHMuaGFsZlwiLCAyOlwibm90ZWhlYWRzLnF1YXJ0ZXJcIiwgMzpcIm5vdGVoZWFkcy5xdWFydGVyXCIsIDQ6XCJub3RlaGVhZHMucXVhcnRlclwiLCA1Olwibm90ZWhlYWRzLnF1YXJ0ZXJcIiwgNjpcIm5vdGVoZWFkcy5xdWFydGVyXCIsIDc6XCJub3RlaGVhZHMucXVhcnRlclwiLCAnbm9zdGVtJzpcIm5vdGVoZWFkcy5xdWFydGVyXCJ9LFxuXHRcdHJoeXRobTp7XCItMVwiOiBcIm5vdGVoZWFkcy5zbGFzaC53aG9sZVwiLCAwOlwibm90ZWhlYWRzLnNsYXNoLndob2xlXCIsIDE6XCJub3RlaGVhZHMuc2xhc2gud2hvbGVcIiwgMjpcIm5vdGVoZWFkcy5zbGFzaC5xdWFydGVyXCIsIDM6XCJub3RlaGVhZHMuc2xhc2gucXVhcnRlclwiLCA0Olwibm90ZWhlYWRzLnNsYXNoLnF1YXJ0ZXJcIiwgNTpcIm5vdGVoZWFkcy5zbGFzaC5xdWFydGVyXCIsIDY6XCJub3RlaGVhZHMuc2xhc2gucXVhcnRlclwiLCA3Olwibm90ZWhlYWRzLnNsYXNoLnF1YXJ0ZXJcIiwgbm9zdGVtOiBcIm5vdGVoZWFkcy5zbGFzaC5ub3N0ZW1cIn0sXG5cdFx0eDp7XCItMVwiOiBcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCIsIDA6XCJub3RlaGVhZHMuaW5kZXRlcm1pbmF0ZVwiLCAxOlwibm90ZWhlYWRzLmluZGV0ZXJtaW5hdGVcIiwgMjpcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCIsIDM6XCJub3RlaGVhZHMuaW5kZXRlcm1pbmF0ZVwiLCA0Olwibm90ZWhlYWRzLmluZGV0ZXJtaW5hdGVcIiwgNTpcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCIsIDY6XCJub3RlaGVhZHMuaW5kZXRlcm1pbmF0ZVwiLCA3Olwibm90ZWhlYWRzLmluZGV0ZXJtaW5hdGVcIiwgbm9zdGVtOiBcIm5vdGVoZWFkcy5pbmRldGVybWluYXRlXCJ9LFxuXHRcdGhhcm1vbmljOntcIi0xXCI6IFwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIiwgMDpcIm5vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyXCIsIDE6XCJub3RlaGVhZHMuaGFybW9uaWMucXVhcnRlclwiLCAyOlwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIiwgMzpcIm5vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyXCIsIDQ6XCJub3RlaGVhZHMuaGFybW9uaWMucXVhcnRlclwiLCA1Olwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIiwgNjpcIm5vdGVoZWFkcy5oYXJtb25pYy5xdWFydGVyXCIsIDc6XCJub3RlaGVhZHMuaGFybW9uaWMucXVhcnRlclwiLCBub3N0ZW06IFwibm90ZWhlYWRzLmhhcm1vbmljLnF1YXJ0ZXJcIn0sXG5cdFx0dWZsYWdzOnszOlwiZmxhZ3MudTh0aFwiLCA0OlwiZmxhZ3MudTE2dGhcIiwgNTpcImZsYWdzLnUzMm5kXCIsIDY6XCJmbGFncy51NjR0aFwifSxcblx0XHRkZmxhZ3M6ezM6XCJmbGFncy5kOHRoXCIsIDQ6XCJmbGFncy5kMTZ0aFwiLCA1OlwiZmxhZ3MuZDMybmRcIiwgNjpcImZsYWdzLmQ2NHRoXCJ9XG5cdH07XG5cbkFic3RyYWN0RW5ncmF2ZXIgPSBmdW5jdGlvbihyZW5kZXJlciwgdHVuZU51bWJlciwgb3B0aW9ucykge1xuXHR0aGlzLmRlY29yYXRpb24gPSBuZXcgRGVjb3JhdGlvbigpO1xuXHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cdHRoaXMudHVuZU51bWJlciA9IHR1bmVOdW1iZXI7XG5cdHRoaXMuaXNCYWdwaXBlcyA9IG9wdGlvbnMuYmFncGlwZXM7XG5cdHRoaXMuZmxhdEJlYW1zID0gb3B0aW9ucy5mbGF0YmVhbXM7XG5cdHRoaXMucmVzZXQoKTtcbn07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuc2x1cnMgPSB7fTtcblx0dGhpcy50aWVzID0gW107XG5cdHRoaXMudm9pY2VTY2FsZSA9IDE7XG5cdHRoaXMuc2x1cnNieXZvaWNlID0ge307XG5cdHRoaXMudGllc2J5dm9pY2UgPSB7fTtcblx0dGhpcy5lbmRpbmdzYnl2b2ljZSA9IHt9O1xuXHR0aGlzLnNjYWxlQnlWb2ljZSA9IHt9O1xuXHR0aGlzLnRyaXBsZXRtdWx0aXBsaWVyID0gMTtcblxuXHR0aGlzLmFiY2xpbmUgPSB1bmRlZmluZWQ7XG5cdHRoaXMuYWNjaWRlbnRhbFNsb3QgPSB1bmRlZmluZWQ7XG5cdHRoaXMuYWNjaWRlbnRhbHNoaWZ0eCA9IHVuZGVmaW5lZDtcblx0dGhpcy5kb3RzaGlmdHggPSB1bmRlZmluZWQ7XG5cdHRoaXMuaGFzVm9jYWxzID0gZmFsc2U7XG5cdHRoaXMubWluWSA9IHVuZGVmaW5lZDtcblx0dGhpcy5wYXJ0c3RhcnRlbGVtID0gdW5kZWZpbmVkO1xuXHR0aGlzLnN0YXJ0bGltaXRlbGVtID0gdW5kZWZpbmVkO1xuXHR0aGlzLnN0ZW1kaXIgPSB1bmRlZmluZWQ7XG59O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5zZXRTdGVtSGVpZ2h0ID0gZnVuY3Rpb24oaGVpZ2h0SW5QaXhlbHMpIHtcblx0dGhpcy5zdGVtSGVpZ2h0ID0gaGVpZ2h0SW5QaXhlbHMgLyBzcGFjaW5nLlNURVA7XG59O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5nZXRDdXJyZW50Vm9pY2VJZCA9IGZ1bmN0aW9uKHMsdikge1xuICByZXR1cm4gXCJzXCIrcytcInZcIit2O1xufTtcblxuQWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUucHVzaENyb3NzTGluZUVsZW1zID0gZnVuY3Rpb24ocyx2KSB7XG4gIHRoaXMuc2x1cnNieXZvaWNlW3RoaXMuZ2V0Q3VycmVudFZvaWNlSWQocyx2KV0gPSB0aGlzLnNsdXJzO1xuICB0aGlzLnRpZXNieXZvaWNlW3RoaXMuZ2V0Q3VycmVudFZvaWNlSWQocyx2KV0gPSB0aGlzLnRpZXM7XG4gIHRoaXMuZW5kaW5nc2J5dm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXSA9IHRoaXMucGFydHN0YXJ0ZWxlbTtcbiAgdGhpcy5zY2FsZUJ5Vm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXSA9IHRoaXMudm9pY2VTY2FsZTtcbn07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLnBvcENyb3NzTGluZUVsZW1zID0gZnVuY3Rpb24ocyx2KSB7XG4gIHRoaXMuc2x1cnMgPSB0aGlzLnNsdXJzYnl2b2ljZVt0aGlzLmdldEN1cnJlbnRWb2ljZUlkKHMsdildIHx8IHt9O1xuICB0aGlzLnRpZXMgPSB0aGlzLnRpZXNieXZvaWNlW3RoaXMuZ2V0Q3VycmVudFZvaWNlSWQocyx2KV0gfHwgW107XG4gIHRoaXMucGFydHN0YXJ0ZWxlbSA9IHRoaXMuZW5kaW5nc2J5dm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXTtcbiAgdGhpcy52b2ljZVNjYWxlID0gdGhpcy5zY2FsZUJ5Vm9pY2VbdGhpcy5nZXRDdXJyZW50Vm9pY2VJZChzLHYpXTtcbiAgaWYgKHRoaXMudm9pY2VTY2FsZSA9PT0gdW5kZWZpbmVkKSB0aGlzLnZvaWNlU2NhbGUgPSAxO1xufTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jb250YWluc0x5cmljcyA9IGZ1bmN0aW9uKHN0YXZlcykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHN0YXZlc1tpXS52b2ljZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBzdGF2ZXNbaV0udm9pY2VzW2pdLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdFx0dmFyIGVsID0gc3RhdmVzW2ldLnZvaWNlc1tqXVtrXTtcblx0XHRcdFx0XHRpZiAoZWwubHlyaWMpIHtcblx0XHRcdFx0XHRcdC8vIFdlIGp1c3Qgd2FudCB0byBzZWUgaWYgdGhlcmUgYXJlIHZvY2FscyBiZWxvdyB0aGUgbXVzaWMgdG8ga25vdyB3aGVyZSB0byBwdXQgdGhlIGR5bmFtaWNzLlxuXHRcdFx0XHRcdFx0aWYgKCFlbC5wb3NpdGlvbmluZyB8fCBlbC5wb3NpdGlvbmluZy52b2NhbFBvc2l0aW9uID09PSAnYmVsb3cnKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhc1ZvY2FscyA9IHRydWU7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jcmVhdGVBQkNMaW5lID0gZnVuY3Rpb24oc3RhZmZzLCB0ZW1wbykge1xuICAgIHRoaXMubWluWSA9IDI7IC8vIFBFUjogVGhpcyB3aWxsIGJlIHRoZSBsb3dlc3QgdGhhdCBhbnkgbm90ZSByZWFjaGVzLiBJdCB3aWxsIGJlIHVzZWQgdG8gc2V0IHRoZSBkeW5hbWljcyByb3cuXG5cdC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IGx5cmljcyBvbiB0aGlzIGxpbmUuXG5cdHRoaXMuY29udGFpbnNMeXJpY3Moc3RhZmZzKTtcbiAgdmFyIHN0YWZmZ3JvdXAgPSBuZXcgU3RhZmZHcm91cEVsZW1lbnQoKTtcblx0dGhpcy50ZW1wb1NldCA9IGZhbHNlO1xuICBmb3IgKHZhciBzID0gMDsgcyA8IHN0YWZmcy5sZW5ndGg7IHMrKykge1xuXHQgIGlmIChoaW50KVxuXHRcdCAgdGhpcy5yZXN0b3JlU3RhdGUoKTtcblx0ICBoaW50ID0gZmFsc2U7XG4gICAgdGhpcy5jcmVhdGVBQkNTdGFmZihzdGFmZmdyb3VwLCBzdGFmZnNbc10sIHRlbXBvLCBzKTtcbiAgfVxuICByZXR1cm4gc3RhZmZncm91cDtcbn07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLmNyZWF0ZUFCQ1N0YWZmID0gZnVuY3Rpb24oc3RhZmZncm91cCwgYWJjc3RhZmYsIHRlbXBvLCBzKSB7XG4vLyBJZiB0aGUgdGVtcG8gaXMgcGFzc2VkIGluLCB0aGVuIHRoZSBmaXJzdCBlbGVtZW50IHNob3VsZCBnZXQgdGhlIHRlbXBvIGF0dGFjaGVkIHRvIGl0LlxuICBmb3IgKHZhciB2ID0gMDsgdiA8IGFiY3N0YWZmLnZvaWNlcy5sZW5ndGg7IHYrKykge1xuICAgIHZhciB2b2ljZSA9IG5ldyBWb2ljZUVsZW1lbnQodixhYmNzdGFmZi52b2ljZXMubGVuZ3RoKTtcbiAgICBpZiAodj09PTApIHtcblx0ICAgIHZvaWNlLmJhcmZyb20gPSAoYWJjc3RhZmYuY29ubmVjdEJhckxpbmVzPT09XCJzdGFydFwiIHx8IGFiY3N0YWZmLmNvbm5lY3RCYXJMaW5lcz09PVwiY29udGludWVcIik7XG5cdCAgICB2b2ljZS5iYXJ0byA9IChhYmNzdGFmZi5jb25uZWN0QmFyTGluZXM9PT1cImNvbnRpbnVlXCIgfHwgYWJjc3RhZmYuY29ubmVjdEJhckxpbmVzPT09XCJlbmRcIik7XG4gICAgfSBlbHNlIHtcblx0ICAgIHZvaWNlLmR1cGxpY2F0ZSA9IHRydWU7IC8vIGJhciBsaW5lcyBhbmQgb3RoZXIgZHVwbGljYXRlIGluZm8gbmVlZCBub3QgYmUgY3JlYXRlZFxuICAgIH1cbiAgICBpZiAoYWJjc3RhZmYudGl0bGUgJiYgYWJjc3RhZmYudGl0bGVbdl0pIHZvaWNlLmhlYWRlcj1hYmNzdGFmZi50aXRsZVt2XTtcblx0ICB2YXIgY2xlZiA9IGNyZWF0ZUNsZWYoYWJjc3RhZmYuY2xlZiwgdGhpcy50dW5lTnVtYmVyKTtcblx0ICBpZiAoY2xlZikge1xuXHRcdCAgaWYgKHYgPT09MCAmJiBhYmNzdGFmZi5iYXJOdW1iZXIpIHtcblx0XHRcdCAgdGhpcy5hZGRNZWFzdXJlTnVtYmVyKGFiY3N0YWZmLmJhck51bWJlciwgY2xlZik7XG5cdFx0ICB9XG5cdFx0ICB2b2ljZS5hZGRDaGlsZChjbGVmKTtcblx0ICB9XG5cdCAgdmFyIGtleVNpZyA9IGNyZWF0ZUtleVNpZ25hdHVyZShhYmNzdGFmZi5rZXksIHRoaXMudHVuZU51bWJlcik7XG5cdCAgaWYgKGtleVNpZykge1xuXHRcdCAgdm9pY2UuYWRkQ2hpbGQoa2V5U2lnKTtcblx0XHQgIHRoaXMuc3RhcnRsaW1pdGVsZW0gPSBrZXlTaWc7IC8vIGxpbWl0IHRpZXMgaGVyZVxuXHQgIH1cbiAgICBpZiAoYWJjc3RhZmYubWV0ZXIpIHtcbiAgICBcdGlmIChhYmNzdGFmZi5tZXRlci50eXBlID09PSAnc3BlY2lmaWVkJykge1xuICAgIFx0XHR0aGlzLm1lYXN1cmVMZW5ndGggPSBhYmNzdGFmZi5tZXRlci52YWx1ZVswXS5udW0gLyBhYmNzdGFmZi5tZXRlci52YWx1ZVswXS5kZW47XG5cdCAgICB9IGVsc2Vcblx0ICAgIFx0dGhpcy5tZWFzdXJlTGVuZ3RoID0gMTtcblx0XHR2YXIgdHMgPSBjcmVhdGVUaW1lU2lnbmF0dXJlKGFiY3N0YWZmLm1ldGVyLCB0aGlzLnR1bmVOdW1iZXIpO1xuXHQgICAgdm9pY2UuYWRkQ2hpbGQodHMpO1xuXHRcdHRoaXMuc3RhcnRsaW1pdGVsZW0gPSB0czsgLy8gbGltaXQgdGllcyBoZXJlXG5cdH1cblx0ICBpZiAodm9pY2UuZHVwbGljYXRlKVxuXHRcdCAgdm9pY2UuY2hpbGRyZW4gPSBbXTsgLy8gd2Ugc2hvdWxkbid0IHJlcHJpbnQgdGhlIGFib3ZlIGlmIHdlJ3JlIHJldXNpbmcgdGhlIHNhbWUgc3RhZmYuIFdlIGp1c3QgY3JlYXRlZCB0aGVtIHRvIGdldCB0aGUgcmlnaHQgc3BhY2luZy5cbiAgICB2YXIgc3RhZmZMaW5lcyA9IGFiY3N0YWZmLmNsZWYuc3RhZmZsaW5lcyB8fCBhYmNzdGFmZi5jbGVmLnN0YWZmbGluZXMgPT09IDAgPyBhYmNzdGFmZi5jbGVmLnN0YWZmbGluZXMgOiA1O1xuICAgIHN0YWZmZ3JvdXAuYWRkVm9pY2Uodm9pY2UscyxzdGFmZkxpbmVzKTtcblx0ICB2YXIgaXNTaW5nbGVMaW5lU3RhZmYgPSBzdGFmZkxpbmVzID09PSAxO1xuXHQgIHRoaXMuY3JlYXRlQUJDVm9pY2UoYWJjc3RhZmYudm9pY2VzW3ZdLHRlbXBvLCBzLCB2LCBpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UpO1xuXHQgIHN0YWZmZ3JvdXAuc2V0U3RhZmZMaW1pdHModm9pY2UpO1xuICAgICAgICAgICAgLy9Ub255OiBIZXJlIEkgYW0gZm9sbG93aW5nIHdoYXQgc3RhdmVzIG5lZWQgdG8gYmUgc3Vycm91bmRlZCBieSB0aGUgYnJhY2UsIGJ5IGluY3JlbWVudGluZyB0aGUgbGVuZ3RoIG9mIHRoZSBicmFjZSBjbGFzcy5cbiAgICAgICAgICAgIC8vU28gYmFzaWNhbGx5IHRoaXMga2VlcHMgaW5jcmVtZW50aW5nIHRoZSBudW1iZXIgb2Ygc3RhZmYgc3Vycm91bmRlZCBieSB0aGUgYnJhY2UgdW50aWwgaXQgc2VlcyBcImVuZFwiLlxuICAgICAgICAgICAgLy9UaGlzIHRoZW4gZ2V0cyBwcm9jZXNzZWQgaW4gYWJjX3N0YWZmX2dyb3VwX2VsZW1lbnQuanMsIHNvIHRoYXQgaXQgd2lsbCBoYXZlIHRoZSBjb3JyZWN0IHRvcCBhbmQgYm90dG9tIGNvb3JkaW5hdGVzIGZvciB0aGUgYnJhY2UuXG5cdFx0XHRpZihhYmNzdGFmZi5icmFjZSA9PT0gXCJzdGFydFwiKXtcblx0XHRcdFx0c3RhZmZncm91cC5icmFjZSA9IG5ldyBCcmFjZUVsZW0oMSwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGFiY3N0YWZmLmJyYWNlID09PSBcImVuZFwiICYmIHN0YWZmZ3JvdXAuYnJhY2UpIHtcblx0XHRcdFx0c3RhZmZncm91cC5icmFjZS5pbmNyZWFzZVN0YXZlc0luY2x1ZGVkKCk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmKGFiY3N0YWZmLmJyYWNlID09PSBcImNvbnRpbnVlXCIgJiYgc3RhZmZncm91cC5icmFjZSl7XG5cdFx0XHRcdHN0YWZmZ3JvdXAuYnJhY2UuaW5jcmVhc2VTdGF2ZXNJbmNsdWRlZCgpO1xuXHRcdFx0fVxuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRCZWFtR3JvdXAoYWJjbGluZSwgcG9zKSB7XG5cdC8vIElmIHRoZXJlIGFyZSBub3RlcyBiZWFtZWQgdG9nZXRoZXIsIHRoZXkgYXJlIGhhbmRsZWQgYXMgYSBncm91cCwgc28gZmluZCBhbGwgb2YgdGhlbSBoZXJlLlxuXHR2YXIgZWxlbSA9IGFiY2xpbmVbcG9zXTtcblx0aWYgKGVsZW0uZWxfdHlwZSAhPT0gJ25vdGUnIHx8ICFlbGVtLnN0YXJ0QmVhbSB8fCBlbGVtLmVuZEJlYW0pXG5cdFx0cmV0dXJuIHsgY291bnQ6IDEsIGVsZW06IGVsZW0gfTtcblxuXHR2YXIgZ3JvdXAgPSBbXTtcblx0d2hpbGUgKHBvcyA8IGFiY2xpbmUubGVuZ3RoICYmIGFiY2xpbmVbcG9zXS5lbF90eXBlID09PSAnbm90ZScpIHtcblx0XHRncm91cC5wdXNoKGFiY2xpbmVbcG9zXSk7XG5cdFx0aWYgKGFiY2xpbmVbcG9zXS5lbmRCZWFtKVxuXHRcdFx0YnJlYWs7XG5cdFx0cG9zKys7XG5cdH1cblx0cmV0dXJuIHsgY291bnQ6IGdyb3VwLmxlbmd0aCwgZWxlbTogZ3JvdXAgfTtcbn1cblxuQWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuY3JlYXRlQUJDVm9pY2UgPSBmdW5jdGlvbihhYmNsaW5lLCB0ZW1wbywgcywgdiwgaXNTaW5nbGVMaW5lU3RhZmYsIHZvaWNlKSB7XG4gIHRoaXMucG9wQ3Jvc3NMaW5lRWxlbXMocyx2KTtcbiAgdGhpcy5zdGVtZGlyID0gKHRoaXMuaXNCYWdwaXBlcyk/XCJkb3duXCI6bnVsbDtcbiAgdGhpcy5hYmNsaW5lID0gYWJjbGluZTtcbiAgaWYgKHRoaXMucGFydHN0YXJ0ZWxlbSkge1xuICAgIHRoaXMucGFydHN0YXJ0ZWxlbSA9IG5ldyBFbmRpbmdFbGVtKFwiXCIsIG51bGwsIG51bGwpO1xuXHQgIHZvaWNlLmFkZE90aGVyKHRoaXMucGFydHN0YXJ0ZWxlbSk7XG4gIH1cblx0dmFyIHZvaWNlTnVtYmVyID0gdm9pY2Uudm9pY2V0b3RhbCA8IDIgPyAtMSA6IHZvaWNlLnZvaWNlbnVtYmVyO1xuICBmb3IgKHZhciBzbHVyIGluIHRoaXMuc2x1cnMpIHtcbiAgICBpZiAodGhpcy5zbHVycy5oYXNPd25Qcm9wZXJ0eShzbHVyKSkge1xuXHQgICAgLy8gdGhpcyBpcyBhbHJlYWR5IGEgc2x1ciBlbGVtZW50LCBidXQgaXQgd2FzIGNyZWF0ZWQgZm9yIHRoZSBsYXN0IGxpbmUsIHNvIHJlY3JlYXRlIGl0LlxuICAgICAgdGhpcy5zbHVyc1tzbHVyXT0gbmV3IFRpZUVsZW0oe2ZvcmNlOiB0aGlzLnNsdXJzW3NsdXJdLmZvcmNlLCB2b2ljZU51bWJlcjogdm9pY2VOdW1iZXIsIHN0ZW1EaXI6IHRoaXMuc2x1cnNbc2x1cl0uc3RlbURpcn0pO1xuXHRcdGlmIChoaW50KSB0aGlzLnNsdXJzW3NsdXJdLnNldEhpbnQoKTtcblx0ICAgIHZvaWNlLmFkZE90aGVyKHRoaXMuc2x1cnNbc2x1cl0pO1xuICAgIH1cbiAgfVxuICBmb3IgKHZhciBpPTA7IGk8dGhpcy50aWVzLmxlbmd0aDsgaSsrKSB7XG4gIFx0Ly8gdGhpcyBpcyBhbHJlYWR5IGEgdGllIGVsZW1lbnQsIGJ1dCBpdCB3YXMgY3JlYXRlZCBmb3IgdGhlIGxhc3QgbGluZSwgc28gcmVjcmVhdGUgaXQuXG4gICAgdGhpcy50aWVzW2ldPW5ldyBUaWVFbGVtKHsgZm9yY2U6IHRoaXMudGllc1tpXS5mb3JjZSwgc3RlbURpcjogdGhpcy50aWVzW2ldLnN0ZW1EaXIsIHZvaWNlTnVtYmVyOiB2b2ljZU51bWJlciB9KTtcblx0ICBpZiAoaGludCkgdGhpcy50aWVzW2ldLnNldEhpbnQoKTtcblx0ICB2b2ljZS5hZGRPdGhlcih0aGlzLnRpZXNbaV0pO1xuICB9XG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmFiY2xpbmUubGVuZ3RoOyBqKyspIHtcblx0ICBzZXRBdmVyYWdlUGl0Y2godGhpcy5hYmNsaW5lW2pdKTtcblx0ICB0aGlzLm1pblkgPSBNYXRoLm1pbih0aGlzLmFiY2xpbmVbal0ubWlucGl0Y2gsIHRoaXMubWluWSk7XG4gIH1cblxuXHR2YXIgaXNGaXJzdFN0YWZmID0gKHMgPT09IDApO1xuXHR2YXIgcG9zID0gMDtcblx0d2hpbGUgKHBvcyA8IHRoaXMuYWJjbGluZS5sZW5ndGgpIHtcblx0XHR2YXIgcmV0ID0gZ2V0QmVhbUdyb3VwKHRoaXMuYWJjbGluZSwgcG9zKTtcblx0XHR2YXIgYWJzZWxlbXMgPSB0aGlzLmNyZWF0ZUFCQ0VsZW1lbnQoaXNGaXJzdFN0YWZmLCBpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIHJldC5lbGVtKTtcblx0XHRpZiAoYWJzZWxlbXMpIHtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBhYnNlbGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoIXRoaXMudGVtcG9TZXQgJiYgdGVtcG8gJiYgIXRlbXBvLnN1cHByZXNzKSB7XG5cdFx0XHRcdFx0dGhpcy50ZW1wb1NldCA9IHRydWU7XG5cdFx0XHRcdFx0dmFyIHRlbXBvRWxlbWVudCA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQocmV0LmVsZW0sIDAsIDAsIFwidGVtcG9cIiwgdGhpcy50dW5lTnVtYmVyLCB7fSk7XG5cdFx0XHRcdFx0dGVtcG9FbGVtZW50LmFkZENoaWxkKG5ldyBUZW1wb0VsZW1lbnQodGVtcG8sIHRoaXMudHVuZU51bWJlciwgY3JlYXRlTm90ZUhlYWQpKTtcblx0XHRcdFx0XHR2b2ljZS5hZGRDaGlsZCh0ZW1wb0VsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZvaWNlLmFkZENoaWxkKGFic2VsZW1zW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cG9zICs9IHJldC5jb3VudDtcblx0fVxuXHR0aGlzLnB1c2hDcm9zc0xpbmVFbGVtcyhzLCB2KTtcbn07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuc2F2ZVN0YXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0dGhpcy50aWVzU2F2ZSA9IHBhcnNlQ29tbW9uLmNsb25lQXJyYXkodGhpcy50aWVzKTtcblx0XHR0aGlzLnNsdXJzU2F2ZSA9IHBhcnNlQ29tbW9uLmNsb25lSGFzaE9mSGFzaCh0aGlzLnNsdXJzKTtcblx0XHR0aGlzLnNsdXJzYnl2b2ljZVNhdmUgPSBwYXJzZUNvbW1vbi5jbG9uZUhhc2hPZkhhc2godGhpcy5zbHVyc2J5dm9pY2UpO1xuXHRcdHRoaXMudGllc2J5dm9pY2VTYXZlID0gcGFyc2VDb21tb24uY2xvbmVIYXNoT2ZBcnJheU9mSGFzaCh0aGlzLnRpZXNieXZvaWNlKTtcblx0fTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5yZXN0b3JlU3RhdGUgPSBmdW5jdGlvbigpIHtcblx0XHR0aGlzLnRpZXMgPSBwYXJzZUNvbW1vbi5jbG9uZUFycmF5KHRoaXMudGllc1NhdmUpO1xuXHRcdHRoaXMuc2x1cnMgPSBwYXJzZUNvbW1vbi5jbG9uZUhhc2hPZkhhc2godGhpcy5zbHVyc1NhdmUpO1xuXHRcdHRoaXMuc2x1cnNieXZvaWNlID0gcGFyc2VDb21tb24uY2xvbmVIYXNoT2ZIYXNoKHRoaXMuc2x1cnNieXZvaWNlU2F2ZSk7XG5cdFx0dGhpcy50aWVzYnl2b2ljZSA9IHBhcnNlQ29tbW9uLmNsb25lSGFzaE9mQXJyYXlPZkhhc2godGhpcy50aWVzYnl2b2ljZVNhdmUpO1xuXHR9O1xuXG5cdC8vIGZ1bmN0aW9uIHdyaXRlTWVhc3VyZVdpZHRoKHZvaWNlKSB7XG5cdC8vIFx0dmFyIHdpZHRoID0gMDtcblx0Ly8gXHRmb3IgKHZhciBpID0gdm9pY2UuY2hpbGRyZW4ubGVuZ3RoLTE7IGkgPj0gMDsgaS0tKSB7XG5cdC8vIFx0XHR2YXIgZWxlbSA9IHZvaWNlLmNoaWxkcmVuW2ldO1xuXHQvLyBcdFx0aWYgKGVsZW0uYWJjZWxlbS5lbF90eXBlID09PSAnYmFyJylcblx0Ly8gXHRcdFx0YnJlYWs7XG5cdC8vIFx0XHR3aWR0aCArPSBlbGVtLnc7XG5cdC8vIFx0fVxuXHQvLyBcdHJldHVybiBuZXcgUmVsYXRpdmVFbGVtZW50KHdpZHRoLnRvRml4ZWQoMiksIC03MCwgMCwgdW5kZWZpbmVkLCB7dHlwZTpcImRlYnVnXCJ9KTtcblx0Ly8gfVxuXG5cdC8vIHJldHVybiBhbiBhcnJheSBvZiBBYnNvbHV0ZUVsZW1lbnRcbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLmNyZWF0ZUFCQ0VsZW1lbnQgPSBmdW5jdGlvbihpc0ZpcnN0U3RhZmYsIGlzU2luZ2xlTGluZVN0YWZmLCB2b2ljZSwgZWxlbSkge1xuICB2YXIgZWxlbXNldCA9IFtdO1xuICBzd2l0Y2ggKGVsZW0uZWxfdHlwZSkge1xuXHQgIGNhc2UgdW5kZWZpbmVkOlxuXHQgIFx0Ly8gaXQgaXMgdW5kZWZpbmVkIGlmIHdlIHdlcmUgcGFzc2VkIGFuIGFycmF5IGluIC0gYW4gYXJyYXkgbWVhbnMgYSBzZXQgb2Ygbm90ZXMgdGhhdCBzaG91bGQgYmUgYmVhbWVkIHRvZ2V0aGVyLlxuXHRcdCAgZWxlbXNldCA9IHRoaXMuY3JlYXRlQmVhbShpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIGVsZW0pO1xuXHQgIFx0YnJlYWs7XG4gIGNhc2UgXCJub3RlXCI6XG5cdCAgZWxlbXNldFswXSA9IHRoaXMuY3JlYXRlTm90ZShlbGVtLCBmYWxzZSwgaXNTaW5nbGVMaW5lU3RhZmYsIHZvaWNlKTtcblx0ICBpZiAodGhpcy50cmlwbGV0ICYmIHRoaXMudHJpcGxldC5pc0Nsb3NlZCgpKSB7XG5cdFx0ICB2b2ljZS5hZGRPdGhlcih0aGlzLnRyaXBsZXQpO1xuXHRcdCAgdGhpcy50cmlwbGV0ID0gbnVsbDtcblx0XHQgIHRoaXMudHJpcGxldG11bHRpcGxpZXIgPSAxO1xuXHQgIH1cbiAgICBicmVhaztcbiAgY2FzZSBcImJhclwiOlxuICAgIGVsZW1zZXRbMF0gPSB0aGlzLmNyZWF0ZUJhckxpbmUodm9pY2UsIGVsZW0sIGlzRmlyc3RTdGFmZik7XG4gICAgaWYgKHZvaWNlLmR1cGxpY2F0ZSAmJiBlbGVtc2V0Lmxlbmd0aCA+IDApIGVsZW1zZXRbMF0uaW52aXNpYmxlID0gdHJ1ZTtcbi8vXHQgIGVsZW1zZXRbMF0uYWRkQ2hpbGQod3JpdGVNZWFzdXJlV2lkdGgodm9pY2UpKTtcbiAgICBicmVhaztcbiAgY2FzZSBcIm1ldGVyXCI6XG4gICAgZWxlbXNldFswXSA9IGNyZWF0ZVRpbWVTaWduYXR1cmUoZWxlbSwgdGhpcy50dW5lTnVtYmVyKTtcblx0ICB0aGlzLnN0YXJ0bGltaXRlbGVtID0gZWxlbXNldFswXTsgLy8gbGltaXQgdGllcyBoZXJlXG4gICAgaWYgKHZvaWNlLmR1cGxpY2F0ZSAmJiBlbGVtc2V0Lmxlbmd0aCA+IDApIGVsZW1zZXRbMF0uaW52aXNpYmxlID0gdHJ1ZTtcbiAgICBicmVhaztcbiAgY2FzZSBcImNsZWZcIjpcbiAgICBlbGVtc2V0WzBdID0gY3JlYXRlQ2xlZihlbGVtLCB0aGlzLnR1bmVOdW1iZXIpO1xuXHQgIGlmICghZWxlbXNldFswXSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKHZvaWNlLmR1cGxpY2F0ZSAmJiBlbGVtc2V0Lmxlbmd0aCA+IDApIGVsZW1zZXRbMF0uaW52aXNpYmxlID0gdHJ1ZTtcbiAgICBicmVhaztcbiAgY2FzZSBcImtleVwiOlxuXHQgIHZhciBhYnNLZXkgPSBjcmVhdGVLZXlTaWduYXR1cmUoZWxlbSwgdGhpcy50dW5lTnVtYmVyKTtcblx0ICBpZiAoYWJzS2V5KSB7XG5cdFx0ICBlbGVtc2V0WzBdID0gYWJzS2V5O1xuXHRcdCAgdGhpcy5zdGFydGxpbWl0ZWxlbSA9IGVsZW1zZXRbMF07IC8vIGxpbWl0IHRpZXMgaGVyZVxuXHQgIH1cbiAgICBpZiAodm9pY2UuZHVwbGljYXRlICYmIGVsZW1zZXQubGVuZ3RoID4gMCkgZWxlbXNldFswXS5pbnZpc2libGUgPSB0cnVlO1xuICAgIGJyZWFrO1xuICBjYXNlIFwic3RlbVwiOlxuICAgIHRoaXMuc3RlbWRpcj1lbGVtLmRpcmVjdGlvbjtcbiAgICBicmVhaztcbiAgY2FzZSBcInBhcnRcIjpcbiAgICB2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwwLDAsICdwYXJ0JywgdGhpcy50dW5lTnVtYmVyKTtcblx0ICB2YXIgZGltID0gdGhpcy5yZW5kZXJlci5nZXRUZXh0U2l6ZShlbGVtLnRpdGxlLCAncGFydHNmb250JywgXCJwYXJ0XCIpO1xuICAgIGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLnRpdGxlLCAwLCAwLCB1bmRlZmluZWQsIHt0eXBlOlwicGFydFwiLCBoZWlnaHQ6IGRpbS5oZWlnaHQvc3BhY2luZy5TVEVQfSkpO1xuICAgIGVsZW1zZXRbMF0gPSBhYnNlbGVtO1xuICAgIGJyZWFrO1xuICBjYXNlIFwidGVtcG9cIjpcbiAgICB2YXIgYWJzZWxlbTMgPSBuZXcgQWJzb2x1dGVFbGVtZW50KGVsZW0sMCwwLCAndGVtcG8nLCB0aGlzLnR1bmVOdW1iZXIpO1xuICAgIGFic2VsZW0zLmFkZENoaWxkKG5ldyBUZW1wb0VsZW1lbnQoZWxlbSwgdGhpcy50dW5lTnVtYmVyLCBjcmVhdGVOb3RlSGVhZCkpO1xuICAgIGVsZW1zZXRbMF0gPSBhYnNlbGVtMztcbiAgICBicmVhaztcblx0ICBjYXNlIFwic3R5bGVcIjpcblx0XHQgIGlmIChlbGVtLmhlYWQgPT09IFwibm9ybWFsXCIpXG5cdFx0XHQgIGRlbGV0ZSB0aGlzLnN0eWxlO1xuXHRcdCAgZWxzZVxuXHRcdFx0ICB0aGlzLnN0eWxlID0gZWxlbS5oZWFkO1xuXHRcdCAgYnJlYWs7XG5cdCAgY2FzZSBcImhpbnRcIjpcblx0XHQgIGhpbnQgPSB0cnVlO1xuXHRcdCAgdGhpcy5zYXZlU3RhdGUoKTtcblx0XHQgIGJyZWFrO1xuXHQgIGNhc2UgXCJtaWRpXCI6XG5cdFx0Ly8gVGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSB2aXNpYmxlIG11c2ljLCBzbyBqdXN0IHNraXAgaXQuXG5cdFx0YnJlYWs7XG5cdCAgY2FzZSBcInNjYWxlXCI6XG5cdCAgXHR0aGlzLnZvaWNlU2NhbGUgPSBlbGVtLnNpemU7XG5cdCAgXHRicmVhaztcblxuICBkZWZhdWx0OlxuICAgIHZhciBhYnNlbGVtMiA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwwLDAsICd1bnN1cHBvcnRlZCcsIHRoaXMudHVuZU51bWJlcik7XG4gICAgYWJzZWxlbTIuYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChcImVsZW1lbnQgdHlwZSBcIitlbGVtLmVsX3R5cGUsIDAsIDAsIHVuZGVmaW5lZCwge3R5cGU6XCJkZWJ1Z1wifSkpO1xuICAgIGVsZW1zZXRbMF0gPSBhYnNlbGVtMjtcbiAgfVxuXG4gIHJldHVybiBlbGVtc2V0O1xufTtcblxuXHRmdW5jdGlvbiBzZXRBdmVyYWdlUGl0Y2goZWxlbSkge1xuXHRcdGlmIChlbGVtLnBpdGNoZXMpIHtcblx0XHRcdHNvcnRQaXRjaChlbGVtKTtcblx0XHRcdHZhciBzdW0gPSAwO1xuXHRcdFx0Zm9yICh2YXIgcCA9IDA7IHAgPCBlbGVtLnBpdGNoZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0c3VtICs9IGVsZW0ucGl0Y2hlc1twXS52ZXJ0aWNhbFBvcztcblx0XHRcdH1cblx0XHRcdGVsZW0uYXZlcmFnZXBpdGNoID0gc3VtIC8gZWxlbS5waXRjaGVzLmxlbmd0aDtcblx0XHRcdGVsZW0ubWlucGl0Y2ggPSBlbGVtLnBpdGNoZXNbMF0udmVydGljYWxQb3M7XG5cdFx0XHRlbGVtLm1heHBpdGNoID0gZWxlbS5waXRjaGVzW2VsZW0ucGl0Y2hlcy5sZW5ndGggLSAxXS52ZXJ0aWNhbFBvcztcblx0XHR9XG5cdH1cblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jYWxjQmVhbURpciA9IGZ1bmN0aW9uIChpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIGVsZW1zKSB7XG5cdFx0aWYgKHRoaXMuc3RlbWRpcikgLy8gSWYgdGhlIHVzZXIgb3Igdm9pY2UgaXMgZm9yY2luZyB0aGUgc3RlbSBkaXJlY3Rpb24sIHdlIGFscmVhZHkga25vdyB0aGUgYW5zd2VyLlxuXHRcdFx0cmV0dXJuIHRoaXMuc3RlbWRpcjtcblx0XHR2YXIgYmVhbWVsZW0gPSBuZXcgQmVhbUVsZW0odGhpcy5zdGVtSGVpZ2h0ICogdGhpcy52b2ljZVNjYWxlLCB0aGlzLnN0ZW1kaXIsIHRoaXMuZmxhdEJlYW1zKTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRiZWFtZWxlbS5hZGQoe2FiY2VsZW06IGVsZW1zW2ldfSk7IC8vIFRoaXMgaXMgYSBoYWNrIHRvIGNhbGwgYmVhbSBlbGVtIHdpdGgganVzdCBhIG1pbmltdW0gb2YgcHJvY2Vzc2luZzogZm9yIG91ciBwdXJwb3Nlcywgd2UgZG9uJ3QgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIHdob2xlIG5vdGUuXG5cdFx0fVxuXG5cdFx0dmFyIGRpciA9IGJlYW1lbGVtLmNhbGNEaXIoKTtcblx0XHRyZXR1cm4gZGlyID8gXCJ1cFwiIDogXCJkb3duXCI7XG5cdH07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuY3JlYXRlQmVhbSA9IGZ1bmN0aW9uIChpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UsIGVsZW1zKSB7XG5cdFx0dmFyIGFic2VsZW1zZXQgPSBbXTtcblxuXHRcdHZhciBkaXIgPSB0aGlzLmNhbGNCZWFtRGlyKGlzU2luZ2xlTGluZVN0YWZmLCB2b2ljZSwgZWxlbXMpO1xuXHRcdHZhciBiZWFtZWxlbSA9IG5ldyBCZWFtRWxlbSh0aGlzLnN0ZW1IZWlnaHQgKiB0aGlzLnZvaWNlU2NhbGUsIGRpciwgdGhpcy5mbGF0QmVhbXMpO1xuXHRcdGlmIChoaW50KSBiZWFtZWxlbS5zZXRIaW50KCk7XG5cdFx0dmFyIG9sZERpciA9IHRoaXMuc3RlbWRpcjtcblx0XHR0aGlzLnN0ZW1kaXIgPSBkaXI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGVsZW0gPSBlbGVtc1tpXTtcblx0XHRcdHZhciBhYnNlbGVtID0gdGhpcy5jcmVhdGVOb3RlKGVsZW0sIHRydWUsIGlzU2luZ2xlTGluZVN0YWZmLCB2b2ljZSk7XG5cdFx0XHRhYnNlbGVtc2V0LnB1c2goYWJzZWxlbSk7XG5cdFx0XHRiZWFtZWxlbS5hZGQoYWJzZWxlbSk7XG5cdFx0XHRpZiAodGhpcy50cmlwbGV0ICYmIHRoaXMudHJpcGxldC5pc0Nsb3NlZCgpKSB7XG5cdFx0XHRcdHZvaWNlLmFkZE90aGVyKHRoaXMudHJpcGxldCk7XG5cdFx0XHRcdHRoaXMudHJpcGxldCA9IG51bGw7XG5cdFx0XHRcdHRoaXMudHJpcGxldG11bHRpcGxpZXIgPSAxO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnN0ZW1kaXIgPSBvbGREaXI7XG5cdFx0dm9pY2UuYWRkQmVhbShiZWFtZWxlbSk7XG5cdFx0cmV0dXJuIGFic2VsZW1zZXQ7XG5cdH07XG5cbnZhciBzb3J0UGl0Y2ggPSBmdW5jdGlvbihlbGVtKSB7XG4gIHZhciBzb3J0ZWQ7XG4gIGRvIHtcbiAgICBzb3J0ZWQgPSB0cnVlO1xuICAgIGZvciAodmFyIHAgPSAwOyBwPGVsZW0ucGl0Y2hlcy5sZW5ndGgtMTsgcCsrKSB7XG4gICAgICBpZiAoZWxlbS5waXRjaGVzW3BdLnBpdGNoPmVsZW0ucGl0Y2hlc1twKzFdLnBpdGNoKSB7XG4gICAgICAgIHNvcnRlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgdG1wID0gZWxlbS5waXRjaGVzW3BdO1xuICAgICAgICBlbGVtLnBpdGNoZXNbcF0gPSBlbGVtLnBpdGNoZXNbcCsxXTtcbiAgICAgICAgZWxlbS5waXRjaGVzW3ArMV0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlICghc29ydGVkKTtcbn07XG5cbnZhciBsZWRnZXJMaW5lcyA9IGZ1bmN0aW9uKGFic2VsZW0sIG1pblBpdGNoLCBtYXhQaXRjaCwgaXNSZXN0LCBzeW1ib2xXaWR0aCwgYWRkaXRpb25hbExlZGdlcnMsIGRpciwgZHgsIHNjYWxlKSB7XG5cdGZvciAodmFyIGk9bWF4UGl0Y2g7IGk+MTE7IGktLSkge1xuXHRcdGlmIChpJTI9PT0wICYmICFpc1Jlc3QpIHtcblx0XHRcdGFic2VsZW0uYWRkQ2hpbGQobmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgKHN5bWJvbFdpZHRoKzQpKnNjYWxlLCBpLCB7dHlwZTpcImxlZGdlclwifSkpO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaT1taW5QaXRjaDsgaTwxOyBpKyspIHtcblx0XHRpZiAoaSUyPT09MCAmJiAhaXNSZXN0KSB7XG5cdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIChzeW1ib2xXaWR0aCs0KSpzY2FsZSwgaSwge3R5cGU6XCJsZWRnZXJcIn0pKTtcblx0XHR9XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYWRkaXRpb25hbExlZGdlcnMubGVuZ3RoOyBpKyspIHsgLy8gUEVSOiBkcmF3IGFkZGl0aW9uYWwgbGVkZ2Vyc1xuXHRcdHZhciBvZnMgPSBzeW1ib2xXaWR0aDtcblx0XHRpZiAoZGlyID09PSAnZG93bicpIG9mcyA9IC1vZnM7XG5cdFx0YWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KG51bGwsIG9mcytkeCwgKHN5bWJvbFdpZHRoKzQpKnNjYWxlLCBhZGRpdGlvbmFsTGVkZ2Vyc1tpXSwge3R5cGU6XCJsZWRnZXJcIn0pKTtcblx0fVxufTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5hZGRHcmFjZU5vdGVzID0gZnVuY3Rpb24gKGVsZW0sIHZvaWNlLCBhYnNlbGVtLCBub3RlaGVhZCwgc3RlbUhlaWdodCwgaXNCYWdwaXBlcywgcm9vbXRha2VuKSB7XG5cdFx0dmFyIGdyYWNlc2NhbGUgPSAzIC8gNTtcblx0XHR2YXIgZ3JhY2VTY2FsZVN0ZW0gPSAzLjUgLyA1OyAvLyBUT0RPLVBFUjogZW1waXJpY2FsbHkgZm91bmQgY29uc3RhbnQuXG5cdFx0dmFyIGdyYWNlYmVhbSA9IG51bGw7XG5cdFx0dmFyIGZsYWc7XG5cblx0XHRpZiAoZWxlbS5ncmFjZW5vdGVzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGdyYWNlYmVhbSA9IG5ldyBCZWFtRWxlbShzdGVtSGVpZ2h0ICogZ3JhY2VTY2FsZVN0ZW0sIFwiZ3JhY2VcIiwgaXNCYWdwaXBlcyk7XG5cdFx0XHRpZiAoaGludCkgZ3JhY2ViZWFtLnNldEhpbnQoKTtcblx0XHRcdGdyYWNlYmVhbS5tYWluTm90ZSA9IGFic2VsZW07XHQvLyB0aGlzIGdpdmVzIHVzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIG5vdGUgdGhpcyBpcyBhdHRhY2hlZCB0byBzbyB0aGF0IHRoZSBzdGVtcyBjYW4gYmUgYXR0YWNoZWQgc29tZXdoZXJlLlxuXHRcdH1cblxuXHRcdHZhciBncmFjZW9mZnNldHMgPSBbXTtcblx0XHRmb3IgKGkgPSBlbGVtLmdyYWNlbm90ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsgLy8gZmlndXJlIG91dCB3aGVyZSB0byBwbGFjZSBlYWNoIGdyYWNlbm90ZVxuXHRcdFx0cm9vbXRha2VuICs9IDEwO1xuXHRcdFx0Z3JhY2VvZmZzZXRzW2ldID0gcm9vbXRha2VuO1xuXHRcdFx0aWYgKGVsZW0uZ3JhY2Vub3Rlc1tpXS5hY2NpZGVudGFsKSB7XG5cdFx0XHRcdHJvb210YWtlbiArPSA3O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBlbGVtLmdyYWNlbm90ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBncmFjZXBpdGNoID0gZWxlbS5ncmFjZW5vdGVzW2ldLnZlcnRpY2FsUG9zO1xuXG5cdFx0XHRmbGFnID0gKGdyYWNlYmVhbSkgPyBudWxsIDogY2hhcnRhYmxlLnVmbGFnc1soaXNCYWdwaXBlcykgPyA1IDogM107XG5cdFx0XHR2YXIgYWNjaWRlbnRhbFNsb3QgPSBbXTtcblx0XHRcdHZhciByZXQgPSBjcmVhdGVOb3RlSGVhZChhYnNlbGVtLCBcIm5vdGVoZWFkcy5xdWFydGVyXCIsIGVsZW0uZ3JhY2Vub3Rlc1tpXSwgXCJ1cFwiLCAtZ3JhY2VvZmZzZXRzW2ldLCAtZ3JhY2VvZmZzZXRzW2ldLCBmbGFnLCAwLCAwLCBncmFjZXNjYWxlKnRoaXMudm9pY2VTY2FsZSwgYWNjaWRlbnRhbFNsb3QsIGZhbHNlKTtcblx0XHRcdHJldC5ub3RlaGVhZC5oaWdoZXN0VmVydCA9IHJldC5ub3RlaGVhZC5waXRjaCArIHN0ZW1IZWlnaHQgKiBncmFjZVNjYWxlU3RlbTtcblx0XHRcdHZhciBncmFjZSA9IHJldC5ub3RlaGVhZDtcblx0XHRcdHRoaXMuYWRkU2x1cnNBbmRUaWVzKGFic2VsZW0sIGVsZW0uZ3JhY2Vub3Rlc1tpXSwgZ3JhY2UsIHZvaWNlLCBcInVwXCIsIHRydWUpO1xuXG5cdFx0XHRhYnNlbGVtLmFkZEV4dHJhKGdyYWNlKTtcblx0XHRcdC8vIFBFUjogYWRkZWQgYWNjaWFjY2F0dXJhIHNsYXNoXG5cdFx0XHRpZiAoZWxlbS5ncmFjZW5vdGVzW2ldLmFjY2lhY2NhdHVyYSkge1xuXHRcdFx0XHR2YXIgcG9zID0gZWxlbS5ncmFjZW5vdGVzW2ldLnZlcnRpY2FsUG9zICsgNyAqIGdyYWNlc2NhbGU7ICAgICAgICAvLyB0aGUgc2FtZSBmb3JtdWxhIHRoYXQgZGV0ZXJtaW5lcyB0aGUgZmxhZyBwb3NpdGlvbi5cblx0XHRcdFx0dmFyIGRBY2NpYWNjYXR1cmEgPSBncmFjZWJlYW0gPyA1IDogNjsgICAgICAgIC8vIGp1c3QgYW4gb2Zmc2V0IHRvIG1ha2UgaXQgbGluZSB1cCBjb3JyZWN0bHkuXG5cdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcImZsYWdzLnVncmFjZVwiLCAtZ3JhY2VvZmZzZXRzW2ldICsgZEFjY2lhY2NhdHVyYSwgMCwgcG9zLCB7c2NhbGV4OiBncmFjZXNjYWxlLCBzY2FsZXk6IGdyYWNlc2NhbGV9KSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZ3JhY2ViZWFtKSB7IC8vIGdpdmUgdGhlIGJlYW0gdGhlIG5lY2Vzc2FyeSBpbmZvXG5cdFx0XHRcdHZhciBncmFjZUR1cmF0aW9uID0gZWxlbS5ncmFjZW5vdGVzW2ldLmR1cmF0aW9uIC8gMjtcblx0XHRcdFx0aWYgKGlzQmFncGlwZXMpIGdyYWNlRHVyYXRpb24gLz0gMjtcblx0XHRcdFx0dmFyIHBzZXVkb2Fic2VsZW0gPSB7XG5cdFx0XHRcdFx0aGVhZHM6IFtncmFjZV0sXG5cdFx0XHRcdFx0YWJjZWxlbToge2F2ZXJhZ2VwaXRjaDogZ3JhY2VwaXRjaCwgbWlucGl0Y2g6IGdyYWNlcGl0Y2gsIG1heHBpdGNoOiBncmFjZXBpdGNoLCBkdXJhdGlvbjogZ3JhY2VEdXJhdGlvbn1cblx0XHRcdFx0fTtcblx0XHRcdFx0Z3JhY2ViZWFtLmFkZChwc2V1ZG9hYnNlbGVtKTtcblx0XHRcdH0gZWxzZSB7IC8vIGRyYXcgdGhlIHN0ZW1cblx0XHRcdFx0dmFyIHAxID0gZ3JhY2VwaXRjaCArIDEgLyAzICogZ3JhY2VzY2FsZTtcblx0XHRcdFx0dmFyIHAyID0gZ3JhY2VwaXRjaCArIDcgKiBncmFjZXNjYWxlO1xuXHRcdFx0XHR2YXIgZHggPSBncmFjZS5keCArIGdyYWNlLnc7XG5cdFx0XHRcdHZhciB3aWR0aCA9IC0wLjY7XG5cdFx0XHRcdGFic2VsZW0uYWRkRXh0cmEobmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgMCwgcDEsIHtcInR5cGVcIjogXCJzdGVtXCIsIFwicGl0Y2gyXCI6IHAyLCBsaW5ld2lkdGg6IHdpZHRofSkpO1xuXHRcdFx0fVxuXHRcdFx0bGVkZ2VyTGluZXMoYWJzZWxlbSwgZ3JhY2VwaXRjaCwgZ3JhY2VwaXRjaCwgZmFsc2UsIGdseXBocy5nZXRTeW1ib2xXaWR0aChcIm5vdGVoZWFkcy5xdWFydGVyXCIpLCBbXSwgdHJ1ZSwgZ3JhY2UuZHggLSAxLCAwLjYpO1xuXG5cdFx0XHRpZiAoaSA9PT0gMCAmJiAhaXNCYWdwaXBlcyAmJiAhKGVsZW0ucmVzdCAmJiAoZWxlbS5yZXN0LnR5cGUgPT09IFwic3BhY2VyXCIgfHwgZWxlbS5yZXN0LnR5cGUgPT09IFwiaW52aXNpYmxlXCIpKSkge1xuXHRcdFx0XHQvLyBUaGlzIGlzIHRoZSBvdmVyYWxsIHNsdXIgdGhhdCBpcyB1bmRlciB0aGUgZ3JhY2Ugbm90ZXMuXG5cdFx0XHRcdHZhciBpc1RpZSA9IChlbGVtLmdyYWNlbm90ZXMubGVuZ3RoID09PSAxICYmIGdyYWNlLnBpdGNoID09PSBub3RlaGVhZC5waXRjaCk7XG5cdFx0XHRcdHZvaWNlLmFkZE90aGVyKG5ldyBUaWVFbGVtKHsgYW5jaG9yMTogZ3JhY2UsIGFuY2hvcjI6IG5vdGVoZWFkLCBpc0dyYWNlOiB0cnVlfSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChncmFjZWJlYW0pIHtcblx0XHRcdHZvaWNlLmFkZEJlYW0oZ3JhY2ViZWFtKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJvb210YWtlbjtcblx0fTtcblxuXHRmdW5jdGlvbiBhZGRSZXN0VG9BYnNFbGVtZW50KGFic2VsZW0sIGVsZW0sIGR1cmF0aW9uLCBkb3QsIGlzTXVsdGlWb2ljZSwgc3RlbWRpciwgaXNTaW5nbGVMaW5lU3RhZmYsIGR1cmxvZywgdm9pY2VTY2FsZSkge1xuXHRcdHZhciBjO1xuXHRcdHZhciByZXN0cGl0Y2ggPSA3O1xuXHRcdHZhciBub3RlSGVhZDtcblx0XHR2YXIgcm9vbVRha2VuO1xuXHRcdHZhciByb29tVGFrZW5SaWdodDtcblxuXHRcdGlmIChpc011bHRpVm9pY2UpIHtcblx0XHRcdGlmIChzdGVtZGlyID09PSBcImRvd25cIikgcmVzdHBpdGNoID0gMztcblx0XHRcdGlmIChzdGVtZGlyID09PSBcInVwXCIpIHJlc3RwaXRjaCA9IDExO1xuXHRcdH1cblx0XHQvLyBUaGVyZSBpcyBzcGVjaWFsIHBsYWNlbWVudCBmb3IgdGhlIHBlcmN1c3Npb24gc3RhZmYuIElmIHRoZXJlIGlzIG9uZSBzdGFmZiBsaW5lLCB0aGVuIG1vdmUgdGhlIHJlc3QgcG9zaXRpb24uXG5cdFx0aWYgKGlzU2luZ2xlTGluZVN0YWZmKSB7XG5cdFx0XHQvLyBUaGUgaGFsZiBhbmQgd2hvbGUgcmVzdHMgYXJlIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBsaW5lcyBub3JtYWxseSwgc28gd2UgbmVlZCB0byB0d2VhayB0aGVpciBwb3NpdGlvbiB0byBnZXQgdGhlbSB0byBib3RoIGJlIGF0dGFjaGVkIHRvIHRoZSBzYW1lIG9uZS5cblx0XHRcdGlmIChkdXJhdGlvbiA8IDAuNSlcblx0XHRcdFx0cmVzdHBpdGNoID0gNztcblx0XHRcdGVsc2UgaWYgKGR1cmF0aW9uIDwgMSlcblx0XHRcdFx0cmVzdHBpdGNoID0gNztcdC8vIGhhbGYgcmVzdFxuXHRcdFx0ZWxzZVxuXHRcdFx0XHRyZXN0cGl0Y2ggPSA1OyAvLyB3aG9sZSByZXN0XG5cdFx0fVxuXHRcdHN3aXRjaCAoZWxlbS5yZXN0LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJ3aG9sZVwiOlxuXHRcdFx0XHRjID0gY2hhcnRhYmxlLnJlc3RbMF07XG5cdFx0XHRcdGVsZW0uYXZlcmFnZXBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1pbnBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1heHBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRkb3QgPSAwO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJyZXN0XCI6XG5cdFx0XHRcdGlmIChlbGVtLnN0eWxlID09PSBcInJoeXRobVwiKSAvLyBzcGVjaWFsIGNhc2UgZm9yIHJoeXRobTogcmVzdHMgYXJlIGEgaGFuZHkgd2F5IHRvIGV4cHJlc3MgdGhlIHJoeXRobS5cblx0XHRcdFx0XHRjID0gY2hhcnRhYmxlLnJoeXRobVstZHVybG9nXTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdGMgPSBjaGFydGFibGUucmVzdFstZHVybG9nXTtcblx0XHRcdFx0ZWxlbS5hdmVyYWdlcGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWlucGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWF4cGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImludmlzaWJsZVwiOlxuXHRcdFx0Y2FzZSBcInNwYWNlclwiOlxuXHRcdFx0XHRjID0gXCJcIjtcblx0XHRcdFx0ZWxlbS5hdmVyYWdlcGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWlucGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGVsZW0ubWF4cGl0Y2ggPSByZXN0cGl0Y2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm11bHRpbWVhc3VyZVwiOlxuXHRcdFx0XHRjID0gY2hhcnRhYmxlLnJlc3RbJ211bHRpJ107XG5cdFx0XHRcdGVsZW0uYXZlcmFnZXBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1pbnBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRlbGVtLm1heHBpdGNoID0gcmVzdHBpdGNoO1xuXHRcdFx0XHRkb3QgPSAwO1xuXHRcdFx0XHR2YXIgbW1XaWR0aCA9IGdseXBocy5nZXRTeW1ib2xXaWR0aChjKTtcblx0XHRcdFx0YWJzZWxlbS5hZGRIZWFkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoYywgLW1tV2lkdGgsIG1tV2lkdGggKiAyLCA3KSk7XG5cdFx0XHRcdHZhciBudW1NZWFzdXJlcyA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCJcIiArIGVsZW0uZHVyYXRpb24sIDAsIG1tV2lkdGgsIDE2LCB7dHlwZTogXCJtdWx0aW1lYXN1cmUtdGV4dFwifSk7XG5cdFx0XHRcdGFic2VsZW0uYWRkRXh0cmEobnVtTWVhc3VyZXMpO1xuXHRcdH1cblx0XHRpZiAoZWxlbS5yZXN0LnR5cGUgIT09IFwibXVsdGltZWFzdXJlXCIpIHtcblx0XHRcdHZhciByZXQgPSBjcmVhdGVOb3RlSGVhZChhYnNlbGVtLCBjLCB7dmVydGljYWxQb3M6IHJlc3RwaXRjaH0sIG51bGwsIDAsIDAsIG51bGwsIGRvdCwgMCwgdm9pY2VTY2FsZSwgW10sIGZhbHNlKTtcblx0XHRcdG5vdGVIZWFkID0gcmV0Lm5vdGVoZWFkO1xuXHRcdFx0aWYgKG5vdGVIZWFkKSB7XG5cdFx0XHRcdGFic2VsZW0uYWRkSGVhZChub3RlSGVhZCk7XG5cdFx0XHRcdHJvb21UYWtlbiA9IHJldC5hY2NpZGVudGFsc2hpZnR4O1xuXHRcdFx0XHRyb29tVGFrZW5SaWdodCA9IHJldC5kb3RzaGlmdHg7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IG5vdGVIZWFkOiBub3RlSGVhZCwgcm9vbVRha2VuOiByb29tVGFrZW4sIHJvb21UYWtlblJpZ2h0OiByb29tVGFrZW5SaWdodCB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkSWZOb3RFeGlzdChhcnIsIGl0ZW0pIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKEpTT04uc3RyaW5naWZ5KGFycltpXSkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pKVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGFyci5wdXNoKGl0ZW0pO1xuXHR9XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuYWRkTm90ZVRvQWJjRWxlbWVudCA9IGZ1bmN0aW9uKGFic2VsZW0sIGVsZW0sIGRvdCwgc3RlbWRpciwgc3R5bGUsIHplcm9EdXJhdGlvbiwgZHVybG9nLCBub3N0ZW0sIHZvaWNlKSB7XG5cdFx0dmFyIGRvdHNoaWZ0eCA9IDA7IC8vIHJvb20gdGFrZW4gYnkgY2hvcmRzIHdpdGggZGlzcGxhY2VkIG5vdGVoZWFkcyB3aGljaCBjYXVzZSBkb3RzIHRvIHNoaWZ0XG5cdFx0dmFyIG5vdGVIZWFkO1xuXHRcdHZhciByb29tVGFrZW4gPSAwO1xuXHRcdHZhciByb29tVGFrZW5SaWdodCA9IDA7XG5cdFx0dmFyIG1pbjtcblx0XHR2YXIgaTtcblx0XHR2YXIgYWRkaXRpb25hbExlZGdlcnMgPSBbXTtcblx0XHQvLyBUaGUgYWNjaWRlbnRhbFNsb3Qgd2lsbCBob2xkIGEgbGlzdCBvZiBhbGwgdGhlIGFjY2lkZW50YWxzIG9uIHRoaXMgY2hvcmQuIEVhY2ggZWxlbWVudCBpcyBhIHZlcnRpY2FsIHBsYWNlLFxuXHRcdC8vIGFuZCBjb250YWlucyBhIHBpdGNoLCB3aGljaCBpcyB0aGUgbGFzdCBwaXRjaCB0aGF0IGNvbnRhaW5zIGFuIGFjY2lkZW50YWwgaW4gdGhhdCBzbG90LiBUaGUgc2xvdHMgYXJlIG51bWJlcmVkXG5cdFx0Ly8gZnJvbSBjbG9zZXN0IHRvIHRoZSBub3RlIHRvIGZhcnRoZXIgbGVmdC4gV2Ugb25seSBuZWVkIHRvIGtub3cgdGhlIGxhc3QgYWNjaWRlbnRhbCB3ZSBwbGFjZWQgYmVjYXVzZVxuXHRcdC8vIHdlIGtub3cgdGhhdCB0aGUgcGl0Y2hlcyBhcmUgc29ydGVkIGJ5IG5vdy5cblx0XHR2YXIgYWNjaWRlbnRhbFNsb3QgPSBbXTtcblx0XHR2YXIgc3ltYm9sV2lkdGggPSAwO1xuXG5cdFx0dmFyIGRpciA9IChlbGVtLmF2ZXJhZ2VwaXRjaD49NikgPyBcImRvd25cIjogXCJ1cFwiO1xuXHRcdGlmIChzdGVtZGlyKSBkaXI9c3RlbWRpcjtcblxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSA/IGVsZW0uc3R5bGUgOiBzdHlsZTsgLy8gZ2V0IHRoZSBzdHlsZSBvZiBub3RlIGhlYWQuXG5cdFx0aWYgKCFzdHlsZSB8fCBzdHlsZSA9PT0gXCJub3JtYWxcIikgc3R5bGUgPSBcIm5vdGVcIjtcblx0XHR2YXIgbm90ZVN5bWJvbDtcblx0XHRpZiAoemVyb0R1cmF0aW9uKVxuXHRcdFx0bm90ZVN5bWJvbCA9IGNoYXJ0YWJsZVtzdHlsZV0ubm9zdGVtO1xuXHRcdGVsc2Vcblx0XHRcdG5vdGVTeW1ib2wgPSBjaGFydGFibGVbc3R5bGVdWy1kdXJsb2ddO1xuXHRcdGlmICghbm90ZVN5bWJvbClcblx0XHRcdGNvbnNvbGUubG9nKFwibm90ZVN5bWJvbDpcIiwgc3R5bGUsIGR1cmxvZywgemVyb0R1cmF0aW9uKTtcblxuXHRcdC8vIGRldGVybWluZSBlbGVtZW50cyBvZiBjaG9yZHMgd2hpY2ggc2hvdWxkIGJlIHNoaWZ0ZWRcblx0XHR2YXIgcDtcblx0XHRmb3IgKHA9KGRpcj09PVwiZG93blwiKT9lbGVtLnBpdGNoZXMubGVuZ3RoLTI6MTsgKGRpcj09PVwiZG93blwiKT9wPj0wOnA8ZWxlbS5waXRjaGVzLmxlbmd0aDsgcD0oZGlyPT09XCJkb3duXCIpP3AtMTpwKzEpIHtcblx0XHRcdHZhciBwcmV2ID0gZWxlbS5waXRjaGVzWyhkaXI9PT1cImRvd25cIik/cCsxOnAtMV07XG5cdFx0XHR2YXIgY3VyciA9IGVsZW0ucGl0Y2hlc1twXTtcblx0XHRcdHZhciBkZWx0YSA9IChkaXI9PT1cImRvd25cIik/cHJldi5waXRjaC1jdXJyLnBpdGNoOmN1cnIucGl0Y2gtcHJldi5waXRjaDtcblx0XHRcdGlmIChkZWx0YTw9MSAmJiAhcHJldi5wcmludGVyX3NoaWZ0KSB7XG5cdFx0XHRcdGN1cnIucHJpbnRlcl9zaGlmdD0oZGVsdGEpP1wiZGlmZmVyZW50XCI6XCJzYW1lXCI7XG5cdFx0XHRcdGlmIChjdXJyLnZlcnRpY2FsUG9zID4gMTEgfHwgY3Vyci52ZXJ0aWNhbFBvcyA8IDEpIHsgICAgICAgIC8vIFBFUjogYWRkIGV4dHJhIGxlZGdlciBsaW5lXG5cdFx0XHRcdFx0YWRkaXRpb25hbExlZGdlcnMucHVzaChjdXJyLnZlcnRpY2FsUG9zIC0gKGN1cnIudmVydGljYWxQb3MlMikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChkaXI9PT1cImRvd25cIikge1xuXHRcdFx0XHRcdHJvb21UYWtlbiA9IGdseXBocy5nZXRTeW1ib2xXaWR0aChub3RlU3ltYm9sKSsyO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRvdHNoaWZ0eCA9IGdseXBocy5nZXRTeW1ib2xXaWR0aChub3RlU3ltYm9sKSsyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBwID0gZWxlbS5waXRjaGVzLmxlbmd0aDtcblx0XHRmb3IgKHA9MDsgcDxlbGVtLnBpdGNoZXMubGVuZ3RoOyBwKyspIHtcblxuXHRcdFx0aWYgKCFub3N0ZW0pIHtcblx0XHRcdFx0dmFyIGZsYWc7XG5cdFx0XHRcdGlmICgoZGlyPT09XCJkb3duXCIgJiYgcCE9PTApIHx8IChkaXI9PT1cInVwXCIgJiYgcCE9PXBwLTEpKSB7IC8vIG5vdCB0aGUgc3RlbW1lZCBlbGVtIG9mIHRoZSBjaG9yZFxuXHRcdFx0XHRcdGZsYWcgPSBudWxsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZsYWcgPSBjaGFydGFibGVbKGRpcj09PVwiZG93blwiKT9cImRmbGFnc1wiOlwidWZsYWdzXCJdWy1kdXJsb2ddO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgYztcblx0XHRcdGlmIChlbGVtLnBpdGNoZXNbcF0uc3R5bGUpIHsgLy8gVGhlcmUgaXMgYSBzdHlsZSBmb3IgdGhlIHdob2xlIGdyb3VwIG9mIHBpdGNoZXMsIGJ1dCB0aGVyZSBjb3VsZCBhbHNvIGJlIGFuIG92ZXJyaWRlIGZvciBhIHBhcnRpY3VsYXIgcGl0Y2guXG5cdFx0XHRcdGMgPSBjaGFydGFibGVbZWxlbS5waXRjaGVzW3BdLnN0eWxlXVstZHVybG9nXTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0XHRjID0gbm90ZVN5bWJvbDtcblx0XHRcdC8vIFRoZSBoaWdoZXN0IHBvc2l0aW9uIGZvciB0aGUgc2FrZSBvZiBwbGFjaW5nIHNsdXJzIGlzIGl0c2VsZiBpZiB0aGUgc2x1ciBpcyBpbnRlcm5hbC4gSXQgaXMgdGhlIGhpZ2hlc3QgcG9zaXRpb24gcG9zc2libGUgaWYgdGhlIHNsdXIgaXMgZm9yIHRoZSB3aG9sZSBjaG9yZC5cblx0XHRcdC8vIElmIHRoZSBub3RlIGlzIHRoZSBvbmx5IG9uZSBpbiB0aGUgY2hvcmQsIHRoZW4gYW55IHNsdXIgaXQgaGFzIGNvdW50cyBhcyBpZiBpdCB3ZXJlIG9uIHRoZSB3aG9sZSBjaG9yZC5cblx0XHRcdGVsZW0ucGl0Y2hlc1twXS5oaWdoZXN0VmVydCA9IGVsZW0ucGl0Y2hlc1twXS52ZXJ0aWNhbFBvcztcblx0XHRcdHZhciBpc1RvcFdoZW5TdGVtSXNEb3duID0gKHN0ZW1kaXI9PT1cInVwXCIgfHwgZGlyPT09XCJ1cFwiKSAmJiBwPT09MDtcblx0XHRcdHZhciBpc0JvdHRvbVdoZW5TdGVtSXNVcCA9IChzdGVtZGlyPT09XCJkb3duXCIgfHwgZGlyPT09XCJkb3duXCIpICYmIHA9PT1wcC0xO1xuXHRcdFx0aWYgKGlzVG9wV2hlblN0ZW1Jc0Rvd24gfHwgaXNCb3R0b21XaGVuU3RlbUlzVXApIHsgLy8gcGxhY2UgdG8gcHV0IHNsdXJzIGlmIG5vdCBhbHJlYWR5IG9uIHBpdGNoZXNcblxuXHRcdFx0XHRpZiAoZWxlbS5zdGFydFNsdXIgfHwgcHAgPT09IDEpIHtcblx0XHRcdFx0XHRlbGVtLnBpdGNoZXNbcF0uaGlnaGVzdFZlcnQgPSBlbGVtLnBpdGNoZXNbcHAtMV0udmVydGljYWxQb3M7XG5cdFx0XHRcdFx0aWYgKGdldER1cmF0aW9uKGVsZW0pIDwgMSAmJiAoc3RlbWRpcj09PVwidXBcIiB8fCBkaXI9PT1cInVwXCIpKVxuXHRcdFx0XHRcdFx0ZWxlbS5waXRjaGVzW3BdLmhpZ2hlc3RWZXJ0ICs9IDY7ICAgICAgICAvLyBJZiB0aGUgc3RlbSBpcyB1cCwgdGhlbiBjb21wZW5zYXRlIGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBzdGVtXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGVsZW0uc3RhcnRTbHVyKSB7XG5cdFx0XHRcdFx0aWYgKCFlbGVtLnBpdGNoZXNbcF0uc3RhcnRTbHVyKSBlbGVtLnBpdGNoZXNbcF0uc3RhcnRTbHVyID0gW107IC8vVE9ETyBwb3NzaWJseSByZWR1bmRhbnQsIHByb3ZpZGVkIGFycmF5IGlzIG5vdCBvcHRpb25hbFxuXHRcdFx0XHRcdGZvciAoaT0wOyBpPGVsZW0uc3RhcnRTbHVyLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhZGRJZk5vdEV4aXN0KGVsZW0ucGl0Y2hlc1twXS5zdGFydFNsdXIsIGVsZW0uc3RhcnRTbHVyW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZWxlbS5lbmRTbHVyKSB7XG5cdFx0XHRcdFx0ZWxlbS5waXRjaGVzW3BdLmhpZ2hlc3RWZXJ0ID0gZWxlbS5waXRjaGVzW3BwLTFdLnZlcnRpY2FsUG9zO1xuXHRcdFx0XHRcdGlmIChnZXREdXJhdGlvbihlbGVtKSA8IDEgJiYgKHN0ZW1kaXI9PT1cInVwXCIgfHwgZGlyPT09XCJ1cFwiKSlcblx0XHRcdFx0XHRcdGVsZW0ucGl0Y2hlc1twXS5oaWdoZXN0VmVydCArPSA2OyAgICAgICAgLy8gSWYgdGhlIHN0ZW0gaXMgdXAsIHRoZW4gY29tcGVuc2F0ZSBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgc3RlbVxuXHRcdFx0XHRcdGlmICghZWxlbS5waXRjaGVzW3BdLmVuZFNsdXIpIGVsZW0ucGl0Y2hlc1twXS5lbmRTbHVyID0gW107IC8vVE9ETyBwb3NzaWJseSByZWR1bmRhbnQsIHByb3ZpZGVkIGFycmF5IGlzIG5vdCBvcHRpb25hbFxuXHRcdFx0XHRcdGZvciAoaT0wOyBpPGVsZW0uZW5kU2x1ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0YWRkSWZOb3RFeGlzdChlbGVtLnBpdGNoZXNbcF0uZW5kU2x1ciwgZWxlbS5lbmRTbHVyW2ldKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGhhc1N0ZW0gPSAhbm9zdGVtICYmIGR1cmxvZzw9LTE7XG5cdFx0XHR2YXIgcmV0ID0gY3JlYXRlTm90ZUhlYWQoYWJzZWxlbSwgYywgZWxlbS5waXRjaGVzW3BdLCBkaXIsIDAsIC1yb29tVGFrZW4sIGZsYWcsIGRvdCwgZG90c2hpZnR4LCB0aGlzLnZvaWNlU2NhbGUsIGFjY2lkZW50YWxTbG90LCAhc3RlbWRpcik7XG5cdFx0XHRzeW1ib2xXaWR0aCA9IE1hdGgubWF4KGdseXBocy5nZXRTeW1ib2xXaWR0aChjKSwgc3ltYm9sV2lkdGgpO1xuXHRcdFx0YWJzZWxlbS5leHRyYXcgLT0gcmV0LmV4dHJhTGVmdDtcblx0XHRcdG5vdGVIZWFkID0gcmV0Lm5vdGVoZWFkO1xuXHRcdFx0aWYgKG5vdGVIZWFkKSB7XG5cdFx0XHRcdHRoaXMuYWRkU2x1cnNBbmRUaWVzKGFic2VsZW0sIGVsZW0ucGl0Y2hlc1twXSwgbm90ZUhlYWQsIHZvaWNlLCBoYXNTdGVtID8gZGlyIDogbnVsbCwgZmFsc2UpO1xuXG5cdFx0XHRcdGlmIChlbGVtLmdyYWNlbm90ZXMgJiYgZWxlbS5ncmFjZW5vdGVzLmxlbmd0aCA+IDApXG5cdFx0XHRcdFx0bm90ZUhlYWQuYm90dG9tID0gbm90ZUhlYWQuYm90dG9tIC0gMTtcdCAvLyBJZiB0aGVyZSBpcyBhIHRpZSB0byB0aGUgZ3JhY2Ugbm90ZXMsIGxlYXZlIGEgbGl0dGxlIG1vcmUgcm9vbSBmb3IgdGhlIG5vdGUgdG8gYXZvaWQgY29sbGlzaW9ucy5cblx0XHRcdFx0YWJzZWxlbS5hZGRIZWFkKG5vdGVIZWFkKTtcblx0XHRcdH1cblx0XHRcdHJvb21UYWtlbiArPSByZXQuYWNjaWRlbnRhbHNoaWZ0eDtcblx0XHRcdHJvb21UYWtlblJpZ2h0ID0gTWF0aC5tYXgocm9vbVRha2VuUmlnaHQscmV0LmRvdHNoaWZ0eCk7XG5cdFx0fVxuXG5cdFx0Ly8gZHJhdyBzdGVtIGZyb20gdGhlIGZ1cnRoZXN0IG5vdGUgdG8gYSBwaXRjaCBhYm92ZS9iZWxvdyB0aGUgc3RlbW1lZCBub3RlXG5cdFx0aWYgKGhhc1N0ZW0pIHtcblx0XHRcdHZhciBzdGVtSGVpZ2h0ID0gNyAqIHRoaXMudm9pY2VTY2FsZTtcblx0XHRcdHZhciBwMSA9IChkaXI9PT1cImRvd25cIikgPyBlbGVtLm1pbnBpdGNoLXN0ZW1IZWlnaHQgOiBlbGVtLm1pbnBpdGNoKzEvMztcblx0XHRcdC8vIFBFUiBhZGRlZCBzdGVtZGlyIHRlc3QgdG8gbWFrZSB0aGUgbGluZSBtZWV0IHRoZSBub3RlLlxuXHRcdFx0aWYgKHAxPjYgJiYgIXN0ZW1kaXIpIHAxPTY7XG5cdFx0XHR2YXIgcDIgPSAoZGlyPT09XCJkb3duXCIpID8gZWxlbS5tYXhwaXRjaC0xLzMgOiBlbGVtLm1heHBpdGNoK3N0ZW1IZWlnaHQ7XG5cdFx0XHQvLyBQRVIgYWRkZWQgc3RlbWRpciB0ZXN0IHRvIG1ha2UgdGhlIGxpbmUgbWVldCB0aGUgbm90ZS5cblx0XHRcdGlmIChwMjw2ICYmICFzdGVtZGlyKSBwMj02O1xuXHRcdFx0dmFyIGR4ID0gKGRpcj09PVwiZG93blwiIHx8IGFic2VsZW0uaGVhZHMubGVuZ3RoID09PSAwKT8wOmFic2VsZW0uaGVhZHNbMF0udztcblx0XHRcdHZhciB3aWR0aCA9IChkaXI9PT1cImRvd25cIik/MTotMTtcblx0XHRcdC8vIFRPRE8tUEVSLUhBQ0s6IE9uZSB0eXBlIG9mIG5vdGUgaGVhZCBoYXMgYSBkaWZmZXJlbnQgcGxhY2VtZW50IG9mIHRoZSBzdGVtLiBUaGlzIHNob3VsZCBiZSBtb3JlIGdlbmVyaWNhbGx5IGNhbGN1bGF0ZWQ6XG5cdFx0XHRpZiAobm90ZUhlYWQuYyA9PT0gJ25vdGVoZWFkcy5zbGFzaC5xdWFydGVyJykge1xuXHRcdFx0XHRpZiAoZGlyID09PSAnZG93bicpXG5cdFx0XHRcdFx0cDIgLT0gMTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHAxICs9IDE7XG5cdFx0XHR9XG5cdFx0XHRhYnNlbGVtLmFkZEV4dHJhKG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDAsIHAxLCB7XCJ0eXBlXCI6IFwic3RlbVwiLCBcInBpdGNoMlwiOnAyLCBsaW5ld2lkdGg6IHdpZHRofSkpO1xuXHRcdFx0Ly92YXIgUmVsYXRpdmVFbGVtZW50ID0gZnVuY3Rpb24gUmVsYXRpdmVFbGVtZW50KGMsIGR4LCB3LCBwaXRjaCwgb3B0KSB7XG5cdFx0XHRtaW4gPSBNYXRoLm1pbihwMSwgcDIpO1xuXHRcdH1cblx0XHRyZXR1cm4geyBub3RlSGVhZDogbm90ZUhlYWQsIHJvb21UYWtlbjogcm9vbVRha2VuLCByb29tVGFrZW5SaWdodDogcm9vbVRha2VuUmlnaHQsIG1pbjogbWluLCBhZGRpdGlvbmFsTGVkZ2VyczogYWRkaXRpb25hbExlZGdlcnMsIGRpcjogZGlyLCBzeW1ib2xXaWR0aDogc3ltYm9sV2lkdGggfTtcblx0fTtcblxuXHRBYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5hZGRMeXJpYyA9IGZ1bmN0aW9uKGFic2VsZW0sIGVsZW0pIHtcblx0XHR2YXIgbHlyaWNTdHIgPSBcIlwiO1xuXHRcdHBhcnNlQ29tbW9uLmVhY2goZWxlbS5seXJpYywgZnVuY3Rpb24obHkpIHtcblx0XHRcdHZhciBkaXYgPSBseS5kaXZpZGVyID09PSAnICcgPyBcIlwiIDogbHkuZGl2aWRlcjtcblx0XHRcdGx5cmljU3RyICs9IGx5LnN5bGxhYmxlICsgZGl2ICsgXCJcXG5cIjtcblx0XHR9KTtcblx0XHR2YXIgbHlyaWNEaW0gPSB0aGlzLnJlbmRlcmVyLmdldFRleHRTaXplKGx5cmljU3RyLCAndm9jYWxmb250JywgXCJseXJpY1wiKTtcblx0XHR2YXIgcG9zaXRpb24gPSBlbGVtLnBvc2l0aW9uaW5nID8gZWxlbS5wb3NpdGlvbmluZy52b2NhbFBvc2l0aW9uIDogJ2JlbG93Jztcblx0XHRhYnNlbGVtLmFkZENlbnRlcmVkKG5ldyBSZWxhdGl2ZUVsZW1lbnQobHlyaWNTdHIsIDAsIGx5cmljRGltLndpZHRoLCB1bmRlZmluZWQsIHt0eXBlOlwibHlyaWNcIiwgcG9zaXRpb246IHBvc2l0aW9uLCBoZWlnaHQ6IGx5cmljRGltLmhlaWdodCAvIHNwYWNpbmcuU1RFUCB9KSk7XG5cdH07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuYWRkQ2hvcmQgPSBmdW5jdGlvbihhYnNlbGVtLCBlbGVtLCByb29tVGFrZW4sIHJvb21UYWtlblJpZ2h0KSB7XG5cdFx0dmFyIGNob3JkTWFyZ2luID0gODsgLy8gSWYgdGhlcmUgYXJlIGNob3JkcyBuZXh0IHRvIGVhY2ggb3RoZXIsIHRoaXMgaXMgaG93IGNsb3NlIHRoZXkgY2FuIGdldC5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hvcmQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB4ID0gMDtcblx0XHRcdHZhciB5O1xuXHRcdFx0dmFyIGRpbSA9IHRoaXMucmVuZGVyZXIuZ2V0VGV4dFNpemUoZWxlbS5jaG9yZFtpXS5uYW1lLCAnYW5ub3RhdGlvbmZvbnQnLCBcImFubm90YXRpb25cIik7XG5cdFx0XHR2YXIgY2hvcmRXaWR0aCA9IGRpbS53aWR0aDtcblx0XHRcdHZhciBjaG9yZEhlaWdodCA9IGRpbS5oZWlnaHQgLyBzcGFjaW5nLlNURVA7XG5cdFx0XHRzd2l0Y2ggKGVsZW0uY2hvcmRbaV0ucG9zaXRpb24pIHtcblx0XHRcdFx0Y2FzZSBcImxlZnRcIjpcblx0XHRcdFx0XHRyb29tVGFrZW4rPWNob3JkV2lkdGgrNztcblx0XHRcdFx0XHR4ID0gLXJvb21UYWtlbjsgICAgICAgIC8vIFRPRE8tUEVSOiBUaGlzIGlzIGp1c3QgYSBndWVzcyBmcm9tIHRyaWFsIGFuZCBlcnJvclxuXHRcdFx0XHRcdHkgPSBlbGVtLmF2ZXJhZ2VwaXRjaDtcblx0XHRcdFx0XHRhYnNlbGVtLmFkZEV4dHJhKG5ldyBSZWxhdGl2ZUVsZW1lbnQoZWxlbS5jaG9yZFtpXS5uYW1lLCB4LCBjaG9yZFdpZHRoKzQsIHksIHt0eXBlOlwidGV4dFwiLCBoZWlnaHQ6IGNob3JkSGVpZ2h0fSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicmlnaHRcIjpcblx0XHRcdFx0XHRyb29tVGFrZW5SaWdodCs9NDtcblx0XHRcdFx0XHR4ID0gcm9vbVRha2VuUmlnaHQ7Ly8gVE9ETy1QRVI6IFRoaXMgaXMganVzdCBhIGd1ZXNzIGZyb20gdHJpYWwgYW5kIGVycm9yXG5cdFx0XHRcdFx0eSA9IGVsZW0uYXZlcmFnZXBpdGNoO1xuXHRcdFx0XHRcdGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLmNob3JkW2ldLm5hbWUsIHgsIGNob3JkV2lkdGgrNCwgeSwge3R5cGU6XCJ0ZXh0XCIsIGhlaWdodDogY2hvcmRIZWlnaHR9KSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJiZWxvd1wiOlxuXHRcdFx0XHRcdC8vIHNldHRpbmcgdGhlIHktY29vcmRpbmF0ZSB0byB1bmRlZmluZWQgZm9yIG5vdzogaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlciBvbiwgYWZ0ZXIgd2UgZmlndXJlIG91dCB3aGF0IHRoZSBoaWdoZXN0IGVsZW1lbnQgb24gdGhlIGxpbmUgaXMuXG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0uY2hvcmRbaV0ubmFtZSwgMCwgY2hvcmRXaWR0aCtjaG9yZE1hcmdpbiwgdW5kZWZpbmVkLCB7dHlwZTogXCJ0ZXh0XCIsIHBvc2l0aW9uOiBcImJlbG93XCIsIGhlaWdodDogY2hvcmRIZWlnaHR9KSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJhYm92ZVwiOlxuXHRcdFx0XHRcdC8vIHNldHRpbmcgdGhlIHktY29vcmRpbmF0ZSB0byB1bmRlZmluZWQgZm9yIG5vdzogaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlciBvbiwgYWZ0ZXIgd2UgZmlndXJlIG91dCB3aGF0IHRoZSBoaWdoZXN0IGVsZW1lbnQgb24gdGhlIGxpbmUgaXMuXG5cdFx0XHRcdFx0YWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGVsZW0uY2hvcmRbaV0ubmFtZSwgMCwgY2hvcmRXaWR0aCtjaG9yZE1hcmdpbiwgdW5kZWZpbmVkLCB7dHlwZTogXCJ0ZXh0XCIsIGhlaWdodDogY2hvcmRIZWlnaHR9KSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0aWYgKGVsZW0uY2hvcmRbaV0ucmVsX3Bvc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVsUG9zaXRpb25ZID0gZWxlbS5jaG9yZFtpXS5yZWxfcG9zaXRpb24ueSArIDMqc3BhY2luZy5TVEVQOyAvLyBUT0RPLVBFUjogdGhpcyBpcyBhIGZ1ZGdlIGZhY3RvciB0byBtYWtlIGl0IGxpbmUgdXAgd2l0aCBhYmNtMnBzXG5cdFx0XHRcdFx0XHRhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoZWxlbS5jaG9yZFtpXS5uYW1lLCB4ICsgZWxlbS5jaG9yZFtpXS5yZWxfcG9zaXRpb24ueCwgMCwgZWxlbS5taW5waXRjaCArIHJlbFBvc2l0aW9uWSAvIHNwYWNpbmcuU1RFUCwge3R5cGU6IFwidGV4dFwiLCBoZWlnaHQ6IGNob3JkSGVpZ2h0fSkpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBzZXR0aW5nIHRoZSB5LWNvb3JkaW5hdGUgdG8gdW5kZWZpbmVkIGZvciBub3c6IGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIgb24sIGFmdGVyIHdlIGZpZ3VyZSBvdXQgd2hhdCB0aGUgaGlnaGVzdCBlbGVtZW50IG9uIHRoZSBsaW5lIGlzLlxuXHRcdFx0XHRcdFx0dmFyIHBvczIgPSAnYWJvdmUnO1xuXHRcdFx0XHRcdFx0aWYgKGVsZW0ucG9zaXRpb25pbmcgJiYgZWxlbS5wb3NpdGlvbmluZy5jaG9yZFBvc2l0aW9uKVxuXHRcdFx0XHRcdFx0XHRwb3MyID0gZWxlbS5wb3NpdGlvbmluZy5jaG9yZFBvc2l0aW9uO1xuXG5cdFx0XHRcdFx0XHRkaW0gPSB0aGlzLnJlbmRlcmVyLmdldFRleHRTaXplKGVsZW0uY2hvcmRbaV0ubmFtZSwgJ2djaG9yZGZvbnQnLCBcImNob3JkXCIpO1xuXHRcdFx0XHRcdFx0Y2hvcmRIZWlnaHQgPSBkaW0uaGVpZ2h0IC8gc3BhY2luZy5TVEVQO1xuXHRcdFx0XHRcdFx0Y2hvcmRXaWR0aCA9IGRpbS53aWR0aDsgLy8gU2luY2UgdGhlIGNob3JkIGlzIGNlbnRlcmVkLCB3ZSBvbmx5IHVzZSBoYWxmIHRoZSB3aWR0aC5cblx0XHRcdFx0XHRcdGFic2VsZW0uYWRkQ2VudGVyZWQobmV3IFJlbGF0aXZlRWxlbWVudChlbGVtLmNob3JkW2ldLm5hbWUsIHgsIGNob3JkV2lkdGgsIHVuZGVmaW5lZCwge3R5cGU6IFwiY2hvcmRcIiwgcG9zaXRpb246IHBvczIsIGhlaWdodDogY2hvcmRIZWlnaHQgfSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHsgcm9vbVRha2VuOiByb29tVGFrZW4sIHJvb21UYWtlblJpZ2h0OiByb29tVGFrZW5SaWdodCB9O1xuXHR9O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jcmVhdGVOb3RlID0gZnVuY3Rpb24oZWxlbSwgbm9zdGVtLCBpc1NpbmdsZUxpbmVTdGFmZiwgdm9pY2UpIHsgLy9zdGVtIHByZXNlbmNlOiB0cnVlIGZvciBkcmF3aW5nIHN0ZW1sZXNzIG5vdGVoZWFkXG4gIHZhciBub3RlaGVhZCA9IG51bGw7XG4gIHZhciByb29tdGFrZW4gPSAwOyAvLyByb29tIG5lZWRlZCB0byB0aGUgbGVmdCBvZiB0aGUgbm90ZVxuICB2YXIgcm9vbXRha2VucmlnaHQgPSAwOyAvLyByb29tIG5lZWRlZCB0byB0aGUgcmlnaHQgb2YgdGhlIG5vdGVcbiAgdmFyIHN5bWJvbFdpZHRoID0gMDtcbiAgdmFyIGFkZGl0aW9uYWxMZWRnZXJzID0gW107IC8vIFBFUjogaGFuZGxlIHRoZSBjYXNlIG9mIFtiYyddLCB3aGVyZSB0aGUgYiBkb2Vzbid0IGhhdmUgYSBsZWRnZXIgbGluZVxuXG4gIHZhciBpO1xuICB2YXIgZGlyO1xuXG5cdHZhciBkdXJhdGlvbiA9IGdldER1cmF0aW9uKGVsZW0pO1xuXHR2YXIgemVyb0R1cmF0aW9uID0gZmFsc2U7XG4gIGlmIChkdXJhdGlvbiA9PT0gMCkgeyB6ZXJvRHVyYXRpb24gPSB0cnVlOyBkdXJhdGlvbiA9IDAuMjU7IG5vc3RlbSA9IHRydWU7IH0gICAgICAgIC8vUEVSOiB6ZXJvIGR1cmF0aW9uIHdpbGwgZHJhdyBhIHF1YXJ0ZXIgbm90ZSBoZWFkLlxuICB2YXIgZHVybG9nID0gTWF0aC5mbG9vcihNYXRoLmxvZyhkdXJhdGlvbikvTWF0aC5sb2coMikpOyAvL1RPRE8gdXNlIGdldER1cmxvZ1xuICB2YXIgZG90PTA7XG5cbiAgZm9yICh2YXIgdG90ID0gTWF0aC5wb3coMixkdXJsb2cpLCBpbmM9dG90LzI7IHRvdDxkdXJhdGlvbjsgZG90KyssdG90Kz1pbmMsaW5jLz0yKTtcblxuXG5cdGlmIChlbGVtLnN0YXJ0VHJpcGxldCkge1xuXHRcdHRoaXMudHJpcGxldG11bHRpcGxpZXIgPSBlbGVtLnRyaXBsZXRNdWx0aXBsaWVyO1xuXHR9XG5cbiAgdmFyIGR1cmF0aW9uRm9yU3BhY2luZyA9IGR1cmF0aW9uICogdGhpcy50cmlwbGV0bXVsdGlwbGllcjtcbiAgaWYgKGVsZW0ucmVzdCAmJiBlbGVtLnJlc3QudHlwZSA9PT0gJ211bHRpbWVhc3VyZScpXG4gIFx0ZHVyYXRpb25Gb3JTcGFjaW5nID0gMTtcbiAgdmFyIGFic1R5cGUgPSBlbGVtLnJlc3QgPyBcInJlc3RcIiA6IFwibm90ZVwiO1xuICB2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwgZHVyYXRpb25Gb3JTcGFjaW5nLCAxLCBhYnNUeXBlLCB0aGlzLnR1bmVOdW1iZXIsIHsgZHVyYXRpb25DbGFzc092ZXJpZGU6IGVsZW0uZHVyYXRpb24gKiB0aGlzLnRyaXBsZXRtdWx0aXBsaWVyfSk7XG4gIGlmIChoaW50KSBhYnNlbGVtLnNldEhpbnQoKTtcblxuICBpZiAoZWxlbS5yZXN0KSB7XG4gIFx0aWYgKHRoaXMubWVhc3VyZUxlbmd0aCA9PT0gZHVyYXRpb24gJiYgZWxlbS5yZXN0LnR5cGUgIT09ICdpbnZpc2libGUnICYmIGVsZW0ucmVzdC50eXBlICE9PSAnc3BhY2VyJylcblx0ICAgIGVsZW0ucmVzdC50eXBlID0gJ3dob2xlJzsgLy8gSWYgdGhlIHJlc3QgaXMgZXhhY3RseSBhIG1lYXN1cmUsIGFsd2F5cyB1c2UgYSB3aG9sZSByZXN0XG5cdCAgdmFyIHJldDEgPSBhZGRSZXN0VG9BYnNFbGVtZW50KGFic2VsZW0sIGVsZW0sIGR1cmF0aW9uLCBkb3QsIHZvaWNlLnZvaWNldG90YWwgPiAxLCB0aGlzLnN0ZW1kaXIsIGlzU2luZ2xlTGluZVN0YWZmLCBkdXJsb2csIHRoaXMudm9pY2VTY2FsZSk7XG5cdCAgbm90ZWhlYWQgPSByZXQxLm5vdGVIZWFkO1xuXHQgIHJvb210YWtlbiA9IHJldDEucm9vbVRha2VuO1xuXHQgIHJvb210YWtlbnJpZ2h0ID0gcmV0MS5yb29tVGFrZW5SaWdodDtcbiAgfSBlbHNlIHtcblx0ICB2YXIgcmV0MiA9IHRoaXMuYWRkTm90ZVRvQWJjRWxlbWVudChhYnNlbGVtLCBlbGVtLCBkb3QsIHRoaXMuc3RlbWRpciwgdGhpcy5zdHlsZSwgemVyb0R1cmF0aW9uLCBkdXJsb2csIG5vc3RlbSwgdm9pY2UpO1xuXHQgIGlmIChyZXQyLm1pbiAhPT0gdW5kZWZpbmVkKVxuXHRcdCAgdGhpcy5taW5ZID0gTWF0aC5taW4ocmV0Mi5taW4sIHRoaXMubWluWSk7XG5cdCAgbm90ZWhlYWQgPSByZXQyLm5vdGVIZWFkO1xuXHQgIHJvb210YWtlbiA9IHJldDIucm9vbVRha2VuO1xuXHQgIHJvb210YWtlbnJpZ2h0ID0gcmV0Mi5yb29tVGFrZW5SaWdodDtcblx0ICBhZGRpdGlvbmFsTGVkZ2VycyA9IHJldDIuYWRkaXRpb25hbExlZGdlcnM7XG5cdCAgZGlyID0gcmV0Mi5kaXI7XG5cdCAgc3ltYm9sV2lkdGggPSByZXQyLnN5bWJvbFdpZHRoO1xuICB9XG5cbiAgaWYgKGVsZW0ubHlyaWMgIT09IHVuZGVmaW5lZCkge1xuICBcdHRoaXMuYWRkTHlyaWMoYWJzZWxlbSwgZWxlbSk7XG4gIH1cblxuICBpZiAoZWxlbS5ncmFjZW5vdGVzICE9PSB1bmRlZmluZWQpIHtcblx0cm9vbXRha2VuICs9IHRoaXMuYWRkR3JhY2VOb3RlcyhlbGVtLCB2b2ljZSwgYWJzZWxlbSwgbm90ZWhlYWQsIHRoaXMuc3RlbUhlaWdodCAqIHRoaXMudm9pY2VTY2FsZSwgdGhpcy5pc0JhZ3BpcGVzLCByb29tdGFrZW4pO1xuICB9XG5cbiAgaWYgKGVsZW0uZGVjb3JhdGlvbikge1xuXHQgIHRoaXMuZGVjb3JhdGlvbi5jcmVhdGVEZWNvcmF0aW9uKHZvaWNlLCBlbGVtLmRlY29yYXRpb24sIGFic2VsZW0udG9wLCAobm90ZWhlYWQpP25vdGVoZWFkLnc6MCwgYWJzZWxlbSwgcm9vbXRha2VuLCBkaXIsIGFic2VsZW0uYm90dG9tLCBlbGVtLnBvc2l0aW9uaW5nLCB0aGlzLmhhc1ZvY2Fscyk7XG4gIH1cblxuICBpZiAoZWxlbS5iYXJOdW1iZXIpIHtcbiAgICBhYnNlbGVtLmFkZENoaWxkKG5ldyBSZWxhdGl2ZUVsZW1lbnQoZWxlbS5iYXJOdW1iZXIsIC0xMCwgMCwgMCwge3R5cGU6XCJiYXJOdW1iZXJcIn0pKTtcbiAgfVxuXG4gIC8vIGxlZGdlciBsaW5lc1xuXHRsZWRnZXJMaW5lcyhhYnNlbGVtLCBlbGVtLm1pbnBpdGNoLCBlbGVtLm1heHBpdGNoLCBlbGVtLnJlc3QsIHN5bWJvbFdpZHRoLCBhZGRpdGlvbmFsTGVkZ2VycywgZGlyLCAtMiwgMSk7XG5cbiAgaWYgKGVsZW0uY2hvcmQgIT09IHVuZGVmaW5lZCkge1xuICBcdHZhciByZXQzID0gdGhpcy5hZGRDaG9yZChhYnNlbGVtLCBlbGVtLCByb29tdGFrZW4sIHJvb210YWtlbnJpZ2h0KTtcblx0ICByb29tdGFrZW4gPSByZXQzLnJvb21UYWtlbjtcblx0ICByb29tdGFrZW5yaWdodCA9IHJldDMucm9vbVRha2VuUmlnaHQ7XG4gIH1cblxuXG4gIGlmIChlbGVtLnN0YXJ0VHJpcGxldCkge1xuICAgIHRoaXMudHJpcGxldCA9IG5ldyBUcmlwbGV0RWxlbShlbGVtLnN0YXJ0VHJpcGxldCwgbm90ZWhlYWQsIHsgZmxhdEJlYW1zOiB0aGlzLmZsYXRCZWFtcyB9KTsgLy8gYWJvdmUgaXMgb3Bwb3NpdGUgZnJvbSBjYXNlIG9mIHNsdXJzXG4gIH1cblxuICBpZiAoZWxlbS5lbmRUcmlwbGV0ICYmIHRoaXMudHJpcGxldCkge1xuICAgIHRoaXMudHJpcGxldC5zZXRDbG9zZUFuY2hvcihub3RlaGVhZCk7XG4gIH1cblxuICBpZiAodGhpcy50cmlwbGV0ICYmICFlbGVtLnN0YXJ0VHJpcGxldCAmJiAhZWxlbS5lbmRUcmlwbGV0KSB7XG4gIFx0dGhpcy50cmlwbGV0Lm1pZGRsZU5vdGUobm90ZWhlYWQpO1xuICB9XG5cblxuICByZXR1cm4gYWJzZWxlbTtcbn07XG5cblxuXG5cbnZhciBjcmVhdGVOb3RlSGVhZCA9IGZ1bmN0aW9uKGFic2VsZW0sIGMsIHBpdGNoZWxlbSwgZGlyLCBoZWFkeCwgZXh0cmF4LCBmbGFnLCBkb3QsIGRvdHNoaWZ0eCwgc2NhbGUsIGFjY2lkZW50YWxTbG90LCBzaG91bGRFeHRlbmRTdGVtKSB7XG4gIC8vIFRPRE8gc2NhbGUgdGhlIGRvdCBhcyB3ZWxsXG4gIHZhciBwaXRjaCA9IHBpdGNoZWxlbS52ZXJ0aWNhbFBvcztcbiAgdmFyIG5vdGVoZWFkO1xuICB2YXIgaTtcbiAgdmFyIGFjY2lkZW50YWxzaGlmdHggPSAwO1xuICB2YXIgbmV3RG90U2hpZnRYID0gMDtcbiAgdmFyIGV4dHJhTGVmdCA9IDA7XG4gIGlmIChjID09PSB1bmRlZmluZWQpXG4gICAgYWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KFwicGl0Y2ggaXMgdW5kZWZpbmVkXCIsIDAsIDAsIDAsIHt0eXBlOlwiZGVidWdcIn0pKTtcbiAgZWxzZSBpZiAoYz09PVwiXCIpIHtcbiAgICBub3RlaGVhZCA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgMCwgMCwgcGl0Y2gpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzaGlmdGhlYWR4ID0gaGVhZHg7XG4gICAgaWYgKHBpdGNoZWxlbS5wcmludGVyX3NoaWZ0KSB7XG4gICAgICB2YXIgYWRqdXN0ID0gKHBpdGNoZWxlbS5wcmludGVyX3NoaWZ0PT09XCJzYW1lXCIpPzE6MDtcbiAgICAgIHNoaWZ0aGVhZHggPSAoZGlyPT09XCJkb3duXCIpPy1nbHlwaHMuZ2V0U3ltYm9sV2lkdGgoYykqc2NhbGUrYWRqdXN0OmdseXBocy5nZXRTeW1ib2xXaWR0aChjKSpzY2FsZS1hZGp1c3Q7XG4gICAgfVxuXHQgIHZhciBvcHRzID0ge3NjYWxleDpzY2FsZSwgc2NhbGV5OiBzY2FsZSwgdGhpY2tuZXNzOiBnbHlwaHMuc3ltYm9sSGVpZ2h0SW5QaXRjaGVzKGMpKnNjYWxlIH07XG4gICAgbm90ZWhlYWQgPSBuZXcgUmVsYXRpdmVFbGVtZW50KGMsIHNoaWZ0aGVhZHgsIGdseXBocy5nZXRTeW1ib2xXaWR0aChjKSpzY2FsZSwgcGl0Y2gsIG9wdHMpO1xuICAgIG5vdGVoZWFkLnN0ZW1EaXIgPSBkaXI7XG4gICAgaWYgKGZsYWcpIHtcbiAgICAgIHZhciBwb3MgPSBwaXRjaCsoKGRpcj09PVwiZG93blwiKT8tNzo3KSpzY2FsZTtcbiAgICAgIC8vIGlmIHRoaXMgaXMgYSByZWd1bGFyIG5vdGUsIChub3QgZ3JhY2Ugb3IgdGVtcG8gaW5kaWNhdG9yKSB0aGVuIHRoZSBzdGVtIHdpbGwgaGF2ZSBiZWVuIHN0cmV0Y2hlZCB0byB0aGUgbWlkZGxlIGxpbmUgaWYgaXQgaXMgZmFyIGZyb20gdGhlIGNlbnRlci5cblx0ICAgIGlmIChzaG91bGRFeHRlbmRTdGVtKSB7XG5cdCAgICBcdGlmIChkaXI9PT1cImRvd25cIiAmJiBwb3MgPiA2KVxuXHQgICAgXHRcdHBvcyA9IDY7XG5cdCAgICBcdGlmIChkaXI9PT1cInVwXCIgJiYgcG9zIDwgNilcblx0ICAgIFx0XHRwb3MgPSA2O1xuXHQgICAgfVxuICAgICAgLy9pZiAoc2NhbGU9PT0xICYmIChkaXI9PT1cImRvd25cIik/KHBvcz42KToocG9zPDYpKSBwb3M9NjtcbiAgICAgIHZhciB4ZGVsdGEgPSAoZGlyPT09XCJkb3duXCIpP2hlYWR4OmhlYWR4K25vdGVoZWFkLnctMC42O1xuICAgICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KGZsYWcsIHhkZWx0YSwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKGZsYWcpKnNjYWxlLCBwb3MsIHtzY2FsZXg6c2NhbGUsIHNjYWxleTogc2NhbGV9KSk7XG4gICAgfVxuXHQgIG5ld0RvdFNoaWZ0WCA9IG5vdGVoZWFkLncrZG90c2hpZnR4LTIrNSpkb3Q7XG4gICAgZm9yICg7ZG90PjA7ZG90LS0pIHtcbiAgICAgIHZhciBkb3RhZGp1c3R5ID0gKDEtTWF0aC5hYnMocGl0Y2gpJTIpOyAvL1BFUjogdGFrZSBhYnMgdmFsdWUgb2YgdGhlIHBpdGNoLiBBbmQgdGhlIHNoaWZ0IHN0aWxsIGhhcHBlbnMgb24gbGVkZ2VyIGxpbmVzLlxuICAgICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwiZG90cy5kb3RcIiwgbm90ZWhlYWQudytkb3RzaGlmdHgtMis1KmRvdCwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKFwiZG90cy5kb3RcIiksIHBpdGNoK2RvdGFkanVzdHkpKTtcbiAgICB9XG4gIH1cbiAgICAgICAgaWYgKG5vdGVoZWFkKVxuICAgICAgICAgICAgICAgIG5vdGVoZWFkLmhpZ2hlc3RWZXJ0ID0gcGl0Y2hlbGVtLmhpZ2hlc3RWZXJ0O1xuXG4gIGlmIChwaXRjaGVsZW0uYWNjaWRlbnRhbCkge1xuICAgIHZhciBzeW1iO1xuICAgIHN3aXRjaCAocGl0Y2hlbGVtLmFjY2lkZW50YWwpIHtcbiAgICBjYXNlIFwicXVhcnRlcnNoYXJwXCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5oYWxmc2hhcnBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImRibHNoYXJwXCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5kYmxzaGFycFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNoYXJwXCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5zaGFycFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInF1YXJ0ZXJmbGF0XCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5oYWxmZmxhdFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImZsYXRcIjpcbiAgICAgIHN5bWIgPSBcImFjY2lkZW50YWxzLmZsYXRcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJkYmxmbGF0XCI6XG4gICAgICBzeW1iID0gXCJhY2NpZGVudGFscy5kYmxmbGF0XCI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibmF0dXJhbFwiOlxuICAgICAgc3ltYiA9IFwiYWNjaWRlbnRhbHMubmF0XCI7XG4gICAgfVxuICAgICAgICAgLy8gaWYgYSBub3RlIGlzIGF0IGxlYXN0IGEgc2l4dGggYXdheSwgaXQgY2FuIHNoYXJlIGEgc2xvdCB3aXRoIGFub3RoZXIgYWNjaWRlbnRhbFxuICAgICAgICAgdmFyIGFjY1Nsb3RGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgdmFyIGFjY1BsYWNlID0gZXh0cmF4O1xuICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhY2NpZGVudGFsU2xvdC5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICBpZiAocGl0Y2ggLSBhY2NpZGVudGFsU2xvdFtqXVswXSA+PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgYWNjaWRlbnRhbFNsb3Rbal1bMF0gPSBwaXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICBhY2NQbGFjZSA9IGFjY2lkZW50YWxTbG90W2pdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgIGFjY1Nsb3RGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIGlmIChhY2NTbG90Rm91bmQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgIGFjY1BsYWNlIC09IChnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoc3ltYikqc2NhbGUrMik7XG4gICAgICAgICAgICAgICAgIGFjY2lkZW50YWxTbG90LnB1c2goW3BpdGNoLGFjY1BsYWNlXSk7XG4gICAgICAgICAgICAgICAgIGFjY2lkZW50YWxzaGlmdHggPSAoZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWIpKnNjYWxlKzIpO1xuICAgICAgICAgfVxuICAgIGFic2VsZW0uYWRkRXh0cmEobmV3IFJlbGF0aXZlRWxlbWVudChzeW1iLCBhY2NQbGFjZSwgZ2x5cGhzLmdldFN5bWJvbFdpZHRoKHN5bWIpLCBwaXRjaCwge3NjYWxleDpzY2FsZSwgc2NhbGV5OiBzY2FsZX0pKTtcblx0ICBleHRyYUxlZnQgPSBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgoc3ltYikgLyAyOyAvLyBUT0RPLVBFUjogV2UgbmVlZCBhIGxpdHRsZSBleHRyYSB3aWR0aCBpZiB0aGVyZSBpcyBhbiBhY2NpZGVudGFsLCBidXQgSSdtIG5vdCBzdXJlIHdoeSBpdCBpc24ndCB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgYWNjaWRlbnRhbC5cbiAgfVxuXG4gIHJldHVybiB7IG5vdGVoZWFkOiBub3RlaGVhZCwgYWNjaWRlbnRhbHNoaWZ0eDogYWNjaWRlbnRhbHNoaWZ0eCwgZG90c2hpZnR4OiBuZXdEb3RTaGlmdFgsIGV4dHJhTGVmdDogZXh0cmFMZWZ0IH07XG5cbn07XG5cblx0QWJzdHJhY3RFbmdyYXZlci5wcm90b3R5cGUuYWRkU2x1cnNBbmRUaWVzID0gZnVuY3Rpb24oYWJzZWxlbSwgcGl0Y2hlbGVtLCBub3RlaGVhZCwgdm9pY2UsIGRpciwgaXNHcmFjZSkge1xuXHRcdGlmIChwaXRjaGVsZW0uZW5kVGllKSB7XG5cdFx0XHRpZiAodGhpcy50aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gSWYgdGhlcmUgYXJlIG11bHRpcGxlIG9wZW4gdGllcywgZmluZCB0aGUgb25lIHRoYXQgYXBwbGllcyBieSBtYXRjaGluZyB0aGUgcGl0Y2gsIGlmIHBvc3NpYmxlLlxuXHRcdFx0XHR2YXIgZm91bmQgPSBmYWxzZTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLnRpZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRpZiAodGhpcy50aWVzW2pdLmFuY2hvcjEgJiYgdGhpcy50aWVzW2pdLmFuY2hvcjEucGl0Y2ggPT09IG5vdGVoZWFkLnBpdGNoKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRpZXNbal0uc2V0RW5kQW5jaG9yKG5vdGVoZWFkKTtcblx0XHRcdFx0XHRcdHRoaXMudGllcy5zcGxpY2UoaiwgMSk7XG5cdFx0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCFmb3VuZCkge1xuXHRcdFx0XHRcdHRoaXMudGllc1swXS5zZXRFbmRBbmNob3Iobm90ZWhlYWQpO1xuXHRcdFx0XHRcdHRoaXMudGllcy5zcGxpY2UoMCwgMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgdm9pY2VOdW1iZXIgPSB2b2ljZS52b2ljZXRvdGFsIDwgMiA/IC0xIDogdm9pY2Uudm9pY2VudW1iZXI7XG5cdFx0aWYgKHBpdGNoZWxlbS5zdGFydFRpZSkge1xuXHRcdFx0dmFyIHRpZSA9IG5ldyBUaWVFbGVtKHsgYW5jaG9yMTogbm90ZWhlYWQsIGZvcmNlOiAodGhpcy5zdGVtZGlyPT09XCJkb3duXCIgfHwgdGhpcy5zdGVtZGlyPT09XCJ1cFwiKSwgc3RlbURpcjogdGhpcy5zdGVtZGlyLCBpc0dyYWNlOiBpc0dyYWNlLCB2b2ljZU51bWJlcjogdm9pY2VOdW1iZXJ9KTtcblx0XHRcdGlmIChoaW50KSB0aWUuc2V0SGludCgpO1xuXG5cdFx0XHR0aGlzLnRpZXNbdGhpcy50aWVzLmxlbmd0aF09dGllO1xuXHRcdFx0dm9pY2UuYWRkT3RoZXIodGllKTtcblx0XHRcdC8vIEhBQ0stUEVSOiBGb3IgdGhlIGFuaW1hdGlvbiwgd2UgbmVlZCB0byBrbm93IGlmIGEgbm90ZSBpcyB0aWVkIHRvIHRoZSBuZXh0IG9uZSwgc28gaGVyZSdzIGEgZmxhZy5cblx0XHRcdC8vIFVuZm9ydHVuYXRlbHksIG9ubHkgc29tZSBvZiB0aGUgbm90ZXMgaW4gdGhlIGN1cnJlbnQgZXZlbnQgbWlnaHQgYmUgdGllZCwgYnV0IHRoaXMgd2lsbCBjb25zaWRlciBpdFxuXHRcdFx0Ly8gdGllZCBpZiBhbnkgb25lIG9mIHRoZW0gaXMuIFRoYXQgd2lsbCB3b3JrIGZvciBtb3N0IGNhc2VzLlxuXHRcdFx0YWJzZWxlbS5zdGFydFRpZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHBpdGNoZWxlbS5lbmRTbHVyKSB7XG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8cGl0Y2hlbGVtLmVuZFNsdXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIHNsdXJpZCA9IHBpdGNoZWxlbS5lbmRTbHVyW2ldO1xuXHRcdFx0XHR2YXIgc2x1cjtcblx0XHRcdFx0aWYgKHRoaXMuc2x1cnNbc2x1cmlkXSkge1xuXHRcdFx0XHRcdHNsdXIgPSB0aGlzLnNsdXJzW3NsdXJpZF07XG5cdFx0XHRcdFx0c2x1ci5zZXRFbmRBbmNob3Iobm90ZWhlYWQpO1xuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnNsdXJzW3NsdXJpZF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2x1ciA9IG5ldyBUaWVFbGVtKHsgYW5jaG9yMjogbm90ZWhlYWQsIHN0ZW1EaXI6IHRoaXMuc3RlbWRpciwgdm9pY2VOdW1iZXI6IHZvaWNlTnVtYmVyfSk7XG5cdFx0XHRcdFx0aWYgKGhpbnQpIHNsdXIuc2V0SGludCgpO1xuXHRcdFx0XHRcdHZvaWNlLmFkZE90aGVyKHNsdXIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLnN0YXJ0bGltaXRlbGVtKSB7XG5cdFx0XHRcdFx0c2x1ci5zZXRTdGFydFgodGhpcy5zdGFydGxpbWl0ZWxlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCFpc0dyYWNlKSB7XG5cdFx0XHRmb3IgKHZhciBzIGluIHRoaXMuc2x1cnMpIHtcblx0XHRcdFx0aWYgKHRoaXMuc2x1cnMuaGFzT3duUHJvcGVydHkocykpIHtcblx0XHRcdFx0XHR0aGlzLnNsdXJzW3NdLmFkZEludGVybmFsTm90ZShub3RlaGVhZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGl0Y2hlbGVtLnN0YXJ0U2x1cikge1xuXHRcdFx0Zm9yIChpPTA7IGk8cGl0Y2hlbGVtLnN0YXJ0U2x1ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgc2x1cmlkID0gcGl0Y2hlbGVtLnN0YXJ0U2x1cltpXS5sYWJlbDtcblx0XHRcdFx0dmFyIHNsdXIgPSBuZXcgVGllRWxlbSh7IGFuY2hvcjE6IG5vdGVoZWFkLCBzdGVtRGlyOiB0aGlzLnN0ZW1kaXIsIHZvaWNlTnVtYmVyOiB2b2ljZU51bWJlcn0pO1xuXHRcdFx0XHRpZiAoaGludCkgc2x1ci5zZXRIaW50KCk7XG5cdFx0XHRcdHRoaXMuc2x1cnNbc2x1cmlkXT1zbHVyO1xuXHRcdFx0XHR2b2ljZS5hZGRPdGhlcihzbHVyKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cbkFic3RyYWN0RW5ncmF2ZXIucHJvdG90eXBlLmFkZE1lYXN1cmVOdW1iZXIgPSBmdW5jdGlvbiAobnVtYmVyLCBhYnNlbGVtKSB7XG5cdHZhciBtZWFzdXJlTnVtSGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5nZXRUZXh0U2l6ZShudW1iZXIsIFwibWVhc3VyZWZvbnRcIiwgJ2Jhci1udW1iZXInKTtcblx0YWJzZWxlbS5hZGRDaGlsZChuZXcgUmVsYXRpdmVFbGVtZW50KG51bWJlciwgMCwgMCwgMTErbWVhc3VyZU51bUhlaWdodC5oZWlnaHQgLyBzcGFjaW5nLlNURVAsIHt0eXBlOlwiYmFyTnVtYmVyXCJ9KSk7XG59O1xuXG5BYnN0cmFjdEVuZ3JhdmVyLnByb3RvdHlwZS5jcmVhdGVCYXJMaW5lID0gZnVuY3Rpb24gKHZvaWNlLCBlbGVtLCBpc0ZpcnN0U3RhZmYpIHtcbi8vIGJhcl90aGluLCBiYXJfdGhpbl90aGljaywgYmFyX3RoaW5fdGhpbiwgYmFyX3RoaWNrX3RoaW4sIGJhcl9yaWdodF9yZXBlYXQsIGJhcl9sZWZ0X3JlcGVhdCwgYmFyX2RvdWJsZV9yZXBlYXRcblxuICB2YXIgYWJzZWxlbSA9IG5ldyBBYnNvbHV0ZUVsZW1lbnQoZWxlbSwgMCwgMTAsICdiYXInLCB0aGlzLnR1bmVOdW1iZXIpO1xuICB2YXIgYW5jaG9yID0gbnVsbDsgLy8gcGxhY2UgdG8gYXR0YWNoIHBhcnQgbGluZXNcbiAgdmFyIGR4ID0gMDtcblxuXHRpZiAoZWxlbS5iYXJOdW1iZXIpIHtcblx0XHR0aGlzLmFkZE1lYXN1cmVOdW1iZXIoZWxlbS5iYXJOdW1iZXIsIGFic2VsZW0pO1xuXHR9XG5cblxuICB2YXIgZmlyc3Rkb3RzID0gKGVsZW0udHlwZT09PVwiYmFyX3JpZ2h0X3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX2RibF9yZXBlYXRcIik7XG4gIHZhciBmaXJzdHRoaW4gPSAoZWxlbS50eXBlIT09XCJiYXJfbGVmdF9yZXBlYXRcIiAmJiBlbGVtLnR5cGUhPT1cImJhcl90aGlja190aGluXCIgJiYgZWxlbS50eXBlIT09XCJiYXJfaW52aXNpYmxlXCIpO1xuICB2YXIgdGhpY2sgPSAoZWxlbS50eXBlPT09XCJiYXJfcmlnaHRfcmVwZWF0XCIgfHwgZWxlbS50eXBlPT09XCJiYXJfZGJsX3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX2xlZnRfcmVwZWF0XCIgfHxcbiAgICAgICAgIGVsZW0udHlwZT09PVwiYmFyX3RoaW5fdGhpY2tcIiB8fCBlbGVtLnR5cGU9PT1cImJhcl90aGlja190aGluXCIpO1xuICB2YXIgc2Vjb25kdGhpbiA9IChlbGVtLnR5cGU9PT1cImJhcl9sZWZ0X3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX3RoaWNrX3RoaW5cIiB8fCBlbGVtLnR5cGU9PT1cImJhcl90aGluX3RoaW5cIiB8fCBlbGVtLnR5cGU9PT1cImJhcl9kYmxfcmVwZWF0XCIpO1xuICB2YXIgc2Vjb25kZG90cyA9IChlbGVtLnR5cGU9PT1cImJhcl9sZWZ0X3JlcGVhdFwiIHx8IGVsZW0udHlwZT09PVwiYmFyX2RibF9yZXBlYXRcIik7XG5cbiAgLy8gbGltaXQgcG9zaXRpb25pbmcgb2Ygc2x1cnNcbiAgaWYgKGZpcnN0ZG90cyB8fCBzZWNvbmRkb3RzKSB7XG4gICAgZm9yICh2YXIgc2x1ciBpbiB0aGlzLnNsdXJzKSB7XG4gICAgICBpZiAodGhpcy5zbHVycy5oYXNPd25Qcm9wZXJ0eShzbHVyKSkge1xuICAgICAgICB0aGlzLnNsdXJzW3NsdXJdLnNldEVuZFgoYWJzZWxlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRsaW1pdGVsZW0gPSBhYnNlbGVtO1xuICB9XG5cbiAgaWYgKGZpcnN0ZG90cykge1xuICAgIGFic2VsZW0uYWRkUmlnaHQobmV3IFJlbGF0aXZlRWxlbWVudChcImRvdHMuZG90XCIsIGR4LCAxLCA3KSk7XG4gICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwiZG90cy5kb3RcIiwgZHgsIDEsIDUpKTtcbiAgICBkeCs9NjsgLy8yIGhhcmRjb2RlZCwgdHdpY2U7XG4gIH1cblxuICBpZiAoZmlyc3R0aGluKSB7XG4gICAgYW5jaG9yID0gbmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgMSwgMiwge1widHlwZVwiOiBcImJhclwiLCBcInBpdGNoMlwiOjEwLCBsaW5ld2lkdGg6MC42fSk7XG4gICAgYWJzZWxlbS5hZGRSaWdodChhbmNob3IpO1xuICB9XG5cbiAgaWYgKGVsZW0udHlwZT09PVwiYmFyX2ludmlzaWJsZVwiKSB7XG4gICAgYW5jaG9yID0gbmV3IFJlbGF0aXZlRWxlbWVudChudWxsLCBkeCwgMSwgMiwge1widHlwZVwiOiBcIm5vbmVcIiwgXCJwaXRjaDJcIjoxMCwgbGluZXdpZHRoOjAuNn0pO1xuICAgIGFic2VsZW0uYWRkUmlnaHQoYW5jaG9yKTtcbiAgfVxuXG4gIGlmIChlbGVtLmRlY29yYXRpb24pIHtcbiAgICB0aGlzLmRlY29yYXRpb24uY3JlYXRlRGVjb3JhdGlvbih2b2ljZSwgZWxlbS5kZWNvcmF0aW9uLCAxMiwgKHRoaWNrKT8zOjEsIGFic2VsZW0sIDAsIFwiZG93blwiLCAyLCBlbGVtLnBvc2l0aW9uaW5nLCB0aGlzLmhhc1ZvY2Fscyk7XG4gIH1cblxuICBpZiAodGhpY2spIHtcbiAgICBkeCs9NDsgLy8zIGhhcmRjb2RlZDtcbiAgICBhbmNob3IgPSBuZXcgUmVsYXRpdmVFbGVtZW50KG51bGwsIGR4LCA0LCAyLCB7XCJ0eXBlXCI6IFwiYmFyXCIsIFwicGl0Y2gyXCI6MTAsIGxpbmV3aWR0aDo0fSk7XG4gICAgYWJzZWxlbS5hZGRSaWdodChhbmNob3IpO1xuICAgIGR4Kz01O1xuICB9XG5cbi8vIGlmICh0aGlzLnBhcnRzdGFydGVsZW0gJiYgKHRoaWNrIHx8IChmaXJzdHRoaW4gJiYgc2Vjb25kdGhpbikpKSB7IC8vIG1lYW5zIGVuZCBvZiBudGggcGFydFxuLy8gdGhpcy5wYXJ0c3RhcnRlbGVtLmFuY2hvcjI9YW5jaG9yO1xuLy8gdGhpcy5wYXJ0c3RhcnRlbGVtID0gbnVsbDtcbi8vIH1cblxuICBpZiAodGhpcy5wYXJ0c3RhcnRlbGVtICYmIGVsZW0uZW5kRW5kaW5nKSB7XG4gICAgdGhpcy5wYXJ0c3RhcnRlbGVtLmFuY2hvcjI9YW5jaG9yO1xuICAgIHRoaXMucGFydHN0YXJ0ZWxlbSA9IG51bGw7XG4gIH1cblxuICBpZiAoc2Vjb25kdGhpbikge1xuICAgIGR4Kz0zOyAvLzMgaGFyZGNvZGVkO1xuICAgIGFuY2hvciA9IG5ldyBSZWxhdGl2ZUVsZW1lbnQobnVsbCwgZHgsIDEsIDIsIHtcInR5cGVcIjogXCJiYXJcIiwgXCJwaXRjaDJcIjoxMCwgbGluZXdpZHRoOjAuNn0pO1xuICAgIGFic2VsZW0uYWRkUmlnaHQoYW5jaG9yKTsgLy8gMyBpcyBoYXJkY29kZWRcbiAgfVxuXG4gIGlmIChzZWNvbmRkb3RzKSB7XG4gICAgZHgrPTM7IC8vMyBoYXJkY29kZWQ7XG4gICAgYWJzZWxlbS5hZGRSaWdodChuZXcgUmVsYXRpdmVFbGVtZW50KFwiZG90cy5kb3RcIiwgZHgsIDEsIDcpKTtcbiAgICBhYnNlbGVtLmFkZFJpZ2h0KG5ldyBSZWxhdGl2ZUVsZW1lbnQoXCJkb3RzLmRvdFwiLCBkeCwgMSwgNSkpO1xuICB9IC8vIDIgaXMgaGFyZGNvZGVkXG5cbiAgaWYgKGVsZW0uc3RhcnRFbmRpbmcgJiYgaXNGaXJzdFN0YWZmKSB7IC8vIG9ubHkgcHV0IHRoZSBmaXJzdCAmIHNlY29uZCBlbmRpbmcgbWFya3Mgb24gdGhlIGZpcnN0IHN0YWZmXG5cdCAgdmFyIHRleHRXaWR0aCA9IHRoaXMucmVuZGVyZXIuZ2V0VGV4dFNpemUoZWxlbS5zdGFydEVuZGluZywgXCJyZXBlYXRmb250XCIsICcnKS53aWR0aDtcblx0ICBhYnNlbGVtLm1pbnNwYWNpbmcgKz0gdGV4dFdpZHRoICsgMTA7IC8vIEdpdmUgcGxlbnR5IG9mIHJvb20gZm9yIHRoZSBlbmRpbmcgbnVtYmVyLlxuICAgIHRoaXMucGFydHN0YXJ0ZWxlbSA9IG5ldyBFbmRpbmdFbGVtKGVsZW0uc3RhcnRFbmRpbmcsIGFuY2hvciwgbnVsbCk7XG5cdCAgdm9pY2UuYWRkT3RoZXIodGhpcy5wYXJ0c3RhcnRlbGVtKTtcbiAgfVxuXG4gIC8vIEFkZCBhIGxpdHRsZSBzcGFjZSB0byB0aGUgbGVmdCBvZiB0aGUgYmFyIGxpbmUgc28gdGhhdCBub3RoaW5nIGNhbiBjcm93ZCBpdC5cblx0YWJzZWxlbS5leHRyYXcgLT0gNTtcblxuXHRyZXR1cm4gYWJzZWxlbTtcblxufTtcblxuXG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFic3RyYWN0RW5ncmF2ZXI7XG4iLCIvLyAgICBhYmNfdm9pY2VfZWxlbWVudC5qczogRGVmaW5pdGlvbiBvZiB0aGUgVm9pY2VFbGVtZW50IGNsYXNzLlxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKSBhbmQgUGF1bCBSb3NlblxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLypnbG9iYWwgbW9kdWxlICovXG5cbnZhciBzdmdOUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcblxuZnVuY3Rpb24gU3ZnKHdyYXBwZXIpIHtcblx0dGhpcy5zdmcgPSBjcmVhdGVTdmcoKTtcblx0d3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLnN2Zyk7XG59XG5cblN2Zy5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ZnKSB7XG5cdFx0dmFyIHdyYXBwZXIgPSB0aGlzLnN2Zy5wYXJlbnROb2RlO1xuXHRcdHRoaXMuc3ZnID0gY3JlYXRlU3ZnKCk7XG5cdFx0aWYgKHdyYXBwZXIpIHtcblx0XHRcdC8vIFRPRE8tUEVSOiBJZiB0aGUgd3JhcHBlciBpcyBub3QgcHJlc2VudCwgdGhlbiB0aGUgdW5kZXJseWluZyBkaXYgd2FzIHB1bGxlZCBvdXQgZnJvbSB1bmRlciB0aGlzIGluc3RhbmNlLiBJdCdzIHBvc3NpYmxlIHRoYXQgaXMgc3RpbGwgdXNlZnVsIChmb3IgY3JlYXRpbmcgdGhlIG11c2ljIG9mZiBwYWdlPylcblx0XHRcdHdyYXBwZXIuaW5uZXJIVE1MID0gXCJcIjtcblx0XHRcdHdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5zdmcpO1xuXHRcdH1cblx0fVxufTtcblxuU3ZnLnByb3RvdHlwZS5zZXRUaXRsZSA9IGZ1bmN0aW9uKHRpdGxlKSB7XG5cdHZhciB0aXRsZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRpdGxlXCIpO1xuXHR2YXIgdGl0bGVOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGl0bGUpO1xuXHR0aXRsZUVsLmFwcGVuZENoaWxkKHRpdGxlTm9kZSk7XG5cdHRoaXMuc3ZnLmluc2VydEJlZm9yZSh0aXRsZUVsLCB0aGlzLnN2Zy5maXJzdENoaWxkKTtcbn07XG5cblN2Zy5wcm90b3R5cGUuc2V0UmVzcG9uc2l2ZVdpZHRoID0gZnVuY3Rpb24odywgaCkge1xuXHQvLyB0aGlzIHRlY2huaXF1ZSBpcyBmcm9tOiBodHRwOi8vdGhlbmV3Y29kZS5jb20vNzQ0L01ha2UtU1ZHLVJlc3BvbnNpdmUsIHRoeCB0byBodHRwczovL2dpdGh1Yi5jb20vaWFudHJlc21hblxuXHR0aGlzLnN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsIFwiMCAwIFwiICsgdyArIFwiIFwiICsgaCk7XG5cdHRoaXMuc3ZnLnNldEF0dHJpYnV0ZShcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWluWU1pbiBtZWV0XCIpO1xuXHR0aGlzLnN2Zy5yZW1vdmVBdHRyaWJ1dGUoXCJoZWlnaHRcIik7XG5cdHRoaXMuc3ZnLnJlbW92ZUF0dHJpYnV0ZShcIndpZHRoXCIpO1xuXHR0aGlzLnN2Zy5zdHlsZVsnZGlzcGxheSddID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0dGhpcy5zdmcuc3R5bGVbJ3Bvc2l0aW9uJ10gPSBcImFic29sdXRlXCI7XG5cdHRoaXMuc3ZnLnN0eWxlWyd0b3AnXSA9IFwiMFwiO1xuXHR0aGlzLnN2Zy5zdHlsZVsnbGVmdCddID0gXCIwXCI7XG5cblx0aWYgKHRoaXMuc3ZnLnBhcmVudE5vZGUpIHtcblx0XHR2YXIgY2xzID0gdGhpcy5zdmcucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKTtcblx0XHRpZiAoIWNscylcblx0XHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJhYmNqcy1jb250YWluZXJcIik7XG5cdFx0ZWxzZSBpZiAoY2xzLmluZGV4T2YoXCJhYmNqcy1jb250YWluZXJcIikgPCAwKVxuXHRcdFx0dGhpcy5zdmcucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBjbHMgKyBcIiBhYmNqcy1jb250YWluZXJcIik7XG5cdFx0dGhpcy5zdmcucGFyZW50Tm9kZS5zdHlsZVsnZGlzcGxheSddID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHR0aGlzLnN2Zy5wYXJlbnROb2RlLnN0eWxlWydwb3NpdGlvbiddID0gXCJyZWxhdGl2ZVwiO1xuXHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc3R5bGVbJ3dpZHRoJ10gPSBcIjEwMCVcIjtcblx0XHQvLyBQRVI6IEkgY2hhbmdlZCB0aGUgcGFkZGluZyBmcm9tIDEwMCUgdG8gdGhpcyB0aHJvdWdoIHRyaWFsIGFuZCBlcnJvci5cblx0XHQvLyBUaGUgZXhhbXBsZSB3YXMgdXNpbmcgYSBzcXVhcmUgaW1hZ2UsIGJ1dCB0aGlzIG11c2ljIG1pZ2h0IGJlIGVpdGhlciB3aWRlciBvciB0YWxsZXIuXG5cdFx0dmFyIHBhZGRpbmcgPSBoIC8gdyAqIDEwMDtcblx0XHR0aGlzLnN2Zy5wYXJlbnROb2RlLnN0eWxlWydwYWRkaW5nLWJvdHRvbSddID0gcGFkZGluZyArIFwiJVwiO1xuXHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc3R5bGVbJ3ZlcnRpY2FsLWFsaWduJ10gPSBcIm1pZGRsZVwiO1xuXHRcdHRoaXMuc3ZnLnBhcmVudE5vZGUuc3R5bGVbJ292ZXJmbG93J10gPSBcImhpZGRlblwiO1xuXHR9XG59O1xuXG5TdmcucHJvdG90eXBlLnNldFNpemUgPSBmdW5jdGlvbih3LCBoKSB7XG5cdHRoaXMuc3ZnLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3KTtcblx0dGhpcy5zdmcuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBoKTtcblx0Ly8gVE9ETy1QRVI6IElzIHRoaXMgaGFjayBzdGlsbCBuZWVkZWQ/XG5cdC8vIENvcnJlY3QgZm9yIElFIHByb2JsZW0gaW4gY2FsY3VsYXRpbmcgaGVpZ2h0XG5cdC8vIHZhciBpc0lFID0gLypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3RvclxuXHQvLyBpZiAoaXNJRSkge1xuXHQvLyBcdHRoaXMucGFwZXIuY2FudmFzLnBhcmVudE5vZGUuc3R5bGUud2lkdGggPSB3ICsgXCJweFwiO1xuXHQvLyBcdHRoaXMucGFwZXIuY2FudmFzLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0ID0gXCJcIiArIGggKyBcInB4XCI7XG5cdC8vIH0gZWxzZVxuXHQvLyBcdHRoaXMucGFwZXIuY2FudmFzLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDpcIiArIHcgKyBcInB4XCIpO1xufTtcblxuU3ZnLnByb3RvdHlwZS5zZXRTY2FsZSA9IGZ1bmN0aW9uKHNjYWxlKSB7XG5cdGlmIChzY2FsZSAhPT0gMSkge1xuXHRcdHRoaXMuc3ZnLnN0eWxlLnRyYW5zZm9ybSA9IFwic2NhbGUoXCIrc2NhbGUrXCIsXCIrc2NhbGUrXCIpXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IFwic2NhbGUoXCIrc2NhbGUrXCIsXCIrc2NhbGUrXCIpXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSBcInNjYWxlKFwiK3NjYWxlK1wiLFwiK3NjYWxlK1wiKVwiO1xuXHRcdHRoaXMuc3ZnLnN0eWxlWyd0cmFuc2Zvcm0tb3JpZ2luJ10gPSBcIjAgMFwiO1xuXHRcdHRoaXMuc3ZnLnN0eWxlWyctbXMtdHJhbnNmb3JtLW9yaWdpbi14J10gPSBcIjBcIjtcblx0XHR0aGlzLnN2Zy5zdHlsZVsnLW1zLXRyYW5zZm9ybS1vcmlnaW4teSddID0gXCIwXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbi14J10gPSBcIjBcIjtcblx0XHR0aGlzLnN2Zy5zdHlsZVsnLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXknXSA9IFwiMFwiO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuc3ZnLnN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy1tcy10cmFuc2Zvcm0nXSA9IFwiXCI7XG5cdFx0dGhpcy5zdmcuc3R5bGVbJy13ZWJraXQtdHJhbnNmb3JtJ10gPSBcIlwiO1xuXHR9XG59O1xuXG5TdmcucHJvdG90eXBlLnNldFBhcmVudFN0eWxlcyA9IGZ1bmN0aW9uKGF0dHIpIHtcblx0Ly8gVGhpcyBpcyBuZWVkZWQgdG8gZ2V0IHRoZSBzaXplIHJpZ2h0IHdoZW4gdGhlcmUgaXMgc2NhbGluZyBpbnZvbHZlZC5cblx0Zm9yICh2YXIga2V5IGluIGF0dHIpIHtcblx0XHRpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRpZiAodGhpcy5zdmcucGFyZW50Tm9kZSlcblx0XHRcdFx0dGhpcy5zdmcucGFyZW50Tm9kZS5zdHlsZVtrZXldID0gYXR0cltrZXldO1xuXHRcdH1cblx0fVxuXHQvLyBUaGlzIGlzIHRoZSBsYXN0IHRoaW5nIHRoYXQgZ2V0cyBjYWxsZWQsIHNvIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IFNWRyBpZiBvbmUgd2FzIGNyZWF0ZWRcblx0aWYgKHRoaXMuZHVtbXlTdmcpIHtcblx0XHR2YXIgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcblx0XHRib2R5LnJlbW92ZUNoaWxkKHRoaXMuZHVtbXlTdmcpO1xuXHRcdHRoaXMuZHVtbXlTdmcgPSBudWxsO1xuXHR9XG5cbn07XG5cblN2Zy5wcm90b3R5cGUucmVjdCA9IGZ1bmN0aW9uKGF0dHIpIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInJlY3RcIik7XG5cdGZvciAodmFyIGtleSBpbiBhdHRyKSB7XG5cdFx0aWYgKGF0dHIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0dmFyIHRtcCA9IFwiXCIgKyBhdHRyW2tleV07XG5cdFx0XHRpZiAodG1wLmluZGV4T2YoXCJOYU5cIikgPj0gMClcblx0XHRcdFx0ZGVidWdnZXI7XG5cdFx0XHRlbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBrZXksIGF0dHJba2V5XSk7XG5cdFx0fVxuXHR9XG5cdHRoaXMuYXBwZW5kKGVsKTtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odGV4dCwgYXR0ciwgdGFyZ2V0KSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgJ3RleHQnKTtcblx0Zm9yICh2YXIga2V5IGluIGF0dHIpIHtcblx0XHRpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyW2tleV0pO1xuXHRcdH1cblx0fVxuXHR2YXIgbGluZXMgPSAoXCJcIit0ZXh0KS5zcGxpdChcIlxcblwiKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCAndHNwYW4nKTtcblx0XHRsaW5lLnRleHRDb250ZW50ID0gbGluZXNbaV07XG5cdFx0bGluZS5zZXRBdHRyaWJ1dGUoXCJ4XCIsIGF0dHIueCA/IGF0dHIueCA6IDApO1xuXHRcdGlmIChpICE9PSAwKVxuXHRcdFx0bGluZS5zZXRBdHRyaWJ1dGUoXCJkeVwiLCBcIjEuMmVtXCIpO1xuXHRcdGVsLmFwcGVuZENoaWxkKGxpbmUpO1xuXHR9XG5cdGlmICh0YXJnZXQpXG5cdFx0dGFyZ2V0LmFwcGVuZENoaWxkKGVsKTtcblx0ZWxzZVxuXHRcdHRoaXMuYXBwZW5kKGVsKTtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS5ndWVzc1dpZHRoID0gZnVuY3Rpb24odGV4dCwgYXR0cikge1xuXHR2YXIgc3ZnID0gdGhpcy5jcmVhdGVEdW1teVN2ZygpO1xuXHR2YXIgZWwgPSB0aGlzLnRleHQodGV4dCwgYXR0ciwgc3ZnKTtcblx0dmFyIHNpemU7XG5cdHRyeSB7XG5cdFx0c2l6ZSAgPSBlbC5nZXRCQm94KCk7XG5cdFx0aWYgKGlzTmFOKHNpemUuaGVpZ2h0KSB8fCAhc2l6ZS5oZWlnaHQpIC8vIFRPRE8tUEVSOiBJIGRvbid0IHRoaW5rIHRoaXMgY2FuIGhhcHBlbiB1bmxlc3MgdGhlcmUgaXNuJ3QgYSBicm93c2VyIGF0IGFsbC5cblx0XHRcdHNpemUgPSB7IHdpZHRoOiBhdHRyWydmb250LXNpemUnXS8yLCBoZWlnaHQ6IGF0dHJbJ2ZvbnQtc2l6ZSddICsgMiB9OyAvLyBKdXN0IGEgd2lsZCBndWVzcy5cblx0XHRlbHNlXG5cdFx0XHRzaXplID0ge3dpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0fTtcblx0fSBjYXRjaCAoZXgpIHtcblx0XHRzaXplID0geyB3aWR0aDogYXR0clsnZm9udC1zaXplJ10vMiwgaGVpZ2h0OiBhdHRyWydmb250LXNpemUnXSArIDIgfTsgLy8gSnVzdCBhIHdpbGQgZ3Vlc3MuXG5cdH1cblx0c3ZnLnJlbW92ZUNoaWxkKGVsKTtcblx0cmV0dXJuIHNpemU7XG59O1xuXG5TdmcucHJvdG90eXBlLmNyZWF0ZUR1bW15U3ZnID0gZnVuY3Rpb24oKSB7XG5cdGlmICghdGhpcy5kdW1teVN2Zykge1xuXHRcdHRoaXMuZHVtbXlTdmcgPSBjcmVhdGVTdmcoKTtcblx0XHR2YXIgc3R5bGVzID0gW1xuXHRcdFx0XCJkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1wiLFxuXHRcdFx0XCJoZWlnaHQ6IDFweDtcIixcblx0XHRcdFwid2lkdGg6IDFweDtcIixcblx0XHRcdFwicG9zaXRpb246IGFic29sdXRlO1wiXG5cdFx0XTtcblx0XHR0aGlzLmR1bW15U3ZnLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMuam9pbihcIlwiKSk7XG5cdFx0dmFyIGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XG5cdFx0Ym9keS5hcHBlbmRDaGlsZCh0aGlzLmR1bW15U3ZnKTtcblx0fVxuXG5cdHJldHVybiB0aGlzLmR1bW15U3ZnO1xufTtcblxuU3ZnLnByb3RvdHlwZS5nZXRUZXh0U2l6ZSA9IGZ1bmN0aW9uKHRleHQsIGF0dHIsIGVsKSB7XG5cdGlmICh0eXBlb2YgdGV4dCA9PT0gJ251bWJlcicpXG5cdFx0dGV4dCA9ICcnK3RleHQ7XG5cdGlmICghdGV4dCB8fCB0ZXh0Lm1hdGNoKC9eXFxzKyQvKSlcblx0XHRyZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG5cdHZhciByZW1vdmVMYXRlciA9ICFlbDtcblx0aWYgKCFlbClcblx0XHRlbCA9IHRoaXMudGV4dCh0ZXh0LCBhdHRyKTtcblx0dmFyIHNpemU7XG5cdHRyeSB7XG5cdFx0c2l6ZSAgPSBlbC5nZXRCQm94KCk7XG5cdFx0aWYgKGlzTmFOKHNpemUuaGVpZ2h0KSB8fCAhc2l6ZS5oZWlnaHQpXG5cdFx0XHRzaXplID0gdGhpcy5ndWVzc1dpZHRoKHRleHQsIGF0dHIpO1xuXHRcdGVsc2Vcblx0XHRcdHNpemUgPSB7d2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHR9O1xuXHR9IGNhdGNoIChleCkge1xuXHRcdHNpemUgPSB0aGlzLmd1ZXNzV2lkdGgodGV4dCwgYXR0cik7XG5cdH1cblx0aWYgKHJlbW92ZUxhdGVyKSB7XG5cdFx0aWYgKHRoaXMuY3VycmVudEdyb3VwKVxuXHRcdFx0dGhpcy5jdXJyZW50R3JvdXAucmVtb3ZlQ2hpbGQoZWwpO1xuXHRcdGVsc2Vcblx0XHRcdHRoaXMuc3ZnLnJlbW92ZUNoaWxkKGVsKTtcblx0fVxuXHRyZXR1cm4gc2l6ZTtcbn07XG5cblN2Zy5wcm90b3R5cGUub3Blbkdyb3VwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyA/IG9wdGlvbnMgOiB7fTtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcImdcIik7XG5cdGlmIChvcHRpb25zLnByZXBlbmQpXG5cdFx0dGhpcy5zdmcuaW5zZXJ0QmVmb3JlKGVsLCB0aGlzLnN2Zy5maXJzdENoaWxkKTtcblx0ZWxzZVxuXHRcdHRoaXMuc3ZnLmFwcGVuZENoaWxkKGVsKTtcblx0dGhpcy5jdXJyZW50R3JvdXAgPSBlbDtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS5jbG9zZUdyb3VwID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnID0gdGhpcy5jdXJyZW50R3JvdXA7XG5cdHRoaXMuY3VycmVudEdyb3VwID0gbnVsbDtcblx0cmV0dXJuIGc7XG59O1xuXG5TdmcucHJvdG90eXBlLnBhdGggPSBmdW5jdGlvbihhdHRyKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOUywgXCJwYXRoXCIpO1xuXHRmb3IgKHZhciBrZXkgaW4gYXR0cikge1xuXHRcdGlmIChhdHRyLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGlmIChrZXkgPT09ICdwYXRoJylcblx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBhdHRyLnBhdGgpO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRlbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBrZXksIGF0dHJba2V5XSk7XG5cdFx0fVxuXHR9XG5cdHRoaXMuYXBwZW5kKGVsKTtcblx0cmV0dXJuIGVsO1xufTtcblxuU3ZnLnByb3RvdHlwZS5wYXRoVG9CYWNrID0gZnVuY3Rpb24oYXR0cikge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTlMsIFwicGF0aFwiKTtcblx0Zm9yICh2YXIga2V5IGluIGF0dHIpIHtcblx0XHRpZiAoYXR0ci5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRpZiAoa2V5ID09PSAncGF0aCcpXG5cdFx0XHRcdGVsLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgYXR0ci5wYXRoKTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZWwuc2V0QXR0cmlidXRlTlMobnVsbCwga2V5LCBhdHRyW2tleV0pO1xuXHRcdH1cblx0fVxuXHR0aGlzLnByZXBlbmQoZWwpO1xuXHRyZXR1cm4gZWw7XG59O1xuXG5TdmcucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uKGVsKSB7XG5cdGlmICh0aGlzLmN1cnJlbnRHcm91cClcblx0XHR0aGlzLmN1cnJlbnRHcm91cC5hcHBlbmRDaGlsZChlbCk7XG5cdGVsc2Vcblx0XHR0aGlzLnN2Zy5hcHBlbmRDaGlsZChlbCk7XG59O1xuXG5TdmcucHJvdG90eXBlLnByZXBlbmQgPSBmdW5jdGlvbihlbCkge1xuXHQvLyBUaGUgZW50aXJlIGdyb3VwIGlzIHByZXBlbmRlZCwgc28gZG9uJ3QgcHJlcGVuZCB0aGUgaW5kaXZpZHVhbCBlbGVtZW50cy5cblx0aWYgKHRoaXMuY3VycmVudEdyb3VwKVxuXHRcdHRoaXMuY3VycmVudEdyb3VwLmFwcGVuZENoaWxkKGVsKTtcblx0ZWxzZVxuXHRcdHRoaXMuc3ZnLmluc2VydEJlZm9yZShlbCwgdGhpcy5zdmcuZmlyc3RDaGlsZCk7XG59O1xuXG5TdmcucHJvdG90eXBlLnNldEF0dHJpYnV0ZU9uRWxlbWVudCA9IGZ1bmN0aW9uKGVsLCBhdHRyKSB7XG5cdGZvciAodmFyIGtleSBpbiBhdHRyKSB7XG5cdFx0aWYgKGF0dHIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0ZWwuc2V0QXR0cmlidXRlTlMobnVsbCwga2V5LCBhdHRyW2tleV0pO1xuXHRcdH1cblx0fVxufTtcblxuZnVuY3Rpb24gY3JlYXRlU3ZnKCkge1xuXHR2YXIgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05TLCBcInN2Z1wiKTtcblx0c3ZnLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIiwgXCJ4bWxuczp4bGlua1wiLCBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIik7XG5cdHN2Zy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnaW1nJyk7ICAgIC8vIGZvciBhY2Nlc3NpYmlsaXR5XG5cdHJldHVybiBzdmc7XG59XG5cblxubW9kdWxlLmV4cG9ydHMgPSBTdmc7XG4iLCIvLyAgICBhYmNfcmVuZGVyZXIuanM6IEFQSSB0byByZW5kZXIgdG8gU1ZHL1JhcGhhZWwvd2hhdGV2ZXIgcmVuZGVyaW5nIGVuZ2luZVxuLy8gICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTggR3JlZ29yeSBEeWtlIChncmVnZHlrZSBhdCBnbWFpbCBkb3QgY29tKVxuLy9cbi8vICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZFxuLy8gICAgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb25cbi8vICAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmRcbi8vICAgIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkdcbi8vICAgIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuLy8gICAgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vICAgIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5cbi8qZ2xvYmFsIE1hdGgsIGNvbnNvbGUgKi9cblxudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vYWJjX2dseXBocycpO1xudmFyIHNwYWNpbmcgPSByZXF1aXJlKCcuL2FiY19zcGFjaW5nJyk7XG52YXIgc3ByaW50ZiA9IHJlcXVpcmUoJy4vc3ByaW50ZicpO1xudmFyIFN2ZyA9IHJlcXVpcmUoJy4vc3ZnJyk7XG5cbi8qKlxuICogSW1wbGVtZW50cyB0aGUgQVBJIGZvciByZW5kZXJpbmcgQUJDSlMgQWJzdHJhY3QgUmVuZGVyaW5nIFN0cnVjdHVyZSB0byBhIGNhbnZhcy9wYXBlciAoZS5nLiBTVkcsIFJhcGhhZWwsIGV0YylcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXBlclxuICogQHBhcmFtIHtib29sfSBkb1JlZ3Jlc3Npb25cbiAqL1xudmFyIFJlbmRlcmVyID0gZnVuY3Rpb24ocGFwZXIsIGRvUmVncmVzc2lvbiwgc2hvdWxkQWRkQ2xhc3Nlcykge1xuICB0aGlzLnBhcGVyID0gbmV3IFN2ZyhwYXBlcik7XG4gIHRoaXMuY29udHJvbGxlciA9IG51bGw7IC8vVE9ETy1HRCBvbmx5IHVzZWQgd2hlbiBkcmF3aW5nIHRoZSBBQkNKUyBBUlMgdG8gY29ubmVjdCB0aGUgY29udHJvbGxlciB3aXRoIHRoZSBlbGVtZW50cyBmb3IgaGlnaGxpZ2h0aW5nXG5cblx0dGhpcy5zcGFjZSA9IDMqc3BhY2luZy5TUEFDRTtcbiAgdGhpcy5wYWRkaW5nID0ge307IC8vIHJlbmRlcmVyJ3MgcGFkZGluZyBpcyBtYW5hZ2VkIGJ5IHRoZSBjb250cm9sbGVyXG4gIHRoaXMuZG9SZWdyZXNzaW9uID0gZG9SZWdyZXNzaW9uO1xuICB0aGlzLnNob3VsZEFkZENsYXNzZXMgPSBzaG91bGRBZGRDbGFzc2VzO1xuICBpZiAodGhpcy5kb1JlZ3Jlc3Npb24pXG4gICAgdGhpcy5yZWdyZXNzaW9uTGluZXMgPSBbXTtcblx0dGhpcy5yZXNldCgpO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cblx0dGhpcy5wYXBlci5jbGVhcigpO1xuXHR0aGlzLnkgPSAwO1xuXHR0aGlzLmFiY3R1bmUgPSBudWxsO1xuXHR0aGlzLmxhc3RNID0gbnVsbDtcblx0dGhpcy5pbmdyb3VwID0gZmFsc2U7XG5cdHRoaXMucGF0aCA9IG51bGw7XG5cdHRoaXMuaXNQcmludCA9IGZhbHNlO1xuXHR0aGlzLmluaXRWZXJ0aWNhbFNwYWNlKCk7XG5cdGlmICh0aGlzLmRvUmVncmVzc2lvbilcblx0XHR0aGlzLnJlZ3Jlc3Npb25MaW5lcyA9IFtdO1xuXHQvLyBIQUNLLVBFUjogVGhlcmUgd2FzIGEgcHJvYmxlbSBpbiBSYXBoYWVsIHdoZXJlIGV2ZXJ5IHBhdGggc3RyaW5nIHRoYXQgd2FzIHNlbnQgdG8gaXQgd2FzIGNhY2hlZC5cblx0Ly8gVGhhdCB3YXMgY2F1c2luZyB0aGUgYnJvd3NlcidzIG1lbW9yeSB0byBzdGVhZGlseSBncm93IHVudGlsIHRoZSBicm93c2VyIHdlbnQgc2xvd2VyIGFuZCBzbG93ZXIgdW50aWxcblx0Ly8gaXQgY3Jhc2hlZC4gVGhlIGZpeCB0byB0aGF0IHdhcyBhIHBhdGNoIHRvIFJhcGhhZWwsIHNvIGl0IGlzIG9ubHkgcGF0Y2hlZCBvbiB0aGUgdmVyc2lvbnMgb2YgdGhpcyBsaWJyYXJ5IHRoYXRcblx0Ly8gYnVuZGxlIFJhcGhhZWwgd2l0aCBpdC4gQWxzbywgaWYgUmFwaGFlbCBnZXRzIGFuIHVwZGF0ZSwgdGhlbiB0aGF0IHBhdGNoIHdpbGwgYmUgbG9zdC4gT24gdmVyc2lvbiAyLjEuMiBvZiBSYXBoYWVsLFxuXHQvLyB0aGUgcGF0Y2ggaXMgb24gbGluZSAxNTQyIGFuZCAxNTQ1IGFuZCBpdCBpczpcblx0Ly8gICAgICAgICAgICAgcFtwc10uc2xlZXAgPSAxO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLm5ld1R1bmUgPSBmdW5jdGlvbihhYmNUdW5lKSB7XG5cdHRoaXMuYWJjdHVuZSA9IGFiY1R1bmU7IC8vIFRPRE8tUEVSOiB0aGlzIGlzIGp1c3QgdG8gZ2V0IHRoZSBmb250IGluZm8uXG5cdHRoaXMuc2V0VmVydGljYWxTcGFjZShhYmNUdW5lLmZvcm1hdHRpbmcpO1xuXHR0aGlzLm1lYXN1cmVOdW1iZXIgPSBudWxsO1xuXHR0aGlzLm5vdGVOdW1iZXIgPSBudWxsO1xuXHR0aGlzLnNldFByaW50TW9kZShhYmNUdW5lLm1lZGlhID09PSAncHJpbnQnKTtcblx0dGhpcy5zZXRQYWRkaW5nKGFiY1R1bmUpO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1TZXQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucGFwZXIub3Blbkdyb3VwKCk7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuY2xvc2VFbGVtU2V0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcGVyLmNsb3NlR3JvdXAoKTtcbn07XG5cbi8qKlxuICogU2V0IHdoZXRoZXIgd2UgYXJlIGZvcm1hdHRpbmcgdGhpcyBmb3IgdGhlIHNjcmVlbiwgb3IgYXMgYSBwcmV2aWV3IGZvciBjcmVhdGluZyBhIFBERiB2ZXJzaW9uLlxuICogQHBhcmFtIHtib29sfSBpc1ByaW50XG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5zZXRQcmludE1vZGUgPSBmdW5jdGlvbiAoaXNQcmludCkge1xuXHR0aGlzLmlzUHJpbnQgPSBpc1ByaW50O1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIHNpemUgb2YgdGhlIGNhbnZhcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtYXh3aWR0aFxuICogQHBhcmFtIHtvYmplY3R9IHNjYWxlXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5zZXRQYXBlclNpemUgPSBmdW5jdGlvbiAobWF4d2lkdGgsIHNjYWxlLCByZXNwb25zaXZlKSB7XG5cdHZhciB3ID0gKG1heHdpZHRoK3RoaXMucGFkZGluZy5yaWdodCkqc2NhbGU7XG5cdHZhciBoID0gKHRoaXMueSt0aGlzLnBhZGRpbmcuYm90dG9tKSpzY2FsZTtcblx0aWYgKHRoaXMuaXNQcmludClcblx0XHRoID0gTWF0aC5tYXgoaCwgMTA1Nik7IC8vIDExaW4geCA3MnB0L2luIHggMS4zM3B4L3B0XG5cdC8vIFRPRE8tUEVSOiBXZSBhcmUgbGV0dGluZyB0aGUgcGFnZSBnZXQgYXMgbG9uZyBhcyBpdCBuZWVkcyBub3csIGJ1dCBldmVudHVhbGx5IHRoYXQgc2hvdWxkIGdvIHRvIGEgc2Vjb25kIHBhZ2UuXG5cdGlmICh0aGlzLmRvUmVncmVzc2lvbilcblx0XHR0aGlzLnJlZ3Jlc3Npb25MaW5lcy5wdXNoKFwiUEFQRVIgU0laRTogKFwiK3crXCIsXCIraCtcIilcIik7XG5cblx0Ly8gZm9yIGFjY2Vzc2liaWxpdHlcblx0dmFyIHRleHQgPSBcIlNoZWV0IE11c2ljXCI7XG5cdGlmICh0aGlzLmFiY3R1bmUgJiYgdGhpcy5hYmN0dW5lLm1ldGFUZXh0ICYmIHRoaXMuYWJjdHVuZS5tZXRhVGV4dC50aXRsZSlcblx0XHR0ZXh0ICs9IFwiIGZvciBcXFwiXCIgKyB0aGlzLmFiY3R1bmUubWV0YVRleHQudGl0bGUgKyAnXCInO1xuXHR0aGlzLnBhcGVyLnNldFRpdGxlKHRleHQpO1xuXG5cdHZhciBwYXJlbnRTdHlsZXMgPSB7IG92ZXJmbG93OiBcImhpZGRlblwiIH07XG5cdGlmIChyZXNwb25zaXZlID09PSAncmVzaXplJykge1xuXHRcdHRoaXMucGFwZXIuc2V0UmVzcG9uc2l2ZVdpZHRoKHcsIGgpO1xuXHR9IGVsc2Uge1xuXHRcdHBhcmVudFN0eWxlcy53aWR0aCA9IFwiXCI7XG5cdFx0cGFyZW50U3R5bGVzLmhlaWdodCA9IGggKyBcInB4XCI7XG5cdFx0aWYgKHNjYWxlIDwgMSkge1xuXHRcdFx0cGFyZW50U3R5bGVzLndpZHRoID0gdyArIFwicHhcIjtcblx0XHRcdHRoaXMucGFwZXIuc2V0U2l6ZSh3IC8gc2NhbGUsIGggLyBzY2FsZSk7XG5cdFx0fSBlbHNlXG5cdFx0XHR0aGlzLnBhcGVyLnNldFNpemUodywgaCk7XG5cdH1cblx0dGhpcy5wYXBlci5zZXRTY2FsZShzY2FsZSk7XG5cdHRoaXMucGFwZXIuc2V0UGFyZW50U3R5bGVzKHBhcmVudFN0eWxlcyk7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgcGFkZGluZ1xuICogQHBhcmFtIHtvYmplY3R9IHBhcmFtc1xuICovXG5SZW5kZXJlci5wcm90b3R5cGUuc2V0UGFkZGluZ092ZXJyaWRlID0gZnVuY3Rpb24ocGFyYW1zKSB7XG5cdHRoaXMucGFkZGluZ092ZXJyaWRlID0geyB0b3A6IHBhcmFtcy5wYWRkaW5ndG9wLCBib3R0b206IHBhcmFtcy5wYWRkaW5nYm90dG9tLFxuXHRcdHJpZ2h0OiBwYXJhbXMucGFkZGluZ3JpZ2h0LCBsZWZ0OiBwYXJhbXMucGFkZGluZ2xlZnQgfTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwYWRkaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyYW1zXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5zZXRQYWRkaW5nID0gZnVuY3Rpb24oYWJjdHVuZSkge1xuXHQvLyBJZiB0aGUgcGFkZGluZyBpcyBzZXQgaW4gdGhlIHR1bmUsIHRoZW4gdXNlIHRoYXQuXG5cdC8vIE90aGVyd2lzZSwgaWYgdGhlIHBhZGRpbmcgaXMgc2V0IGluIHRoZSBvdmVycmlkZSwgdXNlIHRoYXQuXG5cdC8vIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0cyAodGhlcmUgYXJlIGEgZGlmZmVyZW50IHNldCBvZiBkZWZhdWx0cyBmb3Igc2NyZWVuIGFuZCBwcmludC4pXG5cdGZ1bmN0aW9uIHNldFBhZGRpbmdWYXJpYWJsZShzZWxmLCBwYWRkaW5nS2V5LCBmb3JtYXR0aW5nS2V5LCBwcmludERlZmF1bHQsIHNjcmVlbkRlZmF1bHQpIHtcblx0XHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nW2Zvcm1hdHRpbmdLZXldICE9PSB1bmRlZmluZWQpXG5cdFx0XHRzZWxmLnBhZGRpbmdbcGFkZGluZ0tleV0gPSBhYmN0dW5lLmZvcm1hdHRpbmdbZm9ybWF0dGluZ0tleV07XG5cdFx0ZWxzZSBpZiAoc2VsZi5wYWRkaW5nT3ZlcnJpZGVbcGFkZGluZ0tleV0gIT09IHVuZGVmaW5lZClcblx0XHRcdHNlbGYucGFkZGluZ1twYWRkaW5nS2V5XSA9IHNlbGYucGFkZGluZ092ZXJyaWRlW3BhZGRpbmdLZXldO1xuXHRcdGVsc2UgaWYgKHNlbGYuaXNQcmludClcblx0XHRcdHNlbGYucGFkZGluZ1twYWRkaW5nS2V5XSA9IHByaW50RGVmYXVsdDtcblx0XHRlbHNlXG5cdFx0XHRzZWxmLnBhZGRpbmdbcGFkZGluZ0tleV0gPSBzY3JlZW5EZWZhdWx0O1xuXHR9XG5cdC8vIDFjbSB4IDAuMzkzNzAxaW4vY20geCA3MnB0L2luIHggMS4zM3B4L3B0ID0gMzhweFxuXHQvLyAxLjhjbSB4IDAuMzkzNzAxaW4vY20geCA3MnB0L2luIHggMS4zM3B4L3B0ID0gNjhweFxuXHRzZXRQYWRkaW5nVmFyaWFibGUodGhpcywgJ3RvcCcsICd0b3BtYXJnaW4nLCAzOCwgMTUpO1xuXHRzZXRQYWRkaW5nVmFyaWFibGUodGhpcywgJ2JvdHRvbScsICdib3RtYXJnaW4nLCAzOCwgMTUpO1xuXHRzZXRQYWRkaW5nVmFyaWFibGUodGhpcywgJ2xlZnQnLCAnbGVmdG1hcmdpbicsIDY4LCAxNSk7XG5cdHNldFBhZGRpbmdWYXJpYWJsZSh0aGlzLCAncmlnaHQnLCAncmlnaHRtYXJnaW4nLCA2OCwgMTUpO1xufTtcblxuLyoqXG4gKiBTb21lIG9mIHRoZSBpdGVtcyBvbiB0aGUgcGFnZSBhcmUgbm90IHNjYWxlZCwgc28gYWRqdXN0IHRoZW0gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiBzY2FsaW5nIHRvIGNhbmNlbCBvdXQgdGhlIHNjYWxpbmcuXG4gKiBAcGFyYW0ge2Zsb2F0fSBzY2FsZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuYWRqdXN0Tm9uU2NhbGVkSXRlbXMgPSBmdW5jdGlvbiAoc2NhbGUpIHtcblx0dGhpcy5wYWRkaW5nLnRvcCAvPSBzY2FsZTtcblx0dGhpcy5wYWRkaW5nLmJvdHRvbSAvPSBzY2FsZTtcblx0dGhpcy5wYWRkaW5nLmxlZnQgLz0gc2NhbGU7XG5cdHRoaXMucGFkZGluZy5yaWdodCAvPSBzY2FsZTtcblx0dGhpcy5hYmN0dW5lLmZvcm1hdHRpbmcuaGVhZGVyZm9udC5zaXplIC89IHNjYWxlO1xuXHR0aGlzLmFiY3R1bmUuZm9ybWF0dGluZy5mb290ZXJmb250LnNpemUgLz0gc2NhbGU7XG59O1xuXG4vKipcbiAqIFNldCB0aGUgdGhlIHZhbHVlcyBmb3IgYWxsIHRoZSBjb25maWd1cmFibGUgdmVydGljYWwgc3BhY2Ugb3B0aW9ucy5cbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmluaXRWZXJ0aWNhbFNwYWNlID0gZnVuY3Rpb24oKSB7XG5cdC8vIGNvbnZlcnNpb246IDM3Ljc5NTMgPSBjb252ZXJzaW9uIGZhY3RvciBmb3IgY20gdG8gcHguXG5cdC8vIEFsbCBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgaW4gcHguXG5cdHRoaXMuc3BhY2luZyA9IHtcblx0XHRjb21wb3NlcjogNy41NiwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgY29tcG9zZXIuXG5cdFx0Z3JhY2VCZWZvcmU6IDguNjcsIC8vIERlZmluZSB0aGUgc3BhY2UgYmVmb3JlLCBpbnNpZGUgYW5kIGFmdGVyIHRoZSBncmFjZSBub3Rlcy5cblx0XHRncmFjZUluc2lkZTogMTAuNjcsXG5cdFx0Z3JhY2VBZnRlcjogMTYsXG5cdFx0aW5mbzogMCwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgaW5mb2xpbmUuXG5cdFx0bGluZVNraXBGYWN0b3I6IDEuMSwgLy8gU2V0IHRoZSBmYWN0b3IgZm9yIHNwYWNpbmcgYmV0d2VlbiBsaW5lcyBvZiB0ZXh0LiAobXVsdGlwbHkgdGhpcyBieSB0aGUgZm9udCBzaXplKVxuXHRcdG11c2ljOiA3LjU2LCAvLyBTZXQgdGhlIHZlcnRpY2FsIHNwYWNlIGFib3ZlIHRoZSBmaXJzdCBzdGFmZi5cblx0XHRwYXJhZ3JhcGhTa2lwRmFjdG9yOiAwLjQsIC8vIFNldCB0aGUgZmFjdG9yIGZvciBzcGFjaW5nIGJldHdlZW4gdGV4dCBwYXJhZ3JhcGhzLiAobXVsdGlwbHkgdGhpcyBieSB0aGUgZm9udCBzaXplKVxuXHRcdHBhcnRzOiAxMS4zMywgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSBhIG5ldyBwYXJ0LlxuXHRcdHNsdXJIZWlnaHQ6IDEuMCwgLy8gU2V0IHRoZSBzbHVyIGhlaWdodCBmYWN0b3IuXG5cdFx0c3RhZmZTZXBhcmF0aW9uOiA2MS4zMywgLy8gRG8gbm90IHB1dCBhIHN0YWZmIHN5c3RlbSBjbG9zZXIgdGhhbiA8dW5pdD4gZnJvbSB0aGUgcHJldmlvdXMgc3lzdGVtLlxuXHRcdHN0ZW1IZWlnaHQ6IDI2LjY3KzEwLCAvLyBTZXQgdGhlIHN0ZW0gaGVpZ2h0LlxuXHRcdHN1YnRpdGxlOiAzLjc4LCAvLyBTZXQgdGhlIHZlcnRpY2FsIHNwYWNlIGFib3ZlIHRoZSBzdWJ0aXRsZS5cblx0XHRzeXN0ZW1TdGFmZlNlcGFyYXRpb246IDQ4LCAvLyBEbyBub3QgcGxhY2UgdGhlIHN0YXZlcyBjbG9zZXIgdGhhbiA8dW5pdD4gaW5zaWRlIGEgc3lzdGVtLiAqIFRoaXMgdmFsdWVzIGFwcGxpZXMgdG8gYWxsIHN0YXZlcyB3aGVuIGluIHRoZSB0dW5lIGhlYWRlci4gT3RoZXJ3aXNlLCBpdCBhcHBsaWVzIHRvIHRoZSBuZXh0IHN0YWZmXG5cdFx0dGV4dDogMTguOSwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgaGlzdG9yeS5cblx0XHR0aXRsZTogNy41NiwgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgdGl0bGUuXG5cdFx0dG9wOiAzMC4yNCwgLy9TZXQgdGhlIHZlcnRpY2FsIHNwYWNlIGFib3ZlIHRoZSB0dW5lcyBhbmQgb24gdGhlIHRvcCBvZiB0aGUgY29udGludWF0aW9uIHBhZ2VzLlxuXHRcdHZvY2FsOiAzMC42NywgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgbHlyaWNzIHVuZGVyIHRoZSBzdGF2ZXMuXG5cdFx0d29yZHM6IDAgLy8gU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZSBhYm92ZSB0aGUgbHlyaWNzIGF0IHRoZSBlbmQgb2YgdGhlIHR1bmUuXG5cdH07XG5cdC8qXG5cdFRPRE8tUEVSOiBIYW5kbGUgdGhlIHgtY29vcmRpbmF0ZSBzcGFjaW5nIGl0ZW1zLCB0b28uXG5tYXhzaHJpbmsgPGZsb2F0PkRlZmF1bHQ6IDAuNjVcblNldCBob3cgbXVjaCB0byBjb21wcmVzcyBob3Jpem9udGFsbHkgd2hlbiBtdXNpYyBsaW5lIGJyZWFrc1xuYXJlIGF1dG9tYXRpYy5cbjxmbG9hdD4gbXVzdCBiZSBiZXR3ZWVuIDAgKG5hdHVyYWwgc3BhY2luZylcbmFuZCAxIChtYXggc2hyaW5raW5nKS5cblxuLy8gVGhpcyBuZXh0IHZhbHVlIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgbmF0dXJhbCBzcGFjaW5nIG9mXG4vLyB0aGUgbm90ZXMuIFRoZSBiYXNlIHNwYWNpbmcgb2YgdGhlIGNyb3RjaGV0IGlzIGFsd2F5c1xuLy8gNDAgcHRzLiBXaGVuIHRoZSBkdXJhdGlvbiBvZiBhIG5vdGUgdHlwZSBpcyB0d2ljZSB0aGVcbi8vIGR1cmF0aW9uIG9mIGFuIG90aGVyIG5vdGUgdHlwZSwgaXRzIHNwYWNpbmcgaXMgbXVsdGlwbGllZFxuLy8gYnkgdGhpcyBmYWN0b3IuXG4vLyBUaGUgZGVmYXVsdCB2YWx1ZSBjYXVzZXMgdGhlIG5vdGUgc3BhY2luZyB0byBiZSBtdWx0aXBsaWVkXG4vLyBieSAyIHdoZW4gaXRzIGR1cmF0aW9uIGlzIG11bHRpcGxpZWQgYnkgNCwgaS5lLiB0aGVcbi8vIHNwYWNlIG9mIHRoZSBzZW1pYnJldmUgaXMgODAgcHRzIGFuZCB0aGUgc3BhY2Ugb2YgdGhlXG4vLyBzZW1pcXVhdmVyIGlzIDIwIHB0cy5cbi8vIFNldHRpbmcgdGhpcyB2YWx1ZSB0byAxIHNldHMgYWxsIG5vdGUgc3BhY2luZyB0byA0MCBwdHMuXG5ub3RlU3BhY2luZ0ZhY3RvcjogMS40MTQsIC8vIFNldCB0aGUgbm90ZSBzcGFjaW5nIGZhY3RvciB0byA8ZmxvYXQ+IChyYW5nZSAxLi4yKS5cblxuc2NhbGUgPGZsb2F0PiBEZWZhdWx0OiAwLjc1IFNldCB0aGUgcGFnZSBzY2FsZSBmYWN0b3IuIE5vdGUgdGhhdCB0aGUgaGVhZGVyIGFuZCBmb290ZXIgYXJlIG5vdCBzY2FsZWQuXG5cbnN0cmV0Y2hsYXN0IDxmbG9hdD5EZWZhdWx0OiAwLjhcblN0cmV0Y2ggdGhlIGxhc3QgbXVzaWMgbGluZSBvZiBhIHR1bmUgd2hlbiBpdCBleGNlZWRzXG50aGUgPGZsb2F0PiBmcmFjdGlvbiBvZiB0aGUgcGFnZSB3aWR0aC5cbjxmbG9hdD4gcmFuZ2UgaXMgMC4wIHRvIDEuMC5cblx0ICovXG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuc2V0VmVydGljYWxTcGFjZSA9IGZ1bmN0aW9uKGZvcm1hdHRpbmcpIHtcblx0Ly8gY29udmVyc2lvbiBmcm9tIHB0cyB0byBweCA0LzNcblx0aWYgKGZvcm1hdHRpbmcuc3RhZmZzZXAgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcuc3RhZmZTZXBhcmF0aW9uID0gZm9ybWF0dGluZy5zdGFmZnNlcCAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy5jb21wb3NlcnNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLmNvbXBvc2VyID0gZm9ybWF0dGluZy5jb21wb3NlcnNwYWNlICo0LzM7XG5cdGlmIChmb3JtYXR0aW5nLnBhcnRzc3BhY2UgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcucGFydHMgPSBmb3JtYXR0aW5nLnBhcnRzc3BhY2UgKjQvMztcblx0aWYgKGZvcm1hdHRpbmcudGV4dHNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLnRleHQgPSBmb3JtYXR0aW5nLnRleHRzcGFjZSAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy5tdXNpY3NwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLm11c2ljID0gZm9ybWF0dGluZy5tdXNpY3NwYWNlICo0LzM7XG5cdGlmIChmb3JtYXR0aW5nLnRpdGxlc3BhY2UgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcudGl0bGUgPSBmb3JtYXR0aW5nLnRpdGxlc3BhY2UgKjQvMztcblx0aWYgKGZvcm1hdHRpbmcuc3lzc3RhZmZzZXAgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLnNwYWNpbmcuc3lzdGVtU3RhZmZTZXBhcmF0aW9uID0gZm9ybWF0dGluZy5zeXNzdGFmZnNlcCAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy5zdWJ0aXRsZXNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLnN1YnRpdGxlID0gZm9ybWF0dGluZy5zdWJ0aXRsZXNwYWNlICo0LzM7XG5cdGlmIChmb3JtYXR0aW5nLnRvcHNwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLnRvcCA9IGZvcm1hdHRpbmcudG9wc3BhY2UgKjQvMztcblx0aWYgKGZvcm1hdHRpbmcudm9jYWxzcGFjZSAhPT0gdW5kZWZpbmVkKVxuXHRcdHRoaXMuc3BhY2luZy52b2NhbCA9IGZvcm1hdHRpbmcudm9jYWxzcGFjZSAqNC8zO1xuXHRpZiAoZm9ybWF0dGluZy53b3Jkc3NwYWNlICE9PSB1bmRlZmluZWQpXG5cdFx0dGhpcy5zcGFjaW5nLndvcmRzID0gZm9ybWF0dGluZy53b3Jkc3NwYWNlICo0LzM7XG59O1xuXG4vKipcbiAqIExlYXZlIHNwYWNlIGF0IHRoZSB0b3Agb2YgdGhlIHBhcGVyXG4gKiBAcGFyYW0ge29iamVjdH0gYWJjdHVuZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUudG9wTWFyZ2luID0gZnVuY3Rpb24oYWJjdHVuZSkge1xuXHRcdHRoaXMubW92ZVkodGhpcy5wYWRkaW5nLnRvcCk7XG59O1xuXG4vKipcbiAqIExlYXZlIHNwYWNlIGJlZm9yZSBwcmludGluZyB0aGUgbXVzaWNcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmFkZE11c2ljUGFkZGluZyA9IGZ1bmN0aW9uKCkge1xuXHRcdHRoaXMubW92ZVkodGhpcy5zcGFjaW5nLm11c2ljKTtcbn07XG5cbi8qKlxuICogTGVhdmUgc3BhY2UgYmVmb3JlIHByaW50aW5nIGEgc3RhZmYgc3lzdGVtXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5hZGRTdGFmZlBhZGRpbmcgPSBmdW5jdGlvbihsYXN0U3RhZmZHcm91cCwgdGhpc1N0YWZmR3JvdXApIHtcblx0dmFyIGxhc3RTdGFmZiA9IGxhc3RTdGFmZkdyb3VwLnN0YWZmc1tsYXN0U3RhZmZHcm91cC5zdGFmZnMubGVuZ3RoLTFdO1xuXHR2YXIgbGFzdEJvdHRvbUxpbmUgPSAtKGxhc3RTdGFmZi5ib3R0b20gLSAyKTsgLy8gVGhlIDIgaXMgYmVjYXVzZSB0aGUgc2NhbGUgZ29lcyB0byAyIGJlbG93IHRoZSBsYXN0IGxpbmUuXG5cdHZhciBuZXh0VG9wTGluZSA9IHRoaXNTdGFmZkdyb3VwLnN0YWZmc1swXS50b3AgLSAxMDsgLy8gQmVjYXVzZSAxMCByZXByZXNlbnRzIHRoZSB0b3AgbGluZS5cblx0dmFyIG5hdHVyYWxTZXBhcmF0aW9uID0gbmV4dFRvcExpbmUgKyBsYXN0Qm90dG9tTGluZTsgLy8gVGhpcyBpcyBob3cgZmFyIGFwYXJ0IHRoZXknZCBiZSB3aXRob3V0IGV4dHJhIHNwYWNpbmdcblx0dmFyIHNlcGFyYXRpb25JblBpeGVscyA9IG5hdHVyYWxTZXBhcmF0aW9uICogc3BhY2luZy5TVEVQO1xuXHRpZiAoc2VwYXJhdGlvbkluUGl4ZWxzIDwgdGhpcy5zcGFjaW5nLnN0YWZmU2VwYXJhdGlvbilcblx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy5zdGFmZlNlcGFyYXRpb24tc2VwYXJhdGlvbkluUGl4ZWxzKTtcbn07XG5cbi8qKlxuICogVGV4dCB0aGF0IGdvZXMgYWJvdmUgdGhlIHNjb3JlXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBhYmN0dW5lXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5lbmdyYXZlVG9wVGV4dCA9IGZ1bmN0aW9uKHdpZHRoLCBhYmN0dW5lKSB7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LmhlYWRlciAmJiB0aGlzLmlzUHJpbnQpIHtcblx0XHQvLyBOb3RlOiB3aGV0aGVyIHRoZXJlIGlzIGEgaGVhZGVyIG9yIG5vdCBkb2Vzbid0IGNoYW5nZSBhbnkgb3RoZXIgcG9zaXRpb25pbmcsIHNvIHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIFktY29vcmRpbmF0ZS5cblx0XHQvLyBUaGlzIHRleHQgZ29lcyBhYm92ZSB0aGUgbWFyZ2luLCBzbyB3ZSdsbCB0ZW1wb3JhcmlseSBtb3ZlIHVwLlxuXHRcdHZhciBoZWFkZXJUZXh0SGVpZ2h0ID0gdGhpcy5nZXRUZXh0U2l6ZShcIlhYWFhcIiwgXCJoZWFkZXJmb250XCIsICdhYmNqcy1oZWFkZXIgYWJjanMtbWV0YS10b3AnKS5oZWlnaHQ7XG5cdFx0dGhpcy55IC09aGVhZGVyVGV4dEhlaWdodDtcblx0XHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCwgYWJjdHVuZS5tZXRhVGV4dC5oZWFkZXIubGVmdCwgJ2hlYWRlcmZvbnQnLCAnaGVhZGVyIG1ldGEtdG9wJywgMCwgbnVsbCwgJ3N0YXJ0Jyk7XG5cdFx0dGhpcy5vdXRwdXRUZXh0SWYodGhpcy5wYWRkaW5nLmxlZnQgKyB3aWR0aCAvIDIsIGFiY3R1bmUubWV0YVRleHQuaGVhZGVyLmNlbnRlciwgJ2hlYWRlcmZvbnQnLCAnaGVhZGVyIG1ldGEtdG9wJywgMCwgbnVsbCwgJ21pZGRsZScpO1xuXHRcdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgd2lkdGgsIGFiY3R1bmUubWV0YVRleHQuaGVhZGVyLnJpZ2h0LCAnaGVhZGVyZm9udCcsICdoZWFkZXIgbWV0YS10b3AnLCAwLCBudWxsLCAnZW5kJyk7XG5cdFx0dGhpcy55ICs9IGhlYWRlclRleHRIZWlnaHQ7XG5cdH1cblx0aWYgKHRoaXMuaXNQcmludClcblx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy50b3ApO1xuXHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoIC8gMiwgYWJjdHVuZS5tZXRhVGV4dC50aXRsZSwgJ3RpdGxlZm9udCcsICd0aXRsZSBtZXRhLXRvcCcsIHRoaXMuc3BhY2luZy50aXRsZSwgMCwgJ21pZGRsZScpO1xuXHRpZiAoYWJjdHVuZS5saW5lc1swXSlcblx0XHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoIC8gMiwgYWJjdHVuZS5saW5lc1swXS5zdWJ0aXRsZSwgJ3N1YnRpdGxlZm9udCcsICd0ZXh0IG1ldGEtdG9wJywgdGhpcy5zcGFjaW5nLnN1YnRpdGxlLCAwLCAnbWlkZGxlJyk7XG5cblx0aWYgKGFiY3R1bmUubWV0YVRleHQucmh5dGhtIHx8IGFiY3R1bmUubWV0YVRleHQub3JpZ2luIHx8IGFiY3R1bmUubWV0YVRleHQuY29tcG9zZXIpIHtcblx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy5jb21wb3Nlcik7XG5cdFx0dmFyIHJTcGFjZSA9IHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0LCBhYmN0dW5lLm1ldGFUZXh0LnJoeXRobSwgJ2luZm9mb250JywgJ21ldGEtdG9wJywgMCwgbnVsbCwgXCJzdGFydFwiKTtcblxuXHRcdHZhciBjb21wb3NlckxpbmUgPSBcIlwiO1xuXHRcdGlmIChhYmN0dW5lLm1ldGFUZXh0LmNvbXBvc2VyKSBjb21wb3NlckxpbmUgKz0gYWJjdHVuZS5tZXRhVGV4dC5jb21wb3Nlcjtcblx0XHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5vcmlnaW4pIGNvbXBvc2VyTGluZSArPSAnICgnICsgYWJjdHVuZS5tZXRhVGV4dC5vcmlnaW4gKyAnKSc7XG5cdFx0aWYgKGNvbXBvc2VyTGluZS5sZW5ndGggPiAwKSB7XG5cdFx0XHR2YXIgc3BhY2UgPSB0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoLCBjb21wb3NlckxpbmUsICdjb21wb3NlcmZvbnQnLCAnbWV0YS10b3AnLCAwLCBudWxsLCBcImVuZFwiKTtcblx0XHRcdHRoaXMubW92ZVkoc3BhY2VbMV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm1vdmVZKHJTcGFjZVsxXSk7XG5cdFx0fVxuXHRcdC8vIFRPRE8tUEVSOiBUaGUgZm9sbG93aW5nIGlzIGEgaGFjayB0byBtYWtlIHRoZSBlbGVtZW50cyBsaW5lIHVwIHdpdGggYWJjbTJwcy4gRG9uJ3Qga25vdyB3aGVyZSB0aGUgZXh0cmEgc3BhY2UgaXMgY29taW5nIGZyb20uXG5cdFx0dGhpcy5tb3ZlWSgtNik7XG5cdC8vfSBlbHNlIGlmICh0aGlzLmlzUHJpbnQpIHtcblx0Ly9cdC8vIGFiY20ycHMgYWRkcyB0aGlzIHNwYWNlIHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgdG8gd3JpdGUgb3Igbm90LlxuXHQvL1x0dGhpcy5tb3ZlWSh0aGlzLnNwYWNpbmcuY29tcG9zZXIpO1xuXHQvL1x0dmFyIHNwYWNlMiA9IHRoaXMuZ2V0VGV4dFNpemUoXCJNXCIsICdjb21wb3NlcmZvbnQnLCAnbWV0YS10b3AnKTtcblx0Ly9cdHRoaXMubW92ZVkoc3BhY2UyLmhlaWdodCk7XG5cdH1cblxuXHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoLCBhYmN0dW5lLm1ldGFUZXh0LmF1dGhvciwgJ2NvbXBvc2VyZm9udCcsICdtZXRhLXRvcCcsIDAsIDAsIFwiZW5kXCIpO1xuXHQvL3RoaXMuc2tpcFNwYWNlWSgpO1xuXG5cdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0LCBhYmN0dW5lLm1ldGFUZXh0LnBhcnRPcmRlciwgJ3BhcnRzZm9udCcsICdtZXRhLWJvdHRvbScsIDAsIDAsIFwic3RhcnRcIik7XG59O1xuXG4vKipcbiAqIFRleHQgdGhhdCBnb2VzIGJlbG93IHRoZSBzY29yZVxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gKiBAcGFyYW0ge29iamVjdH0gYWJjdHVuZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuZW5ncmF2ZUV4dHJhVGV4dCA9IGZ1bmN0aW9uKHdpZHRoLCBhYmN0dW5lKSB7XG5cdHRoaXMubGluZU51bWJlciA9IG51bGw7XG5cdHRoaXMubWVhc3VyZU51bWJlciA9IG51bGw7XG5cdHRoaXMubm90ZU51bWJlciA9IG51bGw7XG5cdHRoaXMudm9pY2VOdW1iZXIgPSBudWxsO1xuXG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzKSB7XG5cdFx0dmFyIGhhc2ggPSB0aGlzLmdldEZvbnRBbmRBdHRyKFwid29yZHNmb250XCIsICdtZXRhLWJvdHRvbScpO1xuXHRcdHZhciBzcGFjZSA9IHRoaXMuZ2V0VGV4dFNpemUoXCJpXCIsICd3b3Jkc2ZvbnQnLCAnbWV0YS1ib3R0b20nKTtcblxuXHRcdGlmIChhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzLmxlbmd0aCA+IDApXG5cdFx0XHR0aGlzLm1vdmVZKHRoaXMuc3BhY2luZy53b3JkcywgMSk7XG5cdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZiAoYWJjdHVuZS5tZXRhVGV4dC51bmFsaWduZWRXb3Jkc1tqXSA9PT0gJycpXG5cdFx0XHRcdHRoaXMubW92ZVkoaGFzaC5mb250LnNpemUsIDEpO1xuXHRcdFx0ZWxzZSBpZiAodHlwZW9mIGFiY3R1bmUubWV0YVRleHQudW5hbGlnbmVkV29yZHNbal0gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgc3BhY2luZy5JTkRFTlQsIGFiY3R1bmUubWV0YVRleHQudW5hbGlnbmVkV29yZHNbal0sICd3b3Jkc2ZvbnQnLCAnbWV0YS1ib3R0b20nLCAwLCAwLCBcInN0YXJ0XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIGxhcmdlc3RZID0gMDtcblx0XHRcdFx0dmFyIG9mZnNldFggPSAwO1xuXHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGFiY3R1bmUubWV0YVRleHQudW5hbGlnbmVkV29yZHNbal0ubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHR2YXIgdGhpc1dvcmQgPSBhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzW2pdW2tdO1xuXHRcdFx0XHRcdHZhciB0eXBlID0gKHRoaXNXb3JkLmZvbnQpID8gdGhpc1dvcmQuZm9udCA6IFwid29yZHNmb250XCI7XG5cdFx0XHRcdFx0dmFyIGVsID0gdGhpcy5yZW5kZXJUZXh0KHRoaXMucGFkZGluZy5sZWZ0ICsgc3BhY2luZy5JTkRFTlQgKyBvZmZzZXRYLCB0aGlzLnksIHRoaXNXb3JkLnRleHQsIHR5cGUsICdtZXRhLWJvdHRvbScsIGZhbHNlKTtcblx0XHRcdFx0XHR2YXIgc2l6ZSA9IHRoaXMuZ2V0VGV4dFNpemUodGhpc1dvcmQudGV4dCwgdHlwZSwgJ21ldGEtYm90dG9tJyk7XG5cdFx0XHRcdFx0bGFyZ2VzdFkgPSBNYXRoLm1heChsYXJnZXN0WSwgc2l6ZS5oZWlnaHQpO1xuXHRcdFx0XHRcdG9mZnNldFggKz0gc2l6ZS53aWR0aDtcblx0XHRcdFx0XHQvLyBJZiB0aGUgcGhyYXNlIGVuZHMgaW4gYSBzcGFjZSwgdGhlbiB0aGF0IGlzIG5vdCBjb3VudGVkIGluIHRoZSB3aWR0aCwgc28gd2UgbmVlZCB0byBhZGQgdGhhdCBpbiBvdXJzZWx2ZXMuXG5cdFx0XHRcdFx0aWYgKHRoaXNXb3JkLnRleHRbdGhpc1dvcmQudGV4dC5sZW5ndGgtMV0gPT09ICcgJykge1xuXHRcdFx0XHRcdFx0b2Zmc2V0WCArPSBzcGFjZS53aWR0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5tb3ZlWShsYXJnZXN0WSwgMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChhYmN0dW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzLmxlbmd0aCA+IDApXG5cdFx0XHR0aGlzLm1vdmVZKGhhc2guZm9udC5zaXplLCAyKTtcblx0fVxuXG5cdHZhciBleHRyYVRleHQgPSBcIlwiO1xuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5ib29rKSBleHRyYVRleHQgKz0gXCJCb29rOiBcIiArIGFiY3R1bmUubWV0YVRleHQuYm9vayArIFwiXFxuXCI7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LnNvdXJjZSkgZXh0cmFUZXh0ICs9IFwiU291cmNlOiBcIiArIGFiY3R1bmUubWV0YVRleHQuc291cmNlICsgXCJcXG5cIjtcblx0aWYgKGFiY3R1bmUubWV0YVRleHQuZGlzY29ncmFwaHkpIGV4dHJhVGV4dCArPSBcIkRpc2NvZ3JhcGh5OiBcIiArIGFiY3R1bmUubWV0YVRleHQuZGlzY29ncmFwaHkgKyBcIlxcblwiO1xuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5ub3RlcykgZXh0cmFUZXh0ICs9IFwiTm90ZXM6IFwiICsgYWJjdHVuZS5tZXRhVGV4dC5ub3RlcyArIFwiXFxuXCI7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0LnRyYW5zY3JpcHRpb24pIGV4dHJhVGV4dCArPSBcIlRyYW5zY3JpcHRpb246IFwiICsgYWJjdHVuZS5tZXRhVGV4dC50cmFuc2NyaXB0aW9uICsgXCJcXG5cIjtcblx0aWYgKGFiY3R1bmUubWV0YVRleHQuaGlzdG9yeSkgZXh0cmFUZXh0ICs9IFwiSGlzdG9yeTogXCIgKyBhYmN0dW5lLm1ldGFUZXh0Lmhpc3RvcnkgKyBcIlxcblwiO1xuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dFsnYWJjLWNvcHlyaWdodCddKSBleHRyYVRleHQgKz0gXCJDb3B5cmlnaHQ6IFwiICsgYWJjdHVuZS5tZXRhVGV4dFsnYWJjLWNvcHlyaWdodCddICsgXCJcXG5cIjtcblx0aWYgKGFiY3R1bmUubWV0YVRleHRbJ2FiYy1jcmVhdG9yJ10pIGV4dHJhVGV4dCArPSBcIkNyZWF0b3I6IFwiICsgYWJjdHVuZS5tZXRhVGV4dFsnYWJjLWNyZWF0b3InXSArIFwiXFxuXCI7XG5cdGlmIChhYmN0dW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J10pIGV4dHJhVGV4dCArPSBcIkVkaXRlZCBCeTogXCIgKyBhYmN0dW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J10gKyBcIlxcblwiO1xuXHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCwgZXh0cmFUZXh0LCAnaGlzdG9yeWZvbnQnLCAnbWV0YS1ib3R0b20nLCB0aGlzLnNwYWNpbmcuaW5mbywgMCwgXCJzdGFydFwiKTtcblxuXHRpZiAoYWJjdHVuZS5tZXRhVGV4dC5mb290ZXIgJiYgdGhpcy5pc1ByaW50KSB7XG5cdFx0Ly8gTm90ZTogd2hldGhlciB0aGVyZSBpcyBhIGZvb3RlciBvciBub3QgZG9lc24ndCBjaGFuZ2UgYW55IG90aGVyIHBvc2l0aW9uaW5nLCBzbyB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBZLWNvb3JkaW5hdGUuXG5cdFx0dGhpcy5vdXRwdXRUZXh0SWYodGhpcy5wYWRkaW5nLmxlZnQsIGFiY3R1bmUubWV0YVRleHQuZm9vdGVyLmxlZnQsICdmb290ZXJmb250JywgJ2hlYWRlciBtZXRhLWJvdHRvbScsIDAsIG51bGwsICdzdGFydCcpO1xuXHRcdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgd2lkdGggLyAyLCBhYmN0dW5lLm1ldGFUZXh0LmZvb3Rlci5jZW50ZXIsICdmb290ZXJmb250JywgJ2hlYWRlciBtZXRhLWJvdHRvbScsIDAsIG51bGwsICdtaWRkbGUnKTtcblx0XHR0aGlzLm91dHB1dFRleHRJZih0aGlzLnBhZGRpbmcubGVmdCArIHdpZHRoLCBhYmN0dW5lLm1ldGFUZXh0LmZvb3Rlci5yaWdodCwgJ2Zvb3RlcmZvbnQnLCAnaGVhZGVyIG1ldGEtYm90dG9tJywgMCwgbnVsbCwgJ2VuZCcpO1xuXHR9XG59O1xuXG4vKipcbiAqIE91dHB1dCB0ZXh0IGRlZmluZWQgd2l0aCAlJXRleHQuXG4gKiBAcGFyYW0ge2FycmF5IG9yIHN0cmluZ30gdGV4dFxuICovXG5SZW5kZXJlci5wcm90b3R5cGUub3V0cHV0RnJlZVRleHQgPSBmdW5jdGlvbiAodGV4dCwgdnNraXApIHtcblx0aWYgKHZza2lwKVxuXHRcdHRoaXMubW92ZVkodnNraXApO1xuXHR2YXIgaGFzaCA9IHRoaXMuZ2V0Rm9udEFuZEF0dHIoJ3RleHRmb250JywgJ2RlZmluZWQtdGV4dCcpO1xuXHRpZiAodGV4dCA9PT0gXCJcIikge1x0Ly8gd2UgZG8gd2FudCB0byBwcmludCBvdXQgYmxhbmsgbGluZXMgaWYgdGhleSBoYXZlIGJlZW4gc3BlY2lmaWVkLlxuXHRcdHRoaXMubW92ZVkoaGFzaC5hdHRyWydmb250LXNpemUnXSAqIDIpOyAvLyBtb3ZlIHRoZSBkaXN0YW5jZSBvZiB0aGUgbGluZSwgcGx1cyB0aGUgZGlzdGFuY2Ugb2YgdGhlIG1hcmdpbiwgd2hpY2ggaXMgYWxzbyBvbmUgbGluZS5cblx0fSBlbHNlIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcblx0XHR0aGlzLm1vdmVZKGhhc2guYXR0clsnZm9udC1zaXplJ10vMik7IC8vIFRPRE8tUEVSOiBtb3ZlIGRvd24gc29tZSAtIHRoZSB5IGxvY2F0aW9uIHNob3VsZCBiZSB0aGUgdG9wIG9mIHRoZSB0ZXh0LCBidXQgd2Ugb3V0cHV0IHRleHQgc3BlY2lmeWluZyB0aGUgY2VudGVyIGxpbmUuXG5cdFx0dGhpcy5vdXRwdXRUZXh0SWYodGhpcy5wYWRkaW5nLmxlZnQsIHRleHQsICd0ZXh0Zm9udCcsICdkZWZpbmVkLXRleHQnLCAwLCAwLCBcInN0YXJ0XCIpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXHRcdHZhciBpc0NlbnRlcmVkID0gZmFsc2U7IC8vIFRoZSBzdHJ1Y3R1cmUgaXMgd3JvbmcgaGVyZTogaXQgcmVxdWlyZXMgYW4gYXJyYXkgdG8gZG8gY2VudGVyaW5nLCBidXQgaXQgc2hvdWxkbid0IGhhdmUuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodGV4dFtpXS5mb250KVxuXHRcdFx0XHRzdHIgKz0gXCJGT05UKFwiICsgdGV4dFtpXS5mb250ICsgXCIpXCI7XG5cdFx0XHRzdHIgKz0gdGV4dFtpXS50ZXh0O1xuXHRcdFx0aWYgKHRleHRbaV0uY2VudGVyKVxuXHRcdFx0XHRpc0NlbnRlcmVkID0gdHJ1ZTtcblx0XHR9XG5cdFx0dmFyIGFsaWdubWVudCA9IGlzQ2VudGVyZWQgPyAnbWlkZGxlJyA6ICdzdGFydCc7XG5cdFx0dmFyIHggPSBpc0NlbnRlcmVkID8gdGhpcy5jb250cm9sbGVyLndpZHRoIC8gMiA6IHRoaXMucGFkZGluZy5sZWZ0O1xuXHRcdHRoaXMub3V0cHV0VGV4dElmKHgsIHN0ciwgJ3RleHRmb250JywgJ2RlZmluZWQtdGV4dCcsIDAsIDEsIGFsaWdubWVudCk7XG5cdH1cbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5vdXRwdXRTZXBhcmF0b3IgPSBmdW5jdGlvbiAoc2VwYXJhdG9yKSB7XG5cdGlmICghc2VwYXJhdG9yLmxpbmVMZW5ndGgpXG5cdFx0cmV0dXJuO1xuXHR0aGlzLm1vdmVZKHNlcGFyYXRvci5zcGFjZUFib3ZlKTtcblx0dGhpcy5wcmludFNlcGFyYXRvcihzZXBhcmF0b3IubGluZUxlbmd0aCk7XG5cdHRoaXMubW92ZVkoc2VwYXJhdG9yLnNwYWNlQmVsb3cpO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgYW4gZXh0cmEgc3VidGl0bGUgdGhhdCBpcyBkZWZpbmVkIGxhdGVyIGluIHRoZSB0dW5lLlxuICovXG5SZW5kZXJlci5wcm90b3R5cGUub3V0cHV0U3VidGl0bGUgPSBmdW5jdGlvbiAod2lkdGgsIHN1YnRpdGxlKSB7XG5cdHRoaXMub3V0cHV0VGV4dElmKHRoaXMucGFkZGluZy5sZWZ0ICsgd2lkdGggLyAyLCBzdWJ0aXRsZSwgJ3N1YnRpdGxlZm9udCcsICd0ZXh0IG1ldGEtdG9wJywgdGhpcy5zcGFjaW5nLnN1YnRpdGxlLCAwLCAnbWlkZGxlJyk7XG59O1xuXG4vKipcbiAqIEJlZ2luIGEgZ3JvdXAgb2YgZ2x5cGhzIHRoYXQgd2lsbCBhbHdheXMgYmUgbW92ZWQsIHNjYWxlZCBhbmQgaGlnaGxpZ2h0ZWQgdG9nZXRoZXJcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmJlZ2luR3JvdXAgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMucGF0aCA9IFtdO1xuICB0aGlzLmxhc3RNID0gWzAsMF07XG4gIHRoaXMuaW5ncm91cCA9IHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIHBhdGggdG8gdGhlIGN1cnJlbnQgZ3JvdXBcbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGhcbiAqIEBwcml2YXRlXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5hZGRQYXRoID0gZnVuY3Rpb24gKHBhdGgpIHtcbiAgcGF0aCA9IHBhdGggfHwgW107XG4gIGlmIChwYXRoLmxlbmd0aD09PTApIHJldHVybjtcbiAgcGF0aFswXVswXT1cIm1cIjtcbiAgcGF0aFswXVsxXS09dGhpcy5sYXN0TVswXTtcbiAgcGF0aFswXVsyXS09dGhpcy5sYXN0TVsxXTtcbiAgdGhpcy5sYXN0TVswXSs9cGF0aFswXVsxXTtcbiAgdGhpcy5sYXN0TVsxXSs9cGF0aFswXVsyXTtcbiAgdGhpcy5wYXRoLnB1c2gocGF0aFswXSk7XG4gIGZvciAodmFyIGk9MSxpaT1wYXRoLmxlbmd0aDtpPGlpO2krKykge1xuICAgIGlmIChwYXRoW2ldWzBdPT09XCJtXCIpIHtcbiAgICAgIHRoaXMubGFzdE1bMF0rPXBhdGhbaV1bMV07XG4gICAgICB0aGlzLmxhc3RNWzFdKz1wYXRoW2ldWzJdO1xuICAgIH1cbiAgICB0aGlzLnBhdGgucHVzaChwYXRoW2ldKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmQgYSBncm91cCBvZiBnbHlwaHMgdGhhdCB3aWxsIGFsd2F5cyBiZSBtb3ZlZCwgc2NhbGVkIGFuZCBoaWdobGlnaHRlZCB0b2dldGhlclxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuZW5kR3JvdXAgPSBmdW5jdGlvbiAoa2xhc3MpIHtcbiAgdGhpcy5pbmdyb3VwID0gZmFsc2U7XG4gIGlmICh0aGlzLnBhdGgubGVuZ3RoPT09MCkgcmV0dXJuIG51bGw7XG4gIHZhciBwYXRoID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspXG5cdFx0cGF0aCArPSB0aGlzLnBhdGhbaV0uam9pbihcIiBcIik7XG5cdHZhciByZXQgPSB0aGlzLnBhcGVyLnBhdGgoe3BhdGg6IHBhdGgsIHN0cm9rZTpcIm5vbmVcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGtsYXNzKX0pO1xuXHR0aGlzLnBhdGggPSBbXTtcbiAgaWYgKHRoaXMuZG9SZWdyZXNzaW9uKSB0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQpO1xuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIGdldHMgc2NhbGVkXG4gKiBAcGFyYW0ge251bWJlcn0geDEgc3RhcnQgeFxuICogQHBhcmFtIHtudW1iZXJ9IHgyIGVuZCB4XG4gKiBAcGFyYW0ge251bWJlcn0gcGl0Y2ggcGl0Y2ggdGhlIHN0YXZlIGxpbmUgaXMgZHJhd24gYXRcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLnByaW50U3RhdmVMaW5lID0gZnVuY3Rpb24gKHgxLHgyLCBwaXRjaCwga2xhc3MpIHtcblx0dmFyIGV4dHJhQ2xhc3MgPSBcInN0YWZmXCI7XG5cdGlmIChrbGFzcyAhPT0gdW5kZWZpbmVkKVxuXHRcdGV4dHJhQ2xhc3MgKz0gXCIgXCIgKyBrbGFzcztcbiAgdmFyIGlzSUU9LypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3RvclxuICB2YXIgZHkgPSAwLjM1O1xuICB2YXIgZmlsbCA9IFwiIzAwMDAwMFwiO1xuICBpZiAoaXNJRSkge1xuICAgIGR5ID0gMTtcbiAgICBmaWxsID0gXCIjNjY2NjY2XCI7XG4gIH1cbiAgdmFyIHkgPSB0aGlzLmNhbGNZKHBpdGNoKTtcbiAgdmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmIEwgJWYgJWYgTCAlZiAlZiB6XCIsIHgxLCB5LWR5LCB4MiwgeS1keSxcbiAgICAgeDIsIHkrZHksIHgxLCB5K2R5KTtcbiAgdmFyIHJldCA9IHRoaXMucGFwZXIucGF0aFRvQmFjayh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCJub25lXCIsIGZpbGw6ZmlsbCwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGV4dHJhQ2xhc3MpfSk7XG4gIGlmICh0aGlzLmRvUmVncmVzc2lvbikgdGhpcy5hZGRUb1JlZ3Jlc3Npb24ocmV0KTtcblxuICByZXR1cm4gcmV0O1xufTtcblxuLyoqXG4gKiBnZXRzIHNjYWxlZCBpZiBub3QgaW4gYSBncm91cFxuICogQHBhcmFtIHtudW1iZXJ9IHggeCBjb29yZGluYXRlIG9mIHRoZSBzdGVtXG4gKiBAcGFyYW0ge251bWJlcn0gZHggc3RlbSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IHkxIHkgY29vcmRpbmF0ZSBvZiB0aGUgc3RlbSBib3R0b21cbiAqIEBwYXJhbSB7bnVtYmVyfSB5MiB5IGNvb3JkaW5hdGUgb2YgdGhlIHN0ZW0gdG9wXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFN0ZW0gPSBmdW5jdGlvbiAoeCwgZHgsIHkxLCB5Mikge1xuICBpZiAoZHg8MCkgeyAvLyBjb3JyZWN0IHBhdGggXCJoYW5kZWRuZXNzXCIgZm9yIGludGVyc2VjdGlvbiB3aXRoIG90aGVyIGVsZW1lbnRzXG4gICAgdmFyIHRtcCA9IHkyO1xuICAgIHkyID0geTE7XG4gICAgeTEgPSB0bXA7XG4gIH1cbiAgdmFyIGlzSUU9LypAY2Nfb24hQCovZmFsc2U7Ly9JRSBkZXRlY3RvclxuICB2YXIgZmlsbCA9IFwiIzAwMDAwMFwiO1xuICBpZiAoaXNJRSAmJiBkeDwxKSB7XG4gICAgZHggPSAxO1xuICAgIGZpbGwgPSBcIiM2NjY2NjZcIjtcbiAgfVxuICBpZiAofn54ID09PSB4KSB4Kz0wLjA1OyAvLyByYXBoYWVsIGRvZXMgd2VpcmQgcm91bmRpbmcgKGZvciBWTUwpXG4gIHZhciBwYXRoQXJyYXkgPSBbW1wiTVwiLHgseTFdLFtcIkxcIiwgeCwgeTJdLFtcIkxcIiwgeCtkeCwgeTJdLFtcIkxcIix4K2R4LHkxXSxbXCJ6XCJdXTtcbiAgaWYgKCFpc0lFICYmIHRoaXMuaW5ncm91cCkge1xuICAgIHRoaXMuYWRkUGF0aChwYXRoQXJyYXkpO1xuICB9IGVsc2Uge1xuICBcdHZhciBwYXRoID0gXCJcIjtcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhBcnJheS5sZW5ndGg7IGkrKylcbiAgXHRcdHBhdGggKz0gcGF0aEFycmF5W2ldLmpvaW4oXCIgXCIpO1xuICAgIHZhciByZXQgPSB0aGlzLnBhcGVyLnBhdGhUb0JhY2soe3BhdGg6cGF0aCwgc3Ryb2tlOlwibm9uZVwiLCBmaWxsOmZpbGwsICdjbGFzcyc6IHRoaXMuYWRkQ2xhc3Nlcygnc3RlbScpfSk7XG4gICAgaWYgKHRoaXMuZG9SZWdyZXNzaW9uKSB0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZnVuY3Rpb24ga2VyblN5bWJvbHMobGFzdFN5bWJvbCwgdGhpc1N5bWJvbCwgbGFzdFN5bWJvbFdpZHRoKSB7XG5cdC8vIFRoaXMgaXMganVzdCBzb21lIGFkanVzdG1lbnRzIHRvIG1ha2UgaXQgbG9vayBiZXR0ZXIuXG5cdHZhciB3aWR0aCA9IGxhc3RTeW1ib2xXaWR0aDtcblx0aWYgKGxhc3RTeW1ib2wgPT09ICdmJyAmJiB0aGlzU3ltYm9sID09PSAnZicpXG5cdFx0d2lkdGggPSB3aWR0aCoyLzM7XG5cdGlmIChsYXN0U3ltYm9sID09PSAncCcgJiYgdGhpc1N5bWJvbCA9PT0gJ3AnKVxuXHRcdHdpZHRoID0gd2lkdGgqNS82O1xuXHRpZiAobGFzdFN5bWJvbCA9PT0gJ2YnICYmIHRoaXNTeW1ib2wgPT09ICd6Jylcblx0XHR3aWR0aCA9IHdpZHRoKjUvODtcblx0cmV0dXJuIHdpZHRoO1xufVxuXG4vKipcbiAqIGFzc3VtZXMgdGhpcy55IGlzIHNldCBhcHByb3ByaWF0ZWx5XG4gKiBpZiBzeW1ib2wgaXMgYSBtdWx0aWNoYXIgc3RyaW5nIHdpdGhvdXQgYSAuIChhcyBpbiBzY3JpcHRzLnN0YWNjYXRvKSAxIHN5bWJvbCBwZXIgY2hhciBpcyBhc3N1bWVkXG4gKiBub3Qgc2NhbGVkIGlmIG5vdCBpbiBwcmludGdyb3VwXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFN5bWJvbCA9IGZ1bmN0aW9uICh4LCBvZmZzZXQsIHN5bWJvbCwgc2NhbGV4LCBzY2FsZXksIGtsYXNzKSB7XG5cdHZhciBlbDtcblx0dmFyIHljb3JyO1xuXHRpZiAoIXN5bWJvbCkgcmV0dXJuIG51bGw7XG5cdGlmIChzeW1ib2wubGVuZ3RoID4gMSAmJiBzeW1ib2wuaW5kZXhPZihcIi5cIikgPCAwKSB7XG5cdFx0dGhpcy5wYXBlci5vcGVuR3JvdXAoKTtcblx0XHR2YXIgZHggPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9sLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgcyA9IHN5bWJvbC5jaGFyQXQoaSk7XG5cdFx0XHR5Y29yciA9IGdseXBocy5nZXRZQ29ycihzKTtcblx0XHRcdGVsID0gZ2x5cGhzLnByaW50U3ltYm9sKHggKyBkeCwgdGhpcy5jYWxjWShvZmZzZXQgKyB5Y29yciksIHMsIHRoaXMucGFwZXIsIGtsYXNzKTtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRpZiAodGhpcy5kb1JlZ3Jlc3Npb24pIHRoaXMuYWRkVG9SZWdyZXNzaW9uKGVsKTtcblx0XHRcdFx0Ly9lbGVtc2V0LnB1c2goZWwpO1xuXHRcdFx0XHRpZiAoaSA8IHN5bWJvbC5sZW5ndGggLSAxKVxuXHRcdFx0XHRcdGR4ICs9IGtlcm5TeW1ib2xzKHMsIHN5bWJvbC5jaGFyQXQoaSArIDEpLCBnbHlwaHMuZ2V0U3ltYm9sV2lkdGgocykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5yZW5kZXJUZXh0KHgsIHRoaXMueSwgXCJubyBzeW1ib2w6XCIgKyBzeW1ib2wsIFwiZGVidWdmb250XCIsICdkZWJ1Zy1tc2cnLCAnc3RhcnQnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMucGFwZXIuY2xvc2VHcm91cCgpO1xuXHR9IGVsc2Uge1xuXHRcdHljb3JyID0gZ2x5cGhzLmdldFlDb3JyKHN5bWJvbCk7XG5cdFx0aWYgKHRoaXMuaW5ncm91cCkge1xuXHRcdFx0dGhpcy5hZGRQYXRoKGdseXBocy5nZXRQYXRoRm9yU3ltYm9sKHgsIHRoaXMuY2FsY1kob2Zmc2V0ICsgeWNvcnIpLCBzeW1ib2wsIHNjYWxleCwgc2NhbGV5KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsID0gZ2x5cGhzLnByaW50U3ltYm9sKHgsIHRoaXMuY2FsY1kob2Zmc2V0ICsgeWNvcnIpLCBzeW1ib2wsIHRoaXMucGFwZXIsIGtsYXNzKTtcblx0XHRcdGlmIChlbCkge1xuXHRcdFx0XHRpZiAodGhpcy5kb1JlZ3Jlc3Npb24pIHRoaXMuYWRkVG9SZWdyZXNzaW9uKGVsKTtcblx0XHRcdFx0cmV0dXJuIGVsO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHRoaXMucmVuZGVyVGV4dCh4LCB0aGlzLnksIFwibm8gc3ltYm9sOlwiICsgc3ltYm9sLCBcImRlYnVnZm9udFwiLCAnZGVidWctbXNnJywgJ3N0YXJ0Jyk7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuc2NhbGVFeGlzdGluZ0VsZW0gPSBmdW5jdGlvbiAoZWxlbSwgc2NhbGVYLCBzY2FsZVksIHgsIHkpIHtcblx0dGhpcy5wYXBlci5zZXRBdHRyaWJ1dGVPbkVsZW1lbnQoZWxlbSwgeyBzdHlsZTogXCJ0cmFuc2Zvcm06c2NhbGUoXCIrc2NhbGVYK1wiLFwiK3NjYWxlWSArIFwiKTt0cmFuc2Zvcm0tb3JpZ2luOlwiICsgeCArIFwicHggXCIgKyB5ICsgXCJweDtcIn0pO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnByaW50UGF0aCA9IGZ1bmN0aW9uIChhdHRycykge1xuICB2YXIgcmV0ID0gdGhpcy5wYXBlci5wYXRoKGF0dHJzKTtcbiAgaWYgKHRoaXMuZG9SZWdyZXNzaW9uKSB0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQpO1xuICByZXR1cm4gcmV0O1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmRyYXdCcmFjZSA9IGZ1bmN0aW9uKHhMZWZ0LCB5VG9wLCB5Qm90dG9tKSB7Ly9Ub255XG5cdHZhciB5SGVpZ2h0ID0geUJvdHRvbSAtIHlUb3A7XG5cblx0dmFyIHhDdXJ2ZSA9IFs3LjUsIC04LCAyMSwgMCwgMTguNSwgLTEwLjUsIDcuNV07XG5cdHZhciB5Q3VydmUgPSBbMCwgeUhlaWdodC81LjUsIHlIZWlnaHQvMy4xNCwgeUhlaWdodC8yLCB5SGVpZ2h0LzIuOTMsIHlIZWlnaHQvNC44OCwgMF07XG5cblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBDICVmICVmICVmICVmICVmICVmIEMgJWYgJWYgJWYgJWYgJWYgJWYgelwiLFxuXHRcdHhMZWZ0K3hDdXJ2ZVswXSwgeVRvcCt5Q3VydmVbMF0sXG5cdFx0eExlZnQreEN1cnZlWzFdLCB5VG9wK3lDdXJ2ZVsxXSxcblx0XHR4TGVmdCt4Q3VydmVbMl0sIHlUb3AreUN1cnZlWzJdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVszXSwgeVRvcCt5Q3VydmVbM10sXG5cdFx0eExlZnQreEN1cnZlWzRdLCB5VG9wK3lDdXJ2ZVs0XSxcblx0XHR4TGVmdCt4Q3VydmVbNV0sIHlUb3AreUN1cnZlWzVdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVs2XSwgeVRvcCt5Q3VydmVbNl0pO1xuXHR2YXIgcmV0MSA9IHRoaXMucGFwZXIucGF0aCh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCIjMDAwMDAwXCIsIGZpbGw6XCIjMDAwMDAwXCIsICdjbGFzcyc6IHRoaXMuYWRkQ2xhc3NlcygnYnJhY2UnKX0pO1xuXG5cdHhDdXJ2ZSA9IFswLCAxNy41LCAtNy41LCA2LjYsIC01LCAyMCwgMF07XG5cdHlDdXJ2ZSA9IFt5SGVpZ2h0LzIsIHlIZWlnaHQvMS40NiwgeUhlaWdodC8xLjIyLCB5SGVpZ2h0LCB5SGVpZ2h0LzEuMTksIHlIZWlnaHQvMS40MiwgeUhlaWdodC8yXTtcblxuXHRwYXRoU3RyaW5nID0gc3ByaW50ZihcIk0gJWYgJWYgQyAlZiAlZiAlZiAlZiAlZiAlZiBDICVmICVmICVmICVmICVmICVmIHpcIixcblx0XHR4TGVmdCt4Q3VydmVbIDBdLCB5VG9wK3lDdXJ2ZVswXSxcblx0XHR4TGVmdCt4Q3VydmVbMV0sIHlUb3AreUN1cnZlWzFdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVsyXSwgeVRvcCt5Q3VydmVbMl0sXG5cdFx0eExlZnQreEN1cnZlWzNdLCB5VG9wK3lDdXJ2ZVszXSxcblx0XHR4TGVmdCt4Q3VydmVbNF0sIHlUb3AreUN1cnZlWzRdLFxuXHRcdHhMZWZ0K3hDdXJ2ZVs1XSwgeVRvcCt5Q3VydmVbNV0sXG5cdFx0eExlZnQreEN1cnZlWzZdLCB5VG9wK3lDdXJ2ZVs2XSk7XG5cdHZhciByZXQyID0gdGhpcy5wYXBlci5wYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIiMwMDAwMDBcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKCdicmFjZScpfSk7XG5cblx0aWYgKHRoaXMuZG9SZWdyZXNzaW9uKXtcblx0XHR0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQxKTtcblx0XHR0aGlzLmFkZFRvUmVncmVzc2lvbihyZXQyKTtcblx0fVxuXHRyZXR1cm4gcmV0MSArIHJldDI7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUuZHJhd0FyYyA9IGZ1bmN0aW9uKHgxLCB4MiwgcGl0Y2gxLCBwaXRjaDIsIGFib3ZlLCBrbGFzcywgaXNUaWUpIHtcblx0Ly8gSWYgaXQgaXMgYSB0aWUgdnMuIGEgc2x1ciwgZHJhdyBpdCBzaGFsbG93ZXIuXG5cdHZhciBzcGFjaW5nID0gaXNUaWUgPyAxLjIgOiAxLjU7XG5cbiAgeDEgPSB4MSArIDY7XG4gIHgyID0geDIgKyA0O1xuICBwaXRjaDEgPSBwaXRjaDEgKyAoKGFib3ZlKT9zcGFjaW5nOi1zcGFjaW5nKTtcbiAgcGl0Y2gyID0gcGl0Y2gyICsgKChhYm92ZSk/c3BhY2luZzotc3BhY2luZyk7XG4gIHZhciB5MSA9IHRoaXMuY2FsY1kocGl0Y2gxKTtcbiAgdmFyIHkyID0gdGhpcy5jYWxjWShwaXRjaDIpO1xuXG4gIC8vdW5pdCBkaXJlY3Rpb24gdmVjdG9yXG4gIHZhciBkeCA9IHgyLXgxO1xuICB2YXIgZHkgPSB5Mi15MTtcbiAgdmFyIG5vcm09IE1hdGguc3FydChkeCpkeCtkeSpkeSk7XG4gIHZhciB1eCA9IGR4L25vcm07XG4gIHZhciB1eSA9IGR5L25vcm07XG5cbiAgdmFyIGZsYXR0ZW4gPSBub3JtLzMuNTtcbiAgdmFyIG1heEZsYXR0ZW4gPSBpc1RpZSA/IDEwIDogMjU7ICAvLyBJZiBpdCBpcyBhIHRpZSB2cy4gYSBzbHVyLCBkcmF3IGl0IHNoYWxsb3dlci5cbiAgdmFyIGN1cnZlID0gKChhYm92ZSk/LTE6MSkqTWF0aC5taW4obWF4RmxhdHRlbiwgTWF0aC5tYXgoNCwgZmxhdHRlbikpO1xuXG4gIHZhciBjb250cm9seDEgPSB4MStmbGF0dGVuKnV4LWN1cnZlKnV5O1xuICB2YXIgY29udHJvbHkxID0geTErZmxhdHRlbip1eStjdXJ2ZSp1eDtcbiAgdmFyIGNvbnRyb2x4MiA9IHgyLWZsYXR0ZW4qdXgtY3VydmUqdXk7XG4gIHZhciBjb250cm9seTIgPSB5Mi1mbGF0dGVuKnV5K2N1cnZlKnV4O1xuICB2YXIgdGhpY2tuZXNzID0gMjtcbiAgdmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBDICVmICVmICVmICVmICVmICVmIEMgJWYgJWYgJWYgJWYgJWYgJWYgelwiLCB4MSwgeTEsXG4gICAgIGNvbnRyb2x4MSwgY29udHJvbHkxLCBjb250cm9seDIsIGNvbnRyb2x5MiwgeDIsIHkyLFxuICAgICBjb250cm9seDItdGhpY2tuZXNzKnV5LCBjb250cm9seTIrdGhpY2tuZXNzKnV4LCBjb250cm9seDEtdGhpY2tuZXNzKnV5LCBjb250cm9seTErdGhpY2tuZXNzKnV4LCB4MSwgeTEpO1xuXHRpZiAoa2xhc3MpXG5cdFx0a2xhc3MgKz0gJyBzbHVyJztcblx0ZWxzZVxuXHRcdGtsYXNzID0gJ3NsdXInO1xuICB2YXIgcmV0ID0gdGhpcy5wYXBlci5wYXRoKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIm5vbmVcIiwgZmlsbDpcIiMwMDAwMDBcIiwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGtsYXNzKX0pO1xuICBpZiAodGhpcy5kb1JlZ3Jlc3Npb24pIHRoaXMuYWRkVG9SZWdyZXNzaW9uKHJldCk7XG5cbiAgcmV0dXJuIHJldDtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHkgZm9yIGEgZ2l2ZW4gcGl0Y2ggdmFsdWUgKHJlbGF0aXZlIHRvIHRoZSBzdGF2ZSB0aGUgcmVuZGVyZXIgaXMgY3VycmVudGx5IHByaW50aW5nKVxuICogQHBhcmFtIHtudW1iZXJ9IG9mcyBwaXRjaCB2YWx1ZSAoYm90dG9tIEMgb24gYSBHIGNsZWYgPSAwLCBEPTEsIGV0Yy4pXG4gKi9cblJlbmRlcmVyLnByb3RvdHlwZS5jYWxjWSA9IGZ1bmN0aW9uKG9mcykge1xuICByZXR1cm4gdGhpcy55IC0gb2ZzKnNwYWNpbmcuU1RFUDtcbn07XG5cbi8qKlxuICogUHJpbnQgQHBhcmFtIHtudW1iZXJ9IG51bUxpbmVzLiBJZiB0aGVyZSBpcyAxIGxpbmUgaXQgaXMgdGhlIEIgbGluZS4gT3RoZXJ3aXNlIHRoZSBib3R0b20gbGluZSBpcyB0aGUgRSBsaW5lLlxuICovXG5SZW5kZXJlci5wcm90b3R5cGUucHJpbnRTdGF2ZSA9IGZ1bmN0aW9uIChzdGFydHgsIGVuZHgsIG51bUxpbmVzKSB7XG5cdHZhciBrbGFzcyA9IFwidG9wLWxpbmVcIjtcblx0dGhpcy5wYXBlci5vcGVuR3JvdXAoeyBwcmVwZW5kOiB0cnVlIH0pO1xuXHQvLyBJZiB0aGVyZSBpcyBvbmUgbGluZSwgaXQgaXMgdGhlIEIgbGluZS4gT3RoZXJ3aXNlLCB0aGUgYm90dG9tIGxpbmUgaXMgdGhlIEUgbGluZS5cblx0aWYgKG51bUxpbmVzID09PSAxKSB7XG5cdFx0dGhpcy5wcmludFN0YXZlTGluZShzdGFydHgsZW5keCw2LCBrbGFzcyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZvciAodmFyIGkgPSBudW1MaW5lcy0xOyBpID49IDA7IGktLSkge1xuXHRcdHRoaXMucHJpbnRTdGF2ZUxpbmUoc3RhcnR4LGVuZHgsKGkrMSkqMiwga2xhc3MpO1xuXHRcdGtsYXNzID0gdW5kZWZpbmVkO1xuXHR9XG5cdHRoaXMucGFwZXIuY2xvc2VHcm91cCgpO1xufTtcblxuLyoqXG4gKlxuICogQHByaXZhdGVcbiAqL1xuUmVuZGVyZXIucHJvdG90eXBlLmFkZENsYXNzZXMgPSBmdW5jdGlvbiAoYywgaXNOb3RlKSB7XG5cdGlmICghdGhpcy5zaG91bGRBZGRDbGFzc2VzKVxuXHRcdHJldHVybiBcIlwiO1xuXHR2YXIgcmV0ID0gW107XG5cdGlmIChjLmxlbmd0aCA+IDApIHJldC5wdXNoKGMpO1xuXHRpZiAodGhpcy5saW5lTnVtYmVyICE9PSBudWxsICYmIHRoaXMubGluZU51bWJlciAhPT0gdW5kZWZpbmVkKSByZXQucHVzaChcImxcIit0aGlzLmxpbmVOdW1iZXIpO1xuXHRpZiAodGhpcy5tZWFzdXJlTnVtYmVyICE9PSBudWxsICYmIHRoaXMubWVhc3VyZU51bWJlciAhPT0gdW5kZWZpbmVkKSByZXQucHVzaChcIm1cIit0aGlzLm1lYXN1cmVOdW1iZXIpO1xuXHRpZiAodGhpcy52b2ljZU51bWJlciAhPT0gbnVsbCAmJiB0aGlzLnZvaWNlTnVtYmVyICE9PSB1bmRlZmluZWQpIHJldC5wdXNoKFwidlwiK3RoaXMudm9pY2VOdW1iZXIpO1xuXHRpZiAoKGMuaW5kZXhPZignbm90ZScpID49IDAgfHwgYy5pbmRleE9mKCdyZXN0JykgPj0gMCB8fCBjLmluZGV4T2YoJ2x5cmljJykgPj0gMCApICYmIHRoaXMubm90ZU51bWJlciAhPT0gbnVsbCAmJiB0aGlzLm5vdGVOdW1iZXIgIT09IHVuZGVmaW5lZCkgcmV0LnB1c2goXCJuXCIrdGhpcy5ub3RlTnVtYmVyKTtcblx0Ly8gYWRkIGEgcHJlZml4IHRvIGFsbCBjbGFzc2VzIHRoYXQgYWJjanMgYWRkcy5cblx0aWYgKHJldC5sZW5ndGggPiAwKSB7XG5cdFx0cmV0ID0gcmV0LmpvaW4oJyAnKTsgLy8gU29tZSBzdHJpbmdzIGFyZSBjb21wb3VuZCBjbGFzc2VzIC0gdGhhdCBpcywgc3BlY2lmeSBtb3JlIHRoYW4gb25lIGNsYXNzIGluIGEgc3RyaW5nLlxuXHRcdHJldCA9IHJldC5zcGxpdCgnICcpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAocmV0W2ldLmluZGV4T2YoJ2FiY2pzLScpICE9PSAwICYmIHJldFtpXS5sZW5ndGggPiAwKSAvLyBpZiB0aGUgcHJlZml4IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBhbmQgdGhlIGNsYXNzIGlzIG5vdCBibGFuay5cblx0XHRcdFx0cmV0W2ldID0gJ2FiY2pzLScgKyByZXRbaV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXQuam9pbignICcpO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmdldEZvbnRBbmRBdHRyID0gZnVuY3Rpb24odHlwZSwga2xhc3MpIHtcblx0dmFyIGZvbnQ7XG5cdGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcblx0XHRmb250ID0gdGhpcy5hYmN0dW5lLmZvcm1hdHRpbmdbdHlwZV07XG5cdFx0Ly8gUmFwaGFlbCBkZWxpYmVyYXRlbHkgY2hhbmdlcyB0aGUgZm9udCB1bml0cyB0byBwaXhlbHMgZm9yIHNvbWUgcmVhc29uLCBzbyB3ZSBuZWVkIHRvIGNoYW5nZSBwb2ludHMgdG8gcGl4ZWxzIGhlcmUuXG5cdFx0aWYgKGZvbnQpXG5cdFx0XHRmb250ID0ge2ZhY2U6IGZvbnQuZmFjZSwgc2l6ZTogZm9udC5zaXplICogNCAvIDMsIGRlY29yYXRpb246IGZvbnQuZGVjb3JhdGlvbiwgc3R5bGU6IGZvbnQuc3R5bGUsIHdlaWdodDogZm9udC53ZWlnaHQsIGJveDogZm9udC5ib3h9O1xuXHRcdGVsc2Vcblx0XHRcdGZvbnQgPSB7ZmFjZTogXCJBcmlhbFwiLCBzaXplOiAxMiAqIDQgLyAzLCBkZWNvcmF0aW9uOiBcInVuZGVybGluZVwiLCBzdHlsZTogXCJub3JtYWxcIiwgd2VpZ2h0OiBcIm5vcm1hbFwifTtcblx0fSBlbHNlXG5cdFx0Zm9udCA9IHtmYWNlOiB0eXBlLmZhY2UsIHNpemU6IHR5cGUuc2l6ZSAqIDQgLyAzLCBkZWNvcmF0aW9uOiB0eXBlLmRlY29yYXRpb24sIHN0eWxlOiB0eXBlLnN0eWxlLCB3ZWlnaHQ6IHR5cGUud2VpZ2h0LCBib3g6IHR5cGUuYm94fTtcblxuXHR2YXIgYXR0ciA9IHtcImZvbnQtc2l6ZVwiOiBmb250LnNpemUsICdmb250LXN0eWxlJzogZm9udC5zdHlsZSxcblx0XHRcImZvbnQtZmFtaWx5XCI6IGZvbnQuZmFjZSwgJ2ZvbnQtd2VpZ2h0JzogZm9udC53ZWlnaHQsICd0ZXh0LWRlY29yYXRpb24nOiBmb250LmRlY29yYXRpb24sXG5cdFx0J2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKGtsYXNzKSB9O1xuXHRhdHRyLmZvbnQgPSBcIlwiO1x0Ly8gVGhlcmUgaXMgYSBzcHVyaW91cyBmb250IGRlZmluaXRpb24gdGhhdCBpcyBwdXQgb24gYWxsIHRleHQgZWxlbWVudHMuIFRoaXMgb3ZlcndyaXRlcyBpdC5cblx0cmV0dXJuIHsgZm9udDogZm9udCwgYXR0cjogYXR0ciB9O1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmdldFRleHRTaXplID0gZnVuY3Rpb24odGV4dCwgdHlwZSwga2xhc3MsIGVsKSB7XG5cdHZhciBoYXNoID0gdGhpcy5nZXRGb250QW5kQXR0cih0eXBlLCBrbGFzcyk7XG5cdHZhciBzaXplID0gdGhpcy5wYXBlci5nZXRUZXh0U2l6ZSh0ZXh0LCBoYXNoLmF0dHIsIGVsKTtcblx0aWYgKGhhc2guZm9udC5ib3gpIHtcblx0XHRzaXplLmhlaWdodCArPSA4O1xuXHRcdHNpemUud2lkdGggKz0gODtcblx0fVxuXHRyZXR1cm4gc2l6ZTtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXJUZXh0ID0gZnVuY3Rpb24oeCwgeSwgdGV4dCwgdHlwZSwga2xhc3MsIGFuY2hvciwgY2VudGVyVmVydGljYWxseSkge1xuXHR2YXIgaGFzaCA9IHRoaXMuZ2V0Rm9udEFuZEF0dHIodHlwZSwga2xhc3MpO1xuXHRpZiAoYW5jaG9yKVxuXHRcdGhhc2guYXR0cltcInRleHQtYW5jaG9yXCJdID0gYW5jaG9yO1xuXHRoYXNoLmF0dHIueCA9IHg7XG5cdGhhc2guYXR0ci55ID0geSArIDc7IC8vIFRPRE8tUEVSOiBOb3Qgc3VyZSB3aHkgdGhlIHRleHQgYXBwZWFycyB0byBiZSA3IHBpeGVscyBvZmYuXG5cdGlmICghY2VudGVyVmVydGljYWxseSlcblx0XHRoYXNoLmF0dHIuZHkgPSBcIjAuNWVtXCI7XG5cdGlmICh0eXBlID09PSAnZGVidWdmb250Jykge1xuXHRcdGNvbnNvbGUubG9nKFwiRGVidWcgbXNnOiBcIiArIHRleHQpO1xuXHRcdGhhc2guYXR0ci5zdHJva2UgPSBcIiNmZjAwMDBcIjtcblx0fVxuXG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcblxcbi9nLCBcIlxcbiBcXG5cIik7XG5cdHRleHQgPSB0ZXh0LnJlcGxhY2UoL15cXG4vLCBcIlxceEEwXFxuXCIpO1xuXG5cdGlmIChoYXNoLmZvbnQuYm94KSB7XG5cdFx0aGFzaC5hdHRyLnggKz0gMjtcblx0XHRoYXNoLmF0dHIueSArPSA0O1xuXHR9XG5cdHZhciBlbCA9IHRoaXMucGFwZXIudGV4dCh0ZXh0LCBoYXNoLmF0dHIpO1xuXG5cdGlmIChoYXNoLmZvbnQuYm94KSB7XG5cdFx0dmFyIHNpemUgPSB0aGlzLmdldFRleHRTaXplKHRleHQsIHR5cGUsIGtsYXNzKTtcblx0XHR2YXIgcGFkZGluZyA9IDI7XG5cdFx0dmFyIG1hcmdpbiA9IDI7XG5cdFx0dGhpcy5wYXBlci5yZWN0KHsgeDogeCAtIHBhZGRpbmcsIHk6IHksIHdpZHRoOiBzaXplLndpZHRoICsgcGFkZGluZyoyLCBoZWlnaHQ6IHNpemUuaGVpZ2h0ICsgcGFkZGluZyoyIC0gbWFyZ2luLCAgc3Ryb2tlOiBcIiM4ODg4ODhcIiwgZmlsbDogXCJ0cmFuc3BhcmVudFwifSk7XG5cdFx0Ly9zaXplLmhlaWdodCArPSA4O1xuXHR9XG5cdGlmICh0aGlzLmRvUmVncmVzc2lvbikgdGhpcy5hZGRUb1JlZ3Jlc3Npb24oZWwpO1xuXHRyZXR1cm4gZWw7XG59O1xuXG5SZW5kZXJlci5wcm90b3R5cGUubW92ZVkgPSBmdW5jdGlvbiAoZW0sIG51bUxpbmVzKSB7XG5cdGlmIChudW1MaW5lcyA9PT0gdW5kZWZpbmVkKSBudW1MaW5lcyA9IDE7XG5cdHRoaXMueSArPSBlbSpudW1MaW5lcztcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5za2lwU3BhY2VZID0gZnVuY3Rpb24gKCkge1xuXHR0aGlzLnkgKz0gdGhpcy5zcGFjZTtcbn07XG5cbi8vIENhbGwgd2l0aCAna2luZCcgYmVpbmcgdGhlIGZvbnQgdHlwZSB0byB1c2UsXG4vLyBpZiBtYXJnaW5Cb3R0b20gPT09IG51bGwgdGhlbiBkb24ndCBpbmNyZW1lbnQgdGhlIFkgYWZ0ZXIgcHJpbnRpbmcsIG90aGVyd2lzZSB0aGF0IGlzIHRoZSBleHRyYSBudW1iZXIgb2YgZW0ncyB0byBsZWF2ZSBiZWxvdyB0aGUgbGluZS5cbi8vIGFuZCBhbGlnbm1lbnQgYmVpbmcgXCJzdGFydFwiLCBcIm1pZGRsZVwiLCBvciBcImVuZFwiLlxuUmVuZGVyZXIucHJvdG90eXBlLm91dHB1dFRleHRJZiA9IGZ1bmN0aW9uKHgsIHN0ciwga2luZCwga2xhc3MsIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLCBhbGlnbm1lbnQpIHtcblx0aWYgKHN0cikge1xuXHRcdGlmIChtYXJnaW5Ub3ApXG5cdFx0XHR0aGlzLm1vdmVZKG1hcmdpblRvcCk7XG5cdFx0dmFyIGVsID0gdGhpcy5yZW5kZXJUZXh0KHgsIHRoaXMueSwgc3RyLCBraW5kLCBrbGFzcywgYWxpZ25tZW50KTtcblx0XHR2YXIgYmIgPSB0aGlzLmdldFRleHRTaXplKHN0ciwga2luZCwga2xhc3MpO1xuXHRcdHZhciB3aWR0aCA9IGlzTmFOKGJiLndpZHRoKSA/IDAgOiBiYi53aWR0aDtcblx0XHR2YXIgaGVpZ2h0ID0gaXNOYU4oYmIuaGVpZ2h0KSA/IDAgOiBiYi5oZWlnaHQ7XG5cdFx0dmFyIGhhc2ggPSB0aGlzLmdldEZvbnRBbmRBdHRyKGtpbmQsIGtsYXNzKTtcblx0XHRpZiAoaGFzaC5mb250LmJveCkge1xuXHRcdFx0d2lkdGggKz0gODtcblx0XHRcdGhlaWdodCArPSA4O1xuXHRcdH1cblx0XHRpZiAobWFyZ2luQm90dG9tICE9PSBudWxsKSB7XG5cdFx0XHR2YXIgbnVtTGluZXMgPSBzdHIuc3BsaXQoXCJcXG5cIikubGVuZ3RoO1xuXHRcdFx0aWYgKCFpc05hTihiYi5oZWlnaHQpKVxuXHRcdFx0XHR0aGlzLm1vdmVZKGhlaWdodC9udW1MaW5lcywgKG51bUxpbmVzICsgbWFyZ2luQm90dG9tKSk7XG5cdFx0fVxuXHRcdHJldHVybiBbd2lkdGgsIGhlaWdodF07XG5cdH1cblx0cmV0dXJuIFswLDBdO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLmFkZEludmlzaWJsZU1hcmtlciA9IGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcblx0dmFyIGR5ID0gMC4zNTtcblx0dmFyIGZpbGwgPSBcInJnYmEoMCwwLDAsMClcIjtcblx0dmFyIHkgPSB0aGlzLnk7XG5cdHkgPSBNYXRoLnJvdW5kKHkpO1xuXHR2YXIgeDEgPSAwO1xuXHR2YXIgeDIgPSAxMDA7XG5cdHZhciBwYXRoU3RyaW5nID0gc3ByaW50ZihcIk0gJWYgJWYgTCAlZiAlZiBMICVmICVmIEwgJWYgJWYgelwiLCB4MSwgeS1keSwgeDEreDIsIHktZHksXG5cdFx0eDIsIHkrZHksIHgxLCB5K2R5KTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpcIm5vbmVcIiwgZmlsbDpmaWxsLCBcImZpbGwtb3BhY2l0eVwiOiAwLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoY2xhc3NOYW1lKSwgJ2RhdGEtdmVydGljYWwnOiB5IH0pO1xufTtcblxuUmVuZGVyZXIucHJvdG90eXBlLnByaW50U2VwYXJhdG9yID0gZnVuY3Rpb24od2lkdGgpIHtcblx0dmFyIGZpbGwgPSBcInJnYmEoMCwwLDAsMjU1KVwiO1xuXHR2YXIgc3Ryb2tlID0gXCJyZ2JhKDAsMCwwLDApXCI7XG5cdHZhciB5ID0gTWF0aC5yb3VuZCh0aGlzLnkpO1xuXHR2YXIgc3RhZmZXaWR0aCA9IHRoaXMuY29udHJvbGxlci53aWR0aDtcblx0dmFyIHgxID0gKHN0YWZmV2lkdGggLSB3aWR0aCkvMjtcblx0dmFyIHgyID0geDEgKyB3aWR0aDtcblx0dmFyIHBhdGhTdHJpbmcgPSAnTSAnICsgeDEgKyAnICcgKyB5ICtcblx0XHQnIEwgJyArIHgyICsgJyAnICsgeSArXG5cdFx0JyBMICcgKyB4MiArICcgJyArICh5KzEpICtcblx0XHQnIEwgJyArIHgxICsgJyAnICsgKHkrMSkgK1xuXHRcdCcgTCAnICsgeDEgKyAnICcgKyB5ICsgJyB6Jztcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOnBhdGhTdHJpbmcsIHN0cm9rZTpzdHJva2UsIGZpbGw6ZmlsbCwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKCdkZWZpbmVkLXRleHQnKX0pO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZywgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBrbm93IHdoZXJlIHlvdSBhcmUgdmVydGljYWxseS5cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludEhvcml6b250YWxMaW5lID0gZnVuY3Rpb24gKHdpZHRoLCB2ZXJ0aWNhbCwgY29tbWVudCkge1xuXHR2YXIgZHkgPSAwLjM1O1xuXHR2YXIgZmlsbCA9IFwicmdiYSgwLDAsMjU1LC40KVwiO1xuXHR2YXIgeSA9IHRoaXMueTtcblx0aWYgKHZlcnRpY2FsKSB5ID0gdmVydGljYWw7XG5cdHkgPSBNYXRoLnJvdW5kKHkpO1xuXHR0aGlzLnBhcGVyLnRleHQoXCJcIitNYXRoLnJvdW5kKHkpLCB7eDogMTAsIHk6IHksIFwidGV4dC1hbmNob3JcIjogXCJzdGFydFwiLCBcImZvbnQtc2l6ZVwiOlwiMThweFwiLCBmaWxsOiBmaWxsLCBzdHJva2U6IGZpbGwgfSk7XG5cdHZhciB4MSA9IDUwO1xuXHR2YXIgeDIgPSB3aWR0aDtcblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmIEwgJWYgJWYgTCAlZiAlZiB6XCIsIHgxLCB5LWR5LCB4MSt4MiwgeS1keSxcblx0XHR4MiwgeStkeSwgeDEsIHkrZHkpO1xuXHR0aGlzLnBhcGVyLnBhdGhUb0JhY2soe3BhdGg6cGF0aFN0cmluZywgc3Ryb2tlOlwibm9uZVwiLCBmaWxsOmZpbGwsICdjbGFzcyc6IHRoaXMuYWRkQ2xhc3Nlcygnc3RhZmYnKX0pO1xuXHRmb3IgKHZhciBpID0gMTsgaSA8IHdpZHRoLzEwMDsgaSsrKSB7XG5cdFx0cGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWYgTCAlZiAlZiBMICVmICVmIHpcIiwgaSoxMDAtZHksIHktNSwgaSoxMDAtZHksIHkrNSxcblx0XHRcdGkqMTAwK2R5LCB5LTUsIGkqMTAwK2R5LCB5KzUpO1xuXHRcdHRoaXMucGFwZXIucGF0aFRvQmFjayh7cGF0aDpwYXRoU3RyaW5nLCBzdHJva2U6XCJub25lXCIsIGZpbGw6ZmlsbCwgJ2NsYXNzJzogdGhpcy5hZGRDbGFzc2VzKCdzdGFmZicpfSk7XG5cdH1cblx0aWYgKGNvbW1lbnQpXG5cdFx0dGhpcy5wYXBlci50ZXh0KGNvbW1lbnQsIHt4OiB3aWR0aCs3MCwgeTogeSwgXCJ0ZXh0LWFuY2hvclwiOiBcInN0YXJ0XCIsIFwiZm9udC1zaXplXCI6XCIxOHB4XCIsIGZpbGw6IGZpbGwsIHN0cm9rZTogZmlsbCB9KTtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFNoYWRlZEJveCA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3BhY2l0eSwgY29tbWVudCkge1xuXHR2YXIgYm94ID0gdGhpcy5wYXBlci5yZWN0KHsgeDogeCwgeTogeSwgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCwgZmlsbDogY29sb3IsIHN0cm9rZTogY29sb3IsIFwiZmlsbC1vcGFjaXR5XCI6IG9wYWNpdHksIFwic3Ryb2tlLW9wYWNpdHlcIjogb3BhY2l0eSB9KTtcblx0aWYgKGNvbW1lbnQpXG5cdFx0dGhpcy5wYXBlci50ZXh0KGNvbW1lbnQsIHt4OiAwLCB5OiB5KzcsIFwidGV4dC1hbmNob3JcIjogXCJzdGFydFwiLCBcImZvbnQtc2l6ZVwiOlwiMTRweFwiLCBmaWxsOiBcInJnYmEoMCwwLDI1NSwuNClcIiwgc3Ryb2tlOiBcInJnYmEoMCwwLDI1NSwuNClcIiB9KTtcblx0cmV0dXJuIGJveDtcbn07XG5cblJlbmRlcmVyLnByb3RvdHlwZS5wcmludFZlcnRpY2FsTGluZSA9IGZ1bmN0aW9uICh4LCB5MSwgeTIpIHtcblx0dmFyIGR5ID0gMC4zNTtcblx0dmFyIGZpbGwgPSBcIiMwMGFhYWFcIjtcblx0dmFyIHBhdGhTdHJpbmcgPSBzcHJpbnRmKFwiTSAlZiAlZiBMICVmICVmIEwgJWYgJWYgTCAlZiAlZiB6XCIsIHggLSBkeSwgeTEsIHggLSBkeSwgeTIsXG5cdFx0XHR4ICsgZHksIHkxLCB4ICsgZHksIHkyKTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOiBwYXRoU3RyaW5nLCBzdHJva2U6IFwibm9uZVwiLCBmaWxsOiBmaWxsLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoJ3N0YWZmJyl9KTtcblx0cGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWYgTCAlZiAlZiBMICVmICVmIHpcIiwgeCAtIDIwLCB5MSwgeCAtIDIwLCB5MSszLFxuXHRcdHgsIHkxLCB4LCB5MSszKTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOiBwYXRoU3RyaW5nLCBzdHJva2U6IFwibm9uZVwiLCBmaWxsOiBmaWxsLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoJ3N0YWZmJyl9KTtcblx0cGF0aFN0cmluZyA9IHNwcmludGYoXCJNICVmICVmIEwgJWYgJWYgTCAlZiAlZiBMICVmICVmIHpcIiwgeCArIDIwLCB5MiwgeCArIDIwLCB5MiszLFxuXHRcdHgsIHkyLCB4LCB5MiszKTtcblx0dGhpcy5wYXBlci5wYXRoVG9CYWNrKHtwYXRoOiBwYXRoU3RyaW5nLCBzdHJva2U6IFwibm9uZVwiLCBmaWxsOiBmaWxsLCAnY2xhc3MnOiB0aGlzLmFkZENsYXNzZXMoJ3N0YWZmJyl9KTtcblxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5SZW5kZXJlci5wcm90b3R5cGUuYWRkVG9SZWdyZXNzaW9uID0gZnVuY3Rpb24gKGVsKSB7XG5cdHZhciBib3g7XG5cdHRyeSB7XG5cdFx0Ym94ID0gZWwuZ2V0QkJveCgpO1xuXHR9IGNhdGNoKGUpIHtcblx0XHRib3ggPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcblx0fVxuXHQvL3ZhciBzdHIgPSBcIihcIitib3gueCtcIixcIitib3gueStcIilbXCIrYm94LndpZHRoK1wiLFwiK2JveC5oZWlnaHQrXCJdIFwiXG5cdHZhciBzdHIgPSBlbC50eXBlICsgJyAnICsgYm94LnRvU3RyaW5nKCkgKyAnICc7XG5cdHZhciBhdHRycyA9IFtdO1xuXHRmb3IgKHZhciBrZXkgaW4gZWwuYXR0cnMpIHtcblx0XHRpZiAoZWwuYXR0cnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0aWYgKGtleSA9PT0gJ2NsYXNzJylcblx0XHRcdFx0c3RyID0gZWwuYXR0cnNba2V5XSArIFwiIFwiICsgc3RyO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRhdHRycy5wdXNoKGtleStcIjogXCIrZWwuYXR0cnNba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGF0dHJzLnNvcnQoKTtcblx0c3RyICs9IFwieyBcIiArYXR0cnMuam9pbihcIiBcIikgKyBcIiB9XCI7XG5cdHRoaXMucmVncmVzc2lvbkxpbmVzLnB1c2goc3RyKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVuZGVyZXI7XG4iLCIvLyAgICBhYmNfZW5ncmF2ZXJfY29udHJvbGxlci5qczogQ29udHJvbHMgdGhlIGVuZ3JhdmluZyBwcm9jZXNzIG9mIGFuIEFCQ0pTIGFic3RyYWN0IHN5bnRheCB0cmVlIGFzIHByb2R1Y2VkIGJ5IEFCQ0pTL3BhcnNlXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cblxuLypnbG9iYWwgTWF0aCAqL1xuXG52YXIgc3BhY2luZyA9IHJlcXVpcmUoJy4vYWJjX3NwYWNpbmcnKTtcbnZhciBBYnN0cmFjdEVuZ3JhdmVyID0gcmVxdWlyZSgnLi9hYmNfYWJzdHJhY3RfZW5ncmF2ZXInKTtcbnZhciBSZW5kZXJlciA9IHJlcXVpcmUoJy4vYWJjX3JlbmRlcmVyJyk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBDb250cm9scyB0aGUgZW5ncmF2aW5nIHByb2Nlc3MsIGZyb20gQUJDSlMgQWJzdHJhY3QgU3ludGF4IFRyZWUgKEFCQ0pTIEFTVCkgdG8gcmVuZGVyZWQgc2NvcmUgc2hlZXRcbiAqXG4gKiBDYWxsIGVuZ3JhdmVBQkMgdG8gcnVuIHRoZSBwcm9jZXNzLiBUaGlzIGNyZWF0ZXMgYSBncmFwaGVsZW1zIEFCQ0pTIEFic3RyYWN0IEVuZ3JhdmluZyBTdHJ1Y3R1cmUgKEFCQ0pTIEFFUykgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGlzLnN0YWZmZ3JvdXBzXG4gKiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIGZpcnN0IGxhaWQgb3V0IChnaXZpbmcgdGhlIGdyYXBoZWxlbXMgeCBhbmQgeSBjb29yZGluYXRlcykgYW5kIHRoZW4gZHJhd24gb250byB0aGUgcmVuZGVyZXJcbiAqIGVhY2ggQUJDSlMgQUVTIHJlcHJlc2VudHMgYSBzaW5nbGUgc3RhZmZncm91cCAtIGFsbCBlbGVtZW50cyB0aGF0IGFyZSBub3QgaW4gYSBzdGFmZmdyb3VwIGFyZSByZW5kZXJlZCBkaXJlY3RseSBieSB0aGUgY29udHJvbGxlclxuICpcbiAqIGVsZW1lbnRzIGluIEFCQ0pTIEFFUyBrbm93IHRoZWlyIFwic291cmNlIGRhdGFcIiBpbiB0aGUgQUJDSlMgQVNULCBhbmQgdGhlaXIgXCJ0YXJnZXQgc2hhcGVcIlxuICogaW4gdGhlIHJlbmRlcmVyIGZvciBoaWdobGlnaHRpbmcgcHVycG9zZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcGFwZXIgZGl2IGVsZW1lbnQgdGhhdCB3aWxsIHdyYXAgdGhlIFNWR1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBhbGwgdGhlIHBhcmFtcyAtLSBkb2N1bWVudGVkIG9uIGdpdGh1YiAvL1RPRE8tR0QgbW92ZSBzb21lIG9mIHRoYXQgZG9jdW1lbnRhdGlvbiBoZXJlXG4gKi9cbnZhciBFbmdyYXZlckNvbnRyb2xsZXIgPSBmdW5jdGlvbihwYXBlciwgcGFyYW1zKSB7XG4gIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTtcbiAgdGhpcy5yZXNwb25zaXZlID0gcGFyYW1zLnJlc3BvbnNpdmU7XG4gIHRoaXMuc3BhY2UgPSAzKnNwYWNpbmcuU1BBQ0U7XG4gIHRoaXMuc2NhbGUgPSBwYXJhbXMuc2NhbGUgPyBwYXJzZUZsb2F0KHBhcmFtcy5zY2FsZSkgOiAwO1xuICBpZiAoISh0aGlzLnNjYWxlID4gMC4xKSlcbiAgXHR0aGlzLnNjYWxlID0gdW5kZWZpbmVkO1xuXG5cdGlmIChwYXJhbXMuc3RhZmZ3aWR0aCkge1xuXHRcdC8vIE5vdGU6IE5vcm1hbGx5IGFsbCBtZWFzdXJlbWVudHMgdG8gdGhlIGVuZ3JhdmVyIGFyZSBpbiBQT0lOVFMuIEhvd2V2ZXIsIGlmIGEgcGVyc29uIGlzIGZvcm1hdHRpbmcgZm9yIHRoZVxuXHRcdC8vIHNjcmVlbiBhbmQgZGlyZWN0bHkgaW5wdXR0aW5nIHRoZSB3aWR0aCwgdGhlbiBpdCBpcyBtb3JlIGxvZ2ljYWwgdG8gaGF2ZSB0aGUgbWVhc3VyZW1lbnQgaW4gcGl4ZWxzLlxuXHRcdHRoaXMuc3RhZmZ3aWR0aFNjcmVlbiA9IHBhcmFtcy5zdGFmZndpZHRoO1xuXHRcdHRoaXMuc3RhZmZ3aWR0aFByaW50ID0gcGFyYW1zLnN0YWZmd2lkdGg7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zdGFmZndpZHRoU2NyZWVuID0gNzQwOyAvLyBUT0RPLVBFUjogTm90IHN1cmUgd2hlcmUgdGhpcyBudW1iZXIgY29tZXMgZnJvbSwgYnV0IHRoaXMgaXMgaG93IGl0J3MgYWx3YXlzIGJlZW4uXG5cdFx0dGhpcy5zdGFmZndpZHRoUHJpbnQgPSA2ODA7IC8vIFRoZSBudW1iZXIgb2YgcGl4ZWxzIGluIDguNVwiLCBhZnRlciAxY20gb2YgbWFyZ2luIGhhcyBiZWVuIHJlbW92ZWQuXG5cdH1cbiAgdGhpcy5lZGl0YWJsZSA9IHBhcmFtcy5lZGl0YWJsZSB8fCBmYWxzZTtcblx0dGhpcy5saXN0ZW5lcnMgPSBbXTtcblx0aWYgKHBhcmFtcy5jbGlja0xpc3RlbmVyKVxuXHRcdHRoaXMuYWRkU2VsZWN0TGlzdGVuZXIocGFyYW1zLmNsaWNrTGlzdGVuZXIpO1xuXG4gIHRoaXMucmVuZGVyZXI9bmV3IFJlbmRlcmVyKHBhcGVyLCBwYXJhbXMucmVncmVzc2lvbiwgcGFyYW1zLmFkZF9jbGFzc2VzKTtcblx0dGhpcy5yZW5kZXJlci5zZXRQYWRkaW5nT3ZlcnJpZGUocGFyYW1zKTtcbiAgdGhpcy5yZW5kZXJlci5jb250cm9sbGVyID0gdGhpczsgLy8gVE9ETy1HRCBuZWVkZWQgZm9yIGhpZ2hsaWdodGluZ1xuXG5cdHRoaXMucmVzZXQoKTtcbn07XG5cbkVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5zZWxlY3RlZCA9IFtdO1xuXHR0aGlzLmluZ3JvdXAgPSBmYWxzZTtcblx0dGhpcy5zdGFmZmdyb3VwcyA9IFtdO1xuXHR0aGlzLmxhc3RTdGFmZkdyb3VwSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuZW5ncmF2ZXIpXG5cdFx0dGhpcy5lbmdyYXZlci5yZXNldCgpO1xuXHR0aGlzLmVuZ3JhdmVyID0gbnVsbDtcblx0dGhpcy5yZW5kZXJlci5yZXNldCgpO1xufTtcblxuLyoqXG4gKiBydW4gdGhlIGVuZ3JhdmluZyBwcm9jZXNzXG4gKiBAcGFyYW0ge0FCQ0pTLlR1bmV8QUJDSlMuVHVuZVtdfSBhYmN0dW5lc1xuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLmVuZ3JhdmVBQkMgPSBmdW5jdGlvbihhYmN0dW5lcywgdHVuZU51bWJlcikge1xuICBpZiAoYWJjdHVuZXNbMF09PT11bmRlZmluZWQpIHtcbiAgICBhYmN0dW5lcyA9IFthYmN0dW5lc107XG4gIH1cblx0dGhpcy5yZXNldCgpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWJjdHVuZXMubGVuZ3RoOyBpKyspIHtcbiAgXHRpZiAodHVuZU51bWJlciA9PT0gdW5kZWZpbmVkKVxuICBcdFx0dHVuZU51bWJlciA9IGk7XG4gICAgdGhpcy5lbmdyYXZlVHVuZShhYmN0dW5lc1tpXSwgdHVuZU51bWJlcik7XG4gIH1cblx0aWYgKHRoaXMucmVuZGVyZXIuZG9SZWdyZXNzaW9uKVxuXHRcdHJldHVybiB0aGlzLnJlbmRlcmVyLnJlZ3Jlc3Npb25MaW5lcy5qb2luKFwiXFxuXCIpO1xufTtcblxuLyoqXG4gKiBTb21lIG9mIHRoZSBpdGVtcyBvbiB0aGUgcGFnZSBhcmUgbm90IHNjYWxlZCwgc28gYWRqdXN0IHRoZW0gaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiBvZiBzY2FsaW5nIHRvIGNhbmNlbCBvdXQgdGhlIHNjYWxpbmcuXG4gKiBAcGFyYW0ge2Zsb2F0fSBzY2FsZVxuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLmFkanVzdE5vblNjYWxlZEl0ZW1zID0gZnVuY3Rpb24gKHNjYWxlKSB7XG5cdHRoaXMud2lkdGggLz0gc2NhbGU7XG5cdHRoaXMucmVuZGVyZXIuYWRqdXN0Tm9uU2NhbGVkSXRlbXMoc2NhbGUpO1xufTtcblxuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5nZXRNZWFzdXJlV2lkdGhzID0gZnVuY3Rpb24oYWJjVHVuZSkge1xuXHR0aGlzLnJlc2V0KCk7XG5cblx0dGhpcy5yZW5kZXJlci5saW5lTnVtYmVyID0gbnVsbDtcblxuXHR0aGlzLnJlbmRlcmVyLm5ld1R1bmUoYWJjVHVuZSk7XG5cdHRoaXMuZW5ncmF2ZXIgPSBuZXcgQWJzdHJhY3RFbmdyYXZlcih0aGlzLnJlbmRlcmVyLCAwLCB7IGJhZ3BpcGVzOiBhYmNUdW5lLmZvcm1hdHRpbmcuYmFncGlwZXMsIGZsYXRiZWFtczogYWJjVHVuZS5mb3JtYXR0aW5nLmZsYXRiZWFtcyB9KTtcblx0dGhpcy5lbmdyYXZlci5zZXRTdGVtSGVpZ2h0KHRoaXMucmVuZGVyZXIuc3BhY2luZy5zdGVtSGVpZ2h0KTtcblx0aWYgKGFiY1R1bmUuZm9ybWF0dGluZy5zdGFmZndpZHRoKSB7XG5cdFx0dGhpcy53aWR0aCA9IGFiY1R1bmUuZm9ybWF0dGluZy5zdGFmZndpZHRoICogMS4zMzsgLy8gVGhlIHdpZHRoIGlzIGV4cHJlc3NlZCBpbiBwdDsgY29udmVydCB0byBweC5cblx0fSBlbHNlIHtcblx0XHR0aGlzLndpZHRoID0gdGhpcy5yZW5kZXJlci5pc1ByaW50ID8gdGhpcy5zdGFmZndpZHRoUHJpbnQgOiB0aGlzLnN0YWZmd2lkdGhTY3JlZW47XG5cdH1cblxuXHR2YXIgc2NhbGUgPSBhYmNUdW5lLmZvcm1hdHRpbmcuc2NhbGUgPyBhYmNUdW5lLmZvcm1hdHRpbmcuc2NhbGUgOiB0aGlzLnNjYWxlO1xuXHRpZiAodGhpcy5yZXNwb25zaXZlID09PSBcInJlc2l6ZVwiKSAvLyBUaGUgcmVzaXppbmcgd2lsbCBtZXNzIHdpdGggdGhlIHNjYWxpbmcsIHNvIGp1c3QgZG9uJ3QgZG8gaXQgZXhwbGljaXRseS5cblx0XHRzY2FsZSA9IHVuZGVmaW5lZDtcblx0aWYgKHNjYWxlID09PSB1bmRlZmluZWQpIHNjYWxlID0gdGhpcy5yZW5kZXJlci5pc1ByaW50ID8gMC43NSA6IDE7XG5cdHRoaXMuYWRqdXN0Tm9uU2NhbGVkSXRlbXMoc2NhbGUpO1xuXG5cdHZhciByZXQgPSB7IGxlZnQ6IDAsIG1lYXN1cmVXaWR0aHM6IFtdLCBoZWlnaHQ6IDAsIHRvdGFsOiAwIH07XG5cdC8vIFRPRE8tUEVSOiBuZWVkIHRvIGFkZCB0aGUgaGVpZ2h0IG9mIHRoZSB0aXRsZSBibG9jaywgdG9vLlxuXHRyZXQuaGVpZ2h0ID0gdGhpcy5yZW5kZXJlci5wYWRkaW5nLnRvcCArIHRoaXMucmVuZGVyZXIuc3BhY2luZy5tdXNpYyArIHRoaXMucmVuZGVyZXIucGFkZGluZy5ib3R0b20gKyAyNDsgLy8gdGhlIDI0IGlzIHRoZSBlbXBpcmljYWwgdmFsdWUgYWRkZWQgdG8gdGhlIGJvdHRvbSBvZiBhbGwgdHVuZXMuXG5cdHZhciBkZWJ1ZyA9IGZhbHNlO1xuXHR2YXIgaGFzUHJpbnRlZFRlbXBvID0gZmFsc2U7XG5cdGZvcih2YXIgaT0wOyBpPGFiY1R1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgYWJjTGluZSA9IGFiY1R1bmUubGluZXNbaV07XG5cdFx0aWYgKGFiY0xpbmUuc3RhZmYpIHtcblx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cCA9IHRoaXMuZW5ncmF2ZXIuY3JlYXRlQUJDTGluZShhYmNMaW5lLnN0YWZmLCAhaGFzUHJpbnRlZFRlbXBvID8gYWJjVHVuZS5tZXRhVGV4dC50ZW1wbzogbnVsbCk7XG5cblx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cC5sYXlvdXQoMCwgdGhpcy5yZW5kZXJlciwgZGVidWcpO1xuXHRcdFx0Ly8gQXQgdGhpcyBwb2ludCwgdGhlIHZvaWNlcyBhcmUgbGFpZCBvdXQgc28gdGhhdCB0aGUgYmFyIGxpbmVzIGFyZSBldmVuIHdpdGggZWFjaCBvdGhlci4gU28gd2UganVzdCBuZWVkIHRvIGdldCB0aGUgcGxhY2VtZW50IG9mIHRoZSBmaXJzdCB2b2ljZS5cblx0XHRcdGlmIChhYmNMaW5lLnN0YWZmR3JvdXAudm9pY2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0dmFyIHZvaWNlID0gYWJjTGluZS5zdGFmZkdyb3VwLnZvaWNlc1swXTtcblx0XHRcdFx0dmFyIGZvdW5kTm90U3RhZmZFeHRyYSA9IGZhbHNlO1xuXHRcdFx0XHR2YXIgbGFzdFhQb3NpdGlvbiA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgdm9pY2UuY2hpbGRyZW4ubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0XHR2YXIgY2hpbGQgPSB2b2ljZS5jaGlsZHJlbltrXTtcblx0XHRcdFx0XHRpZiAoIWZvdW5kTm90U3RhZmZFeHRyYSAmJiAhY2hpbGQuaXNDbGVmICYmICFjaGlsZC5pc0tleVNpZykge1xuXHRcdFx0XHRcdFx0Zm91bmROb3RTdGFmZkV4dHJhID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHJldC5sZWZ0ID0gY2hpbGQueDtcblx0XHRcdFx0XHRcdGxhc3RYUG9zaXRpb24gPSBjaGlsZC54O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2hpbGQudHlwZSA9PT0gJ2JhcicpIHtcblx0XHRcdFx0XHRcdHJldC5tZWFzdXJlV2lkdGhzLnB1c2goY2hpbGQueCAtIGxhc3RYUG9zaXRpb24pO1xuXHRcdFx0XHRcdFx0cmV0LnRvdGFsICs9IChjaGlsZC54IC0gbGFzdFhQb3NpdGlvbik7XG5cdFx0XHRcdFx0XHRsYXN0WFBvc2l0aW9uID0gY2hpbGQueDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGhhc1ByaW50ZWRUZW1wbyA9IHRydWU7XG5cdFx0XHRyZXQuaGVpZ2h0ICs9IGFiY0xpbmUuc3RhZmZHcm91cC5jYWxjSGVpZ2h0KCkgKiBzcGFjaW5nLlNURVA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIFJ1biB0aGUgZW5ncmF2aW5nIHByb2Nlc3Mgb24gYSBzaW5nbGUgdHVuZVxuICogQHBhcmFtIHtBQkNKUy5UdW5lfSBhYmN0dW5lXG4gKi9cbkVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUuZW5ncmF2ZVR1bmUgPSBmdW5jdGlvbiAoYWJjdHVuZSwgdHVuZU51bWJlcikge1xuXHR0aGlzLnJlbmRlcmVyLmxpbmVOdW1iZXIgPSBudWxsO1xuXG5cdHRoaXMucmVuZGVyZXIubmV3VHVuZShhYmN0dW5lKTtcblx0dGhpcy5lbmdyYXZlciA9IG5ldyBBYnN0cmFjdEVuZ3JhdmVyKHRoaXMucmVuZGVyZXIsIHR1bmVOdW1iZXIsIHsgYmFncGlwZXM6IGFiY3R1bmUuZm9ybWF0dGluZy5iYWdwaXBlcywgZmxhdGJlYW1zOiBhYmN0dW5lLmZvcm1hdHRpbmcuZmxhdGJlYW1zIH0pO1xuXHR0aGlzLmVuZ3JhdmVyLnNldFN0ZW1IZWlnaHQodGhpcy5yZW5kZXJlci5zcGFjaW5nLnN0ZW1IZWlnaHQpO1xuXHR0aGlzLmVuZ3JhdmVyLm1lYXN1cmVMZW5ndGggPSBhYmN0dW5lLmdldE1ldGVyRnJhY3Rpb24oKS5udW0vYWJjdHVuZS5nZXRNZXRlckZyYWN0aW9uKCkuZGVuO1xuXHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nLnN0YWZmd2lkdGgpIHtcblx0XHR0aGlzLndpZHRoID0gYWJjdHVuZS5mb3JtYXR0aW5nLnN0YWZmd2lkdGggKiAxLjMzOyAvLyBUaGUgd2lkdGggaXMgZXhwcmVzc2VkIGluIHB0OyBjb252ZXJ0IHRvIHB4LlxuXHR9IGVsc2Uge1xuXHRcdHRoaXMud2lkdGggPSB0aGlzLnJlbmRlcmVyLmlzUHJpbnQgPyB0aGlzLnN0YWZmd2lkdGhQcmludCA6IHRoaXMuc3RhZmZ3aWR0aFNjcmVlbjtcblx0fVxuXG5cdHZhciBzY2FsZSA9IGFiY3R1bmUuZm9ybWF0dGluZy5zY2FsZSA/IGFiY3R1bmUuZm9ybWF0dGluZy5zY2FsZSA6IHRoaXMuc2NhbGU7XG5cdGlmICh0aGlzLnJlc3BvbnNpdmUgPT09IFwicmVzaXplXCIpIC8vIFRoZSByZXNpemluZyB3aWxsIG1lc3Mgd2l0aCB0aGUgc2NhbGluZywgc28ganVzdCBkb24ndCBkbyBpdCBleHBsaWNpdGx5LlxuXHRcdHNjYWxlID0gdW5kZWZpbmVkO1xuXHRpZiAoc2NhbGUgPT09IHVuZGVmaW5lZCkgc2NhbGUgPSB0aGlzLnJlbmRlcmVyLmlzUHJpbnQgPyAwLjc1IDogMTtcblx0dGhpcy5hZGp1c3ROb25TY2FsZWRJdGVtcyhzY2FsZSk7XG5cblx0Ly8gR2VuZXJhdGUgdGhlIHJhdyBzdGFmZiBsaW5lIGRhdGFcblx0dmFyIGk7XG5cdHZhciBhYmNMaW5lO1xuXHR2YXIgaGFzUHJpbnRlZFRlbXBvID0gZmFsc2U7XG5cdGZvcihpPTA7IGk8YWJjdHVuZS5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdGFiY0xpbmUgPSBhYmN0dW5lLmxpbmVzW2ldO1xuXHRcdGlmIChhYmNMaW5lLnN0YWZmKSB7XG5cdFx0XHRhYmNMaW5lLnN0YWZmR3JvdXAgPSB0aGlzLmVuZ3JhdmVyLmNyZWF0ZUFCQ0xpbmUoYWJjTGluZS5zdGFmZiwgIWhhc1ByaW50ZWRUZW1wbyA/IGFiY3R1bmUubWV0YVRleHQudGVtcG86IG51bGwpO1xuXHRcdFx0aGFzUHJpbnRlZFRlbXBvID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvLyBBZGp1c3QgdGhlIHgtY29vcmRpbmF0ZXMgdG8gdGhlaXIgYWJzb2x1dGUgcG9zaXRpb25zXG5cdHZhciBtYXhXaWR0aCA9IHRoaXMud2lkdGg7XG5cdGZvcihpPTA7IGk8YWJjdHVuZS5saW5lcy5sZW5ndGg7IGkrKykge1xuXHRcdGFiY0xpbmUgPSBhYmN0dW5lLmxpbmVzW2ldO1xuXHRcdGlmIChhYmNMaW5lLnN0YWZmKSB7XG5cdFx0XHR0aGlzLnNldFhTcGFjaW5nKGFiY0xpbmUuc3RhZmZHcm91cCwgYWJjdHVuZS5mb3JtYXR0aW5nLCBpID09PSBhYmN0dW5lLmxpbmVzLmxlbmd0aCAtIDEsIGZhbHNlKTtcblx0XHRcdGlmIChhYmNMaW5lLnN0YWZmR3JvdXAudyA+IG1heFdpZHRoKSBtYXhXaWR0aCA9IGFiY0xpbmUuc3RhZmZHcm91cC53O1xuXHRcdH1cblx0fVxuXG5cdC8vIExheW91dCB0aGUgYmVhbXMgYW5kIGFkZCB0aGUgc3RlbXMgdG8gdGhlIGJlYW1lZCBub3Rlcy5cblx0Zm9yKGk9MDsgaTxhYmN0dW5lLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0YWJjTGluZSA9IGFiY3R1bmUubGluZXNbaV07XG5cdFx0aWYgKGFiY0xpbmUuc3RhZmZHcm91cCAmJiBhYmNMaW5lLnN0YWZmR3JvdXAudm9pY2VzKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGFiY0xpbmUuc3RhZmZHcm91cC52b2ljZXMubGVuZ3RoOyBqKyspXG5cdFx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cC52b2ljZXNbal0ubGF5b3V0QmVhbXMoKTtcblx0XHRcdGFiY0xpbmUuc3RhZmZHcm91cC5zZXRVcHBlckFuZExvd2VyRWxlbWVudHModGhpcy5yZW5kZXJlcik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBzdGFmZiBzcGFjaW5nXG5cdC8vIFRPRE8tUEVSOiB3ZSBzaG91bGQgaGF2ZSBiZWVuIGFibGUgdG8gZG8gdGhpcyBieSB0aGUgdGltZSB3ZSBjYWxsZWQgc2V0VXBwZXJBbmRMb3dlckVsZW1lbnRzLCBidXQgZm9yIHNvbWUgcmVhc29uIHRoZSBcImJvdHRvbVwiIGVsZW1lbnQgc2VlbXMgdG8gYmUgc2V0IGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGUgWCBzcGFjaW5nLlxuXHRmb3IoaT0wOyBpPGFiY3R1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRhYmNMaW5lID0gYWJjdHVuZS5saW5lc1tpXTtcblx0XHRpZiAoYWJjTGluZS5zdGFmZkdyb3VwKSB7XG5cdFx0XHRhYmNMaW5lLnN0YWZmR3JvdXAuaGVpZ2h0ID0gYWJjTGluZS5zdGFmZkdyb3VwLmNhbGNIZWlnaHQoKTtcblx0XHR9XG5cdH1cblxuXHQvLyBEbyBhbGwgdGhlIHdyaXRpbmcgdG8gb3V0cHV0XG5cdHRoaXMucmVuZGVyZXIudG9wTWFyZ2luKGFiY3R1bmUpO1xuXHQvL3RoaXMucmVuZGVyZXIucHJpbnRIb3Jpem9udGFsTGluZSh0aGlzLndpZHRoICsgdGhpcy5yZW5kZXJlci5wYWRkaW5nLmxlZnQgKyB0aGlzLnJlbmRlcmVyLnBhZGRpbmcucmlnaHQpO1xuXHR0aGlzLnJlbmRlcmVyLmVuZ3JhdmVUb3BUZXh0KHRoaXMud2lkdGgsIGFiY3R1bmUpO1xuXHR0aGlzLnJlbmRlcmVyLmFkZE11c2ljUGFkZGluZygpO1xuXG5cdHRoaXMuc3RhZmZncm91cHMgPSBbXTtcblx0dGhpcy5sYXN0U3RhZmZHcm91cEluZGV4ID0gLTE7XG5cdGZvciAodmFyIGxpbmUgPSAwOyBsaW5lIDwgYWJjdHVuZS5saW5lcy5sZW5ndGg7IGxpbmUrKykge1xuXHRcdHRoaXMucmVuZGVyZXIubGluZU51bWJlciA9IGxpbmU7XG5cdFx0YWJjTGluZSA9IGFiY3R1bmUubGluZXNbbGluZV07XG5cdFx0aWYgKGFiY0xpbmUuc3RhZmYpIHtcblx0XHRcdHRoaXMuZW5ncmF2ZVN0YWZmTGluZShhYmNMaW5lLnN0YWZmR3JvdXApO1xuXHRcdH0gZWxzZSBpZiAoYWJjTGluZS5zdWJ0aXRsZSAmJiBsaW5lICE9PSAwKSB7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLm91dHB1dFN1YnRpdGxlKHRoaXMud2lkdGgsIGFiY0xpbmUuc3VidGl0bGUpO1xuXHRcdH0gZWxzZSBpZiAoYWJjTGluZS50ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMucmVuZGVyZXIub3V0cHV0RnJlZVRleHQoYWJjTGluZS50ZXh0LCBhYmNMaW5lLnZza2lwKTtcblx0XHR9IGVsc2UgaWYgKGFiY0xpbmUuc2VwYXJhdG9yICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMucmVuZGVyZXIub3V0cHV0U2VwYXJhdG9yKGFiY0xpbmUuc2VwYXJhdG9yKTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlbmRlcmVyLm1vdmVZKDI0KTsgLy8gVE9ETy1QRVI6IEVtcGlyaWNhbGx5IGRpc2NvdmVyZWQuIFdoYXQgdmFyaWFibGUgc2hvdWxkIHRoaXMgYmU/XG5cdHRoaXMucmVuZGVyZXIuZW5ncmF2ZUV4dHJhVGV4dCh0aGlzLndpZHRoLCBhYmN0dW5lKTtcblx0dGhpcy5yZW5kZXJlci5zZXRQYXBlclNpemUobWF4V2lkdGgsIHNjYWxlLCB0aGlzLnJlc3BvbnNpdmUpO1xufTtcblxuZnVuY3Rpb24gY2FsY0hvcml6b250YWxTcGFjaW5nKGlzTGFzdExpbmUsIHN0cmV0Y2hMYXN0LCB0YXJnZXRXaWR0aCwgbGluZVdpZHRoLCBzcGFjaW5nLCBzcGFjaW5nVW5pdHMsIG1pblNwYWNlKSB7XG5cdC8vIFRPRE8tUEVSOiBUaGlzIHVzZWQgdG8gc3RyZXRjaCB0aGUgZmlyc3QgbGluZSB3aGVuIGl0IGlzIHRoZSBvbmx5IGxpbmUsIGJ1dCBJJ20gbm90IHN1cmUgd2h5LiBhYmNtMnBzIGRvZXNuJ3QgZG8gdGhhdFxuXHRpZiAoaXNMYXN0TGluZSAmJiBsaW5lV2lkdGggLyB0YXJnZXRXaWR0aCA8IDAuNjYgJiYgIXN0cmV0Y2hMYXN0KSByZXR1cm4gbnVsbDsgLy8gZG9uJ3Qgc3RyZXRjaCBsYXN0IGxpbmUgdG9vIG11Y2hcblx0aWYgKE1hdGguYWJzKHRhcmdldFdpZHRoLWxpbmVXaWR0aCkgPCAyKSByZXR1cm4gbnVsbDsgLy8gaWYgd2UgYXJlIGFscmVhZHkgbmVhciB0aGUgdGFyZ2V0IHdpZHRoLCB3ZSdyZSBkb25lLlxuXHR2YXIgcmVsU3BhY2UgPSBzcGFjaW5nVW5pdHMgKiBzcGFjaW5nO1xuXHR2YXIgY29uc3RTcGFjZSA9IGxpbmVXaWR0aCAtIHJlbFNwYWNlO1xuXHRpZiAoc3BhY2luZ1VuaXRzID4gMCkge1xuXHRcdHNwYWNpbmcgPSAodGFyZ2V0V2lkdGggLSBjb25zdFNwYWNlKSAvIHNwYWNpbmdVbml0cztcblx0XHRpZiAoc3BhY2luZyAqIG1pblNwYWNlID4gNTApIHtcblx0XHRcdHNwYWNpbmcgPSA1MCAvIG1pblNwYWNlO1xuXHRcdH1cblx0XHRyZXR1cm4gc3BhY2luZztcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEbyB0aGUgeC1heGlzIHBvc2l0aW9uaW5nIGZvciBhIHNpbmdsZSBsaW5lIChhIGdyb3VwIG9mIHJlbGF0ZWQgc3RhZmZzKVxuICogQHBhcmFtIHtBQkNKUy5UdW5lfSBhYmN0dW5lIGFuIEFCQ0pTIEFTVFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWZmR3JvdXAgYW4gc3RhZmZHcm91cFxuICogQHBhcmFtIHtPYmplY3R9IGZvcm1hdHRpbmcgYW4gZm9ybWF0dGluZ1xuICogQHBhcmFtIHtib29sZWFufSBpc0xhc3RMaW5lIGlzIHRoaXMgdGhlIGxhc3QgbGluZSB0byBiZSBwcmludGVkP1xuICogQHByaXZhdGVcbiAqL1xuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5zZXRYU3BhY2luZyA9IGZ1bmN0aW9uIChzdGFmZkdyb3VwLCBmb3JtYXR0aW5nLCBpc0xhc3RMaW5lLCBkZWJ1Zykge1xuICAgdmFyIG5ld3NwYWNlID0gdGhpcy5zcGFjZTtcbiAgZm9yICh2YXIgaXQgPSAwOyBpdCA8IDg7IGl0KyspIHsgLy8gVE9ETy1QRVI6IHNob3VsZG4ndCBuZWVkIG11bHRpcGxlIHBhc3NlcywgYnV0IGVhY2ggcGFzcyBnZXRzIGl0IGNsb3NlciB0byB0aGUgcmlnaHQgc3BhY2luZy4gKE9ubHkgYWZmZWN0cyBsb25nIGxpbmVzOiBub3JtYWwgbGluZXMgYnJlYWsgb3V0IG9mIHRoaXMgbG9vcCBxdWlja2x5Lilcblx0ICB2YXIgcmV0ID0gc3RhZmZHcm91cC5sYXlvdXQobmV3c3BhY2UsIHRoaXMucmVuZGVyZXIsIGRlYnVnKTtcblx0ICB2YXIgc3RyZXRjaExhc3QgPSBmb3JtYXR0aW5nLnN0cmV0Y2hsYXN0ID8gZm9ybWF0dGluZy5zdHJldGNobGFzdCA6IGZhbHNlO1xuXHRcdG5ld3NwYWNlID0gY2FsY0hvcml6b250YWxTcGFjaW5nKGlzTGFzdExpbmUsIHN0cmV0Y2hMYXN0LCB0aGlzLndpZHRoK3RoaXMucmVuZGVyZXIucGFkZGluZy5sZWZ0LCBzdGFmZkdyb3VwLncsIG5ld3NwYWNlLCByZXQuc3BhY2luZ1VuaXRzLCByZXQubWluU3BhY2UpO1xuXHRcdGlmIChkZWJ1Zylcblx0XHRcdGNvbnNvbGUubG9nKFwic2V0WFNwYWNlXCIsIGl0LCBzdGFmZkdyb3VwLncsIG5ld3NwYWNlLCBzdGFmZkdyb3VwLm1pbnNwYWNlKTtcblx0XHRpZiAobmV3c3BhY2UgPT09IG51bGwpIGJyZWFrO1xuICB9XG5cdGNlbnRlcldob2xlUmVzdHMoc3RhZmZHcm91cC52b2ljZXMpO1xuXHQvL3RoaXMucmVuZGVyZXIucHJpbnRIb3Jpem9udGFsTGluZSh0aGlzLndpZHRoKTtcbn07XG5cbi8qKlxuICogRW5ncmF2ZSBhIHNpbmdsZSBsaW5lIChhIGdyb3VwIG9mIHJlbGF0ZWQgc3RhZmZzKVxuICogQHBhcmFtIHtBQkNKUy5UdW5lfSBhYmN0dW5lIGFuIEFCQ0pTIEFTVFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWZmR3JvdXAgYW4gc3RhZmZHcm91cFxuICogQHByaXZhdGVcbiAqL1xuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5lbmdyYXZlU3RhZmZMaW5lID0gZnVuY3Rpb24gKHN0YWZmR3JvdXApIHtcblx0aWYgKHRoaXMubGFzdFN0YWZmR3JvdXBJbmRleCA+IC0xKVxuXHRcdHRoaXMucmVuZGVyZXIuYWRkU3RhZmZQYWRkaW5nKHRoaXMuc3RhZmZncm91cHNbdGhpcy5sYXN0U3RhZmZHcm91cEluZGV4XSwgc3RhZmZHcm91cCk7XG5cdHRoaXMucmVuZGVyZXIudm9pY2VOdW1iZXIgPSBudWxsO1xuXHRzdGFmZkdyb3VwLmRyYXcodGhpcy5yZW5kZXJlcik7XG5cdHZhciBoZWlnaHQgPSBzdGFmZkdyb3VwLmhlaWdodCAqIHNwYWNpbmcuU1RFUDtcblx0Ly90aGlzLnJlbmRlcmVyLnByaW50VmVydGljYWxMaW5lKHRoaXMud2lkdGgrdGhpcy5yZW5kZXJlci5wYWRkaW5nLmxlZnQsIHRoaXMucmVuZGVyZXIueSwgdGhpcy5yZW5kZXJlci55K2hlaWdodCk7XG4gIHRoaXMuc3RhZmZncm91cHNbdGhpcy5zdGFmZmdyb3Vwcy5sZW5ndGhdID0gc3RhZmZHcm91cDtcblx0dGhpcy5sYXN0U3RhZmZHcm91cEluZGV4ID0gdGhpcy5zdGFmZmdyb3Vwcy5sZW5ndGgtMTtcblx0dGhpcy5yZW5kZXJlci55ICs9IGhlaWdodDtcbn07XG5cbi8qKlxuICogQ2FsbGVkIGJ5IHRoZSBBYnN0cmFjdCBFbmdyYXZpbmcgU3RydWN0dXJlIG9yIGFueSBvdGhlciAoZS5nLiBtaWRpIHBsYXliYWNrKSB0byBzYXkgaXQgd2FzIHNlbGVjdGVkIChub3RlaGVhZCBjbGlja2VkIG9uKVxuICogQHByb3RlY3RlZFxuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLm5vdGlmeVNlbGVjdCA9IGZ1bmN0aW9uIChhYnNlbGVtLCB0dW5lTnVtYmVyLCBjbGFzc2VzKSB7XG4gIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgaWYgKGFic2VsZW0uaGlnaGxpZ2h0KSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFthYnNlbGVtXTtcbiAgICBhYnNlbGVtLmhpZ2hsaWdodCgpO1xuICB9XG4gIHZhciBhYmNlbGVtID0gYWJzZWxlbS5hYmNlbGVtIHx8IHt9O1xuICBmb3IgKHZhciBpPTA7IGk8dGhpcy5saXN0ZW5lcnMubGVuZ3RoO2krKykge1xuXHQgIHRoaXMubGlzdGVuZXJzW2ldKGFiY2VsZW0sIHR1bmVOdW1iZXIsIGNsYXNzZXMpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCBieSB0aGUgQWJzdHJhY3QgRW5ncmF2aW5nIFN0cnVjdHVyZSB0byBzYXkgaXQgd2FzIG1vZGlmaWVkIChlLmcuIG5vdGVoZWFkIGRyYWdnZWQpXG4gKiBAcHJvdGVjdGVkXG4gKi9cbi8vIEVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUubm90aWZ5Q2hhbmdlID0gZnVuY3Rpb24gKC8qYWJzZWxlbSovKSB7XG4vLyAgIGZvciAodmFyIGk9MDsgaTx0aGlzLmxpc3RlbmVycy5sZW5ndGg7aSsrKSB7XG4vLyAgICAgaWYgKHRoaXMubGlzdGVuZXJzW2ldLm1vZGVsQ2hhbmdlZClcbi8vICAgICAgIHRoaXMubGlzdGVuZXJzW2ldLm1vZGVsQ2hhbmdlZCgpO1xuLy8gICB9XG4vLyB9O1xuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5FbmdyYXZlckNvbnRyb2xsZXIucHJvdG90eXBlLmNsZWFyU2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpPTA7aTx0aGlzLnNlbGVjdGVkLmxlbmd0aDtpKyspIHtcbiAgICB0aGlzLnNlbGVjdGVkW2ldLnVuaGlnaGxpZ2h0KCk7XG4gIH1cbiAgdGhpcy5zZWxlY3RlZCA9IFtdO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge09iamVjdH0gbGlzdGVuZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyLm1vZGVsQ2hhbmdlZCB0aGUgbW9kZWwgdGhlIGxpc3RlbmVyIHBhc3NlZCB0byB0aGlzIGNvbnRyb2xsZXIgaGFzIGNoYW5nZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyLmhpZ2hsaWdodCB0aGUgYWJjZWxlbSBvZiB0aGUgbW9kZWwgdGhlIGxpc3RlbmVyIHBhc3NlZCB0byB0aGlzIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGhpZ2hsaWdodGVkXG4gKi9cbkVuZ3JhdmVyQ29udHJvbGxlci5wcm90b3R5cGUuYWRkU2VsZWN0TGlzdGVuZXIgPSBmdW5jdGlvbiAoY2xpY2tMaXN0ZW5lcikge1xuICB0aGlzLmxpc3RlbmVyc1t0aGlzLmxpc3RlbmVycy5sZW5ndGhdID0gY2xpY2tMaXN0ZW5lcjtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgY29udHJvbGxlciB0byBoaWdobGlnaHQgc29tZSBub3RlaGVhZHMgb2YgaXRzIGVuZ3JhdmVkIHNjb3JlXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgdGhlIGNoYXJhY3RlciBpbiB0aGUgc291cmNlIGFiYyB3aGVyZSBoaWdobGlnaHRpbmcgc2hvdWxkIHN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIHNvdXJjZSBhYmMgd2hlcmUgaGlnaGxpZ2h0aW5nIHNob3VsZCBlbmRcbiAqL1xuRW5ncmF2ZXJDb250cm9sbGVyLnByb3RvdHlwZS5yYW5nZUhpZ2hsaWdodCA9IGZ1bmN0aW9uKHN0YXJ0LGVuZClcbntcbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgZm9yICh2YXIgbGluZT0wO2xpbmU8dGhpcy5zdGFmZmdyb3Vwcy5sZW5ndGg7IGxpbmUrKykge1xuXHR2YXIgdm9pY2VzID0gdGhpcy5zdGFmZmdyb3Vwc1tsaW5lXS52b2ljZXM7XG5cdGZvciAodmFyIHZvaWNlPTA7dm9pY2U8dm9pY2VzLmxlbmd0aDt2b2ljZSsrKSB7XG5cdCAgICB2YXIgZWxlbXMgPSB2b2ljZXNbdm9pY2VdLmNoaWxkcmVuO1xuXHQgICAgZm9yICh2YXIgZWxlbT0wOyBlbGVtPGVsZW1zLmxlbmd0aDsgZWxlbSsrKSB7XG5cdFx0Ly8gU2luY2UgdGhlIHVzZXIgY2FuIGhpZ2hsaWdodCBtb3JlIHRoYW4gYW4gZWxlbWVudCwgb3IgcGFydCBvZiBhbiBlbGVtZW50LCBhIGhpdCBpcyBpZiBhbnkgb2YgdGhlIGVuZHBvaW50c1xuXHRcdC8vIGlzIGluc2lkZSB0aGUgb3RoZXIgcmFuZ2UuXG5cdFx0dmFyIGVsU3RhcnQgPSBlbGVtc1tlbGVtXS5hYmNlbGVtLnN0YXJ0Q2hhcjtcblx0XHR2YXIgZWxFbmQgPSBlbGVtc1tlbGVtXS5hYmNlbGVtLmVuZENoYXI7XG5cdFx0aWYgKChlbmQ+ZWxTdGFydCAmJiBzdGFydDxlbEVuZCkgfHwgKChlbmQ9PT1zdGFydCkgJiYgZW5kPT09ZWxFbmQpKSB7XG5cdFx0ICAgIC8vXHRcdGlmIChlbGVtc1tlbGVtXS5hYmNlbGVtLnN0YXJ0Q2hhcj49c3RhcnQgJiYgZWxlbXNbZWxlbV0uYWJjZWxlbS5lbmRDaGFyPD1lbmQpIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aF09ZWxlbXNbZWxlbV07XG5cdFx0ICAgIGVsZW1zW2VsZW1dLmhpZ2hsaWdodCgpO1xuXHRcdH1cblx0ICAgIH1cblx0fVxuICAgIH1cbn07XG5cblxuZnVuY3Rpb24gY2VudGVyV2hvbGVSZXN0cyh2b2ljZXMpIHtcblx0Ly8gd2hvbGUgcmVzdHMgYXJlIGEgc3BlY2lhbCBjYXNlOiBpZiB0aGV5IGFyZSBieSB0aGVtc2VsdmVzIGluIGEgbWVhc3VyZSwgdGhlbiB0aGV5IHNob3VsZCBiZSBjZW50ZXJlZC5cblx0Ly8gKElmIHRoZXkgYXJlIG5vdCBieSB0aGVtc2VsdmVzLCB0aGF0IGlzIHByb2JhYmx5IGEgdXNlciBlcnJvciwgYnV0IHdlJ2xsIGp1c3QgY2VudGVyIGl0IGJldHdlZW4gdGhlIHR3byBpdGVtcyB0byBlaXRoZXIgc2lkZSBvZiBpdC4pXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdm9pY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHZvaWNlID0gdm9pY2VzW2ldO1xuXHRcdC8vIExvb2sgdGhyb3VnaCBhbGwgb2YgdGhlIGVsZW1lbnRzIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGFuZCBsYXN0LiBJZiB0aGUgd2hvbGUgbm90ZSBhcHBlYXJzIHRoZXJlIHRoZW4gdGhlcmUgaXNuJ3QgYW55dGhpbmcgdG8gY2VudGVyIGl0IGJldHdlZW4gYW55d2F5LlxuXHRcdGZvciAodmFyIGogPSAxOyBqIDwgdm9pY2UuY2hpbGRyZW4ubGVuZ3RoLTE7IGorKykge1xuXHRcdFx0dmFyIGFic0VsZW0gPSB2b2ljZS5jaGlsZHJlbltqXTtcblx0XHRcdGlmIChhYnNFbGVtLmFiY2VsZW0ucmVzdCAmJiAoYWJzRWxlbS5hYmNlbGVtLnJlc3QudHlwZSA9PT0gJ3dob2xlJyB8fCBhYnNFbGVtLmFiY2VsZW0ucmVzdC50eXBlID09PSAnbXVsdGltZWFzdXJlJykpIHtcblx0XHRcdFx0dmFyIGJlZm9yZSA9IHZvaWNlLmNoaWxkcmVuW2otMV07XG5cdFx0XHRcdHZhciBhZnRlciA9IHZvaWNlLmNoaWxkcmVuW2orMV07XG5cdFx0XHRcdHZhciBtaWRwb2ludCA9IChhZnRlci54IC0gYmVmb3JlLngpIC8gMiArIGJlZm9yZS54O1xuXHRcdFx0XHRhYnNFbGVtLnggPSBtaWRwb2ludCAtIGFic0VsZW0udyAvIDI7XG5cdFx0XHRcdGZvciAodmFyIGsgPSAwOyBrIDwgYWJzRWxlbS5jaGlsZHJlbi5sZW5ndGg7IGsrKylcblx0XHRcdFx0XHRhYnNFbGVtLmNoaWxkcmVuW2tdLnggPSBhYnNFbGVtLng7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRW5ncmF2ZXJDb250cm9sbGVyO1xuIiwidmFyIHR1bmVib29rID0gcmVxdWlyZSgnLi9hYmNfdHVuZWJvb2snKTtcbnZhciBUdW5lID0gcmVxdWlyZSgnLi4vZGF0YS9hYmNfdHVuZScpO1xuXG52YXIgRW5ncmF2ZXJDb250cm9sbGVyID0gcmVxdWlyZSgnLi4vd3JpdGUvYWJjX2VuZ3JhdmVyX2NvbnRyb2xsZXInKTtcbnZhciBQYXJzZSA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19wYXJzZScpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuLi9wYXJzZS93cmFwX2xpbmVzJyk7XG5cbnZhciByZXNpemVEaXZzID0ge307XG5mdW5jdGlvbiByZXNpemVPdXRlcigpIHtcbiAgICB2YXIgd2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBmb3IgKHZhciBpZCBpbiByZXNpemVEaXZzKSB7XG4gICAgICAgIGlmIChyZXNpemVEaXZzLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgICAgICAgICAgdmFyIG91dGVyID0gcmVzaXplRGl2c1tpZF07XG4gICAgICAgICAgICB2YXIgb2ZzID0gb3V0ZXIub2Zmc2V0TGVmdDtcbiAgICAgICAgICAgIHdpZHRoIC09IG9mcyAqIDI7XG4gICAgICAgICAgICBvdXRlci5zdHlsZS53aWR0aCA9IHdpZHRoICsgXCJweFwiO1xuICAgICAgICB9XG4gICAgfVxufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCByZXNpemVPdXRlcik7XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm9yaWVudGF0aW9uQ2hhbmdlXCIsIHJlc2l6ZU91dGVyKTtcblxuZnVuY3Rpb24gcmVuZGVyT25lKGRpdiwgdHVuZSwgcGFyYW1zLCB0dW5lTnVtYmVyKSB7XG4gICAgaWYgKHBhcmFtcy52aWV3cG9ydEhvcml6b250YWwpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGlubmVyIGRpdiB0aGF0IGhvbGRzIHRoZSBtdXNpYywgc28gdGhhdCB0aGUgcGFzc2VkIGluIGRpdiB3aWxsIGJlIHRoZSB2aWV3cG9ydC5cbiAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiYWJjanMtaW5uZXJcIj48L2Rpdj4nO1xuICAgICAgICBpZiAocGFyYW1zLnNjcm9sbEhvcml6b250YWwpIHtcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvd1ggPSBcImF1dG9cIjtcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvd1kgPSBcImhpZGRlblwiO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHJlc2l6ZURpdnNbZGl2LmlkXSA9IGRpdjsgLy8gV2UgdXNlIGEgaGFzaCBvbiB0aGUgZWxlbWVudCdzIGlkIHNvIHRoYXQgbXVsdGlwbGUgY2FsbHMgd29uJ3Qga2VlcCBhZGRpbmcgdG8gdGhlIGxpc3QuXG4gICAgICAgIGRpdiA9IGRpdi5jaGlsZHJlblswXTsgLy8gVGhlIG11c2ljIHNob3VsZCBiZSByZW5kZXJlZCBpbiB0aGUgaW5uZXIgZGl2LlxuICAgIH1cbiAgICBlbHNlIGlmIChwYXJhbXMudmlld3BvcnRWZXJ0aWNhbCkge1xuICAgICAgICAvLyBDcmVhdGUgYW4gaW5uZXIgZGl2IHRoYXQgaG9sZHMgdGhlIG11c2ljLCBzbyB0aGF0IHRoZSBwYXNzZWQgaW4gZGl2IHdpbGwgYmUgdGhlIHZpZXdwb3J0LlxuICAgICAgICBkaXYuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJhYmNqcy1pbm5lciBzY3JvbGwtYW1vdW50XCI+PC9kaXY+JztcbiAgICAgICAgZGl2LnN0eWxlLm92ZXJmbG93WCA9IFwiaGlkZGVuXCI7XG4gICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvd1kgPSBcImF1dG9cIjtcbiAgICAgICAgZGl2ID0gZGl2LmNoaWxkcmVuWzBdOyAvLyBUaGUgbXVzaWMgc2hvdWxkIGJlIHJlbmRlcmVkIGluIHRoZSBpbm5lciBkaXYuXG4gICAgfVxuICAgIGVsc2Vcblx0ICAgIGRpdi5pbm5lckhUTUwgPSBcIlwiO1xuICAgIHZhciBlbmdyYXZlcl9jb250cm9sbGVyID0gbmV3IEVuZ3JhdmVyQ29udHJvbGxlcihkaXYsIHBhcmFtcyk7XG4gICAgZW5ncmF2ZXJfY29udHJvbGxlci5lbmdyYXZlQUJDKHR1bmUsIHR1bmVOdW1iZXIpO1xuICAgIHR1bmUuZW5ncmF2ZXIgPSBlbmdyYXZlcl9jb250cm9sbGVyO1xuICAgIGlmIChwYXJhbXMudmlld3BvcnRWZXJ0aWNhbCB8fCBwYXJhbXMudmlld3BvcnRIb3Jpem9udGFsKSB7XG4gICAgICAgIC8vIElmIHdlIGFkZGVkIGEgd3JhcHBlciBhcm91bmQgdGhlIGRpdiwgdGhlbiB3ZSBuZWVkIHRvIHNpemUgdGhlIHdyYXBwZXIsIHRvby5cbiAgICAgICAgdmFyIHBhcmVudCA9IGRpdi5wYXJlbnROb2RlO1xuICAgICAgICBwYXJlbnQuc3R5bGUud2lkdGggPSBkaXYuc3R5bGUud2lkdGg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJFYWNoTGluZVNlcGFyYXRlbHkoZGl2LCB0dW5lLCBwYXJhbXMsIHR1bmVOdW1iZXIpIHtcbiAgICBmdW5jdGlvbiBpbml0aWFsaXplVHVuZUxpbmUodHVuZSkge1xuICAgICAgICB2YXIgb2JqID0gbmV3IFR1bmUoKTtcbiAgICAgICAgb2JqLmZvcm1hdHRpbmcgPSB0dW5lLmZvcm1hdHRpbmc7XG4gICAgICAgIG9iai5tZWRpYSA9IHR1bmUubWVkaWE7XG4gICAgICAgIG9iai52ZXJzaW9uID0gdHVuZS52ZXJzaW9uO1xuICAgICAgICBvYmoubWV0YVRleHQgPSB7fTtcbiAgICAgICAgb2JqLmxpbmVzID0gW107XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8gQmVmb3JlIHJlbmRlcmluZywgY2hvcCB1cCB0aGUgcmV0dXJuZWQgdHVuZSBpbnRvIGFuIGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhIGxpbmUuXG4gICAgLy8gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IGdldHMgdGhlIHRpdGxlIGFuZCBvdGhlciBpdGVtcyB0aGF0IGdvIG9uIHRvcCwgdGhlIGxhc3QgZWxlbWVudFxuICAgIC8vIG9mIHRoZSBhcnJheSBnZXRzIHRoZSBleHRyYSB0ZXh0IHRoYXQgZ29lcyBvbiBib3R0b20uIEVhY2ggZWxlbWVudCBnZXRzIGFueSBub24tbXVzaWMgaW5mbyB0aGF0IGNvbWVzIGJlZm9yZSBpdC5cbiAgICB2YXIgdHVuZXMgPSBbXTtcbiAgICB2YXIgdHVuZUxpbmU7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0dW5lLmxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBsaW5lID0gdHVuZS5saW5lc1tpXTtcbiAgICAgICAgaWYgKCF0dW5lTGluZSlcbiAgICAgICAgICAgIHR1bmVMaW5lID0gaW5pdGlhbGl6ZVR1bmVMaW5lKHR1bmUpO1xuXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUaGVzZSBpdGVtcyBnbyBvbiB0b3Agb2YgdGhlIG11c2ljXG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC50ZW1wbyA9IHR1bmUubWV0YVRleHQudGVtcG87XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC50aXRsZSA9IHR1bmUubWV0YVRleHQudGl0bGU7XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC5oZWFkZXIgPSB0dW5lLm1ldGFUZXh0LmhlYWRlcjtcbiAgICAgICAgICAgIHR1bmVMaW5lLm1ldGFUZXh0LnJoeXRobSA9IHR1bmUubWV0YVRleHQucmh5dGhtO1xuICAgICAgICAgICAgdHVuZUxpbmUubWV0YVRleHQub3JpZ2luID0gdHVuZS5tZXRhVGV4dC5vcmlnaW47XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC5jb21wb3NlciA9IHR1bmUubWV0YVRleHQuY29tcG9zZXI7XG4gICAgICAgICAgICB0dW5lTGluZS5tZXRhVGV4dC5hdXRob3IgPSB0dW5lLm1ldGFUZXh0LmF1dGhvcjtcbiAgICAgICAgICAgIHR1bmVMaW5lLm1ldGFUZXh0LnBhcnRPcmRlciA9IHR1bmUubWV0YVRleHQucGFydE9yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHVzaCB0aGUgbGluZXMgdW50aWwgd2UgZ2V0IHRvIGEgbXVzaWMgbGluZVxuICAgICAgICB0dW5lTGluZS5saW5lcy5wdXNoKGxpbmUpO1xuICAgICAgICBpZiAobGluZS5zdGFmZikge1xuICAgICAgICAgICAgdHVuZXMucHVzaCh0dW5lTGluZSk7XG4gICAgICAgICAgICB0dW5lTGluZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGQgYW55IGV4dHJhIHN0dWZmIHRvIHRoZSBsYXN0IGxpbmUuXG4gICAgaWYgKHR1bmVMaW5lKSB7XG4gICAgICAgIHZhciBsYXN0TGluZSA9IHR1bmVzW3R1bmVzLmxlbmd0aC0xXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0dW5lTGluZS5saW5lcy5sZW5ndGg7IGorKylcbiAgICAgICAgICAgIGxhc3RMaW5lLmxpbmVzLnB1c2godHVuZUxpbmUubGluZXNbal0pO1xuICAgIH1cblxuICAgIC8vIFRoZXNlIGl0ZW1zIGdvIGJlbG93IHRoZSBtdXNpY1xuICAgIHR1bmVMaW5lID0gdHVuZXNbdHVuZXMubGVuZ3RoLTFdO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0LnVuYWxpZ25lZFdvcmRzID0gdHVuZS5tZXRhVGV4dC51bmFsaWduZWRXb3JkcztcbiAgICB0dW5lTGluZS5tZXRhVGV4dC5ib29rID0gdHVuZS5tZXRhVGV4dC5ib29rO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0LnNvdXJjZSA9IHR1bmUubWV0YVRleHQuc291cmNlO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0LmRpc2NvZ3JhcGh5ID0gdHVuZS5tZXRhVGV4dC5kaXNjb2dyYXBoeTtcbiAgICB0dW5lTGluZS5tZXRhVGV4dC5ub3RlcyA9IHR1bmUubWV0YVRleHQubm90ZXM7XG4gICAgdHVuZUxpbmUubWV0YVRleHQudHJhbnNjcmlwdGlvbiA9IHR1bmUubWV0YVRleHQudHJhbnNjcmlwdGlvbjtcbiAgICB0dW5lTGluZS5tZXRhVGV4dC5oaXN0b3J5ID0gdHVuZS5tZXRhVGV4dC5oaXN0b3J5O1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0WydhYmMtY29weXJpZ2h0J10gPSB0dW5lLm1ldGFUZXh0WydhYmMtY29weXJpZ2h0J107XG4gICAgdHVuZUxpbmUubWV0YVRleHRbJ2FiYy1jcmVhdG9yJ10gPSB0dW5lLm1ldGFUZXh0WydhYmMtY3JlYXRvciddO1xuICAgIHR1bmVMaW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J10gPSB0dW5lLm1ldGFUZXh0WydhYmMtZWRpdGVkLWJ5J107XG4gICAgdHVuZUxpbmUubWV0YVRleHQuZm9vdGVyID0gdHVuZS5tZXRhVGV4dC5mb290ZXI7XG5cbiAgICAvLyBOb3cgY3JlYXRlIHN1Yi1kaXZzIGFuZCByZW5kZXIgZWFjaCBsaW5lLiBOZWVkIHRvIGNvcHkgdGhlIHBhcmFtcyB0byBjaGFuZ2UgdGhlIHBhZGRpbmcgZm9yIHRoZSBpbnRlcmlvciBzbGljZXMuXG4gICAgdmFyIGVwID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHBhcmFtcykge1xuICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGVwW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgb3JpZ1BhZGRpbmdUb3AgPSBlcC5wYWRkaW5ndG9wO1xuICAgIHZhciBvcmlnUGFkZGluZ0JvdHRvbSA9IGVwLnBhZGRpbmdib3R0b207XG4gICAgZGl2LmlubmVySFRNTCA9IFwiXCI7XG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCB0dW5lcy5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgbGluZUVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKGxpbmVFbCk7XG5cbiAgICAgICAgaWYgKGsgPT09IDApIHtcblx0ICAgICAgICBlcC5wYWRkaW5ndG9wID0gb3JpZ1BhZGRpbmdUb3A7XG5cdCAgICAgICAgZXAucGFkZGluZ2JvdHRvbSA9IC0yMDtcbiAgICAgICAgfSBlbHNlIGlmIChrID09PSB0dW5lcy5sZW5ndGgtMSkge1xuXHQgICAgICAgIGVwLnBhZGRpbmd0b3AgPSAxMDtcblx0ICAgICAgICBlcC5wYWRkaW5nYm90dG9tID0gb3JpZ1BhZGRpbmdCb3R0b207XG4gICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZXAucGFkZGluZ3RvcCA9IDEwO1xuXHQgICAgICAgIGVwLnBhZGRpbmdib3R0b20gPSAtMjA7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyT25lKGxpbmVFbCwgdHVuZXNba10sIGVwLCB0dW5lTnVtYmVyKTtcbiAgICAgICAgaWYgKGsgPT09IDApXG4gICAgICAgICAgICB0dW5lLmVuZ3JhdmVyID0gdHVuZXNba10uZW5ncmF2ZXI7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0dW5lLmVuZ3JhdmVyLnN0YWZmZ3JvdXBzKVxuICAgICAgICAgICAgICAgIHR1bmUuZW5ncmF2ZXIuc3RhZmZncm91cHMgPSB0dW5lc1trXS5lbmdyYXZlci5zdGFmZmdyb3VwcztcbiAgICAgICAgICAgIGVsc2UgaWYgKHR1bmVzW2tdLmVuZ3JhdmVyLnN0YWZmZ3JvdXBzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgdHVuZS5lbmdyYXZlci5zdGFmZmdyb3Vwcy5wdXNoKHR1bmVzW2tdLmVuZ3JhdmVyLnN0YWZmZ3JvdXBzWzBdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gQSBxdWljayB3YXkgdG8gcmVuZGVyIGEgdHVuZSBmcm9tIGphdmFzY3JpcHQgd2hlbiBpbnRlcmFjdGl2aXR5IGlzIG5vdCByZXF1aXJlZC5cbi8vIFRoaXMgaXMgdXNlZCB3aGVuIGEgamF2YXNjcmlwdCByb3V0aW5lIGhhcyBzb21lIGFiYyB0ZXh0IHRoYXQgaXQgd2FudHMgdG8gcmVuZGVyXG4vLyBpbiBhIGRpdiBvciBjb2xsZWN0aW9uIG9mIGRpdnMuIE9uZSB0dW5lIG9yIG1hbnkgY2FuIGJlIHJlbmRlcmVkLlxuLy9cbi8vIHBhcmFtZXRlcnM6XG4vLyAgICAgIG91dHB1dDogYW4gYXJyYXkgb2YgZGl2cyB0aGF0IHRoZSBpbmRpdmlkdWFsIHR1bmVzIGFyZSByZW5kZXJlZCB0by5cbi8vICAgICAgICAgIElmIHRoZSBudW1iZXIgb2YgdHVuZXMgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGRpdnMgaW4gdGhlIGFycmF5LCB0aGVuXG4vLyAgICAgICAgICBvbmx5IHRoZSBmaXJzdCB0dW5lcyBhcmUgcmVuZGVyZWQuIElmIHRoZSBudW1iZXIgb2YgZGl2cyBleGNlZWRzIHRoZSBudW1iZXJcbi8vICAgICAgICAgIG9mIHR1bmVzLCB0aGVuIHRoZSB1bnVzZWQgZGl2cyBhcmUgY2xlYXJlZC4gVGhlIGRpdnMgY2FuIGJlIHBhc3NlZCBhcyBlaXRoZXJcbi8vICAgICAgICAgIGVsZW1lbnRzIG9yIHN0cmluZ3Mgb2YgaWRzLiBJZiBpZHMgYXJlIHBhc3NlZCwgdGhlbiB0aGUgZGl2IE1VU1QgZXhpc3QgYWxyZWFkeS5cbi8vICAgICAgICAgIChpZiBhIHNpbmdsZSBlbGVtZW50IGlzIHBhc3NlZCwgdGhlbiBpdCBpcyBhbiBpbXBsaWVkIGFycmF5IG9mIGxlbmd0aCBvbmUuKVxuLy8gICAgICAgICAgKGlmIGEgbnVsbCBpcyBwYXNzZWQgZm9yIGFuIGVsZW1lbnQsIG9yIHRoZSBlbGVtZW50IGRvZXNuJ3QgZXhpc3QsIHRoZW4gdGhhdCB0dW5lIGlzIHNraXBwZWQuKVxuLy8gICAgICBhYmM6IHRleHQgcmVwcmVzZW50aW5nIGEgdHVuZSBvciBhbiBlbnRpcmUgdHVuZSBib29rIGluIEFCQyBub3RhdGlvbi5cbi8vICAgICAgcmVuZGVyUGFyYW1zOiBoYXNoIG9mOlxuLy8gICAgICAgICAgc3RhcnRpbmdUdW5lOiBhbiBpbmRleCwgc3RhcnRpbmcgYXQgemVybywgcmVwcmVzZW50aW5nIHdoaWNoIHR1bmUgdG8gc3RhcnQgcmVuZGVyaW5nIGF0LlxuLy8gICAgICAgICAgICAgIChJZiB0aGlzIGVsZW1lbnQgaXMgbm90IHByZXNlbnQsIHRoZW4gcmVuZGVyaW5nIHN0YXJ0cyBhdCB6ZXJvLilcbi8vICAgICAgICAgIHdpZHRoOiA4MDAgYnkgZGVmYXVsdC4gVGhlIHdpZHRoIGluIHBpeGVscyBvZiB0aGUgb3V0cHV0IHBhcGVyXG52YXIgcmVuZGVyQWJjID0gZnVuY3Rpb24ob3V0cHV0LCBhYmMsIHBhcnNlclBhcmFtcywgZW5ncmF2ZXJQYXJhbXMsIHJlbmRlclBhcmFtcykge1xuICAgIC8vIE5vdGU6IGFsbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBjb25kZW5zZWQgaW50byB0aGUgZmlyc3Qgb25lcy4gSXQgZG9lc24ndCBodXJ0IGFueXRoaW5nIHRvIGFsbG93IHRoZSBvbGQgZm9ybWF0LCBzbyBqdXN0IGNvcHkgdGhlbSBoZXJlLlxuICAgIHZhciBwYXJhbXMgPSB7fTtcbiAgICB2YXIga2V5O1xuICAgIGlmIChwYXJzZXJQYXJhbXMpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gcGFyc2VyUGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VyUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9IHBhcnNlclBhcmFtc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmdyYXZlclBhcmFtcykge1xuICAgICAgICBmb3IgKGtleSBpbiBlbmdyYXZlclBhcmFtcykge1xuICAgICAgICAgICAgaWYgKGVuZ3JhdmVyUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0ICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBjb25mbGljdCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgXCJsaXN0ZW5lclwiLiBJZiBpdCBpcyBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlciwgdGhlbiBpdCBpcyBmb3IgY2xpY2suXG5cdCAgICAgICAgICAgIGlmIChrZXkgPT09IFwibGlzdGVuZXJcIikge1xuXHQgICAgICAgICAgICBcdGlmIChlbmdyYXZlclBhcmFtc1trZXldLmhpZ2hsaWdodClcblx0XHQgICAgICAgICAgICAgICAgcGFyYW1zLmNsaWNrTGlzdGVuZXIgPSBlbmdyYXZlclBhcmFtc1trZXldLmhpZ2hsaWdodDtcblx0ICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtc1trZXldID0gZW5ncmF2ZXJQYXJhbXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVuZGVyUGFyYW1zKSB7XG4gICAgICAgIGZvciAoa2V5IGluIHJlbmRlclBhcmFtcykge1xuICAgICAgICAgICAgaWYgKHJlbmRlclBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSByZW5kZXJQYXJhbXNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGRpdiwgdHVuZSwgdHVuZU51bWJlciwgYWJjU3RyaW5nKSB7XG4gICAgICAgIHZhciByZW1vdmVEaXYgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRpdiA9PT0gXCIqXCIpIHtcbiAgICAgICAgICAgIHJlbW92ZURpdiA9IHRydWU7XG4gICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiZGlzcGxheTpub25lO1wiKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgfVxuICAgIFx0aWYgKHBhcmFtcy5hZnRlclBhcnNpbmcpXG4gICAgXHRcdHBhcmFtcy5hZnRlclBhcnNpbmcodHVuZSwgdHVuZU51bWJlciwgYWJjU3RyaW5nKTtcbiAgICAgICAgaWYgKCFyZW1vdmVEaXYgJiYgcGFyYW1zLndyYXAgJiYgcGFyYW1zLnN0YWZmd2lkdGgpIHtcblx0ICAgICAgICB0dW5lID0gZG9MaW5lV3JhcHBpbmcoZGl2LCB0dW5lLCB0dW5lTnVtYmVyLCBhYmNTdHJpbmcsIHBhcmFtcyk7XG5cdCAgICAgICAgcmV0dXJuIHR1bmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocmVtb3ZlRGl2IHx8ICFwYXJhbXMub25lU3ZnUGVyTGluZSB8fCB0dW5lLmxpbmVzLmxlbmd0aCA8IDIpXG4gICAgICAgICAgICByZW5kZXJPbmUoZGl2LCB0dW5lLCBwYXJhbXMsIHR1bmVOdW1iZXIpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZW5kZXJFYWNoTGluZVNlcGFyYXRlbHkoZGl2LCB0dW5lLCBwYXJhbXMsIHR1bmVOdW1iZXIpO1xuICAgICAgICBpZiAocmVtb3ZlRGl2KVxuICAgICAgICAgICAgZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR1bmVib29rLnJlbmRlckVuZ2luZShjYWxsYmFjaywgb3V0cHV0LCBhYmMsIHBhcmFtcyk7XG59O1xuXG5mdW5jdGlvbiBkb0xpbmVXcmFwcGluZyhkaXYsIHR1bmUsIHR1bmVOdW1iZXIsIGFiY1N0cmluZywgcGFyYW1zKSB7XG5cdHZhciBlbmdyYXZlcl9jb250cm9sbGVyID0gbmV3IEVuZ3JhdmVyQ29udHJvbGxlcihkaXYsIHBhcmFtcyk7XG5cdHZhciB3aWR0aHMgPSBlbmdyYXZlcl9jb250cm9sbGVyLmdldE1lYXN1cmVXaWR0aHModHVuZSk7XG5cblx0dmFyIHJldCA9IHdyYXAuY2FsY0xpbmVXcmFwcyh0dW5lLCB3aWR0aHMsIGFiY1N0cmluZywgcGFyYW1zLCBQYXJzZSwgZW5ncmF2ZXJfY29udHJvbGxlcik7XG4gICAgaWYgKCFwYXJhbXMub25lU3ZnUGVyTGluZSB8fCByZXQudHVuZS5saW5lcy5sZW5ndGggPCAyKVxuICAgICAgICByZW5kZXJPbmUoZGl2LCByZXQudHVuZSwgcmV0LnJldmlzZWRQYXJhbXMsIHR1bmVOdW1iZXIpO1xuICAgIGVsc2VcbiAgICAgICAgcmVuZGVyRWFjaExpbmVTZXBhcmF0ZWx5KGRpdiwgcmV0LnR1bmUsIHJldC5yZXZpc2VkUGFyYW1zLCB0dW5lTnVtYmVyKTtcblx0cmV0LnR1bmUuZXhwbGFuYXRpb24gPSByZXQuZXhwbGFuYXRpb247XG5cdHJldHVybiByZXQudHVuZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZW5kZXJBYmM7XG4iLCJ2YXIgc291bmRzQ2FjaGUgPSB7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNvdW5kc0NhY2hlO1xuIiwiLy8gTG9hZCBvbmUgbXAzIGZpbGUgZm9yIG9uZSBub3RlLlxuLy8gdXJsID0gdGhlIGJhc2UgdXJsIGZvciB0aGUgc291bmRmb250XG4vLyBpbnN0cnVtZW50ID0gdGhlIGluc3RydW1lbnQgbmFtZSAoZS5nLiBcImFjb3VzdGljX2dyYW5kX3BpYW5vXCIpXG4vLyBuYW1lID0gdGhlIHBpdGNoIG5hbWUgKGUuZy4gXCJBM1wiKVxudmFyIHNvdW5kc0NhY2hlID0gcmVxdWlyZSgnLi9zb3VuZHMtY2FjaGUnKTtcblxudmFyIGdldE5vdGUgPSBmdW5jdGlvbih1cmwsIGluc3RydW1lbnQsIG5hbWUsIGF1ZGlvQ29udGV4dCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdGlmICghc291bmRzQ2FjaGVbaW5zdHJ1bWVudF0pXG5cdFx0XHRzb3VuZHNDYWNoZVtpbnN0cnVtZW50XSA9IHt9O1xuXHRcdHZhciBpbnN0cnVtZW50Q2FjaGUgPSBzb3VuZHNDYWNoZVtpbnN0cnVtZW50XTtcblxuXHRcdGlmIChpbnN0cnVtZW50Q2FjaGVbbmFtZV0gPT09ICdlcnJvcicpIHtcblx0XHRcdHJldHVybiByZWplY3QobmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvYWQgc291bmQgZm9udFwiICsgJyAnICsgdXJsICsgJyAnICsgaW5zdHJ1bWVudCArICcgJyArIG5hbWUpKTtcblx0XHR9XG5cdFx0aWYgKGluc3RydW1lbnRDYWNoZVtuYW1lXSkge1xuXHRcdFx0cmV0dXJuIHJlc29sdmUoe2luc3RydW1lbnQ6IGluc3RydW1lbnQsIG5hbWU6IG5hbWV9KTtcblx0XHR9XG5cblx0XHQvLyBpZiAodGhpcy5kZWJ1Z0NhbGxiYWNrKVxuXHRcdC8vIFx0dGhpcy5kZWJ1Z0NhbGxiYWNrKGBMb2FkaW5nIHNvdW5kOiAke2luc3RydW1lbnR9ICR7bmFtZX1gKTtcblx0XHRpbnN0cnVtZW50Q2FjaGVbbmFtZV0gPSBcInBlbmRpbmdcIjsgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGluIHBhcmFsbGVsLCBzbyBkb24ndCBjYWxsIGl0IGEgc2Vjb25kIHRpbWUgYmVmb3JlIHRoZSBmaXJzdCBvbmUgaGFzIGxvYWRlZC5cblx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0eGhyLm9wZW4oJ0dFVCcsIHVybCtpbnN0cnVtZW50KyctbXAzLycrbmFtZSsnLm1wMycsIHRydWUpO1xuXHRcdHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuXG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcdGZ1bmN0aW9uIG9uU3VjY2VzcyhhdWRpb0J1ZmZlcikge1xuXHRcdFx0aW5zdHJ1bWVudENhY2hlW25hbWVdID0gYXVkaW9CdWZmZXI7XG5cdFx0XHQvLyBpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0Ly8gXHRzZWxmLmRlYnVnQ2FsbGJhY2soYFNvdW5kIGxvYWRlZDogJHtpbnN0cnVtZW50fSAke25hbWV9ICR7dXJsfWApO1xuXHRcdFx0cmVzb2x2ZSh7aW5zdHJ1bWVudDogaW5zdHJ1bWVudCwgbmFtZTogbmFtZX0pO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIG9uRmFpbHVyZShlcnJvcikge1xuXHRcdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKGVycm9yKTtcblx0XHRcdGNvbnNvbGUubG9nKGVycm9yKTtcblx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0fVxuXG5cdFx0eGhyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRpZiAodGhpcy5zdGF0dXMgPT09IDIwMCkge1xuXHRcdFx0XHRhdWRpb0NvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHRoaXMucmVzcG9uc2UsIG9uU3VjY2Vzcywgb25GYWlsdXJlKTsvLy50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHQvLyBcdHJldHVybiByZXNvbHZlKHtpbnN0cnVtZW50OiBpbnN0cnVtZW50LCBuYW1lOiBuYW1lfSk7XG5cdFx0XHRcdC8vIH0pLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0XHRcdC8vIFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoY2FudExvYWRNcDMgKyBlcnJvcikpO1xuXHRcdFx0XHQvLyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGluc3RydW1lbnRDYWNoZVtuYW1lXSA9IFwiZXJyb3JcIjsgLy8gVG8ga2VlcCB0aGlzIGZyb20gdHJ5aW5nIHRvIGxvYWQgcmVwZWF0ZWRseS5cblx0XHRcdFx0dmFyIGNhbnRMb2FkTXAzID0gXCJPbmxvYWQgZXJyb3IgbG9hZGluZyBzb3VuZDogXCIgKyAgbmFtZSArIFwiIFwiICsgdXJsICsgXCIgXCIgKyBlLmN1cnJlbnRUYXJnZXQuc3RhdHVzICsgXCIgXCIgKyBlLmN1cnJlbnRUYXJnZXQuc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soY2FudExvYWRNcDMpO1xuXHRcdFx0XHRyZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihjYW50TG9hZE1wMykpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0eGhyLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpbnN0cnVtZW50Q2FjaGVbbmFtZV0gPSBcImVycm9yXCI7IC8vIFRvIGtlZXAgdGhpcyBmcm9tIHRyeWluZyB0byBsb2FkIHJlcGVhdGVkbHkuXG5cdFx0XHR2YXIgY2FudExvYWRNcDMgPSBcIkVycm9yIGluIGxvYWRpbmcgc291bmQ6IFwiICsgXCIgXCIgKyB1cmw7XG5cdFx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soY2FudExvYWRNcDMpO1xuXHRcdFx0cmV0dXJuIHJlamVjdChuZXcgRXJyb3IoY2FudExvYWRNcDMpKTtcblx0XHR9LCBmYWxzZSk7XG5cdFx0eGhyLnNlbmQoKTtcblx0fSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5vdGU7XG4iLCJ2YXIgaW5zdHJ1bWVudEluZGV4VG9OYW1lID0gW1xuXHRcImFjb3VzdGljX2dyYW5kX3BpYW5vXCIsXG5cdFwiYnJpZ2h0X2Fjb3VzdGljX3BpYW5vXCIsXG5cdFwiZWxlY3RyaWNfZ3JhbmRfcGlhbm9cIixcblx0XCJob25reXRvbmtfcGlhbm9cIixcblx0XCJlbGVjdHJpY19waWFub18xXCIsXG5cdFwiZWxlY3RyaWNfcGlhbm9fMlwiLFxuXHRcImhhcnBzaWNob3JkXCIsXG5cdFwiY2xhdmluZXRcIixcblxuXHRcImNlbGVzdGFcIixcblx0XCJnbG9ja2Vuc3BpZWxcIixcblx0XCJtdXNpY19ib3hcIixcblx0XCJ2aWJyYXBob25lXCIsXG5cdFwibWFyaW1iYVwiLFxuXHRcInh5bG9waG9uZVwiLFxuXHRcInR1YnVsYXJfYmVsbHNcIixcblx0XCJkdWxjaW1lclwiLFxuXG5cdFwiZHJhd2Jhcl9vcmdhblwiLFxuXHRcInBlcmN1c3NpdmVfb3JnYW5cIixcblx0XCJyb2NrX29yZ2FuXCIsXG5cdFwiY2h1cmNoX29yZ2FuXCIsXG5cdFwicmVlZF9vcmdhblwiLFxuXHRcImFjY29yZGlvblwiLFxuXHRcImhhcm1vbmljYVwiLFxuXHRcInRhbmdvX2FjY29yZGlvblwiLFxuXG5cdFwiYWNvdXN0aWNfZ3VpdGFyX255bG9uXCIsXG5cdFwiYWNvdXN0aWNfZ3VpdGFyX3N0ZWVsXCIsXG5cdFwiZWxlY3RyaWNfZ3VpdGFyX2phenpcIixcblx0XCJlbGVjdHJpY19ndWl0YXJfY2xlYW5cIixcblx0XCJlbGVjdHJpY19ndWl0YXJfbXV0ZWRcIixcblx0XCJvdmVyZHJpdmVuX2d1aXRhclwiLFxuXHRcImRpc3RvcnRpb25fZ3VpdGFyXCIsXG5cdFwiZ3VpdGFyX2hhcm1vbmljc1wiLFxuXG5cdFwiYWNvdXN0aWNfYmFzc1wiLFxuXHRcImVsZWN0cmljX2Jhc3NfZmluZ2VyXCIsXG5cdFwiZWxlY3RyaWNfYmFzc19waWNrXCIsXG5cdFwiZnJldGxlc3NfYmFzc1wiLFxuXHRcInNsYXBfYmFzc18xXCIsXG5cdFwic2xhcF9iYXNzXzJcIixcblx0XCJzeW50aF9iYXNzXzFcIixcblx0XCJzeW50aF9iYXNzXzJcIixcblxuXHRcInZpb2xpblwiLFxuXHRcInZpb2xhXCIsXG5cdFwiY2VsbG9cIixcblx0XCJjb250cmFiYXNzXCIsXG5cdFwidHJlbW9sb19zdHJpbmdzXCIsXG5cdFwicGl6emljYXRvX3N0cmluZ3NcIixcblx0XCJvcmNoZXN0cmFsX2hhcnBcIixcblx0XCJ0aW1wYW5pXCIsXG5cblx0XCJzdHJpbmdfZW5zZW1ibGVfMVwiLFxuXHRcInN0cmluZ19lbnNlbWJsZV8yXCIsXG5cdFwic3ludGhfc3RyaW5nc18xXCIsXG5cdFwic3ludGhfc3RyaW5nc18yXCIsXG5cdFwiY2hvaXJfYWFoc1wiLFxuXHRcInZvaWNlX29vaHNcIixcblx0XCJzeW50aF9jaG9pclwiLFxuXHRcIm9yY2hlc3RyYV9oaXRcIixcblxuXHRcInRydW1wZXRcIixcblx0XCJ0cm9tYm9uZVwiLFxuXHRcInR1YmFcIixcblx0XCJtdXRlZF90cnVtcGV0XCIsXG5cdFwiZnJlbmNoX2hvcm5cIixcblx0XCJicmFzc19zZWN0aW9uXCIsXG5cdFwic3ludGhfYnJhc3NfMVwiLFxuXHRcInN5bnRoX2JyYXNzXzJcIixcblxuXHRcInNvcHJhbm9fc2F4XCIsXG5cdFwiYWx0b19zYXhcIixcblx0XCJ0ZW5vcl9zYXhcIixcblx0XCJiYXJpdG9uZV9zYXhcIixcblx0XCJvYm9lXCIsXG5cdFwiZW5nbGlzaF9ob3JuXCIsXG5cdFwiYmFzc29vblwiLFxuXHRcImNsYXJpbmV0XCIsXG5cblx0XCJwaWNjb2xvXCIsXG5cdFwiZmx1dGVcIixcblx0XCJyZWNvcmRlclwiLFxuXHRcInBhbl9mbHV0ZVwiLFxuXHRcImJsb3duX2JvdHRsZVwiLFxuXHRcInNoYWt1aGFjaGlcIixcblx0XCJ3aGlzdGxlXCIsXG5cdFwib2NhcmluYVwiLFxuXG5cdFwibGVhZF8xX3NxdWFyZVwiLFxuXHRcImxlYWRfMl9zYXd0b290aFwiLFxuXHRcImxlYWRfM19jYWxsaW9wZVwiLFxuXHRcImxlYWRfNF9jaGlmZlwiLFxuXHRcImxlYWRfNV9jaGFyYW5nXCIsXG5cdFwibGVhZF82X3ZvaWNlXCIsXG5cdFwibGVhZF83X2ZpZnRoc1wiLFxuXHRcImxlYWRfOF9iYXNzX19sZWFkXCIsXG5cblx0XCJwYWRfMV9uZXdfYWdlXCIsXG5cdFwicGFkXzJfd2FybVwiLFxuXHRcInBhZF8zX3BvbHlzeW50aFwiLFxuXHRcInBhZF80X2Nob2lyXCIsXG5cdFwicGFkXzVfYm93ZWRcIixcblx0XCJwYWRfNl9tZXRhbGxpY1wiLFxuXHRcInBhZF83X2hhbG9cIixcblx0XCJwYWRfOF9zd2VlcFwiLFxuXG5cdFwiZnhfMV9yYWluXCIsXG5cdFwiZnhfMl9zb3VuZHRyYWNrXCIsXG5cdFwiZnhfM19jcnlzdGFsXCIsXG5cdFwiZnhfNF9hdG1vc3BoZXJlXCIsXG5cdFwiZnhfNV9icmlnaHRuZXNzXCIsXG5cdFwiZnhfNl9nb2JsaW5zXCIsXG5cdFwiZnhfN19lY2hvZXNcIixcblx0XCJmeF84X3NjaWZpXCIsXG5cblx0XCJzaXRhclwiLFxuXHRcImJhbmpvXCIsXG5cdFwic2hhbWlzZW5cIixcblx0XCJrb3RvXCIsXG5cdFwia2FsaW1iYVwiLFxuXHRcImJhZ3BpcGVcIixcblx0XCJmaWRkbGVcIixcblx0XCJzaGFuYWlcIixcblxuXHRcInRpbmtsZV9iZWxsXCIsXG5cdFwiYWdvZ29cIixcblx0XCJzdGVlbF9kcnVtc1wiLFxuXHRcIndvb2RibG9ja1wiLFxuXHRcInRhaWtvX2RydW1cIixcblx0XCJtZWxvZGljX3RvbVwiLFxuXHRcInN5bnRoX2RydW1cIixcblx0XCJyZXZlcnNlX2N5bWJhbFwiLFxuXG5cdFwiZ3VpdGFyX2ZyZXRfbm9pc2VcIixcblx0XCJicmVhdGhfbm9pc2VcIixcblx0XCJzZWFzaG9yZVwiLFxuXHRcImJpcmRfdHdlZXRcIixcblx0XCJ0ZWxlcGhvbmVfcmluZ1wiLFxuXHRcImhlbGljb3B0ZXJcIixcblx0XCJhcHBsYXVzZVwiLFxuXHRcImd1bnNob3RcIixcblxuXHRcInBlcmN1c3Npb25cIlxuXTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnN0cnVtZW50SW5kZXhUb05hbWU7XG4iLCIvLyBDb252ZXJ0IHRoZSBpbnB1dCBzdHJ1Y3R1cmUgdG8gYSBtb3JlIHVzZWZ1bCBzdHJ1Y3R1cmUgd2hlcmUgZWFjaCBpdGVtIGhhcyBhIGxlbmd0aCBvZiBpdHMgb3duLlxuXG52YXIgaW5zdHJ1bWVudEluZGV4VG9OYW1lID0gcmVxdWlyZSgnLi9pbnN0cnVtZW50LWluZGV4LXRvLW5hbWUnKTtcblxudmFyIGNyZWF0ZU5vdGVNYXAgPSBmdW5jdGlvbihzZXF1ZW5jZSkge1xuXHR2YXIgbWFwID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgc2VxdWVuY2UudHJhY2tzLmxlbmd0aDsgaSsrKVxuXHRcdG1hcC5wdXNoKFtdKTtcblxuXHQvLyBUT0RPLVBFUjogaGFuZGxlIG1vcmUgdGhhbiBvbmUgbm90ZSBpbiBhIHRyYWNrXG5cdHZhciBuZXh0Tm90ZSA9IHt9O1xuXHR2YXIgY3VycmVudEluc3RydW1lbnQgPSBpbnN0cnVtZW50SW5kZXhUb05hbWVbMF07XG5cdHNlcXVlbmNlLnRyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrLCBpKSB7XG5cdFx0dmFyIGN1cnJlbnRUaW1lID0gMDtcblx0XHR0cmFjay5mb3JFYWNoKGZ1bmN0aW9uKGV2KSB7XG5cdFx0XHRzd2l0Y2ggKGV2LmNtZCkge1xuXHRcdFx0XHRjYXNlIFwic3RhcnRcIjpcblx0XHRcdFx0XHRuZXh0Tm90ZVtldi5waXRjaF0gPSB7IHRpbWU6IGN1cnJlbnRUaW1lLCBpbnN0cnVtZW50OiBjdXJyZW50SW5zdHJ1bWVudCwgdm9sdW1lOiBldi52b2x1bWUgfTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm1vdmVcIjpcblx0XHRcdFx0XHRjdXJyZW50VGltZSArPSBldi5kdXJhdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInN0b3BcIjpcblx0XHRcdFx0XHRtYXBbaV0ucHVzaCh7cGl0Y2g6IGV2LnBpdGNoLCBpbnN0cnVtZW50OiBuZXh0Tm90ZVtldi5waXRjaF0uaW5zdHJ1bWVudCwgc3RhcnQ6IG5leHROb3RlW2V2LnBpdGNoXS50aW1lLCBlbmQ6IGN1cnJlbnRUaW1lLCB2b2x1bWU6IG5leHROb3RlW2V2LnBpdGNoXS52b2x1bWV9KTtcblx0XHRcdFx0XHRkZWxldGUgbmV4dE5vdGVbZXYucGl0Y2hdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwicHJvZ3JhbVwiOlxuXHRcdFx0XHRcdGN1cnJlbnRJbnN0cnVtZW50ID0gaW5zdHJ1bWVudEluZGV4VG9OYW1lW2V2Lmluc3RydW1lbnRdO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBoYW5kbGUgb3RoZXIgZXZlbnQgdHlwZXNcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIlVuaGFuZGVkIG1pZGkgZXZlbnRcIiwgZXYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0cmV0dXJuIG1hcDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTm90ZU1hcDtcbiIsIi8vIENhbGwgdGhpcyB3aGVuIGl0IGlzIHNhZmUgZm9yIHRoZSBhYmNqcyB0byBwcm9kdWNlIHNvdW5kLiBUaGlzIGlzIGFmdGVyIHRoZSBmaXJzdCB1c2VyIGdlc3R1cmUgb24gdGhlIHBhZ2UuXG4vLyBJZiB5b3UgY2FsbCBpdCB3aXRoIG5vIHBhcmFtZXRlcnMsIHRoZW4gYW4gQXVkaW9Db250ZXh0IGlzIGNyZWF0ZWQgYW5kIHN0b3JlZC5cbi8vIElmIHlvdSBjYWxsIGl0IHdpdGggYSBwYXJhbWV0ZXIsIHRoYXQgaXMgdXNlZCBhcyBhbiBhbHJlYWR5IGNyZWF0ZWQgQXVkaW9Db250ZXh0LlxuXG5mdW5jdGlvbiByZWdpc3RlckF1ZGlvQ29udGV4dChhYykge1xuXHRpZiAoIXdpbmRvdy5hYmNqc0F1ZGlvQ29udGV4dCkge1xuXHRcdGlmICghYWMpIHtcblx0XHRcdGFjID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fFxuXHRcdFx0XHR3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0IHx8XG5cdFx0XHRcdG5hdmlnYXRvci5tb3pBdWRpb0NvbnRleHQgfHxcblx0XHRcdFx0bmF2aWdhdG9yLm1zQXVkaW9Db250ZXh0O1xuXHRcdFx0YWMgPSBuZXcgYWMoKTtcblx0XHR9XG5cdFx0d2luZG93LmFiY2pzQXVkaW9Db250ZXh0ID0gYWM7XG5cdH1cblx0cmV0dXJuIHdpbmRvdy5hYmNqc0F1ZGlvQ29udGV4dC5zdGF0ZSAhPT0gXCJzdXNwZW5kZWRcIjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZWdpc3RlckF1ZGlvQ29udGV4dDtcbiIsImZ1bmN0aW9uIGFjdGl2ZUF1ZGlvQ29udGV4dCgpIHtcblx0cmV0dXJuIHdpbmRvdy5hYmNqc0F1ZGlvQ29udGV4dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhY3RpdmVBdWRpb0NvbnRleHQ7XG4iLCJ2YXIgYWN0aXZlQXVkaW9Db250ZXh0ID0gcmVxdWlyZSgnLi9hY3RpdmUtYXVkaW8tY29udGV4dCcpO1xuXG4vL1xuLy8gU3VwcG9ydCBmb3IgYXVkaW8gZGVwZW5kcyBvbiB0aHJlZSB0aGluZ3M6IHN1cHBvcnQgZm9yIFByb21pc2UsIHN1cHBvcnQgZm9yIEF1ZGlvQ29udGV4dCwgYW5kIHN1cHBvcnQgZm9yIEF1ZGlvQ29udGV4dC5yZXN1bWUuXG4vLyBVbmZvcnR1bmF0ZWx5LCBBdWRpb0NvbnRleHQucmVzdW1lIGNhbm5vdCBiZSBkZXRlY3RlZCB1bmxlc3MgYW4gQXVkaW9Db250ZXh0IGlzIGNyZWF0ZWQsIGFuZCBjcmVhdGluZyBhbiBBdWRpb0NvbnRleHQgY2FuJ3Rcbi8vIGJlIGRvbmUgdW50aWwgYSB1c2VyIGNsaWNrLCBzbyB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyBmb3Igc3VyZSBpZiBhdWRpbyBpcyBzdXBwb3J0ZWQgdW50aWwgdGhlIHVzZXIgdHJpZXMuXG4vLyBXZSBjYW4gZ2V0IGNsb3NlLCB0aG91Z2ggLSB3ZSBjYW4gdGVzdCBmb3IgUHJvbWlzZXMgYW5kIEF1ZGlvQ29udGV4dCAtIHRoZXJlIGFyZSBqdXN0IGEgZmV3IGV2ZXJncmVlbiBicm93c2VycyB0aGF0IHN1cHBvcnRlZFxuLy8gdGhhdCBiZWZvcmUgc3VwcG9ydGluZyByZXN1bWUsIHNvIHdlJ2xsIHRlc3Qgd2hhdCB3ZSBjYW4uXG5cbi8vIFRoZSBiZXN0IHVzZSBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gY2FsbCBpdCBiZWZvcmUgZG9pbmcgYW55IGF1ZGlvIHJlbGF0ZWQgc3R1ZmYgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYm90aGVyLlxuLy8gQnV0IHRoZW4sIGNhbGwgaXQgYWdhaW4gYWZ0ZXIgYSB1c2VyIGludGVyYWN0aW9uIHRvIHRlc3QgZm9yIHJlc3VtZS5cblxuZnVuY3Rpb24gc3VwcG9ydHNBdWRpbygpIHtcblx0dmFyIGFhYyA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpO1xuXHRpZiAoYWFjKVxuXHRcdHJldHVybiBhYWMucmVzdW1lICE9PSB1bmRlZmluZWQ7XG5cblx0aWYgKCF3aW5kb3cuUHJvbWlzZSlcblx0XHRyZXR1cm4gZmFsc2U7XG5cblx0cmV0dXJuIHdpbmRvdy5BdWRpb0NvbnRleHQgfHxcblx0XHR3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0IHx8XG5cdFx0bmF2aWdhdG9yLm1vekF1ZGlvQ29udGV4dCB8fFxuXHRcdG5hdmlnYXRvci5tc0F1ZGlvQ29udGV4dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0F1ZGlvO1xuIiwidmFyIHBpdGNoVG9Ob3RlTmFtZSA9IHtcblx0MjE6ICdBMCcsXG5cdDIyOiAnQmIwJyxcblx0MjM6ICdCMCcsXG5cdDI0OiAnQzEnLFxuXHQyNTogJ0RiMScsXG5cdDI2OiAnRDEnLFxuXHQyNzogJ0ViMScsXG5cdDI4OiAnRTEnLFxuXHQyOTogJ0YxJyxcblx0MzA6ICdHYjEnLFxuXHQzMTogJ0cxJyxcblx0MzI6ICdBYjEnLFxuXHQzMzogJ0ExJyxcblx0MzQ6ICdCYjEnLFxuXHQzNTogJ0IxJyxcblx0MzY6ICdDMicsXG5cdDM3OiAnRGIyJyxcblx0Mzg6ICdEMicsXG5cdDM5OiAnRWIyJyxcblx0NDA6ICdFMicsXG5cdDQxOiAnRjInLFxuXHQ0MjogJ0diMicsXG5cdDQzOiAnRzInLFxuXHQ0NDogJ0FiMicsXG5cdDQ1OiAnQTInLFxuXHQ0NjogJ0JiMicsXG5cdDQ3OiAnQjInLFxuXHQ0ODogJ0MzJyxcblx0NDk6ICdEYjMnLFxuXHQ1MDogJ0QzJyxcblx0NTE6ICdFYjMnLFxuXHQ1MjogJ0UzJyxcblx0NTM6ICdGMycsXG5cdDU0OiAnR2IzJyxcblx0NTU6ICdHMycsXG5cdDU2OiAnQWIzJyxcblx0NTc6ICdBMycsXG5cdDU4OiAnQmIzJyxcblx0NTk6ICdCMycsXG5cdDYwOiAnQzQnLFxuXHQ2MTogJ0RiNCcsXG5cdDYyOiAnRDQnLFxuXHQ2MzogJ0ViNCcsXG5cdDY0OiAnRTQnLFxuXHQ2NTogJ0Y0Jyxcblx0NjY6ICdHYjQnLFxuXHQ2NzogJ0c0Jyxcblx0Njg6ICdBYjQnLFxuXHQ2OTogJ0E0Jyxcblx0NzA6ICdCYjQnLFxuXHQ3MTogJ0I0Jyxcblx0NzI6ICdDNScsXG5cdDczOiAnRGI1Jyxcblx0NzQ6ICdENScsXG5cdDc1OiAnRWI1Jyxcblx0NzY6ICdFNScsXG5cdDc3OiAnRjUnLFxuXHQ3ODogJ0diNScsXG5cdDc5OiAnRzUnLFxuXHQ4MDogJ0FiNScsXG5cdDgxOiAnQTUnLFxuXHQ4MjogJ0JiNScsXG5cdDgzOiAnQjUnLFxuXHQ4NDogJ0M2Jyxcblx0ODU6ICdEYjYnLFxuXHQ4NjogJ0Q2Jyxcblx0ODc6ICdFYjYnLFxuXHQ4ODogJ0U2Jyxcblx0ODk6ICdGNicsXG5cdDkwOiAnR2I2Jyxcblx0OTE6ICdHNicsXG5cdDkyOiAnQWI2Jyxcblx0OTM6ICdBNicsXG5cdDk0OiAnQmI2Jyxcblx0OTU6ICdCNicsXG5cdDk2OiAnQzcnLFxuXHQ5NzogJ0RiNycsXG5cdDk4OiAnRDcnLFxuXHQ5OTogJ0ViNycsXG5cdDEwMDogJ0U3Jyxcblx0MTAxOiAnRjcnLFxuXHQxMDI6ICdHYjcnLFxuXHQxMDM6ICdHNycsXG5cdDEwNDogJ0FiNycsXG5cdDEwNTogJ0E3Jyxcblx0MTA2OiAnQmI3Jyxcblx0MTA3OiAnQjcnLFxuXHQxMDg6ICdDOCcsXG5cdDEwOTogJ0RiOCcsXG5cdDExMDogJ0Q4Jyxcblx0MTExOiAnRWI4Jyxcblx0MTEyOiAnRTgnLFxuXHQxMTM6ICdGOCcsXG5cdDExNDogJ0diOCcsXG5cdDExNTogJ0c4Jyxcblx0MTE2OiAnQWI4Jyxcblx0MTE3OiAnQTgnLFxuXHQxMTg6ICdCYjgnLFxuXHQxMTk6ICdCOCcsXG5cdDEyMDogJ0M5Jyxcblx0MTIxOiAnRGI5J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwaXRjaFRvTm90ZU5hbWU7XG4iLCJ2YXIgZG93bmxvYWRCdWZmZXIgPSBmdW5jdGlvbihidWZmZXIpIHtcblx0cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJ1ZmZlclRvV2F2ZShidWZmZXIuYXVkaW9CdWZmZXJzKSk7XG59O1xuXG4vLyBDb252ZXJ0IGFuIEF1ZGlvQnVmZmVyIHRvIGEgQmxvYiB1c2luZyBXQVZFIHJlcHJlc2VudGF0aW9uXG5mdW5jdGlvbiBidWZmZXJUb1dhdmUoYXVkaW9CdWZmZXJzKSB7XG5cdHZhciBudW1PZkNoYW4gPSBhdWRpb0J1ZmZlcnMubGVuZ3RoO1xuXHR2YXIgbGVuZ3RoID0gYXVkaW9CdWZmZXJzWzBdLmxlbmd0aCAqIG51bU9mQ2hhbiAqIDIgKyA0NDtcblx0dmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpO1xuXHR2YXIgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpO1xuXHR2YXIgY2hhbm5lbHMgPSBbXTtcblx0dmFyIGk7XG5cdHZhciBzYW1wbGU7XG5cdHZhciBvZmZzZXQgPSAwO1xuXHR2YXIgcG9zID0gMDtcblxuXHQvLyB3cml0ZSBXQVZFIGhlYWRlclxuXHRzZXRVaW50MzIoMHg0NjQ2NDk1Mik7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiUklGRlwiXG5cdHNldFVpbnQzMihsZW5ndGggLSA4KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZSBsZW5ndGggLSA4XG5cdHNldFVpbnQzMigweDQ1NTY0MTU3KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJXQVZFXCJcblxuXHRzZXRVaW50MzIoMHgyMDc0NmQ2Nik7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiZm10IFwiIGNodW5rXG5cdHNldFVpbnQzMigxNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVuZ3RoID0gMTZcblx0c2V0VWludDE2KDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQQ00gKHVuY29tcHJlc3NlZClcblx0c2V0VWludDE2KG51bU9mQ2hhbik7XG5cdHNldFVpbnQzMihhdWRpb0J1ZmZlcnNbMF0uc2FtcGxlUmF0ZSk7XG5cdHNldFVpbnQzMihhdWRpb0J1ZmZlcnNbMF0uc2FtcGxlUmF0ZSAqIDIgKiBudW1PZkNoYW4pOyAvLyBhdmcuIGJ5dGVzL3NlY1xuXHRzZXRVaW50MTYobnVtT2ZDaGFuICogMik7ICAgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrLWFsaWduXG5cdHNldFVpbnQxNigxNik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTYtYml0IChoYXJkY29kZWQgaW4gdGhpcyBkZW1vKVxuXG5cdHNldFVpbnQzMigweDYxNzQ2MTY0KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXCJkYXRhXCIgLSBjaHVua1xuXHRzZXRVaW50MzIobGVuZ3RoIC0gcG9zIC0gNCk7ICAgICAgICAgICAgICAgICAgIC8vIGNodW5rIGxlbmd0aFxuXG5cdC8vIHdyaXRlIGludGVybGVhdmVkIGRhdGFcblx0Zm9yKGkgPSAwOyBpIDwgYXVkaW9CdWZmZXJzLmxlbmd0aDsgaSsrKVxuXHRcdGNoYW5uZWxzLnB1c2goYXVkaW9CdWZmZXJzW2ldLmdldENoYW5uZWxEYXRhKDApKTtcblxuXHR3aGlsZShwb3MgPCBsZW5ndGgpIHtcblx0XHRmb3IoaSA9IDA7IGkgPCBjaGFubmVscy5sZW5ndGg7IGkrKykgeyAgICAgICAgICAgICAvLyBpbnRlcmxlYXZlIGNoYW5uZWxzXG5cdFx0XHRzYW1wbGUgPSBNYXRoLm1heCgtMSwgTWF0aC5taW4oMSwgY2hhbm5lbHNbaV1bb2Zmc2V0XSkpOyAvLyBjbGFtcFxuXHRcdFx0c2FtcGxlID0gKDAuNSArIHNhbXBsZSA8IDAgPyBzYW1wbGUgKiAzMjc2OCA6IHNhbXBsZSAqIDMyNzY3KXwwOyAvLyBzY2FsZSB0byAxNi1iaXQgc2lnbmVkIGludFxuXHRcdFx0dmlldy5zZXRJbnQxNihwb3MsIHNhbXBsZSwgdHJ1ZSk7ICAgICAgICAgIC8vIHdyaXRlIDE2LWJpdCBzYW1wbGVcblx0XHRcdHBvcyArPSAyO1xuXHRcdH1cblx0XHRvZmZzZXQrKzsgLy8gbmV4dCBzb3VyY2Ugc2FtcGxlXG5cdH1cblxuXHQvLyBjcmVhdGUgQmxvYlxuXHRyZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBcImF1ZGlvL3dhdlwifSk7XG5cblx0ZnVuY3Rpb24gc2V0VWludDE2KGRhdGEpIHtcblx0XHR2aWV3LnNldFVpbnQxNihwb3MsIGRhdGEsIHRydWUpO1xuXHRcdHBvcyArPSAyO1xuXHR9XG5cblx0ZnVuY3Rpb24gc2V0VWludDMyKGRhdGEpIHtcblx0XHR2aWV3LnNldFVpbnQzMihwb3MsIGRhdGEsIHRydWUpO1xuXHRcdHBvcyArPSA0O1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZG93bmxvYWRCdWZmZXI7XG4iLCIvLyAgICBhYmNfbWlkaV9zZXF1ZW5jZXIuanM6IFR1cm4gcGFyc2VkIGFiYyBpbnRvIGEgbGluZWFyIHNlcmllcyBvZiBldmVudHMuXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pIGFuZCBQYXVsIFJvc2VuXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBzZXF1ZW5jZTtcblxuKGZ1bmN0aW9uKCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgbWVhc3VyZUxlbmd0aDtcblx0Ly8gVGhlIGFiYyBpcyBwcm92aWRlZCB0byB1cyBsaW5lIGJ5IGxpbmUuIEl0IG1pZ2h0IGhhdmUgcmVwZWF0cyBpbiBpdC4gV2Ugd2FudCB0byByZSBhcnJhbmdlIHRoZSBlbGVtZW50cyB0b1xuXHQvLyBiZSBhbiBhcnJheSBvZiB2b2ljZXMgd2l0aCBhbGwgdGhlIHJlcGVhdHMgZW1iZWRkZWQsIGFuZCBubyBsaW5lcy4gVGhlbiBpdCBpcyB0cml2aWFsIHRvIGdvIHRocm91Z2ggdGhlIGV2ZW50c1xuXHQvLyBvbmUgYXQgYSB0aW1lIGFuZCB0dXJuIGl0IGludG8gbWlkaS5cblxuXHR2YXIgUEVSQ1VTU0lPTl9QUk9HUkFNID0gMTI4O1xuXG5cdHNlcXVlbmNlID0gZnVuY3Rpb24oYWJjdHVuZSwgb3B0aW9ucykge1xuXHRcdC8vIEdsb2JhbCBvcHRpb25zXG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdFx0dmFyIHFwbSA9IHVuZGVmaW5lZDtcblx0XHR2YXIgcHJvZ3JhbSA9IG9wdGlvbnMucHJvZ3JhbSB8fCAwO1x0Ly8gVGhlIHByb2dyYW0gaWYgdGhlcmUgaXNuJ3QgYSBwcm9ncmFtIHNwZWNpZmllZC5cblx0XHR2YXIgdHJhbnNwb3NlID0gb3B0aW9ucy5taWRpVHJhbnNwb3NlIHx8IDA7XG5cdFx0dmFyIGNoYW5uZWwgPSBvcHRpb25zLmNoYW5uZWwgfHwgMDtcblx0XHR2YXIgZHJ1bVBhdHRlcm4gPSBvcHRpb25zLmRydW0gfHwgXCJcIjtcblx0XHR2YXIgZHJ1bUJhcnMgPSBvcHRpb25zLmRydW1CYXJzIHx8IDE7XG5cdFx0dmFyIGRydW1JbnRybyA9IG9wdGlvbnMuZHJ1bUludHJvIHx8IDA7XG5cdFx0dmFyIGRydW1PbiA9IGRydW1QYXR0ZXJuICE9PSBcIlwiO1xuXG5cdFx0Ly8gQWxsIG9mIHRoZSBhYm92ZSBvdmVycmlkZXMgbmVlZCB0byBiZSBpbnRlZ2Vyc1xuXHRcdHByb2dyYW0gPSBwYXJzZUludChwcm9ncmFtLCAxMCk7XG5cdFx0dHJhbnNwb3NlID0gcGFyc2VJbnQodHJhbnNwb3NlLCAxMCk7XG5cdFx0Y2hhbm5lbCA9IHBhcnNlSW50KGNoYW5uZWwsIDEwKTtcblx0XHRpZiAoY2hhbm5lbCA9PT0gMTApXG5cdFx0XHRwcm9ncmFtID0gUEVSQ1VTU0lPTl9QUk9HUkFNO1xuXHRcdGRydW1QYXR0ZXJuID0gZHJ1bVBhdHRlcm4uc3BsaXQoXCIgXCIpO1xuXHRcdGRydW1CYXJzID0gcGFyc2VJbnQoZHJ1bUJhcnMsIDEwKTtcblx0XHRkcnVtSW50cm8gPSBwYXJzZUludChkcnVtSW50cm8sIDEwKTtcblxuXHRcdHZhciBiYWdwaXBlcyA9IGFiY3R1bmUuZm9ybWF0dGluZy5iYWdwaXBlczsgLy8gSWYgaXQgaXMgYmFncGlwZXMsIHRoZW4gdGhlIGdyYWNlbm90ZXMgYXJlIHBsYXllZCBvbiB0b3Agb2YgdGhlIG1haW4gbm90ZS5cblx0XHRpZiAoYmFncGlwZXMpXG5cdFx0XHRwcm9ncmFtID0gNzE7XG5cblx0XHQvLyAlJU1JREkgZmVybWF0YWZpeGVkXG5cdFx0Ly8gJSVNSURJIGZlcm1hdGFwcm9wb3J0aW9uYWxcblx0XHQvLyAlJU1JREkgZGVsdGFsb3VkbmVzcyBuXG5cdFx0Ly8gJSVNSURJIGdyYWNlZGl2aWRlciBiXG5cdFx0Ly8gJSVNSURJIHJhdGlvIG4gbVxuXHRcdC8vICUlTUlESSBiZWF0IGEgYiBjIG5cblx0XHQvLyAlJU1JREkgZ3JhY2UgYS9iXG5cdFx0Ly8gJSVNSURJIHRyaW0geC95XG5cblx0XHQvLyAlTUlESSBnY2hvcmRvblxuXHRcdC8vICVNSURJIGdjaG9yZG9mZlxuXHRcdC8vICUlTUlESSBiYXNzcHJvZyA0NVxuXHRcdC8vICUlTUlESSBjaG9yZHByb2cgMjRcblx0XHQvLyAlJU1JREkgY2hvcmRuYW1lIG5hbWUgbjEgbjIgbjMgbjQgbjUgbjZcblxuXHRcdC8vJSVNSURJIGJlYXQg4p+oaW50MeKfqSDin6hpbnQy4p+pIOKfqGludDPin6kg4p+oaW50NOKfqTogY29udHJvbHMgdGhlIHZvbHVtZXMgb2YgdGhlIG5vdGVzIGluIGEgbWVhc3VyZS4gVGhlIGZpcnN0IG5vdGUgaW4gYSBiYXIgaGFzIHZvbHVtZSDin6hpbnQx4p+pOyBvdGhlciDigJhzdHJvbmfigJkgbm90ZXMgaGF2ZSB2b2x1bWUg4p+oaW50MuKfqSBhbmQgYWxsIHRoZSByZXN0IGhhdmUgdm9sdW1lIOKfqGludDPin6kuIFRoZXNlIHZhbHVlcyBtdXN0IGJlIGluIHRoZSByYW5nZSAw4oCTMTI3LiBUaGUgcGFyYW1ldGVyIOKfqGludDTin6kgZGV0ZXJtaW5lcyB3aGljaCBub3RlcyBhcmUg4oCYc3Ryb25n4oCZLiBJZiB0aGUgdGltZSBzaWduYXR1cmUgaXMgeC95LCB0aGVuIGVhY2ggbm90ZSBpcyBnaXZlbiBhIHBvc2l0aW9uIG51bWJlciBrID0gMCwgMSwgMi4gLiAuIHgtMSB3aXRoaW4gZWFjaCBiYXIuIElmIGsgaXMgYSBtdWx0aXBsZSBvZiDin6hpbnQ04p+pLCB0aGVuIHRoZSBub3RlIGlzIOKAmHN0cm9uZ+KAmS5cblxuXHRcdHZhciBzdGFydGluZ01pZGkgPSBbXTtcblx0XHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGkpIHtcblx0XHRcdC8vY29uc29sZS5sb2coXCJNSURJIEZvcm1hdHRpbmc6XCIsIGFiY3R1bmUuZm9ybWF0dGluZy5taWRpKTtcblx0XHRcdHZhciBnbG9iYWxzID0gYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGk7XG5cdFx0XHRpZiAoZ2xvYmFscy5wcm9ncmFtICYmIGdsb2JhbHMucHJvZ3JhbS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHByb2dyYW0gPSBnbG9iYWxzLnByb2dyYW1bMF07XG5cdFx0XHRcdGlmIChnbG9iYWxzLnByb2dyYW0ubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHByb2dyYW0gPSBnbG9iYWxzLnByb2dyYW1bMV07XG5cdFx0XHRcdFx0Y2hhbm5lbCA9IGdsb2JhbHMucHJvZ3JhbVswXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGdsb2JhbHMudHJhbnNwb3NlKVxuXHRcdFx0XHR0cmFuc3Bvc2UgPSBnbG9iYWxzLnRyYW5zcG9zZVswXTtcblx0XHRcdGlmIChnbG9iYWxzLmNoYW5uZWwpXG5cdFx0XHRcdGNoYW5uZWwgPSBnbG9iYWxzLmNoYW5uZWxbMF07XG5cdFx0XHRpZiAoZ2xvYmFscy5kcnVtKVxuXHRcdFx0XHRkcnVtUGF0dGVybiA9IGdsb2JhbHMuZHJ1bTtcblx0XHRcdGlmIChnbG9iYWxzLmRydW1iYXJzKVxuXHRcdFx0XHRkcnVtQmFycyA9IGdsb2JhbHMuZHJ1bWJhcnNbMF07XG5cdFx0XHRpZiAoZ2xvYmFscy5kcnVtb24pXG5cdFx0XHRcdGRydW1PbiA9IHRydWU7XG5cdFx0XHRpZiAoY2hhbm5lbCA9PT0gMTApXG5cdFx0XHRcdHByb2dyYW0gPSBQRVJDVVNTSU9OX1BST0dSQU07XG5cdFx0XHRpZiAoZ2xvYmFscy5iZWF0KVxuXHRcdFx0XHRzdGFydGluZ01pZGkucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IGdsb2JhbHMuYmVhdCB9KVxuXHRcdFx0aWYgKGdsb2JhbHMubm9iZWF0YWNjZW50cylcblx0XHRcdFx0c3RhcnRpbmdNaWRpLnB1c2goeyBlbF90eXBlOiAnYmVhdGFjY2VudHMnLCB2YWx1ZTogZmFsc2UgfSk7XG5cblx0XHR9XG5cblx0XHQvLyBTcGVjaWZpZWQgb3B0aW9ucyBpbiBhYmMgc3RyaW5nLlxuXG5cdFx0Ly8gSWYgdGhlIHRlbXBvIHdhcyBwYXNzZWQgaW4sIHVzZSB0aGF0LlxuXHRcdC8vIElmIHRoZSB0ZW1wbyBpcyBzcGVjaWZpZWQsIHVzZSB0aGF0LlxuXHRcdC8vIElmIHRoZXJlIGlzIGEgZGVmYXVsdCwgdXNlIHRoYXQuXG5cdFx0Ly8gT3RoZXJ3aXNlLCB1c2UgdGhlIGRlZmF1bHQuXG5cdFx0aWYgKG9wdGlvbnMucXBtKVxuXHRcdFx0cXBtID0gcGFyc2VJbnQob3B0aW9ucy5xcG0sIDEwKTtcblx0XHRlbHNlIGlmIChhYmN0dW5lLm1ldGFUZXh0LnRlbXBvKVxuXHRcdFx0cXBtID0gaW50ZXJwcmV0VGVtcG8oYWJjdHVuZS5tZXRhVGV4dC50ZW1wbyk7XG5cdFx0ZWxzZSBpZiAob3B0aW9ucy5kZWZhdWx0UXBtKVxuXHRcdFx0cXBtID0gb3B0aW9ucy5kZWZhdWx0UXBtO1xuXHRcdGVsc2Vcblx0XHRcdHFwbSA9IDE4MDsgXHQvLyBUaGUgdGVtcG8gaWYgdGhlcmUgaXNuJ3QgYSB0ZW1wbyBzcGVjaWZpZWQuXG5cblx0XHR2YXIgc3RhcnRWb2ljZSA9IFtdO1xuXHRcdGlmIChiYWdwaXBlcylcblx0XHRcdHN0YXJ0Vm9pY2UucHVzaCh7IGVsX3R5cGU6ICdiYWdwaXBlcycgfSk7XG5cdFx0c3RhcnRWb2ljZS5wdXNoKHsgZWxfdHlwZTogJ2luc3RydW1lbnQnLCBwcm9ncmFtOiBwcm9ncmFtIH0pO1xuXHRcdGlmIChjaGFubmVsKVxuXHRcdFx0c3RhcnRWb2ljZS5wdXNoKHsgZWxfdHlwZTogJ2NoYW5uZWwnLCBjaGFubmVsOiBjaGFubmVsIH0pO1xuXHRcdGlmICh0cmFuc3Bvc2UpXG5cdFx0XHRzdGFydFZvaWNlLnB1c2goeyBlbF90eXBlOiAndHJhbnNwb3NlJywgdHJhbnNwb3NlOiB0cmFuc3Bvc2UgfSk7XG5cdFx0c3RhcnRWb2ljZS5wdXNoKHsgZWxfdHlwZTogJ3RlbXBvJywgcXBtOiBxcG0gfSk7XG5cdFx0Zm9yICh2YXIgc3MgPSAwOyBzcyA8IHN0YXJ0aW5nTWlkaS5sZW5ndGg7c3MrKylcblx0XHRcdHN0YXJ0Vm9pY2UucHVzaChzdGFydGluZ01pZGlbc3NdKTtcblxuXHRcdC8vIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBpbnB1dCBzdHJ1Y3R1cmUgaXM6XG5cdFx0Ly8gYWJjdHVuZVxuXHRcdC8vXHRcdGFycmF5IGxpbmVzXG5cdFx0Ly9cdFx0XHRhcnJheSBzdGFmZlxuXHRcdC8vXHRcdFx0XHRvYmplY3Qga2V5XG5cdFx0Ly9cdFx0XHRcdG9iamVjdCBtZXRlclxuXHRcdC8vXHRcdFx0XHRhcnJheSB2b2ljZXNcblx0XHQvL1x0XHRcdFx0XHRhcnJheSBhYmNlbGVtXG5cblx0XHQvLyB2aXNpdCBlYWNoIHZvaWNlIGNvbXBsZXRlbHkgaW4gdHVyblxuXHRcdHZhciB2b2ljZXMgPSBbXTtcblx0XHR2YXIgc3RhcnRSZXBlYXRQbGFjZWhvbGRlciA9IFtdOyAvLyBUaGVyZSBpcyBhIHBsYWNlIGhvbGRlciBmb3IgZWFjaCB2b2ljZS5cblx0XHR2YXIgc2tpcEVuZGluZ1BsYWNlaG9sZGVyID0gW107IC8vIFRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZSBmaXJzdCBlbmRpbmcgc3RhcnRzLlxuXHRcdHZhciBzdGFydGluZ0RydW1TZXQgPSBmYWxzZTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFiY3R1bmUubGluZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdC8vIEZvciBlYWNoIGdyb3VwIG9mIHN0YWZmIGxpbmVzIGluIHRoZSB0dW5lLlxuXHRcdFx0dmFyIGxpbmUgPSBhYmN0dW5lLmxpbmVzW2ldO1xuXHRcdFx0aWYgKGxpbmUuc3RhZmYpIHtcblx0XHRcdFx0dmFyIHN0YXZlcyA9IGxpbmUuc3RhZmY7XG5cdFx0XHRcdHZhciB2b2ljZU51bWJlciA9IDA7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgc3RhdmVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YWZmID0gc3RhdmVzW2pdO1xuXHRcdFx0XHRcdC8vIEZvciBlYWNoIHN0YWZmIGxpbmVcblx0XHRcdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IHN0YWZmLnZvaWNlcy5sZW5ndGg7IGsrKykge1xuXHRcdFx0XHRcdFx0Ly8gRm9yIGVhY2ggdm9pY2UgaW4gYSBzdGFmZiBsaW5lXG5cdFx0XHRcdFx0XHR2YXIgdm9pY2UgPSBzdGFmZi52b2ljZXNba107XG5cdFx0XHRcdFx0XHRpZiAoIXZvaWNlc1t2b2ljZU51bWJlcl0pIHtcblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXSA9IFtdLmNvbmNhdChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHN0YXJ0Vm9pY2UpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoc3RhZmYuY2xlZiAmJiBzdGFmZi5jbGVmLnR5cGUgPT09ICdwZXJjJykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBjbCA9IDA7IGNsIDwgdm9pY2VzW3ZvaWNlTnVtYmVyXS5sZW5ndGg7IGNsKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAodm9pY2VzW3ZvaWNlTnVtYmVyXVtjbF0uZWxfdHlwZSA9PT0gJ2luc3RydW1lbnQnKVxuXHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXVtjbF0ucHJvZ3JhbSA9IFBFUkNVU1NJT05fUFJPR1JBTTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChzdGFmZi5rZXkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHN0YWZmLmtleS5yb290ID09PSAnSFAnKVxuXHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7ZWxfdHlwZTogJ2tleScsIGFjY2lkZW50YWxzOiBbe2FjYzogJ25hdHVyYWwnLCBub3RlOiAnZyd9LCB7YWNjOiAnc2hhcnAnLCBub3RlOiAnZid9LCB7YWNjOiAnc2hhcnAnLCBub3RlOiAnYyd9XX0pO1xuXHRcdFx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAna2V5JywgYWNjaWRlbnRhbHM6IHN0YWZmLmtleS5hY2NpZGVudGFscyB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzdGFmZi5tZXRlcikge1xuXHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goaW50ZXJwcmV0TWV0ZXIoc3RhZmYubWV0ZXIpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICghc3RhcnRpbmdEcnVtU2V0ICYmIGRydW1PbikgeyAvLyBkcnVtIGluZm9ybWF0aW9uIGlzIG9ubHkgbmVlZGVkIG9uY2UsIHNvIHVzZSB0aGUgZmlyc3QgbGluZSBhbmQgdHJhY2sgMC5cblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAnZHJ1bScsIHBhcmFtczoge3BhdHRlcm46IGRydW1QYXR0ZXJuLCBiYXJzOiBkcnVtQmFycywgb246IGRydW1PbiwgaW50cm86IGRydW1JbnRyb319KTtcblx0XHRcdFx0XHRcdFx0c3RhcnRpbmdEcnVtU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzdGFmZi5jbGVmICYmIHN0YWZmLmNsZWYudHJhbnNwb3NlKSB7XG5cdFx0XHRcdFx0XHRcdHN0YWZmLmNsZWYuZWxfdHlwZSA9ICdjbGVmJztcblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ3RyYW5zcG9zZScsIHRyYW5zcG9zZTogc3RhZmYuY2xlZi50cmFuc3Bvc2UgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGkgJiYgYWJjdHVuZS5mb3JtYXR0aW5nLm1pZGkuZHJ1bW9mZikge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGRydW0gb2ZmIGNvbW1hbmQgcmlnaHQgYXQgdGhlIGJlZ2lubmluZyBpdCBpcyBwdXQgaW4gdGhlIG1ldGFUZXh0IGluc3RlYWQgb2YgdGhlIHN0cmVhbSxcblx0XHRcdFx0XHRcdFx0Ly8gc28gd2Ugd2lsbCBqdXN0IGluc2VydCBpdCBoZXJlLlxuXHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnYmFyJyB9KTtcblx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAnZHJ1bScsIHBhcmFtczoge3BhdHRlcm46IFwiXCIsIG9uOiBmYWxzZSB9fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgbm90ZUV2ZW50c0luQmFyID0gMDtcblx0XHRcdFx0XHRcdGZvciAodmFyIHYgPSAwOyB2IDwgdm9pY2UubGVuZ3RoOyB2KyspIHtcblx0XHRcdFx0XHRcdFx0Ly8gRm9yIGVhY2ggZWxlbWVudCBpbiBhIHZvaWNlXG5cdFx0XHRcdFx0XHRcdHZhciBlbGVtID0gdm9pY2Vbdl07XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoZWxlbS5lbF90eXBlKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIm5vdGVcIjpcblx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlZ3VsYXIgaXRlbXMgYXJlIGp1c3QgcHVzaGVkLlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFlbGVtLnJlc3QgfHwgZWxlbS5yZXN0LnR5cGUgIT09ICdzcGFjZXInKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChlbGVtLmRlY29yYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ3BwcCcpID49IDApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnYmVhdCcsIGJlYXRzOiBbMzAsIDIwLCAxMCwgMV0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ3BwJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFs0NSwgMzUsIDIwLCAxXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChlbGVtLmRlY29yYXRpb24uaW5kZXhPZigncCcpID49IDApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnYmVhdCcsIGJlYXRzOiBbNjAsIDUwLCAzNSwgMV0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ21wJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFs3NSwgNjUsIDUwLCAxXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChlbGVtLmRlY29yYXRpb24uaW5kZXhPZignbWYnKSA+PSAwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2JlYXQnLCBiZWF0czogWzkwLCA4MCwgNjUsIDFdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGVsZW0uZGVjb3JhdGlvbi5pbmRleE9mKCdmJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFsxMDUsIDk1LCA4MCwgMV0gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZWxzZSBpZiAoZWxlbS5kZWNvcmF0aW9uLmluZGV4T2YoJ2ZmJykgPj0gMClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IFsxMjAsIDExMCwgOTUsIDFdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGVsZW0uZGVjb3JhdGlvbi5pbmRleE9mKCdmZmYnKSA+PSAwKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2JlYXQnLCBiZWF0czogWzEyNywgMTI1LCAxMTAsIDFdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaChlbGVtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm90ZUV2ZW50c0luQmFyKys7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwia2V5XCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZWxlbS5yb290ID09PSAnSFAnKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goe2VsX3R5cGU6ICdrZXknLCBhY2NpZGVudGFsczogW3thY2M6ICduYXR1cmFsJywgbm90ZTogJ2cnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2YnfSwge2FjYzogJ3NoYXJwJywgbm90ZTogJ2MnfV19KTtcblx0XHRcdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHtlbF90eXBlOiAna2V5JywgYWNjaWRlbnRhbHM6IGVsZW0uYWNjaWRlbnRhbHMgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibWV0ZXJcIjpcblx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaChpbnRlcnByZXRNZXRlcihlbGVtKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiY2xlZlwiOiAvLyBuZWVkIHRvIGtlZXAgdGhpcyB0byBjYXRjaCB0aGUgXCJ0cmFuc3Bvc2VcIiBlbGVtZW50LlxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGVsZW0udHJhbnNwb3NlKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAndHJhbnNwb3NlJywgdHJhbnNwb3NlOiBlbGVtLnRyYW5zcG9zZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJ0ZW1wb1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0cXBtID0gaW50ZXJwcmV0VGVtcG8oZWxlbSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAndGVtcG8nLCBxcG06IHFwbSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJiYXJcIjpcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChub3RlRXZlbnRzSW5CYXIgPiAwKSAvLyBkb24ndCBhZGQgdHdvIGJhcnMgaW4gYSByb3cuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiYXInIH0pOyAvLyBXZSBuZWVkIHRoZSBiYXIgbWFya2luZyB0byByZXNldCB0aGUgYWNjaWRlbnRhbHMuXG5cdFx0XHRcdFx0XHRcdFx0XHRub3RlRXZlbnRzSW5CYXIgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZmlndXJlIG91dCByZXBlYXRzIGFuZCBlbmRpbmdzIC0tXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgaW1wb3J0YW50IHBhcnQgaXMgd2hlcmUgdGhlcmUgaXMgYSBzdGFydCByZXBlYXQsIGFuZCBlbmQgcmVwZWF0LCBvciBhIGZpcnN0IGVuZGluZy5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlbmRSZXBlYXQgPSAoZWxlbS50eXBlID09PSBcImJhcl9yaWdodF9yZXBlYXRcIiB8fCBlbGVtLnR5cGUgPT09IFwiYmFyX2RibF9yZXBlYXRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgc3RhcnRFbmRpbmcgPSAoZWxlbS5zdGFydEVuZGluZyA9PT0gJzEnKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBzdGFydFJlcGVhdCA9IChlbGVtLnR5cGUgPT09IFwiYmFyX2xlZnRfcmVwZWF0XCIgfHwgZWxlbS50eXBlID09PSBcImJhcl9kYmxfcmVwZWF0XCIgfHwgZWxlbS50eXBlID09PSBcImJhcl9yaWdodF9yZXBlYXRcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZW5kUmVwZWF0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBzID0gc3RhcnRSZXBlYXRQbGFjZWhvbGRlclt2b2ljZU51bWJlcl07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcykgcyA9IDA7IC8vIElmIHRoZXJlIHdhc24ndCBhIGxlZnQgcmVwZWF0LCB0aGVuIHdlIHJlcGVhdCBmcm9tIHRoZSBiZWdpbm5pbmcuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlID0gc2tpcEVuZGluZ1BsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCFlKSBlID0gdm9pY2VzW3ZvaWNlTnVtYmVyXS5sZW5ndGg7IC8vIElmIHRoZXJlIHdhc24ndCBhIGZpcnN0IGVuZGluZyBtYXJrZXIsIHRoZW4gd2UgY29weSBldmVyeXRoaW5nLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdID0gdm9pY2VzW3ZvaWNlTnVtYmVyXS5jb25jYXQodm9pY2VzW3ZvaWNlTnVtYmVyXS5zbGljZShzLCBlKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHJlc2V0IHRoZXNlIGluIGNhc2UgdGhlcmUgaXMgYSBzZWNvbmQgcmVwZWF0IGxhdGVyIG9uLlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRza2lwRW5kaW5nUGxhY2Vob2xkZXJbdm9pY2VOdW1iZXJdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFJlcGVhdFBsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChzdGFydEVuZGluZylcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2tpcEVuZGluZ1BsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXSA9IHZvaWNlc1t2b2ljZU51bWJlcl0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0UmVwZWF0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGFydFJlcGVhdFBsYWNlaG9sZGVyW3ZvaWNlTnVtYmVyXSA9IHZvaWNlc1t2b2ljZU51bWJlcl0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnc3R5bGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETy1QRVI6IElmIHRoaXMgaXMgc2V0IHRvIHJoeXRobSBoZWFkcywgdGhlbiBpdCBzaG91bGQgdXNlIHRoZSBwZXJjdXNzaW9uIGNoYW5uZWwuXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlICdwYXJ0Jzpcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFRPRE8tUEVSOiBJZiB0aGVyZSBpcyBhIHBhcnQgc2VjdGlvbiBpbiB0aGUgaGVhZGVyLCB0aGVuIHRoaXMgc2hvdWxkIHByb2JhYmx5IGFmZmVjdCB0aGUgcmVwZWF0cy5cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3N0ZW0nOlxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3NjYWxlJzpcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZXNlIGVsZW1lbnRzIGRvbid0IGFmZmVjdCBzb3VuZFxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAnbWlkaSc6XG5cdFx0XHRcdFx0XHRcdFx0XHQvL2NvbnNvbGUubG9nKFwiTUlESSBpbmxpbmVcIiwgZWxlbSk7IC8vIFRPRE8tUEVSOiBmb3IgZGVidWdnaW5nLiBSZW1vdmUgdGhpcy5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBkcnVtQ2hhbmdlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGVsZW0uY21kKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJkcnVtb25cIjogZHJ1bU9uID0gdHJ1ZTsgZHJ1bUNoYW5nZSA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZHJ1bW9mZlwiOiBkcnVtT24gPSBmYWxzZTsgZHJ1bUNoYW5nZSA9IHRydWU7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZHJ1bVwiOiBkcnVtUGF0dGVybiA9IGVsZW0ucGFyYW1zOyBkcnVtQ2hhbmdlID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJkcnVtYmFyc1wiOiBkcnVtQmFycyA9IGVsZW0ucGFyYW1zWzBdOyBkcnVtQ2hhbmdlID0gdHJ1ZTsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJkcnVtbWFwXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSBnZXR0aW5nIGhlcmUgc28gaXQgY2FuIGJlIGlnbm9yZWQuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJwcm9ncmFtXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2luc3RydW1lbnQnLCBwcm9ncmFtOiBlbGVtLnBhcmFtc1swXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInRyYW5zcG9zZVwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICd0cmFuc3Bvc2UnLCB0cmFuc3Bvc2U6IGVsZW0ucGFyYW1zWzBdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZ2Nob3Jkb2ZmXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2djaG9yZCcsIHRhY2V0OiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiZ2Nob3Jkb25cIjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAnZ2Nob3JkJywgdGFjZXQ6IGZhbHNlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiYmVhdFwiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0JywgYmVhdHM6IGVsZW0ucGFyYW1zIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIFwibm9iZWF0YWNjZW50c1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICdiZWF0YWNjZW50cycsIHZhbHVlOiBmYWxzZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImJlYXRhY2NlbnRzXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzW3ZvaWNlTnVtYmVyXS5wdXNoKHsgZWxfdHlwZTogJ2JlYXRhY2NlbnRzJywgdmFsdWU6IHRydWUgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJ2b2xcIjpcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2b2ljZXNbdm9pY2VOdW1iZXJdLnB1c2goeyBlbF90eXBlOiAndm9sJywgdm9sdW1lOiBlbGVtLnBhcmFtc1swXSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInZvbGluY1wiOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZvaWNlc1t2b2ljZU51bWJlcl0ucHVzaCh7IGVsX3R5cGU6ICd2b2xpbmMnLCB2b2x1bWU6IGVsZW0ucGFyYW1zWzBdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiTUlESSBzZXE6IG1pZGkgY21kIG5vdCBoYW5kbGVkOiBcIiwgZWxlbS5jbWQsIGVsZW0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGRydW1DaGFuZ2UpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dm9pY2VzWzBdLnB1c2goe2VsX3R5cGU6ICdkcnVtJywgcGFyYW1zOiB7IHBhdHRlcm46IGRydW1QYXR0ZXJuLCBiYXJzOiBkcnVtQmFycywgaW50cm86IGRydW1JbnRybywgb246IGRydW1Pbn19KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhcnRpbmdEcnVtU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhcIk1JREk6IGVsZW1lbnQgdHlwZSBcIiArIGVsZW0uZWxfdHlwZSArIFwiIG5vdCBoYW5kbGVkLlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dm9pY2VOdW1iZXIrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGRydW1JbnRybykge1xuXHRcdFx0dmFyIHBpY2t1cHMgPSBhYmN0dW5lLmdldFBpY2t1cExlbmd0aCgpO1xuXHRcdFx0Ly8gYWRkIHNvbWUgbWVhc3VyZXMgb2YgcmVzdHMgdG8gdGhlIHN0YXJ0IG9mIGVhY2ggdHJhY2suXG5cdFx0XHRmb3IgKHZhciB2diA9IDA7IHZ2IDwgdm9pY2VzLmxlbmd0aDsgdnYrKykge1xuXHRcdFx0XHR2YXIgaW5zZXJ0UG9pbnQgPSAwO1xuXHRcdFx0XHR3aGlsZSAodm9pY2VzW3Z2XVtpbnNlcnRQb2ludF0uZWxfdHlwZSAhPT0gXCJub3RlXCIgJiYgdm9pY2VzW3Z2XS5sZW5ndGggPiBpbnNlcnRQb2ludClcblx0XHRcdFx0XHRpbnNlcnRQb2ludCsrO1xuXHRcdFx0XHRpZiAodm9pY2VzW3Z2XS5sZW5ndGggPiBpbnNlcnRQb2ludCkge1xuXHRcdFx0XHRcdGZvciAodmFyIHcgPSAwOyB3IDwgZHJ1bUludHJvOyB3KyspIHtcblx0XHRcdFx0XHRcdC8vIElmIGl0IGlzIHRoZSBsYXN0IG1lYXN1cmUgb2YgaW50cm8sIHN1YnRyYWN0IHRoZSBwaWNrdXBzLlxuXHRcdFx0XHRcdFx0aWYgKHBpY2t1cHMgPT09IDAgfHwgdyA8IGRydW1JbnRyby0xKVxuXHRcdFx0XHRcdFx0XHR2b2ljZXNbdnZdLnNwbGljZShpbnNlcnRQb2ludCwgMCwge2VsX3R5cGU6IFwibm90ZVwiLCByZXN0OiB7dHlwZTogXCJyZXN0XCJ9LCBkdXJhdGlvbjogbWVhc3VyZUxlbmd0aH0sXG5cdFx0XHRcdFx0XHRcdFx0eyBlbF90eXBlOiBcImJhclwiIH0pO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZvaWNlc1t2dl0uc3BsaWNlKGluc2VydFBvaW50LCAwLCB7ZWxfdHlwZTogXCJub3RlXCIsIHJlc3Q6IHt0eXBlOiBcInJlc3RcIn0sIGR1cmF0aW9uOiBtZWFzdXJlTGVuZ3RoLXBpY2t1cHN9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHZvaWNlcztcblx0fTtcblxuXHRmdW5jdGlvbiBpbnRlcnByZXRUZW1wbyhlbGVtZW50KSB7XG5cdFx0dmFyIGR1cmF0aW9uID0gMS80O1xuXHRcdGlmIChlbGVtZW50LmR1cmF0aW9uKSB7XG5cdFx0XHRkdXJhdGlvbiA9IGVsZW1lbnQuZHVyYXRpb25bMF07XG5cdFx0fVxuXHRcdHZhciBicG0gPSA2MDtcblx0XHRpZiAoZWxlbWVudC5icG0pIHtcblx0XHRcdGJwbSA9IGVsZW1lbnQuYnBtO1xuXHRcdH1cblx0XHQvLyBUaGUgdGVtcG8gaXMgZGVmaW5lZCB3aXRoIGEgYmVhdCBvZiBhIDEvNCBub3RlLCBzbyB3ZSBuZWVkIHRvIGFkanVzdCBpdCBpZiB0aGUgdGVtcG8gaXMgZXhwcmVzc2VkIHdpdGggb3RoZXIgdGhhbiBhIHF1YXJ0ZXIgbm90ZS5cblx0XHQvLyBleHByZXNzZWREdXJhdGlvbiAqIGV4cHJlc3NlZEJlYXRzUGVyTWludXRlIC8gbGVuZ3RoT2ZRdWFydGVyTm90ZSA9IHF1YXJ0ZXJOb3Rlc1Blck1pbnV0ZVxuXHRcdHJldHVybiBkdXJhdGlvbiAqIGJwbSAvIDAuMjU7XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRlcnByZXRNZXRlcihlbGVtZW50KSB7XG5cdFx0dmFyIG1ldGVyO1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY29tbW9uX3RpbWVcIjpcblx0XHRcdFx0bWV0ZXIgPSB7IGVsX3R5cGU6ICdtZXRlcicsIG51bTogNCwgZGVuOiA0IH07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImN1dF90aW1lXCI6XG5cdFx0XHRcdG1ldGVyID0geyBlbF90eXBlOiAnbWV0ZXInLCBudW06IDIsIGRlbjogMiB9O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJzcGVjaWZpZWRcIjpcblx0XHRcdFx0Ly8gVE9ETy1QRVI6IG9ubHkgdGFraW5nIHRoZSBmaXJzdCBtZXRlciwgc28gdGhlIGNvbXBsZXggbWV0ZXJzIGFyZSBub3QgaGFuZGxlZC5cblx0XHRcdFx0bWV0ZXIgPSB7IGVsX3R5cGU6ICdtZXRlcicsIG51bTogZWxlbWVudC52YWx1ZVswXS5udW0sIGRlbjogZWxlbWVudC52YWx1ZVswXS5kZW4gfTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG5cdFx0XHRcdG1ldGVyID0geyBlbF90eXBlOiAnbWV0ZXInIH07XG5cdFx0fVxuXHRcdG1lYXN1cmVMZW5ndGggPSBtZXRlci5udW0vbWV0ZXIuZGVuO1xuXHRcdHJldHVybiBtZXRlcjtcblx0fVxufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXF1ZW5jZTtcbiIsIi8vICAgIGFiY19taWRpX2ZsYXR0ZW5lci5qczogVHVybiBhIGxpbmVhciBzZXJpZXMgb2YgZXZlbnRzIGludG8gYSBzZXJpZXMgb2YgTUlESSBjb21tYW5kcy5cbi8vICAgIENvcHlyaWdodCAoQykgMjAxMC0yMDE4IEdyZWdvcnkgRHlrZSAoZ3JlZ2R5a2UgYXQgZ21haWwgZG90IGNvbSkgYW5kIFBhdWwgUm9zZW5cbi8vXG4vLyAgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWRcbi8vICAgIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uXG4vLyAgICB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kXG4vLyAgICB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HXG4vLyAgICBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkRcbi8vICAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyAgICBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuLy8gV2UgaW5wdXQgYSBzZXQgb2Ygdm9pY2VzLCBidXQgdGhlIG5vdGVzIGFyZSBzdGlsbCBjb21wbGV4LiBUaGlzIHBhc3MgY2hhbmdlcyB0aGUgbG9naWNhbCBkZWZpbml0aW9uc1xuLy8gb2YgdGhlIGdyYWNlIG5vdGVzLCBkZWNvcmF0aW9ucywgdGllcywgdHJpcGxldHMsIHJlc3RzLCB0cmFuc3Bvc2l0aW9ucywga2V5cywgYW5kIGFjY2lkZW50YWxzIGludG8gYWN0dWFsIG5vdGUgZHVyYXRpb25zLlxuLy8gSXQgYWxzbyBleHRyYWN0cyBndWl0YXIgY2hvcmRzIHRvIGEgc2VwYXJhdGUgdm9pY2UgYW5kIHJlc29sdmVzIHRoZWlyIHJoeXRobS5cblxudmFyIGZsYXR0ZW47XG5cbihmdW5jdGlvbigpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIGJhckFjY2lkZW50YWxzO1xuXHR2YXIgYWNjaWRlbnRhbHM7XG5cdHZhciB0cmFuc3Bvc2U7XG5cdHZhciBiYWdwaXBlcztcblx0dmFyIG11bHRpcGxpZXI7XG5cdHZhciB0cmFja3M7XG5cdHZhciBzdGFydGluZ1RlbXBvO1xuXHR2YXIgc3RhcnRpbmdNZXRlcjtcblx0dmFyIHRlbXBvQ2hhbmdlRmFjdG9yID0gMTtcblx0dmFyIGluc3RydW1lbnQ7XG5cdHZhciBjdXJyZW50SW5zdHJ1bWVudDtcblx0Ly8gdmFyIGNoYW5uZWw7XG5cdHZhciBjdXJyZW50VHJhY2s7XG5cdHZhciBwaXRjaGVzVGllZDtcblx0dmFyIGxhc3ROb3RlRHVyYXRpb25Qb3NpdGlvbjtcblx0dmFyIGN1cnJlbnRUcmFja0NvdW50ZXI7XG5cblx0dmFyIG1ldGVyID0geyBudW06IDQsIGRlbjogNCB9O1xuXHR2YXIgY2hvcmRUcmFjaztcblx0dmFyIGNob3JkVHJhY2tGaW5pc2hlZDtcblx0dmFyIGNob3JkQ2hhbm5lbDtcblx0dmFyIGNob3JkSW5zdHJ1bWVudCA9IDA7XG5cdHZhciBkcnVtSW5zdHJ1bWVudCA9IDEyODtcblx0dmFyIGN1cnJlbnRDaG9yZHM7XG5cdHZhciBsYXN0Q2hvcmQ7XG5cdHZhciBiYXJCZWF0O1xuXHR2YXIgZ0Nob3JkVGFjZXQgPSBmYWxzZTtcblx0dmFyIGRvQmVhdEFjY2VudHMgPSB0cnVlO1xuXHR2YXIgc3RyZXNzQmVhdDEgPSAxMDU7XG5cdHZhciBzdHJlc3NCZWF0RG93biA9IDk1O1xuXHR2YXIgc3RyZXNzQmVhdFVwID0gODU7XG5cdHZhciBiZWF0RnJhY3Rpb24gPSAwLjI1O1xuXHR2YXIgbmV4dFZvbHVtZTtcblx0dmFyIG5leHRWb2x1bWVEZWx0YTtcblxuXHR2YXIgZHJ1bVRyYWNrO1xuXHR2YXIgZHJ1bVRyYWNrRmluaXNoZWQ7XG5cdHZhciBkcnVtRGVmaW5pdGlvbiA9IHt9O1xuXG5cdHZhciBub3JtYWxCcmVha0JldHdlZW5Ob3RlcyA9IDEuMC8xMjg7XHQvLyBhIDEyOHRoIG5vdGUgb2Ygc2lsZW5jZSBiZXR3ZWVuIG5vdGVzIGZvciBhcnRpY3VsYXRpb24uXG5cblx0ZmxhdHRlbiA9IGZ1bmN0aW9uKHZvaWNlcywgb3B0aW9ucykge1xuXHRcdGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuXHRcdGJhckFjY2lkZW50YWxzID0gW107XG5cdFx0YWNjaWRlbnRhbHMgPSBbMCwwLDAsMCwwLDAsMF07XG5cdFx0YmFncGlwZXMgPSBmYWxzZTtcblx0XHRtdWx0aXBsaWVyID0gMTtcblx0XHR0cmFja3MgPSBbXTtcblx0XHRzdGFydGluZ1RlbXBvID0gdW5kZWZpbmVkO1xuXHRcdHN0YXJ0aW5nTWV0ZXIgPSB1bmRlZmluZWQ7XG5cdFx0dGVtcG9DaGFuZ2VGYWN0b3IgPSAxO1xuXHRcdGluc3RydW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0Y3VycmVudEluc3RydW1lbnQgPSB1bmRlZmluZWQ7XG5cdFx0Ly8gY2hhbm5lbCA9IHVuZGVmaW5lZDtcblx0XHRjdXJyZW50VHJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0Y3VycmVudFRyYWNrQ291bnRlciA9IHVuZGVmaW5lZDtcblx0XHRwaXRjaGVzVGllZCA9IHt9O1xuXG5cdFx0Ly8gRm9yIHJlc29sdmluZyBjaG9yZHMuXG5cdFx0bWV0ZXIgPSB7IG51bTogNCwgZGVuOiA0IH07XG5cdFx0Y2hvcmRUcmFjayA9IFtdO1xuXHRcdGNob3JkQ2hhbm5lbCA9IHZvaWNlcy5sZW5ndGg7IC8vIGZpcnN0IGZyZWUgY2hhbm5lbCBmb3IgY2hvcmRzXG5cdFx0Y2hvcmRUcmFja0ZpbmlzaGVkID0gZmFsc2U7XG5cdFx0Y3VycmVudENob3JkcyA9IFtdO1xuXHRcdGxhc3RDaG9yZCA9IHVuZGVmaW5lZDtcblx0XHRiYXJCZWF0ID0gMDtcblx0XHRnQ2hvcmRUYWNldCA9IG9wdGlvbnMuY2hvcmRzT2ZmID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0ZG9CZWF0QWNjZW50cyA9IHRydWU7XG5cdFx0c3RyZXNzQmVhdDEgPSAxMDU7XG5cdFx0c3RyZXNzQmVhdERvd24gPSA5NTtcblx0XHRzdHJlc3NCZWF0VXAgPSA4NTtcblx0XHRiZWF0RnJhY3Rpb24gPSAwLjI1O1xuXHRcdG5leHRWb2x1bWUgPSB1bmRlZmluZWQ7XG5cdFx0bmV4dFZvbHVtZURlbHRhID0gdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9yIHRoZSBkcnVtL21ldHJvbm9tZSB0cmFjay5cblx0XHRkcnVtVHJhY2sgPSBbXTtcblx0XHRkcnVtVHJhY2tGaW5pc2hlZCA9IGZhbHNlO1xuXHRcdGRydW1EZWZpbml0aW9uID0ge307XG5cblx0XHR6ZXJvT3V0TWlsbGlzZWNvbmRzKHZvaWNlcyk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dHJhbnNwb3NlID0gMDtcblx0XHRcdGxhc3ROb3RlRHVyYXRpb25Qb3NpdGlvbiA9IC0xO1xuXHRcdFx0dmFyIHZvaWNlID0gdm9pY2VzW2ldO1xuXHRcdFx0Y3VycmVudFRyYWNrID0gW3sgY21kOiAncHJvZ3JhbScsIGNoYW5uZWw6IGksIGluc3RydW1lbnQ6IGluc3RydW1lbnQgfV07XG5cdFx0XHRjdXJyZW50VHJhY2tDb3VudGVyID0gMDtcblx0XHRcdHBpdGNoZXNUaWVkID0ge307XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHZvaWNlLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHZhciBlbGVtZW50ID0gdm9pY2Vbal07XG5cdFx0XHRcdHN3aXRjaCAoZWxlbWVudC5lbF90eXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIm5vdGVcIjpcblx0XHRcdFx0XHRcdHdyaXRlTm90ZShlbGVtZW50LCBvcHRpb25zLnZvaWNlc09mZik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwia2V5XCI6XG5cdFx0XHRcdFx0XHRhY2NpZGVudGFscyA9IHNldEtleVNpZ25hdHVyZShlbGVtZW50KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJtZXRlclwiOlxuXHRcdFx0XHRcdFx0aWYgKCFzdGFydGluZ01ldGVyKVxuXHRcdFx0XHRcdFx0XHRzdGFydGluZ01ldGVyID0gZWxlbWVudDtcblx0XHRcdFx0XHRcdG1ldGVyID0gZWxlbWVudDtcblx0XHRcdFx0XHRcdGJlYXRGcmFjdGlvbiA9IGdldEJlYXRGcmFjdGlvbihtZXRlcik7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwidGVtcG9cIjpcblx0XHRcdFx0XHRcdGlmICghc3RhcnRpbmdUZW1wbylcblx0XHRcdFx0XHRcdFx0c3RhcnRpbmdUZW1wbyA9IGVsZW1lbnQucXBtO1xuXHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHR0ZW1wb0NoYW5nZUZhY3RvciA9IGVsZW1lbnQucXBtID8gc3RhcnRpbmdUZW1wbyAvIGVsZW1lbnQucXBtIDogMTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJ0cmFuc3Bvc2VcIjpcblx0XHRcdFx0XHRcdHRyYW5zcG9zZSA9IGVsZW1lbnQudHJhbnNwb3NlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImJhclwiOlxuXHRcdFx0XHRcdFx0aWYgKGNob3JkVHJhY2subGVuZ3RoID4gMCAmJiBpID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHJlc29sdmVDaG9yZHMoKTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudENob3JkcyA9IFtdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YmFyQmVhdCA9IDA7XG5cdFx0XHRcdFx0XHRiYXJBY2NpZGVudGFscyA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGkgPT09IDApIC8vIE9ubHkgd3JpdGUgdGhlIGRydW0gcGFydCBvbiB0aGUgZmlyc3Qgdm9pY2Ugc28gdGhhdCBpdCBpcyBub3QgZHVwbGljYXRlZC5cblx0XHRcdFx0XHRcdFx0d3JpdGVEcnVtKHZvaWNlcy5sZW5ndGgrMSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiYmFncGlwZXNcIjpcblx0XHRcdFx0XHRcdGJhZ3BpcGVzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJpbnN0cnVtZW50XCI6XG5cdFx0XHRcdFx0XHRpZiAoaW5zdHJ1bWVudCA9PT0gdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0XHRpbnN0cnVtZW50ID0gZWxlbWVudC5wcm9ncmFtO1xuXHRcdFx0XHRcdFx0Y3VycmVudEluc3RydW1lbnQgPSBlbGVtZW50LnByb2dyYW07XG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFRyYWNrLmxlbmd0aCA+IDAgJiYgY3VycmVudFRyYWNrW2N1cnJlbnRUcmFjay5sZW5ndGgtMV0uY21kID09PSAncHJvZ3JhbScpXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRUcmFja1tjdXJyZW50VHJhY2subGVuZ3RoLTFdLmluc3RydW1lbnQgPSBlbGVtZW50LnByb2dyYW07XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGlpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGlpID0gY3VycmVudFRyYWNrLmxlbmd0aC0xOyBpaSA+PSAwICYmIGN1cnJlbnRUcmFja1tpaV0uY21kICE9PSAncHJvZ3JhbSc7IGlpLS0pXG5cdFx0XHRcdFx0XHRcdFx0O1xuXHRcdFx0XHRcdFx0XHRpZiAoaWkgPCAwIHx8IGN1cnJlbnRUcmFja1tpaV0uaW5zdHJ1bWVudCAhPT0gZWxlbWVudC5wcm9ncmFtKVxuXHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRUcmFjay5wdXNoKHtjbWQ6ICdwcm9ncmFtJywgY2hhbm5lbDogaSwgaW5zdHJ1bWVudDogZWxlbWVudC5wcm9ncmFtfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiY2hhbm5lbFwiOlxuXHRcdFx0XHRcdC8vIFx0aWYgKGNoYW5uZWwgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHQvLyBcdFx0Y2hhbm5lbCA9IGVsZW1lbnQuY2hhbm5lbDtcblx0XHRcdFx0XHQvLyBcdGN1cnJlbnRUcmFja1swXS5jaGFubmVsID0gZWxlbWVudC5jaGFubmVsO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImRydW1cIjpcblx0XHRcdFx0XHRcdGRydW1EZWZpbml0aW9uID0gbm9ybWFsaXplRHJ1bURlZmluaXRpb24oZWxlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImdjaG9yZFwiOlxuXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmNob3Jkc09mZilcblx0XHRcdFx0XHRcdFx0Z0Nob3JkVGFjZXQgPSBlbGVtZW50LnRhY2V0O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImJlYXRcIjpcblx0XHRcdFx0XHRcdHN0cmVzc0JlYXQxID0gZWxlbWVudC5iZWF0c1swXTtcblx0XHRcdFx0XHRcdHN0cmVzc0JlYXREb3duID0gZWxlbWVudC5iZWF0c1sxXTtcblx0XHRcdFx0XHRcdHN0cmVzc0JlYXRVcCA9IGVsZW1lbnQuYmVhdHNbMl07XG5cdFx0XHRcdFx0XHQvLyBUT0RPLVBFUjogYWxzbyB1c2UgdGhlIGxhc3QgcGFyYW1ldGVyIC0gd2hpY2ggY2hhbmdlcyB3aGljaCBiZWF0cyBhcmUgc3Ryb25nLlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInZvbFwiOlxuXHRcdFx0XHRcdFx0bmV4dFZvbHVtZSA9IGVsZW1lbnQudm9sdW1lO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcInZvbGluY1wiOlxuXHRcdFx0XHRcdFx0bmV4dFZvbHVtZURlbHRhID0gZWxlbWVudC52b2x1bWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiYmVhdGFjY2VudHNcIjpcblx0XHRcdFx0XHRcdGRvQmVhdEFjY2VudHMgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJNSURJIGNyZWF0aW9uLiBVbmtub3duIGVsX3R5cGU6IFwiICsgZWxlbWVudC5lbF90eXBlICsgXCJcXG5cIik7Ly8ganNoaW50IGlnbm9yZTpsaW5lXG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRUcmFja1swXS5pbnN0cnVtZW50ID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdGN1cnJlbnRUcmFja1swXS5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudCA/IGluc3RydW1lbnQgOiAwO1xuXHRcdFx0dHJhY2tzLnB1c2goY3VycmVudFRyYWNrKTtcblx0XHRcdGlmIChjaG9yZFRyYWNrLmxlbmd0aCA+IDApIC8vIERvbid0IGRvIGNob3JkcyBvbiBtb3JlIHRoYW4gb25lIHRyYWNrLCBzbyB0dXJuIG9mZiBjaG9yZCBkZXRlY3Rpb24gYWZ0ZXIgd2UgY3JlYXRlIGl0LlxuXHRcdFx0XHRjaG9yZFRyYWNrRmluaXNoZWQgPSB0cnVlO1xuXHRcdFx0aWYgKGRydW1UcmFjay5sZW5ndGggPiAwKSAvLyBEb24ndCBkbyBkcnVtcyBvbiBtb3JlIHRoYW4gb25lIHRyYWNrLCBzbyB0dXJuIG9mZiBkcnVtIGFmdGVyIHdlIGNyZWF0ZSBpdC5cblx0XHRcdFx0ZHJ1bVRyYWNrRmluaXNoZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoY2hvcmRUcmFjay5sZW5ndGggPiAwKVxuXHRcdFx0dHJhY2tzLnB1c2goY2hvcmRUcmFjayk7XG5cdFx0aWYgKGRydW1UcmFjay5sZW5ndGggPiAwKVxuXHRcdFx0dHJhY2tzLnB1c2goZHJ1bVRyYWNrKTtcblx0XHQvLyBBZGp1c3QgdGhlIHRlbXBvIGFjY29yZGluZyB0byB0aGUgbWV0ZXIuIFRoZSBydWxlcyBhcmUgdGhpczpcblx0XHQvLyAxKSBJZiB0aGUgZGVub21pbmF0b3IgaXMgMiBvciA0LCB0aGVuIGFsd2F5cyBtYWtlIGEgYmVhdCBiZSB0aGUgZGVub21pbmF0b3IuXG5cdFx0Ly9cblx0XHQvLyAyKSBJZiB0aGUgZGVub21pbmF0b3IgaXMgOCBvciAxNiwgdGhlbjpcblx0XHQvLyBhKSBJZiB0aGUgbnVtZXJhdG9yIGlzIGRpdmlzaWJsZSBieSAzLCB0aGUgYmVhdCBpcyAzKmRlbm9taW5hdG9yLlxuXHRcdC8vIGIpIE90aGVyd2lzZSB0aGUgYmVhdCBpcyB0aGUgZGVub21pbmF0b3IuXG5cdFx0Ly9cblx0XHQvLyAzKSBJZiB0aGUgZGVub21pbmF0b3IgaXMgYW55dGhpbmcgZWxzZSwgdGhlbiBkb24ndCB3b3JyeSBhYm91dCBpdCBiZWNhdXNlIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZS4gRG9uJ3QgbW9kaWZ5IGl0IGFuZCBob3BlIGZvciB0aGUgYmVzdC5cblx0XHQvL1xuXHRcdC8vIFJpZ2h0IG5vdywgdGhlIHN0YXJ0aW5nVGVtcG8gaXMgY2FsY3VsYXRlZCBmb3IgYSBxdWFydGVyIG5vdGUsIHNvIG1vZGlmeSBpdCBpZiBuZWNlc3NhcnkuXG5cdFx0Ly8gdmFyIG51bSA9IHN0YXJ0aW5nTWV0ZXIgPyBwYXJzZUludChzdGFydGluZ01ldGVyLm51bSwgMTApIDogbWV0ZXIubnVtO1xuXHRcdC8vIHZhciBkZW4gPSBzdGFydGluZ01ldGVyID8gcGFyc2VJbnQoc3RhcnRpbmdNZXRlci5kZW4sIDEwKSA6IG1ldGVyLmRlbjtcblx0XHQvLyBpZiAoZGVuID09PSAyKVxuXHRcdC8vIFx0c3RhcnRpbmdUZW1wbyAqPSAyO1xuXHRcdC8vIGVsc2UgaWYgKGRlbiA9PT0gOCkge1xuXHRcdC8vIFx0aWYgKHBhcnNlSW50KG51bSwgMTApICUgMyA9PT0gMClcblx0XHQvLyBcdFx0c3RhcnRpbmdUZW1wbyAqPSAzLzI7XG5cdFx0Ly8gXHRlbHNlXG5cdFx0Ly8gXHRcdHN0YXJ0aW5nVGVtcG8gLz0gMjtcblx0XHQvLyB9IGVsc2UgaWYgKGRlbiA9PT0gMTYpIHtcblx0XHQvLyBcdGlmIChudW0gJSAzID09PSAwKVxuXHRcdC8vIFx0XHRzdGFydGluZ1RlbXBvICo9IDMvNDtcblx0XHQvLyBcdGVsc2Vcblx0XHQvLyBcdFx0c3RhcnRpbmdUZW1wbyAvPSA0O1xuXHRcdC8vIH1cblxuXHRcdHJldHVybiB7IHRlbXBvOiBzdGFydGluZ1RlbXBvLCBpbnN0cnVtZW50OiBpbnN0cnVtZW50LCB0cmFja3M6IHRyYWNrcywgdG90YWxEdXJhdGlvbjogdG90YWxEdXJhdGlvbih0cmFja3MpIH07XG5cdH07XG5cblx0ZnVuY3Rpb24gemVyb091dE1pbGxpc2Vjb25kcyh2b2ljZXMpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHZvaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHZvaWNlID0gdm9pY2VzW2ldO1xuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCB2b2ljZS5sZW5ndGg7IGorKykge1xuXHRcdFx0XHR2YXIgZWxlbWVudCA9IHZvaWNlW2pdO1xuXHRcdFx0XHRkZWxldGUgZWxlbWVudC5jdXJyZW50VHJhY2tNaWxsaXNlY29uZHM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gdG90YWxEdXJhdGlvbih0cmFja3MpIHtcblx0XHR2YXIgdG90YWwgPSAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdHJhY2sgPSB0cmFja3NbaV07XG5cdFx0XHR2YXIgdHJhY2tUb3RhbCA9IDA7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHRyYWNrLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHZhciBldmVudCA9IHRyYWNrW2pdO1xuXHRcdFx0XHRpZiAoZXZlbnQuZHVyYXRpb24pXG5cdFx0XHRcdFx0dHJhY2tUb3RhbCArPSBldmVudC5kdXJhdGlvbjtcblx0XHRcdH1cblx0XHRcdHRvdGFsID0gTWF0aC5tYXgodG90YWwsIHRyYWNrVG90YWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gdG90YWw7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRCZWF0RnJhY3Rpb24obWV0ZXIpIHtcblx0XHRzd2l0Y2ggKG1ldGVyLmRlbikge1xuXHRcdFx0Y2FzZSAyOiByZXR1cm4gMC41O1xuXHRcdFx0Y2FzZSA0OiByZXR1cm4gMC4yNTtcblx0XHRcdGNhc2UgODogcmV0dXJuIDAuMzc1O1xuXHRcdFx0Y2FzZSAxNjogcmV0dXJuIDAuMTI1O1xuXHRcdH1cblx0XHRyZXR1cm4gMC4yNTtcblx0fVxuXHQvL1xuXHQvLyBUaGUgYWxnb3JpdGhtIGZvciBjaG9yZHMgaXM6XG5cdC8vIC0gVGhlIGNob3JkcyBhcmUgZG9uZSBpbiBhIHNlcGFyYXRlIHRyYWNrLlxuXHQvLyAtIElmIHRoZXJlIGFyZSBub3RlcyBiZWZvcmUgdGhlIGZpcnN0IGNob3JkLCB0aGVuIHB1dCB0aGF0IG11Y2ggc2lsZW5jZSB0byBzdGFydCB0aGUgdHJhY2suXG5cdC8vIC0gVGhlIHBhdHRlcm4gb2YgY2hvcmQgZXhwcmVzc2lvbiBkZXBlbmRzIG9uIHRoZSBtZXRlciwgYW5kIGhvdyBtYW55IGNob3JkcyBhcmUgaW4gYSBtZWFzdXJlLlxuXHQvLyAtIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBhIG1lYXN1cmUgd2lsbCBoYXZlIGFuIGluY29ycmVjdCBudW1iZXIgb2YgYmVhdHMsIGlmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW5cblx0Ly8gc3RhcnQgdGhlIHBhdHRlcm4gYW5ldyBvbiB0aGUgbmV4dCBtZWFzdXJlIG51bWJlci5cblx0Ly8gLSBJZiBhIGNob3JkIHJvb3QgaXMgbm90IEEtRywgdGhlbiBpZ25vcmUgaXQgYXMgaWYgdGhlIGNob3JkIHdhc24ndCB0aGVyZSBhdCBhbGwuXG5cdC8vIC0gSWYgYSBjaG9yZCBtb2RpZmljYXRpb24gaXNuJ3QgaW4gb3VyIHN1cHBvcnRlZCBsaXN0LCBjaGFuZ2UgaXQgdG8gYSBtYWpvciB0cmlhZC5cblx0Ly9cblx0Ly8gLSBJZiB0aGVyZSBpcyBvbmx5IG9uZSBjaG9yZCBpbiBhIG1lYXN1cmU6XG5cdC8vXHRcdC0gSWYgMi80LCBwbGF5IHJvb3QgY2hvcmRcblx0Ly9cdFx0LSBJZiBjdXQgdGltZSwgcGxheSByb290KDEpIGNob3JkKDMpXG5cdC8vXHRcdC0gSWYgMy80LCBwbGF5IHJvb3QgY2hvcmQgY2hvcmRcblx0Ly9cdFx0LSBJZiA0LzQgb3IgY29tbW9uIHRpbWUsIHBsYXkgcm9vdCBjaG9yZCBmaWZ0aCBjaG9yZFxuXHQvL1x0XHQtIElmIDYvOCwgcGxheSByb290KDEpIGNob3JkKDMpIGZpZnRoKDQpIGNob3JkKDYpXG5cdC8vXHRcdC0gRm9yIGFueSBvdGhlciBtZXRlciwgcGxheSB0aGUgZnVsbCBjaG9yZCBvbiBlYWNoIGJlYXQuIChUT0RPLVBFUjogZXhwYW5kIHRoaXMgYXMgbW9yZSBzdXBwb3J0IGlzIGFkZGVkLilcblx0Ly9cblx0Ly9cdC0gSWYgdGhlcmUgaXMgYSBjaG9yZCBzcGVjaWZpZWQgdGhhdCBpcyBub3Qgb24gYSBiZWF0LCBtb3ZlIGl0IGVhcmxpZXIgdG8gdGhlIHByZXZpb3VzIGJlYXQsIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgY2hvcmQgb24gdGhhdCBiZWF0LlxuXHQvL1x0LSBPdGhlcndpc2UsIG1vdmUgaXQgbGF0ZXIsIHVubGVzcyB0aGVyZSBpcyBhbHJlYWR5IGEgY2hvcmQgb24gdGhhdCBiZWF0LlxuXHQvLyBcdC0gT3RoZXJ3aXNlLCBpZ25vcmUgaXQuIChUT0RPLVBFUjogZXhwYW5kIHRoaXMgYXMgbW9yZSBzdXBwb3J0IGlzIGFkZGVkLilcblx0Ly9cblx0Ly8gLSBJZiB0aGVyZSBpcyBhIGNob3JkIG9uIHRoZSBzZWNvbmQgYmVhdCwgcGxheSBhIGNob3JkIGZvciB0aGUgZmlyc3QgYmVhdCBpbnN0ZWFkIG9mIGEgYmFzcyBub3RlLlxuXHQvLyAtIExpa2V3aXNlLCBpZiB0aGVyZSBpcyBhIGNob3JkIG9uIHRoZSBmb3VydGggYmVhdCBvZiA0LzQsIHBsYXkgYSBjaG9yZCBvbiB0aGUgdGhpcmQgYmVhdCBpbnN0ZWFkIG9mIGEgYmFzcyBub3RlLlxuXHQvL1xuXHR2YXIgYnJlYWtTeW5vbnltcyA9IFsgJ2JyZWFrJywgJyhicmVhayknLCAnbm8gY2hvcmQnLCAnbi5jLicsICd0YWNldCddO1xuXG5cdGZ1bmN0aW9uIGZpbmRDaG9yZChlbGVtKSB7XG5cdFx0aWYgKGdDaG9yZFRhY2V0KVxuXHRcdFx0cmV0dXJuICdicmVhayc7XG5cblx0XHQvLyBUT0RPLVBFUjogSnVzdCB1c2luZyB0aGUgZmlyc3QgY2hvcmQgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUuXG5cdFx0aWYgKGNob3JkVHJhY2tGaW5pc2hlZCB8fCAhZWxlbS5jaG9yZCB8fCBlbGVtLmNob3JkLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiBudWxsO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBmaXJzdCBhbm5vdGF0aW9uIHRoYXQgaXMgYSByZWd1bGFyIGNob3JkOiB0aGF0IGlzLCBpdCBpcyBpbiB0aGUgZGVmYXVsdCBwbGFjZSBvciBpcyBhIHJlY29nbml6ZWQgXCJ0YWNldFwiIHBocmFzZS5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGVsZW0uY2hvcmQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjaCA9IGVsZW0uY2hvcmRbaV07XG5cdFx0XHRpZiAoY2gucG9zaXRpb24gPT09ICdkZWZhdWx0Jylcblx0XHRcdFx0cmV0dXJuIGNoLm5hbWU7XG5cdFx0XHRpZiAoYnJlYWtTeW5vbnltcy5pbmRleE9mKGNoLm5hbWUudG9Mb3dlckNhc2UoKSkgPj0gMClcblx0XHRcdFx0cmV0dXJuICdicmVhayc7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gdGltZUZyb21TdGFydCgpIHtcblx0XHR2YXIgZGlzdGFuY2UgPSAwO1xuXHRcdGZvciAodmFyIGN0ID0gMDsgY3QgPCBjdXJyZW50VHJhY2subGVuZ3RoOyBjdCsrKSB7XG5cdFx0XHRpZiAoY3VycmVudFRyYWNrW2N0XS5jbWQgPT09ICdtb3ZlJylcblx0XHRcdFx0ZGlzdGFuY2UgKz0gY3VycmVudFRyYWNrW2N0XS5kdXJhdGlvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGRpc3RhbmNlO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVOb3RlKGVsZW0sIHZvaWNlT2ZmKSB7XG5cdFx0Ly9cblx0XHQvLyBDcmVhdGUgYSBzZXJpZXMgb2Ygbm90ZSBldmVudHMgdG8gYXBwZW5kIHRvIHRoZSBjdXJyZW50IHRyYWNrLlxuXHRcdC8vIFRoZSBvdXRwdXQgZXZlbnQgaXMgb25lIG9mOiB7IHBpdGNoU3RhcnQ6IHBpdGNoX2luX2FiY191bml0cywgdm9sdW1lOiBmcm9tXzFfdG9fNjQgfVxuXHRcdC8vIHsgcGl0Y2hTdG9wOiBwaXRjaF9pbl9hYmNfdW5pdHMgfVxuXHRcdC8vIHsgbW92ZVRpbWU6IGR1cmF0aW9uX2luX2FiY191bml0cyB9XG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGd1aXRhciBjaG9yZHMsIHRoZW4gdGhleSBhcmUgcHV0IGluIGEgc2VwYXJhdGUgdHJhY2ssIGJ1dCB0aGV5IGhhdmUgdGhlIHNhbWUgZm9ybWF0LlxuXHRcdC8vXG5cblx0XHR2YXIgdm9sdW1lO1xuXHRcdGlmIChuZXh0Vm9sdW1lKSB7XG5cdFx0XHR2b2x1bWUgPSBuZXh0Vm9sdW1lO1xuXHRcdFx0bmV4dFZvbHVtZSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKCFkb0JlYXRBY2NlbnRzKSB7XG5cdFx0XHR2b2x1bWUgPSBzdHJlc3NCZWF0RG93bjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKGJhckJlYXQgPT09IDApXG5cdFx0XHRcdHZvbHVtZSA9IHN0cmVzc0JlYXQxO1xuXHRcdFx0ZWxzZSBpZiAoYmFyQmVhdCAlIGJlYXRGcmFjdGlvbiA8IDAuMDAxKSAvLyBBIGxpdHRsZSBzbG9wIGJlY2F1c2Ugb2YgSmF2YVNjcmlwdCBmbG9hdGluZyBwb2ludCBtYXRoLlxuXHRcdFx0XHR2b2x1bWUgPSBzdHJlc3NCZWF0RG93bjtcblx0XHRcdGVsc2Vcblx0XHRcdFx0dm9sdW1lID0gc3RyZXNzQmVhdFVwO1xuXHRcdH1cblx0XHRpZiAobmV4dFZvbHVtZURlbHRhKSB7XG5cdFx0XHR2b2x1bWUgKz0gbmV4dFZvbHVtZURlbHRhO1xuXHRcdFx0bmV4dFZvbHVtZURlbHRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodm9sdW1lIDwgMClcblx0XHRcdHZvbHVtZSA9IDA7XG5cdFx0aWYgKHZvbHVtZSA+IDEyNylcblx0XHRcdHZvbHVtZSA9IDEyNztcblx0XHR2YXIgdmVsb2NpdHkgPSB2b2ljZU9mZiA/IDAgOiB2b2x1bWU7XG5cdFx0dmFyIGNob3JkID0gZmluZENob3JkKGVsZW0pO1xuXHRcdGlmIChjaG9yZCkge1xuXHRcdFx0dmFyIGMgPSBpbnRlcnByZXRDaG9yZChjaG9yZCk7XG5cdFx0XHQvLyBJZiB0aGlzIGlzbid0IGEgcmVjb2duaXplZCBjaG9yZCwganVzdCBjb21wbGV0ZWx5IGlnbm9yZSBpdC5cblx0XHRcdGlmIChjKSB7XG5cdFx0XHRcdC8vIElmIHdlIGV2ZXIgaGF2ZSBhIGNob3JkIGluIHRoaXMgdm9pY2UsIHRoZW4gd2UgYWRkIHRoZSBjaG9yZCB0cmFjay5cblx0XHRcdFx0Ly8gSG93ZXZlciwgaWYgdGhlcmUgYXJlIGNob3JkcyBvbiBtb3JlIHRoYW4gb25lIHZvaWNlLCB0aGVuIGp1c3QgdXNlIHRoZSBmaXJzdCB2b2ljZS5cblx0XHRcdFx0aWYgKGNob3JkVHJhY2subGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0Y2hvcmRUcmFjay5wdXNoKHtjbWQ6ICdwcm9ncmFtJywgY2hhbm5lbDogY2hvcmRDaGFubmVsLCBpbnN0cnVtZW50OiBjaG9yZEluc3RydW1lbnR9KTtcblx0XHRcdFx0XHQvLyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGZhciBpbiB0aW1lIHRoZSBjaG9yZCBzdGFydGVkOiBpZiB0aGVyZSBhcmUgcGlja3VwIG5vdGVzIGJlZm9yZSB0aGUgY2hvcmRzIHN0YXJ0LCB3ZSBuZWVkIHBhdXNlcy5cblx0XHRcdFx0XHR2YXIgZGlzdGFuY2UgPSB0aW1lRnJvbVN0YXJ0KCk7XG5cdFx0XHRcdFx0aWYgKGRpc3RhbmNlID4gMClcblx0XHRcdFx0XHRcdGNob3JkVHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBkaXN0YW5jZSp0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxhc3RDaG9yZCA9IGM7XG5cdFx0XHRcdGN1cnJlbnRDaG9yZHMucHVzaCh7Y2hvcmQ6IGxhc3RDaG9yZCwgYmVhdDogYmFyQmVhdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbGVtLnN0YXJ0VHJpcGxldCkge1xuXHRcdFx0bXVsdGlwbGllciA9IGVsZW0udHJpcGxldE11bHRpcGxpZXI7XG5cdFx0fVxuXG5cdFx0dmFyIGR1cmF0aW9uID0gKGVsZW0uZHVyYXRpb25DbGFzcyA/IGVsZW0uZHVyYXRpb25DbGFzcyA6IGVsZW0uZHVyYXRpb24pICptdWx0aXBsaWVyO1xuXHRcdGJhckJlYXQgKz0gZHVyYXRpb247XG5cblx0XHQvLyBpZiB0aGVyZSBhcmUgZ3JhY2Ugbm90ZXMsIHRoZW4gYWxzbyBwbGF5IHRoZW0uXG5cdFx0Ly8gSSdtIG5vdCBzdXJlIHRoZXJlIGlzIGFuIGV4YWN0IHJ1bGUgZm9yIHRoZSBsZW5ndGggb2YgdGhlIG5vdGVzLiBNeSBydWxlLCB1bmxlc3MgSSBmaW5kXG5cdFx0Ly8gYSBiZXR0ZXIgb25lIGlzOiB0aGUgZ3JhY2Ugbm90ZXMgY2Fubm90IHRha2UgbW9yZSB0aGFuIDEvMiBvZiB0aGUgbWFpbiBub3RlJ3MgdmFsdWUuXG5cdFx0Ly8gQSBncmFjZSBub3RlIChvZiAxLzggbm90ZSBkdXJhdGlvbikgdGFrZXMgMS84IG9mIHRoZSBtYWluIG5vdGUncyB2YWx1ZS5cblx0XHR2YXIgZ3JhY2VzO1xuXHRcdGlmIChlbGVtLmdyYWNlbm90ZXMpIHtcblx0XHRcdC8vIFRoZXJlIGFyZSB0d28gY2FzZXM6IGlmIHRoaXMgaXMgYmFncGlwZSwgdGhlIGdyYWNlIG5vdGVzIGFyZSBwbGF5ZWQgb24gdGhlIGJlYXQgd2l0aCB0aGUgY3VycmVudCBub3RlLlxuXHRcdFx0Ly8gTm9ybWFsbHksIHRoZSBncmFjZSBub3RlcyB3b3VsZCBiZSBwbGF5ZWQgYmVmb3JlIHRoZSBiZWF0LiAoSWYgdGhpcyBpcyB0aGUgZmlyc3Qgbm90ZSBpbiB0aGUgdHJhY2ssIGhvd2V2ZXIsIHRoZW4gaXQgaXMgcGxheWVkIG9uIHRoZSBjdXJyZW50IGJlYXQuKVxuXHRcdFx0Ly8gVGhlIHJlYXNvbiBmb3IgdGhlIGV4Y2VwdGlvbiBvbiB0aGUgZmlyc3Qgbm90ZSBpcyB0aGF0IGl0IHdvdWxkIG90aGVyd2lzZSBtb3ZlIHRoZSB3aG9sZSB0cmFjayBpbiB0aW1lIGFuZCB3b3VsZCBhZmZlY3QgYWxsIHRoZSBvdGhlciB0cmFja3MuXG5cdFx0XHR2YXIgc3RlYWxGcm9tQ3VycmVudCA9IChiYWdwaXBlcyB8fCBsYXN0Tm90ZUR1cmF0aW9uUG9zaXRpb24gPCAwIHx8IGN1cnJlbnRUcmFjay5sZW5ndGggPT09IDApO1xuXHRcdFx0dmFyIHN0ZWFsRnJvbUR1cmF0aW9uID0gc3RlYWxGcm9tQ3VycmVudCA/IGR1cmF0aW9uIDogY3VycmVudFRyYWNrW2xhc3ROb3RlRHVyYXRpb25Qb3NpdGlvbl0uZHVyYXRpb247XG5cdFx0XHRncmFjZXMgPSBwcm9jZXNzR3JhY2VOb3RlcyhlbGVtLmdyYWNlbm90ZXMsIHN0ZWFsRnJvbUR1cmF0aW9uKTtcblx0XHRcdGlmICghYmFncGlwZXMpIHtcblx0XHRcdFx0ZHVyYXRpb24gPSB3cml0ZUdyYWNlTm90ZXMoZ3JhY2VzLCBzdGVhbEZyb21DdXJyZW50LCBkdXJhdGlvbiwgbnVsbCwgdmVsb2NpdHkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRoZSBjdXJyZW50VHJhY2tDb3VudGVyIGlzIHRoZSBudW1iZXIgb2Ygd2hvbGUgbm90ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwaWVjZS5cblx0XHQvLyBUaGUgYmVhdCBmcmFjdGlvbiBpcyB0aGUgbm90ZSB0aGF0IGdldHMgYSBiZWF0ICguMjUgaXMgYSBxdWFydGVyIG5vdGUpXG5cdFx0Ly8gVGhlIHRlbXBvIGlzIGluIG1pbnV0ZXMgYW5kIHdlIHdhbnQgdG8gZ2V0IHRvIG1pbGxpc2Vjb25kcy5cblx0XHRpZiAoIWVsZW0uY3VycmVudFRyYWNrTWlsbGlzZWNvbmRzKVxuXHRcdFx0ZWxlbS5jdXJyZW50VHJhY2tNaWxsaXNlY29uZHMgPSBbXTtcblx0XHRlbGVtLmN1cnJlbnRUcmFja01pbGxpc2Vjb25kcy5wdXNoKGN1cnJlbnRUcmFja0NvdW50ZXIgLyBiZWF0RnJhY3Rpb24gLyBzdGFydGluZ1RlbXBvICogNjAqMTAwMCk7XG5cdFx0aWYgKGVsZW0ucGl0Y2hlcykge1xuXHRcdFx0aWYgKGdyYWNlcyAmJiBiYWdwaXBlcykge1xuXHRcdFx0XHQvLyBJZiBpdCBpcyBiYWdwaXBlcywgdGhlbiB0aGUgZ3JhY2VzIGFyZSBwbGF5ZWQgd2l0aCB0aGUgbm90ZS4gSWYgdGhlIGdyYWNlIGhhcyB0aGUgc2FtZSBwaXRjaCBhcyB0aGUgbm90ZSwgdGhlbiB3ZSBqdXN0IHNraXAgaXQuXG5cdFx0XHRcdGR1cmF0aW9uID0gd3JpdGVHcmFjZU5vdGVzKGdyYWNlcywgdHJ1ZSwgZHVyYXRpb24sIG51bGwsIHZlbG9jaXR5KTtcblx0XHRcdH1cblx0XHRcdHZhciBwaXRjaGVzID0gW107XG5cdFx0XHRlbGVtLm1pZGlQaXRjaGVzID0gW107XG5cdFx0XHRmb3IgKHZhciBpPTA7IGk8ZWxlbS5waXRjaGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBub3RlID0gZWxlbS5waXRjaGVzW2ldO1xuXHRcdFx0XHR2YXIgYWN0dWFsUGl0Y2ggPSBhZGp1c3RQaXRjaChub3RlKTtcblx0XHRcdFx0cGl0Y2hlcy5wdXNoKHsgcGl0Y2g6IGFjdHVhbFBpdGNoLCBzdGFydFRpZTogbm90ZS5zdGFydFRpZSB9KTtcblx0XHRcdFx0ZWxlbS5taWRpUGl0Y2hlcy5wdXNoKHsgcGl0Y2g6IGFjdHVhbFBpdGNoKzYwLCBkdXJhdGlvbkluTWVhc3VyZXM6IGR1cmF0aW9uKnRlbXBvQ2hhbmdlRmFjdG9yLCB2b2x1bWU6IHZvbHVtZSwgaW5zdHJ1bWVudDogY3VycmVudEluc3RydW1lbnQgfSk7IC8vIFRPRE8tUEVSOiB3aHkgaXMgdGhlIGludGVybmFsIG51bWJlcmluZyBzeXN0ZW0gb2Zmc2V0IGJ5IDYwIGZyb20gbWlkaT8gSXQgc2hvdWxkIHByb2JhYmx5IGJlIHRoZSBzYW1lIGFzIG1pZGkuXG5cblx0XHRcdFx0aWYgKCFwaXRjaGVzVGllZFsnJythY3R1YWxQaXRjaF0pXHQvLyBJZiB0aGlzIGlzIHRoZSBzZWNvbmQgbm90ZSBvZiBhIHRpZSwgd2UgZG9uJ3Qgc3RhcnQgaXQgYWdhaW4uXG5cdFx0XHRcdFx0Y3VycmVudFRyYWNrLnB1c2goeyBjbWQ6ICdzdGFydCcsIHBpdGNoOiBhY3R1YWxQaXRjaCwgdm9sdW1lOiB2ZWxvY2l0eSB9KTtcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Ly8gYnV0IHdlIGRvIGFkZCB0aGUgZHVyYXRpb24gdG8gd2hhdCB3ZSBjYWxsIGJhY2suXG5cdFx0XHRcdFx0Zm9yICh2YXIgbGFzdCA9IGN1cnJlbnRUcmFjay5sZW5ndGgtMTsgbGFzdCA+PSAwOyBsYXN0LS0pIHtcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50VHJhY2tbbGFzdF0uY21kID09PSAnc3RhcnQnICYmIGN1cnJlbnRUcmFja1tsYXN0XS5waXRjaCA9PT0gYWN0dWFsUGl0Y2ggJiYgY3VycmVudFRyYWNrW2xhc3RdLmVsZW0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBpdGNoQXJyYXkgPSBjdXJyZW50VHJhY2tbbGFzdF0uZWxlbS5taWRpUGl0Y2hlcztcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbGFzdDIgPSAwOyBsYXN0MiA8IHBpdGNoQXJyYXkubGVuZ3RoOyBsYXN0MisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHBpdGNoQXJyYXlbbGFzdDJdLnBpdGNoLTYwID09PSBhY3R1YWxQaXRjaCkgeyAvLyBUT0RPLVBFUjogdGhlIDYwIGlzIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBtaWRpIHBpdGNoIG51bWJlcnMgYWdhaW4uXG5cdFx0XHRcdFx0XHRcdFx0XHRwaXRjaEFycmF5W2xhc3QyXS5kdXJhdGlvbkluTWVhc3VyZXMgKz0gZHVyYXRpb24gKiB0ZW1wb0NoYW5nZUZhY3Rvcjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG5vdGUuc3RhcnRUaWUpIHtcblx0XHRcdFx0XHRwaXRjaGVzVGllZFsnJyArIGFjdHVhbFBpdGNoXSA9IHRydWU7XG5cdFx0XHRcdFx0Y3VycmVudFRyYWNrW2N1cnJlbnRUcmFjay5sZW5ndGgtMV0uZWxlbSA9IGVsZW07XG5cdFx0XHRcdH0gZWxzZSBpZiAobm90ZS5lbmRUaWUpXG5cdFx0XHRcdFx0cGl0Y2hlc1RpZWRbJycrYWN0dWFsUGl0Y2hdID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZWxlbS5ncmFjZW5vdGVzKSB7XG5cdFx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgZWxlbS5ncmFjZW5vdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0ZWxlbS5taWRpR3JhY2VOb3RlUGl0Y2hlcyA9IFtdO1xuXHRcdFx0XHRcdHZhciBncmFjZSA9IGVsZW0uZ3JhY2Vub3Rlc1tqXTtcblx0XHRcdFx0XHRlbGVtLm1pZGlHcmFjZU5vdGVQaXRjaGVzLnB1c2goeyBwaXRjaDogYWRqdXN0UGl0Y2goZ3JhY2UpKzYwLCBkdXJhdGlvbkluTWVhc3VyZXM6IDAsIHZvbHVtZTogdm9sdW1lLCBpbnN0cnVtZW50OiBjdXJyZW50SW5zdHJ1bWVudH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgdGhpc0JyZWFrQmV0d2Vlbk5vdGVzID0gbm9ybWFsQnJlYWtCZXR3ZWVuTm90ZXM7XG5cdFx0XHR2YXIgc291bmREdXJhdGlvbiA9IGR1cmF0aW9uLW5vcm1hbEJyZWFrQmV0d2Vlbk5vdGVzO1xuXHRcdFx0aWYgKHNvdW5kRHVyYXRpb24gPCAwKSB7XG5cdFx0XHRcdHNvdW5kRHVyYXRpb24gPSAwO1xuXHRcdFx0XHR0aGlzQnJlYWtCZXR3ZWVuTm90ZXMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0Y3VycmVudFRyYWNrLnB1c2goeyBjbWQ6ICdtb3ZlJywgZHVyYXRpb246IHNvdW5kRHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0XHRsYXN0Tm90ZUR1cmF0aW9uUG9zaXRpb24gPSBjdXJyZW50VHJhY2subGVuZ3RoLTE7XG5cdFx0XHRjdXJyZW50VHJhY2tDb3VudGVyICs9IHNvdW5kRHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3I7XG5cblx0XHRcdGZvciAodmFyIGlpID0gMDsgaWkgPCBwaXRjaGVzLmxlbmd0aDsgaWkrKykge1xuXHRcdFx0XHRpZiAoIXBpdGNoZXNUaWVkWycnK3BpdGNoZXNbaWldLnBpdGNoXSlcblx0XHRcdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7IGNtZDogJ3N0b3AnLCBwaXRjaDogcGl0Y2hlc1tpaV0ucGl0Y2ggfSk7XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogdGhpc0JyZWFrQmV0d2Vlbk5vdGVzKnRlbXBvQ2hhbmdlRmFjdG9yIH0pO1xuXHRcdFx0Y3VycmVudFRyYWNrQ291bnRlciArPSB0aGlzQnJlYWtCZXR3ZWVuTm90ZXMqdGVtcG9DaGFuZ2VGYWN0b3I7XG5cdFx0fSBlbHNlIGlmIChlbGVtLnJlc3QpIHtcblx0XHRcdGN1cnJlbnRUcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiBkdXJhdGlvbip0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRcdGN1cnJlbnRUcmFja0NvdW50ZXIgKz0gZHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3I7XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW0uZW5kVHJpcGxldCkge1xuXHRcdFx0bXVsdGlwbGllcj0xO1xuXHRcdH1cblx0fVxuXG5cdHZhciBzY2FsZSA9IFswLDIsNCw1LDcsOSwxMV07XG5cdGZ1bmN0aW9uIGFkanVzdFBpdGNoKG5vdGUpIHtcblx0XHRpZiAobm90ZS5taWRpcGl0Y2gpXG5cdFx0XHRyZXR1cm4gbm90ZS5taWRpcGl0Y2ggLSA2MDtcblx0XHR2YXIgcGl0Y2ggPSBub3RlLnBpdGNoO1xuXHRcdGlmIChub3RlLmFjY2lkZW50YWwpIHtcblx0XHRcdHN3aXRjaChub3RlLmFjY2lkZW50YWwpIHsgLy8gY2hhbmdlIHRoYXQgcGl0Y2ggKG5vdCBvdGhlciBvY3RhdmVzKSBmb3IgdGhlIHJlc3Qgb2YgdGhlIGJhclxuXHRcdFx0XHRjYXNlIFwic2hhcnBcIjpcblx0XHRcdFx0XHRiYXJBY2NpZGVudGFsc1twaXRjaF09MTsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJmbGF0XCI6XG5cdFx0XHRcdFx0YmFyQWNjaWRlbnRhbHNbcGl0Y2hdPS0xOyBicmVhaztcblx0XHRcdFx0Y2FzZSBcIm5hdHVyYWxcIjpcblx0XHRcdFx0XHRiYXJBY2NpZGVudGFsc1twaXRjaF09MDsgYnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJkYmxzaGFycFwiOlxuXHRcdFx0XHRcdGJhckFjY2lkZW50YWxzW3BpdGNoXT0yOyBicmVhaztcblx0XHRcdFx0Y2FzZSBcImRibGZsYXRcIjpcblx0XHRcdFx0XHRiYXJBY2NpZGVudGFsc1twaXRjaF09LTI7IGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBhY3R1YWxQaXRjaCA9IGV4dHJhY3RPY3RhdmUocGl0Y2gpICoxMiArIHNjYWxlW2V4dHJhY3ROb3RlKHBpdGNoKV07XG5cblx0XHRpZiAoIGJhckFjY2lkZW50YWxzW3BpdGNoXSE9PXVuZGVmaW5lZCkge1xuXHRcdFx0YWN0dWFsUGl0Y2ggKz0gIGJhckFjY2lkZW50YWxzW3BpdGNoXTtcblx0XHR9IGVsc2UgeyAvLyB1c2Ugbm9ybWFsIGFjY2lkZW50YWxzXG5cdFx0XHRhY3R1YWxQaXRjaCArPSAgYWNjaWRlbnRhbHNbZXh0cmFjdE5vdGUocGl0Y2gpXTtcblx0XHR9XG5cdFx0YWN0dWFsUGl0Y2ggKz0gdHJhbnNwb3NlO1xuXHRcdHJldHVybiBhY3R1YWxQaXRjaDtcblx0fVxuXG5cdGZ1bmN0aW9uIHNldEtleVNpZ25hdHVyZShlbGVtKSB7XG5cdFx0dmFyIGFjY2lkZW50YWxzID0gWzAsMCwwLDAsMCwwLDBdO1xuXHRcdGlmICghZWxlbS5hY2NpZGVudGFscykgcmV0dXJuIGFjY2lkZW50YWxzO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5hY2NpZGVudGFscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFjYyA9IGVsZW0uYWNjaWRlbnRhbHNbaV07XG5cdFx0XHR2YXIgZCA9IChhY2MuYWNjID09PSBcInNoYXJwXCIpID8gMSA6IChhY2MuYWNjID09PSBcIm5hdHVyYWxcIikgPzAgOiAtMTtcblxuXHRcdFx0dmFyIGxvd2VyY2FzZSA9IGFjYy5ub3RlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR2YXIgbm90ZSA9IGV4dHJhY3ROb3RlKGxvd2VyY2FzZS5jaGFyQ29kZUF0KDApLSdjJy5jaGFyQ29kZUF0KDApKTtcblx0XHRcdGFjY2lkZW50YWxzW25vdGVdKz1kO1xuXHRcdH1cblx0XHRyZXR1cm4gYWNjaWRlbnRhbHM7XG5cdH1cblxuXHR2YXIgZ3JhY2VEaXZpZGVyID0gODsgLy8gVGhpcyBpcyB0aGUgZnJhY3Rpb24gb2YgYSBub3RlIHRoYXQgdGhlIGdyYWNlIHJlcHJlc2VudHMuIFRoYXQgaXMsIGlmIHRoaXMgaXMgMiwgdGhlbiBhIGdyYWNlIG5vdGUgb2YgMS8xNiB3b3VsZCBiZSBhIDEvMzIuXG5cdGZ1bmN0aW9uIHByb2Nlc3NHcmFjZU5vdGVzKGdyYWNlcywgY29tcGFuaW9uRHVyYXRpb24pIHtcblx0XHR2YXIgZ3JhY2VEdXJhdGlvbiA9IDA7XG5cdFx0dmFyIHJldCA9IFtdO1xuXHRcdHZhciBncmFjZTtcblx0XHRmb3IgKHZhciBnID0gMDsgZyA8IGdyYWNlcy5sZW5ndGg7IGcrKykge1xuXHRcdFx0Z3JhY2UgPSBncmFjZXNbZ107XG5cdFx0XHRncmFjZUR1cmF0aW9uICs9IGdyYWNlLmR1cmF0aW9uO1xuXHRcdH1cblx0XHRncmFjZUR1cmF0aW9uID0gZ3JhY2VEdXJhdGlvbiAvIGdyYWNlRGl2aWRlcjtcblx0XHR2YXIgbXVsdGlwbGllciA9IChncmFjZUR1cmF0aW9uICogMiA+IGNvbXBhbmlvbkR1cmF0aW9uKSA/IGNvbXBhbmlvbkR1cmF0aW9uLyhncmFjZUR1cmF0aW9uICogMikgOiAxO1xuXG5cdFx0Zm9yIChnID0gMDsgZyA8IGdyYWNlcy5sZW5ndGg7IGcrKykge1xuXHRcdFx0Z3JhY2UgPSBncmFjZXNbZ107XG5cdFx0XHR2YXIgcGl0Y2ggPSBncmFjZS5taWRpcGl0Y2ggPyBncmFjZS5taWRpcGl0Y2ggLSA2MCA6IGdyYWNlLnBpdGNoO1xuXHRcdFx0cmV0LnB1c2goeyBwaXRjaDogcGl0Y2gsIGR1cmF0aW9uOiBncmFjZS5kdXJhdGlvbi9ncmFjZURpdmlkZXIqbXVsdGlwbGllciB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyaXRlR3JhY2VOb3RlcyhncmFjZXMsIHN0ZWFsRnJvbUN1cnJlbnQsIGR1cmF0aW9uLCBza2lwTm90ZSwgdmVsb2NpdHkpIHtcblx0XHRmb3IgKHZhciBnID0gMDsgZyA8IGdyYWNlcy5sZW5ndGg7IGcrKykge1xuXHRcdFx0dmFyIGdwID0gZ3JhY2VzW2ddO1xuXHRcdFx0aWYgKGdwICE9PSBza2lwTm90ZSlcblx0XHRcdFx0Y3VycmVudFRyYWNrLnB1c2goe2NtZDogJ3N0YXJ0JywgcGl0Y2g6IGdwLnBpdGNoLCB2b2x1bWU6IHZlbG9jaXR5fSk7XG5cdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBncmFjZXNbZ10uZHVyYXRpb24qdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0XHRpZiAoZ3AgIT09IHNraXBOb3RlKVxuXHRcdFx0XHRjdXJyZW50VHJhY2sucHVzaCh7Y21kOiAnc3RvcCcsIHBpdGNoOiBncC5waXRjaH0pO1xuXHRcdFx0aWYgKCFzdGVhbEZyb21DdXJyZW50KVxuXHRcdFx0XHRjdXJyZW50VHJhY2tbbGFzdE5vdGVEdXJhdGlvblBvc2l0aW9uXS5kdXJhdGlvbiAtPSBncmFjZXNbZ10uZHVyYXRpb247XG5cdFx0XHRkdXJhdGlvbiAtPSBncmFjZXNbZ10uZHVyYXRpb247XG5cdFx0fVxuXHRcdHJldHVybiBkdXJhdGlvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dHJhY3RPY3RhdmUocGl0Y2gpIHtcblx0XHRyZXR1cm4gTWF0aC5mbG9vcihwaXRjaC83KTtcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dHJhY3ROb3RlKHBpdGNoKSB7XG5cdFx0cGl0Y2ggPSBwaXRjaCU3O1xuXHRcdGlmIChwaXRjaDwwKSBwaXRjaCs9Nztcblx0XHRyZXR1cm4gcGl0Y2g7XG5cdH1cblxuXHR2YXIgYmFzc2VzID0ge1xuXHRcdCdBJzogLTI3LCAnQic6IC0yNSwgJ0MnOiAtMjQsICdEJzogLTIyLCAnRSc6IC0yMCwgJ0YnOiAtMTksICdHJzogLTE3XG5cdH07XG5cdGZ1bmN0aW9uIGludGVycHJldENob3JkKG5hbWUpIHtcblx0XHQvLyBjaG9yZHMgaGF2ZSB0aGUgZm9ybWF0OlxuXHRcdC8vIFtyb290XVthY2NdW21vZGlmaWVyXVsvXVtiYXNzXVthY2NdXG5cdFx0Ly8gKFRoZSBjaG9yZCBtaWdodCBiZSBzdXJyb3VuZGVkIGJ5IHBhcmVucy4gSnVzdCBpZ25vcmUgdGhlbS4pXG5cdFx0Ly8gcm9vdCBtdXN0IGJlIHByZXNlbnQgYW5kIG11c3QgYmUgZnJvbSBBLUcuXG5cdFx0Ly8gYWNjIGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgIyBvciBiXG5cdFx0Ly8gVGhlIG1vZGlmaWVyIGNhbiBiZSBhIHdpZGUgdmFyaWV0eSBvZiB0aGluZ3MsIGxpa2UgXCJtYWo3XCIuIEFzIHRoZXkgYXJlIGRpc2NvdmVyZWQsIG1vcmUgYXJlIHN1cHBvcnRlZCBoZXJlLlxuXHRcdC8vIElmIHRoZXJlIGlzIGEgc2xhc2gsIHRoZW4gdGhlcmUgaXMgYSBiYXNzIG5vdGUsIHdoaWNoIGNhbiBiZSBmcm9tIEEtRywgd2l0aCBhbiBvcHRpb25hbCBhY2MuXG5cdFx0Ly8gSWYgdGhlIHJvb3QgaXMgdW5yZWNvZ25pemVkLCB0aGVuIFwidW5kZWZpbmVkXCIgaXMgcmV0dXJuZWQgYW5kIHRoZXJlIGlzIG5vIGNob3JkLlxuXHRcdC8vIElmIHRoZSBtb2RpZmllciBpcyB1bnJlY29nbml6ZWQsIGEgbWFqb3IgdHJpYWQgaXMgcmV0dXJuZWQuXG5cdFx0Ly8gSWYgdGhlIGJhc3Mgbm90ZXMgaXMgdW5yZWNvZ25pemVkLCBpdCBpcyBpZ25vcmVkLlxuXHRcdGlmIChuYW1lLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0aWYgKG5hbWUgPT09ICdicmVhaycpXG5cdFx0XHRyZXR1cm4geyBjaGljazogW119O1xuXHRcdHZhciByb290ID0gbmFtZS5zdWJzdHJpbmcoMCwxKTtcblx0XHRpZiAocm9vdCA9PT0gJygnKSB7XG5cdFx0XHRuYW1lID0gbmFtZS5zdWJzdHJpbmcoMSxuYW1lLmxlbmd0aC0yKTtcblx0XHRcdGlmIChuYW1lLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdHJvb3QgPSBuYW1lLnN1YnN0cmluZygwLDEpO1xuXHRcdH1cblx0XHR2YXIgYmFzcyA9IGJhc3Nlc1tyb290XTtcblx0XHRpZiAoIWJhc3MpXHQvLyBJZiB0aGUgYmFzcyBub3RlIGlzbid0IGxpc3RlZCwgdGhlbiB0aGlzIHdhcyBhbiB1bmtub3duIHJvb3QuIE9ubHkgQS1HIGFyZSBhY2NlcHRlZC5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0YmFzcyAgKz0gdHJhbnNwb3NlO1xuXHRcdHZhciBiYXNzMiA9IGJhc3MgLSA1O1x0Ly8gVGhlIGFsdGVybmF0aW5nIGJhc3MgaXMgYSA0dGggYmVsb3dcblx0XHR2YXIgY2hpY2s7XG5cdFx0aWYgKG5hbWUubGVuZ3RoID09PSAxKVxuXHRcdFx0Y2hpY2sgPSBjaG9yZE5vdGVzKGJhc3MsICcnKTtcblx0XHR2YXIgcmVtYWluaW5nID0gbmFtZS5zdWJzdHJpbmcoMSk7XG5cdFx0dmFyIGFjYyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoMCwxKTtcblx0XHRpZiAoYWNjID09PSAnYicgfHwgYWNjID09PSAn4pmtJykge1xuXHRcdFx0YmFzcy0tO1xuXHRcdFx0YmFzczItLTtcblx0XHRcdHJlbWFpbmluZyA9IHJlbWFpbmluZy5zdWJzdHJpbmcoMSk7XG5cdFx0fSBlbHNlIGlmIChhY2MgPT09ICcjJyB8fCBhY2MgPT09ICfima8nKSB7XG5cdFx0XHRiYXNzKys7XG5cdFx0XHRiYXNzMisrO1xuXHRcdFx0cmVtYWluaW5nID0gcmVtYWluaW5nLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0dmFyIGFyciA9IHJlbWFpbmluZy5zcGxpdCgnLycpO1xuXHRcdGNoaWNrID0gY2hvcmROb3RlcyhiYXNzLCBhcnJbMF0pO1xuXHRcdGlmIChhcnIubGVuZ3RoID09PSAyKSB7XG5cdFx0XHR2YXIgZXhwbGljaXRCYXNzID0gYmFzc2VzW2FyclsxXS5zdWJzdHJpbmcoMCwxKV07XG5cdFx0XHRpZiAoZXhwbGljaXRCYXNzKSB7XG5cdFx0XHRcdHZhciBiYXNzQWNjID0gYXJyWzFdLnN1YnN0cmluZygxKTtcblx0XHRcdFx0dmFyIGJhc3NTaGlmdCA9IHsnIyc6IDEsICfima8nOiAxLCAnYic6IC0xLCAn4pmtJzogLTF9W2Jhc3NBY2NdIHx8IDA7XG5cdFx0XHRcdGJhc3MgPSBiYXNzZXNbYXJyWzFdLnN1YnN0cmluZygwLDEpXSArIGJhc3NTaGlmdCArIHRyYW5zcG9zZTtcblx0XHRcdFx0YmFzczIgPSBiYXNzO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4geyBib29tOiBiYXNzLCBib29tMjogYmFzczIsIGNoaWNrOiBjaGljayB9O1xuXHR9XG5cblx0dmFyIGNob3JkSW50ZXJ2YWxzID0ge1xuXHRcdC8vIGRpbWluaXNoZWQgKGFsbCBmbGF0IDUgY2hvcmRzKVxuXHRcdCdkaW0nOiBbIDAsIDMsIDYgXSxcblx0XHQnwrAnOiBbIDAsIDMsIDYgXSxcblx0XHQny5onOiBbIDAsIDMsIDYgXSxcblxuXHRcdCdkaW03JzogWyAwLCAzLCA2LCA5IF0sXG5cdFx0J8KwNyc6IFsgMCwgMywgNiwgOSBdLFxuXHRcdCfLmjcnOiBbIDAsIDMsIDYsIDkgXSxcblxuXHRcdCfDuDcnOiBbIDAsIDMsIDYsIDEwIF0sXG5cdFx0J203KGI1KSc6IFsgMCwgMywgNiwgMTAgXSxcblx0XHQnbTdiNSc6IFsgMCwgMywgNiwgMTAgXSxcblx0XHQnLTcoYjUpJzogWyAwLCAzLCA2LCAxMCBdLFxuXHRcdCctN2I1JzogWyAwLCAzLCA2LCAxMCBdLFxuXG5cdFx0JzdiNSc6IFsgMCwgNCwgNiwgMTAgXSxcblx0XHQnNyhiNSknOiBbIDAsIDQsIDYsIDEwIF0sXG5cdFx0Jzfima01JzogWyAwLCA0LCA2LCAxMCBdLFxuXG5cdFx0JzcoYjksYjUpJzogWyAwLCA0LCA2LCAxMCwgMTMgXSxcblx0XHQnN2I5LGI1JzogWyAwLCA0LCA2LCAxMCwgMTMgXSxcblx0XHQnNygjOSxiNSknOiBbIDAsIDQsIDYsIDEwLCAxNSBdLFxuXHRcdCc3IzliNSc6IFsgMCwgNCwgNiwgMTAsIDE1IF0sXG5cdFx0J21hajcoYjUpJzogWyAwLCAzLCA2LCAxMSBdLFxuXHRcdCdtYWo3YjUnOiBbIDAsIDMsIDYsIDExIF0sXG5cdFx0JzEzKGI1KSc6IFsgMCwgNCwgNiwgMTAsIDE0LCAxOCBdLFxuXHRcdCcxM2I1JzogWyAwLCA0LCA2LCAxMCwgMTQsIDE4IF0sXG5cblx0XHQvLyBtaW5vciAoYWxsIG5vcm1hbCA1LCBtaW5vciAzIGNob3Jkcylcblx0XHQnbSc6IFsgMCwgMywgNyBdLFxuXHRcdCctJzogWyAwLCAzLCA3IF0sXG5cdFx0J202JzogWyAwLCAzLCA3LCA5IF0sXG5cdFx0Jy02JzogWyAwLCAzLCA3LCA5IF0sXG5cdFx0J203JzogWyAwLCAzLCA3LCAxMCBdLFxuXHRcdCctNyc6IFsgMCwgMywgNywgMTAgXSxcblxuXHRcdCctKGI2KSc6IFsgMCwgMywgNywgOCBdLFxuXHRcdCctYjYnOiBbIDAsIDMsIDcsIDggXSxcblx0XHQnLTYvOSc6IFsgMCwgMywgNywgOSwgMTQgXSxcblx0XHQnLTcoYjkpJzogWyAwLCAzLCA3LCAxMCwgMTMgXSxcblx0XHQnLTdiOSc6IFsgMCwgMywgNywgMTAsIDEzIF0sXG5cdFx0Jy1tYWo3JzogWyAwLCAzLCA3LCAxMSBdLFxuXHRcdCctOSs3JzogWyAwLCAzLCA3LCAxMSwgMTMgXSxcblx0XHQnLTExJzogWyAgMCwgMywgNywgMTEsIDE0LCAxNiBdLFxuXG5cdFx0Ly8gbWFqb3IgKGFsbCBub3JtYWwgNSwgbWFqb3IgMyBjaG9yZHMpXG5cdFx0J00nOiBbIDAsIDQsIDcgXSxcblx0XHQnNic6IFsgMCwgNCwgNywgOSBdLFxuXHRcdCc2LzknOiBbIDAsIDQsIDcsIDksIDE0IF0sXG5cblx0XHQnNyc6IFsgMCwgNCwgNywgMTAgXSxcblx0XHQnOSc6IFsgMCwgNCwgNywgMTAsIDE0IF0sXG5cdFx0JzExJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE2IF0sXG5cdFx0JzEzJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE4IF0sXG5cdFx0JzdiOSc6IFsgMCwgNCwgNywgMTAsIDEzIF0sXG5cdFx0Jzfima05JzogWyAwLCA0LCA3LCAxMCwgMTMgXSxcblx0XHQnNyhiOSknOiBbIDAsIDQsIDcsIDEwLCAxMyBdLFxuXHRcdCc3KCM5KSc6IFsgMCwgNCwgNywgMTAsIDE1IF0sXG5cdFx0JzcjOSc6IFsgMCwgNCwgNywgMTAsIDE1IF0sXG5cdFx0JygxMyknOiBbIDAsIDQsIDcsIDEwLCAxNCwgMTggXSxcblx0XHQnNyg5LDEzKSc6IFsgMCwgNCwgNywgMTAsIDE0LCAxOCBdLFxuXHRcdCc3KCM5LGIxMyknOiBbIDAsIDQsIDcsIDEwLCAxNSwgMTcgXSxcblx0XHQnNygjMTEpJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE3IF0sXG5cdFx0JzcjMTEnOiBbIDAsIDQsIDcsIDEwLCAxNCwgMTcgXSxcblx0XHQnNyhiMTMpJzogWyAwLCA0LCA3LCAxMCwgMTcgXSxcblx0XHQnN2IxMyc6IFsgMCwgNCwgNywgMTAsIDE3IF0sXG5cdFx0JzkoIzExKSc6IFsgMCwgNCwgNywgMTAsIDE0LCAxNyBdLFxuXHRcdCc5IzExJzogWyAwLCA0LCA3LCAxMCwgMTQsIDE3IF0sXG5cdFx0JzEzKCMxMSknOiBbIDAsIDQsIDcsIDEwLCAxNSwgMTggXSxcblx0XHQnMTMjMTEnOiBbIDAsIDQsIDcsIDEwLCAxNSwgMTggXSxcblxuXHRcdCdtYWo3JzogWyAwLCA0LCA3LCAxMSBdLFxuXHRcdCfiiIY3JzogWyAwLCA0LCA3LCAxMSBdLFxuXHRcdCfOlDcnOiBbIDAsIDQsIDcsIDExIF0sXG5cdFx0J21hajknOiBbIDAsIDQsIDcsIDExLCAxNCBdLFxuXHRcdCdtYWo3KDkpJzogWyAwLCA0LCA3LCAxMSwgMTQgXSxcblx0XHQnbWFqNygxMSknOiBbIDAsIDQsIDcsIDExLCAxNiBdLFxuXHRcdCdtYWo3KCMxMSknOiBbIDAsIDQsIDcsIDExLCAxNyBdLFxuXHRcdCdtYWo3KDEzKSc6IFsgMCwgNCwgNywgMTEsIDE4IF0sXG5cdFx0J21hajcoOSwxMyknOiBbIDAsIDQsIDcsIDExLCAxNCwgMTggXSxcblxuXHRcdCc3c3VzNCc6IFsgMCwgNSwgNywgMTAgXSxcblx0XHQnbTdzdXM0JzogWyAwLCA1LCA3LCAxMCBdLFxuXHRcdCdzdXM0JzogWyAwLCA1LCA3IF0sXG5cdFx0J3N1czInOiBbIDAsIDIsIDcgXSxcblx0XHQnN3N1czInOiBbIDAsIDIsIDcsIDEwIF0sXG5cdFx0JzlzdXM0JzogWyAwLCA1LCA3LCAxNCBdLFxuXHRcdCcxM3N1czQnOiBbIDAsIDUsIDcsIDE4IF0sXG5cblx0XHQvLyBhdWdtZW50ZWQgKGFsbCBzaGFycCA1IGNob3Jkcylcblx0XHQnYXVnNyc6IFsgMCwgNCwgOCwgMTAgXSxcblx0XHQnKzcnOiBbIDAsIDQsIDgsIDEwIF0sXG5cdFx0JysnOiBbIDAsIDQsIDggXSxcblx0XHQnNyM1JzogWyAwLCA0LCA4LCAxMCBdLFxuXHRcdCc34pmvNSc6IFsgMCwgNCwgOCwgMTAgXSxcblx0XHQnNys1JzogWyAwLCA0LCA4LCAxMCBdLFxuXHRcdCc5IzUnOiBbIDAsIDQsIDgsIDEwLCAxNCBdLFxuXHRcdCc54pmvNSc6IFsgMCwgNCwgOCwgMTAsIDE0IF0sXG5cdFx0JzkrNSc6IFsgMCwgNCwgOCwgMTAsIDE0IF0sXG5cdFx0Jy03KCM1KSc6IFsgMCwgMywgOCwgMTAgXSxcblx0XHQnLTcjNSc6IFsgMCwgMywgOCwgMTAgXSxcblx0XHQnNygjNSknOiBbIDAsIDQsIDgsIDEwIF0sXG5cdFx0JzcoYjksIzUpJzogWyAwLCA0LCA4LCAxMCwgMTMgXSxcblx0XHQnN2I5IzUnOiBbIDAsIDQsIDgsIDEwLCAxMyBdLFxuXHRcdCdtYWo3KCM1KSc6IFsgMCwgNCwgOCwgMTEgXSxcblx0XHQnbWFqNyM1JzogWyAwLCA0LCA4LCAxMSBdLFxuXHRcdCdtYWo3KCM1LCMxMSknOiBbIDAsIDQsIDgsIDExLCAxNCBdLFxuXHRcdCdtYWo3IzUjMTEnOiBbIDAsIDQsIDgsIDExLCAxNCBdLFxuXHRcdCc5KCM1KSc6IFsgMCwgNCwgOCwgMTAsIDE0IF0sXG5cdFx0JzEzKCM1KSc6IFsgMCwgNCwgOCwgMTAsIDE0LCAxOCBdLFxuXHRcdCcxMyM1JzogWyAwLCA0LCA4LCAxMCwgMTQsIDE4IF1cbn07XG5cdGZ1bmN0aW9uIGNob3JkTm90ZXMoYmFzcywgbW9kaWZpZXIpIHtcblx0XHR2YXIgaW50ZXJ2YWxzID0gY2hvcmRJbnRlcnZhbHNbbW9kaWZpZXJdO1xuXHRcdGlmICghaW50ZXJ2YWxzKVxuXHRcdFx0aW50ZXJ2YWxzID0gY2hvcmRJbnRlcnZhbHMuTTtcblx0XHRiYXNzICs9IDEyO1x0Ly8gdGhlIGNob3JkIGlzIGFuIG9jdGF2ZSBhYm92ZSB0aGUgYmFzcyBub3RlLlxuXHRcdHZhciBub3RlcyA9IFsgXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGludGVydmFscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0bm90ZXMucHVzaChiYXNzICsgaW50ZXJ2YWxzW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5vdGVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVCb29tKGJvb20sIGJlYXRMZW5ndGgpIHtcblx0XHQvLyB1bmRlZmluZWQgbWVhbnMgdGhlcmUgaXMgYSBzdG9wIHRpbWUuXG5cdFx0aWYgKGJvb20gIT09IHVuZGVmaW5lZClcblx0XHRcdGNob3JkVHJhY2sucHVzaCh7Y21kOiAnc3RhcnQnLCBwaXRjaDogYm9vbSwgdm9sdW1lOiA2NH0pO1xuXHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogKGJlYXRMZW5ndGgvMikqdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0aWYgKGJvb20gIT09IHVuZGVmaW5lZClcblx0XHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ3N0b3AnLCBwaXRjaDogYm9vbSB9KTtcblx0XHRjaG9yZFRyYWNrLnB1c2goeyBjbWQ6ICdtb3ZlJywgZHVyYXRpb246IChiZWF0TGVuZ3RoLzIpKnRlbXBvQ2hhbmdlRmFjdG9yIH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gd3JpdGVDaGljayhjaGljaywgYmVhdExlbmd0aCkge1xuXHRcdGZvciAodmFyIGMgPSAwOyBjIDwgY2hpY2subGVuZ3RoOyBjKyspXG5cdFx0XHRjaG9yZFRyYWNrLnB1c2goe2NtZDogJ3N0YXJ0JywgcGl0Y2g6IGNoaWNrW2NdLCB2b2x1bWU6IDQ4fSk7XG5cdFx0Y2hvcmRUcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiAoYmVhdExlbmd0aC8yKSp0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRmb3IgKGMgPSAwOyBjIDwgY2hpY2subGVuZ3RoOyBjKyspXG5cdFx0XHRjaG9yZFRyYWNrLnB1c2goeyBjbWQ6ICdzdG9wJywgcGl0Y2g6IGNoaWNrW2NdIH0pO1xuXHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogKGJlYXRMZW5ndGgvMikqdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdH1cblxuXHR2YXIgcmh5dGhtUGF0dGVybnMgPSB7IFwiMi8yXCI6IFsgJ2Jvb20nLCAnY2hpY2snIF0sXG5cdFx0XCIyLzRcIjogWyAnYm9vbScsICdjaGljaycgXSxcblx0XHRcIjMvNFwiOiBbICdib29tJywgJ2NoaWNrJywgJ2NoaWNrJyBdLFxuXHRcdFwiNC80XCI6IFsgJ2Jvb20nLCAnY2hpY2snLCAnYm9vbTInLCAnY2hpY2snIF0sXG5cdFx0XCI1LzRcIjogWyAnYm9vbScsICdjaGljaycsICdjaGljaycsICdib29tMicsICdjaGljaycgXSxcblx0XHRcIjYvOFwiOiBbICdib29tJywgJycsICdjaGljaycsICdib29tMicsICcnLCAnY2hpY2snIF0sXG5cdFx0XCI5LzhcIjogWyAnYm9vbScsICcnLCAnY2hpY2snLCAnYm9vbTInLCAnJywgJ2NoaWNrJywgJ2Jvb20yJywgJycsICdjaGljaycgXSxcblx0XHRcIjEyLzhcIjogWyAnYm9vbScsICcnLCAnY2hpY2snLCAnYm9vbTInLCAnJywgJ2NoaWNrJywgJ2Jvb20yJywgJycsICdjaGljaycsICdib29tMicsICcnLCAnY2hpY2snIF0sXG5cdH07XG5cblx0ZnVuY3Rpb24gcmVzb2x2ZUNob3JkcygpIHtcblx0XHR2YXIgbnVtID0gbWV0ZXIubnVtO1xuXHRcdHZhciBkZW4gPSBtZXRlci5kZW47XG5cdFx0dmFyIGJlYXRMZW5ndGggPSAxL2Rlbjtcblx0XHR2YXIgcGF0dGVybiA9IHJoeXRobVBhdHRlcm5zW251bSsnLycrZGVuXTtcblx0XHR2YXIgdGhpc01lYXN1cmVMZW5ndGggPSBwYXJzZUludChudW0sMTApL3BhcnNlSW50KGRlbiwxMCk7XG5cdFx0Ly8gU2VlIGlmIHRoaXMgaXMgYSBmdWxsIG1lYXN1cmU6IHVuZm9ydHVuYXRlbHksIHdpdGggdHJpcGxldHMsIHRoZXJlIGlzbid0IGFuIGV4YWN0IG1hdGNoLCB3aGF0IHdpdGggdGhlIGZsb2F0aW5nIHBvaW50LCBzbyB3ZSBqdXN0IHNlZSBpZiBpdCBpcyBcImNsb3NlXCIuXG5cdFx0dmFyIHBvcnRpb25PZkFNZWFzdXJlID0gTWF0aC5hYnModGhpc01lYXN1cmVMZW5ndGggLSBiYXJCZWF0KTtcblx0XHRpZiAoIXBhdHRlcm4gfHwgcG9ydGlvbk9mQU1lYXN1cmUgPiAwLjAwNzgxMjUpIHsgLy8gSWYgaXQgaXMgYW4gdW5zdXBwb3J0ZWQgbWV0ZXIsIG9yIHRoaXMgaXNuJ3QgYSBmdWxsIGJhciwganVzdCBjaGljayBvbiBlYWNoIGJlYXQuXG5cdFx0XHRwYXR0ZXJuID0gW107XG5cdFx0XHR2YXIgYmVhdHNQcmVzZW50ID0gYmFyQmVhdCAvIGJlYXRMZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBwID0gMDsgcCA8IGJlYXRzUHJlc2VudDsgcCsrKVxuXHRcdFx0XHRwYXR0ZXJuLnB1c2goXCJjaGlja1wiKTtcblx0XHR9XG5cblx0XHRpZiAoY3VycmVudENob3Jkcy5sZW5ndGggPT09IDApIHsgLy8gdGhlcmUgd2Fzbid0IGEgbmV3IGNob3JkIHRoaXMgbWVhc3VyZSwgc28gdXNlIHRoZSBsYXN0IGNob3JkIGRlY2xhcmVkLlxuXHRcdFx0Y3VycmVudENob3Jkcy5wdXNoKHsgYmVhdDogMCwgY2hvcmQ6IGxhc3RDaG9yZH0pO1xuXHRcdH1cblx0XHRpZiAoY3VycmVudENob3Jkc1swXS5iZWF0ICE9PSAwICYmIGxhc3RDaG9yZCkgeyAvLyB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIGEgY2hvcmQgZGVjbGFyZWQgaW4gdGhlIG1lYXN1cmUsIGJ1dCBub3Qgb24gaXRzIGZpcnN0IGJlYXQuXG5cdFx0XHRjdXJyZW50Q2hvcmRzLnVuc2hpZnQoeyBiZWF0OiAwLCBjaG9yZDogbGFzdENob3JkfSk7XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50Q2hvcmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0Zm9yICh2YXIgbSA9IDA7IG0gPCBwYXR0ZXJuLmxlbmd0aDsgbSsrKSB7XG5cdFx0XHRcdHN3aXRjaCAocGF0dGVyblttXSkge1xuXHRcdFx0XHRcdGNhc2UgJ2Jvb20nOlxuXHRcdFx0XHRcdFx0d3JpdGVCb29tKGN1cnJlbnRDaG9yZHNbMF0uY2hvcmQuYm9vbSwgYmVhdExlbmd0aCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdib29tMic6XG5cdFx0XHRcdFx0XHR3cml0ZUJvb20oY3VycmVudENob3Jkc1swXS5jaG9yZC5ib29tMiwgYmVhdExlbmd0aCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlICdjaGljayc6XG5cdFx0XHRcdFx0XHR3cml0ZUNoaWNrKGN1cnJlbnRDaG9yZHNbMF0uY2hvcmQuY2hpY2ssIGJlYXRMZW5ndGgpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSAnJzpcblx0XHRcdFx0XHRcdGNob3JkVHJhY2sucHVzaCh7IGNtZDogJ21vdmUnLCBkdXJhdGlvbjogYmVhdExlbmd0aCp0ZW1wb0NoYW5nZUZhY3RvciB9KTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgYXJlIGhlcmUgaXQgaXMgYmVjYXVzZSBtb3JlIHRoYW4gb25lIGNob3JkIHdhcyBkZWNsYXJlZCBpbiB0aGUgbWVhc3VyZSwgc28gd2UgaGF2ZSB0byBzb3J0IG91dCB3aGF0IGNob3JkIGdvZXMgd2hlcmUuXG5cblx0XHQvLyBGaXJzdCwgbm9ybWFsaXplIHRoZSBjaG9yZHMgb24gYmVhdHMuXG5cdFx0dmFyIGJlYXRzID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50Q2hvcmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY2MgPSBjdXJyZW50Q2hvcmRzW2ldO1xuXHRcdFx0dmFyIGJlYXQgPSBNYXRoLmZsb29yKGNjLmJlYXQgLyBiZWF0TGVuZ3RoKTtcdC8vIG5vdyBhbGwgdGhlIGJlYXRzIGFyZSBpbnRlZ2VycywgdGhlcmUgbWF5IGJlXG5cdFx0XHRiZWF0c1snJytiZWF0XSA9IGNjO1xuXHRcdH1cblxuXHRcdC8vIC0gSWYgdGhlcmUgaXMgYSBjaG9yZCBvbiB0aGUgc2Vjb25kIGJlYXQsIHBsYXkgYSBjaG9yZCBmb3IgdGhlIGZpcnN0IGJlYXQgaW5zdGVhZCBvZiBhIGJhc3Mgbm90ZS5cblx0XHQvLyAtIExpa2V3aXNlLCBpZiB0aGVyZSBpcyBhIGNob3JkIG9uIHRoZSBmb3VydGggYmVhdCBvZiA0LzQsIHBsYXkgYSBjaG9yZCBvbiB0aGUgdGhpcmQgYmVhdCBpbnN0ZWFkIG9mIGEgYmFzcyBub3RlLlxuXHRcdGZvciAodmFyIG0yID0gMDsgbTIgPCBwYXR0ZXJuLmxlbmd0aDsgbTIrKykge1xuXHRcdFx0dmFyIHRoaXNDaG9yZDtcblx0XHRcdGlmIChiZWF0c1snJyttMl0pXG5cdFx0XHRcdHRoaXNDaG9yZCA9IGJlYXRzWycnK20yXTtcblx0XHRcdHN3aXRjaCAocGF0dGVyblttMl0pIHtcblx0XHRcdFx0Y2FzZSAnYm9vbSc6XG5cdFx0XHRcdFx0aWYgKGJlYXRzWycnKyhtMisxKV0pIC8vIElmIHRoZXJlIGlzIG5vdCBhIGNob3JkIGNoYW5nZSBvbiB0aGUgbmV4dCBiZWF0LCBwbGF5IGEgYmFzcyBub3RlLlxuXHRcdFx0XHRcdFx0d3JpdGVDaGljayh0aGlzQ2hvcmQuY2hvcmQuY2hpY2ssIGJlYXRMZW5ndGgpO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdHdyaXRlQm9vbSh0aGlzQ2hvcmQuY2hvcmQuYm9vbSwgYmVhdExlbmd0aCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgJ2Jvb20yJzpcblx0XHRcdFx0XHRpZiAoYmVhdHNbJycrKG0yKzEpXSlcblx0XHRcdFx0XHRcdHdyaXRlQ2hpY2sodGhpc0Nob3JkLmNob3JkLmNoaWNrLCBiZWF0TGVuZ3RoKTtcblx0XHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0XHR3cml0ZUJvb20odGhpc0Nob3JkLmNob3JkLmJvb20yLCBiZWF0TGVuZ3RoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnY2hpY2snOlxuXHRcdFx0XHRcdHdyaXRlQ2hpY2sodGhpc0Nob3JkLmNob3JkLmNoaWNrLCBiZWF0TGVuZ3RoKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAnJzpcblx0XHRcdFx0XHRpZiAoYmVhdHNbJycrbTJdKVx0Ly8gSWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgY2hvcmQgb24gdGhpcyBiZWF0LCBwbGF5IGl0LlxuXHRcdFx0XHRcdFx0d3JpdGVDaGljayh0aGlzQ2hvcmQuY2hvcmQuY2hpY2ssIGJlYXRMZW5ndGgpO1xuXHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdGNob3JkVHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBiZWF0TGVuZ3RoKnRlbXBvQ2hhbmdlRmFjdG9yIH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZURydW1EZWZpbml0aW9uKHBhcmFtcykge1xuXHRcdC8vIEJlIHZlcnkgc3RyaWN0IHdpdGggdGhlIGRydW0gZGVmaW5pdGlvbi4gSWYgYW55dGhpbmcgaXMgbm90IHBlcmZlY3QsXG5cdFx0Ly8ganVzdCB0dXJuIHRoZSBkcnVtcyBvZmYuXG5cdFx0Ly8gUGVyaGFwcyBhbGwgb2YgdGhpcyBsb2dpYyBiZWxvbmdzIGluIHRoZSBwYXJzZXIgaW5zdGVhZC5cblx0XHRpZiAocGFyYW1zLnBhdHRlcm4ubGVuZ3RoID09PSAwIHx8IHBhcmFtcy5vbiA9PT0gZmFsc2UpXG5cdFx0XHRyZXR1cm4geyBvbjogZmFsc2UgfTtcblxuXHRcdHZhciBzdHIgPSBwYXJhbXMucGF0dGVyblswXTtcblx0XHR2YXIgZXZlbnRzID0gW107XG5cdFx0dmFyIGV2ZW50ID0gXCJcIjtcblx0XHR2YXIgdG90YWxQbGF5ID0gMDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHN0cltpXSA9PT0gJ2QnKVxuXHRcdFx0XHR0b3RhbFBsYXkrKztcblx0XHRcdGlmIChzdHJbaV0gPT09ICdkJyB8fCBzdHJbaV0gPT09ICd6Jykge1xuXHRcdFx0XHRpZiAoZXZlbnQubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdFx0ZXZlbnRzLnB1c2goZXZlbnQpO1xuXHRcdFx0XHRcdGV2ZW50ID0gc3RyW2ldO1xuXHRcdFx0XHR9IGVsc2Vcblx0XHRcdFx0XHRldmVudCA9IGV2ZW50ICsgc3RyW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKGV2ZW50Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIHdhcyBhbiBlcnJvcjogdGhlIHN0cmluZyBzaG91bGQgaGF2ZSBzdGFydGVkIHdpdGggZCBvciB6XG5cdFx0XHRcdFx0cmV0dXJuIHtvbjogZmFsc2V9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGV2ZW50ID0gZXZlbnQgKyBzdHJbaV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50Lmxlbmd0aCAhPT0gMClcblx0XHRcdGV2ZW50cy5wdXNoKGV2ZW50KTtcblxuXHRcdC8vIE5vdyB0aGUgZXZlbnRzIGFycmF5IHNob3VsZCBoYXZlIG9uZSBpdGVtIHBlciBldmVudC5cblx0XHQvLyBUaGVyZSBzaG91bGQgYmUgdHdvIG1vcmUgcGFyYW1zIGZvciBlYWNoIGV2ZW50OiB0aGUgdm9sdW1lIGFuZCB0aGUgcGl0Y2guXG5cdFx0aWYgKHBhcmFtcy5wYXR0ZXJuLmxlbmd0aCAhPT0gdG90YWxQbGF5KjIgKyAxKVxuXHRcdFx0cmV0dXJuIHsgb246IGZhbHNlIH07XG5cblx0XHR2YXIgcmV0ID0geyBvbjogdHJ1ZSwgYmFyczogcGFyYW1zLmJhcnMsIHBhdHRlcm46IFtdfTtcblx0XHR2YXIgYmVhdExlbmd0aCA9IDEvbWV0ZXIuZGVuO1xuXHRcdHZhciBwbGF5Q291bnQgPSAwO1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRldmVudCA9IGV2ZW50c1tqXTtcblx0XHRcdHZhciBsZW4gPSAxO1xuXHRcdFx0dmFyIGRpdiA9IGZhbHNlO1xuXHRcdFx0dmFyIG51bSA9IDA7XG5cdFx0XHRmb3IgKHZhciBrID0gMTsgayA8IGV2ZW50Lmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdHN3aXRjaChldmVudFtrXSkge1xuXHRcdFx0XHRcdGNhc2UgXCIvXCI6XG5cdFx0XHRcdFx0XHRpZiAobnVtICE9PSAwKVxuXHRcdFx0XHRcdFx0XHRsZW4gKj0gbnVtO1xuXHRcdFx0XHRcdFx0bnVtID0gMDtcblx0XHRcdFx0XHRcdGRpdiA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiMVwiOlxuXHRcdFx0XHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIjNcIjpcblx0XHRcdFx0XHRjYXNlIFwiNFwiOlxuXHRcdFx0XHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIjZcIjpcblx0XHRcdFx0XHRjYXNlIFwiN1wiOlxuXHRcdFx0XHRcdGNhc2UgXCI4XCI6XG5cdFx0XHRcdFx0Y2FzZSBcIjlcIjpcblx0XHRcdFx0XHRcdG51bSA9IG51bSoxMCArZXZlbnRba107XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuIHsgb246IGZhbHNlIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChkaXYpIHtcblx0XHRcdFx0aWYgKG51bSA9PT0gMCkgbnVtID0gMjsgLy8gYSBzbGFzaCBieSBpdHNlbGYgaXMgaW50ZXJwcmV0ZWQgYXMgXCIvMlwiXG5cdFx0XHRcdGxlbiAvPSBudW07XG5cdFx0XHR9IGVsc2UgaWYgKG51bSlcblx0XHRcdFx0bGVuICo9IG51bTtcblx0XHRcdGlmIChldmVudFswXSA9PT0gJ2QnKSB7XG5cdFx0XHRcdHJldC5wYXR0ZXJuLnB1c2goeyBsZW46IGxlbiAqIGJlYXRMZW5ndGgsIHBpdGNoOiBwYXJhbXMucGF0dGVyblsxICsgcGxheUNvdW50XSwgdmVsb2NpdHk6IHBhcmFtcy5wYXR0ZXJuWzEgKyBwbGF5Q291bnQgKyB0b3RhbFBsYXldfSk7XG5cdFx0XHRcdHBsYXlDb3VudCsrO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdHJldC5wYXR0ZXJuLnB1c2goeyBsZW46IGxlbiAqIGJlYXRMZW5ndGgsIHBpdGNoOiBudWxsfSk7XG5cdFx0fVxuXHRcdC8vIE5vdyBub3JtYWxpemUgdGhlIHBhdHRlcm4gdG8gY292ZXIgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIG1lYXN1cmVzLiBUaGUgbm90ZSBsZW5ndGhzIHBhc3NlZCBhcmUgcmVsYXRpdmUgdG8gZWFjaCBvdGhlciBhbmQgbmVlZCB0byBiZSBzY2FsZWQgdG8gZml0IGEgbWVhc3VyZS5cblx0XHR2YXIgdG90YWxUaW1lID0gMDtcblx0XHR2YXIgbWVhc3VyZXNQZXJCZWF0ID0gbWV0ZXIubnVtL21ldGVyLmRlbjtcblx0XHRmb3IgKHZhciBpaSA9IDA7IGlpIDwgcmV0LnBhdHRlcm4ubGVuZ3RoOyBpaSsrKVxuXHRcdFx0dG90YWxUaW1lICs9IHJldC5wYXR0ZXJuW2lpXS5sZW47XG5cdFx0dmFyIG51bUJhcnMgPSBwYXJhbXMuYmFycyA/IHBhcmFtcy5iYXJzIDogMTtcblx0XHR2YXIgZmFjdG9yID0gdG90YWxUaW1lIC8gIG51bUJhcnMgLyBtZWFzdXJlc1BlckJlYXQ7XG5cdFx0Zm9yIChpaSA9IDA7IGlpIDwgcmV0LnBhdHRlcm4ubGVuZ3RoOyBpaSsrKVxuXHRcdFx0cmV0LnBhdHRlcm5baWldLmxlbiA9IHJldC5wYXR0ZXJuW2lpXS5sZW4gLyBmYWN0b3I7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdGZ1bmN0aW9uIGRydW1CZWF0KHBpdGNoLCBzb3VuZExlbmd0aCwgdm9sdW1lKSB7XG5cdFx0ZHJ1bVRyYWNrLnB1c2goeyBjbWQ6ICdzdGFydCcsIHBpdGNoOiBwaXRjaCAtIDYwLCB2b2x1bWU6IHZvbHVtZX0pO1xuXHRcdGRydW1UcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiBzb3VuZExlbmd0aCB9KTtcblx0XHRkcnVtVHJhY2sucHVzaCh7IGNtZDogJ3N0b3AnLCBwaXRjaDogcGl0Y2ggLSA2MCB9KTtcblx0fVxuXG5cdGZ1bmN0aW9uIHdyaXRlRHJ1bShjaGFubmVsKSB7XG5cdFx0aWYgKGRydW1UcmFjay5sZW5ndGggPT09IDAgJiYgIWRydW1EZWZpbml0aW9uLm9uKVxuXHRcdFx0cmV0dXJuO1xuXG5cdFx0dmFyIG1lYXN1cmVMZW4gPSBtZXRlci5udW0vbWV0ZXIuZGVuO1xuXHRcdGlmIChkcnVtVHJhY2subGVuZ3RoID09PSAwKSB7XG5cdFx0XHRkcnVtVHJhY2sucHVzaCh7Y21kOiAncHJvZ3JhbScsIGNoYW5uZWw6IGNoYW5uZWwsIGluc3RydW1lbnQ6IGRydW1JbnN0cnVtZW50fSk7XG5cdFx0XHQvLyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGZhciBpbiB0aW1lIHRoZSBiYXIgc3RhcnRlZDogaWYgdGhlcmUgYXJlIHBpY2t1cCBub3RlcyBiZWZvcmUgdGhlIGNob3JkcyBzdGFydCwgd2UgbmVlZCBwYXVzZXMuXG5cdFx0XHR2YXIgZGlzdGFuY2UgPSB0aW1lRnJvbVN0YXJ0KCk7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPiAwICYmIGRpc3RhbmNlIDwgbWVhc3VyZUxlbiAtIDAuMDEpIHsgLy8gYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCwgYWRkaW5nIHRoZSBub3RlcyBtaWdodCBub3QgZXhhY3RseSBlcXVhbCB0aGUgbWVhc3VyZSBzaXplLlxuXHRcdFx0XHRkcnVtVHJhY2sucHVzaCh7Y21kOiAnbW92ZScsIGR1cmF0aW9uOiBkaXN0YW5jZSAqIHRlbXBvQ2hhbmdlRmFjdG9yfSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIWRydW1EZWZpbml0aW9uLm9uKSB7XG5cdFx0XHQvLyB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGhhcyBiZWVuIGEgZHJ1bSB0cmFjaywgYnV0IGl0IHdhcyBzcGVjaWZpY2FsbHkgdHVybmVkIG9mZi5cblx0XHRcdGRydW1UcmFjay5wdXNoKHsgY21kOiAnbW92ZScsIGR1cmF0aW9uOiBtZWFzdXJlTGVuICogdGVtcG9DaGFuZ2VGYWN0b3IgfSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZHJ1bURlZmluaXRpb24ucGF0dGVybi5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGxlbiA9IGRydW1EZWZpbml0aW9uLnBhdHRlcm5baV0ubGVuICogdGVtcG9DaGFuZ2VGYWN0b3I7XG5cdFx0XHRpZiAoZHJ1bURlZmluaXRpb24ucGF0dGVybltpXS5waXRjaClcblx0XHRcdFx0ZHJ1bUJlYXQoZHJ1bURlZmluaXRpb24ucGF0dGVybltpXS5waXRjaCwgbGVuLCBkcnVtRGVmaW5pdGlvbi5wYXR0ZXJuW2ldLnZlbG9jaXR5KTtcblx0XHRcdGVsc2Vcblx0XHRcdFx0ZHJ1bVRyYWNrLnB1c2goeyBjbWQ6ICdtb3ZlJywgZHVyYXRpb246IGxlbiB9KTtcblx0XHR9XG5cdH1cbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsInZhciBnZXROb3RlID0gcmVxdWlyZSgnLi9sb2FkLW5vdGUnKTtcbnZhciBzb3VuZHNDYWNoZSA9IHJlcXVpcmUoJy4vc291bmRzLWNhY2hlJyk7XG52YXIgY3JlYXRlTm90ZU1hcCA9IHJlcXVpcmUoJy4vY3JlYXRlLW5vdGUtbWFwJyk7XG52YXIgcmVnaXN0ZXJBdWRpb0NvbnRleHQgPSByZXF1aXJlKCcuL3JlZ2lzdGVyLWF1ZGlvLWNvbnRleHQnKTtcbnZhciBhY3RpdmVBdWRpb0NvbnRleHQgPSByZXF1aXJlKCcuL2FjdGl2ZS1hdWRpby1jb250ZXh0Jyk7XG52YXIgc3VwcG9ydHNBdWRpbyA9IHJlcXVpcmUoJy4vc3VwcG9ydHMtYXVkaW8nKTtcbnZhciBwaXRjaFRvTm90ZU5hbWUgPSByZXF1aXJlKCcuL3BpdGNoLXRvLW5vdGUtbmFtZScpO1xudmFyIGluc3RydW1lbnRJbmRleFRvTmFtZSA9IHJlcXVpcmUoJy4vaW5zdHJ1bWVudC1pbmRleC10by1uYW1lJyk7XG52YXIgZG93bmxvYWRCdWZmZXIgPSByZXF1aXJlKCcuL2Rvd25sb2FkLWJ1ZmZlcicpO1xudmFyIHNlcXVlbmNlID0gcmVxdWlyZSgnLi4vbWlkaS9hYmNfbWlkaV9zZXF1ZW5jZXInKTtcbnZhciBmbGF0dGVuID0gcmVxdWlyZSgnLi4vbWlkaS9hYmNfbWlkaV9mbGF0dGVuZXInKTtcblxuLy8gVE9ETy1QRVI6IHJlbW92ZSB0aGUgbWlkaSB0ZXN0cyBmcm9tIGhlcmU6IEkgZG9uJ3QgdGhpbmsgdGhlIG9iamVjdCBjYW4gYmUgY29uc3RydWN0ZWQgdW5sZXNzIGl0IHBhc3Nlcy5cbnZhciBub3RTdXBwb3J0ZWRNZXNzYWdlID0gXCJNSURJIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyLlwiO1xuXG52YXIgZGVmYXVsdFNvdW5kRm9udFVybCA9IFwiaHR0cHM6Ly9wYXVscm9zZW4uZ2l0aHViLmlvL21pZGktanMtc291bmRmb250cy9GbHVpZFIzX0dNL1wiO1xuXG5cbmZ1bmN0aW9uIENyZWF0ZVN5bnRoKCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSA9IHVuZGVmaW5lZDtcblx0c2VsZi5kaXJlY3RTb3VyY2UgPSBbXTsgLy8gdHlwZTogQXVkaW9CdWZmZXJTb3VyY2VOb2RlXG5cdHNlbGYuc3RhcnRUaW1lU2VjID0gdW5kZWZpbmVkOyAvLyB0aGUgdGltZSB0aGF0IHRoZSBtaWRpIHN0YXJ0ZWQ6IHVzZWQgZm9yIHBhdXNlL3Jlc3VtZS5cblx0c2VsZi5wYXVzZWRUaW1lU2VjID0gdW5kZWZpbmVkOyAvLyB0aGUgdGltZSB0aGF0IHRoZSBtaWRpIHdhcyBwYXVzZWQ6IHVzZWQgZm9yIHJlc3VtZS5cblx0c2VsZi5hdWRpb0J1ZmZlcnMgPSBbXTsgLy8gY2FjaGUgb2YgdGhlIGJ1ZmZlcnMgc28gc3RhcnRpbmcgcGxheSBjYW4gYmUgZmFzdC5cblx0c2VsZi5kdXJhdGlvbiA9IHVuZGVmaW5lZDsgLy8gdGhlIGR1cmF0aW9uIG9mIHRoZSB0dW5lIGluIHNlY29uZHMuXG5cdHNlbGYuaXNSdW5uaW5nID0gZmFsc2U7IC8vIHdoZXRoZXIgdGhlcmUgaXMgY3VycmVudGx5IGEgc291bmQgYnVmZmVyIHJ1bm5pbmcuXG5cblx0Ly8gTG9hZCBhbmQgY2FjaGUgYWxsIG5lZWRlZCBzb3VuZHNcblx0c2VsZi5pbml0ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRcdGlmICghb3B0aW9ucylcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHRyZWdpc3RlckF1ZGlvQ29udGV4dChvcHRpb25zLmF1ZGlvQ29udGV4dCk7IC8vIFRoaXMgd29ya3Mgbm8gbWF0dGVyIHdoYXQgLSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFjIGl0IGlzIGEgbm9wOyBpZiB0aGUgY29udGV4dCBpcyBub3QgcGFzc2VkIGluLCB0aGVuIGl0IGNyZWF0ZXMgb25lLlxuXHRcdHZhciBzdGFydFRpbWUgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblx0XHRzZWxmLmRlYnVnQ2FsbGJhY2sgPSBvcHRpb25zLmRlYnVnQ2FsbGJhY2s7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcImluaXQgY2FsbGVkXCIpO1xuXHRcdHNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSA9IHNlbGYuX2RldmljZUNhcGFibGUoKTtcblx0XHRpZiAoIXNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSlcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh7IHN0YXR1czogXCJOb3RTdXBwb3J0ZWRcIiwgbWVzc2FnZTogbm90U3VwcG9ydGVkTWVzc2FnZX0pO1xuXHRcdHNlbGYuc291bmRGb250VXJsID0gb3B0aW9ucy5zb3VuZEZvbnRVcmwgPyBvcHRpb25zLnNvdW5kRm9udFVybCA6IGRlZmF1bHRTb3VuZEZvbnRVcmw7XG5cdFx0c2VsZi5taWxsaXNlY29uZHNQZXJNZWFzdXJlID0gb3B0aW9ucy5taWxsaXNlY29uZHNQZXJNZWFzdXJlID8gb3B0aW9ucy5taWxsaXNlY29uZHNQZXJNZWFzdXJlIDogKG9wdGlvbnMudmlzdWFsT2JqID8gb3B0aW9ucy52aXN1YWxPYmoubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSgpIDogMTAwMCk7XG5cdFx0dmFyIHBhcmFtcyA9IG9wdGlvbnMub3B0aW9ucyA/IG9wdGlvbnMub3B0aW9ucyA6IHt9O1xuXHRcdHNlbGYubWV0ZXJTaXplID0gMTtcblx0XHRpZiAob3B0aW9ucy52aXN1YWxPYmopIHtcblx0XHRcdHZhciBzZXEgPSBzZXF1ZW5jZShvcHRpb25zLnZpc3VhbE9iaiwgcGFyYW1zKTtcblx0XHRcdHNlbGYuZmxhdHRlbmVkID0gZmxhdHRlbihzZXEsIHBhcmFtcyk7XG5cdFx0XHRzZWxmLm1ldGVyU2l6ZSA9IG9wdGlvbnMudmlzdWFsT2JqLmdldE1ldGVyRnJhY3Rpb24oKS5udW0gLyBvcHRpb25zLnZpc3VhbE9iai5nZXRNZXRlckZyYWN0aW9uKCkuZGVuO1xuXHRcdH0gZWxzZSBpZiAob3B0aW9ucy5zZXF1ZW5jZSlcblx0XHRcdHNlbGYuZmxhdHRlbmVkID0gb3B0aW9ucy5zZXF1ZW5jZTtcblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTXVzdCBwYXNzIGluIGVpdGhlciBhIHZpc3VhbE9iaiBvciBhIHNlcXVlbmNlXCIpKTtcblx0XHRzZWxmLnNlcXVlbmNlQ2FsbGJhY2sgPSBwYXJhbXMuc2VxdWVuY2VDYWxsYmFjaztcblx0XHRzZWxmLmNhbGxiYWNrQ29udGV4dCA9IHBhcmFtcy5jYWxsYmFja0NvbnRleHQ7XG5cdFx0c2VsZi5vbkVuZGVkID0gb3B0aW9ucy5vbkVuZGVkO1xuXG5cdFx0dmFyIGFsbE5vdGVzID0ge307XG5cdFx0dmFyIGN1cnJlbnRJbnN0cnVtZW50ID0gaW5zdHJ1bWVudEluZGV4VG9OYW1lWzBdO1xuXHRcdHNlbGYuZmxhdHRlbmVkLnRyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKSB7XG5cdFx0XHR0cmFjay5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChldmVudC5jbWQgPT09IFwicHJvZ3JhbVwiICYmIGluc3RydW1lbnRJbmRleFRvTmFtZVtldmVudC5pbnN0cnVtZW50XSlcblx0XHRcdFx0XHRjdXJyZW50SW5zdHJ1bWVudCA9IGluc3RydW1lbnRJbmRleFRvTmFtZVtldmVudC5pbnN0cnVtZW50XTtcblx0XHRcdFx0aWYgKGV2ZW50LnBpdGNoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR2YXIgcGl0Y2hOdW1iZXIgPSBldmVudC5waXRjaCArIDYwO1xuXHRcdFx0XHRcdHZhciBub3RlTmFtZSA9IHBpdGNoVG9Ob3RlTmFtZVtwaXRjaE51bWJlcl07XG5cdFx0XHRcdFx0aWYgKG5vdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWFsbE5vdGVzW2N1cnJlbnRJbnN0cnVtZW50XSlcblx0XHRcdFx0XHRcdFx0YWxsTm90ZXNbY3VycmVudEluc3RydW1lbnRdID0ge307XG5cdFx0XHRcdFx0XHRhbGxOb3Rlc1tjdXJyZW50SW5zdHJ1bWVudF1bcGl0Y2hUb05vdGVOYW1lW3BpdGNoTnVtYmVyXV0gPSB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coXCJDYW4ndCBmaW5kIG5vdGU6IFwiLCBwaXRjaE51bWJlcik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdGlmIChzZWxmLmRlYnVnQ2FsbGJhY2spXG5cdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJub3RlIGdhdGhlcmluZyB0aW1lID0gXCIgKyBNYXRoLmZsb29yKChhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZSAtIHN0YXJ0VGltZSkqMTAwMCkrXCJtc1wiKTtcblx0XHRzdGFydFRpbWUgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblxuXHRcdHZhciBub3RlcyA9IFtdO1xuXHRcdE9iamVjdC5rZXlzKGFsbE5vdGVzKS5mb3JFYWNoKGZ1bmN0aW9uKGluc3RydW1lbnQpIHtcblx0XHRcdE9iamVjdC5rZXlzKGFsbE5vdGVzW2luc3RydW1lbnRdKS5mb3JFYWNoKGZ1bmN0aW9uKG5vdGUpIHtcblx0XHRcdFx0bm90ZXMucHVzaCh7IGluc3RydW1lbnQ6IGluc3RydW1lbnQsIG5vdGU6IG5vdGUgfSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHQvLyBJZiB0aGVyZSBhcmUgbG90cyBvZiBub3RlcywgbG9hZCB0aGVtIGluIGJhdGNoZXNcblx0XHR2YXIgYmF0Y2hlcyA9IFtdO1xuXHRcdHZhciBDSFVOSyA9IDI1Njtcblx0XHRmb3IgKHZhciBpPTA7IGkgPCBub3Rlcy5sZW5ndGg7IGkgKz0gQ0hVTkspIHtcblx0XHRcdGJhdGNoZXMucHVzaChub3Rlcy5zbGljZShpLCBpICsgQ0hVTkspKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHR2YXIgcmVzdWx0cyA9IFtdO1xuXG5cdFx0XHR2YXIgaW5kZXggPSAwO1xuXHRcdFx0dmFyIG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKGluZGV4IDwgYmF0Y2hlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRzZWxmLl9sb2FkQmF0Y2goYmF0Y2hlc1tpbmRleF0sIHNlbGYuc291bmRGb250VXJsLCBzdGFydFRpbWUpLnRoZW4oZnVuY3Rpb24oZGF0YSkge1xuXHRcdFx0XHRcdFx0c3RhcnRUaW1lID0gYWN0aXZlQXVkaW9Db250ZXh0KCkuY3VycmVudFRpbWU7XG5cdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goZGF0YSk7XG5cdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0bmV4dCgpO1xuXHRcdFx0XHRcdH0sIHJlamVjdCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHRzKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG5leHQoKTtcblx0XHR9KTtcblx0fTtcblxuXHRzZWxmLl9sb2FkQmF0Y2ggPSAoZnVuY3Rpb24oYmF0Y2gsIHNvdW5kRm9udFVybCwgc3RhcnRUaW1lKSB7XG5cdFx0dmFyIHByb21pc2VzID0gW107XG5cdFx0YmF0Y2guZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRwcm9taXNlcy5wdXNoKGdldE5vdGUoc291bmRGb250VXJsLCBpdGVtLmluc3RydW1lbnQsIGl0ZW0ubm90ZSwgYWN0aXZlQXVkaW9Db250ZXh0KCkpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdGlmIChzZWxmLmRlYnVnQ2FsbGJhY2spXG5cdFx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcIm1wMyBsb2FkIHRpbWUgPSBcIiArIE1hdGguZmxvb3IoKGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lKSoxMDAwKStcIm1zXCIpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHNlbGYucHJpbWUgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLmlzUnVubmluZyA9IGZhbHNlO1xuXHRcdGlmICghc2VsZi5hdWRpb0J1ZmZlclBvc3NpYmxlKVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihub3RTdXBwb3J0ZWRNZXNzYWdlKSk7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcInByaW1lIGNhbGxlZFwiKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0dmFyIHN0YXJ0VGltZSA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lO1xuXHRcdFx0dmFyIHRlbXBvTXVsdGlwbGllciA9IHNlbGYubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSAvIDEwMDAgLyBzZWxmLm1ldGVyU2l6ZTtcblx0XHRcdHNlbGYuZHVyYXRpb24gPSBzZWxmLmZsYXR0ZW5lZC50b3RhbER1cmF0aW9uICogdGVtcG9NdWx0aXBsaWVyO1xuXHRcdFx0dmFyIHRvdGFsU2FtcGxlcyA9IE1hdGguZmxvb3IoYWN0aXZlQXVkaW9Db250ZXh0KCkuc2FtcGxlUmF0ZSAqIHNlbGYuZHVyYXRpb24pO1xuXG5cdFx0XHQvLyBUaGVyZSBtaWdodCBiZSBhIHByZXZpb3VzIHJ1biB0aGF0IG5lZWRzIHRvIGJlIHR1cm5lZCBvZmYuXG5cdFx0XHRzZWxmLnN0b3AoKTtcblxuXHRcdFx0dmFyIG5vdGVNYXBUcmFja3MgPSBjcmVhdGVOb3RlTWFwKHNlbGYuZmxhdHRlbmVkKTtcblx0XHRcdGlmIChzZWxmLnNlcXVlbmNlQ2FsbGJhY2spXG5cdFx0XHRcdHNlbGYuc2VxdWVuY2VDYWxsYmFjayhub3RlTWFwVHJhY2tzLCBzZWxmLmNhbGxiYWNrQ29udGV4dCk7XG5cdFx0XHQvL2NvbnNvbGUubG9nKG5vdGVNYXBUcmFja3MpO1xuXG5cdFx0XHRzZWxmLmF1ZGlvQnVmZmVycyA9IFtdO1xuXHRcdFx0bm90ZU1hcFRyYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG5vdGVNYXApIHtcblx0XHRcdFx0dmFyIGF1ZGlvQnVmZmVyID0gYWN0aXZlQXVkaW9Db250ZXh0KCkuY3JlYXRlQnVmZmVyKDEsIHRvdGFsU2FtcGxlcywgYWN0aXZlQXVkaW9Db250ZXh0KCkuc2FtcGxlUmF0ZSk7XG5cdFx0XHRcdHZhciBjaGFuRGF0YSA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApO1xuXG5cdFx0XHRcdG5vdGVNYXAuZm9yRWFjaChmdW5jdGlvbihub3RlKSB7XG5cdFx0XHRcdFx0c2VsZi5fcGxhY2VOb3RlKGNoYW5EYXRhLCBub3RlLCB0ZW1wb011bHRpcGxpZXIsIHNvdW5kc0NhY2hlKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2VsZi5hdWRpb0J1ZmZlcnMucHVzaChhdWRpb0J1ZmZlcik7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaykge1xuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJzYW1wbGVSYXRlID0gXCIgKyBhY3RpdmVBdWRpb0NvbnRleHQoKS5zYW1wbGVSYXRlKTtcblx0XHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKFwidG90YWxTYW1wbGVzID0gXCIgKyB0b3RhbFNhbXBsZXMpO1xuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJjcmVhdGlvblRpbWUgPSBcIiArIE1hdGguZmxvb3IoKGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lKSoxMDAwKSArIFwibXNcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXNvbHZlKHtcblx0XHRcdFx0c3RhdHVzOiBcIm9rXCIsXG5cdFx0XHRcdHNlY29uZHM6IDBcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9O1xuXG5cdC8vIFRoaXMgaXMgY2FsbGVkIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgc2V0IHVwLCBzbyBpdCBjYW4gcXVpY2tseSBtYWtlIHNvdW5kXG5cdHNlbGYuc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoc2VsZi5wYXVzZWRUaW1lU2VjKSB7XG5cdFx0XHRzZWxmLnJlc3VtZSgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICghc2VsZi5hdWRpb0J1ZmZlclBvc3NpYmxlKVxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKG5vdFN1cHBvcnRlZE1lc3NhZ2UpO1xuXHRcdGlmIChzZWxmLmRlYnVnQ2FsbGJhY2spXG5cdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2soXCJzdGFydCBjYWxsZWRcIik7XG5cblx0XHRzZWxmLl9raWNrT2ZmU291bmQoMCk7XG5cdFx0c2VsZi5zdGFydFRpbWVTZWMgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblx0XHRzZWxmLnBhdXNlZFRpbWVTZWMgPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKFwiTUlESSBTVEFSVEVEXCIsIHNlbGYuc3RhcnRUaW1lU2VjKTtcblx0fTtcblxuXHRzZWxmLnBhdXNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCFzZWxmLmF1ZGlvQnVmZmVyUG9zc2libGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iobm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcInBhdXNlIGNhbGxlZFwiKTtcblxuXHRcdGlmICghc2VsZi5wYXVzZWRUaW1lU2VjKSB7IC8vIGlnbm9yZSBpZiBzZWxmIGlzIGFscmVhZHkgcGF1c2VkLlxuXHRcdFx0c2VsZi5zdG9wKCk7XG5cdFx0XHRzZWxmLnBhdXNlZFRpbWVTZWMgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5yZXN1bWUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIXNlbGYuYXVkaW9CdWZmZXJQb3NzaWJsZSlcblx0XHRcdHRocm93IG5ldyBFcnJvcihub3RTdXBwb3J0ZWRNZXNzYWdlKTtcblx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0c2VsZi5kZWJ1Z0NhbGxiYWNrKFwicmVzdW1lIGNhbGxlZFwiKTtcblxuXHRcdHZhciBvZmZzZXQgPSBzZWxmLnBhdXNlZFRpbWVTZWMgLSBzZWxmLnN0YXJ0VGltZVNlYztcblx0XHRzZWxmLnN0YXJ0VGltZVNlYyA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmN1cnJlbnRUaW1lIC0gb2Zmc2V0OyAvLyBXZSBtb3ZlIHRoZSBzdGFydCB0aW1lIGluIGNhc2UgdGhlcmUgaXMgYW5vdGhlciBwYXVzZS9yZXN1bWUuXG5cdFx0c2VsZi5wYXVzZWRUaW1lU2VjID0gdW5kZWZpbmVkO1xuXHRcdHNlbGYuX2tpY2tPZmZTb3VuZChvZmZzZXQpO1xuXHR9O1xuXG5cdHNlbGYuc2VlayA9IGZ1bmN0aW9uKHBlcmNlbnQpIHtcblx0XHR2YXIgb2Zmc2V0ID0gc2VsZi5kdXJhdGlvbiAqIHBlcmNlbnQ7XG5cblx0XHQvLyBUT0RPLVBFUjogY2FuIHNlZWsgd2hlbiBwYXVzZWQgb3Igd2hlbiBwbGF5aW5nXG5cdFx0aWYgKCFzZWxmLmF1ZGlvQnVmZmVyUG9zc2libGUpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3Iobm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0aWYgKHNlbGYuZGVidWdDYWxsYmFjaylcblx0XHRcdHNlbGYuZGVidWdDYWxsYmFjayhcInNlZWsgY2FsbGVkIHNlYz1cIiArIG9mZnNldCk7XG5cblx0XHRpZiAoc2VsZi5pc1J1bm5pbmcpIHtcblx0XHRcdHNlbGYuc3RvcCgpO1xuXHRcdFx0c2VsZi5fa2lja09mZlNvdW5kKG9mZnNldCk7XG5cdFx0fVxuXHRcdHZhciBwYXVzZURpc3RhbmNlID0gc2VsZi5wYXVzZWRUaW1lU2VjID8gc2VsZi5wYXVzZWRUaW1lU2VjIC0gc2VsZi5zdGFydFRpbWVTZWMgOiB1bmRlZmluZWQ7XG5cdFx0c2VsZi5zdGFydFRpbWVTZWMgPSBhY3RpdmVBdWRpb0NvbnRleHQoKS5jdXJyZW50VGltZSAtIG9mZnNldDtcblx0XHRpZiAoc2VsZi5wYXVzZWRUaW1lU2VjKVxuXHRcdFx0c2VsZi5wYXVzZWRUaW1lU2VjID0gc2VsZi5zdGFydFRpbWVTZWMgKyBwYXVzZURpc3RhbmNlO1xuXHR9O1xuXG5cdHNlbGYuc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdHNlbGYuaXNSdW5uaW5nID0gZmFsc2U7XG5cdFx0c2VsZi5wYXVzZWRUaW1lU2VjID0gdW5kZWZpbmVkO1xuXHRcdHNlbGYuZGlyZWN0U291cmNlLmZvckVhY2goZnVuY3Rpb24oc291cmNlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRzb3VyY2Uuc3RvcCgpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0Ly8gV2UgZG9uJ3QgY2FyZSBpZiBzZWxmIHN1Y2NlZWRzOiBpdCBtaWdodCBmYWlsIGlmIHNvbWV0aGluZyBlbHNlIHR1cm5lZCBvZmYgdGhlIHNvdW5kIG9yIGl0IGVuZGVkIGZvciBzb21lIHJlYXNvbi5cblx0XHRcdFx0Y29uc29sZS5sb2coXCJkaXJlY3Qgc291cmNlIGRpZG4ndCBzdG9wOlwiLCBlcnJvcilcblx0XHRcdH1cblx0XHR9KTtcblx0XHRzZWxmLmRpcmVjdFNvdXJjZSA9IFtdO1xuXHR9O1xuXG5cdHNlbGYuZG93bmxvYWQgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG93bmxvYWRCdWZmZXIoc2VsZik7XG5cdH07XG5cblx0Ly8vLy8vLy8vLy8vLy8vIFByaXZhdGUgZnVuY3Rpb25zIC8vLy8vLy8vLy8vLy8vXG5cblx0c2VsZi5fZGV2aWNlQ2FwYWJsZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICghc3VwcG9ydHNBdWRpbygpKSB7XG5cdFx0XHRjb25zb2xlLndhcm4obm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0XHRpZiAoc2VsZi5kZWJ1Z0NhbGxiYWNrKVxuXHRcdFx0XHRzZWxmLmRlYnVnQ2FsbGJhY2sobm90U3VwcG9ydGVkTWVzc2FnZSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9O1xuXG5cdHNlbGYuX2tpY2tPZmZTb3VuZCA9IGZ1bmN0aW9uKHNlY29uZHMpIHtcblx0XHRzZWxmLmlzUnVubmluZyA9IHRydWU7XG5cdFx0c2VsZi5kaXJlY3RTb3VyY2UgPSBbXTtcblx0XHRzZWxmLmF1ZGlvQnVmZmVycy5mb3JFYWNoKGZ1bmN0aW9uKGF1ZGlvQnVmZmVyLCB0cmFja051bSkge1xuXHRcdFx0c2VsZi5kaXJlY3RTb3VyY2VbdHJhY2tOdW1dID0gYWN0aXZlQXVkaW9Db250ZXh0KCkuY3JlYXRlQnVmZmVyU291cmNlKCk7IC8vIGNyZWF0ZXMgYSBzb3VuZCBzb3VyY2Vcblx0XHRcdHNlbGYuZGlyZWN0U291cmNlW3RyYWNrTnVtXS5idWZmZXIgPSBhdWRpb0J1ZmZlcjsgLy8gdGVsbCB0aGUgc291cmNlIHdoaWNoIHNvdW5kIHRvIHBsYXlcblx0XHRcdHNlbGYuZGlyZWN0U291cmNlW3RyYWNrTnVtXS5jb25uZWN0KGFjdGl2ZUF1ZGlvQ29udGV4dCgpLmRlc3RpbmF0aW9uKTsgLy8gY29ubmVjdCB0aGUgc291cmNlIHRvIHRoZSBjb250ZXh0J3MgZGVzdGluYXRpb24gKHRoZSBzcGVha2Vycylcblx0XHR9KTtcblx0XHRzZWxmLmRpcmVjdFNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uKHNvdXJjZSkge1xuXHRcdFx0c291cmNlLnN0YXJ0KDAsIHNlY29uZHMpO1xuXHRcdH0pO1xuXHRcdGlmIChzZWxmLm9uRW5kZWQpIHtcblx0XHRcdHNlbGYuZGlyZWN0U291cmNlWzBdLm9uZW5kZWQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYub25FbmRlZChzZWxmLmNhbGxiYWNrQ29udGV4dCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblxuXHRzZWxmLl9wbGFjZU5vdGUgPSBmdW5jdGlvbihjaGFuRGF0YSwgbm90ZSwgdGVtcG9NdWx0aXBsaWVyLCBzb3VuZHNDYWNoZSkge1xuXHRcdHZhciBzdGFydCA9IE1hdGguZmxvb3Iobm90ZS5zdGFydCphY3RpdmVBdWRpb0NvbnRleHQoKS5zYW1wbGVSYXRlICogdGVtcG9NdWx0aXBsaWVyKTtcblx0XHR2YXIgbnVtQmVhdHMgPSBub3RlLmVuZCAtIG5vdGUuc3RhcnQ7XG5cdFx0dmFyIG5vdGVUaW1lU2VjID0gbnVtQmVhdHMgKiB0ZW1wb011bHRpcGxpZXI7XG5cdFx0dmFyIG5vdGVOYW1lID0gcGl0Y2hUb05vdGVOYW1lW25vdGUucGl0Y2grNjBdO1xuXHRcdGlmIChub3RlTmFtZSkgeyAvLyBKdXN0IGlnbm9yZSBwaXRjaGVzIHRoYXQgZG9uJ3QgZXhpc3QuXG5cdFx0XHR2YXIgcGl0Y2ggPSBzb3VuZHNDYWNoZVtub3RlLmluc3RydW1lbnRdW25vdGVOYW1lXS5nZXRDaGFubmVsRGF0YSgwKTtcblx0XHRcdHZhciBkdXJhdGlvbiA9IE1hdGgubWluKHBpdGNoLmxlbmd0aCwgTWF0aC5mbG9vcihub3RlVGltZVNlYyAqIGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnNhbXBsZVJhdGUpKTtcblx0XHRcdC8vY29uc29sZS5sb2cocGl0Y2hUb05vdGVbbm90ZS5waXRjaCsnJ10sIHN0YXJ0LCBudW1CZWF0cywgbm90ZVRpbWVTZWMsIGR1cmF0aW9uKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZHVyYXRpb247IGkrKykge1xuXHRcdFx0XHR2YXIgdGhpc1NhbXBsZSA9IHBpdGNoW2ldICogbm90ZS52b2x1bWUgLyAxMjg7XG5cdFx0XHRcdGlmIChjaGFuRGF0YVtzdGFydCArIGldKVxuXHRcdFx0XHRcdGNoYW5EYXRhW3N0YXJ0ICsgaV0gPSAoY2hhbkRhdGFbc3RhcnQgKyBpXSArIHRoaXNTYW1wbGUpICowLjc1O1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0Y2hhbkRhdGFbc3RhcnQgKyBpXSA9IHRoaXNTYW1wbGU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZVN5bnRoO1xuIiwidmFyIFN5bnRoU2VxdWVuY2UgPSBmdW5jdGlvbigpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRzZWxmLnRyYWNrcyA9IFtdO1xuXHRzZWxmLnRvdGFsRHVyYXRpb24gPSAwO1xuXG5cdHNlbGYuYWRkVHJhY2sgPSBmdW5jdGlvbigpIHtcblx0XHRzZWxmLnRyYWNrcy5wdXNoKFtdKTtcblx0XHRyZXR1cm4gc2VsZi50cmFja3MubGVuZ3RoIC0gMTtcblx0fTtcblxuXHRzZWxmLnNldEluc3RydW1lbnQgPSBmdW5jdGlvbih0cmFja051bWJlciwgaW5zdHJ1bWVudE51bWJlcikge1xuXHRcdHNlbGYudHJhY2tzW3RyYWNrTnVtYmVyXS5wdXNoKHtcblx0XHRcdGNoYW5uZWw6IDAsXG5cdFx0XHRjbWQ6IFwicHJvZ3JhbVwiLFxuXHRcdFx0aW5zdHJ1bWVudDogaW5zdHJ1bWVudE51bWJlclxuXHRcdH0pO1xuXHR9O1xuXG5cdHNlbGYuYXBwZW5kTm90ZSA9IGZ1bmN0aW9uKHRyYWNrTnVtYmVyLCBwaXRjaCwgZHVyYXRpb25Jbk1lYXN1cmVzLCB2b2x1bWUpIHtcblx0XHRzZWxmLnRyYWNrc1t0cmFja051bWJlcl0ucHVzaCh7XG5cdFx0XHRjbWQ6IFwic3RhcnRcIixcblx0XHRcdHBpdGNoOiBwaXRjaCAtIDYwLFxuXHRcdFx0dm9sdW1lOiB2b2x1bWVcblx0XHR9KTtcblx0XHRzZWxmLnRyYWNrc1t0cmFja051bWJlcl0ucHVzaCh7XG5cdFx0XHRjbWQ6IFwibW92ZVwiLFxuXHRcdFx0ZHVyYXRpb246IGR1cmF0aW9uSW5NZWFzdXJlc1xuXHRcdH0pO1xuXHRcdHNlbGYudHJhY2tzW3RyYWNrTnVtYmVyXS5wdXNoKHtcblx0XHRcdGNtZDogXCJzdG9wXCIsXG5cdFx0XHRwaXRjaDogcGl0Y2ggLSA2MFxuXHRcdH0pO1xuXHRcdHZhciBkdXJhdGlvbiA9IDA7XG5cdFx0c2VsZi50cmFja3NbdHJhY2tOdW1iZXJdLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpIHtcblx0XHRcdGlmIChldmVudC5kdXJhdGlvbilcblx0XHRcdFx0ZHVyYXRpb24gKz0gZXZlbnQuZHVyYXRpb247XG5cdFx0fSk7XG5cdFx0c2VsZi50b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoc2VsZi50b3RhbER1cmF0aW9uLCBkdXJhdGlvbik7XG5cdH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoU2VxdWVuY2U7XG4iLCJ2YXIgc3VwcG9ydHNBdWRpbyA9IHJlcXVpcmUoJy4vc3VwcG9ydHMtYXVkaW8nKTtcbnZhciByZWdpc3RlckF1ZGlvQ29udGV4dCA9IHJlcXVpcmUoJy4vcmVnaXN0ZXItYXVkaW8tY29udGV4dCcpO1xudmFyIGFjdGl2ZUF1ZGlvQ29udGV4dCA9IHJlcXVpcmUoJy4vYWN0aXZlLWF1ZGlvLWNvbnRleHQnKTtcbnZhciBwYXJzZUNvbW1vbiA9IHJlcXVpcmUoJy4uL3BhcnNlL2FiY19jb21tb24nKTtcbi8vIFRPRE8tUEVSOiBUaGUgcmVxdWlyZSBzdGF0ZW1lbnRzIGZvciBzdmcgZG9uJ3QgcGxheSB3ZWxsIGZvciBub2RlIGFwcHMgd2l0aG91dCBleHRyYSBwbHVnaW5zLiBUaGUgZm9sbG93aW5nIGxpbmVzIHdvdWxkIGJlIGNsZWFyZXIgdGhhbiBpbmxpbmluZyB0aGUgU1ZHXG4vLyB2YXIgbG9vcEltYWdlID0gcmVxdWlyZSgnLi9pbWFnZXMvbG9vcC5zdmcnKTtcbi8vIHZhciBwbGF5SW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9wbGF5LnN2ZycpO1xuLy8gdmFyIHBhdXNlSW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9wYXVzZS5zdmcnKTtcbi8vIHZhciBsb2FkaW5nSW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9sb2FkaW5nLnN2ZycpO1xuLy8gdmFyIHJlc2V0SW1hZ2UgPSByZXF1aXJlKCcuL2ltYWdlcy9yZXNldC5zdmcnKTtcbnZhciBsb29wSW1hZ2UgPSAnPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNzAwIDcwMFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJ4TWlkWU1pZCBtZWV0XCI+XFxuJyArXG5cdCc8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMCw3MDApIHNjYWxlKDAuMSwtMC4xKVwiID5cXG4nICtcblx0JzxwYXRoIGQ9XCJNMzExMSA2OTgxIGMtMjAgLTM3IC05MCAtNTUgLTM2NCAtOTYgLTEyMCAtMTggLTE5MCAtMzMgLTI0NCAtNTUgJyArXG5cdCctNDIgLTE3IC0xMjQgLTQyIC0xODIgLTU2IC03OCAtMTggLTExOSAtMzQgLTE1NyAtNjAgLTI4IC0xOSAtODYgLTQ2IC0xMjggJyArXG5cdCctNjAgLTQzIC0xMyAtMTA3IC00MiAtMTQ0IC02NCAtMzcgLTIzIC04NCAtNDYgLTEwNiAtNTIgLTIxIC03IC01NiAtMjkgLTc5ICcgK1xuXHQnLTUwIC0yMiAtMjIgLTYxIC01MCAtODYgLTYzIC0yNiAtMTMgLTY3IC00MCAtOTEgLTYwIC0yNCAtMjAgLTY1IC00NyAtOTAgLTYwICcgK1xuXHQnLTI1IC0xMyAtNTMgLTMxIC02MSAtNDEgLTggLTkgLTMyIC0zMCAtNTQgLTQ2IC03NSAtNTQgLTQ4NiAtNDYwIC01MTIgLTUwNyAnICtcblx0Jy0xNSAtMjUgLTQ4IC02OSAtNzUgLTk4IC0yNiAtMjggLTQ4IC01NyAtNDggLTYzIDAgLTYgLTE4IC0yOSAtMzkgLTUzIC0yMSAnICtcblx0Jy0yMyAtNTYgLTcxIC03NyAtMTA3IC0yMCAtMzYgLTUwIC04MCAtNjUgLTk3IC0xNiAtMTggLTMzIC01MiAtNDAgLTc1IC0xMiAnICtcblx0Jy00NyAtNDcgLTExNSAtODQgLTE2NiAtMTMgLTE4IC0zMCAtNTYgLTM4IC04MyAtOCAtMjcgLTM0IC04MCAtNTYgLTExOCAtMzMgJyArXG5cdCctNTMgLTQ2IC05MSAtNjIgLTE2NyAtMTIgLTYzIC0zNCAtMTI3IC01OSAtMTc5IC00MiAtODQgLTYwIC0xNjYgLTYwIC0yNzAgMCAnICtcblx0Jy05MCAyNiAtMTIyIDEyNSAtMTU0IDU0IC0xNyA5NiAtMTkgNDMwIC0yMCAzMDUgLTEgMzgxIDIgNDMwIDE0IDgyIDIyIDE0MCA1MSAnICtcblx0JzE1MyA3OCA2IDEyIDIyIDQ3IDM3IDc3IDE0IDMwIDM4IDc3IDU0IDEwMyAxNSAyNyAzNCA3MyA0MCAxMDMgNyAzMCAyOCA3OCA0OCAnICtcblx0JzEwNyAxOSAyOCA0NCA3NCA1NSAxMDEgMTAgMjggMzQgNjcgNTMgODcgMTggMjAgNDkgNjEgNjggOTAgMTkgMzAgNDQgNjMgNTcgJyArXG5cdCc3NCAxMyAxMSAzNiA0MCA1MiA2NSA1OSA5NCAyMzIgMjcwIDMwNiAzMTMgMjAgMTEgNTcgMzcgODIgNTggMjUgMjAgNzAgNTIgJyArXG5cdCcxMDAgNzIgMzAgMTkgNjYgNDcgNzkgNjEgMTMgMTQgNDkgMzUgODAgNDYgMzAgMTIgODAgMzcgMTExIDU2IDMxIDE5IDk1IDQ1ICcgK1xuXHQnMTQzIDU4IDQ4IDEyIDExMCAzNyAxMzkgNTUgNjMgNDAgMTI3IDU1IDMyMyA3NiA4MyA5IDIwOCAyOCAyNzkgNDEgMTU2IDI5ICcgK1xuXHQnMTY1IDI5IDMzMCA0IDQ1MyAtNzEgNTE0IC04NCA2MDYgLTEzMCAzMSAtMTYgODMgLTM2IDExNiAtNDUgMzIgLTkgODQgLTM0ICcgK1xuXHQnMTE1IC01NiAzMSAtMjEgODIgLTQ4IDExMyAtNjAgMzIgLTExIDcyIC0zMyA4OSAtNDggMTggLTE2IDU5IC00NSA5MiAtNjUgMzMgJyArXG5cdCctMjEgNzQgLTUxIDkwIC02NiAxNyAtMTUgNDkgLTQwIDczIC01NCA1MiAtMzIgNjUgLTYxIDUwIC0xMTMgLTggLTMxIC02MSAtOTAgJyArXG5cdCctMjc3IC0zMDggLTMwMCAtMzAzIC0zNjEgLTM4MiAtMzY5IC00ODEgLTIgLTI5IDAgLTY2IDYgLTgxIDEzIC00MCA4OCAtMTM4ICcgK1xuXHQnMTE1IC0xNTEgMTIgLTYgNTQgLTI2IDkyIC00NCBsNzAgLTMzIDk0NSAtMiBjNTIwIC0xIDk3NSAyIDEwMTIgNyA2NCA4IDE5MSAnICtcblx0JzUwIDIzMSA3NiAxMSA3IDMzIDM0IDUwIDYwIDIyIDM0IDQyIDUxIDY1IDU4IGwzMiA5IDAgMTEwMSAwIDExMDIgLTMyIDkgYy0yMSAnICtcblx0JzcgLTQ0IDI2IC02NCA1NSAtNjAgODQgLTc3IDk3IC0xNDAgMTEwIC00NCA5IC03NiAxMCAtMTI3IDIgLTU5IC05IC03NyAtMTcgJyArXG5cdCctMTM0IC02MiAtMzcgLTI4IC0xNzIgLTE1NSAtMzAxIC0yODEgLTEyOSAtMTI3IC0yNDkgLTIzNyAtMjY3IC0yNDUgLTI1IC0xMCAnICtcblx0Jy00MSAtMTEgLTcxIC0yIC01OCAxNSAtMTEyIDQ1IC0xMjQgNjkgLTYgMTEgLTM1IDM1IC02NCA1NCAtMjggMTggLTU4IDQxIC02NiAnICtcblx0JzUwIC04IDkgLTQxIDM1IC03NSA1OCAtMzMgMjIgLTc3IDU2IC05OSA3NSAtMjEgMTggLTY0IDQ2IC05NSA2MSAtMzEgMTQgLTczICcgK1xuXHQnMzkgLTkzIDU1IC0yMCAxNSAtNzAgNDAgLTExMCA1NSAtNDAgMTUgLTk3IDQ0IC0xMjcgNjQgLTI5IDIxIC03OCA0NCAtMTA3IDUzICcgK1xuXHQnLTMwIDggLTc3IDMxIC0xMDUgNTEgLTQyIDI4IC03MyAzOSAtMTczIDYwIC02OCAxNCAtMTU0IDM5IC0xOTYgNTggLTk1IDQzICcgK1xuXHQnLTEzMSA1MSAtMzQzIDc2IC0yMDkgMjQgLTI0MiAzMiAtMjc5IDcwIGwtMzAgMjkgLTMyOCAwIGMtMzEyIDAgLTMzMCAtMSAtMzM5ICcgK1xuXHQnLTE5elwiPjwvcGF0aD5cXG4nICtcblx0JzxwYXRoIGQ9XCJNMjU0IDI4NzUgYy04OSAtMTYgLTEwNyAtMjYgLTE0NSAtNzggLTMyIC00NCAtNjIgLTY2IC05MSAtNjcgLTE3IDAgJyArXG5cdCctMTggLTYxIC0xOCAtMTE0MCBsMCAtMTE0MCAyNCAwIGMxNiAwIDQxIC0xNyA3MiAtNTAgNDAgLTQyIDYxIC01NSAxMTcgLTcyICcgK1xuXHQnbDY5IC0yMSA4MiAyMyBjNDQgMTIgOTYgMzAgMTE0IDM5IDE4IDkgMTQ4IDEzMiAyOTAgMjcyIDE0MSAxNDEgMjY3IDI2MSAyNzkgJyArXG5cdCcyNjggNTEgMjYgODYgMTQgMTc2IC02MSAzMiAtMjYgNjIgLTQ4IDY2IC00OCA1IDAgMzYgLTI1IDcwIC01NSAzNCAtMzAgNzQgJyArXG5cdCctNjEgODkgLTY5IDE1IC04IDM3IC0yOCA1MCAtNDUgMTIgLTE3IDUwIC00NSA4NCAtNjIgMzQgLTE3IDc4IC00NCA5OCAtNjAgMTkgJyArXG5cdCctMTYgNjEgLTM3IDkzIC00OCAzMiAtMTEgODEgLTM3IDEwNyAtNTYgMjcgLTIwIDc2IC00NSAxMDkgLTU2IDMzIC0xMiA3NSAtMzEgJyArXG5cdCc5MyAtNDQgNjIgLTQ1IDkzIC01OCAxOTEgLTgyIDU0IC0xMiAxMzAgLTM3IDE2OCAtNTQgNjggLTI5IDE4MCAtNTggMjI2IC01OSAnICtcblx0JzYyIDAgMTgzIC02NCAxODMgLTk2IDAgLTEyIDg4IC0xNCA2MzkgLTE0IGw2MzkgMCAxMiAzMCBjMTggNDQgNzYgNjYgMjMzIDg5ICcgK1xuXHQnODkgMTQgMTYwIDMwIDIwMCA0NyAzNCAxNSAxMDYgNDIgMTU5IDYwIDU0IDE4IDExMiA0NCAxMzAgNTcgNDcgMzUgODUgNTIgMTQ2ICcgK1xuXHQnNjcgMjkgNyA3NiAyOCAxMDUgNDggMjkgMjAgNzcgNDggMTA3IDYzIDMwIDE1IDY2IDM5IDgwIDU0IDE0IDE1IDUwIDQwIDgxIDU2ICcgK1xuXHQnMzEgMTUgNzggNDYgMTA0IDY5IDI2IDIyIDYxIDQ2IDc5IDU0IDE3IDcgNDMgMjYgNTYgNDIgMTQgMTYgNDEgNDEgNjAgNTYgNjQgJyArXG5cdCc0OCAzODAgMzYyIDQwOCA0MDUgMTUgMjMgNDAgNTEgNTUgNjMgMTUgMTIgMzYgMzggNDYgNTggMTEgMjEgMzcgNTcgNTggODIgMjIgJyArXG5cdCcyNSA0OSA2MiA2MiA4MyAxMyAyMCAzOCA1NiA1NyA3OCAxOSAyMyA1MCA3NCA2OSAxMTMgMTkgMzkgNDYgODYgNTkgMTA0IDE0ICcgK1xuXHQnMTggMzQgNjIgNDYgOTggMTIgMzYgMzIgNzcgNDUgOTIgMzEgMzggNjAgOTcgODAgMTY3IDkgMzMgMjYgNzYgMzcgOTUgMjkgNTAgJyArXG5cdCc0NyAxMDMgNjggMjA2IDEwIDUyIDMyIDExNyA1MSAxNTUgMjkgNTYgMzMgNzQgMzQgMTQwIDAgOTQgLTEwIDEwOCAtMTAxIDEzOCAnICtcblx0Jy02MSAyMCAtODMgMjEgLTQ2MyAyMSAtMjI2IDAgLTQyMSAtNCAtNDUxIC0xMCAtNjMgLTEyIC04NiAtMzAgLTExMCAtODUgLTEwICcgK1xuXHQnLTIyIC0zMyAtNjMgLTUyIC05MiAtMjEgLTMxIC00MiAtODAgLTUzIC0xMjMgLTExIC00NCAtMzIgLTkzIC01NiAtMTI4IC0yMCAnICtcblx0Jy0zMiAtNDcgLTgzIC01OSAtMTE1IC0xMiAtMzIgLTM3IC03NyAtNTYgLTEwMCAtMTkgLTIzIC01MCAtNjUgLTY5IC05NCAtMTkgJyArXG5cdCctMjkgLTQ0IC01NyAtNTQgLTYzIC0xMSAtNSAtMjkgLTI3IC00MiAtNDcgLTUyIC04NSAtMjM0IC0yNzcgLTMwMCAtMzE1IC0yNSAnICtcblx0Jy0xNSAtNTMgLTM4IC02MiAtNTEgLTkgLTE0IC00MiAtMzkgLTc0IC01NyAtMzIgLTE4IC03NSAtNDggLTk1IC02NiAtMjEgLTE4ICcgK1xuXHQnLTU5IC00NCAtODUgLTU4IC0yNiAtMTMgLTcyIC00MCAtMTAwIC01OSAtMzUgLTI0IC03OCAtNDEgLTEyOCAtNTIgLTQ3IC0xMSAnICtcblx0Jy05OSAtMzEgLTEzOSAtNTYgLTY5IC00MiAtOTQgLTQ5IC0zOTEgLTExMCAtMjQ1IC01MSAtNDI1IC02NiAtNTk1IC01MCAtMTY4ICcgK1xuXHQnMTYgLTIzMCAyNyAtMzMwIDYxIC00NyAxNiAtMTIzIDM1IC0xNzAgNDQgLTk4IDE3IC0xMjMgMjUgLTE3MiA1OCAtMjAgMTQgLTcxICcgK1xuXHQnMzcgLTExNCA1MyAtNDQgMTUgLTk1IDQwIC0xMTUgNTYgLTIwIDE2IC03MCA0MiAtMTEwIDU5IC00MCAxNiAtODggNDUgLTEwOCAnICtcblx0JzYzIC0yMCAxOSAtNTUgNDYgLTc4IDYxIC0yNCAxNCAtNDkgMzUgLTU1IDQ3IC03IDExIC0zNCAzMyAtNjAgNDkgLTUwIDMxIC02NSAnICtcblx0JzYxIC01MyAxMDIgNCAxMyAxMzAgMTQ3IDI4MSAyOTggMjM2IDIzOCAyNzcgMjgzIDI5OSAzMzUgMTUgMzIgMzUgNzEgNDYgODYgJyArXG5cdCcxMiAxOCAxOSA0NCAxOSA3NiAwIDQyIC04IDYzIC01MyAxMzggLTkyIDE1MSAxMSAxMzkgLTEyMDcgMTQxIC03OTggMiAtMTAzMCAnICtcblx0JzAgLTEwODYgLTExelwiPjwvcGF0aD5cXG4nICtcblx0JzwvZz5cXG4nICtcblx0Jzwvc3ZnPlxcbic7XG52YXIgcGxheUltYWdlID0gJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjUgMjVcIiBjbGFzcz1cImFiY2pzLXBsYXktc3ZnXCI+XFxuJyArXG5cdCcgICAgPGc+XFxuJyArXG5cdCcgICAgPHBvbHlnb24gcG9pbnRzPVwiNCAwIDIzIDEyLjUgNCAyNVwiLz5cXG4nICtcblx0JyAgICA8L2c+XFxuJyArXG5cdCc8L3N2Zz4nO1xudmFyIHBhdXNlSW1hZ2UgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNSAyNVwiIGNsYXNzPVwiYWJjanMtcGF1c2Utc3ZnXCI+XFxuJyArXG5cdCcgIDxnPlxcbicgK1xuXHQnICAgIDxyZWN0IHdpZHRoPVwiOC4yM1wiIGhlaWdodD1cIjI1XCIvPlxcbicgK1xuXHQnICAgIDxyZWN0IHdpZHRoPVwiOC4yM1wiIGhlaWdodD1cIjI1XCIgeD1cIjE3XCIvPlxcbicgK1xuXHQnICA8L2c+XFxuJyArXG5cdCc8L3N2Zz4nO1xudmFyIGxvYWRpbmdJbWFnZSA9ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDEwMCAxMDBcIiBjbGFzcz1cImFiY2pzLWxvYWRpbmctc3ZnXCI+XFxuJyArXG5cdCcgICAgPGNpcmNsZSBjeD1cIjUwXCIgY3k9XCI1MFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMjBcIiByPVwiMzVcIiBzdHJva2UtZGFzaGFycmF5PVwiMTYwIDU1XCI+PC9jaXJjbGU+XFxuJyArXG5cdCc8L3N2Zz4nO1xudmFyIHJlc2V0SW1hZ2UgPSAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNSAyNVwiPlxcbicgK1xuXHQnICA8Zz5cXG4nICtcblx0JyAgICA8cG9seWdvbiBwb2ludHM9XCI1IDEyLjUgMjQgMCAyNCAyNVwiLz5cXG4nICtcblx0JyAgICA8cmVjdCB3aWR0aD1cIjNcIiBoZWlnaHQ9XCIyNVwiIHg9XCIwXCIgeT1cIjBcIi8+XFxuJyArXG5cdCcgIDwvZz5cXG4nICtcblx0Jzwvc3ZnPic7XG5cbmZ1bmN0aW9uIENyZWF0ZVN5bnRoQ29udHJvbChwYXJlbnQsIG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHQvLyBwYXJlbnQgaXMgZWl0aGVyIGFuIGVsZW1lbnQgb3IgYSBzZWxlY3Rvci5cblx0aWYgKHR5cGVvZiBwYXJlbnQgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YXIgc2VsZWN0b3IgPSBwYXJlbnQ7XG5cdFx0cGFyZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cdFx0aWYgKCFwYXJlbnQpXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBlbGVtZW50IFxcXCJcIiArIHNlbGVjdG9yICsgXCJcXFwiIGluIHRoZSBET00uXCIpO1xuXHR9IGVsc2UgaWYgKCEocGFyZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKVxuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBmaXJzdCBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbGlkIGVsZW1lbnQgb3Igc2VsZWN0b3IgaW4gdGhlIERPTS5cIik7XG5cblx0c2VsZi5wYXJlbnQgPSBwYXJlbnQ7XG5cdHNlbGYub3B0aW9ucyA9IHt9O1xuXHRpZiAob3B0aW9ucylcblx0XHRzZWxmLm9wdGlvbnMgPSBwYXJzZUNvbW1vbi5jbG9uZShvcHRpb25zKTtcblxuXHQvLyBUaGlzIGNhbiBiZSBjYWxsZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gQUMgYWxyZWFkeSByZWdpc3RlcmVkIGFuZCBub3Qgc3VzcGVuZGVkXG5cdC8vIEFDIGFscmVhZHkgcmVnaXN0ZXJlZCBhbmQgc3VzcGVuZGVkXG5cdC8vIEFDIG5vdCByZWdpc3RlcmVkIGFuZCBub3QgcGFzc2VkIGluXG5cdC8vIEFDIG5vdCByZWdpc3RlcmVkIGJ1dCBwYXNzZWQgaW4gKGJ1dCBzdXNwZW5kZWQpXG5cdC8vIEFDIG5vdCByZWdpc3RlcmVkIGJ1dCBwYXNzZWQgaW4gKG5vdCBzdXNwZW5kZWQpXG5cdC8vIElmIHRoZSBBQyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHRoZW4ganVzdCB1c2UgaXQgLSBpZ25vcmUgd2hhdCBpcyBwYXNzZWQgaW5cblx0Ly8gQ3JlYXRlIHRoZSBBQyBpZiBuZWNlc3NhcnkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkuXG5cdC8vIFdlIGRvbid0IGNhcmUgcmlnaHQgbm93IGlmIHRoZSBBQyBpcyBzdXNwZW5kZWQgLSB3aGVuZXZlciBhIGJ1dHRvbiBpcyBjbGlja2VkIHRoZW4gd2UgY2hlY2sgaXQuXG5cdGlmIChzZWxmLm9wdGlvbnMuYWMpXG5cdFx0cmVnaXN0ZXJBdWRpb0NvbnRleHQoc2VsZi5vcHRpb25zLmFjKTtcblx0YnVpbGREb20oc2VsZi5wYXJlbnQsIHNlbGYub3B0aW9ucyk7XG5cdGF0dGFjaExpc3RlbmVycyhzZWxmKTtcblxuXHRzZWxmLnNldFRlbXBvID0gZnVuY3Rpb24odGVtcG8pIHtcblx0XHR2YXIgZWwgPSBzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktY3VycmVudC10ZW1wb1wiKTtcblx0XHRpZiAoZWwpXG5cdFx0XHRlbC5pbm5lckhUTUwgPSB0ZW1wbztcblx0fTtcblx0c2VsZi5yZXNldEFsbCA9IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBwdXNoZWRCdXR0b25zID0gc2VsZi5wYXJlbnQucXVlcnlTZWxlY3RvckFsbChcIi5hYmNqcy1wdXNoZWRcIik7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwdXNoZWRCdXR0b25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYnV0dG9uID0gcHVzaGVkQnV0dG9uc1tpXTtcblx0XHRcdGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiYWJjanMtcHVzaGVkXCIpO1xuXHRcdH1cblx0fTtcblx0c2VsZi5wdXNoUGxheSA9IGZ1bmN0aW9uKHB1c2gpIHtcblx0XHR2YXIgc3RhcnRCdXR0b24gPSBzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktc3RhcnRcIik7XG5cdFx0aWYgKCFzdGFydEJ1dHRvbilcblx0XHRcdHJldHVybjtcblx0XHRpZiAocHVzaClcblx0XHRcdHN0YXJ0QnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJhYmNqcy1wdXNoZWRcIik7XG5cdFx0ZWxzZVxuXHRcdFx0c3RhcnRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcImFiY2pzLXB1c2hlZFwiKTtcblx0fTtcblx0c2VsZi5wdXNoTG9vcCA9IGZ1bmN0aW9uKHB1c2gpIHtcblx0XHR2YXIgbG9vcEJ1dHRvbiA9IHNlbGYucGFyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWJjanMtbWlkaS1sb29wXCIpO1xuXHRcdGlmICghbG9vcEJ1dHRvbilcblx0XHRcdHJldHVybjtcblx0XHRpZiAocHVzaClcblx0XHRcdGxvb3BCdXR0b24uY2xhc3NMaXN0LmFkZChcImFiY2pzLXB1c2hlZFwiKTtcblx0XHRlbHNlXG5cdFx0XHRsb29wQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJhYmNqcy1wdXNoZWRcIik7XG5cdH07XG5cblx0c2VsZi5zZXRQcm9ncmVzcyA9IGZ1bmN0aW9uIChwZXJjZW50LCB0b3RhbFRpbWUpIHtcblx0XHR2YXIgcHJvZ3Jlc3NCYWNrZ3JvdW5kID0gc2VsZi5wYXJlbnQucXVlcnlTZWxlY3RvcihcIi5hYmNqcy1taWRpLXByb2dyZXNzLWJhY2tncm91bmRcIik7XG5cdFx0dmFyIHByb2dyZXNzVGh1bWIgPSBzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktcHJvZ3Jlc3MtaW5kaWNhdG9yXCIpO1xuXHRcdGlmICghcHJvZ3Jlc3NCYWNrZ3JvdW5kIHx8ICFwcm9ncmVzc1RodW1iKVxuXHRcdFx0cmV0dXJuO1xuXHRcdHZhciB3aWR0aCA9IHByb2dyZXNzQmFja2dyb3VuZC5jbGllbnRXaWR0aDtcblx0XHR2YXIgbGVmdCA9IHdpZHRoICogcGVyY2VudDtcblx0XHRwcm9ncmVzc1RodW1iLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuXG5cdFx0dmFyIGNsb2NrID0gc2VsZi5wYXJlbnQucXVlcnlTZWxlY3RvcihcIi5hYmNqcy1taWRpLWNsb2NrXCIpO1xuXHRcdGlmIChjbG9jaykge1xuXHRcdFx0dmFyIHRvdGFsU2Vjb25kcyA9ICh0b3RhbFRpbWUgKiBwZXJjZW50KSAvIDEwMDA7XG5cdFx0XHR2YXIgbWludXRlcyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gNjApO1xuXHRcdFx0dmFyIHNlY29uZHMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAlIDYwKTtcblx0XHRcdHZhciBzZWNvbmRzRm9ybWF0dGVkID0gc2Vjb25kcyA8IDEwID8gXCIwXCIgKyBzZWNvbmRzIDogc2Vjb25kcztcblx0XHRcdGNsb2NrLmlubmVySFRNTCA9IG1pbnV0ZXMgKyBcIjpcIiArIHNlY29uZHNGb3JtYXR0ZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmIChzZWxmLm9wdGlvbnMuYWZ0ZXJSZXN1bWUpIHtcblx0XHR2YXIgaXNSZXN1bWVkID0gZmFsc2U7XG5cdFx0aWYgKHNlbGYub3B0aW9ucy5hYykge1xuXHRcdFx0aXNSZXN1bWVkID0gc2VsZi5vcHRpb25zLmFjLnN0YXRlICE9PSBcInN1c3BlbmRlZFwiO1xuXHRcdH0gZWxzZSBpZiAoYWN0aXZlQXVkaW9Db250ZXh0KCkpIHtcblx0XHRcdGlzUmVzdW1lZCA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnN0YXRlICE9PSBcInN1c3BlbmRlZFwiO1xuXHRcdH1cblx0XHRpZiAoaXNSZXN1bWVkKVxuXHRcdFx0c2VsZi5vcHRpb25zLmFmdGVyUmVzdW1lKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGREb20ocGFyZW50LCBvcHRpb25zKSB7XG5cdHZhciBoYXNMb29wID0gISFvcHRpb25zLmxvb3BIYW5kbGVyO1xuXHR2YXIgaGFzUmVzdGFydCA9ICEhb3B0aW9ucy5yZXN0YXJ0SGFuZGxlcjtcblx0dmFyIGhhc1BsYXkgPSAhIW9wdGlvbnMucGxheUhhbmRsZXIgfHwgISFvcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlcjtcblx0dmFyIGhhc1Byb2dyZXNzID0gISFvcHRpb25zLnByb2dyZXNzSGFuZGxlcjtcblx0dmFyIGhhc1dhcnAgPSAhIW9wdGlvbnMud2FycEhhbmRsZXI7XG5cdHZhciBoYXNDbG9jayA9IG9wdGlvbnMuaGFzQ2xvY2sgIT09IGZhbHNlO1xuXG5cdHZhciBodG1sID0gJzxkaXYgY2xhc3M9XCJhYmNqcy1pbmxpbmUtYXVkaW9cIj5cXG4nO1xuXHRpZiAoaGFzTG9vcCkge1xuXHRcdHZhciByZXBlYXRUaXRsZSA9IG9wdGlvbnMucmVwZWF0VGl0bGUgPyBvcHRpb25zLnJlcGVhdFRpdGxlIDogXCJDbGljayB0byB0b2dnbGUgcGxheSBvbmNlL3JlcGVhdC5cIjtcblx0XHR2YXIgcmVwZWF0QXJpYSA9IG9wdGlvbnMucmVwZWF0QXJpYSA/IG9wdGlvbnMucmVwZWF0QXJpYSA6IHJlcGVhdFRpdGxlO1xuXHRcdGh0bWwgKz0gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWJjanMtbWlkaS1sb29wIGFiY2pzLWJ0blwiIHRpdGxlPVwiJyArIHJlcGVhdFRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgcmVwZWF0QXJpYSArICdcIj4nICsgbG9vcEltYWdlICsgJzwvYnV0dG9uPlxcbic7XG5cdH1cblx0aWYgKGhhc1Jlc3RhcnQpIHtcblx0XHR2YXIgcmVzdGFydFRpdGxlID0gb3B0aW9ucy5yZXN0YXJ0VGl0bGUgPyBvcHRpb25zLnJlc3RhcnRUaXRsZSA6IFwiQ2xpY2sgdG8gZ28gdG8gYmVnaW5uaW5nLlwiO1xuXHRcdHZhciByZXN0YXJ0QXJpYSA9IG9wdGlvbnMucmVzdGFydEFyaWEgPyBvcHRpb25zLnJlc3RhcnRBcmlhIDogcmVzdGFydFRpdGxlO1xuXHRcdGh0bWwgKz0gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYWJjanMtbWlkaS1yZXNldCBhYmNqcy1idG5cIiB0aXRsZT1cIicgKyByZXN0YXJ0VGl0bGUgKyAnXCIgYXJpYS1sYWJlbD1cIicgKyByZXN0YXJ0QXJpYSArICdcIj4nICsgcmVzZXRJbWFnZSArICc8L2J1dHRvbj5cXG4nO1xuXHR9XG5cdGlmIChoYXNQbGF5KSB7XG5cdFx0dmFyIHBsYXlUaXRsZSA9IG9wdGlvbnMucGxheVRpdGxlID8gb3B0aW9ucy5wbGF5VGl0bGUgOiBcIkNsaWNrIHRvIHBsYXkvcGF1c2UuXCI7XG5cdFx0dmFyIHBsYXlBcmlhID0gb3B0aW9ucy5wbGF5QXJpYSA/IG9wdGlvbnMucGxheUFyaWEgOiBwbGF5VGl0bGU7XG5cdFx0aHRtbCArPSAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhYmNqcy1taWRpLXN0YXJ0IGFiY2pzLWJ0blwiIHRpdGxlPVwiJyArIHBsYXlUaXRsZSArICdcIiBhcmlhLWxhYmVsPVwiJyArIHBsYXlBcmlhICsgJ1wiPicgKyBwbGF5SW1hZ2UgKyBwYXVzZUltYWdlICsgbG9hZGluZ0ltYWdlICsgJzwvYnV0dG9uPlxcbic7XG5cdH1cblx0aWYgKGhhc1Byb2dyZXNzKSB7XG5cdFx0dmFyIHJhbmRvbVRpdGxlID0gb3B0aW9ucy5yYW5kb21UaXRsZSA/IG9wdGlvbnMucmFuZG9tVGl0bGUgOiBcIkNsaWNrIHRvIGNoYW5nZSB0aGUgcGxheWJhY2sgcG9zaXRpb24uXCI7XG5cdFx0dmFyIHJhbmRvbUFyaWEgPSBvcHRpb25zLnJhbmRvbUFyaWEgPyBvcHRpb25zLnJhbmRvbUFyaWEgOiByYW5kb21UaXRsZTtcblx0XHRodG1sICs9ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImFiY2pzLW1pZGktcHJvZ3Jlc3MtYmFja2dyb3VuZFwiIHRpdGxlPVwiJyArIHJhbmRvbVRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgcmFuZG9tQXJpYSArICdcIj48c3BhbiBjbGFzcz1cImFiY2pzLW1pZGktcHJvZ3Jlc3MtaW5kaWNhdG9yXCI+PC9zcGFuPjwvYnV0dG9uPlxcbic7XG5cdH1cblx0aWYgKGhhc0Nsb2NrKSB7XG5cdFx0aHRtbCArPSAnPHNwYW4gY2xhc3M9XCJhYmNqcy1taWRpLWNsb2NrXCI+PC9zcGFuPlxcbic7XG5cdH1cblx0aWYgKGhhc1dhcnApIHtcblx0XHR2YXIgd2FycFRpdGxlID0gb3B0aW9ucy53YXJwVGl0bGUgPyBvcHRpb25zLndhcnBUaXRsZSA6IFwiQ2hhbmdlIHRoZSBwbGF5YmFjayBzcGVlZC5cIjtcblx0XHR2YXIgd2FycEFyaWEgPSBvcHRpb25zLndhcnBBcmlhID8gb3B0aW9ucy53YXJwQXJpYSA6IHdhcnBUaXRsZTtcblx0XHR2YXIgYnBtID0gb3B0aW9ucy5icG0gPyBvcHRpb25zLmJwbSA6IFwiQlBNXCI7XG5cdFx0aHRtbCArPSAnPHNwYW4gY2xhc3M9XCJhYmNqcy10ZW1wby13cmFwcGVyXCI+PGxhYmVsPjxpbnB1dCBjbGFzcz1cImFiY2pzLW1pZGktdGVtcG9cIiB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiIG1heD1cIjMwMFwiIHZhbHVlPVwiMTAwXCIgdGl0bGU9XCInICsgd2FycFRpdGxlICsgJ1wiIGFyaWEtbGFiZWw9XCInICsgd2FycEFyaWEgKyAnXCI+JTwvbGFiZWw+PHNwYW4+Jm5ic3A7KDxzcGFuIGNsYXNzPVwiYWJjanMtbWlkaS1jdXJyZW50LXRlbXBvXCI+PC9zcGFuPiAnICsgYnBtICsgJyk8L3NwYW4+PC9zcGFuPlxcbic7XG5cdH1cblx0aHRtbCArPSAnPC9kaXY+XFxuJztcblx0cGFyZW50LmlubmVySFRNTCA9IGh0bWw7XG59XG5cbmZ1bmN0aW9uIGFjUmVzdW1lck1pZGRsZVdhcmUobmV4dCwgZXYsIHBsYXlCdG4sIGFmdGVyUmVzdW1lLCBpc1Byb21pc2UpIHtcblx0dmFyIG5lZWRzSW5pdCA9IHRydWU7XG5cdGlmICghYWN0aXZlQXVkaW9Db250ZXh0KCkpIHtcblx0XHRyZWdpc3RlckF1ZGlvQ29udGV4dCgpO1xuXHR9IGVsc2Uge1xuXHRcdG5lZWRzSW5pdCA9IGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnN0YXRlID09PSBcInN1c3BlbmRlZFwiO1xuXHR9XG5cdGlmICghc3VwcG9ydHNBdWRpbygpKSB7XG5cdFx0dGhyb3cgeyBzdGF0dXM6IFwiTm90U3VwcG9ydGVkXCIsIG1lc3NhZ2U6IFwiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgYXVkaW8uXCJ9O1xuXHR9XG5cblx0aWYgKChuZWVkc0luaXQgfHwgaXNQcm9taXNlKSAmJiBwbGF5QnRuKVxuXHRcdHBsYXlCdG4uY2xhc3NMaXN0LmFkZChcImFiY2pzLWxvYWRpbmdcIik7XG5cblx0aWYgKG5lZWRzSW5pdCkge1xuXHRcdGFjdGl2ZUF1ZGlvQ29udGV4dCgpLnJlc3VtZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFmdGVyUmVzdW1lKSB7XG5cdFx0XHRcdGFmdGVyUmVzdW1lKCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcblx0XHRcdFx0XHRkb05leHQobmV4dCwgZXYsIHBsYXlCdG4sIGlzUHJvbWlzZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9OZXh0KG5leHQsIGV2LCBwbGF5QnRuLCBpc1Byb21pc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGRvTmV4dChuZXh0LCBldiwgcGxheUJ0biwgaXNQcm9taXNlKTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb05leHQobmV4dCwgZXYsIHBsYXlCdG4sIGlzUHJvbWlzZSkge1xuXHRpZiAoaXNQcm9taXNlKSB7XG5cdFx0bmV4dChldikudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdGlmIChwbGF5QnRuKVxuXHRcdFx0XHRwbGF5QnRuLmNsYXNzTGlzdC5yZW1vdmUoXCJhYmNqcy1sb2FkaW5nXCIpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG5leHQoZXYpO1xuXHRcdGlmIChwbGF5QnRuKVxuXHRcdFx0cGxheUJ0bi5jbGFzc0xpc3QucmVtb3ZlKFwiYWJjanMtbG9hZGluZ1wiKTtcblx0fVxufVxuXG5mdW5jdGlvbiBhdHRhY2hMaXN0ZW5lcnMoc2VsZikge1xuXHR2YXIgaGFzTG9vcCA9ICEhc2VsZi5vcHRpb25zLmxvb3BIYW5kbGVyO1xuXHR2YXIgaGFzUmVzdGFydCA9ICEhc2VsZi5vcHRpb25zLnJlc3RhcnRIYW5kbGVyO1xuXHR2YXIgaGFzUGxheSA9ICEhc2VsZi5vcHRpb25zLnBsYXlIYW5kbGVyIHx8ICEhc2VsZi5vcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlcjtcblx0dmFyIGhhc1Byb2dyZXNzID0gISFzZWxmLm9wdGlvbnMucHJvZ3Jlc3NIYW5kbGVyO1xuXHR2YXIgaGFzV2FycCA9ICEhc2VsZi5vcHRpb25zLndhcnBIYW5kbGVyO1xuXHR2YXIgcGxheUJ0biA9IHNlbGYucGFyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWJjanMtbWlkaS1zdGFydFwiKTtcblxuXHRpZiAoaGFzTG9vcClcblx0XHRzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktbG9vcFwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXYpe2FjUmVzdW1lck1pZGRsZVdhcmUoc2VsZi5vcHRpb25zLmxvb3BIYW5kbGVyLCBldiwgcGxheUJ0biwgc2VsZi5vcHRpb25zLmFmdGVyUmVzdW1lKX0pO1xuXHRpZiAoaGFzUmVzdGFydClcblx0XHRzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktcmVzZXRcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGV2KXthY1Jlc3VtZXJNaWRkbGVXYXJlKHNlbGYub3B0aW9ucy5yZXN0YXJ0SGFuZGxlciwgZXYsIHBsYXlCdG4sIHNlbGYub3B0aW9ucy5hZnRlclJlc3VtZSl9KTtcblx0aWYgKGhhc1BsYXkpXG5cdFx0cGxheUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZXYpe1xuXHRcdFx0YWNSZXN1bWVyTWlkZGxlV2FyZShcblx0XHRcdFx0c2VsZi5vcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlciB8fCBzZWxmLm9wdGlvbnMucGxheUhhbmRsZXIsXG5cdFx0XHRcdGV2LFxuXHRcdFx0XHRwbGF5QnRuLFxuXHRcdFx0XHRzZWxmLm9wdGlvbnMuYWZ0ZXJSZXN1bWUsXG5cdFx0XHRcdCEhc2VsZi5vcHRpb25zLnBsYXlQcm9taXNlSGFuZGxlcilcblx0XHR9KTtcblx0aWYgKGhhc1Byb2dyZXNzKVxuXHRcdHNlbGYucGFyZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWJjanMtbWlkaS1wcm9ncmVzcy1iYWNrZ3JvdW5kXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihldil7YWNSZXN1bWVyTWlkZGxlV2FyZShzZWxmLm9wdGlvbnMucHJvZ3Jlc3NIYW5kbGVyLCBldiwgcGxheUJ0biwgc2VsZi5vcHRpb25zLmFmdGVyUmVzdW1lKX0pO1xuXHRpZiAoaGFzV2FycClcblx0XHRzZWxmLnBhcmVudC5xdWVyeVNlbGVjdG9yKFwiLmFiY2pzLW1pZGktdGVtcG9cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihldil7YWNSZXN1bWVyTWlkZGxlV2FyZShzZWxmLm9wdGlvbnMud2FycEhhbmRsZXIsIGV2LCBwbGF5QnRuLCBzZWxmLm9wdGlvbnMuYWZ0ZXJSZXN1bWUpfSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IENyZWF0ZVN5bnRoQ29udHJvbDtcbiIsInZhciBTeW50aFNlcXVlbmNlID0gcmVxdWlyZSgnLi9zeW50aC1zZXF1ZW5jZScpO1xudmFyIENyZWF0ZVN5bnRoID0gcmVxdWlyZSgnLi9jcmVhdGUtc3ludGgnKTtcblxuZnVuY3Rpb24gcGxheUV2ZW50KG1pZGlQaXRjaGVzLCBtaWRpR3JhY2VQaXRjaGVzLCBtaWxsaXNlY29uZHNQZXJNZWFzdXJlKSB7XG5cdHZhciBzZXF1ZW5jZSA9IG5ldyBTeW50aFNlcXVlbmNlKCk7XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtaWRpUGl0Y2hlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBub3RlID0gbWlkaVBpdGNoZXNbaV07XG5cdFx0dmFyIHRyYWNrTnVtID0gc2VxdWVuY2UuYWRkVHJhY2soKTtcblx0XHRzZXF1ZW5jZS5zZXRJbnN0cnVtZW50KHRyYWNrTnVtLCBub3RlLmluc3RydW1lbnQpO1xuXHRcdGlmIChpID09PSAwICYmIG1pZGlHcmFjZVBpdGNoZXMpIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgbWlkaUdyYWNlUGl0Y2hlcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHR2YXIgZ3JhY2UgPSBtaWRpR3JhY2VQaXRjaGVzW2pdO1xuXHRcdFx0XHRzZXF1ZW5jZS5hcHBlbmROb3RlKHRyYWNrTnVtLCBncmFjZS5waXRjaCwgMSAvIDY0LCBncmFjZS52b2x1bWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRzZXF1ZW5jZS5hcHBlbmROb3RlKHRyYWNrTnVtLCBub3RlLnBpdGNoLCBub3RlLmR1cmF0aW9uSW5NZWFzdXJlcywgbm90ZS52b2x1bWUpO1xuXHR9XG5cblx0dmFyIGJ1ZmZlciA9IG5ldyBDcmVhdGVTeW50aCgpO1xuXHRyZXR1cm4gYnVmZmVyLmluaXQoe1xuXHRcdHNlcXVlbmNlOiBzZXF1ZW5jZSxcblx0XHRtaWxsaXNlY29uZHNQZXJNZWFzdXJlOiBtaWxsaXNlY29uZHNQZXJNZWFzdXJlXG5cdH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBidWZmZXIucHJpbWUoKTtcblx0fSkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGJ1ZmZlci5zdGFydCgpO1xuXHR9KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gcGxheUV2ZW50O1xuIiwidmFyIENyZWF0ZVN5bnRoQ29udHJvbCA9IHJlcXVpcmUoJy4vY3JlYXRlLXN5bnRoLWNvbnRyb2wnKTtcbnZhciBDcmVhdGVTeW50aCA9IHJlcXVpcmUoJy4vY3JlYXRlLXN5bnRoJyk7XG52YXIgVGltaW5nQ2FsbGJhY2tzID0gcmVxdWlyZSgnLi4vYXBpL2FiY190aW1pbmdfY2FsbGJhY2tzJyk7XG5cbmZ1bmN0aW9uIFN5bnRoQ29udHJvbGxlcigpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRzZWxmLndhcnAgPSAxMDA7XG5cdHNlbGYuY3Vyc29yQ29udHJvbCA9IG51bGw7XG5cdHNlbGYudmlzdWFsT2JqID0gbnVsbDtcblx0c2VsZi50aW1lciA9IG51bGw7XG5cdHNlbGYubWlkaUJ1ZmZlciA9IG51bGw7XG5cdHNlbGYub3B0aW9ucyA9IG51bGw7XG5cdHNlbGYuY3VycmVudFRlbXBvID0gbnVsbDtcblx0c2VsZi5jb250cm9sID0gbnVsbDtcblx0c2VsZi5pc0xvb3BpbmcgPSBmYWxzZTtcblx0c2VsZi5pc1N0YXJ0ZWQgPSBmYWxzZTtcblx0c2VsZi5pc0xvYWRlZCA9IGZhbHNlO1xuXG5cdHNlbGYubG9hZCA9IGZ1bmN0aW9uIChzZWxlY3RvciwgY3Vyc29yQ29udHJvbCwgdmlzdWFsT3B0aW9ucykge1xuXHRcdGlmICghdmlzdWFsT3B0aW9ucylcblx0XHRcdHZpc3VhbE9wdGlvbnMgPSB7fTtcblx0XHRzZWxmLmNvbnRyb2wgPSBuZXcgQ3JlYXRlU3ludGhDb250cm9sKHNlbGVjdG9yLCB7XG5cdFx0XHRsb29wSGFuZGxlcjogdmlzdWFsT3B0aW9ucy5kaXNwbGF5TG9vcCA/IHNlbGYudG9nZ2xlTG9vcCA6IHVuZGVmaW5lZCxcblx0XHRcdHJlc3RhcnRIYW5kbGVyOiB2aXN1YWxPcHRpb25zLmRpc3BsYXlSZXN0YXJ0ID8gc2VsZi5yZXN0YXJ0IDogdW5kZWZpbmVkLFxuXHRcdFx0cGxheVByb21pc2VIYW5kbGVyOiB2aXN1YWxPcHRpb25zLmRpc3BsYXlQbGF5ID8gc2VsZi5wbGF5IDogdW5kZWZpbmVkLFxuXHRcdFx0cHJvZ3Jlc3NIYW5kbGVyOiB2aXN1YWxPcHRpb25zLmRpc3BsYXlQcm9ncmVzcyA/IHNlbGYucmFuZG9tQWNjZXNzIDogdW5kZWZpbmVkLFxuXHRcdFx0d2FycEhhbmRsZXI6IHZpc3VhbE9wdGlvbnMuZGlzcGxheVdhcnAgPyBzZWxmLm9uV2FycCA6IHVuZGVmaW5lZCxcblx0XHRcdGFmdGVyUmVzdW1lOiBzZWxmLmluaXRcblx0XHR9KTtcblx0XHRzZWxmLmN1cnNvckNvbnRyb2wgPSBjdXJzb3JDb250cm9sO1xuXHR9O1xuXG5cdHNlbGYuc2V0VHVuZSA9IGZ1bmN0aW9uKHZpc3VhbE9iaiwgdXNlckFjdGlvbiwgYXVkaW9QYXJhbXMpIHtcblx0XHRzZWxmLmlzTG9hZGVkID0gZmFsc2U7XG5cdFx0c2VsZi52aXN1YWxPYmogPSB2aXN1YWxPYmo7XG5cdFx0c2VsZi5vcHRpb25zID0gYXVkaW9QYXJhbXM7XG5cblx0XHRpZiAoc2VsZi5jb250cm9sKSB7XG5cdFx0XHRzZWxmLnBhdXNlKCk7XG5cdFx0XHRzZWxmLnNldFByb2dyZXNzKDAsIDEpO1xuXHRcdFx0c2VsZi5jb250cm9sLnJlc2V0QWxsKCk7XG5cdFx0XHRzZWxmLnJlc3RhcnQoKTtcblx0XHRcdHNlbGYuaXNTdGFydGVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHNlbGYuaXNMb29waW5nID0gZmFsc2U7XG5cblx0XHRpZiAodXNlckFjdGlvbilcblx0XHRcdHJldHVybiBzZWxmLmdvKCk7XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtzdGF0dXM6IFwibm8tYXVkaW8tY29udGV4dFwifSk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGYuZ28gPSBmdW5jdGlvbiAoKSB7XG5cdFx0dmFyIG1pbGxpc2Vjb25kc1Blck1lYXN1cmUgPSBzZWxmLnZpc3VhbE9iai5taWxsaXNlY29uZHNQZXJNZWFzdXJlKCkgKiAxMDAgLyBzZWxmLndhcnA7XG5cdFx0c2VsZi5jdXJyZW50VGVtcG8gPSBNYXRoLnJvdW5kKHNlbGYudmlzdWFsT2JqLmdldEJlYXRzUGVyTWVhc3VyZSgpIC8gbWlsbGlzZWNvbmRzUGVyTWVhc3VyZSAqIDYwMDAwKTtcblx0XHRpZiAoc2VsZi5jb250cm9sKVxuXHRcdFx0c2VsZi5jb250cm9sLnNldFRlbXBvKHNlbGYuY3VycmVudFRlbXBvKTtcblx0XHRzZWxmLnBlcmNlbnQgPSAwO1xuXG5cdFx0aWYgKCFzZWxmLm1pZGlCdWZmZXIpXG5cdFx0XHRzZWxmLm1pZGlCdWZmZXIgPSBuZXcgQ3JlYXRlU3ludGgoKTtcblx0XHRyZXR1cm4gc2VsZi5taWRpQnVmZmVyLmluaXQoe1xuXHRcdFx0dmlzdWFsT2JqOiBzZWxmLnZpc3VhbE9iaixcblx0XHRcdG9wdGlvbnM6IHNlbGYub3B0aW9ucyxcblx0XHRcdG1pbGxpc2Vjb25kc1Blck1lYXN1cmU6IG1pbGxpc2Vjb25kc1Blck1lYXN1cmVcblx0XHR9KS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBzZWxmLm1pZGlCdWZmZXIucHJpbWUoKTtcblx0XHR9KS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBzdWJkaXZpc2lvbnMgPSAxNjtcblx0XHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiZcblx0XHRcdFx0c2VsZi5jdXJzb3JDb250cm9sLmJlYXRTdWJkaXZpc2lvbnMgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRwYXJzZUludChzZWxmLmN1cnNvckNvbnRyb2wuYmVhdFN1YmRpdmlzaW9ucywgMTApID49IDEgJiZcblx0XHRcdFx0cGFyc2VJbnQoc2VsZi5jdXJzb3JDb250cm9sLmJlYXRTdWJkaXZpc2lvbnMsIDEwKSA8PSA2NClcblx0XHRcdFx0c3ViZGl2aXNpb25zID0gcGFyc2VJbnQoc2VsZi5jdXJzb3JDb250cm9sLmJlYXRTdWJkaXZpc2lvbnMsIDEwKTtcblxuXHRcdFx0Ly8gTmVlZCB0byBjcmVhdGUgdGhlIFRpbWluZ0NhbGxiYWNrcyBhZnRlciBwcmltaW5nIHRoZSBtaWRpIHNvIHRoYXQgdGhlIG1pZGkgZGF0YSBpcyBhdmFpbGFibGUgZm9yIHRoZSBjYWxsYmFja3MuXG5cdFx0XHRzZWxmLnRpbWVyID0gbmV3IFRpbWluZ0NhbGxiYWNrcyhzZWxmLnZpc3VhbE9iaiwge1xuXHRcdFx0XHRiZWF0Q2FsbGJhY2s6IHNlbGYuYmVhdENhbGxiYWNrLFxuXHRcdFx0XHRldmVudENhbGxiYWNrOiBzZWxmLmV2ZW50Q2FsbGJhY2ssXG5cdFx0XHRcdGxpbmVFbmRDYWxsYmFjazogc2VsZi5saW5lRW5kQ2FsbGJhY2ssXG5cdFx0XHRcdHFwbTogc2VsZi5jdXJyZW50VGVtcG8sXG5cblx0XHRcdFx0ZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nOiBzZWxmLmN1cnNvckNvbnRyb2wgPyBzZWxmLmN1cnNvckNvbnRyb2wuZXh0cmFNZWFzdXJlc0F0QmVnaW5uaW5nIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRsaW5lRW5kQW50aWNpcGF0aW9uOiBzZWxmLmN1cnNvckNvbnRyb2wgPyBzZWxmLmN1cnNvckNvbnRyb2wubGluZUVuZEFudGljaXBhdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0YmVhdFN1YmRpdmlzaW9uczogc3ViZGl2aXNpb25zLFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoc2VsZi5jdXJzb3JDb250cm9sICYmIHNlbGYuY3Vyc29yQ29udHJvbC5vblJlYWR5ICYmIHR5cGVvZiBzZWxmLmN1cnNvckNvbnRyb2wub25SZWFkeSAgPT09ICdmdW5jdGlvbicpXG5cdFx0XHRcdHNlbGYuY3Vyc29yQ29udHJvbC5vblJlYWR5KHNlbGYpO1xuXHRcdFx0c2VsZi5pc0xvYWRlZCA9IHRydWU7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgc3RhdHVzOiBcImNyZWF0ZWRcIiB9KTtcblx0XHR9KTtcblx0fTtcblxuXHRzZWxmLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHNlbGYudGltZXIpIHtcblx0XHRcdHNlbGYudGltZXIucmVzZXQoKTtcblx0XHRcdHNlbGYudGltZXIuc3RvcCgpO1xuXHRcdFx0c2VsZi50aW1lciA9IG51bGw7XG5cdFx0fVxuXHRcdGlmIChzZWxmLm1pZGlCdWZmZXIpIHtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zdG9wKCk7XG5cdFx0XHRzZWxmLm1pZGlCdWZmZXIgPSBudWxsO1xuXHRcdH1cblx0XHRzZWxmLnNldFByb2dyZXNzKDAsIDEpO1xuXHRcdGlmIChzZWxmLmNvbnRyb2wpXG5cdFx0XHRzZWxmLmNvbnRyb2wucmVzZXRBbGwoKTtcblx0fTtcblxuXHRzZWxmLnBsYXkgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFzZWxmLmlzTG9hZGVkKSB7XG5cdFx0XHRyZXR1cm4gc2VsZi5nbygpLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBzZWxmLl9wbGF5KCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Vcblx0XHRcdHJldHVybiBzZWxmLl9wbGF5KCk7XG5cdH07XG5cblx0c2VsZi5fcGxheSA9IGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmLmlzU3RhcnRlZCA9ICFzZWxmLmlzU3RhcnRlZDtcblx0XHRpZiAoc2VsZi5pc1N0YXJ0ZWQpIHtcblx0XHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiYgc2VsZi5jdXJzb3JDb250cm9sLm9uU3RhcnQgJiYgdHlwZW9mIHNlbGYuY3Vyc29yQ29udHJvbC5vblN0YXJ0ICA9PT0gJ2Z1bmN0aW9uJylcblx0XHRcdFx0c2VsZi5jdXJzb3JDb250cm9sLm9uU3RhcnQoKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zdGFydCgpO1xuXHRcdFx0c2VsZi50aW1lci5zdGFydCgpO1xuXHRcdFx0aWYgKHNlbGYuY29udHJvbClcblx0XHRcdFx0c2VsZi5jb250cm9sLnB1c2hQbGF5KHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnBhdXNlKCk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBzdGF0dXM6IFwib2tcIiB9KTtcblx0fTtcblxuXHRzZWxmLnBhdXNlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHNlbGYudGltZXIpIHtcblx0XHRcdHNlbGYudGltZXIucGF1c2UoKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5wYXVzZSgpO1xuXHRcdFx0aWYgKHNlbGYuY29udHJvbClcblx0XHRcdFx0c2VsZi5jb250cm9sLnB1c2hQbGF5KGZhbHNlKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi50b2dnbGVMb29wID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGYuaXNMb29waW5nID0gIXNlbGYuaXNMb29waW5nO1xuXHRcdGlmIChzZWxmLmNvbnRyb2wpXG5cdFx0XHRzZWxmLmNvbnRyb2wucHVzaExvb3Aoc2VsZi5pc0xvb3BpbmcpO1xuXHR9O1xuXG5cdHNlbGYucmVzdGFydCA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAoc2VsZi50aW1lcikge1xuXHRcdFx0c2VsZi50aW1lci5zZXRQcm9ncmVzcygwKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zZWVrKDApO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmLnJhbmRvbUFjY2VzcyA9IGZ1bmN0aW9uIChldikge1xuXHRcdGlmICghc2VsZi5pc0xvYWRlZCkge1xuXHRcdFx0cmV0dXJuIHNlbGYuZ28oKS50aGVuKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gc2VsZi5fcmFuZG9tQWNjZXNzKGV2KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZVxuXHRcdFx0cmV0dXJuIHNlbGYuX3JhbmRvbUFjY2Vzcyhldik7XG5cdH07XG5cblx0c2VsZi5fcmFuZG9tQWNjZXNzID0gZnVuY3Rpb24gKGV2KSB7XG5cdFx0dmFyIGJhY2tncm91bmQgPSAoZXYudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnYWJjanMtbWlkaS1wcm9ncmVzcy1pbmRpY2F0b3InKSkgPyBldi50YXJnZXQucGFyZW50Tm9kZSA6IGV2LnRhcmdldDtcblx0XHR2YXIgcGVyY2VudCA9IChldi54IC0gYmFja2dyb3VuZC5vZmZzZXRMZWZ0KSAvIGJhY2tncm91bmQub2Zmc2V0V2lkdGg7XG5cdFx0aWYgKHBlcmNlbnQgPCAwKVxuXHRcdFx0cGVyY2VudCA9IDA7XG5cdFx0aWYgKHBlcmNlbnQgPiAxMDApXG5cdFx0XHRwZXJjZW50ID0gMTAwO1xuXHRcdHNlbGYudGltZXIuc2V0UHJvZ3Jlc3MocGVyY2VudCk7XG5cdFx0c2VsZi5taWRpQnVmZmVyLnNlZWsocGVyY2VudCk7XG5cdH07XG5cblx0c2VsZi5vbldhcnAgPSBmdW5jdGlvbiAoZXYpIHtcblx0XHR2YXIgbmV3V2FycCA9IGV2LnRhcmdldC52YWx1ZTtcblx0XHRpZiAocGFyc2VJbnQobmV3V2FycCwgMTApID4gMCkge1xuXHRcdFx0c2VsZi53YXJwID0gcGFyc2VJbnQobmV3V2FycCwgMTApO1xuXHRcdFx0dmFyIHdhc1BsYXlpbmcgPSBzZWxmLmlzU3RhcnRlZDtcblx0XHRcdHZhciBzdGFydFBlcmNlbnQgPSBzZWxmLnBlcmNlbnQ7XG5cdFx0XHRzZWxmLmRlc3Ryb3koKTtcblx0XHRcdHNlbGYuaXNTdGFydGVkID0gZmFsc2U7XG5cdFx0XHRzZWxmLmdvKCkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGYuc2V0UHJvZ3Jlc3Moc3RhcnRQZXJjZW50LCBzZWxmLm1pZGlCdWZmZXIuZHVyYXRpb24gKiAxMDAwKTtcblx0XHRcdFx0aWYgKHdhc1BsYXlpbmcpIHtcblx0XHRcdFx0XHRzZWxmLnBsYXkoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzZWxmLnRpbWVyLnNldFByb2dyZXNzKHN0YXJ0UGVyY2VudCk7XG5cdFx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zZWVrKHN0YXJ0UGVyY2VudCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5zZXRQcm9ncmVzcyA9IGZ1bmN0aW9uIChwZXJjZW50LCB0b3RhbFRpbWUpIHtcblx0XHRzZWxmLnBlcmNlbnQgPSBwZXJjZW50O1xuXHRcdGlmIChzZWxmLmNvbnRyb2wpXG5cdFx0XHRzZWxmLmNvbnRyb2wuc2V0UHJvZ3Jlc3MocGVyY2VudCwgdG90YWxUaW1lKTtcblx0fTtcblxuXHRzZWxmLmZpbmlzaGVkID0gZnVuY3Rpb24gKCkge1xuXHRcdHNlbGYudGltZXIucmVzZXQoKTtcblx0XHRpZiAoc2VsZi5pc0xvb3BpbmcpIHtcblx0XHRcdHNlbGYudGltZXIuc3RhcnQoKTtcblx0XHRcdHNlbGYubWlkaUJ1ZmZlci5zdGFydCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmLnRpbWVyLnN0b3AoKTtcblx0XHRcdGlmIChzZWxmLmlzU3RhcnRlZCkge1xuXHRcdFx0XHRpZiAoc2VsZi5jb250cm9sKVxuXHRcdFx0XHRcdHNlbGYuY29udHJvbC5wdXNoUGxheShmYWxzZSk7XG5cdFx0XHRcdHNlbGYuaXNTdGFydGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiYgc2VsZi5jdXJzb3JDb250cm9sLm9uRmluaXNoZWQgJiYgdHlwZW9mIHNlbGYuY3Vyc29yQ29udHJvbC5vbkZpbmlzaGVkICA9PT0gJ2Z1bmN0aW9uJylcblx0XHRcdFx0XHRzZWxmLmN1cnNvckNvbnRyb2wub25GaW5pc2hlZCgpO1xuXHRcdFx0XHRzZWxmLnNldFByb2dyZXNzKDAsIDEpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRzZWxmLmJlYXRDYWxsYmFjayA9IGZ1bmN0aW9uIChiZWF0TnVtYmVyLCB0b3RhbEJlYXRzLCB0b3RhbFRpbWUpIHtcblx0XHR2YXIgcGVyY2VudCA9IGJlYXROdW1iZXIgLyB0b3RhbEJlYXRzO1xuXHRcdHNlbGYuc2V0UHJvZ3Jlc3MocGVyY2VudCwgdG90YWxUaW1lKTtcblx0XHRpZiAoc2VsZi5jdXJzb3JDb250cm9sICYmIHNlbGYuY3Vyc29yQ29udHJvbC5vbkJlYXQgJiYgdHlwZW9mIHNlbGYuY3Vyc29yQ29udHJvbC5vbkJlYXQgID09PSAnZnVuY3Rpb24nKVxuXHRcdFx0c2VsZi5jdXJzb3JDb250cm9sLm9uQmVhdChiZWF0TnVtYmVyLCB0b3RhbEJlYXRzLCB0b3RhbFRpbWUpO1xuXHR9O1xuXG5cdHNlbGYuZXZlbnRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudCkge1xuXHRcdFx0aWYgKHNlbGYuY3Vyc29yQ29udHJvbCAmJiBzZWxmLmN1cnNvckNvbnRyb2wub25FdmVudCAmJiB0eXBlb2Ygc2VsZi5jdXJzb3JDb250cm9sLm9uRXZlbnQgID09PSAnZnVuY3Rpb24nKVxuXHRcdFx0XHRzZWxmLmN1cnNvckNvbnRyb2wub25FdmVudChldmVudCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuZmluaXNoZWQoKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZi5saW5lRW5kQ2FsbGJhY2sgPSBmdW5jdGlvbiAoZGF0YSkge1xuXHRcdGlmIChzZWxmLmN1cnNvckNvbnRyb2wgJiYgc2VsZi5jdXJzb3JDb250cm9sLm9uTGluZUVuZCAmJiB0eXBlb2Ygc2VsZi5jdXJzb3JDb250cm9sLm9uTGluZUVuZCAgPT09ICdmdW5jdGlvbicpXG5cdFx0XHRzZWxmLmN1cnNvckNvbnRyb2wub25MaW5lRW5kKGRhdGEpO1xuXHR9O1xuXG5cdHNlbGYuZ2V0VXJsID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBzZWxmLm1pZGlCdWZmZXIuZG93bmxvYWQoKTtcblx0fTtcblxuXHRzZWxmLmRvd25sb2FkID0gZnVuY3Rpb24oZmlsZU5hbWUpIHtcblx0XHR2YXIgdXJsID0gc2VsZi5nZXRVcmwoKTtcblx0XHR2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuXHRcdGxpbmsuc2V0QXR0cmlidXRlKFwic3R5bGVcIixcImRpc3BsYXk6IG5vbmU7XCIpO1xuXHRcdGxpbmsuaHJlZiA9IHVybDtcblx0XHRsaW5rLmRvd25sb2FkID0gZmlsZU5hbWUgPyBmaWxlTmFtZSA6ICdvdXRwdXQud2F2Jztcblx0XHRsaW5rLmNsaWNrKCk7XG5cdFx0d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblx0XHRkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuXHR9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoQ29udHJvbGxlcjtcbiIsIi8vICAgIGFiYzJhYmNfd3JpdGUuanM6IFByaW50cyBhbiBhYmMgZmlsZSBpbiB0ZXh0IGZvcm1hdCBwYXJzZWQgYnkgYWJjX3BhcnNlLmpzXG4vLyAgICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOCBHcmVnb3J5IER5a2UgKGdyZWdkeWtlIGF0IGdtYWlsIGRvdCBjb20pXG4vL1xuLy8gICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkXG4vLyAgICBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvblxuLy8gICAgdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZFxuLy8gICAgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElOR1xuLy8gICAgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EXG4vLyAgICBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gICAgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbnZhciBUZXh0UHJpbnRlciA9IGZ1bmN0aW9uKGVsZW0sIHJlcG9zaXRpb24pIHtcbiAgICB0aGlzLmVsZW0gPSBlbGVtO1xuICAgIHRoaXMudGV4dCA9IFwiXCI7XG4gICAgdGhpcy5sID0gMS84O1xuICAgIHRoaXMucmVwb3NpdGlvbiA9IHJlcG9zaXRpb24gfHwgZmFsc2U7XG59XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgZWxlbSkge1xuICAgIGlmICh0aGlzLnJlcG9zaXRpb24gJiYgZWxlbSkgZWxlbS5zdGFydENoYXIgPSB0aGlzLnRleHQubGVuZ3RoO1xuICAgIHRoaXMudGV4dCArPSBzdHI7XG4gICAgaWYgKHRoaXMucmVwb3NpdGlvbiAmJiBlbGVtKSBlbGVtLmVuZENoYXIgPSB0aGlzLnRleHQubGVuZ3RoO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50TmV3TGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRleHQgKz0gXCJcXG5cIjtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludFNwYWNlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRleHRbdGhpcy50ZXh0Lmxlbmd0aC0xXS5tYXRjaCgvXFxzLykpIHJldHVybjsgLy9UT0RPIG1hdGNoIHdoaXRlc3BhY2VcbiAgICB0aGlzLnRleHQgKz0gXCIgXCI7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnRBQkMgPSBmdW5jdGlvbihhYmN0dW5lKSB7XG4gICAgdGhpcy50ZXh0ID0gXCJcIjtcbiAgICB0aGlzLmFiY3R1bmUgPSBhYmN0dW5lO1xuICAgIC8vVE9ETyBmb3JtYXR0aW5nXG4gICAgdGhpcy5wcmludEhlYWRlcigpO1xuICAgIHRoaXMucHJpbnRCb2R5KCk7XG4gICAgdGhpcy5lbGVtLnZhbHVlPXRoaXMudGV4dDtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludEhlYWRlciA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIG11Y2ggb2YgdGhpcyBpbmZvIGlzIGR1cGxpY2F0ZWQgaW4gbWV0YVRleHRIRWFkZXJzIGluIGFiY19wYXJzZV9oZWFkZXIuanNcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcInhcIixcIlhcIixcIjFcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJ0aXRsZVwiLFwiVFwiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImNvbXBvc2VyXCIsXCJDXCIpO1xuICAgIHRoaXMucHJpbnRIZWFkZXJMaW5lKFwiaGlzdG9yeVwiLFwiSFwiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImF1dGhvclwiLFwiQVwiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImJvb2tcIixcIkJcIik7ICBcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImRpc2NvZ3JhcGh5XCIsXCJEXCIpOyAgXG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJ1cmxcIixcIkZcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJncm91cFwiLFwiR1wiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcImluc3RydWN0aW9uXCIsXCJJXCIpO1xuICAgIHRoaXMucHJpbnRIZWFkZXJMaW5lKFwibm90ZXNcIixcIk5cIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJvcmlnaW5cIixcIk9cIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJyaHl0aG1cIixcIlJcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJzb3VyY2VcIixcIlNcIik7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJ1bmFsaWduZWR3b3Jkc1wiLFwiV1wiKTtcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcInRyYW5zY3JpcHRpb25cIixcIlpcIik7XG4gICAgLy9UT0RPIHBhcnQgb3JkZXJcbiAgICAvL1RPRE8gUSB0ZW1wb1xuICAgIC8vVE9ETyB0ZXh0QmxvY2tcbiAgICB0aGlzLnByaW50SGVhZGVyTGluZShcIk5VTExcIixcIkxcIixcIjEvOFwiKTsgLy9UT0RPIExcblxuICAgIHRoaXMucHJpbnRIZWFkZXJMaW5lKFwiTlVMTFwiLFwiTVwiLHRoaXMuZ2V0TWV0ZXJTdHJpbmcodGhpcy5hYmN0dW5lLmxpbmVzWzBdLnN0YWZmWzBdLm1ldGVyKSk7XG4gICAgdGhpcy5wcmludEhlYWRlckxpbmUoXCJOVUxMXCIsXCJLXCIsdGhpcy5nZXRLZXlTdHJpbmcodGhpcy5hYmN0dW5lLmxpbmVzWzBdLnN0YWZmWzBdLmtleSkpOy8vVE9ETyBLXG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0S2V5U3RyaW5nID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIGtleS5yb290K2tleS5hY2Mra2V5Lm1vZGU7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0TWV0ZXJTdHJpbmcgPSBmdW5jdGlvbihtZXRlcikge1xuICAgIHN3aXRjaCAobWV0ZXIudHlwZSkge1xuICAgIGNhc2UgXCJjdXRfdGltZVwiOiByZXR1cm4gXCJDfFwiO1xuICAgIGNhc2UgXCJjb21tb25fdGltZVwiOiByZXR1cm4gXCJDXCI7XG4gICAgY2FzZSBcInNwZWNpZmllZFwiOlxuICAgICAgaWYgKG1ldGVyLnZhbHVlWzBdLmRlbilcblx0XHRyZXR1cm4gbWV0ZXIudmFsdWVbMF0ubnVtK1wiL1wiK21ldGVyLnZhbHVlWzBdLmRlbjtcbiAgICAgIGVsc2Vcblx0ICAgIHJldHVybiBtZXRlci52YWx1ZVswXS5udW07XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50SGVhZGVyTGluZSA9IGZ1bmN0aW9uKGZpZWxkbmFtZSwgYWJjZmllbGQsIGRlZmF1dCkge1xuICAgIHZhciB2YWwgPSB0aGlzLmFiY3R1bmUubWV0YVRleHRbZmllbGRuYW1lXSB8fCBkZWZhdXQ7XG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG5cdHZhciB2YWxhcnJheSA9IHZhbC5zcGxpdChcIlxcblwiKTtcblx0Zm9yICh2YXIgaT0wOyBpPHZhbGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdCAgICB0aGlzLnByaW50U3RyaW5nKGFiY2ZpZWxkK1wiOiBcIit2YWxhcnJheVtpXSk7XG5cdCAgICB0aGlzLnByaW50TmV3TGluZSgpO1xuXHR9IFxuICAgIH1cbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5nZXRFbGVtID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYWJjbGluZS5sZW5ndGggPD0gdGhpcy5wb3MpXG5cdHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmFiY2xpbmVbdGhpcy5wb3NdO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLmdldE5leHRFbGVtID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuYWJjbGluZS5sZW5ndGggPD0gdGhpcy5wb3MrMSlcblx0cmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuYWJjbGluZVt0aGlzLnBvcysxXTtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludEJvZHkgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IodmFyIGxpbmU9MDsgbGluZTx0aGlzLmFiY3R1bmUubGluZXMubGVuZ3RoOyBsaW5lKyspIHtcblx0dmFyIGFiY2xpbmUgPSB0aGlzLmFiY3R1bmUubGluZXNbbGluZV07XG5cdGlmIChhYmNsaW5lLnN0YWZmKSB7XG5cdCAgICB0aGlzLnByaW50QUJDTGluZShhYmNsaW5lLnN0YWZmKTtcblx0fSBlbHNlIGlmIChhYmNsaW5lLnN1YnRpdGxlICYmIGxpbmUhPT0wKSB7XG5cdCAgICAvL1RPRE9cblx0fSBlbHNlIGlmIChhYmNsaW5lLnRleHQpIHtcblx0ICAgIC8vVE9ET1xuXHR9XG4gICAgfVxufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50QUJDTGluZSA9IGZ1bmN0aW9uKHN0YWZmcykge1xuICAgIGZvciAodGhpcy5zID0gMDsgdGhpcy5zIDwgc3RhZmZzLmxlbmd0aDsgdGhpcy5zKyspIHtcblx0dGhpcy5wcmludEFCQ1N0YWZmKHN0YWZmc1t0aGlzLnNdKTtcbiAgICB9XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnRBQkNTdGFmZiA9IGZ1bmN0aW9uKGFiY3N0YWZmKSB7XG4gICAgXG4gICAgLy8gVE9ETyBpZiAoYWJjc3RhZmYuYnJhY2tldCkgaGVhZGVyICs9IFwiYnJhY2tldCBcIithYmNzdGFmZi5icmFja2V0K1wiIFwiO1xuICAgIC8vIFRPRE8gaWYgKGFiY3N0YWZmLmJyYWNlKSBoZWFkZXIgKz0gXCJicmFjZSBcIithYmNzdGFmZi5icmFjZStcIiBcIjtcbiAgICBcbiAgICBcbiAgICBmb3IgKHRoaXMudiA9IDA7IHRoaXMudiA8IGFiY3N0YWZmLnZvaWNlcy5sZW5ndGg7IHRoaXMudisrKSB7XG5cdC8vIFRPRE8gc3R1ZmYgYWJvdXQgdm9pY2VzXG5cdFxuXHQvLyBUT0RPIHRoaXMgaXMgd2hlcmUga2V5IHNpZyBpcyB0aGlzLnZvaWNlLmFkZENoaWxkKHRoaXMucHJpbnRDbGVmKGFiY3N0YWZmLmNsZWYpKTtcblx0Ly8gdGhpcy52b2ljZS5hZGRDaGlsZCh0aGlzLnByaW50S2V5U2lnbmF0dXJlKGFiY3N0YWZmLmtleSkpO1xuXHQvLyBpZiAoYWJjc3RhZmYubWV0ZXIpIHRoaXMudm9pY2UuYWRkQ2hpbGQodGhpcy5wcmludFRpbWVTaWduYXR1cmUoYWJjc3RhZmYubWV0ZXIpKTtcblx0dGhpcy5wcmludEFCQ1ZvaWNlKGFiY3N0YWZmLnZvaWNlc1t0aGlzLnZdKTtcbiAgICB9XG4gICAgXG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnRBQkNWb2ljZSA9IGZ1bmN0aW9uKGFiY2xpbmUpIHtcbiAgICB0aGlzLmFiY2xpbmUgPSBhYmNsaW5lO1xuICAgIGZvciAodGhpcy5wb3M9MDsgdGhpcy5wb3M8dGhpcy5hYmNsaW5lLmxlbmd0aDsgdGhpcy5wb3MrKykge1xuXHR0aGlzLnByaW50QUJDRWxlbWVudCgpO1xuICAgIH1cbiAgICB0aGlzLnByaW50TmV3TGluZSgpO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50QUJDRWxlbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlbGVtID0gdGhpcy5nZXRFbGVtKCk7XG4gICAgc3dpdGNoIChlbGVtLmVsX3R5cGUpIHtcbiAgICBjYXNlIFwibm90ZVwiOlxuXHR0aGlzLnByaW50QmVhbSgpO1xuXHRicmVhaztcbiAgICBjYXNlIFwiYmFyXCI6XG5cdHRoaXMucHJpbnRCYXJMaW5lKGVsZW0pO1xuXHRicmVhaztcbiAgICBjYXNlIFwibWV0ZXJcIjpcblx0Ly9UT0RPIHRoaXMucHJpbnRUaW1lU2lnbmF0dXJlKGVsZW0pO1xuXHRicmVhaztcbiAgICBjYXNlIFwiY2xlZlwiOlxuXHQvL1RPRE8gdGhpcy5wcmludENsZWYoZWxlbSk7XG5cdGJyZWFrO1xuICAgIGNhc2UgXCJrZXlcIjpcblx0Ly9UT0RPIHRoaXMucHJpbnRLZXlTaWduYXR1cmUoZWxlbSk7XG4gICAgY2FzZSBcInN0ZW1cIjpcblx0Ly9UT0RPIGRvIG5vdGhpbmc/XG5cdGJyZWFrO1xuICAgIGNhc2UgXCJwYXJ0XCI6XG5cdC8vVE9ETyBwcmludCBwYXJ0XG5cdGJyZWFrO1xuICAgIGRlZmF1bHQ6XG5cdC8vVE9ETyBzaG93IHdlJ3JlIG1pc3Npbmcgc29tZXRoaW5nXG4gICAgfVxufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLnByaW50QmVhbSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHJpbnRTcGFjZSgpO1xuICAgIGlmICh0aGlzLmdldEVsZW0oKS5zdGFydEJlYW0gJiYgIXRoaXMuZ2V0RWxlbSgpLmVuZEJlYW0pIHtcblx0d2hpbGUgKHRoaXMuZ2V0RWxlbSgpKSB7XG5cdCAgICB0aGlzLnByaW50Tm90ZSh0aGlzLmdldEVsZW0oKSk7XG5cdCAgICBpZiAodGhpcy5nZXRFbGVtKCkuZW5kQmVhbSkge1xuXHRcdGJyZWFrO1xuXHQgICAgfVxuXHQgICAgdGhpcy5wb3MrKztcblx0fVxuICAgIH0gZWxzZSB7XG5cdHRoaXMucHJpbnROb3RlKHRoaXMuZ2V0RWxlbSgpKTtcbiAgICB9XG4gICAgdGhpcy5wcmludFNwYWNlKCk7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUucHJpbnROb3RlID0gZnVuY3Rpb24oZWxlbSkge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuXHR2YXIgaTtcbiAgICBpZiAoZWxlbS5jaG9yZCAhPT0gdW5kZWZpbmVkKSB7XG5cdGZvciAoaT0wOyBpPGVsZW0uY2hvcmQubGVuZ3RoOyBpKyspIHtcblx0ICAgIHN0cis9ICdcIicrZWxlbS5jaG9yZFtpXS5uYW1lKydcIic7XG5cdH1cbiAgICB9XG4gICAgXG4gICAgLy9UT0RPIHVuaWZ5IG1hcCBiZXR3ZWVuIG5hbWVzIGFuZCBzeW1ib2xzICh0byBiZSB1c2VkIHdpdGggYWJjcGFyc2U/KVxuICAgIHZhciBkZWNvcmF0aW9ucyA9IHtcblx0XCJzdGFjY2F0b1wiIDogXCIuXCIsXG5cdFwidXBib3dcIiA6IFwidVwiLFxuXHRcImRvd25ib3dcIiA6IFwidlwiLFxuXHRcInJvbGxcIiA6IFwiflwiLFxuXHRcImZlcm1hdGFcIiA6IFwiSFwiLFxuXHRcInNsaWRlXCIgOiBcIkpcIixcblx0XCJhY2NlbnRcIiA6IFwiTFwiLFxuXHRcIm1vcmRlbnRcIiA6IFwiTVwiLFxuXHRcInByYWxsdHJpbGxlclwiIDogXCJQXCIsXG5cdFwidHJpbGxcIiA6IFwiVFwiLFxuXHRcImxvd2VyXCIgOiBcIi5cIlxuICAgIH07XG5cbiAgICBpZiAoZWxlbS5kZWNvcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0Zm9yIChpPTA7IGk8ZWxlbS5kZWNvcmF0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdCAgICB2YXIgZGVjID0gZWxlbS5kZWNvcmF0aW9uW2ldO1xuXHQgICAgaWYgKGRlY29yYXRpb25zW2RlY10pIHtcblx0XHRzdHIrPWRlY29yYXRpb25zW2RlY107XG5cdCAgICB9IGVsc2Uge1xuXHRcdHN0cis9XCIhXCI7IC8vVE9ETyBoYXJkY29kZWRcblx0XHRzdHIrPWRlYztcblx0XHRzdHIrPVwiIVwiOyAvL1RPRE8gaGFyZGNvZGVkXG5cdCAgICB9XG5cdH1cbiAgICB9XG5cbiAgICBpZiAoZWxlbS5ncmFjZW5vdGVzICE9PSB1bmRlZmluZWQpIHtcblx0c3RyKz1cIntcIjtcblx0Zm9yIChpPTA7IGk8ZWxlbS5ncmFjZW5vdGVzLmxlbmd0aDsgaSsrKSB7XG5cdCAgICBzdHIrPXRoaXMuZ2V0Tm90ZVN0cmluZyhlbGVtLmdyYWNlbm90ZXNbaV0pO1xuXHR9XG5cdHN0cis9XCJ9XCI7XG4gICAgfVxuXG4gICAgdmFyIGlnbm9yZXNsdXIgPSBmYWxzZTtcbiAgICBpZiAoZWxlbS5waXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBlbGVtLnBpdGNoZXNbMF0uc3RhcnRTbHVyKSB7XG5cdGlnbm9yZXNsdXIgPSB0cnVlO1xuXHRzdHIrPXRoaXMubXVsdGlwbHlTdHJpbmcoXCIoXCIsZWxlbS5waXRjaGVzWzBdLnN0YXJ0U2x1ci5sZW5ndGgpO1xuICAgIH1cblxuICAgIGlmIChlbGVtLnN0YXJ0U2x1cikge1xuXHRzdHIrPXRoaXMubXVsdGlwbHlTdHJpbmcoXCIoXCIsZWxlbS5zdGFydFNsdXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoKGVsZW0ucGl0Y2hlcy5sZW5ndGggPT09IDEgJiYgZWxlbS5waXRjaGVzWzBdLmVuZFNsdXIpIHx8IGVsZW0uZW5kU2x1cikge1xuXHRpZ25vcmVzbHVyID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbS5zdGFydFRyaXBsZXQpIHtcblx0c3RyKz1cIigzXCI7XG4gICAgfVxuXG4gICAgaWYgKGVsZW0ucGl0Y2hlcykge1xuXHRpZiAoZWxlbS5waXRjaGVzLmxlbmd0aCA+IDEpIHN0cis9XCJbXCI7XG5cdGZvciAoaT0wOyBpPGVsZW0ucGl0Y2hlcy5sZW5ndGg7IGkrKykge1xuXHQgICAgZWxlbS5waXRjaGVzW2ldLmR1cmF0aW9uID0gZWxlbS5kdXJhdGlvbjtcblx0ICAgIHN0cis9dGhpcy5nZXROb3RlU3RyaW5nKGVsZW0ucGl0Y2hlc1tpXSwgaWdub3Jlc2x1cik7XG5cdH1cblx0aWYgKGVsZW0ucGl0Y2hlcy5sZW5ndGggPiAxKSBzdHIrPVwiXVwiO1xuICAgIH0gXG5cbiAgICBpZiAoZWxlbS5waXRjaGVzLmxlbmd0aCA9PT0gMSAmJiBlbGVtLnBpdGNoZXNbMF0uZW5kU2x1cikge1xuXHRzdHIrPXRoaXMubXVsdGlwbHlTdHJpbmcoXCIpXCIsZWxlbS5waXRjaGVzWzBdLmVuZFNsdXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbS5lbmRTbHVyKSB7XG5cdHN0cis9dGhpcy5tdWx0aXBseVN0cmluZyhcIilcIixlbGVtLmVuZFNsdXIubGVuZ3RoKTtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50U3RyaW5nKHN0cixlbGVtKTtcblxufTtcblxuLy8gYWNjaWRlbnRhbHMsIHRpZXMgYW5kIHNvbWV0aW1lcyBzbHVycywgc29tZXRpbWVzIGR1cmF0aW9uXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0Tm90ZVN0cmluZyA9IGZ1bmN0aW9uKHBpdGNoZWxlbSwgaWdub3Jlc2x1cikge1xuICAgIHZhciBzdHIgPSBcIlwiO1xuICAgIGlmICghaWdub3Jlc2x1ciAmJiBwaXRjaGVsZW0uc3RhcnRTbHVyKSB7XG5cdHN0cis9XCIoXCI7XG4gICAgfVxuXG4gICAgdmFyIHN5bWIgPSBcIlwiO1xuICAgIHN3aXRjaCAocGl0Y2hlbGVtLmFjY2lkZW50YWwpIHtcbiAgICBjYXNlIFwicXVhcnRlcnNoYXJwXCI6XG5cdHN5bWIgPSBcIl4vXCI7XG5cdGJyZWFrO1xuICAgIGNhc2UgXCJkYmxzaGFycFwiOlxuXHRzeW1iID0gXCJeXlwiO1xuXHRicmVhaztcbiAgICBjYXNlIFwic2hhcnBcIjpcblx0c3ltYiA9IFwiXlwiO1xuXHRicmVhaztcbiAgICBjYXNlIFwicXVhcnRlcmZsYXRcIjpcblx0c3ltYiA9IFwiXy9cIjtcblx0YnJlYWs7XG4gICAgY2FzZSBcImZsYXRcIjpcblx0c3ltYiA9IFwiX1wiO1xuXHRicmVhaztcbiAgICBjYXNlIFwiZGJsZmxhdFwiOlxuXHRzeW1iID0gXCJfX1wiO1xuXHRicmVhaztcbiAgICBjYXNlIFwibmF0dXJhbFwiOlxuXHRzeW1iID0gXCI9XCI7XG4gICAgfVxuICAgIHN0cis9c3ltYjtcblxuICAgIHZhciBwaXRjaGVzID0gW1wiQ1wiLFwiRFwiLFwiRVwiLFwiRlwiLFwiR1wiLFwiQVwiLFwiQlwiXTtcbiAgICB2YXIgcGl0Y2hzdHIgPSBwaXRjaGVzW3RoaXMuZXh0cmFjdE5vdGUocGl0Y2hlbGVtLnBpdGNoKV07XG4gICAgdmFyIG9jdGF2ZSA9IHRoaXMuZXh0cmFjdE9jdGF2ZShwaXRjaGVsZW0ucGl0Y2gpO1xuICAgIGlmIChvY3RhdmU+MCkge1xuXHRwaXRjaHN0ciA9IHBpdGNoc3RyLnRvTG93ZXJDYXNlKCk7XG5cdG9jdGF2ZS0tO1xuXHR3aGlsZSAob2N0YXZlPjApIHtcblx0ICAgIHBpdGNoc3RyKz1cIidcIjtcblx0ICAgIG9jdGF2ZS0tO1xuXHR9XG4gICAgfSBlbHNlIHtcblx0d2hpbGUgKG9jdGF2ZTwwKSB7XG5cdCAgICBwaXRjaHN0cis9XCIsXCI7XG5cdCAgICBvY3RhdmUrKztcblx0fVxuICAgIH1cbiAgICBcbiAgICBzdHIrPXBpdGNoc3RyO1xuICAgIFxuICAgIGlmIChwaXRjaGVsZW0uZHVyYXRpb24pIHtcblx0c3RyKz10aGlzLmdldER1cmF0aW9uU3RyaW5nKHBpdGNoZWxlbS5kdXJhdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFpZ25vcmVzbHVyICYmIHBpdGNoZWxlbS5lbmRTbHVyKSB7XG5cdHN0cis9XCIpXCI7XG4gICAgfVxuXG4gICAgaWYgKHBpdGNoZWxlbS5zdGFydFRpZSkge1xuXHRzdHIrPVwiLVwiO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5UZXh0UHJpbnRlci5wcm90b3R5cGUuZ2V0RHVyYXRpb25TdHJpbmcgPSBmdW5jdGlvbihkdXJhdGlvbikge1xuICAgIC8vVE9ETyBkZXRlY3QgY3Jvb2tlZCByaHl0aG1cbiAgICBpZiAoZHVyYXRpb24vdGhpcy5sID4gMSkge1xuXHRyZXR1cm4gZHVyYXRpb24vdGhpcy5sO1xuICAgIH0gXG4gICAgdmFyIHJldCA9IFwiXCI7XG4gICAgaWYgKHRoaXMubC9kdXJhdGlvbj4xKSB7XG5cdHJldCs9XCIvXCI7XG5cdGlmICh0aGlzLmwvZHVyYXRpb24+Mikge1xuXHQgICAgcmV0Kz10aGlzLmwvZHVyYXRpb247XG5cdH0gICBcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5leHRyYWN0Tm90ZSA9IGZ1bmN0aW9uKHBpdGNoKSB7XG4gICAgdmFyIHBpdGNoMiA9IHBpdGNoJTc7XG4gICAgaWYgKHBpdGNoMjwwKSBwaXRjaDIrPTc7XG4gICAgcmV0dXJuIHBpdGNoMjtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5leHRyYWN0T2N0YXZlID0gZnVuY3Rpb24ocGl0Y2gpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihwaXRjaC83KTtcbn07XG5cblRleHRQcmludGVyLnByb3RvdHlwZS5wcmludEJhckxpbmUgPSBmdW5jdGlvbihlbGVtKSB7XG4gICAgdmFyIGJhcnN0ciA9IFwiXCI7XG4gICAgc3dpdGNoIChlbGVtLnR5cGUpIHtcbiAgICBjYXNlIFwiYmFyX3RoaW5cIjogYmFyc3RyKz1cInxcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl90aGluX3RoaWNrXCI6IGJhcnN0cis9XCJ8XVwiOyBicmVhaztcbiAgICBjYXNlIFwiYmFyX3RoaW5fdGhpblwiOiBiYXJzdHIrPVwifHxcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl90aGlja190aGluXCI6IGJhcnN0cis9XCJbfFwiOyBicmVhaztcbiAgICBjYXNlIFwiYmFyX2RibF9yZXBlYXRcIjogYmFyc3RyKz1cIjp8fDpcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl9sZWZ0X3JlcGVhdFwiOiBiYXJzdHIrPVwifDpcIjsgYnJlYWs7XG4gICAgY2FzZSBcImJhcl9yaWdodF9yZXBlYXRcIjogYmFyc3RyKz1cIjp8XCI7IGJyZWFrO1xuICAgIGNhc2UgXCJiYXJfaW52aXNpYmxlXCI6IGJhcnN0cis9XCJcIjsgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMucHJpbnRTdHJpbmcoYmFyc3RyLGVsZW0pO1xufTtcblxuVGV4dFByaW50ZXIucHJvdG90eXBlLm11bHRpcGx5U3RyaW5nID0gZnVuY3Rpb24gKHMsIG4pIHtcbiAgICB2YXIgcmV0ID0gXCJcIjtcbiAgICBmb3IgKDtuPjA7bi0tKSByZXQrPXM7XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVGV4dFByaW50ZXI7XG4iLCIvLyBhYmNfZWRpdG9yLmpzXG4vLyB3aW5kb3cuQUJDSlMuRWRpdG9yIGlzIHRoZSBpbnRlcmZhY2UgY2xhc3MgZm9yIHRoZSBhcmVhIHRoYXQgY29udGFpbnMgdGhlIEFCQyB0ZXh0LiBJdCBpcyByZXNwb25zaWJsZSBmb3Jcbi8vIGhvbGRpbmcgdGhlIHRleHQgb2YgdGhlIHR1bmUgYW5kIGNhbGxpbmcgdGhlIHBhcnNlciBhbmQgdGhlIHJlbmRlcmluZyBlbmdpbmVzLlxuLy9cbi8vIEVkaXRBcmVhIGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgYSB0ZXh0YXJlYSBhcyB0aGUgY29udHJvbCB0aGF0IGlzIHNob3duIHRvIHRoZSB1c2VyLiBBcyBsb25nIGFzXG4vLyB0aGUgc2FtZSBpbnRlcmZhY2UgaXMgdXNlZCwgd2luZG93LkFCQ0pTLkVkaXRvciBjYW4gdXNlIGEgZGlmZmVyZW50IHR5cGUgb2Ygb2JqZWN0LlxuLy9cbi8vIEVkaXRBcmVhOlxuLy8gLSBjb25zdHJ1Y3Rvcih0ZXh0YXJlYWlkKVxuLy9cdFx0VGhpcyBjb250YWlucyB0aGUgaWQgb2YgYSB0ZXh0YXJlYSBjb250cm9sIHRoYXQgd2lsbCBiZSB1c2VkLlxuLy8gLSBhZGRTZWxlY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcilcbi8vXHRcdEEgY2FsbGJhY2sgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZW50cnkgcG9pbnQgZmlyZVNlbGVjdGlvbkNoYW5nZWQoKVxuLy8gLSBhZGRDaGFuZ2VMaXN0ZW5lcihsaXN0ZW5lcilcbi8vXHRcdEEgY2FsbGJhY2sgY2xhc3MgdGhhdCBjb250YWlucyB0aGUgZW50cnkgcG9pbnQgZmlyZUNoYW5nZWQoKVxuLy8gLSBnZXRTZWxlY3Rpb24oKVxuLy9cdFx0cmV0dXJucyB0aGUgb2JqZWN0IHsgc3RhcnQ6ICwgZW5kOiB9IHdpdGggdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIGNoYXJhY3RlcnNcbi8vIC0gc2V0U2VsZWN0aW9uKHN0YXJ0LCBlbmQpXG4vL1x0XHRzdGFydCBhbmQgZW5kIGFyZSB0aGUgY2hhcmFjdGVyIHBvc2l0aW9ucyB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC5cbi8vIC0gZ2V0U3RyaW5nKClcbi8vXHRcdHJldHVybnMgdGhlIEFCQyB0ZXh0IHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZC5cbi8vIC0gc2V0U3RyaW5nKHN0cilcbi8vXHRcdHNldHMgdGhlIEFCQyB0ZXh0IHRoYXQgaXMgY3VycmVudGx5IGRpc3BsYXllZCwgYW5kIHJlc2V0cyB0aGUgaW5pdGlhbFRleHQgdmFyaWFibGVcbi8vIC0gZ2V0RWxlbSgpXG4vL1x0XHRyZXR1cm5zIHRoZSB0ZXh0YXJlYSBlbGVtZW50XG4vLyAtIHN0cmluZyBpbml0aWFsVGV4dFxuLy9cdFx0Q29udGFpbnMgdGhlIHN0YXJ0aW5nIHRleHQuIFRoaXMgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIGN1cnJlbnQgdGV4dCB0byBzZWUgaWYgYW55dGhpbmcgY2hhbmdlZC5cbi8vXG5cbi8qZ2xvYmFsIGRvY3VtZW50LCB3aW5kb3csIGNsZWFyVGltZW91dCwgc2V0VGltZW91dCAqL1xuXG52YXIgVHVuZUJvb2sgPSByZXF1aXJlKCcuLi9hcGkvYWJjX3R1bmVib29rJykuVHVuZUJvb2s7XG52YXIgcGFyc2VDb21tb24gPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfY29tbW9uJyk7XG52YXIgUGFyc2UgPSByZXF1aXJlKCcuLi9wYXJzZS9hYmNfcGFyc2UnKTtcbnZhciBUZXh0UHJpbnRlciA9IHJlcXVpcmUoJy4uL3RyYW5zZm9ybS9hYmMyYWJjX3dyaXRlJyk7XG52YXIgRW5ncmF2ZXJDb250cm9sbGVyID0gcmVxdWlyZSgnLi4vd3JpdGUvYWJjX2VuZ3JhdmVyX2NvbnRyb2xsZXInKTtcbnZhciBTeW50aENvbnRyb2xsZXIgPSByZXF1aXJlKCcuLi9zeW50aC9zeW50aC1jb250cm9sbGVyJyk7XG52YXIgc3VwcG9ydHNBdWRpbyA9IHJlcXVpcmUoJy4uL3N5bnRoL3N1cHBvcnRzLWF1ZGlvJyk7XG5cbi8vIFBvbHlmaWxsIGZvciBDdXN0b21FdmVudCBmb3Igb2xkIElFIHZlcnNpb25zXG5pZiAoIHR5cGVvZiB3aW5kb3cuQ3VzdG9tRXZlbnQgIT09IFwiZnVuY3Rpb25cIiApIHtcblx0dmFyIEN1c3RvbUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQsIHBhcmFtcykge1xuXHRcdHBhcmFtcyA9IHBhcmFtcyB8fCB7YnViYmxlczogZmFsc2UsIGNhbmNlbGFibGU6IGZhbHNlLCBkZXRhaWw6IHVuZGVmaW5lZH07XG5cdFx0dmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuXHRcdGV2dC5pbml0Q3VzdG9tRXZlbnQoZXZlbnQsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSwgcGFyYW1zLmRldGFpbCk7XG5cdFx0cmV0dXJuIGV2dDtcblx0fTtcblx0Q3VzdG9tRXZlbnQucHJvdG90eXBlID0gd2luZG93LkV2ZW50LnByb3RvdHlwZTtcblx0d2luZG93LkN1c3RvbUV2ZW50ID0gQ3VzdG9tRXZlbnQ7XG59XG5cbnZhciBFZGl0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhaWQpIHtcbiAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRleHRhcmVhaWQpO1xuICB0aGlzLmluaXRpYWxUZXh0ID0gdGhpcy50ZXh0YXJlYS52YWx1ZTtcbiAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG59XG5cbkVkaXRBcmVhLnByb3RvdHlwZS5hZGRTZWxlY3Rpb25MaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gIHRoaXMudGV4dGFyZWEub25tb3VzZW1vdmUgPSBmdW5jdGlvbihldikge1xuXHQgIGlmICh0aGlzLmlzRHJhZ2dpbmcpXG5cdCAgICBsaXN0ZW5lci5maXJlU2VsZWN0aW9uQ2hhbmdlZCgpO1xuICB9O1xufTtcblxuRWRpdEFyZWEucHJvdG90eXBlLmFkZENoYW5nZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgdGhpcy5jaGFuZ2VsaXN0ZW5lciA9IGxpc3RlbmVyO1xuICB0aGlzLnRleHRhcmVhLm9ua2V5dXAgPSBmdW5jdGlvbigpIHtcbiAgICBsaXN0ZW5lci5maXJlQ2hhbmdlZCgpO1xuICB9O1xuICB0aGlzLnRleHRhcmVhLm9ubW91c2Vkb3duID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgbGlzdGVuZXIuZmlyZVNlbGVjdGlvbkNoYW5nZWQoKTtcbiAgfTtcbiAgdGhpcy50ZXh0YXJlYS5vbm1vdXNldXAgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgbGlzdGVuZXIuZmlyZUNoYW5nZWQoKTtcbiAgfTtcbiAgdGhpcy50ZXh0YXJlYS5vbmNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgIGxpc3RlbmVyLmZpcmVDaGFuZ2VkKCk7XG4gIH07XG59O1xuXG4vL1RPRE8gd29uJ3Qgd29yayB1bmRlciBJRT9cbkVkaXRBcmVhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHtzdGFydDogdGhpcy50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCwgZW5kOiB0aGlzLnRleHRhcmVhLnNlbGVjdGlvbkVuZH07XG59O1xuXG5FZGl0QXJlYS5wcm90b3R5cGUuc2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuXHRpZih0aGlzLnRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKVxuXHQgICB0aGlzLnRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuXHRlbHNlIGlmKHRoaXMudGV4dGFyZWEuY3JlYXRlVGV4dFJhbmdlKSB7XG5cdFx0Ly8gRm9yIElFOFxuXHQgICB2YXIgZSA9IHRoaXMudGV4dGFyZWEuY3JlYXRlVGV4dFJhbmdlKCk7XG5cdCAgIGUuY29sbGFwc2UodHJ1ZSk7XG5cdCAgIGUubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kKTtcblx0ICAgZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KTtcblx0ICAgZS5zZWxlY3QoKTtcblx0fVxuICB0aGlzLnRleHRhcmVhLmZvY3VzKCk7XG59O1xuXG5FZGl0QXJlYS5wcm90b3R5cGUuZ2V0U3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRleHRhcmVhLnZhbHVlO1xufTtcblxuRWRpdEFyZWEucHJvdG90eXBlLnNldFN0cmluZyA9IGZ1bmN0aW9uKHN0cikge1xuICB0aGlzLnRleHRhcmVhLnZhbHVlID0gc3RyO1xuICB0aGlzLmluaXRpYWxUZXh0ID0gdGhpcy5nZXRTdHJpbmcoKTtcbiAgaWYgKHRoaXMuY2hhbmdlbGlzdGVuZXIpIHtcbiAgICB0aGlzLmNoYW5nZWxpc3RlbmVyLmZpcmVDaGFuZ2VkKCk7XG4gIH1cbn07XG5cbkVkaXRBcmVhLnByb3RvdHlwZS5nZXRFbGVtID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnRleHRhcmVhO1xufTtcblxuLy9cbi8vIHdpbmRvdy5BQkNKUy5FZGl0b3I6XG4vL1xuLy8gY29uc3RydWN0b3IoZWRpdGFyZWEsIHBhcmFtcylcbi8vXHRcdGlmIGVkaXRhcmVhIGlzIGEgc3RyaW5nLCB0aGVuIGl0IGlzIGFuIEhUTUwgaWQgb2YgYSB0ZXh0YXJlYSBjb250cm9sLlxuLy9cdFx0T3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYW4gaW5zdGFudGlhdGlvbiBvZiBhbiBvYmplY3QgdGhhdCBleHByZXNzZXMgdGhlIEVkaXRBcmVhIGludGVyZmFjZS5cbi8vXG4vL1x0XHRwYXJhbXMgaXMgYSBoYXNoIG9mOlxuLy9cdFx0Y2FudmFzX2lkOiBvciBwYXBlcl9pZDogSFRNTCBpZCB0byBkcmF3IGluLiBJZiBub3QgcHJlc2VudCwgdGhlbiB0aGUgZHJhd2luZyBoYXBwZW5zIGp1c3QgYmVsb3cgdGhlIGVkaXRvci5cbi8vXHRcdGdlbmVyYXRlX21pZGk6IGlmIHByZXNlbnQsIHRoZW4gbWlkaSBpcyBnZW5lcmF0ZWQuXG4vL1x0XHRtaWRpX2lkOiBpZiBwcmVzZW50LCB0aGUgSFRNTCBpZCB0byBwbGFjZSB0aGUgbWlkaSBjb250cm9sLiBPdGhlcndpc2UgaXQgaXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpdiBhcyB0aGUgcGFwZXIuXG4vL1x0XHRtaWRpX2Rvd25sb2FkX2lkOiBpZiBwcmVzZW50LCB0aGUgSFRNTCBpZCB0byBwbGFjZSB0aGUgbWlkaSBkb3dubG9hZCBsaW5rLiBPdGhlcndpc2UgaXQgaXMgcGxhY2VkIGluIHRoZSBzYW1lIGRpdiBhcyB0aGUgcGFwZXIuXG4vL1x0XHRnZW5lcmF0ZV93YXJuaW5nczogaWYgcHJlc2VudCwgdGhlbiBwYXJzZXIgd2FybmluZ3MgYXJlIGRpc3BsYXllZCBvbiB0aGUgcGFnZS5cbi8vXHRcdHdhcm5pbmdzX2lkOiBpZiBwcmVzZW50LCB0aGUgSFRNTCBpZCB0byBwbGFjZSB0aGUgd2FybmluZ3MuIE90aGVyd2lzZSB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIHNhbWUgZGl2IGFzIHRoZSBwYXBlci5cbi8vXHRcdG9uY2hhbmdlOiBpZiBwcmVzZW50LCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuZXZlciB0aGVyZSBoYXMgYmVlbiBhIGNoYW5nZS5cbi8vXHRcdGd1aTogaWYgcHJlc2VudCwgdGhlIHBhcGVyIGNhbiBzZW5kIGNoYW5nZXMgYmFjayB0byB0aGUgZWRpdG9yIChwcmVzdW1hYmx5IGJlY2F1c2UgdGhlIHVzZXIgY2hhbmdlZCBzb21ldGhpbmcgZGlyZWN0bHkuKVxuLy9cdFx0cGFyc2VyX29wdGlvbnM6IG9wdGlvbnMgdG8gc2VuZCB0byB0aGUgcGFyc2VyIGVuZ2luZS5cbi8vXHRcdG1pZGlfb3B0aW9uczogb3B0aW9ucyB0byBzZW5kIHRvIHRoZSBtaWRpIGVuZ2luZS5cbi8vXHRcdHJlbmRlcl9vcHRpb25zOiBvcHRpb25zIHRvIHNlbmQgdG8gdGhlIHJlbmRlciBlbmdpbmUuXG4vL1x0XHRpbmRpY2F0ZV9jaGFuZ2VkOiB0aGUgZGlydHkgZmxhZyBpcyBzZXQgaWYgdGhpcyBpcyB0cnVlLlxuLy9cbi8vIC0gc2V0UmVhZE9ubHkoYm9vbClcbi8vXHRcdGFkZHMgb3IgcmVtb3ZlcyB0aGUgY2xhc3MgYWJjX3RleHRhcmVhX3JlYWRvbmx5LCBhbmQgYWRkcyBvciByZW1vdmVzIHRoZSBhdHRyaWJ1dGUgcmVhZG9ubHk9eWVzXG4vLyAtIHNldERpcnR5U3R5bGUoYm9vbClcbi8vXHRcdGFkZHMgb3IgcmVtb3ZlcyB0aGUgY2xhc3MgYWJjX3RleHRhcmVhX2RpcnR5XG4vLyAtIHJlbmRlclR1bmUoYWJjLCBwYXJzZXJwYXJhbXMsIGRpdilcbi8vXHRcdEltbWVkaWF0ZWx5IHJlbmRlcnMgdGhlIHR1bmUuIChVc2VmdWwgZm9yIGNyZWF0aW5nIHRoZSBTVkcgb3V0cHV0IGJlaGluZCB0aGUgc2NlbmVzLCBpZiBkaXYgaXMgaGlkZGVuKVxuLy9cdFx0c3RyaW5nIGFiYzogdGhlIEFCQyB0ZXh0XG4vL1x0XHRwYXJzZXJwYXJhbXM6IHBhcmFtcyB0byBzZW5kIHRvIHRoZSBwYXJzZXJcbi8vXHRcdGRpdjogdGhlIEhUTUwgaWQgdG8gcmVuZGVyIHRvLlxuLy8gLSBtb2RlbENoYW5nZWQoKVxuLy9cdFx0Q2FsbGVkIHdoZW4gdGhlIG1vZGVsIGhhcyBiZWVuIGNoYW5nZWQgdG8gdHJpZ2dlciByZS1yZW5kZXJpbmdcbi8vIC0gcGFyc2VBQkMoKVxuLy9cdFx0Q2FsbGVkIGludGVybmFsbHkgYnkgZmlyZUNoYW5nZWQoKVxuLy9cdFx0cmV0dXJucyB0cnVlIGlmIHRoZXJlIGhhcyBiZWVuIGEgY2hhbmdlIHNpbmNlIGxhc3QgY2FsbC5cbi8vIC0gdXBkYXRlU2VsZWN0aW9uKClcbi8vXHRcdENhbGxlZCB3aGVuIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24uIFRoaXMgY2FsbHMgdGhlIGVuZ3JhdmVyX2NvbnRyb2xsZXIgdG8gc2hvdyB0aGUgc2VsZWN0aW9uLlxuLy8gLSBmaXJlU2VsZWN0aW9uQ2hhbmdlZCgpXG4vL1x0XHRDYWxsZWQgYnkgdGhlIHRleHRhcmVhIG9iamVjdCB3aGVuIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBzZWxlY3Rpb24uXG4vLyAtIHBhcmFtQ2hhbmdlZChlbmdyYXZlcnBhcmFtcylcbi8vXHRcdENhbGxlZCB0byBzaWduYWwgdGhhdCB0aGUgZW5ncmF2ZXIgcGFyYW1zIGhhdmUgY2hhbmdlZCwgc28gcmUtcmVuZGVyaW5nIHNob3VsZCBvY2N1ci5cbi8vIC0gZmlyZUNoYW5nZWQoKVxuLy9cdFx0Q2FsbGVkIGJ5IHRoZSB0ZXh0YXJlYSBvYmplY3Qgd2hlbiB0aGUgdXNlciBoYXMgY2hhbmdlZCBzb21ldGhpbmcuXG4vLyAtIHNldE5vdERpcnR5KClcbi8vXHRcdENhbGxlZCBieSB0aGUgY2xpZW50IGFwcCB0byByZXNldCB0aGUgZGlydHkgZmxhZ1xuLy8gLSBpc0RpcnR5KClcbi8vXHRcdFJldHVybnMgdHJ1ZSBvciBmYWxzZSwgd2hldGhlciB0aGUgdGV4dGFyZWEgY29udGFpbnMgdGhlIHNhbWUgdGV4dCB0aGF0IGl0IHN0YXJ0ZWQgd2l0aC5cbi8vIC0gaGlnaGxpZ2h0KGFiY2VsZW0pXG4vL1x0XHRDYWxsZWQgYnkgdGhlIGVuZ3JhdmVyX2NvbnRyb2xsZXIgdG8gaGlnaGxpZ2h0IGFuIGFyZWEuXG4vLyAtIHBhdXNlKGJvb2wpXG4vL1x0XHRTdG9wcyB0aGUgYXV0b21hdGljIHJlbmRlcmluZyB3aGVuIHRoZSB1c2VyIGlzIHR5cGluZy5cbi8vXG5cbnZhciBFZGl0b3IgPSBmdW5jdGlvbihlZGl0YXJlYSwgcGFyYW1zKSB7XG5cdC8vIENvcHkgYWxsIHRoZSBvcHRpb25zIHRoYXQgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaFxuXHR0aGlzLmFiY2pzUGFyYW1zID0ge307XG5cdHZhciBrZXk7XG5cdGlmIChwYXJhbXMuYWJjanNQYXJhbXMpIHtcblx0XHRmb3IgKGtleSBpbiBwYXJhbXMuYWJjanNQYXJhbXMpIHtcblx0XHRcdGlmIChwYXJhbXMuYWJjanNQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHR0aGlzLmFiY2pzUGFyYW1zW2tleV0gPSBwYXJhbXMuYWJjanNQYXJhbXNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHBhcmFtcy5taWRpX29wdGlvbnMpIHtcblx0XHRmb3IgKGtleSBpbiBwYXJhbXMubWlkaV9vcHRpb25zKSB7XG5cdFx0XHRpZiAocGFyYW1zLm1pZGlfb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdHRoaXMuYWJjanNQYXJhbXNba2V5XSA9IHBhcmFtcy5taWRpX29wdGlvbnNba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKHBhcmFtcy5wYXJzZXJfb3B0aW9ucykge1xuXHRcdGZvciAoa2V5IGluIHBhcmFtcy5wYXJzZXJfb3B0aW9ucykge1xuXHRcdFx0aWYgKHBhcmFtcy5wYXJzZXJfb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdHRoaXMuYWJjanNQYXJhbXNba2V5XSA9IHBhcmFtcy5wYXJzZXJfb3B0aW9uc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZiAocGFyYW1zLnJlbmRlcl9vcHRpb25zKSB7XG5cdFx0Zm9yIChrZXkgaW4gcGFyYW1zLnJlbmRlcl9vcHRpb25zKSB7XG5cdFx0XHRpZiAocGFyYW1zLnJlbmRlcl9vcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0dGhpcy5hYmNqc1BhcmFtc1trZXldID0gcGFyYW1zLnJlbmRlcl9vcHRpb25zW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKHBhcmFtcy5pbmRpY2F0ZV9jaGFuZ2VkKVxuXHRcdHRoaXMuaW5kaWNhdGVfY2hhbmdlZCA9IHRydWU7XG4gIGlmICh0eXBlb2YgZWRpdGFyZWEgPT09IFwic3RyaW5nXCIpIHtcbiAgICB0aGlzLmVkaXRhcmVhID0gbmV3IEVkaXRBcmVhKGVkaXRhcmVhKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmVkaXRhcmVhID0gZWRpdGFyZWE7XG4gIH1cbiAgdGhpcy5lZGl0YXJlYS5hZGRTZWxlY3Rpb25MaXN0ZW5lcih0aGlzKTtcbiAgdGhpcy5lZGl0YXJlYS5hZGRDaGFuZ2VMaXN0ZW5lcih0aGlzKTtcblxuICBpZiAocGFyYW1zLmNhbnZhc19pZCkge1xuICAgIHRoaXMuZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyYW1zLmNhbnZhc19pZCk7XG4gIH0gZWxzZSBpZiAocGFyYW1zLnBhcGVyX2lkKSB7XG4gICAgdGhpcy5kaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbXMucGFwZXJfaWQpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIkRJVlwiKTtcbiAgICB0aGlzLmVkaXRhcmVhLmdldEVsZW0oKS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLmRpdiwgdGhpcy5lZGl0YXJlYS5nZXRFbGVtKCkpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFjaykge1xuICBcdHRoaXMuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2sgPSBwYXJhbXMuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2s7XG4gIH1cblxuICBpZiAocGFyYW1zLnN5bnRoKSB7XG4gIFx0aWYgKHN1cHBvcnRzQXVkaW8oKSkge1xuXHQgICAgdGhpcy5zeW50aCA9IHtcblx0XHQgICAgZWw6IHBhcmFtcy5zeW50aC5lbCxcblx0XHQgICAgY3Vyc29yQ29udHJvbDogcGFyYW1zLnN5bnRoLmN1cnNvckNvbnRyb2wsXG5cdFx0ICAgIG9wdGlvbnM6IHBhcmFtcy5zeW50aC5vcHRpb25zXG5cdCAgICB9XG4gICAgfVxuICB9XG5cdC8vIElmIHRoZSB1c2VyIHdhbnRzIG1pZGksIHRoZW4gc3RvcmUgdGhlIGVsZW1lbnRzIHRoYXQgaXQgd2lsbCBiZSB3cml0dGVuIHRvLiBUaGUgZWxlbWVudCBjb3VsZCBlaXRoZXIgYmUgcGFzc2VkIGluIGFzIGFuIGlkLFxuXHQvLyBhbiBlbGVtZW50LCBvciBub3RoaW5nLiBJZiBub3RoaW5nIGlzIHBhc3NlZCBpbiwgdGhlbiBqdXN0IHB1dCB0aGUgbWlkaSBvbiB0b3Agb2YgdGhlIGdlbmVyYXRlZCBtdXNpYy5cblx0aWYgKHBhcmFtcy5nZW5lcmF0ZV9taWRpKSB7XG5cdCAgXHR0aGlzLmdlbmVyYXRlX21pZGkgPSBwYXJhbXMuZ2VuZXJhdGVfbWlkaTtcblx0XHRpZiAodGhpcy5hYmNqc1BhcmFtcy5nZW5lcmF0ZURvd25sb2FkKSB7XG5cdFx0XHRpZiAodHlwZW9mIHBhcmFtcy5taWRpX2Rvd25sb2FkX2lkID09PSAnc3RyaW5nJylcblx0XHRcdFx0dGhpcy5kb3dubG9hZE1pZGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbXMubWlkaV9kb3dubG9hZF9pZCk7XG5cdFx0XHRlbHNlIGlmIChwYXJhbXMubWlkaV9kb3dubG9hZF9pZCkgLy8gYXNzdW1lLCBpZiB0aGUgdmFyIGlzIG5vdCBhIHN0cmluZyBpdCBpcyBhbiBlbGVtZW50LiBJZiBub3QsIGl0IHdpbGwgY3Jhc2ggc29vbiBlbm91Z2guXG5cdFx0XHRcdHRoaXMuZG93bmxvYWRNaWRpID0gcGFyYW1zLm1pZGlfZG93bmxvYWRfaWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmFiY2pzUGFyYW1zLmdlbmVyYXRlSW5saW5lICE9PSBmYWxzZSkgeyAvLyBUaGUgZGVmYXVsdCBmb3IgdGhpcyBpcyB0cnVlLCBzbyB1bmRlZmluZWQgaXMgYWxzbyB0cnVlLlxuXHRcdFx0aWYgKHR5cGVvZiBwYXJhbXMubWlkaV9pZCA9PT0gJ3N0cmluZycpXG5cdFx0XHRcdHRoaXMuaW5saW5lTWlkaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBhcmFtcy5taWRpX2lkKTtcblx0XHRcdGVsc2UgaWYgKHBhcmFtcy5taWRpX2lkKSAvLyBhc3N1bWUsIGlmIHRoZSB2YXIgaXMgbm90IGEgc3RyaW5nIGl0IGlzIGFuIGVsZW1lbnQuIElmIG5vdCwgaXQgd2lsbCBjcmFzaCBzb29uIGVub3VnaC5cblx0XHRcdFx0dGhpcy5pbmxpbmVNaWRpID0gcGFyYW1zLm1pZGlfaWQ7XG5cdFx0fVxuXHR9XG5cbiAgaWYgKHBhcmFtcy5nZW5lcmF0ZV93YXJuaW5ncyB8fCBwYXJhbXMud2FybmluZ3NfaWQpIHtcbiAgICBpZiAocGFyYW1zLndhcm5pbmdzX2lkKSB7XG4gICAgICB0aGlzLndhcm5pbmdzZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyYW1zLndhcm5pbmdzX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53YXJuaW5nc2RpdiA9IHRoaXMuZGl2O1xuICAgIH1cbiAgfVxuXG4gIHRoaXMub25jaGFuZ2VDYWxsYmFjayA9IHBhcmFtcy5vbmNoYW5nZTtcblxuICBpZiAocGFyYW1zLmd1aSkge1xuICAgIHRoaXMudGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWRpdGFyZWEpO1xuICAgIHRoaXMuYWJjanNQYXJhbXMuZWRpdGFibGUgPSB0cnVlO1xuICB9XG4gIHRoaXMub2xkdCA9IFwiXCI7XG4gIHRoaXMuYlJlZW50cnkgPSBmYWxzZTtcbiAgdGhpcy5wYXJzZUFCQygpO1xuICB0aGlzLm1vZGVsQ2hhbmdlZCgpO1xuXG4gIHRoaXMuYWRkQ2xhc3NOYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgdmFyIGhhc0NsYXNzTmFtZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnRDbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZTtcbiAgICAgIHJldHVybiAoZWxlbWVudENsYXNzTmFtZS5sZW5ndGggPiAwICYmIChlbGVtZW50Q2xhc3NOYW1lID09PSBjbGFzc05hbWUgfHxcbiAgICAgICAgbmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NOYW1lICsgXCIoXFxcXHN8JClcIikudGVzdChlbGVtZW50Q2xhc3NOYW1lKSkpO1xuICAgIH07XG5cbiAgICBpZiAoIWhhc0NsYXNzTmFtZShlbGVtZW50LCBjbGFzc05hbWUpKVxuICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gKGVsZW1lbnQuY2xhc3NOYW1lID8gJyAnIDogJycpICsgY2xhc3NOYW1lO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9O1xuXG4gIHRoaXMucmVtb3ZlQ2xhc3NOYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSBwYXJzZUNvbW1vbi5zdHJpcChlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKFxuICAgICAgbmV3IFJlZ0V4cChcIihefFxcXFxzKylcIiArIGNsYXNzTmFtZSArIFwiKFxcXFxzK3wkKVwiKSwgJyAnKSk7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH07XG5cbiAgdGhpcy5zZXRSZWFkT25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdCAgdmFyIHJlYWRvbmx5Q2xhc3MgPSAnYWJjX3RleHRhcmVhX3JlYWRvbmx5Jztcblx0ICB2YXIgZWwgPSB0aGlzLmVkaXRhcmVhLmdldEVsZW0oKTtcbiAgICBpZiAocmVhZE9ubHkpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAneWVzJyk7XG5cdCAgdGhpcy5hZGRDbGFzc05hbWUoZWwsIHJlYWRvbmx5Q2xhc3MpO1xuXHR9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdyZWFkb25seScpO1xuXHQgIHRoaXMucmVtb3ZlQ2xhc3NOYW1lKGVsLCByZWFkb25seUNsYXNzKTtcbiAgICB9XG4gIH07XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLnJlbmRlclR1bmUgPSBmdW5jdGlvbihhYmMsIHBhcmFtcywgZGl2KSB7XG4gIHZhciB0dW5lYm9vayA9IG5ldyBUdW5lQm9vayhhYmMpO1xuICB2YXIgYWJjUGFyc2VyID0gUGFyc2UoKTtcbiAgYWJjUGFyc2VyLnBhcnNlKHR1bmVib29rLnR1bmVzWzBdLmFiYywgcGFyYW1zLCB0dW5lYm9vay50dW5lc1swXS5zdGFydFBvcyAtIHR1bmVib29rLmhlYWRlci5sZW5ndGgpOyAvL1RPRE8gaGFuZGxlIG11bHRpcGxlIHR1bmVzXG4gIHZhciB0dW5lID0gYWJjUGFyc2VyLmdldFR1bmUoKTtcbiAgdmFyIGVuZ3JhdmVyX2NvbnRyb2xsZXIgPSBuZXcgRW5ncmF2ZXJDb250cm9sbGVyKGRpdiwgdGhpcy5hYmNqc1BhcmFtcyk7XG4gIGVuZ3JhdmVyX2NvbnRyb2xsZXIuZW5ncmF2ZUFCQyh0dW5lKTtcbn07XG5cbkVkaXRvci5wcm90b3R5cGUucmVkcmF3TWlkaSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZW5lcmF0ZV9taWRpICYmICF0aGlzLm1pZGlQYXVzZSkge1xuXHRcdHZhciBldmVudCA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoXCJnZW5lcmF0ZU1pZGlcIiwge1xuXHRcdFx0ZGV0YWlsOiB7XG5cdFx0XHRcdHR1bmVzOiB0aGlzLnR1bmVzLFxuXHRcdFx0XHRhYmNqc1BhcmFtczogdGhpcy5hYmNqc1BhcmFtcyxcblx0XHRcdFx0ZG93bmxvYWRNaWRpRWw6IHRoaXMuZG93bmxvYWRNaWRpLFxuXHRcdFx0XHRpbmxpbmVNaWRpRWw6IHRoaXMuaW5saW5lTWlkaSxcblx0XHRcdFx0ZW5ncmF2aW5nRWw6IHRoaXMuZGl2XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0d2luZG93LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXHR9XG5cdGlmICh0aGlzLnN5bnRoKSB7XG5cdFx0aWYgKCF0aGlzLnN5bnRoLnN5bnRoQ29udHJvbCkge1xuXHRcdFx0dGhpcy5zeW50aC5zeW50aENvbnRyb2wgPSBuZXcgU3ludGhDb250cm9sbGVyKCk7XG5cdFx0XHR0aGlzLnN5bnRoLnN5bnRoQ29udHJvbC5sb2FkKHRoaXMuc3ludGguZWwsIHRoaXMuc3ludGguY3Vyc29yQ29udHJvbCwgdGhpcy5zeW50aC5vcHRpb25zKTtcblx0XHR9XG5cdFx0dGhpcy5zeW50aC5zeW50aENvbnRyb2wuc2V0VHVuZSh0aGlzLnR1bmVzWzBdLCBmYWxzZSk7XG5cdH1cbn07XG5cbkVkaXRvci5wcm90b3R5cGUubW9kZWxDaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLnR1bmVzID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodGhpcy5kb3dubG9hZE1pZGkgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLmRvd25sb2FkTWlkaS5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGlmICh0aGlzLmlubGluZU1pZGkgIT09IHVuZGVmaW5lZClcblx0XHR0aGlzLmlubGluZU1pZGkuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB0aGlzLmRpdi5pbm5lckhUTUwgPSBcIlwiO1xuXHRyZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5iUmVlbnRyeSlcbiAgICByZXR1cm47IC8vIFRPRE8gaXMgdGhpcyBsaWtlbHk/IG1heWJlLCBpZiB3ZSByZXdyaXRlIGFiYyBpbW1lZGlhdGVseSB3LyBhYmMyYWJjXG4gIHRoaXMuYlJlZW50cnkgPSB0cnVlO1xuICB0aGlzLnRpbWVySWQgPSBudWxsO1xuICB0aGlzLmRpdi5pbm5lckhUTUwgPSBcIlwiO1xuICB0aGlzLmVuZ3JhdmVyX2NvbnRyb2xsZXIgPSBuZXcgRW5ncmF2ZXJDb250cm9sbGVyKHRoaXMuZGl2LCB0aGlzLmFiY2pzUGFyYW1zKTtcbiAgdGhpcy5lbmdyYXZlcl9jb250cm9sbGVyLmVuZ3JhdmVBQkModGhpcy50dW5lcyk7XG5cdHRoaXMudHVuZXNbMF0uZW5ncmF2ZXIgPSB0aGlzLmVuZ3JhdmVyX2NvbnRyb2xsZXI7XHQvLyBUT0RPLVBFUjogV2UgYWN0dWFsbHkgd2FudCBhbiBvdXRwdXQgb2JqZWN0IGZvciBlYWNoIHR1bmUsIG5vdCB0aGUgZW50aXJlIGNvbnRyb2xsZXIuIFdoZW4gcmVmYWN0b3JpbmcsIGRvbid0IHNhdmUgZGF0YSBpbiB0aGUgY29udHJvbGxlci5cblx0dGhpcy5yZWRyYXdNaWRpKCk7XG5cbiAgaWYgKHRoaXMud2FybmluZ3NkaXYpIHtcbiAgICB0aGlzLndhcm5pbmdzZGl2LmlubmVySFRNTCA9ICh0aGlzLndhcm5pbmdzKSA/IHRoaXMud2FybmluZ3Muam9pbihcIjxiciAvPlwiKSA6IFwiTm8gZXJyb3JzXCI7XG4gIH1cbiAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgdmFyIHRleHRwcmludGVyID0gbmV3IFRleHRQcmludGVyKHRoaXMudGFyZ2V0LCB0cnVlKTtcbiAgICB0ZXh0cHJpbnRlci5wcmludEFCQyh0aGlzLnR1bmVzWzBdKTsgLy9UT0RPIGhhbmRsZSBtdWx0aXBsZSB0dW5lc1xuICB9XG4gIHRoaXMuZW5ncmF2ZXJfY29udHJvbGxlci5hZGRTZWxlY3RMaXN0ZW5lcih0aGlzLmhpZ2hsaWdodC5iaW5kKHRoaXMpKTtcbiAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTtcbiAgdGhpcy5iUmVlbnRyeSA9IGZhbHNlO1xufTtcblxuLy8gQ2FsbCB0aGlzIHRvIHJlcGFyc2UgaW4gcmVzcG9uc2UgdG8gdGhlIHByaW50aW5nIHBhcmFtZXRlcnMgY2hhbmdpbmdcbkVkaXRvci5wcm90b3R5cGUucGFyYW1DaGFuZ2VkID0gZnVuY3Rpb24oZW5ncmF2ZXJQYXJhbXMpIHtcblx0aWYgKGVuZ3JhdmVyUGFyYW1zKSB7XG5cdFx0Zm9yICh2YXIga2V5IGluIGVuZ3JhdmVyUGFyYW1zKSB7XG5cdFx0XHRpZiAoZW5ncmF2ZXJQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHR0aGlzLmFiY2pzUGFyYW1zW2tleV0gPSBlbmdyYXZlclBhcmFtc1trZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aGlzLm9sZHQgPSBcIlwiO1xuXHR0aGlzLmZpcmVDaGFuZ2VkKCk7XG59O1xuXG4vLyByZXR1cm4gdHJ1ZSBpZiB0aGUgbW9kZWwgaGFzIGNoYW5nZWRcbkVkaXRvci5wcm90b3R5cGUucGFyc2VBQkMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSB0aGlzLmVkaXRhcmVhLmdldFN0cmluZygpO1xuICBpZiAodD09PXRoaXMub2xkdCkge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdGhpcy5vbGR0ID0gdDtcbiAgaWYgKHQgPT09IFwiXCIpIHtcblx0dGhpcy50dW5lcyA9IHVuZGVmaW5lZDtcblx0dGhpcy53YXJuaW5ncyA9IFwiXCI7XG5cdHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB0dW5lYm9vayA9IG5ldyBUdW5lQm9vayh0KTtcblxuICB0aGlzLnR1bmVzID0gW107XG4gIHRoaXMuc3RhcnRQb3MgPSBbXTtcbiAgdGhpcy53YXJuaW5ncyA9IFtdO1xuICBmb3IgKHZhciBpPTA7IGk8dHVuZWJvb2sudHVuZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYWJjUGFyc2VyID0gbmV3IFBhcnNlKCk7XG4gICAgYWJjUGFyc2VyLnBhcnNlKHR1bmVib29rLnR1bmVzW2ldLmFiYywgdGhpcy5hYmNqc1BhcmFtcywgdHVuZWJvb2sudHVuZXNbaV0uc3RhcnRQb3MgLSB0dW5lYm9vay5oZWFkZXIubGVuZ3RoKTtcbiAgICB0aGlzLnR1bmVzW2ldID0gYWJjUGFyc2VyLmdldFR1bmUoKTtcblx0ICB0aGlzLnN0YXJ0UG9zW2ldID0gdHVuZWJvb2sudHVuZXNbaV0uc3RhcnRQb3M7XG4gICAgdmFyIHdhcm5pbmdzID0gYWJjUGFyc2VyLmdldFdhcm5pbmdzKCkgfHwgW107XG4gICAgZm9yICh2YXIgaj0wOyBqPHdhcm5pbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICB0aGlzLndhcm5pbmdzLnB1c2god2FybmluZ3Nbal0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkVkaXRvci5wcm90b3R5cGUudXBkYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzZWxlY3Rpb24gPSB0aGlzLmVkaXRhcmVhLmdldFNlbGVjdGlvbigpO1xuICB0cnkge1xuICAgIHRoaXMuZW5ncmF2ZXJfY29udHJvbGxlci5yYW5nZUhpZ2hsaWdodChzZWxlY3Rpb24uc3RhcnQsIHNlbGVjdGlvbi5lbmQpO1xuICB9IGNhdGNoIChlKSB7fSAvLyBtYXliZSBwcmludGVyIGlzbid0IGRlZmluZWQgeWV0P1xuXHRpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFjaylcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrKHNlbGVjdGlvbi5zdGFydCwgc2VsZWN0aW9uLmVuZCk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLmZpcmVTZWxlY3Rpb25DaGFuZ2VkID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLnNldERpcnR5U3R5bGUgPSBmdW5jdGlvbihpc0RpcnR5KSB7XG5cdGlmICh0aGlzLmluZGljYXRlX2NoYW5nZWQgPT09IHVuZGVmaW5lZClcblx0XHRyZXR1cm47XG4gIHZhciBhZGRDbGFzc05hbWUgPSBmdW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgICB2YXIgaGFzQ2xhc3NOYW1lID0gZnVuY3Rpb24oZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudENsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lO1xuICAgICAgcmV0dXJuIChlbGVtZW50Q2xhc3NOYW1lLmxlbmd0aCA+IDAgJiYgKGVsZW1lbnRDbGFzc05hbWUgPT09IGNsYXNzTmFtZSB8fFxuICAgICAgICBuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc05hbWUgKyBcIihcXFxcc3wkKVwiKS50ZXN0KGVsZW1lbnRDbGFzc05hbWUpKSk7XG4gICAgfTtcblxuICAgIGlmICghaGFzQ2xhc3NOYW1lKGVsZW1lbnQsIGNsYXNzTmFtZSkpXG4gICAgICBlbGVtZW50LmNsYXNzTmFtZSArPSAoZWxlbWVudC5jbGFzc05hbWUgPyAnICcgOiAnJykgKyBjbGFzc05hbWU7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH07XG5cbiAgdmFyIHJlbW92ZUNsYXNzTmFtZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcGFyc2VDb21tb24uc3RyaXAoZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShcbiAgICAgIG5ldyBSZWdFeHAoXCIoXnxcXFxccyspXCIgKyBjbGFzc05hbWUgKyBcIihcXFxccyt8JClcIiksICcgJykpO1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9O1xuXG5cdHZhciByZWFkb25seUNsYXNzID0gJ2FiY190ZXh0YXJlYV9kaXJ0eSc7XG5cdHZhciBlbCA9IHRoaXMuZWRpdGFyZWEuZ2V0RWxlbSgpO1xuXHRpZiAoaXNEaXJ0eSkge1xuXHRcdGFkZENsYXNzTmFtZShlbCwgcmVhZG9ubHlDbGFzcyk7XG5cdH0gZWxzZSB7XG5cdFx0cmVtb3ZlQ2xhc3NOYW1lKGVsLCByZWFkb25seUNsYXNzKTtcbiAgICB9XG59O1xuXG4vLyBjYWxsIHdoZW4gYWJjIHRleHQgaXMgY2hhbmdlZCBhbmQgbmVlZHMgcmUtcGFyc2luZ1xuRWRpdG9yLnByb3RvdHlwZS5maXJlQ2hhbmdlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5iSXNQYXVzZWQpXG4gICAgcmV0dXJuO1xuICBpZiAodGhpcy5wYXJzZUFCQygpKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLnRpbWVySWQpXHQvLyBJZiB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmcsIGNhbmNlbCB0aGUgdXBkYXRlXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcklkKTtcbiAgICB0aGlzLnRpbWVySWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYubW9kZWxDaGFuZ2VkKCk7XG4gICAgfSwgMzAwKTtcdC8vIElzIHRoaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbiByZXNwb25zaXZlbmVzcyBhbmQgbm90IHJlZHJhd2luZyB0b28gbXVjaD9cblx0ICB2YXIgaXNEaXJ0eSA9IHRoaXMuaXNEaXJ0eSgpO1xuXHQgIGlmICh0aGlzLndhc0RpcnR5ICE9PSBpc0RpcnR5KSB7XG5cdFx0ICB0aGlzLndhc0RpcnR5ID0gaXNEaXJ0eTtcblx0XHQgIHRoaXMuc2V0RGlydHlTdHlsZShpc0RpcnR5KTtcblx0ICB9XG5cdCAgaWYgKHRoaXMub25jaGFuZ2VDYWxsYmFjaylcblx0XHQgIHRoaXMub25jaGFuZ2VDYWxsYmFjayh0aGlzKTtcblx0ICB9XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLnNldE5vdERpcnR5ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuZWRpdGFyZWEuaW5pdGlhbFRleHQgPSB0aGlzLmVkaXRhcmVhLmdldFN0cmluZygpO1xuXHR0aGlzLndhc0RpcnR5ID0gZmFsc2U7XG5cdHRoaXMuc2V0RGlydHlTdHlsZShmYWxzZSk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLmlzRGlydHkgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kaWNhdGVfY2hhbmdlZCA9PT0gdW5kZWZpbmVkKVxuXHRcdHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRoaXMuZWRpdGFyZWEuaW5pdGlhbFRleHQgIT09IHRoaXMuZWRpdGFyZWEuZ2V0U3RyaW5nKCk7XG59O1xuXG5FZGl0b3IucHJvdG90eXBlLmhpZ2hsaWdodCA9IGZ1bmN0aW9uKGFiY2VsZW0sIHR1bmVOdW1iZXIsIGNsYXNzZXMpIHtcblx0Ly8gVE9ETy1QRVI6IFRoZSBtYXJrZXIgYXBwZWFycyB0byBnZXQgb2ZmIGJ5IG9uZSBmb3IgZWFjaCB0dW5lIHBhcnNlZC4gSSdtIG5vdCBzdXJlIHdoeSwgYnV0IGFkZGluZyB0aGUgdHVuZU51bWJlciBpbiBjb3JyZWN0cyBpdCBmb3IgdGhlIHRpbWUgYmVpbmcuXG4vL1x0dmFyIG9mZnNldCA9ICh0dW5lTnVtYmVyICE9PSB1bmRlZmluZWQpID8gdGhpcy5zdGFydFBvc1t0dW5lTnVtYmVyXSArIHR1bmVOdW1iZXIgOiAwO1xuXG4gIHRoaXMuZWRpdGFyZWEuc2V0U2VsZWN0aW9uKGFiY2VsZW0uc3RhcnRDaGFyLCBhYmNlbGVtLmVuZENoYXIpO1xuXHRpZiAodGhpcy5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFjaylcblx0XHR0aGlzLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrKGFiY2VsZW0uc3RhcnRDaGFyLCBhYmNlbGVtLmVuZENoYXIpO1xufTtcblxuRWRpdG9yLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKHNob3VsZFBhdXNlKSB7XG5cdHRoaXMuYklzUGF1c2VkID0gc2hvdWxkUGF1c2U7XG5cdGlmICghc2hvdWxkUGF1c2UpXG5cdFx0dGhpcy5maXJlQ2hhbmdlZCgpO1xufTtcblxuRWRpdG9yLnByb3RvdHlwZS5taWxsaXNlY29uZHNQZXJNZWFzdXJlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bnRoLnN5bnRoQ29udHJvbC52aXN1YWxPYmoubWlsbGlzZWNvbmRzUGVyTWVhc3VyZSgpO1xufTtcblxuRWRpdG9yLnByb3RvdHlwZS5wYXVzZU1pZGkgPSBmdW5jdGlvbihzaG91bGRQYXVzZSkge1xuXHR0aGlzLm1pZGlQYXVzZSA9IHNob3VsZFBhdXNlO1xuXHRpZiAoIXNob3VsZFBhdXNlKVxuXHRcdHRoaXMucmVkcmF3TWlkaSgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3I7XG4iLCJ2YXIgdmVyc2lvbiA9IHJlcXVpcmUoJy4vdmVyc2lvbicpO1xudmFyIGFuaW1hdGlvbiA9IHJlcXVpcmUoJy4vc3JjL2FwaS9hYmNfYW5pbWF0aW9uJyk7XG52YXIgdHVuZUJvb2sgPSByZXF1aXJlKCcuL3NyYy9hcGkvYWJjX3R1bmVib29rJyk7XG5cbnZhciBhYmNqcyA9IHt9O1xuXG5hYmNqcy5zaWduYXR1cmUgPSBcImFiY2pzLWJhc2ljIHZcIiArIHZlcnNpb247XG5cbk9iamVjdC5rZXlzKGFuaW1hdGlvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdGFiY2pzW2tleV0gPSBhbmltYXRpb25ba2V5XTtcbn0pO1xuXG5PYmplY3Qua2V5cyh0dW5lQm9vaykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdGFiY2pzW2tleV0gPSB0dW5lQm9va1trZXldO1xufSk7XG5cbmFiY2pzLnJlbmRlckFiYyA9IHJlcXVpcmUoJy4vc3JjL2FwaS9hYmNfdHVuZWJvb2tfc3ZnJyk7XG5hYmNqcy5UaW1pbmdDYWxsYmFja3MgPSByZXF1aXJlKCcuL3NyYy9hcGkvYWJjX3RpbWluZ19jYWxsYmFja3MnKTtcblxudmFyIGdseXBocyA9IHJlcXVpcmUoJy4vc3JjL3dyaXRlL2FiY19nbHlwaHMnKTtcbmFiY2pzLnNldEdseXBoID0gZ2x5cGhzLnNldFN5bWJvbDtcblxudmFyIENyZWF0ZVN5bnRoID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvY3JlYXRlLXN5bnRoJyk7XG52YXIgaW5zdHJ1bWVudEluZGV4VG9OYW1lID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvaW5zdHJ1bWVudC1pbmRleC10by1uYW1lJyk7XG52YXIgcGl0Y2hUb05vdGVOYW1lID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvcGl0Y2gtdG8tbm90ZS1uYW1lJyk7XG52YXIgU3ludGhTZXF1ZW5jZSA9IHJlcXVpcmUoJy4vc3JjL3N5bnRoL3N5bnRoLXNlcXVlbmNlJyk7XG52YXIgQ3JlYXRlU3ludGhDb250cm9sID0gcmVxdWlyZSgnLi9zcmMvc3ludGgvY3JlYXRlLXN5bnRoLWNvbnRyb2wnKTtcbnZhciByZWdpc3RlckF1ZGlvQ29udGV4dCA9IHJlcXVpcmUoJy4vc3JjL3N5bnRoL3JlZ2lzdGVyLWF1ZGlvLWNvbnRleHQnKTtcbnZhciBhY3RpdmVBdWRpb0NvbnRleHQgPSByZXF1aXJlKCcuL3NyYy9zeW50aC9hY3RpdmUtYXVkaW8tY29udGV4dCcpO1xudmFyIHN1cHBvcnRzQXVkaW8gPSByZXF1aXJlKCcuL3NyYy9zeW50aC9zdXBwb3J0cy1hdWRpbycpO1xudmFyIHBsYXlFdmVudCA9IHJlcXVpcmUoJy4vc3JjL3N5bnRoL3BsYXktZXZlbnQnKTtcbnZhciBTeW50aENvbnRyb2xsZXIgPSByZXF1aXJlKCcuL3NyYy9zeW50aC9zeW50aC1jb250cm9sbGVyJyk7XG5cbmFiY2pzLnN5bnRoID0ge1xuXHRDcmVhdGVTeW50aDogQ3JlYXRlU3ludGgsXG5cdGluc3RydW1lbnRJbmRleFRvTmFtZTogaW5zdHJ1bWVudEluZGV4VG9OYW1lLFxuXHRwaXRjaFRvTm90ZU5hbWU6IHBpdGNoVG9Ob3RlTmFtZSxcblx0U3ludGhDb250cm9sbGVyOiBTeW50aENvbnRyb2xsZXIsXG5cdFN5bnRoU2VxdWVuY2U6IFN5bnRoU2VxdWVuY2UsXG5cdENyZWF0ZVN5bnRoQ29udHJvbDogQ3JlYXRlU3ludGhDb250cm9sLFxuXHRyZWdpc3RlckF1ZGlvQ29udGV4dDogcmVnaXN0ZXJBdWRpb0NvbnRleHQsXG5cdGFjdGl2ZUF1ZGlvQ29udGV4dDogYWN0aXZlQXVkaW9Db250ZXh0LFxuXHRzdXBwb3J0c0F1ZGlvOiBzdXBwb3J0c0F1ZGlvLFxuXHRwbGF5RXZlbnQ6IHBsYXlFdmVudFxufTtcblxudmFyIGVkaXRvciA9IHJlcXVpcmUoJy4vc3JjL2VkaXQvYWJjX2VkaXRvcicpO1xuYWJjanNbJ0VkaXRvciddID0gZWRpdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGFiY2pzO1xuIiwiaW1wb3J0IHsgQXBwLCBNYXJrZG93blBvc3RQcm9jZXNzb3IsIE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLCBNYXJrZG93blJlbmRlcmVyLCBNb2RhbCwgTm90aWNlLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IHNpZ25hdHVyZSwgcmVuZGVyQWJjIH0gZnJvbSAnYWJjanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVzaWNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xyXG5cdHN0YXRpYyBwb3N0cHJvY2Vzc29yOiBNYXJrZG93blBvc3RQcm9jZXNzb3IgPSAoZWw6IEhUTUxFbGVtZW50LCBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQpID0+IHtcclxuXHRcdC8vIEFzc3VtcHRpb246IE9uZSBzZWN0aW9uIGFsd2F5cyBjb250YWlucyBvbmx5IHRoZSBjb2RlIGJsb2NrXHJcblxyXG5cdFx0Y29uc3QgYmxvY2tUb1JlcGxhY2UgPSBlbC5xdWVyeVNlbGVjdG9yKCdwcmUnKVxyXG5cdFx0aWYgKCFibG9ja1RvUmVwbGFjZSkgcmV0dXJuXHJcblxyXG5cdFx0Y29uc3QgbXVzaWNCbG9jayA9IGJsb2NrVG9SZXBsYWNlLnF1ZXJ5U2VsZWN0b3IoJ2NvZGUubGFuZ3VhZ2UtbXVzaWMtYWJjJylcclxuXHRcdGlmICghbXVzaWNCbG9jaykgcmV0dXJuXHJcblxyXG5cdFx0Y29uc3Qgc291cmNlID0gbXVzaWNCbG9jay50ZXh0Q29udGVudFxyXG5cdFx0Y29uc3QgZGVzdGluYXRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG5cdFx0cmVuZGVyQWJjKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHtcclxuXHRcdFx0YWRkX2NsYXNzZXM6IHRydWUsXHJcblx0XHRcdHJlc3BvbnNpdmU6ICdyZXNpemUnXHJcblx0XHR9KVxyXG5cclxuXHRcdGVsLnJlcGxhY2VDaGlsZChkZXN0aW5hdGlvbiwgYmxvY2tUb1JlcGxhY2UpXHJcblx0fVxyXG5cclxuXHRvbmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygnbG9hZGluZyBhYmNqcyBwbHVnaW4nKTtcclxuXHRcdE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnJlZ2lzdGVyUG9zdFByb2Nlc3NvcihNdXNpY1BsdWdpbi5wb3N0cHJvY2Vzc29yKVxyXG5cdH1cclxuXHJcblx0b251bmxvYWQoKSB7XHJcblx0XHRjb25zb2xlLmxvZygndW5sb2FkaW5nIGFiY2pzIHBsdWdpbicpO1xyXG5cdFx0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXIudW5yZWdpc3RlclBvc3RQcm9jZXNzb3IoTXVzaWNQbHVnaW4ucG9zdHByb2Nlc3NvcilcclxuXHR9XHJcbn1cclxuIl0sIm5hbWVzIjpbIlRpbWluZ0NhbGxiYWNrcyIsInBhcnNlQ29tbW9uIiwidHJhbnNwb3NlIiwicGFyc2VEaXJlY3RpdmUiLCJwYXJzZUtleVZvaWNlIiwic3BhY2luZyIsIlR1bmUiLCJUb2tlbml6ZXIiLCJQYXJzZUhlYWRlciIsIndyYXAiLCJQYXJzZSIsIlJlbGF0aXZlRWxlbWVudCIsIkFic29sdXRlRWxlbWVudCIsImdseXBocyIsInNwcmludGYiLCJUaWVFbGVtIiwiRHluYW1pY0RlY29yYXRpb24iLCJDcmVzY2VuZG9FbGVtIiwiRGVjb3JhdGlvbiIsIlN0YWZmR3JvdXBFbGVtZW50IiwiVm9pY2VFbGVtZW50IiwiY3JlYXRlQ2xlZiIsImNyZWF0ZUtleVNpZ25hdHVyZSIsImNyZWF0ZVRpbWVTaWduYXR1cmUiLCJCcmFjZUVsZW0iLCJFbmRpbmdFbGVtIiwiVGVtcG9FbGVtZW50IiwiQmVhbUVsZW0iLCJUcmlwbGV0RWxlbSIsIlN2ZyIsInJlcXVpcmUkJDAiLCJSZW5kZXJlciIsIkFic3RyYWN0RW5ncmF2ZXIiLCJFbmdyYXZlckNvbnRyb2xsZXIiLCJ0dW5lYm9vayIsInNvdW5kc0NhY2hlIiwiaW5zdHJ1bWVudEluZGV4VG9OYW1lIiwiYWN0aXZlQXVkaW9Db250ZXh0IiwicmVnaXN0ZXJBdWRpb0NvbnRleHQiLCJzZXF1ZW5jZSIsImZsYXR0ZW4iLCJwaXRjaFRvTm90ZU5hbWUiLCJnZXROb3RlIiwiY3JlYXRlTm90ZU1hcCIsImRvd25sb2FkQnVmZmVyIiwic3VwcG9ydHNBdWRpbyIsIlN5bnRoU2VxdWVuY2UiLCJDcmVhdGVTeW50aCIsIkNyZWF0ZVN5bnRoQ29udHJvbCIsIlN5bnRoQ29udHJvbGxlciIsIlRleHRQcmludGVyIiwidmVyc2lvbiIsImFuaW1hdGlvbiIsInR1bmVCb29rIiwicmVxdWlyZSQkMSIsInBsYXlFdmVudCIsImVkaXRvciIsIk1hcmtkb3duUHJldmlld1JlbmRlcmVyIiwicmVuZGVyQWJjIiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUks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SSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNuSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUM5SCxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNoSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNqSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxN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SSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQ3JDO0FBQ0EsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ25GLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDL0MsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3pELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9ELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMvQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUN0SCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQy9DLElBQUksSUFBSSxDQUFD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QUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEYsU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RixTQUFTLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdkUsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEY7QUFDQSxLQUFLLE9BQU8sQ0FBQyxPQUFP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QUFHLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksUUFBUSxHQUFHO0FBQ2YsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNQLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDUixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNQLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDUixDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNQLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDUCxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNSLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDUCxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNSLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDUCxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ1QsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUNULENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDUixDQUFDLENBQUM7QUFDRixJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0UsSUFBSSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsY0FBYyxFQUFFO0FBQzNGLENBQUMsSUFBSSxDQUFDLGNB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QUUsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFO0FBQ2hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsTUFBTTtBQUNULEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEdBQUc7QUFDSCxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN0QyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxFQUFFLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMxQixJQUFJLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELElBQUksUUFBUSxJQUFJLGVB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QztBQUM1QyxFQUFFLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUMsRUFBRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyxFQUFFLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUM7QUFDQSxFQUFFLElBQUksSUFBSSxHQUFHO0FBQ2IsR0FBRyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDeEYsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekYsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0YsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDM0Y7QUFDQSxHQUFHLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQzdFLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDOUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNoRixHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hGLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDaEYsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUMvRSxHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hGO0FBQ0EsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2pFLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNuRSxHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDckUsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3JFLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNyRSxHQUFHLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDcEUsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ3JFO0FBQ0EsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDdEQsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDeEQsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekQsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDMUQsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDMUQsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekQsR0FBRyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDMUQ7QUFDQSxHQUFHLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQzNDLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDN0MsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUM5QyxHQUFHLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQzlDLEdBQUcsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDL0MsR0FBRyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUM5QyxHQUFHLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQy9DO0FBQ0EsR0FBRyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFO0FBQ2hDLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUNqQyxHQUFHLE1BQU0sRUFBRSxFQUFFLFNBQVMs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UUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxHQUFHLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNyRCxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxHQUFHLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNyRDtBQUNBLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUM3RCxHQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDOUQsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ2hFLEdBQUcsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNoRSxHQUFHLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDL0QsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ2hFLEdBQUcsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUMvRDtBQUNBLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDdkUsR0FBRyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUN4RSxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDMUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUMxRSxHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQzFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDekU7QUFDQSxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNqRixHQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNsRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRixHQUFHLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDL0IsR0FBRyxJQUFJLEVBQUUsRUFBRTtBQUNYLEdBQUcsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDekMsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUU7QUFDckIsR0FBRyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7QUFDbkQsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUU7QUFDekYsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLE9BQU9DLGFBQVMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN6RixFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxTQUFTLEdBQUc7QUFDakIsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNoRCxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDcEQsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNwRCxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDakQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNqRCxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDbEQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2xELEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNuRCxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQzVDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xELEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRCxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pELEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5QyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUMvQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDL0MsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQy9DLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUMvQyxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzdDLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5QyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDOUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlDLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUM5QyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2pELEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNqRCxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDakQsRUFBRSxRQUFRLEVBQUUs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QUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDM0MsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLE1BQU07QUFDN0MsTUFBTTtBQUNOLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RSxPQUFPLE1BQU07QUFDYixNQUFNO0FBQ04sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzNELE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLE1BQU07QUFDTixLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUNySyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCLE1BQU07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QUFFLFFBQVEsVUFBVTtBQUNwQixHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1RCxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxHQUFHLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekQsR0FBRyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELEdBQUcsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEdB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QUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQztBQUNiLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssR0FBRztBQUNaLEtBQUssSUFBSSxJQUFJLEtBQUssU0FBUztBQUMzQixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlELEtBQUssSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FBQ3JDLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELEtBQUssTUFBTTtBQUNYLElBQUk7QUFDSixLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSwyQkFBMkIsR0FBRyxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRyxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixFQUFFLENBQUM7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDdkMsRUFBRSxJQUFJLGNBQWMsR0FBRztBQUN2QixHQUFHLEdBQUcsRUFBRSxPQUFPO0FBQ2YsR0FBRyxJQUFJLEVBQUUsVUFBVTtBQUNuQixHQUFHLEdBQUcsRUFBRSxTQUFTO0FBQ2pCLEdBQUcsR0FBRyxFQUFFLE1BQU07QUFDZCxHQUFHLElBQUksRUFBRSxTQUFTO0FBQ2xCLEdBQUcsSUFBSSxFQUFFLGFBQWE7QUFDdEIsR0FBRyxJQUFJLEVBQUUsY0FBYztBQUN2QixHQUFHLENBQUM7QUFDSixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQixFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ1osR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNaLEdBQUcsS0FBSyxHQUFHO0FBQ1gsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU07QUFDVixHQUFHLFFBQVEsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN0QixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ2hFLEVBQUUsUUFBUSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN2QjtBQUNBLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ1osR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNaLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ1osR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNaLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ1osR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNaLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ1osR0FBRyxLQUFLLEdBQUcsQ0FBQztBQUNaLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLEtBQUssR0FBRztBQUNYLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDWixHQUFHLEtBQUssR0FBRyxDQUFDO0FBQ1osR0FBRyxLQUFLLEdBQUc7QUFDWCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEIsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUscUNBQXFDLENBQUMsQ0FBQztBQUNsRSxJQUFJLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ2QsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUNkLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDZCxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ2QsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUNkLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDZCxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ2QsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUNkLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDZCxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ2QsS0FBSyxLQUFLLEdBQUcsQ0FBQztBQUNkLEtBQUssS0FBSyxHQUFHLENBQUM7QUFDZCxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ2QsS0FBSyxLQUFLLEdBQUc7QUFDYixNQUFNLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixLQUFLO0FBQ0wsTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUscUNBQXFDLENBQUMsQ0FBQztBQUNuRSxLQUFLO0FBQ0wsSUFBSSxNQUFNO0FBQ1YsR0FBRztBQUNILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxDQUFDLENBQUM7QUFDakUsR0FBRztBQUNILEVBQUUsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsRUFBRSxFQUFFO0FBQ2xDLEVBQUUsT0FBTyxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNwRCxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzNDO0FBQ0E7QUFDQSxFQUFFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLEVBQUUsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxHQUFHO0FBQ25DLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQztBQUNqQixFQUFFLE9BQU8sS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQztBQUNwSCxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ1gsRUFBRSxPQUFPLEtBQUssR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUM7QUFDcEgsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNULEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxJQUFJLFFBQVEsR0FBRyxTQUFTLEVBQUUsRUFBRTtBQUM3QixFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7QUFDOUQsRUFBRSxDQUFDO0FBQ0g7QUFDQSxDQUFDLElBQUksUUFBUSxHQUFHLFNBQVMsRUFBRSxFQUFFO0FBQzdCLEVBQUUsUUFBUSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLEVBQUU7QUFDbEMsRUFBRSxDQUFDO0FBQ0g7QUFDQSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxvQkFBb0IsRUFBRTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLEVBQUUsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDcEIsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNoQixFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ1IsRUFBRSxPQUFPLEtBQUssR0FBRyxHQUFHLEVBQUU7QUFDdEIsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ25DLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQzVDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxJQUFJLG9CQUFvQjtBQUM1QixLQUFLLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9EO0FBQ0EsS0FBSyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNyRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ILElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDeEUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUosSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixJQUFJLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0QixJQUFJLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BELElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM5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RyxDQUFDLENBQUM7QUFDZCxHQUFHLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRztBQUNwRixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFELEdBQUc7QUFDSCxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxPQUFPLEdBQUc7QUFDZixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQy9HLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN6RixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQzlFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN6RixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNwRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQy9HLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN6RixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNwRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDekYsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDcEcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQ3ZELEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDOUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHO0FBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUN0QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUc7QUFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUM1QyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNwRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztBQUNqQztBQUNBO0FBQ0EsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxJQUFJLFFBQVEsR0FBRztBQUNoQixFQUFFLEdBQUcsRUFBRSxHQUFHO0FBQ1YsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUNWLEVBQUUsR0FBRyxFQUFFLEdBQUc7QUFDVixFQUFFLENBQUM7QUFDSCxDQUFDLElBQUksUUFBUSxHQUFHO0FBQ2hCLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFDWixFQUFFLEtBQUssRUFBRSxHQUFHO0FBQ1osRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNaLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFDWixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNoSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNoSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNwSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNuSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNsSixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRztBQUNqSixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUc7QUFDdEksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN2SSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDdEMsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNuQyxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFQSxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsRUFBRTtBQUNwQyxHQUFHLElBQUksR0FBRyxLQUFLLElBQUk7QUFDbkIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ1osUUFBUTtBQUNSLElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxTQUFTO0FBQ3ZCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVCxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxLQUFLLElBQUksQ0FBQyxLQUFLLFNBQVM7QUFDeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsVUFBVTtBQUNWLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLEtBQUssU0FBUztBQUN6QixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQztBQUNBLE9BQU8sR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTTtBQUNOLEtBQUs7QUFDTCxJQUFJO0FBQ0osR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN4QyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM5QixHQUFHLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU07QUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTTtBQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzFDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU07QUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTTtBQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzFDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU07QUFDMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTTtBQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNO0FBQzFDLElBQUk7QUFDSixLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyQyxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMxQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2xDLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztBQUNqQixHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDbEMsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNYLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNuQyxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEdBQUc7QUFDdkMsS0FBSyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTTtBQUNWLElBQUksSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxLQUFLO0FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN0QixLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkIsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUNsQyxFQUFFLElBQUlBLFVBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztBQUN4QyxHQUFHLE9BQU8sTUFBTSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsRUFBRSxJQUFJQSxVQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7QUFDdEMsR0FBRyxPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUNuQyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ1osR0FBRyxPQUFPQSxVQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsRUFBRSxPQUFPQSxVQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLEVBQUUsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxFQUFFO0FBQzdCO0FBQ0E7QUFDQSxFQUFFLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNkLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QixFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsRUFBRSxDQUFDO0FBQ0g7QUFDQSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDL0I7QUFDQTtBQUNBLEVBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2QsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqQixFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLE1BQU0sRUFBRTtBQUN4QyxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM5QyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNmLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxFQUFFO0FBQy9CLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNiLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDVixHQUFHO0FBQ0gsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDM0QsRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztBQUM5QixFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3BFLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3pCLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUN2QixHQUFHLElBQUksRUFBRSxDQUFDO0FBQ1YsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN4RSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDcEMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZCLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM5QixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUMzRSxJQUFJO0FBQ0osR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLEdBQUc7QUFDSCxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUs7QUFDakIsR0FBRyxLQUFLLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQzlELEdBQUcsS0FBSyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3RFLEdBQUcsS0FBSyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDakUsR0FBRyxTQUFTLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDN0UsR0FBRztBQUVILEVBQUUsQ0FBQztBQUNILENBQUMsSUFBSSxZQUFZLEdBQUcsU0FBUyxHQUFHO0FBQ2hDLENBQUM7QUFDRCxFQUFFLFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsRUFBRTtBQUNGLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSCxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxVQUFVO0FBQzFFLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsRUFBRSxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDaEUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNULEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7QUFDcEMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsRUFBRTtBQUNGLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDekIsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25FLEdBQUc7QUFDSCxFQUFFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFDRjtBQUNBLGlCQUFjLEdBQUcsU0FBUzs7QUNsdkIxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDckMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7QUFDM0MsRUFBRSxPQUFPO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsQ0FBQyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDdkIsQ0FBQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdEIsQ0FBQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDeEIsQ0FBQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDeEIsQ0FBQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQyxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDckIsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUMzQjtBQUNBLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMs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LEVBQUUsRUFBRTtBQUN6QyxFQUFFLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsRUFBRSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEdBQUcsUUFBUSxFQUFFO0FBQ3ZDLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7QUFDbkMsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLEdBQUc7QUFDSCxFQUFFO0FBQ0YsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ2pJLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRixDQUFDLElBQUksZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUM3SCxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3ZHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFVBQVU7QUFDN0MsRUFBRSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNqSCxDQUFDLElBQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsR0FBRyxD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VyxFQUFFO0FBQ3RDLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDckIsUUFBUTtBQUNSO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkIsT0FBTyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDNUMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsT0FBTyxNQUFNO0FBQ2IsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsT0FBTztBQUNQ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QUFFO0FBQ25GLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ25CO0FBQ0E7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUNyRixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO0FBQzNEO0FBQ0E7QUFDQSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUN6QixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUMxQyxJQUFJLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztBQUN2QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxNQUFNO0FBQ1osTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakUsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTO0FBQ3pELFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM5QztBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDaEYsT0FBTztBQUNQLE1BQU07QUFDTixLQUFLO0FBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDMUIsS0FBSyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUUsSUFBSSxVQUFVLEVBQUU7QUFDbEIsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHQSxVQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxHQUFHQSxVQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUU7QUFDL0MsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLO0FBQ2xCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBR0EsVUFBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsSUFBSSxDQUFDLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsSUFBSSxZQUFZLEVBQUU7QUFDcEIsR0FBRyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFO0FBQ3BEO0FBQ0EsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRUFBRSxJQUFJLFdBQVcsRUFBRTtBQUNuQixHQUFHLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDdEIsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDM0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RCxNQUFNLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRSxPQUFPLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3ZFLFFBQVEsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN4QixRQUFRO0FBQ1IsT0FBTztBQUNQLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNyQixPQUFPLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDekIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsT0FBTztBQUNQLE1BQU07QUFDTixLQUFLO0FBQ0wsSUFBSTtBQUNKLEdBQUcsSUFBSSxVQUFVLEVBQUU7QUFDbkIsSUFBSUEsVUFBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsSUFBSSxFQUFFO0FBQ2hELEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSztBQUNuQixNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUdBLFVBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25ELEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtBQUM1QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtBQUNuRCxNQUFNLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0FBQ2hELElBQUk7QUFDSixHQUFHO0FBQ0g7QUFDQTtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7QUFDakM7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0FBQ3BDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDVDtBQUNBO0FBQ0EsR0FBRyxJQUFJLFVBQVUsR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQ2pELElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzFDO0FBQ0EsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDckMsT0FBTyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE9BQU8sTUFBTTtBQUNiLE9BQU87QUFDUCxNQUFNO0FBQ04sS0FBSyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDM0MsTUFBTSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNQSxVQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakYsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxNQUFNO0FBQ04sS0FBSztBQUNMLElBQUksSUFBSSxPQUFPLENBQUM7QUFDaEIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLEtBQUssT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4QyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUM7QUFDdkMsS0FBSyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvQixJQUFJLE9BQU8sT0FBTyxDQUFDO0FBQ25CLElBQUksQ0FBQztBQUNMO0FBQ0EsR0FBRyxJQUFJLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUM3RCxJQUFJLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLElBQUksSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQzFDLEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixLQUFLO0FBQ0wsSUFBSSxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEMsS0FBSyxJQUFJLFFBQVEsRUFBRTtBQUNuQixNQUFNQSxVQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRixNQUFNQSxVQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRixNQUFNQSxVQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRixNQUFNO0FBQ04sS0FBS0EsVUFBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekYsS0FBS0EsVUFBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekY7QUFDQSxLQUFLLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsS0FBSyxPQUFPLEVBQUUsQ0FBQztBQUNmLEtBQUs7QUFDTCxJQUFJLENBQUM7QUFDTDtBQUNBLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7QUFDL0IsS0FBSyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7QUFDeEIsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsT0FBTyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO0FB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QUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFO0FBQ3RDO0FBQ0EsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUMvRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEdBQUdBLFVBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ILElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUdBLFVBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pILElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztBQUMvQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHQSxVQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUztBQUNoTSxHQUFHLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlFLE9BQU8sT0FBTyxJQUFJLENBQUM7QUFDbkIsRUFBRSxDQUFDO0FBQ0g7QUFDQSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxRQUFRLEVBQUUsUUFBUSxFQUFFO0FBQ3JELEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDM0IsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUMzQixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5QyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUss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VUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsR0FBRyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQ3RDLEdBQUcsSUFBSSxHQUFHLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEdBQUdJLFdBQU8sQ0FBQyxJQUFJLENBQUM7QUFDckQsR0FBRyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDakMsR0FBRyxJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBR0EsV0FBTyxDQUFDLElBQUksQ0FBQztBQUMxRCxHQUFHLElBQUksTUFBTSxHQUFHLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDN0I7QUFDQSxHQUFHLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDN0IsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxJQUFJLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMxQixJQUFJLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QixJQUFJLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDdEMsSUFBSSxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUN2RCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FB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QUFDRCxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzVCLEVBQUU7QUFDRixHQUFHLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEIsSUFBSSxJQUFJLENBQUMsMERBQTBELEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakYsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDdkIsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNqRixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QixJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2pGLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDakY7QUFDQSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO0FB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QUFDakQsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQztBQUNBLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RCxFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxRQUFRLEdBQUc7QUFDaEIsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUM7QUFDSCxDQUFDLElBQUksaUNBQWlDLElBQUksU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQzVEO0FBQ0E7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNmLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzRSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDL0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDbkYsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUztBQUNsQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsVUFBVTtBQUNWLE1BQU0sR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0MsTUFBTSxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsTUFBTSxHQUFHLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbEMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDMUQ7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN2RixTQUFTLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQixTQUFTO0FBQ1QsU0FBUyxJQUFJLENBQUMsNkVBQTZFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLFFBQVEsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDN0YsUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5QyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMzRCxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN4RixVQUFVLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixVQUFVO0FBQ1YsU0FBUyxNQUFNO0FBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hCLFNBQVM7QUFDVCxRQUFRO0FBQ1IsUUFBUSxJQUFJLENBQUMsd0RBQXdELEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLE9BQU87QUFDUCxNQUFNO0FBQ04sS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUNULEtBQUs7QUFDTCxTQUFTO0FBQ1QsS0FBSyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUztBQUNwQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEIsS0FBSztBQUNMLElBQUk7QUFDSixHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ1AsR0FBRztBQUNILEVBQUUsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3pCLEVBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxRQUFRLEdBQUcsU0FBUyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ3RDLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDekYsRUFBRSxLQUFLLEdBQUdBLFVBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkMsRUFBRSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzFDLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDdkIsRUFBRSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDckI7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixFQUFFLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN0QixFQUFFLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFO0FBQzVCLEdBQUcsSUFBSSxJQUFJLEdBQUdBLFVBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN4QixJQUFJLElBQUksT0FBTztBQUNmLEtBQUssSUFBSSxHQUFHQSxVQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHO0FBQ2xDLEtBQUssR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNwQixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLElBQUk7QUFDSixHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQ2hCLEdBQUcsQ0FBQztBQUNKLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsR0FBRyxRQUFRLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzFCLElBQUksS0FBSyxHQUFHLENBQUM7QUFDYixJQUFJLEtBQUssTUFBTTtBQUNmLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEtBQUssTUFBTTtBQUNYLElBQUksS0FBSyxHQUFHO0FBQ1osS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzlDLE1BQU1BLFVBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNoRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9DLE1BQU07QUFDTixLQUFLLE1BQU07QUFDWCxJQUFJLEtBQUssR0FBRztBQUNaLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUMsS0FBSyxNQUFNO0FBQ1gsSUFBSSxLQUFLLEdBQUc7QUFDWixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLElBQUksS0FBSyxHQUFHO0FBQ1osS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3QyxLQUFLLE1BQU07QUFDWCxJQUFJLEtBQUssR0FBRztBQUNaLEtBQUssT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwQixLQUFLLE1BQU07QUFDWCxJQUFJO0FBQ0osR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDckIsRUFBRUEsVUFBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDdEMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO0FBQzNCLEtBQUssUUFBUSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtBQUN6RyxNQUFNLEtBQUssTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtBQUM5RixNQUFNLEtBQUssS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTTtBQUNyRSxNQUFNO0FBQ04sS0FBSyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFO0FBQy9CLE1BQU0sSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVM7QUFDaEMsT0FBTyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsTUFBTTtBQUNOLEtBQUssTUFBTTtBQUNYLEtBQUssSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNwRSxNQUFNLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLFFBQVE7QUFDeEIsT0FBTyxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RCxNQUFNLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTO0FBQ2hDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzVCO0FBQ0EsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixNQUFNO0FBQ04sS0FBSztBQUNMLElBQUk7QUFDSixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxJQUFJLFVBQVUsR0FBRyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDeEM7QUFDQSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsa0RBQWtELEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQzNGLEVBQUUsS0FBSyxHQUFHQSxVQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRztBQUMxQyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsRUFBRSxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsRUFBRSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDdEIsRUFBRSxJQUFJLE9BQU8sR0FBRyxTQUFTLENBQUMsRUFBRTtBQUM1QixHQUFHLElBQUksSUFBSSxHQUFHQSxVQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDeEIsSUFBSSxJQUFJLE9BQU87QUFDZixLQUFLLElBQUksR0FBR0EsVUFBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRztBQUNsQyxLQUFLLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RSxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixJQUFJO0FBQ0osR0FBRyxPQUFPLEtBQUssQ0FBQztBQUNoQixHQUFHLENBQUM7QUFDSixFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLEdBQUcsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMxQixJQUFJLEtBQUssR0FBRyxDQUFDO0FBQ2IsSUFBSSxLQUFLLE1BQU07QUFDZixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixLQUFLLE1BQU07QUFDWCxJQUFJLEtBQUssR0FBRztBQUNaLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM5QyxNQUFNQSxVQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDaEQsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvQyxNQUFNO0FBQ04sS0FBSyxNQUFNO0FBQ1gsSUFBSSxLQUFLLEdBQUc7QUFDWixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLElBQUksS0FBSyxHQUFHO0FBQ1osS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5QyxLQUFLLE1BQU07QUFDWCxJQUFJLEtBQUssR0FBRztBQUNaLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0MsS0FBSyxNQUFNO0FBQ1gsSUFBSSxLQUFLLEdBQUc7QUFDWixLQUFLLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDcEIsS0FBSyxNQUFNO0FBQ1gsSUFBSTtBQUNKLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLEVBQUVBLFVBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ3RDLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQixJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtBQUMzQixLQUFLLFFBQVEsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDekcsTUFBTSxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDOUYsTUFBTSxLQUFLLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU07QUFDckUsTUFBTTtBQUNOLEtBQUssTUFBTTtBQUNYLEtBQUssSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNwRSxNQUFNLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxNQUFNLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTO0FBQ2hDLE9BQU8sRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzVCO0FBQ0EsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixNQUFNO0FBQ04sS0FBSztBQUNMLElBQUk7QUFDSixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsQ0FBQztBQUNIO0FBQ0EsQ0FBQyxJQUFJLGVBQWUsR0FBRyxTQUFTLElBQUksRUFBRSxLQUFLLEVBQUU7QUFDN0MsRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzVCLEdBQUcsS0FBSyxHQUFHO0FBQ1gsR0FBRyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzlELEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLEdBQUcsS0FBSyxHQUFHO0FBQ1gsR0FBRyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHO0FBQzlELEtBQUssT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUI7QUFDQSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLEdBQUc7QUFDSCxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsRUFBRSxDQUFDO0FBQ0g7QUFDQTtBQUNBLENBQUMsSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFFLEVBQUU7QUFDL0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSTtBQUNyRCxHQUFHLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixFQUFFLENBQUM7QUFDSDtBQUNBLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFF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QUFDbEQsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDN0UsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDMUUsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkYsUUFBUSxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDL0UsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDaEYsUUFBUSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUM7QUFDNUUsUUFBUSxNQUFNO0FBQ2QsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNsRSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNwRSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hFLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzFFLFFBQVEsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDO0FBQ3RFLFFBQVE7QUFDUjtBQUNBLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0QsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNwRSxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFFLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDMUUsT0FBTyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDM0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELFFBQVEsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUN0QyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQyxTQUFTLE1BQU0sSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFD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LElBQUk7QUFDSixHQUFHRixVQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksUUFBUSxDQUFDLFdBQVcsSUFBSSxhQUFhLENBQUMsWUFBWSxLQUFLLEtBQUs7QUFDcEUsS0FBSyxNQUFNLGNBQWMsQ0FBQztBQUMxQixJQUFJLElBQUksUUFBUSxDQUFDLGVBQWUsSUFBSSxhQUFhLENBQUMsUUFBUTtBQUMxRCxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQzFCLElBQUksSUFBSSxhQUFhLENBQUMsYUFBYSxFQUFFO0FBQ3JDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNqQyxNQUFNLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQzFDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RCLE1BQU07QUFDTixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsS0FBSyxNQUFNLElBQUksYUFBYSxDQUFDLFdBQVcsRUFBRTtBQUMxQyxLQUFLLElBQUlBLFVBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QyxNQUFNLGFBQWEsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLE1BQU07QUFDTixVQUFVO0FBQ1YsTUFBTSxJQUFJQSxVQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7QUFDNUMsT0FBTyxhQUFhLENBQUMsU0FBUyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsT0FBTyxhQUFhLENBQUMs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QUksR0FBRyxJQUFJLENBQUM7QUFDbEIsRUFBRSxJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsRUFBRSxJQUFJLEdBQUdSLFVBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsRUFBRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNkLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDbEIsRUFBRUEsVUFBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUU7QUFDekMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUIsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUNBLFVBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUU7QUFDakY7QUFDQTtBQUNBO0FBQ0EsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hDLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENB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SUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLEdBQUcsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7QUFDeEIsSUFBSSxTQUFTO0FBQ2I7QUFDQSxHQUFHLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUM5QyxHQUFHLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFDLEdBQUcsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEUsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLEdBQUcsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxTQUFTLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxHQUFHLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9CLEdBQUcsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdEMsR0FBRyxJQUFJLENBQUMsR0FB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QUFDQSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzlELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN2QixDQUFDLENBQUM7QUFDRjtBQUNBLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLFVBQVUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxDQUFDLENBQUM7QUFDRjtBQUNBLHFCQUFjLEdBQUcsU0FBUzs7QUN6QzFCO0FBQ0E7QUFDQTtBQUNBLENBQUMsSUFBSSxNQUFNO0FBQ1gsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcjFCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzltQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOWtELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOTBELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcmtELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4akQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN2K0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNoL0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzk3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0Z0QsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDclQsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyVCxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4dkMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2gxQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMXpDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDNXdELEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzFwRSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3dkYsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3bUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcitDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsaEMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeGtDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0aUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDdmlFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzeUQsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hQLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3RyRCxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN2NEIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2x4QixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzFlLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN4WCxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNwZ0MsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMTJCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOTFCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDL3ZCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9OLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xSLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy9qQixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0Z0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbDdCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNzQixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25lLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3p1QyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1aUYsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMTVFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcm5FLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3ZjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQy8yQixFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNzZCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3pPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzEyQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDeHNCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDcnRDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMxc0QsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDaDBFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsdUIsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3hYLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzWCxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMXdDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0b0QsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNubkUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1OEcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3Q3QyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3I5RyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN0a0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDMXdDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3gyRCxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDL0UsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hGLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3RSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOS9DLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUMzN0QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25xRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2psQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOXJDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNubEMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN2OUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN2dCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDMVIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDOU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDcmhCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsbUMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQzV3QixFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1VSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN6VSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2VSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN2ckI7QUFDQTtBQUNBLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hRO0FBQ0EsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEc7QUFDQSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xiO0FBQ0EsSUFBSSxTQUFTLEdBQUcsVUFBVSxTQUFTLEVBQUU7QUFDckMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDZCxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckQsRUFBRSxHQUFH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RSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDMUUsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QixFQUFFLFFBQVEsSUFBSSxDQUFDLElBQUk7QUFDbkIsR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsTUFBTTtBQUMxQyxHQUFHLEtBQUssT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNO0FBQ3ZDLEdBQUcsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU07QUFDdEMsR0FBRyxLQUFLLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTTtBQUN0QyxHQUFHLEtBQUssVUFBVSxFQUFFLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4RCxHQUFHLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxHQUFHLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxHQUFHLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNwRCxHQUFHLEtBQUssVUFBVSxFQUFFLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3pELEdBQUcsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07QUFDckQsR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMs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QyxHQUFHLEVBQUU7QUFDM0IsS0FBSyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtBQUN6RCxNQUFNLFFBQVEsSUFBSUEsVUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxLQUFLLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRTtBQUNyRCxNQUFNLFFBQVEsSUFBSUEsVUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RSxLQUFLLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJRixvQkFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUVFLFVBQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FB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LElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3pDLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQzVDLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQzFELE9BQU87QUFDUCxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTCxTQUFTLE9BQU8sUUFBUSxFQUFFO0FBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMs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R0FBRyxVQUFVLEtBQUssRUFBRTtBQUNsRCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUNGO0FBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsWUFBWTtBQUNuRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7QUFDMUIsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2RCxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEcsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDWCxFQUFFO0FBQ0YsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxZQUFZLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxZQUFZO0FBQ2pELENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLENBQUMsQ0FBQztBQUNGO0FBQ0EsWUFBWSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxZQUFZO0FBQ3RELENBQUMsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkcsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLFlBQVksQ0FBQyxTQUFTLENBQUMsZUFB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QUFHLElBQUlBLG9CQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEQsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxJQUFJLFNBQVMsQ0FBQyxhQUFhLEVBQUU7QUFDakMsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUNFLFVBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQ0EsVUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQy9HLEtBQUs7QUFDTCxHQUFHLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsVUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9GLElBQUksUUFBUSxHQUFHLElBQUlGLG9CQUFlLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRUUsVUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9GLElBQUksUUFBUSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDM0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLE1BQU0sSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7QUFDbEQ7QUFDQSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7QUFDM0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFN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LENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFDRjtBQUNBLEdBQUcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xEO0FBQ0EsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMvRCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDNUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDekMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUI7QUFDQSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsRUFBRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEQsRUFBRSxJQUFJLENBQUMsR0FBRztBQUNWLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsWUFB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QUFFLENBQUM7QUFDcEIsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU87QUFDOUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeEMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDMUIsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJ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QUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BIO0FBQ0EsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRztBQUNBLENB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QUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoTDtBQUNBLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNyQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQzFELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsR0FBRztBQUNILEVBQUU7QUFDRixDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFDRjtBQUNBLFFBQVEsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUMxRCxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ1YsQ0FBQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFB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QUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDNUQsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM1RCxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzVELFlBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDaEUsWUFBWSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUM1RCxZQUFZLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQ2xFLFNBQVM7QUFDVDtBQUNBO0FBQ0EsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4QixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsWUFBWSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELFlBQVksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBO0FBQ0EsSUFB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RUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsRUFBRSxFQUFFLElBQUk7QUFDVCxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQ1YsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsSUFBSTtBQUNULENBQUMsRUFBRSxFQUFFLEtBQUs7QUFDVixDQUFDLEVBQUUsRUFBRSxJQUFJO0FBQ1QsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUNWLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsS0FBSztBQUNYLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxLQUFLO0FBQ1gsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsS0FBSztBQUNYLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsS0FBSztBQUNYLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDVixDQUFDLEdBQUcsRUFBRSxLQUFLO0FBQ1gsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLEdBQUcsRUFBRSxJQUFJO0FBQ1YsQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUNWLENBQUMsR0FBRyxFQUFFLEtBQUs7QUFDWCxDQUFDLENBQUM7QUFDRjtBQUNBLHFCQUFjLEdBQUcsZUFBZTs7QUN4R2hDLElBQUksY0FBYyxHQUFHLFNBQVMsTUFBTSxFQUFFO0FBQ3RDLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLFNBQVMsWUFBWSxDQUFDLFlBQVksRUFBRTtBQUNwQyxDQUFDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDckMsQ0FBQyxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFELENBQUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxJQUFJLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxJQUFJLE1BQU0sQ0FBQztBQUNaLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2I7QUFDQTtBQUNBLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QjtBQUNBLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2YsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZCxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdCO0FBQ0E7QUFDQSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUU7QUFDeEMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRDtBQUNBLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFO0FBQ3JCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbkUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ1osR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDWCxFQUFFO0FBQ0Y7QUFDQTtBQUNBLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxDQUFDLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDWCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDWCxFQUFFO0FBQ0YsQ0FBQztBQUNEO0FBQ0Esb0JBQWMsR0FBRyxjQUFjOztBQzdEL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLFFBQVEsQ0FBQztBQUNiO0FBQ0EsQ0FBQyxXQUFXO0FBRVo7QUFDQSxD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QUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQ7QUFDQSxHQUFHLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDbkIsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLElBQUksSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsS0FBSyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDaEMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLE9BQU87QUFDUCxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7QUFDcEQsT0FBTyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0s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QUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNqRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDakIsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3BELEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxjQUFjLEdBQUc7QUFDdEI7QUFDQSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQjtBQUNBLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3hCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCO0FBQ0EsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDdkIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDekIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDekI7QUFDQSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN4QixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMxQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN4QjtBQUNBLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM5QixFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUM3QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMzQixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakM7QUFDQTtBQUNBLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEIsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNsQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN2QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN2QjtBQUNBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZCLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM3QixFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2pDO0FBQ0E7QUFDQSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMzQjtBQUNBLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMxQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQy9CLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDL0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDOUIsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzlCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDcEMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN0QyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQy9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM3QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ25DLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xDO0FBQ0EsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDekIsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDdkIsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDdkIsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzdCLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNoQyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ2xDLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3ZDO0FBQ0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDMUIsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyQixFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzNCO0FBQ0E7QUFDQSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN6QixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUN2QixFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUM1QixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDNUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzNCLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO0FBQzFCLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDOUIsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDN0IsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDM0IsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3JDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFB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QUMsV0FBVyxHQUFHLFdBQVc7QUFDL0M7QUFDQSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNGLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxHQUFHLEVBQUU7QUFDbkQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsU0FBUyxLQUFLLEVBQUU7QUFDdkQsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJO0FBQ3RCLElBQUksS0FBSyxVQUFVLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDakMsSUFBSSxLQUFLLGFBQWEsRUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNuQyxJQUFJLEtBQUssV0FBVztBQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQzVCLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDbkQ7QUFDQSxLQUFLLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDL0IsS0FBSztBQUNMLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFNBQVMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7QUFDOUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDekQsSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUU7QUFDM0IsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDekIsRUFBRTtBQUNGLEtBQUs7QUFDTCxDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDM0MsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHO0FBQ3ZDLENBQUMsT0FBTyxJQUFJLENBQUM7QUFDYixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXO0FBQy9DLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyxPQUFPLElBQUksQ0FBQztBQUNiLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxXQUFXO0FBQzdDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUM1RCxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQ3BCLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBRXhDLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBRXhCO0FBQ0YsS0FBSztBQUNMLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxNQUFNLEVBQUU7QUFDdEQsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxLQUFLO0FBQ0wsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxXQUFXLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxTQUFTLFFBQVEsRUFBRTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxLQUFLO0FBQ0w7QUFDQSxDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLFNBQVMsT0FBTyxFQUFFO0FBQ3hELElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQy9ELENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLFdBQVc7QUFDbkQsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUIsSUFBSSxRQUFRLElBQUksQ0FBQyxPQUFPO0FBQ3hCLElBQUksS0FBSyxNQUFNO0FBQ2YsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbEIsQ0FBQyxNQUFNO0FBQ1AsSUFBSSxLQUFLLEtBQUs7QUFDZCxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsQ0FBQyxNQUFNO0FBZ0JQO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsV0FBVztBQUM3QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUN0QixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDN0QsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUN4QixLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakMsRUFBRSxNQUFNO0FBQ1IsTUFBTTtBQUNOLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLEVBQUU7QUFDRixLQUFLLE1BQU07QUFDWCxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxJQUFJLEVBQUU7QUFDakQsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDakIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUNsQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckMsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN0QyxFQUFFO0FBQ0YsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJLElBQUksV0FBVyxHQUFHO0FBQ3RCLENBQUMsVUFBVSxHQUFHLEdBQUc7QUFDakIsQ0FBQyxPQUFPLEdBQUcsR0FBRztBQUNkLENBQUMsU0FBUyxHQUFHLEdBQUc7QUFDaEIsQ0FBQyxNQUFNLEdBQUcsR0FBRztBQUNiLENBQUMsU0FBUyxHQUFHLEdBQUc7QUFDaEIsQ0FBQyxPQUFPLEdBQUcsR0FBRztBQUNkLENBQUMsUUFBUSxHQUFHLEdBQUc7QUFDZixDQUFDLFNBQVMsR0FBRyxHQUFHO0FBQ2hCLENBQUMsY0FBYyxHQUFHLEdBQUc7QUFDckIsQ0FBQyxPQUFPLEdBQUcsR0FBRztBQUNkLENBQUMsT0FBTyxHQUFHLEdBQUc7QUFDZCxLQUFLLENBQUM7QUFDTjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtBQUN2QyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsS0FBSyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLEtBQUssSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sTUFBTTtBQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNYLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNYLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNYLE1BQU07QUFDTixFQUFFO0FBQ0YsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO0FBQ3ZDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNWLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxFQUFFO0FBQ0YsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ1YsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDM0IsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoRSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbkIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDeEIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNoRixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDM0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO0FBQ1gsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDdEIsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQ3ZDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDOUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFELEVBQUU7QUFDRixDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDdkMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUM5RCxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25ELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0I7QUFDQSxDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxTQUFTLEVBQUUsVUFBVSxFQUFFO0FBQ3RFLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO0FBQzVDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLElBQUksUUFBUSxTQUFTLENBQUMsVUFBVTtBQUNoQyxJQUFJLEtBQUssY0FBYztBQUN2QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDYixDQUFDLE1BQU07QUFDUCxJQUFJLEtBQUssVUFBVTtBQUNuQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDYixDQUFDLE1BQU07QUFDUCxJQUFJLEtBQUssT0FBTztBQUNoQixDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDWixDQUFDLE1BQU07QUFDUCxJQUFJLEtBQUssYUFBYTtBQUN0QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDYixDQUFDLE1BQU07QUFDUCxJQUFJLEtBQUssTUFBTTtBQUNmLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNaLENBQUMsTUFBTTtBQUNQLElBQUksS0FBSyxTQUFTO0FBQ2xCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNiLENBQUMsTUFBTTtBQUNQLElBQUksS0FBSyxTQUFTO0FBQ2xCLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNaLEtBQUs7QUFDTCxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUM7QUFDZDtBQUNBLElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlELElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckQsSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDbEIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ25DLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDVixDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNsQixLQUFLLFFBQVEsRUFBRSxHQUFHLENBQUM7QUFDbkIsS0FBSyxNQUFNLEVBQUUsQ0FBQztBQUNkLEVBQUU7QUFDRixLQUFLLE1BQU07QUFDWCxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUMsRUFBRTtBQUNsQixLQUFLLFFBQVEsRUFBRSxHQUFHLENBQUM7QUFDbkIsS0FBSyxNQUFNLEVBQUUsQ0FBQztBQUNkLEVBQUU7QUFDRixLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtBQUM1QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFFO0FBQzFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFO0FBQzVCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUNWLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxRQUFRLEVBQUU7QUFDN0Q7QUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLENBQUMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4QixLQUFLO0FBQ0wsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDakIsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUMzQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDVixDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3hCLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzFCLEVBQUU7QUFDRixLQUFLO0FBQ0wsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxLQUFLLEVBQUU7QUFDcEQsSUFBSSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDNUIsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLFNBQVMsS0FBSyxFQUFFO0FBQ3RELElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFDRjtBQUNBLFdBQVcsQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLFNBQVMsSUFBSSxFQUFFO0FBQ3BELElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSTtBQUNyQixJQUFJLEtBQUssVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNO0FBQ3hDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUMvQyxJQUFJLEtBQUssZUFBZSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQzlDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUMvQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU07QUFDakQsSUFBSSxLQUFLLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNO0FBQ2hELElBQUksS0FBSyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTTtBQUNqRCxJQUFJLEtBQUssZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNO0FBQzVDLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQztBQUNGO0FBQ0EsV0FBVyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZELElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUIsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUNGO0FBQ0EsaUJBQWMsR0FBRyxXQUFXOztBQzlZNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxRQUFRLEdBQUc4QixZQUE4QixDQUFDLFFBQVEsQ0FBQztBQUNOO0FBQ1A7QUFDYztBQUNhO0FBQ1Y7QUFDSjtBQUN2RDtBQUNBO0FBQ0EsS0FBSyxPQUFPLE1BQU0sQ0FBQyxXQUFXLEtBQUssVUFBVSxHQUFHO0FBQ2hELENBQUMsSUFBSSxXQUFXLEdBQUcsU0FBUyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQzNDLEVBQUUsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUUsRUFBRSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ2hELEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO0FBQ2hELENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbEMsQ0FBQztBQUNEO0FBQ0EsSUFBSSxRQUFRLEdBQUcsU0FBUyxVQUFVLEVBQUU7QUFDcEMsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEQsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3pDLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDMUIsRUFBQztBQUNEO0FBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLFFBQVEsRUFBRTtBQUM3RCxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxFQUFFO0FBQzNDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVTtBQUN0QixLQUFLLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3JDLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGO0FBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLFFBQVEsRUFBRTtBQUMxRCxFQUFFLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsV0FBVztBQUNyQyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixHQUFHLENBQUM7QUFDSixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLFdBQVc7QUFDekMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN4QixJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3BDLEdBQUcsQ0FBQztBQUNKLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsV0FBVztBQUN2QyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzNCLEdBQUcsQ0FBQztBQUNKLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsV0FBVztBQUN0QyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUMzQixHQUFHLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVztBQUM3QyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEYsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksR0FBRyxTQUFTLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDdkQsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCO0FBQ25DLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO0FBQ3hDO0FBQ0EsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzVDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDZixFQUFFO0FBQ0YsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUNGO0FBQ0EsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsV0FBVztBQUMxQyxFQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLEdBQUcsRUFBRTtBQUM3QyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUM1QixFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RDLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN0QyxHQUFHO0FBQ0gsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxXQUFXO0FBQ3hDLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksTUFBTSxHQUFHLFNBQVMsUUFBUSxFQUFFLE1BQU0sRUFBRTtBQUN4QztBQUNBLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdkIsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNULENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO0FBQ3pCLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUNsQyxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDL0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEQsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFO0FBQ0YsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7QUFDMUIsRUFBRSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0FBQ25DLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNoRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyRCxJQUFJO0FBQ0osR0FBRztBQUNILEVBQUU7QUFDRixDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUM1QixFQUFFLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDckMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2xELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZELElBQUk7QUFDSixHQUFHO0FBQ0gsRUFBRTtBQUNGLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQzVCLEVBQUUsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUNyQyxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQjtBQUM1QixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDL0IsRUFBRSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtBQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixHQUFHO0FBQ0gsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QztBQUNBLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQ3hCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6RCxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQzlCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxHQUFHLE1BQU07QUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN2RixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLHVCQUF1QixFQUFFO0FBQ3RDLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztBQUNqRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtBQUNwQixHQUFHLElBQUllLGVBQWEsRUFBRSxFQUFFO0FBQ3hCLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRztBQUNsQixNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekIsTUFBTSxhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhO0FBQy9DLE1BQU0sT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztBQUNuQyxPQUFNO0FBQ04sS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7QUFDM0IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7QUFDOUMsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7QUFDekMsR0FBRyxJQUFJLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixLQUFLLFFBQVE7QUFDbEQsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDekUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0I7QUFDbkMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztBQUNoRCxHQUFHO0FBQ0gsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRTtBQUNqRCxHQUFHLElBQUksT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVE7QUFDekMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlELFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTztBQUMxQixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUNyQyxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0EsRUFBRSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO0FBQ3RELElBQUksSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO0FBQzVCLE1BQU0sSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNyRSxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMxQztBQUNBLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQ2xCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLEdBQUc7QUFDSCxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7QUFDeEIsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDbEIsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDdEI7QUFDQSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ25ELElBQUksSUFBSSxZQUFZLEdBQUcsU0FBUyxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ3BELE1BQU0sSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9DLE1BQU0sUUFBUSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLGdCQUFnQixLQUFLLFNBQVM7QUFDNUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDL0UsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDO0FBQ3RFLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ3RELElBQUksT0FBTyxDQUFDLFNBQVMsR0FBRzVDLFVBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPO0FBQ25FLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxRQUFRLEVBQUU7QUFDeEMsR0FBRyxJQUFJLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQztBQUMvQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDeEMsRUFBRSxNQUFNO0FBQ1IsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMLEdBQUcsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsU0FBUyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN6RCxFQUFFLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxTQUFTLEdBQUdTLFNBQUssRUFBRSxDQUFDO0FBQzFCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RyxFQUFFLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNqQyxFQUFFLElBQUksbUJBQW1CLEdBQUcsSUFBSXVCLHVCQUFrQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUUsRUFBRSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxXQUFXO0FBQ3pDLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUM1QyxFQUFFLElBQUksS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7QUFDckQsR0FBRyxNQUFNLEVBQUU7QUFDWCxJQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztBQUNyQixJQUFJLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztBQUNqQyxJQUFJLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWTtBQUNyQyxJQUFJLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVTtBQUNqQyxJQUFJLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRztBQUN6QixJQUFJO0FBQ0osR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsRUFBRTtBQUNGLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2pCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO0FBQ2hDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSWdCLGVBQWUsRUFBRSxDQUFDO0FBQ25ELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0YsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsRUFBRTtBQUNGLENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsV0FBVztBQUMzQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7QUFDaEMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUztBQUN2QyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTO0FBQ3JDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVCLENBQUMsT0FBTztBQUNSLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUTtBQUNuQixJQUFJLE9BQU87QUFDWCxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdEIsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDMUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSWhCLHVCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2hGLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7QUFDbkQsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbkI7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDOUYsR0FBRztBQUNILEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksSUFBSSxXQUFXLEdBQUcsSUFBSWlCLGFBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsR0FBRztBQUNILEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDekIsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUN4QixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxjQUFjLEVBQUU7QUFDekQsQ0FBQyxJQUFJLGNBQWMsRUFBRTtBQUNyQixFQUFFLEtBQUssSUFBSSxHQUFHLElBQUksY0FBYyxFQUFFO0FBQ2xDLEdBQUcsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsSUFBSTtBQUNKLEdBQUc7QUFDSCxFQUFFO0FBQ0YsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNoQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsV0FBVztBQUN2QyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDcEMsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzNCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNoQixFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRTtBQUNoQixDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ3hCLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQyxPQUFPLElBQUksQ0FBQztBQUNiLEdBQUc7QUFDSCxFQUFFLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNsQixFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDckIsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUMsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJeEMsU0FBSyxFQUFFLENBQUM7QUFDaEMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsSCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNqRCxJQUFJLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDakQsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLEtBQUs7QUFDTCxHQUFHO0FBQ0gsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEdBQUcsV0FBVztBQUM5QyxFQUFFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDL0MsRUFBRSxJQUFJO0FBQ04sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2hCLENBQUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCO0FBQ2pDLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRyxXQUFXO0FBQ25ELEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxPQUFPLEVBQUU7QUFDbkQsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO0FBQ3hDLEVBQUUsT0FBTztBQUNULEVBQUUsSUFBSSxZQUFZLEdBQUcsU0FBUyxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ2xELElBQUksSUFBSSxZQUFZLEdBQUcsU0FBUyxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ3BELE1BQU0sSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9DLE1BQU0sUUFBUSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLGdCQUFnQixLQUFLLFNBQVM7QUFDNUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDL0UsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztBQUN6QyxNQUFNLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDO0FBQ3RFLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxFQUFFLElBQUksZUFBZSxHQUFHLFNBQVMsT0FBTyxFQUFFLFNBQVMsRUFBRTtBQUNyRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEdBQUdULFVBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPO0FBQ25FLE1BQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRyxDQUFDO0FBQ0o7QUFDQSxDQUFDLElBQUksYUFBYSxHQUFHLG9CQUFvQixDQUFDO0FBQzFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsQyxDQUFDLElBQUksT0FBTyxFQUFFO0FBQ2QsRUFBRSxZQUFZLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2xDLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsQ0FBQyxDQUFDO0FBQ0Y7QUFDQTtBQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxHQUFHLFdBQVc7QUFDMUMsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTO0FBQ3BCLElBQUksT0FBTztBQUNYLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPO0FBQ3BCLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVk7QUFDMUMsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDMUIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1osR0FBRyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO0FBQ2xDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDNUIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLElBQUk7QUFDSixHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQjtBQUM1QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxJQUFJO0FBQ0osQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxXQUFXO0FBQzFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2RCxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFdBQVc7QUFDdEMsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO0FBQ3hDLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUU7QUFDcEU7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDLElBQUksSUFBSSxDQUFDLHVCQUF1QjtBQUNqQyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsV0FBVyxFQUFFO0FBQy9DLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFDOUIsQ0FBQyxJQUFJLENBQUMsV0FBVztBQUNqQixFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFDRjtBQUNBLE1BQU0sQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEdBQUcsV0FBVztBQUNyRCxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7QUFDbkUsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLFdBQVcsRUFBRTtBQUNuRCxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzlCLENBQUMsSUFBSSxDQUFDLFdBQVc7QUFDakIsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxjQUFjLEdBQUcsTUFBTTs7QUMzZnZCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmO0FBQ0EsS0FBSyxDQUFDLFNBQVMsR0FBRyxlQUFlLEdBQUdrRCxTQUFPLENBQUM7QUFDNUM7QUFDQSxNQUFNLENBQUMsSUFBSSxDQUFDQyxhQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUU7QUFDOUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUdBLGFBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsTUFBTSxDQUFDLElBQUksQ0FBQ0MsWUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQzdDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHQSxZQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLEtBQUssQ0FBQyxTQUFTLEdBQUd2QixnQkFBcUMsQ0FBQztBQUN4RCxLQUFLLENBQUMsZUFBZSxHQUFHd0Isb0JBQXlDLENBQUM7QUFDbEU7QUFDK0M7QUFDL0MsS0FBSyxDQUFDLFFBQVEsR0FBR3pDLFVBQU0sQ0FBQyxTQUFTLENBQUM7QUFDbEM7QUFDc0Q7QUFDc0I7QUFDWjtBQUNOO0FBQ1c7QUFDSTtBQUNKO0FBQ1g7QUFDUjtBQUNZO0FBQzlEO0FBQ0EsS0FBSyxDQUFDLEtBQUssR0FBRztBQUNkLENBQUMsV0FBVyxFQUFFa0MsV0FBVztBQUN6QixDQUFDLHFCQUFxQixFQUFFWCx1QkFBcUI7QUFDN0MsQ0FBQyxlQUFlLEVBQUVLLGlCQUFlO0FBQ2pDLENBQUMsZUFBZSxFQUFFUSxlQUFlO0FBQ2pDLENBQUMsYUFBYSxFQUFFSCxhQUFhO0FBQzdCLENBQUMsa0JBQWtCLEVBQUVFLGtCQUFrQjtBQUN2QyxDQUFDLG9CQUFvQixFQUFFVixzQkFBb0I7QUFDM0MsQ0FBQyxrQkFBa0IsRUFBRUQsb0JBQWtCO0FBQ3ZDLENBQUMsYUFBYSxFQUFFUSxlQUFhO0FBQzdCLENBQUMsU0FBUyxFQUFFVSxXQUFTO0FBQ3JCLENBQUMsQ0FBQztBQUNGO0FBQzhDO0FBQzlDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBR0MsVUFBTSxDQUFDO0FBQ3pCO0FBQ0EsV0FBYyxHQUFHLEtBQUs7OztJQzlDbUIsK0JBQU07SUFBL0M7O0tBNkJDO0lBVEEsNEJBQU0sR0FBTjtRQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNwQ0MsZ0NBQXVCLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0tBQ3hFO0lBRUQsOEJBQVEsR0FBUjtRQUNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0Q0EsZ0NBQXVCLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0tBQzFFO0lBM0JNLHlCQUFhLEdBQTBCLFVBQUMsRUFBZSxFQUFFLEdBQWlDOztRQUdoRyxJQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzlDLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTTtRQUUzQixJQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUE7UUFDMUUsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFNO1FBRXZCLElBQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUE7UUFDckMsSUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNqREMsaUJBQVMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1lBQzlCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxRQUFRO1NBQ3BCLENBQUMsQ0FBQTtRQUVGLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUFBO0tBQzVDLENBQUE7SUFXRixrQkFBQztDQUFBLENBN0J3Q0MsZUFBTTs7OzsifQ== diff --git a/.obsidian/plugins/music-code-blocks/manifest.json b/.obsidian/plugins/music-code-blocks/manifest.json new file mode 100644 index 00000000..2264d2ff --- /dev/null +++ b/.obsidian/plugins/music-code-blocks/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "music-code-blocks", + "name": "Music notation", + "version": "1.0.3", + "minAppVersion": "0.9.15", + "description": "Plugin which renders music notation from code blocks. Uses the `music-abc` language.", + "author": "Til Blechschmidt", + "authorUrl": "https://github.com/TilBlechschmidt/obsidian-plugin-abcjs", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/music-code-blocks/styles.css b/.obsidian/plugins/music-code-blocks/styles.css new file mode 100644 index 00000000..abf9b919 --- /dev/null +++ b/.obsidian/plugins/music-code-blocks/styles.css @@ -0,0 +1,9 @@ +/* Default abcjs styles look good. Just adapting it to the current theme. */ + +.abcjs-container svg path { + fill: var(--text-normal); +} + +.abcjs-container svg text { + fill: var(--text-normal); +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-admonition/data.json b/.obsidian/plugins/obsidian-admonition/data.json new file mode 100644 index 00000000..a2d5276b --- /dev/null +++ b/.obsidian/plugins/obsidian-admonition/data.json @@ -0,0 +1,10 @@ +{ + "userAdmonitions": {}, + "syntaxHighlight": false, + "copyButton": false, + "version": "6.3.0", + "autoCollapse": false, + "defaultCollapseType": "open", + "syncLinks": true, + "enableMarkdownProcessor": false +} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-admonition/main.js b/.obsidian/plugins/obsidian-admonition/main.js new file mode 100644 index 00000000..331d8ce3 --- /dev/null +++ b/.obsidian/plugins/obsidian-admonition/main.js @@ -0,0 +1,11652 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +var faCopy$1 = { + prefix: 'far', + iconName: 'copy', + icon: [448, 512, [], "f0c5", "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"] +}; + +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +var faAd = { + prefix: 'fas', + iconName: 'ad', + icon: [512, 512, [], "f641", "M157.52 272h36.96L176 218.78 157.52 272zM352 256c-13.23 0-24 10.77-24 24s10.77 24 24 24 24-10.77 24-24-10.77-24-24-24zM464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM250.58 352h-16.94c-6.81 0-12.88-4.32-15.12-10.75L211.15 320h-70.29l-7.38 21.25A16 16 0 0 1 118.36 352h-16.94c-11.01 0-18.73-10.85-15.12-21.25L140 176.12A23.995 23.995 0 0 1 162.67 160h26.66A23.99 23.99 0 0 1 212 176.13l53.69 154.62c3.61 10.4-4.11 21.25-15.11 21.25zM424 336c0 8.84-7.16 16-16 16h-16c-4.85 0-9.04-2.27-11.98-5.68-8.62 3.66-18.09 5.68-28.02 5.68-39.7 0-72-32.3-72-72s32.3-72 72-72c8.46 0 16.46 1.73 24 4.42V176c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v160z"] +}; +var faAddressBook = { + prefix: 'fas', + iconName: 'address-book', + icon: [448, 512, [], "f2b9", "M436 160c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h320c26.5 0 48-21.5 48-48v-48h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20v-64h20zm-228-32c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H118.4C106 384 96 375.4 96 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"] +}; +var faAddressCard = { + prefix: 'fas', + iconName: 'address-card', + icon: [576, 512, [], "f2bb", "M528 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-352 96c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H86.4C74 384 64 375.4 64 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2zM512 312c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-64c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"] +}; +var faAdjust = { + prefix: 'fas', + iconName: 'adjust', + icon: [512, 512, [], "f042", "M8 256c0 136.966 111.033 248 248 248s248-111.034 248-248S392.966 8 256 8 8 119.033 8 256zm248 184V72c101.705 0 184 82.311 184 184 0 101.705-82.311 184-184 184z"] +}; +var faAirFreshener = { + prefix: 'fas', + iconName: 'air-freshener', + icon: [512, 512, [], "f5d0", "M224 160H96C43 160 0 203 0 256V480C0 497.625 14.375 512 32 512H288C305.625 512 320 497.625 320 480V256C320 203 277 160 224 160ZM160 416C115.875 416 80 380.125 80 336S115.875 256 160 256S240 291.875 240 336S204.125 416 160 416ZM224 32C224 14.375 209.625 0 192 0H128C110.375 0 96 14.375 96 32V128H224V32ZM381.781 51.578C383 50.969 384 49.359 384 48C384 46.625 383 45.031 381.781 44.422L352 32L339.562 2.219C338.969 1 337.375 0 336 0S333.031 1 332.406 2.219L320 32L290.219 44.422C289 45.031 288 46.625 288 48C288 49.359 289 50.969 290.219 51.578L320 64L332.406 93.781C333.031 95 334.625 96 336 96S338.969 95 339.562 93.781L352 64L381.781 51.578ZM448 64L460.406 93.781C461.031 95 462.625 96 464 96S466.969 95 467.562 93.781L480 64L509.781 51.578C511 50.969 512 49.359 512 48C512 46.625 511 45.031 509.781 44.422L480 32L467.562 2.219C466.969 1 465.375 0 464 0S461.031 1 460.406 2.219L448 32L418.219 44.422C417 45.031 416 46.625 416 48C416 49.359 417 50.969 418.219 51.578L448 64ZM480 224L467.562 194.219C466.969 193 465.375 192 464 192S461.031 193 460.406 194.219L448 224L418.219 236.422C417 237.031 416 238.625 416 240C416 241.359 417 242.969 418.219 243.578L448 256L460.406 285.781C461.031 287 462.625 288 464 288S466.969 287 467.562 285.781L480 256L509.781 243.578C511 242.969 512 241.359 512 240C512 238.625 511 237.031 509.781 236.422L480 224ZM445.781 147.578C447 146.969 448 145.359 448 144C448 142.625 447 141.031 445.781 140.422L416 128L403.562 98.219C402.969 97 401.375 96 400 96S397.031 97 396.406 98.219L384 128L354.219 140.422C353 141.031 352 142.625 352 144C352 145.359 353 146.969 354.219 147.578L384 160L396.406 189.781C397.031 191 398.625 192 400 192S402.969 191 403.562 189.781L416 160L445.781 147.578Z"] +}; +var faAlignCenter = { + prefix: 'fas', + iconName: 'align-center', + icon: [448, 512, [], "f037", "M432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM108.1 96h231.81A12.09 12.09 0 0 0 352 83.9V44.09A12.09 12.09 0 0 0 339.91 32H108.1A12.09 12.09 0 0 0 96 44.09V83.9A12.1 12.1 0 0 0 108.1 96zm231.81 256A12.09 12.09 0 0 0 352 339.9v-39.81A12.09 12.09 0 0 0 339.91 288H108.1A12.09 12.09 0 0 0 96 300.09v39.81a12.1 12.1 0 0 0 12.1 12.1z"] +}; +var faAlignJustify = { + prefix: 'fas', + iconName: 'align-justify', + icon: [448, 512, [], "f039", "M432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-128H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faAlignLeft = { + prefix: 'fas', + iconName: 'align-left', + icon: [448, 512, [], "f036", "M12.83 352h262.34A12.82 12.82 0 0 0 288 339.17v-38.34A12.82 12.82 0 0 0 275.17 288H12.83A12.82 12.82 0 0 0 0 300.83v38.34A12.82 12.82 0 0 0 12.83 352zm0-256h262.34A12.82 12.82 0 0 0 288 83.17V44.83A12.82 12.82 0 0 0 275.17 32H12.83A12.82 12.82 0 0 0 0 44.83v38.34A12.82 12.82 0 0 0 12.83 96zM432 160H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 256H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faAlignRight = { + prefix: 'fas', + iconName: 'align-right', + icon: [448, 512, [], "f038", "M16 224h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm416 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-384H172.83A12.82 12.82 0 0 0 160 44.83v38.34A12.82 12.82 0 0 0 172.83 96h262.34A12.82 12.82 0 0 0 448 83.17V44.83A12.82 12.82 0 0 0 435.17 32zm0 256H172.83A12.82 12.82 0 0 0 160 300.83v38.34A12.82 12.82 0 0 0 172.83 352h262.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288z"] +}; +var faAllergies = { + prefix: 'fas', + iconName: 'allergies', + icon: [448, 512, [], "f461", "M416 112c-17.6 0-32 14.4-32 32v72c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32s-32 14.4-32 32v152c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V32c0-17.6-14.4-32-32-32s-32 14.4-32 32v184c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V64c0-17.6-14.4-32-32-32S96 46.4 96 64v241l-23.6-32.5c-13-17.9-38-21.8-55.9-8.8s-21.8 38-8.8 55.9l125.6 172.7c9 12.4 23.5 19.8 38.8 19.8h197.6c22.3 0 41.6-15.3 46.7-37l26.5-112.7c3.2-13.7 4.9-28.3 5.1-42.3V144c0-17.6-14.4-32-32-32zM176 416c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm64 32c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32-128c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"] +}; +var faAmbulance = { + prefix: 'fas', + iconName: 'ambulance', + icon: [640, 512, [], "f0f9", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm144-248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm176 248c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"] +}; +var faAmericanSignLanguageInterpreting = { + prefix: 'fas', + iconName: 'american-sign-language-interpreting', + icon: [640, 512, [], "f2a3", "M290.547 189.039c-20.295-10.149-44.147-11.199-64.739-3.89 42.606 0 71.208 20.475 85.578 50.576 8.576 17.899-5.148 38.071-23.617 38.071 18.429 0 32.211 20.136 23.617 38.071-14.725 30.846-46.123 50.854-80.298 50.854-.557 0-94.471-8.615-94.471-8.615l-66.406 33.347c-9.384 4.693-19.815.379-23.895-7.781L1.86 290.747c-4.167-8.615-1.111-18.897 6.946-23.621l58.072-33.069L108 159.861c6.39-57.245 34.731-109.767 79.743-146.726 11.391-9.448 28.341-7.781 37.51 3.613 9.446 11.394 7.78 28.067-3.612 37.516-12.503 10.559-23.618 22.509-32.509 35.57 21.672-14.729 46.679-24.732 74.186-28.067 14.725-1.945 28.063 8.336 29.73 23.065 1.945 14.728-8.336 28.067-23.062 29.734-16.116 1.945-31.12 7.503-44.178 15.284 26.114-5.713 58.712-3.138 88.079 11.115 13.336 6.669 18.893 22.509 12.224 35.848-6.389 13.06-22.504 18.617-35.564 12.226zm-27.229 69.472c-6.112-12.505-18.338-20.286-32.231-20.286a35.46 35.46 0 0 0-35.565 35.57c0 21.428 17.808 35.57 35.565 35.57 13.893 0 26.119-7.781 32.231-20.286 4.446-9.449 13.614-15.006 23.339-15.284-9.725-.277-18.893-5.835-23.339-15.284zm374.821-37.237c4.168 8.615 1.111 18.897-6.946 23.621l-58.071 33.069L532 352.16c-6.39 57.245-34.731 109.767-79.743 146.726-10.932 9.112-27.799 8.144-37.51-3.613-9.446-11.394-7.78-28.067 3.613-37.516 12.503-10.559 23.617-22.509 32.508-35.57-21.672 14.729-46.679 24.732-74.186 28.067-10.021 2.506-27.552-5.643-29.73-23.065-1.945-14.728 8.336-28.067 23.062-29.734 16.116-1.946 31.12-7.503 44.178-15.284-26.114 5.713-58.712 3.138-88.079-11.115-13.336-6.669-18.893-22.509-12.224-35.848 6.389-13.061 22.505-18.619 35.565-12.227 20.295 10.149 44.147 11.199 64.739 3.89-42.606 0-71.208-20.475-85.578-50.576-8.576-17.899 5.148-38.071 23.617-38.071-18.429 0-32.211-20.136-23.617-38.071 14.033-29.396 44.039-50.887 81.966-50.854l92.803 8.615 66.406-33.347c9.408-4.704 19.828-.354 23.894 7.781l44.455 88.926zm-229.227-18.618c-13.893 0-26.119 7.781-32.231 20.286-4.446 9.449-13.614 15.006-23.339 15.284 9.725.278 18.893 5.836 23.339 15.284 6.112 12.505 18.338 20.286 32.231 20.286a35.46 35.46 0 0 0 35.565-35.57c0-21.429-17.808-35.57-35.565-35.57z"] +}; +var faAnchor = { + prefix: 'fas', + iconName: 'anchor', + icon: [576, 512, [], "f13d", "M12.971 352h32.394C67.172 454.735 181.944 512 288 512c106.229 0 220.853-57.38 242.635-160h32.394c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0l-67.029 67.029c-7.56 7.56-2.206 20.485 8.485 20.485h35.146c-20.29 54.317-84.963 86.588-144.117 94.015V256h52c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-52v-5.47c37.281-13.178 63.995-48.725 64-90.518C384.005 43.772 341.605.738 289.37.01 235.723-.739 192 42.525 192 96c0 41.798 26.716 77.35 64 90.53V192h-52c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v190.015c-58.936-7.399-123.82-39.679-144.117-94.015h35.146c10.691 0 16.045-12.926 8.485-20.485l-67.029-67.029c-4.686-4.686-12.284-4.686-16.971 0L4.485 331.515C-3.074 339.074 2.28 352 12.971 352zM288 64c17.645 0 32 14.355 32 32s-14.355 32-32 32-32-14.355-32-32 14.355-32 32-32z"] +}; +var faAngleDoubleDown = { + prefix: 'fas', + iconName: 'angle-double-down', + icon: [320, 512, [], "f103", "M143 256.3L7 120.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0L313 86.3c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.4 9.5-24.6 9.5-34 .1zm34 192l136-136c9.4-9.4 9.4-24.6 0-33.9l-22.6-22.6c-9.4-9.4-24.6-9.4-33.9 0L160 352.1l-96.4-96.4c-9.4-9.4-24.6-9.4-33.9 0L7 278.3c-9.4 9.4-9.4 24.6 0 33.9l136 136c9.4 9.5 24.6 9.5 34 .1z"] +}; +var faAngleDoubleLeft = { + prefix: 'fas', + iconName: 'angle-double-left', + icon: [448, 512, [], "f100", "M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z"] +}; +var faAngleDoubleRight = { + prefix: 'fas', + iconName: 'angle-double-right', + icon: [448, 512, [], "f101", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z"] +}; +var faAngleDoubleUp = { + prefix: 'fas', + iconName: 'angle-double-up', + icon: [320, 512, [], "f102", "M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"] +}; +var faAngleDown = { + prefix: 'fas', + iconName: 'angle-down', + icon: [320, 512, [], "f107", "M143 352.3L7 216.3c-9.4-9.4-9.4-24.6 0-33.9l22.6-22.6c9.4-9.4 24.6-9.4 33.9 0l96.4 96.4 96.4-96.4c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9l-136 136c-9.2 9.4-24.4 9.4-33.8 0z"] +}; +var faAngleLeft = { + prefix: 'fas', + iconName: 'angle-left', + icon: [256, 512, [], "f104", "M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z"] +}; +var faAngleRight = { + prefix: 'fas', + iconName: 'angle-right', + icon: [256, 512, [], "f105", "M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"] +}; +var faAngleUp = { + prefix: 'fas', + iconName: 'angle-up', + icon: [320, 512, [], "f106", "M177 159.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 255.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 329.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1z"] +}; +var faAngry = { + prefix: 'fas', + iconName: 'angry', + icon: [496, 512, [], "f556", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 240c0-9.3 4.1-17.5 10.5-23.4l-31-9.3c-8.5-2.5-13.3-11.5-10.7-19.9 2.5-8.5 11.4-13.2 19.9-10.7l80 24c8.5 2.5 13.3 11.5 10.7 19.9-2.1 6.9-8.4 11.4-15.3 11.4-.5 0-1.1-.2-1.7-.2.7 2.7 1.7 5.3 1.7 8.2 0 17.7-14.3 32-32 32S136 257.7 136 240zm168 154.2c-27.8-33.4-84.2-33.4-112.1 0-13.5 16.3-38.2-4.2-24.6-20.5 20-24 49.4-37.8 80.6-37.8s60.6 13.8 80.6 37.8c13.8 16.5-11.1 36.6-24.5 20.5zm76.6-186.9l-31 9.3c6.3 5.8 10.5 14.1 10.5 23.4 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-2.9.9-5.6 1.7-8.2-.6.1-1.1.2-1.7.2-6.9 0-13.2-4.5-15.3-11.4-2.5-8.5 2.3-17.4 10.7-19.9l80-24c8.4-2.5 17.4 2.3 19.9 10.7 2.5 8.5-2.3 17.4-10.8 19.9z"] +}; +var faAnkh = { + prefix: 'fas', + iconName: 'ankh', + icon: [320, 512, [], "f644", "M296 256h-44.62C272.46 222.01 288 181.65 288 144 288 55.63 230.69 0 160 0S32 55.63 32 144c0 37.65 15.54 78.01 36.62 112H24c-13.25 0-24 10.74-24 24v32c0 13.25 10.75 24 24 24h96v152c0 13.25 10.75 24 24 24h32c13.25 0 24-10.75 24-24V336h96c13.25 0 24-10.75 24-24v-32c0-13.26-10.75-24-24-24zM160 80c29.61 0 48 24.52 48 64 0 34.66-27.14 78.14-48 100.87-20.86-22.72-48-66.21-48-100.87 0-39.48 18.39-64 48-64z"] +}; +var faAppleAlt = { + prefix: 'fas', + iconName: 'apple-alt', + icon: [448, 512, [], "f5d1", "M350.85 129c25.97 4.67 47.27 18.67 63.92 42 14.65 20.67 24.64 46.67 29.96 78 4.67 28.67 4.32 57.33-1 86-7.99 47.33-23.97 87-47.94 119-28.64 38.67-64.59 58-107.87 58-10.66 0-22.3-3.33-34.96-10-8.66-5.33-18.31-8-28.97-8s-20.3 2.67-28.97 8c-12.66 6.67-24.3 10-34.96 10-43.28 0-79.23-19.33-107.87-58-23.97-32-39.95-71.67-47.94-119-5.32-28.67-5.67-57.33-1-86 5.32-31.33 15.31-57.33 29.96-78 16.65-23.33 37.95-37.33 63.92-42 15.98-2.67 37.95-.33 65.92 7 23.97 6.67 44.28 14.67 60.93 24 16.65-9.33 36.96-17.33 60.93-24 27.98-7.33 49.96-9.67 65.94-7zm-54.94-41c-9.32 8.67-21.65 15-36.96 19-10.66 3.33-22.3 5-34.96 5l-14.98-1c-1.33-9.33-1.33-20 0-32 2.67-24 10.32-42.33 22.97-55 9.32-8.67 21.65-15 36.96-19 10.66-3.33 22.3-5 34.96-5l14.98 1 1 15c0 12.67-1.67 24.33-4.99 35-3.99 15.33-10.31 27.67-18.98 37z"] +}; +var faArchive = { + prefix: 'fas', + iconName: 'archive', + icon: [512, 512, [], "f187", "M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"] +}; +var faArchway = { + prefix: 'fas', + iconName: 'archway', + icon: [576, 512, [], "f557", "M560 448h-16V96H32v352H16.02c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16H176c8.84 0 16-7.16 16-16V320c0-53.02 42.98-96 96-96s96 42.98 96 96l.02 160v16c0 8.84 7.16 16 16 16H560c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm0-448H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h544c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"] +}; +var faArrowAltCircleDown = { + prefix: 'fas', + iconName: 'arrow-alt-circle-down', + icon: [512, 512, [], "f358", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM212 140v116h-70.9c-10.7 0-16.1 13-8.5 20.5l114.9 114.3c4.7 4.7 12.2 4.7 16.9 0l114.9-114.3c7.6-7.6 2.2-20.5-8.5-20.5H300V140c0-6.6-5.4-12-12-12h-64c-6.6 0-12 5.4-12 12z"] +}; +var faArrowAltCircleLeft = { + prefix: 'fas', + iconName: 'arrow-alt-circle-left', + icon: [512, 512, [], "f359", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm116-292H256v-70.9c0-10.7-13-16.1-20.5-8.5L121.2 247.5c-4.7 4.7-4.7 12.2 0 16.9l114.3 114.9c7.6 7.6 20.5 2.2 20.5-8.5V300h116c6.6 0 12-5.4 12-12v-64c0-6.6-5.4-12-12-12z"] +}; +var faArrowAltCircleRight = { + prefix: 'fas', + iconName: 'arrow-alt-circle-right', + icon: [512, 512, [], "f35a", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zM140 300h116v70.9c0 10.7 13 16.1 20.5 8.5l114.3-114.9c4.7-4.7 4.7-12.2 0-16.9l-114.3-115c-7.6-7.6-20.5-2.2-20.5 8.5V212H140c-6.6 0-12 5.4-12 12v64c0 6.6 5.4 12 12 12z"] +}; +var faArrowAltCircleUp = { + prefix: 'fas', + iconName: 'arrow-alt-circle-up', + icon: [512, 512, [], "f35b", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm292 116V256h70.9c10.7 0 16.1-13 8.5-20.5L264.5 121.2c-4.7-4.7-12.2-4.7-16.9 0l-115 114.3c-7.6 7.6-2.2 20.5 8.5 20.5H212v116c0 6.6 5.4 12 12 12h64c6.6 0 12-5.4 12-12z"] +}; +var faArrowCircleDown = { + prefix: 'fas', + iconName: 'arrow-circle-down', + icon: [512, 512, [], "f0ab", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-143.6-28.9L288 302.6V120c0-13.3-10.7-24-24-24h-16c-13.3 0-24 10.7-24 24v182.6l-72.4-75.5c-9.3-9.7-24.8-9.9-34.3-.4l-10.9 11c-9.4 9.4-9.4 24.6 0 33.9L239 404.3c9.4 9.4 24.6 9.4 33.9 0l132.7-132.7c9.4-9.4 9.4-24.6 0-33.9l-10.9-11c-9.5-9.5-25-9.3-34.3.4z"] +}; +var faArrowCircleLeft = { + prefix: 'fas', + iconName: 'arrow-circle-left', + icon: [512, 512, [], "f0a8", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zm28.9-143.6L209.4 288H392c13.3 0 24-10.7 24-24v-16c0-13.3-10.7-24-24-24H209.4l75.5-72.4c9.7-9.3 9.9-24.8.4-34.3l-11-10.9c-9.4-9.4-24.6-9.4-33.9 0L107.7 239c-9.4 9.4-9.4 24.6 0 33.9l132.7 132.7c9.4 9.4 24.6 9.4 33.9 0l11-10.9c9.5-9.5 9.3-25-.4-34.3z"] +}; +var faArrowCircleRight = { + prefix: 'fas', + iconName: 'arrow-circle-right', + icon: [512, 512, [], "f0a9", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm-28.9 143.6l75.5 72.4H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h182.6l-75.5 72.4c-9.7 9.3-9.9 24.8-.4 34.3l11 10.9c9.4 9.4 24.6 9.4 33.9 0L404.3 273c9.4-9.4 9.4-24.6 0-33.9L271.6 106.3c-9.4-9.4-24.6-9.4-33.9 0l-11 10.9c-9.5 9.6-9.3 25.1.4 34.4z"] +}; +var faArrowCircleUp = { + prefix: 'fas', + iconName: 'arrow-circle-up', + icon: [512, 512, [], "f0aa", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm143.6 28.9l72.4-75.5V392c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24V209.4l72.4 75.5c9.3 9.7 24.8 9.9 34.3.4l10.9-11c9.4-9.4 9.4-24.6 0-33.9L273 107.7c-9.4-9.4-24.6-9.4-33.9 0L106.3 240.4c-9.4 9.4-9.4 24.6 0 33.9l10.9 11c9.6 9.5 25.1 9.3 34.4-.4z"] +}; +var faArrowDown = { + prefix: 'fas', + iconName: 'arrow-down', + icon: [448, 512, [], "f063", "M413.1 222.5l22.2 22.2c9.4 9.4 9.4 24.6 0 33.9L241 473c-9.4 9.4-24.6 9.4-33.9 0L12.7 278.6c-9.4-9.4-9.4-24.6 0-33.9l22.2-22.2c9.5-9.5 25-9.3 34.3.4L184 343.4V56c0-13.3 10.7-24 24-24h32c13.3 0 24 10.7 24 24v287.4l114.8-120.5c9.3-9.8 24.8-10 34.3-.4z"] +}; +var faArrowLeft = { + prefix: 'fas', + iconName: 'arrow-left', + icon: [448, 512, [], "f060", "M257.5 445.1l-22.2 22.2c-9.4 9.4-24.6 9.4-33.9 0L7 273c-9.4-9.4-9.4-24.6 0-33.9L201.4 44.7c9.4-9.4 24.6-9.4 33.9 0l22.2 22.2c9.5 9.5 9.3 25-.4 34.3L136.6 216H424c13.3 0 24 10.7 24 24v32c0 13.3-10.7 24-24 24H136.6l120.5 114.8c9.8 9.3 10 24.8.4 34.3z"] +}; +var faArrowRight = { + prefix: 'fas', + iconName: 'arrow-right', + icon: [448, 512, [], "f061", "M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z"] +}; +var faArrowUp = { + prefix: 'fas', + iconName: 'arrow-up', + icon: [448, 512, [], "f062", "M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"] +}; +var faArrowsAlt = { + prefix: 'fas', + iconName: 'arrows-alt', + icon: [512, 512, [], "f0b2", "M352.201 425.775l-79.196 79.196c-9.373 9.373-24.568 9.373-33.941 0l-79.196-79.196c-15.119-15.119-4.411-40.971 16.971-40.97h51.162L228 284H127.196v51.162c0 21.382-25.851 32.09-40.971 16.971L7.029 272.937c-9.373-9.373-9.373-24.569 0-33.941L86.225 159.8c15.119-15.119 40.971-4.411 40.971 16.971V228H228V127.196h-51.23c-21.382 0-32.09-25.851-16.971-40.971l79.196-79.196c9.373-9.373 24.568-9.373 33.941 0l79.196 79.196c15.119 15.119 4.411 40.971-16.971 40.971h-51.162V228h100.804v-51.162c0-21.382 25.851-32.09 40.97-16.971l79.196 79.196c9.373 9.373 9.373 24.569 0 33.941L425.773 352.2c-15.119 15.119-40.971 4.411-40.97-16.971V284H284v100.804h51.23c21.382 0 32.09 25.851 16.971 40.971z"] +}; +var faArrowsAltH = { + prefix: 'fas', + iconName: 'arrows-alt-h', + icon: [512, 512, [], "f337", "M377.941 169.941V216H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.568 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296h243.882v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.568 0-33.941l-86.059-86.059c-15.119-15.12-40.971-4.412-40.971 16.97z"] +}; +var faArrowsAltV = { + prefix: 'fas', + iconName: 'arrows-alt-v', + icon: [256, 512, [], "f338", "M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"] +}; +var faAssistiveListeningSystems = { + prefix: 'fas', + iconName: 'assistive-listening-systems', + icon: [512, 512, [], "f2a2", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm-80 236c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM32 448c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm480-187.993c0-1.518-.012-3.025-.045-4.531C510.076 140.525 436.157 38.47 327.994 1.511c-14.633-4.998-30.549 2.809-35.55 17.442-5 14.633 2.81 30.549 17.442 35.55 85.906 29.354 144.61 110.513 146.077 201.953l.003.188c.026 1.118.033 2.236.033 3.363 0 15.464 12.536 28 28 28s28.001-12.536 28.001-28zM152.971 439.029l-80-80L39.03 392.97l80 80 33.941-33.941z"] +}; +var faAsterisk = { + prefix: 'fas', + iconName: 'asterisk', + icon: [512, 512, [], "f069", "M478.21 334.093L336 256l142.21-78.093c11.795-6.477 15.961-21.384 9.232-33.037l-19.48-33.741c-6.728-11.653-21.72-15.499-33.227-8.523L296 186.718l3.475-162.204C299.763 11.061 288.937 0 275.48 0h-38.96c-13.456 0-24.283 11.061-23.994 24.514L216 186.718 77.265 102.607c-11.506-6.976-26.499-3.13-33.227 8.523l-19.48 33.741c-6.728 11.653-2.562 26.56 9.233 33.037L176 256 33.79 334.093c-11.795 6.477-15.961 21.384-9.232 33.037l19.48 33.741c6.728 11.653 21.721 15.499 33.227 8.523L216 325.282l-3.475 162.204C212.237 500.939 223.064 512 236.52 512h38.961c13.456 0 24.283-11.061 23.995-24.514L296 325.282l138.735 84.111c11.506 6.976 26.499 3.13 33.227-8.523l19.48-33.741c6.728-11.653 2.563-26.559-9.232-33.036z"] +}; +var faAt = { + prefix: 'fas', + iconName: 'at', + icon: [512, 512, [], "f1fa", "M256 8C118.941 8 8 118.919 8 256c0 137.059 110.919 248 248 248 48.154 0 95.342-14.14 135.408-40.223 12.005-7.815 14.625-24.288 5.552-35.372l-10.177-12.433c-7.671-9.371-21.179-11.667-31.373-5.129C325.92 429.757 291.314 440 256 440c-101.458 0-184-82.542-184-184S154.542 72 256 72c100.139 0 184 57.619 184 160 0 38.786-21.093 79.742-58.17 83.693-17.349-.454-16.91-12.857-13.476-30.024l23.433-121.11C394.653 149.75 383.308 136 368.225 136h-44.981a13.518 13.518 0 0 0-13.432 11.993l-.01.092c-14.697-17.901-40.448-21.775-59.971-21.775-74.58 0-137.831 62.234-137.831 151.46 0 65.303 36.785 105.87 96 105.87 26.984 0 57.369-15.637 74.991-38.333 9.522 34.104 40.613 34.103 70.71 34.103C462.609 379.41 504 307.798 504 232 504 95.653 394.023 8 256 8zm-21.68 304.43c-22.249 0-36.07-15.623-36.07-40.771 0-44.993 30.779-72.729 58.63-72.729 22.292 0 35.601 15.241 35.601 40.77 0 45.061-33.875 72.73-58.161 72.73z"] +}; +var faAtlas = { + prefix: 'fas', + iconName: 'atlas', + icon: [448, 512, [], "f558", "M318.38 208h-39.09c-1.49 27.03-6.54 51.35-14.21 70.41 27.71-13.24 48.02-39.19 53.3-70.41zm0-32c-5.29-31.22-25.59-57.17-53.3-70.41 7.68 19.06 12.72 43.38 14.21 70.41h39.09zM224 97.31c-7.69 7.45-20.77 34.42-23.43 78.69h46.87c-2.67-44.26-15.75-71.24-23.44-78.69zm-41.08 8.28c-27.71 13.24-48.02 39.19-53.3 70.41h39.09c1.49-27.03 6.53-51.35 14.21-70.41zm0 172.82c-7.68-19.06-12.72-43.38-14.21-70.41h-39.09c5.28 31.22 25.59 57.17 53.3 70.41zM247.43 208h-46.87c2.66 44.26 15.74 71.24 23.43 78.69 7.7-7.45 20.78-34.43 23.44-78.69zM448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM224 64c70.69 0 128 57.31 128 128s-57.31 128-128 128S96 262.69 96 192 153.31 64 224 64zm160 384H96c-19.2 0-32-12.8-32-32s16-32 32-32h288v64z"] +}; +var faAtom = { + prefix: 'fas', + iconName: 'atom', + icon: [448, 512, [], "f5d2", "M223.99908,224a32,32,0,1,0,32.00782,32A32.06431,32.06431,0,0,0,223.99908,224Zm214.172-96c-10.877-19.5-40.50979-50.75-116.27544-41.875C300.39168,34.875,267.63386,0,223.99908,0s-76.39066,34.875-97.89653,86.125C50.3369,77.375,20.706,108.5,9.82907,128-6.54984,157.375-5.17484,201.125,34.958,256-5.17484,310.875-6.54984,354.625,9.82907,384c29.13087,52.375,101.64652,43.625,116.27348,41.875C147.60842,477.125,180.36429,512,223.99908,512s76.3926-34.875,97.89652-86.125c14.62891,1.75,87.14456,10.5,116.27544-41.875C454.55,354.625,453.175,310.875,413.04017,256,453.175,201.125,454.55,157.375,438.171,128ZM63.33886,352c-4-7.25-.125-24.75,15.00391-48.25,6.87695,6.5,14.12891,12.875,21.88087,19.125,1.625,13.75,4,27.125,6.75,40.125C82.34472,363.875,67.09081,358.625,63.33886,352Zm36.88478-162.875c-7.752,6.25-15.00392,12.625-21.88087,19.125-15.12891-23.5-19.00392-41-15.00391-48.25,3.377-6.125,16.37891-11.5,37.88478-11.5,1.75,0,3.875.375,5.75.375C104.09864,162.25,101.84864,175.625,100.22364,189.125ZM223.99908,64c9.50195,0,22.25586,13.5,33.88282,37.25-11.252,3.75-22.50391,8-33.88282,12.875-11.377-4.875-22.62892-9.125-33.88283-12.875C201.74516,77.5,214.49712,64,223.99908,64Zm0,384c-9.502,0-22.25392-13.5-33.88283-37.25,11.25391-3.75,22.50587-8,33.88283-12.875C235.378,402.75,246.62994,407,257.8819,410.75,246.25494,434.5,233.501,448,223.99908,448Zm0-112a80,80,0,1,1,80-80A80.00023,80.00023,0,0,1,223.99908,336ZM384.6593,352c-3.625,6.625-19.00392,11.875-43.63479,11,2.752-13,5.127-26.375,6.752-40.125,7.75195-6.25,15.00391-12.625,21.87891-19.125C384.7843,327.25,388.6593,344.75,384.6593,352ZM369.65538,208.25c-6.875-6.5-14.127-12.875-21.87891-19.125-1.625-13.5-3.875-26.875-6.752-40.25,1.875,0,4.002-.375,5.752-.375,21.50391,0,34.50782,5.375,37.88283,11.5C388.6593,167.25,384.7843,184.75,369.65538,208.25Z"] +}; +var faAudioDescription = { + prefix: 'fas', + iconName: 'audio-description', + icon: [512, 512, [], "f29e", "M162.925 238.709l8.822 30.655h-25.606l9.041-30.652c1.277-4.421 2.651-9.994 3.872-15.245 1.22 5.251 2.594 10.823 3.871 15.242zm166.474-32.099h-14.523v98.781h14.523c29.776 0 46.175-17.678 46.175-49.776 0-32.239-17.49-49.005-46.175-49.005zM512 112v288c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48zM245.459 336.139l-57.097-168A12.001 12.001 0 0 0 177 160h-35.894a12.001 12.001 0 0 0-11.362 8.139l-57.097 168C70.003 343.922 75.789 352 84.009 352h29.133a12 12 0 0 0 11.535-8.693l8.574-29.906h51.367l8.793 29.977A12 12 0 0 0 204.926 352h29.172c8.22 0 14.006-8.078 11.361-15.861zm184.701-80.525c0-58.977-37.919-95.614-98.96-95.614h-57.366c-6.627 0-12 5.373-12 12v168c0 6.627 5.373 12 12 12H331.2c61.041 0 98.96-36.933 98.96-96.386z"] +}; +var faAward = { + prefix: 'fas', + iconName: 'award', + icon: [384, 512, [], "f559", "M97.12 362.63c-8.69-8.69-4.16-6.24-25.12-11.85-9.51-2.55-17.87-7.45-25.43-13.32L1.2 448.7c-4.39 10.77 3.81 22.47 15.43 22.03l52.69-2.01L105.56 507c8 8.44 22.04 5.81 26.43-4.96l52.05-127.62c-10.84 6.04-22.87 9.58-35.31 9.58-19.5 0-37.82-7.59-51.61-21.37zM382.8 448.7l-45.37-111.24c-7.56 5.88-15.92 10.77-25.43 13.32-21.07 5.64-16.45 3.18-25.12 11.85-13.79 13.78-32.12 21.37-51.62 21.37-12.44 0-24.47-3.55-35.31-9.58L252 502.04c4.39 10.77 18.44 13.4 26.43 4.96l36.25-38.28 52.69 2.01c11.62.44 19.82-11.27 15.43-22.03zM263 340c15.28-15.55 17.03-14.21 38.79-20.14 13.89-3.79 24.75-14.84 28.47-28.98 7.48-28.4 5.54-24.97 25.95-45.75 10.17-10.35 14.14-25.44 10.42-39.58-7.47-28.38-7.48-24.42 0-52.83 3.72-14.14-.25-29.23-10.42-39.58-20.41-20.78-18.47-17.36-25.95-45.75-3.72-14.14-14.58-25.19-28.47-28.98-27.88-7.61-24.52-5.62-44.95-26.41-10.17-10.35-25-14.4-38.89-10.61-27.87 7.6-23.98 7.61-51.9 0-13.89-3.79-28.72.25-38.89 10.61-20.41 20.78-17.05 18.8-44.94 26.41-13.89 3.79-24.75 14.84-28.47 28.98-7.47 28.39-5.54 24.97-25.95 45.75-10.17 10.35-14.15 25.44-10.42 39.58 7.47 28.36 7.48 24.4 0 52.82-3.72 14.14.25 29.23 10.42 39.59 20.41 20.78 18.47 17.35 25.95 45.75 3.72 14.14 14.58 25.19 28.47 28.98C104.6 325.96 106.27 325 121 340c13.23 13.47 33.84 15.88 49.74 5.82a39.676 39.676 0 0 1 42.53 0c15.89 10.06 36.5 7.65 49.73-5.82zM97.66 175.96c0-53.03 42.24-96.02 94.34-96.02s94.34 42.99 94.34 96.02-42.24 96.02-94.34 96.02-94.34-42.99-94.34-96.02z"] +}; +var faBaby = { + prefix: 'fas', + iconName: 'baby', + icon: [384, 512, [], "f77c", "M192 160c44.2 0 80-35.8 80-80S236.2 0 192 0s-80 35.8-80 80 35.8 80 80 80zm-53.4 248.8l25.6-32-61.5-51.2L56.8 383c-11.4 14.2-11.7 34.4-.8 49l48 64c7.9 10.5 19.9 16 32 16 8.3 0 16.8-2.6 24-8 17.7-13.2 21.2-38.3 8-56l-29.4-39.2zm142.7-83.2l-61.5 51.2 25.6 32L216 448c-13.2 17.7-9.7 42.8 8 56 7.2 5.4 15.6 8 24 8 12.2 0 24.2-5.5 32-16l48-64c10.9-14.6 10.6-34.8-.8-49l-45.9-57.4zM376.7 145c-12.7-18.1-37.6-22.4-55.7-9.8l-40.6 28.5c-52.7 37-124.2 37-176.8 0L63 135.3C44.9 122.6 20 127 7.3 145-5.4 163.1-1 188 17 200.7l40.6 28.5c17 11.9 35.4 20.9 54.4 27.9V288h160v-30.8c19-7 37.4-16 54.4-27.9l40.6-28.5c18.1-12.8 22.4-37.7 9.7-55.8z"] +}; +var faBabyCarriage = { + prefix: 'fas', + iconName: 'baby-carriage', + icon: [512, 512, [], "f77d", "M144.8 17c-11.3-17.8-37.2-22.8-54-9.4C35.3 51.9 0 118 0 192h256L144.8 17zM496 96h-48c-35.3 0-64 28.7-64 64v64H0c0 50.6 23 96.4 60.3 130.7C25.7 363.6 0 394.7 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-8.9-1.8-17.2-4.4-25.2 21.6 5.9 44.6 9.2 68.4 9.2s46.9-3.3 68.4-9.2c-2.7 8-4.4 16.3-4.4 25.2 0 44.2 35.8 80 80 80s80-35.8 80-80c0-37.3-25.7-68.4-60.3-77.3C425 320.4 448 274.6 448 224v-64h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM80 464c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm320-32c0 17.6-14.4 32-32 32s-32-14.4-32-32 14.4-32 32-32 32 14.4 32 32z"] +}; +var faBackspace = { + prefix: 'fas', + iconName: 'backspace', + icon: [640, 512, [], "f55a", "M576 64H205.26A63.97 63.97 0 0 0 160 82.75L9.37 233.37c-12.5 12.5-12.5 32.76 0 45.25L160 429.25c12 12 28.28 18.75 45.25 18.75H576c35.35 0 64-28.65 64-64V128c0-35.35-28.65-64-64-64zm-84.69 254.06c6.25 6.25 6.25 16.38 0 22.63l-22.62 22.62c-6.25 6.25-16.38 6.25-22.63 0L384 301.25l-62.06 62.06c-6.25 6.25-16.38 6.25-22.63 0l-22.62-22.62c-6.25-6.25-6.25-16.38 0-22.63L338.75 256l-62.06-62.06c-6.25-6.25-6.25-16.38 0-22.63l22.62-22.62c6.25-6.25 16.38-6.25 22.63 0L384 210.75l62.06-62.06c6.25-6.25 16.38-6.25 22.63 0l22.62 22.62c6.25 6.25 6.25 16.38 0 22.63L429.25 256l62.06 62.06z"] +}; +var faBackward = { + prefix: 'fas', + iconName: 'backward', + icon: [512, 512, [], "f04a", "M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z"] +}; +var faBacon = { + prefix: 'fas', + iconName: 'bacon', + icon: [576, 512, [], "f7e5", "M218.92 336.39c34.89-34.89 44.2-59.7 54.05-86 10.61-28.29 21.59-57.54 61.37-97.34s69.05-50.77 97.35-61.38c23.88-9 46.64-17.68 76.79-45.37L470.81 8.91a31 31 0 0 0-40.18-2.83c-13.64 10.1-25.15 14.39-41 20.3C247 79.52 209.26 191.29 200.65 214.1c-29.75 78.83-89.55 94.68-98.72 98.09-24.86 9.26-54.73 20.38-91.07 50.36C-3 374-3.63 395 9.07 407.61l35.76 35.51C80 410.52 107 400.15 133 390.39c26.27-9.84 51.06-19.12 85.92-54zm348-232l-35.75-35.51c-35.19 32.63-62.18 43-88.25 52.79-26.26 9.85-51.06 19.16-85.95 54s-44.19 59.69-54 86C292.33 290 281.34 319.22 241.55 359s-69 50.73-97.3 61.32c-23.86 9-46.61 17.66-76.72 45.33l37.68 37.43a31 31 0 0 0 40.18 2.82c13.6-10.06 25.09-14.34 40.94-20.24 142.2-53 180-164.1 188.94-187.69C405 219.18 464.8 203.3 474 199.86c24.87-9.27 54.74-20.4 91.11-50.41 13.89-11.4 14.52-32.45 1.82-45.05z"] +}; +var faBacteria = { + prefix: 'fas', + iconName: 'bacteria', + icon: [640, 512, [], "e059", "M272.35,226.4A17.71,17.71,0,0,0,281.46,203l-4-9.08a121.29,121.29,0,0,1,12.36-3.08A83.34,83.34,0,0,0,323.57,177l10,9a17.76,17.76,0,1,0,23.92-26.27l-9.72-8.76a83.12,83.12,0,0,0,11.65-48.18l11.85-3.51a17.73,17.73,0,1,0-10.15-34l-11.34,3.36a84,84,0,0,0-36.38-35.57l2.84-10.85a17.8,17.8,0,0,0-34.47-8.93l-2.82,10.78a83.25,83.25,0,0,0-16.74,1.1C250.83,27,240,30.22,229.1,33.39l-3.38-9.46a17.8,17.8,0,0,0-33.56,11.89l3.49,9.8a286.74,286.74,0,0,0-43.94,23.57l-6.32-8.43a17.9,17.9,0,0,0-24.94-3.6A17.69,17.69,0,0,0,116.84,82l6.45,8.61a286.59,286.59,0,0,0-34.95,35.33l-8.82-6.42a17.84,17.84,0,0,0-24.89,3.86,17.66,17.66,0,0,0,3.88,24.77l8.88,6.47a286.6,286.6,0,0,0-23,43.91l-10.48-3.59a17.73,17.73,0,1,0-11.59,33.52L32.67,232c-2.79,10-5.79,19.84-7.52,30.22a83.16,83.16,0,0,0-.82,19l-11.58,3.43a17.73,17.73,0,1,0,10.13,34l11.27-3.33a83.51,83.51,0,0,0,36.39,35.43l-2.88,11.06a17.81,17.81,0,0,0,34.48,8.92l2.87-11c1,0,2.07.26,3.1.26a83.39,83.39,0,0,0,45.65-13.88l8.59,8.8a17.77,17.77,0,0,0,25.56-24.7l-9.14-9.37a83.41,83.41,0,0,0,12.08-31.05,119.08,119.08,0,0,1,3.87-15.53l9,4.22a17.74,17.74,0,1,0,15.15-32.09l-8.8-4.11c.67-1,1.2-2.08,1.9-3.05a119.89,119.89,0,0,1,7.87-9.41,121.73,121.73,0,0,1,11.65-11.4,119.49,119.49,0,0,1,9.94-7.82c1.12-.77,2.32-1.42,3.47-2.15l3.92,8.85a17.86,17.86,0,0,0,16.32,10.58A18.14,18.14,0,0,0,272.35,226.4ZM128,256a32,32,0,1,1,32-32A32,32,0,0,1,128,256Zm80-96a16,16,0,1,1,16-16A16,16,0,0,1,208,160Zm431.26,45.3a17.79,17.79,0,0,0-17.06-12.69,17.55,17.55,0,0,0-5.08.74l-11.27,3.33a83.61,83.61,0,0,0-36.39-35.43l2.88-11.06a17.81,17.81,0,0,0-34.48-8.91l-2.87,11c-1,0-2.07-.26-3.1-.26a83.32,83.32,0,0,0-45.65,13.89l-8.59-8.81a17.77,17.77,0,0,0-25.56,24.7l9.14,9.37a83.28,83.28,0,0,0-12.08,31.06,119.34,119.34,0,0,1-3.87,15.52l-9-4.22a17.74,17.74,0,1,0-15.15,32.09l8.8,4.11c-.67,1-1.2,2.08-1.89,3.05a117.71,117.71,0,0,1-7.94,9.47,119,119,0,0,1-11.57,11.33,121.59,121.59,0,0,1-10,7.83c-1.12.77-2.32,1.42-3.47,2.15l-3.92-8.85a17.86,17.86,0,0,0-16.32-10.58,18.14,18.14,0,0,0-7.18,1.5A17.71,17.71,0,0,0,358.54,309l4,9.08a118.71,118.71,0,0,1-12.36,3.08,83.34,83.34,0,0,0-33.77,13.9l-10-9a17.77,17.77,0,1,0-23.92,26.28l9.72,8.75a83.12,83.12,0,0,0-11.65,48.18l-11.86,3.51a17.73,17.73,0,1,0,10.16,34l11.34-3.36A84,84,0,0,0,326.61,479l-2.84,10.85a17.8,17.8,0,0,0,34.47,8.93L361.06,488a83.3,83.3,0,0,0,16.74-1.1c11.37-1.89,22.24-5.07,33.1-8.24l3.38,9.46a17.8,17.8,0,0,0,33.56-11.89l-3.49-9.79a287.66,287.66,0,0,0,43.94-23.58l6.32,8.43a17.88,17.88,0,0,0,24.93,3.6A17.67,17.67,0,0,0,523.16,430l-6.45-8.61a287.37,287.37,0,0,0,34.95-35.34l8.82,6.42a17.76,17.76,0,1,0,21-28.63l-8.88-6.46a287.17,287.17,0,0,0,23-43.92l10.48,3.59a17.73,17.73,0,1,0,11.59-33.52L607.33,280c2.79-10,5.79-19.84,7.52-30.21a83.27,83.27,0,0,0,.82-19.05l11.58-3.43A17.7,17.7,0,0,0,639.26,205.3ZM416,416a32,32,0,1,1,32-32A32,32,0,0,1,416,416Z"] +}; +var faBacterium = { + prefix: 'fas', + iconName: 'bacterium', + icon: [512, 512, [], "e05a", "M511,102.93A23.76,23.76,0,0,0,481.47,87l-15.12,4.48a111.85,111.85,0,0,0-48.5-47.42l3.79-14.47a23.74,23.74,0,0,0-46-11.91l-3.76,14.37a111.94,111.94,0,0,0-22.33,1.47,386.74,386.74,0,0,0-44.33,10.41l-4.3-12a23.74,23.74,0,0,0-44.75,15.85l4.3,12.05a383.4,383.4,0,0,0-58.69,31.83l-8-10.63a23.85,23.85,0,0,0-33.24-4.8,23.57,23.57,0,0,0-4.83,33.09l8,10.63a386.14,386.14,0,0,0-46.7,47.44l-11-8a23.68,23.68,0,1,0-28,38.17l11.09,8.06a383.45,383.45,0,0,0-30.92,58.75l-12.93-4.43a23.65,23.65,0,1,0-15.47,44.69l13,4.48a385.81,385.81,0,0,0-9.3,40.53A111.58,111.58,0,0,0,32.44,375L17,379.56a23.64,23.64,0,0,0,13.51,45.31l15-4.44a111.49,111.49,0,0,0,48.53,47.24l-3.85,14.75a23.66,23.66,0,0,0,17,28.83,24.7,24.7,0,0,0,6,.75,23.73,23.73,0,0,0,23-17.7L140,479.67c1.37.05,2.77.35,4.13.35A111.22,111.22,0,0,0,205,461.5l11.45,11.74a23.7,23.7,0,0,0,34.08-32.93l-12.19-12.5a111,111,0,0,0,16.11-41.4,158.69,158.69,0,0,1,5.16-20.71l12,5.64a23.66,23.66,0,1,0,20.19-42.79l-11.72-5.49c.89-1.32,1.59-2.77,2.52-4.06a157.86,157.86,0,0,1,10.46-12.49,159.5,159.5,0,0,1,15.59-15.28,162.18,162.18,0,0,1,13.23-10.4c1.5-1,3.1-1.89,4.63-2.87l5.23,11.8a23.74,23.74,0,0,0,43.48-19.08l-5.36-12.11a158.87,158.87,0,0,1,16.49-4.1,111,111,0,0,0,45-18.54l13.33,12a23.69,23.69,0,1,0,31.88-35l-12.94-11.67A110.83,110.83,0,0,0,479.21,137L495,132.32A23.61,23.61,0,0,0,511,102.93ZM160,368a48,48,0,1,1,48-48A48,48,0,0,1,160,368Zm80-136a24,24,0,1,1,24-24A24,24,0,0,1,240,232Z"] +}; +var faBahai = { + prefix: 'fas', + iconName: 'bahai', + icon: [512, 512, [], "f666", "M496.25 202.52l-110-15.44 41.82-104.34c6.67-16.64-11.6-32.18-26.59-22.63L307.44 120 273.35 12.82C270.64 4.27 263.32 0 256 0c-7.32 0-14.64 4.27-17.35 12.82l-34.09 107.19-94.04-59.89c-14.99-9.55-33.25 5.99-26.59 22.63l41.82 104.34-110 15.43c-17.54 2.46-21.68 26.27-6.03 34.67l98.16 52.66-74.48 83.54c-10.92 12.25-1.72 30.93 13.29 30.93 1.31 0 2.67-.14 4.07-.45l108.57-23.65-4.11 112.55c-.43 11.65 8.87 19.22 18.41 19.22 5.15 0 10.39-2.21 14.2-7.18l68.18-88.9 68.18 88.9c3.81 4.97 9.04 7.18 14.2 7.18 9.54 0 18.84-7.57 18.41-19.22l-4.11-112.55 108.57 23.65c17.36 3.76 29.21-17.2 17.35-30.49l-74.48-83.54 98.16-52.66c15.64-8.39 11.5-32.2-6.04-34.66zM338.51 311.68l-51.89-11.3 1.97 53.79L256 311.68l-32.59 42.49 1.96-53.79-51.89 11.3 35.6-39.93-46.92-25.17 52.57-7.38-19.99-49.87 44.95 28.62L256 166.72l16.29 51.23 44.95-28.62-19.99 49.87 52.57 7.38-46.92 25.17 35.61 39.93z"] +}; +var faBalanceScale = { + prefix: 'fas', + iconName: 'balance-scale', + icon: [640, 512, [], "f24e", "M256 336h-.02c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0C-2.06 328.75.02 320.33.02 336H0c0 44.18 57.31 80 128 80s128-35.82 128-80zM128 176l72 144H56l72-144zm511.98 160c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 320l72-144 72 144H440zm88 128H352V153.25c23.51-10.29 41.16-31.48 46.39-57.25H528c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H383.64C369.04 12.68 346.09 0 320 0s-49.04 12.68-63.64 32H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h129.61c5.23 25.76 22.87 46.96 46.39 57.25V448H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"] +}; +var faBalanceScaleLeft = { + prefix: 'fas', + iconName: 'balance-scale-left', + icon: [640, 512, [], "f515", "M528 448H352V153.25c20.42-8.94 36.1-26.22 43.38-47.47l132-44.26c8.38-2.81 12.89-11.88 10.08-20.26l-10.17-30.34C524.48 2.54 515.41-1.97 507.03.84L389.11 40.37C375.3 16.36 349.69 0 320 0c-44.18 0-80 35.82-80 80 0 3.43.59 6.71 1.01 10.03l-128.39 43.05c-8.38 2.81-12.89 11.88-10.08 20.26l10.17 30.34c2.81 8.38 11.88 12.89 20.26 10.08l142.05-47.63c4.07 2.77 8.43 5.12 12.99 7.12V496c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16v-32c-.01-8.84-7.17-16-16.01-16zm111.98-144c0-16.18 1.34-8.73-85.05-181.51-17.65-35.29-68.19-35.36-85.87 0-87.12 174.26-85.04 165.84-85.04 181.51H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02zM440 288l72-144 72 144H440zm-269.07-37.51c-17.65-35.29-68.19-35.36-85.87 0C-2.06 424.75.02 416.33.02 432H0c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-16.18 1.34-8.73-85.05-181.51zM56 416l72-144 72 144H56z"] +}; +var faBalanceScaleRight = { + prefix: 'fas', + iconName: 'balance-scale-right', + icon: [640, 512, [], "f516", "M96 464v32c0 8.84 7.16 16 16 16h224c8.84 0 16-7.16 16-16V153.25c4.56-2 8.92-4.35 12.99-7.12l142.05 47.63c8.38 2.81 17.45-1.71 20.26-10.08l10.17-30.34c2.81-8.38-1.71-17.45-10.08-20.26l-128.4-43.05c.42-3.32 1.01-6.6 1.01-10.03 0-44.18-35.82-80-80-80-29.69 0-55.3 16.36-69.11 40.37L132.96.83c-8.38-2.81-17.45 1.71-20.26 10.08l-10.17 30.34c-2.81 8.38 1.71 17.45 10.08 20.26l132 44.26c7.28 21.25 22.96 38.54 43.38 47.47V448H112c-8.84 0-16 7.16-16 16zM0 304c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0C-1.32 295.27.02 287.82.02 304H0zm56-16l72-144 72 144H56zm328.02 144H384c0 44.18 57.31 80 128 80s128-35.82 128-80h-.02c0-15.67 2.08-7.25-85.05-181.51-17.68-35.36-68.22-35.29-85.87 0-86.38 172.78-85.04 165.33-85.04 181.51zM440 416l72-144 72 144H440z"] +}; +var faBan = { + prefix: 'fas', + iconName: 'ban', + icon: [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"] +}; +var faBandAid = { + prefix: 'fas', + iconName: 'band-aid', + icon: [640, 512, [], "f462", "M0 160v192c0 35.3 28.7 64 64 64h96V96H64c-35.3 0-64 28.7-64 64zm576-64h-96v320h96c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64zM192 416h256V96H192v320zm176-232c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm0 96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24z"] +}; +var faBarcode = { + prefix: 'fas', + iconName: 'barcode', + icon: [512, 512, [], "f02a", "M0 448V64h18v384H0zm26.857-.273V64H36v383.727h-9.143zm27.143 0V64h8.857v383.727H54zm44.857 0V64h8.857v383.727h-8.857zm36 0V64h17.714v383.727h-17.714zm44.857 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm18 0V64h8.857v383.727h-8.857zm35.715 0V64h18v383.727h-18zm44.857 0V64h18v383.727h-18zm35.999 0V64h18.001v383.727h-18.001zm36.001 0V64h18.001v383.727h-18.001zm26.857 0V64h18v383.727h-18zm45.143 0V64h26.857v383.727h-26.857zm35.714 0V64h9.143v383.727H476zm18 .273V64h18v384h-18z"] +}; +var faBars = { + prefix: 'fas', + iconName: 'bars', + icon: [448, 512, [], "f0c9", "M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"] +}; +var faBaseballBall = { + prefix: 'fas', + iconName: 'baseball-ball', + icon: [496, 512, [], "f433", "M368.5 363.9l28.8-13.9c11.1 22.9 26 43.2 44.1 60.9 34-42.5 54.5-96.3 54.5-154.9 0-58.5-20.4-112.2-54.2-154.6-17.8 17.3-32.6 37.1-43.6 59.5l-28.7-14.1c12.8-26 30-49 50.8-69C375.6 34.7 315 8 248 8 181.1 8 120.5 34.6 75.9 77.7c20.7 19.9 37.9 42.9 50.7 68.8l-28.7 14.1c-11-22.3-25.7-42.1-43.5-59.4C20.4 143.7 0 197.4 0 256c0 58.6 20.4 112.3 54.4 154.7 18.2-17.7 33.2-38 44.3-61l28.8 13.9c-12.9 26.7-30.3 50.3-51.5 70.7 44.5 43.1 105.1 69.7 172 69.7 66.8 0 127.3-26.5 171.9-69.5-21.1-20.4-38.5-43.9-51.4-70.6zm-228.3-32l-30.5-9.8c14.9-46.4 12.7-93.8-.6-134l30.4-10c15 45.6 18 99.9.7 153.8zm216.3-153.4l30.4 10c-13.2 40.1-15.5 87.5-.6 134l-30.5 9.8c-17.3-54-14.3-108.3.7-153.8z"] +}; +var faBasketballBall = { + prefix: 'fas', + iconName: 'basketball-ball', + icon: [496, 512, [], "f434", "M212.3 10.3c-43.8 6.3-86.2 24.1-122.2 53.8l77.4 77.4c27.8-35.8 43.3-81.2 44.8-131.2zM248 222L405.9 64.1c-42.4-35-93.6-53.5-145.5-56.1-1.2 63.9-21.5 122.3-58.7 167.7L248 222zM56.1 98.1c-29.7 36-47.5 78.4-53.8 122.2 50-1.5 95.5-17 131.2-44.8L56.1 98.1zm272.2 204.2c45.3-37.1 103.7-57.4 167.7-58.7-2.6-51.9-21.1-103.1-56.1-145.5L282 256l46.3 46.3zM248 290L90.1 447.9c42.4 34.9 93.6 53.5 145.5 56.1 1.3-64 21.6-122.4 58.7-167.7L248 290zm191.9 123.9c29.7-36 47.5-78.4 53.8-122.2-50.1 1.6-95.5 17.1-131.2 44.8l77.4 77.4zM167.7 209.7C122.3 246.9 63.9 267.3 0 268.4c2.6 51.9 21.1 103.1 56.1 145.5L214 256l-46.3-46.3zm116 292c43.8-6.3 86.2-24.1 122.2-53.8l-77.4-77.4c-27.7 35.7-43.2 81.2-44.8 131.2z"] +}; +var faBath = { + prefix: 'fas', + iconName: 'bath', + icon: [512, 512, [], "f2cd", "M32,384a95.4,95.4,0,0,0,32,71.09V496a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V480H384v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V455.09A95.4,95.4,0,0,0,480,384V336H32ZM496,256H80V69.25a21.26,21.26,0,0,1,36.28-15l19.27,19.26c-13.13,29.88-7.61,59.11,8.62,79.73l-.17.17A16,16,0,0,0,144,176l11.31,11.31a16,16,0,0,0,22.63,0L283.31,81.94a16,16,0,0,0,0-22.63L272,48a16,16,0,0,0-22.62,0l-.17.17c-20.62-16.23-49.83-21.75-79.73-8.62L150.22,20.28A69.25,69.25,0,0,0,32,69.25V256H16A16,16,0,0,0,0,272v16a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V272A16,16,0,0,0,496,256Z"] +}; +var faBatteryEmpty = { + prefix: 'fas', + iconName: 'battery-empty', + icon: [640, 512, [], "f244", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48z"] +}; +var faBatteryFull = { + prefix: 'fas', + iconName: 'battery-full', + icon: [640, 512, [], "f240", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-48 96H96v128h416V192z"] +}; +var faBatteryHalf = { + prefix: 'fas', + iconName: 'battery-half', + icon: [640, 512, [], "f242", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-240 96H96v128h224V192z"] +}; +var faBatteryQuarter = { + prefix: 'fas', + iconName: 'battery-quarter', + icon: [640, 512, [], "f243", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-336 96H96v128h128V192z"] +}; +var faBatteryThreeQuarters = { + prefix: 'fas', + iconName: 'battery-three-quarters', + icon: [640, 512, [], "f241", "M544 160v64h32v64h-32v64H64V160h480m16-64H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h512c26.51 0 48-21.49 48-48v-16h8c13.255 0 24-10.745 24-24V184c0-13.255-10.745-24-24-24h-8v-16c0-26.51-21.49-48-48-48zm-144 96H96v128h320V192z"] +}; +var faBed = { + prefix: 'fas', + iconName: 'bed', + icon: [640, 512, [], "f236", "M176 256c44.11 0 80-35.89 80-80s-35.89-80-80-80-80 35.89-80 80 35.89 80 80 80zm352-128H304c-8.84 0-16 7.16-16 16v144H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v352c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h512v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V240c0-61.86-50.14-112-112-112z"] +}; +var faBeer = { + prefix: 'fas', + iconName: 'beer', + icon: [448, 512, [], "f0fc", "M368 96h-48V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24v-42.11l80.606-35.977C429.396 365.063 448 336.388 448 304.86V176c0-44.112-35.888-80-80-80zm16 208.86a16.018 16.018 0 0 1-9.479 14.611L320 343.805V160h48c8.822 0 16 7.178 16 16v128.86zM208 384c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16zm-96 0c-8.836 0-16-7.164-16-16V144c0-8.836 7.164-16 16-16s16 7.164 16 16v224c0 8.836-7.164 16-16 16z"] +}; +var faBell = { + prefix: 'fas', + iconName: 'bell', + icon: [448, 512, [], "f0f3", "M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z"] +}; +var faBellSlash = { + prefix: 'fas', + iconName: 'bell-slash', + icon: [640, 512, [], "f1f6", "M633.82 458.1l-90.62-70.05c.19-1.38.8-2.66.8-4.06.05-7.55-2.61-15.27-8.61-21.71-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84c-40.33 8.38-74.66 31.07-97.59 62.57L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.35 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.42-6.97 4.17-17.02-2.81-22.45zM157.23 251.54c-8.61 67.96-36.41 93.33-52.62 110.75-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h241.92L157.23 251.54zM320 512c35.32 0 63.97-28.65 63.97-64H256.03c0 35.35 28.65 64 63.97 64z"] +}; +var faBezierCurve = { + prefix: 'fas', + iconName: 'bezier-curve', + icon: [640, 512, [], "f55b", "M368 32h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM208 88h-84.75C113.75 64.56 90.84 48 64 48 28.66 48 0 76.65 0 112s28.66 64 64 64c26.84 0 49.75-16.56 59.25-40h79.73c-55.37 32.52-95.86 87.32-109.54 152h49.4c11.3-41.61 36.77-77.21 71.04-101.56-3.7-8.08-5.88-16.99-5.88-26.44V88zm-48 232H64c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zM576 48c-26.84 0-49.75 16.56-59.25 40H432v72c0 9.45-2.19 18.36-5.88 26.44 34.27 24.35 59.74 59.95 71.04 101.56h49.4c-13.68-64.68-54.17-119.48-109.54-152h79.73c9.5 23.44 32.41 40 59.25 40 35.34 0 64-28.65 64-64s-28.66-64-64-64zm0 272h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"] +}; +var faBible = { + prefix: 'fas', + iconName: 'bible', + icon: [448, 512, [], "f647", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM144 144c0-8.84 7.16-16 16-16h48V80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v48h48c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-48v112c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V192h-48c-8.84 0-16-7.16-16-16v-32zm236.8 304H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"] +}; +var faBicycle = { + prefix: 'fas', + iconName: 'bicycle', + icon: [640, 512, [], "f206", "M512.509 192.001c-16.373-.064-32.03 2.955-46.436 8.495l-77.68-125.153A24 24 0 0 0 368.001 64h-64c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h50.649l14.896 24H256.002v-16c0-8.837-7.163-16-16-16h-87.459c-13.441 0-24.777 10.999-24.536 24.437.232 13.044 10.876 23.563 23.995 23.563h48.726l-29.417 47.52c-13.433-4.83-27.904-7.483-42.992-7.52C58.094 191.83.412 249.012.002 319.236-.413 390.279 57.055 448 128.002 448c59.642 0 109.758-40.793 123.967-96h52.033a24 24 0 0 0 20.406-11.367L410.37 201.77l14.938 24.067c-25.455 23.448-41.385 57.081-41.307 94.437.145 68.833 57.899 127.051 126.729 127.719 70.606.685 128.181-55.803 129.255-125.996 1.086-70.941-56.526-129.72-127.476-129.996zM186.75 265.772c9.727 10.529 16.673 23.661 19.642 38.228h-43.306l23.664-38.228zM128.002 400c-44.112 0-80-35.888-80-80s35.888-80 80-80c5.869 0 11.586.653 17.099 1.859l-45.505 73.509C89.715 331.327 101.213 352 120.002 352h81.3c-12.37 28.225-40.562 48-73.3 48zm162.63-96h-35.624c-3.96-31.756-19.556-59.894-42.383-80.026L237.371 184h127.547l-74.286 120zm217.057 95.886c-41.036-2.165-74.049-35.692-75.627-76.755-.812-21.121 6.633-40.518 19.335-55.263l44.433 71.586c4.66 7.508 14.524 9.816 22.032 5.156l13.594-8.437c7.508-4.66 9.817-14.524 5.156-22.032l-44.468-71.643a79.901 79.901 0 0 1 19.858-2.497c44.112 0 80 35.888 80 80-.001 45.54-38.252 82.316-84.313 79.885z"] +}; +var faBiking = { + prefix: 'fas', + iconName: 'biking', + icon: [640, 512, [], "f84a", "M400 96a48 48 0 1 0-48-48 48 48 0 0 0 48 48zm-4 121a31.9 31.9 0 0 0 20 7h64a32 32 0 0 0 0-64h-52.78L356 103a31.94 31.94 0 0 0-40.81.68l-112 96a32 32 0 0 0 3.08 50.92L288 305.12V416a32 32 0 0 0 64 0V288a32 32 0 0 0-14.25-26.62l-41.36-27.57 58.25-49.92zm116 39a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64zM128 256a128 128 0 1 0 128 128 128 128 0 0 0-128-128zm0 192a64 64 0 1 1 64-64 64 64 0 0 1-64 64z"] +}; +var faBinoculars = { + prefix: 'fas', + iconName: 'binoculars', + icon: [512, 512, [], "f1e5", "M416 48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v48h96V48zM63.91 159.99C61.4 253.84 3.46 274.22 0 404v44c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32V288h32V128H95.84c-17.63 0-31.45 14.37-31.93 31.99zm384.18 0c-.48-17.62-14.3-31.99-31.93-31.99H320v160h32v160c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-44c-3.46-129.78-61.4-150.16-63.91-244.01zM176 32h-64c-8.84 0-16 7.16-16 16v48h96V48c0-8.84-7.16-16-16-16zm48 256h64V128h-64v160z"] +}; +var faBiohazard = { + prefix: 'fas', + iconName: 'biohazard', + icon: [576, 512, [], "f780", "M287.9 112c18.6 0 36.2 3.8 52.8 9.6 13.3-10.3 23.6-24.3 29.5-40.7-25.2-10.9-53-17-82.2-17-29.1 0-56.9 6-82.1 16.9 5.9 16.4 16.2 30.4 29.5 40.7 16.5-5.7 34-9.5 52.5-9.5zM163.6 438.7c12-11.8 20.4-26.4 24.5-42.4-32.9-26.4-54.8-65.3-58.9-109.6-8.5-2.8-17.2-4.6-26.4-4.6-7.6 0-15.2 1-22.5 3.1 4.1 62.8 35.8 118 83.3 153.5zm224.2-42.6c4.1 16 12.5 30.7 24.5 42.5 47.4-35.5 79.1-90.7 83-153.5-7.2-2-14.7-3-22.2-3-9.2 0-18 1.9-26.6 4.7-4.1 44.2-26 82.9-58.7 109.3zm113.5-205c-17.6-10.4-36.3-16.6-55.3-19.9 6-17.7 10-36.4 10-56.2 0-41-14.5-80.8-41-112.2-2.5-3-6.6-3.7-10-1.8-3.3 1.9-4.8 6-3.6 9.7 4.5 13.8 6.6 26.3 6.6 38.5 0 67.8-53.8 122.9-120 122.9S168 117 168 49.2c0-12.1 2.2-24.7 6.6-38.5 1.2-3.7-.3-7.8-3.6-9.7-3.4-1.9-7.5-1.2-10 1.8C134.6 34.2 120 74 120 115c0 19.8 3.9 38.5 10 56.2-18.9 3.3-37.7 9.5-55.3 19.9-34.6 20.5-61 53.3-74.3 92.4-1.3 3.7.2 7.7 3.5 9.8 3.3 2 7.5 1.3 10-1.6 9.4-10.8 19-19.1 29.2-25.1 57.3-33.9 130.8-13.7 163.9 45 33.1 58.7 13.4 134-43.9 167.9-10.2 6.1-22 10.4-35.8 13.4-3.7.8-6.4 4.2-6.4 8.1.1 4 2.7 7.3 6.5 8 39.7 7.8 80.6.8 115.2-19.7 18-10.6 32.9-24.5 45.3-40.1 12.4 15.6 27.3 29.5 45.3 40.1 34.6 20.5 75.5 27.5 115.2 19.7 3.8-.7 6.4-4 6.5-8 0-3.9-2.6-7.3-6.4-8.1-13.9-2.9-25.6-7.3-35.8-13.4-57.3-33.9-77-109.2-43.9-167.9s106.6-78.9 163.9-45c10.2 6.1 19.8 14.3 29.2 25.1 2.5 2.9 6.7 3.6 10 1.6s4.8-6.1 3.5-9.8c-13.1-39.1-39.5-72-74.1-92.4zm-213.4 129c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"] +}; +var faBirthdayCake = { + prefix: 'fas', + iconName: 'birthday-cake', + icon: [448, 512, [], "f1fd", "M448 384c-28.02 0-31.26-32-74.5-32-43.43 0-46.825 32-74.75 32-27.695 0-31.454-32-74.75-32-42.842 0-47.218 32-74.5 32-28.148 0-31.202-32-74.75-32-43.547 0-46.653 32-74.75 32v-80c0-26.5 21.5-48 48-48h16V112h64v144h64V112h64v144h64V112h64v144h16c26.5 0 48 21.5 48 48v80zm0 128H0v-96c43.356 0 46.767-32 74.75-32 27.951 0 31.253 32 74.75 32 42.843 0 47.217-32 74.5-32 28.148 0 31.201 32 74.75 32 43.357 0 46.767-32 74.75-32 27.488 0 31.252 32 74.5 32v96zM96 96c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40zm128 0c-17.75 0-32-14.25-32-32 0-31 32-23 32-64 12 0 32 29.5 32 56s-14.25 40-32 40z"] +}; +var faBlender = { + prefix: 'fas', + iconName: 'blender', + icon: [512, 512, [], "f517", "M416 384H160c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-128 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm40-416h166.54L512 0H48C21.49 0 0 21.49 0 48v160c0 26.51 21.49 48 48 48h103.27l8.73 96h256l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H328c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H328c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM64 192V64h69.82l11.64 128H64z"] +}; +var faBlenderPhone = { + prefix: 'fas', + iconName: 'blender-phone', + icon: [576, 512, [], "f6b6", "M392 64h166.54L576 0H192v352h288l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h114.18l17.46-64H392c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h140.36l17.46-64H392c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8zM158.8 335.01l-25.78-63.26c-2.78-6.81-9.8-10.99-17.24-10.26l-45.03 4.42c-17.28-46.94-17.65-99.78 0-147.72l45.03 4.42c7.43.73 14.46-3.46 17.24-10.26l25.78-63.26c3.02-7.39.2-15.85-6.68-20.07l-39.28-24.1C98.51-3.87 80.09-.5 68.95 11.97c-92.57 103.6-92 259.55 2.1 362.49 9.87 10.8 29.12 12.48 41.65 4.8l39.41-24.18c6.89-4.22 9.7-12.67 6.69-20.07zM480 384H192c-35.35 0-64 28.65-64 64v32c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32v-32c0-35.35-28.65-64-64-64zm-144 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faBlind = { + prefix: 'fas', + iconName: 'blind', + icon: [384, 512, [], "f29d", "M380.15 510.837a8 8 0 0 1-10.989-2.687l-125.33-206.427a31.923 31.923 0 0 0 12.958-9.485l126.048 207.608a8 8 0 0 1-2.687 10.991zM142.803 314.338l-32.54 89.485 36.12 88.285c6.693 16.36 25.377 24.192 41.733 17.501 16.357-6.692 24.193-25.376 17.501-41.734l-62.814-153.537zM96 88c24.301 0 44-19.699 44-44S120.301 0 96 0 52 19.699 52 44s19.699 44 44 44zm154.837 169.128l-120-152c-4.733-5.995-11.75-9.108-18.837-9.112V96H80v.026c-7.146.003-14.217 3.161-18.944 9.24L0 183.766v95.694c0 13.455 11.011 24.791 24.464 24.536C37.505 303.748 48 293.1 48 280v-79.766l16-20.571v140.698L9.927 469.055c-6.04 16.609 2.528 34.969 19.138 41.009 16.602 6.039 34.968-2.524 41.009-19.138L136 309.638V202.441l-31.406-39.816a4 4 0 1 1 6.269-4.971l102.3 129.217c9.145 11.584 24.368 11.339 33.708 3.965 10.41-8.216 12.159-23.334 3.966-33.708z"] +}; +var faBlog = { + prefix: 'fas', + iconName: 'blog', + icon: [512, 512, [], "f781", "M172.2 226.8c-14.6-2.9-28.2 8.9-28.2 23.8V301c0 10.2 7.1 18.4 16.7 22 18.2 6.8 31.3 24.4 31.3 45 0 26.5-21.5 48-48 48s-48-21.5-48-48V120c0-13.3-10.7-24-24-24H24c-13.3 0-24 10.7-24 24v248c0 89.5 82.1 160.2 175 140.7 54.4-11.4 98.3-55.4 109.7-109.7 17.4-82.9-37-157.2-112.5-172.2zM209 0c-9.2-.5-17 6.8-17 16v31.6c0 8.5 6.6 15.5 15 15.9 129.4 7 233.4 112 240.9 241.5.5 8.4 7.5 15 15.9 15h32.1c9.2 0 16.5-7.8 16-17C503.4 139.8 372.2 8.6 209 0zm.3 96c-9.3-.7-17.3 6.7-17.3 16.1v32.1c0 8.4 6.5 15.3 14.8 15.9 76.8 6.3 138 68.2 144.9 145.2.8 8.3 7.6 14.7 15.9 14.7h32.2c9.3 0 16.8-8 16.1-17.3-8.4-110.1-96.5-198.2-206.6-206.7z"] +}; +var faBold = { + prefix: 'fas', + iconName: 'bold', + icon: [384, 512, [], "f032", "M333.49 238a122 122 0 0 0 27-65.21C367.87 96.49 308 32 233.42 32H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h31.87v288H34a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h209.32c70.8 0 134.14-51.75 141-122.4 4.74-48.45-16.39-92.06-50.83-119.6zM145.66 112h87.76a48 48 0 0 1 0 96h-87.76zm87.76 288h-87.76V288h87.76a56 56 0 0 1 0 112z"] +}; +var faBolt = { + prefix: 'fas', + iconName: 'bolt', + icon: [320, 512, [], "f0e7", "M296 160H180.6l42.6-129.8C227.2 15 215.7 0 200 0H56C44 0 33.8 8.9 32.2 20.8l-32 240C-1.7 275.2 9.5 288 24 288h118.7L96.6 482.5c-3.6 15.2 8 29.5 23.3 29.5 8.4 0 16.4-4.4 20.8-12l176-304c9.3-15.9-2.2-36-20.7-36z"] +}; +var faBomb = { + prefix: 'fas', + iconName: 'bomb', + icon: [512, 512, [], "f1e2", "M440.5 88.5l-52 52L415 167c9.4 9.4 9.4 24.6 0 33.9l-17.4 17.4c11.8 26.1 18.4 55.1 18.4 85.6 0 114.9-93.1 208-208 208S0 418.9 0 304 93.1 96 208 96c30.5 0 59.5 6.6 85.6 18.4L311 97c9.4-9.4 24.6-9.4 33.9 0l26.5 26.5 52-52 17.1 17zM500 60h-24c-6.6 0-12 5.4-12 12s5.4 12 12 12h24c6.6 0 12-5.4 12-12s-5.4-12-12-12zM440 0c-6.6 0-12 5.4-12 12v24c0 6.6 5.4 12 12 12s12-5.4 12-12V12c0-6.6-5.4-12-12-12zm33.9 55l17-17c4.7-4.7 4.7-12.3 0-17-4.7-4.7-12.3-4.7-17 0l-17 17c-4.7 4.7-4.7 12.3 0 17 4.8 4.7 12.4 4.7 17 0zm-67.8 0c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17zm67.8 34c-4.7-4.7-12.3-4.7-17 0-4.7 4.7-4.7 12.3 0 17l17 17c4.7 4.7 12.3 4.7 17 0 4.7-4.7 4.7-12.3 0-17l-17-17zM112 272c0-35.3 28.7-64 64-64 8.8 0 16-7.2 16-16s-7.2-16-16-16c-52.9 0-96 43.1-96 96 0 8.8 7.2 16 16 16s16-7.2 16-16z"] +}; +var faBone = { + prefix: 'fas', + iconName: 'bone', + icon: [640, 512, [], "f5d7", "M598.88 244.56c25.2-12.6 41.12-38.36 41.12-66.53v-7.64C640 129.3 606.7 96 565.61 96c-32.02 0-60.44 20.49-70.57 50.86-7.68 23.03-11.6 45.14-38.11 45.14H183.06c-27.38 0-31.58-25.54-38.11-45.14C134.83 116.49 106.4 96 74.39 96 33.3 96 0 129.3 0 170.39v7.64c0 28.17 15.92 53.93 41.12 66.53 9.43 4.71 9.43 18.17 0 22.88C15.92 280.04 0 305.8 0 333.97v7.64C0 382.7 33.3 416 74.38 416c32.02 0 60.44-20.49 70.57-50.86 7.68-23.03 11.6-45.14 38.11-45.14h273.87c27.38 0 31.58 25.54 38.11 45.14C505.17 395.51 533.6 416 565.61 416c41.08 0 74.38-33.3 74.38-74.39v-7.64c0-28.18-15.92-53.93-41.12-66.53-9.42-4.71-9.42-18.17.01-22.88z"] +}; +var faBong = { + prefix: 'fas', + iconName: 'bong', + icon: [448, 512, [], "f55c", "M302.5 512c23.18 0 44.43-12.58 56-32.66C374.69 451.26 384 418.75 384 384c0-36.12-10.08-69.81-27.44-98.62L400 241.94l9.38 9.38c6.25 6.25 16.38 6.25 22.63 0l11.3-11.32c6.25-6.25 6.25-16.38 0-22.63l-52.69-52.69c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l9.38 9.38-39.41 39.41c-11.56-11.37-24.53-21.33-38.65-29.51V63.74l15.97-.02c8.82-.01 15.97-7.16 15.98-15.98l.04-31.72C320 7.17 312.82-.01 303.97 0L80.03.26c-8.82.01-15.97 7.16-15.98 15.98l-.04 31.73c-.01 8.85 7.17 16.02 16.02 16.01L96 63.96v153.93C38.67 251.1 0 312.97 0 384c0 34.75 9.31 67.27 25.5 95.34C37.08 499.42 58.33 512 81.5 512h221zM120.06 259.43L144 245.56V63.91l96-.11v181.76l23.94 13.87c24.81 14.37 44.12 35.73 56.56 60.57h-257c12.45-24.84 31.75-46.2 56.56-60.57z"] +}; +var faBook = { + prefix: 'fas', + iconName: 'book', + icon: [448, 512, [], "f02d", "M448 360V24c0-13.3-10.7-24-24-24H96C43 0 0 43 0 96v320c0 53 43 96 96 96h328c13.3 0 24-10.7 24-24v-16c0-7.5-3.5-14.3-8.9-18.7-4.2-15.4-4.2-59.3 0-74.7 5.4-4.3 8.9-11.1 8.9-18.6zM128 134c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm0 64c0-3.3 2.7-6 6-6h212c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H134c-3.3 0-6-2.7-6-6v-20zm253.4 250H96c-17.7 0-32-14.3-32-32 0-17.6 14.4-32 32-32h285.4c-1.9 17.1-1.9 46.9 0 64z"] +}; +var faBookDead = { + prefix: 'fas', + iconName: 'book-dead', + icon: [448, 512, [], "f6b7", "M272 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm176 222.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM240 56c44.2 0 80 28.7 80 64 0 20.9-12.7 39.2-32 50.9V184c0 8.8-7.2 16-16 16h-64c-8.8 0-16-7.2-16-16v-13.1c-19.3-11.7-32-30-32-50.9 0-35.3 35.8-64 80-64zM124.8 223.3l6.3-14.7c1.7-4.1 6.4-5.9 10.5-4.2l98.3 42.1 98.4-42.1c4.1-1.7 8.8.1 10.5 4.2l6.3 14.7c1.7 4.1-.1 8.8-4.2 10.5L280.6 264l70.3 30.1c4.1 1.7 5.9 6.4 4.2 10.5l-6.3 14.7c-1.7 4.1-6.4 5.9-10.5 4.2L240 281.4l-98.3 42.2c-4.1 1.7-8.8-.1-10.5-4.2l-6.3-14.7c-1.7-4.1.1-8.8 4.2-10.5l70.4-30.1-70.5-30.3c-4.1-1.7-5.9-6.4-4.2-10.5zm256 224.7H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8zM208 136c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16z"] +}; +var faBookMedical = { + prefix: 'fas', + iconName: 'book-medical', + icon: [448, 512, [], "f7e6", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16q0-9.6-9.6-19.2c-3.2-16-3.2-60.8 0-73.6q9.6-4.8 9.6-19.2zM144 168a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8v48a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8zm236.8 280H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8z"] +}; +var faBookOpen = { + prefix: 'fas', + iconName: 'book-open', + icon: [576, 512, [], "f518", "M542.22 32.05c-54.8 3.11-163.72 14.43-230.96 55.59-4.64 2.84-7.27 7.89-7.27 13.17v363.87c0 11.55 12.63 18.85 23.28 13.49 69.18-34.82 169.23-44.32 218.7-46.92 16.89-.89 30.02-14.43 30.02-30.66V62.75c.01-17.71-15.35-31.74-33.77-30.7zM264.73 87.64C197.5 46.48 88.58 35.17 33.78 32.05 15.36 31.01 0 45.04 0 62.75V400.6c0 16.24 13.13 29.78 30.02 30.66 49.49 2.6 149.59 12.11 218.77 46.95 10.62 5.35 23.21-1.94 23.21-13.46V100.63c0-5.29-2.62-10.14-7.27-12.99z"] +}; +var faBookReader = { + prefix: 'fas', + iconName: 'book-reader', + icon: [512, 512, [], "f5da", "M352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM233.59 241.1c-59.33-36.32-155.43-46.3-203.79-49.05C13.55 191.13 0 203.51 0 219.14v222.8c0 14.33 11.59 26.28 26.49 27.05 43.66 2.29 131.99 10.68 193.04 41.43 9.37 4.72 20.48-1.71 20.48-11.87V252.56c-.01-4.67-2.32-8.95-6.42-11.46zm248.61-49.05c-48.35 2.74-144.46 12.73-203.78 49.05-4.1 2.51-6.41 6.96-6.41 11.63v245.79c0 10.19 11.14 16.63 20.54 11.9 61.04-30.72 149.32-39.11 192.97-41.4 14.9-.78 26.49-12.73 26.49-27.06V219.14c-.01-15.63-13.56-28.01-29.81-27.09z"] +}; +var faBookmark = { + prefix: 'fas', + iconName: 'bookmark', + icon: [384, 512, [], "f02e", "M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"] +}; +var faBorderAll = { + prefix: 'fas', + iconName: 'border-all', + icon: [448, 512, [], "f84c", "M416 32H32A32 32 0 0 0 0 64v384a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V64a32 32 0 0 0-32-32zm-32 64v128H256V96zm-192 0v128H64V96zM64 416V288h128v128zm192 0V288h128v128z"] +}; +var faBorderNone = { + prefix: 'fas', + iconName: 'border-none', + icon: [448, 512, [], "f850", "M240 224h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-288 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM240 320h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-384h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM48 224H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-192H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faBorderStyle = { + prefix: 'fas', + iconName: 'border-style', + icon: [448, 512, [], "f853", "M240 416h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-96 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm192 0h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm96-192h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0 96h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-288h-32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-96H32A32 32 0 0 0 0 64v400a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V96h368a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faBowlingBall = { + prefix: 'fas', + iconName: 'bowling-ball', + icon: [496, 512, [], "f436", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM120 192c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64-96c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm48 144c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faBox = { + prefix: 'fas', + iconName: 'box', + icon: [512, 512, [], "f466", "M509.5 184.6L458.9 32.8C452.4 13.2 434.1 0 413.4 0H272v192h238.7c-.4-2.5-.4-5-1.2-7.4zM240 0H98.6c-20.7 0-39 13.2-45.5 32.8L2.5 184.6c-.8 2.4-.8 4.9-1.2 7.4H240V0zM0 224v240c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V224H0z"] +}; +var faBoxOpen = { + prefix: 'fas', + iconName: 'box-open', + icon: [640, 512, [], "f49e", "M425.7 256c-16.9 0-32.8-9-41.4-23.4L320 126l-64.2 106.6c-8.7 14.5-24.6 23.5-41.5 23.5-4.5 0-9-.6-13.3-1.9L64 215v178c0 14.7 10 27.5 24.2 31l216.2 54.1c10.2 2.5 20.9 2.5 31 0L551.8 424c14.2-3.6 24.2-16.4 24.2-31V215l-137 39.1c-4.3 1.3-8.8 1.9-13.3 1.9zm212.6-112.2L586.8 41c-3.1-6.2-9.8-9.8-16.7-8.9L320 64l91.7 152.1c3.8 6.3 11.4 9.3 18.5 7.3l197.9-56.5c9.9-2.9 14.7-13.9 10.2-23.1zM53.2 41L1.7 143.8c-4.6 9.2.3 20.2 10.1 23l197.9 56.5c7.1 2 14.7-1 18.5-7.3L320 64 69.8 32.1c-6.9-.8-13.5 2.7-16.6 8.9z"] +}; +var faBoxTissue = { + prefix: 'fas', + iconName: 'box-tissue', + icon: [512, 512, [], "e05b", "M383.88,287.82l64-192H338.47a70.2,70.2,0,0,1-66.59-48,70.21,70.21,0,0,0-66.6-48H63.88l64,288Zm-384,192a32,32,0,0,0,32,32h448a32,32,0,0,0,32-32v-64H-.12Zm480-256H438.94l-21.33,64h14.27a16,16,0,0,1,0,32h-352a16,16,0,1,1,0-32H95.09l-14.22-64h-49a32,32,0,0,0-32,32v128h512v-128A32,32,0,0,0,479.88,223.82Z"] +}; +var faBoxes = { + prefix: 'fas', + iconName: 'boxes', + icon: [576, 512, [], "f468", "M560 288h-80v96l-32-21.3-32 21.3v-96h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16zm-384-64h224c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16h-80v96l-32-21.3L256 96V0h-80c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16zm64 64h-80v96l-32-21.3L96 384v-96H16c-8.8 0-16 7.2-16 16v192c0 8.8 7.2 16 16 16h224c8.8 0 16-7.2 16-16V304c0-8.8-7.2-16-16-16z"] +}; +var faBraille = { + prefix: 'fas', + iconName: 'braille', + icon: [640, 512, [], "f2a1", "M128 256c0 35.346-28.654 64-64 64S0 291.346 0 256s28.654-64 64-64 64 28.654 64 64zM64 384c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352C28.654 32 0 60.654 0 96s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm224 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-352c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64zm160 192c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0 160c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm0-320c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"] +}; +var faBrain = { + prefix: 'fas', + iconName: 'brain', + icon: [576, 512, [], "f5dc", "M208 0c-29.9 0-54.7 20.5-61.8 48.2-.8 0-1.4-.2-2.2-.2-35.3 0-64 28.7-64 64 0 4.8.6 9.5 1.7 14C52.5 138 32 166.6 32 200c0 12.6 3.2 24.3 8.3 34.9C16.3 248.7 0 274.3 0 304c0 33.3 20.4 61.9 49.4 73.9-.9 4.6-1.4 9.3-1.4 14.1 0 39.8 32.2 72 72 72 4.1 0 8.1-.5 12-1.2 9.6 28.5 36.2 49.2 68 49.2 39.8 0 72-32.2 72-72V64c0-35.3-28.7-64-64-64zm368 304c0-29.7-16.3-55.3-40.3-69.1 5.2-10.6 8.3-22.3 8.3-34.9 0-33.4-20.5-62-49.7-74 1-4.5 1.7-9.2 1.7-14 0-35.3-28.7-64-64-64-.8 0-1.5.2-2.2.2C422.7 20.5 397.9 0 368 0c-35.3 0-64 28.6-64 64v376c0 39.8 32.2 72 72 72 31.8 0 58.4-20.7 68-49.2 3.9.7 7.9 1.2 12 1.2 39.8 0 72-32.2 72-72 0-4.8-.5-9.5-1.4-14.1 29-12 49.4-40.6 49.4-73.9z"] +}; +var faBreadSlice = { + prefix: 'fas', + iconName: 'bread-slice', + icon: [576, 512, [], "f7ec", "M288 0C108 0 0 93.4 0 169.14 0 199.44 24.24 224 64 224v256c0 17.67 16.12 32 36 32h376c19.88 0 36-14.33 36-32V224c39.76 0 64-24.56 64-54.86C576 93.4 468 0 288 0z"] +}; +var faBriefcase = { + prefix: 'fas', + iconName: 'briefcase', + icon: [512, 512, [], "f0b1", "M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z"] +}; +var faBriefcaseMedical = { + prefix: 'fas', + iconName: 'briefcase-medical', + icon: [512, 512, [], "f469", "M464 128h-80V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v48H48c-26.5 0-48 21.5-48 48v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V176c0-26.5-21.5-48-48-48zM192 96h128v32H192V96zm160 248c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48z"] +}; +var faBroadcastTower = { + prefix: 'fas', + iconName: 'broadcast-tower', + icon: [640, 512, [], "f519", "M150.94 192h33.73c11.01 0 18.61-10.83 14.86-21.18-4.93-13.58-7.55-27.98-7.55-42.82s2.62-29.24 7.55-42.82C203.29 74.83 195.68 64 184.67 64h-33.73c-7.01 0-13.46 4.49-15.41 11.23C130.64 92.21 128 109.88 128 128c0 18.12 2.64 35.79 7.54 52.76 1.94 6.74 8.39 11.24 15.4 11.24zM89.92 23.34C95.56 12.72 87.97 0 75.96 0H40.63c-6.27 0-12.14 3.59-14.74 9.31C9.4 45.54 0 85.65 0 128c0 24.75 3.12 68.33 26.69 118.86 2.62 5.63 8.42 9.14 14.61 9.14h34.84c12.02 0 19.61-12.74 13.95-23.37-49.78-93.32-16.71-178.15-.17-209.29zM614.06 9.29C611.46 3.58 605.6 0 599.33 0h-35.42c-11.98 0-19.66 12.66-14.02 23.25 18.27 34.29 48.42 119.42.28 209.23-5.72 10.68 1.8 23.52 13.91 23.52h35.23c6.27 0 12.13-3.58 14.73-9.29C630.57 210.48 640 170.36 640 128s-9.42-82.48-25.94-118.71zM489.06 64h-33.73c-11.01 0-18.61 10.83-14.86 21.18 4.93 13.58 7.55 27.98 7.55 42.82s-2.62 29.24-7.55 42.82c-3.76 10.35 3.85 21.18 14.86 21.18h33.73c7.02 0 13.46-4.49 15.41-11.24 4.9-16.97 7.53-34.64 7.53-52.76 0-18.12-2.64-35.79-7.54-52.76-1.94-6.75-8.39-11.24-15.4-11.24zm-116.3 100.12c7.05-10.29 11.2-22.71 11.2-36.12 0-35.35-28.63-64-63.96-64-35.32 0-63.96 28.65-63.96 64 0 13.41 4.15 25.83 11.2 36.12l-130.5 313.41c-3.4 8.15.46 17.52 8.61 20.92l29.51 12.31c8.15 3.4 17.52-.46 20.91-8.61L244.96 384h150.07l49.2 118.15c3.4 8.16 12.76 12.01 20.91 8.61l29.51-12.31c8.15-3.4 12-12.77 8.61-20.92l-130.5-313.41zM271.62 320L320 203.81 368.38 320h-96.76z"] +}; +var faBroom = { + prefix: 'fas', + iconName: 'broom', + icon: [640, 512, [], "f51a", "M256.47 216.77l86.73 109.18s-16.6 102.36-76.57 150.12C206.66 523.85 0 510.19 0 510.19s3.8-23.14 11-55.43l94.62-112.17c3.97-4.7-.87-11.62-6.65-9.5l-60.4 22.09c14.44-41.66 32.72-80.04 54.6-97.47 59.97-47.76 163.3-40.94 163.3-40.94zM636.53 31.03l-19.86-25c-5.49-6.9-15.52-8.05-22.41-2.56l-232.48 177.8-34.14-42.97c-5.09-6.41-15.14-5.21-18.59 2.21l-25.33 54.55 86.73 109.18 58.8-12.45c8-1.69 11.42-11.2 6.34-17.6l-34.09-42.92 232.48-177.8c6.89-5.48 8.04-15.53 2.55-22.44z"] +}; +var faBrush = { + prefix: 'fas', + iconName: 'brush', + icon: [384, 512, [], "f55d", "M352 0H32C14.33 0 0 14.33 0 32v224h384V32c0-17.67-14.33-32-32-32zM0 320c0 35.35 28.66 64 64 64h64v64c0 35.35 28.66 64 64 64s64-28.65 64-64v-64h64c35.34 0 64-28.65 64-64v-32H0v32zm192 104c13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24s-24-10.75-24-24c0-13.26 10.75-24 24-24z"] +}; +var faBug = { + prefix: 'fas', + iconName: 'bug', + icon: [512, 512, [], "f188", "M511.988 288.9c-.478 17.43-15.217 31.1-32.653 31.1H424v16c0 21.864-4.882 42.584-13.6 61.145l60.228 60.228c12.496 12.497 12.496 32.758 0 45.255-12.498 12.497-32.759 12.496-45.256 0l-54.736-54.736C345.886 467.965 314.351 480 280 480V236c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v244c-34.351 0-65.886-12.035-90.636-32.108l-54.736 54.736c-12.498 12.497-32.759 12.496-45.256 0-12.496-12.497-12.496-32.758 0-45.255l60.228-60.228C92.882 378.584 88 357.864 88 336v-16H32.666C15.23 320 .491 306.33.013 288.9-.484 270.816 14.028 256 32 256h56v-58.745l-46.628-46.628c-12.496-12.497-12.496-32.758 0-45.255 12.498-12.497 32.758-12.497 45.256 0L141.255 160h229.489l54.627-54.627c12.498-12.497 32.758-12.497 45.256 0 12.496 12.497 12.496 32.758 0 45.255L424 197.255V256h56c17.972 0 32.484 14.816 31.988 32.9zM257 0c-61.856 0-112 50.144-112 112h224C369 50.144 318.856 0 257 0z"] +}; +var faBuilding = { + prefix: 'fas', + iconName: 'building', + icon: [448, 512, [], "f1ad", "M436 480h-20V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v456H12c-6.627 0-12 5.373-12 12v20h448v-20c0-6.627-5.373-12-12-12zM128 76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76zm0 96c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40zm52 148h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12zm76 160h-64v-84c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v84zm64-172c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40zm0-96c0 6.627-5.373 12-12 12h-40c-6.627 0-12-5.373-12-12V76c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v40z"] +}; +var faBullhorn = { + prefix: 'fas', + iconName: 'bullhorn', + icon: [576, 512, [], "f0a1", "M576 240c0-23.63-12.95-44.04-32-55.12V32.01C544 23.26 537.02 0 512 0c-7.12 0-14.19 2.38-19.98 7.02l-85.03 68.03C364.28 109.19 310.66 128 256 128H64c-35.35 0-64 28.65-64 64v96c0 35.35 28.65 64 64 64h33.7c-1.39 10.48-2.18 21.14-2.18 32 0 39.77 9.26 77.35 25.56 110.94 5.19 10.69 16.52 17.06 28.4 17.06h74.28c26.05 0 41.69-29.84 25.9-50.56-16.4-21.52-26.15-48.36-26.15-77.44 0-11.11 1.62-21.79 4.41-32H256c54.66 0 108.28 18.81 150.98 52.95l85.03 68.03a32.023 32.023 0 0 0 19.98 7.02c24.92 0 32-22.78 32-32V295.13C563.05 284.04 576 263.63 576 240zm-96 141.42l-33.05-26.44C392.95 311.78 325.12 288 256 288v-96c69.12 0 136.95-23.78 190.95-66.98L480 98.58v282.84z"] +}; +var faBullseye = { + prefix: 'fas', + iconName: 'bullseye', + icon: [496, 512, [], "f140", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 432c-101.69 0-184-82.29-184-184 0-101.69 82.29-184 184-184 101.69 0 184 82.29 184 184 0 101.69-82.29 184-184 184zm0-312c-70.69 0-128 57.31-128 128s57.31 128 128 128 128-57.31 128-128-57.31-128-128-128zm0 192c-35.29 0-64-28.71-64-64s28.71-64 64-64 64 28.71 64 64-28.71 64-64 64z"] +}; +var faBurn = { + prefix: 'fas', + iconName: 'burn', + icon: [384, 512, [], "f46a", "M192 0C79.7 101.3 0 220.9 0 300.5 0 425 79 512 192 512s192-87 192-211.5c0-79.9-80.2-199.6-192-300.5zm0 448c-56.5 0-96-39-96-94.8 0-13.5 4.6-61.5 96-161.2 91.4 99.7 96 147.7 96 161.2 0 55.8-39.5 94.8-96 94.8z"] +}; +var faBus = { + prefix: 'fas', + iconName: 'bus', + icon: [512, 512, [], "f207", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM112 400c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm16-112c-17.67 0-32-14.33-32-32V128c0-17.67 14.33-32 32-32h256c17.67 0 32 14.33 32 32v128c0 17.67-14.33 32-32 32H128zm272 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faBusAlt = { + prefix: 'fas', + iconName: 'bus-alt', + icon: [512, 512, [], "f55e", "M488 128h-8V80c0-44.8-99.2-80-224-80S32 35.2 32 80v48h-8c-13.25 0-24 10.74-24 24v80c0 13.25 10.75 24 24 24h8v160c0 17.67 14.33 32 32 32v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h192v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h6.4c16 0 25.6-12.8 25.6-25.6V256h8c13.25 0 24-10.75 24-24v-80c0-13.26-10.75-24-24-24zM160 72c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H168c-4.42 0-8-3.58-8-8V72zm-48 328c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128-112H128c-17.67 0-32-14.33-32-32v-96c0-17.67 14.33-32 32-32h112v160zm32 0V128h112c17.67 0 32 14.33 32 32v96c0 17.67-14.33 32-32 32H272zm128 112c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faBusinessTime = { + prefix: 'fas', + iconName: 'business-time', + icon: [640, 512, [], "f64a", "M496 224c-79.59 0-144 64.41-144 144s64.41 144 144 144 144-64.41 144-144-64.41-144-144-144zm64 150.29c0 5.34-4.37 9.71-9.71 9.71h-60.57c-5.34 0-9.71-4.37-9.71-9.71v-76.57c0-5.34 4.37-9.71 9.71-9.71h12.57c5.34 0 9.71 4.37 9.71 9.71V352h38.29c5.34 0 9.71 4.37 9.71 9.71v12.58zM496 192c5.4 0 10.72.33 16 .81V144c0-25.6-22.4-48-48-48h-80V48c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h395.12c28.6-20.09 63.35-32 100.88-32zM320 96H192V64h128v32zm6.82 224H208c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h291.43C327.1 423.96 320 396.82 320 368c0-16.66 2.48-32.72 6.82-48z"] +}; +var faCalculator = { + prefix: 'fas', + iconName: 'calculator', + icon: [448, 512, [], "f1ec", "M400 0H48C22.4 0 0 22.4 0 48v416c0 25.6 22.4 48 48 48h352c25.6 0 48-22.4 48-48V48c0-25.6-22.4-48-48-48zM128 435.2c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm128 128c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8V268.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v166.4zm0-256c0 6.4-6.4 12.8-12.8 12.8H76.8c-6.4 0-12.8-6.4-12.8-12.8V76.8C64 70.4 70.4 64 76.8 64h294.4c6.4 0 12.8 6.4 12.8 12.8v102.4z"] +}; +var faCalendar = { + prefix: 'fas', + iconName: 'calendar', + icon: [448, 512, [], "f133", "M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z"] +}; +var faCalendarAlt = { + prefix: 'fas', + iconName: 'calendar-alt', + icon: [448, 512, [], "f073", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm320-196c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM192 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40zM64 268c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zm0 128c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"] +}; +var faCalendarCheck = { + prefix: 'fas', + iconName: 'calendar-check', + icon: [448, 512, [], "f274", "M436 160H12c-6.627 0-12-5.373-12-12v-36c0-26.51 21.49-48 48-48h48V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h128V12c0-6.627 5.373-12 12-12h40c6.627 0 12 5.373 12 12v52h48c26.51 0 48 21.49 48 48v36c0 6.627-5.373 12-12 12zM12 192h424c6.627 0 12 5.373 12 12v260c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V204c0-6.627 5.373-12 12-12zm333.296 95.947l-28.169-28.398c-4.667-4.705-12.265-4.736-16.97-.068L194.12 364.665l-45.98-46.352c-4.667-4.705-12.266-4.736-16.971-.068l-28.397 28.17c-4.705 4.667-4.736 12.265-.068 16.97l82.601 83.269c4.667 4.705 12.265 4.736 16.97.068l142.953-141.805c4.705-4.667 4.736-12.265.068-16.97z"] +}; +var faCalendarDay = { + prefix: 'fas', + iconName: 'calendar-day', + icon: [448, 512, [], "f783", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h96c8.8 0 16 7.2 16 16v96c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-96zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"] +}; +var faCalendarMinus = { + prefix: 'fas', + iconName: 'calendar-minus', + icon: [448, 512, [], "f272", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm304 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H132c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h184z"] +}; +var faCalendarPlus = { + prefix: 'fas', + iconName: 'calendar-plus', + icon: [448, 512, [], "f271", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm316 140c0-6.6-5.4-12-12-12h-60v-60c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v60h-60c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h60v60c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-60h60c6.6 0 12-5.4 12-12v-40z"] +}; +var faCalendarTimes = { + prefix: 'fas', + iconName: 'calendar-times', + icon: [448, 512, [], "f273", "M436 160H12c-6.6 0-12-5.4-12-12v-36c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48v36c0 6.6-5.4 12-12 12zM12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm257.3 160l48.1-48.1c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0L224 306.7l-48.1-48.1c-4.7-4.7-12.3-4.7-17 0l-28.3 28.3c-4.7 4.7-4.7 12.3 0 17l48.1 48.1-48.1 48.1c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l48.1-48.1 48.1 48.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L269.3 352z"] +}; +var faCalendarWeek = { + prefix: 'fas', + iconName: 'calendar-week', + icon: [448, 512, [], "f784", "M0 464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V192H0v272zm64-192c0-8.8 7.2-16 16-16h288c8.8 0 16 7.2 16 16v64c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16v-64zM400 64h-48V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H160V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48H48C21.5 64 0 85.5 0 112v48h448v-48c0-26.5-21.5-48-48-48z"] +}; +var faCamera = { + prefix: 'fas', + iconName: 'camera', + icon: [512, 512, [], "f030", "M512 144v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V144c0-26.5 21.5-48 48-48h88l12.3-32.9c7-18.7 24.9-31.1 44.9-31.1h125.5c20 0 37.9 12.4 44.9 31.1L376 96h88c26.5 0 48 21.5 48 48zM376 288c0-66.2-53.8-120-120-120s-120 53.8-120 120 53.8 120 120 120 120-53.8 120-120zm-32 0c0 48.5-39.5 88-88 88s-88-39.5-88-88 39.5-88 88-88 88 39.5 88 88z"] +}; +var faCameraRetro = { + prefix: 'fas', + iconName: 'camera-retro', + icon: [512, 512, [], "f083", "M48 32C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48H48zm0 32h106c3.3 0 6 2.7 6 6v20c0 3.3-2.7 6-6 6H38c-3.3 0-6-2.7-6-6V80c0-8.8 7.2-16 16-16zm426 96H38c-3.3 0-6-2.7-6-6v-36c0-3.3 2.7-6 6-6h138l30.2-45.3c1.1-1.7 3-2.7 5-2.7H464c8.8 0 16 7.2 16 16v74c0 3.3-2.7 6-6 6zM256 424c-66.2 0-120-53.8-120-120s53.8-120 120-120 120 53.8 120 120-53.8 120-120 120zm0-208c-48.5 0-88 39.5-88 88s39.5 88 88 88 88-39.5 88-88-39.5-88-88-88zm-48 104c-8.8 0-16-7.2-16-16 0-35.3 28.7-64 64-64 8.8 0 16 7.2 16 16s-7.2 16-16 16c-17.6 0-32 14.4-32 32 0 8.8-7.2 16-16 16z"] +}; +var faCampground = { + prefix: 'fas', + iconName: 'campground', + icon: [640, 512, [], "f6bb", "M624 448h-24.68L359.54 117.75l53.41-73.55c5.19-7.15 3.61-17.16-3.54-22.35l-25.9-18.79c-7.15-5.19-17.15-3.61-22.35 3.55L320 63.3 278.83 6.6c-5.19-7.15-15.2-8.74-22.35-3.55l-25.88 18.8c-7.15 5.19-8.74 15.2-3.54 22.35l53.41 73.55L40.68 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM320 288l116.36 160H203.64L320 288z"] +}; +var faCandyCane = { + prefix: 'fas', + iconName: 'candy-cane', + icon: [512, 512, [], "f786", "M497.5 92C469.6 33.1 411.8 0 352.4 0c-27.9 0-56.2 7.3-81.8 22.6L243.1 39c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5l27.5-16.4c5.1-3.1 10.8-4.5 16.4-4.5 10.9 0 21.5 5.6 27.5 15.6 9.1 15.1 4.1 34.8-11 43.9L15.6 397.6c-15.2 9.1-20.1 28.7-11 43.9l32.8 54.9c6 10 16.6 15.6 27.5 15.6 5.6 0 11.2-1.5 16.4-4.5L428.6 301c71.7-42.9 104.6-133.5 68.9-209zm-177.7 13l-2.5 1.5L296.8 45c9.7-4.7 19.8-8.1 30.3-10.2l20.6 61.8c-9.8.8-19.4 3.3-27.9 8.4zM145.9 431.8l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm107.5-63.9l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zM364.3 302l-60.5-38.5 30.8-18.3 60.5 38.5-30.8 18.3zm20.4-197.3l46-46c8.4 6.5 16 14.1 22.6 22.6L407.6 127c-5.7-9.3-13.7-16.9-22.9-22.3zm82.1 107.8l-59.5-19.8c3.2-5.3 5.8-10.9 7.4-17.1 1.1-4.5 1.7-9.1 1.8-13.6l60.4 20.1c-2.1 10.4-5.5 20.6-10.1 30.4z"] +}; +var faCannabis = { + prefix: 'fas', + iconName: 'cannabis', + icon: [512, 512, [], "f55f", "M503.47 360.25c-1.56-.82-32.39-16.89-76.78-25.81 64.25-75.12 84.05-161.67 84.93-165.64 1.18-5.33-.44-10.9-4.3-14.77-3.03-3.04-7.12-4.7-11.32-4.7-1.14 0-2.29.12-3.44.38-3.88.85-86.54 19.59-160.58 79.76.01-1.46.01-2.93.01-4.4 0-118.79-59.98-213.72-62.53-217.7A15.973 15.973 0 0 0 256 0c-5.45 0-10.53 2.78-13.47 7.37-2.55 3.98-62.53 98.91-62.53 217.7 0 1.47.01 2.94.01 4.4-74.03-60.16-156.69-78.9-160.58-79.76-1.14-.25-2.29-.38-3.44-.38-4.2 0-8.29 1.66-11.32 4.7A15.986 15.986 0 0 0 .38 168.8c.88 3.97 20.68 90.52 84.93 165.64-44.39 8.92-75.21 24.99-76.78 25.81a16.003 16.003 0 0 0-.02 28.29c2.45 1.29 60.76 31.72 133.49 31.72 6.14 0 11.96-.1 17.5-.31-11.37 22.23-16.52 38.31-16.81 39.22-1.8 5.68-.29 11.89 3.91 16.11a16.019 16.019 0 0 0 16.1 3.99c1.83-.57 37.72-11.99 77.3-39.29V504c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-64.01c39.58 27.3 75.47 38.71 77.3 39.29a16.019 16.019 0 0 0 16.1-3.99c4.2-4.22 5.71-10.43 3.91-16.11-.29-.91-5.45-16.99-16.81-39.22 5.54.21 11.37.31 17.5.31 72.72 0 131.04-30.43 133.49-31.72 5.24-2.78 8.52-8.22 8.51-14.15-.01-5.94-3.29-11.39-8.53-14.15z"] +}; +var faCapsules = { + prefix: 'fas', + iconName: 'capsules', + icon: [576, 512, [], "f46b", "M555.3 300.1L424.2 112.8C401.9 81 366.4 64 330.4 64c-22.6 0-45.5 6.7-65.5 20.7-19.7 13.8-33.7 32.8-41.5 53.8C220.5 79.2 172 32 112 32 50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V218.9c3.3 8.6 7.3 17.1 12.8 25L368 431.2c22.2 31.8 57.7 48.8 93.8 48.8 22.7 0 45.5-6.7 65.5-20.7 51.7-36.2 64.2-107.5 28-159.2zM160 256H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm194.8 44.9l-65.6-93.7c-7.7-11-10.7-24.4-8.3-37.6 2.3-13.2 9.7-24.8 20.7-32.5 8.5-6 18.5-9.1 28.8-9.1 16.5 0 31.9 8 41.3 21.5l65.6 93.7-82.5 57.7z"] +}; +var faCar = { + prefix: 'fas', + iconName: 'car', + icon: [512, 512, [], "f1b9", "M499.99 176h-59.87l-16.64-41.6C406.38 91.63 365.57 64 319.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4L71.87 176H12.01C4.2 176-1.53 183.34.37 190.91l6 24C7.7 220.25 12.5 224 18.01 224h20.07C24.65 235.73 16 252.78 16 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-19.22-8.65-36.27-22.07-48H494c5.51 0 10.31-3.75 11.64-9.09l6-24c1.89-7.57-3.84-14.91-11.65-14.91zm-352.06-17.83c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L384 208H128l19.93-49.83zM96 319.8c-19.2 0-32-12.76-32-31.9S76.8 256 96 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S396.8 256 416 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"] +}; +var faCarAlt = { + prefix: 'fas', + iconName: 'car-alt', + icon: [480, 512, [], "f5de", "M438.66 212.33l-11.24-28.1-19.93-49.83C390.38 91.63 349.57 64 303.5 64h-127c-46.06 0-86.88 27.63-103.99 70.4l-19.93 49.83-11.24 28.1C17.22 221.5 0 244.66 0 272v48c0 16.12 6.16 30.67 16 41.93V416c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-54.07c9.84-11.25 16-25.8 16-41.93v-48c0-27.34-17.22-50.5-41.34-59.67zm-306.73-54.16c7.29-18.22 24.94-30.17 44.57-30.17h127c19.63 0 37.28 11.95 44.57 30.17L368 208H112l19.93-49.83zM80 319.8c-19.2 0-32-12.76-32-31.9S60.8 256 80 256s48 28.71 48 47.85-28.8 15.95-48 15.95zm320 0c-19.2 0-48 3.19-48-15.95S380.8 256 400 256s32 12.76 32 31.9-12.8 31.9-32 31.9z"] +}; +var faCarBattery = { + prefix: 'fas', + iconName: 'car-battery', + icon: [512, 512, [], "f5df", "M480 128h-32V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v48H192V80c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v48H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32zM192 264c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm256 0c0 4.42-3.58 8-8 8h-40v40c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-40h-40c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h40v-40c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v40h40c4.42 0 8 3.58 8 8v16z"] +}; +var faCarCrash = { + prefix: 'fas', + iconName: 'car-crash', + icon: [640, 512, [], "f5e1", "M143.25 220.81l-12.42 46.37c-3.01 11.25-3.63 22.89-2.41 34.39l-35.2 28.98c-6.57 5.41-16.31-.43-14.62-8.77l15.44-76.68c1.06-5.26-2.66-10.28-8-10.79l-77.86-7.55c-8.47-.82-11.23-11.83-4.14-16.54l65.15-43.3c4.46-2.97 5.38-9.15 1.98-13.29L21.46 93.22c-5.41-6.57.43-16.3 8.78-14.62l76.68 15.44c5.26 1.06 10.28-2.66 10.8-8l7.55-77.86c.82-8.48 11.83-11.23 16.55-4.14l43.3 65.14c2.97 4.46 9.15 5.38 13.29 1.98l60.4-49.71c6.57-5.41 16.3.43 14.62 8.77L262.1 86.38c-2.71 3.05-5.43 6.09-7.91 9.4l-32.15 42.97-10.71 14.32c-32.73 8.76-59.18 34.53-68.08 67.74zm494.57 132.51l-12.42 46.36c-3.13 11.68-9.38 21.61-17.55 29.36a66.876 66.876 0 0 1-8.76 7l-13.99 52.23c-1.14 4.27-3.1 8.1-5.65 11.38-7.67 9.84-20.74 14.68-33.54 11.25L515 502.62c-17.07-4.57-27.2-22.12-22.63-39.19l8.28-30.91-247.28-66.26-8.28 30.91c-4.57 17.07-22.12 27.2-39.19 22.63l-30.91-8.28c-12.8-3.43-21.7-14.16-23.42-26.51-.57-4.12-.35-8.42.79-12.68l13.99-52.23a66.62 66.62 0 0 1-4.09-10.45c-3.2-10.79-3.65-22.52-.52-34.2l12.42-46.37c5.31-19.8 19.36-34.83 36.89-42.21a64.336 64.336 0 0 1 18.49-4.72l18.13-24.23 32.15-42.97c3.45-4.61 7.19-8.9 11.2-12.84 8-7.89 17.03-14.44 26.74-19.51 4.86-2.54 9.89-4.71 15.05-6.49 10.33-3.58 21.19-5.63 32.24-6.04 11.05-.41 22.31.82 33.43 3.8l122.68 32.87c11.12 2.98 21.48 7.54 30.85 13.43a111.11 111.11 0 0 1 34.69 34.5c8.82 13.88 14.64 29.84 16.68 46.99l6.36 53.29 3.59 30.05a64.49 64.49 0 0 1 22.74 29.93c4.39 11.88 5.29 25.19 1.75 38.39zM255.58 234.34c-18.55-4.97-34.21 4.04-39.17 22.53-4.96 18.49 4.11 34.12 22.65 39.09 18.55 4.97 45.54 15.51 50.49-2.98 4.96-18.49-15.43-53.67-33.97-58.64zm290.61 28.17l-6.36-53.29c-.58-4.87-1.89-9.53-3.82-13.86-5.8-12.99-17.2-23.01-31.42-26.82l-122.68-32.87a48.008 48.008 0 0 0-50.86 17.61l-32.15 42.97 172 46.08 75.29 20.18zm18.49 54.65c-18.55-4.97-53.8 15.31-58.75 33.79-4.95 18.49 23.69 22.86 42.24 27.83 18.55 4.97 34.21-4.04 39.17-22.53 4.95-18.48-4.11-34.12-22.66-39.09z"] +}; +var faCarSide = { + prefix: 'fas', + iconName: 'car-side', + icon: [640, 512, [], "f5e4", "M544 192h-16L419.22 56.02A64.025 64.025 0 0 0 369.24 32H155.33c-26.17 0-49.7 15.93-59.42 40.23L48 194.26C20.44 201.4 0 226.21 0 256v112c0 8.84 7.16 16 16 16h48c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h48c8.84 0 16-7.16 16-16v-80c0-53.02-42.98-96-96-96zM160 432c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm72-240H116.93l38.4-96H232v96zm48 0V96h89.24l76.8 96H280zm200 240c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"] +}; +var faCaravan = { + prefix: 'fas', + iconName: 'caravan', + icon: [640, 512, [], "f8ff", "M416,208a16,16,0,1,0,16,16A16,16,0,0,0,416,208ZM624,320H576V160A160,160,0,0,0,416,0H64A64,64,0,0,0,0,64V320a64,64,0,0,0,64,64H96a96,96,0,0,0,192,0H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM192,432a48,48,0,1,1,48-48A48.05,48.05,0,0,1,192,432Zm64-240a32,32,0,0,1-32,32H96a32,32,0,0,1-32-32V128A32,32,0,0,1,96,96H224a32,32,0,0,1,32,32ZM448,320H320V128a32,32,0,0,1,32-32h64a32,32,0,0,1,32,32Z"] +}; +var faCaretDown = { + prefix: 'fas', + iconName: 'caret-down', + icon: [320, 512, [], "f0d7", "M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z"] +}; +var faCaretLeft = { + prefix: 'fas', + iconName: 'caret-left', + icon: [192, 512, [], "f0d9", "M192 127.338v257.324c0 17.818-21.543 26.741-34.142 14.142L29.196 270.142c-7.81-7.81-7.81-20.474 0-28.284l128.662-128.662c12.599-12.6 34.142-3.676 34.142 14.142z"] +}; +var faCaretRight = { + prefix: 'fas', + iconName: 'caret-right', + icon: [192, 512, [], "f0da", "M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z"] +}; +var faCaretSquareDown = { + prefix: 'fas', + iconName: 'caret-square-down', + icon: [448, 512, [], "f150", "M448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM92.5 220.5l123 123c4.7 4.7 12.3 4.7 17 0l123-123c7.6-7.6 2.2-20.5-8.5-20.5H101c-10.7 0-16.1 12.9-8.5 20.5z"] +}; +var faCaretSquareLeft = { + prefix: 'fas', + iconName: 'caret-square-left', + icon: [448, 512, [], "f191", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM259.515 124.485l-123.03 123.03c-4.686 4.686-4.686 12.284 0 16.971l123.029 123.029c7.56 7.56 20.485 2.206 20.485-8.485V132.971c.001-10.691-12.925-16.045-20.484-8.486z"] +}; +var faCaretSquareRight = { + prefix: 'fas', + iconName: 'caret-square-right', + icon: [448, 512, [], "f152", "M48 32h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48zm140.485 355.515l123.029-123.029c4.686-4.686 4.686-12.284 0-16.971l-123.029-123.03c-7.56-7.56-20.485-2.206-20.485 8.485v246.059c0 10.691 12.926 16.045 20.485 8.486z"] +}; +var faCaretSquareUp = { + prefix: 'fas', + iconName: 'caret-square-up', + icon: [448, 512, [], "f151", "M0 432V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48zm355.515-140.485l-123.03-123.03c-4.686-4.686-12.284-4.686-16.971 0L92.485 291.515c-7.56 7.56-2.206 20.485 8.485 20.485h246.059c10.691 0 16.045-12.926 8.486-20.485z"] +}; +var faCaretUp = { + prefix: 'fas', + iconName: 'caret-up', + icon: [320, 512, [], "f0d8", "M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"] +}; +var faCarrot = { + prefix: 'fas', + iconName: 'carrot', + icon: [512, 512, [], "f787", "M298.2 156.6c-52.7-25.7-114.5-10.5-150.2 32.8l55.2 55.2c6.3 6.3 6.3 16.4 0 22.6-3.1 3.1-7.2 4.7-11.3 4.7s-8.2-1.6-11.3-4.7L130.4 217 2.3 479.7c-2.9 6-3.1 13.3 0 19.7 5.4 11.1 18.9 15.7 30 10.3l133.6-65.2-49.2-49.2c-6.3-6.2-6.3-16.4 0-22.6 6.3-6.2 16.4-6.2 22.6 0l57 57 102-49.8c24-11.7 44.5-31.3 57.1-57.1 30.1-61.7 4.5-136.1-57.2-166.2zm92.1-34.9C409.8 81 399.7 32.9 360 0c-50.3 41.7-52.5 107.5-7.9 151.9l8 8c44.4 44.6 110.3 42.4 151.9-7.9-32.9-39.7-81-49.8-121.7-30.3z"] +}; +var faCartArrowDown = { + prefix: 'fas', + iconName: 'cart-arrow-down', + icon: [576, 512, [], "f218", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM403.029 192H360v-60c0-6.627-5.373-12-12-12h-24c-6.627 0-12 5.373-12 12v60h-43.029c-10.691 0-16.045 12.926-8.485 20.485l67.029 67.029c4.686 4.686 12.284 4.686 16.971 0l67.029-67.029c7.559-7.559 2.205-20.485-8.486-20.485z"] +}; +var faCartPlus = { + prefix: 'fas', + iconName: 'cart-plus', + icon: [576, 512, [], "f217", "M504.717 320H211.572l6.545 32h268.418c15.401 0 26.816 14.301 23.403 29.319l-5.517 24.276C523.112 414.668 536 433.828 536 456c0 31.202-25.519 56.444-56.824 55.994-29.823-.429-54.35-24.631-55.155-54.447-.44-16.287 6.085-31.049 16.803-41.548H231.176C241.553 426.165 248 440.326 248 456c0 31.813-26.528 57.431-58.67 55.938-28.54-1.325-51.751-24.385-53.251-52.917-1.158-22.034 10.436-41.455 28.051-51.586L93.883 64H24C10.745 64 0 53.255 0 40V24C0 10.745 10.745 0 24 0h102.529c11.401 0 21.228 8.021 23.513 19.19L159.208 64H551.99c15.401 0 26.816 14.301 23.403 29.319l-47.273 208C525.637 312.246 515.923 320 504.717 320zM408 168h-48v-40c0-8.837-7.163-16-16-16h-16c-8.837 0-16 7.163-16 16v40h-48c-8.837 0-16 7.163-16 16v16c0 8.837 7.163 16 16 16h48v40c0 8.837 7.163 16 16 16h16c8.837 0 16-7.163 16-16v-40h48c8.837 0 16-7.163 16-16v-16c0-8.837-7.163-16-16-16z"] +}; +var faCashRegister = { + prefix: 'fas', + iconName: 'cash-register', + icon: [512, 512, [], "f788", "M511.1 378.8l-26.7-160c-2.6-15.4-15.9-26.7-31.6-26.7H208v-64h96c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h96v64H59.1c-15.6 0-29 11.3-31.6 26.7L.8 378.7c-.6 3.5-.9 7-.9 10.5V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-90.7c.1-3.5-.2-7-.8-10.5zM280 248c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16zm-32 64h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16zm-32-80c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16zM80 80V48h192v32H80zm40 200h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16zm16 64v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16zm216 112c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16zm24-112c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16zm48-80c0 8.8-7.2 16-16 16h-16c-8.8 0-16-7.2-16-16v-16c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v16z"] +}; +var faCat = { + prefix: 'fas', + iconName: 'cat', + icon: [512, 512, [], "f6be", "M290.59 192c-20.18 0-106.82 1.98-162.59 85.95V192c0-52.94-43.06-96-96-96-17.67 0-32 14.33-32 32s14.33 32 32 32c17.64 0 32 14.36 32 32v256c0 35.3 28.7 64 64 64h176c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-32l128-96v144c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V289.86c-10.29 2.67-20.89 4.54-32 4.54-61.81 0-113.52-44.05-125.41-102.4zM448 96h-64l-64-64v134.4c0 53.02 42.98 96 96 96s96-42.98 96-96V32l-64 64zm-72 80c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm80 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"] +}; +var faCertificate = { + prefix: 'fas', + iconName: 'certificate', + icon: [512, 512, [], "f0a3", "M458.622 255.92l45.985-45.005c13.708-12.977 7.316-36.039-10.664-40.339l-62.65-15.99 17.661-62.015c4.991-17.838-11.829-34.663-29.661-29.671l-61.994 17.667-15.984-62.671C337.085.197 313.765-6.276 300.99 7.228L256 53.57 211.011 7.229c-12.63-13.351-36.047-7.234-40.325 10.668l-15.984 62.671-61.995-17.667C74.87 57.907 58.056 74.738 63.046 92.572l17.661 62.015-62.65 15.99C.069 174.878-6.31 197.944 7.392 210.915l45.985 45.005-45.985 45.004c-13.708 12.977-7.316 36.039 10.664 40.339l62.65 15.99-17.661 62.015c-4.991 17.838 11.829 34.663 29.661 29.671l61.994-17.667 15.984 62.671c4.439 18.575 27.696 24.018 40.325 10.668L256 458.61l44.989 46.001c12.5 13.488 35.987 7.486 40.325-10.668l15.984-62.671 61.994 17.667c17.836 4.994 34.651-11.837 29.661-29.671l-17.661-62.015 62.65-15.99c17.987-4.302 24.366-27.367 10.664-40.339l-45.984-45.004z"] +}; +var faChair = { + prefix: 'fas', + iconName: 'chair', + icon: [448, 512, [], "f6c0", "M112 128c0-29.5 16.2-55 40-68.9V256h48V48h48v208h48V59.1c23.8 13.9 40 39.4 40 68.9v128h48V128C384 57.3 326.7 0 256 0h-64C121.3 0 64 57.3 64 128v128h48zm334.3 213.9l-10.7-32c-4.4-13.1-16.6-21.9-30.4-21.9H42.7c-13.8 0-26 8.8-30.4 21.9l-10.7 32C-5.2 362.6 10.2 384 32 384v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384h256v112c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V384c21.8 0 37.2-21.4 30.3-42.1z"] +}; +var faChalkboard = { + prefix: 'fas', + iconName: 'chalkboard', + icon: [640, 512, [], "f51b", "M96 64h448v352h64V40c0-22.06-17.94-40-40-40H72C49.94 0 32 17.94 32 40v376h64V64zm528 384H480v-64H288v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"] +}; +var faChalkboardTeacher = { + prefix: 'fas', + iconName: 'chalkboard-teacher', + icon: [640, 512, [], "f51c", "M208 352c-2.39 0-4.78.35-7.06 1.09C187.98 357.3 174.35 360 160 360c-14.35 0-27.98-2.7-40.95-6.91-2.28-.74-4.66-1.09-7.05-1.09C49.94 352-.33 402.48 0 464.62.14 490.88 21.73 512 48 512h224c26.27 0 47.86-21.12 48-47.38.33-62.14-49.94-112.62-112-112.62zm-48-32c53.02 0 96-42.98 96-96s-42.98-96-96-96-96 42.98-96 96 42.98 96 96 96zM592 0H208c-26.47 0-48 22.25-48 49.59V96c23.42 0 45.1 6.78 64 17.8V64h352v288h-64v-64H384v64h-76.24c19.1 16.69 33.12 38.73 39.69 64H592c26.47 0 48-22.25 48-49.59V49.59C640 22.25 618.47 0 592 0z"] +}; +var faChargingStation = { + prefix: 'fas', + iconName: 'charging-station', + icon: [576, 512, [], "f5e7", "M336 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h320c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm208-320V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-32V80c0-8.84-7.16-16-16-16s-16 7.16-16 16v48h-16c-8.84 0-16 7.16-16 16v32c0 35.76 23.62 65.69 56 75.93v118.49c0 13.95-9.5 26.92-23.26 29.19C431.22 402.5 416 388.99 416 372v-28c0-48.6-39.4-88-88-88h-8V64c0-35.35-28.65-64-64-64H96C60.65 0 32 28.65 32 64v352h288V304h8c22.09 0 40 17.91 40 40v24.61c0 39.67 28.92 75.16 68.41 79.01C481.71 452.05 520 416.41 520 372V251.93c32.38-10.24 56-40.17 56-75.93v-32c0-8.84-7.16-16-16-16h-16zm-283.91 47.76l-93.7 139c-2.2 3.33-6.21 5.24-10.39 5.24-7.67 0-13.47-6.28-11.67-12.92L167.35 224H108c-7.25 0-12.85-5.59-11.89-11.89l16-107C112.9 99.9 117.98 96 124 96h68c7.88 0 13.62 6.54 11.6 13.21L192 160h57.7c9.24 0 15.01 8.78 10.39 15.76z"] +}; +var faChartArea = { + prefix: 'fas', + iconName: 'chart-area', + icon: [512, 512, [], "f1fe", "M500 384c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v308h436zM372.7 159.5L288 216l-85.3-113.7c-5.1-6.8-15.5-6.3-19.9 1L96 248v104h384l-89.9-187.8c-3.2-6.5-11.4-8.7-17.4-4.7z"] +}; +var faChartBar = { + prefix: 'fas', + iconName: 'chart-bar', + icon: [512, 512, [], "f080", "M332.8 320h38.4c6.4 0 12.8-6.4 12.8-12.8V172.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V76.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-288 0h38.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h38.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-38.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zM496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"] +}; +var faChartLine = { + prefix: 'fas', + iconName: 'chart-line', + icon: [512, 512, [], "f201", "M496 384H64V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM464 96H345.94c-21.38 0-32.09 25.85-16.97 40.97l32.4 32.4L288 242.75l-73.37-73.37c-12.5-12.5-32.76-12.5-45.25 0l-68.69 68.69c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L192 237.25l73.37 73.37c12.5 12.5 32.76 12.5 45.25 0l96-96 32.4 32.4c15.12 15.12 40.97 4.41 40.97-16.97V112c.01-8.84-7.15-16-15.99-16z"] +}; +var faChartPie = { + prefix: 'fas', + iconName: 'chart-pie', + icon: [544, 512, [], "f200", "M527.79 288H290.5l158.03 158.03c6.04 6.04 15.98 6.53 22.19.68 38.7-36.46 65.32-85.61 73.13-140.86 1.34-9.46-6.51-17.85-16.06-17.85zm-15.83-64.8C503.72 103.74 408.26 8.28 288.8.04 279.68-.59 272 7.1 272 16.24V240h223.77c9.14 0 16.82-7.68 16.19-16.8zM224 288V50.71c0-9.55-8.39-17.4-17.84-16.06C86.99 51.49-4.1 155.6.14 280.37 4.5 408.51 114.83 513.59 243.03 511.98c50.4-.63 96.97-16.87 135.26-44.03 7.9-5.6 8.42-17.23 1.57-24.08L224 288z"] +}; +var faCheck = { + prefix: 'fas', + iconName: 'check', + icon: [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"] +}; +var faCheckCircle = { + prefix: 'fas', + iconName: 'check-circle', + icon: [512, 512, [], "f058", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"] +}; +var faCheckDouble = { + prefix: 'fas', + iconName: 'check-double', + icon: [512, 512, [], "f560", "M505 174.8l-39.6-39.6c-9.4-9.4-24.6-9.4-33.9 0L192 374.7 80.6 263.2c-9.4-9.4-24.6-9.4-33.9 0L7 302.9c-9.4 9.4-9.4 24.6 0 34L175 505c9.4 9.4 24.6 9.4 33.9 0l296-296.2c9.4-9.5 9.4-24.7.1-34zm-324.3 106c6.2 6.3 16.4 6.3 22.6 0l208-208.2c6.2-6.3 6.2-16.4 0-22.6L366.1 4.7c-6.2-6.3-16.4-6.3-22.6 0L192 156.2l-55.4-55.5c-6.2-6.3-16.4-6.3-22.6 0L68.7 146c-6.2 6.3-6.2 16.4 0 22.6l112 112.2z"] +}; +var faCheckSquare = { + prefix: 'fas', + iconName: 'check-square', + icon: [448, 512, [], "f14a", "M400 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zm-204.686-98.059l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.248-16.379-6.249-22.628 0L184 302.745l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.25 16.379 6.25 22.628.001z"] +}; +var faCheese = { + prefix: 'fas', + iconName: 'cheese', + icon: [512, 512, [], "f7ef", "M0 288v160a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V288zM299.83 32a32 32 0 0 0-21.13 7L0 256h512c0-119.89-94-217.8-212.17-224z"] +}; +var faChess = { + prefix: 'fas', + iconName: 'chess', + icon: [512, 512, [], "f439", "M74 208H64a16 16 0 0 0-16 16v16a16 16 0 0 0 16 16h15.94A535.78 535.78 0 0 1 64 384h128a535.78 535.78 0 0 1-15.94-128H192a16 16 0 0 0 16-16v-16a16 16 0 0 0-16-16h-10l33.89-90.38a16 16 0 0 0-15-21.62H144V64h24a8 8 0 0 0 8-8V40a8 8 0 0 0-8-8h-24V8a8 8 0 0 0-8-8h-16a8 8 0 0 0-8 8v24H88a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h24v32H55.09a16 16 0 0 0-15 21.62zm173.16 251.58L224 448v-16a16 16 0 0 0-16-16H48a16 16 0 0 0-16 16v16L8.85 459.58A16 16 0 0 0 0 473.89V496a16 16 0 0 0 16 16h224a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31zm92.77-157.78l-3.29 82.2h126.72l-3.29-82.21 24.6-20.79A32 32 0 0 0 496 256.54V198a6 6 0 0 0-6-6h-26.38a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H373.1a6 6 0 0 0-6 6v26h-24.71v-26a6 6 0 0 0-6-6H310a6 6 0 0 0-6 6v58.6a32 32 0 0 0 11.36 24.4zM384 304a16 16 0 0 1 32 0v32h-32zm119.16 155.58L480 448v-16a16 16 0 0 0-16-16H336a16 16 0 0 0-16 16v16l-23.15 11.58a16 16 0 0 0-8.85 14.31V496a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-22.11a16 16 0 0 0-8.84-14.31z"] +}; +var faChessBishop = { + prefix: 'fas', + iconName: 'chess-bishop', + icon: [320, 512, [], "f43a", "M8 287.88c0 51.64 22.14 73.83 56 84.6V416h192v-43.52c33.86-10.77 56-33 56-84.6 0-30.61-10.73-67.1-26.69-102.56L185 285.65a8 8 0 0 1-11.31 0l-11.31-11.31a8 8 0 0 1 0-11.31L270.27 155.1c-20.8-37.91-46.47-72.1-70.87-92.59C213.4 59.09 224 47.05 224 32a32 32 0 0 0-32-32h-64a32 32 0 0 0-32 32c0 15 10.6 27.09 24.6 30.51C67.81 106.8 8 214.5 8 287.88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faChessBoard = { + prefix: 'fas', + iconName: 'chess-board', + icon: [512, 512, [], "f43c", "M255.9.2h-64v64h64zM0 64.17v64h64v-64zM128 .2H64v64h64zm64 255.9v64h64v-64zM0 192.12v64h64v-64zM383.85.2h-64v64h64zm128 0h-64v64h64zM128 256.1H64v64h64zM511.8 448v-64h-64v64zm0-128v-64h-64v64zM383.85 512h64v-64h-64zm128-319.88v-64h-64v64zM128 512h64v-64h-64zM0 512h64v-64H0zm255.9 0h64v-64h-64zM0 320.07v64h64v-64zm319.88-191.92v-64h-64v64zm-64 128h64v-64h-64zm-64 128v64h64v-64zm128-64h64v-64h-64zm0-127.95h64v-64h-64zm0 191.93v64h64v-64zM64 384.05v64h64v-64zm128-255.9v-64h-64v64zm191.92 255.9h64v-64h-64zm-128-191.93v-64h-64v64zm128-127.95v64h64v-64zm-128 255.9v64h64v-64zm-64-127.95H128v64h64zm191.92 64h64v-64h-64zM128 128.15H64v64h64zm0 191.92v64h64v-64z"] +}; +var faChessKing = { + prefix: 'fas', + iconName: 'chess-king', + icon: [448, 512, [], "f43f", "M400 448H48a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm16-288H256v-48h40a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8h-40V8a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v40h-40a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8h40v48H32a32 32 0 0 0-30.52 41.54L74.56 416h298.88l73.08-214.46A32 32 0 0 0 416 160z"] +}; +var faChessKnight = { + prefix: 'fas', + iconName: 'chess-knight', + icon: [384, 512, [], "f441", "M19 272.47l40.63 18.06a32 32 0 0 0 24.88.47l12.78-5.12a32 32 0 0 0 18.76-20.5l9.22-30.65a24 24 0 0 1 12.55-15.65L159.94 208v50.33a48 48 0 0 1-26.53 42.94l-57.22 28.65A80 80 0 0 0 32 401.48V416h319.86V224c0-106-85.92-192-191.92-192H12A12 12 0 0 0 0 44a16.9 16.9 0 0 0 1.79 7.58L16 80l-9 9a24 24 0 0 0-7 17v137.21a32 32 0 0 0 19 29.26zM52 128a20 20 0 1 1-20 20 20 20 0 0 1 20-20zm316 320H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faChessPawn = { + prefix: 'fas', + iconName: 'chess-pawn', + icon: [320, 512, [], "f443", "M105.1 224H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h16v5.49c0 44-4.14 86.6-24 122.51h176c-19.89-35.91-24-78.51-24-122.51V288h16a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-25.1c29.39-18.38 49.1-50.78 49.1-88a104 104 0 0 0-208 0c0 37.22 19.71 69.62 49.1 88zM304 448H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faChessQueen = { + prefix: 'fas', + iconName: 'chess-queen', + icon: [512, 512, [], "f445", "M256 112a56 56 0 1 0-56-56 56 56 0 0 0 56 56zm176 336H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm72.87-263.84l-28.51-15.92c-7.44-5-16.91-2.46-22.29 4.68a47.59 47.59 0 0 1-47.23 18.23C383.7 186.86 368 164.93 368 141.4a13.4 13.4 0 0 0-13.4-13.4h-38.77c-6 0-11.61 4-12.86 9.91a48 48 0 0 1-93.94 0c-1.25-5.92-6.82-9.91-12.86-9.91H157.4a13.4 13.4 0 0 0-13.4 13.4c0 25.69-19 48.75-44.67 50.49a47.5 47.5 0 0 1-41.54-19.15c-5.28-7.09-14.73-9.45-22.09-4.54l-28.57 16a16 16 0 0 0-5.44 20.47L104.24 416h303.52l102.55-211.37a16 16 0 0 0-5.44-20.47z"] +}; +var faChessRook = { + prefix: 'fas', + iconName: 'chess-rook', + icon: [384, 512, [], "f447", "M368 32h-56a16 16 0 0 0-16 16v48h-48V48a16 16 0 0 0-16-16h-80a16 16 0 0 0-16 16v48H88.1V48a16 16 0 0 0-16-16H16A16 16 0 0 0 0 48v176l64 32c0 48.33-1.54 95-13.21 160h282.42C321.54 351 320 303.72 320 256l64-32V48a16 16 0 0 0-16-16zM224 320h-64v-64a32 32 0 0 1 64 0zm144 128H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h352a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faChevronCircleDown = { + prefix: 'fas', + iconName: 'chevron-circle-down', + icon: [512, 512, [], "f13a", "M504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zM273 369.9l135.5-135.5c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L256 285.1 154.4 183.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L239 369.9c9.4 9.4 24.6 9.4 34 0z"] +}; +var faChevronCircleLeft = { + prefix: 'fas', + iconName: 'chevron-circle-left', + icon: [512, 512, [], "f137", "M256 504C119 504 8 393 8 256S119 8 256 8s248 111 248 248-111 248-248 248zM142.1 273l135.5 135.5c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L226.9 256l101.6-101.6c9.4-9.4 9.4-24.6 0-33.9l-17-17c-9.4-9.4-24.6-9.4-33.9 0L142.1 239c-9.4 9.4-9.4 24.6 0 34z"] +}; +var faChevronCircleRight = { + prefix: 'fas', + iconName: 'chevron-circle-right', + icon: [512, 512, [], "f138", "M256 8c137 0 248 111 248 248S393 504 256 504 8 393 8 256 119 8 256 8zm113.9 231L234.4 103.5c-9.4-9.4-24.6-9.4-33.9 0l-17 17c-9.4 9.4-9.4 24.6 0 33.9L285.1 256 183.5 357.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L369.9 273c9.4-9.4 9.4-24.6 0-34z"] +}; +var faChevronCircleUp = { + prefix: 'fas', + iconName: 'chevron-circle-up', + icon: [512, 512, [], "f139", "M8 256C8 119 119 8 256 8s248 111 248 248-111 248-248 248S8 393 8 256zm231-113.9L103.5 277.6c-9.4 9.4-9.4 24.6 0 33.9l17 17c9.4 9.4 24.6 9.4 33.9 0L256 226.9l101.6 101.6c9.4 9.4 24.6 9.4 33.9 0l17-17c9.4-9.4 9.4-24.6 0-33.9L273 142.1c-9.4-9.4-24.6-9.4-34 0z"] +}; +var faChevronDown = { + prefix: 'fas', + iconName: 'chevron-down', + icon: [448, 512, [], "f078", "M207.029 381.476L12.686 187.132c-9.373-9.373-9.373-24.569 0-33.941l22.667-22.667c9.357-9.357 24.522-9.375 33.901-.04L224 284.505l154.745-154.021c9.379-9.335 24.544-9.317 33.901.04l22.667 22.667c9.373 9.373 9.373 24.569 0 33.941L240.971 381.476c-9.373 9.372-24.569 9.372-33.942 0z"] +}; +var faChevronLeft = { + prefix: 'fas', + iconName: 'chevron-left', + icon: [320, 512, [], "f053", "M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"] +}; +var faChevronRight = { + prefix: 'fas', + iconName: 'chevron-right', + icon: [320, 512, [], "f054", "M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"] +}; +var faChevronUp = { + prefix: 'fas', + iconName: 'chevron-up', + icon: [448, 512, [], "f077", "M240.971 130.524l194.343 194.343c9.373 9.373 9.373 24.569 0 33.941l-22.667 22.667c-9.357 9.357-24.522 9.375-33.901.04L224 227.495 69.255 381.516c-9.379 9.335-24.544 9.317-33.901-.04l-22.667-22.667c-9.373-9.373-9.373-24.569 0-33.941L207.03 130.525c9.372-9.373 24.568-9.373 33.941-.001z"] +}; +var faChild = { + prefix: 'fas', + iconName: 'child', + icon: [384, 512, [], "f1ae", "M120 72c0-39.765 32.235-72 72-72s72 32.235 72 72c0 39.764-32.235 72-72 72s-72-32.236-72-72zm254.627 1.373c-12.496-12.497-32.758-12.497-45.254 0L242.745 160H141.254L54.627 73.373c-12.496-12.497-32.758-12.497-45.254 0-12.497 12.497-12.497 32.758 0 45.255L104 213.254V480c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V368h16v112c0 17.673 14.327 32 32 32h16c17.673 0 32-14.327 32-32V213.254l94.627-94.627c12.497-12.497 12.497-32.757 0-45.254z"] +}; +var faChurch = { + prefix: 'fas', + iconName: 'church', + icon: [640, 512, [], "f51d", "M464.46 246.68L352 179.2V128h48c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-48V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v48h-48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v51.2l-112.46 67.48A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.65-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.54A32.024 32.024 0 0 0 0 395.96zm620.61-29.42L512 320v192h112c8.84 0 16-7.16 16-16V395.96c0-12.8-7.63-24.37-19.39-29.42z"] +}; +var faCircle = { + prefix: 'fas', + iconName: 'circle', + icon: [512, 512, [], "f111", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"] +}; +var faCircleNotch = { + prefix: 'fas', + iconName: 'circle-notch', + icon: [512, 512, [], "f1ce", "M288 39.056v16.659c0 10.804 7.281 20.159 17.686 23.066C383.204 100.434 440 171.518 440 256c0 101.689-82.295 184-184 184-101.689 0-184-82.295-184-184 0-84.47 56.786-155.564 134.312-177.219C216.719 75.874 224 66.517 224 55.712V39.064c0-15.709-14.834-27.153-30.046-23.234C86.603 43.482 7.394 141.206 8.003 257.332c.72 137.052 111.477 246.956 248.531 246.667C393.255 503.711 504 392.788 504 256c0-115.633-79.14-212.779-186.211-240.236C302.678 11.889 288 23.456 288 39.056z"] +}; +var faCity = { + prefix: 'fas', + iconName: 'city', + icon: [640, 512, [], "f64f", "M616 192H480V24c0-13.26-10.74-24-24-24H312c-13.26 0-24 10.74-24 24v72h-64V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v80h-64V16c0-8.84-7.16-16-16-16H80c-8.84 0-16 7.16-16 16v80H24c-13.26 0-24 10.74-24 24v360c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V216c0-13.26-10.75-24-24-24zM128 404c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12H76c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm128 192c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12V76c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm160 288c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40zm0-96c0 6.63-5.37 12-12 12h-40c-6.63 0-12-5.37-12-12v-40c0-6.63 5.37-12 12-12h40c6.63 0 12 5.37 12 12v40z"] +}; +var faClinicMedical = { + prefix: 'fas', + iconName: 'clinic-medical', + icon: [576, 512, [], "f7f2", "M288 115L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2zm96 261a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8zm186.69-139.72l-255.94-226a39.85 39.85 0 0 0-53.45 0l-256 226a16 16 0 0 0-1.21 22.6L25.5 282.7a16 16 0 0 0 22.6 1.21L277.42 81.63a16 16 0 0 1 21.17 0L527.91 283.9a16 16 0 0 0 22.6-1.21l21.4-23.82a16 16 0 0 0-1.22-22.59z"] +}; +var faClipboard = { + prefix: 'fas', + iconName: 'clipboard', + icon: [384, 512, [], "f328", "M384 112v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h80c0-35.29 28.71-64 64-64s64 28.71 64 64h80c26.51 0 48 21.49 48 48zM192 40c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24m96 114v-20a6 6 0 0 0-6-6H102a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6h180a6 6 0 0 0 6-6z"] +}; +var faClipboardCheck = { + prefix: 'fas', + iconName: 'clipboard-check', + icon: [384, 512, [], "f46c", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm121.2 231.8l-143 141.8c-4.7 4.7-12.3 4.6-17-.1l-82.6-83.3c-4.7-4.7-4.6-12.3.1-17L99.1 285c4.7-4.7 12.3-4.6 17 .1l46 46.4 106-105.2c4.7-4.7 12.3-4.6 17 .1l28.2 28.4c4.7 4.8 4.6 12.3-.1 17z"] +}; +var faClipboardList = { + prefix: 'fas', + iconName: 'clipboard-list', + icon: [384, 512, [], "f46d", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM96 424c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm0-96c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24zm96-192c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm128 368c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16z"] +}; +var faClock = { + prefix: 'fas', + iconName: 'clock', + icon: [512, 512, [], "f017", "M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm92.49,313h0l-20,25a16,16,0,0,1-22.49,2.5h0l-67-49.72a40,40,0,0,1-15-31.23V112a16,16,0,0,1,16-16h32a16,16,0,0,1,16,16V256l58,42.5A16,16,0,0,1,348.49,321Z"] +}; +var faClone = { + prefix: 'fas', + iconName: 'clone', + icon: [512, 512, [], "f24d", "M464 0c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48H176c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h288M176 416c-44.112 0-80-35.888-80-80V128H48c-26.51 0-48 21.49-48 48v288c0 26.51 21.49 48 48 48h288c26.51 0 48-21.49 48-48v-48H176z"] +}; +var faClosedCaptioning = { + prefix: 'fas', + iconName: 'closed-captioning', + icon: [512, 512, [], "f20a", "M464 64H48C21.5 64 0 85.5 0 112v288c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM218.1 287.7c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.6 56.8-172.8 32.1-172.8-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7l-17.5 30.5c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2.1 48 51.1 70.5 92.3 32.6zm190.4 0c2.8-2.5 7.1-2.1 9.2.9l19.5 27.7c1.7 2.4 1.5 5.6-.5 7.7-53.5 56.9-172.7 32.1-172.7-67.9 0-97.3 121.7-119.5 172.5-70.1 2.1 2 2.5 3.2 1 5.7L420 222.2c-1.9 3.1-6.2 4-9.1 1.7-40.8-32-94.6-14.9-94.6 31.2 0 48 51 70.5 92.2 32.6z"] +}; +var faCloud = { + prefix: 'fas', + iconName: 'cloud', + icon: [640, 512, [], "f0c2", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4z"] +}; +var faCloudDownloadAlt = { + prefix: 'fas', + iconName: 'cloud-download-alt', + icon: [640, 512, [], "f381", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-132.9 88.7L299.3 420.7c-6.2 6.2-16.4 6.2-22.6 0L171.3 315.3c-10.1-10.1-2.9-27.3 11.3-27.3H248V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v112h65.4c14.2 0 21.4 17.2 11.3 27.3z"] +}; +var faCloudMeatball = { + prefix: 'fas', + iconName: 'cloud-meatball', + icon: [512, 512, [], "f73b", "M48 352c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm416 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm-119 11.1c4.6-14.5 1.6-30.8-9.8-42.3-11.5-11.5-27.8-14.4-42.3-9.9-7-13.5-20.7-23-36.9-23s-29.9 9.5-36.9 23c-14.5-4.6-30.8-1.6-42.3 9.9-11.5 11.5-14.4 27.8-9.9 42.3-13.5 7-23 20.7-23 36.9s9.5 29.9 23 36.9c-4.6 14.5-1.6 30.8 9.9 42.3 8.2 8.2 18.9 12.3 29.7 12.3 4.3 0 8.5-1.1 12.6-2.5 7 13.5 20.7 23 36.9 23s29.9-9.5 36.9-23c4.1 1.3 8.3 2.5 12.6 2.5 10.8 0 21.5-4.1 29.7-12.3 11.5-11.5 14.4-27.8 9.8-42.3 13.5-7 23-20.7 23-36.9s-9.5-29.9-23-36.9zM512 224c0-53-43-96-96-96-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h43.4c3.6-8 8.4-15.4 14.8-21.8 13.5-13.5 31.5-21.1 50.8-21.3 13.5-13.2 31.7-20.9 51-20.9s37.5 7.7 51 20.9c19.3.2 37.3 7.8 50.8 21.3 6.4 6.4 11.3 13.8 14.8 21.8H416c53 0 96-43 96-96z"] +}; +var faCloudMoon = { + prefix: 'fas', + iconName: 'cloud-moon', + icon: [576, 512, [], "f6c3", "M342.8 352.7c5.7-9.6 9.2-20.7 9.2-32.7 0-35.3-28.7-64-64-64-17.2 0-32.8 6.9-44.3 17.9-16.3-29.6-47.5-49.9-83.7-49.9-53 0-96 43-96 96 0 2 .5 3.8.6 5.7C27.1 338.8 0 374.1 0 416c0 53 43 96 96 96h240c44.2 0 80-35.8 80-80 0-41.9-32.3-75.8-73.2-79.3zm222.5-54.3c-93.1 17.7-178.5-53.7-178.5-147.7 0-54.2 29-104 76.1-130.8 7.3-4.1 5.4-15.1-2.8-16.7C448.4 1.1 436.7 0 425 0 319.1 0 233.1 85.9 233.1 192c0 8.5.7 16.8 1.8 25 5.9 4.3 11.6 8.9 16.7 14.2 11.4-4.7 23.7-7.2 36.4-7.2 52.9 0 96 43.1 96 96 0 3.6-.2 7.2-.6 10.7 23.6 10.8 42.4 29.5 53.5 52.6 54.4-3.4 103.7-29.3 137.1-70.4 5.3-6.5-.5-16.1-8.7-14.5z"] +}; +var faCloudMoonRain = { + prefix: 'fas', + iconName: 'cloud-moon-rain', + icon: [576, 512, [], "f73c", "M350.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C27.6 232.9 0 265.2 0 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm217.4-1.7c-70.4 13.3-135-40.3-135-110.8 0-40.6 21.9-78 57.5-98.1 5.5-3.1 4.1-11.4-2.1-12.5C479.6.8 470.7 0 461.8 0c-77.9 0-141.1 61.2-144.4 137.9 26.7 11.9 48.2 33.8 58.9 61.7 37.1 14.3 64 47.4 70.2 86.8 5.1.5 10 1.5 15.2 1.5 44.7 0 85.6-20.2 112.6-53.3 4.2-4.8-.2-12-6.4-10.8zM364.5 418.1c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z"] +}; +var faCloudRain = { + prefix: 'fas', + iconName: 'cloud-rain', + icon: [512, 512, [], "f73d", "M416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.1 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96zM88 374.2c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0zm160 0c-12.8 44.4-40 56.4-40 87.7 0 27.7 21.5 50.1 48 50.1s48-22.4 48-50.1c0-31.4-27.2-43.1-40-87.7-2.2-8.1-13.5-8.5-16 0z"] +}; +var faCloudShowersHeavy = { + prefix: 'fas', + iconName: 'cloud-showers-heavy', + icon: [512, 512, [], "f740", "M183.9 370.1c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-192 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm384 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zm-96 0c-7.6-4.4-17.4-1.8-21.8 6l-64 112c-4.4 7.7-1.7 17.5 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l64-112c4.4-7.6 1.7-17.4-6-21.8zM416 128c-.6 0-1.1.2-1.6.2 1.1-5.2 1.6-10.6 1.6-16.2 0-44.2-35.8-80-80-80-24.6 0-46.3 11.3-61 28.8C256.4 24.8 219.3 0 176 0 114.2 0 64 50.1 64 112c0 7.3.8 14.3 2.1 21.2C27.8 145.8 0 181.5 0 224c0 53 43 96 96 96h320c53 0 96-43 96-96s-43-96-96-96z"] +}; +var faCloudSun = { + prefix: 'fas', + iconName: 'cloud-sun', + icon: [640, 512, [], "f6c4", "M575.2 325.7c.2-1.9.8-3.7.8-5.6 0-35.3-28.7-64-64-64-12.6 0-24.2 3.8-34.1 10-17.6-38.8-56.5-66-101.9-66-61.8 0-112 50.1-112 112 0 3 .7 5.8.9 8.7-49.6 3.7-88.9 44.7-88.9 95.3 0 53 43 96 96 96h272c53 0 96-43 96-96 0-42.1-27.2-77.4-64.8-90.4zm-430.4-22.6c-43.7-43.7-43.7-114.7 0-158.3 43.7-43.7 114.7-43.7 158.4 0 9.7 9.7 16.9 20.9 22.3 32.7 9.8-3.7 20.1-6 30.7-7.5L386 81.1c4-11.9-7.3-23.1-19.2-19.2L279 91.2 237.5 8.4C232-2.8 216-2.8 210.4 8.4L169 91.2 81.1 61.9C69.3 58 58 69.3 61.9 81.1l29.3 87.8-82.8 41.5c-11.2 5.6-11.2 21.5 0 27.1l82.8 41.4-29.3 87.8c-4 11.9 7.3 23.1 19.2 19.2l76.1-25.3c6.1-12.4 14-23.7 23.6-33.5-13.1-5.4-25.4-13.4-36-24zm-4.8-79.2c0 40.8 29.3 74.8 67.9 82.3 8-4.7 16.3-8.8 25.2-11.7 5.4-44.3 31-82.5 67.4-105C287.3 160.4 258 140 224 140c-46.3 0-84 37.6-84 83.9z"] +}; +var faCloudSunRain = { + prefix: 'fas', + iconName: 'cloud-sun-rain', + icon: [576, 512, [], "f743", "M510.5 225.5c-6.9-37.2-39.3-65.5-78.5-65.5-12.3 0-23.9 3-34.3 8-17.4-24.1-45.6-40-77.7-40-53 0-96 43-96 96 0 .5.2 1.1.2 1.6C187.6 233 160 265.2 160 304c0 44.2 35.8 80 80 80h256c44.2 0 80-35.8 80-80 0-39.2-28.2-71.7-65.5-78.5zm-386.4 34.4c-37.4-37.4-37.4-98.3 0-135.8 34.6-34.6 89.1-36.8 126.7-7.4 20-12.9 43.6-20.7 69.2-20.7.7 0 1.3.2 2 .2l8.9-26.7c3.4-10.2-6.3-19.8-16.5-16.4l-75.3 25.1-35.5-71c-4.8-9.6-18.5-9.6-23.3 0l-35.5 71-75.3-25.1c-10.2-3.4-19.8 6.3-16.4 16.5l25.1 75.3-71 35.5c-9.6 4.8-9.6 18.5 0 23.3l71 35.5-25.1 75.3c-3.4 10.2 6.3 19.8 16.5 16.5l59.2-19.7c-.2-2.4-.7-4.7-.7-7.2 0-12.5 2.3-24.5 6.2-35.9-3.6-2.7-7.1-5.2-10.2-8.3zm69.8-58c4.3-24.5 15.8-46.4 31.9-64-9.8-6.2-21.4-9.9-33.8-9.9-35.3 0-64 28.7-64 64 0 18.7 8.2 35.4 21.1 47.1 11.3-15.9 26.6-28.9 44.8-37.2zm330.6 216.2c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8zm-96 0c-7.6-4.3-17.4-1.8-21.8 6l-36.6 64c-4.4 7.7-1.7 17.4 6 21.8 2.5 1.4 5.2 2.1 7.9 2.1 5.5 0 10.9-2.9 13.9-8.1l36.6-64c4.3-7.7 1.7-17.4-6-21.8z"] +}; +var faCloudUploadAlt = { + prefix: 'fas', + iconName: 'cloud-upload-alt', + icon: [640, 512, [], "f382", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z"] +}; +var faCocktail = { + prefix: 'fas', + iconName: 'cocktail', + icon: [576, 512, [], "f561", "M296 464h-56V338.78l168.74-168.73c15.52-15.52 4.53-42.05-17.42-42.05H24.68c-21.95 0-32.94 26.53-17.42 42.05L176 338.78V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM432 0c-62.61 0-115.35 40.2-135.18 96h52.54c16.65-28.55 47.27-48 82.64-48 52.93 0 96 43.06 96 96s-43.07 96-96 96c-14.04 0-27.29-3.2-39.32-8.64l-35.26 35.26C379.23 279.92 404.59 288 432 288c79.53 0 144-64.47 144-144S511.53 0 432 0z"] +}; +var faCode = { + prefix: 'fas', + iconName: 'code', + icon: [640, 512, [], "f121", "M278.9 511.5l-61-17.7c-6.4-1.8-10-8.5-8.2-14.9L346.2 8.7c1.8-6.4 8.5-10 14.9-8.2l61 17.7c6.4 1.8 10 8.5 8.2 14.9L293.8 503.3c-1.9 6.4-8.5 10.1-14.9 8.2zm-114-112.2l43.5-46.4c4.6-4.9 4.3-12.7-.8-17.2L117 256l90.6-79.7c5.1-4.5 5.5-12.3.8-17.2l-43.5-46.4c-4.5-4.8-12.1-5.1-17-.5L3.8 247.2c-5.1 4.7-5.1 12.8 0 17.5l144.1 135.1c4.9 4.6 12.5 4.4 17-.5zm327.2.6l144.1-135.1c5.1-4.7 5.1-12.8 0-17.5L492.1 112.1c-4.8-4.5-12.4-4.3-17 .5L431.6 159c-4.6 4.9-4.3 12.7.8 17.2L523 256l-90.6 79.7c-5.1 4.5-5.5 12.3-.8 17.2l43.5 46.4c4.5 4.9 12.1 5.1 17 .6z"] +}; +var faCodeBranch = { + prefix: 'fas', + iconName: 'code-branch', + icon: [384, 512, [], "f126", "M384 144c0-44.2-35.8-80-80-80s-80 35.8-80 80c0 36.4 24.3 67.1 57.5 76.8-.6 16.1-4.2 28.5-11 36.9-15.4 19.2-49.3 22.4-85.2 25.7-28.2 2.6-57.4 5.4-81.3 16.9v-144c32.5-10.2 56-40.5 56-76.3 0-44.2-35.8-80-80-80S0 35.8 0 80c0 35.8 23.5 66.1 56 76.3v199.3C23.5 365.9 0 396.2 0 432c0 44.2 35.8 80 80 80s80-35.8 80-80c0-34-21.2-63.1-51.2-74.6 3.1-5.2 7.8-9.8 14.9-13.4 16.2-8.2 40.4-10.4 66.1-12.8 42.2-3.9 90-8.4 118.2-43.4 14-17.4 21.1-39.8 21.6-67.9 31.6-10.8 54.4-40.7 54.4-75.9zM80 64c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16zm0 384c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm224-320c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16 7.2-16 16-16z"] +}; +var faCoffee = { + prefix: 'fas', + iconName: 'coffee', + icon: [640, 512, [], "f0f4", "M192 384h192c53 0 96-43 96-96h32c70.6 0 128-57.4 128-128S582.6 32 512 32H120c-13.3 0-24 10.7-24 24v232c0 53 43 96 96 96zM512 96c35.3 0 64 28.7 64 64s-28.7 64-64 64h-32V96h32zm47.7 384H48.3c-47.6 0-61-64-36-64h583.3c25 0 11.8 64-35.9 64z"] +}; +var faCog = { + prefix: 'fas', + iconName: 'cog', + icon: [512, 512, [], "f013", "M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faCogs = { + prefix: 'fas', + iconName: 'cogs', + icon: [640, 512, [], "f085", "M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z"] +}; +var faCoins = { + prefix: 'fas', + iconName: 'coins', + icon: [512, 512, [], "f51e", "M0 405.3V448c0 35.3 86 64 192 64s192-28.7 192-64v-42.7C342.7 434.4 267.2 448 192 448S41.3 434.4 0 405.3zM320 128c106 0 192-28.7 192-64S426 0 320 0 128 28.7 128 64s86 64 192 64zM0 300.4V352c0 35.3 86 64 192 64s192-28.7 192-64v-51.6c-41.3 34-116.9 51.6-192 51.6S41.3 334.4 0 300.4zm416 11c57.3-11.1 96-31.7 96-55.4v-42.7c-23.2 16.4-57.3 27.6-96 34.5v63.6zM192 160C86 160 0 195.8 0 240s86 80 192 80 192-35.8 192-80-86-80-192-80zm219.3 56.3c60-10.8 100.7-32 100.7-56.3v-42.7c-35.5 25.1-96.5 38.6-160.7 41.8 29.5 14.3 51.2 33.5 60 57.2z"] +}; +var faColumns = { + prefix: 'fas', + iconName: 'columns', + icon: [512, 512, [], "f0db", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64V160h160v256zm224 0H288V160h160v256z"] +}; +var faComment = { + prefix: 'fas', + iconName: 'comment', + icon: [512, 512, [], "f075", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z"] +}; +var faCommentAlt = { + prefix: 'fas', + iconName: 'comment-alt', + icon: [512, 512, [], "f27a", "M448 0H64C28.7 0 0 28.7 0 64v288c0 35.3 28.7 64 64 64h96v84c0 9.8 11.2 15.5 19.1 9.7L304 416h144c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64z"] +}; +var faCommentDollar = { + prefix: 'fas', + iconName: 'comment-dollar', + icon: [512, 512, [], "f651", "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95.01 57.02 130.74C44.46 421.05 2.7 465.97 2.2 466.5A7.995 7.995 0 0 0 8 480c66.26 0 115.99-31.75 140.6-51.38C181.29 440.93 217.59 448 256 448c141.38 0 256-93.12 256-208S397.38 32 256 32zm24 302.44V352c0 8.84-7.16 16-16 16h-16c-8.84 0-16-7.16-16-16v-17.73c-11.42-1.35-22.28-5.19-31.78-11.46-6.22-4.11-6.82-13.11-1.55-18.38l17.52-17.52c3.74-3.74 9.31-4.24 14.11-2.03 3.18 1.46 6.66 2.22 10.26 2.22h32.78c4.66 0 8.44-3.78 8.44-8.42 0-3.75-2.52-7.08-6.12-8.11l-50.07-14.3c-22.25-6.35-40.01-24.71-42.91-47.67-4.05-32.07 19.03-59.43 49.32-63.05V128c0-8.84 7.16-16 16-16h16c8.84 0 16 7.16 16 16v17.73c11.42 1.35 22.28 5.19 31.78 11.46 6.22 4.11 6.82 13.11 1.55 18.38l-17.52 17.52c-3.74 3.74-9.31 4.24-14.11 2.03a24.516 24.516 0 0 0-10.26-2.22h-32.78c-4.66 0-8.44 3.78-8.44 8.42 0 3.75 2.52 7.08 6.12 8.11l50.07 14.3c22.25 6.36 40.01 24.71 42.91 47.67 4.05 32.06-19.03 59.42-49.32 63.04z"] +}; +var faCommentDots = { + prefix: 'fas', + iconName: 'comment-dots', + icon: [512, 512, [], "f4ad", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128 272c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faCommentMedical = { + prefix: 'fas', + iconName: 'comment-medical', + icon: [512, 512, [], "f7f5", "M256 32C114.62 32 0 125.12 0 240c0 49.56 21.41 95 57 130.74C44.46 421.05 2.7 466 2.2 466.5A8 8 0 0 0 8 480c66.26 0 116-31.75 140.6-51.38A304.66 304.66 0 0 0 256 448c141.39 0 256-93.12 256-208S397.39 32 256 32zm96 232a8 8 0 0 1-8 8h-56v56a8 8 0 0 1-8 8h-48a8 8 0 0 1-8-8v-56h-56a8 8 0 0 1-8-8v-48a8 8 0 0 1 8-8h56v-56a8 8 0 0 1 8-8h48a8 8 0 0 1 8 8v56h56a8 8 0 0 1 8 8z"] +}; +var faCommentSlash = { + prefix: 'fas', + iconName: 'comment-slash', + icon: [640, 512, [], "f4b3", "M64 240c0 49.6 21.4 95 57 130.7-12.6 50.3-54.3 95.2-54.8 95.8-2.2 2.3-2.8 5.7-1.5 8.7 1.3 2.9 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 27.4 0 53.7-3.6 78.4-10L72.9 186.4c-5.6 17.1-8.9 35-8.9 53.6zm569.8 218.1l-114.4-88.4C554.6 334.1 576 289.2 576 240c0-114.9-114.6-208-256-208-65.1 0-124.2 20.1-169.4 52.7L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"] +}; +var faComments = { + prefix: 'fas', + iconName: 'comments', + icon: [576, 512, [], "f086", "M416 192c0-88.4-93.1-160-208-160S0 103.6 0 192c0 34.3 14.1 65.9 38 92-13.4 30.2-35.5 54.2-35.8 54.5-2.2 2.3-2.8 5.7-1.5 8.7S4.8 352 8 352c36.6 0 66.9-12.3 88.7-25 32.2 15.7 70.3 25 111.3 25 114.9 0 208-71.6 208-160zm122 220c23.9-26 38-57.7 38-92 0-66.9-53.5-124.2-129.3-148.1.9 6.6 1.3 13.3 1.3 20.1 0 105.9-107.7 192-240 192-10.8 0-21.3-.8-31.7-1.9C207.8 439.6 281.8 480 368 480c41 0 79.1-9.2 111.3-25 21.8 12.7 52.1 25 88.7 25 3.2 0 6.1-1.9 7.3-4.8 1.3-2.9.7-6.3-1.5-8.7-.3-.3-22.4-24.2-35.8-54.5z"] +}; +var faCommentsDollar = { + prefix: 'fas', + iconName: 'comments-dollar', + icon: [576, 512, [], "f653", "M416 192c0-88.37-93.12-160-208-160S0 103.63 0 192c0 34.27 14.13 65.95 37.97 91.98C24.61 314.22 2.52 338.16 2.2 338.5A7.995 7.995 0 0 0 8 352c36.58 0 66.93-12.25 88.73-24.98C128.93 342.76 167.02 352 208 352c114.88 0 208-71.63 208-160zm-224 96v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V96c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07V288c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm346.01 123.99C561.87 385.96 576 354.27 576 320c0-66.94-53.49-124.2-129.33-148.07.86 6.6 1.33 13.29 1.33 20.07 0 105.87-107.66 192-240 192-10.78 0-21.32-.77-31.73-1.88C207.8 439.63 281.77 480 368 480c40.98 0 79.07-9.24 111.27-24.98C501.07 467.75 531.42 480 568 480c3.2 0 6.09-1.91 7.34-4.84 1.27-2.94.66-6.34-1.55-8.67-.31-.33-22.42-24.24-35.78-54.5z"] +}; +var faCompactDisc = { + prefix: 'fas', + iconName: 'compact-disc', + icon: [496, 512, [], "f51f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 256H56c0-105.9 86.1-192 192-192v32c-88.2 0-160 71.8-160 160zm160 96c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96zm0-128c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z"] +}; +var faCompass = { + prefix: 'fas', + iconName: 'compass', + icon: [496, 512, [], "f14e", "M225.38 233.37c-12.5 12.5-12.5 32.76 0 45.25 12.49 12.5 32.76 12.5 45.25 0 12.5-12.5 12.5-32.76 0-45.25-12.5-12.49-32.76-12.49-45.25 0zM248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm126.14 148.05L308.17 300.4a31.938 31.938 0 0 1-15.77 15.77l-144.34 65.97c-16.65 7.61-33.81-9.55-26.2-26.2l65.98-144.35a31.938 31.938 0 0 1 15.77-15.77l144.34-65.97c16.65-7.6 33.8 9.55 26.19 26.2z"] +}; +var faCompress = { + prefix: 'fas', + iconName: 'compress', + icon: [448, 512, [], "f066", "M436 192H312c-13.3 0-24-10.7-24-24V44c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v84h84c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm-276-24V44c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v84H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24zm0 300V344c0-13.3-10.7-24-24-24H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-84h84c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12H312c-13.3 0-24 10.7-24 24v124c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"] +}; +var faCompressAlt = { + prefix: 'fas', + iconName: 'compress-alt', + icon: [448, 512, [], "f422", "M4.686 427.314L104 328l-32.922-31.029C55.958 281.851 66.666 256 88.048 256h112C213.303 256 224 266.745 224 280v112c0 21.382-25.803 32.09-40.922 16.971L152 376l-99.314 99.314c-6.248 6.248-16.379 6.248-22.627 0L4.686 449.941c-6.248-6.248-6.248-16.379 0-22.627zM443.314 84.686L344 184l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C234.697 256 224 245.255 224 232V120c0-21.382 25.803-32.09 40.922-16.971L296 136l99.314-99.314c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.248 6.248 6.248 16.379 0 22.627z"] +}; +var faCompressArrowsAlt = { + prefix: 'fas', + iconName: 'compress-arrows-alt', + icon: [512, 512, [], "f78c", "M200 288H88c-21.4 0-32.1 25.8-17 41l32.9 31-99.2 99.3c-6.2 6.2-6.2 16.4 0 22.6l25.4 25.4c6.2 6.2 16.4 6.2 22.6 0L152 408l31.1 33c15.1 15.1 40.9 4.4 40.9-17V312c0-13.3-10.7-24-24-24zm112-64h112c21.4 0 32.1-25.9 17-41l-33-31 99.3-99.3c6.2-6.2 6.2-16.4 0-22.6L481.9 4.7c-6.2-6.2-16.4-6.2-22.6 0L360 104l-31.1-33C313.8 55.9 288 66.6 288 88v112c0 13.3 10.7 24 24 24zm96 136l33-31.1c15.1-15.1 4.4-40.9-17-40.9H312c-13.3 0-24 10.7-24 24v112c0 21.4 25.9 32.1 41 17l31-32.9 99.3 99.3c6.2 6.2 16.4 6.2 22.6 0l25.4-25.4c6.2-6.2 6.2-16.4 0-22.6L408 360zM183 71.1L152 104 52.7 4.7c-6.2-6.2-16.4-6.2-22.6 0L4.7 30.1c-6.2 6.2-6.2 16.4 0 22.6L104 152l-33 31.1C55.9 198.2 66.6 224 88 224h112c13.3 0 24-10.7 24-24V88c0-21.3-25.9-32-41-16.9z"] +}; +var faConciergeBell = { + prefix: 'fas', + iconName: 'concierge-bell', + icon: [512, 512, [], "f562", "M288 130.54V112h16c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16h-96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h16v18.54C115.49 146.11 32 239.18 32 352h448c0-112.82-83.49-205.89-192-221.46zM496 384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"] +}; +var faCookie = { + prefix: 'fas', + iconName: 'cookie', + icon: [512, 512, [], "f563", "M510.37 254.79l-12.08-76.26a132.493 132.493 0 0 0-37.16-72.95l-54.76-54.75c-19.73-19.72-45.18-32.7-72.71-37.05l-76.7-12.15c-27.51-4.36-55.69.11-80.52 12.76L107.32 49.6a132.25 132.25 0 0 0-57.79 57.8l-35.1 68.88a132.602 132.602 0 0 0-12.82 80.94l12.08 76.27a132.493 132.493 0 0 0 37.16 72.95l54.76 54.75a132.087 132.087 0 0 0 72.71 37.05l76.7 12.14c27.51 4.36 55.69-.11 80.52-12.75l69.12-35.21a132.302 132.302 0 0 0 57.79-57.8l35.1-68.87c12.71-24.96 17.2-53.3 12.82-80.96zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faCookieBite = { + prefix: 'fas', + iconName: 'cookie-bite', + icon: [512, 512, [], "f564", "M510.52 255.82c-69.97-.85-126.47-57.69-126.47-127.86-70.17 0-127-56.49-127.86-126.45-27.26-4.14-55.13.3-79.72 12.82l-69.13 35.22a132.221 132.221 0 0 0-57.79 57.81l-35.1 68.88a132.645 132.645 0 0 0-12.82 80.95l12.08 76.27a132.521 132.521 0 0 0 37.16 72.96l54.77 54.76a132.036 132.036 0 0 0 72.71 37.06l76.71 12.15c27.51 4.36 55.7-.11 80.53-12.76l69.13-35.21a132.273 132.273 0 0 0 57.79-57.81l35.1-68.88c12.56-24.64 17.01-52.58 12.91-79.91zM176 368c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm32-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm160 128c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faCopy = { + prefix: 'fas', + iconName: 'copy', + icon: [448, 512, [], "f0c5", "M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z"] +}; +var faCopyright = { + prefix: 'fas', + iconName: 'copyright', + icon: [512, 512, [], "f1f9", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm117.134 346.753c-1.592 1.867-39.776 45.731-109.851 45.731-84.692 0-144.484-63.26-144.484-145.567 0-81.303 62.004-143.401 143.762-143.401 66.957 0 101.965 37.315 103.422 38.904a12 12 0 0 1 1.238 14.623l-22.38 34.655c-4.049 6.267-12.774 7.351-18.234 2.295-.233-.214-26.529-23.88-61.88-23.88-46.116 0-73.916 33.575-73.916 76.082 0 39.602 25.514 79.692 74.277 79.692 38.697 0 65.28-28.338 65.544-28.625 5.132-5.565 14.059-5.033 18.508 1.053l24.547 33.572a12.001 12.001 0 0 1-.553 14.866z"] +}; +var faCouch = { + prefix: 'fas', + iconName: 'couch', + icon: [640, 512, [], "f4b8", "M160 224v64h320v-64c0-35.3 28.7-64 64-64h32c0-53-43-96-96-96H160c-53 0-96 43-96 96h32c35.3 0 64 28.7 64 64zm416-32h-32c-17.7 0-32 14.3-32 32v96H128v-96c0-17.7-14.3-32-32-32H64c-35.3 0-64 28.7-64 64 0 23.6 13 44 32 55.1V432c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-16h384v16c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V311.1c19-11.1 32-31.5 32-55.1 0-35.3-28.7-64-64-64z"] +}; +var faCreditCard = { + prefix: 'fas', + iconName: 'credit-card', + icon: [576, 512, [], "f09d", "M0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V256H0v176zm192-68c0-6.6 5.4-12 12-12h136c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-40zm-128 0c0-6.6 5.4-12 12-12h72c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12v-40zM576 80v48H0V80c0-26.5 21.5-48 48-48h480c26.5 0 48 21.5 48 48z"] +}; +var faCrop = { + prefix: 'fas', + iconName: 'crop', + icon: [512, 512, [], "f125", "M488 352h-40V109.25l59.31-59.31c6.25-6.25 6.25-16.38 0-22.63L484.69 4.69c-6.25-6.25-16.38-6.25-22.63 0L402.75 64H192v96h114.75L160 306.75V24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v264c0 13.25 10.75 24 24 24h232v-96H205.25L352 205.25V488c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"] +}; +var faCropAlt = { + prefix: 'fas', + iconName: 'crop-alt', + icon: [512, 512, [], "f565", "M488 352h-40V96c0-17.67-14.33-32-32-32H192v96h160v328c0 13.25 10.75 24 24 24h48c13.25 0 24-10.75 24-24v-40h40c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24zM160 24c0-13.26-10.75-24-24-24H88C74.75 0 64 10.74 64 24v40H24C10.75 64 0 74.74 0 88v48c0 13.25 10.75 24 24 24h40v256c0 17.67 14.33 32 32 32h224v-96H160V24z"] +}; +var faCross = { + prefix: 'fas', + iconName: 'cross', + icon: [384, 512, [], "f654", "M352 128h-96V32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h96v224c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V256h96c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"] +}; +var faCrosshairs = { + prefix: 'fas', + iconName: 'crosshairs', + icon: [512, 512, [], "f05b", "M500 224h-30.364C455.724 130.325 381.675 56.276 288 42.364V12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v30.364C130.325 56.276 56.276 130.325 42.364 224H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h30.364C56.276 381.675 130.325 455.724 224 469.636V500c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-30.364C381.675 455.724 455.724 381.675 469.636 288H500c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zM288 404.634V364c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40.634C165.826 392.232 119.783 346.243 107.366 288H148c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40.634C119.768 165.826 165.757 119.783 224 107.366V148c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40.634C346.174 119.768 392.217 165.757 404.634 224H364c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40.634C392.232 346.174 346.243 392.217 288 404.634zM288 256c0 17.673-14.327 32-32 32s-32-14.327-32-32c0-17.673 14.327-32 32-32s32 14.327 32 32z"] +}; +var faCrow = { + prefix: 'fas', + iconName: 'crow', + icon: [640, 512, [], "f520", "M544 32h-16.36C513.04 12.68 490.09 0 464 0c-44.18 0-80 35.82-80 80v20.98L12.09 393.57A30.216 30.216 0 0 0 0 417.74c0 22.46 23.64 37.07 43.73 27.03L165.27 384h96.49l44.41 120.1c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38L312.94 384H352c1.91 0 3.76-.23 5.66-.29l44.51 120.38c2.27 6.23 9.15 9.44 15.38 7.17l22.55-8.21c6.23-2.27 9.44-9.15 7.17-15.38l-41.24-111.53C485.74 352.8 544 279.26 544 192v-80l96-16c0-35.35-42.98-64-96-64zm-80 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"] +}; +var faCrown = { + prefix: 'fas', + iconName: 'crown', + icon: [640, 512, [], "f521", "M528 448H112c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h416c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm64-320c-26.5 0-48 21.5-48 48 0 7.1 1.6 13.7 4.4 19.8L476 239.2c-15.4 9.2-35.3 4-44.2-11.6L350.3 85C361 76.2 368 63 368 48c0-26.5-21.5-48-48-48s-48 21.5-48 48c0 15 7 28.2 17.7 37l-81.5 142.6c-8.9 15.6-28.9 20.8-44.2 11.6l-72.3-43.4c2.7-6 4.4-12.7 4.4-19.8 0-26.5-21.5-48-48-48S0 149.5 0 176s21.5 48 48 48c2.6 0 5.2-.4 7.7-.8L128 416h384l72.3-192.8c2.5.4 5.1.8 7.7.8 26.5 0 48-21.5 48-48s-21.5-48-48-48z"] +}; +var faCrutch = { + prefix: 'fas', + iconName: 'crutch', + icon: [512, 512, [], "f7f7", "M507.31 185.71l-181-181a16 16 0 0 0-22.62 0L281 27.31a16 16 0 0 0 0 22.63l181 181a16 16 0 0 0 22.63 0l22.62-22.63a16 16 0 0 0 .06-22.6zm-179.54 66.41l-67.89-67.89 55.1-55.1-45.25-45.25-109.67 109.67a96.08 96.08 0 0 0-25.67 46.29L106.65 360.1l-102 102a16 16 0 0 0 0 22.63l22.62 22.62a16 16 0 0 0 22.63 0l102-102 120.25-27.75a95.88 95.88 0 0 0 46.29-25.65l109.68-109.68L382.87 197zm-54.57 54.57a32 32 0 0 1-15.45 8.54l-79.3 18.32 18.3-79.3a32.22 32.22 0 0 1 8.56-15.45l9.31-9.31 67.89 67.89z"] +}; +var faCube = { + prefix: 'fas', + iconName: 'cube', + icon: [512, 512, [], "f1b2", "M239.1 6.3l-208 78c-18.7 7-31.1 25-31.1 45v225.1c0 18.2 10.3 34.8 26.5 42.9l208 104c13.5 6.8 29.4 6.8 42.9 0l208-104c16.3-8.1 26.5-24.8 26.5-42.9V129.3c0-20-12.4-37.9-31.1-44.9l-208-78C262 2.2 250 2.2 239.1 6.3zM256 68.4l192 72v1.1l-192 78-192-78v-1.1l192-72zm32 356V275.5l160-65v133.9l-160 80z"] +}; +var faCubes = { + prefix: 'fas', + iconName: 'cubes', + icon: [512, 512, [], "f1b3", "M488.6 250.2L392 214V105.5c0-15-9.3-28.4-23.4-33.7l-100-37.5c-8.1-3.1-17.1-3.1-25.3 0l-100 37.5c-14.1 5.3-23.4 18.7-23.4 33.7V214l-96.6 36.2C9.3 255.5 0 268.9 0 283.9V394c0 13.6 7.7 26.1 19.9 32.2l100 50c10.1 5.1 22.1 5.1 32.2 0l103.9-52 103.9 52c10.1 5.1 22.1 5.1 32.2 0l100-50c12.2-6.1 19.9-18.6 19.9-32.2V283.9c0-15-9.3-28.4-23.4-33.7zM358 214.8l-85 31.9v-68.2l85-37v73.3zM154 104.1l102-38.2 102 38.2v.6l-102 41.4-102-41.4v-.6zm84 291.1l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6zm240 112l-85 42.5v-79.1l85-38.8v75.4zm0-112l-102 41.4-102-41.4v-.6l102-38.2 102 38.2v.6z"] +}; +var faCut = { + prefix: 'fas', + iconName: 'cut', + icon: [448, 512, [], "f0c4", "M278.06 256L444.48 89.57c4.69-4.69 4.69-12.29 0-16.97-32.8-32.8-85.99-32.8-118.79 0L210.18 188.12l-24.86-24.86c4.31-10.92 6.68-22.81 6.68-35.26 0-53.02-42.98-96-96-96S0 74.98 0 128s42.98 96 96 96c4.54 0 8.99-.32 13.36-.93L142.29 256l-32.93 32.93c-4.37-.61-8.83-.93-13.36-.93-53.02 0-96 42.98-96 96s42.98 96 96 96 96-42.98 96-96c0-12.45-2.37-24.34-6.68-35.26l24.86-24.86L325.69 439.4c32.8 32.8 85.99 32.8 118.79 0 4.69-4.68 4.69-12.28 0-16.97L278.06 256zM96 160c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32zm0 256c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"] +}; +var faDatabase = { + prefix: 'fas', + iconName: 'database', + icon: [448, 512, [], "f1c0", "M448 73.143v45.714C448 159.143 347.667 192 224 192S0 159.143 0 118.857V73.143C0 32.857 100.333 0 224 0s224 32.857 224 73.143zM448 176v102.857C448 319.143 347.667 352 224 352S0 319.143 0 278.857V176c48.125 33.143 136.208 48.572 224 48.572S399.874 209.143 448 176zm0 160v102.857C448 479.143 347.667 512 224 512S0 479.143 0 438.857V336c48.125 33.143 136.208 48.572 224 48.572S399.874 369.143 448 336z"] +}; +var faDeaf = { + prefix: 'fas', + iconName: 'deaf', + icon: [512, 512, [], "f2a4", "M216 260c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-44.112 35.888-80 80-80s80 35.888 80 80c0 15.464-12.536 28-28 28s-28-12.536-28-28c0-13.234-10.767-24-24-24s-24 10.766-24 24zm24-176c-97.047 0-176 78.953-176 176 0 15.464 12.536 28 28 28s28-12.536 28-28c0-66.168 53.832-120 120-120s120 53.832 120 120c0 75.164-71.009 70.311-71.997 143.622L288 404c0 28.673-23.327 52-52 52-15.464 0-28 12.536-28 28s12.536 28 28 28c59.475 0 107.876-48.328 108-107.774.595-34.428 72-48.24 72-144.226 0-97.047-78.953-176-176-176zm268.485-52.201L480.2 3.515c-4.687-4.686-12.284-4.686-16.971 0L376.2 90.544c-4.686 4.686-4.686 12.284 0 16.971l28.285 28.285c4.686 4.686 12.284 4.686 16.97 0l87.03-87.029c4.687-4.688 4.687-12.286 0-16.972zM168.97 314.745c-4.686-4.686-12.284-4.686-16.97 0L3.515 463.23c-4.686 4.686-4.686 12.284 0 16.971L31.8 508.485c4.687 4.686 12.284 4.686 16.971 0L197.256 360c4.686-4.686 4.686-12.284 0-16.971l-28.286-28.284z"] +}; +var faDemocrat = { + prefix: 'fas', + iconName: 'democrat', + icon: [640, 512, [], "f747", "M637.3 256.9l-19.6-29.4c-28.2-42.3-75.3-67.5-126.1-67.5H256l-81.2-81.2c20.1-20.1 22.6-51.1 7.5-73.9-3.4-5.2-10.8-5.9-15.2-1.5l-41.8 41.8L82.4 2.4c-3.6-3.6-9.6-3-12.4 1.2-12.3 18.6-10.3 44 6.1 60.4 3.3 3.3 7.3 5.3 11.3 7.5-2.2 1.7-4.7 3.1-6.4 5.4L6.4 176.2c-7.3 9.7-8.4 22.7-3 33.5l14.3 28.6c5.4 10.8 16.5 17.7 28.6 17.7h31c8.5 0 16.6-3.4 22.6-9.4L138 212l54 108h352v-77.8c16.2 12.2 18.3 17.6 40.1 50.3 4.9 7.4 14.8 9.3 22.2 4.4l26.6-17.7c7.3-5 9.3-14.9 4.4-22.3zm-341.1-13.6l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L256 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L368 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zm112 0l-16.5 16.1 3.9 22.7c.7 4.1-3.6 7.2-7.2 5.3L480 276.7l-20.4 10.7c-3.6 1.9-7.9-1.2-7.2-5.3l3.9-22.7-16.5-16.1c-3-2.9-1.3-7.9 2.8-8.5l22.8-3.3 10.2-20.7c1.8-3.7 7.1-3.7 9 0l10.2 20.7 22.8 3.3c4 .6 5.6 5.6 2.6 8.5zM192 496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80h160v80c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16V352H192v144z"] +}; +var faDesktop = { + prefix: 'fas', + iconName: 'desktop', + icon: [576, 512, [], "f108", "M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"] +}; +var faDharmachakra = { + prefix: 'fas', + iconName: 'dharmachakra', + icon: [512, 512, [], "f655", "M495 225.06l-17.22 1.08c-5.27-39.49-20.79-75.64-43.86-105.84l12.95-11.43c6.92-6.11 7.25-16.79.73-23.31L426.44 64.4c-6.53-6.53-17.21-6.19-23.31.73L391.7 78.07c-30.2-23.06-66.35-38.58-105.83-43.86L286.94 17c.58-9.21-6.74-17-15.97-17h-29.94c-9.23 0-16.54 7.79-15.97 17l1.08 17.22c-39.49 5.27-75.64 20.79-105.83 43.86l-11.43-12.95c-6.11-6.92-16.79-7.25-23.31-.73L64.4 85.56c-6.53 6.53-6.19 17.21.73 23.31l12.95 11.43c-23.06 30.2-38.58 66.35-43.86 105.84L17 225.06c-9.21-.58-17 6.74-17 15.97v29.94c0 9.23 7.79 16.54 17 15.97l17.22-1.08c5.27 39.49 20.79 75.64 43.86 105.83l-12.95 11.43c-6.92 6.11-7.25 16.79-.73 23.31l21.17 21.17c6.53 6.53 17.21 6.19 23.31-.73l11.43-12.95c30.2 23.06 66.35 38.58 105.84 43.86L225.06 495c-.58 9.21 6.74 17 15.97 17h29.94c9.23 0 16.54-7.79 15.97-17l-1.08-17.22c39.49-5.27 75.64-20.79 105.84-43.86l11.43 12.95c6.11 6.92 16.79 7.25 23.31.73l21.17-21.17c6.53-6.53 6.19-17.21-.73-23.31l-12.95-11.43c23.06-30.2 38.58-66.35 43.86-105.83l17.22 1.08c9.21.58 17-6.74 17-15.97v-29.94c-.01-9.23-7.8-16.54-17.01-15.97zM281.84 98.61c24.81 4.07 47.63 13.66 67.23 27.78l-42.62 48.29c-8.73-5.44-18.32-9.54-28.62-11.95l4.01-64.12zm-51.68 0l4.01 64.12c-10.29 2.41-19.89 6.52-28.62 11.95l-42.62-48.29c19.6-14.12 42.42-23.71 67.23-27.78zm-103.77 64.33l48.3 42.61c-5.44 8.73-9.54 18.33-11.96 28.62l-64.12-4.01c4.07-24.81 13.66-47.62 27.78-67.22zm-27.78 118.9l64.12-4.01c2.41 10.29 6.52 19.89 11.95 28.62l-48.29 42.62c-14.12-19.6-23.71-42.42-27.78-67.23zm131.55 131.55c-24.81-4.07-47.63-13.66-67.23-27.78l42.61-48.3c8.73 5.44 18.33 9.54 28.62 11.96l-4 64.12zM256 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm25.84 125.39l-4.01-64.12c10.29-2.41 19.89-6.52 28.62-11.96l42.61 48.3c-19.6 14.12-42.41 23.71-67.22 27.78zm103.77-64.33l-48.29-42.62c5.44-8.73 9.54-18.32 11.95-28.62l64.12 4.01c-4.07 24.82-13.66 47.64-27.78 67.23zm-36.34-114.89c-2.41-10.29-6.52-19.89-11.96-28.62l48.3-42.61c14.12 19.6 23.71 42.42 27.78 67.23l-64.12 4z"] +}; +var faDiagnoses = { + prefix: 'fas', + iconName: 'diagnoses', + icon: [640, 512, [], "f470", "M496 256c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm-176-80c48.5 0 88-39.5 88-88S368.5 0 320 0s-88 39.5-88 88 39.5 88 88 88zM59.8 364c10.2 15.3 29.3 17.8 42.9 9.8 16.2-9.6 56.2-31.7 105.3-48.6V416h224v-90.7c49.1 16.8 89.1 39 105.3 48.6 13.6 8 32.7 5.3 42.9-9.8l17.8-26.7c8.8-13.2 7.6-34.6-10-45.1-11.9-7.1-29.7-17-51.1-27.4-28.1 46.1-99.4 17.8-87.7-35.1C409.3 217.2 365.1 208 320 208c-57 0-112.9 14.5-160 32.2-.2 40.2-47.6 63.3-79.2 36-11.2 6-21.3 11.6-28.7 16-17.6 10.5-18.8 31.8-10 45.1L59.8 364zM368 344c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-96-96c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm-160 8c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zm512 192H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"] +}; +var faDice = { + prefix: 'fas', + iconName: 'dice', + icon: [640, 512, [], "f522", "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"] +}; +var faDiceD20 = { + prefix: 'fas', + iconName: 'dice-d20', + icon: [480, 512, [], "f6cf", "M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z"] +}; +var faDiceD6 = { + prefix: 'fas', + iconName: 'dice-d6', + icon: [448, 512, [], "f6d1", "M422.19 109.95L256.21 9.07c-19.91-12.1-44.52-12.1-64.43 0L25.81 109.95c-5.32 3.23-5.29 11.27.06 14.46L224 242.55l198.14-118.14c5.35-3.19 5.38-11.22.05-14.46zm13.84 44.63L240 271.46v223.82c0 12.88 13.39 20.91 24.05 14.43l152.16-92.48c19.68-11.96 31.79-33.94 31.79-57.7v-197.7c0-6.41-6.64-10.43-11.97-7.25zM0 161.83v197.7c0 23.77 12.11 45.74 31.79 57.7l152.16 92.47c10.67 6.48 24.05-1.54 24.05-14.43V271.46L11.97 154.58C6.64 151.4 0 155.42 0 161.83z"] +}; +var faDiceFive = { + prefix: 'fas', + iconName: 'dice-five', + icon: [448, 512, [], "f523", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faDiceFour = { + prefix: 'fas', + iconName: 'dice-four', + icon: [448, 512, [], "f524", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faDiceOne = { + prefix: 'fas', + iconName: 'dice-one', + icon: [448, 512, [], "f525", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM224 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faDiceSix = { + prefix: 'fas', + iconName: 'dice-six', + icon: [448, 512, [], "f526", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faDiceThree = { + prefix: 'fas', + iconName: 'dice-three', + icon: [448, 512, [], "f527", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm96 96c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faDiceTwo = { + prefix: 'fas', + iconName: 'dice-two', + icon: [448, 512, [], "f528", "M384 32H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h320c35.35 0 64-28.65 64-64V96c0-35.35-28.65-64-64-64zM128 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm192 192c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faDigitalTachograph = { + prefix: 'fas', + iconName: 'digital-tachograph', + icon: [640, 512, [], "f566", "M608 96H32c-17.67 0-32 14.33-32 32v256c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128c0-17.67-14.33-32-32-32zM304 352c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8zM72 288v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H80c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm64 0v-16c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8zm40-64c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-48c0-8.84 7.16-16 16-16h208c8.84 0 16 7.16 16 16v48zm272 128c0 4.42-3.58 8-8 8H344c-4.42 0-8-3.58-8-8v-8c0-4.42 3.58-8 8-8h224c4.42 0 8 3.58 8 8v8z"] +}; +var faDirections = { + prefix: 'fas', + iconName: 'directions', + icon: [512, 512, [], "f5eb", "M502.61 233.32L278.68 9.39c-12.52-12.52-32.83-12.52-45.36 0L9.39 233.32c-12.52 12.53-12.52 32.83 0 45.36l223.93 223.93c12.52 12.53 32.83 12.53 45.36 0l223.93-223.93c12.52-12.53 12.52-32.83 0-45.36zm-100.98 12.56l-84.21 77.73c-5.12 4.73-13.43 1.1-13.43-5.88V264h-96v64c0 4.42-3.58 8-8 8h-32c-4.42 0-8-3.58-8-8v-80c0-17.67 14.33-32 32-32h112v-53.73c0-6.97 8.3-10.61 13.43-5.88l84.21 77.73c3.43 3.17 3.43 8.59 0 11.76z"] +}; +var faDisease = { + prefix: 'fas', + iconName: 'disease', + icon: [512, 512, [], "f7fa", "M472.29 195.9l-67.06-23c-19.28-6.6-33.54-20.92-38.14-38.31l-16-60.45c-11.58-43.77-76.57-57.13-110-22.62L195 99.24c-13.26 13.71-33.54 20.93-54.2 19.31l-71.9-5.62c-52-4.07-86.93 44.89-59 82.84l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24l-28.43 57C4 396.67 47.46 440.29 98.11 429.23l70-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101 7.57 104.45-37.22l4.7-61.86c1.35-17.8 12.8-33.87 30.63-43l62-31.74c44.84-22.96 39.55-80.17-8.99-96.79zM160 256a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm128 96a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm16-128a16 16 0 1 1 16-16 16 16 0 0 1-16 16z"] +}; +var faDivide = { + prefix: 'fas', + iconName: 'divide', + icon: [448, 512, [], "f529", "M224 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm0-192c35.35 0 64-28.65 64-64s-28.65-64-64-64-64 28.65-64 64 28.65 64 64 64zm192 48H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"] +}; +var faDizzy = { + prefix: 'fas', + iconName: 'dizzy', + icon: [496, 512, [], "f567", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-96 206.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L174.6 192l28.7 28.7c15.2 15.2-7.9 37.4-22.6 22.6L152 214.6zM248 416c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm147.3-195.3c15.2 15.2-7.9 37.4-22.6 22.6L344 214.6l-28.7 28.7c-14.8 14.8-37.8-7.5-22.6-22.6l28.7-28.7-28.7-28.7c-15-15 7.7-37.6 22.6-22.6l28.7 28.7 28.7-28.7c15-15 37.6 7.7 22.6 22.6L366.6 192l28.7 28.7z"] +}; +var faDna = { + prefix: 'fas', + iconName: 'dna', + icon: [448, 512, [], "f471", "M.1 494.1c-1.1 9.5 6.3 17.8 15.9 17.8l32.3.1c8.1 0 14.9-5.9 16-13.9.7-4.9 1.8-11.1 3.4-18.1H380c1.6 6.9 2.9 13.2 3.5 18.1 1.1 8 7.9 14 16 13.9l32.3-.1c9.6 0 17.1-8.3 15.9-17.8-4.6-37.9-25.6-129-118.9-207.7-17.6 12.4-37.1 24.2-58.5 35.4 6.2 4.6 11.4 9.4 17 14.2H159.7c21.3-18.1 47-35.6 78.7-51.4C410.5 199.1 442.1 65.8 447.9 17.9 449 8.4 441.6.1 432 .1L399.6 0c-8.1 0-14.9 5.9-16 13.9-.7 4.9-1.8 11.1-3.4 18.1H67.8c-1.6-7-2.7-13.1-3.4-18.1-1.1-8-7.9-14-16-13.9L16.1.1C6.5.1-1 8.4.1 17.9 5.3 60.8 31.4 171.8 160 256 31.5 340.2 5.3 451.2.1 494.1zM224 219.6c-25.1-13.7-46.4-28.4-64.3-43.6h128.5c-17.8 15.2-39.1 30-64.2 43.6zM355.1 96c-5.8 10.4-12.8 21.1-21 32H114c-8.3-10.9-15.3-21.6-21-32h262.1zM92.9 416c5.8-10.4 12.8-21.1 21-32h219.4c8.3 10.9 15.4 21.6 21.2 32H92.9z"] +}; +var faDog = { + prefix: 'fas', + iconName: 'dog', + icon: [576, 512, [], "f6d3", "M298.06,224,448,277.55V496a16,16,0,0,1-16,16H368a16,16,0,0,1-16-16V384H192V496a16,16,0,0,1-16,16H112a16,16,0,0,1-16-16V282.09C58.84,268.84,32,233.66,32,192a32,32,0,0,1,64,0,32.06,32.06,0,0,0,32,32ZM544,112v32a64,64,0,0,1-64,64H448v35.58L320,197.87V48c0-14.25,17.22-21.39,27.31-11.31L374.59,64h53.63c10.91,0,23.75,7.92,28.62,17.69L464,96h64A16,16,0,0,1,544,112Zm-112,0a16,16,0,1,0-16,16A16,16,0,0,0,432,112Z"] +}; +var faDollarSign = { + prefix: 'fas', + iconName: 'dollar-sign', + icon: [288, 512, [], "f155", "M209.2 233.4l-108-31.6C88.7 198.2 80 186.5 80 173.5c0-16.3 13.2-29.5 29.5-29.5h66.3c12.2 0 24.2 3.7 34.2 10.5 6.1 4.1 14.3 3.1 19.5-2l34.8-34c7.1-6.9 6.1-18.4-1.8-24.5C238 74.8 207.4 64.1 176 64V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v48h-2.5C45.8 64-5.4 118.7.5 183.6c4.2 46.1 39.4 83.6 83.8 96.6l102.5 30c12.5 3.7 21.2 15.3 21.2 28.3 0 16.3-13.2 29.5-29.5 29.5h-66.3C100 368 88 364.3 78 357.5c-6.1-4.1-14.3-3.1-19.5 2l-34.8 34c-7.1 6.9-6.1 18.4 1.8 24.5 24.5 19.2 55.1 29.9 86.5 30v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48.2c46.6-.9 90.3-28.6 105.7-72.7 21.5-61.6-14.6-124.8-72.5-141.7z"] +}; +var faDolly = { + prefix: 'fas', + iconName: 'dolly', + icon: [576, 512, [], "f472", "M294.2 277.7c18 5 34.7 13.4 49.5 24.7l161.5-53.8c8.4-2.8 12.9-11.9 10.1-20.2L454.9 47.2c-2.8-8.4-11.9-12.9-20.2-10.1l-61.1 20.4 33.1 99.4L346 177l-33.1-99.4-61.6 20.5c-8.4 2.8-12.9 11.9-10.1 20.2l53 159.4zm281 48.7L565 296c-2.8-8.4-11.9-12.9-20.2-10.1l-213.5 71.2c-17.2-22-43.6-36.4-73.5-37L158.4 21.9C154 8.8 141.8 0 128 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h88.9l92.2 276.7c-26.1 20.4-41.7 53.6-36 90.5 6.1 39.4 37.9 72.3 77.3 79.2 60.2 10.7 112.3-34.8 113.4-92.6l213.3-71.2c8.3-2.8 12.9-11.8 10.1-20.2zM256 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"] +}; +var faDollyFlatbed = { + prefix: 'fas', + iconName: 'dolly-flatbed', + icon: [640, 512, [], "f474", "M208 320h384c8.8 0 16-7.2 16-16V48c0-8.8-7.2-16-16-16H448v128l-48-32-48 32V32H208c-8.8 0-16 7.2-16 16v256c0 8.8 7.2 16 16 16zm416 64H128V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h82.9c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H451c-1.8 5-2.9 10.4-2.9 16 0 26.5 21.5 48 48 48s48-21.5 48-48c0-5.6-1.2-11-2.9-16H624c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"] +}; +var faDonate = { + prefix: 'fas', + iconName: 'donate', + icon: [512, 512, [], "f4b9", "M256 416c114.9 0 208-93.1 208-208S370.9 0 256 0 48 93.1 48 208s93.1 208 208 208zM233.8 97.4V80.6c0-9.2 7.4-16.6 16.6-16.6h11.1c9.2 0 16.6 7.4 16.6 16.6v17c15.5.8 30.5 6.1 43 15.4 5.6 4.1 6.2 12.3 1.2 17.1L306 145.6c-3.8 3.7-9.5 3.8-14 1-5.4-3.4-11.4-5.1-17.8-5.1h-38.9c-9 0-16.3 8.2-16.3 18.3 0 8.2 5 15.5 12.1 17.6l62.3 18.7c25.7 7.7 43.7 32.4 43.7 60.1 0 34-26.4 61.5-59.1 62.4v16.8c0 9.2-7.4 16.6-16.6 16.6h-11.1c-9.2 0-16.6-7.4-16.6-16.6v-17c-15.5-.8-30.5-6.1-43-15.4-5.6-4.1-6.2-12.3-1.2-17.1l16.3-15.5c3.8-3.7 9.5-3.8 14-1 5.4 3.4 11.4 5.1 17.8 5.1h38.9c9 0 16.3-8.2 16.3-18.3 0-8.2-5-15.5-12.1-17.6l-62.3-18.7c-25.7-7.7-43.7-32.4-43.7-60.1.1-34 26.4-61.5 59.1-62.4zM480 352h-32.5c-19.6 26-44.6 47.7-73 64h63.8c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8h63.8c-28.4-16.3-53.3-38-73-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32z"] +}; +var faDoorClosed = { + prefix: 'fas', + iconName: 'door-closed', + icon: [640, 512, [], "f52a", "M624 448H512V50.8C512 22.78 490.47 0 464 0H175.99c-26.47 0-48 22.78-48 50.8V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM415.99 288c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32c.01 17.67-14.32 32-32 32z"] +}; +var faDoorOpen = { + prefix: 'fas', + iconName: 'door-open', + icon: [640, 512, [], "f52b", "M624 448h-80V113.45C544 86.19 522.47 64 496 64H384v64h96v384h144c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM312.24 1.01l-192 49.74C105.99 54.44 96 67.7 96 82.92V448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h336V33.18c0-21.58-19.56-37.41-39.76-32.17zM264 288c-13.25 0-24-14.33-24-32s10.75-32 24-32 24 14.33 24 32-10.75 32-24 32z"] +}; +var faDotCircle = { + prefix: 'fas', + iconName: 'dot-circle', + icon: [512, 512, [], "f192", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm80 248c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80z"] +}; +var faDove = { + prefix: 'fas', + iconName: 'dove', + icon: [512, 512, [], "f4ba", "M288 167.2v-28.1c-28.2-36.3-47.1-79.3-54.1-125.2-2.1-13.5-19-18.8-27.8-8.3-21.1 24.9-37.7 54.1-48.9 86.5 34.2 38.3 80 64.6 130.8 75.1zM400 64c-44.2 0-80 35.9-80 80.1v59.4C215.6 197.3 127 133 87 41.8c-5.5-12.5-23.2-13.2-29-.9C41.4 76 32 115.2 32 156.6c0 70.8 34.1 136.9 85.1 185.9 13.2 12.7 26.1 23.2 38.9 32.8l-143.9 36C1.4 414-3.4 426.4 2.6 435.7 20 462.6 63 508.2 155.8 512c8 .3 16-2.6 22.1-7.9l65.2-56.1H320c88.4 0 160-71.5 160-159.9V128l32-64H400zm0 96.1c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"] +}; +var faDownload = { + prefix: 'fas', + iconName: 'download', + icon: [512, 512, [], "f019", "M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"] +}; +var faDraftingCompass = { + prefix: 'fas', + iconName: 'drafting-compass', + icon: [512, 512, [], "f568", "M457.01 344.42c-25.05 20.33-52.63 37.18-82.54 49.05l54.38 94.19 53.95 23.04c9.81 4.19 20.89-2.21 22.17-12.8l7.02-58.25-54.98-95.23zm42.49-94.56c4.86-7.67 1.89-17.99-6.05-22.39l-28.07-15.57c-7.48-4.15-16.61-1.46-21.26 5.72C403.01 281.15 332.25 320 256 320c-23.93 0-47.23-4.25-69.41-11.53l67.36-116.68c.7.02 1.34.21 2.04.21s1.35-.19 2.04-.21l51.09 88.5c31.23-8.96 59.56-25.75 82.61-48.92l-51.79-89.71C347.39 128.03 352 112.63 352 96c0-53.02-42.98-96-96-96s-96 42.98-96 96c0 16.63 4.61 32.03 12.05 45.66l-68.3 118.31c-12.55-11.61-23.96-24.59-33.68-39-4.79-7.1-13.97-9.62-21.38-5.33l-27.75 16.07c-7.85 4.54-10.63 14.9-5.64 22.47 15.57 23.64 34.69 44.21 55.98 62.02L0 439.66l7.02 58.25c1.28 10.59 12.36 16.99 22.17 12.8l53.95-23.04 70.8-122.63C186.13 377.28 220.62 384 256 384c99.05 0 190.88-51.01 243.5-134.14zM256 64c17.67 0 32 14.33 32 32s-14.33 32-32 32-32-14.33-32-32 14.33-32 32-32z"] +}; +var faDragon = { + prefix: 'fas', + iconName: 'dragon', + icon: [640, 512, [], "f6d5", "M18.32 255.78L192 223.96l-91.28 68.69c-10.08 10.08-2.94 27.31 11.31 27.31h222.7c-9.44-26.4-14.73-54.47-14.73-83.38v-42.27l-119.73-87.6c-23.82-15.88-55.29-14.01-77.06 4.59L5.81 227.64c-12.38 10.33-3.45 30.42 12.51 28.14zm556.87 34.1l-100.66-50.31A47.992 47.992 0 0 1 448 196.65v-36.69h64l28.09 22.63c6 6 14.14 9.37 22.63 9.37h30.97a32 32 0 0 0 28.62-17.69l14.31-28.62a32.005 32.005 0 0 0-3.02-33.51l-74.53-99.38C553.02 4.7 543.54 0 533.47 0H296.02c-7.13 0-10.7 8.57-5.66 13.61L352 63.96 292.42 88.8c-5.9 2.95-5.9 11.36 0 14.31L352 127.96v108.62c0 72.08 36.03 139.39 96 179.38-195.59 6.81-344.56 41.01-434.1 60.91C5.78 478.67 0 485.88 0 494.2 0 504 7.95 512 17.76 512h499.08c63.29.01 119.61-47.56 122.99-110.76 2.52-47.28-22.73-90.4-64.64-111.36zM489.18 66.25l45.65 11.41c-2.75 10.91-12.47 18.89-24.13 18.26-12.96-.71-25.85-12.53-21.52-29.67z"] +}; +var faDrawPolygon = { + prefix: 'fas', + iconName: 'draw-polygon', + icon: [448, 512, [], "f5ee", "M384 352c-.35 0-.67.1-1.02.1l-39.2-65.32c5.07-9.17 8.22-19.56 8.22-30.78s-3.14-21.61-8.22-30.78l39.2-65.32c.35.01.67.1 1.02.1 35.35 0 64-28.65 64-64s-28.65-64-64-64c-23.63 0-44.04 12.95-55.12 32H119.12C108.04 44.95 87.63 32 64 32 28.65 32 0 60.65 0 96c0 23.63 12.95 44.04 32 55.12v209.75C12.95 371.96 0 392.37 0 416c0 35.35 28.65 64 64 64 23.63 0 44.04-12.95 55.12-32h209.75c11.09 19.05 31.49 32 55.12 32 35.35 0 64-28.65 64-64 .01-35.35-28.64-64-63.99-64zm-288 8.88V151.12A63.825 63.825 0 0 0 119.12 128h208.36l-38.46 64.1c-.35-.01-.67-.1-1.02-.1-35.35 0-64 28.65-64 64s28.65 64 64 64c.35 0 .67-.1 1.02-.1l38.46 64.1H119.12A63.748 63.748 0 0 0 96 360.88zM272 256c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zM400 96c0 8.82-7.18 16-16 16s-16-7.18-16-16 7.18-16 16-16 16 7.18 16 16zM64 80c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zM48 416c0-8.82 7.18-16 16-16s16 7.18 16 16-7.18 16-16 16-16-7.18-16-16zm336 16c-8.82 0-16-7.18-16-16s7.18-16 16-16 16 7.18 16 16-7.18 16-16 16z"] +}; +var faDrum = { + prefix: 'fas', + iconName: 'drum', + icon: [512, 512, [], "f569", "M431.34 122.05l73.53-47.42a16 16 0 0 0 4.44-22.19l-8.87-13.31a16 16 0 0 0-22.19-4.44l-110.06 71C318.43 96.91 271.22 96 256 96 219.55 96 0 100.55 0 208.15v160.23c0 30.27 27.5 57.68 72 77.86v-101.9a24 24 0 1 1 48 0v118.93c33.05 9.11 71.07 15.06 112 16.73V376.39a24 24 0 1 1 48 0V480c40.93-1.67 78.95-7.62 112-16.73V344.34a24 24 0 1 1 48 0v101.9c44.5-20.18 72-47.59 72-77.86V208.15c0-43.32-35.76-69.76-80.66-86.1zM256 272.24c-114.88 0-208-28.69-208-64.09s93.12-64.08 208-64.08c17.15 0 33.73.71 49.68 1.91l-72.81 47a16 16 0 0 0-4.43 22.19l8.87 13.31a16 16 0 0 0 22.19 4.44l118.64-76.52C430.09 168 464 186.84 464 208.15c0 35.4-93.13 64.09-208 64.09z"] +}; +var faDrumSteelpan = { + prefix: 'fas', + iconName: 'drum-steelpan', + icon: [576, 512, [], "f56a", "M288 32C128.94 32 0 89.31 0 160v192c0 70.69 128.94 128 288 128s288-57.31 288-128V160c0-70.69-128.94-128-288-128zm-82.99 158.36c-4.45 16.61-14.54 30.57-28.31 40.48C100.23 217.46 48 190.78 48 160c0-30.16 50.11-56.39 124.04-70.03l25.6 44.34c9.86 17.09 12.48 36.99 7.37 56.05zM288 240c-21.08 0-41.41-1-60.89-2.7 8.06-26.13 32.15-45.3 60.89-45.3s52.83 19.17 60.89 45.3C329.41 239 309.08 240 288 240zm64-144c0 35.29-28.71 64-64 64s-64-28.71-64-64V82.96c20.4-1.88 41.8-2.96 64-2.96s43.6 1.08 64 2.96V96zm46.93 134.9c-13.81-9.91-23.94-23.9-28.4-40.54-5.11-19.06-2.49-38.96 7.38-56.04l25.65-44.42C477.72 103.5 528 129.79 528 160c0 30.83-52.4 57.54-129.07 70.9z"] +}; +var faDrumstickBite = { + prefix: 'fas', + iconName: 'drumstick-bite', + icon: [512, 512, [], "f6d7", "M462.8 49.57a169.44 169.44 0 0 0-239.5 0C187.82 85 160.13 128 160.13 192v85.83l-40.62 40.59c-9.7 9.69-24 11.07-36.78 6a60.33 60.33 0 0 0-65 98.72C33 438.39 54.24 442.7 73.85 438.21c-4.5 19.6-.18 40.83 15.1 56.1a60.35 60.35 0 0 0 98.8-65c-5.09-12.73-3.72-27 6-36.75L234.36 352h85.89a187.87 187.87 0 0 0 61.89-10c-39.64-43.89-39.83-110.23 1.05-151.07 34.38-34.36 86.76-39.46 128.74-16.8 1.3-44.96-14.81-90.28-49.13-124.56z"] +}; +var faDumbbell = { + prefix: 'fas', + iconName: 'dumbbell', + icon: [640, 512, [], "f44b", "M104 96H56c-13.3 0-24 10.7-24 24v104H8c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h24v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm528 128h-24V120c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v272c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h24c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM456 32h-48c-13.3 0-24 10.7-24 24v168H256V56c0-13.3-10.7-24-24-24h-48c-13.3 0-24 10.7-24 24v400c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V288h128v168c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24z"] +}; +var faDumpster = { + prefix: 'fas', + iconName: 'dumpster', + icon: [576, 512, [], "f793", "M560 160c10.4 0 18-9.8 15.5-19.9l-24-96C549.7 37 543.3 32 536 32h-98.9l25.6 128H560zM272 32H171.5l-25.6 128H272V32zm132.5 0H304v128h126.1L404.5 32zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm544 64h-20l4-32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h320v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16l20-160h28c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"] +}; +var faDumpsterFire = { + prefix: 'fas', + iconName: 'dumpster-fire', + icon: [640, 512, [], "f794", "M418.7 104.1l.2-.2-14.4-72H304v128h60.8c16.2-19.3 34.2-38.2 53.9-55.8zM272 32H171.5l-25.6 128H272V32zm189.3 72.1c18.2 16.3 35.5 33.7 51.1 51.5 5.7-5.6 11.4-11.1 17.3-16.3l21.3-19 21.3 19c1.1.9 2.1 2.1 3.1 3.1-.1-.8.2-1.5 0-2.3l-24-96C549.7 37 543.3 32 536 32h-98.9l12.3 61.5 11.9 10.6zM16 160h97.3l25.6-128H40c-7.3 0-13.7 5-15.5 12.1l-24 96C-2 150.2 5.6 160 16 160zm324.6 32H32l4 32H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h28l20 160v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208.8c-30.2-33.7-48.8-77.9-48.8-126.4 0-35.9 19.9-82.9 52.6-129.6zm210.5-28.8c-14.9 13.3-28.3 27.2-40.2 41.2-19.5-25.8-43.6-52-71-76.4-70.2 62.7-120 144.3-120 193.6 0 87.5 71.6 158.4 160 158.4s160-70.9 160-158.4c.1-36.6-37-112.2-88.8-158.4zm-18.6 229.4c-14.7 10.7-32.9 17-52.5 17-49 0-88.9-33.5-88.9-88 0-27.1 16.5-51 49.4-91.9 4.7 5.6 67.1 88.1 67.1 88.1l39.8-47c2.8 4.8 5.4 9.5 7.7 14 18.6 36.7 10.8 83.6-22.6 107.8z"] +}; +var faDungeon = { + prefix: 'fas', + iconName: 'dungeon', + icon: [512, 512, [], "f6d9", "M128.73 195.32l-82.81-51.76c-8.04-5.02-18.99-2.17-22.93 6.45A254.19 254.19 0 0 0 .54 239.28C-.05 248.37 7.59 256 16.69 256h97.13c7.96 0 14.08-6.25 15.01-14.16 1.09-9.33 3.24-18.33 6.24-26.94 2.56-7.34.25-15.46-6.34-19.58zM319.03 8C298.86 2.82 277.77 0 256 0s-42.86 2.82-63.03 8c-9.17 2.35-13.91 12.6-10.39 21.39l37.47 104.03A16.003 16.003 0 0 0 235.1 144h41.8c6.75 0 12.77-4.23 15.05-10.58l37.47-104.03c3.52-8.79-1.22-19.03-10.39-21.39zM112 288H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm77.31-283.67l-36.32-90.8c-3.53-8.83-14.13-12.99-22.42-8.31a257.308 257.308 0 0 0-71.61 59.89c-6.06 7.32-3.85 18.48 4.22 23.52l82.93 51.83c6.51 4.07 14.66 2.62 20.11-2.79 5.18-5.15 10.79-9.85 16.79-14.05 6.28-4.41 9.15-12.17 6.3-19.29zM398.18 256h97.13c9.1 0 16.74-7.63 16.15-16.72a254.135 254.135 0 0 0-22.45-89.27c-3.94-8.62-14.89-11.47-22.93-6.45l-82.81 51.76c-6.59 4.12-8.9 12.24-6.34 19.58 3.01 8.61 5.15 17.62 6.24 26.94.93 7.91 7.05 14.16 15.01 14.16zm54.85-162.89a257.308 257.308 0 0 0-71.61-59.89c-8.28-4.68-18.88-.52-22.42 8.31l-36.32 90.8c-2.85 7.12.02 14.88 6.3 19.28 6 4.2 11.61 8.9 16.79 14.05 5.44 5.41 13.6 6.86 20.11 2.79l82.93-51.83c8.07-5.03 10.29-16.19 4.22-23.51zM496 288h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm0 128h-96c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h96c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zM240 177.62V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V177.62c-5.23-.89-10.52-1.62-16-1.62s-10.77.73-16 1.62zm-64 41.51V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V189.36c-12.78 7.45-23.84 17.47-32 29.77zm128-29.77V472c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8V219.13c-8.16-12.3-19.22-22.32-32-29.77z"] +}; +var faEdit = { + prefix: 'fas', + iconName: 'edit', + icon: [576, 512, [], "f044", "M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z"] +}; +var faEgg = { + prefix: 'fas', + iconName: 'egg', + icon: [384, 512, [], "f7fb", "M192 0C86 0 0 214 0 320s86 192 192 192 192-86 192-192S298 0 192 0z"] +}; +var faEject = { + prefix: 'fas', + iconName: 'eject', + icon: [448, 512, [], "f052", "M448 384v64c0 17.673-14.327 32-32 32H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h384c17.673 0 32 14.327 32 32zM48.053 320h351.886c41.651 0 63.581-49.674 35.383-80.435L259.383 47.558c-19.014-20.743-51.751-20.744-70.767 0L12.67 239.565C-15.475 270.268 6.324 320 48.053 320z"] +}; +var faEllipsisH = { + prefix: 'fas', + iconName: 'ellipsis-h', + icon: [512, 512, [], "f141", "M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"] +}; +var faEllipsisV = { + prefix: 'fas', + iconName: 'ellipsis-v', + icon: [192, 512, [], "f142", "M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"] +}; +var faEnvelope = { + prefix: 'fas', + iconName: 'envelope', + icon: [512, 512, [], "f0e0", "M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"] +}; +var faEnvelopeOpen = { + prefix: 'fas', + iconName: 'envelope-open', + icon: [512, 512, [], "f2b6", "M512 464c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V200.724a48 48 0 0 1 18.387-37.776c24.913-19.529 45.501-35.365 164.2-121.511C199.412 29.17 232.797-.347 256 .003c23.198-.354 56.596 29.172 73.413 41.433 118.687 86.137 139.303 101.995 164.2 121.512A48 48 0 0 1 512 200.724V464zm-65.666-196.605c-2.563-3.728-7.7-4.595-11.339-1.907-22.845 16.873-55.462 40.705-105.582 77.079-16.825 12.266-50.21 41.781-73.413 41.43-23.211.344-56.559-29.143-73.413-41.43-50.114-36.37-82.734-60.204-105.582-77.079-3.639-2.688-8.776-1.821-11.339 1.907l-9.072 13.196a7.998 7.998 0 0 0 1.839 10.967c22.887 16.899 55.454 40.69 105.303 76.868 20.274 14.781 56.524 47.813 92.264 47.573 35.724.242 71.961-32.771 92.263-47.573 49.85-36.179 82.418-59.97 105.303-76.868a7.998 7.998 0 0 0 1.839-10.967l-9.071-13.196z"] +}; +var faEnvelopeOpenText = { + prefix: 'fas', + iconName: 'envelope-open-text', + icon: [512, 512, [], "f658", "M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z"] +}; +var faEnvelopeSquare = { + prefix: 'fas', + iconName: 'envelope-square', + icon: [448, 512, [], "f199", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM178.117 262.104C87.429 196.287 88.353 196.121 64 177.167V152c0-13.255 10.745-24 24-24h272c13.255 0 24 10.745 24 24v25.167c-24.371 18.969-23.434 19.124-114.117 84.938-10.5 7.655-31.392 26.12-45.883 25.894-14.503.218-35.367-18.227-45.883-25.895zM384 217.775V360c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V217.775c13.958 10.794 33.329 25.236 95.303 70.214 14.162 10.341 37.975 32.145 64.694 32.01 26.887.134 51.037-22.041 64.72-32.025 61.958-44.965 81.325-59.406 95.283-70.199z"] +}; +var faEquals = { + prefix: 'fas', + iconName: 'equals', + icon: [448, 512, [], "f52c", "M416 304H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32zm0-192H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"] +}; +var faEraser = { + prefix: 'fas', + iconName: 'eraser', + icon: [512, 512, [], "f12d", "M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z"] +}; +var faEthernet = { + prefix: 'fas', + iconName: 'ethernet', + icon: [512, 512, [], "f796", "M496 192h-48v-48c0-8.8-7.2-16-16-16h-48V80c0-8.8-7.2-16-16-16H144c-8.8 0-16 7.2-16 16v48H80c-8.8 0-16 7.2-16 16v48H16c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16h80V320h32v128h64V320h32v128h64V320h32v128h64V320h32v128h80c8.8 0 16-7.2 16-16V208c0-8.8-7.2-16-16-16z"] +}; +var faEuroSign = { + prefix: 'fas', + iconName: 'euro-sign', + icon: [320, 512, [], "f153", "M310.706 413.765c-1.314-6.63-7.835-10.872-14.424-9.369-10.692 2.439-27.422 5.413-45.426 5.413-56.763 0-101.929-34.79-121.461-85.449h113.689a12 12 0 0 0 11.708-9.369l6.373-28.36c1.686-7.502-4.019-14.631-11.708-14.631H115.22c-1.21-14.328-1.414-28.287.137-42.245H261.95a12 12 0 0 0 11.723-9.434l6.512-29.755c1.638-7.484-4.061-14.566-11.723-14.566H130.184c20.633-44.991 62.69-75.03 117.619-75.03 14.486 0 28.564 2.25 37.851 4.145 6.216 1.268 12.347-2.498 14.002-8.623l11.991-44.368c1.822-6.741-2.465-13.616-9.326-14.917C290.217 34.912 270.71 32 249.635 32 152.451 32 74.03 92.252 45.075 176H12c-6.627 0-12 5.373-12 12v29.755c0 6.627 5.373 12 12 12h21.569c-1.009 13.607-1.181 29.287-.181 42.245H12c-6.627 0-12 5.373-12 12v28.36c0 6.627 5.373 12 12 12h30.114C67.139 414.692 145.264 480 249.635 480c26.301 0 48.562-4.544 61.101-7.788 6.167-1.595 10.027-7.708 8.788-13.957l-8.818-44.49z"] +}; +var faExchangeAlt = { + prefix: 'fas', + iconName: 'exchange-alt', + icon: [512, 512, [], "f362", "M0 168v-16c0-13.255 10.745-24 24-24h360V80c0-21.367 25.899-32.042 40.971-16.971l80 80c9.372 9.373 9.372 24.569 0 33.941l-80 80C409.956 271.982 384 261.456 384 240v-48H24c-13.255 0-24-10.745-24-24zm488 152H128v-48c0-21.314-25.862-32.08-40.971-16.971l-80 80c-9.372 9.373-9.372 24.569 0 33.941l80 80C102.057 463.997 128 453.437 128 432v-48h360c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24z"] +}; +var faExclamation = { + prefix: 'fas', + iconName: 'exclamation', + icon: [192, 512, [], "f12a", "M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z"] +}; +var faExclamationCircle = { + prefix: 'fas', + iconName: 'exclamation-circle', + icon: [512, 512, [], "f06a", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"] +}; +var faExclamationTriangle = { + prefix: 'fas', + iconName: 'exclamation-triangle', + icon: [576, 512, [], "f071", "M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"] +}; +var faExpand = { + prefix: 'fas', + iconName: 'expand', + icon: [448, 512, [], "f065", "M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"] +}; +var faExpandAlt = { + prefix: 'fas', + iconName: 'expand-alt', + icon: [448, 512, [], "f424", "M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z"] +}; +var faExpandArrowsAlt = { + prefix: 'fas', + iconName: 'expand-arrows-alt', + icon: [448, 512, [], "f31e", "M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z"] +}; +var faExternalLinkAlt = { + prefix: 'fas', + iconName: 'external-link-alt', + icon: [512, 512, [], "f35d", "M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z"] +}; +var faExternalLinkSquareAlt = { + prefix: 'fas', + iconName: 'external-link-square-alt', + icon: [448, 512, [], "f360", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-88 16H248.029c-21.313 0-32.08 25.861-16.971 40.971l31.984 31.987L67.515 364.485c-4.686 4.686-4.686 12.284 0 16.971l31.029 31.029c4.687 4.686 12.285 4.686 16.971 0l195.526-195.526 31.988 31.991C358.058 263.977 384 253.425 384 231.979V120c0-13.255-10.745-24-24-24z"] +}; +var faEye = { + prefix: 'fas', + iconName: 'eye', + icon: [576, 512, [], "f06e", "M572.52 241.4C518.29 135.59 410.93 64 288 64S57.68 135.64 3.48 241.41a32.35 32.35 0 0 0 0 29.19C57.71 376.41 165.07 448 288 448s230.32-71.64 284.52-177.41a32.35 32.35 0 0 0 0-29.19zM288 400a144 144 0 1 1 144-144 143.93 143.93 0 0 1-144 144zm0-240a95.31 95.31 0 0 0-25.31 3.79 47.85 47.85 0 0 1-66.9 66.9A95.78 95.78 0 1 0 288 160z"] +}; +var faEyeDropper = { + prefix: 'fas', + iconName: 'eye-dropper', + icon: [512, 512, [], "f1fb", "M50.75 333.25c-12 12-18.75 28.28-18.75 45.26V424L0 480l32 32 56-32h45.49c16.97 0 33.25-6.74 45.25-18.74l126.64-126.62-128-128L50.75 333.25zM483.88 28.12c-37.47-37.5-98.28-37.5-135.75 0l-77.09 77.09-13.1-13.1c-9.44-9.44-24.65-9.31-33.94 0l-40.97 40.97c-9.37 9.37-9.37 24.57 0 33.94l161.94 161.94c9.44 9.44 24.65 9.31 33.94 0L419.88 288c9.37-9.37 9.37-24.57 0-33.94l-13.1-13.1 77.09-77.09c37.51-37.48 37.51-98.26.01-135.75z"] +}; +var faEyeSlash = { + prefix: 'fas', + iconName: 'eye-slash', + icon: [640, 512, [], "f070", "M320 400c-75.85 0-137.25-58.71-142.9-133.11L72.2 185.82c-13.79 17.3-26.48 35.59-36.72 55.59a32.35 32.35 0 0 0 0 29.19C89.71 376.41 197.07 448 320 448c26.91 0 52.87-4 77.89-10.46L346 397.39a144.13 144.13 0 0 1-26 2.61zm313.82 58.1l-110.55-85.44a331.25 331.25 0 0 0 81.25-102.07 32.35 32.35 0 0 0 0-29.19C550.29 135.59 442.93 64 320 64a308.15 308.15 0 0 0-147.32 37.7L45.46 3.37A16 16 0 0 0 23 6.18L3.37 31.45A16 16 0 0 0 6.18 53.9l588.36 454.73a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zm-183.72-142l-39.3-30.38A94.75 94.75 0 0 0 416 256a94.76 94.76 0 0 0-121.31-92.21A47.65 47.65 0 0 1 304 192a46.64 46.64 0 0 1-1.54 10l-73.61-56.89A142.31 142.31 0 0 1 320 112a143.92 143.92 0 0 1 144 144c0 21.63-5.29 41.79-13.9 60.11z"] +}; +var faFan = { + prefix: 'fas', + iconName: 'fan', + icon: [512, 512, [], "f863", "M352.57 128c-28.09 0-54.09 4.52-77.06 12.86l12.41-123.11C289 7.31 279.81-1.18 269.33.13 189.63 10.13 128 77.64 128 159.43c0 28.09 4.52 54.09 12.86 77.06L17.75 224.08C7.31 223-1.18 232.19.13 242.67c10 79.7 77.51 141.33 159.3 141.33 28.09 0 54.09-4.52 77.06-12.86l-12.41 123.11c-1.05 10.43 8.11 18.93 18.59 17.62 79.7-10 141.33-77.51 141.33-159.3 0-28.09-4.52-54.09-12.86-77.06l123.11 12.41c10.44 1.05 18.93-8.11 17.62-18.59-10-79.7-77.51-141.33-159.3-141.33zM256 288a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"] +}; +var faFastBackward = { + prefix: 'fas', + iconName: 'fast-backward', + icon: [512, 512, [], "f049", "M0 436V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v151.9L235.5 71.4C256.1 54.3 288 68.6 288 96v131.9L459.5 71.4C480.1 54.3 512 68.6 512 96v320c0 27.4-31.9 41.7-52.5 24.6L288 285.3V416c0 27.4-31.9 41.7-52.5 24.6L64 285.3V436c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12z"] +}; +var faFastForward = { + prefix: 'fas', + iconName: 'fast-forward', + icon: [512, 512, [], "f050", "M512 76v360c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V284.1L276.5 440.6c-20.6 17.2-52.5 2.8-52.5-24.6V284.1L52.5 440.6C31.9 457.8 0 443.4 0 416V96c0-27.4 31.9-41.7 52.5-24.6L224 226.8V96c0-27.4 31.9-41.7 52.5-24.6L448 226.8V76c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12z"] +}; +var faFaucet = { + prefix: 'fas', + iconName: 'faucet', + icon: [512, 512, [], "e005", "M352,256H313.39c-15.71-13.44-35.46-23.07-57.39-28V180.44l-32-3.38-32,3.38V228c-21.93,5-41.68,14.6-57.39,28H16A16,16,0,0,0,0,272v96a16,16,0,0,0,16,16h92.79C129.38,421.73,173,448,224,448s94.62-26.27,115.21-64H352a32,32,0,0,1,32,32,32,32,0,0,0,32,32h64a32,32,0,0,0,32-32A160,160,0,0,0,352,256ZM81.59,159.91l142.41-15,142.41,15c9.42,1,17.59-6.81,17.59-16.8V112.89c0-10-8.17-17.8-17.59-16.81L256,107.74V80a16,16,0,0,0-16-16H208a16,16,0,0,0-16,16v27.74L81.59,96.08C72.17,95.09,64,102.9,64,112.89v30.22C64,153.1,72.17,160.91,81.59,159.91Z"] +}; +var faFax = { + prefix: 'fas', + iconName: 'fax', + icon: [512, 512, [], "f1ac", "M480 160V77.25a32 32 0 0 0-9.38-22.63L425.37 9.37A32 32 0 0 0 402.75 0H160a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32h320a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM288 432a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm128 128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-128a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32a16 16 0 0 1 16 16zm0-112H192V64h160v48a16 16 0 0 0 16 16h48zM64 128H32a32 32 0 0 0-32 32v320a32 32 0 0 0 32 32h32a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32z"] +}; +var faFeather = { + prefix: 'fas', + iconName: 'feather', + icon: [512, 512, [], "f52d", "M467.14 44.84c-62.55-62.48-161.67-64.78-252.28 25.73-78.61 78.52-60.98 60.92-85.75 85.66-60.46 60.39-70.39 150.83-63.64 211.17l178.44-178.25c6.26-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.6 9.37 33.98 0l66.1-66.03C159.42 454.65 279 457.11 353.95 384h-98.19l147.57-49.14c49.99-49.93 36.38-36.18 46.31-46.86h-97.78l131.54-43.8c45.44-74.46 34.31-148.84-16.26-199.36z"] +}; +var faFeatherAlt = { + prefix: 'fas', + iconName: 'feather-alt', + icon: [512, 512, [], "f56b", "M512 0C460.22 3.56 96.44 38.2 71.01 287.61c-3.09 26.66-4.84 53.44-5.99 80.24l178.87-178.69c6.25-6.25 16.4-6.25 22.65 0s6.25 16.38 0 22.63L7.04 471.03c-9.38 9.37-9.38 24.57 0 33.94 9.38 9.37 24.59 9.37 33.98 0l57.13-57.07c42.09-.14 84.15-2.53 125.96-7.36 53.48-5.44 97.02-26.47 132.58-56.54H255.74l146.79-48.88c11.25-14.89 21.37-30.71 30.45-47.12h-81.14l106.54-53.21C500.29 132.86 510.19 26.26 512 0z"] +}; +var faFemale = { + prefix: 'fas', + iconName: 'female', + icon: [256, 512, [], "f182", "M128 0c35.346 0 64 28.654 64 64s-28.654 64-64 64c-35.346 0-64-28.654-64-64S92.654 0 128 0m119.283 354.179l-48-192A24 24 0 0 0 176 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H80a24 24 0 0 0-23.283 18.179l-48 192C4.935 369.305 16.383 384 32 384h56v104c0 13.255 10.745 24 24 24h32c13.255 0 24-10.745 24-24V384h56c15.591 0 27.071-14.671 23.283-29.821z"] +}; +var faFighterJet = { + prefix: 'fas', + iconName: 'fighter-jet', + icon: [640, 512, [], "f0fb", "M544 224l-128-16-48-16h-24L227.158 44h39.509C278.333 44 288 41.375 288 38s-9.667-6-21.333-6H152v12h16v164h-48l-66.667-80H18.667L8 138.667V208h8v16h48v2.666l-64 8v42.667l64 8V288H16v16H8v69.333L18.667 384h34.667L120 304h48v164h-16v12h114.667c11.667 0 21.333-2.625 21.333-6s-9.667-6-21.333-6h-39.509L344 320h24l48-16 128-16c96-21.333 96-26.583 96-32 0-5.417 0-10.667-96-32z"] +}; +var faFile = { + prefix: 'fas', + iconName: 'file', + icon: [384, 512, [], "f15b", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"] +}; +var faFileAlt = { + prefix: 'fas', + iconName: 'file-alt', + icon: [384, 512, [], "f15c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 236c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-64c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12v8zm0-72v8c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-8c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm96-114.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"] +}; +var faFileArchive = { + prefix: 'fas', + iconName: 'file-archive', + icon: [384, 512, [], "f1c6", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zM128.4 336c-17.9 0-32.4 12.1-32.4 27 0 15 14.6 27 32.5 27s32.4-12.1 32.4-27-14.6-27-32.5-27zM224 136V0h-63.6v32h-32V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM95.9 32h32v32h-32zm32.3 384c-33.2 0-58-30.4-51.4-62.9L96.4 256v-32h32v-32h-32v-32h32v-32h-32V96h32V64h32v32h-32v32h32v32h-32v32h32v32h-32v32h22.1c5.7 0 10.7 4.1 11.8 9.7l17.3 87.7c6.4 32.4-18.4 62.6-51.4 62.6z"] +}; +var faFileAudio = { + prefix: 'fas', + iconName: 'file-audio', + icon: [384, 512, [], "f1c7", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-64 268c0 10.7-12.9 16-20.5 8.5L104 376H76c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h28l35.5-36.5c7.6-7.6 20.5-2.2 20.5 8.5v136zm33.2-47.6c9.1-9.3 9.1-24.1 0-33.4-22.1-22.8 12.2-56.2 34.4-33.5 27.2 27.9 27.2 72.4 0 100.4-21.8 22.3-56.9-10.4-34.4-33.5zm86-117.1c54.4 55.9 54.4 144.8 0 200.8-21.8 22.4-57-10.3-34.4-33.5 36.2-37.2 36.3-96.5 0-133.8-22.1-22.8 12.3-56.3 34.4-33.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"] +}; +var faFileCode = { + prefix: 'fas', + iconName: 'file-code', + icon: [384, 512, [], "f1c9", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zM123.206 400.505a5.4 5.4 0 0 1-7.633.246l-64.866-60.812a5.4 5.4 0 0 1 0-7.879l64.866-60.812a5.4 5.4 0 0 1 7.633.246l19.579 20.885a5.4 5.4 0 0 1-.372 7.747L101.65 336l40.763 35.874a5.4 5.4 0 0 1 .372 7.747l-19.579 20.884zm51.295 50.479l-27.453-7.97a5.402 5.402 0 0 1-3.681-6.692l61.44-211.626a5.402 5.402 0 0 1 6.692-3.681l27.452 7.97a5.4 5.4 0 0 1 3.68 6.692l-61.44 211.626a5.397 5.397 0 0 1-6.69 3.681zm160.792-111.045l-64.866 60.812a5.4 5.4 0 0 1-7.633-.246l-19.58-20.885a5.4 5.4 0 0 1 .372-7.747L284.35 336l-40.763-35.874a5.4 5.4 0 0 1-.372-7.747l19.58-20.885a5.4 5.4 0 0 1 7.633-.246l64.866 60.812a5.4 5.4 0 0 1-.001 7.879z"] +}; +var faFileContract = { + prefix: 'fas', + iconName: 'file-contract', + icon: [384, 512, [], "f56c", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 0 1-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"] +}; +var faFileCsv = { + prefix: 'fas', + iconName: 'file-csv', + icon: [384, 512, [], "f6dd", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"] +}; +var faFileDownload = { + prefix: 'fas', + iconName: 'file-download', + icon: [384, 512, [], "f56d", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm76.45 211.36l-96.42 95.7c-6.65 6.61-17.39 6.61-24.04 0l-96.42-95.7C73.42 337.29 80.54 320 94.82 320H160v-80c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v80h65.18c14.28 0 21.4 17.29 11.27 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"] +}; +var faFileExcel = { + prefix: 'fas', + iconName: 'file-excel', + icon: [384, 512, [], "f1c3", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"] +}; +var faFileExport = { + prefix: 'fas', + iconName: 'file-export', + icon: [576, 512, [], "f56e", "M384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128zM571 308l-95.7-96.4c-10.1-10.1-27.4-3-27.4 11.3V288h-64v64h64v65.2c0 14.3 17.3 21.4 27.4 11.3L571 332c6.6-6.6 6.6-17.4 0-24zm-379 28v-32c0-8.8 7.2-16 16-16h176V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V352H208c-8.8 0-16-7.2-16-16z"] +}; +var faFileImage = { + prefix: 'fas', + iconName: 'file-image', + icon: [384, 512, [], "f1c5", "M384 121.941V128H256V0h6.059a24 24 0 0 1 16.97 7.029l97.941 97.941a24.002 24.002 0 0 1 7.03 16.971zM248 160c-13.2 0-24-10.8-24-24V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248zm-135.455 16c26.51 0 48 21.49 48 48s-21.49 48-48 48-48-21.49-48-48 21.491-48 48-48zm208 240h-256l.485-48.485L104.545 328c4.686-4.686 11.799-4.201 16.485.485L160.545 368 264.06 264.485c4.686-4.686 12.284-4.686 16.971 0L320.545 304v112z"] +}; +var faFileImport = { + prefix: 'fas', + iconName: 'file-import', + icon: [512, 512, [], "f56f", "M16 288c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h112v-64zm489-183L407.1 7c-4.5-4.5-10.6-7-17-7H384v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H152c-13.3 0-24 10.7-24 24v264h128v-65.2c0-14.3 17.3-21.4 27.4-11.3L379 308c6.6 6.7 6.6 17.4 0 24l-95.7 96.4c-10.1 10.1-27.4 3-27.4-11.3V352H128v136c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H376c-13.2 0-24-10.8-24-24z"] +}; +var faFileInvoice = { + prefix: 'fas', + iconName: 'file-invoice', + icon: [384, 512, [], "f570", "M288 256H96v64h192v-64zm89-151L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm256 304c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-200v96c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-96c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16z"] +}; +var faFileInvoiceDollar = { + prefix: 'fas', + iconName: 'file-invoice-dollar', + icon: [384, 512, [], "f571", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 80v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8zm144 263.88V440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-24.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V232c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v24.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07z"] +}; +var faFileMedical = { + prefix: 'fas', + iconName: 'file-medical', + icon: [384, 512, [], "f477", "M377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm64 160v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8z"] +}; +var faFileMedicalAlt = { + prefix: 'fas', + iconName: 'file-medical-alt', + icon: [448, 512, [], "f478", "M288 136V0H88C74.7 0 64 10.7 64 24v232H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h140.9c3 0 5.8 1.7 7.2 4.4l19.9 39.8 56.8-113.7c2.9-5.9 11.4-5.9 14.3 0l34.7 69.5H352c8.8 0 16 7.2 16 16s-7.2 16-16 16h-89.9L240 275.8l-56.8 113.7c-2.9 5.9-11.4 5.9-14.3 0L134.1 320H64v168c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H312c-13.2 0-24-10.8-24-24zm153-31L343.1 7c-4.5-4.5-10.6-7-17-7H320v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"] +}; +var faFilePdf = { + prefix: 'fas', + iconName: 'file-pdf', + icon: [384, 512, [], "f1c1", "M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"] +}; +var faFilePowerpoint = { + prefix: 'fas', + iconName: 'file-powerpoint', + icon: [384, 512, [], "f1c4", "M193.7 271.2c8.8 0 15.5 2.7 20.3 8.1 9.6 10.9 9.8 32.7-.2 44.1-4.9 5.6-11.9 8.5-21.1 8.5h-26.9v-60.7h27.9zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-153 31V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm53 165.2c0 90.3-88.8 77.6-111.1 77.6V436c0 6.6-5.4 12-12 12h-30.8c-6.6 0-12-5.4-12-12V236.2c0-6.6 5.4-12 12-12h81c44.5 0 72.9 32.8 72.9 77z"] +}; +var faFilePrescription = { + prefix: 'fas', + iconName: 'file-prescription', + icon: [384, 512, [], "f572", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm68.53 179.48l11.31 11.31c6.25 6.25 6.25 16.38 0 22.63l-29.9 29.9L304 409.38c6.25 6.25 6.25 16.38 0 22.63l-11.31 11.31c-6.25 6.25-16.38 6.25-22.63 0L240 413.25l-30.06 30.06c-6.25 6.25-16.38 6.25-22.63 0L176 432c-6.25-6.25-6.25-16.38 0-22.63l30.06-30.06L146.74 320H128v48c0 8.84-7.16 16-16 16H96c-8.84 0-16-7.16-16-16V208c0-8.84 7.16-16 16-16h80c35.35 0 64 28.65 64 64 0 24.22-13.62 45.05-33.46 55.92L240 345.38l29.9-29.9c6.25-6.25 16.38-6.25 22.63 0zM176 272h-48v-32h48c8.82 0 16 7.18 16 16s-7.18 16-16 16zm208-150.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"] +}; +var faFileSignature = { + prefix: 'fas', + iconName: 'file-signature', + icon: [576, 512, [], "f573", "M218.17 424.14c-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34c-6.37 12.78-25.03 11.37-29.48-2.09L144 386.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.75-16.19 54.06-9.7 66 14.16 1.89 3.78 5.49 5.95 9.36 6.26v-82.12l128-127.09V160H248c-13.2 0-24-10.8-24-24V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24v-40l-128-.11c-16.12-.31-30.58-9.28-37.83-23.75zM384 121.9c0-6.3-2.5-12.4-7-16.9L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1zm-96 225.06V416h68.99l161.68-162.78-67.88-67.88L288 346.96zm280.54-179.63l-31.87-31.87c-9.94-9.94-26.07-9.94-36.01 0l-27.25 27.25 67.88 67.88 27.25-27.25c9.95-9.94 9.95-26.07 0-36.01z"] +}; +var faFileUpload = { + prefix: 'fas', + iconName: 'file-upload', + icon: [384, 512, [], "f574", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm65.18 216.01H224v80c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-80H94.82c-14.28 0-21.41-17.29-11.27-27.36l96.42-95.7c6.65-6.61 17.39-6.61 24.04 0l96.42 95.7c10.15 10.07 3.03 27.36-11.25 27.36zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z"] +}; +var faFileVideo = { + prefix: 'fas', + iconName: 'file-video', + icon: [384, 512, [], "f1c8", "M384 121.941V128H256V0h6.059c6.365 0 12.47 2.529 16.971 7.029l97.941 97.941A24.005 24.005 0 0 1 384 121.941zM224 136V0H24C10.745 0 0 10.745 0 24v464c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V160H248c-13.2 0-24-10.8-24-24zm96 144.016v111.963c0 21.445-25.943 31.998-40.971 16.971L224 353.941V392c0 13.255-10.745 24-24 24H88c-13.255 0-24-10.745-24-24V280c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v38.059l55.029-55.013c15.011-15.01 40.971-4.491 40.971 16.97z"] +}; +var faFileWord = { + prefix: 'fas', + iconName: 'file-word', + icon: [384, 512, [], "f1c2", "M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm57.1 120H305c7.7 0 13.4 7.1 11.7 14.7l-38 168c-1.2 5.5-6.1 9.3-11.7 9.3h-38c-5.5 0-10.3-3.8-11.6-9.1-25.8-103.5-20.8-81.2-25.6-110.5h-.5c-1.1 14.3-2.4 17.4-25.6 110.5-1.3 5.3-6.1 9.1-11.6 9.1H117c-5.6 0-10.5-3.9-11.7-9.4l-37.8-168c-1.7-7.5 4-14.6 11.7-14.6h24.5c5.7 0 10.7 4 11.8 9.7 15.6 78 20.1 109.5 21 122.2 1.6-10.2 7.3-32.7 29.4-122.7 1.3-5.4 6.1-9.1 11.7-9.1h29.1c5.6 0 10.4 3.8 11.7 9.2 24 100.4 28.8 124 29.6 129.4-.2-11.2-2.6-17.8 21.6-129.2 1-5.6 5.9-9.5 11.5-9.5zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"] +}; +var faFill = { + prefix: 'fas', + iconName: 'fill', + icon: [512, 512, [], "f575", "M502.63 217.06L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.77c-6.24-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.63l86.19 86.18-94.76 94.76c-37.49 37.49-37.49 98.26 0 135.75l117.19 117.19c18.75 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.88-28.12l221.57-221.57c12.49-12.5 12.49-32.76 0-45.26zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.61 58.6c12.49 12.49 32.75 12.49 45.24 0 12.49-12.49 12.49-32.75 0-45.24l-58.61-58.6 58.95-58.95 162.45 162.44-48.35 48.34z"] +}; +var faFillDrip = { + prefix: 'fas', + iconName: 'fill-drip', + icon: [576, 512, [], "f576", "M512 320s-64 92.65-64 128c0 35.35 28.66 64 64 64s64-28.65 64-64-64-128-64-128zm-9.37-102.94L294.94 9.37C288.69 3.12 280.5 0 272.31 0s-16.38 3.12-22.62 9.37l-81.58 81.58L81.93 4.76c-6.25-6.25-16.38-6.25-22.62 0L36.69 27.38c-6.24 6.25-6.24 16.38 0 22.62l86.19 86.18-94.76 94.76c-37.49 37.48-37.49 98.26 0 135.75l117.19 117.19c18.74 18.74 43.31 28.12 67.87 28.12 24.57 0 49.13-9.37 67.87-28.12l221.57-221.57c12.5-12.5 12.5-32.75.01-45.25zm-116.22 70.97H65.93c1.36-3.84 3.57-7.98 7.43-11.83l13.15-13.15 81.61-81.61 58.6 58.6c12.49 12.49 32.75 12.49 45.24 0s12.49-32.75 0-45.24l-58.6-58.6 58.95-58.95 162.44 162.44-48.34 48.34z"] +}; +var faFilm = { + prefix: 'fas', + iconName: 'film', + icon: [512, 512, [], "f008", "M488 64h-8v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12V64H96v20c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12V64h-8C10.7 64 0 74.7 0 88v336c0 13.3 10.7 24 24 24h8v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h320v-20c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v20h8c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24zM96 372c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12H44c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm272 208c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm0-168c0 6.6-5.4 12-12 12H156c-6.6 0-12-5.4-12-12v-96c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v96zm112 152c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-96c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"] +}; +var faFilter = { + prefix: 'fas', + iconName: 'filter', + icon: [512, 512, [], "f0b0", "M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"] +}; +var faFingerprint = { + prefix: 'fas', + iconName: 'fingerprint', + icon: [512, 512, [], "f577", "M256.12 245.96c-13.25 0-24 10.74-24 24 1.14 72.25-8.14 141.9-27.7 211.55-2.73 9.72 2.15 30.49 23.12 30.49 10.48 0 20.11-6.92 23.09-17.52 13.53-47.91 31.04-125.41 29.48-224.52.01-13.25-10.73-24-23.99-24zm-.86-81.73C194 164.16 151.25 211.3 152.1 265.32c.75 47.94-3.75 95.91-13.37 142.55-2.69 12.98 5.67 25.69 18.64 28.36 13.05 2.67 25.67-5.66 28.36-18.64 10.34-50.09 15.17-101.58 14.37-153.02-.41-25.95 19.92-52.49 54.45-52.34 31.31.47 57.15 25.34 57.62 55.47.77 48.05-2.81 96.33-10.61 143.55-2.17 13.06 6.69 25.42 19.76 27.58 19.97 3.33 26.81-15.1 27.58-19.77 8.28-50.03 12.06-101.21 11.27-152.11-.88-55.8-47.94-101.88-104.91-102.72zm-110.69-19.78c-10.3-8.34-25.37-6.8-33.76 3.48-25.62 31.5-39.39 71.28-38.75 112 .59 37.58-2.47 75.27-9.11 112.05-2.34 13.05 6.31 25.53 19.36 27.89 20.11 3.5 27.07-14.81 27.89-19.36 7.19-39.84 10.5-80.66 9.86-121.33-.47-29.88 9.2-57.88 28-80.97 8.35-10.28 6.79-25.39-3.49-33.76zm109.47-62.33c-15.41-.41-30.87 1.44-45.78 4.97-12.89 3.06-20.87 15.98-17.83 28.89 3.06 12.89 16 20.83 28.89 17.83 11.05-2.61 22.47-3.77 34-3.69 75.43 1.13 137.73 61.5 138.88 134.58.59 37.88-1.28 76.11-5.58 113.63-1.5 13.17 7.95 25.08 21.11 26.58 16.72 1.95 25.51-11.88 26.58-21.11a929.06 929.06 0 0 0 5.89-119.85c-1.56-98.75-85.07-180.33-186.16-181.83zm252.07 121.45c-2.86-12.92-15.51-21.2-28.61-18.27-12.94 2.86-21.12 15.66-18.26 28.61 4.71 21.41 4.91 37.41 4.7 61.6-.11 13.27 10.55 24.09 23.8 24.2h.2c13.17 0 23.89-10.61 24-23.8.18-22.18.4-44.11-5.83-72.34zm-40.12-90.72C417.29 43.46 337.6 1.29 252.81.02 183.02-.82 118.47 24.91 70.46 72.94 24.09 119.37-.9 181.04.14 246.65l-.12 21.47c-.39 13.25 10.03 24.31 23.28 24.69.23.02.48.02.72.02 12.92 0 23.59-10.3 23.97-23.3l.16-23.64c-.83-52.5 19.16-101.86 56.28-139 38.76-38.8 91.34-59.67 147.68-58.86 69.45 1.03 134.73 35.56 174.62 92.39 7.61 10.86 22.56 13.45 33.42 5.86 10.84-7.62 13.46-22.59 5.84-33.43z"] +}; +var faFire = { + prefix: 'fas', + iconName: 'fire', + icon: [384, 512, [], "f06d", "M216 23.86c0-23.8-30.65-32.77-44.15-13.04C48 191.85 224 200 224 288c0 35.63-29.11 64.46-64.85 63.99-35.17-.45-63.15-29.77-63.15-64.94v-85.51c0-21.7-26.47-32.23-41.43-16.5C27.8 213.16 0 261.33 0 320c0 105.87 86.13 192 192 192s192-86.13 192-192c0-170.29-168-193-168-296.14z"] +}; +var faFireAlt = { + prefix: 'fas', + iconName: 'fire-alt', + icon: [448, 512, [], "f7e4", "M323.56 51.2c-20.8 19.3-39.58 39.59-56.22 59.97C240.08 73.62 206.28 35.53 168 0 69.74 91.17 0 209.96 0 281.6 0 408.85 100.29 512 224 512s224-103.15 224-230.4c0-53.27-51.98-163.14-124.44-230.4zm-19.47 340.65C282.43 407.01 255.72 416 226.86 416 154.71 416 96 368.26 96 290.75c0-38.61 24.31-72.63 72.79-130.75 6.93 7.98 98.83 125.34 98.83 125.34l58.63-66.88c4.14 6.85 7.91 13.55 11.27 19.97 27.35 52.19 15.81 118.97-33.43 153.42z"] +}; +var faFireExtinguisher = { + prefix: 'fas', + iconName: 'fire-extinguisher', + icon: [448, 512, [], "f134", "M434.027 26.329l-168 28C254.693 56.218 256 67.8 256 72h-58.332C208.353 36.108 181.446 0 144 0c-39.435 0-66.368 39.676-52.228 76.203-52.039 13.051-75.381 54.213-90.049 90.884-4.923 12.307 1.063 26.274 13.37 31.197 12.317 4.926 26.279-1.075 31.196-13.37C75.058 112.99 106.964 120 168 120v27.076c-41.543 10.862-72 49.235-72 94.129V488c0 13.255 10.745 24 24 24h144c13.255 0 24-10.745 24-24V240c0-44.731-30.596-82.312-72-92.97V120h40c0 2.974-1.703 15.716 10.027 17.671l168 28C441.342 166.89 448 161.25 448 153.834V38.166c0-7.416-6.658-13.056-13.973-11.837zM144 72c-8.822 0-16-7.178-16-16s7.178-16 16-16 16 7.178 16 16-7.178 16-16 16z"] +}; +var faFirstAid = { + prefix: 'fas', + iconName: 'first-aid', + icon: [576, 512, [], "f479", "M0 80v352c0 26.5 21.5 48 48 48h48V32H48C21.5 32 0 53.5 0 80zm128 400h320V32H128v448zm64-248c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48zM528 32h-48v448h48c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"] +}; +var faFish = { + prefix: 'fas', + iconName: 'fish', + icon: [576, 512, [], "f578", "M327.1 96c-89.97 0-168.54 54.77-212.27 101.63L27.5 131.58c-12.13-9.18-30.24.6-27.14 14.66L24.54 256 .35 365.77c-3.1 14.06 15.01 23.83 27.14 14.66l87.33-66.05C158.55 361.23 237.13 416 327.1 416 464.56 416 576 288 576 256S464.56 96 327.1 96zm87.43 184c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24 13.26 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"] +}; +var faFistRaised = { + prefix: 'fas', + iconName: 'fist-raised', + icon: [384, 512, [], "f6de", "M255.98 160V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v146.93c5.02-1.78 10.34-2.93 15.97-2.93h48.03zm128 95.99c-.01-35.34-28.66-63.99-63.99-63.99H207.85c-8.78 0-15.9 7.07-15.9 15.85v.56c0 26.27 21.3 47.59 47.57 47.59h35.26c9.68 0 13.2 3.58 13.2 8v16.2c0 4.29-3.59 7.78-7.88 8-44.52 2.28-64.16 24.71-96.05 72.55l-6.31 9.47a7.994 7.994 0 0 1-11.09 2.22l-13.31-8.88a7.994 7.994 0 0 1-2.22-11.09l6.31-9.47c15.73-23.6 30.2-43.26 47.31-58.08-17.27-5.51-31.4-18.12-38.87-34.45-6.59 3.41-13.96 5.52-21.87 5.52h-32c-12.34 0-23.49-4.81-32-12.48C71.48 251.19 60.33 256 48 256H16c-5.64 0-10.97-1.15-16-2.95v77.93c0 33.95 13.48 66.5 37.49 90.51L63.99 448v64h255.98v-63.96l35.91-35.92A96.035 96.035 0 0 0 384 344.21l-.02-88.22zm-32.01-90.09V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v112h32c11.28 0 21.94 2.31 32 5.9zM16 224h32c8.84 0 16-7.16 16-16V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v128c0 8.84 7.16 16 16 16zm95.99 0h32c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v160c0 8.84 7.16 16 16 16z"] +}; +var faFlag = { + prefix: 'fas', + iconName: 'flag', + icon: [512, 512, [], "f024", "M349.565 98.783C295.978 98.783 251.721 64 184.348 64c-24.955 0-47.309 4.384-68.045 12.013a55.947 55.947 0 0 0 3.586-23.562C118.117 24.015 94.806 1.206 66.338.048 34.345-1.254 8 24.296 8 56c0 19.026 9.497 35.825 24 45.945V488c0 13.255 10.745 24 24 24h16c13.255 0 24-10.745 24-24v-94.4c28.311-12.064 63.582-22.122 114.435-22.122 53.588 0 97.844 34.783 165.217 34.783 48.169 0 86.667-16.294 122.505-40.858C506.84 359.452 512 349.571 512 339.045v-243.1c0-23.393-24.269-38.87-45.485-29.016-34.338 15.948-76.454 31.854-116.95 31.854z"] +}; +var faFlagCheckered = { + prefix: 'fas', + iconName: 'flag-checkered', + icon: [512, 512, [], "f11e", "M243.2 189.9V258c26.1 5.9 49.3 15.6 73.6 22.3v-68.2c-26-5.8-49.4-15.5-73.6-22.2zm223.3-123c-34.3 15.9-76.5 31.9-117 31.9C296 98.8 251.7 64 184.3 64c-25 0-47.3 4.4-68 12 2.8-7.3 4.1-15.2 3.6-23.6C118.1 24 94.8 1.2 66.3 0 34.3-1.3 8 24.3 8 56c0 19 9.5 35.8 24 45.9V488c0 13.3 10.7 24 24 24h16c13.3 0 24-10.7 24-24v-94.4c28.3-12.1 63.6-22.1 114.4-22.1 53.6 0 97.8 34.8 165.2 34.8 48.2 0 86.7-16.3 122.5-40.9 8.7-6 13.8-15.8 13.8-26.4V95.9c.1-23.3-24.2-38.8-45.4-29zM169.6 325.5c-25.8 2.7-50 8.2-73.6 16.6v-70.5c26.2-9.3 47.5-15 73.6-17.4zM464 191c-23.6 9.8-46.3 19.5-73.6 23.9V286c24.8-3.4 51.4-11.8 73.6-26v70.5c-25.1 16.1-48.5 24.7-73.6 27.1V286c-27 3.7-47.9 1.5-73.6-5.6v67.4c-23.9-7.4-47.3-16.7-73.6-21.3V258c-19.7-4.4-40.8-6.8-73.6-3.8v-70c-22.4 3.1-44.6 10.2-73.6 20.9v-70.5c33.2-12.2 50.1-19.8 73.6-22v71.6c27-3.7 48.4-1.3 73.6 5.7v-67.4c23.7 7.4 47.2 16.7 73.6 21.3v68.4c23.7 5.3 47.6 6.9 73.6 2.7V143c27-4.8 52.3-13.6 73.6-22.5z"] +}; +var faFlagUsa = { + prefix: 'fas', + iconName: 'flag-usa', + icon: [512, 512, [], "f74d", "M32 0C14.3 0 0 14.3 0 32v464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32C64 14.3 49.7 0 32 0zm267.9 303.6c-57.2-15.1-111.7-28.8-203.9 11.1V384c185.7-92.2 221.7 53.3 397.5-23.1 11.4-5 18.5-16.5 18.5-28.8v-36c-43.6 17.3-80.2 24.1-112.1 24.1-37.4-.1-68.9-8.4-100-16.6zm0-96c-57.2-15.1-111.7-28.8-203.9 11.1v61.5c94.8-37.6 154.6-22.7 212.1-7.6 57.2 15.1 111.7 28.8 203.9-11.1V200c-43.6 17.3-80.2 24.1-112.1 24.1-37.4 0-68.9-8.3-100-16.5zm9.5-125.9c51.8 15.6 97.4 29 202.6-20.1V30.8c0-25.1-26.8-38.1-49.4-26.6C291.3 91.5 305.4-62.2 96 32.4v151.9c94.8-37.5 154.6-22.7 212.1-7.6 57.2 15 111.7 28.7 203.9-11.1V96.7c-53.6 23.5-93.3 31.4-126.1 31.4s-59-7.8-85.7-15.9c-4-1.2-8.1-2.4-12.1-3.5V75.5c7.2 2 14.3 4.1 21.3 6.2zM160 128.1c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16-7.2 16-16 16zm0-55.8c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm64 47.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16zm0-55.9c-8.8 0-16-7.1-16-16 0-8.8 7.2-16 16-16s16 7.1 16 16c0 8.8-7.2 16-16 16z"] +}; +var faFlask = { + prefix: 'fas', + iconName: 'flask', + icon: [448, 512, [], "f0c3", "M437.2 403.5L320 215V64h8c13.3 0 24-10.7 24-24V24c0-13.3-10.7-24-24-24H120c-13.3 0-24 10.7-24 24v16c0 13.3 10.7 24 24 24h8v151L10.8 403.5C-18.5 450.6 15.3 512 70.9 512h306.2c55.7 0 89.4-61.5 60.1-108.5zM137.9 320l48.2-77.6c3.7-5.2 5.8-11.6 5.8-18.4V64h64v160c0 6.9 2.2 13.2 5.8 18.4l48.2 77.6h-172z"] +}; +var faFlushed = { + prefix: 'fas', + iconName: 'flushed', + icon: [496, 512, [], "f579", "M344 200c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm-192 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM80 224c0-39.8 32.2-72 72-72s72 32.2 72 72-32.2 72-72 72-72-32.2-72-72zm232 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-104c-39.8 0-72-32.2-72-72s32.2-72 72-72 72 32.2 72 72-32.2 72-72 72z"] +}; +var faFolder = { + prefix: 'fas', + iconName: 'folder', + icon: [512, 512, [], "f07b", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48z"] +}; +var faFolderMinus = { + prefix: 'fas', + iconName: 'folder-minus', + icon: [512, 512, [], "f65d", "M464 128H272l-64-64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V176c0-26.51-21.49-48-48-48zm-96 168c0 8.84-7.16 16-16 16H160c-8.84 0-16-7.16-16-16v-16c0-8.84 7.16-16 16-16h192c8.84 0 16 7.16 16 16v16z"] +}; +var faFolderOpen = { + prefix: 'fas', + iconName: 'folder-open', + icon: [576, 512, [], "f07c", "M572.694 292.093L500.27 416.248A63.997 63.997 0 0 1 444.989 448H45.025c-18.523 0-30.064-20.093-20.731-36.093l72.424-124.155A64 64 0 0 1 152 256h399.964c18.523 0 30.064 20.093 20.73 36.093zM152 224h328v-48c0-26.51-21.49-48-48-48H272l-64-64H48C21.49 64 0 85.49 0 112v278.046l69.077-118.418C86.214 242.25 117.989 224 152 224z"] +}; +var faFolderPlus = { + prefix: 'fas', + iconName: 'folder-plus', + icon: [512, 512, [], "f65e", "M464,128H272L208,64H48A48,48,0,0,0,0,112V400a48,48,0,0,0,48,48H464a48,48,0,0,0,48-48V176A48,48,0,0,0,464,128ZM359.5,296a16,16,0,0,1-16,16h-64v64a16,16,0,0,1-16,16h-16a16,16,0,0,1-16-16V312h-64a16,16,0,0,1-16-16V280a16,16,0,0,1,16-16h64V200a16,16,0,0,1,16-16h16a16,16,0,0,1,16,16v64h64a16,16,0,0,1,16,16Z"] +}; +var faFont = { + prefix: 'fas', + iconName: 'font', + icon: [448, 512, [], "f031", "M432 416h-23.41L277.88 53.69A32 32 0 0 0 247.58 32h-47.16a32 32 0 0 0-30.3 21.69L39.41 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-19.58l23.3-64h152.56l23.3 64H304a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM176.85 272L224 142.51 271.15 272z"] +}; +var faFontAwesomeLogoFull = { + prefix: 'fas', + iconName: 'font-awesome-logo-full', + icon: [3992, 512, ["Font Awesome"], "f4e6", "M454.6 0H57.4C25.9 0 0 25.9 0 57.4v397.3C0 486.1 25.9 512 57.4 512h397.3c31.4 0 57.4-25.9 57.4-57.4V57.4C512 25.9 486.1 0 454.6 0zm-58.9 324.9c0 4.8-4.1 6.9-8.9 8.9-19.2 8.1-39.7 15.7-61.5 15.7-40.5 0-68.7-44.8-163.2 2.5v51.8c0 30.3-45.7 30.2-45.7 0v-250c-9-7-15-17.9-15-30.3 0-21 17.1-38.2 38.2-38.2 21 0 38.2 17.1 38.2 38.2 0 12.2-5.8 23.2-14.9 30.2v21c37.1-12 65.5-34.4 146.1-3.4 26.6 11.4 68.7-15.7 76.5-15.7 5.5 0 10.3 4.1 10.3 8.9v160.4zm432.9-174.2h-137v70.1H825c39.8 0 40.4 62.2 0 62.2H691.6v105.6c0 45.5-70.7 46.4-70.7 0V128.3c0-22 18-39.8 39.8-39.8h167.8c39.6 0 40.5 62.2.1 62.2zm191.1 23.4c-169.3 0-169.1 252.4 0 252.4 169.9 0 169.9-252.4 0-252.4zm0 196.1c-81.6 0-82.1-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm372.4 53.4c-17.5 0-31.4-13.9-31.4-31.4v-117c0-62.4-72.6-52.5-99.1-16.4v133.4c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c43.3-51.6 162.4-60.4 162.4 39.3v141.5c.3 30.4-31.5 31.4-31.7 31.4zm179.7 2.9c-44.3 0-68.3-22.9-68.3-65.8V235.2H1488c-35.6 0-36.7-55.3 0-55.3h15.5v-37.3c0-41.3 63.8-42.1 63.8 0v37.5h24.9c35.4 0 35.7 55.3 0 55.3h-24.9v108.5c0 29.6 26.1 26.3 27.4 26.3 31.4 0 52.6 56.3-22.9 56.3zM1992 123c-19.5-50.2-95.5-50-114.5 0-107.3 275.7-99.5 252.7-99.5 262.8 0 42.8 58.3 51.2 72.1 14.4l13.5-35.9H2006l13 35.9c14.2 37.7 72.1 27.2 72.1-14.4 0-10.1 5.3 6.8-99.1-262.8zm-108.9 179.1l51.7-142.9 51.8 142.9h-103.5zm591.3-85.6l-53.7 176.3c-12.4 41.2-72 41-84 0l-42.3-135.9-42.3 135.9c-12.4 40.9-72 41.2-84.5 0l-54.2-176.3c-12.5-39.4 49.8-56.1 60.2-16.9L2213 342l45.3-139.5c10.9-32.7 59.6-34.7 71.2 0l45.3 139.5 39.3-142.4c10.3-38.3 72.6-23.8 60.3 16.9zm275.4 75.1c0-42.4-33.9-117.5-119.5-117.5-73.2 0-124.4 56.3-124.4 126 0 77.2 55.3 126.4 128.5 126.4 31.7 0 93-11.5 93-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-109 8.4-115.9-43.8h148.3c16.3 0 29.3-13.4 29.3-28.9zM2571 277.7c9.5-73.4 113.9-68.6 118.6 0H2571zm316.7 148.8c-31.4 0-81.6-10.5-96.6-31.9-12.4-17 2.5-39.8 21.8-39.8 16.3 0 36.8 22.9 77.7 22.9 27.4 0 40.4-11 40.4-25.8 0-39.8-142.9-7.4-142.9-102 0-40.4 35.3-75.7 98.6-75.7 31.4 0 74.1 9.9 87.6 29.4 10.8 14.8-1.4 36.2-20.9 36.2-15.1 0-26.7-17.3-66.2-17.3-22.9 0-37.8 10.5-37.8 23.8 0 35.9 142.4 6 142.4 103.1-.1 43.7-37.4 77.1-104.1 77.1zm266.8-252.4c-169.3 0-169.1 252.4 0 252.4 170.1 0 169.6-252.4 0-252.4zm0 196.1c-81.8 0-82-139.8 0-139.8 82.5 0 82.4 139.8 0 139.8zm476.9 22V268.7c0-53.8-61.4-45.8-85.7-10.5v134c0 41.3-63.8 42.1-63.8 0V268.7c0-52.1-59.5-47.4-85.7-10.1v133.6c0 41.5-63.3 41.8-63.3 0V208c0-40 63.1-41.6 63.1 0v3.4c9.9-14.4 41.8-37.3 78.6-37.3 35.3 0 57.7 16.4 66.7 43.8 13.9-21.8 45.8-43.8 82.6-43.8 44.3 0 70.7 23.4 70.7 72.7v145.3c.5 17.3-13.5 31.4-31.9 31.4 3.5.1-31.3 1.1-31.3-31.3zM3992 291.6c0-42.4-32.4-117.5-117.9-117.5-73.2 0-127.5 56.3-127.5 126 0 77.2 58.3 126.4 131.6 126.4 31.7 0 91.5-11.5 91.5-39.8 0-18.3-21.1-31.5-39.3-22.4-49.4 26.2-110.5 8.4-117.5-43.8h149.8c16.3 0 29.1-13.4 29.3-28.9zm-180.5-13.9c9.7-74.4 115.9-68.3 120.1 0h-120.1z"] +}; +var faFootballBall = { + prefix: 'fas', + iconName: 'football-ball', + icon: [496, 512, [], "f44e", "M481.5 60.3c-4.8-18.2-19.1-32.5-37.3-37.4C420.3 16.5 383 8.9 339.4 8L496 164.8c-.8-43.5-8.2-80.6-14.5-104.5zm-467 391.4c4.8 18.2 19.1 32.5 37.3 37.4 23.9 6.4 61.2 14 104.8 14.9L0 347.2c.8 43.5 8.2 80.6 14.5 104.5zM4.2 283.4L220.4 500c132.5-19.4 248.8-118.7 271.5-271.4L275.6 12C143.1 31.4 26.8 130.7 4.2 283.4zm317.3-123.6c3.1-3.1 8.2-3.1 11.3 0l11.3 11.3c3.1 3.1 3.1 8.2 0 11.3l-28.3 28.3 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-22.6 22.7 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L248 278.6l-22.6 22.6 28.3 28.3c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-28.3-28.3-28.3 28.3c-3.1 3.1-8.2 3.1-11.3 0l-11.3-11.3c-3.1-3.1-3.1-8.2 0-11.3l28.3-28.3-28.3-28.2c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 22.6-22.6-28.3-28.3c-3.1-3.1-3.1-8.2 0-11.3l11.3-11.3c3.1-3.1 8.2-3.1 11.3 0l28.3 28.3 28.3-28.5z"] +}; +var faForward = { + prefix: 'fas', + iconName: 'forward', + icon: [512, 512, [], "f04e", "M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z"] +}; +var faFrog = { + prefix: 'fas', + iconName: 'frog', + icon: [576, 512, [], "f52e", "M446.53 97.43C439.67 60.23 407.19 32 368 32c-39.23 0-71.72 28.29-78.54 65.54C126.75 112.96-.5 250.12 0 416.98.11 451.9 29.08 480 64 480h304c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-79.49l35.8-48.33c24.14-36.23 10.35-88.28-33.71-106.6-23.89-9.93-51.55-4.65-72.24 10.88l-32.76 24.59c-7.06 5.31-17.09 3.91-22.41-3.19-5.3-7.08-3.88-17.11 3.19-22.41l34.78-26.09c36.84-27.66 88.28-27.62 125.13 0 10.87 8.15 45.87 39.06 40.8 93.21L469.62 480H560c8.84 0 16-7.16 16-16 0-17.67-14.33-32-32-32h-53.63l-98.52-104.68 154.44-86.65A58.16 58.16 0 0 0 576 189.94c0-21.4-11.72-40.95-30.48-51.23-40.56-22.22-98.99-41.28-98.99-41.28zM368 136c-13.26 0-24-10.75-24-24 0-13.26 10.74-24 24-24 13.25 0 24 10.74 24 24 0 13.25-10.75 24-24 24z"] +}; +var faFrown = { + prefix: 'fas', + iconName: 'frown', + icon: [496, 512, [], "f119", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm170.2 218.2C315.8 367.4 282.9 352 248 352s-67.8 15.4-90.2 42.2c-13.5 16.3-38.1-4.2-24.6-20.5C161.7 339.6 203.6 320 248 320s86.3 19.6 114.7 53.8c13.6 16.2-11 36.7-24.5 20.4z"] +}; +var faFrownOpen = { + prefix: 'fas', + iconName: 'frown-open', + icon: [496, 512, [], "f57a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm187.3 183.3c-31.2-9.6-59.4-15.3-75.3-15.3s-44.1 5.7-75.3 15.3c-11.5 3.5-22.5-6.3-20.5-18.1 7-40 60.1-61.2 95.8-61.2s88.8 21.3 95.8 61.2c2 11.9-9.1 21.6-20.5 18.1zM328 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faFunnelDollar = { + prefix: 'fas', + iconName: 'funnel-dollar', + icon: [640, 512, [], "f662", "M433.46 165.94l101.2-111.87C554.61 34.12 540.48 0 512.26 0H31.74C3.52 0-10.61 34.12 9.34 54.07L192 256v155.92c0 12.59 5.93 24.44 16 32l79.99 60c20.86 15.64 48.47 6.97 59.22-13.57C310.8 455.38 288 406.35 288 352c0-89.79 62.05-165.17 145.46-186.06zM480 192c-88.37 0-160 71.63-160 160s71.63 160 160 160 160-71.63 160-160-71.63-160-160-160zm16 239.88V448c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V256c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.04 44.44-42.67 45.07z"] +}; +var faFutbol = { + prefix: 'fas', + iconName: 'futbol', + icon: [512, 512, [], "f1e3", "M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-48 0l-.003-.282-26.064 22.741-62.679-58.5 16.454-84.355 34.303 3.072c-24.889-34.216-60.004-60.089-100.709-73.141l13.651 31.939L256 139l-74.953-41.525 13.651-31.939c-40.631 13.028-75.78 38.87-100.709 73.141l34.565-3.073 16.192 84.355-62.678 58.5-26.064-22.741-.003.282c0 43.015 13.497 83.952 38.472 117.991l7.704-33.897 85.138 10.447 36.301 77.826-29.902 17.786c40.202 13.122 84.29 13.148 124.572 0l-29.902-17.786 36.301-77.826 85.138-10.447 7.704 33.897C442.503 339.952 456 299.015 456 256zm-248.102 69.571l-29.894-91.312L256 177.732l77.996 56.527-29.622 91.312h-96.476z"] +}; +var faGamepad = { + prefix: 'fas', + iconName: 'gamepad', + icon: [640, 512, [], "f11b", "M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z"] +}; +var faGasPump = { + prefix: 'fas', + iconName: 'gas-pump', + icon: [512, 512, [], "f52f", "M336 448H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm157.2-340.7l-81-81c-6.2-6.2-16.4-6.2-22.6 0l-11.3 11.3c-6.2 6.2-6.2 16.4 0 22.6L416 97.9V160c0 28.1 20.9 51.3 48 55.2V376c0 13.2-10.8 24-24 24s-24-10.8-24-24v-32c0-48.6-39.4-88-88-88h-8V64c0-35.3-28.7-64-64-64H96C60.7 0 32 28.7 32 64v352h288V304h8c22.1 0 40 17.9 40 40v27.8c0 37.7 27 72 64.5 75.9 43 4.3 79.5-29.5 79.5-71.7V152.6c0-17-6.8-33.3-18.8-45.3zM256 192H96V64h160v128z"] +}; +var faGavel = { + prefix: 'fas', + iconName: 'gavel', + icon: [512, 512, [], "f0e3", "M504.971 199.362l-22.627-22.627c-9.373-9.373-24.569-9.373-33.941 0l-5.657 5.657L329.608 69.255l5.657-5.657c9.373-9.373 9.373-24.569 0-33.941L312.638 7.029c-9.373-9.373-24.569-9.373-33.941 0L154.246 131.48c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l5.657-5.657 39.598 39.598-81.04 81.04-5.657-5.657c-12.497-12.497-32.758-12.497-45.255 0L9.373 412.118c-12.497 12.497-12.497 32.758 0 45.255l45.255 45.255c12.497 12.497 32.758 12.497 45.255 0l114.745-114.745c12.497-12.497 12.497-32.758 0-45.255l-5.657-5.657 81.04-81.04 39.598 39.598-5.657 5.657c-9.373 9.373-9.373 24.569 0 33.941l22.627 22.627c9.373 9.373 24.569 9.373 33.941 0l124.451-124.451c9.372-9.372 9.372-24.568 0-33.941z"] +}; +var faGem = { + prefix: 'fas', + iconName: 'gem', + icon: [576, 512, [], "f3a5", "M485.5 0L576 160H474.9L405.7 0h79.8zm-128 0l69.2 160H149.3L218.5 0h139zm-267 0h79.8l-69.2 160H0L90.5 0zM0 192h100.7l123 251.7c1.5 3.1-2.7 5.9-5 3.3L0 192zm148.2 0h279.6l-137 318.2c-1 2.4-4.5 2.4-5.5 0L148.2 192zm204.1 251.7l123-251.7H576L357.3 446.9c-2.3 2.7-6.5-.1-5-3.2z"] +}; +var faGenderless = { + prefix: 'fas', + iconName: 'genderless', + icon: [288, 512, [], "f22d", "M144 176c44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80 35.9-80 80-80m0-64C64.5 112 0 176.5 0 256s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144z"] +}; +var faGhost = { + prefix: 'fas', + iconName: 'ghost', + icon: [384, 512, [], "f6e2", "M186.1.09C81.01 3.24 0 94.92 0 200.05v263.92c0 14.26 17.23 21.39 27.31 11.31l24.92-18.53c6.66-4.95 16-3.99 21.51 2.21l42.95 48.35c6.25 6.25 16.38 6.25 22.63 0l40.72-45.85c6.37-7.17 17.56-7.17 23.92 0l40.72 45.85c6.25 6.25 16.38 6.25 22.63 0l42.95-48.35c5.51-6.2 14.85-7.17 21.51-2.21l24.92 18.53c10.08 10.08 27.31 2.94 27.31-11.31V192C384 84 294.83-3.17 186.1.09zM128 224c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm128 0c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faGift = { + prefix: 'fas', + iconName: 'gift', + icon: [512, 512, [], "f06b", "M32 448c0 17.7 14.3 32 32 32h160V320H32v128zm256 32h160c17.7 0 32-14.3 32-32V320H288v160zm192-320h-42.1c6.2-12.1 10.1-25.5 10.1-40 0-48.5-39.5-88-88-88-41.6 0-68.5 21.3-103 68.3-34.5-47-61.4-68.3-103-68.3-48.5 0-88 39.5-88 88 0 14.5 3.8 27.9 10.1 40H32c-17.7 0-32 14.3-32 32v80c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-80c0-17.7-14.3-32-32-32zm-326.1 0c-22.1 0-40-17.9-40-40s17.9-40 40-40c19.9 0 34.6 3.3 86.1 80h-86.1zm206.1 0h-86.1c51.4-76.5 65.7-80 86.1-80 22.1 0 40 17.9 40 40s-17.9 40-40 40z"] +}; +var faGifts = { + prefix: 'fas', + iconName: 'gifts', + icon: [640, 512, [], "f79c", "M240.6 194.1c1.9-30.8 17.3-61.2 44-79.8C279.4 103.5 268.7 96 256 96h-29.4l30.7-22c7.2-5.1 8.9-15.1 3.7-22.3l-9.3-13c-5.1-7.2-15.1-8.9-22.3-3.7l-32 22.9 11.5-30.6c3.1-8.3-1.1-17.5-9.4-20.6l-15-5.6c-8.3-3.1-17.5 1.1-20.6 9.4l-19.9 53-19.9-53.1C121 2.1 111.8-2.1 103.5 1l-15 5.6C80.2 9.7 76 19 79.2 27.2l11.5 30.6L58.6 35c-7.2-5.1-17.2-3.5-22.3 3.7l-9.3 13c-5.1 7.2-3.5 17.2 3.7 22.3l30.7 22H32c-17.7 0-32 14.3-32 32v352c0 17.7 14.3 32 32 32h168.9c-5.5-9.5-8.9-20.3-8.9-32V256c0-29.9 20.8-55 48.6-61.9zM224 480c0 17.7 14.3 32 32 32h160V384H224v96zm224 32h160c17.7 0 32-14.3 32-32v-96H448v128zm160-288h-20.4c2.6-7.6 4.4-15.5 4.4-23.8 0-35.5-27-72.2-72.1-72.2-48.1 0-75.9 47.7-87.9 75.3-12.1-27.6-39.9-75.3-87.9-75.3-45.1 0-72.1 36.7-72.1 72.2 0 8.3 1.7 16.2 4.4 23.8H256c-17.7 0-32 14.3-32 32v96h192V224h15.3l.7-.2.7.2H448v128h192v-96c0-17.7-14.3-32-32-32zm-272 0c-2.7-1.4-5.1-3-7.2-4.8-7.3-6.4-8.8-13.8-8.8-19 0-9.7 6.4-24.2 24.1-24.2 18.7 0 35.6 27.4 44.5 48H336zm199.2-4.8c-2.1 1.8-4.5 3.4-7.2 4.8h-52.6c8.8-20.3 25.8-48 44.5-48 17.7 0 24.1 14.5 24.1 24.2 0 5.2-1.5 12.6-8.8 19z"] +}; +var faGlassCheers = { + prefix: 'fas', + iconName: 'glass-cheers', + icon: [640, 512, [], "f79f", "M639.4 433.6c-8.4-20.4-31.8-30.1-52.2-21.6l-22.1 9.2-38.7-101.9c47.9-35 64.8-100.3 34.5-152.8L474.3 16c-8-13.9-25.1-19.7-40-13.6L320 49.8 205.7 2.4c-14.9-6.2-32-.3-40 13.6L79.1 166.5C48.9 219 65.7 284.3 113.6 319.2L74.9 421.1l-22.1-9.2c-20.4-8.5-43.7 1.2-52.2 21.6-1.7 4.1.2 8.8 4.3 10.5l162.3 67.4c4.1 1.7 8.7-.2 10.4-4.3 8.4-20.4-1.2-43.8-21.6-52.3l-22.1-9.2L173.3 342c4.4.5 8.8 1.3 13.1 1.3 51.7 0 99.4-33.1 113.4-85.3l20.2-75.4 20.2 75.4c14 52.2 61.7 85.3 113.4 85.3 4.3 0 8.7-.8 13.1-1.3L506 445.6l-22.1 9.2c-20.4 8.5-30.1 31.9-21.6 52.3 1.7 4.1 6.4 6 10.4 4.3L635.1 444c4-1.7 6-6.3 4.3-10.4zM275.9 162.1l-112.1-46.5 36.5-63.4 94.5 39.2-18.9 70.7zm88.2 0l-18.9-70.7 94.5-39.2 36.5 63.4-112.1 46.5z"] +}; +var faGlassMartini = { + prefix: 'fas', + iconName: 'glass-martini', + icon: [512, 512, [], "f000", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6z"] +}; +var faGlassMartiniAlt = { + prefix: 'fas', + iconName: 'glass-martini-alt', + icon: [512, 512, [], "f57b", "M502.05 57.6C523.3 36.34 508.25 0 478.2 0H33.8C3.75 0-11.3 36.34 9.95 57.6L224 271.64V464h-56c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h240c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40h-56V271.64L502.05 57.6zM443.77 48l-48 48H116.24l-48-48h375.53z"] +}; +var faGlassWhiskey = { + prefix: 'fas', + iconName: 'glass-whiskey', + icon: [512, 512, [], "f7a0", "M480 32H32C12.5 32-2.4 49.2.3 68.5l56 356.5c4.5 31.5 31.5 54.9 63.4 54.9h273c31.8 0 58.9-23.4 63.4-54.9l55.6-356.5C514.4 49.2 499.5 32 480 32zm-37.4 64l-30 192h-313L69.4 96h373.2z"] +}; +var faGlasses = { + prefix: 'fas', + iconName: 'glasses', + icon: [576, 512, [], "f530", "M574.1 280.37L528.75 98.66c-5.91-23.7-21.59-44.05-43-55.81-21.44-11.73-46.97-14.11-70.19-6.33l-15.25 5.08c-8.39 2.79-12.92 11.86-10.12 20.24l5.06 15.18c2.79 8.38 11.85 12.91 20.23 10.12l13.18-4.39c10.87-3.62 23-3.57 33.16 1.73 10.29 5.37 17.57 14.56 20.37 25.82l38.46 153.82c-22.19-6.81-49.79-12.46-81.2-12.46-34.77 0-73.98 7.02-114.85 26.74h-73.18c-40.87-19.74-80.08-26.75-114.86-26.75-31.42 0-59.02 5.65-81.21 12.46l38.46-153.83c2.79-11.25 10.09-20.45 20.38-25.81 10.16-5.3 22.28-5.35 33.15-1.73l13.17 4.39c8.38 2.79 17.44-1.74 20.23-10.12l5.06-15.18c2.8-8.38-1.73-17.45-10.12-20.24l-15.25-5.08c-23.22-7.78-48.75-5.41-70.19 6.33-21.41 11.77-37.09 32.11-43 55.8L1.9 280.37A64.218 64.218 0 0 0 0 295.86v70.25C0 429.01 51.58 480 115.2 480h37.12c60.28 0 110.37-45.94 114.88-105.37l2.93-38.63h35.75l2.93 38.63C313.31 434.06 363.4 480 423.68 480h37.12c63.62 0 115.2-50.99 115.2-113.88v-70.25c0-5.23-.64-10.43-1.9-15.5zm-370.72 89.42c-1.97 25.91-24.4 46.21-51.06 46.21H115.2C86.97 416 64 393.62 64 366.11v-37.54c18.12-6.49 43.42-12.92 72.58-12.92 23.86 0 47.26 4.33 69.93 12.92l-3.13 41.22zM512 366.12c0 27.51-22.97 49.88-51.2 49.88h-37.12c-26.67 0-49.1-20.3-51.06-46.21l-3.13-41.22c22.67-8.59 46.08-12.92 69.95-12.92 29.12 0 54.43 6.44 72.55 12.93v37.54z"] +}; +var faGlobe = { + prefix: 'fas', + iconName: 'globe', + icon: [496, 512, [], "f0ac", "M336.5 160C322 70.7 287.8 8 248 8s-74 62.7-88.5 152h177zM152 256c0 22.2 1.2 43.5 3.3 64h185.3c2.1-20.5 3.3-41.8 3.3-64s-1.2-43.5-3.3-64H155.3c-2.1 20.5-3.3 41.8-3.3 64zm324.7-96c-28.6-67.9-86.5-120.4-158-141.6 24.4 33.8 41.2 84.7 50 141.6h108zM177.2 18.4C105.8 39.6 47.8 92.1 19.3 160h108c8.7-56.9 25.5-107.8 49.9-141.6zM487.4 192H372.7c2.1 21 3.3 42.5 3.3 64s-1.2 43-3.3 64h114.6c5.5-20.5 8.6-41.8 8.6-64s-3.1-43.5-8.5-64zM120 256c0-21.5 1.2-43 3.3-64H8.6C3.2 212.5 0 233.8 0 256s3.2 43.5 8.6 64h114.6c-2-21-3.2-42.5-3.2-64zm39.5 96c14.5 89.3 48.7 152 88.5 152s74-62.7 88.5-152h-177zm159.3 141.6c71.4-21.2 129.4-73.7 158-141.6h-108c-8.8 56.9-25.6 107.8-50 141.6zM19.3 352c28.6 67.9 86.5 120.4 158 141.6-24.4-33.8-41.2-84.7-50-141.6h-108z"] +}; +var faGlobeAfrica = { + prefix: 'fas', + iconName: 'globe-africa', + icon: [496, 512, [], "f57c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm160 215.5v6.93c0 5.87-3.32 11.24-8.57 13.86l-15.39 7.7a15.485 15.485 0 0 1-15.53-.97l-18.21-12.14a15.52 15.52 0 0 0-13.5-1.81l-2.65.88c-9.7 3.23-13.66 14.79-7.99 23.3l13.24 19.86c2.87 4.31 7.71 6.9 12.89 6.9h8.21c8.56 0 15.5 6.94 15.5 15.5v11.34c0 3.35-1.09 6.62-3.1 9.3l-18.74 24.98c-1.42 1.9-2.39 4.1-2.83 6.43l-4.3 22.83c-.62 3.29-2.29 6.29-4.76 8.56a159.608 159.608 0 0 0-25 29.16l-13.03 19.55a27.756 27.756 0 0 1-23.09 12.36c-10.51 0-20.12-5.94-24.82-15.34a78.902 78.902 0 0 1-8.33-35.29V367.5c0-8.56-6.94-15.5-15.5-15.5h-25.88c-14.49 0-28.38-5.76-38.63-16a54.659 54.659 0 0 1-16-38.63v-14.06c0-17.19 8.1-33.38 21.85-43.7l27.58-20.69a54.663 54.663 0 0 1 32.78-10.93h.89c8.48 0 16.85 1.97 24.43 5.77l14.72 7.36c3.68 1.84 7.93 2.14 11.83.84l47.31-15.77c6.33-2.11 10.6-8.03 10.6-14.7 0-8.56-6.94-15.5-15.5-15.5h-10.09c-4.11 0-8.05-1.63-10.96-4.54l-6.92-6.92a15.493 15.493 0 0 0-10.96-4.54H199.5c-8.56 0-15.5-6.94-15.5-15.5v-4.4c0-7.11 4.84-13.31 11.74-15.04l14.45-3.61c3.74-.94 7-3.23 9.14-6.44l8.08-12.11c2.87-4.31 7.71-6.9 12.89-6.9h24.21c8.56 0 15.5-6.94 15.5-15.5v-21.7C359.23 71.63 422.86 131.02 441.93 208H423.5c-8.56 0-15.5 6.94-15.5 15.5z"] +}; +var faGlobeAmericas = { + prefix: 'fas', + iconName: 'globe-americas', + icon: [496, 512, [], "f57d", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z"] +}; +var faGlobeAsia = { + prefix: 'fas', + iconName: 'globe-asia', + icon: [496, 512, [], "f57e", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm-11.34 240.23c-2.89 4.82-8.1 7.77-13.72 7.77h-.31c-4.24 0-8.31 1.69-11.31 4.69l-5.66 5.66c-3.12 3.12-3.12 8.19 0 11.31l5.66 5.66c3 3 4.69 7.07 4.69 11.31V304c0 8.84-7.16 16-16 16h-6.11c-6.06 0-11.6-3.42-14.31-8.85l-22.62-45.23c-2.44-4.88-8.95-5.94-12.81-2.08l-19.47 19.46c-3 3-7.07 4.69-11.31 4.69H50.81C49.12 277.55 48 266.92 48 256c0-110.28 89.72-200 200-200 21.51 0 42.2 3.51 61.63 9.82l-50.16 38.53c-5.11 3.41-4.63 11.06.86 13.81l10.83 5.41c5.42 2.71 8.84 8.25 8.84 14.31V216c0 4.42-3.58 8-8 8h-3.06c-3.03 0-5.8-1.71-7.15-4.42-1.56-3.12-5.96-3.29-7.76-.3l-17.37 28.95zM408 358.43c0 4.24-1.69 8.31-4.69 11.31l-9.57 9.57c-3 3-7.07 4.69-11.31 4.69h-15.16c-4.24 0-8.31-1.69-11.31-4.69l-13.01-13.01a26.767 26.767 0 0 0-25.42-7.04l-21.27 5.32c-1.27.32-2.57.48-3.88.48h-10.34c-4.24 0-8.31-1.69-11.31-4.69l-11.91-11.91a8.008 8.008 0 0 1-2.34-5.66v-10.2c0-3.27 1.99-6.21 5.03-7.43l39.34-15.74c1.98-.79 3.86-1.82 5.59-3.05l23.71-16.89a7.978 7.978 0 0 1 4.64-1.48h12.09c3.23 0 6.15 1.94 7.39 4.93l5.35 12.85a4 4 0 0 0 3.69 2.46h3.8c1.78 0 3.35-1.18 3.84-2.88l4.2-14.47c.5-1.71 2.06-2.88 3.84-2.88h6.06c2.21 0 4 1.79 4 4v12.93c0 2.12.84 4.16 2.34 5.66l11.91 11.91c3 3 4.69 7.07 4.69 11.31v24.6z"] +}; +var faGlobeEurope = { + prefix: 'fas', + iconName: 'globe-europe', + icon: [496, 512, [], "f7a2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm200 248c0 22.5-3.9 44.2-10.8 64.4h-20.3c-4.3 0-8.4-1.7-11.4-4.8l-32-32.6c-4.5-4.6-4.5-12.1.1-16.7l12.5-12.5v-8.7c0-3-1.2-5.9-3.3-8l-9.4-9.4c-2.1-2.1-5-3.3-8-3.3h-16c-6.2 0-11.3-5.1-11.3-11.3 0-3 1.2-5.9 3.3-8l9.4-9.4c2.1-2.1 5-3.3 8-3.3h32c6.2 0 11.3-5.1 11.3-11.3v-9.4c0-6.2-5.1-11.3-11.3-11.3h-36.7c-8.8 0-16 7.2-16 16v4.5c0 6.9-4.4 13-10.9 15.2l-31.6 10.5c-3.3 1.1-5.5 4.1-5.5 7.6v2.2c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8s-3.6-8-8-8H247c-3 0-5.8 1.7-7.2 4.4l-9.4 18.7c-2.7 5.4-8.2 8.8-14.3 8.8H194c-8.8 0-16-7.2-16-16V199c0-4.2 1.7-8.3 4.7-11.3l20.1-20.1c4.6-4.6 7.2-10.9 7.2-17.5 0-3.4 2.2-6.5 5.5-7.6l40-13.3c1.7-.6 3.2-1.5 4.4-2.7l26.8-26.8c2.1-2.1 3.3-5 3.3-8 0-6.2-5.1-11.3-11.3-11.3H258l-16 16v8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-20c0-2.5 1.2-4.9 3.2-6.4l28.9-21.7c1.9-.1 3.8-.3 5.7-.3C358.3 56 448 145.7 448 256zM130.1 149.1c0-3 1.2-5.9 3.3-8l25.4-25.4c2.1-2.1 5-3.3 8-3.3 6.2 0 11.3 5.1 11.3 11.3v16c0 3-1.2 5.9-3.3 8l-9.4 9.4c-2.1 2.1-5 3.3-8 3.3h-16c-6.2 0-11.3-5.1-11.3-11.3zm128 306.4v-7.1c0-8.8-7.2-16-16-16h-20.2c-10.8 0-26.7-5.3-35.4-11.8l-22.2-16.7c-11.5-8.6-18.2-22.1-18.2-36.4v-23.9c0-16 8.4-30.8 22.1-39l42.9-25.7c7.1-4.2 15.2-6.5 23.4-6.5h31.2c10.9 0 21.4 3.9 29.6 10.9l43.2 37.1h18.3c8.5 0 16.6 3.4 22.6 9.4l17.3 17.3c3.4 3.4 8.1 5.3 12.9 5.3H423c-32.4 58.9-93.8 99.5-164.9 103.1z"] +}; +var faGolfBall = { + prefix: 'fas', + iconName: 'golf-ball', + icon: [416, 512, [], "f450", "M96 416h224c0 17.7-14.3 32-32 32h-16c-17.7 0-32 14.3-32 32v20c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-20c0-17.7-14.3-32-32-32h-16c-17.7 0-32-14.3-32-32zm320-208c0 74.2-39 139.2-97.5 176h-221C39 347.2 0 282.2 0 208 0 93.1 93.1 0 208 0s208 93.1 208 208zm-180.1 43.9c18.3 0 33.1-14.8 33.1-33.1 0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1zm49.1 46.9c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1zm64-64c0-14.4-9.3-26.3-22.1-30.9 9.6 26.8-15.6 51.3-41.9 41.9 4.6 12.8 16.5 22.1 30.9 22.1 18.3 0 33.1-14.9 33.1-33.1z"] +}; +var faGopuram = { + prefix: 'fas', + iconName: 'gopuram', + icon: [512, 512, [], "f664", "M496 352h-16V240c0-8.8-7.2-16-16-16h-16v-80c0-8.8-7.2-16-16-16h-16V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16s-16 7.2-16 16v16h-64V16c0-8.8-7.2-16-16-16S96 7.2 96 16v112H80c-8.8 0-16 7.2-16 16v80H48c-8.8 0-16 7.2-16 16v112H16c-8.8 0-16 7.2-16 16v128c0 8.8 7.2 16 16 16h80V352h32V224h32v-96h32v96h-32v128h-32v160h80v-80c0-8.8 7.2-16 16-16h64c8.8 0 16 7.2 16 16v80h80V352h-32V224h-32v-96h32v96h32v128h32v160h80c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zM232 176c0-8.8 7.2-16 16-16h16c8.8 0 16 7.2 16 16v48h-48zm56 176h-64v-64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16z"] +}; +var faGraduationCap = { + prefix: 'fas', + iconName: 'graduation-cap', + icon: [640, 512, [], "f19d", "M622.34 153.2L343.4 67.5c-15.2-4.67-31.6-4.67-46.79 0L17.66 153.2c-23.54 7.23-23.54 38.36 0 45.59l48.63 14.94c-10.67 13.19-17.23 29.28-17.88 46.9C38.78 266.15 32 276.11 32 288c0 10.78 5.68 19.85 13.86 25.65L20.33 428.53C18.11 438.52 25.71 448 35.94 448h56.11c10.24 0 17.84-9.48 15.62-19.47L82.14 313.65C90.32 307.85 96 298.78 96 288c0-11.57-6.47-21.25-15.66-26.87.76-15.02 8.44-28.3 20.69-36.72L296.6 284.5c9.06 2.78 26.44 6.25 46.79 0l278.95-85.7c23.55-7.24 23.55-38.36 0-45.6zM352.79 315.09c-28.53 8.76-52.84 3.92-65.59 0l-145.02-44.55L128 384c0 35.35 85.96 64 192 64s192-28.65 192-64l-14.18-113.47-145.03 44.56z"] +}; +var faGreaterThan = { + prefix: 'fas', + iconName: 'greater-than', + icon: [384, 512, [], "f531", "M365.52 209.85L59.22 67.01c-16.06-7.49-35.15-.54-42.64 15.52L3.01 111.61c-7.49 16.06-.54 35.15 15.52 42.64L236.96 256.1 18.49 357.99C2.47 365.46-4.46 384.5 3.01 400.52l13.52 29C24 445.54 43.04 452.47 59.06 445l306.47-142.91a32.003 32.003 0 0 0 18.48-29v-34.23c-.01-12.45-7.21-23.76-18.49-29.01z"] +}; +var faGreaterThanEqual = { + prefix: 'fas', + iconName: 'greater-than-equal', + icon: [448, 512, [], "f532", "M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"] +}; +var faGrimace = { + prefix: 'fas', + iconName: 'grimace', + icon: [496, 512, [], "f57f", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM144 400h-8c-17.7 0-32-14.3-32-32v-8h40v40zm0-56h-40v-8c0-17.7 14.3-32 32-32h8v40zm-8-136c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm72 192h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm64 56h-48v-40h48v40zm0-56h-48v-40h48v40zm-8-104c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm64 128c0 17.7-14.3 32-32 32h-8v-40h40v8zm0-24h-40v-40h8c17.7 0 32 14.3 32 32v8z"] +}; +var faGrin = { + prefix: 'fas', + iconName: 'grin', + icon: [496, 512, [], "f580", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm80 256c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"] +}; +var faGrinAlt = { + prefix: 'fas', + iconName: 'grin-alt', + icon: [496, 512, [], "f581", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm63.7 128.7c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zm-160 0c7.6-11.4 24.7-11.7 32.7 0 12.4 18.4 15.1 36.9 15.7 55.3-.5 18.4-3.3 36.9-15.7 55.3-7.6 11.4-24.7 11.7-32.7 0-12.4-18.4-15.1-36.9-15.7-55.3.5-18.4 3.3-36.9 15.7-55.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"] +}; +var faGrinBeam = { + prefix: 'fas', + iconName: 'grin-beam', + icon: [496, 512, [], "f582", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 144c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"] +}; +var faGrinBeamSweat = { + prefix: 'fas', + iconName: 'grin-beam-sweat', + icon: [504, 512, [], "f583", "M456 128c26.5 0 48-21 48-47 0-20-28.5-60.4-41.6-77.8-3.2-4.3-9.6-4.3-12.8 0C436.5 20.6 408 61 408 81c0 26 21.5 47 48 47zm0 32c-44.1 0-80-35.4-80-79 0-4.4.3-14.2 8.1-32.2C345 23.1 298.3 8 248 8 111 8 0 119 0 256s111 248 248 248 248-111 248-248c0-35.1-7.4-68.4-20.5-98.6-6.3 1.5-12.7 2.6-19.5 2.6zm-128-8c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"] +}; +var faGrinHearts = { + prefix: 'fas', + iconName: 'grin-hearts', + icon: [496, 512, [], "f584", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM90.4 183.6c6.7-17.6 26.7-26.7 44.9-21.9l7.1 1.9 2-7.1c5-18.1 22.8-30.9 41.5-27.9 21.4 3.4 34.4 24.2 28.8 44.5L195.3 243c-1.2 4.5-5.9 7.2-10.5 6l-70.2-18.2c-20.4-5.4-31.9-27-24.2-47.2zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm133.4-201.3l-70.2 18.2c-4.5 1.2-9.2-1.5-10.5-6L281.3 173c-5.6-20.3 7.4-41.1 28.8-44.5 18.6-3 36.4 9.8 41.5 27.9l2 7.1 7.1-1.9c18.2-4.7 38.2 4.3 44.9 21.9 7.7 20.3-3.8 41.9-24.2 47.2z"] +}; +var faGrinSquint = { + prefix: 'fas', + iconName: 'grin-squint', + icon: [496, 512, [], "f585", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.9 9.4-21.6 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.2 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"] +}; +var faGrinSquintTears = { + prefix: 'fas', + iconName: 'grin-squint-tears', + icon: [512, 512, [], "f586", "M409.6 111.9c22.6-3.2 73.5-12 88.3-26.8 19.2-19.2 18.9-50.6-.7-70.2S446-5 426.9 14.2c-14.8 14.8-23.5 65.7-26.8 88.3-.8 5.5 3.9 10.2 9.5 9.4zM102.4 400.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm311.7-256.5c-33 3.9-48.6-25.1-45.7-45.7 3.4-24 7.4-42.1 11.5-56.5C285.1-13.4 161.8-.5 80.6 80.6-.5 161.7-13.4 285 41.4 379.9c14.4-4.1 32.4-8 56.5-11.5 33.2-3.9 48.6 25.2 45.7 45.7-3.4 24-7.4 42.1-11.5 56.5 94.8 54.8 218.1 41.9 299.3-39.2s94-204.4 39.2-299.3c-14.4 4.1-32.5 8-56.5 11.5zM255.7 106c3.3-13.2 22.4-11.5 23.6 1.8l4.8 52.3 52.3 4.8c13.4 1.2 14.9 20.3 1.8 23.6l-90.5 22.6c-8.9 2.2-16.7-5.9-14.5-14.5l22.5-90.6zm-90.9 230.3L160 284l-52.3-4.8c-13.4-1.2-14.9-20.3-1.8-23.6l90.5-22.6c8.8-2.2 16.7 5.8 14.5 14.5L188.3 338c-3.1 13.2-22.2 11.7-23.5-1.7zm215.7 44.2c-29.3 29.3-75.7 50.4-116.7 50.4-18.9 0-36.6-4.5-51-14.7-9.8-6.9-8.7-21.8 2-27.2 28.3-14.6 63.9-42.4 97.8-76.3s61.7-69.6 76.3-97.8c5.4-10.5 20.2-11.9 27.3-2 32.3 45.3 7.1 124.7-35.7 167.6z"] +}; +var faGrinStars = { + prefix: 'fas', + iconName: 'grin-stars', + icon: [496, 512, [], "f587", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM94.6 168.9l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.2 1 8.9 8.6 4.3 13.2l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L152 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.6-4.7-1.9-12.3 4.3-13.3zM248 432c-60.6 0-134.5-38.3-143.8-93.3-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3zm157.7-249.9l-25.4 24.6 6 34.9c1 6.2-5.3 11-11 7.9L344 233.3l-31.3 16.3c-5.7 3.1-12-1.7-11-7.9l6-34.9-25.4-24.6c-4.5-4.6-1.9-12.2 4.3-13.2l34.9-5 15.5-31.6c2.9-5.8 11-5.8 13.9 0l15.5 31.6 34.9 5c6.3.9 9 8.5 4.4 13.1z"] +}; +var faGrinTears = { + prefix: 'fas', + iconName: 'grin-tears', + icon: [640, 512, [], "f588", "M102.4 256.1c-22.6 3.2-73.5 12-88.3 26.8-19.1 19.1-18.8 50.6.8 70.2s51 19.9 70.2.7c14.8-14.8 23.5-65.7 26.8-88.3.8-5.5-3.9-10.2-9.5-9.4zm523.4 26.8c-14.8-14.8-65.7-23.5-88.3-26.8-5.5-.8-10.3 3.9-9.5 9.5 3.2 22.6 12 73.5 26.8 88.3 19.2 19.2 50.6 18.9 70.2-.7s20-51.2.8-70.3zm-129.4-12.8c-3.8-26.6 19.1-49.5 45.7-45.7 8.9 1.3 16.8 2.7 24.3 4.1C552.7 104.5 447.7 8 320 8S87.3 104.5 73.6 228.5c7.5-1.4 15.4-2.8 24.3-4.1 33.2-3.9 48.6 25.3 45.7 45.7-11.8 82.3-29.9 100.4-35.8 106.4-.9.9-2 1.6-3 2.5 42.7 74.6 123 125 215.2 125s172.5-50.4 215.2-125.1c-1-.9-2.1-1.5-3-2.5-5.9-5.9-24-24-35.8-106.3zM400 152c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm-160 0c23.8 0 52.7 29.3 56 71.4.7 8.6-10.8 12-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.1-42.1 32-71.4 55.8-71.4zm80 280c-60.6 0-134.5-38.3-143.8-93.3-2-11.7 9.2-21.6 20.7-17.9C227.1 330.5 272 336 320 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-9.3 55-83.2 93.3-143.8 93.3z"] +}; +var faGrinTongue = { + prefix: 'fas', + iconName: 'grin-tongue', + icon: [496, 512, [], "f589", "M248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.6 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-34.9 134.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"] +}; +var faGrinTongueSquint = { + prefix: 'fas', + iconName: 'grin-tongue-squint', + icon: [496, 512, [], "f58a", "M293.1 374.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.2-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.4-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-33.8 210.3l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.7 4.7 7.7 15.9 0 20.6zm163 30c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.8-4.7-7.8-15.9 0-20.6l80-48c11.7-6.9 23.9 7.7 15.4 18L343.6 208l33.6 40.3z"] +}; +var faGrinTongueWink = { + prefix: 'fas', + iconName: 'grin-tongue-wink', + icon: [496, 512, [], "f58b", "M344 184c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zM248 8C111 8 0 119 0 256c0 106.3 67 196.7 161 232-5.6-12.2-9-25.7-9-40v-45.5c-24.7-16.2-43.5-38.1-47.8-63.8-2-11.8 9.3-21.5 20.7-17.9C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.5-3.7 22.6 6.1 20.7 17.9-4.3 25.7-23.1 47.6-47.8 63.8V448c0 14.3-3.4 27.8-9 40 94-35.3 161-125.7 161-232C496 119 385 8 248 8zm-56 225l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L112 233c-8.5 7.4-21.6.3-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c1.6 11.1-11.6 18.2-20 10.8zm152 39c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm-50.9 102.6c-14.4-6.5-31.1 2.2-34.6 17.6l-1.8 7.8c-2.1 9.2-15.2 9.2-17.3 0l-1.8-7.8c-3.5-15.4-20.2-24.1-34.6-17.6-.9.4.3-.2-18.9 9.4v63c0 35.2 28 64.5 63.1 64.9 35.7.5 64.9-28.4 64.9-64v-64c-19.5-9.6-18.2-8.9-19-9.3z"] +}; +var faGrinWink = { + prefix: 'fas', + iconName: 'grin-wink', + icon: [496, 512, [], "f58c", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm168 25l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.6 11-11.5 18.2-20 10.8zm-243.1 87.8C155.1 330.5 200 336 248 336s92.9-5.5 123.1-15.2c11.3-3.7 22.6 6 20.7 17.9-9.2 55-83.2 93.3-143.8 93.3s-134.5-38.3-143.8-93.3c-2-11.9 9.3-21.6 20.7-17.9z"] +}; +var faGripHorizontal = { + prefix: 'fas', + iconName: 'grip-horizontal', + icon: [448, 512, [], "f58d", "M96 288H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM96 96H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm160 0h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"] +}; +var faGripLines = { + prefix: 'fas', + iconName: 'grip-lines', + icon: [512, 512, [], "f7a4", "M496 288H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-128H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16z"] +}; +var faGripLinesVertical = { + prefix: 'fas', + iconName: 'grip-lines-vertical', + icon: [256, 512, [], "f7a5", "M96 496V16c0-8.8-7.2-16-16-16H48c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16zm128 0V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16z"] +}; +var faGripVertical = { + prefix: 'fas', + iconName: 'grip-vertical', + icon: [320, 512, [], "f58e", "M96 32H32C14.33 32 0 46.33 0 64v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160H32c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zM288 32h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32zm0 160h-64c-17.67 0-32 14.33-32 32v64c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-64c0-17.67-14.33-32-32-32z"] +}; +var faGuitar = { + prefix: 'fas', + iconName: 'guitar', + icon: [512, 512, [], "f7a6", "M502.63 39L473 9.37a32 32 0 0 0-45.26 0L381.46 55.7a35.14 35.14 0 0 0-8.53 13.79L360.77 106l-76.26 76.26c-12.16-8.76-25.5-15.74-40.1-19.14-33.45-7.78-67-.88-89.88 22a82.45 82.45 0 0 0-20.24 33.47c-6 18.56-23.21 32.69-42.15 34.46-23.7 2.27-45.73 11.45-62.61 28.44C-16.11 327-7.9 409 47.58 464.45S185 528 230.56 482.52c17-16.88 26.16-38.9 28.45-62.71 1.76-18.85 15.89-36.13 34.43-42.14a82.6 82.6 0 0 0 33.48-20.25c22.87-22.88 29.74-56.36 22-89.75-3.39-14.64-10.37-28-19.16-40.2L406 151.23l36.48-12.16a35.14 35.14 0 0 0 13.79-8.53l46.33-46.32a32 32 0 0 0 .03-45.22zM208 352a48 48 0 1 1 48-48 48 48 0 0 1-48 48z"] +}; +var faHSquare = { + prefix: 'fas', + iconName: 'h-square', + icon: [448, 512, [], "f0fd", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zm-112 48h-32c-8.837 0-16 7.163-16 16v80H160v-80c0-8.837-7.163-16-16-16h-32c-8.837 0-16 7.163-16 16v224c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16v-80h128v80c0 8.837 7.163 16 16 16h32c8.837 0 16-7.163 16-16V144c0-8.837-7.163-16-16-16z"] +}; +var faHamburger = { + prefix: 'fas', + iconName: 'hamburger', + icon: [512, 512, [], "f805", "M464 256H48a48 48 0 0 0 0 96h416a48 48 0 0 0 0-96zm16 128H32a16 16 0 0 0-16 16v16a64 64 0 0 0 64 64h352a64 64 0 0 0 64-64v-16a16 16 0 0 0-16-16zM58.64 224h394.72c34.57 0 54.62-43.9 34.82-75.88C448 83.2 359.55 32.1 256 32c-103.54.1-192 51.2-232.18 116.11C4 180.09 24.07 224 58.64 224zM384 112a16 16 0 1 1-16 16 16 16 0 0 1 16-16zM256 80a16 16 0 1 1-16 16 16 16 0 0 1 16-16zm-128 32a16 16 0 1 1-16 16 16 16 0 0 1 16-16z"] +}; +var faHammer = { + prefix: 'fas', + iconName: 'hammer', + icon: [576, 512, [], "f6e3", "M571.31 193.94l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31-28.9-28.9c5.63-21.31.36-44.9-16.35-61.61l-45.25-45.25c-62.48-62.48-163.79-62.48-226.28 0l90.51 45.25v18.75c0 16.97 6.74 33.25 18.75 45.25l49.14 49.14c16.71 16.71 40.3 21.98 61.61 16.35l28.9 28.9-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l90.51-90.51c6.23-6.24 6.23-16.37-.02-22.62zm-286.72-15.2c-3.7-3.7-6.84-7.79-9.85-11.95L19.64 404.96c-25.57 23.88-26.26 64.19-1.53 88.93s65.05 24.05 88.93-1.53l238.13-255.07c-3.96-2.91-7.9-5.87-11.44-9.41l-49.14-49.14z"] +}; +var faHamsa = { + prefix: 'fas', + iconName: 'hamsa', + icon: [512, 512, [], "f665", "M509.34 307.25C504.28 295.56 492.75 288 480 288h-64V80c0-22-18-40-40-40s-40 18-40 40v134c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V40c0-22-18-40-40-40s-40 18-40 40v174c0 5.52-4.48 10-10 10h-20c-5.52 0-10-4.48-10-10V80c0-22-18-40-40-40S96 58 96 80v208H32c-12.75 0-24.28 7.56-29.34 19.25a31.966 31.966 0 0 0 5.94 34.58l102.69 110.03C146.97 490.08 199.69 512 256 512s109.03-21.92 144.72-60.14L503.4 341.83a31.966 31.966 0 0 0 5.94-34.58zM256 416c-53.02 0-96-64-96-64s42.98-64 96-64 96 64 96 64-42.98 64-96 64zm0-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"] +}; +var faHandHolding = { + prefix: 'fas', + iconName: 'hand-holding', + icon: [576, 512, [], "f4bd", "M565.3 328.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"] +}; +var faHandHoldingHeart = { + prefix: 'fas', + iconName: 'hand-holding-heart', + icon: [576, 512, [], "f4be", "M275.3 250.5c7 7.4 18.4 7.4 25.5 0l108.9-114.2c31.6-33.2 29.8-88.2-5.6-118.8-30.8-26.7-76.7-21.9-104.9 7.7L288 36.9l-11.1-11.6C248.7-4.4 202.8-9.2 172 17.5c-35.3 30.6-37.2 85.6-5.6 118.8l108.9 114.2zm290 77.6c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"] +}; +var faHandHoldingMedical = { + prefix: 'fas', + iconName: 'hand-holding-medical', + icon: [576, 512, [], "e05c", "M159.88,175.82h64v64a16,16,0,0,0,16,16h64a16,16,0,0,0,16-16v-64h64a16,16,0,0,0,16-16v-64a16,16,0,0,0-16-16h-64v-64a16,16,0,0,0-16-16h-64a16,16,0,0,0-16,16v64h-64a16,16,0,0,0-16,16v64A16,16,0,0,0,159.88,175.82ZM568.07,336.13a39.91,39.91,0,0,0-55.93-8.47L392.47,415.84H271.86a16,16,0,0,1,0-32H350.1c16,0,30.75-10.87,33.37-26.61a32.06,32.06,0,0,0-31.62-37.38h-160a117.7,117.7,0,0,0-74.12,26.25l-46.5,37.74H15.87a16.11,16.11,0,0,0-16,16v96a16.11,16.11,0,0,0,16,16h347a104.8,104.8,0,0,0,61.7-20.27L559.6,392A40,40,0,0,0,568.07,336.13Z"] +}; +var faHandHoldingUsd = { + prefix: 'fas', + iconName: 'hand-holding-usd', + icon: [576, 512, [], "f4c0", "M271.06,144.3l54.27,14.3a8.59,8.59,0,0,1,6.63,8.1c0,4.6-4.09,8.4-9.12,8.4h-35.6a30,30,0,0,1-11.19-2.2c-5.24-2.2-11.28-1.7-15.3,2l-19,17.5a11.68,11.68,0,0,0-2.25,2.66,11.42,11.42,0,0,0,3.88,15.74,83.77,83.77,0,0,0,34.51,11.5V240c0,8.8,7.83,16,17.37,16h17.37c9.55,0,17.38-7.2,17.38-16V222.4c32.93-3.6,57.84-31,53.5-63-3.15-23-22.46-41.3-46.56-47.7L282.68,97.4a8.59,8.59,0,0,1-6.63-8.1c0-4.6,4.09-8.4,9.12-8.4h35.6A30,30,0,0,1,332,83.1c5.23,2.2,11.28,1.7,15.3-2l19-17.5A11.31,11.31,0,0,0,368.47,61a11.43,11.43,0,0,0-3.84-15.78,83.82,83.82,0,0,0-34.52-11.5V16c0-8.8-7.82-16-17.37-16H295.37C285.82,0,278,7.2,278,16V33.6c-32.89,3.6-57.85,31-53.51,63C227.63,119.6,247,137.9,271.06,144.3ZM565.27,328.1c-11.8-10.7-30.2-10-42.6,0L430.27,402a63.64,63.64,0,0,1-40,14H272a16,16,0,0,1,0-32h78.29c15.9,0,30.71-10.9,33.25-26.6a31.2,31.2,0,0,0,.46-5.46A32,32,0,0,0,352,320H192a117.66,117.66,0,0,0-74.1,26.29L71.4,384H16A16,16,0,0,0,0,400v96a16,16,0,0,0,16,16H372.77a64,64,0,0,0,40-14L564,377a32,32,0,0,0,1.28-48.9Z"] +}; +var faHandHoldingWater = { + prefix: 'fas', + iconName: 'hand-holding-water', + icon: [576, 512, [], "f4c1", "M288 256c53 0 96-42.1 96-94 0-40-57.1-120.7-83.2-155.6-6.4-8.5-19.2-8.5-25.6 0C249.1 41.3 192 122 192 162c0 51.9 43 94 96 94zm277.3 72.1c-11.8-10.7-30.2-10-42.6 0L430.3 402c-11.3 9.1-25.4 14-40 14H272c-8.8 0-16-7.2-16-16s7.2-16 16-16h78.3c15.9 0 30.7-10.9 33.3-26.6 3.3-20-12.1-37.4-31.6-37.4H192c-27 0-53.1 9.3-74.1 26.3L71.4 384H16c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16h356.8c14.5 0 28.6-4.9 40-14L564 377c15.2-12.1 16.4-35.3 1.3-48.9z"] +}; +var faHandLizard = { + prefix: 'fas', + iconName: 'hand-lizard', + icon: [576, 512, [], "f258", "M384 480h192V363.778a95.998 95.998 0 0 0-14.833-51.263L398.127 54.368A48 48 0 0 0 357.544 32H24C10.745 32 0 42.745 0 56v16c0 30.928 25.072 56 56 56h229.981c12.844 0 21.556 13.067 16.615 24.923l-21.41 51.385A32 32 0 0 1 251.648 224H128c-35.346 0-64 28.654-64 64v8c0 13.255 10.745 24 24 24h147.406a47.995 47.995 0 0 1 25.692 7.455l111.748 70.811A24.001 24.001 0 0 1 384 418.539V480z"] +}; +var faHandMiddleFinger = { + prefix: 'fas', + iconName: 'hand-middle-finger', + icon: [512, 512, [], "f806", "M479.93 317.12a37.33 37.33 0 0 0-28.28-36.19L416 272v-49.59c0-11.44-9.69-21.29-23.15-23.54l-38.4-6.4C336.63 189.5 320 200.86 320 216v32a8 8 0 0 1-16 0V50c0-26.28-20.25-49.2-46.52-50A48 48 0 0 0 208 48v200a8 8 0 0 1-16 0v-32c0-15.15-16.63-26.51-34.45-23.54l-30.68 5.12c-18 3-30.87 16.12-30.87 31.38V376a8 8 0 0 1-16 0v-76l-27.36 15A37.34 37.34 0 0 0 32 348.4v73.47a37.31 37.31 0 0 0 10.93 26.39l30.93 30.93A112 112 0 0 0 153.05 512h215A112 112 0 0 0 480 400z"] +}; +var faHandPaper = { + prefix: 'fas', + iconName: 'hand-paper', + icon: [448, 512, [], "f256", "M408.781 128.007C386.356 127.578 368 146.36 368 168.79V256h-8V79.79c0-22.43-18.356-41.212-40.781-40.783C297.488 39.423 280 57.169 280 79v177h-8V40.79C272 18.36 253.644-.422 231.219.007 209.488.423 192 18.169 192 40v216h-8V80.79c0-22.43-18.356-41.212-40.781-40.783C121.488 40.423 104 58.169 104 80v235.992l-31.648-43.519c-12.993-17.866-38.009-21.817-55.877-8.823-17.865 12.994-21.815 38.01-8.822 55.877l125.601 172.705A48 48 0 0 0 172.073 512h197.59c22.274 0 41.622-15.324 46.724-37.006l26.508-112.66a192.011 192.011 0 0 0 5.104-43.975V168c.001-21.831-17.487-39.577-39.218-39.993z"] +}; +var faHandPeace = { + prefix: 'fas', + iconName: 'hand-peace', + icon: [448, 512, [], "f25b", "M408 216c-22.092 0-40 17.909-40 40h-8v-32c0-22.091-17.908-40-40-40s-40 17.909-40 40v32h-8V48c0-26.51-21.49-48-48-48s-48 21.49-48 48v208h-13.572L92.688 78.449C82.994 53.774 55.134 41.63 30.461 51.324 5.787 61.017-6.356 88.877 3.337 113.551l74.765 190.342-31.09 24.872c-15.381 12.306-19.515 33.978-9.741 51.081l64 112A39.998 39.998 0 0 0 136 512h240c18.562 0 34.686-12.77 38.937-30.838l32-136A39.97 39.97 0 0 0 448 336v-80c0-22.091-17.908-40-40-40z"] +}; +var faHandPointDown = { + prefix: 'fas', + iconName: 'hand-point-down', + icon: [384, 512, [], "f0a7", "M91.826 467.2V317.966c-8.248 5.841-16.558 10.57-24.918 14.153C35.098 345.752-.014 322.222 0 288c.008-18.616 10.897-32.203 29.092-40 28.286-12.122 64.329-78.648 77.323-107.534 7.956-17.857 25.479-28.453 43.845-28.464l.001-.002h171.526c11.812 0 21.897 8.596 23.703 20.269 7.25 46.837 38.483 61.76 38.315 123.731-.007 2.724.195 13.254.195 16 0 50.654-22.122 81.574-71.263 72.6-9.297 18.597-39.486 30.738-62.315 16.45-21.177 24.645-53.896 22.639-70.944 6.299V467.2c0 24.15-20.201 44.8-43.826 44.8-23.283 0-43.826-21.35-43.826-44.8zM112 72V24c0-13.255 10.745-24 24-24h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24zm212-24c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"] +}; +var faHandPointLeft = { + prefix: 'fas', + iconName: 'hand-point-left', + icon: [512, 512, [], "f0a5", "M44.8 155.826h149.234c-5.841-8.248-10.57-16.558-14.153-24.918C166.248 99.098 189.778 63.986 224 64c18.616.008 32.203 10.897 40 29.092 12.122 28.286 78.648 64.329 107.534 77.323 17.857 7.956 28.453 25.479 28.464 43.845l.002.001v171.526c0 11.812-8.596 21.897-20.269 23.703-46.837 7.25-61.76 38.483-123.731 38.315-2.724-.007-13.254.195-16 .195-50.654 0-81.574-22.122-72.6-71.263-18.597-9.297-30.738-39.486-16.45-62.315-24.645-21.177-22.639-53.896-6.299-70.944H44.8c-24.15 0-44.8-20.201-44.8-43.826 0-23.283 21.35-43.826 44.8-43.826zM440 176h48c13.255 0 24 10.745 24 24v192c0 13.255-10.745 24-24 24h-48c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24zm24 212c11.046 0 20-8.954 20-20s-8.954-20-20-20-20 8.954-20 20 8.954 20 20 20z"] +}; +var faHandPointRight = { + prefix: 'fas', + iconName: 'hand-point-right', + icon: [512, 512, [], "f0a4", "M512 199.652c0 23.625-20.65 43.826-44.8 43.826h-99.851c16.34 17.048 18.346 49.766-6.299 70.944 14.288 22.829 2.147 53.017-16.45 62.315C353.574 425.878 322.654 448 272 448c-2.746 0-13.276-.203-16-.195-61.971.168-76.894-31.065-123.731-38.315C120.596 407.683 112 397.599 112 385.786V214.261l.002-.001c.011-18.366 10.607-35.889 28.464-43.845 28.886-12.994 95.413-49.038 107.534-77.323 7.797-18.194 21.384-29.084 40-29.092 34.222-.014 57.752 35.098 44.119 66.908-3.583 8.359-8.312 16.67-14.153 24.918H467.2c23.45 0 44.8 20.543 44.8 43.826zM96 200v192c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V200c0-13.255 10.745-24 24-24h48c13.255 0 24 10.745 24 24zM68 368c0-11.046-8.954-20-20-20s-20 8.954-20 20 8.954 20 20 20 20-8.954 20-20z"] +}; +var faHandPointUp = { + prefix: 'fas', + iconName: 'hand-point-up', + icon: [384, 512, [], "f0a6", "M135.652 0c23.625 0 43.826 20.65 43.826 44.8v99.851c17.048-16.34 49.766-18.346 70.944 6.299 22.829-14.288 53.017-2.147 62.315 16.45C361.878 158.426 384 189.346 384 240c0 2.746-.203 13.276-.195 16 .168 61.971-31.065 76.894-38.315 123.731C343.683 391.404 333.599 400 321.786 400H150.261l-.001-.002c-18.366-.011-35.889-10.607-43.845-28.464C93.421 342.648 57.377 276.122 29.092 264 10.897 256.203.008 242.616 0 224c-.014-34.222 35.098-57.752 66.908-44.119 8.359 3.583 16.67 8.312 24.918 14.153V44.8c0-23.45 20.543-44.8 43.826-44.8zM136 416h192c13.255 0 24 10.745 24 24v48c0 13.255-10.745 24-24 24H136c-13.255 0-24-10.745-24-24v-48c0-13.255 10.745-24 24-24zm168 28c-11.046 0-20 8.954-20 20s8.954 20 20 20 20-8.954 20-20-8.954-20-20-20z"] +}; +var faHandPointer = { + prefix: 'fas', + iconName: 'hand-pointer', + icon: [448, 512, [], "f25a", "M448 240v96c0 3.084-.356 6.159-1.063 9.162l-32 136C410.686 499.23 394.562 512 376 512H168a40.004 40.004 0 0 1-32.35-16.473l-127.997-176c-12.993-17.866-9.043-42.883 8.822-55.876 17.867-12.994 42.884-9.043 55.877 8.823L104 315.992V40c0-22.091 17.908-40 40-40s40 17.909 40 40v200h8v-40c0-22.091 17.908-40 40-40s40 17.909 40 40v40h8v-24c0-22.091 17.908-40 40-40s40 17.909 40 40v24h8c0-22.091 17.908-40 40-40s40 17.909 40 40zm-256 80h-8v96h8v-96zm88 0h-8v96h8v-96zm88 0h-8v96h8v-96z"] +}; +var faHandRock = { + prefix: 'fas', + iconName: 'hand-rock', + icon: [512, 512, [], "f255", "M464.8 80c-26.9-.4-48.8 21.2-48.8 48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v32h-8V80.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v48h-8V96.8c0-26.3-20.9-48.3-47.2-48.8-26.9-.4-48.8 21.2-48.8 48v136l-8-7.1v-48.1c0-26.3-20.9-48.3-47.2-48.8C21.9 127.6 0 149.2 0 176v66.4c0 27.4 11.7 53.5 32.2 71.8l111.7 99.3c10.2 9.1 16.1 22.2 16.1 35.9v6.7c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24v-2.9c0-12.8 2.6-25.5 7.5-37.3l49-116.3c5-11.8 7.5-24.5 7.5-37.3V128.8c0-26.3-20.9-48.4-47.2-48.8z"] +}; +var faHandScissors = { + prefix: 'fas', + iconName: 'hand-scissors', + icon: [512, 512, [], "f257", "M216 440c0-22.092 17.909-40 40-40v-8h-32c-22.091 0-40-17.908-40-40s17.909-40 40-40h32v-8H48c-26.51 0-48-21.49-48-48s21.49-48 48-48h208v-13.572l-177.551-69.74c-24.674-9.694-36.818-37.555-27.125-62.228 9.693-24.674 37.554-36.817 62.228-27.124l190.342 74.765 24.872-31.09c12.306-15.381 33.978-19.515 51.081-9.741l112 64A40.002 40.002 0 0 1 512 168v240c0 18.562-12.77 34.686-30.838 38.937l-136 32A39.982 39.982 0 0 1 336 480h-80c-22.091 0-40-17.908-40-40z"] +}; +var faHandSparkles = { + prefix: 'fas', + iconName: 'hand-sparkles', + icon: [640, 512, [], "e05d", "M106.66,170.64l.09,0,49.55-20.65a7.32,7.32,0,0,0,3.68-6h0a7.29,7.29,0,0,0-3.68-6l-49.57-20.67-.07,0L86,67.68a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L3.7,138A7.29,7.29,0,0,0,0,144H0a7.32,7.32,0,0,0,3.68,6L53.27,170.6l.07,0L74,220.26a6.65,6.65,0,0,0,11.92,0l20.69-49.62ZM471.38,467.41l-1-.42-1-.5a38.67,38.67,0,0,1,0-69.14l1-.49,1-.43,37.49-15.63,15.63-37.48.41-1,.47-.95c3.85-7.74,10.58-13.63,18.35-17.34,0-1.33.25-2.69.27-4V144a32,32,0,0,0-64,0v72a8,8,0,0,1-8,8H456a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H360a8,8,0,0,1-8-8V32a32,32,0,0,0-64,0V216a8,8,0,0,1-8,8H264a8,8,0,0,1-8-8V64a32,32,0,0,0-64,0v241l-23.59-32.49a40,40,0,0,0-64.71,47.09L229.3,492.21A48.07,48.07,0,0,0,268.09,512H465.7c19.24,0,35.65-11.73,43.24-28.79l-.07-.17ZM349.79,339.52,320,351.93l-12.42,29.78a4,4,0,0,1-7.15,0L288,351.93l-29.79-12.41a4,4,0,0,1,0-7.16L288,319.94l12.42-29.78a4,4,0,0,1,7.15,0L320,319.94l29.79,12.42a4,4,0,0,1,0,7.16ZM640,431.91a7.28,7.28,0,0,0-3.68-6l-49.57-20.67-.07,0L566,355.63a6.66,6.66,0,0,0-11.92,0l-20.7,49.63-.05,0L483.7,426a7.28,7.28,0,0,0-3.68,6h0a7.29,7.29,0,0,0,3.68,5.95l49.57,20.67.07,0L554,508.21a6.65,6.65,0,0,0,11.92,0l20.69-49.62h0l.09,0,49.55-20.66a7.29,7.29,0,0,0,3.68-5.95h0Z"] +}; +var faHandSpock = { + prefix: 'fas', + iconName: 'hand-spock', + icon: [512, 512, [], "f259", "M510.9005,145.27027,442.604,432.09391A103.99507,103.99507,0,0,1,341.43745,512H214.074a135.96968,135.96968,0,0,1-93.18489-36.95291L12.59072,373.12723a39.992,39.992,0,0,1,54.8122-58.24988l60.59342,57.02528v0a283.24849,283.24849,0,0,0-11.6703-80.46734L73.63726,147.36011a40.00575,40.00575,0,1,1,76.71833-22.7187l37.15458,125.39477a8.33113,8.33113,0,0,0,16.05656-4.4414L153.26183,49.95406A39.99638,39.99638,0,1,1,230.73015,30.0166l56.09491,218.15825a10.42047,10.42047,0,0,0,20.30018-.501L344.80766,63.96966a40.052,40.052,0,0,1,51.30245-30.0893c19.86073,6.2998,30.86262,27.67378,26.67564,48.08487l-33.83869,164.966a7.55172,7.55172,0,0,0,14.74406,3.2666l29.3973-123.45874a39.99414,39.99414,0,1,1,77.81208,18.53121Z"] +}; +var faHands = { + prefix: 'fas', + iconName: 'hands', + icon: [640, 512, [], "f4c2", "M204.8 230.4c-10.6-14.1-30.7-17-44.8-6.4-14.1 10.6-17 30.7-6.4 44.8l38.1 50.8c4.8 6.4 4.1 15.3-1.5 20.9l-12.8 12.8c-6.7 6.7-17.6 6.2-23.6-1.1L64 244.4V96c0-17.7-14.3-32-32-32S0 78.3 0 96v218.4c0 10.9 3.7 21.5 10.5 30l104.1 134.3c5 6.5 8.4 13.9 10.4 21.7 1.8 6.9 8.1 11.6 15.3 11.6H272c8.8 0 16-7.2 16-16V384c0-27.7-9-54.6-25.6-76.8l-57.6-76.8zM608 64c-17.7 0-32 14.3-32 32v148.4l-89.8 107.8c-6 7.2-17 7.7-23.6 1.1l-12.8-12.8c-5.6-5.6-6.3-14.5-1.5-20.9l38.1-50.8c10.6-14.1 7.7-34.2-6.4-44.8-14.1-10.6-34.2-7.7-44.8 6.4l-57.6 76.8C361 329.4 352 356.3 352 384v112c0 8.8 7.2 16 16 16h131.7c7.1 0 13.5-4.7 15.3-11.6 2-7.8 5.4-15.2 10.4-21.7l104.1-134.3c6.8-8.5 10.5-19.1 10.5-30V96c0-17.7-14.3-32-32-32z"] +}; +var faHandsHelping = { + prefix: 'fas', + iconName: 'hands-helping', + icon: [640, 512, [], "f4c4", "M488 192H336v56c0 39.7-32.3 72-72 72s-72-32.3-72-72V126.4l-64.9 39C107.8 176.9 96 197.8 96 220.2v47.3l-80 46.2C.7 322.5-4.6 342.1 4.3 357.4l80 138.6c8.8 15.3 28.4 20.5 43.7 11.7L231.4 448H368c35.3 0 64-28.7 64-64h16c17.7 0 32-14.3 32-32v-64h8c13.3 0 24-10.7 24-24v-48c0-13.3-10.7-24-24-24zm147.7-37.4L555.7 16C546.9.7 527.3-4.5 512 4.3L408.6 64H306.4c-12 0-23.7 3.4-33.9 9.7L239 94.6c-9.4 5.8-15 16.1-15 27.1V248c0 22.1 17.9 40 40 40s40-17.9 40-40v-88h184c30.9 0 56 25.1 56 56v28.5l80-46.2c15.3-8.9 20.5-28.4 11.7-43.7z"] +}; +var faHandsWash = { + prefix: 'fas', + iconName: 'hands-wash', + icon: [576, 512, [], "e05e", "M496,224a48,48,0,1,0-48-48A48,48,0,0,0,496,224ZM311.47,178.45A56.77,56.77,0,0,1,328,176a56,56,0,0,1,19,3.49l15.35-48.61A24,24,0,0,0,342,99.74c-11.53-1.35-22.21,6.44-25.71,17.51l-20.9,66.17ZM93.65,386.33c.8-.19,1.54-.54,2.35-.71V359.93a156,156,0,0,1,107.06-148l73.7-22.76L310.92,81.05a24,24,0,0,0-20.33-31.11c-11.53-1.34-22.22,6.45-25.72,17.52L231.42,173.88a8,8,0,0,1-15.26-4.83L259.53,31.26A24,24,0,0,0,239.2.15C227.67-1.19,217,6.6,213.49,17.66L165.56,169.37a8,8,0,1,1-15.26-4.82l38.56-122a24,24,0,0,0-20.33-31.11C157,10,146.32,17.83,142.82,28.9l-60,189.85L80.76,168.7A24,24,0,0,0,56.9,144.55c-13.23-.05-24.72,10.54-24.9,23.86V281.14A123.69,123.69,0,0,0,93.65,386.33ZM519.1,336H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,279.84,498.71,272,487.1,272H288l47.09-17.06a24,24,0,0,0-14.18-45.88L213.19,242.31A123.88,123.88,0,0,0,128,360v25.65a79.78,79.78,0,0,1,58,108.63A118.9,118.9,0,0,0,248,512H456a24,24,0,0,0,23.54-28.76C477.35,471.84,466.71,464,455.1,464H360a8,8,0,0,1,0-16H488a24,24,0,0,0,23.54-28.76C509.35,407.84,498.71,400,487.1,400H360a8,8,0,0,1,0-16H520a24,24,0,0,0,23.54-28.76C541.35,343.84,530.71,336,519.1,336ZM416,64a32,32,0,1,0-32-32A32,32,0,0,0,416,64ZM112,416a48,48,0,1,0,48,48A48,48,0,0,0,112,416Z"] +}; +var faHandshake = { + prefix: 'fas', + iconName: 'handshake', + icon: [640, 512, [], "f2b5", "M434.7 64h-85.9c-8 0-15.7 3-21.6 8.4l-98.3 90c-.1.1-.2.3-.3.4-16.6 15.6-16.3 40.5-2.1 56 12.7 13.9 39.4 17.6 56.1 2.7.1-.1.3-.1.4-.2l79.9-73.2c6.5-5.9 16.7-5.5 22.6 1 6 6.5 5.5 16.6-1 22.6l-26.1 23.9L504 313.8c2.9 2.4 5.5 5 7.9 7.7V128l-54.6-54.6c-5.9-6-14.1-9.4-22.6-9.4zM544 128.2v223.9c0 17.7 14.3 32 32 32h64V128.2h-96zm48 223.9c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM0 384h64c17.7 0 32-14.3 32-32V128.2H0V384zm48-63.9c8.8 0 16 7.2 16 16s-7.2 16-16 16-16-7.2-16-16c0-8.9 7.2-16 16-16zm435.9 18.6L334.6 217.5l-30 27.5c-29.7 27.1-75.2 24.5-101.7-4.4-26.9-29.4-24.8-74.9 4.4-101.7L289.1 64h-83.8c-8.5 0-16.6 3.4-22.6 9.4L128 128v223.9h18.3l90.5 81.9c27.4 22.3 67.7 18.1 90-9.3l.2-.2 17.9 15.5c15.9 13 39.4 10.5 52.3-5.4l31.4-38.6 5.4 4.4c13.7 11.1 33.9 9.1 45-4.7l9.5-11.7c11.2-13.8 9.1-33.9-4.6-45.1z"] +}; +var faHandshakeAltSlash = { + prefix: 'fas', + iconName: 'handshake-alt-slash', + icon: [640, 512, [], "e05f", "M358.59,195.6,504.2,313.8a63.4,63.4,0,0,1,22.21,37.91H624a16.05,16.05,0,0,0,16-16V143.91A16,16,0,0,0,624,128H512L457.41,73.41A32,32,0,0,0,434.8,64H348.91a32,32,0,0,0-21.61,8.41l-88.12,80.68-25.69-19.85L289.09,64H205.3a32,32,0,0,0-22.6,9.41l-20.34,20.3L45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.54,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45L303.4,202.72l32.69-29.92,27-24.7a16,16,0,0,1,21.61,23.61ZM16,128A16.05,16.05,0,0,0,0,144V335.91a16,16,0,0,0,16,16H146.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L23.56,128Z"] +}; +var faHandshakeSlash = { + prefix: 'fas', + iconName: 'handshake-slash', + icon: [640, 512, [], "e060", "M0,128.21V384H64a32,32,0,0,0,32-32V184L23.83,128.21ZM48,320.1a16,16,0,1,1-16,16A16,16,0,0,1,48,320.1Zm80,31.81h18.3l90.5,81.89a64,64,0,0,0,90-9.3l.2-.2,17.91,15.5a37.16,37.16,0,0,0,52.29-5.39l8.8-10.82L128,208.72Zm416-223.7V352.1a32,32,0,0,0,32,32h64V128.21ZM592,352.1a16,16,0,1,1,16-16A16,16,0,0,1,592,352.1ZM303.33,202.67l59.58-54.57a16,16,0,0,1,21.59,23.61L358.41,195.6,504,313.8a73.08,73.08,0,0,1,7.91,7.7V128L457.3,73.41A31.76,31.76,0,0,0,434.7,64H348.8a31.93,31.93,0,0,0-21.6,8.41l-88.07,80.64-25.64-19.81L289.09,64H205.3a32,32,0,0,0-22.6,9.41L162.36,93.72,45.47,3.38A16,16,0,0,0,23,6.19L3.38,31.46A16,16,0,0,0,6.19,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.65-25.27a16,16,0,0,0-2.82-22.45Z"] +}; +var faHanukiah = { + prefix: 'fas', + iconName: 'hanukiah', + icon: [640, 512, [], "f6e6", "M232 160c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm-64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm224 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm64 0c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm88 8c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v120h32V168zm-440-8c-4.42 0-8 3.58-8 8v120h32V168c0-4.42-3.58-8-8-8h-16zm520 0h-32c-8.84 0-16 7.16-16 16v112c0 17.67-14.33 32-32 32H352V128c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v192H96c-17.67 0-32-14.33-32-32V176c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v112c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V176c0-8.84-7.16-16-16-16zm-16-32c13.25 0 24-11.94 24-26.67S608 48 608 48s-24 38.61-24 53.33S594.75 128 608 128zm-576 0c13.25 0 24-11.94 24-26.67S32 48 32 48 8 86.61 8 101.33 18.75 128 32 128zm288-48c13.25 0 24-11.94 24-26.67S320 0 320 0s-24 38.61-24 53.33S306.75 80 320 80zm-208 48c13.25 0 24-11.94 24-26.67S112 48 112 48s-24 38.61-24 53.33S98.75 128 112 128zm64 0c13.25 0 24-11.94 24-26.67S176 48 176 48s-24 38.61-24 53.33S162.75 128 176 128zm64 0c13.25 0 24-11.94 24-26.67S240 48 240 48s-24 38.61-24 53.33S226.75 128 240 128zm160 0c13.25 0 24-11.94 24-26.67S400 48 400 48s-24 38.61-24 53.33S386.75 128 400 128zm64 0c13.25 0 24-11.94 24-26.67S464 48 464 48s-24 38.61-24 53.33S450.75 128 464 128zm64 0c13.25 0 24-11.94 24-26.67S528 48 528 48s-24 38.61-24 53.33S514.75 128 528 128z"] +}; +var faHardHat = { + prefix: 'fas', + iconName: 'hard-hat', + icon: [512, 512, [], "f807", "M480 288c0-80.25-49.28-148.92-119.19-177.62L320 192V80a16 16 0 0 0-16-16h-96a16 16 0 0 0-16 16v112l-40.81-81.62C81.28 139.08 32 207.75 32 288v64h448zm16 96H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faHashtag = { + prefix: 'fas', + iconName: 'hashtag', + icon: [448, 512, [], "f292", "M440.667 182.109l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l14.623-81.891C377.123 38.754 371.468 32 363.997 32h-40.632a12 12 0 0 0-11.813 9.891L296.175 128H197.54l14.623-81.891C213.477 38.754 207.822 32 200.35 32h-40.632a12 12 0 0 0-11.813 9.891L132.528 128H53.432a12 12 0 0 0-11.813 9.891l-7.143 40C33.163 185.246 38.818 192 46.289 192h74.81L98.242 320H19.146a12 12 0 0 0-11.813 9.891l-7.143 40C-1.123 377.246 4.532 384 12.003 384h74.81L72.19 465.891C70.877 473.246 76.532 480 84.003 480h40.632a12 12 0 0 0 11.813-9.891L151.826 384h98.634l-14.623 81.891C234.523 473.246 240.178 480 247.65 480h40.632a12 12 0 0 0 11.813-9.891L315.472 384h79.096a12 12 0 0 0 11.813-9.891l7.143-40c1.313-7.355-4.342-14.109-11.813-14.109h-74.81l22.857-128h79.096a12 12 0 0 0 11.813-9.891zM261.889 320h-98.634l22.857-128h98.634l-22.857 128z"] +}; +var faHatCowboy = { + prefix: 'fas', + iconName: 'hat-cowboy', + icon: [640, 512, [], "f8c0", "M490 296.9C480.51 239.51 450.51 64 392.3 64c-14 0-26.49 5.93-37 14a58.21 58.21 0 0 1-70.58 0c-10.51-8-23-14-37-14-58.2 0-88.2 175.47-97.71 232.88C188.81 309.47 243.73 320 320 320s131.23-10.51 170-23.1zm142.9-37.18a16 16 0 0 0-19.75 1.5c-1 .9-101.27 90.78-293.16 90.78-190.82 0-292.22-89.94-293.24-90.84A16 16 0 0 0 1 278.53C1.73 280.55 78.32 480 320 480s318.27-199.45 319-201.47a16 16 0 0 0-6.09-18.81z"] +}; +var faHatCowboySide = { + prefix: 'fas', + iconName: 'hat-cowboy-side', + icon: [640, 512, [], "f8c1", "M260.8 291.06c-28.63-22.94-62-35.06-96.4-35.06C87 256 21.47 318.72 1.43 412.06c-3.55 16.6-.43 33.83 8.57 47.3C18.75 472.47 31.83 480 45.88 480H592c-103.21 0-155-37.07-233.19-104.46zm234.65-18.29L468.4 116.2A64 64 0 0 0 392 64.41L200.85 105a64 64 0 0 0-50.35 55.79L143.61 226c6.9-.83 13.7-2 20.79-2 41.79 0 82 14.55 117.29 42.82l98 84.48C450.76 412.54 494.9 448 592 448a48 48 0 0 0 48-48c0-25.39-29.6-119.33-144.55-127.23z"] +}; +var faHatWizard = { + prefix: 'fas', + iconName: 'hat-wizard', + icon: [512, 512, [], "f6e8", "M496 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-304-64l-64-32 64-32 32-64 32 64 64 32-64 32-16 32h208l-86.41-201.63a63.955 63.955 0 0 1-1.89-45.45L416 0 228.42 107.19a127.989 127.989 0 0 0-53.46 59.15L64 416h144l-16-32zm64-224l16-32 16 32 32 16-32 16-16 32-16-32-32-16 32-16z"] +}; +var faHdd = { + prefix: 'fas', + iconName: 'hdd', + icon: [576, 512, [], "f0a0", "M576 304v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48zm-48-80a79.557 79.557 0 0 1 30.777 6.165L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L17.223 230.165A79.557 79.557 0 0 1 48 224h480zm-48 96c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zm-96 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32z"] +}; +var faHeadSideCough = { + prefix: 'fas', + iconName: 'head-side-cough', + icon: [640, 512, [], "e061", "M616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304ZM552,416a24,24,0,1,0,24,24A24,24,0,0,0,552,416Zm-64-56a24,24,0,1,0,24,24A24,24,0,0,0,488,360ZM616,464a24,24,0,1,0,24,24A24,24,0,0,0,616,464Zm0-104a24,24,0,1,0,24,24A24,24,0,0,0,616,360Zm-64-40a24,24,0,1,0,24,24A24,24,0,0,0,552,320Zm-74.78-45c-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192C86,0,0,86,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320a32,32,0,0,1,0-64h96V320h32A32,32,0,0,0,477.22,275ZM288,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,288,224Z"] +}; +var faHeadSideCoughSlash = { + prefix: 'fas', + iconName: 'head-side-cough-slash', + icon: [640, 512, [], "e062", "M454.11,319.21c19.56-3.81,31.62-25,23.11-44.21-21-47.12-48.5-151.75-73.12-186.75A208.13,208.13,0,0,0,234.1,0H192A190.64,190.64,0,0,0,84.18,33.3L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM313.39,210.45,263.61,172c5.88-7.14,14.43-12,24.36-12a32.06,32.06,0,0,1,32,32C320,199,317.24,205.17,313.39,210.45ZM616,304a24,24,0,1,0-24-24A24,24,0,0,0,616,304Zm-64,64a24,24,0,1,0-24-24A24,24,0,0,0,552,368ZM288,384a32,32,0,0,1,32-32h19.54L20.73,105.59A190.86,190.86,0,0,0,0,192c0,56.75,24.75,107.62,64,142.88V512H288V480h64a64,64,0,0,0,64-64H320A32,32,0,0,1,288,384Zm328-24a24,24,0,1,0,24,24A24,24,0,0,0,616,360Z"] +}; +var faHeadSideMask = { + prefix: 'fas', + iconName: 'head-side-mask', + icon: [512, 512, [], "e063", "M.15,184.42C-2.17,244.21,23,298.06,64,334.88V512H224V316.51L3.67,156.25A182.28,182.28,0,0,0,.15,184.42ZM509.22,275c-21-47.12-48.5-151.75-73.12-186.75A208.11,208.11,0,0,0,266.11,0H200C117,0,42.48,50.57,13.25,123.65L239.21,288H511.76A31.35,31.35,0,0,0,509.22,275ZM320,224a32,32,0,1,1,32-32A32.07,32.07,0,0,1,320,224Zm16,144H496l16-48H256V512H401.88a64,64,0,0,0,60.71-43.76L464,464H336a16,16,0,0,1,0-32H474.67l10.67-32H336a16,16,0,0,1,0-32Z"] +}; +var faHeadSideVirus = { + prefix: 'fas', + iconName: 'head-side-virus', + icon: [512, 512, [], "e064", "M272,240a16,16,0,1,0,16,16A16,16,0,0,0,272,240Zm-64-64a16,16,0,1,0,16,16A16,16,0,0,0,208,176Zm301.2,99c-20.93-47.12-48.43-151.73-73.07-186.75A207.9,207.9,0,0,0,266.09,0H192C86,0,0,86,0,192A191.23,191.23,0,0,0,64,334.81V512H320V448h64a64,64,0,0,0,64-64V320H480A32,32,0,0,0,509.2,275ZM368,240H355.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C290.47,297.09,256,311.37,256,339.88V352a16,16,0,0,1-32,0V339.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H112a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V96a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C313.09,173.53,327.37,208,355.88,208H368a16,16,0,0,1,0,32Z"] +}; +var faHeading = { + prefix: 'fas', + iconName: 'heading', + icon: [512, 512, [], "f1dc", "M448 96v320h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H320a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V288H160v128h32a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H32a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h32V96H32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16h-32v128h192V96h-32a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h160a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16z"] +}; +var faHeadphones = { + prefix: 'fas', + iconName: 'headphones', + icon: [512, 512, [], "f025", "M256 32C114.52 32 0 146.496 0 288v48a32 32 0 0 0 17.689 28.622l14.383 7.191C34.083 431.903 83.421 480 144 480h24c13.255 0 24-10.745 24-24V280c0-13.255-10.745-24-24-24h-24c-31.342 0-59.671 12.879-80 33.627V288c0-105.869 86.131-192 192-192s192 86.131 192 192v1.627C427.671 268.879 399.342 256 368 256h-24c-13.255 0-24 10.745-24 24v176c0 13.255 10.745 24 24 24h24c60.579 0 109.917-48.098 111.928-108.187l14.382-7.191A32 32 0 0 0 512 336v-48c0-141.479-114.496-256-256-256z"] +}; +var faHeadphonesAlt = { + prefix: 'fas', + iconName: 'headphones-alt', + icon: [512, 512, [], "f58f", "M160 288h-16c-35.35 0-64 28.7-64 64.12v63.76c0 35.41 28.65 64.12 64 64.12h16c17.67 0 32-14.36 32-32.06V320.06c0-17.71-14.33-32.06-32-32.06zm208 0h-16c-17.67 0-32 14.35-32 32.06v127.88c0 17.7 14.33 32.06 32 32.06h16c35.35 0 64-28.71 64-64.12v-63.76c0-35.41-28.65-64.12-64-64.12zM256 32C112.91 32 4.57 151.13 0 288v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288c0-114.67 93.33-207.8 208-207.82 114.67.02 208 93.15 208 207.82v112c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V288C507.43 151.13 399.09 32 256 32z"] +}; +var faHeadset = { + prefix: 'fas', + iconName: 'headset', + icon: [512, 512, [], "f590", "M192 208c0-17.67-14.33-32-32-32h-16c-35.35 0-64 28.65-64 64v48c0 35.35 28.65 64 64 64h16c17.67 0 32-14.33 32-32V208zm176 144c35.35 0 64-28.65 64-64v-48c0-35.35-28.65-64-64-64h-16c-17.67 0-32 14.33-32 32v112c0 17.67 14.33 32 32 32h16zM256 0C113.18 0 4.58 118.83 0 256v16c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-16c0-114.69 93.31-208 208-208s208 93.31 208 208h-.12c.08 2.43.12 165.72.12 165.72 0 23.35-18.93 42.28-42.28 42.28H320c0-26.51-21.49-48-48-48h-32c-26.51 0-48 21.49-48 48s21.49 48 48 48h181.72c49.86 0 90.28-40.42 90.28-90.28V256C507.42 118.83 398.82 0 256 0z"] +}; +var faHeart = { + prefix: 'fas', + iconName: 'heart', + icon: [512, 512, [], "f004", "M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"] +}; +var faHeartBroken = { + prefix: 'fas', + iconName: 'heart-broken', + icon: [512, 512, [], "f7a9", "M473.7 73.8l-2.4-2.5c-46-47-118-51.7-169.6-14.8L336 159.9l-96 64 48 128-144-144 96-64-28.6-86.5C159.7 19.6 87 24 40.7 71.4l-2.4 2.4C-10.4 123.6-12.5 202.9 31 256l212.1 218.6c7.1 7.3 18.6 7.3 25.7 0L481 255.9c43.5-53 41.4-132.3-7.3-182.1z"] +}; +var faHeartbeat = { + prefix: 'fas', + iconName: 'heartbeat', + icon: [512, 512, [], "f21e", "M320.2 243.8l-49.7 99.4c-6 12.1-23.4 11.7-28.9-.6l-56.9-126.3-30 71.7H60.6l182.5 186.5c7.1 7.3 18.6 7.3 25.7 0L451.4 288H342.3l-22.1-44.2zM473.7 73.9l-2.4-2.5c-51.5-52.6-135.8-52.6-187.4 0L256 100l-27.9-28.5c-51.5-52.7-135.9-52.7-187.4 0l-2.4 2.4C-10.4 123.7-12.5 203 31 256h102.4l35.9-86.2c5.4-12.9 23.6-13.2 29.4-.4l58.2 129.3 49-97.9c5.9-11.8 22.7-11.8 28.6 0l27.6 55.2H481c43.5-53 41.4-132.3-7.3-182.1z"] +}; +var faHelicopter = { + prefix: 'fas', + iconName: 'helicopter', + icon: [640, 512, [], "f533", "M304 384h272c17.67 0 32-14.33 32-32 0-123.71-100.29-224-224-224V64h176c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H144c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h176v64H112L68.8 70.4C65.78 66.37 61.03 64 56 64H16.01C5.6 64-2.04 73.78.49 83.88L32 192l160 64 86.4 115.2A31.992 31.992 0 0 0 304 384zm112-188.49C478.55 208.3 528.03 257.44 540.79 320H416V195.51zm219.37 263.3l-22.15-22.2c-6.25-6.26-16.24-6.1-22.64.01-7.09 6.77-13.84 11.25-24.64 11.25H240c-8.84 0-16 7.18-16 16.03v32.06c0 8.85 7.16 16.03 16 16.03h325.94c14.88 0 35.3-.47 68.45-29.52 7.02-6.14 7.57-17.05.98-23.66z"] +}; +var faHighlighter = { + prefix: 'fas', + iconName: 'highlighter', + icon: [544, 512, [], "f591", "M0 479.98L99.92 512l35.45-35.45-67.04-67.04L0 479.98zm124.61-240.01a36.592 36.592 0 0 0-10.79 38.1l13.05 42.83-50.93 50.94 96.23 96.23 50.86-50.86 42.74 13.08c13.73 4.2 28.65-.01 38.15-10.78l35.55-41.64-173.34-173.34-41.52 35.44zm403.31-160.7l-63.2-63.2c-20.49-20.49-53.38-21.52-75.12-2.35L190.55 183.68l169.77 169.78L530.27 154.4c19.18-21.74 18.15-54.63-2.35-75.13z"] +}; +var faHiking = { + prefix: 'fas', + iconName: 'hiking', + icon: [384, 512, [], "f6ec", "M80.95 472.23c-4.28 17.16 6.14 34.53 23.28 38.81 2.61.66 5.22.95 7.8.95 14.33 0 27.37-9.7 31.02-24.23l25.24-100.97-52.78-52.78-34.56 138.22zm14.89-196.12L137 117c2.19-8.42-3.14-16.95-11.92-19.06-43.88-10.52-88.35 15.07-99.32 57.17L.49 253.24c-2.19 8.42 3.14 16.95 11.92 19.06l63.56 15.25c8.79 2.1 17.68-3.02 19.87-11.44zM368 160h-16c-8.84 0-16 7.16-16 16v16h-34.75l-46.78-46.78C243.38 134.11 228.61 128 212.91 128c-27.02 0-50.47 18.3-57.03 44.52l-26.92 107.72a32.012 32.012 0 0 0 8.42 30.39L224 397.25V480c0 17.67 14.33 32 32 32s32-14.33 32-32v-82.75c0-17.09-6.66-33.16-18.75-45.25l-46.82-46.82c.15-.5.49-.89.62-1.41l19.89-79.57 22.43 22.43c6 6 14.14 9.38 22.62 9.38h48v240c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16V176c.01-8.84-7.15-16-15.99-16zM240 96c26.51 0 48-21.49 48-48S266.51 0 240 0s-48 21.49-48 48 21.49 48 48 48z"] +}; +var faHippo = { + prefix: 'fas', + iconName: 'hippo', + icon: [640, 512, [], "f6ed", "M581.12 96.2c-27.67-.15-52.5 17.58-76.6 26.62C489.98 88.27 455.83 64 416 64c-11.28 0-21.95 2.3-32 5.88V56c0-13.26-10.75-24-24-24h-16c-13.25 0-24 10.74-24 24v48.98C286.01 79.58 241.24 64 192 64 85.96 64 0 135.64 0 224v240c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16v-70.79C128.35 407.57 166.72 416 208 416s79.65-8.43 112-22.79V464c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V288h128v32c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-32c17.67 0 32-14.33 32-32v-92.02c0-34.09-24.79-67.59-58.88-67.78zM448 176c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"] +}; +var faHistory = { + prefix: 'fas', + iconName: 'history', + icon: [512, 512, [], "f1da", "M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"] +}; +var faHockeyPuck = { + prefix: 'fas', + iconName: 'hockey-puck', + icon: [512, 512, [], "f453", "M0 160c0-53 114.6-96 256-96s256 43 256 96-114.6 96-256 96S0 213 0 160zm0 82.2V352c0 53 114.6 96 256 96s256-43 256-96V242.2c-113.4 82.3-398.5 82.4-512 0z"] +}; +var faHollyBerry = { + prefix: 'fas', + iconName: 'holly-berry', + icon: [448, 512, [], "f7aa", "M144 192c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm112-48c0 26.5 21.5 48 48 48s48-21.5 48-48-21.5-48-48-48-48 21.5-48 48zm-32-48c26.5 0 48-21.5 48-48S250.5 0 224 0s-48 21.5-48 48 21.5 48 48 48zm-16.2 139.1c.1-12.4-13.1-20.1-23.8-13.7-34.3 20.3-71.4 32.7-108.7 36.2-9.7.9-15.6 11.3-11.6 20.2 6.2 13.9 11.1 28.6 14.7 43.8 3.6 15.2-5.3 30.6-20.2 35.1-14.9 4.5-30.1 7.6-45.3 9.1-9.7 1-15.7 11.3-11.7 20.2 15 32.8 22.9 69.5 23 107.7.1 14.4 15.2 23.1 27.6 16 33.2-19 68.9-30.5 104.8-33.9 9.7-.9 15.6-11.3 11.6-20.2-6.2-13.9-11.1-28.6-14.7-43.8-3.6-15.2 5.3-30.6 20.2-35.1 14.9-4.5 30.1-7.6 45.3-9.1 9.7-1 15.7-11.3 11.7-20.2-15.5-34.2-23.3-72.5-22.9-112.3zM435 365.6c-15.2-1.6-30.3-4.7-45.3-9.1-14.9-4.5-23.8-19.9-20.2-35.1 3.6-15.2 8.5-29.8 14.7-43.8 4-8.9-1.9-19.3-11.6-20.2-37.3-3.5-74.4-15.9-108.7-36.2-10.7-6.3-23.9 1.4-23.8 13.7 0 1.6-.2 3.2-.2 4.9.2 33.3 7 65.7 19.9 94 5.7 12.4 5.2 26.6-.6 38.9 4.9 1.2 9.9 2.2 14.8 3.7 14.9 4.5 23.8 19.9 20.2 35.1-3.6 15.2-8.5 29.8-14.7 43.8-4 8.9 1.9 19.3 11.6 20.2 35.9 3.4 71.6 14.9 104.8 33.9 12.5 7.1 27.6-1.6 27.6-16 .2-38.2 8-75 23-107.7 4.3-8.7-1.8-19.1-11.5-20.1z"] +}; +var faHome = { + prefix: 'fas', + iconName: 'home', + icon: [576, 512, [], "f015", "M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"] +}; +var faHorse = { + prefix: 'fas', + iconName: 'horse', + icon: [576, 512, [], "f6f0", "M575.92 76.6c-.01-8.13-3.02-15.87-8.58-21.8-3.78-4.03-8.58-9.12-13.69-14.5 11.06-6.84 19.5-17.49 22.18-30.66C576.85 4.68 572.96 0 567.9 0H447.92c-70.69 0-128 57.31-128 128H160c-28.84 0-54.4 12.98-72 33.11V160c-48.53 0-88 39.47-88 88v56c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-56c0-13.22 6.87-24.39 16.78-31.68-.21 2.58-.78 5.05-.78 7.68 0 27.64 11.84 52.36 30.54 69.88l-25.72 68.6a63.945 63.945 0 0 0-2.16 37.99l24.85 99.41A15.982 15.982 0 0 0 107.02 512h65.96c10.41 0 18.05-9.78 15.52-19.88l-26.31-105.26 23.84-63.59L320 345.6V496c0 8.84 7.16 16 16 16h64c8.84 0 16-7.16 16-16V318.22c19.74-20.19 32-47.75 32-78.22 0-.22-.07-.42-.08-.64V136.89l16 7.11 18.9 37.7c7.45 14.87 25.05 21.55 40.49 15.37l32.55-13.02a31.997 31.997 0 0 0 20.12-29.74l-.06-77.71zm-64 19.4c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16z"] +}; +var faHorseHead = { + prefix: 'fas', + iconName: 'horse-head', + icon: [512, 512, [], "f7ab", "M509.8 332.5l-69.9-164.3c-14.9-41.2-50.4-71-93-79.2 18-10.6 46.3-35.9 34.2-82.3-1.3-5-7.1-7.9-12-6.1L166.9 76.3C35.9 123.4 0 238.9 0 398.8V480c0 17.7 14.3 32 32 32h236.2c23.8 0 39.3-25 28.6-46.3L256 384v-.7c-45.6-3.5-84.6-30.7-104.3-69.6-1.6-3.1-.9-6.9 1.6-9.3l12.1-12.1c3.9-3.9 10.6-2.7 12.9 2.4 14.8 33.7 48.2 57.4 87.4 57.4 17.2 0 33-5.1 46.8-13.2l46 63.9c6 8.4 15.7 13.3 26 13.3h50.3c8.5 0 16.6-3.4 22.6-9.4l45.3-39.8c8.9-9.1 11.7-22.6 7.1-34.4zM328 224c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24-10.7 24-24 24z"] +}; +var faHospital = { + prefix: 'fas', + iconName: 'hospital', + icon: [448, 512, [], "f0f8", "M448 492v20H0v-20c0-6.627 5.373-12 12-12h20V120c0-13.255 10.745-24 24-24h88V24c0-13.255 10.745-24 24-24h112c13.255 0 24 10.745 24 24v72h88c13.255 0 24 10.745 24 24v360h20c6.627 0 12 5.373 12 12zM308 192h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-168 64h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12zm104 128h-40c-6.627 0-12 5.373-12 12v84h64v-84c0-6.627-5.373-12-12-12zm64-96h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12zm-116 12c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40zM182 96h26v26a6 6 0 0 0 6 6h20a6 6 0 0 0 6-6V96h26a6 6 0 0 0 6-6V70a6 6 0 0 0-6-6h-26V38a6 6 0 0 0-6-6h-20a6 6 0 0 0-6 6v26h-26a6 6 0 0 0-6 6v20a6 6 0 0 0 6 6z"] +}; +var faHospitalAlt = { + prefix: 'fas', + iconName: 'hospital-alt', + icon: [576, 512, [], "f47d", "M544 96H416V32c0-17.7-14.3-32-32-32H192c-17.7 0-32 14.3-32 32v64H32c-17.7 0-32 14.3-32 32v368c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16V128c0-17.7-14.3-32-32-32zM160 436c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm160 128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm16-170c0 3.3-2.7 6-6 6h-26v26c0 3.3-2.7 6-6 6h-20c-3.3 0-6-2.7-6-6v-26h-26c-3.3 0-6-2.7-6-6v-20c0-3.3 2.7-6 6-6h26V86c0-3.3 2.7-6 6-6h20c3.3 0 6 2.7 6 6v26h26c3.3 0 6 2.7 6 6v20zm144 298c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40zm0-128c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40z"] +}; +var faHospitalSymbol = { + prefix: 'fas', + iconName: 'hospital-symbol', + icon: [512, 512, [], "f47e", "M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm112 376c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-88h-96v88c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V136c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v88h96v-88c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v240z"] +}; +var faHospitalUser = { + prefix: 'fas', + iconName: 'hospital-user', + icon: [640, 512, [], "f80d", "M480 320a96 96 0 1 0-96-96 96 96 0 0 0 96 96zm48 32a22.88 22.88 0 0 0-7.06 1.09 124.76 124.76 0 0 1-81.89 0A22.82 22.82 0 0 0 432 352a112 112 0 0 0-112 112.62c.14 26.26 21.73 47.38 48 47.38h224c26.27 0 47.86-21.12 48-47.38A112 112 0 0 0 528 352zm-198.09 10.45A145.19 145.19 0 0 1 352 344.62V128a32 32 0 0 0-32-32h-32V32a32 32 0 0 0-32-32H96a32 32 0 0 0-32 32v64H32a32 32 0 0 0-32 32v368a16 16 0 0 0 16 16h288.31A78.62 78.62 0 0 1 288 464.79a143.06 143.06 0 0 1 41.91-102.34zM144 404a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12H92a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm48-122a6 6 0 0 1-6 6h-20a6 6 0 0 1-6-6v-26h-26a6 6 0 0 1-6-6v-20a6 6 0 0 1 6-6h26V70a6 6 0 0 1 6-6h20a6 6 0 0 1 6 6v26h26a6 6 0 0 1 6 6v20a6 6 0 0 1-6 6h-26zm80 250a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12zm0-128a12 12 0 0 1-12 12h-40a12 12 0 0 1-12-12v-40a12 12 0 0 1 12-12h40a12 12 0 0 1 12 12z"] +}; +var faHotTub = { + prefix: 'fas', + iconName: 'hot-tub', + icon: [512, 512, [], "f593", "M414.21 177.65c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C378.96 6.14 372.22 0 364.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zm-108 0c1.02 8.21 7.75 14.35 15.75 14.35h16.12c9.51 0 17.08-8.57 16-18.35-4.34-39.11-22.4-74.53-50.13-97.16-17.37-14.17-28.82-36.75-31.98-62.15C270.96 6.14 264.22 0 256.23 0h-16.12c-9.51 0-17.09 8.57-16 18.35 4.34 39.11 22.4 74.53 50.13 97.16 17.36 14.17 28.82 36.75 31.97 62.14zM480 256H256l-110.93-83.2a63.99 63.99 0 0 0-38.4-12.8H64c-35.35 0-64 28.65-64 64v224c0 35.35 28.65 64 64 64h384c35.35 0 64-28.65 64-64V288c0-17.67-14.33-32-32-32zM128 440c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zm96 0c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8V328c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v112zM64 128c35.35 0 64-28.65 64-64S99.35 0 64 0 0 28.65 0 64s28.65 64 64 64z"] +}; +var faHotdog = { + prefix: 'fas', + iconName: 'hotdog', + icon: [512, 512, [], "f80f", "M488.56 23.44a80 80 0 0 0-113.12 0l-352 352a80 80 0 1 0 113.12 113.12l352-352a80 80 0 0 0 0-113.12zm-49.93 95.19c-19.6 19.59-37.52 22.67-51.93 25.14C373.76 146 364.4 147.6 352 160s-14 21.76-16.23 34.71c-2.48 14.4-5.55 32.33-25.15 51.92s-37.52 22.67-51.92 25.15C245.75 274 236.4 275.6 224 288s-14 21.75-16.23 34.7c-2.47 14.4-5.54 32.33-25.14 51.92s-37.53 22.68-51.93 25.15C117.76 402 108.4 403.6 96 416a16 16 0 0 1-22.63-22.63c19.6-19.59 37.52-22.67 51.92-25.14 13-2.22 22.3-3.82 34.71-16.23s14-21.75 16.22-34.7c2.48-14.4 5.55-32.33 25.15-51.92s37.52-22.67 51.92-25.14c13-2.22 22.3-3.83 34.7-16.23s14-21.76 16.24-34.71c2.47-14.4 5.54-32.33 25.14-51.92s37.52-22.68 51.92-25.15C394.24 110 403.59 108.41 416 96a16 16 0 0 1 22.63 22.63zM31.44 322.18L322.18 31.44l-11.54-11.55c-25-25-63.85-26.66-86.79-3.72L16.17 223.85c-22.94 22.94-21.27 61.79 3.72 86.78zm449.12-132.36L189.82 480.56l11.54 11.55c25 25 63.85 26.66 86.79 3.72l207.68-207.68c22.94-22.94 21.27-61.79-3.72-86.79z"] +}; +var faHotel = { + prefix: 'fas', + iconName: 'hotel', + icon: [576, 512, [], "f594", "M560 64c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h15.98v384H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h240v-80c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16v80h240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-16V64h16zm-304 44.8c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm0 96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zm-128-96c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4zM179.2 256h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4c0 6.4-6.4 12.8-12.8 12.8zM192 384c0-53.02 42.98-96 96-96s96 42.98 96 96H192zm256-140.8c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4zm0-96c0 6.4-6.4 12.8-12.8 12.8h-38.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h38.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"] +}; +var faHourglass = { + prefix: 'fas', + iconName: 'hourglass', + icon: [384, 512, [], "f254", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64z"] +}; +var faHourglassEnd = { + prefix: 'fas', + iconName: 'hourglass-end', + icon: [384, 512, [], "f253", "M360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64zM192 208c-57.787 0-104-66.518-104-144h208c0 77.945-46.51 144-104 144z"] +}; +var faHourglassHalf = { + prefix: 'fas', + iconName: 'hourglass-half', + icon: [384, 512, [], "f252", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-75.078 384H99.08c17.059-46.797 52.096-80 92.92-80 40.821 0 75.862 33.196 92.922 80zm.019-256H99.078C91.988 108.548 88 86.748 88 64h208c0 22.805-3.987 44.587-11.059 64z"] +}; +var faHourglassStart = { + prefix: 'fas', + iconName: 'hourglass-start', + icon: [384, 512, [], "f251", "M360 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24 0 90.965 51.016 167.734 120.842 192C75.016 280.266 24 357.035 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24 0-90.965-51.016-167.734-120.842-192C308.984 231.734 360 154.965 360 64c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24zm-64 448H88c0-77.458 46.204-144 104-144 57.786 0 104 66.517 104 144z"] +}; +var faHouseDamage = { + prefix: 'fas', + iconName: 'house-damage', + icon: [576, 512, [], "f6f1", "M288 114.96L69.47 307.71c-1.62 1.46-3.69 2.14-5.47 3.35V496c0 8.84 7.16 16 16 16h149.23L192 439.19l104.11-64-60.16-119.22L384 392.75l-104.11 64L319.81 512H496c8.84 0 16-7.16 16-16V311.1c-1.7-1.16-3.72-1.82-5.26-3.2L288 114.96zm282.69 121.32L512 184.45V48c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v51.69L314.75 10.31C307.12 3.45 297.56.01 288 0s-19.1 3.41-26.7 10.27L5.31 236.28c-6.57 5.91-7.12 16.02-1.21 22.6l21.4 23.82c5.9 6.57 16.02 7.12 22.6 1.21L277.42 81.63c6.05-5.33 15.12-5.33 21.17 0L527.91 283.9c6.57 5.9 16.69 5.36 22.6-1.21l21.4-23.82c5.9-6.57 5.36-16.69-1.22-22.59z"] +}; +var faHouseUser = { + prefix: 'fas', + iconName: 'house-user', + icon: [576, 512, [], "e065", "M570.69,236.27,512,184.44V48a16,16,0,0,0-16-16H432a16,16,0,0,0-16,16V99.67L314.78,10.3C308.5,4.61,296.53,0,288,0s-20.46,4.61-26.74,10.3l-256,226A18.27,18.27,0,0,0,0,248.2a18.64,18.64,0,0,0,4.09,10.71L25.5,282.7a21.14,21.14,0,0,0,12,5.3,21.67,21.67,0,0,0,10.69-4.11l15.9-14V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V269.88l15.91,14A21.94,21.94,0,0,0,538.63,288a20.89,20.89,0,0,0,11.87-5.31l21.41-23.81A21.64,21.64,0,0,0,576,248.19,21,21,0,0,0,570.69,236.27ZM288,176a64,64,0,1,1-64,64A64,64,0,0,1,288,176ZM400,448H176a16,16,0,0,1-16-16,96,96,0,0,1,96-96h64a96,96,0,0,1,96,96A16,16,0,0,1,400,448Z"] +}; +var faHryvnia = { + prefix: 'fas', + iconName: 'hryvnia', + icon: [384, 512, [], "f6f2", "M368 240c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-41.86c13.41-28.63 13.74-63.33-4.13-94.05C303.34 49.84 267.1 32 229.96 32h-78.82c-24.32 0-47.86 8.53-66.54 24.09L72.83 65.9c-10.18 8.49-11.56 23.62-3.07 33.8l20.49 24.59c8.49 10.19 23.62 11.56 33.81 3.07l11.73-9.78c4.32-3.6 9.77-5.57 15.39-5.57h83.62c11.69 0 21.2 9.52 21.2 21.2 0 5.91-2.48 11.58-6.81 15.58L219.7 176H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h134.37l-34.67 32H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h41.86c-13.41 28.63-13.74 63.33 4.13 94.05C80.66 462.15 116.9 480 154.04 480h78.82c24.32 0 47.86-8.53 66.54-24.09l11.77-9.81c10.18-8.49 11.56-23.62 3.07-33.8l-20.49-24.59c-8.49-10.19-23.62-11.56-33.81-3.07l-11.75 9.8a23.992 23.992 0 0 1-15.36 5.56H149.2c-11.69 0-21.2-9.52-21.2-21.2 0-5.91 2.48-11.58 6.81-15.58L164.3 336H368c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H233.63l34.67-32H368z"] +}; +var faICursor = { + prefix: 'fas', + iconName: 'i-cursor', + icon: [256, 512, [], "f246", "M256 52.048V12.065C256 5.496 250.726.148 244.158.066 211.621-.344 166.469.011 128 37.959 90.266.736 46.979-.114 11.913.114 5.318.157 0 5.519 0 12.114v39.645c0 6.687 5.458 12.078 12.145 11.998C38.111 63.447 96 67.243 96 112.182V224H60c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h36v112c0 44.932-56.075 48.031-83.95 47.959C5.404 447.942 0 453.306 0 459.952v39.983c0 6.569 5.274 11.917 11.842 11.999 32.537.409 77.689.054 116.158-37.894 37.734 37.223 81.021 38.073 116.087 37.845 6.595-.043 11.913-5.405 11.913-12V460.24c0-6.687-5.458-12.078-12.145-11.998C217.889 448.553 160 444.939 160 400V288h36c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-36V112.182c0-44.932 56.075-48.213 83.95-48.142 6.646.018 12.05-5.346 12.05-11.992z"] +}; +var faIceCream = { + prefix: 'fas', + iconName: 'ice-cream', + icon: [448, 512, [], "f810", "M368 160h-.94a144 144 0 1 0-286.12 0H80a48 48 0 0 0 0 96h288a48 48 0 0 0 0-96zM195.38 493.69a31.52 31.52 0 0 0 57.24 0L352 288H96z"] +}; +var faIcicles = { + prefix: 'fas', + iconName: 'icicles', + icon: [512, 512, [], "f7ad", "M511.4 37.9C515.1 18.2 500 0 480 0H32C10.6 0-4.8 20.7 1.4 41.2l87.1 273.4c2.5 7.2 12.7 7.2 15.1 0L140 190.5l44.2 187.3c1.9 8.3 13.7 8.3 15.6 0l46.5-196.9 34.1 133.4c2.3 7.6 13 7.6 15.3 0l45.8-172.5 66.7 363.8c1.7 8.6 14 8.6 15.7 0l87.5-467.7z"] +}; +var faIcons = { + prefix: 'fas', + iconName: 'icons', + icon: [512, 512, [], "f86d", "M116.65 219.35a15.68 15.68 0 0 0 22.65 0l96.75-99.83c28.15-29 26.5-77.1-4.91-103.88C203.75-7.7 163-3.5 137.86 22.44L128 32.58l-9.85-10.14C93.05-3.5 52.25-7.7 24.86 15.64c-31.41 26.78-33 74.85-5 103.88zm143.92 100.49h-48l-7.08-14.24a27.39 27.39 0 0 0-25.66-17.78h-71.71a27.39 27.39 0 0 0-25.66 17.78l-7 14.24h-48A27.45 27.45 0 0 0 0 347.3v137.25A27.44 27.44 0 0 0 27.43 512h233.14A27.45 27.45 0 0 0 288 484.55V347.3a27.45 27.45 0 0 0-27.43-27.46zM144 468a52 52 0 1 1 52-52 52 52 0 0 1-52 52zm355.4-115.9h-60.58l22.36-50.75c2.1-6.65-3.93-13.21-12.18-13.21h-75.59c-6.3 0-11.66 3.9-12.5 9.1l-16.8 106.93c-1 6.3 4.88 11.89 12.5 11.89h62.31l-24.2 83c-1.89 6.65 4.2 12.9 12.23 12.9a13.26 13.26 0 0 0 10.92-5.25l92.4-138.91c4.88-6.91-1.16-15.7-10.87-15.7zM478.08.33L329.51 23.17C314.87 25.42 304 38.92 304 54.83V161.6a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V99.66l112-17.22v47.18a83.25 83.25 0 0 0-16-1.7c-35.35 0-64 21.48-64 48s28.65 48 64 48c35.2 0 63.73-21.32 64-47.66V32c0-19.48-16-34.42-33.92-31.67z"] +}; +var faIdBadge = { + prefix: 'fas', + iconName: 'id-badge', + icon: [384, 512, [], "f2c1", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM144 32h96c8.8 0 16 7.2 16 16s-7.2 16-16 16h-96c-8.8 0-16-7.2-16-16s7.2-16 16-16zm48 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 416 80 407.4 80 396.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"] +}; +var faIdCard = { + prefix: 'fas', + iconName: 'id-card', + icon: [576, 512, [], "f2c2", "M528 32H48C21.5 32 0 53.5 0 80v16h576V80c0-26.5-21.5-48-48-48zM0 432c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V128H0v304zm352-232c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zm0 64c0-4.4 3.6-8 8-8h144c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H360c-4.4 0-8-3.6-8-8v-16zM176 192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM67.1 396.2C75.5 370.5 99.6 352 128 352h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.9-5.2 19.8-15.6 19.8H82.7c-10.4 0-18.8-10-15.6-19.8z"] +}; +var faIdCardAlt = { + prefix: 'fas', + iconName: 'id-card-alt', + icon: [576, 512, [], "f47f", "M528 64H384v96H192V64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h480c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM288 224c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm93.3 224H194.7c-10.4 0-18.8-10-15.6-19.8 8.3-25.6 32.4-44.2 60.9-44.2h8.2c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h8.2c28.4 0 52.5 18.5 60.9 44.2 3.2 9.8-5.2 19.8-15.6 19.8zM352 32c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32v96h128V32z"] +}; +var faIgloo = { + prefix: 'fas', + iconName: 'igloo', + icon: [576, 512, [], "f7ae", "M320 33.9c-10.5-1.2-21.2-1.9-32-1.9-99.8 0-187.8 50.8-239.4 128H320V33.9zM96 192H30.3C11.1 230.6 0 274 0 320h96V192zM352 39.4V160h175.4C487.2 99.9 424.8 55.9 352 39.4zM480 320h96c0-46-11.1-89.4-30.3-128H480v128zm-64 64v96h128c17.7 0 32-14.3 32-32v-96H411.5c2.6 10.3 4.5 20.9 4.5 32zm32-192H128v128h49.8c22.2-38.1 63-64 110.2-64s88 25.9 110.2 64H448V192zM0 448c0 17.7 14.3 32 32 32h128v-96c0-11.1 1.9-21.7 4.5-32H0v96zm288-160c-53 0-96 43-96 96v96h192v-96c0-53-43-96-96-96z"] +}; +var faImage = { + prefix: 'fas', + iconName: 'image', + icon: [512, 512, [], "f03e", "M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"] +}; +var faImages = { + prefix: 'fas', + iconName: 'images', + icon: [576, 512, [], "f302", "M480 416v16c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v208c0 44.112 35.888 80 80 80h336zm96-80V80c0-26.51-21.49-48-48-48H144c-26.51 0-48 21.49-48 48v256c0 26.51 21.49 48 48 48h384c26.51 0 48-21.49 48-48zM256 128c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-96 144l55.515-55.515c4.686-4.686 12.284-4.686 16.971 0L272 256l135.515-135.515c4.686-4.686 12.284-4.686 16.971 0L512 208v112H160v-48z"] +}; +var faInbox = { + prefix: 'fas', + iconName: 'inbox', + icon: [576, 512, [], "f01c", "M567.938 243.908L462.25 85.374A48.003 48.003 0 0 0 422.311 64H153.689a48 48 0 0 0-39.938 21.374L8.062 243.908A47.994 47.994 0 0 0 0 270.533V400c0 26.51 21.49 48 48 48h480c26.51 0 48-21.49 48-48V270.533a47.994 47.994 0 0 0-8.062-26.625zM162.252 128h251.497l85.333 128H376l-32 64H232l-32-64H76.918l85.334-128z"] +}; +var faIndent = { + prefix: 'fas', + iconName: 'indent', + icon: [448, 512, [], "f03c", "M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faIndustry = { + prefix: 'fas', + iconName: 'industry', + icon: [512, 512, [], "f275", "M475.115 163.781L336 252.309v-68.28c0-18.916-20.931-30.399-36.885-20.248L160 252.309V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56v400c0 13.255 10.745 24 24 24h464c13.255 0 24-10.745 24-24V184.029c0-18.917-20.931-30.399-36.885-20.248z"] +}; +var faInfinity = { + prefix: 'fas', + iconName: 'infinity', + icon: [640, 512, [], "f534", "M471.1 96C405 96 353.3 137.3 320 174.6 286.7 137.3 235 96 168.9 96 75.8 96 0 167.8 0 256s75.8 160 168.9 160c66.1 0 117.8-41.3 151.1-78.6 33.3 37.3 85 78.6 151.1 78.6 93.1 0 168.9-71.8 168.9-160S564.2 96 471.1 96zM168.9 320c-40.2 0-72.9-28.7-72.9-64s32.7-64 72.9-64c38.2 0 73.4 36.1 94 64-20.4 27.6-55.9 64-94 64zm302.2 0c-38.2 0-73.4-36.1-94-64 20.4-27.6 55.9-64 94-64 40.2 0 72.9 28.7 72.9 64s-32.7 64-72.9 64z"] +}; +var faInfo = { + prefix: 'fas', + iconName: 'info', + icon: [192, 512, [], "f129", "M20 424.229h20V279.771H20c-11.046 0-20-8.954-20-20V212c0-11.046 8.954-20 20-20h112c11.046 0 20 8.954 20 20v212.229h20c11.046 0 20 8.954 20 20V492c0 11.046-8.954 20-20 20H20c-11.046 0-20-8.954-20-20v-47.771c0-11.046 8.954-20 20-20zM96 0C56.235 0 24 32.235 24 72s32.235 72 72 72 72-32.235 72-72S135.764 0 96 0z"] +}; +var faInfoCircle = { + prefix: 'fas', + iconName: 'info-circle', + icon: [512, 512, [], "f05a", "M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"] +}; +var faItalic = { + prefix: 'fas', + iconName: 'italic', + icon: [320, 512, [], "f033", "M320 48v32a16 16 0 0 1-16 16h-62.76l-80 320H208a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h62.76l80-320H112a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h192a16 16 0 0 1 16 16z"] +}; +var faJedi = { + prefix: 'fas', + iconName: 'jedi', + icon: [576, 512, [], "f669", "M535.95308,352c-42.64069,94.17188-137.64086,160-247.9848,160q-6.39844,0-12.84377-.29688C171.15558,506.9375,81.26481,442.23438,40.01474,352H79.93668L21.3272,293.40625a264.82522,264.82522,0,0,1-5.10938-39.42187,273.6653,273.6653,0,0,1,.5-29.98438H63.93665L22.546,182.625A269.79782,269.79782,0,0,1,130.51489,20.54688a16.06393,16.06393,0,0,1,9.28127-3,16.36332,16.36332,0,0,1,13.5,7.25,16.02739,16.02739,0,0,1,1.625,15.09374,138.387,138.387,0,0,0-9.84376,51.26563c0,45.10937,21.04691,86.57813,57.71884,113.73437a16.29989,16.29989,0,0,1,1.20313,25.39063c-26.54692,23.98437-41.17194,56.5-41.17194,91.57813,0,60.03124,42.95319,110.28124,99.89079,121.92187l2.5-65.26563L238.062,397a8.33911,8.33911,0,0,1-10-.75,8.025,8.025,0,0,1-1.39063-9.9375l20.125-33.76562-42.06257-8.73438a7.9898,7.9898,0,0,1,0-15.65625l42.06257-8.71875-20.10941-33.73438a7.99122,7.99122,0,0,1,11.35939-10.71874L268.437,295.64062,279.95265,7.67188a7.97138,7.97138,0,0,1,8-7.67188h.04687a8.02064,8.02064,0,0,1,7.95314,7.70312L307.48394,295.625l30.39068-20.67188a8.08327,8.08327,0,0,1,10,.8125,7.99866,7.99866,0,0,1,1.39062,9.90626L329.12461,319.4375l42.07819,8.73438a7.99373,7.99373,0,0,1,0,15.65624l-42.07819,8.71876,20.1094,33.73437a7.97791,7.97791,0,0,1-1.32812,9.92187A8.25739,8.25739,0,0,1,337.87462,397L310.7027,378.53125l2.5,65.34375c48.48446-9.40625,87.57828-48.15625,97.31267-96.5A123.52652,123.52652,0,0,0,371.9528,230.29688a16.30634,16.30634,0,0,1,1.20313-25.42188c36.65631-27.17188,57.6876-68.60938,57.6876-113.73438a138.01689,138.01689,0,0,0-9.85939-51.3125,15.98132,15.98132,0,0,1,1.60937-15.09374,16.36914,16.36914,0,0,1,13.5-7.23438,16.02453,16.02453,0,0,1,9.25,2.98438A271.26947,271.26947,0,0,1,553.25,182.76562L511.99992,224h46.9532C559.3125,229.76562,560,235.45312,560,241.26562a270.092,270.092,0,0,1-5.125,51.85938L495.98427,352Z"] +}; +var faJoint = { + prefix: 'fas', + iconName: 'joint', + icon: [640, 512, [], "f595", "M444.34 181.1c22.38 15.68 35.66 41.16 35.66 68.59V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-43.24-21.01-83.41-56.34-108.06C463.85 125.02 448 99.34 448 70.31V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v66.4c0 43.69 24.56 81.63 60.34 106.7zM194.97 358.98C126.03 370.07 59.69 394.69 0 432c83.65 52.28 180.3 80 278.94 80h88.57L254.79 380.49c-14.74-17.2-37.45-25.11-59.82-21.51zM553.28 87.09c-5.67-3.8-9.28-9.96-9.28-16.78V8c0-4.42-3.58-8-8-8h-48c-4.42 0-8 3.58-8 8v62.31c0 22.02 10.17 43.41 28.64 55.39C550.79 153.04 576 199.54 576 249.69V280c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-30.31c0-65.44-32.41-126.19-86.72-162.6zM360.89 352.05c-34.4.06-86.81.15-88.21.17l117.8 137.43A63.987 63.987 0 0 0 439.07 512h88.45L409.57 374.4a63.955 63.955 0 0 0-48.68-22.35zM616 352H432l117.99 137.65A63.987 63.987 0 0 0 598.58 512H616c13.25 0 24-10.75 24-24V376c0-13.26-10.75-24-24-24z"] +}; +var faJournalWhills = { + prefix: 'fas', + iconName: 'journal-whills', + icon: [448, 512, [], "f66a", "M438.40625,377.59375c-3.20313,12.8125-3.20313,57.60937,0,73.60937Q447.9922,460.78907,448,470.40625v16c0,16-12.79688,25.59375-25.59375,25.59375H96c-54.40625,0-96-41.59375-96-96V96C0,41.59375,41.59375,0,96,0H422.40625C438.40625,0,448,9.59375,448,25.59375v332.8125Q448,372.79688,438.40625,377.59375ZM380.79688,384H96c-16,0-32,12.79688-32,32s12.79688,32,32,32H380.79688ZM128.01562,176.01562c0,.51563.14063.98438.14063,1.5l37.10937,32.46876A7.99954,7.99954,0,0,1,160,224h-.01562a9.17678,9.17678,0,0,1-5.25-1.98438L131.14062,201.375C142.6875,250.95312,186.90625,288,240,288s97.3125-37.04688,108.875-86.625l-23.59375,20.64062a8.02516,8.02516,0,0,1-5.26563,1.96876H320a9.14641,9.14641,0,0,1-6.01562-2.71876A9.26508,9.26508,0,0,1,312,216a9.097,9.097,0,0,1,2.73438-6.01562l37.10937-32.46876c.01563-.53124.15625-1,.15625-1.51562,0-11.04688-2.09375-21.51562-5.06251-31.59375l-21.26562,21.25a8.00467,8.00467,0,0,1-11.32812-11.3125l26.42187-26.40625a111.81517,111.81517,0,0,0-46.35937-49.26562,63.02336,63.02336,0,0,1-14.0625,82.64062A55.83846,55.83846,0,0,1,251.625,254.73438l-1.42188-34.28126,12.67188,8.625a3.967,3.967,0,0,0,2.25.6875,3.98059,3.98059,0,0,0,3.43749-6.03124l-8.53124-14.3125,17.90625-3.71876a4.00647,4.00647,0,0,0,0-7.84374l-17.90625-3.71876,8.53124-14.3125a3.98059,3.98059,0,0,0-3.43749-6.03124,4.726,4.726,0,0,0-2.25.67187L248.6875,184.125,244,71.82812a4.00386,4.00386,0,0,0-8,0l-4.625,110.8125-12-8.15624a4.003,4.003,0,0,0-5.68751,5.35937l8.53126,14.3125L204.3125,197.875a3.99686,3.99686,0,0,0,0,7.82812l17.90625,3.73438-8.53126,14.29688a4.72469,4.72469,0,0,0-.56249,2.04687,4.59547,4.59547,0,0,0,1.25,2.90625,4.01059,4.01059,0,0,0,2.75,1.09375,4.09016,4.09016,0,0,0,2.25-.6875l10.35937-7.04687L228.375,254.76562a55.86414,55.86414,0,0,1-28.71875-93.45312,63.01119,63.01119,0,0,1-14.04688-82.65625,111.93158,111.93158,0,0,0-46.375,49.26563l26.42187,26.42187a7.99917,7.99917,0,0,1-11.3125,11.3125l-21.26563-21.26563C130.09375,154.48438,128,164.95312,128.01562,176.01562Z"] +}; +var faKaaba = { + prefix: 'fas', + iconName: 'kaaba', + icon: [576, 512, [], "f66b", "M554.12 83.51L318.36 4.93a95.962 95.962 0 0 0-60.71 0L21.88 83.51A32.006 32.006 0 0 0 0 113.87v49.01l265.02-79.51c15.03-4.5 30.92-4.5 45.98 0l265 79.51v-49.01c0-13.77-8.81-26-21.88-30.36zm-279.9 30.52L0 196.3v228.38c0 15 10.42 27.98 25.06 31.24l242.12 53.8a95.937 95.937 0 0 0 41.65 0l242.12-53.8c14.64-3.25 25.06-16.24 25.06-31.24V196.29l-274.2-82.26c-9.04-2.72-18.59-2.72-27.59 0zM128 230.11c0 3.61-2.41 6.77-5.89 7.72l-80 21.82C37.02 261.03 32 257.2 32 251.93v-16.58c0-3.61 2.41-6.77 5.89-7.72l80-21.82c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm144-39.28c0 3.61-2.41 6.77-5.89 7.72l-96 26.18c-5.09 1.39-10.11-2.44-10.11-7.72v-16.58c0-3.61 2.41-6.77 5.89-7.72l96-26.18c5.09-1.39 10.11 2.44 10.11 7.72v16.58zm176 22.7c0-5.28 5.02-9.11 10.11-7.72l80 21.82c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-80-21.82a7.997 7.997 0 0 1-5.89-7.72v-16.58zm-144-39.27c0-5.28 5.02-9.11 10.11-7.72l96 26.18c3.48.95 5.89 4.11 5.89 7.72v16.58c0 5.28-5.02 9.11-10.11 7.72l-96-26.18a7.997 7.997 0 0 1-5.89-7.72v-16.58z"] +}; +var faKey = { + prefix: 'fas', + iconName: 'key', + icon: [512, 512, [], "f084", "M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z"] +}; +var faKeyboard = { + prefix: 'fas', + iconName: 'keyboard', + icon: [576, 512, [], "f11c", "M528 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM128 180v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H172c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"] +}; +var faKhanda = { + prefix: 'fas', + iconName: 'khanda', + icon: [512, 512, [], "f66d", "M415.81 66c-6.37-3.5-14.37-2.33-19.36 3.02a15.974 15.974 0 0 0-1.91 19.52c16.49 26.16 25.2 56.39 25.2 87.41-.19 53.25-26.77 102.69-71.27 132.41l-76.63 53.35v-20.1l44.05-36.09c3.92-4.2 5-10.09 2.81-15.28L310.85 273c33.84-19.26 56.94-55.25 56.94-96.99 0-40.79-22.02-76.13-54.59-95.71l5.22-11.44c2.34-5.53.93-11.83-3.57-16.04L255.86 0l-58.99 52.81c-4.5 4.21-5.9 10.51-3.57 16.04l5.22 11.44c-32.57 19.58-54.59 54.93-54.59 95.72 0 41.75 23.09 77.73 56.94 96.99l-7.85 17.24c-2.19 5.18-1.1 11.07 2.81 15.28l44.05 36.09v19.9l-76.59-53.33C119.02 278.62 92.44 229.19 92.26 176c0-31.08 8.71-61.31 25.2-87.47 3.87-6.16 2.4-13.77-2.59-19.08-5-5.34-13.68-6.2-20.02-2.7C16.32 109.6-22.3 205.3 13.36 295.99c7.07 17.99 17.89 34.38 30.46 49.06l55.97 65.36c4.87 5.69 13.04 7.24 19.65 3.72l79.35-42.23L228 392.23l-47.08 32.78c-1.67-.37-3.23-1.01-5.01-1.01-13.25 0-23.99 10.74-23.99 24 0 13.25 10.74 24 23.99 24 12.1 0 21.69-9.11 23.33-20.76l40.63-28.28v29.95c-9.39 5.57-15.99 15.38-15.99 27.1 0 17.67 14.32 32 31.98 32s31.98-14.33 31.98-32c0-11.71-6.61-21.52-15.99-27.1v-30.15l40.91 28.48C314.41 462.89 324 472 336.09 472c13.25 0 23.99-10.75 23.99-24 0-13.26-10.74-24-23.99-24-1.78 0-3.34.64-5.01 1.01L284 392.23l29.21-20.34 79.35 42.23c6.61 3.52 14.78 1.97 19.65-3.71l52.51-61.31c18.87-22.02 34-47.5 41.25-75.59 21.62-83.66-16.45-167.27-90.16-207.51zm-95.99 110c0 22.3-11.49 41.92-28.83 53.38l-5.65-12.41c-8.75-24.52-8.75-51.04 0-75.56l7.83-17.18c16.07 11.65 26.65 30.45 26.65 51.77zm-127.93 0c0-21.32 10.58-40.12 26.66-51.76l7.83 17.18c8.75 24.52 8.75 51.03 0 75.56l-5.65 12.41c-17.34-11.46-28.84-31.09-28.84-53.39z"] +}; +var faKiss = { + prefix: 'fas', + iconName: 'kiss', + icon: [496, 512, [], "f596", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm136 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm24-156c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faKissBeam = { + prefix: 'fas', + iconName: 'kiss-beam', + icon: [496, 512, [], "f597", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-39 219.9l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5zM304 396c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-6.1-12.2 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.6-3.6-4.8-16.5 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C290.6 368.7 304 383 304 396zm65-168.1l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.5 8.5-10.9 12-15.1 4.5z"] +}; +var faKissWinkHeart = { + prefix: 'fas', + iconName: 'kiss-wink-heart', + icon: [504, 512, [], "f598", "M501.1 402.5c-8-20.8-31.5-31.5-53.1-25.9l-8.4 2.2-2.3-8.4c-5.9-21.4-27-36.5-49-33-25.2 4-40.6 28.6-34 52.6l22.9 82.6c1.5 5.3 7 8.5 12.4 7.1l83-21.5c24.1-6.3 37.7-31.8 28.5-55.7zm-177.6-4c-5.6-20.3-2.3-42 9-59.7 29.7-46.3 98.7-45.5 127.8 4.3 6.4.1 12.6 1.4 18.6 2.9 10.9-27.9 17.1-58.2 17.1-90C496 119 385 8 248 8S0 119 0 256s111 248 248 248c35.4 0 68.9-7.5 99.4-20.9-.3-.7-23.9-84.6-23.9-84.6zM168 240c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm120 156c0 19.2-28.7 41.5-71.5 44-8.5.8-12.1-11.8-3.6-15.4l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-6-2.5-5.7-12.3 0-14.8l17-7.2c13-5.5 20.8-13.5 20.8-21.5s-7.8-16-20.8-21.5l-17-7.2c-8.8-3.7-4.6-16.6 3.6-15.4 42.8 2.5 71.5 24.8 71.5 44 0 13-13.4 27.3-35.2 36C274.6 368.7 288 383 288 396zm16-179c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S400 181 404 206.2c1.7 11.1-11.3 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 217z"] +}; +var faKiwiBird = { + prefix: 'fas', + iconName: 'kiwi-bird', + icon: [576, 512, [], "f535", "M575.81 217.98C572.64 157.41 518.28 112 457.63 112h-9.37c-52.82 0-104.25-16.25-147.74-46.24-41.99-28.96-96.04-41.62-153.21-28.7C129.3 41.12-.08 78.24 0 224c.04 70.95 38.68 132.8 95.99 166.01V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-54.26c15.36 3.96 31.4 6.26 48 6.26 5.44 0 10.68-.73 16-1.18V464c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-59.43c14.24-5.06 27.88-11.39 40.34-19.51C342.07 355.25 393.86 336 448.46 336c25.48 0 16.01-.31 23.05-.78l74.41 136.44c2.86 5.23 8.3 8.34 14.05 8.34 1.31 0 2.64-.16 3.95-.5 7.09-1.8 12.05-8.19 12.05-15.5 0 0 .14-240.24-.16-246.02zM463.97 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm80 153.25l-39.86-73.08c15.12-5.83 28.73-14.6 39.86-25.98v99.06z"] +}; +var faLandmark = { + prefix: 'fas', + iconName: 'landmark', + icon: [512, 512, [], "f66f", "M501.62 92.11L267.24 2.04a31.958 31.958 0 0 0-22.47 0L10.38 92.11A16.001 16.001 0 0 0 0 107.09V144c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-36.91c0-6.67-4.14-12.64-10.38-14.98zM64 192v160H48c-8.84 0-16 7.16-16 16v48h448v-48c0-8.84-7.16-16-16-16h-16V192h-64v160h-96V192h-64v160h-96V192H64zm432 256H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"] +}; +var faLanguage = { + prefix: 'fas', + iconName: 'language', + icon: [640, 512, [], "f1ab", "M152.1 236.2c-3.5-12.1-7.8-33.2-7.8-33.2h-.5s-4.3 21.1-7.8 33.2l-11.1 37.5H163zM616 96H336v320h280c13.3 0 24-10.7 24-24V120c0-13.3-10.7-24-24-24zm-24 120c0 6.6-5.4 12-12 12h-11.4c-6.9 23.6-21.7 47.4-42.7 69.9 8.4 6.4 17.1 12.5 26.1 18 5.5 3.4 7.3 10.5 4.1 16.2l-7.9 13.9c-3.4 5.9-10.9 7.8-16.7 4.3-12.6-7.8-24.5-16.1-35.4-24.9-10.9 8.7-22.7 17.1-35.4 24.9-5.8 3.5-13.3 1.6-16.7-4.3l-7.9-13.9c-3.2-5.6-1.4-12.8 4.2-16.2 9.3-5.7 18-11.7 26.1-18-7.9-8.4-14.9-17-21-25.7-4-5.7-2.2-13.6 3.7-17.1l6.5-3.9 7.3-4.3c5.4-3.2 12.4-1.7 16 3.4 5 7 10.8 14 17.4 20.9 13.5-14.2 23.8-28.9 30-43.2H412c-6.6 0-12-5.4-12-12v-16c0-6.6 5.4-12 12-12h64v-16c0-6.6 5.4-12 12-12h16c6.6 0 12 5.4 12 12v16h64c6.6 0 12 5.4 12 12zM0 120v272c0 13.3 10.7 24 24 24h280V96H24c-13.3 0-24 10.7-24 24zm58.9 216.1L116.4 167c1.7-4.9 6.2-8.1 11.4-8.1h32.5c5.1 0 9.7 3.3 11.4 8.1l57.5 169.1c2.6 7.8-3.1 15.9-11.4 15.9h-22.9a12 12 0 0 1-11.5-8.6l-9.4-31.9h-60.2l-9.1 31.8c-1.5 5.1-6.2 8.7-11.5 8.7H70.3c-8.2 0-14-8.1-11.4-15.9z"] +}; +var faLaptop = { + prefix: 'fas', + iconName: 'laptop', + icon: [640, 512, [], "f109", "M624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"] +}; +var faLaptopCode = { + prefix: 'fas', + iconName: 'laptop-code', + icon: [640, 512, [], "f5fc", "M255.03 261.65c6.25 6.25 16.38 6.25 22.63 0l11.31-11.31c6.25-6.25 6.25-16.38 0-22.63L253.25 192l35.71-35.72c6.25-6.25 6.25-16.38 0-22.63l-11.31-11.31c-6.25-6.25-16.38-6.25-22.63 0l-58.34 58.34c-6.25 6.25-6.25 16.38 0 22.63l58.35 58.34zm96.01-11.3l11.31 11.31c6.25 6.25 16.38 6.25 22.63 0l58.34-58.34c6.25-6.25 6.25-16.38 0-22.63l-58.34-58.34c-6.25-6.25-16.38-6.25-22.63 0l-11.31 11.31c-6.25 6.25-6.25 16.38 0 22.63L386.75 192l-35.71 35.72c-6.25 6.25-6.25 16.38 0 22.63zM624 416H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33.02-17.47-32.77-32H16c-8.8 0-16 7.2-16 16v16c0 35.2 28.8 64 64 64h512c35.2 0 64-28.8 64-64v-16c0-8.8-7.2-16-16-16zM576 48c0-26.4-21.6-48-48-48H112C85.6 0 64 21.6 64 48v336h512V48zm-64 272H128V64h384v256z"] +}; +var faLaptopHouse = { + prefix: 'fas', + iconName: 'laptop-house', + icon: [640, 512, [], "e066", "M272,288H208a16,16,0,0,1-16-16V208a16,16,0,0,1,16-16h64a16,16,0,0,1,16,16v37.12C299.11,232.24,315,224,332.8,224H469.74l6.65-7.53A16.51,16.51,0,0,0,480,207a16.31,16.31,0,0,0-4.75-10.61L416,144V48a16,16,0,0,0-16-16H368a16,16,0,0,0-16,16V87.3L263.5,8.92C258,4,247.45,0,240.05,0s-17.93,4-23.47,8.92L4.78,196.42A16.15,16.15,0,0,0,0,207a16.4,16.4,0,0,0,3.55,9.39L22.34,237.7A16.22,16.22,0,0,0,33,242.48,16.51,16.51,0,0,0,42.34,239L64,219.88V384a32,32,0,0,0,32,32H272ZM629.33,448H592V288c0-17.67-12.89-32-28.8-32H332.8c-15.91,0-28.8,14.33-28.8,32V448H266.67A10.67,10.67,0,0,0,256,458.67v10.66A42.82,42.82,0,0,0,298.6,512H597.4A42.82,42.82,0,0,0,640,469.33V458.67A10.67,10.67,0,0,0,629.33,448ZM544,448H352V304H544Z"] +}; +var faLaptopMedical = { + prefix: 'fas', + iconName: 'laptop-medical', + icon: [640, 512, [], "f812", "M232 224h56v56a8 8 0 0 0 8 8h48a8 8 0 0 0 8-8v-56h56a8 8 0 0 0 8-8v-48a8 8 0 0 0-8-8h-56v-56a8 8 0 0 0-8-8h-48a8 8 0 0 0-8 8v56h-56a8 8 0 0 0-8 8v48a8 8 0 0 0 8 8zM576 48a48.14 48.14 0 0 0-48-48H112a48.14 48.14 0 0 0-48 48v336h512zm-64 272H128V64h384zm112 96H381.54c-.74 19.81-14.71 32-32.74 32H288c-18.69 0-33-17.47-32.77-32H16a16 16 0 0 0-16 16v16a64.19 64.19 0 0 0 64 64h512a64.19 64.19 0 0 0 64-64v-16a16 16 0 0 0-16-16z"] +}; +var faLaugh = { + prefix: 'fas', + iconName: 'laugh', + icon: [496, 512, [], "f599", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 152c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm88 272h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18-8.9 71-69.5 126-142.9 126z"] +}; +var faLaughBeam = { + prefix: 'fas', + iconName: 'laugh-beam', + icon: [496, 512, [], "f59a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm24 199.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.2 7.4-15.8 4.1-15.1-4.5zm-160 0c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"] +}; +var faLaughSquint = { + prefix: 'fas', + iconName: 'laugh-squint', + icon: [496, 512, [], "f59b", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 161.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 180l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM398.9 306C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"] +}; +var faLaughWink = { + prefix: 'fas', + iconName: 'laugh-wink', + icon: [496, 512, [], "f59c", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm20.1 198.1c4-25.2 34.2-42.1 59.9-42.1s55.9 16.9 59.9 42.1c1.7 11.1-11.4 18.3-19.8 10.8l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L288 217c-8.4 7.4-21.6.3-19.9-10.9zM168 160c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm230.9 146C390 377 329.4 432 256 432h-16c-73.4 0-134-55-142.9-126-1.2-9.5 6.3-18 15.9-18h270c9.6 0 17.1 8.4 15.9 18z"] +}; +var faLayerGroup = { + prefix: 'fas', + iconName: 'layer-group', + icon: [512, 512, [], "f5fd", "M12.41 148.02l232.94 105.67c6.8 3.09 14.49 3.09 21.29 0l232.94-105.67c16.55-7.51 16.55-32.52 0-40.03L266.65 2.31a25.607 25.607 0 0 0-21.29 0L12.41 107.98c-16.55 7.51-16.55 32.53 0 40.04zm487.18 88.28l-58.09-26.33-161.64 73.27c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.51 209.97l-58.1 26.33c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 276.3c16.55-7.5 16.55-32.5 0-40zm0 127.8l-57.87-26.23-161.86 73.37c-7.56 3.43-15.59 5.17-23.86 5.17s-16.29-1.74-23.86-5.17L70.29 337.87 12.41 364.1c-16.55 7.5-16.55 32.5 0 40l232.94 105.59c6.8 3.08 14.49 3.08 21.29 0L499.59 404.1c16.55-7.5 16.55-32.5 0-40z"] +}; +var faLeaf = { + prefix: 'fas', + iconName: 'leaf', + icon: [576, 512, [], "f06c", "M546.2 9.7c-5.6-12.5-21.6-13-28.3-1.2C486.9 62.4 431.4 96 368 96h-80C182 96 96 182 96 288c0 7 .8 13.7 1.5 20.5C161.3 262.8 253.4 224 384 224c8.8 0 16 7.2 16 16s-7.2 16-16 16C132.6 256 26 410.1 2.4 468c-6.6 16.3 1.2 34.9 17.5 41.6 16.4 6.8 35-1.1 41.8-17.3 1.5-3.6 20.9-47.9 71.9-90.6 32.4 43.9 94 85.8 174.9 77.2C465.5 467.5 576 326.7 576 154.3c0-50.2-10.8-102.2-29.8-144.6z"] +}; +var faLemon = { + prefix: 'fas', + iconName: 'lemon', + icon: [512, 512, [], "f094", "M489.038 22.963C465.944-.13 434.648-5.93 413.947 6.129c-58.906 34.312-181.25-53.077-321.073 86.746S40.441 355.041 6.129 413.945c-12.059 20.702-6.26 51.999 16.833 75.093 23.095 23.095 54.392 28.891 75.095 16.832 58.901-34.31 181.246 53.079 321.068-86.743S471.56 156.96 505.871 98.056c12.059-20.702 6.261-51.999-16.833-75.093zM243.881 95.522c-58.189 14.547-133.808 90.155-148.358 148.358-1.817 7.27-8.342 12.124-15.511 12.124-1.284 0-2.59-.156-3.893-.481-8.572-2.144-13.784-10.83-11.642-19.403C81.901 166.427 166.316 81.93 236.119 64.478c8.575-2.143 17.261 3.069 19.403 11.642s-3.069 17.259-11.641 19.402z"] +}; +var faLessThan = { + prefix: 'fas', + iconName: 'less-than', + icon: [384, 512, [], "f536", "M365.46 357.74L147.04 255.89l218.47-101.88c16.02-7.47 22.95-26.51 15.48-42.53l-13.52-29C360 66.46 340.96 59.53 324.94 67L18.48 209.91a32.014 32.014 0 0 0-18.48 29v34.24c0 12.44 7.21 23.75 18.48 29l306.31 142.83c16.06 7.49 35.15.54 42.64-15.52l13.56-29.08c7.49-16.06.54-35.15-15.53-42.64z"] +}; +var faLessThanEqual = { + prefix: 'fas', + iconName: 'less-than-equal', + icon: [448, 512, [], "f537", "M54.98 214.2l301.41 119.87c18.39 6.03 38.71-2.54 45.38-19.15l12.09-30.08c6.68-16.61-2.82-34.97-21.21-41l-175.44-68.05 175.56-68.09c18.29-6 27.74-24.27 21.1-40.79l-12.03-29.92c-6.64-16.53-26.86-25.06-45.15-19.06L54.98 137.89C41.21 142.41 32 154.5 32 168.07v15.96c0 13.56 9.21 25.65 22.98 30.17zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z"] +}; +var faLevelDownAlt = { + prefix: 'fas', + iconName: 'level-down-alt', + icon: [320, 512, [], "f3be", "M313.553 392.331L209.587 504.334c-9.485 10.214-25.676 10.229-35.174 0L70.438 392.331C56.232 377.031 67.062 352 88.025 352H152V80H68.024a11.996 11.996 0 0 1-8.485-3.515l-56-56C-4.021 12.926 1.333 0 12.024 0H208c13.255 0 24 10.745 24 24v328h63.966c20.878 0 31.851 24.969 17.587 40.331z"] +}; +var faLevelUpAlt = { + prefix: 'fas', + iconName: 'level-up-alt', + icon: [320, 512, [], "f3bf", "M313.553 119.669L209.587 7.666c-9.485-10.214-25.676-10.229-35.174 0L70.438 119.669C56.232 134.969 67.062 160 88.025 160H152v272H68.024a11.996 11.996 0 0 0-8.485 3.515l-56 56C-4.021 499.074 1.333 512 12.024 512H208c13.255 0 24-10.745 24-24V160h63.966c20.878 0 31.851-24.969 17.587-40.331z"] +}; +var faLifeRing = { + prefix: 'fas', + iconName: 'life-ring', + icon: [512, 512, [], "f1cd", "M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm173.696 119.559l-63.399 63.399c-10.987-18.559-26.67-34.252-45.255-45.255l63.399-63.399a218.396 218.396 0 0 1 45.255 45.255zM256 352c-53.019 0-96-42.981-96-96s42.981-96 96-96 96 42.981 96 96-42.981 96-96 96zM127.559 82.304l63.399 63.399c-18.559 10.987-34.252 26.67-45.255 45.255l-63.399-63.399a218.372 218.372 0 0 1 45.255-45.255zM82.304 384.441l63.399-63.399c10.987 18.559 26.67 34.252 45.255 45.255l-63.399 63.399a218.396 218.396 0 0 1-45.255-45.255zm302.137 45.255l-63.399-63.399c18.559-10.987 34.252-26.67 45.255-45.255l63.399 63.399a218.403 218.403 0 0 1-45.255 45.255z"] +}; +var faLightbulb = { + prefix: 'fas', + iconName: 'lightbulb', + icon: [352, 512, [], "f0eb", "M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z"] +}; +var faLink = { + prefix: 'fas', + iconName: 'link', + icon: [512, 512, [], "f0c1", "M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"] +}; +var faLiraSign = { + prefix: 'fas', + iconName: 'lira-sign', + icon: [384, 512, [], "f195", "M371.994 256h-48.019C317.64 256 312 260.912 312 267.246 312 368 230.179 416 144 416V256.781l134.603-29.912A12 12 0 0 0 288 215.155v-40.976c0-7.677-7.109-13.38-14.603-11.714L144 191.219V160.78l134.603-29.912A12 12 0 0 0 288 119.154V78.179c0-7.677-7.109-13.38-14.603-11.714L144 95.219V44c0-6.627-5.373-12-12-12H76c-6.627 0-12 5.373-12 12v68.997L9.397 125.131A12 12 0 0 0 0 136.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 178.558v30.439L9.397 221.131A12 12 0 0 0 0 232.845v40.976c0 7.677 7.109 13.38 14.603 11.714L64 274.558V468c0 6.627 5.373 12 12 12h79.583c134.091 0 223.255-77.834 228.408-211.592.261-6.782-5.211-12.408-11.997-12.408z"] +}; +var faList = { + prefix: 'fas', + iconName: 'list', + icon: [512, 512, [], "f03a", "M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faListAlt = { + prefix: 'fas', + iconName: 'list-alt', + icon: [512, 512, [], "f022", "M464 480H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v352c0 26.51-21.49 48-48 48zM128 120c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm0 96c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zm288-136v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12zm0 96v-32c0-6.627-5.373-12-12-12H204c-6.627 0-12 5.373-12 12v32c0 6.627 5.373 12 12 12h200c6.627 0 12-5.373 12-12z"] +}; +var faListOl = { + prefix: 'fas', + iconName: 'list-ol', + icon: [512, 512, [], "f0cb", "M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"] +}; +var faListUl = { + prefix: 'fas', + iconName: 'list-ul', + icon: [512, 512, [], "f0ca", "M48 48a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm0 160a48 48 0 1 0 48 48 48 48 0 0 0-48-48zm448 16H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faLocationArrow = { + prefix: 'fas', + iconName: 'location-arrow', + icon: [512, 512, [], "f124", "M444.52 3.52L28.74 195.42c-47.97 22.39-31.98 92.75 19.19 92.75h175.91v175.91c0 51.17 70.36 67.17 92.75 19.19l191.9-415.78c15.99-38.39-25.59-79.97-63.97-63.97z"] +}; +var faLock = { + prefix: 'fas', + iconName: 'lock', + icon: [448, 512, [], "f023", "M400 224h-24v-72C376 68.2 307.8 0 224 0S72 68.2 72 152v72H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48zm-104 0H152v-72c0-39.7 32.3-72 72-72s72 32.3 72 72v72z"] +}; +var faLockOpen = { + prefix: 'fas', + iconName: 'lock-open', + icon: [576, 512, [], "f3c1", "M423.5 0C339.5.3 272 69.5 272 153.5V224H48c-26.5 0-48 21.5-48 48v192c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V272c0-26.5-21.5-48-48-48h-48v-71.1c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v80c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-80C576 68 507.5-.3 423.5 0z"] +}; +var faLongArrowAltDown = { + prefix: 'fas', + iconName: 'long-arrow-alt-down', + icon: [256, 512, [], "f309", "M168 345.941V44c0-6.627-5.373-12-12-12h-56c-6.627 0-12 5.373-12 12v301.941H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.569 9.373 33.941 0l86.059-86.059c15.119-15.119 4.411-40.971-16.971-40.971H168z"] +}; +var faLongArrowAltLeft = { + prefix: 'fas', + iconName: 'long-arrow-alt-left', + icon: [448, 512, [], "f30a", "M134.059 296H436c6.627 0 12-5.373 12-12v-56c0-6.627-5.373-12-12-12H134.059v-46.059c0-21.382-25.851-32.09-40.971-16.971L7.029 239.029c-9.373 9.373-9.373 24.569 0 33.941l86.059 86.059c15.119 15.119 40.971 4.411 40.971-16.971V296z"] +}; +var faLongArrowAltRight = { + prefix: 'fas', + iconName: 'long-arrow-alt-right', + icon: [448, 512, [], "f30b", "M313.941 216H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h301.941v46.059c0 21.382 25.851 32.09 40.971 16.971l86.059-86.059c9.373-9.373 9.373-24.569 0-33.941l-86.059-86.059c-15.119-15.119-40.971-4.411-40.971 16.971V216z"] +}; +var faLongArrowAltUp = { + prefix: 'fas', + iconName: 'long-arrow-alt-up', + icon: [256, 512, [], "f30c", "M88 166.059V468c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12V166.059h46.059c21.382 0 32.09-25.851 16.971-40.971l-86.059-86.059c-9.373-9.373-24.569-9.373-33.941 0l-86.059 86.059c-15.119 15.119-4.411 40.971 16.971 40.971H88z"] +}; +var faLowVision = { + prefix: 'fas', + iconName: 'low-vision', + icon: [576, 512, [], "f2a8", "M569.344 231.631C512.96 135.949 407.81 72 288 72c-28.468 0-56.102 3.619-82.451 10.409L152.778 10.24c-7.601-10.858-22.564-13.5-33.423-5.9l-13.114 9.178c-10.86 7.601-13.502 22.566-5.9 33.426l43.131 58.395C89.449 131.73 40.228 174.683 6.682 231.581c-.01.017-.023.033-.034.05-8.765 14.875-8.964 33.528 0 48.739 38.5 65.332 99.742 115.862 172.859 141.349L55.316 244.302A272.194 272.194 0 0 1 83.61 208.39l119.4 170.58h.01l40.63 58.04a330.055 330.055 0 0 0 78.94 1.17l-189.98-271.4a277.628 277.628 0 0 1 38.777-21.563l251.836 356.544c7.601 10.858 22.564 13.499 33.423 5.9l13.114-9.178c10.86-7.601 13.502-22.567 5.9-33.426l-43.12-58.377-.007-.009c57.161-27.978 104.835-72.04 136.81-126.301a47.938 47.938 0 0 0 .001-48.739zM390.026 345.94l-19.066-27.23c24.682-32.567 27.711-76.353 8.8-111.68v.03c0 23.65-19.17 42.82-42.82 42.82-23.828 0-42.82-19.349-42.82-42.82 0-23.65 19.17-42.82 42.82-42.82h.03c-24.75-13.249-53.522-15.643-79.51-7.68l-19.068-27.237C253.758 123.306 270.488 120 288 120c75.162 0 136 60.826 136 136 0 34.504-12.833 65.975-33.974 89.94z"] +}; +var faLuggageCart = { + prefix: 'fas', + iconName: 'luggage-cart', + icon: [640, 512, [], "f59d", "M224 320h32V96h-32c-17.67 0-32 14.33-32 32v160c0 17.67 14.33 32 32 32zm352-32V128c0-17.67-14.33-32-32-32h-32v224h32c17.67 0 32-14.33 32-32zm48 96H128V16c0-8.84-7.16-16-16-16H16C7.16 0 0 7.16 0 16v32c0 8.84 7.16 16 16 16h48v368c0 8.84 7.16 16 16 16h82.94c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16h197.88c-1.79 5.03-2.94 10.36-2.94 16 0 26.51 21.49 48 48 48s48-21.49 48-48c0-5.64-1.15-10.97-2.94-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM480 96V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v272h192V96zm-48 0h-96V48h96v48z"] +}; +var faLungs = { + prefix: 'fas', + iconName: 'lungs', + icon: [640, 512, [], "f604", "M636.11 390.15C614.44 308.85 580.07 231 534.1 159.13 511.98 124.56 498.03 96 454.05 96 415.36 96 384 125.42 384 161.71v60.11l-32.88-21.92a15.996 15.996 0 0 1-7.12-13.31V16c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v170.59c0 5.35-2.67 10.34-7.12 13.31L256 221.82v-60.11C256 125.42 224.64 96 185.95 96c-43.98 0-57.93 28.56-80.05 63.13C59.93 231 25.56 308.85 3.89 390.15 1.3 399.84 0 409.79 0 419.78c0 61.23 62.48 105.44 125.24 88.62l59.5-15.95c42.18-11.3 71.26-47.47 71.26-88.62v-87.49l-85.84 57.23a7.992 7.992 0 0 1-11.09-2.22l-8.88-13.31a7.992 7.992 0 0 1 2.22-11.09L320 235.23l167.59 111.72a7.994 7.994 0 0 1 2.22 11.09l-8.88 13.31a7.994 7.994 0 0 1-11.09 2.22L384 316.34v87.49c0 41.15 29.08 77.31 71.26 88.62l59.5 15.95C577.52 525.22 640 481.01 640 419.78c0-9.99-1.3-19.94-3.89-29.63z"] +}; +var faLungsVirus = { + prefix: 'fas', + iconName: 'lungs-virus', + icon: [640, 512, [], "e067", "M344,150.68V16A16,16,0,0,0,328,0H312a16,16,0,0,0-16,16V150.68a46.45,46.45,0,0,1,48,0ZM195.54,444.46a48.06,48.06,0,0,1,0-67.88l8.58-8.58H192a48,48,0,0,1,0-96h12.12l-8.58-8.57a48,48,0,0,1,60.46-74V161.75C256,125.38,224.62,96,186,96c-44,0-58,28.5-80.12,63.13a819.52,819.52,0,0,0-102,231A113.16,113.16,0,0,0,0,419.75C0,481,62.5,525.26,125.25,508.38l59.5-15.87a98.51,98.51,0,0,0,52.5-34.75,46.49,46.49,0,0,1-41.71-13.3Zm226.29-22.63a16,16,0,0,0,0-22.62l-8.58-8.58C393.09,370.47,407.37,336,435.88,336H448a16,16,0,0,0,0-32H435.88c-28.51,0-42.79-34.47-22.63-54.62l8.58-8.58a16,16,0,0,0-22.63-22.63l-8.57,8.58C370.47,246.91,336,232.63,336,204.12V192a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.58c20.16,20.15,5.88,54.62-22.63,54.62H192a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.58a16,16,0,1,0,22.63,22.62l8.57-8.57C269.53,393.1,304,407.38,304,435.88V448a16,16,0,0,0,32,0V435.88c0-28.5,34.47-42.78,54.63-22.62l8.57,8.57a16,16,0,0,0,22.63,0ZM288,304a16,16,0,1,1,16-16A16,16,0,0,1,288,304Zm64,64a16,16,0,1,1,16-16A16,16,0,0,1,352,368Zm284.12,22.13a819.52,819.52,0,0,0-102-231C512,124.5,498,96,454,96c-38.62,0-70,29.38-70,65.75v27.72a48,48,0,0,1,60.46,74L435.88,272H448a48,48,0,0,1,0,96H435.88l8.58,8.58a47.7,47.7,0,0,1-41.71,81.18,98.51,98.51,0,0,0,52.5,34.75l59.5,15.87C577.5,525.26,640,481,640,419.75A113.16,113.16,0,0,0,636.12,390.13Z"] +}; +var faMagic = { + prefix: 'fas', + iconName: 'magic', + icon: [512, 512, [], "f0d0", "M224 96l16-32 32-16-32-16-16-32-16 32-32 16 32 16 16 32zM80 160l26.66-53.33L160 80l-53.34-26.67L80 0 53.34 53.33 0 80l53.34 26.67L80 160zm352 128l-26.66 53.33L352 368l53.34 26.67L432 448l26.66-53.33L512 368l-53.34-26.67L432 288zm70.62-193.77L417.77 9.38C411.53 3.12 403.34 0 395.15 0c-8.19 0-16.38 3.12-22.63 9.38L9.38 372.52c-12.5 12.5-12.5 32.76 0 45.25l84.85 84.85c6.25 6.25 14.44 9.37 22.62 9.37 8.19 0 16.38-3.12 22.63-9.37l363.14-363.15c12.5-12.48 12.5-32.75 0-45.24zM359.45 203.46l-50.91-50.91 86.6-86.6 50.91 50.91-86.6 86.6z"] +}; +var faMagnet = { + prefix: 'fas', + iconName: 'magnet', + icon: [512, 512, [], "f076", "M164.07 148.1H12a12 12 0 0 1-12-12v-80a36 36 0 0 1 36-36h104a36 36 0 0 1 36 36v80a11.89 11.89 0 0 1-11.93 12zm347.93-12V56a36 36 0 0 0-36-36H372a36 36 0 0 0-36 36v80a12 12 0 0 0 12 12h152a11.89 11.89 0 0 0 12-11.9zm-164 44a12 12 0 0 0-12 12v52c0 128.1-160 127.9-160 0v-52a12 12 0 0 0-12-12H12.1a12 12 0 0 0-12 12.1c.1 21.4.6 40.3 0 53.3 0 150.6 136.17 246.6 256.75 246.6s255-96 255-246.7c-.6-12.8-.2-33 0-53.2a12 12 0 0 0-12-12.1z"] +}; +var faMailBulk = { + prefix: 'fas', + iconName: 'mail-bulk', + icon: [576, 512, [], "f674", "M160 448c-25.6 0-51.2-22.4-64-32-64-44.8-83.2-60.8-96-70.4V480c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V345.6c-12.8 9.6-32 25.6-96 70.4-12.8 9.6-38.4 32-64 32zm128-192H32c-17.67 0-32 14.33-32 32v16c25.6 19.2 22.4 19.2 115.2 86.4 9.6 6.4 28.8 25.6 44.8 25.6s35.2-19.2 44.8-22.4c92.8-67.2 89.6-67.2 115.2-86.4V288c0-17.67-14.33-32-32-32zm256-96H224c-17.67 0-32 14.33-32 32v32h96c33.21 0 60.59 25.42 63.71 57.82l.29-.22V416h192c17.67 0 32-14.33 32-32V192c0-17.67-14.33-32-32-32zm-32 128h-64v-64h64v64zm-352-96c0-35.29 28.71-64 64-64h224V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v192h96v-32z"] +}; +var faMale = { + prefix: 'fas', + iconName: 'male', + icon: [192, 512, [], "f183", "M96 0c35.346 0 64 28.654 64 64s-28.654 64-64 64-64-28.654-64-64S60.654 0 96 0m48 144h-11.36c-22.711 10.443-49.59 10.894-73.28 0H48c-26.51 0-48 21.49-48 48v136c0 13.255 10.745 24 24 24h16v136c0 13.255 10.745 24 24 24h64c13.255 0 24-10.745 24-24V352h16c13.255 0 24-10.745 24-24V192c0-26.51-21.49-48-48-48z"] +}; +var faMap = { + prefix: 'fas', + iconName: 'map', + icon: [576, 512, [], "f279", "M0 117.66v346.32c0 11.32 11.43 19.06 21.94 14.86L160 416V32L20.12 87.95A32.006 32.006 0 0 0 0 117.66zM192 416l192 64V96L192 32v384zM554.06 33.16L416 96v384l139.88-55.95A31.996 31.996 0 0 0 576 394.34V48.02c0-11.32-11.43-19.06-21.94-14.86z"] +}; +var faMapMarked = { + prefix: 'fas', + iconName: 'map-marked', + icon: [576, 512, [], "f59f", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"] +}; +var faMapMarkedAlt = { + prefix: 'fas', + iconName: 'map-marked-alt', + icon: [576, 512, [], "f5a0", "M288 0c-69.59 0-126 56.41-126 126 0 56.26 82.35 158.8 113.9 196.02 6.39 7.54 17.82 7.54 24.2 0C331.65 284.8 414 182.26 414 126 414 56.41 357.59 0 288 0zm0 168c-23.2 0-42-18.8-42-42s18.8-42 42-42 42 18.8 42 42-18.8 42-42 42zM20.12 215.95A32.006 32.006 0 0 0 0 245.66v250.32c0 11.32 11.43 19.06 21.94 14.86L160 448V214.92c-8.84-15.98-16.07-31.54-21.25-46.42L20.12 215.95zM288 359.67c-14.07 0-27.38-6.18-36.51-16.96-19.66-23.2-40.57-49.62-59.49-76.72v182l192 64V266c-18.92 27.09-39.82 53.52-59.49 76.72-9.13 10.77-22.44 16.95-36.51 16.95zm266.06-198.51L416 224v288l139.88-55.95A31.996 31.996 0 0 0 576 426.34V176.02c0-11.32-11.43-19.06-21.94-14.86z"] +}; +var faMapMarker = { + prefix: 'fas', + iconName: 'map-marker', + icon: [384, 512, [], "f041", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0z"] +}; +var faMapMarkerAlt = { + prefix: 'fas', + iconName: 'map-marker-alt', + icon: [384, 512, [], "f3c5", "M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z"] +}; +var faMapPin = { + prefix: 'fas', + iconName: 'map-pin', + icon: [288, 512, [], "f276", "M112 316.94v156.69l22.02 33.02c4.75 7.12 15.22 7.12 19.97 0L176 473.63V316.94c-10.39 1.92-21.06 3.06-32 3.06s-21.61-1.14-32-3.06zM144 0C64.47 0 0 64.47 0 144s64.47 144 144 144 144-64.47 144-144S223.53 0 144 0zm0 76c-37.5 0-68 30.5-68 68 0 6.62-5.38 12-12 12s-12-5.38-12-12c0-50.73 41.28-92 92-92 6.62 0 12 5.38 12 12s-5.38 12-12 12z"] +}; +var faMapSigns = { + prefix: 'fas', + iconName: 'map-signs', + icon: [512, 512, [], "f277", "M507.31 84.69L464 41.37c-6-6-14.14-9.37-22.63-9.37H288V16c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v16H56c-13.25 0-24 10.75-24 24v80c0 13.25 10.75 24 24 24h385.37c8.49 0 16.62-3.37 22.63-9.37l43.31-43.31c6.25-6.26 6.25-16.38 0-22.63zM224 496c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V384h-64v112zm232-272H288v-32h-64v32H70.63c-8.49 0-16.62 3.37-22.63 9.37L4.69 276.69c-6.25 6.25-6.25 16.38 0 22.63L48 342.63c6 6 14.14 9.37 22.63 9.37H456c13.25 0 24-10.75 24-24v-80c0-13.25-10.75-24-24-24z"] +}; +var faMarker = { + prefix: 'fas', + iconName: 'marker', + icon: [512, 512, [], "f5a1", "M93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l75.4-75.4-128.02-128.02-75.4 75.4zM485.49 26.51c-35.35-35.35-92.67-35.35-128.02 0l-21.76 21.76-36.56-36.55c-15.62-15.62-40.95-15.62-56.56 0L138.47 115.84c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0l87.15-87.15 19.59 19.59L191.98 192 320 320.02l165.49-165.49c35.35-35.35 35.35-92.66 0-128.02z"] +}; +var faMars = { + prefix: 'fas', + iconName: 'mars', + icon: [384, 512, [], "f222", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c0-6.6-5.4-12-12-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faMarsDouble = { + prefix: 'fas', + iconName: 'mars-double', + icon: [512, 512, [], "f227", "M340 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C198.5 72.1 172.2 64 144 64 64.5 64 0 128.5 0 208s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.5 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 288c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80zm356-128.1h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7c-18.2-11.4-39-18.9-61.5-21.3-2.1 21.8-8.2 43.3-18.4 63.3 1.1 0 2.2-.1 3.2-.1 44.1 0 80 35.9 80 80s-35.9 80-80 80-80-35.9-80-80c0-1.1 0-2.2.1-3.2-20 10.2-41.5 16.4-63.3 18.4C168.4 455.6 229.6 512 304 512c79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12v-79c0-6.7-5.4-12.1-12-12.1z"] +}; +var faMarsStroke = { + prefix: 'fas', + iconName: 'mars-stroke', + icon: [384, 512, [], "f229", "M372 64h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-17.5 17.5-14.1-14.1c-4.7-4.7-12.3-4.7-17 0L224.5 133c-4.7 4.7-4.7 12.3 0 17l14.1 14.1-18 18c-22.2-14-48.5-22.1-76.7-22.1C64.5 160 0 224.5 0 304s64.5 144 144 144 144-64.5 144-144c0-28.2-8.1-54.5-22.1-76.7l18-18 14.1 14.1c4.7 4.7 12.3 4.7 17 0l28.3-28.3c4.7-4.7 4.7-12.3 0-17L329.2 164l17.5-17.5 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V76c-.1-6.6-5.5-12-12.1-12zM144 384c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faMarsStrokeH = { + prefix: 'fas', + iconName: 'mars-stroke-h', + icon: [480, 512, [], "f22b", "M476.2 247.5l-55.9-55.9c-7.6-7.6-20.5-2.2-20.5 8.5V224H376v-20c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v20h-27.6c-5.8-25.6-18.7-49.9-38.6-69.8C189.6 98 98.4 98 42.2 154.2c-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 19.9-19.9 32.8-44.2 38.6-69.8H312v20c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-20h23.9v23.9c0 10.7 12.9 16 20.5 8.5l55.9-55.9c4.6-4.7 4.6-12.3-.1-17zm-275.6 65.1c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"] +}; +var faMarsStrokeV = { + prefix: 'fas', + iconName: 'mars-stroke-v', + icon: [288, 512, [], "f22a", "M245.8 234.2c-19.9-19.9-44.2-32.8-69.8-38.6v-25.4h20c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-20V81.4h23.9c10.7 0 16-12.9 8.5-20.5L152.5 5.1c-4.7-4.7-12.3-4.7-17 0L79.6 61c-7.6 7.6-2.2 20.5 8.5 20.5H112v24.7H92c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h20v25.4c-25.6 5.8-49.9 18.7-69.8 38.6-56.2 56.2-56.2 147.4 0 203.6 56.2 56.2 147.4 56.2 203.6 0 56.3-56.2 56.3-147.4 0-203.6zm-45.2 158.4c-31.2 31.2-81.9 31.2-113.1 0-31.2-31.2-31.2-81.9 0-113.1 31.2-31.2 81.9-31.2 113.1 0 31.2 31.1 31.2 81.9 0 113.1z"] +}; +var faMask = { + prefix: 'fas', + iconName: 'mask', + icon: [640, 512, [], "f6fa", "M320.67 64c-442.6 0-357.57 384-158.46 384 39.9 0 77.47-20.69 101.42-55.86l25.73-37.79c15.66-22.99 46.97-22.99 62.63 0l25.73 37.79C401.66 427.31 439.23 448 479.13 448c189.86 0 290.63-384-158.46-384zM184 308.36c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05zm272 0c-41.06 0-67.76-25.66-80.08-41.05-5.23-6.53-5.23-16.09 0-22.63 12.32-15.4 39.01-41.05 80.08-41.05s67.76 25.66 80.08 41.05c5.23 6.53 5.23 16.09 0 22.63-12.32 15.4-39.02 41.05-80.08 41.05z"] +}; +var faMedal = { + prefix: 'fas', + iconName: 'medal', + icon: [512, 512, [], "f5a2", "M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z"] +}; +var faMedkit = { + prefix: 'fas', + iconName: 'medkit', + icon: [512, 512, [], "f0fa", "M96 480h320V128h-32V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v48H96v352zm96-384h128v32H192V96zm320 80v256c0 26.51-21.49 48-48 48h-16V128h16c26.51 0 48 21.49 48 48zM64 480H48c-26.51 0-48-21.49-48-48V176c0-26.51 21.49-48 48-48h16v352zm288-208v32c0 8.837-7.163 16-16 16h-48v48c0 8.837-7.163 16-16 16h-32c-8.837 0-16-7.163-16-16v-48h-48c-8.837 0-16-7.163-16-16v-32c0-8.837 7.163-16 16-16h48v-48c0-8.837 7.163-16 16-16h32c8.837 0 16 7.163 16 16v48h48c8.837 0 16 7.163 16 16z"] +}; +var faMeh = { + prefix: 'fas', + iconName: 'meh', + icon: [496, 512, [], "f11a", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm176 192H152c-21.2 0-21.2-32 0-32h192c21.2 0 21.2 32 0 32zm-16-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faMehBlank = { + prefix: 'fas', + iconName: 'meh-blank', + icon: [496, 512, [], "f5a4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm-80 232c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm160 0c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faMehRollingEyes = { + prefix: 'fas', + iconName: 'meh-rolling-eyes', + icon: [496, 512, [], "f5a5", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM88 224c0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64s-64-28.7-64-64zm224 176H184c-21.2 0-21.2-32 0-32h128c21.2 0 21.2 32 0 32zm32-112c-35.3 0-64-28.7-64-64 0-24.3 13.7-45.2 33.6-56-.7 2.6-1.6 5.2-1.6 8 0 17.7 14.3 32 32 32s32-14.3 32-32c0-2.8-.9-5.4-1.6-8 19.9 10.8 33.6 31.7 33.6 56 0 35.3-28.7 64-64 64z"] +}; +var faMemory = { + prefix: 'fas', + iconName: 'memory', + icon: [640, 512, [], "f538", "M640 130.94V96c0-17.67-14.33-32-32-32H32C14.33 64 0 78.33 0 96v34.94c18.6 6.61 32 24.19 32 45.06s-13.4 38.45-32 45.06V320h640v-98.94c-18.6-6.61-32-24.19-32-45.06s13.4-38.45 32-45.06zM224 256h-64V128h64v128zm128 0h-64V128h64v128zm128 0h-64V128h64v128zM0 448h64v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h128v-26.67c0-8.84 7.16-16 16-16s16 7.16 16 16V448h64v-96H0v96z"] +}; +var faMenorah = { + prefix: 'fas', + iconName: 'menorah', + icon: [640, 512, [], "f676", "M144 128h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm192 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm96 0h-32c-8.84 0-16 7.16-16 16v144h64V144c0-8.84-7.16-16-16-16zm80-32c17.67 0 32-14.33 32-32S608 0 608 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S512 0 512 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S416 0 416 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S320 0 320 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S224 0 224 0s-32 46.33-32 64 14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S128 0 128 0 96 46.33 96 64s14.33 32 32 32zm-96 0c17.67 0 32-14.33 32-32S32 0 32 0 0 46.33 0 64s14.33 32 32 32zm544 192c0 17.67-14.33 32-32 32H352V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v176H96c-17.67 0-32-14.33-32-32V144c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v144c0 53.02 42.98 96 96 96h192v64H112c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16H352v-64h192c53.02 0 96-42.98 96-96V144c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v144z"] +}; +var faMercury = { + prefix: 'fas', + iconName: 'mercury', + icon: [288, 512, [], "f223", "M288 208c0-44.2-19.9-83.7-51.2-110.1 2.5-1.8 4.9-3.8 7.2-5.8 24.7-21.2 39.8-48.8 43.2-78.8.9-7.1-4.7-13.3-11.9-13.3h-40.5C229 0 224.1 4.1 223 9.8c-2.4 12.5-9.6 24.3-20.7 33.8C187 56.8 166.3 64 144 64s-43-7.2-58.4-20.4C74.5 34.1 67.4 22.3 64.9 9.8 63.8 4.1 58.9 0 53.2 0H12.7C5.5 0-.1 6.2.8 13.3 4.2 43.4 19.2 71 44 92.2c2.3 2 4.7 3.9 7.2 5.8C19.9 124.3 0 163.8 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"] +}; +var faMeteor = { + prefix: 'fas', + iconName: 'meteor', + icon: [512, 512, [], "f753", "M511.328,20.8027c-11.60759,38.70264-34.30724,111.70173-61.30311,187.70077,6.99893,2.09372,13.4042,4,18.60653,5.59368a16.06158,16.06158,0,0,1,9.49854,22.906c-22.106,42.29635-82.69047,152.795-142.47819,214.40356-.99984,1.09373-1.99969,2.5-2.99954,3.49995A194.83046,194.83046,0,1,1,57.085,179.41009c.99985-1,2.40588-2,3.49947-3,61.59994-59.90549,171.97367-120.40473,214.37343-142.4982a16.058,16.058,0,0,1,22.90274,9.49988c1.59351,5.09368,3.49947,11.5936,5.5929,18.59351C379.34818,35.00565,452.43074,12.30281,491.12794.70921A16.18325,16.18325,0,0,1,511.328,20.8027ZM319.951,320.00207A127.98041,127.98041,0,1,0,191.97061,448.00046,127.97573,127.97573,0,0,0,319.951,320.00207Zm-127.98041-31.9996a31.9951,31.9951,0,1,1-31.9951-31.9996A31.959,31.959,0,0,1,191.97061,288.00247Zm31.9951,79.999a15.99755,15.99755,0,1,1-15.99755-15.9998A16.04975,16.04975,0,0,1,223.96571,368.00147Z"] +}; +var faMicrochip = { + prefix: 'fas', + iconName: 'microchip', + icon: [512, 512, [], "f2db", "M416 48v416c0 26.51-21.49 48-48 48H144c-26.51 0-48-21.49-48-48V48c0-26.51 21.49-48 48-48h224c26.51 0 48 21.49 48 48zm96 58v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42V88h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zm0 96v12a6 6 0 0 1-6 6h-18v6a6 6 0 0 1-6 6h-42v-48h42a6 6 0 0 1 6 6v6h18a6 6 0 0 1 6 6zM30 376h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6zm0-96h42v48H30a6 6 0 0 1-6-6v-6H6a6 6 0 0 1-6-6v-12a6 6 0 0 1 6-6h18v-6a6 6 0 0 1 6-6z"] +}; +var faMicrophone = { + prefix: 'fas', + iconName: 'microphone', + icon: [352, 512, [], "f130", "M176 352c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96zm160-160h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16z"] +}; +var faMicrophoneAlt = { + prefix: 'fas', + iconName: 'microphone-alt', + icon: [352, 512, [], "f3c9", "M336 192h-16c-8.84 0-16 7.16-16 16v48c0 74.8-64.49 134.82-140.79 127.38C96.71 376.89 48 317.11 48 250.3V208c0-8.84-7.16-16-16-16H16c-8.84 0-16 7.16-16 16v40.16c0 89.64 63.97 169.55 152 181.69V464H96c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16h-56v-33.77C285.71 418.47 352 344.9 352 256v-48c0-8.84-7.16-16-16-16zM176 352c53.02 0 96-42.98 96-96h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H272c0-53.02-42.98-96-96-96S80 42.98 80 96v160c0 53.02 42.98 96 96 96z"] +}; +var faMicrophoneAltSlash = { + prefix: 'fas', + iconName: 'microphone-alt-slash', + icon: [640, 512, [], "f539", "M633.82 458.1L476.26 336.33C488.74 312.21 496 284.98 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67h-43.67l-41.4-32H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416v-32h-85.33c-5.89 0-10.67-3.58-10.67-8v-16c0-4.42 4.78-8 10.67-8H416c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.78c11.71-1.62 23.1-4.28 33.96-8.08l-50.4-38.96c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"] +}; +var faMicrophoneSlash = { + prefix: 'fas', + iconName: 'microphone-slash', + icon: [640, 512, [], "f131", "M633.82 458.1l-157.8-121.96C488.61 312.13 496 285.01 496 256v-48c0-8.84-7.16-16-16-16h-16c-8.84 0-16 7.16-16 16v48c0 17.92-3.96 34.8-10.72 50.2l-26.55-20.52c3.1-9.4 5.28-19.22 5.28-29.67V96c0-53.02-42.98-96-96-96s-96 42.98-96 96v45.36L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM400 464h-56v-33.77c11.66-1.6 22.85-4.54 33.67-8.31l-50.11-38.73c-6.71.4-13.41.87-20.35.2-55.85-5.45-98.74-48.63-111.18-101.85L144 241.31v6.85c0 89.64 63.97 169.55 152 181.69V464h-56c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16z"] +}; +var faMicroscope = { + prefix: 'fas', + iconName: 'microscope', + icon: [512, 512, [], "f610", "M160 320h12v16c0 8.84 7.16 16 16 16h40c8.84 0 16-7.16 16-16v-16h12c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32V16c0-8.84-7.16-16-16-16h-64c-8.84 0-16 7.16-16 16v16c-17.67 0-32 14.33-32 32v224c0 17.67 14.33 32 32 32zm304 128h-1.29C493.24 413.99 512 369.2 512 320c0-105.88-86.12-192-192-192v64c70.58 0 128 57.42 128 128s-57.42 128-128 128H48c-26.51 0-48 21.49-48 48 0 8.84 7.16 16 16 16h480c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48zm-360-32h208c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8H104c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8z"] +}; +var faMinus = { + prefix: 'fas', + iconName: 'minus', + icon: [448, 512, [], "f068", "M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"] +}; +var faMinusCircle = { + prefix: 'fas', + iconName: 'minus-circle', + icon: [512, 512, [], "f056", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zM124 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H124z"] +}; +var faMinusSquare = { + prefix: 'fas', + iconName: 'minus-square', + icon: [448, 512, [], "f146", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM92 296c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h264c6.6 0 12 5.4 12 12v56c0 6.6-5.4 12-12 12H92z"] +}; +var faMitten = { + prefix: 'fas', + iconName: 'mitten', + icon: [448, 512, [], "f7b5", "M368 416H48c-8.8 0-16 7.2-16 16v64c0 8.8 7.2 16 16 16h320c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16zm57-209.1c-27.2-22.6-67.5-19-90.1 8.2l-20.9 25-29.6-128.4c-18-77.5-95.4-125.9-172.8-108C34.2 21.6-14.2 98.9 3.7 176.4L51.6 384h309l72.5-87c22.7-27.2 19-67.5-8.1-90.1z"] +}; +var faMobile = { + prefix: 'fas', + iconName: 'mobile', + icon: [320, 512, [], "f10b", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faMobileAlt = { + prefix: 'fas', + iconName: 'mobile-alt', + icon: [320, 512, [], "f3cd", "M272 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h224c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM160 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm112-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h200c6.6 0 12 5.4 12 12v312z"] +}; +var faMoneyBill = { + prefix: 'fas', + iconName: 'money-bill', + icon: [640, 512, [], "f0d6", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 176c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 48h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"] +}; +var faMoneyBillAlt = { + prefix: 'fas', + iconName: 'money-bill-alt', + icon: [640, 512, [], "f3d1", "M352 288h-16v-88c0-4.42-3.58-8-8-8h-13.58c-4.74 0-9.37 1.4-13.31 4.03l-15.33 10.22a7.994 7.994 0 0 0-2.22 11.09l8.88 13.31a7.994 7.994 0 0 0 11.09 2.22l.47-.31V288h-16c-4.42 0-8 3.58-8 8v16c0 4.42 3.58 8 8 8h64c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zM608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM48 400v-64c35.35 0 64 28.65 64 64H48zm0-224v-64h64c0 35.35-28.65 64-64 64zm272 192c-53.02 0-96-50.15-96-112 0-61.86 42.98-112 96-112s96 50.14 96 112c0 61.87-43 112-96 112zm272 32h-64c0-35.35 28.65-64 64-64v64zm0-224c-35.35 0-64-28.65-64-64h64v64z"] +}; +var faMoneyBillWave = { + prefix: 'fas', + iconName: 'money-bill-wave', + icon: [640, 512, [], "f53a", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM48 132.22c20.12 5.04 41.12 7.57 62.72 8.93C104.84 170.54 79 192.69 48 192.69v-60.47zm0 285v-47.78c34.37 0 62.18 27.27 63.71 61.4-22.53-1.81-43.59-6.31-63.71-13.62zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96zm272 27.78c-17.52-4.39-35.71-6.85-54.32-8.44 5.87-26.08 27.5-45.88 54.32-49.28v57.72zm0-236.11c-30.89-3.91-54.86-29.7-55.81-61.55 19.54 2.17 38.09 6.23 55.81 12.66v48.89z"] +}; +var faMoneyBillWaveAlt = { + prefix: 'fas', + iconName: 'money-bill-wave-alt', + icon: [640, 512, [], "f53b", "M621.16 54.46C582.37 38.19 543.55 32 504.75 32c-123.17-.01-246.33 62.34-369.5 62.34-30.89 0-61.76-3.92-92.65-13.72-3.47-1.1-6.95-1.62-10.35-1.62C15.04 79 0 92.32 0 110.81v317.26c0 12.63 7.23 24.6 18.84 29.46C57.63 473.81 96.45 480 135.25 480c123.17 0 246.34-62.35 369.51-62.35 30.89 0 61.76 3.92 92.65 13.72 3.47 1.1 6.95 1.62 10.35 1.62 17.21 0 32.25-13.32 32.25-31.81V83.93c-.01-12.64-7.24-24.6-18.85-29.47zM320 352c-44.19 0-80-42.99-80-96 0-53.02 35.82-96 80-96s80 42.98 80 96c0 53.03-35.83 96-80 96z"] +}; +var faMoneyCheck = { + prefix: 'fas', + iconName: 'money-check', + icon: [640, 512, [], "f53c", "M0 448c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V128H0v320zm448-208c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-32zm0 120c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H456c-4.42 0-8-3.58-8-8v-16zM64 264c0-4.42 3.58-8 8-8h304c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm0 96c0-4.42 3.58-8 8-8h176c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zM624 32H16C7.16 32 0 39.16 0 48v48h640V48c0-8.84-7.16-16-16-16z"] +}; +var faMoneyCheckAlt = { + prefix: 'fas', + iconName: 'money-check-alt', + icon: [640, 512, [], "f53d", "M608 32H32C14.33 32 0 46.33 0 64v384c0 17.67 14.33 32 32 32h576c17.67 0 32-14.33 32-32V64c0-17.67-14.33-32-32-32zM176 327.88V344c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-16.29c-11.29-.58-22.27-4.52-31.37-11.35-3.9-2.93-4.1-8.77-.57-12.14l11.75-11.21c2.77-2.64 6.89-2.76 10.13-.73 3.87 2.42 8.26 3.72 12.82 3.72h28.11c6.5 0 11.8-5.92 11.8-13.19 0-5.95-3.61-11.19-8.77-12.73l-45-13.5c-18.59-5.58-31.58-23.42-31.58-43.39 0-24.52 19.05-44.44 42.67-45.07V152c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v16.29c11.29.58 22.27 4.51 31.37 11.35 3.9 2.93 4.1 8.77.57 12.14l-11.75 11.21c-2.77 2.64-6.89 2.76-10.13.73-3.87-2.43-8.26-3.72-12.82-3.72h-28.11c-6.5 0-11.8 5.92-11.8 13.19 0 5.95 3.61 11.19 8.77 12.73l45 13.5c18.59 5.58 31.58 23.42 31.58 43.39 0 24.53-19.05 44.44-42.67 45.07zM416 312c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h112c4.42 0 8 3.58 8 8v16zm160 0c0 4.42-3.58 8-8 8h-80c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H296c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h272c4.42 0 8 3.58 8 8v16z"] +}; +var faMonument = { + prefix: 'fas', + iconName: 'monument', + icon: [384, 512, [], "f5a6", "M368 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h352c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-78.86-347.26a31.97 31.97 0 0 0-9.21-19.44L203.31 4.69c-6.25-6.25-16.38-6.25-22.63 0l-76.6 76.61a31.97 31.97 0 0 0-9.21 19.44L64 416h256l-30.86-315.26zM240 307.2c0 6.4-6.4 12.8-12.8 12.8h-70.4c-6.4 0-12.8-6.4-12.8-12.8v-38.4c0-6.4 6.4-12.8 12.8-12.8h70.4c6.4 0 12.8 6.4 12.8 12.8v38.4z"] +}; +var faMoon = { + prefix: 'fas', + iconName: 'moon', + icon: [512, 512, [], "f186", "M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"] +}; +var faMortarPestle = { + prefix: 'fas', + iconName: 'mortar-pestle', + icon: [512, 512, [], "f5a7", "M501.54 60.91c17.22-17.22 12.51-46.25-9.27-57.14a35.696 35.696 0 0 0-37.37 3.37L251.09 160h151.37l99.08-99.09zM496 192H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c0 80.98 50.2 150.11 121.13 178.32-12.76 16.87-21.72 36.8-24.95 58.69-1.46 9.92 6.04 18.98 16.07 18.98h223.5c10.03 0 17.53-9.06 16.07-18.98-3.22-21.89-12.18-41.82-24.95-58.69C429.8 406.11 480 336.98 480 256h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16z"] +}; +var faMosque = { + prefix: 'fas', + iconName: 'mosque', + icon: [640, 512, [], "f678", "M0 480c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V160H0v320zm579.16-192c17.86-17.39 28.84-37.34 28.84-58.91 0-52.86-41.79-93.79-87.92-122.9-41.94-26.47-80.63-57.77-111.96-96.22L400 0l-8.12 9.97c-31.33 38.45-70.01 69.76-111.96 96.22C233.79 135.3 192 176.23 192 229.09c0 21.57 10.98 41.52 28.84 58.91h358.32zM608 320H192c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h32v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h64v-72c0-48 48-72 48-72s48 24 48 72v72h64v-64c0-17.67 14.33-32 32-32s32 14.33 32 32v64h32c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM64 0S0 32 0 96v32h128V96c0-64-64-96-64-96z"] +}; +var faMotorcycle = { + prefix: 'fas', + iconName: 'motorcycle', + icon: [640, 512, [], "f21c", "M512.9 192c-14.9-.1-29.1 2.3-42.4 6.9L437.6 144H520c13.3 0 24-10.7 24-24V88c0-13.3-10.7-24-24-24h-45.3c-6.8 0-13.3 2.9-17.8 7.9l-37.5 41.7-22.8-38C392.2 68.4 384.4 64 376 64h-80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h66.4l19.2 32H227.9c-17.7-23.1-44.9-40-99.9-40H72.5C59 104 47.7 115 48 128.5c.2 13 10.9 23.5 24 23.5h56c24.5 0 38.7 10.9 47.8 24.8l-11.3 20.5c-13-3.9-26.9-5.7-41.3-5.2C55.9 194.5 1.6 249.6 0 317c-1.6 72.1 56.3 131 128 131 59.6 0 109.7-40.8 124-96h84.2c13.7 0 24.6-11.4 24-25.1-2.1-47.1 17.5-93.7 56.2-125l12.5 20.8c-27.6 23.7-45.1 58.9-44.8 98.2.5 69.6 57.2 126.5 126.8 127.1 71.6.7 129.8-57.5 129.2-129.1-.7-69.6-57.6-126.4-127.2-126.9zM128 400c-44.1 0-80-35.9-80-80s35.9-80 80-80c4.2 0 8.4.3 12.5 1L99 316.4c-8.8 16 2.8 35.6 21 35.6h81.3c-12.4 28.2-40.6 48-73.3 48zm463.9-75.6c-2.2 40.6-35 73.4-75.5 75.5-46.1 2.5-84.4-34.3-84.4-79.9 0-21.4 8.4-40.8 22.1-55.1l49.4 82.4c4.5 7.6 14.4 10 22 5.5l13.7-8.2c7.6-4.5 10-14.4 5.5-22l-48.6-80.9c5.2-1.1 10.5-1.6 15.9-1.6 45.6-.1 82.3 38.2 79.9 84.3z"] +}; +var faMountain = { + prefix: 'fas', + iconName: 'mountain', + icon: [640, 512, [], "f6fc", "M634.92 462.7l-288-448C341.03 5.54 330.89 0 320 0s-21.03 5.54-26.92 14.7l-288 448a32.001 32.001 0 0 0-1.17 32.64A32.004 32.004 0 0 0 32 512h576c11.71 0 22.48-6.39 28.09-16.67a31.983 31.983 0 0 0-1.17-32.63zM320 91.18L405.39 224H320l-64 64-38.06-38.06L320 91.18z"] +}; +var faMouse = { + prefix: 'fas', + iconName: 'mouse', + icon: [384, 512, [], "f8cc", "M0 352a160 160 0 0 0 160 160h64a160 160 0 0 0 160-160V224H0zM176 0h-16A160 160 0 0 0 0 160v32h176zm48 0h-16v192h176v-32A160 160 0 0 0 224 0z"] +}; +var faMousePointer = { + prefix: 'fas', + iconName: 'mouse-pointer', + icon: [320, 512, [], "f245", "M302.189 329.126H196.105l55.831 135.993c3.889 9.428-.555 19.999-9.444 23.999l-49.165 21.427c-9.165 4-19.443-.571-23.332-9.714l-53.053-129.136-86.664 89.138C18.729 472.71 0 463.554 0 447.977V18.299C0 1.899 19.921-6.096 30.277 5.443l284.412 292.542c11.472 11.179 3.007 31.141-12.5 31.141z"] +}; +var faMugHot = { + prefix: 'fas', + iconName: 'mug-hot', + icon: [512, 512, [], "f7b6", "M127.1 146.5c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C111.8 5.9 105 0 96.8 0H80.4C70.6 0 63 8.5 64.1 18c3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zm112 0c1.3 7.7 8 13.5 16 13.5h16.5c9.8 0 17.6-8.5 16.3-18-3.8-28.2-16.4-54.2-36.6-74.7-14.4-14.7-23.6-33.3-26.4-53.5C223.8 5.9 217 0 208.8 0h-16.4c-9.8 0-17.5 8.5-16.3 18 3.9 31.9 18 61.3 40.6 84.4 12 12.2 19.7 27.5 22.4 44.1zM400 192H32c-17.7 0-32 14.3-32 32v192c0 53 43 96 96 96h192c53 0 96-43 96-96h16c61.8 0 112-50.2 112-112s-50.2-112-112-112zm0 160h-16v-96h16c26.5 0 48 21.5 48 48s-21.5 48-48 48z"] +}; +var faMusic = { + prefix: 'fas', + iconName: 'music', + icon: [512, 512, [], "f001", "M470.38 1.51L150.41 96A32 32 0 0 0 128 126.51v261.41A139 139 0 0 0 96 384c-53 0-96 28.66-96 64s43 64 96 64 96-28.66 96-64V214.32l256-75v184.61a138.4 138.4 0 0 0-32-3.93c-53 0-96 28.66-96 64s43 64 96 64 96-28.65 96-64V32a32 32 0 0 0-41.62-30.49z"] +}; +var faNetworkWired = { + prefix: 'fas', + iconName: 'network-wired', + icon: [640, 512, [], "f6ff", "M640 264v-16c0-8.84-7.16-16-16-16H344v-40h72c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H224c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h72v40H16c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h104v40H64c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h304v40h-56c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h160c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32h-56v-40h104c8.84 0 16-7.16 16-16zM256 128V64h128v64H256zm-64 320H96v-64h96v64zm352 0h-96v-64h96v64z"] +}; +var faNeuter = { + prefix: 'fas', + iconName: 'neuter', + icon: [288, 512, [], "f22c", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V468c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V316.4c64.1-14.5 112-71.9 112-140.4zm-144 80c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faNewspaper = { + prefix: 'fas', + iconName: 'newspaper', + icon: [576, 512, [], "f1ea", "M552 64H88c-13.255 0-24 10.745-24 24v8H24c-13.255 0-24 10.745-24 24v272c0 30.928 25.072 56 56 56h472c26.51 0 48-21.49 48-48V88c0-13.255-10.745-24-24-24zM56 400a8 8 0 0 1-8-8V144h16v248a8 8 0 0 1-8 8zm236-16H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm-208-96H140c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm208 0H348c-6.627 0-12-5.373-12-12v-8c0-6.627 5.373-12 12-12h152c6.627 0 12 5.373 12 12v8c0 6.627-5.373 12-12 12zm0-96H140c-6.627 0-12-5.373-12-12v-40c0-6.627 5.373-12 12-12h360c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12z"] +}; +var faNotEqual = { + prefix: 'fas', + iconName: 'not-equal', + icon: [448, 512, [], "f53e", "M416 208c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32h-23.88l51.87-66.81c5.37-7.02 4.04-17.06-2.97-22.43L415.61 3.3c-7.02-5.38-17.06-4.04-22.44 2.97L311.09 112H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h204.56l-74.53 96H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h55.49l-51.87 66.81c-5.37 7.01-4.04 17.05 2.97 22.43L64 508.7c7.02 5.38 17.06 4.04 22.43-2.97L168.52 400H416c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32H243.05l74.53-96H416z"] +}; +var faNotesMedical = { + prefix: 'fas', + iconName: 'notes-medical', + icon: [384, 512, [], "f481", "M336 64h-80c0-35.3-28.7-64-64-64s-64 28.7-64 64H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V112c0-26.5-21.5-48-48-48zM192 40c13.3 0 24 10.7 24 24s-10.7 24-24 24-24-10.7-24-24 10.7-24 24-24zm96 304c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48zm0-192c0 4.4-3.6 8-8 8H104c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h176c4.4 0 8 3.6 8 8v16z"] +}; +var faObjectGroup = { + prefix: 'fas', + iconName: 'object-group', + icon: [512, 512, [], "f247", "M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"] +}; +var faObjectUngroup = { + prefix: 'fas', + iconName: 'object-ungroup', + icon: [576, 512, [], "f248", "M64 320v26a6 6 0 0 1-6 6H6a6 6 0 0 1-6-6v-52a6 6 0 0 1 6-6h26V96H6a6 6 0 0 1-6-6V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v26h288V38a6 6 0 0 1 6-6h52a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-26v192h26a6 6 0 0 1 6 6v52a6 6 0 0 1-6 6h-52a6 6 0 0 1-6-6v-26H64zm480-64v-32h26a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-52a6 6 0 0 0-6 6v26H408v72h8c13.255 0 24 10.745 24 24v64c0 13.255-10.745 24-24 24h-64c-13.255 0-24-10.745-24-24v-8H192v72h-26a6 6 0 0 0-6 6v52a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-26h288v26a6 6 0 0 0 6 6h52a6 6 0 0 0 6-6v-52a6 6 0 0 0-6-6h-26V256z"] +}; +var faOilCan = { + prefix: 'fas', + iconName: 'oil-can', + icon: [640, 512, [], "f613", "M629.8 160.31L416 224l-50.49-25.24a64.07 64.07 0 0 0-28.62-6.76H280v-48h56c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16h56v48h-56L37.72 166.86a31.9 31.9 0 0 0-5.79-.53C14.67 166.33 0 180.36 0 198.34v94.95c0 15.46 11.06 28.72 26.28 31.48L96 337.46V384c0 17.67 14.33 32 32 32h274.63c8.55 0 16.75-3.42 22.76-9.51l212.26-214.75c1.5-1.5 2.34-3.54 2.34-5.66V168c.01-5.31-5.08-9.15-10.19-7.69zM96 288.67l-48-8.73v-62.43l48 8.73v62.43zm453.33 84.66c0 23.56 19.1 42.67 42.67 42.67s42.67-19.1 42.67-42.67S592 288 592 288s-42.67 61.77-42.67 85.33z"] +}; +var faOm = { + prefix: 'fas', + iconName: 'om', + icon: [512, 512, [], "f679", "M360.6 60.94a10.43 10.43 0 0 0 14.76 0l21.57-21.56a10.43 10.43 0 0 0 0-14.76L375.35 3.06c-4.08-4.07-10.68-4.07-14.76 0l-21.57 21.56a10.43 10.43 0 0 0 0 14.76l21.58 21.56zM412.11 192c-26.69 0-51.77 10.39-70.64 29.25l-24.25 24.25c-6.78 6.77-15.78 10.5-25.38 10.5H245c10.54-22.1 14.17-48.11 7.73-75.23-10.1-42.55-46.36-76.11-89.52-83.19-36.15-5.93-70.9 5.04-96.01 28.78-7.36 6.96-6.97 18.85 1.12 24.93l26.15 19.63c5.72 4.3 13.66 4.32 19.2-.21 8.45-6.9 19.02-10.71 30.27-10.71 26.47 0 48.01 21.53 48.01 48s-21.54 48-48.01 48h-31.9c-11.96 0-19.74 12.58-14.39 23.28l16.09 32.17c2.53 5.06 7.6 8.1 13.17 8.55h33.03c35.3 0 64.01 28.7 64.01 64s-28.71 64-64.01 64c-96.02 0-122.35-54.02-145.15-92.03-4.53-7.55-14.77-3.58-14.79 5.22C-.09 416 41.13 512 159.94 512c70.59 0 128.02-57.42 128.02-128 0-23.42-6.78-45.1-17.81-64h21.69c26.69 0 51.77-10.39 70.64-29.25l24.25-24.25c6.78-6.77 15.78-10.5 25.38-10.5 19.78 0 35.88 16.09 35.88 35.88V392c0 13.23-18.77 24-32.01 24-39.4 0-66.67-24.24-81.82-42.89-4.77-5.87-14.2-2.54-14.2 5.02V416s0 64 96.02 64c48.54 0 96.02-39.47 96.02-88V291.88c0-55.08-44.8-99.88-99.89-99.88zm42.18-124.73c-85.55 65.12-169.05 2.75-172.58.05-6.02-4.62-14.44-4.38-20.14.55-5.74 4.92-7.27 13.17-3.66 19.8 1.61 2.95 40.37 72.34 118.8 72.34 79.92 0 98.78-31.36 101.75-37.66 1.02-2.12 1.53-4.47 1.53-6.83V80c0-13.22-15.14-20.69-25.7-12.73z"] +}; +var faOtter = { + prefix: 'fas', + iconName: 'otter', + icon: [640, 512, [], "f700", "M608 32h-32l-13.25-13.25A63.97 63.97 0 0 0 517.49 0H497c-11.14 0-22.08 2.91-31.75 8.43L312 96h-56C149.96 96 64 181.96 64 288v1.61c0 32.75-16 62.14-39.56 84.89-18.19 17.58-28.1 43.68-23.19 71.8 6.76 38.8 42.9 65.7 82.28 65.7H192c17.67 0 32-14.33 32-32s-14.33-32-32-32H80c-8.83 0-16-7.17-16-16s7.17-16 16-16h224c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-64l149.49-80.5L448 416h80c8.84 0 16-7.16 16-16v-16c0-17.67-14.33-32-32-32h-28.22l-55.11-110.21L521.14 192H544c53.02 0 96-42.98 96-96V64c0-17.67-14.33-32-32-32zm-96 16c8.84 0 16 7.16 16 16s-7.16 16-16 16-16-7.16-16-16 7.16-16 16-16zm32 96h-34.96L407.2 198.84l-13.77-27.55L512 112h77.05c-6.62 18.58-24.22 32-45.05 32z"] +}; +var faOutdent = { + prefix: 'fas', + iconName: 'outdent', + icon: [448, 512, [], "f03b", "M100.69 363.29c10 10 27.31 2.93 27.31-11.31V160c0-14.32-17.33-21.31-27.31-11.31l-96 96a16 16 0 0 0 0 22.62zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faPager = { + prefix: 'fas', + iconName: 'pager', + icon: [512, 512, [], "f815", "M448 64H64a64 64 0 0 0-64 64v256a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64zM160 368H80a16 16 0 0 1-16-16v-16a16 16 0 0 1 16-16h80zm128-16a16 16 0 0 1-16 16h-80v-48h80a16 16 0 0 1 16 16zm160-128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32v-64a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32z"] +}; +var faPaintBrush = { + prefix: 'fas', + iconName: 'paint-brush', + icon: [512, 512, [], "f1fc", "M167.02 309.34c-40.12 2.58-76.53 17.86-97.19 72.3-2.35 6.21-8 9.98-14.59 9.98-11.11 0-45.46-27.67-55.25-34.35C0 439.62 37.93 512 128 512c75.86 0 128-43.77 128-120.19 0-3.11-.65-6.08-.97-9.13l-88.01-73.34zM457.89 0c-15.16 0-29.37 6.71-40.21 16.45C213.27 199.05 192 203.34 192 257.09c0 13.7 3.25 26.76 8.73 38.7l63.82 53.18c7.21 1.8 14.64 3.03 22.39 3.03 62.11 0 98.11-45.47 211.16-256.46 7.38-14.35 13.9-29.85 13.9-45.99C512 20.64 486 0 457.89 0z"] +}; +var faPaintRoller = { + prefix: 'fas', + iconName: 'paint-roller', + icon: [512, 512, [], "f5aa", "M416 128V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32h352c17.67 0 32-14.33 32-32zm32-64v128c0 17.67-14.33 32-32 32H256c-35.35 0-64 28.65-64 64v32c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32v-32h160c53.02 0 96-42.98 96-96v-64c0-35.35-28.65-64-64-64z"] +}; +var faPalette = { + prefix: 'fas', + iconName: 'palette', + icon: [512, 512, [], "f53f", "M204.3 5C104.9 24.4 24.8 104.3 5.2 203.4c-37 187 131.7 326.4 258.8 306.7 41.2-6.4 61.4-54.6 42.5-91.7-23.1-45.4 9.9-98.4 60.9-98.4h79.7c35.8 0 64.8-29.6 64.9-65.3C511.5 97.1 368.1-26.9 204.3 5zM96 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm32-128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128-64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm128 64c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faPallet = { + prefix: 'fas', + iconName: 'pallet', + icon: [640, 512, [], "f482", "M144 256h352c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H384v128l-64-32-64 32V0H144c-8.8 0-16 7.2-16 16v224c0 8.8 7.2 16 16 16zm480 128c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h48v64H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16h-48v-64h48zm-336 64H128v-64h160v64zm224 0H352v-64h160v64z"] +}; +var faPaperPlane = { + prefix: 'fas', + iconName: 'paper-plane', + icon: [512, 512, [], "f1d8", "M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"] +}; +var faPaperclip = { + prefix: 'fas', + iconName: 'paperclip', + icon: [448, 512, [], "f0c6", "M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z"] +}; +var faParachuteBox = { + prefix: 'fas', + iconName: 'parachute-box', + icon: [512, 512, [], "f4cd", "M511.9 175c-9.1-75.6-78.4-132.4-158.3-158.7C390 55.7 416 116.9 416 192h28.1L327.5 321.5c-2.5-.6-4.8-1.5-7.5-1.5h-48V192h112C384 76.8 315.1 0 256 0S128 76.8 128 192h112v128h-48c-2.7 0-5 .9-7.5 1.5L67.9 192H96c0-75.1 26-136.3 62.4-175.7C78.5 42.7 9.2 99.5.1 175c-1.1 9.1 6.8 17 16 17h8.7l136.7 151.9c-.7 2.6-1.6 5.2-1.6 8.1v128c0 17.7 14.3 32 32 32h128c17.7 0 32-14.3 32-32V352c0-2.9-.9-5.4-1.6-8.1L487.1 192h8.7c9.3 0 17.2-7.8 16.1-17z"] +}; +var faParagraph = { + prefix: 'fas', + iconName: 'paragraph', + icon: [448, 512, [], "f1dd", "M448 48v32a16 16 0 0 1-16 16h-48v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V96h-32v368a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V352h-32a160 160 0 0 1 0-320h240a16 16 0 0 1 16 16z"] +}; +var faParking = { + prefix: 'fas', + iconName: 'parking', + icon: [448, 512, [], "f540", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM240 320h-48v48c0 8.8-7.2 16-16 16h-32c-8.8 0-16-7.2-16-16V144c0-8.8 7.2-16 16-16h96c52.9 0 96 43.1 96 96s-43.1 96-96 96zm0-128h-48v64h48c17.6 0 32-14.4 32-32s-14.4-32-32-32z"] +}; +var faPassport = { + prefix: 'fas', + iconName: 'passport', + icon: [448, 512, [], "f5ab", "M129.62 176h39.09c1.49-27.03 6.54-51.35 14.21-70.41-27.71 13.24-48.02 39.19-53.3 70.41zm0 32c5.29 31.22 25.59 57.17 53.3 70.41-7.68-19.06-12.72-43.38-14.21-70.41h-39.09zM224 286.69c7.69-7.45 20.77-34.42 23.43-78.69h-46.87c2.67 44.26 15.75 71.24 23.44 78.69zM200.57 176h46.87c-2.66-44.26-15.74-71.24-23.43-78.69-7.7 7.45-20.78 34.43-23.44 78.69zm64.51 102.41c27.71-13.24 48.02-39.19 53.3-70.41h-39.09c-1.49 27.03-6.53 51.35-14.21 70.41zM416 0H64C28.65 0 0 28.65 0 64v384c0 35.35 28.65 64 64 64h352c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32zm-80 416H112c-8.8 0-16-7.2-16-16s7.2-16 16-16h224c8.8 0 16 7.2 16 16s-7.2 16-16 16zm-112-96c-70.69 0-128-57.31-128-128S153.31 64 224 64s128 57.31 128 128-57.31 128-128 128zm41.08-214.41c7.68 19.06 12.72 43.38 14.21 70.41h39.09c-5.28-31.22-25.59-57.17-53.3-70.41z"] +}; +var faPastafarianism = { + prefix: 'fas', + iconName: 'pastafarianism', + icon: [640, 512, [], "f67b", "M624.54 347.67c-32.7-12.52-57.36 4.25-75.37 16.45-17.06 11.53-23.25 14.42-31.41 11.36-8.12-3.09-10.83-9.38-15.89-29.38-3.33-13.15-7.44-29.32-17.95-42.65 2.24-2.91 4.43-5.79 6.38-8.57C500.47 304.45 513.71 312 532 312c33.95 0 50.87-25.78 62.06-42.83 10.59-16.14 15-21.17 21.94-21.17 13.25 0 24-10.75 24-24s-10.75-24-24-24c-33.95 0-50.87 25.78-62.06 42.83-10.6 16.14-15 21.17-21.94 21.17-17.31 0-37.48-61.43-97.26-101.91l17.25-34.5C485.43 125.5 512 97.98 512 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 13.02 3.94 25.1 10.62 35.21l-18.15 36.3c-16.98-4.6-35.6-7.51-56.46-7.51s-39.49 2.91-56.46 7.51l-18.15-36.3C252.06 89.1 256 77.02 256 64c0-35.35-28.65-64-64-64s-64 28.65-64 64c0 33.98 26.56 61.5 60.02 63.6l17.25 34.5C145.68 202.44 125.15 264 108 264c-6.94 0-11.34-5.03-21.94-21.17C74.88 225.78 57.96 200 24 200c-13.25 0-24 10.75-24 24s10.75 24 24 24c6.94 0 11.34 5.03 21.94 21.17C57.13 286.22 74.05 312 108 312c18.29 0 31.53-7.55 41.7-17.11 1.95 2.79 4.14 5.66 6.38 8.57-10.51 13.33-14.62 29.5-17.95 42.65-5.06 20-7.77 26.28-15.89 29.38-8.11 3.06-14.33.17-31.41-11.36-18.03-12.2-42.72-28.92-75.37-16.45-12.39 4.72-18.59 18.58-13.87 30.97 4.72 12.41 18.61 18.61 30.97 13.88 8.16-3.09 14.34-.19 31.39 11.36 13.55 9.16 30.83 20.86 52.42 20.84 7.17 0 14.83-1.28 22.97-4.39 32.66-12.44 39.98-41.33 45.33-62.44 2.21-8.72 3.99-14.49 5.95-18.87 16.62 13.61 36.95 25.88 61.64 34.17-9.96 37-32.18 90.8-60.26 90.8-13.25 0-24 10.75-24 24s10.75 24 24 24c66.74 0 97.05-88.63 107.42-129.14 6.69.6 13.42 1.14 20.58 1.14s13.89-.54 20.58-1.14C350.95 423.37 381.26 512 448 512c13.25 0 24-10.75 24-24s-10.75-24-24-24c-27.94 0-50.21-53.81-60.22-90.81 24.69-8.29 45-20.56 61.62-34.16 1.96 4.38 3.74 10.15 5.95 18.87 5.34 21.11 12.67 50 45.33 62.44 8.14 3.11 15.8 4.39 22.97 4.39 21.59 0 38.87-11.69 52.42-20.84 17.05-11.55 23.28-14.45 31.39-11.36 12.39 4.75 26.27-1.47 30.97-13.88 4.71-12.4-1.49-26.26-13.89-30.98zM448 48c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16zm-256 0c8.82 0 16 7.18 16 16s-7.18 16-16 16-16-7.18-16-16 7.18-16 16-16z"] +}; +var faPaste = { + prefix: 'fas', + iconName: 'paste', + icon: [448, 512, [], "f0ea", "M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z"] +}; +var faPause = { + prefix: 'fas', + iconName: 'pause', + icon: [448, 512, [], "f04c", "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"] +}; +var faPauseCircle = { + prefix: 'fas', + iconName: 'pause-circle', + icon: [512, 512, [], "f28b", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-16 328c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160zm112 0c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16v160z"] +}; +var faPaw = { + prefix: 'fas', + iconName: 'paw', + icon: [512, 512, [], "f1b0", "M256 224c-79.41 0-192 122.76-192 200.25 0 34.9 26.81 55.75 71.74 55.75 48.84 0 81.09-25.08 120.26-25.08 39.51 0 71.85 25.08 120.26 25.08 44.93 0 71.74-20.85 71.74-55.75C448 346.76 335.41 224 256 224zm-147.28-12.61c-10.4-34.65-42.44-57.09-71.56-50.13-29.12 6.96-44.29 40.69-33.89 75.34 10.4 34.65 42.44 57.09 71.56 50.13 29.12-6.96 44.29-40.69 33.89-75.34zm84.72-20.78c30.94-8.14 46.42-49.94 34.58-93.36s-46.52-72.01-77.46-63.87-46.42 49.94-34.58 93.36c11.84 43.42 46.53 72.02 77.46 63.87zm281.39-29.34c-29.12-6.96-61.15 15.48-71.56 50.13-10.4 34.65 4.77 68.38 33.89 75.34 29.12 6.96 61.15-15.48 71.56-50.13 10.4-34.65-4.77-68.38-33.89-75.34zm-156.27 29.34c30.94 8.14 65.62-20.45 77.46-63.87 11.84-43.42-3.64-85.21-34.58-93.36s-65.62 20.45-77.46 63.87c-11.84 43.42 3.64 85.22 34.58 93.36z"] +}; +var faPeace = { + prefix: 'fas', + iconName: 'peace', + icon: [496, 512, [], "f67c", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm184 248c0 31.93-8.2 61.97-22.57 88.17L280 240.63V74.97c86.23 15.21 152 90.5 152 181.03zM216 437.03c-33.86-5.97-64.49-21.2-89.29-43.02L216 322.57v114.46zm64-114.46L369.29 394c-24.8 21.82-55.43 37.05-89.29 43.02V322.57zm-64-247.6v165.66L86.57 344.17C72.2 317.97 64 287.93 64 256c0-90.53 65.77-165.82 152-181.03z"] +}; +var faPen = { + prefix: 'fas', + iconName: 'pen', + icon: [512, 512, [], "f304", "M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"] +}; +var faPenAlt = { + prefix: 'fas', + iconName: 'pen-alt', + icon: [512, 512, [], "f305", "M497.94 74.17l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91zm-246.8-20.53c-15.62-15.62-40.94-15.62-56.56 0L75.8 172.43c-6.25 6.25-6.25 16.38 0 22.62l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l101.82-101.82 22.63 22.62L93.95 290.03A327.038 327.038 0 0 0 .17 485.11l-.03.23c-1.7 15.28 11.21 28.2 26.49 26.51a327.02 327.02 0 0 0 195.34-93.8l196.79-196.79-82.77-82.77-84.85-84.85z"] +}; +var faPenFancy = { + prefix: 'fas', + iconName: 'pen-fancy', + icon: [512, 512, [], "f5ac", "M79.18 282.94a32.005 32.005 0 0 0-20.24 20.24L0 480l4.69 4.69 92.89-92.89c-.66-2.56-1.57-5.03-1.57-7.8 0-17.67 14.33-32 32-32s32 14.33 32 32-14.33 32-32 32c-2.77 0-5.24-.91-7.8-1.57l-92.89 92.89L32 512l176.82-58.94a31.983 31.983 0 0 0 20.24-20.24l33.07-84.07-98.88-98.88-84.07 33.07zM369.25 28.32L186.14 227.81l97.85 97.85 199.49-183.11C568.4 67.48 443.73-55.94 369.25 28.32z"] +}; +var faPenNib = { + prefix: 'fas', + iconName: 'pen-nib', + icon: [512, 512, [], "f5ad", "M136.6 138.79a64.003 64.003 0 0 0-43.31 41.35L0 460l14.69 14.69L164.8 324.58c-2.99-6.26-4.8-13.18-4.8-20.58 0-26.51 21.49-48 48-48s48 21.49 48 48-21.49 48-48 48c-7.4 0-14.32-1.81-20.58-4.8L37.31 497.31 52 512l279.86-93.29a64.003 64.003 0 0 0 41.35-43.31L416 224 288 96l-151.4 42.79zm361.34-64.62l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.75 18.75-49.15 0-67.91z"] +}; +var faPenSquare = { + prefix: 'fas', + iconName: 'pen-square', + icon: [448, 512, [], "f14b", "M400 480H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zM238.1 177.9L102.4 313.6l-6.3 57.1c-.8 7.6 5.6 14.1 13.3 13.3l57.1-6.3L302.2 242c2.3-2.3 2.3-6.1 0-8.5L246.7 178c-2.5-2.4-6.3-2.4-8.6-.1zM345 165.1L314.9 135c-9.4-9.4-24.6-9.4-33.9 0l-23.1 23.1c-2.3 2.3-2.3 6.1 0 8.5l55.5 55.5c2.3 2.3 6.1 2.3 8.5 0L345 199c9.3-9.3 9.3-24.5 0-33.9z"] +}; +var faPencilAlt = { + prefix: 'fas', + iconName: 'pencil-alt', + icon: [512, 512, [], "f303", "M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z"] +}; +var faPencilRuler = { + prefix: 'fas', + iconName: 'pencil-ruler', + icon: [512, 512, [], "f5ae", "M109.46 244.04l134.58-134.56-44.12-44.12-61.68 61.68a7.919 7.919 0 0 1-11.21 0l-11.21-11.21c-3.1-3.1-3.1-8.12 0-11.21l61.68-61.68-33.64-33.65C131.47-3.1 111.39-3.1 99 9.29L9.29 99c-12.38 12.39-12.39 32.47 0 44.86l100.17 100.18zm388.47-116.8c18.76-18.76 18.75-49.17 0-67.93l-45.25-45.25c-18.76-18.76-49.18-18.76-67.95 0l-46.02 46.01 113.2 113.2 46.02-46.03zM316.08 82.71l-297 296.96L.32 487.11c-2.53 14.49 10.09 27.11 24.59 24.56l107.45-18.84L429.28 195.9 316.08 82.71zm186.63 285.43l-33.64-33.64-61.68 61.68c-3.1 3.1-8.12 3.1-11.21 0l-11.21-11.21c-3.09-3.1-3.09-8.12 0-11.21l61.68-61.68-44.14-44.14L267.93 402.5l100.21 100.2c12.39 12.39 32.47 12.39 44.86 0l89.71-89.7c12.39-12.39 12.39-32.47 0-44.86z"] +}; +var faPeopleArrows = { + prefix: 'fas', + iconName: 'people-arrows', + icon: [576, 512, [], "e068", "M96,128A64,64,0,1,0,32,64,64,64,0,0,0,96,128Zm0,176.08a44.11,44.11,0,0,1,13.64-32L181.77,204c1.65-1.55,3.77-2.31,5.61-3.57A63.91,63.91,0,0,0,128,160H64A64,64,0,0,0,0,224v96a32,32,0,0,0,32,32V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V383.61l-50.36-47.53A44.08,44.08,0,0,1,96,304.08ZM480,128a64,64,0,1,0-64-64A64,64,0,0,0,480,128Zm32,32H448a63.91,63.91,0,0,0-59.38,40.42c1.84,1.27,4,2,5.62,3.59l72.12,68.06a44.37,44.37,0,0,1,0,64L416,383.62V480a32,32,0,0,0,32,32h64a32,32,0,0,0,32-32V352a32,32,0,0,0,32-32V224A64,64,0,0,0,512,160ZM444.4,295.34l-72.12-68.06A12,12,0,0,0,352,236v36H224V236a12,12,0,0,0-20.28-8.73L131.6,295.34a12.4,12.4,0,0,0,0,17.47l72.12,68.07A12,12,0,0,0,224,372.14V336H352v36.14a12,12,0,0,0,20.28,8.74l72.12-68.07A12.4,12.4,0,0,0,444.4,295.34Z"] +}; +var faPeopleCarry = { + prefix: 'fas', + iconName: 'people-carry', + icon: [640, 512, [], "f4ce", "M128 96c26.5 0 48-21.5 48-48S154.5 0 128 0 80 21.5 80 48s21.5 48 48 48zm384 0c26.5 0 48-21.5 48-48S538.5 0 512 0s-48 21.5-48 48 21.5 48 48 48zm125.7 372.1l-44-110-41.1 46.4-2 18.2 27.7 69.2c5 12.5 17 20.1 29.7 20.1 4 0 8-.7 11.9-2.3 16.4-6.6 24.4-25.2 17.8-41.6zm-34.2-209.8L585 178.1c-4.6-20-18.6-36.8-37.5-44.9-18.5-8-39-6.7-56.1 3.3-22.7 13.4-39.7 34.5-48.1 59.4L432 229.8 416 240v-96c0-8.8-7.2-16-16-16H240c-8.8 0-16 7.2-16 16v96l-16.1-10.2-11.3-33.9c-8.3-25-25.4-46-48.1-59.4-17.2-10-37.6-11.3-56.1-3.3-18.9 8.1-32.9 24.9-37.5 44.9l-18.4 80.2c-4.6 20 .7 41.2 14.4 56.7l67.2 75.9 10.1 92.6C130 499.8 143.8 512 160 512c1.2 0 2.3-.1 3.5-.2 17.6-1.9 30.2-17.7 28.3-35.3l-10.1-92.8c-1.5-13-6.9-25.1-15.6-35l-43.3-49 17.6-70.3 6.8 20.4c4.1 12.5 11.9 23.4 24.5 32.6l51.1 32.5c4.6 2.9 12.1 4.6 17.2 5h160c5.1-.4 12.6-2.1 17.2-5l51.1-32.5c12.6-9.2 20.4-20 24.5-32.6l6.8-20.4 17.6 70.3-43.3 49c-8.7 9.9-14.1 22-15.6 35l-10.1 92.8c-1.9 17.6 10.8 33.4 28.3 35.3 1.2.1 2.3.2 3.5.2 16.1 0 30-12.1 31.8-28.5l10.1-92.6 67.2-75.9c13.6-15.5 19-36.7 14.4-56.7zM46.3 358.1l-44 110c-6.6 16.4 1.4 35 17.8 41.6 16.8 6.6 35.1-1.7 41.6-17.8l27.7-69.2-2-18.2-41.1-46.4z"] +}; +var faPepperHot = { + prefix: 'fas', + iconName: 'pepper-hot', + icon: [512, 512, [], "f816", "M330.67 263.12V173.4l-52.75-24.22C219.44 218.76 197.58 400 56 400a56 56 0 0 0 0 112c212.64 0 370.65-122.87 419.18-210.34l-37.05-38.54zm131.09-128.37C493.92 74.91 477.18 26.48 458.62 3a8 8 0 0 0-11.93-.59l-22.9 23a8.06 8.06 0 0 0-.89 10.23c6.86 10.36 17.05 35.1-1.4 72.32A142.85 142.85 0 0 0 364.34 96c-28 0-54 8.54-76.34 22.59l74.67 34.29v78.24h89.09L506.44 288c3.26-12.62 5.56-25.63 5.56-39.31a154 154 0 0 0-50.24-113.94z"] +}; +var faPercent = { + prefix: 'fas', + iconName: 'percent', + icon: [448, 512, [], "f295", "M112 224c61.9 0 112-50.1 112-112S173.9 0 112 0 0 50.1 0 112s50.1 112 112 112zm0-160c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48 21.5-48 48-48zm224 224c-61.9 0-112 50.1-112 112s50.1 112 112 112 112-50.1 112-112-50.1-112-112-112zm0 160c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zM392.3.2l31.6-.1c19.4-.1 30.9 21.8 19.7 37.8L77.4 501.6a23.95 23.95 0 0 1-19.6 10.2l-33.4.1c-19.5 0-30.9-21.9-19.7-37.8l368-463.7C377.2 4 384.5.2 392.3.2z"] +}; +var faPercentage = { + prefix: 'fas', + iconName: 'percentage', + icon: [384, 512, [], "f541", "M109.25 173.25c24.99-24.99 24.99-65.52 0-90.51-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 25 25 65.52 25 90.51 0zm256 165.49c-24.99-24.99-65.52-24.99-90.51 0-24.99 24.99-24.99 65.52 0 90.51 24.99 24.99 65.52 24.99 90.51 0 25-24.99 25-65.51 0-90.51zm-1.94-231.43l-22.62-22.62c-12.5-12.5-32.76-12.5-45.25 0L20.69 359.44c-12.5 12.5-12.5 32.76 0 45.25l22.62 22.62c12.5 12.5 32.76 12.5 45.25 0l274.75-274.75c12.5-12.49 12.5-32.75 0-45.25z"] +}; +var faPersonBooth = { + prefix: 'fas', + iconName: 'person-booth', + icon: [576, 512, [], "f756", "M192 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320h-64v176zm32-272h-50.9l-45.2-45.3C115.8 166.6 99.7 160 82.7 160H64c-17.1 0-33.2 6.7-45.3 18.8C6.7 190.9 0 207 0 224.1L.2 320 0 480c0 17.7 14.3 32 31.9 32 17.6 0 32-14.3 32-32l.1-100.7c.9.5 1.6 1.3 2.5 1.7l29.1 43v56c0 17.7 14.3 32 32 32s32-14.3 32-32v-56.5c0-9.9-2.3-19.8-6.7-28.6l-41.2-61.3V253l20.9 20.9c9.1 9.1 21.1 14.1 33.9 14.1H224c17.7 0 32-14.3 32-32s-14.3-32-32-32zM64 128c26.5 0 48-21.5 48-48S90.5 32 64 32 16 53.5 16 80s21.5 48 48 48zm224-96l31.5 223.1-30.9 154.6c-4.3 21.6 13 38.3 31.4 38.3 15.2 0 28-9.1 32.3-30.4.9 16.9 14.6 30.4 31.7 30.4 17.7 0 32-14.3 32-32 0 17.7 14.3 32 32 32s32-14.3 32-32V0H288v32zm-96 0v160h64V0h-32c-17.7 0-32 14.3-32 32zM544 0h-32v496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V32c0-17.7-14.3-32-32-32z"] +}; +var faPhone = { + prefix: 'fas', + iconName: 'phone', + icon: [512, 512, [], "f095", "M493.4 24.6l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-36 76.7-98.9 140.5-177.2 177.2l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48C3.9 366.5-2 378.1.6 389.4l24 104C27.1 504.2 36.7 512 48 512c256.1 0 464-207.5 464-464 0-11.2-7.7-20.9-18.6-23.4z"] +}; +var faPhoneAlt = { + prefix: 'fas', + iconName: 'phone-alt', + icon: [512, 512, [], "f879", "M497.39 361.8l-112-48a24 24 0 0 0-28 6.9l-49.6 60.6A370.66 370.66 0 0 1 130.6 204.11l60.6-49.6a23.94 23.94 0 0 0 6.9-28l-48-112A24.16 24.16 0 0 0 122.6.61l-104 24A24 24 0 0 0 0 48c0 256.5 207.9 464 464 464a24 24 0 0 0 23.4-18.6l24-104a24.29 24.29 0 0 0-14.01-27.6z"] +}; +var faPhoneSlash = { + prefix: 'fas', + iconName: 'phone-slash', + icon: [640, 512, [], "f3dd", "M268.2 381.4l-49.6-60.6c-6.8-8.3-18.2-11.1-28-6.9l-112 48c-10.7 4.6-16.5 16.1-13.9 27.5l24 104c2.5 10.8 12.1 18.6 23.4 18.6 100.7 0 193.7-32.4 269.7-86.9l-80-61.8c-10.9 6.5-22.1 12.7-33.6 18.1zm365.6 76.7L475.1 335.5C537.9 256.4 576 156.9 576 48c0-11.2-7.7-20.9-18.6-23.4l-104-24c-11.3-2.6-22.9 3.3-27.5 13.9l-48 112c-4.2 9.8-1.4 21.3 6.9 28l60.6 49.6c-12.2 26.1-27.9 50.3-46 72.8L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3z"] +}; +var faPhoneSquare = { + prefix: 'fas', + iconName: 'phone-square', + icon: [448, 512, [], "f098", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM94 416c-7.033 0-13.057-4.873-14.616-11.627l-14.998-65a15 15 0 0 1 8.707-17.16l69.998-29.999a15 15 0 0 1 17.518 4.289l30.997 37.885c48.944-22.963 88.297-62.858 110.781-110.78l-37.886-30.997a15.001 15.001 0 0 1-4.289-17.518l30-69.998a15 15 0 0 1 17.16-8.707l65 14.998A14.997 14.997 0 0 1 384 126c0 160.292-129.945 290-290 290z"] +}; +var faPhoneSquareAlt = { + prefix: 'fas', + iconName: 'phone-square-alt', + icon: [448, 512, [], "f87b", "M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-16.39 307.37l-15 65A15 15 0 0 1 354 416C194 416 64 286.29 64 126a15.7 15.7 0 0 1 11.63-14.61l65-15A18.23 18.23 0 0 1 144 96a16.27 16.27 0 0 1 13.79 9.09l30 70A17.9 17.9 0 0 1 189 181a17 17 0 0 1-5.5 11.61l-37.89 31a231.91 231.91 0 0 0 110.78 110.78l31-37.89A17 17 0 0 1 299 291a17.85 17.85 0 0 1 5.91 1.21l70 30A16.25 16.25 0 0 1 384 336a17.41 17.41 0 0 1-.39 3.37z"] +}; +var faPhoneVolume = { + prefix: 'fas', + iconName: 'phone-volume', + icon: [384, 512, [], "f2a0", "M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z"] +}; +var faPhotoVideo = { + prefix: 'fas', + iconName: 'photo-video', + icon: [640, 512, [], "f87c", "M608 0H160a32 32 0 0 0-32 32v96h160V64h192v320h128a32 32 0 0 0 32-32V32a32 32 0 0 0-32-32zM232 103a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm352 208a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9v-30a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm0-104a9 9 0 0 1-9 9h-30a9 9 0 0 1-9-9V73a9 9 0 0 1 9-9h30a9 9 0 0 1 9 9zm-168 57H32a32 32 0 0 0-32 32v288a32 32 0 0 0 32 32h384a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zM96 224a32 32 0 1 1-32 32 32 32 0 0 1 32-32zm288 224H64v-32l64-64 32 32 128-128 96 96z"] +}; +var faPiggyBank = { + prefix: 'fas', + iconName: 'piggy-bank', + icon: [576, 512, [], "f4d3", "M560 224h-29.5c-8.8-20-21.6-37.7-37.4-52.5L512 96h-32c-29.4 0-55.4 13.5-73 34.3-7.6-1.1-15.1-2.3-23-2.3H256c-77.4 0-141.9 55-156.8 128H56c-14.8 0-26.5-13.5-23.5-28.8C34.7 215.8 45.4 208 57 208h1c3.3 0 6-2.7 6-6v-20c0-3.3-2.7-6-6-6-28.5 0-53.9 20.4-57.5 48.6C-3.9 258.8 22.7 288 56 288h40c0 52.2 25.4 98.1 64 127.3V496c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-48h128v48c0 8.8 7.2 16 16 16h64c8.8 0 16-7.2 16-16v-80.7c11.8-8.9 22.3-19.4 31.3-31.3H560c8.8 0 16-7.2 16-16V240c0-8.8-7.2-16-16-16zm-128 64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zM256 96h128c5.4 0 10.7.4 15.9.8 0-.3.1-.5.1-.8 0-53-43-96-96-96s-96 43-96 96c0 2.1.5 4.1.6 6.2 15.2-3.9 31-6.2 47.4-6.2z"] +}; +var faPills = { + prefix: 'fas', + iconName: 'pills', + icon: [576, 512, [], "f484", "M112 32C50.1 32 0 82.1 0 144v224c0 61.9 50.1 112 112 112s112-50.1 112-112V144c0-61.9-50.1-112-112-112zm48 224H64V144c0-26.5 21.5-48 48-48s48 21.5 48 48v112zm139.7-29.7c-3.5-3.5-9.4-3.1-12.3.8-45.3 62.5-40.4 150.1 15.9 206.4 56.3 56.3 143.9 61.2 206.4 15.9 4-2.9 4.3-8.8.8-12.3L299.7 226.3zm229.8-19c-56.3-56.3-143.9-61.2-206.4-15.9-4 2.9-4.3 8.8-.8 12.3l210.8 210.8c3.5 3.5 9.4 3.1 12.3-.8 45.3-62.6 40.5-150.1-15.9-206.4z"] +}; +var faPizzaSlice = { + prefix: 'fas', + iconName: 'pizza-slice', + icon: [512, 512, [], "f818", "M158.87.15c-16.16-1.52-31.2 8.42-35.33 24.12l-14.81 56.27c187.62 5.49 314.54 130.61 322.48 317l56.94-15.78c15.72-4.36 25.49-19.68 23.62-35.9C490.89 165.08 340.78 17.32 158.87.15zm-58.47 112L.55 491.64a16.21 16.21 0 0 0 20 19.75l379-105.1c-4.27-174.89-123.08-292.14-299.15-294.1zM128 416a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm48-152a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm104 104a32 32 0 1 1 32-32 32 32 0 0 1-32 32z"] +}; +var faPlaceOfWorship = { + prefix: 'fas', + iconName: 'place-of-worship', + icon: [640, 512, [], "f67f", "M620.61 366.55L512 320v192h112c8.84 0 16-7.16 16-16V395.96a32 32 0 0 0-19.39-29.41zM0 395.96V496c0 8.84 7.16 16 16 16h112V320L19.39 366.55A32 32 0 0 0 0 395.96zm464.46-149.28L416 217.6V102.63c0-8.49-3.37-16.62-9.38-22.63L331.31 4.69c-6.25-6.25-16.38-6.25-22.62 0L233.38 80c-6 6-9.38 14.14-9.38 22.63V217.6l-48.46 29.08A31.997 31.997 0 0 0 160 274.12V512h96v-96c0-35.35 28.66-64 64-64s64 28.65 64 64v96h96V274.12c0-11.24-5.9-21.66-15.54-27.44z"] +}; +var faPlane = { + prefix: 'fas', + iconName: 'plane', + icon: [576, 512, [], "f072", "M480 192H365.71L260.61 8.06A16.014 16.014 0 0 0 246.71 0h-65.5c-10.63 0-18.3 10.17-15.38 20.39L214.86 192H112l-43.2-57.6c-3.02-4.03-7.77-6.4-12.8-6.4H16.01C5.6 128-2.04 137.78.49 147.88L32 256 .49 364.12C-2.04 374.22 5.6 384 16.01 384H56c5.04 0 9.78-2.37 12.8-6.4L112 320h102.86l-49.03 171.6c-2.92 10.22 4.75 20.4 15.38 20.4h65.5c5.74 0 11.04-3.08 13.89-8.06L365.71 320H480c35.35 0 96-28.65 96-64s-60.65-64-96-64z"] +}; +var faPlaneArrival = { + prefix: 'fas', + iconName: 'plane-arrival', + icon: [640, 512, [], "f5af", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM44.81 205.66l88.74 80a62.607 62.607 0 0 0 25.47 13.93l287.6 78.35c26.48 7.21 54.56 8.72 81 1.36 29.67-8.27 43.44-21.21 47.25-35.71 3.83-14.5-1.73-32.71-23.37-54.96-19.28-19.82-44.35-32.79-70.83-40l-97.51-26.56L282.8 30.22c-1.51-5.81-5.95-10.35-11.66-11.91L206.05.58c-10.56-2.88-20.9 5.32-20.71 16.44l47.92 164.21-102.2-27.84-27.59-67.88c-1.93-4.89-6.01-8.57-11.02-9.93L52.72 64.75c-10.34-2.82-20.53 5-20.72 15.88l.23 101.78c.19 8.91 6.03 17.34 12.58 23.25z"] +}; +var faPlaneDeparture = { + prefix: 'fas', + iconName: 'plane-departure', + icon: [640, 512, [], "f5b0", "M624 448H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h608c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM80.55 341.27c6.28 6.84 15.1 10.72 24.33 10.71l130.54-.18a65.62 65.62 0 0 0 29.64-7.12l290.96-147.65c26.74-13.57 50.71-32.94 67.02-58.31 18.31-28.48 20.3-49.09 13.07-63.65-7.21-14.57-24.74-25.27-58.25-27.45-29.85-1.94-59.54 5.92-86.28 19.48l-98.51 49.99-218.7-82.06a17.799 17.799 0 0 0-18-1.11L90.62 67.29c-10.67 5.41-13.25 19.65-5.17 28.53l156.22 98.1-103.21 52.38-72.35-36.47a17.804 17.804 0 0 0-16.07.02L9.91 230.22c-10.44 5.3-13.19 19.12-5.57 28.08l76.21 82.97z"] +}; +var faPlaneSlash = { + prefix: 'fas', + iconName: 'plane-slash', + icon: [640, 512, [], "e069", "M32.48,147.88,64,256,32.48,364.13A16,16,0,0,0,48,384H88a16,16,0,0,0,12.8-6.41L144,320H246.85l-49,171.59A16,16,0,0,0,213.2,512h65.5a16,16,0,0,0,13.89-8.06l66.6-116.54L34.35,136.34A15.47,15.47,0,0,0,32.48,147.88ZM633.82,458.09,455.14,320H512c35.34,0,96-28.66,96-64s-60.66-64-96-64H397.7L292.61,8.06C290.06,3.61,283.84,0,278.71,0H213.2a16,16,0,0,0-15.38,20.39l36.94,129.29L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09Z"] +}; +var faPlay = { + prefix: 'fas', + iconName: 'play', + icon: [448, 512, [], "f04b", "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"] +}; +var faPlayCircle = { + prefix: 'fas', + iconName: 'play-circle', + icon: [512, 512, [], "f144", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm115.7 272l-176 101c-15.8 8.8-35.7-2.5-35.7-21V152c0-18.4 19.8-29.8 35.7-21l176 107c16.4 9.2 16.4 32.9 0 42z"] +}; +var faPlug = { + prefix: 'fas', + iconName: 'plug', + icon: [384, 512, [], "f1e6", "M320,32a32,32,0,0,0-64,0v96h64Zm48,128H16A16,16,0,0,0,0,176v32a16,16,0,0,0,16,16H32v32A160.07,160.07,0,0,0,160,412.8V512h64V412.8A160.07,160.07,0,0,0,352,256V224h16a16,16,0,0,0,16-16V176A16,16,0,0,0,368,160ZM128,32a32,32,0,0,0-64,0v96h64Z"] +}; +var faPlus = { + prefix: 'fas', + iconName: 'plus', + icon: [448, 512, [], "f067", "M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z"] +}; +var faPlusCircle = { + prefix: 'fas', + iconName: 'plus-circle', + icon: [512, 512, [], "f055", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm144 276c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92h-92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"] +}; +var faPlusSquare = { + prefix: 'fas', + iconName: 'plus-square', + icon: [448, 512, [], "f0fe", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-32 252c0 6.6-5.4 12-12 12h-92v92c0 6.6-5.4 12-12 12h-56c-6.6 0-12-5.4-12-12v-92H92c-6.6 0-12-5.4-12-12v-56c0-6.6 5.4-12 12-12h92v-92c0-6.6 5.4-12 12-12h56c6.6 0 12 5.4 12 12v92h92c6.6 0 12 5.4 12 12v56z"] +}; +var faPodcast = { + prefix: 'fas', + iconName: 'podcast', + icon: [448, 512, [], "f2ce", "M267.429 488.563C262.286 507.573 242.858 512 224 512c-18.857 0-38.286-4.427-43.428-23.437C172.927 460.134 160 388.898 160 355.75c0-35.156 31.142-43.75 64-43.75s64 8.594 64 43.75c0 32.949-12.871 104.179-20.571 132.813zM156.867 288.554c-18.693-18.308-29.958-44.173-28.784-72.599 2.054-49.724 42.395-89.956 92.124-91.881C274.862 121.958 320 165.807 320 220c0 26.827-11.064 51.116-28.866 68.552-2.675 2.62-2.401 6.986.628 9.187 9.312 6.765 16.46 15.343 21.234 25.363 1.741 3.654 6.497 4.66 9.449 1.891 28.826-27.043 46.553-65.783 45.511-108.565-1.855-76.206-63.595-138.208-139.793-140.369C146.869 73.753 80 139.215 80 220c0 41.361 17.532 78.7 45.55 104.989 2.953 2.771 7.711 1.77 9.453-1.887 4.774-10.021 11.923-18.598 21.235-25.363 3.029-2.2 3.304-6.566.629-9.185zM224 0C100.204 0 0 100.185 0 224c0 89.992 52.602 165.647 125.739 201.408 4.333 2.118 9.267-1.544 8.535-6.31-2.382-15.512-4.342-30.946-5.406-44.339-.146-1.836-1.149-3.486-2.678-4.512-47.4-31.806-78.564-86.016-78.187-147.347.592-96.237 79.29-174.648 175.529-174.899C320.793 47.747 400 126.797 400 224c0 61.932-32.158 116.49-80.65 147.867-.999 14.037-3.069 30.588-5.624 47.23-.732 4.767 4.203 8.429 8.535 6.31C395.227 389.727 448 314.187 448 224 448 100.205 347.815 0 224 0zm0 160c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z"] +}; +var faPoll = { + prefix: 'fas', + iconName: 'poll', + icon: [448, 512, [], "f681", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM160 368c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V240c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v128zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16V144c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v224zm96 0c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-64c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v64z"] +}; +var faPollH = { + prefix: 'fas', + iconName: 'poll-h', + icon: [448, 512, [], "f682", "M448 432V80c0-26.5-21.5-48-48-48H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48zM112 192c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h128c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h224c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16H112zm0 96c-8.84 0-16-7.16-16-16v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32c0 8.84-7.16 16-16 16h-64z"] +}; +var faPoo = { + prefix: 'fas', + iconName: 'poo', + icon: [512, 512, [], "f2fe", "M451.4 369.1C468.7 356 480 335.4 480 312c0-39.8-32.2-72-72-72h-14.1c13.4-11.7 22.1-28.8 22.1-48 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C250.3 14.6 256 30.6 256 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 19.2 8.7 36.3 22.1 48H104c-39.8 0-72 32.2-72 72 0 23.4 11.3 44 28.6 57.1C26.3 374.6 0 404.1 0 440c0 39.8 32.2 72 72 72h368c39.8 0 72-32.2 72-72 0-35.9-26.3-65.4-60.6-70.9zM192 256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm159.5 139C341 422.9 293 448 256 448s-85-25.1-95.5-53c-2-5.3 2-11 7.8-11h175.4c5.8 0 9.8 5.7 7.8 11zM320 320c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faPooStorm = { + prefix: 'fas', + iconName: 'poo-storm', + icon: [448, 512, [], "f75a", "M308 336h-57.7l17.3-64.9c2-7.6-3.7-15.1-11.6-15.1h-68c-6 0-11.1 4.5-11.9 10.4l-16 120c-1 7.2 4.6 13.6 11.9 13.6h59.3l-23 97.2c-1.8 7.6 4 14.8 11.7 14.8 4.2 0 8.2-2.2 10.4-6l88-152c4.6-8-1.2-18-10.4-18zm66.4-111.3c5.9-9.6 9.6-20.6 9.6-32.7 0-35.3-28.7-64-64-64h-5.9c3.6-10.1 5.9-20.7 5.9-32 0-53-43-96-96-96-5.2 0-10.2.7-15.1 1.5C218.3 14.6 224 30.6 224 48c0 44.2-35.8 80-80 80h-16c-35.3 0-64 28.7-64 64 0 12.1 3.7 23.1 9.6 32.7C32.6 228 0 262.2 0 304c0 44 36 80 80 80h48.3c.1-.6 0-1.2 0-1.8l16-120c3-21.8 21.7-38.2 43.7-38.2h68c13.8 0 26.5 6.3 34.9 17.2s11.2 24.8 7.6 38.1l-6.6 24.7h16c15.7 0 30.3 8.4 38.1 22 7.8 13.6 7.8 30.5 0 44l-8.1 14h30c44 0 80-36 80-80 .1-41.8-32.5-76-73.5-79.3z"] +}; +var faPoop = { + prefix: 'fas', + iconName: 'poop', + icon: [512, 512, [], "f619", "M451.36 369.14C468.66 355.99 480 335.41 480 312c0-39.77-32.24-72-72-72h-14.07c13.42-11.73 22.07-28.78 22.07-48 0-35.35-28.65-64-64-64h-5.88c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96-5.17 0-10.15.74-15.11 1.52C250.31 14.64 256 30.62 256 48c0 44.18-35.82 80-80 80h-16c-35.35 0-64 28.65-64 64 0 19.22 8.65 36.27 22.07 48H104c-39.76 0-72 32.23-72 72 0 23.41 11.34 43.99 28.64 57.14C26.31 374.62 0 404.12 0 440c0 39.76 32.24 72 72 72h368c39.76 0 72-32.24 72-72 0-35.88-26.31-65.38-60.64-70.86z"] +}; +var faPortrait = { + prefix: 'fas', + iconName: 'portrait', + icon: [384, 512, [], "f3e0", "M336 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM192 128c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zm112 236.8c0 10.6-10 19.2-22.4 19.2H102.4C90 384 80 375.4 80 364.8v-19.2c0-31.8 30.1-57.6 67.2-57.6h5c12.3 5.1 25.7 8 39.8 8s27.6-2.9 39.8-8h5c37.1 0 67.2 25.8 67.2 57.6v19.2z"] +}; +var faPoundSign = { + prefix: 'fas', + iconName: 'pound-sign', + icon: [320, 512, [], "f154", "M308 352h-45.495c-6.627 0-12 5.373-12 12v50.848H128V288h84c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-84v-63.556c0-32.266 24.562-57.086 61.792-57.086 23.658 0 45.878 11.505 57.652 18.849 5.151 3.213 11.888 2.051 15.688-2.685l28.493-35.513c4.233-5.276 3.279-13.005-2.119-17.081C273.124 54.56 236.576 32 187.931 32 106.026 32 48 84.742 48 157.961V224H20c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h28v128H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h296c6.627 0 12-5.373 12-12V364c0-6.627-5.373-12-12-12z"] +}; +var faPowerOff = { + prefix: 'fas', + iconName: 'power-off', + icon: [512, 512, [], "f011", "M400 54.1c63 45 104 118.6 104 201.9 0 136.8-110.8 247.7-247.5 248C120 504.3 8.2 393 8 256.4 7.9 173.1 48.9 99.3 111.8 54.2c11.7-8.3 28-4.8 35 7.7L162.6 90c5.9 10.5 3.1 23.8-6.6 31-41.5 30.8-68 79.6-68 134.9-.1 92.3 74.5 168.1 168 168.1 91.6 0 168.6-74.2 168-169.1-.3-51.8-24.7-101.8-68.1-134-9.7-7.2-12.4-20.5-6.5-30.9l15.8-28.1c7-12.4 23.2-16.1 34.8-7.8zM296 264V24c0-13.3-10.7-24-24-24h-32c-13.3 0-24 10.7-24 24v240c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24z"] +}; +var faPray = { + prefix: 'fas', + iconName: 'pray', + icon: [384, 512, [], "f683", "M256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-30.63 169.75c14.06 16.72 39 19.09 55.97 5.22l88-72.02c17.09-13.98 19.59-39.19 5.62-56.28-13.97-17.11-39.19-19.59-56.31-5.62l-57.44 47-38.91-46.31c-15.44-18.39-39.22-27.92-64-25.33-24.19 2.48-45.25 16.27-56.37 36.92l-49.37 92.03c-23.4 43.64-8.69 96.37 34.19 123.75L131.56 432H40c-22.09 0-40 17.91-40 40s17.91 40 40 40h208c34.08 0 53.77-42.79 28.28-68.28L166.42 333.86l34.8-64.87 24.15 28.76z"] +}; +var faPrayingHands = { + prefix: 'fas', + iconName: 'praying-hands', + icon: [640, 512, [], "f684", "M272 191.91c-17.6 0-32 14.4-32 32v80c0 8.84-7.16 16-16 16s-16-7.16-16-16v-76.55c0-17.39 4.72-34.47 13.69-49.39l77.75-129.59c9.09-15.16 4.19-34.81-10.97-43.91-14.45-8.67-32.72-4.3-42.3 9.21-.2.23-.62.21-.79.48l-117.26 175.9C117.56 205.9 112 224.31 112 243.29v80.23l-90.12 30.04A31.974 31.974 0 0 0 0 383.91v96c0 10.82 8.52 32 32 32 2.69 0 5.41-.34 8.06-1.03l179.19-46.62C269.16 449.99 304 403.8 304 351.91v-128c0-17.6-14.4-32-32-32zm346.12 161.73L528 323.6v-80.23c0-18.98-5.56-37.39-16.12-53.23L394.62 14.25c-.18-.27-.59-.24-.79-.48-9.58-13.51-27.85-17.88-42.3-9.21-15.16 9.09-20.06 28.75-10.97 43.91l77.75 129.59c8.97 14.92 13.69 32 13.69 49.39V304c0 8.84-7.16 16-16 16s-16-7.16-16-16v-80c0-17.6-14.4-32-32-32s-32 14.4-32 32v128c0 51.89 34.84 98.08 84.75 112.34l179.19 46.62c2.66.69 5.38 1.03 8.06 1.03 23.48 0 32-21.18 32-32v-96c0-13.77-8.81-25.99-21.88-30.35z"] +}; +var faPrescription = { + prefix: 'fas', + iconName: 'prescription', + icon: [384, 512, [], "f5b1", "M301.26 352l78.06-78.06c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0L256 306.74l-83.96-83.96C219.31 216.8 256 176.89 256 128c0-53.02-42.98-96-96-96H16C7.16 32 0 39.16 0 48v256c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-80h18.75l128 128-78.06 78.06c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0L256 397.25l78.06 78.06c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63L301.26 352zM64 96h96c17.64 0 32 14.36 32 32s-14.36 32-32 32H64V96z"] +}; +var faPrescriptionBottle = { + prefix: 'fas', + iconName: 'prescription-bottle', + icon: [384, 512, [], "f485", "M32 192h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64h120c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H32v64c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v64zM360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24z"] +}; +var faPrescriptionBottleAlt = { + prefix: 'fas', + iconName: 'prescription-bottle-alt', + icon: [384, 512, [], "f486", "M360 0H24C10.8 0 0 10.8 0 24v48c0 13.2 10.8 24 24 24h336c13.2 0 24-10.8 24-24V24c0-13.2-10.8-24-24-24zM32 480c0 17.6 14.4 32 32 32h256c17.6 0 32-14.4 32-32V128H32v352zm64-184c0-4.4 3.6-8 8-8h56v-56c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v56h56c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8h-56v56c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8v-56h-56c-4.4 0-8-3.6-8-8v-48z"] +}; +var faPrint = { + prefix: 'fas', + iconName: 'print', + icon: [512, 512, [], "f02f", "M448 192V77.25c0-8.49-3.37-16.62-9.37-22.63L393.37 9.37c-6-6-14.14-9.37-22.63-9.37H96C78.33 0 64 14.33 64 32v160c-35.35 0-64 28.65-64 64v112c0 8.84 7.16 16 16 16h48v96c0 17.67 14.33 32 32 32h320c17.67 0 32-14.33 32-32v-96h48c8.84 0 16-7.16 16-16V256c0-35.35-28.65-64-64-64zm-64 256H128v-96h256v96zm0-224H128V64h192v48c0 8.84 7.16 16 16 16h48v96zm48 72c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"] +}; +var faProcedures = { + prefix: 'fas', + iconName: 'procedures', + icon: [640, 512, [], "f487", "M528 224H272c-8.8 0-16 7.2-16 16v144H64V144c0-8.8-7.2-16-16-16H16c-8.8 0-16 7.2-16 16v352c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-48h512v48c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V336c0-61.9-50.1-112-112-112zM136 96h126.1l27.6 55.2c5.9 11.8 22.7 11.8 28.6 0L368 51.8 390.1 96H512c8.8 0 16-7.2 16-16s-7.2-16-16-16H409.9L382.3 8.8C376.4-3 359.6-3 353.7 8.8L304 108.2l-19.9-39.8c-1.4-2.7-4.1-4.4-7.2-4.4H136c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8zm24 256c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64z"] +}; +var faProjectDiagram = { + prefix: 'fas', + iconName: 'project-diagram', + icon: [640, 512, [], "f542", "M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z"] +}; +var faPumpMedical = { + prefix: 'fas', + iconName: 'pump-medical', + icon: [384, 512, [], "e06a", "M235.51,159.82H84.24A64,64,0,0,0,20.51,218L.14,442a64,64,0,0,0,63.74,69.8h192A64,64,0,0,0,319.61,442L299.24,218A64,64,0,0,0,235.51,159.82Zm4.37,173.33a13.35,13.35,0,0,1-13.34,13.34h-40v40a13.33,13.33,0,0,1-13.33,13.33H146.54a13.33,13.33,0,0,1-13.33-13.33v-40h-40a13.34,13.34,0,0,1-13.33-13.34V306.49a13.33,13.33,0,0,1,13.33-13.34h40v-40a13.33,13.33,0,0,1,13.33-13.33h26.67a13.33,13.33,0,0,1,13.33,13.33v40h40a13.34,13.34,0,0,1,13.34,13.34ZM379.19,93.88,335.87,50.56a64,64,0,0,0-45.24-18.74H223.88a32,32,0,0,0-32-32h-64a32,32,0,0,0-32,32v96h128v-32h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.19,93.88Z"] +}; +var faPumpSoap = { + prefix: 'fas', + iconName: 'pump-soap', + icon: [384, 512, [], "e06b", "M235.63,160H84.37a64,64,0,0,0-63.74,58.21L.27,442.21A64,64,0,0,0,64,512H256a64,64,0,0,0,63.74-69.79l-20.36-224A64,64,0,0,0,235.63,160ZM160,416c-33.12,0-60-26.33-60-58.75,0-25,35.7-75.47,52-97.27A10,10,0,0,1,168,260c16.33,21.8,52,72.27,52,97.27C220,389.67,193.12,416,160,416ZM379.31,94.06,336,50.74A64,64,0,0,0,290.75,32H224A32,32,0,0,0,192,0H128A32,32,0,0,0,96,32v96H224V96h66.75l43.31,43.31a16,16,0,0,0,22.63,0l22.62-22.62A16,16,0,0,0,379.31,94.06Z"] +}; +var faPuzzlePiece = { + prefix: 'fas', + iconName: 'puzzle-piece', + icon: [576, 512, [], "f12e", "M519.442 288.651c-41.519 0-59.5 31.593-82.058 31.593C377.409 320.244 432 144 432 144s-196.288 80-196.288-3.297c0-35.827 36.288-46.25 36.288-85.985C272 19.216 243.885 0 210.539 0c-34.654 0-66.366 18.891-66.366 56.346 0 41.364 31.711 59.277 31.711 81.75C175.885 207.719 0 166.758 0 166.758v333.237s178.635 41.047 178.635-28.662c0-22.473-40-40.107-40-81.471 0-37.456 29.25-56.346 63.577-56.346 33.673 0 61.788 19.216 61.788 54.717 0 39.735-36.288 50.158-36.288 85.985 0 60.803 129.675 25.73 181.23 25.73 0 0-34.725-120.101 25.827-120.101 35.962 0 46.423 36.152 86.308 36.152C556.712 416 576 387.99 576 354.443c0-34.199-18.962-65.792-56.558-65.792z"] +}; +var faQrcode = { + prefix: 'fas', + iconName: 'qrcode', + icon: [448, 512, [], "f029", "M0 224h192V32H0v192zM64 96h64v64H64V96zm192-64v192h192V32H256zm128 128h-64V96h64v64zM0 480h192V288H0v192zm64-128h64v64H64v-64zm352-64h32v128h-96v-32h-32v96h-64V288h96v32h64v-32zm0 160h32v32h-32v-32zm-64 0h32v32h-32v-32z"] +}; +var faQuestion = { + prefix: 'fas', + iconName: 'question', + icon: [384, 512, [], "f128", "M202.021 0C122.202 0 70.503 32.703 29.914 91.026c-7.363 10.58-5.093 25.086 5.178 32.874l43.138 32.709c10.373 7.865 25.132 6.026 33.253-4.148 25.049-31.381 43.63-49.449 82.757-49.449 30.764 0 68.816 19.799 68.816 49.631 0 22.552-18.617 34.134-48.993 51.164-35.423 19.86-82.299 44.576-82.299 106.405V320c0 13.255 10.745 24 24 24h72.471c13.255 0 24-10.745 24-24v-5.773c0-42.86 125.268-44.645 125.268-160.627C377.504 66.256 286.902 0 202.021 0zM192 373.459c-38.196 0-69.271 31.075-69.271 69.271 0 38.195 31.075 69.27 69.271 69.27s69.271-31.075 69.271-69.271-31.075-69.27-69.271-69.27z"] +}; +var faQuestionCircle = { + prefix: 'fas', + iconName: 'question-circle', + icon: [512, 512, [], "f059", "M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"] +}; +var faQuidditch = { + prefix: 'fas', + iconName: 'quidditch', + icon: [640, 512, [], "f458", "M256.5 216.8L343.2 326s-16.6 102.4-76.6 150.1C206.7 523.8 0 510.2 0 510.2s3.8-23.1 11-55.4l94.6-112.2c4-4.7-.9-11.6-6.6-9.5l-60.4 22.1c14.4-41.7 32.7-80 54.6-97.5 59.9-47.8 163.3-40.9 163.3-40.9zm238 135c-44 0-79.8 35.8-79.8 79.9 0 44.1 35.7 79.9 79.8 79.9 44.1 0 79.8-35.8 79.8-79.9 0-44.2-35.8-79.9-79.8-79.9zM636.5 31L616.7 6c-5.5-6.9-15.5-8-22.4-2.6L361.8 181.3l-34.1-43c-5.1-6.4-15.1-5.2-18.6 2.2l-25.3 54.6 86.7 109.2 58.8-12.4c8-1.7 11.4-11.2 6.3-17.6l-34.1-42.9L634 53.5c6.9-5.5 8-15.6 2.5-22.5z"] +}; +var faQuoteLeft = { + prefix: 'fas', + iconName: 'quote-left', + icon: [512, 512, [], "f10d", "M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"] +}; +var faQuoteRight = { + prefix: 'fas', + iconName: 'quote-right', + icon: [512, 512, [], "f10e", "M464 32H336c-26.5 0-48 21.5-48 48v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48zm-288 0H48C21.5 32 0 53.5 0 80v128c0 26.5 21.5 48 48 48h80v64c0 35.3-28.7 64-64 64h-8c-13.3 0-24 10.7-24 24v48c0 13.3 10.7 24 24 24h8c88.4 0 160-71.6 160-160V80c0-26.5-21.5-48-48-48z"] +}; +var faQuran = { + prefix: 'fas', + iconName: 'quran', + icon: [448, 512, [], "f687", "M448 358.4V25.6c0-16-9.6-25.6-25.6-25.6H96C41.6 0 0 41.6 0 96v320c0 54.4 41.6 96 96 96h326.4c12.8 0 25.6-9.6 25.6-25.6v-16c0-6.4-3.2-12.8-9.6-19.2-3.2-16-3.2-60.8 0-73.6 6.4-3.2 9.6-9.6 9.6-19.2zM301.08 145.82c.6-1.21 1.76-1.82 2.92-1.82s2.32.61 2.92 1.82l11.18 22.65 25 3.63c2.67.39 3.74 3.67 1.81 5.56l-18.09 17.63 4.27 24.89c.36 2.11-1.31 3.82-3.21 3.82-.5 0-1.02-.12-1.52-.38L304 211.87l-22.36 11.75c-.5.26-1.02.38-1.52.38-1.9 0-3.57-1.71-3.21-3.82l4.27-24.89-18.09-17.63c-1.94-1.89-.87-5.17 1.81-5.56l24.99-3.63 11.19-22.65zm-57.89-69.01c13.67 0 27.26 2.49 40.38 7.41a6.775 6.775 0 1 1-2.38 13.12c-.67 0-3.09-.21-4.13-.21-52.31 0-94.86 42.55-94.86 94.86 0 52.3 42.55 94.86 94.86 94.86 1.03 0 3.48-.21 4.13-.21 3.93 0 6.8 3.14 6.8 6.78 0 2.98-1.94 5.51-4.62 6.42-13.07 4.87-26.59 7.34-40.19 7.34C179.67 307.19 128 255.51 128 192c0-63.52 51.67-115.19 115.19-115.19zM380.8 448H96c-19.2 0-32-12.8-32-32s16-32 32-32h284.8v64z"] +}; +var faRadiation = { + prefix: 'fas', + iconName: 'radiation', + icon: [496, 512, [], "f7b9", "M328.2 255.8h151.6c9.1 0 16.8-7.7 16.2-16.8-5.1-75.8-44.4-142.2-102.5-184.2-7.4-5.3-17.9-2.9-22.7 4.8L290.4 188c22.6 14.3 37.8 39.2 37.8 67.8zm-37.8 67.7c-12.3 7.7-26.8 12.4-42.4 12.4-15.6 0-30-4.7-42.4-12.4L125.2 452c-4.8 7.7-2.4 18.1 5.6 22.4C165.7 493.2 205.6 504 248 504s82.3-10.8 117.2-29.6c8-4.3 10.4-14.8 5.6-22.4l-80.4-128.5zM248 303.8c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48zm-231.8-48h151.6c0-28.6 15.2-53.5 37.8-67.7L125.2 59.7c-4.8-7.7-15.3-10.2-22.7-4.8C44.4 96.9 5.1 163.3 0 239.1c-.6 9 7.1 16.7 16.2 16.7z"] +}; +var faRadiationAlt = { + prefix: 'fas', + iconName: 'radiation-alt', + icon: [496, 512, [], "f7ba", "M312 256h79.1c9.2 0 16.9-7.7 16-16.8-4.6-43.6-27-81.8-59.5-107.8-7.6-6.1-18.8-4.5-24 3.8L281.9 202c18 11.2 30.1 31.2 30.1 54zm-97.8 54.1L172.4 377c-4.9 7.8-2.4 18.4 5.8 22.5 21.1 10.4 44.7 16.5 69.8 16.5s48.7-6.1 69.9-16.5c8.2-4.1 10.6-14.7 5.8-22.5l-41.8-66.9c-9.8 6.2-21.4 9.9-33.8 9.9s-24.1-3.7-33.9-9.9zM104.9 256H184c0-22.8 12.1-42.8 30.2-54.1l-41.7-66.8c-5.2-8.3-16.4-9.9-24-3.8-32.6 26-54.9 64.2-59.5 107.8-1.1 9.2 6.7 16.9 15.9 16.9zM248 504c137 0 248-111 248-248S385 8 248 8 0 119 0 256s111 248 248 248zm0-432c101.5 0 184 82.5 184 184s-82.5 184-184 184S64 357.5 64 256 146.5 72 248 72zm0 216c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"] +}; +var faRainbow = { + prefix: 'fas', + iconName: 'rainbow', + icon: [576, 512, [], "f75b", "M268.3 32.7C115.4 42.9 0 176.9 0 330.2V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C64 186.8 180.9 80.3 317.5 97.9 430.4 112.4 512 214 512 327.8V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-165.3-140-298.6-307.7-287.3zm-5.6 96.9C166 142 96 229.1 96 326.7V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-74.8 64.5-134.8 140.8-127.4 66.5 6.5 115.2 66.2 115.2 133.1V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-114.2-100.2-205.4-217.3-190.4zm6.2 96.3c-45.6 8.9-76.9 51.5-76.9 97.9V464c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-17.6 14.3-32 32-32s32 14.4 32 32v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320c0-59.2-53.8-106-115.1-94.1z"] +}; +var faRandom = { + prefix: 'fas', + iconName: 'random', + icon: [512, 512, [], "f074", "M504.971 359.029c9.373 9.373 9.373 24.569 0 33.941l-80 79.984c-15.01 15.01-40.971 4.49-40.971-16.971V416h-58.785a12.004 12.004 0 0 1-8.773-3.812l-70.556-75.596 53.333-57.143L352 336h32v-39.981c0-21.438 25.943-31.998 40.971-16.971l80 79.981zM12 176h84l52.781 56.551 53.333-57.143-70.556-75.596A11.999 11.999 0 0 0 122.785 96H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12zm372 0v39.984c0 21.46 25.961 31.98 40.971 16.971l80-79.984c9.373-9.373 9.373-24.569 0-33.941l-80-79.981C409.943 24.021 384 34.582 384 56.019V96h-58.785a12.004 12.004 0 0 0-8.773 3.812L96 336H12c-6.627 0-12 5.373-12 12v56c0 6.627 5.373 12 12 12h110.785c3.326 0 6.503-1.381 8.773-3.812L352 176h32z"] +}; +var faReceipt = { + prefix: 'fas', + iconName: 'receipt', + icon: [384, 512, [], "f543", "M358.4 3.2L320 48 265.6 3.2a15.9 15.9 0 0 0-19.2 0L192 48 137.6 3.2a15.9 15.9 0 0 0-19.2 0L64 48 25.6 3.2C15-4.7 0 2.8 0 16v480c0 13.2 15 20.7 25.6 12.8L64 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L192 464l54.4 44.8a15.9 15.9 0 0 0 19.2 0L320 464l38.4 44.8c10.5 7.9 25.6.4 25.6-12.8V16c0-13.2-15-20.7-25.6-12.8zM320 360c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16zm0-96c0 4.4-3.6 8-8 8H72c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h240c4.4 0 8 3.6 8 8v16z"] +}; +var faRecordVinyl = { + prefix: 'fas', + iconName: 'record-vinyl', + icon: [512, 512, [], "f8d9", "M256 152a104 104 0 1 0 104 104 104 104 0 0 0-104-104zm0 128a24 24 0 1 1 24-24 24 24 0 0 1-24 24zm0-272C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a128 128 0 1 1 128-128 128 128 0 0 1-128 128z"] +}; +var faRecycle = { + prefix: 'fas', + iconName: 'recycle', + icon: [512, 512, [], "f1b8", "M184.561 261.903c3.232 13.997-12.123 24.635-24.068 17.168l-40.736-25.455-50.867 81.402C55.606 356.273 70.96 384 96.012 384H148c6.627 0 12 5.373 12 12v40c0 6.627-5.373 12-12 12H96.115c-75.334 0-121.302-83.048-81.408-146.88l50.822-81.388-40.725-25.448c-12.081-7.547-8.966-25.961 4.879-29.158l110.237-25.45c8.611-1.988 17.201 3.381 19.189 11.99l25.452 110.237zm98.561-182.915l41.289 66.076-40.74 25.457c-12.051 7.528-9 25.953 4.879 29.158l110.237 25.45c8.672 1.999 17.215-3.438 19.189-11.99l25.45-110.237c3.197-13.844-11.99-24.719-24.068-17.168l-40.687 25.424-41.263-66.082c-37.521-60.033-125.209-60.171-162.816 0l-17.963 28.766c-3.51 5.62-1.8 13.021 3.82 16.533l33.919 21.195c5.62 3.512 13.024 1.803 16.536-3.817l17.961-28.743c12.712-20.341 41.973-19.676 54.257-.022zM497.288 301.12l-27.515-44.065c-3.511-5.623-10.916-7.334-16.538-3.821l-33.861 21.159c-5.62 3.512-7.33 10.915-3.818 16.536l27.564 44.112c13.257 21.211-2.057 48.96-27.136 48.96H320V336.02c0-14.213-17.242-21.383-27.313-11.313l-80 79.981c-6.249 6.248-6.249 16.379 0 22.627l80 79.989C302.689 517.308 320 510.3 320 495.989V448h95.88c75.274 0 121.335-82.997 81.408-146.88z"] +}; +var faRedo = { + prefix: 'fas', + iconName: 'redo', + icon: [512, 512, [], "f01e", "M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z"] +}; +var faRedoAlt = { + prefix: 'fas', + iconName: 'redo-alt', + icon: [512, 512, [], "f2f9", "M256.455 8c66.269.119 126.437 26.233 170.859 68.685l35.715-35.715C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.75c-30.864-28.899-70.801-44.907-113.23-45.273-92.398-.798-170.283 73.977-169.484 169.442C88.764 348.009 162.184 424 256 424c41.127 0 79.997-14.678 110.629-41.556 4.743-4.161 11.906-3.908 16.368.553l39.662 39.662c4.872 4.872 4.631 12.815-.482 17.433C378.202 479.813 319.926 504 256 504 119.034 504 8.001 392.967 8 256.002 7.999 119.193 119.646 7.755 256.455 8z"] +}; +var faRegistered = { + prefix: 'fas', + iconName: 'registered', + icon: [512, 512, [], "f25d", "M285.363 207.475c0 18.6-9.831 28.431-28.431 28.431h-29.876v-56.14h23.378c28.668 0 34.929 8.773 34.929 27.709zM504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM363.411 360.414c-46.729-84.825-43.299-78.636-44.702-80.98 23.432-15.172 37.945-42.979 37.945-74.486 0-54.244-31.5-89.252-105.498-89.252h-70.667c-13.255 0-24 10.745-24 24V372c0 13.255 10.745 24 24 24h22.567c13.255 0 24-10.745 24-24v-71.663h25.556l44.129 82.937a24.001 24.001 0 0 0 21.188 12.727h24.464c18.261-.001 29.829-19.591 21.018-35.587z"] +}; +var faRemoveFormat = { + prefix: 'fas', + iconName: 'remove-format', + icon: [640, 512, [], "f87d", "M336 416h-11.17l9.26-27.77L267 336.4 240.49 416H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm297.82 42.1L377 259.59 426.17 112H544v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16H176a16 16 0 0 0-16 16v43.9L45.46 3.38A16 16 0 0 0 23 6.19L3.37 31.46a16 16 0 0 0 2.81 22.45l588.36 454.72a16 16 0 0 0 22.46-2.81l19.64-25.27a16 16 0 0 0-2.82-22.45zM309.91 207.76L224 141.36V112h117.83z"] +}; +var faReply = { + prefix: 'fas', + iconName: 'reply', + icon: [512, 512, [], "f3e5", "M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"] +}; +var faReplyAll = { + prefix: 'fas', + iconName: 'reply-all', + icon: [576, 512, [], "f122", "M136.309 189.836L312.313 37.851C327.72 24.546 352 35.348 352 56.015v82.763c129.182 10.231 224 52.212 224 183.548 0 61.441-39.582 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 38.512-123.162-3.922-169.482-112.59-182.015v84.175c0 20.701-24.3 31.453-39.687 18.164L136.309 226.164c-11.071-9.561-11.086-26.753 0-36.328zm-128 36.328L184.313 378.15C199.7 391.439 224 380.687 224 359.986v-15.818l-108.606-93.785A55.96 55.96 0 0 1 96 207.998a55.953 55.953 0 0 1 19.393-42.38L224 71.832V56.015c0-20.667-24.28-31.469-39.687-18.164L8.309 189.836c-11.086 9.575-11.071 26.767 0 36.328z"] +}; +var faRepublican = { + prefix: 'fas', + iconName: 'republican', + icon: [640, 512, [], "f75e", "M544 192c0-88.4-71.6-160-160-160H160C71.6 32 0 103.6 0 192v64h544v-64zm-367.7-21.6l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L128 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L272 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zm144 0l-19.8 19.3 4.7 27.3c.8 4.9-4.3 8.6-8.7 6.3L416 210.4l-24.5 12.9c-4.3 2.3-9.5-1.4-8.7-6.3l4.7-27.3-19.8-19.3c-3.6-3.5-1.6-9.5 3.3-10.2l27.4-4 12.2-24.8c2.2-4.5 8.6-4.4 10.7 0l12.2 24.8 27.4 4c5 .7 6.9 6.7 3.4 10.2zM624 320h-32c-8.8 0-16 7.2-16 16v64c0 8.8-7.2 16-16 16s-16-7.2-16-16V288H0v176c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16v-80h192v80c0 8.8 7.2 16 16 16h96c8.8 0 16-7.2 16-16V352h32v43.3c0 41.8 30 80.1 71.6 84.3 47.8 4.9 88.4-32.7 88.4-79.6v-64c0-8.8-7.2-16-16-16z"] +}; +var faRestroom = { + prefix: 'fas', + iconName: 'restroom', + icon: [640, 512, [], "f7bd", "M128 128c35.3 0 64-28.7 64-64S163.3 0 128 0 64 28.7 64 64s28.7 64 64 64zm384 0c35.3 0 64-28.7 64-64S547.3 0 512 0s-64 28.7-64 64 28.7 64 64 64zm127.3 226.5l-45.6-185.8c-3.3-13.5-15.5-23-29.8-24.2-15 9.7-32.8 15.5-52 15.5-19.2 0-37-5.8-52-15.5-14.3 1.2-26.5 10.7-29.8 24.2l-45.6 185.8C381 369.6 393 384 409.2 384H464v104c0 13.3 10.7 24 24 24h48c13.3 0 24-10.7 24-24V384h54.8c16.2 0 28.2-14.4 24.5-29.5zM336 0h-32c-8.8 0-16 7.2-16 16v480c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zM180.1 144.4c-15 9.8-32.9 15.6-52.1 15.6-19.2 0-37.1-5.8-52.1-15.6C51.3 146.5 32 166.9 32 192v136c0 13.3 10.7 24 24 24h8v136c0 13.3 10.7 24 24 24h80c13.3 0 24-10.7 24-24V352h8c13.3 0 24-10.7 24-24V192c0-25.1-19.3-45.5-43.9-47.6z"] +}; +var faRetweet = { + prefix: 'fas', + iconName: 'retweet', + icon: [640, 512, [], "f079", "M629.657 343.598L528.971 444.284c-9.373 9.372-24.568 9.372-33.941 0L394.343 343.598c-9.373-9.373-9.373-24.569 0-33.941l10.823-10.823c9.562-9.562 25.133-9.34 34.419.492L480 342.118V160H292.451a24.005 24.005 0 0 1-16.971-7.029l-16-16C244.361 121.851 255.069 96 276.451 96H520c13.255 0 24 10.745 24 24v222.118l40.416-42.792c9.285-9.831 24.856-10.054 34.419-.492l10.823 10.823c9.372 9.372 9.372 24.569-.001 33.941zm-265.138 15.431A23.999 23.999 0 0 0 347.548 352H160V169.881l40.416 42.792c9.286 9.831 24.856 10.054 34.419.491l10.822-10.822c9.373-9.373 9.373-24.569 0-33.941L144.971 67.716c-9.373-9.373-24.569-9.373-33.941 0L10.343 168.402c-9.373 9.373-9.373 24.569 0 33.941l10.822 10.822c9.562 9.562 25.133 9.34 34.419-.491L96 169.881V392c0 13.255 10.745 24 24 24h243.549c21.382 0 32.09-25.851 16.971-40.971l-16.001-16z"] +}; +var faRibbon = { + prefix: 'fas', + iconName: 'ribbon', + icon: [448, 512, [], "f4d6", "M6.1 444.3c-9.6 10.8-7.5 27.6 4.5 35.7l68.8 27.9c9.9 6.7 23.3 5 31.3-3.8l91.8-101.9-79.2-87.9-117.2 130zm435.8 0s-292-324.6-295.4-330.1c15.4-8.4 40.2-17.9 77.5-17.9s62.1 9.5 77.5 17.9c-3.3 5.6-56 64.6-56 64.6l79.1 87.7 34.2-38c28.7-31.9 33.3-78.6 11.4-115.5l-43.7-73.5c-4.3-7.2-9.9-13.3-16.8-18-40.7-27.6-127.4-29.7-171.4 0-6.9 4.7-12.5 10.8-16.8 18l-43.6 73.2c-1.5 2.5-37.1 62.2 11.5 116L337.5 504c8 8.9 21.4 10.5 31.3 3.8l68.8-27.9c11.9-8 14-24.8 4.3-35.6z"] +}; +var faRing = { + prefix: 'fas', + iconName: 'ring', + icon: [512, 512, [], "f70b", "M256 64C110.06 64 0 125.91 0 208v98.13C0 384.48 114.62 448 256 448s256-63.52 256-141.87V208c0-82.09-110.06-144-256-144zm0 64c106.04 0 192 35.82 192 80 0 9.26-3.97 18.12-10.91 26.39C392.15 208.21 328.23 192 256 192s-136.15 16.21-181.09 42.39C67.97 226.12 64 217.26 64 208c0-44.18 85.96-80 192-80zM120.43 264.64C155.04 249.93 201.64 240 256 240s100.96 9.93 135.57 24.64C356.84 279.07 308.93 288 256 288s-100.84-8.93-135.57-23.36z"] +}; +var faRoad = { + prefix: 'fas', + iconName: 'road', + icon: [576, 512, [], "f018", "M573.19 402.67l-139.79-320C428.43 71.29 417.6 64 405.68 64h-97.59l2.45 23.16c.5 4.72-3.21 8.84-7.96 8.84h-29.16c-4.75 0-8.46-4.12-7.96-8.84L267.91 64h-97.59c-11.93 0-22.76 7.29-27.73 18.67L2.8 402.67C-6.45 423.86 8.31 448 30.54 448h196.84l10.31-97.68c.86-8.14 7.72-14.32 15.91-14.32h68.8c8.19 0 15.05 6.18 15.91 14.32L348.62 448h196.84c22.23 0 36.99-24.14 27.73-45.33zM260.4 135.16a8 8 0 0 1 7.96-7.16h39.29c4.09 0 7.53 3.09 7.96 7.16l4.6 43.58c.75 7.09-4.81 13.26-11.93 13.26h-40.54c-7.13 0-12.68-6.17-11.93-13.26l4.59-43.58zM315.64 304h-55.29c-9.5 0-16.91-8.23-15.91-17.68l5.07-48c.86-8.14 7.72-14.32 15.91-14.32h45.15c8.19 0 15.05 6.18 15.91 14.32l5.07 48c1 9.45-6.41 17.68-15.91 17.68z"] +}; +var faRobot = { + prefix: 'fas', + iconName: 'robot', + icon: [640, 512, [], "f544", "M32,224H64V416H32A31.96166,31.96166,0,0,1,0,384V256A31.96166,31.96166,0,0,1,32,224Zm512-48V448a64.06328,64.06328,0,0,1-64,64H160a64.06328,64.06328,0,0,1-64-64V176a79.974,79.974,0,0,1,80-80H288V32a32,32,0,0,1,64,0V96H464A79.974,79.974,0,0,1,544,176ZM264,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,264,256Zm-8,128H192v32h64Zm96,0H288v32h64ZM456,256a40,40,0,1,0-40,40A39.997,39.997,0,0,0,456,256Zm-8,128H384v32h64ZM640,256V384a31.96166,31.96166,0,0,1-32,32H576V224h32A31.96166,31.96166,0,0,1,640,256Z"] +}; +var faRocket = { + prefix: 'fas', + iconName: 'rocket', + icon: [512, 512, [], "f135", "M505.12019,19.09375c-1.18945-5.53125-6.65819-11-12.207-12.1875C460.716,0,435.507,0,410.40747,0,307.17523,0,245.26909,55.20312,199.05238,128H94.83772c-16.34763.01562-35.55658,11.875-42.88664,26.48438L2.51562,253.29688A28.4,28.4,0,0,0,0,264a24.00867,24.00867,0,0,0,24.00582,24H127.81618l-22.47457,22.46875c-11.36521,11.36133-12.99607,32.25781,0,45.25L156.24582,406.625c11.15623,11.1875,32.15619,13.15625,45.27726,0l22.47457-22.46875V488a24.00867,24.00867,0,0,0,24.00581,24,28.55934,28.55934,0,0,0,10.707-2.51562l98.72834-49.39063c14.62888-7.29687,26.50776-26.5,26.50776-42.85937V312.79688c72.59753-46.3125,128.03493-108.40626,128.03493-211.09376C512.07526,76.5,512.07526,51.29688,505.12019,19.09375ZM384.04033,168A40,40,0,1,1,424.05,128,40.02322,40.02322,0,0,1,384.04033,168Z"] +}; +var faRoute = { + prefix: 'fas', + iconName: 'route', + icon: [512, 512, [], "f4d7", "M416 320h-96c-17.6 0-32-14.4-32-32s14.4-32 32-32h96s96-107 96-160-43-96-96-96-96 43-96 96c0 25.5 22.2 63.4 45.3 96H320c-52.9 0-96 43.1-96 96s43.1 96 96 96h96c17.6 0 32 14.4 32 32s-14.4 32-32 32H185.5c-16 24.8-33.8 47.7-47.3 64H416c52.9 0 96-43.1 96-96s-43.1-96-96-96zm0-256c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM96 256c-53 0-96 43-96 96s96 160 96 160 96-107 96-160-43-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faRss = { + prefix: 'fas', + iconName: 'rss', + icon: [448, 512, [], "f09e", "M128.081 415.959c0 35.369-28.672 64.041-64.041 64.041S0 451.328 0 415.959s28.672-64.041 64.041-64.041 64.04 28.673 64.04 64.041zm175.66 47.25c-8.354-154.6-132.185-278.587-286.95-286.95C7.656 175.765 0 183.105 0 192.253v48.069c0 8.415 6.49 15.472 14.887 16.018 111.832 7.284 201.473 96.702 208.772 208.772.547 8.397 7.604 14.887 16.018 14.887h48.069c9.149.001 16.489-7.655 15.995-16.79zm144.249.288C439.596 229.677 251.465 40.445 16.503 32.01 7.473 31.686 0 38.981 0 48.016v48.068c0 8.625 6.835 15.645 15.453 15.999 191.179 7.839 344.627 161.316 352.465 352.465.353 8.618 7.373 15.453 15.999 15.453h48.068c9.034-.001 16.329-7.474 16.005-16.504z"] +}; +var faRssSquare = { + prefix: 'fas', + iconName: 'rss-square', + icon: [448, 512, [], "f143", "M400 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM112 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm157.533 0h-34.335c-6.011 0-11.051-4.636-11.442-10.634-5.214-80.05-69.243-143.92-149.123-149.123-5.997-.39-10.633-5.431-10.633-11.441v-34.335c0-6.535 5.468-11.777 11.994-11.425 110.546 5.974 198.997 94.536 204.964 204.964.352 6.526-4.89 11.994-11.425 11.994zm103.027 0h-34.334c-6.161 0-11.175-4.882-11.427-11.038-5.598-136.535-115.204-246.161-251.76-251.76C68.882 152.949 64 147.935 64 141.774V107.44c0-6.454 5.338-11.664 11.787-11.432 167.83 6.025 302.21 141.191 308.205 308.205.232 6.449-4.978 11.787-11.432 11.787z"] +}; +var faRubleSign = { + prefix: 'fas', + iconName: 'ruble-sign', + icon: [384, 512, [], "f158", "M239.36 320C324.48 320 384 260.542 384 175.071S324.48 32 239.36 32H76c-6.627 0-12 5.373-12 12v206.632H12c-6.627 0-12 5.373-12 12V308c0 6.627 5.373 12 12 12h52v32H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h52v52c0 6.627 5.373 12 12 12h58.56c6.627 0 12-5.373 12-12v-52H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H146.56v-32h92.8zm-92.8-219.252h78.72c46.72 0 74.88 29.11 74.88 74.323 0 45.832-28.16 75.561-76.16 75.561h-77.44V100.748z"] +}; +var faRuler = { + prefix: 'fas', + iconName: 'ruler', + icon: [640, 512, [], "f545", "M635.7 167.2L556.1 31.7c-8.8-15-28.3-20.1-43.5-11.5l-69 39.1L503.3 161c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L416 75l-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L333.2 122 278 153.3 337.8 255c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-59.7-101.7-55.2 31.3 27.9 47.4c2.2 3.8.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9l-27.9-47.5-55.2 31.3 59.7 101.7c2.2 3.7.9 8.5-2.9 10.7l-13.8 7.8c-3.8 2.2-8.7.9-10.9-2.9L84.9 262.9l-69 39.1C.7 310.7-4.6 329.8 4.2 344.8l79.6 135.6c8.8 15 28.3 20.1 43.5 11.5L624.1 210c15.2-8.6 20.4-27.8 11.6-42.8z"] +}; +var faRulerCombined = { + prefix: 'fas', + iconName: 'ruler-combined', + icon: [512, 512, [], "f546", "M160 288h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56v-64h-56c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h56V96h-56c-4.42 0-8-3.58-8-8V72c0-4.42 3.58-8 8-8h56V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 2.77.91 5.24 1.57 7.8L160 329.38V288zm320 64h-32v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-64v56c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-56h-41.37L24.2 510.43c2.56.66 5.04 1.57 7.8 1.57h448c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"] +}; +var faRulerHorizontal = { + prefix: 'fas', + iconName: 'ruler-horizontal', + icon: [576, 512, [], "f547", "M544 128h-48v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8h-16c-4.42 0-8-3.58-8-8v-88h-64v88c0 4.42-3.58 8-8 8H88c-4.42 0-8-3.58-8-8v-88H32c-17.67 0-32 14.33-32 32v192c0 17.67 14.33 32 32 32h512c17.67 0 32-14.33 32-32V160c0-17.67-14.33-32-32-32z"] +}; +var faRulerVertical = { + prefix: 'fas', + iconName: 'ruler-vertical', + icon: [256, 512, [], "f548", "M168 416c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88v-64h-88c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h88V32c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v448c0 17.67 14.33 32 32 32h192c17.67 0 32-14.33 32-32v-64h-88z"] +}; +var faRunning = { + prefix: 'fas', + iconName: 'running', + icon: [416, 512, [], "f70c", "M272 96c26.51 0 48-21.49 48-48S298.51 0 272 0s-48 21.49-48 48 21.49 48 48 48zM113.69 317.47l-14.8 34.52H32c-17.67 0-32 14.33-32 32s14.33 32 32 32h77.45c19.25 0 36.58-11.44 44.11-29.09l8.79-20.52-10.67-6.3c-17.32-10.23-30.06-25.37-37.99-42.61zM384 223.99h-44.03l-26.06-53.25c-12.5-25.55-35.45-44.23-61.78-50.94l-71.08-21.14c-28.3-6.8-57.77-.55-80.84 17.14l-39.67 30.41c-14.03 10.75-16.69 30.83-5.92 44.86s30.84 16.66 44.86 5.92l39.69-30.41c7.67-5.89 17.44-8 25.27-6.14l14.7 4.37-37.46 87.39c-12.62 29.48-1.31 64.01 26.3 80.31l84.98 50.17-27.47 87.73c-5.28 16.86 4.11 34.81 20.97 40.09 3.19 1 6.41 1.48 9.58 1.48 13.61 0 26.23-8.77 30.52-22.45l31.64-101.06c5.91-20.77-2.89-43.08-21.64-54.39l-61.24-36.14 31.31-78.28 20.27 41.43c8 16.34 24.92 26.89 43.11 26.89H384c17.67 0 32-14.33 32-32s-14.33-31.99-32-31.99z"] +}; +var faRupeeSign = { + prefix: 'fas', + iconName: 'rupee-sign', + icon: [320, 512, [], "f156", "M308 96c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v44.748c0 6.627 5.373 12 12 12h85.28c27.308 0 48.261 9.958 60.97 27.252H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h158.757c-6.217 36.086-32.961 58.632-74.757 58.632H12c-6.627 0-12 5.373-12 12v53.012c0 3.349 1.4 6.546 3.861 8.818l165.052 152.356a12.001 12.001 0 0 0 8.139 3.182h82.562c10.924 0 16.166-13.408 8.139-20.818L116.871 319.906c76.499-2.34 131.144-53.395 138.318-127.906H308c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-58.69c-3.486-11.541-8.28-22.246-14.252-32H308z"] +}; +var faSadCry = { + prefix: 'fas', + iconName: 'sad-cry', + icon: [496, 512, [], "f5b3", "M248 8C111 8 0 119 0 256c0 90.1 48.2 168.7 120 212.1V288c0-8.8 7.2-16 16-16s16 7.2 16 16v196.7c29.5 12.4 62 19.3 96 19.3s66.5-6.9 96-19.3V288c0-8.8 7.2-16 16-16s16 7.2 16 16v180.1C447.8 424.7 496 346 496 256 496 119 385 8 248 8zm-65.5 216.5c-14.8-13.2-46.2-13.2-61 0L112 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S208 197 212 222.2c.8 5-1.7 10-6.1 12.4-5.8 3.1-11.2.7-13.7-1.6l-9.7-8.5zM248 416c-26.5 0-48-28.7-48-64s21.5-64 48-64 48 28.7 48 64-21.5 64-48 64zm149.8-181.5c-5.8 3.1-11.2.7-13.7-1.6l-9.5-8.5c-14.8-13.2-46.2-13.2-61 0L304 233c-3.8 3.3-9.3 4-13.7 1.6-4.4-2.4-6.9-7.4-6.1-12.4 4-25.2 34.2-42.1 59.9-42.1S400 197 404 222.2c.6 4.9-1.8 9.9-6.2 12.3z"] +}; +var faSadTear = { + prefix: 'fas', + iconName: 'sad-tear', + icon: [496, 512, [], "f5b4", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zM152 416c-26.5 0-48-21-48-47 0-20 28.5-60.4 41.6-77.8 3.2-4.3 9.6-4.3 12.8 0C171.5 308.6 200 349 200 369c0 26-21.5 47-48 47zm16-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm170.2 154.2C315.8 367.4 282.9 352 248 352c-21.2 0-21.2-32 0-32 44.4 0 86.3 19.6 114.7 53.8 13.8 16.4-11.2 36.5-24.5 20.4z"] +}; +var faSatellite = { + prefix: 'fas', + iconName: 'satellite', + icon: [512, 512, [], "f7bf", "M502.60969,310.04206l-96.70393,96.71625a31.88151,31.88151,0,0,1-45.00765,0L280.572,326.34115l-9.89231,9.90759a190.56343,190.56343,0,0,1-5.40716,168.52287c-4.50077,8.50115-16.39342,9.59505-23.20707,2.79725L134.54715,400.05428l-17.7999,17.79929c.70324,2.60972,1.60965,5.00067,1.60965,7.79793a32.00544,32.00544,0,1,1-32.00544-32.00434c2.79735,0,5.18838.90637,7.7982,1.60959l17.7999-17.79929L4.43129,269.94287c-6.798-6.81342-5.70409-18.6119,2.79735-23.20627a190.58161,190.58161,0,0,1,168.52864-5.407l9.79854-9.79821-80.31053-80.41716a32.002,32.002,0,0,1,0-45.09987L201.96474,9.29814A31.62639,31.62639,0,0,1,224.46868,0a31.99951,31.99951,0,0,1,22.59759,9.29814l80.32615,80.30777,47.805-47.89713a33.6075,33.6075,0,0,1,47.50808,0l47.50807,47.50645a33.63308,33.63308,0,0,1,0,47.50644l-47.805,47.89713L502.71908,265.036A31.78938,31.78938,0,0,1,502.60969,310.04206ZM219.56159,197.433l73.82505-73.82252-68.918-68.9-73.80942,73.80689Zm237.74352,90.106-68.90233-68.9156-73.825,73.82252,68.918,68.9Z"] +}; +var faSatelliteDish = { + prefix: 'fas', + iconName: 'satellite-dish', + icon: [512, 512, [], "f7c0", "M305.44954,462.59c7.39157,7.29792,6.18829,20.09661-3.00038,25.00356-77.713,41.80281-176.72559,29.9105-242.34331-35.7082C-5.49624,386.28227-17.404,287.362,24.41381,209.554c4.89125-9.095,17.68975-10.29834,25.00318-3.00043L166.22872,323.36708l27.39411-27.39452c-.68759-2.60974-1.594-5.00071-1.594-7.81361a32.00407,32.00407,0,1,1,32.00407,32.00455c-2.79723,0-5.20378-.89075-7.79786-1.594l-27.40974,27.41015ZM511.9758,303.06732a16.10336,16.10336,0,0,1-16.002,17.00242H463.86031a15.96956,15.96956,0,0,1-15.89265-15.00213C440.46671,175.5492,336.45348,70.53427,207.03078,63.53328a15.84486,15.84486,0,0,1-15.00191-15.90852V16.02652A16.09389,16.09389,0,0,1,209.031.02425C372.25491,8.61922,503.47472,139.841,511.9758,303.06732Zm-96.01221-.29692a16.21093,16.21093,0,0,1-16.11142,17.29934H367.645a16.06862,16.06862,0,0,1-15.89265-14.70522c-6.90712-77.01094-68.118-138.91037-144.92467-145.22376a15.94,15.94,0,0,1-14.79876-15.89289V112.13393a16.134,16.134,0,0,1,17.29908-16.096C319.45132,104.5391,407.55627,192.64538,415.96359,302.7704Z"] +}; +var faSave = { + prefix: 'fas', + iconName: 'save', + icon: [448, 512, [], "f0c7", "M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z"] +}; +var faSchool = { + prefix: 'fas', + iconName: 'school', + icon: [640, 512, [], "f549", "M0 224v272c0 8.84 7.16 16 16 16h80V192H32c-17.67 0-32 14.33-32 32zm360-48h-24v-40c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v64c0 4.42 3.58 8 8 8h48c4.42 0 8-3.58 8-8v-16c0-4.42-3.58-8-8-8zm137.75-63.96l-160-106.67a32.02 32.02 0 0 0-35.5 0l-160 106.67A32.002 32.002 0 0 0 128 138.66V512h128V368c0-8.84 7.16-16 16-16h96c8.84 0 16 7.16 16 16v144h128V138.67c0-10.7-5.35-20.7-14.25-26.63zM320 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm288-64h-64v320h80c8.84 0 16-7.16 16-16V224c0-17.67-14.33-32-32-32z"] +}; +var faScrewdriver = { + prefix: 'fas', + iconName: 'screwdriver', + icon: [512, 512, [], "f54a", "M448 0L320 96v62.06l-83.03 83.03c6.79 4.25 13.27 9.06 19.07 14.87 5.8 5.8 10.62 12.28 14.87 19.07L353.94 192H416l96-128-64-64zM128 278.59L10.92 395.67c-14.55 14.55-14.55 38.15 0 52.71l52.7 52.7c14.56 14.56 38.15 14.56 52.71 0L233.41 384c29.11-29.11 29.11-76.3 0-105.41s-76.3-29.11-105.41 0z"] +}; +var faScroll = { + prefix: 'fas', + iconName: 'scroll', + icon: [640, 512, [], "f70e", "M48 0C21.53 0 0 21.53 0 48v64c0 8.84 7.16 16 16 16h80V48C96 21.53 74.47 0 48 0zm208 412.57V352h288V96c0-52.94-43.06-96-96-96H111.59C121.74 13.41 128 29.92 128 48v368c0 38.87 34.65 69.65 74.75 63.12C234.22 474 256 444.46 256 412.57zM288 384v32c0 52.93-43.06 96-96 96h336c61.86 0 112-50.14 112-112 0-8.84-7.16-16-16-16H288z"] +}; +var faSdCard = { + prefix: 'fas', + iconName: 'sd-card', + icon: [384, 512, [], "f7c2", "M320 0H128L0 128v320c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V64c0-35.3-28.7-64-64-64zM160 160h-48V64h48v96zm80 0h-48V64h48v96zm80 0h-48V64h48v96z"] +}; +var faSearch = { + prefix: 'fas', + iconName: 'search', + icon: [512, 512, [], "f002", "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"] +}; +var faSearchDollar = { + prefix: 'fas', + iconName: 'search-dollar', + icon: [512, 512, [], "f688", "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm27.11-152.54l-45.01-13.5c-5.16-1.55-8.77-6.78-8.77-12.73 0-7.27 5.3-13.19 11.8-13.19h28.11c4.56 0 8.96 1.29 12.82 3.72 3.24 2.03 7.36 1.91 10.13-.73l11.75-11.21c3.53-3.37 3.33-9.21-.57-12.14-9.1-6.83-20.08-10.77-31.37-11.35V112c0-4.42-3.58-8-8-8h-16c-4.42 0-8 3.58-8 8v16.12c-23.63.63-42.68 20.55-42.68 45.07 0 19.97 12.99 37.81 31.58 43.39l45.01 13.5c5.16 1.55 8.77 6.78 8.77 12.73 0 7.27-5.3 13.19-11.8 13.19h-28.1c-4.56 0-8.96-1.29-12.82-3.72-3.24-2.03-7.36-1.91-10.13.73l-11.75 11.21c-3.53 3.37-3.33 9.21.57 12.14 9.1 6.83 20.08 10.77 31.37 11.35V304c0 4.42 3.58 8 8 8h16c4.42 0 8-3.58 8-8v-16.12c23.63-.63 42.68-20.54 42.68-45.07 0-19.97-12.99-37.81-31.59-43.39z"] +}; +var faSearchLocation = { + prefix: 'fas', + iconName: 'search-location', + icon: [512, 512, [], "f689", "M505.04 442.66l-99.71-99.69c-4.5-4.5-10.6-7-17-7h-16.3c27.6-35.3 44-79.69 44-127.99C416.03 93.09 322.92 0 208.02 0S0 93.09 0 207.98s93.11 207.98 208.02 207.98c48.3 0 92.71-16.4 128.01-44v16.3c0 6.4 2.5 12.5 7 17l99.71 99.69c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.59.1-33.99zm-297.02-90.7c-79.54 0-144-64.34-144-143.98 0-79.53 64.35-143.98 144-143.98 79.54 0 144 64.34 144 143.98 0 79.53-64.35 143.98-144 143.98zm.02-239.96c-40.78 0-73.84 33.05-73.84 73.83 0 32.96 48.26 93.05 66.75 114.86a9.24 9.24 0 0 0 14.18 0c18.49-21.81 66.75-81.89 66.75-114.86 0-40.78-33.06-73.83-73.84-73.83zm0 96c-13.26 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"] +}; +var faSearchMinus = { + prefix: 'fas', + iconName: 'search-minus', + icon: [512, 512, [], "f010", "M304 192v32c0 6.6-5.4 12-12 12H124c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"] +}; +var faSearchPlus = { + prefix: 'fas', + iconName: 'search-plus', + icon: [512, 512, [], "f00e", "M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136 136-60.8 136-136z"] +}; +var faSeedling = { + prefix: 'fas', + iconName: 'seedling', + icon: [512, 512, [], "f4d8", "M64 96H0c0 123.7 100.3 224 224 224v144c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V320C288 196.3 187.7 96 64 96zm384-64c-84.2 0-157.4 46.5-195.7 115.2 27.7 30.2 48.2 66.9 59 107.6C424 243.1 512 147.9 512 32h-64z"] +}; +var faServer = { + prefix: 'fas', + iconName: 'server', + icon: [512, 512, [], "f233", "M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"] +}; +var faShapes = { + prefix: 'fas', + iconName: 'shapes', + icon: [512, 512, [], "f61f", "M128,256A128,128,0,1,0,256,384,128,128,0,0,0,128,256Zm379-54.86L400.07,18.29a37.26,37.26,0,0,0-64.14,0L229,201.14C214.76,225.52,232.58,256,261.09,256H474.91C503.42,256,521.24,225.52,507,201.14ZM480,288H320a32,32,0,0,0-32,32V480a32,32,0,0,0,32,32H480a32,32,0,0,0,32-32V320A32,32,0,0,0,480,288Z"] +}; +var faShare = { + prefix: 'fas', + iconName: 'share', + icon: [512, 512, [], "f064", "M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"] +}; +var faShareAlt = { + prefix: 'fas', + iconName: 'share-alt', + icon: [448, 512, [], "f1e0", "M352 320c-22.608 0-43.387 7.819-59.79 20.895l-102.486-64.054a96.551 96.551 0 0 0 0-41.683l102.486-64.054C308.613 184.181 329.392 192 352 192c53.019 0 96-42.981 96-96S405.019 0 352 0s-96 42.981-96 96c0 7.158.79 14.13 2.276 20.841L155.79 180.895C139.387 167.819 118.608 160 96 160c-53.019 0-96 42.981-96 96s42.981 96 96 96c22.608 0 43.387-7.819 59.79-20.895l102.486 64.054A96.301 96.301 0 0 0 256 416c0 53.019 42.981 96 96 96s96-42.981 96-96-42.981-96-96-96z"] +}; +var faShareAltSquare = { + prefix: 'fas', + iconName: 'share-alt-square', + icon: [448, 512, [], "f1e1", "M448 80v352c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48V80c0-26.51 21.49-48 48-48h352c26.51 0 48 21.49 48 48zM304 296c-14.562 0-27.823 5.561-37.783 14.671l-67.958-40.775a56.339 56.339 0 0 0 0-27.793l67.958-40.775C276.177 210.439 289.438 216 304 216c30.928 0 56-25.072 56-56s-25.072-56-56-56-56 25.072-56 56c0 4.797.605 9.453 1.74 13.897l-67.958 40.775C171.823 205.561 158.562 200 144 200c-30.928 0-56 25.072-56 56s25.072 56 56 56c14.562 0 27.823-5.561 37.783-14.671l67.958 40.775a56.088 56.088 0 0 0-1.74 13.897c0 30.928 25.072 56 56 56s56-25.072 56-56C360 321.072 334.928 296 304 296z"] +}; +var faShareSquare = { + prefix: 'fas', + iconName: 'share-square', + icon: [576, 512, [], "f14d", "M568.482 177.448L424.479 313.433C409.3 327.768 384 317.14 384 295.985v-71.963c-144.575.97-205.566 35.113-164.775 171.353 4.483 14.973-12.846 26.567-25.006 17.33C155.252 383.105 120 326.488 120 269.339c0-143.937 117.599-172.5 264-173.312V24.012c0-21.174 25.317-31.768 40.479-17.448l144.003 135.988c10.02 9.463 10.028 25.425 0 34.896zM384 379.128V448H64V128h50.916a11.99 11.99 0 0 0 8.648-3.693c14.953-15.568 32.237-27.89 51.014-37.676C185.708 80.83 181.584 64 169.033 64H48C21.49 64 0 85.49 0 112v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48v-88.806c0-8.288-8.197-14.066-16.011-11.302a71.83 71.83 0 0 1-34.189 3.377c-7.27-1.046-13.8 4.514-13.8 11.859z"] +}; +var faShekelSign = { + prefix: 'fas', + iconName: 'shekel-sign', + icon: [448, 512, [], "f20b", "M248 168v168c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V168c0-75.11-60.89-136-136-136H24C10.75 32 0 42.74 0 56v408c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112h112c30.93 0 56 25.07 56 56zM432 32h-48c-8.84 0-16 7.16-16 16v296c0 30.93-25.07 56-56 56H200V176c0-8.84-7.16-16-16-16h-48c-8.84 0-16 7.16-16 16v280c0 13.25 10.75 24 24 24h168c75.11 0 136-60.89 136-136V48c0-8.84-7.16-16-16-16z"] +}; +var faShieldAlt = { + prefix: 'fas', + iconName: 'shield-alt', + icon: [512, 512, [], "f3ed", "M466.5 83.7l-192-80a48.15 48.15 0 0 0-36.9 0l-192 80C27.7 91.1 16 108.6 16 128c0 198.5 114.5 335.7 221.5 380.3 11.8 4.9 25.1 4.9 36.9 0C360.1 472.6 496 349.3 496 128c0-19.4-11.7-36.9-29.5-44.3zM256.1 446.3l-.1-381 175.9 73.3c-3.3 151.4-82.1 261.1-175.8 307.7z"] +}; +var faShieldVirus = { + prefix: 'fas', + iconName: 'shield-virus', + icon: [512, 512, [], "e06c", "M224,192a16,16,0,1,0,16,16A16,16,0,0,0,224,192ZM466.5,83.68l-192-80A57.4,57.4,0,0,0,256.05,0a57.4,57.4,0,0,0-18.46,3.67l-192,80A47.93,47.93,0,0,0,16,128C16,326.5,130.5,463.72,237.5,508.32a48.09,48.09,0,0,0,36.91,0C360.09,472.61,496,349.3,496,128A48,48,0,0,0,466.5,83.68ZM384,256H371.88c-28.51,0-42.79,34.47-22.63,54.63l8.58,8.57a16,16,0,1,1-22.63,22.63l-8.57-8.58C306.47,313.09,272,327.37,272,355.88V368a16,16,0,0,1-32,0V355.88c0-28.51-34.47-42.79-54.63-22.63l-8.57,8.58a16,16,0,0,1-22.63-22.63l8.58-8.57c20.16-20.16,5.88-54.63-22.63-54.63H128a16,16,0,0,1,0-32h12.12c28.51,0,42.79-34.47,22.63-54.63l-8.58-8.57a16,16,0,0,1,22.63-22.63l8.57,8.58c20.16,20.16,54.63,5.88,54.63-22.63V112a16,16,0,0,1,32,0v12.12c0,28.51,34.47,42.79,54.63,22.63l8.57-8.58a16,16,0,0,1,22.63,22.63l-8.58,8.57C329.09,189.53,343.37,224,371.88,224H384a16,16,0,0,1,0,32Zm-96,0a16,16,0,1,0,16,16A16,16,0,0,0,288,256Z"] +}; +var faShip = { + prefix: 'fas', + iconName: 'ship', + icon: [640, 512, [], "f21a", "M496.616 372.639l70.012-70.012c16.899-16.9 9.942-45.771-12.836-53.092L512 236.102V96c0-17.673-14.327-32-32-32h-64V24c0-13.255-10.745-24-24-24H248c-13.255 0-24 10.745-24 24v40h-64c-17.673 0-32 14.327-32 32v140.102l-41.792 13.433c-22.753 7.313-29.754 36.173-12.836 53.092l70.012 70.012C125.828 416.287 85.587 448 24 448c-13.255 0-24 10.745-24 24v16c0 13.255 10.745 24 24 24 61.023 0 107.499-20.61 143.258-59.396C181.677 487.432 216.021 512 256 512h128c39.979 0 74.323-24.568 88.742-59.396C508.495 491.384 554.968 512 616 512c13.255 0 24-10.745 24-24v-16c0-13.255-10.745-24-24-24-60.817 0-101.542-31.001-119.384-75.361zM192 128h256v87.531l-118.208-37.995a31.995 31.995 0 0 0-19.584 0L192 215.531V128z"] +}; +var faShippingFast = { + prefix: 'fas', + iconName: 'shipping-fast', + icon: [640, 512, [], "f48b", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H112C85.5 0 64 21.5 64 48v48H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h272c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H40c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H8c-4.4 0-8 3.6-8 8v16c0 4.4 3.6 8 8 8h208c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H64v128c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"] +}; +var faShoePrints = { + prefix: 'fas', + iconName: 'shoe-prints', + icon: [640, 512, [], "f54b", "M192 160h32V32h-32c-35.35 0-64 28.65-64 64s28.65 64 64 64zM0 416c0 35.35 28.65 64 64 64h32V352H64c-35.35 0-64 28.65-64 64zm337.46-128c-34.91 0-76.16 13.12-104.73 32-24.79 16.38-44.52 32-104.73 32v128l57.53 15.97c26.21 7.28 53.01 13.12 80.31 15.05 32.69 2.31 65.6.67 97.58-6.2C472.9 481.3 512 429.22 512 384c0-64-84.18-96-174.54-96zM491.42 7.19C459.44.32 426.53-1.33 393.84.99c-27.3 1.93-54.1 7.77-80.31 15.04L256 32v128c60.2 0 79.94 15.62 104.73 32 28.57 18.88 69.82 32 104.73 32C555.82 224 640 192 640 128c0-45.22-39.1-97.3-148.58-120.81z"] +}; +var faShoppingBag = { + prefix: 'fas', + iconName: 'shopping-bag', + icon: [448, 512, [], "f290", "M352 160v-32C352 57.42 294.579 0 224 0 153.42 0 96 57.42 96 128v32H0v272c0 44.183 35.817 80 80 80h288c44.183 0 80-35.817 80-80V160h-96zm-192-32c0-35.29 28.71-64 64-64s64 28.71 64 64v32H160v-32zm160 120c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zm-192 0c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24z"] +}; +var faShoppingBasket = { + prefix: 'fas', + iconName: 'shopping-basket', + icon: [576, 512, [], "f291", "M576 216v16c0 13.255-10.745 24-24 24h-8l-26.113 182.788C514.509 462.435 494.257 480 470.37 480H105.63c-23.887 0-44.139-17.565-47.518-41.212L32 256h-8c-13.255 0-24-10.745-24-24v-16c0-13.255 10.745-24 24-24h67.341l106.78-146.821c10.395-14.292 30.407-17.453 44.701-7.058 14.293 10.395 17.453 30.408 7.058 44.701L170.477 192h235.046L326.12 82.821c-10.395-14.292-7.234-34.306 7.059-44.701 14.291-10.395 34.306-7.235 44.701 7.058L484.659 192H552c13.255 0 24 10.745 24 24zM312 392V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm112 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24zm-224 0V280c0-13.255-10.745-24-24-24s-24 10.745-24 24v112c0 13.255 10.745 24 24 24s24-10.745 24-24z"] +}; +var faShoppingCart = { + prefix: 'fas', + iconName: 'shopping-cart', + icon: [576, 512, [], "f07a", "M528.12 301.319l47.273-208C578.806 78.301 567.391 64 551.99 64H159.208l-9.166-44.81C147.758 8.021 137.93 0 126.529 0H24C10.745 0 0 10.745 0 24v16c0 13.255 10.745 24 24 24h69.883l70.248 343.435C147.325 417.1 136 435.222 136 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-15.674-6.447-29.835-16.824-40h209.647C430.447 426.165 424 440.326 424 456c0 30.928 25.072 56 56 56s56-25.072 56-56c0-22.172-12.888-41.332-31.579-50.405l5.517-24.276c3.413-15.018-8.002-29.319-23.403-29.319H218.117l-6.545-32h293.145c11.206 0 20.92-7.754 23.403-18.681z"] +}; +var faShower = { + prefix: 'fas', + iconName: 'shower', + icon: [512, 512, [], "f2cc", "M304,320a16,16,0,1,0,16,16A16,16,0,0,0,304,320Zm32-96a16,16,0,1,0,16,16A16,16,0,0,0,336,224Zm32,64a16,16,0,1,0-16-16A16,16,0,0,0,368,288Zm-32,32a16,16,0,1,0-16-16A16,16,0,0,0,336,320Zm-32-64a16,16,0,1,0,16,16A16,16,0,0,0,304,256Zm128-32a16,16,0,1,0-16-16A16,16,0,0,0,432,224Zm-48,16a16,16,0,1,0,16-16A16,16,0,0,0,384,240Zm-16-48a16,16,0,1,0,16,16A16,16,0,0,0,368,192Zm96,32a16,16,0,1,0,16,16A16,16,0,0,0,464,224Zm32-32a16,16,0,1,0,16,16A16,16,0,0,0,496,192Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,432,256Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,400,288Zm-64,64a16,16,0,1,0,16,16A16,16,0,0,0,336,352Zm-32,32a16,16,0,1,0,16,16A16,16,0,0,0,304,384Zm64-64a16,16,0,1,0,16,16A16,16,0,0,0,368,320Zm21.65-218.35-11.3-11.31a16,16,0,0,0-22.63,0L350.05,96A111.19,111.19,0,0,0,272,64c-19.24,0-37.08,5.3-52.9,13.85l-10-10A121.72,121.72,0,0,0,123.44,32C55.49,31.5,0,92.91,0,160.85V464a16,16,0,0,0,16,16H48a16,16,0,0,0,16-16V158.4c0-30.15,21-58.2,51-61.93a58.38,58.38,0,0,1,48.93,16.67l10,10C165.3,138.92,160,156.76,160,176a111.23,111.23,0,0,0,32,78.05l-5.66,5.67a16,16,0,0,0,0,22.62l11.3,11.31a16,16,0,0,0,22.63,0L389.65,124.28A16,16,0,0,0,389.65,101.65Z"] +}; +var faShuttleVan = { + prefix: 'fas', + iconName: 'shuttle-van', + icon: [640, 512, [], "f5b6", "M628.88 210.65L494.39 49.27A48.01 48.01 0 0 0 457.52 32H32C14.33 32 0 46.33 0 64v288c0 17.67 14.33 32 32 32h32c0 53.02 42.98 96 96 96s96-42.98 96-96h128c0 53.02 42.98 96 96 96s96-42.98 96-96h32c17.67 0 32-14.33 32-32V241.38c0-11.23-3.94-22.1-11.12-30.73zM64 192V96h96v96H64zm96 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm160-240h-96V96h96v96zm160 240c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-96-240V96h66.02l80 96H384z"] +}; +var faSign = { + prefix: 'fas', + iconName: 'sign', + icon: [512, 512, [], "f4d9", "M496 64H128V16c0-8.8-7.2-16-16-16H80c-8.8 0-16 7.2-16 16v48H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h48v368c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V128h368c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16zM160 384h320V160H160v224z"] +}; +var faSignInAlt = { + prefix: 'fas', + iconName: 'sign-in-alt', + icon: [512, 512, [], "f2f6", "M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z"] +}; +var faSignLanguage = { + prefix: 'fas', + iconName: 'sign-language', + icon: [448, 512, [], "f2a7", "M91.434 483.987c-.307-16.018 13.109-29.129 29.13-29.129h62.293v-5.714H56.993c-16.021 0-29.437-13.111-29.13-29.129C28.16 404.491 40.835 392 56.428 392h126.429v-5.714H29.136c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h154.286v-5.714H57.707c-16.021 0-29.437-13.111-29.13-29.129.297-15.522 12.973-28.013 28.566-28.013h168.566l-31.085-22.606c-12.762-9.281-15.583-27.149-6.302-39.912 9.281-12.761 27.15-15.582 39.912-6.302l123.361 89.715a34.287 34.287 0 0 1 14.12 27.728v141.136c0 15.91-10.946 29.73-26.433 33.374l-80.471 18.934a137.16 137.16 0 0 1-31.411 3.646H120c-15.593-.001-28.269-12.492-28.566-28.014zm73.249-225.701h36.423l-11.187-8.136c-18.579-13.511-20.313-40.887-3.17-56.536l-13.004-16.7c-9.843-12.641-28.43-15.171-40.88-5.088-12.065 9.771-14.133 27.447-4.553 39.75l36.371 46.71zm283.298-2.103l-5.003-152.452c-.518-15.771-13.722-28.136-29.493-27.619-15.773.518-28.137 13.722-27.619 29.493l1.262 38.415L283.565 11.019c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l76.889 98.745-4.509 3.511-94.79-121.734c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l94.443 121.288-4.509 3.511-77.675-99.754c-9.58-12.303-27.223-14.63-39.653-5.328-12.827 9.599-14.929 28.24-5.086 40.881l52.053 66.849c12.497-8.257 29.055-8.285 41.69.904l123.36 89.714c10.904 7.93 17.415 20.715 17.415 34.198v16.999l61.064-47.549a34.285 34.285 0 0 0 13.202-28.177z"] +}; +var faSignOutAlt = { + prefix: 'fas', + iconName: 'sign-out-alt', + icon: [512, 512, [], "f2f5", "M497 273L329 441c-15 15-41 4.5-41-17v-96H152c-13.3 0-24-10.7-24-24v-96c0-13.3 10.7-24 24-24h136V88c0-21.4 25.9-32 41-17l168 168c9.3 9.4 9.3 24.6 0 34zM192 436v-40c0-6.6-5.4-12-12-12H96c-17.7 0-32-14.3-32-32V160c0-17.7 14.3-32 32-32h84c6.6 0 12-5.4 12-12V76c0-6.6-5.4-12-12-12H96c-53 0-96 43-96 96v192c0 53 43 96 96 96h84c6.6 0 12-5.4 12-12z"] +}; +var faSignal = { + prefix: 'fas', + iconName: 'signal', + icon: [640, 512, [], "f012", "M216 288h-48c-8.84 0-16 7.16-16 16v192c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V304c0-8.84-7.16-16-16-16zM88 384H40c-8.84 0-16 7.16-16 16v96c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16v-96c0-8.84-7.16-16-16-16zm256-192h-48c-8.84 0-16 7.16-16 16v288c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V208c0-8.84-7.16-16-16-16zm128-96h-48c-8.84 0-16 7.16-16 16v384c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V112c0-8.84-7.16-16-16-16zM600 0h-48c-8.84 0-16 7.16-16 16v480c0 8.84 7.16 16 16 16h48c8.84 0 16-7.16 16-16V16c0-8.84-7.16-16-16-16z"] +}; +var faSignature = { + prefix: 'fas', + iconName: 'signature', + icon: [640, 512, [], "f5b7", "M623.2 192c-51.8 3.5-125.7 54.7-163.1 71.5-29.1 13.1-54.2 24.4-76.1 24.4-22.6 0-26-16.2-21.3-51.9 1.1-8 11.7-79.2-42.7-76.1-25.1 1.5-64.3 24.8-169.5 126L192 182.2c30.4-75.9-53.2-151.5-129.7-102.8L7.4 116.3C0 121-2.2 130.9 2.5 138.4l17.2 27c4.7 7.5 14.6 9.7 22.1 4.9l58-38.9c18.4-11.7 40.7 7.2 32.7 27.1L34.3 404.1C27.5 421 37 448 64 448c8.3 0 16.5-3.2 22.6-9.4 42.2-42.2 154.7-150.7 211.2-195.8-2.2 28.5-2.1 58.9 20.6 83.8 15.3 16.8 37.3 25.3 65.5 25.3 35.6 0 68-14.6 102.3-30 33-14.8 99-62.6 138.4-65.8 8.5-.7 15.2-7.3 15.2-15.8v-32.1c.2-9.1-7.5-16.8-16.6-16.2z"] +}; +var faSimCard = { + prefix: 'fas', + iconName: 'sim-card', + icon: [384, 512, [], "f7c4", "M0 64v384c0 35.3 28.7 64 64 64h256c35.3 0 64-28.7 64-64V128L256 0H64C28.7 0 0 28.7 0 64zm224 192h-64v-64h64v64zm96 0h-64v-64h32c17.7 0 32 14.3 32 32v32zm-64 128h64v32c0 17.7-14.3 32-32 32h-32v-64zm-96 0h64v64h-64v-64zm-96 0h64v64H96c-17.7 0-32-14.3-32-32v-32zm0-96h256v64H64v-64zm0-64c0-17.7 14.3-32 32-32h32v64H64v-32z"] +}; +var faSink = { + prefix: 'fas', + iconName: 'sink', + icon: [512, 512, [], "e06d", "M32,416a96,96,0,0,0,96,96H384a96,96,0,0,0,96-96V384H32ZM496,288H400V256h64a16,16,0,0,0,16-16V224a16,16,0,0,0-16-16H384a32,32,0,0,0-32,32v48H288V96a32,32,0,0,1,64,0v16a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V96A96.16,96.16,0,0,0,300.87,1.86C255.29,10.71,224,53.36,224,99.79V288H160V240a32,32,0,0,0-32-32H48a16,16,0,0,0-16,16v16a16,16,0,0,0,16,16h64v32H16A16,16,0,0,0,0,304v32a16,16,0,0,0,16,16H496a16,16,0,0,0,16-16V304A16,16,0,0,0,496,288Z"] +}; +var faSitemap = { + prefix: 'fas', + iconName: 'sitemap', + icon: [640, 512, [], "f0e8", "M128 352H32c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm-24-80h192v48h48v-48h192v48h48v-57.59c0-21.17-17.23-38.41-38.41-38.41H344v-64h40c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32H256c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h40v64H94.41C73.23 224 56 241.23 56 262.41V320h48v-48zm264 80h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32zm240 0h-96c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32z"] +}; +var faSkating = { + prefix: 'fas', + iconName: 'skating', + icon: [448, 512, [], "f7c5", "M400 0c-26.5 0-48 21.5-48 48s21.5 48 48 48 48-21.5 48-48-21.5-48-48-48zm0 448c-8.8 0-16 7.2-16 16s-7.2 16-16 16h-96c-8.8 0-16 7.2-16 16s7.2 16 16 16h96c26.5 0 48-21.5 48-48 0-8.8-7.2-16-16-16zm-282.2 8.6c-6.2 6.2-16.4 6.3-22.6 0l-67.9-67.9c-6.2-6.2-16.4-6.2-22.6 0s-6.2 16.4 0 22.6l67.9 67.9c9.4 9.4 21.7 14 34 14s24.6-4.7 33.9-14c6.2-6.2 6.2-16.4 0-22.6s-16.4-6.3-22.7 0zm56.1-179.8l-93.7 93.7c-12.5 12.5-12.5 32.8 0 45.2 6.2 6.2 14.4 9.4 22.6 9.4s16.4-3.1 22.6-9.4l91.9-91.9-30.2-30.2c-5-5-9.4-10.7-13.2-16.8zM128 160h105.5l-20.1 17.2c-13.5 11.5-21.6 28.4-22.3 46.1-.7 17.8 6.1 35.2 18.7 47.7l78.2 78.2V432c0 17.7 14.3 32 32 32s32-14.3 32-32v-89.4c0-12.6-5.1-25-14.1-33.9l-61-61c.5-.4 1.2-.6 1.7-1.1l82.3-82.3c11.5-11.5 14.9-28.6 8.7-43.6-6.2-15-20.7-24.7-37-24.7H128c-17.7 0-32 14.3-32 32s14.3 32 32 32z"] +}; +var faSkiing = { + prefix: 'fas', + iconName: 'skiing', + icon: [512, 512, [], "f7c9", "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm73 356.1c-9.4-9.4-24.6-9.4-33.9 0-12.1 12.1-30.5 15.4-45.1 8.7l-135.8-70.2 49.2-73.8c12.7-19 10.2-44.5-6-60.6L293 215.7l-107-53.1c-2.9 19.9 3.4 40 17.7 54.4l75.1 75.2-45.9 68.8L35 258.7c-11.7-6-26.2-1.5-32.3 10.3-6.1 11.8-1.5 26.3 10.3 32.3l391.9 202.5c11.9 5.5 24.5 8.1 37.1 8.1 23.2 0 46-9 63-26 9.3-9.3 9.3-24.5 0-33.8zM120 91.6l-11.5 22.5c14.4 7.3 31.2 4.9 42.8-4.8l47.2 23.4c-.1.1-.1.2-.2.3l114.5 56.8 32.4-13 6.4 19.1c4 12.1 12.6 22 24 27.7l58.1 29c15.9 7.9 35 1.5 42.9-14.3 7.9-15.8 1.5-35-14.3-42.9l-52.1-26.1-17.1-51.2c-8.1-24.2-40.9-56.6-84.5-39.2l-81.2 32.5-62.5-31c.3-14.5-7.2-28.6-20.9-35.6l-11.1 21.7h-.2l-34.4-7c-1.8-.4-3.7.2-5 1.7-1.9 2.2-1.7 5.5.5 7.4l26.2 23z"] +}; +var faSkiingNordic = { + prefix: 'fas', + iconName: 'skiing-nordic', + icon: [576, 512, [], "f7ca", "M336 96c26.5 0 48-21.5 48-48S362.5 0 336 0s-48 21.5-48 48 21.5 48 48 48zm216 320c-13.2 0-24 10.7-24 24 0 13.2-10.8 24-24 24h-69.5L460 285.6c11.7-4.7 20.1-16.2 20.1-29.6 0-17.7-14.3-32-32-32h-44L378 170.8c-12.5-25.5-35.5-44.2-61.8-50.9L245 98.7c-28.3-6.8-57.8-.5-80.8 17.1l-39.7 30.4c-14 10.7-16.7 30.8-5.9 44.9.7.9 1.7 1.3 2.4 2.1L66.9 464H24c-13.2 0-24 10.7-24 24s10.8 24 24 24h480c39.7 0 72-32.3 72-72 0-13.2-10.8-24-24-24zm-260.5 48h-96.9l43.1-91-22-13c-12.1-7.2-21.9-16.9-29.5-27.8L123.7 464H99.5l52.3-261.4c4.1-1 8.1-2.9 11.7-5.6l39.7-30.4c7.7-5.9 17.4-8 25.3-6.1l14.7 4.4-37.5 87.4c-12.6 29.5-1.3 64 26.3 80.3l85 50.2-25.5 81.2zm110.6 0h-43.6l23.6-75.5c5.9-20.8-2.9-43.1-21.6-54.4L299.3 298l31.3-78.3 20.3 41.4c8 16.3 24.9 26.9 43.1 26.9h33.3l-25.2 176z"] +}; +var faSkull = { + prefix: 'fas', + iconName: 'skull', + icon: [512, 512, [], "f54c", "M256 0C114.6 0 0 100.3 0 224c0 70.1 36.9 132.6 94.5 173.7 9.6 6.9 15.2 18.1 13.5 29.9l-9.4 66.2c-1.4 9.6 6 18.2 15.7 18.2H192v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h64v-56c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v56h77.7c9.7 0 17.1-8.6 15.7-18.2l-9.4-66.2c-1.7-11.7 3.8-23 13.5-29.9C475.1 356.6 512 294.1 512 224 512 100.3 397.4 0 256 0zm-96 320c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm192 0c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z"] +}; +var faSkullCrossbones = { + prefix: 'fas', + iconName: 'skull-crossbones', + icon: [448, 512, [], "f714", "M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z"] +}; +var faSlash = { + prefix: 'fas', + iconName: 'slash', + icon: [640, 512, [], "f715", "M594.53 508.63L6.18 53.9c-6.97-5.42-8.23-15.47-2.81-22.45L23.01 6.18C28.43-.8 38.49-2.06 45.47 3.37L633.82 458.1c6.97 5.42 8.23 15.47 2.81 22.45l-19.64 25.27c-5.42 6.98-15.48 8.23-22.46 2.81z"] +}; +var faSleigh = { + prefix: 'fas', + iconName: 'sleigh', + icon: [640, 512, [], "f7cc", "M612.7 350.7l-9.3-7.4c-6.9-5.5-17-4.4-22.5 2.5l-10 12.5c-5.5 6.9-4.4 17 2.5 22.5l9.3 7.4c5.9 4.7 9.2 11.7 9.2 19.2 0 13.6-11 24.6-24.6 24.6H48c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h516c39 0 73.7-29.3 75.9-68.3 1.4-23.8-8.7-46.3-27.2-61zM32 224c0 59.6 40.9 109.2 96 123.5V400h64v-48h192v48h64v-48c53 0 96-43 96-96v-96c17.7 0 32-14.3 32-32s-14.3-32-32-32h-96v64c0 35.3-28.7 64-64 64h-20.7c-65.8 0-125.9-37.2-155.3-96-29.4-58.8-89.6-96-155.3-96H32C14.3 32 0 46.3 0 64s14.3 32 32 32v128z"] +}; +var faSlidersH = { + prefix: 'fas', + iconName: 'sliders-h', + icon: [512, 512, [], "f1de", "M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z"] +}; +var faSmile = { + prefix: 'fas', + iconName: 'smile', + icon: [496, 512, [], "f118", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm80 168c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm-160 0c17.7 0 32 14.3 32 32s-14.3 32-32 32-32-14.3-32-32 14.3-32 32-32zm194.8 170.2C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.6-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.4-16.2 38.1 4.2 24.6 20.5z"] +}; +var faSmileBeam = { + prefix: 'fas', + iconName: 'smile-beam', + icon: [496, 512, [], "f5b8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM112 223.4c3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.7 8.6-10.8 11.9-14.9 4.5l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.3 7.4-15.8 4-15.1-4.5zm250.8 122.8C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11-36.7 24.6-20.5 22.4 26.9 55.2 42.2 90.2 42.2s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.3 24.6 20.5zm6.2-118.3l-9.5-17c-7.7-13.7-19.2-21.6-31.5-21.6s-23.8 7.9-31.5 21.6l-9.5 17c-4.1 7.3-15.6 4-14.9-4.5 3.3-42.1 32.2-71.4 56-71.4s52.7 29.3 56 71.4c.6 8.6-11 11.9-15.1 4.5z"] +}; +var faSmileWink = { + prefix: 'fas', + iconName: 'smile-wink', + icon: [496, 512, [], "f4da", "M0 256c0 137 111 248 248 248s248-111 248-248S385 8 248 8 0 119 0 256zm200-48c0 17.7-14.3 32-32 32s-32-14.3-32-32 14.3-32 32-32 32 14.3 32 32zm158.5 16.5c-14.8-13.2-46.2-13.2-61 0L288 233c-8.3 7.4-21.6.4-19.8-10.8 4-25.2 34.2-42.1 59.9-42.1S384 197 388 222.2c1.7 11.1-11.4 18.3-19.8 10.8l-9.7-8.5zM157.8 325.8C180.2 352.7 213 368 248 368s67.8-15.4 90.2-42.2c13.6-16.2 38.1 4.2 24.6 20.5C334.3 380.4 292.5 400 248 400s-86.3-19.6-114.8-53.8c-13.5-16.3 11.2-36.7 24.6-20.4z"] +}; +var faSmog = { + prefix: 'fas', + iconName: 'smog', + icon: [640, 512, [], "f75f", "M624 368H80c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h544c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm-480 96H16c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zm416 0H224c-8.8 0-16 7.2-16 16v16c0 8.8 7.2 16 16 16h336c8.8 0 16-7.2 16-16v-16c0-8.8-7.2-16-16-16zM144 288h156.1c22.5 19.7 51.6 32 83.9 32s61.3-12.3 83.9-32H528c61.9 0 112-50.1 112-112S589.9 64 528 64c-18 0-34.7 4.6-49.7 12.1C454 31 406.8 0 352 0c-41 0-77.8 17.3-104 44.8C221.8 17.3 185 0 144 0 64.5 0 0 64.5 0 144s64.5 144 144 144z"] +}; +var faSmoking = { + prefix: 'fas', + iconName: 'smoking', + icon: [640, 512, [], "f48d", "M632 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8zM553.3 87.1c-5.7-3.8-9.3-10-9.3-16.8V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v62.3c0 22 10.2 43.4 28.6 55.4 42.2 27.3 67.4 73.8 67.4 124V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-65.5-32.4-126.2-86.7-162.6zM432 352H48c-26.5 0-48 21.5-48 48v64c0 26.5 21.5 48 48 48h384c8.8 0 16-7.2 16-16V368c0-8.8-7.2-16-16-16zm-32 112H224v-64h176v64zm87.7-322.4C463.8 125 448 99.3 448 70.3V8c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v66.4c0 43.7 24.6 81.6 60.3 106.7 22.4 15.7 35.7 41.2 35.7 68.6V280c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-30.3c0-43.3-21-83.4-56.3-108.1zM536 352h-48c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V360c0-4.4-3.6-8-8-8z"] +}; +var faSmokingBan = { + prefix: 'fas', + iconName: 'smoking-ban', + icon: [512, 512, [], "f54d", "M96 304c0 8.8 7.2 16 16 16h117.5l-96-96H112c-8.8 0-16 7.2-16 16v64zM256 0C114.6 0 0 114.6 0 256s114.6 256 256 256 256-114.6 256-256S397.4 0 256 0zm0 448c-105.9 0-192-86.1-192-192 0-41.4 13.3-79.7 35.7-111.1l267.4 267.4C335.7 434.7 297.4 448 256 448zm45.2-192H384v32h-50.8l-32-32zm111.1 111.1L365.2 320H400c8.8 0 16-7.2 16-16v-64c0-8.8-7.2-16-16-16H269.2L144.9 99.7C176.3 77.3 214.6 64 256 64c105.9 0 192 86.1 192 192 0 41.4-13.3 79.7-35.7 111.1zM320.6 128c-15.6 0-28.6-11.2-31.4-25.9-.7-3.6-4-6.1-7.7-6.1h-16.2c-5 0-8.7 4.5-8 9.4 4.6 30.9 31.2 54.6 63.3 54.6 15.6 0 28.6 11.2 31.4 25.9.7 3.6 4 6.1 7.7 6.1h16.2c5 0 8.7-4.5 8-9.4-4.6-30.9-31.2-54.6-63.3-54.6z"] +}; +var faSms = { + prefix: 'fas', + iconName: 'sms', + icon: [512, 512, [], "f7cd", "M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7 1.3 3 4.1 4.8 7.3 4.8 66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32zM128.2 304H116c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H156c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-19 38.6-42.4 38.6zm191.8-8c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8v-68.2l-24.8 55.8c-2.9 5.9-11.4 5.9-14.3 0L224 227.8V296c0 4.4-3.6 8-8 8h-16c-4.4 0-8-3.6-8-8V192c0-8.8 7.2-16 16-16h16c6.1 0 11.6 3.4 14.3 8.8l17.7 35.4 17.7-35.4c2.7-5.4 8.3-8.8 14.3-8.8h16c8.8 0 16 7.2 16 16v104zm48.3 8H356c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h12.3c6 0 10.4-3.5 10.4-6.6 0-1.3-.8-2.7-2.1-3.8l-21.9-18.8c-8.5-7.2-13.3-17.5-13.3-28.1 0-21.3 19-38.6 42.4-38.6H396c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8h-12.3c-6 0-10.4 3.5-10.4 6.6 0 1.3.8 2.7 2.1 3.8l21.9 18.8c8.5 7.2 13.3 17.5 13.3 28.1.1 21.3-18.9 38.6-42.3 38.6z"] +}; +var faSnowboarding = { + prefix: 'fas', + iconName: 'snowboarding', + icon: [512, 512, [], "f7ce", "M432 96c26.5 0 48-21.5 48-48S458.5 0 432 0s-48 21.5-48 48 21.5 48 48 48zm28.8 153.6c5.8 4.3 12.5 6.4 19.2 6.4 9.7 0 19.3-4.4 25.6-12.8 10.6-14.1 7.8-34.2-6.4-44.8l-111.4-83.5c-13.8-10.3-29.1-18.4-45.4-23.8l-63.7-21.2-26.1-52.1C244.7 2 225.5-4.4 209.7 3.5c-15.8 7.9-22.2 27.1-14.3 42.9l29.1 58.1c5.7 11.4 15.6 19.9 27.7 24l16.4 5.5-41.2 20.6c-21.8 10.9-35.4 32.8-35.4 57.2v53.1l-74.1 24.7c-16.8 5.6-25.8 23.7-20.2 40.5 1.7 5.2 4.9 9.4 8.7 12.9l-38.7-14.1c-9.7-3.5-17.4-10.6-21.8-20-5.6-12-19.9-17.2-31.9-11.6s-17.2 19.9-11.6 31.9c9.8 21 27.1 36.9 48.9 44.8l364.8 132.7c9.7 3.5 19.7 5.3 29.7 5.3 12.5 0 24.9-2.7 36.5-8.2 12-5.6 17.2-19.9 11.6-31.9S474 454.7 462 460.3c-9.3 4.4-19.8 4.8-29.5 1.3l-90.8-33.1c8.7-4.1 15.6-11.8 17.8-21.9l21.9-102c3.9-18.2-3.2-37.2-18.1-48.4l-52-39 66-30.5 83.5 62.9zm-144.4 51.7l-19.7 92c-1.5 7.1-.1 13.9 2.8 20l-169.4-61.6c2.7-.2 5.4-.4 8-1.3l85-28.4c19.6-6.5 32.8-24.8 32.8-45.5V256l60.5 45.3z"] +}; +var faSnowflake = { + prefix: 'fas', + iconName: 'snowflake', + icon: [448, 512, [], "f2dc", "M440.3 345.2l-33.8-19.5 26-7c8.2-2.2 13.1-10.7 10.9-18.9l-4-14.9c-2.2-8.2-10.7-13.1-18.9-10.9l-70.8 19-63.9-37 63.8-36.9 70.8 19c8.2 2.2 16.7-2.7 18.9-10.9l4-14.9c2.2-8.2-2.7-16.7-10.9-18.9l-26-7 33.8-19.5c7.4-4.3 9.9-13.7 5.7-21.1L430.4 119c-4.3-7.4-13.7-9.9-21.1-5.7l-33.8 19.5 7-26c2.2-8.2-2.7-16.7-10.9-18.9l-14.9-4c-8.2-2.2-16.7 2.7-18.9 10.9l-19 70.8-62.8 36.2v-77.5l53.7-53.7c6.2-6.2 6.2-16.4 0-22.6l-11.3-11.3c-6.2-6.2-16.4-6.2-22.6 0L256 56.4V16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v40.4l-19.7-19.7c-6.2-6.2-16.4-6.2-22.6 0L138.3 48c-6.3 6.2-6.3 16.4 0 22.6l53.7 53.7v77.5l-62.8-36.2-19-70.8c-2.2-8.2-10.7-13.1-18.9-10.9l-14.9 4c-8.2 2.2-13.1 10.7-10.9 18.9l7 26-33.8-19.5c-7.4-4.3-16.8-1.7-21.1 5.7L2.1 145.7c-4.3 7.4-1.7 16.8 5.7 21.1l33.8 19.5-26 7c-8.3 2.2-13.2 10.7-11 19l4 14.9c2.2 8.2 10.7 13.1 18.9 10.9l70.8-19 63.8 36.9-63.8 36.9-70.8-19c-8.2-2.2-16.7 2.7-18.9 10.9l-4 14.9c-2.2 8.2 2.7 16.7 10.9 18.9l26 7-33.8 19.6c-7.4 4.3-9.9 13.7-5.7 21.1l15.5 26.8c4.3 7.4 13.7 9.9 21.1 5.7l33.8-19.5-7 26c-2.2 8.2 2.7 16.7 10.9 18.9l14.9 4c8.2 2.2 16.7-2.7 18.9-10.9l19-70.8 62.8-36.2v77.5l-53.7 53.7c-6.3 6.2-6.3 16.4 0 22.6l11.3 11.3c6.2 6.2 16.4 6.2 22.6 0l19.7-19.7V496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-40.4l19.7 19.7c6.2 6.2 16.4 6.2 22.6 0l11.3-11.3c6.2-6.2 6.2-16.4 0-22.6L256 387.7v-77.5l62.8 36.2 19 70.8c2.2 8.2 10.7 13.1 18.9 10.9l14.9-4c8.2-2.2 13.1-10.7 10.9-18.9l-7-26 33.8 19.5c7.4 4.3 16.8 1.7 21.1-5.7l15.5-26.8c4.3-7.3 1.8-16.8-5.6-21z"] +}; +var faSnowman = { + prefix: 'fas', + iconName: 'snowman', + icon: [512, 512, [], "f7d0", "M510.9 152.3l-5.9-14.5c-3.3-8-12.6-11.9-20.8-8.7L456 140.6v-29c0-8.6-7.2-15.6-16-15.6h-16c-8.8 0-16 7-16 15.6v46.9c0 .5.3 1 .3 1.5l-56.4 23c-5.9-10-13.3-18.9-22-26.6 13.6-16.6 22-37.4 22-60.5 0-53-43-96-96-96s-96 43-96 96c0 23.1 8.5 43.9 22 60.5-8.7 7.7-16 16.6-22 26.6l-56.4-23c.1-.5.3-1 .3-1.5v-46.9C104 103 96.8 96 88 96H72c-8.8 0-16 7-16 15.6v29l-28.1-11.5c-8.2-3.2-17.5.7-20.8 8.7l-5.9 14.5c-3.3 8 .7 17.1 8.9 20.3l135.2 55.2c-.4 4-1.2 8-1.2 12.2 0 10.1 1.7 19.6 4.2 28.9C120.9 296.4 104 334.2 104 376c0 54 28.4 100.9 70.8 127.8 9.3 5.9 20.3 8.2 31.3 8.2h99.2c13.3 0 26.3-4.1 37.2-11.7 46.5-32.3 74.4-89.4 62.9-152.6-5.5-30.2-20.5-57.6-41.6-79 2.5-9.2 4.2-18.7 4.2-28.7 0-4.2-.8-8.1-1.2-12.2L502 172.6c8.1-3.1 12.1-12.2 8.9-20.3zM224 96c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm32 272c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-64c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16zm0-88s-16-23.2-16-32 7.2-16 16-16 16 7.2 16 16-16 32-16 32zm32-56c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"] +}; +var faSnowplow = { + prefix: 'fas', + iconName: 'snowplow', + icon: [640, 512, [], "f7d2", "M120 376c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm80 0c-13.3 0-24 10.7-24 24s10.7 24 24 24 24-10.7 24-24-10.7-24-24-24zm238.6 49.4c-14.5-14.5-22.6-34.1-22.6-54.6V269.2c0-20.5 8.1-40.1 22.6-54.6l36.7-36.7c6.2-6.2 6.2-16.4 0-22.6l-22.6-22.6c-6.2-6.2-16.4-6.2-22.6 0l-36.7 36.7c-26.5 26.5-41.4 62.4-41.4 99.9V288h-64v-50.9c0-8.7-1.8-17.2-5.2-25.2L364.5 29.1C356.9 11.4 339.6 0 320.3 0H176c-26.5 0-48 21.5-48 48v112h-16c-26.5 0-48 21.5-48 48v91.2C26.3 317.2 0 355.4 0 400c0 61.9 50.1 112 112 112h256c61.9 0 112-50.1 112-112 0-17.3-4.2-33.4-11.2-48H512v18.7c0 37.5 14.9 73.4 41.4 99.9l36.7 36.7c6.2 6.2 16.4 6.2 22.6 0l22.6-22.6c6.2-6.2 6.2-16.4 0-22.6l-36.7-36.7zM192 64h117.8l68.6 160H256l-64-64V64zm176 384H112c-26.5 0-48-21.5-48-48s21.5-48 48-48h256c26.5 0 48 21.5 48 48s-21.5 48-48 48z"] +}; +var faSoap = { + prefix: 'fas', + iconName: 'soap', + icon: [512, 512, [], "e06e", "M416,192a95.42,95.42,0,0,1-30.94,70.21A95.8,95.8,0,0,1,352,448H160a96,96,0,0,1,0-192h88.91A95.3,95.3,0,0,1,224,192H96A96,96,0,0,0,0,288V416a96,96,0,0,0,96,96H416a96,96,0,0,0,96-96V288A96,96,0,0,0,416,192Zm-96,64a64,64,0,1,0-64-64A64,64,0,0,0,320,256ZM208,96a48,48,0,1,0-48-48A48,48,0,0,0,208,96ZM384,64a32,32,0,1,0-32-32A32,32,0,0,0,384,64ZM160,288a64,64,0,0,0,0,128H352a64,64,0,0,0,0-128Z"] +}; +var faSocks = { + prefix: 'fas', + iconName: 'socks', + icon: [512, 512, [], "f696", "M214.66 311.01L288 256V96H128v176l-86.65 64.61c-39.4 29.56-53.86 84.42-29.21 127.06C30.39 495.25 63.27 512 96.08 512c20.03 0 40.25-6.25 57.52-19.2l21.86-16.39c-29.85-55.38-13.54-125.84 39.2-165.4zM288 32c0-11.05 3.07-21.3 8.02-30.38C293.4.92 290.85 0 288 0H160c-17.67 0-32 14.33-32 32v32h160V32zM480 0H352c-17.67 0-32 14.33-32 32v32h192V32c0-17.67-14.33-32-32-32zM320 272l-86.13 64.61c-39.4 29.56-53.86 84.42-29.21 127.06 18.25 31.58 50.61 48.33 83.42 48.33 20.03 0 40.25-6.25 57.52-19.2l115.2-86.4A127.997 127.997 0 0 0 512 304V96H320v176z"] +}; +var faSolarPanel = { + prefix: 'fas', + iconName: 'solar-panel', + icon: [640, 512, [], "f5ba", "M431.98 448.01l-47.97.05V416h-128v32.21l-47.98.05c-8.82.01-15.97 7.16-15.98 15.99l-.05 31.73c-.01 8.85 7.17 16.03 16.02 16.02l223.96-.26c8.82-.01 15.97-7.16 15.98-15.98l.04-31.73c.01-8.85-7.17-16.03-16.02-16.02zM585.2 26.74C582.58 11.31 568.99 0 553.06 0H86.93C71 0 57.41 11.31 54.79 26.74-3.32 369.16.04 348.08.03 352c-.03 17.32 14.29 32 32.6 32h574.74c18.23 0 32.51-14.56 32.59-31.79.02-4.08 3.35 16.95-54.76-325.47zM259.83 64h120.33l9.77 96H250.06l9.77-96zm-75.17 256H71.09L90.1 208h105.97l-11.41 112zm16.29-160H98.24l16.29-96h96.19l-9.77 96zm32.82 160l11.4-112h149.65l11.4 112H233.77zm195.5-256h96.19l16.29 96H439.04l-9.77-96zm26.06 256l-11.4-112H549.9l19.01 112H455.33z"] +}; +var faSort = { + prefix: 'fas', + iconName: 'sort', + icon: [320, 512, [], "f0dc", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41zm255-105L177 64c-9.4-9.4-24.6-9.4-33.9 0L24 183c-15.1 15.1-4.4 41 17 41h238c21.4 0 32.1-25.9 17-41z"] +}; +var faSortAlphaDown = { + prefix: 'fas', + iconName: 'sort-alpha-down', + icon: [448, 512, [], "f15d", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"] +}; +var faSortAlphaDownAlt = { + prefix: 'fas', + iconName: 'sort-alpha-down-alt', + icon: [448, 512, [], "f881", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm112-128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"] +}; +var faSortAlphaUp = { + prefix: 'fas', + iconName: 'sort-alpha-up', + icon: [448, 512, [], "f15e", "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm400 128H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z"] +}; +var faSortAlphaUpAlt = { + prefix: 'fas', + iconName: 'sort-alpha-up-alt', + icon: [448, 512, [], "f882", "M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z"] +}; +var faSortAmountDown = { + prefix: 'fas', + iconName: 'sort-amount-down', + icon: [512, 512, [], "f160", "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faSortAmountDownAlt = { + prefix: 'fas', + iconName: 'sort-amount-down-alt', + icon: [512, 512, [], "f884", "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm-64 0h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z"] +}; +var faSortAmountUp = { + prefix: 'fas', + iconName: 'sort-amount-up', + icon: [512, 512, [], "f161", "M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.77 160 16 160zm416 0H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faSortAmountUpAlt = { + prefix: 'fas', + iconName: 'sort-amount-up-alt', + icon: [512, 512, [], "f885", "M240 96h64a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm0 128h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm256 192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-256-64h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zM16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.39-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160z"] +}; +var faSortDown = { + prefix: 'fas', + iconName: 'sort-down', + icon: [320, 512, [], "f0dd", "M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z"] +}; +var faSortNumericDown = { + prefix: 'fas', + iconName: 'sort-numeric-down', + icon: [448, 512, [], "f162", "M304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zm26.15 162.91a79 79 0 0 0-55 54.17c-14.25 51.05 21.21 97.77 68.85 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zm-176-4h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352z"] +}; +var faSortNumericDownAlt = { + prefix: 'fas', + iconName: 'sort-numeric-down-alt', + icon: [448, 512, [], "f886", "M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm224 64h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z"] +}; +var faSortNumericUp = { + prefix: 'fas', + iconName: 'sort-numeric-up', + icon: [448, 512, [], "f163", "M330.17 258.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.76 86.25-61.61 86.25-132V336c-.02-51.21-48.4-91.34-101.85-77.09zM352 356a20 20 0 1 1 20-20 20 20 0 0 1-20 20zM304 96h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-16V48a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 96zM107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31z"] +}; +var faSortNumericUpAlt = { + prefix: 'fas', + iconName: 'sort-numeric-up-alt', + icon: [448, 512, [], "f887", "M107.31 36.69a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31zM400 416h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 304 352h16v64h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM330.17 34.91a79 79 0 0 0-55 54.17c-14.27 51.05 21.19 97.77 68.83 102.53a84.07 84.07 0 0 1-20.85 12.91c-7.57 3.4-10.8 12.47-8.18 20.34l9.9 20c2.87 8.63 12.53 13.49 20.9 9.91 58-24.77 86.25-61.61 86.25-132V112c-.02-51.21-48.4-91.34-101.85-77.09zM352 132a20 20 0 1 1 20-20 20 20 0 0 1-20 20z"] +}; +var faSortUp = { + prefix: 'fas', + iconName: 'sort-up', + icon: [320, 512, [], "f0de", "M279 224H41c-21.4 0-32.1-25.9-17-41L143 64c9.4-9.4 24.6-9.4 33.9 0l119 119c15.2 15.1 4.5 41-16.9 41z"] +}; +var faSpa = { + prefix: 'fas', + iconName: 'spa', + icon: [576, 512, [], "f5bb", "M568.25 192c-29.04.13-135.01 6.16-213.84 83-33.12 29.63-53.36 63.3-66.41 94.86-13.05-31.56-33.29-65.23-66.41-94.86-78.83-76.84-184.8-82.87-213.84-83-4.41-.02-7.79 3.4-7.75 7.82.23 27.92 7.14 126.14 88.77 199.3C172.79 480.94 256 480 288 480s115.19.95 199.23-80.88c81.64-73.17 88.54-171.38 88.77-199.3.04-4.42-3.34-7.84-7.75-7.82zM287.98 302.6c12.82-18.85 27.6-35.78 44.09-50.52 19.09-18.61 39.58-33.3 60.26-45.18-16.44-70.5-51.72-133.05-96.73-172.22-4.11-3.58-11.02-3.58-15.14 0-44.99 39.14-80.27 101.63-96.74 172.07 20.37 11.7 40.5 26.14 59.22 44.39a282.768 282.768 0 0 1 45.04 51.46z"] +}; +var faSpaceShuttle = { + prefix: 'fas', + iconName: 'space-shuttle', + icon: [640, 512, [], "f197", "M592.604 208.244C559.735 192.836 515.777 184 472 184H186.327c-4.952-6.555-10.585-11.978-16.72-16H376C229.157 137.747 219.403 32 96.003 32H96v128H80V32c-26.51 0-48 28.654-48 64v64c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v16c-23.197 0-32 10.032-32 24v40c0 13.983 8.819 24 32 24v64c0 35.346 21.49 64 48 64V352h16v128h.003c123.4 0 133.154-105.747 279.997-136H169.606c6.135-4.022 11.768-9.445 16.72-16H472c43.777 0 87.735-8.836 120.604-24.244C622.282 289.845 640 271.992 640 256s-17.718-33.845-47.396-47.756zM488 296a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8c31.909 0 31.942 80 0 80z"] +}; +var faSpellCheck = { + prefix: 'fas', + iconName: 'spell-check', + icon: [576, 512, [], "f891", "M272 256h91.36c43.2 0 82-32.2 84.51-75.34a79.82 79.82 0 0 0-25.26-63.07 79.81 79.81 0 0 0 9.06-44.91C427.9 30.57 389.3 0 347 0h-75a16 16 0 0 0-16 16v224a16 16 0 0 0 16 16zm40-200h40a24 24 0 0 1 0 48h-40zm0 96h56a24 24 0 0 1 0 48h-56zM155.12 22.25A32 32 0 0 0 124.64 0H99.36a32 32 0 0 0-30.48 22.25L.59 235.73A16 16 0 0 0 16 256h24.93a16 16 0 0 0 15.42-11.73L68.29 208h87.42l11.94 36.27A16 16 0 0 0 183.07 256H208a16 16 0 0 0 15.42-20.27zM89.37 144L112 75.3l22.63 68.7zm482 132.48l-45.21-45.3a15.88 15.88 0 0 0-22.59 0l-151.5 151.5-55.41-55.5a15.88 15.88 0 0 0-22.59 0l-45.3 45.3a16 16 0 0 0 0 22.59l112 112.21a15.89 15.89 0 0 0 22.6 0l208-208.21a16 16 0 0 0-.02-22.59z"] +}; +var faSpider = { + prefix: 'fas', + iconName: 'spider', + icon: [576, 512, [], "f717", "M151.17 167.35L177.1 176h4.67l5.22-26.12c.72-3.58 1.8-7.58 3.21-11.79l-20.29-40.58 23.8-71.39c2.79-8.38-1.73-17.44-10.12-20.24L168.42.82c-8.38-2.8-17.45 1.73-20.24 10.12l-25.89 77.68a32.04 32.04 0 0 0 1.73 24.43l27.15 54.3zm422.14 182.03l-52.75-79.12a32.002 32.002 0 0 0-26.62-14.25H416l68.99-24.36a32.03 32.03 0 0 0 16.51-12.61l53.6-80.41c4.9-7.35 2.91-17.29-4.44-22.19l-13.31-8.88c-7.35-4.9-17.29-2.91-22.19 4.44l-50.56 75.83L404.1 208H368l-10.37-51.85C355.44 145.18 340.26 96 288 96c-52.26 0-67.44 49.18-69.63 60.15L208 208h-36.1l-60.49-20.17L60.84 112c-4.9-7.35-14.83-9.34-22.19-4.44l-13.31 8.88c-7.35 4.9-9.34 14.83-4.44 22.19l53.6 80.41a32.03 32.03 0 0 0 16.51 12.61L160 256H82.06a32.02 32.02 0 0 0-26.63 14.25L2.69 349.38c-4.9 7.35-2.92 17.29 4.44 22.19l13.31 8.88c7.35 4.9 17.29 2.91 22.19-4.44l48-72h47.06l-60.83 97.33A31.988 31.988 0 0 0 72 418.3V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-73.11l74.08-118.53c-1.01 14.05-2.08 28.11-2.08 42.21C192 399.64 232.76 448 288 448s96-48.36 96-101.43c0-14.1-1.08-28.16-2.08-42.21L456 422.89V496c0 8.84 7.16 16 16 16h16c8.84 0 16-7.16 16-16v-77.71c0-6-1.69-11.88-4.86-16.96L438.31 304h47.06l48 72c4.9 7.35 14.84 9.34 22.19 4.44l13.31-8.88c7.36-4.9 9.34-14.83 4.44-22.18zM406.09 97.51l-20.29 40.58c1.41 4.21 2.49 8.21 3.21 11.79l5.22 26.12h4.67l25.93-8.65 27.15-54.3a31.995 31.995 0 0 0 1.73-24.43l-25.89-77.68C425.03 2.56 415.96-1.98 407.58.82l-15.17 5.06c-8.38 2.8-12.91 11.86-10.12 20.24l23.8 71.39z"] +}; +var faSpinner = { + prefix: 'fas', + iconName: 'spinner', + icon: [512, 512, [], "f110", "M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z"] +}; +var faSplotch = { + prefix: 'fas', + iconName: 'splotch', + icon: [512, 512, [], "f5bc", "M472.29 195.89l-67.06-22.95c-19.28-6.6-33.54-20.92-38.14-38.3L351.1 74.19c-11.58-43.77-76.57-57.13-109.98-22.62l-46.14 47.67c-13.26 13.71-33.54 20.93-54.2 19.31l-71.88-5.62c-52.05-4.07-86.93 44.88-59.03 82.83l38.54 52.42c11.08 15.07 12.82 33.86 4.64 50.24L24.62 355.4c-20.59 41.25 22.84 84.87 73.49 73.81l69.96-15.28c20.11-4.39 41.45 0 57.07 11.73l54.32 40.83c39.32 29.56 101.04 7.57 104.45-37.22l4.7-61.86c1.35-17.79 12.8-33.86 30.63-42.99l62-31.74c44.88-22.96 39.59-80.17-8.95-96.79z"] +}; +var faSprayCan = { + prefix: 'fas', + iconName: 'spray-can', + icon: [512, 512, [], "f5bd", "M224 32c0-17.67-14.33-32-32-32h-64c-17.67 0-32 14.33-32 32v96h128V32zm256 96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-256 32H96c-53.02 0-96 42.98-96 96v224c0 17.67 14.33 32 32 32h256c17.67 0 32-14.33 32-32V256c0-53.02-42.98-96-96-96zm-64 256c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zM480 96c17.67 0 32-14.33 32-32s-14.33-32-32-32-32 14.33-32 32 14.33 32 32 32zm-96 32c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm-96-96c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 0c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32zm96 192c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"] +}; +var faSquare = { + prefix: 'fas', + iconName: 'square', + icon: [448, 512, [], "f0c8", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"] +}; +var faSquareFull = { + prefix: 'fas', + iconName: 'square-full', + icon: [512, 512, [], "f45c", "M512 512H0V0h512v512z"] +}; +var faSquareRootAlt = { + prefix: 'fas', + iconName: 'square-root-alt', + icon: [576, 512, [], "f698", "M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z"] +}; +var faStamp = { + prefix: 'fas', + iconName: 'stamp', + icon: [512, 512, [], "f5bf", "M32 512h448v-64H32v64zm384-256h-66.56c-16.26 0-29.44-13.18-29.44-29.44v-9.46c0-27.37 8.88-53.41 21.46-77.72 9.11-17.61 12.9-38.39 9.05-60.42-6.77-38.78-38.47-70.7-77.26-77.45C212.62-9.04 160 37.33 160 96c0 14.16 3.12 27.54 8.69 39.58C182.02 164.43 192 194.7 192 226.49v.07c0 16.26-13.18 29.44-29.44 29.44H96c-53.02 0-96 42.98-96 96v32c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-32c0-53.02-42.98-96-96-96z"] +}; +var faStar = { + prefix: 'fas', + iconName: 'star', + icon: [576, 512, [], "f005", "M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"] +}; +var faStarAndCrescent = { + prefix: 'fas', + iconName: 'star-and-crescent', + icon: [512, 512, [], "f699", "M340.47 466.36c-1.45 0-6.89.46-9.18.46-116.25 0-210.82-94.57-210.82-210.82S215.04 45.18 331.29 45.18c2.32 0 7.7.46 9.18.46 7.13 0 13.33-5.03 14.75-12.07 1.46-7.25-2.55-14.49-9.47-17.09C316.58 5.54 286.39 0 256 0 114.84 0 0 114.84 0 256s114.84 256 256 256c30.23 0 60.28-5.49 89.32-16.32 5.96-2.02 10.28-7.64 10.28-14.26 0-8.09-6.39-15.06-15.13-15.06zm162.99-252.5l-76.38-11.1-34.16-69.21c-1.83-3.7-5.38-5.55-8.93-5.55s-7.1 1.85-8.93 5.55l-34.16 69.21-76.38 11.1c-8.17 1.18-11.43 11.22-5.52 16.99l55.27 53.87-13.05 76.07c-1.11 6.44 4.01 11.66 9.81 11.66 1.53 0 3.11-.36 4.64-1.17L384 335.37l68.31 35.91c1.53.8 3.11 1.17 4.64 1.17 5.8 0 10.92-5.23 9.81-11.66l-13.05-76.07 55.27-53.87c5.91-5.77 2.65-15.81-5.52-16.99z"] +}; +var faStarHalf = { + prefix: 'fas', + iconName: 'star-half', + icon: [576, 512, [], "f089", "M288 0c-11.4 0-22.8 5.9-28.7 17.8L194 150.2 47.9 171.4c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.1 23 46 46.4 33.7L288 439.6V0z"] +}; +var faStarHalfAlt = { + prefix: 'fas', + iconName: 'star-half-alt', + icon: [536, 512, [], "f5c0", "M508.55 171.51L362.18 150.2 296.77 17.81C290.89 5.98 279.42 0 267.95 0c-11.4 0-22.79 5.9-28.69 17.81l-65.43 132.38-146.38 21.29c-26.25 3.8-36.77 36.09-17.74 54.59l105.89 103-25.06 145.48C86.98 495.33 103.57 512 122.15 512c4.93 0 10-1.17 14.87-3.75l130.95-68.68 130.94 68.7c4.86 2.55 9.92 3.71 14.83 3.71 18.6 0 35.22-16.61 31.66-37.4l-25.03-145.49 105.91-102.98c19.04-18.5 8.52-50.8-17.73-54.6zm-121.74 123.2l-18.12 17.62 4.28 24.88 19.52 113.45-102.13-53.59-22.38-11.74.03-317.19 51.03 103.29 11.18 22.63 25.01 3.64 114.23 16.63-82.65 80.38z"] +}; +var faStarOfDavid = { + prefix: 'fas', + iconName: 'star-of-david', + icon: [464, 512, [], "f69a", "M405.68 256l53.21-89.39C473.3 142.4 455.48 112 426.88 112H319.96l-55.95-93.98C256.86 6.01 244.43 0 232 0s-24.86 6.01-32.01 18.02L144.04 112H37.11c-28.6 0-46.42 30.4-32.01 54.61L58.32 256 5.1 345.39C-9.31 369.6 8.51 400 37.11 400h106.93l55.95 93.98C207.14 505.99 219.57 512 232 512s24.86-6.01 32.01-18.02L319.96 400h106.93c28.6 0 46.42-30.4 32.01-54.61L405.68 256zm-12.78-88l-19.8 33.26L353.3 168h39.6zm-52.39 88l-52.39 88H175.88l-52.39-88 52.38-88h112.25l52.39 88zM232 73.72L254.79 112h-45.57L232 73.72zM71.1 168h39.6l-19.8 33.26L71.1 168zm0 176l19.8-33.26L110.7 344H71.1zM232 438.28L209.21 400h45.57L232 438.28zM353.29 344l19.8-33.26L392.9 344h-39.61z"] +}; +var faStarOfLife = { + prefix: 'fas', + iconName: 'star-of-life', + icon: [480, 512, [], "f621", "M471.99 334.43L336.06 256l135.93-78.43c7.66-4.42 10.28-14.2 5.86-21.86l-32.02-55.43c-4.42-7.65-14.21-10.28-21.87-5.86l-135.93 78.43V16c0-8.84-7.17-16-16.01-16h-64.04c-8.84 0-16.01 7.16-16.01 16v156.86L56.04 94.43c-7.66-4.42-17.45-1.79-21.87 5.86L2.15 155.71c-4.42 7.65-1.8 17.44 5.86 21.86L143.94 256 8.01 334.43c-7.66 4.42-10.28 14.21-5.86 21.86l32.02 55.43c4.42 7.65 14.21 10.27 21.87 5.86l135.93-78.43V496c0 8.84 7.17 16 16.01 16h64.04c8.84 0 16.01-7.16 16.01-16V339.14l135.93 78.43c7.66 4.42 17.45 1.8 21.87-5.86l32.02-55.43c4.42-7.65 1.8-17.43-5.86-21.85z"] +}; +var faStepBackward = { + prefix: 'fas', + iconName: 'step-backward', + icon: [448, 512, [], "f048", "M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z"] +}; +var faStepForward = { + prefix: 'fas', + iconName: 'step-forward', + icon: [448, 512, [], "f051", "M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z"] +}; +var faStethoscope = { + prefix: 'fas', + iconName: 'stethoscope', + icon: [512, 512, [], "f0f1", "M447.1 112c-34.2.5-62.3 28.4-63 62.6-.5 24.3 12.5 45.6 32 56.8V344c0 57.3-50.2 104-112 104-60 0-109.2-44.1-111.9-99.2C265 333.8 320 269.2 320 192V36.6c0-11.4-8.1-21.3-19.3-23.5L237.8.5c-13-2.6-25.6 5.8-28.2 18.8L206.4 35c-2.6 13 5.8 25.6 18.8 28.2l30.7 6.1v121.4c0 52.9-42.2 96.7-95.1 97.2-53.4.5-96.9-42.7-96.9-96V69.4l30.7-6.1c13-2.6 21.4-15.2 18.8-28.2l-3.1-15.7C107.7 6.4 95.1-2 82.1.6L19.3 13C8.1 15.3 0 25.1 0 36.6V192c0 77.3 55.1 142 128.1 156.8C130.7 439.2 208.6 512 304 512c97 0 176-75.4 176-168V231.4c19.1-11.1 32-31.7 32-55.4 0-35.7-29.2-64.5-64.9-64zm.9 80c-8.8 0-16-7.2-16-16s7.2-16 16-16 16 7.2 16 16-7.2 16-16 16z"] +}; +var faStickyNote = { + prefix: 'fas', + iconName: 'sticky-note', + icon: [448, 512, [], "f249", "M312 320h136V56c0-13.3-10.7-24-24-24H24C10.7 32 0 42.7 0 56v400c0 13.3 10.7 24 24 24h264V344c0-13.2 10.8-24 24-24zm129 55l-98 98c-4.5 4.5-10.6 7-17 7h-6V352h128v6.1c0 6.3-2.5 12.4-7 16.9z"] +}; +var faStop = { + prefix: 'fas', + iconName: 'stop', + icon: [448, 512, [], "f04d", "M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"] +}; +var faStopCircle = { + prefix: 'fas', + iconName: 'stop-circle', + icon: [512, 512, [], "f28d", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm96 328c0 8.8-7.2 16-16 16H176c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h160c8.8 0 16 7.2 16 16v160z"] +}; +var faStopwatch = { + prefix: 'fas', + iconName: 'stopwatch', + icon: [448, 512, [], "f2f2", "M432 304c0 114.9-93.1 208-208 208S16 418.9 16 304c0-104 76.3-190.2 176-205.5V64h-28c-6.6 0-12-5.4-12-12V12c0-6.6 5.4-12 12-12h120c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-28v34.5c37.5 5.8 71.7 21.6 99.7 44.6l27.5-27.5c4.7-4.7 12.3-4.7 17 0l28.3 28.3c4.7 4.7 4.7 12.3 0 17l-29.4 29.4-.6.6C419.7 223.3 432 262.2 432 304zm-176 36V188.5c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12V340c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12z"] +}; +var faStopwatch20 = { + prefix: 'fas', + iconName: 'stopwatch-20', + icon: [448, 512, [], "e06f", "M398.5,190.91l.59-.61,26.59-26.58a16,16,0,0,0,0-22.63L403,118.41a16,16,0,0,0-22.63,0l-24.68,24.68A206.68,206.68,0,0,0,256,98.5V64h32a16,16,0,0,0,16-16V16A16,16,0,0,0,288,0H160a16.05,16.05,0,0,0-16,16V48a16.05,16.05,0,0,0,16,16h32V98.5A207.92,207.92,0,0,0,16.09,297.57C12.64,411.5,106.76,510.22,220.72,512,337.13,513.77,432,420,432,304A206,206,0,0,0,398.5,190.91ZM204.37,377.55a8.2,8.2,0,0,1,8.32,8.07v22.31a8.2,8.2,0,0,1-8.32,8.07H121.52a16.46,16.46,0,0,1-16.61-17.62c2.78-35.22,14.67-57.41,38.45-91.37,20.42-29.19,27.1-37.32,27.1-62.34,0-16.92-1.79-24.27-12.21-24.27-9.39,0-12.69,7.4-12.69,22.68v5.23a8.2,8.2,0,0,1-8.33,8.07h-24.9a8.2,8.2,0,0,1-8.33-8.07v-4.07c0-27.3,8.48-60.24,56.43-60.24,43,0,55.57,25.85,55.57,61,0,35.58-12.44,51.21-34.35,81.31-11.56,15-24.61,35.57-26.41,51.2ZM344,352.32c0,35.16-12.3,63.68-57.23,63.68C243.19,416,232,386.48,232,352.55V247.22c0-40.73,19.58-63.22,56.2-63.22C325,184,344,206.64,344,245.3ZM287.87,221.73c-9.41,0-13.23,7.5-13.23,20V357.68c0,13.11,3.59,20.59,13.23,20.59s13-8,13-21.27V241.06C300.89,229.79,297.88,221.73,287.87,221.73Z"] +}; +var faStore = { + prefix: 'fas', + iconName: 'store', + icon: [616, 512, [], "f54e", "M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"] +}; +var faStoreAlt = { + prefix: 'fas', + iconName: 'store-alt', + icon: [640, 512, [], "f54f", "M320 384H128V224H64v256c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V224h-64v160zm314.6-241.8l-85.3-128c-6-8.9-16-14.2-26.7-14.2H117.4c-10.7 0-20.7 5.3-26.6 14.2l-85.3 128c-14.2 21.3 1 49.8 26.6 49.8H608c25.5 0 40.7-28.5 26.6-49.8zM512 496c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16V224h-64v272z"] +}; +var faStoreAltSlash = { + prefix: 'fas', + iconName: 'store-alt-slash', + icon: [640, 512, [], "e070", "M17.89,123.62,5.51,142.2c-14.2,21.3,1,49.8,26.59,49.8h74.26ZM576,413.42V224H512V364L384,265V224H330.92l-41.4-32H608c25.5,0,40.7-28.5,26.59-49.8l-85.29-128A32.18,32.18,0,0,0,522.6,0H117.42A31.87,31.87,0,0,0,90.81,14.2l-10.66,16L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.81l19.64-25.26a16,16,0,0,0-2.81-22.45ZM320,384H128V224H64V480a32,32,0,0,0,32,32H352a32,32,0,0,0,32-32V406.59l-64-49.47Z"] +}; +var faStoreSlash = { + prefix: 'fas', + iconName: 'store-slash', + icon: [640, 512, [], "e071", "M121.51,384V284.2a119.43,119.43,0,0,1-28,3.8,123.46,123.46,0,0,1-17.1-1.2,114.88,114.88,0,0,1-15.58-3.6V480c0,17.7,13.59,32,30.4,32H505.75L348.42,384Zm-28-128.09c25.1,0,47.29-10.72,64-27.24L24,120.05c-30.52,53.39-2.45,126.53,56.49,135A95.68,95.68,0,0,0,93.48,255.91ZM602.13,458.09,547.2,413.41V283.2a93.5,93.5,0,0,1-15.57,3.6,127.31,127.31,0,0,1-17.29,1.2,114.89,114.89,0,0,1-28-3.8v79.68L348.52,251.77a88.06,88.06,0,0,0,25.41,4.14c28.11,0,53-13,70.11-33.11,17.19,20.11,42.08,33.11,70.11,33.11a94.31,94.31,0,0,0,13-.91c59.66-8.41,88-82.8,56.06-136.4L521.55,15A30.1,30.1,0,0,0,495.81,0H112A30.11,30.11,0,0,0,86.27,15L76.88,30.78,43.19,3.38A14.68,14.68,0,0,0,21.86,6.19L3.2,31.45A16.58,16.58,0,0,0,5.87,53.91L564.81,508.63a14.69,14.69,0,0,0,21.33-2.82l18.66-25.26A16.58,16.58,0,0,0,602.13,458.09Z"] +}; +var faStream = { + prefix: 'fas', + iconName: 'stream', + icon: [512, 512, [], "f550", "M16 128h416c8.84 0 16-7.16 16-16V48c0-8.84-7.16-16-16-16H16C7.16 32 0 39.16 0 48v64c0 8.84 7.16 16 16 16zm480 80H80c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16zm-64 176H16c-8.84 0-16 7.16-16 16v64c0 8.84 7.16 16 16 16h416c8.84 0 16-7.16 16-16v-64c0-8.84-7.16-16-16-16z"] +}; +var faStreetView = { + prefix: 'fas', + iconName: 'street-view', + icon: [512, 512, [], "f21d", "M367.9 329.76c-4.62 5.3-9.78 10.1-15.9 13.65v22.94c66.52 9.34 112 28.05 112 49.65 0 30.93-93.12 56-208 56S48 446.93 48 416c0-21.6 45.48-40.3 112-49.65v-22.94c-6.12-3.55-11.28-8.35-15.9-13.65C58.87 345.34 0 378.05 0 416c0 53.02 114.62 96 256 96s256-42.98 256-96c0-37.95-58.87-70.66-144.1-86.24zM256 128c35.35 0 64-28.65 64-64S291.35 0 256 0s-64 28.65-64 64 28.65 64 64 64zm-64 192v96c0 17.67 14.33 32 32 32h64c17.67 0 32-14.33 32-32v-96c17.67 0 32-14.33 32-32v-96c0-26.51-21.49-48-48-48h-11.8c-11.07 5.03-23.26 8-36.2 8s-25.13-2.97-36.2-8H208c-26.51 0-48 21.49-48 48v96c0 17.67 14.33 32 32 32z"] +}; +var faStrikethrough = { + prefix: 'fas', + iconName: 'strikethrough', + icon: [512, 512, [], "f0cc", "M496 224H293.9l-87.17-26.83A43.55 43.55 0 0 1 219.55 112h66.79A49.89 49.89 0 0 1 331 139.58a16 16 0 0 0 21.46 7.15l42.94-21.47a16 16 0 0 0 7.16-21.46l-.53-1A128 128 0 0 0 287.51 32h-68a123.68 123.68 0 0 0-123 135.64c2 20.89 10.1 39.83 21.78 56.36H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h480a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-180.24 96A43 43 0 0 1 336 356.45 43.59 43.59 0 0 1 292.45 400h-66.79A49.89 49.89 0 0 1 181 372.42a16 16 0 0 0-21.46-7.15l-42.94 21.47a16 16 0 0 0-7.16 21.46l.53 1A128 128 0 0 0 224.49 480h68a123.68 123.68 0 0 0 123-135.64 114.25 114.25 0 0 0-5.34-24.36z"] +}; +var faStroopwafel = { + prefix: 'fas', + iconName: 'stroopwafel', + icon: [512, 512, [], "f551", "M188.12 210.74L142.86 256l45.25 45.25L233.37 256l-45.25-45.26zm113.13-22.62L256 142.86l-45.25 45.25L256 233.37l45.25-45.25zm-90.5 135.76L256 369.14l45.26-45.26L256 278.63l-45.25 45.25zM256 0C114.62 0 0 114.62 0 256s114.62 256 256 256 256-114.62 256-256S397.38 0 256 0zm186.68 295.6l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-28.29-28.29-45.25 45.25 33.94 33.94 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-33.94-33.94-45.26 45.26 28.29 28.29c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0L256 414.39l-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l28.29-28.29-45.25-45.26-33.94 33.94 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 33.94-33.94-45.25-45.25-28.29 28.29c-3.12 3.12-8.19 3.12-11.31 0L69.32 295.6c-3.12-3.12-3.12-8.19 0-11.31L97.61 256l-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l28.29 28.29 45.25-45.26-33.94-33.94-16.97 16.97c-3.12 3.12-8.19 3.12-11.31 0l-11.31-11.31c-3.12-3.12-3.12-8.19 0-11.31l16.97-16.97-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 33.94 33.94 45.26-45.25-28.29-28.29c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0L256 97.61l28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-28.29 28.29 45.26 45.25 33.94-33.94-16.97-16.97c-3.12-3.12-3.12-8.19 0-11.31l11.31-11.31c3.12-3.12 8.19-3.12 11.31 0l16.97 16.97 16.97-16.97c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31l-16.97 16.97 16.97 16.97c3.12 3.12 3.12 8.19 0 11.31l-11.31 11.31c-3.12 3.12-8.19 3.12-11.31 0l-16.97-16.97-33.94 33.94 45.25 45.26 28.29-28.29c3.12-3.12 8.19-3.12 11.31 0l11.31 11.31c3.12 3.12 3.12 8.19 0 11.31L414.39 256l28.29 28.28a8.015 8.015 0 0 1 0 11.32zM278.63 256l45.26 45.25L369.14 256l-45.25-45.26L278.63 256z"] +}; +var faSubscript = { + prefix: 'fas', + iconName: 'subscript', + icon: [512, 512, [], "f12c", "M496 448h-16V304a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 352h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z"] +}; +var faSubway = { + prefix: 'fas', + iconName: 'subway', + icon: [448, 512, [], "f239", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zM200 232V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm200 0V120c0-13.255-10.745-24-24-24H272c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h104c13.255 0 24-10.745 24-24zm-48 56c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm-256 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"] +}; +var faSuitcase = { + prefix: 'fas', + iconName: 'suitcase', + icon: [512, 512, [], "f0f2", "M128 480h256V80c0-26.5-21.5-48-48-48H176c-26.5 0-48 21.5-48 48v400zm64-384h128v32H192V96zm320 80v256c0 26.5-21.5 48-48 48h-48V128h48c26.5 0 48 21.5 48 48zM96 480H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h48v352z"] +}; +var faSuitcaseRolling = { + prefix: 'fas', + iconName: 'suitcase-rolling', + icon: [384, 512, [], "f5c1", "M336 160H48c-26.51 0-48 21.49-48 48v224c0 26.51 21.49 48 48 48h16v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h128v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16h16c26.51 0 48-21.49 48-48V208c0-26.51-21.49-48-48-48zm-16 216c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zm0-96c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h240c4.42 0 8 3.58 8 8v16zM144 48h96v80h48V48c0-26.51-21.49-48-48-48h-96c-26.51 0-48 21.49-48 48v80h48V48z"] +}; +var faSun = { + prefix: 'fas', + iconName: 'sun', + icon: [512, 512, [], "f185", "M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"] +}; +var faSuperscript = { + prefix: 'fas', + iconName: 'superscript', + icon: [512, 512, [], "f12b", "M496 160h-16V16a16 16 0 0 0-16-16h-48a16 16 0 0 0-14.29 8.83l-16 32A16 16 0 0 0 400 64h16v96h-16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h96a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM336 64h-67a16 16 0 0 0-13.14 6.87l-79.9 115-79.9-115A16 16 0 0 0 83 64H16A16 16 0 0 0 0 80v48a16 16 0 0 0 16 16h33.48l77.81 112-77.81 112H16a16 16 0 0 0-16 16v48a16 16 0 0 0 16 16h67a16 16 0 0 0 13.14-6.87l79.9-115 79.9 115A16 16 0 0 0 269 448h67a16 16 0 0 0 16-16v-48a16 16 0 0 0-16-16h-33.48l-77.81-112 77.81-112H336a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z"] +}; +var faSurprise = { + prefix: 'fas', + iconName: 'surprise', + icon: [496, 512, [], "f5c2", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zM136 208c0-17.7 14.3-32 32-32s32 14.3 32 32-14.3 32-32 32-32-14.3-32-32zm112 208c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64zm80-176c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faSwatchbook = { + prefix: 'fas', + iconName: 'swatchbook', + icon: [512, 512, [], "f5c3", "M434.66,167.71h0L344.5,77.36a31.83,31.83,0,0,0-45-.07h0l-.07.07L224,152.88V424L434.66,212.9A32,32,0,0,0,434.66,167.71ZM480,320H373.09L186.68,506.51c-2.06,2.07-4.5,3.58-6.68,5.49H480a32,32,0,0,0,32-32V352A32,32,0,0,0,480,320ZM192,32A32,32,0,0,0,160,0H32A32,32,0,0,0,0,32V416a96,96,0,0,0,192,0ZM96,440a24,24,0,1,1,24-24A24,24,0,0,1,96,440Zm32-184H64V192h64Zm0-128H64V64h64Z"] +}; +var faSwimmer = { + prefix: 'fas', + iconName: 'swimmer', + icon: [640, 512, [], "f5c4", "M189.61 310.58c3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c16.02-14.77 34.5-22.58 53.46-22.58h16.3c18.96 0 37.45 7.81 53.46 22.58 3.54 3.26 15.27 9.42 34.39 9.42s30.86-6.16 34.39-9.42c14.86-13.71 31.88-21.12 49.39-22.16l-112.84-80.6 18-12.86c3.64-2.58 8.28-3.52 12.62-2.61l100.35 21.53c25.91 5.53 51.44-10.97 57-36.88 5.55-25.92-10.95-51.44-36.88-57L437.68 98.47c-30.73-6.58-63.02.12-88.56 18.38l-80.02 57.17c-10.38 7.39-19.36 16.44-26.72 26.94L173.75 299c5.47 3.23 10.82 6.93 15.86 11.58zM624 352h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 343.58 442.04 352 416 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 343.58 250.04 352 224 352s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 343.58 58.04 352 32 352H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-512-96c44.18 0 80-35.82 80-80s-35.82-80-80-80-80 35.82-80 80 35.82 80 80 80z"] +}; +var faSwimmingPool = { + prefix: 'fas', + iconName: 'swimming-pool', + icon: [640, 512, [], "f5c5", "M624 416h-16c-26.04 0-45.8-8.42-56.09-17.9-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C461.8 407.58 442.04 416 416 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C269.8 407.58 250.04 416 224 416s-45.8-8.42-56.09-17.9c-8.9-8.21-19.66-14.1-31.77-14.1h-16.3c-12.11 0-22.87 5.89-31.77 14.1C77.8 407.58 58.04 416 32 416H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16c38.62 0 72.72-12.19 96-31.84 23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84s72.72-12.19 96-31.84c23.28 19.66 57.38 31.84 96 31.84h16c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-400-32v-96h192v96c19.12 0 30.86-6.16 34.39-9.42 9.17-8.46 19.2-14.34 29.61-18.07V128c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v96H224v-96c0-17.64 14.36-32 32-32s32 14.36 32 32v16c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-16c0-52.94-43.06-96-96-96s-96 43.06-96 96v228.5c10.41 3.73 20.44 9.62 29.61 18.07 3.53 3.27 15.27 9.43 34.39 9.43z"] +}; +var faSynagogue = { + prefix: 'fas', + iconName: 'synagogue', + icon: [640, 512, [], "f69b", "M70 196.51L6.67 268.29A26.643 26.643 0 0 0 0 285.93V512h128V239.58l-38-43.07c-5.31-6.01-14.69-6.01-20 0zm563.33 71.78L570 196.51c-5.31-6.02-14.69-6.02-20 0l-38 43.07V512h128V285.93c0-6.5-2.37-12.77-6.67-17.64zM339.99 7.01c-11.69-9.35-28.29-9.35-39.98 0l-128 102.4A32.005 32.005 0 0 0 160 134.4V512h96v-92.57c0-31.88 21.78-61.43 53.25-66.55C349.34 346.35 384 377.13 384 416v96h96V134.4c0-9.72-4.42-18.92-12.01-24.99l-128-102.4zm52.07 215.55c1.98 3.15-.29 7.24-4 7.24h-38.94L324 269.79c-1.85 2.95-6.15 2.95-8 0l-25.12-39.98h-38.94c-3.72 0-5.98-4.09-4-7.24l19.2-30.56-19.2-30.56c-1.98-3.15.29-7.24 4-7.24h38.94l25.12-40c1.85-2.95 6.15-2.95 8 0l25.12 39.98h38.95c3.71 0 5.98 4.09 4 7.24L372.87 192l19.19 30.56z"] +}; +var faSync = { + prefix: 'fas', + iconName: 'sync', + icon: [512, 512, [], "f021", "M440.65 12.57l4 82.77A247.16 247.16 0 0 0 255.83 8C134.73 8 33.91 94.92 12.29 209.82A12 12 0 0 0 24.09 224h49.05a12 12 0 0 0 11.67-9.26 175.91 175.91 0 0 1 317-56.94l-101.46-4.86a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12H500a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12h-47.37a12 12 0 0 0-11.98 12.57zM255.83 432a175.61 175.61 0 0 1-146-77.8l101.8 4.87a12 12 0 0 0 12.57-12v-47.4a12 12 0 0 0-12-12H12a12 12 0 0 0-12 12V500a12 12 0 0 0 12 12h47.35a12 12 0 0 0 12-12.6l-4.15-82.57A247.17 247.17 0 0 0 255.83 504c121.11 0 221.93-86.92 243.55-201.82a12 12 0 0 0-11.8-14.18h-49.05a12 12 0 0 0-11.67 9.26A175.86 175.86 0 0 1 255.83 432z"] +}; +var faSyncAlt = { + prefix: 'fas', + iconName: 'sync-alt', + icon: [512, 512, [], "f2f1", "M370.72 133.28C339.458 104.008 298.888 87.962 255.848 88c-77.458.068-144.328 53.178-162.791 126.85-1.344 5.363-6.122 9.15-11.651 9.15H24.103c-7.498 0-13.194-6.807-11.807-14.176C33.933 94.924 134.813 8 256 8c66.448 0 126.791 26.136 171.315 68.685L463.03 40.97C478.149 25.851 504 36.559 504 57.941V192c0 13.255-10.745 24-24 24H345.941c-21.382 0-32.09-25.851-16.971-40.971l41.75-41.749zM32 296h134.059c21.382 0 32.09 25.851 16.971 40.971l-41.75 41.75c31.262 29.273 71.835 45.319 114.876 45.28 77.418-.07 144.315-53.144 162.787-126.849 1.344-5.363 6.122-9.15 11.651-9.15h57.304c7.498 0 13.194 6.807 11.807 14.176C478.067 417.076 377.187 504 256 504c-66.448 0-126.791-26.136-171.315-68.685L48.97 471.03C33.851 486.149 8 475.441 8 454.059V320c0-13.255 10.745-24 24-24z"] +}; +var faSyringe = { + prefix: 'fas', + iconName: 'syringe', + icon: [512, 512, [], "f48e", "M201.5 174.8l55.7 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-55.7-55.8-45.3 45.3 55.8 55.8c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L111 265.2l-26.4 26.4c-17.3 17.3-25.6 41.1-23 65.4l7.1 63.6L2.3 487c-3.1 3.1-3.1 8.2 0 11.3l11.3 11.3c3.1 3.1 8.2 3.1 11.3 0l66.3-66.3 63.6 7.1c23.9 2.6 47.9-5.4 65.4-23l181.9-181.9-135.7-135.7-64.9 65zm308.2-93.3L430.5 2.3c-3.1-3.1-8.2-3.1-11.3 0l-11.3 11.3c-3.1 3.1-3.1 8.2 0 11.3l28.3 28.3-45.3 45.3-56.6-56.6-17-17c-3.1-3.1-8.2-3.1-11.3 0l-33.9 33.9c-3.1 3.1-3.1 8.2 0 11.3l17 17L424.8 223l17 17c3.1 3.1 8.2 3.1 11.3 0l33.9-34c3.1-3.1 3.1-8.2 0-11.3l-73.5-73.5 45.3-45.3 28.3 28.3c3.1 3.1 8.2 3.1 11.3 0l11.3-11.3c3.1-3.2 3.1-8.2 0-11.4z"] +}; +var faTable = { + prefix: 'fas', + iconName: 'table', + icon: [512, 512, [], "f0ce", "M464 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V80c0-26.51-21.49-48-48-48zM224 416H64v-96h160v96zm0-160H64v-96h160v96zm224 160H288v-96h160v96zm0-160H288v-96h160v96z"] +}; +var faTableTennis = { + prefix: 'fas', + iconName: 'table-tennis', + icon: [512, 512, [], "f45d", "M496.2 296.5C527.7 218.7 512 126.2 449 63.1 365.1-21 229-21 145.1 63.1l-56 56.1 211.5 211.5c46.1-62.1 131.5-77.4 195.6-34.2zm-217.9 79.7L57.9 155.9c-27.3 45.3-21.7 105 17.3 144.1l34.5 34.6L6.7 424c-8.6 7.5-9.1 20.7-1 28.8l53.4 53.5c8 8.1 21.2 7.6 28.7-1L177.1 402l35.7 35.7c19.7 19.7 44.6 30.5 70.3 33.3-7.1-17-11-35.6-11-55.1-.1-13.8 2.5-27 6.2-39.7zM416 320c-53 0-96 43-96 96s43 96 96 96 96-43 96-96-43-96-96-96z"] +}; +var faTablet = { + prefix: 'fas', + iconName: 'tablet', + icon: [448, 512, [], "f10a", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32z"] +}; +var faTabletAlt = { + prefix: 'fas', + iconName: 'tablet-alt', + icon: [448, 512, [], "f3fa", "M400 0H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zM224 480c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm176-108c0 6.6-5.4 12-12 12H60c-6.6 0-12-5.4-12-12V60c0-6.6 5.4-12 12-12h328c6.6 0 12 5.4 12 12v312z"] +}; +var faTablets = { + prefix: 'fas', + iconName: 'tablets', + icon: [640, 512, [], "f490", "M160 192C78.9 192 12.5 250.5.1 326.7c-.8 4.8 3.3 9.3 8.3 9.3h303.3c5 0 9.1-4.5 8.3-9.3C307.5 250.5 241.1 192 160 192zm151.6 176H8.4c-5 0-9.1 4.5-8.3 9.3C12.5 453.5 78.9 512 160 512s147.5-58.5 159.9-134.7c.8-4.8-3.3-9.3-8.3-9.3zM593.4 46.6c-56.5-56.5-144.2-61.4-206.9-16-4 2.9-4.3 8.9-.8 12.3L597 254.3c3.5 3.5 9.5 3.2 12.3-.8 45.5-62.7 40.6-150.4-15.9-206.9zM363 65.7c-3.5-3.5-9.5-3.2-12.3.8-45.4 62.7-40.5 150.4 15.9 206.9 56.5 56.5 144.2 61.4 206.9 15.9 4-2.9 4.3-8.9.8-12.3L363 65.7z"] +}; +var faTachometerAlt = { + prefix: 'fas', + iconName: 'tachometer-alt', + icon: [576, 512, [], "f3fd", "M288 32C128.94 32 0 160.94 0 320c0 52.8 14.25 102.26 39.06 144.8 5.61 9.62 16.3 15.2 27.44 15.2h443c11.14 0 21.83-5.58 27.44-15.2C561.75 422.26 576 372.8 576 320c0-159.06-128.94-288-288-288zm0 64c14.71 0 26.58 10.13 30.32 23.65-1.11 2.26-2.64 4.23-3.45 6.67l-9.22 27.67c-5.13 3.49-10.97 6.01-17.64 6.01-17.67 0-32-14.33-32-32S270.33 96 288 96zM96 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm48-160c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm246.77-72.41l-61.33 184C343.13 347.33 352 364.54 352 384c0 11.72-3.38 22.55-8.88 32H232.88c-5.5-9.45-8.88-20.28-8.88-32 0-33.94 26.5-61.43 59.9-63.59l61.34-184.01c4.17-12.56 17.73-19.45 30.36-15.17 12.57 4.19 19.35 17.79 15.17 30.36zm14.66 57.2l15.52-46.55c3.47-1.29 7.13-2.23 11.05-2.23 17.67 0 32 14.33 32 32s-14.33 32-32 32c-11.38-.01-20.89-6.28-26.57-15.22zM480 384c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faTag = { + prefix: 'fas', + iconName: 'tag', + icon: [512, 512, [], "f02b", "M0 252.118V48C0 21.49 21.49 0 48 0h204.118a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882L293.823 497.941c-18.745 18.745-49.137 18.745-67.882 0L14.059 286.059A48 48 0 0 1 0 252.118zM112 64c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48z"] +}; +var faTags = { + prefix: 'fas', + iconName: 'tags', + icon: [640, 512, [], "f02c", "M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"] +}; +var faTape = { + prefix: 'fas', + iconName: 'tape', + icon: [640, 512, [], "f4db", "M224 192c-35.3 0-64 28.7-64 64s28.7 64 64 64 64-28.7 64-64-28.7-64-64-64zm400 224H380.6c41.5-40.7 67.4-97.3 67.4-160 0-123.7-100.3-224-224-224S0 132.3 0 256s100.3 224 224 224h400c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400-64c-53 0-96-43-96-96s43-96 96-96 96 43 96 96-43 96-96 96z"] +}; +var faTasks = { + prefix: 'fas', + iconName: 'tasks', + icon: [512, 512, [], "f0ae", "M139.61 35.5a12 12 0 0 0-17 0L58.93 98.81l-22.7-22.12a12 12 0 0 0-17 0L3.53 92.41a12 12 0 0 0 0 17l47.59 47.4a12.78 12.78 0 0 0 17.61 0l15.59-15.62L156.52 69a12.09 12.09 0 0 0 .09-17zm0 159.19a12 12 0 0 0-17 0l-63.68 63.72-22.7-22.1a12 12 0 0 0-17 0L3.53 252a12 12 0 0 0 0 17L51 316.5a12.77 12.77 0 0 0 17.6 0l15.7-15.69 72.2-72.22a12 12 0 0 0 .09-16.9zM64 368c-26.49 0-48.59 21.5-48.59 48S37.53 464 64 464a48 48 0 0 0 0-96zm432 16H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H208a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h288a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faTaxi = { + prefix: 'fas', + iconName: 'taxi', + icon: [512, 512, [], "f1ba", "M462 241.64l-22-84.84c-9.6-35.2-41.6-60.8-76.8-60.8H352V64c0-17.67-14.33-32-32-32H192c-17.67 0-32 14.33-32 32v32h-11.2c-35.2 0-67.2 25.6-76.8 60.8l-22 84.84C21.41 248.04 0 273.47 0 304v48c0 23.63 12.95 44.04 32 55.12V448c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-32h256v32c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32v-40.88c19.05-11.09 32-31.5 32-55.12v-48c0-30.53-21.41-55.96-50-62.36zM96 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm20.55-112l17.2-66.36c2.23-8.16 9.59-13.64 15.06-13.64h214.4c5.47 0 12.83 5.48 14.85 12.86L395.45 240h-278.9zM416 352c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faTeeth = { + prefix: 'fas', + iconName: 'teeth', + icon: [640, 512, [], "f62e", "M544 0H96C42.98 0 0 42.98 0 96v320c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96V96c0-53.02-42.98-96-96-96zM160 368c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm144 120c0 30.93-25.07 56-56 56s-56-25.07-56-56v-56c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v56zm0-120c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-88c0-30.93 25.07-56 56-56s56 25.07 56 56v88zm128 128c0 26.51-21.49 48-48 48s-48-21.49-48-48v-64c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v64zm0-128c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-64c0-26.51 21.49-48 48-48s48 21.49 48 48v64z"] +}; +var faTeethOpen = { + prefix: 'fas', + iconName: 'teeth-open', + icon: [640, 512, [], "f62f", "M544 0H96C42.98 0 0 42.98 0 96v64c0 35.35 28.66 64 64 64h512c35.34 0 64-28.65 64-64V96c0-53.02-42.98-96-96-96zM160 176c0 8.84-7.16 16-16 16H80c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm144 0c0 8.84-7.16 16-16 16h-80c-8.84 0-16-7.16-16-16v-56c0-30.93 25.07-56 56-56s56 25.07 56 56v56zm128 0c0 8.84-7.16 16-16 16h-64c-8.84 0-16-7.16-16-16v-32c0-26.51 21.49-48 48-48s48 21.49 48 48v32zm0 144H64c-35.34 0-64 28.65-64 64v32c0 53.02 42.98 96 96 96h448c53.02 0 96-42.98 96-96v-32c0-35.35-28.66-64-64-64zm-416 80c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32zm144-8c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm144 0c0 30.93-25.07 56-56 56s-56-25.07-56-56v-24c0-8.84 7.16-16 16-16h80c8.84 0 16 7.16 16 16v24zm128 8c0 26.51-21.49 48-48 48s-48-21.49-48-48v-32c0-8.84 7.16-16 16-16h64c8.84 0 16 7.16 16 16v32z"] +}; +var faTemperatureHigh = { + prefix: 'fas', + iconName: 'temperature-high', + icon: [512, 512, [], "f769", "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V112c0-8.8-7.2-16-16-16s-16 7.2-16 16v210.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z"] +}; +var faTemperatureLow = { + prefix: 'fas', + iconName: 'temperature-low', + icon: [512, 512, [], "f76b", "M416 0c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 128c-17.7 0-32-14.3-32-32s14.3-32 32-32 32 14.3 32 32-14.3 32-32 32zm-160-16C256 50.1 205.9 0 144 0S32 50.1 32 112v166.5C12.3 303.2 0 334 0 368c0 79.5 64.5 144 144 144s144-64.5 144-144c0-34-12.3-64.9-32-89.5V112zM144 448c-44.1 0-80-35.9-80-80 0-25.5 12.2-48.9 32-63.8V112c0-26.5 21.5-48 48-48s48 21.5 48 48v192.2c19.8 14.8 32 38.3 32 63.8 0 44.1-35.9 80-80 80zm16-125.1V304c0-8.8-7.2-16-16-16s-16 7.2-16 16v18.9c-18.6 6.6-32 24.2-32 45.1 0 26.5 21.5 48 48 48s48-21.5 48-48c0-20.9-13.4-38.5-32-45.1z"] +}; +var faTenge = { + prefix: 'fas', + iconName: 'tenge', + icon: [384, 512, [], "f7d7", "M372 160H12c-6.6 0-12 5.4-12 12v56c0 6.6 5.4 12 12 12h140v228c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12V240h140c6.6 0 12-5.4 12-12v-56c0-6.6-5.4-12-12-12zm0-128H12C5.4 32 0 37.4 0 44v56c0 6.6 5.4 12 12 12h360c6.6 0 12-5.4 12-12V44c0-6.6-5.4-12-12-12z"] +}; +var faTerminal = { + prefix: 'fas', + iconName: 'terminal', + icon: [640, 512, [], "f120", "M257.981 272.971L63.638 467.314c-9.373 9.373-24.569 9.373-33.941 0L7.029 444.647c-9.357-9.357-9.375-24.522-.04-33.901L161.011 256 6.99 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L257.981 239.03c9.373 9.372 9.373 24.568 0 33.941zM640 456v-32c0-13.255-10.745-24-24-24H312c-13.255 0-24 10.745-24 24v32c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24z"] +}; +var faTextHeight = { + prefix: 'fas', + iconName: 'text-height', + icon: [576, 512, [], "f034", "M304 32H16A16 16 0 0 0 0 48v96a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-32h56v304H80a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-40V112h56v32a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm256 336h-48V144h48c14.31 0 21.33-17.31 11.31-27.31l-80-80a16 16 0 0 0-22.62 0l-80 80C379.36 126 384.36 144 400 144h48v224h-48c-14.31 0-21.32 17.31-11.31 27.31l80 80a16 16 0 0 0 22.62 0l80-80C580.64 386 575.64 368 560 368z"] +}; +var faTextWidth = { + prefix: 'fas', + iconName: 'text-width', + icon: [448, 512, [], "f035", "M432 32H16A16 16 0 0 0 0 48v80a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16v-16h120v112h-24a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-24V112h120v16a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zm-68.69 260.69C354 283.36 336 288.36 336 304v48H112v-48c0-14.31-17.31-21.32-27.31-11.31l-80 80a16 16 0 0 0 0 22.62l80 80C94 484.64 112 479.64 112 464v-48h224v48c0 14.31 17.31 21.33 27.31 11.31l80-80a16 16 0 0 0 0-22.62z"] +}; +var faTh = { + prefix: 'fas', + iconName: 'th', + icon: [512, 512, [], "f00a", "M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"] +}; +var faThLarge = { + prefix: 'fas', + iconName: 'th-large', + icon: [512, 512, [], "f009", "M296 32h192c13.255 0 24 10.745 24 24v160c0 13.255-10.745 24-24 24H296c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24zm-80 0H24C10.745 32 0 42.745 0 56v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zM0 296v160c0 13.255 10.745 24 24 24h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm296 184h192c13.255 0 24-10.745 24-24V296c0-13.255-10.745-24-24-24H296c-13.255 0-24 10.745-24 24v160c0 13.255 10.745 24 24 24z"] +}; +var faThList = { + prefix: 'fas', + iconName: 'th-list', + icon: [512, 512, [], "f00b", "M149.333 216v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-80c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zM125.333 32H24C10.745 32 0 42.745 0 56v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24zm80 448H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm-24-424v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24zm24 264H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24z"] +}; +var faTheaterMasks = { + prefix: 'fas', + iconName: 'theater-masks', + icon: [640, 512, [], "f630", "M206.86 245.15c-35.88 10.45-59.95 41.2-57.53 74.1 11.4-12.72 28.81-23.7 49.9-30.92l7.63-43.18zM95.81 295L64.08 115.49c-.29-1.62.28-2.62.24-2.65 57.76-32.06 123.12-49.01 189.01-49.01 1.61 0 3.23.17 4.85.19 13.95-13.47 31.73-22.83 51.59-26 18.89-3.02 38.05-4.55 57.18-5.32-9.99-13.95-24.48-24.23-41.77-27C301.27 1.89 277.24 0 253.32 0 176.66 0 101.02 19.42 33.2 57.06 9.03 70.48-3.92 98.48 1.05 126.58l31.73 179.51c14.23 80.52 136.33 142.08 204.45 142.08 3.59 0 6.75-.46 10.01-.8-13.52-17.08-28.94-40.48-39.5-67.58-47.61-12.98-106.06-51.62-111.93-84.79zm97.55-137.46c-.73-4.12-2.23-7.87-4.07-11.4-8.25 8.91-20.67 15.75-35.32 18.32-14.65 2.58-28.67.4-39.48-5.17-.52 3.94-.64 7.98.09 12.1 3.84 21.7 24.58 36.19 46.34 32.37 21.75-3.82 36.28-24.52 32.44-46.22zM606.8 120.9c-88.98-49.38-191.43-67.41-291.98-51.35-27.31 4.36-49.08 26.26-54.04 54.36l-31.73 179.51c-15.39 87.05 95.28 196.27 158.31 207.35 63.03 11.09 204.47-53.79 219.86-140.84l31.73-179.51c4.97-28.11-7.98-56.11-32.15-69.52zm-273.24 96.8c3.84-21.7 24.58-36.19 46.34-32.36 21.76 3.83 36.28 24.52 32.45 46.22-.73 4.12-2.23 7.87-4.07 11.4-8.25-8.91-20.67-15.75-35.32-18.32-14.65-2.58-28.67-.4-39.48 5.17-.53-3.95-.65-7.99.08-12.11zm70.47 198.76c-55.68-9.79-93.52-59.27-89.04-112.9 20.6 25.54 56.21 46.17 99.49 53.78 43.28 7.61 83.82.37 111.93-16.6-14.18 51.94-66.71 85.51-122.38 75.72zm130.3-151.34c-8.25-8.91-20.68-15.75-35.33-18.32-14.65-2.58-28.67-.4-39.48 5.17-.52-3.94-.64-7.98.09-12.1 3.84-21.7 24.58-36.19 46.34-32.37 21.75 3.83 36.28 24.52 32.45 46.22-.73 4.13-2.23 7.88-4.07 11.4z"] +}; +var faThermometer = { + prefix: 'fas', + iconName: 'thermometer', + icon: [512, 512, [], "f491", "M476.8 20.4c-37.5-30.7-95.5-26.3-131.9 10.2l-45.7 46 50.5 50.5c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.4-50.5-45.1 45.4 50.3 50.4c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0L209 167.4l-45.1 45.4L214 263c3.1 3.1 3.1 8.2 0 11.3l-11.3 11.3c-3.1 3.1-8.2 3.1-11.3 0l-50.1-50.2L96 281.1V382L7 471c-9.4 9.4-9.4 24.6 0 33.9 9.4 9.4 24.6 9.4 33.9 0l89-89h99.9L484 162.6c34.9-34.9 42.2-101.5-7.2-142.2z"] +}; +var faThermometerEmpty = { + prefix: 'fas', + iconName: 'thermometer-empty', + icon: [256, 512, [], "f2cb", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"] +}; +var faThermometerFull = { + prefix: 'fas', + iconName: 'thermometer-full', + icon: [256, 512, [], "f2c7", "M224 96c0-53.019-42.981-96-96-96S32 42.981 32 96v203.347C12.225 321.756.166 351.136.002 383.333c-.359 70.303 56.787 128.176 127.089 128.664.299.002.61.003.909.003 70.698 0 128-57.304 128-128 0-32.459-12.088-62.09-32-84.653V96zm-96 368l-.576-.002c-43.86-.304-79.647-36.544-79.423-80.42.173-33.98 19.266-51.652 31.999-66.08V96c0-26.467 21.533-48 48-48s48 21.533 48 48v221.498c12.63 14.312 32 32.164 32 66.502 0 44.112-35.888 80-80 80zm64-80c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V96c0-17.673 14.327-32 32-32s32 14.327 32 32v232.583c19.124 11.068 32 31.732 32 55.417z"] +}; +var faThermometerHalf = { + prefix: 'fas', + iconName: 'thermometer-half', + icon: [256, 512, [], "f2c9", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V224c0-17.673 14.327-32 32-32s32 14.327 32 32v104.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"] +}; +var faThermometerQuarter = { + prefix: 'fas', + iconName: 'thermometer-quarter', + icon: [256, 512, [], "f2ca", "M192 384c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-23.685 12.876-44.349 32-55.417V288c0-17.673 14.327-32 32-32s32 14.327 32 32v40.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"] +}; +var faThermometerThreeQuarters = { + prefix: 'fas', + iconName: 'thermometer-three-quarters', + icon: [256, 512, [], "f2c8", "M192 384c0 35.346-28.654 64-64 64-35.346 0-64-28.654-64-64 0-23.685 12.876-44.349 32-55.417V160c0-17.673 14.327-32 32-32s32 14.327 32 32v168.583c19.124 11.068 32 31.732 32 55.417zm32-84.653c19.912 22.563 32 52.194 32 84.653 0 70.696-57.303 128-128 128-.299 0-.609-.001-.909-.003C56.789 511.509-.357 453.636.002 383.333.166 351.135 12.225 321.755 32 299.347V96c0-53.019 42.981-96 96-96s96 42.981 96 96v203.347zM208 384c0-34.339-19.37-52.19-32-66.502V96c0-26.467-21.533-48-48-48S80 69.533 80 96v221.498c-12.732 14.428-31.825 32.1-31.999 66.08-.224 43.876 35.563 80.116 79.423 80.42L128 464c44.112 0 80-35.888 80-80z"] +}; +var faThumbsDown = { + prefix: 'fas', + iconName: 'thumbs-down', + icon: [512, 512, [], "f165", "M0 56v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H24C10.745 32 0 42.745 0 56zm40 200c0-13.255 10.745-24 24-24s24 10.745 24 24-10.745 24-24 24-24-10.745-24-24zm272 256c-20.183 0-29.485-39.293-33.931-57.795-5.206-21.666-10.589-44.07-25.393-58.902-32.469-32.524-49.503-73.967-89.117-113.111a11.98 11.98 0 0 1-3.558-8.521V59.901c0-6.541 5.243-11.878 11.783-11.998 15.831-.29 36.694-9.079 52.651-16.178C256.189 17.598 295.709.017 343.995 0h2.844c42.777 0 93.363.413 113.774 29.737 8.392 12.057 10.446 27.034 6.148 44.632 16.312 17.053 25.063 48.863 16.382 74.757 17.544 23.432 19.143 56.132 9.308 79.469l.11.11c11.893 11.949 19.523 31.259 19.439 49.197-.156 30.352-26.157 58.098-59.553 58.098H350.723C358.03 364.34 384 388.132 384 430.548 384 504 336 512 312 512z"] +}; +var faThumbsUp = { + prefix: 'fas', + iconName: 'thumbs-up', + icon: [512, 512, [], "f164", "M104 224H24c-13.255 0-24 10.745-24 24v240c0 13.255 10.745 24 24 24h80c13.255 0 24-10.745 24-24V248c0-13.255-10.745-24-24-24zM64 472c-13.255 0-24-10.745-24-24s10.745-24 24-24 24 10.745 24 24-10.745 24-24 24zM384 81.452c0 42.416-25.97 66.208-33.277 94.548h101.723c33.397 0 59.397 27.746 59.553 58.098.084 17.938-7.546 37.249-19.439 49.197l-.11.11c9.836 23.337 8.237 56.037-9.308 79.469 8.681 25.895-.069 57.704-16.382 74.757 4.298 17.598 2.244 32.575-6.148 44.632C440.202 511.587 389.616 512 346.839 512l-2.845-.001c-48.287-.017-87.806-17.598-119.56-31.725-15.957-7.099-36.821-15.887-52.651-16.178-6.54-.12-11.783-5.457-11.783-11.998v-213.77c0-3.2 1.282-6.271 3.558-8.521 39.614-39.144 56.648-80.587 89.117-113.111 14.804-14.832 20.188-37.236 25.393-58.902C282.515 39.293 291.817 0 312 0c24 0 72 8 72 81.452z"] +}; +var faThumbtack = { + prefix: 'fas', + iconName: 'thumbtack', + icon: [384, 512, [], "f08d", "M298.028 214.267L285.793 96H328c13.255 0 24-10.745 24-24V24c0-13.255-10.745-24-24-24H56C42.745 0 32 10.745 32 24v48c0 13.255 10.745 24 24 24h42.207L85.972 214.267C37.465 236.82 0 277.261 0 328c0 13.255 10.745 24 24 24h136v104.007c0 1.242.289 2.467.845 3.578l24 48c2.941 5.882 11.364 5.893 14.311 0l24-48a8.008 8.008 0 0 0 .845-3.578V352h136c13.255 0 24-10.745 24-24-.001-51.183-37.983-91.42-85.973-113.733z"] +}; +var faTicketAlt = { + prefix: 'fas', + iconName: 'ticket-alt', + icon: [576, 512, [], "f3ff", "M128 160h320v192H128V160zm400 96c0 26.51 21.49 48 48 48v96c0 26.51-21.49 48-48 48H48c-26.51 0-48-21.49-48-48v-96c26.51 0 48-21.49 48-48s-21.49-48-48-48v-96c0-26.51 21.49-48 48-48h480c26.51 0 48 21.49 48 48v96c-26.51 0-48 21.49-48 48zm-48-104c0-13.255-10.745-24-24-24H120c-13.255 0-24 10.745-24 24v208c0 13.255 10.745 24 24 24h336c13.255 0 24-10.745 24-24V152z"] +}; +var faTimes = { + prefix: 'fas', + iconName: 'times', + icon: [352, 512, [], "f00d", "M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"] +}; +var faTimesCircle = { + prefix: 'fas', + iconName: 'times-circle', + icon: [512, 512, [], "f057", "M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z"] +}; +var faTint = { + prefix: 'fas', + iconName: 'tint', + icon: [352, 512, [], "f043", "M205.22 22.09c-7.94-28.78-49.44-30.12-58.44 0C100.01 179.85 0 222.72 0 333.91 0 432.35 78.72 512 176 512s176-79.65 176-178.09c0-111.75-99.79-153.34-146.78-311.82zM176 448c-61.75 0-112-50.25-112-112 0-8.84 7.16-16 16-16s16 7.16 16 16c0 44.11 35.89 80 80 80 8.84 0 16 7.16 16 16s-7.16 16-16 16z"] +}; +var faTintSlash = { + prefix: 'fas', + iconName: 'tint-slash', + icon: [640, 512, [], "f5c7", "M633.82 458.1L494.97 350.78c.52-5.57 1.03-11.16 1.03-16.87 0-111.76-99.79-153.34-146.78-311.82-7.94-28.78-49.44-30.12-58.44 0-15.52 52.34-36.87 91.96-58.49 125.68L45.47 3.37C38.49-2.05 28.43-.8 23.01 6.18L3.37 31.45C-2.05 38.42-.8 48.47 6.18 53.9l588.36 454.73c6.98 5.43 17.03 4.17 22.46-2.81l19.64-25.27c5.41-6.97 4.16-17.02-2.82-22.45zM144 333.91C144 432.35 222.72 512 320 512c44.71 0 85.37-16.96 116.4-44.7L162.72 255.78c-11.41 23.5-18.72 48.35-18.72 78.13z"] +}; +var faTired = { + prefix: 'fas', + iconName: 'tired', + icon: [496, 512, [], "f5c8", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm33.8 189.7l80-48c11.6-6.9 24 7.7 15.4 18L343.6 208l33.6 40.3c8.7 10.4-3.9 24.8-15.4 18l-80-48c-7.7-4.7-7.7-15.9 0-20.6zm-163-30c-8.6-10.3 3.8-24.9 15.4-18l80 48c7.8 4.7 7.8 15.9 0 20.6l-80 48c-11.5 6.8-24-7.6-15.4-18l33.6-40.3-33.6-40.3zM248 288c51.9 0 115.3 43.8 123.2 106.7 1.7 13.6-8 24.6-17.7 20.4-25.9-11.1-64.4-17.4-105.5-17.4s-79.6 6.3-105.5 17.4c-9.8 4.2-19.4-7-17.7-20.4C132.7 331.8 196.1 288 248 288z"] +}; +var faToggleOff = { + prefix: 'fas', + iconName: 'toggle-off', + icon: [576, 512, [], "f204", "M384 64H192C85.961 64 0 149.961 0 256s85.961 192 192 192h192c106.039 0 192-85.961 192-192S490.039 64 384 64zM64 256c0-70.741 57.249-128 128-128 70.741 0 128 57.249 128 128 0 70.741-57.249 128-128 128-70.741 0-128-57.249-128-128zm320 128h-48.905c65.217-72.858 65.236-183.12 0-256H384c70.741 0 128 57.249 128 128 0 70.74-57.249 128-128 128z"] +}; +var faToggleOn = { + prefix: 'fas', + iconName: 'toggle-on', + icon: [576, 512, [], "f205", "M384 64H192C86 64 0 150 0 256s86 192 192 192h192c106 0 192-86 192-192S490 64 384 64zm0 320c-70.8 0-128-57.3-128-128 0-70.8 57.3-128 128-128 70.8 0 128 57.3 128 128 0 70.8-57.3 128-128 128z"] +}; +var faToilet = { + prefix: 'fas', + iconName: 'toilet', + icon: [384, 512, [], "f7d8", "M368 48c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16H16C7.2 0 0 7.2 0 16v16c0 8.8 7.2 16 16 16h16v156.7C11.8 214.8 0 226.9 0 240c0 67.2 34.6 126.2 86.8 160.5l-21.4 70.2C59.1 491.2 74.5 512 96 512h192c21.5 0 36.9-20.8 30.6-41.3l-21.4-70.2C349.4 366.2 384 307.2 384 240c0-13.1-11.8-25.2-32-35.3V48h16zM80 72c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H88c-4.4 0-8-3.6-8-8V72zm112 200c-77.1 0-139.6-14.3-139.6-32s62.5-32 139.6-32 139.6 14.3 139.6 32-62.5 32-139.6 32z"] +}; +var faToiletPaper = { + prefix: 'fas', + iconName: 'toilet-paper', + icon: [576, 512, [], "f71e", "M128 0C74.98 0 32 85.96 32 192v172.07c0 41.12-9.8 62.77-31.17 126.87C-2.62 501.3 5.09 512 16.01 512h280.92c13.77 0 26-8.81 30.36-21.88 12.83-38.48 24.71-72.4 24.71-126.05V192c0-83.6 23.67-153.52 60.44-192H128zM96 224c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zm64 0c-8.84 0-16-7.16-16-16s7.16-16 16-16 16 7.16 16 16-7.16 16-16 16zM480 0c-53.02 0-96 85.96-96 192s42.98 192 96 192 96-85.96 96-192S533.02 0 480 0zm0 256c-17.67 0-32-28.65-32-64s14.33-64 32-64 32 28.65 32 64-14.33 64-32 64z"] +}; +var faToiletPaperSlash = { + prefix: 'fas', + iconName: 'toilet-paper-slash', + icon: [640, 512, [], "e072", "M64,192V364.13c0,41.12-9.75,62.75-31.12,126.87A16,16,0,0,0,48,512H328.86a31.87,31.87,0,0,0,30.38-21.87c9.31-27.83,18-53.35,22.18-85.55l-316-244.25C64.53,170.66,64,181.19,64,192ZM633.82,458.09l-102-78.81C575.28,360.91,608,284.32,608,192,608,86,565,0,512,0s-96,86-96,192c0,42,7,80.4,18.43,112L384,265V192c0-83.62,23.63-153.5,60.5-192H160c-23.33,0-44.63,16.83-61.26,44.53L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.45A16,16,0,0,0,6.18,53.91L594.54,508.63A16,16,0,0,0,617,505.81l19.64-25.26A16,16,0,0,0,633.82,458.09ZM512,256c-17.63,0-32-28.62-32-64s14.37-64,32-64,32,28.63,32,64S529.62,256,512,256Z"] +}; +var faToolbox = { + prefix: 'fas', + iconName: 'toolbox', + icon: [512, 512, [], "f552", "M502.63 214.63l-45.25-45.25c-6-6-14.14-9.37-22.63-9.37H384V80c0-26.51-21.49-48-48-48H176c-26.51 0-48 21.49-48 48v80H77.25c-8.49 0-16.62 3.37-22.63 9.37L9.37 214.63c-6 6-9.37 14.14-9.37 22.63V320h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-16c0-8.84 7.16-16 16-16h32c8.84 0 16 7.16 16 16v16h128v-82.75c0-8.48-3.37-16.62-9.37-22.62zM320 160H192V96h128v64zm64 208c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H192v16c0 8.84-7.16 16-16 16h-32c-8.84 0-16-7.16-16-16v-16H0v96c0 17.67 14.33 32 32 32h448c17.67 0 32-14.33 32-32v-96H384v16z"] +}; +var faTools = { + prefix: 'fas', + iconName: 'tools', + icon: [512, 512, [], "f7d9", "M501.1 395.7L384 278.6c-23.1-23.1-57.6-27.6-85.4-13.9L192 158.1V96L64 0 0 64l96 128h62.1l106.6 106.6c-13.6 27.8-9.2 62.3 13.9 85.4l117.1 117.1c14.6 14.6 38.2 14.6 52.7 0l52.7-52.7c14.5-14.6 14.5-38.2 0-52.7zM331.7 225c28.3 0 54.9 11 74.9 31l19.4 19.4c15.8-6.9 30.8-16.5 43.8-29.5 37.1-37.1 49.7-89.3 37.9-136.7-2.2-9-13.5-12.1-20.1-5.5l-74.4 74.4-67.9-11.3L334 98.9l74.4-74.4c6.6-6.6 3.4-17.9-5.7-20.2-47.4-11.7-99.6.9-136.6 37.9-28.5 28.5-41.9 66.1-41.2 103.6l82.1 82.1c8.1-1.9 16.5-2.9 24.7-2.9zm-103.9 82l-56.7-56.7L18.7 402.8c-25 25-25 65.5 0 90.5s65.5 25 90.5 0l123.6-123.6c-7.6-19.9-9.9-41.6-5-62.7zM64 472c-13.2 0-24-10.8-24-24 0-13.3 10.7-24 24-24s24 10.7 24 24c0 13.2-10.7 24-24 24z"] +}; +var faTooth = { + prefix: 'fas', + iconName: 'tooth', + icon: [448, 512, [], "f5c9", "M443.98 96.25c-11.01-45.22-47.11-82.06-92.01-93.72-32.19-8.36-63 5.1-89.14 24.33-3.25 2.39-6.96 3.73-10.5 5.48l28.32 18.21c7.42 4.77 9.58 14.67 4.8 22.11-4.46 6.95-14.27 9.86-22.11 4.8L162.83 12.84c-20.7-10.85-43.38-16.4-66.81-10.31-44.9 11.67-81 48.5-92.01 93.72-10.13 41.62-.42 80.81 21.5 110.43 23.36 31.57 32.68 68.66 36.29 107.35 4.4 47.16 10.33 94.16 20.94 140.32l7.8 33.95c3.19 13.87 15.49 23.7 29.67 23.7 13.97 0 26.15-9.55 29.54-23.16l34.47-138.42c4.56-18.32 20.96-31.16 39.76-31.16s35.2 12.85 39.76 31.16l34.47 138.42c3.39 13.61 15.57 23.16 29.54 23.16 14.18 0 26.48-9.83 29.67-23.7l7.8-33.95c10.61-46.15 16.53-93.16 20.94-140.32 3.61-38.7 12.93-75.78 36.29-107.35 21.95-29.61 31.66-68.8 21.53-110.43z"] +}; +var faTorah = { + prefix: 'fas', + iconName: 'torah', + icon: [640, 512, [], "f6a0", "M320.05 366.48l17.72-29.64h-35.46zm99.21-166H382.4l18.46 30.82zM48 0C21.49 0 0 14.33 0 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32C96 14.33 74.51 0 48 0zm172.74 311.5h36.85l-18.46-30.82zm161.71 0h36.86l-18.45-30.8zM128 464h384V48H128zm66.77-278.13a21.22 21.22 0 0 1 18.48-10.71h59.45l29.13-48.71a21.13 21.13 0 0 1 18.22-10.37A20.76 20.76 0 0 1 338 126.29l29.25 48.86h59.52a21.12 21.12 0 0 1 18.1 32L415.63 256 445 305a20.69 20.69 0 0 1 .24 21.12 21.25 21.25 0 0 1-18.48 10.72h-59.47l-29.13 48.7a21.13 21.13 0 0 1-18.16 10.4 20.79 20.79 0 0 1-18-10.22l-29.25-48.88h-59.5a21.11 21.11 0 0 1-18.1-32L224.36 256 195 207a20.7 20.7 0 0 1-.23-21.13zM592 0c-26.51 0-48 14.33-48 32v448c0 17.67 21.49 32 48 32s48-14.33 48-32V32c0-17.67-21.49-32-48-32zM320 145.53l-17.78 29.62h35.46zm-62.45 55h-36.81l18.44 30.8zm29.58 111h65.79L386.09 256l-33.23-55.52h-65.79L253.9 256z"] +}; +var faToriiGate = { + prefix: 'fas', + iconName: 'torii-gate', + icon: [512, 512, [], "f6a1", "M376.45 32h-240.9A303.17 303.17 0 0 1 0 0v96c0 17.67 14.33 32 32 32h32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h48v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h256v240c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16V256h48c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16h-48v-64h32c17.67 0 32-14.33 32-32V0a303.17 303.17 0 0 1-135.55 32zM128 128h96v64h-96v-64zm256 64h-96v-64h96v64z"] +}; +var faTractor = { + prefix: 'fas', + iconName: 'tractor', + icon: [640, 512, [], "f722", "M528 336c-48.6 0-88 39.4-88 88s39.4 88 88 88 88-39.4 88-88-39.4-88-88-88zm0 112c-13.23 0-24-10.77-24-24s10.77-24 24-24 24 10.77 24 24-10.77 24-24 24zm80-288h-64v-40.2c0-14.12 4.7-27.76 13.15-38.84 4.42-5.8 3.55-14.06-1.32-19.49L534.2 37.3c-6.66-7.45-18.32-6.92-24.7.78C490.58 60.9 480 89.81 480 119.8V160H377.67L321.58 29.14A47.914 47.914 0 0 0 277.45 0H144c-26.47 0-48 21.53-48 48v146.52c-8.63-6.73-20.96-6.46-28.89 1.47L36 227.1c-8.59 8.59-8.59 22.52 0 31.11l5.06 5.06c-4.99 9.26-8.96 18.82-11.91 28.72H22c-12.15 0-22 9.85-22 22v44c0 12.15 9.85 22 22 22h7.14c2.96 9.91 6.92 19.46 11.91 28.73l-5.06 5.06c-8.59 8.59-8.59 22.52 0 31.11L67.1 476c8.59 8.59 22.52 8.59 31.11 0l5.06-5.06c9.26 4.99 18.82 8.96 28.72 11.91V490c0 12.15 9.85 22 22 22h44c12.15 0 22-9.85 22-22v-7.14c9.9-2.95 19.46-6.92 28.72-11.91l5.06 5.06c8.59 8.59 22.52 8.59 31.11 0l31.11-31.11c8.59-8.59 8.59-22.52 0-31.11l-5.06-5.06c4.99-9.26 8.96-18.82 11.91-28.72H330c12.15 0 22-9.85 22-22v-6h80.54c21.91-28.99 56.32-48 95.46-48 18.64 0 36.07 4.61 51.8 12.2l50.82-50.82c6-6 9.37-14.14 9.37-22.63V192c.01-17.67-14.32-32-31.99-32zM176 416c-44.18 0-80-35.82-80-80s35.82-80 80-80 80 35.82 80 80-35.82 80-80 80zm22-256h-38V64h106.89l41.15 96H198z"] +}; +var faTrademark = { + prefix: 'fas', + iconName: 'trademark', + icon: [640, 512, [], "f25c", "M260.6 96H12c-6.6 0-12 5.4-12 12v43.1c0 6.6 5.4 12 12 12h85.1V404c0 6.6 5.4 12 12 12h54.3c6.6 0 12-5.4 12-12V163.1h85.1c6.6 0 12-5.4 12-12V108c.1-6.6-5.3-12-11.9-12zM640 403l-24-296c-.5-6.2-5.7-11-12-11h-65.4c-5.1 0-9.7 3.3-11.3 8.1l-43.8 127.1c-7.2 20.6-16.1 52.8-16.1 52.8h-.9s-8.9-32.2-16.1-52.8l-43.8-127.1c-1.7-4.8-6.2-8.1-11.3-8.1h-65.4c-6.2 0-11.4 4.8-12 11l-24.4 296c-.6 7 4.9 13 12 13H360c6.3 0 11.5-4.9 12-11.2l9.1-132.9c1.8-24.2 0-53.7 0-53.7h.9s10.7 33.6 17.9 53.7l30.7 84.7c1.7 4.7 6.2 7.9 11.3 7.9h50.3c5.1 0 9.6-3.2 11.3-7.9l30.7-84.7c7.2-20.1 17.9-53.7 17.9-53.7h.9s-1.8 29.5 0 53.7l9.1 132.9c.4 6.3 5.7 11.2 12 11.2H628c7 0 12.5-6 12-13z"] +}; +var faTrafficLight = { + prefix: 'fas', + iconName: 'traffic-light', + icon: [384, 512, [], "f637", "M384 192h-64v-37.88c37.2-13.22 64-48.38 64-90.12h-64V32c0-17.67-14.33-32-32-32H96C78.33 0 64 14.33 64 32v32H0c0 41.74 26.8 76.9 64 90.12V192H0c0 41.74 26.8 76.9 64 90.12V320H0c0 42.84 28.25 78.69 66.99 91.05C79.42 468.72 130.6 512 192 512s112.58-43.28 125.01-100.95C355.75 398.69 384 362.84 384 320h-64v-37.88c37.2-13.22 64-48.38 64-90.12zM192 416c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm0-128c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"] +}; +var faTrailer = { + prefix: 'fas', + iconName: 'trailer', + icon: [640, 512, [], "e041", "M624,320H544V80a16,16,0,0,0-16-16H16A16,16,0,0,0,0,80V368a16,16,0,0,0,16,16H65.61c7.83-54.21,54-96,110.39-96s102.56,41.79,110.39,96H624a16,16,0,0,0,16-16V336A16,16,0,0,0,624,320ZM96,243.68a176.29,176.29,0,0,0-32,20.71V136a8,8,0,0,1,8-8H88a8,8,0,0,1,8,8Zm96-18.54c-5.31-.49-10.57-1.14-16-1.14s-10.69.65-16,1.14V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,39.25a176.29,176.29,0,0,0-32-20.71V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8ZM384,320H352V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm96,0H448V136a8,8,0,0,1,8-8h16a8,8,0,0,1,8,8Zm-304,0a80,80,0,1,0,80,80A80,80,0,0,0,176,320Zm0,112a32,32,0,1,1,32-32A32,32,0,0,1,176,432Z"] +}; +var faTrain = { + prefix: 'fas', + iconName: 'train', + icon: [448, 512, [], "f238", "M448 96v256c0 51.815-61.624 96-130.022 96l62.98 49.721C386.905 502.417 383.562 512 376 512H72c-7.578 0-10.892-9.594-4.957-14.279L130.022 448C61.82 448 0 403.954 0 352V96C0 42.981 64 0 128 0h192c65 0 128 42.981 128 96zm-48 136V120c0-13.255-10.745-24-24-24H72c-13.255 0-24 10.745-24 24v112c0 13.255 10.745 24 24 24h304c13.255 0 24-10.745 24-24zm-176 64c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56z"] +}; +var faTram = { + prefix: 'fas', + iconName: 'tram', + icon: [512, 512, [], "f7da", "M288 64c17.7 0 32-14.3 32-32S305.7 0 288 0s-32 14.3-32 32 14.3 32 32 32zm223.5-12.1c-2.3-8.6-11-13.6-19.6-11.3l-480 128c-8.5 2.3-13.6 11-11.3 19.6C2.5 195.3 8.9 200 16 200c1.4 0 2.8-.2 4.1-.5L240 140.8V224H64c-17.7 0-32 14.3-32 32v224c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V256c0-17.7-14.3-32-32-32H272v-91.7l228.1-60.8c8.6-2.3 13.6-11.1 11.4-19.6zM176 384H80v-96h96v96zm160-96h96v96h-96v-96zm-32 0v96h-96v-96h96zM192 96c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32z"] +}; +var faTransgender = { + prefix: 'fas', + iconName: 'transgender', + icon: [384, 512, [], "f224", "M372 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C198.5 104.1 172.2 96 144 96 64.5 96 0 160.5 0 240c0 68.5 47.9 125.9 112 140.4V408H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM144 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faTransgenderAlt = { + prefix: 'fas', + iconName: 'transgender-alt', + icon: [480, 512, [], "f225", "M468 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-80.7 80.7C294.5 104.1 268.2 96 240 96c-28.2 0-54.5 8.1-76.7 22.1l-16.5-16.5 19.8-19.8c4.7-4.7 4.7-12.3 0-17l-28.3-28.3c-4.7-4.7-12.3-4.7-17 0l-19.8 19.8-19-19 16.9-16.9C107.1 12.9 101.7 0 91 0H12C5.4 0 0 5.4 0 12v79c0 10.7 12.9 16 20.5 8.5l16.9-16.9 19 19-19.8 19.8c-4.7 4.7-4.7 12.3 0 17l28.3 28.3c4.7 4.7 12.3 4.7 17 0l19.8-19.8 16.5 16.5C104.1 185.5 96 211.8 96 240c0 68.5 47.9 125.9 112 140.4V408h-36c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v28c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-28h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-27.6c64.1-14.6 112-71.9 112-140.4 0-28.2-8.1-54.5-22.1-76.7l80.7-80.7 16.9 16.9c7.6 7.6 20.5 2.2 20.5-8.5V12c0-6.6-5.4-12-12-12zM240 320c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faTrash = { + prefix: 'fas', + iconName: 'trash', + icon: [448, 512, [], "f1f8", "M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"] +}; +var faTrashAlt = { + prefix: 'fas', + iconName: 'trash-alt', + icon: [448, 512, [], "f2ed", "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faTrashRestore = { + prefix: 'fas', + iconName: 'trash-restore', + icon: [448, 512, [], "f829", "M53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32zm70.11-175.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faTrashRestoreAlt = { + prefix: 'fas', + iconName: 'trash-restore-alt', + icon: [448, 512, [], "f82a", "M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm91.31-172.8l89.38-94.26a15.41 15.41 0 0 1 22.62 0l89.38 94.26c10.08 10.62 2.94 28.8-11.32 28.8H256v112a16 16 0 0 1-16 16h-32a16 16 0 0 1-16-16V320h-57.37c-14.26 0-21.4-18.18-11.32-28.8zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"] +}; +var faTree = { + prefix: 'fas', + iconName: 'tree', + icon: [384, 512, [], "f1bb", "M378.31 378.49L298.42 288h30.63c9.01 0 16.98-5 20.78-13.06 3.8-8.04 2.55-17.26-3.28-24.05L268.42 160h28.89c9.1 0 17.3-5.35 20.86-13.61 3.52-8.13 1.86-17.59-4.24-24.08L203.66 4.83c-6.03-6.45-17.28-6.45-23.32 0L70.06 122.31c-6.1 6.49-7.75 15.95-4.24 24.08C69.38 154.65 77.59 160 86.69 160h28.89l-78.14 90.91c-5.81 6.78-7.06 15.99-3.27 24.04C37.97 283 45.93 288 54.95 288h30.63L5.69 378.49c-6 6.79-7.36 16.09-3.56 24.26 3.75 8.05 12 13.25 21.01 13.25H160v24.45l-30.29 48.4c-5.32 10.64 2.42 23.16 14.31 23.16h95.96c11.89 0 19.63-12.52 14.31-23.16L224 440.45V416h136.86c9.01 0 17.26-5.2 21.01-13.25 3.8-8.17 2.44-17.47-3.56-24.26z"] +}; +var faTrophy = { + prefix: 'fas', + iconName: 'trophy', + icon: [576, 512, [], "f091", "M552 64H448V24c0-13.3-10.7-24-24-24H152c-13.3 0-24 10.7-24 24v40H24C10.7 64 0 74.7 0 88v56c0 35.7 22.5 72.4 61.9 100.7 31.5 22.7 69.8 37.1 110 41.7C203.3 338.5 240 360 240 360v72h-48c-35.3 0-64 20.7-64 56v12c0 6.6 5.4 12 12 12h296c6.6 0 12-5.4 12-12v-12c0-35.3-28.7-56-64-56h-48v-72s36.7-21.5 68.1-73.6c40.3-4.6 78.6-19 110-41.7 39.3-28.3 61.9-65 61.9-100.7V88c0-13.3-10.7-24-24-24zM99.3 192.8C74.9 175.2 64 155.6 64 144v-16h64.2c1 32.6 5.8 61.2 12.8 86.2-15.1-5.2-29.2-12.4-41.7-21.4zM512 144c0 16.1-17.7 36.1-35.3 48.8-12.5 9-26.7 16.2-41.8 21.4 7-25 11.8-53.6 12.8-86.2H512v16z"] +}; +var faTruck = { + prefix: 'fas', + iconName: 'truck', + icon: [640, 512, [], "f0d1", "M624 352h-16V243.9c0-12.7-5.1-24.9-14.1-33.9L494 110.1c-9-9-21.2-14.1-33.9-14.1H416V48c0-26.5-21.5-48-48-48H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h16c0 53 43 96 96 96s96-43 96-96h128c0 53 43 96 96 96s96-43 96-96h48c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM160 464c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm320 0c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48zm80-208H416V144h44.1l99.9 99.9V256z"] +}; +var faTruckLoading = { + prefix: 'fas', + iconName: 'truck-loading', + icon: [640, 512, [], "f4de", "M50.2 375.6c2.3 8.5 11.1 13.6 19.6 11.3l216.4-58c8.5-2.3 13.6-11.1 11.3-19.6l-49.7-185.5c-2.3-8.5-11.1-13.6-19.6-11.3L151 133.3l24.8 92.7-61.8 16.5-24.8-92.7-77.3 20.7C3.4 172.8-1.7 181.6.6 190.1l49.6 185.5zM384 0c-17.7 0-32 14.3-32 32v323.6L5.9 450c-4.3 1.2-6.8 5.6-5.6 9.8l12.6 46.3c1.2 4.3 5.6 6.8 9.8 5.6l393.7-107.4C418.8 464.1 467.6 512 528 512c61.9 0 112-50.1 112-112V0H384zm144 448c-26.5 0-48-21.5-48-48s21.5-48 48-48 48 21.5 48 48-21.5 48-48 48z"] +}; +var faTruckMonster = { + prefix: 'fas', + iconName: 'truck-monster', + icon: [640, 512, [], "f63b", "M624 224h-16v-64c0-17.67-14.33-32-32-32h-73.6L419.22 24.02A64.025 64.025 0 0 0 369.24 0H256c-17.67 0-32 14.33-32 32v96H48c-8.84 0-16 7.16-16 16v80H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h16.72c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64h65.45c29.21-38.65 75.1-64 127.28-64s98.07 25.35 127.28 64H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zm-336-96V64h81.24l51.2 64H288zm304 224h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 512 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67A110.85 110.85 0 0 0 373.2 352H368c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32c-.02-8.84-7.18-16-16.02-16zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm-208-80h-5.2c-2.2-7.33-5.07-14.28-8.65-20.89l3.67-3.67c6.25-6.25 6.25-16.38 0-22.63l-22.63-22.63c-6.25-6.25-16.38-6.25-22.63 0l-3.67 3.67A110.85 110.85 0 0 0 192 277.2V272c0-8.84-7.16-16-16-16h-32c-8.84 0-16 7.16-16 16v5.2c-7.33 2.2-14.28 5.07-20.89 8.65l-3.67-3.67c-6.25-6.25-16.38-6.25-22.63 0L58.18 304.8c-6.25 6.25-6.25 16.38 0 22.63l3.67 3.67a110.85 110.85 0 0 0-8.65 20.89H48c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h5.2c2.2 7.33 5.07 14.28 8.65 20.89l-3.67 3.67c-6.25 6.25-6.25 16.38 0 22.63l22.63 22.63c6.25 6.25 16.38 6.25 22.63 0l3.67-3.67c6.61 3.57 13.57 6.45 20.9 8.65v5.2c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-5.2c7.33-2.2 14.28-5.07 20.9-8.65l3.67 3.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.25-6.25 6.25-16.38 0-22.63l-3.67-3.67a110.85 110.85 0 0 0 8.65-20.89h5.2c8.84 0 16-7.16 16-16v-32C288 359.16 280.84 352 272 352zm-112 80c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48z"] +}; +var faTruckMoving = { + prefix: 'fas', + iconName: 'truck-moving', + icon: [640, 512, [], "f4df", "M621.3 237.3l-58.5-58.5c-12-12-28.3-18.7-45.3-18.7H480V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v336c0 44.2 35.8 80 80 80 26.3 0 49.4-12.9 64-32.4 14.6 19.6 37.7 32.4 64 32.4 44.2 0 80-35.8 80-80 0-5.5-.6-10.8-1.6-16h163.2c-1.1 5.2-1.6 10.5-1.6 16 0 44.2 35.8 80 80 80s80-35.8 80-80c0-5.5-.6-10.8-1.6-16H624c8.8 0 16-7.2 16-16v-85.5c0-17-6.7-33.2-18.7-45.2zM80 432c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm128 0c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32zm272-224h37.5c4.3 0 8.3 1.7 11.3 4.7l43.3 43.3H480v-48zm48 224c-17.6 0-32-14.4-32-32s14.4-32 32-32 32 14.4 32 32-14.4 32-32 32z"] +}; +var faTruckPickup = { + prefix: 'fas', + iconName: 'truck-pickup', + icon: [640, 512, [], "f63c", "M624 288h-16v-64c0-17.67-14.33-32-32-32h-48L419.22 56.02A64.025 64.025 0 0 0 369.24 32H256c-17.67 0-32 14.33-32 32v128H64c-17.67 0-32 14.33-32 32v64H16c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h49.61c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16h67.23c-.76 5.27-1.61 10.52-1.61 16 0 61.86 50.14 112 112 112s112-50.14 112-112c0-5.48-.85-10.73-1.61-16H624c8.84 0 16-7.16 16-16v-32c0-8.84-7.16-16-16-16zM288 96h81.24l76.8 96H288V96zM176 416c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48zm288 0c-26.47 0-48-21.53-48-48s21.53-48 48-48 48 21.53 48 48-21.53 48-48 48z"] +}; +var faTshirt = { + prefix: 'fas', + iconName: 'tshirt', + icon: [640, 512, [], "f553", "M631.2 96.5L436.5 0C416.4 27.8 371.9 47.2 320 47.2S223.6 27.8 203.5 0L8.8 96.5c-7.9 4-11.1 13.6-7.2 21.5l57.2 114.5c4 7.9 13.6 11.1 21.5 7.2l56.6-27.7c10.6-5.2 23 2.5 23 14.4V480c0 17.7 14.3 32 32 32h256c17.7 0 32-14.3 32-32V226.3c0-11.8 12.4-19.6 23-14.4l56.6 27.7c7.9 4 17.5.8 21.5-7.2L638.3 118c4-7.9.8-17.6-7.1-21.5z"] +}; +var faTty = { + prefix: 'fas', + iconName: 'tty', + icon: [512, 512, [], "f1e4", "M5.37 103.822c138.532-138.532 362.936-138.326 501.262 0 6.078 6.078 7.074 15.496 2.583 22.681l-43.214 69.138a18.332 18.332 0 0 1-22.356 7.305l-86.422-34.569a18.335 18.335 0 0 1-11.434-18.846L351.741 90c-62.145-22.454-130.636-21.986-191.483 0l5.953 59.532a18.331 18.331 0 0 1-11.434 18.846l-86.423 34.568a18.334 18.334 0 0 1-22.356-7.305L2.787 126.502a18.333 18.333 0 0 1 2.583-22.68zM96 308v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm-336 96v-40c0-6.627-5.373-12-12-12H92c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zM96 500v-40c0-6.627-5.373-12-12-12H44c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12zm288 0v-40c0-6.627-5.373-12-12-12H140c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h232c6.627 0 12-5.373 12-12zm96 0v-40c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12z"] +}; +var faTv = { + prefix: 'fas', + iconName: 'tv', + icon: [640, 512, [], "f26c", "M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z"] +}; +var faUmbrella = { + prefix: 'fas', + iconName: 'umbrella', + icon: [576, 512, [], "f0e9", "M575.7 280.8C547.1 144.5 437.3 62.6 320 49.9V32c0-17.7-14.3-32-32-32s-32 14.3-32 32v17.9C138.3 62.6 29.5 144.5.3 280.8c-2.2 10.1 8.5 21.3 18.7 11.4 52-55 107.7-52.4 158.6 37 5.3 9.5 14.9 8.6 19.7 0 20.2-35.4 44.9-73.2 90.7-73.2 58.5 0 88.2 68.8 90.7 73.2 4.8 8.6 14.4 9.5 19.7 0 51-89.5 107.1-91.4 158.6-37 10.3 10 20.9-1.3 18.7-11.4zM256 301.7V432c0 8.8-7.2 16-16 16-7.8 0-13.2-5.3-15.1-10.7-5.9-16.7-24.1-25.4-40.8-19.5-16.7 5.9-25.4 24.2-19.5 40.8 11.2 31.9 41.6 53.3 75.4 53.3 44.1 0 80-35.9 80-80V301.6c-9.1-7.9-19.8-13.6-32-13.6-12.3.1-22.4 4.8-32 13.7z"] +}; +var faUmbrellaBeach = { + prefix: 'fas', + iconName: 'umbrella-beach', + icon: [640, 512, [], "f5ca", "M115.38 136.9l102.11 37.18c35.19-81.54 86.21-144.29 139-173.7-95.88-4.89-188.78 36.96-248.53 111.8-6.69 8.4-2.66 21.05 7.42 24.72zm132.25 48.16l238.48 86.83c35.76-121.38 18.7-231.66-42.63-253.98-7.4-2.7-15.13-4-23.09-4-58.02.01-128.27 69.17-172.76 171.15zM521.48 60.5c6.22 16.3 10.83 34.6 13.2 55.19 5.74 49.89-1.42 108.23-18.95 166.98l102.62 37.36c10.09 3.67 21.31-3.43 21.57-14.17 2.32-95.69-41.91-187.44-118.44-245.36zM560 447.98H321.06L386 269.5l-60.14-21.9-72.9 200.37H16c-8.84 0-16 7.16-16 16.01v32.01C0 504.83 7.16 512 16 512h544c8.84 0 16-7.17 16-16.01v-32.01c0-8.84-7.16-16-16-16z"] +}; +var faUnderline = { + prefix: 'fas', + iconName: 'underline', + icon: [448, 512, [], "f0cd", "M32 64h32v160c0 88.22 71.78 160 160 160s160-71.78 160-160V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H272a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h32v160a80 80 0 0 1-160 0V64h32a16 16 0 0 0 16-16V16a16 16 0 0 0-16-16H32a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16zm400 384H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z"] +}; +var faUndo = { + prefix: 'fas', + iconName: 'undo', + icon: [512, 512, [], "f0e2", "M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"] +}; +var faUndoAlt = { + prefix: 'fas', + iconName: 'undo-alt', + icon: [512, 512, [], "f2ea", "M255.545 8c-66.269.119-126.438 26.233-170.86 68.685L48.971 40.971C33.851 25.851 8 36.559 8 57.941V192c0 13.255 10.745 24 24 24h134.059c21.382 0 32.09-25.851 16.971-40.971l-41.75-41.75c30.864-28.899 70.801-44.907 113.23-45.273 92.398-.798 170.283 73.977 169.484 169.442C423.236 348.009 349.816 424 256 424c-41.127 0-79.997-14.678-110.63-41.556-4.743-4.161-11.906-3.908-16.368.553L89.34 422.659c-4.872 4.872-4.631 12.815.482 17.433C133.798 479.813 192.074 504 256 504c136.966 0 247.999-111.033 248-247.998C504.001 119.193 392.354 7.755 255.545 8z"] +}; +var faUniversalAccess = { + prefix: 'fas', + iconName: 'universal-access', + icon: [512, 512, [], "f29a", "M256 48c114.953 0 208 93.029 208 208 0 114.953-93.029 208-208 208-114.953 0-208-93.029-208-208 0-114.953 93.029-208 208-208m0-40C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 56C149.961 64 64 149.961 64 256s85.961 192 192 192 192-85.961 192-192S362.039 64 256 64zm0 44c19.882 0 36 16.118 36 36s-16.118 36-36 36-36-16.118-36-36 16.118-36 36-36zm117.741 98.023c-28.712 6.779-55.511 12.748-82.14 15.807.851 101.023 12.306 123.052 25.037 155.621 3.617 9.26-.957 19.698-10.217 23.315-9.261 3.617-19.699-.957-23.316-10.217-8.705-22.308-17.086-40.636-22.261-78.549h-9.686c-5.167 37.851-13.534 56.208-22.262 78.549-3.615 9.255-14.05 13.836-23.315 10.217-9.26-3.617-13.834-14.056-10.217-23.315 12.713-32.541 24.185-54.541 25.037-155.621-26.629-3.058-53.428-9.027-82.141-15.807-8.6-2.031-13.926-10.648-11.895-19.249s10.647-13.926 19.249-11.895c96.686 22.829 124.283 22.783 220.775 0 8.599-2.03 17.218 3.294 19.249 11.895 2.029 8.601-3.297 17.219-11.897 19.249z"] +}; +var faUniversity = { + prefix: 'fas', + iconName: 'university', + icon: [512, 512, [], "f19c", "M496 128v16a8 8 0 0 1-8 8h-24v12c0 6.627-5.373 12-12 12H60c-6.627 0-12-5.373-12-12v-12H24a8 8 0 0 1-8-8v-16a8 8 0 0 1 4.941-7.392l232-88a7.996 7.996 0 0 1 6.118 0l232 88A8 8 0 0 1 496 128zm-24 304H40c-13.255 0-24 10.745-24 24v16a8 8 0 0 0 8 8h464a8 8 0 0 0 8-8v-16c0-13.255-10.745-24-24-24zM96 192v192H60c-6.627 0-12 5.373-12 12v20h416v-20c0-6.627-5.373-12-12-12h-36V192h-64v192h-64V192h-64v192h-64V192H96z"] +}; +var faUnlink = { + prefix: 'fas', + iconName: 'unlink', + icon: [512, 512, [], "f127", "M304.083 405.907c4.686 4.686 4.686 12.284 0 16.971l-44.674 44.674c-59.263 59.262-155.693 59.266-214.961 0-59.264-59.265-59.264-155.696 0-214.96l44.675-44.675c4.686-4.686 12.284-4.686 16.971 0l39.598 39.598c4.686 4.686 4.686 12.284 0 16.971l-44.675 44.674c-28.072 28.073-28.072 73.75 0 101.823 28.072 28.072 73.75 28.073 101.824 0l44.674-44.674c4.686-4.686 12.284-4.686 16.971 0l39.597 39.598zm-56.568-260.216c4.686 4.686 12.284 4.686 16.971 0l44.674-44.674c28.072-28.075 73.75-28.073 101.824 0 28.072 28.073 28.072 73.75 0 101.823l-44.675 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.598 39.598c4.686 4.686 12.284 4.686 16.971 0l44.675-44.675c59.265-59.265 59.265-155.695 0-214.96-59.266-59.264-155.695-59.264-214.961 0l-44.674 44.674c-4.686 4.686-4.686 12.284 0 16.971l39.597 39.598zm234.828 359.28l22.627-22.627c9.373-9.373 9.373-24.569 0-33.941L63.598 7.029c-9.373-9.373-24.569-9.373-33.941 0L7.029 29.657c-9.373 9.373-9.373 24.569 0 33.941l441.373 441.373c9.373 9.372 24.569 9.372 33.941 0z"] +}; +var faUnlock = { + prefix: 'fas', + iconName: 'unlock', + icon: [448, 512, [], "f09c", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"] +}; +var faUnlockAlt = { + prefix: 'fas', + iconName: 'unlock-alt', + icon: [448, 512, [], "f13e", "M400 256H152V152.9c0-39.6 31.7-72.5 71.3-72.9 40-.4 72.7 32.1 72.7 72v16c0 13.3 10.7 24 24 24h32c13.3 0 24-10.7 24-24v-16C376 68 307.5-.3 223.5 0 139.5.3 72 69.5 72 153.5V256H48c-26.5 0-48 21.5-48 48v160c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zM264 408c0 22.1-17.9 40-40 40s-40-17.9-40-40v-48c0-22.1 17.9-40 40-40s40 17.9 40 40v48z"] +}; +var faUpload = { + prefix: 'fas', + iconName: 'upload', + icon: [512, 512, [], "f093", "M296 384h-80c-13.3 0-24-10.7-24-24V192h-87.7c-17.8 0-26.7-21.5-14.1-34.1L242.3 5.7c7.5-7.5 19.8-7.5 27.3 0l152.2 152.2c12.6 12.6 3.7 34.1-14.1 34.1H320v168c0 13.3-10.7 24-24 24zm216-8v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h136v8c0 30.9 25.1 56 56 56h80c30.9 0 56-25.1 56-56v-8h136c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"] +}; +var faUser = { + prefix: 'fas', + iconName: 'user', + icon: [448, 512, [], "f007", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"] +}; +var faUserAlt = { + prefix: 'fas', + iconName: 'user-alt', + icon: [512, 512, [], "f406", "M256 288c79.5 0 144-64.5 144-144S335.5 0 256 0 112 64.5 112 144s64.5 144 144 144zm128 32h-55.1c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16H128C57.3 320 0 377.3 0 448v16c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-16c0-70.7-57.3-128-128-128z"] +}; +var faUserAltSlash = { + prefix: 'fas', + iconName: 'user-alt-slash', + icon: [640, 512, [], "f4fa", "M633.8 458.1L389.6 269.3C433.8 244.7 464 198.1 464 144 464 64.5 399.5 0 320 0c-67.1 0-123 46.1-139 108.2L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM198.4 320C124.2 320 64 380.2 64 454.4v9.6c0 26.5 21.5 48 48 48h382.2L245.8 320h-47.4z"] +}; +var faUserAstronaut = { + prefix: 'fas', + iconName: 'user-astronaut', + icon: [448, 512, [], "f4fb", "M64 224h13.5c24.7 56.5 80.9 96 146.5 96s121.8-39.5 146.5-96H384c8.8 0 16-7.2 16-16v-96c0-8.8-7.2-16-16-16h-13.5C345.8 39.5 289.6 0 224 0S102.2 39.5 77.5 96H64c-8.8 0-16 7.2-16 16v96c0 8.8 7.2 16 16 16zm40-88c0-22.1 21.5-40 48-40h144c26.5 0 48 17.9 48 40v24c0 53-43 96-96 96h-48c-53 0-96-43-96-96v-24zm72 72l12-36 36-12-36-12-12-36-12 36-36 12 36 12 12 36zm151.6 113.4C297.7 340.7 262.2 352 224 352s-73.7-11.3-103.6-30.6C52.9 328.5 0 385 0 454.4v9.6c0 26.5 21.5 48 48 48h80v-64c0-17.7 14.3-32 32-32h128c17.7 0 32 14.3 32 32v64h80c26.5 0 48-21.5 48-48v-9.6c0-69.4-52.9-125.9-120.4-133zM272 448c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm-96 0c-8.8 0-16 7.2-16 16v48h32v-48c0-8.8-7.2-16-16-16z"] +}; +var faUserCheck = { + prefix: 'fas', + iconName: 'user-check', + icon: [640, 512, [], "f4fc", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4zm323-128.4l-27.8-28.1c-4.6-4.7-12.1-4.7-16.8-.1l-104.8 104-45.5-45.8c-4.6-4.7-12.1-4.7-16.8-.1l-28.1 27.9c-4.7 4.6-4.7 12.1-.1 16.8l81.7 82.3c4.6 4.7 12.1 4.7 16.8.1l141.3-140.2c4.6-4.7 4.7-12.2.1-16.8z"] +}; +var faUserCircle = { + prefix: 'fas', + iconName: 'user-circle', + icon: [496, 512, [], "f2bd", "M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z"] +}; +var faUserClock = { + prefix: 'fas', + iconName: 'user-clock', + icon: [640, 512, [], "f4fd", "M496 224c-79.6 0-144 64.4-144 144s64.4 144 144 144 144-64.4 144-144-64.4-144-144-144zm64 150.3c0 5.3-4.4 9.7-9.7 9.7h-60.6c-5.3 0-9.7-4.4-9.7-9.7v-76.6c0-5.3 4.4-9.7 9.7-9.7h12.6c5.3 0 9.7 4.4 9.7 9.7V352h38.3c5.3 0 9.7 4.4 9.7 9.7v12.6zM320 368c0-27.8 6.7-54.1 18.2-77.5-8-1.5-16.2-2.5-24.6-2.5h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h347.1c-45.3-31.9-75.1-84.5-75.1-144zm-96-112c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128z"] +}; +var faUserCog = { + prefix: 'fas', + iconName: 'user-cog', + icon: [640, 512, [], "f4fe", "M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z"] +}; +var faUserEdit = { + prefix: 'fas', + iconName: 'user-edit', + icon: [640, 512, [], "f4ff", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h274.9c-2.4-6.8-3.4-14-2.6-21.3l6.8-60.9 1.2-11.1 7.9-7.9 77.3-77.3c-24.5-27.7-60-45.5-99.9-45.5zm45.3 145.3l-6.8 61c-1.1 10.2 7.5 18.8 17.6 17.6l60.9-6.8 137.9-137.9-71.7-71.7-137.9 137.8zM633 268.9L595.1 231c-9.3-9.3-24.5-9.3-33.8 0l-37.8 37.8-4.1 4.1 71.8 71.7 41.8-41.8c9.3-9.4 9.3-24.5 0-33.9z"] +}; +var faUserFriends = { + prefix: 'fas', + iconName: 'user-friends', + icon: [640, 512, [], "f500", "M192 256c61.9 0 112-50.1 112-112S253.9 32 192 32 80 82.1 80 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C51.6 288 0 339.6 0 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zM480 256c53 0 96-43 96-96s-43-96-96-96-96 43-96 96 43 96 96 96zm48 32h-3.8c-13.9 4.8-28.6 8-44.2 8s-30.3-3.2-44.2-8H432c-20.4 0-39.2 5.9-55.7 15.4 24.4 26.3 39.7 61.2 39.7 99.8v38.4c0 2.2-.5 4.3-.6 6.4H592c26.5 0 48-21.5 48-48 0-61.9-50.1-112-112-112z"] +}; +var faUserGraduate = { + prefix: 'fas', + iconName: 'user-graduate', + icon: [448, 512, [], "f501", "M319.4 320.6L224 416l-95.4-95.4C57.1 323.7 0 382.2 0 454.4v9.6c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-9.6c0-72.2-57.1-130.7-128.6-133.8zM13.6 79.8l6.4 1.5v58.4c-7 4.2-12 11.5-12 20.3 0 8.4 4.6 15.4 11.1 19.7L3.5 242c-1.7 6.9 2.1 14 7.6 14h41.8c5.5 0 9.3-7.1 7.6-14l-15.6-62.3C51.4 175.4 56 168.4 56 160c0-8.8-5-16.1-12-20.3V87.1l66 15.9c-8.6 17.2-14 36.4-14 57 0 70.7 57.3 128 128 128s128-57.3 128-128c0-20.6-5.3-39.8-14-57l96.3-23.2c18.2-4.4 18.2-27.1 0-31.5l-190.4-46c-13-3.1-26.7-3.1-39.7 0L13.6 48.2c-18.1 4.4-18.1 27.2 0 31.6z"] +}; +var faUserInjured = { + prefix: 'fas', + iconName: 'user-injured', + icon: [448, 512, [], "f728", "M277.37 11.98C261.08 4.47 243.11 0 224 0c-53.69 0-99.5 33.13-118.51 80h81.19l90.69-68.02zM342.51 80c-7.9-19.47-20.67-36.2-36.49-49.52L239.99 80h102.52zM224 256c70.69 0 128-57.31 128-128 0-5.48-.95-10.7-1.61-16H97.61c-.67 5.3-1.61 10.52-1.61 16 0 70.69 57.31 128 128 128zM80 299.7V512h128.26l-98.45-221.52A132.835 132.835 0 0 0 80 299.7zM0 464c0 26.51 21.49 48 48 48V320.24C18.88 344.89 0 381.26 0 422.4V464zm256-48h-55.38l42.67 96H256c26.47 0 48-21.53 48-48s-21.53-48-48-48zm57.6-128h-16.71c-22.24 10.18-46.88 16-72.89 16s-50.65-5.82-72.89-16h-7.37l42.67 96H256c44.11 0 80 35.89 80 80 0 18.08-6.26 34.59-16.41 48H400c26.51 0 48-21.49 48-48v-41.6c0-74.23-60.17-134.4-134.4-134.4z"] +}; +var faUserLock = { + prefix: 'fas', + iconName: 'user-lock', + icon: [640, 512, [], "f502", "M224 256A128 128 0 1 0 96 128a128 128 0 0 0 128 128zm96 64a63.08 63.08 0 0 1 8.1-30.5c-4.8-.5-9.5-1.5-14.5-1.5h-16.7a174.08 174.08 0 0 1-145.8 0h-16.7A134.43 134.43 0 0 0 0 422.4V464a48 48 0 0 0 48 48h280.9a63.54 63.54 0 0 1-8.9-32zm288-32h-32v-80a80 80 0 0 0-160 0v80h-32a32 32 0 0 0-32 32v160a32 32 0 0 0 32 32h224a32 32 0 0 0 32-32V320a32 32 0 0 0-32-32zM496 432a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm32-144h-64v-80a32 32 0 0 1 64 0z"] +}; +var faUserMd = { + prefix: 'fas', + iconName: 'user-md', + icon: [448, 512, [], "f0f0", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zM104 424c0 13.3 10.7 24 24 24s24-10.7 24-24-10.7-24-24-24-24 10.7-24 24zm216-135.4v49c36.5 7.4 64 39.8 64 78.4v41.7c0 7.6-5.4 14.2-12.9 15.7l-32.2 6.4c-4.3.9-8.5-1.9-9.4-6.3l-3.1-15.7c-.9-4.3 1.9-8.6 6.3-9.4l19.3-3.9V416c0-62.8-96-65.1-96 1.9v26.7l19.3 3.9c4.3.9 7.1 5.1 6.3 9.4l-3.1 15.7c-.9 4.3-5.1 7.1-9.4 6.3l-31.2-4.2c-7.9-1.1-13.8-7.8-13.8-15.9V416c0-38.6 27.5-70.9 64-78.4v-45.2c-2.2.7-4.4 1.1-6.6 1.9-18 6.3-37.3 9.8-57.4 9.8s-39.4-3.5-57.4-9.8c-7.4-2.6-14.9-4.2-22.6-5.2v81.6c23.1 6.9 40 28.1 40 53.4 0 30.9-25.1 56-56 56s-56-25.1-56-56c0-25.3 16.9-46.5 40-53.4v-80.4C48.5 301 0 355.8 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-72-56.8-130.3-128-133.8z"] +}; +var faUserMinus = { + prefix: 'fas', + iconName: 'user-minus', + icon: [640, 512, [], "f503", "M624 208H432c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h192c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"] +}; +var faUserNinja = { + prefix: 'fas', + iconName: 'user-ninja', + icon: [448, 512, [], "f504", "M325.4 289.2L224 390.6 122.6 289.2C54 295.3 0 352.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-70.2-54-127.1-122.6-133.2zM32 192c27.3 0 51.8-11.5 69.2-29.7 15.1 53.9 64 93.7 122.8 93.7 70.7 0 128-57.3 128-128S294.7 0 224 0c-50.4 0-93.6 29.4-114.5 71.8C92.1 47.8 64 32 32 32c0 33.4 17.1 62.8 43.1 80-26 17.2-43.1 46.6-43.1 80zm144-96h96c17.7 0 32 14.3 32 32H144c0-17.7 14.3-32 32-32z"] +}; +var faUserNurse = { + prefix: 'fas', + iconName: 'user-nurse', + icon: [448, 512, [], "f82f", "M319.41,320,224,415.39,128.59,320C57.1,323.1,0,381.6,0,453.79A58.21,58.21,0,0,0,58.21,512H389.79A58.21,58.21,0,0,0,448,453.79C448,381.6,390.9,323.1,319.41,320ZM224,304A128,128,0,0,0,352,176V65.82a32,32,0,0,0-20.76-30L246.47,4.07a64,64,0,0,0-44.94,0L116.76,35.86A32,32,0,0,0,96,65.82V176A128,128,0,0,0,224,304ZM184,71.67a5,5,0,0,1,5-5h21.67V45a5,5,0,0,1,5-5h16.66a5,5,0,0,1,5,5V66.67H259a5,5,0,0,1,5,5V88.33a5,5,0,0,1-5,5H237.33V115a5,5,0,0,1-5,5H215.67a5,5,0,0,1-5-5V93.33H189a5,5,0,0,1-5-5ZM144,160H304v16a80,80,0,0,1-160,0Z"] +}; +var faUserPlus = { + prefix: 'fas', + iconName: 'user-plus', + icon: [640, 512, [], "f234", "M624 208h-64v-64c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v64h-64c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h64v64c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-64h64c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm-400 48c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"] +}; +var faUserSecret = { + prefix: 'fas', + iconName: 'user-secret', + icon: [448, 512, [], "f21b", "M383.9 308.3l23.9-62.6c4-10.5-3.7-21.7-15-21.7h-58.5c11-18.9 17.8-40.6 17.8-64v-.3c39.2-7.8 64-19.1 64-31.7 0-13.3-27.3-25.1-70.1-33-9.2-32.8-27-65.8-40.6-82.8-9.5-11.9-25.9-15.6-39.5-8.8l-27.6 13.8c-9 4.5-19.6 4.5-28.6 0L182.1 3.4c-13.6-6.8-30-3.1-39.5 8.8-13.5 17-31.4 50-40.6 82.8-42.7 7.9-70 19.7-70 33 0 12.6 24.8 23.9 64 31.7v.3c0 23.4 6.8 45.1 17.8 64H56.3c-11.5 0-19.2 11.7-14.7 22.3l25.8 60.2C27.3 329.8 0 372.7 0 422.4v44.8C0 491.9 20.1 512 44.8 512h358.4c24.7 0 44.8-20.1 44.8-44.8v-44.8c0-48.4-25.8-90.4-64.1-114.1zM176 480l-41.6-192 49.6 32 24 40-32 120zm96 0l-32-120 24-40 49.6-32L272 480zm41.7-298.5c-3.9 11.9-7 24.6-16.5 33.4-10.1 9.3-48 22.4-64-25-2.8-8.4-15.4-8.4-18.3 0-17 50.2-56 32.4-64 25-9.5-8.8-12.7-21.5-16.5-33.4-.8-2.5-6.3-5.7-6.3-5.8v-10.8c28.3 3.6 61 5.8 96 5.8s67.7-2.1 96-5.8v10.8c-.1.1-5.6 3.2-6.4 5.8z"] +}; +var faUserShield = { + prefix: 'fas', + iconName: 'user-shield', + icon: [640, 512, [], "f505", "M622.3 271.1l-115.2-45c-4.1-1.6-12.6-3.7-22.2 0l-115.2 45c-10.7 4.2-17.7 14-17.7 24.9 0 111.6 68.7 188.8 132.9 213.9 9.6 3.7 18 1.6 22.2 0C558.4 489.9 640 420.5 640 296c0-10.9-7-20.7-17.7-24.9zM496 462.4V273.3l95.5 37.3c-5.6 87.1-60.9 135.4-95.5 151.8zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm96 40c0-2.5.8-4.8 1.1-7.2-2.5-.1-4.9-.8-7.5-.8h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c6.8 0 13.3-1.5 19.2-4-54-42.9-99.2-116.7-99.2-212z"] +}; +var faUserSlash = { + prefix: 'fas', + iconName: 'user-slash', + icon: [640, 512, [], "f506", "M633.8 458.1L362.3 248.3C412.1 230.7 448 183.8 448 128 448 57.3 390.7 0 320 0c-67.1 0-121.5 51.8-126.9 117.4L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4l588.4 454.7c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.4-6.8 4.1-16.9-2.9-22.3zM96 422.4V464c0 26.5 21.5 48 48 48h350.2L207.4 290.3C144.2 301.3 96 356 96 422.4z"] +}; +var faUserTag = { + prefix: 'fas', + iconName: 'user-tag', + icon: [640, 512, [], "f507", "M630.6 364.9l-90.3-90.2c-12-12-28.3-18.7-45.3-18.7h-79.3c-17.7 0-32 14.3-32 32v79.2c0 17 6.7 33.2 18.7 45.2l90.3 90.2c12.5 12.5 32.8 12.5 45.3 0l92.5-92.5c12.6-12.5 12.6-32.7.1-45.2zm-182.8-21c-13.3 0-24-10.7-24-24s10.7-24 24-24 24 10.7 24 24c0 13.2-10.7 24-24 24zm-223.8-88c70.7 0 128-57.3 128-128C352 57.3 294.7 0 224 0S96 57.3 96 128c0 70.6 57.3 127.9 128 127.9zm127.8 111.2V294c-12.2-3.6-24.9-6.2-38.2-6.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 287.9 0 348.1 0 422.3v41.6c0 26.5 21.5 48 48 48h352c15.5 0 29.1-7.5 37.9-18.9l-58-58c-18.1-18.1-28.1-42.2-28.1-67.9z"] +}; +var faUserTie = { + prefix: 'fas', + iconName: 'user-tie', + icon: [448, 512, [], "f508", "M224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm95.8 32.6L272 480l-32-136 32-56h-96l32 56-32 136-47.8-191.4C56.9 292 0 350.3 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-72.1-56.9-130.4-128.2-133.8z"] +}; +var faUserTimes = { + prefix: 'fas', + iconName: 'user-times', + icon: [640, 512, [], "f235", "M589.6 240l45.6-45.6c6.3-6.3 6.3-16.5 0-22.8l-22.8-22.8c-6.3-6.3-16.5-6.3-22.8 0L544 194.4l-45.6-45.6c-6.3-6.3-16.5-6.3-22.8 0l-22.8 22.8c-6.3 6.3-6.3 16.5 0 22.8l45.6 45.6-45.6 45.6c-6.3 6.3-6.3 16.5 0 22.8l22.8 22.8c6.3 6.3 16.5 6.3 22.8 0l45.6-45.6 45.6 45.6c6.3 6.3 16.5 6.3 22.8 0l22.8-22.8c6.3-6.3 6.3-16.5 0-22.8L589.6 240zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm89.6 32h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48v-41.6c0-74.2-60.2-134.4-134.4-134.4z"] +}; +var faUsers = { + prefix: 'fas', + iconName: 'users', + icon: [640, 512, [], "f0c0", "M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"] +}; +var faUsersCog = { + prefix: 'fas', + iconName: 'users-cog', + icon: [640, 512, [], "f509", "M610.5 341.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 368.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm224 32c1.9 0 3.7-.5 5.6-.6 8.3-21.7 20.5-42.1 36.3-59.2 7.4-8 17.9-12.6 28.9-12.6 6.9 0 13.7 1.8 19.6 5.3l7.9 4.6c.8-.5 1.6-.9 2.4-1.4 7-14.6 11.2-30.8 11.2-48 0-61.9-50.1-112-112-112S208 82.1 208 144c0 61.9 50.1 112 112 112zm105.2 194.5c-2.3-1.2-4.6-2.6-6.8-3.9-8.2 4.8-15.3 9.8-27.5 9.8-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-10.7-34.5 24.9-49.7 25.8-50.3-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-3.8-2.2-7-5-9.8-8.1-3.3.2-6.5.6-9.8.6-24.6 0-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h255.4c-3.7-6-6.2-12.8-6.2-20.3v-9.2zM173.1 274.6C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"] +}; +var faUsersSlash = { + prefix: 'fas', + iconName: 'users-slash', + icon: [640, 512, [], "e073", "M132.65,212.32,36.21,137.78A63.4,63.4,0,0,0,32,160a63.84,63.84,0,0,0,100.65,52.32Zm40.44,62.28A63.79,63.79,0,0,0,128,256H64A64.06,64.06,0,0,0,0,320v32a32,32,0,0,0,32,32H97.91A146.62,146.62,0,0,1,173.09,274.6ZM544,224a64,64,0,1,0-64-64A64.06,64.06,0,0,0,544,224ZM500.56,355.11a114.24,114.24,0,0,0-84.47-65.28L361,247.23c41.46-16.3,71-55.92,71-103.23A111.93,111.93,0,0,0,320,32c-57.14,0-103.69,42.83-110.6,98.08L45.46,3.38A16,16,0,0,0,23,6.19L3.37,31.46A16,16,0,0,0,6.18,53.91L594.53,508.63A16,16,0,0,0,617,505.82l19.64-25.27a16,16,0,0,0-2.81-22.45ZM128,403.21V432a48,48,0,0,0,48,48H464a47.45,47.45,0,0,0,12.57-1.87L232,289.13C173.74,294.83,128,343.42,128,403.21ZM576,256H512a63.79,63.79,0,0,0-45.09,18.6A146.29,146.29,0,0,1,542,384h66a32,32,0,0,0,32-32V320A64.06,64.06,0,0,0,576,256Z"] +}; +var faUtensilSpoon = { + prefix: 'fas', + iconName: 'utensil-spoon', + icon: [512, 512, [], "f2e5", "M480.1 31.9c-55-55.1-164.9-34.5-227.8 28.5-49.3 49.3-55.1 110-28.8 160.4L9 413.2c-11.6 10.5-12.1 28.5-1 39.5L59.3 504c11 11 29.1 10.5 39.5-1.1l192.4-214.4c50.4 26.3 111.1 20.5 160.4-28.8 63-62.9 83.6-172.8 28.5-227.8z"] +}; +var faUtensils = { + prefix: 'fas', + iconName: 'utensils', + icon: [416, 512, [], "f2e7", "M207.9 15.2c.8 4.7 16.1 94.5 16.1 128.8 0 52.3-27.8 89.6-68.9 104.6L168 486.7c.7 13.7-10.2 25.3-24 25.3H80c-13.7 0-24.7-11.5-24-25.3l12.9-238.1C27.7 233.6 0 196.2 0 144 0 109.6 15.3 19.9 16.1 15.2 19.3-5.1 61.4-5.4 64 16.3v141.2c1.3 3.4 15.1 3.2 16 0 1.4-25.3 7.9-139.2 8-141.8 3.3-20.8 44.7-20.8 47.9 0 .2 2.7 6.6 116.5 8 141.8.9 3.2 14.8 3.4 16 0V16.3c2.6-21.6 44.8-21.4 48-1.1zm119.2 285.7l-15 185.1c-1.2 14 9.9 26 23.9 26h56c13.3 0 24-10.7 24-24V24c0-13.2-10.7-24-24-24-82.5 0-221.4 178.5-64.9 300.9z"] +}; +var faVectorSquare = { + prefix: 'fas', + iconName: 'vector-square', + icon: [512, 512, [], "f5cb", "M512 128V32c0-17.67-14.33-32-32-32h-96c-17.67 0-32 14.33-32 32H160c0-17.67-14.33-32-32-32H32C14.33 0 0 14.33 0 32v96c0 17.67 14.33 32 32 32v192c-17.67 0-32 14.33-32 32v96c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32h192c0 17.67 14.33 32 32 32h96c17.67 0 32-14.33 32-32v-96c0-17.67-14.33-32-32-32V160c17.67 0 32-14.33 32-32zm-96-64h32v32h-32V64zM64 64h32v32H64V64zm32 384H64v-32h32v32zm352 0h-32v-32h32v32zm-32-96h-32c-17.67 0-32 14.33-32 32v32H160v-32c0-17.67-14.33-32-32-32H96V160h32c17.67 0 32-14.33 32-32V96h192v32c0 17.67 14.33 32 32 32h32v192z"] +}; +var faVenus = { + prefix: 'fas', + iconName: 'venus', + icon: [288, 512, [], "f221", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80z"] +}; +var faVenusDouble = { + prefix: 'fas', + iconName: 'venus-double', + icon: [512, 512, [], "f226", "M288 176c0-79.5-64.5-144-144-144S0 96.5 0 176c0 68.5 47.9 125.9 112 140.4V368H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.5 112-71.9 112-140.4zm-224 0c0-44.1 35.9-80 80-80s80 35.9 80 80-35.9 80-80 80-80-35.9-80-80zm336 140.4V368h36c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12h-36v36c0 6.6-5.4 12-12 12h-40c-6.6 0-12-5.4-12-12v-36h-36c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h36v-51.6c-21.2-4.8-40.6-14.3-57.2-27.3 14-16.7 25-36 32.1-57.1 14.5 14.8 34.7 24 57.1 24 44.1 0 80-35.9 80-80s-35.9-80-80-80c-22.3 0-42.6 9.2-57.1 24-7.1-21.1-18-40.4-32.1-57.1C303.4 43.6 334.3 32 368 32c79.5 0 144 64.5 144 144 0 68.5-47.9 125.9-112 140.4z"] +}; +var faVenusMars = { + prefix: 'fas', + iconName: 'venus-mars', + icon: [576, 512, [], "f228", "M564 0h-79c-10.7 0-16 12.9-8.5 20.5l16.9 16.9-48.7 48.7C422.5 72.1 396.2 64 368 64c-33.7 0-64.6 11.6-89.2 30.9 14 16.7 25 36 32.1 57.1 14.5-14.8 34.7-24 57.1-24 44.1 0 80 35.9 80 80s-35.9 80-80 80c-22.3 0-42.6-9.2-57.1-24-7.1 21.1-18 40.4-32.1 57.1 24.5 19.4 55.5 30.9 89.2 30.9 79.5 0 144-64.5 144-144 0-28.2-8.1-54.5-22.1-76.7l48.7-48.7 16.9 16.9c2.4 2.4 5.4 3.5 8.4 3.5 6.2 0 12.1-4.8 12.1-12V12c0-6.6-5.4-12-12-12zM144 64C64.5 64 0 128.5 0 208c0 68.5 47.9 125.9 112 140.4V400H76c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h36v36c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12v-36h36c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-36v-51.6c64.1-14.6 112-71.9 112-140.4 0-79.5-64.5-144-144-144zm0 224c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z"] +}; +var faVest = { + prefix: 'fas', + iconName: 'vest', + icon: [448, 512, [], "e085", "M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a24.021,24.021,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A24.021,24.021,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.564A151.518,151.518,0,0,0,224,86.234a151.55,151.55,0,0,0,73.812-19.672L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM131.312,371.312l-48,48a16,16,0,0,1-22.624-22.624l48-48a16,16,0,0,1,22.624,22.624Zm256,48a15.992,15.992,0,0,1-22.624,0l-48-48a16,16,0,0,1,22.624-22.624l48,48A15.993,15.993,0,0,1,387.312,419.312Z"] +}; +var faVestPatches = { + prefix: 'fas', + iconName: 'vest-patches', + icon: [448, 512, [], "e086", "M437.252,239.877,384,160V32A32,32,0,0,0,352,0H320a23.982,23.982,0,0,0-13.312,4.031l-25,16.672a103.794,103.794,0,0,1-115.376,0l-25-16.672A23.982,23.982,0,0,0,128,0H96A32,32,0,0,0,64,32V160L10.748,239.877A64,64,0,0,0,0,275.377V480a32,32,0,0,0,32,32H192V288a31.987,31.987,0,0,1,1.643-10.119L207.135,237.4,150.188,66.561A151.579,151.579,0,0,0,224,86.234a151.565,151.565,0,0,0,73.811-19.668L224,288V512H416a32,32,0,0,0,32-32V275.377A64,64,0,0,0,437.252,239.877ZM63.5,272.484a12.01,12.01,0,0,1,17-16.968l15.5,15.5,15.5-15.5a12.01,12.01,0,0,1,17,16.968L112.984,288,128.5,303.516a12.01,12.01,0,0,1-17,16.968L96,304.984l-15.5,15.5a12.01,12.01,0,0,1-17-16.968L79.016,288ZM96,456a40,40,0,1,1,40-40A40,40,0,0,1,96,456ZM359.227,335.785,310.7,336a6.671,6.671,0,0,1-6.7-6.7l.215-48.574A24.987,24.987,0,0,1,331.43,256.1c12.789,1.162,22.129,12.619,22.056,25.419l-.037,5.057,5.051-.037c12.826-.035,24.236,9.275,25.4,22.076A24.948,24.948,0,0,1,359.227,335.785Z"] +}; +var faVial = { + prefix: 'fas', + iconName: 'vial', + icon: [480, 512, [], "f492", "M477.7 186.1L309.5 18.3c-3.1-3.1-8.2-3.1-11.3 0l-34 33.9c-3.1 3.1-3.1 8.2 0 11.3l11.2 11.1L33 316.5c-38.8 38.7-45.1 102-9.4 143.5 20.6 24 49.5 36 78.4 35.9 26.4 0 52.8-10 72.9-30.1l246.3-245.7 11.2 11.1c3.1 3.1 8.2 3.1 11.3 0l34-33.9c3.1-3 3.1-8.1 0-11.2zM318 256H161l148-147.7 78.5 78.3L318 256z"] +}; +var faVials = { + prefix: 'fas', + iconName: 'vials', + icon: [640, 512, [], "f493", "M72 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H72c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64zm480 384H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM360 64h24v240c0 44.1 35.9 80 80 80s80-35.9 80-80V64h24c4.4 0 8-3.6 8-8V8c0-4.4-3.6-8-8-8H360c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8zm72 0h64v96h-64V64z"] +}; +var faVideo = { + prefix: 'fas', + iconName: 'video', + icon: [576, 512, [], "f03d", "M336.2 64H47.8C21.4 64 0 85.4 0 111.8v288.4C0 426.6 21.4 448 47.8 448h288.4c26.4 0 47.8-21.4 47.8-47.8V111.8c0-26.4-21.4-47.8-47.8-47.8zm189.4 37.7L416 177.3v157.4l109.6 75.5c21.2 14.6 50.4-.3 50.4-25.8V127.5c0-25.4-29.1-40.4-50.4-25.8z"] +}; +var faVideoSlash = { + prefix: 'fas', + iconName: 'video-slash', + icon: [640, 512, [], "f4e2", "M633.8 458.1l-55-42.5c15.4-1.4 29.2-13.7 29.2-31.1v-257c0-25.5-29.1-40.4-50.4-25.8L448 177.3v137.2l-32-24.7v-178c0-26.4-21.4-47.8-47.8-47.8H123.9L45.5 3.4C38.5-2 28.5-.8 23 6.2L3.4 31.4c-5.4 7-4.2 17 2.8 22.4L42.7 82 416 370.6l178.5 138c7 5.4 17 4.2 22.5-2.8l19.6-25.3c5.5-6.9 4.2-17-2.8-22.4zM32 400.2c0 26.4 21.4 47.8 47.8 47.8h288.4c11.2 0 21.4-4 29.6-10.5L32 154.7v245.5z"] +}; +var faVihara = { + prefix: 'fas', + iconName: 'vihara', + icon: [640, 512, [], "f6a7", "M632.88 400.71L544 352v-64l55.16-17.69c11.79-5.9 11.79-22.72 0-28.62L480 192v-64l27.31-16.3c7.72-7.72 5.61-20.74-4.16-25.62L320 0 136.85 86.07c-9.77 4.88-11.88 17.9-4.16 25.62L160 128v64L40.84 241.69c-11.79 5.9-11.79 22.72 0 28.62L96 288v64L7.12 400.71c-5.42 3.62-7.7 9.63-7 15.29.62 5.01 3.57 9.75 8.72 12.33L64 448v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48h160v48c0 8.84 7.16 16 16 16h32c8.84 0 16-7.16 16-16v-48l55.15-19.67c5.16-2.58 8.1-7.32 8.72-12.33.71-5.67-1.57-11.68-6.99-15.29zM224 128h192v64H224v-64zm-64 224v-64h320v64H160z"] +}; +var faVirus = { + prefix: 'fas', + iconName: 'virus', + icon: [512, 512, [], "e074", "M483.55,227.55H462c-50.68,0-76.07-61.27-40.23-97.11L437,115.19A28.44,28.44,0,0,0,396.8,75L381.56,90.22c-35.84,35.83-97.11,10.45-97.11-40.23V28.44a28.45,28.45,0,0,0-56.9,0V50c0,50.68-61.27,76.06-97.11,40.23L115.2,75A28.44,28.44,0,0,0,75,115.19l15.25,15.25c35.84,35.84,10.45,97.11-40.23,97.11H28.45a28.45,28.45,0,1,0,0,56.89H50c50.68,0,76.07,61.28,40.23,97.12L75,396.8A28.45,28.45,0,0,0,115.2,437l15.24-15.25c35.84-35.84,97.11-10.45,97.11,40.23v21.54a28.45,28.45,0,0,0,56.9,0V462c0-50.68,61.27-76.07,97.11-40.23L396.8,437A28.45,28.45,0,0,0,437,396.8l-15.25-15.24c-35.84-35.84-10.45-97.12,40.23-97.12h21.54a28.45,28.45,0,1,0,0-56.89ZM224,272a48,48,0,1,1,48-48A48,48,0,0,1,224,272Zm80,56a24,24,0,1,1,24-24A24,24,0,0,1,304,328Z"] +}; +var faVirusSlash = { + prefix: 'fas', + iconName: 'virus-slash', + icon: [640, 512, [], "e075", "M114,227.6H92.4C76.7,227.6,64,240.3,64,256s12.7,28.4,28.4,28.4H114c50.7,0,76.1,61.3,40.2,97.1L139,396.8 c-11.5,10.7-12.2,28.7-1.6,40.2s28.7,12.2,40.2,1.6c0.5-0.5,1.1-1,1.6-1.6l15.2-15.2c35.8-35.8,97.1-10.5,97.1,40.2v21.5 c0,15.7,12.8,28.4,28.5,28.4c15.7,0,28.4-12.7,28.4-28.4V462c0-26.6,17-45.9,38.2-53.4l-244.5-189 C133.7,224.7,123.9,227.5,114,227.6z M617,505.8l19.6-25.3c5.4-7,4.2-17-2.8-22.5L470.6,332c4.2-25.4,24.9-47.5,55.4-47.5h21.5 c15.7,0,28.4-12.7,28.4-28.4s-12.7-28.4-28.4-28.4H526c-50.7,0-76.1-61.3-40.2-97.1l15.2-15.3c10.7-11.5,10-29.5-1.6-40.2 c-10.9-10.1-27.7-10.1-38.6,0l-15.2,15.2c-35.8,35.8-97.1,10.5-97.1-40.2V28.5C348.4,12.7,335.7,0,320,0 c-15.7,0-28.4,12.7-28.4,28.4V50c0,50.7-61.3,76.1-97.1,40.2L179.2,75c-11.1-11.1-29.4-10.6-40.5,0.5L45.5,3.4 c-7-5.4-17-4.2-22.5,2.8L3.4,31.5c-5.4,7-4.2,17,2.8,22.5l588.4,454.7C601.5,514.1,611.6,512.8,617,505.8z M335.4,227.5l-62.9-48.6 c4.9-1.8,10.2-2.8,15.4-2.9c26.5,0,48,21.5,48,48C336,225.2,335.5,226.3,335.4,227.5z"] +}; +var faViruses = { + prefix: 'fas', + iconName: 'viruses', + icon: [640, 512, [], "e076", "M624,352H611.88c-28.51,0-42.79-34.47-22.63-54.63l8.58-8.57a16,16,0,1,0-22.63-22.63l-8.57,8.58C546.47,294.91,512,280.63,512,252.12V240a16,16,0,0,0-32,0v12.12c0,28.51-34.47,42.79-54.63,22.63l-8.57-8.58a16,16,0,0,0-22.63,22.63l8.58,8.57c20.16,20.16,5.88,54.63-22.63,54.63H368a16,16,0,0,0,0,32h12.12c28.51,0,42.79,34.47,22.63,54.63l-8.58,8.57a16,16,0,1,0,22.63,22.63l8.57-8.58c20.16-20.16,54.63-5.88,54.63,22.63V496a16,16,0,0,0,32,0V483.88c0-28.51,34.47-42.79,54.63-22.63l8.57,8.58a16,16,0,1,0,22.63-22.63l-8.58-8.57C569.09,418.47,583.37,384,611.88,384H624a16,16,0,0,0,0-32ZM480,384a32,32,0,1,1,32-32A32,32,0,0,1,480,384ZM346.51,213.33h16.16a21.33,21.33,0,0,0,0-42.66H346.51c-38,0-57.05-46-30.17-72.84l11.43-11.44A21.33,21.33,0,0,0,297.6,56.23L286.17,67.66c-26.88,26.88-72.84,7.85-72.84-30.17V21.33a21.33,21.33,0,0,0-42.66,0V37.49c0,38-46,57.05-72.84,30.17L86.4,56.23A21.33,21.33,0,0,0,56.23,86.39L67.66,97.83c26.88,26.88,7.85,72.84-30.17,72.84H21.33a21.33,21.33,0,0,0,0,42.66H37.49c38,0,57.05,46,30.17,72.84L56.23,297.6A21.33,21.33,0,1,0,86.4,327.77l11.43-11.43c26.88-26.88,72.84-7.85,72.84,30.17v16.16a21.33,21.33,0,0,0,42.66,0V346.51c0-38,46-57.05,72.84-30.17l11.43,11.43a21.33,21.33,0,0,0,30.17-30.17l-11.43-11.43C289.46,259.29,308.49,213.33,346.51,213.33ZM160,192a32,32,0,1,1,32-32A32,32,0,0,1,160,192Zm80,32a16,16,0,1,1,16-16A16,16,0,0,1,240,224Z"] +}; +var faVoicemail = { + prefix: 'fas', + iconName: 'voicemail', + icon: [640, 512, [], "f897", "M496 128a144 144 0 0 0-119.74 224H263.74A144 144 0 1 0 144 416h352a144 144 0 0 0 0-288zM64 272a80 80 0 1 1 80 80 80 80 0 0 1-80-80zm432 80a80 80 0 1 1 80-80 80 80 0 0 1-80 80z"] +}; +var faVolleyballBall = { + prefix: 'fas', + iconName: 'volleyball-ball', + icon: [512, 512, [], "f45f", "M231.39 243.48a285.56 285.56 0 0 0-22.7-105.7c-90.8 42.4-157.5 122.4-180.3 216.8a249 249 0 0 0 56.9 81.1 333.87 333.87 0 0 1 146.1-192.2zm-36.9-134.4a284.23 284.23 0 0 0-57.4-70.7c-91 49.8-144.8 152.9-125 262.2 33.4-83.1 98.4-152 182.4-191.5zm187.6 165.1c8.6-99.8-27.3-197.5-97.5-264.4-14.7-1.7-51.6-5.5-98.9 8.5A333.87 333.87 0 0 1 279.19 241a285 285 0 0 0 102.9 33.18zm-124.7 9.5a286.33 286.33 0 0 0-80.2 72.6c82 57.3 184.5 75.1 277.5 47.8a247.15 247.15 0 0 0 42.2-89.9 336.1 336.1 0 0 1-80.9 10.4c-54.6-.1-108.9-14.1-158.6-40.9zm-98.3 99.7c-15.2 26-25.7 54.4-32.1 84.2a247.07 247.07 0 0 0 289-22.1c-112.9 16.1-203.3-24.8-256.9-62.1zm180.3-360.6c55.3 70.4 82.5 161.2 74.6 253.6a286.59 286.59 0 0 0 89.7-14.2c0-2 .3-4 .3-6 0-107.8-68.7-199.1-164.6-233.4z"] +}; +var faVolumeDown = { + prefix: 'fas', + iconName: 'volume-down', + icon: [384, 512, [], "f027", "M215.03 72.04L126.06 161H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V89.02c0-21.47-25.96-31.98-40.97-16.98zm123.2 108.08c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 229.28 336 242.62 336 257c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.87z"] +}; +var faVolumeMute = { + prefix: 'fas', + iconName: 'volume-mute', + icon: [512, 512, [], "f6a9", "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zM461.64 256l45.64-45.64c6.3-6.3 6.3-16.52 0-22.82l-22.82-22.82c-6.3-6.3-16.52-6.3-22.82 0L416 210.36l-45.64-45.64c-6.3-6.3-16.52-6.3-22.82 0l-22.82 22.82c-6.3 6.3-6.3 16.52 0 22.82L370.36 256l-45.63 45.63c-6.3 6.3-6.3 16.52 0 22.82l22.82 22.82c6.3 6.3 16.52 6.3 22.82 0L416 301.64l45.64 45.64c6.3 6.3 16.52 6.3 22.82 0l22.82-22.82c6.3-6.3 6.3-16.52 0-22.82L461.64 256z"] +}; +var faVolumeOff = { + prefix: 'fas', + iconName: 'volume-off', + icon: [256, 512, [], "f026", "M215 71l-89 89H24a24 24 0 0 0-24 24v144a24 24 0 0 0 24 24h102.06L215 441c15 15 41 4.47 41-17V88c0-21.47-26-32-41-17z"] +}; +var faVolumeUp = { + prefix: 'fas', + iconName: 'volume-up', + icon: [576, 512, [], "f028", "M215.03 71.05L126.06 160H24c-13.26 0-24 10.74-24 24v144c0 13.25 10.74 24 24 24h102.06l88.97 88.95c15.03 15.03 40.97 4.47 40.97-16.97V88.02c0-21.46-25.96-31.98-40.97-16.97zm233.32-51.08c-11.17-7.33-26.18-4.24-33.51 6.95-7.34 11.17-4.22 26.18 6.95 33.51 66.27 43.49 105.82 116.6 105.82 195.58 0 78.98-39.55 152.09-105.82 195.58-11.17 7.32-14.29 22.34-6.95 33.5 7.04 10.71 21.93 14.56 33.51 6.95C528.27 439.58 576 351.33 576 256S528.27 72.43 448.35 19.97zM480 256c0-63.53-32.06-121.94-85.77-156.24-11.19-7.14-26.03-3.82-33.12 7.46s-3.78 26.21 7.41 33.36C408.27 165.97 432 209.11 432 256s-23.73 90.03-63.48 115.42c-11.19 7.14-14.5 22.07-7.41 33.36 6.51 10.36 21.12 15.14 33.12 7.46C447.94 377.94 480 319.54 480 256zm-141.77-76.87c-11.58-6.33-26.19-2.16-32.61 9.45-6.39 11.61-2.16 26.2 9.45 32.61C327.98 228.28 336 241.63 336 256c0 14.38-8.02 27.72-20.92 34.81-11.61 6.41-15.84 21-9.45 32.61 6.43 11.66 21.05 15.8 32.61 9.45 28.23-15.55 45.77-45 45.77-76.88s-17.54-61.32-45.78-76.86z"] +}; +var faVoteYea = { + prefix: 'fas', + iconName: 'vote-yea', + icon: [640, 512, [], "f772", "M608 320h-64v64h22.4c5.3 0 9.6 3.6 9.6 8v16c0 4.4-4.3 8-9.6 8H73.6c-5.3 0-9.6-3.6-9.6-8v-16c0-4.4 4.3-8 9.6-8H96v-64H32c-17.7 0-32 14.3-32 32v96c0 17.7 14.3 32 32 32h576c17.7 0 32-14.3 32-32v-96c0-17.7-14.3-32-32-32zm-96 64V64.3c0-17.9-14.5-32.3-32.3-32.3H160.4C142.5 32 128 46.5 128 64.3V384h384zM211.2 202l25.5-25.3c4.2-4.2 11-4.2 15.2.1l41.3 41.6 95.2-94.4c4.2-4.2 11-4.2 15.2.1l25.3 25.5c4.2 4.2 4.2 11-.1 15.2L300.5 292c-4.2 4.2-11 4.2-15.2-.1l-74.1-74.7c-4.3-4.2-4.2-11 0-15.2z"] +}; +var faVrCardboard = { + prefix: 'fas', + iconName: 'vr-cardboard', + icon: [640, 512, [], "f729", "M608 64H32C14.33 64 0 78.33 0 96v320c0 17.67 14.33 32 32 32h160.22c25.19 0 48.03-14.77 58.36-37.74l27.74-61.64C286.21 331.08 302.35 320 320 320s33.79 11.08 41.68 28.62l27.74 61.64C399.75 433.23 422.6 448 447.78 448H608c17.67 0 32-14.33 32-32V96c0-17.67-14.33-32-32-32zM160 304c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64zm320 0c-35.35 0-64-28.65-64-64s28.65-64 64-64 64 28.65 64 64-28.65 64-64 64z"] +}; +var faWalking = { + prefix: 'fas', + iconName: 'walking', + icon: [320, 512, [], "f554", "M208 96c26.5 0 48-21.5 48-48S234.5 0 208 0s-48 21.5-48 48 21.5 48 48 48zm94.5 149.1l-23.3-11.8-9.7-29.4c-14.7-44.6-55.7-75.8-102.2-75.9-36-.1-55.9 10.1-93.3 25.2-21.6 8.7-39.3 25.2-49.7 46.2L17.6 213c-7.8 15.8-1.5 35 14.2 42.9 15.6 7.9 34.6 1.5 42.5-14.3L81 228c3.5-7 9.3-12.5 16.5-15.4l26.8-10.8-15.2 60.7c-5.2 20.8.4 42.9 14.9 58.8l59.9 65.4c7.2 7.9 12.3 17.4 14.9 27.7l18.3 73.3c4.3 17.1 21.7 27.6 38.8 23.3 17.1-4.3 27.6-21.7 23.3-38.8l-22.2-89c-2.6-10.3-7.7-19.9-14.9-27.7l-45.5-49.7 17.2-68.7 5.5 16.5c5.3 16.1 16.7 29.4 31.7 37l23.3 11.8c15.6 7.9 34.6 1.5 42.5-14.3 7.7-15.7 1.4-35.1-14.3-43zM73.6 385.8c-3.2 8.1-8 15.4-14.2 21.5l-50 50.1c-12.5 12.5-12.5 32.8 0 45.3s32.7 12.5 45.2 0l59.4-59.4c6.1-6.1 10.9-13.4 14.2-21.5l13.5-33.8c-55.3-60.3-38.7-41.8-47.4-53.7l-20.7 51.5z"] +}; +var faWallet = { + prefix: 'fas', + iconName: 'wallet', + icon: [512, 512, [], "f555", "M461.2 128H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h384c8.84 0 16-7.16 16-16 0-26.51-21.49-48-48-48H64C28.65 32 0 60.65 0 96v320c0 35.35 28.65 64 64 64h397.2c28.02 0 50.8-21.53 50.8-48V176c0-26.47-22.78-48-50.8-48zM416 336c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32z"] +}; +var faWarehouse = { + prefix: 'fas', + iconName: 'warehouse', + icon: [640, 512, [], "f494", "M504 352H136.4c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0 96H136.1c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm0-192H136.6c-4.4 0-8 3.6-8 8l-.1 48c0 4.4 3.6 8 8 8H504c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zm106.5-139L338.4 3.7a48.15 48.15 0 0 0-36.9 0L29.5 117C11.7 124.5 0 141.9 0 161.3V504c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V256c0-17.6 14.6-32 32.6-32h382.8c18 0 32.6 14.4 32.6 32v248c0 4.4 3.6 8 8 8h80c4.4 0 8-3.6 8-8V161.3c0-19.4-11.7-36.8-29.5-44.3z"] +}; +var faWater = { + prefix: 'fas', + iconName: 'water', + icon: [576, 512, [], "f773", "M562.1 383.9c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144c-21.5-2.4-42.1-10.5-57.9-22.9-14.1-11.1-34.2-11.3-48.2 0-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3zm0-144C540.6 93.4 520 85.4 504.2 73 490.1 61.9 470 61.7 456 73c-37.9 30.4-107.2 30.4-145.7-1.5-13.5-11.2-33-9.1-46.7 1.8-38 30.1-106.9 30-145.2-1.7-13.5-11.2-33.3-8.9-47.1 2-15.5 12.2-36 20.1-57.7 22.4-7.9.8-13.6 7.8-13.6 15.7v32.2c0 9.1 7.6 16.8 16.7 16 28.8-2.5 56.1-11.4 79.4-25.9 56.5 34.6 137 34.1 192 0 56.5 34.6 137 34.1 192 0 23.3 14.2 50.9 23.3 79.1 25.8 9.1.8 16.7-6.9 16.7-16v-31.6c.1-8-5.7-15.4-13.8-16.3z"] +}; +var faWaveSquare = { + prefix: 'fas', + iconName: 'wave-square', + icon: [640, 512, [], "f83e", "M476 480H324a36 36 0 0 1-36-36V96h-96v156a36 36 0 0 1-36 36H16a16 16 0 0 1-16-16v-32a16 16 0 0 1 16-16h112V68a36 36 0 0 1 36-36h152a36 36 0 0 1 36 36v348h96V260a36 36 0 0 1 36-36h140a16 16 0 0 1 16 16v32a16 16 0 0 1-16 16H512v156a36 36 0 0 1-36 36z"] +}; +var faWeight = { + prefix: 'fas', + iconName: 'weight', + icon: [512, 512, [], "f496", "M448 64h-25.98C438.44 92.28 448 125.01 448 160c0 105.87-86.13 192-192 192S64 265.87 64 160c0-34.99 9.56-67.72 25.98-96H64C28.71 64 0 92.71 0 128v320c0 35.29 28.71 64 64 64h384c35.29 0 64-28.71 64-64V128c0-35.29-28.71-64-64-64zM256 320c88.37 0 160-71.63 160-160S344.37 0 256 0 96 71.63 96 160s71.63 160 160 160zm-.3-151.94l33.58-78.36c3.5-8.17 12.94-11.92 21.03-8.41 8.12 3.48 11.88 12.89 8.41 21l-33.67 78.55C291.73 188 296 197.45 296 208c0 22.09-17.91 40-40 40s-40-17.91-40-40c0-21.98 17.76-39.77 39.7-39.94z"] +}; +var faWeightHanging = { + prefix: 'fas', + iconName: 'weight-hanging', + icon: [512, 512, [], "f5cd", "M510.28 445.86l-73.03-292.13c-3.8-15.19-16.44-25.72-30.87-25.72h-60.25c3.57-10.05 5.88-20.72 5.88-32 0-53.02-42.98-96-96-96s-96 42.98-96 96c0 11.28 2.3 21.95 5.88 32h-60.25c-14.43 0-27.08 10.54-30.87 25.72L1.72 445.86C-6.61 479.17 16.38 512 48.03 512h415.95c31.64 0 54.63-32.83 46.3-66.14zM256 128c-17.64 0-32-14.36-32-32s14.36-32 32-32 32 14.36 32 32-14.36 32-32 32z"] +}; +var faWheelchair = { + prefix: 'fas', + iconName: 'wheelchair', + icon: [512, 512, [], "f193", "M496.101 385.669l14.227 28.663c3.929 7.915.697 17.516-7.218 21.445l-65.465 32.886c-16.049 7.967-35.556 1.194-43.189-15.055L331.679 320H192c-15.925 0-29.426-11.71-31.679-27.475C126.433 55.308 128.38 70.044 128 64c0-36.358 30.318-65.635 67.052-63.929 33.271 1.545 60.048 28.905 60.925 62.201.868 32.933-23.152 60.423-54.608 65.039l4.67 32.69H336c8.837 0 16 7.163 16 16v32c0 8.837-7.163 16-16 16H215.182l4.572 32H352a32 32 0 0 1 28.962 18.392L438.477 396.8l36.178-18.349c7.915-3.929 17.517-.697 21.446 7.218zM311.358 352h-24.506c-7.788 54.204-54.528 96-110.852 96-61.757 0-112-50.243-112-112 0-41.505 22.694-77.809 56.324-97.156-3.712-25.965-6.844-47.86-9.488-66.333C45.956 198.464 0 261.963 0 336c0 97.047 78.953 176 176 176 71.87 0 133.806-43.308 161.11-105.192L311.358 352z"] +}; +var faWifi = { + prefix: 'fas', + iconName: 'wifi', + icon: [640, 512, [], "f1eb", "M634.91 154.88C457.74-8.99 182.19-8.93 5.09 154.88c-6.66 6.16-6.79 16.59-.35 22.98l34.24 33.97c6.14 6.1 16.02 6.23 22.4.38 145.92-133.68 371.3-133.71 517.25 0 6.38 5.85 16.26 5.71 22.4-.38l34.24-33.97c6.43-6.39 6.3-16.82-.36-22.98zM320 352c-35.35 0-64 28.65-64 64s28.65 64 64 64 64-28.65 64-64-28.65-64-64-64zm202.67-83.59c-115.26-101.93-290.21-101.82-405.34 0-6.9 6.1-7.12 16.69-.57 23.15l34.44 33.99c6 5.92 15.66 6.32 22.05.8 83.95-72.57 209.74-72.41 293.49 0 6.39 5.52 16.05 5.13 22.05-.8l34.44-33.99c6.56-6.46 6.33-17.06-.56-23.15z"] +}; +var faWind = { + prefix: 'fas', + iconName: 'wind', + icon: [512, 512, [], "f72e", "M156.7 256H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h142.2c15.9 0 30.8 10.9 33.4 26.6 3.3 20-12.1 37.4-31.6 37.4-14.1 0-26.1-9.2-30.4-21.9-2.1-6.3-8.6-10.1-15.2-10.1H81.6c-9.8 0-17.7 8.8-15.9 18.4 8.6 44.1 47.6 77.6 94.2 77.6 57.1 0 102.7-50.1 95.2-108.6C249 291 205.4 256 156.7 256zM16 224h336c59.7 0 106.8-54.8 93.8-116.7-7.6-36.2-36.9-65.5-73.1-73.1-55.4-11.6-105.1 24.9-114.9 75.5-1.9 9.6 6.1 18.3 15.8 18.3h32.8c6.7 0 13.1-3.8 15.2-10.1C325.9 105.2 337.9 96 352 96c19.4 0 34.9 17.4 31.6 37.4-2.6 15.7-17.4 26.6-33.4 26.6H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16zm384 32H243.7c19.3 16.6 33.2 38.8 39.8 64H400c26.5 0 48 21.5 48 48s-21.5 48-48 48c-17.9 0-33.3-9.9-41.6-24.4-2.9-5-8.7-7.6-14.5-7.6h-33.8c-10.9 0-19 10.8-15.3 21.1 17.8 50.6 70.5 84.8 129.4 72.3 41.2-8.7 75.1-41.6 84.7-82.7C526 321.5 470.5 256 400 256z"] +}; +var faWindowClose = { + prefix: 'fas', + iconName: 'window-close', + icon: [512, 512, [], "f410", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-83.6 290.5c4.8 4.8 4.8 12.6 0 17.4l-40.5 40.5c-4.8 4.8-12.6 4.8-17.4 0L256 313.3l-66.5 67.1c-4.8 4.8-12.6 4.8-17.4 0l-40.5-40.5c-4.8-4.8-4.8-12.6 0-17.4l67.1-66.5-67.1-66.5c-4.8-4.8-4.8-12.6 0-17.4l40.5-40.5c4.8-4.8 12.6-4.8 17.4 0l66.5 67.1 66.5-67.1c4.8-4.8 12.6-4.8 17.4 0l40.5 40.5c4.8 4.8 4.8 12.6 0 17.4L313.3 256l67.1 66.5z"] +}; +var faWindowMaximize = { + prefix: 'fas', + iconName: 'window-maximize', + icon: [512, 512, [], "f2d0", "M464 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zm-16 160H64v-84c0-6.6 5.4-12 12-12h360c6.6 0 12 5.4 12 12v84z"] +}; +var faWindowMinimize = { + prefix: 'fas', + iconName: 'window-minimize', + icon: [512, 512, [], "f2d1", "M464 352H48c-26.5 0-48 21.5-48 48v32c0 26.5 21.5 48 48 48h416c26.5 0 48-21.5 48-48v-32c0-26.5-21.5-48-48-48z"] +}; +var faWindowRestore = { + prefix: 'fas', + iconName: 'window-restore', + icon: [512, 512, [], "f2d2", "M512 48v288c0 26.5-21.5 48-48 48h-48V176c0-44.1-35.9-80-80-80H128V48c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zM384 176v288c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V176c0-26.5 21.5-48 48-48h288c26.5 0 48 21.5 48 48zm-68 28c0-6.6-5.4-12-12-12H76c-6.6 0-12 5.4-12 12v52h252v-52z"] +}; +var faWineBottle = { + prefix: 'fas', + iconName: 'wine-bottle', + icon: [512, 512, [], "f72f", "M507.31 72.57L439.43 4.69c-6.25-6.25-16.38-6.25-22.63 0l-22.63 22.63c-6.25 6.25-6.25 16.38 0 22.63l-76.67 76.67c-46.58-19.7-102.4-10.73-140.37 27.23L18.75 312.23c-24.99 24.99-24.99 65.52 0 90.51l90.51 90.51c24.99 24.99 65.52 24.99 90.51 0l158.39-158.39c37.96-37.96 46.93-93.79 27.23-140.37l76.67-76.67c6.25 6.25 16.38 6.25 22.63 0l22.63-22.63c6.24-6.24 6.24-16.37-.01-22.62zM179.22 423.29l-90.51-90.51 122.04-122.04 90.51 90.51-122.04 122.04z"] +}; +var faWineGlass = { + prefix: 'fas', + iconName: 'wine-glass', + icon: [288, 512, [], "f4e3", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40z"] +}; +var faWineGlassAlt = { + prefix: 'fas', + iconName: 'wine-glass-alt', + icon: [288, 512, [], "f5ce", "M216 464h-40V346.81c68.47-15.89 118.05-79.91 111.4-154.16l-15.95-178.1C270.71 6.31 263.9 0 255.74 0H32.26c-8.15 0-14.97 6.31-15.7 14.55L.6 192.66C-6.05 266.91 43.53 330.93 112 346.82V464H72c-22.09 0-40 17.91-40 40 0 4.42 3.58 8 8 8h208c4.42 0 8-3.58 8-8 0-22.09-17.91-40-40-40zM61.75 48h164.5l7.17 80H54.58l7.17-80z"] +}; +var faWonSign = { + prefix: 'fas', + iconName: 'won-sign', + icon: [576, 512, [], "f159", "M564 192c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-48l18.6-80.6c1.7-7.5-4-14.7-11.7-14.7h-46.1c-5.7 0-10.6 4-11.7 9.5L450.7 128H340.8l-19.7-86c-1.3-5.5-6.1-9.3-11.7-9.3h-44c-5.6 0-10.4 3.8-11.7 9.3l-20 86H125l-17.5-85.7c-1.1-5.6-6.1-9.6-11.8-9.6H53.6c-7.7 0-13.4 7.1-11.7 14.6L60 128H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h62.3l7.2 32H12c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h83.9l40.9 182.6c1.2 5.5 6.1 9.4 11.7 9.4h56.8c5.6 0 10.4-3.9 11.7-9.3L259.3 288h55.1l42.4 182.7c1.3 5.4 6.1 9.3 11.7 9.3h56.8c5.6 0 10.4-3.9 11.7-9.3L479.1 288H564c6.6 0 12-5.4 12-12v-40c0-6.6-5.4-12-12-12h-70.1l7.4-32zM183.8 342c-6.2 25.8-6.8 47.2-7.3 47.2h-1.1s-1.7-22-6.8-47.2l-11-54h38.8zm27.5-118h-66.8l-6.5-32h80.8zm62.9 0l2-8.6c1.9-8 3.5-16 4.8-23.4h11.8c1.3 7.4 2.9 15.4 4.8 23.4l2 8.6zm130.9 118c-5.1 25.2-6.8 47.2-6.8 47.2h-1.1c-.6 0-1.1-21.4-7.3-47.2l-12.4-54h39.1zm25.2-118h-67.4l-7.3-32h81.6z"] +}; +var faWrench = { + prefix: 'fas', + iconName: 'wrench', + icon: [512, 512, [], "f0ad", "M507.73 109.1c-2.24-9.03-13.54-12.09-20.12-5.51l-74.36 74.36-67.88-11.31-11.31-67.88 74.36-74.36c6.62-6.62 3.43-17.9-5.66-20.16-47.38-11.74-99.55.91-136.58 37.93-39.64 39.64-50.55 97.1-34.05 147.2L18.74 402.76c-24.99 24.99-24.99 65.51 0 90.5 24.99 24.99 65.51 24.99 90.5 0l213.21-213.21c50.12 16.71 107.47 5.68 147.37-34.22 37.07-37.07 49.7-89.32 37.91-136.73zM64 472c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"] +}; +var faXRay = { + prefix: 'fas', + iconName: 'x-ray', + icon: [640, 512, [], "f497", "M240 384c-8.8 0-16 7.2-16 16s7.2 16 16 16 16-7.2 16-16-7.2-16-16-16zm160 32c8.8 0 16-7.2 16-16s-7.2-16-16-16-16 7.2-16 16 7.2 16 16 16zM624 0H16C7.2 0 0 7.2 0 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16V16c0-8.8-7.2-16-16-16zm0 448h-48V96H64v352H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h608c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zM480 248c0 4.4-3.6 8-8 8H336v32h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h64c26.5 0 48 21.5 48 48s-21.5 48-48 48-48-21.5-48-48v-16h-64v16c0 26.5-21.5 48-48 48s-48-21.5-48-48 21.5-48 48-48h64v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-32H168c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h136v-32H200c-4.4 0-8-3.6-8-8v-16c0-4.4 3.6-8 8-8h104v-24c0-4.4 3.6-8 8-8h16c4.4 0 8 3.6 8 8v24h104c4.4 0 8 3.6 8 8v16c0 4.4-3.6 8-8 8H336v32h136c4.4 0 8 3.6 8 8v16z"] +}; +var faYenSign = { + prefix: 'fas', + iconName: 'yen-sign', + icon: [384, 512, [], "f157", "M351.2 32h-65.3c-4.6 0-8.8 2.6-10.8 6.7l-55.4 113.2c-14.5 34.7-27.1 71.9-27.1 71.9h-1.3s-12.6-37.2-27.1-71.9L108.8 38.7c-2-4.1-6.2-6.7-10.8-6.7H32.8c-9.1 0-14.8 9.7-10.6 17.6L102.3 200H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h88.2l19.8 37.2V320H44c-6.6 0-12 5.4-12 12v32c0 6.6 5.4 12 12 12h108v92c0 6.6 5.4 12 12 12h56c6.6 0 12-5.4 12-12v-92h108c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12H232v-26.8l19.8-37.2H340c6.6 0 12-5.4 12-12v-32c0-6.6-5.4-12-12-12h-58.3l80.1-150.4c4.3-7.9-1.5-17.6-10.6-17.6z"] +}; +var faYinYang = { + prefix: 'fas', + iconName: 'yin-yang', + icon: [496, 512, [], "f6ad", "M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm0 376c-17.67 0-32-14.33-32-32s14.33-32 32-32 32 14.33 32 32-14.33 32-32 32zm0-128c-53.02 0-96 42.98-96 96s42.98 96 96 96c-106.04 0-192-85.96-192-192S141.96 64 248 64c53.02 0 96 42.98 96 96s-42.98 96-96 96zm0-128c-17.67 0-32 14.33-32 32s14.33 32 32 32 32-14.33 32-32-14.33-32-32-32z"] +}; +var _iconsCache = { + faAd: faAd, + faAddressBook: faAddressBook, + faAddressCard: faAddressCard, + faAdjust: faAdjust, + faAirFreshener: faAirFreshener, + faAlignCenter: faAlignCenter, + faAlignJustify: faAlignJustify, + faAlignLeft: faAlignLeft, + faAlignRight: faAlignRight, + faAllergies: faAllergies, + faAmbulance: faAmbulance, + faAmericanSignLanguageInterpreting: faAmericanSignLanguageInterpreting, + faAnchor: faAnchor, + faAngleDoubleDown: faAngleDoubleDown, + faAngleDoubleLeft: faAngleDoubleLeft, + faAngleDoubleRight: faAngleDoubleRight, + faAngleDoubleUp: faAngleDoubleUp, + faAngleDown: faAngleDown, + faAngleLeft: faAngleLeft, + faAngleRight: faAngleRight, + faAngleUp: faAngleUp, + faAngry: faAngry, + faAnkh: faAnkh, + faAppleAlt: faAppleAlt, + faArchive: faArchive, + faArchway: faArchway, + faArrowAltCircleDown: faArrowAltCircleDown, + faArrowAltCircleLeft: faArrowAltCircleLeft, + faArrowAltCircleRight: faArrowAltCircleRight, + faArrowAltCircleUp: faArrowAltCircleUp, + faArrowCircleDown: faArrowCircleDown, + faArrowCircleLeft: faArrowCircleLeft, + faArrowCircleRight: faArrowCircleRight, + faArrowCircleUp: faArrowCircleUp, + faArrowDown: faArrowDown, + faArrowLeft: faArrowLeft, + faArrowRight: faArrowRight, + faArrowUp: faArrowUp, + faArrowsAlt: faArrowsAlt, + faArrowsAltH: faArrowsAltH, + faArrowsAltV: faArrowsAltV, + faAssistiveListeningSystems: faAssistiveListeningSystems, + faAsterisk: faAsterisk, + faAt: faAt, + faAtlas: faAtlas, + faAtom: faAtom, + faAudioDescription: faAudioDescription, + faAward: faAward, + faBaby: faBaby, + faBabyCarriage: faBabyCarriage, + faBackspace: faBackspace, + faBackward: faBackward, + faBacon: faBacon, + faBacteria: faBacteria, + faBacterium: faBacterium, + faBahai: faBahai, + faBalanceScale: faBalanceScale, + faBalanceScaleLeft: faBalanceScaleLeft, + faBalanceScaleRight: faBalanceScaleRight, + faBan: faBan, + faBandAid: faBandAid, + faBarcode: faBarcode, + faBars: faBars, + faBaseballBall: faBaseballBall, + faBasketballBall: faBasketballBall, + faBath: faBath, + faBatteryEmpty: faBatteryEmpty, + faBatteryFull: faBatteryFull, + faBatteryHalf: faBatteryHalf, + faBatteryQuarter: faBatteryQuarter, + faBatteryThreeQuarters: faBatteryThreeQuarters, + faBed: faBed, + faBeer: faBeer, + faBell: faBell, + faBellSlash: faBellSlash, + faBezierCurve: faBezierCurve, + faBible: faBible, + faBicycle: faBicycle, + faBiking: faBiking, + faBinoculars: faBinoculars, + faBiohazard: faBiohazard, + faBirthdayCake: faBirthdayCake, + faBlender: faBlender, + faBlenderPhone: faBlenderPhone, + faBlind: faBlind, + faBlog: faBlog, + faBold: faBold, + faBolt: faBolt, + faBomb: faBomb, + faBone: faBone, + faBong: faBong, + faBook: faBook, + faBookDead: faBookDead, + faBookMedical: faBookMedical, + faBookOpen: faBookOpen, + faBookReader: faBookReader, + faBookmark: faBookmark, + faBorderAll: faBorderAll, + faBorderNone: faBorderNone, + faBorderStyle: faBorderStyle, + faBowlingBall: faBowlingBall, + faBox: faBox, + faBoxOpen: faBoxOpen, + faBoxTissue: faBoxTissue, + faBoxes: faBoxes, + faBraille: faBraille, + faBrain: faBrain, + faBreadSlice: faBreadSlice, + faBriefcase: faBriefcase, + faBriefcaseMedical: faBriefcaseMedical, + faBroadcastTower: faBroadcastTower, + faBroom: faBroom, + faBrush: faBrush, + faBug: faBug, + faBuilding: faBuilding, + faBullhorn: faBullhorn, + faBullseye: faBullseye, + faBurn: faBurn, + faBus: faBus, + faBusAlt: faBusAlt, + faBusinessTime: faBusinessTime, + faCalculator: faCalculator, + faCalendar: faCalendar, + faCalendarAlt: faCalendarAlt, + faCalendarCheck: faCalendarCheck, + faCalendarDay: faCalendarDay, + faCalendarMinus: faCalendarMinus, + faCalendarPlus: faCalendarPlus, + faCalendarTimes: faCalendarTimes, + faCalendarWeek: faCalendarWeek, + faCamera: faCamera, + faCameraRetro: faCameraRetro, + faCampground: faCampground, + faCandyCane: faCandyCane, + faCannabis: faCannabis, + faCapsules: faCapsules, + faCar: faCar, + faCarAlt: faCarAlt, + faCarBattery: faCarBattery, + faCarCrash: faCarCrash, + faCarSide: faCarSide, + faCaravan: faCaravan, + faCaretDown: faCaretDown, + faCaretLeft: faCaretLeft, + faCaretRight: faCaretRight, + faCaretSquareDown: faCaretSquareDown, + faCaretSquareLeft: faCaretSquareLeft, + faCaretSquareRight: faCaretSquareRight, + faCaretSquareUp: faCaretSquareUp, + faCaretUp: faCaretUp, + faCarrot: faCarrot, + faCartArrowDown: faCartArrowDown, + faCartPlus: faCartPlus, + faCashRegister: faCashRegister, + faCat: faCat, + faCertificate: faCertificate, + faChair: faChair, + faChalkboard: faChalkboard, + faChalkboardTeacher: faChalkboardTeacher, + faChargingStation: faChargingStation, + faChartArea: faChartArea, + faChartBar: faChartBar, + faChartLine: faChartLine, + faChartPie: faChartPie, + faCheck: faCheck, + faCheckCircle: faCheckCircle, + faCheckDouble: faCheckDouble, + faCheckSquare: faCheckSquare, + faCheese: faCheese, + faChess: faChess, + faChessBishop: faChessBishop, + faChessBoard: faChessBoard, + faChessKing: faChessKing, + faChessKnight: faChessKnight, + faChessPawn: faChessPawn, + faChessQueen: faChessQueen, + faChessRook: faChessRook, + faChevronCircleDown: faChevronCircleDown, + faChevronCircleLeft: faChevronCircleLeft, + faChevronCircleRight: faChevronCircleRight, + faChevronCircleUp: faChevronCircleUp, + faChevronDown: faChevronDown, + faChevronLeft: faChevronLeft, + faChevronRight: faChevronRight, + faChevronUp: faChevronUp, + faChild: faChild, + faChurch: faChurch, + faCircle: faCircle, + faCircleNotch: faCircleNotch, + faCity: faCity, + faClinicMedical: faClinicMedical, + faClipboard: faClipboard, + faClipboardCheck: faClipboardCheck, + faClipboardList: faClipboardList, + faClock: faClock, + faClone: faClone, + faClosedCaptioning: faClosedCaptioning, + faCloud: faCloud, + faCloudDownloadAlt: faCloudDownloadAlt, + faCloudMeatball: faCloudMeatball, + faCloudMoon: faCloudMoon, + faCloudMoonRain: faCloudMoonRain, + faCloudRain: faCloudRain, + faCloudShowersHeavy: faCloudShowersHeavy, + faCloudSun: faCloudSun, + faCloudSunRain: faCloudSunRain, + faCloudUploadAlt: faCloudUploadAlt, + faCocktail: faCocktail, + faCode: faCode, + faCodeBranch: faCodeBranch, + faCoffee: faCoffee, + faCog: faCog, + faCogs: faCogs, + faCoins: faCoins, + faColumns: faColumns, + faComment: faComment, + faCommentAlt: faCommentAlt, + faCommentDollar: faCommentDollar, + faCommentDots: faCommentDots, + faCommentMedical: faCommentMedical, + faCommentSlash: faCommentSlash, + faComments: faComments, + faCommentsDollar: faCommentsDollar, + faCompactDisc: faCompactDisc, + faCompass: faCompass, + faCompress: faCompress, + faCompressAlt: faCompressAlt, + faCompressArrowsAlt: faCompressArrowsAlt, + faConciergeBell: faConciergeBell, + faCookie: faCookie, + faCookieBite: faCookieBite, + faCopy: faCopy, + faCopyright: faCopyright, + faCouch: faCouch, + faCreditCard: faCreditCard, + faCrop: faCrop, + faCropAlt: faCropAlt, + faCross: faCross, + faCrosshairs: faCrosshairs, + faCrow: faCrow, + faCrown: faCrown, + faCrutch: faCrutch, + faCube: faCube, + faCubes: faCubes, + faCut: faCut, + faDatabase: faDatabase, + faDeaf: faDeaf, + faDemocrat: faDemocrat, + faDesktop: faDesktop, + faDharmachakra: faDharmachakra, + faDiagnoses: faDiagnoses, + faDice: faDice, + faDiceD20: faDiceD20, + faDiceD6: faDiceD6, + faDiceFive: faDiceFive, + faDiceFour: faDiceFour, + faDiceOne: faDiceOne, + faDiceSix: faDiceSix, + faDiceThree: faDiceThree, + faDiceTwo: faDiceTwo, + faDigitalTachograph: faDigitalTachograph, + faDirections: faDirections, + faDisease: faDisease, + faDivide: faDivide, + faDizzy: faDizzy, + faDna: faDna, + faDog: faDog, + faDollarSign: faDollarSign, + faDolly: faDolly, + faDollyFlatbed: faDollyFlatbed, + faDonate: faDonate, + faDoorClosed: faDoorClosed, + faDoorOpen: faDoorOpen, + faDotCircle: faDotCircle, + faDove: faDove, + faDownload: faDownload, + faDraftingCompass: faDraftingCompass, + faDragon: faDragon, + faDrawPolygon: faDrawPolygon, + faDrum: faDrum, + faDrumSteelpan: faDrumSteelpan, + faDrumstickBite: faDrumstickBite, + faDumbbell: faDumbbell, + faDumpster: faDumpster, + faDumpsterFire: faDumpsterFire, + faDungeon: faDungeon, + faEdit: faEdit, + faEgg: faEgg, + faEject: faEject, + faEllipsisH: faEllipsisH, + faEllipsisV: faEllipsisV, + faEnvelope: faEnvelope, + faEnvelopeOpen: faEnvelopeOpen, + faEnvelopeOpenText: faEnvelopeOpenText, + faEnvelopeSquare: faEnvelopeSquare, + faEquals: faEquals, + faEraser: faEraser, + faEthernet: faEthernet, + faEuroSign: faEuroSign, + faExchangeAlt: faExchangeAlt, + faExclamation: faExclamation, + faExclamationCircle: faExclamationCircle, + faExclamationTriangle: faExclamationTriangle, + faExpand: faExpand, + faExpandAlt: faExpandAlt, + faExpandArrowsAlt: faExpandArrowsAlt, + faExternalLinkAlt: faExternalLinkAlt, + faExternalLinkSquareAlt: faExternalLinkSquareAlt, + faEye: faEye, + faEyeDropper: faEyeDropper, + faEyeSlash: faEyeSlash, + faFan: faFan, + faFastBackward: faFastBackward, + faFastForward: faFastForward, + faFaucet: faFaucet, + faFax: faFax, + faFeather: faFeather, + faFeatherAlt: faFeatherAlt, + faFemale: faFemale, + faFighterJet: faFighterJet, + faFile: faFile, + faFileAlt: faFileAlt, + faFileArchive: faFileArchive, + faFileAudio: faFileAudio, + faFileCode: faFileCode, + faFileContract: faFileContract, + faFileCsv: faFileCsv, + faFileDownload: faFileDownload, + faFileExcel: faFileExcel, + faFileExport: faFileExport, + faFileImage: faFileImage, + faFileImport: faFileImport, + faFileInvoice: faFileInvoice, + faFileInvoiceDollar: faFileInvoiceDollar, + faFileMedical: faFileMedical, + faFileMedicalAlt: faFileMedicalAlt, + faFilePdf: faFilePdf, + faFilePowerpoint: faFilePowerpoint, + faFilePrescription: faFilePrescription, + faFileSignature: faFileSignature, + faFileUpload: faFileUpload, + faFileVideo: faFileVideo, + faFileWord: faFileWord, + faFill: faFill, + faFillDrip: faFillDrip, + faFilm: faFilm, + faFilter: faFilter, + faFingerprint: faFingerprint, + faFire: faFire, + faFireAlt: faFireAlt, + faFireExtinguisher: faFireExtinguisher, + faFirstAid: faFirstAid, + faFish: faFish, + faFistRaised: faFistRaised, + faFlag: faFlag, + faFlagCheckered: faFlagCheckered, + faFlagUsa: faFlagUsa, + faFlask: faFlask, + faFlushed: faFlushed, + faFolder: faFolder, + faFolderMinus: faFolderMinus, + faFolderOpen: faFolderOpen, + faFolderPlus: faFolderPlus, + faFont: faFont, + faFontAwesomeLogoFull: faFontAwesomeLogoFull, + faFootballBall: faFootballBall, + faForward: faForward, + faFrog: faFrog, + faFrown: faFrown, + faFrownOpen: faFrownOpen, + faFunnelDollar: faFunnelDollar, + faFutbol: faFutbol, + faGamepad: faGamepad, + faGasPump: faGasPump, + faGavel: faGavel, + faGem: faGem, + faGenderless: faGenderless, + faGhost: faGhost, + faGift: faGift, + faGifts: faGifts, + faGlassCheers: faGlassCheers, + faGlassMartini: faGlassMartini, + faGlassMartiniAlt: faGlassMartiniAlt, + faGlassWhiskey: faGlassWhiskey, + faGlasses: faGlasses, + faGlobe: faGlobe, + faGlobeAfrica: faGlobeAfrica, + faGlobeAmericas: faGlobeAmericas, + faGlobeAsia: faGlobeAsia, + faGlobeEurope: faGlobeEurope, + faGolfBall: faGolfBall, + faGopuram: faGopuram, + faGraduationCap: faGraduationCap, + faGreaterThan: faGreaterThan, + faGreaterThanEqual: faGreaterThanEqual, + faGrimace: faGrimace, + faGrin: faGrin, + faGrinAlt: faGrinAlt, + faGrinBeam: faGrinBeam, + faGrinBeamSweat: faGrinBeamSweat, + faGrinHearts: faGrinHearts, + faGrinSquint: faGrinSquint, + faGrinSquintTears: faGrinSquintTears, + faGrinStars: faGrinStars, + faGrinTears: faGrinTears, + faGrinTongue: faGrinTongue, + faGrinTongueSquint: faGrinTongueSquint, + faGrinTongueWink: faGrinTongueWink, + faGrinWink: faGrinWink, + faGripHorizontal: faGripHorizontal, + faGripLines: faGripLines, + faGripLinesVertical: faGripLinesVertical, + faGripVertical: faGripVertical, + faGuitar: faGuitar, + faHSquare: faHSquare, + faHamburger: faHamburger, + faHammer: faHammer, + faHamsa: faHamsa, + faHandHolding: faHandHolding, + faHandHoldingHeart: faHandHoldingHeart, + faHandHoldingMedical: faHandHoldingMedical, + faHandHoldingUsd: faHandHoldingUsd, + faHandHoldingWater: faHandHoldingWater, + faHandLizard: faHandLizard, + faHandMiddleFinger: faHandMiddleFinger, + faHandPaper: faHandPaper, + faHandPeace: faHandPeace, + faHandPointDown: faHandPointDown, + faHandPointLeft: faHandPointLeft, + faHandPointRight: faHandPointRight, + faHandPointUp: faHandPointUp, + faHandPointer: faHandPointer, + faHandRock: faHandRock, + faHandScissors: faHandScissors, + faHandSparkles: faHandSparkles, + faHandSpock: faHandSpock, + faHands: faHands, + faHandsHelping: faHandsHelping, + faHandsWash: faHandsWash, + faHandshake: faHandshake, + faHandshakeAltSlash: faHandshakeAltSlash, + faHandshakeSlash: faHandshakeSlash, + faHanukiah: faHanukiah, + faHardHat: faHardHat, + faHashtag: faHashtag, + faHatCowboy: faHatCowboy, + faHatCowboySide: faHatCowboySide, + faHatWizard: faHatWizard, + faHdd: faHdd, + faHeadSideCough: faHeadSideCough, + faHeadSideCoughSlash: faHeadSideCoughSlash, + faHeadSideMask: faHeadSideMask, + faHeadSideVirus: faHeadSideVirus, + faHeading: faHeading, + faHeadphones: faHeadphones, + faHeadphonesAlt: faHeadphonesAlt, + faHeadset: faHeadset, + faHeart: faHeart, + faHeartBroken: faHeartBroken, + faHeartbeat: faHeartbeat, + faHelicopter: faHelicopter, + faHighlighter: faHighlighter, + faHiking: faHiking, + faHippo: faHippo, + faHistory: faHistory, + faHockeyPuck: faHockeyPuck, + faHollyBerry: faHollyBerry, + faHome: faHome, + faHorse: faHorse, + faHorseHead: faHorseHead, + faHospital: faHospital, + faHospitalAlt: faHospitalAlt, + faHospitalSymbol: faHospitalSymbol, + faHospitalUser: faHospitalUser, + faHotTub: faHotTub, + faHotdog: faHotdog, + faHotel: faHotel, + faHourglass: faHourglass, + faHourglassEnd: faHourglassEnd, + faHourglassHalf: faHourglassHalf, + faHourglassStart: faHourglassStart, + faHouseDamage: faHouseDamage, + faHouseUser: faHouseUser, + faHryvnia: faHryvnia, + faICursor: faICursor, + faIceCream: faIceCream, + faIcicles: faIcicles, + faIcons: faIcons, + faIdBadge: faIdBadge, + faIdCard: faIdCard, + faIdCardAlt: faIdCardAlt, + faIgloo: faIgloo, + faImage: faImage, + faImages: faImages, + faInbox: faInbox, + faIndent: faIndent, + faIndustry: faIndustry, + faInfinity: faInfinity, + faInfo: faInfo, + faInfoCircle: faInfoCircle, + faItalic: faItalic, + faJedi: faJedi, + faJoint: faJoint, + faJournalWhills: faJournalWhills, + faKaaba: faKaaba, + faKey: faKey, + faKeyboard: faKeyboard, + faKhanda: faKhanda, + faKiss: faKiss, + faKissBeam: faKissBeam, + faKissWinkHeart: faKissWinkHeart, + faKiwiBird: faKiwiBird, + faLandmark: faLandmark, + faLanguage: faLanguage, + faLaptop: faLaptop, + faLaptopCode: faLaptopCode, + faLaptopHouse: faLaptopHouse, + faLaptopMedical: faLaptopMedical, + faLaugh: faLaugh, + faLaughBeam: faLaughBeam, + faLaughSquint: faLaughSquint, + faLaughWink: faLaughWink, + faLayerGroup: faLayerGroup, + faLeaf: faLeaf, + faLemon: faLemon, + faLessThan: faLessThan, + faLessThanEqual: faLessThanEqual, + faLevelDownAlt: faLevelDownAlt, + faLevelUpAlt: faLevelUpAlt, + faLifeRing: faLifeRing, + faLightbulb: faLightbulb, + faLink: faLink, + faLiraSign: faLiraSign, + faList: faList, + faListAlt: faListAlt, + faListOl: faListOl, + faListUl: faListUl, + faLocationArrow: faLocationArrow, + faLock: faLock, + faLockOpen: faLockOpen, + faLongArrowAltDown: faLongArrowAltDown, + faLongArrowAltLeft: faLongArrowAltLeft, + faLongArrowAltRight: faLongArrowAltRight, + faLongArrowAltUp: faLongArrowAltUp, + faLowVision: faLowVision, + faLuggageCart: faLuggageCart, + faLungs: faLungs, + faLungsVirus: faLungsVirus, + faMagic: faMagic, + faMagnet: faMagnet, + faMailBulk: faMailBulk, + faMale: faMale, + faMap: faMap, + faMapMarked: faMapMarked, + faMapMarkedAlt: faMapMarkedAlt, + faMapMarker: faMapMarker, + faMapMarkerAlt: faMapMarkerAlt, + faMapPin: faMapPin, + faMapSigns: faMapSigns, + faMarker: faMarker, + faMars: faMars, + faMarsDouble: faMarsDouble, + faMarsStroke: faMarsStroke, + faMarsStrokeH: faMarsStrokeH, + faMarsStrokeV: faMarsStrokeV, + faMask: faMask, + faMedal: faMedal, + faMedkit: faMedkit, + faMeh: faMeh, + faMehBlank: faMehBlank, + faMehRollingEyes: faMehRollingEyes, + faMemory: faMemory, + faMenorah: faMenorah, + faMercury: faMercury, + faMeteor: faMeteor, + faMicrochip: faMicrochip, + faMicrophone: faMicrophone, + faMicrophoneAlt: faMicrophoneAlt, + faMicrophoneAltSlash: faMicrophoneAltSlash, + faMicrophoneSlash: faMicrophoneSlash, + faMicroscope: faMicroscope, + faMinus: faMinus, + faMinusCircle: faMinusCircle, + faMinusSquare: faMinusSquare, + faMitten: faMitten, + faMobile: faMobile, + faMobileAlt: faMobileAlt, + faMoneyBill: faMoneyBill, + faMoneyBillAlt: faMoneyBillAlt, + faMoneyBillWave: faMoneyBillWave, + faMoneyBillWaveAlt: faMoneyBillWaveAlt, + faMoneyCheck: faMoneyCheck, + faMoneyCheckAlt: faMoneyCheckAlt, + faMonument: faMonument, + faMoon: faMoon, + faMortarPestle: faMortarPestle, + faMosque: faMosque, + faMotorcycle: faMotorcycle, + faMountain: faMountain, + faMouse: faMouse, + faMousePointer: faMousePointer, + faMugHot: faMugHot, + faMusic: faMusic, + faNetworkWired: faNetworkWired, + faNeuter: faNeuter, + faNewspaper: faNewspaper, + faNotEqual: faNotEqual, + faNotesMedical: faNotesMedical, + faObjectGroup: faObjectGroup, + faObjectUngroup: faObjectUngroup, + faOilCan: faOilCan, + faOm: faOm, + faOtter: faOtter, + faOutdent: faOutdent, + faPager: faPager, + faPaintBrush: faPaintBrush, + faPaintRoller: faPaintRoller, + faPalette: faPalette, + faPallet: faPallet, + faPaperPlane: faPaperPlane, + faPaperclip: faPaperclip, + faParachuteBox: faParachuteBox, + faParagraph: faParagraph, + faParking: faParking, + faPassport: faPassport, + faPastafarianism: faPastafarianism, + faPaste: faPaste, + faPause: faPause, + faPauseCircle: faPauseCircle, + faPaw: faPaw, + faPeace: faPeace, + faPen: faPen, + faPenAlt: faPenAlt, + faPenFancy: faPenFancy, + faPenNib: faPenNib, + faPenSquare: faPenSquare, + faPencilAlt: faPencilAlt, + faPencilRuler: faPencilRuler, + faPeopleArrows: faPeopleArrows, + faPeopleCarry: faPeopleCarry, + faPepperHot: faPepperHot, + faPercent: faPercent, + faPercentage: faPercentage, + faPersonBooth: faPersonBooth, + faPhone: faPhone, + faPhoneAlt: faPhoneAlt, + faPhoneSlash: faPhoneSlash, + faPhoneSquare: faPhoneSquare, + faPhoneSquareAlt: faPhoneSquareAlt, + faPhoneVolume: faPhoneVolume, + faPhotoVideo: faPhotoVideo, + faPiggyBank: faPiggyBank, + faPills: faPills, + faPizzaSlice: faPizzaSlice, + faPlaceOfWorship: faPlaceOfWorship, + faPlane: faPlane, + faPlaneArrival: faPlaneArrival, + faPlaneDeparture: faPlaneDeparture, + faPlaneSlash: faPlaneSlash, + faPlay: faPlay, + faPlayCircle: faPlayCircle, + faPlug: faPlug, + faPlus: faPlus, + faPlusCircle: faPlusCircle, + faPlusSquare: faPlusSquare, + faPodcast: faPodcast, + faPoll: faPoll, + faPollH: faPollH, + faPoo: faPoo, + faPooStorm: faPooStorm, + faPoop: faPoop, + faPortrait: faPortrait, + faPoundSign: faPoundSign, + faPowerOff: faPowerOff, + faPray: faPray, + faPrayingHands: faPrayingHands, + faPrescription: faPrescription, + faPrescriptionBottle: faPrescriptionBottle, + faPrescriptionBottleAlt: faPrescriptionBottleAlt, + faPrint: faPrint, + faProcedures: faProcedures, + faProjectDiagram: faProjectDiagram, + faPumpMedical: faPumpMedical, + faPumpSoap: faPumpSoap, + faPuzzlePiece: faPuzzlePiece, + faQrcode: faQrcode, + faQuestion: faQuestion, + faQuestionCircle: faQuestionCircle, + faQuidditch: faQuidditch, + faQuoteLeft: faQuoteLeft, + faQuoteRight: faQuoteRight, + faQuran: faQuran, + faRadiation: faRadiation, + faRadiationAlt: faRadiationAlt, + faRainbow: faRainbow, + faRandom: faRandom, + faReceipt: faReceipt, + faRecordVinyl: faRecordVinyl, + faRecycle: faRecycle, + faRedo: faRedo, + faRedoAlt: faRedoAlt, + faRegistered: faRegistered, + faRemoveFormat: faRemoveFormat, + faReply: faReply, + faReplyAll: faReplyAll, + faRepublican: faRepublican, + faRestroom: faRestroom, + faRetweet: faRetweet, + faRibbon: faRibbon, + faRing: faRing, + faRoad: faRoad, + faRobot: faRobot, + faRocket: faRocket, + faRoute: faRoute, + faRss: faRss, + faRssSquare: faRssSquare, + faRubleSign: faRubleSign, + faRuler: faRuler, + faRulerCombined: faRulerCombined, + faRulerHorizontal: faRulerHorizontal, + faRulerVertical: faRulerVertical, + faRunning: faRunning, + faRupeeSign: faRupeeSign, + faSadCry: faSadCry, + faSadTear: faSadTear, + faSatellite: faSatellite, + faSatelliteDish: faSatelliteDish, + faSave: faSave, + faSchool: faSchool, + faScrewdriver: faScrewdriver, + faScroll: faScroll, + faSdCard: faSdCard, + faSearch: faSearch, + faSearchDollar: faSearchDollar, + faSearchLocation: faSearchLocation, + faSearchMinus: faSearchMinus, + faSearchPlus: faSearchPlus, + faSeedling: faSeedling, + faServer: faServer, + faShapes: faShapes, + faShare: faShare, + faShareAlt: faShareAlt, + faShareAltSquare: faShareAltSquare, + faShareSquare: faShareSquare, + faShekelSign: faShekelSign, + faShieldAlt: faShieldAlt, + faShieldVirus: faShieldVirus, + faShip: faShip, + faShippingFast: faShippingFast, + faShoePrints: faShoePrints, + faShoppingBag: faShoppingBag, + faShoppingBasket: faShoppingBasket, + faShoppingCart: faShoppingCart, + faShower: faShower, + faShuttleVan: faShuttleVan, + faSign: faSign, + faSignInAlt: faSignInAlt, + faSignLanguage: faSignLanguage, + faSignOutAlt: faSignOutAlt, + faSignal: faSignal, + faSignature: faSignature, + faSimCard: faSimCard, + faSink: faSink, + faSitemap: faSitemap, + faSkating: faSkating, + faSkiing: faSkiing, + faSkiingNordic: faSkiingNordic, + faSkull: faSkull, + faSkullCrossbones: faSkullCrossbones, + faSlash: faSlash, + faSleigh: faSleigh, + faSlidersH: faSlidersH, + faSmile: faSmile, + faSmileBeam: faSmileBeam, + faSmileWink: faSmileWink, + faSmog: faSmog, + faSmoking: faSmoking, + faSmokingBan: faSmokingBan, + faSms: faSms, + faSnowboarding: faSnowboarding, + faSnowflake: faSnowflake, + faSnowman: faSnowman, + faSnowplow: faSnowplow, + faSoap: faSoap, + faSocks: faSocks, + faSolarPanel: faSolarPanel, + faSort: faSort, + faSortAlphaDown: faSortAlphaDown, + faSortAlphaDownAlt: faSortAlphaDownAlt, + faSortAlphaUp: faSortAlphaUp, + faSortAlphaUpAlt: faSortAlphaUpAlt, + faSortAmountDown: faSortAmountDown, + faSortAmountDownAlt: faSortAmountDownAlt, + faSortAmountUp: faSortAmountUp, + faSortAmountUpAlt: faSortAmountUpAlt, + faSortDown: faSortDown, + faSortNumericDown: faSortNumericDown, + faSortNumericDownAlt: faSortNumericDownAlt, + faSortNumericUp: faSortNumericUp, + faSortNumericUpAlt: faSortNumericUpAlt, + faSortUp: faSortUp, + faSpa: faSpa, + faSpaceShuttle: faSpaceShuttle, + faSpellCheck: faSpellCheck, + faSpider: faSpider, + faSpinner: faSpinner, + faSplotch: faSplotch, + faSprayCan: faSprayCan, + faSquare: faSquare, + faSquareFull: faSquareFull, + faSquareRootAlt: faSquareRootAlt, + faStamp: faStamp, + faStar: faStar, + faStarAndCrescent: faStarAndCrescent, + faStarHalf: faStarHalf, + faStarHalfAlt: faStarHalfAlt, + faStarOfDavid: faStarOfDavid, + faStarOfLife: faStarOfLife, + faStepBackward: faStepBackward, + faStepForward: faStepForward, + faStethoscope: faStethoscope, + faStickyNote: faStickyNote, + faStop: faStop, + faStopCircle: faStopCircle, + faStopwatch: faStopwatch, + faStopwatch20: faStopwatch20, + faStore: faStore, + faStoreAlt: faStoreAlt, + faStoreAltSlash: faStoreAltSlash, + faStoreSlash: faStoreSlash, + faStream: faStream, + faStreetView: faStreetView, + faStrikethrough: faStrikethrough, + faStroopwafel: faStroopwafel, + faSubscript: faSubscript, + faSubway: faSubway, + faSuitcase: faSuitcase, + faSuitcaseRolling: faSuitcaseRolling, + faSun: faSun, + faSuperscript: faSuperscript, + faSurprise: faSurprise, + faSwatchbook: faSwatchbook, + faSwimmer: faSwimmer, + faSwimmingPool: faSwimmingPool, + faSynagogue: faSynagogue, + faSync: faSync, + faSyncAlt: faSyncAlt, + faSyringe: faSyringe, + faTable: faTable, + faTableTennis: faTableTennis, + faTablet: faTablet, + faTabletAlt: faTabletAlt, + faTablets: faTablets, + faTachometerAlt: faTachometerAlt, + faTag: faTag, + faTags: faTags, + faTape: faTape, + faTasks: faTasks, + faTaxi: faTaxi, + faTeeth: faTeeth, + faTeethOpen: faTeethOpen, + faTemperatureHigh: faTemperatureHigh, + faTemperatureLow: faTemperatureLow, + faTenge: faTenge, + faTerminal: faTerminal, + faTextHeight: faTextHeight, + faTextWidth: faTextWidth, + faTh: faTh, + faThLarge: faThLarge, + faThList: faThList, + faTheaterMasks: faTheaterMasks, + faThermometer: faThermometer, + faThermometerEmpty: faThermometerEmpty, + faThermometerFull: faThermometerFull, + faThermometerHalf: faThermometerHalf, + faThermometerQuarter: faThermometerQuarter, + faThermometerThreeQuarters: faThermometerThreeQuarters, + faThumbsDown: faThumbsDown, + faThumbsUp: faThumbsUp, + faThumbtack: faThumbtack, + faTicketAlt: faTicketAlt, + faTimes: faTimes, + faTimesCircle: faTimesCircle, + faTint: faTint, + faTintSlash: faTintSlash, + faTired: faTired, + faToggleOff: faToggleOff, + faToggleOn: faToggleOn, + faToilet: faToilet, + faToiletPaper: faToiletPaper, + faToiletPaperSlash: faToiletPaperSlash, + faToolbox: faToolbox, + faTools: faTools, + faTooth: faTooth, + faTorah: faTorah, + faToriiGate: faToriiGate, + faTractor: faTractor, + faTrademark: faTrademark, + faTrafficLight: faTrafficLight, + faTrailer: faTrailer, + faTrain: faTrain, + faTram: faTram, + faTransgender: faTransgender, + faTransgenderAlt: faTransgenderAlt, + faTrash: faTrash, + faTrashAlt: faTrashAlt, + faTrashRestore: faTrashRestore, + faTrashRestoreAlt: faTrashRestoreAlt, + faTree: faTree, + faTrophy: faTrophy, + faTruck: faTruck, + faTruckLoading: faTruckLoading, + faTruckMonster: faTruckMonster, + faTruckMoving: faTruckMoving, + faTruckPickup: faTruckPickup, + faTshirt: faTshirt, + faTty: faTty, + faTv: faTv, + faUmbrella: faUmbrella, + faUmbrellaBeach: faUmbrellaBeach, + faUnderline: faUnderline, + faUndo: faUndo, + faUndoAlt: faUndoAlt, + faUniversalAccess: faUniversalAccess, + faUniversity: faUniversity, + faUnlink: faUnlink, + faUnlock: faUnlock, + faUnlockAlt: faUnlockAlt, + faUpload: faUpload, + faUser: faUser, + faUserAlt: faUserAlt, + faUserAltSlash: faUserAltSlash, + faUserAstronaut: faUserAstronaut, + faUserCheck: faUserCheck, + faUserCircle: faUserCircle, + faUserClock: faUserClock, + faUserCog: faUserCog, + faUserEdit: faUserEdit, + faUserFriends: faUserFriends, + faUserGraduate: faUserGraduate, + faUserInjured: faUserInjured, + faUserLock: faUserLock, + faUserMd: faUserMd, + faUserMinus: faUserMinus, + faUserNinja: faUserNinja, + faUserNurse: faUserNurse, + faUserPlus: faUserPlus, + faUserSecret: faUserSecret, + faUserShield: faUserShield, + faUserSlash: faUserSlash, + faUserTag: faUserTag, + faUserTie: faUserTie, + faUserTimes: faUserTimes, + faUsers: faUsers, + faUsersCog: faUsersCog, + faUsersSlash: faUsersSlash, + faUtensilSpoon: faUtensilSpoon, + faUtensils: faUtensils, + faVectorSquare: faVectorSquare, + faVenus: faVenus, + faVenusDouble: faVenusDouble, + faVenusMars: faVenusMars, + faVest: faVest, + faVestPatches: faVestPatches, + faVial: faVial, + faVials: faVials, + faVideo: faVideo, + faVideoSlash: faVideoSlash, + faVihara: faVihara, + faVirus: faVirus, + faVirusSlash: faVirusSlash, + faViruses: faViruses, + faVoicemail: faVoicemail, + faVolleyballBall: faVolleyballBall, + faVolumeDown: faVolumeDown, + faVolumeMute: faVolumeMute, + faVolumeOff: faVolumeOff, + faVolumeUp: faVolumeUp, + faVoteYea: faVoteYea, + faVrCardboard: faVrCardboard, + faWalking: faWalking, + faWallet: faWallet, + faWarehouse: faWarehouse, + faWater: faWater, + faWaveSquare: faWaveSquare, + faWeight: faWeight, + faWeightHanging: faWeightHanging, + faWheelchair: faWheelchair, + faWifi: faWifi, + faWind: faWind, + faWindowClose: faWindowClose, + faWindowMaximize: faWindowMaximize, + faWindowMinimize: faWindowMinimize, + faWindowRestore: faWindowRestore, + faWineBottle: faWineBottle, + faWineGlass: faWineGlass, + faWineGlassAlt: faWineGlassAlt, + faWonSign: faWonSign, + faWrench: faWrench, + faXRay: faXRay, + faYenSign: faYenSign, + faYinYang: faYinYang +}; + +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; +} + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); +} + +var noop = function noop() {}; + +var _WINDOW = {}; +var _DOCUMENT = {}; +var _MUTATION_OBSERVER = null; +var _PERFORMANCE = { + mark: noop, + measure: noop +}; + +try { + if (typeof window !== 'undefined') _WINDOW = window; + if (typeof document !== 'undefined') _DOCUMENT = document; + if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver; + if (typeof performance !== 'undefined') _PERFORMANCE = performance; +} catch (e) {} + +var _ref = _WINDOW.navigator || {}, + _ref$userAgent = _ref.userAgent, + userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; + +var WINDOW = _WINDOW; +var DOCUMENT = _DOCUMENT; +var PERFORMANCE = _PERFORMANCE; +!!WINDOW.document; +var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; +~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); + +var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; +var DEFAULT_FAMILY_PREFIX = 'fa'; +var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa'; +var DATA_FA_I2SVG = 'data-fa-i2svg'; +(function () { + try { + return process.env.NODE_ENV === 'production'; + } catch (e) { + return false; + } +})(); +var DUOTONE_CLASSES = { + GROUP: 'group', + SWAP_OPACITY: 'swap-opacity', + PRIMARY: 'primary', + SECONDARY: 'secondary' +}; + +var initial = WINDOW.FontAwesomeConfig || {}; + +function getAttrConfig(attr) { + var element = DOCUMENT.querySelector('script[' + attr + ']'); + + if (element) { + return element.getAttribute(attr); + } +} + +function coerce(val) { + // Getting an empty string will occur if the attribute is set on the HTML tag but without a value + // We'll assume that this is an indication that it should be toggled to true + // For example + if (val === '') return true; + if (val === 'false') return false; + if (val === 'true') return true; + return val; +} + +if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') { + var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']]; + attrs.forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + attr = _ref2[0], + key = _ref2[1]; + + var val = coerce(getAttrConfig(attr)); + + if (val !== undefined && val !== null) { + initial[key] = val; + } + }); +} + +var _default = { + familyPrefix: DEFAULT_FAMILY_PREFIX, + replacementClass: DEFAULT_REPLACEMENT_CLASS, + autoReplaceSvg: true, + autoAddCss: true, + autoA11y: true, + searchPseudoElements: false, + observeMutations: true, + mutateApproach: 'async', + keepOriginalSource: true, + measurePerformance: false, + showMissingIcons: true +}; + +var _config = _objectSpread({}, _default, initial); + +if (!_config.autoReplaceSvg) _config.observeMutations = false; + +var config = _objectSpread({}, _config); + +WINDOW.FontAwesomeConfig = config; + +var w = WINDOW || {}; +if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; +if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; +if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; +if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; +var namespace = w[NAMESPACE_IDENTIFIER]; + +var functions = []; + +var listener = function listener() { + DOCUMENT.removeEventListener('DOMContentLoaded', listener); + loaded = 1; + functions.map(function (fn) { + return fn(); + }); +}; + +var loaded = false; + +if (IS_DOM) { + loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); + if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener); +} + +typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function'; +typeof setImmediate === 'undefined' ? setTimeout : setImmediate; +var meaninglessTransform = { + size: 16, + x: 0, + y: 0, + rotate: 0, + flipX: false, + flipY: false +}; +function insertCss(css) { + if (!css || !IS_DOM) { + return; + } + + var style = DOCUMENT.createElement('style'); + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + var headChildren = DOCUMENT.head.childNodes; + var beforeChild = null; + + for (var i = headChildren.length - 1; i > -1; i--) { + var child = headChildren[i]; + var tagName = (child.tagName || '').toUpperCase(); + + if (['STYLE', 'LINK'].indexOf(tagName) > -1) { + beforeChild = child; + } + } + + DOCUMENT.head.insertBefore(style, beforeChild); + return css; +} +var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; +function nextUniqueId() { + var size = 12; + var id = ''; + + while (size-- > 0) { + id += idPool[Math.random() * 62 | 0]; + } + + return id; +} +function htmlEscape(str) { + return "".concat(str).replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>'); +} +function joinAttributes(attributes) { + return Object.keys(attributes || {}).reduce(function (acc, attributeName) { + return acc + "".concat(attributeName, "=\"").concat(htmlEscape(attributes[attributeName]), "\" "); + }, '').trim(); +} +function joinStyles(styles) { + return Object.keys(styles || {}).reduce(function (acc, styleName) { + return acc + "".concat(styleName, ": ").concat(styles[styleName], ";"); + }, ''); +} +function transformIsMeaningful(transform) { + return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY; +} +function transformForSvg(_ref) { + var transform = _ref.transform, + containerWidth = _ref.containerWidth, + iconWidth = _ref.iconWidth; + var outer = { + transform: "translate(".concat(containerWidth / 2, " 256)") + }; + var innerTranslate = "translate(".concat(transform.x * 32, ", ").concat(transform.y * 32, ") "); + var innerScale = "scale(".concat(transform.size / 16 * (transform.flipX ? -1 : 1), ", ").concat(transform.size / 16 * (transform.flipY ? -1 : 1), ") "); + var innerRotate = "rotate(".concat(transform.rotate, " 0 0)"); + var inner = { + transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) + }; + var path = { + transform: "translate(".concat(iconWidth / 2 * -1, " -256)") + }; + return { + outer: outer, + inner: inner, + path: path + }; +} + +var ALL_SPACE = { + x: 0, + y: 0, + width: '100%', + height: '100%' +}; + +function fillBlack(abstract) { + var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (abstract.attributes && (abstract.attributes.fill || force)) { + abstract.attributes.fill = 'black'; + } + + return abstract; +} + +function deGroup(abstract) { + if (abstract.tag === 'g') { + return abstract.children; + } else { + return [abstract]; + } +} + +function makeIconMasking (_ref) { + var children = _ref.children, + attributes = _ref.attributes, + main = _ref.main, + mask = _ref.mask, + explicitMaskId = _ref.maskId, + transform = _ref.transform; + var mainWidth = main.width, + mainPath = main.icon; + var maskWidth = mask.width, + maskPath = mask.icon; + var trans = transformForSvg({ + transform: transform, + containerWidth: maskWidth, + iconWidth: mainWidth + }); + var maskRect = { + tag: 'rect', + attributes: _objectSpread({}, ALL_SPACE, { + fill: 'white' + }) + }; + var maskInnerGroupChildrenMixin = mainPath.children ? { + children: mainPath.children.map(fillBlack) + } : {}; + var maskInnerGroup = { + tag: 'g', + attributes: _objectSpread({}, trans.inner), + children: [fillBlack(_objectSpread({ + tag: mainPath.tag, + attributes: _objectSpread({}, mainPath.attributes, trans.path) + }, maskInnerGroupChildrenMixin))] + }; + var maskOuterGroup = { + tag: 'g', + attributes: _objectSpread({}, trans.outer), + children: [maskInnerGroup] + }; + var maskId = "mask-".concat(explicitMaskId || nextUniqueId()); + var clipId = "clip-".concat(explicitMaskId || nextUniqueId()); + var maskTag = { + tag: 'mask', + attributes: _objectSpread({}, ALL_SPACE, { + id: maskId, + maskUnits: 'userSpaceOnUse', + maskContentUnits: 'userSpaceOnUse' + }), + children: [maskRect, maskOuterGroup] + }; + var defs = { + tag: 'defs', + children: [{ + tag: 'clipPath', + attributes: { + id: clipId + }, + children: deGroup(maskPath) + }, maskTag] + }; + children.push(defs, { + tag: 'rect', + attributes: _objectSpread({ + fill: 'currentColor', + 'clip-path': "url(#".concat(clipId, ")"), + mask: "url(#".concat(maskId, ")") + }, ALL_SPACE) + }); + return { + children: children, + attributes: attributes + }; +} + +function makeIconStandard (_ref) { + var children = _ref.children, + attributes = _ref.attributes, + main = _ref.main, + transform = _ref.transform, + styles = _ref.styles; + var styleString = joinStyles(styles); + + if (styleString.length > 0) { + attributes['style'] = styleString; + } + + if (transformIsMeaningful(transform)) { + var trans = transformForSvg({ + transform: transform, + containerWidth: main.width, + iconWidth: main.width + }); + children.push({ + tag: 'g', + attributes: _objectSpread({}, trans.outer), + children: [{ + tag: 'g', + attributes: _objectSpread({}, trans.inner), + children: [{ + tag: main.icon.tag, + children: main.icon.children, + attributes: _objectSpread({}, main.icon.attributes, trans.path) + }] + }] + }); + } else { + children.push(main.icon); + } + + return { + children: children, + attributes: attributes + }; +} + +function asIcon (_ref) { + var children = _ref.children, + main = _ref.main, + mask = _ref.mask, + attributes = _ref.attributes, + styles = _ref.styles, + transform = _ref.transform; + + if (transformIsMeaningful(transform) && main.found && !mask.found) { + var width = main.width, + height = main.height; + var offset = { + x: width / height / 2, + y: 0.5 + }; + attributes['style'] = joinStyles(_objectSpread({}, styles, { + 'transform-origin': "".concat(offset.x + transform.x / 16, "em ").concat(offset.y + transform.y / 16, "em") + })); + } + + return [{ + tag: 'svg', + attributes: attributes, + children: children + }]; +} + +function asSymbol (_ref) { + var prefix = _ref.prefix, + iconName = _ref.iconName, + children = _ref.children, + attributes = _ref.attributes, + symbol = _ref.symbol; + var id = symbol === true ? "".concat(prefix, "-").concat(config.familyPrefix, "-").concat(iconName) : symbol; + return [{ + tag: 'svg', + attributes: { + style: 'display: none;' + }, + children: [{ + tag: 'symbol', + attributes: _objectSpread({}, attributes, { + id: id + }), + children: children + }] + }]; +} + +function makeInlineSvgAbstract(params) { + var _params$icons = params.icons, + main = _params$icons.main, + mask = _params$icons.mask, + prefix = params.prefix, + iconName = params.iconName, + transform = params.transform, + symbol = params.symbol, + title = params.title, + maskId = params.maskId, + titleId = params.titleId, + extra = params.extra, + _params$watchable = params.watchable, + watchable = _params$watchable === void 0 ? false : _params$watchable; + + var _ref = mask.found ? mask : main, + width = _ref.width, + height = _ref.height; + + var isUploadedIcon = prefix === 'fak'; + var widthClass = isUploadedIcon ? '' : "fa-w-".concat(Math.ceil(width / height * 16)); + var attrClass = [config.replacementClass, iconName ? "".concat(config.familyPrefix, "-").concat(iconName) : '', widthClass].filter(function (c) { + return extra.classes.indexOf(c) === -1; + }).filter(function (c) { + return c !== '' || !!c; + }).concat(extra.classes).join(' '); + var content = { + children: [], + attributes: _objectSpread({}, extra.attributes, { + 'data-prefix': prefix, + 'data-icon': iconName, + 'class': attrClass, + 'role': extra.attributes.role || 'img', + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': "0 0 ".concat(width, " ").concat(height) + }) + }; + var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? { + width: "".concat(width / height * 16 * 0.0625, "em") + } : {}; + + if (watchable) { + content.attributes[DATA_FA_I2SVG] = ''; + } + + if (title) content.children.push({ + tag: 'title', + attributes: { + id: content.attributes['aria-labelledby'] || "title-".concat(titleId || nextUniqueId()) + }, + children: [title] + }); + + var args = _objectSpread({}, content, { + prefix: prefix, + iconName: iconName, + main: main, + mask: mask, + maskId: maskId, + transform: transform, + symbol: symbol, + styles: _objectSpread({}, uploadedIconWidthStyle, extra.styles) + }); + + var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args), + children = _ref2.children, + attributes = _ref2.attributes; + + args.children = children; + args.attributes = attributes; + + if (symbol) { + return asSymbol(args); + } else { + return asIcon(args); + } +} + +var noop$1 = function noop() {}; + +config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { + mark: noop$1, + measure: noop$1 +}; + +/** + * Internal helper to bind a function known to have 4 arguments + * to a given context. + */ + +var bindInternal4 = function bindInternal4(func, thisContext) { + return function (a, b, c, d) { + return func.call(thisContext, a, b, c, d); + }; +}; + +/** + * # Reduce + * + * A fast object `.reduce()` implementation. + * + * @param {Object} subject The object to reduce over. + * @param {Function} fn The reducer function. + * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0]. + * @param {Object} thisContext The context for the reducer. + * @return {mixed} The final result. + */ + + +var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) { + var keys = Object.keys(subject), + length = keys.length, + iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, + i, + key, + result; + + if (initialValue === undefined) { + i = 1; + result = subject[keys[0]]; + } else { + i = 0; + result = initialValue; + } + + for (; i < length; i++) { + key = keys[i]; + result = iterator(result, subject[key], key, subject); + } + + return result; +}; + +function defineIcons(prefix, icons) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var _params$skipHooks = params.skipHooks, + skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; + var normalized = Object.keys(icons).reduce(function (acc, iconName) { + var icon = icons[iconName]; + var expanded = !!icon.icon; + + if (expanded) { + acc[icon.iconName] = icon.icon; + } else { + acc[iconName] = icon; + } + + return acc; + }, {}); + + if (typeof namespace.hooks.addPack === 'function' && !skipHooks) { + namespace.hooks.addPack(prefix, normalized); + } else { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized); + } + /** + * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction + * of new styles we needed to differentiate between them. Prefix `fa` is now an alias + * for `fas` so we'll easy the upgrade process for our users by automatically defining + * this as well. + */ + + + if (prefix === 'fas') { + defineIcons('fa', icons); + } +} + +var styles = namespace.styles, + shims = namespace.shims; +var build = function build() { + var lookup = function lookup(reducer) { + return reduce(styles, function (o, style, prefix) { + o[prefix] = reduce(style, reducer, {}); + return o; + }, {}); + }; + + lookup(function (acc, icon, iconName) { + if (icon[3]) { + acc[icon[3]] = iconName; + } + + return acc; + }); + lookup(function (acc, icon, iconName) { + var ligatures = icon[2]; + acc[iconName] = iconName; + ligatures.forEach(function (ligature) { + acc[ligature] = iconName; + }); + return acc; + }); + var hasRegular = 'far' in styles; + reduce(shims, function (acc, shim) { + var oldName = shim[0]; + var prefix = shim[1]; + var iconName = shim[2]; + + if (prefix === 'far' && !hasRegular) { + prefix = 'fas'; + } + + acc[oldName] = { + prefix: prefix, + iconName: iconName + }; + return acc; + }, {}); +}; +build(); + +namespace.styles; +function iconFromMapping(mapping, prefix, iconName) { + if (mapping && mapping[prefix] && mapping[prefix][iconName]) { + return { + prefix: prefix, + iconName: iconName, + icon: mapping[prefix][iconName] + }; + } +} + +function toHtml(abstractNodes) { + var tag = abstractNodes.tag, + _abstractNodes$attrib = abstractNodes.attributes, + attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib, + _abstractNodes$childr = abstractNodes.children, + children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr; + + if (typeof abstractNodes === 'string') { + return htmlEscape(abstractNodes); + } else { + return "<".concat(tag, " ").concat(joinAttributes(attributes), ">").concat(children.map(toHtml).join(''), ""); + } +} + +function MissingIcon(error) { + this.name = 'MissingIcon'; + this.message = error || 'Icon unavailable'; + this.stack = new Error().stack; +} +MissingIcon.prototype = Object.create(Error.prototype); +MissingIcon.prototype.constructor = MissingIcon; + +var FILL = { + fill: 'currentColor' +}; +var ANIMATION_BASE = { + attributeType: 'XML', + repeatCount: 'indefinite', + dur: '2s' +}; +({ + tag: 'path', + attributes: _objectSpread({}, FILL, { + d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z' + }) +}); + +var OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, { + attributeName: 'opacity' +}); + +({ + tag: 'circle', + attributes: _objectSpread({}, FILL, { + cx: '256', + cy: '364', + r: '28' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, ANIMATION_BASE, { + attributeName: 'r', + values: '28;14;28;28;14;28;' + }) + }, { + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '1;0;1;1;0;1;' + }) + }] +}); +({ + tag: 'path', + attributes: _objectSpread({}, FILL, { + opacity: '1', + d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '1;0;0;0;0;1;' + }) + }] +}); +({ + tag: 'path', + attributes: _objectSpread({}, FILL, { + opacity: '0', + d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '0;0;1;1;0;0;' + }) + }] +}); + +namespace.styles; +function asFoundIcon(icon) { + var width = icon[0]; + var height = icon[1]; + + var _icon$slice = icon.slice(4), + _icon$slice2 = _slicedToArray(_icon$slice, 1), + vectorData = _icon$slice2[0]; + + var element = null; + + if (Array.isArray(vectorData)) { + element = { + tag: 'g', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.GROUP) + }, + children: [{ + tag: 'path', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.SECONDARY), + fill: 'currentColor', + d: vectorData[0] + } + }, { + tag: 'path', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.PRIMARY), + fill: 'currentColor', + d: vectorData[1] + } + }] + }; + } else { + element = { + tag: 'path', + attributes: { + fill: 'currentColor', + d: vectorData + } + }; + } + + return { + found: true, + width: width, + height: height, + icon: element + }; +} + +namespace.styles; + +var baseStyles = "svg:not(:root).svg-inline--fa {\n overflow: visible;\n}\n\n.svg-inline--fa {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.225em;\n}\n.svg-inline--fa.fa-w-1 {\n width: 0.0625em;\n}\n.svg-inline--fa.fa-w-2 {\n width: 0.125em;\n}\n.svg-inline--fa.fa-w-3 {\n width: 0.1875em;\n}\n.svg-inline--fa.fa-w-4 {\n width: 0.25em;\n}\n.svg-inline--fa.fa-w-5 {\n width: 0.3125em;\n}\n.svg-inline--fa.fa-w-6 {\n width: 0.375em;\n}\n.svg-inline--fa.fa-w-7 {\n width: 0.4375em;\n}\n.svg-inline--fa.fa-w-8 {\n width: 0.5em;\n}\n.svg-inline--fa.fa-w-9 {\n width: 0.5625em;\n}\n.svg-inline--fa.fa-w-10 {\n width: 0.625em;\n}\n.svg-inline--fa.fa-w-11 {\n width: 0.6875em;\n}\n.svg-inline--fa.fa-w-12 {\n width: 0.75em;\n}\n.svg-inline--fa.fa-w-13 {\n width: 0.8125em;\n}\n.svg-inline--fa.fa-w-14 {\n width: 0.875em;\n}\n.svg-inline--fa.fa-w-15 {\n width: 0.9375em;\n}\n.svg-inline--fa.fa-w-16 {\n width: 1em;\n}\n.svg-inline--fa.fa-w-17 {\n width: 1.0625em;\n}\n.svg-inline--fa.fa-w-18 {\n width: 1.125em;\n}\n.svg-inline--fa.fa-w-19 {\n width: 1.1875em;\n}\n.svg-inline--fa.fa-w-20 {\n width: 1.25em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-border {\n height: 1.5em;\n}\n.svg-inline--fa.fa-li {\n width: 2em;\n}\n.svg-inline--fa.fa-fw {\n width: 1.25em;\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: #ff253a;\n border-radius: 1em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #fff;\n height: 1.5em;\n line-height: 1;\n max-width: 5em;\n min-width: 1.5em;\n overflow: hidden;\n padding: 0.25em;\n right: 0;\n text-overflow: ellipsis;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: 0;\n right: 0;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: 0;\n left: 0;\n right: auto;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n right: 0;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: 0;\n right: auto;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-lg {\n font-size: 1.3333333333em;\n line-height: 0.75em;\n vertical-align: -0.0667em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: 2.5em;\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: -2em;\n position: absolute;\n text-align: center;\n width: 2em;\n line-height: inherit;\n}\n\n.fa-border {\n border: solid 0.08em #eee;\n border-radius: 0.1em;\n padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n -webkit-filter: none;\n filter: none;\n}\n\n.fa-stack {\n display: inline-block;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: #fff;\n}\n\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse {\n color: #fff;\n}"; + +function css () { + var dfp = DEFAULT_FAMILY_PREFIX; + var drc = DEFAULT_REPLACEMENT_CLASS; + var fp = config.familyPrefix; + var rc = config.replacementClass; + var s = baseStyles; + + if (fp !== dfp || rc !== drc) { + var dPatt = new RegExp("\\.".concat(dfp, "\\-"), 'g'); + var customPropPatt = new RegExp("\\--".concat(dfp, "\\-"), 'g'); + var rPatt = new RegExp("\\.".concat(drc), 'g'); + s = s.replace(dPatt, ".".concat(fp, "-")).replace(customPropPatt, "--".concat(fp, "-")).replace(rPatt, ".".concat(rc)); + } + + return s; +} + +var Library = +/*#__PURE__*/ +function () { + function Library() { + _classCallCheck(this, Library); + + this.definitions = {}; + } + + _createClass(Library, [{ + key: "add", + value: function add() { + var _this = this; + + for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) { + definitions[_key] = arguments[_key]; + } + + var additions = definitions.reduce(this._pullDefinitions, {}); + Object.keys(additions).forEach(function (key) { + _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]); + defineIcons(key, additions[key]); + build(); + }); + } + }, { + key: "reset", + value: function reset() { + this.definitions = {}; + } + }, { + key: "_pullDefinitions", + value: function _pullDefinitions(additions, definition) { + var normalized = definition.prefix && definition.iconName && definition.icon ? { + 0: definition + } : definition; + Object.keys(normalized).map(function (key) { + var _normalized$key = normalized[key], + prefix = _normalized$key.prefix, + iconName = _normalized$key.iconName, + icon = _normalized$key.icon; + if (!additions[prefix]) additions[prefix] = {}; + additions[prefix][iconName] = icon; + }); + return additions; + } + }]); + + return Library; +}(); + +function ensureCss() { + if (config.autoAddCss && !_cssInserted) { + insertCss(css()); + + _cssInserted = true; + } +} + +function apiObject(val, abstractCreator) { + Object.defineProperty(val, 'abstract', { + get: abstractCreator + }); + Object.defineProperty(val, 'html', { + get: function get() { + return val.abstract.map(function (a) { + return toHtml(a); + }); + } + }); + Object.defineProperty(val, 'node', { + get: function get() { + if (!IS_DOM) return; + var container = DOCUMENT.createElement('div'); + container.innerHTML = val.html; + return container.children; + } + }); + return val; +} + +function findIconDefinition(iconLookup) { + var _iconLookup$prefix = iconLookup.prefix, + prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix, + iconName = iconLookup.iconName; + if (!iconName) return; + return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName); +} + +function resolveIcons(next) { + return function (maybeIconDefinition) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {}); + var mask = params.mask; + + if (mask) { + mask = (mask || {}).icon ? mask : findIconDefinition(mask || {}); + } + + return next(iconDefinition, _objectSpread({}, params, { + mask: mask + })); + }; +} + +var library = new Library(); +var _cssInserted = false; +var icon = resolveIcons(function (iconDefinition) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _params$transform = params.transform, + transform = _params$transform === void 0 ? meaninglessTransform : _params$transform, + _params$symbol = params.symbol, + symbol = _params$symbol === void 0 ? false : _params$symbol, + _params$mask = params.mask, + mask = _params$mask === void 0 ? null : _params$mask, + _params$maskId = params.maskId, + maskId = _params$maskId === void 0 ? null : _params$maskId, + _params$title = params.title, + title = _params$title === void 0 ? null : _params$title, + _params$titleId = params.titleId, + titleId = _params$titleId === void 0 ? null : _params$titleId, + _params$classes = params.classes, + classes = _params$classes === void 0 ? [] : _params$classes, + _params$attributes = params.attributes, + attributes = _params$attributes === void 0 ? {} : _params$attributes, + _params$styles = params.styles, + styles = _params$styles === void 0 ? {} : _params$styles; + if (!iconDefinition) return; + var prefix = iconDefinition.prefix, + iconName = iconDefinition.iconName, + icon = iconDefinition.icon; + return apiObject(_objectSpread({ + type: 'icon' + }, iconDefinition), function () { + ensureCss(); + + if (config.autoA11y) { + if (title) { + attributes['aria-labelledby'] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); + } else { + attributes['aria-hidden'] = 'true'; + attributes['focusable'] = 'false'; + } + } + + return makeInlineSvgAbstract({ + icons: { + main: asFoundIcon(icon), + mask: mask ? asFoundIcon(mask.icon) : { + found: false, + width: null, + height: null, + icon: {} + } + }, + prefix: prefix, + iconName: iconName, + transform: _objectSpread({}, meaninglessTransform, transform), + symbol: symbol, + title: title, + maskId: maskId, + titleId: titleId, + extra: { + attributes: attributes, + styles: styles, + classes: classes + } + }); + }); +}); + +const RPG = { + acid: '', + acorn: '', + "alien-fire": '', + "all-for-one": '', + "alligator-clip": '', + "ammo-bag": '', + anchor: '', + "angel-wings": '', + ankh: '', + anvil: '', + apple: '', + aquarius: '', + "arcane-mask": '', + archer: '', + "archery-target": '', + arena: '', + aries: '', + "arrow-cluster": '', + "arrow-flights": '', + arson: '', + aura: '', + aware: '', + "axe-swing": '', + axe: '', + ball: '', + "barbed-arrow": '', + barrier: '', + "bat-sword": '', + "battered-axe": '', + batteries: '', + "battery-0": '', + "battery-100": '', + "battery-25": '', + "battery-50": '', + "battery-75": '', + "battery-black": '', + "battery-negative": '', + "battery-positive": '', + "battery-white": '', + batwings: '', + "beam-wake": '', + "bear-trap": '', + beer: '', + beetle: '', + bell: '', + biohazard: '', + "bird-claw": '', + "bird-mask": '', + "blade-bite": '', + blast: '', + blaster: '', + "bleeding-eye": '', + "bleeding-hearts": '', + "bolt-shield": '', + "bomb-explosion": '', + bombs: '', + "bone-bite": '', + "bone-knife": '', + book: '', + boomerang: '', + "boot-stomp": '', + "bottle-vapors": '', + "bottled-bolt": '', + "bottom-right": '', + "bowie-knife": '', + "bowling-pin": '', + "brain-freeze": '', + "brandy-bottle": '', + bridge: '', + "broadhead-arrow": '', + broadsword: '', + "broken-bone": '', + "broken-bottle": '', + "broken-heart": '', + "broken-shield": '', + "broken-skull": '', + "bubbling-potion": '', + bullets: '', + "burning-book": '', + "burning-embers": '', + "burning-eye": '', + "burning-meteor": '', + "burst-blob": '', + butterfly: '', + campfire: '', + cancel: '', + cancer: '', + "candle-fire": '', + candle: '', + "cannon-shot": '', + capitol: '', + capricorn: '', + carrot: '', + "castle-emblem": '', + "castle-flag": '', + cat: '', + chain: '', + cheese: '', + "chemical-arrow": '', + chessboard: '', + "chicken-leg": '', + "circle-of-circles": '', + "circular-saw": '', + "circular-shield": '', + "cloak-and-dagger": '', + clockwork: '', + clover: '', + "clovers-card": '', + clovers: '', + "cluster-bomb": '', + "coffee-mug": '', + "cog-wheel": '', + cog: '', + "cold-heart": '', + compass: '', + "corked-tube": '', + "crab-claw": '', + "cracked-helm": '', + "cracked-shield": '', + "croc-sword": '', + crossbow: '', + "crossed-axes": '', + "crossed-bones": '', + "crossed-pistols": '', + "crossed-sabres": '', + "crossed-swords": '', + "crown-of-thorns": '', + crown: '', + "crowned-heart": '', + crush: '', + "crystal-ball": '', + "crystal-cluster": '', + "crystal-wand": '', + crystals: '', + cubes: '', + "cut-palm": '', + cycle: '', + daggers: '', + daisy: '', + "dead-tree": '', + "death-skull": '', + decapitation: '', + defibrillate: '', + demolish: '', + "dervish-swords": '', + "desert-skull": '', + diamond: '', + "diamonds-card": '', + diamonds: '', + "dice-five": '', + "dice-four": '', + "dice-one": '', + "dice-six": '', + "dice-three": '', + "dice-two": '', + dinosaur: '', + divert: '', + "diving-dagger": '', + "double-team": '', + doubled: '', + "dragon-breath": '', + "dragon-wing": '', + dragon: '', + dragonfly: '', + drill: '', + "dripping-blade": '', + "dripping-knife": '', + "dripping-sword": '', + "droplet-splash": '', + droplet: '', + droplets: '', + duel: '', + "egg-pod": '', + egg: '', + eggplant: '', + emerald: '', + energise: '', + explosion: '', + "explosive-materials": '', + "eye-monster": '', + "eye-shield": '', + eyeball: '', + "fairy-wand": '', + fairy: '', + "fall-down": '', + falling: '', + "fast-ship": '', + "feather-wing": '', + "feathered-wing": '', + fedora: '', + "fire-bomb": '', + "fire-breath": '', + "fire-ring": '', + "fire-shield": '', + "fire-symbol": '', + fire: '', + "fireball-sword": '', + fish: '', + "fizzing-flask": '', + "flame-symbol": '', + "flaming-arrow": '', + "flaming-claw": '', + "flaming-trident": '', + flask: '', + "flat-hammer": '', + flower: '', + flowers: '', + "fluffy-swirl": '', + "focused-lightning": '', + "food-chain": '', + footprint: '', + forging: '', + forward: '', + fox: '', + "frost-emblem": '', + frostfire: '', + "frozen-arrow": '', + "gamepad-cross": '', + gavel: '', + "gear-hammer": '', + "gear-heart": '', + gears: '', + gecko: '', + "gem-pendant": '', + gem: '', + gemini: '', + "glass-heart": '', + gloop: '', + "gold-bar": '', + "grappling-hook": '', + "grass-patch": '', + grass: '', + grenade: '', + groundbreaker: '', + "guarded-tower": '', + guillotine: '', + halberd: '', + "hammer-drop": '', + hammer: '', + "hand-emblem": '', + "hand-saw": '', + hand: '', + "harpoon-trident": '', + "health-decrease": '', + "health-increase": '', + health: '', + "heart-bottle": '', + "heart-tower": '', + heartburn: '', + "hearts-card": '', + hearts: '', + "heat-haze": '', + "heavy-fall": '', + "heavy-shield": '', + helmet: '', + help: '', + "hive-emblem": '', + "hole-ladder": '', + honeycomb: '', + hood: '', + "horn-call": '', + horns: '', + horseshoe: '', + "hospital-cross": '', + "hot-surface": '', + hourglass: '', + "hydra-shot": '', + hydra: '', + "ice-cube": '', + implosion: '', + incense: '', + "insect-jaws": '', + interdiction: '', + jetpack: '', + "jigsaw-piece": '', + kaleidoscope: '', + kettlebell: '', + "key-basic": '', + key: '', + "kitchen-knives": '', + "knife-fork": '', + knife: '', + "knight-helmet": '', + kunai: '', + "lantern-flame": '', + "large-hammer": '', + "laser-blast": '', + "laser-site": '', + lava: '', + leaf: '', + leo: '', + "level-four-advanced": '', + "level-four": '', + "level-three-advanced": '', + "level-three": '', + "level-two-advanced": '', + "level-two": '', + lever: '', + libra: '', + "light-bulb": '', + lighthouse: '', + "lightning-bolt": '', + "lightning-storm": '', + "lightning-sword": '', + "lightning-trio": '', + lightning: '', + lion: '', + "lit-candelabra": '', + load: '', + "locked-fortress": '', + "love-howl": '', + maggot: '', + magnet: '', + "mass-driver": '', + match: '', + "meat-hook": '', + meat: '', + "medical-pack": '', + "metal-gate": '', + microphone: '', + "mine-wagon": '', + "mining-diamonds": '', + mirror: '', + "monster-skull": '', + montains: '', + "moon-sun": '', + mp5: '', + "muscle-fat": '', + "muscle-up": '', + musket: '', + nails: '', + nodular: '', + noose: '', + nuclear: '', + ocarina: '', + "ocean-emblem": '', + octopus: '', + omega: '', + "on-target": '', + ophiuchus: '', + overhead: '', + overmind: '', + "palm-tree": '', + pawn: '', + pawprint: '', + "perspective-dice-five": '', + "perspective-dice-four": '', + "perspective-dice-one": '', + "perspective-dice-random": '', + "perspective-dice-six-two": '', + "perspective-dice-six": '', + "perspective-dice-three": '', + pill: '', + pills: '', + "pine-tree": '', + "ping-pong": '', + pisces: '', + "plain-dagger": '', + "player-despair": '', + "player-dodge": '', + "player-king": '', + "player-lift": '', + "player-pain": '', + "player-pyromaniac": '', + "player-shot": '', + "player-teleport": '', + "player-thunder-struck": '', + player: '', + podium: '', + "poison-cloud": '', + potion: '', + pyramids: '', + "queen-crown": '', + "quill-ink": '', + rabbit: '', + "radar-dish": '', + "radial-balance": '', + radioactive: '', + raven: '', + reactor: '', + recycle: '', + regeneration: '', + "relic-blade": '', + repair: '', + reverse: '', + revolver: '', + rifle: '', + "ringing-bell": '', + "roast-chicken": '', + "robot-arm": '', + "round-bottom-flask": '', + "round-shield": '', + rss: '', + "rune-stone": '', + sagittarius: '', + sapphire: '', + satellite: '', + save: '', + scorpio: '', + "scroll-unfurled": '', + scythe: '', + "sea-serpent": '', + seagull: '', + shark: '', + sheep: '', + sheriff: '', + shield: '', + "ship-emblem": '', + "shoe-prints": '', + "shot-through-the-heart": '', + "shotgun-shell": '', + shovel: '', + shuriken: '', + sickle: '', + sideswipe: '', + site: '', + "skull-trophy": '', + skull: '', + "slash-ring": '', + "small-fire": '', + snail: '', + snake: '', + snorkel: '', + snowflake: '', + "soccer-ball": '', + "spades-card": '', + spades: '', + "spawn-node": '', + "spear-head": '', + "speech-bubble": '', + "speech-bubbles": '', + "spider-face": '', + spikeball: '', + "spiked-mace": '', + "spiked-tentacle": '', + "spinning-sword": '', + "spiral-shell": '', + splash: '', + "spray-can": '', + "sprout-emblem": '', + sprout: '', + stopwatch: '', + "suckered-tentacle": '', + suits: '', + "sun-symbol": '', + sun: '', + sunbeams: '', + "super-mushroom": '', + "supersonic-arrow": '', + "surveillance-camera": '', + syringe: '', + "target-arrows": '', + "target-laser": '', + targeted: '', + taurus: '', + telescope: '', + tentacle: '', + tesla: '', + "thorn-arrow": '', + "thorny-vine": '', + "three-keys": '', + "tic-tac-toe": '', + toast: '', + tombstone: '', + tooth: '', + torch: '', + tower: '', + trail: '', + "trefoil-lily": '', + trident: '', + triforce: '', + trophy: '', + turd: '', + "two-dragons": '', + "two-hearts": '', + uncertainty: '', + underhand: '', + unplugged: '', + vase: '', + "venomous-snake": '', + vest: '', + vial: '', + "vine-whip": '', + virgo: '', + "water-drop": '', + wifi: '', + "wireless-signal": '', + "wolf-head": '', + "wolf-howl": '', + "wooden-sign": '', + wrench: '', + wyvern: '', + "x-mark": '', + "zebra-shield": '', + "zigzag-leaf": '' +}; + +library.add(_iconsCache, faCopy$1); +const COPY_BUTTON_ICON = icon(findIconDefinition({ + iconName: "copy", + prefix: "far" +})).node[0]; +const WARNING_ICON = icon(findIconDefinition({ + iconName: "exclamation-triangle", + prefix: "fas" +})).node[0]; +const RPGIconNames = new Map(Object.keys(RPG).map((i) => { + return [ + i, + { + name: i, + type: "rpg" + } + ]; +})); +const FontAwesomeIconNames = new Map(Object.values(_iconsCache).map((i) => { + return [ + i.iconName, + { name: i.iconName, type: "font-awesome" } + ]; +})); +const iconDefinitions = [ + ...FontAwesomeIconNames.values(), + ...RPGIconNames.values() +]; +function getIconType(str) { + if (findIconDefinition({ iconName: str, prefix: "fas" })) + return "font-awesome"; + if (RPG[str]) + return "rpg"; +} +function getIconModuleName(icon) { + if (icon.type === "rpg") + return "RPG Awesome"; + if (icon.type === "font-awesome") + return "Font Awesome"; +} +function getIconNode(item) { + if (item.type === "image") { + const img = new Image(); + img.src = item.name; + return img; + } + if (item.type === "rpg") { + if (!RPG[item.name]) + return null; + const el = createDiv(); + el.innerHTML = RPG[item.name]; + return el.children[0]; + } + if (!findIconDefinition({ + iconName: item.name, + prefix: "fas" + })) + return null; + return icon(findIconDefinition({ + iconName: item.name, + prefix: "fas" + })).node[0]; +} + +function getID() { + return "ID_xyxyxyxyxyxy".replace(/[xy]/g, function (c) { + var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; + return v.toString(16); + }); +} +function getMatches(src, from, toMatch) { + const split = src.split("\n").slice(from); + const first = split.indexOf(split.find((l) => l == toMatch)); + let next = first + 1; + for (; next < split.length; next++) { + if (!/^(?: {2,4}|\t)+[\s\S]*?/.test(split[next])) + break; + } + let innerSrc = split.slice(first + 1, next).join("\n"); + const toRemove = innerSrc.split("\n")[0].match(/^(\s+)/); + innerSrc = innerSrc.replace(new RegExp(`^${toRemove[0] || ""}`, "gm"), ""); + return { + start: first + from, + end: next + from - 1, + src: innerSrc, + type: toMatch.split("-").pop() + }; +} +function startsWithAny(str, needles) { + for (let i = 0; i < needles.length; i++) { + if (str.startsWith(needles[i])) { + return i; + } + } + return false; +} +function getParametersFromSource(type, src) { + const keywordTokens = ["title:", "collapse:", "icon:", "color:"]; + const keywords = ["title", "collapse", "icon", "color"]; + let lines = src.split("\n"); + let skipLines = 0; + let params = {}; + for (let i = 0; i < lines.length; i++) { + let keywordIndex = startsWithAny(lines[i], keywordTokens); + if (keywordIndex === false) { + break; + } + let foundKeyword = keywords[keywordIndex]; + if (params[foundKeyword] !== undefined) { + break; + } + params[foundKeyword] = lines[i] + .substr(keywordTokens[keywordIndex].length) + .trim(); + ++skipLines; + } + let { title = type[0].toUpperCase() + type.slice(1).toLowerCase(), collapse, icon, color } = params; + let content = lines.slice(skipLines).join("\n"); + /** + * If the admonition should collapse, but something other than open or closed was provided, set to closed. + */ + if (collapse !== undefined && + collapse !== "none" && + collapse !== "open" && + collapse !== "closed") { + collapse = "closed"; + } + /** + * If the admonition should collapse, but title was blanked, set the default title. + */ + if (title.trim() === "" && collapse !== undefined && collapse !== "none") { + title = type[0].toUpperCase() + type.slice(1).toLowerCase(); + new obsidian.Notice("An admonition must have a title if it is collapsible."); + } + return { title, collapse, content, icon, color }; +} +function getAdmonitionElement(type, title, icon, color, collapse, id) { + var _a, _b; + let admonition, titleEl, attrs = { + style: `--admonition-color: ${color};` + }; + if (collapse && collapse != "none") { + if (collapse === "open") { + attrs.open = "open"; + } + admonition = createEl("details", { + cls: `admonition admonition-${type} admonition-plugin`, + attr: attrs + }); + titleEl = admonition.createEl("summary", { + cls: `admonition-title ${!(title === null || title === void 0 ? void 0 : title.trim().length) ? "no-title" : ""}` + }); + } + else { + admonition = createDiv({ + cls: `admonition admonition-${type} admonition-plugin`, + attr: attrs + }); + titleEl = admonition.createDiv({ + cls: `admonition-title ${!(title === null || title === void 0 ? void 0 : title.trim().length) ? "no-title" : ""}` + }); + } + if (id) { + admonition.id = id; + } + if (title && title.trim().length) { + /** + * Title structure + * .admonition-title + * .admonition-title-content - Rendered Markdown top-level element (e.g. H1/2/3 etc, p) + * div.admonition-title-icon + * svg + * div.admonition-title-markdown - Container of rendered markdown + * ...rendered markdown children... + */ + //get markdown + const markdownHolder = createDiv(); + obsidian.MarkdownRenderer.renderMarkdown(title, markdownHolder, "", null); + //admonition-title-content is first child of rendered markdown + const admonitionTitleContent = ((_a = markdownHolder.children[0]) === null || _a === void 0 ? void 0 : _a.tagName) === "P" + ? createDiv() + : markdownHolder.children[0]; + //get children of markdown element, then remove them + const markdownElements = Array.from(((_b = markdownHolder.children[0]) === null || _b === void 0 ? void 0 : _b.childNodes) || []); + admonitionTitleContent.innerHTML = ""; + admonitionTitleContent.addClass("admonition-title-content"); + //build icon element + const iconEl = admonitionTitleContent.createDiv("admonition-title-icon"); + if (icon && icon.name && icon.type) { + iconEl.appendChild(getIconNode(icon)); + } + //add markdown children back + const admonitionTitleMarkdown = admonitionTitleContent.createDiv("admonition-title-markdown"); + for (let i = 0; i < markdownElements.length; i++) { + admonitionTitleMarkdown.appendChild(markdownElements[i]); + } + titleEl.appendChild(admonitionTitleContent || createDiv()); + } + //add them to title element + if (collapse) { + titleEl.createDiv("collapser").createDiv("handle"); + } + return admonition; +} +function getAdmonitionElementAsync(type, title, icon, color, collapse, id) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + let admonition, titleEl, attrs = { + style: `--admonition-color: ${color};` + }; + if (collapse) { + if (collapse === "open") { + attrs.open = "open"; + } + admonition = createEl("details", { + cls: `admonition admonition-${type} admonition-plugin admonition-plugin-async`, + attr: attrs + }); + titleEl = admonition.createEl("summary", { + cls: `admonition-title ${!title.trim().length ? "no-title" : ""}` + }); + } + else { + admonition = createDiv({ + cls: `admonition admonition-${type} admonition-plugin`, + attr: attrs + }); + titleEl = admonition.createDiv({ + cls: `admonition-title ${!title.trim().length ? "no-title" : ""}` + }); + } + if (id) { + admonition.id = id; + } + if (title && title.trim().length) { + // + // Title structure + // .admonition-title + // .admonition-title-content - Rendered Markdown top-level element (e.g. H1/2/3 etc, p) + // div.admonition-title-icon + // svg + // div.admonition-title-markdown - Container of rendered markdown + // ...rendered markdown children... + // + //get markdown + const markdownHolder = createDiv(); + yield obsidian.MarkdownRenderer.renderMarkdown(title, markdownHolder, "", null); + //admonition-title-content is first child of rendered markdown + const admonitionTitleContent = markdownHolder.children[0].tagName === "P" + ? createDiv() + : markdownHolder.children[0]; + //get children of markdown element, then remove them + const markdownElements = Array.from(((_a = markdownHolder.children[0]) === null || _a === void 0 ? void 0 : _a.childNodes) || []); + admonitionTitleContent.innerHTML = ""; + admonitionTitleContent.addClass("admonition-title-content"); + //build icon element + const iconEl = admonitionTitleContent.createDiv("admonition-title-icon"); + if (icon && icon.name && icon.type) { + iconEl.appendChild(getIconNode(icon)); + } + //add markdown children back + const admonitionTitleMarkdown = admonitionTitleContent.createDiv("admonition-title-markdown"); + for (let i = 0; i < markdownElements.length; i++) { + admonitionTitleMarkdown.appendChild(markdownElements[i]); + } + titleEl.appendChild(admonitionTitleContent || createDiv()); + } + //add them to title element + if (collapse) { + titleEl.createDiv("collapser").createDiv("handle"); + } + return admonition; + }); +} + +const ADD_ADMONITION_COMMAND_ICON = ``; +const ADD_COMMAND_NAME = Symbol("add-command"); +const REMOVE_ADMONITION_COMMAND_ICON = ``; +const REMOVE_COMMAND_NAME = Symbol("remove-command"); +const ADMONITION_MAP = { + note: { + type: "note", + color: "68, 138, 255", + icon: { + type: "font-awesome", + name: "pencil-alt" + }, + command: false + }, + seealso: { + type: "note", + color: "68, 138, 255", + icon: { + type: "font-awesome", + name: "pencil-alt" + }, + command: false + }, + abstract: { + type: "abstract", + color: "0, 176, 255", + icon: { + type: "font-awesome", + name: "book" + }, + command: false + }, + summary: { + type: "abstract", + color: "0, 176, 255", + icon: { + type: "font-awesome", + name: "book" + }, + command: false + }, + info: { + type: "info", + color: "0, 184, 212", + icon: { + type: "font-awesome", + name: "info-circle" + }, + command: false + }, + todo: { + type: "info", + color: "0, 184, 212", + icon: { + type: "font-awesome", + name: "info-circle" + }, + command: false + }, + tip: { + type: "tip", + color: "0, 191, 165", + icon: { + type: "font-awesome", + name: "fire" + }, + command: false + }, + hint: { + type: "tip", + color: "0, 191, 165", + icon: { + type: "font-awesome", + name: "fire" + }, + command: false + }, + important: { + type: "tip", + color: "0, 191, 165", + icon: { + type: "font-awesome", + name: "fire" + }, + command: false + }, + success: { + type: "success", + color: "0, 200, 83", + icon: { + type: "font-awesome", + name: "check-circle" + }, + command: false + }, + check: { + type: "success", + color: "0, 200, 83", + icon: { + type: "font-awesome", + name: "check-circle" + }, + command: false + }, + done: { + type: "success", + color: "0, 200, 83", + icon: { + type: "font-awesome", + name: "check-circle" + }, + command: false + }, + question: { + type: "question", + color: "100, 221, 23", + icon: { + type: "font-awesome", + name: "question-circle" + }, + command: false + }, + help: { + type: "question", + color: "100, 221, 23", + icon: { + type: "font-awesome", + name: "question-circle" + }, + command: false + }, + faq: { + type: "question", + color: "100, 221, 23", + icon: { + type: "font-awesome", + name: "question-circle" + }, + command: false + }, + warning: { + type: "warning", + color: "255, 145, 0", + icon: { + type: "font-awesome", + name: "exclamation-triangle" + }, + command: false + }, + caution: { + type: "warning", + color: "255, 145, 0", + icon: { + type: "font-awesome", + name: "exclamation-triangle" + }, + command: false + }, + attention: { + type: "warning", + color: "255, 145, 0", + icon: { + type: "font-awesome", + name: "exclamation-triangle" + }, + command: false + }, + failure: { + type: "failure", + color: "255, 82, 82", + icon: { + type: "font-awesome", + name: "times-circle" + }, + command: false + }, + fail: { + type: "failure", + color: "255, 82, 82", + icon: { + type: "font-awesome", + name: "times-circle" + }, + command: false + }, + missing: { + type: "failure", + color: "255, 82, 82", + icon: { + type: "font-awesome", + name: "times-circle" + }, + command: false + }, + danger: { + type: "danger", + color: "255, 23, 68", + icon: { + type: "font-awesome", + name: "bolt" + }, + command: false + }, + error: { + type: "danger", + color: "255, 23, 68", + icon: { + type: "font-awesome", + name: "bolt" + }, + command: false + }, + bug: { + type: "bug", + color: "245, 0, 87", + icon: { + type: "font-awesome", + name: "bug" + }, + command: false + }, + example: { + type: "example", + color: "124, 77, 255", + icon: { + type: "font-awesome", + name: "list-ol" + }, + command: false + }, + quote: { + type: "quote", + color: "158, 158, 158", + icon: { + type: "font-awesome", + name: "quote-right" + }, + command: false + }, + cite: { + type: "quote", + color: "158, 158, 158", + icon: { + type: "font-awesome", + name: "quote-right" + }, + command: false + } +}; + +var top = 'top'; +var bottom = 'bottom'; +var right = 'right'; +var left = 'left'; +var auto = 'auto'; +var basePlacements = [top, bottom, right, left]; +var start = 'start'; +var end = 'end'; +var clippingParents = 'clippingParents'; +var viewport = 'viewport'; +var popper = 'popper'; +var reference = 'reference'; +var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { + return acc.concat([placement + "-" + start, placement + "-" + end]); +}, []); +var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { + return acc.concat([placement, placement + "-" + start, placement + "-" + end]); +}, []); // modifiers that need to read the DOM + +var beforeRead = 'beforeRead'; +var read = 'read'; +var afterRead = 'afterRead'; // pure-logic modifiers + +var beforeMain = 'beforeMain'; +var main = 'main'; +var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) + +var beforeWrite = 'beforeWrite'; +var write = 'write'; +var afterWrite = 'afterWrite'; +var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; + +function getNodeName(element) { + return element ? (element.nodeName || '').toLowerCase() : null; +} + +function getWindow(node) { + if (node == null) { + return window; + } + + if (node.toString() !== '[object Window]') { + var ownerDocument = node.ownerDocument; + return ownerDocument ? ownerDocument.defaultView || window : window; + } + + return node; +} + +function isElement(node) { + var OwnElement = getWindow(node).Element; + return node instanceof OwnElement || node instanceof Element; +} + +function isHTMLElement(node) { + var OwnElement = getWindow(node).HTMLElement; + return node instanceof OwnElement || node instanceof HTMLElement; +} + +function isShadowRoot(node) { + // IE 11 has no ShadowRoot + if (typeof ShadowRoot === 'undefined') { + return false; + } + + var OwnElement = getWindow(node).ShadowRoot; + return node instanceof OwnElement || node instanceof ShadowRoot; +} + +// and applies them to the HTMLElements such as popper and arrow + +function applyStyles(_ref) { + var state = _ref.state; + Object.keys(state.elements).forEach(function (name) { + var style = state.styles[name] || {}; + var attributes = state.attributes[name] || {}; + var element = state.elements[name]; // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } // Flow doesn't support to extend this property, but it's the most + // effective way to apply styles to an HTMLElement + // $FlowFixMe[cannot-write] + + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (name) { + var value = attributes[name]; + + if (value === false) { + element.removeAttribute(name); + } else { + element.setAttribute(name, value === true ? '' : value); + } + }); + }); +} + +function effect$2(_ref2) { + var state = _ref2.state; + var initialStyles = { + popper: { + position: state.options.strategy, + left: '0', + top: '0', + margin: '0' + }, + arrow: { + position: 'absolute' + }, + reference: {} + }; + Object.assign(state.elements.popper.style, initialStyles.popper); + state.styles = initialStyles; + + if (state.elements.arrow) { + Object.assign(state.elements.arrow.style, initialStyles.arrow); + } + + return function () { + Object.keys(state.elements).forEach(function (name) { + var element = state.elements[name]; + var attributes = state.attributes[name] || {}; + var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them + + var style = styleProperties.reduce(function (style, property) { + style[property] = ''; + return style; + }, {}); // arrow is optional + virtual elements + + if (!isHTMLElement(element) || !getNodeName(element)) { + return; + } + + Object.assign(element.style, style); + Object.keys(attributes).forEach(function (attribute) { + element.removeAttribute(attribute); + }); + }); + }; +} // eslint-disable-next-line import/no-unused-modules + + +var applyStyles$1 = { + name: 'applyStyles', + enabled: true, + phase: 'write', + fn: applyStyles, + effect: effect$2, + requires: ['computeStyles'] +}; + +function getBasePlacement(placement) { + return placement.split('-')[0]; +} + +var round$1 = Math.round; +function getBoundingClientRect(element, includeScale) { + if (includeScale === void 0) { + includeScale = false; + } + + var rect = element.getBoundingClientRect(); + var scaleX = 1; + var scaleY = 1; + + if (isHTMLElement(element) && includeScale) { + // Fallback to 1 in case both values are `0` + scaleX = rect.width / element.offsetWidth || 1; + scaleY = rect.height / element.offsetHeight || 1; + } + + return { + width: round$1(rect.width / scaleX), + height: round$1(rect.height / scaleY), + top: round$1(rect.top / scaleY), + right: round$1(rect.right / scaleX), + bottom: round$1(rect.bottom / scaleY), + left: round$1(rect.left / scaleX), + x: round$1(rect.left / scaleX), + y: round$1(rect.top / scaleY) + }; +} + +// means it doesn't take into account transforms. + +function getLayoutRect(element) { + var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. + // Fixes https://github.com/popperjs/popper-core/issues/1223 + + var width = element.offsetWidth; + var height = element.offsetHeight; + + if (Math.abs(clientRect.width - width) <= 1) { + width = clientRect.width; + } + + if (Math.abs(clientRect.height - height) <= 1) { + height = clientRect.height; + } + + return { + x: element.offsetLeft, + y: element.offsetTop, + width: width, + height: height + }; +} + +function contains(parent, child) { + var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method + + if (parent.contains(child)) { + return true; + } // then fallback to custom implementation with Shadow DOM support + else if (rootNode && isShadowRoot(rootNode)) { + var next = child; + + do { + if (next && parent.isSameNode(next)) { + return true; + } // $FlowFixMe[prop-missing]: need a better way to handle this... + + + next = next.parentNode || next.host; + } while (next); + } // Give up, the result is false + + + return false; +} + +function getComputedStyle(element) { + return getWindow(element).getComputedStyle(element); +} + +function isTableElement(element) { + return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; +} + +function getDocumentElement(element) { + // $FlowFixMe[incompatible-return]: assume body is always available + return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] + element.document) || window.document).documentElement; +} + +function getParentNode(element) { + if (getNodeName(element) === 'html') { + return element; + } + + return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle + // $FlowFixMe[incompatible-return] + // $FlowFixMe[prop-missing] + element.assignedSlot || // step into the shadow DOM of the parent of a slotted node + element.parentNode || ( // DOM Element detected + isShadowRoot(element) ? element.host : null) || // ShadowRoot detected + // $FlowFixMe[incompatible-call]: HTMLElement is a Node + getDocumentElement(element) // fallback + + ); +} + +function getTrueOffsetParent(element) { + if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 + getComputedStyle(element).position === 'fixed') { + return null; + } + + return element.offsetParent; +} // `.offsetParent` reports `null` for fixed elements, while absolute elements +// return the containing block + + +function getContainingBlock(element) { + var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1; + var isIE = navigator.userAgent.indexOf('Trident') !== -1; + + if (isIE && isHTMLElement(element)) { + // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport + var elementCss = getComputedStyle(element); + + if (elementCss.position === 'fixed') { + return null; + } + } + + var currentNode = getParentNode(element); + + while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { + var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that + // create a containing block. + // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block + + if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { + return currentNode; + } else { + currentNode = currentNode.parentNode; + } + } + + return null; +} // Gets the closest ancestor positioned element. Handles some edge cases, +// such as table ancestors and cross browser bugs. + + +function getOffsetParent(element) { + var window = getWindow(element); + var offsetParent = getTrueOffsetParent(element); + + while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') { + offsetParent = getTrueOffsetParent(offsetParent); + } + + if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) { + return window; + } + + return offsetParent || getContainingBlock(element) || window; +} + +function getMainAxisFromPlacement(placement) { + return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; +} + +var max = Math.max; +var min = Math.min; +var round = Math.round; + +function within(min$1, value, max$1) { + return max(min$1, min(value, max$1)); +} + +function getFreshSideObject() { + return { + top: 0, + right: 0, + bottom: 0, + left: 0 + }; +} + +function mergePaddingObject(paddingObject) { + return Object.assign({}, getFreshSideObject(), paddingObject); +} + +function expandToHashMap(value, keys) { + return keys.reduce(function (hashMap, key) { + hashMap[key] = value; + return hashMap; + }, {}); +} + +var toPaddingObject = function toPaddingObject(padding, state) { + padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { + placement: state.placement + })) : padding; + return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); +}; + +function arrow(_ref) { + var _state$modifiersData$; + + var state = _ref.state, + name = _ref.name, + options = _ref.options; + var arrowElement = state.elements.arrow; + var popperOffsets = state.modifiersData.popperOffsets; + var basePlacement = getBasePlacement(state.placement); + var axis = getMainAxisFromPlacement(basePlacement); + var isVertical = [left, right].indexOf(basePlacement) >= 0; + var len = isVertical ? 'height' : 'width'; + + if (!arrowElement || !popperOffsets) { + return; + } + + var paddingObject = toPaddingObject(options.padding, state); + var arrowRect = getLayoutRect(arrowElement); + var minProp = axis === 'y' ? top : left; + var maxProp = axis === 'y' ? bottom : right; + var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; + var startDiff = popperOffsets[axis] - state.rects.reference[axis]; + var arrowOffsetParent = getOffsetParent(arrowElement); + var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; + var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is + // outside of the popper bounds + + var min = paddingObject[minProp]; + var max = clientSize - arrowRect[len] - paddingObject[maxProp]; + var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; + var offset = within(min, center, max); // Prevents breaking syntax highlighting... + + var axisProp = axis; + state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); +} + +function effect$1(_ref2) { + var state = _ref2.state, + options = _ref2.options; + var _options$element = options.element, + arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; + + if (arrowElement == null) { + return; + } // CSS selector + + + if (typeof arrowElement === 'string') { + arrowElement = state.elements.popper.querySelector(arrowElement); + + if (!arrowElement) { + return; + } + } + + if (process.env.NODE_ENV !== "production") { + if (!isHTMLElement(arrowElement)) { + console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' ')); + } + } + + if (!contains(state.elements.popper, arrowElement)) { + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', 'element.'].join(' ')); + } + + return; + } + + state.elements.arrow = arrowElement; +} // eslint-disable-next-line import/no-unused-modules + + +var arrow$1 = { + name: 'arrow', + enabled: true, + phase: 'main', + fn: arrow, + effect: effect$1, + requires: ['popperOffsets'], + requiresIfExists: ['preventOverflow'] +}; + +var unsetSides = { + top: 'auto', + right: 'auto', + bottom: 'auto', + left: 'auto' +}; // Round the offsets to the nearest suitable subpixel based on the DPR. +// Zooming can change the DPR, but it seems to report a value that will +// cleanly divide the values into the appropriate subpixels. + +function roundOffsetsByDPR(_ref) { + var x = _ref.x, + y = _ref.y; + var win = window; + var dpr = win.devicePixelRatio || 1; + return { + x: round(round(x * dpr) / dpr) || 0, + y: round(round(y * dpr) / dpr) || 0 + }; +} + +function mapToStyles(_ref2) { + var _Object$assign2; + + var popper = _ref2.popper, + popperRect = _ref2.popperRect, + placement = _ref2.placement, + offsets = _ref2.offsets, + position = _ref2.position, + gpuAcceleration = _ref2.gpuAcceleration, + adaptive = _ref2.adaptive, + roundOffsets = _ref2.roundOffsets; + + var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets, + _ref3$x = _ref3.x, + x = _ref3$x === void 0 ? 0 : _ref3$x, + _ref3$y = _ref3.y, + y = _ref3$y === void 0 ? 0 : _ref3$y; + + var hasX = offsets.hasOwnProperty('x'); + var hasY = offsets.hasOwnProperty('y'); + var sideX = left; + var sideY = top; + var win = window; + + if (adaptive) { + var offsetParent = getOffsetParent(popper); + var heightProp = 'clientHeight'; + var widthProp = 'clientWidth'; + + if (offsetParent === getWindow(popper)) { + offsetParent = getDocumentElement(popper); + + if (getComputedStyle(offsetParent).position !== 'static') { + heightProp = 'scrollHeight'; + widthProp = 'scrollWidth'; + } + } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it + + + offsetParent = offsetParent; + + if (placement === top) { + sideY = bottom; // $FlowFixMe[prop-missing] + + y -= offsetParent[heightProp] - popperRect.height; + y *= gpuAcceleration ? 1 : -1; + } + + if (placement === left) { + sideX = right; // $FlowFixMe[prop-missing] + + x -= offsetParent[widthProp] - popperRect.width; + x *= gpuAcceleration ? 1 : -1; + } + } + + var commonStyles = Object.assign({ + position: position + }, adaptive && unsetSides); + + if (gpuAcceleration) { + var _Object$assign; + + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + } + + return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); +} + +function computeStyles(_ref4) { + var state = _ref4.state, + options = _ref4.options; + var _options$gpuAccelerat = options.gpuAcceleration, + gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, + _options$adaptive = options.adaptive, + adaptive = _options$adaptive === void 0 ? true : _options$adaptive, + _options$roundOffsets = options.roundOffsets, + roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; + + if (process.env.NODE_ENV !== "production") { + var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || ''; + + if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) { + return transitionProperty.indexOf(property) >= 0; + })) { + console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: "transform", "top", "right", "bottom", "left".', '\n\n', 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\n\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' ')); + } + } + + var commonStyles = { + placement: getBasePlacement(state.placement), + popper: state.elements.popper, + popperRect: state.rects.popper, + gpuAcceleration: gpuAcceleration + }; + + if (state.modifiersData.popperOffsets != null) { + state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.popperOffsets, + position: state.options.strategy, + adaptive: adaptive, + roundOffsets: roundOffsets + }))); + } + + if (state.modifiersData.arrow != null) { + state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { + offsets: state.modifiersData.arrow, + position: 'absolute', + adaptive: false, + roundOffsets: roundOffsets + }))); + } + + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-placement': state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var computeStyles$1 = { + name: 'computeStyles', + enabled: true, + phase: 'beforeWrite', + fn: computeStyles, + data: {} +}; + +var passive = { + passive: true +}; + +function effect(_ref) { + var state = _ref.state, + instance = _ref.instance, + options = _ref.options; + var _options$scroll = options.scroll, + scroll = _options$scroll === void 0 ? true : _options$scroll, + _options$resize = options.resize, + resize = _options$resize === void 0 ? true : _options$resize; + var window = getWindow(state.elements.popper); + var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); + + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.addEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.addEventListener('resize', instance.update, passive); + } + + return function () { + if (scroll) { + scrollParents.forEach(function (scrollParent) { + scrollParent.removeEventListener('scroll', instance.update, passive); + }); + } + + if (resize) { + window.removeEventListener('resize', instance.update, passive); + } + }; +} // eslint-disable-next-line import/no-unused-modules + + +var eventListeners = { + name: 'eventListeners', + enabled: true, + phase: 'write', + fn: function fn() {}, + effect: effect, + data: {} +}; + +var hash$1 = { + left: 'right', + right: 'left', + bottom: 'top', + top: 'bottom' +}; +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, function (matched) { + return hash$1[matched]; + }); +} + +var hash = { + start: 'end', + end: 'start' +}; +function getOppositeVariationPlacement(placement) { + return placement.replace(/start|end/g, function (matched) { + return hash[matched]; + }); +} + +function getWindowScroll(node) { + var win = getWindow(node); + var scrollLeft = win.pageXOffset; + var scrollTop = win.pageYOffset; + return { + scrollLeft: scrollLeft, + scrollTop: scrollTop + }; +} + +function getWindowScrollBarX(element) { + // If has a CSS width greater than the viewport, then this will be + // incorrect for RTL. + // Popper 1 is broken in this case and never had a bug report so let's assume + // it's not an issue. I don't think anyone ever specifies width on + // anyway. + // Browsers where the left scrollbar doesn't cause an issue report `0` for + // this (e.g. Edge 2019, IE11, Safari) + return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; +} + +function getViewportRect(element) { + var win = getWindow(element); + var html = getDocumentElement(element); + var visualViewport = win.visualViewport; + var width = html.clientWidth; + var height = html.clientHeight; + var x = 0; + var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper + // can be obscured underneath it. + // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even + // if it isn't open, so if this isn't available, the popper will be detected + // to overflow the bottom of the screen too early. + + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently) + // In Chrome, it returns a value very close to 0 (+/-) but contains rounding + // errors due to floating point numbers, so we need to check precision. + // Safari returns a number <= 0, usually < -1 when pinch-zoomed + // Feature detection fails in mobile emulation mode in Chrome. + // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < + // 0.001 + // Fallback here: "Not Safari" userAgent + + if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + + return { + width: width, + height: height, + x: x + getWindowScrollBarX(element), + y: y + }; +} + +// of the `` and `` rect bounds if horizontally scrollable + +function getDocumentRect(element) { + var _element$ownerDocumen; + + var html = getDocumentElement(element); + var winScroll = getWindowScroll(element); + var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; + var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); + var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); + var x = -winScroll.scrollLeft + getWindowScrollBarX(element); + var y = -winScroll.scrollTop; + + if (getComputedStyle(body || html).direction === 'rtl') { + x += max(html.clientWidth, body ? body.clientWidth : 0) - width; + } + + return { + width: width, + height: height, + x: x, + y: y + }; +} + +function isScrollParent(element) { + // Firefox wants us to check `-x` and `-y` variations as well + var _getComputedStyle = getComputedStyle(element), + overflow = _getComputedStyle.overflow, + overflowX = _getComputedStyle.overflowX, + overflowY = _getComputedStyle.overflowY; + + return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); +} + +function getScrollParent(node) { + if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { + // $FlowFixMe[incompatible-return]: assume body is always available + return node.ownerDocument.body; + } + + if (isHTMLElement(node) && isScrollParent(node)) { + return node; + } + + return getScrollParent(getParentNode(node)); +} + +/* +given a DOM element, return the list of all scroll parents, up the list of ancesors +until we get to the top window object. This list is what we attach scroll listeners +to, because if any of these parent elements scroll, we'll need to re-calculate the +reference element's position. +*/ + +function listScrollParents(element, list) { + var _element$ownerDocumen; + + if (list === void 0) { + list = []; + } + + var scrollParent = getScrollParent(element); + var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); + var win = getWindow(scrollParent); + var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; + var updatedList = list.concat(target); + return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here + updatedList.concat(listScrollParents(getParentNode(target))); +} + +function rectToClientRect(rect) { + return Object.assign({}, rect, { + left: rect.x, + top: rect.y, + right: rect.x + rect.width, + bottom: rect.y + rect.height + }); +} + +function getInnerBoundingClientRect(element) { + var rect = getBoundingClientRect(element); + rect.top = rect.top + element.clientTop; + rect.left = rect.left + element.clientLeft; + rect.bottom = rect.top + element.clientHeight; + rect.right = rect.left + element.clientWidth; + rect.width = element.clientWidth; + rect.height = element.clientHeight; + rect.x = rect.left; + rect.y = rect.top; + return rect; +} + +function getClientRectFromMixedType(element, clippingParent) { + return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); +} // A "clipping parent" is an overflowable container with the characteristic of +// clipping (or hiding) overflowing elements with a position different from +// `initial` + + +function getClippingParents(element) { + var clippingParents = listScrollParents(getParentNode(element)); + var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0; + var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; + + if (!isElement(clipperElement)) { + return []; + } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 + + + return clippingParents.filter(function (clippingParent) { + return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; + }); +} // Gets the maximum area that the element is visible in due to any number of +// clipping parents + + +function getClippingRect(element, boundary, rootBoundary) { + var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); + var clippingParents = [].concat(mainClippingParents, [rootBoundary]); + var firstClippingParent = clippingParents[0]; + var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { + var rect = getClientRectFromMixedType(element, clippingParent); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromMixedType(element, firstClippingParent)); + clippingRect.width = clippingRect.right - clippingRect.left; + clippingRect.height = clippingRect.bottom - clippingRect.top; + clippingRect.x = clippingRect.left; + clippingRect.y = clippingRect.top; + return clippingRect; +} + +function getVariation(placement) { + return placement.split('-')[1]; +} + +function computeOffsets(_ref) { + var reference = _ref.reference, + element = _ref.element, + placement = _ref.placement; + var basePlacement = placement ? getBasePlacement(placement) : null; + var variation = placement ? getVariation(placement) : null; + var commonX = reference.x + reference.width / 2 - element.width / 2; + var commonY = reference.y + reference.height / 2 - element.height / 2; + var offsets; + + switch (basePlacement) { + case top: + offsets = { + x: commonX, + y: reference.y - element.height + }; + break; + + case bottom: + offsets = { + x: commonX, + y: reference.y + reference.height + }; + break; + + case right: + offsets = { + x: reference.x + reference.width, + y: commonY + }; + break; + + case left: + offsets = { + x: reference.x - element.width, + y: commonY + }; + break; + + default: + offsets = { + x: reference.x, + y: reference.y + }; + } + + var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; + + if (mainAxis != null) { + var len = mainAxis === 'y' ? 'height' : 'width'; + + switch (variation) { + case start: + offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); + break; + + case end: + offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); + break; + } + } + + return offsets; +} + +function detectOverflow(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$placement = _options.placement, + placement = _options$placement === void 0 ? state.placement : _options$placement, + _options$boundary = _options.boundary, + boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, + _options$rootBoundary = _options.rootBoundary, + rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, + _options$elementConte = _options.elementContext, + elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, + _options$altBoundary = _options.altBoundary, + altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, + _options$padding = _options.padding, + padding = _options$padding === void 0 ? 0 : _options$padding; + var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); + var altContext = elementContext === popper ? reference : popper; + var referenceElement = state.elements.reference; + var popperRect = state.rects.popper; + var element = state.elements[altBoundary ? altContext : elementContext]; + var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); + var referenceClientRect = getBoundingClientRect(referenceElement); + var popperOffsets = computeOffsets({ + reference: referenceClientRect, + element: popperRect, + strategy: 'absolute', + placement: placement + }); + var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); + var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect + // 0 or negative = within the clipping rect + + var overflowOffsets = { + top: clippingClientRect.top - elementClientRect.top + paddingObject.top, + bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, + left: clippingClientRect.left - elementClientRect.left + paddingObject.left, + right: elementClientRect.right - clippingClientRect.right + paddingObject.right + }; + var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element + + if (elementContext === popper && offsetData) { + var offset = offsetData[placement]; + Object.keys(overflowOffsets).forEach(function (key) { + var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; + var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; + overflowOffsets[key] += offset[axis] * multiply; + }); + } + + return overflowOffsets; +} + +function computeAutoPlacement(state, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + placement = _options.placement, + boundary = _options.boundary, + rootBoundary = _options.rootBoundary, + padding = _options.padding, + flipVariations = _options.flipVariations, + _options$allowedAutoP = _options.allowedAutoPlacements, + allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; + var variation = getVariation(placement); + var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { + return getVariation(placement) === variation; + }) : basePlacements; + var allowedPlacements = placements$1.filter(function (placement) { + return allowedAutoPlacements.indexOf(placement) >= 0; + }); + + if (allowedPlacements.length === 0) { + allowedPlacements = placements$1; + + if (process.env.NODE_ENV !== "production") { + console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(' ')); + } + } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... + + + var overflows = allowedPlacements.reduce(function (acc, placement) { + acc[placement] = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding + })[getBasePlacement(placement)]; + return acc; + }, {}); + return Object.keys(overflows).sort(function (a, b) { + return overflows[a] - overflows[b]; + }); +} + +function getExpandedFallbackPlacements(placement) { + if (getBasePlacement(placement) === auto) { + return []; + } + + var oppositePlacement = getOppositePlacement(placement); + return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; +} + +function flip(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + + if (state.modifiersData[name]._skip) { + return; + } + + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, + specifiedFallbackPlacements = options.fallbackPlacements, + padding = options.padding, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + _options$flipVariatio = options.flipVariations, + flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, + allowedAutoPlacements = options.allowedAutoPlacements; + var preferredPlacement = state.options.placement; + var basePlacement = getBasePlacement(preferredPlacement); + var isBasePlacement = basePlacement === preferredPlacement; + var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); + var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { + return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + flipVariations: flipVariations, + allowedAutoPlacements: allowedAutoPlacements + }) : placement); + }, []); + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var checksMap = new Map(); + var makeFallbackChecks = true; + var firstFittingPlacement = placements[0]; + + for (var i = 0; i < placements.length; i++) { + var placement = placements[i]; + + var _basePlacement = getBasePlacement(placement); + + var isStartVariation = getVariation(placement) === start; + var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; + var len = isVertical ? 'width' : 'height'; + var overflow = detectOverflow(state, { + placement: placement, + boundary: boundary, + rootBoundary: rootBoundary, + altBoundary: altBoundary, + padding: padding + }); + var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; + + if (referenceRect[len] > popperRect[len]) { + mainVariationSide = getOppositePlacement(mainVariationSide); + } + + var altVariationSide = getOppositePlacement(mainVariationSide); + var checks = []; + + if (checkMainAxis) { + checks.push(overflow[_basePlacement] <= 0); + } + + if (checkAltAxis) { + checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); + } + + if (checks.every(function (check) { + return check; + })) { + firstFittingPlacement = placement; + makeFallbackChecks = false; + break; + } + + checksMap.set(placement, checks); + } + + if (makeFallbackChecks) { + // `2` may be desired in some cases – research later + var numberOfChecks = flipVariations ? 3 : 1; + + var _loop = function _loop(_i) { + var fittingPlacement = placements.find(function (placement) { + var checks = checksMap.get(placement); + + if (checks) { + return checks.slice(0, _i).every(function (check) { + return check; + }); + } + }); + + if (fittingPlacement) { + firstFittingPlacement = fittingPlacement; + return "break"; + } + }; + + for (var _i = numberOfChecks; _i > 0; _i--) { + var _ret = _loop(_i); + + if (_ret === "break") break; + } + } + + if (state.placement !== firstFittingPlacement) { + state.modifiersData[name]._skip = true; + state.placement = firstFittingPlacement; + state.reset = true; + } +} // eslint-disable-next-line import/no-unused-modules + + +var flip$1 = { + name: 'flip', + enabled: true, + phase: 'main', + fn: flip, + requiresIfExists: ['offset'], + data: { + _skip: false + } +}; + +function getSideOffsets(overflow, rect, preventedOffsets) { + if (preventedOffsets === void 0) { + preventedOffsets = { + x: 0, + y: 0 + }; + } + + return { + top: overflow.top - rect.height - preventedOffsets.y, + right: overflow.right - rect.width + preventedOffsets.x, + bottom: overflow.bottom - rect.height + preventedOffsets.y, + left: overflow.left - rect.width - preventedOffsets.x + }; +} + +function isAnySideFullyClipped(overflow) { + return [top, right, bottom, left].some(function (side) { + return overflow[side] >= 0; + }); +} + +function hide(_ref) { + var state = _ref.state, + name = _ref.name; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var preventedOffsets = state.modifiersData.preventOverflow; + var referenceOverflow = detectOverflow(state, { + elementContext: 'reference' + }); + var popperAltOverflow = detectOverflow(state, { + altBoundary: true + }); + var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); + var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); + var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); + var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); + state.modifiersData[name] = { + referenceClippingOffsets: referenceClippingOffsets, + popperEscapeOffsets: popperEscapeOffsets, + isReferenceHidden: isReferenceHidden, + hasPopperEscaped: hasPopperEscaped + }; + state.attributes.popper = Object.assign({}, state.attributes.popper, { + 'data-popper-reference-hidden': isReferenceHidden, + 'data-popper-escaped': hasPopperEscaped + }); +} // eslint-disable-next-line import/no-unused-modules + + +var hide$1 = { + name: 'hide', + enabled: true, + phase: 'main', + requiresIfExists: ['preventOverflow'], + fn: hide +}; + +function distanceAndSkiddingToXY(placement, rects, offset) { + var basePlacement = getBasePlacement(placement); + var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; + + var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { + placement: placement + })) : offset, + skidding = _ref[0], + distance = _ref[1]; + + skidding = skidding || 0; + distance = (distance || 0) * invertDistance; + return [left, right].indexOf(basePlacement) >= 0 ? { + x: distance, + y: skidding + } : { + x: skidding, + y: distance + }; +} + +function offset(_ref2) { + var state = _ref2.state, + options = _ref2.options, + name = _ref2.name; + var _options$offset = options.offset, + offset = _options$offset === void 0 ? [0, 0] : _options$offset; + var data = placements.reduce(function (acc, placement) { + acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); + return acc; + }, {}); + var _data$state$placement = data[state.placement], + x = _data$state$placement.x, + y = _data$state$placement.y; + + if (state.modifiersData.popperOffsets != null) { + state.modifiersData.popperOffsets.x += x; + state.modifiersData.popperOffsets.y += y; + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var offset$1 = { + name: 'offset', + enabled: true, + phase: 'main', + requires: ['popperOffsets'], + fn: offset +}; + +function popperOffsets(_ref) { + var state = _ref.state, + name = _ref.name; + // Offsets are the actual position the popper needs to have to be + // properly positioned near its reference element + // This is the most basic placement, and will be adjusted by + // the modifiers in the next step + state.modifiersData[name] = computeOffsets({ + reference: state.rects.reference, + element: state.rects.popper, + strategy: 'absolute', + placement: state.placement + }); +} // eslint-disable-next-line import/no-unused-modules + + +var popperOffsets$1 = { + name: 'popperOffsets', + enabled: true, + phase: 'read', + fn: popperOffsets, + data: {} +}; + +function getAltAxis(axis) { + return axis === 'x' ? 'y' : 'x'; +} + +function preventOverflow(_ref) { + var state = _ref.state, + options = _ref.options, + name = _ref.name; + var _options$mainAxis = options.mainAxis, + checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, + _options$altAxis = options.altAxis, + checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, + boundary = options.boundary, + rootBoundary = options.rootBoundary, + altBoundary = options.altBoundary, + padding = options.padding, + _options$tether = options.tether, + tether = _options$tether === void 0 ? true : _options$tether, + _options$tetherOffset = options.tetherOffset, + tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; + var overflow = detectOverflow(state, { + boundary: boundary, + rootBoundary: rootBoundary, + padding: padding, + altBoundary: altBoundary + }); + var basePlacement = getBasePlacement(state.placement); + var variation = getVariation(state.placement); + var isBasePlacement = !variation; + var mainAxis = getMainAxisFromPlacement(basePlacement); + var altAxis = getAltAxis(mainAxis); + var popperOffsets = state.modifiersData.popperOffsets; + var referenceRect = state.rects.reference; + var popperRect = state.rects.popper; + var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { + placement: state.placement + })) : tetherOffset; + var data = { + x: 0, + y: 0 + }; + + if (!popperOffsets) { + return; + } + + if (checkMainAxis || checkAltAxis) { + var mainSide = mainAxis === 'y' ? top : left; + var altSide = mainAxis === 'y' ? bottom : right; + var len = mainAxis === 'y' ? 'height' : 'width'; + var offset = popperOffsets[mainAxis]; + var min$1 = popperOffsets[mainAxis] + overflow[mainSide]; + var max$1 = popperOffsets[mainAxis] - overflow[altSide]; + var additive = tether ? -popperRect[len] / 2 : 0; + var minLen = variation === start ? referenceRect[len] : popperRect[len]; + var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go + // outside the reference bounds + + var arrowElement = state.elements.arrow; + var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { + width: 0, + height: 0 + }; + var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); + var arrowPaddingMin = arrowPaddingObject[mainSide]; + var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want + // to include its full size in the calculation. If the reference is small + // and near the edge of a boundary, the popper can overflow even if the + // reference is not overflowing as well (e.g. virtual elements with no + // width or height) + + var arrowLen = within(0, referenceRect[len], arrowRect[len]); + var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue; + var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue; + var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); + var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; + var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0; + var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset; + var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue; + + if (checkMainAxis) { + var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); + popperOffsets[mainAxis] = preventedOffset; + data[mainAxis] = preventedOffset - offset; + } + + if (checkAltAxis) { + var _mainSide = mainAxis === 'x' ? top : left; + + var _altSide = mainAxis === 'x' ? bottom : right; + + var _offset = popperOffsets[altAxis]; + + var _min = _offset + overflow[_mainSide]; + + var _max = _offset - overflow[_altSide]; + + var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max); + + popperOffsets[altAxis] = _preventedOffset; + data[altAxis] = _preventedOffset - _offset; + } + } + + state.modifiersData[name] = data; +} // eslint-disable-next-line import/no-unused-modules + + +var preventOverflow$1 = { + name: 'preventOverflow', + enabled: true, + phase: 'main', + fn: preventOverflow, + requiresIfExists: ['offset'] +}; + +function getHTMLElementScroll(element) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; +} + +function getNodeScroll(node) { + if (node === getWindow(node) || !isHTMLElement(node)) { + return getWindowScroll(node); + } else { + return getHTMLElementScroll(node); + } +} + +function isElementScaled(element) { + var rect = element.getBoundingClientRect(); + var scaleX = rect.width / element.offsetWidth || 1; + var scaleY = rect.height / element.offsetHeight || 1; + return scaleX !== 1 || scaleY !== 1; +} // Returns the composite rect of an element relative to its offsetParent. +// Composite means it takes into account transforms as well as layout. + + +function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { + if (isFixed === void 0) { + isFixed = false; + } + + var isOffsetParentAnElement = isHTMLElement(offsetParent); + var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); + var documentElement = getDocumentElement(offsetParent); + var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled); + var scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + var offsets = { + x: 0, + y: 0 + }; + + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 + isScrollParent(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + + if (isHTMLElement(offsetParent)) { + offsets = getBoundingClientRect(offsetParent, true); + offsets.x += offsetParent.clientLeft; + offsets.y += offsetParent.clientTop; + } else if (documentElement) { + offsets.x = getWindowScrollBarX(documentElement); + } + } + + return { + x: rect.left + scroll.scrollLeft - offsets.x, + y: rect.top + scroll.scrollTop - offsets.y, + width: rect.width, + height: rect.height + }; +} + +function order(modifiers) { + var map = new Map(); + var visited = new Set(); + var result = []; + modifiers.forEach(function (modifier) { + map.set(modifier.name, modifier); + }); // On visiting object, check for its dependencies and visit them recursively + + function sort(modifier) { + visited.add(modifier.name); + var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); + requires.forEach(function (dep) { + if (!visited.has(dep)) { + var depModifier = map.get(dep); + + if (depModifier) { + sort(depModifier); + } + } + }); + result.push(modifier); + } + + modifiers.forEach(function (modifier) { + if (!visited.has(modifier.name)) { + // check for visited object + sort(modifier); + } + }); + return result; +} + +function orderModifiers(modifiers) { + // order based on dependencies + var orderedModifiers = order(modifiers); // order based on phase + + return modifierPhases.reduce(function (acc, phase) { + return acc.concat(orderedModifiers.filter(function (modifier) { + return modifier.phase === phase; + })); + }, []); +} + +function debounce(fn) { + var pending; + return function () { + if (!pending) { + pending = new Promise(function (resolve) { + Promise.resolve().then(function () { + pending = undefined; + resolve(fn()); + }); + }); + } + + return pending; + }; +} + +function format(str) { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + return [].concat(args).reduce(function (p, c) { + return p.replace(/%s/, c); + }, str); +} + +var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s'; +var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available'; +var VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options']; +function validateModifiers(modifiers) { + modifiers.forEach(function (modifier) { + Object.keys(modifier).forEach(function (key) { + switch (key) { + case 'name': + if (typeof modifier.name !== 'string') { + console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', "\"" + String(modifier.name) + "\"")); + } + + break; + + case 'enabled': + if (typeof modifier.enabled !== 'boolean') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', "\"" + String(modifier.enabled) + "\"")); + } + + case 'phase': + if (modifierPhases.indexOf(modifier.phase) < 0) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(', '), "\"" + String(modifier.phase) + "\"")); + } + + break; + + case 'fn': + if (typeof modifier.fn !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'effect': + if (typeof modifier.effect !== 'function') { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', "\"" + String(modifier.fn) + "\"")); + } + + break; + + case 'requires': + if (!Array.isArray(modifier.requires)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', "\"" + String(modifier.requires) + "\"")); + } + + break; + + case 'requiresIfExists': + if (!Array.isArray(modifier.requiresIfExists)) { + console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', "\"" + String(modifier.requiresIfExists) + "\"")); + } + + break; + + case 'options': + case 'data': + break; + + default: + console.error("PopperJS: an invalid property has been provided to the \"" + modifier.name + "\" modifier, valid properties are " + VALID_PROPERTIES.map(function (s) { + return "\"" + s + "\""; + }).join(', ') + "; but \"" + key + "\" was provided."); + } + + modifier.requires && modifier.requires.forEach(function (requirement) { + if (modifiers.find(function (mod) { + return mod.name === requirement; + }) == null) { + console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement)); + } + }); + }); + }); +} + +function uniqueBy(arr, fn) { + var identifiers = new Set(); + return arr.filter(function (item) { + var identifier = fn(item); + + if (!identifiers.has(identifier)) { + identifiers.add(identifier); + return true; + } + }); +} + +function mergeByName(modifiers) { + var merged = modifiers.reduce(function (merged, current) { + var existing = merged[current.name]; + merged[current.name] = existing ? Object.assign({}, existing, current, { + options: Object.assign({}, existing.options, current.options), + data: Object.assign({}, existing.data, current.data) + }) : current; + return merged; + }, {}); // IE11 does not support Object.values + + return Object.keys(merged).map(function (key) { + return merged[key]; + }); +} + +var INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.'; +var INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.'; +var DEFAULT_OPTIONS = { + placement: 'bottom', + modifiers: [], + strategy: 'absolute' +}; + +function areValidElements() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + return !args.some(function (element) { + return !(element && typeof element.getBoundingClientRect === 'function'); + }); +} + +function popperGenerator(generatorOptions) { + if (generatorOptions === void 0) { + generatorOptions = {}; + } + + var _generatorOptions = generatorOptions, + _generatorOptions$def = _generatorOptions.defaultModifiers, + defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, + _generatorOptions$def2 = _generatorOptions.defaultOptions, + defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; + return function createPopper(reference, popper, options) { + if (options === void 0) { + options = defaultOptions; + } + + var state = { + placement: 'bottom', + orderedModifiers: [], + options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), + modifiersData: {}, + elements: { + reference: reference, + popper: popper + }, + attributes: {}, + styles: {} + }; + var effectCleanupFns = []; + var isDestroyed = false; + var instance = { + state: state, + setOptions: function setOptions(options) { + cleanupModifierEffects(); + state.options = Object.assign({}, defaultOptions, state.options, options); + state.scrollParents = { + reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], + popper: listScrollParents(popper) + }; // Orders the modifiers based on their dependencies and `phase` + // properties + + var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers + + state.orderedModifiers = orderedModifiers.filter(function (m) { + return m.enabled; + }); // Validate the provided modifiers so that the consumer will get warned + // if one of the modifiers is invalid for any reason + + if (process.env.NODE_ENV !== "production") { + var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) { + var name = _ref.name; + return name; + }); + validateModifiers(modifiers); + + if (getBasePlacement(state.options.placement) === auto) { + var flipModifier = state.orderedModifiers.find(function (_ref2) { + var name = _ref2.name; + return name === 'flip'; + }); + + if (!flipModifier) { + console.error(['Popper: "auto" placements require the "flip" modifier be', 'present and enabled to work.'].join(' ')); + } + } + + var _getComputedStyle = getComputedStyle(popper), + marginTop = _getComputedStyle.marginTop, + marginRight = _getComputedStyle.marginRight, + marginBottom = _getComputedStyle.marginBottom, + marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can + // cause bugs with positioning, so we'll warn the consumer + + + if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) { + return parseFloat(margin); + })) { + console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' ')); + } + } + + runModifierEffects(); + return instance.update(); + }, + // Sync update – it will always be executed, even if not necessary. This + // is useful for low frequency updates where sync behavior simplifies the + // logic. + // For high frequency updates (e.g. `resize` and `scroll` events), always + // prefer the async Popper#update method + forceUpdate: function forceUpdate() { + if (isDestroyed) { + return; + } + + var _state$elements = state.elements, + reference = _state$elements.reference, + popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements + // anymore + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return; + } // Store the reference and popper rects to be read by modifiers + + + state.rects = { + reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), + popper: getLayoutRect(popper) + }; // Modifiers have the ability to reset the current update cycle. The + // most common use case for this is the `flip` modifier changing the + // placement, which then needs to re-run all the modifiers, because the + // logic was previously ran for the previous placement and is therefore + // stale/incorrect + + state.reset = false; + state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier + // is filled with the initial data specified by the modifier. This means + // it doesn't persist and is fresh on each update. + // To ensure persistent data, use `${name}#persistent` + + state.orderedModifiers.forEach(function (modifier) { + return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); + }); + var __debug_loops__ = 0; + + for (var index = 0; index < state.orderedModifiers.length; index++) { + if (process.env.NODE_ENV !== "production") { + __debug_loops__ += 1; + + if (__debug_loops__ > 100) { + console.error(INFINITE_LOOP_ERROR); + break; + } + } + + if (state.reset === true) { + state.reset = false; + index = -1; + continue; + } + + var _state$orderedModifie = state.orderedModifiers[index], + fn = _state$orderedModifie.fn, + _state$orderedModifie2 = _state$orderedModifie.options, + _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, + name = _state$orderedModifie.name; + + if (typeof fn === 'function') { + state = fn({ + state: state, + options: _options, + name: name, + instance: instance + }) || state; + } + } + }, + // Async and optimistically optimized update – it will not be executed if + // not necessary (debounced to run at most once-per-tick) + update: debounce(function () { + return new Promise(function (resolve) { + instance.forceUpdate(); + resolve(state); + }); + }), + destroy: function destroy() { + cleanupModifierEffects(); + isDestroyed = true; + } + }; + + if (!areValidElements(reference, popper)) { + if (process.env.NODE_ENV !== "production") { + console.error(INVALID_ELEMENT_ERROR); + } + + return instance; + } + + instance.setOptions(options).then(function (state) { + if (!isDestroyed && options.onFirstUpdate) { + options.onFirstUpdate(state); + } + }); // Modifiers have the ability to execute arbitrary code before the first + // update cycle runs. They will be executed in the same order as the update + // cycle. This is useful when a modifier adds some persistent data that + // other modifiers need to use, but the modifier is run after the dependent + // one. + + function runModifierEffects() { + state.orderedModifiers.forEach(function (_ref3) { + var name = _ref3.name, + _ref3$options = _ref3.options, + options = _ref3$options === void 0 ? {} : _ref3$options, + effect = _ref3.effect; + + if (typeof effect === 'function') { + var cleanupFn = effect({ + state: state, + name: name, + instance: instance, + options: options + }); + + var noopFn = function noopFn() {}; + + effectCleanupFns.push(cleanupFn || noopFn); + } + }); + } + + function cleanupModifierEffects() { + effectCleanupFns.forEach(function (fn) { + return fn(); + }); + effectCleanupFns = []; + } + + return instance; + }; +} + +var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; +var createPopper = /*#__PURE__*/popperGenerator({ + defaultModifiers: defaultModifiers +}); // eslint-disable-next-line import/no-unused-modules + +class Suggester { + constructor(owner, containerEl, scope) { + this.containerEl = containerEl; + this.owner = owner; + containerEl.on("click", ".suggestion-item", this.onSuggestionClick.bind(this)); + containerEl.on("mousemove", ".suggestion-item", this.onSuggestionMouseover.bind(this)); + scope.register([], "ArrowUp", () => { + this.setSelectedItem(this.selectedItem - 1, true); + return false; + }); + scope.register([], "ArrowDown", () => { + this.setSelectedItem(this.selectedItem + 1, true); + return false; + }); + scope.register([], "Enter", (evt) => { + this.useSelectedItem(evt); + return false; + }); + scope.register([], "Tab", (evt) => { + this.useSelectedItem(evt); + return false; + }); + } + chooseSuggestion(evt) { + if (!this.items || !this.items.length) + return; + const currentValue = this.items[this.selectedItem]; + if (currentValue) { + this.owner.selectSuggestion(currentValue, evt); + } + } + onSuggestionClick(event, el) { + event.preventDefault(); + if (!this.suggestions || !this.suggestions.length) + return; + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + this.useSelectedItem(event); + } + onSuggestionMouseover(event, el) { + if (!this.suggestions || !this.suggestions.length) + return; + const item = this.suggestions.indexOf(el); + this.setSelectedItem(item, false); + } + empty() { + this.containerEl.empty(); + } + setSuggestions(items) { + this.containerEl.empty(); + const els = []; + items.forEach((item) => { + const suggestionEl = this.containerEl.createDiv("suggestion-item"); + this.owner.renderSuggestion(item, suggestionEl); + els.push(suggestionEl); + }); + this.items = items; + this.suggestions = els; + this.setSelectedItem(0, false); + } + useSelectedItem(event) { + if (!this.items || !this.items.length) + return; + const currentValue = this.items[this.selectedItem]; + if (currentValue) { + this.owner.selectSuggestion(currentValue, event); + } + } + wrap(value, size) { + return ((value % size) + size) % size; + } + setSelectedItem(index, scroll) { + const nIndex = this.wrap(index, this.suggestions.length); + const prev = this.suggestions[this.selectedItem]; + const next = this.suggestions[nIndex]; + if (prev) + prev.removeClass("is-selected"); + if (next) + next.addClass("is-selected"); + this.selectedItem = nIndex; + if (scroll) { + next.scrollIntoView(false); + } + } +} +class SuggestionModal extends obsidian.FuzzySuggestModal { + constructor(app, inputEl, items) { + super(app); + this.items = []; + this.scope = new obsidian.Scope(); + this.emptyStateText = "No match found"; + this.limit = 100; + this.inputEl = inputEl; + this.items = items; + this.suggestEl = createDiv("suggestion-container"); + this.contentEl = this.suggestEl.createDiv("suggestion"); + this.suggester = new Suggester(this, this.contentEl, this.scope); + this.scope.register([], "Escape", this.close.bind(this)); + this.inputEl.addEventListener("input", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("focus", this.onInputChanged.bind(this)); + this.inputEl.addEventListener("blur", this.close.bind(this)); + this.suggestEl.on("mousedown", ".suggestion-container", (event) => { + event.preventDefault(); + }); + } + empty() { + this.suggester.empty(); + } + onInputChanged() { + const inputStr = this.modifyInput(this.inputEl.value); + const suggestions = this.getSuggestions(inputStr); + if (suggestions.length > 0) { + this.suggester.setSuggestions(suggestions.slice(0, this.limit)); + } + else { + this.onNoSuggestion(); + } + this.open(); + } + modifyInput(input) { + return input; + } + onNoSuggestion() { + this.empty(); + this.renderSuggestion(null, this.contentEl.createDiv("suggestion-item")); + } + open() { + // TODO: Figure out a better way to do this. Idea from Periodic Notes plugin + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.app.keymap.pushScope(this.scope); + document.body.appendChild(this.suggestEl); + this.popper = createPopper(this.inputEl, this.suggestEl, { + placement: "bottom-start", + modifiers: [ + { + name: "offset", + options: { + offset: [0, 10] + } + }, + { + name: "flip", + options: { + fallbackPlacements: ["top"] + } + } + ] + }); + } + close() { + // TODO: Figure out a better way to do this. Idea from Periodic Notes plugin + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.app.keymap.popScope(this.scope); + this.suggester.setSuggestions([]); + if (this.popper) { + this.popper.destroy(); + } + this.suggestEl.detach(); + } + createPrompt(prompts) { + if (!this.promptEl) + this.promptEl = this.suggestEl.createDiv("prompt-instructions"); + let prompt = this.promptEl.createDiv("prompt-instruction"); + for (let p of prompts) { + prompt.appendChild(p); + } + } +} +class IconSuggestionModal extends SuggestionModal { + constructor(app, input) { + super(app, input.inputEl, iconDefinitions); + this.icons = iconDefinitions; + this.text = input; + this.createPrompts(); + this.inputEl.addEventListener("input", this.getItem.bind(this)); + } + createPrompts() { } + getItem() { + const v = this.inputEl.value, icon = this.icons.find((iconName) => iconName.name === v.trim()); + if (icon == this.icon) + return; + this.icon = icon; + if (this.icons) + this.onInputChanged(); + } + getItemText(item) { + return item.name; + } + onChooseItem(item) { + this.text.setValue(item.name); + this.icon = item; + } + selectSuggestion({ item }) { + this.text.setValue(item.name); + this.icon = item; + this.onClose(); + this.close(); + } + renderSuggestion(result, el) { + let { item, match: matches } = result || {}; + let content = el.createDiv({ + cls: "suggestion-content icon" + }); + if (!item) { + content.setText(this.emptyStateText); + content.parentElement.addClass("is-selected"); + return; + } + const matchElements = matches.matches.map((m) => { + return createSpan("suggestion-highlight"); + }); + for (let i = 0; i < item.name.length; i++) { + let match = matches.matches.find((m) => m[0] === i); + if (match) { + let element = matchElements[matches.matches.indexOf(match)]; + content.appendChild(element); + element.appendText(item.name.substring(match[0], match[1])); + i += match[1] - match[0] - 1; + continue; + } + content.appendText(item.name[i]); + } + const iconDiv = createDiv("suggestion-flair admonition-suggester-icon"); + iconDiv.appendChild(getIconNode(item)); + content.createDiv({ + cls: "suggestion-note", + text: getIconModuleName(item) + }); + content.prepend(iconDiv); + } + getItems() { + return this.icons; + } +} +class AdmonitionSuggestionModal extends SuggestionModal { + constructor(app, input, items) { + super(app, input.inputEl, items); + this.admonitions = [...items]; + this.text = input; + this.createPrompts(); + this.inputEl.addEventListener("input", this.getItem.bind(this)); + } + createPrompts() { } + getItem() { + const v = this.inputEl.value, admonition = this.admonitions.find((admonition) => admonition.type === v.trim()); + if (admonition == this.admonition) + return; + this.admonition = admonition; + if (this.admonitions) + this.onInputChanged(); + } + getItemText(item) { + return item.type; + } + onChooseItem(item) { + this.text.setValue(item.type); + this.admonition = item; + } + selectSuggestion({ item }) { + this.text.setValue(item.type); + this.onClose(); + this.close(); + } + renderSuggestion(result, el) { + let { item, match: matches } = result || {}; + let content = el.createDiv({ + cls: "suggestion-content icon" + }); + if (!item) { + content.setText(this.emptyStateText); + content.parentElement.addClass("is-selected"); + return; + } + const matchElements = matches.matches.map((m) => { + return createSpan("suggestion-highlight"); + }); + for (let i = 0; i < item.type.length; i++) { + let match = matches.matches.find((m) => m[0] === i); + if (match) { + let element = matchElements[matches.matches.indexOf(match)]; + content.appendChild(element); + element.appendText(item.type.substring(match[0], match[1])); + i += match[1] - match[0] - 1; + continue; + } + content.appendText(item.type[i]); + } + const iconDiv = createDiv("suggestion-flair admonition-suggester-icon"); + iconDiv + .appendChild(getIconNode(item.icon)) + .setAttribute("color", `rgb(${item.color})`); + content.prepend(iconDiv); + } + getItems() { + return this.admonitions; + } +} +class InsertAdmonitionModal extends obsidian.Modal { + constructor(plugin, editor) { + super(plugin.app); + this.plugin = plugin; + this.editor = editor; + this.collapse = this.plugin.data.autoCollapse + ? this.plugin.data.defaultCollapseType + : "none"; + this.onOpen = () => this.display(true); + } + display(focus) { + return __awaiter(this, void 0, void 0, function* () { + const { contentEl } = this; + contentEl.empty(); + const typeSetting = new obsidian.Setting(contentEl); + typeSetting.setName("Admonition Type").addText((t) => { + t.setPlaceholder("Admonition Type").setValue(this.type); + const modal = new AdmonitionSuggestionModal(this.app, t, this.plugin.admonitionArray); + modal.onClose = () => { + var _a; + if (t.inputEl.value && + this.plugin.admonitions[t.inputEl.value]) { + this.type = t.inputEl.value; + if (!((_a = this.title) === null || _a === void 0 ? void 0 : _a.length)) { + this.title = + this.type[0].toUpperCase() + + this.type.slice(1).toLowerCase(); + } + } + else { + new obsidian.Notice("No admonition type by that name exists."); + t.inputEl.value = ""; + } + this.display(); + }; + if (focus) { + modal.open(); + t.inputEl.focus(); + } + }); + const titleSetting = new obsidian.Setting(contentEl); + titleSetting + .setName("Admonition Title") + .setDesc("Leave blank to render without a title.") + .addText((t) => { + t.setValue(this.title); + t.onChange((v) => { + this.title = v; + if (v.length == 0) { + this.noTitle = true; + } + else { + this.noTitle = false; + } + if (this.element) { + const element = getAdmonitionElement(this.type, this.title, this.plugin.admonitions[this.type].icon, this.plugin.admonitions[this.type].color, this.collapse); + element.createDiv({ + cls: "admonition-content", + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla." + }); + this.element.replaceWith(element); + this.element = element; + } + }); + }); + const collapseSetting = new obsidian.Setting(contentEl); + collapseSetting.setName("Make Collapsible"); + const open = collapseSetting.controlEl.createDiv({ + attr: { style: "margin-right: 0.25rem;" } + }); + const closed = collapseSetting.controlEl.createDiv({ + attr: { style: "margin-right: 0.25rem;" } + }); + const none = collapseSetting.controlEl.createDiv({ + attr: { style: "margin-right: 0.25rem;" } + }); + const openInput = open.createEl("input", { + type: "radio", + attr: Object.assign({ id: "admonition-open", name: "admonition-collapse" }, (this.collapse === "open" && { checked: true })) + }); + openInput.onchange = (evt) => { + this.collapse = "open"; + this.display(); + }; + open.createEl("label", { + text: "Open", + attr: { + for: "admonition-open" + } + }); + const closedInput = closed.createEl("input", { + type: "radio", + attr: Object.assign({ id: "admonition-closed", name: "admonition-collapse" }, (this.collapse === "closed" && { checked: true })) + }); + closedInput.onchange = (evt) => { + this.collapse = "closed"; + this.display(); + }; + closed.createEl("label", { + text: "Closed", + attr: { + for: "admonition-closed" + } + }); + const noneInput = none.createEl("input", { + type: "radio", + attr: Object.assign({ id: "admonition-none", name: "admonition-collapse" }, (this.collapse === "none" && { checked: true })) + }); + noneInput.onchange = (evt) => { + this.collapse = "none"; + this.display(); + }; + none.createEl("label", { + text: "None", + attr: { + for: "admonition-none" + } + }); + if (this.type && this.plugin.admonitions[this.type]) { + this.element = getAdmonitionElement(this.type, this.title, this.plugin.admonitions[this.type].icon, this.plugin.admonitions[this.type].color, this.collapse); + this.element.createDiv({ + cls: "admonition-content", + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla." + }); + this.contentEl.appendChild(this.element); + } + new obsidian.Setting(contentEl) + .addButton((b) => b.setButtonText("Insert").onClick(() => { + try { + let titleLine = "", collapseLine = ""; + if (this.title.length && + this.title.toLowerCase() != this.type.toLowerCase()) { + titleLine = `title: ${this.title}\n`; + } + if ((this.plugin.data.autoCollapse && + this.collapse != + this.plugin.data.defaultCollapseType) || + (!this.plugin.data.autoCollapse && + this.collapse != "none")) { + collapseLine = `collapse: ${this.collapse}\n`; + } + this.editor.getDoc().replaceSelection(`\`\`\`ad-${this.type}\n${titleLine}${collapseLine} + + +\`\`\`\n`); + const cursor = this.editor.getCursor(); + this.editor.setCursor(cursor.line - 3); + } + catch (e) { + new obsidian.Notice("There was an issue inserting the admonition."); + } + this.close(); + })) + .addExtraButton((b) => b.setIcon("cross").setTooltip("Cancel")); + }); + } +} + +/** Taken from https://stackoverflow.com/questions/34849001/check-if-css-selector-is-valid/42149818 */ +const isSelectorValid = ((dummyElement) => (selector) => { + try { + dummyElement.querySelector(selector); + } + catch (_a) { + return false; + } + return true; +})(document.createDocumentFragment()); +class AdmonitionSetting extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + return __awaiter(this, void 0, void 0, function* () { + let { containerEl } = this; + containerEl.empty(); + containerEl.addClass("admonition-settings"); + containerEl.createEl("h2", { text: "Admonition Settings" }); + let syntax = new obsidian.Setting(containerEl) + .setDesc("Use Obsidian's markdown syntax highlighter in admonition code blocks. This setting is experimental and could cause errors.") + .addToggle((t) => { + t.setValue(this.plugin.data.syntaxHighlight); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.syntaxHighlight = v; + if (v) { + this.plugin.turnOnSyntaxHighlighting(); + } + else { + this.plugin.turnOffSyntaxHighlighting(); + } + yield this.plugin.saveSettings(); + })); + }); + let name = syntax.nameEl.createDiv(); + name.appendChild(WARNING_ICON.cloneNode(true)); + name.appendChild(createSpan({ text: " Markdown Syntax Highlighting" })); + let sync = new obsidian.Setting(containerEl) + .setDesc("Try to sync internal links to the metadata cache to display in graph view. This setting could have unintended consequences. Use at your own risk.") + .addToggle((t) => { + t.setValue(this.plugin.data.syncLinks).onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.syncLinks = v; + this.display(); + yield this.plugin.saveSettings(); + })); + }); + let syncName = sync.nameEl.createDiv(); + syncName.appendChild(WARNING_ICON.cloneNode(true)); + syncName.appendChild(createSpan({ text: " Sync Links to Metadata Cache" })); + let markdown = new obsidian.Setting(containerEl) + /* .setDesc( + "Allows admonitions to be created using `!!! ad-` or `??? ad-`, instead of using a code block." + ) */ + .addToggle((t) => { + t.setValue(this.plugin.data.enableMarkdownProcessor).onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.enableMarkdownProcessor = v; + if (v) { + this.plugin.enableMarkdownProcessor(); + } + else { + this.plugin.disableMarkdownProcessor(); + } + this.display(); + yield this.plugin.saveSettings(); + })); + }); + markdown.descEl.createSpan({ + text: "Allows admonitions to be created using " + }); + markdown.descEl.createEl("code", { text: "!!! ad-" }); + markdown.descEl.createSpan({ + text: " or " + }); + markdown.descEl.createEl("code", { text: "??? ad-" }); + markdown.descEl.createSpan({ + text: ", instead of using a code block." + }); + let markdownName = markdown.nameEl.createDiv(); + markdownName.appendChild(WARNING_ICON.cloneNode(true)); + markdownName.appendChild(createSpan({ text: " Enable Non-codeblock Admonitions" })); + const collapeSetting = new obsidian.Setting(containerEl) + .setName("Collapsible by Default") + .addToggle((t) => { + t.setValue(this.plugin.data.autoCollapse).onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.autoCollapse = v; + this.display(); + yield this.plugin.saveSettings(); + })); + }); + collapeSetting.descEl.createSpan({ + text: "All admonitions will be collapsible by default. Use " + }); + collapeSetting.descEl.createEl("code", { text: "collapse: none" }); + collapeSetting.descEl.createSpan({ + text: " to prevent." + }); + if (this.plugin.data.autoCollapse) { + new obsidian.Setting(containerEl) + .setName("Default Collapse Type") + .setDesc("Collapsible admonitions will be either opened or closed.") + .addDropdown((d) => { + d.addOption("open", "open"); + d.addOption("closed", "closed"); + d.setValue(this.plugin.data.defaultCollapseType); + d.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.defaultCollapseType = v; + yield this.plugin.saveSettings(); + })); + }); + } + new obsidian.Setting(containerEl) + .setName("Add Copy Button") + .setDesc("Add a 'copy content' button to admonitions.") + .addToggle((t) => { + t.setValue(this.plugin.data.copyButton); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.copyButton = v; + if (!v) { + document + .querySelectorAll(".admonition-content-copy") + .forEach((el) => { + el.detach(); + }); + } + yield this.plugin.saveSettings(); + })); + }); + const additionalContainer = containerEl.createDiv("admonition-setting-additional-container"); + new obsidian.Setting(additionalContainer) + .setName("Add New") + .setDesc("Add a new Admonition type.") + .addButton((button) => { + let b = button + .setTooltip("Add Additional") + .setButtonText("+") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + let modal = new SettingsModal(this.app); + modal.onClose = () => __awaiter(this, void 0, void 0, function* () { + if (modal.saved) { + this.plugin.addAdmonition({ + type: modal.type, + color: modal.color, + icon: modal.icon, + command: false + }); + this.display(); + } + }); + modal.open(); + })); + return b; + }); + const additional = additionalContainer.createDiv("additional"); + for (let a in this.plugin.data.userAdmonitions) { + const admonition = this.plugin.data.userAdmonitions[a]; + let setting = new obsidian.Setting(additional); + let admonitionElement = yield getAdmonitionElement(admonition.type, admonition.type[0].toUpperCase() + + admonition.type.slice(1).toLowerCase(), admonition.icon, admonition.color); + setting.infoEl.replaceWith(admonitionElement); + if (!admonition.command) { + setting.addExtraButton((b) => { + b.setIcon(ADD_COMMAND_NAME.toString()) + .setTooltip("Register Commands") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + this.plugin.registerCommandsFor(admonition); + yield this.plugin.saveSettings(); + this.display(); + })); + }); + } + else { + setting.addExtraButton((b) => { + b.setIcon(REMOVE_COMMAND_NAME.toString()) + .setTooltip("Unregister Commands") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + this.plugin.unregisterCommandsFor(admonition); + yield this.plugin.saveSettings(); + this.display(); + })); + }); + } + setting + .addExtraButton((b) => { + b.setIcon("pencil") + .setTooltip("Edit") + .onClick(() => { + let modal = new SettingsModal(this.app, admonition); + modal.onClose = () => __awaiter(this, void 0, void 0, function* () { + if (modal.saved) { + const hasCommand = admonition.command; + this.plugin.removeAdmonition(admonition); + this.plugin.addAdmonition({ + type: modal.type, + color: modal.color, + icon: modal.icon, + command: hasCommand + }); + this.display(); + } + }); + modal.open(); + }); + }) + .addExtraButton((b) => { + b.setIcon("trash") + .setTooltip("Delete") + .onClick(() => { + this.plugin.removeAdmonition(admonition); + this.display(); + }); + }); + } + const div = containerEl.createDiv("coffee"); + div.createEl("a", { + href: "https://www.buymeacoffee.com/valentine195" + }).createEl("img", { + attr: { + src: "https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=☕&slug=valentine195&button_colour=e3e7ef&font_colour=262626&font_family=Inter&outline_colour=262626&coffee_colour=ff0000" + } + }); + }); + } +} +class SettingsModal extends obsidian.Modal { + constructor(app, admonition) { + super(app); + this.color = "#7d7d7d"; + this.icon = {}; + this.type = ""; + this.saved = false; + this.error = false; + if (admonition) { + this.color = admonition.color; + this.icon = admonition.icon; + this.type = admonition.type; + } + } + display() { + return __awaiter(this, void 0, void 0, function* () { + let { contentEl } = this; + contentEl.empty(); + const settingDiv = contentEl.createDiv(); + let admonitionPreview = yield getAdmonitionElement(this.type, this.type.length + ? this.type[0].toUpperCase() + this.type.slice(1).toLowerCase() + : "...", this.icon, this.color); + admonitionPreview.createDiv("admonition-content").createEl("p", { + text: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla." + }); + contentEl.appendChild(admonitionPreview); + let typeText; + const typeSetting = new obsidian.Setting(settingDiv) + .setName("Admonition Type") + /* .setDesc("This is used to create the admonition (e.g., note or abstract)") */ + .addText((text) => { + typeText = text; + typeText.setValue(this.type).onChange((v) => { + if (!v.length) { + SettingsModal.setValidationError(text, "Admonition type cannot be empty."); + return; + } + if (v.includes(" ")) { + SettingsModal.setValidationError(text, "Admonition type cannot include spaces."); + return; + } + if (!isSelectorValid(v)) { + SettingsModal.setValidationError(text, "Types must be a valid CSS selector."); + return; + } + SettingsModal.removeValidationError(text); + this.type = v; + let titleSpan = admonitionPreview.querySelector(".admonition-title-content"); + let iconEl = admonitionPreview.querySelector(".admonition-title-icon"); + titleSpan.textContent = + this.type[0].toUpperCase() + + this.type.slice(1).toLowerCase(); + titleSpan.prepend(iconEl); + }); + }); + typeSetting.controlEl.addClass("admonition-type-setting"); + typeSetting.descEl.createSpan({ + text: "This is used to create the admonition (e.g., " + }); + typeSetting.descEl.createEl("code", { + text: "note" + }); + typeSetting.descEl.createSpan({ + text: " or " + }); + typeSetting.descEl.createEl("code", { + text: "abstract" + }); + typeSetting.descEl.createSpan({ + text: ")" + }); + const input = createEl("input", { + attr: { + type: "file", + name: "image", + accept: "image/*" + } + }); + let iconText; + const iconSetting = new obsidian.Setting(settingDiv) + .setName("Admonition Icon") + .addText((text) => { + iconText = text; + if (this.icon.type !== "image") + text.setValue(this.icon.name); + const validate = () => __awaiter(this, void 0, void 0, function* () { + var _a; + const v = text.inputEl.value; + let ic = getIconType(v); + if (!ic) { + SettingsModal.setValidationError(text, "Invalid icon name."); + return; + } + if (v.length == 0) { + SettingsModal.setValidationError(text, "Icon cannot be empty."); + return; + } + SettingsModal.removeValidationError(text); + this.icon = (_a = modal.icon) !== null && _a !== void 0 ? _a : { + name: v, + type: ic + }; + let iconEl = admonitionPreview.querySelector(".admonition-title-icon"); + iconEl.innerHTML = getIconNode(this.icon).outerHTML; + }); + const modal = new IconSuggestionModal(this.app, text); + modal.onClose = validate; + text.inputEl.onblur = validate; + }) + .addButton((b) => { + b.setButtonText("Upload Image").setTooltip("Upload Image"); + b.buttonEl.addClass("admonition-file-upload"); + b.buttonEl.appendChild(input); + b.onClick(() => input.click()); + }); + /** Image Uploader */ + input.onchange = () => __awaiter(this, void 0, void 0, function* () { + const { files } = input; + if (!files.length) + return; + const image = files[0]; + const reader = new FileReader(); + reader.onloadend = (evt) => { + var image = new Image(); + image.onload = () => { + try { + // Resize the image + const canvas = document.createElement("canvas"), max_size = 24; + let width = image.width, height = image.height; + if (width > height) { + if (width > max_size) { + height *= max_size / width; + width = max_size; + } + } + else { + if (height > max_size) { + width *= max_size / height; + height = max_size; + } + } + canvas.width = width; + canvas.height = height; + canvas + .getContext("2d") + .drawImage(image, 0, 0, width, height); + this.icon = { + name: canvas.toDataURL("image/png"), + type: "image" + }; + this.display(); + } + catch (e) { + new obsidian.Notice("There was an error parsing the image."); + } + }; + image.src = evt.target.result.toString(); + }; + reader.readAsDataURL(image); + input.value = null; + }); + const desc = iconSetting.descEl.createDiv(); + desc.createEl("a", { + text: "Font Awesome Icon", + href: "https://fontawesome.com/icons?d=gallery&p=2&s=solid&m=free", + attr: { + tabindex: -1 + } + }); + desc.createSpan({ text: " or " }); + desc.createEl("a", { + text: "RPG Awesome Icon", + href: "https://nagoshiashumari.github.io/Rpg-Awesome/", + attr: { + tabindex: -1 + } + }); + desc.createSpan({ text: " to use next to the title." }); + const color = new obsidian.Setting(settingDiv).setName("Color"); + color.controlEl.createEl("input", { + type: "color", + value: rgbToHex(this.color) + }, (el) => { + el.value = rgbToHex(this.color); + el.oninput = ({ target }) => { + let color = hexToRgb(target.value); + if (!color) + return; + this.color = `${color.r}, ${color.g}, ${color.b}`; + admonitionPreview.setAttribute("style", `--admonition-color: ${this.color};`); + }; + }); + let footerEl = contentEl.createDiv(); + let footerButtons = new obsidian.Setting(footerEl); + footerButtons.addButton((b) => { + b.setTooltip("Save") + .setIcon("checkmark") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + let error = false; + if (!typeText.inputEl.value.length) { + SettingsModal.setValidationError(typeText, "Admonition type cannot be empty."); + error = true; + } + if (typeText.inputEl.value.includes(" ")) { + SettingsModal.setValidationError(typeText, "Admonition type cannot include spaces."); + error = true; + } + if (!isSelectorValid(typeText.inputEl.value)) { + SettingsModal.setValidationError(typeText, "Types must be a valid CSS selector."); + error = true; + } + if (!getIconType(iconText.inputEl.value) && + this.icon.type !== "image") { + SettingsModal.setValidationError(iconText, "Invalid icon name."); + error = true; + } + if (!this.icon.name.length) { + SettingsModal.setValidationError(iconText, "Icon cannot be empty."); + error = true; + } + if (error) { + new obsidian.Notice("Fix errors before saving."); + return; + } + this.saved = true; + this.close(); + })); + return b; + }); + footerButtons.addExtraButton((b) => { + b.setIcon("cross") + .setTooltip("Cancel") + .onClick(() => { + this.saved = false; + this.close(); + }); + return b; + }); + }); + } + onOpen() { + this.display(); + } + static setValidationError(textInput, message) { + textInput.inputEl.addClass("is-invalid"); + if (message) { + textInput.inputEl.parentElement.addClasses([ + "has-invalid-message", + "unset-align-items" + ]); + textInput.inputEl.parentElement.parentElement.addClass(".unset-align-items"); + let mDiv = textInput.inputEl.parentElement.querySelector(".invalid-feedback"); + if (!mDiv) { + mDiv = createDiv({ cls: "invalid-feedback" }); + } + mDiv.innerText = message; + mDiv.insertAfter(textInput.inputEl); + } + } + static removeValidationError(textInput) { + textInput.inputEl.removeClass("is-invalid"); + textInput.inputEl.parentElement.removeClasses([ + "has-invalid-message", + "unset-align-items" + ]); + textInput.inputEl.parentElement.parentElement.removeClass(".unset-align-items"); + if (textInput.inputEl.parentElement.querySelector(".invalid-feedback")) { + textInput.inputEl.parentElement.removeChild(textInput.inputEl.parentElement.querySelector(".invalid-feedback")); + } + } +} +function hexToRgb(hex) { + let result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result + ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } + : null; +} +function componentToHex(c) { + var hex = c.toString(16); + return hex.length == 1 ? "0" + hex : hex; +} +function rgbToHex(rgb) { + let result = /^(\d+),\s?(\d+),\s?(\d+)/i.exec(rgb); + if (!result || !result.length) { + return ""; + } + return `#${componentToHex(Number(result[1]))}${componentToHex(Number(result[2]))}${componentToHex(Number(result[3]))}`; +} + +Object.fromEntries = + Object.fromEntries || + /** Polyfill taken from https://github.com/tc39/proposal-object-from-entries/blob/master/polyfill.js */ + function (entries) { + const obj = {}; + for (const pair of entries) { + if (Object(pair) !== pair) { + throw new TypeError("iterable for fromEntries should yield objects"); + } + // Consistency with Map: contract is that entry has "0" and "1" keys, not + // that it is an array or iterable. + const { "0": key, "1": val } = pair; + Object.defineProperty(obj, key, { + configurable: true, + enumerable: true, + writable: true, + value: val + }); + } + return obj; + }; +const DEFAULT_APP_SETTINGS = { + userAdmonitions: {}, + syntaxHighlight: false, + copyButton: false, + version: "", + autoCollapse: false, + defaultCollapseType: "open", + syncLinks: true, + enableMarkdownProcessor: false +}; +class ObsidianAdmonition extends obsidian.Plugin { + constructor() { + super(...arguments); + this.admonitions = {}; + this.contextMap = new Map(); + } + get types() { + return Object.keys(this.admonitions); + } + get admonitionArray() { + return Object.keys(this.admonitions).map((key) => { + return Object.assign(Object.assign({}, this.admonitions[key]), { type: key }); + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.data.version = this.manifest.version; + yield this.saveData(this.data); + }); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + let data = Object.assign({}, DEFAULT_APP_SETTINGS, yield this.loadData()); + this.data = data; + if (this.data.userAdmonitions && + (!this.data.version || Number(this.data.version.split(".")[0]) < 5)) { + for (let admonition in this.data.userAdmonitions) { + if (Object.prototype.hasOwnProperty.call(this.data.userAdmonitions[admonition], "type")) + continue; + this.data.userAdmonitions[admonition] = Object.assign(Object.assign({}, this.data.userAdmonitions[admonition]), { icon: { + type: "font-awesome", + name: this.data.userAdmonitions[admonition] + .icon + } }); + } + } + this.admonitions = Object.assign(Object.assign({}, ADMONITION_MAP), this.data.userAdmonitions); + yield this.saveSettings(); + }); + } + addAdmonition(admonition) { + return __awaiter(this, void 0, void 0, function* () { + this.data.userAdmonitions = Object.assign(Object.assign({}, this.data.userAdmonitions), { [admonition.type]: admonition }); + this.admonitions = Object.assign(Object.assign({}, ADMONITION_MAP), this.data.userAdmonitions); + this.registerMarkdownCodeBlockProcessor(`ad-${admonition.type}`, this.postprocessor.bind(this, admonition.type)); + if (this.data.syntaxHighlight) { + this.turnOnSyntaxHighlighting([admonition.type]); + } + yield this.saveSettings(); + }); + } + removeAdmonition(admonition) { + return __awaiter(this, void 0, void 0, function* () { + if (this.data.userAdmonitions[admonition.type]) { + delete this.data.userAdmonitions[admonition.type]; + } + this.admonitions = Object.assign(Object.assign({}, ADMONITION_MAP), this.data.userAdmonitions); + if (this.data.syntaxHighlight) { + this.turnOffSyntaxHighlighting([admonition.type]); + } + if (admonition.command) { + this.unregisterCommandsFor(admonition); + } + yield this.saveSettings(); + }); + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + console.log("Obsidian Admonition loaded"); + yield this.loadSettings(); + this.addSettingTab(new AdmonitionSetting(this.app, this)); + obsidian.addIcon(ADD_COMMAND_NAME.toString(), ADD_ADMONITION_COMMAND_ICON); + obsidian.addIcon(REMOVE_COMMAND_NAME.toString(), REMOVE_ADMONITION_COMMAND_ICON); + if (this.data.enableMarkdownProcessor) { + this.enableMarkdownProcessor(); + } + Object.keys(this.admonitions).forEach((type) => { + this.registerMarkdownCodeBlockProcessor(`ad-${type}`, this.postprocessor.bind(this, type)); + if (this.admonitions[type].command) { + this.registerCommandsFor(this.admonitions[type]); + } + }); + if (this.data.syntaxHighlight) { + this.turnOnSyntaxHighlighting(); + } + /** Add generic commands. */ + this.addCommand({ + id: "collapse-admonitions", + name: "Collapse Admonitions in Note", + checkCallback: (checking) => { + // checking if the command should appear in the Command Palette + if (checking) { + // make sure the active view is a MarkdownView. + return !!this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + } + let view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view || !(view instanceof obsidian.MarkdownView)) + return; + let admonitions = view.contentEl.querySelectorAll("details[open].admonition-plugin"); + for (let i = 0; i < admonitions.length; i++) { + let admonition = admonitions[i]; + admonition.removeAttribute("open"); + } + } + }); + this.addCommand({ + id: "open-admonitions", + name: "Open Admonitions in Note", + checkCallback: (checking) => { + // checking if the command should appear in the Command Palette + if (checking) { + // make sure the active view is a MarkdownView. + return !!this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + } + let view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view || !(view instanceof obsidian.MarkdownView)) + return; + let admonitions = view.contentEl.querySelectorAll("details:not([open]).admonition-plugin"); + for (let i = 0; i < admonitions.length; i++) { + let admonition = admonitions[i]; + admonition.setAttribute("open", "open"); + } + } + }); + /* this.addCommand({ + id: "replace-with-html", + name: "Replace Admonitions with HTML", + callback: async () => { + let view = this.app.workspace.getActiveViewOfType(MarkdownView); + if ( + !view || + !(view instanceof MarkdownView) || + view.getMode() !== "preview" + ) + return; + + const ensure = new Modal(this.app); + + ensure.contentEl.createEl("h2", { + text: "This will overwrite all admonitions in the open note. Are you sure?" + }); + new Setting(ensure.contentEl) + .addButton((b) => + b.setButtonText("Yes").onClick(async () => { + let admonitions = + view.contentEl.querySelectorAll( + ".admonition-plugin" + ); + + let content = ( + (await this.app.vault.read(view.file)) ?? "" + ).split("\n"); + if (!content) return; + for (let admonition of Array.from( + admonitions + ).reverse()) { + if ( + admonition.id && + this.contextMap.has(admonition.id) + ) { + const ctx = this.contextMap.get( + admonition.id + ); + const { lineStart, lineEnd } = + ctx.getSectionInfo(admonition) ?? {}; + if (!lineStart || !lineEnd) continue; + + const element = admonition.cloneNode( + true + ) as HTMLElement; + + element.removeAttribute("id"); + + content.splice( + lineStart, + lineEnd - lineStart + 1, + html(element.outerHTML) + ); + } + } + await this.app.vault.modify( + view.file, + content.join("\n") + ); + ensure.close(); + }) + ) + .addExtraButton((b) => + b.setIcon("cross").onClick(() => ensure.close()) + ); + ensure.open(); + } + }); */ + this.addCommand({ + id: "insert-admonition", + name: "Insert Admonition", + editorCallback: (editor, view) => { + let suggestor = new InsertAdmonitionModal(this, editor); + suggestor.open(); + } + }); + this.registerEvent(this.app.metadataCache.on("resolve", (file) => { + if (!this.data.syncLinks) + return; + if (this.app.workspace.getActiveFile() != file) + return; + const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (!view || !(view instanceof obsidian.MarkdownView)) + return; + const admonitionLinks = view.contentEl.querySelectorAll(".admonition:not(.admonition-plugin-async) a.internal-link"); + this.addLinksToCache(admonitionLinks, file.path); + })); + }); + } + enableMarkdownProcessor() { + if (!this.data.enableMarkdownProcessor) + return; + const TYPE_REGEX = new RegExp(`(!{3,}|\\?{3,}\\+?) ad-(${this.types.join("|")})(\\s[\\s\\S]+)?`); + const END_REGEX = new RegExp(`\\-{3,} admonition`); + let push = false, id; + const childMap = new Map(); + const elementMap = new Map(); + const idMap = new Map(); + Object.values(this.admonitions) + .filter(({ command }) => command) + .forEach((admonition) => { + this.registerCommandsFor(admonition); + }); + this.registerMarkdownPostProcessor((el, ctx) => __awaiter(this, void 0, void 0, function* () { + var _a, _b; + if (!this.data.enableMarkdownProcessor) + return; + if (END_REGEX.test(el.textContent) && push) { + push = false; + const lastElement = createDiv(); + if (id && + idMap.has(id) && + childMap.has(idMap.get(id)) && + el.children[0].textContent.replace(END_REGEX, "").length) { + lastElement.innerHTML = el.children[0].outerHTML.replace(new RegExp(`(
)?\\n?${END_REGEX.source}`), ""); + const contentEl = childMap.get(idMap.get(id)).contentEl; + if (contentEl) + contentEl.appendChild(lastElement.children[0]); + } + el.children[0].detach(); + return; + } + if (!TYPE_REGEX.test(el.textContent) && !push) + return; + if (!push) { + if (!(Array.from(el.children).find((e) => TYPE_REGEX.test(e.textContent)) instanceof HTMLParagraphElement)) + return; + push = true; + let child = new obsidian.MarkdownRenderChild(el); + id = getID(); + idMap.set(id, child); + childMap.set(child, { + contentEl: null, + elements: [], + loaded: false + }); + child.onload = () => __awaiter(this, void 0, void 0, function* () { + var _c, _d; + const source = el.textContent; + let [, col, type, title = type[0].toUpperCase() + + type.slice(1).toLowerCase()] = (_c = source.match(TYPE_REGEX)) !== null && _c !== void 0 ? _c : []; + if (!type) + return; + let collapse; + if (/\?{3,}/.test(col)) { + collapse = /\+/.test(col) ? "open" : "closed"; + } + if ((title.trim() === "" || title === '""') && + collapse !== undefined && + collapse !== "none") { + title = + type[0].toUpperCase() + type.slice(1).toLowerCase(); + new obsidian.Notice("An admonition must have a title if it is collapsible."); + } + const admonitionElement = yield getAdmonitionElementAsync(type, title.trim(), this.admonitions[type].icon, this.admonitions[type].color, collapse); + const contentHolder = admonitionElement.createDiv("admonition-content-holder"); + const contentEl = contentHolder.createDiv("admonition-content"); + child.containerEl.appendChild(admonitionElement); + for (let element of (_d = childMap.get(child)) === null || _d === void 0 ? void 0 : _d.elements) { + contentEl.appendChild(element); + } + childMap.set(child, Object.assign(Object.assign({}, childMap.get(child)), { contentEl: contentEl, loaded: true })); + }); + child.onunload = () => { + idMap.delete(id); + childMap.delete(child); + }; + ctx.addChild(child); + el.children[0].detach(); + return; + } + if (id && idMap.get(id)) { + const child = idMap.get(id); + childMap.set(child, Object.assign(Object.assign({}, childMap.get(child)), { elements: [ + ...childMap.get(child).elements, + ...Array.from(el.children) + ] })); + elementMap.set(el, child); + if ((_a = childMap.get(child)) === null || _a === void 0 ? void 0 : _a.loaded) { + for (let element of (_b = childMap.get(child)) === null || _b === void 0 ? void 0 : _b.elements) { + childMap.get(child).contentEl.appendChild(element); + } + } + } + })); + } + disableMarkdownProcessor() { + /* new Notice("The plugin must be reloaded for this to take effect."); */ + Object.values(this.admonitions) + .filter(({ command }) => command) + .forEach((admonition) => { + this.registerCommandsFor(admonition); + }); + } + unregisterCommandsFor(admonition) { + admonition.command = false; + if (this.app.commands.findCommand(`obsidian-admonition:insert-${admonition.type}`)) { + delete this.app.commands.editorCommands[`obsidian-admonition:insert-${admonition.type}`]; + delete this.app.commands.editorCommands[`obsidian-admonition:insert-${admonition.type}-with-title`]; + delete this.app.commands.commands[`obsidian-admonition:insert-${admonition.type}`]; + delete this.app.commands.commands[`obsidian-admonition:insert-${admonition.type}-with-title`]; + } + } + registerCommandsFor(admonition) { + admonition.command = true; + this.addCommand({ + id: `insert-${admonition.type}`, + name: `Insert ${admonition.type}`, + editorCheckCallback: (checking, editor, view) => { + if (checking) + return admonition.command; + if (admonition.command) { + try { + editor.getDoc().replaceSelection(`\`\`\`ad-${admonition.type} + +\`\`\`\n`); + const cursor = editor.getCursor(); + editor.setCursor(cursor.line - 2); + } + catch (e) { + new obsidian.Notice("There was an issue inserting the admonition."); + } + } + } + }); + this.addCommand({ + id: `insert-${admonition.type}-with-title`, + name: `Insert ${admonition.type} With Title`, + editorCheckCallback: (checking, editor, view) => { + if (checking) + return admonition.command; + if (admonition.command) { + try { + editor.getDoc().replaceSelection(`\`\`\`ad-${admonition.type} +title: + +\`\`\`\n`); + const cursor = editor.getCursor(); + editor.setCursor(cursor.line - 3); + } + catch (e) { + new obsidian.Notice("There was an issue inserting the admonition."); + } + } + } + }); + if (this.data.enableMarkdownProcessor) { + this.addCommand({ + id: `insert-non-${admonition.type}`, + name: `Insert Non-codeblock ${admonition.type}`, + editorCheckCallback: (checking, editor, view) => { + if (checking) + return (admonition.command && + this.data.enableMarkdownProcessor); + if (admonition.command) { + try { + editor + .getDoc() + .replaceSelection(`!!! ad-${admonition.type}\n\n--- admonition\n`); + const cursor = editor.getCursor(); + editor.setCursor(cursor.line - 2); + } + catch (e) { + new obsidian.Notice("There was an issue inserting the admonition."); + } + } + } + }); + } + } + turnOnSyntaxHighlighting(types = Object.keys(this.admonitions)) { + if (!this.data.syntaxHighlight) + return; + types.forEach((type) => { + if (this.data.syntaxHighlight) { + /** Process from @deathau's syntax highlight plugin */ + const [, cmPatchedType] = `${type}`.match(/^([\w+#-]*)[^\n`]*$/); + window.CodeMirror.defineMode(`ad-${cmPatchedType}`, (config, options) => { + return window.CodeMirror.getMode({}, "hypermd"); + }); + } + }); + this.app.workspace.layoutReady + ? this.layoutReady() + : this.app.workspace.on("layout-ready", this.layoutReady.bind(this)); + } + turnOffSyntaxHighlighting(types = Object.keys(this.admonitions)) { + types.forEach((type) => { + if (window.CodeMirror.modes.hasOwnProperty(`ad-${type}`)) { + delete window.CodeMirror.modes[`ad-${type}`]; + } + }); + this.app.workspace.layoutReady + ? this.layoutReady() + : this.app.workspace.on("layout-ready", this.layoutReady.bind(this)); + } + layoutReady() { + // don't need the event handler anymore, get rid of it + this.app.workspace.off("layout-ready", this.layoutReady.bind(this)); + this.refreshLeaves(); + } + refreshLeaves() { + // re-set the editor mode to refresh the syntax highlighting + this.app.workspace.iterateCodeMirrors((cm) => cm.setOption("mode", cm.getOption("mode"))); + } + postprocessor(type, src, el, ctx) { + var _a, _b; + return __awaiter(this, void 0, void 0, function* () { + if (!this.admonitions[type]) { + return; + } + try { + let { title = type[0].toUpperCase() + type.slice(1).toLowerCase(), collapse, content, icon, color = this.admonitions[type].color } = getParametersFromSource(type, src); + let match = new RegExp(`^!!! ad-(${this.types.join("|")})$`, "gm"); + let nestedAdmonitions = content.match(match) || []; + if (nestedAdmonitions.length) { + let matches = [getMatches(content, 0, nestedAdmonitions[0])]; + for (let i = 1; i < nestedAdmonitions.length; i++) { + matches.push(getMatches(content, matches[i - 1].end, nestedAdmonitions[i])); + } + let split = content.split("\n"); + for (let m of matches.reverse()) { + split.splice(m.start, m.end - m.start + 1, `\`\`\`ad-${m.type}\n${m.src}\n\`\`\``); + } + content = split.join("\n"); + } + if (this.data.autoCollapse && !collapse) { + collapse = (_a = this.data.defaultCollapseType) !== null && _a !== void 0 ? _a : "open"; + } + else if (collapse && collapse.trim() === "none") { + collapse = ""; + } + const id = getID(); + /* const iconNode = icon ? this.admonitions[type].icon; */ + let admonitionElement = getAdmonitionElement(type, title, (_b = iconDefinitions.find(({ name }) => icon === name)) !== null && _b !== void 0 ? _b : this.admonitions[type].icon, color !== null && color !== void 0 ? color : this.admonitions[type].color, collapse, id); + /** + * Create a unloadable component. + */ + let markdownRenderChild = new obsidian.MarkdownRenderChild(admonitionElement); + markdownRenderChild.containerEl = admonitionElement; + markdownRenderChild.onload = () => { + this.contextMap.set(id, ctx); + }; + markdownRenderChild.onunload = () => { + this.contextMap.delete(id); + }; + ctx.addChild(markdownRenderChild); + if (content && content.length) { + const contentHolder = admonitionElement.createDiv("admonition-content-holder"); + const admonitionContent = contentHolder.createDiv("admonition-content"); + /** + * Render the content as markdown and append it to the admonition. + */ + if (/^`{3,}mermaid/m.test(content)) { + const wasCollapsed = !admonitionElement.hasAttribute("open"); + if (admonitionElement instanceof HTMLDetailsElement) { + admonitionElement.setAttribute("open", "open"); + } + setImmediate(() => { + obsidian.MarkdownRenderer.renderMarkdown(content, admonitionContent, ctx.sourcePath, markdownRenderChild); + if (admonitionElement instanceof HTMLDetailsElement && + wasCollapsed) { + admonitionElement.removeAttribute("open"); + } + }); + } + else { + obsidian.MarkdownRenderer.renderMarkdown(content, admonitionContent, ctx.sourcePath, markdownRenderChild); + } + if (this.data.copyButton) { + let copy = contentHolder + .createDiv("admonition-content-copy") + .appendChild(COPY_BUTTON_ICON.cloneNode(true)); + copy.addEventListener("click", () => { + navigator.clipboard + .writeText(content.trim()) + .then(() => __awaiter(this, void 0, void 0, function* () { + new obsidian.Notice("Admonition content copied to clipboard."); + })); + }); + } + const taskLists = admonitionContent.querySelectorAll(".contains-task-list"); + if (taskLists.length) { + const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (view && view instanceof obsidian.MarkdownView) { + const file = view.file; + const fileContent = view.currentMode.get(); + const splitContent = src.split("\n"); + let slicer = 0; + const start = fileContent.indexOf(src); + for (let i = 0; i < taskLists.length; i++) { + let tasks = taskLists[i].querySelectorAll(".task-list-item"); + if (!tasks.length) + continue; + for (let j = 0; j < tasks.length; j++) { + let task = tasks[j]; + if (!task.children.length) + continue; + const inputs = task.querySelectorAll("input[type='checkbox']"); + if (!inputs.length) + continue; + const input = inputs[0]; + if (!input.nextSibling || + input.nextSibling.nodeName != "#text") + continue; + const line = splitContent + .slice(slicer) + .find((str) => new RegExp(`\\[.*\\]\\s*${task.innerText.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`).test(str)); + slicer = + slicer + + splitContent.slice(slicer).indexOf(line) + + 1; + const lineNumber = slicer; + input.dataset["line"] = `${lineNumber}`; + input.onclick = (evt) => __awaiter(this, void 0, void 0, function* () { + view.previewMode.renderer.onCheckboxClick(evt, input); + }); + } + } + } + } + const links = admonitionContent.querySelectorAll("a.internal-link"); + this.addLinksToCache(links, ctx.sourcePath); + } + /** + * Replace the
 tag with the new admonition.
+                 */
+                el.replaceWith(admonitionElement);
+            }
+            catch (e) {
+                console.error(e);
+                const pre = createEl("pre");
+                pre.createEl("code", {
+                    attr: {
+                        style: `color: var(--text-error) !important`
+                    }
+                }).createSpan({
+                    text: "There was an error rendering the admonition:" +
+                        "\n\n" +
+                        src
+                });
+                el.replaceWith(pre);
+            }
+        });
+    }
+    onunload() {
+        return __awaiter(this, void 0, void 0, function* () {
+            console.log("Obsidian Admonition unloaded");
+            this.turnOffSyntaxHighlighting();
+        });
+    }
+    addLinksToCache(links, sourcePath) {
+        if (!this.data.syncLinks)
+            return;
+        /* //@ts-expect-error
+        this.app.metadataCache.resolveLinks(sourcePath); */
+        for (let i = 0; i < links.length; i++) {
+            const a = links[i];
+            if (a.dataset.href) {
+                let file = this.app.metadataCache.getFirstLinkpathDest(a.dataset.href, "");
+                let cache, path;
+                if (file && file instanceof obsidian.TFile) {
+                    cache = this.app.metadataCache.resolvedLinks;
+                    path = file.path;
+                }
+                else {
+                    cache = this.app.metadataCache.unresolvedLinks;
+                    path = a.dataset.href;
+                }
+                if (!cache[sourcePath]) {
+                    cache[sourcePath] = {
+                        [path]: 0
+                    };
+                }
+                let resolved = cache[sourcePath];
+                if (!resolved[path]) {
+                    resolved[path] = 0;
+                }
+                resolved[path] += 1;
+                cache[sourcePath] = resolved;
+            }
+        }
+    }
+}
+
+module.exports = ObsidianAdmonition;
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5lcy5qcyIsIm5vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvaW5kZXguZXMuanMiLCJub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4LmVzLmpzIiwic3JjL3V0aWwvcnBnYXdlc29tZS50cyIsInNyYy91dGlsL2ljb25zLnRzIiwic3JjL3V0aWwvdXRpbC50cyIsInNyYy91dGlsL2NvbnN0YW50cy50cyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2Zvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdmFsaWRhdGVNb2RpZmllcnMuanMiLCJub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VuaXF1ZUJ5LmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwibm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanMiLCJzcmMvbW9kYWwvaW5kZXgudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6bnVsbCwibmFtZXMiOlsiZmFDb3B5IiwiZmFzIiwiTm90aWNlIiwiTWFya2Rvd25SZW5kZXJlciIsImVmZmVjdCIsInJvdW5kIiwibWluIiwibWF4IiwibWF0aE1heCIsIm1hdGhNaW4iLCJoYXNoIiwiYWxsUGxhY2VtZW50cyIsInBsYWNlbWVudHMiLCJwb3BwZXJPZmZzZXRzIiwiY29tcHV0ZVN0eWxlcyIsImFwcGx5U3R5bGVzIiwib2Zmc2V0IiwiZmxpcCIsInByZXZlbnRPdmVyZmxvdyIsImFycm93IiwiaGlkZSIsIkZ1enp5U3VnZ2VzdE1vZGFsIiwiU2NvcGUiLCJNb2RhbCIsIlNldHRpbmciLCJQbHVnaW5TZXR0aW5nVGFiIiwiUGx1Z2luIiwiYWRkSWNvbiIsIk1hcmtkb3duVmlldyIsIk1hcmtkb3duUmVuZGVyQ2hpbGQiLCJURmlsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXVEQTtBQUNPLFNBQVMsU0FBUyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRTtBQUM3RCxJQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNoSCxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMvRCxRQUFRLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FB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
diff --git a/.obsidian/plugins/obsidian-admonition/manifest.json b/.obsidian/plugins/obsidian-admonition/manifest.json
new file mode 100644
index 00000000..3d2bdeb2
--- /dev/null
+++ b/.obsidian/plugins/obsidian-admonition/manifest.json
@@ -0,0 +1,10 @@
+{
+    "id": "obsidian-admonition",
+    "name": "Admonition",
+    "version": "6.3.0",
+    "minAppVersion": "0.11.0",
+    "description": "Admonition block-styled content for Obsidian.md",
+    "author": "Jeremy Valentine",
+    "authorUrl": "",
+    "isDesktopOnly": false
+}
\ No newline at end of file
diff --git a/.obsidian/plugins/obsidian-admonition/styles.css b/.obsidian/plugins/obsidian-admonition/styles.css
new file mode 100644
index 00000000..b847f35e
--- /dev/null
+++ b/.obsidian/plugins/obsidian-admonition/styles.css
@@ -0,0 +1,229 @@
+/** Constants */
+:root {
+    --admonition-details-icon: url("data:image/svg+xml;charset=utf-8,");
+}
+
+.admonition {
+    margin: 1.5625em 0;
+    padding: 0;
+    overflow: hidden;
+    color: var(--text-normal);
+    page-break-inside: avoid;
+    background-color: var(--background-secondary);
+    border-left: 0.2rem solid rgb(var(--admonition-color));
+    border-radius: 0.1rem;
+    box-shadow: 0 0.2rem 0.5rem var(--background-modifier-box-shadow);
+}
+
+.admonition-title {
+    position: relative;
+    padding: 0.6rem 0.25em;
+    font-weight: 700;
+    background-color: rgba(var(--admonition-color), 0.1);
+}
+
+.admonition-title-content {
+    display: flex;
+    justify-content: flex-start;
+    margin-top: 0 !important;
+    margin-bottom: 0 !important;
+}
+
+.admonition-title-icon {
+    color: rgb(var(--admonition-color));
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin: 0 0.5em 0 0.25em;
+    min-width: 1em;
+}
+
+.admonition-title-markdown {
+    display: block;
+}
+
+.admonition-title.no-title {
+    display: none;
+}
+
+.admonition > .admonition-title.no-title + .admonition-content-holder {
+    margin-top: 1rem;
+    margin-bottom: 1rem;
+}
+
+.admonition-content-holder {
+    position: relative;
+}
+
+.admonition-content {
+    margin: 10px 15px;
+    position: relative;
+    overflow-x: auto;
+}
+
+.admonition-content-copy {
+    color: var(--text-faint);
+    cursor: pointer;
+    opacity: 0;
+    position: absolute;
+    right: 0.375rem;
+    top: -5px;
+    transition: 0.3s opacity ease-in;
+}
+
+.admonition-content-copy:hover {
+    color: var(--text-normal);
+}
+
+.admonition:hover .admonition-content-copy,
+.admonition-content-copy:hover {
+    opacity: 1;
+}
+.admonition-title:hover + .admonition-content .admonition-content-copy {
+    opacity: 0;
+}
+
+details.admonition:not([open]) {
+    padding-bottom: 0;
+    box-shadow: none;
+}
+
+details.admonition > summary {
+    outline: none;
+    display: block !important;
+    list-style: none !important;
+    list-style-type: none !important;
+    min-height: 1rem;
+    border-top-left-radius: 0.1rem;
+    border-top-right-radius: 0.1rem;
+    cursor: pointer;
+}
+
+details.admonition > summary::-webkit-details-marker,
+details.admonition > summary::marker {
+    display: none !important;
+}
+
+details.admonition > summary > .collapser {
+    position: absolute;
+    top: 50%;
+    right: 8px;
+    transform: translateY(-50%);
+    content: "";
+}
+
+details.admonition > summary > .collapser > .handle {
+    transform: rotate(0deg);
+    transition: transform 0.25s;
+    background-color: currentColor;
+    -webkit-mask-repeat: no-repeat;
+    mask-repeat: no-repeat;
+    -webkit-mask-size: contain;
+    mask-size: contain;
+    -webkit-mask-image: var(--admonition-details-icon);
+    mask-image: var(--admonition-details-icon);
+    width: 20px;
+    height: 20px;
+}
+
+details.admonition[open] > summary > .collapser > .handle {
+    transform: rotate(90deg);
+}
+
+/** Settings */
+.admonition-setting-additional-container
+    > .setting-item:not(.setting-item-heading) {
+    border: 0px;
+}
+
+.admonition-setting-additional-container {
+    border-bottom: 1px solid var(--background-modifier-border);
+    border-top: 1px solid var(--background-modifier-border);
+    padding: 18px 0 0 0;
+}
+
+.admonition-setting-additional-container > .setting-item-heading:only-child {
+    padding-bottom: 18px;
+}
+
+.admonition-setting-additional-container > .additional {
+    margin: 6px 12px;
+}
+.admonition-setting-additional-container > .additional > .setting-item {
+    border-top: 0;
+    padding-top: 9px;
+}
+.admonition-setting-additional-container
+    > .additional
+    > .setting-item
+    > .setting-item-control
+    > *:first-child {
+    margin: 0 6px;
+}
+
+.setting-item > .admonition {
+    width: 50%;
+    margin: 0;
+}
+
+.unset-align-items {
+    align-items: unset;
+}
+
+.has-invalid-message {
+    display: grid;
+    grid-template-columns: 1fr 1fr;
+    grid-template-rows: 1fr 1fr;
+    grid-template-areas:
+        "text image"
+        "inv inv";
+}
+
+input.is-invalid {
+    border-color: #dc3545 !important;
+    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
+    background-repeat: no-repeat;
+    background-position: right calc(0.375em + 0.1875rem) center;
+    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
+}
+
+.admonition-type-setting input {
+    grid-column: span 2;
+}
+
+.invalid-feedback {
+    display: block;
+    grid-area: inv;
+    width: 100%;
+    margin-top: 0.25rem;
+    font-size: 0.875em;
+    color: #dc3545;
+}
+
+.admonition-suggester-icon svg {
+    width: 1em;
+}
+
+/** Internal */
+
+.admonition li.task-list-item.is-checked p {
+    text-decoration: line-through;
+}
+
+.admonition-settings .coffee {
+    width: 60%;
+    color: var(--text-faint);
+    margin: 1rem auto;
+    text-align: center;
+}
+.admonition-settings .coffee img {
+    height: 30px;
+}
+
+.admonition-file-upload {
+    margin-right: 0;
+    margin-left: 12px;
+}
+.admonition-file-upload > input[type="file"] {
+    display: none;
+}
diff --git a/.obsidian/plugins/obsidian-citation-plugin/main.js b/.obsidian/plugins/obsidian-citation-plugin/main.js
new file mode 100644
index 00000000..f3822406
--- /dev/null
+++ b/.obsidian/plugins/obsidian-citation-plugin/main.js
@@ -0,0 +1,85843 @@
+'use strict';
+
+var obsidian = require('obsidian');
+var sysPath = require('path');
+var require$$0$4 = require('events');
+var require$$0$2 = require('util');
+var fs$3 = require('fs');
+var require$$0$3 = require('stream');
+var require$$1$1 = require('os');
+
+function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
+
+var sysPath__default = /*#__PURE__*/_interopDefaultLegacy(sysPath);
+var require$$0__default$2 = /*#__PURE__*/_interopDefaultLegacy(require$$0$4);
+var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$2);
+var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs$3);
+var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$3);
+var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1$1);
+
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
+/* global Reflect, Promise */
+
+var extendStatics = function(d, b) {
+    extendStatics = Object.setPrototypeOf ||
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+    return extendStatics(d, b);
+};
+
+function __extends(d, b) {
+    extendStatics(d, b);
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+}
+
+var __assign = function() {
+    __assign = Object.assign || function __assign(t) {
+        for (var s, i = 1, n = arguments.length; i < n; i++) {
+            s = arguments[i];
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
+        }
+        return t;
+    };
+    return __assign.apply(this, arguments);
+};
+
+function __awaiter(thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+}
+
+function __generator(thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+}
+
+var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+function createCommonjsModule(fn, basedir, module) {
+	return module = {
+		path: basedir,
+		exports: {},
+		require: function (path, base) {
+			return commonjsRequire(path, (base === undefined || base === null) ? module.path : base);
+		}
+	}, fn(module, module.exports), module.exports;
+}
+
+function commonjsRequire () {
+	throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
+}
+
+const WIN_SLASH = '\\\\/';
+const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
+
+/**
+ * Posix glob regex
+ */
+
+const DOT_LITERAL = '\\.';
+const PLUS_LITERAL = '\\+';
+const QMARK_LITERAL = '\\?';
+const SLASH_LITERAL = '\\/';
+const ONE_CHAR = '(?=.)';
+const QMARK = '[^/]';
+const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
+const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
+const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
+const NO_DOT = `(?!${DOT_LITERAL})`;
+const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
+const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
+const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
+const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
+const STAR = `${QMARK}*?`;
+
+const POSIX_CHARS = {
+  DOT_LITERAL,
+  PLUS_LITERAL,
+  QMARK_LITERAL,
+  SLASH_LITERAL,
+  ONE_CHAR,
+  QMARK,
+  END_ANCHOR,
+  DOTS_SLASH,
+  NO_DOT,
+  NO_DOTS,
+  NO_DOT_SLASH,
+  NO_DOTS_SLASH,
+  QMARK_NO_DOT,
+  STAR,
+  START_ANCHOR
+};
+
+/**
+ * Windows glob regex
+ */
+
+const WINDOWS_CHARS = {
+  ...POSIX_CHARS,
+
+  SLASH_LITERAL: `[${WIN_SLASH}]`,
+  QMARK: WIN_NO_SLASH,
+  STAR: `${WIN_NO_SLASH}*?`,
+  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
+  NO_DOT: `(?!${DOT_LITERAL})`,
+  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
+  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
+  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
+  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
+  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
+};
+
+/**
+ * POSIX Bracket Regex
+ */
+
+const POSIX_REGEX_SOURCE = {
+  alnum: 'a-zA-Z0-9',
+  alpha: 'a-zA-Z',
+  ascii: '\\x00-\\x7F',
+  blank: ' \\t',
+  cntrl: '\\x00-\\x1F\\x7F',
+  digit: '0-9',
+  graph: '\\x21-\\x7E',
+  lower: 'a-z',
+  print: '\\x20-\\x7E ',
+  punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
+  space: ' \\t\\r\\n\\v\\f',
+  upper: 'A-Z',
+  word: 'A-Za-z0-9_',
+  xdigit: 'A-Fa-f0-9'
+};
+
+var constants = {
+  MAX_LENGTH: 1024 * 64,
+  POSIX_REGEX_SOURCE,
+
+  // regular expressions
+  REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
+  REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
+  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
+  REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
+  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
+  REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
+
+  // Replace globs with equivalent patterns to reduce parsing time.
+  REPLACEMENTS: {
+    '***': '*',
+    '**/**': '**',
+    '**/**/**': '**'
+  },
+
+  // Digits
+  CHAR_0: 48, /* 0 */
+  CHAR_9: 57, /* 9 */
+
+  // Alphabet chars.
+  CHAR_UPPERCASE_A: 65, /* A */
+  CHAR_LOWERCASE_A: 97, /* a */
+  CHAR_UPPERCASE_Z: 90, /* Z */
+  CHAR_LOWERCASE_Z: 122, /* z */
+
+  CHAR_LEFT_PARENTHESES: 40, /* ( */
+  CHAR_RIGHT_PARENTHESES: 41, /* ) */
+
+  CHAR_ASTERISK: 42, /* * */
+
+  // Non-alphabetic chars.
+  CHAR_AMPERSAND: 38, /* & */
+  CHAR_AT: 64, /* @ */
+  CHAR_BACKWARD_SLASH: 92, /* \ */
+  CHAR_CARRIAGE_RETURN: 13, /* \r */
+  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
+  CHAR_COLON: 58, /* : */
+  CHAR_COMMA: 44, /* , */
+  CHAR_DOT: 46, /* . */
+  CHAR_DOUBLE_QUOTE: 34, /* " */
+  CHAR_EQUAL: 61, /* = */
+  CHAR_EXCLAMATION_MARK: 33, /* ! */
+  CHAR_FORM_FEED: 12, /* \f */
+  CHAR_FORWARD_SLASH: 47, /* / */
+  CHAR_GRAVE_ACCENT: 96, /* ` */
+  CHAR_HASH: 35, /* # */
+  CHAR_HYPHEN_MINUS: 45, /* - */
+  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
+  CHAR_LEFT_CURLY_BRACE: 123, /* { */
+  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
+  CHAR_LINE_FEED: 10, /* \n */
+  CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
+  CHAR_PERCENT: 37, /* % */
+  CHAR_PLUS: 43, /* + */
+  CHAR_QUESTION_MARK: 63, /* ? */
+  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
+  CHAR_RIGHT_CURLY_BRACE: 125, /* } */
+  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
+  CHAR_SEMICOLON: 59, /* ; */
+  CHAR_SINGLE_QUOTE: 39, /* ' */
+  CHAR_SPACE: 32, /*   */
+  CHAR_TAB: 9, /* \t */
+  CHAR_UNDERSCORE: 95, /* _ */
+  CHAR_VERTICAL_LINE: 124, /* | */
+  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
+
+  SEP: sysPath__default['default'].sep,
+
+  /**
+   * Create EXTGLOB_CHARS
+   */
+
+  extglobChars(chars) {
+    return {
+      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
+      '?': { type: 'qmark', open: '(?:', close: ')?' },
+      '+': { type: 'plus', open: '(?:', close: ')+' },
+      '*': { type: 'star', open: '(?:', close: ')*' },
+      '@': { type: 'at', open: '(?:', close: ')' }
+    };
+  },
+
+  /**
+   * Create GLOB_CHARS
+   */
+
+  globChars(win32) {
+    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
+  }
+};
+
+var utils = createCommonjsModule(function (module, exports) {
+
+
+const win32 = process.platform === 'win32';
+const {
+  REGEX_BACKSLASH,
+  REGEX_REMOVE_BACKSLASH,
+  REGEX_SPECIAL_CHARS,
+  REGEX_SPECIAL_CHARS_GLOBAL
+} = constants;
+
+exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
+exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
+exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
+exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
+exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
+
+exports.removeBackslashes = str => {
+  return str.replace(REGEX_REMOVE_BACKSLASH, match => {
+    return match === '\\' ? '' : match;
+  });
+};
+
+exports.supportsLookbehinds = () => {
+  const segs = process.version.slice(1).split('.').map(Number);
+  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
+    return true;
+  }
+  return false;
+};
+
+exports.isWindows = options => {
+  if (options && typeof options.windows === 'boolean') {
+    return options.windows;
+  }
+  return win32 === true || sysPath__default['default'].sep === '\\';
+};
+
+exports.escapeLast = (input, char, lastIdx) => {
+  const idx = input.lastIndexOf(char, lastIdx);
+  if (idx === -1) return input;
+  if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
+  return `${input.slice(0, idx)}\\${input.slice(idx)}`;
+};
+
+exports.removePrefix = (input, state = {}) => {
+  let output = input;
+  if (output.startsWith('./')) {
+    output = output.slice(2);
+    state.prefix = './';
+  }
+  return output;
+};
+
+exports.wrapOutput = (input, state = {}, options = {}) => {
+  const prepend = options.contains ? '' : '^';
+  const append = options.contains ? '' : '$';
+
+  let output = `${prepend}(?:${input})${append}`;
+  if (state.negated === true) {
+    output = `(?:^(?!${output}).*$)`;
+  }
+  return output;
+};
+});
+
+const {
+  CHAR_ASTERISK,             /* * */
+  CHAR_AT,                   /* @ */
+  CHAR_BACKWARD_SLASH,       /* \ */
+  CHAR_COMMA,                /* , */
+  CHAR_DOT,                  /* . */
+  CHAR_EXCLAMATION_MARK,     /* ! */
+  CHAR_FORWARD_SLASH,        /* / */
+  CHAR_LEFT_CURLY_BRACE,     /* { */
+  CHAR_LEFT_PARENTHESES,     /* ( */
+  CHAR_LEFT_SQUARE_BRACKET,  /* [ */
+  CHAR_PLUS,                 /* + */
+  CHAR_QUESTION_MARK,        /* ? */
+  CHAR_RIGHT_CURLY_BRACE,    /* } */
+  CHAR_RIGHT_PARENTHESES,    /* ) */
+  CHAR_RIGHT_SQUARE_BRACKET  /* ] */
+} = constants;
+
+const isPathSeparator = code => {
+  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
+};
+
+const depth = token => {
+  if (token.isPrefix !== true) {
+    token.depth = token.isGlobstar ? Infinity : 1;
+  }
+};
+
+/**
+ * Quickly scans a glob pattern and returns an object with a handful of
+ * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
+ * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
+ *
+ * ```js
+ * const pm = require('picomatch');
+ * console.log(pm.scan('foo/bar/*.js'));
+ * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {Object} Returns an object with tokens and regex source string.
+ * @api public
+ */
+
+const scan = (input, options) => {
+  const opts = options || {};
+
+  const length = input.length - 1;
+  const scanToEnd = opts.parts === true || opts.scanToEnd === true;
+  const slashes = [];
+  const tokens = [];
+  const parts = [];
+
+  let str = input;
+  let index = -1;
+  let start = 0;
+  let lastIndex = 0;
+  let isBrace = false;
+  let isBracket = false;
+  let isGlob = false;
+  let isExtglob = false;
+  let isGlobstar = false;
+  let braceEscaped = false;
+  let backslashes = false;
+  let negated = false;
+  let finished = false;
+  let braces = 0;
+  let prev;
+  let code;
+  let token = { value: '', depth: 0, isGlob: false };
+
+  const eos = () => index >= length;
+  const peek = () => str.charCodeAt(index + 1);
+  const advance = () => {
+    prev = code;
+    return str.charCodeAt(++index);
+  };
+
+  while (index < length) {
+    code = advance();
+    let next;
+
+    if (code === CHAR_BACKWARD_SLASH) {
+      backslashes = token.backslashes = true;
+      code = advance();
+
+      if (code === CHAR_LEFT_CURLY_BRACE) {
+        braceEscaped = true;
+      }
+      continue;
+    }
+
+    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
+      braces++;
+
+      while (eos() !== true && (code = advance())) {
+        if (code === CHAR_BACKWARD_SLASH) {
+          backslashes = token.backslashes = true;
+          advance();
+          continue;
+        }
+
+        if (code === CHAR_LEFT_CURLY_BRACE) {
+          braces++;
+          continue;
+        }
+
+        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
+          isBrace = token.isBrace = true;
+          isGlob = token.isGlob = true;
+          finished = true;
+
+          if (scanToEnd === true) {
+            continue;
+          }
+
+          break;
+        }
+
+        if (braceEscaped !== true && code === CHAR_COMMA) {
+          isBrace = token.isBrace = true;
+          isGlob = token.isGlob = true;
+          finished = true;
+
+          if (scanToEnd === true) {
+            continue;
+          }
+
+          break;
+        }
+
+        if (code === CHAR_RIGHT_CURLY_BRACE) {
+          braces--;
+
+          if (braces === 0) {
+            braceEscaped = false;
+            isBrace = token.isBrace = true;
+            finished = true;
+            break;
+          }
+        }
+      }
+
+      if (scanToEnd === true) {
+        continue;
+      }
+
+      break;
+    }
+
+    if (code === CHAR_FORWARD_SLASH) {
+      slashes.push(index);
+      tokens.push(token);
+      token = { value: '', depth: 0, isGlob: false };
+
+      if (finished === true) continue;
+      if (prev === CHAR_DOT && index === (start + 1)) {
+        start += 2;
+        continue;
+      }
+
+      lastIndex = index + 1;
+      continue;
+    }
+
+    if (opts.noext !== true) {
+      const isExtglobChar = code === CHAR_PLUS
+        || code === CHAR_AT
+        || code === CHAR_ASTERISK
+        || code === CHAR_QUESTION_MARK
+        || code === CHAR_EXCLAMATION_MARK;
+
+      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
+        isGlob = token.isGlob = true;
+        isExtglob = token.isExtglob = true;
+        finished = true;
+
+        if (scanToEnd === true) {
+          while (eos() !== true && (code = advance())) {
+            if (code === CHAR_BACKWARD_SLASH) {
+              backslashes = token.backslashes = true;
+              code = advance();
+              continue;
+            }
+
+            if (code === CHAR_RIGHT_PARENTHESES) {
+              isGlob = token.isGlob = true;
+              finished = true;
+              break;
+            }
+          }
+          continue;
+        }
+        break;
+      }
+    }
+
+    if (code === CHAR_ASTERISK) {
+      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
+      isGlob = token.isGlob = true;
+      finished = true;
+
+      if (scanToEnd === true) {
+        continue;
+      }
+      break;
+    }
+
+    if (code === CHAR_QUESTION_MARK) {
+      isGlob = token.isGlob = true;
+      finished = true;
+
+      if (scanToEnd === true) {
+        continue;
+      }
+      break;
+    }
+
+    if (code === CHAR_LEFT_SQUARE_BRACKET) {
+      while (eos() !== true && (next = advance())) {
+        if (next === CHAR_BACKWARD_SLASH) {
+          backslashes = token.backslashes = true;
+          advance();
+          continue;
+        }
+
+        if (next === CHAR_RIGHT_SQUARE_BRACKET) {
+          isBracket = token.isBracket = true;
+          isGlob = token.isGlob = true;
+          finished = true;
+
+          if (scanToEnd === true) {
+            continue;
+          }
+          break;
+        }
+      }
+    }
+
+    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
+      negated = token.negated = true;
+      start++;
+      continue;
+    }
+
+    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
+      isGlob = token.isGlob = true;
+
+      if (scanToEnd === true) {
+        while (eos() !== true && (code = advance())) {
+          if (code === CHAR_LEFT_PARENTHESES) {
+            backslashes = token.backslashes = true;
+            code = advance();
+            continue;
+          }
+
+          if (code === CHAR_RIGHT_PARENTHESES) {
+            finished = true;
+            break;
+          }
+        }
+        continue;
+      }
+      break;
+    }
+
+    if (isGlob === true) {
+      finished = true;
+
+      if (scanToEnd === true) {
+        continue;
+      }
+
+      break;
+    }
+  }
+
+  if (opts.noext === true) {
+    isExtglob = false;
+    isGlob = false;
+  }
+
+  let base = str;
+  let prefix = '';
+  let glob = '';
+
+  if (start > 0) {
+    prefix = str.slice(0, start);
+    str = str.slice(start);
+    lastIndex -= start;
+  }
+
+  if (base && isGlob === true && lastIndex > 0) {
+    base = str.slice(0, lastIndex);
+    glob = str.slice(lastIndex);
+  } else if (isGlob === true) {
+    base = '';
+    glob = str;
+  } else {
+    base = str;
+  }
+
+  if (base && base !== '' && base !== '/' && base !== str) {
+    if (isPathSeparator(base.charCodeAt(base.length - 1))) {
+      base = base.slice(0, -1);
+    }
+  }
+
+  if (opts.unescape === true) {
+    if (glob) glob = utils.removeBackslashes(glob);
+
+    if (base && backslashes === true) {
+      base = utils.removeBackslashes(base);
+    }
+  }
+
+  const state = {
+    prefix,
+    input,
+    start,
+    base,
+    glob,
+    isBrace,
+    isBracket,
+    isGlob,
+    isExtglob,
+    isGlobstar,
+    negated
+  };
+
+  if (opts.tokens === true) {
+    state.maxDepth = 0;
+    if (!isPathSeparator(code)) {
+      tokens.push(token);
+    }
+    state.tokens = tokens;
+  }
+
+  if (opts.parts === true || opts.tokens === true) {
+    let prevIndex;
+
+    for (let idx = 0; idx < slashes.length; idx++) {
+      const n = prevIndex ? prevIndex + 1 : start;
+      const i = slashes[idx];
+      const value = input.slice(n, i);
+      if (opts.tokens) {
+        if (idx === 0 && start !== 0) {
+          tokens[idx].isPrefix = true;
+          tokens[idx].value = prefix;
+        } else {
+          tokens[idx].value = value;
+        }
+        depth(tokens[idx]);
+        state.maxDepth += tokens[idx].depth;
+      }
+      if (idx !== 0 || value !== '') {
+        parts.push(value);
+      }
+      prevIndex = i;
+    }
+
+    if (prevIndex && prevIndex + 1 < input.length) {
+      const value = input.slice(prevIndex + 1);
+      parts.push(value);
+
+      if (opts.tokens) {
+        tokens[tokens.length - 1].value = value;
+        depth(tokens[tokens.length - 1]);
+        state.maxDepth += tokens[tokens.length - 1].depth;
+      }
+    }
+
+    state.slashes = slashes;
+    state.parts = parts;
+  }
+
+  return state;
+};
+
+var scan_1 = scan;
+
+/**
+ * Constants
+ */
+
+const {
+  MAX_LENGTH,
+  POSIX_REGEX_SOURCE: POSIX_REGEX_SOURCE$1,
+  REGEX_NON_SPECIAL_CHARS,
+  REGEX_SPECIAL_CHARS_BACKREF,
+  REPLACEMENTS
+} = constants;
+
+/**
+ * Helpers
+ */
+
+const expandRange = (args, options) => {
+  if (typeof options.expandRange === 'function') {
+    return options.expandRange(...args, options);
+  }
+
+  args.sort();
+  const value = `[${args.join('-')}]`;
+
+  try {
+    /* eslint-disable-next-line no-new */
+    new RegExp(value);
+  } catch (ex) {
+    return args.map(v => utils.escapeRegex(v)).join('..');
+  }
+
+  return value;
+};
+
+/**
+ * Create the message for a syntax error
+ */
+
+const syntaxError = (type, char) => {
+  return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
+};
+
+/**
+ * Parse the given input string.
+ * @param {String} input
+ * @param {Object} options
+ * @return {Object}
+ */
+
+const parse = (input, options) => {
+  if (typeof input !== 'string') {
+    throw new TypeError('Expected a string');
+  }
+
+  input = REPLACEMENTS[input] || input;
+
+  const opts = { ...options };
+  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+
+  let len = input.length;
+  if (len > max) {
+    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+  }
+
+  const bos = { type: 'bos', value: '', output: opts.prepend || '' };
+  const tokens = [bos];
+
+  const capture = opts.capture ? '' : '?:';
+  const win32 = utils.isWindows(options);
+
+  // create constants based on platform, for windows or posix
+  const PLATFORM_CHARS = constants.globChars(win32);
+  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
+
+  const {
+    DOT_LITERAL,
+    PLUS_LITERAL,
+    SLASH_LITERAL,
+    ONE_CHAR,
+    DOTS_SLASH,
+    NO_DOT,
+    NO_DOT_SLASH,
+    NO_DOTS_SLASH,
+    QMARK,
+    QMARK_NO_DOT,
+    STAR,
+    START_ANCHOR
+  } = PLATFORM_CHARS;
+
+  const globstar = (opts) => {
+    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+  };
+
+  const nodot = opts.dot ? '' : NO_DOT;
+  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
+  let star = opts.bash === true ? globstar(opts) : STAR;
+
+  if (opts.capture) {
+    star = `(${star})`;
+  }
+
+  // minimatch options support
+  if (typeof opts.noext === 'boolean') {
+    opts.noextglob = opts.noext;
+  }
+
+  const state = {
+    input,
+    index: -1,
+    start: 0,
+    dot: opts.dot === true,
+    consumed: '',
+    output: '',
+    prefix: '',
+    backtrack: false,
+    negated: false,
+    brackets: 0,
+    braces: 0,
+    parens: 0,
+    quotes: 0,
+    globstar: false,
+    tokens
+  };
+
+  input = utils.removePrefix(input, state);
+  len = input.length;
+
+  const extglobs = [];
+  const braces = [];
+  const stack = [];
+  let prev = bos;
+  let value;
+
+  /**
+   * Tokenizing helpers
+   */
+
+  const eos = () => state.index === len - 1;
+  const peek = state.peek = (n = 1) => input[state.index + n];
+  const advance = state.advance = () => input[++state.index];
+  const remaining = () => input.slice(state.index + 1);
+  const consume = (value = '', num = 0) => {
+    state.consumed += value;
+    state.index += num;
+  };
+  const append = token => {
+    state.output += token.output != null ? token.output : token.value;
+    consume(token.value);
+  };
+
+  const negate = () => {
+    let count = 1;
+
+    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
+      advance();
+      state.start++;
+      count++;
+    }
+
+    if (count % 2 === 0) {
+      return false;
+    }
+
+    state.negated = true;
+    state.start++;
+    return true;
+  };
+
+  const increment = type => {
+    state[type]++;
+    stack.push(type);
+  };
+
+  const decrement = type => {
+    state[type]--;
+    stack.pop();
+  };
+
+  /**
+   * Push tokens onto the tokens array. This helper speeds up
+   * tokenizing by 1) helping us avoid backtracking as much as possible,
+   * and 2) helping us avoid creating extra tokens when consecutive
+   * characters are plain text. This improves performance and simplifies
+   * lookbehinds.
+   */
+
+  const push = tok => {
+    if (prev.type === 'globstar') {
+      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
+      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
+
+      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
+        state.output = state.output.slice(0, -prev.output.length);
+        prev.type = 'star';
+        prev.value = '*';
+        prev.output = star;
+        state.output += prev.output;
+      }
+    }
+
+    if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
+      extglobs[extglobs.length - 1].inner += tok.value;
+    }
+
+    if (tok.value || tok.output) append(tok);
+    if (prev && prev.type === 'text' && tok.type === 'text') {
+      prev.value += tok.value;
+      prev.output = (prev.output || '') + tok.value;
+      return;
+    }
+
+    tok.prev = prev;
+    tokens.push(tok);
+    prev = tok;
+  };
+
+  const extglobOpen = (type, value) => {
+    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
+
+    token.prev = prev;
+    token.parens = state.parens;
+    token.output = state.output;
+    const output = (opts.capture ? '(' : '') + token.open;
+
+    increment('parens');
+    push({ type, value, output: state.output ? '' : ONE_CHAR });
+    push({ type: 'paren', extglob: true, value: advance(), output });
+    extglobs.push(token);
+  };
+
+  const extglobClose = token => {
+    let output = token.close + (opts.capture ? ')' : '');
+
+    if (token.type === 'negate') {
+      let extglobStar = star;
+
+      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
+        extglobStar = globstar(opts);
+      }
+
+      if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
+        output = token.close = `)$))${extglobStar}`;
+      }
+
+      if (token.prev.type === 'bos' && eos()) {
+        state.negatedExtglob = true;
+      }
+    }
+
+    push({ type: 'paren', extglob: true, value, output });
+    decrement('parens');
+  };
+
+  /**
+   * Fast paths
+   */
+
+  if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
+    let backslashes = false;
+
+    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
+      if (first === '\\') {
+        backslashes = true;
+        return m;
+      }
+
+      if (first === '?') {
+        if (esc) {
+          return esc + first + (rest ? QMARK.repeat(rest.length) : '');
+        }
+        if (index === 0) {
+          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
+        }
+        return QMARK.repeat(chars.length);
+      }
+
+      if (first === '.') {
+        return DOT_LITERAL.repeat(chars.length);
+      }
+
+      if (first === '*') {
+        if (esc) {
+          return esc + first + (rest ? star : '');
+        }
+        return star;
+      }
+      return esc ? m : `\\${m}`;
+    });
+
+    if (backslashes === true) {
+      if (opts.unescape === true) {
+        output = output.replace(/\\/g, '');
+      } else {
+        output = output.replace(/\\+/g, m => {
+          return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
+        });
+      }
+    }
+
+    if (output === input && opts.contains === true) {
+      state.output = input;
+      return state;
+    }
+
+    state.output = utils.wrapOutput(output, state, options);
+    return state;
+  }
+
+  /**
+   * Tokenize input until we reach end-of-string
+   */
+
+  while (!eos()) {
+    value = advance();
+
+    if (value === '\u0000') {
+      continue;
+    }
+
+    /**
+     * Escaped characters
+     */
+
+    if (value === '\\') {
+      const next = peek();
+
+      if (next === '/' && opts.bash !== true) {
+        continue;
+      }
+
+      if (next === '.' || next === ';') {
+        continue;
+      }
+
+      if (!next) {
+        value += '\\';
+        push({ type: 'text', value });
+        continue;
+      }
+
+      // collapse slashes to reduce potential for exploits
+      const match = /^\\+/.exec(remaining());
+      let slashes = 0;
+
+      if (match && match[0].length > 2) {
+        slashes = match[0].length;
+        state.index += slashes;
+        if (slashes % 2 !== 0) {
+          value += '\\';
+        }
+      }
+
+      if (opts.unescape === true) {
+        value = advance() || '';
+      } else {
+        value += advance() || '';
+      }
+
+      if (state.brackets === 0) {
+        push({ type: 'text', value });
+        continue;
+      }
+    }
+
+    /**
+     * If we're inside a regex character class, continue
+     * until we reach the closing bracket.
+     */
+
+    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
+      if (opts.posix !== false && value === ':') {
+        const inner = prev.value.slice(1);
+        if (inner.includes('[')) {
+          prev.posix = true;
+
+          if (inner.includes(':')) {
+            const idx = prev.value.lastIndexOf('[');
+            const pre = prev.value.slice(0, idx);
+            const rest = prev.value.slice(idx + 2);
+            const posix = POSIX_REGEX_SOURCE$1[rest];
+            if (posix) {
+              prev.value = pre + posix;
+              state.backtrack = true;
+              advance();
+
+              if (!bos.output && tokens.indexOf(prev) === 1) {
+                bos.output = ONE_CHAR;
+              }
+              continue;
+            }
+          }
+        }
+      }
+
+      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
+        value = `\\${value}`;
+      }
+
+      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
+        value = `\\${value}`;
+      }
+
+      if (opts.posix === true && value === '!' && prev.value === '[') {
+        value = '^';
+      }
+
+      prev.value += value;
+      append({ value });
+      continue;
+    }
+
+    /**
+     * If we're inside a quoted string, continue
+     * until we reach the closing double quote.
+     */
+
+    if (state.quotes === 1 && value !== '"') {
+      value = utils.escapeRegex(value);
+      prev.value += value;
+      append({ value });
+      continue;
+    }
+
+    /**
+     * Double quotes
+     */
+
+    if (value === '"') {
+      state.quotes = state.quotes === 1 ? 0 : 1;
+      if (opts.keepQuotes === true) {
+        push({ type: 'text', value });
+      }
+      continue;
+    }
+
+    /**
+     * Parentheses
+     */
+
+    if (value === '(') {
+      increment('parens');
+      push({ type: 'paren', value });
+      continue;
+    }
+
+    if (value === ')') {
+      if (state.parens === 0 && opts.strictBrackets === true) {
+        throw new SyntaxError(syntaxError('opening', '('));
+      }
+
+      const extglob = extglobs[extglobs.length - 1];
+      if (extglob && state.parens === extglob.parens + 1) {
+        extglobClose(extglobs.pop());
+        continue;
+      }
+
+      push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
+      decrement('parens');
+      continue;
+    }
+
+    /**
+     * Square brackets
+     */
+
+    if (value === '[') {
+      if (opts.nobracket === true || !remaining().includes(']')) {
+        if (opts.nobracket !== true && opts.strictBrackets === true) {
+          throw new SyntaxError(syntaxError('closing', ']'));
+        }
+
+        value = `\\${value}`;
+      } else {
+        increment('brackets');
+      }
+
+      push({ type: 'bracket', value });
+      continue;
+    }
+
+    if (value === ']') {
+      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
+        push({ type: 'text', value, output: `\\${value}` });
+        continue;
+      }
+
+      if (state.brackets === 0) {
+        if (opts.strictBrackets === true) {
+          throw new SyntaxError(syntaxError('opening', '['));
+        }
+
+        push({ type: 'text', value, output: `\\${value}` });
+        continue;
+      }
+
+      decrement('brackets');
+
+      const prevValue = prev.value.slice(1);
+      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
+        value = `/${value}`;
+      }
+
+      prev.value += value;
+      append({ value });
+
+      // when literal brackets are explicitly disabled
+      // assume we should match with a regex character class
+      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
+        continue;
+      }
+
+      const escaped = utils.escapeRegex(prev.value);
+      state.output = state.output.slice(0, -prev.value.length);
+
+      // when literal brackets are explicitly enabled
+      // assume we should escape the brackets to match literal characters
+      if (opts.literalBrackets === true) {
+        state.output += escaped;
+        prev.value = escaped;
+        continue;
+      }
+
+      // when the user specifies nothing, try to match both
+      prev.value = `(${capture}${escaped}|${prev.value})`;
+      state.output += prev.value;
+      continue;
+    }
+
+    /**
+     * Braces
+     */
+
+    if (value === '{' && opts.nobrace !== true) {
+      increment('braces');
+
+      const open = {
+        type: 'brace',
+        value,
+        output: '(',
+        outputIndex: state.output.length,
+        tokensIndex: state.tokens.length
+      };
+
+      braces.push(open);
+      push(open);
+      continue;
+    }
+
+    if (value === '}') {
+      const brace = braces[braces.length - 1];
+
+      if (opts.nobrace === true || !brace) {
+        push({ type: 'text', value, output: value });
+        continue;
+      }
+
+      let output = ')';
+
+      if (brace.dots === true) {
+        const arr = tokens.slice();
+        const range = [];
+
+        for (let i = arr.length - 1; i >= 0; i--) {
+          tokens.pop();
+          if (arr[i].type === 'brace') {
+            break;
+          }
+          if (arr[i].type !== 'dots') {
+            range.unshift(arr[i].value);
+          }
+        }
+
+        output = expandRange(range, opts);
+        state.backtrack = true;
+      }
+
+      if (brace.comma !== true && brace.dots !== true) {
+        const out = state.output.slice(0, brace.outputIndex);
+        const toks = state.tokens.slice(brace.tokensIndex);
+        brace.value = brace.output = '\\{';
+        value = output = '\\}';
+        state.output = out;
+        for (const t of toks) {
+          state.output += (t.output || t.value);
+        }
+      }
+
+      push({ type: 'brace', value, output });
+      decrement('braces');
+      braces.pop();
+      continue;
+    }
+
+    /**
+     * Pipes
+     */
+
+    if (value === '|') {
+      if (extglobs.length > 0) {
+        extglobs[extglobs.length - 1].conditions++;
+      }
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Commas
+     */
+
+    if (value === ',') {
+      let output = value;
+
+      const brace = braces[braces.length - 1];
+      if (brace && stack[stack.length - 1] === 'braces') {
+        brace.comma = true;
+        output = '|';
+      }
+
+      push({ type: 'comma', value, output });
+      continue;
+    }
+
+    /**
+     * Slashes
+     */
+
+    if (value === '/') {
+      // if the beginning of the glob is "./", advance the start
+      // to the current index, and don't add the "./" characters
+      // to the state. This greatly simplifies lookbehinds when
+      // checking for BOS characters like "!" and "." (not "./")
+      if (prev.type === 'dot' && state.index === state.start + 1) {
+        state.start = state.index + 1;
+        state.consumed = '';
+        state.output = '';
+        tokens.pop();
+        prev = bos; // reset "prev" to the first token
+        continue;
+      }
+
+      push({ type: 'slash', value, output: SLASH_LITERAL });
+      continue;
+    }
+
+    /**
+     * Dots
+     */
+
+    if (value === '.') {
+      if (state.braces > 0 && prev.type === 'dot') {
+        if (prev.value === '.') prev.output = DOT_LITERAL;
+        const brace = braces[braces.length - 1];
+        prev.type = 'dots';
+        prev.output += value;
+        prev.value += value;
+        brace.dots = true;
+        continue;
+      }
+
+      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
+        push({ type: 'text', value, output: DOT_LITERAL });
+        continue;
+      }
+
+      push({ type: 'dot', value, output: DOT_LITERAL });
+      continue;
+    }
+
+    /**
+     * Question marks
+     */
+
+    if (value === '?') {
+      const isGroup = prev && prev.value === '(';
+      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+        extglobOpen('qmark', value);
+        continue;
+      }
+
+      if (prev && prev.type === 'paren') {
+        const next = peek();
+        let output = value;
+
+        if (next === '<' && !utils.supportsLookbehinds()) {
+          throw new Error('Node.js v10 or higher is required for regex lookbehinds');
+        }
+
+        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
+          output = `\\${value}`;
+        }
+
+        push({ type: 'text', value, output });
+        continue;
+      }
+
+      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
+        push({ type: 'qmark', value, output: QMARK_NO_DOT });
+        continue;
+      }
+
+      push({ type: 'qmark', value, output: QMARK });
+      continue;
+    }
+
+    /**
+     * Exclamation
+     */
+
+    if (value === '!') {
+      if (opts.noextglob !== true && peek() === '(') {
+        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
+          extglobOpen('negate', value);
+          continue;
+        }
+      }
+
+      if (opts.nonegate !== true && state.index === 0) {
+        negate();
+        continue;
+      }
+    }
+
+    /**
+     * Plus
+     */
+
+    if (value === '+') {
+      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+        extglobOpen('plus', value);
+        continue;
+      }
+
+      if ((prev && prev.value === '(') || opts.regex === false) {
+        push({ type: 'plus', value, output: PLUS_LITERAL });
+        continue;
+      }
+
+      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
+        push({ type: 'plus', value });
+        continue;
+      }
+
+      push({ type: 'plus', value: PLUS_LITERAL });
+      continue;
+    }
+
+    /**
+     * Plain text
+     */
+
+    if (value === '@') {
+      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
+        push({ type: 'at', extglob: true, value, output: '' });
+        continue;
+      }
+
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Plain text
+     */
+
+    if (value !== '*') {
+      if (value === '$' || value === '^') {
+        value = `\\${value}`;
+      }
+
+      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
+      if (match) {
+        value += match[0];
+        state.index += match[0].length;
+      }
+
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Stars
+     */
+
+    if (prev && (prev.type === 'globstar' || prev.star === true)) {
+      prev.type = 'star';
+      prev.star = true;
+      prev.value += value;
+      prev.output = star;
+      state.backtrack = true;
+      state.globstar = true;
+      consume(value);
+      continue;
+    }
+
+    let rest = remaining();
+    if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
+      extglobOpen('star', value);
+      continue;
+    }
+
+    if (prev.type === 'star') {
+      if (opts.noglobstar === true) {
+        consume(value);
+        continue;
+      }
+
+      const prior = prev.prev;
+      const before = prior.prev;
+      const isStart = prior.type === 'slash' || prior.type === 'bos';
+      const afterStar = before && (before.type === 'star' || before.type === 'globstar');
+
+      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
+        push({ type: 'star', value, output: '' });
+        continue;
+      }
+
+      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
+      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
+      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
+        push({ type: 'star', value, output: '' });
+        continue;
+      }
+
+      // strip consecutive `/**/`
+      while (rest.slice(0, 3) === '/**') {
+        const after = input[state.index + 4];
+        if (after && after !== '/') {
+          break;
+        }
+        rest = rest.slice(3);
+        consume('/**', 3);
+      }
+
+      if (prior.type === 'bos' && eos()) {
+        prev.type = 'globstar';
+        prev.value += value;
+        prev.output = globstar(opts);
+        state.output = prev.output;
+        state.globstar = true;
+        consume(value);
+        continue;
+      }
+
+      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
+        state.output = state.output.slice(0, -(prior.output + prev.output).length);
+        prior.output = `(?:${prior.output}`;
+
+        prev.type = 'globstar';
+        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
+        prev.value += value;
+        state.globstar = true;
+        state.output += prior.output + prev.output;
+        consume(value);
+        continue;
+      }
+
+      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
+        const end = rest[1] !== void 0 ? '|$' : '';
+
+        state.output = state.output.slice(0, -(prior.output + prev.output).length);
+        prior.output = `(?:${prior.output}`;
+
+        prev.type = 'globstar';
+        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
+        prev.value += value;
+
+        state.output += prior.output + prev.output;
+        state.globstar = true;
+
+        consume(value + advance());
+
+        push({ type: 'slash', value: '/', output: '' });
+        continue;
+      }
+
+      if (prior.type === 'bos' && rest[0] === '/') {
+        prev.type = 'globstar';
+        prev.value += value;
+        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
+        state.output = prev.output;
+        state.globstar = true;
+        consume(value + advance());
+        push({ type: 'slash', value: '/', output: '' });
+        continue;
+      }
+
+      // remove single star from output
+      state.output = state.output.slice(0, -prev.output.length);
+
+      // reset previous token to globstar
+      prev.type = 'globstar';
+      prev.output = globstar(opts);
+      prev.value += value;
+
+      // reset output with globstar
+      state.output += prev.output;
+      state.globstar = true;
+      consume(value);
+      continue;
+    }
+
+    const token = { type: 'star', value, output: star };
+
+    if (opts.bash === true) {
+      token.output = '.*?';
+      if (prev.type === 'bos' || prev.type === 'slash') {
+        token.output = nodot + token.output;
+      }
+      push(token);
+      continue;
+    }
+
+    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
+      token.output = value;
+      push(token);
+      continue;
+    }
+
+    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
+      if (prev.type === 'dot') {
+        state.output += NO_DOT_SLASH;
+        prev.output += NO_DOT_SLASH;
+
+      } else if (opts.dot === true) {
+        state.output += NO_DOTS_SLASH;
+        prev.output += NO_DOTS_SLASH;
+
+      } else {
+        state.output += nodot;
+        prev.output += nodot;
+      }
+
+      if (peek() !== '*') {
+        state.output += ONE_CHAR;
+        prev.output += ONE_CHAR;
+      }
+    }
+
+    push(token);
+  }
+
+  while (state.brackets > 0) {
+    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
+    state.output = utils.escapeLast(state.output, '[');
+    decrement('brackets');
+  }
+
+  while (state.parens > 0) {
+    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
+    state.output = utils.escapeLast(state.output, '(');
+    decrement('parens');
+  }
+
+  while (state.braces > 0) {
+    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
+    state.output = utils.escapeLast(state.output, '{');
+    decrement('braces');
+  }
+
+  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
+    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
+  }
+
+  // rebuild the output if we had to backtrack at any point
+  if (state.backtrack === true) {
+    state.output = '';
+
+    for (const token of state.tokens) {
+      state.output += token.output != null ? token.output : token.value;
+
+      if (token.suffix) {
+        state.output += token.suffix;
+      }
+    }
+  }
+
+  return state;
+};
+
+/**
+ * Fast paths for creating regular expressions for common glob patterns.
+ * This can significantly speed up processing and has very little downside
+ * impact when none of the fast paths match.
+ */
+
+parse.fastpaths = (input, options) => {
+  const opts = { ...options };
+  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
+  const len = input.length;
+  if (len > max) {
+    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
+  }
+
+  input = REPLACEMENTS[input] || input;
+  const win32 = utils.isWindows(options);
+
+  // create constants based on platform, for windows or posix
+  const {
+    DOT_LITERAL,
+    SLASH_LITERAL,
+    ONE_CHAR,
+    DOTS_SLASH,
+    NO_DOT,
+    NO_DOTS,
+    NO_DOTS_SLASH,
+    STAR,
+    START_ANCHOR
+  } = constants.globChars(win32);
+
+  const nodot = opts.dot ? NO_DOTS : NO_DOT;
+  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
+  const capture = opts.capture ? '' : '?:';
+  const state = { negated: false, prefix: '' };
+  let star = opts.bash === true ? '.*?' : STAR;
+
+  if (opts.capture) {
+    star = `(${star})`;
+  }
+
+  const globstar = (opts) => {
+    if (opts.noglobstar === true) return star;
+    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
+  };
+
+  const create = str => {
+    switch (str) {
+      case '*':
+        return `${nodot}${ONE_CHAR}${star}`;
+
+      case '.*':
+        return `${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      case '*.*':
+        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      case '*/*':
+        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
+
+      case '**':
+        return nodot + globstar(opts);
+
+      case '**/*':
+        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
+
+      case '**/*.*':
+        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      case '**/.*':
+        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
+
+      default: {
+        const match = /^(.*?)\.(\w+)$/.exec(str);
+        if (!match) return;
+
+        const source = create(match[1]);
+        if (!source) return;
+
+        return source + DOT_LITERAL + match[2];
+      }
+    }
+  };
+
+  const output = utils.removePrefix(input, state);
+  let source = create(output);
+
+  if (source && opts.strictSlashes !== true) {
+    source += `${SLASH_LITERAL}?`;
+  }
+
+  return source;
+};
+
+var parse_1 = parse;
+
+const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
+
+/**
+ * Creates a matcher function from one or more glob patterns. The
+ * returned function takes a string to match as its first argument,
+ * and returns true if the string is a match. The returned matcher
+ * function also takes a boolean as the second argument that, when true,
+ * returns an object with additional information.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch(glob[, options]);
+ *
+ * const isMatch = picomatch('*.!(*a)');
+ * console.log(isMatch('a.a')); //=> false
+ * console.log(isMatch('a.b')); //=> true
+ * ```
+ * @name picomatch
+ * @param {String|Array} `globs` One or more glob patterns.
+ * @param {Object=} `options`
+ * @return {Function=} Returns a matcher function.
+ * @api public
+ */
+
+const picomatch = (glob, options, returnState = false) => {
+  if (Array.isArray(glob)) {
+    const fns = glob.map(input => picomatch(input, options, returnState));
+    const arrayMatcher = str => {
+      for (const isMatch of fns) {
+        const state = isMatch(str);
+        if (state) return state;
+      }
+      return false;
+    };
+    return arrayMatcher;
+  }
+
+  const isState = isObject(glob) && glob.tokens && glob.input;
+
+  if (glob === '' || (typeof glob !== 'string' && !isState)) {
+    throw new TypeError('Expected pattern to be a non-empty string');
+  }
+
+  const opts = options || {};
+  const posix = utils.isWindows(options);
+  const regex = isState
+    ? picomatch.compileRe(glob, options)
+    : picomatch.makeRe(glob, options, false, true);
+
+  const state = regex.state;
+  delete regex.state;
+
+  let isIgnored = () => false;
+  if (opts.ignore) {
+    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
+    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
+  }
+
+  const matcher = (input, returnObject = false) => {
+    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
+    const result = { glob, state, regex, posix, input, output, match, isMatch };
+
+    if (typeof opts.onResult === 'function') {
+      opts.onResult(result);
+    }
+
+    if (isMatch === false) {
+      result.isMatch = false;
+      return returnObject ? result : false;
+    }
+
+    if (isIgnored(input)) {
+      if (typeof opts.onIgnore === 'function') {
+        opts.onIgnore(result);
+      }
+      result.isMatch = false;
+      return returnObject ? result : false;
+    }
+
+    if (typeof opts.onMatch === 'function') {
+      opts.onMatch(result);
+    }
+    return returnObject ? result : true;
+  };
+
+  if (returnState) {
+    matcher.state = state;
+  }
+
+  return matcher;
+};
+
+/**
+ * Test `input` with the given `regex`. This is used by the main
+ * `picomatch()` function to test the input string.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.test(input, regex[, options]);
+ *
+ * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
+ * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
+ * ```
+ * @param {String} `input` String to test.
+ * @param {RegExp} `regex`
+ * @return {Object} Returns an object with matching info.
+ * @api public
+ */
+
+picomatch.test = (input, regex, options, { glob, posix } = {}) => {
+  if (typeof input !== 'string') {
+    throw new TypeError('Expected input to be a string');
+  }
+
+  if (input === '') {
+    return { isMatch: false, output: '' };
+  }
+
+  const opts = options || {};
+  const format = opts.format || (posix ? utils.toPosixSlashes : null);
+  let match = input === glob;
+  let output = (match && format) ? format(input) : input;
+
+  if (match === false) {
+    output = format ? format(input) : input;
+    match = output === glob;
+  }
+
+  if (match === false || opts.capture === true) {
+    if (opts.matchBase === true || opts.basename === true) {
+      match = picomatch.matchBase(input, regex, options, posix);
+    } else {
+      match = regex.exec(output);
+    }
+  }
+
+  return { isMatch: Boolean(match), match, output };
+};
+
+/**
+ * Match the basename of a filepath.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.matchBase(input, glob[, options]);
+ * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
+ * ```
+ * @param {String} `input` String to test.
+ * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
+ * @return {Boolean}
+ * @api public
+ */
+
+picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
+  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
+  return regex.test(sysPath__default['default'].basename(input));
+};
+
+/**
+ * Returns true if **any** of the given glob `patterns` match the specified `string`.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.isMatch(string, patterns[, options]);
+ *
+ * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
+ * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
+ * ```
+ * @param {String|Array} str The string to test.
+ * @param {String|Array} patterns One or more glob patterns to use for matching.
+ * @param {Object} [options] See available [options](#options).
+ * @return {Boolean} Returns true if any patterns match `str`
+ * @api public
+ */
+
+picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
+
+/**
+ * Parse a glob pattern to create the source string for a regular
+ * expression.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * const result = picomatch.parse(pattern[, options]);
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
+ * @api public
+ */
+
+picomatch.parse = (pattern, options) => {
+  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
+  return parse_1(pattern, { ...options, fastpaths: false });
+};
+
+/**
+ * Scan a glob pattern to separate the pattern into segments.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.scan(input[, options]);
+ *
+ * const result = picomatch.scan('!./foo/*.js');
+ * console.log(result);
+ * { prefix: '!./',
+ *   input: '!./foo/*.js',
+ *   start: 3,
+ *   base: 'foo',
+ *   glob: '*.js',
+ *   isBrace: false,
+ *   isBracket: false,
+ *   isGlob: true,
+ *   isExtglob: false,
+ *   isGlobstar: false,
+ *   negated: true }
+ * ```
+ * @param {String} `input` Glob pattern to scan.
+ * @param {Object} `options`
+ * @return {Object} Returns an object with
+ * @api public
+ */
+
+picomatch.scan = (input, options) => scan_1(input, options);
+
+/**
+ * Create a regular expression from a parsed glob pattern.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * const state = picomatch.parse('*.js');
+ * // picomatch.compileRe(state[, options]);
+ *
+ * console.log(picomatch.compileRe(state));
+ * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
+ * ```
+ * @param {String} `state` The object returned from the `.parse` method.
+ * @param {Object} `options`
+ * @return {RegExp} Returns a regex created from the given pattern.
+ * @api public
+ */
+
+picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => {
+  if (returnOutput === true) {
+    return parsed.output;
+  }
+
+  const opts = options || {};
+  const prepend = opts.contains ? '' : '^';
+  const append = opts.contains ? '' : '$';
+
+  let source = `${prepend}(?:${parsed.output})${append}`;
+  if (parsed && parsed.negated === true) {
+    source = `^(?!${source}).*$`;
+  }
+
+  const regex = picomatch.toRegex(source, options);
+  if (returnState === true) {
+    regex.state = parsed;
+  }
+
+  return regex;
+};
+
+picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
+  if (!input || typeof input !== 'string') {
+    throw new TypeError('Expected a non-empty string');
+  }
+
+  const opts = options || {};
+  let parsed = { negated: false, fastpaths: true };
+  let prefix = '';
+  let output;
+
+  if (input.startsWith('./')) {
+    input = input.slice(2);
+    prefix = parsed.prefix = './';
+  }
+
+  if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
+    output = parse_1.fastpaths(input, options);
+  }
+
+  if (output === undefined) {
+    parsed = parse_1(input, options);
+    parsed.prefix = prefix + (parsed.prefix || '');
+  } else {
+    parsed.output = output;
+  }
+
+  return picomatch.compileRe(parsed, options, returnOutput, returnState);
+};
+
+/**
+ * Create a regular expression from the given regex source string.
+ *
+ * ```js
+ * const picomatch = require('picomatch');
+ * // picomatch.toRegex(source[, options]);
+ *
+ * const { output } = picomatch.parse('*.js');
+ * console.log(picomatch.toRegex(output));
+ * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
+ * ```
+ * @param {String} `source` Regular expression source string.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+picomatch.toRegex = (source, options) => {
+  try {
+    const opts = options || {};
+    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
+  } catch (err) {
+    if (options && options.debug === true) throw err;
+    return /$^/;
+  }
+};
+
+/**
+ * Picomatch constants.
+ * @return {Object}
+ */
+
+picomatch.constants = constants;
+
+/**
+ * Expose "picomatch"
+ */
+
+var picomatch_1 = picomatch;
+
+var picomatch$1 = picomatch_1;
+
+const { Readable } = require$$0__default$1['default'];
+
+const { promisify } = require$$0__default['default'];
+
+
+const readdir = promisify(fs__default['default'].readdir);
+const stat = promisify(fs__default['default'].stat);
+const lstat = promisify(fs__default['default'].lstat);
+const realpath = promisify(fs__default['default'].realpath);
+
+/**
+ * @typedef {Object} EntryInfo
+ * @property {String} path
+ * @property {String} fullPath
+ * @property {fs.Stats=} stats
+ * @property {fs.Dirent=} dirent
+ * @property {String} basename
+ */
+
+const BANG = '!';
+const NORMAL_FLOW_ERRORS = new Set(['ENOENT', 'EPERM', 'EACCES', 'ELOOP']);
+const FILE_TYPE = 'files';
+const DIR_TYPE = 'directories';
+const FILE_DIR_TYPE = 'files_directories';
+const EVERYTHING_TYPE = 'all';
+const ALL_TYPES = [FILE_TYPE, DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE];
+
+const isNormalFlowError = error => NORMAL_FLOW_ERRORS.has(error.code);
+
+const normalizeFilter = filter => {
+  if (filter === undefined) return;
+  if (typeof filter === 'function') return filter;
+
+  if (typeof filter === 'string') {
+    const glob = picomatch$1(filter.trim());
+    return entry => glob(entry.basename);
+  }
+
+  if (Array.isArray(filter)) {
+    const positive = [];
+    const negative = [];
+    for (const item of filter) {
+      const trimmed = item.trim();
+      if (trimmed.charAt(0) === BANG) {
+        negative.push(picomatch$1(trimmed.slice(1)));
+      } else {
+        positive.push(picomatch$1(trimmed));
+      }
+    }
+
+    if (negative.length > 0) {
+      if (positive.length > 0) {
+        return entry =>
+          positive.some(f => f(entry.basename)) && !negative.some(f => f(entry.basename));
+      }
+      return entry => !negative.some(f => f(entry.basename));
+    }
+    return entry => positive.some(f => f(entry.basename));
+  }
+};
+
+class ReaddirpStream extends Readable {
+  static get defaultOptions() {
+    return {
+      root: '.',
+      /* eslint-disable no-unused-vars */
+      fileFilter: (path) => true,
+      directoryFilter: (path) => true,
+      /* eslint-enable no-unused-vars */
+      type: FILE_TYPE,
+      lstat: false,
+      depth: 2147483648,
+      alwaysStat: false
+    };
+  }
+
+  constructor(options = {}) {
+    super({
+      objectMode: true,
+      autoDestroy: true,
+      highWaterMark: options.highWaterMark || 4096
+    });
+    const opts = { ...ReaddirpStream.defaultOptions, ...options };
+    const { root, type } = opts;
+
+    this._fileFilter = normalizeFilter(opts.fileFilter);
+    this._directoryFilter = normalizeFilter(opts.directoryFilter);
+
+    const statMethod = opts.lstat ? lstat : stat;
+    // Use bigint stats if it's windows and stat() supports options (node 10+).
+    if (process.platform === 'win32' && stat.length === 3) {
+      this._stat = path => statMethod(path, { bigint: true });
+    } else {
+      this._stat = statMethod;
+    }
+
+    this._maxDepth = opts.depth;
+    this._wantsDir = [DIR_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);
+    this._wantsFile = [FILE_TYPE, FILE_DIR_TYPE, EVERYTHING_TYPE].includes(type);
+    this._wantsEverything = type === EVERYTHING_TYPE;
+    this._root = sysPath__default['default'].resolve(root);
+    this._isDirent = ('Dirent' in fs__default['default']) && !opts.alwaysStat;
+    this._statsProp = this._isDirent ? 'dirent' : 'stats';
+    this._rdOptions = { encoding: 'utf8', withFileTypes: this._isDirent };
+
+    // Launch stream with one parent, the root dir.
+    this.parents = [this._exploreDir(root, 1)];
+    this.reading = false;
+    this.parent = undefined;
+  }
+
+  async _read(batch) {
+    if (this.reading) return;
+    this.reading = true;
+
+    try {
+      while (!this.destroyed && batch > 0) {
+        const { path, depth, files = [] } = this.parent || {};
+
+        if (files.length > 0) {
+          const slice = files.splice(0, batch).map(dirent => this._formatEntry(dirent, path));
+          for (const entry of await Promise.all(slice)) {
+            if (this.destroyed) return;
+
+            const entryType = await this._getEntryType(entry);
+            if (entryType === 'directory' && this._directoryFilter(entry)) {
+              if (depth <= this._maxDepth) {
+                this.parents.push(this._exploreDir(entry.fullPath, depth + 1));
+              }
+
+              if (this._wantsDir) {
+                this.push(entry);
+                batch--;
+              }
+            } else if ((entryType === 'file' || this._includeAsFile(entry)) && this._fileFilter(entry)) {
+              if (this._wantsFile) {
+                this.push(entry);
+                batch--;
+              }
+            }
+          }
+        } else {
+          const parent = this.parents.pop();
+          if (!parent) {
+            this.push(null);
+            break;
+          }
+          this.parent = await parent;
+          if (this.destroyed) return;
+        }
+      }
+    } catch (error) {
+      this.destroy(error);
+    } finally {
+      this.reading = false;
+    }
+  }
+
+  async _exploreDir(path, depth) {
+    let files;
+    try {
+      files = await readdir(path, this._rdOptions);
+    } catch (error) {
+      this._onError(error);
+    }
+    return {files, depth, path};
+  }
+
+  async _formatEntry(dirent, path) {
+    let entry;
+    try {
+      const basename = this._isDirent ? dirent.name : dirent;
+      const fullPath = sysPath__default['default'].resolve(sysPath__default['default'].join(path, basename));
+      entry = {path: sysPath__default['default'].relative(this._root, fullPath), fullPath, basename};
+      entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);
+    } catch (err) {
+      this._onError(err);
+    }
+    return entry;
+  }
+
+  _onError(err) {
+    if (isNormalFlowError(err) && !this.destroyed) {
+      this.emit('warn', err);
+    } else {
+      this.destroy(err);
+    }
+  }
+
+  async _getEntryType(entry) {
+    // entry may be undefined, because a warning or an error were emitted
+    // and the statsProp is undefined
+    const stats = entry && entry[this._statsProp];
+    if (!stats) {
+      return;
+    }
+    if (stats.isFile()) {
+      return 'file';
+    }
+    if (stats.isDirectory()) {
+      return 'directory';
+    }
+    if (stats && stats.isSymbolicLink()) {
+      const full = entry.fullPath;
+      try {
+        const entryRealPath = await realpath(full);
+        const entryRealPathStats = await lstat(entryRealPath);
+        if (entryRealPathStats.isFile()) {
+          return 'file';
+        }
+        if (entryRealPathStats.isDirectory()) {
+          const len = entryRealPath.length;
+          if (full.startsWith(entryRealPath) && full.substr(len, 1) === sysPath__default['default'].sep) {
+            return this._onError(new Error(
+              `Circular symlink detected: "${full}" points to "${entryRealPath}"`
+            ));
+          }
+          return 'directory';
+        }
+      } catch (error) {
+        this._onError(error);
+      }
+    }
+  }
+
+  _includeAsFile(entry) {
+    const stats = entry && entry[this._statsProp];
+
+    return stats && this._wantsEverything && !stats.isDirectory();
+  }
+}
+
+/**
+ * @typedef {Object} ReaddirpArguments
+ * @property {Function=} fileFilter
+ * @property {Function=} directoryFilter
+ * @property {String=} type
+ * @property {Number=} depth
+ * @property {String=} root
+ * @property {Boolean=} lstat
+ * @property {Boolean=} bigint
+ */
+
+/**
+ * Main function which ends up calling readdirRec and reads all files and directories in given root recursively.
+ * @param {String} root Root directory
+ * @param {ReaddirpArguments=} options Options to specify root (start directory), filters and recursion depth
+ */
+const readdirp = (root, options = {}) => {
+  let type = options.entryType || options.type;
+  if (type === 'both') type = FILE_DIR_TYPE; // backwards-compatibility
+  if (type) options.type = type;
+  if (!root) {
+    throw new Error('readdirp: root argument is required. Usage: readdirp(root, options)');
+  } else if (typeof root !== 'string') {
+    throw new TypeError('readdirp: root argument must be a string. Usage: readdirp(root, options)');
+  } else if (type && !ALL_TYPES.includes(type)) {
+    throw new Error(`readdirp: Invalid type passed. Use one of ${ALL_TYPES.join(', ')}`);
+  }
+
+  options.root = root;
+  return new ReaddirpStream(options);
+};
+
+const readdirpPromise = (root, options = {}) => {
+  return new Promise((resolve, reject) => {
+    const files = [];
+    readdirp(root, options)
+      .on('data', entry => files.push(entry))
+      .on('end', () => resolve(files))
+      .on('error', error => reject(error));
+  });
+};
+
+readdirp.promise = readdirpPromise;
+readdirp.ReaddirpStream = ReaddirpStream;
+readdirp.default = readdirp;
+
+var readdirp_1 = readdirp;
+
+/*!
+ * normalize-path 
+ *
+ * Copyright (c) 2014-2018, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var normalizePath = function(path, stripTrailing) {
+  if (typeof path !== 'string') {
+    throw new TypeError('expected path to be a string');
+  }
+
+  if (path === '\\' || path === '/') return '/';
+
+  var len = path.length;
+  if (len <= 1) return path;
+
+  // ensure that win32 namespaces has two leading slashes, so that the path is
+  // handled properly by the win32 version of path.parse() after being normalized
+  // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces
+  var prefix = '';
+  if (len > 4 && path[3] === '\\') {
+    var ch = path[2];
+    if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') {
+      path = path.slice(2);
+      prefix = '//';
+    }
+  }
+
+  var segs = path.split(/[/\\]+/);
+  if (stripTrailing !== false && segs[segs.length - 1] === '') {
+    segs.pop();
+  }
+  return prefix + segs.join('/');
+};
+
+var anymatch_1 = createCommonjsModule(function (module, exports) {
+
+Object.defineProperty(exports, "__esModule", { value: true });
+
+
+
+
+/**
+ * @typedef {(testString: string) => boolean} AnymatchFn
+ * @typedef {string|RegExp|AnymatchFn} AnymatchPattern
+ * @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
+ */
+const BANG = '!';
+const DEFAULT_OPTIONS = {returnIndex: false};
+const arrify = (item) => Array.isArray(item) ? item : [item];
+
+/**
+ * @param {AnymatchPattern} matcher
+ * @param {object} options
+ * @returns {AnymatchFn}
+ */
+const createPattern = (matcher, options) => {
+  if (typeof matcher === 'function') {
+    return matcher;
+  }
+  if (typeof matcher === 'string') {
+    const glob = picomatch$1(matcher, options);
+    return (string) => matcher === string || glob(string);
+  }
+  if (matcher instanceof RegExp) {
+    return (string) => matcher.test(string);
+  }
+  return (string) => false;
+};
+
+/**
+ * @param {Array} patterns
+ * @param {Array} negPatterns
+ * @param {String|Array} args
+ * @param {Boolean} returnIndex
+ * @returns {boolean|number}
+ */
+const matchPatterns = (patterns, negPatterns, args, returnIndex) => {
+  const isList = Array.isArray(args);
+  const _path = isList ? args[0] : args;
+  if (!isList && typeof _path !== 'string') {
+    throw new TypeError('anymatch: second argument must be a string: got ' +
+      Object.prototype.toString.call(_path))
+  }
+  const path = normalizePath(_path);
+
+  for (let index = 0; index < negPatterns.length; index++) {
+    const nglob = negPatterns[index];
+    if (nglob(path)) {
+      return returnIndex ? -1 : false;
+    }
+  }
+
+  const applied = isList && [path].concat(args.slice(1));
+  for (let index = 0; index < patterns.length; index++) {
+    const pattern = patterns[index];
+    if (isList ? pattern(...applied) : pattern(path)) {
+      return returnIndex ? index : true;
+    }
+  }
+
+  return returnIndex ? -1 : false;
+};
+
+/**
+ * @param {AnymatchMatcher} matchers
+ * @param {Array|string} testString
+ * @param {object} options
+ * @returns {boolean|number|Function}
+ */
+const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {
+  if (matchers == null) {
+    throw new TypeError('anymatch: specify first argument');
+  }
+  const opts = typeof options === 'boolean' ? {returnIndex: options} : options;
+  const returnIndex = opts.returnIndex || false;
+
+  // Early cache for matchers.
+  const mtchers = arrify(matchers);
+  const negatedGlobs = mtchers
+    .filter(item => typeof item === 'string' && item.charAt(0) === BANG)
+    .map(item => item.slice(1))
+    .map(item => picomatch$1(item, opts));
+  const patterns = mtchers.map(matcher => createPattern(matcher, opts));
+
+  if (testString == null) {
+    return (testString, ri = false) => {
+      const returnIndex = typeof ri === 'boolean' ? ri : false;
+      return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
+    }
+  }
+
+  return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
+};
+
+anymatch.default = anymatch;
+module.exports = anymatch;
+});
+
+/*!
+ * is-extglob 
+ *
+ * Copyright (c) 2014-2016, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+var isExtglob = function isExtglob(str) {
+  if (typeof str !== 'string' || str === '') {
+    return false;
+  }
+
+  var match;
+  while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
+    if (match[2]) return true;
+    str = str.slice(match.index + match[0].length);
+  }
+
+  return false;
+};
+
+/*!
+ * is-glob 
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+
+var chars = { '{': '}', '(': ')', '[': ']'};
+var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
+var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
+
+var isGlob = function isGlob(str, options) {
+  if (typeof str !== 'string' || str === '') {
+    return false;
+  }
+
+  if (isExtglob(str)) {
+    return true;
+  }
+
+  var regex = strictRegex;
+  var match;
+
+  // optionally relax regex
+  if (options && options.strict === false) {
+    regex = relaxedRegex;
+  }
+
+  while ((match = regex.exec(str))) {
+    if (match[2]) return true;
+    var idx = match.index + match[0].length;
+
+    // if an open bracket/brace/paren is escaped,
+    // set the index to the next closing character
+    var open = match[1];
+    var close = open ? chars[open] : null;
+    if (open && close) {
+      var n = str.indexOf(close, idx);
+      if (n !== -1) {
+        idx = n + 1;
+      }
+    }
+
+    str = str.slice(idx);
+  }
+  return false;
+};
+
+var pathPosixDirname = sysPath__default['default'].posix.dirname;
+var isWin32 = require$$1__default['default'].platform() === 'win32';
+
+var slash = '/';
+var backslash = /\\/g;
+var enclosure = /[\{\[].*[\/]*.*[\}\]]$/;
+var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
+var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
+
+/**
+ * @param {string} str
+ * @param {Object} opts
+ * @param {boolean} [opts.flipBackslashes=true]
+ */
+var globParent = function globParent(str, opts) {
+  var options = Object.assign({ flipBackslashes: true }, opts);
+
+  // flip windows path separators
+  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
+    str = str.replace(backslash, slash);
+  }
+
+  // special case for strings ending in enclosure containing path separator
+  if (enclosure.test(str)) {
+    str += slash;
+  }
+
+  // preserves full path in case of trailing path separator
+  str += 'a';
+
+  // remove path parts that are globby
+  do {
+    str = pathPosixDirname(str);
+  } while (isGlob(str) || globby.test(str));
+
+  // remove escape chars and return result
+  return str.replace(escaped, '$1');
+};
+
+var utils$1 = createCommonjsModule(function (module, exports) {
+
+exports.isInteger = num => {
+  if (typeof num === 'number') {
+    return Number.isInteger(num);
+  }
+  if (typeof num === 'string' && num.trim() !== '') {
+    return Number.isInteger(Number(num));
+  }
+  return false;
+};
+
+/**
+ * Find a node of the given type
+ */
+
+exports.find = (node, type) => node.nodes.find(node => node.type === type);
+
+/**
+ * Find a node of the given type
+ */
+
+exports.exceedsLimit = (min, max, step = 1, limit) => {
+  if (limit === false) return false;
+  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
+  return ((Number(max) - Number(min)) / Number(step)) >= limit;
+};
+
+/**
+ * Escape the given node with '\\' before node.value
+ */
+
+exports.escapeNode = (block, n = 0, type) => {
+  let node = block.nodes[n];
+  if (!node) return;
+
+  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
+    if (node.escaped !== true) {
+      node.value = '\\' + node.value;
+      node.escaped = true;
+    }
+  }
+};
+
+/**
+ * Returns true if the given brace node should be enclosed in literal braces
+ */
+
+exports.encloseBrace = node => {
+  if (node.type !== 'brace') return false;
+  if ((node.commas >> 0 + node.ranges >> 0) === 0) {
+    node.invalid = true;
+    return true;
+  }
+  return false;
+};
+
+/**
+ * Returns true if a brace node is invalid.
+ */
+
+exports.isInvalidBrace = block => {
+  if (block.type !== 'brace') return false;
+  if (block.invalid === true || block.dollar) return true;
+  if ((block.commas >> 0 + block.ranges >> 0) === 0) {
+    block.invalid = true;
+    return true;
+  }
+  if (block.open !== true || block.close !== true) {
+    block.invalid = true;
+    return true;
+  }
+  return false;
+};
+
+/**
+ * Returns true if a node is an open or close node
+ */
+
+exports.isOpenOrClose = node => {
+  if (node.type === 'open' || node.type === 'close') {
+    return true;
+  }
+  return node.open === true || node.close === true;
+};
+
+/**
+ * Reduce an array of text nodes.
+ */
+
+exports.reduce = nodes => nodes.reduce((acc, node) => {
+  if (node.type === 'text') acc.push(node.value);
+  if (node.type === 'range') node.type = 'text';
+  return acc;
+}, []);
+
+/**
+ * Flatten an array
+ */
+
+exports.flatten = (...args) => {
+  const result = [];
+  const flat = arr => {
+    for (let i = 0; i < arr.length; i++) {
+      let ele = arr[i];
+      Array.isArray(ele) ? flat(ele) : ele !== void 0 && result.push(ele);
+    }
+    return result;
+  };
+  flat(args);
+  return result;
+};
+});
+
+var stringify = (ast, options = {}) => {
+  let stringify = (node, parent = {}) => {
+    let invalidBlock = options.escapeInvalid && utils$1.isInvalidBrace(parent);
+    let invalidNode = node.invalid === true && options.escapeInvalid === true;
+    let output = '';
+
+    if (node.value) {
+      if ((invalidBlock || invalidNode) && utils$1.isOpenOrClose(node)) {
+        return '\\' + node.value;
+      }
+      return node.value;
+    }
+
+    if (node.value) {
+      return node.value;
+    }
+
+    if (node.nodes) {
+      for (let child of node.nodes) {
+        output += stringify(child);
+      }
+    }
+    return output;
+  };
+
+  return stringify(ast);
+};
+
+/*!
+ * is-number 
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var isNumber = function(num) {
+  if (typeof num === 'number') {
+    return num - num === 0;
+  }
+  if (typeof num === 'string' && num.trim() !== '') {
+    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
+  }
+  return false;
+};
+
+const toRegexRange = (min, max, options) => {
+  if (isNumber(min) === false) {
+    throw new TypeError('toRegexRange: expected the first argument to be a number');
+  }
+
+  if (max === void 0 || min === max) {
+    return String(min);
+  }
+
+  if (isNumber(max) === false) {
+    throw new TypeError('toRegexRange: expected the second argument to be a number.');
+  }
+
+  let opts = { relaxZeros: true, ...options };
+  if (typeof opts.strictZeros === 'boolean') {
+    opts.relaxZeros = opts.strictZeros === false;
+  }
+
+  let relax = String(opts.relaxZeros);
+  let shorthand = String(opts.shorthand);
+  let capture = String(opts.capture);
+  let wrap = String(opts.wrap);
+  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
+
+  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
+    return toRegexRange.cache[cacheKey].result;
+  }
+
+  let a = Math.min(min, max);
+  let b = Math.max(min, max);
+
+  if (Math.abs(a - b) === 1) {
+    let result = min + '|' + max;
+    if (opts.capture) {
+      return `(${result})`;
+    }
+    if (opts.wrap === false) {
+      return result;
+    }
+    return `(?:${result})`;
+  }
+
+  let isPadded = hasPadding(min) || hasPadding(max);
+  let state = { min, max, a, b };
+  let positives = [];
+  let negatives = [];
+
+  if (isPadded) {
+    state.isPadded = isPadded;
+    state.maxLen = String(state.max).length;
+  }
+
+  if (a < 0) {
+    let newMin = b < 0 ? Math.abs(b) : 1;
+    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
+    a = state.a = 0;
+  }
+
+  if (b >= 0) {
+    positives = splitToPatterns(a, b, state, opts);
+  }
+
+  state.negatives = negatives;
+  state.positives = positives;
+  state.result = collatePatterns(negatives, positives);
+
+  if (opts.capture === true) {
+    state.result = `(${state.result})`;
+  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
+    state.result = `(?:${state.result})`;
+  }
+
+  toRegexRange.cache[cacheKey] = state;
+  return state.result;
+};
+
+function collatePatterns(neg, pos, options) {
+  let onlyNegative = filterPatterns(neg, pos, '-', false) || [];
+  let onlyPositive = filterPatterns(pos, neg, '', false) || [];
+  let intersected = filterPatterns(neg, pos, '-?', true) || [];
+  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
+  return subpatterns.join('|');
+}
+
+function splitToRanges(min, max) {
+  let nines = 1;
+  let zeros = 1;
+
+  let stop = countNines(min, nines);
+  let stops = new Set([max]);
+
+  while (min <= stop && stop <= max) {
+    stops.add(stop);
+    nines += 1;
+    stop = countNines(min, nines);
+  }
+
+  stop = countZeros(max + 1, zeros) - 1;
+
+  while (min < stop && stop <= max) {
+    stops.add(stop);
+    zeros += 1;
+    stop = countZeros(max + 1, zeros) - 1;
+  }
+
+  stops = [...stops];
+  stops.sort(compare);
+  return stops;
+}
+
+/**
+ * Convert a range to a regex pattern
+ * @param {Number} `start`
+ * @param {Number} `stop`
+ * @return {String}
+ */
+
+function rangeToPattern(start, stop, options) {
+  if (start === stop) {
+    return { pattern: start, count: [], digits: 0 };
+  }
+
+  let zipped = zip(start, stop);
+  let digits = zipped.length;
+  let pattern = '';
+  let count = 0;
+
+  for (let i = 0; i < digits; i++) {
+    let [startDigit, stopDigit] = zipped[i];
+
+    if (startDigit === stopDigit) {
+      pattern += startDigit;
+
+    } else if (startDigit !== '0' || stopDigit !== '9') {
+      pattern += toCharacterClass(startDigit, stopDigit);
+
+    } else {
+      count++;
+    }
+  }
+
+  if (count) {
+    pattern += options.shorthand === true ? '\\d' : '[0-9]';
+  }
+
+  return { pattern, count: [count], digits };
+}
+
+function splitToPatterns(min, max, tok, options) {
+  let ranges = splitToRanges(min, max);
+  let tokens = [];
+  let start = min;
+  let prev;
+
+  for (let i = 0; i < ranges.length; i++) {
+    let max = ranges[i];
+    let obj = rangeToPattern(String(start), String(max), options);
+    let zeros = '';
+
+    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
+      if (prev.count.length > 1) {
+        prev.count.pop();
+      }
+
+      prev.count.push(obj.count[0]);
+      prev.string = prev.pattern + toQuantifier(prev.count);
+      start = max + 1;
+      continue;
+    }
+
+    if (tok.isPadded) {
+      zeros = padZeros(max, tok, options);
+    }
+
+    obj.string = zeros + obj.pattern + toQuantifier(obj.count);
+    tokens.push(obj);
+    start = max + 1;
+    prev = obj;
+  }
+
+  return tokens;
+}
+
+function filterPatterns(arr, comparison, prefix, intersection, options) {
+  let result = [];
+
+  for (let ele of arr) {
+    let { string } = ele;
+
+    // only push if _both_ are negative...
+    if (!intersection && !contains(comparison, 'string', string)) {
+      result.push(prefix + string);
+    }
+
+    // or _both_ are positive
+    if (intersection && contains(comparison, 'string', string)) {
+      result.push(prefix + string);
+    }
+  }
+  return result;
+}
+
+/**
+ * Zip strings
+ */
+
+function zip(a, b) {
+  let arr = [];
+  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
+  return arr;
+}
+
+function compare(a, b) {
+  return a > b ? 1 : b > a ? -1 : 0;
+}
+
+function contains(arr, key, val) {
+  return arr.some(ele => ele[key] === val);
+}
+
+function countNines(min, len) {
+  return Number(String(min).slice(0, -len) + '9'.repeat(len));
+}
+
+function countZeros(integer, zeros) {
+  return integer - (integer % Math.pow(10, zeros));
+}
+
+function toQuantifier(digits) {
+  let [start = 0, stop = ''] = digits;
+  if (stop || start > 1) {
+    return `{${start + (stop ? ',' + stop : '')}}`;
+  }
+  return '';
+}
+
+function toCharacterClass(a, b, options) {
+  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
+}
+
+function hasPadding(str) {
+  return /^-?(0+)\d/.test(str);
+}
+
+function padZeros(value, tok, options) {
+  if (!tok.isPadded) {
+    return value;
+  }
+
+  let diff = Math.abs(tok.maxLen - String(value).length);
+  let relax = options.relaxZeros !== false;
+
+  switch (diff) {
+    case 0:
+      return '';
+    case 1:
+      return relax ? '0?' : '0';
+    case 2:
+      return relax ? '0{0,2}' : '00';
+    default: {
+      return relax ? `0{0,${diff}}` : `0{${diff}}`;
+    }
+  }
+}
+
+/**
+ * Cache
+ */
+
+toRegexRange.cache = {};
+toRegexRange.clearCache = () => (toRegexRange.cache = {});
+
+/**
+ * Expose `toRegexRange`
+ */
+
+var toRegexRange_1 = toRegexRange;
+
+const isObject$1 = val => val !== null && typeof val === 'object' && !Array.isArray(val);
+
+const transform = toNumber => {
+  return value => toNumber === true ? Number(value) : String(value);
+};
+
+const isValidValue = value => {
+  return typeof value === 'number' || (typeof value === 'string' && value !== '');
+};
+
+const isNumber$1 = num => Number.isInteger(+num);
+
+const zeros = input => {
+  let value = `${input}`;
+  let index = -1;
+  if (value[0] === '-') value = value.slice(1);
+  if (value === '0') return false;
+  while (value[++index] === '0');
+  return index > 0;
+};
+
+const stringify$1 = (start, end, options) => {
+  if (typeof start === 'string' || typeof end === 'string') {
+    return true;
+  }
+  return options.stringify === true;
+};
+
+const pad = (input, maxLength, toNumber) => {
+  if (maxLength > 0) {
+    let dash = input[0] === '-' ? '-' : '';
+    if (dash) input = input.slice(1);
+    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
+  }
+  if (toNumber === false) {
+    return String(input);
+  }
+  return input;
+};
+
+const toMaxLen = (input, maxLength) => {
+  let negative = input[0] === '-' ? '-' : '';
+  if (negative) {
+    input = input.slice(1);
+    maxLength--;
+  }
+  while (input.length < maxLength) input = '0' + input;
+  return negative ? ('-' + input) : input;
+};
+
+const toSequence = (parts, options) => {
+  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
+  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
+
+  let prefix = options.capture ? '' : '?:';
+  let positives = '';
+  let negatives = '';
+  let result;
+
+  if (parts.positives.length) {
+    positives = parts.positives.join('|');
+  }
+
+  if (parts.negatives.length) {
+    negatives = `-(${prefix}${parts.negatives.join('|')})`;
+  }
+
+  if (positives && negatives) {
+    result = `${positives}|${negatives}`;
+  } else {
+    result = positives || negatives;
+  }
+
+  if (options.wrap) {
+    return `(${prefix}${result})`;
+  }
+
+  return result;
+};
+
+const toRange = (a, b, isNumbers, options) => {
+  if (isNumbers) {
+    return toRegexRange_1(a, b, { wrap: false, ...options });
+  }
+
+  let start = String.fromCharCode(a);
+  if (a === b) return start;
+
+  let stop = String.fromCharCode(b);
+  return `[${start}-${stop}]`;
+};
+
+const toRegex = (start, end, options) => {
+  if (Array.isArray(start)) {
+    let wrap = options.wrap === true;
+    let prefix = options.capture ? '' : '?:';
+    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
+  }
+  return toRegexRange_1(start, end, options);
+};
+
+const rangeError = (...args) => {
+  return new RangeError('Invalid range arguments: ' + require$$0__default['default'].inspect(...args));
+};
+
+const invalidRange = (start, end, options) => {
+  if (options.strictRanges === true) throw rangeError([start, end]);
+  return [];
+};
+
+const invalidStep = (step, options) => {
+  if (options.strictRanges === true) {
+    throw new TypeError(`Expected step "${step}" to be a number`);
+  }
+  return [];
+};
+
+const fillNumbers = (start, end, step = 1, options = {}) => {
+  let a = Number(start);
+  let b = Number(end);
+
+  if (!Number.isInteger(a) || !Number.isInteger(b)) {
+    if (options.strictRanges === true) throw rangeError([start, end]);
+    return [];
+  }
+
+  // fix negative zero
+  if (a === 0) a = 0;
+  if (b === 0) b = 0;
+
+  let descending = a > b;
+  let startString = String(start);
+  let endString = String(end);
+  let stepString = String(step);
+  step = Math.max(Math.abs(step), 1);
+
+  let padded = zeros(startString) || zeros(endString) || zeros(stepString);
+  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
+  let toNumber = padded === false && stringify$1(start, end, options) === false;
+  let format = options.transform || transform(toNumber);
+
+  if (options.toRegex && step === 1) {
+    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
+  }
+
+  let parts = { negatives: [], positives: [] };
+  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
+  let range = [];
+  let index = 0;
+
+  while (descending ? a >= b : a <= b) {
+    if (options.toRegex === true && step > 1) {
+      push(a);
+    } else {
+      range.push(pad(format(a, index), maxLen, toNumber));
+    }
+    a = descending ? a - step : a + step;
+    index++;
+  }
+
+  if (options.toRegex === true) {
+    return step > 1
+      ? toSequence(parts, options)
+      : toRegex(range, null, { wrap: false, ...options });
+  }
+
+  return range;
+};
+
+const fillLetters = (start, end, step = 1, options = {}) => {
+  if ((!isNumber$1(start) && start.length > 1) || (!isNumber$1(end) && end.length > 1)) {
+    return invalidRange(start, end, options);
+  }
+
+
+  let format = options.transform || (val => String.fromCharCode(val));
+  let a = `${start}`.charCodeAt(0);
+  let b = `${end}`.charCodeAt(0);
+
+  let descending = a > b;
+  let min = Math.min(a, b);
+  let max = Math.max(a, b);
+
+  if (options.toRegex && step === 1) {
+    return toRange(min, max, false, options);
+  }
+
+  let range = [];
+  let index = 0;
+
+  while (descending ? a >= b : a <= b) {
+    range.push(format(a, index));
+    a = descending ? a - step : a + step;
+    index++;
+  }
+
+  if (options.toRegex === true) {
+    return toRegex(range, null, { wrap: false, options });
+  }
+
+  return range;
+};
+
+const fill = (start, end, step, options = {}) => {
+  if (end == null && isValidValue(start)) {
+    return [start];
+  }
+
+  if (!isValidValue(start) || !isValidValue(end)) {
+    return invalidRange(start, end, options);
+  }
+
+  if (typeof step === 'function') {
+    return fill(start, end, 1, { transform: step });
+  }
+
+  if (isObject$1(step)) {
+    return fill(start, end, 0, step);
+  }
+
+  let opts = { ...options };
+  if (opts.capture === true) opts.wrap = true;
+  step = step || opts.step || 1;
+
+  if (!isNumber$1(step)) {
+    if (step != null && !isObject$1(step)) return invalidStep(step, opts);
+    return fill(start, end, 1, step);
+  }
+
+  if (isNumber$1(start) && isNumber$1(end)) {
+    return fillNumbers(start, end, step, opts);
+  }
+
+  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
+};
+
+var fillRange = fill;
+
+const compile = (ast, options = {}) => {
+  let walk = (node, parent = {}) => {
+    let invalidBlock = utils$1.isInvalidBrace(parent);
+    let invalidNode = node.invalid === true && options.escapeInvalid === true;
+    let invalid = invalidBlock === true || invalidNode === true;
+    let prefix = options.escapeInvalid === true ? '\\' : '';
+    let output = '';
+
+    if (node.isOpen === true) {
+      return prefix + node.value;
+    }
+    if (node.isClose === true) {
+      return prefix + node.value;
+    }
+
+    if (node.type === 'open') {
+      return invalid ? (prefix + node.value) : '(';
+    }
+
+    if (node.type === 'close') {
+      return invalid ? (prefix + node.value) : ')';
+    }
+
+    if (node.type === 'comma') {
+      return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
+    }
+
+    if (node.value) {
+      return node.value;
+    }
+
+    if (node.nodes && node.ranges > 0) {
+      let args = utils$1.reduce(node.nodes);
+      let range = fillRange(...args, { ...options, wrap: false, toRegex: true });
+
+      if (range.length !== 0) {
+        return args.length > 1 && range.length > 1 ? `(${range})` : range;
+      }
+    }
+
+    if (node.nodes) {
+      for (let child of node.nodes) {
+        output += walk(child, node);
+      }
+    }
+    return output;
+  };
+
+  return walk(ast);
+};
+
+var compile_1 = compile;
+
+const append = (queue = '', stash = '', enclose = false) => {
+  let result = [];
+
+  queue = [].concat(queue);
+  stash = [].concat(stash);
+
+  if (!stash.length) return queue;
+  if (!queue.length) {
+    return enclose ? utils$1.flatten(stash).map(ele => `{${ele}}`) : stash;
+  }
+
+  for (let item of queue) {
+    if (Array.isArray(item)) {
+      for (let value of item) {
+        result.push(append(value, stash, enclose));
+      }
+    } else {
+      for (let ele of stash) {
+        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
+        result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
+      }
+    }
+  }
+  return utils$1.flatten(result);
+};
+
+const expand = (ast, options = {}) => {
+  let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
+
+  let walk = (node, parent = {}) => {
+    node.queue = [];
+
+    let p = parent;
+    let q = parent.queue;
+
+    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
+      p = p.parent;
+      q = p.queue;
+    }
+
+    if (node.invalid || node.dollar) {
+      q.push(append(q.pop(), stringify(node, options)));
+      return;
+    }
+
+    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
+      q.push(append(q.pop(), ['{}']));
+      return;
+    }
+
+    if (node.nodes && node.ranges > 0) {
+      let args = utils$1.reduce(node.nodes);
+
+      if (utils$1.exceedsLimit(...args, options.step, rangeLimit)) {
+        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
+      }
+
+      let range = fillRange(...args, options);
+      if (range.length === 0) {
+        range = stringify(node, options);
+      }
+
+      q.push(append(q.pop(), range));
+      node.nodes = [];
+      return;
+    }
+
+    let enclose = utils$1.encloseBrace(node);
+    let queue = node.queue;
+    let block = node;
+
+    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
+      block = block.parent;
+      queue = block.queue;
+    }
+
+    for (let i = 0; i < node.nodes.length; i++) {
+      let child = node.nodes[i];
+
+      if (child.type === 'comma' && node.type === 'brace') {
+        if (i === 1) queue.push('');
+        queue.push('');
+        continue;
+      }
+
+      if (child.type === 'close') {
+        q.push(append(q.pop(), queue, enclose));
+        continue;
+      }
+
+      if (child.value && child.type !== 'open') {
+        queue.push(append(queue.pop(), child.value));
+        continue;
+      }
+
+      if (child.nodes) {
+        walk(child, node);
+      }
+    }
+
+    return queue;
+  };
+
+  return utils$1.flatten(walk(ast));
+};
+
+var expand_1 = expand;
+
+var constants$1 = {
+  MAX_LENGTH: 1024 * 64,
+
+  // Digits
+  CHAR_0: '0', /* 0 */
+  CHAR_9: '9', /* 9 */
+
+  // Alphabet chars.
+  CHAR_UPPERCASE_A: 'A', /* A */
+  CHAR_LOWERCASE_A: 'a', /* a */
+  CHAR_UPPERCASE_Z: 'Z', /* Z */
+  CHAR_LOWERCASE_Z: 'z', /* z */
+
+  CHAR_LEFT_PARENTHESES: '(', /* ( */
+  CHAR_RIGHT_PARENTHESES: ')', /* ) */
+
+  CHAR_ASTERISK: '*', /* * */
+
+  // Non-alphabetic chars.
+  CHAR_AMPERSAND: '&', /* & */
+  CHAR_AT: '@', /* @ */
+  CHAR_BACKSLASH: '\\', /* \ */
+  CHAR_BACKTICK: '`', /* ` */
+  CHAR_CARRIAGE_RETURN: '\r', /* \r */
+  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
+  CHAR_COLON: ':', /* : */
+  CHAR_COMMA: ',', /* , */
+  CHAR_DOLLAR: '$', /* . */
+  CHAR_DOT: '.', /* . */
+  CHAR_DOUBLE_QUOTE: '"', /* " */
+  CHAR_EQUAL: '=', /* = */
+  CHAR_EXCLAMATION_MARK: '!', /* ! */
+  CHAR_FORM_FEED: '\f', /* \f */
+  CHAR_FORWARD_SLASH: '/', /* / */
+  CHAR_HASH: '#', /* # */
+  CHAR_HYPHEN_MINUS: '-', /* - */
+  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
+  CHAR_LEFT_CURLY_BRACE: '{', /* { */
+  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
+  CHAR_LINE_FEED: '\n', /* \n */
+  CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
+  CHAR_PERCENT: '%', /* % */
+  CHAR_PLUS: '+', /* + */
+  CHAR_QUESTION_MARK: '?', /* ? */
+  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
+  CHAR_RIGHT_CURLY_BRACE: '}', /* } */
+  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
+  CHAR_SEMICOLON: ';', /* ; */
+  CHAR_SINGLE_QUOTE: '\'', /* ' */
+  CHAR_SPACE: ' ', /*   */
+  CHAR_TAB: '\t', /* \t */
+  CHAR_UNDERSCORE: '_', /* _ */
+  CHAR_VERTICAL_LINE: '|', /* | */
+  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
+};
+
+/**
+ * Constants
+ */
+
+const {
+  MAX_LENGTH: MAX_LENGTH$1,
+  CHAR_BACKSLASH, /* \ */
+  CHAR_BACKTICK, /* ` */
+  CHAR_COMMA: CHAR_COMMA$1, /* , */
+  CHAR_DOT: CHAR_DOT$1, /* . */
+  CHAR_LEFT_PARENTHESES: CHAR_LEFT_PARENTHESES$1, /* ( */
+  CHAR_RIGHT_PARENTHESES: CHAR_RIGHT_PARENTHESES$1, /* ) */
+  CHAR_LEFT_CURLY_BRACE: CHAR_LEFT_CURLY_BRACE$1, /* { */
+  CHAR_RIGHT_CURLY_BRACE: CHAR_RIGHT_CURLY_BRACE$1, /* } */
+  CHAR_LEFT_SQUARE_BRACKET: CHAR_LEFT_SQUARE_BRACKET$1, /* [ */
+  CHAR_RIGHT_SQUARE_BRACKET: CHAR_RIGHT_SQUARE_BRACKET$1, /* ] */
+  CHAR_DOUBLE_QUOTE, /* " */
+  CHAR_SINGLE_QUOTE, /* ' */
+  CHAR_NO_BREAK_SPACE,
+  CHAR_ZERO_WIDTH_NOBREAK_SPACE
+} = constants$1;
+
+/**
+ * parse
+ */
+
+const parse$1 = (input, options = {}) => {
+  if (typeof input !== 'string') {
+    throw new TypeError('Expected a string');
+  }
+
+  let opts = options || {};
+  let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH$1, opts.maxLength) : MAX_LENGTH$1;
+  if (input.length > max) {
+    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
+  }
+
+  let ast = { type: 'root', input, nodes: [] };
+  let stack = [ast];
+  let block = ast;
+  let prev = ast;
+  let brackets = 0;
+  let length = input.length;
+  let index = 0;
+  let depth = 0;
+  let value;
+
+  /**
+   * Helpers
+   */
+
+  const advance = () => input[index++];
+  const push = node => {
+    if (node.type === 'text' && prev.type === 'dot') {
+      prev.type = 'text';
+    }
+
+    if (prev && prev.type === 'text' && node.type === 'text') {
+      prev.value += node.value;
+      return;
+    }
+
+    block.nodes.push(node);
+    node.parent = block;
+    node.prev = prev;
+    prev = node;
+    return node;
+  };
+
+  push({ type: 'bos' });
+
+  while (index < length) {
+    block = stack[stack.length - 1];
+    value = advance();
+
+    /**
+     * Invalid chars
+     */
+
+    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
+      continue;
+    }
+
+    /**
+     * Escaped chars
+     */
+
+    if (value === CHAR_BACKSLASH) {
+      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
+      continue;
+    }
+
+    /**
+     * Right square bracket (literal): ']'
+     */
+
+    if (value === CHAR_RIGHT_SQUARE_BRACKET$1) {
+      push({ type: 'text', value: '\\' + value });
+      continue;
+    }
+
+    /**
+     * Left square bracket: '['
+     */
+
+    if (value === CHAR_LEFT_SQUARE_BRACKET$1) {
+      brackets++;
+      let next;
+
+      while (index < length && (next = advance())) {
+        value += next;
+
+        if (next === CHAR_LEFT_SQUARE_BRACKET$1) {
+          brackets++;
+          continue;
+        }
+
+        if (next === CHAR_BACKSLASH) {
+          value += advance();
+          continue;
+        }
+
+        if (next === CHAR_RIGHT_SQUARE_BRACKET$1) {
+          brackets--;
+
+          if (brackets === 0) {
+            break;
+          }
+        }
+      }
+
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Parentheses
+     */
+
+    if (value === CHAR_LEFT_PARENTHESES$1) {
+      block = push({ type: 'paren', nodes: [] });
+      stack.push(block);
+      push({ type: 'text', value });
+      continue;
+    }
+
+    if (value === CHAR_RIGHT_PARENTHESES$1) {
+      if (block.type !== 'paren') {
+        push({ type: 'text', value });
+        continue;
+      }
+      block = stack.pop();
+      push({ type: 'text', value });
+      block = stack[stack.length - 1];
+      continue;
+    }
+
+    /**
+     * Quotes: '|"|`
+     */
+
+    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
+      let open = value;
+      let next;
+
+      if (options.keepQuotes !== true) {
+        value = '';
+      }
+
+      while (index < length && (next = advance())) {
+        if (next === CHAR_BACKSLASH) {
+          value += next + advance();
+          continue;
+        }
+
+        if (next === open) {
+          if (options.keepQuotes === true) value += next;
+          break;
+        }
+
+        value += next;
+      }
+
+      push({ type: 'text', value });
+      continue;
+    }
+
+    /**
+     * Left curly brace: '{'
+     */
+
+    if (value === CHAR_LEFT_CURLY_BRACE$1) {
+      depth++;
+
+      let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
+      let brace = {
+        type: 'brace',
+        open: true,
+        close: false,
+        dollar,
+        depth,
+        commas: 0,
+        ranges: 0,
+        nodes: []
+      };
+
+      block = push(brace);
+      stack.push(block);
+      push({ type: 'open', value });
+      continue;
+    }
+
+    /**
+     * Right curly brace: '}'
+     */
+
+    if (value === CHAR_RIGHT_CURLY_BRACE$1) {
+      if (block.type !== 'brace') {
+        push({ type: 'text', value });
+        continue;
+      }
+
+      let type = 'close';
+      block = stack.pop();
+      block.close = true;
+
+      push({ type, value });
+      depth--;
+
+      block = stack[stack.length - 1];
+      continue;
+    }
+
+    /**
+     * Comma: ','
+     */
+
+    if (value === CHAR_COMMA$1 && depth > 0) {
+      if (block.ranges > 0) {
+        block.ranges = 0;
+        let open = block.nodes.shift();
+        block.nodes = [open, { type: 'text', value: stringify(block) }];
+      }
+
+      push({ type: 'comma', value });
+      block.commas++;
+      continue;
+    }
+
+    /**
+     * Dot: '.'
+     */
+
+    if (value === CHAR_DOT$1 && depth > 0 && block.commas === 0) {
+      let siblings = block.nodes;
+
+      if (depth === 0 || siblings.length === 0) {
+        push({ type: 'text', value });
+        continue;
+      }
+
+      if (prev.type === 'dot') {
+        block.range = [];
+        prev.value += value;
+        prev.type = 'range';
+
+        if (block.nodes.length !== 3 && block.nodes.length !== 5) {
+          block.invalid = true;
+          block.ranges = 0;
+          prev.type = 'text';
+          continue;
+        }
+
+        block.ranges++;
+        block.args = [];
+        continue;
+      }
+
+      if (prev.type === 'range') {
+        siblings.pop();
+
+        let before = siblings[siblings.length - 1];
+        before.value += prev.value + value;
+        prev = before;
+        block.ranges--;
+        continue;
+      }
+
+      push({ type: 'dot', value });
+      continue;
+    }
+
+    /**
+     * Text
+     */
+
+    push({ type: 'text', value });
+  }
+
+  // Mark imbalanced braces and brackets as invalid
+  do {
+    block = stack.pop();
+
+    if (block.type !== 'root') {
+      block.nodes.forEach(node => {
+        if (!node.nodes) {
+          if (node.type === 'open') node.isOpen = true;
+          if (node.type === 'close') node.isClose = true;
+          if (!node.nodes) node.type = 'text';
+          node.invalid = true;
+        }
+      });
+
+      // get the location of the block on parent.nodes (block's siblings)
+      let parent = stack[stack.length - 1];
+      let index = parent.nodes.indexOf(block);
+      // replace the (invalid) block with it's nodes
+      parent.nodes.splice(index, 1, ...block.nodes);
+    }
+  } while (stack.length > 0);
+
+  push({ type: 'eos' });
+  return ast;
+};
+
+var parse_1$1 = parse$1;
+
+/**
+ * Expand the given pattern or create a regex-compatible string.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
+ * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+const braces = (input, options = {}) => {
+  let output = [];
+
+  if (Array.isArray(input)) {
+    for (let pattern of input) {
+      let result = braces.create(pattern, options);
+      if (Array.isArray(result)) {
+        output.push(...result);
+      } else {
+        output.push(result);
+      }
+    }
+  } else {
+    output = [].concat(braces.create(input, options));
+  }
+
+  if (options && options.expand === true && options.nodupes === true) {
+    output = [...new Set(output)];
+  }
+  return output;
+};
+
+/**
+ * Parse the given `str` with the given `options`.
+ *
+ * ```js
+ * // braces.parse(pattern, [, options]);
+ * const ast = braces.parse('a/{b,c}/d');
+ * console.log(ast);
+ * ```
+ * @param {String} pattern Brace pattern to parse
+ * @param {Object} options
+ * @return {Object} Returns an AST
+ * @api public
+ */
+
+braces.parse = (input, options = {}) => parse_1$1(input, options);
+
+/**
+ * Creates a braces string from an AST, or an AST node.
+ *
+ * ```js
+ * const braces = require('braces');
+ * let ast = braces.parse('foo/{a,b}/bar');
+ * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
+ * ```
+ * @param {String} `input` Brace pattern or AST.
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.stringify = (input, options = {}) => {
+  if (typeof input === 'string') {
+    return stringify(braces.parse(input, options), options);
+  }
+  return stringify(input, options);
+};
+
+/**
+ * Compiles a brace pattern into a regex-compatible, optimized string.
+ * This method is called by the main [braces](#braces) function by default.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces.compile('a/{b,c}/d'));
+ * //=> ['a/(b|c)/d']
+ * ```
+ * @param {String} `input` Brace pattern or AST.
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.compile = (input, options = {}) => {
+  if (typeof input === 'string') {
+    input = braces.parse(input, options);
+  }
+  return compile_1(input, options);
+};
+
+/**
+ * Expands a brace pattern into an array. This method is called by the
+ * main [braces](#braces) function when `options.expand` is true. Before
+ * using this method it's recommended that you read the [performance notes](#performance))
+ * and advantages of using [.compile](#compile) instead.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces.expand('a/{b,c}/d'));
+ * //=> ['a/b/d', 'a/c/d'];
+ * ```
+ * @param {String} `pattern` Brace pattern
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.expand = (input, options = {}) => {
+  if (typeof input === 'string') {
+    input = braces.parse(input, options);
+  }
+
+  let result = expand_1(input, options);
+
+  // filter out empty strings if specified
+  if (options.noempty === true) {
+    result = result.filter(Boolean);
+  }
+
+  // filter out duplicates if specified
+  if (options.nodupes === true) {
+    result = [...new Set(result)];
+  }
+
+  return result;
+};
+
+/**
+ * Processes a brace pattern and returns either an expanded array
+ * (if `options.expand` is true), a highly optimized regex-compatible string.
+ * This method is called by the main [braces](#braces) function.
+ *
+ * ```js
+ * const braces = require('braces');
+ * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
+ * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
+ * ```
+ * @param {String} `pattern` Brace pattern
+ * @param {Object} `options`
+ * @return {Array} Returns an array of expanded values.
+ * @api public
+ */
+
+braces.create = (input, options = {}) => {
+  if (input === '' || input.length < 3) {
+    return [input];
+  }
+
+ return options.expand !== true
+    ? braces.compile(input, options)
+    : braces.expand(input, options);
+};
+
+/**
+ * Expose "braces"
+ */
+
+var braces_1 = braces;
+
+var require$$0 = [
+	"3dm",
+	"3ds",
+	"3g2",
+	"3gp",
+	"7z",
+	"a",
+	"aac",
+	"adp",
+	"ai",
+	"aif",
+	"aiff",
+	"alz",
+	"ape",
+	"apk",
+	"appimage",
+	"ar",
+	"arj",
+	"asf",
+	"au",
+	"avi",
+	"bak",
+	"baml",
+	"bh",
+	"bin",
+	"bk",
+	"bmp",
+	"btif",
+	"bz2",
+	"bzip2",
+	"cab",
+	"caf",
+	"cgm",
+	"class",
+	"cmx",
+	"cpio",
+	"cr2",
+	"cur",
+	"dat",
+	"dcm",
+	"deb",
+	"dex",
+	"djvu",
+	"dll",
+	"dmg",
+	"dng",
+	"doc",
+	"docm",
+	"docx",
+	"dot",
+	"dotm",
+	"dra",
+	"DS_Store",
+	"dsk",
+	"dts",
+	"dtshd",
+	"dvb",
+	"dwg",
+	"dxf",
+	"ecelp4800",
+	"ecelp7470",
+	"ecelp9600",
+	"egg",
+	"eol",
+	"eot",
+	"epub",
+	"exe",
+	"f4v",
+	"fbs",
+	"fh",
+	"fla",
+	"flac",
+	"flatpak",
+	"fli",
+	"flv",
+	"fpx",
+	"fst",
+	"fvt",
+	"g3",
+	"gh",
+	"gif",
+	"graffle",
+	"gz",
+	"gzip",
+	"h261",
+	"h263",
+	"h264",
+	"icns",
+	"ico",
+	"ief",
+	"img",
+	"ipa",
+	"iso",
+	"jar",
+	"jpeg",
+	"jpg",
+	"jpgv",
+	"jpm",
+	"jxr",
+	"key",
+	"ktx",
+	"lha",
+	"lib",
+	"lvp",
+	"lz",
+	"lzh",
+	"lzma",
+	"lzo",
+	"m3u",
+	"m4a",
+	"m4v",
+	"mar",
+	"mdi",
+	"mht",
+	"mid",
+	"midi",
+	"mj2",
+	"mka",
+	"mkv",
+	"mmr",
+	"mng",
+	"mobi",
+	"mov",
+	"movie",
+	"mp3",
+	"mp4",
+	"mp4a",
+	"mpeg",
+	"mpg",
+	"mpga",
+	"mxu",
+	"nef",
+	"npx",
+	"numbers",
+	"nupkg",
+	"o",
+	"odp",
+	"ods",
+	"odt",
+	"oga",
+	"ogg",
+	"ogv",
+	"otf",
+	"ott",
+	"pages",
+	"pbm",
+	"pcx",
+	"pdb",
+	"pdf",
+	"pea",
+	"pgm",
+	"pic",
+	"png",
+	"pnm",
+	"pot",
+	"potm",
+	"potx",
+	"ppa",
+	"ppam",
+	"ppm",
+	"pps",
+	"ppsm",
+	"ppsx",
+	"ppt",
+	"pptm",
+	"pptx",
+	"psd",
+	"pya",
+	"pyc",
+	"pyo",
+	"pyv",
+	"qt",
+	"rar",
+	"ras",
+	"raw",
+	"resources",
+	"rgb",
+	"rip",
+	"rlc",
+	"rmf",
+	"rmvb",
+	"rpm",
+	"rtf",
+	"rz",
+	"s3m",
+	"s7z",
+	"scpt",
+	"sgi",
+	"shar",
+	"snap",
+	"sil",
+	"sketch",
+	"slk",
+	"smv",
+	"snk",
+	"so",
+	"stl",
+	"suo",
+	"sub",
+	"swf",
+	"tar",
+	"tbz",
+	"tbz2",
+	"tga",
+	"tgz",
+	"thmx",
+	"tif",
+	"tiff",
+	"tlz",
+	"ttc",
+	"ttf",
+	"txz",
+	"udf",
+	"uvh",
+	"uvi",
+	"uvm",
+	"uvp",
+	"uvs",
+	"uvu",
+	"viv",
+	"vob",
+	"war",
+	"wav",
+	"wax",
+	"wbmp",
+	"wdp",
+	"weba",
+	"webm",
+	"webp",
+	"whl",
+	"wim",
+	"wm",
+	"wma",
+	"wmv",
+	"wmx",
+	"woff",
+	"woff2",
+	"wrm",
+	"wvx",
+	"xbm",
+	"xif",
+	"xla",
+	"xlam",
+	"xls",
+	"xlsb",
+	"xlsm",
+	"xlsx",
+	"xlt",
+	"xltm",
+	"xltx",
+	"xm",
+	"xmind",
+	"xpi",
+	"xpm",
+	"xwd",
+	"xz",
+	"z",
+	"zip",
+	"zipx"
+];
+
+var binaryExtensions = require$$0;
+
+const extensions = new Set(binaryExtensions);
+
+var isBinaryPath = filePath => extensions.has(sysPath__default['default'].extname(filePath).slice(1).toLowerCase());
+
+var constants$2 = createCommonjsModule(function (module, exports) {
+
+const {sep} = sysPath__default['default'];
+const {platform} = process;
+
+exports.EV_ALL = 'all';
+exports.EV_READY = 'ready';
+exports.EV_ADD = 'add';
+exports.EV_CHANGE = 'change';
+exports.EV_ADD_DIR = 'addDir';
+exports.EV_UNLINK = 'unlink';
+exports.EV_UNLINK_DIR = 'unlinkDir';
+exports.EV_RAW = 'raw';
+exports.EV_ERROR = 'error';
+
+exports.STR_DATA = 'data';
+exports.STR_END = 'end';
+exports.STR_CLOSE = 'close';
+
+exports.FSEVENT_CREATED = 'created';
+exports.FSEVENT_MODIFIED = 'modified';
+exports.FSEVENT_DELETED = 'deleted';
+exports.FSEVENT_MOVED = 'moved';
+exports.FSEVENT_CLONED = 'cloned';
+exports.FSEVENT_UNKNOWN = 'unknown';
+exports.FSEVENT_TYPE_FILE = 'file';
+exports.FSEVENT_TYPE_DIRECTORY = 'directory';
+exports.FSEVENT_TYPE_SYMLINK = 'symlink';
+
+exports.KEY_LISTENERS = 'listeners';
+exports.KEY_ERR = 'errHandlers';
+exports.KEY_RAW = 'rawEmitters';
+exports.HANDLER_KEYS = [exports.KEY_LISTENERS, exports.KEY_ERR, exports.KEY_RAW];
+
+exports.DOT_SLASH = `.${sep}`;
+
+exports.BACK_SLASH_RE = /\\/g;
+exports.DOUBLE_SLASH_RE = /\/\//;
+exports.SLASH_OR_BACK_SLASH_RE = /[/\\]/;
+exports.DOT_RE = /\..*\.(sw[px])$|~$|\.subl.*\.tmp/;
+exports.REPLACER_RE = /^\.[/\\]/;
+
+exports.SLASH = '/';
+exports.SLASH_SLASH = '//';
+exports.BRACE_START = '{';
+exports.BANG = '!';
+exports.ONE_DOT = '.';
+exports.TWO_DOTS = '..';
+exports.STAR = '*';
+exports.GLOBSTAR = '**';
+exports.ROOT_GLOBSTAR = '/**/*';
+exports.SLASH_GLOBSTAR = '/**';
+exports.DIR_SUFFIX = 'Dir';
+exports.ANYMATCH_OPTS = {dot: true};
+exports.STRING_TYPE = 'string';
+exports.FUNCTION_TYPE = 'function';
+exports.EMPTY_STR = '';
+exports.EMPTY_FN = () => {};
+exports.IDENTITY_FN = val => val;
+
+exports.isWindows = platform === 'win32';
+exports.isMacos = platform === 'darwin';
+exports.isLinux = platform === 'linux';
+});
+
+const fs = require('original-fs');
+
+const { promisify: promisify$1 } = require$$0__default['default'];
+
+const {
+  isWindows,
+  isLinux,
+  EMPTY_FN,
+  EMPTY_STR,
+  KEY_LISTENERS,
+  KEY_ERR,
+  KEY_RAW,
+  HANDLER_KEYS,
+  EV_CHANGE,
+  EV_ADD,
+  EV_ADD_DIR,
+  EV_ERROR,
+  STR_DATA,
+  STR_END,
+  BRACE_START,
+  STAR: STAR$1
+} = constants$2;
+
+const THROTTLE_MODE_WATCH = 'watch';
+
+const open$1 = promisify$1(fs.open);
+const stat$1 = promisify$1(fs.stat);
+const lstat$1 = promisify$1(fs.lstat);
+const close = promisify$1(fs.close);
+const fsrealpath = promisify$1(fs.realpath);
+
+const statMethods = { lstat: lstat$1, stat: stat$1 };
+
+// TODO: emit errors properly. Example: EMFILE on Macos.
+const foreach = (val, fn) => {
+  if (val instanceof Set) {
+    val.forEach(fn);
+  } else {
+    fn(val);
+  }
+};
+
+const addAndConvert = (main, prop, item) => {
+  let container = main[prop];
+  if (!(container instanceof Set)) {
+    main[prop] = container = new Set([container]);
+  }
+  container.add(item);
+};
+
+const clearItem = cont => key => {
+  const set = cont[key];
+  if (set instanceof Set) {
+    set.clear();
+  } else {
+    delete cont[key];
+  }
+};
+
+const delFromSet = (main, prop, item) => {
+  const container = main[prop];
+  if (container instanceof Set) {
+    container.delete(item);
+  } else if (container === item) {
+    delete main[prop];
+  }
+};
+
+const isEmptySet = (val) => val instanceof Set ? val.size === 0 : !val;
+
+/**
+ * @typedef {String} Path
+ */
+
+// fs_watch helpers
+
+// object to hold per-process fs_watch instances
+// (may be shared across chokidar FSWatcher instances)
+
+/**
+ * @typedef {Object} FsWatchContainer
+ * @property {Set} listeners
+ * @property {Set} errHandlers
+ * @property {Set} rawEmitters
+ * @property {fs.FSWatcher=} watcher
+ * @property {Boolean=} watcherUnusable
+ */
+
+/**
+ * @type {Map}
+ */
+const FsWatchInstances = new Map();
+
+/**
+ * Instantiates the fs_watch interface
+ * @param {String} path to be watched
+ * @param {Object} options to be passed to fs_watch
+ * @param {Function} listener main event handler
+ * @param {Function} errHandler emits info about errors
+ * @param {Function} emitRaw emits raw event data
+ * @returns {fs.FSWatcher} new fsevents instance
+ */
+function createFsWatchInstance(path, options, listener, errHandler, emitRaw) {
+  const handleEvent = (rawEvent, evPath) => {
+    listener(path);
+    emitRaw(rawEvent, evPath, {watchedPath: path});
+
+    // emit based on events occurring for files from a directory's watcher in
+    // case the file's watcher misses it (and rely on throttling to de-dupe)
+    if (evPath && path !== evPath) {
+      fsWatchBroadcast(
+        sysPath__default['default'].resolve(path, evPath), KEY_LISTENERS, sysPath__default['default'].join(path, evPath)
+      );
+    }
+  };
+  try {
+    return fs.watch(path, options, handleEvent);
+  } catch (error) {
+    errHandler(error);
+  }
+}
+
+/**
+ * Helper for passing fs_watch event data to a collection of listeners
+ * @param {Path} fullPath absolute path bound to fs_watch instance
+ * @param {String} type listener type
+ * @param {*=} val1 arguments to be passed to listeners
+ * @param {*=} val2
+ * @param {*=} val3
+ */
+const fsWatchBroadcast = (fullPath, type, val1, val2, val3) => {
+  const cont = FsWatchInstances.get(fullPath);
+  if (!cont) return;
+  foreach(cont[type], (listener) => {
+    listener(val1, val2, val3);
+  });
+};
+
+/**
+ * Instantiates the fs_watch interface or binds listeners
+ * to an existing one covering the same file system entry
+ * @param {String} path
+ * @param {String} fullPath absolute path
+ * @param {Object} options to be passed to fs_watch
+ * @param {Object} handlers container for event listener functions
+ */
+const setFsWatchListener = (path, fullPath, options, handlers) => {
+  const {listener, errHandler, rawEmitter} = handlers;
+  let cont = FsWatchInstances.get(fullPath);
+
+  /** @type {fs.FSWatcher=} */
+  let watcher;
+  if (!options.persistent) {
+    watcher = createFsWatchInstance(
+      path, options, listener, errHandler, rawEmitter
+    );
+    return watcher.close.bind(watcher);
+  }
+  if (cont) {
+    addAndConvert(cont, KEY_LISTENERS, listener);
+    addAndConvert(cont, KEY_ERR, errHandler);
+    addAndConvert(cont, KEY_RAW, rawEmitter);
+  } else {
+    watcher = createFsWatchInstance(
+      path,
+      options,
+      fsWatchBroadcast.bind(null, fullPath, KEY_LISTENERS),
+      errHandler, // no need to use broadcast here
+      fsWatchBroadcast.bind(null, fullPath, KEY_RAW)
+    );
+    if (!watcher) return;
+    watcher.on(EV_ERROR, async (error) => {
+      const broadcastErr = fsWatchBroadcast.bind(null, fullPath, KEY_ERR);
+      cont.watcherUnusable = true; // documented since Node 10.4.1
+      // Workaround for https://github.com/joyent/node/issues/4337
+      if (isWindows && error.code === 'EPERM') {
+        try {
+          const fd = await open$1(path, 'r');
+          await close(fd);
+          broadcastErr(error);
+        } catch (err) {}
+      } else {
+        broadcastErr(error);
+      }
+    });
+    cont = {
+      listeners: listener,
+      errHandlers: errHandler,
+      rawEmitters: rawEmitter,
+      watcher
+    };
+    FsWatchInstances.set(fullPath, cont);
+  }
+  // const index = cont.listeners.indexOf(listener);
+
+  // removes this instance's listeners and closes the underlying fs_watch
+  // instance if there are no more listeners left
+  return () => {
+    delFromSet(cont, KEY_LISTENERS, listener);
+    delFromSet(cont, KEY_ERR, errHandler);
+    delFromSet(cont, KEY_RAW, rawEmitter);
+    if (isEmptySet(cont.listeners)) {
+      // Check to protect against issue gh-730.
+      // if (cont.watcherUnusable) {
+      cont.watcher.close();
+      // }
+      FsWatchInstances.delete(fullPath);
+      HANDLER_KEYS.forEach(clearItem(cont));
+      cont.watcher = undefined;
+      Object.freeze(cont);
+    }
+  };
+};
+
+// fs_watchFile helpers
+
+// object to hold per-process fs_watchFile instances
+// (may be shared across chokidar FSWatcher instances)
+const FsWatchFileInstances = new Map();
+
+/**
+ * Instantiates the fs_watchFile interface or binds listeners
+ * to an existing one covering the same file system entry
+ * @param {String} path to be watched
+ * @param {String} fullPath absolute path
+ * @param {Object} options options to be passed to fs_watchFile
+ * @param {Object} handlers container for event listener functions
+ * @returns {Function} closer
+ */
+const setFsWatchFileListener = (path, fullPath, options, handlers) => {
+  const {listener, rawEmitter} = handlers;
+  let cont = FsWatchFileInstances.get(fullPath);
+
+  /* eslint-disable no-unused-vars, prefer-destructuring */
+  let listeners = new Set();
+  let rawEmitters = new Set();
+
+  const copts = cont && cont.options;
+  if (copts && (copts.persistent < options.persistent || copts.interval > options.interval)) {
+    // "Upgrade" the watcher to persistence or a quicker interval.
+    // This creates some unlikely edge case issues if the user mixes
+    // settings in a very weird way, but solving for those cases
+    // doesn't seem worthwhile for the added complexity.
+    listeners = cont.listeners;
+    rawEmitters = cont.rawEmitters;
+    fs.unwatchFile(fullPath);
+    cont = undefined;
+  }
+
+  /* eslint-enable no-unused-vars, prefer-destructuring */
+
+  if (cont) {
+    addAndConvert(cont, KEY_LISTENERS, listener);
+    addAndConvert(cont, KEY_RAW, rawEmitter);
+  } else {
+    // TODO
+    // listeners.add(listener);
+    // rawEmitters.add(rawEmitter);
+    cont = {
+      listeners: listener,
+      rawEmitters: rawEmitter,
+      options,
+      watcher: fs.watchFile(fullPath, options, (curr, prev) => {
+        foreach(cont.rawEmitters, (rawEmitter) => {
+          rawEmitter(EV_CHANGE, fullPath, {curr, prev});
+        });
+        const currmtime = curr.mtimeMs;
+        if (curr.size !== prev.size || currmtime > prev.mtimeMs || currmtime === 0) {
+          foreach(cont.listeners, (listener) => listener(path, curr));
+        }
+      })
+    };
+    FsWatchFileInstances.set(fullPath, cont);
+  }
+  // const index = cont.listeners.indexOf(listener);
+
+  // Removes this instance's listeners and closes the underlying fs_watchFile
+  // instance if there are no more listeners left.
+  return () => {
+    delFromSet(cont, KEY_LISTENERS, listener);
+    delFromSet(cont, KEY_RAW, rawEmitter);
+    if (isEmptySet(cont.listeners)) {
+      FsWatchFileInstances.delete(fullPath);
+      fs.unwatchFile(fullPath);
+      cont.options = cont.watcher = undefined;
+      Object.freeze(cont);
+    }
+  };
+};
+
+/**
+ * @mixin
+ */
+class NodeFsHandler {
+
+/**
+ * @param {import("../index").FSWatcher} fsW
+ */
+constructor(fsW) {
+  this.fsw = fsW;
+  this._boundHandleError = (error) => fsW._handleError(error);
+}
+
+/**
+ * Watch file for changes with fs_watchFile or fs_watch.
+ * @param {String} path to file or dir
+ * @param {Function} listener on fs change
+ * @returns {Function} closer for the watcher instance
+ */
+_watchWithNodeFs(path, listener) {
+  const opts = this.fsw.options;
+  const directory = sysPath__default['default'].dirname(path);
+  const basename = sysPath__default['default'].basename(path);
+  const parent = this.fsw._getWatchedDir(directory);
+  parent.add(basename);
+  const absolutePath = sysPath__default['default'].resolve(path);
+  const options = {persistent: opts.persistent};
+  if (!listener) listener = EMPTY_FN;
+
+  let closer;
+  if (opts.usePolling) {
+    options.interval = opts.enableBinaryInterval && isBinaryPath(basename) ?
+      opts.binaryInterval : opts.interval;
+    closer = setFsWatchFileListener(path, absolutePath, options, {
+      listener,
+      rawEmitter: this.fsw._emitRaw
+    });
+  } else {
+    closer = setFsWatchListener(path, absolutePath, options, {
+      listener,
+      errHandler: this._boundHandleError,
+      rawEmitter: this.fsw._emitRaw
+    });
+  }
+  return closer;
+}
+
+/**
+ * Watch a file and emit add event if warranted.
+ * @param {Path} file Path
+ * @param {fs.Stats} stats result of fs_stat
+ * @param {Boolean} initialAdd was the file added at watch instantiation?
+ * @returns {Function} closer for the watcher instance
+ */
+_handleFile(file, stats, initialAdd) {
+  if (this.fsw.closed) {
+    return;
+  }
+  const dirname = sysPath__default['default'].dirname(file);
+  const basename = sysPath__default['default'].basename(file);
+  const parent = this.fsw._getWatchedDir(dirname);
+  // stats is always present
+  let prevStats = stats;
+
+  // if the file is already being watched, do nothing
+  if (parent.has(basename)) return;
+
+  const listener = async (path, newStats) => {
+    if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5)) return;
+    if (!newStats || newStats.mtimeMs === 0) {
+      try {
+        const newStats = await stat$1(file);
+        if (this.fsw.closed) return;
+        // Check that change event was not fired because of changed only accessTime.
+        const at = newStats.atimeMs;
+        const mt = newStats.mtimeMs;
+        if (!at || at <= mt || mt !== prevStats.mtimeMs) {
+          this.fsw._emit(EV_CHANGE, file, newStats);
+        }
+        if (isLinux && prevStats.ino !== newStats.ino) {
+          this.fsw._closeFile(path);
+          prevStats = newStats;
+          this.fsw._addPathCloser(path, this._watchWithNodeFs(file, listener));
+        } else {
+          prevStats = newStats;
+        }
+      } catch (error) {
+        // Fix issues where mtime is null but file is still present
+        this.fsw._remove(dirname, basename);
+      }
+      // add is about to be emitted if file not already tracked in parent
+    } else if (parent.has(basename)) {
+      // Check that change event was not fired because of changed only accessTime.
+      const at = newStats.atimeMs;
+      const mt = newStats.mtimeMs;
+      if (!at || at <= mt || mt !== prevStats.mtimeMs) {
+        this.fsw._emit(EV_CHANGE, file, newStats);
+      }
+      prevStats = newStats;
+    }
+  };
+  // kick off the watcher
+  const closer = this._watchWithNodeFs(file, listener);
+
+  // emit an add event if we're supposed to
+  if (!(initialAdd && this.fsw.options.ignoreInitial) && this.fsw._isntIgnored(file)) {
+    if (!this.fsw._throttle(EV_ADD, file, 0)) return;
+    this.fsw._emit(EV_ADD, file, stats);
+  }
+
+  return closer;
+}
+
+/**
+ * Handle symlinks encountered while reading a dir.
+ * @param {Object} entry returned by readdirp
+ * @param {String} directory path of dir being read
+ * @param {String} path of this item
+ * @param {String} item basename of this item
+ * @returns {Promise} true if no more processing is needed for this entry.
+ */
+async _handleSymlink(entry, directory, path, item) {
+  if (this.fsw.closed) {
+    return;
+  }
+  const full = entry.fullPath;
+  const dir = this.fsw._getWatchedDir(directory);
+
+  if (!this.fsw.options.followSymlinks) {
+    // watch symlink directly (don't follow) and detect changes
+    this.fsw._incrReadyCount();
+    const linkPath = await fsrealpath(path);
+    if (this.fsw.closed) return;
+    if (dir.has(item)) {
+      if (this.fsw._symlinkPaths.get(full) !== linkPath) {
+        this.fsw._symlinkPaths.set(full, linkPath);
+        this.fsw._emit(EV_CHANGE, path, entry.stats);
+      }
+    } else {
+      dir.add(item);
+      this.fsw._symlinkPaths.set(full, linkPath);
+      this.fsw._emit(EV_ADD, path, entry.stats);
+    }
+    this.fsw._emitReady();
+    return true;
+  }
+
+  // don't follow the same symlink more than once
+  if (this.fsw._symlinkPaths.has(full)) {
+    return true;
+  }
+
+  this.fsw._symlinkPaths.set(full, true);
+}
+
+_handleRead(directory, initialAdd, wh, target, dir, depth, throttler) {
+  // Normalize the directory name on Windows
+  directory = sysPath__default['default'].join(directory, EMPTY_STR);
+
+  if (!wh.hasGlob) {
+    throttler = this.fsw._throttle('readdir', directory, 1000);
+    if (!throttler) return;
+  }
+
+  const previous = this.fsw._getWatchedDir(wh.path);
+  const current = new Set();
+
+  let stream = this.fsw._readdirp(directory, {
+    fileFilter: entry => wh.filterPath(entry),
+    directoryFilter: entry => wh.filterDir(entry),
+    depth: 0
+  }).on(STR_DATA, async (entry) => {
+    if (this.fsw.closed) {
+      stream = undefined;
+      return;
+    }
+    const item = entry.path;
+    let path = sysPath__default['default'].join(directory, item);
+    current.add(item);
+
+    if (entry.stats.isSymbolicLink() && await this._handleSymlink(entry, directory, path, item)) {
+      return;
+    }
+
+    if (this.fsw.closed) {
+      stream = undefined;
+      return;
+    }
+    // Files that present in current directory snapshot
+    // but absent in previous are added to watch list and
+    // emit `add` event.
+    if (item === target || !target && !previous.has(item)) {
+      this.fsw._incrReadyCount();
+
+      // ensure relativeness of path is preserved in case of watcher reuse
+      path = sysPath__default['default'].join(dir, sysPath__default['default'].relative(dir, path));
+
+      this._addToNodeFs(path, initialAdd, wh, depth + 1);
+    }
+  }).on(EV_ERROR, this._boundHandleError);
+
+  return new Promise(resolve =>
+    stream.once(STR_END, () => {
+      if (this.fsw.closed) {
+        stream = undefined;
+        return;
+      }
+      const wasThrottled = throttler ? throttler.clear() : false;
+
+      resolve();
+
+      // Files that absent in current directory snapshot
+      // but present in previous emit `remove` event
+      // and are removed from @watched[directory].
+      previous.getChildren().filter((item) => {
+        return item !== directory &&
+          !current.has(item) &&
+          // in case of intersecting globs;
+          // a path may have been filtered out of this readdir, but
+          // shouldn't be removed because it matches a different glob
+          (!wh.hasGlob || wh.filterPath({
+            fullPath: sysPath__default['default'].resolve(directory, item)
+          }));
+      }).forEach((item) => {
+        this.fsw._remove(directory, item);
+      });
+
+      stream = undefined;
+
+      // one more time for any missed in case changes came in extremely quickly
+      if (wasThrottled) this._handleRead(directory, false, wh, target, dir, depth, throttler);
+    })
+  );
+}
+
+/**
+ * Read directory to add / remove files from `@watched` list and re-read it on change.
+ * @param {String} dir fs path
+ * @param {fs.Stats} stats
+ * @param {Boolean} initialAdd
+ * @param {Number} depth relative to user-supplied path
+ * @param {String} target child path targeted for watch
+ * @param {Object} wh Common watch helpers for this path
+ * @param {String} realpath
+ * @returns {Promise} closer for the watcher instance.
+ */
+async _handleDir(dir, stats, initialAdd, depth, target, wh, realpath) {
+  const parentDir = this.fsw._getWatchedDir(sysPath__default['default'].dirname(dir));
+  const tracked = parentDir.has(sysPath__default['default'].basename(dir));
+  if (!(initialAdd && this.fsw.options.ignoreInitial) && !target && !tracked) {
+    if (!wh.hasGlob || wh.globFilter(dir)) this.fsw._emit(EV_ADD_DIR, dir, stats);
+  }
+
+  // ensure dir is tracked (harmless if redundant)
+  parentDir.add(sysPath__default['default'].basename(dir));
+  this.fsw._getWatchedDir(dir);
+  let throttler;
+  let closer;
+
+  const oDepth = this.fsw.options.depth;
+  if ((oDepth == null || depth <= oDepth) && !this.fsw._symlinkPaths.has(realpath)) {
+    if (!target) {
+      await this._handleRead(dir, initialAdd, wh, target, dir, depth, throttler);
+      if (this.fsw.closed) return;
+    }
+
+    closer = this._watchWithNodeFs(dir, (dirPath, stats) => {
+      // if current directory is removed, do nothing
+      if (stats && stats.mtimeMs === 0) return;
+
+      this._handleRead(dirPath, false, wh, target, dir, depth, throttler);
+    });
+  }
+  return closer;
+}
+
+/**
+ * Handle added file, directory, or glob pattern.
+ * Delegates call to _handleFile / _handleDir after checks.
+ * @param {String} path to file or ir
+ * @param {Boolean} initialAdd was the file added at watch instantiation?
+ * @param {Object} priorWh depth relative to user-supplied path
+ * @param {Number} depth Child path actually targeted for watch
+ * @param {String=} target Child path actually targeted for watch
+ * @returns {Promise}
+ */
+async _addToNodeFs(path, initialAdd, priorWh, depth, target) {
+  const ready = this.fsw._emitReady;
+  if (this.fsw._isIgnored(path) || this.fsw.closed) {
+    ready();
+    return false;
+  }
+
+  const wh = this.fsw._getWatchHelpers(path, depth);
+  if (!wh.hasGlob && priorWh) {
+    wh.hasGlob = priorWh.hasGlob;
+    wh.globFilter = priorWh.globFilter;
+    wh.filterPath = entry => priorWh.filterPath(entry);
+    wh.filterDir = entry => priorWh.filterDir(entry);
+  }
+
+  // evaluate what is at the path we're being asked to watch
+  try {
+    const stats = await statMethods[wh.statMethod](wh.watchPath);
+    if (this.fsw.closed) return;
+    if (this.fsw._isIgnored(wh.watchPath, stats)) {
+      ready();
+      return false;
+    }
+
+    const follow = this.fsw.options.followSymlinks && !path.includes(STAR$1) && !path.includes(BRACE_START);
+    let closer;
+    if (stats.isDirectory()) {
+      const targetPath = follow ? await fsrealpath(path) : path;
+      if (this.fsw.closed) return;
+      closer = await this._handleDir(wh.watchPath, stats, initialAdd, depth, target, wh, targetPath);
+      if (this.fsw.closed) return;
+      // preserve this symlink's target path
+      if (path !== targetPath && targetPath !== undefined) {
+        this.fsw._symlinkPaths.set(targetPath, true);
+      }
+    } else if (stats.isSymbolicLink()) {
+      const targetPath = follow ? await fsrealpath(path) : path;
+      if (this.fsw.closed) return;
+      const parent = sysPath__default['default'].dirname(wh.watchPath);
+      this.fsw._getWatchedDir(parent).add(wh.watchPath);
+      this.fsw._emit(EV_ADD, wh.watchPath, stats);
+      closer = await this._handleDir(parent, stats, initialAdd, depth, path, wh, targetPath);
+      if (this.fsw.closed) return;
+
+      // preserve this symlink's target path
+      if (targetPath !== undefined) {
+        this.fsw._symlinkPaths.set(sysPath__default['default'].resolve(path), targetPath);
+      }
+    } else {
+      closer = this._handleFile(wh.watchPath, stats, initialAdd);
+    }
+    ready();
+
+    this.fsw._addPathCloser(path, closer);
+    return false;
+
+  } catch (error) {
+    if (this.fsw._handleError(error)) {
+      ready();
+      return path;
+    }
+  }
+}
+
+}
+
+var nodefsHandler = NodeFsHandler;
+
+const fs$1 = require('original-fs');
+
+const { promisify: promisify$2 } = require$$0__default['default'];
+
+let fsevents;
+try {
+  fsevents = null;
+} catch (error) {
+  if (process.env.CHOKIDAR_PRINT_FSEVENTS_REQUIRE_ERROR) console.error(error);
+}
+
+if (fsevents) {
+  // TODO: real check
+  const mtch = process.version.match(/v(\d+)\.(\d+)/);
+  if (mtch && mtch[1] && mtch[2]) {
+    const maj = Number.parseInt(mtch[1], 10);
+    const min = Number.parseInt(mtch[2], 10);
+    if (maj === 8 && min < 16) {
+      fsevents = undefined;
+    }
+  }
+}
+
+const {
+  EV_ADD: EV_ADD$1,
+  EV_CHANGE: EV_CHANGE$1,
+  EV_ADD_DIR: EV_ADD_DIR$1,
+  EV_UNLINK,
+  EV_ERROR: EV_ERROR$1,
+  STR_DATA: STR_DATA$1,
+  STR_END: STR_END$1,
+  FSEVENT_CREATED,
+  FSEVENT_MODIFIED,
+  FSEVENT_DELETED,
+  FSEVENT_MOVED,
+  // FSEVENT_CLONED,
+  FSEVENT_UNKNOWN,
+  FSEVENT_TYPE_FILE,
+  FSEVENT_TYPE_DIRECTORY,
+  FSEVENT_TYPE_SYMLINK,
+
+  ROOT_GLOBSTAR,
+  DIR_SUFFIX,
+  DOT_SLASH,
+  FUNCTION_TYPE,
+  EMPTY_FN: EMPTY_FN$1,
+  IDENTITY_FN
+} = constants$2;
+
+const Depth = (value) => isNaN(value) ? {} : {depth: value};
+
+const stat$2 = promisify$2(fs$1.stat);
+const lstat$2 = promisify$2(fs$1.lstat);
+const realpath$1 = promisify$2(fs$1.realpath);
+
+const statMethods$1 = { stat: stat$2, lstat: lstat$2 };
+
+/**
+ * @typedef {String} Path
+ */
+
+/**
+ * @typedef {Object} FsEventsWatchContainer
+ * @property {Set} listeners
+ * @property {Function} rawEmitter
+ * @property {{stop: Function}} watcher
+ */
+
+// fsevents instance helper functions
+/**
+ * Object to hold per-process fsevents instances (may be shared across chokidar FSWatcher instances)
+ * @type {Map}
+ */
+const FSEventsWatchers = new Map();
+
+// Threshold of duplicate path prefixes at which to start
+// consolidating going forward
+const consolidateThreshhold = 10;
+
+const wrongEventFlags = new Set([
+  69888, 70400, 71424, 72704, 73472, 131328, 131840, 262912
+]);
+
+/**
+ * Instantiates the fsevents interface
+ * @param {Path} path path to be watched
+ * @param {Function} callback called when fsevents is bound and ready
+ * @returns {{stop: Function}} new fsevents instance
+ */
+const createFSEventsInstance = (path, callback) => {
+  const stop = fsevents.watch(path, callback);
+  return {stop};
+};
+
+/**
+ * Instantiates the fsevents interface or binds listeners to an existing one covering
+ * the same file tree.
+ * @param {Path} path           - to be watched
+ * @param {Path} realPath       - real path for symlinks
+ * @param {Function} listener   - called when fsevents emits events
+ * @param {Function} rawEmitter - passes data to listeners of the 'raw' event
+ * @returns {Function} closer
+ */
+function setFSEventsListener(path, realPath, listener, rawEmitter) {
+  let watchPath = sysPath__default['default'].extname(path) ? sysPath__default['default'].dirname(path) : path;
+  const parentPath = sysPath__default['default'].dirname(watchPath);
+  let cont = FSEventsWatchers.get(watchPath);
+
+  // If we've accumulated a substantial number of paths that
+  // could have been consolidated by watching one directory
+  // above the current one, create a watcher on the parent
+  // path instead, so that we do consolidate going forward.
+  if (couldConsolidate(parentPath)) {
+    watchPath = parentPath;
+  }
+
+  const resolvedPath = sysPath__default['default'].resolve(path);
+  const hasSymlink = resolvedPath !== realPath;
+
+  const filteredListener = (fullPath, flags, info) => {
+    if (hasSymlink) fullPath = fullPath.replace(realPath, resolvedPath);
+    if (
+      fullPath === resolvedPath ||
+      !fullPath.indexOf(resolvedPath + sysPath__default['default'].sep)
+    ) listener(fullPath, flags, info);
+  };
+
+  // check if there is already a watcher on a parent path
+  // modifies `watchPath` to the parent path when it finds a match
+  let watchedParent = false;
+  for (const watchedPath of FSEventsWatchers.keys()) {
+    if (realPath.indexOf(sysPath__default['default'].resolve(watchedPath) + sysPath__default['default'].sep) === 0) {
+      watchPath = watchedPath;
+      cont = FSEventsWatchers.get(watchPath);
+      watchedParent = true;
+      break;
+    }
+  }
+
+  if (cont || watchedParent) {
+    cont.listeners.add(filteredListener);
+  } else {
+    cont = {
+      listeners: new Set([filteredListener]),
+      rawEmitter,
+      watcher: createFSEventsInstance(watchPath, (fullPath, flags) => {
+        if (!cont.listeners.size) return;
+        const info = fsevents.getInfo(fullPath, flags);
+        cont.listeners.forEach(list => {
+          list(fullPath, flags, info);
+        });
+
+        cont.rawEmitter(info.event, fullPath, info);
+      })
+    };
+    FSEventsWatchers.set(watchPath, cont);
+  }
+
+  // removes this instance's listeners and closes the underlying fsevents
+  // instance if there are no more listeners left
+  return () => {
+    const lst = cont.listeners;
+
+    lst.delete(filteredListener);
+    if (!lst.size) {
+      FSEventsWatchers.delete(watchPath);
+      if (cont.watcher) return cont.watcher.stop().then(() => {
+        cont.rawEmitter = cont.watcher = undefined;
+        Object.freeze(cont);
+      });
+    }
+  };
+}
+
+// Decide whether or not we should start a new higher-level
+// parent watcher
+const couldConsolidate = (path) => {
+  let count = 0;
+  for (const watchPath of FSEventsWatchers.keys()) {
+    if (watchPath.indexOf(path) === 0) {
+      count++;
+      if (count >= consolidateThreshhold) {
+        return true;
+      }
+    }
+  }
+
+  return false;
+};
+
+// returns boolean indicating whether fsevents can be used
+const canUse = () => fsevents && FSEventsWatchers.size < 128;
+
+// determines subdirectory traversal levels from root to path
+const calcDepth = (path, root) => {
+  let i = 0;
+  while (!path.indexOf(root) && (path = sysPath__default['default'].dirname(path)) !== root) i++;
+  return i;
+};
+
+// returns boolean indicating whether the fsevents' event info has the same type
+// as the one returned by fs.stat
+const sameTypes = (info, stats) => (
+  info.type === FSEVENT_TYPE_DIRECTORY && stats.isDirectory() ||
+  info.type === FSEVENT_TYPE_SYMLINK && stats.isSymbolicLink() ||
+  info.type === FSEVENT_TYPE_FILE && stats.isFile()
+);
+
+/**
+ * @mixin
+ */
+class FsEventsHandler {
+
+/**
+ * @param {import('../index').FSWatcher} fsw
+ */
+constructor(fsw) {
+  this.fsw = fsw;
+}
+checkIgnored(path, stats) {
+  const ipaths = this.fsw._ignoredPaths;
+  if (this.fsw._isIgnored(path, stats)) {
+    ipaths.add(path);
+    if (stats && stats.isDirectory()) {
+      ipaths.add(path + ROOT_GLOBSTAR);
+    }
+    return true;
+  }
+
+  ipaths.delete(path);
+  ipaths.delete(path + ROOT_GLOBSTAR);
+}
+
+addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+  const event = watchedDir.has(item) ? EV_CHANGE$1 : EV_ADD$1;
+  this.handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+}
+
+async checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+  try {
+    const stats = await stat$2(path);
+    if (this.fsw.closed) return;
+    if (sameTypes(info, stats)) {
+      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+    } else {
+      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+    }
+  } catch (error) {
+    if (error.code === 'EACCES') {
+      this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+    } else {
+      this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+    }
+  }
+}
+
+handleEvent(event, path, fullPath, realPath, parent, watchedDir, item, info, opts) {
+  if (this.fsw.closed || this.checkIgnored(path)) return;
+
+  if (event === EV_UNLINK) {
+    const isDirectory = info.type === FSEVENT_TYPE_DIRECTORY;
+    // suppress unlink events on never before seen files
+    if (isDirectory || watchedDir.has(item)) {
+      this.fsw._remove(parent, item, isDirectory);
+    }
+  } else {
+    if (event === EV_ADD$1) {
+      // track new directories
+      if (info.type === FSEVENT_TYPE_DIRECTORY) this.fsw._getWatchedDir(path);
+
+      if (info.type === FSEVENT_TYPE_SYMLINK && opts.followSymlinks) {
+        // push symlinks back to the top of the stack to get handled
+        const curDepth = opts.depth === undefined ?
+          undefined : calcDepth(fullPath, realPath) + 1;
+        return this._addToFsEvents(path, false, true, curDepth);
+      }
+
+      // track new paths
+      // (other than symlinks being followed, which will be tracked soon)
+      this.fsw._getWatchedDir(parent).add(item);
+    }
+    /**
+     * @type {'add'|'addDir'|'unlink'|'unlinkDir'}
+     */
+    const eventName = info.type === FSEVENT_TYPE_DIRECTORY ? event + DIR_SUFFIX : event;
+    this.fsw._emit(eventName, path);
+    if (eventName === EV_ADD_DIR$1) this._addToFsEvents(path, false, true);
+  }
+}
+
+/**
+ * Handle symlinks encountered during directory scan
+ * @param {String} watchPath  - file/dir path to be watched with fsevents
+ * @param {String} realPath   - real path (in case of symlinks)
+ * @param {Function} transform  - path transformer
+ * @param {Function} globFilter - path filter in case a glob pattern was provided
+ * @returns {Function} closer for the watcher instance
+*/
+_watchWithFsEvents(watchPath, realPath, transform, globFilter) {
+  if (this.fsw.closed || this.fsw._isIgnored(watchPath)) return;
+  const opts = this.fsw.options;
+  const watchCallback = async (fullPath, flags, info) => {
+    if (this.fsw.closed) return;
+    if (
+      opts.depth !== undefined &&
+      calcDepth(fullPath, realPath) > opts.depth
+    ) return;
+    const path = transform(sysPath__default['default'].join(
+      watchPath, sysPath__default['default'].relative(watchPath, fullPath)
+    ));
+    if (globFilter && !globFilter(path)) return;
+    // ensure directories are tracked
+    const parent = sysPath__default['default'].dirname(path);
+    const item = sysPath__default['default'].basename(path);
+    const watchedDir = this.fsw._getWatchedDir(
+      info.type === FSEVENT_TYPE_DIRECTORY ? path : parent
+    );
+
+    // correct for wrong events emitted
+    if (wrongEventFlags.has(flags) || info.event === FSEVENT_UNKNOWN) {
+      if (typeof opts.ignored === FUNCTION_TYPE) {
+        let stats;
+        try {
+          stats = await stat$2(path);
+        } catch (error) {}
+        if (this.fsw.closed) return;
+        if (this.checkIgnored(path, stats)) return;
+        if (sameTypes(info, stats)) {
+          this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+        } else {
+          this.handleEvent(EV_UNLINK, path, fullPath, realPath, parent, watchedDir, item, info, opts);
+        }
+      } else {
+        this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+      }
+    } else {
+      switch (info.event) {
+      case FSEVENT_CREATED:
+      case FSEVENT_MODIFIED:
+        return this.addOrChange(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+      case FSEVENT_DELETED:
+      case FSEVENT_MOVED:
+        return this.checkExists(path, fullPath, realPath, parent, watchedDir, item, info, opts);
+      }
+    }
+  };
+
+  const closer = setFSEventsListener(
+    watchPath,
+    realPath,
+    watchCallback,
+    this.fsw._emitRaw
+  );
+
+  this.fsw._emitReady();
+  return closer;
+}
+
+/**
+ * Handle symlinks encountered during directory scan
+ * @param {String} linkPath path to symlink
+ * @param {String} fullPath absolute path to the symlink
+ * @param {Function} transform pre-existing path transformer
+ * @param {Number} curDepth level of subdirectories traversed to where symlink is
+ * @returns {Promise}
+ */
+async _handleFsEventsSymlink(linkPath, fullPath, transform, curDepth) {
+  // don't follow the same symlink more than once
+  if (this.fsw.closed || this.fsw._symlinkPaths.has(fullPath)) return;
+
+  this.fsw._symlinkPaths.set(fullPath, true);
+  this.fsw._incrReadyCount();
+
+  try {
+    const linkTarget = await realpath$1(linkPath);
+    if (this.fsw.closed) return;
+    if (this.fsw._isIgnored(linkTarget)) {
+      return this.fsw._emitReady();
+    }
+
+    this.fsw._incrReadyCount();
+
+    // add the linkTarget for watching with a wrapper for transform
+    // that causes emitted paths to incorporate the link's path
+    this._addToFsEvents(linkTarget || linkPath, (path) => {
+      let aliasedPath = linkPath;
+      if (linkTarget && linkTarget !== DOT_SLASH) {
+        aliasedPath = path.replace(linkTarget, linkPath);
+      } else if (path !== DOT_SLASH) {
+        aliasedPath = sysPath__default['default'].join(linkPath, path);
+      }
+      return transform(aliasedPath);
+    }, false, curDepth);
+  } catch(error) {
+    if (this.fsw._handleError(error)) {
+      return this.fsw._emitReady();
+    }
+  }
+}
+
+/**
+ *
+ * @param {Path} newPath
+ * @param {fs.Stats} stats
+ */
+emitAdd(newPath, stats, processPath, opts, forceAdd) {
+  const pp = processPath(newPath);
+  const isDir = stats.isDirectory();
+  const dirObj = this.fsw._getWatchedDir(sysPath__default['default'].dirname(pp));
+  const base = sysPath__default['default'].basename(pp);
+
+  // ensure empty dirs get tracked
+  if (isDir) this.fsw._getWatchedDir(pp);
+  if (dirObj.has(base)) return;
+  dirObj.add(base);
+
+  if (!opts.ignoreInitial || forceAdd === true) {
+    this.fsw._emit(isDir ? EV_ADD_DIR$1 : EV_ADD$1, pp, stats);
+  }
+}
+
+initWatch(realPath, path, wh, processPath) {
+  if (this.fsw.closed) return;
+  const closer = this._watchWithFsEvents(
+    wh.watchPath,
+    sysPath__default['default'].resolve(realPath || wh.watchPath),
+    processPath,
+    wh.globFilter
+  );
+  this.fsw._addPathCloser(path, closer);
+}
+
+/**
+ * Handle added path with fsevents
+ * @param {String} path file/dir path or glob pattern
+ * @param {Function|Boolean=} transform converts working path to what the user expects
+ * @param {Boolean=} forceAdd ensure add is emitted
+ * @param {Number=} priorDepth Level of subdirectories already traversed.
+ * @returns {Promise}
+ */
+async _addToFsEvents(path, transform, forceAdd, priorDepth) {
+  if (this.fsw.closed) {
+    return;
+  }
+  const opts = this.fsw.options;
+  const processPath = typeof transform === FUNCTION_TYPE ? transform : IDENTITY_FN;
+
+  const wh = this.fsw._getWatchHelpers(path);
+
+  // evaluate what is at the path we're being asked to watch
+  try {
+    const stats = await statMethods$1[wh.statMethod](wh.watchPath);
+    if (this.fsw.closed) return;
+    if (this.fsw._isIgnored(wh.watchPath, stats)) {
+      throw null;
+    }
+    if (stats.isDirectory()) {
+      // emit addDir unless this is a glob parent
+      if (!wh.globFilter) this.emitAdd(processPath(path), stats, processPath, opts, forceAdd);
+
+      // don't recurse further if it would exceed depth setting
+      if (priorDepth && priorDepth > opts.depth) return;
+
+      // scan the contents of the dir
+      this.fsw._readdirp(wh.watchPath, {
+        fileFilter: entry => wh.filterPath(entry),
+        directoryFilter: entry => wh.filterDir(entry),
+        ...Depth(opts.depth - (priorDepth || 0))
+      }).on(STR_DATA$1, (entry) => {
+        // need to check filterPath on dirs b/c filterDir is less restrictive
+        if (this.fsw.closed) {
+          return;
+        }
+        if (entry.stats.isDirectory() && !wh.filterPath(entry)) return;
+
+        const joinedPath = sysPath__default['default'].join(wh.watchPath, entry.path);
+        const {fullPath} = entry;
+
+        if (wh.followSymlinks && entry.stats.isSymbolicLink()) {
+          // preserve the current depth here since it can't be derived from
+          // real paths past the symlink
+          const curDepth = opts.depth === undefined ?
+            undefined : calcDepth(joinedPath, sysPath__default['default'].resolve(wh.watchPath)) + 1;
+
+          this._handleFsEventsSymlink(joinedPath, fullPath, processPath, curDepth);
+        } else {
+          this.emitAdd(joinedPath, entry.stats, processPath, opts, forceAdd);
+        }
+      }).on(EV_ERROR$1, EMPTY_FN$1).on(STR_END$1, () => {
+        this.fsw._emitReady();
+      });
+    } else {
+      this.emitAdd(wh.watchPath, stats, processPath, opts, forceAdd);
+      this.fsw._emitReady();
+    }
+  } catch (error) {
+    if (!error || this.fsw._handleError(error)) {
+      // TODO: Strange thing: "should not choke on an ignored watch path" will be failed without 2 ready calls -__-
+      this.fsw._emitReady();
+      this.fsw._emitReady();
+    }
+  }
+
+  if (opts.persistent && forceAdd !== true) {
+    if (typeof transform === FUNCTION_TYPE) {
+      // realpath has already been resolved
+      this.initWatch(undefined, path, wh, processPath);
+    } else {
+      let realPath;
+      try {
+        realPath = await realpath$1(wh.watchPath);
+      } catch (e) {}
+      this.initWatch(realPath, path, wh, processPath);
+    }
+  }
+}
+
+}
+
+var fseventsHandler = FsEventsHandler;
+var canUse_1 = canUse;
+fseventsHandler.canUse = canUse_1;
+
+const { EventEmitter } = require$$0__default$2['default'];
+const fs$2 = require('original-fs');
+
+const { promisify: promisify$3 } = require$$0__default['default'];
+
+const anymatch = anymatch_1.default;
+
+
+
+
+
+
+
+const {
+  EV_ALL,
+  EV_READY,
+  EV_ADD: EV_ADD$2,
+  EV_CHANGE: EV_CHANGE$2,
+  EV_UNLINK: EV_UNLINK$1,
+  EV_ADD_DIR: EV_ADD_DIR$2,
+  EV_UNLINK_DIR,
+  EV_RAW,
+  EV_ERROR: EV_ERROR$2,
+
+  STR_CLOSE,
+  STR_END: STR_END$2,
+
+  BACK_SLASH_RE,
+  DOUBLE_SLASH_RE,
+  SLASH_OR_BACK_SLASH_RE,
+  DOT_RE,
+  REPLACER_RE,
+
+  SLASH,
+  SLASH_SLASH,
+  BRACE_START: BRACE_START$1,
+  BANG: BANG$1,
+  ONE_DOT,
+  TWO_DOTS,
+  GLOBSTAR,
+  SLASH_GLOBSTAR,
+  ANYMATCH_OPTS,
+  STRING_TYPE,
+  FUNCTION_TYPE: FUNCTION_TYPE$1,
+  EMPTY_STR: EMPTY_STR$1,
+  EMPTY_FN: EMPTY_FN$2,
+
+  isWindows: isWindows$1,
+  isMacos
+} = constants$2;
+
+const stat$3 = promisify$3(fs$2.stat);
+const readdir$1 = promisify$3(fs$2.readdir);
+
+/**
+ * @typedef {String} Path
+ * @typedef {'all'|'add'|'addDir'|'change'|'unlink'|'unlinkDir'|'raw'|'error'|'ready'} EventName
+ * @typedef {'readdir'|'watch'|'add'|'remove'|'change'} ThrottleType
+ */
+
+/**
+ *
+ * @typedef {Object} WatchHelpers
+ * @property {Boolean} followSymlinks
+ * @property {'stat'|'lstat'} statMethod
+ * @property {Path} path
+ * @property {Path} watchPath
+ * @property {Function} entryPath
+ * @property {Boolean} hasGlob
+ * @property {Object} globFilter
+ * @property {Function} filterPath
+ * @property {Function} filterDir
+ */
+
+const arrify = (value = []) => Array.isArray(value) ? value : [value];
+const flatten = (list, result = []) => {
+  list.forEach(item => {
+    if (Array.isArray(item)) {
+      flatten(item, result);
+    } else {
+      result.push(item);
+    }
+  });
+  return result;
+};
+
+const unifyPaths = (paths_) => {
+  /**
+   * @type {Array}
+   */
+  const paths = flatten(arrify(paths_));
+  if (!paths.every(p => typeof p === STRING_TYPE)) {
+    throw new TypeError(`Non-string provided as watch path: ${paths}`);
+  }
+  return paths.map(normalizePathToUnix);
+};
+
+// If SLASH_SLASH occurs at the beginning of path, it is not replaced
+//     because "//StoragePC/DrivePool/Movies" is a valid network path
+const toUnix = (string) => {
+  let str = string.replace(BACK_SLASH_RE, SLASH);
+  let prepend = false;
+  if (str.startsWith(SLASH_SLASH)) {
+    prepend = true;
+  }
+  while (str.match(DOUBLE_SLASH_RE)) {
+    str = str.replace(DOUBLE_SLASH_RE, SLASH);
+  }
+  if (prepend) {
+    str = SLASH + str;
+  }
+  return str;
+};
+
+// Our version of upath.normalize
+// TODO: this is not equal to path-normalize module - investigate why
+const normalizePathToUnix = (path) => toUnix(sysPath__default['default'].normalize(toUnix(path)));
+
+const normalizeIgnored = (cwd = EMPTY_STR$1) => (path) => {
+  if (typeof path !== STRING_TYPE) return path;
+  return normalizePathToUnix(sysPath__default['default'].isAbsolute(path) ? path : sysPath__default['default'].join(cwd, path));
+};
+
+const getAbsolutePath = (path, cwd) => {
+  if (sysPath__default['default'].isAbsolute(path)) {
+    return path;
+  }
+  if (path.startsWith(BANG$1)) {
+    return BANG$1 + sysPath__default['default'].join(cwd, path.slice(1));
+  }
+  return sysPath__default['default'].join(cwd, path);
+};
+
+const undef = (opts, key) => opts[key] === undefined;
+
+/**
+ * Directory entry.
+ * @property {Path} path
+ * @property {Set} items
+ */
+class DirEntry {
+  /**
+   * @param {Path} dir
+   * @param {Function} removeWatcher
+   */
+  constructor(dir, removeWatcher) {
+    this.path = dir;
+    this._removeWatcher = removeWatcher;
+    /** @type {Set} */
+    this.items = new Set();
+  }
+
+  add(item) {
+    const {items} = this;
+    if (!items) return;
+    if (item !== ONE_DOT && item !== TWO_DOTS) items.add(item);
+  }
+
+  async remove(item) {
+    const {items} = this;
+    if (!items) return;
+    items.delete(item);
+    if (items.size > 0) return;
+
+    const dir = this.path;
+    try {
+      await readdir$1(dir);
+    } catch (err) {
+      if (this._removeWatcher) {
+        this._removeWatcher(sysPath__default['default'].dirname(dir), sysPath__default['default'].basename(dir));
+      }
+    }
+  }
+
+  has(item) {
+    const {items} = this;
+    if (!items) return;
+    return items.has(item);
+  }
+
+  /**
+   * @returns {Array}
+   */
+  getChildren() {
+    const {items} = this;
+    if (!items) return;
+    return [...items.values()];
+  }
+
+  dispose() {
+    this.items.clear();
+    delete this.path;
+    delete this._removeWatcher;
+    delete this.items;
+    Object.freeze(this);
+  }
+}
+
+const STAT_METHOD_F = 'stat';
+const STAT_METHOD_L = 'lstat';
+class WatchHelper {
+  constructor(path, watchPath, follow, fsw) {
+    this.fsw = fsw;
+    this.path = path = path.replace(REPLACER_RE, EMPTY_STR$1);
+    this.watchPath = watchPath;
+    this.fullWatchPath = sysPath__default['default'].resolve(watchPath);
+    this.hasGlob = watchPath !== path;
+    /** @type {object|boolean} */
+    if (path === EMPTY_STR$1) this.hasGlob = false;
+    this.globSymlink = this.hasGlob && follow ? undefined : false;
+    this.globFilter = this.hasGlob ? anymatch(path, undefined, ANYMATCH_OPTS) : false;
+    this.dirParts = this.getDirParts(path);
+    this.dirParts.forEach((parts) => {
+      if (parts.length > 1) parts.pop();
+    });
+    this.followSymlinks = follow;
+    this.statMethod = follow ? STAT_METHOD_F : STAT_METHOD_L;
+  }
+
+  checkGlobSymlink(entry) {
+    // only need to resolve once
+    // first entry should always have entry.parentDir === EMPTY_STR
+    if (this.globSymlink === undefined) {
+      this.globSymlink = entry.fullParentDir === this.fullWatchPath ?
+        false : {realPath: entry.fullParentDir, linkPath: this.fullWatchPath};
+    }
+
+    if (this.globSymlink) {
+      return entry.fullPath.replace(this.globSymlink.realPath, this.globSymlink.linkPath);
+    }
+
+    return entry.fullPath;
+  }
+
+  entryPath(entry) {
+    return sysPath__default['default'].join(this.watchPath,
+      sysPath__default['default'].relative(this.watchPath, this.checkGlobSymlink(entry))
+    );
+  }
+
+  filterPath(entry) {
+    const {stats} = entry;
+    if (stats && stats.isSymbolicLink()) return this.filterDir(entry);
+    const resolvedPath = this.entryPath(entry);
+    const matchesGlob = this.hasGlob && typeof this.globFilter === FUNCTION_TYPE$1 ?
+      this.globFilter(resolvedPath) : true;
+    return matchesGlob &&
+      this.fsw._isntIgnored(resolvedPath, stats) &&
+      this.fsw._hasReadPermissions(stats);
+  }
+
+  getDirParts(path) {
+    if (!this.hasGlob) return [];
+    const parts = [];
+    const expandedPath = path.includes(BRACE_START$1) ? braces_1.expand(path) : [path];
+    expandedPath.forEach((path) => {
+      parts.push(sysPath__default['default'].relative(this.watchPath, path).split(SLASH_OR_BACK_SLASH_RE));
+    });
+    return parts;
+  }
+
+  filterDir(entry) {
+    if (this.hasGlob) {
+      const entryParts = this.getDirParts(this.checkGlobSymlink(entry));
+      let globstar = false;
+      this.unmatchedGlob = !this.dirParts.some((parts) => {
+        return parts.every((part, i) => {
+          if (part === GLOBSTAR) globstar = true;
+          return globstar || !entryParts[0][i] || anymatch(part, entryParts[0][i], ANYMATCH_OPTS);
+        });
+      });
+    }
+    return !this.unmatchedGlob && this.fsw._isntIgnored(this.entryPath(entry), entry.stats);
+  }
+}
+
+/**
+ * Watches files & directories for changes. Emitted events:
+ * `add`, `addDir`, `change`, `unlink`, `unlinkDir`, `all`, `error`
+ *
+ *     new FSWatcher()
+ *       .add(directories)
+ *       .on('add', path => log('File', path, 'was added'))
+ */
+class FSWatcher extends EventEmitter {
+// Not indenting methods for history sake; for now.
+constructor(_opts) {
+  super();
+
+  const opts = {};
+  if (_opts) Object.assign(opts, _opts); // for frozen objects
+
+  /** @type {Map} */
+  this._watched = new Map();
+  /** @type {Map} */
+  this._closers = new Map();
+  /** @type {Set} */
+  this._ignoredPaths = new Set();
+
+  /** @type {Map} */
+  this._throttled = new Map();
+
+  /** @type {Map} */
+  this._symlinkPaths = new Map();
+
+  this._streams = new Set();
+  this.closed = false;
+
+  // Set up default options.
+  if (undef(opts, 'persistent')) opts.persistent = true;
+  if (undef(opts, 'ignoreInitial')) opts.ignoreInitial = false;
+  if (undef(opts, 'ignorePermissionErrors')) opts.ignorePermissionErrors = false;
+  if (undef(opts, 'interval')) opts.interval = 100;
+  if (undef(opts, 'binaryInterval')) opts.binaryInterval = 300;
+  if (undef(opts, 'disableGlobbing')) opts.disableGlobbing = false;
+  opts.enableBinaryInterval = opts.binaryInterval !== opts.interval;
+
+  // Enable fsevents on OS X when polling isn't explicitly enabled.
+  if (undef(opts, 'useFsEvents')) opts.useFsEvents = !opts.usePolling;
+
+  // If we can't use fsevents, ensure the options reflect it's disabled.
+  const canUseFsEvents = fseventsHandler.canUse();
+  if (!canUseFsEvents) opts.useFsEvents = false;
+
+  // Use polling on Mac if not using fsevents.
+  // Other platforms use non-polling fs_watch.
+  if (undef(opts, 'usePolling') && !opts.useFsEvents) {
+    opts.usePolling = isMacos;
+  }
+
+  // Global override (useful for end-developers that need to force polling for all
+  // instances of chokidar, regardless of usage/dependency depth)
+  const envPoll = process.env.CHOKIDAR_USEPOLLING;
+  if (envPoll !== undefined) {
+    const envLower = envPoll.toLowerCase();
+
+    if (envLower === 'false' || envLower === '0') {
+      opts.usePolling = false;
+    } else if (envLower === 'true' || envLower === '1') {
+      opts.usePolling = true;
+    } else {
+      opts.usePolling = !!envLower;
+    }
+  }
+  const envInterval = process.env.CHOKIDAR_INTERVAL;
+  if (envInterval) {
+    opts.interval = Number.parseInt(envInterval, 10);
+  }
+
+  // Editor atomic write normalization enabled by default with fs.watch
+  if (undef(opts, 'atomic')) opts.atomic = !opts.usePolling && !opts.useFsEvents;
+  if (opts.atomic) this._pendingUnlinks = new Map();
+
+  if (undef(opts, 'followSymlinks')) opts.followSymlinks = true;
+
+  if (undef(opts, 'awaitWriteFinish')) opts.awaitWriteFinish = false;
+  if (opts.awaitWriteFinish === true) opts.awaitWriteFinish = {};
+  const awf = opts.awaitWriteFinish;
+  if (awf) {
+    if (!awf.stabilityThreshold) awf.stabilityThreshold = 2000;
+    if (!awf.pollInterval) awf.pollInterval = 100;
+    this._pendingWrites = new Map();
+  }
+  if (opts.ignored) opts.ignored = arrify(opts.ignored);
+
+  let readyCalls = 0;
+  this._emitReady = () => {
+    readyCalls++;
+    if (readyCalls >= this._readyCount) {
+      this._emitReady = EMPTY_FN$2;
+      this._readyEmitted = true;
+      // use process.nextTick to allow time for listener to be bound
+      process.nextTick(() => this.emit(EV_READY));
+    }
+  };
+  this._emitRaw = (...args) => this.emit(EV_RAW, ...args);
+  this._readyEmitted = false;
+  this.options = opts;
+
+  // Initialize with proper watcher.
+  if (opts.useFsEvents) {
+    this._fsEventsHandler = new fseventsHandler(this);
+  } else {
+    this._nodeFsHandler = new nodefsHandler(this);
+  }
+
+  // You’re frozen when your heart’s not open.
+  Object.freeze(opts);
+}
+
+// Public methods
+
+/**
+ * Adds paths to be watched on an existing FSWatcher instance
+ * @param {Path|Array} paths_
+ * @param {String=} _origAdd private; for handling non-existent paths to be watched
+ * @param {Boolean=} _internal private; indicates a non-user add
+ * @returns {FSWatcher} for chaining
+ */
+add(paths_, _origAdd, _internal) {
+  const {cwd, disableGlobbing} = this.options;
+  this.closed = false;
+  let paths = unifyPaths(paths_);
+  if (cwd) {
+    paths = paths.map((path) => {
+      const absPath = getAbsolutePath(path, cwd);
+
+      // Check `path` instead of `absPath` because the cwd portion can't be a glob
+      if (disableGlobbing || !isGlob(path)) {
+        return absPath;
+      }
+      return normalizePath(absPath);
+    });
+  }
+
+  // set aside negated glob strings
+  paths = paths.filter((path) => {
+    if (path.startsWith(BANG$1)) {
+      this._ignoredPaths.add(path.slice(1));
+      return false;
+    }
+
+    // if a path is being added that was previously ignored, stop ignoring it
+    this._ignoredPaths.delete(path);
+    this._ignoredPaths.delete(path + SLASH_GLOBSTAR);
+
+    // reset the cached userIgnored anymatch fn
+    // to make ignoredPaths changes effective
+    this._userIgnored = undefined;
+
+    return true;
+  });
+
+  if (this.options.useFsEvents && this._fsEventsHandler) {
+    if (!this._readyCount) this._readyCount = paths.length;
+    if (this.options.persistent) this._readyCount *= 2;
+    paths.forEach((path) => this._fsEventsHandler._addToFsEvents(path));
+  } else {
+    if (!this._readyCount) this._readyCount = 0;
+    this._readyCount += paths.length;
+    Promise.all(
+      paths.map(async path => {
+        const res = await this._nodeFsHandler._addToNodeFs(path, !_internal, 0, 0, _origAdd);
+        if (res) this._emitReady();
+        return res;
+      })
+    ).then(results => {
+      if (this.closed) return;
+      results.filter(item => item).forEach(item => {
+        this.add(sysPath__default['default'].dirname(item), sysPath__default['default'].basename(_origAdd || item));
+      });
+    });
+  }
+
+  return this;
+}
+
+/**
+ * Close watchers or start ignoring events from specified paths.
+ * @param {Path|Array} paths_ - string or array of strings, file/directory paths and/or globs
+ * @returns {FSWatcher} for chaining
+*/
+unwatch(paths_) {
+  if (this.closed) return this;
+  const paths = unifyPaths(paths_);
+  const {cwd} = this.options;
+
+  paths.forEach((path) => {
+    // convert to absolute path unless relative path already matches
+    if (!sysPath__default['default'].isAbsolute(path) && !this._closers.has(path)) {
+      if (cwd) path = sysPath__default['default'].join(cwd, path);
+      path = sysPath__default['default'].resolve(path);
+    }
+
+    this._closePath(path);
+
+    this._ignoredPaths.add(path);
+    if (this._watched.has(path)) {
+      this._ignoredPaths.add(path + SLASH_GLOBSTAR);
+    }
+
+    // reset the cached userIgnored anymatch fn
+    // to make ignoredPaths changes effective
+    this._userIgnored = undefined;
+  });
+
+  return this;
+}
+
+/**
+ * Close watchers and remove all listeners from watched paths.
+ * @returns {Promise}.
+*/
+close() {
+  if (this.closed) return this._closePromise;
+  this.closed = true;
+
+  // Memory management.
+  this.removeAllListeners();
+  const closers = [];
+  this._closers.forEach(closerList => closerList.forEach(closer => {
+    const promise = closer();
+    if (promise instanceof Promise) closers.push(promise);
+  }));
+  this._streams.forEach(stream => stream.destroy());
+  this._userIgnored = undefined;
+  this._readyCount = 0;
+  this._readyEmitted = false;
+  this._watched.forEach(dirent => dirent.dispose());
+  ['closers', 'watched', 'streams', 'symlinkPaths', 'throttled'].forEach(key => {
+    this[`_${key}`].clear();
+  });
+
+  this._closePromise = closers.length ? Promise.all(closers).then(() => undefined) : Promise.resolve();
+  return this._closePromise;
+}
+
+/**
+ * Expose list of watched paths
+ * @returns {Object} for chaining
+*/
+getWatched() {
+  const watchList = {};
+  this._watched.forEach((entry, dir) => {
+    const key = this.options.cwd ? sysPath__default['default'].relative(this.options.cwd, dir) : dir;
+    watchList[key || ONE_DOT] = entry.getChildren().sort();
+  });
+  return watchList;
+}
+
+emitWithAll(event, args) {
+  this.emit(...args);
+  if (event !== EV_ERROR$2) this.emit(EV_ALL, ...args);
+}
+
+// Common helpers
+// --------------
+
+/**
+ * Normalize and emit events.
+ * Calling _emit DOES NOT MEAN emit() would be called!
+ * @param {EventName} event Type of event
+ * @param {Path} path File or directory path
+ * @param {*=} val1 arguments to be passed with event
+ * @param {*=} val2
+ * @param {*=} val3
+ * @returns the error if defined, otherwise the value of the FSWatcher instance's `closed` flag
+ */
+async _emit(event, path, val1, val2, val3) {
+  if (this.closed) return;
+
+  const opts = this.options;
+  if (isWindows$1) path = sysPath__default['default'].normalize(path);
+  if (opts.cwd) path = sysPath__default['default'].relative(opts.cwd, path);
+  /** @type Array */
+  const args = [event, path];
+  if (val3 !== undefined) args.push(val1, val2, val3);
+  else if (val2 !== undefined) args.push(val1, val2);
+  else if (val1 !== undefined) args.push(val1);
+
+  const awf = opts.awaitWriteFinish;
+  let pw;
+  if (awf && (pw = this._pendingWrites.get(path))) {
+    pw.lastChange = new Date();
+    return this;
+  }
+
+  if (opts.atomic) {
+    if (event === EV_UNLINK$1) {
+      this._pendingUnlinks.set(path, args);
+      setTimeout(() => {
+        this._pendingUnlinks.forEach((entry, path) => {
+          this.emit(...entry);
+          this.emit(EV_ALL, ...entry);
+          this._pendingUnlinks.delete(path);
+        });
+      }, typeof opts.atomic === 'number' ? opts.atomic : 100);
+      return this;
+    }
+    if (event === EV_ADD$2 && this._pendingUnlinks.has(path)) {
+      event = args[0] = EV_CHANGE$2;
+      this._pendingUnlinks.delete(path);
+    }
+  }
+
+  if (awf && (event === EV_ADD$2 || event === EV_CHANGE$2) && this._readyEmitted) {
+    const awfEmit = (err, stats) => {
+      if (err) {
+        event = args[0] = EV_ERROR$2;
+        args[1] = err;
+        this.emitWithAll(event, args);
+      } else if (stats) {
+        // if stats doesn't exist the file must have been deleted
+        if (args.length > 2) {
+          args[2] = stats;
+        } else {
+          args.push(stats);
+        }
+        this.emitWithAll(event, args);
+      }
+    };
+
+    this._awaitWriteFinish(path, awf.stabilityThreshold, event, awfEmit);
+    return this;
+  }
+
+  if (event === EV_CHANGE$2) {
+    const isThrottled = !this._throttle(EV_CHANGE$2, path, 50);
+    if (isThrottled) return this;
+  }
+
+  if (opts.alwaysStat && val1 === undefined &&
+    (event === EV_ADD$2 || event === EV_ADD_DIR$2 || event === EV_CHANGE$2)
+  ) {
+    const fullPath = opts.cwd ? sysPath__default['default'].join(opts.cwd, path) : path;
+    let stats;
+    try {
+      stats = await stat$3(fullPath);
+    } catch (err) {}
+    // Suppress event when fs_stat fails, to avoid sending undefined 'stat'
+    if (!stats || this.closed) return;
+    args.push(stats);
+  }
+  this.emitWithAll(event, args);
+
+  return this;
+}
+
+/**
+ * Common handler for errors
+ * @param {Error} error
+ * @returns {Error|Boolean} The error if defined, otherwise the value of the FSWatcher instance's `closed` flag
+ */
+_handleError(error) {
+  const code = error && error.code;
+  if (error && code !== 'ENOENT' && code !== 'ENOTDIR' &&
+    (!this.options.ignorePermissionErrors || (code !== 'EPERM' && code !== 'EACCES'))
+  ) {
+    this.emit(EV_ERROR$2, error);
+  }
+  return error || this.closed;
+}
+
+/**
+ * Helper utility for throttling
+ * @param {ThrottleType} actionType type being throttled
+ * @param {Path} path being acted upon
+ * @param {Number} timeout duration of time to suppress duplicate actions
+ * @returns {Object|false} tracking object or false if action should be suppressed
+ */
+_throttle(actionType, path, timeout) {
+  if (!this._throttled.has(actionType)) {
+    this._throttled.set(actionType, new Map());
+  }
+
+  /** @type {Map} */
+  const action = this._throttled.get(actionType);
+  /** @type {Object} */
+  const actionPath = action.get(path);
+
+  if (actionPath) {
+    actionPath.count++;
+    return false;
+  }
+
+  let timeoutObject;
+  const clear = () => {
+    const item = action.get(path);
+    const count = item ? item.count : 0;
+    action.delete(path);
+    clearTimeout(timeoutObject);
+    if (item) clearTimeout(item.timeoutObject);
+    return count;
+  };
+  timeoutObject = setTimeout(clear, timeout);
+  const thr = {timeoutObject, clear, count: 0};
+  action.set(path, thr);
+  return thr;
+}
+
+_incrReadyCount() {
+  return this._readyCount++;
+}
+
+/**
+ * Awaits write operation to finish.
+ * Polls a newly created file for size variations. When files size does not change for 'threshold' milliseconds calls callback.
+ * @param {Path} path being acted upon
+ * @param {Number} threshold Time in milliseconds a file size must be fixed before acknowledging write OP is finished
+ * @param {EventName} event
+ * @param {Function} awfEmit Callback to be called when ready for event to be emitted.
+ */
+_awaitWriteFinish(path, threshold, event, awfEmit) {
+  let timeoutHandler;
+
+  let fullPath = path;
+  if (this.options.cwd && !sysPath__default['default'].isAbsolute(path)) {
+    fullPath = sysPath__default['default'].join(this.options.cwd, path);
+  }
+
+  const now = new Date();
+
+  const awaitWriteFinish = (prevStat) => {
+    fs$2.stat(fullPath, (err, curStat) => {
+      if (err || !this._pendingWrites.has(path)) {
+        if (err && err.code !== 'ENOENT') awfEmit(err);
+        return;
+      }
+
+      const now = Number(new Date());
+
+      if (prevStat && curStat.size !== prevStat.size) {
+        this._pendingWrites.get(path).lastChange = now;
+      }
+      const pw = this._pendingWrites.get(path);
+      const df = now - pw.lastChange;
+
+      if (df >= threshold) {
+        this._pendingWrites.delete(path);
+        awfEmit(undefined, curStat);
+      } else {
+        timeoutHandler = setTimeout(
+          awaitWriteFinish,
+          this.options.awaitWriteFinish.pollInterval,
+          curStat
+        );
+      }
+    });
+  };
+
+  if (!this._pendingWrites.has(path)) {
+    this._pendingWrites.set(path, {
+      lastChange: now,
+      cancelWait: () => {
+        this._pendingWrites.delete(path);
+        clearTimeout(timeoutHandler);
+        return event;
+      }
+    });
+    timeoutHandler = setTimeout(
+      awaitWriteFinish,
+      this.options.awaitWriteFinish.pollInterval
+    );
+  }
+}
+
+_getGlobIgnored() {
+  return [...this._ignoredPaths.values()];
+}
+
+/**
+ * Determines whether user has asked to ignore this path.
+ * @param {Path} path filepath or dir
+ * @param {fs.Stats=} stats result of fs.stat
+ * @returns {Boolean}
+ */
+_isIgnored(path, stats) {
+  if (this.options.atomic && DOT_RE.test(path)) return true;
+  if (!this._userIgnored) {
+    const {cwd} = this.options;
+    const ign = this.options.ignored;
+
+    const ignored = ign && ign.map(normalizeIgnored(cwd));
+    const paths = arrify(ignored)
+      .filter((path) => typeof path === STRING_TYPE && !isGlob(path))
+      .map((path) => path + SLASH_GLOBSTAR);
+    const list = this._getGlobIgnored().map(normalizeIgnored(cwd)).concat(ignored, paths);
+    this._userIgnored = anymatch(list, undefined, ANYMATCH_OPTS);
+  }
+
+  return this._userIgnored([path, stats]);
+}
+
+_isntIgnored(path, stat) {
+  return !this._isIgnored(path, stat);
+}
+
+/**
+ * Provides a set of common helpers and properties relating to symlink and glob handling.
+ * @param {Path} path file, directory, or glob pattern being watched
+ * @param {Number=} depth at any depth > 0, this isn't a glob
+ * @returns {WatchHelper} object containing helpers for this path
+ */
+_getWatchHelpers(path, depth) {
+  const watchPath = depth || this.options.disableGlobbing || !isGlob(path) ? path : globParent(path);
+  const follow = this.options.followSymlinks;
+
+  return new WatchHelper(path, watchPath, follow, this);
+}
+
+// Directory helpers
+// -----------------
+
+/**
+ * Provides directory tracking objects
+ * @param {String} directory path of the directory
+ * @returns {DirEntry} the directory's tracking object
+ */
+_getWatchedDir(directory) {
+  if (!this._boundRemove) this._boundRemove = this._remove.bind(this);
+  const dir = sysPath__default['default'].resolve(directory);
+  if (!this._watched.has(dir)) this._watched.set(dir, new DirEntry(dir, this._boundRemove));
+  return this._watched.get(dir);
+}
+
+// File helpers
+// ------------
+
+/**
+ * Check for read permissions.
+ * Based on this answer on SO: https://stackoverflow.com/a/11781404/1358405
+ * @param {fs.Stats} stats - object, result of fs_stat
+ * @returns {Boolean} indicates whether the file can be read
+*/
+_hasReadPermissions(stats) {
+  if (this.options.ignorePermissionErrors) return true;
+
+  // stats.mode may be bigint
+  const md = stats && Number.parseInt(stats.mode, 10);
+  const st = md & 0o777;
+  const it = Number.parseInt(st.toString(8)[0], 10);
+  return Boolean(4 & it);
+}
+
+/**
+ * Handles emitting unlink events for
+ * files and directories, and via recursion, for
+ * files and directories within directories that are unlinked
+ * @param {String} directory within which the following item is located
+ * @param {String} item      base path of item/directory
+ * @returns {void}
+*/
+_remove(directory, item, isDirectory) {
+  // if what is being deleted is a directory, get that directory's paths
+  // for recursive deleting and cleaning of watched object
+  // if it is not a directory, nestedDirectoryChildren will be empty array
+  const path = sysPath__default['default'].join(directory, item);
+  const fullPath = sysPath__default['default'].resolve(path);
+  isDirectory = isDirectory != null
+    ? isDirectory
+    : this._watched.has(path) || this._watched.has(fullPath);
+
+  // prevent duplicate handling in case of arriving here nearly simultaneously
+  // via multiple paths (such as _handleFile and _handleDir)
+  if (!this._throttle('remove', path, 100)) return;
+
+  // if the only watched file is removed, watch for its return
+  if (!isDirectory && !this.options.useFsEvents && this._watched.size === 1) {
+    this.add(directory, item, true);
+  }
+
+  // This will create a new entry in the watched object in either case
+  // so we got to do the directory check beforehand
+  const wp = this._getWatchedDir(path);
+  const nestedDirectoryChildren = wp.getChildren();
+
+  // Recursively remove children directories / files.
+  nestedDirectoryChildren.forEach(nested => this._remove(path, nested));
+
+  // Check if item was on the watched list and remove it
+  const parent = this._getWatchedDir(directory);
+  const wasTracked = parent.has(item);
+  parent.remove(item);
+
+  // Fixes issue #1042 -> Relative paths were detected and added as symlinks
+  // (https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L612),
+  // but never removed from the map in case the path was deleted.
+  // This leads to an incorrect state if the path was recreated:
+  // https://github.com/paulmillr/chokidar/blob/e1753ddbc9571bdc33b4a4af172d52cb6e611c10/lib/nodefs-handler.js#L553
+  if (this._symlinkPaths.has(fullPath)) {
+    this._symlinkPaths.delete(fullPath);
+  }
+
+  // If we wait for this file to be fully written, cancel the wait.
+  let relPath = path;
+  if (this.options.cwd) relPath = sysPath__default['default'].relative(this.options.cwd, path);
+  if (this.options.awaitWriteFinish && this._pendingWrites.has(relPath)) {
+    const event = this._pendingWrites.get(relPath).cancelWait();
+    if (event === EV_ADD$2) return;
+  }
+
+  // The Entry will either be a directory that just got removed
+  // or a bogus entry to a file, in either case we have to remove it
+  this._watched.delete(path);
+  this._watched.delete(fullPath);
+  const eventName = isDirectory ? EV_UNLINK_DIR : EV_UNLINK$1;
+  if (wasTracked && !this._isIgnored(path)) this._emit(eventName, path);
+
+  // Avoid conflicts if we later create another file with the same name
+  if (!this.options.useFsEvents) {
+    this._closePath(path);
+  }
+}
+
+/**
+ * Closes all watchers for a path
+ * @param {Path} path
+ */
+_closePath(path) {
+  this._closeFile(path);
+  const dir = sysPath__default['default'].dirname(path);
+  this._getWatchedDir(dir).remove(sysPath__default['default'].basename(path));
+}
+
+/**
+ * Closes only file-specific watchers
+ * @param {Path} path
+ */
+_closeFile(path) {
+  const closers = this._closers.get(path);
+  if (!closers) return;
+  closers.forEach(closer => closer());
+  this._closers.delete(path);
+}
+
+/**
+ *
+ * @param {Path} path
+ * @param {Function} closer
+ */
+_addPathCloser(path, closer) {
+  if (!closer) return;
+  let list = this._closers.get(path);
+  if (!list) {
+    list = [];
+    this._closers.set(path, list);
+  }
+  list.push(closer);
+}
+
+_readdirp(root, opts) {
+  if (this.closed) return;
+  const options = {type: EV_ALL, alwaysStat: true, lstat: true, ...opts};
+  let stream = readdirp_1(root, options);
+  this._streams.add(stream);
+  stream.once(STR_CLOSE, () => {
+    stream = undefined;
+  });
+  stream.once(STR_END$2, () => {
+    if (stream) {
+      this._streams.delete(stream);
+      stream = undefined;
+    }
+  });
+  return stream;
+}
+
+}
+
+/**
+ * Instantiates watcher with paths to be tracked.
+ * @param {String|Array} paths file/directory paths and/or globs
+ * @param {Object=} options chokidar opts
+ * @returns an instance of FSWatcher for chaining.
+ */
+const watch = (paths, options) => {
+  const watcher = new FSWatcher(options);
+  watcher.add(paths);
+  return watcher;
+};
+
+var watch_1 = watch;
+
+var utils$2 = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.extend = extend;
+exports.indexOf = indexOf;
+exports.escapeExpression = escapeExpression;
+exports.isEmpty = isEmpty;
+exports.createFrame = createFrame;
+exports.blockParams = blockParams;
+exports.appendContextPath = appendContextPath;
+var escape = {
+  '&': '&',
+  '<': '<',
+  '>': '>',
+  '"': '"',
+  "'": ''',
+  '`': '`',
+  '=': '='
+};
+
+var badChars = /[&<>"'`=]/g,
+    possible = /[&<>"'`=]/;
+
+function escapeChar(chr) {
+  return escape[chr];
+}
+
+function extend(obj /* , ...source */) {
+  for (var i = 1; i < arguments.length; i++) {
+    for (var key in arguments[i]) {
+      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
+        obj[key] = arguments[i][key];
+      }
+    }
+  }
+
+  return obj;
+}
+
+var toString = Object.prototype.toString;
+
+exports.toString = toString;
+// Sourced from lodash
+// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
+/* eslint-disable func-style */
+var isFunction = function isFunction(value) {
+  return typeof value === 'function';
+};
+// fallback for older versions of Chrome and Safari
+/* istanbul ignore next */
+if (isFunction(/x/)) {
+  exports.isFunction = isFunction = function (value) {
+    return typeof value === 'function' && toString.call(value) === '[object Function]';
+  };
+}
+exports.isFunction = isFunction;
+
+/* eslint-enable func-style */
+
+/* istanbul ignore next */
+var isArray = Array.isArray || function (value) {
+  return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
+};
+
+exports.isArray = isArray;
+// Older IE versions do not directly support indexOf so we must implement our own, sadly.
+
+function indexOf(array, value) {
+  for (var i = 0, len = array.length; i < len; i++) {
+    if (array[i] === value) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+function escapeExpression(string) {
+  if (typeof string !== 'string') {
+    // don't escape SafeStrings, since they're already safe
+    if (string && string.toHTML) {
+      return string.toHTML();
+    } else if (string == null) {
+      return '';
+    } else if (!string) {
+      return string + '';
+    }
+
+    // Force a string conversion as this will be done by the append regardless and
+    // the regex test will do this transparently behind the scenes, causing issues if
+    // an object's to string has escaped characters in it.
+    string = '' + string;
+  }
+
+  if (!possible.test(string)) {
+    return string;
+  }
+  return string.replace(badChars, escapeChar);
+}
+
+function isEmpty(value) {
+  if (!value && value !== 0) {
+    return true;
+  } else if (isArray(value) && value.length === 0) {
+    return true;
+  } else {
+    return false;
+  }
+}
+
+function createFrame(object) {
+  var frame = extend({}, object);
+  frame._parent = object;
+  return frame;
+}
+
+function blockParams(params, ids) {
+  params.path = ids;
+  return params;
+}
+
+function appendContextPath(contextPath, id) {
+  return (contextPath ? contextPath + '.' : '') + id;
+}
+
+});
+
+var exception = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
+
+function Exception(message, node) {
+  var loc = node && node.loc,
+      line = undefined,
+      endLineNumber = undefined,
+      column = undefined,
+      endColumn = undefined;
+
+  if (loc) {
+    line = loc.start.line;
+    endLineNumber = loc.end.line;
+    column = loc.start.column;
+    endColumn = loc.end.column;
+
+    message += ' - ' + line + ':' + column;
+  }
+
+  var tmp = Error.prototype.constructor.call(this, message);
+
+  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
+  for (var idx = 0; idx < errorProps.length; idx++) {
+    this[errorProps[idx]] = tmp[errorProps[idx]];
+  }
+
+  /* istanbul ignore else */
+  if (Error.captureStackTrace) {
+    Error.captureStackTrace(this, Exception);
+  }
+
+  try {
+    if (loc) {
+      this.lineNumber = line;
+      this.endLineNumber = endLineNumber;
+
+      // Work around issue under safari where we can't directly set the column value
+      /* istanbul ignore next */
+      if (Object.defineProperty) {
+        Object.defineProperty(this, 'column', {
+          value: column,
+          enumerable: true
+        });
+        Object.defineProperty(this, 'endColumn', {
+          value: endColumn,
+          enumerable: true
+        });
+      } else {
+        this.column = column;
+        this.endColumn = endColumn;
+      }
+    }
+  } catch (nop) {
+    /* Ignore if the browser is very particular */
+  }
+}
+
+Exception.prototype = new Error();
+
+exports['default'] = Exception;
+module.exports = exports['default'];
+
+});
+
+var blockHelperMissing = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+
+
+exports['default'] = function (instance) {
+  instance.registerHelper('blockHelperMissing', function (context, options) {
+    var inverse = options.inverse,
+        fn = options.fn;
+
+    if (context === true) {
+      return fn(this);
+    } else if (context === false || context == null) {
+      return inverse(this);
+    } else if (utils$2.isArray(context)) {
+      if (context.length > 0) {
+        if (options.ids) {
+          options.ids = [options.name];
+        }
+
+        return instance.helpers.each(context, options);
+      } else {
+        return inverse(this);
+      }
+    } else {
+      if (options.data && options.ids) {
+        var data = utils$2.createFrame(options.data);
+        data.contextPath = utils$2.appendContextPath(options.data.contextPath, options.name);
+        options = { data: data };
+      }
+
+      return fn(context, options);
+    }
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var each = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+exports['default'] = function (instance) {
+  instance.registerHelper('each', function (context, options) {
+    if (!options) {
+      throw new _exception2['default']('Must pass iterator to #each');
+    }
+
+    var fn = options.fn,
+        inverse = options.inverse,
+        i = 0,
+        ret = '',
+        data = undefined,
+        contextPath = undefined;
+
+    if (options.data && options.ids) {
+      contextPath = utils$2.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
+    }
+
+    if (utils$2.isFunction(context)) {
+      context = context.call(this);
+    }
+
+    if (options.data) {
+      data = utils$2.createFrame(options.data);
+    }
+
+    function execIteration(field, index, last) {
+      if (data) {
+        data.key = field;
+        data.index = index;
+        data.first = index === 0;
+        data.last = !!last;
+
+        if (contextPath) {
+          data.contextPath = contextPath + field;
+        }
+      }
+
+      ret = ret + fn(context[field], {
+        data: data,
+        blockParams: utils$2.blockParams([context[field], field], [contextPath + field, null])
+      });
+    }
+
+    if (context && typeof context === 'object') {
+      if (utils$2.isArray(context)) {
+        for (var j = context.length; i < j; i++) {
+          if (i in context) {
+            execIteration(i, i, i === context.length - 1);
+          }
+        }
+      } else if (commonjsGlobal.Symbol && context[commonjsGlobal.Symbol.iterator]) {
+        var newContext = [];
+        var iterator = context[commonjsGlobal.Symbol.iterator]();
+        for (var it = iterator.next(); !it.done; it = iterator.next()) {
+          newContext.push(it.value);
+        }
+        context = newContext;
+        for (var j = context.length; i < j; i++) {
+          execIteration(i, i, i === context.length - 1);
+        }
+      } else {
+        (function () {
+          var priorKey = undefined;
+
+          Object.keys(context).forEach(function (key) {
+            // We're running the iterations one step out of sync so we can detect
+            // the last iteration without have to scan the object twice and create
+            // an itermediate keys array.
+            if (priorKey !== undefined) {
+              execIteration(priorKey, i - 1);
+            }
+            priorKey = key;
+            i++;
+          });
+          if (priorKey !== undefined) {
+            execIteration(priorKey, i - 1, true);
+          }
+        })();
+      }
+    }
+
+    if (i === 0) {
+      ret = inverse(this);
+    }
+
+    return ret;
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var helperMissing = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+exports['default'] = function (instance) {
+  instance.registerHelper('helperMissing', function () /* [args, ]options */{
+    if (arguments.length === 1) {
+      // A missing field in a {{foo}} construct.
+      return undefined;
+    } else {
+      // Someone is actually trying to call something, blow up.
+      throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
+    }
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var _if = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+exports['default'] = function (instance) {
+  instance.registerHelper('if', function (conditional, options) {
+    if (arguments.length != 2) {
+      throw new _exception2['default']('#if requires exactly one argument');
+    }
+    if (utils$2.isFunction(conditional)) {
+      conditional = conditional.call(this);
+    }
+
+    // Default behavior is to render the positive path if the value is truthy and not empty.
+    // The `includeZero` option may be set to treat the condtional as purely not empty based on the
+    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
+    if (!options.hash.includeZero && !conditional || utils$2.isEmpty(conditional)) {
+      return options.inverse(this);
+    } else {
+      return options.fn(this);
+    }
+  });
+
+  instance.registerHelper('unless', function (conditional, options) {
+    if (arguments.length != 2) {
+      throw new _exception2['default']('#unless requires exactly one argument');
+    }
+    return instance.helpers['if'].call(this, conditional, {
+      fn: options.inverse,
+      inverse: options.fn,
+      hash: options.hash
+    });
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var log = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+exports['default'] = function (instance) {
+  instance.registerHelper('log', function () /* message, options */{
+    var args = [undefined],
+        options = arguments[arguments.length - 1];
+    for (var i = 0; i < arguments.length - 1; i++) {
+      args.push(arguments[i]);
+    }
+
+    var level = 1;
+    if (options.hash.level != null) {
+      level = options.hash.level;
+    } else if (options.data && options.data.level != null) {
+      level = options.data.level;
+    }
+    args[0] = level;
+
+    instance.log.apply(instance, args);
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var lookup = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+exports['default'] = function (instance) {
+  instance.registerHelper('lookup', function (obj, field, options) {
+    if (!obj) {
+      // Note for 5.0: Change to "obj == null" in 5.0
+      return obj;
+    }
+    return options.lookupProperty(obj, field);
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var _with = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+exports['default'] = function (instance) {
+  instance.registerHelper('with', function (context, options) {
+    if (arguments.length != 2) {
+      throw new _exception2['default']('#with requires exactly one argument');
+    }
+    if (utils$2.isFunction(context)) {
+      context = context.call(this);
+    }
+
+    var fn = options.fn;
+
+    if (!utils$2.isEmpty(context)) {
+      var data = options.data;
+      if (options.data && options.ids) {
+        data = utils$2.createFrame(options.data);
+        data.contextPath = utils$2.appendContextPath(options.data.contextPath, options.ids[0]);
+      }
+
+      return fn(context, {
+        data: data,
+        blockParams: utils$2.blockParams([context], [data && data.contextPath])
+      });
+    } else {
+      return options.inverse(this);
+    }
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var helpers = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.registerDefaultHelpers = registerDefaultHelpers;
+exports.moveHelperToHooks = moveHelperToHooks;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _helpersBlockHelperMissing2 = _interopRequireDefault(blockHelperMissing);
+
+
+
+var _helpersEach2 = _interopRequireDefault(each);
+
+
+
+var _helpersHelperMissing2 = _interopRequireDefault(helperMissing);
+
+
+
+var _helpersIf2 = _interopRequireDefault(_if);
+
+
+
+var _helpersLog2 = _interopRequireDefault(log);
+
+
+
+var _helpersLookup2 = _interopRequireDefault(lookup);
+
+
+
+var _helpersWith2 = _interopRequireDefault(_with);
+
+function registerDefaultHelpers(instance) {
+  _helpersBlockHelperMissing2['default'](instance);
+  _helpersEach2['default'](instance);
+  _helpersHelperMissing2['default'](instance);
+  _helpersIf2['default'](instance);
+  _helpersLog2['default'](instance);
+  _helpersLookup2['default'](instance);
+  _helpersWith2['default'](instance);
+}
+
+function moveHelperToHooks(instance, helperName, keepHelper) {
+  if (instance.helpers[helperName]) {
+    instance.hooks[helperName] = instance.helpers[helperName];
+    if (!keepHelper) {
+      delete instance.helpers[helperName];
+    }
+  }
+}
+
+});
+
+var inline = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+
+
+exports['default'] = function (instance) {
+  instance.registerDecorator('inline', function (fn, props, container, options) {
+    var ret = fn;
+    if (!props.partials) {
+      props.partials = {};
+      ret = function (context, options) {
+        // Create a new partials stack frame prior to exec.
+        var original = container.partials;
+        container.partials = utils$2.extend({}, original, props.partials);
+        var ret = fn(context, options);
+        container.partials = original;
+        return ret;
+      };
+    }
+
+    props.partials[options.args[0]] = options.fn;
+
+    return ret;
+  });
+};
+
+module.exports = exports['default'];
+
+});
+
+var decorators = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.registerDefaultDecorators = registerDefaultDecorators;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _decoratorsInline2 = _interopRequireDefault(inline);
+
+function registerDefaultDecorators(instance) {
+  _decoratorsInline2['default'](instance);
+}
+
+});
+
+var logger_1 = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+
+
+var logger = {
+  methodMap: ['debug', 'info', 'warn', 'error'],
+  level: 'info',
+
+  // Maps a given level value to the `methodMap` indexes above.
+  lookupLevel: function lookupLevel(level) {
+    if (typeof level === 'string') {
+      var levelMap = utils$2.indexOf(logger.methodMap, level.toLowerCase());
+      if (levelMap >= 0) {
+        level = levelMap;
+      } else {
+        level = parseInt(level, 10);
+      }
+    }
+
+    return level;
+  },
+
+  // Can be overridden in the host environment
+  log: function log(level) {
+    level = logger.lookupLevel(level);
+
+    if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
+      var method = logger.methodMap[level];
+      // eslint-disable-next-line no-console
+      if (!console[method]) {
+        method = 'log';
+      }
+
+      for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+        message[_key - 1] = arguments[_key];
+      }
+
+      console[method].apply(console, message); // eslint-disable-line no-console
+    }
+  }
+};
+
+exports['default'] = logger;
+module.exports = exports['default'];
+
+});
+
+var createNewLookupObject_1 = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.createNewLookupObject = createNewLookupObject;
+
+
+
+/**
+ * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
+ * The resulting object can be used with "object[property]" to check if a property exists
+ * @param {...object} sources a varargs parameter of source objects that will be merged
+ * @returns {object}
+ */
+
+function createNewLookupObject() {
+  for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
+    sources[_key] = arguments[_key];
+  }
+
+  return utils$2.extend.apply(undefined, [Object.create(null)].concat(sources));
+}
+
+});
+
+var protoAccess = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.createProtoAccessControl = createProtoAccessControl;
+exports.resultIsAllowed = resultIsAllowed;
+exports.resetLoggedProperties = resetLoggedProperties;
+// istanbul ignore next
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+
+
+
+
+var logger = _interopRequireWildcard(logger_1);
+
+var loggedProperties = Object.create(null);
+
+function createProtoAccessControl(runtimeOptions) {
+  var defaultMethodWhiteList = Object.create(null);
+  defaultMethodWhiteList['constructor'] = false;
+  defaultMethodWhiteList['__defineGetter__'] = false;
+  defaultMethodWhiteList['__defineSetter__'] = false;
+  defaultMethodWhiteList['__lookupGetter__'] = false;
+
+  var defaultPropertyWhiteList = Object.create(null);
+  // eslint-disable-next-line no-proto
+  defaultPropertyWhiteList['__proto__'] = false;
+
+  return {
+    properties: {
+      whitelist: createNewLookupObject_1.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
+      defaultValue: runtimeOptions.allowProtoPropertiesByDefault
+    },
+    methods: {
+      whitelist: createNewLookupObject_1.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
+      defaultValue: runtimeOptions.allowProtoMethodsByDefault
+    }
+  };
+}
+
+function resultIsAllowed(result, protoAccessControl, propertyName) {
+  if (typeof result === 'function') {
+    return checkWhiteList(protoAccessControl.methods, propertyName);
+  } else {
+    return checkWhiteList(protoAccessControl.properties, propertyName);
+  }
+}
+
+function checkWhiteList(protoAccessControlForType, propertyName) {
+  if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
+    return protoAccessControlForType.whitelist[propertyName] === true;
+  }
+  if (protoAccessControlForType.defaultValue !== undefined) {
+    return protoAccessControlForType.defaultValue;
+  }
+  logUnexpecedPropertyAccessOnce(propertyName);
+  return false;
+}
+
+function logUnexpecedPropertyAccessOnce(propertyName) {
+  if (loggedProperties[propertyName] !== true) {
+    loggedProperties[propertyName] = true;
+    logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
+  }
+}
+
+function resetLoggedProperties() {
+  Object.keys(loggedProperties).forEach(function (propertyName) {
+    delete loggedProperties[propertyName];
+  });
+}
+
+});
+
+var base = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.HandlebarsEnvironment = HandlebarsEnvironment;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+
+
+
+
+
+
+var _logger2 = _interopRequireDefault(logger_1);
+
+
+
+var VERSION = '4.7.6';
+exports.VERSION = VERSION;
+var COMPILER_REVISION = 8;
+exports.COMPILER_REVISION = COMPILER_REVISION;
+var LAST_COMPATIBLE_COMPILER_REVISION = 7;
+
+exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;
+var REVISION_CHANGES = {
+  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
+  2: '== 1.0.0-rc.3',
+  3: '== 1.0.0-rc.4',
+  4: '== 1.x.x',
+  5: '== 2.0.0-alpha.x',
+  6: '>= 2.0.0-beta.1',
+  7: '>= 4.0.0 <4.3.0',
+  8: '>= 4.3.0'
+};
+
+exports.REVISION_CHANGES = REVISION_CHANGES;
+var objectType = '[object Object]';
+
+function HandlebarsEnvironment(helpers$1, partials, decorators$1) {
+  this.helpers = helpers$1 || {};
+  this.partials = partials || {};
+  this.decorators = decorators$1 || {};
+
+  helpers.registerDefaultHelpers(this);
+  decorators.registerDefaultDecorators(this);
+}
+
+HandlebarsEnvironment.prototype = {
+  constructor: HandlebarsEnvironment,
+
+  logger: _logger2['default'],
+  log: _logger2['default'].log,
+
+  registerHelper: function registerHelper(name, fn) {
+    if (utils$2.toString.call(name) === objectType) {
+      if (fn) {
+        throw new _exception2['default']('Arg not supported with multiple helpers');
+      }
+      utils$2.extend(this.helpers, name);
+    } else {
+      this.helpers[name] = fn;
+    }
+  },
+  unregisterHelper: function unregisterHelper(name) {
+    delete this.helpers[name];
+  },
+
+  registerPartial: function registerPartial(name, partial) {
+    if (utils$2.toString.call(name) === objectType) {
+      utils$2.extend(this.partials, name);
+    } else {
+      if (typeof partial === 'undefined') {
+        throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
+      }
+      this.partials[name] = partial;
+    }
+  },
+  unregisterPartial: function unregisterPartial(name) {
+    delete this.partials[name];
+  },
+
+  registerDecorator: function registerDecorator(name, fn) {
+    if (utils$2.toString.call(name) === objectType) {
+      if (fn) {
+        throw new _exception2['default']('Arg not supported with multiple decorators');
+      }
+      utils$2.extend(this.decorators, name);
+    } else {
+      this.decorators[name] = fn;
+    }
+  },
+  unregisterDecorator: function unregisterDecorator(name) {
+    delete this.decorators[name];
+  },
+  /**
+   * Reset the memory of illegal property accesses that have already been logged.
+   * @deprecated should only be used in handlebars test-cases
+   */
+  resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
+    protoAccess.resetLoggedProperties();
+  }
+};
+
+var log = _logger2['default'].log;
+
+exports.log = log;
+exports.createFrame = utils$2.createFrame;
+exports.logger = _logger2['default'];
+
+});
+
+var safeString = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+function SafeString(string) {
+  this.string = string;
+}
+
+SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
+  return '' + this.string;
+};
+
+exports['default'] = SafeString;
+module.exports = exports['default'];
+
+});
+
+var wrapHelper_1 = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.wrapHelper = wrapHelper;
+
+function wrapHelper(helper, transformOptionsFn) {
+  if (typeof helper !== 'function') {
+    // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
+    // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
+    return helper;
+  }
+  var wrapper = function wrapper() /* dynamic arguments */{
+    var options = arguments[arguments.length - 1];
+    arguments[arguments.length - 1] = transformOptionsFn(options);
+    return helper.apply(this, arguments);
+  };
+  return wrapper;
+}
+
+});
+
+var runtime = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.checkRevision = checkRevision;
+exports.template = template;
+exports.wrapProgram = wrapProgram;
+exports.resolvePartial = resolvePartial;
+exports.invokePartial = invokePartial;
+exports.noop = noop;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+// istanbul ignore next
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+
+
+var Utils = _interopRequireWildcard(utils$2);
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+
+
+
+
+
+
+
+
+function checkRevision(compilerInfo) {
+  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
+      currentRevision = base.COMPILER_REVISION;
+
+  if (compilerRevision >= base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= base.COMPILER_REVISION) {
+    return;
+  }
+
+  if (compilerRevision < base.LAST_COMPATIBLE_COMPILER_REVISION) {
+    var runtimeVersions = base.REVISION_CHANGES[currentRevision],
+        compilerVersions = base.REVISION_CHANGES[compilerRevision];
+    throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
+  } else {
+    // Use the embedded version info since the runtime doesn't know about this revision yet
+    throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
+  }
+}
+
+function template(templateSpec, env) {
+  /* istanbul ignore next */
+  if (!env) {
+    throw new _exception2['default']('No environment passed to template');
+  }
+  if (!templateSpec || !templateSpec.main) {
+    throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
+  }
+
+  templateSpec.main.decorator = templateSpec.main_d;
+
+  // Note: Using env.VM references rather than local var references throughout this section to allow
+  // for external users to override these as pseudo-supported APIs.
+  env.VM.checkRevision(templateSpec.compiler);
+
+  // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)
+  var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;
+
+  function invokePartialWrapper(partial, context, options) {
+    if (options.hash) {
+      context = Utils.extend({}, context, options.hash);
+      if (options.ids) {
+        options.ids[0] = true;
+      }
+    }
+    partial = env.VM.resolvePartial.call(this, partial, context, options);
+
+    var extendedOptions = Utils.extend({}, options, {
+      hooks: this.hooks,
+      protoAccessControl: this.protoAccessControl
+    });
+
+    var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
+
+    if (result == null && env.compile) {
+      options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
+      result = options.partials[options.name](context, extendedOptions);
+    }
+    if (result != null) {
+      if (options.indent) {
+        var lines = result.split('\n');
+        for (var i = 0, l = lines.length; i < l; i++) {
+          if (!lines[i] && i + 1 === l) {
+            break;
+          }
+
+          lines[i] = options.indent + lines[i];
+        }
+        result = lines.join('\n');
+      }
+      return result;
+    } else {
+      throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
+    }
+  }
+
+  // Just add water
+  var container = {
+    strict: function strict(obj, name, loc) {
+      if (!obj || !(name in obj)) {
+        throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
+          loc: loc
+        });
+      }
+      return obj[name];
+    },
+    lookupProperty: function lookupProperty(parent, propertyName) {
+      var result = parent[propertyName];
+      if (result == null) {
+        return result;
+      }
+      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
+        return result;
+      }
+
+      if (protoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
+        return result;
+      }
+      return undefined;
+    },
+    lookup: function lookup(depths, name) {
+      var len = depths.length;
+      for (var i = 0; i < len; i++) {
+        var result = depths[i] && container.lookupProperty(depths[i], name);
+        if (result != null) {
+          return depths[i][name];
+        }
+      }
+    },
+    lambda: function lambda(current, context) {
+      return typeof current === 'function' ? current.call(context) : current;
+    },
+
+    escapeExpression: Utils.escapeExpression,
+    invokePartial: invokePartialWrapper,
+
+    fn: function fn(i) {
+      var ret = templateSpec[i];
+      ret.decorator = templateSpec[i + '_d'];
+      return ret;
+    },
+
+    programs: [],
+    program: function program(i, data, declaredBlockParams, blockParams, depths) {
+      var programWrapper = this.programs[i],
+          fn = this.fn(i);
+      if (data || depths || blockParams || declaredBlockParams) {
+        programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
+      } else if (!programWrapper) {
+        programWrapper = this.programs[i] = wrapProgram(this, i, fn);
+      }
+      return programWrapper;
+    },
+
+    data: function data(value, depth) {
+      while (value && depth--) {
+        value = value._parent;
+      }
+      return value;
+    },
+    mergeIfNeeded: function mergeIfNeeded(param, common) {
+      var obj = param || common;
+
+      if (param && common && param !== common) {
+        obj = Utils.extend({}, common, param);
+      }
+
+      return obj;
+    },
+    // An empty object to use as replacement for null-contexts
+    nullContext: Object.seal({}),
+
+    noop: env.VM.noop,
+    compilerInfo: templateSpec.compiler
+  };
+
+  function ret(context) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    var data = options.data;
+
+    ret._setup(options);
+    if (!options.partial && templateSpec.useData) {
+      data = initData(context, data);
+    }
+    var depths = undefined,
+        blockParams = templateSpec.useBlockParams ? [] : undefined;
+    if (templateSpec.useDepths) {
+      if (options.depths) {
+        depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
+      } else {
+        depths = [context];
+      }
+    }
+
+    function main(context /*, options*/) {
+      return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
+    }
+
+    main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
+    return main(context, options);
+  }
+
+  ret.isTop = true;
+
+  ret._setup = function (options) {
+    if (!options.partial) {
+      var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
+      wrapHelpersToPassLookupProperty(mergedHelpers, container);
+      container.helpers = mergedHelpers;
+
+      if (templateSpec.usePartial) {
+        // Use mergeIfNeeded here to prevent compiling global partials multiple times
+        container.partials = container.mergeIfNeeded(options.partials, env.partials);
+      }
+      if (templateSpec.usePartial || templateSpec.useDecorators) {
+        container.decorators = Utils.extend({}, env.decorators, options.decorators);
+      }
+
+      container.hooks = {};
+      container.protoAccessControl = protoAccess.createProtoAccessControl(options);
+
+      var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
+      helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
+      helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
+    } else {
+      container.protoAccessControl = options.protoAccessControl; // internal option
+      container.helpers = options.helpers;
+      container.partials = options.partials;
+      container.decorators = options.decorators;
+      container.hooks = options.hooks;
+    }
+  };
+
+  ret._child = function (i, data, blockParams, depths) {
+    if (templateSpec.useBlockParams && !blockParams) {
+      throw new _exception2['default']('must pass block params');
+    }
+    if (templateSpec.useDepths && !depths) {
+      throw new _exception2['default']('must pass parent depths');
+    }
+
+    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
+  };
+  return ret;
+}
+
+function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
+  function prog(context) {
+    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+    var currentDepths = depths;
+    if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
+      currentDepths = [context].concat(depths);
+    }
+
+    return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
+  }
+
+  prog = executeDecorators(fn, prog, container, depths, data, blockParams);
+
+  prog.program = i;
+  prog.depth = depths ? depths.length : 0;
+  prog.blockParams = declaredBlockParams || 0;
+  return prog;
+}
+
+/**
+ * This is currently part of the official API, therefore implementation details should not be changed.
+ */
+
+function resolvePartial(partial, context, options) {
+  if (!partial) {
+    if (options.name === '@partial-block') {
+      partial = options.data['partial-block'];
+    } else {
+      partial = options.partials[options.name];
+    }
+  } else if (!partial.call && !options.name) {
+    // This is a dynamic partial that returned a string
+    options.name = partial;
+    partial = options.partials[partial];
+  }
+  return partial;
+}
+
+function invokePartial(partial, context, options) {
+  // Use the current closure context to save the partial-block if this partial
+  var currentPartialBlock = options.data && options.data['partial-block'];
+  options.partial = true;
+  if (options.ids) {
+    options.data.contextPath = options.ids[0] || options.data.contextPath;
+  }
+
+  var partialBlock = undefined;
+  if (options.fn && options.fn !== noop) {
+    (function () {
+      options.data = base.createFrame(options.data);
+      // Wrapper function to get access to currentPartialBlock from the closure
+      var fn = options.fn;
+      partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
+        var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+        // Restore the partial-block from the closure for the execution of the block
+        // i.e. the part inside the block of the partial call.
+        options.data = base.createFrame(options.data);
+        options.data['partial-block'] = currentPartialBlock;
+        return fn(context, options);
+      };
+      if (fn.partials) {
+        options.partials = Utils.extend({}, options.partials, fn.partials);
+      }
+    })();
+  }
+
+  if (partial === undefined && partialBlock) {
+    partial = partialBlock;
+  }
+
+  if (partial === undefined) {
+    throw new _exception2['default']('The partial ' + options.name + ' could not be found');
+  } else if (partial instanceof Function) {
+    return partial(context, options);
+  }
+}
+
+function noop() {
+  return '';
+}
+
+function initData(context, data) {
+  if (!data || !('root' in data)) {
+    data = data ? base.createFrame(data) : {};
+    data.root = context;
+  }
+  return data;
+}
+
+function executeDecorators(fn, prog, container, depths, data, blockParams) {
+  if (fn.decorator) {
+    var props = {};
+    prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
+    Utils.extend(prog, props);
+  }
+  return prog;
+}
+
+function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
+  Object.keys(mergedHelpers).forEach(function (helperName) {
+    var helper = mergedHelpers[helperName];
+    mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
+  });
+}
+
+function passLookupPropertyOption(helper, container) {
+  var lookupProperty = container.lookupProperty;
+  return wrapHelper_1.wrapHelper(helper, function (options) {
+    return Utils.extend({ lookupProperty: lookupProperty }, options);
+  });
+}
+
+});
+
+var noConflict = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+exports['default'] = function (Handlebars) {
+  /* istanbul ignore next */
+  var root = typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : window,
+      $Handlebars = root.Handlebars;
+  /* istanbul ignore next */
+  Handlebars.noConflict = function () {
+    if (root.Handlebars === Handlebars) {
+      root.Handlebars = $Handlebars;
+    }
+    return Handlebars;
+  };
+};
+
+module.exports = exports['default'];
+
+});
+
+var handlebars_runtime = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+// istanbul ignore next
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+
+
+var base$1 = _interopRequireWildcard(base);
+
+// Each of these augment the Handlebars object. No need to setup here.
+// (This is done to easily share code between commonjs and browse envs)
+
+
+
+var _handlebarsSafeString2 = _interopRequireDefault(safeString);
+
+
+
+var _handlebarsException2 = _interopRequireDefault(exception);
+
+
+
+var Utils = _interopRequireWildcard(utils$2);
+
+
+
+var runtime$1 = _interopRequireWildcard(runtime);
+
+
+
+var _handlebarsNoConflict2 = _interopRequireDefault(noConflict);
+
+// For compatibility and usage outside of module systems, make the Handlebars object a namespace
+function create() {
+  var hb = new base$1.HandlebarsEnvironment();
+
+  Utils.extend(hb, base$1);
+  hb.SafeString = _handlebarsSafeString2['default'];
+  hb.Exception = _handlebarsException2['default'];
+  hb.Utils = Utils;
+  hb.escapeExpression = Utils.escapeExpression;
+
+  hb.VM = runtime$1;
+  hb.template = function (spec) {
+    return runtime$1.template(spec, hb);
+  };
+
+  return hb;
+}
+
+var inst = create();
+inst.create = create;
+
+_handlebarsNoConflict2['default'](inst);
+
+inst['default'] = inst;
+
+exports['default'] = inst;
+module.exports = exports['default'];
+
+});
+
+var ast = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+var AST = {
+  // Public API used to evaluate derived attributes regarding AST nodes
+  helpers: {
+    // a mustache is definitely a helper if:
+    // * it is an eligible helper, and
+    // * it has at least one parameter or hash segment
+    helperExpression: function helperExpression(node) {
+      return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);
+    },
+
+    scopedId: function scopedId(path) {
+      return (/^\.|this\b/.test(path.original)
+      );
+    },
+
+    // an ID is simple if it only has one part, and that part is not
+    // `..` or `this`.
+    simpleId: function simpleId(path) {
+      return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;
+    }
+  }
+};
+
+// Must be exported as an object rather than the root of the module as the jison lexer
+// must modify the object to operate properly.
+exports['default'] = AST;
+module.exports = exports['default'];
+
+});
+
+var parser = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+var handlebars = (function () {
+    var parser = { trace: function trace() {},
+        yy: {},
+        symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 },
+        terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" },
+        productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],
+        performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
+
+            var $0 = $$.length - 1;
+            switch (yystate) {
+                case 1:
+                    return $$[$0 - 1];
+                case 2:
+                    this.$ = yy.prepareProgram($$[$0]);
+                    break;
+                case 3:
+                    this.$ = $$[$0];
+                    break;
+                case 4:
+                    this.$ = $$[$0];
+                    break;
+                case 5:
+                    this.$ = $$[$0];
+                    break;
+                case 6:
+                    this.$ = $$[$0];
+                    break;
+                case 7:
+                    this.$ = $$[$0];
+                    break;
+                case 8:
+                    this.$ = $$[$0];
+                    break;
+                case 9:
+                    this.$ = {
+                        type: 'CommentStatement',
+                        value: yy.stripComment($$[$0]),
+                        strip: yy.stripFlags($$[$0], $$[$0]),
+                        loc: yy.locInfo(this._$)
+                    };
+
+                    break;
+                case 10:
+                    this.$ = {
+                        type: 'ContentStatement',
+                        original: $$[$0],
+                        value: $$[$0],
+                        loc: yy.locInfo(this._$)
+                    };
+
+                    break;
+                case 11:
+                    this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
+                    break;
+                case 12:
+                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };
+                    break;
+                case 13:
+                    this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);
+                    break;
+                case 14:
+                    this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);
+                    break;
+                case 15:
+                    this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+                    break;
+                case 16:
+                    this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+                    break;
+                case 17:
+                    this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
+                    break;
+                case 18:
+                    this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };
+                    break;
+                case 19:
+                    var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),
+                        program = yy.prepareProgram([inverse], $$[$0 - 1].loc);
+                    program.chained = true;
+
+                    this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };
+
+                    break;
+                case 20:
+                    this.$ = $$[$0];
+                    break;
+                case 21:
+                    this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };
+                    break;
+                case 22:
+                    this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
+                    break;
+                case 23:
+                    this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
+                    break;
+                case 24:
+                    this.$ = {
+                        type: 'PartialStatement',
+                        name: $$[$0 - 3],
+                        params: $$[$0 - 2],
+                        hash: $$[$0 - 1],
+                        indent: '',
+                        strip: yy.stripFlags($$[$0 - 4], $$[$0]),
+                        loc: yy.locInfo(this._$)
+                    };
+
+                    break;
+                case 25:
+                    this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
+                    break;
+                case 26:
+                    this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };
+                    break;
+                case 27:
+                    this.$ = $$[$0];
+                    break;
+                case 28:
+                    this.$ = $$[$0];
+                    break;
+                case 29:
+                    this.$ = {
+                        type: 'SubExpression',
+                        path: $$[$0 - 3],
+                        params: $$[$0 - 2],
+                        hash: $$[$0 - 1],
+                        loc: yy.locInfo(this._$)
+                    };
+
+                    break;
+                case 30:
+                    this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };
+                    break;
+                case 31:
+                    this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };
+                    break;
+                case 32:
+                    this.$ = yy.id($$[$0 - 1]);
+                    break;
+                case 33:
+                    this.$ = $$[$0];
+                    break;
+                case 34:
+                    this.$ = $$[$0];
+                    break;
+                case 35:
+                    this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };
+                    break;
+                case 36:
+                    this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };
+                    break;
+                case 37:
+                    this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };
+                    break;
+                case 38:
+                    this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };
+                    break;
+                case 39:
+                    this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };
+                    break;
+                case 40:
+                    this.$ = $$[$0];
+                    break;
+                case 41:
+                    this.$ = $$[$0];
+                    break;
+                case 42:
+                    this.$ = yy.preparePath(true, $$[$0], this._$);
+                    break;
+                case 43:
+                    this.$ = yy.preparePath(false, $$[$0], this._$);
+                    break;
+                case 44:
+                    $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];
+                    break;
+                case 45:
+                    this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];
+                    break;
+                case 46:
+                    this.$ = [];
+                    break;
+                case 47:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 48:
+                    this.$ = [];
+                    break;
+                case 49:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 50:
+                    this.$ = [];
+                    break;
+                case 51:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 58:
+                    this.$ = [];
+                    break;
+                case 59:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 64:
+                    this.$ = [];
+                    break;
+                case 65:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 70:
+                    this.$ = [];
+                    break;
+                case 71:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 78:
+                    this.$ = [];
+                    break;
+                case 79:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 82:
+                    this.$ = [];
+                    break;
+                case 83:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 86:
+                    this.$ = [];
+                    break;
+                case 87:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 90:
+                    this.$ = [];
+                    break;
+                case 91:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 94:
+                    this.$ = [];
+                    break;
+                case 95:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 98:
+                    this.$ = [$$[$0]];
+                    break;
+                case 99:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+                case 100:
+                    this.$ = [$$[$0]];
+                    break;
+                case 101:
+                    $$[$0 - 1].push($$[$0]);
+                    break;
+            }
+        },
+        table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],
+        defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },
+        parseError: function parseError(str, hash) {
+            throw new Error(str);
+        },
+        parse: function parse(input) {
+            var self = this,
+                stack = [0],
+                vstack = [null],
+                lstack = [],
+                table = this.table,
+                yytext = "",
+                yylineno = 0,
+                yyleng = 0,
+                recovering = 0;
+            this.lexer.setInput(input);
+            this.lexer.yy = this.yy;
+            this.yy.lexer = this.lexer;
+            this.yy.parser = this;
+            if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {};
+            var yyloc = this.lexer.yylloc;
+            lstack.push(yyloc);
+            var ranges = this.lexer.options && this.lexer.options.ranges;
+            if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError;
+            function lex() {
+                var token;
+                token = self.lexer.lex() || 1;
+                if (typeof token !== "number") {
+                    token = self.symbols_[token] || token;
+                }
+                return token;
+            }
+            var symbol,
+                state,
+                action,
+                r,
+                yyval = {},
+                p,
+                len,
+                newState,
+                expected;
+            while (true) {
+                state = stack[stack.length - 1];
+                if (this.defaultActions[state]) {
+                    action = this.defaultActions[state];
+                } else {
+                    if (symbol === null || typeof symbol == "undefined") {
+                        symbol = lex();
+                    }
+                    action = table[state] && table[state][symbol];
+                }
+                if (typeof action === "undefined" || !action.length || !action[0]) {
+                    var errStr = "";
+                    if (!recovering) {
+                        expected = [];
+                        for (p in table[state]) if (this.terminals_[p] && p > 2) {
+                            expected.push("'" + this.terminals_[p] + "'");
+                        }
+                        if (this.lexer.showPosition) {
+                            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
+                        } else {
+                            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
+                        }
+                        this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });
+                    }
+                }
+                if (action[0] instanceof Array && action.length > 1) {
+                    throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
+                }
+                switch (action[0]) {
+                    case 1:
+                        stack.push(symbol);
+                        vstack.push(this.lexer.yytext);
+                        lstack.push(this.lexer.yylloc);
+                        stack.push(action[1]);
+                        symbol = null;
+                        {
+                            yyleng = this.lexer.yyleng;
+                            yytext = this.lexer.yytext;
+                            yylineno = this.lexer.yylineno;
+                            yyloc = this.lexer.yylloc;
+                            if (recovering > 0) recovering--;
+                        }
+                        break;
+                    case 2:
+                        len = this.productions_[action[1]][1];
+                        yyval.$ = vstack[vstack.length - len];
+                        yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };
+                        if (ranges) {
+                            yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
+                        }
+                        r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
+                        if (typeof r !== "undefined") {
+                            return r;
+                        }
+                        if (len) {
+                            stack = stack.slice(0, -1 * len * 2);
+                            vstack = vstack.slice(0, -1 * len);
+                            lstack = lstack.slice(0, -1 * len);
+                        }
+                        stack.push(this.productions_[action[1]][0]);
+                        vstack.push(yyval.$);
+                        lstack.push(yyval._$);
+                        newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
+                        stack.push(newState);
+                        break;
+                    case 3:
+                        return true;
+                }
+            }
+            return true;
+        }
+    };
+    /* Jison generated lexer */
+    var lexer = (function () {
+        var lexer = { EOF: 1,
+            parseError: function parseError(str, hash) {
+                if (this.yy.parser) {
+                    this.yy.parser.parseError(str, hash);
+                } else {
+                    throw new Error(str);
+                }
+            },
+            setInput: function setInput(input) {
+                this._input = input;
+                this._more = this._less = this.done = false;
+                this.yylineno = this.yyleng = 0;
+                this.yytext = this.matched = this.match = '';
+                this.conditionStack = ['INITIAL'];
+                this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };
+                if (this.options.ranges) this.yylloc.range = [0, 0];
+                this.offset = 0;
+                return this;
+            },
+            input: function input() {
+                var ch = this._input[0];
+                this.yytext += ch;
+                this.yyleng++;
+                this.offset++;
+                this.match += ch;
+                this.matched += ch;
+                var lines = ch.match(/(?:\r\n?|\n).*/g);
+                if (lines) {
+                    this.yylineno++;
+                    this.yylloc.last_line++;
+                } else {
+                    this.yylloc.last_column++;
+                }
+                if (this.options.ranges) this.yylloc.range[1]++;
+
+                this._input = this._input.slice(1);
+                return ch;
+            },
+            unput: function unput(ch) {
+                var len = ch.length;
+                var lines = ch.split(/(?:\r\n?|\n)/g);
+
+                this._input = ch + this._input;
+                this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
+                //this.yyleng -= len;
+                this.offset -= len;
+                var oldLines = this.match.split(/(?:\r\n?|\n)/g);
+                this.match = this.match.substr(0, this.match.length - 1);
+                this.matched = this.matched.substr(0, this.matched.length - 1);
+
+                if (lines.length - 1) this.yylineno -= lines.length - 1;
+                var r = this.yylloc.range;
+
+                this.yylloc = { first_line: this.yylloc.first_line,
+                    last_line: this.yylineno + 1,
+                    first_column: this.yylloc.first_column,
+                    last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
+                };
+
+                if (this.options.ranges) {
+                    this.yylloc.range = [r[0], r[0] + this.yyleng - len];
+                }
+                return this;
+            },
+            more: function more() {
+                this._more = true;
+                return this;
+            },
+            less: function less(n) {
+                this.unput(this.match.slice(n));
+            },
+            pastInput: function pastInput() {
+                var past = this.matched.substr(0, this.matched.length - this.match.length);
+                return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, "");
+            },
+            upcomingInput: function upcomingInput() {
+                var next = this.match;
+                if (next.length < 20) {
+                    next += this._input.substr(0, 20 - next.length);
+                }
+                return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
+            },
+            showPosition: function showPosition() {
+                var pre = this.pastInput();
+                var c = new Array(pre.length + 1).join("-");
+                return pre + this.upcomingInput() + "\n" + c + "^";
+            },
+            next: function next() {
+                if (this.done) {
+                    return this.EOF;
+                }
+                if (!this._input) this.done = true;
+
+                var token, match, tempMatch, index, lines;
+                if (!this._more) {
+                    this.yytext = '';
+                    this.match = '';
+                }
+                var rules = this._currentRules();
+                for (var i = 0; i < rules.length; i++) {
+                    tempMatch = this._input.match(this.rules[rules[i]]);
+                    if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
+                        match = tempMatch;
+                        index = i;
+                        if (!this.options.flex) break;
+                    }
+                }
+                if (match) {
+                    lines = match[0].match(/(?:\r\n?|\n).*/g);
+                    if (lines) this.yylineno += lines.length;
+                    this.yylloc = { first_line: this.yylloc.last_line,
+                        last_line: this.yylineno + 1,
+                        first_column: this.yylloc.last_column,
+                        last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length };
+                    this.yytext += match[0];
+                    this.match += match[0];
+                    this.matches = match;
+                    this.yyleng = this.yytext.length;
+                    if (this.options.ranges) {
+                        this.yylloc.range = [this.offset, this.offset += this.yyleng];
+                    }
+                    this._more = false;
+                    this._input = this._input.slice(match[0].length);
+                    this.matched += match[0];
+                    token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);
+                    if (this.done && this._input) this.done = false;
+                    if (token) return token;else return;
+                }
+                if (this._input === "") {
+                    return this.EOF;
+                } else {
+                    return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno });
+                }
+            },
+            lex: function lex() {
+                var r = this.next();
+                if (typeof r !== 'undefined') {
+                    return r;
+                } else {
+                    return this.lex();
+                }
+            },
+            begin: function begin(condition) {
+                this.conditionStack.push(condition);
+            },
+            popState: function popState() {
+                return this.conditionStack.pop();
+            },
+            _currentRules: function _currentRules() {
+                return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
+            },
+            topState: function topState() {
+                return this.conditionStack[this.conditionStack.length - 2];
+            },
+            pushState: function begin(condition) {
+                this.begin(condition);
+            } };
+        lexer.options = {};
+        lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
+
+            function strip(start, end) {
+                return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);
+            }
+            switch ($avoiding_name_collisions) {
+                case 0:
+                    if (yy_.yytext.slice(-2) === "\\\\") {
+                        strip(0, 1);
+                        this.begin("mu");
+                    } else if (yy_.yytext.slice(-1) === "\\") {
+                        strip(0, 1);
+                        this.begin("emu");
+                    } else {
+                        this.begin("mu");
+                    }
+                    if (yy_.yytext) return 15;
+
+                    break;
+                case 1:
+                    return 15;
+                case 2:
+                    this.popState();
+                    return 15;
+                case 3:
+                    this.begin('raw');return 15;
+                case 4:
+                    this.popState();
+                    // Should be using `this.topState()` below, but it currently
+                    // returns the second top instead of the first top. Opened an
+                    // issue about it at https://github.com/zaach/jison/issues/291
+                    if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {
+                        return 15;
+                    } else {
+                        strip(5, 9);
+                        return 'END_RAW_BLOCK';
+                    }
+                case 5:
+                    return 15;
+                case 6:
+                    this.popState();
+                    return 14;
+                case 7:
+                    return 65;
+                case 8:
+                    return 68;
+                case 9:
+                    return 19;
+                case 10:
+                    this.popState();
+                    this.begin('raw');
+                    return 23;
+                case 11:
+                    return 55;
+                case 12:
+                    return 60;
+                case 13:
+                    return 29;
+                case 14:
+                    return 47;
+                case 15:
+                    this.popState();return 44;
+                case 16:
+                    this.popState();return 44;
+                case 17:
+                    return 34;
+                case 18:
+                    return 39;
+                case 19:
+                    return 51;
+                case 20:
+                    return 48;
+                case 21:
+                    this.unput(yy_.yytext);
+                    this.popState();
+                    this.begin('com');
+
+                    break;
+                case 22:
+                    this.popState();
+                    return 14;
+                case 23:
+                    return 48;
+                case 24:
+                    return 73;
+                case 25:
+                    return 72;
+                case 26:
+                    return 72;
+                case 27:
+                    return 87;
+                case 28:
+                    // ignore whitespace
+                    break;
+                case 29:
+                    this.popState();return 54;
+                case 30:
+                    this.popState();return 33;
+                case 31:
+                    yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80;
+                case 32:
+                    yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80;
+                case 33:
+                    return 85;
+                case 34:
+                    return 82;
+                case 35:
+                    return 82;
+                case 36:
+                    return 83;
+                case 37:
+                    return 84;
+                case 38:
+                    return 81;
+                case 39:
+                    return 75;
+                case 40:
+                    return 77;
+                case 41:
+                    return 72;
+                case 42:
+                    yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72;
+                case 43:
+                    return 'INVALID';
+                case 44:
+                    return 5;
+            }
+        };
+        lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/];
+        lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } };
+        return lexer;
+    })();
+    parser.lexer = lexer;
+    function Parser() {
+        this.yy = {};
+    }Parser.prototype = parser;parser.Parser = Parser;
+    return new Parser();
+})();exports["default"] = handlebars;
+module.exports = exports["default"];
+
+});
+
+var visitor = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+function Visitor() {
+  this.parents = [];
+}
+
+Visitor.prototype = {
+  constructor: Visitor,
+  mutating: false,
+
+  // Visits a given value. If mutating, will replace the value if necessary.
+  acceptKey: function acceptKey(node, name) {
+    var value = this.accept(node[name]);
+    if (this.mutating) {
+      // Hacky sanity check: This may have a few false positives for type for the helper
+      // methods but will generally do the right thing without a lot of overhead.
+      if (value && !Visitor.prototype[value.type]) {
+        throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
+      }
+      node[name] = value;
+    }
+  },
+
+  // Performs an accept operation with added sanity check to ensure
+  // required keys are not removed.
+  acceptRequired: function acceptRequired(node, name) {
+    this.acceptKey(node, name);
+
+    if (!node[name]) {
+      throw new _exception2['default'](node.type + ' requires ' + name);
+    }
+  },
+
+  // Traverses a given array. If mutating, empty respnses will be removed
+  // for child elements.
+  acceptArray: function acceptArray(array) {
+    for (var i = 0, l = array.length; i < l; i++) {
+      this.acceptKey(array, i);
+
+      if (!array[i]) {
+        array.splice(i, 1);
+        i--;
+        l--;
+      }
+    }
+  },
+
+  accept: function accept(object) {
+    if (!object) {
+      return;
+    }
+
+    /* istanbul ignore next: Sanity code */
+    if (!this[object.type]) {
+      throw new _exception2['default']('Unknown type: ' + object.type, object);
+    }
+
+    if (this.current) {
+      this.parents.unshift(this.current);
+    }
+    this.current = object;
+
+    var ret = this[object.type](object);
+
+    this.current = this.parents.shift();
+
+    if (!this.mutating || ret) {
+      return ret;
+    } else if (ret !== false) {
+      return object;
+    }
+  },
+
+  Program: function Program(program) {
+    this.acceptArray(program.body);
+  },
+
+  MustacheStatement: visitSubExpression,
+  Decorator: visitSubExpression,
+
+  BlockStatement: visitBlock,
+  DecoratorBlock: visitBlock,
+
+  PartialStatement: visitPartial,
+  PartialBlockStatement: function PartialBlockStatement(partial) {
+    visitPartial.call(this, partial);
+
+    this.acceptKey(partial, 'program');
+  },
+
+  ContentStatement: function ContentStatement() /* content */{},
+  CommentStatement: function CommentStatement() /* comment */{},
+
+  SubExpression: visitSubExpression,
+
+  PathExpression: function PathExpression() /* path */{},
+
+  StringLiteral: function StringLiteral() /* string */{},
+  NumberLiteral: function NumberLiteral() /* number */{},
+  BooleanLiteral: function BooleanLiteral() /* bool */{},
+  UndefinedLiteral: function UndefinedLiteral() /* literal */{},
+  NullLiteral: function NullLiteral() /* literal */{},
+
+  Hash: function Hash(hash) {
+    this.acceptArray(hash.pairs);
+  },
+  HashPair: function HashPair(pair) {
+    this.acceptRequired(pair, 'value');
+  }
+};
+
+function visitSubExpression(mustache) {
+  this.acceptRequired(mustache, 'path');
+  this.acceptArray(mustache.params);
+  this.acceptKey(mustache, 'hash');
+}
+function visitBlock(block) {
+  visitSubExpression.call(this, block);
+
+  this.acceptKey(block, 'program');
+  this.acceptKey(block, 'inverse');
+}
+function visitPartial(partial) {
+  this.acceptRequired(partial, 'name');
+  this.acceptArray(partial.params);
+  this.acceptKey(partial, 'hash');
+}
+
+exports['default'] = Visitor;
+module.exports = exports['default'];
+
+});
+
+var whitespaceControl = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _visitor2 = _interopRequireDefault(visitor);
+
+function WhitespaceControl() {
+  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+  this.options = options;
+}
+WhitespaceControl.prototype = new _visitor2['default']();
+
+WhitespaceControl.prototype.Program = function (program) {
+  var doStandalone = !this.options.ignoreStandalone;
+
+  var isRoot = !this.isRootSeen;
+  this.isRootSeen = true;
+
+  var body = program.body;
+  for (var i = 0, l = body.length; i < l; i++) {
+    var current = body[i],
+        strip = this.accept(current);
+
+    if (!strip) {
+      continue;
+    }
+
+    var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
+        _isNextWhitespace = isNextWhitespace(body, i, isRoot),
+        openStandalone = strip.openStandalone && _isPrevWhitespace,
+        closeStandalone = strip.closeStandalone && _isNextWhitespace,
+        inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
+
+    if (strip.close) {
+      omitRight(body, i, true);
+    }
+    if (strip.open) {
+      omitLeft(body, i, true);
+    }
+
+    if (doStandalone && inlineStandalone) {
+      omitRight(body, i);
+
+      if (omitLeft(body, i)) {
+        // If we are on a standalone node, save the indent info for partials
+        if (current.type === 'PartialStatement') {
+          // Pull out the whitespace from the final line
+          current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1];
+        }
+      }
+    }
+    if (doStandalone && openStandalone) {
+      omitRight((current.program || current.inverse).body);
+
+      // Strip out the previous content node if it's whitespace only
+      omitLeft(body, i);
+    }
+    if (doStandalone && closeStandalone) {
+      // Always strip the next node
+      omitRight(body, i);
+
+      omitLeft((current.inverse || current.program).body);
+    }
+  }
+
+  return program;
+};
+
+WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {
+  this.accept(block.program);
+  this.accept(block.inverse);
+
+  // Find the inverse program that is involed with whitespace stripping.
+  var program = block.program || block.inverse,
+      inverse = block.program && block.inverse,
+      firstInverse = inverse,
+      lastInverse = inverse;
+
+  if (inverse && inverse.chained) {
+    firstInverse = inverse.body[0].program;
+
+    // Walk the inverse chain to find the last inverse that is actually in the chain.
+    while (lastInverse.chained) {
+      lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
+    }
+  }
+
+  var strip = {
+    open: block.openStrip.open,
+    close: block.closeStrip.close,
+
+    // Determine the standalone candiacy. Basically flag our content as being possibly standalone
+    // so our parent can determine if we actually are standalone
+    openStandalone: isNextWhitespace(program.body),
+    closeStandalone: isPrevWhitespace((firstInverse || program).body)
+  };
+
+  if (block.openStrip.close) {
+    omitRight(program.body, null, true);
+  }
+
+  if (inverse) {
+    var inverseStrip = block.inverseStrip;
+
+    if (inverseStrip.open) {
+      omitLeft(program.body, null, true);
+    }
+
+    if (inverseStrip.close) {
+      omitRight(firstInverse.body, null, true);
+    }
+    if (block.closeStrip.open) {
+      omitLeft(lastInverse.body, null, true);
+    }
+
+    // Find standalone else statments
+    if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {
+      omitLeft(program.body);
+      omitRight(firstInverse.body);
+    }
+  } else if (block.closeStrip.open) {
+    omitLeft(program.body, null, true);
+  }
+
+  return strip;
+};
+
+WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {
+  return mustache.strip;
+};
+
+WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {
+  /* istanbul ignore next */
+  var strip = node.strip || {};
+  return {
+    inlineStandalone: true,
+    open: strip.open,
+    close: strip.close
+  };
+};
+
+function isPrevWhitespace(body, i, isRoot) {
+  if (i === undefined) {
+    i = body.length;
+  }
+
+  // Nodes that end with newlines are considered whitespace (but are special
+  // cased for strip operations)
+  var prev = body[i - 1],
+      sibling = body[i - 2];
+  if (!prev) {
+    return isRoot;
+  }
+
+  if (prev.type === 'ContentStatement') {
+    return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original);
+  }
+}
+function isNextWhitespace(body, i, isRoot) {
+  if (i === undefined) {
+    i = -1;
+  }
+
+  var next = body[i + 1],
+      sibling = body[i + 2];
+  if (!next) {
+    return isRoot;
+  }
+
+  if (next.type === 'ContentStatement') {
+    return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original);
+  }
+}
+
+// Marks the node to the right of the position as omitted.
+// I.e. {{foo}}' ' will mark the ' ' node as omitted.
+//
+// If i is undefined, then the first child will be marked as such.
+//
+// If mulitple is truthy then all whitespace will be stripped out until non-whitespace
+// content is met.
+function omitRight(body, i, multiple) {
+  var current = body[i == null ? 0 : i + 1];
+  if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {
+    return;
+  }
+
+  var original = current.value;
+  current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, '');
+  current.rightStripped = current.value !== original;
+}
+
+// Marks the node to the left of the position as omitted.
+// I.e. ' '{{foo}} will mark the ' ' node as omitted.
+//
+// If i is undefined then the last child will be marked as such.
+//
+// If mulitple is truthy then all whitespace will be stripped out until non-whitespace
+// content is met.
+function omitLeft(body, i, multiple) {
+  var current = body[i == null ? body.length - 1 : i - 1];
+  if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {
+    return;
+  }
+
+  // We omit the last node if it's whitespace only and not preceded by a non-content node.
+  var original = current.value;
+  current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, '');
+  current.leftStripped = current.value !== original;
+  return current.leftStripped;
+}
+
+exports['default'] = WhitespaceControl;
+module.exports = exports['default'];
+
+});
+
+var helpers$1 = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.SourceLocation = SourceLocation;
+exports.id = id;
+exports.stripFlags = stripFlags;
+exports.stripComment = stripComment;
+exports.preparePath = preparePath;
+exports.prepareMustache = prepareMustache;
+exports.prepareRawBlock = prepareRawBlock;
+exports.prepareBlock = prepareBlock;
+exports.prepareProgram = prepareProgram;
+exports.preparePartialBlock = preparePartialBlock;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+function validateClose(open, close) {
+  close = close.path ? close.path.original : close;
+
+  if (open.path.original !== close) {
+    var errorNode = { loc: open.path.loc };
+
+    throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode);
+  }
+}
+
+function SourceLocation(source, locInfo) {
+  this.source = source;
+  this.start = {
+    line: locInfo.first_line,
+    column: locInfo.first_column
+  };
+  this.end = {
+    line: locInfo.last_line,
+    column: locInfo.last_column
+  };
+}
+
+function id(token) {
+  if (/^\[.*\]$/.test(token)) {
+    return token.substring(1, token.length - 1);
+  } else {
+    return token;
+  }
+}
+
+function stripFlags(open, close) {
+  return {
+    open: open.charAt(2) === '~',
+    close: close.charAt(close.length - 3) === '~'
+  };
+}
+
+function stripComment(comment) {
+  return comment.replace(/^\{\{~?!-?-?/, '').replace(/-?-?~?\}\}$/, '');
+}
+
+function preparePath(data, parts, loc) {
+  loc = this.locInfo(loc);
+
+  var original = data ? '@' : '',
+      dig = [],
+      depth = 0;
+
+  for (var i = 0, l = parts.length; i < l; i++) {
+    var part = parts[i].part,
+
+    // If we have [] syntax then we do not treat path references as operators,
+    // i.e. foo.[this] resolves to approximately context.foo['this']
+    isLiteral = parts[i].original !== part;
+    original += (parts[i].separator || '') + part;
+
+    if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
+      if (dig.length > 0) {
+        throw new _exception2['default']('Invalid path: ' + original, { loc: loc });
+      } else if (part === '..') {
+        depth++;
+      }
+    } else {
+      dig.push(part);
+    }
+  }
+
+  return {
+    type: 'PathExpression',
+    data: data,
+    depth: depth,
+    parts: dig,
+    original: original,
+    loc: loc
+  };
+}
+
+function prepareMustache(path, params, hash, open, strip, locInfo) {
+  // Must use charAt to support IE pre-10
+  var escapeFlag = open.charAt(3) || open.charAt(2),
+      escaped = escapeFlag !== '{' && escapeFlag !== '&';
+
+  var decorator = /\*/.test(open);
+  return {
+    type: decorator ? 'Decorator' : 'MustacheStatement',
+    path: path,
+    params: params,
+    hash: hash,
+    escaped: escaped,
+    strip: strip,
+    loc: this.locInfo(locInfo)
+  };
+}
+
+function prepareRawBlock(openRawBlock, contents, close, locInfo) {
+  validateClose(openRawBlock, close);
+
+  locInfo = this.locInfo(locInfo);
+  var program = {
+    type: 'Program',
+    body: contents,
+    strip: {},
+    loc: locInfo
+  };
+
+  return {
+    type: 'BlockStatement',
+    path: openRawBlock.path,
+    params: openRawBlock.params,
+    hash: openRawBlock.hash,
+    program: program,
+    openStrip: {},
+    inverseStrip: {},
+    closeStrip: {},
+    loc: locInfo
+  };
+}
+
+function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
+  if (close && close.path) {
+    validateClose(openBlock, close);
+  }
+
+  var decorator = /\*/.test(openBlock.open);
+
+  program.blockParams = openBlock.blockParams;
+
+  var inverse = undefined,
+      inverseStrip = undefined;
+
+  if (inverseAndProgram) {
+    if (decorator) {
+      throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);
+    }
+
+    if (inverseAndProgram.chain) {
+      inverseAndProgram.program.body[0].closeStrip = close.strip;
+    }
+
+    inverseStrip = inverseAndProgram.strip;
+    inverse = inverseAndProgram.program;
+  }
+
+  if (inverted) {
+    inverted = inverse;
+    inverse = program;
+    program = inverted;
+  }
+
+  return {
+    type: decorator ? 'DecoratorBlock' : 'BlockStatement',
+    path: openBlock.path,
+    params: openBlock.params,
+    hash: openBlock.hash,
+    program: program,
+    inverse: inverse,
+    openStrip: openBlock.strip,
+    inverseStrip: inverseStrip,
+    closeStrip: close && close.strip,
+    loc: this.locInfo(locInfo)
+  };
+}
+
+function prepareProgram(statements, loc) {
+  if (!loc && statements.length) {
+    var firstLoc = statements[0].loc,
+        lastLoc = statements[statements.length - 1].loc;
+
+    /* istanbul ignore else */
+    if (firstLoc && lastLoc) {
+      loc = {
+        source: firstLoc.source,
+        start: {
+          line: firstLoc.start.line,
+          column: firstLoc.start.column
+        },
+        end: {
+          line: lastLoc.end.line,
+          column: lastLoc.end.column
+        }
+      };
+    }
+  }
+
+  return {
+    type: 'Program',
+    body: statements,
+    strip: {},
+    loc: loc
+  };
+}
+
+function preparePartialBlock(open, program, close, locInfo) {
+  validateClose(open, close);
+
+  return {
+    type: 'PartialBlockStatement',
+    name: open.path,
+    params: open.params,
+    hash: open.hash,
+    program: program,
+    openStrip: open.strip,
+    closeStrip: close && close.strip,
+    loc: this.locInfo(locInfo)
+  };
+}
+
+});
+
+var base$1 = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.parseWithoutProcessing = parseWithoutProcessing;
+exports.parse = parse;
+// istanbul ignore next
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
+
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _parser2 = _interopRequireDefault(parser);
+
+
+
+var _whitespaceControl2 = _interopRequireDefault(whitespaceControl);
+
+
+
+var Helpers = _interopRequireWildcard(helpers$1);
+
+
+
+exports.parser = _parser2['default'];
+
+var yy = {};
+utils$2.extend(yy, Helpers);
+
+function parseWithoutProcessing(input, options) {
+  // Just return if an already-compiled AST was passed in.
+  if (input.type === 'Program') {
+    return input;
+  }
+
+  _parser2['default'].yy = yy;
+
+  // Altering the shared object here, but this is ok as parser is a sync operation
+  yy.locInfo = function (locInfo) {
+    return new yy.SourceLocation(options && options.srcName, locInfo);
+  };
+
+  var ast = _parser2['default'].parse(input);
+
+  return ast;
+}
+
+function parse(input, options) {
+  var ast = parseWithoutProcessing(input, options);
+  var strip = new _whitespaceControl2['default'](options);
+
+  return strip.accept(ast);
+}
+
+});
+
+var compiler = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.Compiler = Compiler;
+exports.precompile = precompile;
+exports.compile = compile;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+
+
+
+
+var _ast2 = _interopRequireDefault(ast);
+
+var slice = [].slice;
+
+function Compiler() {}
+
+// the foundHelper register will disambiguate helper lookup from finding a
+// function in a context. This is necessary for mustache compatibility, which
+// requires that context functions in blocks are evaluated by blockHelperMissing,
+// and then proceed as if the resulting value was provided to blockHelperMissing.
+
+Compiler.prototype = {
+  compiler: Compiler,
+
+  equals: function equals(other) {
+    var len = this.opcodes.length;
+    if (other.opcodes.length !== len) {
+      return false;
+    }
+
+    for (var i = 0; i < len; i++) {
+      var opcode = this.opcodes[i],
+          otherOpcode = other.opcodes[i];
+      if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {
+        return false;
+      }
+    }
+
+    // We know that length is the same between the two arrays because they are directly tied
+    // to the opcode behavior above.
+    len = this.children.length;
+    for (var i = 0; i < len; i++) {
+      if (!this.children[i].equals(other.children[i])) {
+        return false;
+      }
+    }
+
+    return true;
+  },
+
+  guid: 0,
+
+  compile: function compile(program, options) {
+    this.sourceNode = [];
+    this.opcodes = [];
+    this.children = [];
+    this.options = options;
+    this.stringParams = options.stringParams;
+    this.trackIds = options.trackIds;
+
+    options.blockParams = options.blockParams || [];
+
+    options.knownHelpers = utils$2.extend(Object.create(null), {
+      helperMissing: true,
+      blockHelperMissing: true,
+      each: true,
+      'if': true,
+      unless: true,
+      'with': true,
+      log: true,
+      lookup: true
+    }, options.knownHelpers);
+
+    return this.accept(program);
+  },
+
+  compileProgram: function compileProgram(program) {
+    var childCompiler = new this.compiler(),
+        // eslint-disable-line new-cap
+    result = childCompiler.compile(program, this.options),
+        guid = this.guid++;
+
+    this.usePartial = this.usePartial || result.usePartial;
+
+    this.children[guid] = result;
+    this.useDepths = this.useDepths || result.useDepths;
+
+    return guid;
+  },
+
+  accept: function accept(node) {
+    /* istanbul ignore next: Sanity code */
+    if (!this[node.type]) {
+      throw new _exception2['default']('Unknown type: ' + node.type, node);
+    }
+
+    this.sourceNode.unshift(node);
+    var ret = this[node.type](node);
+    this.sourceNode.shift();
+    return ret;
+  },
+
+  Program: function Program(program) {
+    this.options.blockParams.unshift(program.blockParams);
+
+    var body = program.body,
+        bodyLength = body.length;
+    for (var i = 0; i < bodyLength; i++) {
+      this.accept(body[i]);
+    }
+
+    this.options.blockParams.shift();
+
+    this.isSimple = bodyLength === 1;
+    this.blockParams = program.blockParams ? program.blockParams.length : 0;
+
+    return this;
+  },
+
+  BlockStatement: function BlockStatement(block) {
+    transformLiteralToPath(block);
+
+    var program = block.program,
+        inverse = block.inverse;
+
+    program = program && this.compileProgram(program);
+    inverse = inverse && this.compileProgram(inverse);
+
+    var type = this.classifySexpr(block);
+
+    if (type === 'helper') {
+      this.helperSexpr(block, program, inverse);
+    } else if (type === 'simple') {
+      this.simpleSexpr(block);
+
+      // now that the simple mustache is resolved, we need to
+      // evaluate it by executing `blockHelperMissing`
+      this.opcode('pushProgram', program);
+      this.opcode('pushProgram', inverse);
+      this.opcode('emptyHash');
+      this.opcode('blockValue', block.path.original);
+    } else {
+      this.ambiguousSexpr(block, program, inverse);
+
+      // now that the simple mustache is resolved, we need to
+      // evaluate it by executing `blockHelperMissing`
+      this.opcode('pushProgram', program);
+      this.opcode('pushProgram', inverse);
+      this.opcode('emptyHash');
+      this.opcode('ambiguousBlockValue');
+    }
+
+    this.opcode('append');
+  },
+
+  DecoratorBlock: function DecoratorBlock(decorator) {
+    var program = decorator.program && this.compileProgram(decorator.program);
+    var params = this.setupFullMustacheParams(decorator, program, undefined),
+        path = decorator.path;
+
+    this.useDecorators = true;
+    this.opcode('registerDecorator', params.length, path.original);
+  },
+
+  PartialStatement: function PartialStatement(partial) {
+    this.usePartial = true;
+
+    var program = partial.program;
+    if (program) {
+      program = this.compileProgram(partial.program);
+    }
+
+    var params = partial.params;
+    if (params.length > 1) {
+      throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);
+    } else if (!params.length) {
+      if (this.options.explicitPartialContext) {
+        this.opcode('pushLiteral', 'undefined');
+      } else {
+        params.push({ type: 'PathExpression', parts: [], depth: 0 });
+      }
+    }
+
+    var partialName = partial.name.original,
+        isDynamic = partial.name.type === 'SubExpression';
+    if (isDynamic) {
+      this.accept(partial.name);
+    }
+
+    this.setupFullMustacheParams(partial, program, undefined, true);
+
+    var indent = partial.indent || '';
+    if (this.options.preventIndent && indent) {
+      this.opcode('appendContent', indent);
+      indent = '';
+    }
+
+    this.opcode('invokePartial', isDynamic, partialName, indent);
+    this.opcode('append');
+  },
+  PartialBlockStatement: function PartialBlockStatement(partialBlock) {
+    this.PartialStatement(partialBlock);
+  },
+
+  MustacheStatement: function MustacheStatement(mustache) {
+    this.SubExpression(mustache);
+
+    if (mustache.escaped && !this.options.noEscape) {
+      this.opcode('appendEscaped');
+    } else {
+      this.opcode('append');
+    }
+  },
+  Decorator: function Decorator(decorator) {
+    this.DecoratorBlock(decorator);
+  },
+
+  ContentStatement: function ContentStatement(content) {
+    if (content.value) {
+      this.opcode('appendContent', content.value);
+    }
+  },
+
+  CommentStatement: function CommentStatement() {},
+
+  SubExpression: function SubExpression(sexpr) {
+    transformLiteralToPath(sexpr);
+    var type = this.classifySexpr(sexpr);
+
+    if (type === 'simple') {
+      this.simpleSexpr(sexpr);
+    } else if (type === 'helper') {
+      this.helperSexpr(sexpr);
+    } else {
+      this.ambiguousSexpr(sexpr);
+    }
+  },
+  ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {
+    var path = sexpr.path,
+        name = path.parts[0],
+        isBlock = program != null || inverse != null;
+
+    this.opcode('getContext', path.depth);
+
+    this.opcode('pushProgram', program);
+    this.opcode('pushProgram', inverse);
+
+    path.strict = true;
+    this.accept(path);
+
+    this.opcode('invokeAmbiguous', name, isBlock);
+  },
+
+  simpleSexpr: function simpleSexpr(sexpr) {
+    var path = sexpr.path;
+    path.strict = true;
+    this.accept(path);
+    this.opcode('resolvePossibleLambda');
+  },
+
+  helperSexpr: function helperSexpr(sexpr, program, inverse) {
+    var params = this.setupFullMustacheParams(sexpr, program, inverse),
+        path = sexpr.path,
+        name = path.parts[0];
+
+    if (this.options.knownHelpers[name]) {
+      this.opcode('invokeKnownHelper', params.length, name);
+    } else if (this.options.knownHelpersOnly) {
+      throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);
+    } else {
+      path.strict = true;
+      path.falsy = true;
+
+      this.accept(path);
+      this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));
+    }
+  },
+
+  PathExpression: function PathExpression(path) {
+    this.addDepth(path.depth);
+    this.opcode('getContext', path.depth);
+
+    var name = path.parts[0],
+        scoped = _ast2['default'].helpers.scopedId(path),
+        blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
+
+    if (blockParamId) {
+      this.opcode('lookupBlockParam', blockParamId, path.parts);
+    } else if (!name) {
+      // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`
+      this.opcode('pushContext');
+    } else if (path.data) {
+      this.options.data = true;
+      this.opcode('lookupData', path.depth, path.parts, path.strict);
+    } else {
+      this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);
+    }
+  },
+
+  StringLiteral: function StringLiteral(string) {
+    this.opcode('pushString', string.value);
+  },
+
+  NumberLiteral: function NumberLiteral(number) {
+    this.opcode('pushLiteral', number.value);
+  },
+
+  BooleanLiteral: function BooleanLiteral(bool) {
+    this.opcode('pushLiteral', bool.value);
+  },
+
+  UndefinedLiteral: function UndefinedLiteral() {
+    this.opcode('pushLiteral', 'undefined');
+  },
+
+  NullLiteral: function NullLiteral() {
+    this.opcode('pushLiteral', 'null');
+  },
+
+  Hash: function Hash(hash) {
+    var pairs = hash.pairs,
+        i = 0,
+        l = pairs.length;
+
+    this.opcode('pushHash');
+
+    for (; i < l; i++) {
+      this.pushParam(pairs[i].value);
+    }
+    while (i--) {
+      this.opcode('assignToHash', pairs[i].key);
+    }
+    this.opcode('popHash');
+  },
+
+  // HELPERS
+  opcode: function opcode(name) {
+    this.opcodes.push({
+      opcode: name,
+      args: slice.call(arguments, 1),
+      loc: this.sourceNode[0].loc
+    });
+  },
+
+  addDepth: function addDepth(depth) {
+    if (!depth) {
+      return;
+    }
+
+    this.useDepths = true;
+  },
+
+  classifySexpr: function classifySexpr(sexpr) {
+    var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);
+
+    var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);
+
+    // a mustache is an eligible helper if:
+    // * its id is simple (a single part, not `this` or `..`)
+    var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);
+
+    // if a mustache is an eligible helper but not a definite
+    // helper, it is ambiguous, and will be resolved in a later
+    // pass or at runtime.
+    var isEligible = !isBlockParam && (isHelper || isSimple);
+
+    // if ambiguous, we can possibly resolve the ambiguity now
+    // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.
+    if (isEligible && !isHelper) {
+      var _name = sexpr.path.parts[0],
+          options = this.options;
+      if (options.knownHelpers[_name]) {
+        isHelper = true;
+      } else if (options.knownHelpersOnly) {
+        isEligible = false;
+      }
+    }
+
+    if (isHelper) {
+      return 'helper';
+    } else if (isEligible) {
+      return 'ambiguous';
+    } else {
+      return 'simple';
+    }
+  },
+
+  pushParams: function pushParams(params) {
+    for (var i = 0, l = params.length; i < l; i++) {
+      this.pushParam(params[i]);
+    }
+  },
+
+  pushParam: function pushParam(val) {
+    var value = val.value != null ? val.value : val.original || '';
+
+    if (this.stringParams) {
+      if (value.replace) {
+        value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.');
+      }
+
+      if (val.depth) {
+        this.addDepth(val.depth);
+      }
+      this.opcode('getContext', val.depth || 0);
+      this.opcode('pushStringParam', value, val.type);
+
+      if (val.type === 'SubExpression') {
+        // SubExpressions get evaluated and passed in
+        // in string params mode.
+        this.accept(val);
+      }
+    } else {
+      if (this.trackIds) {
+        var blockParamIndex = undefined;
+        if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {
+          blockParamIndex = this.blockParamIndex(val.parts[0]);
+        }
+        if (blockParamIndex) {
+          var blockParamChild = val.parts.slice(1).join('.');
+          this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
+        } else {
+          value = val.original || value;
+          if (value.replace) {
+            value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, '');
+          }
+
+          this.opcode('pushId', val.type, value);
+        }
+      }
+      this.accept(val);
+    }
+  },
+
+  setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {
+    var params = sexpr.params;
+    this.pushParams(params);
+
+    this.opcode('pushProgram', program);
+    this.opcode('pushProgram', inverse);
+
+    if (sexpr.hash) {
+      this.accept(sexpr.hash);
+    } else {
+      this.opcode('emptyHash', omitEmpty);
+    }
+
+    return params;
+  },
+
+  blockParamIndex: function blockParamIndex(name) {
+    for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {
+      var blockParams = this.options.blockParams[depth],
+          param = blockParams && utils$2.indexOf(blockParams, name);
+      if (blockParams && param >= 0) {
+        return [depth, param];
+      }
+    }
+  }
+};
+
+function precompile(input, options, env) {
+  if (input == null || typeof input !== 'string' && input.type !== 'Program') {
+    throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);
+  }
+
+  options = options || {};
+  if (!('data' in options)) {
+    options.data = true;
+  }
+  if (options.compat) {
+    options.useDepths = true;
+  }
+
+  var ast = env.parse(input, options),
+      environment = new env.Compiler().compile(ast, options);
+  return new env.JavaScriptCompiler().compile(environment, options);
+}
+
+function compile(input, options, env) {
+  if (options === undefined) options = {};
+
+  if (input == null || typeof input !== 'string' && input.type !== 'Program') {
+    throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);
+  }
+
+  options = utils$2.extend({}, options);
+  if (!('data' in options)) {
+    options.data = true;
+  }
+  if (options.compat) {
+    options.useDepths = true;
+  }
+
+  var compiled = undefined;
+
+  function compileInput() {
+    var ast = env.parse(input, options),
+        environment = new env.Compiler().compile(ast, options),
+        templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
+    return env.template(templateSpec);
+  }
+
+  // Template is only compiled on first use and cached after that point.
+  function ret(context, execOptions) {
+    if (!compiled) {
+      compiled = compileInput();
+    }
+    return compiled.call(this, context, execOptions);
+  }
+  ret._setup = function (setupOptions) {
+    if (!compiled) {
+      compiled = compileInput();
+    }
+    return compiled._setup(setupOptions);
+  };
+  ret._child = function (i, data, blockParams, depths) {
+    if (!compiled) {
+      compiled = compileInput();
+    }
+    return compiled._child(i, data, blockParams, depths);
+  };
+  return ret;
+}
+
+function argEquals(a, b) {
+  if (a === b) {
+    return true;
+  }
+
+  if (utils$2.isArray(a) && utils$2.isArray(b) && a.length === b.length) {
+    for (var i = 0; i < a.length; i++) {
+      if (!argEquals(a[i], b[i])) {
+        return false;
+      }
+    }
+    return true;
+  }
+}
+
+function transformLiteralToPath(sexpr) {
+  if (!sexpr.path.parts) {
+    var literal = sexpr.path;
+    // Casting to string here to make false and 0 literal values play nicely with the rest
+    // of the system.
+    sexpr.path = {
+      type: 'PathExpression',
+      data: false,
+      depth: 0,
+      parts: [literal.original + ''],
+      original: literal.original + '',
+      loc: literal.loc
+    };
+  }
+}
+
+});
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+/**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+var encode = function (number) {
+  if (0 <= number && number < intToCharMap.length) {
+    return intToCharMap[number];
+  }
+  throw new TypeError("Must be between 0 and 63: " + number);
+};
+
+/**
+ * Decode a single base 64 character code digit to an integer. Returns -1 on
+ * failure.
+ */
+var decode = function (charCode) {
+  var bigA = 65;     // 'A'
+  var bigZ = 90;     // 'Z'
+
+  var littleA = 97;  // 'a'
+  var littleZ = 122; // 'z'
+
+  var zero = 48;     // '0'
+  var nine = 57;     // '9'
+
+  var plus = 43;     // '+'
+  var slash = 47;    // '/'
+
+  var littleOffset = 26;
+  var numberOffset = 52;
+
+  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+  if (bigA <= charCode && charCode <= bigZ) {
+    return (charCode - bigA);
+  }
+
+  // 26 - 51: abcdefghijklmnopqrstuvwxyz
+  if (littleA <= charCode && charCode <= littleZ) {
+    return (charCode - littleA + littleOffset);
+  }
+
+  // 52 - 61: 0123456789
+  if (zero <= charCode && charCode <= nine) {
+    return (charCode - zero + numberOffset);
+  }
+
+  // 62: +
+  if (charCode == plus) {
+    return 62;
+  }
+
+  // 63: /
+  if (charCode == slash) {
+    return 63;
+  }
+
+  // Invalid base64 digit.
+  return -1;
+};
+
+var base64 = {
+	encode: encode,
+	decode: decode
+};
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *  * Neither the name of Google Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+
+// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+// length quantities we use in the source map spec, the first bit is the sign,
+// the next four bits are the actual value, and the 6th bit is the
+// continuation bit. The continuation bit tells us whether there are more
+// digits in this value following this digit.
+//
+//   Continuation
+//   |    Sign
+//   |    |
+//   V    V
+//   101011
+
+var VLQ_BASE_SHIFT = 5;
+
+// binary: 100000
+var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+// binary: 011111
+var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+// binary: 100000
+var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+/**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit.  For example, as decimals:
+ *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+function toVLQSigned(aValue) {
+  return aValue < 0
+    ? ((-aValue) << 1) + 1
+    : (aValue << 1) + 0;
+}
+
+/**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit.  For example, as decimals:
+ *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+function fromVLQSigned(aValue) {
+  var isNegative = (aValue & 1) === 1;
+  var shifted = aValue >> 1;
+  return isNegative
+    ? -shifted
+    : shifted;
+}
+
+/**
+ * Returns the base 64 VLQ encoded value.
+ */
+var encode$1 = function base64VLQ_encode(aValue) {
+  var encoded = "";
+  var digit;
+
+  var vlq = toVLQSigned(aValue);
+
+  do {
+    digit = vlq & VLQ_BASE_MASK;
+    vlq >>>= VLQ_BASE_SHIFT;
+    if (vlq > 0) {
+      // There are still more digits in this value, so we must make sure the
+      // continuation bit is marked.
+      digit |= VLQ_CONTINUATION_BIT;
+    }
+    encoded += base64.encode(digit);
+  } while (vlq > 0);
+
+  return encoded;
+};
+
+/**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+var decode$1 = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+  var strLen = aStr.length;
+  var result = 0;
+  var shift = 0;
+  var continuation, digit;
+
+  do {
+    if (aIndex >= strLen) {
+      throw new Error("Expected more digits in base 64 VLQ value.");
+    }
+
+    digit = base64.decode(aStr.charCodeAt(aIndex++));
+    if (digit === -1) {
+      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+    }
+
+    continuation = !!(digit & VLQ_CONTINUATION_BIT);
+    digit &= VLQ_BASE_MASK;
+    result = result + (digit << shift);
+    shift += VLQ_BASE_SHIFT;
+  } while (continuation);
+
+  aOutParam.value = fromVLQSigned(result);
+  aOutParam.rest = aIndex;
+};
+
+var base64Vlq = {
+	encode: encode$1,
+	decode: decode$1
+};
+
+var util = createCommonjsModule(function (module, exports) {
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+function getArg(aArgs, aName, aDefaultValue) {
+  if (aName in aArgs) {
+    return aArgs[aName];
+  } else if (arguments.length === 3) {
+    return aDefaultValue;
+  } else {
+    throw new Error('"' + aName + '" is a required argument.');
+  }
+}
+exports.getArg = getArg;
+
+var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
+var dataUrlRegexp = /^data:.+\,.+$/;
+
+function urlParse(aUrl) {
+  var match = aUrl.match(urlRegexp);
+  if (!match) {
+    return null;
+  }
+  return {
+    scheme: match[1],
+    auth: match[2],
+    host: match[3],
+    port: match[4],
+    path: match[5]
+  };
+}
+exports.urlParse = urlParse;
+
+function urlGenerate(aParsedUrl) {
+  var url = '';
+  if (aParsedUrl.scheme) {
+    url += aParsedUrl.scheme + ':';
+  }
+  url += '//';
+  if (aParsedUrl.auth) {
+    url += aParsedUrl.auth + '@';
+  }
+  if (aParsedUrl.host) {
+    url += aParsedUrl.host;
+  }
+  if (aParsedUrl.port) {
+    url += ":" + aParsedUrl.port;
+  }
+  if (aParsedUrl.path) {
+    url += aParsedUrl.path;
+  }
+  return url;
+}
+exports.urlGenerate = urlGenerate;
+
+/**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consecutive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+function normalize(aPath) {
+  var path = aPath;
+  var url = urlParse(aPath);
+  if (url) {
+    if (!url.path) {
+      return aPath;
+    }
+    path = url.path;
+  }
+  var isAbsolute = exports.isAbsolute(path);
+
+  var parts = path.split(/\/+/);
+  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+    part = parts[i];
+    if (part === '.') {
+      parts.splice(i, 1);
+    } else if (part === '..') {
+      up++;
+    } else if (up > 0) {
+      if (part === '') {
+        // The first part is blank if the path is absolute. Trying to go
+        // above the root is a no-op. Therefore we can remove all '..' parts
+        // directly after the root.
+        parts.splice(i + 1, up);
+        up = 0;
+      } else {
+        parts.splice(i, 2);
+        up--;
+      }
+    }
+  }
+  path = parts.join('/');
+
+  if (path === '') {
+    path = isAbsolute ? '/' : '.';
+  }
+
+  if (url) {
+    url.path = path;
+    return urlGenerate(url);
+  }
+  return path;
+}
+exports.normalize = normalize;
+
+/**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ *   first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ *   is updated with the result and aRoot is returned. Otherwise the result
+ *   is returned.
+ *   - If aPath is absolute, the result is aPath.
+ *   - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+function join(aRoot, aPath) {
+  if (aRoot === "") {
+    aRoot = ".";
+  }
+  if (aPath === "") {
+    aPath = ".";
+  }
+  var aPathUrl = urlParse(aPath);
+  var aRootUrl = urlParse(aRoot);
+  if (aRootUrl) {
+    aRoot = aRootUrl.path || '/';
+  }
+
+  // `join(foo, '//www.example.org')`
+  if (aPathUrl && !aPathUrl.scheme) {
+    if (aRootUrl) {
+      aPathUrl.scheme = aRootUrl.scheme;
+    }
+    return urlGenerate(aPathUrl);
+  }
+
+  if (aPathUrl || aPath.match(dataUrlRegexp)) {
+    return aPath;
+  }
+
+  // `join('http://', 'www.example.com')`
+  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+    aRootUrl.host = aPath;
+    return urlGenerate(aRootUrl);
+  }
+
+  var joined = aPath.charAt(0) === '/'
+    ? aPath
+    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+  if (aRootUrl) {
+    aRootUrl.path = joined;
+    return urlGenerate(aRootUrl);
+  }
+  return joined;
+}
+exports.join = join;
+
+exports.isAbsolute = function (aPath) {
+  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
+};
+
+/**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+function relative(aRoot, aPath) {
+  if (aRoot === "") {
+    aRoot = ".";
+  }
+
+  aRoot = aRoot.replace(/\/$/, '');
+
+  // It is possible for the path to be above the root. In this case, simply
+  // checking whether the root is a prefix of the path won't work. Instead, we
+  // need to remove components from the root one by one, until either we find
+  // a prefix that fits, or we run out of components to remove.
+  var level = 0;
+  while (aPath.indexOf(aRoot + '/') !== 0) {
+    var index = aRoot.lastIndexOf("/");
+    if (index < 0) {
+      return aPath;
+    }
+
+    // If the only part of the root that is left is the scheme (i.e. http://,
+    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+    // have exhausted all components, so the path is not relative to the root.
+    aRoot = aRoot.slice(0, index);
+    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+      return aPath;
+    }
+
+    ++level;
+  }
+
+  // Make sure we add a "../" for each component we removed from the root.
+  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+}
+exports.relative = relative;
+
+var supportsNullProto = (function () {
+  var obj = Object.create(null);
+  return !('__proto__' in obj);
+}());
+
+function identity (s) {
+  return s;
+}
+
+/**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+function toSetString(aStr) {
+  if (isProtoString(aStr)) {
+    return '$' + aStr;
+  }
+
+  return aStr;
+}
+exports.toSetString = supportsNullProto ? identity : toSetString;
+
+function fromSetString(aStr) {
+  if (isProtoString(aStr)) {
+    return aStr.slice(1);
+  }
+
+  return aStr;
+}
+exports.fromSetString = supportsNullProto ? identity : fromSetString;
+
+function isProtoString(s) {
+  if (!s) {
+    return false;
+  }
+
+  var length = s.length;
+
+  if (length < 9 /* "__proto__".length */) {
+    return false;
+  }
+
+  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 9) !== 95  /* '_' */) {
+    return false;
+  }
+
+  for (var i = length - 10; i >= 0; i--) {
+    if (s.charCodeAt(i) !== 36 /* '$' */) {
+      return false;
+    }
+  }
+
+  return true;
+}
+
+/**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+  var cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0 || onlyCompareOriginal) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByOriginalPositions = compareByOriginalPositions;
+
+/**
+ * Comparator between two mappings with deflated source and name indices where
+ * the generated positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0 || onlyCompareGenerated) {
+    return cmp;
+  }
+
+  cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+
+function strcmp(aStr1, aStr2) {
+  if (aStr1 === aStr2) {
+    return 0;
+  }
+
+  if (aStr1 === null) {
+    return 1; // aStr2 !== null
+  }
+
+  if (aStr2 === null) {
+    return -1; // aStr1 !== null
+  }
+
+  if (aStr1 > aStr2) {
+    return 1;
+  }
+
+  return -1;
+}
+
+/**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
+
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
+
+/**
+ * Strip any JSON XSSI avoidance prefix from the string (as documented
+ * in the source maps specification), and then parse the string as
+ * JSON.
+ */
+function parseSourceMapInput(str) {
+  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
+}
+exports.parseSourceMapInput = parseSourceMapInput;
+
+/**
+ * Compute the URL of a source given the the source root, the source's
+ * URL, and the source map's URL.
+ */
+function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
+  sourceURL = sourceURL || '';
+
+  if (sourceRoot) {
+    // This follows what Chrome does.
+    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
+      sourceRoot += '/';
+    }
+    // The spec says:
+    //   Line 4: An optional source root, useful for relocating source
+    //   files on a server or removing repeated values in the
+    //   “sources” entry.  This value is prepended to the individual
+    //   entries in the “source” field.
+    sourceURL = sourceRoot + sourceURL;
+  }
+
+  // Historically, SourceMapConsumer did not take the sourceMapURL as
+  // a parameter.  This mode is still somewhat supported, which is why
+  // this code block is conditional.  However, it's preferable to pass
+  // the source map URL to SourceMapConsumer, so that this function
+  // can implement the source URL resolution algorithm as outlined in
+  // the spec.  This block is basically the equivalent of:
+  //    new URL(sourceURL, sourceMapURL).toString()
+  // ... except it avoids using URL, which wasn't available in the
+  // older releases of node still supported by this library.
+  //
+  // The spec says:
+  //   If the sources are not absolute URLs after prepending of the
+  //   “sourceRoot”, the sources are resolved relative to the
+  //   SourceMap (like resolving script src in a html document).
+  if (sourceMapURL) {
+    var parsed = urlParse(sourceMapURL);
+    if (!parsed) {
+      throw new Error("sourceMapURL could not be parsed");
+    }
+    if (parsed.path) {
+      // Strip the last path component, but keep the "/".
+      var index = parsed.path.lastIndexOf('/');
+      if (index >= 0) {
+        parsed.path = parsed.path.substring(0, index + 1);
+      }
+    }
+    sourceURL = join(urlGenerate(parsed), sourceURL);
+  }
+
+  return normalize(sourceURL);
+}
+exports.computeSourceURL = computeSourceURL;
+});
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+
+var has = Object.prototype.hasOwnProperty;
+var hasNativeMap = typeof Map !== "undefined";
+
+/**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+function ArraySet() {
+  this._array = [];
+  this._set = hasNativeMap ? new Map() : Object.create(null);
+}
+
+/**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+  var set = new ArraySet();
+  for (var i = 0, len = aArray.length; i < len; i++) {
+    set.add(aArray[i], aAllowDuplicates);
+  }
+  return set;
+};
+
+/**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ArraySet.prototype.size = function ArraySet_size() {
+  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+};
+
+/**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+  var idx = this._array.length;
+  if (!isDuplicate || aAllowDuplicates) {
+    this._array.push(aStr);
+  }
+  if (!isDuplicate) {
+    if (hasNativeMap) {
+      this._set.set(aStr, idx);
+    } else {
+      this._set[sStr] = idx;
+    }
+  }
+};
+
+/**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.has = function ArraySet_has(aStr) {
+  if (hasNativeMap) {
+    return this._set.has(aStr);
+  } else {
+    var sStr = util.toSetString(aStr);
+    return has.call(this._set, sStr);
+  }
+};
+
+/**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+  if (hasNativeMap) {
+    var idx = this._set.get(aStr);
+    if (idx >= 0) {
+        return idx;
+    }
+  } else {
+    var sStr = util.toSetString(aStr);
+    if (has.call(this._set, sStr)) {
+      return this._set[sStr];
+    }
+  }
+
+  throw new Error('"' + aStr + '" is not in the set.');
+};
+
+/**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ArraySet.prototype.at = function ArraySet_at(aIdx) {
+  if (aIdx >= 0 && aIdx < this._array.length) {
+    return this._array[aIdx];
+  }
+  throw new Error('No element indexed by ' + aIdx);
+};
+
+/**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ArraySet.prototype.toArray = function ArraySet_toArray() {
+  return this._array.slice();
+};
+
+var ArraySet_1 = ArraySet;
+
+var arraySet = {
+	ArraySet: ArraySet_1
+};
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+
+
+/**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+function generatedPositionAfter(mappingA, mappingB) {
+  // Optimized for most common case
+  var lineA = mappingA.generatedLine;
+  var lineB = mappingB.generatedLine;
+  var columnA = mappingA.generatedColumn;
+  var columnB = mappingB.generatedColumn;
+  return lineB > lineA || lineB == lineA && columnB >= columnA ||
+         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+}
+
+/**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+function MappingList() {
+  this._array = [];
+  this._sorted = true;
+  // Serves as infimum
+  this._last = {generatedLine: -1, generatedColumn: 0};
+}
+
+/**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+MappingList.prototype.unsortedForEach =
+  function MappingList_forEach(aCallback, aThisArg) {
+    this._array.forEach(aCallback, aThisArg);
+  };
+
+/**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+MappingList.prototype.add = function MappingList_add(aMapping) {
+  if (generatedPositionAfter(this._last, aMapping)) {
+    this._last = aMapping;
+    this._array.push(aMapping);
+  } else {
+    this._sorted = false;
+    this._array.push(aMapping);
+  }
+};
+
+/**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+MappingList.prototype.toArray = function MappingList_toArray() {
+  if (!this._sorted) {
+    this._array.sort(util.compareByGeneratedPositionsInflated);
+    this._sorted = true;
+  }
+  return this._array;
+};
+
+var MappingList_1 = MappingList;
+
+var mappingList = {
+	MappingList: MappingList_1
+};
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+
+
+var ArraySet$1 = arraySet.ArraySet;
+var MappingList$1 = mappingList.MappingList;
+
+/**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ *   - file: The filename of the generated source.
+ *   - sourceRoot: A root for all relative URLs in this source map.
+ */
+function SourceMapGenerator(aArgs) {
+  if (!aArgs) {
+    aArgs = {};
+  }
+  this._file = util.getArg(aArgs, 'file', null);
+  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+  this._sources = new ArraySet$1();
+  this._names = new ArraySet$1();
+  this._mappings = new MappingList$1();
+  this._sourcesContents = null;
+}
+
+SourceMapGenerator.prototype._version = 3;
+
+/**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+SourceMapGenerator.fromSourceMap =
+  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+    var sourceRoot = aSourceMapConsumer.sourceRoot;
+    var generator = new SourceMapGenerator({
+      file: aSourceMapConsumer.file,
+      sourceRoot: sourceRoot
+    });
+    aSourceMapConsumer.eachMapping(function (mapping) {
+      var newMapping = {
+        generated: {
+          line: mapping.generatedLine,
+          column: mapping.generatedColumn
+        }
+      };
+
+      if (mapping.source != null) {
+        newMapping.source = mapping.source;
+        if (sourceRoot != null) {
+          newMapping.source = util.relative(sourceRoot, newMapping.source);
+        }
+
+        newMapping.original = {
+          line: mapping.originalLine,
+          column: mapping.originalColumn
+        };
+
+        if (mapping.name != null) {
+          newMapping.name = mapping.name;
+        }
+      }
+
+      generator.addMapping(newMapping);
+    });
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var sourceRelative = sourceFile;
+      if (sourceRoot !== null) {
+        sourceRelative = util.relative(sourceRoot, sourceFile);
+      }
+
+      if (!generator._sources.has(sourceRelative)) {
+        generator._sources.add(sourceRelative);
+      }
+
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        generator.setSourceContent(sourceFile, content);
+      }
+    });
+    return generator;
+  };
+
+/**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ *   - generated: An object with the generated line and column positions.
+ *   - original: An object with the original line and column positions.
+ *   - source: The original source file (relative to the sourceRoot).
+ *   - name: An optional original token name for this mapping.
+ */
+SourceMapGenerator.prototype.addMapping =
+  function SourceMapGenerator_addMapping(aArgs) {
+    var generated = util.getArg(aArgs, 'generated');
+    var original = util.getArg(aArgs, 'original', null);
+    var source = util.getArg(aArgs, 'source', null);
+    var name = util.getArg(aArgs, 'name', null);
+
+    if (!this._skipValidation) {
+      this._validateMapping(generated, original, source, name);
+    }
+
+    if (source != null) {
+      source = String(source);
+      if (!this._sources.has(source)) {
+        this._sources.add(source);
+      }
+    }
+
+    if (name != null) {
+      name = String(name);
+      if (!this._names.has(name)) {
+        this._names.add(name);
+      }
+    }
+
+    this._mappings.add({
+      generatedLine: generated.line,
+      generatedColumn: generated.column,
+      originalLine: original != null && original.line,
+      originalColumn: original != null && original.column,
+      source: source,
+      name: name
+    });
+  };
+
+/**
+ * Set the source content for a source file.
+ */
+SourceMapGenerator.prototype.setSourceContent =
+  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+    var source = aSourceFile;
+    if (this._sourceRoot != null) {
+      source = util.relative(this._sourceRoot, source);
+    }
+
+    if (aSourceContent != null) {
+      // Add the source content to the _sourcesContents map.
+      // Create a new _sourcesContents map if the property is null.
+      if (!this._sourcesContents) {
+        this._sourcesContents = Object.create(null);
+      }
+      this._sourcesContents[util.toSetString(source)] = aSourceContent;
+    } else if (this._sourcesContents) {
+      // Remove the source file from the _sourcesContents map.
+      // If the _sourcesContents map is empty, set the property to null.
+      delete this._sourcesContents[util.toSetString(source)];
+      if (Object.keys(this._sourcesContents).length === 0) {
+        this._sourcesContents = null;
+      }
+    }
+  };
+
+/**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ *        If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ *        to be applied. If relative, it is relative to the SourceMapConsumer.
+ *        This parameter is needed when the two source maps aren't in the same
+ *        directory, and the source map to be applied contains relative source
+ *        paths. If so, those relative source paths need to be rewritten
+ *        relative to the SourceMapGenerator.
+ */
+SourceMapGenerator.prototype.applySourceMap =
+  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+    var sourceFile = aSourceFile;
+    // If aSourceFile is omitted, we will use the file property of the SourceMap
+    if (aSourceFile == null) {
+      if (aSourceMapConsumer.file == null) {
+        throw new Error(
+          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+          'or the source map\'s "file" property. Both were omitted.'
+        );
+      }
+      sourceFile = aSourceMapConsumer.file;
+    }
+    var sourceRoot = this._sourceRoot;
+    // Make "sourceFile" relative if an absolute Url is passed.
+    if (sourceRoot != null) {
+      sourceFile = util.relative(sourceRoot, sourceFile);
+    }
+    // Applying the SourceMap can add and remove items from the sources and
+    // the names array.
+    var newSources = new ArraySet$1();
+    var newNames = new ArraySet$1();
+
+    // Find mappings for the "sourceFile"
+    this._mappings.unsortedForEach(function (mapping) {
+      if (mapping.source === sourceFile && mapping.originalLine != null) {
+        // Check if it can be mapped by the source map, then update the mapping.
+        var original = aSourceMapConsumer.originalPositionFor({
+          line: mapping.originalLine,
+          column: mapping.originalColumn
+        });
+        if (original.source != null) {
+          // Copy mapping
+          mapping.source = original.source;
+          if (aSourceMapPath != null) {
+            mapping.source = util.join(aSourceMapPath, mapping.source);
+          }
+          if (sourceRoot != null) {
+            mapping.source = util.relative(sourceRoot, mapping.source);
+          }
+          mapping.originalLine = original.line;
+          mapping.originalColumn = original.column;
+          if (original.name != null) {
+            mapping.name = original.name;
+          }
+        }
+      }
+
+      var source = mapping.source;
+      if (source != null && !newSources.has(source)) {
+        newSources.add(source);
+      }
+
+      var name = mapping.name;
+      if (name != null && !newNames.has(name)) {
+        newNames.add(name);
+      }
+
+    }, this);
+    this._sources = newSources;
+    this._names = newNames;
+
+    // Copy sourcesContents of applied map.
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        if (aSourceMapPath != null) {
+          sourceFile = util.join(aSourceMapPath, sourceFile);
+        }
+        if (sourceRoot != null) {
+          sourceFile = util.relative(sourceRoot, sourceFile);
+        }
+        this.setSourceContent(sourceFile, content);
+      }
+    }, this);
+  };
+
+/**
+ * A mapping can have one of the three levels of data:
+ *
+ *   1. Just the generated position.
+ *   2. The Generated position, original position, and original source.
+ *   3. Generated and original position, original source, as well as a name
+ *      token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+SourceMapGenerator.prototype._validateMapping =
+  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+                                              aName) {
+    // When aOriginal is truthy but has empty values for .line and .column,
+    // it is most likely a programmer error. In this case we throw a very
+    // specific error message to try to guide them the right way.
+    // For example: https://github.com/Polymer/polymer-bundler/pull/519
+    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
+        throw new Error(
+            'original.line and original.column are not numbers -- you probably meant to omit ' +
+            'the original mapping entirely and only map the generated position. If so, pass ' +
+            'null for the original mapping instead of an object with empty or null values.'
+        );
+    }
+
+    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+        && aGenerated.line > 0 && aGenerated.column >= 0
+        && !aOriginal && !aSource && !aName) {
+      // Case 1.
+      return;
+    }
+    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+             && aGenerated.line > 0 && aGenerated.column >= 0
+             && aOriginal.line > 0 && aOriginal.column >= 0
+             && aSource) {
+      // Cases 2 and 3.
+      return;
+    }
+    else {
+      throw new Error('Invalid mapping: ' + JSON.stringify({
+        generated: aGenerated,
+        source: aSource,
+        original: aOriginal,
+        name: aName
+      }));
+    }
+  };
+
+/**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+SourceMapGenerator.prototype._serializeMappings =
+  function SourceMapGenerator_serializeMappings() {
+    var previousGeneratedColumn = 0;
+    var previousGeneratedLine = 1;
+    var previousOriginalColumn = 0;
+    var previousOriginalLine = 0;
+    var previousName = 0;
+    var previousSource = 0;
+    var result = '';
+    var next;
+    var mapping;
+    var nameIdx;
+    var sourceIdx;
+
+    var mappings = this._mappings.toArray();
+    for (var i = 0, len = mappings.length; i < len; i++) {
+      mapping = mappings[i];
+      next = '';
+
+      if (mapping.generatedLine !== previousGeneratedLine) {
+        previousGeneratedColumn = 0;
+        while (mapping.generatedLine !== previousGeneratedLine) {
+          next += ';';
+          previousGeneratedLine++;
+        }
+      }
+      else {
+        if (i > 0) {
+          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+            continue;
+          }
+          next += ',';
+        }
+      }
+
+      next += base64Vlq.encode(mapping.generatedColumn
+                                 - previousGeneratedColumn);
+      previousGeneratedColumn = mapping.generatedColumn;
+
+      if (mapping.source != null) {
+        sourceIdx = this._sources.indexOf(mapping.source);
+        next += base64Vlq.encode(sourceIdx - previousSource);
+        previousSource = sourceIdx;
+
+        // lines are stored 0-based in SourceMap spec version 3
+        next += base64Vlq.encode(mapping.originalLine - 1
+                                   - previousOriginalLine);
+        previousOriginalLine = mapping.originalLine - 1;
+
+        next += base64Vlq.encode(mapping.originalColumn
+                                   - previousOriginalColumn);
+        previousOriginalColumn = mapping.originalColumn;
+
+        if (mapping.name != null) {
+          nameIdx = this._names.indexOf(mapping.name);
+          next += base64Vlq.encode(nameIdx - previousName);
+          previousName = nameIdx;
+        }
+      }
+
+      result += next;
+    }
+
+    return result;
+  };
+
+SourceMapGenerator.prototype._generateSourcesContent =
+  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+    return aSources.map(function (source) {
+      if (!this._sourcesContents) {
+        return null;
+      }
+      if (aSourceRoot != null) {
+        source = util.relative(aSourceRoot, source);
+      }
+      var key = util.toSetString(source);
+      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+        ? this._sourcesContents[key]
+        : null;
+    }, this);
+  };
+
+/**
+ * Externalize the source map.
+ */
+SourceMapGenerator.prototype.toJSON =
+  function SourceMapGenerator_toJSON() {
+    var map = {
+      version: this._version,
+      sources: this._sources.toArray(),
+      names: this._names.toArray(),
+      mappings: this._serializeMappings()
+    };
+    if (this._file != null) {
+      map.file = this._file;
+    }
+    if (this._sourceRoot != null) {
+      map.sourceRoot = this._sourceRoot;
+    }
+    if (this._sourcesContents) {
+      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+    }
+
+    return map;
+  };
+
+/**
+ * Render the source map being generated to a string.
+ */
+SourceMapGenerator.prototype.toString =
+  function SourceMapGenerator_toString() {
+    return JSON.stringify(this.toJSON());
+  };
+
+var SourceMapGenerator_1 = SourceMapGenerator;
+
+var sourceMapGenerator = {
+	SourceMapGenerator: SourceMapGenerator_1
+};
+
+var binarySearch = createCommonjsModule(function (module, exports) {
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+exports.GREATEST_LOWER_BOUND = 1;
+exports.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ */
+function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+  // This function terminates when one of the following is true:
+  //
+  //   1. We find the exact element we are looking for.
+  //
+  //   2. We did not find the exact element, but we can return the index of
+  //      the next-closest element.
+  //
+  //   3. We did not find the exact element, and there is no next-closest
+  //      element than the one we are searching for, so we return -1.
+  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+  var cmp = aCompare(aNeedle, aHaystack[mid], true);
+  if (cmp === 0) {
+    // Found the element we are looking for.
+    return mid;
+  }
+  else if (cmp > 0) {
+    // Our needle is greater than aHaystack[mid].
+    if (aHigh - mid > 1) {
+      // The element is in the upper half.
+      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+    }
+
+    // The exact needle element was not found in this haystack. Determine if
+    // we are in termination case (3) or (2) and return the appropriate thing.
+    if (aBias == exports.LEAST_UPPER_BOUND) {
+      return aHigh < aHaystack.length ? aHigh : -1;
+    } else {
+      return mid;
+    }
+  }
+  else {
+    // Our needle is less than aHaystack[mid].
+    if (mid - aLow > 1) {
+      // The element is in the lower half.
+      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+    }
+
+    // we are in termination case (3) or (2) and return the appropriate thing.
+    if (aBias == exports.LEAST_UPPER_BOUND) {
+      return mid;
+    } else {
+      return aLow < 0 ? -1 : aLow;
+    }
+  }
+}
+
+/**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ *     array and returns -1, 0, or 1 depending on whether the needle is less
+ *     than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+  if (aHaystack.length === 0) {
+    return -1;
+  }
+
+  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+  if (index < 0) {
+    return -1;
+  }
+
+  // We have found either the exact element, or the next-closest element than
+  // the one we are searching for. However, there may be more than one such
+  // element. Make sure we always return the smallest of these.
+  while (index - 1 >= 0) {
+    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+      break;
+    }
+    --index;
+  }
+
+  return index;
+};
+});
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+// It turns out that some (most?) JavaScript engines don't self-host
+// `Array.prototype.sort`. This makes sense because C++ will likely remain
+// faster than JS when doing raw CPU-intensive sorting. However, when using a
+// custom comparator function, calling back and forth between the VM's C++ and
+// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+// worse generated code for the comparator function than would be optimal. In
+// fact, when sorting with a comparator, these costs outweigh the benefits of
+// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+// a ~3500ms mean speed-up in `bench/bench.html`.
+
+/**
+ * Swap the elements indexed by `x` and `y` in the array `ary`.
+ *
+ * @param {Array} ary
+ *        The array.
+ * @param {Number} x
+ *        The index of the first item.
+ * @param {Number} y
+ *        The index of the second item.
+ */
+function swap(ary, x, y) {
+  var temp = ary[x];
+  ary[x] = ary[y];
+  ary[y] = temp;
+}
+
+/**
+ * Returns a random integer within the range `low .. high` inclusive.
+ *
+ * @param {Number} low
+ *        The lower bound on the range.
+ * @param {Number} high
+ *        The upper bound on the range.
+ */
+function randomIntInRange(low, high) {
+  return Math.round(low + (Math.random() * (high - low)));
+}
+
+/**
+ * The Quick Sort algorithm.
+ *
+ * @param {Array} ary
+ *        An array to sort.
+ * @param {function} comparator
+ *        Function to use to compare two items.
+ * @param {Number} p
+ *        Start index of the array
+ * @param {Number} r
+ *        End index of the array
+ */
+function doQuickSort(ary, comparator, p, r) {
+  // If our lower bound is less than our upper bound, we (1) partition the
+  // array into two pieces and (2) recurse on each half. If it is not, this is
+  // the empty array and our base case.
+
+  if (p < r) {
+    // (1) Partitioning.
+    //
+    // The partitioning chooses a pivot between `p` and `r` and moves all
+    // elements that are less than or equal to the pivot to the before it, and
+    // all the elements that are greater than it after it. The effect is that
+    // once partition is done, the pivot is in the exact place it will be when
+    // the array is put in sorted order, and it will not need to be moved
+    // again. This runs in O(n) time.
+
+    // Always choose a random pivot so that an input array which is reverse
+    // sorted does not cause O(n^2) running time.
+    var pivotIndex = randomIntInRange(p, r);
+    var i = p - 1;
+
+    swap(ary, pivotIndex, r);
+    var pivot = ary[r];
+
+    // Immediately after `j` is incremented in this loop, the following hold
+    // true:
+    //
+    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
+    //
+    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+    for (var j = p; j < r; j++) {
+      if (comparator(ary[j], pivot) <= 0) {
+        i += 1;
+        swap(ary, i, j);
+      }
+    }
+
+    swap(ary, i + 1, j);
+    var q = i + 1;
+
+    // (2) Recurse on each half.
+
+    doQuickSort(ary, comparator, p, q - 1);
+    doQuickSort(ary, comparator, q + 1, r);
+  }
+}
+
+/**
+ * Sort the given array in-place with the given comparator function.
+ *
+ * @param {Array} ary
+ *        An array to sort.
+ * @param {function} comparator
+ *        Function to use to compare two items.
+ */
+var quickSort_1 = function (ary, comparator) {
+  doQuickSort(ary, comparator, 0, ary.length - 1);
+};
+
+var quickSort = {
+	quickSort: quickSort_1
+};
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+
+
+var ArraySet$2 = arraySet.ArraySet;
+
+var quickSort$1 = quickSort.quickSort;
+
+function SourceMapConsumer(aSourceMap, aSourceMapURL) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = util.parseSourceMapInput(aSourceMap);
+  }
+
+  return sourceMap.sections != null
+    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
+    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
+}
+
+SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
+  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
+};
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+SourceMapConsumer.prototype._version = 3;
+
+// `__generatedMappings` and `__originalMappings` are arrays that hold the
+// parsed mapping coordinates from the source map's "mappings" attribute. They
+// are lazily instantiated, accessed via the `_generatedMappings` and
+// `_originalMappings` getters respectively, and we only parse the mappings
+// and create these arrays once queried for a source location. We jump through
+// these hoops because there can be many thousands of mappings, and parsing
+// them is expensive, so we only want to do it if we must.
+//
+// Each object in the arrays is of the form:
+//
+//     {
+//       generatedLine: The line number in the generated code,
+//       generatedColumn: The column number in the generated code,
+//       source: The path to the original source file that generated this
+//               chunk of code,
+//       originalLine: The line number in the original source that
+//                     corresponds to this chunk of generated code,
+//       originalColumn: The column number in the original source that
+//                       corresponds to this chunk of generated code,
+//       name: The name of the original symbol which generated this chunk of
+//             code.
+//     }
+//
+// All properties except for `generatedLine` and `generatedColumn` can be
+// `null`.
+//
+// `_generatedMappings` is ordered by the generated positions.
+//
+// `_originalMappings` is ordered by the original positions.
+
+SourceMapConsumer.prototype.__generatedMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+  configurable: true,
+  enumerable: true,
+  get: function () {
+    if (!this.__generatedMappings) {
+      this._parseMappings(this._mappings, this.sourceRoot);
+    }
+
+    return this.__generatedMappings;
+  }
+});
+
+SourceMapConsumer.prototype.__originalMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+  configurable: true,
+  enumerable: true,
+  get: function () {
+    if (!this.__originalMappings) {
+      this._parseMappings(this._mappings, this.sourceRoot);
+    }
+
+    return this.__originalMappings;
+  }
+});
+
+SourceMapConsumer.prototype._charIsMappingSeparator =
+  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+    var c = aStr.charAt(index);
+    return c === ";" || c === ",";
+  };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+SourceMapConsumer.prototype._parseMappings =
+  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    throw new Error("Subclasses must implement _parseMappings");
+  };
+
+SourceMapConsumer.GENERATED_ORDER = 1;
+SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ *        The function that is called with each mapping.
+ * @param Object aContext
+ *        Optional. If specified, this object will be the value of `this` every
+ *        time that `aCallback` is called.
+ * @param aOrder
+ *        Either `SourceMapConsumer.GENERATED_ORDER` or
+ *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ *        iterate over the mappings sorted by the generated file's line/column
+ *        order or the original's source/line/column order, respectively. Defaults to
+ *        `SourceMapConsumer.GENERATED_ORDER`.
+ */
+SourceMapConsumer.prototype.eachMapping =
+  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+    var context = aContext || null;
+    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+    var mappings;
+    switch (order) {
+    case SourceMapConsumer.GENERATED_ORDER:
+      mappings = this._generatedMappings;
+      break;
+    case SourceMapConsumer.ORIGINAL_ORDER:
+      mappings = this._originalMappings;
+      break;
+    default:
+      throw new Error("Unknown order of iteration.");
+    }
+
+    var sourceRoot = this.sourceRoot;
+    mappings.map(function (mapping) {
+      var source = mapping.source === null ? null : this._sources.at(mapping.source);
+      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
+      return {
+        source: source,
+        generatedLine: mapping.generatedLine,
+        generatedColumn: mapping.generatedColumn,
+        originalLine: mapping.originalLine,
+        originalColumn: mapping.originalColumn,
+        name: mapping.name === null ? null : this._names.at(mapping.name)
+      };
+    }, this).forEach(aCallback, context);
+  };
+
+/**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.  The line number is 1-based.
+ *   - column: Optional. the column number in the original source.
+ *    The column number is 0-based.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.  The
+ *    line number is 1-based.
+ *   - column: The column number in the generated source, or null.
+ *    The column number is 0-based.
+ */
+SourceMapConsumer.prototype.allGeneratedPositionsFor =
+  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+    var line = util.getArg(aArgs, 'line');
+
+    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+    // returns the index of the closest mapping less than the needle. By
+    // setting needle.originalColumn to 0, we thus find the last mapping for
+    // the given line, provided such a mapping exists.
+    var needle = {
+      source: util.getArg(aArgs, 'source'),
+      originalLine: line,
+      originalColumn: util.getArg(aArgs, 'column', 0)
+    };
+
+    needle.source = this._findSourceIndex(needle.source);
+    if (needle.source < 0) {
+      return [];
+    }
+
+    var mappings = [];
+
+    var index = this._findMapping(needle,
+                                  this._originalMappings,
+                                  "originalLine",
+                                  "originalColumn",
+                                  util.compareByOriginalPositions,
+                                  binarySearch.LEAST_UPPER_BOUND);
+    if (index >= 0) {
+      var mapping = this._originalMappings[index];
+
+      if (aArgs.column === undefined) {
+        var originalLine = mapping.originalLine;
+
+        // Iterate until either we run out of mappings, or we run into
+        // a mapping for a different line than the one we found. Since
+        // mappings are sorted, this is guaranteed to find all mappings for
+        // the line we found.
+        while (mapping && mapping.originalLine === originalLine) {
+          mappings.push({
+            line: util.getArg(mapping, 'generatedLine', null),
+            column: util.getArg(mapping, 'generatedColumn', null),
+            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+          });
+
+          mapping = this._originalMappings[++index];
+        }
+      } else {
+        var originalColumn = mapping.originalColumn;
+
+        // Iterate until either we run out of mappings, or we run into
+        // a mapping for a different line than the one we were searching for.
+        // Since mappings are sorted, this is guaranteed to find all mappings for
+        // the line we are searching for.
+        while (mapping &&
+               mapping.originalLine === line &&
+               mapping.originalColumn == originalColumn) {
+          mappings.push({
+            line: util.getArg(mapping, 'generatedLine', null),
+            column: util.getArg(mapping, 'generatedColumn', null),
+            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+          });
+
+          mapping = this._originalMappings[++index];
+        }
+      }
+    }
+
+    return mappings;
+  };
+
+var SourceMapConsumer_1 = SourceMapConsumer;
+
+/**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The first parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ *   - version: Which version of the source map spec this map is following.
+ *   - sources: An array of URLs to the original source files.
+ *   - names: An array of identifiers which can be referrenced by individual mappings.
+ *   - sourceRoot: Optional. The URL root from which all sources are relative.
+ *   - sourcesContent: Optional. An array of contents of the original source files.
+ *   - mappings: A string of base64 VLQs which contain the actual mappings.
+ *   - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ *     {
+ *       version : 3,
+ *       file: "out.js",
+ *       sourceRoot : "",
+ *       sources: ["foo.js", "bar.js"],
+ *       names: ["src", "maps", "are", "fun"],
+ *       mappings: "AA,AB;;ABCDE;"
+ *     }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found.  This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = util.parseSourceMapInput(aSourceMap);
+  }
+
+  var version = util.getArg(sourceMap, 'version');
+  var sources = util.getArg(sourceMap, 'sources');
+  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+  // requires the array) to play nice here.
+  var names = util.getArg(sourceMap, 'names', []);
+  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+  var mappings = util.getArg(sourceMap, 'mappings');
+  var file = util.getArg(sourceMap, 'file', null);
+
+  // Once again, Sass deviates from the spec and supplies the version as a
+  // string rather than a number, so we use loose equality checking here.
+  if (version != this._version) {
+    throw new Error('Unsupported version: ' + version);
+  }
+
+  if (sourceRoot) {
+    sourceRoot = util.normalize(sourceRoot);
+  }
+
+  sources = sources
+    .map(String)
+    // Some source maps produce relative source paths like "./foo.js" instead of
+    // "foo.js".  Normalize these first so that future comparisons will succeed.
+    // See bugzil.la/1090768.
+    .map(util.normalize)
+    // Always ensure that absolute sources are internally stored relative to
+    // the source root, if the source root is absolute. Not doing this would
+    // be particularly problematic when the source root is a prefix of the
+    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+    .map(function (source) {
+      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+        ? util.relative(sourceRoot, source)
+        : source;
+    });
+
+  // Pass `true` below to allow duplicate names and sources. While source maps
+  // are intended to be compressed and deduplicated, the TypeScript compiler
+  // sometimes generates source maps with duplicates in them. See Github issue
+  // #72 and bugzil.la/889492.
+  this._names = ArraySet$2.fromArray(names.map(String), true);
+  this._sources = ArraySet$2.fromArray(sources, true);
+
+  this._absoluteSources = this._sources.toArray().map(function (s) {
+    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
+  });
+
+  this.sourceRoot = sourceRoot;
+  this.sourcesContent = sourcesContent;
+  this._mappings = mappings;
+  this._sourceMapURL = aSourceMapURL;
+  this.file = file;
+}
+
+BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+/**
+ * Utility function to find the index of a source.  Returns -1 if not
+ * found.
+ */
+BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
+  var relativeSource = aSource;
+  if (this.sourceRoot != null) {
+    relativeSource = util.relative(this.sourceRoot, relativeSource);
+  }
+
+  if (this._sources.has(relativeSource)) {
+    return this._sources.indexOf(relativeSource);
+  }
+
+  // Maybe aSource is an absolute URL as returned by |sources|.  In
+  // this case we can't simply undo the transform.
+  var i;
+  for (i = 0; i < this._absoluteSources.length; ++i) {
+    if (this._absoluteSources[i] == aSource) {
+      return i;
+    }
+  }
+
+  return -1;
+};
+
+/**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ *        The source map that will be consumed.
+ * @param String aSourceMapURL
+ *        The URL at which the source map can be found (optional)
+ * @returns BasicSourceMapConsumer
+ */
+BasicSourceMapConsumer.fromSourceMap =
+  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
+    var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+    var names = smc._names = ArraySet$2.fromArray(aSourceMap._names.toArray(), true);
+    var sources = smc._sources = ArraySet$2.fromArray(aSourceMap._sources.toArray(), true);
+    smc.sourceRoot = aSourceMap._sourceRoot;
+    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+                                                            smc.sourceRoot);
+    smc.file = aSourceMap._file;
+    smc._sourceMapURL = aSourceMapURL;
+    smc._absoluteSources = smc._sources.toArray().map(function (s) {
+      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
+    });
+
+    // Because we are modifying the entries (by converting string sources and
+    // names to indices into the sources and names ArraySets), we have to make
+    // a copy of the entry or else bad things happen. Shared mutable state
+    // strikes again! See github issue #191.
+
+    var generatedMappings = aSourceMap._mappings.toArray().slice();
+    var destGeneratedMappings = smc.__generatedMappings = [];
+    var destOriginalMappings = smc.__originalMappings = [];
+
+    for (var i = 0, length = generatedMappings.length; i < length; i++) {
+      var srcMapping = generatedMappings[i];
+      var destMapping = new Mapping;
+      destMapping.generatedLine = srcMapping.generatedLine;
+      destMapping.generatedColumn = srcMapping.generatedColumn;
+
+      if (srcMapping.source) {
+        destMapping.source = sources.indexOf(srcMapping.source);
+        destMapping.originalLine = srcMapping.originalLine;
+        destMapping.originalColumn = srcMapping.originalColumn;
+
+        if (srcMapping.name) {
+          destMapping.name = names.indexOf(srcMapping.name);
+        }
+
+        destOriginalMappings.push(destMapping);
+      }
+
+      destGeneratedMappings.push(destMapping);
+    }
+
+    quickSort$1(smc.__originalMappings, util.compareByOriginalPositions);
+
+    return smc;
+  };
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+BasicSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+  get: function () {
+    return this._absoluteSources.slice();
+  }
+});
+
+/**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+function Mapping() {
+  this.generatedLine = 0;
+  this.generatedColumn = 0;
+  this.source = null;
+  this.originalLine = null;
+  this.originalColumn = null;
+  this.name = null;
+}
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+BasicSourceMapConsumer.prototype._parseMappings =
+  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    var generatedLine = 1;
+    var previousGeneratedColumn = 0;
+    var previousOriginalLine = 0;
+    var previousOriginalColumn = 0;
+    var previousSource = 0;
+    var previousName = 0;
+    var length = aStr.length;
+    var index = 0;
+    var cachedSegments = {};
+    var temp = {};
+    var originalMappings = [];
+    var generatedMappings = [];
+    var mapping, str, segment, end, value;
+
+    while (index < length) {
+      if (aStr.charAt(index) === ';') {
+        generatedLine++;
+        index++;
+        previousGeneratedColumn = 0;
+      }
+      else if (aStr.charAt(index) === ',') {
+        index++;
+      }
+      else {
+        mapping = new Mapping();
+        mapping.generatedLine = generatedLine;
+
+        // Because each offset is encoded relative to the previous one,
+        // many segments often have the same encoding. We can exploit this
+        // fact by caching the parsed variable length fields of each segment,
+        // allowing us to avoid a second parse if we encounter the same
+        // segment again.
+        for (end = index; end < length; end++) {
+          if (this._charIsMappingSeparator(aStr, end)) {
+            break;
+          }
+        }
+        str = aStr.slice(index, end);
+
+        segment = cachedSegments[str];
+        if (segment) {
+          index += str.length;
+        } else {
+          segment = [];
+          while (index < end) {
+            base64Vlq.decode(aStr, index, temp);
+            value = temp.value;
+            index = temp.rest;
+            segment.push(value);
+          }
+
+          if (segment.length === 2) {
+            throw new Error('Found a source, but no line and column');
+          }
+
+          if (segment.length === 3) {
+            throw new Error('Found a source and line, but no column');
+          }
+
+          cachedSegments[str] = segment;
+        }
+
+        // Generated column.
+        mapping.generatedColumn = previousGeneratedColumn + segment[0];
+        previousGeneratedColumn = mapping.generatedColumn;
+
+        if (segment.length > 1) {
+          // Original source.
+          mapping.source = previousSource + segment[1];
+          previousSource += segment[1];
+
+          // Original line.
+          mapping.originalLine = previousOriginalLine + segment[2];
+          previousOriginalLine = mapping.originalLine;
+          // Lines are stored 0-based
+          mapping.originalLine += 1;
+
+          // Original column.
+          mapping.originalColumn = previousOriginalColumn + segment[3];
+          previousOriginalColumn = mapping.originalColumn;
+
+          if (segment.length > 4) {
+            // Original name.
+            mapping.name = previousName + segment[4];
+            previousName += segment[4];
+          }
+        }
+
+        generatedMappings.push(mapping);
+        if (typeof mapping.originalLine === 'number') {
+          originalMappings.push(mapping);
+        }
+      }
+    }
+
+    quickSort$1(generatedMappings, util.compareByGeneratedPositionsDeflated);
+    this.__generatedMappings = generatedMappings;
+
+    quickSort$1(originalMappings, util.compareByOriginalPositions);
+    this.__originalMappings = originalMappings;
+  };
+
+/**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+BasicSourceMapConsumer.prototype._findMapping =
+  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+                                         aColumnName, aComparator, aBias) {
+    // To return the position we are searching for, we must first find the
+    // mapping for the given position and then return the opposite position it
+    // points to. Because the mappings are sorted, we can use binary search to
+    // find the best mapping.
+
+    if (aNeedle[aLineName] <= 0) {
+      throw new TypeError('Line must be greater than or equal to 1, got '
+                          + aNeedle[aLineName]);
+    }
+    if (aNeedle[aColumnName] < 0) {
+      throw new TypeError('Column must be greater than or equal to 0, got '
+                          + aNeedle[aColumnName]);
+    }
+
+    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+  };
+
+/**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+BasicSourceMapConsumer.prototype.computeColumnSpans =
+  function SourceMapConsumer_computeColumnSpans() {
+    for (var index = 0; index < this._generatedMappings.length; ++index) {
+      var mapping = this._generatedMappings[index];
+
+      // Mappings do not contain a field for the last generated columnt. We
+      // can come up with an optimistic estimate, however, by assuming that
+      // mappings are contiguous (i.e. given two consecutive mappings, the
+      // first mapping ends where the second one starts).
+      if (index + 1 < this._generatedMappings.length) {
+        var nextMapping = this._generatedMappings[index + 1];
+
+        if (mapping.generatedLine === nextMapping.generatedLine) {
+          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+          continue;
+        }
+      }
+
+      // The last mapping for each line spans the entire line.
+      mapping.lastGeneratedColumn = Infinity;
+    }
+  };
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ *   - line: The line number in the generated source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the generated source.  The column
+ *     number is 0-based.
+ *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - source: The original source file, or null.
+ *   - line: The line number in the original source, or null.  The
+ *     line number is 1-based.
+ *   - column: The column number in the original source, or null.  The
+ *     column number is 0-based.
+ *   - name: The original identifier, or null.
+ */
+BasicSourceMapConsumer.prototype.originalPositionFor =
+  function SourceMapConsumer_originalPositionFor(aArgs) {
+    var needle = {
+      generatedLine: util.getArg(aArgs, 'line'),
+      generatedColumn: util.getArg(aArgs, 'column')
+    };
+
+    var index = this._findMapping(
+      needle,
+      this._generatedMappings,
+      "generatedLine",
+      "generatedColumn",
+      util.compareByGeneratedPositionsDeflated,
+      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+    );
+
+    if (index >= 0) {
+      var mapping = this._generatedMappings[index];
+
+      if (mapping.generatedLine === needle.generatedLine) {
+        var source = util.getArg(mapping, 'source', null);
+        if (source !== null) {
+          source = this._sources.at(source);
+          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
+        }
+        var name = util.getArg(mapping, 'name', null);
+        if (name !== null) {
+          name = this._names.at(name);
+        }
+        return {
+          source: source,
+          line: util.getArg(mapping, 'originalLine', null),
+          column: util.getArg(mapping, 'originalColumn', null),
+          name: name
+        };
+      }
+    }
+
+    return {
+      source: null,
+      line: null,
+      column: null,
+      name: null
+    };
+  };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+  function BasicSourceMapConsumer_hasContentsOfAllSources() {
+    if (!this.sourcesContent) {
+      return false;
+    }
+    return this.sourcesContent.length >= this._sources.size() &&
+      !this.sourcesContent.some(function (sc) { return sc == null; });
+  };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+BasicSourceMapConsumer.prototype.sourceContentFor =
+  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+    if (!this.sourcesContent) {
+      return null;
+    }
+
+    var index = this._findSourceIndex(aSource);
+    if (index >= 0) {
+      return this.sourcesContent[index];
+    }
+
+    var relativeSource = aSource;
+    if (this.sourceRoot != null) {
+      relativeSource = util.relative(this.sourceRoot, relativeSource);
+    }
+
+    var url;
+    if (this.sourceRoot != null
+        && (url = util.urlParse(this.sourceRoot))) {
+      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+      // many users. We can help them out when they expect file:// URIs to
+      // behave like it would if they were running a local HTTP server. See
+      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
+      if (url.scheme == "file"
+          && this._sources.has(fileUriAbsPath)) {
+        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+      }
+
+      if ((!url.path || url.path == "/")
+          && this._sources.has("/" + relativeSource)) {
+        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
+      }
+    }
+
+    // This function is used recursively from
+    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+    // don't want to throw if we can't find the source - we just want to
+    // return null, so we provide a flag to exit gracefully.
+    if (nullOnMissing) {
+      return null;
+    }
+    else {
+      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
+    }
+  };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the original source.  The column
+ *     number is 0-based.
+ *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.  The
+ *     line number is 1-based.
+ *   - column: The column number in the generated source, or null.
+ *     The column number is 0-based.
+ */
+BasicSourceMapConsumer.prototype.generatedPositionFor =
+  function SourceMapConsumer_generatedPositionFor(aArgs) {
+    var source = util.getArg(aArgs, 'source');
+    source = this._findSourceIndex(source);
+    if (source < 0) {
+      return {
+        line: null,
+        column: null,
+        lastColumn: null
+      };
+    }
+
+    var needle = {
+      source: source,
+      originalLine: util.getArg(aArgs, 'line'),
+      originalColumn: util.getArg(aArgs, 'column')
+    };
+
+    var index = this._findMapping(
+      needle,
+      this._originalMappings,
+      "originalLine",
+      "originalColumn",
+      util.compareByOriginalPositions,
+      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+    );
+
+    if (index >= 0) {
+      var mapping = this._originalMappings[index];
+
+      if (mapping.source === needle.source) {
+        return {
+          line: util.getArg(mapping, 'generatedLine', null),
+          column: util.getArg(mapping, 'generatedColumn', null),
+          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+        };
+      }
+    }
+
+    return {
+      line: null,
+      column: null,
+      lastColumn: null
+    };
+  };
+
+var BasicSourceMapConsumer_1 = BasicSourceMapConsumer;
+
+/**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The first parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ *   - version: Which version of the source map spec this map is following.
+ *   - file: Optional. The generated file this source map is associated with.
+ *   - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ *   - offset: The offset into the original specified at which this section
+ *       begins to apply, defined as an object with a "line" and "column"
+ *       field.
+ *   - map: A source map definition. This source map could also be indexed,
+ *       but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ *  {
+ *    version : 3,
+ *    file: "app.js",
+ *    sections: [{
+ *      offset: {line:100, column:10},
+ *      map: {
+ *        version : 3,
+ *        file: "section.js",
+ *        sources: ["foo.js", "bar.js"],
+ *        names: ["src", "maps", "are", "fun"],
+ *        mappings: "AAAA,E;;ABCDE;"
+ *      }
+ *    }],
+ *  }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found.  This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = util.parseSourceMapInput(aSourceMap);
+  }
+
+  var version = util.getArg(sourceMap, 'version');
+  var sections = util.getArg(sourceMap, 'sections');
+
+  if (version != this._version) {
+    throw new Error('Unsupported version: ' + version);
+  }
+
+  this._sources = new ArraySet$2();
+  this._names = new ArraySet$2();
+
+  var lastOffset = {
+    line: -1,
+    column: 0
+  };
+  this._sections = sections.map(function (s) {
+    if (s.url) {
+      // The url field will require support for asynchronicity.
+      // See https://github.com/mozilla/source-map/issues/16
+      throw new Error('Support for url field in sections not implemented.');
+    }
+    var offset = util.getArg(s, 'offset');
+    var offsetLine = util.getArg(offset, 'line');
+    var offsetColumn = util.getArg(offset, 'column');
+
+    if (offsetLine < lastOffset.line ||
+        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+      throw new Error('Section offsets must be ordered and non-overlapping.');
+    }
+    lastOffset = offset;
+
+    return {
+      generatedOffset: {
+        // The offset fields are 0-based, but we use 1-based indices when
+        // encoding/decoding from VLQ.
+        generatedLine: offsetLine + 1,
+        generatedColumn: offsetColumn + 1
+      },
+      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
+    }
+  });
+}
+
+IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+IndexedSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+  get: function () {
+    var sources = [];
+    for (var i = 0; i < this._sections.length; i++) {
+      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+        sources.push(this._sections[i].consumer.sources[j]);
+      }
+    }
+    return sources;
+  }
+});
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ *   - line: The line number in the generated source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the generated source.  The column
+ *     number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - source: The original source file, or null.
+ *   - line: The line number in the original source, or null.  The
+ *     line number is 1-based.
+ *   - column: The column number in the original source, or null.  The
+ *     column number is 0-based.
+ *   - name: The original identifier, or null.
+ */
+IndexedSourceMapConsumer.prototype.originalPositionFor =
+  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+    var needle = {
+      generatedLine: util.getArg(aArgs, 'line'),
+      generatedColumn: util.getArg(aArgs, 'column')
+    };
+
+    // Find the section containing the generated position we're trying to map
+    // to an original position.
+    var sectionIndex = binarySearch.search(needle, this._sections,
+      function(needle, section) {
+        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+        if (cmp) {
+          return cmp;
+        }
+
+        return (needle.generatedColumn -
+                section.generatedOffset.generatedColumn);
+      });
+    var section = this._sections[sectionIndex];
+
+    if (!section) {
+      return {
+        source: null,
+        line: null,
+        column: null,
+        name: null
+      };
+    }
+
+    return section.consumer.originalPositionFor({
+      line: needle.generatedLine -
+        (section.generatedOffset.generatedLine - 1),
+      column: needle.generatedColumn -
+        (section.generatedOffset.generatedLine === needle.generatedLine
+         ? section.generatedOffset.generatedColumn - 1
+         : 0),
+      bias: aArgs.bias
+    });
+  };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+    return this._sections.every(function (s) {
+      return s.consumer.hasContentsOfAllSources();
+    });
+  };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+IndexedSourceMapConsumer.prototype.sourceContentFor =
+  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+
+      var content = section.consumer.sourceContentFor(aSource, true);
+      if (content) {
+        return content;
+      }
+    }
+    if (nullOnMissing) {
+      return null;
+    }
+    else {
+      throw new Error('"' + aSource + '" is not in the SourceMap.');
+    }
+  };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.  The line number
+ *     is 1-based.
+ *   - column: The column number in the original source.  The column
+ *     number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.  The
+ *     line number is 1-based. 
+ *   - column: The column number in the generated source, or null.
+ *     The column number is 0-based.
+ */
+IndexedSourceMapConsumer.prototype.generatedPositionFor =
+  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+
+      // Only consider this section if the requested source is in the list of
+      // sources of the consumer.
+      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
+        continue;
+      }
+      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+      if (generatedPosition) {
+        var ret = {
+          line: generatedPosition.line +
+            (section.generatedOffset.generatedLine - 1),
+          column: generatedPosition.column +
+            (section.generatedOffset.generatedLine === generatedPosition.line
+             ? section.generatedOffset.generatedColumn - 1
+             : 0)
+        };
+        return ret;
+      }
+    }
+
+    return {
+      line: null,
+      column: null
+    };
+  };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+IndexedSourceMapConsumer.prototype._parseMappings =
+  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    this.__generatedMappings = [];
+    this.__originalMappings = [];
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+      var sectionMappings = section.consumer._generatedMappings;
+      for (var j = 0; j < sectionMappings.length; j++) {
+        var mapping = sectionMappings[j];
+
+        var source = section.consumer._sources.at(mapping.source);
+        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
+        this._sources.add(source);
+        source = this._sources.indexOf(source);
+
+        var name = null;
+        if (mapping.name) {
+          name = section.consumer._names.at(mapping.name);
+          this._names.add(name);
+          name = this._names.indexOf(name);
+        }
+
+        // The mappings coming from the consumer for the section have
+        // generated positions relative to the start of the section, so we
+        // need to offset them to be relative to the start of the concatenated
+        // generated file.
+        var adjustedMapping = {
+          source: source,
+          generatedLine: mapping.generatedLine +
+            (section.generatedOffset.generatedLine - 1),
+          generatedColumn: mapping.generatedColumn +
+            (section.generatedOffset.generatedLine === mapping.generatedLine
+            ? section.generatedOffset.generatedColumn - 1
+            : 0),
+          originalLine: mapping.originalLine,
+          originalColumn: mapping.originalColumn,
+          name: name
+        };
+
+        this.__generatedMappings.push(adjustedMapping);
+        if (typeof adjustedMapping.originalLine === 'number') {
+          this.__originalMappings.push(adjustedMapping);
+        }
+      }
+    }
+
+    quickSort$1(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+    quickSort$1(this.__originalMappings, util.compareByOriginalPositions);
+  };
+
+var IndexedSourceMapConsumer_1 = IndexedSourceMapConsumer;
+
+var sourceMapConsumer = {
+	SourceMapConsumer: SourceMapConsumer_1,
+	BasicSourceMapConsumer: BasicSourceMapConsumer_1,
+	IndexedSourceMapConsumer: IndexedSourceMapConsumer_1
+};
+
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var SourceMapGenerator$1 = sourceMapGenerator.SourceMapGenerator;
+
+
+// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+// operating systems these days (capturing the result).
+var REGEX_NEWLINE = /(\r?\n)/;
+
+// Newline character code for charCodeAt() comparisons
+var NEWLINE_CODE = 10;
+
+// Private symbol for identifying `SourceNode`s when multiple versions of
+// the source-map library are loaded. This MUST NOT CHANGE across
+// versions!
+var isSourceNode = "$$$isSourceNode$$$";
+
+/**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ *        generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+  this.children = [];
+  this.sourceContents = {};
+  this.line = aLine == null ? null : aLine;
+  this.column = aColumn == null ? null : aColumn;
+  this.source = aSource == null ? null : aSource;
+  this.name = aName == null ? null : aName;
+  this[isSourceNode] = true;
+  if (aChunks != null) this.add(aChunks);
+}
+
+/**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ *        SourceMapConsumer should be relative to.
+ */
+SourceNode.fromStringWithSourceMap =
+  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+    // The SourceNode we want to fill with the generated code
+    // and the SourceMap
+    var node = new SourceNode();
+
+    // All even indices of this array are one line of the generated code,
+    // while all odd indices are the newlines between two adjacent lines
+    // (since `REGEX_NEWLINE` captures its match).
+    // Processed fragments are accessed by calling `shiftNextLine`.
+    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+    var remainingLinesIndex = 0;
+    var shiftNextLine = function() {
+      var lineContents = getNextLine();
+      // The last line of a file might not have a newline.
+      var newLine = getNextLine() || "";
+      return lineContents + newLine;
+
+      function getNextLine() {
+        return remainingLinesIndex < remainingLines.length ?
+            remainingLines[remainingLinesIndex++] : undefined;
+      }
+    };
+
+    // We need to remember the position of "remainingLines"
+    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+    // The generate SourceNodes we need a code range.
+    // To extract it current and last mapping is used.
+    // Here we store the last mapping.
+    var lastMapping = null;
+
+    aSourceMapConsumer.eachMapping(function (mapping) {
+      if (lastMapping !== null) {
+        // We add the code from "lastMapping" to "mapping":
+        // First check if there is a new line in between.
+        if (lastGeneratedLine < mapping.generatedLine) {
+          // Associate first line with "lastMapping"
+          addMappingWithCode(lastMapping, shiftNextLine());
+          lastGeneratedLine++;
+          lastGeneratedColumn = 0;
+          // The remaining code is added without mapping
+        } else {
+          // There is no new line in between.
+          // Associate the code between "lastGeneratedColumn" and
+          // "mapping.generatedColumn" with "lastMapping"
+          var nextLine = remainingLines[remainingLinesIndex] || '';
+          var code = nextLine.substr(0, mapping.generatedColumn -
+                                        lastGeneratedColumn);
+          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+                                              lastGeneratedColumn);
+          lastGeneratedColumn = mapping.generatedColumn;
+          addMappingWithCode(lastMapping, code);
+          // No more remaining code, continue
+          lastMapping = mapping;
+          return;
+        }
+      }
+      // We add the generated code until the first mapping
+      // to the SourceNode without any mapping.
+      // Each line is added as separate string.
+      while (lastGeneratedLine < mapping.generatedLine) {
+        node.add(shiftNextLine());
+        lastGeneratedLine++;
+      }
+      if (lastGeneratedColumn < mapping.generatedColumn) {
+        var nextLine = remainingLines[remainingLinesIndex] || '';
+        node.add(nextLine.substr(0, mapping.generatedColumn));
+        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+        lastGeneratedColumn = mapping.generatedColumn;
+      }
+      lastMapping = mapping;
+    }, this);
+    // We have processed all mappings.
+    if (remainingLinesIndex < remainingLines.length) {
+      if (lastMapping) {
+        // Associate the remaining code in the current line with "lastMapping"
+        addMappingWithCode(lastMapping, shiftNextLine());
+      }
+      // and add the remaining lines without any mapping
+      node.add(remainingLines.splice(remainingLinesIndex).join(""));
+    }
+
+    // Copy sourcesContent into SourceNode
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        if (aRelativePath != null) {
+          sourceFile = util.join(aRelativePath, sourceFile);
+        }
+        node.setSourceContent(sourceFile, content);
+      }
+    });
+
+    return node;
+
+    function addMappingWithCode(mapping, code) {
+      if (mapping === null || mapping.source === undefined) {
+        node.add(code);
+      } else {
+        var source = aRelativePath
+          ? util.join(aRelativePath, mapping.source)
+          : mapping.source;
+        node.add(new SourceNode(mapping.originalLine,
+                                mapping.originalColumn,
+                                source,
+                                code,
+                                mapping.name));
+      }
+    }
+  };
+
+/**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ *        SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.add = function SourceNode_add(aChunk) {
+  if (Array.isArray(aChunk)) {
+    aChunk.forEach(function (chunk) {
+      this.add(chunk);
+    }, this);
+  }
+  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+    if (aChunk) {
+      this.children.push(aChunk);
+    }
+  }
+  else {
+    throw new TypeError(
+      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+    );
+  }
+  return this;
+};
+
+/**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ *        SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+  if (Array.isArray(aChunk)) {
+    for (var i = aChunk.length-1; i >= 0; i--) {
+      this.prepend(aChunk[i]);
+    }
+  }
+  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+    this.children.unshift(aChunk);
+  }
+  else {
+    throw new TypeError(
+      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+    );
+  }
+  return this;
+};
+
+/**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+  var chunk;
+  for (var i = 0, len = this.children.length; i < len; i++) {
+    chunk = this.children[i];
+    if (chunk[isSourceNode]) {
+      chunk.walk(aFn);
+    }
+    else {
+      if (chunk !== '') {
+        aFn(chunk, { source: this.source,
+                     line: this.line,
+                     column: this.column,
+                     name: this.name });
+      }
+    }
+  }
+};
+
+/**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+SourceNode.prototype.join = function SourceNode_join(aSep) {
+  var newChildren;
+  var i;
+  var len = this.children.length;
+  if (len > 0) {
+    newChildren = [];
+    for (i = 0; i < len-1; i++) {
+      newChildren.push(this.children[i]);
+      newChildren.push(aSep);
+    }
+    newChildren.push(this.children[i]);
+    this.children = newChildren;
+  }
+  return this;
+};
+
+/**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+  var lastChild = this.children[this.children.length - 1];
+  if (lastChild[isSourceNode]) {
+    lastChild.replaceRight(aPattern, aReplacement);
+  }
+  else if (typeof lastChild === 'string') {
+    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+  }
+  else {
+    this.children.push(''.replace(aPattern, aReplacement));
+  }
+  return this;
+};
+
+/**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+SourceNode.prototype.setSourceContent =
+  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+  };
+
+/**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walkSourceContents =
+  function SourceNode_walkSourceContents(aFn) {
+    for (var i = 0, len = this.children.length; i < len; i++) {
+      if (this.children[i][isSourceNode]) {
+        this.children[i].walkSourceContents(aFn);
+      }
+    }
+
+    var sources = Object.keys(this.sourceContents);
+    for (var i = 0, len = sources.length; i < len; i++) {
+      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+    }
+  };
+
+/**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+SourceNode.prototype.toString = function SourceNode_toString() {
+  var str = "";
+  this.walk(function (chunk) {
+    str += chunk;
+  });
+  return str;
+};
+
+/**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+  var generated = {
+    code: "",
+    line: 1,
+    column: 0
+  };
+  var map = new SourceMapGenerator$1(aArgs);
+  var sourceMappingActive = false;
+  var lastOriginalSource = null;
+  var lastOriginalLine = null;
+  var lastOriginalColumn = null;
+  var lastOriginalName = null;
+  this.walk(function (chunk, original) {
+    generated.code += chunk;
+    if (original.source !== null
+        && original.line !== null
+        && original.column !== null) {
+      if(lastOriginalSource !== original.source
+         || lastOriginalLine !== original.line
+         || lastOriginalColumn !== original.column
+         || lastOriginalName !== original.name) {
+        map.addMapping({
+          source: original.source,
+          original: {
+            line: original.line,
+            column: original.column
+          },
+          generated: {
+            line: generated.line,
+            column: generated.column
+          },
+          name: original.name
+        });
+      }
+      lastOriginalSource = original.source;
+      lastOriginalLine = original.line;
+      lastOriginalColumn = original.column;
+      lastOriginalName = original.name;
+      sourceMappingActive = true;
+    } else if (sourceMappingActive) {
+      map.addMapping({
+        generated: {
+          line: generated.line,
+          column: generated.column
+        }
+      });
+      lastOriginalSource = null;
+      sourceMappingActive = false;
+    }
+    for (var idx = 0, length = chunk.length; idx < length; idx++) {
+      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+        generated.line++;
+        generated.column = 0;
+        // Mappings end at eol
+        if (idx + 1 === length) {
+          lastOriginalSource = null;
+          sourceMappingActive = false;
+        } else if (sourceMappingActive) {
+          map.addMapping({
+            source: original.source,
+            original: {
+              line: original.line,
+              column: original.column
+            },
+            generated: {
+              line: generated.line,
+              column: generated.column
+            },
+            name: original.name
+          });
+        }
+      } else {
+        generated.column++;
+      }
+    }
+  });
+  this.walkSourceContents(function (sourceFile, sourceContent) {
+    map.setSourceContent(sourceFile, sourceContent);
+  });
+
+  return { code: generated.code, map: map };
+};
+
+var SourceNode_1 = SourceNode;
+
+var sourceNode = {
+	SourceNode: SourceNode_1
+};
+
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+var SourceMapGenerator$2 = sourceMapGenerator.SourceMapGenerator;
+var SourceMapConsumer$1 = sourceMapConsumer.SourceMapConsumer;
+var SourceNode$1 = sourceNode.SourceNode;
+
+var sourceMap = {
+	SourceMapGenerator: SourceMapGenerator$2,
+	SourceMapConsumer: SourceMapConsumer$1,
+	SourceNode: SourceNode$1
+};
+
+var codeGen = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+
+
+
+var SourceNode = undefined;
+
+try {
+  /* istanbul ignore next */
+  if (typeof undefined !== 'function' || !undefined.amd) {
+    // We don't support this in AMD environments. For these environments, we asusme that
+    // they are running on the browser and thus have no need for the source-map library.
+    var SourceMap = sourceMap;
+    SourceNode = SourceMap.SourceNode;
+  }
+} catch (err) {}
+/* NOP */
+
+/* istanbul ignore if: tested but not covered in istanbul due to dist build  */
+if (!SourceNode) {
+  SourceNode = function (line, column, srcFile, chunks) {
+    this.src = '';
+    if (chunks) {
+      this.add(chunks);
+    }
+  };
+  /* istanbul ignore next */
+  SourceNode.prototype = {
+    add: function add(chunks) {
+      if (utils$2.isArray(chunks)) {
+        chunks = chunks.join('');
+      }
+      this.src += chunks;
+    },
+    prepend: function prepend(chunks) {
+      if (utils$2.isArray(chunks)) {
+        chunks = chunks.join('');
+      }
+      this.src = chunks + this.src;
+    },
+    toStringWithSourceMap: function toStringWithSourceMap() {
+      return { code: this.toString() };
+    },
+    toString: function toString() {
+      return this.src;
+    }
+  };
+}
+
+function castChunk(chunk, codeGen, loc) {
+  if (utils$2.isArray(chunk)) {
+    var ret = [];
+
+    for (var i = 0, len = chunk.length; i < len; i++) {
+      ret.push(codeGen.wrap(chunk[i], loc));
+    }
+    return ret;
+  } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {
+    // Handle primitives that the SourceNode will throw up on
+    return chunk + '';
+  }
+  return chunk;
+}
+
+function CodeGen(srcFile) {
+  this.srcFile = srcFile;
+  this.source = [];
+}
+
+CodeGen.prototype = {
+  isEmpty: function isEmpty() {
+    return !this.source.length;
+  },
+  prepend: function prepend(source, loc) {
+    this.source.unshift(this.wrap(source, loc));
+  },
+  push: function push(source, loc) {
+    this.source.push(this.wrap(source, loc));
+  },
+
+  merge: function merge() {
+    var source = this.empty();
+    this.each(function (line) {
+      source.add(['  ', line, '\n']);
+    });
+    return source;
+  },
+
+  each: function each(iter) {
+    for (var i = 0, len = this.source.length; i < len; i++) {
+      iter(this.source[i]);
+    }
+  },
+
+  empty: function empty() {
+    var loc = this.currentLocation || { start: {} };
+    return new SourceNode(loc.start.line, loc.start.column, this.srcFile);
+  },
+  wrap: function wrap(chunk) {
+    var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];
+
+    if (chunk instanceof SourceNode) {
+      return chunk;
+    }
+
+    chunk = castChunk(chunk, this, loc);
+
+    return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);
+  },
+
+  functionCall: function functionCall(fn, type, params) {
+    params = this.generateList(params);
+    return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);
+  },
+
+  quotedString: function quotedString(str) {
+    return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
+    .replace(/\u2029/g, '\\u2029') + '"';
+  },
+
+  objectLiteral: function objectLiteral(obj) {
+    // istanbul ignore next
+
+    var _this = this;
+
+    var pairs = [];
+
+    Object.keys(obj).forEach(function (key) {
+      var value = castChunk(obj[key], _this);
+      if (value !== 'undefined') {
+        pairs.push([_this.quotedString(key), ':', value]);
+      }
+    });
+
+    var ret = this.generateList(pairs);
+    ret.prepend('{');
+    ret.add('}');
+    return ret;
+  },
+
+  generateList: function generateList(entries) {
+    var ret = this.empty();
+
+    for (var i = 0, len = entries.length; i < len; i++) {
+      if (i) {
+        ret.add(',');
+      }
+
+      ret.add(castChunk(entries[i], this));
+    }
+
+    return ret;
+  },
+
+  generateArray: function generateArray(entries) {
+    var ret = this.generateList(entries);
+    ret.prepend('[');
+    ret.add(']');
+
+    return ret;
+  }
+};
+
+exports['default'] = CodeGen;
+module.exports = exports['default'];
+
+});
+
+var javascriptCompiler = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+
+
+var _exception2 = _interopRequireDefault(exception);
+
+
+
+
+
+var _codeGen2 = _interopRequireDefault(codeGen);
+
+function Literal(value) {
+  this.value = value;
+}
+
+function JavaScriptCompiler() {}
+
+JavaScriptCompiler.prototype = {
+  // PUBLIC API: You can override these methods in a subclass to provide
+  // alternative compiled forms for name lookup and buffering semantics
+  nameLookup: function nameLookup(parent, name /*,  type */) {
+    return this.internalNameLookup(parent, name);
+  },
+  depthedLookup: function depthedLookup(name) {
+    return [this.aliasable('container.lookup'), '(depths, "', name, '")'];
+  },
+
+  compilerInfo: function compilerInfo() {
+    var revision = base.COMPILER_REVISION,
+        versions = base.REVISION_CHANGES[revision];
+    return [revision, versions];
+  },
+
+  appendToBuffer: function appendToBuffer(source, location, explicit) {
+    // Force a source as this simplifies the merge logic.
+    if (!utils$2.isArray(source)) {
+      source = [source];
+    }
+    source = this.source.wrap(source, location);
+
+    if (this.environment.isSimple) {
+      return ['return ', source, ';'];
+    } else if (explicit) {
+      // This is a case where the buffer operation occurs as a child of another
+      // construct, generally braces. We have to explicitly output these buffer
+      // operations to ensure that the emitted code goes in the correct location.
+      return ['buffer += ', source, ';'];
+    } else {
+      source.appendToBuffer = true;
+      return source;
+    }
+  },
+
+  initializeBuffer: function initializeBuffer() {
+    return this.quotedString('');
+  },
+  // END PUBLIC API
+  internalNameLookup: function internalNameLookup(parent, name) {
+    this.lookupPropertyFunctionIsUsed = true;
+    return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];
+  },
+
+  lookupPropertyFunctionIsUsed: false,
+
+  compile: function compile(environment, options, context, asObject) {
+    this.environment = environment;
+    this.options = options;
+    this.stringParams = this.options.stringParams;
+    this.trackIds = this.options.trackIds;
+    this.precompile = !asObject;
+
+    this.name = this.environment.name;
+    this.isChild = !!context;
+    this.context = context || {
+      decorators: [],
+      programs: [],
+      environments: []
+    };
+
+    this.preamble();
+
+    this.stackSlot = 0;
+    this.stackVars = [];
+    this.aliases = {};
+    this.registers = { list: [] };
+    this.hashes = [];
+    this.compileStack = [];
+    this.inlineStack = [];
+    this.blockParams = [];
+
+    this.compileChildren(environment, options);
+
+    this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;
+    this.useBlockParams = this.useBlockParams || environment.useBlockParams;
+
+    var opcodes = environment.opcodes,
+        opcode = undefined,
+        firstLoc = undefined,
+        i = undefined,
+        l = undefined;
+
+    for (i = 0, l = opcodes.length; i < l; i++) {
+      opcode = opcodes[i];
+
+      this.source.currentLocation = opcode.loc;
+      firstLoc = firstLoc || opcode.loc;
+      this[opcode.opcode].apply(this, opcode.args);
+    }
+
+    // Flush any trailing content that might be pending.
+    this.source.currentLocation = firstLoc;
+    this.pushSource('');
+
+    /* istanbul ignore next */
+    if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
+      throw new _exception2['default']('Compile completed with content left on stack');
+    }
+
+    if (!this.decorators.isEmpty()) {
+      this.useDecorators = true;
+
+      this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']);
+      this.decorators.push('return fn;');
+
+      if (asObject) {
+        this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);
+      } else {
+        this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n');
+        this.decorators.push('}\n');
+        this.decorators = this.decorators.merge();
+      }
+    } else {
+      this.decorators = undefined;
+    }
+
+    var fn = this.createFunctionContext(asObject);
+    if (!this.isChild) {
+      var ret = {
+        compiler: this.compilerInfo(),
+        main: fn
+      };
+
+      if (this.decorators) {
+        ret.main_d = this.decorators; // eslint-disable-line camelcase
+        ret.useDecorators = true;
+      }
+
+      var _context = this.context;
+      var programs = _context.programs;
+      var decorators = _context.decorators;
+
+      for (i = 0, l = programs.length; i < l; i++) {
+        if (programs[i]) {
+          ret[i] = programs[i];
+          if (decorators[i]) {
+            ret[i + '_d'] = decorators[i];
+            ret.useDecorators = true;
+          }
+        }
+      }
+
+      if (this.environment.usePartial) {
+        ret.usePartial = true;
+      }
+      if (this.options.data) {
+        ret.useData = true;
+      }
+      if (this.useDepths) {
+        ret.useDepths = true;
+      }
+      if (this.useBlockParams) {
+        ret.useBlockParams = true;
+      }
+      if (this.options.compat) {
+        ret.compat = true;
+      }
+
+      if (!asObject) {
+        ret.compiler = JSON.stringify(ret.compiler);
+
+        this.source.currentLocation = { start: { line: 1, column: 0 } };
+        ret = this.objectLiteral(ret);
+
+        if (options.srcName) {
+          ret = ret.toStringWithSourceMap({ file: options.destName });
+          ret.map = ret.map && ret.map.toString();
+        } else {
+          ret = ret.toString();
+        }
+      } else {
+        ret.compilerOptions = this.options;
+      }
+
+      return ret;
+    } else {
+      return fn;
+    }
+  },
+
+  preamble: function preamble() {
+    // track the last context pushed into place to allow skipping the
+    // getContext opcode when it would be a noop
+    this.lastContext = 0;
+    this.source = new _codeGen2['default'](this.options.srcName);
+    this.decorators = new _codeGen2['default'](this.options.srcName);
+  },
+
+  createFunctionContext: function createFunctionContext(asObject) {
+    // istanbul ignore next
+
+    var _this = this;
+
+    var varDeclarations = '';
+
+    var locals = this.stackVars.concat(this.registers.list);
+    if (locals.length > 0) {
+      varDeclarations += ', ' + locals.join(', ');
+    }
+
+    // Generate minimizer alias mappings
+    //
+    // When using true SourceNodes, this will update all references to the given alias
+    // as the source nodes are reused in situ. For the non-source node compilation mode,
+    // aliases will not be used, but this case is already being run on the client and
+    // we aren't concern about minimizing the template size.
+    var aliasCount = 0;
+    Object.keys(this.aliases).forEach(function (alias) {
+      var node = _this.aliases[alias];
+      if (node.children && node.referenceCount > 1) {
+        varDeclarations += ', alias' + ++aliasCount + '=' + alias;
+        node.children[0] = 'alias' + aliasCount;
+      }
+    });
+
+    if (this.lookupPropertyFunctionIsUsed) {
+      varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();
+    }
+
+    var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
+
+    if (this.useBlockParams || this.useDepths) {
+      params.push('blockParams');
+    }
+    if (this.useDepths) {
+      params.push('depths');
+    }
+
+    // Perform a second pass over the output to merge content when possible
+    var source = this.mergeSource(varDeclarations);
+
+    if (asObject) {
+      params.push(source);
+
+      return Function.apply(this, params);
+    } else {
+      return this.source.wrap(['function(', params.join(','), ') {\n  ', source, '}']);
+    }
+  },
+  mergeSource: function mergeSource(varDeclarations) {
+    var isSimple = this.environment.isSimple,
+        appendOnly = !this.forceBuffer,
+        appendFirst = undefined,
+        sourceSeen = undefined,
+        bufferStart = undefined,
+        bufferEnd = undefined;
+    this.source.each(function (line) {
+      if (line.appendToBuffer) {
+        if (bufferStart) {
+          line.prepend('  + ');
+        } else {
+          bufferStart = line;
+        }
+        bufferEnd = line;
+      } else {
+        if (bufferStart) {
+          if (!sourceSeen) {
+            appendFirst = true;
+          } else {
+            bufferStart.prepend('buffer += ');
+          }
+          bufferEnd.add(';');
+          bufferStart = bufferEnd = undefined;
+        }
+
+        sourceSeen = true;
+        if (!isSimple) {
+          appendOnly = false;
+        }
+      }
+    });
+
+    if (appendOnly) {
+      if (bufferStart) {
+        bufferStart.prepend('return ');
+        bufferEnd.add(';');
+      } else if (!sourceSeen) {
+        this.source.push('return "";');
+      }
+    } else {
+      varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());
+
+      if (bufferStart) {
+        bufferStart.prepend('return buffer + ');
+        bufferEnd.add(';');
+      } else {
+        this.source.push('return buffer;');
+      }
+    }
+
+    if (varDeclarations) {
+      this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n'));
+    }
+
+    return this.source.merge();
+  },
+
+  lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {
+    return '\n      lookupProperty = container.lookupProperty || function(parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n        return undefined\n    }\n    '.trim();
+  },
+
+  // [blockValue]
+  //
+  // On stack, before: hash, inverse, program, value
+  // On stack, after: return value of blockHelperMissing
+  //
+  // The purpose of this opcode is to take a block of the form
+  // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and
+  // replace it on the stack with the result of properly
+  // invoking blockHelperMissing.
+  blockValue: function blockValue(name) {
+    var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),
+        params = [this.contextName(0)];
+    this.setupHelperArgs(name, 0, params);
+
+    var blockName = this.popStack();
+    params.splice(1, 0, blockName);
+
+    this.push(this.source.functionCall(blockHelperMissing, 'call', params));
+  },
+
+  // [ambiguousBlockValue]
+  //
+  // On stack, before: hash, inverse, program, value
+  // Compiler value, before: lastHelper=value of last found helper, if any
+  // On stack, after, if no lastHelper: same as [blockValue]
+  // On stack, after, if lastHelper: value
+  ambiguousBlockValue: function ambiguousBlockValue() {
+    // We're being a bit cheeky and reusing the options value from the prior exec
+    var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),
+        params = [this.contextName(0)];
+    this.setupHelperArgs('', 0, params, true);
+
+    this.flushInline();
+
+    var current = this.topStack();
+    params.splice(1, 0, current);
+
+    this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);
+  },
+
+  // [appendContent]
+  //
+  // On stack, before: ...
+  // On stack, after: ...
+  //
+  // Appends the string value of `content` to the current buffer
+  appendContent: function appendContent(content) {
+    if (this.pendingContent) {
+      content = this.pendingContent + content;
+    } else {
+      this.pendingLocation = this.source.currentLocation;
+    }
+
+    this.pendingContent = content;
+  },
+
+  // [append]
+  //
+  // On stack, before: value, ...
+  // On stack, after: ...
+  //
+  // Coerces `value` to a String and appends it to the current buffer.
+  //
+  // If `value` is truthy, or 0, it is coerced into a string and appended
+  // Otherwise, the empty string is appended
+  append: function append() {
+    if (this.isInline()) {
+      this.replaceStack(function (current) {
+        return [' != null ? ', current, ' : ""'];
+      });
+
+      this.pushSource(this.appendToBuffer(this.popStack()));
+    } else {
+      var local = this.popStack();
+      this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);
+      if (this.environment.isSimple) {
+        this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']);
+      }
+    }
+  },
+
+  // [appendEscaped]
+  //
+  // On stack, before: value, ...
+  // On stack, after: ...
+  //
+  // Escape `value` and append it to the buffer
+  appendEscaped: function appendEscaped() {
+    this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));
+  },
+
+  // [getContext]
+  //
+  // On stack, before: ...
+  // On stack, after: ...
+  // Compiler value, after: lastContext=depth
+  //
+  // Set the value of the `lastContext` compiler value to the depth
+  getContext: function getContext(depth) {
+    this.lastContext = depth;
+  },
+
+  // [pushContext]
+  //
+  // On stack, before: ...
+  // On stack, after: currentContext, ...
+  //
+  // Pushes the value of the current context onto the stack.
+  pushContext: function pushContext() {
+    this.pushStackLiteral(this.contextName(this.lastContext));
+  },
+
+  // [lookupOnContext]
+  //
+  // On stack, before: ...
+  // On stack, after: currentContext[name], ...
+  //
+  // Looks up the value of `name` on the current context and pushes
+  // it onto the stack.
+  lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {
+    var i = 0;
+
+    if (!scoped && this.options.compat && !this.lastContext) {
+      // The depthed query is expected to handle the undefined logic for the root level that
+      // is implemented below, so we evaluate that directly in compat mode
+      this.push(this.depthedLookup(parts[i++]));
+    } else {
+      this.pushContext();
+    }
+
+    this.resolvePath('context', parts, i, falsy, strict);
+  },
+
+  // [lookupBlockParam]
+  //
+  // On stack, before: ...
+  // On stack, after: blockParam[name], ...
+  //
+  // Looks up the value of `parts` on the given block param and pushes
+  // it onto the stack.
+  lookupBlockParam: function lookupBlockParam(blockParamId, parts) {
+    this.useBlockParams = true;
+
+    this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);
+    this.resolvePath('context', parts, 1);
+  },
+
+  // [lookupData]
+  //
+  // On stack, before: ...
+  // On stack, after: data, ...
+  //
+  // Push the data lookup operator
+  lookupData: function lookupData(depth, parts, strict) {
+    if (!depth) {
+      this.pushStackLiteral('data');
+    } else {
+      this.pushStackLiteral('container.data(data, ' + depth + ')');
+    }
+
+    this.resolvePath('data', parts, 0, true, strict);
+  },
+
+  resolvePath: function resolvePath(type, parts, i, falsy, strict) {
+    // istanbul ignore next
+
+    var _this2 = this;
+
+    if (this.options.strict || this.options.assumeObjects) {
+      this.push(strictLookup(this.options.strict && strict, this, parts, type));
+      return;
+    }
+
+    var len = parts.length;
+    for (; i < len; i++) {
+      /* eslint-disable no-loop-func */
+      this.replaceStack(function (current) {
+        var lookup = _this2.nameLookup(current, parts[i], type);
+        // We want to ensure that zero and false are handled properly if the context (falsy flag)
+        // needs to have the special handling for these values.
+        if (!falsy) {
+          return [' != null ? ', lookup, ' : ', current];
+        } else {
+          // Otherwise we can use generic falsy handling
+          return [' && ', lookup];
+        }
+      });
+      /* eslint-enable no-loop-func */
+    }
+  },
+
+  // [resolvePossibleLambda]
+  //
+  // On stack, before: value, ...
+  // On stack, after: resolved value, ...
+  //
+  // If the `value` is a lambda, replace it on the stack by
+  // the return value of the lambda
+  resolvePossibleLambda: function resolvePossibleLambda() {
+    this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);
+  },
+
+  // [pushStringParam]
+  //
+  // On stack, before: ...
+  // On stack, after: string, currentContext, ...
+  //
+  // This opcode is designed for use in string mode, which
+  // provides the string value of a parameter along with its
+  // depth rather than resolving it immediately.
+  pushStringParam: function pushStringParam(string, type) {
+    this.pushContext();
+    this.pushString(type);
+
+    // If it's a subexpression, the string result
+    // will be pushed after this opcode.
+    if (type !== 'SubExpression') {
+      if (typeof string === 'string') {
+        this.pushString(string);
+      } else {
+        this.pushStackLiteral(string);
+      }
+    }
+  },
+
+  emptyHash: function emptyHash(omitEmpty) {
+    if (this.trackIds) {
+      this.push('{}'); // hashIds
+    }
+    if (this.stringParams) {
+      this.push('{}'); // hashContexts
+      this.push('{}'); // hashTypes
+    }
+    this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');
+  },
+  pushHash: function pushHash() {
+    if (this.hash) {
+      this.hashes.push(this.hash);
+    }
+    this.hash = { values: {}, types: [], contexts: [], ids: [] };
+  },
+  popHash: function popHash() {
+    var hash = this.hash;
+    this.hash = this.hashes.pop();
+
+    if (this.trackIds) {
+      this.push(this.objectLiteral(hash.ids));
+    }
+    if (this.stringParams) {
+      this.push(this.objectLiteral(hash.contexts));
+      this.push(this.objectLiteral(hash.types));
+    }
+
+    this.push(this.objectLiteral(hash.values));
+  },
+
+  // [pushString]
+  //
+  // On stack, before: ...
+  // On stack, after: quotedString(string), ...
+  //
+  // Push a quoted version of `string` onto the stack
+  pushString: function pushString(string) {
+    this.pushStackLiteral(this.quotedString(string));
+  },
+
+  // [pushLiteral]
+  //
+  // On stack, before: ...
+  // On stack, after: value, ...
+  //
+  // Pushes a value onto the stack. This operation prevents
+  // the compiler from creating a temporary variable to hold
+  // it.
+  pushLiteral: function pushLiteral(value) {
+    this.pushStackLiteral(value);
+  },
+
+  // [pushProgram]
+  //
+  // On stack, before: ...
+  // On stack, after: program(guid), ...
+  //
+  // Push a program expression onto the stack. This takes
+  // a compile-time guid and converts it into a runtime-accessible
+  // expression.
+  pushProgram: function pushProgram(guid) {
+    if (guid != null) {
+      this.pushStackLiteral(this.programExpression(guid));
+    } else {
+      this.pushStackLiteral(null);
+    }
+  },
+
+  // [registerDecorator]
+  //
+  // On stack, before: hash, program, params..., ...
+  // On stack, after: ...
+  //
+  // Pops off the decorator's parameters, invokes the decorator,
+  // and inserts the decorator into the decorators list.
+  registerDecorator: function registerDecorator(paramSize, name) {
+    var foundDecorator = this.nameLookup('decorators', name, 'decorator'),
+        options = this.setupHelperArgs(name, paramSize);
+
+    this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);
+  },
+
+  // [invokeHelper]
+  //
+  // On stack, before: hash, inverse, program, params..., ...
+  // On stack, after: result of helper invocation
+  //
+  // Pops off the helper's parameters, invokes the helper,
+  // and pushes the helper's return value onto the stack.
+  //
+  // If the helper is not found, `helperMissing` is called.
+  invokeHelper: function invokeHelper(paramSize, name, isSimple) {
+    var nonHelper = this.popStack(),
+        helper = this.setupHelper(paramSize, name);
+
+    var possibleFunctionCalls = [];
+
+    if (isSimple) {
+      // direct call to helper
+      possibleFunctionCalls.push(helper.name);
+    }
+    // call a function from the input object
+    possibleFunctionCalls.push(nonHelper);
+    if (!this.options.strict) {
+      possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));
+    }
+
+    var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];
+    var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);
+    this.push(functionCall);
+  },
+
+  itemsSeparatedBy: function itemsSeparatedBy(items, separator) {
+    var result = [];
+    result.push(items[0]);
+    for (var i = 1; i < items.length; i++) {
+      result.push(separator, items[i]);
+    }
+    return result;
+  },
+  // [invokeKnownHelper]
+  //
+  // On stack, before: hash, inverse, program, params..., ...
+  // On stack, after: result of helper invocation
+  //
+  // This operation is used when the helper is known to exist,
+  // so a `helperMissing` fallback is not required.
+  invokeKnownHelper: function invokeKnownHelper(paramSize, name) {
+    var helper = this.setupHelper(paramSize, name);
+    this.push(this.source.functionCall(helper.name, 'call', helper.callParams));
+  },
+
+  // [invokeAmbiguous]
+  //
+  // On stack, before: hash, inverse, program, params..., ...
+  // On stack, after: result of disambiguation
+  //
+  // This operation is used when an expression like `{{foo}}`
+  // is provided, but we don't know at compile-time whether it
+  // is a helper or a path.
+  //
+  // This operation emits more code than the other options,
+  // and can be avoided by passing the `knownHelpers` and
+  // `knownHelpersOnly` flags at compile-time.
+  invokeAmbiguous: function invokeAmbiguous(name, helperCall) {
+    this.useRegister('helper');
+
+    var nonHelper = this.popStack();
+
+    this.emptyHash();
+    var helper = this.setupHelper(0, name, helperCall);
+
+    var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
+
+    var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];
+    if (!this.options.strict) {
+      lookup[0] = '(helper = ';
+      lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));
+    }
+
+    this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);
+  },
+
+  // [invokePartial]
+  //
+  // On stack, before: context, ...
+  // On stack after: result of partial invocation
+  //
+  // This operation pops off a context, invokes a partial with that context,
+  // and pushes the result of the invocation back.
+  invokePartial: function invokePartial(isDynamic, name, indent) {
+    var params = [],
+        options = this.setupParams(name, 1, params);
+
+    if (isDynamic) {
+      name = this.popStack();
+      delete options.name;
+    }
+
+    if (indent) {
+      options.indent = JSON.stringify(indent);
+    }
+    options.helpers = 'helpers';
+    options.partials = 'partials';
+    options.decorators = 'container.decorators';
+
+    if (!isDynamic) {
+      params.unshift(this.nameLookup('partials', name, 'partial'));
+    } else {
+      params.unshift(name);
+    }
+
+    if (this.options.compat) {
+      options.depths = 'depths';
+    }
+    options = this.objectLiteral(options);
+    params.push(options);
+
+    this.push(this.source.functionCall('container.invokePartial', '', params));
+  },
+
+  // [assignToHash]
+  //
+  // On stack, before: value, ..., hash, ...
+  // On stack, after: ..., hash, ...
+  //
+  // Pops a value off the stack and assigns it to the current hash
+  assignToHash: function assignToHash(key) {
+    var value = this.popStack(),
+        context = undefined,
+        type = undefined,
+        id = undefined;
+
+    if (this.trackIds) {
+      id = this.popStack();
+    }
+    if (this.stringParams) {
+      type = this.popStack();
+      context = this.popStack();
+    }
+
+    var hash = this.hash;
+    if (context) {
+      hash.contexts[key] = context;
+    }
+    if (type) {
+      hash.types[key] = type;
+    }
+    if (id) {
+      hash.ids[key] = id;
+    }
+    hash.values[key] = value;
+  },
+
+  pushId: function pushId(type, name, child) {
+    if (type === 'BlockParam') {
+      this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));
+    } else if (type === 'PathExpression') {
+      this.pushString(name);
+    } else if (type === 'SubExpression') {
+      this.pushStackLiteral('true');
+    } else {
+      this.pushStackLiteral('null');
+    }
+  },
+
+  // HELPERS
+
+  compiler: JavaScriptCompiler,
+
+  compileChildren: function compileChildren(environment, options) {
+    var children = environment.children,
+        child = undefined,
+        compiler = undefined;
+
+    for (var i = 0, l = children.length; i < l; i++) {
+      child = children[i];
+      compiler = new this.compiler(); // eslint-disable-line new-cap
+
+      var existing = this.matchExistingProgram(child);
+
+      if (existing == null) {
+        this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
+        var index = this.context.programs.length;
+        child.index = index;
+        child.name = 'program' + index;
+        this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);
+        this.context.decorators[index] = compiler.decorators;
+        this.context.environments[index] = child;
+
+        this.useDepths = this.useDepths || compiler.useDepths;
+        this.useBlockParams = this.useBlockParams || compiler.useBlockParams;
+        child.useDepths = this.useDepths;
+        child.useBlockParams = this.useBlockParams;
+      } else {
+        child.index = existing.index;
+        child.name = 'program' + existing.index;
+
+        this.useDepths = this.useDepths || existing.useDepths;
+        this.useBlockParams = this.useBlockParams || existing.useBlockParams;
+      }
+    }
+  },
+  matchExistingProgram: function matchExistingProgram(child) {
+    for (var i = 0, len = this.context.environments.length; i < len; i++) {
+      var environment = this.context.environments[i];
+      if (environment && environment.equals(child)) {
+        return environment;
+      }
+    }
+  },
+
+  programExpression: function programExpression(guid) {
+    var child = this.environment.children[guid],
+        programParams = [child.index, 'data', child.blockParams];
+
+    if (this.useBlockParams || this.useDepths) {
+      programParams.push('blockParams');
+    }
+    if (this.useDepths) {
+      programParams.push('depths');
+    }
+
+    return 'container.program(' + programParams.join(', ') + ')';
+  },
+
+  useRegister: function useRegister(name) {
+    if (!this.registers[name]) {
+      this.registers[name] = true;
+      this.registers.list.push(name);
+    }
+  },
+
+  push: function push(expr) {
+    if (!(expr instanceof Literal)) {
+      expr = this.source.wrap(expr);
+    }
+
+    this.inlineStack.push(expr);
+    return expr;
+  },
+
+  pushStackLiteral: function pushStackLiteral(item) {
+    this.push(new Literal(item));
+  },
+
+  pushSource: function pushSource(source) {
+    if (this.pendingContent) {
+      this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));
+      this.pendingContent = undefined;
+    }
+
+    if (source) {
+      this.source.push(source);
+    }
+  },
+
+  replaceStack: function replaceStack(callback) {
+    var prefix = ['('],
+        stack = undefined,
+        createdStack = undefined,
+        usedLiteral = undefined;
+
+    /* istanbul ignore next */
+    if (!this.isInline()) {
+      throw new _exception2['default']('replaceStack on non-inline');
+    }
+
+    // We want to merge the inline statement into the replacement statement via ','
+    var top = this.popStack(true);
+
+    if (top instanceof Literal) {
+      // Literals do not need to be inlined
+      stack = [top.value];
+      prefix = ['(', stack];
+      usedLiteral = true;
+    } else {
+      // Get or create the current stack name for use by the inline
+      createdStack = true;
+      var _name = this.incrStack();
+
+      prefix = ['((', this.push(_name), ' = ', top, ')'];
+      stack = this.topStack();
+    }
+
+    var item = callback.call(this, stack);
+
+    if (!usedLiteral) {
+      this.popStack();
+    }
+    if (createdStack) {
+      this.stackSlot--;
+    }
+    this.push(prefix.concat(item, ')'));
+  },
+
+  incrStack: function incrStack() {
+    this.stackSlot++;
+    if (this.stackSlot > this.stackVars.length) {
+      this.stackVars.push('stack' + this.stackSlot);
+    }
+    return this.topStackName();
+  },
+  topStackName: function topStackName() {
+    return 'stack' + this.stackSlot;
+  },
+  flushInline: function flushInline() {
+    var inlineStack = this.inlineStack;
+    this.inlineStack = [];
+    for (var i = 0, len = inlineStack.length; i < len; i++) {
+      var entry = inlineStack[i];
+      /* istanbul ignore if */
+      if (entry instanceof Literal) {
+        this.compileStack.push(entry);
+      } else {
+        var stack = this.incrStack();
+        this.pushSource([stack, ' = ', entry, ';']);
+        this.compileStack.push(stack);
+      }
+    }
+  },
+  isInline: function isInline() {
+    return this.inlineStack.length;
+  },
+
+  popStack: function popStack(wrapped) {
+    var inline = this.isInline(),
+        item = (inline ? this.inlineStack : this.compileStack).pop();
+
+    if (!wrapped && item instanceof Literal) {
+      return item.value;
+    } else {
+      if (!inline) {
+        /* istanbul ignore next */
+        if (!this.stackSlot) {
+          throw new _exception2['default']('Invalid stack pop');
+        }
+        this.stackSlot--;
+      }
+      return item;
+    }
+  },
+
+  topStack: function topStack() {
+    var stack = this.isInline() ? this.inlineStack : this.compileStack,
+        item = stack[stack.length - 1];
+
+    /* istanbul ignore if */
+    if (item instanceof Literal) {
+      return item.value;
+    } else {
+      return item;
+    }
+  },
+
+  contextName: function contextName(context) {
+    if (this.useDepths && context) {
+      return 'depths[' + context + ']';
+    } else {
+      return 'depth' + context;
+    }
+  },
+
+  quotedString: function quotedString(str) {
+    return this.source.quotedString(str);
+  },
+
+  objectLiteral: function objectLiteral(obj) {
+    return this.source.objectLiteral(obj);
+  },
+
+  aliasable: function aliasable(name) {
+    var ret = this.aliases[name];
+    if (ret) {
+      ret.referenceCount++;
+      return ret;
+    }
+
+    ret = this.aliases[name] = this.source.wrap(name);
+    ret.aliasable = true;
+    ret.referenceCount = 1;
+
+    return ret;
+  },
+
+  setupHelper: function setupHelper(paramSize, name, blockHelper) {
+    var params = [],
+        paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);
+    var foundHelper = this.nameLookup('helpers', name, 'helper'),
+        callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');
+
+    return {
+      params: params,
+      paramsInit: paramsInit,
+      name: foundHelper,
+      callParams: [callContext].concat(params)
+    };
+  },
+
+  setupParams: function setupParams(helper, paramSize, params) {
+    var options = {},
+        contexts = [],
+        types = [],
+        ids = [],
+        objectArgs = !params,
+        param = undefined;
+
+    if (objectArgs) {
+      params = [];
+    }
+
+    options.name = this.quotedString(helper);
+    options.hash = this.popStack();
+
+    if (this.trackIds) {
+      options.hashIds = this.popStack();
+    }
+    if (this.stringParams) {
+      options.hashTypes = this.popStack();
+      options.hashContexts = this.popStack();
+    }
+
+    var inverse = this.popStack(),
+        program = this.popStack();
+
+    // Avoid setting fn and inverse if neither are set. This allows
+    // helpers to do a check for `if (options.fn)`
+    if (program || inverse) {
+      options.fn = program || 'container.noop';
+      options.inverse = inverse || 'container.noop';
+    }
+
+    // The parameters go on to the stack in order (making sure that they are evaluated in order)
+    // so we need to pop them off the stack in reverse order
+    var i = paramSize;
+    while (i--) {
+      param = this.popStack();
+      params[i] = param;
+
+      if (this.trackIds) {
+        ids[i] = this.popStack();
+      }
+      if (this.stringParams) {
+        types[i] = this.popStack();
+        contexts[i] = this.popStack();
+      }
+    }
+
+    if (objectArgs) {
+      options.args = this.source.generateArray(params);
+    }
+
+    if (this.trackIds) {
+      options.ids = this.source.generateArray(ids);
+    }
+    if (this.stringParams) {
+      options.types = this.source.generateArray(types);
+      options.contexts = this.source.generateArray(contexts);
+    }
+
+    if (this.options.data) {
+      options.data = 'data';
+    }
+    if (this.useBlockParams) {
+      options.blockParams = 'blockParams';
+    }
+    return options;
+  },
+
+  setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {
+    var options = this.setupParams(helper, paramSize, params);
+    options.loc = JSON.stringify(this.source.currentLocation);
+    options = this.objectLiteral(options);
+    if (useRegister) {
+      this.useRegister('options');
+      params.push('options');
+      return ['options=', options];
+    } else if (params) {
+      params.push(options);
+      return '';
+    } else {
+      return options;
+    }
+  }
+};
+
+(function () {
+  var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');
+
+  var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
+
+  for (var i = 0, l = reservedWords.length; i < l; i++) {
+    compilerWords[reservedWords[i]] = true;
+  }
+})();
+
+/**
+ * @deprecated May be removed in the next major version
+ */
+JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
+  return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
+};
+
+function strictLookup(requireTerminal, compiler, parts, type) {
+  var stack = compiler.popStack(),
+      i = 0,
+      len = parts.length;
+  if (requireTerminal) {
+    len--;
+  }
+
+  for (; i < len; i++) {
+    stack = compiler.nameLookup(stack, parts[i], type);
+  }
+
+  if (requireTerminal) {
+    return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];
+  } else {
+    return stack;
+  }
+}
+
+exports['default'] = JavaScriptCompiler;
+module.exports = exports['default'];
+
+});
+
+var handlebars = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _handlebarsRuntime2 = _interopRequireDefault(handlebars_runtime);
+
+// Compiler imports
+
+
+
+var _handlebarsCompilerAst2 = _interopRequireDefault(ast);
+
+
+
+
+
+
+
+var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(javascriptCompiler);
+
+
+
+var _handlebarsCompilerVisitor2 = _interopRequireDefault(visitor);
+
+
+
+var _handlebarsNoConflict2 = _interopRequireDefault(noConflict);
+
+var _create = _handlebarsRuntime2['default'].create;
+function create() {
+  var hb = _create();
+
+  hb.compile = function (input, options) {
+    return compiler.compile(input, options, hb);
+  };
+  hb.precompile = function (input, options) {
+    return compiler.precompile(input, options, hb);
+  };
+
+  hb.AST = _handlebarsCompilerAst2['default'];
+  hb.Compiler = compiler.Compiler;
+  hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];
+  hb.Parser = base$1.parser;
+  hb.parse = base$1.parse;
+  hb.parseWithoutProcessing = base$1.parseWithoutProcessing;
+
+  return hb;
+}
+
+var inst = create();
+inst.create = create;
+
+_handlebarsNoConflict2['default'](inst);
+
+inst.Visitor = _handlebarsCompilerVisitor2['default'];
+
+inst['default'] = inst;
+
+exports['default'] = inst;
+module.exports = exports['default'];
+
+});
+
+var printer = createCommonjsModule(function (module, exports) {
+
+exports.__esModule = true;
+exports.print = print;
+exports.PrintVisitor = PrintVisitor;
+// istanbul ignore next
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+
+
+var _visitor2 = _interopRequireDefault(visitor);
+
+function print(ast) {
+  return new PrintVisitor().accept(ast);
+}
+
+function PrintVisitor() {
+  this.padding = 0;
+}
+
+PrintVisitor.prototype = new _visitor2['default']();
+
+PrintVisitor.prototype.pad = function (string) {
+  var out = '';
+
+  for (var i = 0, l = this.padding; i < l; i++) {
+    out += '  ';
+  }
+
+  out += string + '\n';
+  return out;
+};
+
+PrintVisitor.prototype.Program = function (program) {
+  var out = '',
+      body = program.body,
+      i = undefined,
+      l = undefined;
+
+  if (program.blockParams) {
+    var blockParams = 'BLOCK PARAMS: [';
+    for (i = 0, l = program.blockParams.length; i < l; i++) {
+      blockParams += ' ' + program.blockParams[i];
+    }
+    blockParams += ' ]';
+    out += this.pad(blockParams);
+  }
+
+  for (i = 0, l = body.length; i < l; i++) {
+    out += this.accept(body[i]);
+  }
+
+  this.padding--;
+
+  return out;
+};
+
+PrintVisitor.prototype.MustacheStatement = function (mustache) {
+  return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');
+};
+PrintVisitor.prototype.Decorator = function (mustache) {
+  return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');
+};
+
+PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {
+  var out = '';
+
+  out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');
+  this.padding++;
+  out += this.pad(this.SubExpression(block));
+  if (block.program) {
+    out += this.pad('PROGRAM:');
+    this.padding++;
+    out += this.accept(block.program);
+    this.padding--;
+  }
+  if (block.inverse) {
+    if (block.program) {
+      this.padding++;
+    }
+    out += this.pad('{{^}}');
+    this.padding++;
+    out += this.accept(block.inverse);
+    this.padding--;
+    if (block.program) {
+      this.padding--;
+    }
+  }
+  this.padding--;
+
+  return out;
+};
+
+PrintVisitor.prototype.PartialStatement = function (partial) {
+  var content = 'PARTIAL:' + partial.name.original;
+  if (partial.params[0]) {
+    content += ' ' + this.accept(partial.params[0]);
+  }
+  if (partial.hash) {
+    content += ' ' + this.accept(partial.hash);
+  }
+  return this.pad('{{> ' + content + ' }}');
+};
+PrintVisitor.prototype.PartialBlockStatement = function (partial) {
+  var content = 'PARTIAL BLOCK:' + partial.name.original;
+  if (partial.params[0]) {
+    content += ' ' + this.accept(partial.params[0]);
+  }
+  if (partial.hash) {
+    content += ' ' + this.accept(partial.hash);
+  }
+
+  content += ' ' + this.pad('PROGRAM:');
+  this.padding++;
+  content += this.accept(partial.program);
+  this.padding--;
+
+  return this.pad('{{> ' + content + ' }}');
+};
+
+PrintVisitor.prototype.ContentStatement = function (content) {
+  return this.pad("CONTENT[ '" + content.value + "' ]");
+};
+
+PrintVisitor.prototype.CommentStatement = function (comment) {
+  return this.pad("{{! '" + comment.value + "' }}");
+};
+
+PrintVisitor.prototype.SubExpression = function (sexpr) {
+  var params = sexpr.params,
+      paramStrings = [],
+      hash = undefined;
+
+  for (var i = 0, l = params.length; i < l; i++) {
+    paramStrings.push(this.accept(params[i]));
+  }
+
+  params = '[' + paramStrings.join(', ') + ']';
+
+  hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';
+
+  return this.accept(sexpr.path) + ' ' + params + hash;
+};
+
+PrintVisitor.prototype.PathExpression = function (id) {
+  var path = id.parts.join('/');
+  return (id.data ? '@' : '') + 'PATH:' + path;
+};
+
+PrintVisitor.prototype.StringLiteral = function (string) {
+  return '"' + string.value + '"';
+};
+
+PrintVisitor.prototype.NumberLiteral = function (number) {
+  return 'NUMBER{' + number.value + '}';
+};
+
+PrintVisitor.prototype.BooleanLiteral = function (bool) {
+  return 'BOOLEAN{' + bool.value + '}';
+};
+
+PrintVisitor.prototype.UndefinedLiteral = function () {
+  return 'UNDEFINED';
+};
+
+PrintVisitor.prototype.NullLiteral = function () {
+  return 'NULL';
+};
+
+PrintVisitor.prototype.Hash = function (hash) {
+  var pairs = hash.pairs,
+      joinedPairs = [];
+
+  for (var i = 0, l = pairs.length; i < l; i++) {
+    joinedPairs.push(this.accept(pairs[i]));
+  }
+
+  return 'HASH{' + joinedPairs.join(', ') + '}';
+};
+PrintVisitor.prototype.HashPair = function (pair) {
+  return pair.key + '=' + this.accept(pair.value);
+};
+/* eslint-enable new-cap */
+
+});
+
+// USAGE:
+// var handlebars = require('handlebars');
+/* eslint-disable no-var */
+
+// var local = handlebars.create();
+
+var handlebars$1 = handlebars['default'];
+
+
+handlebars$1.PrintVisitor = printer.PrintVisitor;
+handlebars$1.print = printer.print;
+
+var lib = handlebars$1;
+
+// Publish a Node.js require() handler for .handlebars and .hbs files
+function extension(module, filename) {
+  var fs = fs__default['default'];
+  var templateString = fs.readFileSync(filename, 'utf8');
+  module.exports = handlebars$1.compile(templateString);
+}
+/* istanbul ignore else */
+if (typeof commonjsRequire !== 'undefined' && commonjsRequire.extensions) {
+  commonjsRequire.extensions['.handlebars'] = extension;
+  commonjsRequire.extensions['.hbs'] = extension;
+}
+
+var SearchModal = /** @class */ (function (_super) {
+    __extends(SearchModal, _super);
+    function SearchModal(app, plugin) {
+        var _this = _super.call(this, app) || this;
+        _this.limit = 50;
+        // How frequently should we check whether the library is still loading?
+        _this.loadingCheckInterval = 250;
+        _this.plugin = plugin;
+        _this.resultContainerEl.addClass('zoteroModalResults');
+        _this.inputEl.setAttribute('spellcheck', 'false');
+        _this.loadingEl = _this.resultContainerEl.parentElement.createEl('div', {
+            cls: 'zoteroModalLoading',
+        });
+        _this.loadingEl.createEl('div', { cls: 'zoteroModalLoadingAnimation' });
+        _this.loadingEl.createEl('p', {
+            text: 'Loading citation database. Please wait...',
+        });
+        return _this;
+    }
+    SearchModal.prototype.onOpen = function () {
+        var _this = this;
+        _super.prototype.onOpen.call(this);
+        this.checkLoading();
+        this.loadingCheckerHandle = setInterval(function () {
+            _this.checkLoading();
+        }, this.loadingCheckInterval);
+        // Don't immediately register keyevent listeners. If the modal was triggered
+        // by an "Enter" keystroke (e.g. via the Obsidian command dialog), this event
+        // will be received here erroneously.
+        setTimeout(function () {
+            _this.inputEl.addEventListener('keydown', function (ev) { return _this.onInputKeydown(ev); });
+            _this.inputEl.addEventListener('keyup', function (ev) { return _this.onInputKeyup(ev); });
+        }, 200);
+    };
+    SearchModal.prototype.onClose = function () {
+        if (this.loadingCheckerHandle) {
+            clearInterval(this.loadingCheckerHandle);
+        }
+    };
+    /**
+     * Check if the library is currently being loaded. If so, display animation
+     * and disable input. Otherwise hide animation and enable input.
+     */
+    SearchModal.prototype.checkLoading = function () {
+        if (this.plugin.isLibraryLoading) {
+            this.loadingEl.removeClass('d-none');
+            this.inputEl.disabled = true;
+            this.resultContainerEl.empty();
+        }
+        else {
+            this.loadingEl.addClass('d-none');
+            this.inputEl.disabled = false;
+            this.inputEl.focus();
+        }
+    };
+    SearchModal.prototype.getItems = function () {
+        if (this.plugin.isLibraryLoading) {
+            return [];
+        }
+        return Object.values(this.plugin.library.entries);
+    };
+    SearchModal.prototype.getItemText = function (item) {
+        return item.title + " " + item.authorString + " " + item.year;
+    };
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    SearchModal.prototype.onChooseItem = function (item, evt) {
+        this.plugin.openLiteratureNote(item.id, false).catch(console.error);
+    };
+    SearchModal.prototype.renderSuggestion = function (match, el) {
+        el.empty();
+        var entry = match.item;
+        var entryTitle = entry.title || '';
+        var container = el.createEl('div', { cls: 'zoteroResult' });
+        var titleEl = container.createEl('span', {
+            cls: 'zoteroTitle',
+        });
+        container.createEl('span', { cls: 'zoteroCitekey', text: entry.id });
+        var authorsCls = entry.authorString
+            ? 'zoteroAuthors'
+            : 'zoteroAuthors zoteroAuthorsEmpty';
+        var authorsEl = container.createEl('span', {
+            cls: authorsCls,
+        });
+        // Prepare to highlight string matches for each part of the search item.
+        // Compute offsets of each rendered element's content within the string
+        // returned by `getItemText`.
+        var allMatches = match.match.matches;
+        var authorStringOffset = 1 + entryTitle.length;
+        // Filter a match list to contain only the relevant matches for a given
+        // substring, and with match indices shifted relative to the start of that
+        // substring
+        var shiftMatches = function (matches, start, end) {
+            return matches
+                .map(function (match) {
+                var matchStart = match[0], matchEnd = match[1];
+                return [
+                    matchStart - start,
+                    Math.min(matchEnd - start, end),
+                ];
+            })
+                .filter(function (match) {
+                var matchStart = match[0], matchEnd = match[1];
+                return matchStart >= 0;
+            });
+        };
+        // Now highlight matched strings within each element
+        obsidian.renderMatches(titleEl, entryTitle, shiftMatches(allMatches, 0, entryTitle.length));
+        if (entry.authorString) {
+            obsidian.renderMatches(authorsEl, entry.authorString, shiftMatches(allMatches, authorStringOffset, authorStringOffset + entry.authorString.length));
+        }
+    };
+    SearchModal.prototype.onInputKeydown = function (ev) {
+        if (ev.key == 'Tab') {
+            ev.preventDefault();
+        }
+    };
+    SearchModal.prototype.onInputKeyup = function (ev) {
+        if (ev.key == 'Enter' || ev.key == 'Tab') {
+            this.chooser.useSelectedItem(ev);
+        }
+    };
+    return SearchModal;
+}(obsidian.FuzzySuggestModal));
+var OpenNoteModal = /** @class */ (function (_super) {
+    __extends(OpenNoteModal, _super);
+    function OpenNoteModal(app, plugin) {
+        var _this = _super.call(this, app, plugin) || this;
+        _this.setInstructions([
+            { command: '↑↓', purpose: 'to navigate' },
+            { command: '↔', purpose: 'to open literature note' },
+            { command: 'ctrl ↔', purpose: 'to open literature note in a new pane' },
+            { command: 'tab', purpose: 'open in Zotero' },
+            { command: 'shift tab', purpose: 'open PDF' },
+            { command: 'esc', purpose: 'to dismiss' },
+        ]);
+        return _this;
+    }
+    OpenNoteModal.prototype.onChooseItem = function (item, evt) {
+        if (evt instanceof MouseEvent || evt.key == 'Enter') {
+            var newPane = evt instanceof KeyboardEvent && evt.ctrlKey;
+            this.plugin.openLiteratureNote(item.id, newPane);
+        }
+        else if (evt.key == 'Tab') {
+            if (evt.shiftKey) {
+                var files = item.files || [];
+                var pdfPaths = files.filter(function (path) {
+                    return path.toLowerCase().endsWith('pdf');
+                });
+                if (pdfPaths.length == 0) {
+                    new obsidian.Notice('This reference has no associated PDF files.');
+                }
+                else {
+                    open("file://" + pdfPaths[0]);
+                }
+            }
+            else {
+                open(item.zoteroSelectURI);
+            }
+        }
+    };
+    return OpenNoteModal;
+}(SearchModal));
+var InsertNoteLinkModal = /** @class */ (function (_super) {
+    __extends(InsertNoteLinkModal, _super);
+    function InsertNoteLinkModal(app, plugin) {
+        var _this = _super.call(this, app, plugin) || this;
+        _this.setInstructions([
+            { command: '↑↓', purpose: 'to navigate' },
+            { command: '↔', purpose: 'to insert literature note reference' },
+            { command: 'esc', purpose: 'to dismiss' },
+        ]);
+        return _this;
+    }
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    InsertNoteLinkModal.prototype.onChooseItem = function (item, evt) {
+        this.plugin.insertLiteratureNoteLink(item.id).catch(console.error);
+    };
+    return InsertNoteLinkModal;
+}(SearchModal));
+var InsertNoteContentModal = /** @class */ (function (_super) {
+    __extends(InsertNoteContentModal, _super);
+    function InsertNoteContentModal(app, plugin) {
+        var _this = _super.call(this, app, plugin) || this;
+        _this.setInstructions([
+            { command: '↑↓', purpose: 'to navigate' },
+            {
+                command: '↔',
+                purpose: 'to insert literature note content in active pane',
+            },
+            { command: 'esc', purpose: 'to dismiss' },
+        ]);
+        return _this;
+    }
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    InsertNoteContentModal.prototype.onChooseItem = function (item, evt) {
+        this.plugin.insertLiteratureNoteContent(item.id).catch(console.error);
+    };
+    return InsertNoteContentModal;
+}(SearchModal));
+var InsertCitationModal = /** @class */ (function (_super) {
+    __extends(InsertCitationModal, _super);
+    function InsertCitationModal(app, plugin) {
+        var _this = _super.call(this, app, plugin) || this;
+        _this.setInstructions([
+            { command: '↑↓', purpose: 'to navigate' },
+            { command: '↔', purpose: 'to insert Markdown citation' },
+            { command: 'shift ↔', purpose: 'to insert secondary Markdown citation' },
+            { command: 'esc', purpose: 'to dismiss' },
+        ]);
+        return _this;
+    }
+    // eslint-disable-next-line @typescript-eslint/no-unused-vars
+    InsertCitationModal.prototype.onChooseItem = function (item, evt) {
+        var isAlternative = evt instanceof KeyboardEvent && evt.shiftKey;
+        this.plugin
+            .insertMarkdownCitation(item.id, isAlternative)
+            .catch(console.error);
+    };
+    return InsertCitationModal;
+}(SearchModal));
+
+/*
+ * Generated by PEG.js 0.10.0.
+ *
+ * http://pegjs.org/
+ */
+
+function peg$subclass(child, parent) {
+  function ctor() { this.constructor = child; }
+  ctor.prototype = parent.prototype;
+  child.prototype = new ctor();
+}
+
+function peg$SyntaxError(message, expected, found, location) {
+  this.message  = message;
+  this.expected = expected;
+  this.found    = found;
+  this.location = location;
+  this.name     = "SyntaxError";
+
+  if (typeof Error.captureStackTrace === "function") {
+    Error.captureStackTrace(this, peg$SyntaxError);
+  }
+}
+
+peg$subclass(peg$SyntaxError, Error);
+
+peg$SyntaxError.buildMessage = function(expected, found) {
+  var DESCRIBE_EXPECTATION_FNS = {
+        literal: function(expectation) {
+          return "\"" + literalEscape(expectation.text) + "\"";
+        },
+
+        "class": function(expectation) {
+          var escapedParts = "",
+              i;
+
+          for (i = 0; i < expectation.parts.length; i++) {
+            escapedParts += expectation.parts[i] instanceof Array
+              ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1])
+              : classEscape(expectation.parts[i]);
+          }
+
+          return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]";
+        },
+
+        any: function(expectation) {
+          return "any character";
+        },
+
+        end: function(expectation) {
+          return "end of input";
+        },
+
+        other: function(expectation) {
+          return expectation.description;
+        }
+      };
+
+  function hex(ch) {
+    return ch.charCodeAt(0).toString(16).toUpperCase();
+  }
+
+  function literalEscape(s) {
+    return s
+      .replace(/\\/g, '\\\\')
+      .replace(/"/g,  '\\"')
+      .replace(/\0/g, '\\0')
+      .replace(/\t/g, '\\t')
+      .replace(/\n/g, '\\n')
+      .replace(/\r/g, '\\r')
+      .replace(/[\x00-\x0F]/g,          function(ch) { return '\\x0' + hex(ch); })
+      .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x'  + hex(ch); });
+  }
+
+  function classEscape(s) {
+    return s
+      .replace(/\\/g, '\\\\')
+      .replace(/\]/g, '\\]')
+      .replace(/\^/g, '\\^')
+      .replace(/-/g,  '\\-')
+      .replace(/\0/g, '\\0')
+      .replace(/\t/g, '\\t')
+      .replace(/\n/g, '\\n')
+      .replace(/\r/g, '\\r')
+      .replace(/[\x00-\x0F]/g,          function(ch) { return '\\x0' + hex(ch); })
+      .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x'  + hex(ch); });
+  }
+
+  function describeExpectation(expectation) {
+    return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation);
+  }
+
+  function describeExpected(expected) {
+    var descriptions = new Array(expected.length),
+        i, j;
+
+    for (i = 0; i < expected.length; i++) {
+      descriptions[i] = describeExpectation(expected[i]);
+    }
+
+    descriptions.sort();
+
+    if (descriptions.length > 0) {
+      for (i = 1, j = 1; i < descriptions.length; i++) {
+        if (descriptions[i - 1] !== descriptions[i]) {
+          descriptions[j] = descriptions[i];
+          j++;
+        }
+      }
+      descriptions.length = j;
+    }
+
+    switch (descriptions.length) {
+      case 1:
+        return descriptions[0];
+
+      case 2:
+        return descriptions[0] + " or " + descriptions[1];
+
+      default:
+        return descriptions.slice(0, -1).join(", ")
+          + ", or "
+          + descriptions[descriptions.length - 1];
+    }
+  }
+
+  function describeFound(found) {
+    return found ? "\"" + literalEscape(found) + "\"" : "end of input";
+  }
+
+  return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found.";
+};
+
+function peg$parse(input, options) {
+  options = options !== void 0 ? options : {};
+
+  var peg$FAILED = {},
+
+      peg$startRuleFunctions = { Bibliography: peg$parseBibliography },
+      peg$startRuleFunction  = peg$parseBibliography,
+
+      peg$c0 = function(r) {
+          return {
+            kind: 'Bibliography',
+            loc: location(),
+            source: text(),
+            children: r,
+          }
+        },
+      peg$c1 = "@",
+      peg$c2 = peg$literalExpectation("@", false),
+      peg$c3 = "comment",
+      peg$c4 = peg$literalExpectation("comment", true),
+      peg$c5 = function(v) {
+          return {
+            kind: 'BracedComment',
+            loc: location(),
+            source: text(),
+            value: v.slice(1, -1),
+          }
+        },
+      peg$c6 = /^[^\n\r]/,
+      peg$c7 = peg$classExpectation(["\n", "\r"], true, false),
+      peg$c8 = /^[\n\r]/,
+      peg$c9 = peg$classExpectation(["\n", "\r"], false, false),
+      peg$c10 = function(v) {
+          return {
+            kind: 'LineComment',
+            loc: location(),
+            source: text(),
+            value: normalizeWhitespace(v),
+          }
+          },
+      peg$c11 = /^[^@]/,
+      peg$c12 = peg$classExpectation(["@"], true, false),
+      peg$c13 = function(v) {
+          return {
+            kind: 'NonEntryText',
+            loc: location(),
+            source: text(),
+            value: normalizeWhitespace(v),
+          }
+        },
+      peg$c14 = function(n) { return n; },
+      peg$c15 = "{",
+      peg$c16 = peg$literalExpectation("{", false),
+      peg$c17 = /^[^{}]/,
+      peg$c18 = peg$classExpectation(["{", "}"], true, false),
+      peg$c19 = "}",
+      peg$c20 = peg$literalExpectation("}", false),
+      peg$c21 = function(comment) { return '{' + comment.join('') + '}' },
+      peg$c22 = /^[A-Za-z]/,
+      peg$c23 = peg$classExpectation([["A", "Z"], ["a", "z"]], false, false),
+      peg$c24 = /^[({]/,
+      peg$c25 = peg$classExpectation(["(", "{"], false, false),
+      peg$c26 = /^[})]/,
+      peg$c27 = peg$classExpectation(["}", ")"], false, false),
+      peg$c28 = function(type, id, fields) {
+          return {
+            kind: 'Entry',
+            id: id || '',
+            type: type.toLowerCase(),
+            loc: location(),
+            source: text(),
+            fields: fields,
+          }
+        },
+      peg$c29 = "preamble",
+      peg$c30 = peg$literalExpectation("preamble", true),
+      peg$c31 = function(opener, v, closer) {
+          switch (opener + closer) {
+            case '{}':
+            case '()':
+              break
+            default:
+              throw new Error(`Unbalanced opener-closer for preamble: ${opener}...${closer}`)
+          }
+          return {
+            kind: 'PreambleExpression',
+            loc: location(),
+            source: text(),
+            value: v.reduce((a, b) => a.concat(b), []),
+          }
+        },
+      peg$c32 = "string",
+      peg$c33 = peg$literalExpectation("string", true),
+      peg$c34 = function(k, v) {
+          return {
+            kind: 'StringDeclaration',
+            loc: location(),
+            source: text(),
+            name: k,
+            value: v.reduce((a, b) => a.concat(b), []),
+          }
+        },
+      peg$c35 = /^[^ \t\r\n,]/,
+      peg$c36 = peg$classExpectation([" ", "\t", "\r", "\n", ","], true, false),
+      peg$c37 = ",",
+      peg$c38 = peg$literalExpectation(",", false),
+      peg$c39 = function(id) { return id; },
+      peg$c40 = function(name) { return isVerbatimField(name) && unnestFields.includes(name) },
+      peg$c41 = function(name, value) {
+          // because this was abused so much, many processors treat double-outer-braces as single
+          return {
+            kind: 'Field',
+            loc: location(),
+            source: text(),
+            name: name,
+            loc: location(),
+            value: [ protect(value) ]
+          }
+        },
+      peg$c42 = function(name) { return isVerbatimField(name) },
+      peg$c43 = function(name, value) {
+          return {
+            kind: 'Field',
+            loc: location(),
+            source: text(),
+            name: name,
+            loc: location(),
+            value: [ protect(value) ]
+          }
+        },
+      peg$c44 = function(name, value) {
+          // because this was abused so much, many processors treat double-outer-braces as single
+          if (unnestFields.includes(name) && Array.isArray(value) && value.length === 1 && value[0].kind === 'Block') {
+            if (options.unnestMode === 'preserve') {
+              value[0].case = 'preserve';
+            } else {
+              value = value[0].value;
+            }
+          }
+
+          return handle_markup_switches({
+            kind: 'Field',
+            loc: location(),
+            source: text(),
+            name: name,
+            value: value,
+          })
+        },
+      peg$c45 = /^[_:a-zA-Z0-9\-]/,
+      peg$c46 = peg$classExpectation(["_", ":", ["a", "z"], ["A", "Z"], ["0", "9"], "-"], false, false),
+      peg$c47 = function(name) { return name.toLowerCase() },
+      peg$c48 = "\"",
+      peg$c49 = peg$literalExpectation("\"", false),
+      peg$c50 = function(v) {
+          v = v || {
+            kind: 'Text',
+            loc: location(),
+            source: text(),
+            value: '',
+          };
+          v.mode = 'verbatim';
+          return basicTextConversions(v)
+        },
+      peg$c51 = function(v) {
+          return basicTextConversions({
+            kind: 'Text',
+            loc: location(),
+            source: text(),
+            value: v.join('').trim(),
+            mode: 'verbatim',
+          })
+        },
+      peg$c52 = function(v) { return v },
+      peg$c53 = function(v) { return '{' + v.join('') + '}' },
+      peg$c54 = function() { return math.set(false) },
+      peg$c55 = function(v) {
+          return v.reduce((a, b) => a.concat(b), []);
+        },
+      peg$c56 = function(v) { return v; },
+      peg$c57 = "{\\verb",
+      peg$c58 = peg$literalExpectation("{\\verb", false),
+      peg$c59 = /^[a-zA-Z]/,
+      peg$c60 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false),
+      peg$c61 = /^[^\^_${}\\]/,
+      peg$c62 = peg$classExpectation(["^", "_", "$", "{", "}", "\\"], true, false),
+      peg$c63 = function(v) {
+          return basicTextConversions({
+            kind: 'Text',
+            loc: location(),
+            source: text(),
+            value: normalizeWhitespace(v),
+            mode: math.on ? 'math' : 'text',
+          })
+        },
+      peg$c64 = /^[^\^_${}"\\]/,
+      peg$c65 = peg$classExpectation(["^", "_", "$", "{", "}", "\"", "\\"], true, false),
+      peg$c66 = /^[0-9]/,
+      peg$c67 = peg$classExpectation([["0", "9"]], false, false),
+      peg$c68 = function(v) {
+          return {
+            kind: 'Number',
+            loc: location(),
+            source: text(),
+            value: parseInt(v, 10),
+          }
+        },
+      peg$c69 = function(v) {
+          return {
+            kind: 'StringReference',
+            loc: location(),
+            source: text(),
+            name: v,
+          }
+        },
+      peg$c70 = "\\begin{",
+      peg$c71 = peg$literalExpectation("\\begin{", false),
+      peg$c72 = /^[a-zA-Z0-9]/,
+      peg$c73 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false),
+      peg$c74 = "\\end{",
+      peg$c75 = peg$literalExpectation("\\end{", false),
+      peg$c76 = function(env, v, cenv) { return env === cenv },
+      peg$c77 = function(env, v, cenv) {
+          if (markup[env]) {
+            return {
+              kind: 'Block',
+              loc: location(),
+              source: text(),
+              value: v,
+              markup: { [markup[env]]: true },
+            }
+          } else {
+            return {
+              kind: 'Environment',
+              loc: location(),
+              source: text(),
+              value: v,
+              env: env,
+            }
+          }
+        },
+      peg$c78 = "{\\",
+      peg$c79 = peg$literalExpectation("{\\", false),
+      peg$c80 = "\\",
+      peg$c81 = peg$literalExpectation("\\", false),
+      peg$c82 = /^[ij]/,
+      peg$c83 = peg$classExpectation(["i", "j"], false, false),
+      peg$c84 = function(mark, char) {
+          return {
+            kind: 'DiacriticCommand',
+            loc: location(),
+            source: text(),
+            mark: mark,
+            dotless: !!char[1],
+            character: char[1] || char[0],
+          }
+        },
+      peg$c85 = function(v) {
+            return basicTextConversions({
+              kind: 'Text',
+              loc: location(),
+              source: text(),
+              value: v.join('').trim(),
+              mode: 'verbatim',
+            })
+        },
+      peg$c86 = function(v) {
+          const block = {
+            kind: 'Block',
+            loc: location(),
+            source: text(),
+            value: v,
+            markup: {},
+            case: 'protect',
+          };
+
+          let leadingcmd = block.value.length && (block.value[0].kind.endsWith('Command') || block.value[0].kind === 'Environment') ? block.value[0] : null;
+          let leadingcmdblockarg = leadingcmd
+            && leadingcmd.kind === 'RegularCommand'
+            && leadingcmd.arguments.required.length
+            && leadingcmd.arguments.required[0].kind === 'Block'
+            && leadingcmd.arguments.required[0];
+
+          // https://github.com/retorquere/zotero-better-bibtex/issues/541#issuecomment-240156274
+          if (leadingcmd) {
+            delete block.case;
+
+            // command with a block cancels out case protection with containing block
+            // if a smallcaps block has set case to 'preserve' we want to keep this
+            if (leadingcmdblockarg && leadingcmdblockarg.case === 'protect') delete leadingcmdblockarg.case;
+
+            // \sl, \it etc
+            if (markup[leadingcmd.command]) {
+              block.markup[markup[leadingcmd.command]] = true;
+              block.value.shift();
+            }
+          }
+
+          return handle_markup_switches(block)
+        },
+      peg$c87 = function() { return !math.on },
+      peg$c88 = "$",
+      peg$c89 = peg$literalExpectation("$", false),
+      peg$c90 = "$$",
+      peg$c91 = peg$literalExpectation("$$", false),
+      peg$c92 = function(mode) { return math.set(true) },
+      peg$c93 = function(mode, v) { return math.set(false) },
+      peg$c94 = function(mode, v) {
+          return {
+            kind: mode == '$$' ? 'DisplayMath' : 'InlineMath',
+            loc: location(),
+            source: text(),
+            value: v,
+            case: 'protect',
+            markup: {},
+          }
+        },
+      peg$c95 = "%",
+      peg$c96 = peg$literalExpectation("%", false),
+      peg$c97 = /^[^\r\n]/,
+      peg$c98 = peg$classExpectation(["\r", "\n"], true, false),
+      peg$c99 = function(v) {
+          return {
+            kind: 'LineComment',
+            loc: location(),
+            source: text(),
+            value: v,
+          }
+        },
+      peg$c100 = /^[_\^]/,
+      peg$c101 = peg$classExpectation(["_", "^"], false, false),
+      peg$c102 = function(mode, v) {
+          if (v.kind === 'Block') v = v.value;
+
+          return {
+            kind: mode === '_' ? 'SubscriptCommand' : 'SuperscriptCommand',
+            loc: location(),
+            source: text(),
+            value: v,
+          }
+        },
+      peg$c103 = function(mark, v) {
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: mark,
+            arguments: {
+              optional: [],
+              required: [ protect(v) ],
+            },
+          }
+        },
+      peg$c104 = /^[^A-Za-z0-9\t\r\n]/,
+      peg$c105 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "\t", "\r", "\n"], true, false),
+      peg$c106 = function(v) {
+          return {
+            kind: 'SymbolCommand',
+            loc: location(),
+            source: text(),
+            command: v,
+          }
+        },
+      peg$c107 = "newcommand",
+      peg$c108 = peg$literalExpectation("newcommand", false),
+      peg$c109 = function(cmd, name) { return name.value.length == 1 && name.value[0].kind === 'RegularCommand' },
+      peg$c110 = function(cmd, name, optional, def) {
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: cmd,
+            arguments: {
+              optional: [],
+              required: [name, def],
+            },
+          }
+        },
+      peg$c111 = "begin",
+      peg$c112 = peg$literalExpectation("begin", false),
+      peg$c113 = "end",
+      peg$c114 = peg$literalExpectation("end", false),
+      peg$c115 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 2) },
+      peg$c116 = function(cmd, optional, req1, req2) {
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: cmd,
+            arguments: {
+              optional: optional,
+              required: [protect(req1), protect(req2)],
+            },
+          }
+        },
+      peg$c117 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 1) },
+      peg$c118 = function(cmd, optional, req) {
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: cmd,
+            arguments: {
+              optional: optional,
+              required: [protect(req)],
+            },
+          }
+        },
+      peg$c119 = function(cmd) { return (has_arguments[cmd] === 2) },
+      peg$c120 = function(cmd, optional, req1, req2) {
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: cmd,
+            arguments: {
+              optional: optional,
+              required: [req1, req2],
+            },
+          }
+        },
+      peg$c121 = function(cmd) { return (has_arguments[cmd] === 1) },
+      peg$c122 = function(cmd, optional, req) {
+          let m;
+          if (req.kind === 'Block') {
+            switch (cmd) {
+              case 'textsuperscript':
+              case 'sp':
+                req.markup.sup = true;
+                break
+              case 'textsubscript':
+              case 'sb':
+                req.markup.sub = true;
+                break
+              case 'textsc':
+                req.markup.smallCaps = true;
+                break
+              case 'enquote':
+              case 'mkbibquote':
+                req.markup.enquote = true;
+                break
+              case 'textbf':
+              case 'mkbibbold':
+                req.markup.bold = true;
+                break
+              case 'emph':
+              case 'textit':
+              case 'mkbibitalic':
+              case 'mkbibemph':
+                req.markup.italics = true;
+                break
+              default:
+                if (m = cmd.match(/^((sub)*)section$/)) {
+                  req.markup[`h${(m[1].length / 3) + 1}`] = true;
+                }
+            }
+          }
+
+          // ignore case stuff on bibcyr
+          if (cmd === 'bibcyr') delete req.case;
+
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: cmd,
+            arguments: {
+              optional: optional,
+              required: [req],
+            }
+          }
+        },
+      peg$c123 = function(cmd, optional) {
+          return {
+            kind: 'RegularCommand',
+            loc: location(),
+            source: text(),
+            command: cmd,
+            arguments: {
+              optional: optional,
+              required: [],
+            }
+          }
+        },
+      peg$c124 = "[",
+      peg$c125 = peg$literalExpectation("[", false),
+      peg$c126 = /^[^\]]/,
+      peg$c127 = peg$classExpectation(["]"], true, false),
+      peg$c128 = "]",
+      peg$c129 = peg$literalExpectation("]", false),
+      peg$c130 = function(v) {
+          return basicTextConversions({
+            kind: 'Text', // this isn't really correct but I don't need these right now
+            loc: location(),
+            source: text(),
+            value: v,
+            mode: math.on ? 'math' : 'text',
+          })
+        },
+      peg$c131 = /^[^ \t\^_${}\\]/,
+      peg$c132 = peg$classExpectation([" ", "\t", "^", "_", "$", "{", "}", "\\"], true, false),
+      peg$c133 = function(v) {
+          return basicTextConversions({
+            kind: 'Text',
+            loc: location(),
+            source: text(),
+            value: normalizeWhitespace([v]),
+            mode: math.on ? 'math' : 'text',
+          })
+        },
+      peg$c134 = /^[a-zA-Z\-_]/,
+      peg$c135 = peg$classExpectation([["a", "z"], ["A", "Z"], "-", "_"], false, false),
+      peg$c136 = /^[a-zA-Z0-9\-&_:]/,
+      peg$c137 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "-", "&", "_", ":"], false, false),
+      peg$c138 = /^['`"=~\^.]/,
+      peg$c139 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", "."], false, false),
+      peg$c140 = /^['`"=~\^.cbuvdrHk]/,
+      peg$c141 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", ".", "c", "b", "u", "v", "d", "r", "H", "k"], false, false),
+      peg$c142 = "=",
+      peg$c143 = peg$literalExpectation("=", false),
+      peg$c144 = "#",
+      peg$c145 = peg$literalExpectation("#", false),
+      peg$c146 = /^[\r\n]/,
+      peg$c147 = peg$classExpectation(["\r", "\n"], false, false),
+      peg$c149 = /^[ \t]/,
+      peg$c150 = peg$classExpectation([" ", "\t"], false, false),
+      peg$c151 = peg$otherExpectation("Optional Horizontal Whitespace"),
+      peg$c155 = /^[ \t\n\r]/,
+      peg$c156 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false),
+      peg$c157 = peg$otherExpectation("Optional Whitespace"),
+
+      peg$currPos          = 0,
+      peg$savedPos         = 0,
+      peg$posDetailsCache  = [{ line: 1, column: 1 }],
+      peg$maxFailPos       = 0,
+      peg$maxFailExpected  = [],
+      peg$silentFails      = 0,
+
+      peg$result;
+
+  if ("startRule" in options) {
+    if (!(options.startRule in peg$startRuleFunctions)) {
+      throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
+    }
+
+    peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
+  }
+
+  function text() {
+    return input.substring(peg$savedPos, peg$currPos);
+  }
+
+  function location() {
+    return peg$computeLocation(peg$savedPos, peg$currPos);
+  }
+
+  function peg$literalExpectation(text, ignoreCase) {
+    return { type: "literal", text: text, ignoreCase: ignoreCase };
+  }
+
+  function peg$classExpectation(parts, inverted, ignoreCase) {
+    return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase };
+  }
+
+  function peg$endExpectation() {
+    return { type: "end" };
+  }
+
+  function peg$otherExpectation(description) {
+    return { type: "other", description: description };
+  }
+
+  function peg$computePosDetails(pos) {
+    var details = peg$posDetailsCache[pos], p;
+
+    if (details) {
+      return details;
+    } else {
+      p = pos - 1;
+      while (!peg$posDetailsCache[p]) {
+        p--;
+      }
+
+      details = peg$posDetailsCache[p];
+      details = {
+        line:   details.line,
+        column: details.column
+      };
+
+      while (p < pos) {
+        if (input.charCodeAt(p) === 10) {
+          details.line++;
+          details.column = 1;
+        } else {
+          details.column++;
+        }
+
+        p++;
+      }
+
+      peg$posDetailsCache[pos] = details;
+      return details;
+    }
+  }
+
+  function peg$computeLocation(startPos, endPos) {
+    var startPosDetails = peg$computePosDetails(startPos),
+        endPosDetails   = peg$computePosDetails(endPos);
+
+    return {
+      start: {
+        offset: startPos,
+        line:   startPosDetails.line,
+        column: startPosDetails.column
+      },
+      end: {
+        offset: endPos,
+        line:   endPosDetails.line,
+        column: endPosDetails.column
+      }
+    };
+  }
+
+  function peg$fail(expected) {
+    if (peg$currPos < peg$maxFailPos) { return; }
+
+    if (peg$currPos > peg$maxFailPos) {
+      peg$maxFailPos = peg$currPos;
+      peg$maxFailExpected = [];
+    }
+
+    peg$maxFailExpected.push(expected);
+  }
+
+  function peg$buildStructuredError(expected, found, location) {
+    return new peg$SyntaxError(
+      peg$SyntaxError.buildMessage(expected, found),
+      expected,
+      found,
+      location
+    );
+  }
+
+  function peg$parseBibliography() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__();
+    if (s1 !== peg$FAILED) {
+      s2 = [];
+      s3 = peg$parseNode();
+      while (s3 !== peg$FAILED) {
+        s2.push(s3);
+        s3 = peg$parseNode();
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__();
+        if (s3 !== peg$FAILED) {
+          peg$savedPos = s0;
+          s1 = peg$c0(s2);
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseComment() {
+    var s0, s1, s2, s3, s4, s5, s6, s7;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 64) {
+      s1 = peg$c1;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c2); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__();
+      if (s2 !== peg$FAILED) {
+        if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) {
+          s3 = input.substr(peg$currPos, 7);
+          peg$currPos += 7;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c4); }
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = peg$parse__h();
+          if (s4 !== peg$FAILED) {
+            s5 = peg$parseBracedComment();
+            if (s5 !== peg$FAILED) {
+              peg$savedPos = s0;
+              s1 = peg$c5(s5);
+              s0 = s1;
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.charCodeAt(peg$currPos) === 64) {
+        s1 = peg$c1;
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c2); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = peg$parse__();
+        if (s2 !== peg$FAILED) {
+          if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) {
+            s3 = input.substr(peg$currPos, 7);
+            peg$currPos += 7;
+          } else {
+            s3 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c4); }
+          }
+          if (s3 !== peg$FAILED) {
+            s4 = peg$parse__h();
+            if (s4 !== peg$FAILED) {
+              s5 = [];
+              if (peg$c6.test(input.charAt(peg$currPos))) {
+                s6 = input.charAt(peg$currPos);
+                peg$currPos++;
+              } else {
+                s6 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c7); }
+              }
+              while (s6 !== peg$FAILED) {
+                s5.push(s6);
+                if (peg$c6.test(input.charAt(peg$currPos))) {
+                  s6 = input.charAt(peg$currPos);
+                  peg$currPos++;
+                } else {
+                  s6 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c7); }
+                }
+              }
+              if (s5 !== peg$FAILED) {
+                s6 = [];
+                if (peg$c8.test(input.charAt(peg$currPos))) {
+                  s7 = input.charAt(peg$currPos);
+                  peg$currPos++;
+                } else {
+                  s7 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c9); }
+                }
+                while (s7 !== peg$FAILED) {
+                  s6.push(s7);
+                  if (peg$c8.test(input.charAt(peg$currPos))) {
+                    s7 = input.charAt(peg$currPos);
+                    peg$currPos++;
+                  } else {
+                    s7 = peg$FAILED;
+                    if (peg$silentFails === 0) { peg$fail(peg$c9); }
+                  }
+                }
+                if (s6 !== peg$FAILED) {
+                  peg$savedPos = s0;
+                  s1 = peg$c10(s5);
+                  s0 = s1;
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+      if (s0 === peg$FAILED) {
+        s0 = peg$currPos;
+        s1 = peg$currPos;
+        if (peg$c11.test(input.charAt(peg$currPos))) {
+          s2 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s2 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c12); }
+        }
+        if (s2 !== peg$FAILED) {
+          s3 = [];
+          if (peg$c6.test(input.charAt(peg$currPos))) {
+            s4 = input.charAt(peg$currPos);
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c7); }
+          }
+          while (s4 !== peg$FAILED) {
+            s3.push(s4);
+            if (peg$c6.test(input.charAt(peg$currPos))) {
+              s4 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s4 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c7); }
+            }
+          }
+          if (s3 !== peg$FAILED) {
+            s2 = [s2, s3];
+            s1 = s2;
+          } else {
+            peg$currPos = s1;
+            s1 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s1;
+          s1 = peg$FAILED;
+        }
+        if (s1 !== peg$FAILED) {
+          s2 = [];
+          if (peg$c8.test(input.charAt(peg$currPos))) {
+            s3 = input.charAt(peg$currPos);
+            peg$currPos++;
+          } else {
+            s3 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c9); }
+          }
+          while (s3 !== peg$FAILED) {
+            s2.push(s3);
+            if (peg$c8.test(input.charAt(peg$currPos))) {
+              s3 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s3 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c9); }
+            }
+          }
+          if (s2 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c13(s1);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseNode() {
+    var s0, s1;
+
+    s0 = peg$currPos;
+    s1 = peg$parseComment();
+    if (s1 === peg$FAILED) {
+      s1 = peg$parsePreambleExpression();
+      if (s1 === peg$FAILED) {
+        s1 = peg$parseStringDeclaration();
+        if (s1 === peg$FAILED) {
+          s1 = peg$parseEntry();
+        }
+      }
+    }
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = s0;
+      s1 = peg$c14(s1);
+    }
+    s0 = s1;
+
+    return s0;
+  }
+
+  function peg$parseBracedComment() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 123) {
+      s1 = peg$c15;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c16); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = [];
+      if (peg$c17.test(input.charAt(peg$currPos))) {
+        s3 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s3 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c18); }
+      }
+      if (s3 === peg$FAILED) {
+        s3 = peg$parseBracedComment();
+      }
+      while (s3 !== peg$FAILED) {
+        s2.push(s3);
+        if (peg$c17.test(input.charAt(peg$currPos))) {
+          s3 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c18); }
+        }
+        if (s3 === peg$FAILED) {
+          s3 = peg$parseBracedComment();
+        }
+      }
+      if (s2 !== peg$FAILED) {
+        if (input.charCodeAt(peg$currPos) === 125) {
+          s3 = peg$c19;
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c20); }
+        }
+        if (s3 !== peg$FAILED) {
+          peg$savedPos = s0;
+          s1 = peg$c21(s2);
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseEntry() {
+    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 64) {
+      s1 = peg$c1;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c2); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__();
+      if (s2 !== peg$FAILED) {
+        s3 = peg$currPos;
+        s4 = [];
+        if (peg$c22.test(input.charAt(peg$currPos))) {
+          s5 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s5 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c23); }
+        }
+        if (s5 !== peg$FAILED) {
+          while (s5 !== peg$FAILED) {
+            s4.push(s5);
+            if (peg$c22.test(input.charAt(peg$currPos))) {
+              s5 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c23); }
+            }
+          }
+        } else {
+          s4 = peg$FAILED;
+        }
+        if (s4 !== peg$FAILED) {
+          s3 = input.substring(s3, peg$currPos);
+        } else {
+          s3 = s4;
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = peg$parse__();
+          if (s4 !== peg$FAILED) {
+            if (peg$c24.test(input.charAt(peg$currPos))) {
+              s5 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c25); }
+            }
+            if (s5 !== peg$FAILED) {
+              s6 = peg$parse__();
+              if (s6 !== peg$FAILED) {
+                s7 = peg$parseEntryId();
+                if (s7 === peg$FAILED) {
+                  s7 = null;
+                }
+                if (s7 !== peg$FAILED) {
+                  s8 = peg$parse__();
+                  if (s8 !== peg$FAILED) {
+                    s9 = [];
+                    s10 = peg$parseField();
+                    while (s10 !== peg$FAILED) {
+                      s9.push(s10);
+                      s10 = peg$parseField();
+                    }
+                    if (s9 !== peg$FAILED) {
+                      s10 = peg$parse__();
+                      if (s10 !== peg$FAILED) {
+                        if (peg$c26.test(input.charAt(peg$currPos))) {
+                          s11 = input.charAt(peg$currPos);
+                          peg$currPos++;
+                        } else {
+                          s11 = peg$FAILED;
+                          if (peg$silentFails === 0) { peg$fail(peg$c27); }
+                        }
+                        if (s11 !== peg$FAILED) {
+                          s12 = peg$parse__();
+                          if (s12 !== peg$FAILED) {
+                            peg$savedPos = s0;
+                            s1 = peg$c28(s3, s7, s9);
+                            s0 = s1;
+                          } else {
+                            peg$currPos = s0;
+                            s0 = peg$FAILED;
+                          }
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parsePreambleExpression() {
+    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 64) {
+      s1 = peg$c1;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c2); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__();
+      if (s2 !== peg$FAILED) {
+        if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) {
+          s3 = input.substr(peg$currPos, 8);
+          peg$currPos += 8;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c30); }
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = peg$parse__();
+          if (s4 !== peg$FAILED) {
+            if (peg$c24.test(input.charAt(peg$currPos))) {
+              s5 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c25); }
+            }
+            if (s5 !== peg$FAILED) {
+              s6 = peg$parse__();
+              if (s6 !== peg$FAILED) {
+                s7 = [];
+                s8 = peg$parseEnvironment();
+                if (s8 === peg$FAILED) {
+                  s8 = peg$parseBlock();
+                  if (s8 === peg$FAILED) {
+                    s8 = peg$parseMath();
+                    if (s8 === peg$FAILED) {
+                      s8 = peg$parseCommand();
+                      if (s8 === peg$FAILED) {
+                        s8 = peg$parseText();
+                      }
+                    }
+                  }
+                }
+                while (s8 !== peg$FAILED) {
+                  s7.push(s8);
+                  s8 = peg$parseEnvironment();
+                  if (s8 === peg$FAILED) {
+                    s8 = peg$parseBlock();
+                    if (s8 === peg$FAILED) {
+                      s8 = peg$parseMath();
+                      if (s8 === peg$FAILED) {
+                        s8 = peg$parseCommand();
+                        if (s8 === peg$FAILED) {
+                          s8 = peg$parseText();
+                        }
+                      }
+                    }
+                  }
+                }
+                if (s7 !== peg$FAILED) {
+                  s8 = peg$parse__();
+                  if (s8 !== peg$FAILED) {
+                    if (peg$c26.test(input.charAt(peg$currPos))) {
+                      s9 = input.charAt(peg$currPos);
+                      peg$currPos++;
+                    } else {
+                      s9 = peg$FAILED;
+                      if (peg$silentFails === 0) { peg$fail(peg$c27); }
+                    }
+                    if (s9 !== peg$FAILED) {
+                      s10 = peg$parse__();
+                      if (s10 !== peg$FAILED) {
+                        peg$savedPos = s0;
+                        s1 = peg$c31(s5, s7, s9);
+                        s0 = s1;
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseStringDeclaration() {
+    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 64) {
+      s1 = peg$c1;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c2); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__();
+      if (s2 !== peg$FAILED) {
+        if (input.substr(peg$currPos, 6).toLowerCase() === peg$c32) {
+          s3 = input.substr(peg$currPos, 6);
+          peg$currPos += 6;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c33); }
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = peg$parse__();
+          if (s4 !== peg$FAILED) {
+            if (peg$c24.test(input.charAt(peg$currPos))) {
+              s5 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c25); }
+            }
+            if (s5 !== peg$FAILED) {
+              s6 = peg$parse__();
+              if (s6 !== peg$FAILED) {
+                s7 = peg$parseVariableName();
+                if (s7 !== peg$FAILED) {
+                  s8 = peg$parseFieldSeparator();
+                  if (s8 !== peg$FAILED) {
+                    s9 = [];
+                    s10 = peg$parseRegularValue();
+                    if (s10 !== peg$FAILED) {
+                      while (s10 !== peg$FAILED) {
+                        s9.push(s10);
+                        s10 = peg$parseRegularValue();
+                      }
+                    } else {
+                      s9 = peg$FAILED;
+                    }
+                    if (s9 !== peg$FAILED) {
+                      s10 = peg$parse__();
+                      if (s10 !== peg$FAILED) {
+                        if (peg$c26.test(input.charAt(peg$currPos))) {
+                          s11 = input.charAt(peg$currPos);
+                          peg$currPos++;
+                        } else {
+                          s11 = peg$FAILED;
+                          if (peg$silentFails === 0) { peg$fail(peg$c27); }
+                        }
+                        if (s11 !== peg$FAILED) {
+                          s12 = peg$parse__();
+                          if (s12 !== peg$FAILED) {
+                            peg$savedPos = s0;
+                            s1 = peg$c34(s7, s9);
+                            s0 = s1;
+                          } else {
+                            peg$currPos = s0;
+                            s0 = peg$FAILED;
+                          }
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseEntryId() {
+    var s0, s1, s2, s3, s4;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__();
+    if (s1 !== peg$FAILED) {
+      s2 = peg$currPos;
+      s3 = [];
+      if (peg$c35.test(input.charAt(peg$currPos))) {
+        s4 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s4 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c36); }
+      }
+      while (s4 !== peg$FAILED) {
+        s3.push(s4);
+        if (peg$c35.test(input.charAt(peg$currPos))) {
+          s4 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s4 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c36); }
+        }
+      }
+      if (s3 !== peg$FAILED) {
+        s2 = input.substring(s2, peg$currPos);
+      } else {
+        s2 = s3;
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__();
+        if (s3 !== peg$FAILED) {
+          if (input.charCodeAt(peg$currPos) === 44) {
+            s4 = peg$c37;
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c38); }
+          }
+          if (s4 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c39(s2);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseField() {
+    var s0, s1, s2, s3, s4, s5, s6, s7, s8;
+
+    s0 = peg$currPos;
+    s1 = peg$parseFieldName();
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = peg$currPos;
+      s2 = peg$c40(s1);
+      if (s2) {
+        s2 = void 0;
+      } else {
+        s2 = peg$FAILED;
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parseFieldSeparator();
+        if (s3 !== peg$FAILED) {
+          if (input.charCodeAt(peg$currPos) === 123) {
+            s4 = peg$c15;
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c16); }
+          }
+          if (s4 !== peg$FAILED) {
+            s5 = peg$currPos;
+            peg$silentFails++;
+            if (input.charCodeAt(peg$currPos) === 123) {
+              s6 = peg$c15;
+              peg$currPos++;
+            } else {
+              s6 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c16); }
+            }
+            peg$silentFails--;
+            if (s6 !== peg$FAILED) {
+              peg$currPos = s5;
+              s5 = void 0;
+            } else {
+              s5 = peg$FAILED;
+            }
+            if (s5 !== peg$FAILED) {
+              s6 = peg$parseVerbatimFieldValue();
+              if (s6 !== peg$FAILED) {
+                if (input.charCodeAt(peg$currPos) === 125) {
+                  s7 = peg$c19;
+                  peg$currPos++;
+                } else {
+                  s7 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c20); }
+                }
+                if (s7 !== peg$FAILED) {
+                  s8 = peg$parseFieldTerminator();
+                  if (s8 !== peg$FAILED) {
+                    peg$savedPos = s0;
+                    s1 = peg$c41(s1, s6);
+                    s0 = s1;
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      s1 = peg$parseFieldName();
+      if (s1 !== peg$FAILED) {
+        peg$savedPos = peg$currPos;
+        s2 = peg$c42(s1);
+        if (s2) {
+          s2 = void 0;
+        } else {
+          s2 = peg$FAILED;
+        }
+        if (s2 !== peg$FAILED) {
+          s3 = peg$parseFieldSeparator();
+          if (s3 !== peg$FAILED) {
+            s4 = peg$parseVerbatimFieldValue();
+            if (s4 !== peg$FAILED) {
+              s5 = peg$parseFieldTerminator();
+              if (s5 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c43(s1, s4);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+      if (s0 === peg$FAILED) {
+        s0 = peg$currPos;
+        s1 = peg$parseFieldName();
+        if (s1 !== peg$FAILED) {
+          s2 = peg$parseFieldSeparator();
+          if (s2 !== peg$FAILED) {
+            s3 = peg$parseFieldValue();
+            if (s3 !== peg$FAILED) {
+              s4 = peg$parseFieldTerminator();
+              if (s4 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c44(s1, s3);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseFieldName() {
+    var s0, s1, s2, s3, s4;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__();
+    if (s1 !== peg$FAILED) {
+      s2 = peg$currPos;
+      s3 = [];
+      if (peg$c45.test(input.charAt(peg$currPos))) {
+        s4 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s4 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c46); }
+      }
+      if (s4 !== peg$FAILED) {
+        while (s4 !== peg$FAILED) {
+          s3.push(s4);
+          if (peg$c45.test(input.charAt(peg$currPos))) {
+            s4 = input.charAt(peg$currPos);
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c46); }
+          }
+        }
+      } else {
+        s3 = peg$FAILED;
+      }
+      if (s3 !== peg$FAILED) {
+        s2 = input.substring(s2, peg$currPos);
+      } else {
+        s2 = s3;
+      }
+      if (s2 !== peg$FAILED) {
+        peg$savedPos = s0;
+        s1 = peg$c47(s2);
+        s0 = s1;
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseVerbatimFieldValue() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 34) {
+      s1 = peg$c48;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c49); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parseTextNoQuotes();
+      if (s2 === peg$FAILED) {
+        s2 = null;
+      }
+      if (s2 !== peg$FAILED) {
+        if (input.charCodeAt(peg$currPos) === 34) {
+          s3 = peg$c48;
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c49); }
+        }
+        if (s3 !== peg$FAILED) {
+          peg$savedPos = s0;
+          s1 = peg$c50(s2);
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.charCodeAt(peg$currPos) === 123) {
+        s1 = peg$c15;
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c16); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = [];
+        s3 = peg$parseVerbatimText();
+        while (s3 !== peg$FAILED) {
+          s2.push(s3);
+          s3 = peg$parseVerbatimText();
+        }
+        if (s2 !== peg$FAILED) {
+          if (input.charCodeAt(peg$currPos) === 125) {
+            s3 = peg$c19;
+            peg$currPos++;
+          } else {
+            s3 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c20); }
+          }
+          if (s3 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c51(s2);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseVerbatimText() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    s1 = peg$currPos;
+    s2 = [];
+    if (peg$c17.test(input.charAt(peg$currPos))) {
+      s3 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s3 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c18); }
+    }
+    if (s3 !== peg$FAILED) {
+      while (s3 !== peg$FAILED) {
+        s2.push(s3);
+        if (peg$c17.test(input.charAt(peg$currPos))) {
+          s3 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c18); }
+        }
+      }
+    } else {
+      s2 = peg$FAILED;
+    }
+    if (s2 !== peg$FAILED) {
+      s1 = input.substring(s1, peg$currPos);
+    } else {
+      s1 = s2;
+    }
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = s0;
+      s1 = peg$c52(s1);
+    }
+    s0 = s1;
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.charCodeAt(peg$currPos) === 123) {
+        s1 = peg$c15;
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c16); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = [];
+        s3 = peg$parseVerbatimText();
+        while (s3 !== peg$FAILED) {
+          s2.push(s3);
+          s3 = peg$parseVerbatimText();
+        }
+        if (s2 !== peg$FAILED) {
+          if (input.charCodeAt(peg$currPos) === 125) {
+            s3 = peg$c19;
+            peg$currPos++;
+          } else {
+            s3 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c20); }
+          }
+          if (s3 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c53(s2);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseFieldValue() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$parseNumber();
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      peg$savedPos = peg$currPos;
+      s1 = peg$c54();
+      if (s1) {
+        s1 = void 0;
+      } else {
+        s1 = peg$FAILED;
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = [];
+        s3 = peg$parseRegularValue();
+        if (s3 === peg$FAILED) {
+          s3 = peg$parseStringValue();
+        }
+        while (s3 !== peg$FAILED) {
+          s2.push(s3);
+          s3 = peg$parseRegularValue();
+          if (s3 === peg$FAILED) {
+            s3 = peg$parseStringValue();
+          }
+        }
+        if (s2 !== peg$FAILED) {
+          peg$savedPos = s0;
+          s1 = peg$c55(s2);
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseRegularValue() {
+    var s0, s1, s2, s3, s4, s5;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 34) {
+      s1 = peg$c48;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c49); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = [];
+      s3 = peg$parseEnvironment();
+      if (s3 === peg$FAILED) {
+        s3 = peg$parseBlock();
+        if (s3 === peg$FAILED) {
+          s3 = peg$parseMath();
+          if (s3 === peg$FAILED) {
+            s3 = peg$parseCommand();
+            if (s3 === peg$FAILED) {
+              s3 = peg$parseTextNoQuotes();
+            }
+          }
+        }
+      }
+      while (s3 !== peg$FAILED) {
+        s2.push(s3);
+        s3 = peg$parseEnvironment();
+        if (s3 === peg$FAILED) {
+          s3 = peg$parseBlock();
+          if (s3 === peg$FAILED) {
+            s3 = peg$parseMath();
+            if (s3 === peg$FAILED) {
+              s3 = peg$parseCommand();
+              if (s3 === peg$FAILED) {
+                s3 = peg$parseTextNoQuotes();
+              }
+            }
+          }
+        }
+      }
+      if (s2 !== peg$FAILED) {
+        if (input.charCodeAt(peg$currPos) === 34) {
+          s3 = peg$c48;
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c49); }
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = peg$parseConcat();
+          if (s4 === peg$FAILED) {
+            s4 = null;
+          }
+          if (s4 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c56(s2);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.substr(peg$currPos, 6) === peg$c57) {
+        s1 = peg$c57;
+        peg$currPos += 6;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c58); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = peg$currPos;
+        peg$silentFails++;
+        if (peg$c59.test(input.charAt(peg$currPos))) {
+          s3 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c60); }
+        }
+        peg$silentFails--;
+        if (s3 === peg$FAILED) {
+          s2 = void 0;
+        } else {
+          peg$currPos = s2;
+          s2 = peg$FAILED;
+        }
+        if (s2 !== peg$FAILED) {
+          s3 = [];
+          s4 = peg$parseVerbatimText();
+          while (s4 !== peg$FAILED) {
+            s3.push(s4);
+            s4 = peg$parseVerbatimText();
+          }
+          if (s3 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 125) {
+              s4 = peg$c19;
+              peg$currPos++;
+            } else {
+              s4 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c20); }
+            }
+            if (s4 !== peg$FAILED) {
+              s5 = peg$parseConcat();
+              if (s5 === peg$FAILED) {
+                s5 = null;
+              }
+              if (s5 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c51(s3);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+      if (s0 === peg$FAILED) {
+        s0 = peg$currPos;
+        if (input.charCodeAt(peg$currPos) === 123) {
+          s1 = peg$c15;
+          peg$currPos++;
+        } else {
+          s1 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c16); }
+        }
+        if (s1 !== peg$FAILED) {
+          s2 = [];
+          s3 = peg$parseEnvironment();
+          if (s3 === peg$FAILED) {
+            s3 = peg$parseBlock();
+            if (s3 === peg$FAILED) {
+              s3 = peg$parseMath();
+              if (s3 === peg$FAILED) {
+                s3 = peg$parseCommand();
+                if (s3 === peg$FAILED) {
+                  s3 = peg$parseText();
+                }
+              }
+            }
+          }
+          while (s3 !== peg$FAILED) {
+            s2.push(s3);
+            s3 = peg$parseEnvironment();
+            if (s3 === peg$FAILED) {
+              s3 = peg$parseBlock();
+              if (s3 === peg$FAILED) {
+                s3 = peg$parseMath();
+                if (s3 === peg$FAILED) {
+                  s3 = peg$parseCommand();
+                  if (s3 === peg$FAILED) {
+                    s3 = peg$parseText();
+                  }
+                }
+              }
+            }
+          }
+          if (s2 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 125) {
+              s3 = peg$c19;
+              peg$currPos++;
+            } else {
+              s3 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c20); }
+            }
+            if (s3 !== peg$FAILED) {
+              s4 = peg$parseConcat();
+              if (s4 === peg$FAILED) {
+                s4 = null;
+              }
+              if (s4 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c56(s2);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+        if (s0 === peg$FAILED) {
+          s0 = peg$currPos;
+          s1 = peg$parseStringReference();
+          if (s1 !== peg$FAILED) {
+            s2 = peg$parseConcat();
+            if (s2 === peg$FAILED) {
+              s2 = null;
+            }
+            if (s2 !== peg$FAILED) {
+              peg$savedPos = s0;
+              s1 = peg$c56(s1);
+              s0 = s1;
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseStringValue() {
+    var s0, s1, s2;
+
+    s0 = peg$currPos;
+    s1 = peg$parseStringReference();
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parseConcat();
+      if (s2 === peg$FAILED) {
+        s2 = null;
+      }
+      if (s2 !== peg$FAILED) {
+        peg$savedPos = s0;
+        s1 = peg$c56(s1);
+        s0 = s1;
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseText() {
+    var s0, s1, s2;
+
+    s0 = peg$currPos;
+    s1 = [];
+    if (peg$c61.test(input.charAt(peg$currPos))) {
+      s2 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s2 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c62); }
+    }
+    if (s2 !== peg$FAILED) {
+      while (s2 !== peg$FAILED) {
+        s1.push(s2);
+        if (peg$c61.test(input.charAt(peg$currPos))) {
+          s2 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s2 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c62); }
+        }
+      }
+    } else {
+      s1 = peg$FAILED;
+    }
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = s0;
+      s1 = peg$c63(s1);
+    }
+    s0 = s1;
+
+    return s0;
+  }
+
+  function peg$parseTextNoQuotes() {
+    var s0, s1, s2;
+
+    s0 = peg$currPos;
+    s1 = [];
+    if (peg$c64.test(input.charAt(peg$currPos))) {
+      s2 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s2 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c65); }
+    }
+    if (s2 !== peg$FAILED) {
+      while (s2 !== peg$FAILED) {
+        s1.push(s2);
+        if (peg$c64.test(input.charAt(peg$currPos))) {
+          s2 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s2 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c65); }
+        }
+      }
+    } else {
+      s1 = peg$FAILED;
+    }
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = s0;
+      s1 = peg$c63(s1);
+    }
+    s0 = s1;
+
+    return s0;
+  }
+
+  function peg$parseNumber() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    s1 = peg$currPos;
+    s2 = [];
+    if (peg$c66.test(input.charAt(peg$currPos))) {
+      s3 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s3 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c67); }
+    }
+    if (s3 !== peg$FAILED) {
+      while (s3 !== peg$FAILED) {
+        s2.push(s3);
+        if (peg$c66.test(input.charAt(peg$currPos))) {
+          s3 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c67); }
+        }
+      }
+    } else {
+      s2 = peg$FAILED;
+    }
+    if (s2 !== peg$FAILED) {
+      s1 = input.substring(s1, peg$currPos);
+    } else {
+      s1 = s2;
+    }
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = s0;
+      s1 = peg$c68(s1);
+    }
+    s0 = s1;
+
+    return s0;
+  }
+
+  function peg$parseStringReference() {
+    var s0, s1;
+
+    s0 = peg$currPos;
+    s1 = peg$parseVariableName();
+    if (s1 !== peg$FAILED) {
+      peg$savedPos = s0;
+      s1 = peg$c69(s1);
+    }
+    s0 = s1;
+
+    return s0;
+  }
+
+  function peg$parseEnvironment() {
+    var s0, s1, s2, s3, s4, s5, s6, s7, s8;
+
+    s0 = peg$currPos;
+    if (input.substr(peg$currPos, 7) === peg$c70) {
+      s1 = peg$c70;
+      peg$currPos += 7;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c71); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$currPos;
+      s3 = [];
+      if (peg$c72.test(input.charAt(peg$currPos))) {
+        s4 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s4 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c73); }
+      }
+      if (s4 !== peg$FAILED) {
+        while (s4 !== peg$FAILED) {
+          s3.push(s4);
+          if (peg$c72.test(input.charAt(peg$currPos))) {
+            s4 = input.charAt(peg$currPos);
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c73); }
+          }
+        }
+      } else {
+        s3 = peg$FAILED;
+      }
+      if (s3 !== peg$FAILED) {
+        s2 = input.substring(s2, peg$currPos);
+      } else {
+        s2 = s3;
+      }
+      if (s2 !== peg$FAILED) {
+        if (input.charCodeAt(peg$currPos) === 125) {
+          s3 = peg$c19;
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c20); }
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = [];
+          s5 = peg$parseEnvironment();
+          if (s5 === peg$FAILED) {
+            s5 = peg$parseBlock();
+            if (s5 === peg$FAILED) {
+              s5 = peg$parseCommand();
+              if (s5 === peg$FAILED) {
+                s5 = peg$parseMath();
+                if (s5 === peg$FAILED) {
+                  s5 = peg$parseText();
+                }
+              }
+            }
+          }
+          while (s5 !== peg$FAILED) {
+            s4.push(s5);
+            s5 = peg$parseEnvironment();
+            if (s5 === peg$FAILED) {
+              s5 = peg$parseBlock();
+              if (s5 === peg$FAILED) {
+                s5 = peg$parseCommand();
+                if (s5 === peg$FAILED) {
+                  s5 = peg$parseMath();
+                  if (s5 === peg$FAILED) {
+                    s5 = peg$parseText();
+                  }
+                }
+              }
+            }
+          }
+          if (s4 !== peg$FAILED) {
+            if (input.substr(peg$currPos, 5) === peg$c74) {
+              s5 = peg$c74;
+              peg$currPos += 5;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c75); }
+            }
+            if (s5 !== peg$FAILED) {
+              s6 = peg$currPos;
+              s7 = [];
+              if (peg$c72.test(input.charAt(peg$currPos))) {
+                s8 = input.charAt(peg$currPos);
+                peg$currPos++;
+              } else {
+                s8 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c73); }
+              }
+              if (s8 !== peg$FAILED) {
+                while (s8 !== peg$FAILED) {
+                  s7.push(s8);
+                  if (peg$c72.test(input.charAt(peg$currPos))) {
+                    s8 = input.charAt(peg$currPos);
+                    peg$currPos++;
+                  } else {
+                    s8 = peg$FAILED;
+                    if (peg$silentFails === 0) { peg$fail(peg$c73); }
+                  }
+                }
+              } else {
+                s7 = peg$FAILED;
+              }
+              if (s7 !== peg$FAILED) {
+                s6 = input.substring(s6, peg$currPos);
+              } else {
+                s6 = s7;
+              }
+              if (s6 !== peg$FAILED) {
+                if (input.charCodeAt(peg$currPos) === 125) {
+                  s7 = peg$c19;
+                  peg$currPos++;
+                } else {
+                  s7 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c20); }
+                }
+                if (s7 !== peg$FAILED) {
+                  peg$savedPos = peg$currPos;
+                  s8 = peg$c76(s2, s4, s6);
+                  if (s8) {
+                    s8 = void 0;
+                  } else {
+                    s8 = peg$FAILED;
+                  }
+                  if (s8 !== peg$FAILED) {
+                    peg$savedPos = s0;
+                    s1 = peg$c77(s2, s4);
+                    s0 = s1;
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseBlock() {
+    var s0, s1, s2, s3, s4, s5, s6;
+
+    s0 = peg$currPos;
+    if (input.substr(peg$currPos, 2) === peg$c78) {
+      s1 = peg$c78;
+      peg$currPos += 2;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c79); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parseExtendedDiacritic();
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__();
+        if (s3 !== peg$FAILED) {
+          if (peg$c72.test(input.charAt(peg$currPos))) {
+            s4 = input.charAt(peg$currPos);
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c73); }
+          }
+          if (s4 === peg$FAILED) {
+            s4 = peg$currPos;
+            if (input.charCodeAt(peg$currPos) === 92) {
+              s5 = peg$c80;
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c81); }
+            }
+            if (s5 !== peg$FAILED) {
+              if (peg$c82.test(input.charAt(peg$currPos))) {
+                s6 = input.charAt(peg$currPos);
+                peg$currPos++;
+              } else {
+                s6 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c83); }
+              }
+              if (s6 !== peg$FAILED) {
+                s5 = [s5, s6];
+                s4 = s5;
+              } else {
+                peg$currPos = s4;
+                s4 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s4;
+              s4 = peg$FAILED;
+            }
+          }
+          if (s4 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 125) {
+              s5 = peg$c19;
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c20); }
+            }
+            if (s5 !== peg$FAILED) {
+              peg$savedPos = s0;
+              s1 = peg$c84(s2, s4);
+              s0 = s1;
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.substr(peg$currPos, 6) === peg$c57) {
+        s1 = peg$c57;
+        peg$currPos += 6;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c58); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = peg$currPos;
+        peg$silentFails++;
+        if (peg$c59.test(input.charAt(peg$currPos))) {
+          s3 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c60); }
+        }
+        peg$silentFails--;
+        if (s3 === peg$FAILED) {
+          s2 = void 0;
+        } else {
+          peg$currPos = s2;
+          s2 = peg$FAILED;
+        }
+        if (s2 !== peg$FAILED) {
+          s3 = [];
+          s4 = peg$parseVerbatimText();
+          while (s4 !== peg$FAILED) {
+            s3.push(s4);
+            s4 = peg$parseVerbatimText();
+          }
+          if (s3 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 125) {
+              s4 = peg$c19;
+              peg$currPos++;
+            } else {
+              s4 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c20); }
+            }
+            if (s4 !== peg$FAILED) {
+              peg$savedPos = s0;
+              s1 = peg$c85(s3);
+              s0 = s1;
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+      if (s0 === peg$FAILED) {
+        s0 = peg$currPos;
+        if (input.charCodeAt(peg$currPos) === 123) {
+          s1 = peg$c15;
+          peg$currPos++;
+        } else {
+          s1 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c16); }
+        }
+        if (s1 !== peg$FAILED) {
+          s2 = [];
+          s3 = peg$parseEnvironment();
+          if (s3 === peg$FAILED) {
+            s3 = peg$parseBlock();
+            if (s3 === peg$FAILED) {
+              s3 = peg$parseCommand();
+              if (s3 === peg$FAILED) {
+                s3 = peg$parseMath();
+                if (s3 === peg$FAILED) {
+                  s3 = peg$parseText();
+                }
+              }
+            }
+          }
+          while (s3 !== peg$FAILED) {
+            s2.push(s3);
+            s3 = peg$parseEnvironment();
+            if (s3 === peg$FAILED) {
+              s3 = peg$parseBlock();
+              if (s3 === peg$FAILED) {
+                s3 = peg$parseCommand();
+                if (s3 === peg$FAILED) {
+                  s3 = peg$parseMath();
+                  if (s3 === peg$FAILED) {
+                    s3 = peg$parseText();
+                  }
+                }
+              }
+            }
+          }
+          if (s2 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 125) {
+              s3 = peg$c19;
+              peg$currPos++;
+            } else {
+              s3 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c20); }
+            }
+            if (s3 !== peg$FAILED) {
+              peg$savedPos = s0;
+              s1 = peg$c86(s2);
+              s0 = s1;
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseMath() {
+    var s0, s1, s2, s3, s4, s5, s6;
+
+    s0 = peg$currPos;
+    peg$savedPos = peg$currPos;
+    s1 = peg$c87();
+    if (s1) {
+      s1 = void 0;
+    } else {
+      s1 = peg$FAILED;
+    }
+    if (s1 !== peg$FAILED) {
+      if (input.charCodeAt(peg$currPos) === 36) {
+        s2 = peg$c88;
+        peg$currPos++;
+      } else {
+        s2 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c89); }
+      }
+      if (s2 === peg$FAILED) {
+        if (input.substr(peg$currPos, 2) === peg$c90) {
+          s2 = peg$c90;
+          peg$currPos += 2;
+        } else {
+          s2 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c91); }
+        }
+      }
+      if (s2 !== peg$FAILED) {
+        peg$savedPos = peg$currPos;
+        s3 = peg$c92();
+        if (s3) {
+          s3 = void 0;
+        } else {
+          s3 = peg$FAILED;
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = [];
+          s5 = peg$parseBlock();
+          if (s5 === peg$FAILED) {
+            s5 = peg$parseCommand();
+            if (s5 === peg$FAILED) {
+              s5 = peg$parseText();
+            }
+          }
+          while (s5 !== peg$FAILED) {
+            s4.push(s5);
+            s5 = peg$parseBlock();
+            if (s5 === peg$FAILED) {
+              s5 = peg$parseCommand();
+              if (s5 === peg$FAILED) {
+                s5 = peg$parseText();
+              }
+            }
+          }
+          if (s4 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 36) {
+              s5 = peg$c88;
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c89); }
+            }
+            if (s5 === peg$FAILED) {
+              if (input.substr(peg$currPos, 2) === peg$c90) {
+                s5 = peg$c90;
+                peg$currPos += 2;
+              } else {
+                s5 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c91); }
+              }
+            }
+            if (s5 !== peg$FAILED) {
+              peg$savedPos = peg$currPos;
+              s6 = peg$c93();
+              if (s6) {
+                s6 = void 0;
+              } else {
+                s6 = peg$FAILED;
+              }
+              if (s6 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c94(s2, s4);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseLineComment() {
+    var s0, s1, s2, s3, s4, s5;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 37) {
+      s1 = peg$c95;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c96); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__h();
+      if (s2 !== peg$FAILED) {
+        s3 = peg$currPos;
+        s4 = [];
+        if (peg$c97.test(input.charAt(peg$currPos))) {
+          s5 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s5 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c98); }
+        }
+        if (s5 !== peg$FAILED) {
+          while (s5 !== peg$FAILED) {
+            s4.push(s5);
+            if (peg$c97.test(input.charAt(peg$currPos))) {
+              s5 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c98); }
+            }
+          }
+        } else {
+          s4 = peg$FAILED;
+        }
+        if (s4 !== peg$FAILED) {
+          s3 = input.substring(s3, peg$currPos);
+        } else {
+          s3 = s4;
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = [];
+          s5 = peg$parseEOL();
+          if (s5 !== peg$FAILED) {
+            while (s5 !== peg$FAILED) {
+              s4.push(s5);
+              s5 = peg$parseEOL();
+            }
+          } else {
+            s4 = peg$FAILED;
+          }
+          if (s4 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c99(s3);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseCommand() {
+    var s0;
+
+    s0 = peg$parseScriptCommand();
+    if (s0 === peg$FAILED) {
+      s0 = peg$parseDiacriticCommand();
+      if (s0 === peg$FAILED) {
+        s0 = peg$parseRegularCommand();
+        if (s0 === peg$FAILED) {
+          s0 = peg$parseSymbolCommand();
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseScriptCommand() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    if (peg$c100.test(input.charAt(peg$currPos))) {
+      s1 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c101); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__h();
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parseRequiredArgument();
+        if (s3 !== peg$FAILED) {
+          peg$savedPos = s0;
+          s1 = peg$c102(s1, s3);
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseDiacriticCommand() {
+    var s0, s1, s2, s3, s4, s5, s6;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 92) {
+      s1 = peg$c80;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c81); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parseSimpleDiacritic();
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__();
+        if (s3 !== peg$FAILED) {
+          if (peg$c72.test(input.charAt(peg$currPos))) {
+            s4 = input.charAt(peg$currPos);
+            peg$currPos++;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c73); }
+          }
+          if (s4 === peg$FAILED) {
+            s4 = peg$currPos;
+            if (input.charCodeAt(peg$currPos) === 92) {
+              s5 = peg$c80;
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c81); }
+            }
+            if (s5 !== peg$FAILED) {
+              if (peg$c82.test(input.charAt(peg$currPos))) {
+                s6 = input.charAt(peg$currPos);
+                peg$currPos++;
+              } else {
+                s6 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c83); }
+              }
+              if (s6 !== peg$FAILED) {
+                s5 = [s5, s6];
+                s4 = s5;
+              } else {
+                peg$currPos = s4;
+                s4 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s4;
+              s4 = peg$FAILED;
+            }
+          }
+          if (s4 !== peg$FAILED) {
+            peg$savedPos = s0;
+            s1 = peg$c84(s2, s4);
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.charCodeAt(peg$currPos) === 92) {
+        s1 = peg$c80;
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c81); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = peg$parseExtendedDiacritic();
+        if (s2 !== peg$FAILED) {
+          if (input.charCodeAt(peg$currPos) === 123) {
+            s3 = peg$c15;
+            peg$currPos++;
+          } else {
+            s3 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c16); }
+          }
+          if (s3 !== peg$FAILED) {
+            if (peg$c72.test(input.charAt(peg$currPos))) {
+              s4 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s4 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c73); }
+            }
+            if (s4 === peg$FAILED) {
+              s4 = peg$currPos;
+              if (input.charCodeAt(peg$currPos) === 92) {
+                s5 = peg$c80;
+                peg$currPos++;
+              } else {
+                s5 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c81); }
+              }
+              if (s5 !== peg$FAILED) {
+                if (peg$c82.test(input.charAt(peg$currPos))) {
+                  s6 = input.charAt(peg$currPos);
+                  peg$currPos++;
+                } else {
+                  s6 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c83); }
+                }
+                if (s6 !== peg$FAILED) {
+                  s5 = [s5, s6];
+                  s4 = s5;
+                } else {
+                  peg$currPos = s4;
+                  s4 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s4;
+                s4 = peg$FAILED;
+              }
+            }
+            if (s4 !== peg$FAILED) {
+              if (input.charCodeAt(peg$currPos) === 125) {
+                s5 = peg$c19;
+                peg$currPos++;
+              } else {
+                s5 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c20); }
+              }
+              if (s5 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c84(s2, s4);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+      if (s0 === peg$FAILED) {
+        s0 = peg$currPos;
+        if (input.charCodeAt(peg$currPos) === 92) {
+          s1 = peg$c80;
+          peg$currPos++;
+        } else {
+          s1 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c81); }
+        }
+        if (s1 !== peg$FAILED) {
+          s2 = peg$parseExtendedDiacritic();
+          if (s2 !== peg$FAILED) {
+            s3 = peg$currPos;
+            peg$silentFails++;
+            if (input.charCodeAt(peg$currPos) === 123) {
+              s4 = peg$c15;
+              peg$currPos++;
+            } else {
+              s4 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c16); }
+            }
+            peg$silentFails--;
+            if (s4 !== peg$FAILED) {
+              peg$currPos = s3;
+              s3 = void 0;
+            } else {
+              s3 = peg$FAILED;
+            }
+            if (s3 !== peg$FAILED) {
+              s4 = peg$parseRegularValue();
+              if (s4 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c103(s2, s4);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseSymbolCommand() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 92) {
+      s1 = peg$c80;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c81); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$currPos;
+      if (peg$c104.test(input.charAt(peg$currPos))) {
+        s3 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s3 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c105); }
+      }
+      if (s3 !== peg$FAILED) {
+        s2 = input.substring(s2, peg$currPos);
+      } else {
+        s2 = s3;
+      }
+      if (s2 !== peg$FAILED) {
+        peg$savedPos = s0;
+        s1 = peg$c106(s2);
+        s0 = s1;
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseRegularCommand() {
+    var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 92) {
+      s1 = peg$c80;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c81); }
+    }
+    if (s1 !== peg$FAILED) {
+      if (input.substr(peg$currPos, 10) === peg$c107) {
+        s2 = peg$c107;
+        peg$currPos += 10;
+      } else {
+        s2 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c108); }
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parseBlock();
+        if (s3 !== peg$FAILED) {
+          peg$savedPos = peg$currPos;
+          s4 = peg$c109(s2, s3);
+          if (s4) {
+            s4 = void 0;
+          } else {
+            s4 = peg$FAILED;
+          }
+          if (s4 !== peg$FAILED) {
+            s5 = [];
+            s6 = peg$parseOptionalArgument();
+            while (s6 !== peg$FAILED) {
+              s5.push(s6);
+              s6 = peg$parseOptionalArgument();
+            }
+            if (s5 !== peg$FAILED) {
+              s6 = peg$parseRequiredArgument();
+              if (s6 !== peg$FAILED) {
+                peg$savedPos = s0;
+                s1 = peg$c110(s2, s3, s5, s6);
+                s0 = s1;
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      if (input.charCodeAt(peg$currPos) === 92) {
+        s1 = peg$c80;
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c81); }
+      }
+      if (s1 !== peg$FAILED) {
+        s2 = peg$currPos;
+        peg$silentFails++;
+        if (input.substr(peg$currPos, 5) === peg$c111) {
+          s3 = peg$c111;
+          peg$currPos += 5;
+        } else {
+          s3 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c112); }
+        }
+        peg$silentFails--;
+        if (s3 === peg$FAILED) {
+          s2 = void 0;
+        } else {
+          peg$currPos = s2;
+          s2 = peg$FAILED;
+        }
+        if (s2 !== peg$FAILED) {
+          s3 = peg$currPos;
+          peg$silentFails++;
+          if (input.substr(peg$currPos, 3) === peg$c113) {
+            s4 = peg$c113;
+            peg$currPos += 3;
+          } else {
+            s4 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c114); }
+          }
+          peg$silentFails--;
+          if (s4 === peg$FAILED) {
+            s3 = void 0;
+          } else {
+            peg$currPos = s3;
+            s3 = peg$FAILED;
+          }
+          if (s3 !== peg$FAILED) {
+            s4 = peg$currPos;
+            s5 = [];
+            if (peg$c22.test(input.charAt(peg$currPos))) {
+              s6 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s6 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c23); }
+            }
+            if (s6 !== peg$FAILED) {
+              while (s6 !== peg$FAILED) {
+                s5.push(s6);
+                if (peg$c22.test(input.charAt(peg$currPos))) {
+                  s6 = input.charAt(peg$currPos);
+                  peg$currPos++;
+                } else {
+                  s6 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                }
+              }
+            } else {
+              s5 = peg$FAILED;
+            }
+            if (s5 !== peg$FAILED) {
+              s4 = input.substring(s4, peg$currPos);
+            } else {
+              s4 = s5;
+            }
+            if (s4 !== peg$FAILED) {
+              peg$savedPos = peg$currPos;
+              s5 = peg$c115(s4);
+              if (s5) {
+                s5 = void 0;
+              } else {
+                s5 = peg$FAILED;
+              }
+              if (s5 !== peg$FAILED) {
+                s6 = [];
+                s7 = peg$parseOptionalArgument();
+                while (s7 !== peg$FAILED) {
+                  s6.push(s7);
+                  s7 = peg$parseOptionalArgument();
+                }
+                if (s6 !== peg$FAILED) {
+                  s7 = peg$parse__h();
+                  if (s7 !== peg$FAILED) {
+                    s8 = peg$currPos;
+                    peg$silentFails++;
+                    if (input.charCodeAt(peg$currPos) === 123) {
+                      s9 = peg$c15;
+                      peg$currPos++;
+                    } else {
+                      s9 = peg$FAILED;
+                      if (peg$silentFails === 0) { peg$fail(peg$c16); }
+                    }
+                    peg$silentFails--;
+                    if (s9 !== peg$FAILED) {
+                      peg$currPos = s8;
+                      s8 = void 0;
+                    } else {
+                      s8 = peg$FAILED;
+                    }
+                    if (s8 !== peg$FAILED) {
+                      s9 = peg$parseVerbatimFieldValue();
+                      if (s9 !== peg$FAILED) {
+                        s10 = peg$parseVerbatimFieldValue();
+                        if (s10 !== peg$FAILED) {
+                          peg$savedPos = s0;
+                          s1 = peg$c116(s4, s6, s9, s10);
+                          s0 = s1;
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+      if (s0 === peg$FAILED) {
+        s0 = peg$currPos;
+        if (input.charCodeAt(peg$currPos) === 92) {
+          s1 = peg$c80;
+          peg$currPos++;
+        } else {
+          s1 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c81); }
+        }
+        if (s1 !== peg$FAILED) {
+          s2 = peg$currPos;
+          peg$silentFails++;
+          if (input.substr(peg$currPos, 5) === peg$c111) {
+            s3 = peg$c111;
+            peg$currPos += 5;
+          } else {
+            s3 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c112); }
+          }
+          peg$silentFails--;
+          if (s3 === peg$FAILED) {
+            s2 = void 0;
+          } else {
+            peg$currPos = s2;
+            s2 = peg$FAILED;
+          }
+          if (s2 !== peg$FAILED) {
+            s3 = peg$currPos;
+            peg$silentFails++;
+            if (input.substr(peg$currPos, 3) === peg$c113) {
+              s4 = peg$c113;
+              peg$currPos += 3;
+            } else {
+              s4 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c114); }
+            }
+            peg$silentFails--;
+            if (s4 === peg$FAILED) {
+              s3 = void 0;
+            } else {
+              peg$currPos = s3;
+              s3 = peg$FAILED;
+            }
+            if (s3 !== peg$FAILED) {
+              s4 = peg$currPos;
+              s5 = [];
+              if (peg$c22.test(input.charAt(peg$currPos))) {
+                s6 = input.charAt(peg$currPos);
+                peg$currPos++;
+              } else {
+                s6 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c23); }
+              }
+              if (s6 !== peg$FAILED) {
+                while (s6 !== peg$FAILED) {
+                  s5.push(s6);
+                  if (peg$c22.test(input.charAt(peg$currPos))) {
+                    s6 = input.charAt(peg$currPos);
+                    peg$currPos++;
+                  } else {
+                    s6 = peg$FAILED;
+                    if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                  }
+                }
+              } else {
+                s5 = peg$FAILED;
+              }
+              if (s5 !== peg$FAILED) {
+                s4 = input.substring(s4, peg$currPos);
+              } else {
+                s4 = s5;
+              }
+              if (s4 !== peg$FAILED) {
+                peg$savedPos = peg$currPos;
+                s5 = peg$c117(s4);
+                if (s5) {
+                  s5 = void 0;
+                } else {
+                  s5 = peg$FAILED;
+                }
+                if (s5 !== peg$FAILED) {
+                  s6 = [];
+                  s7 = peg$parseOptionalArgument();
+                  while (s7 !== peg$FAILED) {
+                    s6.push(s7);
+                    s7 = peg$parseOptionalArgument();
+                  }
+                  if (s6 !== peg$FAILED) {
+                    s7 = peg$parse__h();
+                    if (s7 !== peg$FAILED) {
+                      s8 = peg$currPos;
+                      peg$silentFails++;
+                      if (input.charCodeAt(peg$currPos) === 123) {
+                        s9 = peg$c15;
+                        peg$currPos++;
+                      } else {
+                        s9 = peg$FAILED;
+                        if (peg$silentFails === 0) { peg$fail(peg$c16); }
+                      }
+                      peg$silentFails--;
+                      if (s9 !== peg$FAILED) {
+                        peg$currPos = s8;
+                        s8 = void 0;
+                      } else {
+                        s8 = peg$FAILED;
+                      }
+                      if (s8 !== peg$FAILED) {
+                        s9 = peg$parseVerbatimFieldValue();
+                        if (s9 !== peg$FAILED) {
+                          peg$savedPos = s0;
+                          s1 = peg$c118(s4, s6, s9);
+                          s0 = s1;
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+        if (s0 === peg$FAILED) {
+          s0 = peg$currPos;
+          if (input.charCodeAt(peg$currPos) === 92) {
+            s1 = peg$c80;
+            peg$currPos++;
+          } else {
+            s1 = peg$FAILED;
+            if (peg$silentFails === 0) { peg$fail(peg$c81); }
+          }
+          if (s1 !== peg$FAILED) {
+            s2 = peg$currPos;
+            peg$silentFails++;
+            if (input.substr(peg$currPos, 5) === peg$c111) {
+              s3 = peg$c111;
+              peg$currPos += 5;
+            } else {
+              s3 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c112); }
+            }
+            peg$silentFails--;
+            if (s3 === peg$FAILED) {
+              s2 = void 0;
+            } else {
+              peg$currPos = s2;
+              s2 = peg$FAILED;
+            }
+            if (s2 !== peg$FAILED) {
+              s3 = peg$currPos;
+              peg$silentFails++;
+              if (input.substr(peg$currPos, 3) === peg$c113) {
+                s4 = peg$c113;
+                peg$currPos += 3;
+              } else {
+                s4 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c114); }
+              }
+              peg$silentFails--;
+              if (s4 === peg$FAILED) {
+                s3 = void 0;
+              } else {
+                peg$currPos = s3;
+                s3 = peg$FAILED;
+              }
+              if (s3 !== peg$FAILED) {
+                s4 = peg$currPos;
+                s5 = [];
+                if (peg$c22.test(input.charAt(peg$currPos))) {
+                  s6 = input.charAt(peg$currPos);
+                  peg$currPos++;
+                } else {
+                  s6 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                }
+                if (s6 !== peg$FAILED) {
+                  while (s6 !== peg$FAILED) {
+                    s5.push(s6);
+                    if (peg$c22.test(input.charAt(peg$currPos))) {
+                      s6 = input.charAt(peg$currPos);
+                      peg$currPos++;
+                    } else {
+                      s6 = peg$FAILED;
+                      if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                    }
+                  }
+                } else {
+                  s5 = peg$FAILED;
+                }
+                if (s5 !== peg$FAILED) {
+                  s4 = input.substring(s4, peg$currPos);
+                } else {
+                  s4 = s5;
+                }
+                if (s4 !== peg$FAILED) {
+                  peg$savedPos = peg$currPos;
+                  s5 = peg$c119(s4);
+                  if (s5) {
+                    s5 = void 0;
+                  } else {
+                    s5 = peg$FAILED;
+                  }
+                  if (s5 !== peg$FAILED) {
+                    s6 = [];
+                    s7 = peg$parseOptionalArgument();
+                    while (s7 !== peg$FAILED) {
+                      s6.push(s7);
+                      s7 = peg$parseOptionalArgument();
+                    }
+                    if (s6 !== peg$FAILED) {
+                      s7 = peg$parse__h();
+                      if (s7 !== peg$FAILED) {
+                        s8 = peg$parseRequiredArgument();
+                        if (s8 !== peg$FAILED) {
+                          s9 = peg$parseRequiredArgument();
+                          if (s9 !== peg$FAILED) {
+                            peg$savedPos = s0;
+                            s1 = peg$c120(s4, s6, s8, s9);
+                            s0 = s1;
+                          } else {
+                            peg$currPos = s0;
+                            s0 = peg$FAILED;
+                          }
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+          if (s0 === peg$FAILED) {
+            s0 = peg$currPos;
+            if (input.charCodeAt(peg$currPos) === 92) {
+              s1 = peg$c80;
+              peg$currPos++;
+            } else {
+              s1 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c81); }
+            }
+            if (s1 !== peg$FAILED) {
+              s2 = peg$currPos;
+              peg$silentFails++;
+              if (input.substr(peg$currPos, 5) === peg$c111) {
+                s3 = peg$c111;
+                peg$currPos += 5;
+              } else {
+                s3 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c112); }
+              }
+              peg$silentFails--;
+              if (s3 === peg$FAILED) {
+                s2 = void 0;
+              } else {
+                peg$currPos = s2;
+                s2 = peg$FAILED;
+              }
+              if (s2 !== peg$FAILED) {
+                s3 = peg$currPos;
+                peg$silentFails++;
+                if (input.substr(peg$currPos, 3) === peg$c113) {
+                  s4 = peg$c113;
+                  peg$currPos += 3;
+                } else {
+                  s4 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c114); }
+                }
+                peg$silentFails--;
+                if (s4 === peg$FAILED) {
+                  s3 = void 0;
+                } else {
+                  peg$currPos = s3;
+                  s3 = peg$FAILED;
+                }
+                if (s3 !== peg$FAILED) {
+                  s4 = peg$currPos;
+                  s5 = [];
+                  if (peg$c22.test(input.charAt(peg$currPos))) {
+                    s6 = input.charAt(peg$currPos);
+                    peg$currPos++;
+                  } else {
+                    s6 = peg$FAILED;
+                    if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                  }
+                  if (s6 !== peg$FAILED) {
+                    while (s6 !== peg$FAILED) {
+                      s5.push(s6);
+                      if (peg$c22.test(input.charAt(peg$currPos))) {
+                        s6 = input.charAt(peg$currPos);
+                        peg$currPos++;
+                      } else {
+                        s6 = peg$FAILED;
+                        if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                      }
+                    }
+                  } else {
+                    s5 = peg$FAILED;
+                  }
+                  if (s5 !== peg$FAILED) {
+                    s4 = input.substring(s4, peg$currPos);
+                  } else {
+                    s4 = s5;
+                  }
+                  if (s4 !== peg$FAILED) {
+                    peg$savedPos = peg$currPos;
+                    s5 = peg$c121(s4);
+                    if (s5) {
+                      s5 = void 0;
+                    } else {
+                      s5 = peg$FAILED;
+                    }
+                    if (s5 !== peg$FAILED) {
+                      s6 = [];
+                      s7 = peg$parseOptionalArgument();
+                      while (s7 !== peg$FAILED) {
+                        s6.push(s7);
+                        s7 = peg$parseOptionalArgument();
+                      }
+                      if (s6 !== peg$FAILED) {
+                        s7 = peg$parse__h();
+                        if (s7 !== peg$FAILED) {
+                          s8 = peg$parseRequiredArgument();
+                          if (s8 !== peg$FAILED) {
+                            peg$savedPos = s0;
+                            s1 = peg$c122(s4, s6, s8);
+                            s0 = s1;
+                          } else {
+                            peg$currPos = s0;
+                            s0 = peg$FAILED;
+                          }
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+            if (s0 === peg$FAILED) {
+              s0 = peg$currPos;
+              if (input.charCodeAt(peg$currPos) === 92) {
+                s1 = peg$c80;
+                peg$currPos++;
+              } else {
+                s1 = peg$FAILED;
+                if (peg$silentFails === 0) { peg$fail(peg$c81); }
+              }
+              if (s1 !== peg$FAILED) {
+                s2 = peg$currPos;
+                peg$silentFails++;
+                if (input.substr(peg$currPos, 5) === peg$c111) {
+                  s3 = peg$c111;
+                  peg$currPos += 5;
+                } else {
+                  s3 = peg$FAILED;
+                  if (peg$silentFails === 0) { peg$fail(peg$c112); }
+                }
+                peg$silentFails--;
+                if (s3 === peg$FAILED) {
+                  s2 = void 0;
+                } else {
+                  peg$currPos = s2;
+                  s2 = peg$FAILED;
+                }
+                if (s2 !== peg$FAILED) {
+                  s3 = peg$currPos;
+                  peg$silentFails++;
+                  if (input.substr(peg$currPos, 3) === peg$c113) {
+                    s4 = peg$c113;
+                    peg$currPos += 3;
+                  } else {
+                    s4 = peg$FAILED;
+                    if (peg$silentFails === 0) { peg$fail(peg$c114); }
+                  }
+                  peg$silentFails--;
+                  if (s4 === peg$FAILED) {
+                    s3 = void 0;
+                  } else {
+                    peg$currPos = s3;
+                    s3 = peg$FAILED;
+                  }
+                  if (s3 !== peg$FAILED) {
+                    s4 = peg$currPos;
+                    s5 = [];
+                    if (peg$c22.test(input.charAt(peg$currPos))) {
+                      s6 = input.charAt(peg$currPos);
+                      peg$currPos++;
+                    } else {
+                      s6 = peg$FAILED;
+                      if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                    }
+                    if (s6 !== peg$FAILED) {
+                      while (s6 !== peg$FAILED) {
+                        s5.push(s6);
+                        if (peg$c22.test(input.charAt(peg$currPos))) {
+                          s6 = input.charAt(peg$currPos);
+                          peg$currPos++;
+                        } else {
+                          s6 = peg$FAILED;
+                          if (peg$silentFails === 0) { peg$fail(peg$c23); }
+                        }
+                      }
+                    } else {
+                      s5 = peg$FAILED;
+                    }
+                    if (s5 !== peg$FAILED) {
+                      s4 = input.substring(s4, peg$currPos);
+                    } else {
+                      s4 = s5;
+                    }
+                    if (s4 !== peg$FAILED) {
+                      s5 = [];
+                      s6 = peg$parseOptionalArgument();
+                      while (s6 !== peg$FAILED) {
+                        s5.push(s6);
+                        s6 = peg$parseOptionalArgument();
+                      }
+                      if (s5 !== peg$FAILED) {
+                        s6 = peg$parse__();
+                        if (s6 !== peg$FAILED) {
+                          peg$savedPos = s0;
+                          s1 = peg$c123(s4, s5);
+                          s0 = s1;
+                        } else {
+                          peg$currPos = s0;
+                          s0 = peg$FAILED;
+                        }
+                      } else {
+                        peg$currPos = s0;
+                        s0 = peg$FAILED;
+                      }
+                    } else {
+                      peg$currPos = s0;
+                      s0 = peg$FAILED;
+                    }
+                  } else {
+                    peg$currPos = s0;
+                    s0 = peg$FAILED;
+                  }
+                } else {
+                  peg$currPos = s0;
+                  s0 = peg$FAILED;
+                }
+              } else {
+                peg$currPos = s0;
+                s0 = peg$FAILED;
+              }
+            }
+          }
+        }
+      }
+    }
+
+    return s0;
+  }
+
+  function peg$parseOptionalArgument() {
+    var s0, s1, s2, s3, s4, s5;
+
+    s0 = peg$currPos;
+    if (input.charCodeAt(peg$currPos) === 91) {
+      s1 = peg$c124;
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c125); }
+    }
+    if (s1 !== peg$FAILED) {
+      s2 = peg$parse__h();
+      if (s2 !== peg$FAILED) {
+        s3 = peg$currPos;
+        s4 = [];
+        if (peg$c126.test(input.charAt(peg$currPos))) {
+          s5 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s5 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c127); }
+        }
+        if (s5 !== peg$FAILED) {
+          while (s5 !== peg$FAILED) {
+            s4.push(s5);
+            if (peg$c126.test(input.charAt(peg$currPos))) {
+              s5 = input.charAt(peg$currPos);
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c127); }
+            }
+          }
+        } else {
+          s4 = peg$FAILED;
+        }
+        if (s4 !== peg$FAILED) {
+          s3 = input.substring(s3, peg$currPos);
+        } else {
+          s3 = s4;
+        }
+        if (s3 !== peg$FAILED) {
+          s4 = peg$parse__h();
+          if (s4 !== peg$FAILED) {
+            if (input.charCodeAt(peg$currPos) === 93) {
+              s5 = peg$c128;
+              peg$currPos++;
+            } else {
+              s5 = peg$FAILED;
+              if (peg$silentFails === 0) { peg$fail(peg$c129); }
+            }
+            if (s5 !== peg$FAILED) {
+              peg$savedPos = s0;
+              s1 = peg$c130(s3);
+              s0 = s1;
+            } else {
+              peg$currPos = s0;
+              s0 = peg$FAILED;
+            }
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseRequiredArgument() {
+    var s0, s1, s2;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__h();
+    if (s1 !== peg$FAILED) {
+      if (peg$c131.test(input.charAt(peg$currPos))) {
+        s2 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s2 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c132); }
+      }
+      if (s2 !== peg$FAILED) {
+        peg$savedPos = s0;
+        s1 = peg$c133(s2);
+        s0 = s1;
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+    if (s0 === peg$FAILED) {
+      s0 = peg$currPos;
+      s1 = peg$parseBlock();
+      if (s1 === peg$FAILED) {
+        s1 = peg$parseCommand();
+      }
+      if (s1 !== peg$FAILED) {
+        peg$savedPos = s0;
+        s1 = peg$c52(s1);
+      }
+      s0 = s1;
+    }
+
+    return s0;
+  }
+
+  function peg$parseVariableName() {
+    var s0, s1, s2, s3, s4;
+
+    s0 = peg$currPos;
+    s1 = peg$currPos;
+    if (peg$c134.test(input.charAt(peg$currPos))) {
+      s2 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s2 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c135); }
+    }
+    if (s2 !== peg$FAILED) {
+      s3 = [];
+      if (peg$c136.test(input.charAt(peg$currPos))) {
+        s4 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s4 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c137); }
+      }
+      while (s4 !== peg$FAILED) {
+        s3.push(s4);
+        if (peg$c136.test(input.charAt(peg$currPos))) {
+          s4 = input.charAt(peg$currPos);
+          peg$currPos++;
+        } else {
+          s4 = peg$FAILED;
+          if (peg$silentFails === 0) { peg$fail(peg$c137); }
+        }
+      }
+      if (s3 !== peg$FAILED) {
+        s2 = [s2, s3];
+        s1 = s2;
+      } else {
+        peg$currPos = s1;
+        s1 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s1;
+      s1 = peg$FAILED;
+    }
+    if (s1 !== peg$FAILED) {
+      s0 = input.substring(s0, peg$currPos);
+    } else {
+      s0 = s1;
+    }
+
+    return s0;
+  }
+
+  function peg$parseSimpleDiacritic() {
+    var s0;
+
+    if (peg$c138.test(input.charAt(peg$currPos))) {
+      s0 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s0 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c139); }
+    }
+
+    return s0;
+  }
+
+  function peg$parseExtendedDiacritic() {
+    var s0;
+
+    if (peg$c140.test(input.charAt(peg$currPos))) {
+      s0 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s0 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c141); }
+    }
+
+    return s0;
+  }
+
+  function peg$parseFieldSeparator() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__();
+    if (s1 !== peg$FAILED) {
+      if (input.charCodeAt(peg$currPos) === 61) {
+        s2 = peg$c142;
+        peg$currPos++;
+      } else {
+        s2 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c143); }
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__();
+        if (s3 !== peg$FAILED) {
+          s1 = [s1, s2, s3];
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseFieldTerminator() {
+    var s0, s1, s2, s3, s4, s5;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__();
+    if (s1 !== peg$FAILED) {
+      if (input.charCodeAt(peg$currPos) === 44) {
+        s2 = peg$c37;
+        peg$currPos++;
+      } else {
+        s2 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c38); }
+      }
+      if (s2 === peg$FAILED) {
+        s2 = null;
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__h();
+        if (s3 !== peg$FAILED) {
+          s4 = [];
+          s5 = peg$parseLineComment();
+          if (s5 === peg$FAILED) {
+            s5 = peg$parseEOL();
+          }
+          while (s5 !== peg$FAILED) {
+            s4.push(s5);
+            s5 = peg$parseLineComment();
+            if (s5 === peg$FAILED) {
+              s5 = peg$parseEOL();
+            }
+          }
+          if (s4 !== peg$FAILED) {
+            s1 = [s1, s2, s3, s4];
+            s0 = s1;
+          } else {
+            peg$currPos = s0;
+            s0 = peg$FAILED;
+          }
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseConcat() {
+    var s0, s1, s2, s3;
+
+    s0 = peg$currPos;
+    s1 = peg$parse__();
+    if (s1 !== peg$FAILED) {
+      if (input.charCodeAt(peg$currPos) === 35) {
+        s2 = peg$c144;
+        peg$currPos++;
+      } else {
+        s2 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c145); }
+      }
+      if (s2 !== peg$FAILED) {
+        s3 = peg$parse__();
+        if (s3 !== peg$FAILED) {
+          s1 = [s1, s2, s3];
+          s0 = s1;
+        } else {
+          peg$currPos = s0;
+          s0 = peg$FAILED;
+        }
+      } else {
+        peg$currPos = s0;
+        s0 = peg$FAILED;
+      }
+    } else {
+      peg$currPos = s0;
+      s0 = peg$FAILED;
+    }
+
+    return s0;
+  }
+
+  function peg$parseEOL() {
+    var s0;
+
+    if (peg$c146.test(input.charAt(peg$currPos))) {
+      s0 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s0 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c147); }
+    }
+
+    return s0;
+  }
+
+  function peg$parse__h() {
+    var s0, s1;
+
+    peg$silentFails++;
+    s0 = [];
+    if (peg$c149.test(input.charAt(peg$currPos))) {
+      s1 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c150); }
+    }
+    while (s1 !== peg$FAILED) {
+      s0.push(s1);
+      if (peg$c149.test(input.charAt(peg$currPos))) {
+        s1 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c150); }
+      }
+    }
+    peg$silentFails--;
+    if (s0 === peg$FAILED) {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c151); }
+    }
+
+    return s0;
+  }
+
+  function peg$parse__() {
+    var s0, s1;
+
+    peg$silentFails++;
+    s0 = [];
+    if (peg$c155.test(input.charAt(peg$currPos))) {
+      s1 = input.charAt(peg$currPos);
+      peg$currPos++;
+    } else {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c156); }
+    }
+    while (s1 !== peg$FAILED) {
+      s0.push(s1);
+      if (peg$c155.test(input.charAt(peg$currPos))) {
+        s1 = input.charAt(peg$currPos);
+        peg$currPos++;
+      } else {
+        s1 = peg$FAILED;
+        if (peg$silentFails === 0) { peg$fail(peg$c156); }
+      }
+    }
+    peg$silentFails--;
+    if (s0 === peg$FAILED) {
+      s1 = peg$FAILED;
+      if (peg$silentFails === 0) { peg$fail(peg$c157); }
+    }
+
+    return s0;
+  }
+
+
+    /*
+      MIT License
+
+      Copyright (c) 2017 Derek P Sifford, parts copyright (c) 2019 by Emiliano Heyns
+
+      Permission is hereby granted, free of charge, to any person obtaining a copy
+      of this software and associated documentation files (the "Software"), to deal
+      in the Software without restriction, including without limitation the rights
+      to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+      copies of the Software, and to permit persons to whom the Software is
+      furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be included in all
+      copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+      SOFTWARE.
+    */
+
+    const markup = {
+      sl: 'italics',
+      em: 'italics',
+      it: 'italics',
+      itshape: 'italics',
+
+      bf: 'bold',
+      bfseries: 'bold',
+
+      sc: 'smallCaps',
+      scshape: 'smallCaps',
+
+      tt: 'fixedWidth',
+      rm: 'roman',
+      sf: 'sansSerif',
+      verb: 'verbatim',
+    };
+
+    const unnestFields = (options.unnestFields || []).map(field => field.toLowerCase());
+    const verbatimFields = (options.verbatimFields || [ 'urlraw', 'url', 'doi', 'file', 'files', 'eprint', 'verba', 'verbb', 'verbc' ]).map(field => typeof field === 'string' ? field.toLowerCase() : field);
+    const verbatimCommands = (options.verbatimCommands || ['texttt', 'url', 'href']);
+
+    function isVerbatimField(name) {
+      return verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p))
+    }
+
+    function normalizeWhitespace(textArr) {
+      return textArr.reduce((prev, curr) => {
+        if (/\s/.test(curr)) {
+          if (/\s/.test(prev[prev.length - 1])) {
+            return prev;
+          } else {
+            return prev + ' ';
+          }
+        }
+        return prev + curr;
+      }, '');
+    }
+
+    const has_arguments = {
+      ElsevierGlyph: 1,
+      end: 1,
+      begin: 1,
+      bibcyr: 1,
+      bibstring: 1,
+      chsf: 1,
+      cite: 1,
+      cyrchar: 1,
+      ding: 1,
+      emph: 1,
+      enquote: 1,
+      frac: 2,
+      href: 2,
+      hspace: 1,
+      mathrm: 1,
+      mbox: 1,
+      mkbibbold: 1,
+      mkbibemph: 1,
+      mkbibitalic: 1,
+      mkbibquote: 1,
+      newcommand: 2,
+      noopsort: 1,
+      ocirc: 1,
+      section: 1,
+      sb: 1,
+      sp: 1,
+      subsection: 1,
+      subsubsection: 1,
+      subsubsubsection: 1,
+      t: 1,
+      textbf: 1,
+      textit: 1,
+      textrm: 1,
+      textsc: 1,
+      textsubscript: 1,
+      textsuperscript: 1,
+      texttt: 1,
+      url: 1,
+      vphantom: 1,
+      vspace: 1,
+    };
+
+    if (options.combiningDiacritics) {
+      for (const cmd of options.combiningDiacritics) {
+        has_arguments[cmd] = 1;
+      }
+    }
+
+    const math = {
+      on: false,
+
+      set: function(state) {
+        this.on = state;
+        return true
+      }
+    };
+
+    function basicTextConversions(node) {
+      if (node.kind !== 'Text') throw new Error(node.kind + ' is not a Text node')
+
+      switch (node.mode) {
+        case 'verbatim':
+          break
+
+        case 'math':
+          node.value = node.value.replace(/~/g, '\u00A0');
+          break
+
+        case 'text':
+          node.value = node.value
+            .replace(/---/g, '\u2014')
+            .replace(/--/g, '\u2013')
+            .replace(//g, '\u00BF')
+            .replace(/~/g, '\u00A0')
+            .replace(/``/g, options.markup.enquote.open)
+            .replace(/''/g, options.markup.enquote.close);
+          break
+
+        default:
+          throw new Error(`Unexpected text mode ${node.mode}`)
+      }
+
+      return node
+    }
+
+    function protect(v) {
+      let source;
+      if (Array.isArray(v)) {
+        source = v.map(e => e.source).join('');
+      } else {
+        v = [ v ];
+        source = v.source;
+      }
+
+      return {
+        kind: 'Block',
+        value: v,
+        markup: {},
+        case: 'protect',
+        source: source,
+      }
+    }
+
+    function handle_markup_switches(block) {
+      const value = block.value;
+      if (!Array.isArray(value)) return block
+
+      block.value = [];
+
+      const pseudo = {
+        block: null,
+        markup: {},
+      };
+      function pseudo_block() {
+        pseudo.block = {
+          kind: 'Block',
+          loc: location(),
+          source: '',
+          value: [],
+          markup: JSON.parse(JSON.stringify(pseudo.markup)),
+          pseudo: true,
+        };
+        block.value.push(pseudo.block);
+      }
+      for (const node of value) {
+        if (node.kind === 'Environment' || node.kind === 'Block') {
+          block.value.push(node);
+
+          if (Object.keys(pseudo.markup).length) {
+            pseudo_block();
+          } else {
+            pseudo.block = null;
+          }
+          continue
+        }
+
+        if (node.kind === 'RegularCommand' && markup[node.command]) {
+          if (pseudo.markup.italics) { // https://github.com/citation-js/bibtex-parser-experiments/commit/cae475f075a05d1c074485a061b08ed245170c7e
+            delete pseudo.markup.italics;
+            if (markup[node.command] !== 'italics') pseudo.markup[markup[node.command]] = true;
+          } else {
+            pseudo.markup[markup[node.command]] = true;
+          }
+
+          if (Object.keys(pseudo.markup).length) {
+            pseudo_block();
+          } else {
+             pseudo.block = null;
+          }
+        }
+
+        if (pseudo.block) {
+          pseudo.block.source += node.source;
+          pseudo.block.value.push(node);
+
+        } else {
+          block.value.push(node);
+
+        }
+      }
+
+      block.value = block.value.filter(node => !(node.pseudo && node.value.length === 0));
+
+      return block
+    }
+
+
+  peg$result = peg$startRuleFunction();
+
+  if (peg$result !== peg$FAILED && peg$currPos === input.length) {
+    return peg$result;
+  } else {
+    if (peg$result !== peg$FAILED && peg$currPos < input.length) {
+      peg$fail(peg$endExpectation());
+    }
+
+    throw peg$buildStructuredError(
+      peg$maxFailExpected,
+      peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null,
+      peg$maxFailPos < input.length
+        ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1)
+        : peg$computeLocation(peg$maxFailPos, peg$maxFailPos)
+    );
+  }
+}
+
+var grammar = {
+  SyntaxError: peg$SyntaxError,
+  parse:       peg$parse
+};
+
+var chunker = createCommonjsModule(function (module, exports) {
+// Original work by Henrik Muehe (c) 2010
+//
+// CommonJS port by Mikola Lysenko 2013
+//
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parse = void 0;
+class ParseError extends Error {
+    constructor(message, parser) {
+        message += ` @ ${parser.pos}`;
+        if (parser.parsing)
+            message += ` in ${JSON.stringify(parser.parsing)}`;
+        super(message);
+        this.name = 'ParseError';
+    }
+}
+// tslint:disable-next-line prefer-template
+const letter = new RegExp('[' + [
+    // Letter, Uppercase
+    /\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A/.source,
+    // Letter, Titlecase
+    /\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC/.source,
+    // Letter, Lowercase
+    /\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A/.source,
+    // Letter, Modifier
+    /\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F/.source,
+    // Letter, Other
+    /\u00AA\u00BA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,
+].join('') + ']');
+class BibtexParser {
+    parse(input, options = {}) {
+        // this._progress = 0
+        this.pos = 0;
+        this.input = input;
+        this.max_entries = options.max_entries || 0;
+        this.entries = 0;
+        this.parsing = null;
+        this.chunks = [];
+        if (options.async) {
+            return this.bibtexAsync().then(() => this.chunks);
+        }
+        else {
+            this.bibtex();
+            return this.chunks;
+        }
+    }
+    isWhitespace(s, horizontalOnly = false) {
+        return (s === ' ' || s === '\t' || (!horizontalOnly && (s === '\r' || s === '\n')));
+    }
+    match(s) {
+        this.skipWhitespace();
+        if (this.input.substr(this.pos, s.length) !== s) {
+            throw new ParseError(`Token mismatch, expected ${JSON.stringify(s)}, found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers
+        }
+        this.pos += s.length;
+        this.skipWhitespace();
+    }
+    tryMatch(s) {
+        this.skipWhitespace();
+        return (this.input.substr(this.pos, s.length) === s);
+        // this.skipWhitespace()
+    }
+    skipWhitespace() {
+        while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos]))
+            this.pos++;
+        // shady
+        if (this.input[this.pos] === '%') {
+            while (this.pos < this.input.length && this.input[this.pos] !== '\n')
+                this.pos++;
+            while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos]))
+                this.pos++;
+        }
+    }
+    value_braces() {
+        let bracecount = 0;
+        this.match('{');
+        const start = this.pos;
+        let math = false;
+        while (true) {
+            switch (this.input[this.pos]) {
+                case '\\':
+                    this.pos += 1;
+                    break;
+                case '{':
+                    bracecount++;
+                    break;
+                case '}':
+                    if (bracecount === 0) {
+                        if (math)
+                            throw new ParseError('Unclosed math section', this);
+                        this.pos++;
+                        return this.input.substring(start, this.pos - 1);
+                    }
+                    bracecount--;
+                    break;
+                case '$':
+                    math = !math;
+                    break;
+            }
+            this.pos++;
+            if (this.pos >= this.input.length) {
+                throw new ParseError(`Unterminated brace-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers
+            }
+        }
+    }
+    value_quotes() {
+        this.match('"');
+        const start = this.pos;
+        let bracecount = 0;
+        while (true) {
+            switch (this.input[this.pos]) {
+                case '\\':
+                    this.pos += 1;
+                    break;
+                case '{':
+                    bracecount++;
+                    break;
+                case '}':
+                    bracecount--;
+                    break;
+                case '"':
+                    if (bracecount <= 0) {
+                        this.pos++;
+                        return this.input.substring(start, this.pos - 1);
+                    }
+            }
+            this.pos++;
+            if (this.pos >= this.input.length) {
+                throw new ParseError(`Unterminated quote-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers
+            }
+        }
+    }
+    single_value() {
+        if (this.tryMatch('{')) {
+            return this.value_braces();
+        }
+        else if (this.tryMatch('"')) {
+            return this.value_quotes();
+        }
+        else {
+            return this.key();
+        }
+    }
+    value() {
+        const values = [];
+        values.push(this.single_value());
+        while (this.tryMatch('#')) {
+            this.match('#');
+            values.push(this.single_value());
+        }
+        return values.join('');
+    }
+    key(allowUnicode = false) {
+        const start = this.pos;
+        while (true) {
+            if (this.pos === this.input.length) {
+                throw new ParseError('Runaway key', this);
+            }
+            if (this.input[this.pos].match(/['a-zA-Z0-9&;_:\\./-]/)) {
+                this.pos++;
+            }
+            else if (allowUnicode && this.input[this.pos].match(letter)) {
+                this.pos++;
+            }
+            else {
+                return this.input.substring(start, this.pos);
+            }
+        }
+    }
+    key_equals_value() {
+        const key = this.key();
+        if (!this.tryMatch('=')) {
+            throw new ParseError(`... = value expected, equals sign missing: ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers
+        }
+        this.match('=');
+        const val = this.value();
+        return [key, val];
+    }
+    key_value_list() {
+        this.key_equals_value();
+        while (this.tryMatch(',')) {
+            this.match(',');
+            // fixes problems with commas at the end of a list
+            if (this.tryMatch('}')) {
+                break;
+            }
+            this.key_equals_value();
+        }
+    }
+    entry(d) {
+        this.parsing = this.key(true);
+        this.match(',');
+        this.key_value_list();
+    }
+    directive() {
+        this.match('@');
+        return `@${this.key()}`.toLowerCase();
+    }
+    string() {
+        this.key_equals_value();
+    }
+    preamble() {
+        this.value();
+    }
+    comment() {
+        while (this.isWhitespace(this.input[this.pos], true))
+            this.pos++;
+        if (this.input[this.pos] === '{') {
+            this.value_braces();
+            return;
+        }
+        while (this.input[this.pos] !== '\n' && this.pos < this.input.length)
+            this.pos++;
+    }
+    /*
+    private progress() {
+      const progress = Math.round((this.pos / this.input.length * 100) / 5) * 5 // tslint:disable-line no-magic-numbers
+      if (this._progress !== progress) {
+        this._progress = progress
+        process.stdout.write(` (${this._progress}%) `)
+      }
+    }
+    */
+    hasMore() {
+        if (this.max_entries && this.entries >= this.max_entries)
+            return false;
+        return (this.pos < this.input.length);
+    }
+    bibtex() {
+        while (this.hasMore()) {
+            this.parseNext();
+        }
+    }
+    bibtexAsync() {
+        return this.hasMore() ? (new Promise(resolve => resolve(this.parseNext()))).then(() => this.bibtexAsync()) : Promise.resolve(null);
+    }
+    parseNext() {
+        // this.progress()
+        const chunk = {
+            offset: {
+                pos: this.pos,
+                line: this.input.substring(0, this.pos).split('\n').length - 1,
+            },
+            error: null,
+            text: null,
+        };
+        this.skipWhitespace();
+        if (this.pos >= this.input.length)
+            return;
+        let guard = '';
+        try {
+            const d = this.directive();
+            switch (d) {
+                case '@string':
+                    this.match('{');
+                    this.string();
+                    this.match('}');
+                    chunk.stringDeclaration = true;
+                    break;
+                case '@preamble':
+                    this.match('{');
+                    this.preamble();
+                    this.match('}');
+                    chunk.preamble = true;
+                    break;
+                case '@comment':
+                    this.comment();
+                    chunk.comment = true;
+                    break;
+                default:
+                    if (this.tryMatch('{')) {
+                        guard = '{}';
+                    }
+                    else if (this.tryMatch('(')) {
+                        guard = '()';
+                    }
+                    else {
+                        throw new ParseError(`Token mismatch, expected '{' or '(', found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers
+                    }
+                    this.match(guard[0]);
+                    this.entry(d);
+                    this.match(guard[1]);
+                    chunk.entry = true;
+                    this.entries++;
+                    break;
+            }
+        }
+        catch (err) {
+            if (err.name !== 'ParseError')
+                throw err;
+            chunk.error = err.message,
+                // skip ahead to the next @ and try again
+                this.pos = chunk.offset.pos + 1;
+            while (this.pos < this.input.length && this.input[this.pos] !== '@')
+                this.pos++;
+        }
+        const text = this.input.substring(chunk.offset.pos, this.pos);
+        const last = this.chunks.length - 1;
+        if (chunk.error && this.chunks.length && this.chunks[last].error) {
+            this.chunks[last].text += text;
+        }
+        else {
+            chunk.text = text;
+            this.chunks.push(chunk);
+        }
+    }
+}
+/**
+ * Reads the bibtex input and splits it into separate chunks of `@string`s, `@comment`s, and bibtex entries. Useful for detecting if a file is bibtex file and for filtering out basic errors that would
+ * make the more sophisticated [[bibtex.parse]] reject the whole file
+ *
+ * @returns array of chunks, with markers for type and errors (if any) found.
+ */
+function parse(input, options = {}) {
+    return (new BibtexParser).parse(input, options);
+}
+exports.parse = parse;
+
+});
+
+var $ = {
+	math: "\\$",
+	text: "\\$"
+};
+var _ = {
+	math: "\\_",
+	text: "\\_"
+};
+var require$$0$1 = {
+	"#": {
+	math: "\\#",
+	text: "\\#"
+},
+	$: $,
+	"%": {
+	math: "\\%",
+	text: "\\%"
+},
+	"&": {
+	math: "\\&",
+	text: "\\&"
+},
+	"/​": {
+	text: "\\slash",
+	commandspacer: true
+},
+	"<": {
+	math: "<"
+},
+	">": {
+	math: ">"
+},
+	"\\": {
+	math: "\\backslash",
+	text: "\\textbackslash",
+	commandspacer: true
+},
+	"^": {
+	math: "\\sphat",
+	text: "\\^"
+},
+	_: _,
+	"iïž aïžĄ": {
+	text: "\\t{ia}"
+},
+	"{": {
+	math: "\\lbrace",
+	text: "\\{"
+},
+	"}": {
+	math: "\\rbrace",
+	text: "\\}"
+},
+	"~": {
+	math: "\\sptilde",
+	text: "\\textasciitilde",
+	commandspacer: true
+},
+	" ": {
+	math: "~",
+	space: true,
+	text: "~"
+},
+	"ÂĄ": {
+	text: "\\textexclamdown",
+	commandspacer: true
+},
+	"Âą": {
+	math: "\\cent",
+	text: "\\textcent",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"ÂŁ": {
+	math: "\\pounds",
+	text: "\\textsterling",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"€": {
+	text: "\\textcurrency",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"„": {
+	math: "\\yen",
+	text: "\\textyen",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"Š": {
+	text: "\\textbrokenbar",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"§": {
+	text: "\\textsection",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"š": {
+	math: "\\spddot",
+	text: "\\textasciidieresis",
+	commandspacer: true
+},
+	"©": {
+	text: "\\textcopyright",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"ÂȘ": {
+	text: "\\textordfeminine",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"«": {
+	text: "\\guillemotleft",
+	commandspacer: true
+},
+	"ÂŹ": {
+	math: "\\lnot"
+},
+	"­": {
+	math: "\\-",
+	text: "\\-"
+},
+	"Âź": {
+	math: "\\circledR",
+	text: "\\textregistered",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"ÂŻ": {
+	text: "\\textasciimacron",
+	commandspacer: true
+},
+	"°": {
+	math: "^\\circ",
+	text: "\\textdegree",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"±": {
+	math: "\\pm"
+},
+	"ÂČ": {
+	math: "^{2}"
+},
+	"Âł": {
+	math: "^{3}"
+},
+	"ÂŽ": {
+	text: "\\textasciiacute",
+	commandspacer: true
+},
+	"”": {
+	text: "\\textmu",
+	commandspacer: true
+},
+	"¶": {
+	text: "\\textparagraph",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"·": {
+	math: "\\cdot"
+},
+	"ž": {
+	text: "\\c",
+	commandspacer: true
+},
+	"Âč": {
+	math: "^{1}"
+},
+	"Âș": {
+	text: "\\textordmasculine",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"»": {
+	text: "\\guillemotright",
+	commandspacer: true
+},
+	"Œ": {
+	math: "\\frac{1}{4}"
+},
+	"œ": {
+	math: "\\frac{1}{2}"
+},
+	"Ÿ": {
+	math: "\\frac{3}{4}"
+},
+	"Âż": {
+	text: "\\textquestiondown",
+	commandspacer: true
+},
+	"À": {
+	text: "\\`A"
+},
+	"Á": {
+	text: "\\'A"
+},
+	"Â": {
+	text: "\\^A"
+},
+	"Ã": {
+	text: "\\~A"
+},
+	"Ä": {
+	text: "\\\"A"
+},
+	"Å": {
+	text: "\\AA",
+	commandspacer: true
+},
+	"Æ": {
+	text: "\\AE",
+	commandspacer: true
+},
+	"Ç": {
+	text: "\\c{C}"
+},
+	"È": {
+	text: "\\`E"
+},
+	"É": {
+	text: "\\'E"
+},
+	"Ê": {
+	text: "\\^E"
+},
+	"Ë": {
+	text: "\\\"E"
+},
+	"Ì": {
+	text: "\\`I"
+},
+	"Í": {
+	text: "\\'I"
+},
+	"Î": {
+	text: "\\^I"
+},
+	"Ï": {
+	text: "\\\"I"
+},
+	"Ð": {
+	text: "\\DH",
+	commandspacer: true
+},
+	"Ñ": {
+	text: "\\~N"
+},
+	"Ò": {
+	text: "\\`O"
+},
+	"Ó": {
+	text: "\\'O"
+},
+	"Ô": {
+	text: "\\^O"
+},
+	"Õ": {
+	text: "\\~O"
+},
+	"Ö": {
+	text: "\\\"O"
+},
+	"×": {
+	math: "\\times",
+	text: "\\texttimes",
+	commandspacer: true
+},
+	"Ø": {
+	text: "\\O",
+	commandspacer: true
+},
+	"Ù": {
+	text: "\\`U"
+},
+	"Ú": {
+	text: "\\'U"
+},
+	"Û": {
+	text: "\\^U"
+},
+	"Ü": {
+	text: "\\\"U"
+},
+	"Ý": {
+	text: "\\'Y"
+},
+	"Þ": {
+	text: "\\TH",
+	commandspacer: true
+},
+	"ß": {
+	text: "\\ss",
+	commandspacer: true
+},
+	"Ă ": {
+	text: "\\`a"
+},
+	"ĂĄ": {
+	text: "\\'a"
+},
+	"Ăą": {
+	text: "\\^a"
+},
+	"ĂŁ": {
+	text: "\\~a"
+},
+	"Ă€": {
+	text: "\\\"a"
+},
+	"Ă„": {
+	text: "\\aa",
+	commandspacer: true
+},
+	"ĂŠ": {
+	text: "\\ae",
+	commandspacer: true
+},
+	"ç": {
+	text: "\\c{c}"
+},
+	"Ăš": {
+	text: "\\`e"
+},
+	"Ă©": {
+	text: "\\'e"
+},
+	"ĂȘ": {
+	text: "\\^e"
+},
+	"Ă«": {
+	text: "\\\"e"
+},
+	"ĂŹ": {
+	text: "\\`i"
+},
+	"Ă­": {
+	text: "\\'i"
+},
+	"Ăź": {
+	text: "\\^i"
+},
+	"ĂŻ": {
+	text: "\\\"i"
+},
+	"Ă°": {
+	math: "\\eth",
+	mathpackages: [
+		"amssymb",
+		"arevmath"
+	],
+	text: "\\dh",
+	commandspacer: true
+},
+	"ñ": {
+	text: "\\~n"
+},
+	"ĂČ": {
+	text: "\\`o"
+},
+	"Ăł": {
+	text: "\\'o"
+},
+	"ĂŽ": {
+	text: "\\^o"
+},
+	"Ă”": {
+	text: "\\~o"
+},
+	"ö": {
+	text: "\\\"o"
+},
+	"Ă·": {
+	math: "\\div"
+},
+	"Ăž": {
+	text: "\\o",
+	commandspacer: true
+},
+	"Ăč": {
+	text: "\\`u"
+},
+	"Ăș": {
+	text: "\\'u"
+},
+	"Ă»": {
+	text: "\\^u"
+},
+	"ĂŒ": {
+	text: "\\\"u"
+},
+	"Ăœ": {
+	text: "\\'y"
+},
+	"ĂŸ": {
+	text: "\\th",
+	commandspacer: true
+},
+	"Ăż": {
+	text: "\\\"y"
+},
+	"Ā": {
+	text: "\\=A"
+},
+	"ā": {
+	text: "\\=a"
+},
+	"Ă": {
+	text: "\\u{A}"
+},
+	"ă": {
+	text: "\\u{a}"
+},
+	"Ą": {
+	text: "\\k{A}"
+},
+	"ą": {
+	text: "\\k{a}"
+},
+	"Ć": {
+	text: "\\'C"
+},
+	"ć": {
+	text: "\\'c"
+},
+	"Ĉ": {
+	text: "\\^C"
+},
+	"ĉ": {
+	text: "\\^c"
+},
+	"Ċ": {
+	text: "\\.C"
+},
+	"ċ": {
+	text: "\\.c"
+},
+	"Č": {
+	text: "\\v{C}"
+},
+	"č": {
+	text: "\\v{c}"
+},
+	"Ď": {
+	text: "\\v{D}"
+},
+	"ď": {
+	text: "\\v{d}"
+},
+	"Đ": {
+	text: "\\DJ",
+	commandspacer: true
+},
+	"đ": {
+	text: "\\dj",
+	commandspacer: true
+},
+	"Ē": {
+	text: "\\=E"
+},
+	"ē": {
+	text: "\\=e"
+},
+	"Ĕ": {
+	text: "\\u{E}"
+},
+	"ĕ": {
+	text: "\\u{e}"
+},
+	"Ė": {
+	text: "\\.E"
+},
+	"ė": {
+	text: "\\.e"
+},
+	"Ę": {
+	text: "\\k{E}"
+},
+	"ę": {
+	text: "\\k{e}"
+},
+	"Ě": {
+	text: "\\v{E}"
+},
+	"ě": {
+	text: "\\v{e}"
+},
+	"Ĝ": {
+	text: "\\^G"
+},
+	"ĝ": {
+	text: "\\^g"
+},
+	"Ğ": {
+	text: "\\u{G}"
+},
+	"ğ": {
+	text: "\\u{g}"
+},
+	"Ä ": {
+	text: "\\.G"
+},
+	"ÄĄ": {
+	text: "\\.g"
+},
+	"Äą": {
+	text: "\\c{G}"
+},
+	"ÄŁ": {
+	text: "\\c{g}"
+},
+	"Ä€": {
+	text: "\\^H"
+},
+	"Ä„": {
+	text: "\\^h"
+},
+	"ÄŠ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char40}"
+},
+	"ħ": {
+	math: "\\Elzxh"
+},
+	"Äš": {
+	text: "\\~I"
+},
+	"Ä©": {
+	text: "\\~i"
+},
+	"ÄȘ": {
+	text: "\\=I"
+},
+	"Ä«": {
+	text: "\\=i"
+},
+	"ÄŹ": {
+	text: "\\u{I}"
+},
+	"Ä­": {
+	text: "{\\u \\i}"
+},
+	"Äź": {
+	text: "\\k{I}"
+},
+	"ÄŻ": {
+	text: "\\k{i}"
+},
+	"Ä°": {
+	text: "\\.I"
+},
+	"ı": {
+	math: "\\imath",
+	text: "\\i",
+	commandspacer: true
+},
+	"ÄČ": {
+	text: "IJ"
+},
+	"Äł": {
+	text: "ij"
+},
+	"ÄŽ": {
+	text: "\\^J"
+},
+	"Ä”": {
+	text: "\\^\\j",
+	commandspacer: true
+},
+	"Ķ": {
+	text: "\\c{K}"
+},
+	"Ä·": {
+	text: "\\c{k}"
+},
+	"Äž": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char91}"
+},
+	"Äč": {
+	text: "\\'L"
+},
+	"Äș": {
+	text: "\\'l"
+},
+	"Ä»": {
+	text: "\\c{L}"
+},
+	"Č": {
+	text: "\\c{l}"
+},
+	"Ĝ": {
+	text: "\\v{L}"
+},
+	"ÄŸ": {
+	text: "\\v{l}"
+},
+	"Äż": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char201}"
+},
+	"ƀ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char202}"
+},
+	"Ɓ": {
+	text: "\\L",
+	commandspacer: true
+},
+	"Ƃ": {
+	text: "\\l",
+	commandspacer: true
+},
+	"ƃ": {
+	text: "\\'N"
+},
+	"Ƅ": {
+	text: "\\'n"
+},
+	"ƅ": {
+	text: "\\c{N}"
+},
+	"Ɔ": {
+	text: "\\c{n}"
+},
+	"Ƈ": {
+	text: "\\v{N}"
+},
+	"ƈ": {
+	text: "\\v{n}"
+},
+	"Ɖ": {
+	text: "'n"
+},
+	"Ɗ": {
+	text: "\\NG",
+	commandspacer: true
+},
+	"Ƌ": {
+	text: "\\ng",
+	commandspacer: true
+},
+	"ƌ": {
+	text: "\\=O"
+},
+	"ƍ": {
+	text: "\\=o"
+},
+	"Ǝ": {
+	text: "\\u{O}"
+},
+	"Ə": {
+	text: "\\u{o}"
+},
+	"Ɛ": {
+	text: "\\H{O}"
+},
+	"Ƒ": {
+	text: "\\H{o}"
+},
+	"ƒ": {
+	text: "\\OE",
+	commandspacer: true
+},
+	"Ɠ": {
+	text: "\\oe",
+	commandspacer: true
+},
+	"Ɣ": {
+	text: "\\'R"
+},
+	"ƕ": {
+	text: "\\'r"
+},
+	"Ɩ": {
+	text: "\\c{R}"
+},
+	"Ɨ": {
+	text: "\\c{r}"
+},
+	"Ƙ": {
+	text: "\\v{R}"
+},
+	"ƙ": {
+	text: "\\v{r}"
+},
+	"ƚ": {
+	text: "\\'S"
+},
+	"ƛ": {
+	text: "\\'s"
+},
+	"Ɯ": {
+	text: "\\^S"
+},
+	"Ɲ": {
+	text: "\\^s"
+},
+	"ƞ": {
+	text: "\\c{S}"
+},
+	"Ɵ": {
+	text: "\\c{s}"
+},
+	"Ć ": {
+	text: "\\v{S}"
+},
+	"ĆĄ": {
+	text: "\\v{s}"
+},
+	"Ćą": {
+	text: "\\c{T}"
+},
+	"ĆŁ": {
+	text: "\\c{t}"
+},
+	"Ć€": {
+	text: "\\v{T}"
+},
+	"Ć„": {
+	text: "\\v{t}"
+},
+	"ĆŠ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char47}"
+},
+	"Ƨ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char63}"
+},
+	"Ćš": {
+	text: "\\~U"
+},
+	"Ć©": {
+	text: "\\~u"
+},
+	"ĆȘ": {
+	text: "\\=U"
+},
+	"Ć«": {
+	text: "\\=u"
+},
+	"ĆŹ": {
+	text: "\\u{U}"
+},
+	"Ć­": {
+	text: "\\u{u}"
+},
+	"Ćź": {
+	text: "\\r{U}"
+},
+	"ĆŻ": {
+	text: "\\r{u}"
+},
+	"Ć°": {
+	text: "\\H{U}"
+},
+	"Ʊ": {
+	text: "\\H{u}"
+},
+	"ĆČ": {
+	text: "\\k{U}"
+},
+	"Ćł": {
+	text: "\\k{u}"
+},
+	"ĆŽ": {
+	text: "\\^W"
+},
+	"Ć”": {
+	text: "\\^w"
+},
+	"ƶ": {
+	text: "\\^Y"
+},
+	"Ć·": {
+	text: "\\^y"
+},
+	"Ćž": {
+	text: "\\\"Y"
+},
+	"Ćč": {
+	text: "\\'Z"
+},
+	"Ćș": {
+	text: "\\'z"
+},
+	"Ć»": {
+	text: "\\.Z"
+},
+	"ĆŒ": {
+	text: "\\.z"
+},
+	"Ćœ": {
+	text: "\\v{Z}"
+},
+	"ĆŸ": {
+	text: "\\v{z}"
+},
+	"Ćż": {
+	text: "s"
+},
+	"ƒ": {
+	math: "f"
+},
+	"ƕ": {
+	text: "\\texthvlig",
+	commandspacer: true
+},
+	"ƞ": {
+	text: "\\textnrleg",
+	commandspacer: true
+},
+	"ÆȘ": {
+	text: "\\textesh",
+	commandspacer: true
+},
+	"Æ”": {
+	math: "\\Zbar"
+},
+	"Æș": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char195}"
+},
+	"ǂ": {
+	text: "\\textdoublepipe",
+	commandspacer: true
+},
+	"Ǎ": {
+	text: "\\v{A}"
+},
+	"ǎ": {
+	text: "\\v{a}"
+},
+	"Ǐ": {
+	text: "\\v{I}"
+},
+	"ǐ": {
+	text: "\\v{i}"
+},
+	"Ǒ": {
+	text: "\\v{O}"
+},
+	"ǒ": {
+	text: "\\v{o}"
+},
+	"Ǔ": {
+	text: "\\v{U}"
+},
+	"ǔ": {
+	text: "\\v{u}"
+},
+	"ÇŠ": {
+	text: "\\v{G}"
+},
+	"ǧ": {
+	text: "\\v{g}"
+},
+	"Çš": {
+	text: "\\v{K}"
+},
+	"Ç©": {
+	text: "\\v{k}"
+},
+	"ÇȘ": {
+	text: "\\k{O}"
+},
+	"Ç«": {
+	text: "\\k{o}"
+},
+	"Ç°": {
+	text: "\\v{j}"
+},
+	"ÇŽ": {
+	text: "\\'G"
+},
+	"Ç”": {
+	text: "\\'g"
+},
+	"Èš": {
+	text: "\\c{E}"
+},
+	"È©": {
+	text: "\\c{e}"
+},
+	"È·": {
+	math: "\\jmath"
+},
+	"ɐ": {
+	math: "\\Elztrna"
+},
+	"ɒ": {
+	math: "\\Elztrnsa"
+},
+	"ɔ": {
+	math: "\\Elzopeno"
+},
+	"ɖ": {
+	math: "\\Elzrtld"
+},
+	"ɘ": {
+	text: "{\\fontencoding{LEIP}\\selectfont\\char61}"
+},
+	"ə": {
+	math: "\\Elzschwa"
+},
+	"ɛ": {
+	math: "\\varepsilon"
+},
+	"ÉĄ": {
+	text: "g"
+},
+	"ÉŁ": {
+	math: "\\Elzpgamma"
+},
+	"É€": {
+	math: "\\Elzpbgam"
+},
+	"É„": {
+	math: "\\Elztrnh"
+},
+	"ÉŹ": {
+	math: "\\Elzbtdl"
+},
+	"É­": {
+	math: "\\Elzrtll"
+},
+	"ÉŻ": {
+	math: "\\Elztrnm"
+},
+	"É°": {
+	math: "\\Elztrnmlr"
+},
+	"ɱ": {
+	math: "\\Elzltlmr"
+},
+	"ÉČ": {
+	text: "\\Elzltln",
+	commandspacer: true
+},
+	"Éł": {
+	math: "\\Elzrtln"
+},
+	"É·": {
+	math: "\\Elzclomeg"
+},
+	"Éž": {
+	text: "\\textphi",
+	commandspacer: true
+},
+	"Éč": {
+	math: "\\Elztrnr"
+},
+	"Éș": {
+	math: "\\Elztrnrl"
+},
+	"É»": {
+	math: "\\Elzrttrnr"
+},
+	"Ɍ": {
+	math: "\\Elzrl"
+},
+	"ɜ": {
+	math: "\\Elzrtlr"
+},
+	"ÉŸ": {
+	math: "\\Elzfhr"
+},
+	"Éż": {
+	text: "{\\fontencoding{LEIP}\\selectfont\\char202}"
+},
+	"ʂ": {
+	math: "\\Elzrtls"
+},
+	"ʃ": {
+	math: "\\Elzesh"
+},
+	"ʇ": {
+	math: "\\Elztrnt"
+},
+	"ʈ": {
+	math: "\\Elzrtlt"
+},
+	"ʊ": {
+	math: "\\Elzpupsil"
+},
+	"ʋ": {
+	math: "\\Elzpscrv"
+},
+	"ʌ": {
+	math: "\\Elzinvv"
+},
+	"ʍ": {
+	math: "\\Elzinvw"
+},
+	"ʎ": {
+	math: "\\Elztrny"
+},
+	"ʐ": {
+	math: "\\Elzrtlz"
+},
+	"ʒ": {
+	math: "\\Elzyogh"
+},
+	"ʔ": {
+	math: "\\Elzglst"
+},
+	"ʕ": {
+	math: "\\Elzreglst"
+},
+	"ʖ": {
+	math: "\\Elzinglst"
+},
+	"ʞ": {
+	text: "\\textturnk",
+	commandspacer: true
+},
+	"Ê€": {
+	math: "\\Elzdyogh"
+},
+	"ʧ": {
+	math: "\\Elztesh"
+},
+	"Ê°": {
+	math: "^{h}",
+	text: "\\textsuperscript{h}"
+},
+	"ÊČ": {
+	math: "^{j}",
+	text: "\\textsuperscript{j}"
+},
+	"Êł": {
+	math: "^{r}",
+	text: "\\textsuperscript{r}"
+},
+	"Ê·": {
+	math: "^{w}",
+	text: "\\textsuperscript{w}"
+},
+	"Êž": {
+	math: "^{y}",
+	text: "\\textsuperscript{y}"
+},
+	"Êč": {
+	text: "'"
+},
+	"Ê»": {
+	text: "'"
+},
+	"ʌ": {
+	text: "'"
+},
+	"ʜ": {
+	text: "'"
+},
+	"Êż": {
+	text: "\\lasp",
+	commandspacer: true,
+	textpackages: [
+		"mathscinet"
+	]
+},
+	"ˆ": {
+	text: "\\textasciicircum",
+	commandspacer: true
+},
+	"ˇ": {
+	text: "\\textasciicaron",
+	commandspacer: true
+},
+	"ˈ": {
+	math: "\\Elzverts"
+},
+	"ˉ": {
+	text: "-"
+},
+	"ˌ": {
+	math: "\\Elzverti"
+},
+	"ː": {
+	math: "\\Elzlmrk"
+},
+	"ˑ": {
+	math: "\\Elzhlmrk"
+},
+	"˒": {
+	math: "\\Elzsbrhr"
+},
+	"˓": {
+	math: "\\Elzsblhr"
+},
+	"˔": {
+	math: "\\Elzrais"
+},
+	"˕": {
+	math: "\\Elzlow"
+},
+	"˘": {
+	text: "\\textasciibreve",
+	commandspacer: true
+},
+	"˙": {
+	text: "\\textperiodcentered",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"˚": {
+	text: "\\r{}"
+},
+	"˛": {
+	text: "\\k{}"
+},
+	"˜": {
+	text: "\\texttildelow",
+	commandspacer: true
+},
+	"˝": {
+	text: "\\H{}"
+},
+	"ËĄ": {
+	math: "^{l}",
+	text: "\\textsuperscript{l}"
+},
+	"Ëą": {
+	math: "^{s}",
+	text: "\\textsuperscript{s}"
+},
+	"ËŁ": {
+	math: "^{x}",
+	text: "\\textsuperscript{x}"
+},
+	"Ë„": {
+	text: "\\tone{55}"
+},
+	"ËŠ": {
+	text: "\\tone{44}"
+},
+	"˧": {
+	text: "\\tone{33}"
+},
+	"Ëš": {
+	text: "\\tone{22}"
+},
+	"Ë©": {
+	text: "\\tone{11}"
+},
+	"̀": {
+	math: "\\grave",
+	combiningdiacritic: true,
+	text: "\\`"
+},
+	"̀̄": {
+	text: "\\textgravemacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄̀": {
+	text: "\\textgravemacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̀̇": {
+	text: "\\textgravedot",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̀": {
+	text: "\\textgravedot",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"́": {
+	math: "\\acute",
+	combiningdiacritic: true,
+	text: "\\'"
+},
+	"́̄": {
+	text: "\\textacutemacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄́": {
+	text: "\\textacutemacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"́̌": {
+	text: "\\textacutewedge",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̌́": {
+	text: "\\textacutewedge",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̂": {
+	math: "\\hat",
+	combiningdiacritic: true,
+	text: "\\^"
+},
+	"̂̇": {
+	text: "\\textcircumdot",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̂": {
+	text: "\\textcircumdot",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̃": {
+	math: "\\tilde",
+	combiningdiacritic: true,
+	text: "\\~"
+},
+	"̃̇": {
+	text: "\\texttildedot",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̃": {
+	text: "\\texttildedot",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄": {
+	math: "\\bar",
+	combiningdiacritic: true,
+	text: "\\="
+},
+	"̅": {
+	math: "\\overline",
+	combiningdiacritic: true
+},
+	"̆": {
+	math: "\\breve",
+	combiningdiacritic: true,
+	text: "\\u",
+	commandspacer: true
+},
+	"̆̄": {
+	text: "\\textbrevemacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄̆": {
+	text: "\\textbrevemacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇": {
+	math: "\\dot",
+	combiningdiacritic: true,
+	text: "\\."
+},
+	"̇́": {
+	text: "\\textdotacute",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"́̇": {
+	text: "\\textdotacute",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̆": {
+	text: "\\textdotbreve",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̆̇": {
+	text: "\\textdotbreve",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̈": {
+	math: "\\ddot",
+	combiningdiacritic: true,
+	text: "\\\""
+},
+	"̉": {
+	math: "\\ovhook"
+},
+	"̊": {
+	math: "\\mathring",
+	combiningdiacritic: true,
+	text: "\\r",
+	commandspacer: true
+},
+	"̊̄": {
+	text: "\\textringmacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄̊": {
+	text: "\\textringmacron",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̋": {
+	text: "\\H",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"̌": {
+	math: "\\check",
+	text: "\\v",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"̍": {
+	text: "\\textvbaraccent",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̎": {
+	text: "\\textdoublevbaraccent",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̏": {
+	text: "\\textdoublegrave",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"̐": {
+	text: "\\textdotbreve",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̑": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char177}"
+},
+	"̒": {
+	math: "\\oturnedcomma"
+},
+	"̕": {
+	math: "\\ocommatopright"
+},
+	"̖": {
+	text: "\\textsubgrave",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"̘": {
+	text: "\\textadvancing",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̙": {
+	text: "\\textretracting",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̚": {
+	math: "\\droang",
+	text: "\\textcorner",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̜": {
+	text: "\\textsublhalfring",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̝": {
+	text: "\\textraising",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̞": {
+	text: "\\textlowering",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̟": {
+	text: "\\textsubplus",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌĄ": {
+	math: "\\Elzpalh"
+},
+	"Ìą": {
+	text: "\\Elzrh",
+	commandspacer: true
+},
+	"ÌŁ": {
+	text: "\\d",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"Ì€": {
+	text: "\\textsubumlaut",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì„": {
+	text: "\\textsubring",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̧": {
+	text: "\\c",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"Ìš": {
+	text: "\\k",
+	commandspacer: true,
+	combiningdiacritic: true
+},
+	"Ì©": {
+	text: "\\textsyllabic",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌȘ": {
+	math: "\\Elzsbbrg",
+	text: "\\textsubbridge",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì«": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char203}"
+},
+	"ÌŹ": {
+	text: "\\textsubwedge",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌŻ": {
+	text: "\\textsubarch",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì°": {
+	math: "\\utilde",
+	text: "\\textsubtilde",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̱": {
+	math: "\\underbar",
+	combiningdiacritic: true,
+	text: "\\textsubbar",
+	commandspacer: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌČ": {
+	math: "\\underline"
+},
+	"ÌŽ": {
+	text: "\\textsuperimposetilde",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì”": {
+	text: "\\Elzxl",
+	commandspacer: true
+},
+	"̶": {
+	text: "\\Elzbar",
+	commandspacer: true
+},
+	"Ì·": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char215}"
+},
+	"Ìž": {
+	math: "\\not"
+},
+	"Ìč": {
+	text: "\\textsubrhalfring",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ìș": {
+	text: "\\textinvsubbridge",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì»": {
+	text: "\\textsubsquare",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̌": {
+	text: "\\textseagull",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̜": {
+	text: "\\textovercross",
+	commandspacer: true,
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÍĄ": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char225}"
+},
+	"ÍŽ": {
+	text: "'"
+},
+	"Í”": {
+	text: ","
+},
+	"ÍŸ": {
+	text: ";"
+},
+	"Ά": {
+	text: "\\'A"
+},
+	"Έ": {
+	text: "\\'E"
+},
+	"Ή": {
+	text: "\\'H"
+},
+	"Ί": {
+	text: "{\\'{}I}"
+},
+	"Ό": {
+	text: "{\\'{}O}"
+},
+	"Ύ": {
+	math: "\\mathrm{'Y}"
+},
+	"Ώ": {
+	math: "\\mathrm{'\\Omega}"
+},
+	"ΐ": {
+	math: "\\acute{\\ddot{\\iota}}"
+},
+	"Α": {
+	math: "A"
+},
+	"Β": {
+	math: "B"
+},
+	"Γ": {
+	math: "\\Gamma"
+},
+	"Δ": {
+	math: "\\Delta"
+},
+	"Ε": {
+	math: "E"
+},
+	"Ζ": {
+	math: "Z"
+},
+	"Η": {
+	math: "H"
+},
+	"Θ": {
+	math: "\\Theta"
+},
+	"Ι": {
+	math: "I"
+},
+	"Κ": {
+	math: "K"
+},
+	"Λ": {
+	math: "\\Lambda"
+},
+	"Μ": {
+	math: "M"
+},
+	"Ν": {
+	math: "N"
+},
+	"Ξ": {
+	math: "\\Xi"
+},
+	"Ο": {
+	math: "O"
+},
+	"Π": {
+	math: "\\Pi"
+},
+	"ÎĄ": {
+	math: "P"
+},
+	"ÎŁ": {
+	math: "\\Sigma"
+},
+	"΀": {
+	math: "T"
+},
+	"΄": {
+	math: "\\Upsilon"
+},
+	"Ί": {
+	math: "\\Phi"
+},
+	"Χ": {
+	math: "X"
+},
+	"Κ": {
+	math: "\\Psi"
+},
+	"Ω": {
+	math: "\\Omega"
+},
+	"ÎȘ": {
+	math: "\\mathrm{\\ddot{I}}"
+},
+	"Ϋ": {
+	math: "\\mathrm{\\ddot{Y}}"
+},
+	"ÎŹ": {
+	text: "{\\'$\\alpha$}"
+},
+	"έ": {
+	math: "\\acute{\\epsilon}"
+},
+	"Îź": {
+	math: "\\acute{\\eta}"
+},
+	"ÎŻ": {
+	math: "\\acute{\\iota}"
+},
+	"ΰ": {
+	math: "\\acute{\\ddot{\\upsilon}}"
+},
+	"α": {
+	math: "\\alpha"
+},
+	"ÎČ": {
+	math: "\\beta"
+},
+	"Îł": {
+	math: "\\gamma"
+},
+	"ÎŽ": {
+	math: "\\delta"
+},
+	"Δ": {
+	math: "\\epsilon"
+},
+	"ζ": {
+	math: "\\zeta"
+},
+	"η": {
+	math: "\\eta"
+},
+	"Ξ": {
+	math: "\\theta",
+	text: "\\texttheta",
+	commandspacer: true
+},
+	"Îč": {
+	math: "\\iota"
+},
+	"Îș": {
+	math: "\\kappa"
+},
+	"λ": {
+	math: "\\lambda"
+},
+	"Ό": {
+	math: "\\mu"
+},
+	"Μ": {
+	math: "\\nu"
+},
+	"Ο": {
+	math: "\\xi"
+},
+	"Îż": {
+	math: "o"
+},
+	"π": {
+	math: "\\pi"
+},
+	"ρ": {
+	math: "\\rho"
+},
+	"ς": {
+	math: "\\varsigma"
+},
+	"σ": {
+	math: "\\sigma"
+},
+	"τ": {
+	math: "\\tau"
+},
+	"υ": {
+	math: "\\upsilon"
+},
+	"φ": {
+	math: "\\varphi"
+},
+	"χ": {
+	math: "\\chi"
+},
+	"ψ": {
+	math: "\\psi"
+},
+	"ω": {
+	math: "\\omega"
+},
+	"ϊ": {
+	math: "\\ddot{\\iota}"
+},
+	"ϋ": {
+	math: "\\ddot{\\upsilon}"
+},
+	"ό": {
+	text: "\\'o"
+},
+	"ύ": {
+	math: "\\acute{\\upsilon}"
+},
+	"ώ": {
+	math: "\\acute{\\omega}"
+},
+	"ϐ": {
+	math: "\\varbeta",
+	text: "\\Pisymbol{ppi022}{87}"
+},
+	"ϑ": {
+	math: "\\vartheta",
+	text: "\\textvartheta",
+	commandspacer: true
+},
+	"ϒ": {
+	math: "\\Upsilon"
+},
+	"ϕ": {
+	math: "\\phi"
+},
+	"ϖ": {
+	math: "\\varpi"
+},
+	"Ϙ": {
+	math: "\\Qoppa"
+},
+	"ϙ": {
+	math: "\\qoppa"
+},
+	"Ϛ": {
+	math: "\\Stigma"
+},
+	"ϛ": {
+	math: "\\stigma"
+},
+	"Ϝ": {
+	math: "\\Digamma"
+},
+	"ϝ": {
+	math: "\\digamma"
+},
+	"Ϟ": {
+	math: "\\Koppa"
+},
+	"ϟ": {
+	math: "\\koppa"
+},
+	"Ï ": {
+	math: "\\Sampi"
+},
+	"ÏĄ": {
+	math: "\\sampi"
+},
+	"Ï°": {
+	math: "\\varkappa"
+},
+	"ϱ": {
+	math: "\\varrho"
+},
+	"ÏŽ": {
+	math: "\\upvarTheta",
+	text: "\\textTheta",
+	commandspacer: true
+},
+	"Ï”": {
+	math: "\\epsilon"
+},
+	"϶": {
+	math: "\\backepsilon"
+},
+	"Ё": {
+	text: "\\cyrchar\\CYRYO",
+	commandspacer: true
+},
+	"Ђ": {
+	text: "\\cyrchar\\CYRDJE",
+	commandspacer: true
+},
+	"Ѓ": {
+	text: "\\cyrchar{\\'\\CYRG}"
+},
+	"Є": {
+	text: "\\cyrchar\\CYRIE",
+	commandspacer: true
+},
+	"Ѕ": {
+	text: "\\cyrchar\\CYRDZE",
+	commandspacer: true
+},
+	"І": {
+	text: "\\cyrchar\\CYRII",
+	commandspacer: true
+},
+	"Ї": {
+	text: "\\cyrchar\\CYRYI",
+	commandspacer: true
+},
+	"Ј": {
+	text: "\\cyrchar\\CYRJE",
+	commandspacer: true
+},
+	"Љ": {
+	text: "\\cyrchar\\CYRLJE",
+	commandspacer: true
+},
+	"Њ": {
+	text: "\\cyrchar\\CYRNJE",
+	commandspacer: true
+},
+	"Ћ": {
+	text: "\\cyrchar\\CYRTSHE",
+	commandspacer: true
+},
+	"Ќ": {
+	text: "\\cyrchar{\\'\\CYRK}"
+},
+	"Ў": {
+	text: "\\cyrchar\\CYRUSHRT",
+	commandspacer: true
+},
+	"Џ": {
+	text: "\\cyrchar\\CYRDZHE",
+	commandspacer: true
+},
+	"А": {
+	text: "\\cyrchar\\CYRA",
+	commandspacer: true
+},
+	"Б": {
+	text: "\\cyrchar\\CYRB",
+	commandspacer: true
+},
+	"В": {
+	text: "\\cyrchar\\CYRV",
+	commandspacer: true
+},
+	"Г": {
+	text: "\\cyrchar\\CYRG",
+	commandspacer: true
+},
+	"Д": {
+	text: "\\cyrchar\\CYRD",
+	commandspacer: true
+},
+	"Е": {
+	text: "\\cyrchar\\CYRE",
+	commandspacer: true
+},
+	"Ж": {
+	text: "\\cyrchar\\CYRZH",
+	commandspacer: true
+},
+	"З": {
+	text: "\\cyrchar\\CYRZ",
+	commandspacer: true
+},
+	"И": {
+	text: "\\cyrchar\\CYRI",
+	commandspacer: true
+},
+	"Й": {
+	text: "\\cyrchar\\CYRISHRT",
+	commandspacer: true
+},
+	"К": {
+	text: "\\cyrchar\\CYRK",
+	commandspacer: true
+},
+	"Л": {
+	text: "\\cyrchar\\CYRL",
+	commandspacer: true
+},
+	"М": {
+	text: "\\cyrchar\\CYRM",
+	commandspacer: true
+},
+	"Н": {
+	text: "\\cyrchar\\CYRN",
+	commandspacer: true
+},
+	"О": {
+	text: "\\cyrchar\\CYRO",
+	commandspacer: true
+},
+	"П": {
+	text: "\\cyrchar\\CYRP",
+	commandspacer: true
+},
+	"Đ ": {
+	text: "\\cyrchar\\CYRR",
+	commandspacer: true
+},
+	"ĐĄ": {
+	text: "\\cyrchar\\CYRS",
+	commandspacer: true
+},
+	"Đą": {
+	text: "\\cyrchar\\CYRT",
+	commandspacer: true
+},
+	"ĐŁ": {
+	text: "\\cyrchar\\CYRU",
+	commandspacer: true
+},
+	"Đ€": {
+	text: "\\cyrchar\\CYRF",
+	commandspacer: true
+},
+	"Đ„": {
+	text: "\\cyrchar\\CYRH",
+	commandspacer: true
+},
+	"ĐŠ": {
+	text: "\\cyrchar\\CYRC",
+	commandspacer: true
+},
+	"Ч": {
+	text: "\\cyrchar\\CYRCH",
+	commandspacer: true
+},
+	"Đš": {
+	text: "\\cyrchar\\CYRSH",
+	commandspacer: true
+},
+	"Đ©": {
+	text: "\\cyrchar\\CYRSHCH",
+	commandspacer: true
+},
+	"ĐȘ": {
+	text: "\\cyrchar\\CYRHRDSN",
+	commandspacer: true
+},
+	"Đ«": {
+	text: "\\cyrchar\\CYRERY",
+	commandspacer: true
+},
+	"ĐŹ": {
+	text: "\\cyrchar\\CYRSFTSN",
+	commandspacer: true
+},
+	"Đ­": {
+	text: "\\cyrchar\\CYREREV",
+	commandspacer: true
+},
+	"Đź": {
+	text: "\\cyrchar\\CYRYU",
+	commandspacer: true
+},
+	"ĐŻ": {
+	text: "\\cyrchar\\CYRYA",
+	commandspacer: true
+},
+	"Đ°": {
+	text: "\\cyrchar\\cyra",
+	commandspacer: true
+},
+	"б": {
+	text: "\\cyrchar\\cyrb",
+	commandspacer: true
+},
+	"ĐČ": {
+	text: "\\cyrchar\\cyrv",
+	commandspacer: true
+},
+	"Đł": {
+	text: "\\cyrchar\\cyrg",
+	commandspacer: true
+},
+	"ĐŽ": {
+	text: "\\cyrchar\\cyrd",
+	commandspacer: true
+},
+	"Đ”": {
+	text: "\\cyrchar\\cyre",
+	commandspacer: true
+},
+	"ж": {
+	text: "\\cyrchar\\cyrzh",
+	commandspacer: true
+},
+	"Đ·": {
+	text: "\\cyrchar\\cyrz",
+	commandspacer: true
+},
+	"Đž": {
+	text: "\\cyrchar\\cyri",
+	commandspacer: true
+},
+	"Đč": {
+	text: "\\cyrchar\\cyrishrt",
+	commandspacer: true
+},
+	"Đș": {
+	text: "\\cyrchar\\cyrk",
+	commandspacer: true
+},
+	"Đ»": {
+	text: "\\cyrchar\\cyrl",
+	commandspacer: true
+},
+	"ĐŒ": {
+	text: "\\cyrchar\\cyrm",
+	commandspacer: true
+},
+	"Đœ": {
+	text: "\\cyrchar\\cyrn",
+	commandspacer: true
+},
+	"ĐŸ": {
+	text: "\\cyrchar\\cyro",
+	commandspacer: true
+},
+	"Đż": {
+	text: "\\cyrchar\\cyrp",
+	commandspacer: true
+},
+	"р": {
+	text: "\\cyrchar\\cyrr",
+	commandspacer: true
+},
+	"с": {
+	text: "\\cyrchar\\cyrs",
+	commandspacer: true
+},
+	"т": {
+	text: "\\cyrchar\\cyrt",
+	commandspacer: true
+},
+	"у": {
+	text: "\\cyrchar\\cyru",
+	commandspacer: true
+},
+	"ф": {
+	text: "\\cyrchar\\cyrf",
+	commandspacer: true
+},
+	"х": {
+	text: "\\cyrchar\\cyrh",
+	commandspacer: true
+},
+	"ц": {
+	text: "\\cyrchar\\cyrc",
+	commandspacer: true
+},
+	"ч": {
+	text: "\\cyrchar\\cyrch",
+	commandspacer: true
+},
+	"ш": {
+	text: "\\cyrchar\\cyrsh",
+	commandspacer: true
+},
+	"щ": {
+	text: "\\cyrchar\\cyrshch",
+	commandspacer: true
+},
+	"ъ": {
+	text: "\\cyrchar\\cyrhrdsn",
+	commandspacer: true
+},
+	"ы": {
+	text: "\\cyrchar\\cyrery",
+	commandspacer: true
+},
+	"ь": {
+	text: "\\cyrchar\\cyrsftsn",
+	commandspacer: true
+},
+	"э": {
+	text: "\\cyrchar\\cyrerev",
+	commandspacer: true
+},
+	"ю": {
+	text: "\\cyrchar\\cyryu",
+	commandspacer: true
+},
+	"я": {
+	text: "\\cyrchar\\cyrya",
+	commandspacer: true
+},
+	"ё": {
+	text: "\\cyrchar\\cyryo",
+	commandspacer: true
+},
+	"ђ": {
+	text: "\\cyrchar\\cyrdje",
+	commandspacer: true
+},
+	"ѓ": {
+	text: "\\cyrchar{\\'\\cyrg}"
+},
+	"є": {
+	text: "\\cyrchar\\cyrie",
+	commandspacer: true
+},
+	"ѕ": {
+	text: "\\cyrchar\\cyrdze",
+	commandspacer: true
+},
+	"і": {
+	text: "\\cyrchar\\cyrii",
+	commandspacer: true
+},
+	"ї": {
+	text: "\\cyrchar\\cyryi",
+	commandspacer: true
+},
+	"ј": {
+	text: "\\cyrchar\\cyrje",
+	commandspacer: true
+},
+	"љ": {
+	text: "\\cyrchar\\cyrlje",
+	commandspacer: true
+},
+	"њ": {
+	text: "\\cyrchar\\cyrnje",
+	commandspacer: true
+},
+	"ћ": {
+	text: "\\cyrchar\\cyrtshe",
+	commandspacer: true
+},
+	"ќ": {
+	text: "\\cyrchar{\\'\\cyrk}"
+},
+	"ў": {
+	text: "\\cyrchar\\cyrushrt",
+	commandspacer: true
+},
+	"џ": {
+	text: "\\cyrchar\\cyrdzhe",
+	commandspacer: true
+},
+	"Ń ": {
+	text: "\\cyrchar\\CYROMEGA",
+	commandspacer: true
+},
+	"ŃĄ": {
+	text: "\\cyrchar\\cyromega",
+	commandspacer: true
+},
+	"Ńą": {
+	text: "\\cyrchar\\CYRYAT",
+	commandspacer: true
+},
+	"Ń€": {
+	text: "\\cyrchar\\CYRIOTE",
+	commandspacer: true
+},
+	"Ń„": {
+	text: "\\cyrchar\\cyriote",
+	commandspacer: true
+},
+	"ŃŠ": {
+	text: "\\cyrchar\\CYRLYUS",
+	commandspacer: true
+},
+	"ѧ": {
+	text: "\\cyrchar\\cyrlyus",
+	commandspacer: true
+},
+	"Ńš": {
+	text: "\\cyrchar\\CYRIOTLYUS",
+	commandspacer: true
+},
+	"Ń©": {
+	text: "\\cyrchar\\cyriotlyus",
+	commandspacer: true
+},
+	"ŃȘ": {
+	text: "\\cyrchar\\CYRBYUS",
+	commandspacer: true
+},
+	"ŃŹ": {
+	text: "\\cyrchar\\CYRIOTBYUS",
+	commandspacer: true
+},
+	"Ń­": {
+	text: "\\cyrchar\\cyriotbyus",
+	commandspacer: true
+},
+	"Ńź": {
+	text: "\\cyrchar\\CYRKSI",
+	commandspacer: true
+},
+	"ŃŻ": {
+	text: "\\cyrchar\\cyrksi",
+	commandspacer: true
+},
+	"Ń°": {
+	text: "\\cyrchar\\CYRPSI",
+	commandspacer: true
+},
+	"ѱ": {
+	text: "\\cyrchar\\cyrpsi",
+	commandspacer: true
+},
+	"ŃČ": {
+	text: "\\cyrchar\\CYRFITA",
+	commandspacer: true
+},
+	"ŃŽ": {
+	text: "\\cyrchar\\CYRIZH",
+	commandspacer: true
+},
+	"Ńž": {
+	text: "\\cyrchar\\CYRUK",
+	commandspacer: true
+},
+	"Ńč": {
+	text: "\\cyrchar\\cyruk",
+	commandspacer: true
+},
+	"Ńș": {
+	text: "\\cyrchar\\CYROMEGARND",
+	commandspacer: true
+},
+	"Ń»": {
+	text: "\\cyrchar\\cyromegarnd",
+	commandspacer: true
+},
+	"ŃŒ": {
+	text: "\\cyrchar\\CYROMEGATITLO",
+	commandspacer: true
+},
+	"Ńœ": {
+	text: "\\cyrchar\\cyromegatitlo",
+	commandspacer: true
+},
+	"ŃŸ": {
+	text: "\\cyrchar\\CYROT",
+	commandspacer: true
+},
+	"Ńż": {
+	text: "\\cyrchar\\cyrot",
+	commandspacer: true
+},
+	"Ҁ": {
+	text: "\\cyrchar\\CYRKOPPA",
+	commandspacer: true
+},
+	"ҁ": {
+	text: "\\cyrchar\\cyrkoppa",
+	commandspacer: true
+},
+	"҂": {
+	text: "\\cyrchar\\cyrthousands",
+	commandspacer: true
+},
+	"҈": {
+	text: "\\cyrchar\\cyrhundredthousands",
+	commandspacer: true
+},
+	"҉": {
+	text: "\\cyrchar\\cyrmillions",
+	commandspacer: true
+},
+	"Ҍ": {
+	text: "\\cyrchar\\CYRSEMISFTSN",
+	commandspacer: true
+},
+	"ҍ": {
+	text: "\\cyrchar\\cyrsemisftsn",
+	commandspacer: true
+},
+	"Ҏ": {
+	text: "\\cyrchar\\CYRRTICK",
+	commandspacer: true
+},
+	"ҏ": {
+	text: "\\cyrchar\\cyrrtick",
+	commandspacer: true
+},
+	"Ґ": {
+	text: "\\cyrchar\\CYRGUP",
+	commandspacer: true
+},
+	"ґ": {
+	text: "\\cyrchar\\cyrgup",
+	commandspacer: true
+},
+	"Ғ": {
+	text: "\\cyrchar\\CYRGHCRS",
+	commandspacer: true
+},
+	"ғ": {
+	text: "\\cyrchar\\cyrghcrs",
+	commandspacer: true
+},
+	"Ҕ": {
+	text: "\\cyrchar\\CYRGHK",
+	commandspacer: true
+},
+	"ҕ": {
+	text: "\\cyrchar\\cyrghk",
+	commandspacer: true
+},
+	"Җ": {
+	text: "\\cyrchar\\CYRZHDSC",
+	commandspacer: true
+},
+	"җ": {
+	text: "\\cyrchar\\cyrzhdsc",
+	commandspacer: true
+},
+	"Ҙ": {
+	text: "\\cyrchar\\CYRZDSC",
+	commandspacer: true
+},
+	"ҙ": {
+	text: "\\cyrchar\\cyrzdsc",
+	commandspacer: true
+},
+	"Қ": {
+	text: "\\cyrchar\\CYRKDSC",
+	commandspacer: true
+},
+	"қ": {
+	text: "\\cyrchar\\cyrkdsc",
+	commandspacer: true
+},
+	"Ҝ": {
+	text: "\\cyrchar\\CYRKVCRS",
+	commandspacer: true
+},
+	"ҝ": {
+	text: "\\cyrchar\\cyrkvcrs",
+	commandspacer: true
+},
+	"Ҟ": {
+	text: "\\cyrchar\\CYRKHCRS",
+	commandspacer: true
+},
+	"ҟ": {
+	text: "\\cyrchar\\cyrkhcrs",
+	commandspacer: true
+},
+	"Ò ": {
+	text: "\\cyrchar\\CYRKBEAK",
+	commandspacer: true
+},
+	"ÒĄ": {
+	text: "\\cyrchar\\cyrkbeak",
+	commandspacer: true
+},
+	"Òą": {
+	text: "\\cyrchar\\CYRNDSC",
+	commandspacer: true
+},
+	"ÒŁ": {
+	text: "\\cyrchar\\cyrndsc",
+	commandspacer: true
+},
+	"Ò€": {
+	text: "\\cyrchar\\CYRNG",
+	commandspacer: true
+},
+	"Ò„": {
+	text: "\\cyrchar\\cyrng",
+	commandspacer: true
+},
+	"ÒŠ": {
+	text: "\\cyrchar\\CYRPHK",
+	commandspacer: true
+},
+	"Ò§": {
+	text: "\\cyrchar\\cyrphk",
+	commandspacer: true
+},
+	"Òš": {
+	text: "\\cyrchar\\CYRABHHA",
+	commandspacer: true
+},
+	"Ò©": {
+	text: "\\cyrchar\\cyrabhha",
+	commandspacer: true
+},
+	"ÒȘ": {
+	text: "\\cyrchar\\CYRSDSC",
+	commandspacer: true
+},
+	"Ò«": {
+	text: "\\cyrchar\\cyrsdsc",
+	commandspacer: true
+},
+	"ÒŹ": {
+	text: "\\cyrchar\\CYRTDSC",
+	commandspacer: true
+},
+	"Ò­": {
+	text: "\\cyrchar\\cyrtdsc",
+	commandspacer: true
+},
+	"Òź": {
+	text: "\\cyrchar\\CYRY",
+	commandspacer: true
+},
+	"ÒŻ": {
+	text: "\\cyrchar\\cyry",
+	commandspacer: true
+},
+	"Ò°": {
+	text: "\\cyrchar\\CYRYHCRS",
+	commandspacer: true
+},
+	"Ò±": {
+	text: "\\cyrchar\\cyryhcrs",
+	commandspacer: true
+},
+	"ÒČ": {
+	text: "\\cyrchar\\CYRHDSC",
+	commandspacer: true
+},
+	"Òł": {
+	text: "\\cyrchar\\cyrhdsc",
+	commandspacer: true
+},
+	"ÒŽ": {
+	text: "\\cyrchar\\CYRTETSE",
+	commandspacer: true
+},
+	"Ò”": {
+	text: "\\cyrchar\\cyrtetse",
+	commandspacer: true
+},
+	"Ò¶": {
+	text: "\\cyrchar\\CYRCHRDSC",
+	commandspacer: true
+},
+	"Ò·": {
+	text: "\\cyrchar\\cyrchrdsc",
+	commandspacer: true
+},
+	"Òž": {
+	text: "\\cyrchar\\CYRCHVCRS",
+	commandspacer: true
+},
+	"Òč": {
+	text: "\\cyrchar\\cyrchvcrs",
+	commandspacer: true
+},
+	"Òș": {
+	text: "\\cyrchar\\CYRSHHA",
+	commandspacer: true
+},
+	"Ò»": {
+	text: "\\cyrchar\\cyrshha",
+	commandspacer: true
+},
+	"Ҍ": {
+	text: "\\cyrchar\\CYRABHCH",
+	commandspacer: true
+},
+	"Ҝ": {
+	text: "\\cyrchar\\cyrabhch",
+	commandspacer: true
+},
+	"ÒŸ": {
+	text: "\\cyrchar\\CYRABHCHDSC",
+	commandspacer: true
+},
+	"Òż": {
+	text: "\\cyrchar\\cyrabhchdsc",
+	commandspacer: true
+},
+	"Ӏ": {
+	text: "\\cyrchar\\CYRpalochka",
+	commandspacer: true
+},
+	"Ӄ": {
+	text: "\\cyrchar\\CYRKHK",
+	commandspacer: true
+},
+	"ӄ": {
+	text: "\\cyrchar\\cyrkhk",
+	commandspacer: true
+},
+	"Ӈ": {
+	text: "\\cyrchar\\CYRNHK",
+	commandspacer: true
+},
+	"ӈ": {
+	text: "\\cyrchar\\cyrnhk",
+	commandspacer: true
+},
+	"Ӌ": {
+	text: "\\cyrchar\\CYRCHLDSC",
+	commandspacer: true
+},
+	"ӌ": {
+	text: "\\cyrchar\\cyrchldsc",
+	commandspacer: true
+},
+	"Ӕ": {
+	text: "\\cyrchar\\CYRAE",
+	commandspacer: true
+},
+	"ӕ": {
+	text: "\\cyrchar\\cyrae",
+	commandspacer: true
+},
+	"Ә": {
+	text: "\\cyrchar\\CYRSCHWA",
+	commandspacer: true
+},
+	"ә": {
+	text: "\\cyrchar\\cyrschwa",
+	commandspacer: true
+},
+	"Ó ": {
+	text: "\\cyrchar\\CYRABHDZE",
+	commandspacer: true
+},
+	"ÓĄ": {
+	text: "\\cyrchar\\cyrabhdze",
+	commandspacer: true
+},
+	"Óš": {
+	text: "\\cyrchar\\CYROTLD",
+	commandspacer: true
+},
+	"Ó©": {
+	text: "\\cyrchar\\cyrotld",
+	commandspacer: true
+},
+	"àĄ±": {
+	math: "\\\\backslash"
+},
+	"ᔃ": {
+	math: "^{a}",
+	text: "\\textsuperscript{a}"
+},
+	"ᔇ": {
+	math: "^{b}",
+	text: "\\textsuperscript{b}"
+},
+	"ᔈ": {
+	math: "^{d}",
+	text: "\\textsuperscript{d}"
+},
+	"ᔉ": {
+	math: "^{e}",
+	text: "\\textsuperscript{e}"
+},
+	"ᔍ": {
+	math: "^{g}",
+	text: "\\textsuperscript{g}"
+},
+	"ᔏ": {
+	math: "^{k}",
+	text: "\\textsuperscript{k}"
+},
+	"ᔐ": {
+	math: "^{m}",
+	text: "\\textsuperscript{m}"
+},
+	"á”’": {
+	math: "^{o}",
+	text: "\\textsuperscript{o}"
+},
+	"á”–": {
+	math: "^{p}",
+	text: "\\textsuperscript{p}"
+},
+	"á”—": {
+	math: "^{t}",
+	text: "\\textsuperscript{t}"
+},
+	"ᔘ": {
+	math: "^{u}",
+	text: "\\textsuperscript{u}"
+},
+	"á”›": {
+	math: "^{v}",
+	text: "\\textsuperscript{v}"
+},
+	"ᶜ": {
+	math: "^{c}",
+	text: "\\textsuperscript{c}"
+},
+	"ᶠ": {
+	math: "^{f}",
+	text: "\\textsuperscript{f}"
+},
+	"ᶻ": {
+	math: "^{z}",
+	text: "\\textsuperscript{z}"
+},
+	"ᾂ": {
+	text: "\\.B"
+},
+	"ឃ": {
+	text: "\\.b"
+},
+	"ᾄ": {
+	text: "\\d{B}"
+},
+	"ᾅ": {
+	text: "\\d{b}"
+},
+	"ᾆ": {
+	text: "\\b{B}"
+},
+	"ᾇ": {
+	text: "\\b{b}"
+},
+	"ᾊ": {
+	text: "\\.D"
+},
+	"ᾋ": {
+	text: "\\.d"
+},
+	"ᾌ": {
+	text: "\\d{D}"
+},
+	"ឍ": {
+	text: "\\d{d}"
+},
+	"ᾎ": {
+	text: "\\b{D}"
+},
+	"ត": {
+	text: "\\b{d}"
+},
+	"ថ": {
+	text: "\\c{D}"
+},
+	"ᾑ": {
+	text: "\\c{d}"
+},
+	"ᾜ": {
+	text: "\\c{\\u{E}}"
+},
+	"ឝ": {
+	text: "\\c{\\u{e}}"
+},
+	"ᾞ": {
+	text: "\\.F"
+},
+	"ᾟ": {
+	text: "\\.f"
+},
+	"áž ": {
+	text: "\\=G"
+},
+	"ឥ": {
+	text: "\\=g"
+},
+	"ážą": {
+	text: "\\.H"
+},
+	"ឣ": {
+	text: "\\.h"
+},
+	"ក": {
+	text: "\\d{H}"
+},
+	"áž„": {
+	text: "\\d{h}"
+},
+	"ដ": {
+	text: "\\\"H"
+},
+	"ឧ": {
+	text: "\\\"h"
+},
+	"ážš": {
+	text: "\\c{H}"
+},
+	"áž©": {
+	text: "\\c{h}"
+},
+	"áž°": {
+	text: "\\'K"
+},
+	"áž±": {
+	text: "\\'k"
+},
+	"ážČ": {
+	text: "\\d{K}"
+},
+	"ážł": {
+	text: "\\d{k}"
+},
+	"ណ": {
+	text: "\\b{K}"
+},
+	"áž”": {
+	text: "\\b{k}"
+},
+	"ា": {
+	text: "\\d{L}"
+},
+	"áž·": {
+	text: "\\d{l}"
+},
+	"ážș": {
+	text: "\\b{L}"
+},
+	"áž»": {
+	text: "\\b{l}"
+},
+	"ស": {
+	text: "\\'M"
+},
+	"ážż": {
+	text: "\\'m"
+},
+	"áč€": {
+	text: "\\.M"
+},
+	"áč": {
+	text: "\\.m"
+},
+	"áč‚": {
+	text: "\\d{M}"
+},
+	"áčƒ": {
+	text: "\\d{m}"
+},
+	"áč„": {
+	text: "\\.N"
+},
+	"áč…": {
+	text: "\\.n"
+},
+	"áč†": {
+	text: "\\d{N}"
+},
+	"áč‡": {
+	text: "\\d{n}"
+},
+	"áčˆ": {
+	text: "\\b{N}"
+},
+	"áč‰": {
+	text: "\\b{n}"
+},
+	"áč”": {
+	text: "\\'P"
+},
+	"áč•": {
+	text: "\\'p"
+},
+	"áč–": {
+	text: "\\.P"
+},
+	"áč—": {
+	text: "\\.p"
+},
+	"áč˜": {
+	text: "\\.R"
+},
+	"áč™": {
+	text: "\\.r"
+},
+	"áčš": {
+	text: "\\d{R}"
+},
+	"áč›": {
+	text: "\\d{r}"
+},
+	"áčž": {
+	text: "\\b{R}"
+},
+	"áčŸ": {
+	text: "\\b{r}"
+},
+	"áč ": {
+	text: "\\.S"
+},
+	"áčĄ": {
+	text: "\\.s"
+},
+	"áčą": {
+	text: "\\d{S}"
+},
+	"áčŁ": {
+	text: "\\d{s}"
+},
+	"áčȘ": {
+	text: "\\.T"
+},
+	"áč«": {
+	text: "\\.t"
+},
+	"áčŹ": {
+	text: "\\d{T}"
+},
+	"áč­": {
+	text: "\\d{t}"
+},
+	"áčź": {
+	text: "\\b{T}"
+},
+	"áčŻ": {
+	text: "\\b{t}"
+},
+	"áčŒ": {
+	text: "\\~V"
+},
+	"áčœ": {
+	text: "\\~v"
+},
+	"áčŸ": {
+	text: "\\d{V}"
+},
+	"áčż": {
+	text: "\\d{v}"
+},
+	"áș€": {
+	text: "\\`W"
+},
+	"áș": {
+	text: "\\`w"
+},
+	"áș‚": {
+	text: "\\'W"
+},
+	"áșƒ": {
+	text: "\\'w"
+},
+	"áș„": {
+	text: "\\\"W"
+},
+	"áș…": {
+	text: "\\\"w"
+},
+	"áș†": {
+	text: "\\.W"
+},
+	"áș‡": {
+	text: "\\.w"
+},
+	"áșˆ": {
+	text: "\\d{W}"
+},
+	"áș‰": {
+	text: "\\d{w}"
+},
+	"áșŠ": {
+	text: "\\.X"
+},
+	"áș‹": {
+	text: "\\.x"
+},
+	"áșŒ": {
+	text: "\\\"X"
+},
+	"áș": {
+	text: "\\\"x"
+},
+	"áșŽ": {
+	text: "\\.Y"
+},
+	"áș": {
+	text: "\\.y"
+},
+	"áș": {
+	text: "\\^Z"
+},
+	"áș‘": {
+	text: "\\^z"
+},
+	"áș’": {
+	text: "\\d{Z}"
+},
+	"áș“": {
+	text: "\\d{z}"
+},
+	"áș”": {
+	text: "\\b{Z}"
+},
+	"áș•": {
+	text: "\\b{z}"
+},
+	"áș–": {
+	text: "\\b{h}"
+},
+	"áș—": {
+	text: "\\\"t"
+},
+	"áș˜": {
+	text: "\\r{w}"
+},
+	"áș™": {
+	text: "\\r{y}"
+},
+	"áș ": {
+	text: "\\d{A}"
+},
+	"áșĄ": {
+	text: "\\d{a}"
+},
+	"áșž": {
+	text: "\\d{E}"
+},
+	"áșč": {
+	text: "\\d{e}"
+},
+	"áșŒ": {
+	text: "\\~E"
+},
+	"áșœ": {
+	text: "\\~e"
+},
+	"Ị": {
+	text: "\\d{I}"
+},
+	"ị": {
+	text: "\\d{i}"
+},
+	"Ọ": {
+	text: "\\d{O}"
+},
+	"ọ": {
+	text: "\\d{o}"
+},
+	"Ề": {
+	text: "\\d{U}"
+},
+	"Ễ": {
+	text: "\\d{u}"
+},
+	"á»Č": {
+	text: "\\`Y"
+},
+	"ỳ": {
+	text: "\\`y"
+},
+	"Ỏ": {
+	text: "\\d{Y}"
+},
+	"á»”": {
+	text: "\\d{y}"
+},
+	"Ở": {
+	text: "\\~Y"
+},
+	"á»č": {
+	text: "\\~y"
+},
+	" ": {
+	text: " ",
+	space: true
+},
+	" ": {
+	math: "\\quad",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.6em}",
+	space: true
+},
+	" ": {
+	math: "\\quad",
+	space: true,
+	text: "\\hspace{1em}"
+},
+	" ": {
+	text: "\\;",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.25em}",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.166em}",
+	space: true
+},
+	" ": {
+	text: "\\hphantom{0}",
+	space: true
+},
+	" ": {
+	text: "\\hphantom{,}",
+	space: true
+},
+	" ": {
+	text: "\\,",
+	space: true
+},
+	" ": {
+	math: "\\mkern1mu",
+	space: true
+},
+	"​": {
+	text: "\\mbox",
+	commandspacer: true,
+	space: true
+},
+	"‌": {
+	text: "{\\aftergroup\\ignorespaces}"
+},
+	"‐": {
+	text: "-"
+},
+	"‑": {
+	text: "-"
+},
+	"‒": {
+	text: "-"
+},
+	"–": {
+	text: "\\textendash",
+	commandspacer: true
+},
+	"—": {
+	text: "\\textemdash",
+	commandspacer: true
+},
+	"―": {
+	math: "\\horizbar",
+	text: "\\rule{1em}{1pt}"
+},
+	"‖": {
+	math: "\\Vert"
+},
+	"‗": {
+	math: "\\twolowline"
+},
+	"‘": {
+	text: "`"
+},
+	"’": {
+	text: "'"
+},
+	"‚": {
+	text: ","
+},
+	"‛": {
+	math: "\\Elzreapos"
+},
+	"“": {
+	text: "``"
+},
+	"”": {
+	text: "''"
+},
+	"„": {
+	text: ",,"
+},
+	"‟": {
+	text: "\\quotedblbase",
+	commandspacer: true
+},
+	"†": {
+	math: "\\dagger",
+	text: "\\textdagger",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‡": {
+	math: "\\ddagger",
+	text: "\\textdaggerdbl",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‱": {
+	math: "\\bullet",
+	text: "\\textbullet",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‣": {
+	text: ">"
+},
+	" ": {
+	text: "."
+},
+	" ": {
+	math: "\\enleadertwodots",
+	text: ".."
+},
+	"
": {
+	math: "\\ldots",
+	text: "\\ldots",
+	commandspacer: true
+},
+	"‧": {
+	text: "-"
+},
+	" ": {
+	text: " ",
+	space: true
+},
+	"‰": {
+	text: "\\textperthousand",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‱": {
+	text: "\\textpertenthousand",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"â€Č": {
+	math: "{'}"
+},
+	"″": {
+	math: "{''}"
+},
+	"‮": {
+	math: "{'''}"
+},
+	"—": {
+	math: "\\backprime"
+},
+	"‶": {
+	math: "\\backdprime"
+},
+	"‷": {
+	math: "\\backtrprime"
+},
+	"‾": {
+	math: "\\caretinsert"
+},
+	"â€č": {
+	text: "\\guilsinglleft",
+	commandspacer: true
+},
+	"â€ș": {
+	text: "\\guilsinglright",
+	commandspacer: true
+},
+	"‌": {
+	math: "\\Exclam"
+},
+	"‟": {
+	text: "-"
+},
+	"⁃": {
+	math: "\\hyphenbullet"
+},
+	"⁄": {
+	math: "\\fracslash"
+},
+	"⁇": {
+	math: "\\Question"
+},
+	"⁈": {
+	text: "?!"
+},
+	"⁉": {
+	text: "!?"
+},
+	"⁊": {
+	text: "7"
+},
+	"⁐": {
+	math: "\\closure"
+},
+	"⁗": {
+	math: "''''"
+},
+	" ": {
+	math: "\\:",
+	space: true,
+	text: "\\:"
+},
+	"⁠": {
+	text: "\\nolinebreak",
+	commandspacer: true
+},
+	"⁰": {
+	math: "^{0}"
+},
+	"ⁱ": {
+	math: "^{i}",
+	text: "\\textsuperscript{i}"
+},
+	"⁎": {
+	math: "^{4}"
+},
+	"⁔": {
+	math: "^{5}"
+},
+	"⁶": {
+	math: "^{6}"
+},
+	"⁷": {
+	math: "^{7}"
+},
+	"⁞": {
+	math: "^{8}"
+},
+	"âč": {
+	math: "^{9}"
+},
+	"âș": {
+	math: "^{+}"
+},
+	"⁻": {
+	math: "^{-}"
+},
+	"⁌": {
+	math: "^{=}"
+},
+	"⁜": {
+	math: "^{(}"
+},
+	" ": {
+	math: "^{)}"
+},
+	"ⁿ": {
+	math: "^{n}",
+	text: "\\textsuperscript{n}"
+},
+	"₀": {
+	math: "_{0}"
+},
+	"₁": {
+	math: "_{1}"
+},
+	"₂": {
+	math: "_{2}"
+},
+	"₃": {
+	math: "_{3}"
+},
+	"₄": {
+	math: "_{4}"
+},
+	"₅": {
+	math: "_{5}"
+},
+	"₆": {
+	math: "_{6}"
+},
+	"₇": {
+	math: "_{7}"
+},
+	"₈": {
+	math: "_{8}"
+},
+	"₉": {
+	math: "_{9}"
+},
+	"₊": {
+	math: "_{+}"
+},
+	"₋": {
+	math: "_{-}"
+},
+	"₌": {
+	math: "_{=}"
+},
+	"₍": {
+	math: "_{(}"
+},
+	"₎": {
+	math: "_{)}"
+},
+	"ₐ": {
+	math: "_{a}",
+	text: "\\textsubscript{a}"
+},
+	"ₑ": {
+	math: "_{e}",
+	text: "\\textsubscript{e}"
+},
+	"ₒ": {
+	math: "_{o}",
+	text: "\\textsubscript{o}"
+},
+	"ₓ": {
+	math: "_{x}",
+	text: "\\textsubscript{x}"
+},
+	"ₔ": {
+	text: "\\textsubscript{\\textschwa}",
+	textpackages: [
+		"tipa"
+	]
+},
+	"ₕ": {
+	math: "_{h}",
+	text: "\\textsubscript{h}"
+},
+	"ₖ": {
+	math: "_{k}",
+	text: "\\textsubscript{k}"
+},
+	"ₗ": {
+	math: "_{l}",
+	text: "\\textsubscript{l}"
+},
+	"ₘ": {
+	math: "_{m}",
+	text: "\\textsubscript{m}"
+},
+	"ₙ": {
+	math: "_{n}",
+	text: "\\textsubscript{n}"
+},
+	"ₚ": {
+	math: "_{p}",
+	text: "\\textsubscript{p}"
+},
+	"ₛ": {
+	math: "_{s}",
+	text: "\\textsubscript{s}"
+},
+	"ₜ": {
+	math: "_{t}",
+	text: "\\textsubscript{t}"
+},
+	"₧": {
+	text: "\\ensuremath{\\Elzpes}"
+},
+	"€": {
+	math: "\\euro",
+	text: "\\texteuro",
+	commandspacer: true
+},
+	"⃐": {
+	math: "\\lvec"
+},
+	"⃑": {
+	math: "\\rightharpoonup",
+	mathpackages: [
+		"amsmath",
+		"amssymb"
+	]
+},
+	"⃒": {
+	math: "\\vertoverlay"
+},
+	"⃖": {
+	math: "\\LVec"
+},
+	"⃗": {
+	math: "\\vec"
+},
+	"⃛": {
+	math: "\\dddot"
+},
+	"⃜": {
+	math: "\\ddddot"
+},
+	"⃝": {
+	math: "\\enclosecircle"
+},
+	"⃞": {
+	math: "\\enclosesquare"
+},
+	"⃟": {
+	math: "\\enclosediamond"
+},
+	"⃥": {
+	math: "\\overleftrightarrow"
+},
+	"⃀": {
+	math: "\\enclosetriangle"
+},
+	"⃧": {
+	math: "\\annuity"
+},
+	"⃚": {
+	math: "\\threeunderdot"
+},
+	"⃩": {
+	math: "\\widebridgeabove"
+},
+	"⃏": {
+	math: "\\underrightharpoondown"
+},
+	"⃭": {
+	math: "\\underleftharpoondown"
+},
+	"⃟": {
+	math: "\\underleftarrow"
+},
+	"⃯": {
+	math: "\\underrightarrow"
+},
+	"⃰": {
+	math: "\\asteraccent"
+},
+	"℀": {
+	text: "a/c"
+},
+	"℁": {
+	text: "a/s"
+},
+	"ℂ": {
+	math: "\\mathbb{C}"
+},
+	"℃": {
+	text: "\\textcelsius",
+	commandspacer: true
+},
+	"℅": {
+	text: "c/o"
+},
+	"℆": {
+	text: "c/u"
+},
+	"ℇ": {
+	math: "\\Euler"
+},
+	"℉": {
+	text: "F"
+},
+	"ℊ": {
+	math: "\\mathscr{g}"
+},
+	"ℋ": {
+	math: "\\mathscr{H}"
+},
+	"ℌ": {
+	math: "\\mathfrak{H}"
+},
+	"ℍ": {
+	math: "\\mathbb{H}"
+},
+	"ℎ": {
+	math: "\\Planckconst"
+},
+	"ℏ": {
+	math: "\\hslash"
+},
+	"ℐ": {
+	math: "\\mathscr{I}"
+},
+	"ℑ": {
+	math: "\\mathfrak{I}"
+},
+	"ℒ": {
+	math: "\\mathscr{L}"
+},
+	"ℓ": {
+	math: "\\mathscr{l}"
+},
+	"ℕ": {
+	math: "\\mathbb{N}"
+},
+	"№": {
+	text: "\\cyrchar\\textnumero",
+	commandspacer: true
+},
+	"℗": {
+	text: "\\textcircledP",
+	commandspacer: true
+},
+	"℘": {
+	math: "\\wp"
+},
+	"ℙ": {
+	math: "\\mathbb{P}"
+},
+	"ℚ": {
+	math: "\\mathbb{Q}"
+},
+	"ℛ": {
+	math: "\\mathscr{R}"
+},
+	"ℜ": {
+	math: "\\mathfrak{R}"
+},
+	"ℝ": {
+	math: "\\mathbb{R}"
+},
+	"℞": {
+	math: "\\Elzxrat"
+},
+	"℠": {
+	text: "\\textservicemark",
+	commandspacer: true
+},
+	"℡": {
+	text: "TEL"
+},
+	"ℱ": {
+	text: "\\texttrademark",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"â„€": {
+	math: "\\mathbb{Z}"
+},
+	"℩": {
+	math: "\\Omega"
+},
+	"℧": {
+	math: "\\mho"
+},
+	"ℹ": {
+	math: "\\mathfrak{Z}"
+},
+	"℩": {
+	text: "\\textriota",
+	commandspacer: true
+},
+	"â„Ș": {
+	text: "K"
+},
+	"Å": {
+	math: "\\Angstroem",
+	text: "\\AA",
+	commandspacer: true
+},
+	"ℬ": {
+	math: "\\mathscr{B}"
+},
+	"ℭ": {
+	math: "\\mathfrak{C}"
+},
+	"ℼ": {
+	text: "\\textestimated",
+	commandspacer: true
+},
+	"ℯ": {
+	math: "\\mathscr{e}"
+},
+	"ℰ": {
+	math: "\\mathscr{E}"
+},
+	"ℱ": {
+	math: "\\mathscr{F}"
+},
+	"â„Č": {
+	math: "\\Finv"
+},
+	"ℳ": {
+	math: "\\mathscr{M}"
+},
+	"℮": {
+	math: "\\mathscr{o}"
+},
+	"â„”": {
+	math: "\\aleph"
+},
+	"ℶ": {
+	math: "\\beth"
+},
+	"ℷ": {
+	math: "\\gimel"
+},
+	"ℾ": {
+	math: "\\daleth"
+},
+	"ℌ": {
+	math: "\\mathbb{\\pi}"
+},
+	"ℜ": {
+	math: "\\mathbb{\\gamma}"
+},
+	"â„Ÿ": {
+	math: "\\mathbb{\\Gamma}"
+},
+	"ℿ": {
+	math: "\\mathbb{\\Pi}"
+},
+	"⅀": {
+	math: "\\mathbb{\\Sigma}"
+},
+	"⅁": {
+	math: "\\Game"
+},
+	"⅂": {
+	math: "\\sansLturned"
+},
+	"⅃": {
+	math: "\\sansLmirrored"
+},
+	"⅄": {
+	math: "\\Yup"
+},
+	"ⅅ": {
+	math: "\\CapitalDifferentialD"
+},
+	"ⅆ": {
+	math: "\\DifferentialD"
+},
+	"ⅇ": {
+	math: "\\ExponetialE"
+},
+	"ⅈ": {
+	math: "\\ComplexI"
+},
+	"ⅉ": {
+	math: "\\ComplexJ"
+},
+	"⅊": {
+	math: "\\PropertyLine"
+},
+	"⅋": {
+	math: "\\invamp"
+},
+	"⅐": {
+	math: "\\frac{1}{7}"
+},
+	"⅑": {
+	math: "\\frac{1}{9}"
+},
+	"⅒": {
+	math: "\\frac{1}{10}"
+},
+	"⅓": {
+	math: "\\frac{1}{3}"
+},
+	"⅔": {
+	math: "\\frac{2}{3}"
+},
+	"⅕": {
+	math: "\\frac{1}{5}"
+},
+	"⅖": {
+	math: "\\frac{2}{5}"
+},
+	"⅗": {
+	math: "\\frac{3}{5}"
+},
+	"⅘": {
+	math: "\\frac{4}{5}"
+},
+	"⅙": {
+	math: "\\frac{1}{6}"
+},
+	"⅚": {
+	math: "\\frac{5}{6}"
+},
+	"⅛": {
+	math: "\\frac{1}{8}"
+},
+	"⅜": {
+	math: "\\frac{3}{8}"
+},
+	"⅝": {
+	math: "\\frac{5}{8}"
+},
+	"⅞": {
+	math: "\\frac{7}{8}"
+},
+	"⅟": {
+	math: "\\frac{1}"
+},
+	"Ⅰ": {
+	text: "I"
+},
+	"Ⅱ": {
+	text: "II"
+},
+	"ⅱ": {
+	text: "III"
+},
+	"Ⅳ": {
+	text: "IV"
+},
+	"â…€": {
+	text: "V"
+},
+	"â…„": {
+	text: "VI"
+},
+	"Ⅹ": {
+	text: "VII"
+},
+	"Ⅷ": {
+	text: "VIII"
+},
+	"ⅹ": {
+	text: "IX"
+},
+	"Ⅹ": {
+	text: "X"
+},
+	"â…Ș": {
+	text: "XI"
+},
+	"Ⅻ": {
+	text: "XII"
+},
+	"Ⅼ": {
+	text: "L"
+},
+	"Ⅽ": {
+	text: "C"
+},
+	"ⅼ": {
+	text: "D"
+},
+	"Ⅿ": {
+	text: "M"
+},
+	"ⅰ": {
+	text: "i"
+},
+	"ⅱ": {
+	text: "ii"
+},
+	"â…Č": {
+	text: "iii"
+},
+	"ⅳ": {
+	text: "iv"
+},
+	"Ⅾ": {
+	text: "v"
+},
+	"â…”": {
+	text: "vi"
+},
+	"ⅶ": {
+	text: "vii"
+},
+	"ⅷ": {
+	text: "viii"
+},
+	"ⅾ": {
+	text: "ix"
+},
+	"â…č": {
+	text: "x"
+},
+	"â…ș": {
+	text: "xi"
+},
+	"ⅻ": {
+	text: "xii"
+},
+	"⅌": {
+	text: "l"
+},
+	"⅜": {
+	text: "c"
+},
+	"â…Ÿ": {
+	text: "d"
+},
+	"ⅿ": {
+	text: "m"
+},
+	"↉": {
+	math: "\\frac{0}{3}"
+},
+	"←": {
+	math: "\\leftarrow"
+},
+	"↑": {
+	math: "\\uparrow"
+},
+	"→": {
+	math: "\\rightarrow",
+	text: "\\textrightarrow",
+	commandspacer: true,
+	textpackages: [
+		"textcomp"
+	]
+},
+	"↓": {
+	math: "\\downarrow"
+},
+	"↔": {
+	math: "\\leftrightarrow"
+},
+	"↕": {
+	math: "\\updownarrow"
+},
+	"↖": {
+	math: "\\nwarrow"
+},
+	"↗": {
+	math: "\\nearrow"
+},
+	"↘": {
+	math: "\\searrow"
+},
+	"↙": {
+	math: "\\swarrow"
+},
+	"↚": {
+	math: "\\nleftarrow"
+},
+	"↛": {
+	math: "\\nrightarrow"
+},
+	"↜": {
+	math: "\\arrowwaveleft"
+},
+	"↝": {
+	math: "\\arrowwaveright"
+},
+	"↞": {
+	math: "\\twoheadleftarrow"
+},
+	"↟": {
+	math: "\\twoheaduparrow"
+},
+	"↠": {
+	math: "\\twoheadrightarrow"
+},
+	"↡": {
+	math: "\\twoheaddownarrow"
+},
+	"↱": {
+	math: "\\leftarrowtail"
+},
+	"↣": {
+	math: "\\rightarrowtail"
+},
+	"ↀ": {
+	math: "\\mapsfrom"
+},
+	"ↄ": {
+	math: "\\MapsUp"
+},
+	"↩": {
+	math: "\\mapsto"
+},
+	"↧": {
+	math: "\\MapsDown"
+},
+	"↹": {
+	math: "\\updownarrowbar"
+},
+	"↩": {
+	math: "\\hookleftarrow"
+},
+	"â†Ș": {
+	math: "\\hookrightarrow"
+},
+	"↫": {
+	math: "\\looparrowleft"
+},
+	"↬": {
+	math: "\\looparrowright"
+},
+	"↭": {
+	math: "\\leftrightsquigarrow"
+},
+	"↼": {
+	math: "\\nleftrightarrow"
+},
+	"↯": {
+	math: "\\lightning"
+},
+	"↰": {
+	math: "\\Lsh"
+},
+	"↱": {
+	math: "\\Rsh"
+},
+	"â†Č": {
+	math: "\\dlsh"
+},
+	"↳": {
+	text: "\\reflectbox{\\carriagereturn}",
+	textpackages: [
+		"graphics",
+		"unicode-math"
+	]
+},
+	"↮": {
+	math: "\\linefeed"
+},
+	"↔": {
+	math: "\\carriagereturn"
+},
+	"↶": {
+	math: "\\curvearrowleft"
+},
+	"↷": {
+	math: "\\curvearrowright"
+},
+	"↾": {
+	math: "\\barovernorthwestarrow"
+},
+	"â†č": {
+	math: "\\barleftarrowrightarrowba"
+},
+	"â†ș": {
+	math: "\\circlearrowleft"
+},
+	"↻": {
+	math: "\\circlearrowright"
+},
+	"↌": {
+	math: "\\leftharpoonup"
+},
+	"↜": {
+	math: "\\leftharpoondown"
+},
+	"↟": {
+	math: "\\upharpoonright"
+},
+	"↿": {
+	math: "\\upharpoonleft"
+},
+	"⇀": {
+	math: "\\rightharpoonup",
+	mathpackages: [
+		"amsmath",
+		"amssymb"
+	]
+},
+	"⇁": {
+	math: "\\rightharpoondown"
+},
+	"⇂": {
+	math: "\\downharpoonright"
+},
+	"⇃": {
+	math: "\\downharpoonleft"
+},
+	"⇄": {
+	math: "\\rightleftarrows"
+},
+	"⇅": {
+	math: "\\dblarrowupdown"
+},
+	"⇆": {
+	math: "\\leftrightarrows"
+},
+	"⇇": {
+	math: "\\leftleftarrows"
+},
+	"⇈": {
+	math: "\\upuparrows"
+},
+	"⇉": {
+	math: "\\rightrightarrows"
+},
+	"⇊": {
+	math: "\\downdownarrows"
+},
+	"⇋": {
+	math: "\\leftrightharpoons"
+},
+	"⇌": {
+	math: "\\rightleftharpoons"
+},
+	"⇍": {
+	math: "\\nLeftarrow"
+},
+	"⇎": {
+	math: "\\nLeftrightarrow"
+},
+	"⇏": {
+	math: "\\nRightarrow"
+},
+	"⇐": {
+	math: "\\Leftarrow"
+},
+	"⇑": {
+	math: "\\Uparrow"
+},
+	"⇒": {
+	math: "\\Rightarrow"
+},
+	"⇓": {
+	math: "\\Downarrow"
+},
+	"⇔": {
+	math: "\\Leftrightarrow"
+},
+	"⇕": {
+	math: "\\Updownarrow"
+},
+	"⇖": {
+	math: "\\Nwarrow"
+},
+	"⇗": {
+	math: "\\Nearrow"
+},
+	"⇘": {
+	math: "\\Searrow"
+},
+	"⇙": {
+	math: "\\Swarrow"
+},
+	"⇚": {
+	math: "\\Lleftarrow"
+},
+	"⇛": {
+	math: "\\Rrightarrow"
+},
+	"⇜": {
+	math: "\\leftsquigarrow"
+},
+	"⇝": {
+	math: "\\rightsquigarrow"
+},
+	"⇞": {
+	math: "\\nHuparrow"
+},
+	"⇟": {
+	math: "\\nHdownarrow"
+},
+	"⇠": {
+	math: "\\dashleftarrow"
+},
+	"⇡": {
+	math: "\\updasharrow"
+},
+	"⇱": {
+	math: "\\dashrightarrow"
+},
+	"⇣": {
+	math: "\\downdasharrow"
+},
+	"⇀": {
+	math: "\\LeftArrowBar"
+},
+	"⇄": {
+	math: "\\RightArrowBar"
+},
+	"⇩": {
+	math: "\\leftwhitearrow"
+},
+	"⇧": {
+	math: "\\upwhitearrow"
+},
+	"⇹": {
+	math: "\\rightwhitearrow"
+},
+	"⇩": {
+	math: "\\downwhitearrow"
+},
+	"â‡Ș": {
+	math: "\\whitearrowupfrombar"
+},
+	"⇮": {
+	math: "\\circleonrightarrow"
+},
+	"⇔": {
+	math: "\\DownArrowUpArrow"
+},
+	"⇶": {
+	math: "\\rightthreearrows"
+},
+	"⇷": {
+	math: "\\nvleftarrow"
+},
+	"⇾": {
+	math: "\\pfun"
+},
+	"â‡č": {
+	math: "\\nvleftrightarrow"
+},
+	"â‡ș": {
+	math: "\\nVleftarrow"
+},
+	"⇻": {
+	math: "\\ffun"
+},
+	"⇌": {
+	math: "\\nVleftrightarrow"
+},
+	"⇜": {
+	math: "\\leftarrowtriangle"
+},
+	"⇟": {
+	math: "\\rightarrowtriangle"
+},
+	"⇿": {
+	math: "\\leftrightarrowtriangle"
+},
+	"∀": {
+	math: "\\forall"
+},
+	"∁": {
+	math: "\\complement"
+},
+	"∂": {
+	math: "\\partial"
+},
+	"∃": {
+	math: "\\exists"
+},
+	"∄": {
+	math: "\\nexists"
+},
+	"∅": {
+	math: "\\varnothing"
+},
+	"∆": {
+	math: "\\increment"
+},
+	"∇": {
+	math: "\\nabla"
+},
+	"∈": {
+	math: "\\in"
+},
+	"∉": {
+	math: "\\not\\in"
+},
+	"∊": {
+	math: "\\smallin"
+},
+	"∋": {
+	math: "\\ni"
+},
+	"∌": {
+	math: "\\not\\ni"
+},
+	"∍": {
+	math: "\\smallni"
+},
+	"∎": {
+	math: "\\QED"
+},
+	"∏": {
+	math: "\\prod"
+},
+	"∐": {
+	math: "\\coprod"
+},
+	"∑": {
+	math: "\\sum"
+},
+	"−": {
+	math: "-",
+	text: "-"
+},
+	"∓": {
+	math: "\\mp"
+},
+	"∔": {
+	math: "\\dotplus"
+},
+	"∕": {
+	text: "/"
+},
+	"∖": {
+	math: "\\setminus"
+},
+	"∗": {
+	math: "{_\\ast}"
+},
+	"∘": {
+	math: "\\circ"
+},
+	"∙": {
+	math: "\\bullet"
+},
+	"√": {
+	math: "\\surd"
+},
+	"∛": {
+	math: "\\sqrt[3]"
+},
+	"∜": {
+	math: "\\sqrt[4]"
+},
+	"∝": {
+	math: "\\propto"
+},
+	"∞": {
+	math: "\\infty"
+},
+	"∟": {
+	math: "\\rightangle"
+},
+	"∠": {
+	math: "\\angle"
+},
+	"∥": {
+	math: "\\measuredangle"
+},
+	"∹": {
+	math: "\\sphericalangle"
+},
+	"∣": {
+	math: "\\mid"
+},
+	"∀": {
+	math: "\\nmid"
+},
+	"∄": {
+	math: "\\parallel"
+},
+	"∊": {
+	math: "\\nparallel"
+},
+	"∧": {
+	math: "\\wedge"
+},
+	"√": {
+	math: "\\vee"
+},
+	"∩": {
+	math: "\\cap"
+},
+	"âˆȘ": {
+	math: "\\cup"
+},
+	"∫": {
+	math: "\\int"
+},
+	"∏": {
+	math: "{\\int\\!\\int}"
+},
+	"∭": {
+	math: "{\\int\\!\\int\\!\\int}"
+},
+	"∟": {
+	math: "\\oint"
+},
+	"∯": {
+	math: "\\surfintegral"
+},
+	"∰": {
+	math: "\\volintegral"
+},
+	"∱": {
+	math: "\\clwintegral"
+},
+	"âˆČ": {
+	math: "\\lcirclerightint",
+	mathpackages: [
+		"MnSymbol"
+	]
+},
+	"∳": {
+	math: "\\rcirclerightint",
+	mathpackages: [
+		"MnSymbol"
+	]
+},
+	"∎": {
+	math: "\\therefore"
+},
+	"∔": {
+	math: "\\because"
+},
+	"∶": {
+	math: ":"
+},
+	"∷": {
+	math: "\\Colon"
+},
+	"∞": {
+	math: "\\dotdiv",
+	mathpackages: [
+		"mathabx"
+	]
+},
+	"âˆč": {
+	math: "\\eqcolon"
+},
+	"âˆș": {
+	math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}"
+},
+	"∻": {
+	math: "\\homothetic"
+},
+	"∌": {
+	math: "\\sim"
+},
+	"∜": {
+	math: "\\backsim"
+},
+	"∟": {
+	math: "\\lazysinv"
+},
+	"∿": {
+	math: "\\AC"
+},
+	"≀": {
+	math: "\\wr"
+},
+	"≁": {
+	math: "\\not\\sim"
+},
+	"≂": {
+	math: "\\texteqsim",
+	mathpackages: [
+		"xecjk"
+	]
+},
+	"≂̞": {
+	math: "\\NotEqualTilde"
+},
+	"≃": {
+	math: "\\simeq"
+},
+	"≄": {
+	math: "\\not\\simeq"
+},
+	"≅": {
+	math: "\\cong"
+},
+	"≆": {
+	math: "\\approxnotequal"
+},
+	"≇": {
+	math: "\\not\\cong"
+},
+	"≈": {
+	math: "\\approx"
+},
+	"≉": {
+	math: "\\not\\approx"
+},
+	"≊": {
+	math: "\\approxeq"
+},
+	"≋": {
+	math: "\\tildetrpl"
+},
+	"≋̞": {
+	math: "\\not\\apid"
+},
+	"≌": {
+	math: "\\allequal"
+},
+	"≍": {
+	math: "\\asymp"
+},
+	"≎": {
+	math: "\\Bumpeq"
+},
+	"≎̞": {
+	math: "\\NotHumpDownHump"
+},
+	"≏": {
+	math: "\\bumpeq"
+},
+	"≏̞": {
+	math: "\\NotHumpEqual"
+},
+	"≐": {
+	math: "\\doteq"
+},
+	"≐̞": {
+	math: "\\not\\doteq"
+},
+	"≑": {
+	math: "\\doteqdot"
+},
+	"≒": {
+	math: "\\fallingdotseq"
+},
+	"≓": {
+	math: "\\risingdotseq"
+},
+	"≔": {
+	math: "\\coloneq",
+	text: ":="
+},
+	"≕": {
+	math: "=:"
+},
+	"≖": {
+	math: "\\eqcirc"
+},
+	"≗": {
+	math: "\\circeq"
+},
+	"≘": {
+	math: "\\arceq"
+},
+	"≙": {
+	math: "\\estimates"
+},
+	"≛": {
+	math: "\\starequal"
+},
+	"≜": {
+	math: "\\triangleq"
+},
+	"≝": {
+	math: "\\eqdef"
+},
+	"≞": {
+	math: "\\measeq"
+},
+	"≠": {
+	math: "\\neq"
+},
+	"≡": {
+	math: "\\equiv"
+},
+	"≱": {
+	math: "\\not\\equiv"
+},
+	"≣": {
+	math: "\\Equiv"
+},
+	"≀": {
+	math: "\\leq"
+},
+	"≄": {
+	math: "\\geq"
+},
+	"≩": {
+	math: "\\leqq"
+},
+	"≧": {
+	math: "\\geqq"
+},
+	"≹": {
+	math: "\\lneqq"
+},
+	"≚": {
+	math: "\\lvertneqq"
+},
+	"≩": {
+	math: "\\gneqq"
+},
+	"≩": {
+	math: "\\gvertneqq"
+},
+	"â‰Ș": {
+	math: "\\ll"
+},
+	"â‰ȘÌž": {
+	math: "\\NotLessLess"
+},
+	"≫": {
+	math: "\\gg"
+},
+	"≫̞": {
+	math: "\\NotGreaterGreater"
+},
+	"≬": {
+	math: "\\between"
+},
+	"≭": {
+	math: "{\\not\\kern-0.3em\\times}"
+},
+	"≼": {
+	math: "\\not<"
+},
+	"≯": {
+	math: "\\not>"
+},
+	"≰": {
+	math: "\\not\\leq"
+},
+	"≱": {
+	math: "\\not\\geq"
+},
+	"â‰Č": {
+	math: "\\lessequivlnt"
+},
+	"≳": {
+	math: "\\greaterequivlnt"
+},
+	"≶": {
+	math: "\\lessgtr"
+},
+	"≷": {
+	math: "\\gtrless"
+},
+	"≾": {
+	math: "\\notlessgreater"
+},
+	"â‰č": {
+	math: "\\notgreaterless"
+},
+	"â‰ș": {
+	math: "\\prec"
+},
+	"≻": {
+	math: "\\succ"
+},
+	"≌": {
+	math: "\\preccurlyeq"
+},
+	"≜": {
+	math: "\\succcurlyeq"
+},
+	"≟": {
+	math: "\\precapprox"
+},
+	"≟̞": {
+	math: "\\NotPrecedesTilde"
+},
+	"≿": {
+	math: "\\succapprox"
+},
+	"â‰żÌž": {
+	math: "\\NotSucceedsTilde"
+},
+	"⊀": {
+	math: "\\not\\prec"
+},
+	"⊁": {
+	math: "\\not\\succ"
+},
+	"⊂": {
+	math: "\\subset"
+},
+	"⊃": {
+	math: "\\supset"
+},
+	"⊄": {
+	math: "\\not\\subset"
+},
+	"⊅": {
+	math: "\\not\\supset"
+},
+	"⊆": {
+	math: "\\subseteq"
+},
+	"⊇": {
+	math: "\\supseteq"
+},
+	"⊈": {
+	math: "\\not\\subseteq"
+},
+	"⊉": {
+	math: "\\not\\supseteq"
+},
+	"⊊": {
+	math: "\\subsetneq"
+},
+	"⊊": {
+	math: "\\varsubsetneqq"
+},
+	"⊋": {
+	math: "\\supsetneq"
+},
+	"⊋": {
+	math: "\\varsupsetneq"
+},
+	"⊌": {
+	math: "\\cupleftarrow"
+},
+	"⊍": {
+	math: "\\cupdot"
+},
+	"⊎": {
+	math: "\\uplus"
+},
+	"⊏": {
+	math: "\\sqsubset"
+},
+	"⊏̞": {
+	math: "\\NotSquareSubset"
+},
+	"⊐": {
+	math: "\\sqsupset"
+},
+	"⊐̞": {
+	math: "\\NotSquareSuperset"
+},
+	"⊑": {
+	math: "\\sqsubseteq"
+},
+	"⊒": {
+	math: "\\sqsupseteq"
+},
+	"⊓": {
+	math: "\\sqcap"
+},
+	"⊔": {
+	math: "\\sqcup"
+},
+	"⊕": {
+	math: "\\oplus"
+},
+	"⊖": {
+	math: "\\ominus"
+},
+	"⊗": {
+	math: "\\otimes"
+},
+	"⊘": {
+	math: "\\oslash"
+},
+	"⊙": {
+	math: "\\odot"
+},
+	"⊚": {
+	math: "\\circledcirc"
+},
+	"⊛": {
+	math: "\\circledast"
+},
+	"⊜": {
+	math: "\\circledequal"
+},
+	"⊝": {
+	math: "\\circleddash"
+},
+	"⊞": {
+	math: "\\boxplus"
+},
+	"⊟": {
+	math: "\\boxminus"
+},
+	"⊠": {
+	math: "\\boxtimes"
+},
+	"⊡": {
+	math: "\\boxdot"
+},
+	"⊱": {
+	math: "\\vdash"
+},
+	"⊣": {
+	math: "\\dashv"
+},
+	"⊀": {
+	math: "\\top"
+},
+	"⊄": {
+	math: "\\perp"
+},
+	"⊩": {
+	math: "\\assert"
+},
+	"⊧": {
+	math: "\\truestate"
+},
+	"⊹": {
+	math: "\\forcesextra"
+},
+	"⊩": {
+	math: "\\Vdash"
+},
+	"âŠȘ": {
+	math: "\\Vvdash"
+},
+	"⊫": {
+	math: "\\VDash"
+},
+	"⊬": {
+	math: "\\nvdash"
+},
+	"⊭": {
+	math: "\\nvDash"
+},
+	"⊼": {
+	math: "\\nVdash"
+},
+	"⊯": {
+	math: "\\nVDash"
+},
+	"⊰": {
+	math: "\\prurel"
+},
+	"⊱": {
+	math: "\\scurel"
+},
+	"âŠČ": {
+	math: "\\vartriangleleft"
+},
+	"⊳": {
+	math: "\\vartriangleright"
+},
+	"⊮": {
+	math: "\\trianglelefteq"
+},
+	"⊔": {
+	math: "\\trianglerighteq"
+},
+	"⊶": {
+	math: "\\original"
+},
+	"⊷": {
+	math: "\\image"
+},
+	"⊾": {
+	math: "\\multimap"
+},
+	"âŠč": {
+	math: "\\hermitconjmatrix"
+},
+	"âŠș": {
+	math: "\\intercal"
+},
+	"⊻": {
+	math: "\\veebar"
+},
+	"⊌": {
+	math: "\\barwedge"
+},
+	"⊜": {
+	math: "\\barvee"
+},
+	"⊟": {
+	math: "\\rightanglearc"
+},
+	"⊿": {
+	math: "\\varlrtriangle"
+},
+	"⋂": {
+	math: "\\bigcap"
+},
+	"⋃": {
+	math: "\\bigcup"
+},
+	"⋄": {
+	math: "\\diamond"
+},
+	"⋅": {
+	math: "\\cdot"
+},
+	"⋆": {
+	math: "\\star"
+},
+	"⋇": {
+	math: "\\divideontimes"
+},
+	"⋈": {
+	math: "\\bowtie"
+},
+	"⋉": {
+	math: "\\ltimes"
+},
+	"⋊": {
+	math: "\\rtimes"
+},
+	"⋋": {
+	math: "\\leftthreetimes"
+},
+	"⋌": {
+	math: "\\rightthreetimes"
+},
+	"⋍": {
+	math: "\\backsimeq"
+},
+	"⋎": {
+	math: "\\curlyvee"
+},
+	"⋏": {
+	math: "\\curlywedge"
+},
+	"⋐": {
+	math: "\\Subset"
+},
+	"⋑": {
+	math: "\\Supset"
+},
+	"⋒": {
+	math: "\\Cap"
+},
+	"⋓": {
+	math: "\\Cup"
+},
+	"⋔": {
+	math: "\\pitchfork"
+},
+	"⋕": {
+	math: "\\hash"
+},
+	"⋖": {
+	math: "\\lessdot"
+},
+	"⋗": {
+	math: "\\gtrdot"
+},
+	"⋘": {
+	math: "\\verymuchless"
+},
+	"⋙": {
+	math: "\\verymuchgreater"
+},
+	"⋚": {
+	math: "\\lesseqgtr"
+},
+	"⋛": {
+	math: "\\gtreqless"
+},
+	"⋜": {
+	math: "\\eqless"
+},
+	"⋝": {
+	math: "\\eqgtr"
+},
+	"⋞": {
+	math: "\\curlyeqprec"
+},
+	"⋟": {
+	math: "\\curlyeqsucc"
+},
+	"⋠": {
+	math: "\\npreceq"
+},
+	"⋡": {
+	math: "\\nsucceq"
+},
+	"⋱": {
+	math: "\\not\\sqsubseteq"
+},
+	"⋣": {
+	math: "\\not\\sqsupseteq"
+},
+	"â‹€": {
+	math: "\\sqsubsetneq"
+},
+	"â‹„": {
+	math: "\\Elzsqspne"
+},
+	"⋩": {
+	math: "\\lnsim"
+},
+	"⋧": {
+	math: "\\gnsim"
+},
+	"⋹": {
+	math: "\\precedesnotsimilar"
+},
+	"⋩": {
+	math: "\\succnsim"
+},
+	"â‹Ș": {
+	math: "\\ntriangleleft"
+},
+	"⋫": {
+	math: "\\ntriangleright"
+},
+	"⋬": {
+	math: "\\ntrianglelefteq"
+},
+	"⋭": {
+	math: "\\ntrianglerighteq"
+},
+	"⋼": {
+	math: "\\vdots"
+},
+	"⋯": {
+	math: "\\cdots"
+},
+	"⋰": {
+	math: "\\upslopeellipsis"
+},
+	"⋱": {
+	math: "\\downslopeellipsis"
+},
+	"â‹Č": {
+	math: "\\disin"
+},
+	"⋳": {
+	math: "\\varisins"
+},
+	"⋮": {
+	math: "\\isins"
+},
+	"â‹”": {
+	math: "\\isindot"
+},
+	"⋶": {
+	math: "\\barin"
+},
+	"⋷": {
+	math: "\\isinobar"
+},
+	"⋾": {
+	math: "\\isinvb"
+},
+	"â‹č": {
+	math: "\\isinE"
+},
+	"â‹ș": {
+	math: "\\nisd"
+},
+	"⋻": {
+	math: "\\varnis"
+},
+	"⋌": {
+	math: "\\nis"
+},
+	"⋜": {
+	math: "\\varniobar"
+},
+	"â‹Ÿ": {
+	math: "\\niobar"
+},
+	"⋿": {
+	math: "\\bagmember"
+},
+	"⌀": {
+	math: "\\diameter"
+},
+	"⌂": {
+	math: "\\house"
+},
+	"⌅": {
+	math: "\\varbarwedge",
+	text: "\\barwedge",
+	commandspacer: true
+},
+	"⌆": {
+	math: "\\perspcorrespond"
+},
+	"⌈": {
+	math: "\\lceil"
+},
+	"⌉": {
+	math: "\\rceil"
+},
+	"⌊": {
+	math: "\\lfloor"
+},
+	"⌋": {
+	math: "\\rfloor"
+},
+	"⌐": {
+	math: "\\invneg"
+},
+	"⌑": {
+	math: "\\wasylozenge"
+},
+	"⌒": {
+	math: "\\profline"
+},
+	"⌓": {
+	math: "\\profsurf"
+},
+	"⌕": {
+	math: "\\recorder"
+},
+	"⌖": {
+	math: "{\\mathchar\"2208}"
+},
+	"⌗": {
+	math: "\\viewdata"
+},
+	"⌙": {
+	math: "\\turnednot"
+},
+	"⌜": {
+	math: "\\ulcorner"
+},
+	"⌝": {
+	math: "\\urcorner"
+},
+	"⌞": {
+	math: "\\llcorner"
+},
+	"⌟": {
+	math: "\\lrcorner"
+},
+	"⌠": {
+	math: "\\inttop"
+},
+	"⌡": {
+	math: "\\intbottom"
+},
+	"⌱": {
+	math: "\\frown"
+},
+	"⌣": {
+	math: "\\smile"
+},
+	"〈": {
+	math: "\\langle"
+},
+	"âŒȘ": {
+	math: "\\rangle"
+},
+	"⌬": {
+	math: "\\varhexagonlrbonds"
+},
+	"âŒČ": {
+	math: "\\conictaper"
+},
+	"⌶": {
+	math: "\\topbot"
+},
+	"âŒč": {
+	math: "\\APLinv"
+},
+	"⌿": {
+	math: "\\notslash"
+},
+	"⍀": {
+	math: "\\notbackslash"
+},
+	"⍇": {
+	math: "\\APLleftarrowbox"
+},
+	"⍈": {
+	math: "\\APLrightarrowbox"
+},
+	"⍉": {
+	math: "\\invdiameter"
+},
+	"⍐": {
+	math: "\\APLuparrowbox"
+},
+	"⍓": {
+	math: "\\APLboxupcaret"
+},
+	"⍗": {
+	math: "\\APLdownarrowbox"
+},
+	"⍝": {
+	math: "\\APLcomment"
+},
+	"⍞": {
+	math: "\\APLinput"
+},
+	"⍟": {
+	math: "\\APLlog"
+},
+	"⍰": {
+	math: "\\APLboxquestion"
+},
+	"⍌": {
+	math: "\\rangledownzigzagarrow"
+},
+	"⎔": {
+	math: "\\hexagon"
+},
+	"⎛": {
+	math: "\\lparenuend"
+},
+	"⎜": {
+	math: "\\lparenextender"
+},
+	"⎝": {
+	math: "\\lparenlend"
+},
+	"⎞": {
+	math: "\\rparenuend"
+},
+	"⎟": {
+	math: "\\rparenextender"
+},
+	"⎠": {
+	math: "\\rparenlend"
+},
+	"⎡": {
+	math: "\\lbrackuend"
+},
+	"⎱": {
+	math: "\\lbrackextender"
+},
+	"⎣": {
+	math: "\\Elzdlcorn"
+},
+	"⎀": {
+	math: "\\rbrackuend"
+},
+	"⎄": {
+	math: "\\rbrackextender"
+},
+	"⎊": {
+	math: "\\rbracklend"
+},
+	"⎧": {
+	math: "\\lbraceuend"
+},
+	"⎚": {
+	math: "\\lbracemid"
+},
+	"⎩": {
+	math: "\\lbracelend"
+},
+	"âŽȘ": {
+	math: "\\vbraceextender"
+},
+	"⎫": {
+	math: "\\rbraceuend"
+},
+	"⎬": {
+	math: "\\rbracemid"
+},
+	"⎭": {
+	math: "\\rbracelend"
+},
+	"⎼": {
+	math: "\\intextender"
+},
+	"⎯": {
+	math: "\\harrowextender"
+},
+	"⎰": {
+	math: "\\lmoustache"
+},
+	"⎱": {
+	math: "\\rmoustache"
+},
+	"âŽČ": {
+	math: "\\sumtop"
+},
+	"⎳": {
+	math: "\\sumbottom"
+},
+	"⎮": {
+	math: "\\overbracket"
+},
+	"⎔": {
+	math: "\\underbracket"
+},
+	"⎶": {
+	math: "\\bbrktbrk"
+},
+	"⎷": {
+	math: "\\sqrtbottom"
+},
+	"⎾": {
+	math: "\\lvboxline"
+},
+	"âŽč": {
+	math: "\\rvboxline"
+},
+	"⏎": {
+	math: "\\varcarriagereturn"
+},
+	"⏜": {
+	math: "\\overparen"
+},
+	"⏝": {
+	math: "\\underparen"
+},
+	"⏞": {
+	math: "\\overbrace"
+},
+	"⏟": {
+	math: "\\underbrace"
+},
+	"⏠": {
+	math: "\\obrbrak"
+},
+	"⏡": {
+	math: "\\ubrbrak"
+},
+	"⏱": {
+	math: "\\trapezium"
+},
+	"⏣": {
+	math: "\\benzenr"
+},
+	"⏀": {
+	math: "\\strns"
+},
+	"⏄": {
+	math: "\\fltns"
+},
+	"⏊": {
+	math: "\\accurrent"
+},
+	"⏧": {
+	math: "\\elinters"
+},
+	"␀": {
+	text: "NUL"
+},
+	"␁": {
+	text: "SOH"
+},
+	"␂": {
+	text: "STX"
+},
+	"␃": {
+	text: "ETX"
+},
+	"␄": {
+	text: "EOT"
+},
+	"␅": {
+	text: "ENQ"
+},
+	"␆": {
+	text: "ACK"
+},
+	"␇": {
+	text: "BEL"
+},
+	"␈": {
+	text: "BS"
+},
+	"␉": {
+	text: "HT"
+},
+	"␊": {
+	text: "LF"
+},
+	"␋": {
+	text: "VT"
+},
+	"␌": {
+	text: "FF"
+},
+	"␍": {
+	text: "CR"
+},
+	"␎": {
+	text: "SO"
+},
+	"␏": {
+	text: "SI"
+},
+	"␐": {
+	text: "DLE"
+},
+	"␑": {
+	text: "DC1"
+},
+	"␒": {
+	text: "DC2"
+},
+	"␓": {
+	text: "DC3"
+},
+	"␔": {
+	text: "DC4"
+},
+	"␕": {
+	text: "NAK"
+},
+	"␖": {
+	text: "SYN"
+},
+	"␗": {
+	text: "ETB"
+},
+	"␘": {
+	text: "CAN"
+},
+	"␙": {
+	text: "EM"
+},
+	"␚": {
+	text: "SUB"
+},
+	"␛": {
+	text: "ESC"
+},
+	"␜": {
+	text: "FS"
+},
+	"␝": {
+	text: "GS"
+},
+	"␞": {
+	text: "RS"
+},
+	"␟": {
+	text: "US"
+},
+	"␠": {
+	text: "SP"
+},
+	"␥": {
+	text: "DEL"
+},
+	"␣": {
+	text: "\\textvisiblespace",
+	commandspacer: true
+},
+	"␀": {
+	text: "NL"
+},
+	"␄": {
+	text: "///"
+},
+	"␊": {
+	text: "?"
+},
+	"①": {
+	text: "\\ding{172}"
+},
+	"②": {
+	text: "\\ding{173}"
+},
+	"⑱": {
+	text: "\\ding{174}"
+},
+	"④": {
+	text: "\\ding{175}"
+},
+	"â‘€": {
+	text: "\\ding{176}"
+},
+	"â‘„": {
+	text: "\\ding{177}"
+},
+	"⑩": {
+	text: "\\ding{178}"
+},
+	"⑧": {
+	text: "\\ding{179}"
+},
+	"⑹": {
+	text: "\\ding{180}"
+},
+	"⑩": {
+	text: "\\ding{181}"
+},
+	"â‘Ș": {
+	text: "(11)"
+},
+	"⑫": {
+	text: "(12)"
+},
+	"⑬": {
+	text: "(13)"
+},
+	"⑭": {
+	text: "(14)"
+},
+	"⑼": {
+	text: "(15)"
+},
+	"⑯": {
+	text: "(16)"
+},
+	"⑰": {
+	text: "(17)"
+},
+	"⑱": {
+	text: "(18)"
+},
+	"â‘Č": {
+	text: "(19)"
+},
+	"⑳": {
+	text: "(20)"
+},
+	"⑮": {
+	text: "(1)"
+},
+	"â‘”": {
+	text: "(2)"
+},
+	"⑶": {
+	text: "(3)"
+},
+	"⑷": {
+	text: "(4)"
+},
+	"⑾": {
+	text: "(5)"
+},
+	"â‘č": {
+	text: "(6)"
+},
+	"â‘ș": {
+	text: "(7)"
+},
+	"⑻": {
+	text: "(8)"
+},
+	"⑌": {
+	text: "(9)"
+},
+	"⑜": {
+	text: "(10)"
+},
+	"â‘Ÿ": {
+	text: "(11)"
+},
+	"⑿": {
+	text: "(12)"
+},
+	"⒀": {
+	text: "(13)"
+},
+	"⒁": {
+	text: "(14)"
+},
+	"⒂": {
+	text: "(15)"
+},
+	"⒃": {
+	text: "(16)"
+},
+	"⒄": {
+	text: "(17)"
+},
+	"⒅": {
+	text: "(18)"
+},
+	"⒆": {
+	text: "(19)"
+},
+	"⒇": {
+	text: "(20)"
+},
+	"⒈": {
+	text: "1."
+},
+	"⒉": {
+	text: "2."
+},
+	"⒊": {
+	text: "3."
+},
+	"⒋": {
+	text: "4."
+},
+	"⒌": {
+	text: "5."
+},
+	"⒍": {
+	text: "6."
+},
+	"⒎": {
+	text: "7."
+},
+	"⒏": {
+	text: "8."
+},
+	"⒐": {
+	text: "9."
+},
+	"⒑": {
+	text: "10."
+},
+	"⒒": {
+	text: "11."
+},
+	"⒓": {
+	text: "12."
+},
+	"⒔": {
+	text: "13."
+},
+	"⒕": {
+	text: "14."
+},
+	"⒖": {
+	text: "15."
+},
+	"⒗": {
+	text: "16."
+},
+	"⒘": {
+	text: "17."
+},
+	"⒙": {
+	text: "18."
+},
+	"⒚": {
+	text: "19."
+},
+	"⒛": {
+	text: "20."
+},
+	"⒜": {
+	text: "(a)"
+},
+	"⒝": {
+	text: "(b)"
+},
+	"⒞": {
+	text: "(c)"
+},
+	"⒟": {
+	text: "(d)"
+},
+	"⒠": {
+	text: "(e)"
+},
+	"⒡": {
+	text: "(f)"
+},
+	"⒱": {
+	text: "(g)"
+},
+	"⒣": {
+	text: "(h)"
+},
+	"â’€": {
+	text: "(i)"
+},
+	"â’„": {
+	text: "(j)"
+},
+	"⒩": {
+	text: "(k)"
+},
+	"⒧": {
+	text: "(l)"
+},
+	"Ⓓ": {
+	text: "(m)"
+},
+	"⒩": {
+	text: "(n)"
+},
+	"â’Ș": {
+	text: "(o)"
+},
+	"⒫": {
+	text: "(p)"
+},
+	"⒬": {
+	text: "(q)"
+},
+	"⒭": {
+	text: "(r)"
+},
+	"Ⓖ": {
+	text: "(s)"
+},
+	"⒯": {
+	text: "(t)"
+},
+	"⒰": {
+	text: "(u)"
+},
+	"⒱": {
+	text: "(v)"
+},
+	"â’Č": {
+	text: "(w)"
+},
+	"⒳": {
+	text: "(x)"
+},
+	"⒮": {
+	text: "(y)"
+},
+	"â’”": {
+	text: "(z)"
+},
+	"Ⓐ": {
+	text: "(A)"
+},
+	"Ⓑ": {
+	text: "(B)"
+},
+	"Ⓘ": {
+	text: "(C)"
+},
+	"â’č": {
+	text: "(D)"
+},
+	"â’ș": {
+	text: "(E)"
+},
+	"Ⓕ": {
+	text: "(F)"
+},
+	"⒌": {
+	text: "(G)"
+},
+	"⒜": {
+	text: "(H)"
+},
+	"â’Ÿ": {
+	text: "(I)"
+},
+	"Ⓙ": {
+	text: "(J)"
+},
+	"Ⓚ": {
+	text: "(K)"
+},
+	"Ⓛ": {
+	text: "(L)"
+},
+	"Ⓜ": {
+	text: "(M)"
+},
+	"Ⓝ": {
+	text: "(N)"
+},
+	"Ⓞ": {
+	text: "(O)"
+},
+	"Ⓟ": {
+	text: "(P)"
+},
+	"Ⓠ": {
+	text: "(Q)"
+},
+	"Ⓡ": {
+	text: "(R)"
+},
+	"Ⓢ": {
+	math: "\\circledS"
+},
+	"Ⓣ": {
+	text: "(T)"
+},
+	"Ⓤ": {
+	text: "(U)"
+},
+	"Ⓥ": {
+	text: "(V)"
+},
+	"Ⓦ": {
+	text: "(W)"
+},
+	"Ⓧ": {
+	text: "(X)"
+},
+	"Ⓨ": {
+	text: "(Y)"
+},
+	"Ⓩ": {
+	text: "(Z)"
+},
+	"ⓐ": {
+	text: "(a)"
+},
+	"ⓑ": {
+	text: "(b)"
+},
+	"ⓒ": {
+	text: "(c)"
+},
+	"ⓓ": {
+	text: "(d)"
+},
+	"ⓔ": {
+	text: "(e)"
+},
+	"ⓕ": {
+	text: "(f)"
+},
+	"ⓖ": {
+	text: "(g)"
+},
+	"ⓗ": {
+	text: "(h)"
+},
+	"ⓘ": {
+	text: "(i)"
+},
+	"ⓙ": {
+	text: "(j)"
+},
+	"ⓚ": {
+	text: "(k)"
+},
+	"ⓛ": {
+	text: "(l)"
+},
+	"ⓜ": {
+	text: "(m)"
+},
+	"ⓝ": {
+	text: "(n)"
+},
+	"ⓞ": {
+	text: "(o)"
+},
+	"ⓟ": {
+	text: "(p)"
+},
+	"ⓠ": {
+	text: "(q)"
+},
+	"ⓡ": {
+	text: "(r)"
+},
+	"⓱": {
+	text: "(s)"
+},
+	"ⓣ": {
+	text: "(t)"
+},
+	"â“€": {
+	text: "(u)"
+},
+	"â“„": {
+	text: "(v)"
+},
+	"ⓩ": {
+	text: "(w)"
+},
+	"ⓧ": {
+	text: "(x)"
+},
+	"⓹": {
+	text: "(y)"
+},
+	"ⓩ": {
+	text: "(z)"
+},
+	"â“Ș": {
+	text: "(0)"
+},
+	"─": {
+	text: "-"
+},
+	"━": {
+	text: "="
+},
+	"│": {
+	text: "|"
+},
+	"┃": {
+	text: "|"
+},
+	"┄": {
+	text: "-"
+},
+	"┅": {
+	text: "="
+},
+	"┆": {
+	math: "\\Elzdshfnc"
+},
+	"┇": {
+	text: "|"
+},
+	"┈": {
+	text: "-"
+},
+	"┉": {
+	text: "="
+},
+	"┊": {
+	text: "|"
+},
+	"┋": {
+	text: "|"
+},
+	"┌": {
+	text: "+"
+},
+	"┍": {
+	text: "+"
+},
+	"┎": {
+	text: "+"
+},
+	"┏": {
+	text: "+"
+},
+	"┐": {
+	text: "+"
+},
+	"┑": {
+	text: "+"
+},
+	"┒": {
+	text: "+"
+},
+	"┓": {
+	text: "+"
+},
+	"└": {
+	text: "+"
+},
+	"┕": {
+	text: "+"
+},
+	"┖": {
+	text: "+"
+},
+	"┗": {
+	text: "+"
+},
+	"┘": {
+	text: "+"
+},
+	"┙": {
+	math: "\\Elzsqfnw"
+},
+	"┚": {
+	text: "+"
+},
+	"┛": {
+	text: "+"
+},
+	"├": {
+	text: "+"
+},
+	"┝": {
+	text: "+"
+},
+	"┞": {
+	text: "+"
+},
+	"┟": {
+	text: "+"
+},
+	"┠": {
+	text: "+"
+},
+	"┡": {
+	text: "+"
+},
+	"┱": {
+	text: "+"
+},
+	"┣": {
+	text: "+"
+},
+	"─": {
+	text: "+"
+},
+	"┄": {
+	text: "+"
+},
+	"┩": {
+	text: "+"
+},
+	"┧": {
+	text: "+"
+},
+	"┹": {
+	text: "+"
+},
+	"┩": {
+	text: "+"
+},
+	"â”Ș": {
+	text: "+"
+},
+	"┫": {
+	text: "+"
+},
+	"┬": {
+	text: "+"
+},
+	"┭": {
+	text: "+"
+},
+	"┼": {
+	text: "+"
+},
+	"┯": {
+	text: "+"
+},
+	"┰": {
+	text: "+"
+},
+	"┱": {
+	text: "+"
+},
+	"â”Č": {
+	text: "+"
+},
+	"┳": {
+	text: "+"
+},
+	"┮": {
+	text: "+"
+},
+	"â””": {
+	text: "+"
+},
+	"┶": {
+	text: "+"
+},
+	"┷": {
+	text: "+"
+},
+	"┾": {
+	text: "+"
+},
+	"â”č": {
+	text: "+"
+},
+	"â”ș": {
+	text: "+"
+},
+	"┻": {
+	text: "+"
+},
+	"┌": {
+	text: "+"
+},
+	"├": {
+	text: "+"
+},
+	"┟": {
+	text: "+"
+},
+	"┿": {
+	text: "+"
+},
+	"╀": {
+	text: "+"
+},
+	"╁": {
+	text: "+"
+},
+	"╂": {
+	text: "+"
+},
+	"╃": {
+	text: "+"
+},
+	"╄": {
+	text: "+"
+},
+	"╅": {
+	text: "+"
+},
+	"╆": {
+	text: "+"
+},
+	"╇": {
+	text: "+"
+},
+	"╈": {
+	text: "+"
+},
+	"╉": {
+	text: "+"
+},
+	"╊": {
+	text: "+"
+},
+	"╋": {
+	text: "+"
+},
+	"╌": {
+	text: "-"
+},
+	"╍": {
+	text: "="
+},
+	"╎": {
+	text: "|"
+},
+	"╏": {
+	text: "|"
+},
+	"═": {
+	text: "="
+},
+	"║": {
+	text: "|"
+},
+	"╒": {
+	text: "+"
+},
+	"╓": {
+	text: "+"
+},
+	"╔": {
+	text: "+"
+},
+	"╕": {
+	text: "+"
+},
+	"╖": {
+	text: "+"
+},
+	"╗": {
+	text: "+"
+},
+	"╘": {
+	text: "+"
+},
+	"╙": {
+	text: "+"
+},
+	"╚": {
+	text: "+"
+},
+	"╛": {
+	text: "+"
+},
+	"╜": {
+	text: "+"
+},
+	"╝": {
+	text: "+"
+},
+	"╞": {
+	text: "+"
+},
+	"╟": {
+	text: "+"
+},
+	"╠": {
+	text: "+"
+},
+	"╡": {
+	text: "+"
+},
+	"╱": {
+	text: "+"
+},
+	"╣": {
+	text: "+"
+},
+	"â•€": {
+	text: "+"
+},
+	"â•„": {
+	text: "+"
+},
+	"╩": {
+	text: "+"
+},
+	"╧": {
+	text: "+"
+},
+	"╹": {
+	text: "+"
+},
+	"╩": {
+	text: "+"
+},
+	"â•Ș": {
+	text: "+"
+},
+	"╫": {
+	text: "+"
+},
+	"╬": {
+	text: "+"
+},
+	"╭": {
+	text: "+"
+},
+	"╼": {
+	text: "+"
+},
+	"╯": {
+	text: "+"
+},
+	"╰": {
+	text: "+"
+},
+	"╱": {
+	math: "\\diagup"
+},
+	"â•Č": {
+	text: "\\"
+},
+	"╳": {
+	text: "X"
+},
+	"╌": {
+	text: "-"
+},
+	"╜": {
+	text: "|"
+},
+	"â•Ÿ": {
+	text: "-"
+},
+	"╿": {
+	text: "|"
+},
+	"▀": {
+	math: "\\blockuphalf"
+},
+	"▄": {
+	math: "\\blocklowhalf"
+},
+	"█": {
+	math: "\\blockfull"
+},
+	"▌": {
+	math: "\\blocklefthalf"
+},
+	"▐": {
+	math: "\\blockrighthalf"
+},
+	"░": {
+	math: "\\blockqtrshaded"
+},
+	"▒": {
+	math: "\\blockhalfshaded"
+},
+	"▓": {
+	math: "\\blockthreeqtrshaded"
+},
+	"■": {
+	math: "\\mdlgblksquare",
+	text: "\\ding{110}"
+},
+	"□": {
+	math: "\\square"
+},
+	"▱": {
+	math: "\\squoval"
+},
+	"▣": {
+	math: "\\blackinwhitesquare"
+},
+	"â–€": {
+	math: "\\squarehfill"
+},
+	"â–„": {
+	math: "\\squarevfill"
+},
+	"▩": {
+	math: "\\squarehvfill"
+},
+	"▧": {
+	math: "\\squarenwsefill"
+},
+	"▹": {
+	math: "\\squareneswfill"
+},
+	"▩": {
+	math: "\\squarecrossfill"
+},
+	"â–Ș": {
+	math: "\\blacksquare"
+},
+	"▫": {
+	math: "\\smwhtsquare"
+},
+	"▬": {
+	math: "\\hrectangleblack"
+},
+	"▭": {
+	math: "\\fbox{~~}"
+},
+	"▼": {
+	math: "\\vrectangleblack"
+},
+	"▯": {
+	math: "\\Elzvrecto"
+},
+	"▰": {
+	math: "\\parallelogramblack"
+},
+	"â–Č": {
+	math: "\\bigblacktriangleup",
+	text: "\\ding{115}"
+},
+	"△": {
+	math: "\\bigtriangleup"
+},
+	"▮": {
+	math: "\\blacktriangle"
+},
+	"â–”": {
+	math: "\\vartriangle"
+},
+	"▶": {
+	math: "\\RHD"
+},
+	"▷": {
+	math: "\\rhd"
+},
+	"▾": {
+	math: "\\blacktriangleright"
+},
+	"â–č": {
+	math: "\\triangleright"
+},
+	"â–ș": {
+	math: "\\blackpointerright"
+},
+	"▻": {
+	math: "\\whitepointerright"
+},
+	"▌": {
+	math: "\\bigblacktriangledown",
+	text: "\\ding{116}"
+},
+	"▜": {
+	math: "\\bigtriangledown"
+},
+	"â–Ÿ": {
+	math: "\\blacktriangledown"
+},
+	"▿": {
+	math: "\\triangledown"
+},
+	"◀": {
+	math: "\\LHD"
+},
+	"◁": {
+	math: "\\lhd"
+},
+	"◂": {
+	math: "\\blacktriangleleft"
+},
+	"◃": {
+	math: "\\triangleleft"
+},
+	"◄": {
+	math: "\\blackpointerleft"
+},
+	"◅": {
+	math: "\\whitepointerleft"
+},
+	"◆": {
+	math: "\\Diamondblack",
+	text: "\\ding{117}"
+},
+	"◇": {
+	math: "\\Diamond"
+},
+	"◈": {
+	math: "\\blackinwhitediamond"
+},
+	"◉": {
+	math: "\\fisheye"
+},
+	"◊": {
+	math: "\\lozenge"
+},
+	"○": {
+	math: "\\bigcirc"
+},
+	"◌": {
+	math: "\\dottedcircle"
+},
+	"◍": {
+	math: "\\circlevertfill"
+},
+	"◎": {
+	math: "\\bullseye"
+},
+	"●": {
+	math: "\\CIRCLE",
+	text: "\\ding{108}"
+},
+	"◐": {
+	math: "\\Elzcirfl"
+},
+	"◑": {
+	math: "\\Elzcirfr"
+},
+	"◒": {
+	math: "\\Elzcirfb"
+},
+	"◓": {
+	math: "\\circletophalfblack"
+},
+	"◔": {
+	math: "\\circleurquadblack"
+},
+	"◕": {
+	math: "\\blackcircleulquadwhite"
+},
+	"◖": {
+	math: "\\LEFTCIRCLE"
+},
+	"◗": {
+	math: "\\RIGHTCIRCLE",
+	text: "\\ding{119}"
+},
+	"◘": {
+	math: "\\Elzrvbull"
+},
+	"◙": {
+	math: "\\inversewhitecircle"
+},
+	"◚": {
+	math: "\\invwhiteupperhalfcircle"
+},
+	"◛": {
+	math: "\\invwhitelowerhalfcircle"
+},
+	"◜": {
+	math: "\\ularc"
+},
+	"◝": {
+	math: "\\urarc"
+},
+	"◞": {
+	math: "\\lrarc"
+},
+	"◟": {
+	math: "\\llarc"
+},
+	"◠": {
+	math: "\\topsemicircle"
+},
+	"◡": {
+	math: "\\botsemicircle"
+},
+	"◱": {
+	math: "\\lrblacktriangle"
+},
+	"◣": {
+	math: "\\llblacktriangle"
+},
+	"â—€": {
+	math: "\\ulblacktriangle"
+},
+	"â—„": {
+	math: "\\urblacktriangle"
+},
+	"◩": {
+	math: "\\smwhtcircle"
+},
+	"◧": {
+	math: "\\Elzsqfl"
+},
+	"◹": {
+	math: "\\Elzsqfr"
+},
+	"◩": {
+	math: "\\squareulblack"
+},
+	"â—Ș": {
+	math: "\\Elzsqfse"
+},
+	"◫": {
+	math: "\\boxbar"
+},
+	"◬": {
+	math: "\\trianglecdot"
+},
+	"◭": {
+	math: "\\triangleleftblack"
+},
+	"◼": {
+	math: "\\trianglerightblack"
+},
+	"◯": {
+	math: "\\bigcirc"
+},
+	"◰": {
+	math: "\\squareulquad"
+},
+	"◱": {
+	math: "\\squarellquad"
+},
+	"â—Č": {
+	math: "\\squarelrquad"
+},
+	"◳": {
+	math: "\\squareurquad"
+},
+	"◮": {
+	math: "\\circleulquad"
+},
+	"â—”": {
+	math: "\\circlellquad"
+},
+	"◶": {
+	math: "\\circlelrquad"
+},
+	"◷": {
+	math: "\\circleurquad"
+},
+	"◾": {
+	math: "\\ultriangle"
+},
+	"â—č": {
+	math: "\\urtriangle"
+},
+	"â—ș": {
+	math: "\\lltriangle"
+},
+	"◻": {
+	math: "\\square"
+},
+	"◌": {
+	math: "\\blacksquare"
+},
+	"◜": {
+	math: "\\mdsmwhtsquare"
+},
+	"â—Ÿ": {
+	math: "\\mdsmblksquare"
+},
+	"◿": {
+	math: "\\lrtriangle"
+},
+	"★": {
+	math: "\\bigstar",
+	text: "\\ding{72}"
+},
+	"☆": {
+	math: "\\bigwhitestar",
+	text: "\\ding{73}"
+},
+	"☉": {
+	math: "\\Sun"
+},
+	"☎": {
+	text: "\\ding{37}"
+},
+	"☐": {
+	math: "\\Square"
+},
+	"☑": {
+	math: "\\CheckedBox"
+},
+	"☒": {
+	math: "\\XBox"
+},
+	"☓": {
+	text: "X"
+},
+	"☕": {
+	math: "\\steaming"
+},
+	"☛": {
+	text: "\\ding{42}"
+},
+	"☞": {
+	math: "\\pointright",
+	text: "\\ding{43}"
+},
+	"☠": {
+	math: "\\skull"
+},
+	"☥": {
+	math: "\\danger"
+},
+	"☹": {
+	math: "\\radiation"
+},
+	"☣": {
+	math: "\\biohazard"
+},
+	"☯": {
+	math: "\\yinyang"
+},
+	"â˜č": {
+	math: "\\frownie"
+},
+	"â˜ș": {
+	math: "\\smiley"
+},
+	"☻": {
+	math: "\\blacksmiley"
+},
+	"☌": {
+	math: "\\sun"
+},
+	"☜": {
+	text: "\\rightmoon",
+	commandspacer: true,
+	textpackages: [
+		"wasysym"
+	]
+},
+	"☟": {
+	text: "\\leftmoon",
+	commandspacer: true,
+	textpackages: [
+		"wasysym"
+	]
+},
+	"☿": {
+	math: "\\mercury",
+	text: "\\mercury",
+	commandspacer: true
+},
+	"♀": {
+	math: "\\female",
+	text: "\\venus",
+	commandspacer: true
+},
+	"♁": {
+	math: "\\earth"
+},
+	"♂": {
+	math: "\\male",
+	text: "\\male",
+	commandspacer: true
+},
+	"♃": {
+	math: "\\jupiter",
+	text: "\\jupiter",
+	commandspacer: true
+},
+	"♄": {
+	math: "\\saturn",
+	text: "\\saturn",
+	commandspacer: true
+},
+	"♅": {
+	math: "\\uranus",
+	text: "\\uranus",
+	commandspacer: true
+},
+	"♆": {
+	math: "\\neptune",
+	text: "\\neptune",
+	commandspacer: true
+},
+	"♇": {
+	math: "\\pluto",
+	text: "\\pluto",
+	commandspacer: true
+},
+	"♈": {
+	math: "\\aries",
+	text: "\\aries",
+	commandspacer: true
+},
+	"♉": {
+	math: "\\taurus",
+	text: "\\taurus",
+	commandspacer: true
+},
+	"♊": {
+	math: "\\gemini",
+	text: "\\gemini",
+	commandspacer: true
+},
+	"♋": {
+	math: "\\cancer",
+	text: "\\cancer",
+	commandspacer: true
+},
+	"♌": {
+	math: "\\leo",
+	text: "\\leo",
+	commandspacer: true
+},
+	"♍": {
+	math: "\\virgo",
+	text: "\\virgo",
+	commandspacer: true
+},
+	"♎": {
+	math: "\\libra",
+	text: "\\libra",
+	commandspacer: true
+},
+	"♏": {
+	math: "\\scorpio",
+	text: "\\scorpio",
+	commandspacer: true
+},
+	"♐": {
+	math: "\\sagittarius",
+	text: "\\sagittarius",
+	commandspacer: true
+},
+	"♑": {
+	math: "\\capricornus",
+	text: "\\capricornus",
+	commandspacer: true
+},
+	"♒": {
+	math: "\\aquarius",
+	text: "\\aquarius",
+	commandspacer: true
+},
+	"♓": {
+	math: "\\pisces",
+	text: "\\pisces",
+	commandspacer: true
+},
+	"♠": {
+	math: "\\spadesuit",
+	text: "\\ding{171}"
+},
+	"♡": {
+	math: "\\heartsuit"
+},
+	"♱": {
+	math: "\\diamond"
+},
+	"♣": {
+	math: "\\clubsuit",
+	text: "\\ding{168}"
+},
+	"♀": {
+	math: "\\varspadesuit"
+},
+	"♄": {
+	math: "\\varheartsuit",
+	text: "\\ding{170}"
+},
+	"♩": {
+	math: "\\vardiamondsuit",
+	text: "\\ding{169}"
+},
+	"♧": {
+	math: "\\varclubsuit"
+},
+	"♩": {
+	math: "\\quarternote",
+	text: "\\quarternote",
+	commandspacer: true
+},
+	"â™Ș": {
+	math: "\\eighthnote",
+	text: "\\eighthnote",
+	commandspacer: true
+},
+	"♫": {
+	math: "\\twonotes"
+},
+	"♬": {
+	math: "\\sixteenthnote"
+},
+	"♭": {
+	math: "\\flat"
+},
+	"♼": {
+	math: "\\natural"
+},
+	"♯": {
+	math: "\\sharp"
+},
+	"♻": {
+	math: "\\recycle"
+},
+	"♟": {
+	math: "\\acidfree"
+},
+	"⚀": {
+	math: "\\dicei"
+},
+	"⚁": {
+	math: "\\diceii"
+},
+	"⚂": {
+	math: "\\diceiii"
+},
+	"⚃": {
+	math: "\\diceiv"
+},
+	"⚄": {
+	math: "\\dicev"
+},
+	"⚅": {
+	math: "\\dicevi"
+},
+	"⚆": {
+	math: "\\circledrightdot"
+},
+	"⚇": {
+	math: "\\circledtwodots"
+},
+	"⚈": {
+	math: "\\blackcircledrightdot"
+},
+	"⚉": {
+	math: "\\blackcircledtwodots"
+},
+	"⚓": {
+	math: "\\anchor"
+},
+	"⚔": {
+	math: "\\swords"
+},
+	"⚠": {
+	math: "\\warning"
+},
+	"âš„": {
+	math: "\\Hermaphrodite"
+},
+	"âšȘ": {
+	math: "\\medcirc"
+},
+	"⚫": {
+	math: "\\medbullet"
+},
+	"⚬": {
+	math: "\\mdsmwhtcircle"
+},
+	"âšČ": {
+	math: "\\neuter"
+},
+	"✁": {
+	text: "\\ding{33}"
+},
+	"✂": {
+	text: "\\ding{34}"
+},
+	"✃": {
+	text: "\\ding{35}"
+},
+	"✄": {
+	text: "\\ding{36}"
+},
+	"✆": {
+	text: "\\ding{38}"
+},
+	"✇": {
+	text: "\\ding{39}"
+},
+	"✈": {
+	text: "\\ding{40}"
+},
+	"✉": {
+	text: "\\ding{41}"
+},
+	"✌": {
+	text: "\\ding{44}"
+},
+	"✍": {
+	text: "\\ding{45}"
+},
+	"✎": {
+	math: "\\pencil",
+	text: "\\ding{46}"
+},
+	"✏": {
+	text: "\\ding{47}"
+},
+	"✐": {
+	text: "\\ding{48}"
+},
+	"✑": {
+	text: "\\ding{49}"
+},
+	"✒": {
+	text: "\\ding{50}"
+},
+	"✓": {
+	math: "\\checkmark",
+	text: "\\ding{51}"
+},
+	"✔": {
+	text: "\\ding{52}"
+},
+	"✕": {
+	text: "\\ding{53}"
+},
+	"✖": {
+	text: "\\ding{54}"
+},
+	"✗": {
+	math: "\\ballotx",
+	text: "\\ding{55}"
+},
+	"✘": {
+	text: "\\ding{56}"
+},
+	"✙": {
+	text: "\\ding{57}"
+},
+	"✚": {
+	text: "\\ding{58}"
+},
+	"✛": {
+	text: "\\ding{59}"
+},
+	"✜": {
+	text: "\\ding{60}"
+},
+	"✝": {
+	text: "\\ding{61}"
+},
+	"✞": {
+	text: "\\ding{62}"
+},
+	"✟": {
+	text: "\\ding{63}"
+},
+	"✠": {
+	math: "\\maltese",
+	text: "\\ding{64}"
+},
+	"✡": {
+	text: "\\ding{65}"
+},
+	"✱": {
+	text: "\\ding{66}"
+},
+	"✣": {
+	text: "\\ding{67}"
+},
+	"✀": {
+	text: "\\ding{68}"
+},
+	"✄": {
+	text: "\\ding{69}"
+},
+	"✩": {
+	text: "\\ding{70}"
+},
+	"✧": {
+	text: "\\ding{71}"
+},
+	"✩": {
+	text: "\\ding{73}"
+},
+	"âœȘ": {
+	math: "\\circledstar",
+	text: "\\ding{74}"
+},
+	"✫": {
+	text: "\\ding{75}"
+},
+	"✬": {
+	text: "\\ding{76}"
+},
+	"✭": {
+	text: "\\ding{77}"
+},
+	"✼": {
+	text: "\\ding{78}"
+},
+	"✯": {
+	text: "\\ding{79}"
+},
+	"✰": {
+	text: "\\ding{80}"
+},
+	"✱": {
+	text: "\\ding{81}"
+},
+	"âœČ": {
+	text: "\\ding{82}"
+},
+	"✳": {
+	text: "\\ding{83}"
+},
+	"✮": {
+	text: "\\ding{84}"
+},
+	"✔": {
+	text: "\\ding{85}"
+},
+	"✶": {
+	math: "\\varstar",
+	text: "\\ding{86}"
+},
+	"✷": {
+	text: "\\ding{87}"
+},
+	"✾": {
+	text: "\\ding{88}"
+},
+	"âœč": {
+	text: "\\ding{89}"
+},
+	"âœș": {
+	text: "\\ding{90}"
+},
+	"✻": {
+	text: "\\ding{91}"
+},
+	"✌": {
+	text: "\\ding{92}"
+},
+	"✜": {
+	math: "\\dingasterisk",
+	text: "\\ding{93}"
+},
+	"✟": {
+	text: "\\ding{94}"
+},
+	"✿": {
+	text: "\\ding{95}"
+},
+	"❀": {
+	text: "\\ding{96}"
+},
+	"❁": {
+	text: "\\ding{97}"
+},
+	"❂": {
+	text: "\\ding{98}"
+},
+	"❃": {
+	text: "\\ding{99}"
+},
+	"❄": {
+	text: "\\ding{100}"
+},
+	"❅": {
+	text: "\\ding{101}"
+},
+	"❆": {
+	text: "\\ding{102}"
+},
+	"❇": {
+	text: "\\ding{103}"
+},
+	"❈": {
+	text: "\\ding{104}"
+},
+	"❉": {
+	text: "\\ding{105}"
+},
+	"❊": {
+	text: "\\ding{106}"
+},
+	"❋": {
+	text: "\\ding{107}"
+},
+	"❍": {
+	text: "\\ding{109}"
+},
+	"❏": {
+	text: "\\ding{111}"
+},
+	"❐": {
+	text: "\\ding{112}"
+},
+	"❑": {
+	text: "\\ding{113}"
+},
+	"❒": {
+	text: "\\ding{114}"
+},
+	"❖": {
+	text: "\\ding{118}"
+},
+	"❘": {
+	text: "\\ding{120}"
+},
+	"❙": {
+	text: "\\ding{121}"
+},
+	"❚": {
+	text: "\\ding{122}"
+},
+	"❛": {
+	text: "\\ding{123}"
+},
+	"❜": {
+	text: "\\ding{124}"
+},
+	"❝": {
+	text: "\\ding{125}"
+},
+	"❞": {
+	text: "\\ding{126}"
+},
+	"❡": {
+	text: "\\ding{161}"
+},
+	"❱": {
+	text: "\\ding{162}"
+},
+	"❣": {
+	text: "\\ding{163}"
+},
+	"❀": {
+	text: "\\ding{164}"
+},
+	"❄": {
+	text: "\\ding{165}"
+},
+	"❊": {
+	text: "\\ding{166}"
+},
+	"❧": {
+	text: "\\ding{167}"
+},
+	"âČ": {
+	math: "\\lbrbrak"
+},
+	"❳": {
+	math: "\\rbrbrak"
+},
+	"❶": {
+	text: "\\ding{182}"
+},
+	"❷": {
+	text: "\\ding{183}"
+},
+	"❞": {
+	text: "\\ding{184}"
+},
+	"âč": {
+	text: "\\ding{185}"
+},
+	"âș": {
+	text: "\\ding{186}"
+},
+	"❻": {
+	text: "\\ding{187}"
+},
+	"❌": {
+	text: "\\ding{188}"
+},
+	"❜": {
+	text: "\\ding{189}"
+},
+	"❟": {
+	text: "\\ding{190}"
+},
+	"❿": {
+	text: "\\ding{191}"
+},
+	"➀": {
+	text: "\\ding{192}"
+},
+	"➁": {
+	text: "\\ding{193}"
+},
+	"➂": {
+	text: "\\ding{194}"
+},
+	"➃": {
+	text: "\\ding{195}"
+},
+	"➄": {
+	text: "\\ding{196}"
+},
+	"➅": {
+	text: "\\ding{197}"
+},
+	"➆": {
+	text: "\\ding{198}"
+},
+	"➇": {
+	text: "\\ding{199}"
+},
+	"➈": {
+	text: "\\ding{200}"
+},
+	"➉": {
+	text: "\\ding{201}"
+},
+	"➊": {
+	text: "\\ding{202}"
+},
+	"➋": {
+	text: "\\ding{203}"
+},
+	"➌": {
+	text: "\\ding{204}"
+},
+	"➍": {
+	text: "\\ding{205}"
+},
+	"➎": {
+	text: "\\ding{206}"
+},
+	"➏": {
+	text: "\\ding{207}"
+},
+	"➐": {
+	text: "\\ding{208}"
+},
+	"➑": {
+	text: "\\ding{209}"
+},
+	"➒": {
+	text: "\\ding{210}"
+},
+	"➓": {
+	text: "\\ding{211}"
+},
+	"➔": {
+	text: "\\ding{212}"
+},
+	"➘": {
+	text: "\\ding{216}"
+},
+	"➙": {
+	text: "\\ding{217}"
+},
+	"➚": {
+	text: "\\ding{218}"
+},
+	"➛": {
+	math: "\\draftingarrow",
+	text: "\\ding{219}"
+},
+	"➜": {
+	text: "\\ding{220}"
+},
+	"➝": {
+	text: "\\ding{221}"
+},
+	"➞": {
+	text: "\\ding{222}"
+},
+	"➟": {
+	text: "\\ding{223}"
+},
+	"➠": {
+	text: "\\ding{224}"
+},
+	"➡": {
+	text: "\\ding{225}"
+},
+	"➱": {
+	math: "\\arrowbullet",
+	text: "\\ding{226}"
+},
+	"➣": {
+	text: "\\ding{227}"
+},
+	"➀": {
+	text: "\\ding{228}"
+},
+	"➄": {
+	text: "\\ding{229}"
+},
+	"➊": {
+	text: "\\ding{230}"
+},
+	"➧": {
+	text: "\\ding{231}"
+},
+	"➚": {
+	text: "\\ding{232}"
+},
+	"➩": {
+	text: "\\ding{233}"
+},
+	"âžȘ": {
+	text: "\\ding{234}"
+},
+	"➫": {
+	text: "\\ding{235}"
+},
+	"➬": {
+	text: "\\ding{236}"
+},
+	"➭": {
+	text: "\\ding{237}"
+},
+	"➼": {
+	text: "\\ding{238}"
+},
+	"➯": {
+	text: "\\ding{239}"
+},
+	"➱": {
+	text: "\\ding{241}"
+},
+	"âžČ": {
+	text: "\\ding{242}"
+},
+	"➳": {
+	text: "\\ding{243}"
+},
+	"➮": {
+	text: "\\ding{244}"
+},
+	"➔": {
+	text: "\\ding{245}"
+},
+	"➶": {
+	text: "\\ding{246}"
+},
+	"➷": {
+	text: "\\ding{247}"
+},
+	"➾": {
+	text: "\\ding{248}"
+},
+	"âžč": {
+	text: "\\ding{249}"
+},
+	"âžș": {
+	text: "\\ding{250}"
+},
+	"➻": {
+	text: "\\ding{251}"
+},
+	"➌": {
+	text: "\\ding{252}"
+},
+	"➜": {
+	text: "\\ding{253}"
+},
+	"➟": {
+	text: "\\ding{254}"
+},
+	"⟀": {
+	math: "\\threedangle"
+},
+	"⟁": {
+	math: "\\whiteinwhitetriangle"
+},
+	"⟂": {
+	math: "\\perp"
+},
+	"⟃": {
+	math: "\\subsetcirc"
+},
+	"⟄": {
+	math: "\\supsetcirc"
+},
+	"⟅": {
+	math: "\\Lbag"
+},
+	"⟆": {
+	math: "\\Rbag"
+},
+	"⟇": {
+	math: "\\veedot"
+},
+	"⟈": {
+	math: "\\bsolhsub"
+},
+	"⟉": {
+	math: "\\suphsol"
+},
+	"⟌": {
+	math: "\\longdivision"
+},
+	"⟐": {
+	math: "\\Diamonddot"
+},
+	"⟑": {
+	math: "\\wedgedot"
+},
+	"⟒": {
+	math: "\\upin"
+},
+	"⟓": {
+	math: "\\pullback"
+},
+	"⟔": {
+	math: "\\pushout"
+},
+	"⟕": {
+	math: "\\leftouterjoin"
+},
+	"⟖": {
+	math: "\\rightouterjoin"
+},
+	"⟗": {
+	math: "\\fullouterjoin"
+},
+	"⟘": {
+	math: "\\bigbot"
+},
+	"⟙": {
+	math: "\\bigtop"
+},
+	"⟚": {
+	math: "\\DashVDash"
+},
+	"⟛": {
+	math: "\\dashVdash"
+},
+	"⟜": {
+	math: "\\multimapinv"
+},
+	"⟝": {
+	math: "\\vlongdash"
+},
+	"⟞": {
+	math: "\\longdashv"
+},
+	"⟟": {
+	math: "\\cirbot"
+},
+	"⟠": {
+	math: "\\lozengeminus"
+},
+	"⟡": {
+	math: "\\concavediamond"
+},
+	"⟱": {
+	math: "\\concavediamondtickleft"
+},
+	"⟣": {
+	math: "\\concavediamondtickright"
+},
+	"⟀": {
+	math: "\\whitesquaretickleft"
+},
+	"⟄": {
+	math: "\\whitesquaretickright"
+},
+	"⟩": {
+	math: "\\llbracket"
+},
+	"⟧": {
+	math: "\\rrbracket"
+},
+	"⟹": {
+	math: "\\langle"
+},
+	"⟩": {
+	math: "\\rangle"
+},
+	"âŸȘ": {
+	math: "\\lang"
+},
+	"⟫": {
+	math: "\\rang"
+},
+	"⟬": {
+	math: "\\Lbrbrak"
+},
+	"⟭": {
+	math: "\\Rbrbrak"
+},
+	"⟼": {
+	math: "\\lgroup"
+},
+	"⟯": {
+	math: "\\rgroup"
+},
+	"⟰": {
+	math: "\\UUparrow"
+},
+	"⟱": {
+	math: "\\DDownarrow"
+},
+	"âŸČ": {
+	math: "\\acwgapcirclearrow"
+},
+	"⟳": {
+	math: "\\cwgapcirclearrow"
+},
+	"⟮": {
+	math: "\\rightarrowonoplus"
+},
+	"⟔": {
+	math: "\\longleftarrow"
+},
+	"⟶": {
+	math: "\\longrightarrow"
+},
+	"⟷": {
+	math: "\\longleftrightarrow"
+},
+	"⟾": {
+	math: "\\Longleftarrow"
+},
+	"âŸč": {
+	math: "\\Longrightarrow"
+},
+	"âŸș": {
+	math: "\\Longleftrightarrow"
+},
+	"⟻": {
+	math: "\\longmapsfrom"
+},
+	"⟌": {
+	math: "\\longmapsto"
+},
+	"⟜": {
+	math: "\\Longmapsfrom"
+},
+	"⟟": {
+	math: "\\Longmapsto"
+},
+	"⟿": {
+	math: "\\sim\\joinrel\\leadsto"
+},
+	" ": {
+	math: "\\psur"
+},
+	" ": {
+	math: "\\nVtwoheadrightarrow"
+},
+	" ": {
+	math: "\\nvLeftarrow"
+},
+	" ": {
+	math: "\\nvRightarrow"
+},
+	" ": {
+	math: "\\nvLeftrightarrow"
+},
+	" ": {
+	math: "\\Mapsfrom"
+},
+	" ": {
+	math: "\\Mapsto"
+},
+	" ": {
+	math: "\\downarrowbarred"
+},
+	" ": {
+	math: "\\uparrowbarred"
+},
+	" ": {
+	math: "\\Uuparrow"
+},
+	"​": {
+	math: "\\Ddownarrow"
+},
+	"‌": {
+	math: "\\leftbkarrow"
+},
+	"‍": {
+	math: "\\rightbkarrow"
+},
+	"‎": {
+	math: "\\leftdbkarrow"
+},
+	"‏": {
+	math: "\\dbkarow"
+},
+	"‐": {
+	math: "\\drbkarow"
+},
+	"‑": {
+	math: "\\rightdotarrow"
+},
+	"‒": {
+	math: "\\UpArrowBar"
+},
+	"–": {
+	math: "\\DownArrowBar"
+},
+	"—": {
+	math: "\\pinj"
+},
+	"―": {
+	math: "\\finj"
+},
+	"‖": {
+	math: "\\bij"
+},
+	"‗": {
+	math: "\\nvtwoheadrightarrowtail"
+},
+	"‘": {
+	math: "\\nVtwoheadrightarrowtail"
+},
+	"’": {
+	math: "\\lefttail"
+},
+	"‚": {
+	math: "\\righttail"
+},
+	"‛": {
+	math: "\\leftdbltail"
+},
+	"“": {
+	math: "\\rightdbltail"
+},
+	"”": {
+	math: "\\diamondleftarrow"
+},
+	"„": {
+	math: "\\rightarrowdiamond"
+},
+	"‟": {
+	math: "\\diamondleftarrowbar"
+},
+	"†": {
+	math: "\\barrightarrowdiamond"
+},
+	"‥": {
+	math: "\\nwsearrow"
+},
+	"‹": {
+	math: "\\neswarrow"
+},
+	"‫": {
+	math: "\\rdiagovfdiag"
+},
+	"‏": {
+	math: "\\fdiagovrdiag"
+},
+	"‭": {
+	math: "\\seovnearrow"
+},
+	"‟": {
+	math: "\\neovsearrow"
+},
+	" ": {
+	math: "\\fdiagovnearrow"
+},
+	"‰": {
+	math: "\\rdiagovsearrow"
+},
+	"‱": {
+	math: "\\neovnwarrow"
+},
+	"â€Č": {
+	math: "\\nwovnearrow"
+},
+	"‎": {
+	math: "\\uprightcurvearrow"
+},
+	"—": {
+	math: "\\downrightcurvedarrow"
+},
+	"„": {
+	math: "\\cwrightarcarrow"
+},
+	"â€č": {
+	math: "\\acwleftarcarrow"
+},
+	"â€ș": {
+	math: "\\acwoverarcarrow"
+},
+	"※": {
+	math: "\\acwunderarcarrow"
+},
+	"‌": {
+	math: "\\curvearrowrightminus"
+},
+	"“": {
+	math: "\\curvearrowleftplus"
+},
+	"‟": {
+	math: "\\cwundercurvearrow"
+},
+	"‿": {
+	math: "\\ccwundercurvearrow"
+},
+	"â„€": {
+	math: "\\Elolarr"
+},
+	"℁": {
+	math: "\\Elorarr"
+},
+	"â„‚": {
+	math: "\\ElzRlarr"
+},
+	"℃": {
+	math: "\\leftarrowshortrightarrow"
+},
+	"â„„": {
+	math: "\\ElzrLarr"
+},
+	"â„…": {
+	math: "\\rightarrowplus"
+},
+	"℆": {
+	math: "\\leftarrowplus"
+},
+	"ℇ": {
+	math: "\\Elzrarrx"
+},
+	"℈": {
+	math: "\\leftrightarrowcircle"
+},
+	"℉": {
+	math: "\\twoheaduparrowcircle"
+},
+	"â„Š": {
+	math: "\\leftrightharpoon"
+},
+	"â„‹": {
+	math: "\\rightleftharpoon"
+},
+	"ℌ": {
+	math: "\\updownharpoonrightleft"
+},
+	"ℍ": {
+	math: "\\updownharpoonleftright"
+},
+	"ℎ": {
+	math: "\\LeftRightVector"
+},
+	"ℏ": {
+	math: "\\RightUpDownVector"
+},
+	"ℐ": {
+	math: "\\DownLeftRightVector"
+},
+	"â„‘": {
+	math: "\\LeftUpDownVector"
+},
+	"â„’": {
+	math: "\\LeftVectorBar"
+},
+	"â„“": {
+	math: "\\RightVectorBar"
+},
+	"â„”": {
+	math: "\\RightUpVectorBar"
+},
+	"â„•": {
+	math: "\\RightDownVectorBar"
+},
+	"â„–": {
+	math: "\\DownLeftVectorBar"
+},
+	"â„—": {
+	math: "\\DownRightVectorBar"
+},
+	"℘": {
+	math: "\\LeftUpVectorBar"
+},
+	"â„™": {
+	math: "\\LeftDownVectorBar"
+},
+	"â„š": {
+	math: "\\LeftTeeVector"
+},
+	"â„›": {
+	math: "\\RightTeeVector"
+},
+	"ℜ": {
+	math: "\\RightUpTeeVector"
+},
+	"ℝ": {
+	math: "\\RightDownTeeVector"
+},
+	"℞": {
+	math: "\\DownLeftTeeVector"
+},
+	"â„Ÿ": {
+	math: "\\DownRightTeeVector"
+},
+	"â„ ": {
+	math: "\\LeftUpTeeVector"
+},
+	"â„Ą": {
+	math: "\\LeftDownTeeVector"
+},
+	"â„ą": {
+	math: "\\leftleftharpoons"
+},
+	"â„Ł": {
+	math: "\\upupharpoons"
+},
+	"â„€": {
+	math: "\\rightrightharpoons"
+},
+	"â„„": {
+	math: "\\downdownharpoons"
+},
+	"â„Š": {
+	math: "\\leftrightharpoonsup"
+},
+	"℧": {
+	math: "\\leftrightharpoonsdown"
+},
+	"â„š": {
+	math: "\\rightleftharpoonsup"
+},
+	"â„©": {
+	math: "\\rightleftharpoonsdown"
+},
+	"â„Ș": {
+	math: "\\leftbarharpoon"
+},
+	"â„«": {
+	math: "\\barleftharpoon"
+},
+	"â„Ź": {
+	math: "\\rightbarharpoon"
+},
+	"â„­": {
+	math: "\\barrightharpoon"
+},
+	"â„ź": {
+	math: "\\UpEquilibrium"
+},
+	"â„Ż": {
+	math: "\\ReverseUpEquilibrium"
+},
+	"â„°": {
+	math: "\\RoundImplies"
+},
+	"ℱ": {
+	math: "\\equalrightarrow"
+},
+	"â„Č": {
+	math: "\\similarrightarrow"
+},
+	"â„ł": {
+	math: "\\leftarrowsimilar"
+},
+	"â„Ž": {
+	math: "\\rightarrowsimilar"
+},
+	"â„”": {
+	math: "\\rightarrowapprox"
+},
+	"ℶ": {
+	math: "\\ltlarr"
+},
+	"â„·": {
+	math: "\\leftarrowless"
+},
+	"â„ž": {
+	math: "\\gtrarr"
+},
+	"â„č": {
+	math: "\\subrarr"
+},
+	"â„ș": {
+	math: "\\leftarrowsubset"
+},
+	"â„»": {
+	math: "\\suplarr"
+},
+	"â„Ÿ": {
+	math: "\\upfishtail"
+},
+	"â„ż": {
+	math: "\\downfishtail"
+},
+	"⩀": {
+	math: "\\Elztfnc"
+},
+	"⊁": {
+	math: "\\spot"
+},
+	"⩂": {
+	math: "\\typecolon"
+},
+	"⊃": {
+	math: "\\lBrace"
+},
+	"⩄": {
+	math: "\\rBrace"
+},
+	"⩆": {
+	math: "\\Elroang"
+},
+	"⩇": {
+	math: "\\limg"
+},
+	"⊈": {
+	math: "\\rimg"
+},
+	"⩉": {
+	math: "\\lblot"
+},
+	"⩊": {
+	math: "\\rblot"
+},
+	"⩋": {
+	math: "\\lbrackubar"
+},
+	"⩌": {
+	math: "\\rbrackubar"
+},
+	"⊍": {
+	math: "\\lbrackultick"
+},
+	"⊎": {
+	math: "\\rbracklrtick"
+},
+	"⊏": {
+	math: "\\lbracklltick"
+},
+	"⊐": {
+	math: "\\rbrackurtick"
+},
+	"⩑": {
+	math: "\\langledot"
+},
+	"⩒": {
+	math: "\\rangledot"
+},
+	"⩓": {
+	math: "<\\kern-0.58em("
+},
+	"⩕": {
+	math: "\\Lparengtr"
+},
+	"⩖": {
+	math: "\\Rparenless"
+},
+	"⩗": {
+	math: "\\lblkbrbrak"
+},
+	"⊘": {
+	math: "\\rblkbrbrak"
+},
+	"⩙": {
+	math: "\\Elzddfnc"
+},
+	"⩚": {
+	math: "\\vzigzag"
+},
+	"⩛": {
+	math: "\\measuredangleleft"
+},
+	"⩜": {
+	math: "\\Angle"
+},
+	"⊝": {
+	math: "\\rightanglemdot"
+},
+	"⊞": {
+	math: "\\angles"
+},
+	"⩟": {
+	math: "\\angdnr"
+},
+	"⊠": {
+	math: "\\Elzlpargt"
+},
+	"⊥": {
+	math: "\\sphericalangleup"
+},
+	"⊹": {
+	math: "\\turnangle"
+},
+	"⊣": {
+	math: "\\revangle"
+},
+	"⊀": {
+	math: "\\angleubar"
+},
+	"⊄": {
+	math: "\\revangleubar"
+},
+	"⊊": {
+	math: "\\wideangledown"
+},
+	"⊧": {
+	math: "\\wideangleup"
+},
+	"⊚": {
+	math: "\\measanglerutone"
+},
+	"⊩": {
+	math: "\\measanglelutonw"
+},
+	"âŠȘ": {
+	math: "\\measanglerdtose"
+},
+	"⊫": {
+	math: "\\measangleldtosw"
+},
+	"⊏": {
+	math: "\\measangleurtone"
+},
+	"⊭": {
+	math: "\\measangleultonw"
+},
+	"⊟": {
+	math: "\\measangledrtose"
+},
+	"⊯": {
+	math: "\\measangledltosw"
+},
+	"⊰": {
+	math: "\\revemptyset"
+},
+	"⊱": {
+	math: "\\emptysetobar"
+},
+	"âŠČ": {
+	math: "\\emptysetocirc"
+},
+	"⊳": {
+	math: "\\emptysetoarr"
+},
+	"⊎": {
+	math: "\\emptysetoarrl"
+},
+	"⊷": {
+	math: "\\circledparallel"
+},
+	"⊞": {
+	math: "\\circledbslash"
+},
+	"âŠč": {
+	math: "\\operp"
+},
+	"âŠș": {
+	math: "\\obot"
+},
+	"⊻": {
+	math: "\\olcross"
+},
+	"⊌": {
+	math: "\\odotslashdot"
+},
+	"⊜": {
+	math: "\\uparrowoncircle"
+},
+	"⊟": {
+	math: "\\circledwhitebullet"
+},
+	"⊿": {
+	math: "\\circledbullet"
+},
+	"⧀": {
+	math: "\\circledless"
+},
+	"⧁": {
+	math: "\\circledgtr"
+},
+	"⧂": {
+	math: "\\cirscir"
+},
+	"⧃": {
+	math: "\\cirE"
+},
+	"⧄": {
+	math: "\\boxslash"
+},
+	"⧅": {
+	math: "\\boxbslash"
+},
+	"⧆": {
+	math: "\\boxast"
+},
+	"⧇": {
+	math: "\\boxcircle"
+},
+	"⧈": {
+	math: "\\boxbox"
+},
+	"⧉": {
+	math: "\\boxonbox"
+},
+	"⧊": {
+	math: "\\ElzLap"
+},
+	"⧋": {
+	math: "\\Elzdefas"
+},
+	"⧌": {
+	math: "\\triangles"
+},
+	"⧍": {
+	math: "\\triangleserifs"
+},
+	"⧎": {
+	math: "\\rtriltri"
+},
+	"⧏": {
+	math: "\\LeftTriangleBar"
+},
+	"⧏̞": {
+	math: "\\NotLeftTriangleBar"
+},
+	"⧐": {
+	math: "\\RightTriangleBar"
+},
+	"⧐̞": {
+	math: "\\NotRightTriangleBar"
+},
+	"⧑": {
+	math: "\\lfbowtie"
+},
+	"⧒": {
+	math: "\\rfbowtie"
+},
+	"⧓": {
+	math: "\\fbowtie"
+},
+	"⧔": {
+	math: "\\lftimes"
+},
+	"⧕": {
+	math: "\\rftimes"
+},
+	"⧖": {
+	math: "\\hourglass"
+},
+	"⧗": {
+	math: "\\blackhourglass"
+},
+	"⧘": {
+	math: "\\lvzigzag"
+},
+	"⧙": {
+	math: "\\rvzigzag"
+},
+	"⧚": {
+	math: "\\Lvzigzag"
+},
+	"⧛": {
+	math: "\\Rvzigzag"
+},
+	"⧝": {
+	math: "\\tieinfty"
+},
+	"⧞": {
+	math: "\\nvinfty"
+},
+	"⧟": {
+	math: "\\multimapboth"
+},
+	"⧠": {
+	math: "\\laplac"
+},
+	"⧥": {
+	math: "\\lrtriangleeq"
+},
+	"⧹": {
+	math: "\\shuffle"
+},
+	"⧣": {
+	math: "\\eparsl"
+},
+	"⧀": {
+	math: "\\smeparsl"
+},
+	"⧄": {
+	math: "\\eqvparsl"
+},
+	"⧊": {
+	math: "\\gleichstark"
+},
+	"⧧": {
+	math: "\\thermod"
+},
+	"⧚": {
+	math: "\\downtriangleleftblack"
+},
+	"⧩": {
+	math: "\\downtrianglerightblack"
+},
+	"â§Ș": {
+	math: "\\blackdiamonddownarrow"
+},
+	"⧫": {
+	math: "\\blacklozenge"
+},
+	"⧏": {
+	math: "\\circledownarrow"
+},
+	"⧭": {
+	math: "\\blackcircledownarrow"
+},
+	"⧟": {
+	math: "\\errbarsquare"
+},
+	"⧯": {
+	math: "\\errbarblacksquare"
+},
+	"⧰": {
+	math: "\\errbardiamond"
+},
+	"⧱": {
+	math: "\\errbarblackdiamond"
+},
+	"â§Č": {
+	math: "\\errbarcircle"
+},
+	"⧳": {
+	math: "\\errbarblackcircle"
+},
+	"⧎": {
+	math: "\\RuleDelayed"
+},
+	"⧔": {
+	math: "\\setminus"
+},
+	"⧶": {
+	math: "\\dsol"
+},
+	"⧷": {
+	math: "\\rsolbar"
+},
+	"⧞": {
+	math: "\\xsol"
+},
+	"â§č": {
+	math: "\\zhide"
+},
+	"â§ș": {
+	math: "\\doubleplus"
+},
+	"⧻": {
+	math: "\\tripleplus"
+},
+	"⧌": {
+	math: "\\lcurvyangle"
+},
+	"⧜": {
+	math: "\\rcurvyangle"
+},
+	"⧟": {
+	math: "\\tplus"
+},
+	"⧿": {
+	math: "\\tminus"
+},
+	"⹀": {
+	math: "\\bigodot"
+},
+	"⚁": {
+	math: "\\bigoplus"
+},
+	"⹂": {
+	math: "\\bigotimes"
+},
+	"⚃": {
+	math: "\\bigcupdot"
+},
+	"⹄": {
+	math: "\\Elxuplus"
+},
+	"⹅": {
+	math: "\\ElzThr"
+},
+	"⹆": {
+	math: "\\Elxsqcup"
+},
+	"⹇": {
+	math: "\\ElzInf"
+},
+	"⚈": {
+	math: "\\ElzSup"
+},
+	"⹉": {
+	math: "\\varprod"
+},
+	"⹊": {
+	math: "\\modtwosum"
+},
+	"⹋": {
+	math: "\\sumint"
+},
+	"⹌": {
+	math: "\\iiiint"
+},
+	"⚍": {
+	math: "\\ElzCint"
+},
+	"⚎": {
+	math: "\\intBar"
+},
+	"⚏": {
+	math: "\\clockoint"
+},
+	"⹑": {
+	math: "\\awint"
+},
+	"⹒": {
+	math: "\\rppolint"
+},
+	"⹓": {
+	math: "\\scpolint"
+},
+	"⹔": {
+	math: "\\npolint"
+},
+	"⹕": {
+	math: "\\pointint"
+},
+	"⹖": {
+	math: "\\sqrint"
+},
+	"⹗": {
+	math: "\\intlarhk"
+},
+	"⚘": {
+	math: "\\intx"
+},
+	"⹙": {
+	math: "\\intcap"
+},
+	"⹚": {
+	math: "\\intcup"
+},
+	"⹛": {
+	math: "\\upint"
+},
+	"⹜": {
+	math: "\\lowint"
+},
+	"⚝": {
+	math: "\\Join"
+},
+	"⚞": {
+	math: "\\bigtriangleleft"
+},
+	"⹟": {
+	math: "\\zcmp"
+},
+	"âš ": {
+	math: "\\zpipe"
+},
+	"⚥": {
+	math: "\\zproject"
+},
+	"âšą": {
+	math: "\\ringplus"
+},
+	"⚣": {
+	math: "\\plushat"
+},
+	"⚀": {
+	math: "\\simplus"
+},
+	"⚊": {
+	math: "\\plussim"
+},
+	"⚧": {
+	math: "\\plussubtwo"
+},
+	"âšš": {
+	math: "\\plustrif"
+},
+	"âš©": {
+	math: "\\commaminus"
+},
+	"âš«": {
+	math: "\\minusfdots"
+},
+	"⚏": {
+	math: "\\minusrdots"
+},
+	"⚯": {
+	math: "\\ElzTimes"
+},
+	"âš°": {
+	math: "\\dottimes"
+},
+	"âš±": {
+	math: "\\timesbar"
+},
+	"âšČ": {
+	math: "\\btimes"
+},
+	"âšł": {
+	math: "\\smashtimes"
+},
+	"⚶": {
+	math: "\\otimeshat"
+},
+	"âš·": {
+	math: "\\Otimes"
+},
+	"âšž": {
+	math: "\\odiv"
+},
+	"âšč": {
+	math: "\\triangleplus"
+},
+	"âšș": {
+	math: "\\triangleminus"
+},
+	"âš»": {
+	math: "\\triangletimes"
+},
+	"⚜": {
+	math: "\\intprodr"
+},
+	"⚟": {
+	math: "\\fcmp"
+},
+	"âšż": {
+	math: "\\amalg"
+},
+	"⩀": {
+	math: "\\capdot"
+},
+	"⩁": {
+	math: "\\uminus"
+},
+	"⩂": {
+	math: "\\barcup"
+},
+	"⩃": {
+	math: "\\barcap"
+},
+	"⩄": {
+	math: "\\capwedge"
+},
+	"⩅": {
+	math: "\\cupvee"
+},
+	"⩆": {
+	math: "\\cupovercap"
+},
+	"⩇": {
+	math: "\\capovercup"
+},
+	"⩈": {
+	math: "\\cupbarcap"
+},
+	"⩉": {
+	math: "\\capbarcup"
+},
+	"⩊": {
+	math: "\\twocups"
+},
+	"⩋": {
+	math: "\\twocaps"
+},
+	"⩌": {
+	math: "\\closedvarcup"
+},
+	"⩍": {
+	math: "\\closedvarcap"
+},
+	"⩎": {
+	math: "\\Sqcap"
+},
+	"⩏": {
+	math: "\\Sqcup"
+},
+	"⩐": {
+	math: "\\closedvarcupsmashprod"
+},
+	"⩑": {
+	math: "\\wedgeodot"
+},
+	"⩒": {
+	math: "\\veeodot"
+},
+	"⩓": {
+	math: "\\ElzAnd"
+},
+	"⩔": {
+	math: "\\ElzOr"
+},
+	"⩖": {
+	math: "\\ElOr"
+},
+	"⩗": {
+	math: "\\bigslopedvee"
+},
+	"⩘": {
+	math: "\\bigslopedwedge"
+},
+	"⩙": {
+	math: "\\veeonwedge"
+},
+	"⩚": {
+	math: "\\wedgemidvert"
+},
+	"⩛": {
+	math: "\\veemidvert"
+},
+	"⩜": {
+	math: "\\midbarwedge"
+},
+	"⩝": {
+	math: "\\midbarvee"
+},
+	"⩞": {
+	math: "\\perspcorrespond"
+},
+	"⩟": {
+	math: "\\Elzminhat"
+},
+	"â© ": {
+	math: "\\wedgedoublebar"
+},
+	"â©Ą": {
+	math: "\\varveebar"
+},
+	"â©ą": {
+	math: "\\doublebarvee"
+},
+	"â©€": {
+	math: "\\dsub"
+},
+	"â©„": {
+	math: "\\rsub"
+},
+	"â©Š": {
+	math: "\\eqdot"
+},
+	"⩧": {
+	math: "\\dotequiv"
+},
+	"â©š": {
+	math: "\\equivVert"
+},
+	"â©©": {
+	math: "\\equivVvert"
+},
+	"â©Ș": {
+	math: "\\dotsim"
+},
+	"â©«": {
+	math: "\\simrdots"
+},
+	"â©Ź": {
+	math: "\\simminussim"
+},
+	"â©­": {
+	math: "\\congdot"
+},
+	"â©ź": {
+	math: "\\stackrel{*}{=}"
+},
+	"â©Ż": {
+	math: "\\hatapprox"
+},
+	"â©°": {
+	math: "\\approxeqq"
+},
+	"⩱": {
+	math: "\\eqqplus"
+},
+	"â©Č": {
+	math: "\\pluseqq"
+},
+	"â©ł": {
+	math: "\\eqqsim"
+},
+	"â©Ž": {
+	math: "\\Coloneqq"
+},
+	"â©”": {
+	math: "\\Equal"
+},
+	"⩶": {
+	math: "\\Same"
+},
+	"â©·": {
+	math: "\\ddotseq"
+},
+	"â©ž": {
+	math: "\\equivDD"
+},
+	"â©č": {
+	math: "\\ltcir"
+},
+	"â©ș": {
+	math: "\\gtcir"
+},
+	"â©»": {
+	math: "\\ltquest"
+},
+	"⩌": {
+	math: "\\gtquest"
+},
+	"⩜": {
+	math: "\\leqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"⩜̞": {
+	math: "\\nleqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"â©Ÿ": {
+	math: "\\geqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"â©ŸÌž": {
+	math: "\\ngeqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"â©ż": {
+	math: "\\lesdot"
+},
+	"âȘ€": {
+	math: "\\gesdot"
+},
+	"âȘ": {
+	math: "\\lesdoto"
+},
+	"âȘ‚": {
+	math: "\\gesdoto"
+},
+	"âȘƒ": {
+	math: "\\lesdotor"
+},
+	"âȘ„": {
+	math: "\\gesdotol"
+},
+	"âȘ…": {
+	math: "\\lessapprox"
+},
+	"âȘ†": {
+	math: "\\gtrapprox"
+},
+	"âȘ‡": {
+	math: "\\lneq"
+},
+	"âȘˆ": {
+	math: "\\gneq"
+},
+	"âȘ‰": {
+	math: "\\lnapprox"
+},
+	"âȘŠ": {
+	math: "\\gnapprox"
+},
+	"âȘ‹": {
+	math: "\\lesseqqgtr"
+},
+	"âȘŒ": {
+	math: "\\gtreqqless"
+},
+	"âȘ": {
+	math: "\\lsime"
+},
+	"âȘŽ": {
+	math: "\\gsime"
+},
+	"âȘ": {
+	math: "\\lsimg"
+},
+	"âȘ": {
+	math: "\\gsiml"
+},
+	"âȘ‘": {
+	math: "\\lgE"
+},
+	"âȘ’": {
+	math: "\\glE"
+},
+	"âȘ“": {
+	math: "\\lesges"
+},
+	"âȘ”": {
+	math: "\\gesles"
+},
+	"âȘ•": {
+	math: "\\eqslantless"
+},
+	"âȘ–": {
+	math: "\\eqslantgtr"
+},
+	"âȘ—": {
+	math: "\\elsdot"
+},
+	"âȘ˜": {
+	math: "\\egsdot"
+},
+	"âȘ™": {
+	math: "\\eqqless"
+},
+	"âȘš": {
+	math: "\\eqqgtr"
+},
+	"âȘ›": {
+	math: "\\eqqslantless"
+},
+	"âȘœ": {
+	math: "\\eqqslantgtr"
+},
+	"âȘ": {
+	math: "\\Pisymbol{ppi020}{117}"
+},
+	"âȘž": {
+	math: "\\Pisymbol{ppi020}{105}"
+},
+	"âȘŸ": {
+	math: "\\simlE"
+},
+	"âȘ ": {
+	math: "\\simgE"
+},
+	"âȘĄ": {
+	math: "\\NestedLessLess"
+},
+	"âȘĄÌž": {
+	math: "\\NotNestedLessLess"
+},
+	"âȘą": {
+	math: "\\NestedGreaterGreater"
+},
+	"âȘąÌž": {
+	math: "\\NotNestedGreaterGreater"
+},
+	"âȘŁ": {
+	math: "\\partialmeetcontraction"
+},
+	"âȘ€": {
+	math: "\\glj"
+},
+	"âȘ„": {
+	math: "\\gla"
+},
+	"âȘŠ": {
+	math: "\\leftslice"
+},
+	"âȘ§": {
+	math: "\\rightslice"
+},
+	"âȘš": {
+	math: "\\lescc"
+},
+	"âȘ©": {
+	math: "\\gescc"
+},
+	"âȘȘ": {
+	math: "\\smt"
+},
+	"âȘ«": {
+	math: "\\lat"
+},
+	"âȘŹ": {
+	math: "\\smte"
+},
+	"âȘ­": {
+	math: "\\late"
+},
+	"âȘź": {
+	math: "\\bumpeqq"
+},
+	"âȘŻ": {
+	math: "\\preceq"
+},
+	"âȘŻÌž": {
+	math: "\\not\\preceq"
+},
+	"âȘ°": {
+	math: "\\succeq"
+},
+	"âȘ°Ìž": {
+	math: "\\not\\succeq"
+},
+	"âȘ±": {
+	math: "\\precneq"
+},
+	"âȘČ": {
+	math: "\\succneq"
+},
+	"âȘł": {
+	math: "\\preceqq"
+},
+	"âȘŽ": {
+	math: "\\succeqq"
+},
+	"âȘ”": {
+	math: "\\precneqq"
+},
+	"âȘ¶": {
+	math: "\\succneqq"
+},
+	"âȘ·": {
+	math: "\\precapprox"
+},
+	"âȘž": {
+	math: "\\succapprox"
+},
+	"âȘč": {
+	math: "\\precnapprox"
+},
+	"âȘș": {
+	math: "\\succnapprox"
+},
+	"âȘ»": {
+	math: "\\llcurly"
+},
+	"âȘŒ": {
+	math: "\\ggcurly"
+},
+	"âȘœ": {
+	math: "\\subsetdot"
+},
+	"âȘŸ": {
+	math: "\\supsetdot"
+},
+	"âȘż": {
+	math: "\\subsetplus"
+},
+	"⫀": {
+	math: "\\supsetplus"
+},
+	"⫁": {
+	math: "\\submult"
+},
+	"⫂": {
+	math: "\\supmult"
+},
+	"⫃": {
+	math: "\\subedot"
+},
+	"⫄": {
+	math: "\\supedot"
+},
+	"⫅": {
+	math: "\\subseteqq"
+},
+	"â«…Ìž": {
+	math: "\\nsubseteqq"
+},
+	"⫆": {
+	math: "\\supseteqq"
+},
+	"⫆̞": {
+	math: "\\nsupseteqq"
+},
+	"⫇": {
+	math: "\\subsim"
+},
+	"⫈": {
+	math: "\\supsim"
+},
+	"⫉": {
+	math: "\\subsetapprox"
+},
+	"⫊": {
+	math: "\\supsetapprox"
+},
+	"⫋": {
+	math: "\\subsetneqq"
+},
+	"⫌": {
+	math: "\\supsetneqq"
+},
+	"⫍": {
+	math: "\\lsqhook"
+},
+	"⫎": {
+	math: "\\rsqhook"
+},
+	"⫏": {
+	math: "\\csub"
+},
+	"⫐": {
+	math: "\\csup"
+},
+	"⫑": {
+	math: "\\csube"
+},
+	"⫒": {
+	math: "\\csupe"
+},
+	"⫓": {
+	math: "\\subsup"
+},
+	"⫔": {
+	math: "\\supsub"
+},
+	"⫕": {
+	math: "\\subsub"
+},
+	"⫖": {
+	math: "\\supsup"
+},
+	"⫗": {
+	math: "\\suphsub"
+},
+	"⫘": {
+	math: "\\supdsub"
+},
+	"⫙": {
+	math: "\\forkv"
+},
+	"⫚": {
+	math: "\\topfork"
+},
+	"⫛": {
+	math: "\\mlcp"
+},
+	"⫝̸": {
+	math: "\\forks"
+},
+	"⫝": {
+	math: "\\forksnot"
+},
+	"⫝̞": {
+	math: "\\forks"
+},
+	"⫞": {
+	math: "\\shortlefttack"
+},
+	"⫟": {
+	math: "\\shortdowntack"
+},
+	"â« ": {
+	math: "\\shortuptack"
+},
+	"â«Ą": {
+	math: "\\perps"
+},
+	"â«ą": {
+	math: "\\vDdash"
+},
+	"â«Ł": {
+	math: "\\dashV"
+},
+	"â«€": {
+	math: "\\Dashv"
+},
+	"â«„": {
+	math: "\\DashV"
+},
+	"â«Š": {
+	math: "\\varVdash"
+},
+	"⫧": {
+	math: "\\Barv"
+},
+	"â«š": {
+	math: "\\vBar"
+},
+	"â«©": {
+	math: "\\vBarv"
+},
+	"â«Ș": {
+	math: "\\Top"
+},
+	"â«Ź": {
+	math: "\\Not"
+},
+	"â«­": {
+	math: "\\bNot"
+},
+	"â«ź": {
+	math: "\\revnmid"
+},
+	"â«Ż": {
+	math: "\\cirmid"
+},
+	"â«°": {
+	math: "\\midcir"
+},
+	"⫱": {
+	math: "\\topcir"
+},
+	"â«Č": {
+	math: "\\nhpar"
+},
+	"â«ł": {
+	math: "\\parsim"
+},
+	"â«Ž": {
+	math: "\\interleave"
+},
+	"â«”": {
+	math: "\\nhVvert"
+},
+	"⫶": {
+	math: "\\Elztdcol"
+},
+	"â«·": {
+	math: "\\lllnest"
+},
+	"â«ž": {
+	math: "\\gggnest"
+},
+	"â«č": {
+	math: "\\leqqslant"
+},
+	"â«ș": {
+	math: "\\geqqslant"
+},
+	"â«»": {
+	math: "\\trslash"
+},
+	"⫌": {
+	math: "\\biginterleave"
+},
+	"⫝̸": {
+	math: "{{/}\\!\\!{/}}"
+},
+	"⫝̸⃄": {
+	math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}"
+},
+	"â«Ÿ": {
+	math: "\\talloblong"
+},
+	"â«ż": {
+	math: "\\bigtalloblong"
+},
+	"⬒": {
+	math: "\\squaretopblack"
+},
+	"⬓": {
+	math: "\\squarebotblack"
+},
+	"⬔": {
+	math: "\\squareurblack"
+},
+	"⬕": {
+	math: "\\squarellblack"
+},
+	"⬖": {
+	math: "\\diamondleftblack"
+},
+	"⬗": {
+	math: "\\diamondrightblack"
+},
+	"⏘": {
+	math: "\\diamondtopblack"
+},
+	"⬙": {
+	math: "\\diamondbotblack"
+},
+	"⬚": {
+	math: "\\dottedsquare"
+},
+	"⬛": {
+	math: "\\blacksquare"
+},
+	"⬜": {
+	math: "\\square"
+},
+	"⬝": {
+	math: "\\vysmblksquare"
+},
+	"⬞": {
+	math: "\\vysmwhtsquare"
+},
+	"⬟": {
+	math: "\\pentagonblack"
+},
+	"⏠": {
+	math: "\\pentagon"
+},
+	"⏥": {
+	math: "\\varhexagon"
+},
+	"⏹": {
+	math: "\\varhexagonblack"
+},
+	"⏣": {
+	math: "\\hexagonblack"
+},
+	"⏀": {
+	math: "\\lgblkcircle"
+},
+	"⏄": {
+	math: "\\mdblkdiamond"
+},
+	"⏊": {
+	math: "\\mdwhtdiamond"
+},
+	"⏧": {
+	math: "\\mdblklozenge"
+},
+	"⏚": {
+	math: "\\mdwhtlozenge"
+},
+	"⏩": {
+	math: "\\smblkdiamond"
+},
+	"âŹȘ": {
+	math: "\\smblklozenge"
+},
+	"⏫": {
+	math: "\\smwhtlozenge"
+},
+	"⏏": {
+	math: "\\blkhorzoval"
+},
+	"⏭": {
+	math: "\\whthorzoval"
+},
+	"⏟": {
+	math: "\\blkvertoval"
+},
+	"⏯": {
+	math: "\\whtvertoval"
+},
+	"⏰": {
+	math: "\\circleonleftarrow"
+},
+	"⏱": {
+	math: "\\leftthreearrows"
+},
+	"âŹČ": {
+	math: "\\leftarrowonoplus"
+},
+	"⏳": {
+	math: "\\longleftsquigarrow"
+},
+	"⏎": {
+	math: "\\nvtwoheadleftarrow"
+},
+	"⏔": {
+	math: "\\nVtwoheadleftarrow"
+},
+	"⏶": {
+	math: "\\twoheadmapsfrom"
+},
+	"⏷": {
+	math: "\\twoheadleftdbkarrow"
+},
+	"⏞": {
+	math: "\\leftdotarrow"
+},
+	"âŹč": {
+	math: "\\nvleftarrowtail"
+},
+	"âŹș": {
+	math: "\\nVleftarrowtail"
+},
+	"⏻": {
+	math: "\\twoheadleftarrowtail"
+},
+	"âŹŒ": {
+	math: "\\nvtwoheadleftarrowtail"
+},
+	"âŹœ": {
+	math: "\\nVtwoheadleftarrowtail"
+},
+	"âŹŸ": {
+	math: "\\leftarrowx"
+},
+	"⏿": {
+	math: "\\leftcurvedarrow"
+},
+	"⭀": {
+	math: "\\equalleftarrow"
+},
+	"⭁": {
+	math: "\\bsimilarleftarrow"
+},
+	"⭂": {
+	math: "\\leftarrowbackapprox"
+},
+	"⭃": {
+	math: "\\rightarrowgtr"
+},
+	"⭄": {
+	math: "\\rightarrowsupset"
+},
+	"⭅": {
+	math: "\\LLeftarrow"
+},
+	"⭆": {
+	math: "\\RRightarrow"
+},
+	"⭇": {
+	math: "\\bsimilarrightarrow"
+},
+	"⭈": {
+	math: "\\rightarrowbackapprox"
+},
+	"⭉": {
+	math: "\\similarleftarrow"
+},
+	"⭊": {
+	math: "\\leftarrowapprox"
+},
+	"⭋": {
+	math: "\\leftarrowbsimilar"
+},
+	"⭌": {
+	math: "\\rightarrowbsimilar"
+},
+	"⭐": {
+	math: "\\medwhitestar"
+},
+	"⭑": {
+	math: "\\medblackstar"
+},
+	"⭒": {
+	math: "\\smwhitestar"
+},
+	"⭓": {
+	math: "\\rightpentagonblack"
+},
+	"⭔": {
+	math: "\\rightpentagon"
+},
+	"〈": {
+	math: "\\langle"
+},
+	"〉": {
+	math: "\\rangle"
+},
+	"〒": {
+	math: "\\postalmark"
+},
+	"〔": {
+	math: "\\lbrbrak"
+},
+	"〕": {
+	math: "\\rbrbrak"
+},
+	"〚": {
+	math: "\\openbracketleft"
+},
+	"〛": {
+	math: "\\openbracketright"
+},
+	"〰": {
+	math: "\\hzigzag"
+},
+	"ïŹ€": {
+	text: "ff"
+},
+	"ïŹ": {
+	text: "fi"
+},
+	"ïŹ‚": {
+	text: "fl"
+},
+	"ïŹƒ": {
+	text: "ffi"
+},
+	"ïŹ„": {
+	text: "ffl"
+},
+	"ïŹ…": {
+	text: "st"
+},
+	"ïŹ†": {
+	text: "st"
+},
+	"ïżœ": {
+	text: "\\dbend",
+	commandspacer: true
+},
+	"𝐀": {
+	math: "\\mathbf{A}"
+},
+	"𝐁": {
+	math: "\\mathbf{B}"
+},
+	"𝐂": {
+	math: "\\mathbf{C}"
+},
+	"𝐃": {
+	math: "\\mathbf{D}"
+},
+	"𝐄": {
+	math: "\\mathbf{E}"
+},
+	"𝐅": {
+	math: "\\mathbf{F}"
+},
+	"𝐆": {
+	math: "\\mathbf{G}"
+},
+	"𝐇": {
+	math: "\\mathbf{H}"
+},
+	"𝐈": {
+	math: "\\mathbf{I}"
+},
+	"𝐉": {
+	math: "\\mathbf{J}"
+},
+	"𝐊": {
+	math: "\\mathbf{K}"
+},
+	"𝐋": {
+	math: "\\mathbf{L}"
+},
+	"𝐌": {
+	math: "\\mathbf{M}"
+},
+	"𝐍": {
+	math: "\\mathbf{N}"
+},
+	"𝐎": {
+	math: "\\mathbf{O}"
+},
+	"𝐏": {
+	math: "\\mathbf{P}"
+},
+	"𝐐": {
+	math: "\\mathbf{Q}"
+},
+	"𝐑": {
+	math: "\\mathbf{R}"
+},
+	"𝐒": {
+	math: "\\mathbf{S}"
+},
+	"𝐓": {
+	math: "\\mathbf{T}"
+},
+	"𝐔": {
+	math: "\\mathbf{U}"
+},
+	"𝐕": {
+	math: "\\mathbf{V}"
+},
+	"𝐖": {
+	math: "\\mathbf{W}"
+},
+	"𝐗": {
+	math: "\\mathbf{X}"
+},
+	"𝐘": {
+	math: "\\mathbf{Y}"
+},
+	"𝐙": {
+	math: "\\mathbf{Z}"
+},
+	"𝐚": {
+	math: "\\mathbf{a}"
+},
+	"𝐛": {
+	math: "\\mathbf{b}"
+},
+	"𝐜": {
+	math: "\\mathbf{c}"
+},
+	"𝐝": {
+	math: "\\mathbf{d}"
+},
+	"𝐞": {
+	math: "\\mathbf{e}"
+},
+	"𝐟": {
+	math: "\\mathbf{f}"
+},
+	"𝐠": {
+	math: "\\mathbf{g}"
+},
+	"𝐡": {
+	math: "\\mathbf{h}"
+},
+	"𝐱": {
+	math: "\\mathbf{i}"
+},
+	"𝐣": {
+	math: "\\mathbf{j}"
+},
+	"đ€": {
+	math: "\\mathbf{k}"
+},
+	"đ„": {
+	math: "\\mathbf{l}"
+},
+	"𝐩": {
+	math: "\\mathbf{m}"
+},
+	"𝐧": {
+	math: "\\mathbf{n}"
+},
+	"𝐹": {
+	math: "\\mathbf{o}"
+},
+	"đ©": {
+	math: "\\mathbf{p}"
+},
+	"đȘ": {
+	math: "\\mathbf{q}"
+},
+	"đ«": {
+	math: "\\mathbf{r}"
+},
+	"𝐬": {
+	math: "\\mathbf{s}"
+},
+	"𝐭": {
+	math: "\\mathbf{t}"
+},
+	"𝐼": {
+	math: "\\mathbf{u}"
+},
+	"𝐯": {
+	math: "\\mathbf{v}"
+},
+	"𝐰": {
+	math: "\\mathbf{w}"
+},
+	"đ±": {
+	math: "\\mathbf{x}"
+},
+	"đČ": {
+	math: "\\mathbf{y}"
+},
+	"𝐳": {
+	math: "\\mathbf{z}"
+},
+	"𝐮": {
+	math: "\\mathsl{A}"
+},
+	"đ”": {
+	math: "\\mathsl{B}"
+},
+	"đ¶": {
+	math: "\\mathsl{C}"
+},
+	"đ·": {
+	math: "\\mathsl{D}"
+},
+	"𝐾": {
+	math: "\\mathsl{E}"
+},
+	"đč": {
+	math: "\\mathsl{F}"
+},
+	"đș": {
+	math: "\\mathsl{G}"
+},
+	"đ»": {
+	math: "\\mathsl{H}"
+},
+	"đŒ": {
+	math: "\\mathsl{I}"
+},
+	"đœ": {
+	math: "\\mathsl{J}"
+},
+	"đŸ": {
+	math: "\\mathsl{K}"
+},
+	"𝐿": {
+	math: "\\mathsl{L}"
+},
+	"𝑀": {
+	math: "\\mathsl{M}"
+},
+	"𝑁": {
+	math: "\\mathsl{N}"
+},
+	"𝑂": {
+	math: "\\mathsl{O}"
+},
+	"𝑃": {
+	math: "\\mathsl{P}"
+},
+	"𝑄": {
+	math: "\\mathsl{Q}"
+},
+	"𝑅": {
+	math: "\\mathsl{R}"
+},
+	"𝑆": {
+	math: "\\mathsl{S}"
+},
+	"𝑇": {
+	math: "\\mathsl{T}"
+},
+	"𝑈": {
+	math: "\\mathsl{U}"
+},
+	"𝑉": {
+	math: "\\mathsl{V}"
+},
+	"𝑊": {
+	math: "\\mathsl{W}"
+},
+	"𝑋": {
+	math: "\\mathsl{X}"
+},
+	"𝑌": {
+	math: "\\mathsl{Y}"
+},
+	"𝑍": {
+	math: "\\mathsl{Z}"
+},
+	"𝑎": {
+	math: "\\mathsl{a}"
+},
+	"𝑏": {
+	math: "\\mathsl{b}"
+},
+	"𝑐": {
+	math: "\\mathsl{c}"
+},
+	"𝑑": {
+	math: "\\mathsl{d}"
+},
+	"𝑒": {
+	math: "\\mathsl{e}"
+},
+	"𝑓": {
+	math: "\\mathsl{f}"
+},
+	"𝑔": {
+	math: "\\mathsl{g}"
+},
+	"𝑖": {
+	math: "\\mathsl{i}"
+},
+	"𝑗": {
+	math: "\\mathsl{j}"
+},
+	"𝑘": {
+	math: "\\mathsl{k}"
+},
+	"𝑙": {
+	math: "\\mathsl{l}"
+},
+	"𝑚": {
+	math: "\\mathsl{m}"
+},
+	"𝑛": {
+	math: "\\mathsl{n}"
+},
+	"𝑜": {
+	math: "\\mathsl{o}"
+},
+	"𝑝": {
+	math: "\\mathsl{p}"
+},
+	"𝑞": {
+	math: "\\mathsl{q}"
+},
+	"𝑟": {
+	math: "\\mathsl{r}"
+},
+	"𝑠": {
+	math: "\\mathsl{s}"
+},
+	"𝑡": {
+	math: "\\mathsl{t}"
+},
+	"𝑱": {
+	math: "\\mathsl{u}"
+},
+	"𝑣": {
+	math: "\\mathsl{v}"
+},
+	"đ‘€": {
+	math: "\\mathsl{w}"
+},
+	"đ‘„": {
+	math: "\\mathsl{x}"
+},
+	"𝑩": {
+	math: "\\mathsl{y}"
+},
+	"𝑧": {
+	math: "\\mathsl{z}"
+},
+	"𝑹": {
+	math: "\\mathbit{A}"
+},
+	"đ‘©": {
+	math: "\\mathbit{B}"
+},
+	"đ‘Ș": {
+	math: "\\mathbit{C}"
+},
+	"đ‘«": {
+	math: "\\mathbit{D}"
+},
+	"𝑬": {
+	math: "\\mathbit{E}"
+},
+	"𝑭": {
+	math: "\\mathbit{F}"
+},
+	"𝑼": {
+	math: "\\mathbit{G}"
+},
+	"𝑯": {
+	math: "\\mathbit{H}"
+},
+	"𝑰": {
+	math: "\\mathbit{I}"
+},
+	"đ‘±": {
+	math: "\\mathbit{J}"
+},
+	"đ‘Č": {
+	math: "\\mathbit{K}"
+},
+	"𝑳": {
+	math: "\\mathbit{L}"
+},
+	"𝑮": {
+	math: "\\mathbit{M}"
+},
+	"đ‘”": {
+	math: "\\mathbit{N}"
+},
+	"đ‘¶": {
+	math: "\\mathbit{O}"
+},
+	"đ‘·": {
+	math: "\\mathbit{P}"
+},
+	"𝑾": {
+	math: "\\mathbit{Q}"
+},
+	"đ‘č": {
+	math: "\\mathbit{R}"
+},
+	"đ‘ș": {
+	math: "\\mathbit{S}"
+},
+	"đ‘»": {
+	math: "\\mathbit{T}"
+},
+	"đ‘Œ": {
+	math: "\\mathbit{U}"
+},
+	"đ‘œ": {
+	math: "\\mathbit{V}"
+},
+	"đ‘Ÿ": {
+	math: "\\mathbit{W}"
+},
+	"𝑿": {
+	math: "\\mathbit{X}"
+},
+	"𝒀": {
+	math: "\\mathbit{Y}"
+},
+	"𝒁": {
+	math: "\\mathbit{Z}"
+},
+	"𝒂": {
+	math: "\\mathbit{a}"
+},
+	"𝒃": {
+	math: "\\mathbit{b}"
+},
+	"𝒄": {
+	math: "\\mathbit{c}"
+},
+	"𝒅": {
+	math: "\\mathbit{d}"
+},
+	"𝒆": {
+	math: "\\mathbit{e}"
+},
+	"𝒇": {
+	math: "\\mathbit{f}"
+},
+	"𝒈": {
+	math: "\\mathbit{g}"
+},
+	"𝒉": {
+	math: "\\mathbit{h}"
+},
+	"𝒊": {
+	math: "\\mathbit{i}"
+},
+	"𝒋": {
+	math: "\\mathbit{j}"
+},
+	"𝒌": {
+	math: "\\mathbit{k}"
+},
+	"𝒍": {
+	math: "\\mathbit{l}"
+},
+	"𝒎": {
+	math: "\\mathbit{m}"
+},
+	"𝒏": {
+	math: "\\mathbit{n}"
+},
+	"𝒐": {
+	math: "\\mathbit{o}"
+},
+	"𝒑": {
+	math: "\\mathbit{p}"
+},
+	"𝒒": {
+	math: "\\mathbit{q}"
+},
+	"𝒓": {
+	math: "\\mathbit{r}"
+},
+	"𝒔": {
+	math: "\\mathbit{s}"
+},
+	"𝒕": {
+	math: "\\mathbit{t}"
+},
+	"𝒖": {
+	math: "\\mathbit{u}"
+},
+	"𝒗": {
+	math: "\\mathbit{v}"
+},
+	"𝒘": {
+	math: "\\mathbit{w}"
+},
+	"𝒙": {
+	math: "\\mathbit{x}"
+},
+	"𝒚": {
+	math: "\\mathbit{y}"
+},
+	"𝒛": {
+	math: "\\mathbit{z}"
+},
+	"𝒜": {
+	math: "\\mathscr{A}"
+},
+	"𝒞": {
+	math: "\\mathscr{C}"
+},
+	"𝒟": {
+	math: "\\mathscr{D}"
+},
+	"𝒱": {
+	math: "\\mathscr{G}"
+},
+	"đ’„": {
+	math: "\\mathscr{J}"
+},
+	"𝒩": {
+	math: "\\mathscr{K}"
+},
+	"đ’©": {
+	math: "\\mathscr{N}"
+},
+	"đ’Ș": {
+	math: "\\mathscr{O}"
+},
+	"đ’«": {
+	math: "\\mathscr{P}"
+},
+	"𝒬": {
+	math: "\\mathscr{Q}"
+},
+	"𝒼": {
+	math: "\\mathscr{S}"
+},
+	"𝒯": {
+	math: "\\mathscr{T}"
+},
+	"𝒰": {
+	math: "\\mathscr{U}"
+},
+	"đ’±": {
+	math: "\\mathscr{V}"
+},
+	"đ’Č": {
+	math: "\\mathscr{W}"
+},
+	"𝒳": {
+	math: "\\mathscr{X}"
+},
+	"𝒮": {
+	math: "\\mathscr{Y}"
+},
+	"đ’”": {
+	math: "\\mathscr{Z}"
+},
+	"đ’¶": {
+	math: "\\mathscr{a}"
+},
+	"đ’·": {
+	math: "\\mathscr{b}"
+},
+	"𝒾": {
+	math: "\\mathscr{c}"
+},
+	"đ’č": {
+	math: "\\mathscr{d}"
+},
+	"đ’»": {
+	math: "\\mathscr{f}"
+},
+	"đ’œ": {
+	math: "\\mathscr{h}"
+},
+	"đ’Ÿ": {
+	math: "\\mathscr{i}"
+},
+	"𝒿": {
+	math: "\\mathscr{j}"
+},
+	"𝓀": {
+	math: "\\mathscr{k}"
+},
+	"𝓁": {
+	math: "\\mathscr{l}"
+},
+	"𝓂": {
+	math: "\\mathscr{m}"
+},
+	"𝓃": {
+	math: "\\mathscr{n}"
+},
+	"𝓅": {
+	math: "\\mathscr{p}"
+},
+	"𝓆": {
+	math: "\\mathscr{q}"
+},
+	"𝓇": {
+	math: "\\mathscr{r}"
+},
+	"𝓈": {
+	math: "\\mathscr{s}"
+},
+	"𝓉": {
+	math: "\\mathscr{t}"
+},
+	"𝓊": {
+	math: "\\mathscr{u}"
+},
+	"𝓋": {
+	math: "\\mathscr{v}"
+},
+	"𝓌": {
+	math: "\\mathscr{w}"
+},
+	"𝓍": {
+	math: "\\mathscr{x}"
+},
+	"𝓎": {
+	math: "\\mathscr{y}"
+},
+	"𝓏": {
+	math: "\\mathscr{z}"
+},
+	"𝓐": {
+	math: "\\mathmit{A}"
+},
+	"𝓑": {
+	math: "\\mathmit{B}"
+},
+	"𝓒": {
+	math: "\\mathmit{C}"
+},
+	"𝓓": {
+	math: "\\mathmit{D}"
+},
+	"𝓔": {
+	math: "\\mathmit{E}"
+},
+	"𝓕": {
+	math: "\\mathmit{F}"
+},
+	"𝓖": {
+	math: "\\mathmit{G}"
+},
+	"𝓗": {
+	math: "\\mathmit{H}"
+},
+	"𝓘": {
+	math: "\\mathmit{I}"
+},
+	"𝓙": {
+	math: "\\mathmit{J}"
+},
+	"𝓚": {
+	math: "\\mathmit{K}"
+},
+	"𝓛": {
+	math: "\\mathmit{L}"
+},
+	"𝓜": {
+	math: "\\mathmit{M}"
+},
+	"𝓝": {
+	math: "\\mathmit{N}"
+},
+	"𝓞": {
+	math: "\\mathmit{O}"
+},
+	"𝓟": {
+	math: "\\mathmit{P}"
+},
+	"𝓠": {
+	math: "\\mathmit{Q}"
+},
+	"𝓡": {
+	math: "\\mathmit{R}"
+},
+	"𝓱": {
+	math: "\\mathmit{S}"
+},
+	"𝓣": {
+	math: "\\mathmit{T}"
+},
+	"đ“€": {
+	math: "\\mathmit{U}"
+},
+	"đ“„": {
+	math: "\\mathmit{V}"
+},
+	"𝓩": {
+	math: "\\mathmit{W}"
+},
+	"𝓧": {
+	math: "\\mathmit{X}"
+},
+	"𝓹": {
+	math: "\\mathmit{Y}"
+},
+	"đ“©": {
+	math: "\\mathmit{Z}"
+},
+	"đ“Ș": {
+	math: "\\mathmit{a}"
+},
+	"đ“«": {
+	math: "\\mathmit{b}"
+},
+	"𝓬": {
+	math: "\\mathmit{c}"
+},
+	"𝓭": {
+	math: "\\mathmit{d}"
+},
+	"𝓼": {
+	math: "\\mathmit{e}"
+},
+	"𝓯": {
+	math: "\\mathmit{f}"
+},
+	"𝓰": {
+	math: "\\mathmit{g}"
+},
+	"đ“±": {
+	math: "\\mathmit{h}"
+},
+	"đ“Č": {
+	math: "\\mathmit{i}"
+},
+	"𝓳": {
+	math: "\\mathmit{j}"
+},
+	"𝓮": {
+	math: "\\mathmit{k}"
+},
+	"đ“”": {
+	math: "\\mathmit{l}"
+},
+	"đ“¶": {
+	math: "\\mathmit{m}"
+},
+	"đ“·": {
+	math: "\\mathmit{n}"
+},
+	"𝓾": {
+	math: "\\mathmit{o}"
+},
+	"đ“č": {
+	math: "\\mathmit{p}"
+},
+	"đ“ș": {
+	math: "\\mathmit{q}"
+},
+	"đ“»": {
+	math: "\\mathmit{r}"
+},
+	"đ“Œ": {
+	math: "\\mathmit{s}"
+},
+	"đ“œ": {
+	math: "\\mathmit{t}"
+},
+	"đ“Ÿ": {
+	math: "\\mathmit{u}"
+},
+	"𝓿": {
+	math: "\\mathmit{v}"
+},
+	"𝔀": {
+	math: "\\mathmit{w}"
+},
+	"𝔁": {
+	math: "\\mathmit{x}"
+},
+	"𝔂": {
+	math: "\\mathmit{y}"
+},
+	"𝔃": {
+	math: "\\mathmit{z}"
+},
+	"𝔄": {
+	math: "\\mathfrak{A}"
+},
+	"𝔅": {
+	math: "\\mathfrak{B}"
+},
+	"𝔇": {
+	math: "\\mathfrak{D}"
+},
+	"𝔈": {
+	math: "\\mathfrak{E}"
+},
+	"𝔉": {
+	math: "\\mathfrak{F}"
+},
+	"𝔊": {
+	math: "\\mathfrak{G}"
+},
+	"𝔍": {
+	math: "\\mathfrak{J}"
+},
+	"𝔎": {
+	math: "\\mathfrak{K}"
+},
+	"𝔏": {
+	math: "\\mathfrak{L}"
+},
+	"𝔐": {
+	math: "\\mathfrak{M}"
+},
+	"𝔑": {
+	math: "\\mathfrak{N}"
+},
+	"𝔒": {
+	math: "\\mathfrak{O}"
+},
+	"𝔓": {
+	math: "\\mathfrak{P}"
+},
+	"𝔔": {
+	math: "\\mathfrak{Q}"
+},
+	"𝔖": {
+	math: "\\mathfrak{S}"
+},
+	"𝔗": {
+	math: "\\mathfrak{T}"
+},
+	"𝔘": {
+	math: "\\mathfrak{U}"
+},
+	"𝔙": {
+	math: "\\mathfrak{V}"
+},
+	"𝔚": {
+	math: "\\mathfrak{W}"
+},
+	"𝔛": {
+	math: "\\mathfrak{X}"
+},
+	"𝔜": {
+	math: "\\mathfrak{Y}"
+},
+	"𝔞": {
+	math: "\\mathfrak{a}"
+},
+	"𝔟": {
+	math: "\\mathfrak{b}"
+},
+	"𝔠": {
+	math: "\\mathfrak{c}"
+},
+	"𝔡": {
+	math: "\\mathfrak{d}"
+},
+	"𝔱": {
+	math: "\\mathfrak{e}"
+},
+	"𝔣": {
+	math: "\\mathfrak{f}"
+},
+	"đ”€": {
+	math: "\\mathfrak{g}"
+},
+	"đ”„": {
+	math: "\\mathfrak{h}"
+},
+	"𝔩": {
+	math: "\\mathfrak{i}"
+},
+	"𝔧": {
+	math: "\\mathfrak{j}"
+},
+	"𝔹": {
+	math: "\\mathfrak{k}"
+},
+	"đ”©": {
+	math: "\\mathfrak{l}"
+},
+	"đ”Ș": {
+	math: "\\mathfrak{m}"
+},
+	"đ”«": {
+	math: "\\mathfrak{n}"
+},
+	"𝔬": {
+	math: "\\mathfrak{o}"
+},
+	"𝔭": {
+	math: "\\mathfrak{p}"
+},
+	"𝔼": {
+	math: "\\mathfrak{q}"
+},
+	"𝔯": {
+	math: "\\mathfrak{r}"
+},
+	"𝔰": {
+	math: "\\mathfrak{s}"
+},
+	"đ”±": {
+	math: "\\mathfrak{t}"
+},
+	"đ”Č": {
+	math: "\\mathfrak{u}"
+},
+	"𝔳": {
+	math: "\\mathfrak{v}"
+},
+	"𝔮": {
+	math: "\\mathfrak{w}"
+},
+	"đ””": {
+	math: "\\mathfrak{x}"
+},
+	"đ”¶": {
+	math: "\\mathfrak{y}"
+},
+	"đ”·": {
+	math: "\\mathfrak{z}"
+},
+	"𝔾": {
+	math: "\\mathbb{A}"
+},
+	"đ”č": {
+	math: "\\mathbb{B}"
+},
+	"đ”»": {
+	math: "\\mathbb{D}"
+},
+	"đ”Œ": {
+	math: "\\mathbb{E}"
+},
+	"đ”œ": {
+	math: "\\mathbb{F}"
+},
+	"đ”Ÿ": {
+	math: "\\mathbb{G}"
+},
+	"𝕀": {
+	math: "\\mathbb{I}"
+},
+	"𝕁": {
+	math: "\\mathbb{J}"
+},
+	"𝕂": {
+	math: "\\mathbb{K}"
+},
+	"𝕃": {
+	math: "\\mathbb{L}"
+},
+	"𝕄": {
+	math: "\\mathbb{M}"
+},
+	"𝕆": {
+	math: "\\mathbb{O}"
+},
+	"𝕊": {
+	math: "\\mathbb{S}"
+},
+	"𝕋": {
+	math: "\\mathbb{T}"
+},
+	"𝕌": {
+	math: "\\mathbb{U}"
+},
+	"𝕍": {
+	math: "\\mathbb{V}"
+},
+	"𝕎": {
+	math: "\\mathbb{W}"
+},
+	"𝕏": {
+	math: "\\mathbb{X}"
+},
+	"𝕐": {
+	math: "\\mathbb{Y}"
+},
+	"𝕒": {
+	math: "\\mathbb{a}"
+},
+	"𝕓": {
+	math: "\\mathbb{b}"
+},
+	"𝕔": {
+	math: "\\mathbb{c}"
+},
+	"𝕕": {
+	math: "\\mathbb{d}"
+},
+	"𝕖": {
+	math: "\\mathbb{e}"
+},
+	"𝕗": {
+	math: "\\mathbb{f}"
+},
+	"𝕘": {
+	math: "\\mathbb{g}"
+},
+	"𝕙": {
+	math: "\\mathbb{h}"
+},
+	"𝕚": {
+	math: "\\mathbb{i}"
+},
+	"𝕛": {
+	math: "\\mathbb{j}"
+},
+	"𝕜": {
+	math: "\\mathbb{k}"
+},
+	"𝕝": {
+	math: "\\mathbb{l}"
+},
+	"𝕞": {
+	math: "\\mathbb{m}"
+},
+	"𝕟": {
+	math: "\\mathbb{n}"
+},
+	"𝕠": {
+	math: "\\mathbb{o}"
+},
+	"𝕡": {
+	math: "\\mathbb{p}"
+},
+	"𝕱": {
+	math: "\\mathbb{q}"
+},
+	"𝕣": {
+	math: "\\mathbb{r}"
+},
+	"đ•€": {
+	math: "\\mathbb{s}"
+},
+	"đ•„": {
+	math: "\\mathbb{t}"
+},
+	"𝕩": {
+	math: "\\mathbb{u}"
+},
+	"𝕧": {
+	math: "\\mathbb{v}"
+},
+	"𝕹": {
+	math: "\\mathbb{w}"
+},
+	"đ•©": {
+	math: "\\mathbb{x}"
+},
+	"đ•Ș": {
+	math: "\\mathbb{y}"
+},
+	"đ•«": {
+	math: "\\mathbb{z}"
+},
+	"𝕬": {
+	math: "\\mathslbb{A}"
+},
+	"𝕭": {
+	math: "\\mathslbb{B}"
+},
+	"𝕼": {
+	math: "\\mathslbb{C}"
+},
+	"𝕯": {
+	math: "\\mathslbb{D}"
+},
+	"𝕰": {
+	math: "\\mathslbb{E}"
+},
+	"đ•±": {
+	math: "\\mathslbb{F}"
+},
+	"đ•Č": {
+	math: "\\mathslbb{G}"
+},
+	"𝕳": {
+	math: "\\mathslbb{H}"
+},
+	"𝕮": {
+	math: "\\mathslbb{I}"
+},
+	"đ•”": {
+	math: "\\mathslbb{J}"
+},
+	"đ•¶": {
+	math: "\\mathslbb{K}"
+},
+	"đ•·": {
+	math: "\\mathslbb{L}"
+},
+	"𝕾": {
+	math: "\\mathslbb{M}"
+},
+	"đ•č": {
+	math: "\\mathslbb{N}"
+},
+	"đ•ș": {
+	math: "\\mathslbb{O}"
+},
+	"đ•»": {
+	math: "\\mathslbb{P}"
+},
+	"đ•Œ": {
+	math: "\\mathslbb{Q}"
+},
+	"đ•œ": {
+	math: "\\mathslbb{R}"
+},
+	"đ•Ÿ": {
+	math: "\\mathslbb{S}"
+},
+	"𝕿": {
+	math: "\\mathslbb{T}"
+},
+	"𝖀": {
+	math: "\\mathslbb{U}"
+},
+	"𝖁": {
+	math: "\\mathslbb{V}"
+},
+	"𝖂": {
+	math: "\\mathslbb{W}"
+},
+	"𝖃": {
+	math: "\\mathslbb{X}"
+},
+	"𝖄": {
+	math: "\\mathslbb{Y}"
+},
+	"𝖅": {
+	math: "\\mathslbb{Z}"
+},
+	"𝖆": {
+	math: "\\mathslbb{a}"
+},
+	"𝖇": {
+	math: "\\mathslbb{b}"
+},
+	"𝖈": {
+	math: "\\mathslbb{c}"
+},
+	"𝖉": {
+	math: "\\mathslbb{d}"
+},
+	"𝖊": {
+	math: "\\mathslbb{e}"
+},
+	"𝖋": {
+	math: "\\mathslbb{f}"
+},
+	"𝖌": {
+	math: "\\mathslbb{g}"
+},
+	"𝖍": {
+	math: "\\mathslbb{h}"
+},
+	"𝖎": {
+	math: "\\mathslbb{i}"
+},
+	"𝖏": {
+	math: "\\mathslbb{j}"
+},
+	"𝖐": {
+	math: "\\mathslbb{k}"
+},
+	"𝖑": {
+	math: "\\mathslbb{l}"
+},
+	"𝖒": {
+	math: "\\mathslbb{m}"
+},
+	"𝖓": {
+	math: "\\mathslbb{n}"
+},
+	"𝖔": {
+	math: "\\mathslbb{o}"
+},
+	"𝖕": {
+	math: "\\mathslbb{p}"
+},
+	"𝖖": {
+	math: "\\mathslbb{q}"
+},
+	"𝖗": {
+	math: "\\mathslbb{r}"
+},
+	"𝖘": {
+	math: "\\mathslbb{s}"
+},
+	"𝖙": {
+	math: "\\mathslbb{t}"
+},
+	"𝖚": {
+	math: "\\mathslbb{u}"
+},
+	"𝖛": {
+	math: "\\mathslbb{v}"
+},
+	"𝖜": {
+	math: "\\mathslbb{w}"
+},
+	"𝖝": {
+	math: "\\mathslbb{x}"
+},
+	"𝖞": {
+	math: "\\mathslbb{y}"
+},
+	"𝖟": {
+	math: "\\mathslbb{z}"
+},
+	"𝖠": {
+	math: "\\mathsf{A}"
+},
+	"𝖡": {
+	math: "\\mathsf{B}"
+},
+	"𝖱": {
+	math: "\\mathsf{C}"
+},
+	"𝖣": {
+	math: "\\mathsf{D}"
+},
+	"đ–€": {
+	math: "\\mathsf{E}"
+},
+	"đ–„": {
+	math: "\\mathsf{F}"
+},
+	"𝖩": {
+	math: "\\mathsf{G}"
+},
+	"𝖧": {
+	math: "\\mathsf{H}"
+},
+	"𝖹": {
+	math: "\\mathsf{I}"
+},
+	"đ–©": {
+	math: "\\mathsf{J}"
+},
+	"đ–Ș": {
+	math: "\\mathsf{K}"
+},
+	"đ–«": {
+	math: "\\mathsf{L}"
+},
+	"𝖬": {
+	math: "\\mathsf{M}"
+},
+	"𝖭": {
+	math: "\\mathsf{N}"
+},
+	"𝖼": {
+	math: "\\mathsf{O}"
+},
+	"𝖯": {
+	math: "\\mathsf{P}"
+},
+	"𝖰": {
+	math: "\\mathsf{Q}"
+},
+	"đ–±": {
+	math: "\\mathsf{R}"
+},
+	"đ–Č": {
+	math: "\\mathsf{S}"
+},
+	"𝖳": {
+	math: "\\mathsf{T}"
+},
+	"𝖮": {
+	math: "\\mathsf{U}"
+},
+	"đ–”": {
+	math: "\\mathsf{V}"
+},
+	"đ–¶": {
+	math: "\\mathsf{W}"
+},
+	"đ–·": {
+	math: "\\mathsf{X}"
+},
+	"𝖾": {
+	math: "\\mathsf{Y}"
+},
+	"đ–č": {
+	math: "\\mathsf{Z}"
+},
+	"đ–ș": {
+	math: "\\mathsf{a}"
+},
+	"đ–»": {
+	math: "\\mathsf{b}"
+},
+	"đ–Œ": {
+	math: "\\mathsf{c}"
+},
+	"đ–œ": {
+	math: "\\mathsf{d}"
+},
+	"đ–Ÿ": {
+	math: "\\mathsf{e}"
+},
+	"𝖿": {
+	math: "\\mathsf{f}"
+},
+	"𝗀": {
+	math: "\\mathsf{g}"
+},
+	"𝗁": {
+	math: "\\mathsf{h}"
+},
+	"𝗂": {
+	math: "\\mathsf{i}"
+},
+	"𝗃": {
+	math: "\\mathsf{j}"
+},
+	"𝗄": {
+	math: "\\mathsf{k}"
+},
+	"𝗅": {
+	math: "\\mathsf{l}"
+},
+	"𝗆": {
+	math: "\\mathsf{m}"
+},
+	"𝗇": {
+	math: "\\mathsf{n}"
+},
+	"𝗈": {
+	math: "\\mathsf{o}"
+},
+	"𝗉": {
+	math: "\\mathsf{p}"
+},
+	"𝗊": {
+	math: "\\mathsf{q}"
+},
+	"𝗋": {
+	math: "\\mathsf{r}"
+},
+	"𝗌": {
+	math: "\\mathsf{s}"
+},
+	"𝗍": {
+	math: "\\mathsf{t}"
+},
+	"𝗎": {
+	math: "\\mathsf{u}"
+},
+	"𝗏": {
+	math: "\\mathsf{v}"
+},
+	"𝗐": {
+	math: "\\mathsf{w}"
+},
+	"𝗑": {
+	math: "\\mathsf{x}"
+},
+	"𝗒": {
+	math: "\\mathsf{y}"
+},
+	"𝗓": {
+	math: "\\mathsf{z}"
+},
+	"𝗔": {
+	math: "\\mathsfbf{A}"
+},
+	"𝗕": {
+	math: "\\mathsfbf{B}"
+},
+	"𝗖": {
+	math: "\\mathsfbf{C}"
+},
+	"𝗗": {
+	math: "\\mathsfbf{D}"
+},
+	"𝗘": {
+	math: "\\mathsfbf{E}"
+},
+	"𝗙": {
+	math: "\\mathsfbf{F}"
+},
+	"𝗚": {
+	math: "\\mathsfbf{G}"
+},
+	"𝗛": {
+	math: "\\mathsfbf{H}"
+},
+	"𝗜": {
+	math: "\\mathsfbf{I}"
+},
+	"𝗝": {
+	math: "\\mathsfbf{J}"
+},
+	"𝗞": {
+	math: "\\mathsfbf{K}"
+},
+	"𝗟": {
+	math: "\\mathsfbf{L}"
+},
+	"𝗠": {
+	math: "\\mathsfbf{M}"
+},
+	"𝗡": {
+	math: "\\mathsfbf{N}"
+},
+	"𝗱": {
+	math: "\\mathsfbf{O}"
+},
+	"𝗣": {
+	math: "\\mathsfbf{P}"
+},
+	"đ—€": {
+	math: "\\mathsfbf{Q}"
+},
+	"đ—„": {
+	math: "\\mathsfbf{R}"
+},
+	"𝗩": {
+	math: "\\mathsfbf{S}"
+},
+	"𝗧": {
+	math: "\\mathsfbf{T}"
+},
+	"𝗹": {
+	math: "\\mathsfbf{U}"
+},
+	"đ—©": {
+	math: "\\mathsfbf{V}"
+},
+	"đ—Ș": {
+	math: "\\mathsfbf{W}"
+},
+	"đ—«": {
+	math: "\\mathsfbf{X}"
+},
+	"𝗬": {
+	math: "\\mathsfbf{Y}"
+},
+	"𝗭": {
+	math: "\\mathsfbf{Z}"
+},
+	"𝗼": {
+	math: "\\mathsfbf{a}"
+},
+	"𝗯": {
+	math: "\\mathsfbf{b}"
+},
+	"𝗰": {
+	math: "\\mathsfbf{c}"
+},
+	"đ—±": {
+	math: "\\mathsfbf{d}"
+},
+	"đ—Č": {
+	math: "\\mathsfbf{e}"
+},
+	"𝗳": {
+	math: "\\mathsfbf{f}"
+},
+	"𝗮": {
+	math: "\\mathsfbf{g}"
+},
+	"đ—”": {
+	math: "\\mathsfbf{h}"
+},
+	"đ—¶": {
+	math: "\\mathsfbf{i}"
+},
+	"đ—·": {
+	math: "\\mathsfbf{j}"
+},
+	"𝗾": {
+	math: "\\mathsfbf{k}"
+},
+	"đ—č": {
+	math: "\\mathsfbf{l}"
+},
+	"đ—ș": {
+	math: "\\mathsfbf{m}"
+},
+	"đ—»": {
+	math: "\\mathsfbf{n}"
+},
+	"đ—Œ": {
+	math: "\\mathsfbf{o}"
+},
+	"đ—œ": {
+	math: "\\mathsfbf{p}"
+},
+	"đ—Ÿ": {
+	math: "\\mathsfbf{q}"
+},
+	"𝗿": {
+	math: "\\mathsfbf{r}"
+},
+	"𝘀": {
+	math: "\\mathsfbf{s}"
+},
+	"𝘁": {
+	math: "\\mathsfbf{t}"
+},
+	"𝘂": {
+	math: "\\mathsfbf{u}"
+},
+	"𝘃": {
+	math: "\\mathsfbf{v}"
+},
+	"𝘄": {
+	math: "\\mathsfbf{w}"
+},
+	"𝘅": {
+	math: "\\mathsfbf{x}"
+},
+	"𝘆": {
+	math: "\\mathsfbf{y}"
+},
+	"𝘇": {
+	math: "\\mathsfbf{z}"
+},
+	"𝘈": {
+	math: "\\mathsfsl{A}"
+},
+	"𝘉": {
+	math: "\\mathsfsl{B}"
+},
+	"𝘊": {
+	math: "\\mathsfsl{C}"
+},
+	"𝘋": {
+	math: "\\mathsfsl{D}"
+},
+	"𝘌": {
+	math: "\\mathsfsl{E}"
+},
+	"𝘍": {
+	math: "\\mathsfsl{F}"
+},
+	"𝘎": {
+	math: "\\mathsfsl{G}"
+},
+	"𝘏": {
+	math: "\\mathsfsl{H}"
+},
+	"𝘐": {
+	math: "\\mathsfsl{I}"
+},
+	"𝘑": {
+	math: "\\mathsfsl{J}"
+},
+	"𝘒": {
+	math: "\\mathsfsl{K}"
+},
+	"𝘓": {
+	math: "\\mathsfsl{L}"
+},
+	"𝘔": {
+	math: "\\mathsfsl{M}"
+},
+	"𝘕": {
+	math: "\\mathsfsl{N}"
+},
+	"𝘖": {
+	math: "\\mathsfsl{O}"
+},
+	"𝘗": {
+	math: "\\mathsfsl{P}"
+},
+	"𝘘": {
+	math: "\\mathsfsl{Q}"
+},
+	"𝘙": {
+	math: "\\mathsfsl{R}"
+},
+	"𝘚": {
+	math: "\\mathsfsl{S}"
+},
+	"𝘛": {
+	math: "\\mathsfsl{T}"
+},
+	"𝘜": {
+	math: "\\mathsfsl{U}"
+},
+	"𝘝": {
+	math: "\\mathsfsl{V}"
+},
+	"𝘞": {
+	math: "\\mathsfsl{W}"
+},
+	"𝘟": {
+	math: "\\mathsfsl{X}"
+},
+	"𝘠": {
+	math: "\\mathsfsl{Y}"
+},
+	"𝘡": {
+	math: "\\mathsfsl{Z}"
+},
+	"𝘱": {
+	math: "\\mathsfsl{a}"
+},
+	"𝘣": {
+	math: "\\mathsfsl{b}"
+},
+	"đ˜€": {
+	math: "\\mathsfsl{c}"
+},
+	"đ˜„": {
+	math: "\\mathsfsl{d}"
+},
+	"𝘩": {
+	math: "\\mathsfsl{e}"
+},
+	"𝘧": {
+	math: "\\mathsfsl{f}"
+},
+	"𝘹": {
+	math: "\\mathsfsl{g}"
+},
+	"đ˜©": {
+	math: "\\mathsfsl{h}"
+},
+	"đ˜Ș": {
+	math: "\\mathsfsl{i}"
+},
+	"đ˜«": {
+	math: "\\mathsfsl{j}"
+},
+	"𝘬": {
+	math: "\\mathsfsl{k}"
+},
+	"𝘭": {
+	math: "\\mathsfsl{l}"
+},
+	"𝘼": {
+	math: "\\mathsfsl{m}"
+},
+	"𝘯": {
+	math: "\\mathsfsl{n}"
+},
+	"𝘰": {
+	math: "\\mathsfsl{o}"
+},
+	"đ˜±": {
+	math: "\\mathsfsl{p}"
+},
+	"đ˜Č": {
+	math: "\\mathsfsl{q}"
+},
+	"𝘳": {
+	math: "\\mathsfsl{r}"
+},
+	"𝘮": {
+	math: "\\mathsfsl{s}"
+},
+	"đ˜”": {
+	math: "\\mathsfsl{t}"
+},
+	"đ˜¶": {
+	math: "\\mathsfsl{u}"
+},
+	"đ˜·": {
+	math: "\\mathsfsl{v}"
+},
+	"𝘾": {
+	math: "\\mathsfsl{w}"
+},
+	"đ˜č": {
+	math: "\\mathsfsl{x}"
+},
+	"đ˜ș": {
+	math: "\\mathsfsl{y}"
+},
+	"đ˜»": {
+	math: "\\mathsfsl{z}"
+},
+	"đ˜Œ": {
+	math: "\\mathsfbfsl{A}"
+},
+	"đ˜œ": {
+	math: "\\mathsfbfsl{B}"
+},
+	"đ˜Ÿ": {
+	math: "\\mathsfbfsl{C}"
+},
+	"𝘿": {
+	math: "\\mathsfbfsl{D}"
+},
+	"𝙀": {
+	math: "\\mathsfbfsl{E}"
+},
+	"𝙁": {
+	math: "\\mathsfbfsl{F}"
+},
+	"𝙂": {
+	math: "\\mathsfbfsl{G}"
+},
+	"𝙃": {
+	math: "\\mathsfbfsl{H}"
+},
+	"𝙄": {
+	math: "\\mathsfbfsl{I}"
+},
+	"𝙅": {
+	math: "\\mathsfbfsl{J}"
+},
+	"𝙆": {
+	math: "\\mathsfbfsl{K}"
+},
+	"𝙇": {
+	math: "\\mathsfbfsl{L}"
+},
+	"𝙈": {
+	math: "\\mathsfbfsl{M}"
+},
+	"𝙉": {
+	math: "\\mathsfbfsl{N}"
+},
+	"𝙊": {
+	math: "\\mathsfbfsl{O}"
+},
+	"𝙋": {
+	math: "\\mathsfbfsl{P}"
+},
+	"𝙌": {
+	math: "\\mathsfbfsl{Q}"
+},
+	"𝙍": {
+	math: "\\mathsfbfsl{R}"
+},
+	"𝙎": {
+	math: "\\mathsfbfsl{S}"
+},
+	"𝙏": {
+	math: "\\mathsfbfsl{T}"
+},
+	"𝙐": {
+	math: "\\mathsfbfsl{U}"
+},
+	"𝙑": {
+	math: "\\mathsfbfsl{V}"
+},
+	"𝙒": {
+	math: "\\mathsfbfsl{W}"
+},
+	"𝙓": {
+	math: "\\mathsfbfsl{X}"
+},
+	"𝙔": {
+	math: "\\mathsfbfsl{Y}"
+},
+	"𝙕": {
+	math: "\\mathsfbfsl{Z}"
+},
+	"𝙖": {
+	math: "\\mathsfbfsl{a}"
+},
+	"𝙗": {
+	math: "\\mathsfbfsl{b}"
+},
+	"𝙘": {
+	math: "\\mathsfbfsl{c}"
+},
+	"𝙙": {
+	math: "\\mathsfbfsl{d}"
+},
+	"𝙚": {
+	math: "\\mathsfbfsl{e}"
+},
+	"𝙛": {
+	math: "\\mathsfbfsl{f}"
+},
+	"𝙜": {
+	math: "\\mathsfbfsl{g}"
+},
+	"𝙝": {
+	math: "\\mathsfbfsl{h}"
+},
+	"𝙞": {
+	math: "\\mathsfbfsl{i}"
+},
+	"𝙟": {
+	math: "\\mathsfbfsl{j}"
+},
+	"𝙠": {
+	math: "\\mathsfbfsl{k}"
+},
+	"𝙡": {
+	math: "\\mathsfbfsl{l}"
+},
+	"𝙱": {
+	math: "\\mathsfbfsl{m}"
+},
+	"𝙣": {
+	math: "\\mathsfbfsl{n}"
+},
+	"đ™€": {
+	math: "\\mathsfbfsl{o}"
+},
+	"đ™„": {
+	math: "\\mathsfbfsl{p}"
+},
+	"𝙩": {
+	math: "\\mathsfbfsl{q}"
+},
+	"𝙧": {
+	math: "\\mathsfbfsl{r}"
+},
+	"𝙹": {
+	math: "\\mathsfbfsl{s}"
+},
+	"đ™©": {
+	math: "\\mathsfbfsl{t}"
+},
+	"đ™Ș": {
+	math: "\\mathsfbfsl{u}"
+},
+	"đ™«": {
+	math: "\\mathsfbfsl{v}"
+},
+	"𝙬": {
+	math: "\\mathsfbfsl{w}"
+},
+	"𝙭": {
+	math: "\\mathsfbfsl{x}"
+},
+	"𝙼": {
+	math: "\\mathsfbfsl{y}"
+},
+	"𝙯": {
+	math: "\\mathsfbfsl{z}"
+},
+	"𝙰": {
+	math: "\\mathtt{A}"
+},
+	"đ™±": {
+	math: "\\mathtt{B}"
+},
+	"đ™Č": {
+	math: "\\mathtt{C}"
+},
+	"𝙳": {
+	math: "\\mathtt{D}"
+},
+	"𝙮": {
+	math: "\\mathtt{E}"
+},
+	"đ™”": {
+	math: "\\mathtt{F}"
+},
+	"đ™¶": {
+	math: "\\mathtt{G}"
+},
+	"đ™·": {
+	math: "\\mathtt{H}"
+},
+	"𝙾": {
+	math: "\\mathtt{I}"
+},
+	"đ™č": {
+	math: "\\mathtt{J}"
+},
+	"đ™ș": {
+	math: "\\mathtt{K}"
+},
+	"đ™»": {
+	math: "\\mathtt{L}"
+},
+	"đ™Œ": {
+	math: "\\mathtt{M}"
+},
+	"đ™œ": {
+	math: "\\mathtt{N}"
+},
+	"đ™Ÿ": {
+	math: "\\mathtt{O}"
+},
+	"𝙿": {
+	math: "\\mathtt{P}"
+},
+	"𝚀": {
+	math: "\\mathtt{Q}"
+},
+	"𝚁": {
+	math: "\\mathtt{R}"
+},
+	"𝚂": {
+	math: "\\mathtt{S}"
+},
+	"𝚃": {
+	math: "\\mathtt{T}"
+},
+	"𝚄": {
+	math: "\\mathtt{U}"
+},
+	"𝚅": {
+	math: "\\mathtt{V}"
+},
+	"𝚆": {
+	math: "\\mathtt{W}"
+},
+	"𝚇": {
+	math: "\\mathtt{X}"
+},
+	"𝚈": {
+	math: "\\mathtt{Y}"
+},
+	"𝚉": {
+	math: "\\mathtt{Z}"
+},
+	"𝚊": {
+	math: "\\mathtt{a}"
+},
+	"𝚋": {
+	math: "\\mathtt{b}"
+},
+	"𝚌": {
+	math: "\\mathtt{c}"
+},
+	"𝚍": {
+	math: "\\mathtt{d}"
+},
+	"𝚎": {
+	math: "\\mathtt{e}"
+},
+	"𝚏": {
+	math: "\\mathtt{f}"
+},
+	"𝚐": {
+	math: "\\mathtt{g}"
+},
+	"𝚑": {
+	math: "\\mathtt{h}"
+},
+	"𝚒": {
+	math: "\\mathtt{i}"
+},
+	"𝚓": {
+	math: "\\mathtt{j}"
+},
+	"𝚔": {
+	math: "\\mathtt{k}"
+},
+	"𝚕": {
+	math: "\\mathtt{l}"
+},
+	"𝚖": {
+	math: "\\mathtt{m}"
+},
+	"𝚗": {
+	math: "\\mathtt{n}"
+},
+	"𝚘": {
+	math: "\\mathtt{o}"
+},
+	"𝚙": {
+	math: "\\mathtt{p}"
+},
+	"𝚚": {
+	math: "\\mathtt{q}"
+},
+	"𝚛": {
+	math: "\\mathtt{r}"
+},
+	"𝚜": {
+	math: "\\mathtt{s}"
+},
+	"𝚝": {
+	math: "\\mathtt{t}"
+},
+	"𝚞": {
+	math: "\\mathtt{u}"
+},
+	"𝚟": {
+	math: "\\mathtt{v}"
+},
+	"𝚠": {
+	math: "\\mathtt{w}"
+},
+	"𝚡": {
+	math: "\\mathtt{x}"
+},
+	"𝚱": {
+	math: "\\mathtt{y}"
+},
+	"𝚣": {
+	math: "\\mathtt{z}"
+},
+	"đš€": {
+	math: "\\imath"
+},
+	"đš„": {
+	math: "\\jmath"
+},
+	"𝚹": {
+	math: "\\mathbf{A}"
+},
+	"đš©": {
+	math: "\\mathbf{B}"
+},
+	"đšȘ": {
+	math: "\\mathbf{\\Gamma}"
+},
+	"đš«": {
+	math: "\\mathbf{\\Delta}"
+},
+	"𝚬": {
+	math: "\\mathbf{E}"
+},
+	"𝚭": {
+	math: "\\mathbf{Z}"
+},
+	"𝚼": {
+	math: "\\mathbf{H}"
+},
+	"𝚯": {
+	math: "\\mathbf{\\Theta}"
+},
+	"𝚰": {
+	math: "\\mathbf{I}"
+},
+	"đš±": {
+	math: "\\mathbf{K}"
+},
+	"đšČ": {
+	math: "\\mathbf{\\Lambda}"
+},
+	"𝚳": {
+	math: "M"
+},
+	"𝚮": {
+	math: "N"
+},
+	"đš”": {
+	math: "\\mathbf{\\Xi}"
+},
+	"đš¶": {
+	math: "O"
+},
+	"đš·": {
+	math: "\\mathbf{\\Pi}"
+},
+	"𝚾": {
+	math: "\\mathbf{P}"
+},
+	"đšč": {
+	math: "\\mathbf{\\vartheta}"
+},
+	"đšș": {
+	math: "\\mathbf{\\Sigma}"
+},
+	"đš»": {
+	math: "\\mathbf{T}"
+},
+	"đšŒ": {
+	math: "\\mathbf{\\Upsilon}"
+},
+	"đšœ": {
+	math: "\\mathbf{\\Phi}"
+},
+	"đšŸ": {
+	math: "\\mathbf{X}"
+},
+	"𝚿": {
+	math: "\\mathbf{\\Psi}"
+},
+	"𝛀": {
+	math: "\\mathbf{\\Omega}"
+},
+	"𝛁": {
+	math: "\\mathbf{\\nabla}"
+},
+	"𝛂": {
+	math: "\\mathbf{\\alpha}"
+},
+	"𝛃": {
+	math: "\\mathbf{\\beta}"
+},
+	"𝛄": {
+	math: "\\mathbf{\\gamma}"
+},
+	"𝛅": {
+	math: "\\mathbf{\\delta}"
+},
+	"𝛆": {
+	math: "\\mathbf{\\epsilon}"
+},
+	"𝛇": {
+	math: "\\mathbf{\\zeta}"
+},
+	"𝛈": {
+	math: "\\mathbf{\\eta}"
+},
+	"𝛉": {
+	math: "\\mathbf{\\theta}"
+},
+	"𝛊": {
+	math: "\\mathbf{I}"
+},
+	"𝛋": {
+	math: "\\mathbf{K}"
+},
+	"𝛌": {
+	math: "\\mathbf{\\lambda}"
+},
+	"𝛍": {
+	math: "M"
+},
+	"𝛎": {
+	math: "N"
+},
+	"𝛏": {
+	math: "\\mathbf{\\xi}"
+},
+	"𝛐": {
+	math: "O"
+},
+	"𝛑": {
+	math: "\\mathbf{\\pi}"
+},
+	"𝛒": {
+	math: "\\mathbf{P}"
+},
+	"𝛓": {
+	math: "\\mathbf{\\varsigma}"
+},
+	"𝛔": {
+	math: "\\mathbf{\\sigma}"
+},
+	"𝛕": {
+	math: "\\mathbf{T}"
+},
+	"𝛖": {
+	math: "\\mathbf{\\upsilon}"
+},
+	"𝛗": {
+	math: "\\mathbf{\\phi}"
+},
+	"𝛘": {
+	math: "\\mathbf{X}"
+},
+	"𝛙": {
+	math: "\\mathbf{\\psi}"
+},
+	"𝛚": {
+	math: "\\mathbf{\\omega}"
+},
+	"𝛛": {
+	math: "\\partial"
+},
+	"𝛜": {
+	math: "\\in"
+},
+	"𝛝": {
+	math: "\\mathbf{\\vartheta}"
+},
+	"𝛞": {
+	math: "\\mathbf{\\varkappa}"
+},
+	"𝛟": {
+	math: "\\mathbf{\\phi}"
+},
+	"𝛠": {
+	math: "\\mathbf{\\varrho}"
+},
+	"𝛡": {
+	math: "\\mathbf{\\varpi}"
+},
+	"𝛱": {
+	math: "\\mathsl{A}"
+},
+	"𝛣": {
+	math: "\\mathsl{B}"
+},
+	"đ›€": {
+	math: "\\mathsl{\\Gamma}"
+},
+	"đ›„": {
+	math: "\\mathsl{\\Delta}"
+},
+	"𝛩": {
+	math: "\\mathsl{E}"
+},
+	"𝛧": {
+	math: "\\mathsl{Z}"
+},
+	"𝛹": {
+	math: "\\mathsl{H}"
+},
+	"đ›©": {
+	math: "\\mathsl{\\Theta}"
+},
+	"đ›Ș": {
+	math: "\\mathsl{I}"
+},
+	"đ›«": {
+	math: "\\mathsl{K}"
+},
+	"𝛬": {
+	math: "\\mathsl{\\Lambda}"
+},
+	"𝛭": {
+	math: "M"
+},
+	"𝛼": {
+	math: "N"
+},
+	"𝛯": {
+	math: "\\mathsl{\\Xi}"
+},
+	"𝛰": {
+	math: "O"
+},
+	"đ›±": {
+	math: "\\mathsl{\\Pi}"
+},
+	"đ›Č": {
+	math: "\\mathsl{P}"
+},
+	"𝛳": {
+	math: "\\mathsl{\\Theta}"
+},
+	"𝛮": {
+	math: "\\mathsl{\\Sigma}"
+},
+	"đ›”": {
+	math: "\\mathsl{T}"
+},
+	"đ›¶": {
+	math: "\\mathsl{\\Upsilon}"
+},
+	"đ›·": {
+	math: "\\mathsl{\\Phi}"
+},
+	"𝛾": {
+	math: "\\mathsl{X}"
+},
+	"đ›č": {
+	math: "\\mathsl{\\Psi}"
+},
+	"đ›ș": {
+	math: "\\mathsl{\\Omega}"
+},
+	"đ›»": {
+	math: "\\mathsl{\\nabla}"
+},
+	"đ›Œ": {
+	math: "\\mathsl{A}"
+},
+	"đ›œ": {
+	math: "\\mathsl{B}"
+},
+	"đ›Ÿ": {
+	math: "\\mathsl{\\gamma}"
+},
+	"𝛿": {
+	math: "\\mathsl{\\delta}"
+},
+	"𝜀": {
+	math: "\\mathsl{E}"
+},
+	"𝜁": {
+	math: "\\mathsl{Z}"
+},
+	"𝜂": {
+	math: "\\mathsl{H}"
+},
+	"𝜃": {
+	math: "\\mathsl{\\theta}"
+},
+	"𝜄": {
+	math: "\\mathsl{I}"
+},
+	"𝜅": {
+	math: "\\mathsl{K}"
+},
+	"𝜆": {
+	math: "\\mathsl{\\lambda}"
+},
+	"𝜇": {
+	math: "\\mu"
+},
+	"𝜈": {
+	math: "\\nu"
+},
+	"𝜉": {
+	math: "\\mathsl{\\xi}"
+},
+	"𝜊": {
+	math: "o"
+},
+	"𝜋": {
+	math: "\\mathsl{\\pi}"
+},
+	"𝜌": {
+	math: "\\mathsl{P}"
+},
+	"𝜍": {
+	math: "\\mathsl{\\varsigma}"
+},
+	"𝜎": {
+	math: "\\mathsl{\\sigma}"
+},
+	"𝜏": {
+	math: "\\mathsl{T}"
+},
+	"𝜐": {
+	math: "\\mathsl{\\upsilon}"
+},
+	"𝜑": {
+	math: "\\mathsl{\\varphi}"
+},
+	"𝜒": {
+	math: "\\mathsl{X}"
+},
+	"𝜓": {
+	math: "\\mathsl{\\psi}"
+},
+	"𝜔": {
+	math: "\\mathsl{\\omega}"
+},
+	"𝜕": {
+	math: "\\partial"
+},
+	"𝜖": {
+	math: "\\in"
+},
+	"𝜗": {
+	math: "\\mathsl{\\vartheta}"
+},
+	"𝜘": {
+	math: "\\mathsl{\\varkappa}"
+},
+	"𝜙": {
+	math: "\\mathsl{\\phi}"
+},
+	"𝜚": {
+	math: "\\mathsl{\\varrho}"
+},
+	"𝜛": {
+	math: "\\mathsl{\\varpi}"
+},
+	"𝜜": {
+	math: "\\mathbit{A}"
+},
+	"𝜝": {
+	math: "\\mathbit{B}"
+},
+	"𝜞": {
+	math: "\\mathbit{\\Gamma}"
+},
+	"𝜟": {
+	math: "\\mathbit{\\Delta}"
+},
+	"𝜠": {
+	math: "\\mathbit{E}"
+},
+	"𝜡": {
+	math: "\\mathbit{Z}"
+},
+	"𝜱": {
+	math: "\\mathbit{H}"
+},
+	"𝜣": {
+	math: "\\mathbit{\\Theta}"
+},
+	"đœ€": {
+	math: "\\mathbit{I}"
+},
+	"đœ„": {
+	math: "\\mathbit{K}"
+},
+	"𝜩": {
+	math: "\\mathbit{\\Lambda}"
+},
+	"𝜧": {
+	math: "M"
+},
+	"𝜹": {
+	math: "N"
+},
+	"đœ©": {
+	math: "\\mathbit{\\Xi}"
+},
+	"đœȘ": {
+	math: "O"
+},
+	"đœ«": {
+	math: "\\mathbit{\\Pi}"
+},
+	"𝜬": {
+	math: "\\mathbit{P}"
+},
+	"𝜭": {
+	math: "\\mathbit{O}"
+},
+	"𝜼": {
+	math: "\\mathbit{\\Sigma}"
+},
+	"𝜯": {
+	math: "\\mathbit{T}"
+},
+	"𝜰": {
+	math: "\\mathbit{\\Upsilon}"
+},
+	"đœ±": {
+	math: "\\mathbit{\\Phi}"
+},
+	"đœČ": {
+	math: "\\mathbit{X}"
+},
+	"𝜳": {
+	math: "\\mathbit{\\Psi}"
+},
+	"𝜮": {
+	math: "\\mathbit{\\Omega}"
+},
+	"đœ”": {
+	math: "\\mathbit{\\nabla}"
+},
+	"đœ¶": {
+	math: "\\mathbit{\\alpha}"
+},
+	"đœ·": {
+	math: "\\mathbit{\\beta}"
+},
+	"𝜾": {
+	math: "\\mathbit{\\gamma}"
+},
+	"đœč": {
+	math: "\\mathbit{\\delta}"
+},
+	"đœș": {
+	math: "\\mathbit{\\epsilon}"
+},
+	"đœ»": {
+	math: "\\mathbit{\\zeta}"
+},
+	"đœŒ": {
+	math: "\\mathbit{\\eta}"
+},
+	"đœœ": {
+	math: "\\mathbit{\\theta}"
+},
+	"đœŸ": {
+	math: "\\mathbit{\\imath}"
+},
+	"𝜿": {
+	math: "\\mathbit{\\kappa}"
+},
+	"𝝀": {
+	math: "\\mathbit{\\lambda}"
+},
+	"𝝁": {
+	math: "\\mu"
+},
+	"𝝂": {
+	math: "N"
+},
+	"𝝃": {
+	math: "\\mathbit{\\xi}"
+},
+	"𝝄": {
+	math: "O"
+},
+	"𝝅": {
+	math: "\\mathbit{\\pi}"
+},
+	"𝝆": {
+	math: "\\mathbit{\\rho}"
+},
+	"𝝇": {
+	math: "\\mathbit{\\varsigma}"
+},
+	"𝝈": {
+	math: "\\mathbit{\\sigma}"
+},
+	"𝝉": {
+	math: "\\mathbit{\\tau}"
+},
+	"𝝊": {
+	math: "\\mathbit{\\upsilon}"
+},
+	"𝝋": {
+	math: "\\mathbit{\\varphi}"
+},
+	"𝝌": {
+	math: "\\mathbit{\\chi}"
+},
+	"𝝍": {
+	math: "\\mathbit{\\psi}"
+},
+	"𝝎": {
+	math: "\\mathbit{\\omega}"
+},
+	"𝝏": {
+	math: "\\partial"
+},
+	"𝝐": {
+	math: "\\in"
+},
+	"𝝑": {
+	math: "\\mathbit{\\vartheta}"
+},
+	"𝝒": {
+	math: "\\mathbit{\\varkappa}"
+},
+	"𝝓": {
+	math: "\\mathbit{\\phi}"
+},
+	"𝝔": {
+	math: "\\mathbit{\\varrho}"
+},
+	"𝝕": {
+	math: "\\mathbit{\\varpi}"
+},
+	"𝝖": {
+	math: "\\mathsfbf{A}"
+},
+	"𝝗": {
+	math: "\\mathsfbf{B}"
+},
+	"𝝘": {
+	math: "\\mathsfbf{\\Gamma}"
+},
+	"𝝙": {
+	math: "\\mathsfbf{\\Delta}"
+},
+	"𝝚": {
+	math: "\\mathsfbf{E}"
+},
+	"𝝛": {
+	math: "\\mathsfbf{Z}"
+},
+	"𝝜": {
+	math: "\\mathsfbf{H}"
+},
+	"𝝝": {
+	math: "\\mathsfbf{\\Theta}"
+},
+	"𝝞": {
+	math: "\\mathsfbf{I}"
+},
+	"𝝟": {
+	math: "\\mathsfbf{K}"
+},
+	"𝝠": {
+	math: "\\mathsfbf{\\Lambda}"
+},
+	"𝝡": {
+	math: "M"
+},
+	"𝝱": {
+	math: "N"
+},
+	"𝝣": {
+	math: "\\mathsfbf{\\Xi}"
+},
+	"đ€": {
+	math: "O"
+},
+	"đ„": {
+	math: "\\mathsfbf{\\Pi}"
+},
+	"𝝩": {
+	math: "\\mathsfbf{P}"
+},
+	"𝝧": {
+	math: "\\mathsfbf{\\Theta}"
+},
+	"𝝹": {
+	math: "\\mathsfbf{\\Sigma}"
+},
+	"đ©": {
+	math: "\\mathsfbf{T}"
+},
+	"đȘ": {
+	math: "\\mathsfbf{\\Upsilon}"
+},
+	"đ«": {
+	math: "\\mathsfbf{\\Phi}"
+},
+	"𝝬": {
+	math: "\\mathsfbf{X}"
+},
+	"𝝭": {
+	math: "\\mathsfbf{\\Psi}"
+},
+	"𝝼": {
+	math: "\\mathsfbf{\\Omega}"
+},
+	"𝝯": {
+	math: "\\mathsfbf{\\nabla}"
+},
+	"𝝰": {
+	math: "\\mathsfbf{\\alpha}"
+},
+	"đ±": {
+	math: "\\mathsfbf{\\beta}"
+},
+	"đČ": {
+	math: "\\mathsfbf{\\gamma}"
+},
+	"𝝳": {
+	math: "\\mathsfbf{\\delta}"
+},
+	"𝝮": {
+	math: "\\mathsfbf{\\varepsilon}"
+},
+	"đ”": {
+	math: "\\mathsfbf{\\zeta}"
+},
+	"đ¶": {
+	math: "\\mathsfbf{\\eta}"
+},
+	"đ·": {
+	math: "\\mathsfbf{\\theta}"
+},
+	"𝝾": {
+	math: "\\mathsfbf{\\imath}"
+},
+	"đč": {
+	math: "\\mathsfbf{\\kappa}"
+},
+	"đș": {
+	math: "\\mathsfbf{\\lambda}"
+},
+	"đ»": {
+	math: "\\mu"
+},
+	"đŒ": {
+	math: "\\nu"
+},
+	"đœ": {
+	math: "\\mathsfbf{\\xi}"
+},
+	"đŸ": {
+	math: "o"
+},
+	"𝝿": {
+	math: "\\mathsfbf{\\pi}"
+},
+	"𝞀": {
+	math: "\\mathsfbf{\\rho}"
+},
+	"𝞁": {
+	math: "\\mathsfbf{\\varsigma}"
+},
+	"𝞂": {
+	math: "\\mathsfbf{\\sigma}"
+},
+	"𝞃": {
+	math: "\\mathsfbf{\\tau}"
+},
+	"𝞄": {
+	math: "\\mathsfbf{\\upsilon}"
+},
+	"𝞅": {
+	math: "\\mathsfbf{\\varphi}"
+},
+	"𝞆": {
+	math: "\\mathsfbf{\\chi}"
+},
+	"𝞇": {
+	math: "\\mathsfbf{\\psi}"
+},
+	"𝞈": {
+	math: "\\mathsfbf{\\omega}"
+},
+	"𝞉": {
+	math: "\\partial"
+},
+	"𝞊": {
+	math: "\\in"
+},
+	"𝞋": {
+	math: "\\mathsfbf{\\vartheta}"
+},
+	"𝞌": {
+	math: "\\mathsfbf{\\varkappa}"
+},
+	"𝞍": {
+	math: "\\mathsfbf{\\phi}"
+},
+	"𝞎": {
+	math: "\\mathsfbf{\\varrho}"
+},
+	"𝞏": {
+	math: "\\mathsfbf{\\varpi}"
+},
+	"𝞐": {
+	math: "\\mathsfbfsl{A}"
+},
+	"𝞑": {
+	math: "\\mathsfbfsl{B}"
+},
+	"𝞒": {
+	math: "\\mathsfbfsl{\\Gamma}"
+},
+	"𝞓": {
+	math: "\\mathsfbfsl{\\Delta}"
+},
+	"𝞔": {
+	math: "\\mathsfbfsl{E}"
+},
+	"𝞕": {
+	math: "\\mathsfbfsl{Z}"
+},
+	"𝞖": {
+	math: "\\mathsfbfsl{H}"
+},
+	"𝞗": {
+	math: "\\mathsfbfsl{\\Theta}"
+},
+	"𝞘": {
+	math: "\\mathsfbfsl{I}"
+},
+	"𝞙": {
+	math: "\\mathsfbfsl{K}"
+},
+	"𝞚": {
+	math: "\\mathsfbfsl{\\Lambda}"
+},
+	"𝞛": {
+	math: "\\mathsfbfsl{M}"
+},
+	"𝞜": {
+	math: "\\mathsfbfsl{N}"
+},
+	"𝞝": {
+	math: "\\mathsfbfsl{\\Xi}"
+},
+	"𝞞": {
+	math: "\\mathsfbfsl{O}"
+},
+	"𝞟": {
+	math: "\\mathsfbfsl{\\Pi}"
+},
+	"𝞠": {
+	math: "\\mathsfbfsl{P}"
+},
+	"𝞡": {
+	math: "\\mathsfbfsl{\\Theta}"
+},
+	"𝞱": {
+	math: "\\mathsfbfsl{\\Sigma}"
+},
+	"𝞣": {
+	math: "\\mathsfbfsl{T}"
+},
+	"đž€": {
+	math: "\\mathsfbfsl{\\Upsilon}"
+},
+	"đž„": {
+	math: "\\mathsfbfsl{\\Phi}"
+},
+	"𝞩": {
+	math: "\\mathsfbfsl{X}"
+},
+	"𝞧": {
+	math: "\\mathsfbfsl{\\Psi}"
+},
+	"𝞹": {
+	math: "\\mathsfbfsl{\\Omega}"
+},
+	"đž©": {
+	math: "\\mathsfbfsl{\\nabla}"
+},
+	"đžȘ": {
+	math: "\\mathsfbfsl{\\alpha}"
+},
+	"đž«": {
+	math: "\\mathsfbfsl{\\beta}"
+},
+	"𝞬": {
+	math: "\\mathsfbfsl{\\gamma}"
+},
+	"𝞭": {
+	math: "\\mathsfbfsl{\\delta}"
+},
+	"𝞼": {
+	math: "\\mathsfbfsl{\\varepsilon}"
+},
+	"𝞯": {
+	math: "\\mathsfbfsl{\\zeta}"
+},
+	"𝞰": {
+	math: "\\mathsfbfsl{\\eta}"
+},
+	"đž±": {
+	math: "\\mathsfbfsl{\\theta}"
+},
+	"đžČ": {
+	math: "\\mathsfbfsl{\\imath}"
+},
+	"𝞳": {
+	math: "\\mathsfbfsl{\\kappa}"
+},
+	"𝞮": {
+	math: "\\mathsfbfsl{\\lambda}"
+},
+	"đž”": {
+	math: "\\mu"
+},
+	"đž¶": {
+	math: "\\nu"
+},
+	"đž·": {
+	math: "\\mathsfbfsl{\\xi}"
+},
+	"𝞾": {
+	math: "o"
+},
+	"đžč": {
+	math: "\\mathsfbfsl{\\pi}"
+},
+	"đžș": {
+	math: "\\mathsfbfsl{\\rho}"
+},
+	"đž»": {
+	math: "\\mathsfbfsl{\\varsigma}"
+},
+	"đžŒ": {
+	math: "\\mathsfbfsl{\\sigma}"
+},
+	"đžœ": {
+	math: "\\mathsfbfsl{\\tau}"
+},
+	"đžŸ": {
+	math: "\\mathsfbfsl{\\upsilon}"
+},
+	"𝞿": {
+	math: "\\mathsfbfsl{\\varphi}"
+},
+	"𝟀": {
+	math: "\\mathsfbfsl{\\chi}"
+},
+	"𝟁": {
+	math: "\\mathsfbfsl{\\psi}"
+},
+	"𝟂": {
+	math: "\\mathsfbfsl{\\omega}"
+},
+	"𝟃": {
+	math: "\\partial"
+},
+	"𝟄": {
+	math: "\\in"
+},
+	"𝟅": {
+	math: "\\mathsfbfsl{\\vartheta}"
+},
+	"𝟆": {
+	math: "\\mathsfbfsl{\\varkappa}"
+},
+	"𝟇": {
+	math: "\\mathsfbfsl{\\phi}"
+},
+	"𝟈": {
+	math: "\\mathsfbfsl{\\varrho}"
+},
+	"𝟉": {
+	math: "\\mathsfbfsl{\\varpi}"
+},
+	"𝟊": {
+	math: "\\mbfDigamma"
+},
+	"𝟋": {
+	math: "\\mbfdigamma"
+},
+	"𝟎": {
+	math: "\\mathbf{0}"
+},
+	"𝟏": {
+	math: "\\mathbf{1}"
+},
+	"𝟐": {
+	math: "\\mathbf{2}"
+},
+	"𝟑": {
+	math: "\\mathbf{3}"
+},
+	"𝟒": {
+	math: "\\mathbf{4}"
+},
+	"𝟓": {
+	math: "\\mathbf{5}"
+},
+	"𝟔": {
+	math: "\\mathbf{6}"
+},
+	"𝟕": {
+	math: "\\mathbf{7}"
+},
+	"𝟖": {
+	math: "\\mathbf{8}"
+},
+	"𝟗": {
+	math: "\\mathbf{9}"
+},
+	"𝟘": {
+	math: "\\mathbb{0}"
+},
+	"𝟙": {
+	math: "\\mathbb{1}"
+},
+	"𝟚": {
+	math: "\\mathbb{2}"
+},
+	"𝟛": {
+	math: "\\mathbb{3}"
+},
+	"𝟜": {
+	math: "\\mathbb{4}"
+},
+	"𝟝": {
+	math: "\\mathbb{5}"
+},
+	"𝟞": {
+	math: "\\mathbb{6}"
+},
+	"𝟟": {
+	math: "\\mathbb{7}"
+},
+	"𝟠": {
+	math: "\\mathbb{8}"
+},
+	"𝟡": {
+	math: "\\mathbb{9}"
+},
+	"𝟱": {
+	math: "\\mathsf{0}"
+},
+	"𝟣": {
+	math: "\\mathsf{1}"
+},
+	"đŸ€": {
+	math: "\\mathsf{2}"
+},
+	"đŸ„": {
+	math: "\\mathsf{3}"
+},
+	"𝟩": {
+	math: "\\mathsf{4}"
+},
+	"𝟧": {
+	math: "\\mathsf{5}"
+},
+	"𝟹": {
+	math: "\\mathsf{6}"
+},
+	"đŸ©": {
+	math: "\\mathsf{7}"
+},
+	"đŸȘ": {
+	math: "\\mathsf{8}"
+},
+	"đŸ«": {
+	math: "\\mathsf{9}"
+},
+	"𝟬": {
+	math: "\\mathsfbf{0}"
+},
+	"𝟭": {
+	math: "\\mathsfbf{1}"
+},
+	"𝟼": {
+	math: "\\mathsfbf{2}"
+},
+	"𝟯": {
+	math: "\\mathsfbf{3}"
+},
+	"𝟰": {
+	math: "\\mathsfbf{4}"
+},
+	"đŸ±": {
+	math: "\\mathsfbf{5}"
+},
+	"đŸČ": {
+	math: "\\mathsfbf{6}"
+},
+	"𝟳": {
+	math: "\\mathsfbf{7}"
+},
+	"𝟮": {
+	math: "\\mathsfbf{8}"
+},
+	"đŸ”": {
+	math: "\\mathsfbf{9}"
+},
+	"đŸ¶": {
+	math: "\\mathtt{0}"
+},
+	"đŸ·": {
+	math: "\\mathtt{1}"
+},
+	"𝟾": {
+	math: "\\mathtt{2}"
+},
+	"đŸč": {
+	math: "\\mathtt{3}"
+},
+	"đŸș": {
+	math: "\\mathtt{4}"
+},
+	"đŸ»": {
+	math: "\\mathtt{5}"
+},
+	"đŸŒ": {
+	math: "\\mathtt{6}"
+},
+	"đŸœ": {
+	math: "\\mathtt{7}"
+},
+	"đŸŸ": {
+	math: "\\mathtt{8}"
+},
+	"𝟿": {
+	math: "\\mathtt{9}"
+}
+};
+
+var $$1 = {
+	math: "\\$",
+	text: "\\$"
+};
+var _$1 = {
+	math: "\\_",
+	text: "\\_"
+};
+var require$$1 = {
+	"#": {
+	math: "\\#",
+	text: "\\#"
+},
+	$: $$1,
+	"%": {
+	math: "\\%",
+	text: "\\%"
+},
+	"&": {
+	math: "\\&",
+	text: "\\&"
+},
+	"/​": {
+	text: "{\\slash}"
+},
+	"<": {
+	math: "<"
+},
+	">": {
+	math: ">"
+},
+	"\\": {
+	math: "\\backslash",
+	text: "{\\textbackslash}"
+},
+	"^": {
+	math: "\\sphat",
+	text: "\\^"
+},
+	_: _$1,
+	"iïž aïžĄ": {
+	text: "\\t{ia}"
+},
+	"{": {
+	math: "\\lbrace",
+	text: "\\{"
+},
+	"}": {
+	math: "\\rbrace",
+	text: "\\}"
+},
+	"~": {
+	math: "\\sptilde",
+	text: "{\\textasciitilde}"
+},
+	" ": {
+	math: "~",
+	space: true,
+	text: "~"
+},
+	"ÂĄ": {
+	text: "{\\textexclamdown}"
+},
+	"Âą": {
+	math: "\\cent",
+	text: "{\\textcent}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"ÂŁ": {
+	math: "\\pounds",
+	text: "{\\textsterling}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"€": {
+	text: "{\\textcurrency}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"„": {
+	math: "\\yen",
+	text: "{\\textyen}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"Š": {
+	text: "{\\textbrokenbar}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"§": {
+	text: "{\\textsection}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"š": {
+	math: "\\spddot",
+	text: "{\\textasciidieresis}"
+},
+	"©": {
+	text: "{\\textcopyright}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"ÂȘ": {
+	text: "{\\textordfeminine}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"«": {
+	text: "{\\guillemotleft}"
+},
+	"ÂŹ": {
+	math: "\\lnot"
+},
+	"­": {
+	math: "\\-",
+	text: "\\-"
+},
+	"Âź": {
+	math: "\\circledR",
+	text: "{\\textregistered}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"ÂŻ": {
+	text: "{\\textasciimacron}"
+},
+	"°": {
+	math: "^\\circ",
+	text: "{\\textdegree}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"±": {
+	math: "\\pm"
+},
+	"ÂČ": {
+	math: "^{2}"
+},
+	"Âł": {
+	math: "^{3}"
+},
+	"ÂŽ": {
+	text: "{\\textasciiacute}"
+},
+	"”": {
+	text: "{\\textmu}"
+},
+	"¶": {
+	text: "{\\textparagraph}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"·": {
+	math: "\\cdot"
+},
+	"ž": {
+	text: "{\\c}"
+},
+	"Âč": {
+	math: "^{1}"
+},
+	"Âș": {
+	text: "{\\textordmasculine}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"»": {
+	text: "{\\guillemotright}"
+},
+	"Œ": {
+	math: "\\frac{1}{4}"
+},
+	"œ": {
+	math: "\\frac{1}{2}"
+},
+	"Ÿ": {
+	math: "\\frac{3}{4}"
+},
+	"Âż": {
+	text: "{\\textquestiondown}"
+},
+	"À": {
+	text: "{\\`A}"
+},
+	"Á": {
+	text: "{\\'A}"
+},
+	"Â": {
+	text: "{\\^A}"
+},
+	"Ã": {
+	text: "{\\~A}"
+},
+	"Ä": {
+	text: "{\\\"A}"
+},
+	"Å": {
+	text: "{\\AA}"
+},
+	"Æ": {
+	text: "{\\AE}"
+},
+	"Ç": {
+	text: "{\\c C}"
+},
+	"È": {
+	text: "{\\`E}"
+},
+	"É": {
+	text: "{\\'E}"
+},
+	"Ê": {
+	text: "{\\^E}"
+},
+	"Ë": {
+	text: "{\\\"E}"
+},
+	"Ì": {
+	text: "{\\`I}"
+},
+	"Í": {
+	text: "{\\'I}"
+},
+	"Î": {
+	text: "{\\^I}"
+},
+	"Ï": {
+	text: "{\\\"I}"
+},
+	"Ð": {
+	text: "{\\DH}"
+},
+	"Ñ": {
+	text: "{\\~N}"
+},
+	"Ò": {
+	text: "{\\`O}"
+},
+	"Ó": {
+	text: "{\\'O}"
+},
+	"Ô": {
+	text: "{\\^O}"
+},
+	"Õ": {
+	text: "{\\~O}"
+},
+	"Ö": {
+	text: "{\\\"O}"
+},
+	"×": {
+	math: "\\times",
+	text: "{\\texttimes}"
+},
+	"Ø": {
+	text: "{\\O}"
+},
+	"Ù": {
+	text: "{\\`U}"
+},
+	"Ú": {
+	text: "{\\'U}"
+},
+	"Û": {
+	text: "{\\^U}"
+},
+	"Ü": {
+	text: "{\\\"U}"
+},
+	"Ý": {
+	text: "{\\'Y}"
+},
+	"Þ": {
+	text: "{\\TH}"
+},
+	"ß": {
+	text: "{\\ss}"
+},
+	"Ă ": {
+	text: "{\\`a}"
+},
+	"ĂĄ": {
+	text: "{\\'a}"
+},
+	"Ăą": {
+	text: "{\\^a}"
+},
+	"ĂŁ": {
+	text: "{\\~a}"
+},
+	"Ă€": {
+	text: "{\\\"a}"
+},
+	"Ă„": {
+	text: "{\\aa}"
+},
+	"ĂŠ": {
+	text: "{\\ae}"
+},
+	"ç": {
+	text: "{\\c c}"
+},
+	"Ăš": {
+	text: "{\\`e}"
+},
+	"Ă©": {
+	text: "{\\'e}"
+},
+	"ĂȘ": {
+	text: "{\\^e}"
+},
+	"Ă«": {
+	text: "{\\\"e}"
+},
+	"ĂŹ": {
+	text: "{\\`i}"
+},
+	"Ă­": {
+	text: "{\\'i}"
+},
+	"Ăź": {
+	text: "{\\^i}"
+},
+	"ĂŻ": {
+	text: "{\\\"i}"
+},
+	"Ă°": {
+	math: "\\eth",
+	mathpackages: [
+		"amssymb",
+		"arevmath"
+	],
+	text: "{\\dh}"
+},
+	"ñ": {
+	text: "{\\~n}"
+},
+	"ĂČ": {
+	text: "{\\`o}"
+},
+	"Ăł": {
+	text: "{\\'o}"
+},
+	"ĂŽ": {
+	text: "{\\^o}"
+},
+	"Ă”": {
+	text: "{\\~o}"
+},
+	"ö": {
+	text: "{\\\"o}"
+},
+	"Ă·": {
+	math: "\\div"
+},
+	"Ăž": {
+	text: "{\\o}"
+},
+	"Ăč": {
+	text: "{\\`u}"
+},
+	"Ăș": {
+	text: "{\\'u}"
+},
+	"Ă»": {
+	text: "{\\^u}"
+},
+	"ĂŒ": {
+	text: "{\\\"u}"
+},
+	"Ăœ": {
+	text: "{\\'y}"
+},
+	"ĂŸ": {
+	text: "{\\th}"
+},
+	"Ăż": {
+	text: "{\\\"y}"
+},
+	"Ā": {
+	text: "{\\=A}"
+},
+	"ā": {
+	text: "{\\=a}"
+},
+	"Ă": {
+	text: "{\\u A}"
+},
+	"ă": {
+	text: "{\\u a}"
+},
+	"Ą": {
+	text: "{\\k{A}}"
+},
+	"ą": {
+	text: "{\\k{a}}"
+},
+	"Ć": {
+	text: "{\\'C}"
+},
+	"ć": {
+	text: "{\\'c}"
+},
+	"Ĉ": {
+	text: "{\\^C}"
+},
+	"ĉ": {
+	text: "{\\^c}"
+},
+	"Ċ": {
+	text: "{\\.C}"
+},
+	"ċ": {
+	text: "{\\.c}"
+},
+	"Č": {
+	text: "{\\v C}"
+},
+	"č": {
+	text: "{\\v c}"
+},
+	"Ď": {
+	text: "{\\v D}"
+},
+	"ď": {
+	text: "{\\v d}"
+},
+	"Đ": {
+	text: "{\\DJ}"
+},
+	"đ": {
+	text: "{\\dj}"
+},
+	"Ē": {
+	text: "{\\=E}"
+},
+	"ē": {
+	text: "{\\=e}"
+},
+	"Ĕ": {
+	text: "{\\u E}"
+},
+	"ĕ": {
+	text: "{\\u e}"
+},
+	"Ė": {
+	text: "{\\.E}"
+},
+	"ė": {
+	text: "{\\.e}"
+},
+	"Ę": {
+	text: "{\\k{E}}"
+},
+	"ę": {
+	text: "{\\k{e}}"
+},
+	"Ě": {
+	text: "{\\v E}"
+},
+	"ě": {
+	text: "{\\v e}"
+},
+	"Ĝ": {
+	text: "{\\^G}"
+},
+	"ĝ": {
+	text: "{\\^g}"
+},
+	"Ğ": {
+	text: "{\\u G}"
+},
+	"ğ": {
+	text: "{\\u g}"
+},
+	"Ä ": {
+	text: "{\\.G}"
+},
+	"ÄĄ": {
+	text: "{\\.g}"
+},
+	"Äą": {
+	text: "{\\c G}"
+},
+	"ÄŁ": {
+	text: "{\\c g}"
+},
+	"Ä€": {
+	text: "{\\^H}"
+},
+	"Ä„": {
+	text: "{\\^h}"
+},
+	"ÄŠ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char40}"
+},
+	"ħ": {
+	math: "\\Elzxh"
+},
+	"Äš": {
+	text: "{\\~I}"
+},
+	"Ä©": {
+	text: "{\\~i}"
+},
+	"ÄȘ": {
+	text: "{\\=I}"
+},
+	"Ä«": {
+	text: "{\\=i}"
+},
+	"ÄŹ": {
+	text: "{\\u I}"
+},
+	"Ä­": {
+	text: "{\\u \\i}"
+},
+	"Äź": {
+	text: "{\\k{I}}"
+},
+	"ÄŻ": {
+	text: "{\\k{i}}"
+},
+	"Ä°": {
+	text: "{\\.I}"
+},
+	"ı": {
+	math: "\\imath",
+	text: "{\\i}"
+},
+	"ÄČ": {
+	text: "IJ"
+},
+	"Äł": {
+	text: "ij"
+},
+	"ÄŽ": {
+	text: "{\\^J}"
+},
+	"Ä”": {
+	text: "{\\^\\j}"
+},
+	"Ķ": {
+	text: "{\\c K}"
+},
+	"Ä·": {
+	text: "{\\c k}"
+},
+	"Äž": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char91}"
+},
+	"Äč": {
+	text: "{\\'L}"
+},
+	"Äș": {
+	text: "{\\'l}"
+},
+	"Ä»": {
+	text: "{\\c L}"
+},
+	"Č": {
+	text: "{\\c l}"
+},
+	"Ĝ": {
+	text: "{\\v L}"
+},
+	"ÄŸ": {
+	text: "{\\v l}"
+},
+	"Äż": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char201}"
+},
+	"ƀ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char202}"
+},
+	"Ɓ": {
+	text: "{\\L}"
+},
+	"Ƃ": {
+	text: "{\\l}"
+},
+	"ƃ": {
+	text: "{\\'N}"
+},
+	"Ƅ": {
+	text: "{\\'n}"
+},
+	"ƅ": {
+	text: "{\\c N}"
+},
+	"Ɔ": {
+	text: "{\\c n}"
+},
+	"Ƈ": {
+	text: "{\\v N}"
+},
+	"ƈ": {
+	text: "{\\v n}"
+},
+	"Ɖ": {
+	text: "'n"
+},
+	"Ɗ": {
+	text: "{\\NG}"
+},
+	"Ƌ": {
+	text: "{\\ng}"
+},
+	"ƌ": {
+	text: "{\\=O}"
+},
+	"ƍ": {
+	text: "{\\=o}"
+},
+	"Ǝ": {
+	text: "{\\u O}"
+},
+	"Ə": {
+	text: "{\\u o}"
+},
+	"Ɛ": {
+	text: "{\\H O}"
+},
+	"Ƒ": {
+	text: "{\\H o}"
+},
+	"ƒ": {
+	text: "{\\OE}"
+},
+	"Ɠ": {
+	text: "{\\oe}"
+},
+	"Ɣ": {
+	text: "{\\'R}"
+},
+	"ƕ": {
+	text: "{\\'r}"
+},
+	"Ɩ": {
+	text: "{\\c R}"
+},
+	"Ɨ": {
+	text: "{\\c r}"
+},
+	"Ƙ": {
+	text: "{\\v R}"
+},
+	"ƙ": {
+	text: "{\\v r}"
+},
+	"ƚ": {
+	text: "{\\'S}"
+},
+	"ƛ": {
+	text: "{\\'s}"
+},
+	"Ɯ": {
+	text: "{\\^S}"
+},
+	"Ɲ": {
+	text: "{\\^s}"
+},
+	"ƞ": {
+	text: "{\\c S}"
+},
+	"Ɵ": {
+	text: "{\\c s}"
+},
+	"Ć ": {
+	text: "{\\v S}"
+},
+	"ĆĄ": {
+	text: "{\\v s}"
+},
+	"Ćą": {
+	text: "{\\c T}"
+},
+	"ĆŁ": {
+	text: "{\\c t}"
+},
+	"Ć€": {
+	text: "{\\v T}"
+},
+	"Ć„": {
+	text: "{\\v t}"
+},
+	"ĆŠ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char47}"
+},
+	"Ƨ": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char63}"
+},
+	"Ćš": {
+	text: "{\\~U}"
+},
+	"Ć©": {
+	text: "{\\~u}"
+},
+	"ĆȘ": {
+	text: "{\\=U}"
+},
+	"Ć«": {
+	text: "{\\=u}"
+},
+	"ĆŹ": {
+	text: "{\\u U}"
+},
+	"Ć­": {
+	text: "{\\u u}"
+},
+	"Ćź": {
+	text: "{\\r{U}}"
+},
+	"ĆŻ": {
+	text: "{\\r{u}}"
+},
+	"Ć°": {
+	text: "{\\H U}"
+},
+	"Ʊ": {
+	text: "{\\H u}"
+},
+	"ĆČ": {
+	text: "{\\k{U}}"
+},
+	"Ćł": {
+	text: "{\\k{u}}"
+},
+	"ĆŽ": {
+	text: "{\\^W}"
+},
+	"Ć”": {
+	text: "{\\^w}"
+},
+	"ƶ": {
+	text: "{\\^Y}"
+},
+	"Ć·": {
+	text: "{\\^y}"
+},
+	"Ćž": {
+	text: "{\\\"Y}"
+},
+	"Ćč": {
+	text: "{\\'Z}"
+},
+	"Ćș": {
+	text: "{\\'z}"
+},
+	"Ć»": {
+	text: "{\\.Z}"
+},
+	"ĆŒ": {
+	text: "{\\.z}"
+},
+	"Ćœ": {
+	text: "{\\v Z}"
+},
+	"ĆŸ": {
+	text: "{\\v z}"
+},
+	"Ćż": {
+	text: "s"
+},
+	"ƒ": {
+	math: "f"
+},
+	"ƕ": {
+	text: "{\\texthvlig}"
+},
+	"ƞ": {
+	text: "{\\textnrleg}"
+},
+	"ÆȘ": {
+	text: "{\\textesh}"
+},
+	"Æ”": {
+	math: "\\Zbar"
+},
+	"Æș": {
+	text: "{\\fontencoding{LELA}\\selectfont\\char195}"
+},
+	"ǂ": {
+	text: "{\\textdoublepipe}"
+},
+	"Ǎ": {
+	text: "{\\v A}"
+},
+	"ǎ": {
+	text: "{\\v a}"
+},
+	"Ǐ": {
+	text: "{\\v I}"
+},
+	"ǐ": {
+	text: "{\\v i}"
+},
+	"Ǒ": {
+	text: "{\\v O}"
+},
+	"ǒ": {
+	text: "{\\v o}"
+},
+	"Ǔ": {
+	text: "{\\v U}"
+},
+	"ǔ": {
+	text: "{\\v u}"
+},
+	"ÇŠ": {
+	text: "{\\v G}"
+},
+	"ǧ": {
+	text: "{\\v g}"
+},
+	"Çš": {
+	text: "{\\v K}"
+},
+	"Ç©": {
+	text: "{\\v k}"
+},
+	"ÇȘ": {
+	text: "{\\k{O}}"
+},
+	"Ç«": {
+	text: "{\\k{o}}"
+},
+	"Ç°": {
+	text: "{\\v j}"
+},
+	"ÇŽ": {
+	text: "{\\'G}"
+},
+	"Ç”": {
+	text: "{\\'g}"
+},
+	"Èš": {
+	text: "{\\c E}"
+},
+	"È©": {
+	text: "{\\c e}"
+},
+	"È·": {
+	math: "\\jmath"
+},
+	"ɐ": {
+	math: "\\Elztrna"
+},
+	"ɒ": {
+	math: "\\Elztrnsa"
+},
+	"ɔ": {
+	math: "\\Elzopeno"
+},
+	"ɖ": {
+	math: "\\Elzrtld"
+},
+	"ɘ": {
+	text: "{\\fontencoding{LEIP}\\selectfont\\char61}"
+},
+	"ə": {
+	math: "\\Elzschwa"
+},
+	"ɛ": {
+	math: "\\varepsilon"
+},
+	"ÉĄ": {
+	text: "g"
+},
+	"ÉŁ": {
+	math: "\\Elzpgamma"
+},
+	"É€": {
+	math: "\\Elzpbgam"
+},
+	"É„": {
+	math: "\\Elztrnh"
+},
+	"ÉŹ": {
+	math: "\\Elzbtdl"
+},
+	"É­": {
+	math: "\\Elzrtll"
+},
+	"ÉŻ": {
+	math: "\\Elztrnm"
+},
+	"É°": {
+	math: "\\Elztrnmlr"
+},
+	"ɱ": {
+	math: "\\Elzltlmr"
+},
+	"ÉČ": {
+	text: "{\\Elzltln}"
+},
+	"Éł": {
+	math: "\\Elzrtln"
+},
+	"É·": {
+	math: "\\Elzclomeg"
+},
+	"Éž": {
+	text: "{\\textphi}"
+},
+	"Éč": {
+	math: "\\Elztrnr"
+},
+	"Éș": {
+	math: "\\Elztrnrl"
+},
+	"É»": {
+	math: "\\Elzrttrnr"
+},
+	"Ɍ": {
+	math: "\\Elzrl"
+},
+	"ɜ": {
+	math: "\\Elzrtlr"
+},
+	"ÉŸ": {
+	math: "\\Elzfhr"
+},
+	"Éż": {
+	text: "{\\fontencoding{LEIP}\\selectfont\\char202}"
+},
+	"ʂ": {
+	math: "\\Elzrtls"
+},
+	"ʃ": {
+	math: "\\Elzesh"
+},
+	"ʇ": {
+	math: "\\Elztrnt"
+},
+	"ʈ": {
+	math: "\\Elzrtlt"
+},
+	"ʊ": {
+	math: "\\Elzpupsil"
+},
+	"ʋ": {
+	math: "\\Elzpscrv"
+},
+	"ʌ": {
+	math: "\\Elzinvv"
+},
+	"ʍ": {
+	math: "\\Elzinvw"
+},
+	"ʎ": {
+	math: "\\Elztrny"
+},
+	"ʐ": {
+	math: "\\Elzrtlz"
+},
+	"ʒ": {
+	math: "\\Elzyogh"
+},
+	"ʔ": {
+	math: "\\Elzglst"
+},
+	"ʕ": {
+	math: "\\Elzreglst"
+},
+	"ʖ": {
+	math: "\\Elzinglst"
+},
+	"ʞ": {
+	text: "{\\textturnk}"
+},
+	"Ê€": {
+	math: "\\Elzdyogh"
+},
+	"ʧ": {
+	math: "\\Elztesh"
+},
+	"Ê°": {
+	math: "^{h}",
+	text: "\\textsuperscript{h}"
+},
+	"ÊČ": {
+	math: "^{j}",
+	text: "\\textsuperscript{j}"
+},
+	"Êł": {
+	math: "^{r}",
+	text: "\\textsuperscript{r}"
+},
+	"Ê·": {
+	math: "^{w}",
+	text: "\\textsuperscript{w}"
+},
+	"Êž": {
+	math: "^{y}",
+	text: "\\textsuperscript{y}"
+},
+	"Êč": {
+	text: "'"
+},
+	"Ê»": {
+	text: "'"
+},
+	"ʌ": {
+	text: "'"
+},
+	"ʜ": {
+	text: "'"
+},
+	"Êż": {
+	text: "{\\lasp}",
+	textpackages: [
+		"mathscinet"
+	]
+},
+	"ˆ": {
+	text: "{\\textasciicircum}"
+},
+	"ˇ": {
+	text: "{\\textasciicaron}"
+},
+	"ˈ": {
+	math: "\\Elzverts"
+},
+	"ˉ": {
+	text: "-"
+},
+	"ˌ": {
+	math: "\\Elzverti"
+},
+	"ː": {
+	math: "\\Elzlmrk"
+},
+	"ˑ": {
+	math: "\\Elzhlmrk"
+},
+	"˒": {
+	math: "\\Elzsbrhr"
+},
+	"˓": {
+	math: "\\Elzsblhr"
+},
+	"˔": {
+	math: "\\Elzrais"
+},
+	"˕": {
+	math: "\\Elzlow"
+},
+	"˘": {
+	text: "{\\textasciibreve}"
+},
+	"˙": {
+	text: "{\\textperiodcentered}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"˚": {
+	text: "{\\r{}}"
+},
+	"˛": {
+	text: "{\\k{}}"
+},
+	"˜": {
+	text: "{\\texttildelow}"
+},
+	"˝": {
+	text: "{\\H{}}"
+},
+	"ËĄ": {
+	math: "^{l}",
+	text: "\\textsuperscript{l}"
+},
+	"Ëą": {
+	math: "^{s}",
+	text: "\\textsuperscript{s}"
+},
+	"ËŁ": {
+	math: "^{x}",
+	text: "\\textsuperscript{x}"
+},
+	"Ë„": {
+	text: "\\tone{55}"
+},
+	"ËŠ": {
+	text: "\\tone{44}"
+},
+	"˧": {
+	text: "\\tone{33}"
+},
+	"Ëš": {
+	text: "\\tone{22}"
+},
+	"Ë©": {
+	text: "\\tone{11}"
+},
+	"̀": {
+	math: "\\grave",
+	combiningdiacritic: true,
+	text: "\\`"
+},
+	"̀̄": {
+	text: "{\\textgravemacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄̀": {
+	text: "{\\textgravemacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̀̇": {
+	text: "{\\textgravedot}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̀": {
+	text: "{\\textgravedot}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"́": {
+	math: "\\acute",
+	combiningdiacritic: true,
+	text: "\\'"
+},
+	"́̄": {
+	text: "{\\textacutemacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄́": {
+	text: "{\\textacutemacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"́̌": {
+	text: "{\\textacutewedge}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̌́": {
+	text: "{\\textacutewedge}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̂": {
+	math: "\\hat",
+	combiningdiacritic: true,
+	text: "\\^"
+},
+	"̂̇": {
+	text: "{\\textcircumdot}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̂": {
+	text: "{\\textcircumdot}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̃": {
+	math: "\\tilde",
+	combiningdiacritic: true,
+	text: "\\~"
+},
+	"̃̇": {
+	text: "{\\texttildedot}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̃": {
+	text: "{\\texttildedot}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄": {
+	math: "\\bar",
+	combiningdiacritic: true,
+	text: "\\="
+},
+	"̅": {
+	math: "\\overline",
+	combiningdiacritic: true
+},
+	"̆": {
+	math: "\\breve",
+	combiningdiacritic: true,
+	text: "{\\u}"
+},
+	"̆̄": {
+	text: "{\\textbrevemacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄̆": {
+	text: "{\\textbrevemacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇": {
+	math: "\\dot",
+	combiningdiacritic: true,
+	text: "\\."
+},
+	"̇́": {
+	text: "{\\textdotacute}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"́̇": {
+	text: "{\\textdotacute}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̇̆": {
+	text: "{\\textdotbreve}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̆̇": {
+	text: "{\\textdotbreve}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̈": {
+	math: "\\ddot",
+	combiningdiacritic: true,
+	text: "\\\""
+},
+	"̉": {
+	math: "\\ovhook"
+},
+	"̊": {
+	math: "\\mathring",
+	combiningdiacritic: true,
+	text: "{\\r}"
+},
+	"̊̄": {
+	text: "{\\textringmacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̄̊": {
+	text: "{\\textringmacron}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̋": {
+	text: "{\\H}",
+	combiningdiacritic: true
+},
+	"̌": {
+	math: "\\check",
+	text: "{\\v}",
+	combiningdiacritic: true
+},
+	"̍": {
+	text: "{\\textvbaraccent}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̎": {
+	text: "{\\textdoublevbaraccent}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̏": {
+	text: "{\\textdoublegrave}",
+	combiningdiacritic: true
+},
+	"̐": {
+	text: "{\\textdotbreve}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̑": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char177}"
+},
+	"̒": {
+	math: "\\oturnedcomma"
+},
+	"̕": {
+	math: "\\ocommatopright"
+},
+	"̖": {
+	text: "{\\textsubgrave}",
+	combiningdiacritic: true
+},
+	"̘": {
+	text: "{\\textadvancing}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̙": {
+	text: "{\\textretracting}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̚": {
+	math: "\\droang",
+	text: "{\\textcorner}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̜": {
+	text: "{\\textsublhalfring}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̝": {
+	text: "{\\textraising}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̞": {
+	text: "{\\textlowering}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̟": {
+	text: "{\\textsubplus}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌĄ": {
+	math: "\\Elzpalh"
+},
+	"Ìą": {
+	text: "{\\Elzrh}"
+},
+	"ÌŁ": {
+	text: "{\\d}",
+	combiningdiacritic: true
+},
+	"Ì€": {
+	text: "{\\textsubumlaut}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì„": {
+	text: "{\\textsubring}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̧": {
+	text: "{\\c}",
+	combiningdiacritic: true
+},
+	"Ìš": {
+	text: "{\\k}",
+	combiningdiacritic: true
+},
+	"Ì©": {
+	text: "{\\textsyllabic}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌȘ": {
+	math: "\\Elzsbbrg",
+	text: "{\\textsubbridge}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì«": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char203}"
+},
+	"ÌŹ": {
+	text: "{\\textsubwedge}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌŻ": {
+	text: "{\\textsubarch}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì°": {
+	math: "\\utilde",
+	text: "{\\textsubtilde}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̱": {
+	math: "\\underbar",
+	combiningdiacritic: true,
+	text: "{\\textsubbar}",
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÌČ": {
+	math: "\\underline"
+},
+	"ÌŽ": {
+	text: "{\\textsuperimposetilde}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì”": {
+	text: "{\\Elzxl}"
+},
+	"̶": {
+	text: "{\\Elzbar}"
+},
+	"Ì·": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char215}"
+},
+	"Ìž": {
+	math: "\\not"
+},
+	"Ìč": {
+	text: "{\\textsubrhalfring}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ìș": {
+	text: "{\\textinvsubbridge}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"Ì»": {
+	text: "{\\textsubsquare}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̌": {
+	text: "{\\textseagull}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"̜": {
+	text: "{\\textovercross}",
+	combiningdiacritic: true,
+	textpackages: [
+		"tipa"
+	]
+},
+	"ÍĄ": {
+	text: "{\\fontencoding{LECO}\\selectfont\\char225}"
+},
+	"ÍŽ": {
+	text: "'"
+},
+	"Í”": {
+	text: ","
+},
+	"ÍŸ": {
+	text: ";"
+},
+	"Ά": {
+	text: "{\\'A}"
+},
+	"Έ": {
+	text: "{\\'E}"
+},
+	"Ή": {
+	text: "{\\'H}"
+},
+	"Ί": {
+	text: "{\\'{}I}"
+},
+	"Ό": {
+	text: "{\\'{}O}"
+},
+	"Ύ": {
+	math: "\\mathrm{'Y}"
+},
+	"Ώ": {
+	math: "\\mathrm{'\\Omega}"
+},
+	"ΐ": {
+	math: "\\acute{\\ddot{\\iota}}"
+},
+	"Α": {
+	math: "A"
+},
+	"Β": {
+	math: "B"
+},
+	"Γ": {
+	math: "\\Gamma"
+},
+	"Δ": {
+	math: "\\Delta"
+},
+	"Ε": {
+	math: "E"
+},
+	"Ζ": {
+	math: "Z"
+},
+	"Η": {
+	math: "H"
+},
+	"Θ": {
+	math: "\\Theta"
+},
+	"Ι": {
+	math: "I"
+},
+	"Κ": {
+	math: "K"
+},
+	"Λ": {
+	math: "\\Lambda"
+},
+	"Μ": {
+	math: "M"
+},
+	"Ν": {
+	math: "N"
+},
+	"Ξ": {
+	math: "\\Xi"
+},
+	"Ο": {
+	math: "O"
+},
+	"Π": {
+	math: "\\Pi"
+},
+	"ÎĄ": {
+	math: "P"
+},
+	"ÎŁ": {
+	math: "\\Sigma"
+},
+	"΀": {
+	math: "T"
+},
+	"΄": {
+	math: "\\Upsilon"
+},
+	"Ί": {
+	math: "\\Phi"
+},
+	"Χ": {
+	math: "X"
+},
+	"Κ": {
+	math: "\\Psi"
+},
+	"Ω": {
+	math: "\\Omega"
+},
+	"ÎȘ": {
+	math: "\\mathrm{\\ddot{I}}"
+},
+	"Ϋ": {
+	math: "\\mathrm{\\ddot{Y}}"
+},
+	"ÎŹ": {
+	text: "{\\'$\\alpha$}"
+},
+	"έ": {
+	math: "\\acute{\\epsilon}"
+},
+	"Îź": {
+	math: "\\acute{\\eta}"
+},
+	"ÎŻ": {
+	math: "\\acute{\\iota}"
+},
+	"ΰ": {
+	math: "\\acute{\\ddot{\\upsilon}}"
+},
+	"α": {
+	math: "\\alpha"
+},
+	"ÎČ": {
+	math: "\\beta"
+},
+	"Îł": {
+	math: "\\gamma"
+},
+	"ÎŽ": {
+	math: "\\delta"
+},
+	"Δ": {
+	math: "\\epsilon"
+},
+	"ζ": {
+	math: "\\zeta"
+},
+	"η": {
+	math: "\\eta"
+},
+	"Ξ": {
+	math: "\\theta",
+	text: "{\\texttheta}"
+},
+	"Îč": {
+	math: "\\iota"
+},
+	"Îș": {
+	math: "\\kappa"
+},
+	"λ": {
+	math: "\\lambda"
+},
+	"Ό": {
+	math: "\\mu"
+},
+	"Μ": {
+	math: "\\nu"
+},
+	"Ο": {
+	math: "\\xi"
+},
+	"Îż": {
+	math: "o"
+},
+	"π": {
+	math: "\\pi"
+},
+	"ρ": {
+	math: "\\rho"
+},
+	"ς": {
+	math: "\\varsigma"
+},
+	"σ": {
+	math: "\\sigma"
+},
+	"τ": {
+	math: "\\tau"
+},
+	"υ": {
+	math: "\\upsilon"
+},
+	"φ": {
+	math: "\\varphi"
+},
+	"χ": {
+	math: "\\chi"
+},
+	"ψ": {
+	math: "\\psi"
+},
+	"ω": {
+	math: "\\omega"
+},
+	"ϊ": {
+	math: "\\ddot{\\iota}"
+},
+	"ϋ": {
+	math: "\\ddot{\\upsilon}"
+},
+	"ό": {
+	text: "{\\'o}"
+},
+	"ύ": {
+	math: "\\acute{\\upsilon}"
+},
+	"ώ": {
+	math: "\\acute{\\omega}"
+},
+	"ϐ": {
+	math: "\\varbeta",
+	text: "\\Pisymbol{ppi022}{87}"
+},
+	"ϑ": {
+	math: "\\vartheta",
+	text: "{\\textvartheta}"
+},
+	"ϒ": {
+	math: "\\Upsilon"
+},
+	"ϕ": {
+	math: "\\phi"
+},
+	"ϖ": {
+	math: "\\varpi"
+},
+	"Ϙ": {
+	math: "\\Qoppa"
+},
+	"ϙ": {
+	math: "\\qoppa"
+},
+	"Ϛ": {
+	math: "\\Stigma"
+},
+	"ϛ": {
+	math: "\\stigma"
+},
+	"Ϝ": {
+	math: "\\Digamma"
+},
+	"ϝ": {
+	math: "\\digamma"
+},
+	"Ϟ": {
+	math: "\\Koppa"
+},
+	"ϟ": {
+	math: "\\koppa"
+},
+	"Ï ": {
+	math: "\\Sampi"
+},
+	"ÏĄ": {
+	math: "\\sampi"
+},
+	"Ï°": {
+	math: "\\varkappa"
+},
+	"ϱ": {
+	math: "\\varrho"
+},
+	"ÏŽ": {
+	math: "\\upvarTheta",
+	text: "{\\textTheta}"
+},
+	"Ï”": {
+	math: "\\epsilon"
+},
+	"϶": {
+	math: "\\backepsilon"
+},
+	"Ё": {
+	text: "{\\cyrchar\\CYRYO}"
+},
+	"Ђ": {
+	text: "{\\cyrchar\\CYRDJE}"
+},
+	"Ѓ": {
+	text: "{\\cyrchar{\\'\\CYRG}}"
+},
+	"Є": {
+	text: "{\\cyrchar\\CYRIE}"
+},
+	"Ѕ": {
+	text: "{\\cyrchar\\CYRDZE}"
+},
+	"І": {
+	text: "{\\cyrchar\\CYRII}"
+},
+	"Ї": {
+	text: "{\\cyrchar\\CYRYI}"
+},
+	"Ј": {
+	text: "{\\cyrchar\\CYRJE}"
+},
+	"Љ": {
+	text: "{\\cyrchar\\CYRLJE}"
+},
+	"Њ": {
+	text: "{\\cyrchar\\CYRNJE}"
+},
+	"Ћ": {
+	text: "{\\cyrchar\\CYRTSHE}"
+},
+	"Ќ": {
+	text: "{\\cyrchar{\\'\\CYRK}}"
+},
+	"Ў": {
+	text: "{\\cyrchar\\CYRUSHRT}"
+},
+	"Џ": {
+	text: "{\\cyrchar\\CYRDZHE}"
+},
+	"А": {
+	text: "{\\cyrchar\\CYRA}"
+},
+	"Б": {
+	text: "{\\cyrchar\\CYRB}"
+},
+	"В": {
+	text: "{\\cyrchar\\CYRV}"
+},
+	"Г": {
+	text: "{\\cyrchar\\CYRG}"
+},
+	"Д": {
+	text: "{\\cyrchar\\CYRD}"
+},
+	"Е": {
+	text: "{\\cyrchar\\CYRE}"
+},
+	"Ж": {
+	text: "{\\cyrchar\\CYRZH}"
+},
+	"З": {
+	text: "{\\cyrchar\\CYRZ}"
+},
+	"И": {
+	text: "{\\cyrchar\\CYRI}"
+},
+	"Й": {
+	text: "{\\cyrchar\\CYRISHRT}"
+},
+	"К": {
+	text: "{\\cyrchar\\CYRK}"
+},
+	"Л": {
+	text: "{\\cyrchar\\CYRL}"
+},
+	"М": {
+	text: "{\\cyrchar\\CYRM}"
+},
+	"Н": {
+	text: "{\\cyrchar\\CYRN}"
+},
+	"О": {
+	text: "{\\cyrchar\\CYRO}"
+},
+	"П": {
+	text: "{\\cyrchar\\CYRP}"
+},
+	"Đ ": {
+	text: "{\\cyrchar\\CYRR}"
+},
+	"ĐĄ": {
+	text: "{\\cyrchar\\CYRS}"
+},
+	"Đą": {
+	text: "{\\cyrchar\\CYRT}"
+},
+	"ĐŁ": {
+	text: "{\\cyrchar\\CYRU}"
+},
+	"Đ€": {
+	text: "{\\cyrchar\\CYRF}"
+},
+	"Đ„": {
+	text: "{\\cyrchar\\CYRH}"
+},
+	"ĐŠ": {
+	text: "{\\cyrchar\\CYRC}"
+},
+	"Ч": {
+	text: "{\\cyrchar\\CYRCH}"
+},
+	"Đš": {
+	text: "{\\cyrchar\\CYRSH}"
+},
+	"Đ©": {
+	text: "{\\cyrchar\\CYRSHCH}"
+},
+	"ĐȘ": {
+	text: "{\\cyrchar\\CYRHRDSN}"
+},
+	"Đ«": {
+	text: "{\\cyrchar\\CYRERY}"
+},
+	"ĐŹ": {
+	text: "{\\cyrchar\\CYRSFTSN}"
+},
+	"Đ­": {
+	text: "{\\cyrchar\\CYREREV}"
+},
+	"Đź": {
+	text: "{\\cyrchar\\CYRYU}"
+},
+	"ĐŻ": {
+	text: "{\\cyrchar\\CYRYA}"
+},
+	"Đ°": {
+	text: "{\\cyrchar\\cyra}"
+},
+	"б": {
+	text: "{\\cyrchar\\cyrb}"
+},
+	"ĐČ": {
+	text: "{\\cyrchar\\cyrv}"
+},
+	"Đł": {
+	text: "{\\cyrchar\\cyrg}"
+},
+	"ĐŽ": {
+	text: "{\\cyrchar\\cyrd}"
+},
+	"Đ”": {
+	text: "{\\cyrchar\\cyre}"
+},
+	"ж": {
+	text: "{\\cyrchar\\cyrzh}"
+},
+	"Đ·": {
+	text: "{\\cyrchar\\cyrz}"
+},
+	"Đž": {
+	text: "{\\cyrchar\\cyri}"
+},
+	"Đč": {
+	text: "{\\cyrchar\\cyrishrt}"
+},
+	"Đș": {
+	text: "{\\cyrchar\\cyrk}"
+},
+	"Đ»": {
+	text: "{\\cyrchar\\cyrl}"
+},
+	"ĐŒ": {
+	text: "{\\cyrchar\\cyrm}"
+},
+	"Đœ": {
+	text: "{\\cyrchar\\cyrn}"
+},
+	"ĐŸ": {
+	text: "{\\cyrchar\\cyro}"
+},
+	"Đż": {
+	text: "{\\cyrchar\\cyrp}"
+},
+	"р": {
+	text: "{\\cyrchar\\cyrr}"
+},
+	"с": {
+	text: "{\\cyrchar\\cyrs}"
+},
+	"т": {
+	text: "{\\cyrchar\\cyrt}"
+},
+	"у": {
+	text: "{\\cyrchar\\cyru}"
+},
+	"ф": {
+	text: "{\\cyrchar\\cyrf}"
+},
+	"х": {
+	text: "{\\cyrchar\\cyrh}"
+},
+	"ц": {
+	text: "{\\cyrchar\\cyrc}"
+},
+	"ч": {
+	text: "{\\cyrchar\\cyrch}"
+},
+	"ш": {
+	text: "{\\cyrchar\\cyrsh}"
+},
+	"щ": {
+	text: "{\\cyrchar\\cyrshch}"
+},
+	"ъ": {
+	text: "{\\cyrchar\\cyrhrdsn}"
+},
+	"ы": {
+	text: "{\\cyrchar\\cyrery}"
+},
+	"ь": {
+	text: "{\\cyrchar\\cyrsftsn}"
+},
+	"э": {
+	text: "{\\cyrchar\\cyrerev}"
+},
+	"ю": {
+	text: "{\\cyrchar\\cyryu}"
+},
+	"я": {
+	text: "{\\cyrchar\\cyrya}"
+},
+	"ё": {
+	text: "{\\cyrchar\\cyryo}"
+},
+	"ђ": {
+	text: "{\\cyrchar\\cyrdje}"
+},
+	"ѓ": {
+	text: "{\\cyrchar{\\'\\cyrg}}"
+},
+	"є": {
+	text: "{\\cyrchar\\cyrie}"
+},
+	"ѕ": {
+	text: "{\\cyrchar\\cyrdze}"
+},
+	"і": {
+	text: "{\\cyrchar\\cyrii}"
+},
+	"ї": {
+	text: "{\\cyrchar\\cyryi}"
+},
+	"ј": {
+	text: "{\\cyrchar\\cyrje}"
+},
+	"љ": {
+	text: "{\\cyrchar\\cyrlje}"
+},
+	"њ": {
+	text: "{\\cyrchar\\cyrnje}"
+},
+	"ћ": {
+	text: "{\\cyrchar\\cyrtshe}"
+},
+	"ќ": {
+	text: "{\\cyrchar{\\'\\cyrk}}"
+},
+	"ў": {
+	text: "{\\cyrchar\\cyrushrt}"
+},
+	"џ": {
+	text: "{\\cyrchar\\cyrdzhe}"
+},
+	"Ń ": {
+	text: "{\\cyrchar\\CYROMEGA}"
+},
+	"ŃĄ": {
+	text: "{\\cyrchar\\cyromega}"
+},
+	"Ńą": {
+	text: "{\\cyrchar\\CYRYAT}"
+},
+	"Ń€": {
+	text: "{\\cyrchar\\CYRIOTE}"
+},
+	"Ń„": {
+	text: "{\\cyrchar\\cyriote}"
+},
+	"ŃŠ": {
+	text: "{\\cyrchar\\CYRLYUS}"
+},
+	"ѧ": {
+	text: "{\\cyrchar\\cyrlyus}"
+},
+	"Ńš": {
+	text: "{\\cyrchar\\CYRIOTLYUS}"
+},
+	"Ń©": {
+	text: "{\\cyrchar\\cyriotlyus}"
+},
+	"ŃȘ": {
+	text: "{\\cyrchar\\CYRBYUS}"
+},
+	"ŃŹ": {
+	text: "{\\cyrchar\\CYRIOTBYUS}"
+},
+	"Ń­": {
+	text: "{\\cyrchar\\cyriotbyus}"
+},
+	"Ńź": {
+	text: "{\\cyrchar\\CYRKSI}"
+},
+	"ŃŻ": {
+	text: "{\\cyrchar\\cyrksi}"
+},
+	"Ń°": {
+	text: "{\\cyrchar\\CYRPSI}"
+},
+	"ѱ": {
+	text: "{\\cyrchar\\cyrpsi}"
+},
+	"ŃČ": {
+	text: "{\\cyrchar\\CYRFITA}"
+},
+	"ŃŽ": {
+	text: "{\\cyrchar\\CYRIZH}"
+},
+	"Ńž": {
+	text: "{\\cyrchar\\CYRUK}"
+},
+	"Ńč": {
+	text: "{\\cyrchar\\cyruk}"
+},
+	"Ńș": {
+	text: "{\\cyrchar\\CYROMEGARND}"
+},
+	"Ń»": {
+	text: "{\\cyrchar\\cyromegarnd}"
+},
+	"ŃŒ": {
+	text: "{\\cyrchar\\CYROMEGATITLO}"
+},
+	"Ńœ": {
+	text: "{\\cyrchar\\cyromegatitlo}"
+},
+	"ŃŸ": {
+	text: "{\\cyrchar\\CYROT}"
+},
+	"Ńż": {
+	text: "{\\cyrchar\\cyrot}"
+},
+	"Ҁ": {
+	text: "{\\cyrchar\\CYRKOPPA}"
+},
+	"ҁ": {
+	text: "{\\cyrchar\\cyrkoppa}"
+},
+	"҂": {
+	text: "{\\cyrchar\\cyrthousands}"
+},
+	"҈": {
+	text: "{\\cyrchar\\cyrhundredthousands}"
+},
+	"҉": {
+	text: "{\\cyrchar\\cyrmillions}"
+},
+	"Ҍ": {
+	text: "{\\cyrchar\\CYRSEMISFTSN}"
+},
+	"ҍ": {
+	text: "{\\cyrchar\\cyrsemisftsn}"
+},
+	"Ҏ": {
+	text: "{\\cyrchar\\CYRRTICK}"
+},
+	"ҏ": {
+	text: "{\\cyrchar\\cyrrtick}"
+},
+	"Ґ": {
+	text: "{\\cyrchar\\CYRGUP}"
+},
+	"ґ": {
+	text: "{\\cyrchar\\cyrgup}"
+},
+	"Ғ": {
+	text: "{\\cyrchar\\CYRGHCRS}"
+},
+	"ғ": {
+	text: "{\\cyrchar\\cyrghcrs}"
+},
+	"Ҕ": {
+	text: "{\\cyrchar\\CYRGHK}"
+},
+	"ҕ": {
+	text: "{\\cyrchar\\cyrghk}"
+},
+	"Җ": {
+	text: "{\\cyrchar\\CYRZHDSC}"
+},
+	"җ": {
+	text: "{\\cyrchar\\cyrzhdsc}"
+},
+	"Ҙ": {
+	text: "{\\cyrchar\\CYRZDSC}"
+},
+	"ҙ": {
+	text: "{\\cyrchar\\cyrzdsc}"
+},
+	"Қ": {
+	text: "{\\cyrchar\\CYRKDSC}"
+},
+	"қ": {
+	text: "{\\cyrchar\\cyrkdsc}"
+},
+	"Ҝ": {
+	text: "{\\cyrchar\\CYRKVCRS}"
+},
+	"ҝ": {
+	text: "{\\cyrchar\\cyrkvcrs}"
+},
+	"Ҟ": {
+	text: "{\\cyrchar\\CYRKHCRS}"
+},
+	"ҟ": {
+	text: "{\\cyrchar\\cyrkhcrs}"
+},
+	"Ò ": {
+	text: "{\\cyrchar\\CYRKBEAK}"
+},
+	"ÒĄ": {
+	text: "{\\cyrchar\\cyrkbeak}"
+},
+	"Òą": {
+	text: "{\\cyrchar\\CYRNDSC}"
+},
+	"ÒŁ": {
+	text: "{\\cyrchar\\cyrndsc}"
+},
+	"Ò€": {
+	text: "{\\cyrchar\\CYRNG}"
+},
+	"Ò„": {
+	text: "{\\cyrchar\\cyrng}"
+},
+	"ÒŠ": {
+	text: "{\\cyrchar\\CYRPHK}"
+},
+	"Ò§": {
+	text: "{\\cyrchar\\cyrphk}"
+},
+	"Òš": {
+	text: "{\\cyrchar\\CYRABHHA}"
+},
+	"Ò©": {
+	text: "{\\cyrchar\\cyrabhha}"
+},
+	"ÒȘ": {
+	text: "{\\cyrchar\\CYRSDSC}"
+},
+	"Ò«": {
+	text: "{\\cyrchar\\cyrsdsc}"
+},
+	"ÒŹ": {
+	text: "{\\cyrchar\\CYRTDSC}"
+},
+	"Ò­": {
+	text: "{\\cyrchar\\cyrtdsc}"
+},
+	"Òź": {
+	text: "{\\cyrchar\\CYRY}"
+},
+	"ÒŻ": {
+	text: "{\\cyrchar\\cyry}"
+},
+	"Ò°": {
+	text: "{\\cyrchar\\CYRYHCRS}"
+},
+	"Ò±": {
+	text: "{\\cyrchar\\cyryhcrs}"
+},
+	"ÒČ": {
+	text: "{\\cyrchar\\CYRHDSC}"
+},
+	"Òł": {
+	text: "{\\cyrchar\\cyrhdsc}"
+},
+	"ÒŽ": {
+	text: "{\\cyrchar\\CYRTETSE}"
+},
+	"Ò”": {
+	text: "{\\cyrchar\\cyrtetse}"
+},
+	"Ò¶": {
+	text: "{\\cyrchar\\CYRCHRDSC}"
+},
+	"Ò·": {
+	text: "{\\cyrchar\\cyrchrdsc}"
+},
+	"Òž": {
+	text: "{\\cyrchar\\CYRCHVCRS}"
+},
+	"Òč": {
+	text: "{\\cyrchar\\cyrchvcrs}"
+},
+	"Òș": {
+	text: "{\\cyrchar\\CYRSHHA}"
+},
+	"Ò»": {
+	text: "{\\cyrchar\\cyrshha}"
+},
+	"Ҍ": {
+	text: "{\\cyrchar\\CYRABHCH}"
+},
+	"Ҝ": {
+	text: "{\\cyrchar\\cyrabhch}"
+},
+	"ÒŸ": {
+	text: "{\\cyrchar\\CYRABHCHDSC}"
+},
+	"Òż": {
+	text: "{\\cyrchar\\cyrabhchdsc}"
+},
+	"Ӏ": {
+	text: "{\\cyrchar\\CYRpalochka}"
+},
+	"Ӄ": {
+	text: "{\\cyrchar\\CYRKHK}"
+},
+	"ӄ": {
+	text: "{\\cyrchar\\cyrkhk}"
+},
+	"Ӈ": {
+	text: "{\\cyrchar\\CYRNHK}"
+},
+	"ӈ": {
+	text: "{\\cyrchar\\cyrnhk}"
+},
+	"Ӌ": {
+	text: "{\\cyrchar\\CYRCHLDSC}"
+},
+	"ӌ": {
+	text: "{\\cyrchar\\cyrchldsc}"
+},
+	"Ӕ": {
+	text: "{\\cyrchar\\CYRAE}"
+},
+	"ӕ": {
+	text: "{\\cyrchar\\cyrae}"
+},
+	"Ә": {
+	text: "{\\cyrchar\\CYRSCHWA}"
+},
+	"ә": {
+	text: "{\\cyrchar\\cyrschwa}"
+},
+	"Ó ": {
+	text: "{\\cyrchar\\CYRABHDZE}"
+},
+	"ÓĄ": {
+	text: "{\\cyrchar\\cyrabhdze}"
+},
+	"Óš": {
+	text: "{\\cyrchar\\CYROTLD}"
+},
+	"Ó©": {
+	text: "{\\cyrchar\\cyrotld}"
+},
+	"àĄ±": {
+	math: "\\\\backslash"
+},
+	"ᔃ": {
+	math: "^{a}",
+	text: "\\textsuperscript{a}"
+},
+	"ᔇ": {
+	math: "^{b}",
+	text: "\\textsuperscript{b}"
+},
+	"ᔈ": {
+	math: "^{d}",
+	text: "\\textsuperscript{d}"
+},
+	"ᔉ": {
+	math: "^{e}",
+	text: "\\textsuperscript{e}"
+},
+	"ᔍ": {
+	math: "^{g}",
+	text: "\\textsuperscript{g}"
+},
+	"ᔏ": {
+	math: "^{k}",
+	text: "\\textsuperscript{k}"
+},
+	"ᔐ": {
+	math: "^{m}",
+	text: "\\textsuperscript{m}"
+},
+	"á”’": {
+	math: "^{o}",
+	text: "\\textsuperscript{o}"
+},
+	"á”–": {
+	math: "^{p}",
+	text: "\\textsuperscript{p}"
+},
+	"á”—": {
+	math: "^{t}",
+	text: "\\textsuperscript{t}"
+},
+	"ᔘ": {
+	math: "^{u}",
+	text: "\\textsuperscript{u}"
+},
+	"á”›": {
+	math: "^{v}",
+	text: "\\textsuperscript{v}"
+},
+	"ᶜ": {
+	math: "^{c}",
+	text: "\\textsuperscript{c}"
+},
+	"ᶠ": {
+	math: "^{f}",
+	text: "\\textsuperscript{f}"
+},
+	"ᶻ": {
+	math: "^{z}",
+	text: "\\textsuperscript{z}"
+},
+	"ᾂ": {
+	text: "{\\.B}"
+},
+	"ឃ": {
+	text: "{\\.b}"
+},
+	"ᾄ": {
+	text: "{\\d B}"
+},
+	"ᾅ": {
+	text: "{\\d b}"
+},
+	"ᾆ": {
+	text: "{\\b B}"
+},
+	"ᾇ": {
+	text: "{\\b b}"
+},
+	"ᾊ": {
+	text: "{\\.D}"
+},
+	"ᾋ": {
+	text: "{\\.d}"
+},
+	"ᾌ": {
+	text: "{\\d D}"
+},
+	"ឍ": {
+	text: "{\\d d}"
+},
+	"ᾎ": {
+	text: "{\\b D}"
+},
+	"ត": {
+	text: "{\\b d}"
+},
+	"ថ": {
+	text: "{\\c D}"
+},
+	"ᾑ": {
+	text: "{\\c d}"
+},
+	"ᾜ": {
+	text: "{\\c{\\u{E}}}"
+},
+	"ឝ": {
+	text: "{\\c{\\u{e}}}"
+},
+	"ᾞ": {
+	text: "{\\.F}"
+},
+	"ᾟ": {
+	text: "{\\.f}"
+},
+	"áž ": {
+	text: "{\\=G}"
+},
+	"ឥ": {
+	text: "{\\=g}"
+},
+	"ážą": {
+	text: "{\\.H}"
+},
+	"ឣ": {
+	text: "{\\.h}"
+},
+	"ក": {
+	text: "{\\d H}"
+},
+	"áž„": {
+	text: "{\\d h}"
+},
+	"ដ": {
+	text: "{\\\"H}"
+},
+	"ឧ": {
+	text: "{\\\"h}"
+},
+	"ážš": {
+	text: "{\\c H}"
+},
+	"áž©": {
+	text: "{\\c h}"
+},
+	"áž°": {
+	text: "{\\'K}"
+},
+	"áž±": {
+	text: "{\\'k}"
+},
+	"ážČ": {
+	text: "{\\d K}"
+},
+	"ážł": {
+	text: "{\\d k}"
+},
+	"ណ": {
+	text: "{\\b K}"
+},
+	"áž”": {
+	text: "{\\b k}"
+},
+	"ា": {
+	text: "{\\d L}"
+},
+	"áž·": {
+	text: "{\\d l}"
+},
+	"ážș": {
+	text: "{\\b L}"
+},
+	"áž»": {
+	text: "{\\b l}"
+},
+	"ស": {
+	text: "{\\'M}"
+},
+	"ážż": {
+	text: "{\\'m}"
+},
+	"áč€": {
+	text: "{\\.M}"
+},
+	"áč": {
+	text: "{\\.m}"
+},
+	"áč‚": {
+	text: "{\\d M}"
+},
+	"áčƒ": {
+	text: "{\\d m}"
+},
+	"áč„": {
+	text: "{\\.N}"
+},
+	"áč…": {
+	text: "{\\.n}"
+},
+	"áč†": {
+	text: "{\\d N}"
+},
+	"áč‡": {
+	text: "{\\d n}"
+},
+	"áčˆ": {
+	text: "{\\b N}"
+},
+	"áč‰": {
+	text: "{\\b n}"
+},
+	"áč”": {
+	text: "{\\'P}"
+},
+	"áč•": {
+	text: "{\\'p}"
+},
+	"áč–": {
+	text: "{\\.P}"
+},
+	"áč—": {
+	text: "{\\.p}"
+},
+	"áč˜": {
+	text: "{\\.R}"
+},
+	"áč™": {
+	text: "{\\.r}"
+},
+	"áčš": {
+	text: "{\\d R}"
+},
+	"áč›": {
+	text: "{\\d r}"
+},
+	"áčž": {
+	text: "{\\b R}"
+},
+	"áčŸ": {
+	text: "{\\b r}"
+},
+	"áč ": {
+	text: "{\\.S}"
+},
+	"áčĄ": {
+	text: "{\\.s}"
+},
+	"áčą": {
+	text: "{\\d S}"
+},
+	"áčŁ": {
+	text: "{\\d s}"
+},
+	"áčȘ": {
+	text: "{\\.T}"
+},
+	"áč«": {
+	text: "{\\.t}"
+},
+	"áčŹ": {
+	text: "{\\d T}"
+},
+	"áč­": {
+	text: "{\\d t}"
+},
+	"áčź": {
+	text: "{\\b T}"
+},
+	"áčŻ": {
+	text: "{\\b t}"
+},
+	"áčŒ": {
+	text: "{\\~V}"
+},
+	"áčœ": {
+	text: "{\\~v}"
+},
+	"áčŸ": {
+	text: "{\\d V}"
+},
+	"áčż": {
+	text: "{\\d v}"
+},
+	"áș€": {
+	text: "{\\`W}"
+},
+	"áș": {
+	text: "{\\`w}"
+},
+	"áș‚": {
+	text: "{\\'W}"
+},
+	"áșƒ": {
+	text: "{\\'w}"
+},
+	"áș„": {
+	text: "{\\\"W}"
+},
+	"áș…": {
+	text: "{\\\"w}"
+},
+	"áș†": {
+	text: "{\\.W}"
+},
+	"áș‡": {
+	text: "{\\.w}"
+},
+	"áșˆ": {
+	text: "{\\d W}"
+},
+	"áș‰": {
+	text: "{\\d w}"
+},
+	"áșŠ": {
+	text: "{\\.X}"
+},
+	"áș‹": {
+	text: "{\\.x}"
+},
+	"áșŒ": {
+	text: "{\\\"X}"
+},
+	"áș": {
+	text: "{\\\"x}"
+},
+	"áșŽ": {
+	text: "{\\.Y}"
+},
+	"áș": {
+	text: "{\\.y}"
+},
+	"áș": {
+	text: "{\\^Z}"
+},
+	"áș‘": {
+	text: "{\\^z}"
+},
+	"áș’": {
+	text: "{\\d Z}"
+},
+	"áș“": {
+	text: "{\\d z}"
+},
+	"áș”": {
+	text: "{\\b Z}"
+},
+	"áș•": {
+	text: "{\\b z}"
+},
+	"áș–": {
+	text: "{\\b h}"
+},
+	"áș—": {
+	text: "{\\\"t}"
+},
+	"áș˜": {
+	text: "{\\r{w}}"
+},
+	"áș™": {
+	text: "{\\r{y}}"
+},
+	"áș ": {
+	text: "{\\d A}"
+},
+	"áșĄ": {
+	text: "{\\d a}"
+},
+	"áșž": {
+	text: "{\\d E}"
+},
+	"áșč": {
+	text: "{\\d e}"
+},
+	"áșŒ": {
+	text: "{\\~E}"
+},
+	"áșœ": {
+	text: "{\\~e}"
+},
+	"Ị": {
+	text: "{\\d I}"
+},
+	"ị": {
+	text: "{\\d i}"
+},
+	"Ọ": {
+	text: "{\\d O}"
+},
+	"ọ": {
+	text: "{\\d o}"
+},
+	"Ề": {
+	text: "{\\d U}"
+},
+	"Ễ": {
+	text: "{\\d u}"
+},
+	"á»Č": {
+	text: "{\\`Y}"
+},
+	"ỳ": {
+	text: "{\\`y}"
+},
+	"Ỏ": {
+	text: "{\\d Y}"
+},
+	"á»”": {
+	text: "{\\d y}"
+},
+	"Ở": {
+	text: "{\\~Y}"
+},
+	"á»č": {
+	text: "{\\~y}"
+},
+	" ": {
+	text: " ",
+	space: true
+},
+	" ": {
+	math: "\\quad",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.6em}",
+	space: true
+},
+	" ": {
+	math: "\\quad",
+	space: true,
+	text: "\\hspace{1em}"
+},
+	" ": {
+	text: "\\;",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.25em}",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.166em}",
+	space: true
+},
+	" ": {
+	text: "\\hphantom{0}",
+	space: true
+},
+	" ": {
+	text: "\\hphantom{,}",
+	space: true
+},
+	" ": {
+	text: "\\,",
+	space: true
+},
+	" ": {
+	math: "\\mkern1mu",
+	space: true
+},
+	"​": {
+	text: "{\\mbox}",
+	space: true
+},
+	"‌": {
+	text: "{\\aftergroup\\ignorespaces}"
+},
+	"‐": {
+	text: "-"
+},
+	"‑": {
+	text: "-"
+},
+	"‒": {
+	text: "-"
+},
+	"–": {
+	text: "{\\textendash}"
+},
+	"—": {
+	text: "{\\textemdash}"
+},
+	"―": {
+	math: "\\horizbar",
+	text: "\\rule{1em}{1pt}"
+},
+	"‖": {
+	math: "\\Vert"
+},
+	"‗": {
+	math: "\\twolowline"
+},
+	"‘": {
+	text: "`"
+},
+	"’": {
+	text: "'"
+},
+	"‚": {
+	text: ","
+},
+	"‛": {
+	math: "\\Elzreapos"
+},
+	"“": {
+	text: "``"
+},
+	"”": {
+	text: "''"
+},
+	"„": {
+	text: ",,"
+},
+	"‟": {
+	text: "{\\quotedblbase}"
+},
+	"†": {
+	math: "\\dagger",
+	text: "{\\textdagger}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‡": {
+	math: "\\ddagger",
+	text: "{\\textdaggerdbl}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‱": {
+	math: "\\bullet",
+	text: "{\\textbullet}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‣": {
+	text: ">"
+},
+	" ": {
+	text: "."
+},
+	" ": {
+	math: "\\enleadertwodots",
+	text: ".."
+},
+	"
": {
+	math: "\\ldots",
+	text: "{\\ldots}"
+},
+	"‧": {
+	text: "-"
+},
+	" ": {
+	text: " ",
+	space: true
+},
+	"‰": {
+	text: "{\\textperthousand}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"‱": {
+	text: "{\\textpertenthousand}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"â€Č": {
+	math: "{'}"
+},
+	"″": {
+	math: "{''}"
+},
+	"‮": {
+	math: "{'''}"
+},
+	"—": {
+	math: "\\backprime"
+},
+	"‶": {
+	math: "\\backdprime"
+},
+	"‷": {
+	math: "\\backtrprime"
+},
+	"‾": {
+	math: "\\caretinsert"
+},
+	"â€č": {
+	text: "{\\guilsinglleft}"
+},
+	"â€ș": {
+	text: "{\\guilsinglright}"
+},
+	"‌": {
+	math: "\\Exclam"
+},
+	"‟": {
+	text: "-"
+},
+	"⁃": {
+	math: "\\hyphenbullet"
+},
+	"⁄": {
+	math: "\\fracslash"
+},
+	"⁇": {
+	math: "\\Question"
+},
+	"⁈": {
+	text: "?!"
+},
+	"⁉": {
+	text: "!?"
+},
+	"⁊": {
+	text: "7"
+},
+	"⁐": {
+	math: "\\closure"
+},
+	"⁗": {
+	math: "''''"
+},
+	" ": {
+	math: "\\:",
+	space: true,
+	text: "\\:"
+},
+	"⁠": {
+	text: "{\\nolinebreak}"
+},
+	"⁰": {
+	math: "^{0}"
+},
+	"ⁱ": {
+	math: "^{i}",
+	text: "\\textsuperscript{i}"
+},
+	"⁎": {
+	math: "^{4}"
+},
+	"⁔": {
+	math: "^{5}"
+},
+	"⁶": {
+	math: "^{6}"
+},
+	"⁷": {
+	math: "^{7}"
+},
+	"⁞": {
+	math: "^{8}"
+},
+	"âč": {
+	math: "^{9}"
+},
+	"âș": {
+	math: "^{+}"
+},
+	"⁻": {
+	math: "^{-}"
+},
+	"⁌": {
+	math: "^{=}"
+},
+	"⁜": {
+	math: "^{(}"
+},
+	" ": {
+	math: "^{)}"
+},
+	"ⁿ": {
+	math: "^{n}",
+	text: "\\textsuperscript{n}"
+},
+	"₀": {
+	math: "_{0}"
+},
+	"₁": {
+	math: "_{1}"
+},
+	"₂": {
+	math: "_{2}"
+},
+	"₃": {
+	math: "_{3}"
+},
+	"₄": {
+	math: "_{4}"
+},
+	"₅": {
+	math: "_{5}"
+},
+	"₆": {
+	math: "_{6}"
+},
+	"₇": {
+	math: "_{7}"
+},
+	"₈": {
+	math: "_{8}"
+},
+	"₉": {
+	math: "_{9}"
+},
+	"₊": {
+	math: "_{+}"
+},
+	"₋": {
+	math: "_{-}"
+},
+	"₌": {
+	math: "_{=}"
+},
+	"₍": {
+	math: "_{(}"
+},
+	"₎": {
+	math: "_{)}"
+},
+	"ₐ": {
+	math: "_{a}",
+	text: "\\textsubscript{a}"
+},
+	"ₑ": {
+	math: "_{e}",
+	text: "\\textsubscript{e}"
+},
+	"ₒ": {
+	math: "_{o}",
+	text: "\\textsubscript{o}"
+},
+	"ₓ": {
+	math: "_{x}",
+	text: "\\textsubscript{x}"
+},
+	"ₔ": {
+	text: "\\textsubscript{\\textschwa}",
+	textpackages: [
+		"tipa"
+	]
+},
+	"ₕ": {
+	math: "_{h}",
+	text: "\\textsubscript{h}"
+},
+	"ₖ": {
+	math: "_{k}",
+	text: "\\textsubscript{k}"
+},
+	"ₗ": {
+	math: "_{l}",
+	text: "\\textsubscript{l}"
+},
+	"ₘ": {
+	math: "_{m}",
+	text: "\\textsubscript{m}"
+},
+	"ₙ": {
+	math: "_{n}",
+	text: "\\textsubscript{n}"
+},
+	"ₚ": {
+	math: "_{p}",
+	text: "\\textsubscript{p}"
+},
+	"ₛ": {
+	math: "_{s}",
+	text: "\\textsubscript{s}"
+},
+	"ₜ": {
+	math: "_{t}",
+	text: "\\textsubscript{t}"
+},
+	"₧": {
+	text: "\\ensuremath{\\Elzpes}"
+},
+	"€": {
+	math: "\\euro",
+	text: "{\\texteuro}"
+},
+	"⃐": {
+	math: "\\lvec"
+},
+	"⃑": {
+	math: "\\rightharpoonup",
+	mathpackages: [
+		"amsmath",
+		"amssymb"
+	]
+},
+	"⃒": {
+	math: "\\vertoverlay"
+},
+	"⃖": {
+	math: "\\LVec"
+},
+	"⃗": {
+	math: "\\vec"
+},
+	"⃛": {
+	math: "\\dddot"
+},
+	"⃜": {
+	math: "\\ddddot"
+},
+	"⃝": {
+	math: "\\enclosecircle"
+},
+	"⃞": {
+	math: "\\enclosesquare"
+},
+	"⃟": {
+	math: "\\enclosediamond"
+},
+	"⃥": {
+	math: "\\overleftrightarrow"
+},
+	"⃀": {
+	math: "\\enclosetriangle"
+},
+	"⃧": {
+	math: "\\annuity"
+},
+	"⃚": {
+	math: "\\threeunderdot"
+},
+	"⃩": {
+	math: "\\widebridgeabove"
+},
+	"⃏": {
+	math: "\\underrightharpoondown"
+},
+	"⃭": {
+	math: "\\underleftharpoondown"
+},
+	"⃟": {
+	math: "\\underleftarrow"
+},
+	"⃯": {
+	math: "\\underrightarrow"
+},
+	"⃰": {
+	math: "\\asteraccent"
+},
+	"℀": {
+	text: "a/c"
+},
+	"℁": {
+	text: "a/s"
+},
+	"ℂ": {
+	math: "\\mathbb{C}"
+},
+	"℃": {
+	text: "{\\textcelsius}"
+},
+	"℅": {
+	text: "c/o"
+},
+	"℆": {
+	text: "c/u"
+},
+	"ℇ": {
+	math: "\\Euler"
+},
+	"℉": {
+	text: "F"
+},
+	"ℊ": {
+	math: "\\mathscr{g}"
+},
+	"ℋ": {
+	math: "\\mathscr{H}"
+},
+	"ℌ": {
+	math: "\\mathfrak{H}"
+},
+	"ℍ": {
+	math: "\\mathbb{H}"
+},
+	"ℎ": {
+	math: "\\Planckconst"
+},
+	"ℏ": {
+	math: "\\hslash"
+},
+	"ℐ": {
+	math: "\\mathscr{I}"
+},
+	"ℑ": {
+	math: "\\mathfrak{I}"
+},
+	"ℒ": {
+	math: "\\mathscr{L}"
+},
+	"ℓ": {
+	math: "\\mathscr{l}"
+},
+	"ℕ": {
+	math: "\\mathbb{N}"
+},
+	"№": {
+	text: "{\\cyrchar\\textnumero}"
+},
+	"℗": {
+	text: "{\\textcircledP}"
+},
+	"℘": {
+	math: "\\wp"
+},
+	"ℙ": {
+	math: "\\mathbb{P}"
+},
+	"ℚ": {
+	math: "\\mathbb{Q}"
+},
+	"ℛ": {
+	math: "\\mathscr{R}"
+},
+	"ℜ": {
+	math: "\\mathfrak{R}"
+},
+	"ℝ": {
+	math: "\\mathbb{R}"
+},
+	"℞": {
+	math: "\\Elzxrat"
+},
+	"℠": {
+	text: "{\\textservicemark}"
+},
+	"℡": {
+	text: "TEL"
+},
+	"ℱ": {
+	text: "{\\texttrademark}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"â„€": {
+	math: "\\mathbb{Z}"
+},
+	"℩": {
+	math: "\\Omega"
+},
+	"℧": {
+	math: "\\mho"
+},
+	"ℹ": {
+	math: "\\mathfrak{Z}"
+},
+	"℩": {
+	text: "{\\textriota}"
+},
+	"â„Ș": {
+	text: "K"
+},
+	"Å": {
+	math: "\\Angstroem",
+	text: "{\\AA}"
+},
+	"ℬ": {
+	math: "\\mathscr{B}"
+},
+	"ℭ": {
+	math: "\\mathfrak{C}"
+},
+	"ℼ": {
+	text: "{\\textestimated}"
+},
+	"ℯ": {
+	math: "\\mathscr{e}"
+},
+	"ℰ": {
+	math: "\\mathscr{E}"
+},
+	"ℱ": {
+	math: "\\mathscr{F}"
+},
+	"â„Č": {
+	math: "\\Finv"
+},
+	"ℳ": {
+	math: "\\mathscr{M}"
+},
+	"℮": {
+	math: "\\mathscr{o}"
+},
+	"â„”": {
+	math: "\\aleph"
+},
+	"ℶ": {
+	math: "\\beth"
+},
+	"ℷ": {
+	math: "\\gimel"
+},
+	"ℾ": {
+	math: "\\daleth"
+},
+	"ℌ": {
+	math: "\\mathbb{\\pi}"
+},
+	"ℜ": {
+	math: "\\mathbb{\\gamma}"
+},
+	"â„Ÿ": {
+	math: "\\mathbb{\\Gamma}"
+},
+	"ℿ": {
+	math: "\\mathbb{\\Pi}"
+},
+	"⅀": {
+	math: "\\mathbb{\\Sigma}"
+},
+	"⅁": {
+	math: "\\Game"
+},
+	"⅂": {
+	math: "\\sansLturned"
+},
+	"⅃": {
+	math: "\\sansLmirrored"
+},
+	"⅄": {
+	math: "\\Yup"
+},
+	"ⅅ": {
+	math: "\\CapitalDifferentialD"
+},
+	"ⅆ": {
+	math: "\\DifferentialD"
+},
+	"ⅇ": {
+	math: "\\ExponetialE"
+},
+	"ⅈ": {
+	math: "\\ComplexI"
+},
+	"ⅉ": {
+	math: "\\ComplexJ"
+},
+	"⅊": {
+	math: "\\PropertyLine"
+},
+	"⅋": {
+	math: "\\invamp"
+},
+	"⅐": {
+	math: "\\frac{1}{7}"
+},
+	"⅑": {
+	math: "\\frac{1}{9}"
+},
+	"⅒": {
+	math: "\\frac{1}{10}"
+},
+	"⅓": {
+	math: "\\frac{1}{3}"
+},
+	"⅔": {
+	math: "\\frac{2}{3}"
+},
+	"⅕": {
+	math: "\\frac{1}{5}"
+},
+	"⅖": {
+	math: "\\frac{2}{5}"
+},
+	"⅗": {
+	math: "\\frac{3}{5}"
+},
+	"⅘": {
+	math: "\\frac{4}{5}"
+},
+	"⅙": {
+	math: "\\frac{1}{6}"
+},
+	"⅚": {
+	math: "\\frac{5}{6}"
+},
+	"⅛": {
+	math: "\\frac{1}{8}"
+},
+	"⅜": {
+	math: "\\frac{3}{8}"
+},
+	"⅝": {
+	math: "\\frac{5}{8}"
+},
+	"⅞": {
+	math: "\\frac{7}{8}"
+},
+	"⅟": {
+	math: "\\frac{1}"
+},
+	"Ⅰ": {
+	text: "I"
+},
+	"Ⅱ": {
+	text: "II"
+},
+	"ⅱ": {
+	text: "III"
+},
+	"Ⅳ": {
+	text: "IV"
+},
+	"â…€": {
+	text: "V"
+},
+	"â…„": {
+	text: "VI"
+},
+	"Ⅹ": {
+	text: "VII"
+},
+	"Ⅷ": {
+	text: "VIII"
+},
+	"ⅹ": {
+	text: "IX"
+},
+	"Ⅹ": {
+	text: "X"
+},
+	"â…Ș": {
+	text: "XI"
+},
+	"Ⅻ": {
+	text: "XII"
+},
+	"Ⅼ": {
+	text: "L"
+},
+	"Ⅽ": {
+	text: "C"
+},
+	"ⅼ": {
+	text: "D"
+},
+	"Ⅿ": {
+	text: "M"
+},
+	"ⅰ": {
+	text: "i"
+},
+	"ⅱ": {
+	text: "ii"
+},
+	"â…Č": {
+	text: "iii"
+},
+	"ⅳ": {
+	text: "iv"
+},
+	"Ⅾ": {
+	text: "v"
+},
+	"â…”": {
+	text: "vi"
+},
+	"ⅶ": {
+	text: "vii"
+},
+	"ⅷ": {
+	text: "viii"
+},
+	"ⅾ": {
+	text: "ix"
+},
+	"â…č": {
+	text: "x"
+},
+	"â…ș": {
+	text: "xi"
+},
+	"ⅻ": {
+	text: "xii"
+},
+	"⅌": {
+	text: "l"
+},
+	"⅜": {
+	text: "c"
+},
+	"â…Ÿ": {
+	text: "d"
+},
+	"ⅿ": {
+	text: "m"
+},
+	"↉": {
+	math: "\\frac{0}{3}"
+},
+	"←": {
+	math: "\\leftarrow"
+},
+	"↑": {
+	math: "\\uparrow"
+},
+	"→": {
+	math: "\\rightarrow",
+	text: "{\\textrightarrow}",
+	textpackages: [
+		"textcomp"
+	]
+},
+	"↓": {
+	math: "\\downarrow"
+},
+	"↔": {
+	math: "\\leftrightarrow"
+},
+	"↕": {
+	math: "\\updownarrow"
+},
+	"↖": {
+	math: "\\nwarrow"
+},
+	"↗": {
+	math: "\\nearrow"
+},
+	"↘": {
+	math: "\\searrow"
+},
+	"↙": {
+	math: "\\swarrow"
+},
+	"↚": {
+	math: "\\nleftarrow"
+},
+	"↛": {
+	math: "\\nrightarrow"
+},
+	"↜": {
+	math: "\\arrowwaveleft"
+},
+	"↝": {
+	math: "\\arrowwaveright"
+},
+	"↞": {
+	math: "\\twoheadleftarrow"
+},
+	"↟": {
+	math: "\\twoheaduparrow"
+},
+	"↠": {
+	math: "\\twoheadrightarrow"
+},
+	"↡": {
+	math: "\\twoheaddownarrow"
+},
+	"↱": {
+	math: "\\leftarrowtail"
+},
+	"↣": {
+	math: "\\rightarrowtail"
+},
+	"ↀ": {
+	math: "\\mapsfrom"
+},
+	"ↄ": {
+	math: "\\MapsUp"
+},
+	"↩": {
+	math: "\\mapsto"
+},
+	"↧": {
+	math: "\\MapsDown"
+},
+	"↹": {
+	math: "\\updownarrowbar"
+},
+	"↩": {
+	math: "\\hookleftarrow"
+},
+	"â†Ș": {
+	math: "\\hookrightarrow"
+},
+	"↫": {
+	math: "\\looparrowleft"
+},
+	"↬": {
+	math: "\\looparrowright"
+},
+	"↭": {
+	math: "\\leftrightsquigarrow"
+},
+	"↼": {
+	math: "\\nleftrightarrow"
+},
+	"↯": {
+	math: "\\lightning"
+},
+	"↰": {
+	math: "\\Lsh"
+},
+	"↱": {
+	math: "\\Rsh"
+},
+	"â†Č": {
+	math: "\\dlsh"
+},
+	"↳": {
+	text: "\\reflectbox{\\carriagereturn}",
+	textpackages: [
+		"graphics",
+		"unicode-math"
+	]
+},
+	"↮": {
+	math: "\\linefeed"
+},
+	"↔": {
+	math: "\\carriagereturn"
+},
+	"↶": {
+	math: "\\curvearrowleft"
+},
+	"↷": {
+	math: "\\curvearrowright"
+},
+	"↾": {
+	math: "\\barovernorthwestarrow"
+},
+	"â†č": {
+	math: "\\barleftarrowrightarrowba"
+},
+	"â†ș": {
+	math: "\\circlearrowleft"
+},
+	"↻": {
+	math: "\\circlearrowright"
+},
+	"↌": {
+	math: "\\leftharpoonup"
+},
+	"↜": {
+	math: "\\leftharpoondown"
+},
+	"↟": {
+	math: "\\upharpoonright"
+},
+	"↿": {
+	math: "\\upharpoonleft"
+},
+	"⇀": {
+	math: "\\rightharpoonup",
+	mathpackages: [
+		"amsmath",
+		"amssymb"
+	]
+},
+	"⇁": {
+	math: "\\rightharpoondown"
+},
+	"⇂": {
+	math: "\\downharpoonright"
+},
+	"⇃": {
+	math: "\\downharpoonleft"
+},
+	"⇄": {
+	math: "\\rightleftarrows"
+},
+	"⇅": {
+	math: "\\dblarrowupdown"
+},
+	"⇆": {
+	math: "\\leftrightarrows"
+},
+	"⇇": {
+	math: "\\leftleftarrows"
+},
+	"⇈": {
+	math: "\\upuparrows"
+},
+	"⇉": {
+	math: "\\rightrightarrows"
+},
+	"⇊": {
+	math: "\\downdownarrows"
+},
+	"⇋": {
+	math: "\\leftrightharpoons"
+},
+	"⇌": {
+	math: "\\rightleftharpoons"
+},
+	"⇍": {
+	math: "\\nLeftarrow"
+},
+	"⇎": {
+	math: "\\nLeftrightarrow"
+},
+	"⇏": {
+	math: "\\nRightarrow"
+},
+	"⇐": {
+	math: "\\Leftarrow"
+},
+	"⇑": {
+	math: "\\Uparrow"
+},
+	"⇒": {
+	math: "\\Rightarrow"
+},
+	"⇓": {
+	math: "\\Downarrow"
+},
+	"⇔": {
+	math: "\\Leftrightarrow"
+},
+	"⇕": {
+	math: "\\Updownarrow"
+},
+	"⇖": {
+	math: "\\Nwarrow"
+},
+	"⇗": {
+	math: "\\Nearrow"
+},
+	"⇘": {
+	math: "\\Searrow"
+},
+	"⇙": {
+	math: "\\Swarrow"
+},
+	"⇚": {
+	math: "\\Lleftarrow"
+},
+	"⇛": {
+	math: "\\Rrightarrow"
+},
+	"⇜": {
+	math: "\\leftsquigarrow"
+},
+	"⇝": {
+	math: "\\rightsquigarrow"
+},
+	"⇞": {
+	math: "\\nHuparrow"
+},
+	"⇟": {
+	math: "\\nHdownarrow"
+},
+	"⇠": {
+	math: "\\dashleftarrow"
+},
+	"⇡": {
+	math: "\\updasharrow"
+},
+	"⇱": {
+	math: "\\dashrightarrow"
+},
+	"⇣": {
+	math: "\\downdasharrow"
+},
+	"⇀": {
+	math: "\\LeftArrowBar"
+},
+	"⇄": {
+	math: "\\RightArrowBar"
+},
+	"⇩": {
+	math: "\\leftwhitearrow"
+},
+	"⇧": {
+	math: "\\upwhitearrow"
+},
+	"⇹": {
+	math: "\\rightwhitearrow"
+},
+	"⇩": {
+	math: "\\downwhitearrow"
+},
+	"â‡Ș": {
+	math: "\\whitearrowupfrombar"
+},
+	"⇮": {
+	math: "\\circleonrightarrow"
+},
+	"⇔": {
+	math: "\\DownArrowUpArrow"
+},
+	"⇶": {
+	math: "\\rightthreearrows"
+},
+	"⇷": {
+	math: "\\nvleftarrow"
+},
+	"⇾": {
+	math: "\\pfun"
+},
+	"â‡č": {
+	math: "\\nvleftrightarrow"
+},
+	"â‡ș": {
+	math: "\\nVleftarrow"
+},
+	"⇻": {
+	math: "\\ffun"
+},
+	"⇌": {
+	math: "\\nVleftrightarrow"
+},
+	"⇜": {
+	math: "\\leftarrowtriangle"
+},
+	"⇟": {
+	math: "\\rightarrowtriangle"
+},
+	"⇿": {
+	math: "\\leftrightarrowtriangle"
+},
+	"∀": {
+	math: "\\forall"
+},
+	"∁": {
+	math: "\\complement"
+},
+	"∂": {
+	math: "\\partial"
+},
+	"∃": {
+	math: "\\exists"
+},
+	"∄": {
+	math: "\\nexists"
+},
+	"∅": {
+	math: "\\varnothing"
+},
+	"∆": {
+	math: "\\increment"
+},
+	"∇": {
+	math: "\\nabla"
+},
+	"∈": {
+	math: "\\in"
+},
+	"∉": {
+	math: "\\not\\in"
+},
+	"∊": {
+	math: "\\smallin"
+},
+	"∋": {
+	math: "\\ni"
+},
+	"∌": {
+	math: "\\not\\ni"
+},
+	"∍": {
+	math: "\\smallni"
+},
+	"∎": {
+	math: "\\QED"
+},
+	"∏": {
+	math: "\\prod"
+},
+	"∐": {
+	math: "\\coprod"
+},
+	"∑": {
+	math: "\\sum"
+},
+	"−": {
+	math: "-",
+	text: "-"
+},
+	"∓": {
+	math: "\\mp"
+},
+	"∔": {
+	math: "\\dotplus"
+},
+	"∕": {
+	text: "/"
+},
+	"∖": {
+	math: "\\setminus"
+},
+	"∗": {
+	math: "{_\\ast}"
+},
+	"∘": {
+	math: "\\circ"
+},
+	"∙": {
+	math: "\\bullet"
+},
+	"√": {
+	math: "\\surd"
+},
+	"∛": {
+	math: "\\sqrt[3]"
+},
+	"∜": {
+	math: "\\sqrt[4]"
+},
+	"∝": {
+	math: "\\propto"
+},
+	"∞": {
+	math: "\\infty"
+},
+	"∟": {
+	math: "\\rightangle"
+},
+	"∠": {
+	math: "\\angle"
+},
+	"∥": {
+	math: "\\measuredangle"
+},
+	"∹": {
+	math: "\\sphericalangle"
+},
+	"∣": {
+	math: "\\mid"
+},
+	"∀": {
+	math: "\\nmid"
+},
+	"∄": {
+	math: "\\parallel"
+},
+	"∊": {
+	math: "\\nparallel"
+},
+	"∧": {
+	math: "\\wedge"
+},
+	"√": {
+	math: "\\vee"
+},
+	"∩": {
+	math: "\\cap"
+},
+	"âˆȘ": {
+	math: "\\cup"
+},
+	"∫": {
+	math: "\\int"
+},
+	"∏": {
+	math: "{\\int\\!\\int}"
+},
+	"∭": {
+	math: "{\\int\\!\\int\\!\\int}"
+},
+	"∟": {
+	math: "\\oint"
+},
+	"∯": {
+	math: "\\surfintegral"
+},
+	"∰": {
+	math: "\\volintegral"
+},
+	"∱": {
+	math: "\\clwintegral"
+},
+	"âˆČ": {
+	math: "\\lcirclerightint",
+	mathpackages: [
+		"MnSymbol"
+	]
+},
+	"∳": {
+	math: "\\rcirclerightint",
+	mathpackages: [
+		"MnSymbol"
+	]
+},
+	"∎": {
+	math: "\\therefore"
+},
+	"∔": {
+	math: "\\because"
+},
+	"∶": {
+	math: ":"
+},
+	"∷": {
+	math: "\\Colon"
+},
+	"∞": {
+	math: "\\dotdiv",
+	mathpackages: [
+		"mathabx"
+	]
+},
+	"âˆč": {
+	math: "\\eqcolon"
+},
+	"âˆș": {
+	math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}"
+},
+	"∻": {
+	math: "\\homothetic"
+},
+	"∌": {
+	math: "\\sim"
+},
+	"∜": {
+	math: "\\backsim"
+},
+	"∟": {
+	math: "\\lazysinv"
+},
+	"∿": {
+	math: "\\AC"
+},
+	"≀": {
+	math: "\\wr"
+},
+	"≁": {
+	math: "\\not\\sim"
+},
+	"≂": {
+	math: "\\texteqsim",
+	mathpackages: [
+		"xecjk"
+	]
+},
+	"≂̞": {
+	math: "\\NotEqualTilde"
+},
+	"≃": {
+	math: "\\simeq"
+},
+	"≄": {
+	math: "\\not\\simeq"
+},
+	"≅": {
+	math: "\\cong"
+},
+	"≆": {
+	math: "\\approxnotequal"
+},
+	"≇": {
+	math: "\\not\\cong"
+},
+	"≈": {
+	math: "\\approx"
+},
+	"≉": {
+	math: "\\not\\approx"
+},
+	"≊": {
+	math: "\\approxeq"
+},
+	"≋": {
+	math: "\\tildetrpl"
+},
+	"≋̞": {
+	math: "\\not\\apid"
+},
+	"≌": {
+	math: "\\allequal"
+},
+	"≍": {
+	math: "\\asymp"
+},
+	"≎": {
+	math: "\\Bumpeq"
+},
+	"≎̞": {
+	math: "\\NotHumpDownHump"
+},
+	"≏": {
+	math: "\\bumpeq"
+},
+	"≏̞": {
+	math: "\\NotHumpEqual"
+},
+	"≐": {
+	math: "\\doteq"
+},
+	"≐̞": {
+	math: "\\not\\doteq"
+},
+	"≑": {
+	math: "\\doteqdot"
+},
+	"≒": {
+	math: "\\fallingdotseq"
+},
+	"≓": {
+	math: "\\risingdotseq"
+},
+	"≔": {
+	math: "\\coloneq",
+	text: ":="
+},
+	"≕": {
+	math: "=:"
+},
+	"≖": {
+	math: "\\eqcirc"
+},
+	"≗": {
+	math: "\\circeq"
+},
+	"≘": {
+	math: "\\arceq"
+},
+	"≙": {
+	math: "\\estimates"
+},
+	"≛": {
+	math: "\\starequal"
+},
+	"≜": {
+	math: "\\triangleq"
+},
+	"≝": {
+	math: "\\eqdef"
+},
+	"≞": {
+	math: "\\measeq"
+},
+	"≠": {
+	math: "\\neq"
+},
+	"≡": {
+	math: "\\equiv"
+},
+	"≱": {
+	math: "\\not\\equiv"
+},
+	"≣": {
+	math: "\\Equiv"
+},
+	"≀": {
+	math: "\\leq"
+},
+	"≄": {
+	math: "\\geq"
+},
+	"≩": {
+	math: "\\leqq"
+},
+	"≧": {
+	math: "\\geqq"
+},
+	"≹": {
+	math: "\\lneqq"
+},
+	"≚": {
+	math: "\\lvertneqq"
+},
+	"≩": {
+	math: "\\gneqq"
+},
+	"≩": {
+	math: "\\gvertneqq"
+},
+	"â‰Ș": {
+	math: "\\ll"
+},
+	"â‰ȘÌž": {
+	math: "\\NotLessLess"
+},
+	"≫": {
+	math: "\\gg"
+},
+	"≫̞": {
+	math: "\\NotGreaterGreater"
+},
+	"≬": {
+	math: "\\between"
+},
+	"≭": {
+	math: "{\\not\\kern-0.3em\\times}"
+},
+	"≼": {
+	math: "\\not<"
+},
+	"≯": {
+	math: "\\not>"
+},
+	"≰": {
+	math: "\\not\\leq"
+},
+	"≱": {
+	math: "\\not\\geq"
+},
+	"â‰Č": {
+	math: "\\lessequivlnt"
+},
+	"≳": {
+	math: "\\greaterequivlnt"
+},
+	"≶": {
+	math: "\\lessgtr"
+},
+	"≷": {
+	math: "\\gtrless"
+},
+	"≾": {
+	math: "\\notlessgreater"
+},
+	"â‰č": {
+	math: "\\notgreaterless"
+},
+	"â‰ș": {
+	math: "\\prec"
+},
+	"≻": {
+	math: "\\succ"
+},
+	"≌": {
+	math: "\\preccurlyeq"
+},
+	"≜": {
+	math: "\\succcurlyeq"
+},
+	"≟": {
+	math: "\\precapprox"
+},
+	"≟̞": {
+	math: "\\NotPrecedesTilde"
+},
+	"≿": {
+	math: "\\succapprox"
+},
+	"â‰żÌž": {
+	math: "\\NotSucceedsTilde"
+},
+	"⊀": {
+	math: "\\not\\prec"
+},
+	"⊁": {
+	math: "\\not\\succ"
+},
+	"⊂": {
+	math: "\\subset"
+},
+	"⊃": {
+	math: "\\supset"
+},
+	"⊄": {
+	math: "\\not\\subset"
+},
+	"⊅": {
+	math: "\\not\\supset"
+},
+	"⊆": {
+	math: "\\subseteq"
+},
+	"⊇": {
+	math: "\\supseteq"
+},
+	"⊈": {
+	math: "\\not\\subseteq"
+},
+	"⊉": {
+	math: "\\not\\supseteq"
+},
+	"⊊": {
+	math: "\\subsetneq"
+},
+	"⊊": {
+	math: "\\varsubsetneqq"
+},
+	"⊋": {
+	math: "\\supsetneq"
+},
+	"⊋": {
+	math: "\\varsupsetneq"
+},
+	"⊌": {
+	math: "\\cupleftarrow"
+},
+	"⊍": {
+	math: "\\cupdot"
+},
+	"⊎": {
+	math: "\\uplus"
+},
+	"⊏": {
+	math: "\\sqsubset"
+},
+	"⊏̞": {
+	math: "\\NotSquareSubset"
+},
+	"⊐": {
+	math: "\\sqsupset"
+},
+	"⊐̞": {
+	math: "\\NotSquareSuperset"
+},
+	"⊑": {
+	math: "\\sqsubseteq"
+},
+	"⊒": {
+	math: "\\sqsupseteq"
+},
+	"⊓": {
+	math: "\\sqcap"
+},
+	"⊔": {
+	math: "\\sqcup"
+},
+	"⊕": {
+	math: "\\oplus"
+},
+	"⊖": {
+	math: "\\ominus"
+},
+	"⊗": {
+	math: "\\otimes"
+},
+	"⊘": {
+	math: "\\oslash"
+},
+	"⊙": {
+	math: "\\odot"
+},
+	"⊚": {
+	math: "\\circledcirc"
+},
+	"⊛": {
+	math: "\\circledast"
+},
+	"⊜": {
+	math: "\\circledequal"
+},
+	"⊝": {
+	math: "\\circleddash"
+},
+	"⊞": {
+	math: "\\boxplus"
+},
+	"⊟": {
+	math: "\\boxminus"
+},
+	"⊠": {
+	math: "\\boxtimes"
+},
+	"⊡": {
+	math: "\\boxdot"
+},
+	"⊱": {
+	math: "\\vdash"
+},
+	"⊣": {
+	math: "\\dashv"
+},
+	"⊀": {
+	math: "\\top"
+},
+	"⊄": {
+	math: "\\perp"
+},
+	"⊩": {
+	math: "\\assert"
+},
+	"⊧": {
+	math: "\\truestate"
+},
+	"⊹": {
+	math: "\\forcesextra"
+},
+	"⊩": {
+	math: "\\Vdash"
+},
+	"âŠȘ": {
+	math: "\\Vvdash"
+},
+	"⊫": {
+	math: "\\VDash"
+},
+	"⊬": {
+	math: "\\nvdash"
+},
+	"⊭": {
+	math: "\\nvDash"
+},
+	"⊼": {
+	math: "\\nVdash"
+},
+	"⊯": {
+	math: "\\nVDash"
+},
+	"⊰": {
+	math: "\\prurel"
+},
+	"⊱": {
+	math: "\\scurel"
+},
+	"âŠČ": {
+	math: "\\vartriangleleft"
+},
+	"⊳": {
+	math: "\\vartriangleright"
+},
+	"⊮": {
+	math: "\\trianglelefteq"
+},
+	"⊔": {
+	math: "\\trianglerighteq"
+},
+	"⊶": {
+	math: "\\original"
+},
+	"⊷": {
+	math: "\\image"
+},
+	"⊾": {
+	math: "\\multimap"
+},
+	"âŠč": {
+	math: "\\hermitconjmatrix"
+},
+	"âŠș": {
+	math: "\\intercal"
+},
+	"⊻": {
+	math: "\\veebar"
+},
+	"⊌": {
+	math: "\\barwedge"
+},
+	"⊜": {
+	math: "\\barvee"
+},
+	"⊟": {
+	math: "\\rightanglearc"
+},
+	"⊿": {
+	math: "\\varlrtriangle"
+},
+	"⋂": {
+	math: "\\bigcap"
+},
+	"⋃": {
+	math: "\\bigcup"
+},
+	"⋄": {
+	math: "\\diamond"
+},
+	"⋅": {
+	math: "\\cdot"
+},
+	"⋆": {
+	math: "\\star"
+},
+	"⋇": {
+	math: "\\divideontimes"
+},
+	"⋈": {
+	math: "\\bowtie"
+},
+	"⋉": {
+	math: "\\ltimes"
+},
+	"⋊": {
+	math: "\\rtimes"
+},
+	"⋋": {
+	math: "\\leftthreetimes"
+},
+	"⋌": {
+	math: "\\rightthreetimes"
+},
+	"⋍": {
+	math: "\\backsimeq"
+},
+	"⋎": {
+	math: "\\curlyvee"
+},
+	"⋏": {
+	math: "\\curlywedge"
+},
+	"⋐": {
+	math: "\\Subset"
+},
+	"⋑": {
+	math: "\\Supset"
+},
+	"⋒": {
+	math: "\\Cap"
+},
+	"⋓": {
+	math: "\\Cup"
+},
+	"⋔": {
+	math: "\\pitchfork"
+},
+	"⋕": {
+	math: "\\hash"
+},
+	"⋖": {
+	math: "\\lessdot"
+},
+	"⋗": {
+	math: "\\gtrdot"
+},
+	"⋘": {
+	math: "\\verymuchless"
+},
+	"⋙": {
+	math: "\\verymuchgreater"
+},
+	"⋚": {
+	math: "\\lesseqgtr"
+},
+	"⋛": {
+	math: "\\gtreqless"
+},
+	"⋜": {
+	math: "\\eqless"
+},
+	"⋝": {
+	math: "\\eqgtr"
+},
+	"⋞": {
+	math: "\\curlyeqprec"
+},
+	"⋟": {
+	math: "\\curlyeqsucc"
+},
+	"⋠": {
+	math: "\\npreceq"
+},
+	"⋡": {
+	math: "\\nsucceq"
+},
+	"⋱": {
+	math: "\\not\\sqsubseteq"
+},
+	"⋣": {
+	math: "\\not\\sqsupseteq"
+},
+	"â‹€": {
+	math: "\\sqsubsetneq"
+},
+	"â‹„": {
+	math: "\\Elzsqspne"
+},
+	"⋩": {
+	math: "\\lnsim"
+},
+	"⋧": {
+	math: "\\gnsim"
+},
+	"⋹": {
+	math: "\\precedesnotsimilar"
+},
+	"⋩": {
+	math: "\\succnsim"
+},
+	"â‹Ș": {
+	math: "\\ntriangleleft"
+},
+	"⋫": {
+	math: "\\ntriangleright"
+},
+	"⋬": {
+	math: "\\ntrianglelefteq"
+},
+	"⋭": {
+	math: "\\ntrianglerighteq"
+},
+	"⋼": {
+	math: "\\vdots"
+},
+	"⋯": {
+	math: "\\cdots"
+},
+	"⋰": {
+	math: "\\upslopeellipsis"
+},
+	"⋱": {
+	math: "\\downslopeellipsis"
+},
+	"â‹Č": {
+	math: "\\disin"
+},
+	"⋳": {
+	math: "\\varisins"
+},
+	"⋮": {
+	math: "\\isins"
+},
+	"â‹”": {
+	math: "\\isindot"
+},
+	"⋶": {
+	math: "\\barin"
+},
+	"⋷": {
+	math: "\\isinobar"
+},
+	"⋾": {
+	math: "\\isinvb"
+},
+	"â‹č": {
+	math: "\\isinE"
+},
+	"â‹ș": {
+	math: "\\nisd"
+},
+	"⋻": {
+	math: "\\varnis"
+},
+	"⋌": {
+	math: "\\nis"
+},
+	"⋜": {
+	math: "\\varniobar"
+},
+	"â‹Ÿ": {
+	math: "\\niobar"
+},
+	"⋿": {
+	math: "\\bagmember"
+},
+	"⌀": {
+	math: "\\diameter"
+},
+	"⌂": {
+	math: "\\house"
+},
+	"⌅": {
+	math: "\\varbarwedge",
+	text: "{\\barwedge}"
+},
+	"⌆": {
+	math: "\\perspcorrespond"
+},
+	"⌈": {
+	math: "\\lceil"
+},
+	"⌉": {
+	math: "\\rceil"
+},
+	"⌊": {
+	math: "\\lfloor"
+},
+	"⌋": {
+	math: "\\rfloor"
+},
+	"⌐": {
+	math: "\\invneg"
+},
+	"⌑": {
+	math: "\\wasylozenge"
+},
+	"⌒": {
+	math: "\\profline"
+},
+	"⌓": {
+	math: "\\profsurf"
+},
+	"⌕": {
+	math: "\\recorder"
+},
+	"⌖": {
+	math: "{\\mathchar\"2208}"
+},
+	"⌗": {
+	math: "\\viewdata"
+},
+	"⌙": {
+	math: "\\turnednot"
+},
+	"⌜": {
+	math: "\\ulcorner"
+},
+	"⌝": {
+	math: "\\urcorner"
+},
+	"⌞": {
+	math: "\\llcorner"
+},
+	"⌟": {
+	math: "\\lrcorner"
+},
+	"⌠": {
+	math: "\\inttop"
+},
+	"⌡": {
+	math: "\\intbottom"
+},
+	"⌱": {
+	math: "\\frown"
+},
+	"⌣": {
+	math: "\\smile"
+},
+	"〈": {
+	math: "\\langle"
+},
+	"âŒȘ": {
+	math: "\\rangle"
+},
+	"⌬": {
+	math: "\\varhexagonlrbonds"
+},
+	"âŒČ": {
+	math: "\\conictaper"
+},
+	"⌶": {
+	math: "\\topbot"
+},
+	"âŒč": {
+	math: "\\APLinv"
+},
+	"⌿": {
+	math: "\\notslash"
+},
+	"⍀": {
+	math: "\\notbackslash"
+},
+	"⍇": {
+	math: "\\APLleftarrowbox"
+},
+	"⍈": {
+	math: "\\APLrightarrowbox"
+},
+	"⍉": {
+	math: "\\invdiameter"
+},
+	"⍐": {
+	math: "\\APLuparrowbox"
+},
+	"⍓": {
+	math: "\\APLboxupcaret"
+},
+	"⍗": {
+	math: "\\APLdownarrowbox"
+},
+	"⍝": {
+	math: "\\APLcomment"
+},
+	"⍞": {
+	math: "\\APLinput"
+},
+	"⍟": {
+	math: "\\APLlog"
+},
+	"⍰": {
+	math: "\\APLboxquestion"
+},
+	"⍌": {
+	math: "\\rangledownzigzagarrow"
+},
+	"⎔": {
+	math: "\\hexagon"
+},
+	"⎛": {
+	math: "\\lparenuend"
+},
+	"⎜": {
+	math: "\\lparenextender"
+},
+	"⎝": {
+	math: "\\lparenlend"
+},
+	"⎞": {
+	math: "\\rparenuend"
+},
+	"⎟": {
+	math: "\\rparenextender"
+},
+	"⎠": {
+	math: "\\rparenlend"
+},
+	"⎡": {
+	math: "\\lbrackuend"
+},
+	"⎱": {
+	math: "\\lbrackextender"
+},
+	"⎣": {
+	math: "\\Elzdlcorn"
+},
+	"⎀": {
+	math: "\\rbrackuend"
+},
+	"⎄": {
+	math: "\\rbrackextender"
+},
+	"⎊": {
+	math: "\\rbracklend"
+},
+	"⎧": {
+	math: "\\lbraceuend"
+},
+	"⎚": {
+	math: "\\lbracemid"
+},
+	"⎩": {
+	math: "\\lbracelend"
+},
+	"âŽȘ": {
+	math: "\\vbraceextender"
+},
+	"⎫": {
+	math: "\\rbraceuend"
+},
+	"⎬": {
+	math: "\\rbracemid"
+},
+	"⎭": {
+	math: "\\rbracelend"
+},
+	"⎼": {
+	math: "\\intextender"
+},
+	"⎯": {
+	math: "\\harrowextender"
+},
+	"⎰": {
+	math: "\\lmoustache"
+},
+	"⎱": {
+	math: "\\rmoustache"
+},
+	"âŽČ": {
+	math: "\\sumtop"
+},
+	"⎳": {
+	math: "\\sumbottom"
+},
+	"⎮": {
+	math: "\\overbracket"
+},
+	"⎔": {
+	math: "\\underbracket"
+},
+	"⎶": {
+	math: "\\bbrktbrk"
+},
+	"⎷": {
+	math: "\\sqrtbottom"
+},
+	"⎾": {
+	math: "\\lvboxline"
+},
+	"âŽč": {
+	math: "\\rvboxline"
+},
+	"⏎": {
+	math: "\\varcarriagereturn"
+},
+	"⏜": {
+	math: "\\overparen"
+},
+	"⏝": {
+	math: "\\underparen"
+},
+	"⏞": {
+	math: "\\overbrace"
+},
+	"⏟": {
+	math: "\\underbrace"
+},
+	"⏠": {
+	math: "\\obrbrak"
+},
+	"⏡": {
+	math: "\\ubrbrak"
+},
+	"⏱": {
+	math: "\\trapezium"
+},
+	"⏣": {
+	math: "\\benzenr"
+},
+	"⏀": {
+	math: "\\strns"
+},
+	"⏄": {
+	math: "\\fltns"
+},
+	"⏊": {
+	math: "\\accurrent"
+},
+	"⏧": {
+	math: "\\elinters"
+},
+	"␀": {
+	text: "NUL"
+},
+	"␁": {
+	text: "SOH"
+},
+	"␂": {
+	text: "STX"
+},
+	"␃": {
+	text: "ETX"
+},
+	"␄": {
+	text: "EOT"
+},
+	"␅": {
+	text: "ENQ"
+},
+	"␆": {
+	text: "ACK"
+},
+	"␇": {
+	text: "BEL"
+},
+	"␈": {
+	text: "BS"
+},
+	"␉": {
+	text: "HT"
+},
+	"␊": {
+	text: "LF"
+},
+	"␋": {
+	text: "VT"
+},
+	"␌": {
+	text: "FF"
+},
+	"␍": {
+	text: "CR"
+},
+	"␎": {
+	text: "SO"
+},
+	"␏": {
+	text: "SI"
+},
+	"␐": {
+	text: "DLE"
+},
+	"␑": {
+	text: "DC1"
+},
+	"␒": {
+	text: "DC2"
+},
+	"␓": {
+	text: "DC3"
+},
+	"␔": {
+	text: "DC4"
+},
+	"␕": {
+	text: "NAK"
+},
+	"␖": {
+	text: "SYN"
+},
+	"␗": {
+	text: "ETB"
+},
+	"␘": {
+	text: "CAN"
+},
+	"␙": {
+	text: "EM"
+},
+	"␚": {
+	text: "SUB"
+},
+	"␛": {
+	text: "ESC"
+},
+	"␜": {
+	text: "FS"
+},
+	"␝": {
+	text: "GS"
+},
+	"␞": {
+	text: "RS"
+},
+	"␟": {
+	text: "US"
+},
+	"␠": {
+	text: "SP"
+},
+	"␥": {
+	text: "DEL"
+},
+	"␣": {
+	text: "{\\textvisiblespace}"
+},
+	"␀": {
+	text: "NL"
+},
+	"␄": {
+	text: "///"
+},
+	"␊": {
+	text: "?"
+},
+	"①": {
+	text: "\\ding{172}"
+},
+	"②": {
+	text: "\\ding{173}"
+},
+	"⑱": {
+	text: "\\ding{174}"
+},
+	"④": {
+	text: "\\ding{175}"
+},
+	"â‘€": {
+	text: "\\ding{176}"
+},
+	"â‘„": {
+	text: "\\ding{177}"
+},
+	"⑩": {
+	text: "\\ding{178}"
+},
+	"⑧": {
+	text: "\\ding{179}"
+},
+	"⑹": {
+	text: "\\ding{180}"
+},
+	"⑩": {
+	text: "\\ding{181}"
+},
+	"â‘Ș": {
+	text: "(11)"
+},
+	"⑫": {
+	text: "(12)"
+},
+	"⑬": {
+	text: "(13)"
+},
+	"⑭": {
+	text: "(14)"
+},
+	"⑼": {
+	text: "(15)"
+},
+	"⑯": {
+	text: "(16)"
+},
+	"⑰": {
+	text: "(17)"
+},
+	"⑱": {
+	text: "(18)"
+},
+	"â‘Č": {
+	text: "(19)"
+},
+	"⑳": {
+	text: "(20)"
+},
+	"⑮": {
+	text: "(1)"
+},
+	"â‘”": {
+	text: "(2)"
+},
+	"⑶": {
+	text: "(3)"
+},
+	"⑷": {
+	text: "(4)"
+},
+	"⑾": {
+	text: "(5)"
+},
+	"â‘č": {
+	text: "(6)"
+},
+	"â‘ș": {
+	text: "(7)"
+},
+	"⑻": {
+	text: "(8)"
+},
+	"⑌": {
+	text: "(9)"
+},
+	"⑜": {
+	text: "(10)"
+},
+	"â‘Ÿ": {
+	text: "(11)"
+},
+	"⑿": {
+	text: "(12)"
+},
+	"⒀": {
+	text: "(13)"
+},
+	"⒁": {
+	text: "(14)"
+},
+	"⒂": {
+	text: "(15)"
+},
+	"⒃": {
+	text: "(16)"
+},
+	"⒄": {
+	text: "(17)"
+},
+	"⒅": {
+	text: "(18)"
+},
+	"⒆": {
+	text: "(19)"
+},
+	"⒇": {
+	text: "(20)"
+},
+	"⒈": {
+	text: "1."
+},
+	"⒉": {
+	text: "2."
+},
+	"⒊": {
+	text: "3."
+},
+	"⒋": {
+	text: "4."
+},
+	"⒌": {
+	text: "5."
+},
+	"⒍": {
+	text: "6."
+},
+	"⒎": {
+	text: "7."
+},
+	"⒏": {
+	text: "8."
+},
+	"⒐": {
+	text: "9."
+},
+	"⒑": {
+	text: "10."
+},
+	"⒒": {
+	text: "11."
+},
+	"⒓": {
+	text: "12."
+},
+	"⒔": {
+	text: "13."
+},
+	"⒕": {
+	text: "14."
+},
+	"⒖": {
+	text: "15."
+},
+	"⒗": {
+	text: "16."
+},
+	"⒘": {
+	text: "17."
+},
+	"⒙": {
+	text: "18."
+},
+	"⒚": {
+	text: "19."
+},
+	"⒛": {
+	text: "20."
+},
+	"⒜": {
+	text: "(a)"
+},
+	"⒝": {
+	text: "(b)"
+},
+	"⒞": {
+	text: "(c)"
+},
+	"⒟": {
+	text: "(d)"
+},
+	"⒠": {
+	text: "(e)"
+},
+	"⒡": {
+	text: "(f)"
+},
+	"⒱": {
+	text: "(g)"
+},
+	"⒣": {
+	text: "(h)"
+},
+	"â’€": {
+	text: "(i)"
+},
+	"â’„": {
+	text: "(j)"
+},
+	"⒩": {
+	text: "(k)"
+},
+	"⒧": {
+	text: "(l)"
+},
+	"Ⓓ": {
+	text: "(m)"
+},
+	"⒩": {
+	text: "(n)"
+},
+	"â’Ș": {
+	text: "(o)"
+},
+	"⒫": {
+	text: "(p)"
+},
+	"⒬": {
+	text: "(q)"
+},
+	"⒭": {
+	text: "(r)"
+},
+	"Ⓖ": {
+	text: "(s)"
+},
+	"⒯": {
+	text: "(t)"
+},
+	"⒰": {
+	text: "(u)"
+},
+	"⒱": {
+	text: "(v)"
+},
+	"â’Č": {
+	text: "(w)"
+},
+	"⒳": {
+	text: "(x)"
+},
+	"⒮": {
+	text: "(y)"
+},
+	"â’”": {
+	text: "(z)"
+},
+	"Ⓐ": {
+	text: "(A)"
+},
+	"Ⓑ": {
+	text: "(B)"
+},
+	"Ⓘ": {
+	text: "(C)"
+},
+	"â’č": {
+	text: "(D)"
+},
+	"â’ș": {
+	text: "(E)"
+},
+	"Ⓕ": {
+	text: "(F)"
+},
+	"⒌": {
+	text: "(G)"
+},
+	"⒜": {
+	text: "(H)"
+},
+	"â’Ÿ": {
+	text: "(I)"
+},
+	"Ⓙ": {
+	text: "(J)"
+},
+	"Ⓚ": {
+	text: "(K)"
+},
+	"Ⓛ": {
+	text: "(L)"
+},
+	"Ⓜ": {
+	text: "(M)"
+},
+	"Ⓝ": {
+	text: "(N)"
+},
+	"Ⓞ": {
+	text: "(O)"
+},
+	"Ⓟ": {
+	text: "(P)"
+},
+	"Ⓠ": {
+	text: "(Q)"
+},
+	"Ⓡ": {
+	text: "(R)"
+},
+	"Ⓢ": {
+	math: "\\circledS"
+},
+	"Ⓣ": {
+	text: "(T)"
+},
+	"Ⓤ": {
+	text: "(U)"
+},
+	"Ⓥ": {
+	text: "(V)"
+},
+	"Ⓦ": {
+	text: "(W)"
+},
+	"Ⓧ": {
+	text: "(X)"
+},
+	"Ⓨ": {
+	text: "(Y)"
+},
+	"Ⓩ": {
+	text: "(Z)"
+},
+	"ⓐ": {
+	text: "(a)"
+},
+	"ⓑ": {
+	text: "(b)"
+},
+	"ⓒ": {
+	text: "(c)"
+},
+	"ⓓ": {
+	text: "(d)"
+},
+	"ⓔ": {
+	text: "(e)"
+},
+	"ⓕ": {
+	text: "(f)"
+},
+	"ⓖ": {
+	text: "(g)"
+},
+	"ⓗ": {
+	text: "(h)"
+},
+	"ⓘ": {
+	text: "(i)"
+},
+	"ⓙ": {
+	text: "(j)"
+},
+	"ⓚ": {
+	text: "(k)"
+},
+	"ⓛ": {
+	text: "(l)"
+},
+	"ⓜ": {
+	text: "(m)"
+},
+	"ⓝ": {
+	text: "(n)"
+},
+	"ⓞ": {
+	text: "(o)"
+},
+	"ⓟ": {
+	text: "(p)"
+},
+	"ⓠ": {
+	text: "(q)"
+},
+	"ⓡ": {
+	text: "(r)"
+},
+	"⓱": {
+	text: "(s)"
+},
+	"ⓣ": {
+	text: "(t)"
+},
+	"â“€": {
+	text: "(u)"
+},
+	"â“„": {
+	text: "(v)"
+},
+	"ⓩ": {
+	text: "(w)"
+},
+	"ⓧ": {
+	text: "(x)"
+},
+	"⓹": {
+	text: "(y)"
+},
+	"ⓩ": {
+	text: "(z)"
+},
+	"â“Ș": {
+	text: "(0)"
+},
+	"─": {
+	text: "-"
+},
+	"━": {
+	text: "="
+},
+	"│": {
+	text: "|"
+},
+	"┃": {
+	text: "|"
+},
+	"┄": {
+	text: "-"
+},
+	"┅": {
+	text: "="
+},
+	"┆": {
+	math: "\\Elzdshfnc"
+},
+	"┇": {
+	text: "|"
+},
+	"┈": {
+	text: "-"
+},
+	"┉": {
+	text: "="
+},
+	"┊": {
+	text: "|"
+},
+	"┋": {
+	text: "|"
+},
+	"┌": {
+	text: "+"
+},
+	"┍": {
+	text: "+"
+},
+	"┎": {
+	text: "+"
+},
+	"┏": {
+	text: "+"
+},
+	"┐": {
+	text: "+"
+},
+	"┑": {
+	text: "+"
+},
+	"┒": {
+	text: "+"
+},
+	"┓": {
+	text: "+"
+},
+	"└": {
+	text: "+"
+},
+	"┕": {
+	text: "+"
+},
+	"┖": {
+	text: "+"
+},
+	"┗": {
+	text: "+"
+},
+	"┘": {
+	text: "+"
+},
+	"┙": {
+	math: "\\Elzsqfnw"
+},
+	"┚": {
+	text: "+"
+},
+	"┛": {
+	text: "+"
+},
+	"├": {
+	text: "+"
+},
+	"┝": {
+	text: "+"
+},
+	"┞": {
+	text: "+"
+},
+	"┟": {
+	text: "+"
+},
+	"┠": {
+	text: "+"
+},
+	"┡": {
+	text: "+"
+},
+	"┱": {
+	text: "+"
+},
+	"┣": {
+	text: "+"
+},
+	"─": {
+	text: "+"
+},
+	"┄": {
+	text: "+"
+},
+	"┩": {
+	text: "+"
+},
+	"┧": {
+	text: "+"
+},
+	"┹": {
+	text: "+"
+},
+	"┩": {
+	text: "+"
+},
+	"â”Ș": {
+	text: "+"
+},
+	"┫": {
+	text: "+"
+},
+	"┬": {
+	text: "+"
+},
+	"┭": {
+	text: "+"
+},
+	"┼": {
+	text: "+"
+},
+	"┯": {
+	text: "+"
+},
+	"┰": {
+	text: "+"
+},
+	"┱": {
+	text: "+"
+},
+	"â”Č": {
+	text: "+"
+},
+	"┳": {
+	text: "+"
+},
+	"┮": {
+	text: "+"
+},
+	"â””": {
+	text: "+"
+},
+	"┶": {
+	text: "+"
+},
+	"┷": {
+	text: "+"
+},
+	"┾": {
+	text: "+"
+},
+	"â”č": {
+	text: "+"
+},
+	"â”ș": {
+	text: "+"
+},
+	"┻": {
+	text: "+"
+},
+	"┌": {
+	text: "+"
+},
+	"├": {
+	text: "+"
+},
+	"┟": {
+	text: "+"
+},
+	"┿": {
+	text: "+"
+},
+	"╀": {
+	text: "+"
+},
+	"╁": {
+	text: "+"
+},
+	"╂": {
+	text: "+"
+},
+	"╃": {
+	text: "+"
+},
+	"╄": {
+	text: "+"
+},
+	"╅": {
+	text: "+"
+},
+	"╆": {
+	text: "+"
+},
+	"╇": {
+	text: "+"
+},
+	"╈": {
+	text: "+"
+},
+	"╉": {
+	text: "+"
+},
+	"╊": {
+	text: "+"
+},
+	"╋": {
+	text: "+"
+},
+	"╌": {
+	text: "-"
+},
+	"╍": {
+	text: "="
+},
+	"╎": {
+	text: "|"
+},
+	"╏": {
+	text: "|"
+},
+	"═": {
+	text: "="
+},
+	"║": {
+	text: "|"
+},
+	"╒": {
+	text: "+"
+},
+	"╓": {
+	text: "+"
+},
+	"╔": {
+	text: "+"
+},
+	"╕": {
+	text: "+"
+},
+	"╖": {
+	text: "+"
+},
+	"╗": {
+	text: "+"
+},
+	"╘": {
+	text: "+"
+},
+	"╙": {
+	text: "+"
+},
+	"╚": {
+	text: "+"
+},
+	"╛": {
+	text: "+"
+},
+	"╜": {
+	text: "+"
+},
+	"╝": {
+	text: "+"
+},
+	"╞": {
+	text: "+"
+},
+	"╟": {
+	text: "+"
+},
+	"╠": {
+	text: "+"
+},
+	"╡": {
+	text: "+"
+},
+	"╱": {
+	text: "+"
+},
+	"╣": {
+	text: "+"
+},
+	"â•€": {
+	text: "+"
+},
+	"â•„": {
+	text: "+"
+},
+	"╩": {
+	text: "+"
+},
+	"╧": {
+	text: "+"
+},
+	"╹": {
+	text: "+"
+},
+	"╩": {
+	text: "+"
+},
+	"â•Ș": {
+	text: "+"
+},
+	"╫": {
+	text: "+"
+},
+	"╬": {
+	text: "+"
+},
+	"╭": {
+	text: "+"
+},
+	"╼": {
+	text: "+"
+},
+	"╯": {
+	text: "+"
+},
+	"╰": {
+	text: "+"
+},
+	"╱": {
+	math: "\\diagup"
+},
+	"â•Č": {
+	text: "\\"
+},
+	"╳": {
+	text: "X"
+},
+	"╌": {
+	text: "-"
+},
+	"╜": {
+	text: "|"
+},
+	"â•Ÿ": {
+	text: "-"
+},
+	"╿": {
+	text: "|"
+},
+	"▀": {
+	math: "\\blockuphalf"
+},
+	"▄": {
+	math: "\\blocklowhalf"
+},
+	"█": {
+	math: "\\blockfull"
+},
+	"▌": {
+	math: "\\blocklefthalf"
+},
+	"▐": {
+	math: "\\blockrighthalf"
+},
+	"░": {
+	math: "\\blockqtrshaded"
+},
+	"▒": {
+	math: "\\blockhalfshaded"
+},
+	"▓": {
+	math: "\\blockthreeqtrshaded"
+},
+	"■": {
+	math: "\\mdlgblksquare",
+	text: "\\ding{110}"
+},
+	"□": {
+	math: "\\square"
+},
+	"▱": {
+	math: "\\squoval"
+},
+	"▣": {
+	math: "\\blackinwhitesquare"
+},
+	"â–€": {
+	math: "\\squarehfill"
+},
+	"â–„": {
+	math: "\\squarevfill"
+},
+	"▩": {
+	math: "\\squarehvfill"
+},
+	"▧": {
+	math: "\\squarenwsefill"
+},
+	"▹": {
+	math: "\\squareneswfill"
+},
+	"▩": {
+	math: "\\squarecrossfill"
+},
+	"â–Ș": {
+	math: "\\blacksquare"
+},
+	"▫": {
+	math: "\\smwhtsquare"
+},
+	"▬": {
+	math: "\\hrectangleblack"
+},
+	"▭": {
+	math: "\\fbox{~~}"
+},
+	"▼": {
+	math: "\\vrectangleblack"
+},
+	"▯": {
+	math: "\\Elzvrecto"
+},
+	"▰": {
+	math: "\\parallelogramblack"
+},
+	"â–Č": {
+	math: "\\bigblacktriangleup",
+	text: "\\ding{115}"
+},
+	"△": {
+	math: "\\bigtriangleup"
+},
+	"▮": {
+	math: "\\blacktriangle"
+},
+	"â–”": {
+	math: "\\vartriangle"
+},
+	"▶": {
+	math: "\\RHD"
+},
+	"▷": {
+	math: "\\rhd"
+},
+	"▾": {
+	math: "\\blacktriangleright"
+},
+	"â–č": {
+	math: "\\triangleright"
+},
+	"â–ș": {
+	math: "\\blackpointerright"
+},
+	"▻": {
+	math: "\\whitepointerright"
+},
+	"▌": {
+	math: "\\bigblacktriangledown",
+	text: "\\ding{116}"
+},
+	"▜": {
+	math: "\\bigtriangledown"
+},
+	"â–Ÿ": {
+	math: "\\blacktriangledown"
+},
+	"▿": {
+	math: "\\triangledown"
+},
+	"◀": {
+	math: "\\LHD"
+},
+	"◁": {
+	math: "\\lhd"
+},
+	"◂": {
+	math: "\\blacktriangleleft"
+},
+	"◃": {
+	math: "\\triangleleft"
+},
+	"◄": {
+	math: "\\blackpointerleft"
+},
+	"◅": {
+	math: "\\whitepointerleft"
+},
+	"◆": {
+	math: "\\Diamondblack",
+	text: "\\ding{117}"
+},
+	"◇": {
+	math: "\\Diamond"
+},
+	"◈": {
+	math: "\\blackinwhitediamond"
+},
+	"◉": {
+	math: "\\fisheye"
+},
+	"◊": {
+	math: "\\lozenge"
+},
+	"○": {
+	math: "\\bigcirc"
+},
+	"◌": {
+	math: "\\dottedcircle"
+},
+	"◍": {
+	math: "\\circlevertfill"
+},
+	"◎": {
+	math: "\\bullseye"
+},
+	"●": {
+	math: "\\CIRCLE",
+	text: "\\ding{108}"
+},
+	"◐": {
+	math: "\\Elzcirfl"
+},
+	"◑": {
+	math: "\\Elzcirfr"
+},
+	"◒": {
+	math: "\\Elzcirfb"
+},
+	"◓": {
+	math: "\\circletophalfblack"
+},
+	"◔": {
+	math: "\\circleurquadblack"
+},
+	"◕": {
+	math: "\\blackcircleulquadwhite"
+},
+	"◖": {
+	math: "\\LEFTCIRCLE"
+},
+	"◗": {
+	math: "\\RIGHTCIRCLE",
+	text: "\\ding{119}"
+},
+	"◘": {
+	math: "\\Elzrvbull"
+},
+	"◙": {
+	math: "\\inversewhitecircle"
+},
+	"◚": {
+	math: "\\invwhiteupperhalfcircle"
+},
+	"◛": {
+	math: "\\invwhitelowerhalfcircle"
+},
+	"◜": {
+	math: "\\ularc"
+},
+	"◝": {
+	math: "\\urarc"
+},
+	"◞": {
+	math: "\\lrarc"
+},
+	"◟": {
+	math: "\\llarc"
+},
+	"◠": {
+	math: "\\topsemicircle"
+},
+	"◡": {
+	math: "\\botsemicircle"
+},
+	"◱": {
+	math: "\\lrblacktriangle"
+},
+	"◣": {
+	math: "\\llblacktriangle"
+},
+	"â—€": {
+	math: "\\ulblacktriangle"
+},
+	"â—„": {
+	math: "\\urblacktriangle"
+},
+	"◩": {
+	math: "\\smwhtcircle"
+},
+	"◧": {
+	math: "\\Elzsqfl"
+},
+	"◹": {
+	math: "\\Elzsqfr"
+},
+	"◩": {
+	math: "\\squareulblack"
+},
+	"â—Ș": {
+	math: "\\Elzsqfse"
+},
+	"◫": {
+	math: "\\boxbar"
+},
+	"◬": {
+	math: "\\trianglecdot"
+},
+	"◭": {
+	math: "\\triangleleftblack"
+},
+	"◼": {
+	math: "\\trianglerightblack"
+},
+	"◯": {
+	math: "\\bigcirc"
+},
+	"◰": {
+	math: "\\squareulquad"
+},
+	"◱": {
+	math: "\\squarellquad"
+},
+	"â—Č": {
+	math: "\\squarelrquad"
+},
+	"◳": {
+	math: "\\squareurquad"
+},
+	"◮": {
+	math: "\\circleulquad"
+},
+	"â—”": {
+	math: "\\circlellquad"
+},
+	"◶": {
+	math: "\\circlelrquad"
+},
+	"◷": {
+	math: "\\circleurquad"
+},
+	"◾": {
+	math: "\\ultriangle"
+},
+	"â—č": {
+	math: "\\urtriangle"
+},
+	"â—ș": {
+	math: "\\lltriangle"
+},
+	"◻": {
+	math: "\\square"
+},
+	"◌": {
+	math: "\\blacksquare"
+},
+	"◜": {
+	math: "\\mdsmwhtsquare"
+},
+	"â—Ÿ": {
+	math: "\\mdsmblksquare"
+},
+	"◿": {
+	math: "\\lrtriangle"
+},
+	"★": {
+	math: "\\bigstar",
+	text: "\\ding{72}"
+},
+	"☆": {
+	math: "\\bigwhitestar",
+	text: "\\ding{73}"
+},
+	"☉": {
+	math: "\\Sun"
+},
+	"☎": {
+	text: "\\ding{37}"
+},
+	"☐": {
+	math: "\\Square"
+},
+	"☑": {
+	math: "\\CheckedBox"
+},
+	"☒": {
+	math: "\\XBox"
+},
+	"☓": {
+	text: "X"
+},
+	"☕": {
+	math: "\\steaming"
+},
+	"☛": {
+	text: "\\ding{42}"
+},
+	"☞": {
+	math: "\\pointright",
+	text: "\\ding{43}"
+},
+	"☠": {
+	math: "\\skull"
+},
+	"☥": {
+	math: "\\danger"
+},
+	"☹": {
+	math: "\\radiation"
+},
+	"☣": {
+	math: "\\biohazard"
+},
+	"☯": {
+	math: "\\yinyang"
+},
+	"â˜č": {
+	math: "\\frownie"
+},
+	"â˜ș": {
+	math: "\\smiley"
+},
+	"☻": {
+	math: "\\blacksmiley"
+},
+	"☌": {
+	math: "\\sun"
+},
+	"☜": {
+	text: "{\\rightmoon}",
+	textpackages: [
+		"wasysym"
+	]
+},
+	"☟": {
+	text: "{\\leftmoon}",
+	textpackages: [
+		"wasysym"
+	]
+},
+	"☿": {
+	math: "\\mercury",
+	text: "{\\mercury}"
+},
+	"♀": {
+	math: "\\female",
+	text: "{\\venus}"
+},
+	"♁": {
+	math: "\\earth"
+},
+	"♂": {
+	math: "\\male",
+	text: "{\\male}"
+},
+	"♃": {
+	math: "\\jupiter",
+	text: "{\\jupiter}"
+},
+	"♄": {
+	math: "\\saturn",
+	text: "{\\saturn}"
+},
+	"♅": {
+	math: "\\uranus",
+	text: "{\\uranus}"
+},
+	"♆": {
+	math: "\\neptune",
+	text: "{\\neptune}"
+},
+	"♇": {
+	math: "\\pluto",
+	text: "{\\pluto}"
+},
+	"♈": {
+	math: "\\aries",
+	text: "{\\aries}"
+},
+	"♉": {
+	math: "\\taurus",
+	text: "{\\taurus}"
+},
+	"♊": {
+	math: "\\gemini",
+	text: "{\\gemini}"
+},
+	"♋": {
+	math: "\\cancer",
+	text: "{\\cancer}"
+},
+	"♌": {
+	math: "\\leo",
+	text: "{\\leo}"
+},
+	"♍": {
+	math: "\\virgo",
+	text: "{\\virgo}"
+},
+	"♎": {
+	math: "\\libra",
+	text: "{\\libra}"
+},
+	"♏": {
+	math: "\\scorpio",
+	text: "{\\scorpio}"
+},
+	"♐": {
+	math: "\\sagittarius",
+	text: "{\\sagittarius}"
+},
+	"♑": {
+	math: "\\capricornus",
+	text: "{\\capricornus}"
+},
+	"♒": {
+	math: "\\aquarius",
+	text: "{\\aquarius}"
+},
+	"♓": {
+	math: "\\pisces",
+	text: "{\\pisces}"
+},
+	"♠": {
+	math: "\\spadesuit",
+	text: "\\ding{171}"
+},
+	"♡": {
+	math: "\\heartsuit"
+},
+	"♱": {
+	math: "\\diamond"
+},
+	"♣": {
+	math: "\\clubsuit",
+	text: "\\ding{168}"
+},
+	"♀": {
+	math: "\\varspadesuit"
+},
+	"♄": {
+	math: "\\varheartsuit",
+	text: "\\ding{170}"
+},
+	"♩": {
+	math: "\\vardiamondsuit",
+	text: "\\ding{169}"
+},
+	"♧": {
+	math: "\\varclubsuit"
+},
+	"♩": {
+	math: "\\quarternote",
+	text: "{\\quarternote}"
+},
+	"â™Ș": {
+	math: "\\eighthnote",
+	text: "{\\eighthnote}"
+},
+	"♫": {
+	math: "\\twonotes"
+},
+	"♬": {
+	math: "\\sixteenthnote"
+},
+	"♭": {
+	math: "\\flat"
+},
+	"♼": {
+	math: "\\natural"
+},
+	"♯": {
+	math: "\\sharp"
+},
+	"♻": {
+	math: "\\recycle"
+},
+	"♟": {
+	math: "\\acidfree"
+},
+	"⚀": {
+	math: "\\dicei"
+},
+	"⚁": {
+	math: "\\diceii"
+},
+	"⚂": {
+	math: "\\diceiii"
+},
+	"⚃": {
+	math: "\\diceiv"
+},
+	"⚄": {
+	math: "\\dicev"
+},
+	"⚅": {
+	math: "\\dicevi"
+},
+	"⚆": {
+	math: "\\circledrightdot"
+},
+	"⚇": {
+	math: "\\circledtwodots"
+},
+	"⚈": {
+	math: "\\blackcircledrightdot"
+},
+	"⚉": {
+	math: "\\blackcircledtwodots"
+},
+	"⚓": {
+	math: "\\anchor"
+},
+	"⚔": {
+	math: "\\swords"
+},
+	"⚠": {
+	math: "\\warning"
+},
+	"âš„": {
+	math: "\\Hermaphrodite"
+},
+	"âšȘ": {
+	math: "\\medcirc"
+},
+	"⚫": {
+	math: "\\medbullet"
+},
+	"⚬": {
+	math: "\\mdsmwhtcircle"
+},
+	"âšČ": {
+	math: "\\neuter"
+},
+	"✁": {
+	text: "\\ding{33}"
+},
+	"✂": {
+	text: "\\ding{34}"
+},
+	"✃": {
+	text: "\\ding{35}"
+},
+	"✄": {
+	text: "\\ding{36}"
+},
+	"✆": {
+	text: "\\ding{38}"
+},
+	"✇": {
+	text: "\\ding{39}"
+},
+	"✈": {
+	text: "\\ding{40}"
+},
+	"✉": {
+	text: "\\ding{41}"
+},
+	"✌": {
+	text: "\\ding{44}"
+},
+	"✍": {
+	text: "\\ding{45}"
+},
+	"✎": {
+	math: "\\pencil",
+	text: "\\ding{46}"
+},
+	"✏": {
+	text: "\\ding{47}"
+},
+	"✐": {
+	text: "\\ding{48}"
+},
+	"✑": {
+	text: "\\ding{49}"
+},
+	"✒": {
+	text: "\\ding{50}"
+},
+	"✓": {
+	math: "\\checkmark",
+	text: "\\ding{51}"
+},
+	"✔": {
+	text: "\\ding{52}"
+},
+	"✕": {
+	text: "\\ding{53}"
+},
+	"✖": {
+	text: "\\ding{54}"
+},
+	"✗": {
+	math: "\\ballotx",
+	text: "\\ding{55}"
+},
+	"✘": {
+	text: "\\ding{56}"
+},
+	"✙": {
+	text: "\\ding{57}"
+},
+	"✚": {
+	text: "\\ding{58}"
+},
+	"✛": {
+	text: "\\ding{59}"
+},
+	"✜": {
+	text: "\\ding{60}"
+},
+	"✝": {
+	text: "\\ding{61}"
+},
+	"✞": {
+	text: "\\ding{62}"
+},
+	"✟": {
+	text: "\\ding{63}"
+},
+	"✠": {
+	math: "\\maltese",
+	text: "\\ding{64}"
+},
+	"✡": {
+	text: "\\ding{65}"
+},
+	"✱": {
+	text: "\\ding{66}"
+},
+	"✣": {
+	text: "\\ding{67}"
+},
+	"✀": {
+	text: "\\ding{68}"
+},
+	"✄": {
+	text: "\\ding{69}"
+},
+	"✩": {
+	text: "\\ding{70}"
+},
+	"✧": {
+	text: "\\ding{71}"
+},
+	"✩": {
+	text: "\\ding{73}"
+},
+	"âœȘ": {
+	math: "\\circledstar",
+	text: "\\ding{74}"
+},
+	"✫": {
+	text: "\\ding{75}"
+},
+	"✬": {
+	text: "\\ding{76}"
+},
+	"✭": {
+	text: "\\ding{77}"
+},
+	"✼": {
+	text: "\\ding{78}"
+},
+	"✯": {
+	text: "\\ding{79}"
+},
+	"✰": {
+	text: "\\ding{80}"
+},
+	"✱": {
+	text: "\\ding{81}"
+},
+	"âœČ": {
+	text: "\\ding{82}"
+},
+	"✳": {
+	text: "\\ding{83}"
+},
+	"✮": {
+	text: "\\ding{84}"
+},
+	"✔": {
+	text: "\\ding{85}"
+},
+	"✶": {
+	math: "\\varstar",
+	text: "\\ding{86}"
+},
+	"✷": {
+	text: "\\ding{87}"
+},
+	"✾": {
+	text: "\\ding{88}"
+},
+	"âœč": {
+	text: "\\ding{89}"
+},
+	"âœș": {
+	text: "\\ding{90}"
+},
+	"✻": {
+	text: "\\ding{91}"
+},
+	"✌": {
+	text: "\\ding{92}"
+},
+	"✜": {
+	math: "\\dingasterisk",
+	text: "\\ding{93}"
+},
+	"✟": {
+	text: "\\ding{94}"
+},
+	"✿": {
+	text: "\\ding{95}"
+},
+	"❀": {
+	text: "\\ding{96}"
+},
+	"❁": {
+	text: "\\ding{97}"
+},
+	"❂": {
+	text: "\\ding{98}"
+},
+	"❃": {
+	text: "\\ding{99}"
+},
+	"❄": {
+	text: "\\ding{100}"
+},
+	"❅": {
+	text: "\\ding{101}"
+},
+	"❆": {
+	text: "\\ding{102}"
+},
+	"❇": {
+	text: "\\ding{103}"
+},
+	"❈": {
+	text: "\\ding{104}"
+},
+	"❉": {
+	text: "\\ding{105}"
+},
+	"❊": {
+	text: "\\ding{106}"
+},
+	"❋": {
+	text: "\\ding{107}"
+},
+	"❍": {
+	text: "\\ding{109}"
+},
+	"❏": {
+	text: "\\ding{111}"
+},
+	"❐": {
+	text: "\\ding{112}"
+},
+	"❑": {
+	text: "\\ding{113}"
+},
+	"❒": {
+	text: "\\ding{114}"
+},
+	"❖": {
+	text: "\\ding{118}"
+},
+	"❘": {
+	text: "\\ding{120}"
+},
+	"❙": {
+	text: "\\ding{121}"
+},
+	"❚": {
+	text: "\\ding{122}"
+},
+	"❛": {
+	text: "\\ding{123}"
+},
+	"❜": {
+	text: "\\ding{124}"
+},
+	"❝": {
+	text: "\\ding{125}"
+},
+	"❞": {
+	text: "\\ding{126}"
+},
+	"❡": {
+	text: "\\ding{161}"
+},
+	"❱": {
+	text: "\\ding{162}"
+},
+	"❣": {
+	text: "\\ding{163}"
+},
+	"❀": {
+	text: "\\ding{164}"
+},
+	"❄": {
+	text: "\\ding{165}"
+},
+	"❊": {
+	text: "\\ding{166}"
+},
+	"❧": {
+	text: "\\ding{167}"
+},
+	"âČ": {
+	math: "\\lbrbrak"
+},
+	"❳": {
+	math: "\\rbrbrak"
+},
+	"❶": {
+	text: "\\ding{182}"
+},
+	"❷": {
+	text: "\\ding{183}"
+},
+	"❞": {
+	text: "\\ding{184}"
+},
+	"âč": {
+	text: "\\ding{185}"
+},
+	"âș": {
+	text: "\\ding{186}"
+},
+	"❻": {
+	text: "\\ding{187}"
+},
+	"❌": {
+	text: "\\ding{188}"
+},
+	"❜": {
+	text: "\\ding{189}"
+},
+	"❟": {
+	text: "\\ding{190}"
+},
+	"❿": {
+	text: "\\ding{191}"
+},
+	"➀": {
+	text: "\\ding{192}"
+},
+	"➁": {
+	text: "\\ding{193}"
+},
+	"➂": {
+	text: "\\ding{194}"
+},
+	"➃": {
+	text: "\\ding{195}"
+},
+	"➄": {
+	text: "\\ding{196}"
+},
+	"➅": {
+	text: "\\ding{197}"
+},
+	"➆": {
+	text: "\\ding{198}"
+},
+	"➇": {
+	text: "\\ding{199}"
+},
+	"➈": {
+	text: "\\ding{200}"
+},
+	"➉": {
+	text: "\\ding{201}"
+},
+	"➊": {
+	text: "\\ding{202}"
+},
+	"➋": {
+	text: "\\ding{203}"
+},
+	"➌": {
+	text: "\\ding{204}"
+},
+	"➍": {
+	text: "\\ding{205}"
+},
+	"➎": {
+	text: "\\ding{206}"
+},
+	"➏": {
+	text: "\\ding{207}"
+},
+	"➐": {
+	text: "\\ding{208}"
+},
+	"➑": {
+	text: "\\ding{209}"
+},
+	"➒": {
+	text: "\\ding{210}"
+},
+	"➓": {
+	text: "\\ding{211}"
+},
+	"➔": {
+	text: "\\ding{212}"
+},
+	"➘": {
+	text: "\\ding{216}"
+},
+	"➙": {
+	text: "\\ding{217}"
+},
+	"➚": {
+	text: "\\ding{218}"
+},
+	"➛": {
+	math: "\\draftingarrow",
+	text: "\\ding{219}"
+},
+	"➜": {
+	text: "\\ding{220}"
+},
+	"➝": {
+	text: "\\ding{221}"
+},
+	"➞": {
+	text: "\\ding{222}"
+},
+	"➟": {
+	text: "\\ding{223}"
+},
+	"➠": {
+	text: "\\ding{224}"
+},
+	"➡": {
+	text: "\\ding{225}"
+},
+	"➱": {
+	math: "\\arrowbullet",
+	text: "\\ding{226}"
+},
+	"➣": {
+	text: "\\ding{227}"
+},
+	"➀": {
+	text: "\\ding{228}"
+},
+	"➄": {
+	text: "\\ding{229}"
+},
+	"➊": {
+	text: "\\ding{230}"
+},
+	"➧": {
+	text: "\\ding{231}"
+},
+	"➚": {
+	text: "\\ding{232}"
+},
+	"➩": {
+	text: "\\ding{233}"
+},
+	"âžȘ": {
+	text: "\\ding{234}"
+},
+	"➫": {
+	text: "\\ding{235}"
+},
+	"➬": {
+	text: "\\ding{236}"
+},
+	"➭": {
+	text: "\\ding{237}"
+},
+	"➼": {
+	text: "\\ding{238}"
+},
+	"➯": {
+	text: "\\ding{239}"
+},
+	"➱": {
+	text: "\\ding{241}"
+},
+	"âžČ": {
+	text: "\\ding{242}"
+},
+	"➳": {
+	text: "\\ding{243}"
+},
+	"➮": {
+	text: "\\ding{244}"
+},
+	"➔": {
+	text: "\\ding{245}"
+},
+	"➶": {
+	text: "\\ding{246}"
+},
+	"➷": {
+	text: "\\ding{247}"
+},
+	"➾": {
+	text: "\\ding{248}"
+},
+	"âžč": {
+	text: "\\ding{249}"
+},
+	"âžș": {
+	text: "\\ding{250}"
+},
+	"➻": {
+	text: "\\ding{251}"
+},
+	"➌": {
+	text: "\\ding{252}"
+},
+	"➜": {
+	text: "\\ding{253}"
+},
+	"➟": {
+	text: "\\ding{254}"
+},
+	"⟀": {
+	math: "\\threedangle"
+},
+	"⟁": {
+	math: "\\whiteinwhitetriangle"
+},
+	"⟂": {
+	math: "\\perp"
+},
+	"⟃": {
+	math: "\\subsetcirc"
+},
+	"⟄": {
+	math: "\\supsetcirc"
+},
+	"⟅": {
+	math: "\\Lbag"
+},
+	"⟆": {
+	math: "\\Rbag"
+},
+	"⟇": {
+	math: "\\veedot"
+},
+	"⟈": {
+	math: "\\bsolhsub"
+},
+	"⟉": {
+	math: "\\suphsol"
+},
+	"⟌": {
+	math: "\\longdivision"
+},
+	"⟐": {
+	math: "\\Diamonddot"
+},
+	"⟑": {
+	math: "\\wedgedot"
+},
+	"⟒": {
+	math: "\\upin"
+},
+	"⟓": {
+	math: "\\pullback"
+},
+	"⟔": {
+	math: "\\pushout"
+},
+	"⟕": {
+	math: "\\leftouterjoin"
+},
+	"⟖": {
+	math: "\\rightouterjoin"
+},
+	"⟗": {
+	math: "\\fullouterjoin"
+},
+	"⟘": {
+	math: "\\bigbot"
+},
+	"⟙": {
+	math: "\\bigtop"
+},
+	"⟚": {
+	math: "\\DashVDash"
+},
+	"⟛": {
+	math: "\\dashVdash"
+},
+	"⟜": {
+	math: "\\multimapinv"
+},
+	"⟝": {
+	math: "\\vlongdash"
+},
+	"⟞": {
+	math: "\\longdashv"
+},
+	"⟟": {
+	math: "\\cirbot"
+},
+	"⟠": {
+	math: "\\lozengeminus"
+},
+	"⟡": {
+	math: "\\concavediamond"
+},
+	"⟱": {
+	math: "\\concavediamondtickleft"
+},
+	"⟣": {
+	math: "\\concavediamondtickright"
+},
+	"⟀": {
+	math: "\\whitesquaretickleft"
+},
+	"⟄": {
+	math: "\\whitesquaretickright"
+},
+	"⟩": {
+	math: "\\llbracket"
+},
+	"⟧": {
+	math: "\\rrbracket"
+},
+	"⟹": {
+	math: "\\langle"
+},
+	"⟩": {
+	math: "\\rangle"
+},
+	"âŸȘ": {
+	math: "\\lang"
+},
+	"⟫": {
+	math: "\\rang"
+},
+	"⟬": {
+	math: "\\Lbrbrak"
+},
+	"⟭": {
+	math: "\\Rbrbrak"
+},
+	"⟼": {
+	math: "\\lgroup"
+},
+	"⟯": {
+	math: "\\rgroup"
+},
+	"⟰": {
+	math: "\\UUparrow"
+},
+	"⟱": {
+	math: "\\DDownarrow"
+},
+	"âŸČ": {
+	math: "\\acwgapcirclearrow"
+},
+	"⟳": {
+	math: "\\cwgapcirclearrow"
+},
+	"⟮": {
+	math: "\\rightarrowonoplus"
+},
+	"⟔": {
+	math: "\\longleftarrow"
+},
+	"⟶": {
+	math: "\\longrightarrow"
+},
+	"⟷": {
+	math: "\\longleftrightarrow"
+},
+	"⟾": {
+	math: "\\Longleftarrow"
+},
+	"âŸč": {
+	math: "\\Longrightarrow"
+},
+	"âŸș": {
+	math: "\\Longleftrightarrow"
+},
+	"⟻": {
+	math: "\\longmapsfrom"
+},
+	"⟌": {
+	math: "\\longmapsto"
+},
+	"⟜": {
+	math: "\\Longmapsfrom"
+},
+	"⟟": {
+	math: "\\Longmapsto"
+},
+	"⟿": {
+	math: "\\sim\\joinrel\\leadsto"
+},
+	" ": {
+	math: "\\psur"
+},
+	" ": {
+	math: "\\nVtwoheadrightarrow"
+},
+	" ": {
+	math: "\\nvLeftarrow"
+},
+	" ": {
+	math: "\\nvRightarrow"
+},
+	" ": {
+	math: "\\nvLeftrightarrow"
+},
+	" ": {
+	math: "\\Mapsfrom"
+},
+	" ": {
+	math: "\\Mapsto"
+},
+	" ": {
+	math: "\\downarrowbarred"
+},
+	" ": {
+	math: "\\uparrowbarred"
+},
+	" ": {
+	math: "\\Uuparrow"
+},
+	"​": {
+	math: "\\Ddownarrow"
+},
+	"‌": {
+	math: "\\leftbkarrow"
+},
+	"‍": {
+	math: "\\rightbkarrow"
+},
+	"‎": {
+	math: "\\leftdbkarrow"
+},
+	"‏": {
+	math: "\\dbkarow"
+},
+	"‐": {
+	math: "\\drbkarow"
+},
+	"‑": {
+	math: "\\rightdotarrow"
+},
+	"‒": {
+	math: "\\UpArrowBar"
+},
+	"–": {
+	math: "\\DownArrowBar"
+},
+	"—": {
+	math: "\\pinj"
+},
+	"―": {
+	math: "\\finj"
+},
+	"‖": {
+	math: "\\bij"
+},
+	"‗": {
+	math: "\\nvtwoheadrightarrowtail"
+},
+	"‘": {
+	math: "\\nVtwoheadrightarrowtail"
+},
+	"’": {
+	math: "\\lefttail"
+},
+	"‚": {
+	math: "\\righttail"
+},
+	"‛": {
+	math: "\\leftdbltail"
+},
+	"“": {
+	math: "\\rightdbltail"
+},
+	"”": {
+	math: "\\diamondleftarrow"
+},
+	"„": {
+	math: "\\rightarrowdiamond"
+},
+	"‟": {
+	math: "\\diamondleftarrowbar"
+},
+	"†": {
+	math: "\\barrightarrowdiamond"
+},
+	"‥": {
+	math: "\\nwsearrow"
+},
+	"‹": {
+	math: "\\neswarrow"
+},
+	"‫": {
+	math: "\\rdiagovfdiag"
+},
+	"‏": {
+	math: "\\fdiagovrdiag"
+},
+	"‭": {
+	math: "\\seovnearrow"
+},
+	"‟": {
+	math: "\\neovsearrow"
+},
+	" ": {
+	math: "\\fdiagovnearrow"
+},
+	"‰": {
+	math: "\\rdiagovsearrow"
+},
+	"‱": {
+	math: "\\neovnwarrow"
+},
+	"â€Č": {
+	math: "\\nwovnearrow"
+},
+	"‎": {
+	math: "\\uprightcurvearrow"
+},
+	"—": {
+	math: "\\downrightcurvedarrow"
+},
+	"„": {
+	math: "\\cwrightarcarrow"
+},
+	"â€č": {
+	math: "\\acwleftarcarrow"
+},
+	"â€ș": {
+	math: "\\acwoverarcarrow"
+},
+	"※": {
+	math: "\\acwunderarcarrow"
+},
+	"‌": {
+	math: "\\curvearrowrightminus"
+},
+	"“": {
+	math: "\\curvearrowleftplus"
+},
+	"‟": {
+	math: "\\cwundercurvearrow"
+},
+	"‿": {
+	math: "\\ccwundercurvearrow"
+},
+	"â„€": {
+	math: "\\Elolarr"
+},
+	"℁": {
+	math: "\\Elorarr"
+},
+	"â„‚": {
+	math: "\\ElzRlarr"
+},
+	"℃": {
+	math: "\\leftarrowshortrightarrow"
+},
+	"â„„": {
+	math: "\\ElzrLarr"
+},
+	"â„…": {
+	math: "\\rightarrowplus"
+},
+	"℆": {
+	math: "\\leftarrowplus"
+},
+	"ℇ": {
+	math: "\\Elzrarrx"
+},
+	"℈": {
+	math: "\\leftrightarrowcircle"
+},
+	"℉": {
+	math: "\\twoheaduparrowcircle"
+},
+	"â„Š": {
+	math: "\\leftrightharpoon"
+},
+	"â„‹": {
+	math: "\\rightleftharpoon"
+},
+	"ℌ": {
+	math: "\\updownharpoonrightleft"
+},
+	"ℍ": {
+	math: "\\updownharpoonleftright"
+},
+	"ℎ": {
+	math: "\\LeftRightVector"
+},
+	"ℏ": {
+	math: "\\RightUpDownVector"
+},
+	"ℐ": {
+	math: "\\DownLeftRightVector"
+},
+	"â„‘": {
+	math: "\\LeftUpDownVector"
+},
+	"â„’": {
+	math: "\\LeftVectorBar"
+},
+	"â„“": {
+	math: "\\RightVectorBar"
+},
+	"â„”": {
+	math: "\\RightUpVectorBar"
+},
+	"â„•": {
+	math: "\\RightDownVectorBar"
+},
+	"â„–": {
+	math: "\\DownLeftVectorBar"
+},
+	"â„—": {
+	math: "\\DownRightVectorBar"
+},
+	"℘": {
+	math: "\\LeftUpVectorBar"
+},
+	"â„™": {
+	math: "\\LeftDownVectorBar"
+},
+	"â„š": {
+	math: "\\LeftTeeVector"
+},
+	"â„›": {
+	math: "\\RightTeeVector"
+},
+	"ℜ": {
+	math: "\\RightUpTeeVector"
+},
+	"ℝ": {
+	math: "\\RightDownTeeVector"
+},
+	"℞": {
+	math: "\\DownLeftTeeVector"
+},
+	"â„Ÿ": {
+	math: "\\DownRightTeeVector"
+},
+	"â„ ": {
+	math: "\\LeftUpTeeVector"
+},
+	"â„Ą": {
+	math: "\\LeftDownTeeVector"
+},
+	"â„ą": {
+	math: "\\leftleftharpoons"
+},
+	"â„Ł": {
+	math: "\\upupharpoons"
+},
+	"â„€": {
+	math: "\\rightrightharpoons"
+},
+	"â„„": {
+	math: "\\downdownharpoons"
+},
+	"â„Š": {
+	math: "\\leftrightharpoonsup"
+},
+	"℧": {
+	math: "\\leftrightharpoonsdown"
+},
+	"â„š": {
+	math: "\\rightleftharpoonsup"
+},
+	"â„©": {
+	math: "\\rightleftharpoonsdown"
+},
+	"â„Ș": {
+	math: "\\leftbarharpoon"
+},
+	"â„«": {
+	math: "\\barleftharpoon"
+},
+	"â„Ź": {
+	math: "\\rightbarharpoon"
+},
+	"â„­": {
+	math: "\\barrightharpoon"
+},
+	"â„ź": {
+	math: "\\UpEquilibrium"
+},
+	"â„Ż": {
+	math: "\\ReverseUpEquilibrium"
+},
+	"â„°": {
+	math: "\\RoundImplies"
+},
+	"ℱ": {
+	math: "\\equalrightarrow"
+},
+	"â„Č": {
+	math: "\\similarrightarrow"
+},
+	"â„ł": {
+	math: "\\leftarrowsimilar"
+},
+	"â„Ž": {
+	math: "\\rightarrowsimilar"
+},
+	"â„”": {
+	math: "\\rightarrowapprox"
+},
+	"ℶ": {
+	math: "\\ltlarr"
+},
+	"â„·": {
+	math: "\\leftarrowless"
+},
+	"â„ž": {
+	math: "\\gtrarr"
+},
+	"â„č": {
+	math: "\\subrarr"
+},
+	"â„ș": {
+	math: "\\leftarrowsubset"
+},
+	"â„»": {
+	math: "\\suplarr"
+},
+	"â„Ÿ": {
+	math: "\\upfishtail"
+},
+	"â„ż": {
+	math: "\\downfishtail"
+},
+	"⩀": {
+	math: "\\Elztfnc"
+},
+	"⊁": {
+	math: "\\spot"
+},
+	"⩂": {
+	math: "\\typecolon"
+},
+	"⊃": {
+	math: "\\lBrace"
+},
+	"⩄": {
+	math: "\\rBrace"
+},
+	"⩆": {
+	math: "\\Elroang"
+},
+	"⩇": {
+	math: "\\limg"
+},
+	"⊈": {
+	math: "\\rimg"
+},
+	"⩉": {
+	math: "\\lblot"
+},
+	"⩊": {
+	math: "\\rblot"
+},
+	"⩋": {
+	math: "\\lbrackubar"
+},
+	"⩌": {
+	math: "\\rbrackubar"
+},
+	"⊍": {
+	math: "\\lbrackultick"
+},
+	"⊎": {
+	math: "\\rbracklrtick"
+},
+	"⊏": {
+	math: "\\lbracklltick"
+},
+	"⊐": {
+	math: "\\rbrackurtick"
+},
+	"⩑": {
+	math: "\\langledot"
+},
+	"⩒": {
+	math: "\\rangledot"
+},
+	"⩓": {
+	math: "<\\kern-0.58em("
+},
+	"⩕": {
+	math: "\\Lparengtr"
+},
+	"⩖": {
+	math: "\\Rparenless"
+},
+	"⩗": {
+	math: "\\lblkbrbrak"
+},
+	"⊘": {
+	math: "\\rblkbrbrak"
+},
+	"⩙": {
+	math: "\\Elzddfnc"
+},
+	"⩚": {
+	math: "\\vzigzag"
+},
+	"⩛": {
+	math: "\\measuredangleleft"
+},
+	"⩜": {
+	math: "\\Angle"
+},
+	"⊝": {
+	math: "\\rightanglemdot"
+},
+	"⊞": {
+	math: "\\angles"
+},
+	"⩟": {
+	math: "\\angdnr"
+},
+	"⊠": {
+	math: "\\Elzlpargt"
+},
+	"⊥": {
+	math: "\\sphericalangleup"
+},
+	"⊹": {
+	math: "\\turnangle"
+},
+	"⊣": {
+	math: "\\revangle"
+},
+	"⊀": {
+	math: "\\angleubar"
+},
+	"⊄": {
+	math: "\\revangleubar"
+},
+	"⊊": {
+	math: "\\wideangledown"
+},
+	"⊧": {
+	math: "\\wideangleup"
+},
+	"⊚": {
+	math: "\\measanglerutone"
+},
+	"⊩": {
+	math: "\\measanglelutonw"
+},
+	"âŠȘ": {
+	math: "\\measanglerdtose"
+},
+	"⊫": {
+	math: "\\measangleldtosw"
+},
+	"⊏": {
+	math: "\\measangleurtone"
+},
+	"⊭": {
+	math: "\\measangleultonw"
+},
+	"⊟": {
+	math: "\\measangledrtose"
+},
+	"⊯": {
+	math: "\\measangledltosw"
+},
+	"⊰": {
+	math: "\\revemptyset"
+},
+	"⊱": {
+	math: "\\emptysetobar"
+},
+	"âŠČ": {
+	math: "\\emptysetocirc"
+},
+	"⊳": {
+	math: "\\emptysetoarr"
+},
+	"⊎": {
+	math: "\\emptysetoarrl"
+},
+	"⊷": {
+	math: "\\circledparallel"
+},
+	"⊞": {
+	math: "\\circledbslash"
+},
+	"âŠč": {
+	math: "\\operp"
+},
+	"âŠș": {
+	math: "\\obot"
+},
+	"⊻": {
+	math: "\\olcross"
+},
+	"⊌": {
+	math: "\\odotslashdot"
+},
+	"⊜": {
+	math: "\\uparrowoncircle"
+},
+	"⊟": {
+	math: "\\circledwhitebullet"
+},
+	"⊿": {
+	math: "\\circledbullet"
+},
+	"⧀": {
+	math: "\\circledless"
+},
+	"⧁": {
+	math: "\\circledgtr"
+},
+	"⧂": {
+	math: "\\cirscir"
+},
+	"⧃": {
+	math: "\\cirE"
+},
+	"⧄": {
+	math: "\\boxslash"
+},
+	"⧅": {
+	math: "\\boxbslash"
+},
+	"⧆": {
+	math: "\\boxast"
+},
+	"⧇": {
+	math: "\\boxcircle"
+},
+	"⧈": {
+	math: "\\boxbox"
+},
+	"⧉": {
+	math: "\\boxonbox"
+},
+	"⧊": {
+	math: "\\ElzLap"
+},
+	"⧋": {
+	math: "\\Elzdefas"
+},
+	"⧌": {
+	math: "\\triangles"
+},
+	"⧍": {
+	math: "\\triangleserifs"
+},
+	"⧎": {
+	math: "\\rtriltri"
+},
+	"⧏": {
+	math: "\\LeftTriangleBar"
+},
+	"⧏̞": {
+	math: "\\NotLeftTriangleBar"
+},
+	"⧐": {
+	math: "\\RightTriangleBar"
+},
+	"⧐̞": {
+	math: "\\NotRightTriangleBar"
+},
+	"⧑": {
+	math: "\\lfbowtie"
+},
+	"⧒": {
+	math: "\\rfbowtie"
+},
+	"⧓": {
+	math: "\\fbowtie"
+},
+	"⧔": {
+	math: "\\lftimes"
+},
+	"⧕": {
+	math: "\\rftimes"
+},
+	"⧖": {
+	math: "\\hourglass"
+},
+	"⧗": {
+	math: "\\blackhourglass"
+},
+	"⧘": {
+	math: "\\lvzigzag"
+},
+	"⧙": {
+	math: "\\rvzigzag"
+},
+	"⧚": {
+	math: "\\Lvzigzag"
+},
+	"⧛": {
+	math: "\\Rvzigzag"
+},
+	"⧝": {
+	math: "\\tieinfty"
+},
+	"⧞": {
+	math: "\\nvinfty"
+},
+	"⧟": {
+	math: "\\multimapboth"
+},
+	"⧠": {
+	math: "\\laplac"
+},
+	"⧥": {
+	math: "\\lrtriangleeq"
+},
+	"⧹": {
+	math: "\\shuffle"
+},
+	"⧣": {
+	math: "\\eparsl"
+},
+	"⧀": {
+	math: "\\smeparsl"
+},
+	"⧄": {
+	math: "\\eqvparsl"
+},
+	"⧊": {
+	math: "\\gleichstark"
+},
+	"⧧": {
+	math: "\\thermod"
+},
+	"⧚": {
+	math: "\\downtriangleleftblack"
+},
+	"⧩": {
+	math: "\\downtrianglerightblack"
+},
+	"â§Ș": {
+	math: "\\blackdiamonddownarrow"
+},
+	"⧫": {
+	math: "\\blacklozenge"
+},
+	"⧏": {
+	math: "\\circledownarrow"
+},
+	"⧭": {
+	math: "\\blackcircledownarrow"
+},
+	"⧟": {
+	math: "\\errbarsquare"
+},
+	"⧯": {
+	math: "\\errbarblacksquare"
+},
+	"⧰": {
+	math: "\\errbardiamond"
+},
+	"⧱": {
+	math: "\\errbarblackdiamond"
+},
+	"â§Č": {
+	math: "\\errbarcircle"
+},
+	"⧳": {
+	math: "\\errbarblackcircle"
+},
+	"⧎": {
+	math: "\\RuleDelayed"
+},
+	"⧔": {
+	math: "\\setminus"
+},
+	"⧶": {
+	math: "\\dsol"
+},
+	"⧷": {
+	math: "\\rsolbar"
+},
+	"⧞": {
+	math: "\\xsol"
+},
+	"â§č": {
+	math: "\\zhide"
+},
+	"â§ș": {
+	math: "\\doubleplus"
+},
+	"⧻": {
+	math: "\\tripleplus"
+},
+	"⧌": {
+	math: "\\lcurvyangle"
+},
+	"⧜": {
+	math: "\\rcurvyangle"
+},
+	"⧟": {
+	math: "\\tplus"
+},
+	"⧿": {
+	math: "\\tminus"
+},
+	"⹀": {
+	math: "\\bigodot"
+},
+	"⚁": {
+	math: "\\bigoplus"
+},
+	"⹂": {
+	math: "\\bigotimes"
+},
+	"⚃": {
+	math: "\\bigcupdot"
+},
+	"⹄": {
+	math: "\\Elxuplus"
+},
+	"⹅": {
+	math: "\\ElzThr"
+},
+	"⹆": {
+	math: "\\Elxsqcup"
+},
+	"⹇": {
+	math: "\\ElzInf"
+},
+	"⚈": {
+	math: "\\ElzSup"
+},
+	"⹉": {
+	math: "\\varprod"
+},
+	"⹊": {
+	math: "\\modtwosum"
+},
+	"⹋": {
+	math: "\\sumint"
+},
+	"⹌": {
+	math: "\\iiiint"
+},
+	"⚍": {
+	math: "\\ElzCint"
+},
+	"⚎": {
+	math: "\\intBar"
+},
+	"⚏": {
+	math: "\\clockoint"
+},
+	"⹑": {
+	math: "\\awint"
+},
+	"⹒": {
+	math: "\\rppolint"
+},
+	"⹓": {
+	math: "\\scpolint"
+},
+	"⹔": {
+	math: "\\npolint"
+},
+	"⹕": {
+	math: "\\pointint"
+},
+	"⹖": {
+	math: "\\sqrint"
+},
+	"⹗": {
+	math: "\\intlarhk"
+},
+	"⚘": {
+	math: "\\intx"
+},
+	"⹙": {
+	math: "\\intcap"
+},
+	"⹚": {
+	math: "\\intcup"
+},
+	"⹛": {
+	math: "\\upint"
+},
+	"⹜": {
+	math: "\\lowint"
+},
+	"⚝": {
+	math: "\\Join"
+},
+	"⚞": {
+	math: "\\bigtriangleleft"
+},
+	"⹟": {
+	math: "\\zcmp"
+},
+	"âš ": {
+	math: "\\zpipe"
+},
+	"⚥": {
+	math: "\\zproject"
+},
+	"âšą": {
+	math: "\\ringplus"
+},
+	"⚣": {
+	math: "\\plushat"
+},
+	"⚀": {
+	math: "\\simplus"
+},
+	"⚊": {
+	math: "\\plussim"
+},
+	"⚧": {
+	math: "\\plussubtwo"
+},
+	"âšš": {
+	math: "\\plustrif"
+},
+	"âš©": {
+	math: "\\commaminus"
+},
+	"âš«": {
+	math: "\\minusfdots"
+},
+	"⚏": {
+	math: "\\minusrdots"
+},
+	"⚯": {
+	math: "\\ElzTimes"
+},
+	"âš°": {
+	math: "\\dottimes"
+},
+	"âš±": {
+	math: "\\timesbar"
+},
+	"âšČ": {
+	math: "\\btimes"
+},
+	"âšł": {
+	math: "\\smashtimes"
+},
+	"⚶": {
+	math: "\\otimeshat"
+},
+	"âš·": {
+	math: "\\Otimes"
+},
+	"âšž": {
+	math: "\\odiv"
+},
+	"âšč": {
+	math: "\\triangleplus"
+},
+	"âšș": {
+	math: "\\triangleminus"
+},
+	"âš»": {
+	math: "\\triangletimes"
+},
+	"⚜": {
+	math: "\\intprodr"
+},
+	"⚟": {
+	math: "\\fcmp"
+},
+	"âšż": {
+	math: "\\amalg"
+},
+	"⩀": {
+	math: "\\capdot"
+},
+	"⩁": {
+	math: "\\uminus"
+},
+	"⩂": {
+	math: "\\barcup"
+},
+	"⩃": {
+	math: "\\barcap"
+},
+	"⩄": {
+	math: "\\capwedge"
+},
+	"⩅": {
+	math: "\\cupvee"
+},
+	"⩆": {
+	math: "\\cupovercap"
+},
+	"⩇": {
+	math: "\\capovercup"
+},
+	"⩈": {
+	math: "\\cupbarcap"
+},
+	"⩉": {
+	math: "\\capbarcup"
+},
+	"⩊": {
+	math: "\\twocups"
+},
+	"⩋": {
+	math: "\\twocaps"
+},
+	"⩌": {
+	math: "\\closedvarcup"
+},
+	"⩍": {
+	math: "\\closedvarcap"
+},
+	"⩎": {
+	math: "\\Sqcap"
+},
+	"⩏": {
+	math: "\\Sqcup"
+},
+	"⩐": {
+	math: "\\closedvarcupsmashprod"
+},
+	"⩑": {
+	math: "\\wedgeodot"
+},
+	"⩒": {
+	math: "\\veeodot"
+},
+	"⩓": {
+	math: "\\ElzAnd"
+},
+	"⩔": {
+	math: "\\ElzOr"
+},
+	"⩖": {
+	math: "\\ElOr"
+},
+	"⩗": {
+	math: "\\bigslopedvee"
+},
+	"⩘": {
+	math: "\\bigslopedwedge"
+},
+	"⩙": {
+	math: "\\veeonwedge"
+},
+	"⩚": {
+	math: "\\wedgemidvert"
+},
+	"⩛": {
+	math: "\\veemidvert"
+},
+	"⩜": {
+	math: "\\midbarwedge"
+},
+	"⩝": {
+	math: "\\midbarvee"
+},
+	"⩞": {
+	math: "\\perspcorrespond"
+},
+	"⩟": {
+	math: "\\Elzminhat"
+},
+	"â© ": {
+	math: "\\wedgedoublebar"
+},
+	"â©Ą": {
+	math: "\\varveebar"
+},
+	"â©ą": {
+	math: "\\doublebarvee"
+},
+	"â©€": {
+	math: "\\dsub"
+},
+	"â©„": {
+	math: "\\rsub"
+},
+	"â©Š": {
+	math: "\\eqdot"
+},
+	"⩧": {
+	math: "\\dotequiv"
+},
+	"â©š": {
+	math: "\\equivVert"
+},
+	"â©©": {
+	math: "\\equivVvert"
+},
+	"â©Ș": {
+	math: "\\dotsim"
+},
+	"â©«": {
+	math: "\\simrdots"
+},
+	"â©Ź": {
+	math: "\\simminussim"
+},
+	"â©­": {
+	math: "\\congdot"
+},
+	"â©ź": {
+	math: "\\stackrel{*}{=}"
+},
+	"â©Ż": {
+	math: "\\hatapprox"
+},
+	"â©°": {
+	math: "\\approxeqq"
+},
+	"⩱": {
+	math: "\\eqqplus"
+},
+	"â©Č": {
+	math: "\\pluseqq"
+},
+	"â©ł": {
+	math: "\\eqqsim"
+},
+	"â©Ž": {
+	math: "\\Coloneqq"
+},
+	"â©”": {
+	math: "\\Equal"
+},
+	"⩶": {
+	math: "\\Same"
+},
+	"â©·": {
+	math: "\\ddotseq"
+},
+	"â©ž": {
+	math: "\\equivDD"
+},
+	"â©č": {
+	math: "\\ltcir"
+},
+	"â©ș": {
+	math: "\\gtcir"
+},
+	"â©»": {
+	math: "\\ltquest"
+},
+	"⩌": {
+	math: "\\gtquest"
+},
+	"⩜": {
+	math: "\\leqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"⩜̞": {
+	math: "\\nleqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"â©Ÿ": {
+	math: "\\geqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"â©ŸÌž": {
+	math: "\\ngeqslant",
+	mathpackages: [
+		"amssymb"
+	]
+},
+	"â©ż": {
+	math: "\\lesdot"
+},
+	"âȘ€": {
+	math: "\\gesdot"
+},
+	"âȘ": {
+	math: "\\lesdoto"
+},
+	"âȘ‚": {
+	math: "\\gesdoto"
+},
+	"âȘƒ": {
+	math: "\\lesdotor"
+},
+	"âȘ„": {
+	math: "\\gesdotol"
+},
+	"âȘ…": {
+	math: "\\lessapprox"
+},
+	"âȘ†": {
+	math: "\\gtrapprox"
+},
+	"âȘ‡": {
+	math: "\\lneq"
+},
+	"âȘˆ": {
+	math: "\\gneq"
+},
+	"âȘ‰": {
+	math: "\\lnapprox"
+},
+	"âȘŠ": {
+	math: "\\gnapprox"
+},
+	"âȘ‹": {
+	math: "\\lesseqqgtr"
+},
+	"âȘŒ": {
+	math: "\\gtreqqless"
+},
+	"âȘ": {
+	math: "\\lsime"
+},
+	"âȘŽ": {
+	math: "\\gsime"
+},
+	"âȘ": {
+	math: "\\lsimg"
+},
+	"âȘ": {
+	math: "\\gsiml"
+},
+	"âȘ‘": {
+	math: "\\lgE"
+},
+	"âȘ’": {
+	math: "\\glE"
+},
+	"âȘ“": {
+	math: "\\lesges"
+},
+	"âȘ”": {
+	math: "\\gesles"
+},
+	"âȘ•": {
+	math: "\\eqslantless"
+},
+	"âȘ–": {
+	math: "\\eqslantgtr"
+},
+	"âȘ—": {
+	math: "\\elsdot"
+},
+	"âȘ˜": {
+	math: "\\egsdot"
+},
+	"âȘ™": {
+	math: "\\eqqless"
+},
+	"âȘš": {
+	math: "\\eqqgtr"
+},
+	"âȘ›": {
+	math: "\\eqqslantless"
+},
+	"âȘœ": {
+	math: "\\eqqslantgtr"
+},
+	"âȘ": {
+	math: "\\Pisymbol{ppi020}{117}"
+},
+	"âȘž": {
+	math: "\\Pisymbol{ppi020}{105}"
+},
+	"âȘŸ": {
+	math: "\\simlE"
+},
+	"âȘ ": {
+	math: "\\simgE"
+},
+	"âȘĄ": {
+	math: "\\NestedLessLess"
+},
+	"âȘĄÌž": {
+	math: "\\NotNestedLessLess"
+},
+	"âȘą": {
+	math: "\\NestedGreaterGreater"
+},
+	"âȘąÌž": {
+	math: "\\NotNestedGreaterGreater"
+},
+	"âȘŁ": {
+	math: "\\partialmeetcontraction"
+},
+	"âȘ€": {
+	math: "\\glj"
+},
+	"âȘ„": {
+	math: "\\gla"
+},
+	"âȘŠ": {
+	math: "\\leftslice"
+},
+	"âȘ§": {
+	math: "\\rightslice"
+},
+	"âȘš": {
+	math: "\\lescc"
+},
+	"âȘ©": {
+	math: "\\gescc"
+},
+	"âȘȘ": {
+	math: "\\smt"
+},
+	"âȘ«": {
+	math: "\\lat"
+},
+	"âȘŹ": {
+	math: "\\smte"
+},
+	"âȘ­": {
+	math: "\\late"
+},
+	"âȘź": {
+	math: "\\bumpeqq"
+},
+	"âȘŻ": {
+	math: "\\preceq"
+},
+	"âȘŻÌž": {
+	math: "\\not\\preceq"
+},
+	"âȘ°": {
+	math: "\\succeq"
+},
+	"âȘ°Ìž": {
+	math: "\\not\\succeq"
+},
+	"âȘ±": {
+	math: "\\precneq"
+},
+	"âȘČ": {
+	math: "\\succneq"
+},
+	"âȘł": {
+	math: "\\preceqq"
+},
+	"âȘŽ": {
+	math: "\\succeqq"
+},
+	"âȘ”": {
+	math: "\\precneqq"
+},
+	"âȘ¶": {
+	math: "\\succneqq"
+},
+	"âȘ·": {
+	math: "\\precapprox"
+},
+	"âȘž": {
+	math: "\\succapprox"
+},
+	"âȘč": {
+	math: "\\precnapprox"
+},
+	"âȘș": {
+	math: "\\succnapprox"
+},
+	"âȘ»": {
+	math: "\\llcurly"
+},
+	"âȘŒ": {
+	math: "\\ggcurly"
+},
+	"âȘœ": {
+	math: "\\subsetdot"
+},
+	"âȘŸ": {
+	math: "\\supsetdot"
+},
+	"âȘż": {
+	math: "\\subsetplus"
+},
+	"⫀": {
+	math: "\\supsetplus"
+},
+	"⫁": {
+	math: "\\submult"
+},
+	"⫂": {
+	math: "\\supmult"
+},
+	"⫃": {
+	math: "\\subedot"
+},
+	"⫄": {
+	math: "\\supedot"
+},
+	"⫅": {
+	math: "\\subseteqq"
+},
+	"â«…Ìž": {
+	math: "\\nsubseteqq"
+},
+	"⫆": {
+	math: "\\supseteqq"
+},
+	"⫆̞": {
+	math: "\\nsupseteqq"
+},
+	"⫇": {
+	math: "\\subsim"
+},
+	"⫈": {
+	math: "\\supsim"
+},
+	"⫉": {
+	math: "\\subsetapprox"
+},
+	"⫊": {
+	math: "\\supsetapprox"
+},
+	"⫋": {
+	math: "\\subsetneqq"
+},
+	"⫌": {
+	math: "\\supsetneqq"
+},
+	"⫍": {
+	math: "\\lsqhook"
+},
+	"⫎": {
+	math: "\\rsqhook"
+},
+	"⫏": {
+	math: "\\csub"
+},
+	"⫐": {
+	math: "\\csup"
+},
+	"⫑": {
+	math: "\\csube"
+},
+	"⫒": {
+	math: "\\csupe"
+},
+	"⫓": {
+	math: "\\subsup"
+},
+	"⫔": {
+	math: "\\supsub"
+},
+	"⫕": {
+	math: "\\subsub"
+},
+	"⫖": {
+	math: "\\supsup"
+},
+	"⫗": {
+	math: "\\suphsub"
+},
+	"⫘": {
+	math: "\\supdsub"
+},
+	"⫙": {
+	math: "\\forkv"
+},
+	"⫚": {
+	math: "\\topfork"
+},
+	"⫛": {
+	math: "\\mlcp"
+},
+	"⫝̸": {
+	math: "\\forks"
+},
+	"⫝": {
+	math: "\\forksnot"
+},
+	"⫝̞": {
+	math: "\\forks"
+},
+	"⫞": {
+	math: "\\shortlefttack"
+},
+	"⫟": {
+	math: "\\shortdowntack"
+},
+	"â« ": {
+	math: "\\shortuptack"
+},
+	"â«Ą": {
+	math: "\\perps"
+},
+	"â«ą": {
+	math: "\\vDdash"
+},
+	"â«Ł": {
+	math: "\\dashV"
+},
+	"â«€": {
+	math: "\\Dashv"
+},
+	"â«„": {
+	math: "\\DashV"
+},
+	"â«Š": {
+	math: "\\varVdash"
+},
+	"⫧": {
+	math: "\\Barv"
+},
+	"â«š": {
+	math: "\\vBar"
+},
+	"â«©": {
+	math: "\\vBarv"
+},
+	"â«Ș": {
+	math: "\\Top"
+},
+	"â«Ź": {
+	math: "\\Not"
+},
+	"â«­": {
+	math: "\\bNot"
+},
+	"â«ź": {
+	math: "\\revnmid"
+},
+	"â«Ż": {
+	math: "\\cirmid"
+},
+	"â«°": {
+	math: "\\midcir"
+},
+	"⫱": {
+	math: "\\topcir"
+},
+	"â«Č": {
+	math: "\\nhpar"
+},
+	"â«ł": {
+	math: "\\parsim"
+},
+	"â«Ž": {
+	math: "\\interleave"
+},
+	"â«”": {
+	math: "\\nhVvert"
+},
+	"⫶": {
+	math: "\\Elztdcol"
+},
+	"â«·": {
+	math: "\\lllnest"
+},
+	"â«ž": {
+	math: "\\gggnest"
+},
+	"â«č": {
+	math: "\\leqqslant"
+},
+	"â«ș": {
+	math: "\\geqqslant"
+},
+	"â«»": {
+	math: "\\trslash"
+},
+	"⫌": {
+	math: "\\biginterleave"
+},
+	"⫝̸": {
+	math: "{{/}\\!\\!{/}}"
+},
+	"⫝̸⃄": {
+	math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}"
+},
+	"â«Ÿ": {
+	math: "\\talloblong"
+},
+	"â«ż": {
+	math: "\\bigtalloblong"
+},
+	"⬒": {
+	math: "\\squaretopblack"
+},
+	"⬓": {
+	math: "\\squarebotblack"
+},
+	"⬔": {
+	math: "\\squareurblack"
+},
+	"⬕": {
+	math: "\\squarellblack"
+},
+	"⬖": {
+	math: "\\diamondleftblack"
+},
+	"⬗": {
+	math: "\\diamondrightblack"
+},
+	"⏘": {
+	math: "\\diamondtopblack"
+},
+	"⬙": {
+	math: "\\diamondbotblack"
+},
+	"⬚": {
+	math: "\\dottedsquare"
+},
+	"⬛": {
+	math: "\\blacksquare"
+},
+	"⬜": {
+	math: "\\square"
+},
+	"⬝": {
+	math: "\\vysmblksquare"
+},
+	"⬞": {
+	math: "\\vysmwhtsquare"
+},
+	"⬟": {
+	math: "\\pentagonblack"
+},
+	"⏠": {
+	math: "\\pentagon"
+},
+	"⏥": {
+	math: "\\varhexagon"
+},
+	"⏹": {
+	math: "\\varhexagonblack"
+},
+	"⏣": {
+	math: "\\hexagonblack"
+},
+	"⏀": {
+	math: "\\lgblkcircle"
+},
+	"⏄": {
+	math: "\\mdblkdiamond"
+},
+	"⏊": {
+	math: "\\mdwhtdiamond"
+},
+	"⏧": {
+	math: "\\mdblklozenge"
+},
+	"⏚": {
+	math: "\\mdwhtlozenge"
+},
+	"⏩": {
+	math: "\\smblkdiamond"
+},
+	"âŹȘ": {
+	math: "\\smblklozenge"
+},
+	"⏫": {
+	math: "\\smwhtlozenge"
+},
+	"⏏": {
+	math: "\\blkhorzoval"
+},
+	"⏭": {
+	math: "\\whthorzoval"
+},
+	"⏟": {
+	math: "\\blkvertoval"
+},
+	"⏯": {
+	math: "\\whtvertoval"
+},
+	"⏰": {
+	math: "\\circleonleftarrow"
+},
+	"⏱": {
+	math: "\\leftthreearrows"
+},
+	"âŹČ": {
+	math: "\\leftarrowonoplus"
+},
+	"⏳": {
+	math: "\\longleftsquigarrow"
+},
+	"⏎": {
+	math: "\\nvtwoheadleftarrow"
+},
+	"⏔": {
+	math: "\\nVtwoheadleftarrow"
+},
+	"⏶": {
+	math: "\\twoheadmapsfrom"
+},
+	"⏷": {
+	math: "\\twoheadleftdbkarrow"
+},
+	"⏞": {
+	math: "\\leftdotarrow"
+},
+	"âŹč": {
+	math: "\\nvleftarrowtail"
+},
+	"âŹș": {
+	math: "\\nVleftarrowtail"
+},
+	"⏻": {
+	math: "\\twoheadleftarrowtail"
+},
+	"âŹŒ": {
+	math: "\\nvtwoheadleftarrowtail"
+},
+	"âŹœ": {
+	math: "\\nVtwoheadleftarrowtail"
+},
+	"âŹŸ": {
+	math: "\\leftarrowx"
+},
+	"⏿": {
+	math: "\\leftcurvedarrow"
+},
+	"⭀": {
+	math: "\\equalleftarrow"
+},
+	"⭁": {
+	math: "\\bsimilarleftarrow"
+},
+	"⭂": {
+	math: "\\leftarrowbackapprox"
+},
+	"⭃": {
+	math: "\\rightarrowgtr"
+},
+	"⭄": {
+	math: "\\rightarrowsupset"
+},
+	"⭅": {
+	math: "\\LLeftarrow"
+},
+	"⭆": {
+	math: "\\RRightarrow"
+},
+	"⭇": {
+	math: "\\bsimilarrightarrow"
+},
+	"⭈": {
+	math: "\\rightarrowbackapprox"
+},
+	"⭉": {
+	math: "\\similarleftarrow"
+},
+	"⭊": {
+	math: "\\leftarrowapprox"
+},
+	"⭋": {
+	math: "\\leftarrowbsimilar"
+},
+	"⭌": {
+	math: "\\rightarrowbsimilar"
+},
+	"⭐": {
+	math: "\\medwhitestar"
+},
+	"⭑": {
+	math: "\\medblackstar"
+},
+	"⭒": {
+	math: "\\smwhitestar"
+},
+	"⭓": {
+	math: "\\rightpentagonblack"
+},
+	"⭔": {
+	math: "\\rightpentagon"
+},
+	"〈": {
+	math: "\\langle"
+},
+	"〉": {
+	math: "\\rangle"
+},
+	"〒": {
+	math: "\\postalmark"
+},
+	"〔": {
+	math: "\\lbrbrak"
+},
+	"〕": {
+	math: "\\rbrbrak"
+},
+	"〚": {
+	math: "\\openbracketleft"
+},
+	"〛": {
+	math: "\\openbracketright"
+},
+	"〰": {
+	math: "\\hzigzag"
+},
+	"ïŹ€": {
+	text: "ff"
+},
+	"ïŹ": {
+	text: "fi"
+},
+	"ïŹ‚": {
+	text: "fl"
+},
+	"ïŹƒ": {
+	text: "ffi"
+},
+	"ïŹ„": {
+	text: "ffl"
+},
+	"ïŹ…": {
+	text: "st"
+},
+	"ïŹ†": {
+	text: "st"
+},
+	"ïżœ": {
+	text: "{\\dbend}"
+},
+	"𝐀": {
+	math: "\\mathbf{A}"
+},
+	"𝐁": {
+	math: "\\mathbf{B}"
+},
+	"𝐂": {
+	math: "\\mathbf{C}"
+},
+	"𝐃": {
+	math: "\\mathbf{D}"
+},
+	"𝐄": {
+	math: "\\mathbf{E}"
+},
+	"𝐅": {
+	math: "\\mathbf{F}"
+},
+	"𝐆": {
+	math: "\\mathbf{G}"
+},
+	"𝐇": {
+	math: "\\mathbf{H}"
+},
+	"𝐈": {
+	math: "\\mathbf{I}"
+},
+	"𝐉": {
+	math: "\\mathbf{J}"
+},
+	"𝐊": {
+	math: "\\mathbf{K}"
+},
+	"𝐋": {
+	math: "\\mathbf{L}"
+},
+	"𝐌": {
+	math: "\\mathbf{M}"
+},
+	"𝐍": {
+	math: "\\mathbf{N}"
+},
+	"𝐎": {
+	math: "\\mathbf{O}"
+},
+	"𝐏": {
+	math: "\\mathbf{P}"
+},
+	"𝐐": {
+	math: "\\mathbf{Q}"
+},
+	"𝐑": {
+	math: "\\mathbf{R}"
+},
+	"𝐒": {
+	math: "\\mathbf{S}"
+},
+	"𝐓": {
+	math: "\\mathbf{T}"
+},
+	"𝐔": {
+	math: "\\mathbf{U}"
+},
+	"𝐕": {
+	math: "\\mathbf{V}"
+},
+	"𝐖": {
+	math: "\\mathbf{W}"
+},
+	"𝐗": {
+	math: "\\mathbf{X}"
+},
+	"𝐘": {
+	math: "\\mathbf{Y}"
+},
+	"𝐙": {
+	math: "\\mathbf{Z}"
+},
+	"𝐚": {
+	math: "\\mathbf{a}"
+},
+	"𝐛": {
+	math: "\\mathbf{b}"
+},
+	"𝐜": {
+	math: "\\mathbf{c}"
+},
+	"𝐝": {
+	math: "\\mathbf{d}"
+},
+	"𝐞": {
+	math: "\\mathbf{e}"
+},
+	"𝐟": {
+	math: "\\mathbf{f}"
+},
+	"𝐠": {
+	math: "\\mathbf{g}"
+},
+	"𝐡": {
+	math: "\\mathbf{h}"
+},
+	"𝐱": {
+	math: "\\mathbf{i}"
+},
+	"𝐣": {
+	math: "\\mathbf{j}"
+},
+	"đ€": {
+	math: "\\mathbf{k}"
+},
+	"đ„": {
+	math: "\\mathbf{l}"
+},
+	"𝐩": {
+	math: "\\mathbf{m}"
+},
+	"𝐧": {
+	math: "\\mathbf{n}"
+},
+	"𝐹": {
+	math: "\\mathbf{o}"
+},
+	"đ©": {
+	math: "\\mathbf{p}"
+},
+	"đȘ": {
+	math: "\\mathbf{q}"
+},
+	"đ«": {
+	math: "\\mathbf{r}"
+},
+	"𝐬": {
+	math: "\\mathbf{s}"
+},
+	"𝐭": {
+	math: "\\mathbf{t}"
+},
+	"𝐼": {
+	math: "\\mathbf{u}"
+},
+	"𝐯": {
+	math: "\\mathbf{v}"
+},
+	"𝐰": {
+	math: "\\mathbf{w}"
+},
+	"đ±": {
+	math: "\\mathbf{x}"
+},
+	"đČ": {
+	math: "\\mathbf{y}"
+},
+	"𝐳": {
+	math: "\\mathbf{z}"
+},
+	"𝐮": {
+	math: "\\mathsl{A}"
+},
+	"đ”": {
+	math: "\\mathsl{B}"
+},
+	"đ¶": {
+	math: "\\mathsl{C}"
+},
+	"đ·": {
+	math: "\\mathsl{D}"
+},
+	"𝐾": {
+	math: "\\mathsl{E}"
+},
+	"đč": {
+	math: "\\mathsl{F}"
+},
+	"đș": {
+	math: "\\mathsl{G}"
+},
+	"đ»": {
+	math: "\\mathsl{H}"
+},
+	"đŒ": {
+	math: "\\mathsl{I}"
+},
+	"đœ": {
+	math: "\\mathsl{J}"
+},
+	"đŸ": {
+	math: "\\mathsl{K}"
+},
+	"𝐿": {
+	math: "\\mathsl{L}"
+},
+	"𝑀": {
+	math: "\\mathsl{M}"
+},
+	"𝑁": {
+	math: "\\mathsl{N}"
+},
+	"𝑂": {
+	math: "\\mathsl{O}"
+},
+	"𝑃": {
+	math: "\\mathsl{P}"
+},
+	"𝑄": {
+	math: "\\mathsl{Q}"
+},
+	"𝑅": {
+	math: "\\mathsl{R}"
+},
+	"𝑆": {
+	math: "\\mathsl{S}"
+},
+	"𝑇": {
+	math: "\\mathsl{T}"
+},
+	"𝑈": {
+	math: "\\mathsl{U}"
+},
+	"𝑉": {
+	math: "\\mathsl{V}"
+},
+	"𝑊": {
+	math: "\\mathsl{W}"
+},
+	"𝑋": {
+	math: "\\mathsl{X}"
+},
+	"𝑌": {
+	math: "\\mathsl{Y}"
+},
+	"𝑍": {
+	math: "\\mathsl{Z}"
+},
+	"𝑎": {
+	math: "\\mathsl{a}"
+},
+	"𝑏": {
+	math: "\\mathsl{b}"
+},
+	"𝑐": {
+	math: "\\mathsl{c}"
+},
+	"𝑑": {
+	math: "\\mathsl{d}"
+},
+	"𝑒": {
+	math: "\\mathsl{e}"
+},
+	"𝑓": {
+	math: "\\mathsl{f}"
+},
+	"𝑔": {
+	math: "\\mathsl{g}"
+},
+	"𝑖": {
+	math: "\\mathsl{i}"
+},
+	"𝑗": {
+	math: "\\mathsl{j}"
+},
+	"𝑘": {
+	math: "\\mathsl{k}"
+},
+	"𝑙": {
+	math: "\\mathsl{l}"
+},
+	"𝑚": {
+	math: "\\mathsl{m}"
+},
+	"𝑛": {
+	math: "\\mathsl{n}"
+},
+	"𝑜": {
+	math: "\\mathsl{o}"
+},
+	"𝑝": {
+	math: "\\mathsl{p}"
+},
+	"𝑞": {
+	math: "\\mathsl{q}"
+},
+	"𝑟": {
+	math: "\\mathsl{r}"
+},
+	"𝑠": {
+	math: "\\mathsl{s}"
+},
+	"𝑡": {
+	math: "\\mathsl{t}"
+},
+	"𝑱": {
+	math: "\\mathsl{u}"
+},
+	"𝑣": {
+	math: "\\mathsl{v}"
+},
+	"đ‘€": {
+	math: "\\mathsl{w}"
+},
+	"đ‘„": {
+	math: "\\mathsl{x}"
+},
+	"𝑩": {
+	math: "\\mathsl{y}"
+},
+	"𝑧": {
+	math: "\\mathsl{z}"
+},
+	"𝑹": {
+	math: "\\mathbit{A}"
+},
+	"đ‘©": {
+	math: "\\mathbit{B}"
+},
+	"đ‘Ș": {
+	math: "\\mathbit{C}"
+},
+	"đ‘«": {
+	math: "\\mathbit{D}"
+},
+	"𝑬": {
+	math: "\\mathbit{E}"
+},
+	"𝑭": {
+	math: "\\mathbit{F}"
+},
+	"𝑼": {
+	math: "\\mathbit{G}"
+},
+	"𝑯": {
+	math: "\\mathbit{H}"
+},
+	"𝑰": {
+	math: "\\mathbit{I}"
+},
+	"đ‘±": {
+	math: "\\mathbit{J}"
+},
+	"đ‘Č": {
+	math: "\\mathbit{K}"
+},
+	"𝑳": {
+	math: "\\mathbit{L}"
+},
+	"𝑮": {
+	math: "\\mathbit{M}"
+},
+	"đ‘”": {
+	math: "\\mathbit{N}"
+},
+	"đ‘¶": {
+	math: "\\mathbit{O}"
+},
+	"đ‘·": {
+	math: "\\mathbit{P}"
+},
+	"𝑾": {
+	math: "\\mathbit{Q}"
+},
+	"đ‘č": {
+	math: "\\mathbit{R}"
+},
+	"đ‘ș": {
+	math: "\\mathbit{S}"
+},
+	"đ‘»": {
+	math: "\\mathbit{T}"
+},
+	"đ‘Œ": {
+	math: "\\mathbit{U}"
+},
+	"đ‘œ": {
+	math: "\\mathbit{V}"
+},
+	"đ‘Ÿ": {
+	math: "\\mathbit{W}"
+},
+	"𝑿": {
+	math: "\\mathbit{X}"
+},
+	"𝒀": {
+	math: "\\mathbit{Y}"
+},
+	"𝒁": {
+	math: "\\mathbit{Z}"
+},
+	"𝒂": {
+	math: "\\mathbit{a}"
+},
+	"𝒃": {
+	math: "\\mathbit{b}"
+},
+	"𝒄": {
+	math: "\\mathbit{c}"
+},
+	"𝒅": {
+	math: "\\mathbit{d}"
+},
+	"𝒆": {
+	math: "\\mathbit{e}"
+},
+	"𝒇": {
+	math: "\\mathbit{f}"
+},
+	"𝒈": {
+	math: "\\mathbit{g}"
+},
+	"𝒉": {
+	math: "\\mathbit{h}"
+},
+	"𝒊": {
+	math: "\\mathbit{i}"
+},
+	"𝒋": {
+	math: "\\mathbit{j}"
+},
+	"𝒌": {
+	math: "\\mathbit{k}"
+},
+	"𝒍": {
+	math: "\\mathbit{l}"
+},
+	"𝒎": {
+	math: "\\mathbit{m}"
+},
+	"𝒏": {
+	math: "\\mathbit{n}"
+},
+	"𝒐": {
+	math: "\\mathbit{o}"
+},
+	"𝒑": {
+	math: "\\mathbit{p}"
+},
+	"𝒒": {
+	math: "\\mathbit{q}"
+},
+	"𝒓": {
+	math: "\\mathbit{r}"
+},
+	"𝒔": {
+	math: "\\mathbit{s}"
+},
+	"𝒕": {
+	math: "\\mathbit{t}"
+},
+	"𝒖": {
+	math: "\\mathbit{u}"
+},
+	"𝒗": {
+	math: "\\mathbit{v}"
+},
+	"𝒘": {
+	math: "\\mathbit{w}"
+},
+	"𝒙": {
+	math: "\\mathbit{x}"
+},
+	"𝒚": {
+	math: "\\mathbit{y}"
+},
+	"𝒛": {
+	math: "\\mathbit{z}"
+},
+	"𝒜": {
+	math: "\\mathscr{A}"
+},
+	"𝒞": {
+	math: "\\mathscr{C}"
+},
+	"𝒟": {
+	math: "\\mathscr{D}"
+},
+	"𝒱": {
+	math: "\\mathscr{G}"
+},
+	"đ’„": {
+	math: "\\mathscr{J}"
+},
+	"𝒩": {
+	math: "\\mathscr{K}"
+},
+	"đ’©": {
+	math: "\\mathscr{N}"
+},
+	"đ’Ș": {
+	math: "\\mathscr{O}"
+},
+	"đ’«": {
+	math: "\\mathscr{P}"
+},
+	"𝒬": {
+	math: "\\mathscr{Q}"
+},
+	"𝒼": {
+	math: "\\mathscr{S}"
+},
+	"𝒯": {
+	math: "\\mathscr{T}"
+},
+	"𝒰": {
+	math: "\\mathscr{U}"
+},
+	"đ’±": {
+	math: "\\mathscr{V}"
+},
+	"đ’Č": {
+	math: "\\mathscr{W}"
+},
+	"𝒳": {
+	math: "\\mathscr{X}"
+},
+	"𝒮": {
+	math: "\\mathscr{Y}"
+},
+	"đ’”": {
+	math: "\\mathscr{Z}"
+},
+	"đ’¶": {
+	math: "\\mathscr{a}"
+},
+	"đ’·": {
+	math: "\\mathscr{b}"
+},
+	"𝒾": {
+	math: "\\mathscr{c}"
+},
+	"đ’č": {
+	math: "\\mathscr{d}"
+},
+	"đ’»": {
+	math: "\\mathscr{f}"
+},
+	"đ’œ": {
+	math: "\\mathscr{h}"
+},
+	"đ’Ÿ": {
+	math: "\\mathscr{i}"
+},
+	"𝒿": {
+	math: "\\mathscr{j}"
+},
+	"𝓀": {
+	math: "\\mathscr{k}"
+},
+	"𝓁": {
+	math: "\\mathscr{l}"
+},
+	"𝓂": {
+	math: "\\mathscr{m}"
+},
+	"𝓃": {
+	math: "\\mathscr{n}"
+},
+	"𝓅": {
+	math: "\\mathscr{p}"
+},
+	"𝓆": {
+	math: "\\mathscr{q}"
+},
+	"𝓇": {
+	math: "\\mathscr{r}"
+},
+	"𝓈": {
+	math: "\\mathscr{s}"
+},
+	"𝓉": {
+	math: "\\mathscr{t}"
+},
+	"𝓊": {
+	math: "\\mathscr{u}"
+},
+	"𝓋": {
+	math: "\\mathscr{v}"
+},
+	"𝓌": {
+	math: "\\mathscr{w}"
+},
+	"𝓍": {
+	math: "\\mathscr{x}"
+},
+	"𝓎": {
+	math: "\\mathscr{y}"
+},
+	"𝓏": {
+	math: "\\mathscr{z}"
+},
+	"𝓐": {
+	math: "\\mathmit{A}"
+},
+	"𝓑": {
+	math: "\\mathmit{B}"
+},
+	"𝓒": {
+	math: "\\mathmit{C}"
+},
+	"𝓓": {
+	math: "\\mathmit{D}"
+},
+	"𝓔": {
+	math: "\\mathmit{E}"
+},
+	"𝓕": {
+	math: "\\mathmit{F}"
+},
+	"𝓖": {
+	math: "\\mathmit{G}"
+},
+	"𝓗": {
+	math: "\\mathmit{H}"
+},
+	"𝓘": {
+	math: "\\mathmit{I}"
+},
+	"𝓙": {
+	math: "\\mathmit{J}"
+},
+	"𝓚": {
+	math: "\\mathmit{K}"
+},
+	"𝓛": {
+	math: "\\mathmit{L}"
+},
+	"𝓜": {
+	math: "\\mathmit{M}"
+},
+	"𝓝": {
+	math: "\\mathmit{N}"
+},
+	"𝓞": {
+	math: "\\mathmit{O}"
+},
+	"𝓟": {
+	math: "\\mathmit{P}"
+},
+	"𝓠": {
+	math: "\\mathmit{Q}"
+},
+	"𝓡": {
+	math: "\\mathmit{R}"
+},
+	"𝓱": {
+	math: "\\mathmit{S}"
+},
+	"𝓣": {
+	math: "\\mathmit{T}"
+},
+	"đ“€": {
+	math: "\\mathmit{U}"
+},
+	"đ“„": {
+	math: "\\mathmit{V}"
+},
+	"𝓩": {
+	math: "\\mathmit{W}"
+},
+	"𝓧": {
+	math: "\\mathmit{X}"
+},
+	"𝓹": {
+	math: "\\mathmit{Y}"
+},
+	"đ“©": {
+	math: "\\mathmit{Z}"
+},
+	"đ“Ș": {
+	math: "\\mathmit{a}"
+},
+	"đ“«": {
+	math: "\\mathmit{b}"
+},
+	"𝓬": {
+	math: "\\mathmit{c}"
+},
+	"𝓭": {
+	math: "\\mathmit{d}"
+},
+	"𝓼": {
+	math: "\\mathmit{e}"
+},
+	"𝓯": {
+	math: "\\mathmit{f}"
+},
+	"𝓰": {
+	math: "\\mathmit{g}"
+},
+	"đ“±": {
+	math: "\\mathmit{h}"
+},
+	"đ“Č": {
+	math: "\\mathmit{i}"
+},
+	"𝓳": {
+	math: "\\mathmit{j}"
+},
+	"𝓮": {
+	math: "\\mathmit{k}"
+},
+	"đ“”": {
+	math: "\\mathmit{l}"
+},
+	"đ“¶": {
+	math: "\\mathmit{m}"
+},
+	"đ“·": {
+	math: "\\mathmit{n}"
+},
+	"𝓾": {
+	math: "\\mathmit{o}"
+},
+	"đ“č": {
+	math: "\\mathmit{p}"
+},
+	"đ“ș": {
+	math: "\\mathmit{q}"
+},
+	"đ“»": {
+	math: "\\mathmit{r}"
+},
+	"đ“Œ": {
+	math: "\\mathmit{s}"
+},
+	"đ“œ": {
+	math: "\\mathmit{t}"
+},
+	"đ“Ÿ": {
+	math: "\\mathmit{u}"
+},
+	"𝓿": {
+	math: "\\mathmit{v}"
+},
+	"𝔀": {
+	math: "\\mathmit{w}"
+},
+	"𝔁": {
+	math: "\\mathmit{x}"
+},
+	"𝔂": {
+	math: "\\mathmit{y}"
+},
+	"𝔃": {
+	math: "\\mathmit{z}"
+},
+	"𝔄": {
+	math: "\\mathfrak{A}"
+},
+	"𝔅": {
+	math: "\\mathfrak{B}"
+},
+	"𝔇": {
+	math: "\\mathfrak{D}"
+},
+	"𝔈": {
+	math: "\\mathfrak{E}"
+},
+	"𝔉": {
+	math: "\\mathfrak{F}"
+},
+	"𝔊": {
+	math: "\\mathfrak{G}"
+},
+	"𝔍": {
+	math: "\\mathfrak{J}"
+},
+	"𝔎": {
+	math: "\\mathfrak{K}"
+},
+	"𝔏": {
+	math: "\\mathfrak{L}"
+},
+	"𝔐": {
+	math: "\\mathfrak{M}"
+},
+	"𝔑": {
+	math: "\\mathfrak{N}"
+},
+	"𝔒": {
+	math: "\\mathfrak{O}"
+},
+	"𝔓": {
+	math: "\\mathfrak{P}"
+},
+	"𝔔": {
+	math: "\\mathfrak{Q}"
+},
+	"𝔖": {
+	math: "\\mathfrak{S}"
+},
+	"𝔗": {
+	math: "\\mathfrak{T}"
+},
+	"𝔘": {
+	math: "\\mathfrak{U}"
+},
+	"𝔙": {
+	math: "\\mathfrak{V}"
+},
+	"𝔚": {
+	math: "\\mathfrak{W}"
+},
+	"𝔛": {
+	math: "\\mathfrak{X}"
+},
+	"𝔜": {
+	math: "\\mathfrak{Y}"
+},
+	"𝔞": {
+	math: "\\mathfrak{a}"
+},
+	"𝔟": {
+	math: "\\mathfrak{b}"
+},
+	"𝔠": {
+	math: "\\mathfrak{c}"
+},
+	"𝔡": {
+	math: "\\mathfrak{d}"
+},
+	"𝔱": {
+	math: "\\mathfrak{e}"
+},
+	"𝔣": {
+	math: "\\mathfrak{f}"
+},
+	"đ”€": {
+	math: "\\mathfrak{g}"
+},
+	"đ”„": {
+	math: "\\mathfrak{h}"
+},
+	"𝔩": {
+	math: "\\mathfrak{i}"
+},
+	"𝔧": {
+	math: "\\mathfrak{j}"
+},
+	"𝔹": {
+	math: "\\mathfrak{k}"
+},
+	"đ”©": {
+	math: "\\mathfrak{l}"
+},
+	"đ”Ș": {
+	math: "\\mathfrak{m}"
+},
+	"đ”«": {
+	math: "\\mathfrak{n}"
+},
+	"𝔬": {
+	math: "\\mathfrak{o}"
+},
+	"𝔭": {
+	math: "\\mathfrak{p}"
+},
+	"𝔼": {
+	math: "\\mathfrak{q}"
+},
+	"𝔯": {
+	math: "\\mathfrak{r}"
+},
+	"𝔰": {
+	math: "\\mathfrak{s}"
+},
+	"đ”±": {
+	math: "\\mathfrak{t}"
+},
+	"đ”Č": {
+	math: "\\mathfrak{u}"
+},
+	"𝔳": {
+	math: "\\mathfrak{v}"
+},
+	"𝔮": {
+	math: "\\mathfrak{w}"
+},
+	"đ””": {
+	math: "\\mathfrak{x}"
+},
+	"đ”¶": {
+	math: "\\mathfrak{y}"
+},
+	"đ”·": {
+	math: "\\mathfrak{z}"
+},
+	"𝔾": {
+	math: "\\mathbb{A}"
+},
+	"đ”č": {
+	math: "\\mathbb{B}"
+},
+	"đ”»": {
+	math: "\\mathbb{D}"
+},
+	"đ”Œ": {
+	math: "\\mathbb{E}"
+},
+	"đ”œ": {
+	math: "\\mathbb{F}"
+},
+	"đ”Ÿ": {
+	math: "\\mathbb{G}"
+},
+	"𝕀": {
+	math: "\\mathbb{I}"
+},
+	"𝕁": {
+	math: "\\mathbb{J}"
+},
+	"𝕂": {
+	math: "\\mathbb{K}"
+},
+	"𝕃": {
+	math: "\\mathbb{L}"
+},
+	"𝕄": {
+	math: "\\mathbb{M}"
+},
+	"𝕆": {
+	math: "\\mathbb{O}"
+},
+	"𝕊": {
+	math: "\\mathbb{S}"
+},
+	"𝕋": {
+	math: "\\mathbb{T}"
+},
+	"𝕌": {
+	math: "\\mathbb{U}"
+},
+	"𝕍": {
+	math: "\\mathbb{V}"
+},
+	"𝕎": {
+	math: "\\mathbb{W}"
+},
+	"𝕏": {
+	math: "\\mathbb{X}"
+},
+	"𝕐": {
+	math: "\\mathbb{Y}"
+},
+	"𝕒": {
+	math: "\\mathbb{a}"
+},
+	"𝕓": {
+	math: "\\mathbb{b}"
+},
+	"𝕔": {
+	math: "\\mathbb{c}"
+},
+	"𝕕": {
+	math: "\\mathbb{d}"
+},
+	"𝕖": {
+	math: "\\mathbb{e}"
+},
+	"𝕗": {
+	math: "\\mathbb{f}"
+},
+	"𝕘": {
+	math: "\\mathbb{g}"
+},
+	"𝕙": {
+	math: "\\mathbb{h}"
+},
+	"𝕚": {
+	math: "\\mathbb{i}"
+},
+	"𝕛": {
+	math: "\\mathbb{j}"
+},
+	"𝕜": {
+	math: "\\mathbb{k}"
+},
+	"𝕝": {
+	math: "\\mathbb{l}"
+},
+	"𝕞": {
+	math: "\\mathbb{m}"
+},
+	"𝕟": {
+	math: "\\mathbb{n}"
+},
+	"𝕠": {
+	math: "\\mathbb{o}"
+},
+	"𝕡": {
+	math: "\\mathbb{p}"
+},
+	"𝕱": {
+	math: "\\mathbb{q}"
+},
+	"𝕣": {
+	math: "\\mathbb{r}"
+},
+	"đ•€": {
+	math: "\\mathbb{s}"
+},
+	"đ•„": {
+	math: "\\mathbb{t}"
+},
+	"𝕩": {
+	math: "\\mathbb{u}"
+},
+	"𝕧": {
+	math: "\\mathbb{v}"
+},
+	"𝕹": {
+	math: "\\mathbb{w}"
+},
+	"đ•©": {
+	math: "\\mathbb{x}"
+},
+	"đ•Ș": {
+	math: "\\mathbb{y}"
+},
+	"đ•«": {
+	math: "\\mathbb{z}"
+},
+	"𝕬": {
+	math: "\\mathslbb{A}"
+},
+	"𝕭": {
+	math: "\\mathslbb{B}"
+},
+	"𝕼": {
+	math: "\\mathslbb{C}"
+},
+	"𝕯": {
+	math: "\\mathslbb{D}"
+},
+	"𝕰": {
+	math: "\\mathslbb{E}"
+},
+	"đ•±": {
+	math: "\\mathslbb{F}"
+},
+	"đ•Č": {
+	math: "\\mathslbb{G}"
+},
+	"𝕳": {
+	math: "\\mathslbb{H}"
+},
+	"𝕮": {
+	math: "\\mathslbb{I}"
+},
+	"đ•”": {
+	math: "\\mathslbb{J}"
+},
+	"đ•¶": {
+	math: "\\mathslbb{K}"
+},
+	"đ•·": {
+	math: "\\mathslbb{L}"
+},
+	"𝕾": {
+	math: "\\mathslbb{M}"
+},
+	"đ•č": {
+	math: "\\mathslbb{N}"
+},
+	"đ•ș": {
+	math: "\\mathslbb{O}"
+},
+	"đ•»": {
+	math: "\\mathslbb{P}"
+},
+	"đ•Œ": {
+	math: "\\mathslbb{Q}"
+},
+	"đ•œ": {
+	math: "\\mathslbb{R}"
+},
+	"đ•Ÿ": {
+	math: "\\mathslbb{S}"
+},
+	"𝕿": {
+	math: "\\mathslbb{T}"
+},
+	"𝖀": {
+	math: "\\mathslbb{U}"
+},
+	"𝖁": {
+	math: "\\mathslbb{V}"
+},
+	"𝖂": {
+	math: "\\mathslbb{W}"
+},
+	"𝖃": {
+	math: "\\mathslbb{X}"
+},
+	"𝖄": {
+	math: "\\mathslbb{Y}"
+},
+	"𝖅": {
+	math: "\\mathslbb{Z}"
+},
+	"𝖆": {
+	math: "\\mathslbb{a}"
+},
+	"𝖇": {
+	math: "\\mathslbb{b}"
+},
+	"𝖈": {
+	math: "\\mathslbb{c}"
+},
+	"𝖉": {
+	math: "\\mathslbb{d}"
+},
+	"𝖊": {
+	math: "\\mathslbb{e}"
+},
+	"𝖋": {
+	math: "\\mathslbb{f}"
+},
+	"𝖌": {
+	math: "\\mathslbb{g}"
+},
+	"𝖍": {
+	math: "\\mathslbb{h}"
+},
+	"𝖎": {
+	math: "\\mathslbb{i}"
+},
+	"𝖏": {
+	math: "\\mathslbb{j}"
+},
+	"𝖐": {
+	math: "\\mathslbb{k}"
+},
+	"𝖑": {
+	math: "\\mathslbb{l}"
+},
+	"𝖒": {
+	math: "\\mathslbb{m}"
+},
+	"𝖓": {
+	math: "\\mathslbb{n}"
+},
+	"𝖔": {
+	math: "\\mathslbb{o}"
+},
+	"𝖕": {
+	math: "\\mathslbb{p}"
+},
+	"𝖖": {
+	math: "\\mathslbb{q}"
+},
+	"𝖗": {
+	math: "\\mathslbb{r}"
+},
+	"𝖘": {
+	math: "\\mathslbb{s}"
+},
+	"𝖙": {
+	math: "\\mathslbb{t}"
+},
+	"𝖚": {
+	math: "\\mathslbb{u}"
+},
+	"𝖛": {
+	math: "\\mathslbb{v}"
+},
+	"𝖜": {
+	math: "\\mathslbb{w}"
+},
+	"𝖝": {
+	math: "\\mathslbb{x}"
+},
+	"𝖞": {
+	math: "\\mathslbb{y}"
+},
+	"𝖟": {
+	math: "\\mathslbb{z}"
+},
+	"𝖠": {
+	math: "\\mathsf{A}"
+},
+	"𝖡": {
+	math: "\\mathsf{B}"
+},
+	"𝖱": {
+	math: "\\mathsf{C}"
+},
+	"𝖣": {
+	math: "\\mathsf{D}"
+},
+	"đ–€": {
+	math: "\\mathsf{E}"
+},
+	"đ–„": {
+	math: "\\mathsf{F}"
+},
+	"𝖩": {
+	math: "\\mathsf{G}"
+},
+	"𝖧": {
+	math: "\\mathsf{H}"
+},
+	"𝖹": {
+	math: "\\mathsf{I}"
+},
+	"đ–©": {
+	math: "\\mathsf{J}"
+},
+	"đ–Ș": {
+	math: "\\mathsf{K}"
+},
+	"đ–«": {
+	math: "\\mathsf{L}"
+},
+	"𝖬": {
+	math: "\\mathsf{M}"
+},
+	"𝖭": {
+	math: "\\mathsf{N}"
+},
+	"𝖼": {
+	math: "\\mathsf{O}"
+},
+	"𝖯": {
+	math: "\\mathsf{P}"
+},
+	"𝖰": {
+	math: "\\mathsf{Q}"
+},
+	"đ–±": {
+	math: "\\mathsf{R}"
+},
+	"đ–Č": {
+	math: "\\mathsf{S}"
+},
+	"𝖳": {
+	math: "\\mathsf{T}"
+},
+	"𝖮": {
+	math: "\\mathsf{U}"
+},
+	"đ–”": {
+	math: "\\mathsf{V}"
+},
+	"đ–¶": {
+	math: "\\mathsf{W}"
+},
+	"đ–·": {
+	math: "\\mathsf{X}"
+},
+	"𝖾": {
+	math: "\\mathsf{Y}"
+},
+	"đ–č": {
+	math: "\\mathsf{Z}"
+},
+	"đ–ș": {
+	math: "\\mathsf{a}"
+},
+	"đ–»": {
+	math: "\\mathsf{b}"
+},
+	"đ–Œ": {
+	math: "\\mathsf{c}"
+},
+	"đ–œ": {
+	math: "\\mathsf{d}"
+},
+	"đ–Ÿ": {
+	math: "\\mathsf{e}"
+},
+	"𝖿": {
+	math: "\\mathsf{f}"
+},
+	"𝗀": {
+	math: "\\mathsf{g}"
+},
+	"𝗁": {
+	math: "\\mathsf{h}"
+},
+	"𝗂": {
+	math: "\\mathsf{i}"
+},
+	"𝗃": {
+	math: "\\mathsf{j}"
+},
+	"𝗄": {
+	math: "\\mathsf{k}"
+},
+	"𝗅": {
+	math: "\\mathsf{l}"
+},
+	"𝗆": {
+	math: "\\mathsf{m}"
+},
+	"𝗇": {
+	math: "\\mathsf{n}"
+},
+	"𝗈": {
+	math: "\\mathsf{o}"
+},
+	"𝗉": {
+	math: "\\mathsf{p}"
+},
+	"𝗊": {
+	math: "\\mathsf{q}"
+},
+	"𝗋": {
+	math: "\\mathsf{r}"
+},
+	"𝗌": {
+	math: "\\mathsf{s}"
+},
+	"𝗍": {
+	math: "\\mathsf{t}"
+},
+	"𝗎": {
+	math: "\\mathsf{u}"
+},
+	"𝗏": {
+	math: "\\mathsf{v}"
+},
+	"𝗐": {
+	math: "\\mathsf{w}"
+},
+	"𝗑": {
+	math: "\\mathsf{x}"
+},
+	"𝗒": {
+	math: "\\mathsf{y}"
+},
+	"𝗓": {
+	math: "\\mathsf{z}"
+},
+	"𝗔": {
+	math: "\\mathsfbf{A}"
+},
+	"𝗕": {
+	math: "\\mathsfbf{B}"
+},
+	"𝗖": {
+	math: "\\mathsfbf{C}"
+},
+	"𝗗": {
+	math: "\\mathsfbf{D}"
+},
+	"𝗘": {
+	math: "\\mathsfbf{E}"
+},
+	"𝗙": {
+	math: "\\mathsfbf{F}"
+},
+	"𝗚": {
+	math: "\\mathsfbf{G}"
+},
+	"𝗛": {
+	math: "\\mathsfbf{H}"
+},
+	"𝗜": {
+	math: "\\mathsfbf{I}"
+},
+	"𝗝": {
+	math: "\\mathsfbf{J}"
+},
+	"𝗞": {
+	math: "\\mathsfbf{K}"
+},
+	"𝗟": {
+	math: "\\mathsfbf{L}"
+},
+	"𝗠": {
+	math: "\\mathsfbf{M}"
+},
+	"𝗡": {
+	math: "\\mathsfbf{N}"
+},
+	"𝗱": {
+	math: "\\mathsfbf{O}"
+},
+	"𝗣": {
+	math: "\\mathsfbf{P}"
+},
+	"đ—€": {
+	math: "\\mathsfbf{Q}"
+},
+	"đ—„": {
+	math: "\\mathsfbf{R}"
+},
+	"𝗩": {
+	math: "\\mathsfbf{S}"
+},
+	"𝗧": {
+	math: "\\mathsfbf{T}"
+},
+	"𝗹": {
+	math: "\\mathsfbf{U}"
+},
+	"đ—©": {
+	math: "\\mathsfbf{V}"
+},
+	"đ—Ș": {
+	math: "\\mathsfbf{W}"
+},
+	"đ—«": {
+	math: "\\mathsfbf{X}"
+},
+	"𝗬": {
+	math: "\\mathsfbf{Y}"
+},
+	"𝗭": {
+	math: "\\mathsfbf{Z}"
+},
+	"𝗼": {
+	math: "\\mathsfbf{a}"
+},
+	"𝗯": {
+	math: "\\mathsfbf{b}"
+},
+	"𝗰": {
+	math: "\\mathsfbf{c}"
+},
+	"đ—±": {
+	math: "\\mathsfbf{d}"
+},
+	"đ—Č": {
+	math: "\\mathsfbf{e}"
+},
+	"𝗳": {
+	math: "\\mathsfbf{f}"
+},
+	"𝗮": {
+	math: "\\mathsfbf{g}"
+},
+	"đ—”": {
+	math: "\\mathsfbf{h}"
+},
+	"đ—¶": {
+	math: "\\mathsfbf{i}"
+},
+	"đ—·": {
+	math: "\\mathsfbf{j}"
+},
+	"𝗾": {
+	math: "\\mathsfbf{k}"
+},
+	"đ—č": {
+	math: "\\mathsfbf{l}"
+},
+	"đ—ș": {
+	math: "\\mathsfbf{m}"
+},
+	"đ—»": {
+	math: "\\mathsfbf{n}"
+},
+	"đ—Œ": {
+	math: "\\mathsfbf{o}"
+},
+	"đ—œ": {
+	math: "\\mathsfbf{p}"
+},
+	"đ—Ÿ": {
+	math: "\\mathsfbf{q}"
+},
+	"𝗿": {
+	math: "\\mathsfbf{r}"
+},
+	"𝘀": {
+	math: "\\mathsfbf{s}"
+},
+	"𝘁": {
+	math: "\\mathsfbf{t}"
+},
+	"𝘂": {
+	math: "\\mathsfbf{u}"
+},
+	"𝘃": {
+	math: "\\mathsfbf{v}"
+},
+	"𝘄": {
+	math: "\\mathsfbf{w}"
+},
+	"𝘅": {
+	math: "\\mathsfbf{x}"
+},
+	"𝘆": {
+	math: "\\mathsfbf{y}"
+},
+	"𝘇": {
+	math: "\\mathsfbf{z}"
+},
+	"𝘈": {
+	math: "\\mathsfsl{A}"
+},
+	"𝘉": {
+	math: "\\mathsfsl{B}"
+},
+	"𝘊": {
+	math: "\\mathsfsl{C}"
+},
+	"𝘋": {
+	math: "\\mathsfsl{D}"
+},
+	"𝘌": {
+	math: "\\mathsfsl{E}"
+},
+	"𝘍": {
+	math: "\\mathsfsl{F}"
+},
+	"𝘎": {
+	math: "\\mathsfsl{G}"
+},
+	"𝘏": {
+	math: "\\mathsfsl{H}"
+},
+	"𝘐": {
+	math: "\\mathsfsl{I}"
+},
+	"𝘑": {
+	math: "\\mathsfsl{J}"
+},
+	"𝘒": {
+	math: "\\mathsfsl{K}"
+},
+	"𝘓": {
+	math: "\\mathsfsl{L}"
+},
+	"𝘔": {
+	math: "\\mathsfsl{M}"
+},
+	"𝘕": {
+	math: "\\mathsfsl{N}"
+},
+	"𝘖": {
+	math: "\\mathsfsl{O}"
+},
+	"𝘗": {
+	math: "\\mathsfsl{P}"
+},
+	"𝘘": {
+	math: "\\mathsfsl{Q}"
+},
+	"𝘙": {
+	math: "\\mathsfsl{R}"
+},
+	"𝘚": {
+	math: "\\mathsfsl{S}"
+},
+	"𝘛": {
+	math: "\\mathsfsl{T}"
+},
+	"𝘜": {
+	math: "\\mathsfsl{U}"
+},
+	"𝘝": {
+	math: "\\mathsfsl{V}"
+},
+	"𝘞": {
+	math: "\\mathsfsl{W}"
+},
+	"𝘟": {
+	math: "\\mathsfsl{X}"
+},
+	"𝘠": {
+	math: "\\mathsfsl{Y}"
+},
+	"𝘡": {
+	math: "\\mathsfsl{Z}"
+},
+	"𝘱": {
+	math: "\\mathsfsl{a}"
+},
+	"𝘣": {
+	math: "\\mathsfsl{b}"
+},
+	"đ˜€": {
+	math: "\\mathsfsl{c}"
+},
+	"đ˜„": {
+	math: "\\mathsfsl{d}"
+},
+	"𝘩": {
+	math: "\\mathsfsl{e}"
+},
+	"𝘧": {
+	math: "\\mathsfsl{f}"
+},
+	"𝘹": {
+	math: "\\mathsfsl{g}"
+},
+	"đ˜©": {
+	math: "\\mathsfsl{h}"
+},
+	"đ˜Ș": {
+	math: "\\mathsfsl{i}"
+},
+	"đ˜«": {
+	math: "\\mathsfsl{j}"
+},
+	"𝘬": {
+	math: "\\mathsfsl{k}"
+},
+	"𝘭": {
+	math: "\\mathsfsl{l}"
+},
+	"𝘼": {
+	math: "\\mathsfsl{m}"
+},
+	"𝘯": {
+	math: "\\mathsfsl{n}"
+},
+	"𝘰": {
+	math: "\\mathsfsl{o}"
+},
+	"đ˜±": {
+	math: "\\mathsfsl{p}"
+},
+	"đ˜Č": {
+	math: "\\mathsfsl{q}"
+},
+	"𝘳": {
+	math: "\\mathsfsl{r}"
+},
+	"𝘮": {
+	math: "\\mathsfsl{s}"
+},
+	"đ˜”": {
+	math: "\\mathsfsl{t}"
+},
+	"đ˜¶": {
+	math: "\\mathsfsl{u}"
+},
+	"đ˜·": {
+	math: "\\mathsfsl{v}"
+},
+	"𝘾": {
+	math: "\\mathsfsl{w}"
+},
+	"đ˜č": {
+	math: "\\mathsfsl{x}"
+},
+	"đ˜ș": {
+	math: "\\mathsfsl{y}"
+},
+	"đ˜»": {
+	math: "\\mathsfsl{z}"
+},
+	"đ˜Œ": {
+	math: "\\mathsfbfsl{A}"
+},
+	"đ˜œ": {
+	math: "\\mathsfbfsl{B}"
+},
+	"đ˜Ÿ": {
+	math: "\\mathsfbfsl{C}"
+},
+	"𝘿": {
+	math: "\\mathsfbfsl{D}"
+},
+	"𝙀": {
+	math: "\\mathsfbfsl{E}"
+},
+	"𝙁": {
+	math: "\\mathsfbfsl{F}"
+},
+	"𝙂": {
+	math: "\\mathsfbfsl{G}"
+},
+	"𝙃": {
+	math: "\\mathsfbfsl{H}"
+},
+	"𝙄": {
+	math: "\\mathsfbfsl{I}"
+},
+	"𝙅": {
+	math: "\\mathsfbfsl{J}"
+},
+	"𝙆": {
+	math: "\\mathsfbfsl{K}"
+},
+	"𝙇": {
+	math: "\\mathsfbfsl{L}"
+},
+	"𝙈": {
+	math: "\\mathsfbfsl{M}"
+},
+	"𝙉": {
+	math: "\\mathsfbfsl{N}"
+},
+	"𝙊": {
+	math: "\\mathsfbfsl{O}"
+},
+	"𝙋": {
+	math: "\\mathsfbfsl{P}"
+},
+	"𝙌": {
+	math: "\\mathsfbfsl{Q}"
+},
+	"𝙍": {
+	math: "\\mathsfbfsl{R}"
+},
+	"𝙎": {
+	math: "\\mathsfbfsl{S}"
+},
+	"𝙏": {
+	math: "\\mathsfbfsl{T}"
+},
+	"𝙐": {
+	math: "\\mathsfbfsl{U}"
+},
+	"𝙑": {
+	math: "\\mathsfbfsl{V}"
+},
+	"𝙒": {
+	math: "\\mathsfbfsl{W}"
+},
+	"𝙓": {
+	math: "\\mathsfbfsl{X}"
+},
+	"𝙔": {
+	math: "\\mathsfbfsl{Y}"
+},
+	"𝙕": {
+	math: "\\mathsfbfsl{Z}"
+},
+	"𝙖": {
+	math: "\\mathsfbfsl{a}"
+},
+	"𝙗": {
+	math: "\\mathsfbfsl{b}"
+},
+	"𝙘": {
+	math: "\\mathsfbfsl{c}"
+},
+	"𝙙": {
+	math: "\\mathsfbfsl{d}"
+},
+	"𝙚": {
+	math: "\\mathsfbfsl{e}"
+},
+	"𝙛": {
+	math: "\\mathsfbfsl{f}"
+},
+	"𝙜": {
+	math: "\\mathsfbfsl{g}"
+},
+	"𝙝": {
+	math: "\\mathsfbfsl{h}"
+},
+	"𝙞": {
+	math: "\\mathsfbfsl{i}"
+},
+	"𝙟": {
+	math: "\\mathsfbfsl{j}"
+},
+	"𝙠": {
+	math: "\\mathsfbfsl{k}"
+},
+	"𝙡": {
+	math: "\\mathsfbfsl{l}"
+},
+	"𝙱": {
+	math: "\\mathsfbfsl{m}"
+},
+	"𝙣": {
+	math: "\\mathsfbfsl{n}"
+},
+	"đ™€": {
+	math: "\\mathsfbfsl{o}"
+},
+	"đ™„": {
+	math: "\\mathsfbfsl{p}"
+},
+	"𝙩": {
+	math: "\\mathsfbfsl{q}"
+},
+	"𝙧": {
+	math: "\\mathsfbfsl{r}"
+},
+	"𝙹": {
+	math: "\\mathsfbfsl{s}"
+},
+	"đ™©": {
+	math: "\\mathsfbfsl{t}"
+},
+	"đ™Ș": {
+	math: "\\mathsfbfsl{u}"
+},
+	"đ™«": {
+	math: "\\mathsfbfsl{v}"
+},
+	"𝙬": {
+	math: "\\mathsfbfsl{w}"
+},
+	"𝙭": {
+	math: "\\mathsfbfsl{x}"
+},
+	"𝙼": {
+	math: "\\mathsfbfsl{y}"
+},
+	"𝙯": {
+	math: "\\mathsfbfsl{z}"
+},
+	"𝙰": {
+	math: "\\mathtt{A}"
+},
+	"đ™±": {
+	math: "\\mathtt{B}"
+},
+	"đ™Č": {
+	math: "\\mathtt{C}"
+},
+	"𝙳": {
+	math: "\\mathtt{D}"
+},
+	"𝙮": {
+	math: "\\mathtt{E}"
+},
+	"đ™”": {
+	math: "\\mathtt{F}"
+},
+	"đ™¶": {
+	math: "\\mathtt{G}"
+},
+	"đ™·": {
+	math: "\\mathtt{H}"
+},
+	"𝙾": {
+	math: "\\mathtt{I}"
+},
+	"đ™č": {
+	math: "\\mathtt{J}"
+},
+	"đ™ș": {
+	math: "\\mathtt{K}"
+},
+	"đ™»": {
+	math: "\\mathtt{L}"
+},
+	"đ™Œ": {
+	math: "\\mathtt{M}"
+},
+	"đ™œ": {
+	math: "\\mathtt{N}"
+},
+	"đ™Ÿ": {
+	math: "\\mathtt{O}"
+},
+	"𝙿": {
+	math: "\\mathtt{P}"
+},
+	"𝚀": {
+	math: "\\mathtt{Q}"
+},
+	"𝚁": {
+	math: "\\mathtt{R}"
+},
+	"𝚂": {
+	math: "\\mathtt{S}"
+},
+	"𝚃": {
+	math: "\\mathtt{T}"
+},
+	"𝚄": {
+	math: "\\mathtt{U}"
+},
+	"𝚅": {
+	math: "\\mathtt{V}"
+},
+	"𝚆": {
+	math: "\\mathtt{W}"
+},
+	"𝚇": {
+	math: "\\mathtt{X}"
+},
+	"𝚈": {
+	math: "\\mathtt{Y}"
+},
+	"𝚉": {
+	math: "\\mathtt{Z}"
+},
+	"𝚊": {
+	math: "\\mathtt{a}"
+},
+	"𝚋": {
+	math: "\\mathtt{b}"
+},
+	"𝚌": {
+	math: "\\mathtt{c}"
+},
+	"𝚍": {
+	math: "\\mathtt{d}"
+},
+	"𝚎": {
+	math: "\\mathtt{e}"
+},
+	"𝚏": {
+	math: "\\mathtt{f}"
+},
+	"𝚐": {
+	math: "\\mathtt{g}"
+},
+	"𝚑": {
+	math: "\\mathtt{h}"
+},
+	"𝚒": {
+	math: "\\mathtt{i}"
+},
+	"𝚓": {
+	math: "\\mathtt{j}"
+},
+	"𝚔": {
+	math: "\\mathtt{k}"
+},
+	"𝚕": {
+	math: "\\mathtt{l}"
+},
+	"𝚖": {
+	math: "\\mathtt{m}"
+},
+	"𝚗": {
+	math: "\\mathtt{n}"
+},
+	"𝚘": {
+	math: "\\mathtt{o}"
+},
+	"𝚙": {
+	math: "\\mathtt{p}"
+},
+	"𝚚": {
+	math: "\\mathtt{q}"
+},
+	"𝚛": {
+	math: "\\mathtt{r}"
+},
+	"𝚜": {
+	math: "\\mathtt{s}"
+},
+	"𝚝": {
+	math: "\\mathtt{t}"
+},
+	"𝚞": {
+	math: "\\mathtt{u}"
+},
+	"𝚟": {
+	math: "\\mathtt{v}"
+},
+	"𝚠": {
+	math: "\\mathtt{w}"
+},
+	"𝚡": {
+	math: "\\mathtt{x}"
+},
+	"𝚱": {
+	math: "\\mathtt{y}"
+},
+	"𝚣": {
+	math: "\\mathtt{z}"
+},
+	"đš€": {
+	math: "\\imath"
+},
+	"đš„": {
+	math: "\\jmath"
+},
+	"𝚹": {
+	math: "\\mathbf{A}"
+},
+	"đš©": {
+	math: "\\mathbf{B}"
+},
+	"đšȘ": {
+	math: "\\mathbf{\\Gamma}"
+},
+	"đš«": {
+	math: "\\mathbf{\\Delta}"
+},
+	"𝚬": {
+	math: "\\mathbf{E}"
+},
+	"𝚭": {
+	math: "\\mathbf{Z}"
+},
+	"𝚼": {
+	math: "\\mathbf{H}"
+},
+	"𝚯": {
+	math: "\\mathbf{\\Theta}"
+},
+	"𝚰": {
+	math: "\\mathbf{I}"
+},
+	"đš±": {
+	math: "\\mathbf{K}"
+},
+	"đšČ": {
+	math: "\\mathbf{\\Lambda}"
+},
+	"𝚳": {
+	math: "M"
+},
+	"𝚮": {
+	math: "N"
+},
+	"đš”": {
+	math: "\\mathbf{\\Xi}"
+},
+	"đš¶": {
+	math: "O"
+},
+	"đš·": {
+	math: "\\mathbf{\\Pi}"
+},
+	"𝚾": {
+	math: "\\mathbf{P}"
+},
+	"đšč": {
+	math: "\\mathbf{\\vartheta}"
+},
+	"đšș": {
+	math: "\\mathbf{\\Sigma}"
+},
+	"đš»": {
+	math: "\\mathbf{T}"
+},
+	"đšŒ": {
+	math: "\\mathbf{\\Upsilon}"
+},
+	"đšœ": {
+	math: "\\mathbf{\\Phi}"
+},
+	"đšŸ": {
+	math: "\\mathbf{X}"
+},
+	"𝚿": {
+	math: "\\mathbf{\\Psi}"
+},
+	"𝛀": {
+	math: "\\mathbf{\\Omega}"
+},
+	"𝛁": {
+	math: "\\mathbf{\\nabla}"
+},
+	"𝛂": {
+	math: "\\mathbf{\\alpha}"
+},
+	"𝛃": {
+	math: "\\mathbf{\\beta}"
+},
+	"𝛄": {
+	math: "\\mathbf{\\gamma}"
+},
+	"𝛅": {
+	math: "\\mathbf{\\delta}"
+},
+	"𝛆": {
+	math: "\\mathbf{\\epsilon}"
+},
+	"𝛇": {
+	math: "\\mathbf{\\zeta}"
+},
+	"𝛈": {
+	math: "\\mathbf{\\eta}"
+},
+	"𝛉": {
+	math: "\\mathbf{\\theta}"
+},
+	"𝛊": {
+	math: "\\mathbf{I}"
+},
+	"𝛋": {
+	math: "\\mathbf{K}"
+},
+	"𝛌": {
+	math: "\\mathbf{\\lambda}"
+},
+	"𝛍": {
+	math: "M"
+},
+	"𝛎": {
+	math: "N"
+},
+	"𝛏": {
+	math: "\\mathbf{\\xi}"
+},
+	"𝛐": {
+	math: "O"
+},
+	"𝛑": {
+	math: "\\mathbf{\\pi}"
+},
+	"𝛒": {
+	math: "\\mathbf{P}"
+},
+	"𝛓": {
+	math: "\\mathbf{\\varsigma}"
+},
+	"𝛔": {
+	math: "\\mathbf{\\sigma}"
+},
+	"𝛕": {
+	math: "\\mathbf{T}"
+},
+	"𝛖": {
+	math: "\\mathbf{\\upsilon}"
+},
+	"𝛗": {
+	math: "\\mathbf{\\phi}"
+},
+	"𝛘": {
+	math: "\\mathbf{X}"
+},
+	"𝛙": {
+	math: "\\mathbf{\\psi}"
+},
+	"𝛚": {
+	math: "\\mathbf{\\omega}"
+},
+	"𝛛": {
+	math: "\\partial"
+},
+	"𝛜": {
+	math: "\\in"
+},
+	"𝛝": {
+	math: "\\mathbf{\\vartheta}"
+},
+	"𝛞": {
+	math: "\\mathbf{\\varkappa}"
+},
+	"𝛟": {
+	math: "\\mathbf{\\phi}"
+},
+	"𝛠": {
+	math: "\\mathbf{\\varrho}"
+},
+	"𝛡": {
+	math: "\\mathbf{\\varpi}"
+},
+	"𝛱": {
+	math: "\\mathsl{A}"
+},
+	"𝛣": {
+	math: "\\mathsl{B}"
+},
+	"đ›€": {
+	math: "\\mathsl{\\Gamma}"
+},
+	"đ›„": {
+	math: "\\mathsl{\\Delta}"
+},
+	"𝛩": {
+	math: "\\mathsl{E}"
+},
+	"𝛧": {
+	math: "\\mathsl{Z}"
+},
+	"𝛹": {
+	math: "\\mathsl{H}"
+},
+	"đ›©": {
+	math: "\\mathsl{\\Theta}"
+},
+	"đ›Ș": {
+	math: "\\mathsl{I}"
+},
+	"đ›«": {
+	math: "\\mathsl{K}"
+},
+	"𝛬": {
+	math: "\\mathsl{\\Lambda}"
+},
+	"𝛭": {
+	math: "M"
+},
+	"𝛼": {
+	math: "N"
+},
+	"𝛯": {
+	math: "\\mathsl{\\Xi}"
+},
+	"𝛰": {
+	math: "O"
+},
+	"đ›±": {
+	math: "\\mathsl{\\Pi}"
+},
+	"đ›Č": {
+	math: "\\mathsl{P}"
+},
+	"𝛳": {
+	math: "\\mathsl{\\Theta}"
+},
+	"𝛮": {
+	math: "\\mathsl{\\Sigma}"
+},
+	"đ›”": {
+	math: "\\mathsl{T}"
+},
+	"đ›¶": {
+	math: "\\mathsl{\\Upsilon}"
+},
+	"đ›·": {
+	math: "\\mathsl{\\Phi}"
+},
+	"𝛾": {
+	math: "\\mathsl{X}"
+},
+	"đ›č": {
+	math: "\\mathsl{\\Psi}"
+},
+	"đ›ș": {
+	math: "\\mathsl{\\Omega}"
+},
+	"đ›»": {
+	math: "\\mathsl{\\nabla}"
+},
+	"đ›Œ": {
+	math: "\\mathsl{A}"
+},
+	"đ›œ": {
+	math: "\\mathsl{B}"
+},
+	"đ›Ÿ": {
+	math: "\\mathsl{\\gamma}"
+},
+	"𝛿": {
+	math: "\\mathsl{\\delta}"
+},
+	"𝜀": {
+	math: "\\mathsl{E}"
+},
+	"𝜁": {
+	math: "\\mathsl{Z}"
+},
+	"𝜂": {
+	math: "\\mathsl{H}"
+},
+	"𝜃": {
+	math: "\\mathsl{\\theta}"
+},
+	"𝜄": {
+	math: "\\mathsl{I}"
+},
+	"𝜅": {
+	math: "\\mathsl{K}"
+},
+	"𝜆": {
+	math: "\\mathsl{\\lambda}"
+},
+	"𝜇": {
+	math: "\\mu"
+},
+	"𝜈": {
+	math: "\\nu"
+},
+	"𝜉": {
+	math: "\\mathsl{\\xi}"
+},
+	"𝜊": {
+	math: "o"
+},
+	"𝜋": {
+	math: "\\mathsl{\\pi}"
+},
+	"𝜌": {
+	math: "\\mathsl{P}"
+},
+	"𝜍": {
+	math: "\\mathsl{\\varsigma}"
+},
+	"𝜎": {
+	math: "\\mathsl{\\sigma}"
+},
+	"𝜏": {
+	math: "\\mathsl{T}"
+},
+	"𝜐": {
+	math: "\\mathsl{\\upsilon}"
+},
+	"𝜑": {
+	math: "\\mathsl{\\varphi}"
+},
+	"𝜒": {
+	math: "\\mathsl{X}"
+},
+	"𝜓": {
+	math: "\\mathsl{\\psi}"
+},
+	"𝜔": {
+	math: "\\mathsl{\\omega}"
+},
+	"𝜕": {
+	math: "\\partial"
+},
+	"𝜖": {
+	math: "\\in"
+},
+	"𝜗": {
+	math: "\\mathsl{\\vartheta}"
+},
+	"𝜘": {
+	math: "\\mathsl{\\varkappa}"
+},
+	"𝜙": {
+	math: "\\mathsl{\\phi}"
+},
+	"𝜚": {
+	math: "\\mathsl{\\varrho}"
+},
+	"𝜛": {
+	math: "\\mathsl{\\varpi}"
+},
+	"𝜜": {
+	math: "\\mathbit{A}"
+},
+	"𝜝": {
+	math: "\\mathbit{B}"
+},
+	"𝜞": {
+	math: "\\mathbit{\\Gamma}"
+},
+	"𝜟": {
+	math: "\\mathbit{\\Delta}"
+},
+	"𝜠": {
+	math: "\\mathbit{E}"
+},
+	"𝜡": {
+	math: "\\mathbit{Z}"
+},
+	"𝜱": {
+	math: "\\mathbit{H}"
+},
+	"𝜣": {
+	math: "\\mathbit{\\Theta}"
+},
+	"đœ€": {
+	math: "\\mathbit{I}"
+},
+	"đœ„": {
+	math: "\\mathbit{K}"
+},
+	"𝜩": {
+	math: "\\mathbit{\\Lambda}"
+},
+	"𝜧": {
+	math: "M"
+},
+	"𝜹": {
+	math: "N"
+},
+	"đœ©": {
+	math: "\\mathbit{\\Xi}"
+},
+	"đœȘ": {
+	math: "O"
+},
+	"đœ«": {
+	math: "\\mathbit{\\Pi}"
+},
+	"𝜬": {
+	math: "\\mathbit{P}"
+},
+	"𝜭": {
+	math: "\\mathbit{O}"
+},
+	"𝜼": {
+	math: "\\mathbit{\\Sigma}"
+},
+	"𝜯": {
+	math: "\\mathbit{T}"
+},
+	"𝜰": {
+	math: "\\mathbit{\\Upsilon}"
+},
+	"đœ±": {
+	math: "\\mathbit{\\Phi}"
+},
+	"đœČ": {
+	math: "\\mathbit{X}"
+},
+	"𝜳": {
+	math: "\\mathbit{\\Psi}"
+},
+	"𝜮": {
+	math: "\\mathbit{\\Omega}"
+},
+	"đœ”": {
+	math: "\\mathbit{\\nabla}"
+},
+	"đœ¶": {
+	math: "\\mathbit{\\alpha}"
+},
+	"đœ·": {
+	math: "\\mathbit{\\beta}"
+},
+	"𝜾": {
+	math: "\\mathbit{\\gamma}"
+},
+	"đœč": {
+	math: "\\mathbit{\\delta}"
+},
+	"đœș": {
+	math: "\\mathbit{\\epsilon}"
+},
+	"đœ»": {
+	math: "\\mathbit{\\zeta}"
+},
+	"đœŒ": {
+	math: "\\mathbit{\\eta}"
+},
+	"đœœ": {
+	math: "\\mathbit{\\theta}"
+},
+	"đœŸ": {
+	math: "\\mathbit{\\imath}"
+},
+	"𝜿": {
+	math: "\\mathbit{\\kappa}"
+},
+	"𝝀": {
+	math: "\\mathbit{\\lambda}"
+},
+	"𝝁": {
+	math: "\\mu"
+},
+	"𝝂": {
+	math: "N"
+},
+	"𝝃": {
+	math: "\\mathbit{\\xi}"
+},
+	"𝝄": {
+	math: "O"
+},
+	"𝝅": {
+	math: "\\mathbit{\\pi}"
+},
+	"𝝆": {
+	math: "\\mathbit{\\rho}"
+},
+	"𝝇": {
+	math: "\\mathbit{\\varsigma}"
+},
+	"𝝈": {
+	math: "\\mathbit{\\sigma}"
+},
+	"𝝉": {
+	math: "\\mathbit{\\tau}"
+},
+	"𝝊": {
+	math: "\\mathbit{\\upsilon}"
+},
+	"𝝋": {
+	math: "\\mathbit{\\varphi}"
+},
+	"𝝌": {
+	math: "\\mathbit{\\chi}"
+},
+	"𝝍": {
+	math: "\\mathbit{\\psi}"
+},
+	"𝝎": {
+	math: "\\mathbit{\\omega}"
+},
+	"𝝏": {
+	math: "\\partial"
+},
+	"𝝐": {
+	math: "\\in"
+},
+	"𝝑": {
+	math: "\\mathbit{\\vartheta}"
+},
+	"𝝒": {
+	math: "\\mathbit{\\varkappa}"
+},
+	"𝝓": {
+	math: "\\mathbit{\\phi}"
+},
+	"𝝔": {
+	math: "\\mathbit{\\varrho}"
+},
+	"𝝕": {
+	math: "\\mathbit{\\varpi}"
+},
+	"𝝖": {
+	math: "\\mathsfbf{A}"
+},
+	"𝝗": {
+	math: "\\mathsfbf{B}"
+},
+	"𝝘": {
+	math: "\\mathsfbf{\\Gamma}"
+},
+	"𝝙": {
+	math: "\\mathsfbf{\\Delta}"
+},
+	"𝝚": {
+	math: "\\mathsfbf{E}"
+},
+	"𝝛": {
+	math: "\\mathsfbf{Z}"
+},
+	"𝝜": {
+	math: "\\mathsfbf{H}"
+},
+	"𝝝": {
+	math: "\\mathsfbf{\\Theta}"
+},
+	"𝝞": {
+	math: "\\mathsfbf{I}"
+},
+	"𝝟": {
+	math: "\\mathsfbf{K}"
+},
+	"𝝠": {
+	math: "\\mathsfbf{\\Lambda}"
+},
+	"𝝡": {
+	math: "M"
+},
+	"𝝱": {
+	math: "N"
+},
+	"𝝣": {
+	math: "\\mathsfbf{\\Xi}"
+},
+	"đ€": {
+	math: "O"
+},
+	"đ„": {
+	math: "\\mathsfbf{\\Pi}"
+},
+	"𝝩": {
+	math: "\\mathsfbf{P}"
+},
+	"𝝧": {
+	math: "\\mathsfbf{\\Theta}"
+},
+	"𝝹": {
+	math: "\\mathsfbf{\\Sigma}"
+},
+	"đ©": {
+	math: "\\mathsfbf{T}"
+},
+	"đȘ": {
+	math: "\\mathsfbf{\\Upsilon}"
+},
+	"đ«": {
+	math: "\\mathsfbf{\\Phi}"
+},
+	"𝝬": {
+	math: "\\mathsfbf{X}"
+},
+	"𝝭": {
+	math: "\\mathsfbf{\\Psi}"
+},
+	"𝝼": {
+	math: "\\mathsfbf{\\Omega}"
+},
+	"𝝯": {
+	math: "\\mathsfbf{\\nabla}"
+},
+	"𝝰": {
+	math: "\\mathsfbf{\\alpha}"
+},
+	"đ±": {
+	math: "\\mathsfbf{\\beta}"
+},
+	"đČ": {
+	math: "\\mathsfbf{\\gamma}"
+},
+	"𝝳": {
+	math: "\\mathsfbf{\\delta}"
+},
+	"𝝮": {
+	math: "\\mathsfbf{\\varepsilon}"
+},
+	"đ”": {
+	math: "\\mathsfbf{\\zeta}"
+},
+	"đ¶": {
+	math: "\\mathsfbf{\\eta}"
+},
+	"đ·": {
+	math: "\\mathsfbf{\\theta}"
+},
+	"𝝾": {
+	math: "\\mathsfbf{\\imath}"
+},
+	"đč": {
+	math: "\\mathsfbf{\\kappa}"
+},
+	"đș": {
+	math: "\\mathsfbf{\\lambda}"
+},
+	"đ»": {
+	math: "\\mu"
+},
+	"đŒ": {
+	math: "\\nu"
+},
+	"đœ": {
+	math: "\\mathsfbf{\\xi}"
+},
+	"đŸ": {
+	math: "o"
+},
+	"𝝿": {
+	math: "\\mathsfbf{\\pi}"
+},
+	"𝞀": {
+	math: "\\mathsfbf{\\rho}"
+},
+	"𝞁": {
+	math: "\\mathsfbf{\\varsigma}"
+},
+	"𝞂": {
+	math: "\\mathsfbf{\\sigma}"
+},
+	"𝞃": {
+	math: "\\mathsfbf{\\tau}"
+},
+	"𝞄": {
+	math: "\\mathsfbf{\\upsilon}"
+},
+	"𝞅": {
+	math: "\\mathsfbf{\\varphi}"
+},
+	"𝞆": {
+	math: "\\mathsfbf{\\chi}"
+},
+	"𝞇": {
+	math: "\\mathsfbf{\\psi}"
+},
+	"𝞈": {
+	math: "\\mathsfbf{\\omega}"
+},
+	"𝞉": {
+	math: "\\partial"
+},
+	"𝞊": {
+	math: "\\in"
+},
+	"𝞋": {
+	math: "\\mathsfbf{\\vartheta}"
+},
+	"𝞌": {
+	math: "\\mathsfbf{\\varkappa}"
+},
+	"𝞍": {
+	math: "\\mathsfbf{\\phi}"
+},
+	"𝞎": {
+	math: "\\mathsfbf{\\varrho}"
+},
+	"𝞏": {
+	math: "\\mathsfbf{\\varpi}"
+},
+	"𝞐": {
+	math: "\\mathsfbfsl{A}"
+},
+	"𝞑": {
+	math: "\\mathsfbfsl{B}"
+},
+	"𝞒": {
+	math: "\\mathsfbfsl{\\Gamma}"
+},
+	"𝞓": {
+	math: "\\mathsfbfsl{\\Delta}"
+},
+	"𝞔": {
+	math: "\\mathsfbfsl{E}"
+},
+	"𝞕": {
+	math: "\\mathsfbfsl{Z}"
+},
+	"𝞖": {
+	math: "\\mathsfbfsl{H}"
+},
+	"𝞗": {
+	math: "\\mathsfbfsl{\\Theta}"
+},
+	"𝞘": {
+	math: "\\mathsfbfsl{I}"
+},
+	"𝞙": {
+	math: "\\mathsfbfsl{K}"
+},
+	"𝞚": {
+	math: "\\mathsfbfsl{\\Lambda}"
+},
+	"𝞛": {
+	math: "\\mathsfbfsl{M}"
+},
+	"𝞜": {
+	math: "\\mathsfbfsl{N}"
+},
+	"𝞝": {
+	math: "\\mathsfbfsl{\\Xi}"
+},
+	"𝞞": {
+	math: "\\mathsfbfsl{O}"
+},
+	"𝞟": {
+	math: "\\mathsfbfsl{\\Pi}"
+},
+	"𝞠": {
+	math: "\\mathsfbfsl{P}"
+},
+	"𝞡": {
+	math: "\\mathsfbfsl{\\Theta}"
+},
+	"𝞱": {
+	math: "\\mathsfbfsl{\\Sigma}"
+},
+	"𝞣": {
+	math: "\\mathsfbfsl{T}"
+},
+	"đž€": {
+	math: "\\mathsfbfsl{\\Upsilon}"
+},
+	"đž„": {
+	math: "\\mathsfbfsl{\\Phi}"
+},
+	"𝞩": {
+	math: "\\mathsfbfsl{X}"
+},
+	"𝞧": {
+	math: "\\mathsfbfsl{\\Psi}"
+},
+	"𝞹": {
+	math: "\\mathsfbfsl{\\Omega}"
+},
+	"đž©": {
+	math: "\\mathsfbfsl{\\nabla}"
+},
+	"đžȘ": {
+	math: "\\mathsfbfsl{\\alpha}"
+},
+	"đž«": {
+	math: "\\mathsfbfsl{\\beta}"
+},
+	"𝞬": {
+	math: "\\mathsfbfsl{\\gamma}"
+},
+	"𝞭": {
+	math: "\\mathsfbfsl{\\delta}"
+},
+	"𝞼": {
+	math: "\\mathsfbfsl{\\varepsilon}"
+},
+	"𝞯": {
+	math: "\\mathsfbfsl{\\zeta}"
+},
+	"𝞰": {
+	math: "\\mathsfbfsl{\\eta}"
+},
+	"đž±": {
+	math: "\\mathsfbfsl{\\theta}"
+},
+	"đžČ": {
+	math: "\\mathsfbfsl{\\imath}"
+},
+	"𝞳": {
+	math: "\\mathsfbfsl{\\kappa}"
+},
+	"𝞮": {
+	math: "\\mathsfbfsl{\\lambda}"
+},
+	"đž”": {
+	math: "\\mu"
+},
+	"đž¶": {
+	math: "\\nu"
+},
+	"đž·": {
+	math: "\\mathsfbfsl{\\xi}"
+},
+	"𝞾": {
+	math: "o"
+},
+	"đžč": {
+	math: "\\mathsfbfsl{\\pi}"
+},
+	"đžș": {
+	math: "\\mathsfbfsl{\\rho}"
+},
+	"đž»": {
+	math: "\\mathsfbfsl{\\varsigma}"
+},
+	"đžŒ": {
+	math: "\\mathsfbfsl{\\sigma}"
+},
+	"đžœ": {
+	math: "\\mathsfbfsl{\\tau}"
+},
+	"đžŸ": {
+	math: "\\mathsfbfsl{\\upsilon}"
+},
+	"𝞿": {
+	math: "\\mathsfbfsl{\\varphi}"
+},
+	"𝟀": {
+	math: "\\mathsfbfsl{\\chi}"
+},
+	"𝟁": {
+	math: "\\mathsfbfsl{\\psi}"
+},
+	"𝟂": {
+	math: "\\mathsfbfsl{\\omega}"
+},
+	"𝟃": {
+	math: "\\partial"
+},
+	"𝟄": {
+	math: "\\in"
+},
+	"𝟅": {
+	math: "\\mathsfbfsl{\\vartheta}"
+},
+	"𝟆": {
+	math: "\\mathsfbfsl{\\varkappa}"
+},
+	"𝟇": {
+	math: "\\mathsfbfsl{\\phi}"
+},
+	"𝟈": {
+	math: "\\mathsfbfsl{\\varrho}"
+},
+	"𝟉": {
+	math: "\\mathsfbfsl{\\varpi}"
+},
+	"𝟊": {
+	math: "\\mbfDigamma"
+},
+	"𝟋": {
+	math: "\\mbfdigamma"
+},
+	"𝟎": {
+	math: "\\mathbf{0}"
+},
+	"𝟏": {
+	math: "\\mathbf{1}"
+},
+	"𝟐": {
+	math: "\\mathbf{2}"
+},
+	"𝟑": {
+	math: "\\mathbf{3}"
+},
+	"𝟒": {
+	math: "\\mathbf{4}"
+},
+	"𝟓": {
+	math: "\\mathbf{5}"
+},
+	"𝟔": {
+	math: "\\mathbf{6}"
+},
+	"𝟕": {
+	math: "\\mathbf{7}"
+},
+	"𝟖": {
+	math: "\\mathbf{8}"
+},
+	"𝟗": {
+	math: "\\mathbf{9}"
+},
+	"𝟘": {
+	math: "\\mathbb{0}"
+},
+	"𝟙": {
+	math: "\\mathbb{1}"
+},
+	"𝟚": {
+	math: "\\mathbb{2}"
+},
+	"𝟛": {
+	math: "\\mathbb{3}"
+},
+	"𝟜": {
+	math: "\\mathbb{4}"
+},
+	"𝟝": {
+	math: "\\mathbb{5}"
+},
+	"𝟞": {
+	math: "\\mathbb{6}"
+},
+	"𝟟": {
+	math: "\\mathbb{7}"
+},
+	"𝟠": {
+	math: "\\mathbb{8}"
+},
+	"𝟡": {
+	math: "\\mathbb{9}"
+},
+	"𝟱": {
+	math: "\\mathsf{0}"
+},
+	"𝟣": {
+	math: "\\mathsf{1}"
+},
+	"đŸ€": {
+	math: "\\mathsf{2}"
+},
+	"đŸ„": {
+	math: "\\mathsf{3}"
+},
+	"𝟩": {
+	math: "\\mathsf{4}"
+},
+	"𝟧": {
+	math: "\\mathsf{5}"
+},
+	"𝟹": {
+	math: "\\mathsf{6}"
+},
+	"đŸ©": {
+	math: "\\mathsf{7}"
+},
+	"đŸȘ": {
+	math: "\\mathsf{8}"
+},
+	"đŸ«": {
+	math: "\\mathsf{9}"
+},
+	"𝟬": {
+	math: "\\mathsfbf{0}"
+},
+	"𝟭": {
+	math: "\\mathsfbf{1}"
+},
+	"𝟼": {
+	math: "\\mathsfbf{2}"
+},
+	"𝟯": {
+	math: "\\mathsfbf{3}"
+},
+	"𝟰": {
+	math: "\\mathsfbf{4}"
+},
+	"đŸ±": {
+	math: "\\mathsfbf{5}"
+},
+	"đŸČ": {
+	math: "\\mathsfbf{6}"
+},
+	"𝟳": {
+	math: "\\mathsfbf{7}"
+},
+	"𝟮": {
+	math: "\\mathsfbf{8}"
+},
+	"đŸ”": {
+	math: "\\mathsfbf{9}"
+},
+	"đŸ¶": {
+	math: "\\mathtt{0}"
+},
+	"đŸ·": {
+	math: "\\mathtt{1}"
+},
+	"𝟾": {
+	math: "\\mathtt{2}"
+},
+	"đŸč": {
+	math: "\\mathtt{3}"
+},
+	"đŸș": {
+	math: "\\mathtt{4}"
+},
+	"đŸ»": {
+	math: "\\mathtt{5}"
+},
+	"đŸŒ": {
+	math: "\\mathtt{6}"
+},
+	"đŸœ": {
+	math: "\\mathtt{7}"
+},
+	"đŸŸ": {
+	math: "\\mathtt{8}"
+},
+	"𝟿": {
+	math: "\\mathtt{9}"
+}
+};
+
+var $$2 = {
+	math: "\\$",
+	text: "\\$"
+};
+var _$2 = {
+	math: "\\_",
+	text: "\\_"
+};
+var require$$2 = {
+	"#": {
+	math: "\\#",
+	text: "\\#"
+},
+	$: $$2,
+	"%": {
+	math: "\\%",
+	text: "\\%"
+},
+	"&": {
+	math: "\\&",
+	text: "\\&"
+},
+	"/​": {
+	text: "\\slash",
+	commandspacer: true
+},
+	"<": {
+	math: "<"
+},
+	">": {
+	math: ">"
+},
+	"\\": {
+	math: "\\backslash",
+	text: "\\textbackslash",
+	commandspacer: true
+},
+	"^": {
+	math: "\\sphat",
+	text: "\\^"
+},
+	_: _$2,
+	"{": {
+	math: "\\lbrace",
+	text: "\\{"
+},
+	"}": {
+	math: "\\rbrace",
+	text: "\\}"
+},
+	"~": {
+	math: "\\sptilde",
+	text: "\\textasciitilde",
+	commandspacer: true
+},
+	" ": {
+	math: "~",
+	space: true,
+	text: "~"
+},
+	" ": {
+	text: " ",
+	space: true
+},
+	" ": {
+	math: "\\quad",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.6em}",
+	space: true
+},
+	" ": {
+	math: "\\quad",
+	space: true,
+	text: "\\hspace{1em}"
+},
+	" ": {
+	text: "\\;",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.25em}",
+	space: true
+},
+	" ": {
+	text: "\\hspace{0.166em}",
+	space: true
+},
+	" ": {
+	text: "\\hphantom{0}",
+	space: true
+},
+	" ": {
+	text: "\\hphantom{,}",
+	space: true
+},
+	" ": {
+	text: "\\,",
+	space: true
+},
+	" ": {
+	math: "\\mkern1mu",
+	space: true
+},
+	"​": {
+	text: "\\mbox",
+	commandspacer: true,
+	space: true
+},
+	" ": {
+	text: " ",
+	space: true
+},
+	" ": {
+	math: "\\:",
+	space: true,
+	text: "\\:"
+}
+};
+
+var require$$3 = {
+	"\\#": "#",
+	"\\$": "$",
+	"\\%": "%",
+	"\\&": "&",
+	"\\slash": "/​",
+	"\\textless": "<",
+	"\\textgreater": ">",
+	"\\LaTeX": "LaTeX",
+	"\\textbackslash": "\\",
+	"\\backslash": "\\",
+	"\\": "\\",
+	"\\^": "^",
+	"\\sphat": "^",
+	"\\_": "_",
+	"\\t{ia}": "iïž aïžĄ",
+	"{\\~ w}": "w̃",
+	"\\{": "{",
+	"\\lbrace": "{",
+	"\\textbar": "|",
+	"\\}": "}",
+	"\\rbrace": "}",
+	"\\textasciitilde": "~",
+	"\\sptilde": "~",
+	"\\textexclamdown": "ÂĄ",
+	"\\textcent": "Âą",
+	"\\cent": "Âą",
+	"\\textsterling": "ÂŁ",
+	"\\pounds": "ÂŁ",
+	"\\textcurrency": "€",
+	"\\textyen": "„",
+	"\\yen": "„",
+	"\\textbrokenbar": "Š",
+	"\\textsection": "§",
+	"\\textasciidieresis": "š",
+	"\\spddot": "š",
+	"\\textcopyright": "©",
+	"\\textordfeminine": "ÂȘ",
+	"\\guillemotleft": "«",
+	"\\lnot": "ÂŹ",
+	"\\neg": "ÂŹ",
+	"\\-": "­",
+	"\\textregistered": "Âź",
+	"\\circledR": "Âź",
+	"\\textasciimacron": "ÂŻ",
+	"\\textdegree": "°",
+	"^\\circ": "°",
+	"\\pm": "±",
+	"^{2}": "ÂČ",
+	"^{3}": "Âł",
+	"\\textasciiacute": "ÂŽ",
+	"\\textmu": "”",
+	"\\textparagraph": "¶",
+	"^{1}": "Âč",
+	"\\textordmasculine": "Âș",
+	"\\guillemotright": "»",
+	"\\frac{1}{4}": "Œ",
+	"\\textonequarter": "Œ",
+	"\\frac{1}{2}": "œ",
+	"\\textonehalf": "œ",
+	"\\frac{3}{4}": "Ÿ",
+	"\\textthreequarters": "Ÿ",
+	"\\textquestiondown": "Âż",
+	"\\`A": "À",
+	"\\'A": "Á",
+	"\\^A": "Â",
+	"\\~A": "Ã",
+	"\\\"A": "Ä",
+	"\\AA": "Å",
+	"\\r{A}": "Å",
+	"{\\r A}": "Å",
+	"\\AE": "Æ",
+	"\\c{C}": "Ç",
+	"\\`E": "È",
+	"\\'E": "É",
+	"\\^E": "Ê",
+	"\\\"E": "Ë",
+	"\\`I": "Ì",
+	"\\'I": "Í",
+	"\\^I": "Î",
+	"\\\"I": "Ï",
+	"\\DH": "Ð",
+	"\\~N": "Ñ",
+	"\\`O": "Ò",
+	"\\'O": "Ó",
+	"\\^O": "Ô",
+	"\\~O": "Õ",
+	"\\\"O": "Ö",
+	"\\texttimes": "×",
+	"\\times": "×",
+	"\\O": "Ø",
+	"\\`U": "Ù",
+	"\\'U": "Ú",
+	"\\^U": "Û",
+	"\\\"U": "Ü",
+	"\\'Y": "Ý",
+	"\\TH": "Þ",
+	"\\ss": "ß",
+	"\\`a": "Ă ",
+	"\\'a": "ĂĄ",
+	"\\^a": "Ăą",
+	"\\~a": "ĂŁ",
+	"\\\"a": "Ă€",
+	"\\aa": "Ă„",
+	"\\r{a}": "Ă„",
+	"{\\r a}": "Ă„",
+	"\\ae": "ĂŠ",
+	"\\c{c}": "ç",
+	"\\`e": "Ăš",
+	"\\'e": "Ă©",
+	"\\^e": "ĂȘ",
+	"\\\"e": "Ă«",
+	"\\`i": "ĂŹ",
+	"\\`\\i": "ĂŹ",
+	"\\'i": "Ă­",
+	"\\'\\i": "Ă­",
+	"\\^i": "Ăź",
+	"\\^\\i": "Ăź",
+	"\\\"i": "ĂŻ",
+	"\\\"\\i": "ĂŻ",
+	"\\dh": "Ă°",
+	"\\eth": "Ă°",
+	"\\~n": "ñ",
+	"\\`o": "ĂČ",
+	"\\'o": "Ăł",
+	"\\^o": "ĂŽ",
+	"\\~o": "Ă”",
+	"\\\"o": "ö",
+	"\\div": "Ă·",
+	"\\o": "Ăž",
+	"\\`u": "Ăč",
+	"\\'u": "Ăș",
+	"\\^u": "Ă»",
+	"\\\"u": "ĂŒ",
+	"\\'y": "Ăœ",
+	"\\th": "ĂŸ",
+	"\\\"y": "Ăż",
+	"\\=A": "Ā",
+	"\\=a": "ā",
+	"\\u{A}": "Ă",
+	"\\u{a}": "ă",
+	"\\k{A}": "Ą",
+	"\\k{a}": "ą",
+	"\\'C": "Ć",
+	"\\'c": "ć",
+	"\\^C": "Ĉ",
+	"\\^c": "ĉ",
+	"\\.C": "Ċ",
+	"\\.c": "ċ",
+	"\\v{C}": "Č",
+	"\\v{c}": "č",
+	"\\v{D}": "Ď",
+	"\\v{d}": "ď",
+	"\\DJ": "Đ",
+	"\\dj": "đ",
+	"\\=E": "Ē",
+	"\\=e": "ē",
+	"\\u{E}": "Ĕ",
+	"\\u{e}": "ĕ",
+	"\\.E": "Ė",
+	"\\.e": "ė",
+	"\\k{E}": "Ę",
+	"\\k{e}": "ę",
+	"\\v{E}": "Ě",
+	"\\v{e}": "ě",
+	"\\^G": "Ĝ",
+	"\\^g": "ĝ",
+	"\\u{G}": "Ğ",
+	"\\u{g}": "ğ",
+	"\\.G": "Ä ",
+	"\\.g": "ÄĄ",
+	"\\c{G}": "Äą",
+	"\\c{g}": "ÄŁ",
+	"\\^H": "Ä€",
+	"\\^h": "Ä„",
+	"{\\fontencoding{LELA}\\selectfont\\char40}": "ÄŠ",
+	"\\Elzxh": "ħ",
+	"\\~I": "Äš",
+	"\\~i": "Ä©",
+	"\\=I": "ÄȘ",
+	"\\=i": "Ä«",
+	"\\u{I}": "ÄŹ",
+	"{\\u \\i}": "Ä­",
+	"\\k{I}": "Äź",
+	"\\k{i}": "ÄŻ",
+	"\\.I": "Ä°",
+	"\\i": "ı",
+	"\\imath": "ı",
+	"\\^J": "ÄŽ",
+	"\\^\\j": "Ä”",
+	"\\c{K}": "Ķ",
+	"\\c{k}": "Ä·",
+	"{\\fontencoding{LELA}\\selectfont\\char91}": "Äž",
+	"\\'L": "Äč",
+	"\\'l": "Äș",
+	"\\c{L}": "Ä»",
+	"\\c{l}": "Č",
+	"\\v{L}": "Ĝ",
+	"\\v{l}": "ÄŸ",
+	"{\\fontencoding{LELA}\\selectfont\\char201}": "Äż",
+	"{\\fontencoding{LELA}\\selectfont\\char202}": "ƀ",
+	"\\L": "Ɓ",
+	"\\l": "Ƃ",
+	"\\'N": "ƃ",
+	"\\'n": "Ƅ",
+	"\\c{N}": "ƅ",
+	"\\c{n}": "Ɔ",
+	"\\v{N}": "Ƈ",
+	"\\v{n}": "ƈ",
+	"\\NG": "Ɗ",
+	"\\ng": "Ƌ",
+	"\\=O": "ƌ",
+	"\\=o": "ƍ",
+	"\\u{O}": "Ǝ",
+	"\\u{o}": "Ə",
+	"\\H{O}": "Ɛ",
+	"\\H{o}": "Ƒ",
+	"\\OE": "ƒ",
+	"\\oe": "Ɠ",
+	"\\'R": "Ɣ",
+	"\\'r": "ƕ",
+	"\\c{R}": "Ɩ",
+	"\\c{r}": "Ɨ",
+	"\\v{R}": "Ƙ",
+	"\\v{r}": "ƙ",
+	"\\'S": "ƚ",
+	"\\'s": "ƛ",
+	"\\^S": "Ɯ",
+	"\\^s": "Ɲ",
+	"\\c{S}": "ƞ",
+	"\\c{s}": "Ɵ",
+	"\\v{S}": "Ć ",
+	"\\v{s}": "ĆĄ",
+	"\\c{T}": "Ćą",
+	"\\c{t}": "ĆŁ",
+	"\\v{T}": "Ć€",
+	"\\v{t}": "Ć„",
+	"{\\fontencoding{LELA}\\selectfont\\char47}": "ĆŠ",
+	"{\\fontencoding{LELA}\\selectfont\\char63}": "Ƨ",
+	"\\~U": "Ćš",
+	"\\~u": "Ć©",
+	"\\=U": "ĆȘ",
+	"\\=u": "Ć«",
+	"\\u{U}": "ĆŹ",
+	"\\u{u}": "Ć­",
+	"\\r{U}": "Ćź",
+	"{\\r U}": "Ćź",
+	"\\r{u}": "ĆŻ",
+	"\\ocirc{u}": "ĆŻ",
+	"{\\r u}": "ĆŻ",
+	"\\H{U}": "Ć°",
+	"\\H{u}": "Ʊ",
+	"\\k{U}": "ĆČ",
+	"\\k{u}": "Ćł",
+	"\\^W": "ĆŽ",
+	"\\^w": "Ć”",
+	"\\^Y": "ƶ",
+	"\\^y": "Ć·",
+	"\\\"Y": "Ćž",
+	"\\'Z": "Ćč",
+	"\\'z": "Ćș",
+	"\\.Z": "Ć»",
+	"\\.z": "ĆŒ",
+	"\\v{Z}": "Ćœ",
+	"\\v{z}": "ĆŸ",
+	"\\texthvlig": "ƕ",
+	"\\textnrleg": "ƞ",
+	"\\textesh": "ÆȘ",
+	"\\Zbar": "Æ”",
+	"{\\fontencoding{LELA}\\selectfont\\char195}": "Æș",
+	"\\textdoublepipe": "ǂ",
+	"\\v{A}": "Ǎ",
+	"\\v{a}": "ǎ",
+	"\\v{I}": "Ǐ",
+	"\\v{i}": "ǐ",
+	"\\v{O}": "Ǒ",
+	"\\v{o}": "ǒ",
+	"\\v{U}": "Ǔ",
+	"\\v{u}": "ǔ",
+	"\\v{G}": "ÇŠ",
+	"\\v{g}": "ǧ",
+	"\\v{K}": "Çš",
+	"\\v{k}": "Ç©",
+	"\\k{O}": "ÇȘ",
+	"\\k{o}": "Ç«",
+	"\\v{j}": "Ç°",
+	"\\'G": "ÇŽ",
+	"\\'g": "Ç”",
+	"\\c{E}": "Èš",
+	"\\c{e}": "È©",
+	"\\jmath": "È·",
+	"\\Elztrna": "ɐ",
+	"\\Elztrnsa": "ɒ",
+	"\\Elzopeno": "ɔ",
+	"\\Elzrtld": "ɖ",
+	"{\\fontencoding{LEIP}\\selectfont\\char61}": "ɘ",
+	"\\Elzschwa": "ə",
+	"\\varepsilon": "ɛ",
+	"\\Elzpgamma": "ÉŁ",
+	"\\Elzpbgam": "É€",
+	"\\Elztrnh": "É„",
+	"\\Elzbtdl": "ÉŹ",
+	"\\Elzrtll": "É­",
+	"\\Elztrnm": "ÉŻ",
+	"\\Elztrnmlr": "É°",
+	"\\Elzltlmr": "ɱ",
+	"\\Elzltln": "ÉČ",
+	"\\Elzrtln": "Éł",
+	"\\Elzclomeg": "É·",
+	"\\textphi": "Éž",
+	"\\Elztrnr": "Éč",
+	"\\Elztrnrl": "Éș",
+	"\\Elzrttrnr": "É»",
+	"\\Elzrl": "Ɍ",
+	"\\Elzrtlr": "ɜ",
+	"\\Elzfhr": "ÉŸ",
+	"{\\fontencoding{LEIP}\\selectfont\\char202}": "Éż",
+	"\\Elzrtls": "ʂ",
+	"\\Elzesh": "ʃ",
+	"\\Elztrnt": "ʇ",
+	"\\Elzrtlt": "ʈ",
+	"\\Elzpupsil": "ʊ",
+	"\\Elzpscrv": "ʋ",
+	"\\Elzinvv": "ʌ",
+	"\\Elzinvw": "ʍ",
+	"\\Elztrny": "ʎ",
+	"\\Elzrtlz": "ʐ",
+	"\\Elzyogh": "ʒ",
+	"\\Elzglst": "ʔ",
+	"\\Elzreglst": "ʕ",
+	"\\Elzinglst": "ʖ",
+	"\\textturnk": "ʞ",
+	"\\Elzdyogh": "Ê€",
+	"\\Elztesh": "ʧ",
+	"\\textsuperscript{h}": "Ê°",
+	"^{h}": "Ê°",
+	"\\textsuperscript{j}": "ÊČ",
+	"^{j}": "ÊČ",
+	"\\textsuperscript{r}": "Êł",
+	"^{r}": "Êł",
+	"\\textsuperscript{w}": "Ê·",
+	"^{w}": "Ê·",
+	"\\textsuperscript{y}": "Êž",
+	"^{y}": "Êž",
+	"\\lasp": "Êż",
+	"\\textasciicircum": "ˆ",
+	"\\textasciicaron": "ˇ",
+	"\\Elzverts": "ˈ",
+	"\\Elzverti": "ˌ",
+	"\\Elzlmrk": "ː",
+	"\\Elzhlmrk": "ˑ",
+	"\\Elzsbrhr": "˒",
+	"\\Elzsblhr": "˓",
+	"\\Elzrais": "˔",
+	"\\Elzlow": "˕",
+	"\\textasciibreve": "˘",
+	"\\textperiodcentered": "˙",
+	"\\texttildelow": "˜",
+	"\\textsuperscript{l}": "ËĄ",
+	"^{l}": "ËĄ",
+	"\\textsuperscript{s}": "Ëą",
+	"^{s}": "Ëą",
+	"\\textsuperscript{x}": "ËŁ",
+	"^{x}": "ËŁ",
+	"\\tone{55}": "Ë„",
+	"\\tone{44}": "ËŠ",
+	"\\tone{33}": "˧",
+	"\\tone{22}": "Ëš",
+	"\\tone{11}": "Ë©",
+	"\\`": "̀",
+	"\\grave": "̀",
+	"\\textgravemacron": "̀̄",
+	"\\textgravedot": "̀̇",
+	"\\'": "́",
+	"\\acute": "́",
+	"\\textacutemacron": "́̄",
+	"\\textacutewedge": "́̌",
+	"\\hat": "̂",
+	"\\textcircumdot": "̂̇",
+	"\\~": "̃",
+	"\\tilde": "̃",
+	"\\texttildedot": "̃̇",
+	"\\=": "̄",
+	"\\bar": "̄",
+	"\\overline": "̅",
+	"\\u": "̆",
+	"\\breve": "̆",
+	"\\textbrevemacron": "̆̄",
+	"\\.": "̇",
+	"\\dot": "̇",
+	"\\textdotacute": "̇́",
+	"\\\"": "̈",
+	"\\ddot": "̈",
+	"\\ovhook": "̉",
+	"\\r": "̊",
+	"\\mathring": "̊",
+	"\\textringmacron": "̊̄",
+	"\\H": "̋",
+	"\\check": "̌",
+	"\\v": "̌",
+	"\\textvbaraccent": "̍",
+	"\\textdoublevbaraccent": "̎",
+	"\\textdoublegrave": "̏",
+	"\\textdotbreve": "̐",
+	"{\\fontencoding{LECO}\\selectfont\\char177}": "̑",
+	"\\oturnedcomma": "̒",
+	"\\ocommatopright": "̕",
+	"\\textsubgrave": "̖",
+	"\\textadvancing": "̘",
+	"\\textretracting": "̙",
+	"\\droang": "̚",
+	"\\textcorner": "̚",
+	"\\textsublhalfring": "̜",
+	"\\textraising": "̝",
+	"\\textlowering": "̞",
+	"\\textsubplus": "̟",
+	"\\Elzpalh": "ÌĄ",
+	"\\Elzrh": "Ìą",
+	"\\d": "ÌŁ",
+	"\\textsubumlaut": "Ì€",
+	"\\textsubring": "Ì„",
+	"\\c": "̧",
+	"\\k": "Ìš",
+	"\\textsyllabic": "Ì©",
+	"\\Elzsbbrg": "ÌȘ",
+	"\\textsubbridge": "ÌȘ",
+	"{\\fontencoding{LECO}\\selectfont\\char203}": "Ì«",
+	"\\textsubwedge": "ÌŹ",
+	"\\textsubarch": "ÌŻ",
+	"\\utilde": "Ì°",
+	"\\textsubtilde": "Ì°",
+	"\\textsubbar": "̱",
+	"\\underbar": "̱",
+	"\\underline": "ÌČ",
+	"\\textsuperimposetilde": "ÌŽ",
+	"\\Elzxl": "Ì”",
+	"\\Elzbar": "̶",
+	"{\\fontencoding{LECO}\\selectfont\\char215}": "Ì·",
+	"\\not": "Ìž",
+	"\\textsubrhalfring": "Ìč",
+	"\\textinvsubbridge": "Ìș",
+	"\\textsubsquare": "Ì»",
+	"\\textseagull": "̌",
+	"\\textovercross": "̜",
+	"{\\fontencoding{LECO}\\selectfont\\char225}": "ÍĄ",
+	"\\'H": "Ή",
+	"{\\'{}I}": "Ί",
+	"{\\'{}O}": "Ό",
+	"\\mathrm{'Y}": "Ύ",
+	"\\mathrm{'\\Omega}": "Ώ",
+	"\\acute{\\ddot{\\iota}}": "ΐ",
+	"\\Gamma": "Γ",
+	"\\varGamma": "Γ",
+	"\\Delta": "Δ",
+	"\\Theta": "Θ",
+	"\\Lambda": "Λ",
+	"\\Xi": "Ξ",
+	"\\Pi": "Π",
+	"\\Sigma": "ÎŁ",
+	"\\Upsilon": "΄",
+	"\\Phi": "Ί",
+	"\\Psi": "Κ",
+	"\\Omega": "Ω",
+	"\\mathrm{\\ddot{I}}": "ÎȘ",
+	"\\mathrm{\\ddot{Y}}": "Ϋ",
+	"{\\'$\\alpha$}": "ÎŹ",
+	"\\acute{\\epsilon}": "έ",
+	"\\acute{\\eta}": "Îź",
+	"\\acute{\\iota}": "ÎŻ",
+	"\\acute{\\ddot{\\upsilon}}": "ΰ",
+	"\\alpha": "α",
+	"\\beta": "ÎČ",
+	"\\gamma": "Îł",
+	"\\delta": "ÎŽ",
+	"\\zeta": "ζ",
+	"\\eta": "η",
+	"\\texttheta": "Ξ",
+	"\\theta": "Ξ",
+	"\\iota": "Îč",
+	"\\kappa": "Îș",
+	"\\lambda": "λ",
+	"\\nu": "Μ",
+	"\\xi": "Ο",
+	"\\pi": "π",
+	"\\rho": "ρ",
+	"\\varsigma": "ς",
+	"\\sigma": "σ",
+	"\\tau": "τ",
+	"\\upsilon": "υ",
+	"\\varphi": "φ",
+	"\\chi": "χ",
+	"\\psi": "ψ",
+	"\\omega": "ω",
+	"\\ddot{\\iota}": "ϊ",
+	"\\ddot{\\upsilon}": "ϋ",
+	"\\acute{\\upsilon}": "ύ",
+	"\\acute{\\omega}": "ώ",
+	"\\Pisymbol{ppi022}{87}": "ϐ",
+	"\\varbeta": "ϐ",
+	"\\textvartheta": "ϑ",
+	"\\vartheta": "ϑ",
+	"\\phi": "ϕ",
+	"\\varpi": "ϖ",
+	"\\Qoppa": "Ϙ",
+	"\\qoppa": "ϙ",
+	"\\Stigma": "Ϛ",
+	"\\stigma": "ϛ",
+	"\\Digamma": "Ϝ",
+	"\\digamma": "ϝ",
+	"\\Koppa": "Ϟ",
+	"\\koppa": "ϟ",
+	"\\Sampi": "Ï ",
+	"\\sampi": "ÏĄ",
+	"\\varkappa": "Ï°",
+	"\\varrho": "ϱ",
+	"\\textTheta": "ÏŽ",
+	"\\upvarTheta": "ÏŽ",
+	"\\epsilon": "Ï”",
+	"\\backepsilon": "϶",
+	"\\cyrchar\\CYRYO": "Ё",
+	"\\cyrchar\\CYRDJE": "Ђ",
+	"\\cyrchar{\\'\\CYRG}": "Ѓ",
+	"\\cyrchar\\CYRIE": "Є",
+	"\\cyrchar\\CYRDZE": "Ѕ",
+	"\\cyrchar\\CYRII": "І",
+	"\\cyrchar\\CYRYI": "Ї",
+	"\\cyrchar\\CYRJE": "Ј",
+	"\\cyrchar\\CYRLJE": "Љ",
+	"\\cyrchar\\CYRNJE": "Њ",
+	"\\cyrchar\\CYRTSHE": "Ћ",
+	"\\cyrchar{\\'\\CYRK}": "Ќ",
+	"\\cyrchar\\CYRUSHRT": "Ў",
+	"\\cyrchar\\CYRDZHE": "Џ",
+	"\\cyrchar\\CYRA": "А",
+	"\\cyrchar\\CYRB": "Б",
+	"\\cyrchar\\CYRV": "В",
+	"\\cyrchar\\CYRG": "Г",
+	"\\cyrchar\\CYRD": "Д",
+	"\\cyrchar\\CYRE": "Е",
+	"\\cyrchar\\CYRZH": "Ж",
+	"\\cyrchar\\CYRZ": "З",
+	"\\cyrchar\\CYRI": "И",
+	"\\cyrchar\\CYRISHRT": "Й",
+	"\\cyrchar\\CYRK": "К",
+	"\\cyrchar\\CYRL": "Л",
+	"\\cyrchar\\CYRM": "М",
+	"\\cyrchar\\CYRN": "Н",
+	"\\cyrchar\\CYRO": "О",
+	"\\cyrchar\\CYRP": "П",
+	"\\cyrchar\\CYRR": "Đ ",
+	"\\cyrchar\\CYRS": "ĐĄ",
+	"\\cyrchar\\CYRT": "Đą",
+	"\\cyrchar\\CYRU": "ĐŁ",
+	"\\cyrchar\\CYRF": "Đ€",
+	"\\cyrchar\\CYRH": "Đ„",
+	"\\cyrchar\\CYRC": "ĐŠ",
+	"\\cyrchar\\CYRCH": "Ч",
+	"\\cyrchar\\CYRSH": "Đš",
+	"\\cyrchar\\CYRSHCH": "Đ©",
+	"\\cyrchar\\CYRHRDSN": "ĐȘ",
+	"\\bud": "ĐȘ",
+	"\\cdprime": "ĐȘ",
+	"\\cyrchar\\CYRERY": "Đ«",
+	"\\cyrchar\\CYRSFTSN": "ĐŹ",
+	"\\cprime": "ĐŹ",
+	"\\cyrchar\\CYREREV": "Đ­",
+	"\\cyrchar\\CYRYU": "Đź",
+	"\\cyrchar\\CYRYA": "ĐŻ",
+	"\\cyrchar\\cyra": "Đ°",
+	"\\cyrchar\\cyrb": "б",
+	"\\cyrchar\\cyrv": "ĐČ",
+	"\\cyrchar\\cyrg": "Đł",
+	"\\cyrchar\\cyrd": "ĐŽ",
+	"\\cyrchar\\cyre": "Đ”",
+	"\\cyrchar\\cyrzh": "ж",
+	"\\cyrchar\\cyrz": "Đ·",
+	"\\cyrchar\\cyri": "Đž",
+	"\\cyrchar\\cyrishrt": "Đč",
+	"\\cyrchar\\cyrk": "Đș",
+	"\\cyrchar\\cyrl": "Đ»",
+	"\\cyrchar\\cyrm": "ĐŒ",
+	"\\cyrchar\\cyrn": "Đœ",
+	"\\cyrchar\\cyro": "ĐŸ",
+	"\\cyrchar\\cyrp": "Đż",
+	"\\cyrchar\\cyrr": "р",
+	"\\cyrchar\\cyrs": "с",
+	"\\cyrchar\\cyrt": "т",
+	"\\cyrchar\\cyru": "у",
+	"\\cyrchar\\cyrf": "ф",
+	"\\cyrchar\\cyrh": "х",
+	"\\cyrchar\\cyrc": "ц",
+	"\\cyrchar\\cyrch": "ч",
+	"\\cyrchar\\cyrsh": "ш",
+	"\\cyrchar\\cyrshch": "щ",
+	"\\cyrchar\\cyrhrdsn": "ъ",
+	"\\cyrchar\\cyrery": "ы",
+	"\\cyrchar\\cyrsftsn": "ь",
+	"\\cyrchar\\cyrerev": "э",
+	"\\cyrchar\\cyryu": "ю",
+	"\\cyrchar\\cyrya": "я",
+	"\\cyrchar\\cyryo": "ё",
+	"\\cyrchar\\cyrdje": "ђ",
+	"\\cyrchar{\\'\\cyrg}": "ѓ",
+	"\\cyrchar\\cyrie": "є",
+	"\\cyrchar\\cyrdze": "ѕ",
+	"\\cyrchar\\cyrii": "і",
+	"\\cyrchar\\cyryi": "ї",
+	"\\cyrchar\\cyrje": "ј",
+	"\\cyrchar\\cyrlje": "љ",
+	"\\cyrchar\\cyrnje": "њ",
+	"\\cyrchar\\cyrtshe": "ћ",
+	"\\cyrchar{\\'\\cyrk}": "ќ",
+	"\\cyrchar\\cyrushrt": "ў",
+	"\\cyrchar\\cyrdzhe": "џ",
+	"\\cyrchar\\CYROMEGA": "Ń ",
+	"\\cyrchar\\cyromega": "ŃĄ",
+	"\\cyrchar\\CYRYAT": "Ńą",
+	"\\cyrchar\\CYRIOTE": "Ń€",
+	"\\cyrchar\\cyriote": "Ń„",
+	"\\cyrchar\\CYRLYUS": "ŃŠ",
+	"\\cyrchar\\cyrlyus": "ѧ",
+	"\\cyrchar\\CYRIOTLYUS": "Ńš",
+	"\\cyrchar\\cyriotlyus": "Ń©",
+	"\\cyrchar\\CYRBYUS": "ŃȘ",
+	"\\cyrchar\\CYRIOTBYUS": "ŃŹ",
+	"\\cyrchar\\cyriotbyus": "Ń­",
+	"\\cyrchar\\CYRKSI": "Ńź",
+	"\\cyrchar\\cyrksi": "ŃŻ",
+	"\\cyrchar\\CYRPSI": "Ń°",
+	"\\cyrchar\\cyrpsi": "ѱ",
+	"\\cyrchar\\CYRFITA": "ŃČ",
+	"\\cyrchar\\CYRIZH": "ŃŽ",
+	"\\cyrchar\\CYRUK": "Ńž",
+	"\\cyrchar\\cyruk": "Ńč",
+	"\\cyrchar\\CYROMEGARND": "Ńș",
+	"\\cyrchar\\cyromegarnd": "Ń»",
+	"\\cyrchar\\CYROMEGATITLO": "ŃŒ",
+	"\\cyrchar\\cyromegatitlo": "Ńœ",
+	"\\cyrchar\\CYROT": "ŃŸ",
+	"\\cyrchar\\cyrot": "Ńż",
+	"\\cyrchar\\CYRKOPPA": "Ҁ",
+	"\\cyrchar\\cyrkoppa": "ҁ",
+	"\\cyrchar\\cyrthousands": "҂",
+	"\\cyrchar\\cyrhundredthousands": "҈",
+	"\\cyrchar\\cyrmillions": "҉",
+	"\\cyrchar\\CYRSEMISFTSN": "Ҍ",
+	"\\cyrchar\\cyrsemisftsn": "ҍ",
+	"\\cyrchar\\CYRRTICK": "Ҏ",
+	"\\cyrchar\\cyrrtick": "ҏ",
+	"\\cyrchar\\CYRGUP": "Ґ",
+	"\\cyrchar\\cyrgup": "ґ",
+	"\\cyrchar\\CYRGHCRS": "Ғ",
+	"\\cyrchar\\cyrghcrs": "ғ",
+	"\\cyrchar\\CYRGHK": "Ҕ",
+	"\\cyrchar\\cyrghk": "ҕ",
+	"\\cyrchar\\CYRZHDSC": "Җ",
+	"\\cyrchar\\cyrzhdsc": "җ",
+	"\\cyrchar\\CYRZDSC": "Ҙ",
+	"\\cyrchar\\cyrzdsc": "ҙ",
+	"\\cyrchar\\CYRKDSC": "Қ",
+	"\\cyrchar\\cyrkdsc": "қ",
+	"\\cyrchar\\CYRKVCRS": "Ҝ",
+	"\\cyrchar\\cyrkvcrs": "ҝ",
+	"\\cyrchar\\CYRKHCRS": "Ҟ",
+	"\\cyrchar\\cyrkhcrs": "ҟ",
+	"\\cyrchar\\CYRKBEAK": "Ò ",
+	"\\cyrchar\\cyrkbeak": "ÒĄ",
+	"\\cyrchar\\CYRNDSC": "Òą",
+	"\\cyrchar\\cyrndsc": "ÒŁ",
+	"\\cyrchar\\CYRNG": "Ò€",
+	"\\cyrchar\\cyrng": "Ò„",
+	"\\cyrchar\\CYRPHK": "ÒŠ",
+	"\\cyrchar\\cyrphk": "Ò§",
+	"\\cyrchar\\CYRABHHA": "Òš",
+	"\\cyrchar\\cyrabhha": "Ò©",
+	"\\cyrchar\\CYRSDSC": "ÒȘ",
+	"\\cyrchar\\cyrsdsc": "Ò«",
+	"\\cyrchar\\CYRTDSC": "ÒŹ",
+	"\\cyrchar\\cyrtdsc": "Ò­",
+	"\\cyrchar\\CYRY": "Òź",
+	"\\cyrchar\\cyry": "ÒŻ",
+	"\\cyrchar\\CYRYHCRS": "Ò°",
+	"\\cyrchar\\cyryhcrs": "Ò±",
+	"\\cyrchar\\CYRHDSC": "ÒČ",
+	"\\cyrchar\\cyrhdsc": "Òł",
+	"\\cyrchar\\CYRTETSE": "ÒŽ",
+	"\\cyrchar\\cyrtetse": "Ò”",
+	"\\cyrchar\\CYRCHRDSC": "Ò¶",
+	"\\cyrchar\\cyrchrdsc": "Ò·",
+	"\\cyrchar\\CYRCHVCRS": "Òž",
+	"\\cyrchar\\cyrchvcrs": "Òč",
+	"\\cyrchar\\CYRSHHA": "Òș",
+	"\\cyrchar\\cyrshha": "Ò»",
+	"\\cyrchar\\CYRABHCH": "Ҍ",
+	"\\cyrchar\\cyrabhch": "Ҝ",
+	"\\cyrchar\\CYRABHCHDSC": "ÒŸ",
+	"\\cyrchar\\cyrabhchdsc": "Òż",
+	"\\cyrchar\\CYRpalochka": "Ӏ",
+	"\\cyrchar\\CYRKHK": "Ӄ",
+	"\\cyrchar\\cyrkhk": "ӄ",
+	"\\cyrchar\\CYRNHK": "Ӈ",
+	"\\cyrchar\\cyrnhk": "ӈ",
+	"\\cyrchar\\CYRCHLDSC": "Ӌ",
+	"\\cyrchar\\cyrchldsc": "ӌ",
+	"\\cyrchar\\CYRAE": "Ӕ",
+	"\\cyrchar\\cyrae": "ӕ",
+	"\\cyrchar\\CYRSCHWA": "Ә",
+	"\\cyrchar\\cyrschwa": "ә",
+	"\\cyrchar\\CYRABHDZE": "Ó ",
+	"\\cyrchar\\cyrabhdze": "ÓĄ",
+	"\\cyrchar\\CYROTLD": "Óš",
+	"\\cyrchar\\cyrotld": "Ó©",
+	"\\\\backslash": "àĄ±",
+	"\\textsuperscript{a}": "ᔃ",
+	"^{a}": "ᔃ",
+	"\\textsuperscript{b}": "ᔇ",
+	"^{b}": "ᔇ",
+	"\\textsuperscript{d}": "ᔈ",
+	"^{d}": "ᔈ",
+	"\\textsuperscript{e}": "ᔉ",
+	"^{e}": "ᔉ",
+	"\\textsuperscript{g}": "ᔍ",
+	"^{g}": "ᔍ",
+	"\\textsuperscript{k}": "ᔏ",
+	"^{k}": "ᔏ",
+	"\\textsuperscript{m}": "ᔐ",
+	"^{m}": "ᔐ",
+	"\\textsuperscript{o}": "á”’",
+	"^{o}": "á”’",
+	"\\textsuperscript{p}": "á”–",
+	"^{p}": "á”–",
+	"\\textsuperscript{t}": "á”—",
+	"^{t}": "á”—",
+	"\\textsuperscript{u}": "ᔘ",
+	"^{u}": "ᔘ",
+	"\\textsuperscript{v}": "á”›",
+	"^{v}": "á”›",
+	"\\textsuperscript{c}": "ᶜ",
+	"^{c}": "ᶜ",
+	"\\textsuperscript{f}": "ᶠ",
+	"^{f}": "ᶠ",
+	"\\textsuperscript{z}": "ᶻ",
+	"^{z}": "ᶻ",
+	"\\.B": "ᾂ",
+	"\\.b": "ឃ",
+	"\\d{B}": "ᾄ",
+	"\\d{b}": "ᾅ",
+	"\\b{B}": "ᾆ",
+	"\\b{b}": "ᾇ",
+	"\\.D": "ᾊ",
+	"\\.d": "ᾋ",
+	"\\d{D}": "ᾌ",
+	"\\d{d}": "ឍ",
+	"\\b{D}": "ᾎ",
+	"\\b{d}": "ត",
+	"\\c{D}": "ថ",
+	"\\c{d}": "ᾑ",
+	"\\c{\\u{E}}": "ᾜ",
+	"\\c{\\u{e}}": "ឝ",
+	"\\.F": "ᾞ",
+	"\\.f": "ᾟ",
+	"\\=G": "áž ",
+	"\\=g": "ឥ",
+	"\\.H": "ážą",
+	"\\.h": "ឣ",
+	"\\d{H}": "ក",
+	"\\d{h}": "áž„",
+	"\\\"H": "ដ",
+	"\\\"h": "ឧ",
+	"\\c{H}": "ážš",
+	"\\c{h}": "áž©",
+	"\\'K": "áž°",
+	"\\'k": "áž±",
+	"\\d{K}": "ážČ",
+	"\\d{k}": "ážł",
+	"\\b{K}": "ណ",
+	"\\b{k}": "áž”",
+	"\\d{L}": "ា",
+	"\\d{l}": "áž·",
+	"\\b{L}": "ážș",
+	"\\b{l}": "áž»",
+	"\\'M": "ស",
+	"\\'m": "ážż",
+	"\\.M": "áč€",
+	"\\.m": "áč",
+	"\\d{M}": "áč‚",
+	"\\d{m}": "áčƒ",
+	"\\.N": "áč„",
+	"\\.n": "áč…",
+	"\\d{N}": "áč†",
+	"\\d{n}": "áč‡",
+	"\\b{N}": "áčˆ",
+	"\\b{n}": "áč‰",
+	"\\'P": "áč”",
+	"\\'p": "áč•",
+	"\\.P": "áč–",
+	"\\.p": "áč—",
+	"\\.R": "áč˜",
+	"\\.r": "áč™",
+	"\\d{R}": "áčš",
+	"\\d{r}": "áč›",
+	"\\b{R}": "áčž",
+	"\\b{r}": "áčŸ",
+	"\\.S": "áč ",
+	"\\.s": "áčĄ",
+	"\\d{S}": "áčą",
+	"\\d{s}": "áčŁ",
+	"\\.T": "áčȘ",
+	"\\.t": "áč«",
+	"\\d{T}": "áčŹ",
+	"\\d{t}": "áč­",
+	"\\b{T}": "áčź",
+	"\\b{t}": "áčŻ",
+	"\\~V": "áčŒ",
+	"\\~v": "áčœ",
+	"\\d{V}": "áčŸ",
+	"\\d{v}": "áčż",
+	"\\`W": "áș€",
+	"\\`w": "áș",
+	"\\'W": "áș‚",
+	"\\'w": "áșƒ",
+	"\\\"W": "áș„",
+	"\\\"w": "áș…",
+	"\\.W": "áș†",
+	"\\.w": "áș‡",
+	"\\d{W}": "áșˆ",
+	"\\d{w}": "áș‰",
+	"\\.X": "áșŠ",
+	"\\.x": "áș‹",
+	"\\\"X": "áșŒ",
+	"\\\"x": "áș",
+	"\\.Y": "áșŽ",
+	"\\.y": "áș",
+	"\\^Z": "áș",
+	"\\^z": "áș‘",
+	"\\d{Z}": "áș’",
+	"\\d{z}": "áș“",
+	"\\b{Z}": "áș”",
+	"\\b{z}": "áș•",
+	"\\b{h}": "áș–",
+	"\\\"t": "áș—",
+	"\\r{w}": "áș˜",
+	"\\r{y}": "áș™",
+	"\\d{A}": "áș ",
+	"\\d{a}": "áșĄ",
+	"\\d{E}": "áșž",
+	"\\d{e}": "áșč",
+	"\\~E": "áșŒ",
+	"\\~e": "áșœ",
+	"\\d{I}": "Ị",
+	"\\d{i}": "ị",
+	"\\d{O}": "Ọ",
+	"\\d{o}": "ọ",
+	"\\d{U}": "Ề",
+	"\\d{u}": "Ễ",
+	"\\`Y": "á»Č",
+	"\\`y": "ỳ",
+	"\\d{Y}": "Ỏ",
+	"\\d{y}": "á»”",
+	"\\~Y": "Ở",
+	"\\~y": "á»č",
+	"\\hspace{0.6em}": " ",
+	"\\hspace{1em}": " ",
+	"\\quad": " ",
+	"\\;": " ",
+	"\\hspace{0.25em}": " ",
+	"\\hspace{0.166em}": " ",
+	"\\hphantom{0}": " ",
+	"\\hphantom{,}": " ",
+	"\\,": " ",
+	"\\mkern1mu": " ",
+	"\\mbox": "​",
+	"{\\aftergroup\\ignorespaces}": "‌",
+	"\\textendash": "–",
+	"\\textemdash": "—",
+	"\\rule{1em}{1pt}": "―",
+	"\\horizbar": "―",
+	"\\Vert": "‖",
+	"\\twolowline": "‗",
+	"\\textquoteleft": "‘",
+	"\\textquoteright": "’",
+	"\\Elzreapos": "‛",
+	"\\textquotedblleft": "“",
+	"\\textquotedblright": "”",
+	"\\quotedblbase": "‟",
+	"\\textdagger": "†",
+	"\\dagger": "†",
+	"\\textdaggerdbl": "‡",
+	"\\ddagger": "‡",
+	"\\textbullet": "‱",
+	"\\enleadertwodots": " ",
+	"\\ldots": "
",
+	"\\textperthousand": "‰",
+	"\\textpertenthousand": "‱",
+	"{'}": "â€Č",
+	"{''}": "″",
+	"{'''}": "‮",
+	"\\backprime": "—",
+	"\\backdprime": "‶",
+	"\\backtrprime": "‷",
+	"\\caretinsert": "‾",
+	"\\guilsinglleft": "â€č",
+	"\\guilsinglright": "â€ș",
+	"\\Exclam": "‌",
+	"\\hyphenbullet": "⁃",
+	"\\fracslash": "⁄",
+	"\\Question": "⁇",
+	"\\closure": "⁐",
+	"\\:": " ",
+	"\\nolinebreak": "⁠",
+	"^{0}": "⁰",
+	"\\textsuperscript{i}": "ⁱ",
+	"^{i}": "ⁱ",
+	"^{4}": "⁎",
+	"^{5}": "⁔",
+	"^{6}": "⁶",
+	"^{7}": "⁷",
+	"^{8}": "⁞",
+	"^{9}": "âč",
+	"^{+}": "âș",
+	"^{-}": "⁻",
+	"^{=}": "⁌",
+	"^{(}": "⁜",
+	"^{)}": " ",
+	"\\textsuperscript{n}": "ⁿ",
+	"^{n}": "ⁿ",
+	"_{0}": "₀",
+	"_{1}": "₁",
+	"_{2}": "₂",
+	"_{3}": "₃",
+	"_{4}": "₄",
+	"_{5}": "₅",
+	"_{6}": "₆",
+	"_{7}": "₇",
+	"_{8}": "₈",
+	"_{9}": "₉",
+	"_{+}": "₊",
+	"_{-}": "₋",
+	"_{=}": "₌",
+	"_{(}": "₍",
+	"_{)}": "₎",
+	"\\textsubscript{a}": "ₐ",
+	"_{a}": "ₐ",
+	"\\textsubscript{e}": "ₑ",
+	"_{e}": "ₑ",
+	"\\textsubscript{o}": "ₒ",
+	"_{o}": "ₒ",
+	"\\textsubscript{x}": "ₓ",
+	"_{x}": "ₓ",
+	"\\textsubscript{\\textschwa}": "ₔ",
+	"\\textsubscript{h}": "ₕ",
+	"_{h}": "ₕ",
+	"\\textsubscript{k}": "ₖ",
+	"_{k}": "ₖ",
+	"\\textsubscript{l}": "ₗ",
+	"_{l}": "ₗ",
+	"\\textsubscript{m}": "ₘ",
+	"_{m}": "ₘ",
+	"\\textsubscript{n}": "ₙ",
+	"_{n}": "ₙ",
+	"\\textsubscript{p}": "ₚ",
+	"_{p}": "ₚ",
+	"\\textsubscript{s}": "ₛ",
+	"_{s}": "ₛ",
+	"\\textsubscript{t}": "ₜ",
+	"_{t}": "ₜ",
+	"\\ensuremath{\\Elzpes}": "₧",
+	"\\texteuro": "€",
+	"\\euro": "€",
+	"\\lvec": "⃐",
+	"\\vertoverlay": "⃒",
+	"\\LVec": "⃖",
+	"\\vec": "⃗",
+	"\\dddot": "⃛",
+	"\\ddddot": "⃜",
+	"\\enclosecircle": "⃝",
+	"\\enclosesquare": "⃞",
+	"\\enclosediamond": "⃟",
+	"\\overleftrightarrow": "⃥",
+	"\\enclosetriangle": "⃀",
+	"\\annuity": "⃧",
+	"\\threeunderdot": "⃚",
+	"\\widebridgeabove": "⃩",
+	"\\underrightharpoondown": "⃏",
+	"\\underleftharpoondown": "⃭",
+	"\\underleftarrow": "⃟",
+	"\\underrightarrow": "⃯",
+	"\\asteraccent": "⃰",
+	"\\mathbb{C}": "ℂ",
+	"\\textcelsius": "℃",
+	"\\Euler": "ℇ",
+	"\\mathscr{g}": "ℊ",
+	"\\mathscr{H}": "ℋ",
+	"\\mathfrak{H}": "ℌ",
+	"\\mathbb{H}": "ℍ",
+	"\\Planckconst": "ℎ",
+	"\\hslash": "ℏ",
+	"\\mathscr{I}": "ℐ",
+	"\\mathfrak{I}": "ℑ",
+	"\\mathscr{L}": "ℒ",
+	"\\mathscr{l}": "ℓ",
+	"\\mathbb{N}": "ℕ",
+	"\\cyrchar\\textnumero": "№",
+	"\\textcircledP": "℗",
+	"\\wp": "℘",
+	"\\mathbb{P}": "ℙ",
+	"\\mathbb{Q}": "ℚ",
+	"\\mathscr{R}": "ℛ",
+	"\\mathfrak{R}": "ℜ",
+	"\\mathbb{R}": "ℝ",
+	"\\Elzxrat": "℞",
+	"\\textservicemark": "℠",
+	"\\texttrademark": "ℱ",
+	"\\mathbb{Z}": "â„€",
+	"\\mho": "℧",
+	"\\mathfrak{Z}": "ℹ",
+	"\\textriota": "℩",
+	"\\Angstroem": "Å",
+	"\\mathscr{B}": "ℬ",
+	"\\mathfrak{C}": "ℭ",
+	"\\textestimated": "ℼ",
+	"\\mathscr{e}": "ℯ",
+	"\\mathscr{E}": "ℰ",
+	"\\mathscr{F}": "ℱ",
+	"\\Finv": "â„Č",
+	"\\mathscr{M}": "ℳ",
+	"\\mathscr{o}": "℮",
+	"\\aleph": "â„”",
+	"\\beth": "ℶ",
+	"\\gimel": "ℷ",
+	"\\daleth": "ℾ",
+	"\\mathbb{\\pi}": "ℌ",
+	"\\mathbb{\\gamma}": "ℜ",
+	"\\mathbb{\\Gamma}": "â„Ÿ",
+	"\\mathbb{\\Pi}": "ℿ",
+	"\\mathbb{\\Sigma}": "⅀",
+	"\\Game": "⅁",
+	"\\sansLturned": "⅂",
+	"\\sansLmirrored": "⅃",
+	"\\Yup": "⅄",
+	"\\CapitalDifferentialD": "ⅅ",
+	"\\DifferentialD": "ⅆ",
+	"\\ExponetialE": "ⅇ",
+	"\\ComplexI": "ⅈ",
+	"\\ComplexJ": "ⅉ",
+	"\\PropertyLine": "⅊",
+	"\\invamp": "⅋",
+	"\\frac{1}{7}": "⅐",
+	"\\textfrac{1}{7}": "⅐",
+	"\\frac{1}{9}": "⅑",
+	"\\textfrac{1}{9}": "⅑",
+	"\\frac{1}{10}": "⅒",
+	"\\textfrac{1}{10}": "⅒",
+	"\\frac{1}{3}": "⅓",
+	"\\textfrac{1}{3}": "⅓",
+	"\\frac{2}{3}": "⅔",
+	"\\textfrac{2}{3}": "⅔",
+	"\\frac{1}{5}": "⅕",
+	"\\textfrac{1}{5}": "⅕",
+	"\\frac{2}{5}": "⅖",
+	"\\textfrac{2}{5}": "⅖",
+	"\\frac{3}{5}": "⅗",
+	"\\textfrac{3}{5}": "⅗",
+	"\\frac{4}{5}": "⅘",
+	"\\textfrac{4}{5}": "⅘",
+	"\\frac{1}{6}": "⅙",
+	"\\textfrac{1}{6}": "⅙",
+	"\\frac{5}{6}": "⅚",
+	"\\textfrac{5}{6}": "⅚",
+	"\\frac{1}{8}": "⅛",
+	"\\textfrac{1}{8}": "⅛",
+	"\\frac{3}{8}": "⅜",
+	"\\textfrac{3}{8}": "⅜",
+	"\\frac{5}{8}": "⅝",
+	"\\textfrac{5}{8}": "⅝",
+	"\\frac{7}{8}": "⅞",
+	"\\textfrac{7}{8}": "⅞",
+	"\\frac{1}": "⅟",
+	"\\textfrac{1}": "⅟",
+	"\\frac{0}{3}": "↉",
+	"\\textfrac{0}{3}": "↉",
+	"\\leftarrow": "←",
+	"\\uparrow": "↑",
+	"\\textrightarrow": "→",
+	"\\rightarrow": "→",
+	"\\to": "→",
+	"\\downarrow": "↓",
+	"\\leftrightarrow": "↔",
+	"\\updownarrow": "↕",
+	"\\nwarrow": "↖",
+	"\\nearrow": "↗",
+	"\\searrow": "↘",
+	"\\swarrow": "↙",
+	"\\nleftarrow": "↚",
+	"\\nrightarrow": "↛",
+	"\\arrowwaveleft": "↜",
+	"\\arrowwaveright": "↝",
+	"\\twoheadleftarrow": "↞",
+	"\\twoheaduparrow": "↟",
+	"\\twoheadrightarrow": "↠",
+	"\\twoheaddownarrow": "↡",
+	"\\leftarrowtail": "↱",
+	"\\rightarrowtail": "↣",
+	"\\mapsfrom": "ↀ",
+	"\\MapsUp": "ↄ",
+	"\\mapsto": "↩",
+	"\\MapsDown": "↧",
+	"\\updownarrowbar": "↹",
+	"\\hookleftarrow": "↩",
+	"\\hookrightarrow": "â†Ș",
+	"\\looparrowleft": "↫",
+	"\\looparrowright": "↬",
+	"\\leftrightsquigarrow": "↭",
+	"\\nleftrightarrow": "↼",
+	"\\lightning": "↯",
+	"\\Lsh": "↰",
+	"\\Rsh": "↱",
+	"\\dlsh": "â†Č",
+	"\\reflectbox{\\carriagereturn}": "↳",
+	"\\linefeed": "↮",
+	"\\carriagereturn": "↔",
+	"\\curvearrowleft": "↶",
+	"\\curvearrowright": "↷",
+	"\\barovernorthwestarrow": "↾",
+	"\\barleftarrowrightarrowba": "â†č",
+	"\\circlearrowleft": "â†ș",
+	"\\circlearrowright": "↻",
+	"\\leftharpoonup": "↌",
+	"\\leftharpoondown": "↜",
+	"\\upharpoonright": "↟",
+	"\\upharpoonleft": "↿",
+	"\\rightharpoonup": "⇀",
+	"\\rightharpoondown": "⇁",
+	"\\downharpoonright": "⇂",
+	"\\downharpoonleft": "⇃",
+	"\\rightleftarrows": "⇄",
+	"\\dblarrowupdown": "⇅",
+	"\\leftrightarrows": "⇆",
+	"\\leftleftarrows": "⇇",
+	"\\upuparrows": "⇈",
+	"\\rightrightarrows": "⇉",
+	"\\downdownarrows": "⇊",
+	"\\leftrightharpoons": "⇋",
+	"\\rightleftharpoons": "⇌",
+	"\\nLeftarrow": "⇍",
+	"\\nLeftrightarrow": "⇎",
+	"\\nRightarrow": "⇏",
+	"\\Leftarrow": "⇐",
+	"\\Uparrow": "⇑",
+	"\\Rightarrow": "⇒",
+	"\\Downarrow": "⇓",
+	"\\Leftrightarrow": "⇔",
+	"\\Updownarrow": "⇕",
+	"\\Nwarrow": "⇖",
+	"\\Nearrow": "⇗",
+	"\\Searrow": "⇘",
+	"\\Swarrow": "⇙",
+	"\\Lleftarrow": "⇚",
+	"\\Rrightarrow": "⇛",
+	"\\leftsquigarrow": "⇜",
+	"\\rightsquigarrow": "⇝",
+	"\\nHuparrow": "⇞",
+	"\\nHdownarrow": "⇟",
+	"\\dashleftarrow": "⇠",
+	"\\updasharrow": "⇡",
+	"\\dashrightarrow": "⇱",
+	"\\downdasharrow": "⇣",
+	"\\LeftArrowBar": "⇀",
+	"\\RightArrowBar": "⇄",
+	"\\leftwhitearrow": "⇩",
+	"\\upwhitearrow": "⇧",
+	"\\rightwhitearrow": "⇹",
+	"\\downwhitearrow": "⇩",
+	"\\whitearrowupfrombar": "â‡Ș",
+	"\\circleonrightarrow": "⇮",
+	"\\DownArrowUpArrow": "⇔",
+	"\\rightthreearrows": "⇶",
+	"\\nvleftarrow": "⇷",
+	"\\pfun": "⇾",
+	"\\nvleftrightarrow": "â‡č",
+	"\\nVleftarrow": "â‡ș",
+	"\\ffun": "⇻",
+	"\\nVleftrightarrow": "⇌",
+	"\\leftarrowtriangle": "⇜",
+	"\\rightarrowtriangle": "⇟",
+	"\\leftrightarrowtriangle": "⇿",
+	"\\forall": "∀",
+	"\\complement": "∁",
+	"\\partial": "∂",
+	"\\exists": "∃",
+	"\\nexists": "∄",
+	"\\varnothing": "∅",
+	"\\increment": "∆",
+	"\\nabla": "∇",
+	"\\in": "∈",
+	"\\not\\in": "∉",
+	"\\smallin": "∊",
+	"\\ni": "∋",
+	"\\not\\ni": "∌",
+	"\\smallni": "∍",
+	"\\QED": "∎",
+	"\\prod": "∏",
+	"\\coprod": "∐",
+	"\\sum": "∑",
+	"\\mp": "∓",
+	"\\dotplus": "∔",
+	"\\setminus": "∖",
+	"{_\\ast}": "∗",
+	"\\circ": "∘",
+	"\\bullet": "∙",
+	"\\surd": "√",
+	"\\sqrt[3]": "∛",
+	"\\sqrt[4]": "∜",
+	"\\propto": "∝",
+	"\\infty": "∞",
+	"\\rightangle": "∟",
+	"\\angle": "∠",
+	"\\measuredangle": "∥",
+	"\\sphericalangle": "∹",
+	"\\mid": "∣",
+	"\\nmid": "∀",
+	"\\parallel": "∄",
+	"\\nparallel": "∊",
+	"\\wedge": "∧",
+	"\\vee": "√",
+	"\\cap": "∩",
+	"\\cup": "âˆȘ",
+	"\\int": "∫",
+	"{\\int\\!\\int}": "∏",
+	"{\\int\\!\\int\\!\\int}": "∭",
+	"\\oint": "∟",
+	"\\surfintegral": "∯",
+	"\\volintegral": "∰",
+	"\\clwintegral": "∱",
+	"\\lcirclerightint": "âˆČ",
+	"\\rcirclerightint": "∳",
+	"\\therefore": "∎",
+	"\\because": "∔",
+	"\\Colon": "∷",
+	"\\dotdiv": "∞",
+	"\\eqcolon": "âˆč",
+	"\\mathbin{{:}\\!\\!{-}\\!\\!{:}}": "âˆș",
+	"\\homothetic": "∻",
+	"\\sim": "∌",
+	"\\backsim": "∜",
+	"\\lazysinv": "∟",
+	"\\AC": "∿",
+	"\\wr": "≀",
+	"\\not\\sim": "≁",
+	"\\texteqsim": "≂",
+	"\\NotEqualTilde": "≂̞",
+	"\\simeq": "≃",
+	"\\not\\simeq": "≄",
+	"\\cong": "≅",
+	"\\approxnotequal": "≆",
+	"\\not\\cong": "≇",
+	"\\approx": "≈",
+	"\\not\\approx": "≉",
+	"\\approxeq": "≊",
+	"\\tildetrpl": "≋",
+	"\\not\\apid": "≋̞",
+	"\\allequal": "≌",
+	"\\asymp": "≍",
+	"\\Bumpeq": "≎",
+	"\\NotHumpDownHump": "≎̞",
+	"\\bumpeq": "≏",
+	"\\NotHumpEqual": "≏̞",
+	"\\doteq": "≐",
+	"\\not\\doteq": "≐̞",
+	"\\doteqdot": "≑",
+	"\\fallingdotseq": "≒",
+	"\\risingdotseq": "≓",
+	"\\coloneq": "≔",
+	"\\eqcirc": "≖",
+	"\\circeq": "≗",
+	"\\arceq": "≘",
+	"\\estimates": "≙",
+	"\\starequal": "≛",
+	"\\triangleq": "≜",
+	"\\eqdef": "≝",
+	"\\measeq": "≞",
+	"\\neq": "≠",
+	"\\equiv": "≡",
+	"\\not\\equiv": "≱",
+	"\\Equiv": "≣",
+	"\\leq": "≀",
+	"\\le": "≀",
+	"\\geq": "≄",
+	"\\leqq": "≩",
+	"\\geqq": "≧",
+	"\\lneqq": "≹",
+	"\\lvertneqq": "≚",
+	"\\gneqq": "≩",
+	"\\gvertneqq": "≩",
+	"\\ll": "â‰Ș",
+	"\\NotLessLess": "â‰ȘÌž",
+	"\\gg": "≫",
+	"\\NotGreaterGreater": "≫̞",
+	"\\between": "≬",
+	"{\\not\\kern-0.3em\\times}": "≭",
+	"\\not<": "≼",
+	"\\not>": "≯",
+	"\\not\\leq": "≰",
+	"\\not\\geq": "≱",
+	"\\lessequivlnt": "â‰Č",
+	"\\greaterequivlnt": "≳",
+	"\\lessgtr": "≶",
+	"\\gtrless": "≷",
+	"\\notlessgreater": "≾",
+	"\\notgreaterless": "â‰č",
+	"\\prec": "â‰ș",
+	"\\succ": "≻",
+	"\\preccurlyeq": "≌",
+	"\\succcurlyeq": "≜",
+	"\\NotPrecedesTilde": "≟̞",
+	"\\NotSucceedsTilde": "â‰żÌž",
+	"\\not\\prec": "⊀",
+	"\\not\\succ": "⊁",
+	"\\subset": "⊂",
+	"\\supset": "⊃",
+	"\\not\\subset": "⊄",
+	"\\not\\supset": "⊅",
+	"\\subseteq": "⊆",
+	"\\supseteq": "⊇",
+	"\\not\\subseteq": "⊈",
+	"\\not\\supseteq": "⊉",
+	"\\subsetneq": "⊊",
+	"\\varsubsetneqq": "⊊",
+	"\\supsetneq": "⊋",
+	"\\varsupsetneq": "⊋",
+	"\\cupleftarrow": "⊌",
+	"\\cupdot": "⊍",
+	"\\uplus": "⊎",
+	"\\sqsubset": "⊏",
+	"\\NotSquareSubset": "⊏̞",
+	"\\sqsupset": "⊐",
+	"\\NotSquareSuperset": "⊐̞",
+	"\\sqsubseteq": "⊑",
+	"\\sqsupseteq": "⊒",
+	"\\sqcap": "⊓",
+	"\\sqcup": "⊔",
+	"\\oplus": "⊕",
+	"\\ominus": "⊖",
+	"\\otimes": "⊗",
+	"\\oslash": "⊘",
+	"\\odot": "⊙",
+	"\\circledcirc": "⊚",
+	"\\circledast": "⊛",
+	"\\circledequal": "⊜",
+	"\\circleddash": "⊝",
+	"\\boxplus": "⊞",
+	"\\boxminus": "⊟",
+	"\\boxtimes": "⊠",
+	"\\boxdot": "⊡",
+	"\\vdash": "⊱",
+	"\\dashv": "⊣",
+	"\\top": "⊀",
+	"\\assert": "⊩",
+	"\\truestate": "⊧",
+	"\\forcesextra": "⊹",
+	"\\Vdash": "⊩",
+	"\\Vvdash": "âŠȘ",
+	"\\VDash": "⊫",
+	"\\nvdash": "⊬",
+	"\\nvDash": "⊭",
+	"\\nVdash": "⊼",
+	"\\nVDash": "⊯",
+	"\\prurel": "⊰",
+	"\\scurel": "⊱",
+	"\\vartriangleleft": "âŠČ",
+	"\\vartriangleright": "⊳",
+	"\\trianglelefteq": "⊮",
+	"\\trianglerighteq": "⊔",
+	"\\original": "⊶",
+	"\\image": "⊷",
+	"\\multimap": "⊾",
+	"\\hermitconjmatrix": "âŠč",
+	"\\intercal": "âŠș",
+	"\\veebar": "⊻",
+	"\\barvee": "⊜",
+	"\\rightanglearc": "⊟",
+	"\\varlrtriangle": "⊿",
+	"\\bigcap": "⋂",
+	"\\bigcup": "⋃",
+	"\\diamond": "⋄",
+	"\\cdot": "⋅",
+	"\\star": "⋆",
+	"\\divideontimes": "⋇",
+	"\\bowtie": "⋈",
+	"\\ltimes": "⋉",
+	"\\rtimes": "⋊",
+	"\\leftthreetimes": "⋋",
+	"\\rightthreetimes": "⋌",
+	"\\backsimeq": "⋍",
+	"\\curlyvee": "⋎",
+	"\\curlywedge": "⋏",
+	"\\Subset": "⋐",
+	"\\Supset": "⋑",
+	"\\Cap": "⋒",
+	"\\Cup": "⋓",
+	"\\pitchfork": "⋔",
+	"\\hash": "⋕",
+	"\\lessdot": "⋖",
+	"\\gtrdot": "⋗",
+	"\\verymuchless": "⋘",
+	"\\verymuchgreater": "⋙",
+	"\\lesseqgtr": "⋚",
+	"\\gtreqless": "⋛",
+	"\\eqless": "⋜",
+	"\\eqgtr": "⋝",
+	"\\curlyeqprec": "⋞",
+	"\\curlyeqsucc": "⋟",
+	"\\npreceq": "⋠",
+	"\\nsucceq": "⋡",
+	"\\not\\sqsubseteq": "⋱",
+	"\\not\\sqsupseteq": "⋣",
+	"\\sqsubsetneq": "â‹€",
+	"\\Elzsqspne": "â‹„",
+	"\\lnsim": "⋩",
+	"\\gnsim": "⋧",
+	"\\precedesnotsimilar": "⋹",
+	"\\succnsim": "⋩",
+	"\\ntriangleleft": "â‹Ș",
+	"\\ntriangleright": "⋫",
+	"\\ntrianglelefteq": "⋬",
+	"\\ntrianglerighteq": "⋭",
+	"\\vdots": "⋼",
+	"\\cdots": "⋯",
+	"\\upslopeellipsis": "⋰",
+	"\\downslopeellipsis": "⋱",
+	"\\disin": "â‹Č",
+	"\\varisins": "⋳",
+	"\\isins": "⋮",
+	"\\isindot": "â‹”",
+	"\\barin": "⋶",
+	"\\isinobar": "⋷",
+	"\\isinvb": "⋾",
+	"\\isinE": "â‹č",
+	"\\nisd": "â‹ș",
+	"\\varnis": "⋻",
+	"\\nis": "⋌",
+	"\\varniobar": "⋜",
+	"\\niobar": "â‹Ÿ",
+	"\\bagmember": "⋿",
+	"\\diameter": "⌀",
+	"\\house": "⌂",
+	"\\barwedge": "⌅",
+	"\\varbarwedge": "⌅",
+	"\\perspcorrespond": "⌆",
+	"\\lceil": "⌈",
+	"\\rceil": "⌉",
+	"\\lfloor": "⌊",
+	"\\rfloor": "⌋",
+	"\\invneg": "⌐",
+	"\\wasylozenge": "⌑",
+	"\\profline": "⌒",
+	"\\profsurf": "⌓",
+	"\\recorder": "⌕",
+	"{\\mathchar\"2208}": "⌖",
+	"\\viewdata": "⌗",
+	"\\turnednot": "⌙",
+	"\\ulcorner": "⌜",
+	"\\urcorner": "⌝",
+	"\\llcorner": "⌞",
+	"\\lrcorner": "⌟",
+	"\\inttop": "⌠",
+	"\\intbottom": "⌡",
+	"\\frown": "⌱",
+	"\\smile": "⌣",
+	"\\varhexagonlrbonds": "⌬",
+	"\\conictaper": "âŒČ",
+	"\\topbot": "⌶",
+	"\\APLinv": "âŒč",
+	"\\notslash": "⌿",
+	"\\notbackslash": "⍀",
+	"\\APLleftarrowbox": "⍇",
+	"\\APLrightarrowbox": "⍈",
+	"\\invdiameter": "⍉",
+	"\\APLuparrowbox": "⍐",
+	"\\APLboxupcaret": "⍓",
+	"\\APLdownarrowbox": "⍗",
+	"\\APLcomment": "⍝",
+	"\\APLinput": "⍞",
+	"\\APLlog": "⍟",
+	"\\APLboxquestion": "⍰",
+	"\\rangledownzigzagarrow": "⍌",
+	"\\hexagon": "⎔",
+	"\\lparenuend": "⎛",
+	"\\lparenextender": "⎜",
+	"\\lparenlend": "⎝",
+	"\\rparenuend": "⎞",
+	"\\rparenextender": "⎟",
+	"\\rparenlend": "⎠",
+	"\\lbrackuend": "⎡",
+	"\\lbrackextender": "⎱",
+	"\\Elzdlcorn": "⎣",
+	"\\rbrackuend": "⎀",
+	"\\rbrackextender": "⎄",
+	"\\rbracklend": "⎊",
+	"\\lbraceuend": "⎧",
+	"\\lbracemid": "⎚",
+	"\\lbracelend": "⎩",
+	"\\vbraceextender": "âŽȘ",
+	"\\rbraceuend": "⎫",
+	"\\rbracemid": "⎬",
+	"\\rbracelend": "⎭",
+	"\\intextender": "⎼",
+	"\\harrowextender": "⎯",
+	"\\lmoustache": "⎰",
+	"\\rmoustache": "⎱",
+	"\\sumtop": "âŽČ",
+	"\\sumbottom": "⎳",
+	"\\overbracket": "⎮",
+	"\\underbracket": "⎔",
+	"\\bbrktbrk": "⎶",
+	"\\sqrtbottom": "⎷",
+	"\\lvboxline": "⎾",
+	"\\rvboxline": "âŽč",
+	"\\varcarriagereturn": "⏎",
+	"\\overparen": "⏜",
+	"\\underparen": "⏝",
+	"\\overbrace": "⏞",
+	"\\underbrace": "⏟",
+	"\\obrbrak": "⏠",
+	"\\ubrbrak": "⏡",
+	"\\trapezium": "⏱",
+	"\\benzenr": "⏣",
+	"\\strns": "⏀",
+	"\\fltns": "⏄",
+	"\\accurrent": "⏊",
+	"\\elinters": "⏧",
+	"\\textvisiblespace": "␣",
+	"\\ding{172}": "①",
+	"\\ding{173}": "②",
+	"\\ding{174}": "⑱",
+	"\\ding{175}": "④",
+	"\\ding{176}": "â‘€",
+	"\\ding{177}": "â‘„",
+	"\\ding{178}": "⑩",
+	"\\ding{179}": "⑧",
+	"\\ding{180}": "⑹",
+	"\\ding{181}": "⑩",
+	"\\circledS": "Ⓢ",
+	"\\Elzdshfnc": "┆",
+	"\\Elzsqfnw": "┙",
+	"\\diagup": "╱",
+	"\\blockuphalf": "▀",
+	"\\blocklowhalf": "▄",
+	"\\blockfull": "█",
+	"\\blocklefthalf": "▌",
+	"\\blockrighthalf": "▐",
+	"\\blockqtrshaded": "░",
+	"\\blockhalfshaded": "▒",
+	"\\blockthreeqtrshaded": "▓",
+	"\\ding{110}": "■",
+	"\\mdlgblksquare": "■",
+	"\\square": "□",
+	"\\Box": "□",
+	"\\squoval": "▱",
+	"\\blackinwhitesquare": "▣",
+	"\\squarehfill": "â–€",
+	"\\squarevfill": "â–„",
+	"\\squarehvfill": "▩",
+	"\\squarenwsefill": "▧",
+	"\\squareneswfill": "▹",
+	"\\squarecrossfill": "▩",
+	"\\smwhtsquare": "▫",
+	"\\hrectangleblack": "▬",
+	"\\fbox{~~}": "▭",
+	"\\vrectangleblack": "▼",
+	"\\Elzvrecto": "▯",
+	"\\parallelogramblack": "▰",
+	"\\ding{115}": "â–Č",
+	"\\bigblacktriangleup": "â–Č",
+	"\\bigtriangleup": "△",
+	"\\blacktriangle": "▮",
+	"\\vartriangle": "â–”",
+	"\\RHD": "▶",
+	"\\rhd": "▷",
+	"\\blacktriangleright": "▾",
+	"\\triangleright": "â–č",
+	"\\blackpointerright": "â–ș",
+	"\\whitepointerright": "▻",
+	"\\ding{116}": "▌",
+	"\\bigblacktriangledown": "▌",
+	"\\bigtriangledown": "▜",
+	"\\blacktriangledown": "â–Ÿ",
+	"\\triangledown": "▿",
+	"\\LHD": "◀",
+	"\\lhd": "◁",
+	"\\blacktriangleleft": "◂",
+	"\\triangleleft": "◃",
+	"\\blackpointerleft": "◄",
+	"\\whitepointerleft": "◅",
+	"\\ding{117}": "◆",
+	"\\Diamondblack": "◆",
+	"\\Diamond": "◇",
+	"\\blackinwhitediamond": "◈",
+	"\\fisheye": "◉",
+	"\\lozenge": "◊",
+	"\\dottedcircle": "◌",
+	"\\circlevertfill": "◍",
+	"\\bullseye": "◎",
+	"\\ding{108}": "●",
+	"\\CIRCLE": "●",
+	"\\Elzcirfl": "◐",
+	"\\Elzcirfr": "◑",
+	"\\Elzcirfb": "◒",
+	"\\circletophalfblack": "◓",
+	"\\circleurquadblack": "◔",
+	"\\blackcircleulquadwhite": "◕",
+	"\\LEFTCIRCLE": "◖",
+	"\\ding{119}": "◗",
+	"\\RIGHTCIRCLE": "◗",
+	"\\Elzrvbull": "◘",
+	"\\inversewhitecircle": "◙",
+	"\\invwhiteupperhalfcircle": "◚",
+	"\\invwhitelowerhalfcircle": "◛",
+	"\\ularc": "◜",
+	"\\urarc": "◝",
+	"\\lrarc": "◞",
+	"\\llarc": "◟",
+	"\\topsemicircle": "◠",
+	"\\botsemicircle": "◡",
+	"\\lrblacktriangle": "◱",
+	"\\llblacktriangle": "◣",
+	"\\ulblacktriangle": "â—€",
+	"\\urblacktriangle": "â—„",
+	"\\smwhtcircle": "◩",
+	"\\Elzsqfl": "◧",
+	"\\Elzsqfr": "◹",
+	"\\squareulblack": "◩",
+	"\\Elzsqfse": "â—Ș",
+	"\\boxbar": "◫",
+	"\\trianglecdot": "◬",
+	"\\triangleleftblack": "◭",
+	"\\trianglerightblack": "◼",
+	"\\bigcirc": "◯",
+	"\\squareulquad": "◰",
+	"\\squarellquad": "◱",
+	"\\squarelrquad": "â—Č",
+	"\\squareurquad": "◳",
+	"\\circleulquad": "◮",
+	"\\circlellquad": "â—”",
+	"\\circlelrquad": "◶",
+	"\\circleurquad": "◷",
+	"\\ultriangle": "◾",
+	"\\urtriangle": "â—č",
+	"\\lltriangle": "â—ș",
+	"\\mdsmwhtsquare": "◜",
+	"\\mdsmblksquare": "â—Ÿ",
+	"\\lrtriangle": "◿",
+	"\\ding{72}": "★",
+	"\\bigstar": "★",
+	"\\ding{73}": "☆",
+	"\\bigwhitestar": "☆",
+	"\\Sun": "☉",
+	"\\ding{37}": "☎",
+	"\\Square": "☐",
+	"\\CheckedBox": "☑",
+	"\\XBox": "☒",
+	"\\steaming": "☕",
+	"\\ding{42}": "☛",
+	"\\ding{43}": "☞",
+	"\\pointright": "☞",
+	"\\skull": "☠",
+	"\\danger": "☥",
+	"\\radiation": "☹",
+	"\\biohazard": "☣",
+	"\\yinyang": "☯",
+	"\\frownie": "â˜č",
+	"\\smiley": "â˜ș",
+	"\\blacksmiley": "☻",
+	"\\sun": "☌",
+	"\\rightmoon": "☜",
+	"\\leftmoon": "☟",
+	"\\mercury": "☿",
+	"\\venus": "♀",
+	"\\female": "♀",
+	"\\earth": "♁",
+	"\\male": "♂",
+	"\\jupiter": "♃",
+	"\\saturn": "♄",
+	"\\uranus": "♅",
+	"\\neptune": "♆",
+	"\\pluto": "♇",
+	"\\aries": "♈",
+	"\\taurus": "♉",
+	"\\gemini": "♊",
+	"\\cancer": "♋",
+	"\\leo": "♌",
+	"\\virgo": "♍",
+	"\\libra": "♎",
+	"\\scorpio": "♏",
+	"\\sagittarius": "♐",
+	"\\capricornus": "♑",
+	"\\aquarius": "♒",
+	"\\pisces": "♓",
+	"\\ding{171}": "♠",
+	"\\spadesuit": "♠",
+	"\\heartsuit": "♡",
+	"\\ding{168}": "♣",
+	"\\clubsuit": "♣",
+	"\\varspadesuit": "♀",
+	"\\ding{170}": "♄",
+	"\\varheartsuit": "♄",
+	"\\ding{169}": "♩",
+	"\\vardiamondsuit": "♩",
+	"\\varclubsuit": "♧",
+	"\\quarternote": "♩",
+	"\\eighthnote": "â™Ș",
+	"\\twonotes": "♫",
+	"\\sixteenthnote": "♬",
+	"\\flat": "♭",
+	"\\natural": "♼",
+	"\\sharp": "♯",
+	"\\recycle": "♻",
+	"\\acidfree": "♟",
+	"\\dicei": "⚀",
+	"\\diceii": "⚁",
+	"\\diceiii": "⚂",
+	"\\diceiv": "⚃",
+	"\\dicev": "⚄",
+	"\\dicevi": "⚅",
+	"\\circledrightdot": "⚆",
+	"\\circledtwodots": "⚇",
+	"\\blackcircledrightdot": "⚈",
+	"\\blackcircledtwodots": "⚉",
+	"\\anchor": "⚓",
+	"\\swords": "⚔",
+	"\\warning": "⚠",
+	"\\Hermaphrodite": "âš„",
+	"\\medcirc": "âšȘ",
+	"\\medbullet": "⚫",
+	"\\mdsmwhtcircle": "⚬",
+	"\\neuter": "âšČ",
+	"\\ding{33}": "✁",
+	"\\ding{34}": "✂",
+	"\\ding{35}": "✃",
+	"\\ding{36}": "✄",
+	"\\ding{38}": "✆",
+	"\\ding{39}": "✇",
+	"\\ding{40}": "✈",
+	"\\ding{41}": "✉",
+	"\\ding{44}": "✌",
+	"\\ding{45}": "✍",
+	"\\ding{46}": "✎",
+	"\\pencil": "✎",
+	"\\ding{47}": "✏",
+	"\\ding{48}": "✐",
+	"\\ding{49}": "✑",
+	"\\ding{50}": "✒",
+	"\\ding{51}": "✓",
+	"\\checkmark": "✓",
+	"\\ding{52}": "✔",
+	"\\ding{53}": "✕",
+	"\\ding{54}": "✖",
+	"\\ding{55}": "✗",
+	"\\ballotx": "✗",
+	"\\ding{56}": "✘",
+	"\\ding{57}": "✙",
+	"\\ding{58}": "✚",
+	"\\ding{59}": "✛",
+	"\\ding{60}": "✜",
+	"\\ding{61}": "✝",
+	"\\ding{62}": "✞",
+	"\\ding{63}": "✟",
+	"\\ding{64}": "✠",
+	"\\maltese": "✠",
+	"\\ding{65}": "✡",
+	"\\ding{66}": "✱",
+	"\\ding{67}": "✣",
+	"\\ding{68}": "✀",
+	"\\ding{69}": "✄",
+	"\\ding{70}": "✩",
+	"\\ding{71}": "✧",
+	"\\ding{74}": "âœȘ",
+	"\\circledstar": "âœȘ",
+	"\\ding{75}": "✫",
+	"\\ding{76}": "✬",
+	"\\ding{77}": "✭",
+	"\\ding{78}": "✼",
+	"\\ding{79}": "✯",
+	"\\ding{80}": "✰",
+	"\\ding{81}": "✱",
+	"\\ding{82}": "âœČ",
+	"\\ding{83}": "✳",
+	"\\ding{84}": "✮",
+	"\\ding{85}": "✔",
+	"\\ding{86}": "✶",
+	"\\varstar": "✶",
+	"\\ding{87}": "✷",
+	"\\ding{88}": "✾",
+	"\\ding{89}": "âœč",
+	"\\ding{90}": "âœș",
+	"\\ding{91}": "✻",
+	"\\ding{92}": "✌",
+	"\\ding{93}": "✜",
+	"\\dingasterisk": "✜",
+	"\\ding{94}": "✟",
+	"\\ding{95}": "✿",
+	"\\ding{96}": "❀",
+	"\\ding{97}": "❁",
+	"\\ding{98}": "❂",
+	"\\ding{99}": "❃",
+	"\\ding{100}": "❄",
+	"\\ding{101}": "❅",
+	"\\ding{102}": "❆",
+	"\\ding{103}": "❇",
+	"\\ding{104}": "❈",
+	"\\ding{105}": "❉",
+	"\\ding{106}": "❊",
+	"\\ding{107}": "❋",
+	"\\ding{109}": "❍",
+	"\\ding{111}": "❏",
+	"\\ding{112}": "❐",
+	"\\ding{113}": "❑",
+	"\\ding{114}": "❒",
+	"\\ding{118}": "❖",
+	"\\ding{120}": "❘",
+	"\\ding{121}": "❙",
+	"\\ding{122}": "❚",
+	"\\ding{123}": "❛",
+	"\\ding{124}": "❜",
+	"\\ding{125}": "❝",
+	"\\ding{126}": "❞",
+	"\\ding{161}": "❡",
+	"\\ding{162}": "❱",
+	"\\ding{163}": "❣",
+	"\\ding{164}": "❀",
+	"\\ding{165}": "❄",
+	"\\ding{166}": "❊",
+	"\\ding{167}": "❧",
+	"\\ding{182}": "❶",
+	"\\ding{183}": "❷",
+	"\\ding{184}": "❞",
+	"\\ding{185}": "âč",
+	"\\ding{186}": "âș",
+	"\\ding{187}": "❻",
+	"\\ding{188}": "❌",
+	"\\ding{189}": "❜",
+	"\\ding{190}": "❟",
+	"\\ding{191}": "❿",
+	"\\ding{192}": "➀",
+	"\\ding{193}": "➁",
+	"\\ding{194}": "➂",
+	"\\ding{195}": "➃",
+	"\\ding{196}": "➄",
+	"\\ding{197}": "➅",
+	"\\ding{198}": "➆",
+	"\\ding{199}": "➇",
+	"\\ding{200}": "➈",
+	"\\ding{201}": "➉",
+	"\\ding{202}": "➊",
+	"\\ding{203}": "➋",
+	"\\ding{204}": "➌",
+	"\\ding{205}": "➍",
+	"\\ding{206}": "➎",
+	"\\ding{207}": "➏",
+	"\\ding{208}": "➐",
+	"\\ding{209}": "➑",
+	"\\ding{210}": "➒",
+	"\\ding{211}": "➓",
+	"\\ding{212}": "➔",
+	"\\ding{216}": "➘",
+	"\\ding{217}": "➙",
+	"\\ding{218}": "➚",
+	"\\ding{219}": "➛",
+	"\\draftingarrow": "➛",
+	"\\ding{220}": "➜",
+	"\\ding{221}": "➝",
+	"\\ding{222}": "➞",
+	"\\ding{223}": "➟",
+	"\\ding{224}": "➠",
+	"\\ding{225}": "➡",
+	"\\ding{226}": "➱",
+	"\\arrowbullet": "➱",
+	"\\ding{227}": "➣",
+	"\\ding{228}": "➀",
+	"\\ding{229}": "➄",
+	"\\ding{230}": "➊",
+	"\\ding{231}": "➧",
+	"\\ding{232}": "➚",
+	"\\ding{233}": "➩",
+	"\\ding{234}": "âžȘ",
+	"\\ding{235}": "➫",
+	"\\ding{236}": "➬",
+	"\\ding{237}": "➭",
+	"\\ding{238}": "➼",
+	"\\ding{239}": "➯",
+	"\\ding{241}": "➱",
+	"\\ding{242}": "âžČ",
+	"\\ding{243}": "➳",
+	"\\ding{244}": "➮",
+	"\\ding{245}": "➔",
+	"\\ding{246}": "➶",
+	"\\ding{247}": "➷",
+	"\\ding{248}": "➾",
+	"\\ding{249}": "âžč",
+	"\\ding{250}": "âžș",
+	"\\ding{251}": "➻",
+	"\\ding{252}": "➌",
+	"\\ding{253}": "➜",
+	"\\ding{254}": "➟",
+	"\\threedangle": "⟀",
+	"\\whiteinwhitetriangle": "⟁",
+	"\\perp": "⟂",
+	"\\subsetcirc": "⟃",
+	"\\supsetcirc": "⟄",
+	"\\Lbag": "⟅",
+	"\\Rbag": "⟆",
+	"\\veedot": "⟇",
+	"\\bsolhsub": "⟈",
+	"\\suphsol": "⟉",
+	"\\longdivision": "⟌",
+	"\\Diamonddot": "⟐",
+	"\\wedgedot": "⟑",
+	"\\upin": "⟒",
+	"\\pullback": "⟓",
+	"\\pushout": "⟔",
+	"\\leftouterjoin": "⟕",
+	"\\rightouterjoin": "⟖",
+	"\\fullouterjoin": "⟗",
+	"\\bigbot": "⟘",
+	"\\bigtop": "⟙",
+	"\\DashVDash": "⟚",
+	"\\dashVdash": "⟛",
+	"\\multimapinv": "⟜",
+	"\\vlongdash": "⟝",
+	"\\longdashv": "⟞",
+	"\\cirbot": "⟟",
+	"\\lozengeminus": "⟠",
+	"\\concavediamond": "⟡",
+	"\\concavediamondtickleft": "⟱",
+	"\\concavediamondtickright": "⟣",
+	"\\whitesquaretickleft": "⟀",
+	"\\whitesquaretickright": "⟄",
+	"\\llbracket": "⟩",
+	"\\rrbracket": "⟧",
+	"\\langle": "⟹",
+	"\\rangle": "⟩",
+	"\\lang": "âŸȘ",
+	"\\rang": "⟫",
+	"\\Lbrbrak": "⟬",
+	"\\Rbrbrak": "⟭",
+	"\\lgroup": "⟼",
+	"\\rgroup": "⟯",
+	"\\UUparrow": "⟰",
+	"\\DDownarrow": "⟱",
+	"\\acwgapcirclearrow": "âŸČ",
+	"\\cwgapcirclearrow": "⟳",
+	"\\rightarrowonoplus": "⟮",
+	"\\longleftarrow": "⟔",
+	"\\longrightarrow": "⟶",
+	"\\longleftrightarrow": "⟷",
+	"\\Longleftarrow": "⟾",
+	"\\Longrightarrow": "âŸč",
+	"\\Longleftrightarrow": "âŸș",
+	"\\longmapsfrom": "⟻",
+	"\\longmapsto": "⟌",
+	"\\Longmapsfrom": "⟜",
+	"\\Longmapsto": "⟟",
+	"\\sim\\joinrel\\leadsto": "⟿",
+	"\\psur": " ",
+	"\\nVtwoheadrightarrow": " ",
+	"\\nvLeftarrow": " ",
+	"\\nvRightarrow": " ",
+	"\\nvLeftrightarrow": " ",
+	"\\Mapsfrom": " ",
+	"\\Mapsto": " ",
+	"\\downarrowbarred": " ",
+	"\\uparrowbarred": " ",
+	"\\Uuparrow": " ",
+	"\\Ddownarrow": "​",
+	"\\leftbkarrow": "‌",
+	"\\rightbkarrow": "‍",
+	"\\leftdbkarrow": "‎",
+	"\\dbkarow": "‏",
+	"\\drbkarow": "‐",
+	"\\rightdotarrow": "‑",
+	"\\UpArrowBar": "‒",
+	"\\DownArrowBar": "–",
+	"\\pinj": "—",
+	"\\finj": "―",
+	"\\bij": "‖",
+	"\\nvtwoheadrightarrowtail": "‗",
+	"\\nVtwoheadrightarrowtail": "‘",
+	"\\lefttail": "’",
+	"\\righttail": "‚",
+	"\\leftdbltail": "‛",
+	"\\rightdbltail": "“",
+	"\\diamondleftarrow": "”",
+	"\\rightarrowdiamond": "„",
+	"\\diamondleftarrowbar": "‟",
+	"\\barrightarrowdiamond": "†",
+	"\\nwsearrow": "‥",
+	"\\neswarrow": "‹",
+	"\\rdiagovfdiag": "‫",
+	"\\fdiagovrdiag": "‏",
+	"\\seovnearrow": "‭",
+	"\\neovsearrow": "‟",
+	"\\fdiagovnearrow": " ",
+	"\\rdiagovsearrow": "‰",
+	"\\neovnwarrow": "‱",
+	"\\nwovnearrow": "â€Č",
+	"\\uprightcurvearrow": "‎",
+	"\\downrightcurvedarrow": "—",
+	"\\cwrightarcarrow": "„",
+	"\\acwleftarcarrow": "â€č",
+	"\\acwoverarcarrow": "â€ș",
+	"\\acwunderarcarrow": "※",
+	"\\curvearrowrightminus": "‌",
+	"\\curvearrowleftplus": "“",
+	"\\cwundercurvearrow": "‟",
+	"\\ccwundercurvearrow": "‿",
+	"\\Elolarr": "â„€",
+	"\\Elorarr": "℁",
+	"\\ElzRlarr": "â„‚",
+	"\\leftarrowshortrightarrow": "℃",
+	"\\ElzrLarr": "â„„",
+	"\\rightarrowplus": "â„…",
+	"\\leftarrowplus": "℆",
+	"\\Elzrarrx": "ℇ",
+	"\\leftrightarrowcircle": "℈",
+	"\\twoheaduparrowcircle": "℉",
+	"\\leftrightharpoon": "â„Š",
+	"\\rightleftharpoon": "â„‹",
+	"\\updownharpoonrightleft": "ℌ",
+	"\\updownharpoonleftright": "ℍ",
+	"\\LeftRightVector": "ℎ",
+	"\\RightUpDownVector": "ℏ",
+	"\\DownLeftRightVector": "ℐ",
+	"\\LeftUpDownVector": "â„‘",
+	"\\LeftVectorBar": "â„’",
+	"\\RightVectorBar": "â„“",
+	"\\RightUpVectorBar": "â„”",
+	"\\RightDownVectorBar": "â„•",
+	"\\DownLeftVectorBar": "â„–",
+	"\\DownRightVectorBar": "â„—",
+	"\\LeftUpVectorBar": "℘",
+	"\\LeftDownVectorBar": "â„™",
+	"\\LeftTeeVector": "â„š",
+	"\\RightTeeVector": "â„›",
+	"\\RightUpTeeVector": "ℜ",
+	"\\RightDownTeeVector": "ℝ",
+	"\\DownLeftTeeVector": "℞",
+	"\\DownRightTeeVector": "â„Ÿ",
+	"\\LeftUpTeeVector": "â„ ",
+	"\\LeftDownTeeVector": "â„Ą",
+	"\\leftleftharpoons": "â„ą",
+	"\\upupharpoons": "â„Ł",
+	"\\rightrightharpoons": "â„€",
+	"\\downdownharpoons": "â„„",
+	"\\leftrightharpoonsup": "â„Š",
+	"\\leftrightharpoonsdown": "℧",
+	"\\rightleftharpoonsup": "â„š",
+	"\\rightleftharpoonsdown": "â„©",
+	"\\leftbarharpoon": "â„Ș",
+	"\\barleftharpoon": "â„«",
+	"\\rightbarharpoon": "â„Ź",
+	"\\barrightharpoon": "â„­",
+	"\\UpEquilibrium": "â„ź",
+	"\\ReverseUpEquilibrium": "â„Ż",
+	"\\RoundImplies": "â„°",
+	"\\equalrightarrow": "ℱ",
+	"\\similarrightarrow": "â„Č",
+	"\\leftarrowsimilar": "â„ł",
+	"\\rightarrowsimilar": "â„Ž",
+	"\\rightarrowapprox": "â„”",
+	"\\ltlarr": "ℶ",
+	"\\leftarrowless": "â„·",
+	"\\gtrarr": "â„ž",
+	"\\subrarr": "â„č",
+	"\\leftarrowsubset": "â„ș",
+	"\\suplarr": "â„»",
+	"\\upfishtail": "â„Ÿ",
+	"\\downfishtail": "â„ż",
+	"\\Elztfnc": "⩀",
+	"\\spot": "⊁",
+	"\\typecolon": "⩂",
+	"\\lBrace": "⊃",
+	"\\rBrace": "⩄",
+	"\\Elroang": "⩆",
+	"\\limg": "⩇",
+	"\\rimg": "⊈",
+	"\\lblot": "⩉",
+	"\\rblot": "⩊",
+	"\\lbrackubar": "⩋",
+	"\\rbrackubar": "⩌",
+	"\\lbrackultick": "⊍",
+	"\\rbracklrtick": "⊎",
+	"\\lbracklltick": "⊏",
+	"\\rbrackurtick": "⊐",
+	"\\langledot": "⩑",
+	"\\rangledot": "⩒",
+	"<\\kern-0.58em(": "⩓",
+	"\\Lparengtr": "⩕",
+	"\\Rparenless": "⩖",
+	"\\lblkbrbrak": "⩗",
+	"\\rblkbrbrak": "⊘",
+	"\\Elzddfnc": "⩙",
+	"\\vzigzag": "⩚",
+	"\\measuredangleleft": "⩛",
+	"\\Angle": "⩜",
+	"\\rightanglemdot": "⊝",
+	"\\angles": "⊞",
+	"\\angdnr": "⩟",
+	"\\Elzlpargt": "⊠",
+	"\\sphericalangleup": "⊥",
+	"\\turnangle": "⊹",
+	"\\revangle": "⊣",
+	"\\angleubar": "⊀",
+	"\\revangleubar": "⊄",
+	"\\wideangledown": "⊊",
+	"\\wideangleup": "⊧",
+	"\\measanglerutone": "⊚",
+	"\\measanglelutonw": "⊩",
+	"\\measanglerdtose": "âŠȘ",
+	"\\measangleldtosw": "⊫",
+	"\\measangleurtone": "⊏",
+	"\\measangleultonw": "⊭",
+	"\\measangledrtose": "⊟",
+	"\\measangledltosw": "⊯",
+	"\\revemptyset": "⊰",
+	"\\emptysetobar": "⊱",
+	"\\emptysetocirc": "âŠČ",
+	"\\emptysetoarr": "⊳",
+	"\\emptysetoarrl": "⊎",
+	"\\circledparallel": "⊷",
+	"\\circledbslash": "⊞",
+	"\\operp": "âŠč",
+	"\\obot": "âŠș",
+	"\\olcross": "⊻",
+	"\\odotslashdot": "⊌",
+	"\\uparrowoncircle": "⊜",
+	"\\circledwhitebullet": "⊟",
+	"\\circledbullet": "⊿",
+	"\\circledless": "⧀",
+	"\\circledgtr": "⧁",
+	"\\cirscir": "⧂",
+	"\\cirE": "⧃",
+	"\\boxslash": "⧄",
+	"\\boxbslash": "⧅",
+	"\\boxast": "⧆",
+	"\\boxcircle": "⧇",
+	"\\boxbox": "⧈",
+	"\\boxonbox": "⧉",
+	"\\ElzLap": "⧊",
+	"\\Elzdefas": "⧋",
+	"\\triangles": "⧌",
+	"\\triangleserifs": "⧍",
+	"\\rtriltri": "⧎",
+	"\\LeftTriangleBar": "⧏",
+	"\\NotLeftTriangleBar": "⧏̞",
+	"\\RightTriangleBar": "⧐",
+	"\\NotRightTriangleBar": "⧐̞",
+	"\\lfbowtie": "⧑",
+	"\\rfbowtie": "⧒",
+	"\\fbowtie": "⧓",
+	"\\lftimes": "⧔",
+	"\\rftimes": "⧕",
+	"\\hourglass": "⧖",
+	"\\blackhourglass": "⧗",
+	"\\lvzigzag": "⧘",
+	"\\rvzigzag": "⧙",
+	"\\Lvzigzag": "⧚",
+	"\\Rvzigzag": "⧛",
+	"\\tieinfty": "⧝",
+	"\\nvinfty": "⧞",
+	"\\multimapboth": "⧟",
+	"\\laplac": "⧠",
+	"\\lrtriangleeq": "⧥",
+	"\\shuffle": "⧹",
+	"\\eparsl": "⧣",
+	"\\smeparsl": "⧀",
+	"\\eqvparsl": "⧄",
+	"\\gleichstark": "⧊",
+	"\\thermod": "⧧",
+	"\\downtriangleleftblack": "⧚",
+	"\\downtrianglerightblack": "⧩",
+	"\\blackdiamonddownarrow": "â§Ș",
+	"\\blacklozenge": "⧫",
+	"\\circledownarrow": "⧏",
+	"\\blackcircledownarrow": "⧭",
+	"\\errbarsquare": "⧟",
+	"\\errbarblacksquare": "⧯",
+	"\\errbardiamond": "⧰",
+	"\\errbarblackdiamond": "⧱",
+	"\\errbarcircle": "â§Č",
+	"\\errbarblackcircle": "⧳",
+	"\\RuleDelayed": "⧎",
+	"\\dsol": "⧶",
+	"\\rsolbar": "⧷",
+	"\\xsol": "⧞",
+	"\\zhide": "â§č",
+	"\\doubleplus": "â§ș",
+	"\\tripleplus": "⧻",
+	"\\lcurvyangle": "⧌",
+	"\\rcurvyangle": "⧜",
+	"\\tplus": "⧟",
+	"\\tminus": "⧿",
+	"\\bigodot": "⹀",
+	"\\bigoplus": "⚁",
+	"\\bigotimes": "⹂",
+	"\\bigcupdot": "⚃",
+	"\\Elxuplus": "⹄",
+	"\\ElzThr": "⹅",
+	"\\Elxsqcup": "⹆",
+	"\\ElzInf": "⹇",
+	"\\ElzSup": "⚈",
+	"\\varprod": "⹉",
+	"\\modtwosum": "⹊",
+	"\\sumint": "⹋",
+	"\\iiiint": "⹌",
+	"\\ElzCint": "⚍",
+	"\\intBar": "⚎",
+	"\\clockoint": "⚏",
+	"\\awint": "⹑",
+	"\\rppolint": "⹒",
+	"\\scpolint": "⹓",
+	"\\npolint": "⹔",
+	"\\pointint": "⹕",
+	"\\sqrint": "⹖",
+	"\\intlarhk": "⹗",
+	"\\intx": "⚘",
+	"\\intcap": "⹙",
+	"\\intcup": "⹚",
+	"\\upint": "⹛",
+	"\\lowint": "⹜",
+	"\\Join": "⚝",
+	"\\bigtriangleleft": "⚞",
+	"\\zcmp": "⹟",
+	"\\zpipe": "âš ",
+	"\\zproject": "⚥",
+	"\\ringplus": "âšą",
+	"\\plushat": "⚣",
+	"\\simplus": "⚀",
+	"\\plussim": "⚊",
+	"\\plussubtwo": "⚧",
+	"\\plustrif": "âšš",
+	"\\commaminus": "âš©",
+	"\\minusfdots": "âš«",
+	"\\minusrdots": "⚏",
+	"\\ElzTimes": "⚯",
+	"\\dottimes": "âš°",
+	"\\timesbar": "âš±",
+	"\\btimes": "âšČ",
+	"\\smashtimes": "âšł",
+	"\\otimeshat": "⚶",
+	"\\Otimes": "âš·",
+	"\\odiv": "âšž",
+	"\\triangleplus": "âšč",
+	"\\triangleminus": "âšș",
+	"\\triangletimes": "âš»",
+	"\\intprodr": "⚜",
+	"\\fcmp": "⚟",
+	"\\amalg": "âšż",
+	"\\capdot": "⩀",
+	"\\uminus": "⩁",
+	"\\barcup": "⩂",
+	"\\barcap": "⩃",
+	"\\capwedge": "⩄",
+	"\\cupvee": "⩅",
+	"\\cupovercap": "⩆",
+	"\\capovercup": "⩇",
+	"\\cupbarcap": "⩈",
+	"\\capbarcup": "⩉",
+	"\\twocups": "⩊",
+	"\\twocaps": "⩋",
+	"\\closedvarcup": "⩌",
+	"\\closedvarcap": "⩍",
+	"\\Sqcap": "⩎",
+	"\\Sqcup": "⩏",
+	"\\closedvarcupsmashprod": "⩐",
+	"\\wedgeodot": "⩑",
+	"\\veeodot": "⩒",
+	"\\ElzAnd": "⩓",
+	"\\ElzOr": "⩔",
+	"\\ElOr": "⩖",
+	"\\bigslopedvee": "⩗",
+	"\\bigslopedwedge": "⩘",
+	"\\veeonwedge": "⩙",
+	"\\wedgemidvert": "⩚",
+	"\\veemidvert": "⩛",
+	"\\midbarwedge": "⩜",
+	"\\midbarvee": "⩝",
+	"\\Elzminhat": "⩟",
+	"\\wedgedoublebar": "â© ",
+	"\\varveebar": "â©Ą",
+	"\\doublebarvee": "â©ą",
+	"\\dsub": "â©€",
+	"\\rsub": "â©„",
+	"\\eqdot": "â©Š",
+	"\\dotequiv": "⩧",
+	"\\equivVert": "â©š",
+	"\\equivVvert": "â©©",
+	"\\dotsim": "â©Ș",
+	"\\simrdots": "â©«",
+	"\\simminussim": "â©Ź",
+	"\\congdot": "â©­",
+	"\\stackrel{*}{=}": "â©ź",
+	"\\hatapprox": "â©Ż",
+	"\\approxeqq": "â©°",
+	"\\eqqplus": "⩱",
+	"\\pluseqq": "â©Č",
+	"\\eqqsim": "â©ł",
+	"\\Coloneqq": "â©Ž",
+	"\\Equal": "â©”",
+	"\\Same": "⩶",
+	"\\ddotseq": "â©·",
+	"\\equivDD": "â©ž",
+	"\\ltcir": "â©č",
+	"\\gtcir": "â©ș",
+	"\\ltquest": "â©»",
+	"\\gtquest": "⩌",
+	"\\leqslant": "⩜",
+	"\\nleqslant": "⩜̞",
+	"\\geqslant": "â©Ÿ",
+	"\\ngeqslant": "â©ŸÌž",
+	"\\lesdot": "â©ż",
+	"\\gesdot": "âȘ€",
+	"\\lesdoto": "âȘ",
+	"\\gesdoto": "âȘ‚",
+	"\\lesdotor": "âȘƒ",
+	"\\gesdotol": "âȘ„",
+	"\\lessapprox": "âȘ…",
+	"\\gtrapprox": "âȘ†",
+	"\\lneq": "âȘ‡",
+	"\\gneq": "âȘˆ",
+	"\\lnapprox": "âȘ‰",
+	"\\gnapprox": "âȘŠ",
+	"\\lesseqqgtr": "âȘ‹",
+	"\\gtreqqless": "âȘŒ",
+	"\\lsime": "âȘ",
+	"\\gsime": "âȘŽ",
+	"\\lsimg": "âȘ",
+	"\\gsiml": "âȘ",
+	"\\lgE": "âȘ‘",
+	"\\glE": "âȘ’",
+	"\\lesges": "âȘ“",
+	"\\gesles": "âȘ”",
+	"\\eqslantless": "âȘ•",
+	"\\eqslantgtr": "âȘ–",
+	"\\elsdot": "âȘ—",
+	"\\egsdot": "âȘ˜",
+	"\\eqqless": "âȘ™",
+	"\\eqqgtr": "âȘš",
+	"\\eqqslantless": "âȘ›",
+	"\\eqqslantgtr": "âȘœ",
+	"\\Pisymbol{ppi020}{117}": "âȘ",
+	"\\Pisymbol{ppi020}{105}": "âȘž",
+	"\\simlE": "âȘŸ",
+	"\\simgE": "âȘ ",
+	"\\NestedLessLess": "âȘĄ",
+	"\\NotNestedLessLess": "âȘĄÌž",
+	"\\NestedGreaterGreater": "âȘą",
+	"\\NotNestedGreaterGreater": "âȘąÌž",
+	"\\partialmeetcontraction": "âȘŁ",
+	"\\glj": "âȘ€",
+	"\\gla": "âȘ„",
+	"\\leftslice": "âȘŠ",
+	"\\rightslice": "âȘ§",
+	"\\lescc": "âȘš",
+	"\\gescc": "âȘ©",
+	"\\smt": "âȘȘ",
+	"\\lat": "âȘ«",
+	"\\smte": "âȘŹ",
+	"\\late": "âȘ­",
+	"\\bumpeqq": "âȘź",
+	"\\preceq": "âȘŻ",
+	"\\not\\preceq": "âȘŻÌž",
+	"\\succeq": "âȘ°",
+	"\\not\\succeq": "âȘ°Ìž",
+	"\\precneq": "âȘ±",
+	"\\succneq": "âȘČ",
+	"\\preceqq": "âȘł",
+	"\\succeqq": "âȘŽ",
+	"\\precneqq": "âȘ”",
+	"\\succneqq": "âȘ¶",
+	"\\precapprox": "âȘ·",
+	"\\succapprox": "âȘž",
+	"\\precnapprox": "âȘč",
+	"\\succnapprox": "âȘș",
+	"\\llcurly": "âȘ»",
+	"\\ggcurly": "âȘŒ",
+	"\\subsetdot": "âȘœ",
+	"\\supsetdot": "âȘŸ",
+	"\\subsetplus": "âȘż",
+	"\\supsetplus": "⫀",
+	"\\submult": "⫁",
+	"\\supmult": "⫂",
+	"\\subedot": "⫃",
+	"\\supedot": "⫄",
+	"\\subseteqq": "⫅",
+	"\\nsubseteqq": "â«…Ìž",
+	"\\supseteqq": "⫆",
+	"\\nsupseteqq": "⫆̞",
+	"\\subsim": "⫇",
+	"\\supsim": "⫈",
+	"\\subsetapprox": "⫉",
+	"\\supsetapprox": "⫊",
+	"\\subsetneqq": "⫋",
+	"\\supsetneqq": "⫌",
+	"\\lsqhook": "⫍",
+	"\\rsqhook": "⫎",
+	"\\csub": "⫏",
+	"\\csup": "⫐",
+	"\\csube": "⫑",
+	"\\csupe": "⫒",
+	"\\subsup": "⫓",
+	"\\supsub": "⫔",
+	"\\subsub": "⫕",
+	"\\supsup": "⫖",
+	"\\suphsub": "⫗",
+	"\\supdsub": "⫘",
+	"\\forkv": "⫙",
+	"\\topfork": "⫚",
+	"\\mlcp": "⫛",
+	"\\forks": "⫝̸",
+	"\\forksnot": "⫝",
+	"\\shortlefttack": "⫞",
+	"\\shortdowntack": "⫟",
+	"\\shortuptack": "â« ",
+	"\\perps": "â«Ą",
+	"\\vDdash": "â«ą",
+	"\\dashV": "â«Ł",
+	"\\Dashv": "â«€",
+	"\\DashV": "â«„",
+	"\\varVdash": "â«Š",
+	"\\Barv": "⫧",
+	"\\vBar": "â«š",
+	"\\vBarv": "â«©",
+	"\\Top": "â«Ș",
+	"\\Not": "â«Ź",
+	"\\bNot": "â«­",
+	"\\revnmid": "â«ź",
+	"\\cirmid": "â«Ż",
+	"\\midcir": "â«°",
+	"\\topcir": "⫱",
+	"\\nhpar": "â«Č",
+	"\\parsim": "â«ł",
+	"\\interleave": "â«Ž",
+	"\\nhVvert": "â«”",
+	"\\Elztdcol": "⫶",
+	"\\lllnest": "â«·",
+	"\\gggnest": "â«ž",
+	"\\leqqslant": "â«č",
+	"\\geqqslant": "â«ș",
+	"\\trslash": "â«»",
+	"\\biginterleave": "⫌",
+	"{{/}\\!\\!{/}}": "⫝̸",
+	"{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}": "⫝̸⃄",
+	"\\talloblong": "â«Ÿ",
+	"\\bigtalloblong": "â«ż",
+	"\\squaretopblack": "⬒",
+	"\\squarebotblack": "⬓",
+	"\\squareurblack": "⬔",
+	"\\squarellblack": "⬕",
+	"\\diamondleftblack": "⬖",
+	"\\diamondrightblack": "⬗",
+	"\\diamondtopblack": "⏘",
+	"\\diamondbotblack": "⬙",
+	"\\dottedsquare": "⬚",
+	"\\blacksquare": "⬛",
+	"\\vysmblksquare": "⬝",
+	"\\vysmwhtsquare": "⬞",
+	"\\pentagonblack": "⬟",
+	"\\pentagon": "⏠",
+	"\\varhexagon": "⏥",
+	"\\varhexagonblack": "⏹",
+	"\\hexagonblack": "⏣",
+	"\\lgblkcircle": "⏀",
+	"\\mdblkdiamond": "⏄",
+	"\\mdwhtdiamond": "⏊",
+	"\\mdblklozenge": "⏧",
+	"\\mdwhtlozenge": "⏚",
+	"\\smblkdiamond": "⏩",
+	"\\smblklozenge": "âŹȘ",
+	"\\smwhtlozenge": "⏫",
+	"\\blkhorzoval": "⏏",
+	"\\whthorzoval": "⏭",
+	"\\blkvertoval": "⏟",
+	"\\whtvertoval": "⏯",
+	"\\circleonleftarrow": "⏰",
+	"\\leftthreearrows": "⏱",
+	"\\leftarrowonoplus": "âŹČ",
+	"\\longleftsquigarrow": "⏳",
+	"\\nvtwoheadleftarrow": "⏎",
+	"\\nVtwoheadleftarrow": "⏔",
+	"\\twoheadmapsfrom": "⏶",
+	"\\twoheadleftdbkarrow": "⏷",
+	"\\leftdotarrow": "⏞",
+	"\\nvleftarrowtail": "âŹč",
+	"\\nVleftarrowtail": "âŹș",
+	"\\twoheadleftarrowtail": "⏻",
+	"\\nvtwoheadleftarrowtail": "âŹŒ",
+	"\\nVtwoheadleftarrowtail": "âŹœ",
+	"\\leftarrowx": "âŹŸ",
+	"\\leftcurvedarrow": "⏿",
+	"\\equalleftarrow": "⭀",
+	"\\bsimilarleftarrow": "⭁",
+	"\\leftarrowbackapprox": "⭂",
+	"\\rightarrowgtr": "⭃",
+	"\\rightarrowsupset": "⭄",
+	"\\LLeftarrow": "⭅",
+	"\\RRightarrow": "⭆",
+	"\\bsimilarrightarrow": "⭇",
+	"\\rightarrowbackapprox": "⭈",
+	"\\similarleftarrow": "⭉",
+	"\\leftarrowapprox": "⭊",
+	"\\leftarrowbsimilar": "⭋",
+	"\\rightarrowbsimilar": "⭌",
+	"\\medwhitestar": "⭐",
+	"\\medblackstar": "⭑",
+	"\\smwhitestar": "⭒",
+	"\\rightpentagonblack": "⭓",
+	"\\rightpentagon": "⭔",
+	"\\postalmark": "〒",
+	"\\lbrbrak": "〔",
+	"\\rbrbrak": "〕",
+	"\\openbracketleft": "〚",
+	"\\openbracketright": "〛",
+	"\\hzigzag": "〰",
+	"\\dbend": "ïżœ",
+	"\\mathbf{A}": "𝐀",
+	"\\mathbf{B}": "𝐁",
+	"\\mathbf{C}": "𝐂",
+	"\\mathbf{D}": "𝐃",
+	"\\mathbf{E}": "𝐄",
+	"\\mathbf{F}": "𝐅",
+	"\\mathbf{G}": "𝐆",
+	"\\mathbf{H}": "𝐇",
+	"\\mathbf{I}": "𝐈",
+	"\\mathbf{J}": "𝐉",
+	"\\mathbf{K}": "𝐊",
+	"\\mathbf{L}": "𝐋",
+	"\\mathbf{M}": "𝐌",
+	"\\mathbf{N}": "𝐍",
+	"\\mathbf{O}": "𝐎",
+	"\\mathbf{P}": "𝐏",
+	"\\mathbf{Q}": "𝐐",
+	"\\mathbf{R}": "𝐑",
+	"\\mathbf{S}": "𝐒",
+	"\\mathbf{T}": "𝐓",
+	"\\mathbf{U}": "𝐔",
+	"\\mathbf{V}": "𝐕",
+	"\\mathbf{W}": "𝐖",
+	"\\mathbf{X}": "𝐗",
+	"\\mathbf{Y}": "𝐘",
+	"\\mathbf{Z}": "𝐙",
+	"\\mathbf{a}": "𝐚",
+	"\\mathbf{b}": "𝐛",
+	"\\mathbf{c}": "𝐜",
+	"\\mathbf{d}": "𝐝",
+	"\\mathbf{e}": "𝐞",
+	"\\mathbf{f}": "𝐟",
+	"\\mathbf{g}": "𝐠",
+	"\\mathbf{h}": "𝐡",
+	"\\mathbf{i}": "𝐱",
+	"\\mathbf{j}": "𝐣",
+	"\\mathbf{k}": "đ€",
+	"\\mathbf{l}": "đ„",
+	"\\mathbf{m}": "𝐩",
+	"\\mathbf{n}": "𝐧",
+	"\\mathbf{o}": "𝐹",
+	"\\mathbf{p}": "đ©",
+	"\\mathbf{q}": "đȘ",
+	"\\mathbf{r}": "đ«",
+	"\\mathbf{s}": "𝐬",
+	"\\mathbf{t}": "𝐭",
+	"\\mathbf{u}": "𝐼",
+	"\\mathbf{v}": "𝐯",
+	"\\mathbf{w}": "𝐰",
+	"\\mathbf{x}": "đ±",
+	"\\mathbf{y}": "đČ",
+	"\\mathbf{z}": "𝐳",
+	"\\mathsl{A}": "𝐮",
+	"\\mathsl{B}": "đ”",
+	"\\mathsl{C}": "đ¶",
+	"\\mathsl{D}": "đ·",
+	"\\mathsl{E}": "𝐾",
+	"\\mathsl{F}": "đč",
+	"\\mathsl{G}": "đș",
+	"\\mathsl{H}": "đ»",
+	"\\mathsl{I}": "đŒ",
+	"\\mathsl{J}": "đœ",
+	"\\mathsl{K}": "đŸ",
+	"\\mathsl{L}": "𝐿",
+	"\\mathsl{M}": "𝑀",
+	"\\mathsl{N}": "𝑁",
+	"\\mathsl{O}": "𝑂",
+	"\\mathsl{P}": "𝑃",
+	"\\mathsl{Q}": "𝑄",
+	"\\mathsl{R}": "𝑅",
+	"\\mathsl{S}": "𝑆",
+	"\\mathsl{T}": "𝑇",
+	"\\mathsl{U}": "𝑈",
+	"\\mathsl{V}": "𝑉",
+	"\\mathsl{W}": "𝑊",
+	"\\mathsl{X}": "𝑋",
+	"\\mathsl{Y}": "𝑌",
+	"\\mathsl{Z}": "𝑍",
+	"\\mathsl{a}": "𝑎",
+	"\\mathsl{b}": "𝑏",
+	"\\mathsl{c}": "𝑐",
+	"\\mathsl{d}": "𝑑",
+	"\\mathsl{e}": "𝑒",
+	"\\mathsl{f}": "𝑓",
+	"\\mathsl{g}": "𝑔",
+	"\\mathsl{i}": "𝑖",
+	"\\mathsl{j}": "𝑗",
+	"\\mathsl{k}": "𝑘",
+	"\\mathsl{l}": "𝑙",
+	"\\mathsl{m}": "𝑚",
+	"\\mathsl{n}": "𝑛",
+	"\\mathsl{o}": "𝑜",
+	"\\mathsl{p}": "𝑝",
+	"\\mathsl{q}": "𝑞",
+	"\\mathsl{r}": "𝑟",
+	"\\mathsl{s}": "𝑠",
+	"\\mathsl{t}": "𝑡",
+	"\\mathsl{u}": "𝑱",
+	"\\mathsl{v}": "𝑣",
+	"\\mathsl{w}": "đ‘€",
+	"\\mathsl{x}": "đ‘„",
+	"\\mathsl{y}": "𝑩",
+	"\\mathsl{z}": "𝑧",
+	"\\mathbit{A}": "𝑹",
+	"\\mathbit{B}": "đ‘©",
+	"\\mathbit{C}": "đ‘Ș",
+	"\\mathbit{D}": "đ‘«",
+	"\\mathbit{E}": "𝑬",
+	"\\mathbit{F}": "𝑭",
+	"\\mathbit{G}": "𝑼",
+	"\\mathbit{H}": "𝑯",
+	"\\mathbit{I}": "𝑰",
+	"\\mathbit{J}": "đ‘±",
+	"\\mathbit{K}": "đ‘Č",
+	"\\mathbit{L}": "𝑳",
+	"\\mathbit{M}": "𝑮",
+	"\\mathbit{N}": "đ‘”",
+	"\\mathbit{O}": "đ‘¶",
+	"\\mathbit{P}": "đ‘·",
+	"\\mathbit{Q}": "𝑾",
+	"\\mathbit{R}": "đ‘č",
+	"\\mathbit{S}": "đ‘ș",
+	"\\mathbit{T}": "đ‘»",
+	"\\mathbit{U}": "đ‘Œ",
+	"\\mathbit{V}": "đ‘œ",
+	"\\mathbit{W}": "đ‘Ÿ",
+	"\\mathbit{X}": "𝑿",
+	"\\mathbit{Y}": "𝒀",
+	"\\mathbit{Z}": "𝒁",
+	"\\mathbit{a}": "𝒂",
+	"\\mathbit{b}": "𝒃",
+	"\\mathbit{c}": "𝒄",
+	"\\mathbit{d}": "𝒅",
+	"\\mathbit{e}": "𝒆",
+	"\\mathbit{f}": "𝒇",
+	"\\mathbit{g}": "𝒈",
+	"\\mathbit{h}": "𝒉",
+	"\\mathbit{i}": "𝒊",
+	"\\mathbit{j}": "𝒋",
+	"\\mathbit{k}": "𝒌",
+	"\\mathbit{l}": "𝒍",
+	"\\mathbit{m}": "𝒎",
+	"\\mathbit{n}": "𝒏",
+	"\\mathbit{o}": "𝒐",
+	"\\mathbit{p}": "𝒑",
+	"\\mathbit{q}": "𝒒",
+	"\\mathbit{r}": "𝒓",
+	"\\mathbit{s}": "𝒔",
+	"\\mathbit{t}": "𝒕",
+	"\\mathbit{u}": "𝒖",
+	"\\mathbit{v}": "𝒗",
+	"\\mathbit{w}": "𝒘",
+	"\\mathbit{x}": "𝒙",
+	"\\mathbit{y}": "𝒚",
+	"\\mathbit{z}": "𝒛",
+	"\\mathscr{A}": "𝒜",
+	"\\mathscr{C}": "𝒞",
+	"\\mathscr{D}": "𝒟",
+	"\\mathscr{G}": "𝒱",
+	"\\mathscr{J}": "đ’„",
+	"\\mathscr{K}": "𝒩",
+	"\\mathscr{N}": "đ’©",
+	"\\mathscr{O}": "đ’Ș",
+	"\\mathscr{P}": "đ’«",
+	"\\mathscr{Q}": "𝒬",
+	"\\mathscr{S}": "𝒼",
+	"\\mathscr{T}": "𝒯",
+	"\\mathscr{U}": "𝒰",
+	"\\mathscr{V}": "đ’±",
+	"\\mathscr{W}": "đ’Č",
+	"\\mathscr{X}": "𝒳",
+	"\\mathscr{Y}": "𝒮",
+	"\\mathscr{Z}": "đ’”",
+	"\\mathscr{a}": "đ’¶",
+	"\\mathscr{b}": "đ’·",
+	"\\mathscr{c}": "𝒾",
+	"\\mathscr{d}": "đ’č",
+	"\\mathscr{f}": "đ’»",
+	"\\mathscr{h}": "đ’œ",
+	"\\mathscr{i}": "đ’Ÿ",
+	"\\mathscr{j}": "𝒿",
+	"\\mathscr{k}": "𝓀",
+	"\\mathscr{m}": "𝓂",
+	"\\mathscr{n}": "𝓃",
+	"\\mathscr{p}": "𝓅",
+	"\\mathscr{q}": "𝓆",
+	"\\mathscr{r}": "𝓇",
+	"\\mathscr{s}": "𝓈",
+	"\\mathscr{t}": "𝓉",
+	"\\mathscr{u}": "𝓊",
+	"\\mathscr{v}": "𝓋",
+	"\\mathscr{w}": "𝓌",
+	"\\mathscr{x}": "𝓍",
+	"\\mathscr{y}": "𝓎",
+	"\\mathscr{z}": "𝓏",
+	"\\mathmit{A}": "𝓐",
+	"\\mathmit{B}": "𝓑",
+	"\\mathmit{C}": "𝓒",
+	"\\mathmit{D}": "𝓓",
+	"\\mathmit{E}": "𝓔",
+	"\\mathmit{F}": "𝓕",
+	"\\mathmit{G}": "𝓖",
+	"\\mathmit{H}": "𝓗",
+	"\\mathmit{I}": "𝓘",
+	"\\mathmit{J}": "𝓙",
+	"\\mathmit{K}": "𝓚",
+	"\\mathmit{L}": "𝓛",
+	"\\mathmit{M}": "𝓜",
+	"\\mathmit{N}": "𝓝",
+	"\\mathmit{O}": "𝓞",
+	"\\mathmit{P}": "𝓟",
+	"\\mathmit{Q}": "𝓠",
+	"\\mathmit{R}": "𝓡",
+	"\\mathmit{S}": "𝓱",
+	"\\mathmit{T}": "𝓣",
+	"\\mathmit{U}": "đ“€",
+	"\\mathmit{V}": "đ“„",
+	"\\mathmit{W}": "𝓩",
+	"\\mathmit{X}": "𝓧",
+	"\\mathmit{Y}": "𝓹",
+	"\\mathmit{Z}": "đ“©",
+	"\\mathmit{a}": "đ“Ș",
+	"\\mathmit{b}": "đ“«",
+	"\\mathmit{c}": "𝓬",
+	"\\mathmit{d}": "𝓭",
+	"\\mathmit{e}": "𝓼",
+	"\\mathmit{f}": "𝓯",
+	"\\mathmit{g}": "𝓰",
+	"\\mathmit{h}": "đ“±",
+	"\\mathmit{i}": "đ“Č",
+	"\\mathmit{j}": "𝓳",
+	"\\mathmit{k}": "𝓮",
+	"\\mathmit{l}": "đ“”",
+	"\\mathmit{m}": "đ“¶",
+	"\\mathmit{n}": "đ“·",
+	"\\mathmit{o}": "𝓾",
+	"\\mathmit{p}": "đ“č",
+	"\\mathmit{q}": "đ“ș",
+	"\\mathmit{r}": "đ“»",
+	"\\mathmit{s}": "đ“Œ",
+	"\\mathmit{t}": "đ“œ",
+	"\\mathmit{u}": "đ“Ÿ",
+	"\\mathmit{v}": "𝓿",
+	"\\mathmit{w}": "𝔀",
+	"\\mathmit{x}": "𝔁",
+	"\\mathmit{y}": "𝔂",
+	"\\mathmit{z}": "𝔃",
+	"\\mathfrak{A}": "𝔄",
+	"\\mathfrak{B}": "𝔅",
+	"\\mathfrak{D}": "𝔇",
+	"\\mathfrak{E}": "𝔈",
+	"\\mathfrak{F}": "𝔉",
+	"\\mathfrak{G}": "𝔊",
+	"\\mathfrak{J}": "𝔍",
+	"\\mathfrak{K}": "𝔎",
+	"\\mathfrak{L}": "𝔏",
+	"\\mathfrak{M}": "𝔐",
+	"\\mathfrak{N}": "𝔑",
+	"\\mathfrak{O}": "𝔒",
+	"\\mathfrak{P}": "𝔓",
+	"\\mathfrak{Q}": "𝔔",
+	"\\mathfrak{S}": "𝔖",
+	"\\mathfrak{T}": "𝔗",
+	"\\mathfrak{U}": "𝔘",
+	"\\mathfrak{V}": "𝔙",
+	"\\mathfrak{W}": "𝔚",
+	"\\mathfrak{X}": "𝔛",
+	"\\mathfrak{Y}": "𝔜",
+	"\\mathfrak{a}": "𝔞",
+	"\\mathfrak{b}": "𝔟",
+	"\\mathfrak{c}": "𝔠",
+	"\\mathfrak{d}": "𝔡",
+	"\\mathfrak{e}": "𝔱",
+	"\\mathfrak{f}": "𝔣",
+	"\\mathfrak{g}": "đ”€",
+	"\\mathfrak{h}": "đ”„",
+	"\\mathfrak{i}": "𝔩",
+	"\\mathfrak{j}": "𝔧",
+	"\\mathfrak{k}": "𝔹",
+	"\\mathfrak{l}": "đ”©",
+	"\\mathfrak{m}": "đ”Ș",
+	"\\mathfrak{n}": "đ”«",
+	"\\mathfrak{o}": "𝔬",
+	"\\mathfrak{p}": "𝔭",
+	"\\mathfrak{q}": "𝔼",
+	"\\mathfrak{r}": "𝔯",
+	"\\mathfrak{s}": "𝔰",
+	"\\mathfrak{t}": "đ”±",
+	"\\mathfrak{u}": "đ”Č",
+	"\\mathfrak{v}": "𝔳",
+	"\\mathfrak{w}": "𝔮",
+	"\\mathfrak{x}": "đ””",
+	"\\mathfrak{y}": "đ”¶",
+	"\\mathfrak{z}": "đ”·",
+	"\\mathbb{A}": "𝔾",
+	"\\mathbb{B}": "đ”č",
+	"\\mathbb{D}": "đ”»",
+	"\\mathbb{E}": "đ”Œ",
+	"\\mathbb{F}": "đ”œ",
+	"\\mathbb{G}": "đ”Ÿ",
+	"\\mathbb{I}": "𝕀",
+	"\\mathbb{J}": "𝕁",
+	"\\mathbb{K}": "𝕂",
+	"\\mathbb{L}": "𝕃",
+	"\\mathbb{M}": "𝕄",
+	"\\mathbb{O}": "𝕆",
+	"\\mathbb{S}": "𝕊",
+	"\\mathbb{T}": "𝕋",
+	"\\mathbb{U}": "𝕌",
+	"\\mathbb{V}": "𝕍",
+	"\\mathbb{W}": "𝕎",
+	"\\mathbb{X}": "𝕏",
+	"\\mathbb{Y}": "𝕐",
+	"\\mathbb{a}": "𝕒",
+	"\\mathbb{b}": "𝕓",
+	"\\mathbb{c}": "𝕔",
+	"\\mathbb{d}": "𝕕",
+	"\\mathbb{e}": "𝕖",
+	"\\mathbb{f}": "𝕗",
+	"\\mathbb{g}": "𝕘",
+	"\\mathbb{h}": "𝕙",
+	"\\mathbb{i}": "𝕚",
+	"\\mathbb{j}": "𝕛",
+	"\\mathbb{k}": "𝕜",
+	"\\mathbb{l}": "𝕝",
+	"\\mathbb{m}": "𝕞",
+	"\\mathbb{n}": "𝕟",
+	"\\mathbb{o}": "𝕠",
+	"\\mathbb{p}": "𝕡",
+	"\\mathbb{q}": "𝕱",
+	"\\mathbb{r}": "𝕣",
+	"\\mathbb{s}": "đ•€",
+	"\\mathbb{t}": "đ•„",
+	"\\mathbb{u}": "𝕩",
+	"\\mathbb{v}": "𝕧",
+	"\\mathbb{w}": "𝕹",
+	"\\mathbb{x}": "đ•©",
+	"\\mathbb{y}": "đ•Ș",
+	"\\mathbb{z}": "đ•«",
+	"\\mathslbb{A}": "𝕬",
+	"\\mathslbb{B}": "𝕭",
+	"\\mathslbb{C}": "𝕼",
+	"\\mathslbb{D}": "𝕯",
+	"\\mathslbb{E}": "𝕰",
+	"\\mathslbb{F}": "đ•±",
+	"\\mathslbb{G}": "đ•Č",
+	"\\mathslbb{H}": "𝕳",
+	"\\mathslbb{I}": "𝕮",
+	"\\mathslbb{J}": "đ•”",
+	"\\mathslbb{K}": "đ•¶",
+	"\\mathslbb{L}": "đ•·",
+	"\\mathslbb{M}": "𝕾",
+	"\\mathslbb{N}": "đ•č",
+	"\\mathslbb{O}": "đ•ș",
+	"\\mathslbb{P}": "đ•»",
+	"\\mathslbb{Q}": "đ•Œ",
+	"\\mathslbb{R}": "đ•œ",
+	"\\mathslbb{S}": "đ•Ÿ",
+	"\\mathslbb{T}": "𝕿",
+	"\\mathslbb{U}": "𝖀",
+	"\\mathslbb{V}": "𝖁",
+	"\\mathslbb{W}": "𝖂",
+	"\\mathslbb{X}": "𝖃",
+	"\\mathslbb{Y}": "𝖄",
+	"\\mathslbb{Z}": "𝖅",
+	"\\mathslbb{a}": "𝖆",
+	"\\mathslbb{b}": "𝖇",
+	"\\mathslbb{c}": "𝖈",
+	"\\mathslbb{d}": "𝖉",
+	"\\mathslbb{e}": "𝖊",
+	"\\mathslbb{f}": "𝖋",
+	"\\mathslbb{g}": "𝖌",
+	"\\mathslbb{h}": "𝖍",
+	"\\mathslbb{i}": "𝖎",
+	"\\mathslbb{j}": "𝖏",
+	"\\mathslbb{k}": "𝖐",
+	"\\mathslbb{l}": "𝖑",
+	"\\mathslbb{m}": "𝖒",
+	"\\mathslbb{n}": "𝖓",
+	"\\mathslbb{o}": "𝖔",
+	"\\mathslbb{p}": "𝖕",
+	"\\mathslbb{q}": "𝖖",
+	"\\mathslbb{r}": "𝖗",
+	"\\mathslbb{s}": "𝖘",
+	"\\mathslbb{t}": "𝖙",
+	"\\mathslbb{u}": "𝖚",
+	"\\mathslbb{v}": "𝖛",
+	"\\mathslbb{w}": "𝖜",
+	"\\mathslbb{x}": "𝖝",
+	"\\mathslbb{y}": "𝖞",
+	"\\mathslbb{z}": "𝖟",
+	"\\mathsf{A}": "𝖠",
+	"\\mathsf{B}": "𝖡",
+	"\\mathsf{C}": "𝖱",
+	"\\mathsf{D}": "𝖣",
+	"\\mathsf{E}": "đ–€",
+	"\\mathsf{F}": "đ–„",
+	"\\mathsf{G}": "𝖩",
+	"\\mathsf{H}": "𝖧",
+	"\\mathsf{I}": "𝖹",
+	"\\mathsf{J}": "đ–©",
+	"\\mathsf{K}": "đ–Ș",
+	"\\mathsf{L}": "đ–«",
+	"\\mathsf{M}": "𝖬",
+	"\\mathsf{N}": "𝖭",
+	"\\mathsf{O}": "𝖼",
+	"\\mathsf{P}": "𝖯",
+	"\\mathsf{Q}": "𝖰",
+	"\\mathsf{R}": "đ–±",
+	"\\mathsf{S}": "đ–Č",
+	"\\mathsf{T}": "𝖳",
+	"\\mathsf{U}": "𝖮",
+	"\\mathsf{V}": "đ–”",
+	"\\mathsf{W}": "đ–¶",
+	"\\mathsf{X}": "đ–·",
+	"\\mathsf{Y}": "𝖾",
+	"\\mathsf{Z}": "đ–č",
+	"\\mathsf{a}": "đ–ș",
+	"\\mathsf{b}": "đ–»",
+	"\\mathsf{c}": "đ–Œ",
+	"\\mathsf{d}": "đ–œ",
+	"\\mathsf{e}": "đ–Ÿ",
+	"\\mathsf{f}": "𝖿",
+	"\\mathsf{g}": "𝗀",
+	"\\mathsf{h}": "𝗁",
+	"\\mathsf{i}": "𝗂",
+	"\\mathsf{j}": "𝗃",
+	"\\mathsf{k}": "𝗄",
+	"\\mathsf{l}": "𝗅",
+	"\\mathsf{m}": "𝗆",
+	"\\mathsf{n}": "𝗇",
+	"\\mathsf{o}": "𝗈",
+	"\\mathsf{p}": "𝗉",
+	"\\mathsf{q}": "𝗊",
+	"\\mathsf{r}": "𝗋",
+	"\\mathsf{s}": "𝗌",
+	"\\mathsf{t}": "𝗍",
+	"\\mathsf{u}": "𝗎",
+	"\\mathsf{v}": "𝗏",
+	"\\mathsf{w}": "𝗐",
+	"\\mathsf{x}": "𝗑",
+	"\\mathsf{y}": "𝗒",
+	"\\mathsf{z}": "𝗓",
+	"\\mathsfbf{A}": "𝗔",
+	"\\mathsfbf{B}": "𝗕",
+	"\\mathsfbf{C}": "𝗖",
+	"\\mathsfbf{D}": "𝗗",
+	"\\mathsfbf{E}": "𝗘",
+	"\\mathsfbf{F}": "𝗙",
+	"\\mathsfbf{G}": "𝗚",
+	"\\mathsfbf{H}": "𝗛",
+	"\\mathsfbf{I}": "𝗜",
+	"\\mathsfbf{J}": "𝗝",
+	"\\mathsfbf{K}": "𝗞",
+	"\\mathsfbf{L}": "𝗟",
+	"\\mathsfbf{M}": "𝗠",
+	"\\mathsfbf{N}": "𝗡",
+	"\\mathsfbf{O}": "𝗱",
+	"\\mathsfbf{P}": "𝗣",
+	"\\mathsfbf{Q}": "đ—€",
+	"\\mathsfbf{R}": "đ—„",
+	"\\mathsfbf{S}": "𝗩",
+	"\\mathsfbf{T}": "𝗧",
+	"\\mathsfbf{U}": "𝗹",
+	"\\mathsfbf{V}": "đ—©",
+	"\\mathsfbf{W}": "đ—Ș",
+	"\\mathsfbf{X}": "đ—«",
+	"\\mathsfbf{Y}": "𝗬",
+	"\\mathsfbf{Z}": "𝗭",
+	"\\mathsfbf{a}": "𝗼",
+	"\\mathsfbf{b}": "𝗯",
+	"\\mathsfbf{c}": "𝗰",
+	"\\mathsfbf{d}": "đ—±",
+	"\\mathsfbf{e}": "đ—Č",
+	"\\mathsfbf{f}": "𝗳",
+	"\\mathsfbf{g}": "𝗮",
+	"\\mathsfbf{h}": "đ—”",
+	"\\mathsfbf{i}": "đ—¶",
+	"\\mathsfbf{j}": "đ—·",
+	"\\mathsfbf{k}": "𝗾",
+	"\\mathsfbf{l}": "đ—č",
+	"\\mathsfbf{m}": "đ—ș",
+	"\\mathsfbf{n}": "đ—»",
+	"\\mathsfbf{o}": "đ—Œ",
+	"\\mathsfbf{p}": "đ—œ",
+	"\\mathsfbf{q}": "đ—Ÿ",
+	"\\mathsfbf{r}": "𝗿",
+	"\\mathsfbf{s}": "𝘀",
+	"\\mathsfbf{t}": "𝘁",
+	"\\mathsfbf{u}": "𝘂",
+	"\\mathsfbf{v}": "𝘃",
+	"\\mathsfbf{w}": "𝘄",
+	"\\mathsfbf{x}": "𝘅",
+	"\\mathsfbf{y}": "𝘆",
+	"\\mathsfbf{z}": "𝘇",
+	"\\mathsfsl{A}": "𝘈",
+	"\\mathsfsl{B}": "𝘉",
+	"\\mathsfsl{C}": "𝘊",
+	"\\mathsfsl{D}": "𝘋",
+	"\\mathsfsl{E}": "𝘌",
+	"\\mathsfsl{F}": "𝘍",
+	"\\mathsfsl{G}": "𝘎",
+	"\\mathsfsl{H}": "𝘏",
+	"\\mathsfsl{I}": "𝘐",
+	"\\mathsfsl{J}": "𝘑",
+	"\\mathsfsl{K}": "𝘒",
+	"\\mathsfsl{L}": "𝘓",
+	"\\mathsfsl{M}": "𝘔",
+	"\\mathsfsl{N}": "𝘕",
+	"\\mathsfsl{O}": "𝘖",
+	"\\mathsfsl{P}": "𝘗",
+	"\\mathsfsl{Q}": "𝘘",
+	"\\mathsfsl{R}": "𝘙",
+	"\\mathsfsl{S}": "𝘚",
+	"\\mathsfsl{T}": "𝘛",
+	"\\mathsfsl{U}": "𝘜",
+	"\\mathsfsl{V}": "𝘝",
+	"\\mathsfsl{W}": "𝘞",
+	"\\mathsfsl{X}": "𝘟",
+	"\\mathsfsl{Y}": "𝘠",
+	"\\mathsfsl{Z}": "𝘡",
+	"\\mathsfsl{a}": "𝘱",
+	"\\mathsfsl{b}": "𝘣",
+	"\\mathsfsl{c}": "đ˜€",
+	"\\mathsfsl{d}": "đ˜„",
+	"\\mathsfsl{e}": "𝘩",
+	"\\mathsfsl{f}": "𝘧",
+	"\\mathsfsl{g}": "𝘹",
+	"\\mathsfsl{h}": "đ˜©",
+	"\\mathsfsl{i}": "đ˜Ș",
+	"\\mathsfsl{j}": "đ˜«",
+	"\\mathsfsl{k}": "𝘬",
+	"\\mathsfsl{l}": "𝘭",
+	"\\mathsfsl{m}": "𝘼",
+	"\\mathsfsl{n}": "𝘯",
+	"\\mathsfsl{o}": "𝘰",
+	"\\mathsfsl{p}": "đ˜±",
+	"\\mathsfsl{q}": "đ˜Č",
+	"\\mathsfsl{r}": "𝘳",
+	"\\mathsfsl{s}": "𝘮",
+	"\\mathsfsl{t}": "đ˜”",
+	"\\mathsfsl{u}": "đ˜¶",
+	"\\mathsfsl{v}": "đ˜·",
+	"\\mathsfsl{w}": "𝘾",
+	"\\mathsfsl{x}": "đ˜č",
+	"\\mathsfsl{y}": "đ˜ș",
+	"\\mathsfsl{z}": "đ˜»",
+	"\\mathsfbfsl{A}": "đ˜Œ",
+	"\\mathsfbfsl{B}": "đ˜œ",
+	"\\mathsfbfsl{C}": "đ˜Ÿ",
+	"\\mathsfbfsl{D}": "𝘿",
+	"\\mathsfbfsl{E}": "𝙀",
+	"\\mathsfbfsl{F}": "𝙁",
+	"\\mathsfbfsl{G}": "𝙂",
+	"\\mathsfbfsl{H}": "𝙃",
+	"\\mathsfbfsl{I}": "𝙄",
+	"\\mathsfbfsl{J}": "𝙅",
+	"\\mathsfbfsl{K}": "𝙆",
+	"\\mathsfbfsl{L}": "𝙇",
+	"\\mathsfbfsl{M}": "𝙈",
+	"\\mathsfbfsl{N}": "𝙉",
+	"\\mathsfbfsl{O}": "𝙊",
+	"\\mathsfbfsl{P}": "𝙋",
+	"\\mathsfbfsl{Q}": "𝙌",
+	"\\mathsfbfsl{R}": "𝙍",
+	"\\mathsfbfsl{S}": "𝙎",
+	"\\mathsfbfsl{T}": "𝙏",
+	"\\mathsfbfsl{U}": "𝙐",
+	"\\mathsfbfsl{V}": "𝙑",
+	"\\mathsfbfsl{W}": "𝙒",
+	"\\mathsfbfsl{X}": "𝙓",
+	"\\mathsfbfsl{Y}": "𝙔",
+	"\\mathsfbfsl{Z}": "𝙕",
+	"\\mathsfbfsl{a}": "𝙖",
+	"\\mathsfbfsl{b}": "𝙗",
+	"\\mathsfbfsl{c}": "𝙘",
+	"\\mathsfbfsl{d}": "𝙙",
+	"\\mathsfbfsl{e}": "𝙚",
+	"\\mathsfbfsl{f}": "𝙛",
+	"\\mathsfbfsl{g}": "𝙜",
+	"\\mathsfbfsl{h}": "𝙝",
+	"\\mathsfbfsl{i}": "𝙞",
+	"\\mathsfbfsl{j}": "𝙟",
+	"\\mathsfbfsl{k}": "𝙠",
+	"\\mathsfbfsl{l}": "𝙡",
+	"\\mathsfbfsl{m}": "𝙱",
+	"\\mathsfbfsl{n}": "𝙣",
+	"\\mathsfbfsl{o}": "đ™€",
+	"\\mathsfbfsl{p}": "đ™„",
+	"\\mathsfbfsl{q}": "𝙩",
+	"\\mathsfbfsl{r}": "𝙧",
+	"\\mathsfbfsl{s}": "𝙹",
+	"\\mathsfbfsl{t}": "đ™©",
+	"\\mathsfbfsl{u}": "đ™Ș",
+	"\\mathsfbfsl{v}": "đ™«",
+	"\\mathsfbfsl{w}": "𝙬",
+	"\\mathsfbfsl{x}": "𝙭",
+	"\\mathsfbfsl{y}": "𝙼",
+	"\\mathsfbfsl{z}": "𝙯",
+	"\\mathtt{A}": "𝙰",
+	"\\mathtt{B}": "đ™±",
+	"\\mathtt{C}": "đ™Č",
+	"\\mathtt{D}": "𝙳",
+	"\\mathtt{E}": "𝙮",
+	"\\mathtt{F}": "đ™”",
+	"\\mathtt{G}": "đ™¶",
+	"\\mathtt{H}": "đ™·",
+	"\\mathtt{I}": "𝙾",
+	"\\mathtt{J}": "đ™č",
+	"\\mathtt{K}": "đ™ș",
+	"\\mathtt{L}": "đ™»",
+	"\\mathtt{M}": "đ™Œ",
+	"\\mathtt{N}": "đ™œ",
+	"\\mathtt{O}": "đ™Ÿ",
+	"\\mathtt{P}": "𝙿",
+	"\\mathtt{Q}": "𝚀",
+	"\\mathtt{R}": "𝚁",
+	"\\mathtt{S}": "𝚂",
+	"\\mathtt{T}": "𝚃",
+	"\\mathtt{U}": "𝚄",
+	"\\mathtt{V}": "𝚅",
+	"\\mathtt{W}": "𝚆",
+	"\\mathtt{X}": "𝚇",
+	"\\mathtt{Y}": "𝚈",
+	"\\mathtt{Z}": "𝚉",
+	"\\mathtt{a}": "𝚊",
+	"\\mathtt{b}": "𝚋",
+	"\\mathtt{c}": "𝚌",
+	"\\mathtt{d}": "𝚍",
+	"\\mathtt{e}": "𝚎",
+	"\\mathtt{f}": "𝚏",
+	"\\mathtt{g}": "𝚐",
+	"\\mathtt{h}": "𝚑",
+	"\\mathtt{i}": "𝚒",
+	"\\mathtt{j}": "𝚓",
+	"\\mathtt{k}": "𝚔",
+	"\\mathtt{l}": "𝚕",
+	"\\mathtt{m}": "𝚖",
+	"\\mathtt{n}": "𝚗",
+	"\\mathtt{o}": "𝚘",
+	"\\mathtt{p}": "𝚙",
+	"\\mathtt{q}": "𝚚",
+	"\\mathtt{r}": "𝚛",
+	"\\mathtt{s}": "𝚜",
+	"\\mathtt{t}": "𝚝",
+	"\\mathtt{u}": "𝚞",
+	"\\mathtt{v}": "𝚟",
+	"\\mathtt{w}": "𝚠",
+	"\\mathtt{x}": "𝚡",
+	"\\mathtt{y}": "𝚱",
+	"\\mathtt{z}": "𝚣",
+	"\\mathbf{\\Gamma}": "đšȘ",
+	"\\mathbf{\\Delta}": "đš«",
+	"\\mathbf{\\Theta}": "𝚯",
+	"\\mathbf{\\Lambda}": "đšČ",
+	"\\mathbf{\\Xi}": "đš”",
+	"\\mathbf{\\Pi}": "đš·",
+	"\\mathbf{\\vartheta}": "đšč",
+	"\\mathbf{\\Sigma}": "đšș",
+	"\\mathbf{\\Upsilon}": "đšŒ",
+	"\\mathbf{\\Phi}": "đšœ",
+	"\\mathbf{\\Psi}": "𝚿",
+	"\\mathbf{\\Omega}": "𝛀",
+	"\\mathbf{\\nabla}": "𝛁",
+	"\\mathbf{\\alpha}": "𝛂",
+	"\\mathbf{\\beta}": "𝛃",
+	"\\mathbf{\\gamma}": "𝛄",
+	"\\mathbf{\\delta}": "𝛅",
+	"\\mathbf{\\epsilon}": "𝛆",
+	"\\mathbf{\\zeta}": "𝛇",
+	"\\mathbf{\\eta}": "𝛈",
+	"\\mathbf{\\theta}": "𝛉",
+	"\\mathbf{\\lambda}": "𝛌",
+	"\\mathbf{\\xi}": "𝛏",
+	"\\mathbf{\\pi}": "𝛑",
+	"\\mathbf{\\varsigma}": "𝛓",
+	"\\mathbf{\\sigma}": "𝛔",
+	"\\mathbf{\\upsilon}": "𝛖",
+	"\\mathbf{\\phi}": "𝛗",
+	"\\mathbf{\\psi}": "𝛙",
+	"\\mathbf{\\omega}": "𝛚",
+	"\\mathbf{\\varkappa}": "𝛞",
+	"\\mathbf{\\varrho}": "𝛠",
+	"\\mathbf{\\varpi}": "𝛡",
+	"\\mathsl{\\Gamma}": "đ›€",
+	"\\mathsl{\\Delta}": "đ›„",
+	"\\mathsl{\\Lambda}": "𝛬",
+	"\\mathsl{\\Xi}": "𝛯",
+	"\\mathsl{\\Pi}": "đ›±",
+	"\\mathsl{\\Theta}": "𝛳",
+	"\\mathsl{\\Sigma}": "𝛮",
+	"\\mathsl{\\Upsilon}": "đ›¶",
+	"\\mathsl{\\Phi}": "đ›·",
+	"\\mathsl{\\Psi}": "đ›č",
+	"\\mathsl{\\Omega}": "đ›ș",
+	"\\mathsl{\\nabla}": "đ›»",
+	"\\mathsl{\\gamma}": "đ›Ÿ",
+	"\\mathsl{\\delta}": "𝛿",
+	"\\mathsl{\\theta}": "𝜃",
+	"\\mathsl{\\lambda}": "𝜆",
+	"\\mu": "𝜇",
+	"\\mathsl{\\xi}": "𝜉",
+	"\\mathsl{\\pi}": "𝜋",
+	"\\mathsl{\\varsigma}": "𝜍",
+	"\\mathsl{\\sigma}": "𝜎",
+	"\\mathsl{\\upsilon}": "𝜐",
+	"\\mathsl{\\varphi}": "𝜑",
+	"\\mathsl{\\psi}": "𝜓",
+	"\\mathsl{\\omega}": "𝜔",
+	"\\mathsl{\\vartheta}": "𝜗",
+	"\\mathsl{\\varkappa}": "𝜘",
+	"\\mathsl{\\phi}": "𝜙",
+	"\\mathsl{\\varrho}": "𝜚",
+	"\\mathsl{\\varpi}": "𝜛",
+	"\\mathbit{\\Gamma}": "𝜞",
+	"\\mathbit{\\Delta}": "𝜟",
+	"\\mathbit{\\Theta}": "𝜣",
+	"\\mathbit{\\Lambda}": "𝜩",
+	"\\mathbit{\\Xi}": "đœ©",
+	"\\mathbit{\\Pi}": "đœ«",
+	"\\mathbit{\\Sigma}": "𝜼",
+	"\\mathbit{\\Upsilon}": "𝜰",
+	"\\mathbit{\\Phi}": "đœ±",
+	"\\mathbit{\\Psi}": "𝜳",
+	"\\mathbit{\\Omega}": "𝜮",
+	"\\mathbit{\\nabla}": "đœ”",
+	"\\mathbit{\\alpha}": "đœ¶",
+	"\\mathbit{\\beta}": "đœ·",
+	"\\mathbit{\\gamma}": "𝜾",
+	"\\mathbit{\\delta}": "đœč",
+	"\\mathbit{\\epsilon}": "đœș",
+	"\\mathbit{\\zeta}": "đœ»",
+	"\\mathbit{\\eta}": "đœŒ",
+	"\\mathbit{\\theta}": "đœœ",
+	"\\mathbit{\\imath}": "đœŸ",
+	"\\mathbit{\\kappa}": "𝜿",
+	"\\mathbit{\\lambda}": "𝝀",
+	"\\mathbit{\\xi}": "𝝃",
+	"\\mathbit{\\pi}": "𝝅",
+	"\\mathbit{\\rho}": "𝝆",
+	"\\mathbit{\\varsigma}": "𝝇",
+	"\\mathbit{\\sigma}": "𝝈",
+	"\\mathbit{\\tau}": "𝝉",
+	"\\mathbit{\\upsilon}": "𝝊",
+	"\\mathbit{\\varphi}": "𝝋",
+	"\\mathbit{\\chi}": "𝝌",
+	"\\mathbit{\\psi}": "𝝍",
+	"\\mathbit{\\omega}": "𝝎",
+	"\\mathbit{\\vartheta}": "𝝑",
+	"\\mathbit{\\varkappa}": "𝝒",
+	"\\mathbit{\\phi}": "𝝓",
+	"\\mathbit{\\varrho}": "𝝔",
+	"\\mathbit{\\varpi}": "𝝕",
+	"\\mathsfbf{\\Gamma}": "𝝘",
+	"\\mathsfbf{\\Delta}": "𝝙",
+	"\\mathsfbf{\\Theta}": "𝝝",
+	"\\mathsfbf{\\Lambda}": "𝝠",
+	"\\mathsfbf{\\Xi}": "𝝣",
+	"\\mathsfbf{\\Pi}": "đ„",
+	"\\mathsfbf{\\Sigma}": "𝝹",
+	"\\mathsfbf{\\Upsilon}": "đȘ",
+	"\\mathsfbf{\\Phi}": "đ«",
+	"\\mathsfbf{\\Psi}": "𝝭",
+	"\\mathsfbf{\\Omega}": "𝝼",
+	"\\mathsfbf{\\nabla}": "𝝯",
+	"\\mathsfbf{\\alpha}": "𝝰",
+	"\\mathsfbf{\\beta}": "đ±",
+	"\\mathsfbf{\\gamma}": "đČ",
+	"\\mathsfbf{\\delta}": "𝝳",
+	"\\mathsfbf{\\varepsilon}": "𝝮",
+	"\\mathsfbf{\\zeta}": "đ”",
+	"\\mathsfbf{\\eta}": "đ¶",
+	"\\mathsfbf{\\theta}": "đ·",
+	"\\mathsfbf{\\imath}": "𝝾",
+	"\\mathsfbf{\\kappa}": "đč",
+	"\\mathsfbf{\\lambda}": "đș",
+	"\\mathsfbf{\\xi}": "đœ",
+	"\\mathsfbf{\\pi}": "𝝿",
+	"\\mathsfbf{\\rho}": "𝞀",
+	"\\mathsfbf{\\varsigma}": "𝞁",
+	"\\mathsfbf{\\sigma}": "𝞂",
+	"\\mathsfbf{\\tau}": "𝞃",
+	"\\mathsfbf{\\upsilon}": "𝞄",
+	"\\mathsfbf{\\varphi}": "𝞅",
+	"\\mathsfbf{\\chi}": "𝞆",
+	"\\mathsfbf{\\psi}": "𝞇",
+	"\\mathsfbf{\\omega}": "𝞈",
+	"\\mathsfbf{\\vartheta}": "𝞋",
+	"\\mathsfbf{\\varkappa}": "𝞌",
+	"\\mathsfbf{\\phi}": "𝞍",
+	"\\mathsfbf{\\varrho}": "𝞎",
+	"\\mathsfbf{\\varpi}": "𝞏",
+	"\\mathsfbfsl{\\Gamma}": "𝞒",
+	"\\mathsfbfsl{\\Delta}": "𝞓",
+	"\\mathsfbfsl{\\Theta}": "𝞗",
+	"\\mathsfbfsl{\\Lambda}": "𝞚",
+	"\\mathsfbfsl{\\Xi}": "𝞝",
+	"\\mathsfbfsl{\\Pi}": "𝞟",
+	"\\mathsfbfsl{\\Sigma}": "𝞱",
+	"\\mathsfbfsl{\\Upsilon}": "đž€",
+	"\\mathsfbfsl{\\Phi}": "đž„",
+	"\\mathsfbfsl{\\Psi}": "𝞧",
+	"\\mathsfbfsl{\\Omega}": "𝞹",
+	"\\mathsfbfsl{\\nabla}": "đž©",
+	"\\mathsfbfsl{\\alpha}": "đžȘ",
+	"\\mathsfbfsl{\\beta}": "đž«",
+	"\\mathsfbfsl{\\gamma}": "𝞬",
+	"\\mathsfbfsl{\\delta}": "𝞭",
+	"\\mathsfbfsl{\\varepsilon}": "𝞼",
+	"\\mathsfbfsl{\\zeta}": "𝞯",
+	"\\mathsfbfsl{\\eta}": "𝞰",
+	"\\mathsfbfsl{\\theta}": "đž±",
+	"\\mathsfbfsl{\\imath}": "đžČ",
+	"\\mathsfbfsl{\\kappa}": "𝞳",
+	"\\mathsfbfsl{\\lambda}": "𝞮",
+	"\\mathsfbfsl{\\xi}": "đž·",
+	"\\mathsfbfsl{\\pi}": "đžč",
+	"\\mathsfbfsl{\\rho}": "đžș",
+	"\\mathsfbfsl{\\varsigma}": "đž»",
+	"\\mathsfbfsl{\\sigma}": "đžŒ",
+	"\\mathsfbfsl{\\tau}": "đžœ",
+	"\\mathsfbfsl{\\upsilon}": "đžŸ",
+	"\\mathsfbfsl{\\varphi}": "𝞿",
+	"\\mathsfbfsl{\\chi}": "𝟀",
+	"\\mathsfbfsl{\\psi}": "𝟁",
+	"\\mathsfbfsl{\\omega}": "𝟂",
+	"\\mathsfbfsl{\\vartheta}": "𝟅",
+	"\\mathsfbfsl{\\varkappa}": "𝟆",
+	"\\mathsfbfsl{\\phi}": "𝟇",
+	"\\mathsfbfsl{\\varrho}": "𝟈",
+	"\\mathsfbfsl{\\varpi}": "𝟉",
+	"\\mbfDigamma": "𝟊",
+	"\\mbfdigamma": "𝟋",
+	"\\mathbf{0}": "𝟎",
+	"\\mathbf{1}": "𝟏",
+	"\\mathbf{2}": "𝟐",
+	"\\mathbf{3}": "𝟑",
+	"\\mathbf{4}": "𝟒",
+	"\\mathbf{5}": "𝟓",
+	"\\mathbf{6}": "𝟔",
+	"\\mathbf{7}": "𝟕",
+	"\\mathbf{8}": "𝟖",
+	"\\mathbf{9}": "𝟗",
+	"\\mathbb{0}": "𝟘",
+	"\\mathbb{1}": "𝟙",
+	"\\mathbb{2}": "𝟚",
+	"\\mathbb{3}": "𝟛",
+	"\\mathbb{4}": "𝟜",
+	"\\mathbb{5}": "𝟝",
+	"\\mathbb{6}": "𝟞",
+	"\\mathbb{7}": "𝟟",
+	"\\mathbb{8}": "𝟠",
+	"\\mathbb{9}": "𝟡",
+	"\\mathsf{0}": "𝟱",
+	"\\mathsf{1}": "𝟣",
+	"\\mathsf{2}": "đŸ€",
+	"\\mathsf{3}": "đŸ„",
+	"\\mathsf{4}": "𝟩",
+	"\\mathsf{5}": "𝟧",
+	"\\mathsf{6}": "𝟹",
+	"\\mathsf{7}": "đŸ©",
+	"\\mathsf{8}": "đŸȘ",
+	"\\mathsf{9}": "đŸ«",
+	"\\mathsfbf{0}": "𝟬",
+	"\\mathsfbf{1}": "𝟭",
+	"\\mathsfbf{2}": "𝟼",
+	"\\mathsfbf{3}": "𝟯",
+	"\\mathsfbf{4}": "𝟰",
+	"\\mathsfbf{5}": "đŸ±",
+	"\\mathsfbf{6}": "đŸČ",
+	"\\mathsfbf{7}": "𝟳",
+	"\\mathsfbf{8}": "𝟮",
+	"\\mathsfbf{9}": "đŸ”",
+	"\\mathtt{0}": "đŸ¶",
+	"\\mathtt{1}": "đŸ·",
+	"\\mathtt{2}": "𝟾",
+	"\\mathtt{3}": "đŸč",
+	"\\mathtt{4}": "đŸș",
+	"\\mathtt{5}": "đŸ»",
+	"\\mathtt{6}": "đŸŒ",
+	"\\mathtt{7}": "đŸœ",
+	"\\mathtt{8}": "đŸŸ",
+	"\\mathtt{9}": "𝟿"
+};
+
+var commands = [
+	"acute",
+	"bar",
+	"breve",
+	"c",
+	"d",
+	"ddot",
+	"dot",
+	"grave",
+	"hat",
+	"k",
+	"mathring",
+	"overline",
+	"r",
+	"textacutemacron",
+	"textacutewedge",
+	"textadvancing",
+	"textbrevemacron",
+	"textcircumdot",
+	"textcorner",
+	"textdotacute",
+	"textdotbreve",
+	"textdoublegrave",
+	"textdoublevbaraccent",
+	"textgravedot",
+	"textgravemacron",
+	"textinvsubbridge",
+	"textlowering",
+	"textovercross",
+	"textraising",
+	"textretracting",
+	"textringmacron",
+	"textseagull",
+	"textsubarch",
+	"textsubbar",
+	"textsubbridge",
+	"textsubgrave",
+	"textsublhalfring",
+	"textsubplus",
+	"textsubrhalfring",
+	"textsubring",
+	"textsubsquare",
+	"textsubtilde",
+	"textsubumlaut",
+	"textsubwedge",
+	"textsuperimposetilde",
+	"textsyllabic",
+	"texttildedot",
+	"textvbaraccent",
+	"tilde",
+	"u",
+	"underbar",
+	"v"
+];
+var tolatex = {
+	"̀": {
+		command: "`",
+		mode: "text"
+	},
+	"̀̄": {
+		command: "textgravemacron",
+		mode: "text"
+	},
+	"̀̇": {
+		command: "textgravedot",
+		mode: "text"
+	},
+	"́": {
+		command: "'",
+		mode: "text"
+	},
+	"́̄": {
+		command: "textacutemacron",
+		mode: "text"
+	},
+	"́̇": {
+		command: "textdotacute",
+		mode: "text"
+	},
+	"́̌": {
+		command: "textacutewedge",
+		mode: "text"
+	},
+	"̂": {
+		command: "^",
+		mode: "text"
+	},
+	"̂̇": {
+		command: "textcircumdot",
+		mode: "text"
+	},
+	"̃": {
+		command: "~",
+		mode: "text"
+	},
+	"̃̇": {
+		command: "texttildedot",
+		mode: "text"
+	},
+	"̄": {
+		command: "=",
+		mode: "text"
+	},
+	"̄̀": {
+		command: "textgravemacron",
+		mode: "text"
+	},
+	"̄́": {
+		command: "textacutemacron",
+		mode: "text"
+	},
+	"̄̆": {
+		command: "textbrevemacron",
+		mode: "text"
+	},
+	"̄̊": {
+		command: "textringmacron",
+		mode: "text"
+	},
+	"̅": {
+		command: "overline",
+		mode: "math"
+	},
+	"̆": {
+		command: "u",
+		mode: "text"
+	},
+	"̆̄": {
+		command: "textbrevemacron",
+		mode: "text"
+	},
+	"̆̇": {
+		command: "textdotbreve",
+		mode: "text"
+	},
+	"̇": {
+		command: ".",
+		mode: "text"
+	},
+	"̇̀": {
+		command: "textgravedot",
+		mode: "text"
+	},
+	"̇́": {
+		command: "textdotacute",
+		mode: "text"
+	},
+	"̇̂": {
+		command: "textcircumdot",
+		mode: "text"
+	},
+	"̇̃": {
+		command: "texttildedot",
+		mode: "text"
+	},
+	"̇̆": {
+		command: "textdotbreve",
+		mode: "text"
+	},
+	"̈": {
+		command: "\"",
+		mode: "text"
+	},
+	"̊": {
+		command: "r",
+		mode: "text"
+	},
+	"̊̄": {
+		command: "textringmacron",
+		mode: "text"
+	},
+	"̋": {
+		command: "H",
+		mode: "text"
+	},
+	"̌": {
+		command: "v",
+		mode: "text"
+	},
+	"̌́": {
+		command: "textacutewedge",
+		mode: "text"
+	},
+	"̍": {
+		command: "textvbaraccent",
+		mode: "text"
+	},
+	"̎": {
+		command: "textdoublevbaraccent",
+		mode: "text"
+	},
+	"̏": {
+		command: "textdoublegrave",
+		mode: "text"
+	},
+	"̐": {
+		command: "textdotbreve",
+		mode: "text"
+	},
+	"̖": {
+		command: "textsubgrave",
+		mode: "text"
+	},
+	"̘": {
+		command: "textadvancing",
+		mode: "text"
+	},
+	"̙": {
+		command: "textretracting",
+		mode: "text"
+	},
+	"̚": {
+		command: "textcorner",
+		mode: "text"
+	},
+	"̜": {
+		command: "textsublhalfring",
+		mode: "text"
+	},
+	"̝": {
+		command: "textraising",
+		mode: "text"
+	},
+	"̞": {
+		command: "textlowering",
+		mode: "text"
+	},
+	"̟": {
+		command: "textsubplus",
+		mode: "text"
+	},
+	"ÌŁ": {
+		command: "d",
+		mode: "text"
+	},
+	"Ì€": {
+		command: "textsubumlaut",
+		mode: "text"
+	},
+	"Ì„": {
+		command: "textsubring",
+		mode: "text"
+	},
+	"̧": {
+		command: "c",
+		mode: "text"
+	},
+	"Ìš": {
+		command: "k",
+		mode: "text"
+	},
+	"Ì©": {
+		command: "textsyllabic",
+		mode: "text"
+	},
+	"ÌȘ": {
+		command: "textsubbridge",
+		mode: "text"
+	},
+	"ÌŹ": {
+		command: "textsubwedge",
+		mode: "text"
+	},
+	"ÌŻ": {
+		command: "textsubarch",
+		mode: "text"
+	},
+	"Ì°": {
+		command: "textsubtilde",
+		mode: "text"
+	},
+	"̱": {
+		command: "textsubbar",
+		mode: "text"
+	},
+	"ÌŽ": {
+		command: "textsuperimposetilde",
+		mode: "text"
+	},
+	"Ìč": {
+		command: "textsubrhalfring",
+		mode: "text"
+	},
+	"Ìș": {
+		command: "textinvsubbridge",
+		mode: "text"
+	},
+	"Ì»": {
+		command: "textsubsquare",
+		mode: "text"
+	},
+	"̌": {
+		command: "textseagull",
+		mode: "text"
+	},
+	"̜": {
+		command: "textovercross",
+		mode: "text"
+	}
+};
+var tounicode = {
+	"\"": "̈",
+	"'": "́",
+	".": "̇",
+	"=": "̄",
+	H: "̋",
+	"^": "̂",
+	"`": "̀",
+	acute: "́",
+	bar: "̄",
+	breve: "̆",
+	c: "̧",
+	d: "ÌŁ",
+	ddot: "̈",
+	dot: "̇",
+	grave: "̀",
+	hat: "̂",
+	k: "Ìš",
+	mathring: "̊",
+	overline: "̅",
+	r: "̊",
+	textacutemacron: "̄́",
+	textacutewedge: "̌́",
+	textadvancing: "̘",
+	textbrevemacron: "̄̆",
+	textcircumdot: "̇̂",
+	textcorner: "̚",
+	textdotacute: "́̇",
+	textdotbreve: "̐",
+	textdoublegrave: "̏",
+	textdoublevbaraccent: "̎",
+	textgravedot: "̇̀",
+	textgravemacron: "̀̄",
+	textinvsubbridge: "Ìș",
+	textlowering: "̞",
+	textovercross: "̜",
+	textraising: "̝",
+	textretracting: "̙",
+	textringmacron: "̄̊",
+	textseagull: "̌",
+	textsubarch: "ÌŻ",
+	textsubbar: "̱",
+	textsubbridge: "ÌȘ",
+	textsubgrave: "̖",
+	textsublhalfring: "̜",
+	textsubplus: "̟",
+	textsubrhalfring: "Ìč",
+	textsubring: "Ì„",
+	textsubsquare: "Ì»",
+	textsubtilde: "Ì°",
+	textsubumlaut: "Ì€",
+	textsubwedge: "ÌŹ",
+	textsuperimposetilde: "ÌŽ",
+	textsyllabic: "Ì©",
+	texttildedot: "̇̃",
+	textvbaraccent: "̍",
+	tilde: "̃",
+	u: "̆",
+	underbar: "̱",
+	v: "̌",
+	"~": "̃"
+};
+var require$$4 = {
+	commands: commands,
+	tolatex: tolatex,
+	tounicode: tounicode
+};
+
+var unicode2latex = {
+  ascii: require$$0$1,
+  ascii_bibtex_creator: require$$1,
+  unicode: require$$2,
+  latex: require$$3,
+  diacritics: require$$4,
+};
+
+var categories = [
+    {
+        'name': 'C',
+        'alias': 'Other',
+        'isBmpLast': true,
+        'bmp': '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF',
+        'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]'
+    },
+    {
+        'name': 'Cc',
+        'alias': 'Control',
+        'bmp': '\0-\x1F\x7F-\x9F'
+    },
+    {
+        'name': 'Cf',
+        'alias': 'Format',
+        'bmp': '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB',
+        'astral': '\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]'
+    },
+    {
+        'name': 'Cn',
+        'alias': 'Unassigned',
+        'bmp': '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF',
+        'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]'
+    },
+    {
+        'name': 'Co',
+        'alias': 'Private_Use',
+        'bmp': '\uE000-\uF8FF',
+        'astral': '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]'
+    },
+    {
+        'name': 'Cs',
+        'alias': 'Surrogate',
+        'bmp': '\uD800-\uDFFF'
+    },
+    {
+        'name': 'L',
+        'alias': 'Letter',
+        'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
+        'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]'
+    },
+    {
+        'name': 'LC',
+        'alias': 'Cased_Letter',
+        'bmp': 'A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7BF\uA7C2-\uA7CA\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A',
+        'astral': '\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDD00-\uDD43]'
+    },
+    {
+        'name': 'Ll',
+        'alias': 'Lowercase_Letter',
+        'bmp': 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7C8\uA7CA\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A',
+        'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]'
+    },
+    {
+        'name': 'Lm',
+        'alias': 'Modifier_Letter',
+        'bmp': '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F',
+        'astral': '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD838[\uDD37-\uDD3D]|\uD83A\uDD4B'
+    },
+    {
+        'name': 'Lo',
+        'alias': 'Other_Letter',
+        'bmp': '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC',
+        'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD838[\uDD00-\uDD2C\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]'
+    },
+    {
+        'name': 'Lt',
+        'alias': 'Titlecase_Letter',
+        'bmp': '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC'
+    },
+    {
+        'name': 'Lu',
+        'alias': 'Uppercase_Letter',
+        'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C7\uA7C9\uA7F5\uFF21-\uFF3A',
+        'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]'
+    },
+    {
+        'name': 'M',
+        'alias': 'Mark',
+        'bmp': '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F',
+        'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]'
+    },
+    {
+        'name': 'Mc',
+        'alias': 'Spacing_Mark',
+        'bmp': '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC',
+        'astral': '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]'
+    },
+    {
+        'name': 'Me',
+        'alias': 'Enclosing_Mark',
+        'bmp': '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672'
+    },
+    {
+        'name': 'Mn',
+        'alias': 'Nonspacing_Mark',
+        'bmp': '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF\u1AC0\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F',
+        'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]'
+    },
+    {
+        'name': 'N',
+        'alias': 'Number',
+        'bmp': '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19',
+        'astral': '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]'
+    },
+    {
+        'name': 'Nd',
+        'alias': 'Decimal_Number',
+        'bmp': '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19',
+        'astral': '\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]'
+    },
+    {
+        'name': 'Nl',
+        'alias': 'Letter_Number',
+        'bmp': '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF',
+        'astral': '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]'
+    },
+    {
+        'name': 'No',
+        'alias': 'Other_Number',
+        'bmp': '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835',
+        'astral': '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]'
+    },
+    {
+        'name': 'P',
+        'alias': 'Punctuation',
+        'bmp': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65',
+        'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]'
+    },
+    {
+        'name': 'Pc',
+        'alias': 'Connector_Punctuation',
+        'bmp': '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F'
+    },
+    {
+        'name': 'Pd',
+        'alias': 'Dash_Punctuation',
+        'bmp': '\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D',
+        'astral': '\uD803\uDEAD'
+    },
+    {
+        'name': 'Pe',
+        'alias': 'Close_Punctuation',
+        'bmp': '\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63'
+    },
+    {
+        'name': 'Pf',
+        'alias': 'Final_Punctuation',
+        'bmp': '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21'
+    },
+    {
+        'name': 'Pi',
+        'alias': 'Initial_Punctuation',
+        'bmp': '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20'
+    },
+    {
+        'name': 'Po',
+        'alias': 'Other_Punctuation',
+        'bmp': '!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65',
+        'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]'
+    },
+    {
+        'name': 'Ps',
+        'alias': 'Open_Punctuation',
+        'bmp': '\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62'
+    },
+    {
+        'name': 'S',
+        'alias': 'Symbol',
+        'bmp': '\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD',
+        'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]'
+    },
+    {
+        'name': 'Sc',
+        'alias': 'Currency_Symbol',
+        'bmp': '\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6',
+        'astral': '\uD807[\uDFDD-\uDFE0]|\uD838\uDEFF|\uD83B\uDCB0'
+    },
+    {
+        'name': 'Sk',
+        'alias': 'Modifier_Symbol',
+        'bmp': '\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3',
+        'astral': '\uD83C[\uDFFB-\uDFFF]'
+    },
+    {
+        'name': 'Sm',
+        'alias': 'Math_Symbol',
+        'bmp': '\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC',
+        'astral': '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]'
+    },
+    {
+        'name': 'So',
+        'alias': 'Other_Symbol',
+        'bmp': '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD',
+        'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838\uDD4F|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]'
+    },
+    {
+        'name': 'Z',
+        'alias': 'Separator',
+        'bmp': ' \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000'
+    },
+    {
+        'name': 'Zl',
+        'alias': 'Line_Separator',
+        'bmp': '\u2028'
+    },
+    {
+        'name': 'Zp',
+        'alias': 'Paragraph_Separator',
+        'bmp': '\u2029'
+    },
+    {
+        'name': 'Zs',
+        'alias': 'Space_Separator',
+        'bmp': ' \xA0\u1680\u2000-\u200A\u202F\u205F\u3000'
+    }
+];
+
+var jabref = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parse = void 0;
+function decode(s, sep = ';') {
+    s = s.replace(/\n/g, '');
+    let pos = 0;
+    const records = [''];
+    while (pos < s.length) {
+        switch (s[pos]) {
+            case '\\':
+                pos++;
+                records[0] += s[pos];
+                break;
+            case sep:
+                records.unshift('');
+                break;
+            default:
+                records[0] += s[pos];
+        }
+        pos++;
+    }
+    return records.reverse().filter(record => record);
+}
+const prefixes = {
+    fileDirectory: 'jabref-meta: fileDirectory:',
+    groupsversion: 'jabref-meta: groupsversion:',
+    groupstree: 'jabref-meta: groupstree:',
+    grouping: 'jabref-meta: grouping:',
+};
+/**
+ * Import the JabRef groups from the `@string` comments in which they were stored. You would typically pass the comments parsed by [[bibtex.parse]] in here.
+ *
+ * JabRef knows several group types, and this parser parses most, but not all of them:
+ *
+ * * independent group: the keys listed in the group are the entries that are considered to belong to it
+ * * intersection: the keys listed in the group are considered to belong to the group if they're also in the parent group
+ * * union: the keys listed in the group are considered to belong to the group, and also the keys that are in the parent group
+ * * query: not supported by this parser
+ */
+function parse(comments) {
+    const result = {
+        root: [],
+        groups: {},
+        fileDirectory: '',
+        version: '',
+    };
+    const levels = [];
+    const decoded = {
+        fileDirectory: null,
+        groupsversion: null,
+        groupstree: null,
+        grouping: null,
+    };
+    for (const comment of comments) {
+        for (const [meta, prefix] of Object.entries(prefixes)) {
+            if (comment.startsWith(prefix)) {
+                decoded[meta] = decode(comment.substring(prefix.length));
+            }
+        }
+    }
+    result.version = decoded.groupsversion && decoded.groupsversion[0];
+    result.fileDirectory = decoded.fileDirectory && decoded.fileDirectory[0];
+    for (const tree of ['groupstree', 'grouping']) {
+        if (!decoded[tree])
+            continue;
+        for (const encoded of decoded[tree]) {
+            const fields = decode(encoded);
+            const level_type_name = decode(fields.shift(), ':');
+            const m = /^([0-9]+) (.+)/.exec(level_type_name[0]);
+            if (!m)
+                break;
+            const level = parseInt(m[1]);
+            const type = m[2]; // test for StaticGroup?
+            if (type === 'AllEntriesGroup')
+                continue; // root
+            const name = level_type_name[1];
+            const intersection = decode(fields.shift())[0];
+            const keys = tree === 'grouping' ? [] : fields.map(field => decode(field)[0]);
+            const group = {
+                name,
+                entries: keys,
+                groups: [],
+            };
+            result.groups[name] = result.groups[name] || group;
+            if (levels.length < level) {
+                levels.push(group);
+            }
+            else {
+                levels[level - 1] = group;
+            }
+            if (level === 1) {
+                result.root.push(group);
+            }
+            else {
+                const parent = levels[level - 2];
+                switch (intersection) {
+                    case '0': // independent
+                        break;
+                    case '1': // intersect
+                        group.entries = group.entries.filter(key => parent.entries.includes(key));
+                        break;
+                    case '2': // union
+                        group.entries = group.entries.concat(parent.entries.filter(key => !group.entries.includes(key)));
+                        break;
+                }
+                levels[level - 2].groups.push(group);
+            }
+        }
+    }
+    return result;
+}
+exports.parse = parse;
+
+});
+
+var bibtexParser = createCommonjsModule(function (module, exports) {
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.jabref = exports.chunker = exports.ast = exports.parse = void 0;
+
+
+
+class ParserError extends Error {
+    constructor(message, node) {
+        super(message); // 'Error' breaks prototype chain here
+        Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain
+        this.name = this.constructor.name;
+        this.node = node;
+    }
+}
+class TeXError extends Error {
+    constructor(message, node, text) {
+        super(message); // 'Error' breaks prototype chain here
+        Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain
+        this.name = this.constructor.name;
+        this.node = node;
+        this.text = text;
+    }
+}
+
+const charClass = {
+    Lu: categories.filter(cat => ['Uppercase_Letter', 'Titlecase_Letter'].includes(cat.alias)).map(cat => cat.bmp).join(''),
+    Ll: categories.find(cat => cat.alias === 'Lowercase_Letter').bmp,
+    LnotLu: categories.filter(cat => ['Lowercase_Letter', 'Modifier_Letter', 'Other_Letter', 'Nonspacing_Mark', 'Spacing_Mark', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''),
+    P: categories.find(cat => cat.alias === 'Punctuation').bmp,
+    L: categories.find(cat => cat.alias === 'Letter').bmp,
+    N: categories.filter(cat => ['Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''),
+    AlphaNum: categories.filter(cat => ['Letter', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''),
+    LC: categories.find(cat => cat.alias === 'Cased_Letter').bmp,
+};
+const marker = {
+    and: '\u0001',
+    comma: '\u0002',
+    space: '\u0003',
+    literal: '\u0004',
+    markup: '\u0005',
+    re: {
+        and: /./,
+        comma: /./,
+        space: /./,
+        literal: /./,
+        literalName: /./,
+    },
+    clean(s) {
+        return s.replace(marker.re.space, ' ').replace(marker.re.comma, ', ').replace(marker.re.literal, '');
+    },
+};
+marker.re = {
+    and: new RegExp(marker.and, 'g'),
+    comma: new RegExp(marker.comma, 'g'),
+    space: new RegExp(marker.space, 'g'),
+    literal: new RegExp(marker.literal, 'g'),
+    literalName: new RegExp(`^${marker.literal}([^${marker.literal}]*)${marker.literal}$`),
+};
+const preserveCase = {
+    leadingCap: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]+[${charClass.P}]?$`),
+    allCaps: new RegExp(`^[${charClass.Lu}${charClass.N}]{2,}$`),
+    allLower: new RegExp(`^[${charClass.Ll}${charClass.N}]{2,}$`),
+    joined: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]*([-+][${charClass.L}${charClass.N}]+)*[${charClass.P}]*$`),
+    hasUpper: new RegExp(`[${charClass.Lu}]`),
+    hasLower: new RegExp(`[${charClass.Ll}]`),
+    isNumber: /^[0-9]+$/,
+    hasAlpha: new RegExp(`[${charClass.L}]`),
+    hasAlphaNum: new RegExp(`[${charClass.AlphaNum}]`),
+    notAlphaNum: new RegExp(`[^${charClass.AlphaNum}]`, 'g'),
+    sentenceStart: new RegExp(`(^|([\u2014:?!.]\\s+))[${charClass.Lu}]`, 'g'),
+    markup: /<\/?span[^>]*>/g,
+    acronym: new RegExp(`.*\\.${marker.markup}*[${charClass.Lu}]${marker.markup}*\\.$`),
+    notCaseSensitive: new RegExp(`[^${charClass.LC}]`),
+    isCaseSensitive: new RegExp(`[${charClass.LC}]`),
+    quoted: /("[^"]+")|(“[^“]+“)/g,
+};
+const fields = {
+    creator: [
+        'author',
+        'bookauthor',
+        'collaborator',
+        'commentator',
+        'director',
+        'editor',
+        'editora',
+        'editorb',
+        'editors',
+        'holder',
+        'scriptwriter',
+        'translator',
+    ],
+    title: [
+        'title',
+        'series',
+        'shorttitle',
+        'booktitle',
+        'type',
+        'origtitle',
+        'maintitle',
+        'eventtitle',
+    ],
+    unnest: [
+        'publisher',
+        'location',
+    ],
+    verbatim: [
+        'url',
+        'doi',
+        'file',
+        'files',
+        'eprint',
+        'verba',
+        'verbb',
+        'verbc',
+        'groups',
+    ],
+    html: [
+        'annotation',
+        'comment',
+        'annote',
+        'review',
+        'notes',
+        'note',
+    ],
+    unabbrev: [
+        'journal',
+        'journaltitle',
+        'journal-full',
+    ],
+};
+const english = [
+    'american',
+    'british',
+    'canadian',
+    'english',
+    'australian',
+    'newzealand',
+    'usenglish',
+    'ukenglish',
+    'en',
+    'eng',
+    'en-au',
+    'en-bz',
+    'en-ca',
+    'en-cb',
+    'en-gb',
+    'en-ie',
+    'en-jm',
+    'en-nz',
+    'en-ph',
+    'en-tt',
+    'en-us',
+    'en-za',
+    'en-zw',
+    'anglais',
+];
+class Parser {
+    constructor(options = {}) {
+        this.in_preamble = false;
+        this.preamble = [];
+        this.log = function (str) { }; // tslint:disable-line variable-name only-arrow-functions no-empty
+        for (const [option, value] of Object.entries(options)) {
+            if (typeof value === 'undefined')
+                delete options[option];
+        }
+        if (options.errorHandler === false) {
+            // tslint:disable-next-line only-arrow-functions no-empty
+            options.errorHandler = function (err) { };
+        }
+        else if (options.errorHandler === undefined) {
+            // tslint:disable-next-line only-arrow-functions
+            options.errorHandler = function (err) { throw err; };
+        }
+        if (typeof options.sentenceCase === 'boolean') {
+            options.sentenceCase = options.sentenceCase ? english : [];
+        }
+        else {
+            options.sentenceCase = options.sentenceCase || english;
+        }
+        if (!options.strings)
+            options.strings = {};
+        if (!options.unabbreviate)
+            options.unabbreviate = {};
+        if (options.raw) {
+            options.sentenceCase = false;
+            options.caseProtection = false;
+        }
+        this.options = Object.assign({ caseProtection: 'as-needed', verbatimFields: [/^citeulike-linkout-[0-9]+$/, ...fields.verbatim], verbatimCommands: ['url', 'href'], unnestFields: [...fields.title, ...fields.unnest, ...fields.verbatim], unnestMode: 'unwrap', htmlFields: fields.html, guessAlreadySentenceCased: true, markup: {} }, options);
+        const markup_defaults = {
+            enquote: { open: '\u201c', close: '\u201d' },
+            sub: { open: '', close: '' },
+            sup: { open: '', close: '' },
+            bold: { open: '', close: '' },
+            italics: { open: '', close: '' },
+            smallCaps: { open: '', close: '' },
+            caseProtect: { open: '', close: '' },
+            roman: { open: '', close: '' },
+            fixedWidth: { open: '', close: '' },
+        };
+        // patch in because the options will likely not have enquote and case-protect
+        for (const [markup, { open, close }] of Object.entries(markup_defaults)) {
+            this.options.markup[markup] = this.options.markup[markup] || { open, close };
+        }
+        for (const i of [1, 2, 3, 4]) { // tslint:disable-line:no-magic-numbers
+            this.options.markup[`h${i}`] = this.options.markup[`h${i}`] || { open: ``, close: `` };
+        }
+        this.unresolvedStrings = {};
+        this.errors = [];
+        this.comments = [];
+        this.entries = [];
+        this.strings = {};
+        this.newcommands = {};
+        this.default_strings = {
+            JAN: [this.text('01')],
+            FEB: [this.text('02')],
+            MAR: [this.text('03')],
+            APR: [this.text('04')],
+            MAY: [this.text('05')],
+            JUN: [this.text('06')],
+            JUL: [this.text('07')],
+            AUG: [this.text('08')],
+            SEP: [this.text('09')],
+            OCT: [this.text('10')],
+            NOV: [this.text('11')],
+            DEC: [this.text('12')],
+            ACMCS: [this.text('ACM Computing Surveys')],
+            ACTA: [this.text('Acta Informatica')],
+            CACM: [this.text('Communications of the ACM')],
+            IBMJRD: [this.text('IBM Journal of Research and Development')],
+            IBMSJ: [this.text('IBM Systems Journal')],
+            IEEESE: [this.text('IEEE Transactions on Software Engineering')],
+            IEEETC: [this.text('IEEE Transactions on Computers')],
+            IEEETCAD: [this.text('IEEE Transactions on Computer-Aided Design of Integrated Circuits')],
+            IPL: [this.text('Information Processing Letters')],
+            JACM: [this.text('Journal of the ACM')],
+            JCSS: [this.text('Journal of Computer and System Sciences')],
+            SCP: [this.text('Science of Computer Programming')],
+            SICOMP: [this.text('SIAM Journal on Computing')],
+            TOCS: [this.text('ACM Transactions on Computer Systems')],
+            TODS: [this.text('ACM Transactions on Database Systems')],
+            TOG: [this.text('ACM Transactions on Graphics')],
+            TOMS: [this.text('ACM Transactions on Mathematical Software')],
+            TOOIS: [this.text('ACM Transactions on Office Information Systems')],
+            TOPLAS: [this.text('ACM Transactions on Programming Languages and Systems')],
+            TCS: [this.text('Theoretical Computer Science')],
+        };
+    }
+    ast(input, clean = true) {
+        const _ast = [];
+        for (const chunk of chunker.parse(input)) {
+            let chunk_ast = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands }));
+            if (clean)
+                chunk_ast = this.clean(chunk_ast);
+            _ast.push(chunk_ast);
+        }
+        return _ast;
+    }
+    parse(input) {
+        return this.options.async ? this.parseAsync(input) : this.parseSync(input);
+    }
+    parseSync(input) {
+        for (const chunk of chunker.parse(input)) {
+            this.parseChunk(chunk);
+        }
+        return this.parsed();
+    }
+    async parseAsync(input) {
+        for (const chunk of await chunker.parse(input, { async: true })) {
+            this.parseChunk(chunk);
+        }
+        return this.parsed();
+    }
+    parsed() {
+        this.field = null;
+        const strings = {};
+        this.cleaning = { type: 'other' };
+        for (const [key, value] of Object.entries(this.strings)) {
+            this.field = {
+                name: '@string',
+                text: '',
+                level: 0,
+                preserveRanges: null,
+                words: {
+                    upper: 0,
+                    lower: 0,
+                    other: 0,
+                },
+            };
+            this.convert(this.clean(value));
+            strings[key] = this.field.text;
+        }
+        return {
+            errors: this.errors,
+            entries: this.entries,
+            comments: this.comments,
+            strings,
+            preamble: this.preamble,
+        };
+    }
+    preserve(start, end, reason) {
+        if (!this.field.preserveRanges)
+            return;
+        if (!end) {
+            this.field.preserveRanges = null;
+            return;
+        }
+        /*
+        this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < start || range.end > end)
+        if (this.field.preserveRanges.find(range => range.start <= start && range.end >= end)) return
+        */
+        /*
+        if (this.field.preserveRanges && this.field.preserveRanges.length) {
+          const last = this.field.preserveRanges[this.field.preserveRanges.length - 1]
+          if (start < last.start) throw new Error(JSON.stringify({...last, new: { start, end, reason }, text: this.field.text}))
+        }
+        */
+        this.field.preserveRanges.push({ start, end, reason });
+    }
+    parseChunk(chunk) {
+        this.chunk = chunk.text;
+        try {
+            let bib = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands }));
+            if (bib.kind !== 'Bibliography')
+                throw new Error(this.show(bib));
+            bib = this.clean(bib);
+            for (const entity of bib.children) {
+                switch (entity.kind) {
+                    case 'Entry':
+                    case 'BracedComment':
+                    case 'LineComment':
+                    case 'PreambleExpression':
+                        this.convert(entity);
+                        break;
+                    case 'StringDeclaration':
+                    case 'NonEntryText':
+                        break;
+                }
+            }
+            return bib;
+        }
+        catch (err) {
+            if (!err.location)
+                throw err;
+            this.errors.push({
+                message: err.message,
+                line: err.location.start.line + chunk.offset.line,
+                column: err.location.start.column,
+                source: this.chunk,
+            });
+            return null;
+        }
+    }
+    show(o) {
+        // tslint:disable-next-line prefer-template
+        let text = JSON.stringify(o);
+        if (this.chunk)
+            text += '\n' + this.chunk.trim();
+        return text;
+    }
+    text(value = '') {
+        return { kind: 'Text', value, mode: 'text' };
+    }
+    error(err, returnvalue) {
+        if (typeof this.options.errorHandler === 'function')
+            this.options.errorHandler(err);
+        return returnvalue;
+    }
+    condense(node) {
+        // apply cleaning to resulting children
+        node.value = node.value.map(child => this.clean(child));
+        // unpack redundant blocks
+        node.value = node.value.reduce((acc, child, i) => {
+            if (child.kind === 'Block' && !child.case && Object.keys(child.markup).length === 0) {
+                acc = acc.concat(child.value);
+            }
+            else {
+                acc.push(child);
+            }
+            return acc;
+        }, []);
+        // condense text nodes to make whole words for sentence casing
+        node.value = node.value.reduce((acc, child, i) => {
+            if (acc.length === 0) {
+                acc.push(child);
+                return acc;
+            }
+            const last = acc[acc.length - 1];
+            const next = node.value[i + 1];
+            if (this.options.caseProtection === 'strict' && this.onlyCaseProtected(last) && child.kind === 'Text' && !child.value.match(preserveCase.isCaseSensitive) && this.onlyCaseProtected(next)) {
+                last.value.push(child);
+                delete last.source;
+                return acc;
+            }
+            if (last.kind === 'Block' && child.kind === 'Block' && Object.keys(last.markup).sort().join('/') === Object.keys(child.markup).sort().join('/')) {
+                last.value = last.value.concat(child.value);
+                delete last.source;
+                return acc;
+            }
+            if (last.kind === 'Text' && child.kind === 'Text' && last.mode === child.mode) {
+                last.value += child.value;
+                delete last.source;
+                return acc;
+            }
+            acc.push(child);
+            return acc;
+        }, []);
+    }
+    onlyCaseProtected(node) {
+        return (node === null || node === void 0 ? void 0 : node.kind) === 'Block' && node.case === 'protect' && Object.keys(node.markup).join('/') === '';
+    }
+    argument(node, kind) {
+        if (!node.arguments || !node.arguments.required.length)
+            return (kind === 'none');
+        // expect 'n' text arguments
+        if (typeof kind === 'number') {
+            if (node.arguments.required.length !== kind)
+                return false;
+            return node.arguments.required;
+        }
+        // return first argument if it's the only one
+        if (node.arguments.required.length !== 1)
+            return false;
+        // loose checking for text
+        if (kind === 'text') {
+            const first = node.arguments.required[0];
+            if (first.kind === 'Block' && first.value.length === 1) {
+                if (first.value[0].kind === 'Text')
+                    return first.value[0].value;
+            }
+            // fall back to strict kind check
+            kind = 'Text';
+        }
+        // return first argument if it's the only one and is of the specified kind
+        if (node.arguments.required.length !== 1 || node.arguments.required[0].kind !== kind)
+            return false;
+        switch (kind) {
+            case 'Text':
+                return node.arguments.required[0].value;
+            case 'RegularCommand':
+            case 'Block':
+                return node.arguments.required[0];
+        }
+        return false;
+    }
+    clean(node) {
+        if (Array.isArray(node))
+            return node.map(child => this.clean(child));
+        delete node.loc;
+        switch (node.kind) {
+            case 'InlineMath':
+            case 'DisplayMath':
+                return this.clean_block(node);
+            case 'Environment':
+                return this.clean_environment(node);
+            case 'Block':
+                return this.clean_block(node);
+            case 'Bibliography':
+                return this.clean_bib(node);
+            case 'RegularCommand':
+                return this.clean_command(node);
+            case 'DiacriticCommand':
+                return this.clean_diacritic(node);
+            case 'Entry':
+                return this.clean_entry(node);
+            case 'Field':
+                return this.options.raw ? node : this.clean_field(node);
+            case 'StringDeclaration':
+                return this.clean_stringdecl(node);
+            case 'StringReference':
+                return this.clean_stringref(node);
+            case 'SubscriptCommand':
+            case 'SuperscriptCommand':
+                return this.clean_script(node);
+            case 'SymbolCommand':
+                return this.clean_symbol(node);
+            case 'PreambleExpression':
+                return this.clean_preamble(node);
+            case 'Number':
+            case 'Text':
+            case 'BracedComment':
+            case 'LineComment':
+                return node;
+            default:
+                return this.error(new ParserError(`no cleanup method for ${this.show(node)}`, node), this.text());
+        }
+    }
+    clean_preamble(node) {
+        this.in_preamble = true;
+        const clean = this.clean(node.value);
+        this.in_preamble = false;
+        return clean;
+    }
+    clean_bib(node) {
+        node.children = node.children.filter(child => child.kind !== 'NonEntryText').map(child => this.clean(child));
+        return node;
+    }
+    clean_stringdecl(node) {
+        this.strings[node.name.toUpperCase()] = node.value;
+        return node;
+    }
+    clean_stringref(node) {
+        var _a;
+        const name = node.name.toUpperCase();
+        const _string = this.strings[name]
+            || this.options.strings[name]
+            || this.default_strings[name]
+            || (fields.unabbrev.includes(this.cleaning.name) && ((_a = this.options.unabbreviate[name]) === null || _a === void 0 ? void 0 : _a.text) && [this.text(this.options.unabbreviate[name].text)]);
+        if (!_string) {
+            if (!this.unresolvedStrings[name])
+                this.errors.push({ message: `Unresolved @string reference ${JSON.stringify(node.name)}` });
+            this.unresolvedStrings[name] = true;
+        }
+        return this.clean({
+            kind: 'Block',
+            // if the string isn't found, add it as-is but exempt it from sentence casing
+            case: _string ? undefined : 'preserve',
+            markup: {},
+            value: _string ? JSON.parse(JSON.stringify(_string)) : [this.text(node.name)],
+        });
+    }
+    clean_entry(node) {
+        const shortjournals = [];
+        for (const field of node.fields) {
+            if (fields.unabbrev.includes(field.name) && Array.isArray(field.value)) {
+                const abbr = field.value.map(v => v.source).join('');
+                const journal = this.options.unabbreviate[abbr];
+                if (journal) {
+                    shortjournals.push(Object.assign(Object.assign({}, JSON.parse(JSON.stringify(field))), { name: 'shortjournal' }));
+                    field.value = JSON.parse(JSON.stringify(journal.ast));
+                }
+            }
+        }
+        node.fields = node.fields.concat(shortjournals).map(child => this.clean(child));
+        return node;
+    }
+    startCleaning(name) {
+        name = name.toLowerCase();
+        if (fields.title.includes(name)) {
+            this.cleaning = { type: 'title', name };
+        }
+        else if (fields.creator.includes(name.replace(/s$/, ''))) {
+            this.cleaning = { type: 'creator', name: name.replace(/s$/, '') };
+        }
+        else {
+            this.cleaning = { type: 'other', name };
+        }
+    }
+    stripNoCase(node, strip, preserve) {
+        switch (node.kind) {
+            case 'RegularCommand':
+                // a bit cheaty to assume these to be nocased, but it's just more likely to be what people want
+                if (['chsf', 'bibstring', 'cite'].includes(node.command))
+                    strip = true;
+                node.arguments.required.map(arg => this.stripNoCase(arg, strip, preserve));
+                break;
+            case 'Block':
+            case 'InlineMath':
+            case 'DisplayMath':
+                if (strip && node.case === 'protect') {
+                    if (preserve) {
+                        node.case = 'preserve';
+                    }
+                    else {
+                        delete node.case;
+                    }
+                }
+                node.value.map(v => this.stripNoCase(v, strip || node.case === 'protect', preserve));
+                break;
+            case 'Field':
+                if (Array.isArray(node.value))
+                    node.value.map(v => this.stripNoCase(v, strip, preserve));
+                break;
+        }
+    }
+    isVerbatimField(name) {
+        return !!this.options.verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p));
+    }
+    clean_field(node) {
+        this.startCleaning(node.name);
+        this.stripNoCase(node, !this.options.caseProtection || this.isVerbatimField(node.name), this.options.sentenceCase.length === 0);
+        if (Array.isArray(node.value))
+            this.condense(node);
+        return node;
+    }
+    clean_script(node) {
+        let m, value, singlechar;
+        // recognize combined forms like \^\circ
+        if (singlechar = unicode2latex.latex[node.source])
+            return this.text(singlechar);
+        if ((m = node.source.match(/^([\^_])([^{}]+)$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`])))
+            return this.text(singlechar);
+        if ((m = node.source.match(/^([\^_])\{([^{}]+)\}$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`])))
+            return this.text(singlechar);
+        const cmd = node.kind === 'SuperscriptCommand' ? '^' : '_';
+        if (typeof node.value === 'string' && (singlechar = unicode2latex.latex[`${cmd}${node.value}`] || unicode2latex.latex[`${cmd}{${node.value}}`])) {
+            return this.text(singlechar);
+        }
+        if (typeof node.value === 'string') {
+            value = [this.text(node.value)];
+        }
+        else if (!Array.isArray(node.value)) {
+            value = [node.value];
+        }
+        else {
+            value = node.value;
+        }
+        const mode = node.kind === 'SuperscriptCommand' ? 'sup' : 'sub';
+        return this.clean({
+            kind: 'Block',
+            markup: { [mode]: true },
+            value,
+        });
+    }
+    clean_environment(node) {
+        this.condense(node);
+        return node;
+    }
+    needsProtection(word) {
+        return !word.match(preserveCase.hasUpper) && word.match(preserveCase.hasLower);
+    }
+    clean_block(node) {
+        var _a;
+        this.condense(node);
+        if (this.options.caseProtection !== 'strict' && ((_a = this.cleaning) === null || _a === void 0 ? void 0 : _a.type) === 'title' && node.case === 'protect') {
+            // test whether we can get away with skipping case protection because it contains all words that will be preserved anyway when converting back to Title Case
+            let preserve = true;
+            for (const child of node.value) {
+                if (child.kind === 'Text') {
+                    const value = child.value.trim();
+                    preserve = !value.match(preserveCase.isCaseSensitive) || !value.split(/\s+/).find(word => this.needsProtection(word));
+                }
+                else {
+                    preserve = false;
+                }
+                if (!preserve)
+                    break;
+            }
+            if (preserve)
+                node.case = 'preserve';
+        }
+        if (node.kind === 'Block') {
+            for (const [markup, on] of Object.entries(node.markup)) {
+                if (!on)
+                    delete node.markup[markup];
+            }
+        }
+        return node;
+    }
+    clean_diacritic(node) {
+        const char = node.dotless ? `\\${node.character}` : node.character;
+        let unicode = unicode2latex.latex[`\\${node.mark}{${char}}`]
+            || unicode2latex.latex[`\\${node.mark}${char}`]
+            || unicode2latex.latex[`{\\${node.mark} ${char}}`]
+            || unicode2latex.latex[`{\\${node.mark}${char}}`]
+            || unicode2latex.latex[`\\${node.mark} ${char}`];
+        if (!unicode && !node.dotless && node.character.length === 1 && unicode2latex.diacritics.tounicode[node.mark])
+            unicode = node.character + unicode2latex.diacritics.tounicode[node.mark];
+        if (!unicode && !this.in_preamble)
+            return this.error(new TeXError(`Unhandled \\${node.mark}{${char}}`, node, this.chunk), this.text());
+        return this.text(unicode);
+    }
+    clean_symbol(node) {
+        if (node.command === '\\')
+            return this.text('\n');
+        return this.text(unicode2latex.latex[`\\${node.command}`] || node.command);
+    }
+    first_text_block(node) {
+        if (!node)
+            return null;
+        if (node.kind === 'Block') {
+            for (const child of node.value) {
+                switch (child.kind) {
+                    case 'Text':
+                        return child.value ? node : null;
+                    case 'Block':
+                        const candidate = this.first_text_block(child);
+                        if (candidate)
+                            return candidate;
+                        break;
+                    default:
+                        return null;
+                }
+            }
+        }
+        else {
+            return null;
+        }
+    }
+    clean_command(node) {
+        var _a;
+        let arg, unicode;
+        if (unicode = unicode2latex.latex[node.source])
+            return this.text(unicode);
+        switch (node.command) {
+            case 'newcommand':
+                if (((_a = node.arguments) === null || _a === void 0 ? void 0 : _a.required.length) === 2
+                    && node.arguments.required[0].kind === 'Block'
+                    && node.arguments.required[0].value.length === 1
+                    && node.arguments.required[0].value[0].kind === 'RegularCommand'
+                    && node.arguments.required[1].kind === 'Block') {
+                    this.newcommands[node.arguments.required[0].value[0].command] = node.arguments.required[1].value;
+                    return this.text();
+                }
+                // console.log('newcommand?', JSON.stringify(node, null, 2))
+                break;
+            case 'item':
+                return { kind: 'Markup', value: '
  • ', source: node.source }; + case 'frac': + if (arg = this.argument(node, 2)) { + if (arg[0].kind === 'Text' && arg[1].kind === 'Text' && (unicode = unicode2latex.latex[`\\frac{${arg[0].value}}{${arg[1].value}}`])) + return this.text(unicode); + return this.clean({ + kind: 'Block', + case: 'protect', + markup: {}, + value: [ + { kind: 'Block', markup: { sup: true }, value: [arg[0]] }, + this.text('\u2044'), + { kind: 'Block', markup: { sub: true }, value: [arg[1]] }, + ], + }); + } + break; + // ignore + case 'vspace': + case 'vphantom': + case 'path': + case 'aftergroup': + case 'ignorespaces': + case 'relax': + case 'noopsort': + case 'ifdefined': + case 'DeclarePrefChars': + case 'else': + case 'fi': + case 'makeatletter': + return this.text(); + case 'ElsevierGlyph': + if (arg = this.argument(node, 'Text')) { + if (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]) + return this.text(unicode); + return this.text(String.fromCharCode(parseInt(arg, 16))); + } + break; + case 'chsf': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'bibstring': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'cite': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsuperscript': + case 'sp': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`^{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsubscript': + case 'sb': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`_{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsc': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'enquote': + case 'mkbibquote': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textbf': + case 'mkbibbold': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'section': + case 'subsection': + case 'subsubsection': + case 'subsubsubsection': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'mkbibitalic': + case 'mkbibemph': + case 'textit': + case 'emph': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + if (arg = this.argument(node, 'Text')) + return this.clean({ kind: 'Block', markup: { italics: true }, value: [this.text(arg)] }); + break; + case 'bibcyr': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'hspace': + case 'mathrm': + case 'textrm': + case 'ocirc': + case 'mbox': + if (arg = this.argument(node, 'text')) { + unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]; + return this.text(unicode || (node.command === 'hspace' ? ' ' : arg)); + } + else if (!node.arguments.required.length) { + return this.text(); + } + else if (arg = this.argument(node, 'Block')) { + return this.clean(arg); + } + break; + // just take the URL? Not the label? + case 'href': + if (arg = this.argument(node, 2)) + return this.clean(arg[0]); + break; + case 'url': + if (arg = this.argument(node, 'Text')) + return this.text(arg); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'sl': + case 'em': + case 'it': + case 'itshape': + case 'bf': + case 'bfseries': + case 'sc': + case 'scshape': + case 'tt': + case 'rm': + case 'sf': + case 'verb': + // handled in the grammar + return this.text(); + // wouldn't know what to do with these + case 'left': + case 'right': + return this.text(); + case 'par': + return this.text('\n\n'); + case 'cyr': + if (this.argument(node, 'none')) + return this.text(); + break; + case 'polhk': + if (unicode = this.argument(node, 'text')) { + if (unicode.length === 1) + return this.text(unicode + '\u0328'); + } + if (this.argument(node, 'none')) + return this.text('\u0328'); + break; + default: + if (node.kind === 'RegularCommand' && this.newcommands[node.command]) { + return this.clean({ + kind: 'Block', + markup: {}, + value: JSON.parse(JSON.stringify(this.newcommands[node.command])), + }); + } + if (unicode2latex.diacritics.tounicode[node.command]) { + node.arguments.required = this.clean(node.arguments.required); + let block; + if (node.arguments.required.length === 1 && node.arguments.required[0].kind === 'Text') { + // no idea why I can't just straight return this but typescript just won't shut up + block = { + kind: 'Block', + markup: {}, + value: [{ + kind: 'DiacriticCommand', + mark: node.command, + character: node.arguments.required[0].value, + dotless: false, + loc: node.arguments.required[0].loc, + source: node.arguments.required[0].source, + }], + }; + return this.clean(block); + } + else if (block = this.first_text_block(node.arguments.required[0])) { + let fixed = false; + block.value = block.value.reduce((value, child) => { + if (!fixed && child.kind === 'Text') { + fixed = true; + value.push({ kind: 'DiacriticCommand', mark: node.command, character: child.value[0] }); + value.push(Object.assign(Object.assign({}, child), { value: child.value.substring(1) })); + } + else { + value.push(child); + } + return value; + }, []); + return this.clean({ + kind: 'Block', + markup: {}, + value: node.arguments.required, + }); + } + else { + // overline without arguments doesn't seem to render in LaTeX + if (node.command === 'overline') + return this.text(' '); + return this.clean({ + kind: 'Block', + markup: {}, + value: [this.text(' ' + unicode2latex.diacritics.tounicode[node.command])].concat(node.arguments.required), + }); + } + } + if (unicode = unicode2latex.latex[node.source] || unicode2latex.latex[`${node.source}{}`]) + return this.text(unicode); + if ((unicode = unicode2latex.latex[`\\${node.command}`] || unicode2latex.latex[`\\${node.command}{}`]) && this.argument(node, 'none')) + return this.text(unicode); + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`])) + return this.text(unicode); + break; + } + if (this.in_preamble) + return this.text(node.source); + return this.error(new TeXError(`Unhandled command: ${node.command}` + this.show(node), node, this.chunk), this.text()); + } + preserveCase(word) { + // word = word.replace(new RegExp(`"[${this.markup.enquote.open}${this.markup.enquote.close}:()]`, 'g'), '') + var _a, _b; + if (!word.trim()) + return false; + if (!word.match(preserveCase.hasAlphaNum)) + return true; + word = word.replace(/[\/’'”:()]/g, ''); + if (word === 'I') + return true; + if (word.length === 1) + return false; + if (word.replace(preserveCase.notCaseSensitive) === '') + return false; + // word = word.replace(preserveCase.notAlphaNum, '') + // simple cap at start of field + if (word.match(preserveCase.leadingCap) && ((_b = (_a = this.field) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.length) === 0) + return false; + if (word.match(preserveCase.allCaps)) + return true; + if (word.length > 1 && word.match(preserveCase.joined)) + return false; + if (word.match(preserveCase.hasUpper)) + return true; + if (word.match(preserveCase.isNumber)) + return true; + return false; + } + convert(node) { + if (Array.isArray(node)) + return node.map(child => this.convert(child)); + if (this.options.raw && this.field) + node = this.text(node.source); + switch (node.kind) { + case 'Markup': + if (this.field) + this.field.text += node.value; + break; + case 'BracedComment': + case 'LineComment': + this.comments.push(node.value); + break; + case 'Entry': + this.convert_entry(node); + break; + case 'Number': + this.convert_number(node); + break; + case 'Text': + this.convert_text(node); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + const start = this.field ? this.field.text.length : null; + const preserve = typeof start === 'number' && this.field.preserveRanges; + this.convert_block(node); + if (preserve && (node.case || node.kind.endsWith('Math'))) + this.preserve(start, this.field.text.length); // , `convert-block: case=${node.case}, math=${node.kind.endsWith('Math')}`) + break; + case 'Environment': + this.convert_environment(node); + break; + case 'PreambleExpression': + this.preamble.push(node.value.map(preamble => preamble.source).join('\n\n')); + break; + case 'DisplayMath': + case 'InlineMath': + case 'StringDeclaration': + break; + default: + return this.error(new ParserError(`no converter for ${node.kind}: ${this.show(node)}`, node), undefined); + } + } + splitOnce(s, sep, fromEnd = false) { + const split = fromEnd ? s.lastIndexOf(sep) : s.indexOf(sep); + return (split < 0) ? [s, ''] : [s.substr(0, split), s.substr(split + 1)]; + } + parseName(name) { + let parsed = null; + const parts = name.split(marker.comma); + if (parts.length && !parts.find(p => !p.match(/^[a-z]+(-i)?=/i))) { // extended name format + for (const part of parts) { + parsed = parsed || {}; + const [attr, value] = this.splitOnce(part.replace(marker.re.space, ''), '=').map(v => v.trim()); + if (!value) { + parsed = null; + break; + } + switch (attr.toLowerCase()) { + case 'family': + parsed.lastName = value; + break; + case 'given-i': + parsed.initial = value; + break; + case 'given': + parsed.firstName = value; + break; + case 'prefix': + parsed.prefix = value; + break; + case 'suffix': + parsed.suffix = value; + break; + case 'useprefix': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + case 'juniorcomma': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + default: + parsed[attr.toLowerCase()] = value; + break; + } + } + } + const prefix = /(.+?)\s+(vere|von|van den|van der|van|de|del|della|der|di|da|pietro|vanden|du|st.|st|la|lo|ter|bin|ibn|te|ten|op|ben|al)\s+(.+)/; + let m; + switch (parsed ? 0 : parts.length) { + case 0: + // already parsed + break; + case 1: // name without commas + // literal + if (marker.re.literalName.test(parts[0])) { + parsed = { literal: parts[0] }; + } + else if (m = parts[0].replace(marker.re.space, ' ').match(prefix)) { // split on prefix + parsed = { + firstName: m[1], + prefix: m[2], + lastName: m[3], + }; + } + else { + // top-level "firstname lastname" + const [firstName, lastName] = this.splitOnce(parts[0], marker.space, true); + if (lastName) { + parsed = { firstName, lastName }; + } + else { + parsed = { lastName: firstName }; + } + } + break; + case 2: // lastname, firstname + parsed = { + lastName: parts[0], + firstName: parts[1], + }; + break; + default: // lastname, suffix, firstname + parsed = { + lastName: parts[0], + suffix: parts[1], + firstName: parts.slice(2).join(marker.comma), + }; + } + for (const [k, v] of Object.entries(parsed)) { + if (typeof v !== 'string') + continue; + parsed[k] = marker.clean(v).trim(); + } + return parsed; + } + convert_entry(node) { + var _a; + this.entry = { + key: node.id, + type: node.type, + fields: {}, + creators: {}, + }; + this.entries.push(this.entry); + // order these first for language-dependent sentence casing + const order = ['langid', 'hyphenation', 'language']; + node.fields.sort((a, b) => { + const ia = order.indexOf(a.name); + const ib = order.indexOf(b.name); + if (ia === -1 && ib === -1) + return a.name.localeCompare(b.name); // doesn't matter really + if (ia === -1) + return 1; + if (ib === -1) + return -1; + return ia - ib; + }); + let sentenceCase = !!this.options.sentenceCase.length; // if sentenceCase is empty, no sentence casing + for (const field of node.fields) { + if (field.kind !== 'Field') + return this.error(new ParserError(`Expected Field, got ${field.kind}`, node), undefined); + this.startCleaning(field.name); + /* + if (this.options.raw && this.fieldType !== 'creator') { + this.entry.fields[field.name] = [ field.value.map(v => v.source).join('') ] + continue + } + */ + this.field = { + name: field.name, + text: '', + level: 0, + words: { + upper: 0, + lower: 0, + other: 0, + }, + preserveRanges: (sentenceCase && fields.title.includes(field.name)) ? [] : null, + html: this.options.htmlFields.includes(field.name), + }; + this.entry.fields[this.field.name] = this.entry.fields[this.field.name] || []; + // special case for 'title = 2020' + if (field.value.kind === 'Number') { + this.entry.fields[this.field.name].push(field.value.value); + this.field = null; + continue; + } + this.convert(field.value); + this.field.text = this.field.text.trim(); + this.field.text = this.field.text.replace(/<\/([a-z])><\1>/g, ''); + this.field.text = this.field.text.replace(/<([a-z])>(\s*)<\/\1>/g, '$1'); + if (!this.field.text) + continue; + // disable sentenceCasing if not an english + switch (this.field.name) { + case 'langid': + case 'hyphenation': + sentenceCase = sentenceCase && this.options.sentenceCase.includes(this.field.text.toLowerCase()); + break; + case 'language': + sentenceCase = sentenceCase && !!(this.field.text.toLowerCase().trim().split(/\s*,\s*/).find(lang => this.options.sentenceCase.includes(lang))); + break; + } + // "groups" is a jabref 3.8+ monstrosity + if (this.field.name.match(/^(keywords?|groups)$/)) { + for (let text of this.field.text.split(marker.comma)) { + text = text.trim(); + if (text) + this.entry.fields[this.field.name].push(text); + } + } + else if (this.cleaning.type === 'creator') { + if (!this.entry.creators[this.field.name]) + this.entry.creators[this.field.name] = []; + // {M. Halle, J. Bresnan, and G. Miller} + if (this.field.text.includes(`${marker.comma}${marker.and}`)) { // + this.field.text = this.field.text.replace(new RegExp(`${marker.comma}${marker.and}`, 'g'), marker.and).replace(new RegExp(marker.comma), marker.and); + } + for (const creator of this.field.text.split(marker.and)) { + this.entry.fields[this.field.name].push(marker.clean(creator)); + this.entry.creators[this.field.name].push(this.parseName(creator)); + } + } + else if (fields.unabbrev.includes(field.name)) { // doesn't get sentence casing anyhow TODO: booktitle does! + this.entry.fields[this.field.name].push((((_a = this.options.unabbreviate[this.field.text]) === null || _a === void 0 ? void 0 : _a.text) || this.field.text).normalize('NFC')); + } + else { + if (this.field.preserveRanges) { + if (this.options.guessAlreadySentenceCased && Math.max(this.field.words.upper, this.field.words.lower) > (this.field.words.other + Math.min(this.field.words.upper, this.field.words.lower))) { + this.preserve(null, null); // , 'mostly sentence cased already') + } + else { + const txt = this.field.text.replace(preserveCase.markup, markup => marker.markup.repeat(markup.length)); + let match; + preserveCase.sentenceStart.lastIndex = 0; + while ((match = preserveCase.sentenceStart.exec(txt))) { + // exclude stuff like "U.S. Taxes" + if (match.index > 2 && txt.substr(0, match.index + 1).match(preserveCase.acronym)) + continue; + this.preserve(match.index, match.index + match[0].length); // , `sentenceStart: ${match[0]} at ${match.index}..${match.index + match[0].length}`) + } + preserveCase.quoted.lastIndex = 0; + while ((match = preserveCase.quoted.exec(this.field.text))) { + this.preserve(match.index, match.index + match[0].length); // , 'quoted') + } + } + } + this.entry.fields[this.field.name].push(this.convertToSentenceCase(this.field.text).normalize('NFC')); + } + } + this.field = null; + } + convertToSentenceCase(text) { + if (!this.field.preserveRanges) + return text; + // always keep the leading char, but skip markup + const lead = text.match(/^(<[^>]+>)*./); + if (lead) { + this.preserve(lead[0].length - 1, lead[0].length); + } + else { + this.preserve(0, 1); + } + let sentenceCased = text.toLowerCase().replace(/(([\?!]\s*|^)([\'\"ÂĄÂżâ€œâ€˜â€žÂ«\s]+)?[^\s])/g, x => x.toUpperCase()); + for (const { start, end } of this.field.preserveRanges) { + sentenceCased = sentenceCased.substring(0, start) + text.substring(start, end) + sentenceCased.substring(end); + } + if (text !== sentenceCased) + this.entry.sentenceCased = true; + return sentenceCased; + } + convert_number(node) { + this.field.text += `${node.value}`; + } + convert_text(node) { + if (node.mode === 'verbatim') { + this.field.text += node.value.trim(); + return; + } + // heuristic to detect pre-sentencecased text + for (const word of node.value.split(/\b/)) { + if (word.match(preserveCase.allLower)) { + this.field.words.lower++; + } + else if (word.match(preserveCase.allCaps)) { + this.field.words.upper++; + } + else if (word.match(preserveCase.hasAlpha)) { + this.field.words.other++; + } + } + if (this.field.level === 0 && this.cleaning.type === 'creator') { + this.field.text += node.value.replace(/\s+and\s+/ig, marker.and).replace(/\s*,\s*/g, marker.comma).replace(/\s+/g, marker.space); + return; + } + if (this.field.level === 0 && this.field.name.match(/^(keywords?|groups)$/)) { + this.field.text += node.value.replace(/\s*[;,]\s*/g, marker.comma); + return; + } + if (this.field.html) { + this.field.text += node.value.replace(/&/g, '&').replace(//g, '>'); + } + else if (this.field.preserveRanges) { + const words = node.value.split(/(\s+)/); + for (const word of words) { + const start = this.field.text.length; + this.field.text += word; + if (this.preserveCase(word)) + this.preserve(start, this.field.text.length); // , `word: ${JSON.stringify(word)}`) + } + } + else { + this.field.text += node.value; + } + } + convert_environment(node) { + this.field.text += { enumerate: '
      ', itemize: '
        ' }[node.env]; + this.convert_block(Object.assign(Object.assign({}, node), { kind: 'Block', markup: {} })); + this.field.text += { enumerate: '
    ', itemize: '' }[node.env]; + } + convert_block(node) { + const start = this.field.text.length; + let prefix = ''; + let postfix = ''; + if (this.options.caseProtection !== 'strict' && this.cleaning.type === 'other') + delete node.case; + if (this.cleaning.type === 'creator' && node.case === 'protect') { + prefix += marker.literal; + postfix = marker.literal + postfix; + delete node.case; + } + if (node.case === 'protect') { + prefix += this.options.markup.caseProtect.open; + postfix = this.options.markup.caseProtect.close + postfix; + } + if (node.kind === 'Block') { + for (const markup of Object.keys(node.markup)) { + if (!this.options.markup[markup]) + return this.error(new ParserError(`markup: ${markup}`, node), undefined); + prefix += this.options.markup[markup].open; + postfix = this.options.markup[markup].close + postfix; + } + } + const end = { + withoutPrefix: this.field.text.length, + withPrefix: this.field.text.length + prefix.length, + }; + this.field.text += prefix; + this.field.level++; + this.convert(node.value); + this.field.level--; + const added = this.field.text.substring(end.withPrefix); + const added_text = added.replace(/<\/?[^>]+>/g, ''); + const needsProtection = added_text && ((this.options.caseProtection === 'strict' && added_text.match(preserveCase.isCaseSensitive)) + || + (this.options.caseProtection === 'as-needed' && added_text.split(/\s+/).find(word => this.needsProtection(word)))); + if (!added) { // nothing was added, so remove prefix + this.field.text = this.field.text.substring(0, end.withoutPrefix); + } + else if (this.field.preserveRanges && prefix === this.options.markup.caseProtect.open && !needsProtection) { + // something was added that didn't actually need case protection + this.field.text = this.field.text.substring(0, end.withoutPrefix) + added; + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < end.withoutPrefix); + } + else { + this.field.text += postfix; + } + this.field.text = this.field.text.replace(/<(sup|sub)>([^<>]+)<\/\1>$/i, (m, mode, chars) => { + const cmd = mode === 'sup' ? '^' : '_'; + let script = ''; + for (const char of chars) { + const unicode = unicode2latex.latex[`${cmd}${char}`] || unicode2latex.latex[`${cmd}{${char}}`]; + script += unicode ? unicode : `<${mode}>${char}`; + } + script = script.replace(new RegExp(`<${mode}>`, 'g'), ''); + return script.length < m.length ? script : m; + }); + if (node.case && this.field.preserveRanges) + this.preserve(start, this.field.text.length); // , 'in convert-block ' + node.source || '') + } +} +/** + * parse bibtex. This will try to convert TeX commands into unicode equivalents, and apply `@string` expansion + */ +function parse(input, options = {}) { + const parser = new Parser(options); + return parser.parse(input); +} +exports.parse = parse; +function ast(input, options = {}, clean = true) { + const parser = new Parser(options); + return parser.ast(input, clean); +} +exports.ast = ast; +var chunker_2 = chunker; +Object.defineProperty(exports, "chunker", { enumerable: true, get: function () { return chunker_2.parse; } }); + +Object.defineProperty(exports, "jabref", { enumerable: true, get: function () { return jabref.parse; } }); + +}); + +var TEMPLATE_VARIABLES = { + citekey: 'Unique citekey', + abstract: '', + authorString: 'Comma-separated list of author names', + containerTitle: 'Title of the container holding the reference (e.g. book title for a book chapter, or the journal title for a journal article)', + DOI: '', + eprint: '', + eprinttype: '', + eventPlace: 'Location of event', + note: '', + page: 'Page or page range', + publisher: '', + publisherPlace: 'Location of publisher', + title: '', + URL: '', + year: 'Publication year', + zoteroSelectURI: 'URI to open the reference in Zotero', +}; +var Library = /** @class */ (function () { + function Library(entries) { + this.entries = entries; + } + Object.defineProperty(Library.prototype, "size", { + get: function () { + return Object.keys(this.entries).length; + }, + enumerable: false, + configurable: true + }); + /** + * For the given citekey, find the corresponding `Entry` and return a + * collection of template variable assignments. + */ + Library.prototype.getTemplateVariablesForCitekey = function (citekey) { + var _a; + var entry = this.entries[citekey]; + var shortcuts = { + citekey: citekey, + abstract: entry.abstract, + authorString: entry.authorString, + containerTitle: entry.containerTitle, + DOI: entry.DOI, + eprint: entry.eprint, + eprinttype: entry.eprinttype, + eventPlace: entry.eventPlace, + note: entry.note, + page: entry.page, + publisher: entry.publisher, + publisherPlace: entry.publisherPlace, + title: entry.title, + URL: entry.URL, + year: (_a = entry.year) === null || _a === void 0 ? void 0 : _a.toString(), + zoteroSelectURI: entry.zoteroSelectURI, + }; + return __assign({ entry: entry.toJSON() }, shortcuts); + }; + return Library; +}()); +/** + * An `Entry` represents a single reference in a reference database. + * Each entry has a unique identifier, known in most reference managers as its + * "citekey." + */ +var Entry = /** @class */ (function () { + function Entry() { + } + Object.defineProperty(Entry.prototype, "year", { + get: function () { + var _a; + return this._year + ? parseInt(this._year) + : (_a = this.issuedDate) === null || _a === void 0 ? void 0 : _a.getUTCFullYear(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "note", { + get: function () { + var _a; + return (_a = this._note) === null || _a === void 0 ? void 0 : _a.map(function (el) { return el.replace(/(zotero:\/\/.+)/g, '[Link]($1)'); }).join('\n\n'); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "zoteroSelectURI", { + /** + * A URI which will open the relevant entry in the Zotero client. + */ + get: function () { + return "zotero://select/items/@" + this.id; + }, + enumerable: false, + configurable: true + }); + Entry.prototype.toJSON = function () { + var _this = this; + var jsonObj = Object.assign({}, this); + // add getter values + var proto = Object.getPrototypeOf(this); + Object.entries(Object.getOwnPropertyDescriptors(proto)) + .filter(function (_a) { + var descriptor = _a[1]; + return typeof descriptor.get == 'function'; + }) + .forEach(function (_a) { + var key = _a[0], descriptor = _a[1]; + if (descriptor && key[0] !== '_') { + try { + var val = _this[key]; + jsonObj[key] = val; + } + catch (error) { + return; + } + } + }); + return jsonObj; + }; + return Entry; +}()); +var EntryCSLAdapter = /** @class */ (function (_super) { + __extends(EntryCSLAdapter, _super); + function EntryCSLAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + _this.eprint = null; + _this.eprinttype = null; + _this.files = null; + return _this; + } + Object.defineProperty(EntryCSLAdapter.prototype, "id", { + get: function () { + return this.data.id; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "abstract", { + get: function () { + return this.data.abstract; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "author", { + get: function () { + return this.data.author; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "authorString", { + get: function () { + return this.data.author + ? this.data.author.map(function (a) { return a.given + " " + a.family; }).join(', ') + : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "containerTitle", { + get: function () { + return this.data['container-title']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "DOI", { + get: function () { + return this.data.DOI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "eventPlace", { + get: function () { + return this.data['event-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "issuedDate", { + get: function () { + if (!(this.data.issued && + this.data.issued['date-parts'] && + this.data.issued['date-parts'][0].length > 0)) + return null; + var _a = this.data.issued['date-parts'][0], year = _a[0], month = _a[1], day = _a[2]; + return new Date(year, (month || 1) - 1, day || 1); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "page", { + get: function () { + return this.data.page; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisher", { + get: function () { + return this.data.publisher; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisherPlace", { + get: function () { + return this.data['publisher-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "title", { + get: function () { + return this.data.title; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "URL", { + get: function () { + return this.data.URL; + }, + enumerable: false, + configurable: true + }); + return EntryCSLAdapter; +}(Entry)); +var BIBLATEX_PROPERTY_MAPPING = { + abstract: 'abstract', + booktitle: '_containerTitle', + date: 'issued', + doi: 'DOI', + eprint: 'eprint', + eprinttype: 'eprinttype', + eventtitle: 'event', + journal: '_containerTitle', + journaltitle: '_containerTitle', + location: 'publisherPlace', + pages: 'page', + shortjournal: 'containerTitleShort', + title: 'title', + shorttitle: 'titleShort', + url: 'URL', + venue: 'eventPlace', + year: '_year', + publisher: 'publisher', + note: '_note', +}; +// BibLaTeX parser returns arrays of property values (allowing for repeated +// property entries). For the following fields, just blindly take the first. +var BIBLATEX_PROPERTY_TAKE_FIRST = [ + 'abstract', + 'booktitle', + '_containerTitle', + 'date', + 'doi', + 'eprint', + 'eprinttype', + 'eventtitle', + 'journaltitle', + 'location', + 'pages', + 'shortjournal', + 'title', + 'shorttitle', + 'url', + 'venue', + '_year', + 'publisher', +]; +var EntryBibLaTeXAdapter = /** @class */ (function (_super) { + __extends(EntryBibLaTeXAdapter, _super); + function EntryBibLaTeXAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + Object.entries(BIBLATEX_PROPERTY_MAPPING).forEach(function (map) { + var src = map[0], tgt = map[1]; + if (src in _this.data.fields) { + var val = _this.data.fields[src]; + if (BIBLATEX_PROPERTY_TAKE_FIRST.includes(src)) { + val = val[0]; + } + _this[tgt] = val; + } + }); + return _this; + } + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "id", { + get: function () { + return this.data.key; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "files", { + get: function () { + // For some reason the bibtex parser doesn't reliably parse file list to + // array ; so we'll do it manually / redundantly + var ret = []; + if (this.data.fields.file) { + ret = ret.concat(this.data.fields.file.flatMap(function (x) { return x.split(';'); })); + } + if (this.data.fields.files) { + ret = ret.concat(this.data.fields.files.flatMap(function (x) { return x.split(';'); })); + } + return ret; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "authorString", { + get: function () { + var _a; + if (this.data.creators.author) { + var names = this.data.creators.author.map(function (name) { + if (name.literal) + return name.literal; + var parts = [name.firstName, name.prefix, name.lastName, name.suffix]; + // Drop any null parts and join + return parts.filter(function (x) { return x; }).join(' '); + }); + return names.join(', '); + } + else { + return (_a = this.data.fields.author) === null || _a === void 0 ? void 0 : _a.join(', '); + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "containerTitle", { + get: function () { + if (this._containerTitle) { + return this._containerTitle; + } + else if (this.data.fields.eprint) { + var prefix = this.data.fields.eprinttype + ? this.data.fields.eprinttype + ":" + : ''; + var suffix = this.data.fields.primaryclass + ? " [" + this.data.fields.primaryclass + "]" + : ''; + return "" + prefix + this.data.fields.eprint + suffix; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "issuedDate", { + get: function () { + return this.issued ? new Date(this.issued) : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "author", { + get: function () { + var _a; + return (_a = this.data.creators.author) === null || _a === void 0 ? void 0 : _a.map(function (a) { return ({ + given: a.firstName, + family: a.lastName, + }); }); + }, + enumerable: false, + configurable: true + }); + return EntryBibLaTeXAdapter; +}(Entry)); + +var CITATION_DATABASE_FORMAT_LABELS = { + 'csl-json': 'CSL-JSON', + biblatex: 'BibLaTeX', +}; +var CitationsPluginSettings = /** @class */ (function () { + function CitationsPluginSettings() { + this.citationExportFormat = 'csl-json'; + this.literatureNoteTitleTemplate = '@{{citekey}}'; + this.literatureNoteFolder = 'Reading notes'; + this.literatureNoteContentTemplate = '---\n' + + 'title: {{title}}\n' + + 'authors: {{authorString}}\n' + + 'year: {{year}}\n' + + '---\n\n'; + this.markdownCitationTemplate = '[@{{citekey}}]'; + this.alternativeMarkdownCitationTemplate = '@{{citekey}}'; + } + return CitationsPluginSettings; +}()); +var CitationSettingTab = /** @class */ (function (_super) { + __extends(CitationSettingTab, _super); + function CitationSettingTab(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.plugin = plugin; + return _this; + } + CitationSettingTab.prototype.open = function () { + var _this = this; + _super.prototype.open.call(this); + this.checkCitationExportPath(this.plugin.settings.citationExportPath).then(function () { return _this.showCitationExportPathSuccess(); }); + }; + CitationSettingTab.prototype.addValueChangeCallback = function (component, settingsKey, cb) { + var _this = this; + component.onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.plugin.settings[settingsKey] = value; + this.plugin.saveSettings().then(function () { + if (cb) { + cb(value); + } + }); + return [2 /*return*/]; + }); + }); }); + }; + CitationSettingTab.prototype.buildValueInput = function (component, settingsKey, cb) { + component.setValue(this.plugin.settings[settingsKey]); + this.addValueChangeCallback(component, settingsKey, cb); + }; + CitationSettingTab.prototype.display = function () { + var _this = this; + var containerEl = this.containerEl; + containerEl.empty(); + containerEl.setAttr('id', 'zoteroSettingTab'); + containerEl.createEl('h2', { text: 'Citation plugin settings' }); + new obsidian.Setting(containerEl) + .setName('Citation database format') + .addDropdown(function (component) { + return _this.buildValueInput(component.addOptions(CITATION_DATABASE_FORMAT_LABELS), 'citationExportFormat', function (value) { + _this.checkCitationExportPath(_this.plugin.settings.citationExportPath).then(function (success) { + if (success) { + _this.citationPathSuccessEl.addClass('d-none'); + _this.citationPathLoadingEl.removeClass('d-none'); + _this.plugin.loadLibrary().then(function () { + _this.citationPathLoadingEl.addClass('d-none'); + _this.showCitationExportPathSuccess(); + }); + } + }); + }); + }); + // NB: we force reload of the library on path change. + new obsidian.Setting(containerEl) + .setName('Citation database path') + .setDesc('Path to citation library exported by your reference manager. ' + + 'Can be an absolute path or a path relative to the current vault root folder. ' + + 'Citations will be automatically reloaded whenever this file updates.') + .addText(function (input) { + return _this.buildValueInput(input.setPlaceholder('/path/to/export.json'), 'citationExportPath', function (value) { + _this.checkCitationExportPath(value).then(function (success) { + return success && + _this.plugin + .loadLibrary() + .then(function () { return _this.showCitationExportPathSuccess(); }); + }); + }); + }); + this.citationPathLoadingEl = containerEl.createEl('p', { + cls: 'zoteroSettingCitationPathLoading d-none', + text: 'Loading citation database...', + }); + this.citationPathErrorEl = containerEl.createEl('p', { + cls: 'zoteroSettingCitationPathError d-none', + text: 'The citation export file cannot be found. Please check the path above.', + }); + this.citationPathSuccessEl = containerEl.createEl('p', { + cls: 'zoteroSettingCitationPathSuccess d-none', + text: 'Loaded library with {{n}} references.', + }); + new obsidian.Setting(containerEl) + .setName('Literature note folder') + .addText(function (input) { return _this.buildValueInput(input, 'literatureNoteFolder'); }) + .setDesc('Save literature note files in this folder within your vault. If empty, notes will be stored in the root directory of the vault.'); + containerEl.createEl('h3', { text: 'Template settings' }); + var templateInstructionsEl = containerEl.createEl('p'); + templateInstructionsEl.append(createSpan({ + text: 'The following settings determine how the notes and links created by ' + + 'the plugin will be rendered. You may specify a custom template for ' + + 'each type of content. Templates are interpreted using ', + })); + templateInstructionsEl.append(createEl('a', { + text: 'Handlebars', + href: 'https://handlebarsjs.com/guide/expressions.html', + })); + templateInstructionsEl.append(createSpan({ + text: ' syntax. You can make reference to the following variables:', + })); + var templateVariableUl = containerEl.createEl('ul', { + attr: { id: 'citationTemplateVariables' }, + }); + Object.entries(TEMPLATE_VARIABLES).forEach(function (variableData) { + var key = variableData[0], description = variableData[1], templateVariableItem = templateVariableUl.createEl('li'); + templateVariableItem.createEl('span', { + cls: 'text-monospace', + text: '{{' + key + '}}', + }); + templateVariableItem.createEl('span', { + text: description ? " \u2014 " + description : '', + }); + }); + var templateEntryInstructionsEl = containerEl.createEl('p'); + templateEntryInstructionsEl.append(createSpan({ text: 'Advanced users may also refer to the ' }), createSpan({ text: '{{entry}}', cls: 'text-monospace' }), createSpan({ + text: ' variable, which contains the full object representation of the ' + + 'reference as used internally by the plugin. See the ', + }), createEl('a', { + text: 'plugin documentation', + href: 'http://www.foldl.me/obsidian-citation-plugin/classes/entry.html', + }), createSpan({ text: " for information on this object's structure." })); + containerEl.createEl('h3', { text: 'Literature note templates' }); + new obsidian.Setting(containerEl) + .setName('Literature note title template') + .addText(function (input) { + return _this.buildValueInput(input, 'literatureNoteTitleTemplate'); + }); + new obsidian.Setting(containerEl) + .setName('Literature note content template') + .addTextArea(function (input) { + return _this.buildValueInput(input, 'literatureNoteContentTemplate'); + }); + containerEl.createEl('h3', { text: 'Markdown citation templates' }); + containerEl.createEl('p', { + text: 'You can insert Pandoc-style Markdown citations rather than literature notes by using the "Insert Markdown citation" command. The below options allow customization of the Markdown citation format.', + }); + new obsidian.Setting(containerEl) + .setName('Markdown primary citation template') + .addText(function (input) { + return _this.buildValueInput(input, 'markdownCitationTemplate'); + }); + new obsidian.Setting(containerEl) + .setName('Markdown secondary citation template') + .addText(function (input) { + return _this.buildValueInput(input, 'alternativeMarkdownCitationTemplate'); + }); + }; + /** + * Returns true iff the path exists; displays error as a side-effect + */ + CitationSettingTab.prototype.checkCitationExportPath = function (filePath) { + return __awaiter(this, void 0, void 0, function () { + var e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.citationPathLoadingEl.addClass('d-none'); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, obsidian.FileSystemAdapter.readLocalFile(this.plugin.resolveLibraryPath(filePath))]; + case 2: + _a.sent(); + this.citationPathErrorEl.addClass('d-none'); + return [3 /*break*/, 4]; + case 3: + e_1 = _a.sent(); + this.citationPathSuccessEl.addClass('d-none'); + this.citationPathErrorEl.removeClass('d-none'); + return [2 /*return*/, false]; + case 4: return [2 /*return*/, true]; + } + }); + }); + }; + CitationSettingTab.prototype.showCitationExportPathSuccess = function () { + if (!this.plugin.library) + return; + this.citationPathSuccessEl.setText("Loaded library with " + this.plugin.library.size + " references."); + this.citationPathSuccessEl.removeClass('d-none'); + }; + return CitationSettingTab; +}(obsidian.PluginSettingTab)); + +var messageIds = 0; + +function onMessage (self, e) { + var message = e.data; + if (!Array.isArray(message) || message.length < 2) { + // Ignore - this message is not for us. + return + } + var messageId = message[0]; + var error = message[1]; + var result = message[2]; + + var callback = self._callbacks[messageId]; + + if (!callback) { + // Ignore - user might have created multiple PromiseWorkers. + // This message is not for us. + return + } + + delete self._callbacks[messageId]; + callback(error, result); +} + +function PromiseWorker (worker) { + var self = this; + self._worker = worker; + self._callbacks = {}; + + worker.addEventListener('message', function (e) { + onMessage(self, e); + }); +} + +PromiseWorker.prototype.postMessage = function (userMessage) { + var self = this; + var messageId = messageIds++; + + var messageToSend = [messageId, userMessage]; + + return new Promise(function (resolve, reject) { + self._callbacks[messageId] = function (error, result) { + if (error) { + return reject(new Error(error.message)) + } + resolve(result); + }; + + /* istanbul ignore if */ + if (typeof self._worker.controller !== 'undefined') { + // service worker, use MessageChannels because e.source is broken in Chrome < 51: + // https://bugs.chromium.org/p/chromium/issues/detail?id=543198 + var channel = new MessageChannel(); + channel.port1.onmessage = function (e) { + onMessage(self, e); + }; + self._worker.controller.postMessage(messageToSend, [channel.port2]); + } else { + // web worker + self._worker.postMessage(messageToSend); + } + }) +}; + +var promiseWorker = PromiseWorker; + +/** + * Declares properties and methods which are missing from the Obsidian API. + */ +var NoticeExt = /** @class */ (function (_super) { + __extends(NoticeExt, _super); + function NoticeExt() { + return _super !== null && _super.apply(this, arguments) || this; + } + NoticeExt.DISAPPEARING_CLASS = 'mod-disappearing'; + return NoticeExt; +}(obsidian.Notice)); + +var DISALLOWED_FILENAME_CHARACTERS_RE = /[*"\\/<>:|?]/g; +/** + * Manages a category of notices to be displayed in the UI. Prevents multiple + * notices being shown at the same time. + */ +var Notifier = /** @class */ (function () { + function Notifier(defaultMessage) { + this.defaultMessage = defaultMessage; + } + Notifier.prototype.unload = function () { + this.hide(); + }; + /** + * @returns true if the notice was shown, and false otherwise + */ + Notifier.prototype.show = function (message) { + var _this = this; + var _a; + message = message || this.defaultMessage; + if (this.currentNotice) + return false; + this.currentNotice = new obsidian.Notice(message); + // Set up mutation observer to watch for when the notice disappears. + (_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect(); + this.mutationObserver = new MutationObserver(function (changes, observer) { + var isDisappearing = changes.some(function (change) { + var el = change.target; + return (change.type == 'attributes' && + el.hasClass(NoticeExt.DISAPPEARING_CLASS)); + }); + if (isDisappearing) { + _this.currentNotice = null; + observer.disconnect(); + _this.mutationObserver = null; + } + }); + this.mutationObserver.observe(this.currentNotice.noticeEl, { + attributeFilter: ['class'], + }); + }; + Notifier.prototype.hide = function () { + var _a, _b; + (_a = this.currentNotice) === null || _a === void 0 ? void 0 : _a.hide(); + (_b = this.mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect(); + this.currentNotice = null; + this.mutationObserver = null; + }; + Notifier.DISAPPEARING_CLASS = 'mod-disappearing'; + return Notifier; +}()); +/** + * Manages a Worker, recording its state and optionally preventing + * message postings before responses to prior messages have been received. + */ +var WorkerManager = /** @class */ (function () { + function WorkerManager(_worker, options) { + this._worker = _worker; + this.worker = new promiseWorker(this._worker); + /** + * Only relevant when `blockingChannel` option is true. + * Then this property is true iff the worker is currently processing a + * received message, and has not yet posted a response. + */ + this.blocked = false; + this.options = __assign(__assign({}, workerManagerDefaultOptions), options); + } + /** + * Attempt to post a message to the worker and return a promise response. + * + * If `blockingChannel` option is true and the channel is currently blocked, + * the message will be discarded and an error will be thrown. + */ + WorkerManager.prototype.post = function (msg) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + if (this.options.blockingChannel && this.blocked) { + throw new WorkerManagerBlocked(); + } + this.blocked = true; + return [2 /*return*/, this.worker.postMessage(msg).then(function (result) { + _this.blocked = false; + return result; + }, function (error) { + _this.blocked = false; + throw error; + })]; + }); + }); + }; + return WorkerManager; +}()); +var WorkerManagerBlocked = /** @class */ (function (_super) { + __extends(WorkerManagerBlocked, _super); + function WorkerManagerBlocked() { + var _this = _super.call(this, 'WorkerManager: discarded message because channel is blocked') || this; + Object.setPrototypeOf(_this, WorkerManagerBlocked.prototype); + return _this; + } + return WorkerManagerBlocked; +}(Error)); +var workerManagerDefaultOptions = { + blockingChannel: false, +}; + +function funcToSource(fn, sourcemapArg) { + var sourcemap = sourcemapArg === undefined ? null : sourcemapArg; + var source = fn.toString(); + var lines = source.split('\n'); + lines.pop(); + lines.shift(); + var blankPrefixLength = lines[0].search(/\S/); + var regex = /(['"])__worker_loader_strict__(['"])/g; + for (var i = 0, n = lines.length; i < n; ++i) { + lines[i] = lines[i].substring(blankPrefixLength).replace(regex, '$1use strict$2') + '\n'; + } + if (sourcemap) { + lines.push('\/\/# sourceMappingURL=' + sourcemap + '\n'); + } + return lines; +} + +function createURL(fn, sourcemapArg) { + var lines = funcToSource(fn, sourcemapArg); + var blob = new Blob(lines, { type: 'application/javascript' }); + return URL.createObjectURL(blob); +} + +function createInlineWorkerFactory(fn, sourcemapArg) { + var url; + return function WorkerFactory(options) { + url = url || createURL(fn, sourcemapArg); + return new Worker(url, options); + }; +} + +var WorkerFactory = createInlineWorkerFactory(/* rollup-plugin-web-worker-loader */function () { +(function () { + '__worker_loader_strict__'; + + function isPromise (obj) { + // via https://unpkg.com/is-promise@2.1.0/index.js + return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function' + } + + function registerPromiseWorker (callback) { + function postOutgoingMessage (e, messageId, error, result) { + function postMessage (msg) { + /* istanbul ignore if */ + if (typeof self.postMessage !== 'function') { // service worker + e.ports[0].postMessage(msg); + } else { // web worker + self.postMessage(msg); + } + } + if (error) { + /* istanbul ignore else */ + if (typeof console !== 'undefined' && 'error' in console) { + // This is to make errors easier to debug. I think it's important + // enough to just leave here without giving the user an option + // to silence it. + console.error('Worker caught an error:', error); + } + postMessage([messageId, { + message: error.message + }]); + } else { + postMessage([messageId, null, result]); + } + } + + function tryCatchFunc (callback, message) { + try { + return { res: callback(message) } + } catch (e) { + return { err: e } + } + } + + function handleIncomingMessage (e, callback, messageId, message) { + var result = tryCatchFunc(callback, message); + + if (result.err) { + postOutgoingMessage(e, messageId, result.err); + } else if (!isPromise(result.res)) { + postOutgoingMessage(e, messageId, null, result.res); + } else { + result.res.then(function (finalResult) { + postOutgoingMessage(e, messageId, null, finalResult); + }, function (finalError) { + postOutgoingMessage(e, messageId, finalError); + }); + } + } + + function onIncomingMessage (e) { + var payload = e.data; + if (!Array.isArray(payload) || payload.length !== 2) { + // message doens't match communication format; ignore + return + } + var messageId = payload[0]; + var message = payload[1]; + + if (typeof callback !== 'function') { + postOutgoingMessage(e, messageId, new Error( + 'Please pass a function into register().')); + } else { + handleIncomingMessage(e, callback, messageId, message); + } + } + + self.addEventListener('message', onIncomingMessage); + } + + var register = registerPromiseWorker; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; + } + + function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); + } + + /* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + + function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); + } + + function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } + } + + peg$subclass(peg$SyntaxError, Error); + + peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; + }; + + function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { Bibliography: peg$parseBibliography }, + peg$startRuleFunction = peg$parseBibliography, + + peg$c0 = function(r) { + return { + kind: 'Bibliography', + loc: location(), + source: text(), + children: r, + } + }, + peg$c1 = "@", + peg$c2 = peg$literalExpectation("@", false), + peg$c3 = "comment", + peg$c4 = peg$literalExpectation("comment", true), + peg$c5 = function(v) { + return { + kind: 'BracedComment', + loc: location(), + source: text(), + value: v.slice(1, -1), + } + }, + peg$c6 = /^[^\n\r]/, + peg$c7 = peg$classExpectation(["\n", "\r"], true, false), + peg$c8 = /^[\n\r]/, + peg$c9 = peg$classExpectation(["\n", "\r"], false, false), + peg$c10 = function(v) { + return { + kind: 'LineComment', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + } + }, + peg$c11 = /^[^@]/, + peg$c12 = peg$classExpectation(["@"], true, false), + peg$c13 = function(v) { + return { + kind: 'NonEntryText', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + } + }, + peg$c14 = function(n) { return n; }, + peg$c15 = "{", + peg$c16 = peg$literalExpectation("{", false), + peg$c17 = /^[^{}]/, + peg$c18 = peg$classExpectation(["{", "}"], true, false), + peg$c19 = "}", + peg$c20 = peg$literalExpectation("}", false), + peg$c21 = function(comment) { return '{' + comment.join('') + '}' }, + peg$c22 = /^[A-Za-z]/, + peg$c23 = peg$classExpectation([["A", "Z"], ["a", "z"]], false, false), + peg$c24 = /^[({]/, + peg$c25 = peg$classExpectation(["(", "{"], false, false), + peg$c26 = /^[})]/, + peg$c27 = peg$classExpectation(["}", ")"], false, false), + peg$c28 = function(type, id, fields) { + return { + kind: 'Entry', + id: id || '', + type: type.toLowerCase(), + loc: location(), + source: text(), + fields: fields, + } + }, + peg$c29 = "preamble", + peg$c30 = peg$literalExpectation("preamble", true), + peg$c31 = function(opener, v, closer) { + switch (opener + closer) { + case '{}': + case '()': + break + default: + throw new Error(`Unbalanced opener-closer for preamble: ${opener}...${closer}`) + } + return { + kind: 'PreambleExpression', + loc: location(), + source: text(), + value: v.reduce((a, b) => a.concat(b), []), + } + }, + peg$c32 = "string", + peg$c33 = peg$literalExpectation("string", true), + peg$c34 = function(k, v) { + return { + kind: 'StringDeclaration', + loc: location(), + source: text(), + name: k, + value: v.reduce((a, b) => a.concat(b), []), + } + }, + peg$c35 = /^[^ \t\r\n,]/, + peg$c36 = peg$classExpectation([" ", "\t", "\r", "\n", ","], true, false), + peg$c37 = ",", + peg$c38 = peg$literalExpectation(",", false), + peg$c39 = function(id) { return id; }, + peg$c40 = function(name) { return isVerbatimField(name) && unnestFields.includes(name) }, + peg$c41 = function(name, value) { + // because this was abused so much, many processors treat double-outer-braces as single + return { + kind: 'Field', + loc: location(), + source: text(), + name: name, + loc: location(), + value: [ protect(value) ] + } + }, + peg$c42 = function(name) { return isVerbatimField(name) }, + peg$c43 = function(name, value) { + return { + kind: 'Field', + loc: location(), + source: text(), + name: name, + loc: location(), + value: [ protect(value) ] + } + }, + peg$c44 = function(name, value) { + // because this was abused so much, many processors treat double-outer-braces as single + if (unnestFields.includes(name) && Array.isArray(value) && value.length === 1 && value[0].kind === 'Block') { + if (options.unnestMode === 'preserve') { + value[0].case = 'preserve'; + } else { + value = value[0].value; + } + } + + return handle_markup_switches({ + kind: 'Field', + loc: location(), + source: text(), + name: name, + value: value, + }) + }, + peg$c45 = /^[_:a-zA-Z0-9\-]/, + peg$c46 = peg$classExpectation(["_", ":", ["a", "z"], ["A", "Z"], ["0", "9"], "-"], false, false), + peg$c47 = function(name) { return name.toLowerCase() }, + peg$c48 = "\"", + peg$c49 = peg$literalExpectation("\"", false), + peg$c50 = function(v) { + v = v || { + kind: 'Text', + loc: location(), + source: text(), + value: '', + }; + v.mode = 'verbatim'; + return basicTextConversions(v) + }, + peg$c51 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: v.join('').trim(), + mode: 'verbatim', + }) + }, + peg$c52 = function(v) { return v }, + peg$c53 = function(v) { return '{' + v.join('') + '}' }, + peg$c54 = function() { return math.set(false) }, + peg$c55 = function(v) { + return v.reduce((a, b) => a.concat(b), []); + }, + peg$c56 = function(v) { return v; }, + peg$c57 = "{\\verb", + peg$c58 = peg$literalExpectation("{\\verb", false), + peg$c59 = /^[a-zA-Z]/, + peg$c60 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), + peg$c61 = /^[^\^_${}\\]/, + peg$c62 = peg$classExpectation(["^", "_", "$", "{", "}", "\\"], true, false), + peg$c63 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: normalizeWhitespace(v), + mode: math.on ? 'math' : 'text', + }) + }, + peg$c64 = /^[^\^_${}"\\]/, + peg$c65 = peg$classExpectation(["^", "_", "$", "{", "}", "\"", "\\"], true, false), + peg$c66 = /^[0-9]/, + peg$c67 = peg$classExpectation([["0", "9"]], false, false), + peg$c68 = function(v) { + return { + kind: 'Number', + loc: location(), + source: text(), + value: parseInt(v, 10), + } + }, + peg$c69 = function(v) { + return { + kind: 'StringReference', + loc: location(), + source: text(), + name: v, + } + }, + peg$c70 = "\\begin{", + peg$c71 = peg$literalExpectation("\\begin{", false), + peg$c72 = /^[a-zA-Z0-9]/, + peg$c73 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"]], false, false), + peg$c74 = "\\end{", + peg$c75 = peg$literalExpectation("\\end{", false), + peg$c76 = function(env, v, cenv) { return env === cenv }, + peg$c77 = function(env, v, cenv) { + if (markup[env]) { + return { + kind: 'Block', + loc: location(), + source: text(), + value: v, + markup: { [markup[env]]: true }, + } + } else { + return { + kind: 'Environment', + loc: location(), + source: text(), + value: v, + env: env, + } + } + }, + peg$c78 = "{\\", + peg$c79 = peg$literalExpectation("{\\", false), + peg$c80 = "\\", + peg$c81 = peg$literalExpectation("\\", false), + peg$c82 = /^[ij]/, + peg$c83 = peg$classExpectation(["i", "j"], false, false), + peg$c84 = function(mark, char) { + return { + kind: 'DiacriticCommand', + loc: location(), + source: text(), + mark: mark, + dotless: !!char[1], + character: char[1] || char[0], + } + }, + peg$c85 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: v.join('').trim(), + mode: 'verbatim', + }) + }, + peg$c86 = function(v) { + const block = { + kind: 'Block', + loc: location(), + source: text(), + value: v, + markup: {}, + case: 'protect', + }; + + let leadingcmd = block.value.length && (block.value[0].kind.endsWith('Command') || block.value[0].kind === 'Environment') ? block.value[0] : null; + let leadingcmdblockarg = leadingcmd + && leadingcmd.kind === 'RegularCommand' + && leadingcmd.arguments.required.length + && leadingcmd.arguments.required[0].kind === 'Block' + && leadingcmd.arguments.required[0]; + + // https://github.com/retorquere/zotero-better-bibtex/issues/541#issuecomment-240156274 + if (leadingcmd) { + delete block.case; + + // command with a block cancels out case protection with containing block + // if a smallcaps block has set case to 'preserve' we want to keep this + if (leadingcmdblockarg && leadingcmdblockarg.case === 'protect') delete leadingcmdblockarg.case; + + // \sl, \it etc + if (markup[leadingcmd.command]) { + block.markup[markup[leadingcmd.command]] = true; + block.value.shift(); + } + } + + return handle_markup_switches(block) + }, + peg$c87 = function() { return !math.on }, + peg$c88 = "$", + peg$c89 = peg$literalExpectation("$", false), + peg$c90 = "$$", + peg$c91 = peg$literalExpectation("$$", false), + peg$c92 = function(mode) { return math.set(true) }, + peg$c93 = function(mode, v) { return math.set(false) }, + peg$c94 = function(mode, v) { + return { + kind: mode == '$$' ? 'DisplayMath' : 'InlineMath', + loc: location(), + source: text(), + value: v, + case: 'protect', + markup: {}, + } + }, + peg$c95 = "%", + peg$c96 = peg$literalExpectation("%", false), + peg$c97 = /^[^\r\n]/, + peg$c98 = peg$classExpectation(["\r", "\n"], true, false), + peg$c99 = function(v) { + return { + kind: 'LineComment', + loc: location(), + source: text(), + value: v, + } + }, + peg$c100 = /^[_\^]/, + peg$c101 = peg$classExpectation(["_", "^"], false, false), + peg$c102 = function(mode, v) { + if (v.kind === 'Block') v = v.value; + + return { + kind: mode === '_' ? 'SubscriptCommand' : 'SuperscriptCommand', + loc: location(), + source: text(), + value: v, + } + }, + peg$c103 = function(mark, v) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: mark, + arguments: { + optional: [], + required: [ protect(v) ], + }, + } + }, + peg$c104 = /^[^A-Za-z0-9\t\r\n]/, + peg$c105 = peg$classExpectation([["A", "Z"], ["a", "z"], ["0", "9"], "\t", "\r", "\n"], true, false), + peg$c106 = function(v) { + return { + kind: 'SymbolCommand', + loc: location(), + source: text(), + command: v, + } + }, + peg$c107 = "newcommand", + peg$c108 = peg$literalExpectation("newcommand", false), + peg$c109 = function(cmd, name) { return name.value.length == 1 && name.value[0].kind === 'RegularCommand' }, + peg$c110 = function(cmd, name, optional, def) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: [], + required: [name, def], + }, + } + }, + peg$c111 = "begin", + peg$c112 = peg$literalExpectation("begin", false), + peg$c113 = "end", + peg$c114 = peg$literalExpectation("end", false), + peg$c115 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 2) }, + peg$c116 = function(cmd, optional, req1, req2) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [protect(req1), protect(req2)], + }, + } + }, + peg$c117 = function(cmd) { return verbatimCommands.includes(cmd) && (has_arguments[cmd] === 1) }, + peg$c118 = function(cmd, optional, req) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [protect(req)], + }, + } + }, + peg$c119 = function(cmd) { return (has_arguments[cmd] === 2) }, + peg$c120 = function(cmd, optional, req1, req2) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [req1, req2], + }, + } + }, + peg$c121 = function(cmd) { return (has_arguments[cmd] === 1) }, + peg$c122 = function(cmd, optional, req) { + let m; + if (req.kind === 'Block') { + switch (cmd) { + case 'textsuperscript': + case 'sp': + req.markup.sup = true; + break + case 'textsubscript': + case 'sb': + req.markup.sub = true; + break + case 'textsc': + req.markup.smallCaps = true; + break + case 'enquote': + case 'mkbibquote': + req.markup.enquote = true; + break + case 'textbf': + case 'mkbibbold': + req.markup.bold = true; + break + case 'emph': + case 'textit': + case 'mkbibitalic': + case 'mkbibemph': + req.markup.italics = true; + break + default: + if (m = cmd.match(/^((sub)*)section$/)) { + req.markup[`h${(m[1].length / 3) + 1}`] = true; + } + } + } + + // ignore case stuff on bibcyr + if (cmd === 'bibcyr') delete req.case; + + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [req], + } + } + }, + peg$c123 = function(cmd, optional) { + return { + kind: 'RegularCommand', + loc: location(), + source: text(), + command: cmd, + arguments: { + optional: optional, + required: [], + } + } + }, + peg$c124 = "[", + peg$c125 = peg$literalExpectation("[", false), + peg$c126 = /^[^\]]/, + peg$c127 = peg$classExpectation(["]"], true, false), + peg$c128 = "]", + peg$c129 = peg$literalExpectation("]", false), + peg$c130 = function(v) { + return basicTextConversions({ + kind: 'Text', // this isn't really correct but I don't need these right now + loc: location(), + source: text(), + value: v, + mode: math.on ? 'math' : 'text', + }) + }, + peg$c131 = /^[^ \t\^_${}\\]/, + peg$c132 = peg$classExpectation([" ", "\t", "^", "_", "$", "{", "}", "\\"], true, false), + peg$c133 = function(v) { + return basicTextConversions({ + kind: 'Text', + loc: location(), + source: text(), + value: normalizeWhitespace([v]), + mode: math.on ? 'math' : 'text', + }) + }, + peg$c134 = /^[a-zA-Z\-_]/, + peg$c135 = peg$classExpectation([["a", "z"], ["A", "Z"], "-", "_"], false, false), + peg$c136 = /^[a-zA-Z0-9\-&_:]/, + peg$c137 = peg$classExpectation([["a", "z"], ["A", "Z"], ["0", "9"], "-", "&", "_", ":"], false, false), + peg$c138 = /^['`"=~\^.]/, + peg$c139 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", "."], false, false), + peg$c140 = /^['`"=~\^.cbuvdrHk]/, + peg$c141 = peg$classExpectation(["'", "`", "\"", "=", "~", "^", ".", "c", "b", "u", "v", "d", "r", "H", "k"], false, false), + peg$c142 = "=", + peg$c143 = peg$literalExpectation("=", false), + peg$c144 = "#", + peg$c145 = peg$literalExpectation("#", false), + peg$c146 = /^[\r\n]/, + peg$c147 = peg$classExpectation(["\r", "\n"], false, false), + peg$c149 = /^[ \t]/, + peg$c150 = peg$classExpectation([" ", "\t"], false, false), + peg$c151 = peg$otherExpectation("Optional Horizontal Whitespace"), + peg$c155 = /^[ \t\n\r]/, + peg$c156 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false), + peg$c157 = peg$otherExpectation("Optional Whitespace"), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseBibliography() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseNode(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseNode(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c0(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseComment() { + var s0, s1, s2, s3, s4, s5, s6, s7; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) { + s3 = input.substr(peg$currPos, 7); + peg$currPos += 7; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + s5 = peg$parseBracedComment(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c5(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 7).toLowerCase() === peg$c3) { + s3 = input.substr(peg$currPos, 7); + peg$currPos += 7; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c4); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + s5 = []; + if (peg$c6.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c6.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + } + if (s5 !== peg$FAILED) { + s6 = []; + if (peg$c8.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + while (s7 !== peg$FAILED) { + s6.push(s7); + if (peg$c8.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c10(s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$currPos; + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c6.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c6.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c8.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c8.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c9); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c13(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseNode() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseComment(); + if (s1 === peg$FAILED) { + s1 = peg$parsePreambleExpression(); + if (s1 === peg$FAILED) { + s1 = peg$parseStringDeclaration(); + if (s1 === peg$FAILED) { + s1 = peg$parseEntry(); + } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c14(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseBracedComment() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 === peg$FAILED) { + s3 = peg$parseBracedComment(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 === peg$FAILED) { + s3 = peg$parseBracedComment(); + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c21(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEntry() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c22.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = peg$parseEntryId(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + if (s8 !== peg$FAILED) { + s9 = []; + s10 = peg$parseField(); + while (s10 !== peg$FAILED) { + s9.push(s10); + s10 = peg$parseField(); + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse__(); + if (s12 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c28(s3, s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsePreambleExpression() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 8).toLowerCase() === peg$c29) { + s3 = input.substr(peg$currPos, 8); + peg$currPos += 8; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c30); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parseEnvironment(); + if (s8 === peg$FAILED) { + s8 = peg$parseBlock(); + if (s8 === peg$FAILED) { + s8 = peg$parseMath(); + if (s8 === peg$FAILED) { + s8 = peg$parseCommand(); + if (s8 === peg$FAILED) { + s8 = peg$parseText(); + } + } + } + } + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseEnvironment(); + if (s8 === peg$FAILED) { + s8 = peg$parseBlock(); + if (s8 === peg$FAILED) { + s8 = peg$parseMath(); + if (s8 === peg$FAILED) { + s8 = peg$parseCommand(); + if (s8 === peg$FAILED) { + s8 = peg$parseText(); + } + } + } + } + } + if (s7 !== peg$FAILED) { + s8 = peg$parse__(); + if (s8 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c31(s5, s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseStringDeclaration() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c1; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 6).toLowerCase() === peg$c32) { + s3 = input.substr(peg$currPos, 6); + peg$currPos += 6; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__(); + if (s4 !== peg$FAILED) { + if (peg$c24.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + s7 = peg$parseVariableName(); + if (s7 !== peg$FAILED) { + s8 = peg$parseFieldSeparator(); + if (s8 !== peg$FAILED) { + s9 = []; + s10 = peg$parseRegularValue(); + if (s10 !== peg$FAILED) { + while (s10 !== peg$FAILED) { + s9.push(s10); + s10 = peg$parseRegularValue(); + } + } else { + s9 = peg$FAILED; + } + if (s9 !== peg$FAILED) { + s10 = peg$parse__(); + if (s10 !== peg$FAILED) { + if (peg$c26.test(input.charAt(peg$currPos))) { + s11 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s11 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c27); } + } + if (s11 !== peg$FAILED) { + s12 = peg$parse__(); + if (s12 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c34(s7, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEntryId() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c35.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c35.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s4 = peg$c37; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c39(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseField() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c40(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldSeparator(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s4 !== peg$FAILED) { + s5 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s6 = peg$c15; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s6 !== peg$FAILED) { + peg$currPos = s5; + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = peg$parseVerbatimFieldValue(); + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s7 = peg$c19; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s7 !== peg$FAILED) { + s8 = peg$parseFieldTerminator(); + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c41(s1, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c42(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldSeparator(); + if (s3 !== peg$FAILED) { + s4 = peg$parseVerbatimFieldValue(); + if (s4 !== peg$FAILED) { + s5 = peg$parseFieldTerminator(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c43(s1, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseFieldName(); + if (s1 !== peg$FAILED) { + s2 = peg$parseFieldSeparator(); + if (s2 !== peg$FAILED) { + s3 = peg$parseFieldValue(); + if (s3 !== peg$FAILED) { + s4 = peg$parseFieldTerminator(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c44(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseFieldName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c45.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c47(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseVerbatimFieldValue() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseTextNoQuotes(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c50(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseVerbatimText(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseVerbatimText(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseVerbatimText() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c17.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseVerbatimText(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseVerbatimText(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c53(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseFieldValue() { + var s0, s1, s2, s3; + + s0 = peg$parseNumber(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$c54(); + if (s1) { + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseRegularValue(); + if (s3 === peg$FAILED) { + s3 = peg$parseStringValue(); + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseRegularValue(); + if (s3 === peg$FAILED) { + s3 = peg$parseStringValue(); + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c55(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseRegularValue() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseTextNoQuotes(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseTextNoQuotes(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseConcat(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c57) { + s1 = peg$c57; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (peg$c59.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseVerbatimText(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVerbatimText(); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s4 = peg$c19; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseConcat(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseConcat(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseStringReference(); + if (s1 !== peg$FAILED) { + s2 = peg$parseConcat(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + + return s0; + } + + function peg$parseStringValue() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseStringReference(); + if (s1 !== peg$FAILED) { + s2 = peg$parseConcat(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseText() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c61.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c61.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseTextNoQuotes() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c64.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c64.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseNumber() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$currPos; + s2 = []; + if (peg$c66.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c66.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = input.substring(s1, peg$currPos); + } else { + s1 = s2; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c68(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseStringReference() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseVariableName(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c69(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseEnvironment() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 7) === peg$c70) { + s1 = peg$c70; + peg$currPos += 7; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + s3 = []; + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseEnvironment(); + if (s5 === peg$FAILED) { + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseMath(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseEnvironment(); + if (s5 === peg$FAILED) { + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseMath(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + } + } + if (s4 !== peg$FAILED) { + if (input.substr(peg$currPos, 5) === peg$c74) { + s5 = peg$c74; + peg$currPos += 5; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c75); } + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + s7 = []; + if (peg$c72.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$c72.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + s6 = input.substring(s6, peg$currPos); + } else { + s6 = s7; + } + if (s6 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s7 = peg$c19; + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s7 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s8 = peg$c76(s2, s4, s6); + if (s8) { + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c77(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseBlock() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c78) { + s1 = peg$c78; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c79); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c19; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 6) === peg$c57) { + s1 = peg$c57; + peg$currPos += 6; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (peg$c59.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c60); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseVerbatimText(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseVerbatimText(); + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s4 = peg$c19; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c85(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 123) { + s1 = peg$c15; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEnvironment(); + if (s3 === peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 === peg$FAILED) { + s3 = peg$parseCommand(); + if (s3 === peg$FAILED) { + s3 = peg$parseMath(); + if (s3 === peg$FAILED) { + s3 = peg$parseText(); + } + } + } + } + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c86(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseMath() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + peg$savedPos = peg$currPos; + s1 = peg$c87(); + if (s1) { + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 36) { + s2 = peg$c88; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s2 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c90) { + s2 = peg$c90; + peg$currPos += 2; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s3 = peg$c92(); + if (s3) { + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseBlock(); + if (s5 === peg$FAILED) { + s5 = peg$parseCommand(); + if (s5 === peg$FAILED) { + s5 = peg$parseText(); + } + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 36) { + s5 = peg$c88; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s5 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c90) { + s5 = peg$c90; + peg$currPos += 2; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + } + if (s5 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s6 = peg$c93(); + if (s6) { + s6 = void 0; + } else { + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c94(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseLineComment() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 37) { + s1 = peg$c95; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c96); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c97.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c97.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c98); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseEOL(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseEOL(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c99(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommand() { + var s0; + + s0 = peg$parseScriptCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseDiacriticCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseRegularCommand(); + if (s0 === peg$FAILED) { + s0 = peg$parseSymbolCommand(); + } + } + } + + return s0; + } + + function peg$parseScriptCommand() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (peg$c100.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c101); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$parseRequiredArgument(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c102(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseDiacriticCommand() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseSimpleDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 123) { + s3 = peg$c15; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + if (s3 !== peg$FAILED) { + if (peg$c72.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + if (s4 === peg$FAILED) { + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s5 = peg$c80; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s5 !== peg$FAILED) { + if (peg$c82.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + if (s6 !== peg$FAILED) { + s5 = [s5, s6]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s5 = peg$c19; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c84(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseExtendedDiacritic(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s4 = peg$c15; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s4 !== peg$FAILED) { + peg$currPos = s3; + s3 = void 0; + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseRegularValue(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c103(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseSymbolCommand() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + if (peg$c104.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c105); } + } + if (s3 !== peg$FAILED) { + s2 = input.substring(s2, peg$currPos); + } else { + s2 = s3; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c106(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseRegularCommand() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + if (input.substr(peg$currPos, 10) === peg$c107) { + s2 = peg$c107; + peg$currPos += 10; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c108); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseBlock(); + if (s3 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s4 = peg$c109(s2, s3); + if (s4) { + s4 = void 0; + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseOptionalArgument(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseOptionalArgument(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parseRequiredArgument(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c110(s2, s3, s5, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c115(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s9 = peg$c15; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s9 !== peg$FAILED) { + peg$currPos = s8; + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parseVerbatimFieldValue(); + if (s9 !== peg$FAILED) { + s10 = peg$parseVerbatimFieldValue(); + if (s10 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c116(s4, s6, s9, s10); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c117(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$currPos; + peg$silentFails++; + if (input.charCodeAt(peg$currPos) === 123) { + s9 = peg$c15; + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + peg$silentFails--; + if (s9 !== peg$FAILED) { + peg$currPos = s8; + s8 = void 0; + } else { + s8 = peg$FAILED; + } + if (s8 !== peg$FAILED) { + s9 = peg$parseVerbatimFieldValue(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c118(s4, s6, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c119(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$parseRequiredArgument(); + if (s8 !== peg$FAILED) { + s9 = peg$parseRequiredArgument(); + if (s9 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c120(s4, s6, s8, s9); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c121(s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s6 = []; + s7 = peg$parseOptionalArgument(); + while (s7 !== peg$FAILED) { + s6.push(s7); + s7 = peg$parseOptionalArgument(); + } + if (s6 !== peg$FAILED) { + s7 = peg$parse__h(); + if (s7 !== peg$FAILED) { + s8 = peg$parseRequiredArgument(); + if (s8 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c122(s4, s6, s8); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s1 = peg$c80; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c81); } + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 5) === peg$c111) { + s3 = peg$c111; + peg$currPos += 5; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c112); } + } + peg$silentFails--; + if (s3 === peg$FAILED) { + s2 = void 0; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + peg$silentFails++; + if (input.substr(peg$currPos, 3) === peg$c113) { + s4 = peg$c113; + peg$currPos += 3; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c114); } + } + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + s5 = []; + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + if (peg$c22.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c23); } + } + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + s4 = input.substring(s4, peg$currPos); + } else { + s4 = s5; + } + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseOptionalArgument(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseOptionalArgument(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parse__(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c123(s4, s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + + return s0; + } + + function peg$parseOptionalArgument() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c124; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c125); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parse__h(); + if (s2 !== peg$FAILED) { + s3 = peg$currPos; + s4 = []; + if (peg$c126.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + if (peg$c126.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c127); } + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = input.substring(s3, peg$currPos); + } else { + s3 = s4; + } + if (s3 !== peg$FAILED) { + s4 = peg$parse__h(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s5 = peg$c128; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c129); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c130(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseRequiredArgument() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parse__h(); + if (s1 !== peg$FAILED) { + if (peg$c131.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c132); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c133(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseBlock(); + if (s1 === peg$FAILED) { + s1 = peg$parseCommand(); + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parseVariableName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$currPos; + if (peg$c134.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c135); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c136.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c136.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c137); } + } + } + if (s3 !== peg$FAILED) { + s2 = [s2, s3]; + s1 = s2; + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + } else { + peg$currPos = s1; + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s0 = input.substring(s0, peg$currPos); + } else { + s0 = s1; + } + + return s0; + } + + function peg$parseSimpleDiacritic() { + var s0; + + if (peg$c138.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c139); } + } + + return s0; + } + + function peg$parseExtendedDiacritic() { + var s0; + + if (peg$c140.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c141); } + } + + return s0; + } + + function peg$parseFieldSeparator() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 61) { + s2 = peg$c142; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c143); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseFieldTerminator() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s2 = peg$c37; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__h(); + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$parseLineComment(); + if (s5 === peg$FAILED) { + s5 = peg$parseEOL(); + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseLineComment(); + if (s5 === peg$FAILED) { + s5 = peg$parseEOL(); + } + } + if (s4 !== peg$FAILED) { + s1 = [s1, s2, s3, s4]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseConcat() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parse__(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 35) { + s2 = peg$c144; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c145); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parse__(); + if (s3 !== peg$FAILED) { + s1 = [s1, s2, s3]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEOL() { + var s0; + + if (peg$c146.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c147); } + } + + return s0; + } + + function peg$parse__h() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c149.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c150); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c149.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c150); } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c151); } + } + + return s0; + } + + function peg$parse__() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c155.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c156); } + } + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c155.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c156); } + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c157); } + } + + return s0; + } + + + /* + MIT License + + Copyright (c) 2017 Derek P Sifford, parts copyright (c) 2019 by Emiliano Heyns + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ + + const markup = { + sl: 'italics', + em: 'italics', + it: 'italics', + itshape: 'italics', + + bf: 'bold', + bfseries: 'bold', + + sc: 'smallCaps', + scshape: 'smallCaps', + + tt: 'fixedWidth', + rm: 'roman', + sf: 'sansSerif', + verb: 'verbatim', + }; + + const unnestFields = (options.unnestFields || []).map(field => field.toLowerCase()); + const verbatimFields = (options.verbatimFields || [ 'urlraw', 'url', 'doi', 'file', 'files', 'eprint', 'verba', 'verbb', 'verbc' ]).map(field => typeof field === 'string' ? field.toLowerCase() : field); + const verbatimCommands = (options.verbatimCommands || ['texttt', 'url', 'href']); + + function isVerbatimField(name) { + return verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p)) + } + + function normalizeWhitespace(textArr) { + return textArr.reduce((prev, curr) => { + if (/\s/.test(curr)) { + if (/\s/.test(prev[prev.length - 1])) { + return prev; + } else { + return prev + ' '; + } + } + return prev + curr; + }, ''); + } + + const has_arguments = { + ElsevierGlyph: 1, + end: 1, + begin: 1, + bibcyr: 1, + bibstring: 1, + chsf: 1, + cite: 1, + cyrchar: 1, + ding: 1, + emph: 1, + enquote: 1, + frac: 2, + href: 2, + hspace: 1, + mathrm: 1, + mbox: 1, + mkbibbold: 1, + mkbibemph: 1, + mkbibitalic: 1, + mkbibquote: 1, + newcommand: 2, + noopsort: 1, + ocirc: 1, + section: 1, + sb: 1, + sp: 1, + subsection: 1, + subsubsection: 1, + subsubsubsection: 1, + t: 1, + textbf: 1, + textit: 1, + textrm: 1, + textsc: 1, + textsubscript: 1, + textsuperscript: 1, + texttt: 1, + url: 1, + vphantom: 1, + vspace: 1, + }; + + if (options.combiningDiacritics) { + for (const cmd of options.combiningDiacritics) { + has_arguments[cmd] = 1; + } + } + + const math = { + on: false, + + set: function(state) { + this.on = state; + return true + } + }; + + function basicTextConversions(node) { + if (node.kind !== 'Text') throw new Error(node.kind + ' is not a Text node') + + switch (node.mode) { + case 'verbatim': + break + + case 'math': + node.value = node.value.replace(/~/g, '\u00A0'); + break + + case 'text': + node.value = node.value + .replace(/---/g, '\u2014') + .replace(/--/g, '\u2013') + .replace(//g, '\u00BF') + .replace(/~/g, '\u00A0') + .replace(/``/g, options.markup.enquote.open) + .replace(/''/g, options.markup.enquote.close); + break + + default: + throw new Error(`Unexpected text mode ${node.mode}`) + } + + return node + } + + function protect(v) { + let source; + if (Array.isArray(v)) { + source = v.map(e => e.source).join(''); + } else { + v = [ v ]; + source = v.source; + } + + return { + kind: 'Block', + value: v, + markup: {}, + case: 'protect', + source: source, + } + } + + function handle_markup_switches(block) { + const value = block.value; + if (!Array.isArray(value)) return block + + block.value = []; + + const pseudo = { + block: null, + markup: {}, + }; + function pseudo_block() { + pseudo.block = { + kind: 'Block', + loc: location(), + source: '', + value: [], + markup: JSON.parse(JSON.stringify(pseudo.markup)), + pseudo: true, + }; + block.value.push(pseudo.block); + } + for (const node of value) { + if (node.kind === 'Environment' || node.kind === 'Block') { + block.value.push(node); + + if (Object.keys(pseudo.markup).length) { + pseudo_block(); + } else { + pseudo.block = null; + } + continue + } + + if (node.kind === 'RegularCommand' && markup[node.command]) { + if (pseudo.markup.italics) { // https://github.com/citation-js/bibtex-parser-experiments/commit/cae475f075a05d1c074485a061b08ed245170c7e + delete pseudo.markup.italics; + if (markup[node.command] !== 'italics') pseudo.markup[markup[node.command]] = true; + } else { + pseudo.markup[markup[node.command]] = true; + } + + if (Object.keys(pseudo.markup).length) { + pseudo_block(); + } else { + pseudo.block = null; + } + } + + if (pseudo.block) { + pseudo.block.source += node.source; + pseudo.block.value.push(node); + + } else { + block.value.push(node); + + } + } + + block.value = block.value.filter(node => !(node.pseudo && node.value.length === 0)); + + return block + } + + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } + } + + var grammar = { + SyntaxError: peg$SyntaxError, + parse: peg$parse + }; + + var chunker = createCommonjsModule(function (module, exports) { + // Original work by Henrik Muehe (c) 2010 + // + // CommonJS port by Mikola Lysenko 2013 + // + Object.defineProperty(exports, "__esModule", { value: true }); + exports.parse = void 0; + class ParseError extends Error { + constructor(message, parser) { + message += ` @ ${parser.pos}`; + if (parser.parsing) + message += ` in ${JSON.stringify(parser.parsing)}`; + super(message); + this.name = 'ParseError'; + } + } + // tslint:disable-next-line prefer-template + const letter = new RegExp('[' + [ + // Letter, Uppercase + /\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AD\uA7B0-\uA7B4\uA7B6\uFF21-\uFF3A/.source, + // Letter, Titlecase + /\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC/.source, + // Letter, Lowercase + /\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0561-\u0587\u13F8-\u13FD\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7B5\uA7B7\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A/.source, + // Letter, Modifier + /\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5-\u06E6\u07F4-\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C-\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D-\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C-\uA69D\uA717-\uA71F\uA770\uA788\uA7F8-\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3-\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E-\uFF9F/.source, + // Letter, Other + /\u00AA\u00BA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05F0-\u05F2\u0620-\u063F\u0641-\u064A\u066E-\u066F\u0671-\u06D3\u06D5\u06EE-\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0-\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B35-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0-\u0CE1\u0CF1-\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065-\u1066\u106E-\u1070\u1075-\u1081\u108E\u10D0-\u10FA\u10FD-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE-\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5-\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A-\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source, + ].join('') + ']'); + class BibtexParser { + parse(input, options = {}) { + // this._progress = 0 + this.pos = 0; + this.input = input; + this.max_entries = options.max_entries || 0; + this.entries = 0; + this.parsing = null; + this.chunks = []; + if (options.async) { + return this.bibtexAsync().then(() => this.chunks); + } + else { + this.bibtex(); + return this.chunks; + } + } + isWhitespace(s, horizontalOnly = false) { + return (s === ' ' || s === '\t' || (!horizontalOnly && (s === '\r' || s === '\n'))); + } + match(s) { + this.skipWhitespace(); + if (this.input.substr(this.pos, s.length) !== s) { + throw new ParseError(`Token mismatch, expected ${JSON.stringify(s)}, found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.pos += s.length; + this.skipWhitespace(); + } + tryMatch(s) { + this.skipWhitespace(); + return (this.input.substr(this.pos, s.length) === s); + // this.skipWhitespace() + } + skipWhitespace() { + while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos])) + this.pos++; + // shady + if (this.input[this.pos] === '%') { + while (this.pos < this.input.length && this.input[this.pos] !== '\n') + this.pos++; + while (this.pos < this.input.length && this.isWhitespace(this.input[this.pos])) + this.pos++; + } + } + value_braces() { + let bracecount = 0; + this.match('{'); + const start = this.pos; + let math = false; + while (true) { + switch (this.input[this.pos]) { + case '\\': + this.pos += 1; + break; + case '{': + bracecount++; + break; + case '}': + if (bracecount === 0) { + if (math) + throw new ParseError('Unclosed math section', this); + this.pos++; + return this.input.substring(start, this.pos - 1); + } + bracecount--; + break; + case '$': + math = !math; + break; + } + this.pos++; + if (this.pos >= this.input.length) { + throw new ParseError(`Unterminated brace-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers + } + } + } + value_quotes() { + this.match('"'); + const start = this.pos; + let bracecount = 0; + while (true) { + switch (this.input[this.pos]) { + case '\\': + this.pos += 1; + break; + case '{': + bracecount++; + break; + case '}': + bracecount--; + break; + case '"': + if (bracecount <= 0) { + this.pos++; + return this.input.substring(start, this.pos - 1); + } + } + this.pos++; + if (this.pos >= this.input.length) { + throw new ParseError(`Unterminated quote-value ${JSON.stringify(this.input.substr(start, 20))}`, this); // tslint:disable-line no-magic-numbers + } + } + } + single_value() { + if (this.tryMatch('{')) { + return this.value_braces(); + } + else if (this.tryMatch('"')) { + return this.value_quotes(); + } + else { + return this.key(); + } + } + value() { + const values = []; + values.push(this.single_value()); + while (this.tryMatch('#')) { + this.match('#'); + values.push(this.single_value()); + } + return values.join(''); + } + key(allowUnicode = false) { + const start = this.pos; + while (true) { + if (this.pos === this.input.length) { + throw new ParseError('Runaway key', this); + } + if (this.input[this.pos].match(/['a-zA-Z0-9&;_:\\./-]/)) { + this.pos++; + } + else if (allowUnicode && this.input[this.pos].match(letter)) { + this.pos++; + } + else { + return this.input.substring(start, this.pos); + } + } + } + key_equals_value() { + const key = this.key(); + if (!this.tryMatch('=')) { + throw new ParseError(`... = value expected, equals sign missing: ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.match('='); + const val = this.value(); + return [key, val]; + } + key_value_list() { + this.key_equals_value(); + while (this.tryMatch(',')) { + this.match(','); + // fixes problems with commas at the end of a list + if (this.tryMatch('}')) { + break; + } + this.key_equals_value(); + } + } + entry(d) { + this.parsing = this.key(true); + this.match(','); + this.key_value_list(); + } + directive() { + this.match('@'); + return `@${this.key()}`.toLowerCase(); + } + string() { + this.key_equals_value(); + } + preamble() { + this.value(); + } + comment() { + while (this.isWhitespace(this.input[this.pos], true)) + this.pos++; + if (this.input[this.pos] === '{') { + this.value_braces(); + return; + } + while (this.input[this.pos] !== '\n' && this.pos < this.input.length) + this.pos++; + } + /* + private progress() { + const progress = Math.round((this.pos / this.input.length * 100) / 5) * 5 // tslint:disable-line no-magic-numbers + if (this._progress !== progress) { + this._progress = progress + process.stdout.write(` (${this._progress}%) `) + } + } + */ + hasMore() { + if (this.max_entries && this.entries >= this.max_entries) + return false; + return (this.pos < this.input.length); + } + bibtex() { + while (this.hasMore()) { + this.parseNext(); + } + } + bibtexAsync() { + return this.hasMore() ? (new Promise(resolve => resolve(this.parseNext()))).then(() => this.bibtexAsync()) : Promise.resolve(null); + } + parseNext() { + // this.progress() + const chunk = { + offset: { + pos: this.pos, + line: this.input.substring(0, this.pos).split('\n').length - 1, + }, + error: null, + text: null, + }; + this.skipWhitespace(); + if (this.pos >= this.input.length) + return; + let guard = ''; + try { + const d = this.directive(); + switch (d) { + case '@string': + this.match('{'); + this.string(); + this.match('}'); + chunk.stringDeclaration = true; + break; + case '@preamble': + this.match('{'); + this.preamble(); + this.match('}'); + chunk.preamble = true; + break; + case '@comment': + this.comment(); + chunk.comment = true; + break; + default: + if (this.tryMatch('{')) { + guard = '{}'; + } + else if (this.tryMatch('(')) { + guard = '()'; + } + else { + throw new ParseError(`Token mismatch, expected '{' or '(', found ${JSON.stringify(this.input.substr(this.pos, 20))}...`, this); // tslint:disable-line no-magic-numbers + } + this.match(guard[0]); + this.entry(d); + this.match(guard[1]); + chunk.entry = true; + this.entries++; + break; + } + } + catch (err) { + if (err.name !== 'ParseError') + throw err; + chunk.error = err.message, + // skip ahead to the next @ and try again + this.pos = chunk.offset.pos + 1; + while (this.pos < this.input.length && this.input[this.pos] !== '@') + this.pos++; + } + const text = this.input.substring(chunk.offset.pos, this.pos); + const last = this.chunks.length - 1; + if (chunk.error && this.chunks.length && this.chunks[last].error) { + this.chunks[last].text += text; + } + else { + chunk.text = text; + this.chunks.push(chunk); + } + } + } + /** + * Reads the bibtex input and splits it into separate chunks of `@string`s, `@comment`s, and bibtex entries. Useful for detecting if a file is bibtex file and for filtering out basic errors that would + * make the more sophisticated [[bibtex.parse]] reject the whole file + * + * @returns array of chunks, with markers for type and errors (if any) found. + */ + function parse(input, options = {}) { + return (new BibtexParser).parse(input, options); + } + exports.parse = parse; + + }); + + var $ = { + math: "\\$", + text: "\\$" + }; + var _ = { + math: "\\_", + text: "\\_" + }; + var require$$0 = { + "#": { + math: "\\#", + text: "\\#" + }, + $: $, + "%": { + math: "\\%", + text: "\\%" + }, + "&": { + math: "\\&", + text: "\\&" + }, + "/​": { + text: "\\slash", + commandspacer: true + }, + "<": { + math: "<" + }, + ">": { + math: ">" + }, + "\\": { + math: "\\backslash", + text: "\\textbackslash", + commandspacer: true + }, + "^": { + math: "\\sphat", + text: "\\^" + }, + _: _, + "iïž aïžĄ": { + text: "\\t{ia}" + }, + "{": { + math: "\\lbrace", + text: "\\{" + }, + "}": { + math: "\\rbrace", + text: "\\}" + }, + "~": { + math: "\\sptilde", + text: "\\textasciitilde", + commandspacer: true + }, + " ": { + math: "~", + space: true, + text: "~" + }, + "ÂĄ": { + text: "\\textexclamdown", + commandspacer: true + }, + "Âą": { + math: "\\cent", + text: "\\textcent", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "ÂŁ": { + math: "\\pounds", + text: "\\textsterling", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "€": { + text: "\\textcurrency", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "„": { + math: "\\yen", + text: "\\textyen", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "Š": { + text: "\\textbrokenbar", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "§": { + text: "\\textsection", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "š": { + math: "\\spddot", + text: "\\textasciidieresis", + commandspacer: true + }, + "©": { + text: "\\textcopyright", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "ÂȘ": { + text: "\\textordfeminine", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "«": { + text: "\\guillemotleft", + commandspacer: true + }, + "ÂŹ": { + math: "\\lnot" + }, + "­": { + math: "\\-", + text: "\\-" + }, + "Âź": { + math: "\\circledR", + text: "\\textregistered", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "ÂŻ": { + text: "\\textasciimacron", + commandspacer: true + }, + "°": { + math: "^\\circ", + text: "\\textdegree", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "±": { + math: "\\pm" + }, + "ÂČ": { + math: "^{2}" + }, + "Âł": { + math: "^{3}" + }, + "ÂŽ": { + text: "\\textasciiacute", + commandspacer: true + }, + "”": { + text: "\\textmu", + commandspacer: true + }, + "¶": { + text: "\\textparagraph", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "·": { + math: "\\cdot" + }, + "ž": { + text: "\\c", + commandspacer: true + }, + "Âč": { + math: "^{1}" + }, + "Âș": { + text: "\\textordmasculine", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "»": { + text: "\\guillemotright", + commandspacer: true + }, + "ÂŒ": { + math: "\\frac{1}{4}" + }, + "Âœ": { + math: "\\frac{1}{2}" + }, + "Ÿ": { + math: "\\frac{3}{4}" + }, + "Âż": { + text: "\\textquestiondown", + commandspacer: true + }, + "À": { + text: "\\`A" + }, + "Á": { + text: "\\'A" + }, + "Â": { + text: "\\^A" + }, + "Ã": { + text: "\\~A" + }, + "Ä": { + text: "\\\"A" + }, + "Å": { + text: "\\AA", + commandspacer: true + }, + "Æ": { + text: "\\AE", + commandspacer: true + }, + "Ç": { + text: "\\c{C}" + }, + "È": { + text: "\\`E" + }, + "É": { + text: "\\'E" + }, + "Ê": { + text: "\\^E" + }, + "Ë": { + text: "\\\"E" + }, + "Ì": { + text: "\\`I" + }, + "Í": { + text: "\\'I" + }, + "Î": { + text: "\\^I" + }, + "Ï": { + text: "\\\"I" + }, + "Ð": { + text: "\\DH", + commandspacer: true + }, + "Ñ": { + text: "\\~N" + }, + "Ò": { + text: "\\`O" + }, + "Ó": { + text: "\\'O" + }, + "Ô": { + text: "\\^O" + }, + "Õ": { + text: "\\~O" + }, + "Ö": { + text: "\\\"O" + }, + "×": { + math: "\\times", + text: "\\texttimes", + commandspacer: true + }, + "Ø": { + text: "\\O", + commandspacer: true + }, + "Ù": { + text: "\\`U" + }, + "Ú": { + text: "\\'U" + }, + "Û": { + text: "\\^U" + }, + "Ü": { + text: "\\\"U" + }, + "Ý": { + text: "\\'Y" + }, + "Þ": { + text: "\\TH", + commandspacer: true + }, + "ß": { + text: "\\ss", + commandspacer: true + }, + "Ă ": { + text: "\\`a" + }, + "ĂĄ": { + text: "\\'a" + }, + "Ăą": { + text: "\\^a" + }, + "ĂŁ": { + text: "\\~a" + }, + "Ă€": { + text: "\\\"a" + }, + "Ă„": { + text: "\\aa", + commandspacer: true + }, + "ĂŠ": { + text: "\\ae", + commandspacer: true + }, + "ç": { + text: "\\c{c}" + }, + "Ăš": { + text: "\\`e" + }, + "Ă©": { + text: "\\'e" + }, + "ĂȘ": { + text: "\\^e" + }, + "Ă«": { + text: "\\\"e" + }, + "ĂŹ": { + text: "\\`i" + }, + "Ă­": { + text: "\\'i" + }, + "Ăź": { + text: "\\^i" + }, + "ĂŻ": { + text: "\\\"i" + }, + "Ă°": { + math: "\\eth", + mathpackages: [ + "amssymb", + "arevmath" + ], + text: "\\dh", + commandspacer: true + }, + "ñ": { + text: "\\~n" + }, + "ĂČ": { + text: "\\`o" + }, + "Ăł": { + text: "\\'o" + }, + "ĂŽ": { + text: "\\^o" + }, + "Ă”": { + text: "\\~o" + }, + "ö": { + text: "\\\"o" + }, + "Ă·": { + math: "\\div" + }, + "Ăž": { + text: "\\o", + commandspacer: true + }, + "Ăč": { + text: "\\`u" + }, + "Ăș": { + text: "\\'u" + }, + "Ă»": { + text: "\\^u" + }, + "ĂŒ": { + text: "\\\"u" + }, + "Ăœ": { + text: "\\'y" + }, + "ĂŸ": { + text: "\\th", + commandspacer: true + }, + "Ăż": { + text: "\\\"y" + }, + "Ā": { + text: "\\=A" + }, + "ā": { + text: "\\=a" + }, + "Ă": { + text: "\\u{A}" + }, + "ă": { + text: "\\u{a}" + }, + "Ą": { + text: "\\k{A}" + }, + "ą": { + text: "\\k{a}" + }, + "Ć": { + text: "\\'C" + }, + "ć": { + text: "\\'c" + }, + "Ĉ": { + text: "\\^C" + }, + "ĉ": { + text: "\\^c" + }, + "Ċ": { + text: "\\.C" + }, + "ċ": { + text: "\\.c" + }, + "Č": { + text: "\\v{C}" + }, + "č": { + text: "\\v{c}" + }, + "Ď": { + text: "\\v{D}" + }, + "ď": { + text: "\\v{d}" + }, + "Đ": { + text: "\\DJ", + commandspacer: true + }, + "đ": { + text: "\\dj", + commandspacer: true + }, + "Ē": { + text: "\\=E" + }, + "ē": { + text: "\\=e" + }, + "Ĕ": { + text: "\\u{E}" + }, + "ĕ": { + text: "\\u{e}" + }, + "Ė": { + text: "\\.E" + }, + "ė": { + text: "\\.e" + }, + "Ę": { + text: "\\k{E}" + }, + "ę": { + text: "\\k{e}" + }, + "Ě": { + text: "\\v{E}" + }, + "ě": { + text: "\\v{e}" + }, + "Ĝ": { + text: "\\^G" + }, + "ĝ": { + text: "\\^g" + }, + "Ğ": { + text: "\\u{G}" + }, + "ğ": { + text: "\\u{g}" + }, + "Ä ": { + text: "\\.G" + }, + "ÄĄ": { + text: "\\.g" + }, + "Äą": { + text: "\\c{G}" + }, + "ÄŁ": { + text: "\\c{g}" + }, + "Ä€": { + text: "\\^H" + }, + "Ä„": { + text: "\\^h" + }, + "ÄŠ": { + text: "{\\fontencoding{LELA}\\selectfont\\char40}" + }, + "ħ": { + math: "\\Elzxh" + }, + "Äš": { + text: "\\~I" + }, + "Ä©": { + text: "\\~i" + }, + "ÄȘ": { + text: "\\=I" + }, + "Ä«": { + text: "\\=i" + }, + "ÄŹ": { + text: "\\u{I}" + }, + "Ä­": { + text: "{\\u \\i}" + }, + "Äź": { + text: "\\k{I}" + }, + "ÄŻ": { + text: "\\k{i}" + }, + "Ä°": { + text: "\\.I" + }, + "ı": { + math: "\\imath", + text: "\\i", + commandspacer: true + }, + "ÄČ": { + text: "IJ" + }, + "Äł": { + text: "ij" + }, + "ÄŽ": { + text: "\\^J" + }, + "Ä”": { + text: "\\^\\j", + commandspacer: true + }, + "Ķ": { + text: "\\c{K}" + }, + "Ä·": { + text: "\\c{k}" + }, + "Äž": { + text: "{\\fontencoding{LELA}\\selectfont\\char91}" + }, + "Äč": { + text: "\\'L" + }, + "Äș": { + text: "\\'l" + }, + "Ä»": { + text: "\\c{L}" + }, + "ÄŒ": { + text: "\\c{l}" + }, + "Äœ": { + text: "\\v{L}" + }, + "ÄŸ": { + text: "\\v{l}" + }, + "Äż": { + text: "{\\fontencoding{LELA}\\selectfont\\char201}" + }, + "ƀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char202}" + }, + "Ɓ": { + text: "\\L", + commandspacer: true + }, + "Ƃ": { + text: "\\l", + commandspacer: true + }, + "ƃ": { + text: "\\'N" + }, + "Ƅ": { + text: "\\'n" + }, + "ƅ": { + text: "\\c{N}" + }, + "Ɔ": { + text: "\\c{n}" + }, + "Ƈ": { + text: "\\v{N}" + }, + "ƈ": { + text: "\\v{n}" + }, + "Ɖ": { + text: "'n" + }, + "Ɗ": { + text: "\\NG", + commandspacer: true + }, + "Ƌ": { + text: "\\ng", + commandspacer: true + }, + "ƌ": { + text: "\\=O" + }, + "ƍ": { + text: "\\=o" + }, + "Ǝ": { + text: "\\u{O}" + }, + "Ə": { + text: "\\u{o}" + }, + "Ɛ": { + text: "\\H{O}" + }, + "Ƒ": { + text: "\\H{o}" + }, + "ƒ": { + text: "\\OE", + commandspacer: true + }, + "Ɠ": { + text: "\\oe", + commandspacer: true + }, + "Ɣ": { + text: "\\'R" + }, + "ƕ": { + text: "\\'r" + }, + "Ɩ": { + text: "\\c{R}" + }, + "Ɨ": { + text: "\\c{r}" + }, + "Ƙ": { + text: "\\v{R}" + }, + "ƙ": { + text: "\\v{r}" + }, + "ƚ": { + text: "\\'S" + }, + "ƛ": { + text: "\\'s" + }, + "Ɯ": { + text: "\\^S" + }, + "Ɲ": { + text: "\\^s" + }, + "ƞ": { + text: "\\c{S}" + }, + "Ɵ": { + text: "\\c{s}" + }, + "Ć ": { + text: "\\v{S}" + }, + "ĆĄ": { + text: "\\v{s}" + }, + "Ćą": { + text: "\\c{T}" + }, + "ĆŁ": { + text: "\\c{t}" + }, + "Ć€": { + text: "\\v{T}" + }, + "Ć„": { + text: "\\v{t}" + }, + "ĆŠ": { + text: "{\\fontencoding{LELA}\\selectfont\\char47}" + }, + "Ƨ": { + text: "{\\fontencoding{LELA}\\selectfont\\char63}" + }, + "Ćš": { + text: "\\~U" + }, + "Ć©": { + text: "\\~u" + }, + "ĆȘ": { + text: "\\=U" + }, + "Ć«": { + text: "\\=u" + }, + "ĆŹ": { + text: "\\u{U}" + }, + "Ć­": { + text: "\\u{u}" + }, + "Ćź": { + text: "\\r{U}" + }, + "ĆŻ": { + text: "\\r{u}" + }, + "Ć°": { + text: "\\H{U}" + }, + "Ʊ": { + text: "\\H{u}" + }, + "ĆČ": { + text: "\\k{U}" + }, + "Ćł": { + text: "\\k{u}" + }, + "ĆŽ": { + text: "\\^W" + }, + "Ć”": { + text: "\\^w" + }, + "ƶ": { + text: "\\^Y" + }, + "Ć·": { + text: "\\^y" + }, + "Ćž": { + text: "\\\"Y" + }, + "Ćč": { + text: "\\'Z" + }, + "Ćș": { + text: "\\'z" + }, + "Ć»": { + text: "\\.Z" + }, + "ĆŒ": { + text: "\\.z" + }, + "Ćœ": { + text: "\\v{Z}" + }, + "ĆŸ": { + text: "\\v{z}" + }, + "Ćż": { + text: "s" + }, + "ƒ": { + math: "f" + }, + "ƕ": { + text: "\\texthvlig", + commandspacer: true + }, + "ƞ": { + text: "\\textnrleg", + commandspacer: true + }, + "ÆȘ": { + text: "\\textesh", + commandspacer: true + }, + "Æ”": { + math: "\\Zbar" + }, + "Æș": { + text: "{\\fontencoding{LELA}\\selectfont\\char195}" + }, + "ǂ": { + text: "\\textdoublepipe", + commandspacer: true + }, + "Ǎ": { + text: "\\v{A}" + }, + "ǎ": { + text: "\\v{a}" + }, + "Ǐ": { + text: "\\v{I}" + }, + "ǐ": { + text: "\\v{i}" + }, + "Ǒ": { + text: "\\v{O}" + }, + "ǒ": { + text: "\\v{o}" + }, + "Ǔ": { + text: "\\v{U}" + }, + "ǔ": { + text: "\\v{u}" + }, + "ÇŠ": { + text: "\\v{G}" + }, + "ǧ": { + text: "\\v{g}" + }, + "Çš": { + text: "\\v{K}" + }, + "Ç©": { + text: "\\v{k}" + }, + "ÇȘ": { + text: "\\k{O}" + }, + "Ç«": { + text: "\\k{o}" + }, + "Ç°": { + text: "\\v{j}" + }, + "ÇŽ": { + text: "\\'G" + }, + "Ç”": { + text: "\\'g" + }, + "Èš": { + text: "\\c{E}" + }, + "È©": { + text: "\\c{e}" + }, + "È·": { + math: "\\jmath" + }, + "ɐ": { + math: "\\Elztrna" + }, + "ɒ": { + math: "\\Elztrnsa" + }, + "ɔ": { + math: "\\Elzopeno" + }, + "ɖ": { + math: "\\Elzrtld" + }, + "ɘ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char61}" + }, + "ə": { + math: "\\Elzschwa" + }, + "ɛ": { + math: "\\varepsilon" + }, + "ÉĄ": { + text: "g" + }, + "ÉŁ": { + math: "\\Elzpgamma" + }, + "É€": { + math: "\\Elzpbgam" + }, + "É„": { + math: "\\Elztrnh" + }, + "ÉŹ": { + math: "\\Elzbtdl" + }, + "É­": { + math: "\\Elzrtll" + }, + "ÉŻ": { + math: "\\Elztrnm" + }, + "É°": { + math: "\\Elztrnmlr" + }, + "ɱ": { + math: "\\Elzltlmr" + }, + "ÉČ": { + text: "\\Elzltln", + commandspacer: true + }, + "Éł": { + math: "\\Elzrtln" + }, + "É·": { + math: "\\Elzclomeg" + }, + "Éž": { + text: "\\textphi", + commandspacer: true + }, + "Éč": { + math: "\\Elztrnr" + }, + "Éș": { + math: "\\Elztrnrl" + }, + "É»": { + math: "\\Elzrttrnr" + }, + "ÉŒ": { + math: "\\Elzrl" + }, + "Éœ": { + math: "\\Elzrtlr" + }, + "ÉŸ": { + math: "\\Elzfhr" + }, + "Éż": { + text: "{\\fontencoding{LEIP}\\selectfont\\char202}" + }, + "ʂ": { + math: "\\Elzrtls" + }, + "ʃ": { + math: "\\Elzesh" + }, + "ʇ": { + math: "\\Elztrnt" + }, + "ʈ": { + math: "\\Elzrtlt" + }, + "ʊ": { + math: "\\Elzpupsil" + }, + "ʋ": { + math: "\\Elzpscrv" + }, + "ʌ": { + math: "\\Elzinvv" + }, + "ʍ": { + math: "\\Elzinvw" + }, + "ʎ": { + math: "\\Elztrny" + }, + "ʐ": { + math: "\\Elzrtlz" + }, + "ʒ": { + math: "\\Elzyogh" + }, + "ʔ": { + math: "\\Elzglst" + }, + "ʕ": { + math: "\\Elzreglst" + }, + "ʖ": { + math: "\\Elzinglst" + }, + "ʞ": { + text: "\\textturnk", + commandspacer: true + }, + "Ê€": { + math: "\\Elzdyogh" + }, + "ʧ": { + math: "\\Elztesh" + }, + "Ê°": { + math: "^{h}", + text: "\\textsuperscript{h}" + }, + "ÊČ": { + math: "^{j}", + text: "\\textsuperscript{j}" + }, + "Êł": { + math: "^{r}", + text: "\\textsuperscript{r}" + }, + "Ê·": { + math: "^{w}", + text: "\\textsuperscript{w}" + }, + "Êž": { + math: "^{y}", + text: "\\textsuperscript{y}" + }, + "Êč": { + text: "'" + }, + "Ê»": { + text: "'" + }, + "ÊŒ": { + text: "'" + }, + "Êœ": { + text: "'" + }, + "Êż": { + text: "\\lasp", + commandspacer: true, + textpackages: [ + "mathscinet" + ] + }, + "ˆ": { + text: "\\textasciicircum", + commandspacer: true + }, + "ˇ": { + text: "\\textasciicaron", + commandspacer: true + }, + "ˈ": { + math: "\\Elzverts" + }, + "ˉ": { + text: "-" + }, + "ˌ": { + math: "\\Elzverti" + }, + "ː": { + math: "\\Elzlmrk" + }, + "ˑ": { + math: "\\Elzhlmrk" + }, + "˒": { + math: "\\Elzsbrhr" + }, + "˓": { + math: "\\Elzsblhr" + }, + "˔": { + math: "\\Elzrais" + }, + "˕": { + math: "\\Elzlow" + }, + "˘": { + text: "\\textasciibreve", + commandspacer: true + }, + "˙": { + text: "\\textperiodcentered", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "˚": { + text: "\\r{}" + }, + "˛": { + text: "\\k{}" + }, + "˜": { + text: "\\texttildelow", + commandspacer: true + }, + "˝": { + text: "\\H{}" + }, + "ËĄ": { + math: "^{l}", + text: "\\textsuperscript{l}" + }, + "Ëą": { + math: "^{s}", + text: "\\textsuperscript{s}" + }, + "ËŁ": { + math: "^{x}", + text: "\\textsuperscript{x}" + }, + "Ë„": { + text: "\\tone{55}" + }, + "ËŠ": { + text: "\\tone{44}" + }, + "˧": { + text: "\\tone{33}" + }, + "Ëš": { + text: "\\tone{22}" + }, + "Ë©": { + text: "\\tone{11}" + }, + "̀": { + math: "\\grave", + combiningdiacritic: true, + text: "\\`" + }, + "̀̄": { + text: "\\textgravemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̀": { + text: "\\textgravemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̀̇": { + text: "\\textgravedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̀": { + text: "\\textgravedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́": { + math: "\\acute", + combiningdiacritic: true, + text: "\\'" + }, + "́̄": { + text: "\\textacutemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄́": { + text: "\\textacutemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̌": { + text: "\\textacutewedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̌́": { + text: "\\textacutewedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̂": { + math: "\\hat", + combiningdiacritic: true, + text: "\\^" + }, + "̂̇": { + text: "\\textcircumdot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̂": { + text: "\\textcircumdot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̃": { + math: "\\tilde", + combiningdiacritic: true, + text: "\\~" + }, + "̃̇": { + text: "\\texttildedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̃": { + text: "\\texttildedot", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄": { + math: "\\bar", + combiningdiacritic: true, + text: "\\=" + }, + "̅": { + math: "\\overline", + combiningdiacritic: true + }, + "̆": { + math: "\\breve", + combiningdiacritic: true, + text: "\\u", + commandspacer: true + }, + "̆̄": { + text: "\\textbrevemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̆": { + text: "\\textbrevemacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇": { + math: "\\dot", + combiningdiacritic: true, + text: "\\." + }, + "̇́": { + text: "\\textdotacute", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̇": { + text: "\\textdotacute", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̆": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̆̇": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̈": { + math: "\\ddot", + combiningdiacritic: true, + text: "\\\"" + }, + "̉": { + math: "\\ovhook" + }, + "̊": { + math: "\\mathring", + combiningdiacritic: true, + text: "\\r", + commandspacer: true + }, + "̊̄": { + text: "\\textringmacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̊": { + text: "\\textringmacron", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̋": { + text: "\\H", + commandspacer: true, + combiningdiacritic: true + }, + "̌": { + math: "\\check", + text: "\\v", + commandspacer: true, + combiningdiacritic: true + }, + "̍": { + text: "\\textvbaraccent", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̎": { + text: "\\textdoublevbaraccent", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̏": { + text: "\\textdoublegrave", + commandspacer: true, + combiningdiacritic: true + }, + "̐": { + text: "\\textdotbreve", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̑": { + text: "{\\fontencoding{LECO}\\selectfont\\char177}" + }, + "̒": { + math: "\\oturnedcomma" + }, + "̕": { + math: "\\ocommatopright" + }, + "̖": { + text: "\\textsubgrave", + commandspacer: true, + combiningdiacritic: true + }, + "̘": { + text: "\\textadvancing", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̙": { + text: "\\textretracting", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̚": { + math: "\\droang", + text: "\\textcorner", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̜": { + text: "\\textsublhalfring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̝": { + text: "\\textraising", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̞": { + text: "\\textlowering", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̟": { + text: "\\textsubplus", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌĄ": { + math: "\\Elzpalh" + }, + "Ìą": { + text: "\\Elzrh", + commandspacer: true + }, + "ÌŁ": { + text: "\\d", + commandspacer: true, + combiningdiacritic: true + }, + "Ì€": { + text: "\\textsubumlaut", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì„": { + text: "\\textsubring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̧": { + text: "\\c", + commandspacer: true, + combiningdiacritic: true + }, + "Ìš": { + text: "\\k", + commandspacer: true, + combiningdiacritic: true + }, + "Ì©": { + text: "\\textsyllabic", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌȘ": { + math: "\\Elzsbbrg", + text: "\\textsubbridge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì«": { + text: "{\\fontencoding{LECO}\\selectfont\\char203}" + }, + "ÌŹ": { + text: "\\textsubwedge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌŻ": { + text: "\\textsubarch", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì°": { + math: "\\utilde", + text: "\\textsubtilde", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̱": { + math: "\\underbar", + combiningdiacritic: true, + text: "\\textsubbar", + commandspacer: true, + textpackages: [ + "tipa" + ] + }, + "ÌČ": { + math: "\\underline" + }, + "ÌŽ": { + text: "\\textsuperimposetilde", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì”": { + text: "\\Elzxl", + commandspacer: true + }, + "̶": { + text: "\\Elzbar", + commandspacer: true + }, + "Ì·": { + text: "{\\fontencoding{LECO}\\selectfont\\char215}" + }, + "Ìž": { + math: "\\not" + }, + "Ìč": { + text: "\\textsubrhalfring", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ìș": { + text: "\\textinvsubbridge", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì»": { + text: "\\textsubsquare", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌŒ": { + text: "\\textseagull", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ìœ": { + text: "\\textovercross", + commandspacer: true, + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÍĄ": { + text: "{\\fontencoding{LECO}\\selectfont\\char225}" + }, + "ÍŽ": { + text: "'" + }, + "Í”": { + text: "," + }, + "ÍŸ": { + text: ";" + }, + "Ά": { + text: "\\'A" + }, + "Έ": { + text: "\\'E" + }, + "Ή": { + text: "\\'H" + }, + "Ί": { + text: "{\\'{}I}" + }, + "Ό": { + text: "{\\'{}O}" + }, + "Ύ": { + math: "\\mathrm{'Y}" + }, + "Ώ": { + math: "\\mathrm{'\\Omega}" + }, + "ΐ": { + math: "\\acute{\\ddot{\\iota}}" + }, + "Α": { + math: "A" + }, + "Β": { + math: "B" + }, + "Γ": { + math: "\\Gamma" + }, + "Δ": { + math: "\\Delta" + }, + "Ε": { + math: "E" + }, + "Ζ": { + math: "Z" + }, + "Η": { + math: "H" + }, + "Θ": { + math: "\\Theta" + }, + "Ι": { + math: "I" + }, + "Κ": { + math: "K" + }, + "Λ": { + math: "\\Lambda" + }, + "Μ": { + math: "M" + }, + "Ν": { + math: "N" + }, + "Ξ": { + math: "\\Xi" + }, + "Ο": { + math: "O" + }, + "Π": { + math: "\\Pi" + }, + "ÎĄ": { + math: "P" + }, + "ÎŁ": { + math: "\\Sigma" + }, + "΀": { + math: "T" + }, + "΄": { + math: "\\Upsilon" + }, + "Ί": { + math: "\\Phi" + }, + "Χ": { + math: "X" + }, + "Κ": { + math: "\\Psi" + }, + "Ω": { + math: "\\Omega" + }, + "ÎȘ": { + math: "\\mathrm{\\ddot{I}}" + }, + "Ϋ": { + math: "\\mathrm{\\ddot{Y}}" + }, + "ÎŹ": { + text: "{\\'$\\alpha$}" + }, + "έ": { + math: "\\acute{\\epsilon}" + }, + "Îź": { + math: "\\acute{\\eta}" + }, + "ÎŻ": { + math: "\\acute{\\iota}" + }, + "ΰ": { + math: "\\acute{\\ddot{\\upsilon}}" + }, + "α": { + math: "\\alpha" + }, + "ÎČ": { + math: "\\beta" + }, + "Îł": { + math: "\\gamma" + }, + "ÎŽ": { + math: "\\delta" + }, + "Δ": { + math: "\\epsilon" + }, + "ζ": { + math: "\\zeta" + }, + "η": { + math: "\\eta" + }, + "Ξ": { + math: "\\theta", + text: "\\texttheta", + commandspacer: true + }, + "Îč": { + math: "\\iota" + }, + "Îș": { + math: "\\kappa" + }, + "λ": { + math: "\\lambda" + }, + "ÎŒ": { + math: "\\mu" + }, + "Îœ": { + math: "\\nu" + }, + "Ο": { + math: "\\xi" + }, + "Îż": { + math: "o" + }, + "π": { + math: "\\pi" + }, + "ρ": { + math: "\\rho" + }, + "ς": { + math: "\\varsigma" + }, + "σ": { + math: "\\sigma" + }, + "τ": { + math: "\\tau" + }, + "υ": { + math: "\\upsilon" + }, + "φ": { + math: "\\varphi" + }, + "χ": { + math: "\\chi" + }, + "ψ": { + math: "\\psi" + }, + "ω": { + math: "\\omega" + }, + "ϊ": { + math: "\\ddot{\\iota}" + }, + "ϋ": { + math: "\\ddot{\\upsilon}" + }, + "ό": { + text: "\\'o" + }, + "ύ": { + math: "\\acute{\\upsilon}" + }, + "ώ": { + math: "\\acute{\\omega}" + }, + "ϐ": { + math: "\\varbeta", + text: "\\Pisymbol{ppi022}{87}" + }, + "ϑ": { + math: "\\vartheta", + text: "\\textvartheta", + commandspacer: true + }, + "ϒ": { + math: "\\Upsilon" + }, + "ϕ": { + math: "\\phi" + }, + "ϖ": { + math: "\\varpi" + }, + "Ϙ": { + math: "\\Qoppa" + }, + "ϙ": { + math: "\\qoppa" + }, + "Ϛ": { + math: "\\Stigma" + }, + "ϛ": { + math: "\\stigma" + }, + "Ϝ": { + math: "\\Digamma" + }, + "ϝ": { + math: "\\digamma" + }, + "Ϟ": { + math: "\\Koppa" + }, + "ϟ": { + math: "\\koppa" + }, + "Ï ": { + math: "\\Sampi" + }, + "ÏĄ": { + math: "\\sampi" + }, + "Ï°": { + math: "\\varkappa" + }, + "ϱ": { + math: "\\varrho" + }, + "ÏŽ": { + math: "\\upvarTheta", + text: "\\textTheta", + commandspacer: true + }, + "Ï”": { + math: "\\epsilon" + }, + "϶": { + math: "\\backepsilon" + }, + "Ё": { + text: "\\cyrchar\\CYRYO", + commandspacer: true + }, + "Ђ": { + text: "\\cyrchar\\CYRDJE", + commandspacer: true + }, + "Ѓ": { + text: "\\cyrchar{\\'\\CYRG}" + }, + "Є": { + text: "\\cyrchar\\CYRIE", + commandspacer: true + }, + "Ѕ": { + text: "\\cyrchar\\CYRDZE", + commandspacer: true + }, + "І": { + text: "\\cyrchar\\CYRII", + commandspacer: true + }, + "Ї": { + text: "\\cyrchar\\CYRYI", + commandspacer: true + }, + "Ј": { + text: "\\cyrchar\\CYRJE", + commandspacer: true + }, + "Љ": { + text: "\\cyrchar\\CYRLJE", + commandspacer: true + }, + "Њ": { + text: "\\cyrchar\\CYRNJE", + commandspacer: true + }, + "Ћ": { + text: "\\cyrchar\\CYRTSHE", + commandspacer: true + }, + "Ќ": { + text: "\\cyrchar{\\'\\CYRK}" + }, + "Ў": { + text: "\\cyrchar\\CYRUSHRT", + commandspacer: true + }, + "Џ": { + text: "\\cyrchar\\CYRDZHE", + commandspacer: true + }, + "А": { + text: "\\cyrchar\\CYRA", + commandspacer: true + }, + "Б": { + text: "\\cyrchar\\CYRB", + commandspacer: true + }, + "В": { + text: "\\cyrchar\\CYRV", + commandspacer: true + }, + "Г": { + text: "\\cyrchar\\CYRG", + commandspacer: true + }, + "Д": { + text: "\\cyrchar\\CYRD", + commandspacer: true + }, + "Е": { + text: "\\cyrchar\\CYRE", + commandspacer: true + }, + "Ж": { + text: "\\cyrchar\\CYRZH", + commandspacer: true + }, + "З": { + text: "\\cyrchar\\CYRZ", + commandspacer: true + }, + "И": { + text: "\\cyrchar\\CYRI", + commandspacer: true + }, + "Й": { + text: "\\cyrchar\\CYRISHRT", + commandspacer: true + }, + "К": { + text: "\\cyrchar\\CYRK", + commandspacer: true + }, + "Л": { + text: "\\cyrchar\\CYRL", + commandspacer: true + }, + "М": { + text: "\\cyrchar\\CYRM", + commandspacer: true + }, + "Н": { + text: "\\cyrchar\\CYRN", + commandspacer: true + }, + "О": { + text: "\\cyrchar\\CYRO", + commandspacer: true + }, + "П": { + text: "\\cyrchar\\CYRP", + commandspacer: true + }, + "Đ ": { + text: "\\cyrchar\\CYRR", + commandspacer: true + }, + "ĐĄ": { + text: "\\cyrchar\\CYRS", + commandspacer: true + }, + "Đą": { + text: "\\cyrchar\\CYRT", + commandspacer: true + }, + "ĐŁ": { + text: "\\cyrchar\\CYRU", + commandspacer: true + }, + "Đ€": { + text: "\\cyrchar\\CYRF", + commandspacer: true + }, + "Đ„": { + text: "\\cyrchar\\CYRH", + commandspacer: true + }, + "ĐŠ": { + text: "\\cyrchar\\CYRC", + commandspacer: true + }, + "Ч": { + text: "\\cyrchar\\CYRCH", + commandspacer: true + }, + "Đš": { + text: "\\cyrchar\\CYRSH", + commandspacer: true + }, + "Đ©": { + text: "\\cyrchar\\CYRSHCH", + commandspacer: true + }, + "ĐȘ": { + text: "\\cyrchar\\CYRHRDSN", + commandspacer: true + }, + "Đ«": { + text: "\\cyrchar\\CYRERY", + commandspacer: true + }, + "ĐŹ": { + text: "\\cyrchar\\CYRSFTSN", + commandspacer: true + }, + "Đ­": { + text: "\\cyrchar\\CYREREV", + commandspacer: true + }, + "Đź": { + text: "\\cyrchar\\CYRYU", + commandspacer: true + }, + "ĐŻ": { + text: "\\cyrchar\\CYRYA", + commandspacer: true + }, + "Đ°": { + text: "\\cyrchar\\cyra", + commandspacer: true + }, + "б": { + text: "\\cyrchar\\cyrb", + commandspacer: true + }, + "ĐČ": { + text: "\\cyrchar\\cyrv", + commandspacer: true + }, + "Đł": { + text: "\\cyrchar\\cyrg", + commandspacer: true + }, + "ĐŽ": { + text: "\\cyrchar\\cyrd", + commandspacer: true + }, + "Đ”": { + text: "\\cyrchar\\cyre", + commandspacer: true + }, + "ж": { + text: "\\cyrchar\\cyrzh", + commandspacer: true + }, + "Đ·": { + text: "\\cyrchar\\cyrz", + commandspacer: true + }, + "Đž": { + text: "\\cyrchar\\cyri", + commandspacer: true + }, + "Đč": { + text: "\\cyrchar\\cyrishrt", + commandspacer: true + }, + "Đș": { + text: "\\cyrchar\\cyrk", + commandspacer: true + }, + "Đ»": { + text: "\\cyrchar\\cyrl", + commandspacer: true + }, + "ĐŒ": { + text: "\\cyrchar\\cyrm", + commandspacer: true + }, + "Đœ": { + text: "\\cyrchar\\cyrn", + commandspacer: true + }, + "ĐŸ": { + text: "\\cyrchar\\cyro", + commandspacer: true + }, + "Đż": { + text: "\\cyrchar\\cyrp", + commandspacer: true + }, + "р": { + text: "\\cyrchar\\cyrr", + commandspacer: true + }, + "с": { + text: "\\cyrchar\\cyrs", + commandspacer: true + }, + "т": { + text: "\\cyrchar\\cyrt", + commandspacer: true + }, + "у": { + text: "\\cyrchar\\cyru", + commandspacer: true + }, + "ф": { + text: "\\cyrchar\\cyrf", + commandspacer: true + }, + "х": { + text: "\\cyrchar\\cyrh", + commandspacer: true + }, + "ц": { + text: "\\cyrchar\\cyrc", + commandspacer: true + }, + "ч": { + text: "\\cyrchar\\cyrch", + commandspacer: true + }, + "ш": { + text: "\\cyrchar\\cyrsh", + commandspacer: true + }, + "щ": { + text: "\\cyrchar\\cyrshch", + commandspacer: true + }, + "ъ": { + text: "\\cyrchar\\cyrhrdsn", + commandspacer: true + }, + "ы": { + text: "\\cyrchar\\cyrery", + commandspacer: true + }, + "ь": { + text: "\\cyrchar\\cyrsftsn", + commandspacer: true + }, + "э": { + text: "\\cyrchar\\cyrerev", + commandspacer: true + }, + "ю": { + text: "\\cyrchar\\cyryu", + commandspacer: true + }, + "я": { + text: "\\cyrchar\\cyrya", + commandspacer: true + }, + "ё": { + text: "\\cyrchar\\cyryo", + commandspacer: true + }, + "ђ": { + text: "\\cyrchar\\cyrdje", + commandspacer: true + }, + "ѓ": { + text: "\\cyrchar{\\'\\cyrg}" + }, + "є": { + text: "\\cyrchar\\cyrie", + commandspacer: true + }, + "ѕ": { + text: "\\cyrchar\\cyrdze", + commandspacer: true + }, + "і": { + text: "\\cyrchar\\cyrii", + commandspacer: true + }, + "ї": { + text: "\\cyrchar\\cyryi", + commandspacer: true + }, + "ј": { + text: "\\cyrchar\\cyrje", + commandspacer: true + }, + "љ": { + text: "\\cyrchar\\cyrlje", + commandspacer: true + }, + "њ": { + text: "\\cyrchar\\cyrnje", + commandspacer: true + }, + "ћ": { + text: "\\cyrchar\\cyrtshe", + commandspacer: true + }, + "ќ": { + text: "\\cyrchar{\\'\\cyrk}" + }, + "ў": { + text: "\\cyrchar\\cyrushrt", + commandspacer: true + }, + "џ": { + text: "\\cyrchar\\cyrdzhe", + commandspacer: true + }, + "Ń ": { + text: "\\cyrchar\\CYROMEGA", + commandspacer: true + }, + "ŃĄ": { + text: "\\cyrchar\\cyromega", + commandspacer: true + }, + "Ńą": { + text: "\\cyrchar\\CYRYAT", + commandspacer: true + }, + "Ń€": { + text: "\\cyrchar\\CYRIOTE", + commandspacer: true + }, + "Ń„": { + text: "\\cyrchar\\cyriote", + commandspacer: true + }, + "ŃŠ": { + text: "\\cyrchar\\CYRLYUS", + commandspacer: true + }, + "ѧ": { + text: "\\cyrchar\\cyrlyus", + commandspacer: true + }, + "Ńš": { + text: "\\cyrchar\\CYRIOTLYUS", + commandspacer: true + }, + "Ń©": { + text: "\\cyrchar\\cyriotlyus", + commandspacer: true + }, + "ŃȘ": { + text: "\\cyrchar\\CYRBYUS", + commandspacer: true + }, + "ŃŹ": { + text: "\\cyrchar\\CYRIOTBYUS", + commandspacer: true + }, + "Ń­": { + text: "\\cyrchar\\cyriotbyus", + commandspacer: true + }, + "Ńź": { + text: "\\cyrchar\\CYRKSI", + commandspacer: true + }, + "ŃŻ": { + text: "\\cyrchar\\cyrksi", + commandspacer: true + }, + "Ń°": { + text: "\\cyrchar\\CYRPSI", + commandspacer: true + }, + "ѱ": { + text: "\\cyrchar\\cyrpsi", + commandspacer: true + }, + "ŃČ": { + text: "\\cyrchar\\CYRFITA", + commandspacer: true + }, + "ŃŽ": { + text: "\\cyrchar\\CYRIZH", + commandspacer: true + }, + "Ńž": { + text: "\\cyrchar\\CYRUK", + commandspacer: true + }, + "Ńč": { + text: "\\cyrchar\\cyruk", + commandspacer: true + }, + "Ńș": { + text: "\\cyrchar\\CYROMEGARND", + commandspacer: true + }, + "Ń»": { + text: "\\cyrchar\\cyromegarnd", + commandspacer: true + }, + "ŃŒ": { + text: "\\cyrchar\\CYROMEGATITLO", + commandspacer: true + }, + "Ńœ": { + text: "\\cyrchar\\cyromegatitlo", + commandspacer: true + }, + "ŃŸ": { + text: "\\cyrchar\\CYROT", + commandspacer: true + }, + "Ńż": { + text: "\\cyrchar\\cyrot", + commandspacer: true + }, + "Ҁ": { + text: "\\cyrchar\\CYRKOPPA", + commandspacer: true + }, + "ҁ": { + text: "\\cyrchar\\cyrkoppa", + commandspacer: true + }, + "҂": { + text: "\\cyrchar\\cyrthousands", + commandspacer: true + }, + "҈": { + text: "\\cyrchar\\cyrhundredthousands", + commandspacer: true + }, + "҉": { + text: "\\cyrchar\\cyrmillions", + commandspacer: true + }, + "Ҍ": { + text: "\\cyrchar\\CYRSEMISFTSN", + commandspacer: true + }, + "ҍ": { + text: "\\cyrchar\\cyrsemisftsn", + commandspacer: true + }, + "Ҏ": { + text: "\\cyrchar\\CYRRTICK", + commandspacer: true + }, + "ҏ": { + text: "\\cyrchar\\cyrrtick", + commandspacer: true + }, + "Ґ": { + text: "\\cyrchar\\CYRGUP", + commandspacer: true + }, + "ґ": { + text: "\\cyrchar\\cyrgup", + commandspacer: true + }, + "Ғ": { + text: "\\cyrchar\\CYRGHCRS", + commandspacer: true + }, + "ғ": { + text: "\\cyrchar\\cyrghcrs", + commandspacer: true + }, + "Ҕ": { + text: "\\cyrchar\\CYRGHK", + commandspacer: true + }, + "ҕ": { + text: "\\cyrchar\\cyrghk", + commandspacer: true + }, + "Җ": { + text: "\\cyrchar\\CYRZHDSC", + commandspacer: true + }, + "җ": { + text: "\\cyrchar\\cyrzhdsc", + commandspacer: true + }, + "Ҙ": { + text: "\\cyrchar\\CYRZDSC", + commandspacer: true + }, + "ҙ": { + text: "\\cyrchar\\cyrzdsc", + commandspacer: true + }, + "Қ": { + text: "\\cyrchar\\CYRKDSC", + commandspacer: true + }, + "қ": { + text: "\\cyrchar\\cyrkdsc", + commandspacer: true + }, + "Ҝ": { + text: "\\cyrchar\\CYRKVCRS", + commandspacer: true + }, + "ҝ": { + text: "\\cyrchar\\cyrkvcrs", + commandspacer: true + }, + "Ҟ": { + text: "\\cyrchar\\CYRKHCRS", + commandspacer: true + }, + "ҟ": { + text: "\\cyrchar\\cyrkhcrs", + commandspacer: true + }, + "Ò ": { + text: "\\cyrchar\\CYRKBEAK", + commandspacer: true + }, + "ÒĄ": { + text: "\\cyrchar\\cyrkbeak", + commandspacer: true + }, + "Òą": { + text: "\\cyrchar\\CYRNDSC", + commandspacer: true + }, + "ÒŁ": { + text: "\\cyrchar\\cyrndsc", + commandspacer: true + }, + "Ò€": { + text: "\\cyrchar\\CYRNG", + commandspacer: true + }, + "Ò„": { + text: "\\cyrchar\\cyrng", + commandspacer: true + }, + "ÒŠ": { + text: "\\cyrchar\\CYRPHK", + commandspacer: true + }, + "Ò§": { + text: "\\cyrchar\\cyrphk", + commandspacer: true + }, + "Òš": { + text: "\\cyrchar\\CYRABHHA", + commandspacer: true + }, + "Ò©": { + text: "\\cyrchar\\cyrabhha", + commandspacer: true + }, + "ÒȘ": { + text: "\\cyrchar\\CYRSDSC", + commandspacer: true + }, + "Ò«": { + text: "\\cyrchar\\cyrsdsc", + commandspacer: true + }, + "ÒŹ": { + text: "\\cyrchar\\CYRTDSC", + commandspacer: true + }, + "Ò­": { + text: "\\cyrchar\\cyrtdsc", + commandspacer: true + }, + "Òź": { + text: "\\cyrchar\\CYRY", + commandspacer: true + }, + "ÒŻ": { + text: "\\cyrchar\\cyry", + commandspacer: true + }, + "Ò°": { + text: "\\cyrchar\\CYRYHCRS", + commandspacer: true + }, + "Ò±": { + text: "\\cyrchar\\cyryhcrs", + commandspacer: true + }, + "ÒČ": { + text: "\\cyrchar\\CYRHDSC", + commandspacer: true + }, + "Òł": { + text: "\\cyrchar\\cyrhdsc", + commandspacer: true + }, + "ÒŽ": { + text: "\\cyrchar\\CYRTETSE", + commandspacer: true + }, + "Ò”": { + text: "\\cyrchar\\cyrtetse", + commandspacer: true + }, + "Ò¶": { + text: "\\cyrchar\\CYRCHRDSC", + commandspacer: true + }, + "Ò·": { + text: "\\cyrchar\\cyrchrdsc", + commandspacer: true + }, + "Òž": { + text: "\\cyrchar\\CYRCHVCRS", + commandspacer: true + }, + "Òč": { + text: "\\cyrchar\\cyrchvcrs", + commandspacer: true + }, + "Òș": { + text: "\\cyrchar\\CYRSHHA", + commandspacer: true + }, + "Ò»": { + text: "\\cyrchar\\cyrshha", + commandspacer: true + }, + "ÒŒ": { + text: "\\cyrchar\\CYRABHCH", + commandspacer: true + }, + "Òœ": { + text: "\\cyrchar\\cyrabhch", + commandspacer: true + }, + "ÒŸ": { + text: "\\cyrchar\\CYRABHCHDSC", + commandspacer: true + }, + "Òż": { + text: "\\cyrchar\\cyrabhchdsc", + commandspacer: true + }, + "Ӏ": { + text: "\\cyrchar\\CYRpalochka", + commandspacer: true + }, + "Ӄ": { + text: "\\cyrchar\\CYRKHK", + commandspacer: true + }, + "ӄ": { + text: "\\cyrchar\\cyrkhk", + commandspacer: true + }, + "Ӈ": { + text: "\\cyrchar\\CYRNHK", + commandspacer: true + }, + "ӈ": { + text: "\\cyrchar\\cyrnhk", + commandspacer: true + }, + "Ӌ": { + text: "\\cyrchar\\CYRCHLDSC", + commandspacer: true + }, + "ӌ": { + text: "\\cyrchar\\cyrchldsc", + commandspacer: true + }, + "Ӕ": { + text: "\\cyrchar\\CYRAE", + commandspacer: true + }, + "ӕ": { + text: "\\cyrchar\\cyrae", + commandspacer: true + }, + "Ә": { + text: "\\cyrchar\\CYRSCHWA", + commandspacer: true + }, + "ә": { + text: "\\cyrchar\\cyrschwa", + commandspacer: true + }, + "Ó ": { + text: "\\cyrchar\\CYRABHDZE", + commandspacer: true + }, + "ÓĄ": { + text: "\\cyrchar\\cyrabhdze", + commandspacer: true + }, + "Óš": { + text: "\\cyrchar\\CYROTLD", + commandspacer: true + }, + "Ó©": { + text: "\\cyrchar\\cyrotld", + commandspacer: true + }, + "àĄ±": { + math: "\\\\backslash" + }, + "ᔃ": { + math: "^{a}", + text: "\\textsuperscript{a}" + }, + "ᔇ": { + math: "^{b}", + text: "\\textsuperscript{b}" + }, + "ᔈ": { + math: "^{d}", + text: "\\textsuperscript{d}" + }, + "ᔉ": { + math: "^{e}", + text: "\\textsuperscript{e}" + }, + "ᔍ": { + math: "^{g}", + text: "\\textsuperscript{g}" + }, + "ᔏ": { + math: "^{k}", + text: "\\textsuperscript{k}" + }, + "ᔐ": { + math: "^{m}", + text: "\\textsuperscript{m}" + }, + "á”’": { + math: "^{o}", + text: "\\textsuperscript{o}" + }, + "á”–": { + math: "^{p}", + text: "\\textsuperscript{p}" + }, + "á”—": { + math: "^{t}", + text: "\\textsuperscript{t}" + }, + "ᔘ": { + math: "^{u}", + text: "\\textsuperscript{u}" + }, + "á”›": { + math: "^{v}", + text: "\\textsuperscript{v}" + }, + "ᶜ": { + math: "^{c}", + text: "\\textsuperscript{c}" + }, + "ᶠ": { + math: "^{f}", + text: "\\textsuperscript{f}" + }, + "ᶻ": { + math: "^{z}", + text: "\\textsuperscript{z}" + }, + "ᾂ": { + text: "\\.B" + }, + "ឃ": { + text: "\\.b" + }, + "ᾄ": { + text: "\\d{B}" + }, + "ᾅ": { + text: "\\d{b}" + }, + "ᾆ": { + text: "\\b{B}" + }, + "ᾇ": { + text: "\\b{b}" + }, + "ᾊ": { + text: "\\.D" + }, + "ᾋ": { + text: "\\.d" + }, + "ᾌ": { + text: "\\d{D}" + }, + "ឍ": { + text: "\\d{d}" + }, + "ᾎ": { + text: "\\b{D}" + }, + "ត": { + text: "\\b{d}" + }, + "ថ": { + text: "\\c{D}" + }, + "ᾑ": { + text: "\\c{d}" + }, + "ᾜ": { + text: "\\c{\\u{E}}" + }, + "ឝ": { + text: "\\c{\\u{e}}" + }, + "ᾞ": { + text: "\\.F" + }, + "ᾟ": { + text: "\\.f" + }, + "áž ": { + text: "\\=G" + }, + "ឥ": { + text: "\\=g" + }, + "ážą": { + text: "\\.H" + }, + "ឣ": { + text: "\\.h" + }, + "ក": { + text: "\\d{H}" + }, + "áž„": { + text: "\\d{h}" + }, + "ដ": { + text: "\\\"H" + }, + "ឧ": { + text: "\\\"h" + }, + "ážš": { + text: "\\c{H}" + }, + "áž©": { + text: "\\c{h}" + }, + "áž°": { + text: "\\'K" + }, + "áž±": { + text: "\\'k" + }, + "ážČ": { + text: "\\d{K}" + }, + "ážł": { + text: "\\d{k}" + }, + "ណ": { + text: "\\b{K}" + }, + "áž”": { + text: "\\b{k}" + }, + "ា": { + text: "\\d{L}" + }, + "áž·": { + text: "\\d{l}" + }, + "ážș": { + text: "\\b{L}" + }, + "áž»": { + text: "\\b{l}" + }, + "ស": { + text: "\\'M" + }, + "ážż": { + text: "\\'m" + }, + "áč€": { + text: "\\.M" + }, + "áč": { + text: "\\.m" + }, + "áč‚": { + text: "\\d{M}" + }, + "áčƒ": { + text: "\\d{m}" + }, + "áč„": { + text: "\\.N" + }, + "áč…": { + text: "\\.n" + }, + "áč†": { + text: "\\d{N}" + }, + "áč‡": { + text: "\\d{n}" + }, + "áčˆ": { + text: "\\b{N}" + }, + "áč‰": { + text: "\\b{n}" + }, + "áč”": { + text: "\\'P" + }, + "áč•": { + text: "\\'p" + }, + "áč–": { + text: "\\.P" + }, + "áč—": { + text: "\\.p" + }, + "áč˜": { + text: "\\.R" + }, + "áč™": { + text: "\\.r" + }, + "áčš": { + text: "\\d{R}" + }, + "áč›": { + text: "\\d{r}" + }, + "áčž": { + text: "\\b{R}" + }, + "áčŸ": { + text: "\\b{r}" + }, + "áč ": { + text: "\\.S" + }, + "áčĄ": { + text: "\\.s" + }, + "áčą": { + text: "\\d{S}" + }, + "áčŁ": { + text: "\\d{s}" + }, + "áčȘ": { + text: "\\.T" + }, + "áč«": { + text: "\\.t" + }, + "áčŹ": { + text: "\\d{T}" + }, + "áč­": { + text: "\\d{t}" + }, + "áčź": { + text: "\\b{T}" + }, + "áčŻ": { + text: "\\b{t}" + }, + "áčŒ": { + text: "\\~V" + }, + "áčœ": { + text: "\\~v" + }, + "áčŸ": { + text: "\\d{V}" + }, + "áčż": { + text: "\\d{v}" + }, + "áș€": { + text: "\\`W" + }, + "áș": { + text: "\\`w" + }, + "áș‚": { + text: "\\'W" + }, + "áșƒ": { + text: "\\'w" + }, + "áș„": { + text: "\\\"W" + }, + "áș…": { + text: "\\\"w" + }, + "áș†": { + text: "\\.W" + }, + "áș‡": { + text: "\\.w" + }, + "áșˆ": { + text: "\\d{W}" + }, + "áș‰": { + text: "\\d{w}" + }, + "áșŠ": { + text: "\\.X" + }, + "áș‹": { + text: "\\.x" + }, + "áșŒ": { + text: "\\\"X" + }, + "áș": { + text: "\\\"x" + }, + "áșŽ": { + text: "\\.Y" + }, + "áș": { + text: "\\.y" + }, + "áș": { + text: "\\^Z" + }, + "áș‘": { + text: "\\^z" + }, + "áș’": { + text: "\\d{Z}" + }, + "áș“": { + text: "\\d{z}" + }, + "áș”": { + text: "\\b{Z}" + }, + "áș•": { + text: "\\b{z}" + }, + "áș–": { + text: "\\b{h}" + }, + "áș—": { + text: "\\\"t" + }, + "áș˜": { + text: "\\r{w}" + }, + "áș™": { + text: "\\r{y}" + }, + "áș ": { + text: "\\d{A}" + }, + "áșĄ": { + text: "\\d{a}" + }, + "áșž": { + text: "\\d{E}" + }, + "áșč": { + text: "\\d{e}" + }, + "áșŒ": { + text: "\\~E" + }, + "áșœ": { + text: "\\~e" + }, + "Ị": { + text: "\\d{I}" + }, + "ị": { + text: "\\d{i}" + }, + "Ọ": { + text: "\\d{O}" + }, + "ọ": { + text: "\\d{o}" + }, + "Ề": { + text: "\\d{U}" + }, + "Ễ": { + text: "\\d{u}" + }, + "á»Č": { + text: "\\`Y" + }, + "ỳ": { + text: "\\`y" + }, + "Ỏ": { + text: "\\d{Y}" + }, + "á»”": { + text: "\\d{y}" + }, + "Ở": { + text: "\\~Y" + }, + "á»č": { + text: "\\~y" + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\quad", + space: true + }, + " ": { + text: "\\hspace{0.6em}", + space: true + }, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" + }, + " ": { + text: "\\;", + space: true + }, + " ": { + text: "\\hspace{0.25em}", + space: true + }, + " ": { + text: "\\hspace{0.166em}", + space: true + }, + " ": { + text: "\\hphantom{0}", + space: true + }, + " ": { + text: "\\hphantom{,}", + space: true + }, + " ": { + text: "\\,", + space: true + }, + " ": { + math: "\\mkern1mu", + space: true + }, + "​": { + text: "\\mbox", + commandspacer: true, + space: true + }, + "‌": { + text: "{\\aftergroup\\ignorespaces}" + }, + "‐": { + text: "-" + }, + "‑": { + text: "-" + }, + "‒": { + text: "-" + }, + "–": { + text: "\\textendash", + commandspacer: true + }, + "—": { + text: "\\textemdash", + commandspacer: true + }, + "―": { + math: "\\horizbar", + text: "\\rule{1em}{1pt}" + }, + "‖": { + math: "\\Vert" + }, + "‗": { + math: "\\twolowline" + }, + "‘": { + text: "`" + }, + "’": { + text: "'" + }, + "‚": { + text: "," + }, + "‛": { + math: "\\Elzreapos" + }, + "“": { + text: "``" + }, + "”": { + text: "''" + }, + "„": { + text: ",," + }, + "‟": { + text: "\\quotedblbase", + commandspacer: true + }, + "†": { + math: "\\dagger", + text: "\\textdagger", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‡": { + math: "\\ddagger", + text: "\\textdaggerdbl", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‱": { + math: "\\bullet", + text: "\\textbullet", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‣": { + text: ">" + }, + " ": { + text: "." + }, + " ": { + math: "\\enleadertwodots", + text: ".." + }, + "
": { + math: "\\ldots", + text: "\\ldots", + commandspacer: true + }, + "‧": { + text: "-" + }, + " ": { + text: " ", + space: true + }, + "‰": { + text: "\\textperthousand", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "‱": { + text: "\\textpertenthousand", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "â€Č": { + math: "{'}" + }, + "″": { + math: "{''}" + }, + "‮": { + math: "{'''}" + }, + "—": { + math: "\\backprime" + }, + "‶": { + math: "\\backdprime" + }, + "‷": { + math: "\\backtrprime" + }, + "‾": { + math: "\\caretinsert" + }, + "â€č": { + text: "\\guilsinglleft", + commandspacer: true + }, + "â€ș": { + text: "\\guilsinglright", + commandspacer: true + }, + "‌": { + math: "\\Exclam" + }, + "‟": { + text: "-" + }, + "⁃": { + math: "\\hyphenbullet" + }, + "⁄": { + math: "\\fracslash" + }, + "⁇": { + math: "\\Question" + }, + "⁈": { + text: "?!" + }, + "⁉": { + text: "!?" + }, + "⁊": { + text: "7" + }, + "⁐": { + math: "\\closure" + }, + "⁗": { + math: "''''" + }, + " ": { + math: "\\:", + space: true, + text: "\\:" + }, + "⁠": { + text: "\\nolinebreak", + commandspacer: true + }, + "⁰": { + math: "^{0}" + }, + "ⁱ": { + math: "^{i}", + text: "\\textsuperscript{i}" + }, + "⁎": { + math: "^{4}" + }, + "⁔": { + math: "^{5}" + }, + "⁶": { + math: "^{6}" + }, + "⁷": { + math: "^{7}" + }, + "⁞": { + math: "^{8}" + }, + "âč": { + math: "^{9}" + }, + "âș": { + math: "^{+}" + }, + "⁻": { + math: "^{-}" + }, + "⁌": { + math: "^{=}" + }, + "⁜": { + math: "^{(}" + }, + " ": { + math: "^{)}" + }, + "ⁿ": { + math: "^{n}", + text: "\\textsuperscript{n}" + }, + "₀": { + math: "_{0}" + }, + "₁": { + math: "_{1}" + }, + "₂": { + math: "_{2}" + }, + "₃": { + math: "_{3}" + }, + "₄": { + math: "_{4}" + }, + "₅": { + math: "_{5}" + }, + "₆": { + math: "_{6}" + }, + "₇": { + math: "_{7}" + }, + "₈": { + math: "_{8}" + }, + "₉": { + math: "_{9}" + }, + "₊": { + math: "_{+}" + }, + "₋": { + math: "_{-}" + }, + "₌": { + math: "_{=}" + }, + "₍": { + math: "_{(}" + }, + "₎": { + math: "_{)}" + }, + "ₐ": { + math: "_{a}", + text: "\\textsubscript{a}" + }, + "ₑ": { + math: "_{e}", + text: "\\textsubscript{e}" + }, + "ₒ": { + math: "_{o}", + text: "\\textsubscript{o}" + }, + "ₓ": { + math: "_{x}", + text: "\\textsubscript{x}" + }, + "ₔ": { + text: "\\textsubscript{\\textschwa}", + textpackages: [ + "tipa" + ] + }, + "ₕ": { + math: "_{h}", + text: "\\textsubscript{h}" + }, + "ₖ": { + math: "_{k}", + text: "\\textsubscript{k}" + }, + "ₗ": { + math: "_{l}", + text: "\\textsubscript{l}" + }, + "ₘ": { + math: "_{m}", + text: "\\textsubscript{m}" + }, + "ₙ": { + math: "_{n}", + text: "\\textsubscript{n}" + }, + "ₚ": { + math: "_{p}", + text: "\\textsubscript{p}" + }, + "ₛ": { + math: "_{s}", + text: "\\textsubscript{s}" + }, + "ₜ": { + math: "_{t}", + text: "\\textsubscript{t}" + }, + "₧": { + text: "\\ensuremath{\\Elzpes}" + }, + "€": { + math: "\\euro", + text: "\\texteuro", + commandspacer: true + }, + "⃐": { + math: "\\lvec" + }, + "⃑": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⃒": { + math: "\\vertoverlay" + }, + "⃖": { + math: "\\LVec" + }, + "⃗": { + math: "\\vec" + }, + "⃛": { + math: "\\dddot" + }, + "⃜": { + math: "\\ddddot" + }, + "⃝": { + math: "\\enclosecircle" + }, + "⃞": { + math: "\\enclosesquare" + }, + "⃟": { + math: "\\enclosediamond" + }, + "⃥": { + math: "\\overleftrightarrow" + }, + "⃀": { + math: "\\enclosetriangle" + }, + "⃧": { + math: "\\annuity" + }, + "⃚": { + math: "\\threeunderdot" + }, + "⃩": { + math: "\\widebridgeabove" + }, + "⃏": { + math: "\\underrightharpoondown" + }, + "⃭": { + math: "\\underleftharpoondown" + }, + "⃟": { + math: "\\underleftarrow" + }, + "⃯": { + math: "\\underrightarrow" + }, + "⃰": { + math: "\\asteraccent" + }, + "℀": { + text: "a/c" + }, + "℁": { + text: "a/s" + }, + "ℂ": { + math: "\\mathbb{C}" + }, + "℃": { + text: "\\textcelsius", + commandspacer: true + }, + "℅": { + text: "c/o" + }, + "℆": { + text: "c/u" + }, + "ℇ": { + math: "\\Euler" + }, + "℉": { + text: "F" + }, + "ℊ": { + math: "\\mathscr{g}" + }, + "ℋ": { + math: "\\mathscr{H}" + }, + "ℌ": { + math: "\\mathfrak{H}" + }, + "ℍ": { + math: "\\mathbb{H}" + }, + "ℎ": { + math: "\\Planckconst" + }, + "ℏ": { + math: "\\hslash" + }, + "ℐ": { + math: "\\mathscr{I}" + }, + "ℑ": { + math: "\\mathfrak{I}" + }, + "ℒ": { + math: "\\mathscr{L}" + }, + "ℓ": { + math: "\\mathscr{l}" + }, + "ℕ": { + math: "\\mathbb{N}" + }, + "№": { + text: "\\cyrchar\\textnumero", + commandspacer: true + }, + "℗": { + text: "\\textcircledP", + commandspacer: true + }, + "℘": { + math: "\\wp" + }, + "ℙ": { + math: "\\mathbb{P}" + }, + "ℚ": { + math: "\\mathbb{Q}" + }, + "ℛ": { + math: "\\mathscr{R}" + }, + "ℜ": { + math: "\\mathfrak{R}" + }, + "ℝ": { + math: "\\mathbb{R}" + }, + "℞": { + math: "\\Elzxrat" + }, + "℠": { + text: "\\textservicemark", + commandspacer: true + }, + "℡": { + text: "TEL" + }, + "ℱ": { + text: "\\texttrademark", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "â„€": { + math: "\\mathbb{Z}" + }, + "℩": { + math: "\\Omega" + }, + "℧": { + math: "\\mho" + }, + "ℹ": { + math: "\\mathfrak{Z}" + }, + "℩": { + text: "\\textriota", + commandspacer: true + }, + "â„Ș": { + text: "K" + }, + "Å": { + math: "\\Angstroem", + text: "\\AA", + commandspacer: true + }, + "ℬ": { + math: "\\mathscr{B}" + }, + "ℭ": { + math: "\\mathfrak{C}" + }, + "ℼ": { + text: "\\textestimated", + commandspacer: true + }, + "ℯ": { + math: "\\mathscr{e}" + }, + "ℰ": { + math: "\\mathscr{E}" + }, + "ℱ": { + math: "\\mathscr{F}" + }, + "â„Č": { + math: "\\Finv" + }, + "ℳ": { + math: "\\mathscr{M}" + }, + "℮": { + math: "\\mathscr{o}" + }, + "â„”": { + math: "\\aleph" + }, + "ℶ": { + math: "\\beth" + }, + "ℷ": { + math: "\\gimel" + }, + "ℾ": { + math: "\\daleth" + }, + "â„Œ": { + math: "\\mathbb{\\pi}" + }, + "â„œ": { + math: "\\mathbb{\\gamma}" + }, + "â„Ÿ": { + math: "\\mathbb{\\Gamma}" + }, + "ℿ": { + math: "\\mathbb{\\Pi}" + }, + "⅀": { + math: "\\mathbb{\\Sigma}" + }, + "⅁": { + math: "\\Game" + }, + "⅂": { + math: "\\sansLturned" + }, + "⅃": { + math: "\\sansLmirrored" + }, + "⅄": { + math: "\\Yup" + }, + "ⅅ": { + math: "\\CapitalDifferentialD" + }, + "ⅆ": { + math: "\\DifferentialD" + }, + "ⅇ": { + math: "\\ExponetialE" + }, + "ⅈ": { + math: "\\ComplexI" + }, + "ⅉ": { + math: "\\ComplexJ" + }, + "⅊": { + math: "\\PropertyLine" + }, + "⅋": { + math: "\\invamp" + }, + "⅐": { + math: "\\frac{1}{7}" + }, + "⅑": { + math: "\\frac{1}{9}" + }, + "⅒": { + math: "\\frac{1}{10}" + }, + "⅓": { + math: "\\frac{1}{3}" + }, + "⅔": { + math: "\\frac{2}{3}" + }, + "⅕": { + math: "\\frac{1}{5}" + }, + "⅖": { + math: "\\frac{2}{5}" + }, + "⅗": { + math: "\\frac{3}{5}" + }, + "⅘": { + math: "\\frac{4}{5}" + }, + "⅙": { + math: "\\frac{1}{6}" + }, + "⅚": { + math: "\\frac{5}{6}" + }, + "⅛": { + math: "\\frac{1}{8}" + }, + "⅜": { + math: "\\frac{3}{8}" + }, + "⅝": { + math: "\\frac{5}{8}" + }, + "⅞": { + math: "\\frac{7}{8}" + }, + "⅟": { + math: "\\frac{1}" + }, + "Ⅰ": { + text: "I" + }, + "Ⅱ": { + text: "II" + }, + "ⅱ": { + text: "III" + }, + "Ⅳ": { + text: "IV" + }, + "â…€": { + text: "V" + }, + "â…„": { + text: "VI" + }, + "Ⅹ": { + text: "VII" + }, + "Ⅷ": { + text: "VIII" + }, + "ⅹ": { + text: "IX" + }, + "Ⅹ": { + text: "X" + }, + "â…Ș": { + text: "XI" + }, + "Ⅻ": { + text: "XII" + }, + "Ⅼ": { + text: "L" + }, + "Ⅽ": { + text: "C" + }, + "ⅼ": { + text: "D" + }, + "Ⅿ": { + text: "M" + }, + "ⅰ": { + text: "i" + }, + "ⅱ": { + text: "ii" + }, + "â…Č": { + text: "iii" + }, + "ⅳ": { + text: "iv" + }, + "Ⅾ": { + text: "v" + }, + "â…”": { + text: "vi" + }, + "ⅶ": { + text: "vii" + }, + "ⅷ": { + text: "viii" + }, + "ⅾ": { + text: "ix" + }, + "â…č": { + text: "x" + }, + "â…ș": { + text: "xi" + }, + "ⅻ": { + text: "xii" + }, + "â…Œ": { + text: "l" + }, + "â…œ": { + text: "c" + }, + "â…Ÿ": { + text: "d" + }, + "ⅿ": { + text: "m" + }, + "↉": { + math: "\\frac{0}{3}" + }, + "←": { + math: "\\leftarrow" + }, + "↑": { + math: "\\uparrow" + }, + "→": { + math: "\\rightarrow", + text: "\\textrightarrow", + commandspacer: true, + textpackages: [ + "textcomp" + ] + }, + "↓": { + math: "\\downarrow" + }, + "↔": { + math: "\\leftrightarrow" + }, + "↕": { + math: "\\updownarrow" + }, + "↖": { + math: "\\nwarrow" + }, + "↗": { + math: "\\nearrow" + }, + "↘": { + math: "\\searrow" + }, + "↙": { + math: "\\swarrow" + }, + "↚": { + math: "\\nleftarrow" + }, + "↛": { + math: "\\nrightarrow" + }, + "↜": { + math: "\\arrowwaveleft" + }, + "↝": { + math: "\\arrowwaveright" + }, + "↞": { + math: "\\twoheadleftarrow" + }, + "↟": { + math: "\\twoheaduparrow" + }, + "↠": { + math: "\\twoheadrightarrow" + }, + "↡": { + math: "\\twoheaddownarrow" + }, + "↱": { + math: "\\leftarrowtail" + }, + "↣": { + math: "\\rightarrowtail" + }, + "ↀ": { + math: "\\mapsfrom" + }, + "ↄ": { + math: "\\MapsUp" + }, + "↩": { + math: "\\mapsto" + }, + "↧": { + math: "\\MapsDown" + }, + "↹": { + math: "\\updownarrowbar" + }, + "↩": { + math: "\\hookleftarrow" + }, + "â†Ș": { + math: "\\hookrightarrow" + }, + "↫": { + math: "\\looparrowleft" + }, + "↬": { + math: "\\looparrowright" + }, + "↭": { + math: "\\leftrightsquigarrow" + }, + "↼": { + math: "\\nleftrightarrow" + }, + "↯": { + math: "\\lightning" + }, + "↰": { + math: "\\Lsh" + }, + "↱": { + math: "\\Rsh" + }, + "â†Č": { + math: "\\dlsh" + }, + "↳": { + text: "\\reflectbox{\\carriagereturn}", + textpackages: [ + "graphics", + "unicode-math" + ] + }, + "↮": { + math: "\\linefeed" + }, + "↔": { + math: "\\carriagereturn" + }, + "↶": { + math: "\\curvearrowleft" + }, + "↷": { + math: "\\curvearrowright" + }, + "↾": { + math: "\\barovernorthwestarrow" + }, + "â†č": { + math: "\\barleftarrowrightarrowba" + }, + "â†ș": { + math: "\\circlearrowleft" + }, + "↻": { + math: "\\circlearrowright" + }, + "↌": { + math: "\\leftharpoonup" + }, + "↜": { + math: "\\leftharpoondown" + }, + "↟": { + math: "\\upharpoonright" + }, + "↿": { + math: "\\upharpoonleft" + }, + "⇀": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⇁": { + math: "\\rightharpoondown" + }, + "⇂": { + math: "\\downharpoonright" + }, + "⇃": { + math: "\\downharpoonleft" + }, + "⇄": { + math: "\\rightleftarrows" + }, + "⇅": { + math: "\\dblarrowupdown" + }, + "⇆": { + math: "\\leftrightarrows" + }, + "⇇": { + math: "\\leftleftarrows" + }, + "⇈": { + math: "\\upuparrows" + }, + "⇉": { + math: "\\rightrightarrows" + }, + "⇊": { + math: "\\downdownarrows" + }, + "⇋": { + math: "\\leftrightharpoons" + }, + "⇌": { + math: "\\rightleftharpoons" + }, + "⇍": { + math: "\\nLeftarrow" + }, + "⇎": { + math: "\\nLeftrightarrow" + }, + "⇏": { + math: "\\nRightarrow" + }, + "⇐": { + math: "\\Leftarrow" + }, + "⇑": { + math: "\\Uparrow" + }, + "⇒": { + math: "\\Rightarrow" + }, + "⇓": { + math: "\\Downarrow" + }, + "⇔": { + math: "\\Leftrightarrow" + }, + "⇕": { + math: "\\Updownarrow" + }, + "⇖": { + math: "\\Nwarrow" + }, + "⇗": { + math: "\\Nearrow" + }, + "⇘": { + math: "\\Searrow" + }, + "⇙": { + math: "\\Swarrow" + }, + "⇚": { + math: "\\Lleftarrow" + }, + "⇛": { + math: "\\Rrightarrow" + }, + "⇜": { + math: "\\leftsquigarrow" + }, + "⇝": { + math: "\\rightsquigarrow" + }, + "⇞": { + math: "\\nHuparrow" + }, + "⇟": { + math: "\\nHdownarrow" + }, + "⇠": { + math: "\\dashleftarrow" + }, + "⇡": { + math: "\\updasharrow" + }, + "⇱": { + math: "\\dashrightarrow" + }, + "⇣": { + math: "\\downdasharrow" + }, + "⇀": { + math: "\\LeftArrowBar" + }, + "⇄": { + math: "\\RightArrowBar" + }, + "⇩": { + math: "\\leftwhitearrow" + }, + "⇧": { + math: "\\upwhitearrow" + }, + "⇹": { + math: "\\rightwhitearrow" + }, + "⇩": { + math: "\\downwhitearrow" + }, + "â‡Ș": { + math: "\\whitearrowupfrombar" + }, + "⇮": { + math: "\\circleonrightarrow" + }, + "⇔": { + math: "\\DownArrowUpArrow" + }, + "⇶": { + math: "\\rightthreearrows" + }, + "⇷": { + math: "\\nvleftarrow" + }, + "⇾": { + math: "\\pfun" + }, + "â‡č": { + math: "\\nvleftrightarrow" + }, + "â‡ș": { + math: "\\nVleftarrow" + }, + "⇻": { + math: "\\ffun" + }, + "⇌": { + math: "\\nVleftrightarrow" + }, + "⇜": { + math: "\\leftarrowtriangle" + }, + "⇟": { + math: "\\rightarrowtriangle" + }, + "⇿": { + math: "\\leftrightarrowtriangle" + }, + "∀": { + math: "\\forall" + }, + "∁": { + math: "\\complement" + }, + "∂": { + math: "\\partial" + }, + "∃": { + math: "\\exists" + }, + "∄": { + math: "\\nexists" + }, + "∅": { + math: "\\varnothing" + }, + "∆": { + math: "\\increment" + }, + "∇": { + math: "\\nabla" + }, + "∈": { + math: "\\in" + }, + "∉": { + math: "\\not\\in" + }, + "∊": { + math: "\\smallin" + }, + "∋": { + math: "\\ni" + }, + "∌": { + math: "\\not\\ni" + }, + "∍": { + math: "\\smallni" + }, + "∎": { + math: "\\QED" + }, + "∏": { + math: "\\prod" + }, + "∐": { + math: "\\coprod" + }, + "∑": { + math: "\\sum" + }, + "−": { + math: "-", + text: "-" + }, + "∓": { + math: "\\mp" + }, + "∔": { + math: "\\dotplus" + }, + "∕": { + text: "/" + }, + "∖": { + math: "\\setminus" + }, + "∗": { + math: "{_\\ast}" + }, + "∘": { + math: "\\circ" + }, + "∙": { + math: "\\bullet" + }, + "√": { + math: "\\surd" + }, + "∛": { + math: "\\sqrt[3]" + }, + "∜": { + math: "\\sqrt[4]" + }, + "∝": { + math: "\\propto" + }, + "∞": { + math: "\\infty" + }, + "∟": { + math: "\\rightangle" + }, + "∠": { + math: "\\angle" + }, + "∥": { + math: "\\measuredangle" + }, + "∹": { + math: "\\sphericalangle" + }, + "∣": { + math: "\\mid" + }, + "∀": { + math: "\\nmid" + }, + "∄": { + math: "\\parallel" + }, + "∊": { + math: "\\nparallel" + }, + "∧": { + math: "\\wedge" + }, + "√": { + math: "\\vee" + }, + "∩": { + math: "\\cap" + }, + "âˆȘ": { + math: "\\cup" + }, + "∫": { + math: "\\int" + }, + "∏": { + math: "{\\int\\!\\int}" + }, + "∭": { + math: "{\\int\\!\\int\\!\\int}" + }, + "∟": { + math: "\\oint" + }, + "∯": { + math: "\\surfintegral" + }, + "∰": { + math: "\\volintegral" + }, + "∱": { + math: "\\clwintegral" + }, + "âˆČ": { + math: "\\lcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∳": { + math: "\\rcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∎": { + math: "\\therefore" + }, + "∔": { + math: "\\because" + }, + "∶": { + math: ":" + }, + "∷": { + math: "\\Colon" + }, + "∞": { + math: "\\dotdiv", + mathpackages: [ + "mathabx" + ] + }, + "âˆč": { + math: "\\eqcolon" + }, + "âˆș": { + math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}" + }, + "∻": { + math: "\\homothetic" + }, + "∌": { + math: "\\sim" + }, + "∜": { + math: "\\backsim" + }, + "∟": { + math: "\\lazysinv" + }, + "∿": { + math: "\\AC" + }, + "≀": { + math: "\\wr" + }, + "≁": { + math: "\\not\\sim" + }, + "≂": { + math: "\\texteqsim", + mathpackages: [ + "xecjk" + ] + }, + "≂̞": { + math: "\\NotEqualTilde" + }, + "≃": { + math: "\\simeq" + }, + "≄": { + math: "\\not\\simeq" + }, + "≅": { + math: "\\cong" + }, + "≆": { + math: "\\approxnotequal" + }, + "≇": { + math: "\\not\\cong" + }, + "≈": { + math: "\\approx" + }, + "≉": { + math: "\\not\\approx" + }, + "≊": { + math: "\\approxeq" + }, + "≋": { + math: "\\tildetrpl" + }, + "≋̞": { + math: "\\not\\apid" + }, + "≌": { + math: "\\allequal" + }, + "≍": { + math: "\\asymp" + }, + "≎": { + math: "\\Bumpeq" + }, + "≎̞": { + math: "\\NotHumpDownHump" + }, + "≏": { + math: "\\bumpeq" + }, + "≏̞": { + math: "\\NotHumpEqual" + }, + "≐": { + math: "\\doteq" + }, + "≐̞": { + math: "\\not\\doteq" + }, + "≑": { + math: "\\doteqdot" + }, + "≒": { + math: "\\fallingdotseq" + }, + "≓": { + math: "\\risingdotseq" + }, + "≔": { + math: "\\coloneq", + text: ":=" + }, + "≕": { + math: "=:" + }, + "≖": { + math: "\\eqcirc" + }, + "≗": { + math: "\\circeq" + }, + "≘": { + math: "\\arceq" + }, + "≙": { + math: "\\estimates" + }, + "≛": { + math: "\\starequal" + }, + "≜": { + math: "\\triangleq" + }, + "≝": { + math: "\\eqdef" + }, + "≞": { + math: "\\measeq" + }, + "≠": { + math: "\\neq" + }, + "≡": { + math: "\\equiv" + }, + "≱": { + math: "\\not\\equiv" + }, + "≣": { + math: "\\Equiv" + }, + "≀": { + math: "\\leq" + }, + "≄": { + math: "\\geq" + }, + "≩": { + math: "\\leqq" + }, + "≧": { + math: "\\geqq" + }, + "≹": { + math: "\\lneqq" + }, + "≚": { + math: "\\lvertneqq" + }, + "≩": { + math: "\\gneqq" + }, + "≩": { + math: "\\gvertneqq" + }, + "â‰Ș": { + math: "\\ll" + }, + "â‰ȘÌž": { + math: "\\NotLessLess" + }, + "≫": { + math: "\\gg" + }, + "≫̞": { + math: "\\NotGreaterGreater" + }, + "≬": { + math: "\\between" + }, + "≭": { + math: "{\\not\\kern-0.3em\\times}" + }, + "≼": { + math: "\\not<" + }, + "≯": { + math: "\\not>" + }, + "≰": { + math: "\\not\\leq" + }, + "≱": { + math: "\\not\\geq" + }, + "â‰Č": { + math: "\\lessequivlnt" + }, + "≳": { + math: "\\greaterequivlnt" + }, + "≶": { + math: "\\lessgtr" + }, + "≷": { + math: "\\gtrless" + }, + "≾": { + math: "\\notlessgreater" + }, + "â‰č": { + math: "\\notgreaterless" + }, + "â‰ș": { + math: "\\prec" + }, + "≻": { + math: "\\succ" + }, + "≌": { + math: "\\preccurlyeq" + }, + "≜": { + math: "\\succcurlyeq" + }, + "≟": { + math: "\\precapprox" + }, + "≟̞": { + math: "\\NotPrecedesTilde" + }, + "≿": { + math: "\\succapprox" + }, + "â‰żÌž": { + math: "\\NotSucceedsTilde" + }, + "⊀": { + math: "\\not\\prec" + }, + "⊁": { + math: "\\not\\succ" + }, + "⊂": { + math: "\\subset" + }, + "⊃": { + math: "\\supset" + }, + "⊄": { + math: "\\not\\subset" + }, + "⊅": { + math: "\\not\\supset" + }, + "⊆": { + math: "\\subseteq" + }, + "⊇": { + math: "\\supseteq" + }, + "⊈": { + math: "\\not\\subseteq" + }, + "⊉": { + math: "\\not\\supseteq" + }, + "⊊": { + math: "\\subsetneq" + }, + "⊊": { + math: "\\varsubsetneqq" + }, + "⊋": { + math: "\\supsetneq" + }, + "⊋": { + math: "\\varsupsetneq" + }, + "⊌": { + math: "\\cupleftarrow" + }, + "⊍": { + math: "\\cupdot" + }, + "⊎": { + math: "\\uplus" + }, + "⊏": { + math: "\\sqsubset" + }, + "⊏̞": { + math: "\\NotSquareSubset" + }, + "⊐": { + math: "\\sqsupset" + }, + "⊐̞": { + math: "\\NotSquareSuperset" + }, + "⊑": { + math: "\\sqsubseteq" + }, + "⊒": { + math: "\\sqsupseteq" + }, + "⊓": { + math: "\\sqcap" + }, + "⊔": { + math: "\\sqcup" + }, + "⊕": { + math: "\\oplus" + }, + "⊖": { + math: "\\ominus" + }, + "⊗": { + math: "\\otimes" + }, + "⊘": { + math: "\\oslash" + }, + "⊙": { + math: "\\odot" + }, + "⊚": { + math: "\\circledcirc" + }, + "⊛": { + math: "\\circledast" + }, + "⊜": { + math: "\\circledequal" + }, + "⊝": { + math: "\\circleddash" + }, + "⊞": { + math: "\\boxplus" + }, + "⊟": { + math: "\\boxminus" + }, + "⊠": { + math: "\\boxtimes" + }, + "⊡": { + math: "\\boxdot" + }, + "⊱": { + math: "\\vdash" + }, + "⊣": { + math: "\\dashv" + }, + "⊀": { + math: "\\top" + }, + "⊄": { + math: "\\perp" + }, + "⊩": { + math: "\\assert" + }, + "⊧": { + math: "\\truestate" + }, + "⊹": { + math: "\\forcesextra" + }, + "⊩": { + math: "\\Vdash" + }, + "âŠȘ": { + math: "\\Vvdash" + }, + "⊫": { + math: "\\VDash" + }, + "⊬": { + math: "\\nvdash" + }, + "⊭": { + math: "\\nvDash" + }, + "⊼": { + math: "\\nVdash" + }, + "⊯": { + math: "\\nVDash" + }, + "⊰": { + math: "\\prurel" + }, + "⊱": { + math: "\\scurel" + }, + "âŠČ": { + math: "\\vartriangleleft" + }, + "⊳": { + math: "\\vartriangleright" + }, + "⊮": { + math: "\\trianglelefteq" + }, + "⊔": { + math: "\\trianglerighteq" + }, + "⊶": { + math: "\\original" + }, + "⊷": { + math: "\\image" + }, + "⊾": { + math: "\\multimap" + }, + "âŠč": { + math: "\\hermitconjmatrix" + }, + "âŠș": { + math: "\\intercal" + }, + "⊻": { + math: "\\veebar" + }, + "⊌": { + math: "\\barwedge" + }, + "⊜": { + math: "\\barvee" + }, + "⊟": { + math: "\\rightanglearc" + }, + "⊿": { + math: "\\varlrtriangle" + }, + "⋂": { + math: "\\bigcap" + }, + "⋃": { + math: "\\bigcup" + }, + "⋄": { + math: "\\diamond" + }, + "⋅": { + math: "\\cdot" + }, + "⋆": { + math: "\\star" + }, + "⋇": { + math: "\\divideontimes" + }, + "⋈": { + math: "\\bowtie" + }, + "⋉": { + math: "\\ltimes" + }, + "⋊": { + math: "\\rtimes" + }, + "⋋": { + math: "\\leftthreetimes" + }, + "⋌": { + math: "\\rightthreetimes" + }, + "⋍": { + math: "\\backsimeq" + }, + "⋎": { + math: "\\curlyvee" + }, + "⋏": { + math: "\\curlywedge" + }, + "⋐": { + math: "\\Subset" + }, + "⋑": { + math: "\\Supset" + }, + "⋒": { + math: "\\Cap" + }, + "⋓": { + math: "\\Cup" + }, + "⋔": { + math: "\\pitchfork" + }, + "⋕": { + math: "\\hash" + }, + "⋖": { + math: "\\lessdot" + }, + "⋗": { + math: "\\gtrdot" + }, + "⋘": { + math: "\\verymuchless" + }, + "⋙": { + math: "\\verymuchgreater" + }, + "⋚": { + math: "\\lesseqgtr" + }, + "⋛": { + math: "\\gtreqless" + }, + "⋜": { + math: "\\eqless" + }, + "⋝": { + math: "\\eqgtr" + }, + "⋞": { + math: "\\curlyeqprec" + }, + "⋟": { + math: "\\curlyeqsucc" + }, + "⋠": { + math: "\\npreceq" + }, + "⋡": { + math: "\\nsucceq" + }, + "⋱": { + math: "\\not\\sqsubseteq" + }, + "⋣": { + math: "\\not\\sqsupseteq" + }, + "â‹€": { + math: "\\sqsubsetneq" + }, + "â‹„": { + math: "\\Elzsqspne" + }, + "⋩": { + math: "\\lnsim" + }, + "⋧": { + math: "\\gnsim" + }, + "⋹": { + math: "\\precedesnotsimilar" + }, + "⋩": { + math: "\\succnsim" + }, + "â‹Ș": { + math: "\\ntriangleleft" + }, + "⋫": { + math: "\\ntriangleright" + }, + "⋬": { + math: "\\ntrianglelefteq" + }, + "⋭": { + math: "\\ntrianglerighteq" + }, + "⋼": { + math: "\\vdots" + }, + "⋯": { + math: "\\cdots" + }, + "⋰": { + math: "\\upslopeellipsis" + }, + "⋱": { + math: "\\downslopeellipsis" + }, + "â‹Č": { + math: "\\disin" + }, + "⋳": { + math: "\\varisins" + }, + "⋮": { + math: "\\isins" + }, + "â‹”": { + math: "\\isindot" + }, + "⋶": { + math: "\\barin" + }, + "⋷": { + math: "\\isinobar" + }, + "⋾": { + math: "\\isinvb" + }, + "â‹č": { + math: "\\isinE" + }, + "â‹ș": { + math: "\\nisd" + }, + "⋻": { + math: "\\varnis" + }, + "â‹Œ": { + math: "\\nis" + }, + "â‹œ": { + math: "\\varniobar" + }, + "â‹Ÿ": { + math: "\\niobar" + }, + "⋿": { + math: "\\bagmember" + }, + "⌀": { + math: "\\diameter" + }, + "⌂": { + math: "\\house" + }, + "⌅": { + math: "\\varbarwedge", + text: "\\barwedge", + commandspacer: true + }, + "⌆": { + math: "\\perspcorrespond" + }, + "⌈": { + math: "\\lceil" + }, + "⌉": { + math: "\\rceil" + }, + "⌊": { + math: "\\lfloor" + }, + "⌋": { + math: "\\rfloor" + }, + "⌐": { + math: "\\invneg" + }, + "⌑": { + math: "\\wasylozenge" + }, + "⌒": { + math: "\\profline" + }, + "⌓": { + math: "\\profsurf" + }, + "⌕": { + math: "\\recorder" + }, + "⌖": { + math: "{\\mathchar\"2208}" + }, + "⌗": { + math: "\\viewdata" + }, + "⌙": { + math: "\\turnednot" + }, + "⌜": { + math: "\\ulcorner" + }, + "⌝": { + math: "\\urcorner" + }, + "⌞": { + math: "\\llcorner" + }, + "⌟": { + math: "\\lrcorner" + }, + "⌠": { + math: "\\inttop" + }, + "⌡": { + math: "\\intbottom" + }, + "⌱": { + math: "\\frown" + }, + "⌣": { + math: "\\smile" + }, + "〈": { + math: "\\langle" + }, + "âŒȘ": { + math: "\\rangle" + }, + "⌬": { + math: "\\varhexagonlrbonds" + }, + "âŒČ": { + math: "\\conictaper" + }, + "⌶": { + math: "\\topbot" + }, + "âŒč": { + math: "\\APLinv" + }, + "⌿": { + math: "\\notslash" + }, + "⍀": { + math: "\\notbackslash" + }, + "⍇": { + math: "\\APLleftarrowbox" + }, + "⍈": { + math: "\\APLrightarrowbox" + }, + "⍉": { + math: "\\invdiameter" + }, + "⍐": { + math: "\\APLuparrowbox" + }, + "⍓": { + math: "\\APLboxupcaret" + }, + "⍗": { + math: "\\APLdownarrowbox" + }, + "⍝": { + math: "\\APLcomment" + }, + "⍞": { + math: "\\APLinput" + }, + "⍟": { + math: "\\APLlog" + }, + "⍰": { + math: "\\APLboxquestion" + }, + "⍌": { + math: "\\rangledownzigzagarrow" + }, + "⎔": { + math: "\\hexagon" + }, + "⎛": { + math: "\\lparenuend" + }, + "⎜": { + math: "\\lparenextender" + }, + "⎝": { + math: "\\lparenlend" + }, + "⎞": { + math: "\\rparenuend" + }, + "⎟": { + math: "\\rparenextender" + }, + "⎠": { + math: "\\rparenlend" + }, + "⎡": { + math: "\\lbrackuend" + }, + "⎱": { + math: "\\lbrackextender" + }, + "⎣": { + math: "\\Elzdlcorn" + }, + "⎀": { + math: "\\rbrackuend" + }, + "⎄": { + math: "\\rbrackextender" + }, + "⎊": { + math: "\\rbracklend" + }, + "⎧": { + math: "\\lbraceuend" + }, + "⎚": { + math: "\\lbracemid" + }, + "⎩": { + math: "\\lbracelend" + }, + "âŽȘ": { + math: "\\vbraceextender" + }, + "⎫": { + math: "\\rbraceuend" + }, + "⎬": { + math: "\\rbracemid" + }, + "⎭": { + math: "\\rbracelend" + }, + "⎼": { + math: "\\intextender" + }, + "⎯": { + math: "\\harrowextender" + }, + "⎰": { + math: "\\lmoustache" + }, + "⎱": { + math: "\\rmoustache" + }, + "âŽČ": { + math: "\\sumtop" + }, + "⎳": { + math: "\\sumbottom" + }, + "⎮": { + math: "\\overbracket" + }, + "⎔": { + math: "\\underbracket" + }, + "⎶": { + math: "\\bbrktbrk" + }, + "⎷": { + math: "\\sqrtbottom" + }, + "⎾": { + math: "\\lvboxline" + }, + "âŽč": { + math: "\\rvboxline" + }, + "⏎": { + math: "\\varcarriagereturn" + }, + "⏜": { + math: "\\overparen" + }, + "⏝": { + math: "\\underparen" + }, + "⏞": { + math: "\\overbrace" + }, + "⏟": { + math: "\\underbrace" + }, + "⏠": { + math: "\\obrbrak" + }, + "⏡": { + math: "\\ubrbrak" + }, + "⏱": { + math: "\\trapezium" + }, + "⏣": { + math: "\\benzenr" + }, + "⏀": { + math: "\\strns" + }, + "⏄": { + math: "\\fltns" + }, + "⏊": { + math: "\\accurrent" + }, + "⏧": { + math: "\\elinters" + }, + "␀": { + text: "NUL" + }, + "␁": { + text: "SOH" + }, + "␂": { + text: "STX" + }, + "␃": { + text: "ETX" + }, + "␄": { + text: "EOT" + }, + "␅": { + text: "ENQ" + }, + "␆": { + text: "ACK" + }, + "␇": { + text: "BEL" + }, + "␈": { + text: "BS" + }, + "␉": { + text: "HT" + }, + "␊": { + text: "LF" + }, + "␋": { + text: "VT" + }, + "␌": { + text: "FF" + }, + "␍": { + text: "CR" + }, + "␎": { + text: "SO" + }, + "␏": { + text: "SI" + }, + "␐": { + text: "DLE" + }, + "␑": { + text: "DC1" + }, + "␒": { + text: "DC2" + }, + "␓": { + text: "DC3" + }, + "␔": { + text: "DC4" + }, + "␕": { + text: "NAK" + }, + "␖": { + text: "SYN" + }, + "␗": { + text: "ETB" + }, + "␘": { + text: "CAN" + }, + "␙": { + text: "EM" + }, + "␚": { + text: "SUB" + }, + "␛": { + text: "ESC" + }, + "␜": { + text: "FS" + }, + "␝": { + text: "GS" + }, + "␞": { + text: "RS" + }, + "␟": { + text: "US" + }, + "␠": { + text: "SP" + }, + "␥": { + text: "DEL" + }, + "␣": { + text: "\\textvisiblespace", + commandspacer: true + }, + "␀": { + text: "NL" + }, + "␄": { + text: "///" + }, + "␊": { + text: "?" + }, + "①": { + text: "\\ding{172}" + }, + "②": { + text: "\\ding{173}" + }, + "⑱": { + text: "\\ding{174}" + }, + "④": { + text: "\\ding{175}" + }, + "â‘€": { + text: "\\ding{176}" + }, + "â‘„": { + text: "\\ding{177}" + }, + "⑩": { + text: "\\ding{178}" + }, + "⑧": { + text: "\\ding{179}" + }, + "⑹": { + text: "\\ding{180}" + }, + "⑩": { + text: "\\ding{181}" + }, + "â‘Ș": { + text: "(11)" + }, + "⑫": { + text: "(12)" + }, + "⑬": { + text: "(13)" + }, + "⑭": { + text: "(14)" + }, + "⑼": { + text: "(15)" + }, + "⑯": { + text: "(16)" + }, + "⑰": { + text: "(17)" + }, + "⑱": { + text: "(18)" + }, + "â‘Č": { + text: "(19)" + }, + "⑳": { + text: "(20)" + }, + "⑮": { + text: "(1)" + }, + "â‘”": { + text: "(2)" + }, + "⑶": { + text: "(3)" + }, + "⑷": { + text: "(4)" + }, + "⑾": { + text: "(5)" + }, + "â‘č": { + text: "(6)" + }, + "â‘ș": { + text: "(7)" + }, + "⑻": { + text: "(8)" + }, + "â‘Œ": { + text: "(9)" + }, + "â‘œ": { + text: "(10)" + }, + "â‘Ÿ": { + text: "(11)" + }, + "⑿": { + text: "(12)" + }, + "⒀": { + text: "(13)" + }, + "⒁": { + text: "(14)" + }, + "⒂": { + text: "(15)" + }, + "⒃": { + text: "(16)" + }, + "⒄": { + text: "(17)" + }, + "⒅": { + text: "(18)" + }, + "⒆": { + text: "(19)" + }, + "⒇": { + text: "(20)" + }, + "⒈": { + text: "1." + }, + "⒉": { + text: "2." + }, + "⒊": { + text: "3." + }, + "⒋": { + text: "4." + }, + "⒌": { + text: "5." + }, + "⒍": { + text: "6." + }, + "⒎": { + text: "7." + }, + "⒏": { + text: "8." + }, + "⒐": { + text: "9." + }, + "⒑": { + text: "10." + }, + "⒒": { + text: "11." + }, + "⒓": { + text: "12." + }, + "⒔": { + text: "13." + }, + "⒕": { + text: "14." + }, + "⒖": { + text: "15." + }, + "⒗": { + text: "16." + }, + "⒘": { + text: "17." + }, + "⒙": { + text: "18." + }, + "⒚": { + text: "19." + }, + "⒛": { + text: "20." + }, + "⒜": { + text: "(a)" + }, + "⒝": { + text: "(b)" + }, + "⒞": { + text: "(c)" + }, + "⒟": { + text: "(d)" + }, + "⒠": { + text: "(e)" + }, + "⒡": { + text: "(f)" + }, + "⒱": { + text: "(g)" + }, + "⒣": { + text: "(h)" + }, + "â’€": { + text: "(i)" + }, + "â’„": { + text: "(j)" + }, + "⒩": { + text: "(k)" + }, + "⒧": { + text: "(l)" + }, + "Ⓓ": { + text: "(m)" + }, + "⒩": { + text: "(n)" + }, + "â’Ș": { + text: "(o)" + }, + "⒫": { + text: "(p)" + }, + "⒬": { + text: "(q)" + }, + "⒭": { + text: "(r)" + }, + "Ⓖ": { + text: "(s)" + }, + "⒯": { + text: "(t)" + }, + "⒰": { + text: "(u)" + }, + "⒱": { + text: "(v)" + }, + "â’Č": { + text: "(w)" + }, + "⒳": { + text: "(x)" + }, + "⒮": { + text: "(y)" + }, + "â’”": { + text: "(z)" + }, + "Ⓐ": { + text: "(A)" + }, + "Ⓑ": { + text: "(B)" + }, + "Ⓘ": { + text: "(C)" + }, + "â’č": { + text: "(D)" + }, + "â’ș": { + text: "(E)" + }, + "Ⓕ": { + text: "(F)" + }, + "â’Œ": { + text: "(G)" + }, + "â’œ": { + text: "(H)" + }, + "â’Ÿ": { + text: "(I)" + }, + "Ⓙ": { + text: "(J)" + }, + "Ⓚ": { + text: "(K)" + }, + "Ⓛ": { + text: "(L)" + }, + "Ⓜ": { + text: "(M)" + }, + "Ⓝ": { + text: "(N)" + }, + "Ⓞ": { + text: "(O)" + }, + "Ⓟ": { + text: "(P)" + }, + "Ⓠ": { + text: "(Q)" + }, + "Ⓡ": { + text: "(R)" + }, + "Ⓢ": { + math: "\\circledS" + }, + "Ⓣ": { + text: "(T)" + }, + "Ⓤ": { + text: "(U)" + }, + "Ⓥ": { + text: "(V)" + }, + "Ⓦ": { + text: "(W)" + }, + "Ⓧ": { + text: "(X)" + }, + "Ⓨ": { + text: "(Y)" + }, + "Ⓩ": { + text: "(Z)" + }, + "ⓐ": { + text: "(a)" + }, + "ⓑ": { + text: "(b)" + }, + "ⓒ": { + text: "(c)" + }, + "ⓓ": { + text: "(d)" + }, + "ⓔ": { + text: "(e)" + }, + "ⓕ": { + text: "(f)" + }, + "ⓖ": { + text: "(g)" + }, + "ⓗ": { + text: "(h)" + }, + "ⓘ": { + text: "(i)" + }, + "ⓙ": { + text: "(j)" + }, + "ⓚ": { + text: "(k)" + }, + "ⓛ": { + text: "(l)" + }, + "ⓜ": { + text: "(m)" + }, + "ⓝ": { + text: "(n)" + }, + "ⓞ": { + text: "(o)" + }, + "ⓟ": { + text: "(p)" + }, + "ⓠ": { + text: "(q)" + }, + "ⓡ": { + text: "(r)" + }, + "⓱": { + text: "(s)" + }, + "ⓣ": { + text: "(t)" + }, + "â“€": { + text: "(u)" + }, + "â“„": { + text: "(v)" + }, + "ⓩ": { + text: "(w)" + }, + "ⓧ": { + text: "(x)" + }, + "⓹": { + text: "(y)" + }, + "ⓩ": { + text: "(z)" + }, + "â“Ș": { + text: "(0)" + }, + "─": { + text: "-" + }, + "━": { + text: "=" + }, + "│": { + text: "|" + }, + "┃": { + text: "|" + }, + "┄": { + text: "-" + }, + "┅": { + text: "=" + }, + "┆": { + math: "\\Elzdshfnc" + }, + "┇": { + text: "|" + }, + "┈": { + text: "-" + }, + "┉": { + text: "=" + }, + "┊": { + text: "|" + }, + "┋": { + text: "|" + }, + "┌": { + text: "+" + }, + "┍": { + text: "+" + }, + "┎": { + text: "+" + }, + "┏": { + text: "+" + }, + "┐": { + text: "+" + }, + "┑": { + text: "+" + }, + "┒": { + text: "+" + }, + "┓": { + text: "+" + }, + "└": { + text: "+" + }, + "┕": { + text: "+" + }, + "┖": { + text: "+" + }, + "┗": { + text: "+" + }, + "┘": { + text: "+" + }, + "┙": { + math: "\\Elzsqfnw" + }, + "┚": { + text: "+" + }, + "┛": { + text: "+" + }, + "├": { + text: "+" + }, + "┝": { + text: "+" + }, + "┞": { + text: "+" + }, + "┟": { + text: "+" + }, + "┠": { + text: "+" + }, + "┡": { + text: "+" + }, + "┱": { + text: "+" + }, + "┣": { + text: "+" + }, + "─": { + text: "+" + }, + "┄": { + text: "+" + }, + "┩": { + text: "+" + }, + "┧": { + text: "+" + }, + "┹": { + text: "+" + }, + "┩": { + text: "+" + }, + "â”Ș": { + text: "+" + }, + "┫": { + text: "+" + }, + "┬": { + text: "+" + }, + "┭": { + text: "+" + }, + "┼": { + text: "+" + }, + "┯": { + text: "+" + }, + "┰": { + text: "+" + }, + "┱": { + text: "+" + }, + "â”Č": { + text: "+" + }, + "┳": { + text: "+" + }, + "┮": { + text: "+" + }, + "â””": { + text: "+" + }, + "┶": { + text: "+" + }, + "┷": { + text: "+" + }, + "┾": { + text: "+" + }, + "â”č": { + text: "+" + }, + "â”ș": { + text: "+" + }, + "┻": { + text: "+" + }, + "┌": { + text: "+" + }, + "├": { + text: "+" + }, + "┟": { + text: "+" + }, + "┿": { + text: "+" + }, + "╀": { + text: "+" + }, + "╁": { + text: "+" + }, + "╂": { + text: "+" + }, + "╃": { + text: "+" + }, + "╄": { + text: "+" + }, + "╅": { + text: "+" + }, + "╆": { + text: "+" + }, + "╇": { + text: "+" + }, + "╈": { + text: "+" + }, + "╉": { + text: "+" + }, + "╊": { + text: "+" + }, + "╋": { + text: "+" + }, + "╌": { + text: "-" + }, + "╍": { + text: "=" + }, + "╎": { + text: "|" + }, + "╏": { + text: "|" + }, + "═": { + text: "=" + }, + "║": { + text: "|" + }, + "╒": { + text: "+" + }, + "╓": { + text: "+" + }, + "╔": { + text: "+" + }, + "╕": { + text: "+" + }, + "╖": { + text: "+" + }, + "╗": { + text: "+" + }, + "╘": { + text: "+" + }, + "╙": { + text: "+" + }, + "╚": { + text: "+" + }, + "╛": { + text: "+" + }, + "╜": { + text: "+" + }, + "╝": { + text: "+" + }, + "╞": { + text: "+" + }, + "╟": { + text: "+" + }, + "╠": { + text: "+" + }, + "╡": { + text: "+" + }, + "╱": { + text: "+" + }, + "╣": { + text: "+" + }, + "â•€": { + text: "+" + }, + "â•„": { + text: "+" + }, + "╩": { + text: "+" + }, + "╧": { + text: "+" + }, + "╹": { + text: "+" + }, + "╩": { + text: "+" + }, + "â•Ș": { + text: "+" + }, + "╫": { + text: "+" + }, + "╬": { + text: "+" + }, + "╭": { + text: "+" + }, + "╼": { + text: "+" + }, + "╯": { + text: "+" + }, + "╰": { + text: "+" + }, + "╱": { + math: "\\diagup" + }, + "â•Č": { + text: "\\" + }, + "╳": { + text: "X" + }, + "â•Œ": { + text: "-" + }, + "â•œ": { + text: "|" + }, + "â•Ÿ": { + text: "-" + }, + "╿": { + text: "|" + }, + "▀": { + math: "\\blockuphalf" + }, + "▄": { + math: "\\blocklowhalf" + }, + "█": { + math: "\\blockfull" + }, + "▌": { + math: "\\blocklefthalf" + }, + "▐": { + math: "\\blockrighthalf" + }, + "░": { + math: "\\blockqtrshaded" + }, + "▒": { + math: "\\blockhalfshaded" + }, + "▓": { + math: "\\blockthreeqtrshaded" + }, + "■": { + math: "\\mdlgblksquare", + text: "\\ding{110}" + }, + "□": { + math: "\\square" + }, + "▱": { + math: "\\squoval" + }, + "▣": { + math: "\\blackinwhitesquare" + }, + "â–€": { + math: "\\squarehfill" + }, + "â–„": { + math: "\\squarevfill" + }, + "▩": { + math: "\\squarehvfill" + }, + "▧": { + math: "\\squarenwsefill" + }, + "▹": { + math: "\\squareneswfill" + }, + "▩": { + math: "\\squarecrossfill" + }, + "â–Ș": { + math: "\\blacksquare" + }, + "▫": { + math: "\\smwhtsquare" + }, + "▬": { + math: "\\hrectangleblack" + }, + "▭": { + math: "\\fbox{~~}" + }, + "▼": { + math: "\\vrectangleblack" + }, + "▯": { + math: "\\Elzvrecto" + }, + "▰": { + math: "\\parallelogramblack" + }, + "â–Č": { + math: "\\bigblacktriangleup", + text: "\\ding{115}" + }, + "△": { + math: "\\bigtriangleup" + }, + "▮": { + math: "\\blacktriangle" + }, + "â–”": { + math: "\\vartriangle" + }, + "▶": { + math: "\\RHD" + }, + "▷": { + math: "\\rhd" + }, + "▾": { + math: "\\blacktriangleright" + }, + "â–č": { + math: "\\triangleright" + }, + "â–ș": { + math: "\\blackpointerright" + }, + "▻": { + math: "\\whitepointerright" + }, + "â–Œ": { + math: "\\bigblacktriangledown", + text: "\\ding{116}" + }, + "â–œ": { + math: "\\bigtriangledown" + }, + "â–Ÿ": { + math: "\\blacktriangledown" + }, + "▿": { + math: "\\triangledown" + }, + "◀": { + math: "\\LHD" + }, + "◁": { + math: "\\lhd" + }, + "◂": { + math: "\\blacktriangleleft" + }, + "◃": { + math: "\\triangleleft" + }, + "◄": { + math: "\\blackpointerleft" + }, + "◅": { + math: "\\whitepointerleft" + }, + "◆": { + math: "\\Diamondblack", + text: "\\ding{117}" + }, + "◇": { + math: "\\Diamond" + }, + "◈": { + math: "\\blackinwhitediamond" + }, + "◉": { + math: "\\fisheye" + }, + "◊": { + math: "\\lozenge" + }, + "○": { + math: "\\bigcirc" + }, + "◌": { + math: "\\dottedcircle" + }, + "◍": { + math: "\\circlevertfill" + }, + "◎": { + math: "\\bullseye" + }, + "●": { + math: "\\CIRCLE", + text: "\\ding{108}" + }, + "◐": { + math: "\\Elzcirfl" + }, + "◑": { + math: "\\Elzcirfr" + }, + "◒": { + math: "\\Elzcirfb" + }, + "◓": { + math: "\\circletophalfblack" + }, + "◔": { + math: "\\circleurquadblack" + }, + "◕": { + math: "\\blackcircleulquadwhite" + }, + "◖": { + math: "\\LEFTCIRCLE" + }, + "◗": { + math: "\\RIGHTCIRCLE", + text: "\\ding{119}" + }, + "◘": { + math: "\\Elzrvbull" + }, + "◙": { + math: "\\inversewhitecircle" + }, + "◚": { + math: "\\invwhiteupperhalfcircle" + }, + "◛": { + math: "\\invwhitelowerhalfcircle" + }, + "◜": { + math: "\\ularc" + }, + "◝": { + math: "\\urarc" + }, + "◞": { + math: "\\lrarc" + }, + "◟": { + math: "\\llarc" + }, + "◠": { + math: "\\topsemicircle" + }, + "◡": { + math: "\\botsemicircle" + }, + "◱": { + math: "\\lrblacktriangle" + }, + "◣": { + math: "\\llblacktriangle" + }, + "â—€": { + math: "\\ulblacktriangle" + }, + "â—„": { + math: "\\urblacktriangle" + }, + "◩": { + math: "\\smwhtcircle" + }, + "◧": { + math: "\\Elzsqfl" + }, + "◹": { + math: "\\Elzsqfr" + }, + "◩": { + math: "\\squareulblack" + }, + "â—Ș": { + math: "\\Elzsqfse" + }, + "◫": { + math: "\\boxbar" + }, + "◬": { + math: "\\trianglecdot" + }, + "◭": { + math: "\\triangleleftblack" + }, + "◼": { + math: "\\trianglerightblack" + }, + "◯": { + math: "\\bigcirc" + }, + "◰": { + math: "\\squareulquad" + }, + "◱": { + math: "\\squarellquad" + }, + "â—Č": { + math: "\\squarelrquad" + }, + "◳": { + math: "\\squareurquad" + }, + "◮": { + math: "\\circleulquad" + }, + "â—”": { + math: "\\circlellquad" + }, + "◶": { + math: "\\circlelrquad" + }, + "◷": { + math: "\\circleurquad" + }, + "◾": { + math: "\\ultriangle" + }, + "â—č": { + math: "\\urtriangle" + }, + "â—ș": { + math: "\\lltriangle" + }, + "◻": { + math: "\\square" + }, + "â—Œ": { + math: "\\blacksquare" + }, + "â—œ": { + math: "\\mdsmwhtsquare" + }, + "â—Ÿ": { + math: "\\mdsmblksquare" + }, + "◿": { + math: "\\lrtriangle" + }, + "★": { + math: "\\bigstar", + text: "\\ding{72}" + }, + "☆": { + math: "\\bigwhitestar", + text: "\\ding{73}" + }, + "☉": { + math: "\\Sun" + }, + "☎": { + text: "\\ding{37}" + }, + "☐": { + math: "\\Square" + }, + "☑": { + math: "\\CheckedBox" + }, + "☒": { + math: "\\XBox" + }, + "☓": { + text: "X" + }, + "☕": { + math: "\\steaming" + }, + "☛": { + text: "\\ding{42}" + }, + "☞": { + math: "\\pointright", + text: "\\ding{43}" + }, + "☠": { + math: "\\skull" + }, + "☥": { + math: "\\danger" + }, + "☹": { + math: "\\radiation" + }, + "☣": { + math: "\\biohazard" + }, + "☯": { + math: "\\yinyang" + }, + "â˜č": { + math: "\\frownie" + }, + "â˜ș": { + math: "\\smiley" + }, + "☻": { + math: "\\blacksmiley" + }, + "☌": { + math: "\\sun" + }, + "☜": { + text: "\\rightmoon", + commandspacer: true, + textpackages: [ + "wasysym" + ] + }, + "☟": { + text: "\\leftmoon", + commandspacer: true, + textpackages: [ + "wasysym" + ] + }, + "☿": { + math: "\\mercury", + text: "\\mercury", + commandspacer: true + }, + "♀": { + math: "\\female", + text: "\\venus", + commandspacer: true + }, + "♁": { + math: "\\earth" + }, + "♂": { + math: "\\male", + text: "\\male", + commandspacer: true + }, + "♃": { + math: "\\jupiter", + text: "\\jupiter", + commandspacer: true + }, + "♄": { + math: "\\saturn", + text: "\\saturn", + commandspacer: true + }, + "♅": { + math: "\\uranus", + text: "\\uranus", + commandspacer: true + }, + "♆": { + math: "\\neptune", + text: "\\neptune", + commandspacer: true + }, + "♇": { + math: "\\pluto", + text: "\\pluto", + commandspacer: true + }, + "♈": { + math: "\\aries", + text: "\\aries", + commandspacer: true + }, + "♉": { + math: "\\taurus", + text: "\\taurus", + commandspacer: true + }, + "♊": { + math: "\\gemini", + text: "\\gemini", + commandspacer: true + }, + "♋": { + math: "\\cancer", + text: "\\cancer", + commandspacer: true + }, + "♌": { + math: "\\leo", + text: "\\leo", + commandspacer: true + }, + "♍": { + math: "\\virgo", + text: "\\virgo", + commandspacer: true + }, + "♎": { + math: "\\libra", + text: "\\libra", + commandspacer: true + }, + "♏": { + math: "\\scorpio", + text: "\\scorpio", + commandspacer: true + }, + "♐": { + math: "\\sagittarius", + text: "\\sagittarius", + commandspacer: true + }, + "♑": { + math: "\\capricornus", + text: "\\capricornus", + commandspacer: true + }, + "♒": { + math: "\\aquarius", + text: "\\aquarius", + commandspacer: true + }, + "♓": { + math: "\\pisces", + text: "\\pisces", + commandspacer: true + }, + "♠": { + math: "\\spadesuit", + text: "\\ding{171}" + }, + "♡": { + math: "\\heartsuit" + }, + "♱": { + math: "\\diamond" + }, + "♣": { + math: "\\clubsuit", + text: "\\ding{168}" + }, + "♀": { + math: "\\varspadesuit" + }, + "♄": { + math: "\\varheartsuit", + text: "\\ding{170}" + }, + "♩": { + math: "\\vardiamondsuit", + text: "\\ding{169}" + }, + "♧": { + math: "\\varclubsuit" + }, + "♩": { + math: "\\quarternote", + text: "\\quarternote", + commandspacer: true + }, + "â™Ș": { + math: "\\eighthnote", + text: "\\eighthnote", + commandspacer: true + }, + "♫": { + math: "\\twonotes" + }, + "♬": { + math: "\\sixteenthnote" + }, + "♭": { + math: "\\flat" + }, + "♼": { + math: "\\natural" + }, + "♯": { + math: "\\sharp" + }, + "♻": { + math: "\\recycle" + }, + "♟": { + math: "\\acidfree" + }, + "⚀": { + math: "\\dicei" + }, + "⚁": { + math: "\\diceii" + }, + "⚂": { + math: "\\diceiii" + }, + "⚃": { + math: "\\diceiv" + }, + "⚄": { + math: "\\dicev" + }, + "⚅": { + math: "\\dicevi" + }, + "⚆": { + math: "\\circledrightdot" + }, + "⚇": { + math: "\\circledtwodots" + }, + "⚈": { + math: "\\blackcircledrightdot" + }, + "⚉": { + math: "\\blackcircledtwodots" + }, + "⚓": { + math: "\\anchor" + }, + "⚔": { + math: "\\swords" + }, + "⚠": { + math: "\\warning" + }, + "âš„": { + math: "\\Hermaphrodite" + }, + "âšȘ": { + math: "\\medcirc" + }, + "⚫": { + math: "\\medbullet" + }, + "⚬": { + math: "\\mdsmwhtcircle" + }, + "âšČ": { + math: "\\neuter" + }, + "✁": { + text: "\\ding{33}" + }, + "✂": { + text: "\\ding{34}" + }, + "✃": { + text: "\\ding{35}" + }, + "✄": { + text: "\\ding{36}" + }, + "✆": { + text: "\\ding{38}" + }, + "✇": { + text: "\\ding{39}" + }, + "✈": { + text: "\\ding{40}" + }, + "✉": { + text: "\\ding{41}" + }, + "✌": { + text: "\\ding{44}" + }, + "✍": { + text: "\\ding{45}" + }, + "✎": { + math: "\\pencil", + text: "\\ding{46}" + }, + "✏": { + text: "\\ding{47}" + }, + "✐": { + text: "\\ding{48}" + }, + "✑": { + text: "\\ding{49}" + }, + "✒": { + text: "\\ding{50}" + }, + "✓": { + math: "\\checkmark", + text: "\\ding{51}" + }, + "✔": { + text: "\\ding{52}" + }, + "✕": { + text: "\\ding{53}" + }, + "✖": { + text: "\\ding{54}" + }, + "✗": { + math: "\\ballotx", + text: "\\ding{55}" + }, + "✘": { + text: "\\ding{56}" + }, + "✙": { + text: "\\ding{57}" + }, + "✚": { + text: "\\ding{58}" + }, + "✛": { + text: "\\ding{59}" + }, + "✜": { + text: "\\ding{60}" + }, + "✝": { + text: "\\ding{61}" + }, + "✞": { + text: "\\ding{62}" + }, + "✟": { + text: "\\ding{63}" + }, + "✠": { + math: "\\maltese", + text: "\\ding{64}" + }, + "✡": { + text: "\\ding{65}" + }, + "✱": { + text: "\\ding{66}" + }, + "✣": { + text: "\\ding{67}" + }, + "✀": { + text: "\\ding{68}" + }, + "✄": { + text: "\\ding{69}" + }, + "✩": { + text: "\\ding{70}" + }, + "✧": { + text: "\\ding{71}" + }, + "✩": { + text: "\\ding{73}" + }, + "âœȘ": { + math: "\\circledstar", + text: "\\ding{74}" + }, + "✫": { + text: "\\ding{75}" + }, + "✬": { + text: "\\ding{76}" + }, + "✭": { + text: "\\ding{77}" + }, + "✼": { + text: "\\ding{78}" + }, + "✯": { + text: "\\ding{79}" + }, + "✰": { + text: "\\ding{80}" + }, + "✱": { + text: "\\ding{81}" + }, + "âœČ": { + text: "\\ding{82}" + }, + "✳": { + text: "\\ding{83}" + }, + "✮": { + text: "\\ding{84}" + }, + "✔": { + text: "\\ding{85}" + }, + "✶": { + math: "\\varstar", + text: "\\ding{86}" + }, + "✷": { + text: "\\ding{87}" + }, + "✾": { + text: "\\ding{88}" + }, + "âœč": { + text: "\\ding{89}" + }, + "âœș": { + text: "\\ding{90}" + }, + "✻": { + text: "\\ding{91}" + }, + "✌": { + text: "\\ding{92}" + }, + "✜": { + math: "\\dingasterisk", + text: "\\ding{93}" + }, + "✟": { + text: "\\ding{94}" + }, + "✿": { + text: "\\ding{95}" + }, + "❀": { + text: "\\ding{96}" + }, + "❁": { + text: "\\ding{97}" + }, + "❂": { + text: "\\ding{98}" + }, + "❃": { + text: "\\ding{99}" + }, + "❄": { + text: "\\ding{100}" + }, + "❅": { + text: "\\ding{101}" + }, + "❆": { + text: "\\ding{102}" + }, + "❇": { + text: "\\ding{103}" + }, + "❈": { + text: "\\ding{104}" + }, + "❉": { + text: "\\ding{105}" + }, + "❊": { + text: "\\ding{106}" + }, + "❋": { + text: "\\ding{107}" + }, + "❍": { + text: "\\ding{109}" + }, + "❏": { + text: "\\ding{111}" + }, + "❐": { + text: "\\ding{112}" + }, + "❑": { + text: "\\ding{113}" + }, + "❒": { + text: "\\ding{114}" + }, + "❖": { + text: "\\ding{118}" + }, + "❘": { + text: "\\ding{120}" + }, + "❙": { + text: "\\ding{121}" + }, + "❚": { + text: "\\ding{122}" + }, + "❛": { + text: "\\ding{123}" + }, + "❜": { + text: "\\ding{124}" + }, + "❝": { + text: "\\ding{125}" + }, + "❞": { + text: "\\ding{126}" + }, + "❡": { + text: "\\ding{161}" + }, + "❱": { + text: "\\ding{162}" + }, + "❣": { + text: "\\ding{163}" + }, + "❀": { + text: "\\ding{164}" + }, + "❄": { + text: "\\ding{165}" + }, + "❊": { + text: "\\ding{166}" + }, + "❧": { + text: "\\ding{167}" + }, + "âČ": { + math: "\\lbrbrak" + }, + "❳": { + math: "\\rbrbrak" + }, + "❶": { + text: "\\ding{182}" + }, + "❷": { + text: "\\ding{183}" + }, + "❞": { + text: "\\ding{184}" + }, + "âč": { + text: "\\ding{185}" + }, + "âș": { + text: "\\ding{186}" + }, + "❻": { + text: "\\ding{187}" + }, + "❌": { + text: "\\ding{188}" + }, + "❜": { + text: "\\ding{189}" + }, + "❟": { + text: "\\ding{190}" + }, + "❿": { + text: "\\ding{191}" + }, + "➀": { + text: "\\ding{192}" + }, + "➁": { + text: "\\ding{193}" + }, + "➂": { + text: "\\ding{194}" + }, + "➃": { + text: "\\ding{195}" + }, + "➄": { + text: "\\ding{196}" + }, + "➅": { + text: "\\ding{197}" + }, + "➆": { + text: "\\ding{198}" + }, + "➇": { + text: "\\ding{199}" + }, + "➈": { + text: "\\ding{200}" + }, + "➉": { + text: "\\ding{201}" + }, + "➊": { + text: "\\ding{202}" + }, + "➋": { + text: "\\ding{203}" + }, + "➌": { + text: "\\ding{204}" + }, + "➍": { + text: "\\ding{205}" + }, + "➎": { + text: "\\ding{206}" + }, + "➏": { + text: "\\ding{207}" + }, + "➐": { + text: "\\ding{208}" + }, + "➑": { + text: "\\ding{209}" + }, + "➒": { + text: "\\ding{210}" + }, + "➓": { + text: "\\ding{211}" + }, + "➔": { + text: "\\ding{212}" + }, + "➘": { + text: "\\ding{216}" + }, + "➙": { + text: "\\ding{217}" + }, + "➚": { + text: "\\ding{218}" + }, + "➛": { + math: "\\draftingarrow", + text: "\\ding{219}" + }, + "➜": { + text: "\\ding{220}" + }, + "➝": { + text: "\\ding{221}" + }, + "➞": { + text: "\\ding{222}" + }, + "➟": { + text: "\\ding{223}" + }, + "➠": { + text: "\\ding{224}" + }, + "➡": { + text: "\\ding{225}" + }, + "➱": { + math: "\\arrowbullet", + text: "\\ding{226}" + }, + "➣": { + text: "\\ding{227}" + }, + "➀": { + text: "\\ding{228}" + }, + "➄": { + text: "\\ding{229}" + }, + "➊": { + text: "\\ding{230}" + }, + "➧": { + text: "\\ding{231}" + }, + "➚": { + text: "\\ding{232}" + }, + "➩": { + text: "\\ding{233}" + }, + "âžȘ": { + text: "\\ding{234}" + }, + "➫": { + text: "\\ding{235}" + }, + "➬": { + text: "\\ding{236}" + }, + "➭": { + text: "\\ding{237}" + }, + "➼": { + text: "\\ding{238}" + }, + "➯": { + text: "\\ding{239}" + }, + "➱": { + text: "\\ding{241}" + }, + "âžČ": { + text: "\\ding{242}" + }, + "➳": { + text: "\\ding{243}" + }, + "➮": { + text: "\\ding{244}" + }, + "➔": { + text: "\\ding{245}" + }, + "➶": { + text: "\\ding{246}" + }, + "➷": { + text: "\\ding{247}" + }, + "➾": { + text: "\\ding{248}" + }, + "âžč": { + text: "\\ding{249}" + }, + "âžș": { + text: "\\ding{250}" + }, + "➻": { + text: "\\ding{251}" + }, + "➌": { + text: "\\ding{252}" + }, + "➜": { + text: "\\ding{253}" + }, + "➟": { + text: "\\ding{254}" + }, + "⟀": { + math: "\\threedangle" + }, + "⟁": { + math: "\\whiteinwhitetriangle" + }, + "⟂": { + math: "\\perp" + }, + "⟃": { + math: "\\subsetcirc" + }, + "⟄": { + math: "\\supsetcirc" + }, + "⟅": { + math: "\\Lbag" + }, + "⟆": { + math: "\\Rbag" + }, + "⟇": { + math: "\\veedot" + }, + "⟈": { + math: "\\bsolhsub" + }, + "⟉": { + math: "\\suphsol" + }, + "⟌": { + math: "\\longdivision" + }, + "⟐": { + math: "\\Diamonddot" + }, + "⟑": { + math: "\\wedgedot" + }, + "⟒": { + math: "\\upin" + }, + "⟓": { + math: "\\pullback" + }, + "⟔": { + math: "\\pushout" + }, + "⟕": { + math: "\\leftouterjoin" + }, + "⟖": { + math: "\\rightouterjoin" + }, + "⟗": { + math: "\\fullouterjoin" + }, + "⟘": { + math: "\\bigbot" + }, + "⟙": { + math: "\\bigtop" + }, + "⟚": { + math: "\\DashVDash" + }, + "⟛": { + math: "\\dashVdash" + }, + "⟜": { + math: "\\multimapinv" + }, + "⟝": { + math: "\\vlongdash" + }, + "⟞": { + math: "\\longdashv" + }, + "⟟": { + math: "\\cirbot" + }, + "⟠": { + math: "\\lozengeminus" + }, + "⟡": { + math: "\\concavediamond" + }, + "⟱": { + math: "\\concavediamondtickleft" + }, + "⟣": { + math: "\\concavediamondtickright" + }, + "⟀": { + math: "\\whitesquaretickleft" + }, + "⟄": { + math: "\\whitesquaretickright" + }, + "⟩": { + math: "\\llbracket" + }, + "⟧": { + math: "\\rrbracket" + }, + "⟹": { + math: "\\langle" + }, + "⟩": { + math: "\\rangle" + }, + "âŸȘ": { + math: "\\lang" + }, + "⟫": { + math: "\\rang" + }, + "⟬": { + math: "\\Lbrbrak" + }, + "⟭": { + math: "\\Rbrbrak" + }, + "⟼": { + math: "\\lgroup" + }, + "⟯": { + math: "\\rgroup" + }, + "⟰": { + math: "\\UUparrow" + }, + "⟱": { + math: "\\DDownarrow" + }, + "âŸČ": { + math: "\\acwgapcirclearrow" + }, + "⟳": { + math: "\\cwgapcirclearrow" + }, + "⟮": { + math: "\\rightarrowonoplus" + }, + "⟔": { + math: "\\longleftarrow" + }, + "⟶": { + math: "\\longrightarrow" + }, + "⟷": { + math: "\\longleftrightarrow" + }, + "⟾": { + math: "\\Longleftarrow" + }, + "âŸč": { + math: "\\Longrightarrow" + }, + "âŸș": { + math: "\\Longleftrightarrow" + }, + "⟻": { + math: "\\longmapsfrom" + }, + "⟌": { + math: "\\longmapsto" + }, + "⟜": { + math: "\\Longmapsfrom" + }, + "⟟": { + math: "\\Longmapsto" + }, + "⟿": { + math: "\\sim\\joinrel\\leadsto" + }, + " ": { + math: "\\psur" + }, + " ": { + math: "\\nVtwoheadrightarrow" + }, + " ": { + math: "\\nvLeftarrow" + }, + " ": { + math: "\\nvRightarrow" + }, + " ": { + math: "\\nvLeftrightarrow" + }, + " ": { + math: "\\Mapsfrom" + }, + " ": { + math: "\\Mapsto" + }, + " ": { + math: "\\downarrowbarred" + }, + " ": { + math: "\\uparrowbarred" + }, + " ": { + math: "\\Uuparrow" + }, + "​": { + math: "\\Ddownarrow" + }, + "‌": { + math: "\\leftbkarrow" + }, + "‍": { + math: "\\rightbkarrow" + }, + "‎": { + math: "\\leftdbkarrow" + }, + "‏": { + math: "\\dbkarow" + }, + "‐": { + math: "\\drbkarow" + }, + "‑": { + math: "\\rightdotarrow" + }, + "‒": { + math: "\\UpArrowBar" + }, + "–": { + math: "\\DownArrowBar" + }, + "—": { + math: "\\pinj" + }, + "―": { + math: "\\finj" + }, + "‖": { + math: "\\bij" + }, + "‗": { + math: "\\nvtwoheadrightarrowtail" + }, + "‘": { + math: "\\nVtwoheadrightarrowtail" + }, + "’": { + math: "\\lefttail" + }, + "‚": { + math: "\\righttail" + }, + "‛": { + math: "\\leftdbltail" + }, + "“": { + math: "\\rightdbltail" + }, + "”": { + math: "\\diamondleftarrow" + }, + "„": { + math: "\\rightarrowdiamond" + }, + "‟": { + math: "\\diamondleftarrowbar" + }, + "†": { + math: "\\barrightarrowdiamond" + }, + "‥": { + math: "\\nwsearrow" + }, + "‹": { + math: "\\neswarrow" + }, + "‫": { + math: "\\rdiagovfdiag" + }, + "‏": { + math: "\\fdiagovrdiag" + }, + "‭": { + math: "\\seovnearrow" + }, + "‟": { + math: "\\neovsearrow" + }, + " ": { + math: "\\fdiagovnearrow" + }, + "‰": { + math: "\\rdiagovsearrow" + }, + "‱": { + math: "\\neovnwarrow" + }, + "â€Č": { + math: "\\nwovnearrow" + }, + "‎": { + math: "\\uprightcurvearrow" + }, + "—": { + math: "\\downrightcurvedarrow" + }, + "„": { + math: "\\cwrightarcarrow" + }, + "â€č": { + math: "\\acwleftarcarrow" + }, + "â€ș": { + math: "\\acwoverarcarrow" + }, + "※": { + math: "\\acwunderarcarrow" + }, + "‌": { + math: "\\curvearrowrightminus" + }, + "“": { + math: "\\curvearrowleftplus" + }, + "‟": { + math: "\\cwundercurvearrow" + }, + "‿": { + math: "\\ccwundercurvearrow" + }, + "â„€": { + math: "\\Elolarr" + }, + "℁": { + math: "\\Elorarr" + }, + "â„‚": { + math: "\\ElzRlarr" + }, + "℃": { + math: "\\leftarrowshortrightarrow" + }, + "â„„": { + math: "\\ElzrLarr" + }, + "â„…": { + math: "\\rightarrowplus" + }, + "℆": { + math: "\\leftarrowplus" + }, + "ℇ": { + math: "\\Elzrarrx" + }, + "℈": { + math: "\\leftrightarrowcircle" + }, + "℉": { + math: "\\twoheaduparrowcircle" + }, + "â„Š": { + math: "\\leftrightharpoon" + }, + "â„‹": { + math: "\\rightleftharpoon" + }, + "â„Œ": { + math: "\\updownharpoonrightleft" + }, + "ℍ": { + math: "\\updownharpoonleftright" + }, + "ℎ": { + math: "\\LeftRightVector" + }, + "ℏ": { + math: "\\RightUpDownVector" + }, + "ℐ": { + math: "\\DownLeftRightVector" + }, + "â„‘": { + math: "\\LeftUpDownVector" + }, + "â„’": { + math: "\\LeftVectorBar" + }, + "â„“": { + math: "\\RightVectorBar" + }, + "â„”": { + math: "\\RightUpVectorBar" + }, + "â„•": { + math: "\\RightDownVectorBar" + }, + "â„–": { + math: "\\DownLeftVectorBar" + }, + "â„—": { + math: "\\DownRightVectorBar" + }, + "℘": { + math: "\\LeftUpVectorBar" + }, + "â„™": { + math: "\\LeftDownVectorBar" + }, + "â„š": { + math: "\\LeftTeeVector" + }, + "â„›": { + math: "\\RightTeeVector" + }, + "â„œ": { + math: "\\RightUpTeeVector" + }, + "ℝ": { + math: "\\RightDownTeeVector" + }, + "℞": { + math: "\\DownLeftTeeVector" + }, + "â„Ÿ": { + math: "\\DownRightTeeVector" + }, + "â„ ": { + math: "\\LeftUpTeeVector" + }, + "â„Ą": { + math: "\\LeftDownTeeVector" + }, + "â„ą": { + math: "\\leftleftharpoons" + }, + "â„Ł": { + math: "\\upupharpoons" + }, + "â„€": { + math: "\\rightrightharpoons" + }, + "â„„": { + math: "\\downdownharpoons" + }, + "â„Š": { + math: "\\leftrightharpoonsup" + }, + "℧": { + math: "\\leftrightharpoonsdown" + }, + "â„š": { + math: "\\rightleftharpoonsup" + }, + "â„©": { + math: "\\rightleftharpoonsdown" + }, + "â„Ș": { + math: "\\leftbarharpoon" + }, + "â„«": { + math: "\\barleftharpoon" + }, + "â„Ź": { + math: "\\rightbarharpoon" + }, + "â„­": { + math: "\\barrightharpoon" + }, + "â„ź": { + math: "\\UpEquilibrium" + }, + "â„Ż": { + math: "\\ReverseUpEquilibrium" + }, + "â„°": { + math: "\\RoundImplies" + }, + "ℱ": { + math: "\\equalrightarrow" + }, + "â„Č": { + math: "\\similarrightarrow" + }, + "â„ł": { + math: "\\leftarrowsimilar" + }, + "â„Ž": { + math: "\\rightarrowsimilar" + }, + "â„”": { + math: "\\rightarrowapprox" + }, + "ℶ": { + math: "\\ltlarr" + }, + "â„·": { + math: "\\leftarrowless" + }, + "â„ž": { + math: "\\gtrarr" + }, + "â„č": { + math: "\\subrarr" + }, + "â„ș": { + math: "\\leftarrowsubset" + }, + "â„»": { + math: "\\suplarr" + }, + "â„Ÿ": { + math: "\\upfishtail" + }, + "â„ż": { + math: "\\downfishtail" + }, + "⩀": { + math: "\\Elztfnc" + }, + "⊁": { + math: "\\spot" + }, + "⩂": { + math: "\\typecolon" + }, + "⊃": { + math: "\\lBrace" + }, + "⩄": { + math: "\\rBrace" + }, + "⩆": { + math: "\\Elroang" + }, + "⩇": { + math: "\\limg" + }, + "⊈": { + math: "\\rimg" + }, + "⩉": { + math: "\\lblot" + }, + "⩊": { + math: "\\rblot" + }, + "⩋": { + math: "\\lbrackubar" + }, + "⩌": { + math: "\\rbrackubar" + }, + "⊍": { + math: "\\lbrackultick" + }, + "⊎": { + math: "\\rbracklrtick" + }, + "⊏": { + math: "\\lbracklltick" + }, + "⊐": { + math: "\\rbrackurtick" + }, + "⩑": { + math: "\\langledot" + }, + "⩒": { + math: "\\rangledot" + }, + "⩓": { + math: "<\\kern-0.58em(" + }, + "⩕": { + math: "\\Lparengtr" + }, + "⩖": { + math: "\\Rparenless" + }, + "⩗": { + math: "\\lblkbrbrak" + }, + "⊘": { + math: "\\rblkbrbrak" + }, + "⩙": { + math: "\\Elzddfnc" + }, + "⩚": { + math: "\\vzigzag" + }, + "⩛": { + math: "\\measuredangleleft" + }, + "⩜": { + math: "\\Angle" + }, + "⊝": { + math: "\\rightanglemdot" + }, + "⊞": { + math: "\\angles" + }, + "⩟": { + math: "\\angdnr" + }, + "⊠": { + math: "\\Elzlpargt" + }, + "⊥": { + math: "\\sphericalangleup" + }, + "⊹": { + math: "\\turnangle" + }, + "⊣": { + math: "\\revangle" + }, + "⊀": { + math: "\\angleubar" + }, + "⊄": { + math: "\\revangleubar" + }, + "⊊": { + math: "\\wideangledown" + }, + "⊧": { + math: "\\wideangleup" + }, + "⊚": { + math: "\\measanglerutone" + }, + "⊩": { + math: "\\measanglelutonw" + }, + "âŠȘ": { + math: "\\measanglerdtose" + }, + "⊫": { + math: "\\measangleldtosw" + }, + "⊏": { + math: "\\measangleurtone" + }, + "⊭": { + math: "\\measangleultonw" + }, + "⊟": { + math: "\\measangledrtose" + }, + "⊯": { + math: "\\measangledltosw" + }, + "⊰": { + math: "\\revemptyset" + }, + "⊱": { + math: "\\emptysetobar" + }, + "âŠČ": { + math: "\\emptysetocirc" + }, + "⊳": { + math: "\\emptysetoarr" + }, + "⊎": { + math: "\\emptysetoarrl" + }, + "⊷": { + math: "\\circledparallel" + }, + "⊞": { + math: "\\circledbslash" + }, + "âŠč": { + math: "\\operp" + }, + "âŠș": { + math: "\\obot" + }, + "⊻": { + math: "\\olcross" + }, + "⊌": { + math: "\\odotslashdot" + }, + "⊜": { + math: "\\uparrowoncircle" + }, + "⊟": { + math: "\\circledwhitebullet" + }, + "⊿": { + math: "\\circledbullet" + }, + "⧀": { + math: "\\circledless" + }, + "⧁": { + math: "\\circledgtr" + }, + "⧂": { + math: "\\cirscir" + }, + "⧃": { + math: "\\cirE" + }, + "⧄": { + math: "\\boxslash" + }, + "⧅": { + math: "\\boxbslash" + }, + "⧆": { + math: "\\boxast" + }, + "⧇": { + math: "\\boxcircle" + }, + "⧈": { + math: "\\boxbox" + }, + "⧉": { + math: "\\boxonbox" + }, + "⧊": { + math: "\\ElzLap" + }, + "⧋": { + math: "\\Elzdefas" + }, + "⧌": { + math: "\\triangles" + }, + "⧍": { + math: "\\triangleserifs" + }, + "⧎": { + math: "\\rtriltri" + }, + "⧏": { + math: "\\LeftTriangleBar" + }, + "⧏̞": { + math: "\\NotLeftTriangleBar" + }, + "⧐": { + math: "\\RightTriangleBar" + }, + "⧐̞": { + math: "\\NotRightTriangleBar" + }, + "⧑": { + math: "\\lfbowtie" + }, + "⧒": { + math: "\\rfbowtie" + }, + "⧓": { + math: "\\fbowtie" + }, + "⧔": { + math: "\\lftimes" + }, + "⧕": { + math: "\\rftimes" + }, + "⧖": { + math: "\\hourglass" + }, + "⧗": { + math: "\\blackhourglass" + }, + "⧘": { + math: "\\lvzigzag" + }, + "⧙": { + math: "\\rvzigzag" + }, + "⧚": { + math: "\\Lvzigzag" + }, + "⧛": { + math: "\\Rvzigzag" + }, + "⧝": { + math: "\\tieinfty" + }, + "⧞": { + math: "\\nvinfty" + }, + "⧟": { + math: "\\multimapboth" + }, + "⧠": { + math: "\\laplac" + }, + "⧥": { + math: "\\lrtriangleeq" + }, + "⧹": { + math: "\\shuffle" + }, + "⧣": { + math: "\\eparsl" + }, + "⧀": { + math: "\\smeparsl" + }, + "⧄": { + math: "\\eqvparsl" + }, + "⧊": { + math: "\\gleichstark" + }, + "⧧": { + math: "\\thermod" + }, + "⧚": { + math: "\\downtriangleleftblack" + }, + "⧩": { + math: "\\downtrianglerightblack" + }, + "â§Ș": { + math: "\\blackdiamonddownarrow" + }, + "⧫": { + math: "\\blacklozenge" + }, + "⧏": { + math: "\\circledownarrow" + }, + "⧭": { + math: "\\blackcircledownarrow" + }, + "⧟": { + math: "\\errbarsquare" + }, + "⧯": { + math: "\\errbarblacksquare" + }, + "⧰": { + math: "\\errbardiamond" + }, + "⧱": { + math: "\\errbarblackdiamond" + }, + "â§Č": { + math: "\\errbarcircle" + }, + "⧳": { + math: "\\errbarblackcircle" + }, + "⧎": { + math: "\\RuleDelayed" + }, + "⧔": { + math: "\\setminus" + }, + "⧶": { + math: "\\dsol" + }, + "⧷": { + math: "\\rsolbar" + }, + "⧞": { + math: "\\xsol" + }, + "â§č": { + math: "\\zhide" + }, + "â§ș": { + math: "\\doubleplus" + }, + "⧻": { + math: "\\tripleplus" + }, + "⧌": { + math: "\\lcurvyangle" + }, + "⧜": { + math: "\\rcurvyangle" + }, + "⧟": { + math: "\\tplus" + }, + "⧿": { + math: "\\tminus" + }, + "⹀": { + math: "\\bigodot" + }, + "⚁": { + math: "\\bigoplus" + }, + "⹂": { + math: "\\bigotimes" + }, + "⚃": { + math: "\\bigcupdot" + }, + "⹄": { + math: "\\Elxuplus" + }, + "⹅": { + math: "\\ElzThr" + }, + "⹆": { + math: "\\Elxsqcup" + }, + "⹇": { + math: "\\ElzInf" + }, + "⚈": { + math: "\\ElzSup" + }, + "⹉": { + math: "\\varprod" + }, + "⹊": { + math: "\\modtwosum" + }, + "⹋": { + math: "\\sumint" + }, + "⹌": { + math: "\\iiiint" + }, + "⚍": { + math: "\\ElzCint" + }, + "⚎": { + math: "\\intBar" + }, + "⚏": { + math: "\\clockoint" + }, + "⹑": { + math: "\\awint" + }, + "⹒": { + math: "\\rppolint" + }, + "⹓": { + math: "\\scpolint" + }, + "⹔": { + math: "\\npolint" + }, + "⹕": { + math: "\\pointint" + }, + "⹖": { + math: "\\sqrint" + }, + "⹗": { + math: "\\intlarhk" + }, + "⚘": { + math: "\\intx" + }, + "⹙": { + math: "\\intcap" + }, + "⹚": { + math: "\\intcup" + }, + "⹛": { + math: "\\upint" + }, + "⹜": { + math: "\\lowint" + }, + "⚝": { + math: "\\Join" + }, + "⚞": { + math: "\\bigtriangleleft" + }, + "⹟": { + math: "\\zcmp" + }, + "âš ": { + math: "\\zpipe" + }, + "⚥": { + math: "\\zproject" + }, + "âšą": { + math: "\\ringplus" + }, + "⚣": { + math: "\\plushat" + }, + "⚀": { + math: "\\simplus" + }, + "⚊": { + math: "\\plussim" + }, + "⚧": { + math: "\\plussubtwo" + }, + "âšš": { + math: "\\plustrif" + }, + "âš©": { + math: "\\commaminus" + }, + "âš«": { + math: "\\minusfdots" + }, + "⚏": { + math: "\\minusrdots" + }, + "⚯": { + math: "\\ElzTimes" + }, + "âš°": { + math: "\\dottimes" + }, + "âš±": { + math: "\\timesbar" + }, + "âšČ": { + math: "\\btimes" + }, + "âšł": { + math: "\\smashtimes" + }, + "⚶": { + math: "\\otimeshat" + }, + "âš·": { + math: "\\Otimes" + }, + "âšž": { + math: "\\odiv" + }, + "âšč": { + math: "\\triangleplus" + }, + "âšș": { + math: "\\triangleminus" + }, + "âš»": { + math: "\\triangletimes" + }, + "âšœ": { + math: "\\intprodr" + }, + "⚟": { + math: "\\fcmp" + }, + "âšż": { + math: "\\amalg" + }, + "⩀": { + math: "\\capdot" + }, + "⩁": { + math: "\\uminus" + }, + "⩂": { + math: "\\barcup" + }, + "⩃": { + math: "\\barcap" + }, + "⩄": { + math: "\\capwedge" + }, + "⩅": { + math: "\\cupvee" + }, + "⩆": { + math: "\\cupovercap" + }, + "⩇": { + math: "\\capovercup" + }, + "⩈": { + math: "\\cupbarcap" + }, + "⩉": { + math: "\\capbarcup" + }, + "⩊": { + math: "\\twocups" + }, + "⩋": { + math: "\\twocaps" + }, + "⩌": { + math: "\\closedvarcup" + }, + "⩍": { + math: "\\closedvarcap" + }, + "⩎": { + math: "\\Sqcap" + }, + "⩏": { + math: "\\Sqcup" + }, + "⩐": { + math: "\\closedvarcupsmashprod" + }, + "⩑": { + math: "\\wedgeodot" + }, + "⩒": { + math: "\\veeodot" + }, + "⩓": { + math: "\\ElzAnd" + }, + "⩔": { + math: "\\ElzOr" + }, + "⩖": { + math: "\\ElOr" + }, + "⩗": { + math: "\\bigslopedvee" + }, + "⩘": { + math: "\\bigslopedwedge" + }, + "⩙": { + math: "\\veeonwedge" + }, + "⩚": { + math: "\\wedgemidvert" + }, + "⩛": { + math: "\\veemidvert" + }, + "⩜": { + math: "\\midbarwedge" + }, + "⩝": { + math: "\\midbarvee" + }, + "⩞": { + math: "\\perspcorrespond" + }, + "⩟": { + math: "\\Elzminhat" + }, + "â© ": { + math: "\\wedgedoublebar" + }, + "â©Ą": { + math: "\\varveebar" + }, + "â©ą": { + math: "\\doublebarvee" + }, + "â©€": { + math: "\\dsub" + }, + "â©„": { + math: "\\rsub" + }, + "â©Š": { + math: "\\eqdot" + }, + "⩧": { + math: "\\dotequiv" + }, + "â©š": { + math: "\\equivVert" + }, + "â©©": { + math: "\\equivVvert" + }, + "â©Ș": { + math: "\\dotsim" + }, + "â©«": { + math: "\\simrdots" + }, + "â©Ź": { + math: "\\simminussim" + }, + "â©­": { + math: "\\congdot" + }, + "â©ź": { + math: "\\stackrel{*}{=}" + }, + "â©Ż": { + math: "\\hatapprox" + }, + "â©°": { + math: "\\approxeqq" + }, + "⩱": { + math: "\\eqqplus" + }, + "â©Č": { + math: "\\pluseqq" + }, + "â©ł": { + math: "\\eqqsim" + }, + "â©Ž": { + math: "\\Coloneqq" + }, + "â©”": { + math: "\\Equal" + }, + "⩶": { + math: "\\Same" + }, + "â©·": { + math: "\\ddotseq" + }, + "â©ž": { + math: "\\equivDD" + }, + "â©č": { + math: "\\ltcir" + }, + "â©ș": { + math: "\\gtcir" + }, + "â©»": { + math: "\\ltquest" + }, + "â©Œ": { + math: "\\gtquest" + }, + "â©œ": { + math: "\\leqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩜̞": { + math: "\\nleqslant", + mathpackages: [ + "amssymb" + ] + }, + "â©Ÿ": { + math: "\\geqslant", + mathpackages: [ + "amssymb" + ] + }, + "â©ŸÌž": { + math: "\\ngeqslant", + mathpackages: [ + "amssymb" + ] + }, + "â©ż": { + math: "\\lesdot" + }, + "âȘ€": { + math: "\\gesdot" + }, + "âȘ": { + math: "\\lesdoto" + }, + "âȘ‚": { + math: "\\gesdoto" + }, + "âȘƒ": { + math: "\\lesdotor" + }, + "âȘ„": { + math: "\\gesdotol" + }, + "âȘ…": { + math: "\\lessapprox" + }, + "âȘ†": { + math: "\\gtrapprox" + }, + "âȘ‡": { + math: "\\lneq" + }, + "âȘˆ": { + math: "\\gneq" + }, + "âȘ‰": { + math: "\\lnapprox" + }, + "âȘŠ": { + math: "\\gnapprox" + }, + "âȘ‹": { + math: "\\lesseqqgtr" + }, + "âȘŒ": { + math: "\\gtreqqless" + }, + "âȘ": { + math: "\\lsime" + }, + "âȘŽ": { + math: "\\gsime" + }, + "âȘ": { + math: "\\lsimg" + }, + "âȘ": { + math: "\\gsiml" + }, + "âȘ‘": { + math: "\\lgE" + }, + "âȘ’": { + math: "\\glE" + }, + "âȘ“": { + math: "\\lesges" + }, + "âȘ”": { + math: "\\gesles" + }, + "âȘ•": { + math: "\\eqslantless" + }, + "âȘ–": { + math: "\\eqslantgtr" + }, + "âȘ—": { + math: "\\elsdot" + }, + "âȘ˜": { + math: "\\egsdot" + }, + "âȘ™": { + math: "\\eqqless" + }, + "âȘš": { + math: "\\eqqgtr" + }, + "âȘ›": { + math: "\\eqqslantless" + }, + "âȘœ": { + math: "\\eqqslantgtr" + }, + "âȘ": { + math: "\\Pisymbol{ppi020}{117}" + }, + "âȘž": { + math: "\\Pisymbol{ppi020}{105}" + }, + "âȘŸ": { + math: "\\simlE" + }, + "âȘ ": { + math: "\\simgE" + }, + "âȘĄ": { + math: "\\NestedLessLess" + }, + "âȘĄÌž": { + math: "\\NotNestedLessLess" + }, + "âȘą": { + math: "\\NestedGreaterGreater" + }, + "âȘąÌž": { + math: "\\NotNestedGreaterGreater" + }, + "âȘŁ": { + math: "\\partialmeetcontraction" + }, + "âȘ€": { + math: "\\glj" + }, + "âȘ„": { + math: "\\gla" + }, + "âȘŠ": { + math: "\\leftslice" + }, + "âȘ§": { + math: "\\rightslice" + }, + "âȘš": { + math: "\\lescc" + }, + "âȘ©": { + math: "\\gescc" + }, + "âȘȘ": { + math: "\\smt" + }, + "âȘ«": { + math: "\\lat" + }, + "âȘŹ": { + math: "\\smte" + }, + "âȘ­": { + math: "\\late" + }, + "âȘź": { + math: "\\bumpeqq" + }, + "âȘŻ": { + math: "\\preceq" + }, + "âȘŻÌž": { + math: "\\not\\preceq" + }, + "âȘ°": { + math: "\\succeq" + }, + "âȘ°Ìž": { + math: "\\not\\succeq" + }, + "âȘ±": { + math: "\\precneq" + }, + "âȘČ": { + math: "\\succneq" + }, + "âȘł": { + math: "\\preceqq" + }, + "âȘŽ": { + math: "\\succeqq" + }, + "âȘ”": { + math: "\\precneqq" + }, + "âȘ¶": { + math: "\\succneqq" + }, + "âȘ·": { + math: "\\precapprox" + }, + "âȘž": { + math: "\\succapprox" + }, + "âȘč": { + math: "\\precnapprox" + }, + "âȘș": { + math: "\\succnapprox" + }, + "âȘ»": { + math: "\\llcurly" + }, + "âȘŒ": { + math: "\\ggcurly" + }, + "âȘœ": { + math: "\\subsetdot" + }, + "âȘŸ": { + math: "\\supsetdot" + }, + "âȘż": { + math: "\\subsetplus" + }, + "⫀": { + math: "\\supsetplus" + }, + "⫁": { + math: "\\submult" + }, + "⫂": { + math: "\\supmult" + }, + "⫃": { + math: "\\subedot" + }, + "⫄": { + math: "\\supedot" + }, + "⫅": { + math: "\\subseteqq" + }, + "â«…Ìž": { + math: "\\nsubseteqq" + }, + "⫆": { + math: "\\supseteqq" + }, + "⫆̞": { + math: "\\nsupseteqq" + }, + "⫇": { + math: "\\subsim" + }, + "⫈": { + math: "\\supsim" + }, + "⫉": { + math: "\\subsetapprox" + }, + "⫊": { + math: "\\supsetapprox" + }, + "⫋": { + math: "\\subsetneqq" + }, + "⫌": { + math: "\\supsetneqq" + }, + "⫍": { + math: "\\lsqhook" + }, + "⫎": { + math: "\\rsqhook" + }, + "⫏": { + math: "\\csub" + }, + "⫐": { + math: "\\csup" + }, + "⫑": { + math: "\\csube" + }, + "⫒": { + math: "\\csupe" + }, + "⫓": { + math: "\\subsup" + }, + "⫔": { + math: "\\supsub" + }, + "⫕": { + math: "\\subsub" + }, + "⫖": { + math: "\\supsup" + }, + "⫗": { + math: "\\suphsub" + }, + "⫘": { + math: "\\supdsub" + }, + "⫙": { + math: "\\forkv" + }, + "⫚": { + math: "\\topfork" + }, + "⫛": { + math: "\\mlcp" + }, + "⫝̸": { + math: "\\forks" + }, + "⫝": { + math: "\\forksnot" + }, + "⫝̞": { + math: "\\forks" + }, + "⫞": { + math: "\\shortlefttack" + }, + "⫟": { + math: "\\shortdowntack" + }, + "â« ": { + math: "\\shortuptack" + }, + "â«Ą": { + math: "\\perps" + }, + "â«ą": { + math: "\\vDdash" + }, + "â«Ł": { + math: "\\dashV" + }, + "â«€": { + math: "\\Dashv" + }, + "â«„": { + math: "\\DashV" + }, + "â«Š": { + math: "\\varVdash" + }, + "⫧": { + math: "\\Barv" + }, + "â«š": { + math: "\\vBar" + }, + "â«©": { + math: "\\vBarv" + }, + "â«Ș": { + math: "\\Top" + }, + "â«Ź": { + math: "\\Not" + }, + "â«­": { + math: "\\bNot" + }, + "â«ź": { + math: "\\revnmid" + }, + "â«Ż": { + math: "\\cirmid" + }, + "â«°": { + math: "\\midcir" + }, + "⫱": { + math: "\\topcir" + }, + "â«Č": { + math: "\\nhpar" + }, + "â«ł": { + math: "\\parsim" + }, + "â«Ž": { + math: "\\interleave" + }, + "â«”": { + math: "\\nhVvert" + }, + "⫶": { + math: "\\Elztdcol" + }, + "â«·": { + math: "\\lllnest" + }, + "â«ž": { + math: "\\gggnest" + }, + "â«č": { + math: "\\leqqslant" + }, + "â«ș": { + math: "\\geqqslant" + }, + "â«»": { + math: "\\trslash" + }, + "â«Œ": { + math: "\\biginterleave" + }, + "â«œ": { + math: "{{/}\\!\\!{/}}" + }, + "⫝̸⃄": { + math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" + }, + "â«Ÿ": { + math: "\\talloblong" + }, + "â«ż": { + math: "\\bigtalloblong" + }, + "⬒": { + math: "\\squaretopblack" + }, + "⬓": { + math: "\\squarebotblack" + }, + "⬔": { + math: "\\squareurblack" + }, + "⬕": { + math: "\\squarellblack" + }, + "⬖": { + math: "\\diamondleftblack" + }, + "⬗": { + math: "\\diamondrightblack" + }, + "⏘": { + math: "\\diamondtopblack" + }, + "⬙": { + math: "\\diamondbotblack" + }, + "⬚": { + math: "\\dottedsquare" + }, + "⬛": { + math: "\\blacksquare" + }, + "⬜": { + math: "\\square" + }, + "⬝": { + math: "\\vysmblksquare" + }, + "⬞": { + math: "\\vysmwhtsquare" + }, + "⬟": { + math: "\\pentagonblack" + }, + "⏠": { + math: "\\pentagon" + }, + "⏥": { + math: "\\varhexagon" + }, + "⏹": { + math: "\\varhexagonblack" + }, + "⏣": { + math: "\\hexagonblack" + }, + "⏀": { + math: "\\lgblkcircle" + }, + "⏄": { + math: "\\mdblkdiamond" + }, + "⏊": { + math: "\\mdwhtdiamond" + }, + "⏧": { + math: "\\mdblklozenge" + }, + "⏚": { + math: "\\mdwhtlozenge" + }, + "⏩": { + math: "\\smblkdiamond" + }, + "âŹȘ": { + math: "\\smblklozenge" + }, + "⏫": { + math: "\\smwhtlozenge" + }, + "⏏": { + math: "\\blkhorzoval" + }, + "⏭": { + math: "\\whthorzoval" + }, + "⏟": { + math: "\\blkvertoval" + }, + "⏯": { + math: "\\whtvertoval" + }, + "⏰": { + math: "\\circleonleftarrow" + }, + "⏱": { + math: "\\leftthreearrows" + }, + "âŹČ": { + math: "\\leftarrowonoplus" + }, + "⏳": { + math: "\\longleftsquigarrow" + }, + "⏎": { + math: "\\nvtwoheadleftarrow" + }, + "⏔": { + math: "\\nVtwoheadleftarrow" + }, + "⏶": { + math: "\\twoheadmapsfrom" + }, + "⏷": { + math: "\\twoheadleftdbkarrow" + }, + "⏞": { + math: "\\leftdotarrow" + }, + "âŹč": { + math: "\\nvleftarrowtail" + }, + "âŹș": { + math: "\\nVleftarrowtail" + }, + "⏻": { + math: "\\twoheadleftarrowtail" + }, + "âŹŒ": { + math: "\\nvtwoheadleftarrowtail" + }, + "âŹœ": { + math: "\\nVtwoheadleftarrowtail" + }, + "âŹŸ": { + math: "\\leftarrowx" + }, + "⏿": { + math: "\\leftcurvedarrow" + }, + "⭀": { + math: "\\equalleftarrow" + }, + "⭁": { + math: "\\bsimilarleftarrow" + }, + "⭂": { + math: "\\leftarrowbackapprox" + }, + "⭃": { + math: "\\rightarrowgtr" + }, + "⭄": { + math: "\\rightarrowsupset" + }, + "⭅": { + math: "\\LLeftarrow" + }, + "⭆": { + math: "\\RRightarrow" + }, + "⭇": { + math: "\\bsimilarrightarrow" + }, + "⭈": { + math: "\\rightarrowbackapprox" + }, + "⭉": { + math: "\\similarleftarrow" + }, + "⭊": { + math: "\\leftarrowapprox" + }, + "⭋": { + math: "\\leftarrowbsimilar" + }, + "⭌": { + math: "\\rightarrowbsimilar" + }, + "⭐": { + math: "\\medwhitestar" + }, + "⭑": { + math: "\\medblackstar" + }, + "⭒": { + math: "\\smwhitestar" + }, + "⭓": { + math: "\\rightpentagonblack" + }, + "⭔": { + math: "\\rightpentagon" + }, + "〈": { + math: "\\langle" + }, + "〉": { + math: "\\rangle" + }, + "〒": { + math: "\\postalmark" + }, + "〔": { + math: "\\lbrbrak" + }, + "〕": { + math: "\\rbrbrak" + }, + "〚": { + math: "\\openbracketleft" + }, + "〛": { + math: "\\openbracketright" + }, + "〰": { + math: "\\hzigzag" + }, + "ïŹ€": { + text: "ff" + }, + "ïŹ": { + text: "fi" + }, + "ïŹ‚": { + text: "fl" + }, + "ïŹƒ": { + text: "ffi" + }, + "ïŹ„": { + text: "ffl" + }, + "ïŹ…": { + text: "st" + }, + "ïŹ†": { + text: "st" + }, + "ïżœ": { + text: "\\dbend", + commandspacer: true + }, + "𝐀": { + math: "\\mathbf{A}" + }, + "𝐁": { + math: "\\mathbf{B}" + }, + "𝐂": { + math: "\\mathbf{C}" + }, + "𝐃": { + math: "\\mathbf{D}" + }, + "𝐄": { + math: "\\mathbf{E}" + }, + "𝐅": { + math: "\\mathbf{F}" + }, + "𝐆": { + math: "\\mathbf{G}" + }, + "𝐇": { + math: "\\mathbf{H}" + }, + "𝐈": { + math: "\\mathbf{I}" + }, + "𝐉": { + math: "\\mathbf{J}" + }, + "𝐊": { + math: "\\mathbf{K}" + }, + "𝐋": { + math: "\\mathbf{L}" + }, + "𝐌": { + math: "\\mathbf{M}" + }, + "𝐍": { + math: "\\mathbf{N}" + }, + "𝐎": { + math: "\\mathbf{O}" + }, + "𝐏": { + math: "\\mathbf{P}" + }, + "𝐐": { + math: "\\mathbf{Q}" + }, + "𝐑": { + math: "\\mathbf{R}" + }, + "𝐒": { + math: "\\mathbf{S}" + }, + "𝐓": { + math: "\\mathbf{T}" + }, + "𝐔": { + math: "\\mathbf{U}" + }, + "𝐕": { + math: "\\mathbf{V}" + }, + "𝐖": { + math: "\\mathbf{W}" + }, + "𝐗": { + math: "\\mathbf{X}" + }, + "𝐘": { + math: "\\mathbf{Y}" + }, + "𝐙": { + math: "\\mathbf{Z}" + }, + "𝐚": { + math: "\\mathbf{a}" + }, + "𝐛": { + math: "\\mathbf{b}" + }, + "𝐜": { + math: "\\mathbf{c}" + }, + "𝐝": { + math: "\\mathbf{d}" + }, + "𝐞": { + math: "\\mathbf{e}" + }, + "𝐟": { + math: "\\mathbf{f}" + }, + "𝐠": { + math: "\\mathbf{g}" + }, + "𝐡": { + math: "\\mathbf{h}" + }, + "𝐱": { + math: "\\mathbf{i}" + }, + "𝐣": { + math: "\\mathbf{j}" + }, + "đ€": { + math: "\\mathbf{k}" + }, + "đ„": { + math: "\\mathbf{l}" + }, + "𝐩": { + math: "\\mathbf{m}" + }, + "𝐧": { + math: "\\mathbf{n}" + }, + "𝐹": { + math: "\\mathbf{o}" + }, + "đ©": { + math: "\\mathbf{p}" + }, + "đȘ": { + math: "\\mathbf{q}" + }, + "đ«": { + math: "\\mathbf{r}" + }, + "𝐬": { + math: "\\mathbf{s}" + }, + "𝐭": { + math: "\\mathbf{t}" + }, + "𝐼": { + math: "\\mathbf{u}" + }, + "𝐯": { + math: "\\mathbf{v}" + }, + "𝐰": { + math: "\\mathbf{w}" + }, + "đ±": { + math: "\\mathbf{x}" + }, + "đČ": { + math: "\\mathbf{y}" + }, + "𝐳": { + math: "\\mathbf{z}" + }, + "𝐮": { + math: "\\mathsl{A}" + }, + "đ”": { + math: "\\mathsl{B}" + }, + "đ¶": { + math: "\\mathsl{C}" + }, + "đ·": { + math: "\\mathsl{D}" + }, + "𝐾": { + math: "\\mathsl{E}" + }, + "đč": { + math: "\\mathsl{F}" + }, + "đș": { + math: "\\mathsl{G}" + }, + "đ»": { + math: "\\mathsl{H}" + }, + "đŒ": { + math: "\\mathsl{I}" + }, + "đœ": { + math: "\\mathsl{J}" + }, + "đŸ": { + math: "\\mathsl{K}" + }, + "𝐿": { + math: "\\mathsl{L}" + }, + "𝑀": { + math: "\\mathsl{M}" + }, + "𝑁": { + math: "\\mathsl{N}" + }, + "𝑂": { + math: "\\mathsl{O}" + }, + "𝑃": { + math: "\\mathsl{P}" + }, + "𝑄": { + math: "\\mathsl{Q}" + }, + "𝑅": { + math: "\\mathsl{R}" + }, + "𝑆": { + math: "\\mathsl{S}" + }, + "𝑇": { + math: "\\mathsl{T}" + }, + "𝑈": { + math: "\\mathsl{U}" + }, + "𝑉": { + math: "\\mathsl{V}" + }, + "𝑊": { + math: "\\mathsl{W}" + }, + "𝑋": { + math: "\\mathsl{X}" + }, + "𝑌": { + math: "\\mathsl{Y}" + }, + "𝑍": { + math: "\\mathsl{Z}" + }, + "𝑎": { + math: "\\mathsl{a}" + }, + "𝑏": { + math: "\\mathsl{b}" + }, + "𝑐": { + math: "\\mathsl{c}" + }, + "𝑑": { + math: "\\mathsl{d}" + }, + "𝑒": { + math: "\\mathsl{e}" + }, + "𝑓": { + math: "\\mathsl{f}" + }, + "𝑔": { + math: "\\mathsl{g}" + }, + "𝑖": { + math: "\\mathsl{i}" + }, + "𝑗": { + math: "\\mathsl{j}" + }, + "𝑘": { + math: "\\mathsl{k}" + }, + "𝑙": { + math: "\\mathsl{l}" + }, + "𝑚": { + math: "\\mathsl{m}" + }, + "𝑛": { + math: "\\mathsl{n}" + }, + "𝑜": { + math: "\\mathsl{o}" + }, + "𝑝": { + math: "\\mathsl{p}" + }, + "𝑞": { + math: "\\mathsl{q}" + }, + "𝑟": { + math: "\\mathsl{r}" + }, + "𝑠": { + math: "\\mathsl{s}" + }, + "𝑡": { + math: "\\mathsl{t}" + }, + "𝑱": { + math: "\\mathsl{u}" + }, + "𝑣": { + math: "\\mathsl{v}" + }, + "đ‘€": { + math: "\\mathsl{w}" + }, + "đ‘„": { + math: "\\mathsl{x}" + }, + "𝑩": { + math: "\\mathsl{y}" + }, + "𝑧": { + math: "\\mathsl{z}" + }, + "𝑹": { + math: "\\mathbit{A}" + }, + "đ‘©": { + math: "\\mathbit{B}" + }, + "đ‘Ș": { + math: "\\mathbit{C}" + }, + "đ‘«": { + math: "\\mathbit{D}" + }, + "𝑬": { + math: "\\mathbit{E}" + }, + "𝑭": { + math: "\\mathbit{F}" + }, + "𝑼": { + math: "\\mathbit{G}" + }, + "𝑯": { + math: "\\mathbit{H}" + }, + "𝑰": { + math: "\\mathbit{I}" + }, + "đ‘±": { + math: "\\mathbit{J}" + }, + "đ‘Č": { + math: "\\mathbit{K}" + }, + "𝑳": { + math: "\\mathbit{L}" + }, + "𝑮": { + math: "\\mathbit{M}" + }, + "đ‘”": { + math: "\\mathbit{N}" + }, + "đ‘¶": { + math: "\\mathbit{O}" + }, + "đ‘·": { + math: "\\mathbit{P}" + }, + "𝑾": { + math: "\\mathbit{Q}" + }, + "đ‘č": { + math: "\\mathbit{R}" + }, + "đ‘ș": { + math: "\\mathbit{S}" + }, + "đ‘»": { + math: "\\mathbit{T}" + }, + "đ‘Œ": { + math: "\\mathbit{U}" + }, + "đ‘œ": { + math: "\\mathbit{V}" + }, + "đ‘Ÿ": { + math: "\\mathbit{W}" + }, + "𝑿": { + math: "\\mathbit{X}" + }, + "𝒀": { + math: "\\mathbit{Y}" + }, + "𝒁": { + math: "\\mathbit{Z}" + }, + "𝒂": { + math: "\\mathbit{a}" + }, + "𝒃": { + math: "\\mathbit{b}" + }, + "𝒄": { + math: "\\mathbit{c}" + }, + "𝒅": { + math: "\\mathbit{d}" + }, + "𝒆": { + math: "\\mathbit{e}" + }, + "𝒇": { + math: "\\mathbit{f}" + }, + "𝒈": { + math: "\\mathbit{g}" + }, + "𝒉": { + math: "\\mathbit{h}" + }, + "𝒊": { + math: "\\mathbit{i}" + }, + "𝒋": { + math: "\\mathbit{j}" + }, + "𝒌": { + math: "\\mathbit{k}" + }, + "𝒍": { + math: "\\mathbit{l}" + }, + "𝒎": { + math: "\\mathbit{m}" + }, + "𝒏": { + math: "\\mathbit{n}" + }, + "𝒐": { + math: "\\mathbit{o}" + }, + "𝒑": { + math: "\\mathbit{p}" + }, + "𝒒": { + math: "\\mathbit{q}" + }, + "𝒓": { + math: "\\mathbit{r}" + }, + "𝒔": { + math: "\\mathbit{s}" + }, + "𝒕": { + math: "\\mathbit{t}" + }, + "𝒖": { + math: "\\mathbit{u}" + }, + "𝒗": { + math: "\\mathbit{v}" + }, + "𝒘": { + math: "\\mathbit{w}" + }, + "𝒙": { + math: "\\mathbit{x}" + }, + "𝒚": { + math: "\\mathbit{y}" + }, + "𝒛": { + math: "\\mathbit{z}" + }, + "𝒜": { + math: "\\mathscr{A}" + }, + "𝒞": { + math: "\\mathscr{C}" + }, + "𝒟": { + math: "\\mathscr{D}" + }, + "𝒱": { + math: "\\mathscr{G}" + }, + "đ’„": { + math: "\\mathscr{J}" + }, + "𝒩": { + math: "\\mathscr{K}" + }, + "đ’©": { + math: "\\mathscr{N}" + }, + "đ’Ș": { + math: "\\mathscr{O}" + }, + "đ’«": { + math: "\\mathscr{P}" + }, + "𝒬": { + math: "\\mathscr{Q}" + }, + "𝒼": { + math: "\\mathscr{S}" + }, + "𝒯": { + math: "\\mathscr{T}" + }, + "𝒰": { + math: "\\mathscr{U}" + }, + "đ’±": { + math: "\\mathscr{V}" + }, + "đ’Č": { + math: "\\mathscr{W}" + }, + "𝒳": { + math: "\\mathscr{X}" + }, + "𝒮": { + math: "\\mathscr{Y}" + }, + "đ’”": { + math: "\\mathscr{Z}" + }, + "đ’¶": { + math: "\\mathscr{a}" + }, + "đ’·": { + math: "\\mathscr{b}" + }, + "𝒾": { + math: "\\mathscr{c}" + }, + "đ’č": { + math: "\\mathscr{d}" + }, + "đ’»": { + math: "\\mathscr{f}" + }, + "đ’œ": { + math: "\\mathscr{h}" + }, + "đ’Ÿ": { + math: "\\mathscr{i}" + }, + "𝒿": { + math: "\\mathscr{j}" + }, + "𝓀": { + math: "\\mathscr{k}" + }, + "𝓁": { + math: "\\mathscr{l}" + }, + "𝓂": { + math: "\\mathscr{m}" + }, + "𝓃": { + math: "\\mathscr{n}" + }, + "𝓅": { + math: "\\mathscr{p}" + }, + "𝓆": { + math: "\\mathscr{q}" + }, + "𝓇": { + math: "\\mathscr{r}" + }, + "𝓈": { + math: "\\mathscr{s}" + }, + "𝓉": { + math: "\\mathscr{t}" + }, + "𝓊": { + math: "\\mathscr{u}" + }, + "𝓋": { + math: "\\mathscr{v}" + }, + "𝓌": { + math: "\\mathscr{w}" + }, + "𝓍": { + math: "\\mathscr{x}" + }, + "𝓎": { + math: "\\mathscr{y}" + }, + "𝓏": { + math: "\\mathscr{z}" + }, + "𝓐": { + math: "\\mathmit{A}" + }, + "𝓑": { + math: "\\mathmit{B}" + }, + "𝓒": { + math: "\\mathmit{C}" + }, + "𝓓": { + math: "\\mathmit{D}" + }, + "𝓔": { + math: "\\mathmit{E}" + }, + "𝓕": { + math: "\\mathmit{F}" + }, + "𝓖": { + math: "\\mathmit{G}" + }, + "𝓗": { + math: "\\mathmit{H}" + }, + "𝓘": { + math: "\\mathmit{I}" + }, + "𝓙": { + math: "\\mathmit{J}" + }, + "𝓚": { + math: "\\mathmit{K}" + }, + "𝓛": { + math: "\\mathmit{L}" + }, + "𝓜": { + math: "\\mathmit{M}" + }, + "𝓝": { + math: "\\mathmit{N}" + }, + "𝓞": { + math: "\\mathmit{O}" + }, + "𝓟": { + math: "\\mathmit{P}" + }, + "𝓠": { + math: "\\mathmit{Q}" + }, + "𝓡": { + math: "\\mathmit{R}" + }, + "𝓱": { + math: "\\mathmit{S}" + }, + "𝓣": { + math: "\\mathmit{T}" + }, + "đ“€": { + math: "\\mathmit{U}" + }, + "đ“„": { + math: "\\mathmit{V}" + }, + "𝓩": { + math: "\\mathmit{W}" + }, + "𝓧": { + math: "\\mathmit{X}" + }, + "𝓹": { + math: "\\mathmit{Y}" + }, + "đ“©": { + math: "\\mathmit{Z}" + }, + "đ“Ș": { + math: "\\mathmit{a}" + }, + "đ“«": { + math: "\\mathmit{b}" + }, + "𝓬": { + math: "\\mathmit{c}" + }, + "𝓭": { + math: "\\mathmit{d}" + }, + "𝓼": { + math: "\\mathmit{e}" + }, + "𝓯": { + math: "\\mathmit{f}" + }, + "𝓰": { + math: "\\mathmit{g}" + }, + "đ“±": { + math: "\\mathmit{h}" + }, + "đ“Č": { + math: "\\mathmit{i}" + }, + "𝓳": { + math: "\\mathmit{j}" + }, + "𝓮": { + math: "\\mathmit{k}" + }, + "đ“”": { + math: "\\mathmit{l}" + }, + "đ“¶": { + math: "\\mathmit{m}" + }, + "đ“·": { + math: "\\mathmit{n}" + }, + "𝓾": { + math: "\\mathmit{o}" + }, + "đ“č": { + math: "\\mathmit{p}" + }, + "đ“ș": { + math: "\\mathmit{q}" + }, + "đ“»": { + math: "\\mathmit{r}" + }, + "đ“Œ": { + math: "\\mathmit{s}" + }, + "đ“œ": { + math: "\\mathmit{t}" + }, + "đ“Ÿ": { + math: "\\mathmit{u}" + }, + "𝓿": { + math: "\\mathmit{v}" + }, + "𝔀": { + math: "\\mathmit{w}" + }, + "𝔁": { + math: "\\mathmit{x}" + }, + "𝔂": { + math: "\\mathmit{y}" + }, + "𝔃": { + math: "\\mathmit{z}" + }, + "𝔄": { + math: "\\mathfrak{A}" + }, + "𝔅": { + math: "\\mathfrak{B}" + }, + "𝔇": { + math: "\\mathfrak{D}" + }, + "𝔈": { + math: "\\mathfrak{E}" + }, + "𝔉": { + math: "\\mathfrak{F}" + }, + "𝔊": { + math: "\\mathfrak{G}" + }, + "𝔍": { + math: "\\mathfrak{J}" + }, + "𝔎": { + math: "\\mathfrak{K}" + }, + "𝔏": { + math: "\\mathfrak{L}" + }, + "𝔐": { + math: "\\mathfrak{M}" + }, + "𝔑": { + math: "\\mathfrak{N}" + }, + "𝔒": { + math: "\\mathfrak{O}" + }, + "𝔓": { + math: "\\mathfrak{P}" + }, + "𝔔": { + math: "\\mathfrak{Q}" + }, + "𝔖": { + math: "\\mathfrak{S}" + }, + "𝔗": { + math: "\\mathfrak{T}" + }, + "𝔘": { + math: "\\mathfrak{U}" + }, + "𝔙": { + math: "\\mathfrak{V}" + }, + "𝔚": { + math: "\\mathfrak{W}" + }, + "𝔛": { + math: "\\mathfrak{X}" + }, + "𝔜": { + math: "\\mathfrak{Y}" + }, + "𝔞": { + math: "\\mathfrak{a}" + }, + "𝔟": { + math: "\\mathfrak{b}" + }, + "𝔠": { + math: "\\mathfrak{c}" + }, + "𝔡": { + math: "\\mathfrak{d}" + }, + "𝔱": { + math: "\\mathfrak{e}" + }, + "𝔣": { + math: "\\mathfrak{f}" + }, + "đ”€": { + math: "\\mathfrak{g}" + }, + "đ”„": { + math: "\\mathfrak{h}" + }, + "𝔩": { + math: "\\mathfrak{i}" + }, + "𝔧": { + math: "\\mathfrak{j}" + }, + "𝔹": { + math: "\\mathfrak{k}" + }, + "đ”©": { + math: "\\mathfrak{l}" + }, + "đ”Ș": { + math: "\\mathfrak{m}" + }, + "đ”«": { + math: "\\mathfrak{n}" + }, + "𝔬": { + math: "\\mathfrak{o}" + }, + "𝔭": { + math: "\\mathfrak{p}" + }, + "𝔼": { + math: "\\mathfrak{q}" + }, + "𝔯": { + math: "\\mathfrak{r}" + }, + "𝔰": { + math: "\\mathfrak{s}" + }, + "đ”±": { + math: "\\mathfrak{t}" + }, + "đ”Č": { + math: "\\mathfrak{u}" + }, + "𝔳": { + math: "\\mathfrak{v}" + }, + "𝔮": { + math: "\\mathfrak{w}" + }, + "đ””": { + math: "\\mathfrak{x}" + }, + "đ”¶": { + math: "\\mathfrak{y}" + }, + "đ”·": { + math: "\\mathfrak{z}" + }, + "𝔾": { + math: "\\mathbb{A}" + }, + "đ”č": { + math: "\\mathbb{B}" + }, + "đ”»": { + math: "\\mathbb{D}" + }, + "đ”Œ": { + math: "\\mathbb{E}" + }, + "đ”œ": { + math: "\\mathbb{F}" + }, + "đ”Ÿ": { + math: "\\mathbb{G}" + }, + "𝕀": { + math: "\\mathbb{I}" + }, + "𝕁": { + math: "\\mathbb{J}" + }, + "𝕂": { + math: "\\mathbb{K}" + }, + "𝕃": { + math: "\\mathbb{L}" + }, + "𝕄": { + math: "\\mathbb{M}" + }, + "𝕆": { + math: "\\mathbb{O}" + }, + "𝕊": { + math: "\\mathbb{S}" + }, + "𝕋": { + math: "\\mathbb{T}" + }, + "𝕌": { + math: "\\mathbb{U}" + }, + "𝕍": { + math: "\\mathbb{V}" + }, + "𝕎": { + math: "\\mathbb{W}" + }, + "𝕏": { + math: "\\mathbb{X}" + }, + "𝕐": { + math: "\\mathbb{Y}" + }, + "𝕒": { + math: "\\mathbb{a}" + }, + "𝕓": { + math: "\\mathbb{b}" + }, + "𝕔": { + math: "\\mathbb{c}" + }, + "𝕕": { + math: "\\mathbb{d}" + }, + "𝕖": { + math: "\\mathbb{e}" + }, + "𝕗": { + math: "\\mathbb{f}" + }, + "𝕘": { + math: "\\mathbb{g}" + }, + "𝕙": { + math: "\\mathbb{h}" + }, + "𝕚": { + math: "\\mathbb{i}" + }, + "𝕛": { + math: "\\mathbb{j}" + }, + "𝕜": { + math: "\\mathbb{k}" + }, + "𝕝": { + math: "\\mathbb{l}" + }, + "𝕞": { + math: "\\mathbb{m}" + }, + "𝕟": { + math: "\\mathbb{n}" + }, + "𝕠": { + math: "\\mathbb{o}" + }, + "𝕡": { + math: "\\mathbb{p}" + }, + "𝕱": { + math: "\\mathbb{q}" + }, + "𝕣": { + math: "\\mathbb{r}" + }, + "đ•€": { + math: "\\mathbb{s}" + }, + "đ•„": { + math: "\\mathbb{t}" + }, + "𝕩": { + math: "\\mathbb{u}" + }, + "𝕧": { + math: "\\mathbb{v}" + }, + "𝕹": { + math: "\\mathbb{w}" + }, + "đ•©": { + math: "\\mathbb{x}" + }, + "đ•Ș": { + math: "\\mathbb{y}" + }, + "đ•«": { + math: "\\mathbb{z}" + }, + "𝕬": { + math: "\\mathslbb{A}" + }, + "𝕭": { + math: "\\mathslbb{B}" + }, + "𝕼": { + math: "\\mathslbb{C}" + }, + "𝕯": { + math: "\\mathslbb{D}" + }, + "𝕰": { + math: "\\mathslbb{E}" + }, + "đ•±": { + math: "\\mathslbb{F}" + }, + "đ•Č": { + math: "\\mathslbb{G}" + }, + "𝕳": { + math: "\\mathslbb{H}" + }, + "𝕮": { + math: "\\mathslbb{I}" + }, + "đ•”": { + math: "\\mathslbb{J}" + }, + "đ•¶": { + math: "\\mathslbb{K}" + }, + "đ•·": { + math: "\\mathslbb{L}" + }, + "𝕾": { + math: "\\mathslbb{M}" + }, + "đ•č": { + math: "\\mathslbb{N}" + }, + "đ•ș": { + math: "\\mathslbb{O}" + }, + "đ•»": { + math: "\\mathslbb{P}" + }, + "đ•Œ": { + math: "\\mathslbb{Q}" + }, + "đ•œ": { + math: "\\mathslbb{R}" + }, + "đ•Ÿ": { + math: "\\mathslbb{S}" + }, + "𝕿": { + math: "\\mathslbb{T}" + }, + "𝖀": { + math: "\\mathslbb{U}" + }, + "𝖁": { + math: "\\mathslbb{V}" + }, + "𝖂": { + math: "\\mathslbb{W}" + }, + "𝖃": { + math: "\\mathslbb{X}" + }, + "𝖄": { + math: "\\mathslbb{Y}" + }, + "𝖅": { + math: "\\mathslbb{Z}" + }, + "𝖆": { + math: "\\mathslbb{a}" + }, + "𝖇": { + math: "\\mathslbb{b}" + }, + "𝖈": { + math: "\\mathslbb{c}" + }, + "𝖉": { + math: "\\mathslbb{d}" + }, + "𝖊": { + math: "\\mathslbb{e}" + }, + "𝖋": { + math: "\\mathslbb{f}" + }, + "𝖌": { + math: "\\mathslbb{g}" + }, + "𝖍": { + math: "\\mathslbb{h}" + }, + "𝖎": { + math: "\\mathslbb{i}" + }, + "𝖏": { + math: "\\mathslbb{j}" + }, + "𝖐": { + math: "\\mathslbb{k}" + }, + "𝖑": { + math: "\\mathslbb{l}" + }, + "𝖒": { + math: "\\mathslbb{m}" + }, + "𝖓": { + math: "\\mathslbb{n}" + }, + "𝖔": { + math: "\\mathslbb{o}" + }, + "𝖕": { + math: "\\mathslbb{p}" + }, + "𝖖": { + math: "\\mathslbb{q}" + }, + "𝖗": { + math: "\\mathslbb{r}" + }, + "𝖘": { + math: "\\mathslbb{s}" + }, + "𝖙": { + math: "\\mathslbb{t}" + }, + "𝖚": { + math: "\\mathslbb{u}" + }, + "𝖛": { + math: "\\mathslbb{v}" + }, + "𝖜": { + math: "\\mathslbb{w}" + }, + "𝖝": { + math: "\\mathslbb{x}" + }, + "𝖞": { + math: "\\mathslbb{y}" + }, + "𝖟": { + math: "\\mathslbb{z}" + }, + "𝖠": { + math: "\\mathsf{A}" + }, + "𝖡": { + math: "\\mathsf{B}" + }, + "𝖱": { + math: "\\mathsf{C}" + }, + "𝖣": { + math: "\\mathsf{D}" + }, + "đ–€": { + math: "\\mathsf{E}" + }, + "đ–„": { + math: "\\mathsf{F}" + }, + "𝖩": { + math: "\\mathsf{G}" + }, + "𝖧": { + math: "\\mathsf{H}" + }, + "𝖹": { + math: "\\mathsf{I}" + }, + "đ–©": { + math: "\\mathsf{J}" + }, + "đ–Ș": { + math: "\\mathsf{K}" + }, + "đ–«": { + math: "\\mathsf{L}" + }, + "𝖬": { + math: "\\mathsf{M}" + }, + "𝖭": { + math: "\\mathsf{N}" + }, + "𝖼": { + math: "\\mathsf{O}" + }, + "𝖯": { + math: "\\mathsf{P}" + }, + "𝖰": { + math: "\\mathsf{Q}" + }, + "đ–±": { + math: "\\mathsf{R}" + }, + "đ–Č": { + math: "\\mathsf{S}" + }, + "𝖳": { + math: "\\mathsf{T}" + }, + "𝖮": { + math: "\\mathsf{U}" + }, + "đ–”": { + math: "\\mathsf{V}" + }, + "đ–¶": { + math: "\\mathsf{W}" + }, + "đ–·": { + math: "\\mathsf{X}" + }, + "𝖾": { + math: "\\mathsf{Y}" + }, + "đ–č": { + math: "\\mathsf{Z}" + }, + "đ–ș": { + math: "\\mathsf{a}" + }, + "đ–»": { + math: "\\mathsf{b}" + }, + "đ–Œ": { + math: "\\mathsf{c}" + }, + "đ–œ": { + math: "\\mathsf{d}" + }, + "đ–Ÿ": { + math: "\\mathsf{e}" + }, + "𝖿": { + math: "\\mathsf{f}" + }, + "𝗀": { + math: "\\mathsf{g}" + }, + "𝗁": { + math: "\\mathsf{h}" + }, + "𝗂": { + math: "\\mathsf{i}" + }, + "𝗃": { + math: "\\mathsf{j}" + }, + "𝗄": { + math: "\\mathsf{k}" + }, + "𝗅": { + math: "\\mathsf{l}" + }, + "𝗆": { + math: "\\mathsf{m}" + }, + "𝗇": { + math: "\\mathsf{n}" + }, + "𝗈": { + math: "\\mathsf{o}" + }, + "𝗉": { + math: "\\mathsf{p}" + }, + "𝗊": { + math: "\\mathsf{q}" + }, + "𝗋": { + math: "\\mathsf{r}" + }, + "𝗌": { + math: "\\mathsf{s}" + }, + "𝗍": { + math: "\\mathsf{t}" + }, + "𝗎": { + math: "\\mathsf{u}" + }, + "𝗏": { + math: "\\mathsf{v}" + }, + "𝗐": { + math: "\\mathsf{w}" + }, + "𝗑": { + math: "\\mathsf{x}" + }, + "𝗒": { + math: "\\mathsf{y}" + }, + "𝗓": { + math: "\\mathsf{z}" + }, + "𝗔": { + math: "\\mathsfbf{A}" + }, + "𝗕": { + math: "\\mathsfbf{B}" + }, + "𝗖": { + math: "\\mathsfbf{C}" + }, + "𝗗": { + math: "\\mathsfbf{D}" + }, + "𝗘": { + math: "\\mathsfbf{E}" + }, + "𝗙": { + math: "\\mathsfbf{F}" + }, + "𝗚": { + math: "\\mathsfbf{G}" + }, + "𝗛": { + math: "\\mathsfbf{H}" + }, + "𝗜": { + math: "\\mathsfbf{I}" + }, + "𝗝": { + math: "\\mathsfbf{J}" + }, + "𝗞": { + math: "\\mathsfbf{K}" + }, + "𝗟": { + math: "\\mathsfbf{L}" + }, + "𝗠": { + math: "\\mathsfbf{M}" + }, + "𝗡": { + math: "\\mathsfbf{N}" + }, + "𝗱": { + math: "\\mathsfbf{O}" + }, + "𝗣": { + math: "\\mathsfbf{P}" + }, + "đ—€": { + math: "\\mathsfbf{Q}" + }, + "đ—„": { + math: "\\mathsfbf{R}" + }, + "𝗩": { + math: "\\mathsfbf{S}" + }, + "𝗧": { + math: "\\mathsfbf{T}" + }, + "𝗹": { + math: "\\mathsfbf{U}" + }, + "đ—©": { + math: "\\mathsfbf{V}" + }, + "đ—Ș": { + math: "\\mathsfbf{W}" + }, + "đ—«": { + math: "\\mathsfbf{X}" + }, + "𝗬": { + math: "\\mathsfbf{Y}" + }, + "𝗭": { + math: "\\mathsfbf{Z}" + }, + "𝗼": { + math: "\\mathsfbf{a}" + }, + "𝗯": { + math: "\\mathsfbf{b}" + }, + "𝗰": { + math: "\\mathsfbf{c}" + }, + "đ—±": { + math: "\\mathsfbf{d}" + }, + "đ—Č": { + math: "\\mathsfbf{e}" + }, + "𝗳": { + math: "\\mathsfbf{f}" + }, + "𝗮": { + math: "\\mathsfbf{g}" + }, + "đ—”": { + math: "\\mathsfbf{h}" + }, + "đ—¶": { + math: "\\mathsfbf{i}" + }, + "đ—·": { + math: "\\mathsfbf{j}" + }, + "𝗾": { + math: "\\mathsfbf{k}" + }, + "đ—č": { + math: "\\mathsfbf{l}" + }, + "đ—ș": { + math: "\\mathsfbf{m}" + }, + "đ—»": { + math: "\\mathsfbf{n}" + }, + "đ—Œ": { + math: "\\mathsfbf{o}" + }, + "đ—œ": { + math: "\\mathsfbf{p}" + }, + "đ—Ÿ": { + math: "\\mathsfbf{q}" + }, + "𝗿": { + math: "\\mathsfbf{r}" + }, + "𝘀": { + math: "\\mathsfbf{s}" + }, + "𝘁": { + math: "\\mathsfbf{t}" + }, + "𝘂": { + math: "\\mathsfbf{u}" + }, + "𝘃": { + math: "\\mathsfbf{v}" + }, + "𝘄": { + math: "\\mathsfbf{w}" + }, + "𝘅": { + math: "\\mathsfbf{x}" + }, + "𝘆": { + math: "\\mathsfbf{y}" + }, + "𝘇": { + math: "\\mathsfbf{z}" + }, + "𝘈": { + math: "\\mathsfsl{A}" + }, + "𝘉": { + math: "\\mathsfsl{B}" + }, + "𝘊": { + math: "\\mathsfsl{C}" + }, + "𝘋": { + math: "\\mathsfsl{D}" + }, + "𝘌": { + math: "\\mathsfsl{E}" + }, + "𝘍": { + math: "\\mathsfsl{F}" + }, + "𝘎": { + math: "\\mathsfsl{G}" + }, + "𝘏": { + math: "\\mathsfsl{H}" + }, + "𝘐": { + math: "\\mathsfsl{I}" + }, + "𝘑": { + math: "\\mathsfsl{J}" + }, + "𝘒": { + math: "\\mathsfsl{K}" + }, + "𝘓": { + math: "\\mathsfsl{L}" + }, + "𝘔": { + math: "\\mathsfsl{M}" + }, + "𝘕": { + math: "\\mathsfsl{N}" + }, + "𝘖": { + math: "\\mathsfsl{O}" + }, + "𝘗": { + math: "\\mathsfsl{P}" + }, + "𝘘": { + math: "\\mathsfsl{Q}" + }, + "𝘙": { + math: "\\mathsfsl{R}" + }, + "𝘚": { + math: "\\mathsfsl{S}" + }, + "𝘛": { + math: "\\mathsfsl{T}" + }, + "𝘜": { + math: "\\mathsfsl{U}" + }, + "𝘝": { + math: "\\mathsfsl{V}" + }, + "𝘞": { + math: "\\mathsfsl{W}" + }, + "𝘟": { + math: "\\mathsfsl{X}" + }, + "𝘠": { + math: "\\mathsfsl{Y}" + }, + "𝘡": { + math: "\\mathsfsl{Z}" + }, + "𝘱": { + math: "\\mathsfsl{a}" + }, + "𝘣": { + math: "\\mathsfsl{b}" + }, + "đ˜€": { + math: "\\mathsfsl{c}" + }, + "đ˜„": { + math: "\\mathsfsl{d}" + }, + "𝘩": { + math: "\\mathsfsl{e}" + }, + "𝘧": { + math: "\\mathsfsl{f}" + }, + "𝘹": { + math: "\\mathsfsl{g}" + }, + "đ˜©": { + math: "\\mathsfsl{h}" + }, + "đ˜Ș": { + math: "\\mathsfsl{i}" + }, + "đ˜«": { + math: "\\mathsfsl{j}" + }, + "𝘬": { + math: "\\mathsfsl{k}" + }, + "𝘭": { + math: "\\mathsfsl{l}" + }, + "𝘼": { + math: "\\mathsfsl{m}" + }, + "𝘯": { + math: "\\mathsfsl{n}" + }, + "𝘰": { + math: "\\mathsfsl{o}" + }, + "đ˜±": { + math: "\\mathsfsl{p}" + }, + "đ˜Č": { + math: "\\mathsfsl{q}" + }, + "𝘳": { + math: "\\mathsfsl{r}" + }, + "𝘮": { + math: "\\mathsfsl{s}" + }, + "đ˜”": { + math: "\\mathsfsl{t}" + }, + "đ˜¶": { + math: "\\mathsfsl{u}" + }, + "đ˜·": { + math: "\\mathsfsl{v}" + }, + "𝘾": { + math: "\\mathsfsl{w}" + }, + "đ˜č": { + math: "\\mathsfsl{x}" + }, + "đ˜ș": { + math: "\\mathsfsl{y}" + }, + "đ˜»": { + math: "\\mathsfsl{z}" + }, + "đ˜Œ": { + math: "\\mathsfbfsl{A}" + }, + "đ˜œ": { + math: "\\mathsfbfsl{B}" + }, + "đ˜Ÿ": { + math: "\\mathsfbfsl{C}" + }, + "𝘿": { + math: "\\mathsfbfsl{D}" + }, + "𝙀": { + math: "\\mathsfbfsl{E}" + }, + "𝙁": { + math: "\\mathsfbfsl{F}" + }, + "𝙂": { + math: "\\mathsfbfsl{G}" + }, + "𝙃": { + math: "\\mathsfbfsl{H}" + }, + "𝙄": { + math: "\\mathsfbfsl{I}" + }, + "𝙅": { + math: "\\mathsfbfsl{J}" + }, + "𝙆": { + math: "\\mathsfbfsl{K}" + }, + "𝙇": { + math: "\\mathsfbfsl{L}" + }, + "𝙈": { + math: "\\mathsfbfsl{M}" + }, + "𝙉": { + math: "\\mathsfbfsl{N}" + }, + "𝙊": { + math: "\\mathsfbfsl{O}" + }, + "𝙋": { + math: "\\mathsfbfsl{P}" + }, + "𝙌": { + math: "\\mathsfbfsl{Q}" + }, + "𝙍": { + math: "\\mathsfbfsl{R}" + }, + "𝙎": { + math: "\\mathsfbfsl{S}" + }, + "𝙏": { + math: "\\mathsfbfsl{T}" + }, + "𝙐": { + math: "\\mathsfbfsl{U}" + }, + "𝙑": { + math: "\\mathsfbfsl{V}" + }, + "𝙒": { + math: "\\mathsfbfsl{W}" + }, + "𝙓": { + math: "\\mathsfbfsl{X}" + }, + "𝙔": { + math: "\\mathsfbfsl{Y}" + }, + "𝙕": { + math: "\\mathsfbfsl{Z}" + }, + "𝙖": { + math: "\\mathsfbfsl{a}" + }, + "𝙗": { + math: "\\mathsfbfsl{b}" + }, + "𝙘": { + math: "\\mathsfbfsl{c}" + }, + "𝙙": { + math: "\\mathsfbfsl{d}" + }, + "𝙚": { + math: "\\mathsfbfsl{e}" + }, + "𝙛": { + math: "\\mathsfbfsl{f}" + }, + "𝙜": { + math: "\\mathsfbfsl{g}" + }, + "𝙝": { + math: "\\mathsfbfsl{h}" + }, + "𝙞": { + math: "\\mathsfbfsl{i}" + }, + "𝙟": { + math: "\\mathsfbfsl{j}" + }, + "𝙠": { + math: "\\mathsfbfsl{k}" + }, + "𝙡": { + math: "\\mathsfbfsl{l}" + }, + "𝙱": { + math: "\\mathsfbfsl{m}" + }, + "𝙣": { + math: "\\mathsfbfsl{n}" + }, + "đ™€": { + math: "\\mathsfbfsl{o}" + }, + "đ™„": { + math: "\\mathsfbfsl{p}" + }, + "𝙩": { + math: "\\mathsfbfsl{q}" + }, + "𝙧": { + math: "\\mathsfbfsl{r}" + }, + "𝙹": { + math: "\\mathsfbfsl{s}" + }, + "đ™©": { + math: "\\mathsfbfsl{t}" + }, + "đ™Ș": { + math: "\\mathsfbfsl{u}" + }, + "đ™«": { + math: "\\mathsfbfsl{v}" + }, + "𝙬": { + math: "\\mathsfbfsl{w}" + }, + "𝙭": { + math: "\\mathsfbfsl{x}" + }, + "𝙼": { + math: "\\mathsfbfsl{y}" + }, + "𝙯": { + math: "\\mathsfbfsl{z}" + }, + "𝙰": { + math: "\\mathtt{A}" + }, + "đ™±": { + math: "\\mathtt{B}" + }, + "đ™Č": { + math: "\\mathtt{C}" + }, + "𝙳": { + math: "\\mathtt{D}" + }, + "𝙮": { + math: "\\mathtt{E}" + }, + "đ™”": { + math: "\\mathtt{F}" + }, + "đ™¶": { + math: "\\mathtt{G}" + }, + "đ™·": { + math: "\\mathtt{H}" + }, + "𝙾": { + math: "\\mathtt{I}" + }, + "đ™č": { + math: "\\mathtt{J}" + }, + "đ™ș": { + math: "\\mathtt{K}" + }, + "đ™»": { + math: "\\mathtt{L}" + }, + "đ™Œ": { + math: "\\mathtt{M}" + }, + "đ™œ": { + math: "\\mathtt{N}" + }, + "đ™Ÿ": { + math: "\\mathtt{O}" + }, + "𝙿": { + math: "\\mathtt{P}" + }, + "𝚀": { + math: "\\mathtt{Q}" + }, + "𝚁": { + math: "\\mathtt{R}" + }, + "𝚂": { + math: "\\mathtt{S}" + }, + "𝚃": { + math: "\\mathtt{T}" + }, + "𝚄": { + math: "\\mathtt{U}" + }, + "𝚅": { + math: "\\mathtt{V}" + }, + "𝚆": { + math: "\\mathtt{W}" + }, + "𝚇": { + math: "\\mathtt{X}" + }, + "𝚈": { + math: "\\mathtt{Y}" + }, + "𝚉": { + math: "\\mathtt{Z}" + }, + "𝚊": { + math: "\\mathtt{a}" + }, + "𝚋": { + math: "\\mathtt{b}" + }, + "𝚌": { + math: "\\mathtt{c}" + }, + "𝚍": { + math: "\\mathtt{d}" + }, + "𝚎": { + math: "\\mathtt{e}" + }, + "𝚏": { + math: "\\mathtt{f}" + }, + "𝚐": { + math: "\\mathtt{g}" + }, + "𝚑": { + math: "\\mathtt{h}" + }, + "𝚒": { + math: "\\mathtt{i}" + }, + "𝚓": { + math: "\\mathtt{j}" + }, + "𝚔": { + math: "\\mathtt{k}" + }, + "𝚕": { + math: "\\mathtt{l}" + }, + "𝚖": { + math: "\\mathtt{m}" + }, + "𝚗": { + math: "\\mathtt{n}" + }, + "𝚘": { + math: "\\mathtt{o}" + }, + "𝚙": { + math: "\\mathtt{p}" + }, + "𝚚": { + math: "\\mathtt{q}" + }, + "𝚛": { + math: "\\mathtt{r}" + }, + "𝚜": { + math: "\\mathtt{s}" + }, + "𝚝": { + math: "\\mathtt{t}" + }, + "𝚞": { + math: "\\mathtt{u}" + }, + "𝚟": { + math: "\\mathtt{v}" + }, + "𝚠": { + math: "\\mathtt{w}" + }, + "𝚡": { + math: "\\mathtt{x}" + }, + "𝚱": { + math: "\\mathtt{y}" + }, + "𝚣": { + math: "\\mathtt{z}" + }, + "đš€": { + math: "\\imath" + }, + "đš„": { + math: "\\jmath" + }, + "𝚹": { + math: "\\mathbf{A}" + }, + "đš©": { + math: "\\mathbf{B}" + }, + "đšȘ": { + math: "\\mathbf{\\Gamma}" + }, + "đš«": { + math: "\\mathbf{\\Delta}" + }, + "𝚬": { + math: "\\mathbf{E}" + }, + "𝚭": { + math: "\\mathbf{Z}" + }, + "𝚼": { + math: "\\mathbf{H}" + }, + "𝚯": { + math: "\\mathbf{\\Theta}" + }, + "𝚰": { + math: "\\mathbf{I}" + }, + "đš±": { + math: "\\mathbf{K}" + }, + "đšČ": { + math: "\\mathbf{\\Lambda}" + }, + "𝚳": { + math: "M" + }, + "𝚮": { + math: "N" + }, + "đš”": { + math: "\\mathbf{\\Xi}" + }, + "đš¶": { + math: "O" + }, + "đš·": { + math: "\\mathbf{\\Pi}" + }, + "𝚾": { + math: "\\mathbf{P}" + }, + "đšč": { + math: "\\mathbf{\\vartheta}" + }, + "đšș": { + math: "\\mathbf{\\Sigma}" + }, + "đš»": { + math: "\\mathbf{T}" + }, + "đšŒ": { + math: "\\mathbf{\\Upsilon}" + }, + "đšœ": { + math: "\\mathbf{\\Phi}" + }, + "đšŸ": { + math: "\\mathbf{X}" + }, + "𝚿": { + math: "\\mathbf{\\Psi}" + }, + "𝛀": { + math: "\\mathbf{\\Omega}" + }, + "𝛁": { + math: "\\mathbf{\\nabla}" + }, + "𝛂": { + math: "\\mathbf{\\alpha}" + }, + "𝛃": { + math: "\\mathbf{\\beta}" + }, + "𝛄": { + math: "\\mathbf{\\gamma}" + }, + "𝛅": { + math: "\\mathbf{\\delta}" + }, + "𝛆": { + math: "\\mathbf{\\epsilon}" + }, + "𝛇": { + math: "\\mathbf{\\zeta}" + }, + "𝛈": { + math: "\\mathbf{\\eta}" + }, + "𝛉": { + math: "\\mathbf{\\theta}" + }, + "𝛊": { + math: "\\mathbf{I}" + }, + "𝛋": { + math: "\\mathbf{K}" + }, + "𝛌": { + math: "\\mathbf{\\lambda}" + }, + "𝛍": { + math: "M" + }, + "𝛎": { + math: "N" + }, + "𝛏": { + math: "\\mathbf{\\xi}" + }, + "𝛐": { + math: "O" + }, + "𝛑": { + math: "\\mathbf{\\pi}" + }, + "𝛒": { + math: "\\mathbf{P}" + }, + "𝛓": { + math: "\\mathbf{\\varsigma}" + }, + "𝛔": { + math: "\\mathbf{\\sigma}" + }, + "𝛕": { + math: "\\mathbf{T}" + }, + "𝛖": { + math: "\\mathbf{\\upsilon}" + }, + "𝛗": { + math: "\\mathbf{\\phi}" + }, + "𝛘": { + math: "\\mathbf{X}" + }, + "𝛙": { + math: "\\mathbf{\\psi}" + }, + "𝛚": { + math: "\\mathbf{\\omega}" + }, + "𝛛": { + math: "\\partial" + }, + "𝛜": { + math: "\\in" + }, + "𝛝": { + math: "\\mathbf{\\vartheta}" + }, + "𝛞": { + math: "\\mathbf{\\varkappa}" + }, + "𝛟": { + math: "\\mathbf{\\phi}" + }, + "𝛠": { + math: "\\mathbf{\\varrho}" + }, + "𝛡": { + math: "\\mathbf{\\varpi}" + }, + "𝛱": { + math: "\\mathsl{A}" + }, + "𝛣": { + math: "\\mathsl{B}" + }, + "đ›€": { + math: "\\mathsl{\\Gamma}" + }, + "đ›„": { + math: "\\mathsl{\\Delta}" + }, + "𝛩": { + math: "\\mathsl{E}" + }, + "𝛧": { + math: "\\mathsl{Z}" + }, + "𝛹": { + math: "\\mathsl{H}" + }, + "đ›©": { + math: "\\mathsl{\\Theta}" + }, + "đ›Ș": { + math: "\\mathsl{I}" + }, + "đ›«": { + math: "\\mathsl{K}" + }, + "𝛬": { + math: "\\mathsl{\\Lambda}" + }, + "𝛭": { + math: "M" + }, + "𝛼": { + math: "N" + }, + "𝛯": { + math: "\\mathsl{\\Xi}" + }, + "𝛰": { + math: "O" + }, + "đ›±": { + math: "\\mathsl{\\Pi}" + }, + "đ›Č": { + math: "\\mathsl{P}" + }, + "𝛳": { + math: "\\mathsl{\\Theta}" + }, + "𝛮": { + math: "\\mathsl{\\Sigma}" + }, + "đ›”": { + math: "\\mathsl{T}" + }, + "đ›¶": { + math: "\\mathsl{\\Upsilon}" + }, + "đ›·": { + math: "\\mathsl{\\Phi}" + }, + "𝛾": { + math: "\\mathsl{X}" + }, + "đ›č": { + math: "\\mathsl{\\Psi}" + }, + "đ›ș": { + math: "\\mathsl{\\Omega}" + }, + "đ›»": { + math: "\\mathsl{\\nabla}" + }, + "đ›Œ": { + math: "\\mathsl{A}" + }, + "đ›œ": { + math: "\\mathsl{B}" + }, + "đ›Ÿ": { + math: "\\mathsl{\\gamma}" + }, + "𝛿": { + math: "\\mathsl{\\delta}" + }, + "𝜀": { + math: "\\mathsl{E}" + }, + "𝜁": { + math: "\\mathsl{Z}" + }, + "𝜂": { + math: "\\mathsl{H}" + }, + "𝜃": { + math: "\\mathsl{\\theta}" + }, + "𝜄": { + math: "\\mathsl{I}" + }, + "𝜅": { + math: "\\mathsl{K}" + }, + "𝜆": { + math: "\\mathsl{\\lambda}" + }, + "𝜇": { + math: "\\mu" + }, + "𝜈": { + math: "\\nu" + }, + "𝜉": { + math: "\\mathsl{\\xi}" + }, + "𝜊": { + math: "o" + }, + "𝜋": { + math: "\\mathsl{\\pi}" + }, + "𝜌": { + math: "\\mathsl{P}" + }, + "𝜍": { + math: "\\mathsl{\\varsigma}" + }, + "𝜎": { + math: "\\mathsl{\\sigma}" + }, + "𝜏": { + math: "\\mathsl{T}" + }, + "𝜐": { + math: "\\mathsl{\\upsilon}" + }, + "𝜑": { + math: "\\mathsl{\\varphi}" + }, + "𝜒": { + math: "\\mathsl{X}" + }, + "𝜓": { + math: "\\mathsl{\\psi}" + }, + "𝜔": { + math: "\\mathsl{\\omega}" + }, + "𝜕": { + math: "\\partial" + }, + "𝜖": { + math: "\\in" + }, + "𝜗": { + math: "\\mathsl{\\vartheta}" + }, + "𝜘": { + math: "\\mathsl{\\varkappa}" + }, + "𝜙": { + math: "\\mathsl{\\phi}" + }, + "𝜚": { + math: "\\mathsl{\\varrho}" + }, + "𝜛": { + math: "\\mathsl{\\varpi}" + }, + "𝜜": { + math: "\\mathbit{A}" + }, + "𝜝": { + math: "\\mathbit{B}" + }, + "𝜞": { + math: "\\mathbit{\\Gamma}" + }, + "𝜟": { + math: "\\mathbit{\\Delta}" + }, + "𝜠": { + math: "\\mathbit{E}" + }, + "𝜡": { + math: "\\mathbit{Z}" + }, + "𝜱": { + math: "\\mathbit{H}" + }, + "𝜣": { + math: "\\mathbit{\\Theta}" + }, + "đœ€": { + math: "\\mathbit{I}" + }, + "đœ„": { + math: "\\mathbit{K}" + }, + "𝜩": { + math: "\\mathbit{\\Lambda}" + }, + "𝜧": { + math: "M" + }, + "𝜹": { + math: "N" + }, + "đœ©": { + math: "\\mathbit{\\Xi}" + }, + "đœȘ": { + math: "O" + }, + "đœ«": { + math: "\\mathbit{\\Pi}" + }, + "𝜬": { + math: "\\mathbit{P}" + }, + "𝜭": { + math: "\\mathbit{O}" + }, + "𝜼": { + math: "\\mathbit{\\Sigma}" + }, + "𝜯": { + math: "\\mathbit{T}" + }, + "𝜰": { + math: "\\mathbit{\\Upsilon}" + }, + "đœ±": { + math: "\\mathbit{\\Phi}" + }, + "đœČ": { + math: "\\mathbit{X}" + }, + "𝜳": { + math: "\\mathbit{\\Psi}" + }, + "𝜮": { + math: "\\mathbit{\\Omega}" + }, + "đœ”": { + math: "\\mathbit{\\nabla}" + }, + "đœ¶": { + math: "\\mathbit{\\alpha}" + }, + "đœ·": { + math: "\\mathbit{\\beta}" + }, + "𝜾": { + math: "\\mathbit{\\gamma}" + }, + "đœč": { + math: "\\mathbit{\\delta}" + }, + "đœș": { + math: "\\mathbit{\\epsilon}" + }, + "đœ»": { + math: "\\mathbit{\\zeta}" + }, + "đœŒ": { + math: "\\mathbit{\\eta}" + }, + "đœœ": { + math: "\\mathbit{\\theta}" + }, + "đœŸ": { + math: "\\mathbit{\\imath}" + }, + "𝜿": { + math: "\\mathbit{\\kappa}" + }, + "𝝀": { + math: "\\mathbit{\\lambda}" + }, + "𝝁": { + math: "\\mu" + }, + "𝝂": { + math: "N" + }, + "𝝃": { + math: "\\mathbit{\\xi}" + }, + "𝝄": { + math: "O" + }, + "𝝅": { + math: "\\mathbit{\\pi}" + }, + "𝝆": { + math: "\\mathbit{\\rho}" + }, + "𝝇": { + math: "\\mathbit{\\varsigma}" + }, + "𝝈": { + math: "\\mathbit{\\sigma}" + }, + "𝝉": { + math: "\\mathbit{\\tau}" + }, + "𝝊": { + math: "\\mathbit{\\upsilon}" + }, + "𝝋": { + math: "\\mathbit{\\varphi}" + }, + "𝝌": { + math: "\\mathbit{\\chi}" + }, + "𝝍": { + math: "\\mathbit{\\psi}" + }, + "𝝎": { + math: "\\mathbit{\\omega}" + }, + "𝝏": { + math: "\\partial" + }, + "𝝐": { + math: "\\in" + }, + "𝝑": { + math: "\\mathbit{\\vartheta}" + }, + "𝝒": { + math: "\\mathbit{\\varkappa}" + }, + "𝝓": { + math: "\\mathbit{\\phi}" + }, + "𝝔": { + math: "\\mathbit{\\varrho}" + }, + "𝝕": { + math: "\\mathbit{\\varpi}" + }, + "𝝖": { + math: "\\mathsfbf{A}" + }, + "𝝗": { + math: "\\mathsfbf{B}" + }, + "𝝘": { + math: "\\mathsfbf{\\Gamma}" + }, + "𝝙": { + math: "\\mathsfbf{\\Delta}" + }, + "𝝚": { + math: "\\mathsfbf{E}" + }, + "𝝛": { + math: "\\mathsfbf{Z}" + }, + "𝝜": { + math: "\\mathsfbf{H}" + }, + "𝝝": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝞": { + math: "\\mathsfbf{I}" + }, + "𝝟": { + math: "\\mathsfbf{K}" + }, + "𝝠": { + math: "\\mathsfbf{\\Lambda}" + }, + "𝝡": { + math: "M" + }, + "𝝱": { + math: "N" + }, + "𝝣": { + math: "\\mathsfbf{\\Xi}" + }, + "đ€": { + math: "O" + }, + "đ„": { + math: "\\mathsfbf{\\Pi}" + }, + "𝝩": { + math: "\\mathsfbf{P}" + }, + "𝝧": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝹": { + math: "\\mathsfbf{\\Sigma}" + }, + "đ©": { + math: "\\mathsfbf{T}" + }, + "đȘ": { + math: "\\mathsfbf{\\Upsilon}" + }, + "đ«": { + math: "\\mathsfbf{\\Phi}" + }, + "𝝬": { + math: "\\mathsfbf{X}" + }, + "𝝭": { + math: "\\mathsfbf{\\Psi}" + }, + "𝝼": { + math: "\\mathsfbf{\\Omega}" + }, + "𝝯": { + math: "\\mathsfbf{\\nabla}" + }, + "𝝰": { + math: "\\mathsfbf{\\alpha}" + }, + "đ±": { + math: "\\mathsfbf{\\beta}" + }, + "đČ": { + math: "\\mathsfbf{\\gamma}" + }, + "𝝳": { + math: "\\mathsfbf{\\delta}" + }, + "𝝮": { + math: "\\mathsfbf{\\varepsilon}" + }, + "đ”": { + math: "\\mathsfbf{\\zeta}" + }, + "đ¶": { + math: "\\mathsfbf{\\eta}" + }, + "đ·": { + math: "\\mathsfbf{\\theta}" + }, + "𝝾": { + math: "\\mathsfbf{\\imath}" + }, + "đč": { + math: "\\mathsfbf{\\kappa}" + }, + "đș": { + math: "\\mathsfbf{\\lambda}" + }, + "đ»": { + math: "\\mu" + }, + "đŒ": { + math: "\\nu" + }, + "đœ": { + math: "\\mathsfbf{\\xi}" + }, + "đŸ": { + math: "o" + }, + "𝝿": { + math: "\\mathsfbf{\\pi}" + }, + "𝞀": { + math: "\\mathsfbf{\\rho}" + }, + "𝞁": { + math: "\\mathsfbf{\\varsigma}" + }, + "𝞂": { + math: "\\mathsfbf{\\sigma}" + }, + "𝞃": { + math: "\\mathsfbf{\\tau}" + }, + "𝞄": { + math: "\\mathsfbf{\\upsilon}" + }, + "𝞅": { + math: "\\mathsfbf{\\varphi}" + }, + "𝞆": { + math: "\\mathsfbf{\\chi}" + }, + "𝞇": { + math: "\\mathsfbf{\\psi}" + }, + "𝞈": { + math: "\\mathsfbf{\\omega}" + }, + "𝞉": { + math: "\\partial" + }, + "𝞊": { + math: "\\in" + }, + "𝞋": { + math: "\\mathsfbf{\\vartheta}" + }, + "𝞌": { + math: "\\mathsfbf{\\varkappa}" + }, + "𝞍": { + math: "\\mathsfbf{\\phi}" + }, + "𝞎": { + math: "\\mathsfbf{\\varrho}" + }, + "𝞏": { + math: "\\mathsfbf{\\varpi}" + }, + "𝞐": { + math: "\\mathsfbfsl{A}" + }, + "𝞑": { + math: "\\mathsfbfsl{B}" + }, + "𝞒": { + math: "\\mathsfbfsl{\\Gamma}" + }, + "𝞓": { + math: "\\mathsfbfsl{\\Delta}" + }, + "𝞔": { + math: "\\mathsfbfsl{E}" + }, + "𝞕": { + math: "\\mathsfbfsl{Z}" + }, + "𝞖": { + math: "\\mathsfbfsl{H}" + }, + "𝞗": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞘": { + math: "\\mathsfbfsl{I}" + }, + "𝞙": { + math: "\\mathsfbfsl{K}" + }, + "𝞚": { + math: "\\mathsfbfsl{\\Lambda}" + }, + "𝞛": { + math: "\\mathsfbfsl{M}" + }, + "𝞜": { + math: "\\mathsfbfsl{N}" + }, + "𝞝": { + math: "\\mathsfbfsl{\\Xi}" + }, + "𝞞": { + math: "\\mathsfbfsl{O}" + }, + "𝞟": { + math: "\\mathsfbfsl{\\Pi}" + }, + "𝞠": { + math: "\\mathsfbfsl{P}" + }, + "𝞡": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞱": { + math: "\\mathsfbfsl{\\Sigma}" + }, + "𝞣": { + math: "\\mathsfbfsl{T}" + }, + "đž€": { + math: "\\mathsfbfsl{\\Upsilon}" + }, + "đž„": { + math: "\\mathsfbfsl{\\Phi}" + }, + "𝞩": { + math: "\\mathsfbfsl{X}" + }, + "𝞧": { + math: "\\mathsfbfsl{\\Psi}" + }, + "𝞹": { + math: "\\mathsfbfsl{\\Omega}" + }, + "đž©": { + math: "\\mathsfbfsl{\\nabla}" + }, + "đžȘ": { + math: "\\mathsfbfsl{\\alpha}" + }, + "đž«": { + math: "\\mathsfbfsl{\\beta}" + }, + "𝞬": { + math: "\\mathsfbfsl{\\gamma}" + }, + "𝞭": { + math: "\\mathsfbfsl{\\delta}" + }, + "𝞼": { + math: "\\mathsfbfsl{\\varepsilon}" + }, + "𝞯": { + math: "\\mathsfbfsl{\\zeta}" + }, + "𝞰": { + math: "\\mathsfbfsl{\\eta}" + }, + "đž±": { + math: "\\mathsfbfsl{\\theta}" + }, + "đžČ": { + math: "\\mathsfbfsl{\\imath}" + }, + "𝞳": { + math: "\\mathsfbfsl{\\kappa}" + }, + "𝞮": { + math: "\\mathsfbfsl{\\lambda}" + }, + "đž”": { + math: "\\mu" + }, + "đž¶": { + math: "\\nu" + }, + "đž·": { + math: "\\mathsfbfsl{\\xi}" + }, + "𝞾": { + math: "o" + }, + "đžč": { + math: "\\mathsfbfsl{\\pi}" + }, + "đžș": { + math: "\\mathsfbfsl{\\rho}" + }, + "đž»": { + math: "\\mathsfbfsl{\\varsigma}" + }, + "đžŒ": { + math: "\\mathsfbfsl{\\sigma}" + }, + "đžœ": { + math: "\\mathsfbfsl{\\tau}" + }, + "đžŸ": { + math: "\\mathsfbfsl{\\upsilon}" + }, + "𝞿": { + math: "\\mathsfbfsl{\\varphi}" + }, + "𝟀": { + math: "\\mathsfbfsl{\\chi}" + }, + "𝟁": { + math: "\\mathsfbfsl{\\psi}" + }, + "𝟂": { + math: "\\mathsfbfsl{\\omega}" + }, + "𝟃": { + math: "\\partial" + }, + "𝟄": { + math: "\\in" + }, + "𝟅": { + math: "\\mathsfbfsl{\\vartheta}" + }, + "𝟆": { + math: "\\mathsfbfsl{\\varkappa}" + }, + "𝟇": { + math: "\\mathsfbfsl{\\phi}" + }, + "𝟈": { + math: "\\mathsfbfsl{\\varrho}" + }, + "𝟉": { + math: "\\mathsfbfsl{\\varpi}" + }, + "𝟊": { + math: "\\mbfDigamma" + }, + "𝟋": { + math: "\\mbfdigamma" + }, + "𝟎": { + math: "\\mathbf{0}" + }, + "𝟏": { + math: "\\mathbf{1}" + }, + "𝟐": { + math: "\\mathbf{2}" + }, + "𝟑": { + math: "\\mathbf{3}" + }, + "𝟒": { + math: "\\mathbf{4}" + }, + "𝟓": { + math: "\\mathbf{5}" + }, + "𝟔": { + math: "\\mathbf{6}" + }, + "𝟕": { + math: "\\mathbf{7}" + }, + "𝟖": { + math: "\\mathbf{8}" + }, + "𝟗": { + math: "\\mathbf{9}" + }, + "𝟘": { + math: "\\mathbb{0}" + }, + "𝟙": { + math: "\\mathbb{1}" + }, + "𝟚": { + math: "\\mathbb{2}" + }, + "𝟛": { + math: "\\mathbb{3}" + }, + "𝟜": { + math: "\\mathbb{4}" + }, + "𝟝": { + math: "\\mathbb{5}" + }, + "𝟞": { + math: "\\mathbb{6}" + }, + "𝟟": { + math: "\\mathbb{7}" + }, + "𝟠": { + math: "\\mathbb{8}" + }, + "𝟡": { + math: "\\mathbb{9}" + }, + "𝟱": { + math: "\\mathsf{0}" + }, + "𝟣": { + math: "\\mathsf{1}" + }, + "đŸ€": { + math: "\\mathsf{2}" + }, + "đŸ„": { + math: "\\mathsf{3}" + }, + "𝟩": { + math: "\\mathsf{4}" + }, + "𝟧": { + math: "\\mathsf{5}" + }, + "𝟹": { + math: "\\mathsf{6}" + }, + "đŸ©": { + math: "\\mathsf{7}" + }, + "đŸȘ": { + math: "\\mathsf{8}" + }, + "đŸ«": { + math: "\\mathsf{9}" + }, + "𝟬": { + math: "\\mathsfbf{0}" + }, + "𝟭": { + math: "\\mathsfbf{1}" + }, + "𝟼": { + math: "\\mathsfbf{2}" + }, + "𝟯": { + math: "\\mathsfbf{3}" + }, + "𝟰": { + math: "\\mathsfbf{4}" + }, + "đŸ±": { + math: "\\mathsfbf{5}" + }, + "đŸČ": { + math: "\\mathsfbf{6}" + }, + "𝟳": { + math: "\\mathsfbf{7}" + }, + "𝟮": { + math: "\\mathsfbf{8}" + }, + "đŸ”": { + math: "\\mathsfbf{9}" + }, + "đŸ¶": { + math: "\\mathtt{0}" + }, + "đŸ·": { + math: "\\mathtt{1}" + }, + "𝟾": { + math: "\\mathtt{2}" + }, + "đŸč": { + math: "\\mathtt{3}" + }, + "đŸș": { + math: "\\mathtt{4}" + }, + "đŸ»": { + math: "\\mathtt{5}" + }, + "đŸŒ": { + math: "\\mathtt{6}" + }, + "đŸœ": { + math: "\\mathtt{7}" + }, + "đŸŸ": { + math: "\\mathtt{8}" + }, + "𝟿": { + math: "\\mathtt{9}" + } + }; + + var $$1 = { + math: "\\$", + text: "\\$" + }; + var _$1 = { + math: "\\_", + text: "\\_" + }; + var require$$1 = { + "#": { + math: "\\#", + text: "\\#" + }, + $: $$1, + "%": { + math: "\\%", + text: "\\%" + }, + "&": { + math: "\\&", + text: "\\&" + }, + "/​": { + text: "{\\slash}" + }, + "<": { + math: "<" + }, + ">": { + math: ">" + }, + "\\": { + math: "\\backslash", + text: "{\\textbackslash}" + }, + "^": { + math: "\\sphat", + text: "\\^" + }, + _: _$1, + "iïž aïžĄ": { + text: "\\t{ia}" + }, + "{": { + math: "\\lbrace", + text: "\\{" + }, + "}": { + math: "\\rbrace", + text: "\\}" + }, + "~": { + math: "\\sptilde", + text: "{\\textasciitilde}" + }, + " ": { + math: "~", + space: true, + text: "~" + }, + "ÂĄ": { + text: "{\\textexclamdown}" + }, + "Âą": { + math: "\\cent", + text: "{\\textcent}", + textpackages: [ + "textcomp" + ] + }, + "ÂŁ": { + math: "\\pounds", + text: "{\\textsterling}", + textpackages: [ + "textcomp" + ] + }, + "€": { + text: "{\\textcurrency}", + textpackages: [ + "textcomp" + ] + }, + "„": { + math: "\\yen", + text: "{\\textyen}", + textpackages: [ + "textcomp" + ] + }, + "Š": { + text: "{\\textbrokenbar}", + textpackages: [ + "textcomp" + ] + }, + "§": { + text: "{\\textsection}", + textpackages: [ + "textcomp" + ] + }, + "š": { + math: "\\spddot", + text: "{\\textasciidieresis}" + }, + "©": { + text: "{\\textcopyright}", + textpackages: [ + "textcomp" + ] + }, + "ÂȘ": { + text: "{\\textordfeminine}", + textpackages: [ + "textcomp" + ] + }, + "«": { + text: "{\\guillemotleft}" + }, + "ÂŹ": { + math: "\\lnot" + }, + "­": { + math: "\\-", + text: "\\-" + }, + "Âź": { + math: "\\circledR", + text: "{\\textregistered}", + textpackages: [ + "textcomp" + ] + }, + "ÂŻ": { + text: "{\\textasciimacron}" + }, + "°": { + math: "^\\circ", + text: "{\\textdegree}", + textpackages: [ + "textcomp" + ] + }, + "±": { + math: "\\pm" + }, + "ÂČ": { + math: "^{2}" + }, + "Âł": { + math: "^{3}" + }, + "ÂŽ": { + text: "{\\textasciiacute}" + }, + "”": { + text: "{\\textmu}" + }, + "¶": { + text: "{\\textparagraph}", + textpackages: [ + "textcomp" + ] + }, + "·": { + math: "\\cdot" + }, + "ž": { + text: "{\\c}" + }, + "Âč": { + math: "^{1}" + }, + "Âș": { + text: "{\\textordmasculine}", + textpackages: [ + "textcomp" + ] + }, + "»": { + text: "{\\guillemotright}" + }, + "ÂŒ": { + math: "\\frac{1}{4}" + }, + "Âœ": { + math: "\\frac{1}{2}" + }, + "Ÿ": { + math: "\\frac{3}{4}" + }, + "Âż": { + text: "{\\textquestiondown}" + }, + "À": { + text: "{\\`A}" + }, + "Á": { + text: "{\\'A}" + }, + "Â": { + text: "{\\^A}" + }, + "Ã": { + text: "{\\~A}" + }, + "Ä": { + text: "{\\\"A}" + }, + "Å": { + text: "{\\AA}" + }, + "Æ": { + text: "{\\AE}" + }, + "Ç": { + text: "{\\c C}" + }, + "È": { + text: "{\\`E}" + }, + "É": { + text: "{\\'E}" + }, + "Ê": { + text: "{\\^E}" + }, + "Ë": { + text: "{\\\"E}" + }, + "Ì": { + text: "{\\`I}" + }, + "Í": { + text: "{\\'I}" + }, + "Î": { + text: "{\\^I}" + }, + "Ï": { + text: "{\\\"I}" + }, + "Ð": { + text: "{\\DH}" + }, + "Ñ": { + text: "{\\~N}" + }, + "Ò": { + text: "{\\`O}" + }, + "Ó": { + text: "{\\'O}" + }, + "Ô": { + text: "{\\^O}" + }, + "Õ": { + text: "{\\~O}" + }, + "Ö": { + text: "{\\\"O}" + }, + "×": { + math: "\\times", + text: "{\\texttimes}" + }, + "Ø": { + text: "{\\O}" + }, + "Ù": { + text: "{\\`U}" + }, + "Ú": { + text: "{\\'U}" + }, + "Û": { + text: "{\\^U}" + }, + "Ü": { + text: "{\\\"U}" + }, + "Ý": { + text: "{\\'Y}" + }, + "Þ": { + text: "{\\TH}" + }, + "ß": { + text: "{\\ss}" + }, + "Ă ": { + text: "{\\`a}" + }, + "ĂĄ": { + text: "{\\'a}" + }, + "Ăą": { + text: "{\\^a}" + }, + "ĂŁ": { + text: "{\\~a}" + }, + "Ă€": { + text: "{\\\"a}" + }, + "Ă„": { + text: "{\\aa}" + }, + "ĂŠ": { + text: "{\\ae}" + }, + "ç": { + text: "{\\c c}" + }, + "Ăš": { + text: "{\\`e}" + }, + "Ă©": { + text: "{\\'e}" + }, + "ĂȘ": { + text: "{\\^e}" + }, + "Ă«": { + text: "{\\\"e}" + }, + "ĂŹ": { + text: "{\\`i}" + }, + "Ă­": { + text: "{\\'i}" + }, + "Ăź": { + text: "{\\^i}" + }, + "ĂŻ": { + text: "{\\\"i}" + }, + "Ă°": { + math: "\\eth", + mathpackages: [ + "amssymb", + "arevmath" + ], + text: "{\\dh}" + }, + "ñ": { + text: "{\\~n}" + }, + "ĂČ": { + text: "{\\`o}" + }, + "Ăł": { + text: "{\\'o}" + }, + "ĂŽ": { + text: "{\\^o}" + }, + "Ă”": { + text: "{\\~o}" + }, + "ö": { + text: "{\\\"o}" + }, + "Ă·": { + math: "\\div" + }, + "Ăž": { + text: "{\\o}" + }, + "Ăč": { + text: "{\\`u}" + }, + "Ăș": { + text: "{\\'u}" + }, + "Ă»": { + text: "{\\^u}" + }, + "ĂŒ": { + text: "{\\\"u}" + }, + "Ăœ": { + text: "{\\'y}" + }, + "ĂŸ": { + text: "{\\th}" + }, + "Ăż": { + text: "{\\\"y}" + }, + "Ā": { + text: "{\\=A}" + }, + "ā": { + text: "{\\=a}" + }, + "Ă": { + text: "{\\u A}" + }, + "ă": { + text: "{\\u a}" + }, + "Ą": { + text: "{\\k{A}}" + }, + "ą": { + text: "{\\k{a}}" + }, + "Ć": { + text: "{\\'C}" + }, + "ć": { + text: "{\\'c}" + }, + "Ĉ": { + text: "{\\^C}" + }, + "ĉ": { + text: "{\\^c}" + }, + "Ċ": { + text: "{\\.C}" + }, + "ċ": { + text: "{\\.c}" + }, + "Č": { + text: "{\\v C}" + }, + "č": { + text: "{\\v c}" + }, + "Ď": { + text: "{\\v D}" + }, + "ď": { + text: "{\\v d}" + }, + "Đ": { + text: "{\\DJ}" + }, + "đ": { + text: "{\\dj}" + }, + "Ē": { + text: "{\\=E}" + }, + "ē": { + text: "{\\=e}" + }, + "Ĕ": { + text: "{\\u E}" + }, + "ĕ": { + text: "{\\u e}" + }, + "Ė": { + text: "{\\.E}" + }, + "ė": { + text: "{\\.e}" + }, + "Ę": { + text: "{\\k{E}}" + }, + "ę": { + text: "{\\k{e}}" + }, + "Ě": { + text: "{\\v E}" + }, + "ě": { + text: "{\\v e}" + }, + "Ĝ": { + text: "{\\^G}" + }, + "ĝ": { + text: "{\\^g}" + }, + "Ğ": { + text: "{\\u G}" + }, + "ğ": { + text: "{\\u g}" + }, + "Ä ": { + text: "{\\.G}" + }, + "ÄĄ": { + text: "{\\.g}" + }, + "Äą": { + text: "{\\c G}" + }, + "ÄŁ": { + text: "{\\c g}" + }, + "Ä€": { + text: "{\\^H}" + }, + "Ä„": { + text: "{\\^h}" + }, + "ÄŠ": { + text: "{\\fontencoding{LELA}\\selectfont\\char40}" + }, + "ħ": { + math: "\\Elzxh" + }, + "Äš": { + text: "{\\~I}" + }, + "Ä©": { + text: "{\\~i}" + }, + "ÄȘ": { + text: "{\\=I}" + }, + "Ä«": { + text: "{\\=i}" + }, + "ÄŹ": { + text: "{\\u I}" + }, + "Ä­": { + text: "{\\u \\i}" + }, + "Äź": { + text: "{\\k{I}}" + }, + "ÄŻ": { + text: "{\\k{i}}" + }, + "Ä°": { + text: "{\\.I}" + }, + "ı": { + math: "\\imath", + text: "{\\i}" + }, + "ÄČ": { + text: "IJ" + }, + "Äł": { + text: "ij" + }, + "ÄŽ": { + text: "{\\^J}" + }, + "Ä”": { + text: "{\\^\\j}" + }, + "Ķ": { + text: "{\\c K}" + }, + "Ä·": { + text: "{\\c k}" + }, + "Äž": { + text: "{\\fontencoding{LELA}\\selectfont\\char91}" + }, + "Äč": { + text: "{\\'L}" + }, + "Äș": { + text: "{\\'l}" + }, + "Ä»": { + text: "{\\c L}" + }, + "ÄŒ": { + text: "{\\c l}" + }, + "Äœ": { + text: "{\\v L}" + }, + "ÄŸ": { + text: "{\\v l}" + }, + "Äż": { + text: "{\\fontencoding{LELA}\\selectfont\\char201}" + }, + "ƀ": { + text: "{\\fontencoding{LELA}\\selectfont\\char202}" + }, + "Ɓ": { + text: "{\\L}" + }, + "Ƃ": { + text: "{\\l}" + }, + "ƃ": { + text: "{\\'N}" + }, + "Ƅ": { + text: "{\\'n}" + }, + "ƅ": { + text: "{\\c N}" + }, + "Ɔ": { + text: "{\\c n}" + }, + "Ƈ": { + text: "{\\v N}" + }, + "ƈ": { + text: "{\\v n}" + }, + "Ɖ": { + text: "'n" + }, + "Ɗ": { + text: "{\\NG}" + }, + "Ƌ": { + text: "{\\ng}" + }, + "ƌ": { + text: "{\\=O}" + }, + "ƍ": { + text: "{\\=o}" + }, + "Ǝ": { + text: "{\\u O}" + }, + "Ə": { + text: "{\\u o}" + }, + "Ɛ": { + text: "{\\H O}" + }, + "Ƒ": { + text: "{\\H o}" + }, + "ƒ": { + text: "{\\OE}" + }, + "Ɠ": { + text: "{\\oe}" + }, + "Ɣ": { + text: "{\\'R}" + }, + "ƕ": { + text: "{\\'r}" + }, + "Ɩ": { + text: "{\\c R}" + }, + "Ɨ": { + text: "{\\c r}" + }, + "Ƙ": { + text: "{\\v R}" + }, + "ƙ": { + text: "{\\v r}" + }, + "ƚ": { + text: "{\\'S}" + }, + "ƛ": { + text: "{\\'s}" + }, + "Ɯ": { + text: "{\\^S}" + }, + "Ɲ": { + text: "{\\^s}" + }, + "ƞ": { + text: "{\\c S}" + }, + "Ɵ": { + text: "{\\c s}" + }, + "Ć ": { + text: "{\\v S}" + }, + "ĆĄ": { + text: "{\\v s}" + }, + "Ćą": { + text: "{\\c T}" + }, + "ĆŁ": { + text: "{\\c t}" + }, + "Ć€": { + text: "{\\v T}" + }, + "Ć„": { + text: "{\\v t}" + }, + "ĆŠ": { + text: "{\\fontencoding{LELA}\\selectfont\\char47}" + }, + "Ƨ": { + text: "{\\fontencoding{LELA}\\selectfont\\char63}" + }, + "Ćš": { + text: "{\\~U}" + }, + "Ć©": { + text: "{\\~u}" + }, + "ĆȘ": { + text: "{\\=U}" + }, + "Ć«": { + text: "{\\=u}" + }, + "ĆŹ": { + text: "{\\u U}" + }, + "Ć­": { + text: "{\\u u}" + }, + "Ćź": { + text: "{\\r{U}}" + }, + "ĆŻ": { + text: "{\\r{u}}" + }, + "Ć°": { + text: "{\\H U}" + }, + "Ʊ": { + text: "{\\H u}" + }, + "ĆČ": { + text: "{\\k{U}}" + }, + "Ćł": { + text: "{\\k{u}}" + }, + "ĆŽ": { + text: "{\\^W}" + }, + "Ć”": { + text: "{\\^w}" + }, + "ƶ": { + text: "{\\^Y}" + }, + "Ć·": { + text: "{\\^y}" + }, + "Ćž": { + text: "{\\\"Y}" + }, + "Ćč": { + text: "{\\'Z}" + }, + "Ćș": { + text: "{\\'z}" + }, + "Ć»": { + text: "{\\.Z}" + }, + "ĆŒ": { + text: "{\\.z}" + }, + "Ćœ": { + text: "{\\v Z}" + }, + "ĆŸ": { + text: "{\\v z}" + }, + "Ćż": { + text: "s" + }, + "ƒ": { + math: "f" + }, + "ƕ": { + text: "{\\texthvlig}" + }, + "ƞ": { + text: "{\\textnrleg}" + }, + "ÆȘ": { + text: "{\\textesh}" + }, + "Æ”": { + math: "\\Zbar" + }, + "Æș": { + text: "{\\fontencoding{LELA}\\selectfont\\char195}" + }, + "ǂ": { + text: "{\\textdoublepipe}" + }, + "Ǎ": { + text: "{\\v A}" + }, + "ǎ": { + text: "{\\v a}" + }, + "Ǐ": { + text: "{\\v I}" + }, + "ǐ": { + text: "{\\v i}" + }, + "Ǒ": { + text: "{\\v O}" + }, + "ǒ": { + text: "{\\v o}" + }, + "Ǔ": { + text: "{\\v U}" + }, + "ǔ": { + text: "{\\v u}" + }, + "ÇŠ": { + text: "{\\v G}" + }, + "ǧ": { + text: "{\\v g}" + }, + "Çš": { + text: "{\\v K}" + }, + "Ç©": { + text: "{\\v k}" + }, + "ÇȘ": { + text: "{\\k{O}}" + }, + "Ç«": { + text: "{\\k{o}}" + }, + "Ç°": { + text: "{\\v j}" + }, + "ÇŽ": { + text: "{\\'G}" + }, + "Ç”": { + text: "{\\'g}" + }, + "Èš": { + text: "{\\c E}" + }, + "È©": { + text: "{\\c e}" + }, + "È·": { + math: "\\jmath" + }, + "ɐ": { + math: "\\Elztrna" + }, + "ɒ": { + math: "\\Elztrnsa" + }, + "ɔ": { + math: "\\Elzopeno" + }, + "ɖ": { + math: "\\Elzrtld" + }, + "ɘ": { + text: "{\\fontencoding{LEIP}\\selectfont\\char61}" + }, + "ə": { + math: "\\Elzschwa" + }, + "ɛ": { + math: "\\varepsilon" + }, + "ÉĄ": { + text: "g" + }, + "ÉŁ": { + math: "\\Elzpgamma" + }, + "É€": { + math: "\\Elzpbgam" + }, + "É„": { + math: "\\Elztrnh" + }, + "ÉŹ": { + math: "\\Elzbtdl" + }, + "É­": { + math: "\\Elzrtll" + }, + "ÉŻ": { + math: "\\Elztrnm" + }, + "É°": { + math: "\\Elztrnmlr" + }, + "ɱ": { + math: "\\Elzltlmr" + }, + "ÉČ": { + text: "{\\Elzltln}" + }, + "Éł": { + math: "\\Elzrtln" + }, + "É·": { + math: "\\Elzclomeg" + }, + "Éž": { + text: "{\\textphi}" + }, + "Éč": { + math: "\\Elztrnr" + }, + "Éș": { + math: "\\Elztrnrl" + }, + "É»": { + math: "\\Elzrttrnr" + }, + "ÉŒ": { + math: "\\Elzrl" + }, + "Éœ": { + math: "\\Elzrtlr" + }, + "ÉŸ": { + math: "\\Elzfhr" + }, + "Éż": { + text: "{\\fontencoding{LEIP}\\selectfont\\char202}" + }, + "ʂ": { + math: "\\Elzrtls" + }, + "ʃ": { + math: "\\Elzesh" + }, + "ʇ": { + math: "\\Elztrnt" + }, + "ʈ": { + math: "\\Elzrtlt" + }, + "ʊ": { + math: "\\Elzpupsil" + }, + "ʋ": { + math: "\\Elzpscrv" + }, + "ʌ": { + math: "\\Elzinvv" + }, + "ʍ": { + math: "\\Elzinvw" + }, + "ʎ": { + math: "\\Elztrny" + }, + "ʐ": { + math: "\\Elzrtlz" + }, + "ʒ": { + math: "\\Elzyogh" + }, + "ʔ": { + math: "\\Elzglst" + }, + "ʕ": { + math: "\\Elzreglst" + }, + "ʖ": { + math: "\\Elzinglst" + }, + "ʞ": { + text: "{\\textturnk}" + }, + "Ê€": { + math: "\\Elzdyogh" + }, + "ʧ": { + math: "\\Elztesh" + }, + "Ê°": { + math: "^{h}", + text: "\\textsuperscript{h}" + }, + "ÊČ": { + math: "^{j}", + text: "\\textsuperscript{j}" + }, + "Êł": { + math: "^{r}", + text: "\\textsuperscript{r}" + }, + "Ê·": { + math: "^{w}", + text: "\\textsuperscript{w}" + }, + "Êž": { + math: "^{y}", + text: "\\textsuperscript{y}" + }, + "Êč": { + text: "'" + }, + "Ê»": { + text: "'" + }, + "ÊŒ": { + text: "'" + }, + "Êœ": { + text: "'" + }, + "Êż": { + text: "{\\lasp}", + textpackages: [ + "mathscinet" + ] + }, + "ˆ": { + text: "{\\textasciicircum}" + }, + "ˇ": { + text: "{\\textasciicaron}" + }, + "ˈ": { + math: "\\Elzverts" + }, + "ˉ": { + text: "-" + }, + "ˌ": { + math: "\\Elzverti" + }, + "ː": { + math: "\\Elzlmrk" + }, + "ˑ": { + math: "\\Elzhlmrk" + }, + "˒": { + math: "\\Elzsbrhr" + }, + "˓": { + math: "\\Elzsblhr" + }, + "˔": { + math: "\\Elzrais" + }, + "˕": { + math: "\\Elzlow" + }, + "˘": { + text: "{\\textasciibreve}" + }, + "˙": { + text: "{\\textperiodcentered}", + textpackages: [ + "textcomp" + ] + }, + "˚": { + text: "{\\r{}}" + }, + "˛": { + text: "{\\k{}}" + }, + "˜": { + text: "{\\texttildelow}" + }, + "˝": { + text: "{\\H{}}" + }, + "ËĄ": { + math: "^{l}", + text: "\\textsuperscript{l}" + }, + "Ëą": { + math: "^{s}", + text: "\\textsuperscript{s}" + }, + "ËŁ": { + math: "^{x}", + text: "\\textsuperscript{x}" + }, + "Ë„": { + text: "\\tone{55}" + }, + "ËŠ": { + text: "\\tone{44}" + }, + "˧": { + text: "\\tone{33}" + }, + "Ëš": { + text: "\\tone{22}" + }, + "Ë©": { + text: "\\tone{11}" + }, + "̀": { + math: "\\grave", + combiningdiacritic: true, + text: "\\`" + }, + "̀̄": { + text: "{\\textgravemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̀": { + text: "{\\textgravemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̀̇": { + text: "{\\textgravedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̀": { + text: "{\\textgravedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́": { + math: "\\acute", + combiningdiacritic: true, + text: "\\'" + }, + "́̄": { + text: "{\\textacutemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄́": { + text: "{\\textacutemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̌": { + text: "{\\textacutewedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̌́": { + text: "{\\textacutewedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̂": { + math: "\\hat", + combiningdiacritic: true, + text: "\\^" + }, + "̂̇": { + text: "{\\textcircumdot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̂": { + text: "{\\textcircumdot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̃": { + math: "\\tilde", + combiningdiacritic: true, + text: "\\~" + }, + "̃̇": { + text: "{\\texttildedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̃": { + text: "{\\texttildedot}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄": { + math: "\\bar", + combiningdiacritic: true, + text: "\\=" + }, + "̅": { + math: "\\overline", + combiningdiacritic: true + }, + "̆": { + math: "\\breve", + combiningdiacritic: true, + text: "{\\u}" + }, + "̆̄": { + text: "{\\textbrevemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̆": { + text: "{\\textbrevemacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇": { + math: "\\dot", + combiningdiacritic: true, + text: "\\." + }, + "̇́": { + text: "{\\textdotacute}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "́̇": { + text: "{\\textdotacute}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̇̆": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̆̇": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̈": { + math: "\\ddot", + combiningdiacritic: true, + text: "\\\"" + }, + "̉": { + math: "\\ovhook" + }, + "̊": { + math: "\\mathring", + combiningdiacritic: true, + text: "{\\r}" + }, + "̊̄": { + text: "{\\textringmacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̄̊": { + text: "{\\textringmacron}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̋": { + text: "{\\H}", + combiningdiacritic: true + }, + "̌": { + math: "\\check", + text: "{\\v}", + combiningdiacritic: true + }, + "̍": { + text: "{\\textvbaraccent}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̎": { + text: "{\\textdoublevbaraccent}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̏": { + text: "{\\textdoublegrave}", + combiningdiacritic: true + }, + "̐": { + text: "{\\textdotbreve}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̑": { + text: "{\\fontencoding{LECO}\\selectfont\\char177}" + }, + "̒": { + math: "\\oturnedcomma" + }, + "̕": { + math: "\\ocommatopright" + }, + "̖": { + text: "{\\textsubgrave}", + combiningdiacritic: true + }, + "̘": { + text: "{\\textadvancing}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̙": { + text: "{\\textretracting}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̚": { + math: "\\droang", + text: "{\\textcorner}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̜": { + text: "{\\textsublhalfring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̝": { + text: "{\\textraising}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̞": { + text: "{\\textlowering}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̟": { + text: "{\\textsubplus}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌĄ": { + math: "\\Elzpalh" + }, + "Ìą": { + text: "{\\Elzrh}" + }, + "ÌŁ": { + text: "{\\d}", + combiningdiacritic: true + }, + "Ì€": { + text: "{\\textsubumlaut}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì„": { + text: "{\\textsubring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̧": { + text: "{\\c}", + combiningdiacritic: true + }, + "Ìš": { + text: "{\\k}", + combiningdiacritic: true + }, + "Ì©": { + text: "{\\textsyllabic}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌȘ": { + math: "\\Elzsbbrg", + text: "{\\textsubbridge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì«": { + text: "{\\fontencoding{LECO}\\selectfont\\char203}" + }, + "ÌŹ": { + text: "{\\textsubwedge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌŻ": { + text: "{\\textsubarch}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì°": { + math: "\\utilde", + text: "{\\textsubtilde}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "̱": { + math: "\\underbar", + combiningdiacritic: true, + text: "{\\textsubbar}", + textpackages: [ + "tipa" + ] + }, + "ÌČ": { + math: "\\underline" + }, + "ÌŽ": { + text: "{\\textsuperimposetilde}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì”": { + text: "{\\Elzxl}" + }, + "̶": { + text: "{\\Elzbar}" + }, + "Ì·": { + text: "{\\fontencoding{LECO}\\selectfont\\char215}" + }, + "Ìž": { + math: "\\not" + }, + "Ìč": { + text: "{\\textsubrhalfring}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ìș": { + text: "{\\textinvsubbridge}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ì»": { + text: "{\\textsubsquare}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÌŒ": { + text: "{\\textseagull}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "Ìœ": { + text: "{\\textovercross}", + combiningdiacritic: true, + textpackages: [ + "tipa" + ] + }, + "ÍĄ": { + text: "{\\fontencoding{LECO}\\selectfont\\char225}" + }, + "ÍŽ": { + text: "'" + }, + "Í”": { + text: "," + }, + "ÍŸ": { + text: ";" + }, + "Ά": { + text: "{\\'A}" + }, + "Έ": { + text: "{\\'E}" + }, + "Ή": { + text: "{\\'H}" + }, + "Ί": { + text: "{\\'{}I}" + }, + "Ό": { + text: "{\\'{}O}" + }, + "Ύ": { + math: "\\mathrm{'Y}" + }, + "Ώ": { + math: "\\mathrm{'\\Omega}" + }, + "ΐ": { + math: "\\acute{\\ddot{\\iota}}" + }, + "Α": { + math: "A" + }, + "Β": { + math: "B" + }, + "Γ": { + math: "\\Gamma" + }, + "Δ": { + math: "\\Delta" + }, + "Ε": { + math: "E" + }, + "Ζ": { + math: "Z" + }, + "Η": { + math: "H" + }, + "Θ": { + math: "\\Theta" + }, + "Ι": { + math: "I" + }, + "Κ": { + math: "K" + }, + "Λ": { + math: "\\Lambda" + }, + "Μ": { + math: "M" + }, + "Ν": { + math: "N" + }, + "Ξ": { + math: "\\Xi" + }, + "Ο": { + math: "O" + }, + "Π": { + math: "\\Pi" + }, + "ÎĄ": { + math: "P" + }, + "ÎŁ": { + math: "\\Sigma" + }, + "΀": { + math: "T" + }, + "΄": { + math: "\\Upsilon" + }, + "Ί": { + math: "\\Phi" + }, + "Χ": { + math: "X" + }, + "Κ": { + math: "\\Psi" + }, + "Ω": { + math: "\\Omega" + }, + "ÎȘ": { + math: "\\mathrm{\\ddot{I}}" + }, + "Ϋ": { + math: "\\mathrm{\\ddot{Y}}" + }, + "ÎŹ": { + text: "{\\'$\\alpha$}" + }, + "έ": { + math: "\\acute{\\epsilon}" + }, + "Îź": { + math: "\\acute{\\eta}" + }, + "ÎŻ": { + math: "\\acute{\\iota}" + }, + "ΰ": { + math: "\\acute{\\ddot{\\upsilon}}" + }, + "α": { + math: "\\alpha" + }, + "ÎČ": { + math: "\\beta" + }, + "Îł": { + math: "\\gamma" + }, + "ÎŽ": { + math: "\\delta" + }, + "Δ": { + math: "\\epsilon" + }, + "ζ": { + math: "\\zeta" + }, + "η": { + math: "\\eta" + }, + "Ξ": { + math: "\\theta", + text: "{\\texttheta}" + }, + "Îč": { + math: "\\iota" + }, + "Îș": { + math: "\\kappa" + }, + "λ": { + math: "\\lambda" + }, + "ÎŒ": { + math: "\\mu" + }, + "Îœ": { + math: "\\nu" + }, + "Ο": { + math: "\\xi" + }, + "Îż": { + math: "o" + }, + "π": { + math: "\\pi" + }, + "ρ": { + math: "\\rho" + }, + "ς": { + math: "\\varsigma" + }, + "σ": { + math: "\\sigma" + }, + "τ": { + math: "\\tau" + }, + "υ": { + math: "\\upsilon" + }, + "φ": { + math: "\\varphi" + }, + "χ": { + math: "\\chi" + }, + "ψ": { + math: "\\psi" + }, + "ω": { + math: "\\omega" + }, + "ϊ": { + math: "\\ddot{\\iota}" + }, + "ϋ": { + math: "\\ddot{\\upsilon}" + }, + "ό": { + text: "{\\'o}" + }, + "ύ": { + math: "\\acute{\\upsilon}" + }, + "ώ": { + math: "\\acute{\\omega}" + }, + "ϐ": { + math: "\\varbeta", + text: "\\Pisymbol{ppi022}{87}" + }, + "ϑ": { + math: "\\vartheta", + text: "{\\textvartheta}" + }, + "ϒ": { + math: "\\Upsilon" + }, + "ϕ": { + math: "\\phi" + }, + "ϖ": { + math: "\\varpi" + }, + "Ϙ": { + math: "\\Qoppa" + }, + "ϙ": { + math: "\\qoppa" + }, + "Ϛ": { + math: "\\Stigma" + }, + "ϛ": { + math: "\\stigma" + }, + "Ϝ": { + math: "\\Digamma" + }, + "ϝ": { + math: "\\digamma" + }, + "Ϟ": { + math: "\\Koppa" + }, + "ϟ": { + math: "\\koppa" + }, + "Ï ": { + math: "\\Sampi" + }, + "ÏĄ": { + math: "\\sampi" + }, + "Ï°": { + math: "\\varkappa" + }, + "ϱ": { + math: "\\varrho" + }, + "ÏŽ": { + math: "\\upvarTheta", + text: "{\\textTheta}" + }, + "Ï”": { + math: "\\epsilon" + }, + "϶": { + math: "\\backepsilon" + }, + "Ё": { + text: "{\\cyrchar\\CYRYO}" + }, + "Ђ": { + text: "{\\cyrchar\\CYRDJE}" + }, + "Ѓ": { + text: "{\\cyrchar{\\'\\CYRG}}" + }, + "Є": { + text: "{\\cyrchar\\CYRIE}" + }, + "Ѕ": { + text: "{\\cyrchar\\CYRDZE}" + }, + "І": { + text: "{\\cyrchar\\CYRII}" + }, + "Ї": { + text: "{\\cyrchar\\CYRYI}" + }, + "Ј": { + text: "{\\cyrchar\\CYRJE}" + }, + "Љ": { + text: "{\\cyrchar\\CYRLJE}" + }, + "Њ": { + text: "{\\cyrchar\\CYRNJE}" + }, + "Ћ": { + text: "{\\cyrchar\\CYRTSHE}" + }, + "Ќ": { + text: "{\\cyrchar{\\'\\CYRK}}" + }, + "Ў": { + text: "{\\cyrchar\\CYRUSHRT}" + }, + "Џ": { + text: "{\\cyrchar\\CYRDZHE}" + }, + "А": { + text: "{\\cyrchar\\CYRA}" + }, + "Б": { + text: "{\\cyrchar\\CYRB}" + }, + "В": { + text: "{\\cyrchar\\CYRV}" + }, + "Г": { + text: "{\\cyrchar\\CYRG}" + }, + "Д": { + text: "{\\cyrchar\\CYRD}" + }, + "Е": { + text: "{\\cyrchar\\CYRE}" + }, + "Ж": { + text: "{\\cyrchar\\CYRZH}" + }, + "З": { + text: "{\\cyrchar\\CYRZ}" + }, + "И": { + text: "{\\cyrchar\\CYRI}" + }, + "Й": { + text: "{\\cyrchar\\CYRISHRT}" + }, + "К": { + text: "{\\cyrchar\\CYRK}" + }, + "Л": { + text: "{\\cyrchar\\CYRL}" + }, + "М": { + text: "{\\cyrchar\\CYRM}" + }, + "Н": { + text: "{\\cyrchar\\CYRN}" + }, + "О": { + text: "{\\cyrchar\\CYRO}" + }, + "П": { + text: "{\\cyrchar\\CYRP}" + }, + "Đ ": { + text: "{\\cyrchar\\CYRR}" + }, + "ĐĄ": { + text: "{\\cyrchar\\CYRS}" + }, + "Đą": { + text: "{\\cyrchar\\CYRT}" + }, + "ĐŁ": { + text: "{\\cyrchar\\CYRU}" + }, + "Đ€": { + text: "{\\cyrchar\\CYRF}" + }, + "Đ„": { + text: "{\\cyrchar\\CYRH}" + }, + "ĐŠ": { + text: "{\\cyrchar\\CYRC}" + }, + "Ч": { + text: "{\\cyrchar\\CYRCH}" + }, + "Đš": { + text: "{\\cyrchar\\CYRSH}" + }, + "Đ©": { + text: "{\\cyrchar\\CYRSHCH}" + }, + "ĐȘ": { + text: "{\\cyrchar\\CYRHRDSN}" + }, + "Đ«": { + text: "{\\cyrchar\\CYRERY}" + }, + "ĐŹ": { + text: "{\\cyrchar\\CYRSFTSN}" + }, + "Đ­": { + text: "{\\cyrchar\\CYREREV}" + }, + "Đź": { + text: "{\\cyrchar\\CYRYU}" + }, + "ĐŻ": { + text: "{\\cyrchar\\CYRYA}" + }, + "Đ°": { + text: "{\\cyrchar\\cyra}" + }, + "б": { + text: "{\\cyrchar\\cyrb}" + }, + "ĐČ": { + text: "{\\cyrchar\\cyrv}" + }, + "Đł": { + text: "{\\cyrchar\\cyrg}" + }, + "ĐŽ": { + text: "{\\cyrchar\\cyrd}" + }, + "Đ”": { + text: "{\\cyrchar\\cyre}" + }, + "ж": { + text: "{\\cyrchar\\cyrzh}" + }, + "Đ·": { + text: "{\\cyrchar\\cyrz}" + }, + "Đž": { + text: "{\\cyrchar\\cyri}" + }, + "Đč": { + text: "{\\cyrchar\\cyrishrt}" + }, + "Đș": { + text: "{\\cyrchar\\cyrk}" + }, + "Đ»": { + text: "{\\cyrchar\\cyrl}" + }, + "ĐŒ": { + text: "{\\cyrchar\\cyrm}" + }, + "Đœ": { + text: "{\\cyrchar\\cyrn}" + }, + "ĐŸ": { + text: "{\\cyrchar\\cyro}" + }, + "Đż": { + text: "{\\cyrchar\\cyrp}" + }, + "р": { + text: "{\\cyrchar\\cyrr}" + }, + "с": { + text: "{\\cyrchar\\cyrs}" + }, + "т": { + text: "{\\cyrchar\\cyrt}" + }, + "у": { + text: "{\\cyrchar\\cyru}" + }, + "ф": { + text: "{\\cyrchar\\cyrf}" + }, + "х": { + text: "{\\cyrchar\\cyrh}" + }, + "ц": { + text: "{\\cyrchar\\cyrc}" + }, + "ч": { + text: "{\\cyrchar\\cyrch}" + }, + "ш": { + text: "{\\cyrchar\\cyrsh}" + }, + "щ": { + text: "{\\cyrchar\\cyrshch}" + }, + "ъ": { + text: "{\\cyrchar\\cyrhrdsn}" + }, + "ы": { + text: "{\\cyrchar\\cyrery}" + }, + "ь": { + text: "{\\cyrchar\\cyrsftsn}" + }, + "э": { + text: "{\\cyrchar\\cyrerev}" + }, + "ю": { + text: "{\\cyrchar\\cyryu}" + }, + "я": { + text: "{\\cyrchar\\cyrya}" + }, + "ё": { + text: "{\\cyrchar\\cyryo}" + }, + "ђ": { + text: "{\\cyrchar\\cyrdje}" + }, + "ѓ": { + text: "{\\cyrchar{\\'\\cyrg}}" + }, + "є": { + text: "{\\cyrchar\\cyrie}" + }, + "ѕ": { + text: "{\\cyrchar\\cyrdze}" + }, + "і": { + text: "{\\cyrchar\\cyrii}" + }, + "ї": { + text: "{\\cyrchar\\cyryi}" + }, + "ј": { + text: "{\\cyrchar\\cyrje}" + }, + "љ": { + text: "{\\cyrchar\\cyrlje}" + }, + "њ": { + text: "{\\cyrchar\\cyrnje}" + }, + "ћ": { + text: "{\\cyrchar\\cyrtshe}" + }, + "ќ": { + text: "{\\cyrchar{\\'\\cyrk}}" + }, + "ў": { + text: "{\\cyrchar\\cyrushrt}" + }, + "џ": { + text: "{\\cyrchar\\cyrdzhe}" + }, + "Ń ": { + text: "{\\cyrchar\\CYROMEGA}" + }, + "ŃĄ": { + text: "{\\cyrchar\\cyromega}" + }, + "Ńą": { + text: "{\\cyrchar\\CYRYAT}" + }, + "Ń€": { + text: "{\\cyrchar\\CYRIOTE}" + }, + "Ń„": { + text: "{\\cyrchar\\cyriote}" + }, + "ŃŠ": { + text: "{\\cyrchar\\CYRLYUS}" + }, + "ѧ": { + text: "{\\cyrchar\\cyrlyus}" + }, + "Ńš": { + text: "{\\cyrchar\\CYRIOTLYUS}" + }, + "Ń©": { + text: "{\\cyrchar\\cyriotlyus}" + }, + "ŃȘ": { + text: "{\\cyrchar\\CYRBYUS}" + }, + "ŃŹ": { + text: "{\\cyrchar\\CYRIOTBYUS}" + }, + "Ń­": { + text: "{\\cyrchar\\cyriotbyus}" + }, + "Ńź": { + text: "{\\cyrchar\\CYRKSI}" + }, + "ŃŻ": { + text: "{\\cyrchar\\cyrksi}" + }, + "Ń°": { + text: "{\\cyrchar\\CYRPSI}" + }, + "ѱ": { + text: "{\\cyrchar\\cyrpsi}" + }, + "ŃČ": { + text: "{\\cyrchar\\CYRFITA}" + }, + "ŃŽ": { + text: "{\\cyrchar\\CYRIZH}" + }, + "Ńž": { + text: "{\\cyrchar\\CYRUK}" + }, + "Ńč": { + text: "{\\cyrchar\\cyruk}" + }, + "Ńș": { + text: "{\\cyrchar\\CYROMEGARND}" + }, + "Ń»": { + text: "{\\cyrchar\\cyromegarnd}" + }, + "ŃŒ": { + text: "{\\cyrchar\\CYROMEGATITLO}" + }, + "Ńœ": { + text: "{\\cyrchar\\cyromegatitlo}" + }, + "ŃŸ": { + text: "{\\cyrchar\\CYROT}" + }, + "Ńż": { + text: "{\\cyrchar\\cyrot}" + }, + "Ҁ": { + text: "{\\cyrchar\\CYRKOPPA}" + }, + "ҁ": { + text: "{\\cyrchar\\cyrkoppa}" + }, + "҂": { + text: "{\\cyrchar\\cyrthousands}" + }, + "҈": { + text: "{\\cyrchar\\cyrhundredthousands}" + }, + "҉": { + text: "{\\cyrchar\\cyrmillions}" + }, + "Ҍ": { + text: "{\\cyrchar\\CYRSEMISFTSN}" + }, + "ҍ": { + text: "{\\cyrchar\\cyrsemisftsn}" + }, + "Ҏ": { + text: "{\\cyrchar\\CYRRTICK}" + }, + "ҏ": { + text: "{\\cyrchar\\cyrrtick}" + }, + "Ґ": { + text: "{\\cyrchar\\CYRGUP}" + }, + "ґ": { + text: "{\\cyrchar\\cyrgup}" + }, + "Ғ": { + text: "{\\cyrchar\\CYRGHCRS}" + }, + "ғ": { + text: "{\\cyrchar\\cyrghcrs}" + }, + "Ҕ": { + text: "{\\cyrchar\\CYRGHK}" + }, + "ҕ": { + text: "{\\cyrchar\\cyrghk}" + }, + "Җ": { + text: "{\\cyrchar\\CYRZHDSC}" + }, + "җ": { + text: "{\\cyrchar\\cyrzhdsc}" + }, + "Ҙ": { + text: "{\\cyrchar\\CYRZDSC}" + }, + "ҙ": { + text: "{\\cyrchar\\cyrzdsc}" + }, + "Қ": { + text: "{\\cyrchar\\CYRKDSC}" + }, + "қ": { + text: "{\\cyrchar\\cyrkdsc}" + }, + "Ҝ": { + text: "{\\cyrchar\\CYRKVCRS}" + }, + "ҝ": { + text: "{\\cyrchar\\cyrkvcrs}" + }, + "Ҟ": { + text: "{\\cyrchar\\CYRKHCRS}" + }, + "ҟ": { + text: "{\\cyrchar\\cyrkhcrs}" + }, + "Ò ": { + text: "{\\cyrchar\\CYRKBEAK}" + }, + "ÒĄ": { + text: "{\\cyrchar\\cyrkbeak}" + }, + "Òą": { + text: "{\\cyrchar\\CYRNDSC}" + }, + "ÒŁ": { + text: "{\\cyrchar\\cyrndsc}" + }, + "Ò€": { + text: "{\\cyrchar\\CYRNG}" + }, + "Ò„": { + text: "{\\cyrchar\\cyrng}" + }, + "ÒŠ": { + text: "{\\cyrchar\\CYRPHK}" + }, + "Ò§": { + text: "{\\cyrchar\\cyrphk}" + }, + "Òš": { + text: "{\\cyrchar\\CYRABHHA}" + }, + "Ò©": { + text: "{\\cyrchar\\cyrabhha}" + }, + "ÒȘ": { + text: "{\\cyrchar\\CYRSDSC}" + }, + "Ò«": { + text: "{\\cyrchar\\cyrsdsc}" + }, + "ÒŹ": { + text: "{\\cyrchar\\CYRTDSC}" + }, + "Ò­": { + text: "{\\cyrchar\\cyrtdsc}" + }, + "Òź": { + text: "{\\cyrchar\\CYRY}" + }, + "ÒŻ": { + text: "{\\cyrchar\\cyry}" + }, + "Ò°": { + text: "{\\cyrchar\\CYRYHCRS}" + }, + "Ò±": { + text: "{\\cyrchar\\cyryhcrs}" + }, + "ÒČ": { + text: "{\\cyrchar\\CYRHDSC}" + }, + "Òł": { + text: "{\\cyrchar\\cyrhdsc}" + }, + "ÒŽ": { + text: "{\\cyrchar\\CYRTETSE}" + }, + "Ò”": { + text: "{\\cyrchar\\cyrtetse}" + }, + "Ò¶": { + text: "{\\cyrchar\\CYRCHRDSC}" + }, + "Ò·": { + text: "{\\cyrchar\\cyrchrdsc}" + }, + "Òž": { + text: "{\\cyrchar\\CYRCHVCRS}" + }, + "Òč": { + text: "{\\cyrchar\\cyrchvcrs}" + }, + "Òș": { + text: "{\\cyrchar\\CYRSHHA}" + }, + "Ò»": { + text: "{\\cyrchar\\cyrshha}" + }, + "ÒŒ": { + text: "{\\cyrchar\\CYRABHCH}" + }, + "Òœ": { + text: "{\\cyrchar\\cyrabhch}" + }, + "ÒŸ": { + text: "{\\cyrchar\\CYRABHCHDSC}" + }, + "Òż": { + text: "{\\cyrchar\\cyrabhchdsc}" + }, + "Ӏ": { + text: "{\\cyrchar\\CYRpalochka}" + }, + "Ӄ": { + text: "{\\cyrchar\\CYRKHK}" + }, + "ӄ": { + text: "{\\cyrchar\\cyrkhk}" + }, + "Ӈ": { + text: "{\\cyrchar\\CYRNHK}" + }, + "ӈ": { + text: "{\\cyrchar\\cyrnhk}" + }, + "Ӌ": { + text: "{\\cyrchar\\CYRCHLDSC}" + }, + "ӌ": { + text: "{\\cyrchar\\cyrchldsc}" + }, + "Ӕ": { + text: "{\\cyrchar\\CYRAE}" + }, + "ӕ": { + text: "{\\cyrchar\\cyrae}" + }, + "Ә": { + text: "{\\cyrchar\\CYRSCHWA}" + }, + "ә": { + text: "{\\cyrchar\\cyrschwa}" + }, + "Ó ": { + text: "{\\cyrchar\\CYRABHDZE}" + }, + "ÓĄ": { + text: "{\\cyrchar\\cyrabhdze}" + }, + "Óš": { + text: "{\\cyrchar\\CYROTLD}" + }, + "Ó©": { + text: "{\\cyrchar\\cyrotld}" + }, + "àĄ±": { + math: "\\\\backslash" + }, + "ᔃ": { + math: "^{a}", + text: "\\textsuperscript{a}" + }, + "ᔇ": { + math: "^{b}", + text: "\\textsuperscript{b}" + }, + "ᔈ": { + math: "^{d}", + text: "\\textsuperscript{d}" + }, + "ᔉ": { + math: "^{e}", + text: "\\textsuperscript{e}" + }, + "ᔍ": { + math: "^{g}", + text: "\\textsuperscript{g}" + }, + "ᔏ": { + math: "^{k}", + text: "\\textsuperscript{k}" + }, + "ᔐ": { + math: "^{m}", + text: "\\textsuperscript{m}" + }, + "á”’": { + math: "^{o}", + text: "\\textsuperscript{o}" + }, + "á”–": { + math: "^{p}", + text: "\\textsuperscript{p}" + }, + "á”—": { + math: "^{t}", + text: "\\textsuperscript{t}" + }, + "ᔘ": { + math: "^{u}", + text: "\\textsuperscript{u}" + }, + "á”›": { + math: "^{v}", + text: "\\textsuperscript{v}" + }, + "ᶜ": { + math: "^{c}", + text: "\\textsuperscript{c}" + }, + "ᶠ": { + math: "^{f}", + text: "\\textsuperscript{f}" + }, + "ᶻ": { + math: "^{z}", + text: "\\textsuperscript{z}" + }, + "ᾂ": { + text: "{\\.B}" + }, + "ឃ": { + text: "{\\.b}" + }, + "ᾄ": { + text: "{\\d B}" + }, + "ᾅ": { + text: "{\\d b}" + }, + "ᾆ": { + text: "{\\b B}" + }, + "ᾇ": { + text: "{\\b b}" + }, + "ᾊ": { + text: "{\\.D}" + }, + "ᾋ": { + text: "{\\.d}" + }, + "ᾌ": { + text: "{\\d D}" + }, + "ឍ": { + text: "{\\d d}" + }, + "ᾎ": { + text: "{\\b D}" + }, + "ត": { + text: "{\\b d}" + }, + "ថ": { + text: "{\\c D}" + }, + "ᾑ": { + text: "{\\c d}" + }, + "ᾜ": { + text: "{\\c{\\u{E}}}" + }, + "ឝ": { + text: "{\\c{\\u{e}}}" + }, + "ᾞ": { + text: "{\\.F}" + }, + "ᾟ": { + text: "{\\.f}" + }, + "áž ": { + text: "{\\=G}" + }, + "ឥ": { + text: "{\\=g}" + }, + "ážą": { + text: "{\\.H}" + }, + "ឣ": { + text: "{\\.h}" + }, + "ក": { + text: "{\\d H}" + }, + "áž„": { + text: "{\\d h}" + }, + "ដ": { + text: "{\\\"H}" + }, + "ឧ": { + text: "{\\\"h}" + }, + "ážš": { + text: "{\\c H}" + }, + "áž©": { + text: "{\\c h}" + }, + "áž°": { + text: "{\\'K}" + }, + "áž±": { + text: "{\\'k}" + }, + "ážČ": { + text: "{\\d K}" + }, + "ážł": { + text: "{\\d k}" + }, + "ណ": { + text: "{\\b K}" + }, + "áž”": { + text: "{\\b k}" + }, + "ា": { + text: "{\\d L}" + }, + "áž·": { + text: "{\\d l}" + }, + "ážș": { + text: "{\\b L}" + }, + "áž»": { + text: "{\\b l}" + }, + "ស": { + text: "{\\'M}" + }, + "ážż": { + text: "{\\'m}" + }, + "áč€": { + text: "{\\.M}" + }, + "áč": { + text: "{\\.m}" + }, + "áč‚": { + text: "{\\d M}" + }, + "áčƒ": { + text: "{\\d m}" + }, + "áč„": { + text: "{\\.N}" + }, + "áč…": { + text: "{\\.n}" + }, + "áč†": { + text: "{\\d N}" + }, + "áč‡": { + text: "{\\d n}" + }, + "áčˆ": { + text: "{\\b N}" + }, + "áč‰": { + text: "{\\b n}" + }, + "áč”": { + text: "{\\'P}" + }, + "áč•": { + text: "{\\'p}" + }, + "áč–": { + text: "{\\.P}" + }, + "áč—": { + text: "{\\.p}" + }, + "áč˜": { + text: "{\\.R}" + }, + "áč™": { + text: "{\\.r}" + }, + "áčš": { + text: "{\\d R}" + }, + "áč›": { + text: "{\\d r}" + }, + "áčž": { + text: "{\\b R}" + }, + "áčŸ": { + text: "{\\b r}" + }, + "áč ": { + text: "{\\.S}" + }, + "áčĄ": { + text: "{\\.s}" + }, + "áčą": { + text: "{\\d S}" + }, + "áčŁ": { + text: "{\\d s}" + }, + "áčȘ": { + text: "{\\.T}" + }, + "áč«": { + text: "{\\.t}" + }, + "áčŹ": { + text: "{\\d T}" + }, + "áč­": { + text: "{\\d t}" + }, + "áčź": { + text: "{\\b T}" + }, + "áčŻ": { + text: "{\\b t}" + }, + "áčŒ": { + text: "{\\~V}" + }, + "áčœ": { + text: "{\\~v}" + }, + "áčŸ": { + text: "{\\d V}" + }, + "áčż": { + text: "{\\d v}" + }, + "áș€": { + text: "{\\`W}" + }, + "áș": { + text: "{\\`w}" + }, + "áș‚": { + text: "{\\'W}" + }, + "áșƒ": { + text: "{\\'w}" + }, + "áș„": { + text: "{\\\"W}" + }, + "áș…": { + text: "{\\\"w}" + }, + "áș†": { + text: "{\\.W}" + }, + "áș‡": { + text: "{\\.w}" + }, + "áșˆ": { + text: "{\\d W}" + }, + "áș‰": { + text: "{\\d w}" + }, + "áșŠ": { + text: "{\\.X}" + }, + "áș‹": { + text: "{\\.x}" + }, + "áșŒ": { + text: "{\\\"X}" + }, + "áș": { + text: "{\\\"x}" + }, + "áșŽ": { + text: "{\\.Y}" + }, + "áș": { + text: "{\\.y}" + }, + "áș": { + text: "{\\^Z}" + }, + "áș‘": { + text: "{\\^z}" + }, + "áș’": { + text: "{\\d Z}" + }, + "áș“": { + text: "{\\d z}" + }, + "áș”": { + text: "{\\b Z}" + }, + "áș•": { + text: "{\\b z}" + }, + "áș–": { + text: "{\\b h}" + }, + "áș—": { + text: "{\\\"t}" + }, + "áș˜": { + text: "{\\r{w}}" + }, + "áș™": { + text: "{\\r{y}}" + }, + "áș ": { + text: "{\\d A}" + }, + "áșĄ": { + text: "{\\d a}" + }, + "áșž": { + text: "{\\d E}" + }, + "áșč": { + text: "{\\d e}" + }, + "áșŒ": { + text: "{\\~E}" + }, + "áșœ": { + text: "{\\~e}" + }, + "Ị": { + text: "{\\d I}" + }, + "ị": { + text: "{\\d i}" + }, + "Ọ": { + text: "{\\d O}" + }, + "ọ": { + text: "{\\d o}" + }, + "Ề": { + text: "{\\d U}" + }, + "Ễ": { + text: "{\\d u}" + }, + "á»Č": { + text: "{\\`Y}" + }, + "ỳ": { + text: "{\\`y}" + }, + "Ỏ": { + text: "{\\d Y}" + }, + "á»”": { + text: "{\\d y}" + }, + "Ở": { + text: "{\\~Y}" + }, + "á»č": { + text: "{\\~y}" + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\quad", + space: true + }, + " ": { + text: "\\hspace{0.6em}", + space: true + }, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" + }, + " ": { + text: "\\;", + space: true + }, + " ": { + text: "\\hspace{0.25em}", + space: true + }, + " ": { + text: "\\hspace{0.166em}", + space: true + }, + " ": { + text: "\\hphantom{0}", + space: true + }, + " ": { + text: "\\hphantom{,}", + space: true + }, + " ": { + text: "\\,", + space: true + }, + " ": { + math: "\\mkern1mu", + space: true + }, + "​": { + text: "{\\mbox}", + space: true + }, + "‌": { + text: "{\\aftergroup\\ignorespaces}" + }, + "‐": { + text: "-" + }, + "‑": { + text: "-" + }, + "‒": { + text: "-" + }, + "–": { + text: "{\\textendash}" + }, + "—": { + text: "{\\textemdash}" + }, + "―": { + math: "\\horizbar", + text: "\\rule{1em}{1pt}" + }, + "‖": { + math: "\\Vert" + }, + "‗": { + math: "\\twolowline" + }, + "‘": { + text: "`" + }, + "’": { + text: "'" + }, + "‚": { + text: "," + }, + "‛": { + math: "\\Elzreapos" + }, + "“": { + text: "``" + }, + "”": { + text: "''" + }, + "„": { + text: ",," + }, + "‟": { + text: "{\\quotedblbase}" + }, + "†": { + math: "\\dagger", + text: "{\\textdagger}", + textpackages: [ + "textcomp" + ] + }, + "‡": { + math: "\\ddagger", + text: "{\\textdaggerdbl}", + textpackages: [ + "textcomp" + ] + }, + "‱": { + math: "\\bullet", + text: "{\\textbullet}", + textpackages: [ + "textcomp" + ] + }, + "‣": { + text: ">" + }, + " ": { + text: "." + }, + " ": { + math: "\\enleadertwodots", + text: ".." + }, + "
": { + math: "\\ldots", + text: "{\\ldots}" + }, + "‧": { + text: "-" + }, + " ": { + text: " ", + space: true + }, + "‰": { + text: "{\\textperthousand}", + textpackages: [ + "textcomp" + ] + }, + "‱": { + text: "{\\textpertenthousand}", + textpackages: [ + "textcomp" + ] + }, + "â€Č": { + math: "{'}" + }, + "″": { + math: "{''}" + }, + "‮": { + math: "{'''}" + }, + "—": { + math: "\\backprime" + }, + "‶": { + math: "\\backdprime" + }, + "‷": { + math: "\\backtrprime" + }, + "‾": { + math: "\\caretinsert" + }, + "â€č": { + text: "{\\guilsinglleft}" + }, + "â€ș": { + text: "{\\guilsinglright}" + }, + "‌": { + math: "\\Exclam" + }, + "‟": { + text: "-" + }, + "⁃": { + math: "\\hyphenbullet" + }, + "⁄": { + math: "\\fracslash" + }, + "⁇": { + math: "\\Question" + }, + "⁈": { + text: "?!" + }, + "⁉": { + text: "!?" + }, + "⁊": { + text: "7" + }, + "⁐": { + math: "\\closure" + }, + "⁗": { + math: "''''" + }, + " ": { + math: "\\:", + space: true, + text: "\\:" + }, + "⁠": { + text: "{\\nolinebreak}" + }, + "⁰": { + math: "^{0}" + }, + "ⁱ": { + math: "^{i}", + text: "\\textsuperscript{i}" + }, + "⁎": { + math: "^{4}" + }, + "⁔": { + math: "^{5}" + }, + "⁶": { + math: "^{6}" + }, + "⁷": { + math: "^{7}" + }, + "⁞": { + math: "^{8}" + }, + "âč": { + math: "^{9}" + }, + "âș": { + math: "^{+}" + }, + "⁻": { + math: "^{-}" + }, + "⁌": { + math: "^{=}" + }, + "⁜": { + math: "^{(}" + }, + " ": { + math: "^{)}" + }, + "ⁿ": { + math: "^{n}", + text: "\\textsuperscript{n}" + }, + "₀": { + math: "_{0}" + }, + "₁": { + math: "_{1}" + }, + "₂": { + math: "_{2}" + }, + "₃": { + math: "_{3}" + }, + "₄": { + math: "_{4}" + }, + "₅": { + math: "_{5}" + }, + "₆": { + math: "_{6}" + }, + "₇": { + math: "_{7}" + }, + "₈": { + math: "_{8}" + }, + "₉": { + math: "_{9}" + }, + "₊": { + math: "_{+}" + }, + "₋": { + math: "_{-}" + }, + "₌": { + math: "_{=}" + }, + "₍": { + math: "_{(}" + }, + "₎": { + math: "_{)}" + }, + "ₐ": { + math: "_{a}", + text: "\\textsubscript{a}" + }, + "ₑ": { + math: "_{e}", + text: "\\textsubscript{e}" + }, + "ₒ": { + math: "_{o}", + text: "\\textsubscript{o}" + }, + "ₓ": { + math: "_{x}", + text: "\\textsubscript{x}" + }, + "ₔ": { + text: "\\textsubscript{\\textschwa}", + textpackages: [ + "tipa" + ] + }, + "ₕ": { + math: "_{h}", + text: "\\textsubscript{h}" + }, + "ₖ": { + math: "_{k}", + text: "\\textsubscript{k}" + }, + "ₗ": { + math: "_{l}", + text: "\\textsubscript{l}" + }, + "ₘ": { + math: "_{m}", + text: "\\textsubscript{m}" + }, + "ₙ": { + math: "_{n}", + text: "\\textsubscript{n}" + }, + "ₚ": { + math: "_{p}", + text: "\\textsubscript{p}" + }, + "ₛ": { + math: "_{s}", + text: "\\textsubscript{s}" + }, + "ₜ": { + math: "_{t}", + text: "\\textsubscript{t}" + }, + "₧": { + text: "\\ensuremath{\\Elzpes}" + }, + "€": { + math: "\\euro", + text: "{\\texteuro}" + }, + "⃐": { + math: "\\lvec" + }, + "⃑": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⃒": { + math: "\\vertoverlay" + }, + "⃖": { + math: "\\LVec" + }, + "⃗": { + math: "\\vec" + }, + "⃛": { + math: "\\dddot" + }, + "⃜": { + math: "\\ddddot" + }, + "⃝": { + math: "\\enclosecircle" + }, + "⃞": { + math: "\\enclosesquare" + }, + "⃟": { + math: "\\enclosediamond" + }, + "⃥": { + math: "\\overleftrightarrow" + }, + "⃀": { + math: "\\enclosetriangle" + }, + "⃧": { + math: "\\annuity" + }, + "⃚": { + math: "\\threeunderdot" + }, + "⃩": { + math: "\\widebridgeabove" + }, + "⃏": { + math: "\\underrightharpoondown" + }, + "⃭": { + math: "\\underleftharpoondown" + }, + "⃟": { + math: "\\underleftarrow" + }, + "⃯": { + math: "\\underrightarrow" + }, + "⃰": { + math: "\\asteraccent" + }, + "℀": { + text: "a/c" + }, + "℁": { + text: "a/s" + }, + "ℂ": { + math: "\\mathbb{C}" + }, + "℃": { + text: "{\\textcelsius}" + }, + "℅": { + text: "c/o" + }, + "℆": { + text: "c/u" + }, + "ℇ": { + math: "\\Euler" + }, + "℉": { + text: "F" + }, + "ℊ": { + math: "\\mathscr{g}" + }, + "ℋ": { + math: "\\mathscr{H}" + }, + "ℌ": { + math: "\\mathfrak{H}" + }, + "ℍ": { + math: "\\mathbb{H}" + }, + "ℎ": { + math: "\\Planckconst" + }, + "ℏ": { + math: "\\hslash" + }, + "ℐ": { + math: "\\mathscr{I}" + }, + "ℑ": { + math: "\\mathfrak{I}" + }, + "ℒ": { + math: "\\mathscr{L}" + }, + "ℓ": { + math: "\\mathscr{l}" + }, + "ℕ": { + math: "\\mathbb{N}" + }, + "№": { + text: "{\\cyrchar\\textnumero}" + }, + "℗": { + text: "{\\textcircledP}" + }, + "℘": { + math: "\\wp" + }, + "ℙ": { + math: "\\mathbb{P}" + }, + "ℚ": { + math: "\\mathbb{Q}" + }, + "ℛ": { + math: "\\mathscr{R}" + }, + "ℜ": { + math: "\\mathfrak{R}" + }, + "ℝ": { + math: "\\mathbb{R}" + }, + "℞": { + math: "\\Elzxrat" + }, + "℠": { + text: "{\\textservicemark}" + }, + "℡": { + text: "TEL" + }, + "ℱ": { + text: "{\\texttrademark}", + textpackages: [ + "textcomp" + ] + }, + "â„€": { + math: "\\mathbb{Z}" + }, + "℩": { + math: "\\Omega" + }, + "℧": { + math: "\\mho" + }, + "ℹ": { + math: "\\mathfrak{Z}" + }, + "℩": { + text: "{\\textriota}" + }, + "â„Ș": { + text: "K" + }, + "Å": { + math: "\\Angstroem", + text: "{\\AA}" + }, + "ℬ": { + math: "\\mathscr{B}" + }, + "ℭ": { + math: "\\mathfrak{C}" + }, + "ℼ": { + text: "{\\textestimated}" + }, + "ℯ": { + math: "\\mathscr{e}" + }, + "ℰ": { + math: "\\mathscr{E}" + }, + "ℱ": { + math: "\\mathscr{F}" + }, + "â„Č": { + math: "\\Finv" + }, + "ℳ": { + math: "\\mathscr{M}" + }, + "℮": { + math: "\\mathscr{o}" + }, + "â„”": { + math: "\\aleph" + }, + "ℶ": { + math: "\\beth" + }, + "ℷ": { + math: "\\gimel" + }, + "ℾ": { + math: "\\daleth" + }, + "â„Œ": { + math: "\\mathbb{\\pi}" + }, + "â„œ": { + math: "\\mathbb{\\gamma}" + }, + "â„Ÿ": { + math: "\\mathbb{\\Gamma}" + }, + "ℿ": { + math: "\\mathbb{\\Pi}" + }, + "⅀": { + math: "\\mathbb{\\Sigma}" + }, + "⅁": { + math: "\\Game" + }, + "⅂": { + math: "\\sansLturned" + }, + "⅃": { + math: "\\sansLmirrored" + }, + "⅄": { + math: "\\Yup" + }, + "ⅅ": { + math: "\\CapitalDifferentialD" + }, + "ⅆ": { + math: "\\DifferentialD" + }, + "ⅇ": { + math: "\\ExponetialE" + }, + "ⅈ": { + math: "\\ComplexI" + }, + "ⅉ": { + math: "\\ComplexJ" + }, + "⅊": { + math: "\\PropertyLine" + }, + "⅋": { + math: "\\invamp" + }, + "⅐": { + math: "\\frac{1}{7}" + }, + "⅑": { + math: "\\frac{1}{9}" + }, + "⅒": { + math: "\\frac{1}{10}" + }, + "⅓": { + math: "\\frac{1}{3}" + }, + "⅔": { + math: "\\frac{2}{3}" + }, + "⅕": { + math: "\\frac{1}{5}" + }, + "⅖": { + math: "\\frac{2}{5}" + }, + "⅗": { + math: "\\frac{3}{5}" + }, + "⅘": { + math: "\\frac{4}{5}" + }, + "⅙": { + math: "\\frac{1}{6}" + }, + "⅚": { + math: "\\frac{5}{6}" + }, + "⅛": { + math: "\\frac{1}{8}" + }, + "⅜": { + math: "\\frac{3}{8}" + }, + "⅝": { + math: "\\frac{5}{8}" + }, + "⅞": { + math: "\\frac{7}{8}" + }, + "⅟": { + math: "\\frac{1}" + }, + "Ⅰ": { + text: "I" + }, + "Ⅱ": { + text: "II" + }, + "ⅱ": { + text: "III" + }, + "Ⅳ": { + text: "IV" + }, + "â…€": { + text: "V" + }, + "â…„": { + text: "VI" + }, + "Ⅹ": { + text: "VII" + }, + "Ⅷ": { + text: "VIII" + }, + "ⅹ": { + text: "IX" + }, + "Ⅹ": { + text: "X" + }, + "â…Ș": { + text: "XI" + }, + "Ⅻ": { + text: "XII" + }, + "Ⅼ": { + text: "L" + }, + "Ⅽ": { + text: "C" + }, + "ⅼ": { + text: "D" + }, + "Ⅿ": { + text: "M" + }, + "ⅰ": { + text: "i" + }, + "ⅱ": { + text: "ii" + }, + "â…Č": { + text: "iii" + }, + "ⅳ": { + text: "iv" + }, + "Ⅾ": { + text: "v" + }, + "â…”": { + text: "vi" + }, + "ⅶ": { + text: "vii" + }, + "ⅷ": { + text: "viii" + }, + "ⅾ": { + text: "ix" + }, + "â…č": { + text: "x" + }, + "â…ș": { + text: "xi" + }, + "ⅻ": { + text: "xii" + }, + "â…Œ": { + text: "l" + }, + "â…œ": { + text: "c" + }, + "â…Ÿ": { + text: "d" + }, + "ⅿ": { + text: "m" + }, + "↉": { + math: "\\frac{0}{3}" + }, + "←": { + math: "\\leftarrow" + }, + "↑": { + math: "\\uparrow" + }, + "→": { + math: "\\rightarrow", + text: "{\\textrightarrow}", + textpackages: [ + "textcomp" + ] + }, + "↓": { + math: "\\downarrow" + }, + "↔": { + math: "\\leftrightarrow" + }, + "↕": { + math: "\\updownarrow" + }, + "↖": { + math: "\\nwarrow" + }, + "↗": { + math: "\\nearrow" + }, + "↘": { + math: "\\searrow" + }, + "↙": { + math: "\\swarrow" + }, + "↚": { + math: "\\nleftarrow" + }, + "↛": { + math: "\\nrightarrow" + }, + "↜": { + math: "\\arrowwaveleft" + }, + "↝": { + math: "\\arrowwaveright" + }, + "↞": { + math: "\\twoheadleftarrow" + }, + "↟": { + math: "\\twoheaduparrow" + }, + "↠": { + math: "\\twoheadrightarrow" + }, + "↡": { + math: "\\twoheaddownarrow" + }, + "↱": { + math: "\\leftarrowtail" + }, + "↣": { + math: "\\rightarrowtail" + }, + "ↀ": { + math: "\\mapsfrom" + }, + "ↄ": { + math: "\\MapsUp" + }, + "↩": { + math: "\\mapsto" + }, + "↧": { + math: "\\MapsDown" + }, + "↹": { + math: "\\updownarrowbar" + }, + "↩": { + math: "\\hookleftarrow" + }, + "â†Ș": { + math: "\\hookrightarrow" + }, + "↫": { + math: "\\looparrowleft" + }, + "↬": { + math: "\\looparrowright" + }, + "↭": { + math: "\\leftrightsquigarrow" + }, + "↼": { + math: "\\nleftrightarrow" + }, + "↯": { + math: "\\lightning" + }, + "↰": { + math: "\\Lsh" + }, + "↱": { + math: "\\Rsh" + }, + "â†Č": { + math: "\\dlsh" + }, + "↳": { + text: "\\reflectbox{\\carriagereturn}", + textpackages: [ + "graphics", + "unicode-math" + ] + }, + "↮": { + math: "\\linefeed" + }, + "↔": { + math: "\\carriagereturn" + }, + "↶": { + math: "\\curvearrowleft" + }, + "↷": { + math: "\\curvearrowright" + }, + "↾": { + math: "\\barovernorthwestarrow" + }, + "â†č": { + math: "\\barleftarrowrightarrowba" + }, + "â†ș": { + math: "\\circlearrowleft" + }, + "↻": { + math: "\\circlearrowright" + }, + "↌": { + math: "\\leftharpoonup" + }, + "↜": { + math: "\\leftharpoondown" + }, + "↟": { + math: "\\upharpoonright" + }, + "↿": { + math: "\\upharpoonleft" + }, + "⇀": { + math: "\\rightharpoonup", + mathpackages: [ + "amsmath", + "amssymb" + ] + }, + "⇁": { + math: "\\rightharpoondown" + }, + "⇂": { + math: "\\downharpoonright" + }, + "⇃": { + math: "\\downharpoonleft" + }, + "⇄": { + math: "\\rightleftarrows" + }, + "⇅": { + math: "\\dblarrowupdown" + }, + "⇆": { + math: "\\leftrightarrows" + }, + "⇇": { + math: "\\leftleftarrows" + }, + "⇈": { + math: "\\upuparrows" + }, + "⇉": { + math: "\\rightrightarrows" + }, + "⇊": { + math: "\\downdownarrows" + }, + "⇋": { + math: "\\leftrightharpoons" + }, + "⇌": { + math: "\\rightleftharpoons" + }, + "⇍": { + math: "\\nLeftarrow" + }, + "⇎": { + math: "\\nLeftrightarrow" + }, + "⇏": { + math: "\\nRightarrow" + }, + "⇐": { + math: "\\Leftarrow" + }, + "⇑": { + math: "\\Uparrow" + }, + "⇒": { + math: "\\Rightarrow" + }, + "⇓": { + math: "\\Downarrow" + }, + "⇔": { + math: "\\Leftrightarrow" + }, + "⇕": { + math: "\\Updownarrow" + }, + "⇖": { + math: "\\Nwarrow" + }, + "⇗": { + math: "\\Nearrow" + }, + "⇘": { + math: "\\Searrow" + }, + "⇙": { + math: "\\Swarrow" + }, + "⇚": { + math: "\\Lleftarrow" + }, + "⇛": { + math: "\\Rrightarrow" + }, + "⇜": { + math: "\\leftsquigarrow" + }, + "⇝": { + math: "\\rightsquigarrow" + }, + "⇞": { + math: "\\nHuparrow" + }, + "⇟": { + math: "\\nHdownarrow" + }, + "⇠": { + math: "\\dashleftarrow" + }, + "⇡": { + math: "\\updasharrow" + }, + "⇱": { + math: "\\dashrightarrow" + }, + "⇣": { + math: "\\downdasharrow" + }, + "⇀": { + math: "\\LeftArrowBar" + }, + "⇄": { + math: "\\RightArrowBar" + }, + "⇩": { + math: "\\leftwhitearrow" + }, + "⇧": { + math: "\\upwhitearrow" + }, + "⇹": { + math: "\\rightwhitearrow" + }, + "⇩": { + math: "\\downwhitearrow" + }, + "â‡Ș": { + math: "\\whitearrowupfrombar" + }, + "⇮": { + math: "\\circleonrightarrow" + }, + "⇔": { + math: "\\DownArrowUpArrow" + }, + "⇶": { + math: "\\rightthreearrows" + }, + "⇷": { + math: "\\nvleftarrow" + }, + "⇾": { + math: "\\pfun" + }, + "â‡č": { + math: "\\nvleftrightarrow" + }, + "â‡ș": { + math: "\\nVleftarrow" + }, + "⇻": { + math: "\\ffun" + }, + "⇌": { + math: "\\nVleftrightarrow" + }, + "⇜": { + math: "\\leftarrowtriangle" + }, + "⇟": { + math: "\\rightarrowtriangle" + }, + "⇿": { + math: "\\leftrightarrowtriangle" + }, + "∀": { + math: "\\forall" + }, + "∁": { + math: "\\complement" + }, + "∂": { + math: "\\partial" + }, + "∃": { + math: "\\exists" + }, + "∄": { + math: "\\nexists" + }, + "∅": { + math: "\\varnothing" + }, + "∆": { + math: "\\increment" + }, + "∇": { + math: "\\nabla" + }, + "∈": { + math: "\\in" + }, + "∉": { + math: "\\not\\in" + }, + "∊": { + math: "\\smallin" + }, + "∋": { + math: "\\ni" + }, + "∌": { + math: "\\not\\ni" + }, + "∍": { + math: "\\smallni" + }, + "∎": { + math: "\\QED" + }, + "∏": { + math: "\\prod" + }, + "∐": { + math: "\\coprod" + }, + "∑": { + math: "\\sum" + }, + "−": { + math: "-", + text: "-" + }, + "∓": { + math: "\\mp" + }, + "∔": { + math: "\\dotplus" + }, + "∕": { + text: "/" + }, + "∖": { + math: "\\setminus" + }, + "∗": { + math: "{_\\ast}" + }, + "∘": { + math: "\\circ" + }, + "∙": { + math: "\\bullet" + }, + "√": { + math: "\\surd" + }, + "∛": { + math: "\\sqrt[3]" + }, + "∜": { + math: "\\sqrt[4]" + }, + "∝": { + math: "\\propto" + }, + "∞": { + math: "\\infty" + }, + "∟": { + math: "\\rightangle" + }, + "∠": { + math: "\\angle" + }, + "∥": { + math: "\\measuredangle" + }, + "∹": { + math: "\\sphericalangle" + }, + "∣": { + math: "\\mid" + }, + "∀": { + math: "\\nmid" + }, + "∄": { + math: "\\parallel" + }, + "∊": { + math: "\\nparallel" + }, + "∧": { + math: "\\wedge" + }, + "√": { + math: "\\vee" + }, + "∩": { + math: "\\cap" + }, + "âˆȘ": { + math: "\\cup" + }, + "∫": { + math: "\\int" + }, + "∏": { + math: "{\\int\\!\\int}" + }, + "∭": { + math: "{\\int\\!\\int\\!\\int}" + }, + "∟": { + math: "\\oint" + }, + "∯": { + math: "\\surfintegral" + }, + "∰": { + math: "\\volintegral" + }, + "∱": { + math: "\\clwintegral" + }, + "âˆČ": { + math: "\\lcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∳": { + math: "\\rcirclerightint", + mathpackages: [ + "MnSymbol" + ] + }, + "∎": { + math: "\\therefore" + }, + "∔": { + math: "\\because" + }, + "∶": { + math: ":" + }, + "∷": { + math: "\\Colon" + }, + "∞": { + math: "\\dotdiv", + mathpackages: [ + "mathabx" + ] + }, + "âˆč": { + math: "\\eqcolon" + }, + "âˆș": { + math: "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}" + }, + "∻": { + math: "\\homothetic" + }, + "∌": { + math: "\\sim" + }, + "∜": { + math: "\\backsim" + }, + "∟": { + math: "\\lazysinv" + }, + "∿": { + math: "\\AC" + }, + "≀": { + math: "\\wr" + }, + "≁": { + math: "\\not\\sim" + }, + "≂": { + math: "\\texteqsim", + mathpackages: [ + "xecjk" + ] + }, + "≂̞": { + math: "\\NotEqualTilde" + }, + "≃": { + math: "\\simeq" + }, + "≄": { + math: "\\not\\simeq" + }, + "≅": { + math: "\\cong" + }, + "≆": { + math: "\\approxnotequal" + }, + "≇": { + math: "\\not\\cong" + }, + "≈": { + math: "\\approx" + }, + "≉": { + math: "\\not\\approx" + }, + "≊": { + math: "\\approxeq" + }, + "≋": { + math: "\\tildetrpl" + }, + "≋̞": { + math: "\\not\\apid" + }, + "≌": { + math: "\\allequal" + }, + "≍": { + math: "\\asymp" + }, + "≎": { + math: "\\Bumpeq" + }, + "≎̞": { + math: "\\NotHumpDownHump" + }, + "≏": { + math: "\\bumpeq" + }, + "≏̞": { + math: "\\NotHumpEqual" + }, + "≐": { + math: "\\doteq" + }, + "≐̞": { + math: "\\not\\doteq" + }, + "≑": { + math: "\\doteqdot" + }, + "≒": { + math: "\\fallingdotseq" + }, + "≓": { + math: "\\risingdotseq" + }, + "≔": { + math: "\\coloneq", + text: ":=" + }, + "≕": { + math: "=:" + }, + "≖": { + math: "\\eqcirc" + }, + "≗": { + math: "\\circeq" + }, + "≘": { + math: "\\arceq" + }, + "≙": { + math: "\\estimates" + }, + "≛": { + math: "\\starequal" + }, + "≜": { + math: "\\triangleq" + }, + "≝": { + math: "\\eqdef" + }, + "≞": { + math: "\\measeq" + }, + "≠": { + math: "\\neq" + }, + "≡": { + math: "\\equiv" + }, + "≱": { + math: "\\not\\equiv" + }, + "≣": { + math: "\\Equiv" + }, + "≀": { + math: "\\leq" + }, + "≄": { + math: "\\geq" + }, + "≩": { + math: "\\leqq" + }, + "≧": { + math: "\\geqq" + }, + "≹": { + math: "\\lneqq" + }, + "≚": { + math: "\\lvertneqq" + }, + "≩": { + math: "\\gneqq" + }, + "≩": { + math: "\\gvertneqq" + }, + "â‰Ș": { + math: "\\ll" + }, + "â‰ȘÌž": { + math: "\\NotLessLess" + }, + "≫": { + math: "\\gg" + }, + "≫̞": { + math: "\\NotGreaterGreater" + }, + "≬": { + math: "\\between" + }, + "≭": { + math: "{\\not\\kern-0.3em\\times}" + }, + "≼": { + math: "\\not<" + }, + "≯": { + math: "\\not>" + }, + "≰": { + math: "\\not\\leq" + }, + "≱": { + math: "\\not\\geq" + }, + "â‰Č": { + math: "\\lessequivlnt" + }, + "≳": { + math: "\\greaterequivlnt" + }, + "≶": { + math: "\\lessgtr" + }, + "≷": { + math: "\\gtrless" + }, + "≾": { + math: "\\notlessgreater" + }, + "â‰č": { + math: "\\notgreaterless" + }, + "â‰ș": { + math: "\\prec" + }, + "≻": { + math: "\\succ" + }, + "≌": { + math: "\\preccurlyeq" + }, + "≜": { + math: "\\succcurlyeq" + }, + "≟": { + math: "\\precapprox" + }, + "≟̞": { + math: "\\NotPrecedesTilde" + }, + "≿": { + math: "\\succapprox" + }, + "â‰żÌž": { + math: "\\NotSucceedsTilde" + }, + "⊀": { + math: "\\not\\prec" + }, + "⊁": { + math: "\\not\\succ" + }, + "⊂": { + math: "\\subset" + }, + "⊃": { + math: "\\supset" + }, + "⊄": { + math: "\\not\\subset" + }, + "⊅": { + math: "\\not\\supset" + }, + "⊆": { + math: "\\subseteq" + }, + "⊇": { + math: "\\supseteq" + }, + "⊈": { + math: "\\not\\subseteq" + }, + "⊉": { + math: "\\not\\supseteq" + }, + "⊊": { + math: "\\subsetneq" + }, + "⊊": { + math: "\\varsubsetneqq" + }, + "⊋": { + math: "\\supsetneq" + }, + "⊋": { + math: "\\varsupsetneq" + }, + "⊌": { + math: "\\cupleftarrow" + }, + "⊍": { + math: "\\cupdot" + }, + "⊎": { + math: "\\uplus" + }, + "⊏": { + math: "\\sqsubset" + }, + "⊏̞": { + math: "\\NotSquareSubset" + }, + "⊐": { + math: "\\sqsupset" + }, + "⊐̞": { + math: "\\NotSquareSuperset" + }, + "⊑": { + math: "\\sqsubseteq" + }, + "⊒": { + math: "\\sqsupseteq" + }, + "⊓": { + math: "\\sqcap" + }, + "⊔": { + math: "\\sqcup" + }, + "⊕": { + math: "\\oplus" + }, + "⊖": { + math: "\\ominus" + }, + "⊗": { + math: "\\otimes" + }, + "⊘": { + math: "\\oslash" + }, + "⊙": { + math: "\\odot" + }, + "⊚": { + math: "\\circledcirc" + }, + "⊛": { + math: "\\circledast" + }, + "⊜": { + math: "\\circledequal" + }, + "⊝": { + math: "\\circleddash" + }, + "⊞": { + math: "\\boxplus" + }, + "⊟": { + math: "\\boxminus" + }, + "⊠": { + math: "\\boxtimes" + }, + "⊡": { + math: "\\boxdot" + }, + "⊱": { + math: "\\vdash" + }, + "⊣": { + math: "\\dashv" + }, + "⊀": { + math: "\\top" + }, + "⊄": { + math: "\\perp" + }, + "⊩": { + math: "\\assert" + }, + "⊧": { + math: "\\truestate" + }, + "⊹": { + math: "\\forcesextra" + }, + "⊩": { + math: "\\Vdash" + }, + "âŠȘ": { + math: "\\Vvdash" + }, + "⊫": { + math: "\\VDash" + }, + "⊬": { + math: "\\nvdash" + }, + "⊭": { + math: "\\nvDash" + }, + "⊼": { + math: "\\nVdash" + }, + "⊯": { + math: "\\nVDash" + }, + "⊰": { + math: "\\prurel" + }, + "⊱": { + math: "\\scurel" + }, + "âŠČ": { + math: "\\vartriangleleft" + }, + "⊳": { + math: "\\vartriangleright" + }, + "⊮": { + math: "\\trianglelefteq" + }, + "⊔": { + math: "\\trianglerighteq" + }, + "⊶": { + math: "\\original" + }, + "⊷": { + math: "\\image" + }, + "⊾": { + math: "\\multimap" + }, + "âŠč": { + math: "\\hermitconjmatrix" + }, + "âŠș": { + math: "\\intercal" + }, + "⊻": { + math: "\\veebar" + }, + "⊌": { + math: "\\barwedge" + }, + "⊜": { + math: "\\barvee" + }, + "⊟": { + math: "\\rightanglearc" + }, + "⊿": { + math: "\\varlrtriangle" + }, + "⋂": { + math: "\\bigcap" + }, + "⋃": { + math: "\\bigcup" + }, + "⋄": { + math: "\\diamond" + }, + "⋅": { + math: "\\cdot" + }, + "⋆": { + math: "\\star" + }, + "⋇": { + math: "\\divideontimes" + }, + "⋈": { + math: "\\bowtie" + }, + "⋉": { + math: "\\ltimes" + }, + "⋊": { + math: "\\rtimes" + }, + "⋋": { + math: "\\leftthreetimes" + }, + "⋌": { + math: "\\rightthreetimes" + }, + "⋍": { + math: "\\backsimeq" + }, + "⋎": { + math: "\\curlyvee" + }, + "⋏": { + math: "\\curlywedge" + }, + "⋐": { + math: "\\Subset" + }, + "⋑": { + math: "\\Supset" + }, + "⋒": { + math: "\\Cap" + }, + "⋓": { + math: "\\Cup" + }, + "⋔": { + math: "\\pitchfork" + }, + "⋕": { + math: "\\hash" + }, + "⋖": { + math: "\\lessdot" + }, + "⋗": { + math: "\\gtrdot" + }, + "⋘": { + math: "\\verymuchless" + }, + "⋙": { + math: "\\verymuchgreater" + }, + "⋚": { + math: "\\lesseqgtr" + }, + "⋛": { + math: "\\gtreqless" + }, + "⋜": { + math: "\\eqless" + }, + "⋝": { + math: "\\eqgtr" + }, + "⋞": { + math: "\\curlyeqprec" + }, + "⋟": { + math: "\\curlyeqsucc" + }, + "⋠": { + math: "\\npreceq" + }, + "⋡": { + math: "\\nsucceq" + }, + "⋱": { + math: "\\not\\sqsubseteq" + }, + "⋣": { + math: "\\not\\sqsupseteq" + }, + "â‹€": { + math: "\\sqsubsetneq" + }, + "â‹„": { + math: "\\Elzsqspne" + }, + "⋩": { + math: "\\lnsim" + }, + "⋧": { + math: "\\gnsim" + }, + "⋹": { + math: "\\precedesnotsimilar" + }, + "⋩": { + math: "\\succnsim" + }, + "â‹Ș": { + math: "\\ntriangleleft" + }, + "⋫": { + math: "\\ntriangleright" + }, + "⋬": { + math: "\\ntrianglelefteq" + }, + "⋭": { + math: "\\ntrianglerighteq" + }, + "⋼": { + math: "\\vdots" + }, + "⋯": { + math: "\\cdots" + }, + "⋰": { + math: "\\upslopeellipsis" + }, + "⋱": { + math: "\\downslopeellipsis" + }, + "â‹Č": { + math: "\\disin" + }, + "⋳": { + math: "\\varisins" + }, + "⋮": { + math: "\\isins" + }, + "â‹”": { + math: "\\isindot" + }, + "⋶": { + math: "\\barin" + }, + "⋷": { + math: "\\isinobar" + }, + "⋾": { + math: "\\isinvb" + }, + "â‹č": { + math: "\\isinE" + }, + "â‹ș": { + math: "\\nisd" + }, + "⋻": { + math: "\\varnis" + }, + "â‹Œ": { + math: "\\nis" + }, + "â‹œ": { + math: "\\varniobar" + }, + "â‹Ÿ": { + math: "\\niobar" + }, + "⋿": { + math: "\\bagmember" + }, + "⌀": { + math: "\\diameter" + }, + "⌂": { + math: "\\house" + }, + "⌅": { + math: "\\varbarwedge", + text: "{\\barwedge}" + }, + "⌆": { + math: "\\perspcorrespond" + }, + "⌈": { + math: "\\lceil" + }, + "⌉": { + math: "\\rceil" + }, + "⌊": { + math: "\\lfloor" + }, + "⌋": { + math: "\\rfloor" + }, + "⌐": { + math: "\\invneg" + }, + "⌑": { + math: "\\wasylozenge" + }, + "⌒": { + math: "\\profline" + }, + "⌓": { + math: "\\profsurf" + }, + "⌕": { + math: "\\recorder" + }, + "⌖": { + math: "{\\mathchar\"2208}" + }, + "⌗": { + math: "\\viewdata" + }, + "⌙": { + math: "\\turnednot" + }, + "⌜": { + math: "\\ulcorner" + }, + "⌝": { + math: "\\urcorner" + }, + "⌞": { + math: "\\llcorner" + }, + "⌟": { + math: "\\lrcorner" + }, + "⌠": { + math: "\\inttop" + }, + "⌡": { + math: "\\intbottom" + }, + "⌱": { + math: "\\frown" + }, + "⌣": { + math: "\\smile" + }, + "〈": { + math: "\\langle" + }, + "âŒȘ": { + math: "\\rangle" + }, + "⌬": { + math: "\\varhexagonlrbonds" + }, + "âŒČ": { + math: "\\conictaper" + }, + "⌶": { + math: "\\topbot" + }, + "âŒč": { + math: "\\APLinv" + }, + "⌿": { + math: "\\notslash" + }, + "⍀": { + math: "\\notbackslash" + }, + "⍇": { + math: "\\APLleftarrowbox" + }, + "⍈": { + math: "\\APLrightarrowbox" + }, + "⍉": { + math: "\\invdiameter" + }, + "⍐": { + math: "\\APLuparrowbox" + }, + "⍓": { + math: "\\APLboxupcaret" + }, + "⍗": { + math: "\\APLdownarrowbox" + }, + "⍝": { + math: "\\APLcomment" + }, + "⍞": { + math: "\\APLinput" + }, + "⍟": { + math: "\\APLlog" + }, + "⍰": { + math: "\\APLboxquestion" + }, + "⍌": { + math: "\\rangledownzigzagarrow" + }, + "⎔": { + math: "\\hexagon" + }, + "⎛": { + math: "\\lparenuend" + }, + "⎜": { + math: "\\lparenextender" + }, + "⎝": { + math: "\\lparenlend" + }, + "⎞": { + math: "\\rparenuend" + }, + "⎟": { + math: "\\rparenextender" + }, + "⎠": { + math: "\\rparenlend" + }, + "⎡": { + math: "\\lbrackuend" + }, + "⎱": { + math: "\\lbrackextender" + }, + "⎣": { + math: "\\Elzdlcorn" + }, + "⎀": { + math: "\\rbrackuend" + }, + "⎄": { + math: "\\rbrackextender" + }, + "⎊": { + math: "\\rbracklend" + }, + "⎧": { + math: "\\lbraceuend" + }, + "⎚": { + math: "\\lbracemid" + }, + "⎩": { + math: "\\lbracelend" + }, + "âŽȘ": { + math: "\\vbraceextender" + }, + "⎫": { + math: "\\rbraceuend" + }, + "⎬": { + math: "\\rbracemid" + }, + "⎭": { + math: "\\rbracelend" + }, + "⎼": { + math: "\\intextender" + }, + "⎯": { + math: "\\harrowextender" + }, + "⎰": { + math: "\\lmoustache" + }, + "⎱": { + math: "\\rmoustache" + }, + "âŽČ": { + math: "\\sumtop" + }, + "⎳": { + math: "\\sumbottom" + }, + "⎮": { + math: "\\overbracket" + }, + "⎔": { + math: "\\underbracket" + }, + "⎶": { + math: "\\bbrktbrk" + }, + "⎷": { + math: "\\sqrtbottom" + }, + "⎾": { + math: "\\lvboxline" + }, + "âŽč": { + math: "\\rvboxline" + }, + "⏎": { + math: "\\varcarriagereturn" + }, + "⏜": { + math: "\\overparen" + }, + "⏝": { + math: "\\underparen" + }, + "⏞": { + math: "\\overbrace" + }, + "⏟": { + math: "\\underbrace" + }, + "⏠": { + math: "\\obrbrak" + }, + "⏡": { + math: "\\ubrbrak" + }, + "⏱": { + math: "\\trapezium" + }, + "⏣": { + math: "\\benzenr" + }, + "⏀": { + math: "\\strns" + }, + "⏄": { + math: "\\fltns" + }, + "⏊": { + math: "\\accurrent" + }, + "⏧": { + math: "\\elinters" + }, + "␀": { + text: "NUL" + }, + "␁": { + text: "SOH" + }, + "␂": { + text: "STX" + }, + "␃": { + text: "ETX" + }, + "␄": { + text: "EOT" + }, + "␅": { + text: "ENQ" + }, + "␆": { + text: "ACK" + }, + "␇": { + text: "BEL" + }, + "␈": { + text: "BS" + }, + "␉": { + text: "HT" + }, + "␊": { + text: "LF" + }, + "␋": { + text: "VT" + }, + "␌": { + text: "FF" + }, + "␍": { + text: "CR" + }, + "␎": { + text: "SO" + }, + "␏": { + text: "SI" + }, + "␐": { + text: "DLE" + }, + "␑": { + text: "DC1" + }, + "␒": { + text: "DC2" + }, + "␓": { + text: "DC3" + }, + "␔": { + text: "DC4" + }, + "␕": { + text: "NAK" + }, + "␖": { + text: "SYN" + }, + "␗": { + text: "ETB" + }, + "␘": { + text: "CAN" + }, + "␙": { + text: "EM" + }, + "␚": { + text: "SUB" + }, + "␛": { + text: "ESC" + }, + "␜": { + text: "FS" + }, + "␝": { + text: "GS" + }, + "␞": { + text: "RS" + }, + "␟": { + text: "US" + }, + "␠": { + text: "SP" + }, + "␥": { + text: "DEL" + }, + "␣": { + text: "{\\textvisiblespace}" + }, + "␀": { + text: "NL" + }, + "␄": { + text: "///" + }, + "␊": { + text: "?" + }, + "①": { + text: "\\ding{172}" + }, + "②": { + text: "\\ding{173}" + }, + "⑱": { + text: "\\ding{174}" + }, + "④": { + text: "\\ding{175}" + }, + "â‘€": { + text: "\\ding{176}" + }, + "â‘„": { + text: "\\ding{177}" + }, + "⑩": { + text: "\\ding{178}" + }, + "⑧": { + text: "\\ding{179}" + }, + "⑹": { + text: "\\ding{180}" + }, + "⑩": { + text: "\\ding{181}" + }, + "â‘Ș": { + text: "(11)" + }, + "⑫": { + text: "(12)" + }, + "⑬": { + text: "(13)" + }, + "⑭": { + text: "(14)" + }, + "⑼": { + text: "(15)" + }, + "⑯": { + text: "(16)" + }, + "⑰": { + text: "(17)" + }, + "⑱": { + text: "(18)" + }, + "â‘Č": { + text: "(19)" + }, + "⑳": { + text: "(20)" + }, + "⑮": { + text: "(1)" + }, + "â‘”": { + text: "(2)" + }, + "⑶": { + text: "(3)" + }, + "⑷": { + text: "(4)" + }, + "⑾": { + text: "(5)" + }, + "â‘č": { + text: "(6)" + }, + "â‘ș": { + text: "(7)" + }, + "⑻": { + text: "(8)" + }, + "â‘Œ": { + text: "(9)" + }, + "â‘œ": { + text: "(10)" + }, + "â‘Ÿ": { + text: "(11)" + }, + "⑿": { + text: "(12)" + }, + "⒀": { + text: "(13)" + }, + "⒁": { + text: "(14)" + }, + "⒂": { + text: "(15)" + }, + "⒃": { + text: "(16)" + }, + "⒄": { + text: "(17)" + }, + "⒅": { + text: "(18)" + }, + "⒆": { + text: "(19)" + }, + "⒇": { + text: "(20)" + }, + "⒈": { + text: "1." + }, + "⒉": { + text: "2." + }, + "⒊": { + text: "3." + }, + "⒋": { + text: "4." + }, + "⒌": { + text: "5." + }, + "⒍": { + text: "6." + }, + "⒎": { + text: "7." + }, + "⒏": { + text: "8." + }, + "⒐": { + text: "9." + }, + "⒑": { + text: "10." + }, + "⒒": { + text: "11." + }, + "⒓": { + text: "12." + }, + "⒔": { + text: "13." + }, + "⒕": { + text: "14." + }, + "⒖": { + text: "15." + }, + "⒗": { + text: "16." + }, + "⒘": { + text: "17." + }, + "⒙": { + text: "18." + }, + "⒚": { + text: "19." + }, + "⒛": { + text: "20." + }, + "⒜": { + text: "(a)" + }, + "⒝": { + text: "(b)" + }, + "⒞": { + text: "(c)" + }, + "⒟": { + text: "(d)" + }, + "⒠": { + text: "(e)" + }, + "⒡": { + text: "(f)" + }, + "⒱": { + text: "(g)" + }, + "⒣": { + text: "(h)" + }, + "â’€": { + text: "(i)" + }, + "â’„": { + text: "(j)" + }, + "⒩": { + text: "(k)" + }, + "⒧": { + text: "(l)" + }, + "Ⓓ": { + text: "(m)" + }, + "⒩": { + text: "(n)" + }, + "â’Ș": { + text: "(o)" + }, + "⒫": { + text: "(p)" + }, + "⒬": { + text: "(q)" + }, + "⒭": { + text: "(r)" + }, + "Ⓖ": { + text: "(s)" + }, + "⒯": { + text: "(t)" + }, + "⒰": { + text: "(u)" + }, + "⒱": { + text: "(v)" + }, + "â’Č": { + text: "(w)" + }, + "⒳": { + text: "(x)" + }, + "⒮": { + text: "(y)" + }, + "â’”": { + text: "(z)" + }, + "Ⓐ": { + text: "(A)" + }, + "Ⓑ": { + text: "(B)" + }, + "Ⓘ": { + text: "(C)" + }, + "â’č": { + text: "(D)" + }, + "â’ș": { + text: "(E)" + }, + "Ⓕ": { + text: "(F)" + }, + "â’Œ": { + text: "(G)" + }, + "â’œ": { + text: "(H)" + }, + "â’Ÿ": { + text: "(I)" + }, + "Ⓙ": { + text: "(J)" + }, + "Ⓚ": { + text: "(K)" + }, + "Ⓛ": { + text: "(L)" + }, + "Ⓜ": { + text: "(M)" + }, + "Ⓝ": { + text: "(N)" + }, + "Ⓞ": { + text: "(O)" + }, + "Ⓟ": { + text: "(P)" + }, + "Ⓠ": { + text: "(Q)" + }, + "Ⓡ": { + text: "(R)" + }, + "Ⓢ": { + math: "\\circledS" + }, + "Ⓣ": { + text: "(T)" + }, + "Ⓤ": { + text: "(U)" + }, + "Ⓥ": { + text: "(V)" + }, + "Ⓦ": { + text: "(W)" + }, + "Ⓧ": { + text: "(X)" + }, + "Ⓨ": { + text: "(Y)" + }, + "Ⓩ": { + text: "(Z)" + }, + "ⓐ": { + text: "(a)" + }, + "ⓑ": { + text: "(b)" + }, + "ⓒ": { + text: "(c)" + }, + "ⓓ": { + text: "(d)" + }, + "ⓔ": { + text: "(e)" + }, + "ⓕ": { + text: "(f)" + }, + "ⓖ": { + text: "(g)" + }, + "ⓗ": { + text: "(h)" + }, + "ⓘ": { + text: "(i)" + }, + "ⓙ": { + text: "(j)" + }, + "ⓚ": { + text: "(k)" + }, + "ⓛ": { + text: "(l)" + }, + "ⓜ": { + text: "(m)" + }, + "ⓝ": { + text: "(n)" + }, + "ⓞ": { + text: "(o)" + }, + "ⓟ": { + text: "(p)" + }, + "ⓠ": { + text: "(q)" + }, + "ⓡ": { + text: "(r)" + }, + "⓱": { + text: "(s)" + }, + "ⓣ": { + text: "(t)" + }, + "â“€": { + text: "(u)" + }, + "â“„": { + text: "(v)" + }, + "ⓩ": { + text: "(w)" + }, + "ⓧ": { + text: "(x)" + }, + "⓹": { + text: "(y)" + }, + "ⓩ": { + text: "(z)" + }, + "â“Ș": { + text: "(0)" + }, + "─": { + text: "-" + }, + "━": { + text: "=" + }, + "│": { + text: "|" + }, + "┃": { + text: "|" + }, + "┄": { + text: "-" + }, + "┅": { + text: "=" + }, + "┆": { + math: "\\Elzdshfnc" + }, + "┇": { + text: "|" + }, + "┈": { + text: "-" + }, + "┉": { + text: "=" + }, + "┊": { + text: "|" + }, + "┋": { + text: "|" + }, + "┌": { + text: "+" + }, + "┍": { + text: "+" + }, + "┎": { + text: "+" + }, + "┏": { + text: "+" + }, + "┐": { + text: "+" + }, + "┑": { + text: "+" + }, + "┒": { + text: "+" + }, + "┓": { + text: "+" + }, + "└": { + text: "+" + }, + "┕": { + text: "+" + }, + "┖": { + text: "+" + }, + "┗": { + text: "+" + }, + "┘": { + text: "+" + }, + "┙": { + math: "\\Elzsqfnw" + }, + "┚": { + text: "+" + }, + "┛": { + text: "+" + }, + "├": { + text: "+" + }, + "┝": { + text: "+" + }, + "┞": { + text: "+" + }, + "┟": { + text: "+" + }, + "┠": { + text: "+" + }, + "┡": { + text: "+" + }, + "┱": { + text: "+" + }, + "┣": { + text: "+" + }, + "─": { + text: "+" + }, + "┄": { + text: "+" + }, + "┩": { + text: "+" + }, + "┧": { + text: "+" + }, + "┹": { + text: "+" + }, + "┩": { + text: "+" + }, + "â”Ș": { + text: "+" + }, + "┫": { + text: "+" + }, + "┬": { + text: "+" + }, + "┭": { + text: "+" + }, + "┼": { + text: "+" + }, + "┯": { + text: "+" + }, + "┰": { + text: "+" + }, + "┱": { + text: "+" + }, + "â”Č": { + text: "+" + }, + "┳": { + text: "+" + }, + "┮": { + text: "+" + }, + "â””": { + text: "+" + }, + "┶": { + text: "+" + }, + "┷": { + text: "+" + }, + "┾": { + text: "+" + }, + "â”č": { + text: "+" + }, + "â”ș": { + text: "+" + }, + "┻": { + text: "+" + }, + "┌": { + text: "+" + }, + "├": { + text: "+" + }, + "┟": { + text: "+" + }, + "┿": { + text: "+" + }, + "╀": { + text: "+" + }, + "╁": { + text: "+" + }, + "╂": { + text: "+" + }, + "╃": { + text: "+" + }, + "╄": { + text: "+" + }, + "╅": { + text: "+" + }, + "╆": { + text: "+" + }, + "╇": { + text: "+" + }, + "╈": { + text: "+" + }, + "╉": { + text: "+" + }, + "╊": { + text: "+" + }, + "╋": { + text: "+" + }, + "╌": { + text: "-" + }, + "╍": { + text: "=" + }, + "╎": { + text: "|" + }, + "╏": { + text: "|" + }, + "═": { + text: "=" + }, + "║": { + text: "|" + }, + "╒": { + text: "+" + }, + "╓": { + text: "+" + }, + "╔": { + text: "+" + }, + "╕": { + text: "+" + }, + "╖": { + text: "+" + }, + "╗": { + text: "+" + }, + "╘": { + text: "+" + }, + "╙": { + text: "+" + }, + "╚": { + text: "+" + }, + "╛": { + text: "+" + }, + "╜": { + text: "+" + }, + "╝": { + text: "+" + }, + "╞": { + text: "+" + }, + "╟": { + text: "+" + }, + "╠": { + text: "+" + }, + "╡": { + text: "+" + }, + "╱": { + text: "+" + }, + "╣": { + text: "+" + }, + "â•€": { + text: "+" + }, + "â•„": { + text: "+" + }, + "╩": { + text: "+" + }, + "╧": { + text: "+" + }, + "╹": { + text: "+" + }, + "╩": { + text: "+" + }, + "â•Ș": { + text: "+" + }, + "╫": { + text: "+" + }, + "╬": { + text: "+" + }, + "╭": { + text: "+" + }, + "╼": { + text: "+" + }, + "╯": { + text: "+" + }, + "╰": { + text: "+" + }, + "╱": { + math: "\\diagup" + }, + "â•Č": { + text: "\\" + }, + "╳": { + text: "X" + }, + "â•Œ": { + text: "-" + }, + "â•œ": { + text: "|" + }, + "â•Ÿ": { + text: "-" + }, + "╿": { + text: "|" + }, + "▀": { + math: "\\blockuphalf" + }, + "▄": { + math: "\\blocklowhalf" + }, + "█": { + math: "\\blockfull" + }, + "▌": { + math: "\\blocklefthalf" + }, + "▐": { + math: "\\blockrighthalf" + }, + "░": { + math: "\\blockqtrshaded" + }, + "▒": { + math: "\\blockhalfshaded" + }, + "▓": { + math: "\\blockthreeqtrshaded" + }, + "■": { + math: "\\mdlgblksquare", + text: "\\ding{110}" + }, + "□": { + math: "\\square" + }, + "▱": { + math: "\\squoval" + }, + "▣": { + math: "\\blackinwhitesquare" + }, + "â–€": { + math: "\\squarehfill" + }, + "â–„": { + math: "\\squarevfill" + }, + "▩": { + math: "\\squarehvfill" + }, + "▧": { + math: "\\squarenwsefill" + }, + "▹": { + math: "\\squareneswfill" + }, + "▩": { + math: "\\squarecrossfill" + }, + "â–Ș": { + math: "\\blacksquare" + }, + "▫": { + math: "\\smwhtsquare" + }, + "▬": { + math: "\\hrectangleblack" + }, + "▭": { + math: "\\fbox{~~}" + }, + "▼": { + math: "\\vrectangleblack" + }, + "▯": { + math: "\\Elzvrecto" + }, + "▰": { + math: "\\parallelogramblack" + }, + "â–Č": { + math: "\\bigblacktriangleup", + text: "\\ding{115}" + }, + "△": { + math: "\\bigtriangleup" + }, + "▮": { + math: "\\blacktriangle" + }, + "â–”": { + math: "\\vartriangle" + }, + "▶": { + math: "\\RHD" + }, + "▷": { + math: "\\rhd" + }, + "▾": { + math: "\\blacktriangleright" + }, + "â–č": { + math: "\\triangleright" + }, + "â–ș": { + math: "\\blackpointerright" + }, + "▻": { + math: "\\whitepointerright" + }, + "â–Œ": { + math: "\\bigblacktriangledown", + text: "\\ding{116}" + }, + "â–œ": { + math: "\\bigtriangledown" + }, + "â–Ÿ": { + math: "\\blacktriangledown" + }, + "▿": { + math: "\\triangledown" + }, + "◀": { + math: "\\LHD" + }, + "◁": { + math: "\\lhd" + }, + "◂": { + math: "\\blacktriangleleft" + }, + "◃": { + math: "\\triangleleft" + }, + "◄": { + math: "\\blackpointerleft" + }, + "◅": { + math: "\\whitepointerleft" + }, + "◆": { + math: "\\Diamondblack", + text: "\\ding{117}" + }, + "◇": { + math: "\\Diamond" + }, + "◈": { + math: "\\blackinwhitediamond" + }, + "◉": { + math: "\\fisheye" + }, + "◊": { + math: "\\lozenge" + }, + "○": { + math: "\\bigcirc" + }, + "◌": { + math: "\\dottedcircle" + }, + "◍": { + math: "\\circlevertfill" + }, + "◎": { + math: "\\bullseye" + }, + "●": { + math: "\\CIRCLE", + text: "\\ding{108}" + }, + "◐": { + math: "\\Elzcirfl" + }, + "◑": { + math: "\\Elzcirfr" + }, + "◒": { + math: "\\Elzcirfb" + }, + "◓": { + math: "\\circletophalfblack" + }, + "◔": { + math: "\\circleurquadblack" + }, + "◕": { + math: "\\blackcircleulquadwhite" + }, + "◖": { + math: "\\LEFTCIRCLE" + }, + "◗": { + math: "\\RIGHTCIRCLE", + text: "\\ding{119}" + }, + "◘": { + math: "\\Elzrvbull" + }, + "◙": { + math: "\\inversewhitecircle" + }, + "◚": { + math: "\\invwhiteupperhalfcircle" + }, + "◛": { + math: "\\invwhitelowerhalfcircle" + }, + "◜": { + math: "\\ularc" + }, + "◝": { + math: "\\urarc" + }, + "◞": { + math: "\\lrarc" + }, + "◟": { + math: "\\llarc" + }, + "◠": { + math: "\\topsemicircle" + }, + "◡": { + math: "\\botsemicircle" + }, + "◱": { + math: "\\lrblacktriangle" + }, + "◣": { + math: "\\llblacktriangle" + }, + "â—€": { + math: "\\ulblacktriangle" + }, + "â—„": { + math: "\\urblacktriangle" + }, + "◩": { + math: "\\smwhtcircle" + }, + "◧": { + math: "\\Elzsqfl" + }, + "◹": { + math: "\\Elzsqfr" + }, + "◩": { + math: "\\squareulblack" + }, + "â—Ș": { + math: "\\Elzsqfse" + }, + "◫": { + math: "\\boxbar" + }, + "◬": { + math: "\\trianglecdot" + }, + "◭": { + math: "\\triangleleftblack" + }, + "◼": { + math: "\\trianglerightblack" + }, + "◯": { + math: "\\bigcirc" + }, + "◰": { + math: "\\squareulquad" + }, + "◱": { + math: "\\squarellquad" + }, + "â—Č": { + math: "\\squarelrquad" + }, + "◳": { + math: "\\squareurquad" + }, + "◮": { + math: "\\circleulquad" + }, + "â—”": { + math: "\\circlellquad" + }, + "◶": { + math: "\\circlelrquad" + }, + "◷": { + math: "\\circleurquad" + }, + "◾": { + math: "\\ultriangle" + }, + "â—č": { + math: "\\urtriangle" + }, + "â—ș": { + math: "\\lltriangle" + }, + "◻": { + math: "\\square" + }, + "â—Œ": { + math: "\\blacksquare" + }, + "â—œ": { + math: "\\mdsmwhtsquare" + }, + "â—Ÿ": { + math: "\\mdsmblksquare" + }, + "◿": { + math: "\\lrtriangle" + }, + "★": { + math: "\\bigstar", + text: "\\ding{72}" + }, + "☆": { + math: "\\bigwhitestar", + text: "\\ding{73}" + }, + "☉": { + math: "\\Sun" + }, + "☎": { + text: "\\ding{37}" + }, + "☐": { + math: "\\Square" + }, + "☑": { + math: "\\CheckedBox" + }, + "☒": { + math: "\\XBox" + }, + "☓": { + text: "X" + }, + "☕": { + math: "\\steaming" + }, + "☛": { + text: "\\ding{42}" + }, + "☞": { + math: "\\pointright", + text: "\\ding{43}" + }, + "☠": { + math: "\\skull" + }, + "☥": { + math: "\\danger" + }, + "☹": { + math: "\\radiation" + }, + "☣": { + math: "\\biohazard" + }, + "☯": { + math: "\\yinyang" + }, + "â˜č": { + math: "\\frownie" + }, + "â˜ș": { + math: "\\smiley" + }, + "☻": { + math: "\\blacksmiley" + }, + "☌": { + math: "\\sun" + }, + "☜": { + text: "{\\rightmoon}", + textpackages: [ + "wasysym" + ] + }, + "☟": { + text: "{\\leftmoon}", + textpackages: [ + "wasysym" + ] + }, + "☿": { + math: "\\mercury", + text: "{\\mercury}" + }, + "♀": { + math: "\\female", + text: "{\\venus}" + }, + "♁": { + math: "\\earth" + }, + "♂": { + math: "\\male", + text: "{\\male}" + }, + "♃": { + math: "\\jupiter", + text: "{\\jupiter}" + }, + "♄": { + math: "\\saturn", + text: "{\\saturn}" + }, + "♅": { + math: "\\uranus", + text: "{\\uranus}" + }, + "♆": { + math: "\\neptune", + text: "{\\neptune}" + }, + "♇": { + math: "\\pluto", + text: "{\\pluto}" + }, + "♈": { + math: "\\aries", + text: "{\\aries}" + }, + "♉": { + math: "\\taurus", + text: "{\\taurus}" + }, + "♊": { + math: "\\gemini", + text: "{\\gemini}" + }, + "♋": { + math: "\\cancer", + text: "{\\cancer}" + }, + "♌": { + math: "\\leo", + text: "{\\leo}" + }, + "♍": { + math: "\\virgo", + text: "{\\virgo}" + }, + "♎": { + math: "\\libra", + text: "{\\libra}" + }, + "♏": { + math: "\\scorpio", + text: "{\\scorpio}" + }, + "♐": { + math: "\\sagittarius", + text: "{\\sagittarius}" + }, + "♑": { + math: "\\capricornus", + text: "{\\capricornus}" + }, + "♒": { + math: "\\aquarius", + text: "{\\aquarius}" + }, + "♓": { + math: "\\pisces", + text: "{\\pisces}" + }, + "♠": { + math: "\\spadesuit", + text: "\\ding{171}" + }, + "♡": { + math: "\\heartsuit" + }, + "♱": { + math: "\\diamond" + }, + "♣": { + math: "\\clubsuit", + text: "\\ding{168}" + }, + "♀": { + math: "\\varspadesuit" + }, + "♄": { + math: "\\varheartsuit", + text: "\\ding{170}" + }, + "♩": { + math: "\\vardiamondsuit", + text: "\\ding{169}" + }, + "♧": { + math: "\\varclubsuit" + }, + "♩": { + math: "\\quarternote", + text: "{\\quarternote}" + }, + "â™Ș": { + math: "\\eighthnote", + text: "{\\eighthnote}" + }, + "♫": { + math: "\\twonotes" + }, + "♬": { + math: "\\sixteenthnote" + }, + "♭": { + math: "\\flat" + }, + "♼": { + math: "\\natural" + }, + "♯": { + math: "\\sharp" + }, + "♻": { + math: "\\recycle" + }, + "♟": { + math: "\\acidfree" + }, + "⚀": { + math: "\\dicei" + }, + "⚁": { + math: "\\diceii" + }, + "⚂": { + math: "\\diceiii" + }, + "⚃": { + math: "\\diceiv" + }, + "⚄": { + math: "\\dicev" + }, + "⚅": { + math: "\\dicevi" + }, + "⚆": { + math: "\\circledrightdot" + }, + "⚇": { + math: "\\circledtwodots" + }, + "⚈": { + math: "\\blackcircledrightdot" + }, + "⚉": { + math: "\\blackcircledtwodots" + }, + "⚓": { + math: "\\anchor" + }, + "⚔": { + math: "\\swords" + }, + "⚠": { + math: "\\warning" + }, + "âš„": { + math: "\\Hermaphrodite" + }, + "âšȘ": { + math: "\\medcirc" + }, + "⚫": { + math: "\\medbullet" + }, + "⚬": { + math: "\\mdsmwhtcircle" + }, + "âšČ": { + math: "\\neuter" + }, + "✁": { + text: "\\ding{33}" + }, + "✂": { + text: "\\ding{34}" + }, + "✃": { + text: "\\ding{35}" + }, + "✄": { + text: "\\ding{36}" + }, + "✆": { + text: "\\ding{38}" + }, + "✇": { + text: "\\ding{39}" + }, + "✈": { + text: "\\ding{40}" + }, + "✉": { + text: "\\ding{41}" + }, + "✌": { + text: "\\ding{44}" + }, + "✍": { + text: "\\ding{45}" + }, + "✎": { + math: "\\pencil", + text: "\\ding{46}" + }, + "✏": { + text: "\\ding{47}" + }, + "✐": { + text: "\\ding{48}" + }, + "✑": { + text: "\\ding{49}" + }, + "✒": { + text: "\\ding{50}" + }, + "✓": { + math: "\\checkmark", + text: "\\ding{51}" + }, + "✔": { + text: "\\ding{52}" + }, + "✕": { + text: "\\ding{53}" + }, + "✖": { + text: "\\ding{54}" + }, + "✗": { + math: "\\ballotx", + text: "\\ding{55}" + }, + "✘": { + text: "\\ding{56}" + }, + "✙": { + text: "\\ding{57}" + }, + "✚": { + text: "\\ding{58}" + }, + "✛": { + text: "\\ding{59}" + }, + "✜": { + text: "\\ding{60}" + }, + "✝": { + text: "\\ding{61}" + }, + "✞": { + text: "\\ding{62}" + }, + "✟": { + text: "\\ding{63}" + }, + "✠": { + math: "\\maltese", + text: "\\ding{64}" + }, + "✡": { + text: "\\ding{65}" + }, + "✱": { + text: "\\ding{66}" + }, + "✣": { + text: "\\ding{67}" + }, + "✀": { + text: "\\ding{68}" + }, + "✄": { + text: "\\ding{69}" + }, + "✩": { + text: "\\ding{70}" + }, + "✧": { + text: "\\ding{71}" + }, + "✩": { + text: "\\ding{73}" + }, + "âœȘ": { + math: "\\circledstar", + text: "\\ding{74}" + }, + "✫": { + text: "\\ding{75}" + }, + "✬": { + text: "\\ding{76}" + }, + "✭": { + text: "\\ding{77}" + }, + "✼": { + text: "\\ding{78}" + }, + "✯": { + text: "\\ding{79}" + }, + "✰": { + text: "\\ding{80}" + }, + "✱": { + text: "\\ding{81}" + }, + "âœČ": { + text: "\\ding{82}" + }, + "✳": { + text: "\\ding{83}" + }, + "✮": { + text: "\\ding{84}" + }, + "✔": { + text: "\\ding{85}" + }, + "✶": { + math: "\\varstar", + text: "\\ding{86}" + }, + "✷": { + text: "\\ding{87}" + }, + "✾": { + text: "\\ding{88}" + }, + "âœč": { + text: "\\ding{89}" + }, + "âœș": { + text: "\\ding{90}" + }, + "✻": { + text: "\\ding{91}" + }, + "✌": { + text: "\\ding{92}" + }, + "✜": { + math: "\\dingasterisk", + text: "\\ding{93}" + }, + "✟": { + text: "\\ding{94}" + }, + "✿": { + text: "\\ding{95}" + }, + "❀": { + text: "\\ding{96}" + }, + "❁": { + text: "\\ding{97}" + }, + "❂": { + text: "\\ding{98}" + }, + "❃": { + text: "\\ding{99}" + }, + "❄": { + text: "\\ding{100}" + }, + "❅": { + text: "\\ding{101}" + }, + "❆": { + text: "\\ding{102}" + }, + "❇": { + text: "\\ding{103}" + }, + "❈": { + text: "\\ding{104}" + }, + "❉": { + text: "\\ding{105}" + }, + "❊": { + text: "\\ding{106}" + }, + "❋": { + text: "\\ding{107}" + }, + "❍": { + text: "\\ding{109}" + }, + "❏": { + text: "\\ding{111}" + }, + "❐": { + text: "\\ding{112}" + }, + "❑": { + text: "\\ding{113}" + }, + "❒": { + text: "\\ding{114}" + }, + "❖": { + text: "\\ding{118}" + }, + "❘": { + text: "\\ding{120}" + }, + "❙": { + text: "\\ding{121}" + }, + "❚": { + text: "\\ding{122}" + }, + "❛": { + text: "\\ding{123}" + }, + "❜": { + text: "\\ding{124}" + }, + "❝": { + text: "\\ding{125}" + }, + "❞": { + text: "\\ding{126}" + }, + "❡": { + text: "\\ding{161}" + }, + "❱": { + text: "\\ding{162}" + }, + "❣": { + text: "\\ding{163}" + }, + "❀": { + text: "\\ding{164}" + }, + "❄": { + text: "\\ding{165}" + }, + "❊": { + text: "\\ding{166}" + }, + "❧": { + text: "\\ding{167}" + }, + "âČ": { + math: "\\lbrbrak" + }, + "❳": { + math: "\\rbrbrak" + }, + "❶": { + text: "\\ding{182}" + }, + "❷": { + text: "\\ding{183}" + }, + "❞": { + text: "\\ding{184}" + }, + "âč": { + text: "\\ding{185}" + }, + "âș": { + text: "\\ding{186}" + }, + "❻": { + text: "\\ding{187}" + }, + "❌": { + text: "\\ding{188}" + }, + "❜": { + text: "\\ding{189}" + }, + "❟": { + text: "\\ding{190}" + }, + "❿": { + text: "\\ding{191}" + }, + "➀": { + text: "\\ding{192}" + }, + "➁": { + text: "\\ding{193}" + }, + "➂": { + text: "\\ding{194}" + }, + "➃": { + text: "\\ding{195}" + }, + "➄": { + text: "\\ding{196}" + }, + "➅": { + text: "\\ding{197}" + }, + "➆": { + text: "\\ding{198}" + }, + "➇": { + text: "\\ding{199}" + }, + "➈": { + text: "\\ding{200}" + }, + "➉": { + text: "\\ding{201}" + }, + "➊": { + text: "\\ding{202}" + }, + "➋": { + text: "\\ding{203}" + }, + "➌": { + text: "\\ding{204}" + }, + "➍": { + text: "\\ding{205}" + }, + "➎": { + text: "\\ding{206}" + }, + "➏": { + text: "\\ding{207}" + }, + "➐": { + text: "\\ding{208}" + }, + "➑": { + text: "\\ding{209}" + }, + "➒": { + text: "\\ding{210}" + }, + "➓": { + text: "\\ding{211}" + }, + "➔": { + text: "\\ding{212}" + }, + "➘": { + text: "\\ding{216}" + }, + "➙": { + text: "\\ding{217}" + }, + "➚": { + text: "\\ding{218}" + }, + "➛": { + math: "\\draftingarrow", + text: "\\ding{219}" + }, + "➜": { + text: "\\ding{220}" + }, + "➝": { + text: "\\ding{221}" + }, + "➞": { + text: "\\ding{222}" + }, + "➟": { + text: "\\ding{223}" + }, + "➠": { + text: "\\ding{224}" + }, + "➡": { + text: "\\ding{225}" + }, + "➱": { + math: "\\arrowbullet", + text: "\\ding{226}" + }, + "➣": { + text: "\\ding{227}" + }, + "➀": { + text: "\\ding{228}" + }, + "➄": { + text: "\\ding{229}" + }, + "➊": { + text: "\\ding{230}" + }, + "➧": { + text: "\\ding{231}" + }, + "➚": { + text: "\\ding{232}" + }, + "➩": { + text: "\\ding{233}" + }, + "âžȘ": { + text: "\\ding{234}" + }, + "➫": { + text: "\\ding{235}" + }, + "➬": { + text: "\\ding{236}" + }, + "➭": { + text: "\\ding{237}" + }, + "➼": { + text: "\\ding{238}" + }, + "➯": { + text: "\\ding{239}" + }, + "➱": { + text: "\\ding{241}" + }, + "âžČ": { + text: "\\ding{242}" + }, + "➳": { + text: "\\ding{243}" + }, + "➮": { + text: "\\ding{244}" + }, + "➔": { + text: "\\ding{245}" + }, + "➶": { + text: "\\ding{246}" + }, + "➷": { + text: "\\ding{247}" + }, + "➾": { + text: "\\ding{248}" + }, + "âžč": { + text: "\\ding{249}" + }, + "âžș": { + text: "\\ding{250}" + }, + "➻": { + text: "\\ding{251}" + }, + "➌": { + text: "\\ding{252}" + }, + "➜": { + text: "\\ding{253}" + }, + "➟": { + text: "\\ding{254}" + }, + "⟀": { + math: "\\threedangle" + }, + "⟁": { + math: "\\whiteinwhitetriangle" + }, + "⟂": { + math: "\\perp" + }, + "⟃": { + math: "\\subsetcirc" + }, + "⟄": { + math: "\\supsetcirc" + }, + "⟅": { + math: "\\Lbag" + }, + "⟆": { + math: "\\Rbag" + }, + "⟇": { + math: "\\veedot" + }, + "⟈": { + math: "\\bsolhsub" + }, + "⟉": { + math: "\\suphsol" + }, + "⟌": { + math: "\\longdivision" + }, + "⟐": { + math: "\\Diamonddot" + }, + "⟑": { + math: "\\wedgedot" + }, + "⟒": { + math: "\\upin" + }, + "⟓": { + math: "\\pullback" + }, + "⟔": { + math: "\\pushout" + }, + "⟕": { + math: "\\leftouterjoin" + }, + "⟖": { + math: "\\rightouterjoin" + }, + "⟗": { + math: "\\fullouterjoin" + }, + "⟘": { + math: "\\bigbot" + }, + "⟙": { + math: "\\bigtop" + }, + "⟚": { + math: "\\DashVDash" + }, + "⟛": { + math: "\\dashVdash" + }, + "⟜": { + math: "\\multimapinv" + }, + "⟝": { + math: "\\vlongdash" + }, + "⟞": { + math: "\\longdashv" + }, + "⟟": { + math: "\\cirbot" + }, + "⟠": { + math: "\\lozengeminus" + }, + "⟡": { + math: "\\concavediamond" + }, + "⟱": { + math: "\\concavediamondtickleft" + }, + "⟣": { + math: "\\concavediamondtickright" + }, + "⟀": { + math: "\\whitesquaretickleft" + }, + "⟄": { + math: "\\whitesquaretickright" + }, + "⟩": { + math: "\\llbracket" + }, + "⟧": { + math: "\\rrbracket" + }, + "⟹": { + math: "\\langle" + }, + "⟩": { + math: "\\rangle" + }, + "âŸȘ": { + math: "\\lang" + }, + "⟫": { + math: "\\rang" + }, + "⟬": { + math: "\\Lbrbrak" + }, + "⟭": { + math: "\\Rbrbrak" + }, + "⟼": { + math: "\\lgroup" + }, + "⟯": { + math: "\\rgroup" + }, + "⟰": { + math: "\\UUparrow" + }, + "⟱": { + math: "\\DDownarrow" + }, + "âŸČ": { + math: "\\acwgapcirclearrow" + }, + "⟳": { + math: "\\cwgapcirclearrow" + }, + "⟮": { + math: "\\rightarrowonoplus" + }, + "⟔": { + math: "\\longleftarrow" + }, + "⟶": { + math: "\\longrightarrow" + }, + "⟷": { + math: "\\longleftrightarrow" + }, + "⟾": { + math: "\\Longleftarrow" + }, + "âŸč": { + math: "\\Longrightarrow" + }, + "âŸș": { + math: "\\Longleftrightarrow" + }, + "⟻": { + math: "\\longmapsfrom" + }, + "⟌": { + math: "\\longmapsto" + }, + "⟜": { + math: "\\Longmapsfrom" + }, + "⟟": { + math: "\\Longmapsto" + }, + "⟿": { + math: "\\sim\\joinrel\\leadsto" + }, + " ": { + math: "\\psur" + }, + " ": { + math: "\\nVtwoheadrightarrow" + }, + " ": { + math: "\\nvLeftarrow" + }, + " ": { + math: "\\nvRightarrow" + }, + " ": { + math: "\\nvLeftrightarrow" + }, + " ": { + math: "\\Mapsfrom" + }, + " ": { + math: "\\Mapsto" + }, + " ": { + math: "\\downarrowbarred" + }, + " ": { + math: "\\uparrowbarred" + }, + " ": { + math: "\\Uuparrow" + }, + "​": { + math: "\\Ddownarrow" + }, + "‌": { + math: "\\leftbkarrow" + }, + "‍": { + math: "\\rightbkarrow" + }, + "‎": { + math: "\\leftdbkarrow" + }, + "‏": { + math: "\\dbkarow" + }, + "‐": { + math: "\\drbkarow" + }, + "‑": { + math: "\\rightdotarrow" + }, + "‒": { + math: "\\UpArrowBar" + }, + "–": { + math: "\\DownArrowBar" + }, + "—": { + math: "\\pinj" + }, + "―": { + math: "\\finj" + }, + "‖": { + math: "\\bij" + }, + "‗": { + math: "\\nvtwoheadrightarrowtail" + }, + "‘": { + math: "\\nVtwoheadrightarrowtail" + }, + "’": { + math: "\\lefttail" + }, + "‚": { + math: "\\righttail" + }, + "‛": { + math: "\\leftdbltail" + }, + "“": { + math: "\\rightdbltail" + }, + "”": { + math: "\\diamondleftarrow" + }, + "„": { + math: "\\rightarrowdiamond" + }, + "‟": { + math: "\\diamondleftarrowbar" + }, + "†": { + math: "\\barrightarrowdiamond" + }, + "‥": { + math: "\\nwsearrow" + }, + "‹": { + math: "\\neswarrow" + }, + "‫": { + math: "\\rdiagovfdiag" + }, + "‏": { + math: "\\fdiagovrdiag" + }, + "‭": { + math: "\\seovnearrow" + }, + "‟": { + math: "\\neovsearrow" + }, + " ": { + math: "\\fdiagovnearrow" + }, + "‰": { + math: "\\rdiagovsearrow" + }, + "‱": { + math: "\\neovnwarrow" + }, + "â€Č": { + math: "\\nwovnearrow" + }, + "‎": { + math: "\\uprightcurvearrow" + }, + "—": { + math: "\\downrightcurvedarrow" + }, + "„": { + math: "\\cwrightarcarrow" + }, + "â€č": { + math: "\\acwleftarcarrow" + }, + "â€ș": { + math: "\\acwoverarcarrow" + }, + "※": { + math: "\\acwunderarcarrow" + }, + "‌": { + math: "\\curvearrowrightminus" + }, + "“": { + math: "\\curvearrowleftplus" + }, + "‟": { + math: "\\cwundercurvearrow" + }, + "‿": { + math: "\\ccwundercurvearrow" + }, + "â„€": { + math: "\\Elolarr" + }, + "℁": { + math: "\\Elorarr" + }, + "â„‚": { + math: "\\ElzRlarr" + }, + "℃": { + math: "\\leftarrowshortrightarrow" + }, + "â„„": { + math: "\\ElzrLarr" + }, + "â„…": { + math: "\\rightarrowplus" + }, + "℆": { + math: "\\leftarrowplus" + }, + "ℇ": { + math: "\\Elzrarrx" + }, + "℈": { + math: "\\leftrightarrowcircle" + }, + "℉": { + math: "\\twoheaduparrowcircle" + }, + "â„Š": { + math: "\\leftrightharpoon" + }, + "â„‹": { + math: "\\rightleftharpoon" + }, + "â„Œ": { + math: "\\updownharpoonrightleft" + }, + "ℍ": { + math: "\\updownharpoonleftright" + }, + "ℎ": { + math: "\\LeftRightVector" + }, + "ℏ": { + math: "\\RightUpDownVector" + }, + "ℐ": { + math: "\\DownLeftRightVector" + }, + "â„‘": { + math: "\\LeftUpDownVector" + }, + "â„’": { + math: "\\LeftVectorBar" + }, + "â„“": { + math: "\\RightVectorBar" + }, + "â„”": { + math: "\\RightUpVectorBar" + }, + "â„•": { + math: "\\RightDownVectorBar" + }, + "â„–": { + math: "\\DownLeftVectorBar" + }, + "â„—": { + math: "\\DownRightVectorBar" + }, + "℘": { + math: "\\LeftUpVectorBar" + }, + "â„™": { + math: "\\LeftDownVectorBar" + }, + "â„š": { + math: "\\LeftTeeVector" + }, + "â„›": { + math: "\\RightTeeVector" + }, + "â„œ": { + math: "\\RightUpTeeVector" + }, + "ℝ": { + math: "\\RightDownTeeVector" + }, + "℞": { + math: "\\DownLeftTeeVector" + }, + "â„Ÿ": { + math: "\\DownRightTeeVector" + }, + "â„ ": { + math: "\\LeftUpTeeVector" + }, + "â„Ą": { + math: "\\LeftDownTeeVector" + }, + "â„ą": { + math: "\\leftleftharpoons" + }, + "â„Ł": { + math: "\\upupharpoons" + }, + "â„€": { + math: "\\rightrightharpoons" + }, + "â„„": { + math: "\\downdownharpoons" + }, + "â„Š": { + math: "\\leftrightharpoonsup" + }, + "℧": { + math: "\\leftrightharpoonsdown" + }, + "â„š": { + math: "\\rightleftharpoonsup" + }, + "â„©": { + math: "\\rightleftharpoonsdown" + }, + "â„Ș": { + math: "\\leftbarharpoon" + }, + "â„«": { + math: "\\barleftharpoon" + }, + "â„Ź": { + math: "\\rightbarharpoon" + }, + "â„­": { + math: "\\barrightharpoon" + }, + "â„ź": { + math: "\\UpEquilibrium" + }, + "â„Ż": { + math: "\\ReverseUpEquilibrium" + }, + "â„°": { + math: "\\RoundImplies" + }, + "ℱ": { + math: "\\equalrightarrow" + }, + "â„Č": { + math: "\\similarrightarrow" + }, + "â„ł": { + math: "\\leftarrowsimilar" + }, + "â„Ž": { + math: "\\rightarrowsimilar" + }, + "â„”": { + math: "\\rightarrowapprox" + }, + "ℶ": { + math: "\\ltlarr" + }, + "â„·": { + math: "\\leftarrowless" + }, + "â„ž": { + math: "\\gtrarr" + }, + "â„č": { + math: "\\subrarr" + }, + "â„ș": { + math: "\\leftarrowsubset" + }, + "â„»": { + math: "\\suplarr" + }, + "â„Ÿ": { + math: "\\upfishtail" + }, + "â„ż": { + math: "\\downfishtail" + }, + "⩀": { + math: "\\Elztfnc" + }, + "⊁": { + math: "\\spot" + }, + "⩂": { + math: "\\typecolon" + }, + "⊃": { + math: "\\lBrace" + }, + "⩄": { + math: "\\rBrace" + }, + "⩆": { + math: "\\Elroang" + }, + "⩇": { + math: "\\limg" + }, + "⊈": { + math: "\\rimg" + }, + "⩉": { + math: "\\lblot" + }, + "⩊": { + math: "\\rblot" + }, + "⩋": { + math: "\\lbrackubar" + }, + "⩌": { + math: "\\rbrackubar" + }, + "⊍": { + math: "\\lbrackultick" + }, + "⊎": { + math: "\\rbracklrtick" + }, + "⊏": { + math: "\\lbracklltick" + }, + "⊐": { + math: "\\rbrackurtick" + }, + "⩑": { + math: "\\langledot" + }, + "⩒": { + math: "\\rangledot" + }, + "⩓": { + math: "<\\kern-0.58em(" + }, + "⩕": { + math: "\\Lparengtr" + }, + "⩖": { + math: "\\Rparenless" + }, + "⩗": { + math: "\\lblkbrbrak" + }, + "⊘": { + math: "\\rblkbrbrak" + }, + "⩙": { + math: "\\Elzddfnc" + }, + "⩚": { + math: "\\vzigzag" + }, + "⩛": { + math: "\\measuredangleleft" + }, + "⩜": { + math: "\\Angle" + }, + "⊝": { + math: "\\rightanglemdot" + }, + "⊞": { + math: "\\angles" + }, + "⩟": { + math: "\\angdnr" + }, + "⊠": { + math: "\\Elzlpargt" + }, + "⊥": { + math: "\\sphericalangleup" + }, + "⊹": { + math: "\\turnangle" + }, + "⊣": { + math: "\\revangle" + }, + "⊀": { + math: "\\angleubar" + }, + "⊄": { + math: "\\revangleubar" + }, + "⊊": { + math: "\\wideangledown" + }, + "⊧": { + math: "\\wideangleup" + }, + "⊚": { + math: "\\measanglerutone" + }, + "⊩": { + math: "\\measanglelutonw" + }, + "âŠȘ": { + math: "\\measanglerdtose" + }, + "⊫": { + math: "\\measangleldtosw" + }, + "⊏": { + math: "\\measangleurtone" + }, + "⊭": { + math: "\\measangleultonw" + }, + "⊟": { + math: "\\measangledrtose" + }, + "⊯": { + math: "\\measangledltosw" + }, + "⊰": { + math: "\\revemptyset" + }, + "⊱": { + math: "\\emptysetobar" + }, + "âŠČ": { + math: "\\emptysetocirc" + }, + "⊳": { + math: "\\emptysetoarr" + }, + "⊎": { + math: "\\emptysetoarrl" + }, + "⊷": { + math: "\\circledparallel" + }, + "⊞": { + math: "\\circledbslash" + }, + "âŠč": { + math: "\\operp" + }, + "âŠș": { + math: "\\obot" + }, + "⊻": { + math: "\\olcross" + }, + "⊌": { + math: "\\odotslashdot" + }, + "⊜": { + math: "\\uparrowoncircle" + }, + "⊟": { + math: "\\circledwhitebullet" + }, + "⊿": { + math: "\\circledbullet" + }, + "⧀": { + math: "\\circledless" + }, + "⧁": { + math: "\\circledgtr" + }, + "⧂": { + math: "\\cirscir" + }, + "⧃": { + math: "\\cirE" + }, + "⧄": { + math: "\\boxslash" + }, + "⧅": { + math: "\\boxbslash" + }, + "⧆": { + math: "\\boxast" + }, + "⧇": { + math: "\\boxcircle" + }, + "⧈": { + math: "\\boxbox" + }, + "⧉": { + math: "\\boxonbox" + }, + "⧊": { + math: "\\ElzLap" + }, + "⧋": { + math: "\\Elzdefas" + }, + "⧌": { + math: "\\triangles" + }, + "⧍": { + math: "\\triangleserifs" + }, + "⧎": { + math: "\\rtriltri" + }, + "⧏": { + math: "\\LeftTriangleBar" + }, + "⧏̞": { + math: "\\NotLeftTriangleBar" + }, + "⧐": { + math: "\\RightTriangleBar" + }, + "⧐̞": { + math: "\\NotRightTriangleBar" + }, + "⧑": { + math: "\\lfbowtie" + }, + "⧒": { + math: "\\rfbowtie" + }, + "⧓": { + math: "\\fbowtie" + }, + "⧔": { + math: "\\lftimes" + }, + "⧕": { + math: "\\rftimes" + }, + "⧖": { + math: "\\hourglass" + }, + "⧗": { + math: "\\blackhourglass" + }, + "⧘": { + math: "\\lvzigzag" + }, + "⧙": { + math: "\\rvzigzag" + }, + "⧚": { + math: "\\Lvzigzag" + }, + "⧛": { + math: "\\Rvzigzag" + }, + "⧝": { + math: "\\tieinfty" + }, + "⧞": { + math: "\\nvinfty" + }, + "⧟": { + math: "\\multimapboth" + }, + "⧠": { + math: "\\laplac" + }, + "⧥": { + math: "\\lrtriangleeq" + }, + "⧹": { + math: "\\shuffle" + }, + "⧣": { + math: "\\eparsl" + }, + "⧀": { + math: "\\smeparsl" + }, + "⧄": { + math: "\\eqvparsl" + }, + "⧊": { + math: "\\gleichstark" + }, + "⧧": { + math: "\\thermod" + }, + "⧚": { + math: "\\downtriangleleftblack" + }, + "⧩": { + math: "\\downtrianglerightblack" + }, + "â§Ș": { + math: "\\blackdiamonddownarrow" + }, + "⧫": { + math: "\\blacklozenge" + }, + "⧏": { + math: "\\circledownarrow" + }, + "⧭": { + math: "\\blackcircledownarrow" + }, + "⧟": { + math: "\\errbarsquare" + }, + "⧯": { + math: "\\errbarblacksquare" + }, + "⧰": { + math: "\\errbardiamond" + }, + "⧱": { + math: "\\errbarblackdiamond" + }, + "â§Č": { + math: "\\errbarcircle" + }, + "⧳": { + math: "\\errbarblackcircle" + }, + "⧎": { + math: "\\RuleDelayed" + }, + "⧔": { + math: "\\setminus" + }, + "⧶": { + math: "\\dsol" + }, + "⧷": { + math: "\\rsolbar" + }, + "⧞": { + math: "\\xsol" + }, + "â§č": { + math: "\\zhide" + }, + "â§ș": { + math: "\\doubleplus" + }, + "⧻": { + math: "\\tripleplus" + }, + "⧌": { + math: "\\lcurvyangle" + }, + "⧜": { + math: "\\rcurvyangle" + }, + "⧟": { + math: "\\tplus" + }, + "⧿": { + math: "\\tminus" + }, + "⹀": { + math: "\\bigodot" + }, + "⚁": { + math: "\\bigoplus" + }, + "⹂": { + math: "\\bigotimes" + }, + "⚃": { + math: "\\bigcupdot" + }, + "⹄": { + math: "\\Elxuplus" + }, + "⹅": { + math: "\\ElzThr" + }, + "⹆": { + math: "\\Elxsqcup" + }, + "⹇": { + math: "\\ElzInf" + }, + "⚈": { + math: "\\ElzSup" + }, + "⹉": { + math: "\\varprod" + }, + "⹊": { + math: "\\modtwosum" + }, + "⹋": { + math: "\\sumint" + }, + "⹌": { + math: "\\iiiint" + }, + "⚍": { + math: "\\ElzCint" + }, + "⚎": { + math: "\\intBar" + }, + "⚏": { + math: "\\clockoint" + }, + "⹑": { + math: "\\awint" + }, + "⹒": { + math: "\\rppolint" + }, + "⹓": { + math: "\\scpolint" + }, + "⹔": { + math: "\\npolint" + }, + "⹕": { + math: "\\pointint" + }, + "⹖": { + math: "\\sqrint" + }, + "⹗": { + math: "\\intlarhk" + }, + "⚘": { + math: "\\intx" + }, + "⹙": { + math: "\\intcap" + }, + "⹚": { + math: "\\intcup" + }, + "⹛": { + math: "\\upint" + }, + "⹜": { + math: "\\lowint" + }, + "⚝": { + math: "\\Join" + }, + "⚞": { + math: "\\bigtriangleleft" + }, + "⹟": { + math: "\\zcmp" + }, + "âš ": { + math: "\\zpipe" + }, + "⚥": { + math: "\\zproject" + }, + "âšą": { + math: "\\ringplus" + }, + "⚣": { + math: "\\plushat" + }, + "⚀": { + math: "\\simplus" + }, + "⚊": { + math: "\\plussim" + }, + "⚧": { + math: "\\plussubtwo" + }, + "âšš": { + math: "\\plustrif" + }, + "âš©": { + math: "\\commaminus" + }, + "âš«": { + math: "\\minusfdots" + }, + "⚏": { + math: "\\minusrdots" + }, + "⚯": { + math: "\\ElzTimes" + }, + "âš°": { + math: "\\dottimes" + }, + "âš±": { + math: "\\timesbar" + }, + "âšČ": { + math: "\\btimes" + }, + "âšł": { + math: "\\smashtimes" + }, + "⚶": { + math: "\\otimeshat" + }, + "âš·": { + math: "\\Otimes" + }, + "âšž": { + math: "\\odiv" + }, + "âšč": { + math: "\\triangleplus" + }, + "âšș": { + math: "\\triangleminus" + }, + "âš»": { + math: "\\triangletimes" + }, + "âšœ": { + math: "\\intprodr" + }, + "⚟": { + math: "\\fcmp" + }, + "âšż": { + math: "\\amalg" + }, + "⩀": { + math: "\\capdot" + }, + "⩁": { + math: "\\uminus" + }, + "⩂": { + math: "\\barcup" + }, + "⩃": { + math: "\\barcap" + }, + "⩄": { + math: "\\capwedge" + }, + "⩅": { + math: "\\cupvee" + }, + "⩆": { + math: "\\cupovercap" + }, + "⩇": { + math: "\\capovercup" + }, + "⩈": { + math: "\\cupbarcap" + }, + "⩉": { + math: "\\capbarcup" + }, + "⩊": { + math: "\\twocups" + }, + "⩋": { + math: "\\twocaps" + }, + "⩌": { + math: "\\closedvarcup" + }, + "⩍": { + math: "\\closedvarcap" + }, + "⩎": { + math: "\\Sqcap" + }, + "⩏": { + math: "\\Sqcup" + }, + "⩐": { + math: "\\closedvarcupsmashprod" + }, + "⩑": { + math: "\\wedgeodot" + }, + "⩒": { + math: "\\veeodot" + }, + "⩓": { + math: "\\ElzAnd" + }, + "⩔": { + math: "\\ElzOr" + }, + "⩖": { + math: "\\ElOr" + }, + "⩗": { + math: "\\bigslopedvee" + }, + "⩘": { + math: "\\bigslopedwedge" + }, + "⩙": { + math: "\\veeonwedge" + }, + "⩚": { + math: "\\wedgemidvert" + }, + "⩛": { + math: "\\veemidvert" + }, + "⩜": { + math: "\\midbarwedge" + }, + "⩝": { + math: "\\midbarvee" + }, + "⩞": { + math: "\\perspcorrespond" + }, + "⩟": { + math: "\\Elzminhat" + }, + "â© ": { + math: "\\wedgedoublebar" + }, + "â©Ą": { + math: "\\varveebar" + }, + "â©ą": { + math: "\\doublebarvee" + }, + "â©€": { + math: "\\dsub" + }, + "â©„": { + math: "\\rsub" + }, + "â©Š": { + math: "\\eqdot" + }, + "⩧": { + math: "\\dotequiv" + }, + "â©š": { + math: "\\equivVert" + }, + "â©©": { + math: "\\equivVvert" + }, + "â©Ș": { + math: "\\dotsim" + }, + "â©«": { + math: "\\simrdots" + }, + "â©Ź": { + math: "\\simminussim" + }, + "â©­": { + math: "\\congdot" + }, + "â©ź": { + math: "\\stackrel{*}{=}" + }, + "â©Ż": { + math: "\\hatapprox" + }, + "â©°": { + math: "\\approxeqq" + }, + "⩱": { + math: "\\eqqplus" + }, + "â©Č": { + math: "\\pluseqq" + }, + "â©ł": { + math: "\\eqqsim" + }, + "â©Ž": { + math: "\\Coloneqq" + }, + "â©”": { + math: "\\Equal" + }, + "⩶": { + math: "\\Same" + }, + "â©·": { + math: "\\ddotseq" + }, + "â©ž": { + math: "\\equivDD" + }, + "â©č": { + math: "\\ltcir" + }, + "â©ș": { + math: "\\gtcir" + }, + "â©»": { + math: "\\ltquest" + }, + "â©Œ": { + math: "\\gtquest" + }, + "â©œ": { + math: "\\leqslant", + mathpackages: [ + "amssymb" + ] + }, + "⩜̞": { + math: "\\nleqslant", + mathpackages: [ + "amssymb" + ] + }, + "â©Ÿ": { + math: "\\geqslant", + mathpackages: [ + "amssymb" + ] + }, + "â©ŸÌž": { + math: "\\ngeqslant", + mathpackages: [ + "amssymb" + ] + }, + "â©ż": { + math: "\\lesdot" + }, + "âȘ€": { + math: "\\gesdot" + }, + "âȘ": { + math: "\\lesdoto" + }, + "âȘ‚": { + math: "\\gesdoto" + }, + "âȘƒ": { + math: "\\lesdotor" + }, + "âȘ„": { + math: "\\gesdotol" + }, + "âȘ…": { + math: "\\lessapprox" + }, + "âȘ†": { + math: "\\gtrapprox" + }, + "âȘ‡": { + math: "\\lneq" + }, + "âȘˆ": { + math: "\\gneq" + }, + "âȘ‰": { + math: "\\lnapprox" + }, + "âȘŠ": { + math: "\\gnapprox" + }, + "âȘ‹": { + math: "\\lesseqqgtr" + }, + "âȘŒ": { + math: "\\gtreqqless" + }, + "âȘ": { + math: "\\lsime" + }, + "âȘŽ": { + math: "\\gsime" + }, + "âȘ": { + math: "\\lsimg" + }, + "âȘ": { + math: "\\gsiml" + }, + "âȘ‘": { + math: "\\lgE" + }, + "âȘ’": { + math: "\\glE" + }, + "âȘ“": { + math: "\\lesges" + }, + "âȘ”": { + math: "\\gesles" + }, + "âȘ•": { + math: "\\eqslantless" + }, + "âȘ–": { + math: "\\eqslantgtr" + }, + "âȘ—": { + math: "\\elsdot" + }, + "âȘ˜": { + math: "\\egsdot" + }, + "âȘ™": { + math: "\\eqqless" + }, + "âȘš": { + math: "\\eqqgtr" + }, + "âȘ›": { + math: "\\eqqslantless" + }, + "âȘœ": { + math: "\\eqqslantgtr" + }, + "âȘ": { + math: "\\Pisymbol{ppi020}{117}" + }, + "âȘž": { + math: "\\Pisymbol{ppi020}{105}" + }, + "âȘŸ": { + math: "\\simlE" + }, + "âȘ ": { + math: "\\simgE" + }, + "âȘĄ": { + math: "\\NestedLessLess" + }, + "âȘĄÌž": { + math: "\\NotNestedLessLess" + }, + "âȘą": { + math: "\\NestedGreaterGreater" + }, + "âȘąÌž": { + math: "\\NotNestedGreaterGreater" + }, + "âȘŁ": { + math: "\\partialmeetcontraction" + }, + "âȘ€": { + math: "\\glj" + }, + "âȘ„": { + math: "\\gla" + }, + "âȘŠ": { + math: "\\leftslice" + }, + "âȘ§": { + math: "\\rightslice" + }, + "âȘš": { + math: "\\lescc" + }, + "âȘ©": { + math: "\\gescc" + }, + "âȘȘ": { + math: "\\smt" + }, + "âȘ«": { + math: "\\lat" + }, + "âȘŹ": { + math: "\\smte" + }, + "âȘ­": { + math: "\\late" + }, + "âȘź": { + math: "\\bumpeqq" + }, + "âȘŻ": { + math: "\\preceq" + }, + "âȘŻÌž": { + math: "\\not\\preceq" + }, + "âȘ°": { + math: "\\succeq" + }, + "âȘ°Ìž": { + math: "\\not\\succeq" + }, + "âȘ±": { + math: "\\precneq" + }, + "âȘČ": { + math: "\\succneq" + }, + "âȘł": { + math: "\\preceqq" + }, + "âȘŽ": { + math: "\\succeqq" + }, + "âȘ”": { + math: "\\precneqq" + }, + "âȘ¶": { + math: "\\succneqq" + }, + "âȘ·": { + math: "\\precapprox" + }, + "âȘž": { + math: "\\succapprox" + }, + "âȘč": { + math: "\\precnapprox" + }, + "âȘș": { + math: "\\succnapprox" + }, + "âȘ»": { + math: "\\llcurly" + }, + "âȘŒ": { + math: "\\ggcurly" + }, + "âȘœ": { + math: "\\subsetdot" + }, + "âȘŸ": { + math: "\\supsetdot" + }, + "âȘż": { + math: "\\subsetplus" + }, + "⫀": { + math: "\\supsetplus" + }, + "⫁": { + math: "\\submult" + }, + "⫂": { + math: "\\supmult" + }, + "⫃": { + math: "\\subedot" + }, + "⫄": { + math: "\\supedot" + }, + "⫅": { + math: "\\subseteqq" + }, + "â«…Ìž": { + math: "\\nsubseteqq" + }, + "⫆": { + math: "\\supseteqq" + }, + "⫆̞": { + math: "\\nsupseteqq" + }, + "⫇": { + math: "\\subsim" + }, + "⫈": { + math: "\\supsim" + }, + "⫉": { + math: "\\subsetapprox" + }, + "⫊": { + math: "\\supsetapprox" + }, + "⫋": { + math: "\\subsetneqq" + }, + "⫌": { + math: "\\supsetneqq" + }, + "⫍": { + math: "\\lsqhook" + }, + "⫎": { + math: "\\rsqhook" + }, + "⫏": { + math: "\\csub" + }, + "⫐": { + math: "\\csup" + }, + "⫑": { + math: "\\csube" + }, + "⫒": { + math: "\\csupe" + }, + "⫓": { + math: "\\subsup" + }, + "⫔": { + math: "\\supsub" + }, + "⫕": { + math: "\\subsub" + }, + "⫖": { + math: "\\supsup" + }, + "⫗": { + math: "\\suphsub" + }, + "⫘": { + math: "\\supdsub" + }, + "⫙": { + math: "\\forkv" + }, + "⫚": { + math: "\\topfork" + }, + "⫛": { + math: "\\mlcp" + }, + "⫝̸": { + math: "\\forks" + }, + "⫝": { + math: "\\forksnot" + }, + "⫝̞": { + math: "\\forks" + }, + "⫞": { + math: "\\shortlefttack" + }, + "⫟": { + math: "\\shortdowntack" + }, + "â« ": { + math: "\\shortuptack" + }, + "â«Ą": { + math: "\\perps" + }, + "â«ą": { + math: "\\vDdash" + }, + "â«Ł": { + math: "\\dashV" + }, + "â«€": { + math: "\\Dashv" + }, + "â«„": { + math: "\\DashV" + }, + "â«Š": { + math: "\\varVdash" + }, + "⫧": { + math: "\\Barv" + }, + "â«š": { + math: "\\vBar" + }, + "â«©": { + math: "\\vBarv" + }, + "â«Ș": { + math: "\\Top" + }, + "â«Ź": { + math: "\\Not" + }, + "â«­": { + math: "\\bNot" + }, + "â«ź": { + math: "\\revnmid" + }, + "â«Ż": { + math: "\\cirmid" + }, + "â«°": { + math: "\\midcir" + }, + "⫱": { + math: "\\topcir" + }, + "â«Č": { + math: "\\nhpar" + }, + "â«ł": { + math: "\\parsim" + }, + "â«Ž": { + math: "\\interleave" + }, + "â«”": { + math: "\\nhVvert" + }, + "⫶": { + math: "\\Elztdcol" + }, + "â«·": { + math: "\\lllnest" + }, + "â«ž": { + math: "\\gggnest" + }, + "â«č": { + math: "\\leqqslant" + }, + "â«ș": { + math: "\\geqqslant" + }, + "â«»": { + math: "\\trslash" + }, + "â«Œ": { + math: "\\biginterleave" + }, + "â«œ": { + math: "{{/}\\!\\!{/}}" + }, + "⫝̸⃄": { + math: "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}" + }, + "â«Ÿ": { + math: "\\talloblong" + }, + "â«ż": { + math: "\\bigtalloblong" + }, + "⬒": { + math: "\\squaretopblack" + }, + "⬓": { + math: "\\squarebotblack" + }, + "⬔": { + math: "\\squareurblack" + }, + "⬕": { + math: "\\squarellblack" + }, + "⬖": { + math: "\\diamondleftblack" + }, + "⬗": { + math: "\\diamondrightblack" + }, + "⏘": { + math: "\\diamondtopblack" + }, + "⬙": { + math: "\\diamondbotblack" + }, + "⬚": { + math: "\\dottedsquare" + }, + "⬛": { + math: "\\blacksquare" + }, + "⬜": { + math: "\\square" + }, + "⬝": { + math: "\\vysmblksquare" + }, + "⬞": { + math: "\\vysmwhtsquare" + }, + "⬟": { + math: "\\pentagonblack" + }, + "⏠": { + math: "\\pentagon" + }, + "⏥": { + math: "\\varhexagon" + }, + "⏹": { + math: "\\varhexagonblack" + }, + "⏣": { + math: "\\hexagonblack" + }, + "⏀": { + math: "\\lgblkcircle" + }, + "⏄": { + math: "\\mdblkdiamond" + }, + "⏊": { + math: "\\mdwhtdiamond" + }, + "⏧": { + math: "\\mdblklozenge" + }, + "⏚": { + math: "\\mdwhtlozenge" + }, + "⏩": { + math: "\\smblkdiamond" + }, + "âŹȘ": { + math: "\\smblklozenge" + }, + "⏫": { + math: "\\smwhtlozenge" + }, + "⏏": { + math: "\\blkhorzoval" + }, + "⏭": { + math: "\\whthorzoval" + }, + "⏟": { + math: "\\blkvertoval" + }, + "⏯": { + math: "\\whtvertoval" + }, + "⏰": { + math: "\\circleonleftarrow" + }, + "⏱": { + math: "\\leftthreearrows" + }, + "âŹČ": { + math: "\\leftarrowonoplus" + }, + "⏳": { + math: "\\longleftsquigarrow" + }, + "⏎": { + math: "\\nvtwoheadleftarrow" + }, + "⏔": { + math: "\\nVtwoheadleftarrow" + }, + "⏶": { + math: "\\twoheadmapsfrom" + }, + "⏷": { + math: "\\twoheadleftdbkarrow" + }, + "⏞": { + math: "\\leftdotarrow" + }, + "âŹč": { + math: "\\nvleftarrowtail" + }, + "âŹș": { + math: "\\nVleftarrowtail" + }, + "⏻": { + math: "\\twoheadleftarrowtail" + }, + "âŹŒ": { + math: "\\nvtwoheadleftarrowtail" + }, + "âŹœ": { + math: "\\nVtwoheadleftarrowtail" + }, + "âŹŸ": { + math: "\\leftarrowx" + }, + "⏿": { + math: "\\leftcurvedarrow" + }, + "⭀": { + math: "\\equalleftarrow" + }, + "⭁": { + math: "\\bsimilarleftarrow" + }, + "⭂": { + math: "\\leftarrowbackapprox" + }, + "⭃": { + math: "\\rightarrowgtr" + }, + "⭄": { + math: "\\rightarrowsupset" + }, + "⭅": { + math: "\\LLeftarrow" + }, + "⭆": { + math: "\\RRightarrow" + }, + "⭇": { + math: "\\bsimilarrightarrow" + }, + "⭈": { + math: "\\rightarrowbackapprox" + }, + "⭉": { + math: "\\similarleftarrow" + }, + "⭊": { + math: "\\leftarrowapprox" + }, + "⭋": { + math: "\\leftarrowbsimilar" + }, + "⭌": { + math: "\\rightarrowbsimilar" + }, + "⭐": { + math: "\\medwhitestar" + }, + "⭑": { + math: "\\medblackstar" + }, + "⭒": { + math: "\\smwhitestar" + }, + "⭓": { + math: "\\rightpentagonblack" + }, + "⭔": { + math: "\\rightpentagon" + }, + "〈": { + math: "\\langle" + }, + "〉": { + math: "\\rangle" + }, + "〒": { + math: "\\postalmark" + }, + "〔": { + math: "\\lbrbrak" + }, + "〕": { + math: "\\rbrbrak" + }, + "〚": { + math: "\\openbracketleft" + }, + "〛": { + math: "\\openbracketright" + }, + "〰": { + math: "\\hzigzag" + }, + "ïŹ€": { + text: "ff" + }, + "ïŹ": { + text: "fi" + }, + "ïŹ‚": { + text: "fl" + }, + "ïŹƒ": { + text: "ffi" + }, + "ïŹ„": { + text: "ffl" + }, + "ïŹ…": { + text: "st" + }, + "ïŹ†": { + text: "st" + }, + "ïżœ": { + text: "{\\dbend}" + }, + "𝐀": { + math: "\\mathbf{A}" + }, + "𝐁": { + math: "\\mathbf{B}" + }, + "𝐂": { + math: "\\mathbf{C}" + }, + "𝐃": { + math: "\\mathbf{D}" + }, + "𝐄": { + math: "\\mathbf{E}" + }, + "𝐅": { + math: "\\mathbf{F}" + }, + "𝐆": { + math: "\\mathbf{G}" + }, + "𝐇": { + math: "\\mathbf{H}" + }, + "𝐈": { + math: "\\mathbf{I}" + }, + "𝐉": { + math: "\\mathbf{J}" + }, + "𝐊": { + math: "\\mathbf{K}" + }, + "𝐋": { + math: "\\mathbf{L}" + }, + "𝐌": { + math: "\\mathbf{M}" + }, + "𝐍": { + math: "\\mathbf{N}" + }, + "𝐎": { + math: "\\mathbf{O}" + }, + "𝐏": { + math: "\\mathbf{P}" + }, + "𝐐": { + math: "\\mathbf{Q}" + }, + "𝐑": { + math: "\\mathbf{R}" + }, + "𝐒": { + math: "\\mathbf{S}" + }, + "𝐓": { + math: "\\mathbf{T}" + }, + "𝐔": { + math: "\\mathbf{U}" + }, + "𝐕": { + math: "\\mathbf{V}" + }, + "𝐖": { + math: "\\mathbf{W}" + }, + "𝐗": { + math: "\\mathbf{X}" + }, + "𝐘": { + math: "\\mathbf{Y}" + }, + "𝐙": { + math: "\\mathbf{Z}" + }, + "𝐚": { + math: "\\mathbf{a}" + }, + "𝐛": { + math: "\\mathbf{b}" + }, + "𝐜": { + math: "\\mathbf{c}" + }, + "𝐝": { + math: "\\mathbf{d}" + }, + "𝐞": { + math: "\\mathbf{e}" + }, + "𝐟": { + math: "\\mathbf{f}" + }, + "𝐠": { + math: "\\mathbf{g}" + }, + "𝐡": { + math: "\\mathbf{h}" + }, + "𝐱": { + math: "\\mathbf{i}" + }, + "𝐣": { + math: "\\mathbf{j}" + }, + "đ€": { + math: "\\mathbf{k}" + }, + "đ„": { + math: "\\mathbf{l}" + }, + "𝐩": { + math: "\\mathbf{m}" + }, + "𝐧": { + math: "\\mathbf{n}" + }, + "𝐹": { + math: "\\mathbf{o}" + }, + "đ©": { + math: "\\mathbf{p}" + }, + "đȘ": { + math: "\\mathbf{q}" + }, + "đ«": { + math: "\\mathbf{r}" + }, + "𝐬": { + math: "\\mathbf{s}" + }, + "𝐭": { + math: "\\mathbf{t}" + }, + "𝐼": { + math: "\\mathbf{u}" + }, + "𝐯": { + math: "\\mathbf{v}" + }, + "𝐰": { + math: "\\mathbf{w}" + }, + "đ±": { + math: "\\mathbf{x}" + }, + "đČ": { + math: "\\mathbf{y}" + }, + "𝐳": { + math: "\\mathbf{z}" + }, + "𝐮": { + math: "\\mathsl{A}" + }, + "đ”": { + math: "\\mathsl{B}" + }, + "đ¶": { + math: "\\mathsl{C}" + }, + "đ·": { + math: "\\mathsl{D}" + }, + "𝐾": { + math: "\\mathsl{E}" + }, + "đč": { + math: "\\mathsl{F}" + }, + "đș": { + math: "\\mathsl{G}" + }, + "đ»": { + math: "\\mathsl{H}" + }, + "đŒ": { + math: "\\mathsl{I}" + }, + "đœ": { + math: "\\mathsl{J}" + }, + "đŸ": { + math: "\\mathsl{K}" + }, + "𝐿": { + math: "\\mathsl{L}" + }, + "𝑀": { + math: "\\mathsl{M}" + }, + "𝑁": { + math: "\\mathsl{N}" + }, + "𝑂": { + math: "\\mathsl{O}" + }, + "𝑃": { + math: "\\mathsl{P}" + }, + "𝑄": { + math: "\\mathsl{Q}" + }, + "𝑅": { + math: "\\mathsl{R}" + }, + "𝑆": { + math: "\\mathsl{S}" + }, + "𝑇": { + math: "\\mathsl{T}" + }, + "𝑈": { + math: "\\mathsl{U}" + }, + "𝑉": { + math: "\\mathsl{V}" + }, + "𝑊": { + math: "\\mathsl{W}" + }, + "𝑋": { + math: "\\mathsl{X}" + }, + "𝑌": { + math: "\\mathsl{Y}" + }, + "𝑍": { + math: "\\mathsl{Z}" + }, + "𝑎": { + math: "\\mathsl{a}" + }, + "𝑏": { + math: "\\mathsl{b}" + }, + "𝑐": { + math: "\\mathsl{c}" + }, + "𝑑": { + math: "\\mathsl{d}" + }, + "𝑒": { + math: "\\mathsl{e}" + }, + "𝑓": { + math: "\\mathsl{f}" + }, + "𝑔": { + math: "\\mathsl{g}" + }, + "𝑖": { + math: "\\mathsl{i}" + }, + "𝑗": { + math: "\\mathsl{j}" + }, + "𝑘": { + math: "\\mathsl{k}" + }, + "𝑙": { + math: "\\mathsl{l}" + }, + "𝑚": { + math: "\\mathsl{m}" + }, + "𝑛": { + math: "\\mathsl{n}" + }, + "𝑜": { + math: "\\mathsl{o}" + }, + "𝑝": { + math: "\\mathsl{p}" + }, + "𝑞": { + math: "\\mathsl{q}" + }, + "𝑟": { + math: "\\mathsl{r}" + }, + "𝑠": { + math: "\\mathsl{s}" + }, + "𝑡": { + math: "\\mathsl{t}" + }, + "𝑱": { + math: "\\mathsl{u}" + }, + "𝑣": { + math: "\\mathsl{v}" + }, + "đ‘€": { + math: "\\mathsl{w}" + }, + "đ‘„": { + math: "\\mathsl{x}" + }, + "𝑩": { + math: "\\mathsl{y}" + }, + "𝑧": { + math: "\\mathsl{z}" + }, + "𝑹": { + math: "\\mathbit{A}" + }, + "đ‘©": { + math: "\\mathbit{B}" + }, + "đ‘Ș": { + math: "\\mathbit{C}" + }, + "đ‘«": { + math: "\\mathbit{D}" + }, + "𝑬": { + math: "\\mathbit{E}" + }, + "𝑭": { + math: "\\mathbit{F}" + }, + "𝑼": { + math: "\\mathbit{G}" + }, + "𝑯": { + math: "\\mathbit{H}" + }, + "𝑰": { + math: "\\mathbit{I}" + }, + "đ‘±": { + math: "\\mathbit{J}" + }, + "đ‘Č": { + math: "\\mathbit{K}" + }, + "𝑳": { + math: "\\mathbit{L}" + }, + "𝑮": { + math: "\\mathbit{M}" + }, + "đ‘”": { + math: "\\mathbit{N}" + }, + "đ‘¶": { + math: "\\mathbit{O}" + }, + "đ‘·": { + math: "\\mathbit{P}" + }, + "𝑾": { + math: "\\mathbit{Q}" + }, + "đ‘č": { + math: "\\mathbit{R}" + }, + "đ‘ș": { + math: "\\mathbit{S}" + }, + "đ‘»": { + math: "\\mathbit{T}" + }, + "đ‘Œ": { + math: "\\mathbit{U}" + }, + "đ‘œ": { + math: "\\mathbit{V}" + }, + "đ‘Ÿ": { + math: "\\mathbit{W}" + }, + "𝑿": { + math: "\\mathbit{X}" + }, + "𝒀": { + math: "\\mathbit{Y}" + }, + "𝒁": { + math: "\\mathbit{Z}" + }, + "𝒂": { + math: "\\mathbit{a}" + }, + "𝒃": { + math: "\\mathbit{b}" + }, + "𝒄": { + math: "\\mathbit{c}" + }, + "𝒅": { + math: "\\mathbit{d}" + }, + "𝒆": { + math: "\\mathbit{e}" + }, + "𝒇": { + math: "\\mathbit{f}" + }, + "𝒈": { + math: "\\mathbit{g}" + }, + "𝒉": { + math: "\\mathbit{h}" + }, + "𝒊": { + math: "\\mathbit{i}" + }, + "𝒋": { + math: "\\mathbit{j}" + }, + "𝒌": { + math: "\\mathbit{k}" + }, + "𝒍": { + math: "\\mathbit{l}" + }, + "𝒎": { + math: "\\mathbit{m}" + }, + "𝒏": { + math: "\\mathbit{n}" + }, + "𝒐": { + math: "\\mathbit{o}" + }, + "𝒑": { + math: "\\mathbit{p}" + }, + "𝒒": { + math: "\\mathbit{q}" + }, + "𝒓": { + math: "\\mathbit{r}" + }, + "𝒔": { + math: "\\mathbit{s}" + }, + "𝒕": { + math: "\\mathbit{t}" + }, + "𝒖": { + math: "\\mathbit{u}" + }, + "𝒗": { + math: "\\mathbit{v}" + }, + "𝒘": { + math: "\\mathbit{w}" + }, + "𝒙": { + math: "\\mathbit{x}" + }, + "𝒚": { + math: "\\mathbit{y}" + }, + "𝒛": { + math: "\\mathbit{z}" + }, + "𝒜": { + math: "\\mathscr{A}" + }, + "𝒞": { + math: "\\mathscr{C}" + }, + "𝒟": { + math: "\\mathscr{D}" + }, + "𝒱": { + math: "\\mathscr{G}" + }, + "đ’„": { + math: "\\mathscr{J}" + }, + "𝒩": { + math: "\\mathscr{K}" + }, + "đ’©": { + math: "\\mathscr{N}" + }, + "đ’Ș": { + math: "\\mathscr{O}" + }, + "đ’«": { + math: "\\mathscr{P}" + }, + "𝒬": { + math: "\\mathscr{Q}" + }, + "𝒼": { + math: "\\mathscr{S}" + }, + "𝒯": { + math: "\\mathscr{T}" + }, + "𝒰": { + math: "\\mathscr{U}" + }, + "đ’±": { + math: "\\mathscr{V}" + }, + "đ’Č": { + math: "\\mathscr{W}" + }, + "𝒳": { + math: "\\mathscr{X}" + }, + "𝒮": { + math: "\\mathscr{Y}" + }, + "đ’”": { + math: "\\mathscr{Z}" + }, + "đ’¶": { + math: "\\mathscr{a}" + }, + "đ’·": { + math: "\\mathscr{b}" + }, + "𝒾": { + math: "\\mathscr{c}" + }, + "đ’č": { + math: "\\mathscr{d}" + }, + "đ’»": { + math: "\\mathscr{f}" + }, + "đ’œ": { + math: "\\mathscr{h}" + }, + "đ’Ÿ": { + math: "\\mathscr{i}" + }, + "𝒿": { + math: "\\mathscr{j}" + }, + "𝓀": { + math: "\\mathscr{k}" + }, + "𝓁": { + math: "\\mathscr{l}" + }, + "𝓂": { + math: "\\mathscr{m}" + }, + "𝓃": { + math: "\\mathscr{n}" + }, + "𝓅": { + math: "\\mathscr{p}" + }, + "𝓆": { + math: "\\mathscr{q}" + }, + "𝓇": { + math: "\\mathscr{r}" + }, + "𝓈": { + math: "\\mathscr{s}" + }, + "𝓉": { + math: "\\mathscr{t}" + }, + "𝓊": { + math: "\\mathscr{u}" + }, + "𝓋": { + math: "\\mathscr{v}" + }, + "𝓌": { + math: "\\mathscr{w}" + }, + "𝓍": { + math: "\\mathscr{x}" + }, + "𝓎": { + math: "\\mathscr{y}" + }, + "𝓏": { + math: "\\mathscr{z}" + }, + "𝓐": { + math: "\\mathmit{A}" + }, + "𝓑": { + math: "\\mathmit{B}" + }, + "𝓒": { + math: "\\mathmit{C}" + }, + "𝓓": { + math: "\\mathmit{D}" + }, + "𝓔": { + math: "\\mathmit{E}" + }, + "𝓕": { + math: "\\mathmit{F}" + }, + "𝓖": { + math: "\\mathmit{G}" + }, + "𝓗": { + math: "\\mathmit{H}" + }, + "𝓘": { + math: "\\mathmit{I}" + }, + "𝓙": { + math: "\\mathmit{J}" + }, + "𝓚": { + math: "\\mathmit{K}" + }, + "𝓛": { + math: "\\mathmit{L}" + }, + "𝓜": { + math: "\\mathmit{M}" + }, + "𝓝": { + math: "\\mathmit{N}" + }, + "𝓞": { + math: "\\mathmit{O}" + }, + "𝓟": { + math: "\\mathmit{P}" + }, + "𝓠": { + math: "\\mathmit{Q}" + }, + "𝓡": { + math: "\\mathmit{R}" + }, + "𝓱": { + math: "\\mathmit{S}" + }, + "𝓣": { + math: "\\mathmit{T}" + }, + "đ“€": { + math: "\\mathmit{U}" + }, + "đ“„": { + math: "\\mathmit{V}" + }, + "𝓩": { + math: "\\mathmit{W}" + }, + "𝓧": { + math: "\\mathmit{X}" + }, + "𝓹": { + math: "\\mathmit{Y}" + }, + "đ“©": { + math: "\\mathmit{Z}" + }, + "đ“Ș": { + math: "\\mathmit{a}" + }, + "đ“«": { + math: "\\mathmit{b}" + }, + "𝓬": { + math: "\\mathmit{c}" + }, + "𝓭": { + math: "\\mathmit{d}" + }, + "𝓼": { + math: "\\mathmit{e}" + }, + "𝓯": { + math: "\\mathmit{f}" + }, + "𝓰": { + math: "\\mathmit{g}" + }, + "đ“±": { + math: "\\mathmit{h}" + }, + "đ“Č": { + math: "\\mathmit{i}" + }, + "𝓳": { + math: "\\mathmit{j}" + }, + "𝓮": { + math: "\\mathmit{k}" + }, + "đ“”": { + math: "\\mathmit{l}" + }, + "đ“¶": { + math: "\\mathmit{m}" + }, + "đ“·": { + math: "\\mathmit{n}" + }, + "𝓾": { + math: "\\mathmit{o}" + }, + "đ“č": { + math: "\\mathmit{p}" + }, + "đ“ș": { + math: "\\mathmit{q}" + }, + "đ“»": { + math: "\\mathmit{r}" + }, + "đ“Œ": { + math: "\\mathmit{s}" + }, + "đ“œ": { + math: "\\mathmit{t}" + }, + "đ“Ÿ": { + math: "\\mathmit{u}" + }, + "𝓿": { + math: "\\mathmit{v}" + }, + "𝔀": { + math: "\\mathmit{w}" + }, + "𝔁": { + math: "\\mathmit{x}" + }, + "𝔂": { + math: "\\mathmit{y}" + }, + "𝔃": { + math: "\\mathmit{z}" + }, + "𝔄": { + math: "\\mathfrak{A}" + }, + "𝔅": { + math: "\\mathfrak{B}" + }, + "𝔇": { + math: "\\mathfrak{D}" + }, + "𝔈": { + math: "\\mathfrak{E}" + }, + "𝔉": { + math: "\\mathfrak{F}" + }, + "𝔊": { + math: "\\mathfrak{G}" + }, + "𝔍": { + math: "\\mathfrak{J}" + }, + "𝔎": { + math: "\\mathfrak{K}" + }, + "𝔏": { + math: "\\mathfrak{L}" + }, + "𝔐": { + math: "\\mathfrak{M}" + }, + "𝔑": { + math: "\\mathfrak{N}" + }, + "𝔒": { + math: "\\mathfrak{O}" + }, + "𝔓": { + math: "\\mathfrak{P}" + }, + "𝔔": { + math: "\\mathfrak{Q}" + }, + "𝔖": { + math: "\\mathfrak{S}" + }, + "𝔗": { + math: "\\mathfrak{T}" + }, + "𝔘": { + math: "\\mathfrak{U}" + }, + "𝔙": { + math: "\\mathfrak{V}" + }, + "𝔚": { + math: "\\mathfrak{W}" + }, + "𝔛": { + math: "\\mathfrak{X}" + }, + "𝔜": { + math: "\\mathfrak{Y}" + }, + "𝔞": { + math: "\\mathfrak{a}" + }, + "𝔟": { + math: "\\mathfrak{b}" + }, + "𝔠": { + math: "\\mathfrak{c}" + }, + "𝔡": { + math: "\\mathfrak{d}" + }, + "𝔱": { + math: "\\mathfrak{e}" + }, + "𝔣": { + math: "\\mathfrak{f}" + }, + "đ”€": { + math: "\\mathfrak{g}" + }, + "đ”„": { + math: "\\mathfrak{h}" + }, + "𝔩": { + math: "\\mathfrak{i}" + }, + "𝔧": { + math: "\\mathfrak{j}" + }, + "𝔹": { + math: "\\mathfrak{k}" + }, + "đ”©": { + math: "\\mathfrak{l}" + }, + "đ”Ș": { + math: "\\mathfrak{m}" + }, + "đ”«": { + math: "\\mathfrak{n}" + }, + "𝔬": { + math: "\\mathfrak{o}" + }, + "𝔭": { + math: "\\mathfrak{p}" + }, + "𝔼": { + math: "\\mathfrak{q}" + }, + "𝔯": { + math: "\\mathfrak{r}" + }, + "𝔰": { + math: "\\mathfrak{s}" + }, + "đ”±": { + math: "\\mathfrak{t}" + }, + "đ”Č": { + math: "\\mathfrak{u}" + }, + "𝔳": { + math: "\\mathfrak{v}" + }, + "𝔮": { + math: "\\mathfrak{w}" + }, + "đ””": { + math: "\\mathfrak{x}" + }, + "đ”¶": { + math: "\\mathfrak{y}" + }, + "đ”·": { + math: "\\mathfrak{z}" + }, + "𝔾": { + math: "\\mathbb{A}" + }, + "đ”č": { + math: "\\mathbb{B}" + }, + "đ”»": { + math: "\\mathbb{D}" + }, + "đ”Œ": { + math: "\\mathbb{E}" + }, + "đ”œ": { + math: "\\mathbb{F}" + }, + "đ”Ÿ": { + math: "\\mathbb{G}" + }, + "𝕀": { + math: "\\mathbb{I}" + }, + "𝕁": { + math: "\\mathbb{J}" + }, + "𝕂": { + math: "\\mathbb{K}" + }, + "𝕃": { + math: "\\mathbb{L}" + }, + "𝕄": { + math: "\\mathbb{M}" + }, + "𝕆": { + math: "\\mathbb{O}" + }, + "𝕊": { + math: "\\mathbb{S}" + }, + "𝕋": { + math: "\\mathbb{T}" + }, + "𝕌": { + math: "\\mathbb{U}" + }, + "𝕍": { + math: "\\mathbb{V}" + }, + "𝕎": { + math: "\\mathbb{W}" + }, + "𝕏": { + math: "\\mathbb{X}" + }, + "𝕐": { + math: "\\mathbb{Y}" + }, + "𝕒": { + math: "\\mathbb{a}" + }, + "𝕓": { + math: "\\mathbb{b}" + }, + "𝕔": { + math: "\\mathbb{c}" + }, + "𝕕": { + math: "\\mathbb{d}" + }, + "𝕖": { + math: "\\mathbb{e}" + }, + "𝕗": { + math: "\\mathbb{f}" + }, + "𝕘": { + math: "\\mathbb{g}" + }, + "𝕙": { + math: "\\mathbb{h}" + }, + "𝕚": { + math: "\\mathbb{i}" + }, + "𝕛": { + math: "\\mathbb{j}" + }, + "𝕜": { + math: "\\mathbb{k}" + }, + "𝕝": { + math: "\\mathbb{l}" + }, + "𝕞": { + math: "\\mathbb{m}" + }, + "𝕟": { + math: "\\mathbb{n}" + }, + "𝕠": { + math: "\\mathbb{o}" + }, + "𝕡": { + math: "\\mathbb{p}" + }, + "𝕱": { + math: "\\mathbb{q}" + }, + "𝕣": { + math: "\\mathbb{r}" + }, + "đ•€": { + math: "\\mathbb{s}" + }, + "đ•„": { + math: "\\mathbb{t}" + }, + "𝕩": { + math: "\\mathbb{u}" + }, + "𝕧": { + math: "\\mathbb{v}" + }, + "𝕹": { + math: "\\mathbb{w}" + }, + "đ•©": { + math: "\\mathbb{x}" + }, + "đ•Ș": { + math: "\\mathbb{y}" + }, + "đ•«": { + math: "\\mathbb{z}" + }, + "𝕬": { + math: "\\mathslbb{A}" + }, + "𝕭": { + math: "\\mathslbb{B}" + }, + "𝕼": { + math: "\\mathslbb{C}" + }, + "𝕯": { + math: "\\mathslbb{D}" + }, + "𝕰": { + math: "\\mathslbb{E}" + }, + "đ•±": { + math: "\\mathslbb{F}" + }, + "đ•Č": { + math: "\\mathslbb{G}" + }, + "𝕳": { + math: "\\mathslbb{H}" + }, + "𝕮": { + math: "\\mathslbb{I}" + }, + "đ•”": { + math: "\\mathslbb{J}" + }, + "đ•¶": { + math: "\\mathslbb{K}" + }, + "đ•·": { + math: "\\mathslbb{L}" + }, + "𝕾": { + math: "\\mathslbb{M}" + }, + "đ•č": { + math: "\\mathslbb{N}" + }, + "đ•ș": { + math: "\\mathslbb{O}" + }, + "đ•»": { + math: "\\mathslbb{P}" + }, + "đ•Œ": { + math: "\\mathslbb{Q}" + }, + "đ•œ": { + math: "\\mathslbb{R}" + }, + "đ•Ÿ": { + math: "\\mathslbb{S}" + }, + "𝕿": { + math: "\\mathslbb{T}" + }, + "𝖀": { + math: "\\mathslbb{U}" + }, + "𝖁": { + math: "\\mathslbb{V}" + }, + "𝖂": { + math: "\\mathslbb{W}" + }, + "𝖃": { + math: "\\mathslbb{X}" + }, + "𝖄": { + math: "\\mathslbb{Y}" + }, + "𝖅": { + math: "\\mathslbb{Z}" + }, + "𝖆": { + math: "\\mathslbb{a}" + }, + "𝖇": { + math: "\\mathslbb{b}" + }, + "𝖈": { + math: "\\mathslbb{c}" + }, + "𝖉": { + math: "\\mathslbb{d}" + }, + "𝖊": { + math: "\\mathslbb{e}" + }, + "𝖋": { + math: "\\mathslbb{f}" + }, + "𝖌": { + math: "\\mathslbb{g}" + }, + "𝖍": { + math: "\\mathslbb{h}" + }, + "𝖎": { + math: "\\mathslbb{i}" + }, + "𝖏": { + math: "\\mathslbb{j}" + }, + "𝖐": { + math: "\\mathslbb{k}" + }, + "𝖑": { + math: "\\mathslbb{l}" + }, + "𝖒": { + math: "\\mathslbb{m}" + }, + "𝖓": { + math: "\\mathslbb{n}" + }, + "𝖔": { + math: "\\mathslbb{o}" + }, + "𝖕": { + math: "\\mathslbb{p}" + }, + "𝖖": { + math: "\\mathslbb{q}" + }, + "𝖗": { + math: "\\mathslbb{r}" + }, + "𝖘": { + math: "\\mathslbb{s}" + }, + "𝖙": { + math: "\\mathslbb{t}" + }, + "𝖚": { + math: "\\mathslbb{u}" + }, + "𝖛": { + math: "\\mathslbb{v}" + }, + "𝖜": { + math: "\\mathslbb{w}" + }, + "𝖝": { + math: "\\mathslbb{x}" + }, + "𝖞": { + math: "\\mathslbb{y}" + }, + "𝖟": { + math: "\\mathslbb{z}" + }, + "𝖠": { + math: "\\mathsf{A}" + }, + "𝖡": { + math: "\\mathsf{B}" + }, + "𝖱": { + math: "\\mathsf{C}" + }, + "𝖣": { + math: "\\mathsf{D}" + }, + "đ–€": { + math: "\\mathsf{E}" + }, + "đ–„": { + math: "\\mathsf{F}" + }, + "𝖩": { + math: "\\mathsf{G}" + }, + "𝖧": { + math: "\\mathsf{H}" + }, + "𝖹": { + math: "\\mathsf{I}" + }, + "đ–©": { + math: "\\mathsf{J}" + }, + "đ–Ș": { + math: "\\mathsf{K}" + }, + "đ–«": { + math: "\\mathsf{L}" + }, + "𝖬": { + math: "\\mathsf{M}" + }, + "𝖭": { + math: "\\mathsf{N}" + }, + "𝖼": { + math: "\\mathsf{O}" + }, + "𝖯": { + math: "\\mathsf{P}" + }, + "𝖰": { + math: "\\mathsf{Q}" + }, + "đ–±": { + math: "\\mathsf{R}" + }, + "đ–Č": { + math: "\\mathsf{S}" + }, + "𝖳": { + math: "\\mathsf{T}" + }, + "𝖮": { + math: "\\mathsf{U}" + }, + "đ–”": { + math: "\\mathsf{V}" + }, + "đ–¶": { + math: "\\mathsf{W}" + }, + "đ–·": { + math: "\\mathsf{X}" + }, + "𝖾": { + math: "\\mathsf{Y}" + }, + "đ–č": { + math: "\\mathsf{Z}" + }, + "đ–ș": { + math: "\\mathsf{a}" + }, + "đ–»": { + math: "\\mathsf{b}" + }, + "đ–Œ": { + math: "\\mathsf{c}" + }, + "đ–œ": { + math: "\\mathsf{d}" + }, + "đ–Ÿ": { + math: "\\mathsf{e}" + }, + "𝖿": { + math: "\\mathsf{f}" + }, + "𝗀": { + math: "\\mathsf{g}" + }, + "𝗁": { + math: "\\mathsf{h}" + }, + "𝗂": { + math: "\\mathsf{i}" + }, + "𝗃": { + math: "\\mathsf{j}" + }, + "𝗄": { + math: "\\mathsf{k}" + }, + "𝗅": { + math: "\\mathsf{l}" + }, + "𝗆": { + math: "\\mathsf{m}" + }, + "𝗇": { + math: "\\mathsf{n}" + }, + "𝗈": { + math: "\\mathsf{o}" + }, + "𝗉": { + math: "\\mathsf{p}" + }, + "𝗊": { + math: "\\mathsf{q}" + }, + "𝗋": { + math: "\\mathsf{r}" + }, + "𝗌": { + math: "\\mathsf{s}" + }, + "𝗍": { + math: "\\mathsf{t}" + }, + "𝗎": { + math: "\\mathsf{u}" + }, + "𝗏": { + math: "\\mathsf{v}" + }, + "𝗐": { + math: "\\mathsf{w}" + }, + "𝗑": { + math: "\\mathsf{x}" + }, + "𝗒": { + math: "\\mathsf{y}" + }, + "𝗓": { + math: "\\mathsf{z}" + }, + "𝗔": { + math: "\\mathsfbf{A}" + }, + "𝗕": { + math: "\\mathsfbf{B}" + }, + "𝗖": { + math: "\\mathsfbf{C}" + }, + "𝗗": { + math: "\\mathsfbf{D}" + }, + "𝗘": { + math: "\\mathsfbf{E}" + }, + "𝗙": { + math: "\\mathsfbf{F}" + }, + "𝗚": { + math: "\\mathsfbf{G}" + }, + "𝗛": { + math: "\\mathsfbf{H}" + }, + "𝗜": { + math: "\\mathsfbf{I}" + }, + "𝗝": { + math: "\\mathsfbf{J}" + }, + "𝗞": { + math: "\\mathsfbf{K}" + }, + "𝗟": { + math: "\\mathsfbf{L}" + }, + "𝗠": { + math: "\\mathsfbf{M}" + }, + "𝗡": { + math: "\\mathsfbf{N}" + }, + "𝗱": { + math: "\\mathsfbf{O}" + }, + "𝗣": { + math: "\\mathsfbf{P}" + }, + "đ—€": { + math: "\\mathsfbf{Q}" + }, + "đ—„": { + math: "\\mathsfbf{R}" + }, + "𝗩": { + math: "\\mathsfbf{S}" + }, + "𝗧": { + math: "\\mathsfbf{T}" + }, + "𝗹": { + math: "\\mathsfbf{U}" + }, + "đ—©": { + math: "\\mathsfbf{V}" + }, + "đ—Ș": { + math: "\\mathsfbf{W}" + }, + "đ—«": { + math: "\\mathsfbf{X}" + }, + "𝗬": { + math: "\\mathsfbf{Y}" + }, + "𝗭": { + math: "\\mathsfbf{Z}" + }, + "𝗼": { + math: "\\mathsfbf{a}" + }, + "𝗯": { + math: "\\mathsfbf{b}" + }, + "𝗰": { + math: "\\mathsfbf{c}" + }, + "đ—±": { + math: "\\mathsfbf{d}" + }, + "đ—Č": { + math: "\\mathsfbf{e}" + }, + "𝗳": { + math: "\\mathsfbf{f}" + }, + "𝗮": { + math: "\\mathsfbf{g}" + }, + "đ—”": { + math: "\\mathsfbf{h}" + }, + "đ—¶": { + math: "\\mathsfbf{i}" + }, + "đ—·": { + math: "\\mathsfbf{j}" + }, + "𝗾": { + math: "\\mathsfbf{k}" + }, + "đ—č": { + math: "\\mathsfbf{l}" + }, + "đ—ș": { + math: "\\mathsfbf{m}" + }, + "đ—»": { + math: "\\mathsfbf{n}" + }, + "đ—Œ": { + math: "\\mathsfbf{o}" + }, + "đ—œ": { + math: "\\mathsfbf{p}" + }, + "đ—Ÿ": { + math: "\\mathsfbf{q}" + }, + "𝗿": { + math: "\\mathsfbf{r}" + }, + "𝘀": { + math: "\\mathsfbf{s}" + }, + "𝘁": { + math: "\\mathsfbf{t}" + }, + "𝘂": { + math: "\\mathsfbf{u}" + }, + "𝘃": { + math: "\\mathsfbf{v}" + }, + "𝘄": { + math: "\\mathsfbf{w}" + }, + "𝘅": { + math: "\\mathsfbf{x}" + }, + "𝘆": { + math: "\\mathsfbf{y}" + }, + "𝘇": { + math: "\\mathsfbf{z}" + }, + "𝘈": { + math: "\\mathsfsl{A}" + }, + "𝘉": { + math: "\\mathsfsl{B}" + }, + "𝘊": { + math: "\\mathsfsl{C}" + }, + "𝘋": { + math: "\\mathsfsl{D}" + }, + "𝘌": { + math: "\\mathsfsl{E}" + }, + "𝘍": { + math: "\\mathsfsl{F}" + }, + "𝘎": { + math: "\\mathsfsl{G}" + }, + "𝘏": { + math: "\\mathsfsl{H}" + }, + "𝘐": { + math: "\\mathsfsl{I}" + }, + "𝘑": { + math: "\\mathsfsl{J}" + }, + "𝘒": { + math: "\\mathsfsl{K}" + }, + "𝘓": { + math: "\\mathsfsl{L}" + }, + "𝘔": { + math: "\\mathsfsl{M}" + }, + "𝘕": { + math: "\\mathsfsl{N}" + }, + "𝘖": { + math: "\\mathsfsl{O}" + }, + "𝘗": { + math: "\\mathsfsl{P}" + }, + "𝘘": { + math: "\\mathsfsl{Q}" + }, + "𝘙": { + math: "\\mathsfsl{R}" + }, + "𝘚": { + math: "\\mathsfsl{S}" + }, + "𝘛": { + math: "\\mathsfsl{T}" + }, + "𝘜": { + math: "\\mathsfsl{U}" + }, + "𝘝": { + math: "\\mathsfsl{V}" + }, + "𝘞": { + math: "\\mathsfsl{W}" + }, + "𝘟": { + math: "\\mathsfsl{X}" + }, + "𝘠": { + math: "\\mathsfsl{Y}" + }, + "𝘡": { + math: "\\mathsfsl{Z}" + }, + "𝘱": { + math: "\\mathsfsl{a}" + }, + "𝘣": { + math: "\\mathsfsl{b}" + }, + "đ˜€": { + math: "\\mathsfsl{c}" + }, + "đ˜„": { + math: "\\mathsfsl{d}" + }, + "𝘩": { + math: "\\mathsfsl{e}" + }, + "𝘧": { + math: "\\mathsfsl{f}" + }, + "𝘹": { + math: "\\mathsfsl{g}" + }, + "đ˜©": { + math: "\\mathsfsl{h}" + }, + "đ˜Ș": { + math: "\\mathsfsl{i}" + }, + "đ˜«": { + math: "\\mathsfsl{j}" + }, + "𝘬": { + math: "\\mathsfsl{k}" + }, + "𝘭": { + math: "\\mathsfsl{l}" + }, + "𝘼": { + math: "\\mathsfsl{m}" + }, + "𝘯": { + math: "\\mathsfsl{n}" + }, + "𝘰": { + math: "\\mathsfsl{o}" + }, + "đ˜±": { + math: "\\mathsfsl{p}" + }, + "đ˜Č": { + math: "\\mathsfsl{q}" + }, + "𝘳": { + math: "\\mathsfsl{r}" + }, + "𝘮": { + math: "\\mathsfsl{s}" + }, + "đ˜”": { + math: "\\mathsfsl{t}" + }, + "đ˜¶": { + math: "\\mathsfsl{u}" + }, + "đ˜·": { + math: "\\mathsfsl{v}" + }, + "𝘾": { + math: "\\mathsfsl{w}" + }, + "đ˜č": { + math: "\\mathsfsl{x}" + }, + "đ˜ș": { + math: "\\mathsfsl{y}" + }, + "đ˜»": { + math: "\\mathsfsl{z}" + }, + "đ˜Œ": { + math: "\\mathsfbfsl{A}" + }, + "đ˜œ": { + math: "\\mathsfbfsl{B}" + }, + "đ˜Ÿ": { + math: "\\mathsfbfsl{C}" + }, + "𝘿": { + math: "\\mathsfbfsl{D}" + }, + "𝙀": { + math: "\\mathsfbfsl{E}" + }, + "𝙁": { + math: "\\mathsfbfsl{F}" + }, + "𝙂": { + math: "\\mathsfbfsl{G}" + }, + "𝙃": { + math: "\\mathsfbfsl{H}" + }, + "𝙄": { + math: "\\mathsfbfsl{I}" + }, + "𝙅": { + math: "\\mathsfbfsl{J}" + }, + "𝙆": { + math: "\\mathsfbfsl{K}" + }, + "𝙇": { + math: "\\mathsfbfsl{L}" + }, + "𝙈": { + math: "\\mathsfbfsl{M}" + }, + "𝙉": { + math: "\\mathsfbfsl{N}" + }, + "𝙊": { + math: "\\mathsfbfsl{O}" + }, + "𝙋": { + math: "\\mathsfbfsl{P}" + }, + "𝙌": { + math: "\\mathsfbfsl{Q}" + }, + "𝙍": { + math: "\\mathsfbfsl{R}" + }, + "𝙎": { + math: "\\mathsfbfsl{S}" + }, + "𝙏": { + math: "\\mathsfbfsl{T}" + }, + "𝙐": { + math: "\\mathsfbfsl{U}" + }, + "𝙑": { + math: "\\mathsfbfsl{V}" + }, + "𝙒": { + math: "\\mathsfbfsl{W}" + }, + "𝙓": { + math: "\\mathsfbfsl{X}" + }, + "𝙔": { + math: "\\mathsfbfsl{Y}" + }, + "𝙕": { + math: "\\mathsfbfsl{Z}" + }, + "𝙖": { + math: "\\mathsfbfsl{a}" + }, + "𝙗": { + math: "\\mathsfbfsl{b}" + }, + "𝙘": { + math: "\\mathsfbfsl{c}" + }, + "𝙙": { + math: "\\mathsfbfsl{d}" + }, + "𝙚": { + math: "\\mathsfbfsl{e}" + }, + "𝙛": { + math: "\\mathsfbfsl{f}" + }, + "𝙜": { + math: "\\mathsfbfsl{g}" + }, + "𝙝": { + math: "\\mathsfbfsl{h}" + }, + "𝙞": { + math: "\\mathsfbfsl{i}" + }, + "𝙟": { + math: "\\mathsfbfsl{j}" + }, + "𝙠": { + math: "\\mathsfbfsl{k}" + }, + "𝙡": { + math: "\\mathsfbfsl{l}" + }, + "𝙱": { + math: "\\mathsfbfsl{m}" + }, + "𝙣": { + math: "\\mathsfbfsl{n}" + }, + "đ™€": { + math: "\\mathsfbfsl{o}" + }, + "đ™„": { + math: "\\mathsfbfsl{p}" + }, + "𝙩": { + math: "\\mathsfbfsl{q}" + }, + "𝙧": { + math: "\\mathsfbfsl{r}" + }, + "𝙹": { + math: "\\mathsfbfsl{s}" + }, + "đ™©": { + math: "\\mathsfbfsl{t}" + }, + "đ™Ș": { + math: "\\mathsfbfsl{u}" + }, + "đ™«": { + math: "\\mathsfbfsl{v}" + }, + "𝙬": { + math: "\\mathsfbfsl{w}" + }, + "𝙭": { + math: "\\mathsfbfsl{x}" + }, + "𝙼": { + math: "\\mathsfbfsl{y}" + }, + "𝙯": { + math: "\\mathsfbfsl{z}" + }, + "𝙰": { + math: "\\mathtt{A}" + }, + "đ™±": { + math: "\\mathtt{B}" + }, + "đ™Č": { + math: "\\mathtt{C}" + }, + "𝙳": { + math: "\\mathtt{D}" + }, + "𝙮": { + math: "\\mathtt{E}" + }, + "đ™”": { + math: "\\mathtt{F}" + }, + "đ™¶": { + math: "\\mathtt{G}" + }, + "đ™·": { + math: "\\mathtt{H}" + }, + "𝙾": { + math: "\\mathtt{I}" + }, + "đ™č": { + math: "\\mathtt{J}" + }, + "đ™ș": { + math: "\\mathtt{K}" + }, + "đ™»": { + math: "\\mathtt{L}" + }, + "đ™Œ": { + math: "\\mathtt{M}" + }, + "đ™œ": { + math: "\\mathtt{N}" + }, + "đ™Ÿ": { + math: "\\mathtt{O}" + }, + "𝙿": { + math: "\\mathtt{P}" + }, + "𝚀": { + math: "\\mathtt{Q}" + }, + "𝚁": { + math: "\\mathtt{R}" + }, + "𝚂": { + math: "\\mathtt{S}" + }, + "𝚃": { + math: "\\mathtt{T}" + }, + "𝚄": { + math: "\\mathtt{U}" + }, + "𝚅": { + math: "\\mathtt{V}" + }, + "𝚆": { + math: "\\mathtt{W}" + }, + "𝚇": { + math: "\\mathtt{X}" + }, + "𝚈": { + math: "\\mathtt{Y}" + }, + "𝚉": { + math: "\\mathtt{Z}" + }, + "𝚊": { + math: "\\mathtt{a}" + }, + "𝚋": { + math: "\\mathtt{b}" + }, + "𝚌": { + math: "\\mathtt{c}" + }, + "𝚍": { + math: "\\mathtt{d}" + }, + "𝚎": { + math: "\\mathtt{e}" + }, + "𝚏": { + math: "\\mathtt{f}" + }, + "𝚐": { + math: "\\mathtt{g}" + }, + "𝚑": { + math: "\\mathtt{h}" + }, + "𝚒": { + math: "\\mathtt{i}" + }, + "𝚓": { + math: "\\mathtt{j}" + }, + "𝚔": { + math: "\\mathtt{k}" + }, + "𝚕": { + math: "\\mathtt{l}" + }, + "𝚖": { + math: "\\mathtt{m}" + }, + "𝚗": { + math: "\\mathtt{n}" + }, + "𝚘": { + math: "\\mathtt{o}" + }, + "𝚙": { + math: "\\mathtt{p}" + }, + "𝚚": { + math: "\\mathtt{q}" + }, + "𝚛": { + math: "\\mathtt{r}" + }, + "𝚜": { + math: "\\mathtt{s}" + }, + "𝚝": { + math: "\\mathtt{t}" + }, + "𝚞": { + math: "\\mathtt{u}" + }, + "𝚟": { + math: "\\mathtt{v}" + }, + "𝚠": { + math: "\\mathtt{w}" + }, + "𝚡": { + math: "\\mathtt{x}" + }, + "𝚱": { + math: "\\mathtt{y}" + }, + "𝚣": { + math: "\\mathtt{z}" + }, + "đš€": { + math: "\\imath" + }, + "đš„": { + math: "\\jmath" + }, + "𝚹": { + math: "\\mathbf{A}" + }, + "đš©": { + math: "\\mathbf{B}" + }, + "đšȘ": { + math: "\\mathbf{\\Gamma}" + }, + "đš«": { + math: "\\mathbf{\\Delta}" + }, + "𝚬": { + math: "\\mathbf{E}" + }, + "𝚭": { + math: "\\mathbf{Z}" + }, + "𝚼": { + math: "\\mathbf{H}" + }, + "𝚯": { + math: "\\mathbf{\\Theta}" + }, + "𝚰": { + math: "\\mathbf{I}" + }, + "đš±": { + math: "\\mathbf{K}" + }, + "đšČ": { + math: "\\mathbf{\\Lambda}" + }, + "𝚳": { + math: "M" + }, + "𝚮": { + math: "N" + }, + "đš”": { + math: "\\mathbf{\\Xi}" + }, + "đš¶": { + math: "O" + }, + "đš·": { + math: "\\mathbf{\\Pi}" + }, + "𝚾": { + math: "\\mathbf{P}" + }, + "đšč": { + math: "\\mathbf{\\vartheta}" + }, + "đšș": { + math: "\\mathbf{\\Sigma}" + }, + "đš»": { + math: "\\mathbf{T}" + }, + "đšŒ": { + math: "\\mathbf{\\Upsilon}" + }, + "đšœ": { + math: "\\mathbf{\\Phi}" + }, + "đšŸ": { + math: "\\mathbf{X}" + }, + "𝚿": { + math: "\\mathbf{\\Psi}" + }, + "𝛀": { + math: "\\mathbf{\\Omega}" + }, + "𝛁": { + math: "\\mathbf{\\nabla}" + }, + "𝛂": { + math: "\\mathbf{\\alpha}" + }, + "𝛃": { + math: "\\mathbf{\\beta}" + }, + "𝛄": { + math: "\\mathbf{\\gamma}" + }, + "𝛅": { + math: "\\mathbf{\\delta}" + }, + "𝛆": { + math: "\\mathbf{\\epsilon}" + }, + "𝛇": { + math: "\\mathbf{\\zeta}" + }, + "𝛈": { + math: "\\mathbf{\\eta}" + }, + "𝛉": { + math: "\\mathbf{\\theta}" + }, + "𝛊": { + math: "\\mathbf{I}" + }, + "𝛋": { + math: "\\mathbf{K}" + }, + "𝛌": { + math: "\\mathbf{\\lambda}" + }, + "𝛍": { + math: "M" + }, + "𝛎": { + math: "N" + }, + "𝛏": { + math: "\\mathbf{\\xi}" + }, + "𝛐": { + math: "O" + }, + "𝛑": { + math: "\\mathbf{\\pi}" + }, + "𝛒": { + math: "\\mathbf{P}" + }, + "𝛓": { + math: "\\mathbf{\\varsigma}" + }, + "𝛔": { + math: "\\mathbf{\\sigma}" + }, + "𝛕": { + math: "\\mathbf{T}" + }, + "𝛖": { + math: "\\mathbf{\\upsilon}" + }, + "𝛗": { + math: "\\mathbf{\\phi}" + }, + "𝛘": { + math: "\\mathbf{X}" + }, + "𝛙": { + math: "\\mathbf{\\psi}" + }, + "𝛚": { + math: "\\mathbf{\\omega}" + }, + "𝛛": { + math: "\\partial" + }, + "𝛜": { + math: "\\in" + }, + "𝛝": { + math: "\\mathbf{\\vartheta}" + }, + "𝛞": { + math: "\\mathbf{\\varkappa}" + }, + "𝛟": { + math: "\\mathbf{\\phi}" + }, + "𝛠": { + math: "\\mathbf{\\varrho}" + }, + "𝛡": { + math: "\\mathbf{\\varpi}" + }, + "𝛱": { + math: "\\mathsl{A}" + }, + "𝛣": { + math: "\\mathsl{B}" + }, + "đ›€": { + math: "\\mathsl{\\Gamma}" + }, + "đ›„": { + math: "\\mathsl{\\Delta}" + }, + "𝛩": { + math: "\\mathsl{E}" + }, + "𝛧": { + math: "\\mathsl{Z}" + }, + "𝛹": { + math: "\\mathsl{H}" + }, + "đ›©": { + math: "\\mathsl{\\Theta}" + }, + "đ›Ș": { + math: "\\mathsl{I}" + }, + "đ›«": { + math: "\\mathsl{K}" + }, + "𝛬": { + math: "\\mathsl{\\Lambda}" + }, + "𝛭": { + math: "M" + }, + "𝛼": { + math: "N" + }, + "𝛯": { + math: "\\mathsl{\\Xi}" + }, + "𝛰": { + math: "O" + }, + "đ›±": { + math: "\\mathsl{\\Pi}" + }, + "đ›Č": { + math: "\\mathsl{P}" + }, + "𝛳": { + math: "\\mathsl{\\Theta}" + }, + "𝛮": { + math: "\\mathsl{\\Sigma}" + }, + "đ›”": { + math: "\\mathsl{T}" + }, + "đ›¶": { + math: "\\mathsl{\\Upsilon}" + }, + "đ›·": { + math: "\\mathsl{\\Phi}" + }, + "𝛾": { + math: "\\mathsl{X}" + }, + "đ›č": { + math: "\\mathsl{\\Psi}" + }, + "đ›ș": { + math: "\\mathsl{\\Omega}" + }, + "đ›»": { + math: "\\mathsl{\\nabla}" + }, + "đ›Œ": { + math: "\\mathsl{A}" + }, + "đ›œ": { + math: "\\mathsl{B}" + }, + "đ›Ÿ": { + math: "\\mathsl{\\gamma}" + }, + "𝛿": { + math: "\\mathsl{\\delta}" + }, + "𝜀": { + math: "\\mathsl{E}" + }, + "𝜁": { + math: "\\mathsl{Z}" + }, + "𝜂": { + math: "\\mathsl{H}" + }, + "𝜃": { + math: "\\mathsl{\\theta}" + }, + "𝜄": { + math: "\\mathsl{I}" + }, + "𝜅": { + math: "\\mathsl{K}" + }, + "𝜆": { + math: "\\mathsl{\\lambda}" + }, + "𝜇": { + math: "\\mu" + }, + "𝜈": { + math: "\\nu" + }, + "𝜉": { + math: "\\mathsl{\\xi}" + }, + "𝜊": { + math: "o" + }, + "𝜋": { + math: "\\mathsl{\\pi}" + }, + "𝜌": { + math: "\\mathsl{P}" + }, + "𝜍": { + math: "\\mathsl{\\varsigma}" + }, + "𝜎": { + math: "\\mathsl{\\sigma}" + }, + "𝜏": { + math: "\\mathsl{T}" + }, + "𝜐": { + math: "\\mathsl{\\upsilon}" + }, + "𝜑": { + math: "\\mathsl{\\varphi}" + }, + "𝜒": { + math: "\\mathsl{X}" + }, + "𝜓": { + math: "\\mathsl{\\psi}" + }, + "𝜔": { + math: "\\mathsl{\\omega}" + }, + "𝜕": { + math: "\\partial" + }, + "𝜖": { + math: "\\in" + }, + "𝜗": { + math: "\\mathsl{\\vartheta}" + }, + "𝜘": { + math: "\\mathsl{\\varkappa}" + }, + "𝜙": { + math: "\\mathsl{\\phi}" + }, + "𝜚": { + math: "\\mathsl{\\varrho}" + }, + "𝜛": { + math: "\\mathsl{\\varpi}" + }, + "𝜜": { + math: "\\mathbit{A}" + }, + "𝜝": { + math: "\\mathbit{B}" + }, + "𝜞": { + math: "\\mathbit{\\Gamma}" + }, + "𝜟": { + math: "\\mathbit{\\Delta}" + }, + "𝜠": { + math: "\\mathbit{E}" + }, + "𝜡": { + math: "\\mathbit{Z}" + }, + "𝜱": { + math: "\\mathbit{H}" + }, + "𝜣": { + math: "\\mathbit{\\Theta}" + }, + "đœ€": { + math: "\\mathbit{I}" + }, + "đœ„": { + math: "\\mathbit{K}" + }, + "𝜩": { + math: "\\mathbit{\\Lambda}" + }, + "𝜧": { + math: "M" + }, + "𝜹": { + math: "N" + }, + "đœ©": { + math: "\\mathbit{\\Xi}" + }, + "đœȘ": { + math: "O" + }, + "đœ«": { + math: "\\mathbit{\\Pi}" + }, + "𝜬": { + math: "\\mathbit{P}" + }, + "𝜭": { + math: "\\mathbit{O}" + }, + "𝜼": { + math: "\\mathbit{\\Sigma}" + }, + "𝜯": { + math: "\\mathbit{T}" + }, + "𝜰": { + math: "\\mathbit{\\Upsilon}" + }, + "đœ±": { + math: "\\mathbit{\\Phi}" + }, + "đœČ": { + math: "\\mathbit{X}" + }, + "𝜳": { + math: "\\mathbit{\\Psi}" + }, + "𝜮": { + math: "\\mathbit{\\Omega}" + }, + "đœ”": { + math: "\\mathbit{\\nabla}" + }, + "đœ¶": { + math: "\\mathbit{\\alpha}" + }, + "đœ·": { + math: "\\mathbit{\\beta}" + }, + "𝜾": { + math: "\\mathbit{\\gamma}" + }, + "đœč": { + math: "\\mathbit{\\delta}" + }, + "đœș": { + math: "\\mathbit{\\epsilon}" + }, + "đœ»": { + math: "\\mathbit{\\zeta}" + }, + "đœŒ": { + math: "\\mathbit{\\eta}" + }, + "đœœ": { + math: "\\mathbit{\\theta}" + }, + "đœŸ": { + math: "\\mathbit{\\imath}" + }, + "𝜿": { + math: "\\mathbit{\\kappa}" + }, + "𝝀": { + math: "\\mathbit{\\lambda}" + }, + "𝝁": { + math: "\\mu" + }, + "𝝂": { + math: "N" + }, + "𝝃": { + math: "\\mathbit{\\xi}" + }, + "𝝄": { + math: "O" + }, + "𝝅": { + math: "\\mathbit{\\pi}" + }, + "𝝆": { + math: "\\mathbit{\\rho}" + }, + "𝝇": { + math: "\\mathbit{\\varsigma}" + }, + "𝝈": { + math: "\\mathbit{\\sigma}" + }, + "𝝉": { + math: "\\mathbit{\\tau}" + }, + "𝝊": { + math: "\\mathbit{\\upsilon}" + }, + "𝝋": { + math: "\\mathbit{\\varphi}" + }, + "𝝌": { + math: "\\mathbit{\\chi}" + }, + "𝝍": { + math: "\\mathbit{\\psi}" + }, + "𝝎": { + math: "\\mathbit{\\omega}" + }, + "𝝏": { + math: "\\partial" + }, + "𝝐": { + math: "\\in" + }, + "𝝑": { + math: "\\mathbit{\\vartheta}" + }, + "𝝒": { + math: "\\mathbit{\\varkappa}" + }, + "𝝓": { + math: "\\mathbit{\\phi}" + }, + "𝝔": { + math: "\\mathbit{\\varrho}" + }, + "𝝕": { + math: "\\mathbit{\\varpi}" + }, + "𝝖": { + math: "\\mathsfbf{A}" + }, + "𝝗": { + math: "\\mathsfbf{B}" + }, + "𝝘": { + math: "\\mathsfbf{\\Gamma}" + }, + "𝝙": { + math: "\\mathsfbf{\\Delta}" + }, + "𝝚": { + math: "\\mathsfbf{E}" + }, + "𝝛": { + math: "\\mathsfbf{Z}" + }, + "𝝜": { + math: "\\mathsfbf{H}" + }, + "𝝝": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝞": { + math: "\\mathsfbf{I}" + }, + "𝝟": { + math: "\\mathsfbf{K}" + }, + "𝝠": { + math: "\\mathsfbf{\\Lambda}" + }, + "𝝡": { + math: "M" + }, + "𝝱": { + math: "N" + }, + "𝝣": { + math: "\\mathsfbf{\\Xi}" + }, + "đ€": { + math: "O" + }, + "đ„": { + math: "\\mathsfbf{\\Pi}" + }, + "𝝩": { + math: "\\mathsfbf{P}" + }, + "𝝧": { + math: "\\mathsfbf{\\Theta}" + }, + "𝝹": { + math: "\\mathsfbf{\\Sigma}" + }, + "đ©": { + math: "\\mathsfbf{T}" + }, + "đȘ": { + math: "\\mathsfbf{\\Upsilon}" + }, + "đ«": { + math: "\\mathsfbf{\\Phi}" + }, + "𝝬": { + math: "\\mathsfbf{X}" + }, + "𝝭": { + math: "\\mathsfbf{\\Psi}" + }, + "𝝼": { + math: "\\mathsfbf{\\Omega}" + }, + "𝝯": { + math: "\\mathsfbf{\\nabla}" + }, + "𝝰": { + math: "\\mathsfbf{\\alpha}" + }, + "đ±": { + math: "\\mathsfbf{\\beta}" + }, + "đČ": { + math: "\\mathsfbf{\\gamma}" + }, + "𝝳": { + math: "\\mathsfbf{\\delta}" + }, + "𝝮": { + math: "\\mathsfbf{\\varepsilon}" + }, + "đ”": { + math: "\\mathsfbf{\\zeta}" + }, + "đ¶": { + math: "\\mathsfbf{\\eta}" + }, + "đ·": { + math: "\\mathsfbf{\\theta}" + }, + "𝝾": { + math: "\\mathsfbf{\\imath}" + }, + "đč": { + math: "\\mathsfbf{\\kappa}" + }, + "đș": { + math: "\\mathsfbf{\\lambda}" + }, + "đ»": { + math: "\\mu" + }, + "đŒ": { + math: "\\nu" + }, + "đœ": { + math: "\\mathsfbf{\\xi}" + }, + "đŸ": { + math: "o" + }, + "𝝿": { + math: "\\mathsfbf{\\pi}" + }, + "𝞀": { + math: "\\mathsfbf{\\rho}" + }, + "𝞁": { + math: "\\mathsfbf{\\varsigma}" + }, + "𝞂": { + math: "\\mathsfbf{\\sigma}" + }, + "𝞃": { + math: "\\mathsfbf{\\tau}" + }, + "𝞄": { + math: "\\mathsfbf{\\upsilon}" + }, + "𝞅": { + math: "\\mathsfbf{\\varphi}" + }, + "𝞆": { + math: "\\mathsfbf{\\chi}" + }, + "𝞇": { + math: "\\mathsfbf{\\psi}" + }, + "𝞈": { + math: "\\mathsfbf{\\omega}" + }, + "𝞉": { + math: "\\partial" + }, + "𝞊": { + math: "\\in" + }, + "𝞋": { + math: "\\mathsfbf{\\vartheta}" + }, + "𝞌": { + math: "\\mathsfbf{\\varkappa}" + }, + "𝞍": { + math: "\\mathsfbf{\\phi}" + }, + "𝞎": { + math: "\\mathsfbf{\\varrho}" + }, + "𝞏": { + math: "\\mathsfbf{\\varpi}" + }, + "𝞐": { + math: "\\mathsfbfsl{A}" + }, + "𝞑": { + math: "\\mathsfbfsl{B}" + }, + "𝞒": { + math: "\\mathsfbfsl{\\Gamma}" + }, + "𝞓": { + math: "\\mathsfbfsl{\\Delta}" + }, + "𝞔": { + math: "\\mathsfbfsl{E}" + }, + "𝞕": { + math: "\\mathsfbfsl{Z}" + }, + "𝞖": { + math: "\\mathsfbfsl{H}" + }, + "𝞗": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞘": { + math: "\\mathsfbfsl{I}" + }, + "𝞙": { + math: "\\mathsfbfsl{K}" + }, + "𝞚": { + math: "\\mathsfbfsl{\\Lambda}" + }, + "𝞛": { + math: "\\mathsfbfsl{M}" + }, + "𝞜": { + math: "\\mathsfbfsl{N}" + }, + "𝞝": { + math: "\\mathsfbfsl{\\Xi}" + }, + "𝞞": { + math: "\\mathsfbfsl{O}" + }, + "𝞟": { + math: "\\mathsfbfsl{\\Pi}" + }, + "𝞠": { + math: "\\mathsfbfsl{P}" + }, + "𝞡": { + math: "\\mathsfbfsl{\\Theta}" + }, + "𝞱": { + math: "\\mathsfbfsl{\\Sigma}" + }, + "𝞣": { + math: "\\mathsfbfsl{T}" + }, + "đž€": { + math: "\\mathsfbfsl{\\Upsilon}" + }, + "đž„": { + math: "\\mathsfbfsl{\\Phi}" + }, + "𝞩": { + math: "\\mathsfbfsl{X}" + }, + "𝞧": { + math: "\\mathsfbfsl{\\Psi}" + }, + "𝞹": { + math: "\\mathsfbfsl{\\Omega}" + }, + "đž©": { + math: "\\mathsfbfsl{\\nabla}" + }, + "đžȘ": { + math: "\\mathsfbfsl{\\alpha}" + }, + "đž«": { + math: "\\mathsfbfsl{\\beta}" + }, + "𝞬": { + math: "\\mathsfbfsl{\\gamma}" + }, + "𝞭": { + math: "\\mathsfbfsl{\\delta}" + }, + "𝞼": { + math: "\\mathsfbfsl{\\varepsilon}" + }, + "𝞯": { + math: "\\mathsfbfsl{\\zeta}" + }, + "𝞰": { + math: "\\mathsfbfsl{\\eta}" + }, + "đž±": { + math: "\\mathsfbfsl{\\theta}" + }, + "đžČ": { + math: "\\mathsfbfsl{\\imath}" + }, + "𝞳": { + math: "\\mathsfbfsl{\\kappa}" + }, + "𝞮": { + math: "\\mathsfbfsl{\\lambda}" + }, + "đž”": { + math: "\\mu" + }, + "đž¶": { + math: "\\nu" + }, + "đž·": { + math: "\\mathsfbfsl{\\xi}" + }, + "𝞾": { + math: "o" + }, + "đžč": { + math: "\\mathsfbfsl{\\pi}" + }, + "đžș": { + math: "\\mathsfbfsl{\\rho}" + }, + "đž»": { + math: "\\mathsfbfsl{\\varsigma}" + }, + "đžŒ": { + math: "\\mathsfbfsl{\\sigma}" + }, + "đžœ": { + math: "\\mathsfbfsl{\\tau}" + }, + "đžŸ": { + math: "\\mathsfbfsl{\\upsilon}" + }, + "𝞿": { + math: "\\mathsfbfsl{\\varphi}" + }, + "𝟀": { + math: "\\mathsfbfsl{\\chi}" + }, + "𝟁": { + math: "\\mathsfbfsl{\\psi}" + }, + "𝟂": { + math: "\\mathsfbfsl{\\omega}" + }, + "𝟃": { + math: "\\partial" + }, + "𝟄": { + math: "\\in" + }, + "𝟅": { + math: "\\mathsfbfsl{\\vartheta}" + }, + "𝟆": { + math: "\\mathsfbfsl{\\varkappa}" + }, + "𝟇": { + math: "\\mathsfbfsl{\\phi}" + }, + "𝟈": { + math: "\\mathsfbfsl{\\varrho}" + }, + "𝟉": { + math: "\\mathsfbfsl{\\varpi}" + }, + "𝟊": { + math: "\\mbfDigamma" + }, + "𝟋": { + math: "\\mbfdigamma" + }, + "𝟎": { + math: "\\mathbf{0}" + }, + "𝟏": { + math: "\\mathbf{1}" + }, + "𝟐": { + math: "\\mathbf{2}" + }, + "𝟑": { + math: "\\mathbf{3}" + }, + "𝟒": { + math: "\\mathbf{4}" + }, + "𝟓": { + math: "\\mathbf{5}" + }, + "𝟔": { + math: "\\mathbf{6}" + }, + "𝟕": { + math: "\\mathbf{7}" + }, + "𝟖": { + math: "\\mathbf{8}" + }, + "𝟗": { + math: "\\mathbf{9}" + }, + "𝟘": { + math: "\\mathbb{0}" + }, + "𝟙": { + math: "\\mathbb{1}" + }, + "𝟚": { + math: "\\mathbb{2}" + }, + "𝟛": { + math: "\\mathbb{3}" + }, + "𝟜": { + math: "\\mathbb{4}" + }, + "𝟝": { + math: "\\mathbb{5}" + }, + "𝟞": { + math: "\\mathbb{6}" + }, + "𝟟": { + math: "\\mathbb{7}" + }, + "𝟠": { + math: "\\mathbb{8}" + }, + "𝟡": { + math: "\\mathbb{9}" + }, + "𝟱": { + math: "\\mathsf{0}" + }, + "𝟣": { + math: "\\mathsf{1}" + }, + "đŸ€": { + math: "\\mathsf{2}" + }, + "đŸ„": { + math: "\\mathsf{3}" + }, + "𝟩": { + math: "\\mathsf{4}" + }, + "𝟧": { + math: "\\mathsf{5}" + }, + "𝟹": { + math: "\\mathsf{6}" + }, + "đŸ©": { + math: "\\mathsf{7}" + }, + "đŸȘ": { + math: "\\mathsf{8}" + }, + "đŸ«": { + math: "\\mathsf{9}" + }, + "𝟬": { + math: "\\mathsfbf{0}" + }, + "𝟭": { + math: "\\mathsfbf{1}" + }, + "𝟼": { + math: "\\mathsfbf{2}" + }, + "𝟯": { + math: "\\mathsfbf{3}" + }, + "𝟰": { + math: "\\mathsfbf{4}" + }, + "đŸ±": { + math: "\\mathsfbf{5}" + }, + "đŸČ": { + math: "\\mathsfbf{6}" + }, + "𝟳": { + math: "\\mathsfbf{7}" + }, + "𝟮": { + math: "\\mathsfbf{8}" + }, + "đŸ”": { + math: "\\mathsfbf{9}" + }, + "đŸ¶": { + math: "\\mathtt{0}" + }, + "đŸ·": { + math: "\\mathtt{1}" + }, + "𝟾": { + math: "\\mathtt{2}" + }, + "đŸč": { + math: "\\mathtt{3}" + }, + "đŸș": { + math: "\\mathtt{4}" + }, + "đŸ»": { + math: "\\mathtt{5}" + }, + "đŸŒ": { + math: "\\mathtt{6}" + }, + "đŸœ": { + math: "\\mathtt{7}" + }, + "đŸŸ": { + math: "\\mathtt{8}" + }, + "𝟿": { + math: "\\mathtt{9}" + } + }; + + var $$2 = { + math: "\\$", + text: "\\$" + }; + var _$2 = { + math: "\\_", + text: "\\_" + }; + var require$$2 = { + "#": { + math: "\\#", + text: "\\#" + }, + $: $$2, + "%": { + math: "\\%", + text: "\\%" + }, + "&": { + math: "\\&", + text: "\\&" + }, + "/​": { + text: "\\slash", + commandspacer: true + }, + "<": { + math: "<" + }, + ">": { + math: ">" + }, + "\\": { + math: "\\backslash", + text: "\\textbackslash", + commandspacer: true + }, + "^": { + math: "\\sphat", + text: "\\^" + }, + _: _$2, + "{": { + math: "\\lbrace", + text: "\\{" + }, + "}": { + math: "\\rbrace", + text: "\\}" + }, + "~": { + math: "\\sptilde", + text: "\\textasciitilde", + commandspacer: true + }, + " ": { + math: "~", + space: true, + text: "~" + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\quad", + space: true + }, + " ": { + text: "\\hspace{0.6em}", + space: true + }, + " ": { + math: "\\quad", + space: true, + text: "\\hspace{1em}" + }, + " ": { + text: "\\;", + space: true + }, + " ": { + text: "\\hspace{0.25em}", + space: true + }, + " ": { + text: "\\hspace{0.166em}", + space: true + }, + " ": { + text: "\\hphantom{0}", + space: true + }, + " ": { + text: "\\hphantom{,}", + space: true + }, + " ": { + text: "\\,", + space: true + }, + " ": { + math: "\\mkern1mu", + space: true + }, + "​": { + text: "\\mbox", + commandspacer: true, + space: true + }, + " ": { + text: " ", + space: true + }, + " ": { + math: "\\:", + space: true, + text: "\\:" + } + }; + + var require$$3 = { + "\\#": "#", + "\\$": "$", + "\\%": "%", + "\\&": "&", + "\\slash": "/​", + "\\textless": "<", + "\\textgreater": ">", + "\\LaTeX": "LaTeX", + "\\textbackslash": "\\", + "\\backslash": "\\", + "\\": "\\", + "\\^": "^", + "\\sphat": "^", + "\\_": "_", + "\\t{ia}": "iïž aïžĄ", + "{\\~ w}": "w̃", + "\\{": "{", + "\\lbrace": "{", + "\\textbar": "|", + "\\}": "}", + "\\rbrace": "}", + "\\textasciitilde": "~", + "\\sptilde": "~", + "\\textexclamdown": "ÂĄ", + "\\textcent": "Âą", + "\\cent": "Âą", + "\\textsterling": "ÂŁ", + "\\pounds": "ÂŁ", + "\\textcurrency": "€", + "\\textyen": "„", + "\\yen": "„", + "\\textbrokenbar": "Š", + "\\textsection": "§", + "\\textasciidieresis": "š", + "\\spddot": "š", + "\\textcopyright": "©", + "\\textordfeminine": "ÂȘ", + "\\guillemotleft": "«", + "\\lnot": "ÂŹ", + "\\neg": "ÂŹ", + "\\-": "­", + "\\textregistered": "Âź", + "\\circledR": "Âź", + "\\textasciimacron": "ÂŻ", + "\\textdegree": "°", + "^\\circ": "°", + "\\pm": "±", + "^{2}": "ÂČ", + "^{3}": "Âł", + "\\textasciiacute": "ÂŽ", + "\\textmu": "”", + "\\textparagraph": "¶", + "^{1}": "Âč", + "\\textordmasculine": "Âș", + "\\guillemotright": "»", + "\\frac{1}{4}": "ÂŒ", + "\\textonequarter": "ÂŒ", + "\\frac{1}{2}": "Âœ", + "\\textonehalf": "Âœ", + "\\frac{3}{4}": "Ÿ", + "\\textthreequarters": "Ÿ", + "\\textquestiondown": "Âż", + "\\`A": "À", + "\\'A": "Á", + "\\^A": "Â", + "\\~A": "Ã", + "\\\"A": "Ä", + "\\AA": "Å", + "\\r{A}": "Å", + "{\\r A}": "Å", + "\\AE": "Æ", + "\\c{C}": "Ç", + "\\`E": "È", + "\\'E": "É", + "\\^E": "Ê", + "\\\"E": "Ë", + "\\`I": "Ì", + "\\'I": "Í", + "\\^I": "Î", + "\\\"I": "Ï", + "\\DH": "Ð", + "\\~N": "Ñ", + "\\`O": "Ò", + "\\'O": "Ó", + "\\^O": "Ô", + "\\~O": "Õ", + "\\\"O": "Ö", + "\\texttimes": "×", + "\\times": "×", + "\\O": "Ø", + "\\`U": "Ù", + "\\'U": "Ú", + "\\^U": "Û", + "\\\"U": "Ü", + "\\'Y": "Ý", + "\\TH": "Þ", + "\\ss": "ß", + "\\`a": "Ă ", + "\\'a": "ĂĄ", + "\\^a": "Ăą", + "\\~a": "ĂŁ", + "\\\"a": "Ă€", + "\\aa": "Ă„", + "\\r{a}": "Ă„", + "{\\r a}": "Ă„", + "\\ae": "ĂŠ", + "\\c{c}": "ç", + "\\`e": "Ăš", + "\\'e": "Ă©", + "\\^e": "ĂȘ", + "\\\"e": "Ă«", + "\\`i": "ĂŹ", + "\\`\\i": "ĂŹ", + "\\'i": "Ă­", + "\\'\\i": "Ă­", + "\\^i": "Ăź", + "\\^\\i": "Ăź", + "\\\"i": "ĂŻ", + "\\\"\\i": "ĂŻ", + "\\dh": "Ă°", + "\\eth": "Ă°", + "\\~n": "ñ", + "\\`o": "ĂČ", + "\\'o": "Ăł", + "\\^o": "ĂŽ", + "\\~o": "Ă”", + "\\\"o": "ö", + "\\div": "Ă·", + "\\o": "Ăž", + "\\`u": "Ăč", + "\\'u": "Ăș", + "\\^u": "Ă»", + "\\\"u": "ĂŒ", + "\\'y": "Ăœ", + "\\th": "ĂŸ", + "\\\"y": "Ăż", + "\\=A": "Ā", + "\\=a": "ā", + "\\u{A}": "Ă", + "\\u{a}": "ă", + "\\k{A}": "Ą", + "\\k{a}": "ą", + "\\'C": "Ć", + "\\'c": "ć", + "\\^C": "Ĉ", + "\\^c": "ĉ", + "\\.C": "Ċ", + "\\.c": "ċ", + "\\v{C}": "Č", + "\\v{c}": "č", + "\\v{D}": "Ď", + "\\v{d}": "ď", + "\\DJ": "Đ", + "\\dj": "đ", + "\\=E": "Ē", + "\\=e": "ē", + "\\u{E}": "Ĕ", + "\\u{e}": "ĕ", + "\\.E": "Ė", + "\\.e": "ė", + "\\k{E}": "Ę", + "\\k{e}": "ę", + "\\v{E}": "Ě", + "\\v{e}": "ě", + "\\^G": "Ĝ", + "\\^g": "ĝ", + "\\u{G}": "Ğ", + "\\u{g}": "ğ", + "\\.G": "Ä ", + "\\.g": "ÄĄ", + "\\c{G}": "Äą", + "\\c{g}": "ÄŁ", + "\\^H": "Ä€", + "\\^h": "Ä„", + "{\\fontencoding{LELA}\\selectfont\\char40}": "ÄŠ", + "\\Elzxh": "ħ", + "\\~I": "Äš", + "\\~i": "Ä©", + "\\=I": "ÄȘ", + "\\=i": "Ä«", + "\\u{I}": "ÄŹ", + "{\\u \\i}": "Ä­", + "\\k{I}": "Äź", + "\\k{i}": "ÄŻ", + "\\.I": "Ä°", + "\\i": "ı", + "\\imath": "ı", + "\\^J": "ÄŽ", + "\\^\\j": "Ä”", + "\\c{K}": "Ķ", + "\\c{k}": "Ä·", + "{\\fontencoding{LELA}\\selectfont\\char91}": "Äž", + "\\'L": "Äč", + "\\'l": "Äș", + "\\c{L}": "Ä»", + "\\c{l}": "ÄŒ", + "\\v{L}": "Äœ", + "\\v{l}": "ÄŸ", + "{\\fontencoding{LELA}\\selectfont\\char201}": "Äż", + "{\\fontencoding{LELA}\\selectfont\\char202}": "ƀ", + "\\L": "Ɓ", + "\\l": "Ƃ", + "\\'N": "ƃ", + "\\'n": "Ƅ", + "\\c{N}": "ƅ", + "\\c{n}": "Ɔ", + "\\v{N}": "Ƈ", + "\\v{n}": "ƈ", + "\\NG": "Ɗ", + "\\ng": "Ƌ", + "\\=O": "ƌ", + "\\=o": "ƍ", + "\\u{O}": "Ǝ", + "\\u{o}": "Ə", + "\\H{O}": "Ɛ", + "\\H{o}": "Ƒ", + "\\OE": "ƒ", + "\\oe": "Ɠ", + "\\'R": "Ɣ", + "\\'r": "ƕ", + "\\c{R}": "Ɩ", + "\\c{r}": "Ɨ", + "\\v{R}": "Ƙ", + "\\v{r}": "ƙ", + "\\'S": "ƚ", + "\\'s": "ƛ", + "\\^S": "Ɯ", + "\\^s": "Ɲ", + "\\c{S}": "ƞ", + "\\c{s}": "Ɵ", + "\\v{S}": "Ć ", + "\\v{s}": "ĆĄ", + "\\c{T}": "Ćą", + "\\c{t}": "ĆŁ", + "\\v{T}": "Ć€", + "\\v{t}": "Ć„", + "{\\fontencoding{LELA}\\selectfont\\char47}": "ĆŠ", + "{\\fontencoding{LELA}\\selectfont\\char63}": "Ƨ", + "\\~U": "Ćš", + "\\~u": "Ć©", + "\\=U": "ĆȘ", + "\\=u": "Ć«", + "\\u{U}": "ĆŹ", + "\\u{u}": "Ć­", + "\\r{U}": "Ćź", + "{\\r U}": "Ćź", + "\\r{u}": "ĆŻ", + "\\ocirc{u}": "ĆŻ", + "{\\r u}": "ĆŻ", + "\\H{U}": "Ć°", + "\\H{u}": "Ʊ", + "\\k{U}": "ĆČ", + "\\k{u}": "Ćł", + "\\^W": "ĆŽ", + "\\^w": "Ć”", + "\\^Y": "ƶ", + "\\^y": "Ć·", + "\\\"Y": "Ćž", + "\\'Z": "Ćč", + "\\'z": "Ćș", + "\\.Z": "Ć»", + "\\.z": "ĆŒ", + "\\v{Z}": "Ćœ", + "\\v{z}": "ĆŸ", + "\\texthvlig": "ƕ", + "\\textnrleg": "ƞ", + "\\textesh": "ÆȘ", + "\\Zbar": "Æ”", + "{\\fontencoding{LELA}\\selectfont\\char195}": "Æș", + "\\textdoublepipe": "ǂ", + "\\v{A}": "Ǎ", + "\\v{a}": "ǎ", + "\\v{I}": "Ǐ", + "\\v{i}": "ǐ", + "\\v{O}": "Ǒ", + "\\v{o}": "ǒ", + "\\v{U}": "Ǔ", + "\\v{u}": "ǔ", + "\\v{G}": "ÇŠ", + "\\v{g}": "ǧ", + "\\v{K}": "Çš", + "\\v{k}": "Ç©", + "\\k{O}": "ÇȘ", + "\\k{o}": "Ç«", + "\\v{j}": "Ç°", + "\\'G": "ÇŽ", + "\\'g": "Ç”", + "\\c{E}": "Èš", + "\\c{e}": "È©", + "\\jmath": "È·", + "\\Elztrna": "ɐ", + "\\Elztrnsa": "ɒ", + "\\Elzopeno": "ɔ", + "\\Elzrtld": "ɖ", + "{\\fontencoding{LEIP}\\selectfont\\char61}": "ɘ", + "\\Elzschwa": "ə", + "\\varepsilon": "ɛ", + "\\Elzpgamma": "ÉŁ", + "\\Elzpbgam": "É€", + "\\Elztrnh": "É„", + "\\Elzbtdl": "ÉŹ", + "\\Elzrtll": "É­", + "\\Elztrnm": "ÉŻ", + "\\Elztrnmlr": "É°", + "\\Elzltlmr": "ɱ", + "\\Elzltln": "ÉČ", + "\\Elzrtln": "Éł", + "\\Elzclomeg": "É·", + "\\textphi": "Éž", + "\\Elztrnr": "Éč", + "\\Elztrnrl": "Éș", + "\\Elzrttrnr": "É»", + "\\Elzrl": "ÉŒ", + "\\Elzrtlr": "Éœ", + "\\Elzfhr": "ÉŸ", + "{\\fontencoding{LEIP}\\selectfont\\char202}": "Éż", + "\\Elzrtls": "ʂ", + "\\Elzesh": "ʃ", + "\\Elztrnt": "ʇ", + "\\Elzrtlt": "ʈ", + "\\Elzpupsil": "ʊ", + "\\Elzpscrv": "ʋ", + "\\Elzinvv": "ʌ", + "\\Elzinvw": "ʍ", + "\\Elztrny": "ʎ", + "\\Elzrtlz": "ʐ", + "\\Elzyogh": "ʒ", + "\\Elzglst": "ʔ", + "\\Elzreglst": "ʕ", + "\\Elzinglst": "ʖ", + "\\textturnk": "ʞ", + "\\Elzdyogh": "Ê€", + "\\Elztesh": "ʧ", + "\\textsuperscript{h}": "Ê°", + "^{h}": "Ê°", + "\\textsuperscript{j}": "ÊČ", + "^{j}": "ÊČ", + "\\textsuperscript{r}": "Êł", + "^{r}": "Êł", + "\\textsuperscript{w}": "Ê·", + "^{w}": "Ê·", + "\\textsuperscript{y}": "Êž", + "^{y}": "Êž", + "\\lasp": "Êż", + "\\textasciicircum": "ˆ", + "\\textasciicaron": "ˇ", + "\\Elzverts": "ˈ", + "\\Elzverti": "ˌ", + "\\Elzlmrk": "ː", + "\\Elzhlmrk": "ˑ", + "\\Elzsbrhr": "˒", + "\\Elzsblhr": "˓", + "\\Elzrais": "˔", + "\\Elzlow": "˕", + "\\textasciibreve": "˘", + "\\textperiodcentered": "˙", + "\\texttildelow": "˜", + "\\textsuperscript{l}": "ËĄ", + "^{l}": "ËĄ", + "\\textsuperscript{s}": "Ëą", + "^{s}": "Ëą", + "\\textsuperscript{x}": "ËŁ", + "^{x}": "ËŁ", + "\\tone{55}": "Ë„", + "\\tone{44}": "ËŠ", + "\\tone{33}": "˧", + "\\tone{22}": "Ëš", + "\\tone{11}": "Ë©", + "\\`": "̀", + "\\grave": "̀", + "\\textgravemacron": "̀̄", + "\\textgravedot": "̀̇", + "\\'": "́", + "\\acute": "́", + "\\textacutemacron": "́̄", + "\\textacutewedge": "́̌", + "\\hat": "̂", + "\\textcircumdot": "̂̇", + "\\~": "̃", + "\\tilde": "̃", + "\\texttildedot": "̃̇", + "\\=": "̄", + "\\bar": "̄", + "\\overline": "̅", + "\\u": "̆", + "\\breve": "̆", + "\\textbrevemacron": "̆̄", + "\\.": "̇", + "\\dot": "̇", + "\\textdotacute": "̇́", + "\\\"": "̈", + "\\ddot": "̈", + "\\ovhook": "̉", + "\\r": "̊", + "\\mathring": "̊", + "\\textringmacron": "̊̄", + "\\H": "̋", + "\\check": "̌", + "\\v": "̌", + "\\textvbaraccent": "̍", + "\\textdoublevbaraccent": "̎", + "\\textdoublegrave": "̏", + "\\textdotbreve": "̐", + "{\\fontencoding{LECO}\\selectfont\\char177}": "̑", + "\\oturnedcomma": "̒", + "\\ocommatopright": "̕", + "\\textsubgrave": "̖", + "\\textadvancing": "̘", + "\\textretracting": "̙", + "\\droang": "̚", + "\\textcorner": "̚", + "\\textsublhalfring": "̜", + "\\textraising": "̝", + "\\textlowering": "̞", + "\\textsubplus": "̟", + "\\Elzpalh": "ÌĄ", + "\\Elzrh": "Ìą", + "\\d": "ÌŁ", + "\\textsubumlaut": "Ì€", + "\\textsubring": "Ì„", + "\\c": "̧", + "\\k": "Ìš", + "\\textsyllabic": "Ì©", + "\\Elzsbbrg": "ÌȘ", + "\\textsubbridge": "ÌȘ", + "{\\fontencoding{LECO}\\selectfont\\char203}": "Ì«", + "\\textsubwedge": "ÌŹ", + "\\textsubarch": "ÌŻ", + "\\utilde": "Ì°", + "\\textsubtilde": "Ì°", + "\\textsubbar": "̱", + "\\underbar": "̱", + "\\underline": "ÌČ", + "\\textsuperimposetilde": "ÌŽ", + "\\Elzxl": "Ì”", + "\\Elzbar": "̶", + "{\\fontencoding{LECO}\\selectfont\\char215}": "Ì·", + "\\not": "Ìž", + "\\textsubrhalfring": "Ìč", + "\\textinvsubbridge": "Ìș", + "\\textsubsquare": "Ì»", + "\\textseagull": "ÌŒ", + "\\textovercross": "Ìœ", + "{\\fontencoding{LECO}\\selectfont\\char225}": "ÍĄ", + "\\'H": "Ή", + "{\\'{}I}": "Ί", + "{\\'{}O}": "Ό", + "\\mathrm{'Y}": "Ύ", + "\\mathrm{'\\Omega}": "Ώ", + "\\acute{\\ddot{\\iota}}": "ΐ", + "\\Gamma": "Γ", + "\\varGamma": "Γ", + "\\Delta": "Δ", + "\\Theta": "Θ", + "\\Lambda": "Λ", + "\\Xi": "Ξ", + "\\Pi": "Π", + "\\Sigma": "ÎŁ", + "\\Upsilon": "΄", + "\\Phi": "Ί", + "\\Psi": "Κ", + "\\Omega": "Ω", + "\\mathrm{\\ddot{I}}": "ÎȘ", + "\\mathrm{\\ddot{Y}}": "Ϋ", + "{\\'$\\alpha$}": "ÎŹ", + "\\acute{\\epsilon}": "έ", + "\\acute{\\eta}": "Îź", + "\\acute{\\iota}": "ÎŻ", + "\\acute{\\ddot{\\upsilon}}": "ΰ", + "\\alpha": "α", + "\\beta": "ÎČ", + "\\gamma": "Îł", + "\\delta": "ÎŽ", + "\\zeta": "ζ", + "\\eta": "η", + "\\texttheta": "Ξ", + "\\theta": "Ξ", + "\\iota": "Îč", + "\\kappa": "Îș", + "\\lambda": "λ", + "\\nu": "Îœ", + "\\xi": "Ο", + "\\pi": "π", + "\\rho": "ρ", + "\\varsigma": "ς", + "\\sigma": "σ", + "\\tau": "τ", + "\\upsilon": "υ", + "\\varphi": "φ", + "\\chi": "χ", + "\\psi": "ψ", + "\\omega": "ω", + "\\ddot{\\iota}": "ϊ", + "\\ddot{\\upsilon}": "ϋ", + "\\acute{\\upsilon}": "ύ", + "\\acute{\\omega}": "ώ", + "\\Pisymbol{ppi022}{87}": "ϐ", + "\\varbeta": "ϐ", + "\\textvartheta": "ϑ", + "\\vartheta": "ϑ", + "\\phi": "ϕ", + "\\varpi": "ϖ", + "\\Qoppa": "Ϙ", + "\\qoppa": "ϙ", + "\\Stigma": "Ϛ", + "\\stigma": "ϛ", + "\\Digamma": "Ϝ", + "\\digamma": "ϝ", + "\\Koppa": "Ϟ", + "\\koppa": "ϟ", + "\\Sampi": "Ï ", + "\\sampi": "ÏĄ", + "\\varkappa": "Ï°", + "\\varrho": "ϱ", + "\\textTheta": "ÏŽ", + "\\upvarTheta": "ÏŽ", + "\\epsilon": "Ï”", + "\\backepsilon": "϶", + "\\cyrchar\\CYRYO": "Ё", + "\\cyrchar\\CYRDJE": "Ђ", + "\\cyrchar{\\'\\CYRG}": "Ѓ", + "\\cyrchar\\CYRIE": "Є", + "\\cyrchar\\CYRDZE": "Ѕ", + "\\cyrchar\\CYRII": "І", + "\\cyrchar\\CYRYI": "Ї", + "\\cyrchar\\CYRJE": "Ј", + "\\cyrchar\\CYRLJE": "Љ", + "\\cyrchar\\CYRNJE": "Њ", + "\\cyrchar\\CYRTSHE": "Ћ", + "\\cyrchar{\\'\\CYRK}": "Ќ", + "\\cyrchar\\CYRUSHRT": "Ў", + "\\cyrchar\\CYRDZHE": "Џ", + "\\cyrchar\\CYRA": "А", + "\\cyrchar\\CYRB": "Б", + "\\cyrchar\\CYRV": "В", + "\\cyrchar\\CYRG": "Г", + "\\cyrchar\\CYRD": "Д", + "\\cyrchar\\CYRE": "Е", + "\\cyrchar\\CYRZH": "Ж", + "\\cyrchar\\CYRZ": "З", + "\\cyrchar\\CYRI": "И", + "\\cyrchar\\CYRISHRT": "Й", + "\\cyrchar\\CYRK": "К", + "\\cyrchar\\CYRL": "Л", + "\\cyrchar\\CYRM": "М", + "\\cyrchar\\CYRN": "Н", + "\\cyrchar\\CYRO": "О", + "\\cyrchar\\CYRP": "П", + "\\cyrchar\\CYRR": "Đ ", + "\\cyrchar\\CYRS": "ĐĄ", + "\\cyrchar\\CYRT": "Đą", + "\\cyrchar\\CYRU": "ĐŁ", + "\\cyrchar\\CYRF": "Đ€", + "\\cyrchar\\CYRH": "Đ„", + "\\cyrchar\\CYRC": "ĐŠ", + "\\cyrchar\\CYRCH": "Ч", + "\\cyrchar\\CYRSH": "Đš", + "\\cyrchar\\CYRSHCH": "Đ©", + "\\cyrchar\\CYRHRDSN": "ĐȘ", + "\\bud": "ĐȘ", + "\\cdprime": "ĐȘ", + "\\cyrchar\\CYRERY": "Đ«", + "\\cyrchar\\CYRSFTSN": "ĐŹ", + "\\cprime": "ĐŹ", + "\\cyrchar\\CYREREV": "Đ­", + "\\cyrchar\\CYRYU": "Đź", + "\\cyrchar\\CYRYA": "ĐŻ", + "\\cyrchar\\cyra": "Đ°", + "\\cyrchar\\cyrb": "б", + "\\cyrchar\\cyrv": "ĐČ", + "\\cyrchar\\cyrg": "Đł", + "\\cyrchar\\cyrd": "ĐŽ", + "\\cyrchar\\cyre": "Đ”", + "\\cyrchar\\cyrzh": "ж", + "\\cyrchar\\cyrz": "Đ·", + "\\cyrchar\\cyri": "Đž", + "\\cyrchar\\cyrishrt": "Đč", + "\\cyrchar\\cyrk": "Đș", + "\\cyrchar\\cyrl": "Đ»", + "\\cyrchar\\cyrm": "ĐŒ", + "\\cyrchar\\cyrn": "Đœ", + "\\cyrchar\\cyro": "ĐŸ", + "\\cyrchar\\cyrp": "Đż", + "\\cyrchar\\cyrr": "р", + "\\cyrchar\\cyrs": "с", + "\\cyrchar\\cyrt": "т", + "\\cyrchar\\cyru": "у", + "\\cyrchar\\cyrf": "ф", + "\\cyrchar\\cyrh": "х", + "\\cyrchar\\cyrc": "ц", + "\\cyrchar\\cyrch": "ч", + "\\cyrchar\\cyrsh": "ш", + "\\cyrchar\\cyrshch": "щ", + "\\cyrchar\\cyrhrdsn": "ъ", + "\\cyrchar\\cyrery": "ы", + "\\cyrchar\\cyrsftsn": "ь", + "\\cyrchar\\cyrerev": "э", + "\\cyrchar\\cyryu": "ю", + "\\cyrchar\\cyrya": "я", + "\\cyrchar\\cyryo": "ё", + "\\cyrchar\\cyrdje": "ђ", + "\\cyrchar{\\'\\cyrg}": "ѓ", + "\\cyrchar\\cyrie": "є", + "\\cyrchar\\cyrdze": "ѕ", + "\\cyrchar\\cyrii": "і", + "\\cyrchar\\cyryi": "ї", + "\\cyrchar\\cyrje": "ј", + "\\cyrchar\\cyrlje": "љ", + "\\cyrchar\\cyrnje": "њ", + "\\cyrchar\\cyrtshe": "ћ", + "\\cyrchar{\\'\\cyrk}": "ќ", + "\\cyrchar\\cyrushrt": "ў", + "\\cyrchar\\cyrdzhe": "џ", + "\\cyrchar\\CYROMEGA": "Ń ", + "\\cyrchar\\cyromega": "ŃĄ", + "\\cyrchar\\CYRYAT": "Ńą", + "\\cyrchar\\CYRIOTE": "Ń€", + "\\cyrchar\\cyriote": "Ń„", + "\\cyrchar\\CYRLYUS": "ŃŠ", + "\\cyrchar\\cyrlyus": "ѧ", + "\\cyrchar\\CYRIOTLYUS": "Ńš", + "\\cyrchar\\cyriotlyus": "Ń©", + "\\cyrchar\\CYRBYUS": "ŃȘ", + "\\cyrchar\\CYRIOTBYUS": "ŃŹ", + "\\cyrchar\\cyriotbyus": "Ń­", + "\\cyrchar\\CYRKSI": "Ńź", + "\\cyrchar\\cyrksi": "ŃŻ", + "\\cyrchar\\CYRPSI": "Ń°", + "\\cyrchar\\cyrpsi": "ѱ", + "\\cyrchar\\CYRFITA": "ŃČ", + "\\cyrchar\\CYRIZH": "ŃŽ", + "\\cyrchar\\CYRUK": "Ńž", + "\\cyrchar\\cyruk": "Ńč", + "\\cyrchar\\CYROMEGARND": "Ńș", + "\\cyrchar\\cyromegarnd": "Ń»", + "\\cyrchar\\CYROMEGATITLO": "ŃŒ", + "\\cyrchar\\cyromegatitlo": "Ńœ", + "\\cyrchar\\CYROT": "ŃŸ", + "\\cyrchar\\cyrot": "Ńż", + "\\cyrchar\\CYRKOPPA": "Ҁ", + "\\cyrchar\\cyrkoppa": "ҁ", + "\\cyrchar\\cyrthousands": "҂", + "\\cyrchar\\cyrhundredthousands": "҈", + "\\cyrchar\\cyrmillions": "҉", + "\\cyrchar\\CYRSEMISFTSN": "Ҍ", + "\\cyrchar\\cyrsemisftsn": "ҍ", + "\\cyrchar\\CYRRTICK": "Ҏ", + "\\cyrchar\\cyrrtick": "ҏ", + "\\cyrchar\\CYRGUP": "Ґ", + "\\cyrchar\\cyrgup": "ґ", + "\\cyrchar\\CYRGHCRS": "Ғ", + "\\cyrchar\\cyrghcrs": "ғ", + "\\cyrchar\\CYRGHK": "Ҕ", + "\\cyrchar\\cyrghk": "ҕ", + "\\cyrchar\\CYRZHDSC": "Җ", + "\\cyrchar\\cyrzhdsc": "җ", + "\\cyrchar\\CYRZDSC": "Ҙ", + "\\cyrchar\\cyrzdsc": "ҙ", + "\\cyrchar\\CYRKDSC": "Қ", + "\\cyrchar\\cyrkdsc": "қ", + "\\cyrchar\\CYRKVCRS": "Ҝ", + "\\cyrchar\\cyrkvcrs": "ҝ", + "\\cyrchar\\CYRKHCRS": "Ҟ", + "\\cyrchar\\cyrkhcrs": "ҟ", + "\\cyrchar\\CYRKBEAK": "Ò ", + "\\cyrchar\\cyrkbeak": "ÒĄ", + "\\cyrchar\\CYRNDSC": "Òą", + "\\cyrchar\\cyrndsc": "ÒŁ", + "\\cyrchar\\CYRNG": "Ò€", + "\\cyrchar\\cyrng": "Ò„", + "\\cyrchar\\CYRPHK": "ÒŠ", + "\\cyrchar\\cyrphk": "Ò§", + "\\cyrchar\\CYRABHHA": "Òš", + "\\cyrchar\\cyrabhha": "Ò©", + "\\cyrchar\\CYRSDSC": "ÒȘ", + "\\cyrchar\\cyrsdsc": "Ò«", + "\\cyrchar\\CYRTDSC": "ÒŹ", + "\\cyrchar\\cyrtdsc": "Ò­", + "\\cyrchar\\CYRY": "Òź", + "\\cyrchar\\cyry": "ÒŻ", + "\\cyrchar\\CYRYHCRS": "Ò°", + "\\cyrchar\\cyryhcrs": "Ò±", + "\\cyrchar\\CYRHDSC": "ÒČ", + "\\cyrchar\\cyrhdsc": "Òł", + "\\cyrchar\\CYRTETSE": "ÒŽ", + "\\cyrchar\\cyrtetse": "Ò”", + "\\cyrchar\\CYRCHRDSC": "Ò¶", + "\\cyrchar\\cyrchrdsc": "Ò·", + "\\cyrchar\\CYRCHVCRS": "Òž", + "\\cyrchar\\cyrchvcrs": "Òč", + "\\cyrchar\\CYRSHHA": "Òș", + "\\cyrchar\\cyrshha": "Ò»", + "\\cyrchar\\CYRABHCH": "ÒŒ", + "\\cyrchar\\cyrabhch": "Òœ", + "\\cyrchar\\CYRABHCHDSC": "ÒŸ", + "\\cyrchar\\cyrabhchdsc": "Òż", + "\\cyrchar\\CYRpalochka": "Ӏ", + "\\cyrchar\\CYRKHK": "Ӄ", + "\\cyrchar\\cyrkhk": "ӄ", + "\\cyrchar\\CYRNHK": "Ӈ", + "\\cyrchar\\cyrnhk": "ӈ", + "\\cyrchar\\CYRCHLDSC": "Ӌ", + "\\cyrchar\\cyrchldsc": "ӌ", + "\\cyrchar\\CYRAE": "Ӕ", + "\\cyrchar\\cyrae": "ӕ", + "\\cyrchar\\CYRSCHWA": "Ә", + "\\cyrchar\\cyrschwa": "ә", + "\\cyrchar\\CYRABHDZE": "Ó ", + "\\cyrchar\\cyrabhdze": "ÓĄ", + "\\cyrchar\\CYROTLD": "Óš", + "\\cyrchar\\cyrotld": "Ó©", + "\\\\backslash": "àĄ±", + "\\textsuperscript{a}": "ᔃ", + "^{a}": "ᔃ", + "\\textsuperscript{b}": "ᔇ", + "^{b}": "ᔇ", + "\\textsuperscript{d}": "ᔈ", + "^{d}": "ᔈ", + "\\textsuperscript{e}": "ᔉ", + "^{e}": "ᔉ", + "\\textsuperscript{g}": "ᔍ", + "^{g}": "ᔍ", + "\\textsuperscript{k}": "ᔏ", + "^{k}": "ᔏ", + "\\textsuperscript{m}": "ᔐ", + "^{m}": "ᔐ", + "\\textsuperscript{o}": "á”’", + "^{o}": "á”’", + "\\textsuperscript{p}": "á”–", + "^{p}": "á”–", + "\\textsuperscript{t}": "á”—", + "^{t}": "á”—", + "\\textsuperscript{u}": "ᔘ", + "^{u}": "ᔘ", + "\\textsuperscript{v}": "á”›", + "^{v}": "á”›", + "\\textsuperscript{c}": "ᶜ", + "^{c}": "ᶜ", + "\\textsuperscript{f}": "ᶠ", + "^{f}": "ᶠ", + "\\textsuperscript{z}": "ᶻ", + "^{z}": "ᶻ", + "\\.B": "ᾂ", + "\\.b": "ឃ", + "\\d{B}": "ᾄ", + "\\d{b}": "ᾅ", + "\\b{B}": "ᾆ", + "\\b{b}": "ᾇ", + "\\.D": "ᾊ", + "\\.d": "ᾋ", + "\\d{D}": "ᾌ", + "\\d{d}": "ឍ", + "\\b{D}": "ᾎ", + "\\b{d}": "ត", + "\\c{D}": "ថ", + "\\c{d}": "ᾑ", + "\\c{\\u{E}}": "ᾜ", + "\\c{\\u{e}}": "ឝ", + "\\.F": "ᾞ", + "\\.f": "ᾟ", + "\\=G": "áž ", + "\\=g": "ឥ", + "\\.H": "ážą", + "\\.h": "ឣ", + "\\d{H}": "ក", + "\\d{h}": "áž„", + "\\\"H": "ដ", + "\\\"h": "ឧ", + "\\c{H}": "ážš", + "\\c{h}": "áž©", + "\\'K": "áž°", + "\\'k": "áž±", + "\\d{K}": "ážČ", + "\\d{k}": "ážł", + "\\b{K}": "ណ", + "\\b{k}": "áž”", + "\\d{L}": "ា", + "\\d{l}": "áž·", + "\\b{L}": "ážș", + "\\b{l}": "áž»", + "\\'M": "ស", + "\\'m": "ážż", + "\\.M": "áč€", + "\\.m": "áč", + "\\d{M}": "áč‚", + "\\d{m}": "áčƒ", + "\\.N": "áč„", + "\\.n": "áč…", + "\\d{N}": "áč†", + "\\d{n}": "áč‡", + "\\b{N}": "áčˆ", + "\\b{n}": "áč‰", + "\\'P": "áč”", + "\\'p": "áč•", + "\\.P": "áč–", + "\\.p": "áč—", + "\\.R": "áč˜", + "\\.r": "áč™", + "\\d{R}": "áčš", + "\\d{r}": "áč›", + "\\b{R}": "áčž", + "\\b{r}": "áčŸ", + "\\.S": "áč ", + "\\.s": "áčĄ", + "\\d{S}": "áčą", + "\\d{s}": "áčŁ", + "\\.T": "áčȘ", + "\\.t": "áč«", + "\\d{T}": "áčŹ", + "\\d{t}": "áč­", + "\\b{T}": "áčź", + "\\b{t}": "áčŻ", + "\\~V": "áčŒ", + "\\~v": "áčœ", + "\\d{V}": "áčŸ", + "\\d{v}": "áčż", + "\\`W": "áș€", + "\\`w": "áș", + "\\'W": "áș‚", + "\\'w": "áșƒ", + "\\\"W": "áș„", + "\\\"w": "áș…", + "\\.W": "áș†", + "\\.w": "áș‡", + "\\d{W}": "áșˆ", + "\\d{w}": "áș‰", + "\\.X": "áșŠ", + "\\.x": "áș‹", + "\\\"X": "áșŒ", + "\\\"x": "áș", + "\\.Y": "áșŽ", + "\\.y": "áș", + "\\^Z": "áș", + "\\^z": "áș‘", + "\\d{Z}": "áș’", + "\\d{z}": "áș“", + "\\b{Z}": "áș”", + "\\b{z}": "áș•", + "\\b{h}": "áș–", + "\\\"t": "áș—", + "\\r{w}": "áș˜", + "\\r{y}": "áș™", + "\\d{A}": "áș ", + "\\d{a}": "áșĄ", + "\\d{E}": "áșž", + "\\d{e}": "áșč", + "\\~E": "áșŒ", + "\\~e": "áșœ", + "\\d{I}": "Ị", + "\\d{i}": "ị", + "\\d{O}": "Ọ", + "\\d{o}": "ọ", + "\\d{U}": "Ề", + "\\d{u}": "Ễ", + "\\`Y": "á»Č", + "\\`y": "ỳ", + "\\d{Y}": "Ỏ", + "\\d{y}": "á»”", + "\\~Y": "Ở", + "\\~y": "á»č", + "\\hspace{0.6em}": " ", + "\\hspace{1em}": " ", + "\\quad": " ", + "\\;": " ", + "\\hspace{0.25em}": " ", + "\\hspace{0.166em}": " ", + "\\hphantom{0}": " ", + "\\hphantom{,}": " ", + "\\,": " ", + "\\mkern1mu": " ", + "\\mbox": "​", + "{\\aftergroup\\ignorespaces}": "‌", + "\\textendash": "–", + "\\textemdash": "—", + "\\rule{1em}{1pt}": "―", + "\\horizbar": "―", + "\\Vert": "‖", + "\\twolowline": "‗", + "\\textquoteleft": "‘", + "\\textquoteright": "’", + "\\Elzreapos": "‛", + "\\textquotedblleft": "“", + "\\textquotedblright": "”", + "\\quotedblbase": "‟", + "\\textdagger": "†", + "\\dagger": "†", + "\\textdaggerdbl": "‡", + "\\ddagger": "‡", + "\\textbullet": "‱", + "\\enleadertwodots": " ", + "\\ldots": "
", + "\\textperthousand": "‰", + "\\textpertenthousand": "‱", + "{'}": "â€Č", + "{''}": "″", + "{'''}": "‮", + "\\backprime": "—", + "\\backdprime": "‶", + "\\backtrprime": "‷", + "\\caretinsert": "‾", + "\\guilsinglleft": "â€č", + "\\guilsinglright": "â€ș", + "\\Exclam": "‌", + "\\hyphenbullet": "⁃", + "\\fracslash": "⁄", + "\\Question": "⁇", + "\\closure": "⁐", + "\\:": " ", + "\\nolinebreak": "⁠", + "^{0}": "⁰", + "\\textsuperscript{i}": "ⁱ", + "^{i}": "ⁱ", + "^{4}": "⁎", + "^{5}": "⁔", + "^{6}": "⁶", + "^{7}": "⁷", + "^{8}": "⁞", + "^{9}": "âč", + "^{+}": "âș", + "^{-}": "⁻", + "^{=}": "⁌", + "^{(}": "⁜", + "^{)}": " ", + "\\textsuperscript{n}": "ⁿ", + "^{n}": "ⁿ", + "_{0}": "₀", + "_{1}": "₁", + "_{2}": "₂", + "_{3}": "₃", + "_{4}": "₄", + "_{5}": "₅", + "_{6}": "₆", + "_{7}": "₇", + "_{8}": "₈", + "_{9}": "₉", + "_{+}": "₊", + "_{-}": "₋", + "_{=}": "₌", + "_{(}": "₍", + "_{)}": "₎", + "\\textsubscript{a}": "ₐ", + "_{a}": "ₐ", + "\\textsubscript{e}": "ₑ", + "_{e}": "ₑ", + "\\textsubscript{o}": "ₒ", + "_{o}": "ₒ", + "\\textsubscript{x}": "ₓ", + "_{x}": "ₓ", + "\\textsubscript{\\textschwa}": "ₔ", + "\\textsubscript{h}": "ₕ", + "_{h}": "ₕ", + "\\textsubscript{k}": "ₖ", + "_{k}": "ₖ", + "\\textsubscript{l}": "ₗ", + "_{l}": "ₗ", + "\\textsubscript{m}": "ₘ", + "_{m}": "ₘ", + "\\textsubscript{n}": "ₙ", + "_{n}": "ₙ", + "\\textsubscript{p}": "ₚ", + "_{p}": "ₚ", + "\\textsubscript{s}": "ₛ", + "_{s}": "ₛ", + "\\textsubscript{t}": "ₜ", + "_{t}": "ₜ", + "\\ensuremath{\\Elzpes}": "₧", + "\\texteuro": "€", + "\\euro": "€", + "\\lvec": "⃐", + "\\vertoverlay": "⃒", + "\\LVec": "⃖", + "\\vec": "⃗", + "\\dddot": "⃛", + "\\ddddot": "⃜", + "\\enclosecircle": "⃝", + "\\enclosesquare": "⃞", + "\\enclosediamond": "⃟", + "\\overleftrightarrow": "⃥", + "\\enclosetriangle": "⃀", + "\\annuity": "⃧", + "\\threeunderdot": "⃚", + "\\widebridgeabove": "⃩", + "\\underrightharpoondown": "⃏", + "\\underleftharpoondown": "⃭", + "\\underleftarrow": "⃟", + "\\underrightarrow": "⃯", + "\\asteraccent": "⃰", + "\\mathbb{C}": "ℂ", + "\\textcelsius": "℃", + "\\Euler": "ℇ", + "\\mathscr{g}": "ℊ", + "\\mathscr{H}": "ℋ", + "\\mathfrak{H}": "ℌ", + "\\mathbb{H}": "ℍ", + "\\Planckconst": "ℎ", + "\\hslash": "ℏ", + "\\mathscr{I}": "ℐ", + "\\mathfrak{I}": "ℑ", + "\\mathscr{L}": "ℒ", + "\\mathscr{l}": "ℓ", + "\\mathbb{N}": "ℕ", + "\\cyrchar\\textnumero": "№", + "\\textcircledP": "℗", + "\\wp": "℘", + "\\mathbb{P}": "ℙ", + "\\mathbb{Q}": "ℚ", + "\\mathscr{R}": "ℛ", + "\\mathfrak{R}": "ℜ", + "\\mathbb{R}": "ℝ", + "\\Elzxrat": "℞", + "\\textservicemark": "℠", + "\\texttrademark": "ℱ", + "\\mathbb{Z}": "â„€", + "\\mho": "℧", + "\\mathfrak{Z}": "ℹ", + "\\textriota": "℩", + "\\Angstroem": "Å", + "\\mathscr{B}": "ℬ", + "\\mathfrak{C}": "ℭ", + "\\textestimated": "ℼ", + "\\mathscr{e}": "ℯ", + "\\mathscr{E}": "ℰ", + "\\mathscr{F}": "ℱ", + "\\Finv": "â„Č", + "\\mathscr{M}": "ℳ", + "\\mathscr{o}": "℮", + "\\aleph": "â„”", + "\\beth": "ℶ", + "\\gimel": "ℷ", + "\\daleth": "ℾ", + "\\mathbb{\\pi}": "â„Œ", + "\\mathbb{\\gamma}": "â„œ", + "\\mathbb{\\Gamma}": "â„Ÿ", + "\\mathbb{\\Pi}": "ℿ", + "\\mathbb{\\Sigma}": "⅀", + "\\Game": "⅁", + "\\sansLturned": "⅂", + "\\sansLmirrored": "⅃", + "\\Yup": "⅄", + "\\CapitalDifferentialD": "ⅅ", + "\\DifferentialD": "ⅆ", + "\\ExponetialE": "ⅇ", + "\\ComplexI": "ⅈ", + "\\ComplexJ": "ⅉ", + "\\PropertyLine": "⅊", + "\\invamp": "⅋", + "\\frac{1}{7}": "⅐", + "\\textfrac{1}{7}": "⅐", + "\\frac{1}{9}": "⅑", + "\\textfrac{1}{9}": "⅑", + "\\frac{1}{10}": "⅒", + "\\textfrac{1}{10}": "⅒", + "\\frac{1}{3}": "⅓", + "\\textfrac{1}{3}": "⅓", + "\\frac{2}{3}": "⅔", + "\\textfrac{2}{3}": "⅔", + "\\frac{1}{5}": "⅕", + "\\textfrac{1}{5}": "⅕", + "\\frac{2}{5}": "⅖", + "\\textfrac{2}{5}": "⅖", + "\\frac{3}{5}": "⅗", + "\\textfrac{3}{5}": "⅗", + "\\frac{4}{5}": "⅘", + "\\textfrac{4}{5}": "⅘", + "\\frac{1}{6}": "⅙", + "\\textfrac{1}{6}": "⅙", + "\\frac{5}{6}": "⅚", + "\\textfrac{5}{6}": "⅚", + "\\frac{1}{8}": "⅛", + "\\textfrac{1}{8}": "⅛", + "\\frac{3}{8}": "⅜", + "\\textfrac{3}{8}": "⅜", + "\\frac{5}{8}": "⅝", + "\\textfrac{5}{8}": "⅝", + "\\frac{7}{8}": "⅞", + "\\textfrac{7}{8}": "⅞", + "\\frac{1}": "⅟", + "\\textfrac{1}": "⅟", + "\\frac{0}{3}": "↉", + "\\textfrac{0}{3}": "↉", + "\\leftarrow": "←", + "\\uparrow": "↑", + "\\textrightarrow": "→", + "\\rightarrow": "→", + "\\to": "→", + "\\downarrow": "↓", + "\\leftrightarrow": "↔", + "\\updownarrow": "↕", + "\\nwarrow": "↖", + "\\nearrow": "↗", + "\\searrow": "↘", + "\\swarrow": "↙", + "\\nleftarrow": "↚", + "\\nrightarrow": "↛", + "\\arrowwaveleft": "↜", + "\\arrowwaveright": "↝", + "\\twoheadleftarrow": "↞", + "\\twoheaduparrow": "↟", + "\\twoheadrightarrow": "↠", + "\\twoheaddownarrow": "↡", + "\\leftarrowtail": "↱", + "\\rightarrowtail": "↣", + "\\mapsfrom": "ↀ", + "\\MapsUp": "ↄ", + "\\mapsto": "↩", + "\\MapsDown": "↧", + "\\updownarrowbar": "↹", + "\\hookleftarrow": "↩", + "\\hookrightarrow": "â†Ș", + "\\looparrowleft": "↫", + "\\looparrowright": "↬", + "\\leftrightsquigarrow": "↭", + "\\nleftrightarrow": "↼", + "\\lightning": "↯", + "\\Lsh": "↰", + "\\Rsh": "↱", + "\\dlsh": "â†Č", + "\\reflectbox{\\carriagereturn}": "↳", + "\\linefeed": "↮", + "\\carriagereturn": "↔", + "\\curvearrowleft": "↶", + "\\curvearrowright": "↷", + "\\barovernorthwestarrow": "↾", + "\\barleftarrowrightarrowba": "â†č", + "\\circlearrowleft": "â†ș", + "\\circlearrowright": "↻", + "\\leftharpoonup": "↌", + "\\leftharpoondown": "↜", + "\\upharpoonright": "↟", + "\\upharpoonleft": "↿", + "\\rightharpoonup": "⇀", + "\\rightharpoondown": "⇁", + "\\downharpoonright": "⇂", + "\\downharpoonleft": "⇃", + "\\rightleftarrows": "⇄", + "\\dblarrowupdown": "⇅", + "\\leftrightarrows": "⇆", + "\\leftleftarrows": "⇇", + "\\upuparrows": "⇈", + "\\rightrightarrows": "⇉", + "\\downdownarrows": "⇊", + "\\leftrightharpoons": "⇋", + "\\rightleftharpoons": "⇌", + "\\nLeftarrow": "⇍", + "\\nLeftrightarrow": "⇎", + "\\nRightarrow": "⇏", + "\\Leftarrow": "⇐", + "\\Uparrow": "⇑", + "\\Rightarrow": "⇒", + "\\Downarrow": "⇓", + "\\Leftrightarrow": "⇔", + "\\Updownarrow": "⇕", + "\\Nwarrow": "⇖", + "\\Nearrow": "⇗", + "\\Searrow": "⇘", + "\\Swarrow": "⇙", + "\\Lleftarrow": "⇚", + "\\Rrightarrow": "⇛", + "\\leftsquigarrow": "⇜", + "\\rightsquigarrow": "⇝", + "\\nHuparrow": "⇞", + "\\nHdownarrow": "⇟", + "\\dashleftarrow": "⇠", + "\\updasharrow": "⇡", + "\\dashrightarrow": "⇱", + "\\downdasharrow": "⇣", + "\\LeftArrowBar": "⇀", + "\\RightArrowBar": "⇄", + "\\leftwhitearrow": "⇩", + "\\upwhitearrow": "⇧", + "\\rightwhitearrow": "⇹", + "\\downwhitearrow": "⇩", + "\\whitearrowupfrombar": "â‡Ș", + "\\circleonrightarrow": "⇮", + "\\DownArrowUpArrow": "⇔", + "\\rightthreearrows": "⇶", + "\\nvleftarrow": "⇷", + "\\pfun": "⇾", + "\\nvleftrightarrow": "â‡č", + "\\nVleftarrow": "â‡ș", + "\\ffun": "⇻", + "\\nVleftrightarrow": "⇌", + "\\leftarrowtriangle": "⇜", + "\\rightarrowtriangle": "⇟", + "\\leftrightarrowtriangle": "⇿", + "\\forall": "∀", + "\\complement": "∁", + "\\partial": "∂", + "\\exists": "∃", + "\\nexists": "∄", + "\\varnothing": "∅", + "\\increment": "∆", + "\\nabla": "∇", + "\\in": "∈", + "\\not\\in": "∉", + "\\smallin": "∊", + "\\ni": "∋", + "\\not\\ni": "∌", + "\\smallni": "∍", + "\\QED": "∎", + "\\prod": "∏", + "\\coprod": "∐", + "\\sum": "∑", + "\\mp": "∓", + "\\dotplus": "∔", + "\\setminus": "∖", + "{_\\ast}": "∗", + "\\circ": "∘", + "\\bullet": "∙", + "\\surd": "√", + "\\sqrt[3]": "∛", + "\\sqrt[4]": "∜", + "\\propto": "∝", + "\\infty": "∞", + "\\rightangle": "∟", + "\\angle": "∠", + "\\measuredangle": "∥", + "\\sphericalangle": "∹", + "\\mid": "∣", + "\\nmid": "∀", + "\\parallel": "∄", + "\\nparallel": "∊", + "\\wedge": "∧", + "\\vee": "√", + "\\cap": "∩", + "\\cup": "âˆȘ", + "\\int": "∫", + "{\\int\\!\\int}": "∏", + "{\\int\\!\\int\\!\\int}": "∭", + "\\oint": "∟", + "\\surfintegral": "∯", + "\\volintegral": "∰", + "\\clwintegral": "∱", + "\\lcirclerightint": "âˆČ", + "\\rcirclerightint": "∳", + "\\therefore": "∎", + "\\because": "∔", + "\\Colon": "∷", + "\\dotdiv": "∞", + "\\eqcolon": "âˆč", + "\\mathbin{{:}\\!\\!{-}\\!\\!{:}}": "âˆș", + "\\homothetic": "∻", + "\\sim": "∌", + "\\backsim": "∜", + "\\lazysinv": "∟", + "\\AC": "∿", + "\\wr": "≀", + "\\not\\sim": "≁", + "\\texteqsim": "≂", + "\\NotEqualTilde": "≂̞", + "\\simeq": "≃", + "\\not\\simeq": "≄", + "\\cong": "≅", + "\\approxnotequal": "≆", + "\\not\\cong": "≇", + "\\approx": "≈", + "\\not\\approx": "≉", + "\\approxeq": "≊", + "\\tildetrpl": "≋", + "\\not\\apid": "≋̞", + "\\allequal": "≌", + "\\asymp": "≍", + "\\Bumpeq": "≎", + "\\NotHumpDownHump": "≎̞", + "\\bumpeq": "≏", + "\\NotHumpEqual": "≏̞", + "\\doteq": "≐", + "\\not\\doteq": "≐̞", + "\\doteqdot": "≑", + "\\fallingdotseq": "≒", + "\\risingdotseq": "≓", + "\\coloneq": "≔", + "\\eqcirc": "≖", + "\\circeq": "≗", + "\\arceq": "≘", + "\\estimates": "≙", + "\\starequal": "≛", + "\\triangleq": "≜", + "\\eqdef": "≝", + "\\measeq": "≞", + "\\neq": "≠", + "\\equiv": "≡", + "\\not\\equiv": "≱", + "\\Equiv": "≣", + "\\leq": "≀", + "\\le": "≀", + "\\geq": "≄", + "\\leqq": "≩", + "\\geqq": "≧", + "\\lneqq": "≹", + "\\lvertneqq": "≚", + "\\gneqq": "≩", + "\\gvertneqq": "≩", + "\\ll": "â‰Ș", + "\\NotLessLess": "â‰ȘÌž", + "\\gg": "≫", + "\\NotGreaterGreater": "≫̞", + "\\between": "≬", + "{\\not\\kern-0.3em\\times}": "≭", + "\\not<": "≼", + "\\not>": "≯", + "\\not\\leq": "≰", + "\\not\\geq": "≱", + "\\lessequivlnt": "â‰Č", + "\\greaterequivlnt": "≳", + "\\lessgtr": "≶", + "\\gtrless": "≷", + "\\notlessgreater": "≾", + "\\notgreaterless": "â‰č", + "\\prec": "â‰ș", + "\\succ": "≻", + "\\preccurlyeq": "≌", + "\\succcurlyeq": "≜", + "\\NotPrecedesTilde": "≟̞", + "\\NotSucceedsTilde": "â‰żÌž", + "\\not\\prec": "⊀", + "\\not\\succ": "⊁", + "\\subset": "⊂", + "\\supset": "⊃", + "\\not\\subset": "⊄", + "\\not\\supset": "⊅", + "\\subseteq": "⊆", + "\\supseteq": "⊇", + "\\not\\subseteq": "⊈", + "\\not\\supseteq": "⊉", + "\\subsetneq": "⊊", + "\\varsubsetneqq": "⊊", + "\\supsetneq": "⊋", + "\\varsupsetneq": "⊋", + "\\cupleftarrow": "⊌", + "\\cupdot": "⊍", + "\\uplus": "⊎", + "\\sqsubset": "⊏", + "\\NotSquareSubset": "⊏̞", + "\\sqsupset": "⊐", + "\\NotSquareSuperset": "⊐̞", + "\\sqsubseteq": "⊑", + "\\sqsupseteq": "⊒", + "\\sqcap": "⊓", + "\\sqcup": "⊔", + "\\oplus": "⊕", + "\\ominus": "⊖", + "\\otimes": "⊗", + "\\oslash": "⊘", + "\\odot": "⊙", + "\\circledcirc": "⊚", + "\\circledast": "⊛", + "\\circledequal": "⊜", + "\\circleddash": "⊝", + "\\boxplus": "⊞", + "\\boxminus": "⊟", + "\\boxtimes": "⊠", + "\\boxdot": "⊡", + "\\vdash": "⊱", + "\\dashv": "⊣", + "\\top": "⊀", + "\\assert": "⊩", + "\\truestate": "⊧", + "\\forcesextra": "⊹", + "\\Vdash": "⊩", + "\\Vvdash": "âŠȘ", + "\\VDash": "⊫", + "\\nvdash": "⊬", + "\\nvDash": "⊭", + "\\nVdash": "⊼", + "\\nVDash": "⊯", + "\\prurel": "⊰", + "\\scurel": "⊱", + "\\vartriangleleft": "âŠČ", + "\\vartriangleright": "⊳", + "\\trianglelefteq": "⊮", + "\\trianglerighteq": "⊔", + "\\original": "⊶", + "\\image": "⊷", + "\\multimap": "⊾", + "\\hermitconjmatrix": "âŠč", + "\\intercal": "âŠș", + "\\veebar": "⊻", + "\\barvee": "⊜", + "\\rightanglearc": "⊟", + "\\varlrtriangle": "⊿", + "\\bigcap": "⋂", + "\\bigcup": "⋃", + "\\diamond": "⋄", + "\\cdot": "⋅", + "\\star": "⋆", + "\\divideontimes": "⋇", + "\\bowtie": "⋈", + "\\ltimes": "⋉", + "\\rtimes": "⋊", + "\\leftthreetimes": "⋋", + "\\rightthreetimes": "⋌", + "\\backsimeq": "⋍", + "\\curlyvee": "⋎", + "\\curlywedge": "⋏", + "\\Subset": "⋐", + "\\Supset": "⋑", + "\\Cap": "⋒", + "\\Cup": "⋓", + "\\pitchfork": "⋔", + "\\hash": "⋕", + "\\lessdot": "⋖", + "\\gtrdot": "⋗", + "\\verymuchless": "⋘", + "\\verymuchgreater": "⋙", + "\\lesseqgtr": "⋚", + "\\gtreqless": "⋛", + "\\eqless": "⋜", + "\\eqgtr": "⋝", + "\\curlyeqprec": "⋞", + "\\curlyeqsucc": "⋟", + "\\npreceq": "⋠", + "\\nsucceq": "⋡", + "\\not\\sqsubseteq": "⋱", + "\\not\\sqsupseteq": "⋣", + "\\sqsubsetneq": "â‹€", + "\\Elzsqspne": "â‹„", + "\\lnsim": "⋩", + "\\gnsim": "⋧", + "\\precedesnotsimilar": "⋹", + "\\succnsim": "⋩", + "\\ntriangleleft": "â‹Ș", + "\\ntriangleright": "⋫", + "\\ntrianglelefteq": "⋬", + "\\ntrianglerighteq": "⋭", + "\\vdots": "⋼", + "\\cdots": "⋯", + "\\upslopeellipsis": "⋰", + "\\downslopeellipsis": "⋱", + "\\disin": "â‹Č", + "\\varisins": "⋳", + "\\isins": "⋮", + "\\isindot": "â‹”", + "\\barin": "⋶", + "\\isinobar": "⋷", + "\\isinvb": "⋾", + "\\isinE": "â‹č", + "\\nisd": "â‹ș", + "\\varnis": "⋻", + "\\nis": "â‹Œ", + "\\varniobar": "â‹œ", + "\\niobar": "â‹Ÿ", + "\\bagmember": "⋿", + "\\diameter": "⌀", + "\\house": "⌂", + "\\barwedge": "⌅", + "\\varbarwedge": "⌅", + "\\perspcorrespond": "⌆", + "\\lceil": "⌈", + "\\rceil": "⌉", + "\\lfloor": "⌊", + "\\rfloor": "⌋", + "\\invneg": "⌐", + "\\wasylozenge": "⌑", + "\\profline": "⌒", + "\\profsurf": "⌓", + "\\recorder": "⌕", + "{\\mathchar\"2208}": "⌖", + "\\viewdata": "⌗", + "\\turnednot": "⌙", + "\\ulcorner": "⌜", + "\\urcorner": "⌝", + "\\llcorner": "⌞", + "\\lrcorner": "⌟", + "\\inttop": "⌠", + "\\intbottom": "⌡", + "\\frown": "⌱", + "\\smile": "⌣", + "\\varhexagonlrbonds": "⌬", + "\\conictaper": "âŒČ", + "\\topbot": "⌶", + "\\APLinv": "âŒč", + "\\notslash": "⌿", + "\\notbackslash": "⍀", + "\\APLleftarrowbox": "⍇", + "\\APLrightarrowbox": "⍈", + "\\invdiameter": "⍉", + "\\APLuparrowbox": "⍐", + "\\APLboxupcaret": "⍓", + "\\APLdownarrowbox": "⍗", + "\\APLcomment": "⍝", + "\\APLinput": "⍞", + "\\APLlog": "⍟", + "\\APLboxquestion": "⍰", + "\\rangledownzigzagarrow": "⍌", + "\\hexagon": "⎔", + "\\lparenuend": "⎛", + "\\lparenextender": "⎜", + "\\lparenlend": "⎝", + "\\rparenuend": "⎞", + "\\rparenextender": "⎟", + "\\rparenlend": "⎠", + "\\lbrackuend": "⎡", + "\\lbrackextender": "⎱", + "\\Elzdlcorn": "⎣", + "\\rbrackuend": "⎀", + "\\rbrackextender": "⎄", + "\\rbracklend": "⎊", + "\\lbraceuend": "⎧", + "\\lbracemid": "⎚", + "\\lbracelend": "⎩", + "\\vbraceextender": "âŽȘ", + "\\rbraceuend": "⎫", + "\\rbracemid": "⎬", + "\\rbracelend": "⎭", + "\\intextender": "⎼", + "\\harrowextender": "⎯", + "\\lmoustache": "⎰", + "\\rmoustache": "⎱", + "\\sumtop": "âŽČ", + "\\sumbottom": "⎳", + "\\overbracket": "⎮", + "\\underbracket": "⎔", + "\\bbrktbrk": "⎶", + "\\sqrtbottom": "⎷", + "\\lvboxline": "⎾", + "\\rvboxline": "âŽč", + "\\varcarriagereturn": "⏎", + "\\overparen": "⏜", + "\\underparen": "⏝", + "\\overbrace": "⏞", + "\\underbrace": "⏟", + "\\obrbrak": "⏠", + "\\ubrbrak": "⏡", + "\\trapezium": "⏱", + "\\benzenr": "⏣", + "\\strns": "⏀", + "\\fltns": "⏄", + "\\accurrent": "⏊", + "\\elinters": "⏧", + "\\textvisiblespace": "␣", + "\\ding{172}": "①", + "\\ding{173}": "②", + "\\ding{174}": "⑱", + "\\ding{175}": "④", + "\\ding{176}": "â‘€", + "\\ding{177}": "â‘„", + "\\ding{178}": "⑩", + "\\ding{179}": "⑧", + "\\ding{180}": "⑹", + "\\ding{181}": "⑩", + "\\circledS": "Ⓢ", + "\\Elzdshfnc": "┆", + "\\Elzsqfnw": "┙", + "\\diagup": "╱", + "\\blockuphalf": "▀", + "\\blocklowhalf": "▄", + "\\blockfull": "█", + "\\blocklefthalf": "▌", + "\\blockrighthalf": "▐", + "\\blockqtrshaded": "░", + "\\blockhalfshaded": "▒", + "\\blockthreeqtrshaded": "▓", + "\\ding{110}": "■", + "\\mdlgblksquare": "■", + "\\square": "□", + "\\Box": "□", + "\\squoval": "▱", + "\\blackinwhitesquare": "▣", + "\\squarehfill": "â–€", + "\\squarevfill": "â–„", + "\\squarehvfill": "▩", + "\\squarenwsefill": "▧", + "\\squareneswfill": "▹", + "\\squarecrossfill": "▩", + "\\smwhtsquare": "▫", + "\\hrectangleblack": "▬", + "\\fbox{~~}": "▭", + "\\vrectangleblack": "▼", + "\\Elzvrecto": "▯", + "\\parallelogramblack": "▰", + "\\ding{115}": "â–Č", + "\\bigblacktriangleup": "â–Č", + "\\bigtriangleup": "△", + "\\blacktriangle": "▮", + "\\vartriangle": "â–”", + "\\RHD": "▶", + "\\rhd": "▷", + "\\blacktriangleright": "▾", + "\\triangleright": "â–č", + "\\blackpointerright": "â–ș", + "\\whitepointerright": "▻", + "\\ding{116}": "â–Œ", + "\\bigblacktriangledown": "â–Œ", + "\\bigtriangledown": "â–œ", + "\\blacktriangledown": "â–Ÿ", + "\\triangledown": "▿", + "\\LHD": "◀", + "\\lhd": "◁", + "\\blacktriangleleft": "◂", + "\\triangleleft": "◃", + "\\blackpointerleft": "◄", + "\\whitepointerleft": "◅", + "\\ding{117}": "◆", + "\\Diamondblack": "◆", + "\\Diamond": "◇", + "\\blackinwhitediamond": "◈", + "\\fisheye": "◉", + "\\lozenge": "◊", + "\\dottedcircle": "◌", + "\\circlevertfill": "◍", + "\\bullseye": "◎", + "\\ding{108}": "●", + "\\CIRCLE": "●", + "\\Elzcirfl": "◐", + "\\Elzcirfr": "◑", + "\\Elzcirfb": "◒", + "\\circletophalfblack": "◓", + "\\circleurquadblack": "◔", + "\\blackcircleulquadwhite": "◕", + "\\LEFTCIRCLE": "◖", + "\\ding{119}": "◗", + "\\RIGHTCIRCLE": "◗", + "\\Elzrvbull": "◘", + "\\inversewhitecircle": "◙", + "\\invwhiteupperhalfcircle": "◚", + "\\invwhitelowerhalfcircle": "◛", + "\\ularc": "◜", + "\\urarc": "◝", + "\\lrarc": "◞", + "\\llarc": "◟", + "\\topsemicircle": "◠", + "\\botsemicircle": "◡", + "\\lrblacktriangle": "◱", + "\\llblacktriangle": "◣", + "\\ulblacktriangle": "â—€", + "\\urblacktriangle": "â—„", + "\\smwhtcircle": "◩", + "\\Elzsqfl": "◧", + "\\Elzsqfr": "◹", + "\\squareulblack": "◩", + "\\Elzsqfse": "â—Ș", + "\\boxbar": "◫", + "\\trianglecdot": "◬", + "\\triangleleftblack": "◭", + "\\trianglerightblack": "◼", + "\\bigcirc": "◯", + "\\squareulquad": "◰", + "\\squarellquad": "◱", + "\\squarelrquad": "â—Č", + "\\squareurquad": "◳", + "\\circleulquad": "◮", + "\\circlellquad": "â—”", + "\\circlelrquad": "◶", + "\\circleurquad": "◷", + "\\ultriangle": "◾", + "\\urtriangle": "â—č", + "\\lltriangle": "â—ș", + "\\mdsmwhtsquare": "â—œ", + "\\mdsmblksquare": "â—Ÿ", + "\\lrtriangle": "◿", + "\\ding{72}": "★", + "\\bigstar": "★", + "\\ding{73}": "☆", + "\\bigwhitestar": "☆", + "\\Sun": "☉", + "\\ding{37}": "☎", + "\\Square": "☐", + "\\CheckedBox": "☑", + "\\XBox": "☒", + "\\steaming": "☕", + "\\ding{42}": "☛", + "\\ding{43}": "☞", + "\\pointright": "☞", + "\\skull": "☠", + "\\danger": "☥", + "\\radiation": "☹", + "\\biohazard": "☣", + "\\yinyang": "☯", + "\\frownie": "â˜č", + "\\smiley": "â˜ș", + "\\blacksmiley": "☻", + "\\sun": "☌", + "\\rightmoon": "☜", + "\\leftmoon": "☟", + "\\mercury": "☿", + "\\venus": "♀", + "\\female": "♀", + "\\earth": "♁", + "\\male": "♂", + "\\jupiter": "♃", + "\\saturn": "♄", + "\\uranus": "♅", + "\\neptune": "♆", + "\\pluto": "♇", + "\\aries": "♈", + "\\taurus": "♉", + "\\gemini": "♊", + "\\cancer": "♋", + "\\leo": "♌", + "\\virgo": "♍", + "\\libra": "♎", + "\\scorpio": "♏", + "\\sagittarius": "♐", + "\\capricornus": "♑", + "\\aquarius": "♒", + "\\pisces": "♓", + "\\ding{171}": "♠", + "\\spadesuit": "♠", + "\\heartsuit": "♡", + "\\ding{168}": "♣", + "\\clubsuit": "♣", + "\\varspadesuit": "♀", + "\\ding{170}": "♄", + "\\varheartsuit": "♄", + "\\ding{169}": "♩", + "\\vardiamondsuit": "♩", + "\\varclubsuit": "♧", + "\\quarternote": "♩", + "\\eighthnote": "â™Ș", + "\\twonotes": "♫", + "\\sixteenthnote": "♬", + "\\flat": "♭", + "\\natural": "♼", + "\\sharp": "♯", + "\\recycle": "♻", + "\\acidfree": "♟", + "\\dicei": "⚀", + "\\diceii": "⚁", + "\\diceiii": "⚂", + "\\diceiv": "⚃", + "\\dicev": "⚄", + "\\dicevi": "⚅", + "\\circledrightdot": "⚆", + "\\circledtwodots": "⚇", + "\\blackcircledrightdot": "⚈", + "\\blackcircledtwodots": "⚉", + "\\anchor": "⚓", + "\\swords": "⚔", + "\\warning": "⚠", + "\\Hermaphrodite": "âš„", + "\\medcirc": "âšȘ", + "\\medbullet": "⚫", + "\\mdsmwhtcircle": "⚬", + "\\neuter": "âšČ", + "\\ding{33}": "✁", + "\\ding{34}": "✂", + "\\ding{35}": "✃", + "\\ding{36}": "✄", + "\\ding{38}": "✆", + "\\ding{39}": "✇", + "\\ding{40}": "✈", + "\\ding{41}": "✉", + "\\ding{44}": "✌", + "\\ding{45}": "✍", + "\\ding{46}": "✎", + "\\pencil": "✎", + "\\ding{47}": "✏", + "\\ding{48}": "✐", + "\\ding{49}": "✑", + "\\ding{50}": "✒", + "\\ding{51}": "✓", + "\\checkmark": "✓", + "\\ding{52}": "✔", + "\\ding{53}": "✕", + "\\ding{54}": "✖", + "\\ding{55}": "✗", + "\\ballotx": "✗", + "\\ding{56}": "✘", + "\\ding{57}": "✙", + "\\ding{58}": "✚", + "\\ding{59}": "✛", + "\\ding{60}": "✜", + "\\ding{61}": "✝", + "\\ding{62}": "✞", + "\\ding{63}": "✟", + "\\ding{64}": "✠", + "\\maltese": "✠", + "\\ding{65}": "✡", + "\\ding{66}": "✱", + "\\ding{67}": "✣", + "\\ding{68}": "✀", + "\\ding{69}": "✄", + "\\ding{70}": "✩", + "\\ding{71}": "✧", + "\\ding{74}": "âœȘ", + "\\circledstar": "âœȘ", + "\\ding{75}": "✫", + "\\ding{76}": "✬", + "\\ding{77}": "✭", + "\\ding{78}": "✼", + "\\ding{79}": "✯", + "\\ding{80}": "✰", + "\\ding{81}": "✱", + "\\ding{82}": "âœČ", + "\\ding{83}": "✳", + "\\ding{84}": "✮", + "\\ding{85}": "✔", + "\\ding{86}": "✶", + "\\varstar": "✶", + "\\ding{87}": "✷", + "\\ding{88}": "✾", + "\\ding{89}": "âœč", + "\\ding{90}": "âœș", + "\\ding{91}": "✻", + "\\ding{92}": "✌", + "\\ding{93}": "✜", + "\\dingasterisk": "✜", + "\\ding{94}": "✟", + "\\ding{95}": "✿", + "\\ding{96}": "❀", + "\\ding{97}": "❁", + "\\ding{98}": "❂", + "\\ding{99}": "❃", + "\\ding{100}": "❄", + "\\ding{101}": "❅", + "\\ding{102}": "❆", + "\\ding{103}": "❇", + "\\ding{104}": "❈", + "\\ding{105}": "❉", + "\\ding{106}": "❊", + "\\ding{107}": "❋", + "\\ding{109}": "❍", + "\\ding{111}": "❏", + "\\ding{112}": "❐", + "\\ding{113}": "❑", + "\\ding{114}": "❒", + "\\ding{118}": "❖", + "\\ding{120}": "❘", + "\\ding{121}": "❙", + "\\ding{122}": "❚", + "\\ding{123}": "❛", + "\\ding{124}": "❜", + "\\ding{125}": "❝", + "\\ding{126}": "❞", + "\\ding{161}": "❡", + "\\ding{162}": "❱", + "\\ding{163}": "❣", + "\\ding{164}": "❀", + "\\ding{165}": "❄", + "\\ding{166}": "❊", + "\\ding{167}": "❧", + "\\ding{182}": "❶", + "\\ding{183}": "❷", + "\\ding{184}": "❞", + "\\ding{185}": "âč", + "\\ding{186}": "âș", + "\\ding{187}": "❻", + "\\ding{188}": "❌", + "\\ding{189}": "❜", + "\\ding{190}": "❟", + "\\ding{191}": "❿", + "\\ding{192}": "➀", + "\\ding{193}": "➁", + "\\ding{194}": "➂", + "\\ding{195}": "➃", + "\\ding{196}": "➄", + "\\ding{197}": "➅", + "\\ding{198}": "➆", + "\\ding{199}": "➇", + "\\ding{200}": "➈", + "\\ding{201}": "➉", + "\\ding{202}": "➊", + "\\ding{203}": "➋", + "\\ding{204}": "➌", + "\\ding{205}": "➍", + "\\ding{206}": "➎", + "\\ding{207}": "➏", + "\\ding{208}": "➐", + "\\ding{209}": "➑", + "\\ding{210}": "➒", + "\\ding{211}": "➓", + "\\ding{212}": "➔", + "\\ding{216}": "➘", + "\\ding{217}": "➙", + "\\ding{218}": "➚", + "\\ding{219}": "➛", + "\\draftingarrow": "➛", + "\\ding{220}": "➜", + "\\ding{221}": "➝", + "\\ding{222}": "➞", + "\\ding{223}": "➟", + "\\ding{224}": "➠", + "\\ding{225}": "➡", + "\\ding{226}": "➱", + "\\arrowbullet": "➱", + "\\ding{227}": "➣", + "\\ding{228}": "➀", + "\\ding{229}": "➄", + "\\ding{230}": "➊", + "\\ding{231}": "➧", + "\\ding{232}": "➚", + "\\ding{233}": "➩", + "\\ding{234}": "âžȘ", + "\\ding{235}": "➫", + "\\ding{236}": "➬", + "\\ding{237}": "➭", + "\\ding{238}": "➼", + "\\ding{239}": "➯", + "\\ding{241}": "➱", + "\\ding{242}": "âžČ", + "\\ding{243}": "➳", + "\\ding{244}": "➮", + "\\ding{245}": "➔", + "\\ding{246}": "➶", + "\\ding{247}": "➷", + "\\ding{248}": "➾", + "\\ding{249}": "âžč", + "\\ding{250}": "âžș", + "\\ding{251}": "➻", + "\\ding{252}": "➌", + "\\ding{253}": "➜", + "\\ding{254}": "➟", + "\\threedangle": "⟀", + "\\whiteinwhitetriangle": "⟁", + "\\perp": "⟂", + "\\subsetcirc": "⟃", + "\\supsetcirc": "⟄", + "\\Lbag": "⟅", + "\\Rbag": "⟆", + "\\veedot": "⟇", + "\\bsolhsub": "⟈", + "\\suphsol": "⟉", + "\\longdivision": "⟌", + "\\Diamonddot": "⟐", + "\\wedgedot": "⟑", + "\\upin": "⟒", + "\\pullback": "⟓", + "\\pushout": "⟔", + "\\leftouterjoin": "⟕", + "\\rightouterjoin": "⟖", + "\\fullouterjoin": "⟗", + "\\bigbot": "⟘", + "\\bigtop": "⟙", + "\\DashVDash": "⟚", + "\\dashVdash": "⟛", + "\\multimapinv": "⟜", + "\\vlongdash": "⟝", + "\\longdashv": "⟞", + "\\cirbot": "⟟", + "\\lozengeminus": "⟠", + "\\concavediamond": "⟡", + "\\concavediamondtickleft": "⟱", + "\\concavediamondtickright": "⟣", + "\\whitesquaretickleft": "⟀", + "\\whitesquaretickright": "⟄", + "\\llbracket": "⟩", + "\\rrbracket": "⟧", + "\\langle": "⟹", + "\\rangle": "⟩", + "\\lang": "âŸȘ", + "\\rang": "⟫", + "\\Lbrbrak": "⟬", + "\\Rbrbrak": "⟭", + "\\lgroup": "⟼", + "\\rgroup": "⟯", + "\\UUparrow": "⟰", + "\\DDownarrow": "⟱", + "\\acwgapcirclearrow": "âŸČ", + "\\cwgapcirclearrow": "⟳", + "\\rightarrowonoplus": "⟮", + "\\longleftarrow": "⟔", + "\\longrightarrow": "⟶", + "\\longleftrightarrow": "⟷", + "\\Longleftarrow": "⟾", + "\\Longrightarrow": "âŸč", + "\\Longleftrightarrow": "âŸș", + "\\longmapsfrom": "⟻", + "\\longmapsto": "⟌", + "\\Longmapsfrom": "⟜", + "\\Longmapsto": "⟟", + "\\sim\\joinrel\\leadsto": "⟿", + "\\psur": " ", + "\\nVtwoheadrightarrow": " ", + "\\nvLeftarrow": " ", + "\\nvRightarrow": " ", + "\\nvLeftrightarrow": " ", + "\\Mapsfrom": " ", + "\\Mapsto": " ", + "\\downarrowbarred": " ", + "\\uparrowbarred": " ", + "\\Uuparrow": " ", + "\\Ddownarrow": "​", + "\\leftbkarrow": "‌", + "\\rightbkarrow": "‍", + "\\leftdbkarrow": "‎", + "\\dbkarow": "‏", + "\\drbkarow": "‐", + "\\rightdotarrow": "‑", + "\\UpArrowBar": "‒", + "\\DownArrowBar": "–", + "\\pinj": "—", + "\\finj": "―", + "\\bij": "‖", + "\\nvtwoheadrightarrowtail": "‗", + "\\nVtwoheadrightarrowtail": "‘", + "\\lefttail": "’", + "\\righttail": "‚", + "\\leftdbltail": "‛", + "\\rightdbltail": "“", + "\\diamondleftarrow": "”", + "\\rightarrowdiamond": "„", + "\\diamondleftarrowbar": "‟", + "\\barrightarrowdiamond": "†", + "\\nwsearrow": "‥", + "\\neswarrow": "‹", + "\\rdiagovfdiag": "‫", + "\\fdiagovrdiag": "‏", + "\\seovnearrow": "‭", + "\\neovsearrow": "‟", + "\\fdiagovnearrow": " ", + "\\rdiagovsearrow": "‰", + "\\neovnwarrow": "‱", + "\\nwovnearrow": "â€Č", + "\\uprightcurvearrow": "‎", + "\\downrightcurvedarrow": "—", + "\\cwrightarcarrow": "„", + "\\acwleftarcarrow": "â€č", + "\\acwoverarcarrow": "â€ș", + "\\acwunderarcarrow": "※", + "\\curvearrowrightminus": "‌", + "\\curvearrowleftplus": "“", + "\\cwundercurvearrow": "‟", + "\\ccwundercurvearrow": "‿", + "\\Elolarr": "â„€", + "\\Elorarr": "℁", + "\\ElzRlarr": "â„‚", + "\\leftarrowshortrightarrow": "℃", + "\\ElzrLarr": "â„„", + "\\rightarrowplus": "â„…", + "\\leftarrowplus": "℆", + "\\Elzrarrx": "ℇ", + "\\leftrightarrowcircle": "℈", + "\\twoheaduparrowcircle": "℉", + "\\leftrightharpoon": "â„Š", + "\\rightleftharpoon": "â„‹", + "\\updownharpoonrightleft": "â„Œ", + "\\updownharpoonleftright": "ℍ", + "\\LeftRightVector": "ℎ", + "\\RightUpDownVector": "ℏ", + "\\DownLeftRightVector": "ℐ", + "\\LeftUpDownVector": "â„‘", + "\\LeftVectorBar": "â„’", + "\\RightVectorBar": "â„“", + "\\RightUpVectorBar": "â„”", + "\\RightDownVectorBar": "â„•", + "\\DownLeftVectorBar": "â„–", + "\\DownRightVectorBar": "â„—", + "\\LeftUpVectorBar": "℘", + "\\LeftDownVectorBar": "â„™", + "\\LeftTeeVector": "â„š", + "\\RightTeeVector": "â„›", + "\\RightUpTeeVector": "â„œ", + "\\RightDownTeeVector": "ℝ", + "\\DownLeftTeeVector": "℞", + "\\DownRightTeeVector": "â„Ÿ", + "\\LeftUpTeeVector": "â„ ", + "\\LeftDownTeeVector": "â„Ą", + "\\leftleftharpoons": "â„ą", + "\\upupharpoons": "â„Ł", + "\\rightrightharpoons": "â„€", + "\\downdownharpoons": "â„„", + "\\leftrightharpoonsup": "â„Š", + "\\leftrightharpoonsdown": "℧", + "\\rightleftharpoonsup": "â„š", + "\\rightleftharpoonsdown": "â„©", + "\\leftbarharpoon": "â„Ș", + "\\barleftharpoon": "â„«", + "\\rightbarharpoon": "â„Ź", + "\\barrightharpoon": "â„­", + "\\UpEquilibrium": "â„ź", + "\\ReverseUpEquilibrium": "â„Ż", + "\\RoundImplies": "â„°", + "\\equalrightarrow": "ℱ", + "\\similarrightarrow": "â„Č", + "\\leftarrowsimilar": "â„ł", + "\\rightarrowsimilar": "â„Ž", + "\\rightarrowapprox": "â„”", + "\\ltlarr": "ℶ", + "\\leftarrowless": "â„·", + "\\gtrarr": "â„ž", + "\\subrarr": "â„č", + "\\leftarrowsubset": "â„ș", + "\\suplarr": "â„»", + "\\upfishtail": "â„Ÿ", + "\\downfishtail": "â„ż", + "\\Elztfnc": "⩀", + "\\spot": "⊁", + "\\typecolon": "⩂", + "\\lBrace": "⊃", + "\\rBrace": "⩄", + "\\Elroang": "⩆", + "\\limg": "⩇", + "\\rimg": "⊈", + "\\lblot": "⩉", + "\\rblot": "⩊", + "\\lbrackubar": "⩋", + "\\rbrackubar": "⩌", + "\\lbrackultick": "⊍", + "\\rbracklrtick": "⊎", + "\\lbracklltick": "⊏", + "\\rbrackurtick": "⊐", + "\\langledot": "⩑", + "\\rangledot": "⩒", + "<\\kern-0.58em(": "⩓", + "\\Lparengtr": "⩕", + "\\Rparenless": "⩖", + "\\lblkbrbrak": "⩗", + "\\rblkbrbrak": "⊘", + "\\Elzddfnc": "⩙", + "\\vzigzag": "⩚", + "\\measuredangleleft": "⩛", + "\\Angle": "⩜", + "\\rightanglemdot": "⊝", + "\\angles": "⊞", + "\\angdnr": "⩟", + "\\Elzlpargt": "⊠", + "\\sphericalangleup": "⊥", + "\\turnangle": "⊹", + "\\revangle": "⊣", + "\\angleubar": "⊀", + "\\revangleubar": "⊄", + "\\wideangledown": "⊊", + "\\wideangleup": "⊧", + "\\measanglerutone": "⊚", + "\\measanglelutonw": "⊩", + "\\measanglerdtose": "âŠȘ", + "\\measangleldtosw": "⊫", + "\\measangleurtone": "⊏", + "\\measangleultonw": "⊭", + "\\measangledrtose": "⊟", + "\\measangledltosw": "⊯", + "\\revemptyset": "⊰", + "\\emptysetobar": "⊱", + "\\emptysetocirc": "âŠČ", + "\\emptysetoarr": "⊳", + "\\emptysetoarrl": "⊎", + "\\circledparallel": "⊷", + "\\circledbslash": "⊞", + "\\operp": "âŠč", + "\\obot": "âŠș", + "\\olcross": "⊻", + "\\odotslashdot": "⊌", + "\\uparrowoncircle": "⊜", + "\\circledwhitebullet": "⊟", + "\\circledbullet": "⊿", + "\\circledless": "⧀", + "\\circledgtr": "⧁", + "\\cirscir": "⧂", + "\\cirE": "⧃", + "\\boxslash": "⧄", + "\\boxbslash": "⧅", + "\\boxast": "⧆", + "\\boxcircle": "⧇", + "\\boxbox": "⧈", + "\\boxonbox": "⧉", + "\\ElzLap": "⧊", + "\\Elzdefas": "⧋", + "\\triangles": "⧌", + "\\triangleserifs": "⧍", + "\\rtriltri": "⧎", + "\\LeftTriangleBar": "⧏", + "\\NotLeftTriangleBar": "⧏̞", + "\\RightTriangleBar": "⧐", + "\\NotRightTriangleBar": "⧐̞", + "\\lfbowtie": "⧑", + "\\rfbowtie": "⧒", + "\\fbowtie": "⧓", + "\\lftimes": "⧔", + "\\rftimes": "⧕", + "\\hourglass": "⧖", + "\\blackhourglass": "⧗", + "\\lvzigzag": "⧘", + "\\rvzigzag": "⧙", + "\\Lvzigzag": "⧚", + "\\Rvzigzag": "⧛", + "\\tieinfty": "⧝", + "\\nvinfty": "⧞", + "\\multimapboth": "⧟", + "\\laplac": "⧠", + "\\lrtriangleeq": "⧥", + "\\shuffle": "⧹", + "\\eparsl": "⧣", + "\\smeparsl": "⧀", + "\\eqvparsl": "⧄", + "\\gleichstark": "⧊", + "\\thermod": "⧧", + "\\downtriangleleftblack": "⧚", + "\\downtrianglerightblack": "⧩", + "\\blackdiamonddownarrow": "â§Ș", + "\\blacklozenge": "⧫", + "\\circledownarrow": "⧏", + "\\blackcircledownarrow": "⧭", + "\\errbarsquare": "⧟", + "\\errbarblacksquare": "⧯", + "\\errbardiamond": "⧰", + "\\errbarblackdiamond": "⧱", + "\\errbarcircle": "â§Č", + "\\errbarblackcircle": "⧳", + "\\RuleDelayed": "⧎", + "\\dsol": "⧶", + "\\rsolbar": "⧷", + "\\xsol": "⧞", + "\\zhide": "â§č", + "\\doubleplus": "â§ș", + "\\tripleplus": "⧻", + "\\lcurvyangle": "⧌", + "\\rcurvyangle": "⧜", + "\\tplus": "⧟", + "\\tminus": "⧿", + "\\bigodot": "⹀", + "\\bigoplus": "⚁", + "\\bigotimes": "⹂", + "\\bigcupdot": "⚃", + "\\Elxuplus": "⹄", + "\\ElzThr": "⹅", + "\\Elxsqcup": "⹆", + "\\ElzInf": "⹇", + "\\ElzSup": "⚈", + "\\varprod": "⹉", + "\\modtwosum": "⹊", + "\\sumint": "⹋", + "\\iiiint": "⹌", + "\\ElzCint": "⚍", + "\\intBar": "⚎", + "\\clockoint": "⚏", + "\\awint": "⹑", + "\\rppolint": "⹒", + "\\scpolint": "⹓", + "\\npolint": "⹔", + "\\pointint": "⹕", + "\\sqrint": "⹖", + "\\intlarhk": "⹗", + "\\intx": "⚘", + "\\intcap": "⹙", + "\\intcup": "⹚", + "\\upint": "⹛", + "\\lowint": "⹜", + "\\Join": "⚝", + "\\bigtriangleleft": "⚞", + "\\zcmp": "⹟", + "\\zpipe": "âš ", + "\\zproject": "⚥", + "\\ringplus": "âšą", + "\\plushat": "⚣", + "\\simplus": "⚀", + "\\plussim": "⚊", + "\\plussubtwo": "⚧", + "\\plustrif": "âšš", + "\\commaminus": "âš©", + "\\minusfdots": "âš«", + "\\minusrdots": "⚏", + "\\ElzTimes": "⚯", + "\\dottimes": "âš°", + "\\timesbar": "âš±", + "\\btimes": "âšČ", + "\\smashtimes": "âšł", + "\\otimeshat": "⚶", + "\\Otimes": "âš·", + "\\odiv": "âšž", + "\\triangleplus": "âšč", + "\\triangleminus": "âšș", + "\\triangletimes": "âš»", + "\\intprodr": "âšœ", + "\\fcmp": "⚟", + "\\amalg": "âšż", + "\\capdot": "⩀", + "\\uminus": "⩁", + "\\barcup": "⩂", + "\\barcap": "⩃", + "\\capwedge": "⩄", + "\\cupvee": "⩅", + "\\cupovercap": "⩆", + "\\capovercup": "⩇", + "\\cupbarcap": "⩈", + "\\capbarcup": "⩉", + "\\twocups": "⩊", + "\\twocaps": "⩋", + "\\closedvarcup": "⩌", + "\\closedvarcap": "⩍", + "\\Sqcap": "⩎", + "\\Sqcup": "⩏", + "\\closedvarcupsmashprod": "⩐", + "\\wedgeodot": "⩑", + "\\veeodot": "⩒", + "\\ElzAnd": "⩓", + "\\ElzOr": "⩔", + "\\ElOr": "⩖", + "\\bigslopedvee": "⩗", + "\\bigslopedwedge": "⩘", + "\\veeonwedge": "⩙", + "\\wedgemidvert": "⩚", + "\\veemidvert": "⩛", + "\\midbarwedge": "⩜", + "\\midbarvee": "⩝", + "\\Elzminhat": "⩟", + "\\wedgedoublebar": "â© ", + "\\varveebar": "â©Ą", + "\\doublebarvee": "â©ą", + "\\dsub": "â©€", + "\\rsub": "â©„", + "\\eqdot": "â©Š", + "\\dotequiv": "⩧", + "\\equivVert": "â©š", + "\\equivVvert": "â©©", + "\\dotsim": "â©Ș", + "\\simrdots": "â©«", + "\\simminussim": "â©Ź", + "\\congdot": "â©­", + "\\stackrel{*}{=}": "â©ź", + "\\hatapprox": "â©Ż", + "\\approxeqq": "â©°", + "\\eqqplus": "⩱", + "\\pluseqq": "â©Č", + "\\eqqsim": "â©ł", + "\\Coloneqq": "â©Ž", + "\\Equal": "â©”", + "\\Same": "⩶", + "\\ddotseq": "â©·", + "\\equivDD": "â©ž", + "\\ltcir": "â©č", + "\\gtcir": "â©ș", + "\\ltquest": "â©»", + "\\gtquest": "â©Œ", + "\\leqslant": "â©œ", + "\\nleqslant": "⩜̞", + "\\geqslant": "â©Ÿ", + "\\ngeqslant": "â©ŸÌž", + "\\lesdot": "â©ż", + "\\gesdot": "âȘ€", + "\\lesdoto": "âȘ", + "\\gesdoto": "âȘ‚", + "\\lesdotor": "âȘƒ", + "\\gesdotol": "âȘ„", + "\\lessapprox": "âȘ…", + "\\gtrapprox": "âȘ†", + "\\lneq": "âȘ‡", + "\\gneq": "âȘˆ", + "\\lnapprox": "âȘ‰", + "\\gnapprox": "âȘŠ", + "\\lesseqqgtr": "âȘ‹", + "\\gtreqqless": "âȘŒ", + "\\lsime": "âȘ", + "\\gsime": "âȘŽ", + "\\lsimg": "âȘ", + "\\gsiml": "âȘ", + "\\lgE": "âȘ‘", + "\\glE": "âȘ’", + "\\lesges": "âȘ“", + "\\gesles": "âȘ”", + "\\eqslantless": "âȘ•", + "\\eqslantgtr": "âȘ–", + "\\elsdot": "âȘ—", + "\\egsdot": "âȘ˜", + "\\eqqless": "âȘ™", + "\\eqqgtr": "âȘš", + "\\eqqslantless": "âȘ›", + "\\eqqslantgtr": "âȘœ", + "\\Pisymbol{ppi020}{117}": "âȘ", + "\\Pisymbol{ppi020}{105}": "âȘž", + "\\simlE": "âȘŸ", + "\\simgE": "âȘ ", + "\\NestedLessLess": "âȘĄ", + "\\NotNestedLessLess": "âȘĄÌž", + "\\NestedGreaterGreater": "âȘą", + "\\NotNestedGreaterGreater": "âȘąÌž", + "\\partialmeetcontraction": "âȘŁ", + "\\glj": "âȘ€", + "\\gla": "âȘ„", + "\\leftslice": "âȘŠ", + "\\rightslice": "âȘ§", + "\\lescc": "âȘš", + "\\gescc": "âȘ©", + "\\smt": "âȘȘ", + "\\lat": "âȘ«", + "\\smte": "âȘŹ", + "\\late": "âȘ­", + "\\bumpeqq": "âȘź", + "\\preceq": "âȘŻ", + "\\not\\preceq": "âȘŻÌž", + "\\succeq": "âȘ°", + "\\not\\succeq": "âȘ°Ìž", + "\\precneq": "âȘ±", + "\\succneq": "âȘČ", + "\\preceqq": "âȘł", + "\\succeqq": "âȘŽ", + "\\precneqq": "âȘ”", + "\\succneqq": "âȘ¶", + "\\precapprox": "âȘ·", + "\\succapprox": "âȘž", + "\\precnapprox": "âȘč", + "\\succnapprox": "âȘș", + "\\llcurly": "âȘ»", + "\\ggcurly": "âȘŒ", + "\\subsetdot": "âȘœ", + "\\supsetdot": "âȘŸ", + "\\subsetplus": "âȘż", + "\\supsetplus": "⫀", + "\\submult": "⫁", + "\\supmult": "⫂", + "\\subedot": "⫃", + "\\supedot": "⫄", + "\\subseteqq": "⫅", + "\\nsubseteqq": "â«…Ìž", + "\\supseteqq": "⫆", + "\\nsupseteqq": "⫆̞", + "\\subsim": "⫇", + "\\supsim": "⫈", + "\\subsetapprox": "⫉", + "\\supsetapprox": "⫊", + "\\subsetneqq": "⫋", + "\\supsetneqq": "⫌", + "\\lsqhook": "⫍", + "\\rsqhook": "⫎", + "\\csub": "⫏", + "\\csup": "⫐", + "\\csube": "⫑", + "\\csupe": "⫒", + "\\subsup": "⫓", + "\\supsub": "⫔", + "\\subsub": "⫕", + "\\supsup": "⫖", + "\\suphsub": "⫗", + "\\supdsub": "⫘", + "\\forkv": "⫙", + "\\topfork": "⫚", + "\\mlcp": "⫛", + "\\forks": "⫝̸", + "\\forksnot": "⫝", + "\\shortlefttack": "⫞", + "\\shortdowntack": "⫟", + "\\shortuptack": "â« ", + "\\perps": "â«Ą", + "\\vDdash": "â«ą", + "\\dashV": "â«Ł", + "\\Dashv": "â«€", + "\\DashV": "â«„", + "\\varVdash": "â«Š", + "\\Barv": "⫧", + "\\vBar": "â«š", + "\\vBarv": "â«©", + "\\Top": "â«Ș", + "\\Not": "â«Ź", + "\\bNot": "â«­", + "\\revnmid": "â«ź", + "\\cirmid": "â«Ż", + "\\midcir": "â«°", + "\\topcir": "⫱", + "\\nhpar": "â«Č", + "\\parsim": "â«ł", + "\\interleave": "â«Ž", + "\\nhVvert": "â«”", + "\\Elztdcol": "⫶", + "\\lllnest": "â«·", + "\\gggnest": "â«ž", + "\\leqqslant": "â«č", + "\\geqqslant": "â«ș", + "\\trslash": "â«»", + "\\biginterleave": "â«Œ", + "{{/}\\!\\!{/}}": "â«œ", + "{\\rlap{\\textbackslash}{{/}\\!\\!{/}}}": "⫝̸⃄", + "\\talloblong": "â«Ÿ", + "\\bigtalloblong": "â«ż", + "\\squaretopblack": "⬒", + "\\squarebotblack": "⬓", + "\\squareurblack": "⬔", + "\\squarellblack": "⬕", + "\\diamondleftblack": "⬖", + "\\diamondrightblack": "⬗", + "\\diamondtopblack": "⏘", + "\\diamondbotblack": "⬙", + "\\dottedsquare": "⬚", + "\\blacksquare": "⬛", + "\\vysmblksquare": "⬝", + "\\vysmwhtsquare": "⬞", + "\\pentagonblack": "⬟", + "\\pentagon": "⏠", + "\\varhexagon": "⏥", + "\\varhexagonblack": "⏹", + "\\hexagonblack": "⏣", + "\\lgblkcircle": "⏀", + "\\mdblkdiamond": "⏄", + "\\mdwhtdiamond": "⏊", + "\\mdblklozenge": "⏧", + "\\mdwhtlozenge": "⏚", + "\\smblkdiamond": "⏩", + "\\smblklozenge": "âŹȘ", + "\\smwhtlozenge": "⏫", + "\\blkhorzoval": "⏏", + "\\whthorzoval": "⏭", + "\\blkvertoval": "⏟", + "\\whtvertoval": "⏯", + "\\circleonleftarrow": "⏰", + "\\leftthreearrows": "⏱", + "\\leftarrowonoplus": "âŹČ", + "\\longleftsquigarrow": "⏳", + "\\nvtwoheadleftarrow": "⏎", + "\\nVtwoheadleftarrow": "⏔", + "\\twoheadmapsfrom": "⏶", + "\\twoheadleftdbkarrow": "⏷", + "\\leftdotarrow": "⏞", + "\\nvleftarrowtail": "âŹč", + "\\nVleftarrowtail": "âŹș", + "\\twoheadleftarrowtail": "⏻", + "\\nvtwoheadleftarrowtail": "âŹŒ", + "\\nVtwoheadleftarrowtail": "âŹœ", + "\\leftarrowx": "âŹŸ", + "\\leftcurvedarrow": "⏿", + "\\equalleftarrow": "⭀", + "\\bsimilarleftarrow": "⭁", + "\\leftarrowbackapprox": "⭂", + "\\rightarrowgtr": "⭃", + "\\rightarrowsupset": "⭄", + "\\LLeftarrow": "⭅", + "\\RRightarrow": "⭆", + "\\bsimilarrightarrow": "⭇", + "\\rightarrowbackapprox": "⭈", + "\\similarleftarrow": "⭉", + "\\leftarrowapprox": "⭊", + "\\leftarrowbsimilar": "⭋", + "\\rightarrowbsimilar": "⭌", + "\\medwhitestar": "⭐", + "\\medblackstar": "⭑", + "\\smwhitestar": "⭒", + "\\rightpentagonblack": "⭓", + "\\rightpentagon": "⭔", + "\\postalmark": "〒", + "\\lbrbrak": "〔", + "\\rbrbrak": "〕", + "\\openbracketleft": "〚", + "\\openbracketright": "〛", + "\\hzigzag": "〰", + "\\dbend": "ïżœ", + "\\mathbf{A}": "𝐀", + "\\mathbf{B}": "𝐁", + "\\mathbf{C}": "𝐂", + "\\mathbf{D}": "𝐃", + "\\mathbf{E}": "𝐄", + "\\mathbf{F}": "𝐅", + "\\mathbf{G}": "𝐆", + "\\mathbf{H}": "𝐇", + "\\mathbf{I}": "𝐈", + "\\mathbf{J}": "𝐉", + "\\mathbf{K}": "𝐊", + "\\mathbf{L}": "𝐋", + "\\mathbf{M}": "𝐌", + "\\mathbf{N}": "𝐍", + "\\mathbf{O}": "𝐎", + "\\mathbf{P}": "𝐏", + "\\mathbf{Q}": "𝐐", + "\\mathbf{R}": "𝐑", + "\\mathbf{S}": "𝐒", + "\\mathbf{T}": "𝐓", + "\\mathbf{U}": "𝐔", + "\\mathbf{V}": "𝐕", + "\\mathbf{W}": "𝐖", + "\\mathbf{X}": "𝐗", + "\\mathbf{Y}": "𝐘", + "\\mathbf{Z}": "𝐙", + "\\mathbf{a}": "𝐚", + "\\mathbf{b}": "𝐛", + "\\mathbf{c}": "𝐜", + "\\mathbf{d}": "𝐝", + "\\mathbf{e}": "𝐞", + "\\mathbf{f}": "𝐟", + "\\mathbf{g}": "𝐠", + "\\mathbf{h}": "𝐡", + "\\mathbf{i}": "𝐱", + "\\mathbf{j}": "𝐣", + "\\mathbf{k}": "đ€", + "\\mathbf{l}": "đ„", + "\\mathbf{m}": "𝐩", + "\\mathbf{n}": "𝐧", + "\\mathbf{o}": "𝐹", + "\\mathbf{p}": "đ©", + "\\mathbf{q}": "đȘ", + "\\mathbf{r}": "đ«", + "\\mathbf{s}": "𝐬", + "\\mathbf{t}": "𝐭", + "\\mathbf{u}": "𝐼", + "\\mathbf{v}": "𝐯", + "\\mathbf{w}": "𝐰", + "\\mathbf{x}": "đ±", + "\\mathbf{y}": "đČ", + "\\mathbf{z}": "𝐳", + "\\mathsl{A}": "𝐮", + "\\mathsl{B}": "đ”", + "\\mathsl{C}": "đ¶", + "\\mathsl{D}": "đ·", + "\\mathsl{E}": "𝐾", + "\\mathsl{F}": "đč", + "\\mathsl{G}": "đș", + "\\mathsl{H}": "đ»", + "\\mathsl{I}": "đŒ", + "\\mathsl{J}": "đœ", + "\\mathsl{K}": "đŸ", + "\\mathsl{L}": "𝐿", + "\\mathsl{M}": "𝑀", + "\\mathsl{N}": "𝑁", + "\\mathsl{O}": "𝑂", + "\\mathsl{P}": "𝑃", + "\\mathsl{Q}": "𝑄", + "\\mathsl{R}": "𝑅", + "\\mathsl{S}": "𝑆", + "\\mathsl{T}": "𝑇", + "\\mathsl{U}": "𝑈", + "\\mathsl{V}": "𝑉", + "\\mathsl{W}": "𝑊", + "\\mathsl{X}": "𝑋", + "\\mathsl{Y}": "𝑌", + "\\mathsl{Z}": "𝑍", + "\\mathsl{a}": "𝑎", + "\\mathsl{b}": "𝑏", + "\\mathsl{c}": "𝑐", + "\\mathsl{d}": "𝑑", + "\\mathsl{e}": "𝑒", + "\\mathsl{f}": "𝑓", + "\\mathsl{g}": "𝑔", + "\\mathsl{i}": "𝑖", + "\\mathsl{j}": "𝑗", + "\\mathsl{k}": "𝑘", + "\\mathsl{l}": "𝑙", + "\\mathsl{m}": "𝑚", + "\\mathsl{n}": "𝑛", + "\\mathsl{o}": "𝑜", + "\\mathsl{p}": "𝑝", + "\\mathsl{q}": "𝑞", + "\\mathsl{r}": "𝑟", + "\\mathsl{s}": "𝑠", + "\\mathsl{t}": "𝑡", + "\\mathsl{u}": "𝑱", + "\\mathsl{v}": "𝑣", + "\\mathsl{w}": "đ‘€", + "\\mathsl{x}": "đ‘„", + "\\mathsl{y}": "𝑩", + "\\mathsl{z}": "𝑧", + "\\mathbit{A}": "𝑹", + "\\mathbit{B}": "đ‘©", + "\\mathbit{C}": "đ‘Ș", + "\\mathbit{D}": "đ‘«", + "\\mathbit{E}": "𝑬", + "\\mathbit{F}": "𝑭", + "\\mathbit{G}": "𝑼", + "\\mathbit{H}": "𝑯", + "\\mathbit{I}": "𝑰", + "\\mathbit{J}": "đ‘±", + "\\mathbit{K}": "đ‘Č", + "\\mathbit{L}": "𝑳", + "\\mathbit{M}": "𝑮", + "\\mathbit{N}": "đ‘”", + "\\mathbit{O}": "đ‘¶", + "\\mathbit{P}": "đ‘·", + "\\mathbit{Q}": "𝑾", + "\\mathbit{R}": "đ‘č", + "\\mathbit{S}": "đ‘ș", + "\\mathbit{T}": "đ‘»", + "\\mathbit{U}": "đ‘Œ", + "\\mathbit{V}": "đ‘œ", + "\\mathbit{W}": "đ‘Ÿ", + "\\mathbit{X}": "𝑿", + "\\mathbit{Y}": "𝒀", + "\\mathbit{Z}": "𝒁", + "\\mathbit{a}": "𝒂", + "\\mathbit{b}": "𝒃", + "\\mathbit{c}": "𝒄", + "\\mathbit{d}": "𝒅", + "\\mathbit{e}": "𝒆", + "\\mathbit{f}": "𝒇", + "\\mathbit{g}": "𝒈", + "\\mathbit{h}": "𝒉", + "\\mathbit{i}": "𝒊", + "\\mathbit{j}": "𝒋", + "\\mathbit{k}": "𝒌", + "\\mathbit{l}": "𝒍", + "\\mathbit{m}": "𝒎", + "\\mathbit{n}": "𝒏", + "\\mathbit{o}": "𝒐", + "\\mathbit{p}": "𝒑", + "\\mathbit{q}": "𝒒", + "\\mathbit{r}": "𝒓", + "\\mathbit{s}": "𝒔", + "\\mathbit{t}": "𝒕", + "\\mathbit{u}": "𝒖", + "\\mathbit{v}": "𝒗", + "\\mathbit{w}": "𝒘", + "\\mathbit{x}": "𝒙", + "\\mathbit{y}": "𝒚", + "\\mathbit{z}": "𝒛", + "\\mathscr{A}": "𝒜", + "\\mathscr{C}": "𝒞", + "\\mathscr{D}": "𝒟", + "\\mathscr{G}": "𝒱", + "\\mathscr{J}": "đ’„", + "\\mathscr{K}": "𝒩", + "\\mathscr{N}": "đ’©", + "\\mathscr{O}": "đ’Ș", + "\\mathscr{P}": "đ’«", + "\\mathscr{Q}": "𝒬", + "\\mathscr{S}": "𝒼", + "\\mathscr{T}": "𝒯", + "\\mathscr{U}": "𝒰", + "\\mathscr{V}": "đ’±", + "\\mathscr{W}": "đ’Č", + "\\mathscr{X}": "𝒳", + "\\mathscr{Y}": "𝒮", + "\\mathscr{Z}": "đ’”", + "\\mathscr{a}": "đ’¶", + "\\mathscr{b}": "đ’·", + "\\mathscr{c}": "𝒾", + "\\mathscr{d}": "đ’č", + "\\mathscr{f}": "đ’»", + "\\mathscr{h}": "đ’œ", + "\\mathscr{i}": "đ’Ÿ", + "\\mathscr{j}": "𝒿", + "\\mathscr{k}": "𝓀", + "\\mathscr{m}": "𝓂", + "\\mathscr{n}": "𝓃", + "\\mathscr{p}": "𝓅", + "\\mathscr{q}": "𝓆", + "\\mathscr{r}": "𝓇", + "\\mathscr{s}": "𝓈", + "\\mathscr{t}": "𝓉", + "\\mathscr{u}": "𝓊", + "\\mathscr{v}": "𝓋", + "\\mathscr{w}": "𝓌", + "\\mathscr{x}": "𝓍", + "\\mathscr{y}": "𝓎", + "\\mathscr{z}": "𝓏", + "\\mathmit{A}": "𝓐", + "\\mathmit{B}": "𝓑", + "\\mathmit{C}": "𝓒", + "\\mathmit{D}": "𝓓", + "\\mathmit{E}": "𝓔", + "\\mathmit{F}": "𝓕", + "\\mathmit{G}": "𝓖", + "\\mathmit{H}": "𝓗", + "\\mathmit{I}": "𝓘", + "\\mathmit{J}": "𝓙", + "\\mathmit{K}": "𝓚", + "\\mathmit{L}": "𝓛", + "\\mathmit{M}": "𝓜", + "\\mathmit{N}": "𝓝", + "\\mathmit{O}": "𝓞", + "\\mathmit{P}": "𝓟", + "\\mathmit{Q}": "𝓠", + "\\mathmit{R}": "𝓡", + "\\mathmit{S}": "𝓱", + "\\mathmit{T}": "𝓣", + "\\mathmit{U}": "đ“€", + "\\mathmit{V}": "đ“„", + "\\mathmit{W}": "𝓩", + "\\mathmit{X}": "𝓧", + "\\mathmit{Y}": "𝓹", + "\\mathmit{Z}": "đ“©", + "\\mathmit{a}": "đ“Ș", + "\\mathmit{b}": "đ“«", + "\\mathmit{c}": "𝓬", + "\\mathmit{d}": "𝓭", + "\\mathmit{e}": "𝓼", + "\\mathmit{f}": "𝓯", + "\\mathmit{g}": "𝓰", + "\\mathmit{h}": "đ“±", + "\\mathmit{i}": "đ“Č", + "\\mathmit{j}": "𝓳", + "\\mathmit{k}": "𝓮", + "\\mathmit{l}": "đ“”", + "\\mathmit{m}": "đ“¶", + "\\mathmit{n}": "đ“·", + "\\mathmit{o}": "𝓾", + "\\mathmit{p}": "đ“č", + "\\mathmit{q}": "đ“ș", + "\\mathmit{r}": "đ“»", + "\\mathmit{s}": "đ“Œ", + "\\mathmit{t}": "đ“œ", + "\\mathmit{u}": "đ“Ÿ", + "\\mathmit{v}": "𝓿", + "\\mathmit{w}": "𝔀", + "\\mathmit{x}": "𝔁", + "\\mathmit{y}": "𝔂", + "\\mathmit{z}": "𝔃", + "\\mathfrak{A}": "𝔄", + "\\mathfrak{B}": "𝔅", + "\\mathfrak{D}": "𝔇", + "\\mathfrak{E}": "𝔈", + "\\mathfrak{F}": "𝔉", + "\\mathfrak{G}": "𝔊", + "\\mathfrak{J}": "𝔍", + "\\mathfrak{K}": "𝔎", + "\\mathfrak{L}": "𝔏", + "\\mathfrak{M}": "𝔐", + "\\mathfrak{N}": "𝔑", + "\\mathfrak{O}": "𝔒", + "\\mathfrak{P}": "𝔓", + "\\mathfrak{Q}": "𝔔", + "\\mathfrak{S}": "𝔖", + "\\mathfrak{T}": "𝔗", + "\\mathfrak{U}": "𝔘", + "\\mathfrak{V}": "𝔙", + "\\mathfrak{W}": "𝔚", + "\\mathfrak{X}": "𝔛", + "\\mathfrak{Y}": "𝔜", + "\\mathfrak{a}": "𝔞", + "\\mathfrak{b}": "𝔟", + "\\mathfrak{c}": "𝔠", + "\\mathfrak{d}": "𝔡", + "\\mathfrak{e}": "𝔱", + "\\mathfrak{f}": "𝔣", + "\\mathfrak{g}": "đ”€", + "\\mathfrak{h}": "đ”„", + "\\mathfrak{i}": "𝔩", + "\\mathfrak{j}": "𝔧", + "\\mathfrak{k}": "𝔹", + "\\mathfrak{l}": "đ”©", + "\\mathfrak{m}": "đ”Ș", + "\\mathfrak{n}": "đ”«", + "\\mathfrak{o}": "𝔬", + "\\mathfrak{p}": "𝔭", + "\\mathfrak{q}": "𝔼", + "\\mathfrak{r}": "𝔯", + "\\mathfrak{s}": "𝔰", + "\\mathfrak{t}": "đ”±", + "\\mathfrak{u}": "đ”Č", + "\\mathfrak{v}": "𝔳", + "\\mathfrak{w}": "𝔮", + "\\mathfrak{x}": "đ””", + "\\mathfrak{y}": "đ”¶", + "\\mathfrak{z}": "đ”·", + "\\mathbb{A}": "𝔾", + "\\mathbb{B}": "đ”č", + "\\mathbb{D}": "đ”»", + "\\mathbb{E}": "đ”Œ", + "\\mathbb{F}": "đ”œ", + "\\mathbb{G}": "đ”Ÿ", + "\\mathbb{I}": "𝕀", + "\\mathbb{J}": "𝕁", + "\\mathbb{K}": "𝕂", + "\\mathbb{L}": "𝕃", + "\\mathbb{M}": "𝕄", + "\\mathbb{O}": "𝕆", + "\\mathbb{S}": "𝕊", + "\\mathbb{T}": "𝕋", + "\\mathbb{U}": "𝕌", + "\\mathbb{V}": "𝕍", + "\\mathbb{W}": "𝕎", + "\\mathbb{X}": "𝕏", + "\\mathbb{Y}": "𝕐", + "\\mathbb{a}": "𝕒", + "\\mathbb{b}": "𝕓", + "\\mathbb{c}": "𝕔", + "\\mathbb{d}": "𝕕", + "\\mathbb{e}": "𝕖", + "\\mathbb{f}": "𝕗", + "\\mathbb{g}": "𝕘", + "\\mathbb{h}": "𝕙", + "\\mathbb{i}": "𝕚", + "\\mathbb{j}": "𝕛", + "\\mathbb{k}": "𝕜", + "\\mathbb{l}": "𝕝", + "\\mathbb{m}": "𝕞", + "\\mathbb{n}": "𝕟", + "\\mathbb{o}": "𝕠", + "\\mathbb{p}": "𝕡", + "\\mathbb{q}": "𝕱", + "\\mathbb{r}": "𝕣", + "\\mathbb{s}": "đ•€", + "\\mathbb{t}": "đ•„", + "\\mathbb{u}": "𝕩", + "\\mathbb{v}": "𝕧", + "\\mathbb{w}": "𝕹", + "\\mathbb{x}": "đ•©", + "\\mathbb{y}": "đ•Ș", + "\\mathbb{z}": "đ•«", + "\\mathslbb{A}": "𝕬", + "\\mathslbb{B}": "𝕭", + "\\mathslbb{C}": "𝕼", + "\\mathslbb{D}": "𝕯", + "\\mathslbb{E}": "𝕰", + "\\mathslbb{F}": "đ•±", + "\\mathslbb{G}": "đ•Č", + "\\mathslbb{H}": "𝕳", + "\\mathslbb{I}": "𝕮", + "\\mathslbb{J}": "đ•”", + "\\mathslbb{K}": "đ•¶", + "\\mathslbb{L}": "đ•·", + "\\mathslbb{M}": "𝕾", + "\\mathslbb{N}": "đ•č", + "\\mathslbb{O}": "đ•ș", + "\\mathslbb{P}": "đ•»", + "\\mathslbb{Q}": "đ•Œ", + "\\mathslbb{R}": "đ•œ", + "\\mathslbb{S}": "đ•Ÿ", + "\\mathslbb{T}": "𝕿", + "\\mathslbb{U}": "𝖀", + "\\mathslbb{V}": "𝖁", + "\\mathslbb{W}": "𝖂", + "\\mathslbb{X}": "𝖃", + "\\mathslbb{Y}": "𝖄", + "\\mathslbb{Z}": "𝖅", + "\\mathslbb{a}": "𝖆", + "\\mathslbb{b}": "𝖇", + "\\mathslbb{c}": "𝖈", + "\\mathslbb{d}": "𝖉", + "\\mathslbb{e}": "𝖊", + "\\mathslbb{f}": "𝖋", + "\\mathslbb{g}": "𝖌", + "\\mathslbb{h}": "𝖍", + "\\mathslbb{i}": "𝖎", + "\\mathslbb{j}": "𝖏", + "\\mathslbb{k}": "𝖐", + "\\mathslbb{l}": "𝖑", + "\\mathslbb{m}": "𝖒", + "\\mathslbb{n}": "𝖓", + "\\mathslbb{o}": "𝖔", + "\\mathslbb{p}": "𝖕", + "\\mathslbb{q}": "𝖖", + "\\mathslbb{r}": "𝖗", + "\\mathslbb{s}": "𝖘", + "\\mathslbb{t}": "𝖙", + "\\mathslbb{u}": "𝖚", + "\\mathslbb{v}": "𝖛", + "\\mathslbb{w}": "𝖜", + "\\mathslbb{x}": "𝖝", + "\\mathslbb{y}": "𝖞", + "\\mathslbb{z}": "𝖟", + "\\mathsf{A}": "𝖠", + "\\mathsf{B}": "𝖡", + "\\mathsf{C}": "𝖱", + "\\mathsf{D}": "𝖣", + "\\mathsf{E}": "đ–€", + "\\mathsf{F}": "đ–„", + "\\mathsf{G}": "𝖩", + "\\mathsf{H}": "𝖧", + "\\mathsf{I}": "𝖹", + "\\mathsf{J}": "đ–©", + "\\mathsf{K}": "đ–Ș", + "\\mathsf{L}": "đ–«", + "\\mathsf{M}": "𝖬", + "\\mathsf{N}": "𝖭", + "\\mathsf{O}": "𝖼", + "\\mathsf{P}": "𝖯", + "\\mathsf{Q}": "𝖰", + "\\mathsf{R}": "đ–±", + "\\mathsf{S}": "đ–Č", + "\\mathsf{T}": "𝖳", + "\\mathsf{U}": "𝖮", + "\\mathsf{V}": "đ–”", + "\\mathsf{W}": "đ–¶", + "\\mathsf{X}": "đ–·", + "\\mathsf{Y}": "𝖾", + "\\mathsf{Z}": "đ–č", + "\\mathsf{a}": "đ–ș", + "\\mathsf{b}": "đ–»", + "\\mathsf{c}": "đ–Œ", + "\\mathsf{d}": "đ–œ", + "\\mathsf{e}": "đ–Ÿ", + "\\mathsf{f}": "𝖿", + "\\mathsf{g}": "𝗀", + "\\mathsf{h}": "𝗁", + "\\mathsf{i}": "𝗂", + "\\mathsf{j}": "𝗃", + "\\mathsf{k}": "𝗄", + "\\mathsf{l}": "𝗅", + "\\mathsf{m}": "𝗆", + "\\mathsf{n}": "𝗇", + "\\mathsf{o}": "𝗈", + "\\mathsf{p}": "𝗉", + "\\mathsf{q}": "𝗊", + "\\mathsf{r}": "𝗋", + "\\mathsf{s}": "𝗌", + "\\mathsf{t}": "𝗍", + "\\mathsf{u}": "𝗎", + "\\mathsf{v}": "𝗏", + "\\mathsf{w}": "𝗐", + "\\mathsf{x}": "𝗑", + "\\mathsf{y}": "𝗒", + "\\mathsf{z}": "𝗓", + "\\mathsfbf{A}": "𝗔", + "\\mathsfbf{B}": "𝗕", + "\\mathsfbf{C}": "𝗖", + "\\mathsfbf{D}": "𝗗", + "\\mathsfbf{E}": "𝗘", + "\\mathsfbf{F}": "𝗙", + "\\mathsfbf{G}": "𝗚", + "\\mathsfbf{H}": "𝗛", + "\\mathsfbf{I}": "𝗜", + "\\mathsfbf{J}": "𝗝", + "\\mathsfbf{K}": "𝗞", + "\\mathsfbf{L}": "𝗟", + "\\mathsfbf{M}": "𝗠", + "\\mathsfbf{N}": "𝗡", + "\\mathsfbf{O}": "𝗱", + "\\mathsfbf{P}": "𝗣", + "\\mathsfbf{Q}": "đ—€", + "\\mathsfbf{R}": "đ—„", + "\\mathsfbf{S}": "𝗩", + "\\mathsfbf{T}": "𝗧", + "\\mathsfbf{U}": "𝗹", + "\\mathsfbf{V}": "đ—©", + "\\mathsfbf{W}": "đ—Ș", + "\\mathsfbf{X}": "đ—«", + "\\mathsfbf{Y}": "𝗬", + "\\mathsfbf{Z}": "𝗭", + "\\mathsfbf{a}": "𝗼", + "\\mathsfbf{b}": "𝗯", + "\\mathsfbf{c}": "𝗰", + "\\mathsfbf{d}": "đ—±", + "\\mathsfbf{e}": "đ—Č", + "\\mathsfbf{f}": "𝗳", + "\\mathsfbf{g}": "𝗮", + "\\mathsfbf{h}": "đ—”", + "\\mathsfbf{i}": "đ—¶", + "\\mathsfbf{j}": "đ—·", + "\\mathsfbf{k}": "𝗾", + "\\mathsfbf{l}": "đ—č", + "\\mathsfbf{m}": "đ—ș", + "\\mathsfbf{n}": "đ—»", + "\\mathsfbf{o}": "đ—Œ", + "\\mathsfbf{p}": "đ—œ", + "\\mathsfbf{q}": "đ—Ÿ", + "\\mathsfbf{r}": "𝗿", + "\\mathsfbf{s}": "𝘀", + "\\mathsfbf{t}": "𝘁", + "\\mathsfbf{u}": "𝘂", + "\\mathsfbf{v}": "𝘃", + "\\mathsfbf{w}": "𝘄", + "\\mathsfbf{x}": "𝘅", + "\\mathsfbf{y}": "𝘆", + "\\mathsfbf{z}": "𝘇", + "\\mathsfsl{A}": "𝘈", + "\\mathsfsl{B}": "𝘉", + "\\mathsfsl{C}": "𝘊", + "\\mathsfsl{D}": "𝘋", + "\\mathsfsl{E}": "𝘌", + "\\mathsfsl{F}": "𝘍", + "\\mathsfsl{G}": "𝘎", + "\\mathsfsl{H}": "𝘏", + "\\mathsfsl{I}": "𝘐", + "\\mathsfsl{J}": "𝘑", + "\\mathsfsl{K}": "𝘒", + "\\mathsfsl{L}": "𝘓", + "\\mathsfsl{M}": "𝘔", + "\\mathsfsl{N}": "𝘕", + "\\mathsfsl{O}": "𝘖", + "\\mathsfsl{P}": "𝘗", + "\\mathsfsl{Q}": "𝘘", + "\\mathsfsl{R}": "𝘙", + "\\mathsfsl{S}": "𝘚", + "\\mathsfsl{T}": "𝘛", + "\\mathsfsl{U}": "𝘜", + "\\mathsfsl{V}": "𝘝", + "\\mathsfsl{W}": "𝘞", + "\\mathsfsl{X}": "𝘟", + "\\mathsfsl{Y}": "𝘠", + "\\mathsfsl{Z}": "𝘡", + "\\mathsfsl{a}": "𝘱", + "\\mathsfsl{b}": "𝘣", + "\\mathsfsl{c}": "đ˜€", + "\\mathsfsl{d}": "đ˜„", + "\\mathsfsl{e}": "𝘩", + "\\mathsfsl{f}": "𝘧", + "\\mathsfsl{g}": "𝘹", + "\\mathsfsl{h}": "đ˜©", + "\\mathsfsl{i}": "đ˜Ș", + "\\mathsfsl{j}": "đ˜«", + "\\mathsfsl{k}": "𝘬", + "\\mathsfsl{l}": "𝘭", + "\\mathsfsl{m}": "𝘼", + "\\mathsfsl{n}": "𝘯", + "\\mathsfsl{o}": "𝘰", + "\\mathsfsl{p}": "đ˜±", + "\\mathsfsl{q}": "đ˜Č", + "\\mathsfsl{r}": "𝘳", + "\\mathsfsl{s}": "𝘮", + "\\mathsfsl{t}": "đ˜”", + "\\mathsfsl{u}": "đ˜¶", + "\\mathsfsl{v}": "đ˜·", + "\\mathsfsl{w}": "𝘾", + "\\mathsfsl{x}": "đ˜č", + "\\mathsfsl{y}": "đ˜ș", + "\\mathsfsl{z}": "đ˜»", + "\\mathsfbfsl{A}": "đ˜Œ", + "\\mathsfbfsl{B}": "đ˜œ", + "\\mathsfbfsl{C}": "đ˜Ÿ", + "\\mathsfbfsl{D}": "𝘿", + "\\mathsfbfsl{E}": "𝙀", + "\\mathsfbfsl{F}": "𝙁", + "\\mathsfbfsl{G}": "𝙂", + "\\mathsfbfsl{H}": "𝙃", + "\\mathsfbfsl{I}": "𝙄", + "\\mathsfbfsl{J}": "𝙅", + "\\mathsfbfsl{K}": "𝙆", + "\\mathsfbfsl{L}": "𝙇", + "\\mathsfbfsl{M}": "𝙈", + "\\mathsfbfsl{N}": "𝙉", + "\\mathsfbfsl{O}": "𝙊", + "\\mathsfbfsl{P}": "𝙋", + "\\mathsfbfsl{Q}": "𝙌", + "\\mathsfbfsl{R}": "𝙍", + "\\mathsfbfsl{S}": "𝙎", + "\\mathsfbfsl{T}": "𝙏", + "\\mathsfbfsl{U}": "𝙐", + "\\mathsfbfsl{V}": "𝙑", + "\\mathsfbfsl{W}": "𝙒", + "\\mathsfbfsl{X}": "𝙓", + "\\mathsfbfsl{Y}": "𝙔", + "\\mathsfbfsl{Z}": "𝙕", + "\\mathsfbfsl{a}": "𝙖", + "\\mathsfbfsl{b}": "𝙗", + "\\mathsfbfsl{c}": "𝙘", + "\\mathsfbfsl{d}": "𝙙", + "\\mathsfbfsl{e}": "𝙚", + "\\mathsfbfsl{f}": "𝙛", + "\\mathsfbfsl{g}": "𝙜", + "\\mathsfbfsl{h}": "𝙝", + "\\mathsfbfsl{i}": "𝙞", + "\\mathsfbfsl{j}": "𝙟", + "\\mathsfbfsl{k}": "𝙠", + "\\mathsfbfsl{l}": "𝙡", + "\\mathsfbfsl{m}": "𝙱", + "\\mathsfbfsl{n}": "𝙣", + "\\mathsfbfsl{o}": "đ™€", + "\\mathsfbfsl{p}": "đ™„", + "\\mathsfbfsl{q}": "𝙩", + "\\mathsfbfsl{r}": "𝙧", + "\\mathsfbfsl{s}": "𝙹", + "\\mathsfbfsl{t}": "đ™©", + "\\mathsfbfsl{u}": "đ™Ș", + "\\mathsfbfsl{v}": "đ™«", + "\\mathsfbfsl{w}": "𝙬", + "\\mathsfbfsl{x}": "𝙭", + "\\mathsfbfsl{y}": "𝙼", + "\\mathsfbfsl{z}": "𝙯", + "\\mathtt{A}": "𝙰", + "\\mathtt{B}": "đ™±", + "\\mathtt{C}": "đ™Č", + "\\mathtt{D}": "𝙳", + "\\mathtt{E}": "𝙮", + "\\mathtt{F}": "đ™”", + "\\mathtt{G}": "đ™¶", + "\\mathtt{H}": "đ™·", + "\\mathtt{I}": "𝙾", + "\\mathtt{J}": "đ™č", + "\\mathtt{K}": "đ™ș", + "\\mathtt{L}": "đ™»", + "\\mathtt{M}": "đ™Œ", + "\\mathtt{N}": "đ™œ", + "\\mathtt{O}": "đ™Ÿ", + "\\mathtt{P}": "𝙿", + "\\mathtt{Q}": "𝚀", + "\\mathtt{R}": "𝚁", + "\\mathtt{S}": "𝚂", + "\\mathtt{T}": "𝚃", + "\\mathtt{U}": "𝚄", + "\\mathtt{V}": "𝚅", + "\\mathtt{W}": "𝚆", + "\\mathtt{X}": "𝚇", + "\\mathtt{Y}": "𝚈", + "\\mathtt{Z}": "𝚉", + "\\mathtt{a}": "𝚊", + "\\mathtt{b}": "𝚋", + "\\mathtt{c}": "𝚌", + "\\mathtt{d}": "𝚍", + "\\mathtt{e}": "𝚎", + "\\mathtt{f}": "𝚏", + "\\mathtt{g}": "𝚐", + "\\mathtt{h}": "𝚑", + "\\mathtt{i}": "𝚒", + "\\mathtt{j}": "𝚓", + "\\mathtt{k}": "𝚔", + "\\mathtt{l}": "𝚕", + "\\mathtt{m}": "𝚖", + "\\mathtt{n}": "𝚗", + "\\mathtt{o}": "𝚘", + "\\mathtt{p}": "𝚙", + "\\mathtt{q}": "𝚚", + "\\mathtt{r}": "𝚛", + "\\mathtt{s}": "𝚜", + "\\mathtt{t}": "𝚝", + "\\mathtt{u}": "𝚞", + "\\mathtt{v}": "𝚟", + "\\mathtt{w}": "𝚠", + "\\mathtt{x}": "𝚡", + "\\mathtt{y}": "𝚱", + "\\mathtt{z}": "𝚣", + "\\mathbf{\\Gamma}": "đšȘ", + "\\mathbf{\\Delta}": "đš«", + "\\mathbf{\\Theta}": "𝚯", + "\\mathbf{\\Lambda}": "đšČ", + "\\mathbf{\\Xi}": "đš”", + "\\mathbf{\\Pi}": "đš·", + "\\mathbf{\\vartheta}": "đšč", + "\\mathbf{\\Sigma}": "đšș", + "\\mathbf{\\Upsilon}": "đšŒ", + "\\mathbf{\\Phi}": "đšœ", + "\\mathbf{\\Psi}": "𝚿", + "\\mathbf{\\Omega}": "𝛀", + "\\mathbf{\\nabla}": "𝛁", + "\\mathbf{\\alpha}": "𝛂", + "\\mathbf{\\beta}": "𝛃", + "\\mathbf{\\gamma}": "𝛄", + "\\mathbf{\\delta}": "𝛅", + "\\mathbf{\\epsilon}": "𝛆", + "\\mathbf{\\zeta}": "𝛇", + "\\mathbf{\\eta}": "𝛈", + "\\mathbf{\\theta}": "𝛉", + "\\mathbf{\\lambda}": "𝛌", + "\\mathbf{\\xi}": "𝛏", + "\\mathbf{\\pi}": "𝛑", + "\\mathbf{\\varsigma}": "𝛓", + "\\mathbf{\\sigma}": "𝛔", + "\\mathbf{\\upsilon}": "𝛖", + "\\mathbf{\\phi}": "𝛗", + "\\mathbf{\\psi}": "𝛙", + "\\mathbf{\\omega}": "𝛚", + "\\mathbf{\\varkappa}": "𝛞", + "\\mathbf{\\varrho}": "𝛠", + "\\mathbf{\\varpi}": "𝛡", + "\\mathsl{\\Gamma}": "đ›€", + "\\mathsl{\\Delta}": "đ›„", + "\\mathsl{\\Lambda}": "𝛬", + "\\mathsl{\\Xi}": "𝛯", + "\\mathsl{\\Pi}": "đ›±", + "\\mathsl{\\Theta}": "𝛳", + "\\mathsl{\\Sigma}": "𝛮", + "\\mathsl{\\Upsilon}": "đ›¶", + "\\mathsl{\\Phi}": "đ›·", + "\\mathsl{\\Psi}": "đ›č", + "\\mathsl{\\Omega}": "đ›ș", + "\\mathsl{\\nabla}": "đ›»", + "\\mathsl{\\gamma}": "đ›Ÿ", + "\\mathsl{\\delta}": "𝛿", + "\\mathsl{\\theta}": "𝜃", + "\\mathsl{\\lambda}": "𝜆", + "\\mu": "𝜇", + "\\mathsl{\\xi}": "𝜉", + "\\mathsl{\\pi}": "𝜋", + "\\mathsl{\\varsigma}": "𝜍", + "\\mathsl{\\sigma}": "𝜎", + "\\mathsl{\\upsilon}": "𝜐", + "\\mathsl{\\varphi}": "𝜑", + "\\mathsl{\\psi}": "𝜓", + "\\mathsl{\\omega}": "𝜔", + "\\mathsl{\\vartheta}": "𝜗", + "\\mathsl{\\varkappa}": "𝜘", + "\\mathsl{\\phi}": "𝜙", + "\\mathsl{\\varrho}": "𝜚", + "\\mathsl{\\varpi}": "𝜛", + "\\mathbit{\\Gamma}": "𝜞", + "\\mathbit{\\Delta}": "𝜟", + "\\mathbit{\\Theta}": "𝜣", + "\\mathbit{\\Lambda}": "𝜩", + "\\mathbit{\\Xi}": "đœ©", + "\\mathbit{\\Pi}": "đœ«", + "\\mathbit{\\Sigma}": "𝜼", + "\\mathbit{\\Upsilon}": "𝜰", + "\\mathbit{\\Phi}": "đœ±", + "\\mathbit{\\Psi}": "𝜳", + "\\mathbit{\\Omega}": "𝜮", + "\\mathbit{\\nabla}": "đœ”", + "\\mathbit{\\alpha}": "đœ¶", + "\\mathbit{\\beta}": "đœ·", + "\\mathbit{\\gamma}": "𝜾", + "\\mathbit{\\delta}": "đœč", + "\\mathbit{\\epsilon}": "đœș", + "\\mathbit{\\zeta}": "đœ»", + "\\mathbit{\\eta}": "đœŒ", + "\\mathbit{\\theta}": "đœœ", + "\\mathbit{\\imath}": "đœŸ", + "\\mathbit{\\kappa}": "𝜿", + "\\mathbit{\\lambda}": "𝝀", + "\\mathbit{\\xi}": "𝝃", + "\\mathbit{\\pi}": "𝝅", + "\\mathbit{\\rho}": "𝝆", + "\\mathbit{\\varsigma}": "𝝇", + "\\mathbit{\\sigma}": "𝝈", + "\\mathbit{\\tau}": "𝝉", + "\\mathbit{\\upsilon}": "𝝊", + "\\mathbit{\\varphi}": "𝝋", + "\\mathbit{\\chi}": "𝝌", + "\\mathbit{\\psi}": "𝝍", + "\\mathbit{\\omega}": "𝝎", + "\\mathbit{\\vartheta}": "𝝑", + "\\mathbit{\\varkappa}": "𝝒", + "\\mathbit{\\phi}": "𝝓", + "\\mathbit{\\varrho}": "𝝔", + "\\mathbit{\\varpi}": "𝝕", + "\\mathsfbf{\\Gamma}": "𝝘", + "\\mathsfbf{\\Delta}": "𝝙", + "\\mathsfbf{\\Theta}": "𝝝", + "\\mathsfbf{\\Lambda}": "𝝠", + "\\mathsfbf{\\Xi}": "𝝣", + "\\mathsfbf{\\Pi}": "đ„", + "\\mathsfbf{\\Sigma}": "𝝹", + "\\mathsfbf{\\Upsilon}": "đȘ", + "\\mathsfbf{\\Phi}": "đ«", + "\\mathsfbf{\\Psi}": "𝝭", + "\\mathsfbf{\\Omega}": "𝝼", + "\\mathsfbf{\\nabla}": "𝝯", + "\\mathsfbf{\\alpha}": "𝝰", + "\\mathsfbf{\\beta}": "đ±", + "\\mathsfbf{\\gamma}": "đČ", + "\\mathsfbf{\\delta}": "𝝳", + "\\mathsfbf{\\varepsilon}": "𝝮", + "\\mathsfbf{\\zeta}": "đ”", + "\\mathsfbf{\\eta}": "đ¶", + "\\mathsfbf{\\theta}": "đ·", + "\\mathsfbf{\\imath}": "𝝾", + "\\mathsfbf{\\kappa}": "đč", + "\\mathsfbf{\\lambda}": "đș", + "\\mathsfbf{\\xi}": "đœ", + "\\mathsfbf{\\pi}": "𝝿", + "\\mathsfbf{\\rho}": "𝞀", + "\\mathsfbf{\\varsigma}": "𝞁", + "\\mathsfbf{\\sigma}": "𝞂", + "\\mathsfbf{\\tau}": "𝞃", + "\\mathsfbf{\\upsilon}": "𝞄", + "\\mathsfbf{\\varphi}": "𝞅", + "\\mathsfbf{\\chi}": "𝞆", + "\\mathsfbf{\\psi}": "𝞇", + "\\mathsfbf{\\omega}": "𝞈", + "\\mathsfbf{\\vartheta}": "𝞋", + "\\mathsfbf{\\varkappa}": "𝞌", + "\\mathsfbf{\\phi}": "𝞍", + "\\mathsfbf{\\varrho}": "𝞎", + "\\mathsfbf{\\varpi}": "𝞏", + "\\mathsfbfsl{\\Gamma}": "𝞒", + "\\mathsfbfsl{\\Delta}": "𝞓", + "\\mathsfbfsl{\\Theta}": "𝞗", + "\\mathsfbfsl{\\Lambda}": "𝞚", + "\\mathsfbfsl{\\Xi}": "𝞝", + "\\mathsfbfsl{\\Pi}": "𝞟", + "\\mathsfbfsl{\\Sigma}": "𝞱", + "\\mathsfbfsl{\\Upsilon}": "đž€", + "\\mathsfbfsl{\\Phi}": "đž„", + "\\mathsfbfsl{\\Psi}": "𝞧", + "\\mathsfbfsl{\\Omega}": "𝞹", + "\\mathsfbfsl{\\nabla}": "đž©", + "\\mathsfbfsl{\\alpha}": "đžȘ", + "\\mathsfbfsl{\\beta}": "đž«", + "\\mathsfbfsl{\\gamma}": "𝞬", + "\\mathsfbfsl{\\delta}": "𝞭", + "\\mathsfbfsl{\\varepsilon}": "𝞼", + "\\mathsfbfsl{\\zeta}": "𝞯", + "\\mathsfbfsl{\\eta}": "𝞰", + "\\mathsfbfsl{\\theta}": "đž±", + "\\mathsfbfsl{\\imath}": "đžČ", + "\\mathsfbfsl{\\kappa}": "𝞳", + "\\mathsfbfsl{\\lambda}": "𝞮", + "\\mathsfbfsl{\\xi}": "đž·", + "\\mathsfbfsl{\\pi}": "đžč", + "\\mathsfbfsl{\\rho}": "đžș", + "\\mathsfbfsl{\\varsigma}": "đž»", + "\\mathsfbfsl{\\sigma}": "đžŒ", + "\\mathsfbfsl{\\tau}": "đžœ", + "\\mathsfbfsl{\\upsilon}": "đžŸ", + "\\mathsfbfsl{\\varphi}": "𝞿", + "\\mathsfbfsl{\\chi}": "𝟀", + "\\mathsfbfsl{\\psi}": "𝟁", + "\\mathsfbfsl{\\omega}": "𝟂", + "\\mathsfbfsl{\\vartheta}": "𝟅", + "\\mathsfbfsl{\\varkappa}": "𝟆", + "\\mathsfbfsl{\\phi}": "𝟇", + "\\mathsfbfsl{\\varrho}": "𝟈", + "\\mathsfbfsl{\\varpi}": "𝟉", + "\\mbfDigamma": "𝟊", + "\\mbfdigamma": "𝟋", + "\\mathbf{0}": "𝟎", + "\\mathbf{1}": "𝟏", + "\\mathbf{2}": "𝟐", + "\\mathbf{3}": "𝟑", + "\\mathbf{4}": "𝟒", + "\\mathbf{5}": "𝟓", + "\\mathbf{6}": "𝟔", + "\\mathbf{7}": "𝟕", + "\\mathbf{8}": "𝟖", + "\\mathbf{9}": "𝟗", + "\\mathbb{0}": "𝟘", + "\\mathbb{1}": "𝟙", + "\\mathbb{2}": "𝟚", + "\\mathbb{3}": "𝟛", + "\\mathbb{4}": "𝟜", + "\\mathbb{5}": "𝟝", + "\\mathbb{6}": "𝟞", + "\\mathbb{7}": "𝟟", + "\\mathbb{8}": "𝟠", + "\\mathbb{9}": "𝟡", + "\\mathsf{0}": "𝟱", + "\\mathsf{1}": "𝟣", + "\\mathsf{2}": "đŸ€", + "\\mathsf{3}": "đŸ„", + "\\mathsf{4}": "𝟩", + "\\mathsf{5}": "𝟧", + "\\mathsf{6}": "𝟹", + "\\mathsf{7}": "đŸ©", + "\\mathsf{8}": "đŸȘ", + "\\mathsf{9}": "đŸ«", + "\\mathsfbf{0}": "𝟬", + "\\mathsfbf{1}": "𝟭", + "\\mathsfbf{2}": "𝟼", + "\\mathsfbf{3}": "𝟯", + "\\mathsfbf{4}": "𝟰", + "\\mathsfbf{5}": "đŸ±", + "\\mathsfbf{6}": "đŸČ", + "\\mathsfbf{7}": "𝟳", + "\\mathsfbf{8}": "𝟮", + "\\mathsfbf{9}": "đŸ”", + "\\mathtt{0}": "đŸ¶", + "\\mathtt{1}": "đŸ·", + "\\mathtt{2}": "𝟾", + "\\mathtt{3}": "đŸč", + "\\mathtt{4}": "đŸș", + "\\mathtt{5}": "đŸ»", + "\\mathtt{6}": "đŸŒ", + "\\mathtt{7}": "đŸœ", + "\\mathtt{8}": "đŸŸ", + "\\mathtt{9}": "𝟿" + }; + + var commands = [ + "acute", + "bar", + "breve", + "c", + "d", + "ddot", + "dot", + "grave", + "hat", + "k", + "mathring", + "overline", + "r", + "textacutemacron", + "textacutewedge", + "textadvancing", + "textbrevemacron", + "textcircumdot", + "textcorner", + "textdotacute", + "textdotbreve", + "textdoublegrave", + "textdoublevbaraccent", + "textgravedot", + "textgravemacron", + "textinvsubbridge", + "textlowering", + "textovercross", + "textraising", + "textretracting", + "textringmacron", + "textseagull", + "textsubarch", + "textsubbar", + "textsubbridge", + "textsubgrave", + "textsublhalfring", + "textsubplus", + "textsubrhalfring", + "textsubring", + "textsubsquare", + "textsubtilde", + "textsubumlaut", + "textsubwedge", + "textsuperimposetilde", + "textsyllabic", + "texttildedot", + "textvbaraccent", + "tilde", + "u", + "underbar", + "v" + ]; + var tolatex = { + "̀": { + command: "`", + mode: "text" + }, + "̀̄": { + command: "textgravemacron", + mode: "text" + }, + "̀̇": { + command: "textgravedot", + mode: "text" + }, + "́": { + command: "'", + mode: "text" + }, + "́̄": { + command: "textacutemacron", + mode: "text" + }, + "́̇": { + command: "textdotacute", + mode: "text" + }, + "́̌": { + command: "textacutewedge", + mode: "text" + }, + "̂": { + command: "^", + mode: "text" + }, + "̂̇": { + command: "textcircumdot", + mode: "text" + }, + "̃": { + command: "~", + mode: "text" + }, + "̃̇": { + command: "texttildedot", + mode: "text" + }, + "̄": { + command: "=", + mode: "text" + }, + "̄̀": { + command: "textgravemacron", + mode: "text" + }, + "̄́": { + command: "textacutemacron", + mode: "text" + }, + "̄̆": { + command: "textbrevemacron", + mode: "text" + }, + "̄̊": { + command: "textringmacron", + mode: "text" + }, + "̅": { + command: "overline", + mode: "math" + }, + "̆": { + command: "u", + mode: "text" + }, + "̆̄": { + command: "textbrevemacron", + mode: "text" + }, + "̆̇": { + command: "textdotbreve", + mode: "text" + }, + "̇": { + command: ".", + mode: "text" + }, + "̇̀": { + command: "textgravedot", + mode: "text" + }, + "̇́": { + command: "textdotacute", + mode: "text" + }, + "̇̂": { + command: "textcircumdot", + mode: "text" + }, + "̇̃": { + command: "texttildedot", + mode: "text" + }, + "̇̆": { + command: "textdotbreve", + mode: "text" + }, + "̈": { + command: "\"", + mode: "text" + }, + "̊": { + command: "r", + mode: "text" + }, + "̊̄": { + command: "textringmacron", + mode: "text" + }, + "̋": { + command: "H", + mode: "text" + }, + "̌": { + command: "v", + mode: "text" + }, + "̌́": { + command: "textacutewedge", + mode: "text" + }, + "̍": { + command: "textvbaraccent", + mode: "text" + }, + "̎": { + command: "textdoublevbaraccent", + mode: "text" + }, + "̏": { + command: "textdoublegrave", + mode: "text" + }, + "̐": { + command: "textdotbreve", + mode: "text" + }, + "̖": { + command: "textsubgrave", + mode: "text" + }, + "̘": { + command: "textadvancing", + mode: "text" + }, + "̙": { + command: "textretracting", + mode: "text" + }, + "̚": { + command: "textcorner", + mode: "text" + }, + "̜": { + command: "textsublhalfring", + mode: "text" + }, + "̝": { + command: "textraising", + mode: "text" + }, + "̞": { + command: "textlowering", + mode: "text" + }, + "̟": { + command: "textsubplus", + mode: "text" + }, + "ÌŁ": { + command: "d", + mode: "text" + }, + "Ì€": { + command: "textsubumlaut", + mode: "text" + }, + "Ì„": { + command: "textsubring", + mode: "text" + }, + "̧": { + command: "c", + mode: "text" + }, + "Ìš": { + command: "k", + mode: "text" + }, + "Ì©": { + command: "textsyllabic", + mode: "text" + }, + "ÌȘ": { + command: "textsubbridge", + mode: "text" + }, + "ÌŹ": { + command: "textsubwedge", + mode: "text" + }, + "ÌŻ": { + command: "textsubarch", + mode: "text" + }, + "Ì°": { + command: "textsubtilde", + mode: "text" + }, + "̱": { + command: "textsubbar", + mode: "text" + }, + "ÌŽ": { + command: "textsuperimposetilde", + mode: "text" + }, + "Ìč": { + command: "textsubrhalfring", + mode: "text" + }, + "Ìș": { + command: "textinvsubbridge", + mode: "text" + }, + "Ì»": { + command: "textsubsquare", + mode: "text" + }, + "ÌŒ": { + command: "textseagull", + mode: "text" + }, + "Ìœ": { + command: "textovercross", + mode: "text" + } + }; + var tounicode = { + "\"": "̈", + "'": "́", + ".": "̇", + "=": "̄", + H: "̋", + "^": "̂", + "`": "̀", + acute: "́", + bar: "̄", + breve: "̆", + c: "̧", + d: "ÌŁ", + ddot: "̈", + dot: "̇", + grave: "̀", + hat: "̂", + k: "Ìš", + mathring: "̊", + overline: "̅", + r: "̊", + textacutemacron: "̄́", + textacutewedge: "̌́", + textadvancing: "̘", + textbrevemacron: "̄̆", + textcircumdot: "̇̂", + textcorner: "̚", + textdotacute: "́̇", + textdotbreve: "̐", + textdoublegrave: "̏", + textdoublevbaraccent: "̎", + textgravedot: "̇̀", + textgravemacron: "̀̄", + textinvsubbridge: "Ìș", + textlowering: "̞", + textovercross: "Ìœ", + textraising: "̝", + textretracting: "̙", + textringmacron: "̄̊", + textseagull: "ÌŒ", + textsubarch: "ÌŻ", + textsubbar: "̱", + textsubbridge: "ÌȘ", + textsubgrave: "̖", + textsublhalfring: "̜", + textsubplus: "̟", + textsubrhalfring: "Ìč", + textsubring: "Ì„", + textsubsquare: "Ì»", + textsubtilde: "Ì°", + textsubumlaut: "Ì€", + textsubwedge: "ÌŹ", + textsuperimposetilde: "ÌŽ", + textsyllabic: "Ì©", + texttildedot: "̇̃", + textvbaraccent: "̍", + tilde: "̃", + u: "̆", + underbar: "̱", + v: "̌", + "~": "̃" + }; + var require$$4 = { + commands: commands, + tolatex: tolatex, + tounicode: tounicode + }; + + var unicode2latex = { + ascii: require$$0, + ascii_bibtex_creator: require$$1, + unicode: require$$2, + latex: require$$3, + diacritics: require$$4, + }; + + var categories = [ + { + 'name': 'C', + 'alias': 'Other', + 'isBmpLast': true, + 'bmp': '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' + }, + { + 'name': 'Cc', + 'alias': 'Control', + 'bmp': '\0-\x1F\x7F-\x9F' + }, + { + 'name': 'Cf', + 'alias': 'Format', + 'bmp': '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', + 'astral': '\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC38]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Cn', + 'alias': 'Unassigned', + 'bmp': '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08C8-\u08D2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B54\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C76\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E8B\u0EA4\u0EA6\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1AC1-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFB-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E53-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31E4-\u31EF\u321F\u9FFD-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7C0\uA7C1\uA7CB-\uA7F4\uA82D-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB6C-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9D-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F\uDEAA\uDEAE\uDEAF\uDEB2-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFAF\uDFCC-\uDFDF\uDFF7-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD48-\uDD4F\uDD77-\uDD7F\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5C\uDC62-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB9-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD07\uDD08\uDD0A\uDD0B\uDD14\uDD17\uDD36\uDD39\uDD3A\uDD47-\uDD4F\uDD5A-\uDD9F\uDDA8\uDDA9\uDDD8\uDDD9\uDDE5-\uDDFF\uDE48-\uDE4F\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFAF\uDFB1-\uDFBF\uDFF2-\uDFFE]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD824-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F\uD885-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F\uDC39-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF4B-\uDF4E\uDF88-\uDF8E\uDFA0-\uDFDF\uDFE5-\uDFEF\uDFF2-\uDFFF]|\uD821[\uDFF8-\uDFFF]|\uD823[\uDCD6-\uDCFF\uDD09-\uDFFF]|\uD82C[\uDD1F-\uDD4F\uDD53-\uDD63\uDD68-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDCFF\uDD2D-\uDD2F\uDD3E\uDD3F\uDD4A-\uDD4D\uDD50-\uDEBF\uDEFA-\uDEFE\uDF00-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4C-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDD00\uDD3E-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDDAE-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED8-\uDEDF\uDEED-\uDEEF\uDEFD-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFDF\uDFEC-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE\uDCAF\uDCB2-\uDCFF\uDD79\uDDCC\uDE54-\uDE5F\uDE6E\uDE6F\uDE75-\uDE77\uDE7B-\uDE7F\uDE87-\uDE8F\uDEA9-\uDEAF\uDEB7-\uDEBF\uDEC3-\uDECF\uDED7-\uDEFF\uDF93\uDFCB-\uDFEF\uDFFA-\uDFFF]|\uD869[\uDEDE-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uD884[\uDF4B-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Co', + 'alias': 'Private_Use', + 'bmp': '\uE000-\uF8FF', + 'astral': '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' + }, + { + 'name': 'Cs', + 'alias': 'Surrogate', + 'bmp': '\uD800-\uDFFF' + }, + { + 'name': 'L', + 'alias': 'Letter', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'LC', + 'alias': 'Cased_Letter', + 'bmp': 'A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7BF\uA7C2-\uA7CA\uA7F5\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A', + 'astral': '\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDD00-\uDD43]' + }, + { + 'name': 'Ll', + 'alias': 'Lowercase_Letter', + 'bmp': 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7C8\uA7CA\uA7F6\uA7FA\uAB30-\uAB5A\uAB60-\uAB68\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Lm', + 'alias': 'Modifier_Letter', + 'bmp': '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uAB69\uFF70\uFF9E\uFF9F', + 'astral': '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD838[\uDD37-\uDD3D]|\uD83A\uDD4B' + }, + { + 'name': 'Lo', + 'alias': 'Other_Letter', + 'bmp': '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08C7\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFC\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF4A\uDF50]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82C[\uDC00-\uDD1E\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD838[\uDD00-\uDD2C\uDD4E\uDEC0-\uDEEB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A]' + }, + { + 'name': 'Lt', + 'alias': 'Titlecase_Letter', + 'bmp': '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' + }, + { + 'name': 'Lu', + 'alias': 'Uppercase_Letter', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C7\uA7C9\uA7F5\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' + }, + { + 'name': 'M', + 'alias': 'Mark', + 'bmp': '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D81-\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1AC0\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA82C\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDDCE\uDDCF\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDD30-\uDD35\uDD37\uDD38\uDD3B-\uDD3E\uDD40\uDD42\uDD43\uDDD1-\uDDD7\uDDDA-\uDDE0\uDDE4\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF51-\uDF87\uDF8F-\uDF92\uDFE4\uDFF0\uDFF1]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Mc', + 'alias': 'Spacing_Mark', + 'bmp': '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BE-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', + 'astral': '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDDCE\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDD30-\uDD35\uDD37\uDD38\uDD3D\uDD40\uDD42\uDDD1-\uDDD3\uDDDC-\uDDDF\uDDE4\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF87\uDFF0\uDFF1]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' + }, + { + 'name': 'Me', + 'alias': 'Enclosing_Mark', + 'bmp': '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' + }, + { + 'name': 'Mn', + 'alias': 'Nonspacing_Mark', + 'bmp': '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B55\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0D81\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1ABF\u1AC0\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA82C\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9BD\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDEAB\uDEAC\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDDCF\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDD3B\uDD3C\uDD3E\uDD43\uDDD4-\uDDD7\uDDDA\uDDDB\uDDE0\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF4F\uDF8F-\uDF92\uDFE4]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDD30-\uDD36\uDEEC-\uDEEF]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'N', + 'alias': 'Number', + 'bmp': '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2\uDD50-\uDD59]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9\uDFC0-\uDFD4]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nd', + 'alias': 'Decimal_Number', + 'bmp': '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9\uDD50-\uDD59]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD838[\uDD40-\uDD49\uDEF0-\uDEF9]|\uD83A[\uDD50-\uDD59]|\uD83E[\uDFF0-\uDFF9]' + }, + { + 'name': 'Nl', + 'alias': 'Letter_Number', + 'bmp': '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', + 'astral': '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' + }, + { + 'name': 'No', + 'alias': 'Other_Number', + 'bmp': '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', + 'astral': '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54\uDFC5-\uDFCB]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C\uDFC0-\uDFD4]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D]|\uD83C[\uDD00-\uDD0C]' + }, + { + 'name': 'P', + 'alias': 'Punctuation', + 'bmp': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Pc', + 'alias': 'Connector_Punctuation', + 'bmp': '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' + }, + { + 'name': 'Pd', + 'alias': 'Dash_Punctuation', + 'bmp': '\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D', + 'astral': '\uD803\uDEAD' + }, + { + 'name': 'Pe', + 'alias': 'Close_Punctuation', + 'bmp': '\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' + }, + { + 'name': 'Pf', + 'alias': 'Final_Punctuation', + 'bmp': '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' + }, + { + 'name': 'Pi', + 'alias': 'Initial_Punctuation', + 'bmp': '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' + }, + { + 'name': 'Po', + 'alias': 'Other_Punctuation', + 'bmp': '!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4F\u2E52\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDFFF]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Ps', + 'alias': 'Open_Punctuation', + 'bmp': '\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' + }, + { + 'name': 'S', + 'alias': 'Symbol', + 'bmp': '\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Sc', + 'alias': 'Currency_Symbol', + 'bmp': '\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6', + 'astral': '\uD807[\uDFDD-\uDFE0]|\uD838\uDEFF|\uD83B\uDCB0' + }, + { + 'name': 'Sk', + 'alias': 'Modifier_Symbol', + 'bmp': '\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uAB6A\uAB6B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', + 'astral': '\uD83C[\uDFFB-\uDFFF]' + }, + { + 'name': 'Sm', + 'alias': 'Math_Symbol', + 'bmp': '\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', + 'astral': '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' + }, + { + 'name': 'So', + 'alias': 'Other_Symbol', + 'bmp': '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFDC\uDFE1-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838\uDD4F|\uD83B[\uDCAC\uDD2E]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED7\uDEE0-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF73\uDF80-\uDFD8\uDFE0-\uDFEB]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDD78\uDD7A-\uDDCB\uDDCD-\uDE53\uDE60-\uDE6D\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6\uDF00-\uDF92\uDF94-\uDFCA]' + }, + { + 'name': 'Z', + 'alias': 'Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + }, + { + 'name': 'Zl', + 'alias': 'Line_Separator', + 'bmp': '\u2028' + }, + { + 'name': 'Zp', + 'alias': 'Paragraph_Separator', + 'bmp': '\u2029' + }, + { + 'name': 'Zs', + 'alias': 'Space_Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u202F\u205F\u3000' + } + ]; + + var jabref = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.parse = void 0; + function decode(s, sep = ';') { + s = s.replace(/\n/g, ''); + let pos = 0; + const records = ['']; + while (pos < s.length) { + switch (s[pos]) { + case '\\': + pos++; + records[0] += s[pos]; + break; + case sep: + records.unshift(''); + break; + default: + records[0] += s[pos]; + } + pos++; + } + return records.reverse().filter(record => record); + } + const prefixes = { + fileDirectory: 'jabref-meta: fileDirectory:', + groupsversion: 'jabref-meta: groupsversion:', + groupstree: 'jabref-meta: groupstree:', + grouping: 'jabref-meta: grouping:', + }; + /** + * Import the JabRef groups from the `@string` comments in which they were stored. You would typically pass the comments parsed by [[bibtex.parse]] in here. + * + * JabRef knows several group types, and this parser parses most, but not all of them: + * + * * independent group: the keys listed in the group are the entries that are considered to belong to it + * * intersection: the keys listed in the group are considered to belong to the group if they're also in the parent group + * * union: the keys listed in the group are considered to belong to the group, and also the keys that are in the parent group + * * query: not supported by this parser + */ + function parse(comments) { + const result = { + root: [], + groups: {}, + fileDirectory: '', + version: '', + }; + const levels = []; + const decoded = { + fileDirectory: null, + groupsversion: null, + groupstree: null, + grouping: null, + }; + for (const comment of comments) { + for (const [meta, prefix] of Object.entries(prefixes)) { + if (comment.startsWith(prefix)) { + decoded[meta] = decode(comment.substring(prefix.length)); + } + } + } + result.version = decoded.groupsversion && decoded.groupsversion[0]; + result.fileDirectory = decoded.fileDirectory && decoded.fileDirectory[0]; + for (const tree of ['groupstree', 'grouping']) { + if (!decoded[tree]) + continue; + for (const encoded of decoded[tree]) { + const fields = decode(encoded); + const level_type_name = decode(fields.shift(), ':'); + const m = /^([0-9]+) (.+)/.exec(level_type_name[0]); + if (!m) + break; + const level = parseInt(m[1]); + const type = m[2]; // test for StaticGroup? + if (type === 'AllEntriesGroup') + continue; // root + const name = level_type_name[1]; + const intersection = decode(fields.shift())[0]; + const keys = tree === 'grouping' ? [] : fields.map(field => decode(field)[0]); + const group = { + name, + entries: keys, + groups: [], + }; + result.groups[name] = result.groups[name] || group; + if (levels.length < level) { + levels.push(group); + } + else { + levels[level - 1] = group; + } + if (level === 1) { + result.root.push(group); + } + else { + const parent = levels[level - 2]; + switch (intersection) { + case '0': // independent + break; + case '1': // intersect + group.entries = group.entries.filter(key => parent.entries.includes(key)); + break; + case '2': // union + group.entries = group.entries.concat(parent.entries.filter(key => !group.entries.includes(key))); + break; + } + levels[level - 2].groups.push(group); + } + } + } + return result; + } + exports.parse = parse; + + }); + + var bibtexParser = createCommonjsModule(function (module, exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.jabref = exports.chunker = exports.ast = exports.parse = void 0; + + + + class ParserError extends Error { + constructor(message, node) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = this.constructor.name; + this.node = node; + } + } + class TeXError extends Error { + constructor(message, node, text) { + super(message); // 'Error' breaks prototype chain here + Object.setPrototypeOf(this, new.target.prototype); // restore prototype chain + this.name = this.constructor.name; + this.node = node; + this.text = text; + } + } + + const charClass = { + Lu: categories.filter(cat => ['Uppercase_Letter', 'Titlecase_Letter'].includes(cat.alias)).map(cat => cat.bmp).join(''), + Ll: categories.find(cat => cat.alias === 'Lowercase_Letter').bmp, + LnotLu: categories.filter(cat => ['Lowercase_Letter', 'Modifier_Letter', 'Other_Letter', 'Nonspacing_Mark', 'Spacing_Mark', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + P: categories.find(cat => cat.alias === 'Punctuation').bmp, + L: categories.find(cat => cat.alias === 'Letter').bmp, + N: categories.filter(cat => ['Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + AlphaNum: categories.filter(cat => ['Letter', 'Decimal_Number', 'Letter_Number'].includes(cat.alias)).map(cat => cat.bmp).join(''), + LC: categories.find(cat => cat.alias === 'Cased_Letter').bmp, + }; + const marker = { + and: '\u0001', + comma: '\u0002', + space: '\u0003', + literal: '\u0004', + markup: '\u0005', + re: { + and: /./, + comma: /./, + space: /./, + literal: /./, + literalName: /./, + }, + clean(s) { + return s.replace(marker.re.space, ' ').replace(marker.re.comma, ', ').replace(marker.re.literal, ''); + }, + }; + marker.re = { + and: new RegExp(marker.and, 'g'), + comma: new RegExp(marker.comma, 'g'), + space: new RegExp(marker.space, 'g'), + literal: new RegExp(marker.literal, 'g'), + literalName: new RegExp(`^${marker.literal}([^${marker.literal}]*)${marker.literal}$`), + }; + const preserveCase = { + leadingCap: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]+[${charClass.P}]?$`), + allCaps: new RegExp(`^[${charClass.Lu}${charClass.N}]{2,}$`), + allLower: new RegExp(`^[${charClass.Ll}${charClass.N}]{2,}$`), + joined: new RegExp(`^[${charClass.Lu}][${charClass.LnotLu}]*([-+][${charClass.L}${charClass.N}]+)*[${charClass.P}]*$`), + hasUpper: new RegExp(`[${charClass.Lu}]`), + hasLower: new RegExp(`[${charClass.Ll}]`), + isNumber: /^[0-9]+$/, + hasAlpha: new RegExp(`[${charClass.L}]`), + hasAlphaNum: new RegExp(`[${charClass.AlphaNum}]`), + notAlphaNum: new RegExp(`[^${charClass.AlphaNum}]`, 'g'), + sentenceStart: new RegExp(`(^|([\u2014:?!.]\\s+))[${charClass.Lu}]`, 'g'), + markup: /<\/?span[^>]*>/g, + acronym: new RegExp(`.*\\.${marker.markup}*[${charClass.Lu}]${marker.markup}*\\.$`), + notCaseSensitive: new RegExp(`[^${charClass.LC}]`), + isCaseSensitive: new RegExp(`[${charClass.LC}]`), + quoted: /("[^"]+")|(“[^“]+“)/g, + }; + const fields = { + creator: [ + 'author', + 'bookauthor', + 'collaborator', + 'commentator', + 'director', + 'editor', + 'editora', + 'editorb', + 'editors', + 'holder', + 'scriptwriter', + 'translator', + ], + title: [ + 'title', + 'series', + 'shorttitle', + 'booktitle', + 'type', + 'origtitle', + 'maintitle', + 'eventtitle', + ], + unnest: [ + 'publisher', + 'location', + ], + verbatim: [ + 'url', + 'doi', + 'file', + 'files', + 'eprint', + 'verba', + 'verbb', + 'verbc', + 'groups', + ], + html: [ + 'annotation', + 'comment', + 'annote', + 'review', + 'notes', + 'note', + ], + unabbrev: [ + 'journal', + 'journaltitle', + 'journal-full', + ], + }; + const english = [ + 'american', + 'british', + 'canadian', + 'english', + 'australian', + 'newzealand', + 'usenglish', + 'ukenglish', + 'en', + 'eng', + 'en-au', + 'en-bz', + 'en-ca', + 'en-cb', + 'en-gb', + 'en-ie', + 'en-jm', + 'en-nz', + 'en-ph', + 'en-tt', + 'en-us', + 'en-za', + 'en-zw', + 'anglais', + ]; + class Parser { + constructor(options = {}) { + this.in_preamble = false; + this.preamble = []; + this.log = function (str) { }; // tslint:disable-line variable-name only-arrow-functions no-empty + for (const [option, value] of Object.entries(options)) { + if (typeof value === 'undefined') + delete options[option]; + } + if (options.errorHandler === false) { + // tslint:disable-next-line only-arrow-functions no-empty + options.errorHandler = function (err) { }; + } + else if (options.errorHandler === undefined) { + // tslint:disable-next-line only-arrow-functions + options.errorHandler = function (err) { throw err; }; + } + if (typeof options.sentenceCase === 'boolean') { + options.sentenceCase = options.sentenceCase ? english : []; + } + else { + options.sentenceCase = options.sentenceCase || english; + } + if (!options.strings) + options.strings = {}; + if (!options.unabbreviate) + options.unabbreviate = {}; + if (options.raw) { + options.sentenceCase = false; + options.caseProtection = false; + } + this.options = Object.assign({ caseProtection: 'as-needed', verbatimFields: [/^citeulike-linkout-[0-9]+$/, ...fields.verbatim], verbatimCommands: ['url', 'href'], unnestFields: [...fields.title, ...fields.unnest, ...fields.verbatim], unnestMode: 'unwrap', htmlFields: fields.html, guessAlreadySentenceCased: true, markup: {} }, options); + const markup_defaults = { + enquote: { open: '\u201c', close: '\u201d' }, + sub: { open: '', close: '' }, + sup: { open: '', close: '' }, + bold: { open: '', close: '' }, + italics: { open: '', close: '' }, + smallCaps: { open: '', close: '' }, + caseProtect: { open: '', close: '' }, + roman: { open: '', close: '' }, + fixedWidth: { open: '', close: '' }, + }; + // patch in because the options will likely not have enquote and case-protect + for (const [markup, { open, close }] of Object.entries(markup_defaults)) { + this.options.markup[markup] = this.options.markup[markup] || { open, close }; + } + for (const i of [1, 2, 3, 4]) { // tslint:disable-line:no-magic-numbers + this.options.markup[`h${i}`] = this.options.markup[`h${i}`] || { open: ``, close: `` }; + } + this.unresolvedStrings = {}; + this.errors = []; + this.comments = []; + this.entries = []; + this.strings = {}; + this.newcommands = {}; + this.default_strings = { + JAN: [this.text('01')], + FEB: [this.text('02')], + MAR: [this.text('03')], + APR: [this.text('04')], + MAY: [this.text('05')], + JUN: [this.text('06')], + JUL: [this.text('07')], + AUG: [this.text('08')], + SEP: [this.text('09')], + OCT: [this.text('10')], + NOV: [this.text('11')], + DEC: [this.text('12')], + ACMCS: [this.text('ACM Computing Surveys')], + ACTA: [this.text('Acta Informatica')], + CACM: [this.text('Communications of the ACM')], + IBMJRD: [this.text('IBM Journal of Research and Development')], + IBMSJ: [this.text('IBM Systems Journal')], + IEEESE: [this.text('IEEE Transactions on Software Engineering')], + IEEETC: [this.text('IEEE Transactions on Computers')], + IEEETCAD: [this.text('IEEE Transactions on Computer-Aided Design of Integrated Circuits')], + IPL: [this.text('Information Processing Letters')], + JACM: [this.text('Journal of the ACM')], + JCSS: [this.text('Journal of Computer and System Sciences')], + SCP: [this.text('Science of Computer Programming')], + SICOMP: [this.text('SIAM Journal on Computing')], + TOCS: [this.text('ACM Transactions on Computer Systems')], + TODS: [this.text('ACM Transactions on Database Systems')], + TOG: [this.text('ACM Transactions on Graphics')], + TOMS: [this.text('ACM Transactions on Mathematical Software')], + TOOIS: [this.text('ACM Transactions on Office Information Systems')], + TOPLAS: [this.text('ACM Transactions on Programming Languages and Systems')], + TCS: [this.text('Theoretical Computer Science')], + }; + } + ast(input, clean = true) { + const _ast = []; + for (const chunk of chunker.parse(input)) { + let chunk_ast = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands })); + if (clean) + chunk_ast = this.clean(chunk_ast); + _ast.push(chunk_ast); + } + return _ast; + } + parse(input) { + return this.options.async ? this.parseAsync(input) : this.parseSync(input); + } + parseSync(input) { + for (const chunk of chunker.parse(input)) { + this.parseChunk(chunk); + } + return this.parsed(); + } + async parseAsync(input) { + for (const chunk of await chunker.parse(input, { async: true })) { + this.parseChunk(chunk); + } + return this.parsed(); + } + parsed() { + this.field = null; + const strings = {}; + this.cleaning = { type: 'other' }; + for (const [key, value] of Object.entries(this.strings)) { + this.field = { + name: '@string', + text: '', + level: 0, + preserveRanges: null, + words: { + upper: 0, + lower: 0, + other: 0, + }, + }; + this.convert(this.clean(value)); + strings[key] = this.field.text; + } + return { + errors: this.errors, + entries: this.entries, + comments: this.comments, + strings, + preamble: this.preamble, + }; + } + preserve(start, end, reason) { + if (!this.field.preserveRanges) + return; + if (!end) { + this.field.preserveRanges = null; + return; + } + /* + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < start || range.end > end) + if (this.field.preserveRanges.find(range => range.start <= start && range.end >= end)) return + */ + /* + if (this.field.preserveRanges && this.field.preserveRanges.length) { + const last = this.field.preserveRanges[this.field.preserveRanges.length - 1] + if (start < last.start) throw new Error(JSON.stringify({...last, new: { start, end, reason }, text: this.field.text})) + } + */ + this.field.preserveRanges.push({ start, end, reason }); + } + parseChunk(chunk) { + this.chunk = chunk.text; + try { + let bib = grammar.parse(chunk.text, Object.assign(Object.assign({}, this.options), { combiningDiacritics: unicode2latex.diacritics.commands })); + if (bib.kind !== 'Bibliography') + throw new Error(this.show(bib)); + bib = this.clean(bib); + for (const entity of bib.children) { + switch (entity.kind) { + case 'Entry': + case 'BracedComment': + case 'LineComment': + case 'PreambleExpression': + this.convert(entity); + break; + case 'StringDeclaration': + case 'NonEntryText': + break; + } + } + return bib; + } + catch (err) { + if (!err.location) + throw err; + this.errors.push({ + message: err.message, + line: err.location.start.line + chunk.offset.line, + column: err.location.start.column, + source: this.chunk, + }); + return null; + } + } + show(o) { + // tslint:disable-next-line prefer-template + let text = JSON.stringify(o); + if (this.chunk) + text += '\n' + this.chunk.trim(); + return text; + } + text(value = '') { + return { kind: 'Text', value, mode: 'text' }; + } + error(err, returnvalue) { + if (typeof this.options.errorHandler === 'function') + this.options.errorHandler(err); + return returnvalue; + } + condense(node) { + // apply cleaning to resulting children + node.value = node.value.map(child => this.clean(child)); + // unpack redundant blocks + node.value = node.value.reduce((acc, child, i) => { + if (child.kind === 'Block' && !child.case && Object.keys(child.markup).length === 0) { + acc = acc.concat(child.value); + } + else { + acc.push(child); + } + return acc; + }, []); + // condense text nodes to make whole words for sentence casing + node.value = node.value.reduce((acc, child, i) => { + if (acc.length === 0) { + acc.push(child); + return acc; + } + const last = acc[acc.length - 1]; + const next = node.value[i + 1]; + if (this.options.caseProtection === 'strict' && this.onlyCaseProtected(last) && child.kind === 'Text' && !child.value.match(preserveCase.isCaseSensitive) && this.onlyCaseProtected(next)) { + last.value.push(child); + delete last.source; + return acc; + } + if (last.kind === 'Block' && child.kind === 'Block' && Object.keys(last.markup).sort().join('/') === Object.keys(child.markup).sort().join('/')) { + last.value = last.value.concat(child.value); + delete last.source; + return acc; + } + if (last.kind === 'Text' && child.kind === 'Text' && last.mode === child.mode) { + last.value += child.value; + delete last.source; + return acc; + } + acc.push(child); + return acc; + }, []); + } + onlyCaseProtected(node) { + return (node === null || node === void 0 ? void 0 : node.kind) === 'Block' && node.case === 'protect' && Object.keys(node.markup).join('/') === ''; + } + argument(node, kind) { + if (!node.arguments || !node.arguments.required.length) + return (kind === 'none'); + // expect 'n' text arguments + if (typeof kind === 'number') { + if (node.arguments.required.length !== kind) + return false; + return node.arguments.required; + } + // return first argument if it's the only one + if (node.arguments.required.length !== 1) + return false; + // loose checking for text + if (kind === 'text') { + const first = node.arguments.required[0]; + if (first.kind === 'Block' && first.value.length === 1) { + if (first.value[0].kind === 'Text') + return first.value[0].value; + } + // fall back to strict kind check + kind = 'Text'; + } + // return first argument if it's the only one and is of the specified kind + if (node.arguments.required.length !== 1 || node.arguments.required[0].kind !== kind) + return false; + switch (kind) { + case 'Text': + return node.arguments.required[0].value; + case 'RegularCommand': + case 'Block': + return node.arguments.required[0]; + } + return false; + } + clean(node) { + if (Array.isArray(node)) + return node.map(child => this.clean(child)); + delete node.loc; + switch (node.kind) { + case 'InlineMath': + case 'DisplayMath': + return this.clean_block(node); + case 'Environment': + return this.clean_environment(node); + case 'Block': + return this.clean_block(node); + case 'Bibliography': + return this.clean_bib(node); + case 'RegularCommand': + return this.clean_command(node); + case 'DiacriticCommand': + return this.clean_diacritic(node); + case 'Entry': + return this.clean_entry(node); + case 'Field': + return this.options.raw ? node : this.clean_field(node); + case 'StringDeclaration': + return this.clean_stringdecl(node); + case 'StringReference': + return this.clean_stringref(node); + case 'SubscriptCommand': + case 'SuperscriptCommand': + return this.clean_script(node); + case 'SymbolCommand': + return this.clean_symbol(node); + case 'PreambleExpression': + return this.clean_preamble(node); + case 'Number': + case 'Text': + case 'BracedComment': + case 'LineComment': + return node; + default: + return this.error(new ParserError(`no cleanup method for ${this.show(node)}`, node), this.text()); + } + } + clean_preamble(node) { + this.in_preamble = true; + const clean = this.clean(node.value); + this.in_preamble = false; + return clean; + } + clean_bib(node) { + node.children = node.children.filter(child => child.kind !== 'NonEntryText').map(child => this.clean(child)); + return node; + } + clean_stringdecl(node) { + this.strings[node.name.toUpperCase()] = node.value; + return node; + } + clean_stringref(node) { + var _a; + const name = node.name.toUpperCase(); + const _string = this.strings[name] + || this.options.strings[name] + || this.default_strings[name] + || (fields.unabbrev.includes(this.cleaning.name) && ((_a = this.options.unabbreviate[name]) === null || _a === void 0 ? void 0 : _a.text) && [this.text(this.options.unabbreviate[name].text)]); + if (!_string) { + if (!this.unresolvedStrings[name]) + this.errors.push({ message: `Unresolved @string reference ${JSON.stringify(node.name)}` }); + this.unresolvedStrings[name] = true; + } + return this.clean({ + kind: 'Block', + // if the string isn't found, add it as-is but exempt it from sentence casing + case: _string ? undefined : 'preserve', + markup: {}, + value: _string ? JSON.parse(JSON.stringify(_string)) : [this.text(node.name)], + }); + } + clean_entry(node) { + const shortjournals = []; + for (const field of node.fields) { + if (fields.unabbrev.includes(field.name) && Array.isArray(field.value)) { + const abbr = field.value.map(v => v.source).join(''); + const journal = this.options.unabbreviate[abbr]; + if (journal) { + shortjournals.push(Object.assign(Object.assign({}, JSON.parse(JSON.stringify(field))), { name: 'shortjournal' })); + field.value = JSON.parse(JSON.stringify(journal.ast)); + } + } + } + node.fields = node.fields.concat(shortjournals).map(child => this.clean(child)); + return node; + } + startCleaning(name) { + name = name.toLowerCase(); + if (fields.title.includes(name)) { + this.cleaning = { type: 'title', name }; + } + else if (fields.creator.includes(name.replace(/s$/, ''))) { + this.cleaning = { type: 'creator', name: name.replace(/s$/, '') }; + } + else { + this.cleaning = { type: 'other', name }; + } + } + stripNoCase(node, strip, preserve) { + switch (node.kind) { + case 'RegularCommand': + // a bit cheaty to assume these to be nocased, but it's just more likely to be what people want + if (['chsf', 'bibstring', 'cite'].includes(node.command)) + strip = true; + node.arguments.required.map(arg => this.stripNoCase(arg, strip, preserve)); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + if (strip && node.case === 'protect') { + if (preserve) { + node.case = 'preserve'; + } + else { + delete node.case; + } + } + node.value.map(v => this.stripNoCase(v, strip || node.case === 'protect', preserve)); + break; + case 'Field': + if (Array.isArray(node.value)) + node.value.map(v => this.stripNoCase(v, strip, preserve)); + break; + } + } + isVerbatimField(name) { + return !!this.options.verbatimFields.find(p => (typeof p === 'string') ? name === p : name.match(p)); + } + clean_field(node) { + this.startCleaning(node.name); + this.stripNoCase(node, !this.options.caseProtection || this.isVerbatimField(node.name), this.options.sentenceCase.length === 0); + if (Array.isArray(node.value)) + this.condense(node); + return node; + } + clean_script(node) { + let m, value, singlechar; + // recognize combined forms like \^\circ + if (singlechar = unicode2latex.latex[node.source]) + return this.text(singlechar); + if ((m = node.source.match(/^([\^_])([^{}]+)$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`]))) + return this.text(singlechar); + if ((m = node.source.match(/^([\^_])\{([^{}]+)\}$/)) && ((singlechar = unicode2latex.latex[`${m[1]}${m[2]}`]) || (singlechar = unicode2latex.latex[`${m[1]}{${m[2]}}`]))) + return this.text(singlechar); + const cmd = node.kind === 'SuperscriptCommand' ? '^' : '_'; + if (typeof node.value === 'string' && (singlechar = unicode2latex.latex[`${cmd}${node.value}`] || unicode2latex.latex[`${cmd}{${node.value}}`])) { + return this.text(singlechar); + } + if (typeof node.value === 'string') { + value = [this.text(node.value)]; + } + else if (!Array.isArray(node.value)) { + value = [node.value]; + } + else { + value = node.value; + } + const mode = node.kind === 'SuperscriptCommand' ? 'sup' : 'sub'; + return this.clean({ + kind: 'Block', + markup: { [mode]: true }, + value, + }); + } + clean_environment(node) { + this.condense(node); + return node; + } + needsProtection(word) { + return !word.match(preserveCase.hasUpper) && word.match(preserveCase.hasLower); + } + clean_block(node) { + var _a; + this.condense(node); + if (this.options.caseProtection !== 'strict' && ((_a = this.cleaning) === null || _a === void 0 ? void 0 : _a.type) === 'title' && node.case === 'protect') { + // test whether we can get away with skipping case protection because it contains all words that will be preserved anyway when converting back to Title Case + let preserve = true; + for (const child of node.value) { + if (child.kind === 'Text') { + const value = child.value.trim(); + preserve = !value.match(preserveCase.isCaseSensitive) || !value.split(/\s+/).find(word => this.needsProtection(word)); + } + else { + preserve = false; + } + if (!preserve) + break; + } + if (preserve) + node.case = 'preserve'; + } + if (node.kind === 'Block') { + for (const [markup, on] of Object.entries(node.markup)) { + if (!on) + delete node.markup[markup]; + } + } + return node; + } + clean_diacritic(node) { + const char = node.dotless ? `\\${node.character}` : node.character; + let unicode = unicode2latex.latex[`\\${node.mark}{${char}}`] + || unicode2latex.latex[`\\${node.mark}${char}`] + || unicode2latex.latex[`{\\${node.mark} ${char}}`] + || unicode2latex.latex[`{\\${node.mark}${char}}`] + || unicode2latex.latex[`\\${node.mark} ${char}`]; + if (!unicode && !node.dotless && node.character.length === 1 && unicode2latex.diacritics.tounicode[node.mark]) + unicode = node.character + unicode2latex.diacritics.tounicode[node.mark]; + if (!unicode && !this.in_preamble) + return this.error(new TeXError(`Unhandled \\${node.mark}{${char}}`, node, this.chunk), this.text()); + return this.text(unicode); + } + clean_symbol(node) { + if (node.command === '\\') + return this.text('\n'); + return this.text(unicode2latex.latex[`\\${node.command}`] || node.command); + } + first_text_block(node) { + if (!node) + return null; + if (node.kind === 'Block') { + for (const child of node.value) { + switch (child.kind) { + case 'Text': + return child.value ? node : null; + case 'Block': + const candidate = this.first_text_block(child); + if (candidate) + return candidate; + break; + default: + return null; + } + } + } + else { + return null; + } + } + clean_command(node) { + var _a; + let arg, unicode; + if (unicode = unicode2latex.latex[node.source]) + return this.text(unicode); + switch (node.command) { + case 'newcommand': + if (((_a = node.arguments) === null || _a === void 0 ? void 0 : _a.required.length) === 2 + && node.arguments.required[0].kind === 'Block' + && node.arguments.required[0].value.length === 1 + && node.arguments.required[0].value[0].kind === 'RegularCommand' + && node.arguments.required[1].kind === 'Block') { + this.newcommands[node.arguments.required[0].value[0].command] = node.arguments.required[1].value; + return this.text(); + } + // console.log('newcommand?', JSON.stringify(node, null, 2)) + break; + case 'item': + return { kind: 'Markup', value: '
  • ', source: node.source }; + case 'frac': + if (arg = this.argument(node, 2)) { + if (arg[0].kind === 'Text' && arg[1].kind === 'Text' && (unicode = unicode2latex.latex[`\\frac{${arg[0].value}}{${arg[1].value}}`])) + return this.text(unicode); + return this.clean({ + kind: 'Block', + case: 'protect', + markup: {}, + value: [ + { kind: 'Block', markup: { sup: true }, value: [arg[0]] }, + this.text('\u2044'), + { kind: 'Block', markup: { sub: true }, value: [arg[1]] }, + ], + }); + } + break; + // ignore + case 'vspace': + case 'vphantom': + case 'path': + case 'aftergroup': + case 'ignorespaces': + case 'relax': + case 'noopsort': + case 'ifdefined': + case 'DeclarePrefChars': + case 'else': + case 'fi': + case 'makeatletter': + return this.text(); + case 'ElsevierGlyph': + if (arg = this.argument(node, 'Text')) { + if (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]) + return this.text(unicode); + return this.text(String.fromCharCode(parseInt(arg, 16))); + } + break; + case 'chsf': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'bibstring': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'cite': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsuperscript': + case 'sp': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`^{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsubscript': + case 'sb': + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`_{${arg}}`])) + return this.text(unicode); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textsc': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'enquote': + case 'mkbibquote': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'textbf': + case 'mkbibbold': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'section': + case 'subsection': + case 'subsubsection': + case 'subsubsubsection': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'mkbibitalic': + case 'mkbibemph': + case 'textit': + case 'emph': + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + if (arg = this.argument(node, 'Text')) + return this.clean({ kind: 'Block', markup: { italics: true }, value: [this.text(arg)] }); + break; + case 'bibcyr': + if (this.argument(node, 'none')) + return this.text(); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'hspace': + case 'mathrm': + case 'textrm': + case 'ocirc': + case 'mbox': + if (arg = this.argument(node, 'text')) { + unicode = unicode2latex.latex[`\\${node.command}{${arg}}`]; + return this.text(unicode || (node.command === 'hspace' ? ' ' : arg)); + } + else if (!node.arguments.required.length) { + return this.text(); + } + else if (arg = this.argument(node, 'Block')) { + return this.clean(arg); + } + break; + // just take the URL? Not the label? + case 'href': + if (arg = this.argument(node, 2)) + return this.clean(arg[0]); + break; + case 'url': + if (arg = this.argument(node, 'Text')) + return this.text(arg); + if (arg = this.argument(node, 'Block')) + return this.clean(arg); + break; + case 'sl': + case 'em': + case 'it': + case 'itshape': + case 'bf': + case 'bfseries': + case 'sc': + case 'scshape': + case 'tt': + case 'rm': + case 'sf': + case 'verb': + // handled in the grammar + return this.text(); + // wouldn't know what to do with these + case 'left': + case 'right': + return this.text(); + case 'par': + return this.text('\n\n'); + case 'cyr': + if (this.argument(node, 'none')) + return this.text(); + break; + case 'polhk': + if (unicode = this.argument(node, 'text')) { + if (unicode.length === 1) + return this.text(unicode + '\u0328'); + } + if (this.argument(node, 'none')) + return this.text('\u0328'); + break; + default: + if (node.kind === 'RegularCommand' && this.newcommands[node.command]) { + return this.clean({ + kind: 'Block', + markup: {}, + value: JSON.parse(JSON.stringify(this.newcommands[node.command])), + }); + } + if (unicode2latex.diacritics.tounicode[node.command]) { + node.arguments.required = this.clean(node.arguments.required); + let block; + if (node.arguments.required.length === 1 && node.arguments.required[0].kind === 'Text') { + // no idea why I can't just straight return this but typescript just won't shut up + block = { + kind: 'Block', + markup: {}, + value: [{ + kind: 'DiacriticCommand', + mark: node.command, + character: node.arguments.required[0].value, + dotless: false, + loc: node.arguments.required[0].loc, + source: node.arguments.required[0].source, + }], + }; + return this.clean(block); + } + else if (block = this.first_text_block(node.arguments.required[0])) { + let fixed = false; + block.value = block.value.reduce((value, child) => { + if (!fixed && child.kind === 'Text') { + fixed = true; + value.push({ kind: 'DiacriticCommand', mark: node.command, character: child.value[0] }); + value.push(Object.assign(Object.assign({}, child), { value: child.value.substring(1) })); + } + else { + value.push(child); + } + return value; + }, []); + return this.clean({ + kind: 'Block', + markup: {}, + value: node.arguments.required, + }); + } + else { + // overline without arguments doesn't seem to render in LaTeX + if (node.command === 'overline') + return this.text(' '); + return this.clean({ + kind: 'Block', + markup: {}, + value: [this.text(' ' + unicode2latex.diacritics.tounicode[node.command])].concat(node.arguments.required), + }); + } + } + if (unicode = unicode2latex.latex[node.source] || unicode2latex.latex[`${node.source}{}`]) + return this.text(unicode); + if ((unicode = unicode2latex.latex[`\\${node.command}`] || unicode2latex.latex[`\\${node.command}{}`]) && this.argument(node, 'none')) + return this.text(unicode); + if ((arg = this.argument(node, 'Text')) && (unicode = unicode2latex.latex[`\\${node.command}{${arg}}`])) + return this.text(unicode); + break; + } + if (this.in_preamble) + return this.text(node.source); + return this.error(new TeXError(`Unhandled command: ${node.command}` + this.show(node), node, this.chunk), this.text()); + } + preserveCase(word) { + // word = word.replace(new RegExp(`"[${this.markup.enquote.open}${this.markup.enquote.close}:()]`, 'g'), '') + var _a, _b; + if (!word.trim()) + return false; + if (!word.match(preserveCase.hasAlphaNum)) + return true; + word = word.replace(/[\/’'”:()]/g, ''); + if (word === 'I') + return true; + if (word.length === 1) + return false; + if (word.replace(preserveCase.notCaseSensitive) === '') + return false; + // word = word.replace(preserveCase.notAlphaNum, '') + // simple cap at start of field + if (word.match(preserveCase.leadingCap) && ((_b = (_a = this.field) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.length) === 0) + return false; + if (word.match(preserveCase.allCaps)) + return true; + if (word.length > 1 && word.match(preserveCase.joined)) + return false; + if (word.match(preserveCase.hasUpper)) + return true; + if (word.match(preserveCase.isNumber)) + return true; + return false; + } + convert(node) { + if (Array.isArray(node)) + return node.map(child => this.convert(child)); + if (this.options.raw && this.field) + node = this.text(node.source); + switch (node.kind) { + case 'Markup': + if (this.field) + this.field.text += node.value; + break; + case 'BracedComment': + case 'LineComment': + this.comments.push(node.value); + break; + case 'Entry': + this.convert_entry(node); + break; + case 'Number': + this.convert_number(node); + break; + case 'Text': + this.convert_text(node); + break; + case 'Block': + case 'InlineMath': + case 'DisplayMath': + const start = this.field ? this.field.text.length : null; + const preserve = typeof start === 'number' && this.field.preserveRanges; + this.convert_block(node); + if (preserve && (node.case || node.kind.endsWith('Math'))) + this.preserve(start, this.field.text.length); // , `convert-block: case=${node.case}, math=${node.kind.endsWith('Math')}`) + break; + case 'Environment': + this.convert_environment(node); + break; + case 'PreambleExpression': + this.preamble.push(node.value.map(preamble => preamble.source).join('\n\n')); + break; + case 'DisplayMath': + case 'InlineMath': + case 'StringDeclaration': + break; + default: + return this.error(new ParserError(`no converter for ${node.kind}: ${this.show(node)}`, node), undefined); + } + } + splitOnce(s, sep, fromEnd = false) { + const split = fromEnd ? s.lastIndexOf(sep) : s.indexOf(sep); + return (split < 0) ? [s, ''] : [s.substr(0, split), s.substr(split + 1)]; + } + parseName(name) { + let parsed = null; + const parts = name.split(marker.comma); + if (parts.length && !parts.find(p => !p.match(/^[a-z]+(-i)?=/i))) { // extended name format + for (const part of parts) { + parsed = parsed || {}; + const [attr, value] = this.splitOnce(part.replace(marker.re.space, ''), '=').map(v => v.trim()); + if (!value) { + parsed = null; + break; + } + switch (attr.toLowerCase()) { + case 'family': + parsed.lastName = value; + break; + case 'given-i': + parsed.initial = value; + break; + case 'given': + parsed.firstName = value; + break; + case 'prefix': + parsed.prefix = value; + break; + case 'suffix': + parsed.suffix = value; + break; + case 'useprefix': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + case 'juniorcomma': + parsed.useprefix = value.toLowerCase() === 'true'; + break; + default: + parsed[attr.toLowerCase()] = value; + break; + } + } + } + const prefix = /(.+?)\s+(vere|von|van den|van der|van|de|del|della|der|di|da|pietro|vanden|du|st.|st|la|lo|ter|bin|ibn|te|ten|op|ben|al)\s+(.+)/; + let m; + switch (parsed ? 0 : parts.length) { + case 0: + // already parsed + break; + case 1: // name without commas + // literal + if (marker.re.literalName.test(parts[0])) { + parsed = { literal: parts[0] }; + } + else if (m = parts[0].replace(marker.re.space, ' ').match(prefix)) { // split on prefix + parsed = { + firstName: m[1], + prefix: m[2], + lastName: m[3], + }; + } + else { + // top-level "firstname lastname" + const [firstName, lastName] = this.splitOnce(parts[0], marker.space, true); + if (lastName) { + parsed = { firstName, lastName }; + } + else { + parsed = { lastName: firstName }; + } + } + break; + case 2: // lastname, firstname + parsed = { + lastName: parts[0], + firstName: parts[1], + }; + break; + default: // lastname, suffix, firstname + parsed = { + lastName: parts[0], + suffix: parts[1], + firstName: parts.slice(2).join(marker.comma), + }; + } + for (const [k, v] of Object.entries(parsed)) { + if (typeof v !== 'string') + continue; + parsed[k] = marker.clean(v).trim(); + } + return parsed; + } + convert_entry(node) { + var _a; + this.entry = { + key: node.id, + type: node.type, + fields: {}, + creators: {}, + }; + this.entries.push(this.entry); + // order these first for language-dependent sentence casing + const order = ['langid', 'hyphenation', 'language']; + node.fields.sort((a, b) => { + const ia = order.indexOf(a.name); + const ib = order.indexOf(b.name); + if (ia === -1 && ib === -1) + return a.name.localeCompare(b.name); // doesn't matter really + if (ia === -1) + return 1; + if (ib === -1) + return -1; + return ia - ib; + }); + let sentenceCase = !!this.options.sentenceCase.length; // if sentenceCase is empty, no sentence casing + for (const field of node.fields) { + if (field.kind !== 'Field') + return this.error(new ParserError(`Expected Field, got ${field.kind}`, node), undefined); + this.startCleaning(field.name); + /* + if (this.options.raw && this.fieldType !== 'creator') { + this.entry.fields[field.name] = [ field.value.map(v => v.source).join('') ] + continue + } + */ + this.field = { + name: field.name, + text: '', + level: 0, + words: { + upper: 0, + lower: 0, + other: 0, + }, + preserveRanges: (sentenceCase && fields.title.includes(field.name)) ? [] : null, + html: this.options.htmlFields.includes(field.name), + }; + this.entry.fields[this.field.name] = this.entry.fields[this.field.name] || []; + // special case for 'title = 2020' + if (field.value.kind === 'Number') { + this.entry.fields[this.field.name].push(field.value.value); + this.field = null; + continue; + } + this.convert(field.value); + this.field.text = this.field.text.trim(); + this.field.text = this.field.text.replace(/<\/([a-z])><\1>/g, ''); + this.field.text = this.field.text.replace(/<([a-z])>(\s*)<\/\1>/g, '$1'); + if (!this.field.text) + continue; + // disable sentenceCasing if not an english + switch (this.field.name) { + case 'langid': + case 'hyphenation': + sentenceCase = sentenceCase && this.options.sentenceCase.includes(this.field.text.toLowerCase()); + break; + case 'language': + sentenceCase = sentenceCase && !!(this.field.text.toLowerCase().trim().split(/\s*,\s*/).find(lang => this.options.sentenceCase.includes(lang))); + break; + } + // "groups" is a jabref 3.8+ monstrosity + if (this.field.name.match(/^(keywords?|groups)$/)) { + for (let text of this.field.text.split(marker.comma)) { + text = text.trim(); + if (text) + this.entry.fields[this.field.name].push(text); + } + } + else if (this.cleaning.type === 'creator') { + if (!this.entry.creators[this.field.name]) + this.entry.creators[this.field.name] = []; + // {M. Halle, J. Bresnan, and G. Miller} + if (this.field.text.includes(`${marker.comma}${marker.and}`)) { // + this.field.text = this.field.text.replace(new RegExp(`${marker.comma}${marker.and}`, 'g'), marker.and).replace(new RegExp(marker.comma), marker.and); + } + for (const creator of this.field.text.split(marker.and)) { + this.entry.fields[this.field.name].push(marker.clean(creator)); + this.entry.creators[this.field.name].push(this.parseName(creator)); + } + } + else if (fields.unabbrev.includes(field.name)) { // doesn't get sentence casing anyhow TODO: booktitle does! + this.entry.fields[this.field.name].push((((_a = this.options.unabbreviate[this.field.text]) === null || _a === void 0 ? void 0 : _a.text) || this.field.text).normalize('NFC')); + } + else { + if (this.field.preserveRanges) { + if (this.options.guessAlreadySentenceCased && Math.max(this.field.words.upper, this.field.words.lower) > (this.field.words.other + Math.min(this.field.words.upper, this.field.words.lower))) { + this.preserve(null, null); // , 'mostly sentence cased already') + } + else { + const txt = this.field.text.replace(preserveCase.markup, markup => marker.markup.repeat(markup.length)); + let match; + preserveCase.sentenceStart.lastIndex = 0; + while ((match = preserveCase.sentenceStart.exec(txt))) { + // exclude stuff like "U.S. Taxes" + if (match.index > 2 && txt.substr(0, match.index + 1).match(preserveCase.acronym)) + continue; + this.preserve(match.index, match.index + match[0].length); // , `sentenceStart: ${match[0]} at ${match.index}..${match.index + match[0].length}`) + } + preserveCase.quoted.lastIndex = 0; + while ((match = preserveCase.quoted.exec(this.field.text))) { + this.preserve(match.index, match.index + match[0].length); // , 'quoted') + } + } + } + this.entry.fields[this.field.name].push(this.convertToSentenceCase(this.field.text).normalize('NFC')); + } + } + this.field = null; + } + convertToSentenceCase(text) { + if (!this.field.preserveRanges) + return text; + // always keep the leading char, but skip markup + const lead = text.match(/^(<[^>]+>)*./); + if (lead) { + this.preserve(lead[0].length - 1, lead[0].length); + } + else { + this.preserve(0, 1); + } + let sentenceCased = text.toLowerCase().replace(/(([\?!]\s*|^)([\'\"ÂĄÂżâ€œâ€˜â€žÂ«\s]+)?[^\s])/g, x => x.toUpperCase()); + for (const { start, end } of this.field.preserveRanges) { + sentenceCased = sentenceCased.substring(0, start) + text.substring(start, end) + sentenceCased.substring(end); + } + if (text !== sentenceCased) + this.entry.sentenceCased = true; + return sentenceCased; + } + convert_number(node) { + this.field.text += `${node.value}`; + } + convert_text(node) { + if (node.mode === 'verbatim') { + this.field.text += node.value.trim(); + return; + } + // heuristic to detect pre-sentencecased text + for (const word of node.value.split(/\b/)) { + if (word.match(preserveCase.allLower)) { + this.field.words.lower++; + } + else if (word.match(preserveCase.allCaps)) { + this.field.words.upper++; + } + else if (word.match(preserveCase.hasAlpha)) { + this.field.words.other++; + } + } + if (this.field.level === 0 && this.cleaning.type === 'creator') { + this.field.text += node.value.replace(/\s+and\s+/ig, marker.and).replace(/\s*,\s*/g, marker.comma).replace(/\s+/g, marker.space); + return; + } + if (this.field.level === 0 && this.field.name.match(/^(keywords?|groups)$/)) { + this.field.text += node.value.replace(/\s*[;,]\s*/g, marker.comma); + return; + } + if (this.field.html) { + this.field.text += node.value.replace(/&/g, '&').replace(//g, '>'); + } + else if (this.field.preserveRanges) { + const words = node.value.split(/(\s+)/); + for (const word of words) { + const start = this.field.text.length; + this.field.text += word; + if (this.preserveCase(word)) + this.preserve(start, this.field.text.length); // , `word: ${JSON.stringify(word)}`) + } + } + else { + this.field.text += node.value; + } + } + convert_environment(node) { + this.field.text += { enumerate: '
      ', itemize: '
        ' }[node.env]; + this.convert_block(Object.assign(Object.assign({}, node), { kind: 'Block', markup: {} })); + this.field.text += { enumerate: '
    ', itemize: '' }[node.env]; + } + convert_block(node) { + const start = this.field.text.length; + let prefix = ''; + let postfix = ''; + if (this.options.caseProtection !== 'strict' && this.cleaning.type === 'other') + delete node.case; + if (this.cleaning.type === 'creator' && node.case === 'protect') { + prefix += marker.literal; + postfix = marker.literal + postfix; + delete node.case; + } + if (node.case === 'protect') { + prefix += this.options.markup.caseProtect.open; + postfix = this.options.markup.caseProtect.close + postfix; + } + if (node.kind === 'Block') { + for (const markup of Object.keys(node.markup)) { + if (!this.options.markup[markup]) + return this.error(new ParserError(`markup: ${markup}`, node), undefined); + prefix += this.options.markup[markup].open; + postfix = this.options.markup[markup].close + postfix; + } + } + const end = { + withoutPrefix: this.field.text.length, + withPrefix: this.field.text.length + prefix.length, + }; + this.field.text += prefix; + this.field.level++; + this.convert(node.value); + this.field.level--; + const added = this.field.text.substring(end.withPrefix); + const added_text = added.replace(/<\/?[^>]+>/g, ''); + const needsProtection = added_text && ((this.options.caseProtection === 'strict' && added_text.match(preserveCase.isCaseSensitive)) + || + (this.options.caseProtection === 'as-needed' && added_text.split(/\s+/).find(word => this.needsProtection(word)))); + if (!added) { // nothing was added, so remove prefix + this.field.text = this.field.text.substring(0, end.withoutPrefix); + } + else if (this.field.preserveRanges && prefix === this.options.markup.caseProtect.open && !needsProtection) { + // something was added that didn't actually need case protection + this.field.text = this.field.text.substring(0, end.withoutPrefix) + added; + this.field.preserveRanges = this.field.preserveRanges.filter(range => range.start < end.withoutPrefix); + } + else { + this.field.text += postfix; + } + this.field.text = this.field.text.replace(/<(sup|sub)>([^<>]+)<\/\1>$/i, (m, mode, chars) => { + const cmd = mode === 'sup' ? '^' : '_'; + let script = ''; + for (const char of chars) { + const unicode = unicode2latex.latex[`${cmd}${char}`] || unicode2latex.latex[`${cmd}{${char}}`]; + script += unicode ? unicode : `<${mode}>${char}`; + } + script = script.replace(new RegExp(`<${mode}>`, 'g'), ''); + return script.length < m.length ? script : m; + }); + if (node.case && this.field.preserveRanges) + this.preserve(start, this.field.text.length); // , 'in convert-block ' + node.source || '') + } + } + /** + * parse bibtex. This will try to convert TeX commands into unicode equivalents, and apply `@string` expansion + */ + function parse(input, options = {}) { + const parser = new Parser(options); + return parser.parse(input); + } + exports.parse = parse; + function ast(input, options = {}, clean = true) { + const parser = new Parser(options); + return parser.ast(input, clean); + } + exports.ast = ast; + var chunker_2 = chunker; + Object.defineProperty(exports, "chunker", { enumerable: true, get: function () { return chunker_2.parse; } }); + + Object.defineProperty(exports, "jabref", { enumerable: true, get: function () { return jabref.parse; } }); + + }); + + var Library = /** @class */ (function () { + function Library(entries) { + this.entries = entries; + } + Object.defineProperty(Library.prototype, "size", { + get: function () { + return Object.keys(this.entries).length; + }, + enumerable: false, + configurable: true + }); + /** + * For the given citekey, find the corresponding `Entry` and return a + * collection of template variable assignments. + */ + Library.prototype.getTemplateVariablesForCitekey = function (citekey) { + var _a; + var entry = this.entries[citekey]; + var shortcuts = { + citekey: citekey, + abstract: entry.abstract, + authorString: entry.authorString, + containerTitle: entry.containerTitle, + DOI: entry.DOI, + eprint: entry.eprint, + eprinttype: entry.eprinttype, + eventPlace: entry.eventPlace, + note: entry.note, + page: entry.page, + publisher: entry.publisher, + publisherPlace: entry.publisherPlace, + title: entry.title, + URL: entry.URL, + year: (_a = entry.year) === null || _a === void 0 ? void 0 : _a.toString(), + zoteroSelectURI: entry.zoteroSelectURI, + }; + return __assign({ entry: entry.toJSON() }, shortcuts); + }; + return Library; + }()); + /** + * Load reference entries from the given raw database data. + * + * Returns a list of `EntryData`, which should be wrapped with the relevant + * adapter and used to instantiate a `Library`. + */ + function loadEntries(databaseRaw, databaseType) { + var libraryArray; + if (databaseType == 'csl-json') { + libraryArray = JSON.parse(databaseRaw); + } + else if (databaseType == 'biblatex') { + var options = { + errorHandler: function (err) { + console.warn('Citation plugin: error loading BibLaTeX entry:', err); + }, + }; + var parsed = bibtexParser.parse(databaseRaw, options); + libraryArray = parsed.entries; + } + return libraryArray; + } + /** + * An `Entry` represents a single reference in a reference database. + * Each entry has a unique identifier, known in most reference managers as its + * "citekey." + */ + var Entry = /** @class */ (function () { + function Entry() { + } + Object.defineProperty(Entry.prototype, "year", { + get: function () { + var _a; + return this._year + ? parseInt(this._year) + : (_a = this.issuedDate) === null || _a === void 0 ? void 0 : _a.getUTCFullYear(); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "note", { + get: function () { + var _a; + return (_a = this._note) === null || _a === void 0 ? void 0 : _a.map(function (el) { return el.replace(/(zotero:\/\/.+)/g, '[Link]($1)'); }).join('\n\n'); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(Entry.prototype, "zoteroSelectURI", { + /** + * A URI which will open the relevant entry in the Zotero client. + */ + get: function () { + return "zotero://select/items/@" + this.id; + }, + enumerable: false, + configurable: true + }); + Entry.prototype.toJSON = function () { + var _this = this; + var jsonObj = Object.assign({}, this); + // add getter values + var proto = Object.getPrototypeOf(this); + Object.entries(Object.getOwnPropertyDescriptors(proto)) + .filter(function (_a) { + var descriptor = _a[1]; + return typeof descriptor.get == 'function'; + }) + .forEach(function (_a) { + var key = _a[0], descriptor = _a[1]; + if (descriptor && key[0] !== '_') { + try { + var val = _this[key]; + jsonObj[key] = val; + } + catch (error) { + return; + } + } + }); + return jsonObj; + }; + return Entry; + }()); + var EntryCSLAdapter = /** @class */ (function (_super) { + __extends(EntryCSLAdapter, _super); + function EntryCSLAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + _this.eprint = null; + _this.eprinttype = null; + _this.files = null; + return _this; + } + Object.defineProperty(EntryCSLAdapter.prototype, "id", { + get: function () { + return this.data.id; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "abstract", { + get: function () { + return this.data.abstract; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "author", { + get: function () { + return this.data.author; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "authorString", { + get: function () { + return this.data.author + ? this.data.author.map(function (a) { return a.given + " " + a.family; }).join(', ') + : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "containerTitle", { + get: function () { + return this.data['container-title']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "DOI", { + get: function () { + return this.data.DOI; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "eventPlace", { + get: function () { + return this.data['event-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "issuedDate", { + get: function () { + if (!(this.data.issued && + this.data.issued['date-parts'] && + this.data.issued['date-parts'][0].length > 0)) + return null; + var _a = this.data.issued['date-parts'][0], year = _a[0], month = _a[1], day = _a[2]; + return new Date(year, (month || 1) - 1, day || 1); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "page", { + get: function () { + return this.data.page; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisher", { + get: function () { + return this.data.publisher; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "publisherPlace", { + get: function () { + return this.data['publisher-place']; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "title", { + get: function () { + return this.data.title; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryCSLAdapter.prototype, "URL", { + get: function () { + return this.data.URL; + }, + enumerable: false, + configurable: true + }); + return EntryCSLAdapter; + }(Entry)); + var BIBLATEX_PROPERTY_MAPPING = { + abstract: 'abstract', + booktitle: '_containerTitle', + date: 'issued', + doi: 'DOI', + eprint: 'eprint', + eprinttype: 'eprinttype', + eventtitle: 'event', + journal: '_containerTitle', + journaltitle: '_containerTitle', + location: 'publisherPlace', + pages: 'page', + shortjournal: 'containerTitleShort', + title: 'title', + shorttitle: 'titleShort', + url: 'URL', + venue: 'eventPlace', + year: '_year', + publisher: 'publisher', + note: '_note', + }; + // BibLaTeX parser returns arrays of property values (allowing for repeated + // property entries). For the following fields, just blindly take the first. + var BIBLATEX_PROPERTY_TAKE_FIRST = [ + 'abstract', + 'booktitle', + '_containerTitle', + 'date', + 'doi', + 'eprint', + 'eprinttype', + 'eventtitle', + 'journaltitle', + 'location', + 'pages', + 'shortjournal', + 'title', + 'shorttitle', + 'url', + 'venue', + '_year', + 'publisher', + ]; + var EntryBibLaTeXAdapter = /** @class */ (function (_super) { + __extends(EntryBibLaTeXAdapter, _super); + function EntryBibLaTeXAdapter(data) { + var _this = _super.call(this) || this; + _this.data = data; + Object.entries(BIBLATEX_PROPERTY_MAPPING).forEach(function (map) { + var src = map[0], tgt = map[1]; + if (src in _this.data.fields) { + var val = _this.data.fields[src]; + if (BIBLATEX_PROPERTY_TAKE_FIRST.includes(src)) { + val = val[0]; + } + _this[tgt] = val; + } + }); + return _this; + } + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "id", { + get: function () { + return this.data.key; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "type", { + get: function () { + return this.data.type; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "files", { + get: function () { + // For some reason the bibtex parser doesn't reliably parse file list to + // array ; so we'll do it manually / redundantly + var ret = []; + if (this.data.fields.file) { + ret = ret.concat(this.data.fields.file.flatMap(function (x) { return x.split(';'); })); + } + if (this.data.fields.files) { + ret = ret.concat(this.data.fields.files.flatMap(function (x) { return x.split(';'); })); + } + return ret; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "authorString", { + get: function () { + var _a; + if (this.data.creators.author) { + var names = this.data.creators.author.map(function (name) { + if (name.literal) + return name.literal; + var parts = [name.firstName, name.prefix, name.lastName, name.suffix]; + // Drop any null parts and join + return parts.filter(function (x) { return x; }).join(' '); + }); + return names.join(', '); + } + else { + return (_a = this.data.fields.author) === null || _a === void 0 ? void 0 : _a.join(', '); + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "containerTitle", { + get: function () { + if (this._containerTitle) { + return this._containerTitle; + } + else if (this.data.fields.eprint) { + var prefix = this.data.fields.eprinttype + ? this.data.fields.eprinttype + ":" + : ''; + var suffix = this.data.fields.primaryclass + ? " [" + this.data.fields.primaryclass + "]" + : ''; + return "" + prefix + this.data.fields.eprint + suffix; + } + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "issuedDate", { + get: function () { + return this.issued ? new Date(this.issued) : null; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(EntryBibLaTeXAdapter.prototype, "author", { + get: function () { + var _a; + return (_a = this.data.creators.author) === null || _a === void 0 ? void 0 : _a.map(function (a) { return ({ + given: a.firstName, + family: a.lastName, + }); }); + }, + enumerable: false, + configurable: true + }); + return EntryBibLaTeXAdapter; + }(Entry)); + + register(function (msg) { + return loadEntries(msg.databaseRaw, msg.databaseType); + }); + +}()); +}, 'data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyLmpzIiwic291cmNlcyI6WyJ3b3JrZXI6Ly93ZWItd29ya2VyL25vZGVfbW9kdWxlcy9wcm9taXNlLXdvcmtlci9yZWdpc3Rlci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXIvZ3JhbW1hci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXIvY2h1bmtlci5qcyIsIndvcmtlcjovL3dlYi13b3JrZXIvbm9kZV9tb2R1bGVzL3VuaWNvZGUybGF0ZXgvaW5kZXguanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL25vZGVfbW9kdWxlcy94cmVnZXhwL3Rvb2xzL291dHB1dC9jYXRlZ29yaWVzLmpzIiwid29ya2VyOi8vd2ViLXdvcmtlci9ub2RlX21vZHVsZXMvQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlci9qYWJyZWYuanMiLCJ3b3JrZXI6Ly93ZWItd29ya2VyL25vZGVfbW9kdWxlcy9AcmV0b3JxdWVyZS9iaWJ0ZXgtcGFyc2VyL2luZGV4LmpzIiwic3JjL3R5cGVzLnRzIiwic3JjL3dvcmtlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCdcblxuZnVuY3Rpb24gaXNQcm9taXNlIChvYmopIHtcbiAgLy8gdmlhIGh0dHBzOi8vdW5wa2cuY29tL2lzLXByb21pc2VAMi4xLjAvaW5kZXguanNcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJQcm9taXNlV29ya2VyIChjYWxsYmFjaykge1xuICBmdW5jdGlvbiBwb3N0T3V0Z29pbmdNZXNzYWdlIChlLCBtZXNzYWdlSWQsIGVycm9yLCByZXN1bHQpIHtcbiAgICBmdW5jdGlvbiBwb3N0TWVzc2FnZSAobXNnKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0eXBlb2Ygc2VsZi5wb3N0TWVzc2FnZSAhPT0gJ2Z1bmN0aW9uJykgeyAvLyBzZXJ2aWNlIHdvcmtlclxuICAgICAgICBlLnBvcnRzWzBdLnBvc3RNZXNzYWdlKG1zZylcbiAgICAgIH0gZWxzZSB7IC8vIHdlYiB3b3JrZXJcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZShtc2cpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2Vycm9yJyBpbiBjb25zb2xlKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgdG8gbWFrZSBlcnJvcnMgZWFzaWVyIHRvIGRlYnVnLiBJIHRoaW5rIGl0J3MgaW1wb3J0YW50XG4gICAgICAgIC8vIGVub3VnaCB0byBqdXN0IGxlYXZlIGhlcmUgd2l0aG91dCBnaXZpbmcgdGhlIHVzZXIgYW4gb3B0aW9uXG4gICAgICAgIC8vIHRvIHNpbGVuY2UgaXQuXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dvcmtlciBjYXVnaHQgYW4gZXJyb3I6JywgZXJyb3IpXG4gICAgICB9XG4gICAgICBwb3N0TWVzc2FnZShbbWVzc2FnZUlkLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2VcbiAgICAgIH1dKVxuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0TWVzc2FnZShbbWVzc2FnZUlkLCBudWxsLCByZXN1bHRdKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoRnVuYyAoY2FsbGJhY2ssIG1lc3NhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgcmVzOiBjYWxsYmFjayhtZXNzYWdlKSB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHsgZXJyOiBlIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVJbmNvbWluZ01lc3NhZ2UgKGUsIGNhbGxiYWNrLCBtZXNzYWdlSWQsIG1lc3NhZ2UpIHtcbiAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2hGdW5jKGNhbGxiYWNrLCBtZXNzYWdlKVxuXG4gICAgaWYgKHJlc3VsdC5lcnIpIHtcbiAgICAgIHBvc3RPdXRnb2luZ01lc3NhZ2UoZSwgbWVzc2FnZUlkLCByZXN1bHQuZXJyKVxuICAgIH0gZWxzZSBpZiAoIWlzUHJvbWlzZShyZXN1bHQucmVzKSkge1xuICAgICAgcG9zdE91dGdvaW5nTWVzc2FnZShlLCBtZXNzYWdlSWQsIG51bGwsIHJlc3VsdC5yZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5yZXMudGhlbihmdW5jdGlvbiAoZmluYWxSZXN1bHQpIHtcbiAgICAgICAgcG9zdE91dGdvaW5nTWVzc2FnZShlLCBtZXNzYWdlSWQsIG51bGwsIGZpbmFsUmVzdWx0KVxuICAgICAgfSwgZnVuY3Rpb24gKGZpbmFsRXJyb3IpIHtcbiAgICAgICAgcG9zdE91dGdvaW5nTWVzc2FnZShlLCBtZXNzYWdlSWQsIGZpbmFsRXJyb3IpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uSW5jb21pbmdNZXNzYWdlIChlKSB7XG4gICAgdmFyIHBheWxvYWQgPSBlLmRhdGFcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGF5bG9hZCkgfHwgcGF5bG9hZC5sZW5ndGggIT09IDIpIHtcbiAgICAgIC8vIG1lc3NhZ2UgZG9lbnMndCBtYXRjaCBjb21tdW5pY2F0aW9uIGZvcm1hdDsgaWdub3JlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIG1lc3NhZ2VJZCA9IHBheWxvYWRbMF1cbiAgICB2YXIgbWVzc2FnZSA9IHBheWxvYWRbMV1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBvc3RPdXRnb2luZ01lc3NhZ2UoZSwgbWVzc2FnZUlkLCBuZXcgRXJyb3IoXG4gICAgICAgICdQbGVhc2UgcGFzcyBhIGZ1bmN0aW9uIGludG8gcmVnaXN0ZXIoKS4nKSlcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlSW5jb21pbmdNZXNzYWdlKGUsIGNhbGxiYWNrLCBtZXNzYWdlSWQsIG1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25JbmNvbWluZ01lc3NhZ2UpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVnaXN0ZXJQcm9taXNlV29ya2VyXG4iLCIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCIvKlxuICogR2VuZXJhdGVkIGJ5IFBFRy5qcyAwLjEwLjAuXG4gKlxuICogaHR0cDovL3BlZ2pzLm9yZy9cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gcGVnJHN1YmNsYXNzKGNoaWxkLCBwYXJlbnQpIHtcbiAgZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9XG4gIGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTtcbn1cblxuZnVuY3Rpb24gcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIGV4cGVjdGVkLCBmb3VuZCwgbG9jYXRpb24pIHtcbiAgdGhpcy5tZXNzYWdlICA9IG1lc3NhZ2U7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5mb3VuZCAgICA9IGZvdW5kO1xuICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gIHRoaXMubmFtZSAgICAgPSBcIlN5bnRheEVycm9yXCI7XG5cbiAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgcGVnJFN5bnRheEVycm9yKTtcbiAgfVxufVxuXG5wZWckc3ViY2xhc3MocGVnJFN5bnRheEVycm9yLCBFcnJvcik7XG5cbnBlZyRTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UgPSBmdW5jdGlvbihleHBlY3RlZCwgZm91bmQpIHtcbiAgdmFyIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyA9IHtcbiAgICAgICAgbGl0ZXJhbDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJjbGFzc1wiOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgICAgIHZhciBlc2NhcGVkUGFydHMgPSBcIlwiLFxuICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGF0aW9uLnBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlc2NhcGVkUGFydHMgKz0gZXhwZWN0YXRpb24ucGFydHNbaV0gaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICA/IGNsYXNzRXNjYXBlKGV4cGVjdGF0aW9uLnBhcnRzW2ldWzBdKSArIFwiLVwiICsgY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV1bMV0pXG4gICAgICAgICAgICAgIDogY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBcIltcIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/IFwiXlwiIDogXCJcIikgKyBlc2NhcGVkUGFydHMgKyBcIl1cIjtcbiAgICAgICAgfSxcblxuICAgICAgICBhbnk6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVuZDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJlbmQgb2YgaW5wdXRcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBvdGhlcjogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24uZGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgZnVuY3Rpb24gaGV4KGNoKSB7XG4gICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXRlcmFsRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpXG4gICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCAgICAgICAgICBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4MCcgKyBoZXgoY2gpOyB9KVxuICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4JyAgKyBoZXgoY2gpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9cXF0vZywgJ1xcXFxdJylcbiAgICAgIC5yZXBsYWNlKC9cXF4vZywgJ1xcXFxeJylcbiAgICAgIC5yZXBsYWNlKC8tL2csICAnXFxcXC0nKVxuICAgICAgLnJlcGxhY2UoL1xcMC9nLCAnXFxcXDAnKVxuICAgICAgLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKVxuICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgLnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxuICAgICAgLnJlcGxhY2UoL1tcXHgwMC1cXHgwRl0vZywgICAgICAgICAgZnVuY3Rpb24oY2gpIHsgcmV0dXJuICdcXFxceDAnICsgaGV4KGNoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgZnVuY3Rpb24oY2gpIHsgcmV0dXJuICdcXFxceCcgICsgaGV4KGNoKTsgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOU1tleHBlY3RhdGlvbi50eXBlXShleHBlY3RhdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9ucyA9IG5ldyBBcnJheShleHBlY3RlZC5sZW5ndGgpLFxuICAgICAgICBpLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXNjcmlwdGlvbnNbaV0gPSBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGVkW2ldKTtcbiAgICB9XG5cbiAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgaWYgKGRlc2NyaXB0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgZGVzY3JpcHRpb25zW2pdID0gZGVzY3JpcHRpb25zW2ldO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzY3JpcHRpb25zLmxlbmd0aCA9IGo7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uc1swXSArIFwiIG9yIFwiICsgZGVzY3JpcHRpb25zWzFdO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIilcbiAgICAgICAgICArIFwiLCBvciBcIlxuICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kKSB7XG4gICAgcmV0dXJuIGZvdW5kID8gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGZvdW5kKSArIFwiXFxcIlwiIDogXCJlbmQgb2YgaW5wdXRcIjtcbiAgfVxuXG4gIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xufTtcblxuZnVuY3Rpb24gcGVnJHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307XG5cbiAgdmFyIHBlZyRGQUlMRUQgPSB7fSxcblxuICAgICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyA9IHsgQmlibGlvZ3JhcGh5OiBwZWckcGFyc2VCaWJsaW9ncmFwaHkgfSxcbiAgICAgIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiAgPSBwZWckcGFyc2VCaWJsaW9ncmFwaHksXG5cbiAgICAgIHBlZyRjMCA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0JpYmxpb2dyYXBoeScsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiByLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMSA9IFwiQFwiLFxuICAgICAgcGVnJGMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIkBcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMzID0gXCJjb21tZW50XCIsXG4gICAgICBwZWckYzQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29tbWVudFwiLCB0cnVlKSxcbiAgICAgIHBlZyRjNSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0JyYWNlZENvbW1lbnQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdi5zbGljZSgxLCAtMSksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM2ID0gL15bXlxcblxccl0vLFxuICAgICAgcGVnJGM3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxuXCIsIFwiXFxyXCJdLCB0cnVlLCBmYWxzZSksXG4gICAgICBwZWckYzggPSAvXltcXG5cXHJdLyxcbiAgICAgIHBlZyRjOSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTAgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdMaW5lQ29tbWVudCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKHYpLFxuICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgcGVnJGMxMSA9IC9eW15AXS8sXG4gICAgICBwZWckYzEyID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiQFwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ05vbkVudHJ5VGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKHYpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTQgPSBmdW5jdGlvbihuKSB7IHJldHVybiBuOyB9LFxuICAgICAgcGVnJGMxNSA9IFwie1wiLFxuICAgICAgcGVnJGMxNiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTcgPSAvXltee31dLyxcbiAgICAgIHBlZyRjMTggPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJ7XCIsIFwifVwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxOSA9IFwifVwiLFxuICAgICAgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ9XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMjEgPSBmdW5jdGlvbihjb21tZW50KSB7IHJldHVybiAneycgKyBjb21tZW50LmpvaW4oJycpICsgJ30nIH0sXG4gICAgICBwZWckYzIyID0gL15bQS1aYS16XS8sXG4gICAgICBwZWckYzIzID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIkFcIiwgXCJaXCJdLCBbXCJhXCIsIFwielwiXV0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzI0ID0gL15bKHtdLyxcbiAgICAgIHBlZyRjMjUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIoXCIsIFwie1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMjYgPSAvXlt9KV0vLFxuICAgICAgcGVnJGMyNyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIn1cIiwgXCIpXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMyOCA9IGZ1bmN0aW9uKHR5cGUsIGlkLCBmaWVsZHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0VudHJ5JyxcbiAgICAgICAgICAgIGlkOiBpZCB8fCAnJyxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZHMsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMyOSA9IFwicHJlYW1ibGVcIixcbiAgICAgIHBlZyRjMzAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwicHJlYW1ibGVcIiwgdHJ1ZSksXG4gICAgICBwZWckYzMxID0gZnVuY3Rpb24ob3BlbmVyLCB2LCBjbG9zZXIpIHtcbiAgICAgICAgICBzd2l0Y2ggKG9wZW5lciArIGNsb3Nlcikge1xuICAgICAgICAgICAgY2FzZSAne30nOlxuICAgICAgICAgICAgY2FzZSAnKCknOlxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmJhbGFuY2VkIG9wZW5lci1jbG9zZXIgZm9yIHByZWFtYmxlOiAke29wZW5lcn0uLi4ke2Nsb3Nlcn1gKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1ByZWFtYmxlRXhwcmVzc2lvbicsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2LnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzMyID0gXCJzdHJpbmdcIixcbiAgICAgIHBlZyRjMzMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic3RyaW5nXCIsIHRydWUpLFxuICAgICAgcGVnJGMzNCA9IGZ1bmN0aW9uKGssIHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1N0cmluZ0RlY2xhcmF0aW9uJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgbmFtZTogayxcbiAgICAgICAgICAgIHZhbHVlOiB2LnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzM1ID0gL15bXiBcXHRcXHJcXG4sXS8sXG4gICAgICBwZWckYzM2ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcclwiLCBcIlxcblwiLCBcIixcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMzcgPSBcIixcIixcbiAgICAgIHBlZyRjMzggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSksXG4gICAgICBwZWckYzM5ID0gZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGlkOyB9LFxuICAgICAgcGVnJGM0MCA9IGZ1bmN0aW9uKG5hbWUpIHsgcmV0dXJuIGlzVmVyYmF0aW1GaWVsZChuYW1lKSAmJiB1bm5lc3RGaWVsZHMuaW5jbHVkZXMobmFtZSkgfSxcbiAgICAgIHBlZyRjNDEgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyB3YXMgYWJ1c2VkIHNvIG11Y2gsIG1hbnkgcHJvY2Vzc29ycyB0cmVhdCBkb3VibGUtb3V0ZXItYnJhY2VzIGFzIHNpbmdsZVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWU6IFsgcHJvdGVjdCh2YWx1ZSkgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNDIgPSBmdW5jdGlvbihuYW1lKSB7IHJldHVybiBpc1ZlcmJhdGltRmllbGQobmFtZSkgfSxcbiAgICAgIHBlZyRjNDMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWU6IFsgcHJvdGVjdCh2YWx1ZSkgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNDQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyB3YXMgYWJ1c2VkIHNvIG11Y2gsIG1hbnkgcHJvY2Vzc29ycyB0cmVhdCBkb3VibGUtb3V0ZXItYnJhY2VzIGFzIHNpbmdsZVxuICAgICAgICAgIGlmICh1bm5lc3RGaWVsZHMuaW5jbHVkZXMobmFtZSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVubmVzdE1vZGUgPT09ICdwcmVzZXJ2ZScpIHtcbiAgICAgICAgICAgICAgdmFsdWVbMF0uY2FzZSA9ICdwcmVzZXJ2ZSdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF0udmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlX21hcmt1cF9zd2l0Y2hlcyh7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzQ1ID0gL15bXzphLXpBLVowLTlcXC1dLyxcbiAgICAgIHBlZyRjNDYgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJfXCIsIFwiOlwiLCBbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl0sIFtcIjBcIiwgXCI5XCJdLCBcIi1cIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzQ3ID0gZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpIH0sXG4gICAgICBwZWckYzQ4ID0gXCJcXFwiXCIsXG4gICAgICBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1MCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICB2ID0gdiB8fCB7XG4gICAgICAgICAgICBraW5kOiAnVGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgdi5tb2RlID0gJ3ZlcmJhdGltJ1xuICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh2KVxuICAgICAgICB9LFxuICAgICAgcGVnJGM1MSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdi5qb2luKCcnKS50cmltKCksXG4gICAgICAgICAgICBtb2RlOiAndmVyYmF0aW0nLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzUyID0gZnVuY3Rpb24odikgeyByZXR1cm4gdiB9LFxuICAgICAgcGVnJGM1MyA9IGZ1bmN0aW9uKHYpIHsgcmV0dXJuICd7JyArIHYuam9pbignJykgKyAnfScgfSxcbiAgICAgIHBlZyRjNTQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG1hdGguc2V0KGZhbHNlKSB9LFxuICAgICAgcGVnJGM1NSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gdi5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG4gICAgICAgIH0sXG4gICAgICBwZWckYzU2ID0gZnVuY3Rpb24odikgeyByZXR1cm4gdjsgfSxcbiAgICAgIHBlZyRjNTcgPSBcIntcXFxcdmVyYlwiLFxuICAgICAgcGVnJGM1OCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XFxcXHZlcmJcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1OSA9IC9eW2EtekEtWl0vLFxuICAgICAgcGVnJGM2MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2MSA9IC9eW15cXF5fJHt9XFxcXF0vLFxuICAgICAgcGVnJGM2MiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl5cIiwgXCJfXCIsIFwiJFwiLCBcIntcIiwgXCJ9XCIsIFwiXFxcXFwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2MyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogbm9ybWFsaXplV2hpdGVzcGFjZSh2KSxcbiAgICAgICAgICAgIG1vZGU6IG1hdGgub24gPyAnbWF0aCcgOiAndGV4dCcsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNjQgPSAvXlteXFxeXyR7fVwiXFxcXF0vLFxuICAgICAgcGVnJGM2NSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl5cIiwgXCJfXCIsIFwiJFwiLCBcIntcIiwgXCJ9XCIsIFwiXFxcIlwiLCBcIlxcXFxcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjNjYgPSAvXlswLTldLyxcbiAgICAgIHBlZyRjNjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMFwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2OCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ051bWJlcicsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCh2LCAxMCksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM2OSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1N0cmluZ1JlZmVyZW5jZScsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIG5hbWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM3MCA9IFwiXFxcXGJlZ2lue1wiLFxuICAgICAgcGVnJGM3MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcYmVnaW57XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNzIgPSAvXlthLXpBLVowLTldLyxcbiAgICAgIHBlZyRjNzMgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiYVwiLCBcInpcIl0sIFtcIkFcIiwgXCJaXCJdLCBbXCIwXCIsIFwiOVwiXV0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzc0ID0gXCJcXFxcZW5ke1wiLFxuICAgICAgcGVnJGM3NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcZW5ke1wiLCBmYWxzZSksXG4gICAgICBwZWckYzc2ID0gZnVuY3Rpb24oZW52LCB2LCBjZW52KSB7IHJldHVybiBlbnYgPT09IGNlbnYgfSxcbiAgICAgIHBlZyRjNzcgPSBmdW5jdGlvbihlbnYsIHYsIGNlbnYpIHtcbiAgICAgICAgICBpZiAobWFya3VwW2Vudl0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICBtYXJrdXA6IHsgW21hcmt1cFtlbnZdXTogdHJ1ZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBraW5kOiAnRW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgZW52OiBlbnYsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM3OCA9IFwie1xcXFxcIixcbiAgICAgIHBlZyRjNzkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwie1xcXFxcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM4MCA9IFwiXFxcXFwiLFxuICAgICAgcGVnJGM4MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjODIgPSAvXltpal0vLFxuICAgICAgcGVnJGM4MyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcImlcIiwgXCJqXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM4NCA9IGZ1bmN0aW9uKG1hcmssIGNoYXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBtYXJrOiBtYXJrLFxuICAgICAgICAgICAgZG90bGVzczogISFjaGFyWzFdLFxuICAgICAgICAgICAgY2hhcmFjdGVyOiBjaGFyWzFdIHx8IGNoYXJbMF0sXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM4NSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh7XG4gICAgICAgICAgICAgIGtpbmQ6ICdUZXh0JyxcbiAgICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgICAgdmFsdWU6IHYuam9pbignJykudHJpbSgpLFxuICAgICAgICAgICAgICBtb2RlOiAndmVyYmF0aW0nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIHBlZyRjODYgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgY29uc3QgYmxvY2sgPSB7XG4gICAgICAgICAgICBraW5kOiAnQmxvY2snLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgIG1hcmt1cDoge30sXG4gICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGxlYWRpbmdjbWQgPSBibG9jay52YWx1ZS5sZW5ndGggJiYgKGJsb2NrLnZhbHVlWzBdLmtpbmQuZW5kc1dpdGgoJ0NvbW1hbmQnKSB8fCBibG9jay52YWx1ZVswXS5raW5kID09PSAnRW52aXJvbm1lbnQnKSA/IGJsb2NrLnZhbHVlWzBdIDogbnVsbFxuICAgICAgICAgIGxldCBsZWFkaW5nY21kYmxvY2thcmcgPSBsZWFkaW5nY21kXG4gICAgICAgICAgICAmJiBsZWFkaW5nY21kLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCdcbiAgICAgICAgICAgICYmIGxlYWRpbmdjbWQuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aFxuICAgICAgICAgICAgJiYgbGVhZGluZ2NtZC5hcmd1bWVudHMucmVxdWlyZWRbMF0ua2luZCA9PT0gJ0Jsb2NrJ1xuICAgICAgICAgICAgJiYgbGVhZGluZ2NtZC5hcmd1bWVudHMucmVxdWlyZWRbMF1cblxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXRvcnF1ZXJlL3pvdGVyby1iZXR0ZXItYmlidGV4L2lzc3Vlcy81NDEjaXNzdWVjb21tZW50LTI0MDE1NjI3NFxuICAgICAgICAgIGlmIChsZWFkaW5nY21kKSB7XG4gICAgICAgICAgICBkZWxldGUgYmxvY2suY2FzZVxuXG4gICAgICAgICAgICAvLyBjb21tYW5kIHdpdGggYSBibG9jayBjYW5jZWxzIG91dCBjYXNlIHByb3RlY3Rpb24gd2l0aCBjb250YWluaW5nIGJsb2NrXG4gICAgICAgICAgICAvLyBpZiBhIHNtYWxsY2FwcyBibG9jayBoYXMgc2V0IGNhc2UgdG8gJ3ByZXNlcnZlJyB3ZSB3YW50IHRvIGtlZXAgdGhpc1xuICAgICAgICAgICAgaWYgKGxlYWRpbmdjbWRibG9ja2FyZyAmJiBsZWFkaW5nY21kYmxvY2thcmcuY2FzZSA9PT0gJ3Byb3RlY3QnKSBkZWxldGUgbGVhZGluZ2NtZGJsb2NrYXJnLmNhc2VcblxuICAgICAgICAgICAgLy8gXFxzbCwgXFxpdCBldGNcbiAgICAgICAgICAgIGlmIChtYXJrdXBbbGVhZGluZ2NtZC5jb21tYW5kXSkge1xuICAgICAgICAgICAgICBibG9jay5tYXJrdXBbbWFya3VwW2xlYWRpbmdjbWQuY29tbWFuZF1dID0gdHJ1ZVxuICAgICAgICAgICAgICBibG9jay52YWx1ZS5zaGlmdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZV9tYXJrdXBfc3dpdGNoZXMoYmxvY2spXG4gICAgICAgIH0sXG4gICAgICBwZWckYzg3ID0gZnVuY3Rpb24oKSB7IHJldHVybiAhbWF0aC5vbiB9LFxuICAgICAgcGVnJGM4OCA9IFwiJFwiLFxuICAgICAgcGVnJGM4OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTAgPSBcIiQkXCIsXG4gICAgICBwZWckYzkxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiQkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTIgPSBmdW5jdGlvbihtb2RlKSB7IHJldHVybiBtYXRoLnNldCh0cnVlKSB9LFxuICAgICAgcGVnJGM5MyA9IGZ1bmN0aW9uKG1vZGUsIHYpIHsgcmV0dXJuIG1hdGguc2V0KGZhbHNlKSB9LFxuICAgICAgcGVnJGM5NCA9IGZ1bmN0aW9uKG1vZGUsIHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogbW9kZSA9PSAnJCQnID8gJ0Rpc3BsYXlNYXRoJyA6ICdJbmxpbmVNYXRoJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjOTUgPSBcIiVcIixcbiAgICAgIHBlZyRjOTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSksXG4gICAgICBwZWckYzk3ID0gL15bXlxcclxcbl0vLFxuICAgICAgcGVnJGM5OCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcclwiLCBcIlxcblwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGM5OSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0xpbmVDb21tZW50JyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDAgPSAvXltfXFxeXS8sXG4gICAgICBwZWckYzEwMSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl9cIiwgXCJeXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDIgPSBmdW5jdGlvbihtb2RlLCB2KSB7XG4gICAgICAgICAgaWYgKHYua2luZCA9PT0gJ0Jsb2NrJykgdiA9IHYudmFsdWVcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiBtb2RlID09PSAnXycgPyAnU3Vic2NyaXB0Q29tbWFuZCcgOiAnU3VwZXJzY3JpcHRDb21tYW5kJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDMgPSBmdW5jdGlvbihtYXJrLCB2KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IG1hcmssXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogWyBwcm90ZWN0KHYpIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTA0ID0gL15bXkEtWmEtejAtOVxcdFxcclxcbl0vLFxuICAgICAgcGVnJGMxMDUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiQVwiLCBcIlpcIl0sIFtcImFcIiwgXCJ6XCJdLCBbXCIwXCIsIFwiOVwiXSwgXCJcXHRcIiwgXCJcXHJcIiwgXCJcXG5cIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTA2ID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnU3ltYm9sQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDcgPSBcIm5ld2NvbW1hbmRcIixcbiAgICAgIHBlZyRjMTA4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5ld2NvbW1hbmRcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDkgPSBmdW5jdGlvbihjbWQsIG5hbWUpIHsgcmV0dXJuIG5hbWUudmFsdWUubGVuZ3RoID09IDEgJiYgbmFtZS52YWx1ZVswXS5raW5kID09PSAnUmVndWxhckNvbW1hbmQnIH0sXG4gICAgICBwZWckYzExMCA9IGZ1bmN0aW9uKGNtZCwgbmFtZSwgb3B0aW9uYWwsIGRlZikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW25hbWUsIGRlZl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTExID0gXCJiZWdpblwiLFxuICAgICAgcGVnJGMxMTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiYmVnaW5cIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMTMgPSBcImVuZFwiLFxuICAgICAgcGVnJGMxMTQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW5kXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTE1ID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiB2ZXJiYXRpbUNvbW1hbmRzLmluY2x1ZGVzKGNtZCkgJiYgKGhhc19hcmd1bWVudHNbY21kXSA9PT0gMikgfSxcbiAgICAgIHBlZyRjMTE2ID0gZnVuY3Rpb24oY21kLCBvcHRpb25hbCwgcmVxMSwgcmVxMikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW3Byb3RlY3QocmVxMSksIHByb3RlY3QocmVxMildLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzExNyA9IGZ1bmN0aW9uKGNtZCkgeyByZXR1cm4gdmVyYmF0aW1Db21tYW5kcy5pbmNsdWRlcyhjbWQpICYmIChoYXNfYXJndW1lbnRzW2NtZF0gPT09IDEpIH0sXG4gICAgICBwZWckYzExOCA9IGZ1bmN0aW9uKGNtZCwgb3B0aW9uYWwsIHJlcSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW3Byb3RlY3QocmVxKV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTE5ID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiAoaGFzX2FyZ3VtZW50c1tjbWRdID09PSAyKSB9LFxuICAgICAgcGVnJGMxMjAgPSBmdW5jdGlvbihjbWQsIG9wdGlvbmFsLCByZXExLCByZXEyKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCxcbiAgICAgICAgICAgIGFyZ3VtZW50czoge1xuICAgICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbcmVxMSwgcmVxMl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTIxID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiAoaGFzX2FyZ3VtZW50c1tjbWRdID09PSAxKSB9LFxuICAgICAgcGVnJGMxMjIgPSBmdW5jdGlvbihjbWQsIG9wdGlvbmFsLCByZXEpIHtcbiAgICAgICAgICBsZXQgbVxuICAgICAgICAgIGlmIChyZXEua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgc3dpdGNoIChjbWQpIHtcbiAgICAgICAgICAgICAgY2FzZSAndGV4dHN1cGVyc2NyaXB0JzpcbiAgICAgICAgICAgICAgY2FzZSAnc3AnOlxuICAgICAgICAgICAgICAgIHJlcS5tYXJrdXAuc3VwID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3RleHRzdWJzY3JpcHQnOlxuICAgICAgICAgICAgICBjYXNlICdzYic6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5zdWIgPSB0cnVlXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAndGV4dHNjJzpcbiAgICAgICAgICAgICAgICByZXEubWFya3VwLnNtYWxsQ2FwcyA9IHRydWVcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdlbnF1b3RlJzpcbiAgICAgICAgICAgICAgY2FzZSAnbWtiaWJxdW90ZSc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5lbnF1b3RlID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3RleHRiZic6XG4gICAgICAgICAgICAgIGNhc2UgJ21rYmliYm9sZCc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5ib2xkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ2VtcGgnOlxuICAgICAgICAgICAgICBjYXNlICd0ZXh0aXQnOlxuICAgICAgICAgICAgICBjYXNlICdta2JpYml0YWxpYyc6XG4gICAgICAgICAgICAgIGNhc2UgJ21rYmliZW1waCc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5pdGFsaWNzID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKG0gPSBjbWQubWF0Y2goL14oKHN1YikqKXNlY3Rpb24kLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlcS5tYXJrdXBbYGgkeyhtWzFdLmxlbmd0aCAvIDMpICsgMX1gXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWdub3JlIGNhc2Ugc3R1ZmYgb24gYmliY3lyXG4gICAgICAgICAgaWYgKGNtZCA9PT0gJ2JpYmN5cicpIGRlbGV0ZSByZXEuY2FzZVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCxcbiAgICAgICAgICAgIGFyZ3VtZW50czoge1xuICAgICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbcmVxXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzEyMyA9IGZ1bmN0aW9uKGNtZCwgb3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1JlZ3VsYXJDb21tYW5kJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgY29tbWFuZDogY21kLFxuICAgICAgICAgICAgYXJndW1lbnRzOiB7XG4gICAgICAgICAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTI0ID0gXCJbXCIsXG4gICAgICBwZWckYzEyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTI2ID0gL15bXlxcXV0vLFxuICAgICAgcGVnJGMxMjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJdXCJdLCB0cnVlLCBmYWxzZSksXG4gICAgICBwZWckYzEyOCA9IFwiXVwiLFxuICAgICAgcGVnJGMxMjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSksXG4gICAgICBwZWckYzEzMCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLCAvLyB0aGlzIGlzbid0IHJlYWxseSBjb3JyZWN0IGJ1dCBJIGRvbid0IG5lZWQgdGhlc2UgcmlnaHQgbm93XG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgbW9kZTogbWF0aC5vbiA/ICdtYXRoJyA6ICd0ZXh0JyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMzEgPSAvXlteIFxcdFxcXl8ke31cXFxcXS8sXG4gICAgICBwZWckYzEzMiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIiBcIiwgXCJcXHRcIiwgXCJeXCIsIFwiX1wiLCBcIiRcIiwgXCJ7XCIsIFwifVwiLCBcIlxcXFxcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTMzID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh7XG4gICAgICAgICAgICBraW5kOiAnVGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKFt2XSksXG4gICAgICAgICAgICBtb2RlOiBtYXRoLm9uID8gJ21hdGgnIDogJ3RleHQnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzEzNCA9IC9eW2EtekEtWlxcLV9dLyxcbiAgICAgIHBlZyRjMTM1ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcImFcIiwgXCJ6XCJdLCBbXCJBXCIsIFwiWlwiXSwgXCItXCIsIFwiX1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTM2ID0gL15bYS16QS1aMC05XFwtJl86XS8sXG4gICAgICBwZWckYzEzNyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl0sIFtcIjBcIiwgXCI5XCJdLCBcIi1cIiwgXCImXCIsIFwiX1wiLCBcIjpcIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzEzOCA9IC9eWydgXCI9flxcXi5dLyxcbiAgICAgIHBlZyRjMTM5ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiJ1wiLCBcImBcIiwgXCJcXFwiXCIsIFwiPVwiLCBcIn5cIiwgXCJeXCIsIFwiLlwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQwID0gL15bJ2BcIj1+XFxeLmNidXZkckhrXS8sXG4gICAgICBwZWckYzE0MSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIidcIiwgXCJgXCIsIFwiXFxcIlwiLCBcIj1cIiwgXCJ+XCIsIFwiXlwiLCBcIi5cIiwgXCJjXCIsIFwiYlwiLCBcInVcIiwgXCJ2XCIsIFwiZFwiLCBcInJcIiwgXCJIXCIsIFwia1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQyID0gXCI9XCIsXG4gICAgICBwZWckYzE0MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ0ID0gXCIjXCIsXG4gICAgICBwZWckYzE0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIjXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ2ID0gL15bXFxyXFxuXS8sXG4gICAgICBwZWckYzE0NyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcclwiLCBcIlxcblwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ4ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJNYW5kYXRvcnkgSG9yaXpvbnRhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNDkgPSAvXlsgXFx0XS8sXG4gICAgICBwZWckYzE1MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIiBcIiwgXCJcXHRcIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzE1MSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiT3B0aW9uYWwgSG9yaXpvbnRhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNTIgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIk1hbmRhdG9yeSBWZXJ0aWNhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNTMgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIk9wdGlvbmFsIFZlcnRpY2FsIFdoaXRlc3BhY2VcIiksXG4gICAgICBwZWckYzE1NCA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiTWFuZGF0b3J5IFdoaXRlc3BhY2VcIiksXG4gICAgICBwZWckYzE1NSA9IC9eWyBcXHRcXG5cXHJdLyxcbiAgICAgIHBlZyRjMTU2ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTU3ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJPcHRpb25hbCBXaGl0ZXNwYWNlXCIpLFxuXG4gICAgICBwZWckY3VyclBvcyAgICAgICAgICA9IDAsXG4gICAgICBwZWckc2F2ZWRQb3MgICAgICAgICA9IDAsXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlICA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XSxcbiAgICAgIHBlZyRtYXhGYWlsUG9zICAgICAgID0gMCxcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgID0gW10sXG4gICAgICBwZWckc2lsZW50RmFpbHMgICAgICA9IDAsXG5cbiAgICAgIHBlZyRyZXN1bHQ7XG5cbiAgaWYgKFwic3RhcnRSdWxlXCIgaW4gb3B0aW9ucykge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhdGlvbigpIHtcbiAgICByZXR1cm4gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdGVkKGRlc2NyaXB0aW9uLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvblxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0LCBpZ25vcmVDYXNlKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImFueVwiIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZW5kRXhwZWN0YXRpb24oKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlbmRcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHBvcykge1xuICAgIHZhciBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdLCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogICBkZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZGV0YWlscy5jb2x1bW5cbiAgICAgIH07XG5cbiAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkge1xuICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcCsrO1xuICAgICAgfVxuXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7XG4gICAgdmFyIHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyksXG4gICAgICAgIGVuZFBvc0RldGFpbHMgICA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6ICAgc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBvZmZzZXQ6IGVuZFBvcyxcbiAgICAgICAgbGluZTogICBlbmRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZW5kUG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGZhaWwoZXhwZWN0ZWQpIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykgeyByZXR1cm47IH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIG51bGwsIG51bGwsIGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZCwgZm91bmQsIGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBwZWckU3ludGF4RXJyb3IoXG4gICAgICBwZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkLCBmb3VuZCksXG4gICAgICBleHBlY3RlZCxcbiAgICAgIGZvdW5kLFxuICAgICAgbG9jYXRpb25cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQmlibGlvZ3JhcGh5KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJHBhcnNlTm9kZSgpO1xuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZU5vZGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMwKHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDY0KSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfX2goKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpO1xuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjNShzNSk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjQpIHtcbiAgICAgICAgczEgPSBwZWckYzE7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzKSB7XG4gICAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNyk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aGlsZSAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNS5wdXNoKHM2KTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOSk7IH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMChzNSk7XG4gICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChwZWckYzExLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gW107XG4gICAgICAgICAgaWYgKHBlZyRjNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIGlmIChwZWckYzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gW3MyLCBzM107XG4gICAgICAgICAgICBzMSA9IHMyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgIGlmIChwZWckYzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgICBpZiAocGVnJGM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMyhzMSk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vZGUoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VDb21tZW50KCk7XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRwYXJzZVByZWFtYmxlRXhwcmVzc2lvbigpO1xuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlU3RyaW5nRGVjbGFyYXRpb24oKTtcbiAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczEgPSBwZWckcGFyc2VFbnRyeSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VCcmFjZWRDb21tZW50KCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyMShzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUVudHJ5KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSwgczEwLCBzMTEsIHMxMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2NCkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBbXTtcbiAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cmluZyhzMywgcGVnJGN1cnJQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMjQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRW50cnlJZCgpO1xuICAgICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczcgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VGaWVsZCgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkucHVzaChzMTApO1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZUZpZWxkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMjgoczMsIHM3LCBzOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVByZWFtYmxlRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMDtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2NCkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMyOSkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMjQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gW107XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIGlmIChzOCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczggPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczggPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM3LnB1c2goczgpO1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VNYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRjMjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzMShzNSwgczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU3RyaW5nRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczgsIHM5LCBzMTAsIHMxMSwgczEyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDY0KSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMyKSB7XG4gICAgICAgICAgczMgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzMyk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAocGVnJGMyNC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI1KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VWYXJpYWJsZU5hbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlRmllbGRTZXBhcmF0b3IoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5LnB1c2goczEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZVJlZ3VsYXJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzQoczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRW50cnlJZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9fKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBbXTtcbiAgICAgIGlmIChwZWckYzM1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzYpOyB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMucHVzaChzNCk7XG4gICAgICAgIGlmIChwZWckYzM1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzM2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBpbnB1dC5zdWJzdHJpbmcoczIsIHBlZyRjdXJyUG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gczM7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMzc7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMzkoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzODtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VGaWVsZE5hbWUoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczIgPSBwZWckYzQwKHMxKTtcbiAgICAgIGlmIChzMikge1xuICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUZpZWxkU2VwYXJhdG9yKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMTU7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckYzE1O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM1O1xuICAgICAgICAgICAgICBzNSA9IHZvaWQgMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzE5O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlRmllbGRUZXJtaW5hdG9yKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM0MShzMSwgczYpO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZUZpZWxkTmFtZSgpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMiA9IHBlZyRjNDIoczEpO1xuICAgICAgICBpZiAoczIpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpO1xuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBwZWckcGFyc2VWZXJiYXRpbUZpZWxkVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUZpZWxkVGVybWluYXRvcigpO1xuICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDMoczEsIHM0KTtcbiAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VGaWVsZE5hbWUoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIgPSBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpO1xuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VGaWVsZFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VGaWVsZFRlcm1pbmF0b3IoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzQ0KHMxLCBzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUZpZWxkTmFtZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9fKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBbXTtcbiAgICAgIGlmIChwZWckYzQ1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMucHVzaChzNCk7XG4gICAgICAgICAgaWYgKHBlZyRjNDUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ2KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gaW5wdXQuc3Vic3RyaW5nKHMyLCBwZWckY3VyclBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHMzO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNDcoczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgIHMxID0gcGVnJGM0ODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVRleHROb1F1b3RlcygpO1xuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgczMgPSBwZWckYzQ4O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNTAoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgczEgPSBwZWckYzE1O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbXTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VWZXJiYXRpbVRleHQoKTtcbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VWZXJiYXRpbVRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgczMgPSBwZWckYzE5O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzUxKHMyKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBzMiA9IFtdO1xuICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxOCk7IH1cbiAgICB9XG4gICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUyKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyMykge1xuICAgICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtdO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVZlcmJhdGltVGV4dCgpO1xuICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZVZlcmJhdGltVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTMoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFZhbHVlKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJHBhcnNlTnVtYmVyKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRjNTQoKTtcbiAgICAgIGlmIChzMSkge1xuICAgICAgICBzMSA9IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtdO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVJlZ3VsYXJWYWx1ZSgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZVN0cmluZ1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlU3RyaW5nVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzU1KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUmVndWxhclZhbHVlKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICBzMSA9IHBlZyRjNDg7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0Tm9RdW90ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0Tm9RdW90ZXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjNDg7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlQ29uY2F0KCk7XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTYoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTcpIHtcbiAgICAgICAgczEgPSBwZWckYzU3O1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgIGlmIChwZWckYzU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IFtdO1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb25jYXQoKTtcbiAgICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1MShzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgczEgPSBwZWckYzE1O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VDb25jYXQoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1NihzMik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHMxID0gcGVnJHBhcnNlU3RyaW5nUmVmZXJlbmNlKCk7XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUNvbmNhdCgpO1xuICAgICAgICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzU2KHMxKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTdHJpbmdWYWx1ZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VTdHJpbmdSZWZlcmVuY2UoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlQ29uY2F0KCk7XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTYoczEpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRleHQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gW107XG4gICAgaWYgKHBlZyRjNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYyKTsgfVxuICAgIH1cbiAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMS5wdXNoKHMyKTtcbiAgICAgICAgaWYgKHBlZyRjNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjIpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzYzKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRleHROb1F1b3RlcygpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjUpOyB9XG4gICAgfVxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2NSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjMoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTnVtYmVyKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBzMiA9IFtdO1xuICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzY4KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVN0cmluZ1JlZmVyZW5jZSgpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZVZhcmlhYmxlTmFtZSgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjkoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRW52aXJvbm1lbnQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczg7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpID09PSBwZWckYzcwKSB7XG4gICAgICBzMSA9IHBlZyRjNzA7XG4gICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgIHMzID0gW107XG4gICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICAgIGlmIChwZWckYzcyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3Myk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IGlucHV0LnN1YnN0cmluZyhzMiwgcGVnJGN1cnJQb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBzMztcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgIHMzID0gcGVnJGMxOTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBbXTtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVudmlyb25tZW50KCk7XG4gICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzc0KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM3NDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc1KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM3ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzcyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzOCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczcucHVzaChzOCk7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczYgPSBpbnB1dC5zdWJzdHJpbmcoczYsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHM3O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMTk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRjNzYoczIsIHM0LCBzNik7XG4gICAgICAgICAgICAgICAgICBpZiAoczgpIHtcbiAgICAgICAgICAgICAgICAgICAgczggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM3NyhzMiwgczQsIHM2KTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCbG9jaygpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzc4KSB7XG4gICAgICBzMSA9IHBlZyRjNzg7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VFeHRlbmRlZERpYWNyaXRpYygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjNzIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4MDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNl07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGMxOTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODQoczIsIHM0KTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTcpIHtcbiAgICAgICAgczEgPSBwZWckYzU3O1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgIGlmIChwZWckYzU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IFtdO1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGM4NShzMyk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gW107XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzg2KHMyKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNYXRoKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckYzg3KCk7XG4gICAgaWYgKHMxKSB7XG4gICAgICBzMSA9IHZvaWQgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzYpIHtcbiAgICAgICAgczIgPSBwZWckYzg4O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTApIHtcbiAgICAgICAgICBzMiA9IHBlZyRjOTA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMzID0gcGVnJGM5MihzMik7XG4gICAgICAgIGlmIChzMykge1xuICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtdO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0LnB1c2goczUpO1xuICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzYpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzg4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTApIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRjOTA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkxKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJGM5MyhzMiwgczQpO1xuICAgICAgICAgICAgICBpZiAoczYpIHtcbiAgICAgICAgICAgICAgICBzNiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzk0KHMyLCBzNCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxpbmVDb21tZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICBzMSA9IHBlZyRjOTU7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfX2goKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IFtdO1xuICAgICAgICBpZiAocGVnJGM5Ny50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OCk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0LnB1c2goczUpO1xuICAgICAgICAgICAgaWYgKHBlZyRjOTcudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyaW5nKHMzLCBwZWckY3VyclBvcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtdO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlRU9MKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlRU9MKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM5OShzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbW1hbmQoKSB7XG4gICAgdmFyIHMwO1xuXG4gICAgczAgPSBwZWckcGFyc2VTY3JpcHRDb21tYW5kKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRwYXJzZURpYWNyaXRpY0NvbW1hbmQoKTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRwYXJzZVJlZ3VsYXJDb21tYW5kKCk7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJHBhcnNlU3ltYm9sQ29tbWFuZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU2NyaXB0Q29tbWFuZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChwZWckYzEwMC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMDIoczEsIHMzKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRGlhY3JpdGljQ29tbWFuZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVNpbXBsZURpYWNyaXRpYygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjNzIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4MDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNl07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzg0KHMyLCBzNCk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRXh0ZW5kZWREaWFjcml0aWMoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJGMxNTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRjODA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczZdO1xuICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxOTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzg0KHMyLCBzNCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gcGVnJHBhcnNlRXh0ZW5kZWREaWFjcml0aWMoKTtcbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGMxNTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSB2b2lkIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEwMyhzMiwgczQpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTeW1ib2xDb21tYW5kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mikge1xuICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAocGVnJGMxMDQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBpbnB1dC5zdWJzdHJpbmcoczIsIHBlZyRjdXJyUG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gczM7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDYoczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVJlZ3VsYXJDb21tYW5kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSwgczEwO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICBzMSA9IHBlZyRjODA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApID09PSBwZWckYzEwNykge1xuICAgICAgICBzMiA9IHBlZyRjMTA3O1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEwOCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHM0ID0gcGVnJGMxMDkoczIsIHMzKTtcbiAgICAgICAgICBpZiAoczQpIHtcbiAgICAgICAgICAgIHM0ID0gdm9pZCAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZVJlcXVpcmVkQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzExMChzMiwgczMsIHM1LCBzNik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGMxMTEpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTExO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHZvaWQgMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gaW5wdXQuc3Vic3RyaW5nKHM0LCBwZWckY3VyclBvcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMTE1KHM0KTtcbiAgICAgICAgICAgICAgaWYgKHM1KSB7XG4gICAgICAgICAgICAgICAgczUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM2ID0gW107XG4gICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNi5wdXNoKHM3KTtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczggPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckYzE1O1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzODtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VWZXJiYXRpbUZpZWxkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExNihzNCwgczYsIHM5LCBzMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTExKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMTExO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExMik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKSA9PT0gcGVnJGMxMTMpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzExMztcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBpbnB1dC5zdWJzdHJpbmcoczQsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxMTcoczQpO1xuICAgICAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICAgICAgczUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJGMxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgczggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE4KHM0LCBzNiwgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGMxMTEpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExMik7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gdm9pZCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKSA9PT0gcGVnJGMxMTMpIHtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczQgPSBpbnB1dC5zdWJzdHJpbmcoczQsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxMTkoczQpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM1KSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNi5wdXNoKHM3KTtcbiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMjAoczQsIHM2LCBzOCwgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mikge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTExKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEyKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpID09PSBwZWckYzExMykge1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzExMztcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IGlucHV0LnN1YnN0cmluZyhzNCwgcGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzEyMShzNCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICAgICAgICAgIHM1ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlUmVxdWlyZWRBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTIyKHM0LCBzNiwgczgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzExMSkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczIgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJGMxMTM7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM0ID0gaW5wdXQuc3Vic3RyaW5nKHM0LCBwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMjMoczQsIHM1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkxKSB7XG4gICAgICBzMSA9IHBlZyRjMTI0O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gW107XG4gICAgICAgIGlmIChwZWckYzEyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjcpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIGlmIChwZWckYzEyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNyk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyaW5nKHMzLCBwZWckY3VyclBvcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mykge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMTI4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTI5KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTMwKHMzKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9faCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKHBlZyRjMTMxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMzKHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTIoczEpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYXJpYWJsZU5hbWUoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBpZiAocGVnJGMxMzQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzNSk7IH1cbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMyA9IFtdO1xuICAgICAgaWYgKHBlZyRjMTM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM3KTsgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICBpZiAocGVnJGMxMzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbczIsIHMzXTtcbiAgICAgICAgczEgPSBzMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczE7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IGlucHV0LnN1YnN0cmluZyhzMCwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVNpbXBsZURpYWNyaXRpYygpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxMzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzOSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VFeHRlbmRlZERpYWNyaXRpYygpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxNDAudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0MSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlX18oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgczIgPSBwZWckYzE0MjtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Myk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMxID0gW3MxLCBzMiwgczNdO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFRlcm1pbmF0b3IoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczU7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlX18oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgczIgPSBwZWckYzM3O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW107XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VMaW5lQ29tbWVudCgpO1xuICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBwZWckcGFyc2VFT0woKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVPTCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMxID0gW3MxLCBzMiwgczMsIHM0XTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29uY2F0KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNSkge1xuICAgICAgICBzMiA9IHBlZyRjMTQ0O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQ1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczEgPSBbczEsIHMyLCBzM107XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUVPTCgpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VfaCgpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNDkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE0OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDgpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlX19oKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE0OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUwKTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTQ5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUwKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTEpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlX3YoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTQ2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDcpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQ3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUyKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV9fdigpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE0Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUzKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV8oKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNTUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU0KTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV9fKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE1NS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTcpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cblxuICAgIC8qXG4gICAgICBNSVQgTGljZW5zZVxuXG4gICAgICBDb3B5cmlnaHQgKGMpIDIwMTcgRGVyZWsgUCBTaWZmb3JkLCBwYXJ0cyBjb3B5cmlnaHQgKGMpIDIwMTkgYnkgRW1pbGlhbm8gSGV5bnNcblxuICAgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICAgICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICAgICAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICAgICAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICAgICAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAgICAgIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gICAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICAgICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgICAgIFNPRlRXQVJFLlxuICAgICovXG5cbiAgICBjb25zdCBtYXJrdXAgPSB7XG4gICAgICBzbDogJ2l0YWxpY3MnLFxuICAgICAgZW06ICdpdGFsaWNzJyxcbiAgICAgIGl0OiAnaXRhbGljcycsXG4gICAgICBpdHNoYXBlOiAnaXRhbGljcycsXG5cbiAgICAgIGJmOiAnYm9sZCcsXG4gICAgICBiZnNlcmllczogJ2JvbGQnLFxuXG4gICAgICBzYzogJ3NtYWxsQ2FwcycsXG4gICAgICBzY3NoYXBlOiAnc21hbGxDYXBzJyxcblxuICAgICAgdHQ6ICdmaXhlZFdpZHRoJyxcbiAgICAgIHJtOiAncm9tYW4nLFxuICAgICAgc2Y6ICdzYW5zU2VyaWYnLFxuICAgICAgdmVyYjogJ3ZlcmJhdGltJyxcbiAgICB9XG5cbiAgICBjb25zdCB1bm5lc3RGaWVsZHMgPSAob3B0aW9ucy51bm5lc3RGaWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC50b0xvd2VyQ2FzZSgpKVxuICAgIGNvbnN0IHZlcmJhdGltRmllbGRzID0gKG9wdGlvbnMudmVyYmF0aW1GaWVsZHMgfHwgWyAndXJscmF3JywgJ3VybCcsICdkb2knLCAnZmlsZScsICdmaWxlcycsICdlcHJpbnQnLCAndmVyYmEnLCAndmVyYmInLCAndmVyYmMnIF0pLm1hcChmaWVsZCA9PiB0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnID8gZmllbGQudG9Mb3dlckNhc2UoKSA6IGZpZWxkKVxuICAgIGNvbnN0IHZlcmJhdGltQ29tbWFuZHMgPSAob3B0aW9ucy52ZXJiYXRpbUNvbW1hbmRzIHx8IFsndGV4dHR0JywgJ3VybCcsICdocmVmJ10pXG5cbiAgICBmdW5jdGlvbiBpc1ZlcmJhdGltRmllbGQobmFtZSkge1xuICAgICAgcmV0dXJuIHZlcmJhdGltRmllbGRzLmZpbmQocCA9PiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSA/IG5hbWUgPT09IHAgOiBuYW1lLm1hdGNoKHApKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVdoaXRlc3BhY2UodGV4dEFycikge1xuICAgICAgcmV0dXJuIHRleHRBcnIucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgIGlmICgvXFxzLy50ZXN0KGN1cnIpKSB7XG4gICAgICAgICAgaWYgKC9cXHMvLnRlc3QocHJldltwcmV2Lmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldiArIGN1cnI7XG4gICAgICB9LCAnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzX2FyZ3VtZW50cyA9IHtcbiAgICAgIEVsc2V2aWVyR2x5cGg6IDEsXG4gICAgICBlbmQ6IDEsXG4gICAgICBiZWdpbjogMSxcbiAgICAgIGJpYmN5cjogMSxcbiAgICAgIGJpYnN0cmluZzogMSxcbiAgICAgIGNoc2Y6IDEsXG4gICAgICBjaXRlOiAxLFxuICAgICAgY3lyY2hhcjogMSxcbiAgICAgIGRpbmc6IDEsXG4gICAgICBlbXBoOiAxLFxuICAgICAgZW5xdW90ZTogMSxcbiAgICAgIGZyYWM6IDIsXG4gICAgICBocmVmOiAyLFxuICAgICAgaHNwYWNlOiAxLFxuICAgICAgbWF0aHJtOiAxLFxuICAgICAgbWJveDogMSxcbiAgICAgIG1rYmliYm9sZDogMSxcbiAgICAgIG1rYmliZW1waDogMSxcbiAgICAgIG1rYmliaXRhbGljOiAxLFxuICAgICAgbWtiaWJxdW90ZTogMSxcbiAgICAgIG5ld2NvbW1hbmQ6IDIsXG4gICAgICBub29wc29ydDogMSxcbiAgICAgIG9jaXJjOiAxLFxuICAgICAgc2VjdGlvbjogMSxcbiAgICAgIHNiOiAxLFxuICAgICAgc3A6IDEsXG4gICAgICBzdWJzZWN0aW9uOiAxLFxuICAgICAgc3Vic3Vic2VjdGlvbjogMSxcbiAgICAgIHN1YnN1YnN1YnNlY3Rpb246IDEsXG4gICAgICB0OiAxLFxuICAgICAgdGV4dGJmOiAxLFxuICAgICAgdGV4dGl0OiAxLFxuICAgICAgdGV4dHJtOiAxLFxuICAgICAgdGV4dHNjOiAxLFxuICAgICAgdGV4dHN1YnNjcmlwdDogMSxcbiAgICAgIHRleHRzdXBlcnNjcmlwdDogMSxcbiAgICAgIHRleHR0dDogMSxcbiAgICAgIHVybDogMSxcbiAgICAgIHZwaGFudG9tOiAxLFxuICAgICAgdnNwYWNlOiAxLFxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNvbWJpbmluZ0RpYWNyaXRpY3MpIHtcbiAgICAgIGZvciAoY29uc3QgY21kIG9mIG9wdGlvbnMuY29tYmluaW5nRGlhY3JpdGljcykge1xuICAgICAgICBoYXNfYXJndW1lbnRzW2NtZF0gPSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F5KCkge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShhcmd1bWVudHMpLCBudWxsLCAyKSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGVlayhuKSB7XG4gICAgICByZXR1cm4gaW5wdXQuc3Vic3RyKHBlZyRzYXZlZFBvcywgbilcbiAgICB9XG5cbiAgICBjb25zdCBtYXRoID0ge1xuICAgICAgb246IGZhbHNlLFxuXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHRoaXMub24gPSBzdGF0ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhc2ljVGV4dENvbnZlcnNpb25zKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmtpbmQgIT09ICdUZXh0JykgdGhyb3cgbmV3IEVycm9yKG5vZGUua2luZCArICcgaXMgbm90IGEgVGV4dCBub2RlJylcblxuICAgICAgc3dpdGNoIChub2RlLm1vZGUpIHtcbiAgICAgICAgY2FzZSAndmVyYmF0aW0nOlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnbWF0aCc6XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVwbGFjZSgvfi9nLCAnXFx1MDBBMCcpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZVxuICAgICAgICAgICAgLnJlcGxhY2UoLy0tLS9nLCAnXFx1MjAxNCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvLS0vZywgJ1xcdTIwMTMnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJ1xcdTAwQTEnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJ1xcdTAwQkYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL34vZywgJ1xcdTAwQTAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2BgL2csIG9wdGlvbnMubWFya3VwLmVucXVvdGUub3BlbilcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nJy9nLCBvcHRpb25zLm1hcmt1cC5lbnF1b3RlLmNsb3NlKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdGV4dCBtb2RlICR7bm9kZS5tb2RlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvdGVjdCh2KSB7XG4gICAgICBsZXQgc291cmNlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICBzb3VyY2UgPSB2Lm1hcChlID0+IGUuc291cmNlKS5qb2luKCcnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IFsgdiBdXG4gICAgICAgIHNvdXJjZSA9IHYuc291cmNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZV9tYXJrdXBfc3dpdGNoZXMoYmxvY2spIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYmxvY2sudmFsdWVcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBibG9ja1xuXG4gICAgICBibG9jay52YWx1ZSA9IFtdXG5cbiAgICAgIGNvbnN0IHBzZXVkbyA9IHtcbiAgICAgICAgYmxvY2s6IG51bGwsXG4gICAgICAgIG1hcmt1cDoge30sXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwc2V1ZG9fYmxvY2soKSB7XG4gICAgICAgIHBzZXVkby5ibG9jayA9IHtcbiAgICAgICAgICBraW5kOiAnQmxvY2snLFxuICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICBzb3VyY2U6ICcnLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBtYXJrdXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHNldWRvLm1hcmt1cCkpLFxuICAgICAgICAgIHBzZXVkbzogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgICBibG9jay52YWx1ZS5wdXNoKHBzZXVkby5ibG9jaylcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB2YWx1ZSkge1xuICAgICAgICBpZiAobm9kZS5raW5kID09PSAnRW52aXJvbm1lbnQnIHx8IG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgIGJsb2NrLnZhbHVlLnB1c2gobm9kZSlcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwc2V1ZG8ubWFya3VwKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBzZXVkb19ibG9jaygpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBzZXVkby5ibG9jayA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCcgJiYgbWFya3VwW25vZGUuY29tbWFuZF0pIHtcbiAgICAgICAgICBpZiAocHNldWRvLm1hcmt1cC5pdGFsaWNzKSB7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaXRhdGlvbi1qcy9iaWJ0ZXgtcGFyc2VyLWV4cGVyaW1lbnRzL2NvbW1pdC9jYWU0NzVmMDc1YTA1ZDFjMDc0NDg1YTA2MWIwOGVkMjQ1MTcwYzdlXG4gICAgICAgICAgICBkZWxldGUgcHNldWRvLm1hcmt1cC5pdGFsaWNzXG4gICAgICAgICAgICBpZiAobWFya3VwW25vZGUuY29tbWFuZF0gIT09ICdpdGFsaWNzJykgcHNldWRvLm1hcmt1cFttYXJrdXBbbm9kZS5jb21tYW5kXV0gPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBzZXVkby5tYXJrdXBbbWFya3VwW25vZGUuY29tbWFuZF1dID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwc2V1ZG8ubWFya3VwKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBzZXVkb19ibG9jaygpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBwc2V1ZG8uYmxvY2sgPSBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBzZXVkby5ibG9jaykge1xuICAgICAgICAgIHBzZXVkby5ibG9jay5zb3VyY2UgKz0gbm9kZS5zb3VyY2VcbiAgICAgICAgICBwc2V1ZG8uYmxvY2sudmFsdWUucHVzaChub2RlKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmxvY2sudmFsdWUucHVzaChub2RlKVxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYmxvY2sudmFsdWUgPSBibG9jay52YWx1ZS5maWx0ZXIobm9kZSA9PiAhKG5vZGUucHNldWRvICYmIG5vZGUudmFsdWUubGVuZ3RoID09PSAwKSlcblxuICAgICAgcmV0dXJuIGJsb2NrXG4gICAgfVxuXG5cbiAgcGVnJHJlc3VsdCA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbigpO1xuXG4gIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVnJHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpO1xuICAgIH1cblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IGlucHV0LmNoYXJBdChwZWckbWF4RmFpbFBvcykgOiBudWxsLFxuICAgICAgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGhcbiAgICAgICAgPyBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcyArIDEpXG4gICAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MpXG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU3ludGF4RXJyb3I6IHBlZyRTeW50YXhFcnJvcixcbiAgcGFyc2U6ICAgICAgIHBlZyRwYXJzZVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gT3JpZ2luYWwgd29yayBieSBIZW5yaWsgTXVlaGUgKGMpIDIwMTBcbi8vXG4vLyBDb21tb25KUyBwb3J0IGJ5IE1pa29sYSBMeXNlbmtvIDIwMTNcbi8vXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuY2xhc3MgUGFyc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBwYXJzZXIpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIEAgJHtwYXJzZXIucG9zfWA7XG4gICAgICAgIGlmIChwYXJzZXIucGFyc2luZylcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCBpbiAke0pTT04uc3RyaW5naWZ5KHBhcnNlci5wYXJzaW5nKX1gO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1BhcnNlRXJyb3InO1xuICAgIH1cbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGVtcGxhdGVcbmNvbnN0IGxldHRlciA9IG5ldyBSZWdFeHAoJ1snICsgW1xuICAgIC8vIExldHRlciwgVXBwZXJjYXNlXG4gICAgL1xcdTAwNDEtXFx1MDA1QVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBERVxcdTAxMDBcXHUwMTAyXFx1MDEwNFxcdTAxMDZcXHUwMTA4XFx1MDEwQVxcdTAxMENcXHUwMTBFXFx1MDExMFxcdTAxMTJcXHUwMTE0XFx1MDExNlxcdTAxMThcXHUwMTFBXFx1MDExQ1xcdTAxMUVcXHUwMTIwXFx1MDEyMlxcdTAxMjRcXHUwMTI2XFx1MDEyOFxcdTAxMkFcXHUwMTJDXFx1MDEyRVxcdTAxMzBcXHUwMTMyXFx1MDEzNFxcdTAxMzZcXHUwMTM5XFx1MDEzQlxcdTAxM0RcXHUwMTNGXFx1MDE0MVxcdTAxNDNcXHUwMTQ1XFx1MDE0N1xcdTAxNEFcXHUwMTRDXFx1MDE0RVxcdTAxNTBcXHUwMTUyXFx1MDE1NFxcdTAxNTZcXHUwMTU4XFx1MDE1QVxcdTAxNUNcXHUwMTVFXFx1MDE2MFxcdTAxNjJcXHUwMTY0XFx1MDE2NlxcdTAxNjhcXHUwMTZBXFx1MDE2Q1xcdTAxNkVcXHUwMTcwXFx1MDE3MlxcdTAxNzRcXHUwMTc2XFx1MDE3OC1cXHUwMTc5XFx1MDE3QlxcdTAxN0RcXHUwMTgxLVxcdTAxODJcXHUwMTg0XFx1MDE4Ni1cXHUwMTg3XFx1MDE4OS1cXHUwMThCXFx1MDE4RS1cXHUwMTkxXFx1MDE5My1cXHUwMTk0XFx1MDE5Ni1cXHUwMTk4XFx1MDE5Qy1cXHUwMTlEXFx1MDE5Ri1cXHUwMUEwXFx1MDFBMlxcdTAxQTRcXHUwMUE2LVxcdTAxQTdcXHUwMUE5XFx1MDFBQ1xcdTAxQUUtXFx1MDFBRlxcdTAxQjEtXFx1MDFCM1xcdTAxQjVcXHUwMUI3LVxcdTAxQjhcXHUwMUJDXFx1MDFDNFxcdTAxQzdcXHUwMUNBXFx1MDFDRFxcdTAxQ0ZcXHUwMUQxXFx1MDFEM1xcdTAxRDVcXHUwMUQ3XFx1MDFEOVxcdTAxREJcXHUwMURFXFx1MDFFMFxcdTAxRTJcXHUwMUU0XFx1MDFFNlxcdTAxRThcXHUwMUVBXFx1MDFFQ1xcdTAxRUVcXHUwMUYxXFx1MDFGNFxcdTAxRjYtXFx1MDFGOFxcdTAxRkFcXHUwMUZDXFx1MDFGRVxcdTAyMDBcXHUwMjAyXFx1MDIwNFxcdTAyMDZcXHUwMjA4XFx1MDIwQVxcdTAyMENcXHUwMjBFXFx1MDIxMFxcdTAyMTJcXHUwMjE0XFx1MDIxNlxcdTAyMThcXHUwMjFBXFx1MDIxQ1xcdTAyMUVcXHUwMjIwXFx1MDIyMlxcdTAyMjRcXHUwMjI2XFx1MDIyOFxcdTAyMkFcXHUwMjJDXFx1MDIyRVxcdTAyMzBcXHUwMjMyXFx1MDIzQS1cXHUwMjNCXFx1MDIzRC1cXHUwMjNFXFx1MDI0MVxcdTAyNDMtXFx1MDI0NlxcdTAyNDhcXHUwMjRBXFx1MDI0Q1xcdTAyNEVcXHUwMzcwXFx1MDM3MlxcdTAzNzZcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzOEZcXHUwMzkxLVxcdTAzQTFcXHUwM0EzLVxcdTAzQUJcXHUwM0NGXFx1MDNEMi1cXHUwM0Q0XFx1MDNEOFxcdTAzREFcXHUwM0RDXFx1MDNERVxcdTAzRTBcXHUwM0UyXFx1MDNFNFxcdTAzRTZcXHUwM0U4XFx1MDNFQVxcdTAzRUNcXHUwM0VFXFx1MDNGNFxcdTAzRjdcXHUwM0Y5LVxcdTAzRkFcXHUwM0ZELVxcdTA0MkZcXHUwNDYwXFx1MDQ2MlxcdTA0NjRcXHUwNDY2XFx1MDQ2OFxcdTA0NkFcXHUwNDZDXFx1MDQ2RVxcdTA0NzBcXHUwNDcyXFx1MDQ3NFxcdTA0NzZcXHUwNDc4XFx1MDQ3QVxcdTA0N0NcXHUwNDdFXFx1MDQ4MFxcdTA0OEFcXHUwNDhDXFx1MDQ4RVxcdTA0OTBcXHUwNDkyXFx1MDQ5NFxcdTA0OTZcXHUwNDk4XFx1MDQ5QVxcdTA0OUNcXHUwNDlFXFx1MDRBMFxcdTA0QTJcXHUwNEE0XFx1MDRBNlxcdTA0QThcXHUwNEFBXFx1MDRBQ1xcdTA0QUVcXHUwNEIwXFx1MDRCMlxcdTA0QjRcXHUwNEI2XFx1MDRCOFxcdTA0QkFcXHUwNEJDXFx1MDRCRVxcdTA0QzAtXFx1MDRDMVxcdTA0QzNcXHUwNEM1XFx1MDRDN1xcdTA0QzlcXHUwNENCXFx1MDRDRFxcdTA0RDBcXHUwNEQyXFx1MDRENFxcdTA0RDZcXHUwNEQ4XFx1MDREQVxcdTA0RENcXHUwNERFXFx1MDRFMFxcdTA0RTJcXHUwNEU0XFx1MDRFNlxcdTA0RThcXHUwNEVBXFx1MDRFQ1xcdTA0RUVcXHUwNEYwXFx1MDRGMlxcdTA0RjRcXHUwNEY2XFx1MDRGOFxcdTA0RkFcXHUwNEZDXFx1MDRGRVxcdTA1MDBcXHUwNTAyXFx1MDUwNFxcdTA1MDZcXHUwNTA4XFx1MDUwQVxcdTA1MENcXHUwNTBFXFx1MDUxMFxcdTA1MTJcXHUwNTE0XFx1MDUxNlxcdTA1MThcXHUwNTFBXFx1MDUxQ1xcdTA1MUVcXHUwNTIwXFx1MDUyMlxcdTA1MjRcXHUwNTI2XFx1MDUyOFxcdTA1MkFcXHUwNTJDXFx1MDUyRVxcdTA1MzEtXFx1MDU1NlxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTNBMC1cXHUxM0Y1XFx1MUUwMFxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTFFMDhcXHUxRTBBXFx1MUUwQ1xcdTFFMEVcXHUxRTEwXFx1MUUxMlxcdTFFMTRcXHUxRTE2XFx1MUUxOFxcdTFFMUFcXHUxRTFDXFx1MUUxRVxcdTFFMjBcXHUxRTIyXFx1MUUyNFxcdTFFMjZcXHUxRTI4XFx1MUUyQVxcdTFFMkNcXHUxRTJFXFx1MUUzMFxcdTFFMzJcXHUxRTM0XFx1MUUzNlxcdTFFMzhcXHUxRTNBXFx1MUUzQ1xcdTFFM0VcXHUxRTQwXFx1MUU0MlxcdTFFNDRcXHUxRTQ2XFx1MUU0OFxcdTFFNEFcXHUxRTRDXFx1MUU0RVxcdTFFNTBcXHUxRTUyXFx1MUU1NFxcdTFFNTZcXHUxRTU4XFx1MUU1QVxcdTFFNUNcXHUxRTVFXFx1MUU2MFxcdTFFNjJcXHUxRTY0XFx1MUU2NlxcdTFFNjhcXHUxRTZBXFx1MUU2Q1xcdTFFNkVcXHUxRTcwXFx1MUU3MlxcdTFFNzRcXHUxRTc2XFx1MUU3OFxcdTFFN0FcXHUxRTdDXFx1MUU3RVxcdTFFODBcXHUxRTgyXFx1MUU4NFxcdTFFODZcXHUxRTg4XFx1MUU4QVxcdTFFOENcXHUxRThFXFx1MUU5MFxcdTFFOTJcXHUxRTk0XFx1MUU5RVxcdTFFQTBcXHUxRUEyXFx1MUVBNFxcdTFFQTZcXHUxRUE4XFx1MUVBQVxcdTFFQUNcXHUxRUFFXFx1MUVCMFxcdTFFQjJcXHUxRUI0XFx1MUVCNlxcdTFFQjhcXHUxRUJBXFx1MUVCQ1xcdTFFQkVcXHUxRUMwXFx1MUVDMlxcdTFFQzRcXHUxRUM2XFx1MUVDOFxcdTFFQ0FcXHUxRUNDXFx1MUVDRVxcdTFFRDBcXHUxRUQyXFx1MUVENFxcdTFFRDZcXHUxRUQ4XFx1MUVEQVxcdTFFRENcXHUxRURFXFx1MUVFMFxcdTFFRTJcXHUxRUU0XFx1MUVFNlxcdTFFRThcXHUxRUVBXFx1MUVFQ1xcdTFFRUVcXHUxRUYwXFx1MUVGMlxcdTFFRjRcXHUxRUY2XFx1MUVGOFxcdTFFRkFcXHUxRUZDXFx1MUVGRVxcdTFGMDgtXFx1MUYwRlxcdTFGMTgtXFx1MUYxRFxcdTFGMjgtXFx1MUYyRlxcdTFGMzgtXFx1MUYzRlxcdTFGNDgtXFx1MUY0RFxcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUZcXHUxRjY4LVxcdTFGNkZcXHUxRkI4LVxcdTFGQkJcXHUxRkM4LVxcdTFGQ0JcXHUxRkQ4LVxcdTFGREJcXHUxRkU4LVxcdTFGRUNcXHUxRkY4LVxcdTFGRkJcXHUyMTAyXFx1MjEwN1xcdTIxMEItXFx1MjEwRFxcdTIxMTAtXFx1MjExMlxcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTMwLVxcdTIxMzNcXHUyMTNFLVxcdTIxM0ZcXHUyMTQ1XFx1MjE4M1xcdTJDMDAtXFx1MkMyRVxcdTJDNjBcXHUyQzYyLVxcdTJDNjRcXHUyQzY3XFx1MkM2OVxcdTJDNkJcXHUyQzZELVxcdTJDNzBcXHUyQzcyXFx1MkM3NVxcdTJDN0UtXFx1MkM4MFxcdTJDODJcXHUyQzg0XFx1MkM4NlxcdTJDODhcXHUyQzhBXFx1MkM4Q1xcdTJDOEVcXHUyQzkwXFx1MkM5MlxcdTJDOTRcXHUyQzk2XFx1MkM5OFxcdTJDOUFcXHUyQzlDXFx1MkM5RVxcdTJDQTBcXHUyQ0EyXFx1MkNBNFxcdTJDQTZcXHUyQ0E4XFx1MkNBQVxcdTJDQUNcXHUyQ0FFXFx1MkNCMFxcdTJDQjJcXHUyQ0I0XFx1MkNCNlxcdTJDQjhcXHUyQ0JBXFx1MkNCQ1xcdTJDQkVcXHUyQ0MwXFx1MkNDMlxcdTJDQzRcXHUyQ0M2XFx1MkNDOFxcdTJDQ0FcXHUyQ0NDXFx1MkNDRVxcdTJDRDBcXHUyQ0QyXFx1MkNENFxcdTJDRDZcXHUyQ0Q4XFx1MkNEQVxcdTJDRENcXHUyQ0RFXFx1MkNFMFxcdTJDRTJcXHUyQ0VCXFx1MkNFRFxcdTJDRjJcXHVBNjQwXFx1QTY0MlxcdUE2NDRcXHVBNjQ2XFx1QTY0OFxcdUE2NEFcXHVBNjRDXFx1QTY0RVxcdUE2NTBcXHVBNjUyXFx1QTY1NFxcdUE2NTZcXHVBNjU4XFx1QTY1QVxcdUE2NUNcXHVBNjVFXFx1QTY2MFxcdUE2NjJcXHVBNjY0XFx1QTY2NlxcdUE2NjhcXHVBNjZBXFx1QTY2Q1xcdUE2ODBcXHVBNjgyXFx1QTY4NFxcdUE2ODZcXHVBNjg4XFx1QTY4QVxcdUE2OENcXHVBNjhFXFx1QTY5MFxcdUE2OTJcXHVBNjk0XFx1QTY5NlxcdUE2OThcXHVBNjlBXFx1QTcyMlxcdUE3MjRcXHVBNzI2XFx1QTcyOFxcdUE3MkFcXHVBNzJDXFx1QTcyRVxcdUE3MzJcXHVBNzM0XFx1QTczNlxcdUE3MzhcXHVBNzNBXFx1QTczQ1xcdUE3M0VcXHVBNzQwXFx1QTc0MlxcdUE3NDRcXHVBNzQ2XFx1QTc0OFxcdUE3NEFcXHVBNzRDXFx1QTc0RVxcdUE3NTBcXHVBNzUyXFx1QTc1NFxcdUE3NTZcXHVBNzU4XFx1QTc1QVxcdUE3NUNcXHVBNzVFXFx1QTc2MFxcdUE3NjJcXHVBNzY0XFx1QTc2NlxcdUE3NjhcXHVBNzZBXFx1QTc2Q1xcdUE3NkVcXHVBNzc5XFx1QTc3QlxcdUE3N0QtXFx1QTc3RVxcdUE3ODBcXHVBNzgyXFx1QTc4NFxcdUE3ODZcXHVBNzhCXFx1QTc4RFxcdUE3OTBcXHVBNzkyXFx1QTc5NlxcdUE3OThcXHVBNzlBXFx1QTc5Q1xcdUE3OUVcXHVBN0EwXFx1QTdBMlxcdUE3QTRcXHVBN0E2XFx1QTdBOFxcdUE3QUEtXFx1QTdBRFxcdUE3QjAtXFx1QTdCNFxcdUE3QjZcXHVGRjIxLVxcdUZGM0EvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIFRpdGxlY2FzZVxuICAgIC9cXHUwMUM1XFx1MDFDOFxcdTAxQ0JcXHUwMUYyXFx1MUY4OC1cXHUxRjhGXFx1MUY5OC1cXHUxRjlGXFx1MUZBOC1cXHUxRkFGXFx1MUZCQ1xcdTFGQ0NcXHUxRkZDLy5zb3VyY2UsXG4gICAgLy8gTGV0dGVyLCBMb3dlcmNhc2VcbiAgICAvXFx1MDA2MS1cXHUwMDdBXFx1MDBCNVxcdTAwREYtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzctXFx1MDEzOFxcdTAxM0FcXHUwMTNDXFx1MDEzRVxcdTAxNDBcXHUwMTQyXFx1MDE0NFxcdTAxNDZcXHUwMTQ4LVxcdTAxNDlcXHUwMTRCXFx1MDE0RFxcdTAxNEZcXHUwMTUxXFx1MDE1M1xcdTAxNTVcXHUwMTU3XFx1MDE1OVxcdTAxNUJcXHUwMTVEXFx1MDE1RlxcdTAxNjFcXHUwMTYzXFx1MDE2NVxcdTAxNjdcXHUwMTY5XFx1MDE2QlxcdTAxNkRcXHUwMTZGXFx1MDE3MVxcdTAxNzNcXHUwMTc1XFx1MDE3N1xcdTAxN0FcXHUwMTdDXFx1MDE3RS1cXHUwMTgwXFx1MDE4M1xcdTAxODVcXHUwMTg4XFx1MDE4Qy1cXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUEtXFx1MDFBQlxcdTAxQURcXHUwMUIwXFx1MDFCNFxcdTAxQjZcXHUwMUI5LVxcdTAxQkFcXHUwMUJELVxcdTAxQkZcXHUwMUM2XFx1MDFDOVxcdTAxQ0NcXHUwMUNFXFx1MDFEMFxcdTAxRDJcXHUwMUQ0XFx1MDFENlxcdTAxRDhcXHUwMURBXFx1MDFEQy1cXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGLVxcdTAxRjBcXHUwMUYzXFx1MDFGNVxcdTAxRjlcXHUwMUZCXFx1MDFGRFxcdTAxRkZcXHUwMjAxXFx1MDIwM1xcdTAyMDVcXHUwMjA3XFx1MDIwOVxcdTAyMEJcXHUwMjBEXFx1MDIwRlxcdTAyMTFcXHUwMjEzXFx1MDIxNVxcdTAyMTdcXHUwMjE5XFx1MDIxQlxcdTAyMURcXHUwMjFGXFx1MDIyMVxcdTAyMjNcXHUwMjI1XFx1MDIyN1xcdTAyMjlcXHUwMjJCXFx1MDIyRFxcdTAyMkZcXHUwMjMxXFx1MDIzMy1cXHUwMjM5XFx1MDIzQ1xcdTAyM0YtXFx1MDI0MFxcdTAyNDJcXHUwMjQ3XFx1MDI0OVxcdTAyNEJcXHUwMjREXFx1MDI0Ri1cXHUwMjkzXFx1MDI5NS1cXHUwMkFGXFx1MDM3MVxcdTAzNzNcXHUwMzc3XFx1MDM3Qi1cXHUwMzdEXFx1MDM5MFxcdTAzQUMtXFx1MDNDRVxcdTAzRDAtXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCLVxcdTAzRkNcXHUwNDMwLVxcdTA0NUZcXHUwNDYxXFx1MDQ2M1xcdTA0NjVcXHUwNDY3XFx1MDQ2OVxcdTA0NkJcXHUwNDZEXFx1MDQ2RlxcdTA0NzFcXHUwNDczXFx1MDQ3NVxcdTA0NzdcXHUwNDc5XFx1MDQ3QlxcdTA0N0RcXHUwNDdGXFx1MDQ4MVxcdTA0OEJcXHUwNDhEXFx1MDQ4RlxcdTA0OTFcXHUwNDkzXFx1MDQ5NVxcdTA0OTdcXHUwNDk5XFx1MDQ5QlxcdTA0OURcXHUwNDlGXFx1MDRBMVxcdTA0QTNcXHUwNEE1XFx1MDRBN1xcdTA0QTlcXHUwNEFCXFx1MDRBRFxcdTA0QUZcXHUwNEIxXFx1MDRCM1xcdTA0QjVcXHUwNEI3XFx1MDRCOVxcdTA0QkJcXHUwNEJEXFx1MDRCRlxcdTA0QzJcXHUwNEM0XFx1MDRDNlxcdTA0QzhcXHUwNENBXFx1MDRDQ1xcdTA0Q0UtXFx1MDRDRlxcdTA0RDFcXHUwNEQzXFx1MDRENVxcdTA0RDdcXHUwNEQ5XFx1MDREQlxcdTA0RERcXHUwNERGXFx1MDRFMVxcdTA0RTNcXHUwNEU1XFx1MDRFN1xcdTA0RTlcXHUwNEVCXFx1MDRFRFxcdTA0RUZcXHUwNEYxXFx1MDRGM1xcdTA0RjVcXHUwNEY3XFx1MDRGOVxcdTA0RkJcXHUwNEZEXFx1MDRGRlxcdTA1MDFcXHUwNTAzXFx1MDUwNVxcdTA1MDdcXHUwNTA5XFx1MDUwQlxcdTA1MERcXHUwNTBGXFx1MDUxMVxcdTA1MTNcXHUwNTE1XFx1MDUxN1xcdTA1MTlcXHUwNTFCXFx1MDUxRFxcdTA1MUZcXHUwNTIxXFx1MDUyM1xcdTA1MjVcXHUwNTI3XFx1MDUyOVxcdTA1MkJcXHUwNTJEXFx1MDUyRlxcdTA1NjEtXFx1MDU4N1xcdTEzRjgtXFx1MTNGRFxcdTFEMDAtXFx1MUQyQlxcdTFENkItXFx1MUQ3N1xcdTFENzktXFx1MUQ5QVxcdTFFMDFcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUxRTA5XFx1MUUwQlxcdTFFMERcXHUxRTBGXFx1MUUxMVxcdTFFMTNcXHUxRTE1XFx1MUUxN1xcdTFFMTlcXHUxRTFCXFx1MUUxRFxcdTFFMUZcXHUxRTIxXFx1MUUyM1xcdTFFMjVcXHUxRTI3XFx1MUUyOVxcdTFFMkJcXHUxRTJEXFx1MUUyRlxcdTFFMzFcXHUxRTMzXFx1MUUzNVxcdTFFMzdcXHUxRTM5XFx1MUUzQlxcdTFFM0RcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUxRTQ1XFx1MUU0N1xcdTFFNDlcXHUxRTRCXFx1MUU0RFxcdTFFNEZcXHUxRTUxXFx1MUU1M1xcdTFFNTVcXHUxRTU3XFx1MUU1OVxcdTFFNUJcXHUxRTVEXFx1MUU1RlxcdTFFNjFcXHUxRTYzXFx1MUU2NVxcdTFFNjdcXHUxRTY5XFx1MUU2QlxcdTFFNkRcXHUxRTZGXFx1MUU3MVxcdTFFNzNcXHUxRTc1XFx1MUU3N1xcdTFFNzlcXHUxRTdCXFx1MUU3RFxcdTFFN0ZcXHUxRTgxXFx1MUU4M1xcdTFFODVcXHUxRTg3XFx1MUU4OVxcdTFFOEJcXHUxRThEXFx1MUU4RlxcdTFFOTFcXHUxRTkzXFx1MUU5NS1cXHUxRTlEXFx1MUU5RlxcdTFFQTFcXHUxRUEzXFx1MUVBNVxcdTFFQTdcXHUxRUE5XFx1MUVBQlxcdTFFQURcXHUxRUFGXFx1MUVCMVxcdTFFQjNcXHUxRUI1XFx1MUVCN1xcdTFFQjlcXHUxRUJCXFx1MUVCRFxcdTFFQkZcXHUxRUMxXFx1MUVDM1xcdTFFQzVcXHUxRUM3XFx1MUVDOVxcdTFFQ0JcXHUxRUNEXFx1MUVDRlxcdTFFRDFcXHUxRUQzXFx1MUVENVxcdTFFRDdcXHUxRUQ5XFx1MUVEQlxcdTFFRERcXHUxRURGXFx1MUVFMVxcdTFFRTNcXHUxRUU1XFx1MUVFN1xcdTFFRTlcXHUxRUVCXFx1MUVFRFxcdTFFRUZcXHUxRUYxXFx1MUVGM1xcdTFFRjVcXHUxRUY3XFx1MUVGOVxcdTFFRkJcXHUxRUZEXFx1MUVGRi1cXHUxRjA3XFx1MUYxMC1cXHUxRjE1XFx1MUYyMC1cXHUxRjI3XFx1MUYzMC1cXHUxRjM3XFx1MUY0MC1cXHUxRjQ1XFx1MUY1MC1cXHUxRjU3XFx1MUY2MC1cXHUxRjY3XFx1MUY3MC1cXHUxRjdEXFx1MUY4MC1cXHUxRjg3XFx1MUY5MC1cXHUxRjk3XFx1MUZBMC1cXHUxRkE3XFx1MUZCMC1cXHUxRkI0XFx1MUZCNi1cXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDN1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEN1xcdTFGRTAtXFx1MUZFN1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGN1xcdTIxMEFcXHUyMTBFLVxcdTIxMEZcXHUyMTEzXFx1MjEyRlxcdTIxMzRcXHUyMTM5XFx1MjEzQy1cXHUyMTNEXFx1MjE0Ni1cXHUyMTQ5XFx1MjE0RVxcdTIxODRcXHUyQzMwLVxcdTJDNUVcXHUyQzYxXFx1MkM2NS1cXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzMtXFx1MkM3NFxcdTJDNzYtXFx1MkM3QlxcdTJDODFcXHUyQzgzXFx1MkM4NVxcdTJDODdcXHUyQzg5XFx1MkM4QlxcdTJDOERcXHUyQzhGXFx1MkM5MVxcdTJDOTNcXHUyQzk1XFx1MkM5N1xcdTJDOTlcXHUyQzlCXFx1MkM5RFxcdTJDOUZcXHUyQ0ExXFx1MkNBM1xcdTJDQTVcXHUyQ0E3XFx1MkNBOVxcdTJDQUJcXHUyQ0FEXFx1MkNBRlxcdTJDQjFcXHUyQ0IzXFx1MkNCNVxcdTJDQjdcXHUyQ0I5XFx1MkNCQlxcdTJDQkRcXHUyQ0JGXFx1MkNDMVxcdTJDQzNcXHUyQ0M1XFx1MkNDN1xcdTJDQzlcXHUyQ0NCXFx1MkNDRFxcdTJDQ0ZcXHUyQ0QxXFx1MkNEM1xcdTJDRDVcXHUyQ0Q3XFx1MkNEOVxcdTJDREJcXHUyQ0REXFx1MkNERlxcdTJDRTFcXHUyQ0UzLVxcdTJDRTRcXHUyQ0VDXFx1MkNFRVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdUE2NDFcXHVBNjQzXFx1QTY0NVxcdUE2NDdcXHVBNjQ5XFx1QTY0QlxcdUE2NERcXHVBNjRGXFx1QTY1MVxcdUE2NTNcXHVBNjU1XFx1QTY1N1xcdUE2NTlcXHVBNjVCXFx1QTY1RFxcdUE2NUZcXHVBNjYxXFx1QTY2M1xcdUE2NjVcXHVBNjY3XFx1QTY2OVxcdUE2NkJcXHVBNjZEXFx1QTY4MVxcdUE2ODNcXHVBNjg1XFx1QTY4N1xcdUE2ODlcXHVBNjhCXFx1QTY4RFxcdUE2OEZcXHVBNjkxXFx1QTY5M1xcdUE2OTVcXHVBNjk3XFx1QTY5OVxcdUE2OUJcXHVBNzIzXFx1QTcyNVxcdUE3MjdcXHVBNzI5XFx1QTcyQlxcdUE3MkRcXHVBNzJGLVxcdUE3MzFcXHVBNzMzXFx1QTczNVxcdUE3MzdcXHVBNzM5XFx1QTczQlxcdUE3M0RcXHVBNzNGXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTc0N1xcdUE3NDlcXHVBNzRCXFx1QTc0RFxcdUE3NEZcXHVBNzUxXFx1QTc1M1xcdUE3NTVcXHVBNzU3XFx1QTc1OVxcdUE3NUJcXHVBNzVEXFx1QTc1RlxcdUE3NjFcXHVBNzYzXFx1QTc2NVxcdUE3NjdcXHVBNzY5XFx1QTc2QlxcdUE3NkRcXHVBNzZGXFx1QTc3MS1cXHVBNzc4XFx1QTc3QVxcdUE3N0NcXHVBNzdGXFx1QTc4MVxcdUE3ODNcXHVBNzg1XFx1QTc4N1xcdUE3OENcXHVBNzhFXFx1QTc5MVxcdUE3OTMtXFx1QTc5NVxcdUE3OTdcXHVBNzk5XFx1QTc5QlxcdUE3OURcXHVBNzlGXFx1QTdBMVxcdUE3QTNcXHVBN0E1XFx1QTdBN1xcdUE3QTlcXHVBN0I1XFx1QTdCN1xcdUE3RkFcXHVBQjMwLVxcdUFCNUFcXHVBQjYwLVxcdUFCNjVcXHVBQjcwLVxcdUFCQkZcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGRjQxLVxcdUZGNUEvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIE1vZGlmaWVyXG4gICAgL1xcdTAyQjAtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3NFxcdTAzN0FcXHUwNTU5XFx1MDY0MFxcdTA2RTUtXFx1MDZFNlxcdTA3RjQtXFx1MDdGNVxcdTA3RkFcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwOTcxXFx1MEU0NlxcdTBFQzZcXHUxMEZDXFx1MTdEN1xcdTE4NDNcXHUxQUE3XFx1MUM3OC1cXHUxQzdEXFx1MUQyQy1cXHUxRDZBXFx1MUQ3OFxcdTFEOUItXFx1MURCRlxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MkM3Qy1cXHUyQzdEXFx1MkQ2RlxcdTJFMkZcXHUzMDA1XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwOUQtXFx1MzA5RVxcdTMwRkMtXFx1MzBGRVxcdUEwMTVcXHVBNEY4LVxcdUE0RkRcXHVBNjBDXFx1QTY3RlxcdUE2OUMtXFx1QTY5RFxcdUE3MTctXFx1QTcxRlxcdUE3NzBcXHVBNzg4XFx1QTdGOC1cXHVBN0Y5XFx1QTlDRlxcdUE5RTZcXHVBQTcwXFx1QUFERFxcdUFBRjMtXFx1QUFGNFxcdUFCNUMtXFx1QUI1RlxcdUZGNzBcXHVGRjlFLVxcdUZGOUYvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIE90aGVyXG4gICAgL1xcdTAwQUFcXHUwMEJBXFx1MDFCQlxcdTAxQzAtXFx1MDFDM1xcdTAyOTRcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2M0ZcXHUwNjQxLVxcdTA2NEFcXHUwNjZFLVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFRS1cXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDgwMC1cXHUwODE1XFx1MDg0MC1cXHUwODU4XFx1MDhBMC1cXHUwOEI0XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcyLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGLVxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDLVxcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwLVxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGLVxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyLVxcdTBBMzNcXHUwQTM1LVxcdTBBMzZcXHUwQTM4LVxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMi1cXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRi1cXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMi1cXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUMtXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OS1cXHUwQjlBXFx1MEI5Q1xcdTBCOUUtXFx1MEI5RlxcdTBCQTMtXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MC1cXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwLVxcdTBDRTFcXHUwQ0YxLVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyLVxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxLVxcdTBFODJcXHUwRTg0XFx1MEU4Ny1cXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUEtXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjItXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1LVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBEMC1cXHUxMEZBXFx1MTBGRC1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0RDXFx1MTgyMC1cXHUxODQyXFx1MTg0NC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUUtXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3N1xcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjUtXFx1MUNGNlxcdTIxMzUtXFx1MjEzOFxcdTJEMzAtXFx1MkQ2N1xcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTMwMDZcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRDVcXHVBMDAwLVxcdUEwMTRcXHVBMDE2LVxcdUE0OENcXHVBNEQwLVxcdUE0RjdcXHVBNTAwLVxcdUE2MEJcXHVBNjEwLVxcdUE2MUZcXHVBNjJBLVxcdUE2MkJcXHVBNjZFXFx1QTZBMC1cXHVBNkU1XFx1QTc4RlxcdUE3RjdcXHVBN0ZCLVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5RTAtXFx1QTlFNFxcdUE5RTctXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE2RlxcdUFBNzEtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNS1cXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRENcXHVBQUUwLVxcdUFBRUFcXHVBQUYyXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwLVxcdUZCNDFcXHVGQjQzLVxcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjY2LVxcdUZGNkZcXHVGRjcxLVxcdUZGOURcXHVGRkEwLVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMvLnNvdXJjZSxcbl0uam9pbignJykgKyAnXScpO1xuY2xhc3MgQmlidGV4UGFyc2VyIHtcbiAgICBwYXJzZShpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIHRoaXMuX3Byb2dyZXNzID0gMFxuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5tYXhfZW50cmllcyA9IG9wdGlvbnMubWF4X2VudHJpZXMgfHwgMDtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5wYXJzaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJpYnRleEFzeW5jKCkudGhlbigoKSA9PiB0aGlzLmNodW5rcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJpYnRleCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2h1bmtzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzV2hpdGVzcGFjZShzLCBob3Jpem9udGFsT25seSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiAocyA9PT0gJyAnIHx8IHMgPT09ICdcXHQnIHx8ICghaG9yaXpvbnRhbE9ubHkgJiYgKHMgPT09ICdcXHInIHx8IHMgPT09ICdcXG4nKSkpO1xuICAgIH1cbiAgICBtYXRjaChzKSB7XG4gICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCBzLmxlbmd0aCkgIT09IHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBUb2tlbiBtaXNtYXRjaCwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShzKX0sIGZvdW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MsIDIwKSl9Li4uYCwgdGhpcyk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9zICs9IHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKCk7XG4gICAgfVxuICAgIHRyeU1hdGNoKHMpIHtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCBzLmxlbmd0aCkgPT09IHMpO1xuICAgICAgICAvLyB0aGlzLnNraXBXaGl0ZXNwYWNlKClcbiAgICB9XG4gICAgc2tpcFdoaXRlc3BhY2UoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaXNXaGl0ZXNwYWNlKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSlcbiAgICAgICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgIC8vIHNoYWR5XG4gICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PT0gJyUnKSB7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCAmJiB0aGlzLmlucHV0W3RoaXMucG9zXSAhPT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaXNXaGl0ZXNwYWNlKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSlcbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlX2JyYWNlcygpIHtcbiAgICAgICAgbGV0IGJyYWNlY291bnQgPSAwO1xuICAgICAgICB0aGlzLm1hdGNoKCd7Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIGxldCBtYXRoID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgICAgICAgICBpZiAoYnJhY2Vjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoJ1VuY2xvc2VkIG1hdGggc2VjdGlvbicsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICBtYXRoID0gIW1hdGg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBVbnRlcm1pbmF0ZWQgYnJhY2UtdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmlucHV0LnN1YnN0cihzdGFydCwgMjApKX1gLCB0aGlzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsdWVfcXVvdGVzKCkge1xuICAgICAgICB0aGlzLm1hdGNoKCdcIicpO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICBsZXQgYnJhY2Vjb3VudCA9IDA7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlY291bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBVbnRlcm1pbmF0ZWQgcXVvdGUtdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmlucHV0LnN1YnN0cihzdGFydCwgMjApKX1gLCB0aGlzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2luZ2xlX3ZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy50cnlNYXRjaCgneycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9icmFjZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeU1hdGNoKCdcIicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9xdW90ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtleSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgdmFsdWVzLnB1c2godGhpcy5zaW5nbGVfdmFsdWUoKSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRyeU1hdGNoKCcjJykpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goJyMnKTtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuc2luZ2xlX3ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuam9pbignJyk7XG4gICAgfVxuICAgIGtleShhbGxvd1VuaWNvZGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdSdW5hd2F5IGtleScsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdLm1hdGNoKC9bJ2EtekEtWjAtOSY7XzpcXFxcLi8tXS8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFsbG93VW5pY29kZSAmJiB0aGlzLmlucHV0W3RoaXMucG9zXS5tYXRjaChsZXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGtleV9lcXVhbHNfdmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5KCk7XG4gICAgICAgIGlmICghdGhpcy50cnlNYXRjaCgnPScpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihgLi4uID0gdmFsdWUgZXhwZWN0ZWQsIGVxdWFscyBzaWduIG1pc3Npbmc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MsIDIwKSl9Li4uYCwgdGhpcyk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF0Y2goJz0nKTtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICByZXR1cm4gW2tleSwgdmFsXTtcbiAgICB9XG4gICAga2V5X3ZhbHVlX2xpc3QoKSB7XG4gICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgICAgICB3aGlsZSAodGhpcy50cnlNYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKCcsJyk7XG4gICAgICAgICAgICAvLyBmaXhlcyBwcm9ibGVtcyB3aXRoIGNvbW1hcyBhdCB0aGUgZW5kIG9mIGEgbGlzdFxuICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5rZXlfZXF1YWxzX3ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW50cnkoZCkge1xuICAgICAgICB0aGlzLnBhcnNpbmcgPSB0aGlzLmtleSh0cnVlKTtcbiAgICAgICAgdGhpcy5tYXRjaCgnLCcpO1xuICAgICAgICB0aGlzLmtleV92YWx1ZV9saXN0KCk7XG4gICAgfVxuICAgIGRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5tYXRjaCgnQCcpO1xuICAgICAgICByZXR1cm4gYEAke3RoaXMua2V5KCl9YC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdHJpbmcoKSB7XG4gICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgIH1cbiAgICBwcmVhbWJsZSgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSgpO1xuICAgIH1cbiAgICBjb21tZW50KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5pc1doaXRlc3BhY2UodGhpcy5pbnB1dFt0aGlzLnBvc10sIHRydWUpKVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09PSAneycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfYnJhY2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXRbdGhpcy5wb3NdICE9PSAnXFxuJyAmJiB0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgLypcbiAgICBwcml2YXRlIHByb2dyZXNzKCkge1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCh0aGlzLnBvcyAvIHRoaXMuaW5wdXQubGVuZ3RoICogMTAwKSAvIDUpICogNSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgIGlmICh0aGlzLl9wcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSBwcm9ncmVzc1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICgke3RoaXMuX3Byb2dyZXNzfSUpIGApXG4gICAgICB9XG4gICAgfVxuICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4X2VudHJpZXMgJiYgdGhpcy5lbnRyaWVzID49IHRoaXMubWF4X2VudHJpZXMpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCk7XG4gICAgfVxuICAgIGJpYnRleCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlTmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJpYnRleEFzeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNNb3JlKCkgPyAobmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHRoaXMucGFyc2VOZXh0KCkpKSkudGhlbigoKSA9PiB0aGlzLmJpYnRleEFzeW5jKCkpIDogUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBwYXJzZU5leHQoKSB7XG4gICAgICAgIC8vIHRoaXMucHJvZ3Jlc3MoKVxuICAgICAgICBjb25zdCBjaHVuayA9IHtcbiAgICAgICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgICAgIHBvczogdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgbGluZTogdGhpcy5pbnB1dC5zdWJzdHJpbmcoMCwgdGhpcy5wb3MpLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgdGV4dDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBndWFyZCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlyZWN0aXZlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdAc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgneycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKCd9Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLnN0cmluZ0RlY2xhcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQHByZWFtYmxlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgneycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWFtYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goJ30nKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmsucHJlYW1ibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdAY29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBjaHVuay5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSAne30nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJ5TWF0Y2goJygnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSAnKCknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoYFRva2VuIG1pc21hdGNoLCBleHBlY3RlZCAneycgb3IgJygnLCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCAyMCkpfS4uLmAsIHRoaXMpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKGd1YXJkWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeShkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChndWFyZFsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLmVudHJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzKys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIubmFtZSAhPT0gJ1BhcnNlRXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIGNodW5rLmVycm9yID0gZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhaGVhZCB0byB0aGUgbmV4dCBAIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGNodW5rLm9mZnNldC5wb3MgKyAxO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgdGhpcy5pbnB1dFt0aGlzLnBvc10gIT09ICdAJylcbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmlucHV0LnN1YnN0cmluZyhjaHVuay5vZmZzZXQucG9zLCB0aGlzLnBvcyk7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmNodW5rcy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoY2h1bmsuZXJyb3IgJiYgdGhpcy5jaHVua3MubGVuZ3RoICYmIHRoaXMuY2h1bmtzW2xhc3RdLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmNodW5rc1tsYXN0XS50ZXh0ICs9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjaHVuay50ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkcyB0aGUgYmlidGV4IGlucHV0IGFuZCBzcGxpdHMgaXQgaW50byBzZXBhcmF0ZSBjaHVua3Mgb2YgYEBzdHJpbmdgcywgYEBjb21tZW50YHMsIGFuZCBiaWJ0ZXggZW50cmllcy4gVXNlZnVsIGZvciBkZXRlY3RpbmcgaWYgYSBmaWxlIGlzIGJpYnRleCBmaWxlIGFuZCBmb3IgZmlsdGVyaW5nIG91dCBiYXNpYyBlcnJvcnMgdGhhdCB3b3VsZFxuICogbWFrZSB0aGUgbW9yZSBzb3BoaXN0aWNhdGVkIFtbYmlidGV4LnBhcnNlXV0gcmVqZWN0IHRoZSB3aG9sZSBmaWxlXG4gKlxuICogQHJldHVybnMgYXJyYXkgb2YgY2h1bmtzLCB3aXRoIG1hcmtlcnMgZm9yIHR5cGUgYW5kIGVycm9ycyAoaWYgYW55KSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiAobmV3IEJpYnRleFBhcnNlcikucGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2h1bmtlci5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNjaWk6IHJlcXVpcmUoJy4vdGFibGVzL2FzY2lpLmpzb24nKSxcbiAgYXNjaWlfYmlidGV4X2NyZWF0b3I6IHJlcXVpcmUoJy4vdGFibGVzL2FzY2lpLWJpYnRleC1jcmVhdG9yLmpzb24nKSxcbiAgdW5pY29kZTogcmVxdWlyZSgnLi90YWJsZXMvdW5pY29kZS5qc29uJyksXG4gIGxhdGV4OiByZXF1aXJlKCcuL3RhYmxlcy9sYXRleC5qc29uJyksXG4gIGRpYWNyaXRpY3M6IHJlcXVpcmUoJy4vdGFibGVzL2RpYWNyaXRpY3MuanNvbicpLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gW1xuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnQycsXG4gICAgICAgICdhbGlhcyc6ICdPdGhlcicsXG4gICAgICAgICdpc0JtcExhc3QnOiB0cnVlLFxuICAgICAgICAnYm1wJzogJ1xcMC1cXHgxRlxceDdGLVxceDlGXFx4QURcXHUwMzc4XFx1MDM3OVxcdTAzODAtXFx1MDM4M1xcdTAzOEJcXHUwMzhEXFx1MDNBMlxcdTA1MzBcXHUwNTU3XFx1MDU1OFxcdTA1OEJcXHUwNThDXFx1MDU5MFxcdTA1QzgtXFx1MDVDRlxcdTA1RUItXFx1MDVFRVxcdTA1RjUtXFx1MDYwNVxcdTA2MUNcXHUwNjFEXFx1MDZERFxcdTA3MEVcXHUwNzBGXFx1MDc0QlxcdTA3NENcXHUwN0IyLVxcdTA3QkZcXHUwN0ZCXFx1MDdGQ1xcdTA4MkVcXHUwODJGXFx1MDgzRlxcdTA4NUNcXHUwODVEXFx1MDg1RlxcdTA4NkItXFx1MDg5RlxcdTA4QjVcXHUwOEM4LVxcdTA4RDJcXHUwOEUyXFx1MDk4NFxcdTA5OERcXHUwOThFXFx1MDk5MVxcdTA5OTJcXHUwOUE5XFx1MDlCMVxcdTA5QjMtXFx1MDlCNVxcdTA5QkFcXHUwOUJCXFx1MDlDNVxcdTA5QzZcXHUwOUM5XFx1MDlDQVxcdTA5Q0YtXFx1MDlENlxcdTA5RDgtXFx1MDlEQlxcdTA5REVcXHUwOUU0XFx1MDlFNVxcdTA5RkZcXHUwQTAwXFx1MEEwNFxcdTBBMEItXFx1MEEwRVxcdTBBMTFcXHUwQTEyXFx1MEEyOVxcdTBBMzFcXHUwQTM0XFx1MEEzN1xcdTBBM0FcXHUwQTNCXFx1MEEzRFxcdTBBNDMtXFx1MEE0NlxcdTBBNDlcXHUwQTRBXFx1MEE0RS1cXHUwQTUwXFx1MEE1Mi1cXHUwQTU4XFx1MEE1RFxcdTBBNUYtXFx1MEE2NVxcdTBBNzctXFx1MEE4MFxcdTBBODRcXHUwQThFXFx1MEE5MlxcdTBBQTlcXHUwQUIxXFx1MEFCNFxcdTBBQkFcXHUwQUJCXFx1MEFDNlxcdTBBQ0FcXHUwQUNFXFx1MEFDRlxcdTBBRDEtXFx1MEFERlxcdTBBRTRcXHUwQUU1XFx1MEFGMi1cXHUwQUY4XFx1MEIwMFxcdTBCMDRcXHUwQjBEXFx1MEIwRVxcdTBCMTFcXHUwQjEyXFx1MEIyOVxcdTBCMzFcXHUwQjM0XFx1MEIzQVxcdTBCM0JcXHUwQjQ1XFx1MEI0NlxcdTBCNDlcXHUwQjRBXFx1MEI0RS1cXHUwQjU0XFx1MEI1OC1cXHUwQjVCXFx1MEI1RVxcdTBCNjRcXHUwQjY1XFx1MEI3OC1cXHUwQjgxXFx1MEI4NFxcdTBCOEItXFx1MEI4RFxcdTBCOTFcXHUwQjk2LVxcdTBCOThcXHUwQjlCXFx1MEI5RFxcdTBCQTAtXFx1MEJBMlxcdTBCQTUtXFx1MEJBN1xcdTBCQUItXFx1MEJBRFxcdTBCQkEtXFx1MEJCRFxcdTBCQzMtXFx1MEJDNVxcdTBCQzlcXHUwQkNFXFx1MEJDRlxcdTBCRDEtXFx1MEJENlxcdTBCRDgtXFx1MEJFNVxcdTBCRkItXFx1MEJGRlxcdTBDMERcXHUwQzExXFx1MEMyOVxcdTBDM0EtXFx1MEMzQ1xcdTBDNDVcXHUwQzQ5XFx1MEM0RS1cXHUwQzU0XFx1MEM1N1xcdTBDNUItXFx1MEM1RlxcdTBDNjRcXHUwQzY1XFx1MEM3MC1cXHUwQzc2XFx1MEM4RFxcdTBDOTFcXHUwQ0E5XFx1MENCNFxcdTBDQkFcXHUwQ0JCXFx1MENDNVxcdTBDQzlcXHUwQ0NFLVxcdTBDRDRcXHUwQ0Q3LVxcdTBDRERcXHUwQ0RGXFx1MENFNFxcdTBDRTVcXHUwQ0YwXFx1MENGMy1cXHUwQ0ZGXFx1MEQwRFxcdTBEMTFcXHUwRDQ1XFx1MEQ0OVxcdTBENTAtXFx1MEQ1M1xcdTBENjRcXHUwRDY1XFx1MEQ4MFxcdTBEODRcXHUwRDk3LVxcdTBEOTlcXHUwREIyXFx1MERCQ1xcdTBEQkVcXHUwREJGXFx1MERDNy1cXHUwREM5XFx1MERDQi1cXHUwRENFXFx1MERENVxcdTBERDdcXHUwREUwLVxcdTBERTVcXHUwREYwXFx1MERGMVxcdTBERjUtXFx1MEUwMFxcdTBFM0ItXFx1MEUzRVxcdTBFNUMtXFx1MEU4MFxcdTBFODNcXHUwRTg1XFx1MEU4QlxcdTBFQTRcXHUwRUE2XFx1MEVCRVxcdTBFQkZcXHUwRUM1XFx1MEVDN1xcdTBFQ0VcXHUwRUNGXFx1MEVEQVxcdTBFREJcXHUwRUUwLVxcdTBFRkZcXHUwRjQ4XFx1MEY2RC1cXHUwRjcwXFx1MEY5OFxcdTBGQkRcXHUwRkNEXFx1MEZEQi1cXHUwRkZGXFx1MTBDNlxcdTEwQzgtXFx1MTBDQ1xcdTEwQ0VcXHUxMENGXFx1MTI0OVxcdTEyNEVcXHUxMjRGXFx1MTI1N1xcdTEyNTlcXHUxMjVFXFx1MTI1RlxcdTEyODlcXHUxMjhFXFx1MTI4RlxcdTEyQjFcXHUxMkI2XFx1MTJCN1xcdTEyQkZcXHUxMkMxXFx1MTJDNlxcdTEyQzdcXHUxMkQ3XFx1MTMxMVxcdTEzMTZcXHUxMzE3XFx1MTM1QlxcdTEzNUNcXHUxMzdELVxcdTEzN0ZcXHUxMzlBLVxcdTEzOUZcXHUxM0Y2XFx1MTNGN1xcdTEzRkVcXHUxM0ZGXFx1MTY5RC1cXHUxNjlGXFx1MTZGOS1cXHUxNkZGXFx1MTcwRFxcdTE3MTUtXFx1MTcxRlxcdTE3MzctXFx1MTczRlxcdTE3NTQtXFx1MTc1RlxcdTE3NkRcXHUxNzcxXFx1MTc3NC1cXHUxNzdGXFx1MTdERVxcdTE3REZcXHUxN0VBLVxcdTE3RUZcXHUxN0ZBLVxcdTE3RkZcXHUxODBFXFx1MTgwRlxcdTE4MUEtXFx1MTgxRlxcdTE4NzktXFx1MTg3RlxcdTE4QUItXFx1MThBRlxcdTE4RjYtXFx1MThGRlxcdTE5MUZcXHUxOTJDLVxcdTE5MkZcXHUxOTNDLVxcdTE5M0ZcXHUxOTQxLVxcdTE5NDNcXHUxOTZFXFx1MTk2RlxcdTE5NzUtXFx1MTk3RlxcdTE5QUMtXFx1MTlBRlxcdTE5Q0EtXFx1MTlDRlxcdTE5REItXFx1MTlERFxcdTFBMUNcXHUxQTFEXFx1MUE1RlxcdTFBN0RcXHUxQTdFXFx1MUE4QS1cXHUxQThGXFx1MUE5QS1cXHUxQTlGXFx1MUFBRVxcdTFBQUZcXHUxQUMxLVxcdTFBRkZcXHUxQjRDLVxcdTFCNEZcXHUxQjdELVxcdTFCN0ZcXHUxQkY0LVxcdTFCRkJcXHUxQzM4LVxcdTFDM0FcXHUxQzRBLVxcdTFDNENcXHUxQzg5LVxcdTFDOEZcXHUxQ0JCXFx1MUNCQ1xcdTFDQzgtXFx1MUNDRlxcdTFDRkItXFx1MUNGRlxcdTFERkFcXHUxRjE2XFx1MUYxN1xcdTFGMUVcXHUxRjFGXFx1MUY0NlxcdTFGNDdcXHUxRjRFXFx1MUY0RlxcdTFGNThcXHUxRjVBXFx1MUY1Q1xcdTFGNUVcXHUxRjdFXFx1MUY3RlxcdTFGQjVcXHUxRkM1XFx1MUZENFxcdTFGRDVcXHUxRkRDXFx1MUZGMFxcdTFGRjFcXHUxRkY1XFx1MUZGRlxcdTIwMEItXFx1MjAwRlxcdTIwMkEtXFx1MjAyRVxcdTIwNjAtXFx1MjA2RlxcdTIwNzJcXHUyMDczXFx1MjA4RlxcdTIwOUQtXFx1MjA5RlxcdTIwQzAtXFx1MjBDRlxcdTIwRjEtXFx1MjBGRlxcdTIxOEMtXFx1MjE4RlxcdTI0MjctXFx1MjQzRlxcdTI0NEItXFx1MjQ1RlxcdTJCNzRcXHUyQjc1XFx1MkI5NlxcdTJDMkZcXHUyQzVGXFx1MkNGNC1cXHUyQ0Y4XFx1MkQyNlxcdTJEMjgtXFx1MkQyQ1xcdTJEMkVcXHUyRDJGXFx1MkQ2OC1cXHUyRDZFXFx1MkQ3MS1cXHUyRDdFXFx1MkQ5Ny1cXHUyRDlGXFx1MkRBN1xcdTJEQUZcXHUyREI3XFx1MkRCRlxcdTJEQzdcXHUyRENGXFx1MkREN1xcdTJEREZcXHUyRTUzLVxcdTJFN0ZcXHUyRTlBXFx1MkVGNC1cXHUyRUZGXFx1MkZENi1cXHUyRkVGXFx1MkZGQy1cXHUyRkZGXFx1MzA0MFxcdTMwOTdcXHUzMDk4XFx1MzEwMC1cXHUzMTA0XFx1MzEzMFxcdTMxOEZcXHUzMUU0LVxcdTMxRUZcXHUzMjFGXFx1OUZGRC1cXHU5RkZGXFx1QTQ4RC1cXHVBNDhGXFx1QTRDNy1cXHVBNENGXFx1QTYyQy1cXHVBNjNGXFx1QTZGOC1cXHVBNkZGXFx1QTdDMFxcdUE3QzFcXHVBN0NCLVxcdUE3RjRcXHVBODJELVxcdUE4MkZcXHVBODNBLVxcdUE4M0ZcXHVBODc4LVxcdUE4N0ZcXHVBOEM2LVxcdUE4Q0RcXHVBOERBLVxcdUE4REZcXHVBOTU0LVxcdUE5NUVcXHVBOTdELVxcdUE5N0ZcXHVBOUNFXFx1QTlEQS1cXHVBOUREXFx1QTlGRlxcdUFBMzctXFx1QUEzRlxcdUFBNEVcXHVBQTRGXFx1QUE1QVxcdUFBNUJcXHVBQUMzLVxcdUFBREFcXHVBQUY3LVxcdUFCMDBcXHVBQjA3XFx1QUIwOFxcdUFCMEZcXHVBQjEwXFx1QUIxNy1cXHVBQjFGXFx1QUIyN1xcdUFCMkZcXHVBQjZDLVxcdUFCNkZcXHVBQkVFXFx1QUJFRlxcdUFCRkEtXFx1QUJGRlxcdUQ3QTQtXFx1RDdBRlxcdUQ3QzctXFx1RDdDQVxcdUQ3RkMtXFx1RjhGRlxcdUZBNkVcXHVGQTZGXFx1RkFEQS1cXHVGQUZGXFx1RkIwNy1cXHVGQjEyXFx1RkIxOC1cXHVGQjFDXFx1RkIzN1xcdUZCM0RcXHVGQjNGXFx1RkI0MlxcdUZCNDVcXHVGQkMyLVxcdUZCRDJcXHVGRDQwLVxcdUZENEZcXHVGRDkwXFx1RkQ5MVxcdUZEQzgtXFx1RkRFRlxcdUZERkVcXHVGREZGXFx1RkUxQS1cXHVGRTFGXFx1RkU1M1xcdUZFNjdcXHVGRTZDLVxcdUZFNkZcXHVGRTc1XFx1RkVGRC1cXHVGRjAwXFx1RkZCRi1cXHVGRkMxXFx1RkZDOFxcdUZGQzlcXHVGRkQwXFx1RkZEMVxcdUZGRDhcXHVGRkQ5XFx1RkZERC1cXHVGRkRGXFx1RkZFN1xcdUZGRUYtXFx1RkZGQlxcdUZGRkVcXHVGRkZGJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURDMENcXHVEQzI3XFx1REMzQlxcdURDM0VcXHVEQzRFXFx1REM0RlxcdURDNUUtXFx1REM3RlxcdURDRkItXFx1RENGRlxcdUREMDMtXFx1REQwNlxcdUREMzQtXFx1REQzNlxcdUREOEZcXHVERDlELVxcdUREOUZcXHVEREExLVxcdUREQ0ZcXHVEREZFLVxcdURFN0ZcXHVERTlELVxcdURFOUZcXHVERUQxLVxcdURFREZcXHVERUZDLVxcdURFRkZcXHVERjI0LVxcdURGMkNcXHVERjRCLVxcdURGNEZcXHVERjdCLVxcdURGN0ZcXHVERjlFXFx1REZDNC1cXHVERkM3XFx1REZENi1cXHVERkZGXXxcXHVEODAxW1xcdURDOUVcXHVEQzlGXFx1RENBQS1cXHVEQ0FGXFx1RENENC1cXHVEQ0Q3XFx1RENGQy1cXHVEQ0ZGXFx1REQyOC1cXHVERDJGXFx1REQ2NC1cXHVERDZFXFx1REQ3MC1cXHVEREZGXFx1REYzNy1cXHVERjNGXFx1REY1Ni1cXHVERjVGXFx1REY2OC1cXHVERkZGXXxcXHVEODAyW1xcdURDMDZcXHVEQzA3XFx1REMwOVxcdURDMzZcXHVEQzM5LVxcdURDM0JcXHVEQzNEXFx1REMzRVxcdURDNTZcXHVEQzlGLVxcdURDQTZcXHVEQ0IwLVxcdURDREZcXHVEQ0YzXFx1RENGNi1cXHVEQ0ZBXFx1REQxQy1cXHVERDFFXFx1REQzQS1cXHVERDNFXFx1REQ0MC1cXHVERDdGXFx1RERCOC1cXHVEREJCXFx1REREMFxcdURERDFcXHVERTA0XFx1REUwNy1cXHVERTBCXFx1REUxNFxcdURFMThcXHVERTM2XFx1REUzN1xcdURFM0ItXFx1REUzRVxcdURFNDktXFx1REU0RlxcdURFNTktXFx1REU1RlxcdURFQTAtXFx1REVCRlxcdURFRTctXFx1REVFQVxcdURFRjctXFx1REVGRlxcdURGMzYtXFx1REYzOFxcdURGNTZcXHVERjU3XFx1REY3My1cXHVERjc3XFx1REY5Mi1cXHVERjk4XFx1REY5RC1cXHVERkE4XFx1REZCMC1cXHVERkZGXXxcXHVEODAzW1xcdURDNDktXFx1REM3RlxcdURDQjMtXFx1RENCRlxcdURDRjMtXFx1RENGOVxcdUREMjgtXFx1REQyRlxcdUREM0EtXFx1REU1RlxcdURFN0ZcXHVERUFBXFx1REVBRVxcdURFQUZcXHVERUIyLVxcdURFRkZcXHVERjI4LVxcdURGMkZcXHVERjVBLVxcdURGQUZcXHVERkNDLVxcdURGREZcXHVERkY3LVxcdURGRkZdfFxcdUQ4MDRbXFx1REM0RS1cXHVEQzUxXFx1REM3MC1cXHVEQzdFXFx1RENCRFxcdURDQzItXFx1RENDRlxcdURDRTktXFx1RENFRlxcdURDRkEtXFx1RENGRlxcdUREMzVcXHVERDQ4LVxcdURENEZcXHVERDc3LVxcdUREN0ZcXHVEREUwXFx1RERGNS1cXHVEREZGXFx1REUxMlxcdURFM0YtXFx1REU3RlxcdURFODdcXHVERTg5XFx1REU4RVxcdURFOUVcXHVERUFBLVxcdURFQUZcXHVERUVCLVxcdURFRUZcXHVERUZBLVxcdURFRkZcXHVERjA0XFx1REYwRFxcdURGMEVcXHVERjExXFx1REYxMlxcdURGMjlcXHVERjMxXFx1REYzNFxcdURGM0FcXHVERjQ1XFx1REY0NlxcdURGNDlcXHVERjRBXFx1REY0RVxcdURGNEZcXHVERjUxLVxcdURGNTZcXHVERjU4LVxcdURGNUNcXHVERjY0XFx1REY2NVxcdURGNkQtXFx1REY2RlxcdURGNzUtXFx1REZGRl18XFx1RDgwNVtcXHVEQzVDXFx1REM2Mi1cXHVEQzdGXFx1RENDOC1cXHVEQ0NGXFx1RENEQS1cXHVERDdGXFx1RERCNlxcdUREQjdcXHVERERFLVxcdURERkZcXHVERTQ1LVxcdURFNEZcXHVERTVBLVxcdURFNUZcXHVERTZELVxcdURFN0ZcXHVERUI5LVxcdURFQkZcXHVERUNBLVxcdURFRkZcXHVERjFCXFx1REYxQ1xcdURGMkMtXFx1REYyRlxcdURGNDAtXFx1REZGRl18XFx1RDgwNltcXHVEQzNDLVxcdURDOUZcXHVEQ0YzLVxcdURDRkVcXHVERDA3XFx1REQwOFxcdUREMEFcXHVERDBCXFx1REQxNFxcdUREMTdcXHVERDM2XFx1REQzOVxcdUREM0FcXHVERDQ3LVxcdURENEZcXHVERDVBLVxcdUREOUZcXHVEREE4XFx1RERBOVxcdURERDhcXHVEREQ5XFx1RERFNS1cXHVEREZGXFx1REU0OC1cXHVERTRGXFx1REVBMy1cXHVERUJGXFx1REVGOS1cXHVERkZGXXxcXHVEODA3W1xcdURDMDlcXHVEQzM3XFx1REM0Ni1cXHVEQzRGXFx1REM2RC1cXHVEQzZGXFx1REM5MFxcdURDOTFcXHVEQ0E4XFx1RENCNy1cXHVEQ0ZGXFx1REQwN1xcdUREMEFcXHVERDM3LVxcdUREMzlcXHVERDNCXFx1REQzRVxcdURENDgtXFx1REQ0RlxcdURENUEtXFx1REQ1RlxcdURENjZcXHVERDY5XFx1REQ4RlxcdUREOTJcXHVERDk5LVxcdUREOUZcXHVEREFBLVxcdURFREZcXHVERUY5LVxcdURGQUZcXHVERkIxLVxcdURGQkZcXHVERkYyLVxcdURGRkVdfFxcdUQ4MDhbXFx1REY5QS1cXHVERkZGXXxcXHVEODA5W1xcdURDNkZcXHVEQzc1LVxcdURDN0ZcXHVERDQ0LVxcdURGRkZdfFtcXHVEODBBXFx1RDgwQlxcdUQ4MEUtXFx1RDgxMFxcdUQ4MTItXFx1RDgxOVxcdUQ4MjQtXFx1RDgyQlxcdUQ4MkRcXHVEODJFXFx1RDgzMC1cXHVEODMzXFx1RDgzN1xcdUQ4MzlcXHVEODNGXFx1RDg3Qi1cXHVEODdEXFx1RDg3RlxcdUQ4ODUtXFx1REIzRlxcdURCNDEtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMkYtXFx1REZGRl18XFx1RDgxMVtcXHVERTQ3LVxcdURGRkZdfFxcdUQ4MUFbXFx1REUzOS1cXHVERTNGXFx1REU1RlxcdURFNkEtXFx1REU2RFxcdURFNzAtXFx1REVDRlxcdURFRUVcXHVERUVGXFx1REVGNi1cXHVERUZGXFx1REY0Ni1cXHVERjRGXFx1REY1QVxcdURGNjJcXHVERjc4LVxcdURGN0NcXHVERjkwLVxcdURGRkZdfFxcdUQ4MUJbXFx1REMwMC1cXHVERTNGXFx1REU5Qi1cXHVERUZGXFx1REY0Qi1cXHVERjRFXFx1REY4OC1cXHVERjhFXFx1REZBMC1cXHVERkRGXFx1REZFNS1cXHVERkVGXFx1REZGMi1cXHVERkZGXXxcXHVEODIxW1xcdURGRjgtXFx1REZGRl18XFx1RDgyM1tcXHVEQ0Q2LVxcdURDRkZcXHVERDA5LVxcdURGRkZdfFxcdUQ4MkNbXFx1REQxRi1cXHVERDRGXFx1REQ1My1cXHVERDYzXFx1REQ2OC1cXHVERDZGXFx1REVGQy1cXHVERkZGXXxcXHVEODJGW1xcdURDNkItXFx1REM2RlxcdURDN0QtXFx1REM3RlxcdURDODktXFx1REM4RlxcdURDOUFcXHVEQzlCXFx1RENBMC1cXHVERkZGXXxcXHVEODM0W1xcdURDRjYtXFx1RENGRlxcdUREMjdcXHVERDI4XFx1REQ3My1cXHVERDdBXFx1RERFOS1cXHVEREZGXFx1REU0Ni1cXHVERURGXFx1REVGNC1cXHVERUZGXFx1REY1Ny1cXHVERjVGXFx1REY3OS1cXHVERkZGXXxcXHVEODM1W1xcdURDNTVcXHVEQzlEXFx1RENBMFxcdURDQTFcXHVEQ0EzXFx1RENBNFxcdURDQTdcXHVEQ0E4XFx1RENBRFxcdURDQkFcXHVEQ0JDXFx1RENDNFxcdUREMDZcXHVERDBCXFx1REQwQ1xcdUREMTVcXHVERDFEXFx1REQzQVxcdUREM0ZcXHVERDQ1XFx1REQ0Ny1cXHVERDQ5XFx1REQ1MVxcdURFQTZcXHVERUE3XFx1REZDQ1xcdURGQ0RdfFxcdUQ4MzZbXFx1REU4Qy1cXHVERTlBXFx1REVBMFxcdURFQjAtXFx1REZGRl18XFx1RDgzOFtcXHVEQzA3XFx1REMxOVxcdURDMUFcXHVEQzIyXFx1REMyNVxcdURDMkItXFx1RENGRlxcdUREMkQtXFx1REQyRlxcdUREM0VcXHVERDNGXFx1REQ0QS1cXHVERDREXFx1REQ1MC1cXHVERUJGXFx1REVGQS1cXHVERUZFXFx1REYwMC1cXHVERkZGXXxcXHVEODNBW1xcdURDQzVcXHVEQ0M2XFx1RENENy1cXHVEQ0ZGXFx1REQ0Qy1cXHVERDRGXFx1REQ1QS1cXHVERDVEXFx1REQ2MC1cXHVERkZGXXxcXHVEODNCW1xcdURDMDAtXFx1REM3MFxcdURDQjUtXFx1REQwMFxcdUREM0UtXFx1RERGRlxcdURFMDRcXHVERTIwXFx1REUyM1xcdURFMjVcXHVERTI2XFx1REUyOFxcdURFMzNcXHVERTM4XFx1REUzQVxcdURFM0MtXFx1REU0MVxcdURFNDMtXFx1REU0NlxcdURFNDhcXHVERTRBXFx1REU0Q1xcdURFNTBcXHVERTUzXFx1REU1NVxcdURFNTZcXHVERTU4XFx1REU1QVxcdURFNUNcXHVERTVFXFx1REU2MFxcdURFNjNcXHVERTY1XFx1REU2NlxcdURFNkJcXHVERTczXFx1REU3OFxcdURFN0RcXHVERTdGXFx1REU4QVxcdURFOUMtXFx1REVBMFxcdURFQTRcXHVERUFBXFx1REVCQy1cXHVERUVGXFx1REVGMi1cXHVERkZGXXxcXHVEODNDW1xcdURDMkMtXFx1REMyRlxcdURDOTQtXFx1REM5RlxcdURDQUZcXHVEQ0IwXFx1RENDMFxcdURDRDBcXHVEQ0Y2LVxcdURDRkZcXHVEREFFLVxcdURERTVcXHVERTAzLVxcdURFMEZcXHVERTNDLVxcdURFM0ZcXHVERTQ5LVxcdURFNEZcXHVERTUyLVxcdURFNUZcXHVERTY2LVxcdURFRkZdfFxcdUQ4M0RbXFx1REVEOC1cXHVERURGXFx1REVFRC1cXHVERUVGXFx1REVGRC1cXHVERUZGXFx1REY3NC1cXHVERjdGXFx1REZEOS1cXHVERkRGXFx1REZFQy1cXHVERkZGXXxcXHVEODNFW1xcdURDMEMtXFx1REMwRlxcdURDNDgtXFx1REM0RlxcdURDNUEtXFx1REM1RlxcdURDODgtXFx1REM4RlxcdURDQUVcXHVEQ0FGXFx1RENCMi1cXHVEQ0ZGXFx1REQ3OVxcdUREQ0NcXHVERTU0LVxcdURFNUZcXHVERTZFXFx1REU2RlxcdURFNzUtXFx1REU3N1xcdURFN0ItXFx1REU3RlxcdURFODctXFx1REU4RlxcdURFQTktXFx1REVBRlxcdURFQjctXFx1REVCRlxcdURFQzMtXFx1REVDRlxcdURFRDctXFx1REVGRlxcdURGOTNcXHVERkNCLVxcdURGRUZcXHVERkZBLVxcdURGRkZdfFxcdUQ4NjlbXFx1REVERS1cXHVERUZGXXxcXHVEODZEW1xcdURGMzUtXFx1REYzRl18XFx1RDg2RVtcXHVEQzFFXFx1REMxRl18XFx1RDg3M1tcXHVERUEyLVxcdURFQUZdfFxcdUQ4N0FbXFx1REZFMS1cXHVERkZGXXxcXHVEODdFW1xcdURFMUUtXFx1REZGRl18XFx1RDg4NFtcXHVERjRCLVxcdURGRkZdfFxcdURCNDBbXFx1REMwMC1cXHVEQ0ZGXFx1RERGMC1cXHVERkZGXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnQ2MnLFxuICAgICAgICAnYWxpYXMnOiAnQ29udHJvbCcsXG4gICAgICAgICdibXAnOiAnXFwwLVxceDFGXFx4N0YtXFx4OUYnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NmJyxcbiAgICAgICAgJ2FsaWFzJzogJ0Zvcm1hdCcsXG4gICAgICAgICdibXAnOiAnXFx4QURcXHUwNjAwLVxcdTA2MDVcXHUwNjFDXFx1MDZERFxcdTA3MEZcXHUwOEUyXFx1MTgwRVxcdTIwMEItXFx1MjAwRlxcdTIwMkEtXFx1MjAyRVxcdTIwNjAtXFx1MjA2NFxcdTIwNjYtXFx1MjA2RlxcdUZFRkZcXHVGRkY5LVxcdUZGRkInLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDRbXFx1RENCRFxcdURDQ0RdfFxcdUQ4MERbXFx1REMzMC1cXHVEQzM4XXxcXHVEODJGW1xcdURDQTAtXFx1RENBM118XFx1RDgzNFtcXHVERDczLVxcdUREN0FdfFxcdURCNDBbXFx1REMwMVxcdURDMjAtXFx1REM3Rl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NuJyxcbiAgICAgICAgJ2FsaWFzJzogJ1VuYXNzaWduZWQnLFxuICAgICAgICAnYm1wJzogJ1xcdTAzNzhcXHUwMzc5XFx1MDM4MC1cXHUwMzgzXFx1MDM4QlxcdTAzOERcXHUwM0EyXFx1MDUzMFxcdTA1NTdcXHUwNTU4XFx1MDU4QlxcdTA1OENcXHUwNTkwXFx1MDVDOC1cXHUwNUNGXFx1MDVFQi1cXHUwNUVFXFx1MDVGNS1cXHUwNUZGXFx1MDYxRFxcdTA3MEVcXHUwNzRCXFx1MDc0Q1xcdTA3QjItXFx1MDdCRlxcdTA3RkJcXHUwN0ZDXFx1MDgyRVxcdTA4MkZcXHUwODNGXFx1MDg1Q1xcdTA4NURcXHUwODVGXFx1MDg2Qi1cXHUwODlGXFx1MDhCNVxcdTA4QzgtXFx1MDhEMlxcdTA5ODRcXHUwOThEXFx1MDk4RVxcdTA5OTFcXHUwOTkyXFx1MDlBOVxcdTA5QjFcXHUwOUIzLVxcdTA5QjVcXHUwOUJBXFx1MDlCQlxcdTA5QzVcXHUwOUM2XFx1MDlDOVxcdTA5Q0FcXHUwOUNGLVxcdTA5RDZcXHUwOUQ4LVxcdTA5REJcXHUwOURFXFx1MDlFNFxcdTA5RTVcXHUwOUZGXFx1MEEwMFxcdTBBMDRcXHUwQTBCLVxcdTBBMEVcXHUwQTExXFx1MEExMlxcdTBBMjlcXHUwQTMxXFx1MEEzNFxcdTBBMzdcXHUwQTNBXFx1MEEzQlxcdTBBM0RcXHUwQTQzLVxcdTBBNDZcXHUwQTQ5XFx1MEE0QVxcdTBBNEUtXFx1MEE1MFxcdTBBNTItXFx1MEE1OFxcdTBBNURcXHUwQTVGLVxcdTBBNjVcXHUwQTc3LVxcdTBBODBcXHUwQTg0XFx1MEE4RVxcdTBBOTJcXHUwQUE5XFx1MEFCMVxcdTBBQjRcXHUwQUJBXFx1MEFCQlxcdTBBQzZcXHUwQUNBXFx1MEFDRVxcdTBBQ0ZcXHUwQUQxLVxcdTBBREZcXHUwQUU0XFx1MEFFNVxcdTBBRjItXFx1MEFGOFxcdTBCMDBcXHUwQjA0XFx1MEIwRFxcdTBCMEVcXHUwQjExXFx1MEIxMlxcdTBCMjlcXHUwQjMxXFx1MEIzNFxcdTBCM0FcXHUwQjNCXFx1MEI0NVxcdTBCNDZcXHUwQjQ5XFx1MEI0QVxcdTBCNEUtXFx1MEI1NFxcdTBCNTgtXFx1MEI1QlxcdTBCNUVcXHUwQjY0XFx1MEI2NVxcdTBCNzgtXFx1MEI4MVxcdTBCODRcXHUwQjhCLVxcdTBCOERcXHUwQjkxXFx1MEI5Ni1cXHUwQjk4XFx1MEI5QlxcdTBCOURcXHUwQkEwLVxcdTBCQTJcXHUwQkE1LVxcdTBCQTdcXHUwQkFCLVxcdTBCQURcXHUwQkJBLVxcdTBCQkRcXHUwQkMzLVxcdTBCQzVcXHUwQkM5XFx1MEJDRVxcdTBCQ0ZcXHUwQkQxLVxcdTBCRDZcXHUwQkQ4LVxcdTBCRTVcXHUwQkZCLVxcdTBCRkZcXHUwQzBEXFx1MEMxMVxcdTBDMjlcXHUwQzNBLVxcdTBDM0NcXHUwQzQ1XFx1MEM0OVxcdTBDNEUtXFx1MEM1NFxcdTBDNTdcXHUwQzVCLVxcdTBDNUZcXHUwQzY0XFx1MEM2NVxcdTBDNzAtXFx1MEM3NlxcdTBDOERcXHUwQzkxXFx1MENBOVxcdTBDQjRcXHUwQ0JBXFx1MENCQlxcdTBDQzVcXHUwQ0M5XFx1MENDRS1cXHUwQ0Q0XFx1MENENy1cXHUwQ0REXFx1MENERlxcdTBDRTRcXHUwQ0U1XFx1MENGMFxcdTBDRjMtXFx1MENGRlxcdTBEMERcXHUwRDExXFx1MEQ0NVxcdTBENDlcXHUwRDUwLVxcdTBENTNcXHUwRDY0XFx1MEQ2NVxcdTBEODBcXHUwRDg0XFx1MEQ5Ny1cXHUwRDk5XFx1MERCMlxcdTBEQkNcXHUwREJFXFx1MERCRlxcdTBEQzctXFx1MERDOVxcdTBEQ0ItXFx1MERDRVxcdTBERDVcXHUwREQ3XFx1MERFMC1cXHUwREU1XFx1MERGMFxcdTBERjFcXHUwREY1LVxcdTBFMDBcXHUwRTNCLVxcdTBFM0VcXHUwRTVDLVxcdTBFODBcXHUwRTgzXFx1MEU4NVxcdTBFOEJcXHUwRUE0XFx1MEVBNlxcdTBFQkVcXHUwRUJGXFx1MEVDNVxcdTBFQzdcXHUwRUNFXFx1MEVDRlxcdTBFREFcXHUwRURCXFx1MEVFMC1cXHUwRUZGXFx1MEY0OFxcdTBGNkQtXFx1MEY3MFxcdTBGOThcXHUwRkJEXFx1MEZDRFxcdTBGREItXFx1MEZGRlxcdTEwQzZcXHUxMEM4LVxcdTEwQ0NcXHUxMENFXFx1MTBDRlxcdTEyNDlcXHUxMjRFXFx1MTI0RlxcdTEyNTdcXHUxMjU5XFx1MTI1RVxcdTEyNUZcXHUxMjg5XFx1MTI4RVxcdTEyOEZcXHUxMkIxXFx1MTJCNlxcdTEyQjdcXHUxMkJGXFx1MTJDMVxcdTEyQzZcXHUxMkM3XFx1MTJEN1xcdTEzMTFcXHUxMzE2XFx1MTMxN1xcdTEzNUJcXHUxMzVDXFx1MTM3RC1cXHUxMzdGXFx1MTM5QS1cXHUxMzlGXFx1MTNGNlxcdTEzRjdcXHUxM0ZFXFx1MTNGRlxcdTE2OUQtXFx1MTY5RlxcdTE2RjktXFx1MTZGRlxcdTE3MERcXHUxNzE1LVxcdTE3MUZcXHUxNzM3LVxcdTE3M0ZcXHUxNzU0LVxcdTE3NUZcXHUxNzZEXFx1MTc3MVxcdTE3NzQtXFx1MTc3RlxcdTE3REVcXHUxN0RGXFx1MTdFQS1cXHUxN0VGXFx1MTdGQS1cXHUxN0ZGXFx1MTgwRlxcdTE4MUEtXFx1MTgxRlxcdTE4NzktXFx1MTg3RlxcdTE4QUItXFx1MThBRlxcdTE4RjYtXFx1MThGRlxcdTE5MUZcXHUxOTJDLVxcdTE5MkZcXHUxOTNDLVxcdTE5M0ZcXHUxOTQxLVxcdTE5NDNcXHUxOTZFXFx1MTk2RlxcdTE5NzUtXFx1MTk3RlxcdTE5QUMtXFx1MTlBRlxcdTE5Q0EtXFx1MTlDRlxcdTE5REItXFx1MTlERFxcdTFBMUNcXHUxQTFEXFx1MUE1RlxcdTFBN0RcXHUxQTdFXFx1MUE4QS1cXHUxQThGXFx1MUE5QS1cXHUxQTlGXFx1MUFBRVxcdTFBQUZcXHUxQUMxLVxcdTFBRkZcXHUxQjRDLVxcdTFCNEZcXHUxQjdELVxcdTFCN0ZcXHUxQkY0LVxcdTFCRkJcXHUxQzM4LVxcdTFDM0FcXHUxQzRBLVxcdTFDNENcXHUxQzg5LVxcdTFDOEZcXHUxQ0JCXFx1MUNCQ1xcdTFDQzgtXFx1MUNDRlxcdTFDRkItXFx1MUNGRlxcdTFERkFcXHUxRjE2XFx1MUYxN1xcdTFGMUVcXHUxRjFGXFx1MUY0NlxcdTFGNDdcXHUxRjRFXFx1MUY0RlxcdTFGNThcXHUxRjVBXFx1MUY1Q1xcdTFGNUVcXHUxRjdFXFx1MUY3RlxcdTFGQjVcXHUxRkM1XFx1MUZENFxcdTFGRDVcXHUxRkRDXFx1MUZGMFxcdTFGRjFcXHUxRkY1XFx1MUZGRlxcdTIwNjVcXHUyMDcyXFx1MjA3M1xcdTIwOEZcXHUyMDlELVxcdTIwOUZcXHUyMEMwLVxcdTIwQ0ZcXHUyMEYxLVxcdTIwRkZcXHUyMThDLVxcdTIxOEZcXHUyNDI3LVxcdTI0M0ZcXHUyNDRCLVxcdTI0NUZcXHUyQjc0XFx1MkI3NVxcdTJCOTZcXHUyQzJGXFx1MkM1RlxcdTJDRjQtXFx1MkNGOFxcdTJEMjZcXHUyRDI4LVxcdTJEMkNcXHUyRDJFXFx1MkQyRlxcdTJENjgtXFx1MkQ2RVxcdTJENzEtXFx1MkQ3RVxcdTJEOTctXFx1MkQ5RlxcdTJEQTdcXHUyREFGXFx1MkRCN1xcdTJEQkZcXHUyREM3XFx1MkRDRlxcdTJERDdcXHUyRERGXFx1MkU1My1cXHUyRTdGXFx1MkU5QVxcdTJFRjQtXFx1MkVGRlxcdTJGRDYtXFx1MkZFRlxcdTJGRkMtXFx1MkZGRlxcdTMwNDBcXHUzMDk3XFx1MzA5OFxcdTMxMDAtXFx1MzEwNFxcdTMxMzBcXHUzMThGXFx1MzFFNC1cXHUzMUVGXFx1MzIxRlxcdTlGRkQtXFx1OUZGRlxcdUE0OEQtXFx1QTQ4RlxcdUE0QzctXFx1QTRDRlxcdUE2MkMtXFx1QTYzRlxcdUE2RjgtXFx1QTZGRlxcdUE3QzBcXHVBN0MxXFx1QTdDQi1cXHVBN0Y0XFx1QTgyRC1cXHVBODJGXFx1QTgzQS1cXHVBODNGXFx1QTg3OC1cXHVBODdGXFx1QThDNi1cXHVBOENEXFx1QThEQS1cXHVBOERGXFx1QTk1NC1cXHVBOTVFXFx1QTk3RC1cXHVBOTdGXFx1QTlDRVxcdUE5REEtXFx1QTlERFxcdUE5RkZcXHVBQTM3LVxcdUFBM0ZcXHVBQTRFXFx1QUE0RlxcdUFBNUFcXHVBQTVCXFx1QUFDMy1cXHVBQURBXFx1QUFGNy1cXHVBQjAwXFx1QUIwN1xcdUFCMDhcXHVBQjBGXFx1QUIxMFxcdUFCMTctXFx1QUIxRlxcdUFCMjdcXHVBQjJGXFx1QUI2Qy1cXHVBQjZGXFx1QUJFRVxcdUFCRUZcXHVBQkZBLVxcdUFCRkZcXHVEN0E0LVxcdUQ3QUZcXHVEN0M3LVxcdUQ3Q0FcXHVEN0ZDLVxcdUQ3RkZcXHVGQTZFXFx1RkE2RlxcdUZBREEtXFx1RkFGRlxcdUZCMDctXFx1RkIxMlxcdUZCMTgtXFx1RkIxQ1xcdUZCMzdcXHVGQjNEXFx1RkIzRlxcdUZCNDJcXHVGQjQ1XFx1RkJDMi1cXHVGQkQyXFx1RkQ0MC1cXHVGRDRGXFx1RkQ5MFxcdUZEOTFcXHVGREM4LVxcdUZERUZcXHVGREZFXFx1RkRGRlxcdUZFMUEtXFx1RkUxRlxcdUZFNTNcXHVGRTY3XFx1RkU2Qy1cXHVGRTZGXFx1RkU3NVxcdUZFRkRcXHVGRUZFXFx1RkYwMFxcdUZGQkYtXFx1RkZDMVxcdUZGQzhcXHVGRkM5XFx1RkZEMFxcdUZGRDFcXHVGRkQ4XFx1RkZEOVxcdUZGREQtXFx1RkZERlxcdUZGRTdcXHVGRkVGLVxcdUZGRjhcXHVGRkZFXFx1RkZGRicsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVEQzBDXFx1REMyN1xcdURDM0JcXHVEQzNFXFx1REM0RVxcdURDNEZcXHVEQzVFLVxcdURDN0ZcXHVEQ0ZCLVxcdURDRkZcXHVERDAzLVxcdUREMDZcXHVERDM0LVxcdUREMzZcXHVERDhGXFx1REQ5RC1cXHVERDlGXFx1RERBMS1cXHVERENGXFx1RERGRS1cXHVERTdGXFx1REU5RC1cXHVERTlGXFx1REVEMS1cXHVERURGXFx1REVGQy1cXHVERUZGXFx1REYyNC1cXHVERjJDXFx1REY0Qi1cXHVERjRGXFx1REY3Qi1cXHVERjdGXFx1REY5RVxcdURGQzQtXFx1REZDN1xcdURGRDYtXFx1REZGRl18XFx1RDgwMVtcXHVEQzlFXFx1REM5RlxcdURDQUEtXFx1RENBRlxcdURDRDQtXFx1RENEN1xcdURDRkMtXFx1RENGRlxcdUREMjgtXFx1REQyRlxcdURENjQtXFx1REQ2RVxcdURENzAtXFx1RERGRlxcdURGMzctXFx1REYzRlxcdURGNTYtXFx1REY1RlxcdURGNjgtXFx1REZGRl18XFx1RDgwMltcXHVEQzA2XFx1REMwN1xcdURDMDlcXHVEQzM2XFx1REMzOS1cXHVEQzNCXFx1REMzRFxcdURDM0VcXHVEQzU2XFx1REM5Ri1cXHVEQ0E2XFx1RENCMC1cXHVEQ0RGXFx1RENGM1xcdURDRjYtXFx1RENGQVxcdUREMUMtXFx1REQxRVxcdUREM0EtXFx1REQzRVxcdURENDAtXFx1REQ3RlxcdUREQjgtXFx1RERCQlxcdURERDBcXHVEREQxXFx1REUwNFxcdURFMDctXFx1REUwQlxcdURFMTRcXHVERTE4XFx1REUzNlxcdURFMzdcXHVERTNCLVxcdURFM0VcXHVERTQ5LVxcdURFNEZcXHVERTU5LVxcdURFNUZcXHVERUEwLVxcdURFQkZcXHVERUU3LVxcdURFRUFcXHVERUY3LVxcdURFRkZcXHVERjM2LVxcdURGMzhcXHVERjU2XFx1REY1N1xcdURGNzMtXFx1REY3N1xcdURGOTItXFx1REY5OFxcdURGOUQtXFx1REZBOFxcdURGQjAtXFx1REZGRl18XFx1RDgwM1tcXHVEQzQ5LVxcdURDN0ZcXHVEQ0IzLVxcdURDQkZcXHVEQ0YzLVxcdURDRjlcXHVERDI4LVxcdUREMkZcXHVERDNBLVxcdURFNUZcXHVERTdGXFx1REVBQVxcdURFQUVcXHVERUFGXFx1REVCMi1cXHVERUZGXFx1REYyOC1cXHVERjJGXFx1REY1QS1cXHVERkFGXFx1REZDQy1cXHVERkRGXFx1REZGNy1cXHVERkZGXXxcXHVEODA0W1xcdURDNEUtXFx1REM1MVxcdURDNzAtXFx1REM3RVxcdURDQzItXFx1RENDQ1xcdURDQ0VcXHVEQ0NGXFx1RENFOS1cXHVEQ0VGXFx1RENGQS1cXHVEQ0ZGXFx1REQzNVxcdURENDgtXFx1REQ0RlxcdURENzctXFx1REQ3RlxcdURERTBcXHVEREY1LVxcdURERkZcXHVERTEyXFx1REUzRi1cXHVERTdGXFx1REU4N1xcdURFODlcXHVERThFXFx1REU5RVxcdURFQUEtXFx1REVBRlxcdURFRUItXFx1REVFRlxcdURFRkEtXFx1REVGRlxcdURGMDRcXHVERjBEXFx1REYwRVxcdURGMTFcXHVERjEyXFx1REYyOVxcdURGMzFcXHVERjM0XFx1REYzQVxcdURGNDVcXHVERjQ2XFx1REY0OVxcdURGNEFcXHVERjRFXFx1REY0RlxcdURGNTEtXFx1REY1NlxcdURGNTgtXFx1REY1Q1xcdURGNjRcXHVERjY1XFx1REY2RC1cXHVERjZGXFx1REY3NS1cXHVERkZGXXxcXHVEODA1W1xcdURDNUNcXHVEQzYyLVxcdURDN0ZcXHVEQ0M4LVxcdURDQ0ZcXHVEQ0RBLVxcdUREN0ZcXHVEREI2XFx1RERCN1xcdUREREUtXFx1RERGRlxcdURFNDUtXFx1REU0RlxcdURFNUEtXFx1REU1RlxcdURFNkQtXFx1REU3RlxcdURFQjktXFx1REVCRlxcdURFQ0EtXFx1REVGRlxcdURGMUJcXHVERjFDXFx1REYyQy1cXHVERjJGXFx1REY0MC1cXHVERkZGXXxcXHVEODA2W1xcdURDM0MtXFx1REM5RlxcdURDRjMtXFx1RENGRVxcdUREMDdcXHVERDA4XFx1REQwQVxcdUREMEJcXHVERDE0XFx1REQxN1xcdUREMzZcXHVERDM5XFx1REQzQVxcdURENDctXFx1REQ0RlxcdURENUEtXFx1REQ5RlxcdUREQThcXHVEREE5XFx1REREOFxcdURERDlcXHVEREU1LVxcdURERkZcXHVERTQ4LVxcdURFNEZcXHVERUEzLVxcdURFQkZcXHVERUY5LVxcdURGRkZdfFxcdUQ4MDdbXFx1REMwOVxcdURDMzdcXHVEQzQ2LVxcdURDNEZcXHVEQzZELVxcdURDNkZcXHVEQzkwXFx1REM5MVxcdURDQThcXHVEQ0I3LVxcdURDRkZcXHVERDA3XFx1REQwQVxcdUREMzctXFx1REQzOVxcdUREM0JcXHVERDNFXFx1REQ0OC1cXHVERDRGXFx1REQ1QS1cXHVERDVGXFx1REQ2NlxcdURENjlcXHVERDhGXFx1REQ5MlxcdUREOTktXFx1REQ5RlxcdUREQUEtXFx1REVERlxcdURFRjktXFx1REZBRlxcdURGQjEtXFx1REZCRlxcdURGRjItXFx1REZGRV18XFx1RDgwOFtcXHVERjlBLVxcdURGRkZdfFxcdUQ4MDlbXFx1REM2RlxcdURDNzUtXFx1REM3RlxcdURENDQtXFx1REZGRl18W1xcdUQ4MEFcXHVEODBCXFx1RDgwRS1cXHVEODEwXFx1RDgxMi1cXHVEODE5XFx1RDgyNC1cXHVEODJCXFx1RDgyRFxcdUQ4MkVcXHVEODMwLVxcdUQ4MzNcXHVEODM3XFx1RDgzOVxcdUQ4M0ZcXHVEODdCLVxcdUQ4N0RcXHVEODdGXFx1RDg4NS1cXHVEQjNGXFx1REI0MS1cXHVEQjdGXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMyRlxcdURDMzktXFx1REZGRl18XFx1RDgxMVtcXHVERTQ3LVxcdURGRkZdfFxcdUQ4MUFbXFx1REUzOS1cXHVERTNGXFx1REU1RlxcdURFNkEtXFx1REU2RFxcdURFNzAtXFx1REVDRlxcdURFRUVcXHVERUVGXFx1REVGNi1cXHVERUZGXFx1REY0Ni1cXHVERjRGXFx1REY1QVxcdURGNjJcXHVERjc4LVxcdURGN0NcXHVERjkwLVxcdURGRkZdfFxcdUQ4MUJbXFx1REMwMC1cXHVERTNGXFx1REU5Qi1cXHVERUZGXFx1REY0Qi1cXHVERjRFXFx1REY4OC1cXHVERjhFXFx1REZBMC1cXHVERkRGXFx1REZFNS1cXHVERkVGXFx1REZGMi1cXHVERkZGXXxcXHVEODIxW1xcdURGRjgtXFx1REZGRl18XFx1RDgyM1tcXHVEQ0Q2LVxcdURDRkZcXHVERDA5LVxcdURGRkZdfFxcdUQ4MkNbXFx1REQxRi1cXHVERDRGXFx1REQ1My1cXHVERDYzXFx1REQ2OC1cXHVERDZGXFx1REVGQy1cXHVERkZGXXxcXHVEODJGW1xcdURDNkItXFx1REM2RlxcdURDN0QtXFx1REM3RlxcdURDODktXFx1REM4RlxcdURDOUFcXHVEQzlCXFx1RENBNC1cXHVERkZGXXxcXHVEODM0W1xcdURDRjYtXFx1RENGRlxcdUREMjdcXHVERDI4XFx1RERFOS1cXHVEREZGXFx1REU0Ni1cXHVERURGXFx1REVGNC1cXHVERUZGXFx1REY1Ny1cXHVERjVGXFx1REY3OS1cXHVERkZGXXxcXHVEODM1W1xcdURDNTVcXHVEQzlEXFx1RENBMFxcdURDQTFcXHVEQ0EzXFx1RENBNFxcdURDQTdcXHVEQ0E4XFx1RENBRFxcdURDQkFcXHVEQ0JDXFx1RENDNFxcdUREMDZcXHVERDBCXFx1REQwQ1xcdUREMTVcXHVERDFEXFx1REQzQVxcdUREM0ZcXHVERDQ1XFx1REQ0Ny1cXHVERDQ5XFx1REQ1MVxcdURFQTZcXHVERUE3XFx1REZDQ1xcdURGQ0RdfFxcdUQ4MzZbXFx1REU4Qy1cXHVERTlBXFx1REVBMFxcdURFQjAtXFx1REZGRl18XFx1RDgzOFtcXHVEQzA3XFx1REMxOVxcdURDMUFcXHVEQzIyXFx1REMyNVxcdURDMkItXFx1RENGRlxcdUREMkQtXFx1REQyRlxcdUREM0VcXHVERDNGXFx1REQ0QS1cXHVERDREXFx1REQ1MC1cXHVERUJGXFx1REVGQS1cXHVERUZFXFx1REYwMC1cXHVERkZGXXxcXHVEODNBW1xcdURDQzVcXHVEQ0M2XFx1RENENy1cXHVEQ0ZGXFx1REQ0Qy1cXHVERDRGXFx1REQ1QS1cXHVERDVEXFx1REQ2MC1cXHVERkZGXXxcXHVEODNCW1xcdURDMDAtXFx1REM3MFxcdURDQjUtXFx1REQwMFxcdUREM0UtXFx1RERGRlxcdURFMDRcXHVERTIwXFx1REUyM1xcdURFMjVcXHVERTI2XFx1REUyOFxcdURFMzNcXHVERTM4XFx1REUzQVxcdURFM0MtXFx1REU0MVxcdURFNDMtXFx1REU0NlxcdURFNDhcXHVERTRBXFx1REU0Q1xcdURFNTBcXHVERTUzXFx1REU1NVxcdURFNTZcXHVERTU4XFx1REU1QVxcdURFNUNcXHVERTVFXFx1REU2MFxcdURFNjNcXHVERTY1XFx1REU2NlxcdURFNkJcXHVERTczXFx1REU3OFxcdURFN0RcXHVERTdGXFx1REU4QVxcdURFOUMtXFx1REVBMFxcdURFQTRcXHVERUFBXFx1REVCQy1cXHVERUVGXFx1REVGMi1cXHVERkZGXXxcXHVEODNDW1xcdURDMkMtXFx1REMyRlxcdURDOTQtXFx1REM5RlxcdURDQUZcXHVEQ0IwXFx1RENDMFxcdURDRDBcXHVEQ0Y2LVxcdURDRkZcXHVEREFFLVxcdURERTVcXHVERTAzLVxcdURFMEZcXHVERTNDLVxcdURFM0ZcXHVERTQ5LVxcdURFNEZcXHVERTUyLVxcdURFNUZcXHVERTY2LVxcdURFRkZdfFxcdUQ4M0RbXFx1REVEOC1cXHVERURGXFx1REVFRC1cXHVERUVGXFx1REVGRC1cXHVERUZGXFx1REY3NC1cXHVERjdGXFx1REZEOS1cXHVERkRGXFx1REZFQy1cXHVERkZGXXxcXHVEODNFW1xcdURDMEMtXFx1REMwRlxcdURDNDgtXFx1REM0RlxcdURDNUEtXFx1REM1RlxcdURDODgtXFx1REM4RlxcdURDQUVcXHVEQ0FGXFx1RENCMi1cXHVEQ0ZGXFx1REQ3OVxcdUREQ0NcXHVERTU0LVxcdURFNUZcXHVERTZFXFx1REU2RlxcdURFNzUtXFx1REU3N1xcdURFN0ItXFx1REU3RlxcdURFODctXFx1REU4RlxcdURFQTktXFx1REVBRlxcdURFQjctXFx1REVCRlxcdURFQzMtXFx1REVDRlxcdURFRDctXFx1REVGRlxcdURGOTNcXHVERkNCLVxcdURGRUZcXHVERkZBLVxcdURGRkZdfFxcdUQ4NjlbXFx1REVERS1cXHVERUZGXXxcXHVEODZEW1xcdURGMzUtXFx1REYzRl18XFx1RDg2RVtcXHVEQzFFXFx1REMxRl18XFx1RDg3M1tcXHVERUEyLVxcdURFQUZdfFxcdUQ4N0FbXFx1REZFMS1cXHVERkZGXXxcXHVEODdFW1xcdURFMUUtXFx1REZGRl18XFx1RDg4NFtcXHVERjRCLVxcdURGRkZdfFxcdURCNDBbXFx1REMwMFxcdURDMDItXFx1REMxRlxcdURDODAtXFx1RENGRlxcdURERjAtXFx1REZGRl18W1xcdURCQkZcXHVEQkZGXVtcXHVERkZFXFx1REZGRl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NvJyxcbiAgICAgICAgJ2FsaWFzJzogJ1ByaXZhdGVfVXNlJyxcbiAgICAgICAgJ2JtcCc6ICdcXHVFMDAwLVxcdUY4RkYnLFxuICAgICAgICAnYXN0cmFsJzogJ1tcXHVEQjgwLVxcdURCQkVcXHVEQkMwLVxcdURCRkVdW1xcdURDMDAtXFx1REZGRl18W1xcdURCQkZcXHVEQkZGXVtcXHVEQzAwLVxcdURGRkRdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdDcycsXG4gICAgICAgICdhbGlhcyc6ICdTdXJyb2dhdGUnLFxuICAgICAgICAnYm1wJzogJ1xcdUQ4MDAtXFx1REZGRidcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTCcsXG4gICAgICAgICdhbGlhcyc6ICdMZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWmEtelxceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEM3XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDQtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1NC1cXHUwRDU2XFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4Ni1cXHUwRThBXFx1MEU4Qy1cXHUwRUEzXFx1MEVBNVxcdTBFQTctXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4ODRcXHUxODg3LVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0JGXFx1QTdDMi1cXHVBN0NBXFx1QTdGNS1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2OVxcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQycsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0MFxcdURGNDItXFx1REY0OVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRl18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURFODAtXFx1REVBOVxcdURFQjBcXHVERUIxXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGQjAtXFx1REZDNFxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ0N1xcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1Ri1cXHVEQzYxXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDJGXFx1REQzRlxcdURENDFcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMlxcdURGQjBdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODIyXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjNbXFx1REMwMC1cXHVEQ0Q1XFx1REQwMC1cXHVERDA4XXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRERcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1RDg4NFtcXHVEQzAwLVxcdURGNEFdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdMQycsXG4gICAgICAgICdhbGlhcyc6ICdDYXNlZF9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWmEtelxceEI1XFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAxQkFcXHUwMUJDLVxcdTAxQkZcXHUwMUM0LVxcdTAyOTNcXHUwMjk1LVxcdTAyQUZcXHUwMzcwLVxcdTAzNzNcXHUwMzc2XFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NjAtXFx1MDU4OFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGRC1cXHUxMEZGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUQwMC1cXHUxRDJCXFx1MUQ2Qi1cXHUxRDc3XFx1MUQ3OS1cXHUxRDlBXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzNFxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDN0JcXHUyQzdFLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1QTY0MC1cXHVBNjZEXFx1QTY4MC1cXHVBNjlCXFx1QTcyMi1cXHVBNzZGXFx1QTc3MS1cXHVBNzg3XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0JGXFx1QTdDMi1cXHVBN0NBXFx1QTdGNVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMDAtXFx1REM0RlxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODNBW1xcdUREMDAtXFx1REQ0M10nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0xsJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xvd2VyY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ2EtelxceEI1XFx4REYtXFx4RjZcXHhGOC1cXHhGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzdcXHUwMTM4XFx1MDEzQVxcdTAxM0NcXHUwMTNFXFx1MDE0MFxcdTAxNDJcXHUwMTQ0XFx1MDE0NlxcdTAxNDhcXHUwMTQ5XFx1MDE0QlxcdTAxNERcXHUwMTRGXFx1MDE1MVxcdTAxNTNcXHUwMTU1XFx1MDE1N1xcdTAxNTlcXHUwMTVCXFx1MDE1RFxcdTAxNUZcXHUwMTYxXFx1MDE2M1xcdTAxNjVcXHUwMTY3XFx1MDE2OVxcdTAxNkJcXHUwMTZEXFx1MDE2RlxcdTAxNzFcXHUwMTczXFx1MDE3NVxcdTAxNzdcXHUwMTdBXFx1MDE3Q1xcdTAxN0UtXFx1MDE4MFxcdTAxODNcXHUwMTg1XFx1MDE4OFxcdTAxOENcXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUFcXHUwMUFCXFx1MDFBRFxcdTAxQjBcXHUwMUI0XFx1MDFCNlxcdTAxQjlcXHUwMUJBXFx1MDFCRC1cXHUwMUJGXFx1MDFDNlxcdTAxQzlcXHUwMUNDXFx1MDFDRVxcdTAxRDBcXHUwMUQyXFx1MDFENFxcdTAxRDZcXHUwMUQ4XFx1MDFEQVxcdTAxRENcXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGXFx1MDFGMFxcdTAxRjNcXHUwMUY1XFx1MDFGOVxcdTAxRkJcXHUwMUZEXFx1MDFGRlxcdTAyMDFcXHUwMjAzXFx1MDIwNVxcdTAyMDdcXHUwMjA5XFx1MDIwQlxcdTAyMERcXHUwMjBGXFx1MDIxMVxcdTAyMTNcXHUwMjE1XFx1MDIxN1xcdTAyMTlcXHUwMjFCXFx1MDIxRFxcdTAyMUZcXHUwMjIxXFx1MDIyM1xcdTAyMjVcXHUwMjI3XFx1MDIyOVxcdTAyMkJcXHUwMjJEXFx1MDIyRlxcdTAyMzFcXHUwMjMzLVxcdTAyMzlcXHUwMjNDXFx1MDIzRlxcdTAyNDBcXHUwMjQyXFx1MDI0N1xcdTAyNDlcXHUwMjRCXFx1MDI0RFxcdTAyNEYtXFx1MDI5M1xcdTAyOTUtXFx1MDJBRlxcdTAzNzFcXHUwMzczXFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzOTBcXHUwM0FDLVxcdTAzQ0VcXHUwM0QwXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCXFx1MDNGQ1xcdTA0MzAtXFx1MDQ1RlxcdTA0NjFcXHUwNDYzXFx1MDQ2NVxcdTA0NjdcXHUwNDY5XFx1MDQ2QlxcdTA0NkRcXHUwNDZGXFx1MDQ3MVxcdTA0NzNcXHUwNDc1XFx1MDQ3N1xcdTA0NzlcXHUwNDdCXFx1MDQ3RFxcdTA0N0ZcXHUwNDgxXFx1MDQ4QlxcdTA0OERcXHUwNDhGXFx1MDQ5MVxcdTA0OTNcXHUwNDk1XFx1MDQ5N1xcdTA0OTlcXHUwNDlCXFx1MDQ5RFxcdTA0OUZcXHUwNEExXFx1MDRBM1xcdTA0QTVcXHUwNEE3XFx1MDRBOVxcdTA0QUJcXHUwNEFEXFx1MDRBRlxcdTA0QjFcXHUwNEIzXFx1MDRCNVxcdTA0QjdcXHUwNEI5XFx1MDRCQlxcdTA0QkRcXHUwNEJGXFx1MDRDMlxcdTA0QzRcXHUwNEM2XFx1MDRDOFxcdTA0Q0FcXHUwNENDXFx1MDRDRVxcdTA0Q0ZcXHUwNEQxXFx1MDREM1xcdTA0RDVcXHUwNEQ3XFx1MDREOVxcdTA0REJcXHUwNEREXFx1MDRERlxcdTA0RTFcXHUwNEUzXFx1MDRFNVxcdTA0RTdcXHUwNEU5XFx1MDRFQlxcdTA0RURcXHUwNEVGXFx1MDRGMVxcdTA0RjNcXHUwNEY1XFx1MDRGN1xcdTA0RjlcXHUwNEZCXFx1MDRGRFxcdTA0RkZcXHUwNTAxXFx1MDUwM1xcdTA1MDVcXHUwNTA3XFx1MDUwOVxcdTA1MEJcXHUwNTBEXFx1MDUwRlxcdTA1MTFcXHUwNTEzXFx1MDUxNVxcdTA1MTdcXHUwNTE5XFx1MDUxQlxcdTA1MURcXHUwNTFGXFx1MDUyMVxcdTA1MjNcXHUwNTI1XFx1MDUyN1xcdTA1MjlcXHUwNTJCXFx1MDUyRFxcdTA1MkZcXHUwNTYwLVxcdTA1ODhcXHUxMEQwLVxcdTEwRkFcXHUxMEZELVxcdTEwRkZcXHUxM0Y4LVxcdTEzRkRcXHUxQzgwLVxcdTFDODhcXHUxRDAwLVxcdTFEMkJcXHUxRDZCLVxcdTFENzdcXHUxRDc5LVxcdTFEOUFcXHUxRTAxXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MUUwOVxcdTFFMEJcXHUxRTBEXFx1MUUwRlxcdTFFMTFcXHUxRTEzXFx1MUUxNVxcdTFFMTdcXHUxRTE5XFx1MUUxQlxcdTFFMURcXHUxRTFGXFx1MUUyMVxcdTFFMjNcXHUxRTI1XFx1MUUyN1xcdTFFMjlcXHUxRTJCXFx1MUUyRFxcdTFFMkZcXHUxRTMxXFx1MUUzM1xcdTFFMzVcXHUxRTM3XFx1MUUzOVxcdTFFM0JcXHUxRTNEXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MUU0NVxcdTFFNDdcXHUxRTQ5XFx1MUU0QlxcdTFFNERcXHUxRTRGXFx1MUU1MVxcdTFFNTNcXHUxRTU1XFx1MUU1N1xcdTFFNTlcXHUxRTVCXFx1MUU1RFxcdTFFNUZcXHUxRTYxXFx1MUU2M1xcdTFFNjVcXHUxRTY3XFx1MUU2OVxcdTFFNkJcXHUxRTZEXFx1MUU2RlxcdTFFNzFcXHUxRTczXFx1MUU3NVxcdTFFNzdcXHUxRTc5XFx1MUU3QlxcdTFFN0RcXHUxRTdGXFx1MUU4MVxcdTFFODNcXHUxRTg1XFx1MUU4N1xcdTFFODlcXHUxRThCXFx1MUU4RFxcdTFFOEZcXHUxRTkxXFx1MUU5M1xcdTFFOTUtXFx1MUU5RFxcdTFFOUZcXHUxRUExXFx1MUVBM1xcdTFFQTVcXHUxRUE3XFx1MUVBOVxcdTFFQUJcXHUxRUFEXFx1MUVBRlxcdTFFQjFcXHUxRUIzXFx1MUVCNVxcdTFFQjdcXHUxRUI5XFx1MUVCQlxcdTFFQkRcXHUxRUJGXFx1MUVDMVxcdTFFQzNcXHUxRUM1XFx1MUVDN1xcdTFFQzlcXHUxRUNCXFx1MUVDRFxcdTFFQ0ZcXHUxRUQxXFx1MUVEM1xcdTFFRDVcXHUxRUQ3XFx1MUVEOVxcdTFFREJcXHUxRUREXFx1MUVERlxcdTFFRTFcXHUxRUUzXFx1MUVFNVxcdTFFRTdcXHUxRUU5XFx1MUVFQlxcdTFFRURcXHUxRUVGXFx1MUVGMVxcdTFFRjNcXHUxRUY1XFx1MUVGN1xcdTFFRjlcXHUxRUZCXFx1MUVGRFxcdTFFRkYtXFx1MUYwN1xcdTFGMTAtXFx1MUYxNVxcdTFGMjAtXFx1MUYyN1xcdTFGMzAtXFx1MUYzN1xcdTFGNDAtXFx1MUY0NVxcdTFGNTAtXFx1MUY1N1xcdTFGNjAtXFx1MUY2N1xcdTFGNzAtXFx1MUY3RFxcdTFGODAtXFx1MUY4N1xcdTFGOTAtXFx1MUY5N1xcdTFGQTAtXFx1MUZBN1xcdTFGQjAtXFx1MUZCNFxcdTFGQjZcXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzZcXHUxRkM3XFx1MUZEMC1cXHUxRkQzXFx1MUZENlxcdTFGRDdcXHUxRkUwLVxcdTFGRTdcXHUxRkYyLVxcdTFGRjRcXHUxRkY2XFx1MUZGN1xcdTIxMEFcXHUyMTBFXFx1MjEwRlxcdTIxMTNcXHUyMTJGXFx1MjEzNFxcdTIxMzlcXHUyMTNDXFx1MjEzRFxcdTIxNDYtXFx1MjE0OVxcdTIxNEVcXHUyMTg0XFx1MkMzMC1cXHUyQzVFXFx1MkM2MVxcdTJDNjVcXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzNcXHUyQzc0XFx1MkM3Ni1cXHUyQzdCXFx1MkM4MVxcdTJDODNcXHUyQzg1XFx1MkM4N1xcdTJDODlcXHUyQzhCXFx1MkM4RFxcdTJDOEZcXHUyQzkxXFx1MkM5M1xcdTJDOTVcXHUyQzk3XFx1MkM5OVxcdTJDOUJcXHUyQzlEXFx1MkM5RlxcdTJDQTFcXHUyQ0EzXFx1MkNBNVxcdTJDQTdcXHUyQ0E5XFx1MkNBQlxcdTJDQURcXHUyQ0FGXFx1MkNCMVxcdTJDQjNcXHUyQ0I1XFx1MkNCN1xcdTJDQjlcXHUyQ0JCXFx1MkNCRFxcdTJDQkZcXHUyQ0MxXFx1MkNDM1xcdTJDQzVcXHUyQ0M3XFx1MkNDOVxcdTJDQ0JcXHUyQ0NEXFx1MkNDRlxcdTJDRDFcXHUyQ0QzXFx1MkNENVxcdTJDRDdcXHUyQ0Q5XFx1MkNEQlxcdTJDRERcXHUyQ0RGXFx1MkNFMVxcdTJDRTNcXHUyQ0U0XFx1MkNFQ1xcdTJDRUVcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHVBNjQxXFx1QTY0M1xcdUE2NDVcXHVBNjQ3XFx1QTY0OVxcdUE2NEJcXHVBNjREXFx1QTY0RlxcdUE2NTFcXHVBNjUzXFx1QTY1NVxcdUE2NTdcXHVBNjU5XFx1QTY1QlxcdUE2NURcXHVBNjVGXFx1QTY2MVxcdUE2NjNcXHVBNjY1XFx1QTY2N1xcdUE2NjlcXHVBNjZCXFx1QTY2RFxcdUE2ODFcXHVBNjgzXFx1QTY4NVxcdUE2ODdcXHVBNjg5XFx1QTY4QlxcdUE2OERcXHVBNjhGXFx1QTY5MVxcdUE2OTNcXHVBNjk1XFx1QTY5N1xcdUE2OTlcXHVBNjlCXFx1QTcyM1xcdUE3MjVcXHVBNzI3XFx1QTcyOVxcdUE3MkJcXHVBNzJEXFx1QTcyRi1cXHVBNzMxXFx1QTczM1xcdUE3MzVcXHVBNzM3XFx1QTczOVxcdUE3M0JcXHVBNzNEXFx1QTczRlxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3NDdcXHVBNzQ5XFx1QTc0QlxcdUE3NERcXHVBNzRGXFx1QTc1MVxcdUE3NTNcXHVBNzU1XFx1QTc1N1xcdUE3NTlcXHVBNzVCXFx1QTc1RFxcdUE3NUZcXHVBNzYxXFx1QTc2M1xcdUE3NjVcXHVBNzY3XFx1QTc2OVxcdUE3NkJcXHVBNzZEXFx1QTc2RlxcdUE3NzEtXFx1QTc3OFxcdUE3N0FcXHVBNzdDXFx1QTc3RlxcdUE3ODFcXHVBNzgzXFx1QTc4NVxcdUE3ODdcXHVBNzhDXFx1QTc4RVxcdUE3OTFcXHVBNzkzLVxcdUE3OTVcXHVBNzk3XFx1QTc5OVxcdUE3OUJcXHVBNzlEXFx1QTc5RlxcdUE3QTFcXHVBN0EzXFx1QTdBNVxcdUE3QTdcXHVBN0E5XFx1QTdBRlxcdUE3QjVcXHVBN0I3XFx1QTdCOVxcdUE3QkJcXHVBN0JEXFx1QTdCRlxcdUE3QzNcXHVBN0M4XFx1QTdDQVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkY0MS1cXHVGRjVBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMjgtXFx1REM0RlxcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENDMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNjAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzFBLVxcdURDMzNcXHVEQzRFLVxcdURDNTRcXHVEQzU2LVxcdURDNjdcXHVEQzgyLVxcdURDOUJcXHVEQ0I2LVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1RENFQS1cXHVERDAzXFx1REQxRS1cXHVERDM3XFx1REQ1Mi1cXHVERDZCXFx1REQ4Ni1cXHVERDlGXFx1RERCQS1cXHVEREQzXFx1RERFRS1cXHVERTA3XFx1REUyMi1cXHVERTNCXFx1REU1Ni1cXHVERTZGXFx1REU4QS1cXHVERUE1XFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUUxXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjFCXFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjU1XFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERjhGXFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkM5XFx1REZDQl18XFx1RDgzQVtcXHVERDIyLVxcdURENDNdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdMbScsXG4gICAgICAgICdhbGlhcyc6ICdNb2RpZmllcl9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTAyQjAtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3NFxcdTAzN0FcXHUwNTU5XFx1MDY0MFxcdTA2RTVcXHUwNkU2XFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDk3MVxcdTBFNDZcXHUwRUM2XFx1MTBGQ1xcdTE3RDdcXHUxODQzXFx1MUFBN1xcdTFDNzgtXFx1MUM3RFxcdTFEMkMtXFx1MUQ2QVxcdTFENzhcXHUxRDlCLVxcdTFEQkZcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTJDN0NcXHUyQzdEXFx1MkQ2RlxcdTJFMkZcXHUzMDA1XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwOURcXHUzMDlFXFx1MzBGQy1cXHUzMEZFXFx1QTAxNVxcdUE0RjgtXFx1QTRGRFxcdUE2MENcXHVBNjdGXFx1QTY5Q1xcdUE2OURcXHVBNzE3LVxcdUE3MUZcXHVBNzcwXFx1QTc4OFxcdUE3RjhcXHVBN0Y5XFx1QTlDRlxcdUE5RTZcXHVBQTcwXFx1QUFERFxcdUFBRjNcXHVBQUY0XFx1QUI1Qy1cXHVBQjVGXFx1QUI2OVxcdUZGNzBcXHVGRjlFXFx1RkY5RicsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgxQVtcXHVERjQwLVxcdURGNDNdfFxcdUQ4MUJbXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODM4W1xcdUREMzctXFx1REQzRF18XFx1RDgzQVxcdURENEInXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0xvJyxcbiAgICAgICAgJ2FsaWFzJzogJ090aGVyX0xldHRlcicsXG4gICAgICAgICdibXAnOiAnXFx4QUFcXHhCQVxcdTAxQkJcXHUwMUMwLVxcdTAxQzNcXHUwMjk0XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjNGXFx1MDY0MS1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwODAwLVxcdTA4MTVcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QzdcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzItXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTEwMC1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0RDXFx1MTgyMC1cXHUxODQyXFx1MTg0NC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzc3XFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MjEzNS1cXHUyMTM4XFx1MkQzMC1cXHUyRDY3XFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MzAwNlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTAxNFxcdUEwMTYtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGN1xcdUE1MDAtXFx1QTYwQlxcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY2RVxcdUE2QTAtXFx1QTZFNVxcdUE3OEZcXHVBN0Y3XFx1QTdGQi1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlFMC1cXHVBOUU0XFx1QTlFNy1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTZGXFx1QUE3MS1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQlxcdUFBRENcXHVBQUUwLVxcdUFBRUFcXHVBQUYyXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkY2Ni1cXHVGRjZGXFx1RkY3MS1cXHVGRjlEXFx1RkZBMC1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDNTAtXFx1REM5RFxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REQwMC1cXHVERDIzXFx1REU4MC1cXHVERUE5XFx1REVCMFxcdURFQjFcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZCMC1cXHVERkM0XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDQ3XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGLVxcdURDNjFcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0ZGLVxcdUREMDZcXHVERDA5XFx1REQwQy1cXHVERDEzXFx1REQxNVxcdUREMTZcXHVERDE4LVxcdUREMkZcXHVERDNGXFx1REQ0MVxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXFx1REZCMF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REM4MC1cXHVERDQzXXxbXFx1RDgwQ1xcdUQ4MUMtXFx1RDgyMFxcdUQ4MjJcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzlcXHVEODgwLVxcdUQ4ODNdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNEFcXHVERjUwXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyM1tcXHVEQzAwLVxcdURDRDVcXHVERDAwLVxcdUREMDhdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNF18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVERFxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0x0JyxcbiAgICAgICAgJ2FsaWFzJzogJ1RpdGxlY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTAxQzVcXHUwMUM4XFx1MDFDQlxcdTAxRjJcXHUxRjg4LVxcdTFGOEZcXHUxRjk4LVxcdTFGOUZcXHUxRkE4LVxcdTFGQUZcXHUxRkJDXFx1MUZDQ1xcdTFGRkMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0x1JyxcbiAgICAgICAgJ2FsaWFzJzogJ1VwcGVyY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWlxceEMwLVxceEQ2XFx4RDgtXFx4REVcXHUwMTAwXFx1MDEwMlxcdTAxMDRcXHUwMTA2XFx1MDEwOFxcdTAxMEFcXHUwMTBDXFx1MDEwRVxcdTAxMTBcXHUwMTEyXFx1MDExNFxcdTAxMTZcXHUwMTE4XFx1MDExQVxcdTAxMUNcXHUwMTFFXFx1MDEyMFxcdTAxMjJcXHUwMTI0XFx1MDEyNlxcdTAxMjhcXHUwMTJBXFx1MDEyQ1xcdTAxMkVcXHUwMTMwXFx1MDEzMlxcdTAxMzRcXHUwMTM2XFx1MDEzOVxcdTAxM0JcXHUwMTNEXFx1MDEzRlxcdTAxNDFcXHUwMTQzXFx1MDE0NVxcdTAxNDdcXHUwMTRBXFx1MDE0Q1xcdTAxNEVcXHUwMTUwXFx1MDE1MlxcdTAxNTRcXHUwMTU2XFx1MDE1OFxcdTAxNUFcXHUwMTVDXFx1MDE1RVxcdTAxNjBcXHUwMTYyXFx1MDE2NFxcdTAxNjZcXHUwMTY4XFx1MDE2QVxcdTAxNkNcXHUwMTZFXFx1MDE3MFxcdTAxNzJcXHUwMTc0XFx1MDE3NlxcdTAxNzhcXHUwMTc5XFx1MDE3QlxcdTAxN0RcXHUwMTgxXFx1MDE4MlxcdTAxODRcXHUwMTg2XFx1MDE4N1xcdTAxODktXFx1MDE4QlxcdTAxOEUtXFx1MDE5MVxcdTAxOTNcXHUwMTk0XFx1MDE5Ni1cXHUwMTk4XFx1MDE5Q1xcdTAxOURcXHUwMTlGXFx1MDFBMFxcdTAxQTJcXHUwMUE0XFx1MDFBNlxcdTAxQTdcXHUwMUE5XFx1MDFBQ1xcdTAxQUVcXHUwMUFGXFx1MDFCMS1cXHUwMUIzXFx1MDFCNVxcdTAxQjdcXHUwMUI4XFx1MDFCQ1xcdTAxQzRcXHUwMUM3XFx1MDFDQVxcdTAxQ0RcXHUwMUNGXFx1MDFEMVxcdTAxRDNcXHUwMUQ1XFx1MDFEN1xcdTAxRDlcXHUwMURCXFx1MDFERVxcdTAxRTBcXHUwMUUyXFx1MDFFNFxcdTAxRTZcXHUwMUU4XFx1MDFFQVxcdTAxRUNcXHUwMUVFXFx1MDFGMVxcdTAxRjRcXHUwMUY2LVxcdTAxRjhcXHUwMUZBXFx1MDFGQ1xcdTAxRkVcXHUwMjAwXFx1MDIwMlxcdTAyMDRcXHUwMjA2XFx1MDIwOFxcdTAyMEFcXHUwMjBDXFx1MDIwRVxcdTAyMTBcXHUwMjEyXFx1MDIxNFxcdTAyMTZcXHUwMjE4XFx1MDIxQVxcdTAyMUNcXHUwMjFFXFx1MDIyMFxcdTAyMjJcXHUwMjI0XFx1MDIyNlxcdTAyMjhcXHUwMjJBXFx1MDIyQ1xcdTAyMkVcXHUwMjMwXFx1MDIzMlxcdTAyM0FcXHUwMjNCXFx1MDIzRFxcdTAyM0VcXHUwMjQxXFx1MDI0My1cXHUwMjQ2XFx1MDI0OFxcdTAyNEFcXHUwMjRDXFx1MDI0RVxcdTAzNzBcXHUwMzcyXFx1MDM3NlxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEVcXHUwMzhGXFx1MDM5MS1cXHUwM0ExXFx1MDNBMy1cXHUwM0FCXFx1MDNDRlxcdTAzRDItXFx1MDNENFxcdTAzRDhcXHUwM0RBXFx1MDNEQ1xcdTAzREVcXHUwM0UwXFx1MDNFMlxcdTAzRTRcXHUwM0U2XFx1MDNFOFxcdTAzRUFcXHUwM0VDXFx1MDNFRVxcdTAzRjRcXHUwM0Y3XFx1MDNGOVxcdTAzRkFcXHUwM0ZELVxcdTA0MkZcXHUwNDYwXFx1MDQ2MlxcdTA0NjRcXHUwNDY2XFx1MDQ2OFxcdTA0NkFcXHUwNDZDXFx1MDQ2RVxcdTA0NzBcXHUwNDcyXFx1MDQ3NFxcdTA0NzZcXHUwNDc4XFx1MDQ3QVxcdTA0N0NcXHUwNDdFXFx1MDQ4MFxcdTA0OEFcXHUwNDhDXFx1MDQ4RVxcdTA0OTBcXHUwNDkyXFx1MDQ5NFxcdTA0OTZcXHUwNDk4XFx1MDQ5QVxcdTA0OUNcXHUwNDlFXFx1MDRBMFxcdTA0QTJcXHUwNEE0XFx1MDRBNlxcdTA0QThcXHUwNEFBXFx1MDRBQ1xcdTA0QUVcXHUwNEIwXFx1MDRCMlxcdTA0QjRcXHUwNEI2XFx1MDRCOFxcdTA0QkFcXHUwNEJDXFx1MDRCRVxcdTA0QzBcXHUwNEMxXFx1MDRDM1xcdTA0QzVcXHUwNEM3XFx1MDRDOVxcdTA0Q0JcXHUwNENEXFx1MDREMFxcdTA0RDJcXHUwNEQ0XFx1MDRENlxcdTA0RDhcXHUwNERBXFx1MDREQ1xcdTA0REVcXHUwNEUwXFx1MDRFMlxcdTA0RTRcXHUwNEU2XFx1MDRFOFxcdTA0RUFcXHUwNEVDXFx1MDRFRVxcdTA0RjBcXHUwNEYyXFx1MDRGNFxcdTA0RjZcXHUwNEY4XFx1MDRGQVxcdTA0RkNcXHUwNEZFXFx1MDUwMFxcdTA1MDJcXHUwNTA0XFx1MDUwNlxcdTA1MDhcXHUwNTBBXFx1MDUwQ1xcdTA1MEVcXHUwNTEwXFx1MDUxMlxcdTA1MTRcXHUwNTE2XFx1MDUxOFxcdTA1MUFcXHUwNTFDXFx1MDUxRVxcdTA1MjBcXHUwNTIyXFx1MDUyNFxcdTA1MjZcXHUwNTI4XFx1MDUyQVxcdTA1MkNcXHUwNTJFXFx1MDUzMS1cXHUwNTU2XFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxM0EwLVxcdTEzRjVcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxRTAwXFx1MUUwMlxcdTFFMDRcXHUxRTA2XFx1MUUwOFxcdTFFMEFcXHUxRTBDXFx1MUUwRVxcdTFFMTBcXHUxRTEyXFx1MUUxNFxcdTFFMTZcXHUxRTE4XFx1MUUxQVxcdTFFMUNcXHUxRTFFXFx1MUUyMFxcdTFFMjJcXHUxRTI0XFx1MUUyNlxcdTFFMjhcXHUxRTJBXFx1MUUyQ1xcdTFFMkVcXHUxRTMwXFx1MUUzMlxcdTFFMzRcXHUxRTM2XFx1MUUzOFxcdTFFM0FcXHUxRTNDXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MUU0NFxcdTFFNDZcXHUxRTQ4XFx1MUU0QVxcdTFFNENcXHUxRTRFXFx1MUU1MFxcdTFFNTJcXHUxRTU0XFx1MUU1NlxcdTFFNThcXHUxRTVBXFx1MUU1Q1xcdTFFNUVcXHUxRTYwXFx1MUU2MlxcdTFFNjRcXHUxRTY2XFx1MUU2OFxcdTFFNkFcXHUxRTZDXFx1MUU2RVxcdTFFNzBcXHUxRTcyXFx1MUU3NFxcdTFFNzZcXHUxRTc4XFx1MUU3QVxcdTFFN0NcXHUxRTdFXFx1MUU4MFxcdTFFODJcXHUxRTg0XFx1MUU4NlxcdTFFODhcXHUxRThBXFx1MUU4Q1xcdTFFOEVcXHUxRTkwXFx1MUU5MlxcdTFFOTRcXHUxRTlFXFx1MUVBMFxcdTFFQTJcXHUxRUE0XFx1MUVBNlxcdTFFQThcXHUxRUFBXFx1MUVBQ1xcdTFFQUVcXHUxRUIwXFx1MUVCMlxcdTFFQjRcXHUxRUI2XFx1MUVCOFxcdTFFQkFcXHUxRUJDXFx1MUVCRVxcdTFFQzBcXHUxRUMyXFx1MUVDNFxcdTFFQzZcXHUxRUM4XFx1MUVDQVxcdTFFQ0NcXHUxRUNFXFx1MUVEMFxcdTFFRDJcXHUxRUQ0XFx1MUVENlxcdTFFRDhcXHUxRURBXFx1MUVEQ1xcdTFFREVcXHUxRUUwXFx1MUVFMlxcdTFFRTRcXHUxRUU2XFx1MUVFOFxcdTFFRUFcXHUxRUVDXFx1MUVFRVxcdTFFRjBcXHUxRUYyXFx1MUVGNFxcdTFFRjZcXHUxRUY4XFx1MUVGQVxcdTFFRkNcXHUxRUZFXFx1MUYwOC1cXHUxRjBGXFx1MUYxOC1cXHUxRjFEXFx1MUYyOC1cXHUxRjJGXFx1MUYzOC1cXHUxRjNGXFx1MUY0OC1cXHUxRjREXFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1RlxcdTFGNjgtXFx1MUY2RlxcdTFGQjgtXFx1MUZCQlxcdTFGQzgtXFx1MUZDQlxcdTFGRDgtXFx1MUZEQlxcdTFGRTgtXFx1MUZFQ1xcdTFGRjgtXFx1MUZGQlxcdTIxMDJcXHUyMTA3XFx1MjEwQi1cXHUyMTBEXFx1MjExMC1cXHUyMTEyXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMzAtXFx1MjEzM1xcdTIxM0VcXHUyMTNGXFx1MjE0NVxcdTIxODNcXHUyQzAwLVxcdTJDMkVcXHUyQzYwXFx1MkM2Mi1cXHUyQzY0XFx1MkM2N1xcdTJDNjlcXHUyQzZCXFx1MkM2RC1cXHUyQzcwXFx1MkM3MlxcdTJDNzVcXHUyQzdFLVxcdTJDODBcXHUyQzgyXFx1MkM4NFxcdTJDODZcXHUyQzg4XFx1MkM4QVxcdTJDOENcXHUyQzhFXFx1MkM5MFxcdTJDOTJcXHUyQzk0XFx1MkM5NlxcdTJDOThcXHUyQzlBXFx1MkM5Q1xcdTJDOUVcXHUyQ0EwXFx1MkNBMlxcdTJDQTRcXHUyQ0E2XFx1MkNBOFxcdTJDQUFcXHUyQ0FDXFx1MkNBRVxcdTJDQjBcXHUyQ0IyXFx1MkNCNFxcdTJDQjZcXHUyQ0I4XFx1MkNCQVxcdTJDQkNcXHUyQ0JFXFx1MkNDMFxcdTJDQzJcXHUyQ0M0XFx1MkNDNlxcdTJDQzhcXHUyQ0NBXFx1MkNDQ1xcdTJDQ0VcXHUyQ0QwXFx1MkNEMlxcdTJDRDRcXHUyQ0Q2XFx1MkNEOFxcdTJDREFcXHUyQ0RDXFx1MkNERVxcdTJDRTBcXHUyQ0UyXFx1MkNFQlxcdTJDRURcXHUyQ0YyXFx1QTY0MFxcdUE2NDJcXHVBNjQ0XFx1QTY0NlxcdUE2NDhcXHVBNjRBXFx1QTY0Q1xcdUE2NEVcXHVBNjUwXFx1QTY1MlxcdUE2NTRcXHVBNjU2XFx1QTY1OFxcdUE2NUFcXHVBNjVDXFx1QTY1RVxcdUE2NjBcXHVBNjYyXFx1QTY2NFxcdUE2NjZcXHVBNjY4XFx1QTY2QVxcdUE2NkNcXHVBNjgwXFx1QTY4MlxcdUE2ODRcXHVBNjg2XFx1QTY4OFxcdUE2OEFcXHVBNjhDXFx1QTY4RVxcdUE2OTBcXHVBNjkyXFx1QTY5NFxcdUE2OTZcXHVBNjk4XFx1QTY5QVxcdUE3MjJcXHVBNzI0XFx1QTcyNlxcdUE3MjhcXHVBNzJBXFx1QTcyQ1xcdUE3MkVcXHVBNzMyXFx1QTczNFxcdUE3MzZcXHVBNzM4XFx1QTczQVxcdUE3M0NcXHVBNzNFXFx1QTc0MFxcdUE3NDJcXHVBNzQ0XFx1QTc0NlxcdUE3NDhcXHVBNzRBXFx1QTc0Q1xcdUE3NEVcXHVBNzUwXFx1QTc1MlxcdUE3NTRcXHVBNzU2XFx1QTc1OFxcdUE3NUFcXHVBNzVDXFx1QTc1RVxcdUE3NjBcXHVBNzYyXFx1QTc2NFxcdUE3NjZcXHVBNzY4XFx1QTc2QVxcdUE3NkNcXHVBNzZFXFx1QTc3OVxcdUE3N0JcXHVBNzdEXFx1QTc3RVxcdUE3ODBcXHVBNzgyXFx1QTc4NFxcdUE3ODZcXHVBNzhCXFx1QTc4RFxcdUE3OTBcXHVBNzkyXFx1QTc5NlxcdUE3OThcXHVBNzlBXFx1QTc5Q1xcdUE3OUVcXHVBN0EwXFx1QTdBMlxcdUE3QTRcXHVBN0E2XFx1QTdBOFxcdUE3QUEtXFx1QTdBRVxcdUE3QjAtXFx1QTdCNFxcdUE3QjZcXHVBN0I4XFx1QTdCQVxcdUE3QkNcXHVBN0JFXFx1QTdDMlxcdUE3QzQtXFx1QTdDN1xcdUE3QzlcXHVBN0Y1XFx1RkYyMS1cXHVGRjNBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMDAtXFx1REMyN1xcdURDQjAtXFx1RENEM118XFx1RDgwM1tcXHVEQzgwLVxcdURDQjJdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0JGXXxcXHVEODFCW1xcdURFNDAtXFx1REU1Rl18XFx1RDgzNVtcXHVEQzAwLVxcdURDMTlcXHVEQzM0LVxcdURDNERcXHVEQzY4LVxcdURDODFcXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjVcXHVEQ0QwLVxcdURDRTlcXHVERDA0XFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMzhcXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENkMtXFx1REQ4NVxcdUREQTAtXFx1RERCOVxcdURERDQtXFx1RERFRFxcdURFMDgtXFx1REUyMVxcdURFM0MtXFx1REU1NVxcdURFNzAtXFx1REU4OVxcdURFQTgtXFx1REVDMFxcdURFRTItXFx1REVGQVxcdURGMUMtXFx1REYzNFxcdURGNTYtXFx1REY2RVxcdURGOTAtXFx1REZBOFxcdURGQ0FdfFxcdUQ4M0FbXFx1REQwMC1cXHVERDIxXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTScsXG4gICAgICAgICdhbGlhcyc6ICdNYXJrJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDdGRFxcdTA4MTYtXFx1MDgxOVxcdTA4MUItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyRFxcdTA4NTktXFx1MDg1QlxcdTA4RDMtXFx1MDhFMVxcdTA4RTMtXFx1MDkwM1xcdTA5M0EtXFx1MDkzQ1xcdTA5M0UtXFx1MDk0RlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk4MS1cXHUwOTgzXFx1MDlCQ1xcdTA5QkUtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNEXFx1MDlEN1xcdTA5RTJcXHUwOUUzXFx1MDlGRVxcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQUZBLVxcdTBBRkZcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU1LVxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzA0XFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMC1cXHUwRDAzXFx1MEQzQlxcdTBEM0NcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgxLVxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0VcXHUwRjNGXFx1MEY3MS1cXHUwRjg0XFx1MEY4NlxcdTBGODdcXHUwRjhELVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAyQi1cXHUxMDNFXFx1MTA1Ni1cXHUxMDU5XFx1MTA1RS1cXHUxMDYwXFx1MTA2Mi1cXHUxMDY0XFx1MTA2Ny1cXHUxMDZEXFx1MTA3MS1cXHUxMDc0XFx1MTA4Mi1cXHUxMDhEXFx1MTA4RlxcdTEwOUEtXFx1MTA5RFxcdTEzNUQtXFx1MTM1RlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN0I0LVxcdTE3RDNcXHUxN0REXFx1MTgwQi1cXHUxODBEXFx1MTg4NVxcdTE4ODZcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MUExNy1cXHUxQTFCXFx1MUE1NS1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3RlxcdTFBQjAtXFx1MUFDMFxcdTFCMDAtXFx1MUIwNFxcdTFCMzQtXFx1MUI0NFxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUI4MlxcdTFCQTEtXFx1MUJBRFxcdTFCRTYtXFx1MUJGM1xcdTFDMjQtXFx1MUMzN1xcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNFOFxcdTFDRURcXHUxQ0Y0XFx1MUNGNy1cXHUxQ0Y5XFx1MURDMC1cXHUxREY5XFx1MURGQi1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RVxcdUE2OUZcXHVBNkYwXFx1QTZGMVxcdUE4MDJcXHVBODA2XFx1QTgwQlxcdUE4MjMtXFx1QTgyN1xcdUE4MkNcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNVxcdUE4RTAtXFx1QThGMVxcdUE4RkZcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkYnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDNbXFx1REQyNC1cXHVERDI3XFx1REVBQlxcdURFQUNcXHVERjQ2LVxcdURGNTBdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ0NVxcdURENDZcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1RERDOS1cXHVERENDXFx1RERDRVxcdUREQ0ZcXHVERTJDLVxcdURFMzdcXHVERTNFXFx1REVERi1cXHVERUVBXFx1REYwMC1cXHVERjAzXFx1REYzQlxcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzM1LVxcdURDNDZcXHVEQzVFXFx1RENCMC1cXHVEQ0MzXFx1RERBRi1cXHVEREI1XFx1RERCOC1cXHVEREMwXFx1REREQ1xcdURERERcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjdcXHVERjFELVxcdURGMkJdfFxcdUQ4MDZbXFx1REMyQy1cXHVEQzNBXFx1REQzMC1cXHVERDM1XFx1REQzN1xcdUREMzhcXHVERDNCLVxcdUREM0VcXHVERDQwXFx1REQ0MlxcdURENDNcXHVEREQxLVxcdURERDdcXHVERERBLVxcdURERTBcXHVEREU0XFx1REUwMS1cXHVERTBBXFx1REUzMy1cXHVERTM5XFx1REUzQi1cXHVERTNFXFx1REU0N1xcdURFNTEtXFx1REU1QlxcdURFOEEtXFx1REU5OV18XFx1RDgwN1tcXHVEQzJGLVxcdURDMzZcXHVEQzM4LVxcdURDM0ZcXHVEQzkyLVxcdURDQTdcXHVEQ0E5LVxcdURDQjZcXHVERDMxLVxcdUREMzZcXHVERDNBXFx1REQzQ1xcdUREM0RcXHVERDNGLVxcdURENDVcXHVERDQ3XFx1REQ4QS1cXHVERDhFXFx1REQ5MFxcdUREOTFcXHVERDkzLVxcdUREOTdcXHVERUYzLVxcdURFRjZdfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNEZcXHVERjUxLVxcdURGODdcXHVERjhGLVxcdURGOTJcXHVERkU0XFx1REZGMFxcdURGRjFdfFxcdUQ4MkZbXFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2NS1cXHVERDY5XFx1REQ2RC1cXHVERDcyXFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNYycsXG4gICAgICAgICdhbGlhcyc6ICdTcGFjaW5nX01hcmsnLFxuICAgICAgICAnYm1wJzogJ1xcdTA5MDNcXHUwOTNCXFx1MDkzRS1cXHUwOTQwXFx1MDk0OS1cXHUwOTRDXFx1MDk0RVxcdTA5NEZcXHUwOTgyXFx1MDk4M1xcdTA5QkUtXFx1MDlDMFxcdTA5QzdcXHUwOUM4XFx1MDlDQlxcdTA5Q0NcXHUwOUQ3XFx1MEEwM1xcdTBBM0UtXFx1MEE0MFxcdTBBODNcXHUwQUJFLVxcdTBBQzBcXHUwQUM5XFx1MEFDQlxcdTBBQ0NcXHUwQjAyXFx1MEIwM1xcdTBCM0VcXHUwQjQwXFx1MEI0N1xcdTBCNDhcXHUwQjRCXFx1MEI0Q1xcdTBCNTdcXHUwQkJFXFx1MEJCRlxcdTBCQzFcXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNDXFx1MEJEN1xcdTBDMDEtXFx1MEMwM1xcdTBDNDEtXFx1MEM0NFxcdTBDODJcXHUwQzgzXFx1MENCRVxcdTBDQzAtXFx1MENDNFxcdTBDQzdcXHUwQ0M4XFx1MENDQVxcdTBDQ0JcXHUwQ0Q1XFx1MENENlxcdTBEMDJcXHUwRDAzXFx1MEQzRS1cXHUwRDQwXFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRDXFx1MEQ1N1xcdTBEODJcXHUwRDgzXFx1MERDRi1cXHUwREQxXFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRjNFXFx1MEYzRlxcdTBGN0ZcXHUxMDJCXFx1MTAyQ1xcdTEwMzFcXHUxMDM4XFx1MTAzQlxcdTEwM0NcXHUxMDU2XFx1MTA1N1xcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwODNcXHUxMDg0XFx1MTA4Ny1cXHUxMDhDXFx1MTA4RlxcdTEwOUEtXFx1MTA5Q1xcdTE3QjZcXHUxN0JFLVxcdTE3QzVcXHUxN0M3XFx1MTdDOFxcdTE5MjMtXFx1MTkyNlxcdTE5MjktXFx1MTkyQlxcdTE5MzBcXHUxOTMxXFx1MTkzMy1cXHUxOTM4XFx1MUExOVxcdTFBMUFcXHUxQTU1XFx1MUE1N1xcdTFBNjFcXHUxQTYzXFx1MUE2NFxcdTFBNkQtXFx1MUE3MlxcdTFCMDRcXHUxQjM1XFx1MUIzQlxcdTFCM0QtXFx1MUI0MVxcdTFCNDNcXHUxQjQ0XFx1MUI4MlxcdTFCQTFcXHUxQkE2XFx1MUJBN1xcdTFCQUFcXHUxQkU3XFx1MUJFQS1cXHUxQkVDXFx1MUJFRVxcdTFCRjJcXHUxQkYzXFx1MUMyNC1cXHUxQzJCXFx1MUMzNFxcdTFDMzVcXHUxQ0UxXFx1MUNGN1xcdTMwMkVcXHUzMDJGXFx1QTgyM1xcdUE4MjRcXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzNcXHVBOTUyXFx1QTk1M1xcdUE5ODNcXHVBOUI0XFx1QTlCNVxcdUE5QkFcXHVBOUJCXFx1QTlCRS1cXHVBOUMwXFx1QUEyRlxcdUFBMzBcXHVBQTMzXFx1QUEzNFxcdUFBNERcXHVBQTdCXFx1QUE3RFxcdUFBRUJcXHVBQUVFXFx1QUFFRlxcdUFBRjVcXHVBQkUzXFx1QUJFNFxcdUFCRTZcXHVBQkU3XFx1QUJFOVxcdUFCRUFcXHVBQkVDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODA0W1xcdURDMDBcXHVEQzAyXFx1REM4MlxcdURDQjAtXFx1RENCMlxcdURDQjdcXHVEQ0I4XFx1REQyQ1xcdURENDVcXHVERDQ2XFx1REQ4MlxcdUREQjMtXFx1RERCNVxcdUREQkZcXHVEREMwXFx1RERDRVxcdURFMkMtXFx1REUyRVxcdURFMzJcXHVERTMzXFx1REUzNVxcdURFRTAtXFx1REVFMlxcdURGMDJcXHVERjAzXFx1REYzRVxcdURGM0ZcXHVERjQxLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M118XFx1RDgwNVtcXHVEQzM1LVxcdURDMzdcXHVEQzQwXFx1REM0MVxcdURDNDVcXHVEQ0IwLVxcdURDQjJcXHVEQ0I5XFx1RENCQi1cXHVEQ0JFXFx1RENDMVxcdUREQUYtXFx1RERCMVxcdUREQjgtXFx1RERCQlxcdUREQkVcXHVERTMwLVxcdURFMzJcXHVERTNCXFx1REUzQ1xcdURFM0VcXHVERUFDXFx1REVBRVxcdURFQUZcXHVERUI2XFx1REYyMFxcdURGMjFcXHVERjI2XXxcXHVEODA2W1xcdURDMkMtXFx1REMyRVxcdURDMzhcXHVERDMwLVxcdUREMzVcXHVERDM3XFx1REQzOFxcdUREM0RcXHVERDQwXFx1REQ0MlxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERlxcdURERTRcXHVERTM5XFx1REU1N1xcdURFNThcXHVERTk3XXxcXHVEODA3W1xcdURDMkZcXHVEQzNFXFx1RENBOVxcdURDQjFcXHVEQ0I0XFx1REQ4QS1cXHVERDhFXFx1REQ5M1xcdUREOTRcXHVERDk2XFx1REVGNVxcdURFRjZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjg3XFx1REZGMFxcdURGRjFdfFxcdUQ4MzRbXFx1REQ2NVxcdURENjZcXHVERDZELVxcdURENzJdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNZScsXG4gICAgICAgICdhbGlhcyc6ICdFbmNsb3NpbmdfTWFyaycsXG4gICAgICAgICdibXAnOiAnXFx1MDQ4OFxcdTA0ODlcXHUxQUJFXFx1MjBERC1cXHUyMEUwXFx1MjBFMi1cXHUyMEU0XFx1QTY3MC1cXHVBNjcyJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNbicsXG4gICAgICAgICdhbGlhcyc6ICdOb25zcGFjaW5nX01hcmsnLFxuICAgICAgICAnYm1wJzogJ1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwN0ZEXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhEMy1cXHUwOEUxXFx1MDhFMy1cXHUwOTAyXFx1MDkzQVxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QzEtXFx1MDlDNFxcdTA5Q0RcXHUwOUUyXFx1MDlFM1xcdTA5RkVcXHUwQTAxXFx1MEEwMlxcdTBBM0NcXHUwQTQxXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNzBcXHUwQTcxXFx1MEE3NVxcdTBBODFcXHUwQTgyXFx1MEFCQ1xcdTBBQzEtXFx1MEFDNVxcdTBBQzdcXHUwQUM4XFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEFGQS1cXHUwQUZGXFx1MEIwMVxcdTBCM0NcXHUwQjNGXFx1MEI0MS1cXHUwQjQ0XFx1MEI0RFxcdTBCNTVcXHUwQjU2XFx1MEI2MlxcdTBCNjNcXHUwQjgyXFx1MEJDMFxcdTBCQ0RcXHUwQzAwXFx1MEMwNFxcdTBDM0UtXFx1MEM0MFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM2MlxcdTBDNjNcXHUwQzgxXFx1MENCQ1xcdTBDQkZcXHUwQ0M2XFx1MENDQ1xcdTBDQ0RcXHUwQ0UyXFx1MENFM1xcdTBEMDBcXHUwRDAxXFx1MEQzQlxcdTBEM0NcXHUwRDQxLVxcdTBENDRcXHUwRDREXFx1MEQ2MlxcdTBENjNcXHUwRDgxXFx1MERDQVxcdTBERDItXFx1MERENFxcdTBERDZcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEY3MS1cXHUwRjdFXFx1MEY4MC1cXHUwRjg0XFx1MEY4NlxcdTBGODdcXHUwRjhELVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAyRC1cXHUxMDMwXFx1MTAzMi1cXHUxMDM3XFx1MTAzOVxcdTEwM0FcXHUxMDNEXFx1MTAzRVxcdTEwNThcXHUxMDU5XFx1MTA1RS1cXHUxMDYwXFx1MTA3MS1cXHUxMDc0XFx1MTA4MlxcdTEwODVcXHUxMDg2XFx1MTA4RFxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNFxcdTE3QjVcXHUxN0I3LVxcdTE3QkRcXHUxN0M2XFx1MTdDOS1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4ODVcXHUxODg2XFx1MThBOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjdcXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzQlxcdTFBMTdcXHUxQTE4XFx1MUExQlxcdTFBNTZcXHUxQTU4LVxcdTFBNUVcXHUxQTYwXFx1MUE2MlxcdTFBNjUtXFx1MUE2Q1xcdTFBNzMtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkRcXHUxQUJGXFx1MUFDMFxcdTFCMDAtXFx1MUIwM1xcdTFCMzRcXHUxQjM2LVxcdTFCM0FcXHUxQjNDXFx1MUI0MlxcdTFCNkItXFx1MUI3M1xcdTFCODBcXHUxQjgxXFx1MUJBMi1cXHUxQkE1XFx1MUJBOFxcdTFCQTlcXHUxQkFCLVxcdTFCQURcXHUxQkU2XFx1MUJFOFxcdTFCRTlcXHUxQkVEXFx1MUJFRi1cXHUxQkYxXFx1MUMyQy1cXHUxQzMzXFx1MUMzNlxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRTBcXHUxQ0UyLVxcdTFDRThcXHUxQ0VEXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY5XFx1MURGQi1cXHUxREZGXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTJDRUYtXFx1MkNGMVxcdTJEN0ZcXHUyREUwLVxcdTJERkZcXHUzMDJBLVxcdTMwMkRcXHUzMDk5XFx1MzA5QVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjlFXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyNVxcdUE4MjZcXHVBODJDXFx1QThDNFxcdUE4QzVcXHVBOEUwLVxcdUE4RjFcXHVBOEZGXFx1QTkyNi1cXHVBOTJEXFx1QTk0Ny1cXHVBOTUxXFx1QTk4MC1cXHVBOTgyXFx1QTlCM1xcdUE5QjYtXFx1QTlCOVxcdUE5QkNcXHVBOUJEXFx1QTlFNVxcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBN0NcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVDXFx1QUFFRFxcdUFBRjZcXHVBQkU1XFx1QUJFOFxcdUFCRURcXHVGQjFFXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURERkRcXHVERUUwXFx1REY3Ni1cXHVERjdBXXxcXHVEODAyW1xcdURFMDEtXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTBGXFx1REUzOC1cXHVERTNBXFx1REUzRlxcdURFRTVcXHVERUU2XXxcXHVEODAzW1xcdUREMjQtXFx1REQyN1xcdURFQUJcXHVERUFDXFx1REY0Ni1cXHVERjUwXXxcXHVEODA0W1xcdURDMDFcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODFcXHVEQ0IzLVxcdURDQjZcXHVEQ0I5XFx1RENCQVxcdUREMDAtXFx1REQwMlxcdUREMjctXFx1REQyQlxcdUREMkQtXFx1REQzNFxcdURENzNcXHVERDgwXFx1REQ4MVxcdUREQjYtXFx1RERCRVxcdUREQzktXFx1RERDQ1xcdUREQ0ZcXHVERTJGLVxcdURFMzFcXHVERTM0XFx1REUzNlxcdURFMzdcXHVERTNFXFx1REVERlxcdURFRTMtXFx1REVFQVxcdURGMDBcXHVERjAxXFx1REYzQlxcdURGM0NcXHVERjQwXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDMzgtXFx1REMzRlxcdURDNDItXFx1REM0NFxcdURDNDZcXHVEQzVFXFx1RENCMy1cXHVEQ0I4XFx1RENCQVxcdURDQkZcXHVEQ0MwXFx1RENDMlxcdURDQzNcXHVEREIyLVxcdUREQjVcXHVEREJDXFx1RERCRFxcdUREQkZcXHVEREMwXFx1REREQ1xcdURERERcXHVERTMzLVxcdURFM0FcXHVERTNEXFx1REUzRlxcdURFNDBcXHVERUFCXFx1REVBRFxcdURFQjAtXFx1REVCNVxcdURFQjdcXHVERjFELVxcdURGMUZcXHVERjIyLVxcdURGMjVcXHVERjI3LVxcdURGMkJdfFxcdUQ4MDZbXFx1REMyRi1cXHVEQzM3XFx1REMzOVxcdURDM0FcXHVERDNCXFx1REQzQ1xcdUREM0VcXHVERDQzXFx1RERENC1cXHVEREQ3XFx1REREQVxcdUREREJcXHVEREUwXFx1REUwMS1cXHVERTBBXFx1REUzMy1cXHVERTM4XFx1REUzQi1cXHVERTNFXFx1REU0N1xcdURFNTEtXFx1REU1NlxcdURFNTktXFx1REU1QlxcdURFOEEtXFx1REU5NlxcdURFOThcXHVERTk5XXxcXHVEODA3W1xcdURDMzAtXFx1REMzNlxcdURDMzgtXFx1REMzRFxcdURDM0ZcXHVEQzkyLVxcdURDQTdcXHVEQ0FBLVxcdURDQjBcXHVEQ0IyXFx1RENCM1xcdURDQjVcXHVEQ0I2XFx1REQzMS1cXHVERDM2XFx1REQzQVxcdUREM0NcXHVERDNEXFx1REQzRi1cXHVERDQ1XFx1REQ0N1xcdUREOTBcXHVERDkxXFx1REQ5NVxcdUREOTdcXHVERUYzXFx1REVGNF18XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY0RlxcdURGOEYtXFx1REY5MlxcdURGRTRdfFxcdUQ4MkZbXFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2Ny1cXHVERDY5XFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdOJyxcbiAgICAgICAgJ2FsaWFzJzogJ051bWJlcicsXG4gICAgICAgICdibXAnOiAnMC05XFx4QjJcXHhCM1xceEI5XFx4QkMtXFx4QkVcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwOUY0LVxcdTA5RjlcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQjcyLVxcdTBCNzdcXHUwQkU2LVxcdTBCRjJcXHUwQzY2LVxcdTBDNkZcXHUwQzc4LVxcdTBDN0VcXHUwQ0U2LVxcdTBDRUZcXHUwRDU4LVxcdTBENUVcXHUwRDY2LVxcdTBENzhcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMzNcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxMzY5LVxcdTEzN0NcXHUxNkVFLVxcdTE2RjBcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5REFcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTgyXFx1MjE4NS1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkNGRFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBNjIwLVxcdUE2MjlcXHVBNkU2LVxcdUE2RUZcXHVBODMwLVxcdUE4MzVcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTknLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ0MC1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNcXHVERjQxXFx1REY0QVxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQ0EwLVxcdURDQTldfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERDMwLVxcdUREMzlcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzZGXFx1RENGMC1cXHVEQ0Y5XFx1REQzNi1cXHVERDNGXFx1REREMC1cXHVEREQ5XFx1RERFMS1cXHVEREY0XFx1REVGMC1cXHVERUY5XXxcXHVEODA1W1xcdURDNTAtXFx1REM1OVxcdURDRDAtXFx1RENEOVxcdURFNTAtXFx1REU1OVxcdURFQzAtXFx1REVDOVxcdURGMzAtXFx1REYzQl18XFx1RDgwNltcXHVEQ0UwLVxcdURDRjJcXHVERDUwLVxcdURENTldfFxcdUQ4MDdbXFx1REM1MC1cXHVEQzZDXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE5XFx1REZDMC1cXHVERkQ0XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18XFx1RDgxQVtcXHVERTYwLVxcdURFNjlcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFdfFxcdUQ4MUJbXFx1REU4MC1cXHVERTk2XXxcXHVEODM0W1xcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVERkNFLVxcdURGRkZdfFxcdUQ4MzhbXFx1REQ0MC1cXHVERDQ5XFx1REVGMC1cXHVERUY5XXxcXHVEODNBW1xcdURDQzctXFx1RENDRlxcdURENTAtXFx1REQ1OV18XFx1RDgzQltcXHVEQzcxLVxcdURDQUJcXHVEQ0FELVxcdURDQUZcXHVEQ0IxLVxcdURDQjRcXHVERDAxLVxcdUREMkRcXHVERDJGLVxcdUREM0RdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ05kJyxcbiAgICAgICAgJ2FsaWFzJzogJ0RlY2ltYWxfTnVtYmVyJyxcbiAgICAgICAgJ2JtcCc6ICcwLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQkU2LVxcdTBCRUZcXHUwQzY2LVxcdTBDNkZcXHUwQ0U2LVxcdTBDRUZcXHUwRDY2LVxcdTBENkZcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMjlcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxN0UwLVxcdTE3RTlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5RDlcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHVBNjIwLVxcdUE2MjlcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTknLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDFbXFx1RENBMC1cXHVEQ0E5XXxcXHVEODAzW1xcdUREMzAtXFx1REQzOV18XFx1RDgwNFtcXHVEQzY2LVxcdURDNkZcXHVEQ0YwLVxcdURDRjlcXHVERDM2LVxcdUREM0ZcXHVEREQwLVxcdURERDlcXHVERUYwLVxcdURFRjldfFxcdUQ4MDVbXFx1REM1MC1cXHVEQzU5XFx1RENEMC1cXHVEQ0Q5XFx1REU1MC1cXHVERTU5XFx1REVDMC1cXHVERUM5XFx1REYzMC1cXHVERjM5XXxcXHVEODA2W1xcdURDRTAtXFx1RENFOVxcdURENTAtXFx1REQ1OV18XFx1RDgwN1tcXHVEQzUwLVxcdURDNTlcXHVERDUwLVxcdURENTlcXHVEREEwLVxcdUREQTldfFxcdUQ4MUFbXFx1REU2MC1cXHVERTY5XFx1REY1MC1cXHVERjU5XXxcXHVEODM1W1xcdURGQ0UtXFx1REZGRl18XFx1RDgzOFtcXHVERDQwLVxcdURENDlcXHVERUYwLVxcdURFRjldfFxcdUQ4M0FbXFx1REQ1MC1cXHVERDU5XXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ05sJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xldHRlcl9OdW1iZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTE2RUUtXFx1MTZGMFxcdTIxNjAtXFx1MjE4MlxcdTIxODUtXFx1MjE4OFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHVBNkU2LVxcdUE2RUYnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQ0MC1cXHVERDc0XFx1REY0MVxcdURGNEFcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTm8nLFxuICAgICAgICAnYWxpYXMnOiAnT3RoZXJfTnVtYmVyJyxcbiAgICAgICAgJ2JtcCc6ICdcXHhCMlxceEIzXFx4QjlcXHhCQy1cXHhCRVxcdTA5RjQtXFx1MDlGOVxcdTBCNzItXFx1MEI3N1xcdTBCRjAtXFx1MEJGMlxcdTBDNzgtXFx1MEM3RVxcdTBENTgtXFx1MEQ1RVxcdTBENzAtXFx1MEQ3OFxcdTBGMkEtXFx1MEYzM1xcdTEzNjktXFx1MTM3Q1xcdTE3RjAtXFx1MTdGOVxcdTE5REFcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTVGXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDRkRcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBODMwLVxcdUE4MzUnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ3NS1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNdfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzY1XFx1RERFMS1cXHVEREY0XXxcXHVEODA1W1xcdURGM0FcXHVERjNCXXxcXHVEODA2W1xcdURDRUEtXFx1RENGMl18XFx1RDgwN1tcXHVEQzVBLVxcdURDNkNcXHVERkMwLVxcdURGRDRdfFxcdUQ4MUFbXFx1REY1Qi1cXHVERjYxXXxcXHVEODFCW1xcdURFODAtXFx1REU5Nl18XFx1RDgzNFtcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4M0FbXFx1RENDNy1cXHVEQ0NGXXxcXHVEODNCW1xcdURDNzEtXFx1RENBQlxcdURDQUQtXFx1RENBRlxcdURDQjEtXFx1RENCNFxcdUREMDEtXFx1REQyRFxcdUREMkYtXFx1REQzRF18XFx1RDgzQ1tcXHVERDAwLVxcdUREMENdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQJyxcbiAgICAgICAgJ2FsaWFzJzogJ1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICchLSMlLVxcXFwqLC1cXFxcLzo7XFxcXD9AXFxcXFstXFxcXF1fXFxcXHtcXFxcfVxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNEZcXHUyRTUyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NScsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURFQURcXHVERjU1LVxcdURGNTldfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOFxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQzRCLVxcdURDNEZcXHVEQzVBXFx1REM1QlxcdURDNURcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REU2MC1cXHVERTZDXFx1REYzQy1cXHVERjNFXXxcXHVEODA2W1xcdURDM0JcXHVERDQ0LVxcdURENDZcXHVEREUyXFx1REUzRi1cXHVERTQ2XFx1REU5QS1cXHVERTlDXFx1REU5RS1cXHVERUEyXXxcXHVEODA3W1xcdURDNDEtXFx1REM0NVxcdURDNzBcXHVEQzcxXFx1REVGN1xcdURFRjhcXHVERkZGXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODFCW1xcdURFOTctXFx1REU5QVxcdURGRTJdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXXxcXHVEODNBW1xcdURENUVcXHVERDVGXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGMnLFxuICAgICAgICAnYWxpYXMnOiAnQ29ubmVjdG9yX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdfXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRjNGJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQZCcsXG4gICAgICAgICdhbGlhcyc6ICdEYXNoX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcLVxcdTA1OEFcXHUwNUJFXFx1MTQwMFxcdTE4MDZcXHUyMDEwLVxcdTIwMTVcXHUyRTE3XFx1MkUxQVxcdTJFM0FcXHUyRTNCXFx1MkU0MFxcdTMwMUNcXHUzMDMwXFx1MzBBMFxcdUZFMzFcXHVGRTMyXFx1RkU1OFxcdUZFNjNcXHVGRjBEJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAzXFx1REVBRCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGUnLFxuICAgICAgICAnYWxpYXMnOiAnQ2xvc2VfUHVuY3R1YXRpb24nLFxuICAgICAgICAnYm1wJzogJ1xcXFwpXFxcXF1cXFxcfVxcdTBGM0JcXHUwRjNEXFx1MTY5Q1xcdTIwNDZcXHUyMDdFXFx1MjA4RVxcdTIzMDlcXHUyMzBCXFx1MjMyQVxcdTI3NjlcXHUyNzZCXFx1Mjc2RFxcdTI3NkZcXHUyNzcxXFx1Mjc3M1xcdTI3NzVcXHUyN0M2XFx1MjdFN1xcdTI3RTlcXHUyN0VCXFx1MjdFRFxcdTI3RUZcXHUyOTg0XFx1Mjk4NlxcdTI5ODhcXHUyOThBXFx1Mjk4Q1xcdTI5OEVcXHUyOTkwXFx1Mjk5MlxcdTI5OTRcXHUyOTk2XFx1Mjk5OFxcdTI5RDlcXHUyOURCXFx1MjlGRFxcdTJFMjNcXHUyRTI1XFx1MkUyN1xcdTJFMjlcXHUzMDA5XFx1MzAwQlxcdTMwMERcXHUzMDBGXFx1MzAxMVxcdTMwMTVcXHUzMDE3XFx1MzAxOVxcdTMwMUJcXHUzMDFFXFx1MzAxRlxcdUZEM0VcXHVGRTE4XFx1RkUzNlxcdUZFMzhcXHVGRTNBXFx1RkUzQ1xcdUZFM0VcXHVGRTQwXFx1RkU0MlxcdUZFNDRcXHVGRTQ4XFx1RkU1QVxcdUZFNUNcXHVGRTVFXFx1RkYwOVxcdUZGM0RcXHVGRjVEXFx1RkY2MFxcdUZGNjMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1BmJyxcbiAgICAgICAgJ2FsaWFzJzogJ0ZpbmFsX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXHhCQlxcdTIwMTlcXHUyMDFEXFx1MjAzQVxcdTJFMDNcXHUyRTA1XFx1MkUwQVxcdTJFMERcXHUyRTFEXFx1MkUyMSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGknLFxuICAgICAgICAnYWxpYXMnOiAnSW5pdGlhbF9QdW5jdHVhdGlvbicsXG4gICAgICAgICdibXAnOiAnXFx4QUJcXHUyMDE4XFx1MjAxQlxcdTIwMUNcXHUyMDFGXFx1MjAzOVxcdTJFMDJcXHUyRTA0XFx1MkUwOVxcdTJFMENcXHUyRTFDXFx1MkUyMCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUG8nLFxuICAgICAgICAnYWxpYXMnOiAnT3RoZXJfUHVuY3R1YXRpb24nLFxuICAgICAgICAnYm1wJzogJyEtIyUtXFwnXFxcXCosXFxcXC5cXFxcLzo7XFxcXD9AXFxcXFxceEExXFx4QTdcXHhCNlxceEI3XFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTY2RVxcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODA1XFx1MTgwNy1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTZcXHUyMDE3XFx1MjAyMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDM4XFx1MjAzQi1cXHUyMDNFXFx1MjA0MS1cXHUyMDQzXFx1MjA0Ny1cXHUyMDUxXFx1MjA1M1xcdTIwNTUtXFx1MjA1RVxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDBcXHUyRTAxXFx1MkUwNi1cXHUyRTA4XFx1MkUwQlxcdTJFMEUtXFx1MkUxNlxcdTJFMThcXHUyRTE5XFx1MkUxQlxcdTJFMUVcXHUyRTFGXFx1MkUyQS1cXHUyRTJFXFx1MkUzMC1cXHUyRTM5XFx1MkUzQy1cXHUyRTNGXFx1MkU0MVxcdTJFNDMtXFx1MkU0RlxcdTJFNTJcXHUzMDAxLVxcdTMwMDNcXHUzMDNEXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkUxMC1cXHVGRTE2XFx1RkUxOVxcdUZFMzBcXHVGRTQ1XFx1RkU0NlxcdUZFNDktXFx1RkU0Q1xcdUZFNTAtXFx1RkU1MlxcdUZFNTQtXFx1RkU1N1xcdUZFNUYtXFx1RkU2MVxcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwN1xcdUZGMEFcXHVGRjBDXFx1RkYwRVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQ1xcdUZGNjFcXHVGRjY0XFx1RkY2NScsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURGNTUtXFx1REY1OV18XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM4XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDNEItXFx1REM0RlxcdURDNUFcXHVEQzVCXFx1REM1RFxcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERTYwLVxcdURFNkNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDZbXFx1REMzQlxcdURENDQtXFx1REQ0NlxcdURERTJcXHVERTNGLVxcdURFNDZcXHVERTlBLVxcdURFOUNcXHVERTlFLVxcdURFQTJdfFxcdUQ4MDdbXFx1REM0MS1cXHVEQzQ1XFx1REM3MFxcdURDNzFcXHVERUY3XFx1REVGOFxcdURGRkZdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MUJbXFx1REU5Ny1cXHVERTlBXFx1REZFMl18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdfFxcdUQ4M0FbXFx1REQ1RVxcdURENUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQcycsXG4gICAgICAgICdhbGlhcyc6ICdPcGVuX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcKFxcXFxbXFxcXHtcXHUwRjNBXFx1MEYzQ1xcdTE2OUJcXHUyMDFBXFx1MjAxRVxcdTIwNDVcXHUyMDdEXFx1MjA4RFxcdTIzMDhcXHUyMzBBXFx1MjMyOVxcdTI3NjhcXHUyNzZBXFx1Mjc2Q1xcdTI3NkVcXHUyNzcwXFx1Mjc3MlxcdTI3NzRcXHUyN0M1XFx1MjdFNlxcdTI3RThcXHUyN0VBXFx1MjdFQ1xcdTI3RUVcXHUyOTgzXFx1Mjk4NVxcdTI5ODdcXHUyOTg5XFx1Mjk4QlxcdTI5OERcXHUyOThGXFx1Mjk5MVxcdTI5OTNcXHUyOTk1XFx1Mjk5N1xcdTI5RDhcXHUyOURBXFx1MjlGQ1xcdTJFMjJcXHUyRTI0XFx1MkUyNlxcdTJFMjhcXHUyRTQyXFx1MzAwOFxcdTMwMEFcXHUzMDBDXFx1MzAwRVxcdTMwMTBcXHUzMDE0XFx1MzAxNlxcdTMwMThcXHUzMDFBXFx1MzAxRFxcdUZEM0ZcXHVGRTE3XFx1RkUzNVxcdUZFMzdcXHVGRTM5XFx1RkUzQlxcdUZFM0RcXHVGRTNGXFx1RkU0MVxcdUZFNDNcXHVGRTQ3XFx1RkU1OVxcdUZFNUJcXHVGRTVEXFx1RkYwOFxcdUZGM0JcXHVGRjVCXFx1RkY1RlxcdUZGNjInXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1MnLFxuICAgICAgICAnYWxpYXMnOiAnU3ltYm9sJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcJFxcXFwrPC0+XFxcXF5gXFxcXHx+XFx4QTItXFx4QTZcXHhBOFxceEE5XFx4QUNcXHhBRS1cXHhCMVxceEI0XFx4QjhcXHhEN1xceEY3XFx1MDJDMi1cXHUwMkM1XFx1MDJEMi1cXHUwMkRGXFx1MDJFNS1cXHUwMkVCXFx1MDJFRFxcdTAyRUYtXFx1MDJGRlxcdTAzNzVcXHUwMzg0XFx1MDM4NVxcdTAzRjZcXHUwNDgyXFx1MDU4RC1cXHUwNThGXFx1MDYwNi1cXHUwNjA4XFx1MDYwQlxcdTA2MEVcXHUwNjBGXFx1MDZERVxcdTA2RTlcXHUwNkZEXFx1MDZGRVxcdTA3RjZcXHUwN0ZFXFx1MDdGRlxcdTA5RjJcXHUwOUYzXFx1MDlGQVxcdTA5RkJcXHUwQUYxXFx1MEI3MFxcdTBCRjMtXFx1MEJGQVxcdTBDN0ZcXHUwRDRGXFx1MEQ3OVxcdTBFM0ZcXHUwRjAxLVxcdTBGMDNcXHUwRjEzXFx1MEYxNS1cXHUwRjE3XFx1MEYxQS1cXHUwRjFGXFx1MEYzNFxcdTBGMzZcXHUwRjM4XFx1MEZCRS1cXHUwRkM1XFx1MEZDNy1cXHUwRkNDXFx1MEZDRVxcdTBGQ0ZcXHUwRkQ1LVxcdTBGRDhcXHUxMDlFXFx1MTA5RlxcdTEzOTAtXFx1MTM5OVxcdTE2NkRcXHUxN0RCXFx1MTk0MFxcdTE5REUtXFx1MTlGRlxcdTFCNjEtXFx1MUI2QVxcdTFCNzQtXFx1MUI3Q1xcdTFGQkRcXHUxRkJGLVxcdTFGQzFcXHUxRkNELVxcdTFGQ0ZcXHUxRkRELVxcdTFGREZcXHUxRkVELVxcdTFGRUZcXHUxRkZEXFx1MUZGRVxcdTIwNDRcXHUyMDUyXFx1MjA3QS1cXHUyMDdDXFx1MjA4QS1cXHUyMDhDXFx1MjBBMC1cXHUyMEJGXFx1MjEwMFxcdTIxMDFcXHUyMTAzLVxcdTIxMDZcXHUyMTA4XFx1MjEwOVxcdTIxMTRcXHUyMTE2LVxcdTIxMThcXHUyMTFFLVxcdTIxMjNcXHUyMTI1XFx1MjEyN1xcdTIxMjlcXHUyMTJFXFx1MjEzQVxcdTIxM0JcXHUyMTQwLVxcdTIxNDRcXHUyMTRBLVxcdTIxNERcXHUyMTRGXFx1MjE4QVxcdTIxOEJcXHUyMTkwLVxcdTIzMDdcXHUyMzBDLVxcdTIzMjhcXHUyMzJCLVxcdTI0MjZcXHUyNDQwLVxcdTI0NEFcXHUyNDlDLVxcdTI0RTlcXHUyNTAwLVxcdTI3NjdcXHUyNzk0LVxcdTI3QzRcXHUyN0M3LVxcdTI3RTVcXHUyN0YwLVxcdTI5ODJcXHUyOTk5LVxcdTI5RDdcXHUyOURDLVxcdTI5RkJcXHUyOUZFLVxcdTJCNzNcXHUyQjc2LVxcdTJCOTVcXHUyQjk3LVxcdTJCRkZcXHUyQ0U1LVxcdTJDRUFcXHUyRTUwXFx1MkU1MVxcdTJFODAtXFx1MkU5OVxcdTJFOUItXFx1MkVGM1xcdTJGMDAtXFx1MkZENVxcdTJGRjAtXFx1MkZGQlxcdTMwMDRcXHUzMDEyXFx1MzAxM1xcdTMwMjBcXHUzMDM2XFx1MzAzN1xcdTMwM0VcXHUzMDNGXFx1MzA5QlxcdTMwOUNcXHUzMTkwXFx1MzE5MVxcdTMxOTYtXFx1MzE5RlxcdTMxQzAtXFx1MzFFM1xcdTMyMDAtXFx1MzIxRVxcdTMyMkEtXFx1MzI0N1xcdTMyNTBcXHUzMjYwLVxcdTMyN0ZcXHUzMjhBLVxcdTMyQjBcXHUzMkMwLVxcdTMzRkZcXHU0REMwLVxcdTRERkZcXHVBNDkwLVxcdUE0QzZcXHVBNzAwLVxcdUE3MTZcXHVBNzIwXFx1QTcyMVxcdUE3ODlcXHVBNzhBXFx1QTgyOC1cXHVBODJCXFx1QTgzNi1cXHVBODM5XFx1QUE3Ny1cXHVBQTc5XFx1QUI1QlxcdUFCNkFcXHVBQjZCXFx1RkIyOVxcdUZCQjItXFx1RkJDMVxcdUZERkNcXHVGREZEXFx1RkU2MlxcdUZFNjQtXFx1RkU2NlxcdUZFNjlcXHVGRjA0XFx1RkYwQlxcdUZGMUMtXFx1RkYxRVxcdUZGM0VcXHVGRjQwXFx1RkY1Q1xcdUZGNUVcXHVGRkUwLVxcdUZGRTZcXHVGRkU4LVxcdUZGRUVcXHVGRkZDXFx1RkZGRCcsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDM3LVxcdUREM0ZcXHVERDc5LVxcdUREODlcXHVERDhDLVxcdUREOEVcXHVERDkwLVxcdUREOUNcXHVEREEwXFx1REREMC1cXHVEREZDXXxcXHVEODAyW1xcdURDNzdcXHVEQzc4XFx1REVDOF18XFx1RDgwNVxcdURGM0Z8XFx1RDgwN1tcXHVERkQ1LVxcdURGRjFdfFxcdUQ4MUFbXFx1REYzQy1cXHVERjNGXFx1REY0NV18XFx1RDgyRlxcdURDOUN8XFx1RDgzNFtcXHVEQzAwLVxcdURDRjVcXHVERDAwLVxcdUREMjZcXHVERDI5LVxcdURENjRcXHVERDZBLVxcdURENkNcXHVERDgzXFx1REQ4NFxcdUREOEMtXFx1RERBOVxcdUREQUUtXFx1RERFOFxcdURFMDAtXFx1REU0MVxcdURFNDVcXHVERjAwLVxcdURGNTZdfFxcdUQ4MzVbXFx1REVDMVxcdURFREJcXHVERUZCXFx1REYxNVxcdURGMzVcXHVERjRGXFx1REY2RlxcdURGODlcXHVERkE5XFx1REZDM118XFx1RDgzNltcXHVEQzAwLVxcdURERkZcXHVERTM3LVxcdURFM0FcXHVERTZELVxcdURFNzRcXHVERTc2LVxcdURFODNcXHVERTg1XFx1REU4Nl18XFx1RDgzOFtcXHVERDRGXFx1REVGRl18XFx1RDgzQltcXHVEQ0FDXFx1RENCMFxcdUREMkVcXHVERUYwXFx1REVGMV18XFx1RDgzQ1tcXHVEQzAwLVxcdURDMkJcXHVEQzMwLVxcdURDOTNcXHVEQ0EwLVxcdURDQUVcXHVEQ0IxLVxcdURDQkZcXHVEQ0MxLVxcdURDQ0ZcXHVEQ0QxLVxcdURDRjVcXHVERDBELVxcdUREQURcXHVEREU2LVxcdURFMDJcXHVERTEwLVxcdURFM0JcXHVERTQwLVxcdURFNDhcXHVERTUwXFx1REU1MVxcdURFNjAtXFx1REU2NVxcdURGMDAtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURFRDdcXHVERUUwLVxcdURFRUNcXHVERUYwLVxcdURFRkNcXHVERjAwLVxcdURGNzNcXHVERjgwLVxcdURGRDhcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REMwMC1cXHVEQzBCXFx1REMxMC1cXHVEQzQ3XFx1REM1MC1cXHVEQzU5XFx1REM2MC1cXHVEQzg3XFx1REM5MC1cXHVEQ0FEXFx1RENCMFxcdURDQjFcXHVERDAwLVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURFNTNcXHVERTYwLVxcdURFNkRcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZcXHVERjAwLVxcdURGOTJcXHVERjk0LVxcdURGQ0FdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdTYycsXG4gICAgICAgICdhbGlhcyc6ICdDdXJyZW5jeV9TeW1ib2wnLFxuICAgICAgICAnYm1wJzogJ1xcXFwkXFx4QTItXFx4QTVcXHUwNThGXFx1MDYwQlxcdTA3RkVcXHUwN0ZGXFx1MDlGMlxcdTA5RjNcXHUwOUZCXFx1MEFGMVxcdTBCRjlcXHUwRTNGXFx1MTdEQlxcdTIwQTAtXFx1MjBCRlxcdUE4MzhcXHVGREZDXFx1RkU2OVxcdUZGMDRcXHVGRkUwXFx1RkZFMVxcdUZGRTVcXHVGRkU2JyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODA3W1xcdURGREQtXFx1REZFMF18XFx1RDgzOFxcdURFRkZ8XFx1RDgzQlxcdURDQjAnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1NrJyxcbiAgICAgICAgJ2FsaWFzJzogJ01vZGlmaWVyX1N5bWJvbCcsXG4gICAgICAgICdibXAnOiAnXFxcXF5gXFx4QThcXHhBRlxceEI0XFx4QjhcXHUwMkMyLVxcdTAyQzVcXHUwMkQyLVxcdTAyREZcXHUwMkU1LVxcdTAyRUJcXHUwMkVEXFx1MDJFRi1cXHUwMkZGXFx1MDM3NVxcdTAzODRcXHUwMzg1XFx1MUZCRFxcdTFGQkYtXFx1MUZDMVxcdTFGQ0QtXFx1MUZDRlxcdTFGREQtXFx1MUZERlxcdTFGRUQtXFx1MUZFRlxcdTFGRkRcXHUxRkZFXFx1MzA5QlxcdTMwOUNcXHVBNzAwLVxcdUE3MTZcXHVBNzIwXFx1QTcyMVxcdUE3ODlcXHVBNzhBXFx1QUI1QlxcdUFCNkFcXHVBQjZCXFx1RkJCMi1cXHVGQkMxXFx1RkYzRVxcdUZGNDBcXHVGRkUzJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODNDW1xcdURGRkItXFx1REZGRl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1NtJyxcbiAgICAgICAgJ2FsaWFzJzogJ01hdGhfU3ltYm9sJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcKzwtPlxcXFx8flxceEFDXFx4QjFcXHhEN1xceEY3XFx1MDNGNlxcdTA2MDYtXFx1MDYwOFxcdTIwNDRcXHUyMDUyXFx1MjA3QS1cXHUyMDdDXFx1MjA4QS1cXHUyMDhDXFx1MjExOFxcdTIxNDAtXFx1MjE0NFxcdTIxNEJcXHUyMTkwLVxcdTIxOTRcXHUyMTlBXFx1MjE5QlxcdTIxQTBcXHUyMUEzXFx1MjFBNlxcdTIxQUVcXHUyMUNFXFx1MjFDRlxcdTIxRDJcXHUyMUQ0XFx1MjFGNC1cXHUyMkZGXFx1MjMyMFxcdTIzMjFcXHUyMzdDXFx1MjM5Qi1cXHUyM0IzXFx1MjNEQy1cXHUyM0UxXFx1MjVCN1xcdTI1QzFcXHUyNUY4LVxcdTI1RkZcXHUyNjZGXFx1MjdDMC1cXHUyN0M0XFx1MjdDNy1cXHUyN0U1XFx1MjdGMC1cXHUyN0ZGXFx1MjkwMC1cXHUyOTgyXFx1Mjk5OS1cXHUyOUQ3XFx1MjlEQy1cXHUyOUZCXFx1MjlGRS1cXHUyQUZGXFx1MkIzMC1cXHUyQjQ0XFx1MkI0Ny1cXHUyQjRDXFx1RkIyOVxcdUZFNjJcXHVGRTY0LVxcdUZFNjZcXHVGRjBCXFx1RkYxQy1cXHVGRjFFXFx1RkY1Q1xcdUZGNUVcXHVGRkUyXFx1RkZFOS1cXHVGRkVDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODM1W1xcdURFQzFcXHVERURCXFx1REVGQlxcdURGMTVcXHVERjM1XFx1REY0RlxcdURGNkZcXHVERjg5XFx1REZBOVxcdURGQzNdfFxcdUQ4M0JbXFx1REVGMFxcdURFRjFdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdTbycsXG4gICAgICAgICdhbGlhcyc6ICdPdGhlcl9TeW1ib2wnLFxuICAgICAgICAnYm1wJzogJ1xceEE2XFx4QTlcXHhBRVxceEIwXFx1MDQ4MlxcdTA1OERcXHUwNThFXFx1MDYwRVxcdTA2MEZcXHUwNkRFXFx1MDZFOVxcdTA2RkRcXHUwNkZFXFx1MDdGNlxcdTA5RkFcXHUwQjcwXFx1MEJGMy1cXHUwQkY4XFx1MEJGQVxcdTBDN0ZcXHUwRDRGXFx1MEQ3OVxcdTBGMDEtXFx1MEYwM1xcdTBGMTNcXHUwRjE1LVxcdTBGMTdcXHUwRjFBLVxcdTBGMUZcXHUwRjM0XFx1MEYzNlxcdTBGMzhcXHUwRkJFLVxcdTBGQzVcXHUwRkM3LVxcdTBGQ0NcXHUwRkNFXFx1MEZDRlxcdTBGRDUtXFx1MEZEOFxcdTEwOUVcXHUxMDlGXFx1MTM5MC1cXHUxMzk5XFx1MTY2RFxcdTE5NDBcXHUxOURFLVxcdTE5RkZcXHUxQjYxLVxcdTFCNkFcXHUxQjc0LVxcdTFCN0NcXHUyMTAwXFx1MjEwMVxcdTIxMDMtXFx1MjEwNlxcdTIxMDhcXHUyMTA5XFx1MjExNFxcdTIxMTZcXHUyMTE3XFx1MjExRS1cXHUyMTIzXFx1MjEyNVxcdTIxMjdcXHUyMTI5XFx1MjEyRVxcdTIxM0FcXHUyMTNCXFx1MjE0QVxcdTIxNENcXHUyMTREXFx1MjE0RlxcdTIxOEFcXHUyMThCXFx1MjE5NS1cXHUyMTk5XFx1MjE5Qy1cXHUyMTlGXFx1MjFBMVxcdTIxQTJcXHUyMUE0XFx1MjFBNVxcdTIxQTctXFx1MjFBRFxcdTIxQUYtXFx1MjFDRFxcdTIxRDBcXHUyMUQxXFx1MjFEM1xcdTIxRDUtXFx1MjFGM1xcdTIzMDAtXFx1MjMwN1xcdTIzMEMtXFx1MjMxRlxcdTIzMjItXFx1MjMyOFxcdTIzMkItXFx1MjM3QlxcdTIzN0QtXFx1MjM5QVxcdTIzQjQtXFx1MjNEQlxcdTIzRTItXFx1MjQyNlxcdTI0NDAtXFx1MjQ0QVxcdTI0OUMtXFx1MjRFOVxcdTI1MDAtXFx1MjVCNlxcdTI1QjgtXFx1MjVDMFxcdTI1QzItXFx1MjVGN1xcdTI2MDAtXFx1MjY2RVxcdTI2NzAtXFx1Mjc2N1xcdTI3OTQtXFx1MjdCRlxcdTI4MDAtXFx1MjhGRlxcdTJCMDAtXFx1MkIyRlxcdTJCNDVcXHUyQjQ2XFx1MkI0RC1cXHUyQjczXFx1MkI3Ni1cXHUyQjk1XFx1MkI5Ny1cXHUyQkZGXFx1MkNFNS1cXHUyQ0VBXFx1MkU1MFxcdTJFNTFcXHUyRTgwLVxcdTJFOTlcXHUyRTlCLVxcdTJFRjNcXHUyRjAwLVxcdTJGRDVcXHUyRkYwLVxcdTJGRkJcXHUzMDA0XFx1MzAxMlxcdTMwMTNcXHUzMDIwXFx1MzAzNlxcdTMwMzdcXHUzMDNFXFx1MzAzRlxcdTMxOTBcXHUzMTkxXFx1MzE5Ni1cXHUzMTlGXFx1MzFDMC1cXHUzMUUzXFx1MzIwMC1cXHUzMjFFXFx1MzIyQS1cXHUzMjQ3XFx1MzI1MFxcdTMyNjAtXFx1MzI3RlxcdTMyOEEtXFx1MzJCMFxcdTMyQzAtXFx1MzNGRlxcdTREQzAtXFx1NERGRlxcdUE0OTAtXFx1QTRDNlxcdUE4MjgtXFx1QTgyQlxcdUE4MzZcXHVBODM3XFx1QTgzOVxcdUFBNzctXFx1QUE3OVxcdUZERkRcXHVGRkU0XFx1RkZFOFxcdUZGRURcXHVGRkVFXFx1RkZGQ1xcdUZGRkQnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQzNy1cXHVERDNGXFx1REQ3OS1cXHVERDg5XFx1REQ4Qy1cXHVERDhFXFx1REQ5MC1cXHVERDlDXFx1RERBMFxcdURERDAtXFx1RERGQ118XFx1RDgwMltcXHVEQzc3XFx1REM3OFxcdURFQzhdfFxcdUQ4MDVcXHVERjNGfFxcdUQ4MDdbXFx1REZENS1cXHVERkRDXFx1REZFMS1cXHVERkYxXXxcXHVEODFBW1xcdURGM0MtXFx1REYzRlxcdURGNDVdfFxcdUQ4MkZcXHVEQzlDfFxcdUQ4MzRbXFx1REMwMC1cXHVEQ0Y1XFx1REQwMC1cXHVERDI2XFx1REQyOS1cXHVERDY0XFx1REQ2QS1cXHVERDZDXFx1REQ4M1xcdUREODRcXHVERDhDLVxcdUREQTlcXHVEREFFLVxcdURERThcXHVERTAwLVxcdURFNDFcXHVERTQ1XFx1REYwMC1cXHVERjU2XXxcXHVEODM2W1xcdURDMDAtXFx1RERGRlxcdURFMzctXFx1REUzQVxcdURFNkQtXFx1REU3NFxcdURFNzYtXFx1REU4M1xcdURFODVcXHVERTg2XXxcXHVEODM4XFx1REQ0RnxcXHVEODNCW1xcdURDQUNcXHVERDJFXXxcXHVEODNDW1xcdURDMDAtXFx1REMyQlxcdURDMzAtXFx1REM5M1xcdURDQTAtXFx1RENBRVxcdURDQjEtXFx1RENCRlxcdURDQzEtXFx1RENDRlxcdURDRDEtXFx1RENGNVxcdUREMEQtXFx1RERBRFxcdURERTYtXFx1REUwMlxcdURFMTAtXFx1REUzQlxcdURFNDAtXFx1REU0OFxcdURFNTBcXHVERTUxXFx1REU2MC1cXHVERTY1XFx1REYwMC1cXHVERkZBXXxcXHVEODNEW1xcdURDMDAtXFx1REVEN1xcdURFRTAtXFx1REVFQ1xcdURFRjAtXFx1REVGQ1xcdURGMDAtXFx1REY3M1xcdURGODAtXFx1REZEOFxcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVEQzAwLVxcdURDMEJcXHVEQzEwLVxcdURDNDdcXHVEQzUwLVxcdURDNTlcXHVEQzYwLVxcdURDODdcXHVEQzkwLVxcdURDQURcXHVEQ0IwXFx1RENCMVxcdUREMDAtXFx1REQ3OFxcdUREN0EtXFx1RERDQlxcdUREQ0QtXFx1REU1M1xcdURFNjAtXFx1REU2RFxcdURFNzAtXFx1REU3NFxcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4NlxcdURFOTAtXFx1REVBOFxcdURFQjAtXFx1REVCNlxcdURFQzAtXFx1REVDMlxcdURFRDAtXFx1REVENlxcdURGMDAtXFx1REY5MlxcdURGOTQtXFx1REZDQV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1onLFxuICAgICAgICAnYWxpYXMnOiAnU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICcgXFx4QTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBBXFx1MjAyOFxcdTIwMjlcXHUyMDJGXFx1MjA1RlxcdTMwMDAnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1psJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xpbmVfU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUyMDI4J1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdacCcsXG4gICAgICAgICdhbGlhcyc6ICdQYXJhZ3JhcGhfU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUyMDI5J1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdacycsXG4gICAgICAgICdhbGlhcyc6ICdTcGFjZV9TZXBhcmF0b3InLFxuICAgICAgICAnYm1wJzogJyBcXHhBMFxcdTE2ODBcXHUyMDAwLVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDAnXG4gICAgfVxuXTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGRlY29kZShzLCBzZXAgPSAnOycpIHtcbiAgICBzID0gcy5yZXBsYWNlKC9cXG4vZywgJycpO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGNvbnN0IHJlY29yZHMgPSBbJyddO1xuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKHNbcG9zXSkge1xuICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1swXSArPSBzW3Bvc107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHNlcDpcbiAgICAgICAgICAgICAgICByZWNvcmRzLnVuc2hpZnQoJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZWNvcmRzWzBdICs9IHNbcG9zXTtcbiAgICAgICAgfVxuICAgICAgICBwb3MrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHMucmV2ZXJzZSgpLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkKTtcbn1cbmNvbnN0IHByZWZpeGVzID0ge1xuICAgIGZpbGVEaXJlY3Rvcnk6ICdqYWJyZWYtbWV0YTogZmlsZURpcmVjdG9yeTonLFxuICAgIGdyb3Vwc3ZlcnNpb246ICdqYWJyZWYtbWV0YTogZ3JvdXBzdmVyc2lvbjonLFxuICAgIGdyb3Vwc3RyZWU6ICdqYWJyZWYtbWV0YTogZ3JvdXBzdHJlZTonLFxuICAgIGdyb3VwaW5nOiAnamFicmVmLW1ldGE6IGdyb3VwaW5nOicsXG59O1xuLyoqXG4gKiBJbXBvcnQgdGhlIEphYlJlZiBncm91cHMgZnJvbSB0aGUgYEBzdHJpbmdgIGNvbW1lbnRzIGluIHdoaWNoIHRoZXkgd2VyZSBzdG9yZWQuIFlvdSB3b3VsZCB0eXBpY2FsbHkgcGFzcyB0aGUgY29tbWVudHMgcGFyc2VkIGJ5IFtbYmlidGV4LnBhcnNlXV0gaW4gaGVyZS5cbiAqXG4gKiBKYWJSZWYga25vd3Mgc2V2ZXJhbCBncm91cCB0eXBlcywgYW5kIHRoaXMgcGFyc2VyIHBhcnNlcyBtb3N0LCBidXQgbm90IGFsbCBvZiB0aGVtOlxuICpcbiAqICogaW5kZXBlbmRlbnQgZ3JvdXA6IHRoZSBrZXlzIGxpc3RlZCBpbiB0aGUgZ3JvdXAgYXJlIHRoZSBlbnRyaWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgdG8gYmVsb25nIHRvIGl0XG4gKiAqIGludGVyc2VjdGlvbjogdGhlIGtleXMgbGlzdGVkIGluIHRoZSBncm91cCBhcmUgY29uc2lkZXJlZCB0byBiZWxvbmcgdG8gdGhlIGdyb3VwIGlmIHRoZXkncmUgYWxzbyBpbiB0aGUgcGFyZW50IGdyb3VwXG4gKiAqIHVuaW9uOiB0aGUga2V5cyBsaXN0ZWQgaW4gdGhlIGdyb3VwIGFyZSBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgZ3JvdXAsIGFuZCBhbHNvIHRoZSBrZXlzIHRoYXQgYXJlIGluIHRoZSBwYXJlbnQgZ3JvdXBcbiAqICogcXVlcnk6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwYXJzZXJcbiAqL1xuZnVuY3Rpb24gcGFyc2UoY29tbWVudHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIHJvb3Q6IFtdLFxuICAgICAgICBncm91cHM6IHt9LFxuICAgICAgICBmaWxlRGlyZWN0b3J5OiAnJyxcbiAgICAgICAgdmVyc2lvbjogJycsXG4gICAgfTtcbiAgICBjb25zdCBsZXZlbHMgPSBbXTtcbiAgICBjb25zdCBkZWNvZGVkID0ge1xuICAgICAgICBmaWxlRGlyZWN0b3J5OiBudWxsLFxuICAgICAgICBncm91cHN2ZXJzaW9uOiBudWxsLFxuICAgICAgICBncm91cHN0cmVlOiBudWxsLFxuICAgICAgICBncm91cGluZzogbnVsbCxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFttZXRhLCBwcmVmaXhdIG9mIE9iamVjdC5lbnRyaWVzKHByZWZpeGVzKSkge1xuICAgICAgICAgICAgaWYgKGNvbW1lbnQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlZFttZXRhXSA9IGRlY29kZShjb21tZW50LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnZlcnNpb24gPSBkZWNvZGVkLmdyb3Vwc3ZlcnNpb24gJiYgZGVjb2RlZC5ncm91cHN2ZXJzaW9uWzBdO1xuICAgIHJlc3VsdC5maWxlRGlyZWN0b3J5ID0gZGVjb2RlZC5maWxlRGlyZWN0b3J5ICYmIGRlY29kZWQuZmlsZURpcmVjdG9yeVswXTtcbiAgICBmb3IgKGNvbnN0IHRyZWUgb2YgWydncm91cHN0cmVlJywgJ2dyb3VwaW5nJ10pIHtcbiAgICAgICAgaWYgKCFkZWNvZGVkW3RyZWVdKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgZW5jb2RlZCBvZiBkZWNvZGVkW3RyZWVdKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGUoZW5jb2RlZCk7XG4gICAgICAgICAgICBjb25zdCBsZXZlbF90eXBlX25hbWUgPSBkZWNvZGUoZmllbGRzLnNoaWZ0KCksICc6Jyk7XG4gICAgICAgICAgICBjb25zdCBtID0gL14oWzAtOV0rKSAoLispLy5leGVjKGxldmVsX3R5cGVfbmFtZVswXSk7XG4gICAgICAgICAgICBpZiAoIW0pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KG1bMV0pO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IG1bMl07IC8vIHRlc3QgZm9yIFN0YXRpY0dyb3VwP1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdBbGxFbnRyaWVzR3JvdXAnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyByb290XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbGV2ZWxfdHlwZV9uYW1lWzFdO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gZGVjb2RlKGZpZWxkcy5zaGlmdCgpKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0cmVlID09PSAnZ3JvdXBpbmcnID8gW10gOiBmaWVsZHMubWFwKGZpZWxkID0+IGRlY29kZShmaWVsZClbMF0pO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBrZXlzLFxuICAgICAgICAgICAgICAgIGdyb3VwczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0Lmdyb3Vwc1tuYW1lXSA9IHJlc3VsdC5ncm91cHNbbmFtZV0gfHwgZ3JvdXA7XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA8IGxldmVsKSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzW2xldmVsIC0gMV0gPSBncm91cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5yb290LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbGV2ZWxzW2xldmVsIC0gMl07XG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIGluZGVwZW5kZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIGludGVyc2VjdFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuZmlsdGVyKGtleSA9PiBwYXJlbnQuZW50cmllcy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzogLy8gdW5pb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChwYXJlbnQuZW50cmllcy5maWx0ZXIoa2V5ID0+ICFncm91cC5lbnRyaWVzLmluY2x1ZGVzKGtleSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXZlbHNbbGV2ZWwgLSAyXS5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWphYnJlZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuamFicmVmID0gZXhwb3J0cy5jaHVua2VyID0gZXhwb3J0cy5hc3QgPSBleHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuY29uc3QgYmlidGV4ID0gcmVxdWlyZShcIi4vZ3JhbW1hclwiKTtcbmNvbnN0IGNodW5rZXJfMSA9IHJlcXVpcmUoXCIuL2NodW5rZXJcIik7XG5jb25zdCB1bmljb2RlMmxhdGV4XzEgPSByZXF1aXJlKFwidW5pY29kZTJsYXRleFwiKTtcbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG5vZGUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7IC8vICdFcnJvcicgYnJlYWtzIHByb3RvdHlwZSBjaGFpbiBoZXJlXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7IC8vIHJlc3RvcmUgcHJvdG90eXBlIGNoYWluXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB9XG59XG5jbGFzcyBUZVhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBub2RlLCB0ZXh0KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOyAvLyByZXN0b3JlIHByb3RvdHlwZSBjaGFpblxuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxufVxuY29uc3QgY2hhckNhdGVnb3JpZXMgPSByZXF1aXJlKFwieHJlZ2V4cC90b29scy9vdXRwdXQvY2F0ZWdvcmllc1wiKTtcbmNvbnN0IGNoYXJDbGFzcyA9IHtcbiAgICBMdTogY2hhckNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiBbJ1VwcGVyY2FzZV9MZXR0ZXInLCAnVGl0bGVjYXNlX0xldHRlciddLmluY2x1ZGVzKGNhdC5hbGlhcykpLm1hcChjYXQgPT4gY2F0LmJtcCkuam9pbignJyksXG4gICAgTGw6IGNoYXJDYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5hbGlhcyA9PT0gJ0xvd2VyY2FzZV9MZXR0ZXInKS5ibXAsXG4gICAgTG5vdEx1OiBjaGFyQ2F0ZWdvcmllcy5maWx0ZXIoY2F0ID0+IFsnTG93ZXJjYXNlX0xldHRlcicsICdNb2RpZmllcl9MZXR0ZXInLCAnT3RoZXJfTGV0dGVyJywgJ05vbnNwYWNpbmdfTWFyaycsICdTcGFjaW5nX01hcmsnLCAnRGVjaW1hbF9OdW1iZXInLCAnTGV0dGVyX051bWJlciddLmluY2x1ZGVzKGNhdC5hbGlhcykpLm1hcChjYXQgPT4gY2F0LmJtcCkuam9pbignJyksXG4gICAgUDogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnUHVuY3R1YXRpb24nKS5ibXAsXG4gICAgTDogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnTGV0dGVyJykuYm1wLFxuICAgIE46IGNoYXJDYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gWydEZWNpbWFsX051bWJlcicsICdMZXR0ZXJfTnVtYmVyJ10uaW5jbHVkZXMoY2F0LmFsaWFzKSkubWFwKGNhdCA9PiBjYXQuYm1wKS5qb2luKCcnKSxcbiAgICBBbHBoYU51bTogY2hhckNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiBbJ0xldHRlcicsICdEZWNpbWFsX051bWJlcicsICdMZXR0ZXJfTnVtYmVyJ10uaW5jbHVkZXMoY2F0LmFsaWFzKSkubWFwKGNhdCA9PiBjYXQuYm1wKS5qb2luKCcnKSxcbiAgICBMQzogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnQ2FzZWRfTGV0dGVyJykuYm1wLFxufTtcbmNvbnN0IG1hcmtlciA9IHtcbiAgICBhbmQ6ICdcXHUwMDAxJyxcbiAgICBjb21tYTogJ1xcdTAwMDInLFxuICAgIHNwYWNlOiAnXFx1MDAwMycsXG4gICAgbGl0ZXJhbDogJ1xcdTAwMDQnLFxuICAgIG1hcmt1cDogJ1xcdTAwMDUnLFxuICAgIHJlOiB7XG4gICAgICAgIGFuZDogLy4vLFxuICAgICAgICBjb21tYTogLy4vLFxuICAgICAgICBzcGFjZTogLy4vLFxuICAgICAgICBsaXRlcmFsOiAvLi8sXG4gICAgICAgIGxpdGVyYWxOYW1lOiAvLi8sXG4gICAgfSxcbiAgICBjbGVhbihzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UobWFya2VyLnJlLnNwYWNlLCAnICcpLnJlcGxhY2UobWFya2VyLnJlLmNvbW1hLCAnLCAnKS5yZXBsYWNlKG1hcmtlci5yZS5saXRlcmFsLCAnJyk7XG4gICAgfSxcbn07XG5tYXJrZXIucmUgPSB7XG4gICAgYW5kOiBuZXcgUmVnRXhwKG1hcmtlci5hbmQsICdnJyksXG4gICAgY29tbWE6IG5ldyBSZWdFeHAobWFya2VyLmNvbW1hLCAnZycpLFxuICAgIHNwYWNlOiBuZXcgUmVnRXhwKG1hcmtlci5zcGFjZSwgJ2cnKSxcbiAgICBsaXRlcmFsOiBuZXcgUmVnRXhwKG1hcmtlci5saXRlcmFsLCAnZycpLFxuICAgIGxpdGVyYWxOYW1lOiBuZXcgUmVnRXhwKGBeJHttYXJrZXIubGl0ZXJhbH0oW14ke21hcmtlci5saXRlcmFsfV0qKSR7bWFya2VyLmxpdGVyYWx9JGApLFxufTtcbmNvbnN0IHByZXNlcnZlQ2FzZSA9IHtcbiAgICBsZWFkaW5nQ2FwOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkx1fV1bJHtjaGFyQ2xhc3MuTG5vdEx1fV0rWyR7Y2hhckNsYXNzLlB9XT8kYCksXG4gICAgYWxsQ2FwczogbmV3IFJlZ0V4cChgXlske2NoYXJDbGFzcy5MdX0ke2NoYXJDbGFzcy5OfV17Mix9JGApLFxuICAgIGFsbExvd2VyOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkxsfSR7Y2hhckNsYXNzLk59XXsyLH0kYCksXG4gICAgam9pbmVkOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkx1fV1bJHtjaGFyQ2xhc3MuTG5vdEx1fV0qKFstK11bJHtjaGFyQ2xhc3MuTH0ke2NoYXJDbGFzcy5OfV0rKSpbJHtjaGFyQ2xhc3MuUH1dKiRgKSxcbiAgICBoYXNVcHBlcjogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkx1fV1gKSxcbiAgICBoYXNMb3dlcjogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkxsfV1gKSxcbiAgICBpc051bWJlcjogL15bMC05XSskLyxcbiAgICBoYXNBbHBoYTogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkx9XWApLFxuICAgIGhhc0FscGhhTnVtOiBuZXcgUmVnRXhwKGBbJHtjaGFyQ2xhc3MuQWxwaGFOdW19XWApLFxuICAgIG5vdEFscGhhTnVtOiBuZXcgUmVnRXhwKGBbXiR7Y2hhckNsYXNzLkFscGhhTnVtfV1gLCAnZycpLFxuICAgIHNlbnRlbmNlU3RhcnQ6IG5ldyBSZWdFeHAoYChefChbXFx1MjAxNDo/IS5dXFxcXHMrKSlbJHtjaGFyQ2xhc3MuTHV9XWAsICdnJyksXG4gICAgbWFya3VwOiAvPFxcLz9zcGFuW14+XSo+L2csXG4gICAgYWNyb255bTogbmV3IFJlZ0V4cChgLipcXFxcLiR7bWFya2VyLm1hcmt1cH0qWyR7Y2hhckNsYXNzLkx1fV0ke21hcmtlci5tYXJrdXB9KlxcXFwuJGApLFxuICAgIG5vdENhc2VTZW5zaXRpdmU6IG5ldyBSZWdFeHAoYFteJHtjaGFyQ2xhc3MuTEN9XWApLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZTogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkxDfV1gKSxcbiAgICBxdW90ZWQ6IC8oXCJbXlwiXStcIil8KOKAnFte4oCcXSvigJwpL2csXG59O1xuY29uc3QgZmllbGRzID0ge1xuICAgIGNyZWF0b3I6IFtcbiAgICAgICAgJ2F1dGhvcicsXG4gICAgICAgICdib29rYXV0aG9yJyxcbiAgICAgICAgJ2NvbGxhYm9yYXRvcicsXG4gICAgICAgICdjb21tZW50YXRvcicsXG4gICAgICAgICdkaXJlY3RvcicsXG4gICAgICAgICdlZGl0b3InLFxuICAgICAgICAnZWRpdG9yYScsXG4gICAgICAgICdlZGl0b3JiJyxcbiAgICAgICAgJ2VkaXRvcnMnLFxuICAgICAgICAnaG9sZGVyJyxcbiAgICAgICAgJ3NjcmlwdHdyaXRlcicsXG4gICAgICAgICd0cmFuc2xhdG9yJyxcbiAgICBdLFxuICAgIHRpdGxlOiBbXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdzZXJpZXMnLFxuICAgICAgICAnc2hvcnR0aXRsZScsXG4gICAgICAgICdib29rdGl0bGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdvcmlndGl0bGUnLFxuICAgICAgICAnbWFpbnRpdGxlJyxcbiAgICAgICAgJ2V2ZW50dGl0bGUnLFxuICAgIF0sXG4gICAgdW5uZXN0OiBbXG4gICAgICAgICdwdWJsaXNoZXInLFxuICAgICAgICAnbG9jYXRpb24nLFxuICAgIF0sXG4gICAgdmVyYmF0aW06IFtcbiAgICAgICAgJ3VybCcsXG4gICAgICAgICdkb2knLFxuICAgICAgICAnZmlsZScsXG4gICAgICAgICdmaWxlcycsXG4gICAgICAgICdlcHJpbnQnLFxuICAgICAgICAndmVyYmEnLFxuICAgICAgICAndmVyYmInLFxuICAgICAgICAndmVyYmMnLFxuICAgICAgICAnZ3JvdXBzJyxcbiAgICBdLFxuICAgIGh0bWw6IFtcbiAgICAgICAgJ2Fubm90YXRpb24nLFxuICAgICAgICAnY29tbWVudCcsXG4gICAgICAgICdhbm5vdGUnLFxuICAgICAgICAncmV2aWV3JyxcbiAgICAgICAgJ25vdGVzJyxcbiAgICAgICAgJ25vdGUnLFxuICAgIF0sXG4gICAgdW5hYmJyZXY6IFtcbiAgICAgICAgJ2pvdXJuYWwnLFxuICAgICAgICAnam91cm5hbHRpdGxlJyxcbiAgICAgICAgJ2pvdXJuYWwtZnVsbCcsXG4gICAgXSxcbn07XG5jb25zdCBlbmdsaXNoID0gW1xuICAgICdhbWVyaWNhbicsXG4gICAgJ2JyaXRpc2gnLFxuICAgICdjYW5hZGlhbicsXG4gICAgJ2VuZ2xpc2gnLFxuICAgICdhdXN0cmFsaWFuJyxcbiAgICAnbmV3emVhbGFuZCcsXG4gICAgJ3VzZW5nbGlzaCcsXG4gICAgJ3VrZW5nbGlzaCcsXG4gICAgJ2VuJyxcbiAgICAnZW5nJyxcbiAgICAnZW4tYXUnLFxuICAgICdlbi1ieicsXG4gICAgJ2VuLWNhJyxcbiAgICAnZW4tY2InLFxuICAgICdlbi1nYicsXG4gICAgJ2VuLWllJyxcbiAgICAnZW4tam0nLFxuICAgICdlbi1ueicsXG4gICAgJ2VuLXBoJyxcbiAgICAnZW4tdHQnLFxuICAgICdlbi11cycsXG4gICAgJ2VuLXphJyxcbiAgICAnZW4tencnLFxuICAgICdhbmdsYWlzJyxcbl07XG5jbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmluX3ByZWFtYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlYW1ibGUgPSBbXTtcbiAgICAgICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoc3RyKSB7IH07IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgdmFyaWFibGUtbmFtZSBvbmx5LWFycm93LWZ1bmN0aW9ucyBuby1lbXB0eVxuICAgICAgICBmb3IgKGNvbnN0IFtvcHRpb24sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5lcnJvckhhbmRsZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgb25seS1hcnJvdy1mdW5jdGlvbnMgbm8tZW1wdHlcbiAgICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKGVycikgeyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZXJyb3JIYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZXJyKSB7IHRocm93IGVycjsgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2VudGVuY2VDYXNlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VudGVuY2VDYXNlID0gb3B0aW9ucy5zZW50ZW5jZUNhc2UgPyBlbmdsaXNoIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlbnRlbmNlQ2FzZSA9IG9wdGlvbnMuc2VudGVuY2VDYXNlIHx8IGVuZ2xpc2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0cmluZ3MpXG4gICAgICAgICAgICBvcHRpb25zLnN0cmluZ3MgPSB7fTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnVuYWJicmV2aWF0ZSlcbiAgICAgICAgICAgIG9wdGlvbnMudW5hYmJyZXZpYXRlID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnJhdykge1xuICAgICAgICAgICAgb3B0aW9ucy5zZW50ZW5jZUNhc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FzZVByb3RlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgY2FzZVByb3RlY3Rpb246ICdhcy1uZWVkZWQnLCB2ZXJiYXRpbUZpZWxkczogWy9eY2l0ZXVsaWtlLWxpbmtvdXQtWzAtOV0rJC8sIC4uLmZpZWxkcy52ZXJiYXRpbV0sIHZlcmJhdGltQ29tbWFuZHM6IFsndXJsJywgJ2hyZWYnXSwgdW5uZXN0RmllbGRzOiBbLi4uZmllbGRzLnRpdGxlLCAuLi5maWVsZHMudW5uZXN0LCAuLi5maWVsZHMudmVyYmF0aW1dLCB1bm5lc3RNb2RlOiAndW53cmFwJywgaHRtbEZpZWxkczogZmllbGRzLmh0bWwsIGd1ZXNzQWxyZWFkeVNlbnRlbmNlQ2FzZWQ6IHRydWUsIG1hcmt1cDoge30gfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1hcmt1cF9kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGVucXVvdGU6IHsgb3BlbjogJ1xcdTIwMWMnLCBjbG9zZTogJ1xcdTIwMWQnIH0sXG4gICAgICAgICAgICBzdWI6IHsgb3BlbjogJzxzdWI+JywgY2xvc2U6ICc8L3N1Yj4nIH0sXG4gICAgICAgICAgICBzdXA6IHsgb3BlbjogJzxzdXA+JywgY2xvc2U6ICc8L3N1cD4nIH0sXG4gICAgICAgICAgICBib2xkOiB7IG9wZW46ICc8Yj4nLCBjbG9zZTogJzwvYj4nIH0sXG4gICAgICAgICAgICBpdGFsaWNzOiB7IG9wZW46ICc8aT4nLCBjbG9zZTogJzwvaT4nIH0sXG4gICAgICAgICAgICBzbWFsbENhcHM6IHsgb3BlbjogJzxzcGFuIHN0eWxlPVwiZm9udC12YXJpYW50OnNtYWxsLWNhcHM7XCI+JywgY2xvc2U6ICc8L3NwYW4+JyB9LFxuICAgICAgICAgICAgY2FzZVByb3RlY3Q6IHsgb3BlbjogJzxzcGFuIGNsYXNzPVwibm9jYXNlXCI+JywgY2xvc2U6ICc8L3NwYW4+JyB9LFxuICAgICAgICAgICAgcm9tYW46IHsgb3BlbjogJycsIGNsb3NlOiAnJyB9LFxuICAgICAgICAgICAgZml4ZWRXaWR0aDogeyBvcGVuOiAnJywgY2xvc2U6ICcnIH0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIHBhdGNoIGluIGJlY2F1c2UgdGhlIG9wdGlvbnMgd2lsbCBsaWtlbHkgbm90IGhhdmUgZW5xdW90ZSBhbmQgY2FzZS1wcm90ZWN0XG4gICAgICAgIGZvciAoY29uc3QgW21hcmt1cCwgeyBvcGVuLCBjbG9zZSB9XSBvZiBPYmplY3QuZW50cmllcyhtYXJrdXBfZGVmYXVsdHMpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0gPSB0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0gfHwgeyBvcGVuLCBjbG9zZSB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBbMSwgMiwgMywgNF0pIHsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya3VwW2BoJHtpfWBdID0gdGhpcy5vcHRpb25zLm1hcmt1cFtgaCR7aX1gXSB8fCB7IG9wZW46IGA8aCR7aX0+YCwgY2xvc2U6IGA8L2gke2l9PmAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVucmVzb2x2ZWRTdHJpbmdzID0ge307XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuY29tbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgICAgIHRoaXMuc3RyaW5ncyA9IHt9O1xuICAgICAgICB0aGlzLm5ld2NvbW1hbmRzID0ge307XG4gICAgICAgIHRoaXMuZGVmYXVsdF9zdHJpbmdzID0ge1xuICAgICAgICAgICAgSkFOOiBbdGhpcy50ZXh0KCcwMScpXSxcbiAgICAgICAgICAgIEZFQjogW3RoaXMudGV4dCgnMDInKV0sXG4gICAgICAgICAgICBNQVI6IFt0aGlzLnRleHQoJzAzJyldLFxuICAgICAgICAgICAgQVBSOiBbdGhpcy50ZXh0KCcwNCcpXSxcbiAgICAgICAgICAgIE1BWTogW3RoaXMudGV4dCgnMDUnKV0sXG4gICAgICAgICAgICBKVU46IFt0aGlzLnRleHQoJzA2JyldLFxuICAgICAgICAgICAgSlVMOiBbdGhpcy50ZXh0KCcwNycpXSxcbiAgICAgICAgICAgIEFVRzogW3RoaXMudGV4dCgnMDgnKV0sXG4gICAgICAgICAgICBTRVA6IFt0aGlzLnRleHQoJzA5JyldLFxuICAgICAgICAgICAgT0NUOiBbdGhpcy50ZXh0KCcxMCcpXSxcbiAgICAgICAgICAgIE5PVjogW3RoaXMudGV4dCgnMTEnKV0sXG4gICAgICAgICAgICBERUM6IFt0aGlzLnRleHQoJzEyJyldLFxuICAgICAgICAgICAgQUNNQ1M6IFt0aGlzLnRleHQoJ0FDTSBDb21wdXRpbmcgU3VydmV5cycpXSxcbiAgICAgICAgICAgIEFDVEE6IFt0aGlzLnRleHQoJ0FjdGEgSW5mb3JtYXRpY2EnKV0sXG4gICAgICAgICAgICBDQUNNOiBbdGhpcy50ZXh0KCdDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNJyldLFxuICAgICAgICAgICAgSUJNSlJEOiBbdGhpcy50ZXh0KCdJQk0gSm91cm5hbCBvZiBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQnKV0sXG4gICAgICAgICAgICBJQk1TSjogW3RoaXMudGV4dCgnSUJNIFN5c3RlbXMgSm91cm5hbCcpXSxcbiAgICAgICAgICAgIElFRUVTRTogW3RoaXMudGV4dCgnSUVFRSBUcmFuc2FjdGlvbnMgb24gU29mdHdhcmUgRW5naW5lZXJpbmcnKV0sXG4gICAgICAgICAgICBJRUVFVEM6IFt0aGlzLnRleHQoJ0lFRUUgVHJhbnNhY3Rpb25zIG9uIENvbXB1dGVycycpXSxcbiAgICAgICAgICAgIElFRUVUQ0FEOiBbdGhpcy50ZXh0KCdJRUVFIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlci1BaWRlZCBEZXNpZ24gb2YgSW50ZWdyYXRlZCBDaXJjdWl0cycpXSxcbiAgICAgICAgICAgIElQTDogW3RoaXMudGV4dCgnSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBMZXR0ZXJzJyldLFxuICAgICAgICAgICAgSkFDTTogW3RoaXMudGV4dCgnSm91cm5hbCBvZiB0aGUgQUNNJyldLFxuICAgICAgICAgICAgSkNTUzogW3RoaXMudGV4dCgnSm91cm5hbCBvZiBDb21wdXRlciBhbmQgU3lzdGVtIFNjaWVuY2VzJyldLFxuICAgICAgICAgICAgU0NQOiBbdGhpcy50ZXh0KCdTY2llbmNlIG9mIENvbXB1dGVyIFByb2dyYW1taW5nJyldLFxuICAgICAgICAgICAgU0lDT01QOiBbdGhpcy50ZXh0KCdTSUFNIEpvdXJuYWwgb24gQ29tcHV0aW5nJyldLFxuICAgICAgICAgICAgVE9DUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlciBTeXN0ZW1zJyldLFxuICAgICAgICAgICAgVE9EUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBEYXRhYmFzZSBTeXN0ZW1zJyldLFxuICAgICAgICAgICAgVE9HOiBbdGhpcy50ZXh0KCdBQ00gVHJhbnNhY3Rpb25zIG9uIEdyYXBoaWNzJyldLFxuICAgICAgICAgICAgVE9NUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBNYXRoZW1hdGljYWwgU29mdHdhcmUnKV0sXG4gICAgICAgICAgICBUT09JUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBPZmZpY2UgSW5mb3JtYXRpb24gU3lzdGVtcycpXSxcbiAgICAgICAgICAgIFRPUExBUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBQcm9ncmFtbWluZyBMYW5ndWFnZXMgYW5kIFN5c3RlbXMnKV0sXG4gICAgICAgICAgICBUQ1M6IFt0aGlzLnRleHQoJ1RoZW9yZXRpY2FsIENvbXB1dGVyIFNjaWVuY2UnKV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzdChpbnB1dCwgY2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9hc3QgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua2VyXzEucGFyc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZXQgY2h1bmtfYXN0ID0gYmlidGV4LnBhcnNlKGNodW5rLnRleHQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgeyBjb21iaW5pbmdEaWFjcml0aWNzOiB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy5jb21tYW5kcyB9KSk7XG4gICAgICAgICAgICBpZiAoY2xlYW4pXG4gICAgICAgICAgICAgICAgY2h1bmtfYXN0ID0gdGhpcy5jbGVhbihjaHVua19hc3QpO1xuICAgICAgICAgICAgX2FzdC5wdXNoKGNodW5rX2FzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9hc3Q7XG4gICAgfVxuICAgIHBhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXN5bmMgPyB0aGlzLnBhcnNlQXN5bmMoaW5wdXQpIDogdGhpcy5wYXJzZVN5bmMoaW5wdXQpO1xuICAgIH1cbiAgICBwYXJzZVN5bmMoaW5wdXQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua2VyXzEucGFyc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2h1bmsoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCgpO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGlucHV0KSB7XG4gICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYXdhaXQgY2h1bmtlcl8xLnBhcnNlKGlucHV0LCB7IGFzeW5jOiB0cnVlIH0pKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2h1bmsoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCgpO1xuICAgIH1cbiAgICBwYXJzZWQoKSB7XG4gICAgICAgIHRoaXMuZmllbGQgPSBudWxsO1xuICAgICAgICBjb25zdCBzdHJpbmdzID0ge307XG4gICAgICAgIHRoaXMuY2xlYW5pbmcgPSB7IHR5cGU6ICdvdGhlcicgfTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zdHJpbmdzKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZCA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQHN0cmluZycsXG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSYW5nZXM6IG51bGwsXG4gICAgICAgICAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdXBwZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxvd2VyOiAwLFxuICAgICAgICAgICAgICAgICAgICBvdGhlcjogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY29udmVydCh0aGlzLmNsZWFuKHZhbHVlKSk7XG4gICAgICAgICAgICBzdHJpbmdzW2tleV0gPSB0aGlzLmZpZWxkLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5lcnJvcnMsXG4gICAgICAgICAgICBlbnRyaWVzOiB0aGlzLmVudHJpZXMsXG4gICAgICAgICAgICBjb21tZW50czogdGhpcy5jb21tZW50cyxcbiAgICAgICAgICAgIHN0cmluZ3MsXG4gICAgICAgICAgICBwcmVhbWJsZTogdGhpcy5wcmVhbWJsZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJlc2VydmUoc3RhcnQsIGVuZCwgcmVhc29uKSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMgPSB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzLmZpbHRlcihyYW5nZSA9PiByYW5nZS5zdGFydCA8IHN0YXJ0IHx8IHJhbmdlLmVuZCA+IGVuZClcbiAgICAgICAgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMuZmluZChyYW5nZSA9PiByYW5nZS5zdGFydCA8PSBzdGFydCAmJiByYW5nZS5lbmQgPj0gZW5kKSkgcmV0dXJuXG4gICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzICYmIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXNbdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcy5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChzdGFydCA8IGxhc3Quc3RhcnQpIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7Li4ubGFzdCwgbmV3OiB7IHN0YXJ0LCBlbmQsIHJlYXNvbiB9LCB0ZXh0OiB0aGlzLmZpZWxkLnRleHR9KSlcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzLnB1c2goeyBzdGFydCwgZW5kLCByZWFzb24gfSk7XG4gICAgfVxuICAgIHBhcnNlQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgdGhpcy5jaHVuayA9IGNodW5rLnRleHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYmliID0gYmlidGV4LnBhcnNlKGNodW5rLnRleHQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgeyBjb21iaW5pbmdEaWFjcml0aWNzOiB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy5jb21tYW5kcyB9KSk7XG4gICAgICAgICAgICBpZiAoYmliLmtpbmQgIT09ICdCaWJsaW9ncmFwaHknKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnNob3coYmliKSk7XG4gICAgICAgICAgICBiaWIgPSB0aGlzLmNsZWFuKGJpYik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBiaWIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudGl0eS5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VudHJ5JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQnJhY2VkQ29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmVDb21tZW50JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHJlYW1ibGVFeHByZXNzaW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVydChlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0cmluZ0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTm9uRW50cnlUZXh0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiaWI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCFlcnIubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgbGluZTogZXJyLmxvY2F0aW9uLnN0YXJ0LmxpbmUgKyBjaHVuay5vZmZzZXQubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IGVyci5sb2NhdGlvbi5zdGFydC5jb2x1bW4sXG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmNodW5rLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG93KG8pIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHByZWZlci10ZW1wbGF0ZVxuICAgICAgICBsZXQgdGV4dCA9IEpTT04uc3RyaW5naWZ5KG8pO1xuICAgICAgICBpZiAodGhpcy5jaHVuaylcbiAgICAgICAgICAgIHRleHQgKz0gJ1xcbicgKyB0aGlzLmNodW5rLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHRleHQodmFsdWUgPSAnJykge1xuICAgICAgICByZXR1cm4geyBraW5kOiAnVGV4dCcsIHZhbHVlLCBtb2RlOiAndGV4dCcgfTtcbiAgICB9XG4gICAgZXJyb3IoZXJyLCByZXR1cm52YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICAgIHJldHVybiByZXR1cm52YWx1ZTtcbiAgICB9XG4gICAgY29uZGVuc2Uobm9kZSkge1xuICAgICAgICAvLyBhcHBseSBjbGVhbmluZyB0byByZXN1bHRpbmcgY2hpbGRyZW5cbiAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUubWFwKGNoaWxkID0+IHRoaXMuY2xlYW4oY2hpbGQpKTtcbiAgICAgICAgLy8gdW5wYWNrIHJlZHVuZGFudCBibG9ja3NcbiAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVkdWNlKChhY2MsIGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQua2luZCA9PT0gJ0Jsb2NrJyAmJiAhY2hpbGQuY2FzZSAmJiBPYmplY3Qua2V5cyhjaGlsZC5tYXJrdXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoY2hpbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICAvLyBjb25kZW5zZSB0ZXh0IG5vZGVzIHRvIG1ha2Ugd2hvbGUgd29yZHMgZm9yIHNlbnRlbmNlIGNhc2luZ1xuICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZWR1Y2UoKGFjYywgY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChhY2MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0ID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBub2RlLnZhbHVlW2kgKyAxXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gPT09ICdzdHJpY3QnICYmIHRoaXMub25seUNhc2VQcm90ZWN0ZWQobGFzdCkgJiYgY2hpbGQua2luZCA9PT0gJ1RleHQnICYmICFjaGlsZC52YWx1ZS5tYXRjaChwcmVzZXJ2ZUNhc2UuaXNDYXNlU2Vuc2l0aXZlKSAmJiB0aGlzLm9ubHlDYXNlUHJvdGVjdGVkKG5leHQpKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0LmtpbmQgPT09ICdCbG9jaycgJiYgY2hpbGQua2luZCA9PT0gJ0Jsb2NrJyAmJiBPYmplY3Qua2V5cyhsYXN0Lm1hcmt1cCkuc29ydCgpLmpvaW4oJy8nKSA9PT0gT2JqZWN0LmtleXMoY2hpbGQubWFya3VwKS5zb3J0KCkuam9pbignLycpKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZSA9IGxhc3QudmFsdWUuY29uY2F0KGNoaWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0LmtpbmQgPT09ICdUZXh0JyAmJiBjaGlsZC5raW5kID09PSAnVGV4dCcgJiYgbGFzdC5tb2RlID09PSBjaGlsZC5tb2RlKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZSArPSBjaGlsZC52YWx1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgb25seUNhc2VQcm90ZWN0ZWQobm9kZSkge1xuICAgICAgICByZXR1cm4gKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbm9kZS5raW5kKSA9PT0gJ0Jsb2NrJyAmJiBub2RlLmNhc2UgPT09ICdwcm90ZWN0JyAmJiBPYmplY3Qua2V5cyhub2RlLm1hcmt1cCkuam9pbignLycpID09PSAnJztcbiAgICB9XG4gICAgYXJndW1lbnQobm9kZSwga2luZCkge1xuICAgICAgICBpZiAoIW5vZGUuYXJndW1lbnRzIHx8ICFub2RlLmFyZ3VtZW50cy5yZXF1aXJlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gKGtpbmQgPT09ICdub25lJyk7XG4gICAgICAgIC8vIGV4cGVjdCAnbicgdGV4dCBhcmd1bWVudHNcbiAgICAgICAgaWYgKHR5cGVvZiBraW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aCAhPT0ga2luZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgdGhlIG9ubHkgb25lXG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5yZXF1aXJlZC5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGxvb3NlIGNoZWNraW5nIGZvciB0ZXh0XG4gICAgICAgIGlmIChraW5kID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbm9kZS5hcmd1bWVudHMucmVxdWlyZWRbMF07XG4gICAgICAgICAgICBpZiAoZmlyc3Qua2luZCA9PT0gJ0Jsb2NrJyAmJiBmaXJzdC52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QudmFsdWVbMF0ua2luZCA9PT0gJ1RleHQnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3QudmFsdWVbMF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc3RyaWN0IGtpbmQgY2hlY2tcbiAgICAgICAgICAgIGtpbmQgPSAnVGV4dCc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgdGhlIG9ubHkgb25lIGFuZCBpcyBvZiB0aGUgc3BlY2lmaWVkIGtpbmRcbiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aCAhPT0gMSB8fCBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5raW5kICE9PSBraW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucmVxdWlyZWRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbGVhbihub2RlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUubWFwKGNoaWxkID0+IHRoaXMuY2xlYW4oY2hpbGQpKTtcbiAgICAgICAgZGVsZXRlIG5vZGUubG9jO1xuICAgICAgICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgICAgICAgICAgY2FzZSAnSW5saW5lTWF0aCc6XG4gICAgICAgICAgICBjYXNlICdEaXNwbGF5TWF0aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fYmxvY2sobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdFbnZpcm9ubWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fZW52aXJvbm1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdCbG9jayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fYmxvY2sobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdCaWJsaW9ncmFwaHknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX2JpYihub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbl9jb21tYW5kKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRGlhY3JpdGljQ29tbWFuZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fZGlhY3JpdGljKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRW50cnknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX2VudHJ5KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRmllbGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmF3ID8gbm9kZSA6IHRoaXMuY2xlYW5fZmllbGQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdTdHJpbmdEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fc3RyaW5nZGVjbChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1N0cmluZ1JlZmVyZW5jZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fc3RyaW5ncmVmKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnU3Vic2NyaXB0Q29tbWFuZCc6XG4gICAgICAgICAgICBjYXNlICdTdXBlcnNjcmlwdENvbW1hbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX3NjcmlwdChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1N5bWJvbENvbW1hbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX3N5bWJvbChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1ByZWFtYmxlRXhwcmVzc2lvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fcHJlYW1ibGUobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICAgICAgY2FzZSAnVGV4dCc6XG4gICAgICAgICAgICBjYXNlICdCcmFjZWRDb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVDb21tZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFBhcnNlckVycm9yKGBubyBjbGVhbnVwIG1ldGhvZCBmb3IgJHt0aGlzLnNob3cobm9kZSl9YCwgbm9kZSksIHRoaXMudGV4dCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhbl9wcmVhbWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuaW5fcHJlYW1ibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBjbGVhbiA9IHRoaXMuY2xlYW4obm9kZS52YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5fcHJlYW1ibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNsZWFuO1xuICAgIH1cbiAgICBjbGVhbl9iaWIobm9kZSkge1xuICAgICAgICBub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gY2hpbGQua2luZCAhPT0gJ05vbkVudHJ5VGV4dCcpLm1hcChjaGlsZCA9PiB0aGlzLmNsZWFuKGNoaWxkKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zdHJpbmdkZWNsKG5vZGUpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdzW25vZGUubmFtZS50b1VwcGVyQ2FzZSgpXSA9IG5vZGUudmFsdWU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zdHJpbmdyZWYobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX3N0cmluZyA9IHRoaXMuc3RyaW5nc1tuYW1lXVxuICAgICAgICAgICAgfHwgdGhpcy5vcHRpb25zLnN0cmluZ3NbbmFtZV1cbiAgICAgICAgICAgIHx8IHRoaXMuZGVmYXVsdF9zdHJpbmdzW25hbWVdXG4gICAgICAgICAgICB8fCAoZmllbGRzLnVuYWJicmV2LmluY2x1ZGVzKHRoaXMuY2xlYW5pbmcubmFtZSkgJiYgKChfYSA9IHRoaXMub3B0aW9ucy51bmFiYnJldmlhdGVbbmFtZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSAmJiBbdGhpcy50ZXh0KHRoaXMub3B0aW9ucy51bmFiYnJldmlhdGVbbmFtZV0udGV4dCldKTtcbiAgICAgICAgaWYgKCFfc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudW5yZXNvbHZlZFN0cmluZ3NbbmFtZV0pXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IG1lc3NhZ2U6IGBVbnJlc29sdmVkIEBzdHJpbmcgcmVmZXJlbmNlICR7SlNPTi5zdHJpbmdpZnkobm9kZS5uYW1lKX1gIH0pO1xuICAgICAgICAgICAgdGhpcy51bnJlc29sdmVkU3RyaW5nc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAga2luZDogJ0Jsb2NrJyxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZm91bmQsIGFkZCBpdCBhcy1pcyBidXQgZXhlbXB0IGl0IGZyb20gc2VudGVuY2UgY2FzaW5nXG4gICAgICAgICAgICBjYXNlOiBfc3RyaW5nID8gdW5kZWZpbmVkIDogJ3ByZXNlcnZlJyxcbiAgICAgICAgICAgIG1hcmt1cDoge30sXG4gICAgICAgICAgICB2YWx1ZTogX3N0cmluZyA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX3N0cmluZykpIDogW3RoaXMudGV4dChub2RlLm5hbWUpXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFuX2VudHJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2hvcnRqb3VybmFscyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG5vZGUuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzLnVuYWJicmV2LmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJiciA9IGZpZWxkLnZhbHVlLm1hcCh2ID0+IHYuc291cmNlKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb3VybmFsID0gdGhpcy5vcHRpb25zLnVuYWJicmV2aWF0ZVthYmJyXTtcbiAgICAgICAgICAgICAgICBpZiAoam91cm5hbCkge1xuICAgICAgICAgICAgICAgICAgICBzaG9ydGpvdXJuYWxzLnB1c2goT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSkpLCB7IG5hbWU6ICdzaG9ydGpvdXJuYWwnIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGpvdXJuYWwuYXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuZmllbGRzID0gbm9kZS5maWVsZHMuY29uY2F0KHNob3J0am91cm5hbHMpLm1hcChjaGlsZCA9PiB0aGlzLmNsZWFuKGNoaWxkKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBzdGFydENsZWFuaW5nKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpZWxkcy50aXRsZS5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbmluZyA9IHsgdHlwZTogJ3RpdGxlJywgbmFtZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkcy5jcmVhdG9yLmluY2x1ZGVzKG5hbWUucmVwbGFjZSgvcyQvLCAnJykpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFuaW5nID0geyB0eXBlOiAnY3JlYXRvcicsIG5hbWU6IG5hbWUucmVwbGFjZSgvcyQvLCAnJykgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5pbmcgPSB7IHR5cGU6ICdvdGhlcicsIG5hbWUgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJpcE5vQ2FzZShub2RlLCBzdHJpcCwgcHJlc2VydmUpIHtcbiAgICAgICAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgICAgICAvLyBhIGJpdCBjaGVhdHkgdG8gYXNzdW1lIHRoZXNlIHRvIGJlIG5vY2FzZWQsIGJ1dCBpdCdzIGp1c3QgbW9yZSBsaWtlbHkgdG8gYmUgd2hhdCBwZW9wbGUgd2FudFxuICAgICAgICAgICAgICAgIGlmIChbJ2Noc2YnLCAnYmlic3RyaW5nJywgJ2NpdGUnXS5pbmNsdWRlcyhub2RlLmNvbW1hbmQpKVxuICAgICAgICAgICAgICAgICAgICBzdHJpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMucmVxdWlyZWQubWFwKGFyZyA9PiB0aGlzLnN0cmlwTm9DYXNlKGFyZywgc3RyaXAsIHByZXNlcnZlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCbG9jayc6XG4gICAgICAgICAgICBjYXNlICdJbmxpbmVNYXRoJzpcbiAgICAgICAgICAgIGNhc2UgJ0Rpc3BsYXlNYXRoJzpcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAgJiYgbm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNhc2UgPSAncHJlc2VydmUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLnZhbHVlLm1hcCh2ID0+IHRoaXMuc3RyaXBOb0Nhc2Uodiwgc3RyaXAgfHwgbm9kZS5jYXNlID09PSAncHJvdGVjdCcsIHByZXNlcnZlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdGaWVsZCc6XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUubWFwKHYgPT4gdGhpcy5zdHJpcE5vQ2FzZSh2LCBzdHJpcCwgcHJlc2VydmUpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1ZlcmJhdGltRmllbGQobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wdGlvbnMudmVyYmF0aW1GaWVsZHMuZmluZChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpID8gbmFtZSA9PT0gcCA6IG5hbWUubWF0Y2gocCkpO1xuICAgIH1cbiAgICBjbGVhbl9maWVsZChub2RlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGVhbmluZyhub2RlLm5hbWUpO1xuICAgICAgICB0aGlzLnN0cmlwTm9DYXNlKG5vZGUsICF0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gfHwgdGhpcy5pc1ZlcmJhdGltRmllbGQobm9kZS5uYW1lKSwgdGhpcy5vcHRpb25zLnNlbnRlbmNlQ2FzZS5sZW5ndGggPT09IDApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuY29uZGVuc2Uobm9kZSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zY3JpcHQobm9kZSkge1xuICAgICAgICBsZXQgbSwgdmFsdWUsIHNpbmdsZWNoYXI7XG4gICAgICAgIC8vIHJlY29nbml6ZSBjb21iaW5lZCBmb3JtcyBsaWtlIFxcXlxcY2lyY1xuICAgICAgICBpZiAoc2luZ2xlY2hhciA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtub2RlLnNvdXJjZV0pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHNpbmdsZWNoYXIpO1xuICAgICAgICBpZiAoKG0gPSBub2RlLnNvdXJjZS5tYXRjaCgvXihbXFxeX10pKFtee31dKykkLykpICYmICgoc2luZ2xlY2hhciA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHttWzFdfSR7bVsyXX1gXSkgfHwgKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7bVsxXX17JHttWzJdfX1gXSkpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChzaW5nbGVjaGFyKTtcbiAgICAgICAgaWYgKChtID0gbm9kZS5zb3VyY2UubWF0Y2goL14oW1xcXl9dKVxceyhbXnt9XSspXFx9JC8pKSAmJiAoKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7bVsxXX0ke21bMl19YF0pIHx8IChzaW5nbGVjaGFyID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2Ake21bMV19eyR7bVsyXX19YF0pKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoc2luZ2xlY2hhcik7XG4gICAgICAgIGNvbnN0IGNtZCA9IG5vZGUua2luZCA9PT0gJ1N1cGVyc2NyaXB0Q29tbWFuZCcgPyAnXicgOiAnXyc7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgJiYgKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7Y21kfSR7bm9kZS52YWx1ZX1gXSB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7Y21kfXske25vZGUudmFsdWV9fWBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChzaW5nbGVjaGFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFt0aGlzLnRleHQobm9kZS52YWx1ZSldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtub2RlLnZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RlID0gbm9kZS5raW5kID09PSAnU3VwZXJzY3JpcHRDb21tYW5kJyA/ICdzdXAnIDogJ3N1Yic7XG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICBtYXJrdXA6IHsgW21vZGVdOiB0cnVlIH0sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFuX2Vudmlyb25tZW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jb25kZW5zZShub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIG5lZWRzUHJvdGVjdGlvbih3b3JkKSB7XG4gICAgICAgIHJldHVybiAhd29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzVXBwZXIpICYmIHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmhhc0xvd2VyKTtcbiAgICB9XG4gICAgY2xlYW5fYmxvY2sobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY29uZGVuc2Uobm9kZSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gIT09ICdzdHJpY3QnICYmICgoX2EgPSB0aGlzLmNsZWFuaW5nKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHlwZSkgPT09ICd0aXRsZScgJiYgbm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgIC8vIHRlc3Qgd2hldGhlciB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBza2lwcGluZyBjYXNlIHByb3RlY3Rpb24gYmVjYXVzZSBpdCBjb250YWlucyBhbGwgd29yZHMgdGhhdCB3aWxsIGJlIHByZXNlcnZlZCBhbnl3YXkgd2hlbiBjb252ZXJ0aW5nIGJhY2sgdG8gVGl0bGUgQ2FzZVxuICAgICAgICAgICAgbGV0IHByZXNlcnZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5raW5kID09PSAnVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjaGlsZC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXNlcnZlID0gIXZhbHVlLm1hdGNoKHByZXNlcnZlQ2FzZS5pc0Nhc2VTZW5zaXRpdmUpIHx8ICF2YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbmQod29yZCA9PiB0aGlzLm5lZWRzUHJvdGVjdGlvbih3b3JkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVzZXJ2ZSlcbiAgICAgICAgICAgICAgICBub2RlLmNhc2UgPSAncHJlc2VydmUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW21hcmt1cCwgb25dIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUubWFya3VwKSkge1xuICAgICAgICAgICAgICAgIGlmICghb24pXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBub2RlLm1hcmt1cFttYXJrdXBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9kaWFjcml0aWMobm9kZSkge1xuICAgICAgICBjb25zdCBjaGFyID0gbm9kZS5kb3RsZXNzID8gYFxcXFwke25vZGUuY2hhcmFjdGVyfWAgOiBub2RlLmNoYXJhY3RlcjtcbiAgICAgICAgbGV0IHVuaWNvZGUgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFwke25vZGUubWFya317JHtjaGFyfX1gXVxuICAgICAgICAgICAgfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLm1hcmt9JHtjaGFyfWBdXG4gICAgICAgICAgICB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYHtcXFxcJHtub2RlLm1hcmt9ICR7Y2hhcn19YF1cbiAgICAgICAgICAgIHx8IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtge1xcXFwke25vZGUubWFya30ke2NoYXJ9fWBdXG4gICAgICAgICAgICB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFwke25vZGUubWFya30gJHtjaGFyfWBdO1xuICAgICAgICBpZiAoIXVuaWNvZGUgJiYgIW5vZGUuZG90bGVzcyAmJiBub2RlLmNoYXJhY3Rlci5sZW5ndGggPT09IDEgJiYgdW5pY29kZTJsYXRleF8xLmRpYWNyaXRpY3MudG91bmljb2RlW25vZGUubWFya10pXG4gICAgICAgICAgICB1bmljb2RlID0gbm9kZS5jaGFyYWN0ZXIgKyB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy50b3VuaWNvZGVbbm9kZS5tYXJrXTtcbiAgICAgICAgaWYgKCF1bmljb2RlICYmICF0aGlzLmluX3ByZWFtYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFRlWEVycm9yKGBVbmhhbmRsZWQgXFxcXCR7bm9kZS5tYXJrfXske2NoYXJ9fWAsIG5vZGUsIHRoaXMuY2h1bmspLCB0aGlzLnRleHQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgfVxuICAgIGNsZWFuX3N5bWJvbChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmNvbW1hbmQgPT09ICdcXFxcJylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoJ1xcbicpO1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfWBdIHx8IG5vZGUuY29tbWFuZCk7XG4gICAgfVxuICAgIGZpcnN0X3RleHRfYmxvY2sobm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnZhbHVlID8gbm9kZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMuZmlyc3RfdGV4dF9ibG9jayhjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFuX2NvbW1hbmQobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBhcmcsIHVuaWNvZGU7XG4gICAgICAgIGlmICh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W25vZGUuc291cmNlXSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgIHN3aXRjaCAobm9kZS5jb21tYW5kKSB7XG4gICAgICAgICAgICBjYXNlICduZXdjb21tYW5kJzpcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IG5vZGUuYXJndW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWlyZWQubGVuZ3RoKSA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5raW5kID09PSAnQmxvY2snXG4gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLnZhbHVlLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZVswXS5raW5kID09PSAnUmVndWxhckNvbW1hbmQnXG4gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzFdLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdjb21tYW5kc1tub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZVswXS5jb21tYW5kXSA9IG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzFdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXdjb21tYW5kPycsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2luZDogJ01hcmt1cCcsIHZhbHVlOiAnPGxpPicsIHNvdXJjZTogbm9kZS5zb3VyY2UgfTtcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWMnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsIDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdbMF0ua2luZCA9PT0gJ1RleHQnICYmIGFyZ1sxXS5raW5kID09PSAnVGV4dCcgJiYgKHVuaWNvZGUgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFxmcmFjeyR7YXJnWzBdLnZhbHVlfX17JHthcmdbMV0udmFsdWV9fWBdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtpbmQ6ICdCbG9jaycsIG1hcmt1cDogeyBzdXA6IHRydWUgfSwgdmFsdWU6IFthcmdbMF1dIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KCdcXHUyMDQ0JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBraW5kOiAnQmxvY2snLCBtYXJrdXA6IHsgc3ViOiB0cnVlIH0sIHZhbHVlOiBbYXJnWzFdXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICBjYXNlICd2c3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAndnBoYW50b20nOlxuICAgICAgICAgICAgY2FzZSAncGF0aCc6XG4gICAgICAgICAgICBjYXNlICdhZnRlcmdyb3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2lnbm9yZXNwYWNlcyc6XG4gICAgICAgICAgICBjYXNlICdyZWxheCc6XG4gICAgICAgICAgICBjYXNlICdub29wc29ydCc6XG4gICAgICAgICAgICBjYXNlICdpZmRlZmluZWQnOlxuICAgICAgICAgICAgY2FzZSAnRGVjbGFyZVByZWZDaGFycyc6XG4gICAgICAgICAgICBjYXNlICdlbHNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZpJzpcbiAgICAgICAgICAgIGNhc2UgJ21ha2VhdGxldHRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpO1xuICAgICAgICAgICAgY2FzZSAnRWxzZXZpZXJHbHlwaCc6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ1RleHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxNikpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaHNmJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWJzdHJpbmcnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2l0ZSc6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0c3VwZXJzY3JpcHQnOlxuICAgICAgICAgICAgY2FzZSAnc3AnOlxuICAgICAgICAgICAgICAgIGlmICgoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnVGV4dCcpKSAmJiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXnske2FyZ319YF0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGV4dHN1YnNjcmlwdCc6XG4gICAgICAgICAgICBjYXNlICdzYic6XG4gICAgICAgICAgICAgICAgaWYgKChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpICYmICh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2BfeyR7YXJnfX1gXSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0c2MnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5xdW90ZSc6XG4gICAgICAgICAgICBjYXNlICdta2JpYnF1b3RlJzpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RleHRiZic6XG4gICAgICAgICAgICBjYXNlICdta2JpYmJvbGQnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICAgICAgICBjYXNlICdzdWJzZWN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1YnN1YnNlY3Rpb24nOlxuICAgICAgICAgICAgY2FzZSAnc3Vic3Vic3Vic2VjdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdta2JpYml0YWxpYyc6XG4gICAgICAgICAgICBjYXNlICdta2JpYmVtcGgnOlxuICAgICAgICAgICAgY2FzZSAndGV4dGl0JzpcbiAgICAgICAgICAgIGNhc2UgJ2VtcGgnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHsga2luZDogJ0Jsb2NrJywgbWFya3VwOiB7IGl0YWxpY3M6IHRydWUgfSwgdmFsdWU6IFt0aGlzLnRleHQoYXJnKV0gfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWJjeXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3VtZW50KG5vZGUsICdub25lJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdtYXRocm0nOlxuICAgICAgICAgICAgY2FzZSAndGV4dHJtJzpcbiAgICAgICAgICAgIGNhc2UgJ29jaXJjJzpcbiAgICAgICAgICAgIGNhc2UgJ21ib3gnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSB8fCAobm9kZS5jb21tYW5kID09PSAnaHNwYWNlJyA/ICcgJyA6IGFyZykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbm9kZS5hcmd1bWVudHMucmVxdWlyZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGp1c3QgdGFrZSB0aGUgVVJMPyBOb3QgdGhlIGxhYmVsP1xuICAgICAgICAgICAgY2FzZSAnaHJlZic6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgMikpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZ1swXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cmwnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NsJzpcbiAgICAgICAgICAgIGNhc2UgJ2VtJzpcbiAgICAgICAgICAgIGNhc2UgJ2l0JzpcbiAgICAgICAgICAgIGNhc2UgJ2l0c2hhcGUnOlxuICAgICAgICAgICAgY2FzZSAnYmYnOlxuICAgICAgICAgICAgY2FzZSAnYmZzZXJpZXMnOlxuICAgICAgICAgICAgY2FzZSAnc2MnOlxuICAgICAgICAgICAgY2FzZSAnc2NzaGFwZSc6XG4gICAgICAgICAgICBjYXNlICd0dCc6XG4gICAgICAgICAgICBjYXNlICdybSc6XG4gICAgICAgICAgICBjYXNlICdzZic6XG4gICAgICAgICAgICBjYXNlICd2ZXJiJzpcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIHRoZSBncmFtbWFyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpO1xuICAgICAgICAgICAgLy8gd291bGRuJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlc2VcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgIGNhc2UgJ3Bhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgnXFxuXFxuJyk7XG4gICAgICAgICAgICBjYXNlICdjeXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3VtZW50KG5vZGUsICdub25lJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BvbGhrJzpcbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUgKyAnXFx1MDMyOCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCdcXHUwMzI4Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCcgJiYgdGhpcy5uZXdjb21tYW5kc1tub2RlLmNvbW1hbmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5uZXdjb21tYW5kc1tub2RlLmNvbW1hbmRdKSksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZTJsYXRleF8xLmRpYWNyaXRpY3MudG91bmljb2RlW25vZGUuY29tbWFuZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMucmVxdWlyZWQgPSB0aGlzLmNsZWFuKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMucmVxdWlyZWQubGVuZ3RoID09PSAxICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLmtpbmQgPT09ICdUZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gaWRlYSB3aHkgSSBjYW4ndCBqdXN0IHN0cmFpZ2h0IHJldHVybiB0aGlzIGJ1dCB0eXBlc2NyaXB0IGp1c3Qgd29uJ3Qgc2h1dCB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ0Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyazogbm9kZS5jb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdGxlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5sb2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYmxvY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJsb2NrID0gdGhpcy5maXJzdF90ZXh0X2Jsb2NrKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpeGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jay52YWx1ZSA9IGJsb2NrLnZhbHVlLnJlZHVjZSgodmFsdWUsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXhlZCAmJiBjaGlsZC5raW5kID09PSAnVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHsga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLCBtYXJrOiBub2RlLmNvbW1hbmQsIGNoYXJhY3RlcjogY2hpbGQudmFsdWVbMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnB1c2goT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjaGlsZCksIHsgdmFsdWU6IGNoaWxkLnZhbHVlLnN1YnN0cmluZygxKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS5hcmd1bWVudHMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJsaW5lIHdpdGhvdXQgYXJndW1lbnRzIGRvZXNuJ3Qgc2VlbSB0byByZW5kZXIgaW4gTGFUZVhcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbW1hbmQgPT09ICdvdmVybGluZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW3RoaXMudGV4dCgnICcgKyB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy50b3VuaWNvZGVbbm9kZS5jb21tYW5kXSldLmNvbmNhdChub2RlLmFyZ3VtZW50cy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtub2RlLnNvdXJjZV0gfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2Ake25vZGUuc291cmNlfXt9YF0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLmNvbW1hbmR9YF0gfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLmNvbW1hbmR9e31gXSkgJiYgdGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGlmICgoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnVGV4dCcpKSAmJiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluX3ByZWFtYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChub2RlLnNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUZVhFcnJvcihgVW5oYW5kbGVkIGNvbW1hbmQ6ICR7bm9kZS5jb21tYW5kfWAgKyB0aGlzLnNob3cobm9kZSksIG5vZGUsIHRoaXMuY2h1bmspLCB0aGlzLnRleHQoKSk7XG4gICAgfVxuICAgIHByZXNlcnZlQ2FzZSh3b3JkKSB7XG4gICAgICAgIC8vIHdvcmQgPSB3b3JkLnJlcGxhY2UobmV3IFJlZ0V4cChgXCJbJHt0aGlzLm1hcmt1cC5lbnF1b3RlLm9wZW59JHt0aGlzLm1hcmt1cC5lbnF1b3RlLmNsb3NlfTooKV1gLCAnZycpLCAnJylcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCF3b3JkLnRyaW0oKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5oYXNBbHBoYU51bSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgd29yZCA9IHdvcmQucmVwbGFjZSgvW1xcL+KAmSfigJ06KCldL2csICcnKTtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdJJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh3b3JkLnJlcGxhY2UocHJlc2VydmVDYXNlLm5vdENhc2VTZW5zaXRpdmUpID09PSAnJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gd29yZCA9IHdvcmQucmVwbGFjZShwcmVzZXJ2ZUNhc2Uubm90QWxwaGFOdW0sICcnKVxuICAgICAgICAvLyBzaW1wbGUgY2FwIGF0IHN0YXJ0IG9mIGZpZWxkXG4gICAgICAgIGlmICh3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5sZWFkaW5nQ2FwKSAmJiAoKF9iID0gKF9hID0gdGhpcy5maWVsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuYWxsQ2FwcykpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSAmJiB3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5qb2luZWQpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzVXBwZXIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5pc051bWJlcikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb252ZXJ0KG5vZGUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5tYXAoY2hpbGQgPT4gdGhpcy5jb252ZXJ0KGNoaWxkKSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmF3ICYmIHRoaXMuZmllbGQpXG4gICAgICAgICAgICBub2RlID0gdGhpcy50ZXh0KG5vZGUuc291cmNlKTtcbiAgICAgICAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01hcmt1cCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCArPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnJhY2VkQ29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICdMaW5lQ29tbWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKG5vZGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRW50cnknOlxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydF9lbnRyeShub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0X251bWJlcihub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydF90ZXh0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmxvY2snOlxuICAgICAgICAgICAgY2FzZSAnSW5saW5lTWF0aCc6XG4gICAgICAgICAgICBjYXNlICdEaXNwbGF5TWF0aCc6XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpZWxkID8gdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlc2VydmUgPSB0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInICYmIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0X2Jsb2NrKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZSAmJiAobm9kZS5jYXNlIHx8IG5vZGUua2luZC5lbmRzV2l0aCgnTWF0aCcpKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZShzdGFydCwgdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCk7IC8vICwgYGNvbnZlcnQtYmxvY2s6IGNhc2U9JHtub2RlLmNhc2V9LCBtYXRoPSR7bm9kZS5raW5kLmVuZHNXaXRoKCdNYXRoJyl9YClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Vudmlyb25tZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRfZW52aXJvbm1lbnQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQcmVhbWJsZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHRoaXMucHJlYW1ibGUucHVzaChub2RlLnZhbHVlLm1hcChwcmVhbWJsZSA9PiBwcmVhbWJsZS5zb3VyY2UpLmpvaW4oJ1xcblxcbicpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Rpc3BsYXlNYXRoJzpcbiAgICAgICAgICAgIGNhc2UgJ0lubGluZU1hdGgnOlxuICAgICAgICAgICAgY2FzZSAnU3RyaW5nRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoYG5vIGNvbnZlcnRlciBmb3IgJHtub2RlLmtpbmR9OiAke3RoaXMuc2hvdyhub2RlKX1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzcGxpdE9uY2Uocywgc2VwLCBmcm9tRW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBmcm9tRW5kID8gcy5sYXN0SW5kZXhPZihzZXApIDogcy5pbmRleE9mKHNlcCk7XG4gICAgICAgIHJldHVybiAoc3BsaXQgPCAwKSA/IFtzLCAnJ10gOiBbcy5zdWJzdHIoMCwgc3BsaXQpLCBzLnN1YnN0cihzcGxpdCArIDEpXTtcbiAgICB9XG4gICAgcGFyc2VOYW1lKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdChtYXJrZXIuY29tbWEpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICYmICFwYXJ0cy5maW5kKHAgPT4gIXAubWF0Y2goL15bYS16XSsoLWkpPz0vaSkpKSB7IC8vIGV4dGVuZGVkIG5hbWUgZm9ybWF0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJzZWQgfHwge307XG4gICAgICAgICAgICAgICAgY29uc3QgW2F0dHIsIHZhbHVlXSA9IHRoaXMuc3BsaXRPbmNlKHBhcnQucmVwbGFjZShtYXJrZXIucmUuc3BhY2UsICcnKSwgJz0nKS5tYXAodiA9PiB2LnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmFtaWx5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5sYXN0TmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dpdmVuLWknOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmluaXRpYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnaXZlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQuZmlyc3ROYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncHJlZml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wcmVmaXggPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzdWZmaXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnN1ZmZpeCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VzZXByZWZpeCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQudXNlcHJlZml4ID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2p1bmlvcmNvbW1hJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC51c2VwcmVmaXggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFthdHRyLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gLyguKz8pXFxzKyh2ZXJlfHZvbnx2YW4gZGVufHZhbiBkZXJ8dmFufGRlfGRlbHxkZWxsYXxkZXJ8ZGl8ZGF8cGlldHJvfHZhbmRlbnxkdXxzdC58c3R8bGF8bG98dGVyfGJpbnxpYm58dGV8dGVufG9wfGJlbnxhbClcXHMrKC4rKS87XG4gICAgICAgIGxldCBtO1xuICAgICAgICBzd2l0Y2ggKHBhcnNlZCA/IDAgOiBwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IHBhcnNlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOiAvLyBuYW1lIHdpdGhvdXQgY29tbWFzXG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbFxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIucmUubGl0ZXJhbE5hbWUudGVzdChwYXJ0c1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0geyBsaXRlcmFsOiBwYXJ0c1swXSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtID0gcGFydHNbMF0ucmVwbGFjZShtYXJrZXIucmUuc3BhY2UsICcgJykubWF0Y2gocHJlZml4KSkgeyAvLyBzcGxpdCBvbiBwcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBtWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBtWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IG1bM10sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b3AtbGV2ZWwgXCJmaXJzdG5hbWUgbGFzdG5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSB0aGlzLnNwbGl0T25jZShwYXJ0c1swXSwgbWFya2VyLnNwYWNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3ROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHsgbGFzdE5hbWU6IGZpcnN0TmFtZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOiAvLyBsYXN0bmFtZSwgZmlyc3RuYW1lXG4gICAgICAgICAgICAgICAgcGFyc2VkID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogcGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGxhc3RuYW1lLCBzdWZmaXgsIGZpcnN0bmFtZVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IHBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IHBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHBhcnRzLnNsaWNlKDIpLmpvaW4obWFya2VyLmNvbW1hKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBwYXJzZWRba10gPSBtYXJrZXIuY2xlYW4odikudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICAgIGNvbnZlcnRfZW50cnkobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZW50cnkgPSB7XG4gICAgICAgICAgICBrZXk6IG5vZGUuaWQsXG4gICAgICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgY3JlYXRvcnM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVudHJpZXMucHVzaCh0aGlzLmVudHJ5KTtcbiAgICAgICAgLy8gb3JkZXIgdGhlc2UgZmlyc3QgZm9yIGxhbmd1YWdlLWRlcGVuZGVudCBzZW50ZW5jZSBjYXNpbmdcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbJ2xhbmdpZCcsICdoeXBoZW5hdGlvbicsICdsYW5ndWFnZSddO1xuICAgICAgICBub2RlLmZpZWxkcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpYSA9IG9yZGVyLmluZGV4T2YoYS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGliID0gb3JkZXIuaW5kZXhPZihiLm5hbWUpO1xuICAgICAgICAgICAgaWYgKGlhID09PSAtMSAmJiBpYiA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7IC8vIGRvZXNuJ3QgbWF0dGVyIHJlYWxseVxuICAgICAgICAgICAgaWYgKGlhID09PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIGlmIChpYiA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIGlhIC0gaWI7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc2VudGVuY2VDYXNlID0gISF0aGlzLm9wdGlvbnMuc2VudGVuY2VDYXNlLmxlbmd0aDsgLy8gaWYgc2VudGVuY2VDYXNlIGlzIGVtcHR5LCBubyBzZW50ZW5jZSBjYXNpbmdcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBub2RlLmZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmtpbmQgIT09ICdGaWVsZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFBhcnNlckVycm9yKGBFeHBlY3RlZCBGaWVsZCwgZ290ICR7ZmllbGQua2luZH1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDbGVhbmluZyhmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhdyAmJiB0aGlzLmZpZWxkVHlwZSAhPT0gJ2NyZWF0b3InKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW2ZpZWxkLm5hbWVdID0gWyBmaWVsZC52YWx1ZS5tYXAodiA9PiB2LnNvdXJjZSkuam9pbignJykgXVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmllbGQgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgICAgICAgICB1cHBlcjogMCxcbiAgICAgICAgICAgICAgICAgICAgbG93ZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSYW5nZXM6IChzZW50ZW5jZUNhc2UgJiYgZmllbGRzLnRpdGxlLmluY2x1ZGVzKGZpZWxkLm5hbWUpKSA/IFtdIDogbnVsbCxcbiAgICAgICAgICAgICAgICBodG1sOiB0aGlzLm9wdGlvbnMuaHRtbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmVudHJ5LmZpZWxkc1t0aGlzLmZpZWxkLm5hbWVdID0gdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXSB8fCBbXTtcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgJ3RpdGxlID0gMjAyMCdcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZS5raW5kID09PSAnTnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW3RoaXMuZmllbGQubmFtZV0ucHVzaChmaWVsZC52YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnQoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ID0gdGhpcy5maWVsZC50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKC88XFwvKFthLXpdKT48XFwxPi9nLCAnJyk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQucmVwbGFjZSgvPChbYS16XSk+KFxccyopPFxcL1xcMT4vZywgJyQxJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQudGV4dClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIGRpc2FibGUgc2VudGVuY2VDYXNpbmcgaWYgbm90IGFuIGVuZ2xpc2hcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5maWVsZC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGFuZ2lkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdoeXBoZW5hdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHNlbnRlbmNlQ2FzZSA9IHNlbnRlbmNlQ2FzZSAmJiB0aGlzLm9wdGlvbnMuc2VudGVuY2VDYXNlLmluY2x1ZGVzKHRoaXMuZmllbGQudGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGFuZ3VhZ2UnOlxuICAgICAgICAgICAgICAgICAgICBzZW50ZW5jZUNhc2UgPSBzZW50ZW5jZUNhc2UgJiYgISEodGhpcy5maWVsZC50ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5maW5kKGxhbmcgPT4gdGhpcy5vcHRpb25zLnNlbnRlbmNlQ2FzZS5pbmNsdWRlcyhsYW5nKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFwiZ3JvdXBzXCIgaXMgYSBqYWJyZWYgMy44KyBtb25zdHJvc2l0eVxuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQubmFtZS5tYXRjaCgvXihrZXl3b3Jkcz98Z3JvdXBzKSQvKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRleHQgb2YgdGhpcy5maWVsZC50ZXh0LnNwbGl0KG1hcmtlci5jb21tYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW3RoaXMuZmllbGQubmFtZV0ucHVzaCh0ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNsZWFuaW5nLnR5cGUgPT09ICdjcmVhdG9yJykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnRyeS5jcmVhdG9yc1t0aGlzLmZpZWxkLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudHJ5LmNyZWF0b3JzW3RoaXMuZmllbGQubmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAvLyB7TS4gSGFsbGUsIEouIEJyZXNuYW4sIGFuZCBHLiBNaWxsZXJ9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQudGV4dC5pbmNsdWRlcyhgJHttYXJrZXIuY29tbWF9JHttYXJrZXIuYW5kfWApKSB7IC8vXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7bWFya2VyLmNvbW1hfSR7bWFya2VyLmFuZH1gLCAnZycpLCBtYXJrZXIuYW5kKS5yZXBsYWNlKG5ldyBSZWdFeHAobWFya2VyLmNvbW1hKSwgbWFya2VyLmFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3JlYXRvciBvZiB0aGlzLmZpZWxkLnRleHQuc3BsaXQobWFya2VyLmFuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKG1hcmtlci5jbGVhbihjcmVhdG9yKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuY3JlYXRvcnNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKHRoaXMucGFyc2VOYW1lKGNyZWF0b3IpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZHMudW5hYmJyZXYuaW5jbHVkZXMoZmllbGQubmFtZSkpIHsgLy8gZG9lc24ndCBnZXQgc2VudGVuY2UgY2FzaW5nIGFueWhvdyBUT0RPOiBib29rdGl0bGUgZG9lcyFcbiAgICAgICAgICAgICAgICB0aGlzLmVudHJ5LmZpZWxkc1t0aGlzLmZpZWxkLm5hbWVdLnB1c2goKCgoX2EgPSB0aGlzLm9wdGlvbnMudW5hYmJyZXZpYXRlW3RoaXMuZmllbGQudGV4dF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSB8fCB0aGlzLmZpZWxkLnRleHQpLm5vcm1hbGl6ZSgnTkZDJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ndWVzc0FscmVhZHlTZW50ZW5jZUNhc2VkICYmIE1hdGgubWF4KHRoaXMuZmllbGQud29yZHMudXBwZXIsIHRoaXMuZmllbGQud29yZHMubG93ZXIpID4gKHRoaXMuZmllbGQud29yZHMub3RoZXIgKyBNYXRoLm1pbih0aGlzLmZpZWxkLndvcmRzLnVwcGVyLCB0aGlzLmZpZWxkLndvcmRzLmxvd2VyKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmUobnVsbCwgbnVsbCk7IC8vICwgJ21vc3RseSBzZW50ZW5jZSBjYXNlZCBhbHJlYWR5JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKHByZXNlcnZlQ2FzZS5tYXJrdXAsIG1hcmt1cCA9PiBtYXJrZXIubWFya3VwLnJlcGVhdChtYXJrdXAubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUNhc2Uuc2VudGVuY2VTdGFydC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHByZXNlcnZlQ2FzZS5zZW50ZW5jZVN0YXJ0LmV4ZWModHh0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNsdWRlIHN0dWZmIGxpa2UgXCJVLlMuIFRheGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAyICYmIHR4dC5zdWJzdHIoMCwgbWF0Y2guaW5kZXggKyAxKS5tYXRjaChwcmVzZXJ2ZUNhc2UuYWNyb255bSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmUobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsgLy8gLCBgc2VudGVuY2VTdGFydDogJHttYXRjaFswXX0gYXQgJHttYXRjaC5pbmRleH0uLiR7bWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGh9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQ2FzZS5xdW90ZWQubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBwcmVzZXJ2ZUNhc2UucXVvdGVkLmV4ZWModGhpcy5maWVsZC50ZXh0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlKG1hdGNoLmluZGV4LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7IC8vICwgJ3F1b3RlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKHRoaXMuY29udmVydFRvU2VudGVuY2VDYXNlKHRoaXMuZmllbGQudGV4dCkubm9ybWFsaXplKCdORkMnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZCA9IG51bGw7XG4gICAgfVxuICAgIGNvbnZlcnRUb1NlbnRlbmNlQ2FzZSh0ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAvLyBhbHdheXMga2VlcCB0aGUgbGVhZGluZyBjaGFyLCBidXQgc2tpcCBtYXJrdXBcbiAgICAgICAgY29uc3QgbGVhZCA9IHRleHQubWF0Y2goL14oPFtePl0rPikqLi8pO1xuICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZShsZWFkWzBdLmxlbmd0aCAtIDEsIGxlYWRbMF0ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmUoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbnRlbmNlQ2FzZWQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKChbXFw/IV1cXHMqfF4pKFtcXCdcXFwiwqHCv+KAnOKAmOKAnsKrXFxzXSspP1teXFxzXSkvZywgeCA9PiB4LnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgc3RhcnQsIGVuZCB9IG9mIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgIHNlbnRlbmNlQ2FzZWQgPSBzZW50ZW5jZUNhc2VkLnN1YnN0cmluZygwLCBzdGFydCkgKyB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSArIHNlbnRlbmNlQ2FzZWQuc3Vic3RyaW5nKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgIT09IHNlbnRlbmNlQ2FzZWQpXG4gICAgICAgICAgICB0aGlzLmVudHJ5LnNlbnRlbmNlQ2FzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gc2VudGVuY2VDYXNlZDtcbiAgICB9XG4gICAgY29udmVydF9udW1iZXIobm9kZSkge1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gYCR7bm9kZS52YWx1ZX1gO1xuICAgIH1cbiAgICBjb252ZXJ0X3RleHQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5tb2RlID09PSAndmVyYmF0aW0nKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gbm9kZS52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGV1cmlzdGljIHRvIGRldGVjdCBwcmUtc2VudGVuY2VjYXNlZCB0ZXh0XG4gICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiBub2RlLnZhbHVlLnNwbGl0KC9cXGIvKSkge1xuICAgICAgICAgICAgaWYgKHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmFsbExvd2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQud29yZHMubG93ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmFsbENhcHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC53b3Jkcy51cHBlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzQWxwaGEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC53b3Jkcy5vdGhlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmxldmVsID09PSAwICYmIHRoaXMuY2xlYW5pbmcudHlwZSA9PT0gJ2NyZWF0b3InKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gbm9kZS52YWx1ZS5yZXBsYWNlKC9cXHMrYW5kXFxzKy9pZywgbWFya2VyLmFuZCkucmVwbGFjZSgvXFxzKixcXHMqL2csIG1hcmtlci5jb21tYSkucmVwbGFjZSgvXFxzKy9nLCBtYXJrZXIuc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmxldmVsID09PSAwICYmIHRoaXMuZmllbGQubmFtZS5tYXRjaCgvXihrZXl3b3Jkcz98Z3JvdXBzKSQvKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWUucmVwbGFjZSgvXFxzKls7LF1cXHMqL2csIG1hcmtlci5jb21tYSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmllbGQuaHRtbCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS52YWx1ZS5zcGxpdCgvKFxccyspLyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZmllbGQudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IHdvcmQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlc2VydmVDYXNlKHdvcmQpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlKHN0YXJ0LCB0aGlzLmZpZWxkLnRleHQubGVuZ3RoKTsgLy8gLCBgd29yZDogJHtKU09OLnN0cmluZ2lmeSh3b3JkKX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udmVydF9lbnZpcm9ubWVudChub2RlKSB7XG4gICAgICAgIHRoaXMuZmllbGQudGV4dCArPSB7IGVudW1lcmF0ZTogJzxvbD4nLCBpdGVtaXplOiAnPHVsPicgfVtub2RlLmVudl07XG4gICAgICAgIHRoaXMuY29udmVydF9ibG9jayhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG5vZGUpLCB7IGtpbmQ6ICdCbG9jaycsIG1hcmt1cDoge30gfSkpO1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0geyBlbnVtZXJhdGU6ICc8L29sPicsIGl0ZW1pemU6ICc8L3VsPicgfVtub2RlLmVudl07XG4gICAgfVxuICAgIGNvbnZlcnRfYmxvY2sobm9kZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZmllbGQudGV4dC5sZW5ndGg7XG4gICAgICAgIGxldCBwcmVmaXggPSAnJztcbiAgICAgICAgbGV0IHBvc3RmaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYXNlUHJvdGVjdGlvbiAhPT0gJ3N0cmljdCcgJiYgdGhpcy5jbGVhbmluZy50eXBlID09PSAnb3RoZXInKVxuICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW5pbmcudHlwZSA9PT0gJ2NyZWF0b3InICYmIG5vZGUuY2FzZSA9PT0gJ3Byb3RlY3QnKSB7XG4gICAgICAgICAgICBwcmVmaXggKz0gbWFya2VyLmxpdGVyYWw7XG4gICAgICAgICAgICBwb3N0Zml4ID0gbWFya2VyLmxpdGVyYWwgKyBwb3N0Zml4O1xuICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgIHByZWZpeCArPSB0aGlzLm9wdGlvbnMubWFya3VwLmNhc2VQcm90ZWN0Lm9wZW47XG4gICAgICAgICAgICBwb3N0Zml4ID0gdGhpcy5vcHRpb25zLm1hcmt1cC5jYXNlUHJvdGVjdC5jbG9zZSArIHBvc3RmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtYXJrdXAgb2YgT2JqZWN0LmtleXMobm9kZS5tYXJrdXApKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBQYXJzZXJFcnJvcihgbWFya3VwOiAke21hcmt1cH1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBwcmVmaXggKz0gdGhpcy5vcHRpb25zLm1hcmt1cFttYXJrdXBdLm9wZW47XG4gICAgICAgICAgICAgICAgcG9zdGZpeCA9IHRoaXMub3B0aW9ucy5tYXJrdXBbbWFya3VwXS5jbG9zZSArIHBvc3RmaXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kID0ge1xuICAgICAgICAgICAgd2l0aG91dFByZWZpeDogdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIHdpdGhQcmVmaXg6IHRoaXMuZmllbGQudGV4dC5sZW5ndGggKyBwcmVmaXgubGVuZ3RoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gcHJlZml4O1xuICAgICAgICB0aGlzLmZpZWxkLmxldmVsKys7XG4gICAgICAgIHRoaXMuY29udmVydChub2RlLnZhbHVlKTtcbiAgICAgICAgdGhpcy5maWVsZC5sZXZlbC0tO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuZmllbGQudGV4dC5zdWJzdHJpbmcoZW5kLndpdGhQcmVmaXgpO1xuICAgICAgICBjb25zdCBhZGRlZF90ZXh0ID0gYWRkZWQucmVwbGFjZSgvPFxcLz9bXj5dKz4vZywgJycpO1xuICAgICAgICBjb25zdCBuZWVkc1Byb3RlY3Rpb24gPSBhZGRlZF90ZXh0ICYmICgodGhpcy5vcHRpb25zLmNhc2VQcm90ZWN0aW9uID09PSAnc3RyaWN0JyAmJiBhZGRlZF90ZXh0Lm1hdGNoKHByZXNlcnZlQ2FzZS5pc0Nhc2VTZW5zaXRpdmUpKVxuICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmNhc2VQcm90ZWN0aW9uID09PSAnYXMtbmVlZGVkJyAmJiBhZGRlZF90ZXh0LnNwbGl0KC9cXHMrLykuZmluZCh3b3JkID0+IHRoaXMubmVlZHNQcm90ZWN0aW9uKHdvcmQpKSkpO1xuICAgICAgICBpZiAoIWFkZGVkKSB7IC8vIG5vdGhpbmcgd2FzIGFkZGVkLCBzbyByZW1vdmUgcHJlZml4XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQuc3Vic3RyaW5nKDAsIGVuZC53aXRob3V0UHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzICYmIHByZWZpeCA9PT0gdGhpcy5vcHRpb25zLm1hcmt1cC5jYXNlUHJvdGVjdC5vcGVuICYmICFuZWVkc1Byb3RlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3YXMgYWRkZWQgdGhhdCBkaWRuJ3QgYWN0dWFsbHkgbmVlZCBjYXNlIHByb3RlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5zdWJzdHJpbmcoMCwgZW5kLndpdGhvdXRQcmVmaXgpICsgYWRkZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzID0gdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcy5maWx0ZXIocmFuZ2UgPT4gcmFuZ2Uuc3RhcnQgPCBlbmQud2l0aG91dFByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gcG9zdGZpeDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQucmVwbGFjZSgvPChzdXB8c3ViKT4oW148Pl0rKTxcXC9cXDE+JC9pLCAobSwgbW9kZSwgY2hhcnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNtZCA9IG1vZGUgPT09ICdzdXAnID8gJ14nIDogJ18nO1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9ICcnO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHtjbWR9JHtjaGFyfWBdIHx8IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHtjbWR9eyR7Y2hhcn19YF07XG4gICAgICAgICAgICAgICAgc2NyaXB0ICs9IHVuaWNvZGUgPyB1bmljb2RlIDogYDwke21vZGV9PiR7Y2hhcn08LyR7bW9kZX0+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKG5ldyBSZWdFeHAoYDwvJHttb2RlfT48JHttb2RlfT5gLCAnZycpLCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gc2NyaXB0Lmxlbmd0aCA8IG0ubGVuZ3RoID8gc2NyaXB0IDogbTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub2RlLmNhc2UgJiYgdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmUoc3RhcnQsIHRoaXMuZmllbGQudGV4dC5sZW5ndGgpOyAvLyAsICdpbiBjb252ZXJ0LWJsb2NrICcgKyBub2RlLnNvdXJjZSB8fCAnPHNvdXJjZT4nKVxuICAgIH1cbn1cbi8qKlxuICogcGFyc2UgYmlidGV4LiBUaGlzIHdpbGwgdHJ5IHRvIGNvbnZlcnQgVGVYIGNvbW1hbmRzIGludG8gdW5pY29kZSBlcXVpdmFsZW50cywgYW5kIGFwcGx5IGBAc3RyaW5nYCBleHBhbnNpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZShpbnB1dCk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5mdW5jdGlvbiBhc3QoaW5wdXQsIG9wdGlvbnMgPSB7fSwgY2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLmFzdChpbnB1dCwgY2xlYW4pO1xufVxuZXhwb3J0cy5hc3QgPSBhc3Q7XG52YXIgY2h1bmtlcl8yID0gcmVxdWlyZShcIi4vY2h1bmtlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNodW5rZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNodW5rZXJfMi5wYXJzZTsgfSB9KTtcbnZhciBqYWJyZWZfMSA9IHJlcXVpcmUoXCIuL2phYnJlZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImphYnJlZlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gamFicmVmXzEucGFyc2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgKiBhcyBCaWJUZVhQYXJzZXIgZnJvbSAnQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlcic7XG5pbXBvcnQgeyBFbnRyeSBhcyBFbnRyeURhdGFCaWJMYVRlWCB9IGZyb20gJ0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXInO1xuLy8gQWxzbyBtYWtlIEVudHJ5RGF0YUJpYkxhVGVYIGF2YWlsYWJsZSB0byBvdGhlciBtb2R1bGVzXG5leHBvcnQgeyBFbnRyeSBhcyBFbnRyeURhdGFCaWJMYVRlWCB9IGZyb20gJ0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXInO1xuXG4vLyBUcmljazogYWxsb3cgc3RyaW5nIGluZGV4aW5nIG9udG8gb2JqZWN0IHByb3BlcnRpZXNcbmV4cG9ydCBpbnRlcmZhY2UgSUluZGV4YWJsZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuY29uc3QgZGF0YWJhc2VUeXBlcyA9IFsnY3NsLWpzb24nLCAnYmlibGF0ZXgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIERhdGFiYXNlVHlwZSA9IHR5cGVvZiBkYXRhYmFzZVR5cGVzW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBURU1QTEFURV9WQVJJQUJMRVMgPSB7XG4gIGNpdGVrZXk6ICdVbmlxdWUgY2l0ZWtleScsXG4gIGFic3RyYWN0OiAnJyxcbiAgYXV0aG9yU3RyaW5nOiAnQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9yIG5hbWVzJyxcbiAgY29udGFpbmVyVGl0bGU6XG4gICAgJ1RpdGxlIG9mIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgcmVmZXJlbmNlIChlLmcuIGJvb2sgdGl0bGUgZm9yIGEgYm9vayBjaGFwdGVyLCBvciB0aGUgam91cm5hbCB0aXRsZSBmb3IgYSBqb3VybmFsIGFydGljbGUpJyxcbiAgRE9JOiAnJyxcbiAgZXByaW50OiAnJyxcbiAgZXByaW50dHlwZTogJycsXG4gIGV2ZW50UGxhY2U6ICdMb2NhdGlvbiBvZiBldmVudCcsXG4gIG5vdGU6ICcnLFxuICBwYWdlOiAnUGFnZSBvciBwYWdlIHJhbmdlJyxcbiAgcHVibGlzaGVyOiAnJyxcbiAgcHVibGlzaGVyUGxhY2U6ICdMb2NhdGlvbiBvZiBwdWJsaXNoZXInLFxuICB0aXRsZTogJycsXG4gIFVSTDogJycsXG4gIHllYXI6ICdQdWJsaWNhdGlvbiB5ZWFyJyxcbiAgem90ZXJvU2VsZWN0VVJJOiAnVVJJIHRvIG9wZW4gdGhlIHJlZmVyZW5jZSBpbiBab3Rlcm8nLFxufTtcblxuZXhwb3J0IGNsYXNzIExpYnJhcnkge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW50cmllczogeyBbY2l0ZWtleTogc3RyaW5nXTogRW50cnkgfSkge31cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmVudHJpZXMpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgdGhlIGdpdmVuIGNpdGVrZXksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYEVudHJ5YCBhbmQgcmV0dXJuIGFcbiAgICogY29sbGVjdGlvbiBvZiB0ZW1wbGF0ZSB2YXJpYWJsZSBhc3NpZ25tZW50cy5cbiAgICovXG4gIGdldFRlbXBsYXRlVmFyaWFibGVzRm9yQ2l0ZWtleShjaXRla2V5OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBlbnRyeTogRW50cnkgPSB0aGlzLmVudHJpZXNbY2l0ZWtleV07XG4gICAgY29uc3Qgc2hvcnRjdXRzID0ge1xuICAgICAgY2l0ZWtleTogY2l0ZWtleSxcblxuICAgICAgYWJzdHJhY3Q6IGVudHJ5LmFic3RyYWN0LFxuICAgICAgYXV0aG9yU3RyaW5nOiBlbnRyeS5hdXRob3JTdHJpbmcsXG4gICAgICBjb250YWluZXJUaXRsZTogZW50cnkuY29udGFpbmVyVGl0bGUsXG4gICAgICBET0k6IGVudHJ5LkRPSSxcbiAgICAgIGVwcmludDogZW50cnkuZXByaW50LFxuICAgICAgZXByaW50dHlwZTogZW50cnkuZXByaW50dHlwZSxcbiAgICAgIGV2ZW50UGxhY2U6IGVudHJ5LmV2ZW50UGxhY2UsXG4gICAgICBub3RlOiBlbnRyeS5ub3RlLFxuICAgICAgcGFnZTogZW50cnkucGFnZSxcbiAgICAgIHB1Ymxpc2hlcjogZW50cnkucHVibGlzaGVyLFxuICAgICAgcHVibGlzaGVyUGxhY2U6IGVudHJ5LnB1Ymxpc2hlclBsYWNlLFxuICAgICAgdGl0bGU6IGVudHJ5LnRpdGxlLFxuICAgICAgVVJMOiBlbnRyeS5VUkwsXG4gICAgICB5ZWFyOiBlbnRyeS55ZWFyPy50b1N0cmluZygpLFxuICAgICAgem90ZXJvU2VsZWN0VVJJOiBlbnRyeS56b3Rlcm9TZWxlY3RVUkksXG4gICAgfTtcblxuICAgIHJldHVybiB7IGVudHJ5OiBlbnRyeS50b0pTT04oKSwgLi4uc2hvcnRjdXRzIH07XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIHJlZmVyZW5jZSBlbnRyaWVzIGZyb20gdGhlIGdpdmVuIHJhdyBkYXRhYmFzZSBkYXRhLlxuICpcbiAqIFJldHVybnMgYSBsaXN0IG9mIGBFbnRyeURhdGFgLCB3aGljaCBzaG91bGQgYmUgd3JhcHBlZCB3aXRoIHRoZSByZWxldmFudFxuICogYWRhcHRlciBhbmQgdXNlZCB0byBpbnN0YW50aWF0ZSBhIGBMaWJyYXJ5YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnRyaWVzKFxuICBkYXRhYmFzZVJhdzogc3RyaW5nLFxuICBkYXRhYmFzZVR5cGU6IERhdGFiYXNlVHlwZSxcbik6IEVudHJ5RGF0YVtdIHtcbiAgbGV0IGxpYnJhcnlBcnJheTogRW50cnlEYXRhW107XG5cbiAgaWYgKGRhdGFiYXNlVHlwZSA9PSAnY3NsLWpzb24nKSB7XG4gICAgbGlicmFyeUFycmF5ID0gSlNPTi5wYXJzZShkYXRhYmFzZVJhdyk7XG4gIH0gZWxzZSBpZiAoZGF0YWJhc2VUeXBlID09ICdiaWJsYXRleCcpIHtcbiAgICBjb25zdCBvcHRpb25zOiBCaWJUZVhQYXJzZXIuUGFyc2VyT3B0aW9ucyA9IHtcbiAgICAgIGVycm9ySGFuZGxlcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NpdGF0aW9uIHBsdWdpbjogZXJyb3IgbG9hZGluZyBCaWJMYVRlWCBlbnRyeTonLCBlcnIpO1xuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IEJpYlRlWFBhcnNlci5wYXJzZShcbiAgICAgIGRhdGFiYXNlUmF3LFxuICAgICAgb3B0aW9ucyxcbiAgICApIGFzIEJpYlRlWFBhcnNlci5CaWJsaW9ncmFwaHk7XG4gICAgbGlicmFyeUFycmF5ID0gcGFyc2VkLmVudHJpZXM7XG4gIH1cblxuICByZXR1cm4gbGlicmFyeUFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvciB7XG4gIGdpdmVuPzogc3RyaW5nO1xuICBmYW1pbHk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gYEVudHJ5YCByZXByZXNlbnRzIGEgc2luZ2xlIHJlZmVyZW5jZSBpbiBhIHJlZmVyZW5jZSBkYXRhYmFzZS5cbiAqIEVhY2ggZW50cnkgaGFzIGEgdW5pcXVlIGlkZW50aWZpZXIsIGtub3duIGluIG1vc3QgcmVmZXJlbmNlIG1hbmFnZXJzIGFzIGl0c1xuICogXCJjaXRla2V5LlwiXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRyeSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudHJ5IChhbHNvIHRoZSBjaXRla2V5KS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBpZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIGFic3RyYWN0IGFic3RyYWN0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgYXV0aG9yPzogQXV0aG9yW107XG5cbiAgLyoqXG4gICAqIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9ycywgZWFjaCBvZiB0aGUgZm9ybWF0IGA8Zmlyc3RuYW1lPiA8bGFzdG5hbWU+YC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhdXRob3JTdHJpbmc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgZm9yIHRoaXMgcmVmZXJlbmNlIC0tIGluIHRoZSBjYXNlIG9mIGEgYm9va1xuICAgKiBjaGFwdGVyIHJlZmVyZW5jZSwgdGhlIG5hbWUgb2YgdGhlIGJvb2s7IGluIHRoZSBjYXNlIG9mIGEgam91cm5hbCBhcnRpY2xlLFxuICAgKiB0aGUgbmFtZSBvZiB0aGUgam91cm5hbC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBjb250YWluZXJUaXRsZT86IHN0cmluZztcblxuICBwdWJsaWMgYWJzdHJhY3QgRE9JPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgb2YgaXNzdWUuIE1hbnkgcmVmZXJlbmNlcyBkbyBub3QgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBtb250aFxuICAgKiBhbmQgZGF5IG9mIGlzc3VlOyBpbiB0aGlzIGNhc2UsIHRoZSBgaXNzdWVkRGF0ZWAgd2lsbCBjb250YWluIGR1bW15IG1pbmltdW1cbiAgICogdmFsdWVzIGZvciB0aG9zZSBlbGVtZW50cy4gKEEgcmVmZXJlbmNlIHdoaWNoIGlzIG9ubHkgZW5jb2RlZCBhcyBiZWluZ1xuICAgKiBpc3N1ZWQgaW4gMjAwMSBpcyByZXByZXNlbnRlZCBoZXJlIHdpdGggYSBkYXRlIDIwMDEtMDEtMDEgMDA6MDA6MDAgVVRDLilcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBpc3N1ZWREYXRlPzogRGF0ZTtcblxuICAvKipcbiAgICogUGFnZSBvciBwYWdlIHJhbmdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcGFnZT86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHRpdGxlPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgVVJMPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBldmVudFBsYWNlPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBwdWJsaXNoZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwdWJsaXNoZXJQbGFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogQmliTGFUZVgtc3BlY2lmaWMgcHJvcGVydGllc1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGVwcmludD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IGVwcmludHR5cGU/OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF95ZWFyPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5feWVhclxuICAgICAgPyBwYXJzZUludCh0aGlzLl95ZWFyKVxuICAgICAgOiB0aGlzLmlzc3VlZERhdGU/LmdldFVUQ0Z1bGxZZWFyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX25vdGU/OiBzdHJpbmdbXTtcblxuICBwdWJsaWMgZ2V0IG5vdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbm90ZVxuICAgICAgPy5tYXAoKGVsKSA9PiBlbC5yZXBsYWNlKC8oem90ZXJvOlxcL1xcLy4rKS9nLCAnW0xpbmtdKCQxKScpKVxuICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgVVJJIHdoaWNoIHdpbGwgb3BlbiB0aGUgcmVsZXZhbnQgZW50cnkgaW4gdGhlIFpvdGVybyBjbGllbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHpvdGVyb1NlbGVjdFVSSSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgem90ZXJvOi8vc2VsZWN0L2l0ZW1zL0Ake3RoaXMuaWR9YDtcbiAgfVxuXG4gIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QganNvbk9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcblxuICAgIC8vIGFkZCBnZXR0ZXIgdmFsdWVzXG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7XG4gICAgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pKVxuICAgICAgLmZpbHRlcigoWywgZGVzY3JpcHRvcl0pID0+IHR5cGVvZiBkZXNjcmlwdG9yLmdldCA9PSAnZnVuY3Rpb24nKVxuICAgICAgLmZvckVhY2goKFtrZXksIGRlc2NyaXB0b3JdKSA9PiB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGtleVswXSAhPT0gJ18nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9ICh0aGlzIGFzIElJbmRleGFibGUpW2tleV07XG4gICAgICAgICAgICBqc29uT2JqW2tleV0gPSB2YWw7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGpzb25PYmo7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRW50cnlEYXRhID0gRW50cnlEYXRhQ1NMIHwgRW50cnlEYXRhQmliTGFUZVg7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50cnlEYXRhQ1NMIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xuICBhdXRob3I/OiBBdXRob3JbXTtcbiAgJ2NvbnRhaW5lci10aXRsZSc/OiBzdHJpbmc7XG4gIERPST86IHN0cmluZztcbiAgJ2V2ZW50LXBsYWNlJz86IHN0cmluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgaXNzdWVkPzogeyAnZGF0ZS1wYXJ0cyc6IFthbnlbXV0gfTtcbiAgcGFnZT86IHN0cmluZztcbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICAncHVibGlzaGVyLXBsYWNlJz86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIFVSTD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEVudHJ5Q1NMQWRhcHRlciBleHRlbmRzIEVudHJ5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhOiBFbnRyeURhdGFDU0wpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXByaW50OiBzdHJpbmcgPSBudWxsO1xuICBlcHJpbnR0eXBlOiBzdHJpbmcgPSBudWxsO1xuICBmaWxlczogc3RyaW5nW10gPSBudWxsO1xuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmlkO1xuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEudHlwZTtcbiAgfVxuXG4gIGdldCBhYnN0cmFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmFic3RyYWN0O1xuICB9XG4gIGdldCBhdXRob3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5hdXRob3I7XG4gIH1cblxuICBnZXQgYXV0aG9yU3RyaW5nKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYXV0aG9yXG4gICAgICA/IHRoaXMuZGF0YS5hdXRob3IubWFwKChhKSA9PiBgJHthLmdpdmVufSAke2EuZmFtaWx5fWApLmpvaW4oJywgJylcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIGdldCBjb250YWluZXJUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydjb250YWluZXItdGl0bGUnXTtcbiAgfVxuXG4gIGdldCBET0koKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5ET0k7XG4gIH1cblxuICBnZXQgZXZlbnRQbGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydldmVudC1wbGFjZSddO1xuICB9XG5cbiAgZ2V0IGlzc3VlZERhdGUoKSB7XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgdGhpcy5kYXRhLmlzc3VlZCAmJlxuICAgICAgICB0aGlzLmRhdGEuaXNzdWVkWydkYXRlLXBhcnRzJ10gJiZcbiAgICAgICAgdGhpcy5kYXRhLmlzc3VlZFsnZGF0ZS1wYXJ0cyddWzBdLmxlbmd0aCA+IDBcbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHRoaXMuZGF0YS5pc3N1ZWRbJ2RhdGUtcGFydHMnXVswXTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgKG1vbnRoIHx8IDEpIC0gMSwgZGF5IHx8IDEpO1xuICB9XG5cbiAgZ2V0IHBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlO1xuICB9XG5cbiAgZ2V0IHB1Ymxpc2hlcigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnB1Ymxpc2hlcjtcbiAgfVxuXG4gIGdldCBwdWJsaXNoZXJQbGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydwdWJsaXNoZXItcGxhY2UnXTtcbiAgfVxuXG4gIGdldCB0aXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnRpdGxlO1xuICB9XG5cbiAgZ2V0IFVSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLlVSTDtcbiAgfVxufVxuXG5jb25zdCBCSUJMQVRFWF9QUk9QRVJUWV9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhYnN0cmFjdDogJ2Fic3RyYWN0JyxcbiAgYm9va3RpdGxlOiAnX2NvbnRhaW5lclRpdGxlJyxcbiAgZGF0ZTogJ2lzc3VlZCcsXG4gIGRvaTogJ0RPSScsXG4gIGVwcmludDogJ2VwcmludCcsXG4gIGVwcmludHR5cGU6ICdlcHJpbnR0eXBlJyxcbiAgZXZlbnR0aXRsZTogJ2V2ZW50JyxcbiAgam91cm5hbDogJ19jb250YWluZXJUaXRsZScsXG4gIGpvdXJuYWx0aXRsZTogJ19jb250YWluZXJUaXRsZScsXG4gIGxvY2F0aW9uOiAncHVibGlzaGVyUGxhY2UnLFxuICBwYWdlczogJ3BhZ2UnLFxuICBzaG9ydGpvdXJuYWw6ICdjb250YWluZXJUaXRsZVNob3J0JyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHNob3J0dGl0bGU6ICd0aXRsZVNob3J0JyxcbiAgdXJsOiAnVVJMJyxcbiAgdmVudWU6ICdldmVudFBsYWNlJyxcbiAgeWVhcjogJ195ZWFyJyxcbiAgcHVibGlzaGVyOiAncHVibGlzaGVyJyxcbiAgbm90ZTogJ19ub3RlJyxcbn07XG5cbi8vIEJpYkxhVGVYIHBhcnNlciByZXR1cm5zIGFycmF5cyBvZiBwcm9wZXJ0eSB2YWx1ZXMgKGFsbG93aW5nIGZvciByZXBlYXRlZFxuLy8gcHJvcGVydHkgZW50cmllcykuIEZvciB0aGUgZm9sbG93aW5nIGZpZWxkcywganVzdCBibGluZGx5IHRha2UgdGhlIGZpcnN0LlxuY29uc3QgQklCTEFURVhfUFJPUEVSVFlfVEFLRV9GSVJTVDogc3RyaW5nW10gPSBbXG4gICdhYnN0cmFjdCcsXG4gICdib29rdGl0bGUnLFxuICAnX2NvbnRhaW5lclRpdGxlJyxcbiAgJ2RhdGUnLFxuICAnZG9pJyxcbiAgJ2VwcmludCcsXG4gICdlcHJpbnR0eXBlJyxcbiAgJ2V2ZW50dGl0bGUnLFxuICAnam91cm5hbHRpdGxlJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ3BhZ2VzJyxcbiAgJ3Nob3J0am91cm5hbCcsXG4gICd0aXRsZScsXG4gICdzaG9ydHRpdGxlJyxcbiAgJ3VybCcsXG4gICd2ZW51ZScsXG4gICdfeWVhcicsXG4gICdwdWJsaXNoZXInLFxuXTtcblxuZXhwb3J0IGNsYXNzIEVudHJ5QmliTGFUZVhBZGFwdGVyIGV4dGVuZHMgRW50cnkge1xuICBhYnN0cmFjdD86IHN0cmluZztcbiAgX2NvbnRhaW5lclRpdGxlPzogc3RyaW5nO1xuICBjb250YWluZXJUaXRsZVNob3J0Pzogc3RyaW5nO1xuICBET0k/OiBzdHJpbmc7XG4gIGVwcmludD86IHN0cmluZztcbiAgZXByaW50dHlwZT86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGV2ZW50UGxhY2U/OiBzdHJpbmc7XG4gIGlzc3VlZD86IHN0cmluZztcbiAgcGFnZT86IHN0cmluZztcbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICBwdWJsaXNoZXJQbGFjZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHRpdGxlU2hvcnQ/OiBzdHJpbmc7XG4gIFVSTD86IHN0cmluZztcbiAgX3llYXI/OiBzdHJpbmc7XG4gIF9ub3RlPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhOiBFbnRyeURhdGFCaWJMYVRlWCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBPYmplY3QuZW50cmllcyhCSUJMQVRFWF9QUk9QRVJUWV9NQVBQSU5HKS5mb3JFYWNoKFxuICAgICAgKG1hcDogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBbc3JjLCB0Z3RdID0gbWFwO1xuICAgICAgICBpZiAoc3JjIGluIHRoaXMuZGF0YS5maWVsZHMpIHtcbiAgICAgICAgICBsZXQgdmFsID0gdGhpcy5kYXRhLmZpZWxkc1tzcmNdO1xuICAgICAgICAgIGlmIChCSUJMQVRFWF9QUk9QRVJUWV9UQUtFX0ZJUlNULmluY2x1ZGVzKHNyYykpIHtcbiAgICAgICAgICAgIHZhbCA9ICh2YWwgYXMgYW55W10pWzBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICh0aGlzIGFzIElJbmRleGFibGUpW3RndF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmtleTtcbiAgfVxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnR5cGU7XG4gIH1cblxuICBnZXQgZmlsZXMoKTogc3RyaW5nW10ge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYmlidGV4IHBhcnNlciBkb2Vzbid0IHJlbGlhYmx5IHBhcnNlIGZpbGUgbGlzdCB0b1xuICAgIC8vIGFycmF5IDsgc28gd2UnbGwgZG8gaXQgbWFudWFsbHkgLyByZWR1bmRhbnRseVxuICAgIGxldCByZXQ6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuZGF0YS5maWVsZHMuZmlsZSkge1xuICAgICAgcmV0ID0gcmV0LmNvbmNhdCh0aGlzLmRhdGEuZmllbGRzLmZpbGUuZmxhdE1hcCgoeCkgPT4geC5zcGxpdCgnOycpKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuZmllbGRzLmZpbGVzKSB7XG4gICAgICByZXQgPSByZXQuY29uY2F0KHRoaXMuZGF0YS5maWVsZHMuZmlsZXMuZmxhdE1hcCgoeCkgPT4geC5zcGxpdCgnOycpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGdldCBhdXRob3JTdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5jcmVhdG9ycy5hdXRob3IpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5kYXRhLmNyZWF0b3JzLmF1dGhvci5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKG5hbWUubGl0ZXJhbCkgcmV0dXJuIG5hbWUubGl0ZXJhbDtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbbmFtZS5maXJzdE5hbWUsIG5hbWUucHJlZml4LCBuYW1lLmxhc3ROYW1lLCBuYW1lLnN1ZmZpeF07XG4gICAgICAgIC8vIERyb3AgYW55IG51bGwgcGFydHMgYW5kIGpvaW5cbiAgICAgICAgcmV0dXJuIHBhcnRzLmZpbHRlcigoeCkgPT4geCkuam9pbignICcpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmFtZXMuam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWVsZHMuYXV0aG9yPy5qb2luKCcsICcpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb250YWluZXJUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyVGl0bGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJUaXRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5maWVsZHMuZXByaW50KSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmRhdGEuZmllbGRzLmVwcmludHR5cGVcbiAgICAgICAgPyBgJHt0aGlzLmRhdGEuZmllbGRzLmVwcmludHR5cGV9OmBcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMuZGF0YS5maWVsZHMucHJpbWFyeWNsYXNzXG4gICAgICAgID8gYCBbJHt0aGlzLmRhdGEuZmllbGRzLnByaW1hcnljbGFzc31dYFxuICAgICAgICA6ICcnO1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke3RoaXMuZGF0YS5maWVsZHMuZXByaW50fSR7c3VmZml4fWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzc3VlZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNzdWVkID8gbmV3IERhdGUodGhpcy5pc3N1ZWQpIDogbnVsbDtcbiAgfVxuXG4gIGdldCBhdXRob3IoKTogQXV0aG9yW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY3JlYXRvcnMuYXV0aG9yPy5tYXAoKGEpID0+ICh7XG4gICAgICBnaXZlbjogYS5maXJzdE5hbWUsXG4gICAgICBmYW1pbHk6IGEubGFzdE5hbWUsXG4gICAgfSkpO1xuICB9XG59XG4iLCJpbXBvcnQgcmVnaXN0ZXJQcm9taXNlV29ya2VyIGZyb20gJ3Byb21pc2Utd29ya2VyL3JlZ2lzdGVyJztcblxuaW1wb3J0IHsgRGF0YWJhc2VUeXBlLCBFbnRyeURhdGEsIGxvYWRFbnRyaWVzIH0gZnJvbSAnLi90eXBlcyc7XG5cbnJlZ2lzdGVyUHJvbWlzZVdvcmtlcihcbiAgKG1zZzogeyBkYXRhYmFzZVJhdzogc3RyaW5nOyBkYXRhYmFzZVR5cGU6IERhdGFiYXNlVHlwZSB9KTogRW50cnlEYXRhW10gPT4ge1xuICAgIHJldHVybiBsb2FkRW50cmllcyhtc2cuZGF0YWJhc2VSYXcsIG1zZy5kYXRhYmFzZVR5cGUpO1xuICB9LFxuKTtcbiJdLCJuYW1lcyI6WyJjaGFyQ2F0ZWdvcmllcyIsImNodW5rZXJfMSIsImJpYnRleCIsInVuaWNvZGUybGF0ZXhfMSIsImphYnJlZl8xIiwiQmliVGVYUGFyc2VyLnBhcnNlIiwicmVnaXN0ZXJQcm9taXNlV29ya2VyIl0sIm1hcHBpbmdzIjoiOzs7RUFFQSxTQUFTLFNBQVMsRUFBRSxHQUFHLEVBQUU7RUFDekI7RUFDQSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFVBQVU7RUFDMUcsQ0FBQztBQUNEO0VBQ0EsU0FBUyxxQkFBcUIsRUFBRSxRQUFRLEVBQUU7RUFDMUMsRUFBRSxTQUFTLG1CQUFtQixFQUFFLENBQUMs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QUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7QUFDcEQ7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQzlDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztFQUNsQixNQUFNLFdBQVcsRUFBRSxDQUFDO0VBQ3BCLEtBQUssTUFBTTtFQUNYLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO0VBQ3RELEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUN6QixNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFO0VBQ3BFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzVDLFVBQVUsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUMzQixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDN0IsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3pELGNBQWMsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDN0MsY0FBYyxXQUFXLEVBQUUsQ0FBQztFQUM1QixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGNBQWMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDL0QsYUFBYTtFQUNiLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0VBQ2pDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLGdCQUFnQixFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUM1QyxnQkFBZ0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3ZDLGtCQUFrQixFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7RUFDeEMsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ3pDLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0VBQzlDLHNCQUFzQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0Msd0JBQXdCLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUM3Qyx1QkFBdUI7RUFDdkIscUJBQXFCO0VBQ3JCLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIsZ0JBQWdCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMxQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM5QixrQkFBa0IsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7RUFDOUMsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO0VBQzFDLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUMzQyxzQkFBc0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdDLHdCQUF3QixFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztFQUNoRCx3QkFBd0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9DLDBCQUEwQixFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7RUFDL0MseUJBQXlCO0VBQ3pCLHVCQUF1QjtFQUN2QixxQkFBcUI7RUFDckIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixnQkFBZ0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3ZDLGtCQUFrQixFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDckMsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqRSxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDckQsc0JBQXNCLFdBQVcsRUFBRSxDQUFDO0VBQ3BDLHFCQUFxQixNQUFNO0VBQzNCLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLHNCQUFzQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN2RSxxQkFBcUI7RUFDckIsb0JBQW9CLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQyxzQkFBc0IsR0FBRyxHQUFHLFdBQVcsRUFBRSxDQUFDO0VBQzFDLHNCQUFzQixJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUU7RUFDOUMsd0JBQXdCLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDMUMsd0JBQXdCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNqRCx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQyx1QkFBdUIsTUFBTTtFQUM3Qix3QkFBd0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6Qyx3QkFBd0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4Qyx1QkFBdUI7RUFDdkIscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkMsc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMscUJBQXFCO0VBQ3JCLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG1CQUFtQjtFQUNuQixpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxpQkFBaUI7RUFDakIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUywwQkFBMEIsR0FBRztFQUN4QyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzlEO0VBQ0EsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUM5QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7RUFDbEIsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtFQUN0RCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDekIsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRTtFQUNwRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUM1QyxVQUFVLFdBQVcsSUFBSSxDQUFDLENBQUM7RUFDM0IsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDM0QsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0VBQzdCLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUN6RCxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzdDLGNBQWMsV0FBVyxFQUFFLENBQUM7RUFDNUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixjQUFjLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQy9ELGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUNqQyxjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLHFCQUFxQixFQUFFLENBQUM7RUFDN0MsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsRUFBRSxHQUFHLHVCQUF1QixFQUFFLENBQUM7RUFDakQsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1QixvQkFBb0IsR0FBRyxHQUFHLHFCQUFxQixFQUFFLENBQUM7RUFDbEQsb0JBQW9CLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtFQUM1QyxzQkFBc0IsT0FBTyxHQUFHLEtBQUssVUFBVSxFQUFFO0VBQ2pELHdCQUF3QixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3JDLHdCQUF3QixHQUFHLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUN0RCx1QkFBdUI7RUFDdkIscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMscUJBQXFCO0VBQ3JCLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLEdBQUcsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUMxQyxzQkFBc0IsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO0VBQzlDLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3JFLDBCQUEwQixHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUMxRCwwQkFBMEIsV0FBVyxFQUFFLENBQUM7RUFDeEMseUJBQXlCLE1BQU07RUFDL0IsMEJBQTBCLEdBQUcsR0FBRyxVQUFVLENBQUM7RUFDM0MsMEJBQTBCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNFLHlCQUF5QjtFQUN6Qix3QkFBd0IsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO0VBQ2hELDBCQUEwQixHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDOUMsMEJBQTBCLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtFQUNsRCw0QkFBNEIsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUM5Qyw0QkFBNEIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDakQsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsMkJBQTJCLE1BQU07RUFDakMsNEJBQTRCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0MsNEJBQTRCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUMsMkJBQTJCO0VBQzNCLHlCQUF5QixNQUFNO0VBQy9CLDBCQUEwQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNDLDBCQUEwQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFDLHlCQUF5QjtFQUN6Qix1QkFBdUIsTUFBTTtFQUM3Qix3QkFBd0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6Qyx3QkFBd0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4Qyx1QkFBdUI7RUFDdkIscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkMsc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMscUJBQXFCO0VBQ3JCLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG1CQUFtQjtFQUNuQixpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxpQkFBaUI7RUFDakIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxnQkFBZ0IsR0FBRztFQUM5QixJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUN2QixJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ25ELFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDdkMsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDaEMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNyRCxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3pDLFVBQVUsV0FBVyxFQUFFLENBQUM7RUFDeEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDM0QsU0FBUztFQUNULE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUM5QyxPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUNwRCxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDekIsWUFBWSxXQUFXLEVBQUUsQ0FBQztFQUMxQixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFlBQVksSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDN0QsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUM5QixZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLLE1BQU07RUFDWCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsY0FBYyxHQUFHO0VBQzVCLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQztFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0VBQzlCLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQztFQUNqQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDdkIsTUFBTSxJQUFJLEVBQUUsRUFBRTtFQUNkLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQ3BCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztFQUN2QyxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7RUFDckQsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ3pCLFlBQVksV0FBVyxFQUFFLENBQUM7RUFDMUIsV0FBVyxNQUFNO0VBQ2pCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixZQUFZLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzdELFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDN0IsWUFBWSxlQUFlLEVBQUUsQ0FBQztFQUM5QixZQUFZLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7RUFDdkQsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQzNCLGNBQWMsV0FBVyxFQUFFLENBQUM7RUFDNUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixjQUFjLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQy9ELGFBQWE7RUFDYixZQUFZLGVBQWUsRUFBRSxDQUFDO0VBQzlCLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUMxQixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRywyQkFBMkIsRUFBRSxDQUFDO0VBQ2pELGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQzNELGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQy9CLGtCQUFrQixXQUFXLEVBQUUsQ0FBQztFQUNoQyxpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxrQkFBa0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDbkUsaUJBQWlCO0VBQ2pCLGdCQUFnQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdkMsa0JBQWtCLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0VBQ2xELGtCQUFrQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDekMsb0JBQW9CLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDdEMsb0JBQW9CLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3pDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzVCLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG1CQUFtQjtFQUNuQixpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxpQkFBaUI7RUFDakIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0VBQ2hDLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsWUFBWSxHQUFHLFdBQVcsQ0FBQztFQUNuQyxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsUUFBUSxJQUFJLEVBQUUsRUFBRTtFQUNoQixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUN0QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLHVCQUF1QixFQUFFLENBQUM7RUFDekMsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsMkJBQTJCLEVBQUUsQ0FBQztFQUMvQyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0VBQzlDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ2xDLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLGtCQUFrQixFQUFFLENBQUM7RUFDbEMsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztFQUN6QyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0VBQ3ZDLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLHdCQUF3QixFQUFFLENBQUM7RUFDOUMsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDbEMsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxlQUFlO0VBQ2YsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxrQkFBa0IsR0FBRztFQUNoQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUN2QixJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ25ELFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDdkMsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUN2RCxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLFlBQVksV0FBVyxFQUFFLENBQUM7RUFDMUIsV0FBVyxNQUFNO0VBQ2pCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixZQUFZLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzdELFdBQVc7RUFDWCxTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUM5QyxPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUMxQixRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUywyQkFBMkIsR0FBRztFQUN6QyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ3ZCO0VBQ0EsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUM5QyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDbkIsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN2RCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUNuQyxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDbEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUNsRCxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDdkIsVUFBVSxXQUFXLEVBQUUsQ0FBQztFQUN4QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzVCLFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUNqRCxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDckIsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLFFBQVEsRUFBRSxHQUFHLHFCQUFxQixFQUFFLENBQUM7RUFDckMsUUFBUSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLFVBQVUsRUFBRSxHQUFHLHFCQUFxQixFQUFFLENBQUM7RUFDdkMsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUNyRCxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDekIsWUFBWSxXQUFXLEVBQUUsQ0FBQztFQUMxQixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFlBQVksSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDN0QsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUM5QixZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHFCQUFxQixHQUFHO0VBQ25DLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNaLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3JDLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2hDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDckQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN6QyxVQUFVLFdBQVcsRUFBRSxDQUFDO0VBQ3hCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUM1QyxLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDZCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN2QixLQUFLO0VBQ0wsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ1osSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUNqRCxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDckIsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLFFBQVEsRUFBRSxHQUFHLHFCQUFxQixFQUFFLENBQUM7RUFDckMsUUFBUSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbEMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLFVBQVUsRUFBRSxHQUFHLHFCQUFxQixFQUFFLENBQUM7RUFDdkMsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUNyRCxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDekIsWUFBWSxXQUFXLEVBQUUsQ0FBQztFQUMxQixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFlBQVksSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDN0QsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUM5QixZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLG1CQUFtQixHQUFHO0VBQ2pDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztFQUMzQixJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDdkIsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0VBQ2pDLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0VBQ3JCLE1BQU0sSUFBSSxFQUFFLEVBQUU7RUFDZCxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUNwQixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQixRQUFRLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0VBQ3JDLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7RUFDdEMsU0FBUztFQUNULFFBQVEsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2xDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QixVQUFVLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0VBQ3ZDLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7RUFDeEMsV0FBVztFQUNYLFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDNUIsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNsQixTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHFCQUFxQixHQUFHO0VBQ25DLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMvQjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7RUFDOUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ25CLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNkLE1BQU0sRUFBRSxHQUFHLG9CQUFvQixFQUFFLENBQUM7RUFDbEMsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7RUFDL0IsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztFQUNwQyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0VBQzNDLGFBQWE7RUFDYixXQUFXO0VBQ1gsU0FBUztFQUNULE9BQU87RUFDUCxNQUFNLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNoQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEIsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUNwQyxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztFQUNoQyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUNqQyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0VBQ3RDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUM3QyxlQUFlO0VBQ2YsYUFBYTtFQUNiLFdBQVc7RUFDWCxTQUFTO0VBQ1QsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUNsRCxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDdkIsVUFBVSxXQUFXLEVBQUUsQ0FBQztFQUN4QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7RUFDakMsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3RCLFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDOUIsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7RUFDcEQsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ3JCLFFBQVEsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUN6QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3pCLFFBQVEsZUFBZSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3JELFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDekMsVUFBVSxXQUFXLEVBQUUsQ0FBQztFQUN4QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRCxTQUFTO0VBQ1QsUUFBUSxlQUFlLEVBQUUsQ0FBQztFQUMxQixRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUN0QixTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsVUFBVSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUN2QyxVQUFVLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsWUFBWSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUN6QyxXQUFXO0VBQ1gsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQ3ZELGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUMzQixjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7RUFDckMsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDMUIsZUFBZTtFQUNmLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ2xDLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxlQUFlO0VBQ2YsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDekIsUUFBUSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQ25ELFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUN2QixVQUFVLFdBQVcsRUFBRSxDQUFDO0VBQ3hCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUN0QyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztFQUNsQyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUNuQyxjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7RUFDeEMsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ3ZDLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2YsYUFBYTtFQUNiLFdBQVc7RUFDWCxVQUFVLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsWUFBWSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztFQUNwQyxjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ3JDLGdCQUFnQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdkMsa0JBQWtCLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0VBQzFDLGtCQUFrQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDekMsb0JBQW9CLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUN6QyxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixhQUFhO0VBQ2IsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUN2RCxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDM0IsY0FBYyxXQUFXLEVBQUUsQ0FBQztFQUM1QixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGNBQWMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDL0QsYUFBYTtFQUNiLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDO0VBQ3JDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQzFCLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLHdCQUF3QixFQUFFLENBQUM7RUFDMUMsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUM7RUFDbkMsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDaEMsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0QixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFNBQVM7RUFDVCxPQUFPO0VBQ1AsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxvQkFBb0IsR0FBRztFQUNsQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztFQUNwQyxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztFQUM3QixNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDbEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUMxQixRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxhQUFhLEdBQUc7RUFDM0IsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNaLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3JDLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2hDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDckQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN6QyxVQUFVLFdBQVcsRUFBRSxDQUFDO0VBQ3hCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDeEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCLEtBQUs7RUFDTCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWjtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMscUJBQXFCLEdBQUc7RUFDbkMsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ25CO0VBQ0EsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNaLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3JDLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2hDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDckQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN6QyxVQUFVLFdBQVcsRUFBRSxDQUFDO0VBQ3hCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDeEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCLEtBQUs7RUFDTCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWjtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsZUFBZSxHQUFHO0VBQzdCLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNaLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNqRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3JDLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2hDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQixRQUFRLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDckQsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN6QyxVQUFVLFdBQVcsRUFBRSxDQUFDO0VBQ3hCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUM1QyxLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDZCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ3hCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN2QixLQUFLO0VBQ0wsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1o7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHdCQUF3QixHQUFHO0VBQ3RDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQ2Y7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUNqQyxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDeEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3ZCLEtBQUs7RUFDTCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWjtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsb0JBQW9CLEdBQUc7RUFDbEMsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzNDO0VBQ0EsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JCLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7RUFDbEQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ25CLE1BQU0sV0FBVyxJQUFJLENBQUMsQ0FBQztFQUN2QixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN2RCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNkLE1BQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNuRCxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3ZDLFFBQVEsV0FBVyxFQUFFLENBQUM7RUFDdEIsT0FBTyxNQUFNO0VBQ2IsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLFFBQVEsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDekQsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2xDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QixVQUFVLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDdkQsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUMzQyxZQUFZLFdBQVcsRUFBRSxDQUFDO0VBQzFCLFdBQVcsTUFBTTtFQUNqQixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsWUFBWSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUM3RCxXQUFXO0VBQ1gsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFDOUMsT0FBTyxNQUFNO0VBQ2IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7RUFDbkQsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ3ZCLFVBQVUsV0FBVyxFQUFFLENBQUM7RUFDeEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDM0QsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNsQixVQUFVLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0VBQ3RDLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO0VBQ2xDLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7RUFDdEMsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUNyQyxnQkFBZ0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3ZDLGtCQUFrQixFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7RUFDdkMsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixhQUFhO0VBQ2IsV0FBVztFQUNYLFVBQVUsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3BDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixZQUFZLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0VBQ3hDLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO0VBQ3BDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztFQUN4QyxnQkFBZ0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3ZDLGtCQUFrQixFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7RUFDdkMsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ3pDLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIsZUFBZTtFQUNmLGFBQWE7RUFDYixXQUFXO0VBQ1gsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRTtFQUMxRCxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDM0IsY0FBYyxXQUFXLElBQUksQ0FBQyxDQUFDO0VBQy9CLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0QixjQUFjLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDM0QsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQy9DLGdCQUFnQixXQUFXLEVBQUUsQ0FBQztFQUM5QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZ0JBQWdCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2pFLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzlCLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQy9ELG9CQUFvQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNuRCxvQkFBb0IsV0FBVyxFQUFFLENBQUM7RUFDbEMsbUJBQW1CLE1BQU07RUFDekIsb0JBQW9CLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDcEMsb0JBQW9CLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3JFLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0VBQ3RELGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlO0VBQ2YsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7RUFDM0Qsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDL0Isa0JBQWtCLFdBQVcsRUFBRSxDQUFDO0VBQ2hDLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGtCQUFrQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNuRSxpQkFBaUI7RUFDakIsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsWUFBWSxHQUFHLFdBQVcsQ0FBQztFQUM3QyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQzNDLGtCQUFrQixJQUFJLEVBQUUsRUFBRTtFQUMxQixvQkFBb0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQ2hDLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG1CQUFtQjtFQUNuQixrQkFBa0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3pDLG9CQUFvQixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ3RDLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFNLENBQUMsQ0FBQztFQUM3QyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1QixtQkFBbUIsTUFBTTtFQUN6QixvQkFBb0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNyQyxvQkFBb0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNwQyxtQkFBbUI7RUFDbkIsaUJBQWlCLE1BQU07RUFDdkIsa0JBQWtCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDbkMsa0JBQWtCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsaUJBQWlCO0VBQ2pCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxlQUFlO0VBQ2YsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLLE1BQU07RUFDWCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsY0FBYyxHQUFHO0VBQzVCLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkM7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRTtFQUNsRCxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDbkIsTUFBTSxXQUFXLElBQUksQ0FBQyxDQUFDO0VBQ3ZCLEtBQUssTUFBTTtFQUNYLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3ZELEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRywwQkFBMEIsRUFBRSxDQUFDO0VBQ3hDLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUN2RCxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLFlBQVksV0FBVyxFQUFFLENBQUM7RUFDMUIsV0FBVyxNQUFNO0VBQ2pCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixZQUFZLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzdELFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDN0IsWUFBWSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ3RELGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUMzQixjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzNELGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUMvQyxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7RUFDOUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGdCQUFnQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNqRSxlQUFlO0VBQ2YsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUM5QixnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXO0VBQ1gsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQ3ZELGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUMzQixjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbkMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxPQUFPLEVBQUU7RUFDcEQsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ3JCLFFBQVEsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUN6QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3pCLFFBQVEsZUFBZSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3JELFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDekMsVUFBVSxXQUFXLEVBQUUsQ0FBQztFQUN4QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRCxTQUFTO0VBQ1QsUUFBUSxlQUFlLEVBQUUsQ0FBQztFQUMxQixRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUN0QixTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsVUFBVSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUN2QyxVQUFVLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsWUFBWSxFQUFFLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztFQUN6QyxXQUFXO0VBQ1gsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQ3ZELGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUMzQixjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ2hDLGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdEIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDekIsUUFBUSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQ25ELFVBQVUsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUN2QixVQUFVLFdBQVcsRUFBRSxDQUFDO0VBQ3hCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsVUFBVSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUN0QyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztFQUNsQyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0VBQ3RDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7RUFDckMsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ3ZDLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2YsYUFBYTtFQUNiLFdBQVc7RUFDWCxVQUFVLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsWUFBWSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztFQUNwQyxjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7RUFDeEMsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ3ZDLGtCQUFrQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDekMsb0JBQW9CLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUN6QyxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixhQUFhO0VBQ2IsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUN2RCxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDM0IsY0FBYyxXQUFXLEVBQUUsQ0FBQztFQUM1QixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGNBQWMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDL0QsYUFBYTtFQUNiLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUNoQyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsYUFBYSxHQUFHO0VBQzNCLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkM7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxZQUFZLEdBQUcsV0FBVyxDQUFDO0VBQy9CLElBQUksRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0VBQ25CLElBQUksSUFBSSxFQUFFLEVBQUU7RUFDWixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUNsQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUNoRCxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDckIsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRTtFQUN0RCxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDdkIsVUFBVSxXQUFXLElBQUksQ0FBQyxDQUFDO0VBQzNCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzNELFNBQVM7RUFDVCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxZQUFZLEdBQUcsV0FBVyxDQUFDO0VBQ25DLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBRyxDQUFDLENBQUM7RUFDekIsUUFBUSxJQUFJLEVBQUUsRUFBRTtFQUNoQixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUN0QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNsQixVQUFVLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztFQUNoQyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0VBQ3BDLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDO0VBQ25DLGFBQWE7RUFDYixXQUFXO0VBQ1gsVUFBVSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDcEMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLFlBQVksRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDO0VBQ2xDLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7RUFDdEMsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQztFQUNyQyxlQUFlO0VBQ2YsYUFBYTtFQUNiLFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7RUFDdEQsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQzNCLGNBQWMsV0FBVyxFQUFFLENBQUM7RUFDNUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixjQUFjLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQy9ELGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxFQUFFO0VBQzVELGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQzdCLGdCQUFnQixXQUFXLElBQUksQ0FBQyxDQUFDO0VBQ2pDLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxnQkFBZ0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDakUsZUFBZTtFQUNmLGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLFlBQVksR0FBRyxXQUFXLENBQUM7RUFDekMsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFPLENBQUMsQ0FBQztFQUNuQyxjQUFjLElBQUksRUFBRSxFQUFFO0VBQ3RCLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDNUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDeEIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxvQkFBb0IsR0FBRztFQUNsQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDL0I7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQzlDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUNuQixNQUFNLFdBQVcsRUFBRSxDQUFDO0VBQ3BCLEtBQUssTUFBTTtFQUNYLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3ZELEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztFQUMxQixNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNyRCxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3pDLFVBQVUsV0FBVyxFQUFFLENBQUM7RUFDeEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDM0QsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3BDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN4QixZQUFZLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDekQsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUM3QyxjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsV0FBVztFQUNYLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFDaEQsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2xCLFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsVUFBVSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7RUFDOUIsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdEMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzFCLGNBQWMsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO0VBQ2xDLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDOUIsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNwQixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLGdCQUFnQixHQUFHO0VBQzlCLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWDtFQUNBLElBQUksRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7RUFDbEMsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUN2QyxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0VBQ3ZDLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLHNCQUFzQixFQUFFLENBQUM7RUFDeEMsU0FBUztFQUNULE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHNCQUFzQixHQUFHO0VBQ3BDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2xELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDckMsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUN4RCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7RUFDMUIsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUN6QyxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDNUIsVUFBVSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHlCQUF5QixHQUFHO0VBQ3ZDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkM7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQzlDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUNuQixNQUFNLFdBQVcsRUFBRSxDQUFDO0VBQ3BCLEtBQUssTUFBTTtFQUNYLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3ZELEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxDQUFDO0VBQ3RDLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDO0VBQzNCLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUN2RCxZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzNDLFlBQVksV0FBVyxFQUFFLENBQUM7RUFDMUIsV0FBVyxNQUFNO0VBQ2pCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixZQUFZLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQzdELFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDN0IsWUFBWSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ3RELGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUMzQixjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzNELGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUMvQyxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7RUFDOUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGdCQUFnQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNqRSxlQUFlO0VBQ2YsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUM5QixnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXO0VBQ1gsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzlCLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDakMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLLE1BQU07RUFDWCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ2hELFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUNyQixRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixRQUFRLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3pELE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRywwQkFBMEIsRUFBRSxDQUFDO0VBQzFDLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUNyRCxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDekIsWUFBWSxXQUFXLEVBQUUsQ0FBQztFQUMxQixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFlBQVksSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDN0QsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUN6RCxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzdDLGNBQWMsV0FBVyxFQUFFLENBQUM7RUFDNUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixjQUFjLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQy9ELGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDL0IsY0FBYyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ3hELGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQzdCLGdCQUFnQixXQUFXLEVBQUUsQ0FBQztFQUM5QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZ0JBQWdCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ2pFLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUM3RCxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDakQsa0JBQWtCLFdBQVcsRUFBRSxDQUFDO0VBQ2hDLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGtCQUFrQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNuRSxpQkFBaUI7RUFDakIsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQ2hDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzFCLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ25DLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGlCQUFpQjtFQUNqQixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7RUFDekQsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDN0IsZ0JBQWdCLFdBQVcsRUFBRSxDQUFDO0VBQzlCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxnQkFBZ0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDakUsZUFBZTtFQUNmLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ2xDLGdCQUFnQixFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3pCLFFBQVEsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUNsRCxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDdkIsVUFBVSxXQUFXLEVBQUUsQ0FBQztFQUN4QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRCxTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxFQUFFLEdBQUcsMEJBQTBCLEVBQUUsQ0FBQztFQUM1QyxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDN0IsWUFBWSxlQUFlLEVBQUUsQ0FBQztFQUM5QixZQUFZLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQUU7RUFDdkQsY0FBYyxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQzNCLGNBQWMsV0FBVyxFQUFFLENBQUM7RUFDNUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixjQUFjLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQy9ELGFBQWE7RUFDYixZQUFZLGVBQWUsRUFBRSxDQUFDO0VBQzlCLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUMxQixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0VBQzNDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQ2xDLGdCQUFnQixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN0QyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTztFQUNQLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsc0JBQXNCLEdBQUc7RUFDcEMsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7RUFDOUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ25CLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUN2QixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDcEQsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN2QyxRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixRQUFRLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQzFELE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUM5QyxPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUMxQixRQUFRLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDMUIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2hCLE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyx1QkFBdUIsR0FBRztFQUNyQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUNwRDtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7RUFDOUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ25CLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxRQUFRLEVBQUU7RUFDdEQsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDO0VBQ3RCLFFBQVEsV0FBVyxJQUFJLEVBQUUsQ0FBQztFQUMxQixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUMxRCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxZQUFZLEdBQUcsV0FBVyxDQUFDO0VBQ3JDLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDaEMsVUFBVSxJQUFJLEVBQUUsRUFBRTtFQUNsQixZQUFZLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUN4QixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEIsWUFBWSxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUM3QyxZQUFZLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN0QyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDMUIsY0FBYyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUMvQyxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUMvQyxjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUNsQyxnQkFBZ0IsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUM5QyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUNoRCxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7RUFDckIsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUN6RCxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3pCLFFBQVEsZUFBZSxFQUFFLENBQUM7RUFDMUIsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUN2RCxVQUFVLEVBQUUsR0FBRyxRQUFRLENBQUM7RUFDeEIsVUFBVSxXQUFXLElBQUksQ0FBQyxDQUFDO0VBQzNCLFNBQVMsTUFBTTtFQUNmLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixVQUFVLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQzVELFNBQVM7RUFDVCxRQUFRLGVBQWUsRUFBRSxDQUFDO0VBQzFCLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQ3RCLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUMzQixVQUFVLGVBQWUsRUFBRSxDQUFDO0VBQzVCLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7RUFDekQsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDO0VBQzFCLFlBQVksV0FBVyxJQUFJLENBQUMsQ0FBQztFQUM3QixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFlBQVksSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDOUQsV0FBVztFQUNYLFVBQVUsZUFBZSxFQUFFLENBQUM7RUFDNUIsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDeEIsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEIsWUFBWSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3pELGNBQWMsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDN0MsY0FBYyxXQUFXLEVBQUUsQ0FBQztFQUM1QixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGNBQWMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDL0QsYUFBYTtFQUNiLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3hDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzVCLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzdELGtCQUFrQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNqRCxrQkFBa0IsV0FBVyxFQUFFLENBQUM7RUFDaEMsaUJBQWlCLE1BQU07RUFDdkIsa0JBQWtCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsa0JBQWtCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ25FLGlCQUFpQjtFQUNqQixlQUFlO0VBQ2YsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFDcEQsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN0QixhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxZQUFZLEdBQUcsV0FBVyxDQUFDO0VBQ3pDLGNBQWMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQyxjQUFjLElBQUksRUFBRSxFQUFFO0VBQ3RCLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDNUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixnQkFBZ0IsRUFBRSxHQUFHLHlCQUF5QixFQUFFLENBQUM7RUFDakQsZ0JBQWdCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMxQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM5QixrQkFBa0IsRUFBRSxHQUFHLHlCQUF5QixFQUFFLENBQUM7RUFDbkQsaUJBQWlCO0VBQ2pCLGdCQUFnQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdkMsa0JBQWtCLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztFQUN0QyxrQkFBa0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3pDLG9CQUFvQixFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQ3JDLG9CQUFvQixlQUFlLEVBQUUsQ0FBQztFQUN0QyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUMvRCxzQkFBc0IsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUNuQyxzQkFBc0IsV0FBVyxFQUFFLENBQUM7RUFDcEMscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMsc0JBQXNCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3ZFLHFCQUFxQjtFQUNyQixvQkFBb0IsZUFBZSxFQUFFLENBQUM7RUFDdEMsb0JBQW9CLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQyxzQkFBc0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQ2xDLHFCQUFxQixNQUFNO0VBQzNCLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLHFCQUFxQjtFQUNyQixvQkFBb0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNDLHNCQUFzQixFQUFFLEdBQUcsMkJBQTJCLEVBQUUsQ0FBQztFQUN6RCxzQkFBc0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdDLHdCQUF3QixHQUFHLEdBQUcsMkJBQTJCLEVBQUUsQ0FBQztFQUM1RCx3QkFBd0IsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFO0VBQ2hELDBCQUEwQixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzVDLDBCQUEwQixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pELDBCQUEwQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2xDLHlCQUF5QixNQUFNO0VBQy9CLDBCQUEwQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNDLDBCQUEwQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFDLHlCQUF5QjtFQUN6Qix1QkFBdUIsTUFBTTtFQUM3Qix3QkFBd0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6Qyx3QkFBd0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4Qyx1QkFBdUI7RUFDdkIscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkMsc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMscUJBQXFCO0VBQ3JCLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG1CQUFtQjtFQUNuQixpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxpQkFBaUI7RUFDakIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUN6QixRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7RUFDbEQsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ3ZCLFVBQVUsV0FBVyxFQUFFLENBQUM7RUFDeEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDM0QsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUMzQixVQUFVLGVBQWUsRUFBRSxDQUFDO0VBQzVCLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7RUFDekQsWUFBWSxFQUFFLEdBQUcsUUFBUSxDQUFDO0VBQzFCLFlBQVksV0FBVyxJQUFJLENBQUMsQ0FBQztFQUM3QixXQUFXLE1BQU07RUFDakIsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFlBQVksSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDOUQsV0FBVztFQUNYLFVBQVUsZUFBZSxFQUFFLENBQUM7RUFDNUIsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDeEIsV0FBVyxNQUFNO0VBQ2pCLFlBQVksV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUM3QixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUM3QixZQUFZLGVBQWUsRUFBRSxDQUFDO0VBQzlCLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7RUFDM0QsY0FBYyxFQUFFLEdBQUcsUUFBUSxDQUFDO0VBQzVCLGNBQWMsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUMvQixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGNBQWMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDaEUsYUFBYTtFQUNiLFlBQVksZUFBZSxFQUFFLENBQUM7RUFDOUIsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDMUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDdEIsY0FBYyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQzNELGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUMvQyxnQkFBZ0IsV0FBVyxFQUFFLENBQUM7RUFDOUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGdCQUFnQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNqRSxlQUFlO0VBQ2YsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMxQyxrQkFBa0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUM5QixrQkFBa0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUMvRCxvQkFBb0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDbkQsb0JBQW9CLFdBQVcsRUFBRSxDQUFDO0VBQ2xDLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG9CQUFvQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNyRSxtQkFBbUI7RUFDbkIsaUJBQWlCO0VBQ2pCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxlQUFlO0VBQ2YsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUN0RCxlQUFlLE1BQU07RUFDckIsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDeEIsZUFBZTtFQUNmLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixZQUFZLEdBQUcsV0FBVyxDQUFDO0VBQzNDLGdCQUFnQixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2xDLGdCQUFnQixJQUFJLEVBQUUsRUFBRTtFQUN4QixrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQzlCLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGlCQUFpQjtFQUNqQixnQkFBZ0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3ZDLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQzFCLGtCQUFrQixFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUNuRCxrQkFBa0IsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzVDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hDLG9CQUFvQixFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUNyRCxtQkFBbUI7RUFDbkIsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO0VBQ3hDLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDdkMsc0JBQXNCLGVBQWUsRUFBRSxDQUFDO0VBQ3hDLHNCQUFzQixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQ2pFLHdCQUF3QixFQUFFLEdBQUcsT0FBTyxDQUFDO0VBQ3JDLHdCQUF3QixXQUFXLEVBQUUsQ0FBQztFQUN0Qyx1QkFBdUIsTUFBTTtFQUM3Qix3QkFBd0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4Qyx3QkFBd0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDekUsdUJBQXVCO0VBQ3ZCLHNCQUFzQixlQUFlLEVBQUUsQ0FBQztFQUN4QyxzQkFBc0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdDLHdCQUF3QixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pDLHdCQUF3QixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDcEMsdUJBQXVCLE1BQU07RUFDN0Isd0JBQXdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEMsdUJBQXVCO0VBQ3ZCLHNCQUFzQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0Msd0JBQXdCLEVBQUUsR0FBRywyQkFBMkIsRUFBRSxDQUFDO0VBQzNELHdCQUF3QixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0MsMEJBQTBCLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDNUMsMEJBQTBCLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUNwRCwwQkFBMEIsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNsQyx5QkFBeUIsTUFBTTtFQUMvQiwwQkFBMEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQywwQkFBMEIsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQyx5QkFBeUI7RUFDekIsdUJBQXVCLE1BQU07RUFDN0Isd0JBQXdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekMsd0JBQXdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEMsdUJBQXVCO0VBQ3ZCLHFCQUFxQixNQUFNO0VBQzNCLHNCQUFzQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZDLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLHFCQUFxQjtFQUNyQixtQkFBbUIsTUFBTTtFQUN6QixvQkFBb0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNyQyxvQkFBb0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNwQyxtQkFBbUI7RUFDbkIsaUJBQWlCLE1BQU07RUFDdkIsa0JBQWtCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDbkMsa0JBQWtCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsaUJBQWlCO0VBQ2pCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxlQUFlO0VBQ2YsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDM0IsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ3BELFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUN6QixZQUFZLFdBQVcsRUFBRSxDQUFDO0VBQzFCLFdBQVcsTUFBTTtFQUNqQixZQUFZLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUIsWUFBWSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUM3RCxXQUFXO0VBQ1gsVUFBVSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDakMsWUFBWSxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQzdCLFlBQVksZUFBZSxFQUFFLENBQUM7RUFDOUIsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUMzRCxjQUFjLEVBQUUsR0FBRyxRQUFRLENBQUM7RUFDNUIsY0FBYyxXQUFXLElBQUksQ0FBQyxDQUFDO0VBQy9CLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNoRSxhQUFhO0VBQ2IsWUFBWSxlQUFlLEVBQUUsQ0FBQztFQUM5QixZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUMxQixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQy9CLGNBQWMsZUFBZSxFQUFFLENBQUM7RUFDaEMsY0FBYyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUM3RCxnQkFBZ0IsRUFBRSxHQUFHLFFBQVEsQ0FBQztFQUM5QixnQkFBZ0IsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUNqQyxlQUFlLE1BQU07RUFDckIsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZ0JBQWdCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2xFLGVBQWU7RUFDZixjQUFjLGVBQWUsRUFBRSxDQUFDO0VBQ2hDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDNUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUN4QixnQkFBZ0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUM3RCxrQkFBa0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDakQsa0JBQWtCLFdBQVcsRUFBRSxDQUFDO0VBQ2hDLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGtCQUFrQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNuRSxpQkFBaUI7RUFDakIsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzVDLG9CQUFvQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hDLG9CQUFvQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2pFLHNCQUFzQixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNyRCxzQkFBc0IsV0FBVyxFQUFFLENBQUM7RUFDcEMscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMsc0JBQXNCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3ZFLHFCQUFxQjtFQUNyQixtQkFBbUI7RUFDbkIsaUJBQWlCLE1BQU07RUFDdkIsa0JBQWtCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsaUJBQWlCO0VBQ2pCLGdCQUFnQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdkMsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUN4RCxpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMxQixpQkFBaUI7RUFDakIsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsWUFBWSxHQUFHLFdBQVcsQ0FBQztFQUM3QyxrQkFBa0IsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUU7RUFDMUIsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUNoQyxtQkFBbUIsTUFBTTtFQUN6QixvQkFBb0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNwQyxtQkFBbUI7RUFDbkIsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1QixvQkFBb0IsRUFBRSxHQUFHLHlCQUF5QixFQUFFLENBQUM7RUFDckQsb0JBQW9CLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM5QyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNsQyxzQkFBc0IsRUFBRSxHQUFHLHlCQUF5QixFQUFFLENBQUM7RUFDdkQscUJBQXFCO0VBQ3JCLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztFQUMxQyxzQkFBc0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdDLHdCQUF3QixFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUN6RCx3QkFBd0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9DLDBCQUEwQixFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUMzRCwwQkFBMEIsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pELDRCQUE0QixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzlDLDRCQUE0QixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQzFELDRCQUE0QixFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BDLDJCQUEyQixNQUFNO0VBQ2pDLDRCQUE0QixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdDLDRCQUE0QixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVDLDJCQUEyQjtFQUMzQix5QkFBeUIsTUFBTTtFQUMvQiwwQkFBMEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQywwQkFBMEIsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQyx5QkFBeUI7RUFDekIsdUJBQXVCLE1BQU07RUFDN0Isd0JBQXdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekMsd0JBQXdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEMsdUJBQXVCO0VBQ3ZCLHFCQUFxQixNQUFNO0VBQzNCLHNCQUFzQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZDLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLHFCQUFxQjtFQUNyQixtQkFBbUIsTUFBTTtFQUN6QixvQkFBb0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNyQyxvQkFBb0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNwQyxtQkFBbUI7RUFDbkIsaUJBQWlCLE1BQU07RUFDdkIsa0JBQWtCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDbkMsa0JBQWtCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsaUJBQWlCO0VBQ2pCLGVBQWUsTUFBTTtFQUNyQixnQkFBZ0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNqQyxnQkFBZ0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNoQyxlQUFlO0VBQ2YsYUFBYSxNQUFNO0VBQ25CLGNBQWMsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMvQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsYUFBYTtFQUNiLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxVQUFVLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNqQyxZQUFZLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDN0IsWUFBWSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ3RELGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUMzQixjQUFjLFdBQVcsRUFBRSxDQUFDO0VBQzVCLGFBQWEsTUFBTTtFQUNuQixjQUFjLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDOUIsY0FBYyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMvRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQy9CLGNBQWMsZUFBZSxFQUFFLENBQUM7RUFDaEMsY0FBYyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUM3RCxnQkFBZ0IsRUFBRSxHQUFHLFFBQVEsQ0FBQztFQUM5QixnQkFBZ0IsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUNqQyxlQUFlLE1BQU07RUFDckIsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZ0JBQWdCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2xFLGVBQWU7RUFDZixjQUFjLGVBQWUsRUFBRSxDQUFDO0VBQ2hDLGNBQWMsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3JDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDNUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixjQUFjLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNyQyxnQkFBZ0IsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNqQyxnQkFBZ0IsZUFBZSxFQUFFLENBQUM7RUFDbEMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO0VBQy9ELGtCQUFrQixFQUFFLEdBQUcsUUFBUSxDQUFDO0VBQ2hDLGtCQUFrQixXQUFXLElBQUksQ0FBQyxDQUFDO0VBQ25DLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGtCQUFrQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNwRSxpQkFBaUI7RUFDakIsZ0JBQWdCLGVBQWUsRUFBRSxDQUFDO0VBQ2xDLGdCQUFnQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdkMsa0JBQWtCLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUM5QixpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxpQkFBaUI7RUFDakIsZ0JBQWdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN2QyxrQkFBa0IsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUMxQixrQkFBa0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUMvRCxvQkFBb0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDbkQsb0JBQW9CLFdBQVcsRUFBRSxDQUFDO0VBQ2xDLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG9CQUFvQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNyRSxtQkFBbUI7RUFDbkIsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzlDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2xDLHNCQUFzQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ25FLHdCQUF3QixFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN2RCx3QkFBd0IsV0FBVyxFQUFFLENBQUM7RUFDdEMsdUJBQXVCLE1BQU07RUFDN0Isd0JBQXdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEMsd0JBQXdCLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3pFLHVCQUF1QjtFQUN2QixxQkFBcUI7RUFDckIsbUJBQW1CLE1BQU07RUFDekIsb0JBQW9CLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDcEMsbUJBQW1CO0VBQ25CLGtCQUFrQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDekMsb0JBQW9CLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUMxRCxtQkFBbUIsTUFBTTtFQUN6QixvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM1QixtQkFBbUI7RUFDbkIsa0JBQWtCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUN6QyxvQkFBb0IsWUFBWSxHQUFHLFdBQVcsQ0FBQztFQUMvQyxvQkFBb0IsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN0QyxvQkFBb0IsSUFBSSxFQUFFLEVBQUU7RUFDNUIsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztFQUNsQyxxQkFBcUIsTUFBTTtFQUMzQixzQkFBc0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QyxxQkFBcUI7RUFDckIsb0JBQW9CLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUM5QixzQkFBc0IsRUFBRSxHQUFHLHlCQUF5QixFQUFFLENBQUM7RUFDdkQsc0JBQXNCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNoRCx3QkFBd0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQyx3QkFBd0IsRUFBRSxHQUFHLHlCQUF5QixFQUFFLENBQUM7RUFDekQsdUJBQXVCO0VBQ3ZCLHNCQUFzQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0Msd0JBQXdCLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztFQUM1Qyx3QkFBd0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9DLDBCQUEwQixFQUFFLEdBQUcseUJBQXlCLEVBQUUsQ0FBQztFQUMzRCwwQkFBMEIsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pELDRCQUE0QixZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzlDLDRCQUE0QixFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDdEQsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDcEMsMkJBQTJCLE1BQU07RUFDakMsNEJBQTRCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0MsNEJBQTRCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDNUMsMkJBQTJCO0VBQzNCLHlCQUF5QixNQUFNO0VBQy9CLDBCQUEwQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNDLDBCQUEwQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFDLHlCQUF5QjtFQUN6Qix1QkFBdUIsTUFBTTtFQUM3Qix3QkFBd0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6Qyx3QkFBd0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4Qyx1QkFBdUI7RUFDdkIscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkMsc0JBQXNCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEMscUJBQXFCO0VBQ3JCLG1CQUFtQixNQUFNO0VBQ3pCLG9CQUFvQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3JDLG9CQUFvQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3BDLG1CQUFtQjtFQUNuQixpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUNuQyxrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxpQkFBaUI7RUFDakIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ2pDLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGVBQWU7RUFDZixhQUFhLE1BQU07RUFDbkIsY0FBYyxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQy9CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixhQUFhO0VBQ2IsWUFBWSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDbkMsY0FBYyxFQUFFLEdBQUcsV0FBVyxDQUFDO0VBQy9CLGNBQWMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUN4RCxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUM3QixnQkFBZ0IsV0FBVyxFQUFFLENBQUM7RUFDOUIsZUFBZSxNQUFNO0VBQ3JCLGdCQUFnQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2hDLGdCQUFnQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUNqRSxlQUFlO0VBQ2YsY0FBYyxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDckMsZ0JBQWdCLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDakMsZ0JBQWdCLGVBQWUsRUFBRSxDQUFDO0VBQ2xDLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUMvRCxrQkFBa0IsRUFBRSxHQUFHLFFBQVEsQ0FBQztFQUNoQyxrQkFBa0IsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUNuQyxpQkFBaUIsTUFBTTtFQUN2QixrQkFBa0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNsQyxrQkFBa0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDcEUsaUJBQWlCO0VBQ2pCLGdCQUFnQixlQUFlLEVBQUUsQ0FBQztFQUNsQyxnQkFBZ0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3ZDLGtCQUFrQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDOUIsaUJBQWlCLE1BQU07RUFDdkIsa0JBQWtCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDbkMsa0JBQWtCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDbEMsaUJBQWlCO0VBQ2pCLGdCQUFnQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDdkMsa0JBQWtCLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDbkMsa0JBQWtCLGVBQWUsRUFBRSxDQUFDO0VBQ3BDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtFQUNqRSxvQkFBb0IsRUFBRSxHQUFHLFFBQVEsQ0FBQztFQUNsQyxvQkFBb0IsV0FBVyxJQUFJLENBQUMsQ0FBQztFQUNyQyxtQkFBbUIsTUFBTTtFQUN6QixvQkFBb0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUNwQyxvQkFBb0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDdEUsbUJBQW1CO0VBQ25CLGtCQUFrQixlQUFlLEVBQUUsQ0FBQztFQUNwQyxrQkFBa0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ3pDLG9CQUFvQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDaEMsbUJBQW1CLE1BQU07RUFDekIsb0JBQW9CLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDckMsb0JBQW9CLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDcEMsbUJBQW1CO0VBQ25CLGtCQUFrQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDekMsb0JBQW9CLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDNUIsb0JBQW9CLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDakUsc0JBQXNCLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3JELHNCQUFzQixXQUFXLEVBQUUsQ0FBQztFQUNwQyxxQkFBcUIsTUFBTTtFQUMzQixzQkFBc0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QyxzQkFBc0IsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDdkUscUJBQXFCO0VBQ3JCLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNoRCx3QkFBd0IsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNwQyx3QkFBd0IsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNyRSwwQkFBMEIsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDekQsMEJBQTBCLFdBQVcsRUFBRSxDQUFDO0VBQ3hDLHlCQUF5QixNQUFNO0VBQy9CLDBCQUEwQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFDLDBCQUEwQixJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtFQUMzRSx5QkFBeUI7RUFDekIsdUJBQXVCO0VBQ3ZCLHFCQUFxQixNQUFNO0VBQzNCLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RDLHFCQUFxQjtFQUNyQixvQkFBb0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNDLHNCQUFzQixFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFDNUQscUJBQXFCLE1BQU07RUFDM0Isc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUIscUJBQXFCO0VBQ3JCLG9CQUFvQixJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0Msc0JBQXNCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDOUIsc0JBQXNCLEVBQUUsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO0VBQ3ZELHNCQUFzQixPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDaEQsd0JBQXdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDcEMsd0JBQXdCLEVBQUUsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO0VBQ3pELHVCQUF1QjtFQUN2QixzQkFBc0IsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdDLHdCQUF3QixFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDM0Msd0JBQXdCLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQywwQkFBMEIsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUM1QywwQkFBMEIsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDaEQsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEMseUJBQXlCLE1BQU07RUFDL0IsMEJBQTBCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0MsMEJBQTBCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUMseUJBQXlCO0VBQ3pCLHVCQUF1QixNQUFNO0VBQzdCLHdCQUF3QixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pDLHdCQUF3QixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hDLHVCQUF1QjtFQUN2QixxQkFBcUIsTUFBTTtFQUMzQixzQkFBc0IsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QyxzQkFBc0IsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QyxxQkFBcUI7RUFDckIsbUJBQW1CLE1BQU07RUFDekIsb0JBQW9CLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDckMsb0JBQW9CLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDcEMsbUJBQW1CO0VBQ25CLGlCQUFpQixNQUFNO0VBQ3ZCLGtCQUFrQixXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ25DLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ2xDLGlCQUFpQjtFQUNqQixlQUFlLE1BQU07RUFDckIsZ0JBQWdCLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDakMsZ0JBQWdCLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDaEMsZUFBZTtFQUNmLGFBQWE7RUFDYixXQUFXO0VBQ1gsU0FBUztFQUNULE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHlCQUF5QixHQUFHO0VBQ3ZDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMvQjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUU7RUFDOUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDO0VBQ3BCLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDeEQsS0FBSztFQUNMLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO0VBQzFCLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEIsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3RELFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDekMsVUFBVSxXQUFXLEVBQUUsQ0FBQztFQUN4QixTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsVUFBVSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUM1RCxTQUFTO0VBQ1QsUUFBUSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDL0IsVUFBVSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDcEMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3hCLFlBQVksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUMxRCxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQzdDLGNBQWMsV0FBVyxFQUFFLENBQUM7RUFDNUIsYUFBYSxNQUFNO0VBQ25CLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM5QixjQUFjLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ2hFLGFBQWE7RUFDYixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUNoRCxTQUFTLE1BQU07RUFDZixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDbEIsU0FBUztFQUNULFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO0VBQzlCLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtFQUN0RCxjQUFjLEVBQUUsR0FBRyxRQUFRLENBQUM7RUFDNUIsY0FBYyxXQUFXLEVBQUUsQ0FBQztFQUM1QixhQUFhLE1BQU07RUFDbkIsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGNBQWMsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDaEUsYUFBYTtFQUNiLFlBQVksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ25DLGNBQWMsWUFBWSxHQUFHLEVBQUUsQ0FBQztFQUNoQyxjQUFjLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3RCLGFBQWEsTUFBTTtFQUNuQixjQUFjLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDL0IsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzlCLGFBQWE7RUFDYixXQUFXLE1BQU07RUFDakIsWUFBWSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzdCLFlBQVksRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUM1QixXQUFXO0VBQ1gsU0FBUyxNQUFNO0VBQ2YsVUFBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQzNCLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUMxQixTQUFTO0VBQ1QsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHlCQUF5QixHQUFHO0VBQ3ZDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNuQjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztFQUN4QixJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDcEQsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUN2QyxRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixRQUFRLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQzFELE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLFlBQVksR0FBRyxFQUFFLENBQUM7RUFDMUIsUUFBUSxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzFCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNoQixPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLLE1BQU07RUFDWCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7RUFDTCxJQUFJLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMzQixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7RUFDNUIsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztFQUNoQyxPQUFPO0VBQ1AsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDN0IsUUFBUSxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBQzFCLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN6QixPQUFPO0VBQ1AsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2QsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxxQkFBcUIsR0FBRztFQUNuQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzQjtFQUNBLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQztFQUNyQixJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2xELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDckMsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUN4RCxLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2QsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3BELFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDdkMsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUMxRCxPQUFPO0VBQ1AsTUFBTSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDaEMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ3BCLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUN0RCxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3pDLFVBQVUsV0FBVyxFQUFFLENBQUM7RUFDeEIsU0FBUyxNQUFNO0VBQ2YsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFVBQVUsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDNUQsU0FBUztFQUNULE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN0QixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDaEIsT0FBTyxNQUFNO0VBQ2IsUUFBUSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3pCLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixPQUFPO0VBQ1AsS0FBSyxNQUFNO0VBQ1gsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixLQUFLO0VBQ0wsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7RUFDNUMsS0FBSyxNQUFNO0VBQ1gsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2QsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyx3QkFBd0IsR0FBRztFQUN0QyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1g7RUFDQSxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDbEQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNyQyxNQUFNLFdBQVcsRUFBRSxDQUFDO0VBQ3BCLEtBQUssTUFBTTtFQUNYLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ3hELEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsMEJBQTBCLEdBQUc7RUFDeEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYO0VBQ0EsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2xELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDckMsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUN4RCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQUNIO0VBQ0EsRUFBRSxTQUFTLHVCQUF1QixHQUFHO0VBQ3JDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ2hELFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQztFQUN0QixRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixRQUFRLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQzFELE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDNUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2xCLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyx3QkFBd0IsR0FBRztFQUN0QyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDL0I7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ2hELFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztFQUNyQixRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixRQUFRLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFO0VBQ3pELE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7RUFDbEIsT0FBTztFQUNQLE1BQU0sSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzdCLFFBQVEsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO0VBQzVCLFFBQVEsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQy9CLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQztFQUNsQixVQUFVLEVBQUUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0VBQ3RDLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO0VBQ2hDLFdBQVc7RUFDWCxVQUFVLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNwQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDeEIsWUFBWSxFQUFFLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztFQUN4QyxZQUFZLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUNuQyxjQUFjLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztFQUNsQyxhQUFhO0VBQ2IsV0FBVztFQUNYLFVBQVUsSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQ2pDLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDbEMsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ3BCLFdBQVcsTUFBTTtFQUNqQixZQUFZLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDN0IsWUFBWSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzVCLFdBQVc7RUFDWCxTQUFTLE1BQU07RUFDZixVQUFVLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDM0IsVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQzFCLFNBQVM7RUFDVCxPQUFPLE1BQU07RUFDYixRQUFRLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLE9BQU87RUFDUCxLQUFLLE1BQU07RUFDWCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7RUFDdkIsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBQ0g7RUFDQSxFQUFFLFNBQVMsZUFBZSxHQUFHO0VBQzdCLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdkI7RUFDQSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUM7RUFDckIsSUFBSSxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7RUFDdkIsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFO0VBQ2hELFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQztFQUN0QixRQUFRLFdBQVcsRUFBRSxDQUFDO0VBQ3RCLE9BQU8sTUFBTTtFQUNiLFFBQVEsRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN4QixRQUFRLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQzFELE9BQU87RUFDUCxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM3QixRQUFRLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztFQUMzQixRQUFRLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUMvQixVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDNUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ2xCLFNBQVMsTUFBTTtFQUNmLFVBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUMzQixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDMUIsU0FBUztFQUNULE9BQU8sTUFBTTtFQUNiLFFBQVEsV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN6QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsT0FBTztFQUNQLEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztFQUN2QixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtFQUNBLEVBQUUsU0FBUyxZQUFZLEdBQUc7RUFDMUIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYO0VBQ0EsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2xELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDckMsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUN4RCxLQUFLO0FBQ0w7RUFDQSxJQUFJLE9BQU8sRUFBRSxDQUFDO0VBQ2QsR0FBRztBQW9DSDtFQUNBLEVBQUUsU0FBUyxZQUFZLEdBQUc7RUFDMUIsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDZjtFQUNBLElBQUksZUFBZSxFQUFFLENBQUM7RUFDdEIsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0VBQ1osSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ2xELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDckMsTUFBTSxXQUFXLEVBQUUsQ0FBQztFQUNwQixLQUFLLE1BQU07RUFDWCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDdEIsTUFBTSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUN4RCxLQUFLO0VBQ0wsSUFBSSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDOUIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2xCLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtFQUNwRCxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ3ZDLFFBQVEsV0FBVyxFQUFFLENBQUM7RUFDdEIsT0FBTyxNQUFNO0VBQ2IsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3hCLFFBQVEsSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDMUQsT0FBTztFQUNQLEtBQUs7RUFDTCxJQUFJLGVBQWUsRUFBRSxDQUFDO0VBQ3RCLElBQUksSUFBSSxFQUFFLEtBQUssVUFBVSxFQUFFO0VBQzNCLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ3hELEtBQUs7QUFDTDtFQUNBLElBQUksT0FBTyxFQUFFLENBQUM7RUFDZCxHQUFHO0FBc0dIO0VBQ0EsRUFBRSxTQUFTLFdBQVcsR0FBRztFQUN6QixJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNmO0VBQ0EsSUFBSSxlQUFlLEVBQUUsQ0FBQztFQUN0QixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7RUFDWixJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDbEQsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUNyQyxNQUFNLFdBQVcsRUFBRSxDQUFDO0VBQ3BCLEtBQUssTUFBTTtFQUNYLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQztFQUN0QixNQUFNLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFO0VBQ3hELEtBQUs7RUFDTCxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtFQUM5QixNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbEIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFO0VBQ3BELFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDdkMsUUFBUSxXQUFXLEVBQUUsQ0FBQztFQUN0QixPQUFPLE1BQU07RUFDYixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7RUFDeEIsUUFBUSxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtFQUMxRCxPQUFPO0VBQ1AsS0FBSztFQUNMLElBQUksZUFBZSxFQUFFLENBQUM7RUFDdEIsSUFBSSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUU7RUFDM0IsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0VBQ3RCLE1BQU0sSUFBSSxlQUFlLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUU7RUFDeEQsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEVBQUUsQ0FBQztFQUNkLEdBQUc7QUFDSDtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUNBO0VBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRztFQUNuQixNQUFNLEVBQUUsRUFBRSxTQUFTO0VBQ25CLE1BQU0sRUFBRSxFQUFFLFNBQVM7RUFDbkIsTUFBTSxFQUFFLEVBQUUsU0FBUztFQUNuQixNQUFNLE9BQU8sRUFBRSxTQUFTO0FBQ3hCO0VBQ0EsTUFBTSxFQUFFLEVBQUUsTUFBTTtFQUNoQixNQUFNLFFBQVEsRUFBRSxNQUFNO0FBQ3RCO0VBQ0EsTUFBTSxFQUFFLEVBQUUsV0FBVztFQUNyQixNQUFNLE9BQU8sRUFBRSxXQUFXO0FBQzFCO0VBQ0EsTUFBTSxFQUFFLEVBQUUsWUFBWTtFQUN0QixNQUFNLEVBQUUsRUFBRSxPQUFPO0VBQ2pCLE1BQU0sRUFBRSxFQUFFLFdBQVc7RUFDckIsTUFBTSxJQUFJLEVBQUUsVUFBVTtFQUN0QixNQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUM7RUFDdkYsSUFBSSxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUM7RUFDN00sSUFBSSxNQUFNLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUM7QUFDcEY7RUFDQSxJQUFJLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRTtFQUNuQyxNQUFNLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzNGLEtBQUs7QUFDTDtFQUNBLElBQUksU0FBUyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUU7RUFDMUMsTUFBTSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLO0VBQzVDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0VBQzdCLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDaEQsWUFBWSxPQUFPLElBQUksQ0FBQztFQUN4QixXQUFXLE1BQU07RUFDakIsWUFBWSxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7RUFDOUIsV0FBVztFQUNYLFNBQVM7RUFDVCxRQUFRLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQztFQUMzQixPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDYixLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHO0VBQzFCLE1BQU0sYUFBYSxFQUFFLENBQUM7RUFDdEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztFQUNaLE1BQU0sS0FBSyxFQUFFLENBQUM7RUFDZCxNQUFNLE1BQU0sRUFBRSxDQUFDO0VBQ2YsTUFBTSxTQUFTLEVBQUUsQ0FBQztFQUNsQixNQUFNLElBQUksRUFBRSxDQUFDO0VBQ2IsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNiLE1BQU0sT0FBTyxFQUFFLENBQUM7RUFDaEIsTUFBTSxJQUFJLEVBQUUsQ0FBQztFQUNiLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDYixNQUFNLE9BQU8sRUFBRSxDQUFDO0VBQ2hCLE1BQU0sSUFBSSxFQUFFLENBQUM7RUFDYixNQUFNLElBQUksRUFBRSxDQUFDO0VBQ2IsTUFBTSxNQUFNLEVBQUUsQ0FBQztFQUNmLE1BQU0sTUFBTSxFQUFFLENBQUM7RUFDZixNQUFNLElBQUksRUFBRSxDQUFDO0VBQ2IsTUFBTSxTQUFTLEVBQUUsQ0FBQztFQUNsQixNQUFNLFNBQVMsRUFBRSxDQUFDO0VBQ2xCLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsTUFBTSxVQUFVLEVBQUUsQ0FBQztFQUNuQixNQUFNLFVBQVUsRUFBRSxDQUFDO0VBQ25CLE1BQU0sUUFBUSxFQUFFLENBQUM7RUFDakIsTUFBTSxLQUFLLEVBQUUsQ0FBQztFQUNkLE1BQU0sT0FBTyxFQUFFLENBQUM7RUFDaEIsTUFBTSxFQUFFLEVBQUUsQ0FBQztFQUNYLE1BQU0sRUFBRSxFQUFFLENBQUM7RUFDWCxNQUFNLFVBQVUsRUFBRSxDQUFDO0VBQ25CLE1BQU0sYUFBYSxFQUFFLENBQUM7RUFDdEIsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO0VBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDVixNQUFNLE1BQU0sRUFBRSxDQUFDO0VBQ2YsTUFBTSxNQUFNLEVBQUUsQ0FBQztFQUNmLE1BQU0sTUFBTSxFQUFFLENBQUM7RUFDZixNQUFNLE1BQU0sRUFBRSxDQUFDO0VBQ2YsTUFBTSxhQUFhLEVBQUUsQ0FBQztFQUN0QixNQUFNLGVBQWUsRUFBRSxDQUFDO0VBQ3hCLE1BQU0sTUFBTSxFQUFFLENBQUM7RUFDZixNQUFNLEdBQUcsRUFBRSxDQUFDO0VBQ1osTUFBTSxRQUFRLEVBQUUsQ0FBQztFQUNqQixNQUFNLE1BQU0sRUFBRSxDQUFDO0VBQ2YsTUFBSztBQUNMO0VBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtFQUNyQyxNQUFNLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLG1CQUFtQixFQUFFO0VBQ3JELFFBQVEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7RUFDOUIsT0FBTztFQUNQLEtBQUs7QUFVTDtFQUNBLElBQUksTUFBTSxJQUFJLEdBQUc7RUFDakIsTUFBTSxFQUFFLEVBQUUsS0FBSztBQUNmO0VBQ0EsTUFBTSxHQUFHLEVBQUUsU0FBUyxLQUFLLEVBQUU7RUFDM0IsUUFBUSxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQUs7RUFDdkIsUUFBUSxPQUFPLElBQUk7RUFDbkIsT0FBTztFQUNQLE1BQUs7QUFDTDtFQUNBLElBQUksU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7RUFDeEMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztBQUNsRjtFQUNBLE1BQU0sUUFBUSxJQUFJLENBQUMsSUFBSTtFQUN2QixRQUFRLEtBQUssVUFBVTtFQUN2QixVQUFVLEtBQUs7QUFDZjtFQUNBLFFBQVEsS0FBSyxNQUFNO0VBQ25CLFVBQVUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFDO0VBQ3pELFVBQVUsS0FBSztBQUNmO0VBQ0EsUUFBUSxLQUFLLE1BQU07RUFDbkIsVUFBVSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0VBQ2pDLGFBQWEsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7RUFDdEMsYUFBYSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQztFQUNyQyxhQUFhLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO0VBQ3BDLGFBQWEsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7RUFDcEMsYUFBYSxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztFQUNwQyxhQUFhLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ3hELGFBQWEsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUM7RUFDekQsVUFBVSxLQUFLO0FBQ2Y7RUFDQSxRQUFRO0VBQ1IsVUFBVSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDOUQsT0FBTztBQUNQO0VBQ0EsTUFBTSxPQUFPLElBQUk7RUFDakIsS0FBSztBQUNMO0VBQ0EsSUFBSSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDeEIsTUFBTSxJQUFJLE9BQU07RUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDNUIsUUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUM7RUFDOUMsT0FBTyxNQUFNO0VBQ2IsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUU7RUFDakIsUUFBUSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE9BQU07RUFDekIsT0FBTztBQUNQO0VBQ0EsTUFBTSxPQUFPO0VBQ2IsUUFBUSxJQUFJLEVBQUUsT0FBTztFQUNyQixRQUFRLEtBQUssRUFBRSxDQUFDO0VBQ2hCLFFBQVEsTUFBTSxFQUFFLEVBQUU7RUFDbEIsUUFBUSxJQUFJLEVBQUUsU0FBUztFQUN2QixRQUFRLE1BQU0sRUFBRSxNQUFNO0VBQ3RCLE9BQU87RUFDUCxLQUFLO0FBQ0w7RUFDQSxJQUFJLFNBQVMsc0JBQXNCLENBQUMsS0FBSyxFQUFFO0VBQzNDLE1BQU0sTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQUs7RUFDL0IsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEtBQUs7QUFDN0M7RUFDQSxNQUFNLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRTtBQUN0QjtFQUNBLE1BQU0sTUFBTSxNQUFNLEdBQUc7RUFDckIsUUFBUSxLQUFLLEVBQUUsSUFBSTtFQUNuQixRQUFRLE1BQU0sRUFBRSxFQUFFO0VBQ2xCLFFBQU87RUFDUCxNQUFNLFNBQVMsWUFBWSxHQUFHO0VBQzlCLFFBQVEsTUFBTSxDQUFDLEtBQUssR0FBRztFQUN2QixVQUFVLElBQUksRUFBRSxPQUFPO0VBQ3ZCLFVBQVUsR0FBRyxFQUFFLFFBQVEsRUFBRTtFQUN6QixVQUFVLE1BQU0sRUFBRSxFQUFFO0VBQ3BCLFVBQVUsS0FBSyxFQUFFLEVBQUU7RUFDbkIsVUFBVSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztFQUMzRCxVQUFVLE1BQU0sRUFBRSxJQUFJO0VBQ3RCLFVBQVM7RUFDVCxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUM7RUFDdEMsT0FBTztFQUNQLE1BQU0sS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7RUFDaEMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0VBQ2xFLFVBQVUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDO0FBQ2hDO0VBQ0EsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtFQUNqRCxZQUFZLFlBQVksR0FBRTtFQUMxQixXQUFXLE1BQU07RUFDakIsWUFBWSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDL0IsV0FBVztFQUNYLFVBQVUsUUFBUTtFQUNsQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0VBQ3BFLFVBQVUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtFQUNyQyxZQUFZLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFPO0VBQ3hDLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFJO0VBQzlGLFdBQVcsTUFBTTtFQUNqQixZQUFZLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUk7RUFDdEQsV0FBVztBQUNYO0VBQ0EsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRTtFQUNqRCxZQUFZLFlBQVksR0FBRTtFQUMxQixXQUFXLE1BQU07RUFDakIsYUFBYSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUk7RUFDaEMsV0FBVztFQUNYLFNBQVM7QUFDVDtFQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO0VBQzFCLFVBQVUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU07RUFDNUMsVUFBVSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFDO0FBQ3ZDO0VBQ0EsU0FBUyxNQUFNO0VBQ2YsVUFBVSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUM7QUFDaEM7RUFDQSxTQUFTO0VBQ1QsT0FBTztBQUNQO0VBQ0EsTUFBTSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUM7QUFDekY7RUFDQSxNQUFNLE9BQU8sS0FBSztFQUNsQixLQUFLO0FBQ0w7QUFDQTtFQUNBLEVBQUUsVUFBVSxHQUFHLHFCQUFxQixFQUFFLENBQUM7QUFDdkM7RUFDQSxFQUFFLElBQUksVUFBVSxLQUFLLFVBQVUsSUFBSSxXQUFXLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRTtFQUNqRSxJQUFJLE9BQU8sVUFBVSxDQUFDO0VBQ3RCLEdBQUcsTUFBTTtFQUNULElBQUksSUFBSSxVQUFVLEtBQUssVUFBVSxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFO0VBQ2pFLE1BQU0sUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztFQUNyQyxLQUFLO0FBQ0w7RUFDQSxJQUFJLE1BQU0sd0JBQXdCO0VBQ2xDLE1BQU0sbUJBQW1CO0VBQ3pCLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJO0VBQ3pFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNO0VBQ25DLFVBQVUsbUJBQW1CLENBQUMsY0FBYyxFQUFFLGNBQWMsR0FBRyxDQUFDLENBQUM7RUFDakUsVUFBVSxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO0VBQzdELEtBQUssQ0FBQztFQUNOLEdBQUc7RUFDSCxDQUFDO0FBQ0Q7RUFDQSxXQUFjLEdBQUc7RUFDakIsRUFBRSxXQUFXLEVBQUUsZUFBZTtFQUM5QixFQUFFLEtBQUssUUFBUSxTQUFTO0VBQ3hCLENBQUM7OztFQzV0SkQ7RUFDQTtFQUNBO0VBQ0E7RUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUM5RCxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDdkIsTUFBTSxVQUFVLFNBQVMsS0FBSyxDQUFDO0VBQy9CLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUU7RUFDakMsUUFBUSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDdEMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxPQUFPO0VBQzFCLFlBQVksT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMvRCxRQUFRLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztFQUN2QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0VBQ2pDLEtBQUs7RUFDTCxDQUFDO0VBQ0Q7RUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUc7RUFDaEM7RUFDQSxJQUFJLG8ySEFBbzJILENBQUMsTUFBTTtFQUMvMkg7RUFDQSxJQUFJLG1GQUFtRixDQUFDLE1BQU07RUFDOUY7RUFDQSxJQUFJLCsrSEFBKytILENBQUMsTUFBTTtFQUMxL0g7RUFDQSxJQUFJLGtkQUFrZCxDQUFDLE1BQU07RUFDN2Q7RUFDQSxJQUFJLHN5R0FBc3lHLENBQUMsTUFBTTtFQUNqekcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUNsQixNQUFNLFlBQVksQ0FBQztFQUNuQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRTtFQUMvQjtFQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFDckIsUUFBUSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUM7RUFDcEQsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUN6QixRQUFRLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0VBQzVCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDekIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7RUFDM0IsWUFBWSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDOUQsU0FBUztFQUNULGFBQWE7RUFDYixZQUFZLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUMxQixZQUFZLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUMvQixTQUFTO0VBQ1QsS0FBSztFQUNMLElBQUksWUFBWSxDQUFDLENBQUMsRUFBRSxjQUFjLEdBQUcsS0FBSyxFQUFFO0VBQzVDLFFBQVEsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRTtFQUM1RixLQUFLO0VBQ0wsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ2IsUUFBUSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7RUFDOUIsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtFQUN6RCxZQUFZLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNySixTQUFTO0VBQ1QsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDN0IsUUFBUSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7RUFDOUIsS0FBSztFQUNMLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRTtFQUNoQixRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztFQUM5QixRQUFRLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0VBQzdEO0VBQ0EsS0FBSztFQUNMLElBQUksY0FBYyxHQUFHO0VBQ3JCLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEYsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkI7RUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0VBQzFDLFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7RUFDaEYsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzQixZQUFZLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzFGLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDM0IsU0FBUztFQUNULEtBQUs7RUFDTCxJQUFJLFlBQVksR0FBRztFQUNuQixRQUFRLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztFQUMzQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsUUFBUSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQy9CLFFBQVEsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO0VBQ3pCLFFBQVEsT0FBTyxJQUFJLEVBQUU7RUFDckIsWUFBWSxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUN4QyxnQkFBZ0IsS0FBSyxJQUFJO0VBQ3pCLG9CQUFvQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztFQUNsQyxvQkFBb0IsTUFBTTtFQUMxQixnQkFBZ0IsS0FBSyxHQUFHO0VBQ3hCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztFQUNqQyxvQkFBb0IsTUFBTTtFQUMxQixnQkFBZ0IsS0FBSyxHQUFHO0VBQ3hCLG9CQUFvQixJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7RUFDMUMsd0JBQXdCLElBQUksSUFBSTtFQUNoQyw0QkFBNEIsTUFBTSxJQUFJLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNoRix3QkFBd0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25DLHdCQUF3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3pFLHFCQUFxQjtFQUNyQixvQkFBb0IsVUFBVSxFQUFFLENBQUM7RUFDakMsb0JBQW9CLE1BQU07RUFDMUIsZ0JBQWdCLEtBQUssR0FBRztFQUN4QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO0VBQ2pDLG9CQUFvQixNQUFNO0VBQzFCLGFBQWE7RUFDYixZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUN2QixZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtFQUMvQyxnQkFBZ0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3ZILGFBQWE7RUFDYixTQUFTO0VBQ1QsS0FBSztFQUNMLElBQUksWUFBWSxHQUFHO0VBQ25CLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUN4QixRQUFRLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFDL0IsUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7RUFDM0IsUUFBUSxPQUFPLElBQUksRUFBRTtFQUNyQixZQUFZLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBQ3hDLGdCQUFnQixLQUFLLElBQUk7RUFDekIsb0JBQW9CLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ2xDLG9CQUFvQixNQUFNO0VBQzFCLGdCQUFnQixLQUFLLEdBQUc7RUFDeEIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0VBQ2pDLG9CQUFvQixNQUFNO0VBQzFCLGdCQUFnQixLQUFLLEdBQUc7RUFDeEIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0VBQ2pDLG9CQUFvQixNQUFNO0VBQzFCLGdCQUFnQixLQUFLLEdBQUc7RUFDeEIsb0JBQW9CLElBQUksVUFBVSxJQUFJLENBQUMsRUFBRTtFQUN6Qyx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ25DLHdCQUF3QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3pFLHFCQUFxQjtFQUNyQixhQUFhO0VBQ2IsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7RUFDL0MsZ0JBQWdCLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUN2SCxhQUFhO0VBQ2IsU0FBUztFQUNULEtBQUs7RUFDTCxJQUFJLFlBQVksR0FBRztFQUNuQixRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtFQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3ZDLFNBQVM7RUFDVCxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtFQUNyQyxZQUFZLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0VBQ3ZDLFNBQVM7RUFDVCxhQUFhO0VBQ2IsWUFBWSxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUM5QixTQUFTO0VBQ1QsS0FBSztFQUNMLElBQUksS0FBSyxHQUFHO0VBQ1osUUFBUSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7RUFDMUIsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0VBQ3pDLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0VBQ25DLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QixZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7RUFDN0MsU0FBUztFQUNULFFBQVEsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQy9CLEtBQUs7RUFDTCxJQUFJLEdBQUcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxFQUFFO0VBQzlCLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztFQUMvQixRQUFRLE9BQU8sSUFBSSxFQUFFO0VBQ3JCLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0VBQ2hELGdCQUFnQixNQUFNLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUMxRCxhQUFhO0VBQ2IsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO0VBQ3JFLGdCQUFnQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDM0IsYUFBYTtFQUNiLGlCQUFpQixJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7RUFDekUsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzQixhQUFhO0VBQ2IsaUJBQWlCO0VBQ2pCLGdCQUFnQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDN0QsYUFBYTtFQUNiLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSSxnQkFBZ0IsR0FBRztFQUN2QixRQUFRLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMvQixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0VBQ2pDLFlBQVksTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLDJDQUEyQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzNJLFNBQVM7RUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsUUFBUSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7RUFDakMsUUFBUSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQzFCLEtBQUs7RUFDTCxJQUFJLGNBQWMsR0FBRztFQUNyQixRQUFRLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0VBQ2hDLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0VBQ25DLFlBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM1QjtFQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0VBQ3BDLGdCQUFnQixNQUFNO0VBQ3RCLGFBQWE7RUFDYixZQUFZLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0VBQ3BDLFNBQVM7RUFDVCxLQUFLO0VBQ0wsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFO0VBQ2IsUUFBUSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDdEMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3hCLFFBQVEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0VBQzlCLEtBQUs7RUFDTCxJQUFJLFNBQVMsR0FBRztFQUNoQixRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDeEIsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDOUMsS0FBSztFQUNMLElBQUksTUFBTSxHQUFHO0VBQ2IsUUFBUSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztFQUNoQyxLQUFLO0VBQ0wsSUFBSSxRQUFRLEdBQUc7RUFDZixRQUFRLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNyQixLQUFLO0VBQ0wsSUFBSSxPQUFPLEdBQUc7RUFDZCxRQUFRLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7RUFDNUQsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtFQUMxQyxZQUFZLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUNoQyxZQUFZLE9BQU87RUFDbkIsU0FBUztFQUNULFFBQVEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07RUFDNUUsWUFBWSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7RUFDdkIsS0FBSztFQUNMO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUksT0FBTyxHQUFHO0VBQ2QsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVztFQUNoRSxZQUFZLE9BQU8sS0FBSyxDQUFDO0VBQ3pCLFFBQVEsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO0VBQzlDLEtBQUs7RUFDTCxJQUFJLE1BQU0sR0FBRztFQUNiLFFBQVEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7RUFDL0IsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7RUFDN0IsU0FBUztFQUNULEtBQUs7RUFDTCxJQUFJLFdBQVcsR0FBRztFQUNsQixRQUFRLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDM0ksS0FBSztFQUNMLElBQUksU0FBUyxHQUFHO0VBQ2hCO0VBQ0EsUUFBUSxNQUFNLEtBQUssR0FBRztFQUN0QixZQUFZLE1BQU0sRUFBRTtFQUNwQixnQkFBZ0IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO0VBQzdCLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUM7RUFDOUUsYUFBYTtFQUNiLFlBQVksS0FBSyxFQUFFLElBQUk7RUFDdkIsWUFBWSxJQUFJLEVBQUUsSUFBSTtFQUN0QixTQUFTLENBQUM7RUFDVixRQUFRLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztFQUM5QixRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07RUFDekMsWUFBWSxPQUFPO0VBQ25CLFFBQVEsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0VBQ3ZCLFFBQVEsSUFBSTtFQUNaLFlBQVksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0VBQ3ZDLFlBQVksUUFBUSxDQUFDO0VBQ3JCLGdCQUFnQixLQUFLLFNBQVM7RUFDOUIsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsb0JBQW9CLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUNsQyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxvQkFBb0IsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztFQUNuRCxvQkFBb0IsTUFBTTtFQUMxQixnQkFBZ0IsS0FBSyxXQUFXO0VBQ2hDLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ3BDLG9CQUFvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7RUFDcEMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDcEMsb0JBQW9CLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0VBQzFDLG9CQUFvQixNQUFNO0VBQzFCLGdCQUFnQixLQUFLLFVBQVU7RUFDL0Isb0JBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUNuQyxvQkFBb0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7RUFDekMsb0JBQW9CLE1BQU07RUFDMUIsZ0JBQWdCO0VBQ2hCLG9CQUFvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7RUFDNUMsd0JBQXdCLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDckMscUJBQXFCO0VBQ3JCLHlCQUF5QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7RUFDakQsd0JBQXdCLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDckMscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6Qix3QkFBd0IsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLDJDQUEyQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3ZKLHFCQUFxQjtFQUNyQixvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNsQyxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QyxvQkFBb0IsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7RUFDdkMsb0JBQW9CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztFQUNuQyxvQkFBb0IsTUFBTTtFQUMxQixhQUFhO0VBQ2IsU0FBUztFQUNULFFBQVEsT0FBTyxHQUFHLEVBQUU7RUFDcEIsWUFBWSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWTtFQUN6QyxnQkFBZ0IsTUFBTSxHQUFHLENBQUM7RUFDMUIsWUFBWSxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPO0VBQ3JDO0VBQ0EsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ2hELFlBQVksT0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUc7RUFDL0UsZ0JBQWdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzQixTQUFTO0VBQ1QsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDdEUsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDNUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7RUFDMUUsWUFBWSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUM7RUFDM0MsU0FBUztFQUNULGFBQWE7RUFDYixZQUFZLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0VBQzlCLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDcEMsU0FBUztFQUNULEtBQUs7RUFDTCxDQUFDO0VBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUU7RUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztFQUNwRCxDQUFDO0VBQ0QsYUFBYSxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNsQyxZQUFZLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztFQUN2RCxZQUFZLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztFQUNqRCxZQUFZLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztFQUMxRCxZQUFZLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztFQUMxRSxZQUFZLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztFQUNyRCxZQUFZLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkNBQTJDLENBQUMs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'); +/* eslint-enable */ + +var CitationPlugin = /** @class */ (function (_super) { + __extends(CitationPlugin, _super); + function CitationPlugin() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // Template compilation options + _this.templateSettings = { + noEscape: true, + }; + _this.loadWorker = new WorkerManager(new WorkerFactory(), { + blockingChannel: true, + }); + _this.loadErrorNotifier = new Notifier('Unable to load citations. Please update Citations plugin settings.'); + _this.literatureNoteErrorNotifier = new Notifier('Unable to access literature note. Please check that the literature note folder exists, or update the Citations plugin settings.'); + return _this; + } + Object.defineProperty(CitationPlugin.prototype, "editor", { + get: function () { + var view = this.app.workspace.activeLeaf.view; + if (!(view instanceof obsidian.MarkdownView)) + return null; + var sourceView = view.sourceMode; + return sourceView.cmEditor; + }, + enumerable: false, + configurable: true + }); + CitationPlugin.prototype.loadSettings = function () { + return __awaiter(this, void 0, void 0, function () { + var loadedSettings, toLoad; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.settings = new CitationsPluginSettings(); + return [4 /*yield*/, this.loadData()]; + case 1: + loadedSettings = _a.sent(); + if (!loadedSettings) + return [2 /*return*/]; + toLoad = [ + 'citationExportPath', + 'citationExportFormat', + 'literatureNoteTitleTemplate', + 'literatureNoteFolder', + 'literatureNoteContentTemplate', + 'markdownCitationTemplate', + 'alternativeMarkdownCitationTemplate', + ]; + toLoad.forEach(function (setting) { + if (setting in loadedSettings) { + _this.settings[setting] = loadedSettings[setting]; + } + }); + return [2 /*return*/]; + } + }); + }); + }; + CitationPlugin.prototype.saveSettings = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.saveData(this.settings)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + CitationPlugin.prototype.onload = function () { + var _this = this; + this.loadSettings().then(function () { return _this.init(); }); + }; + CitationPlugin.prototype.init = function () { + return __awaiter(this, void 0, void 0, function () { + var watchOptions; + var _this = this; + return __generator(this, function (_a) { + if (this.settings.citationExportPath) { + // Load library for the first time + this.loadLibrary(); + // Set up a watcher to refresh whenever the export is updated + try { + watchOptions = { + awaitWriteFinish: { + stabilityThreshold: 500, + }, + }; + watch_1(this.resolveLibraryPath(this.settings.citationExportPath), watchOptions) + .on('change', function () { + _this.loadLibrary(); + }); + } + catch (_b) { + this.loadErrorNotifier.show(); + } + } + this.addCommand({ + id: 'open-literature-note', + name: 'Open literature note', + hotkeys: [{ modifiers: ['Ctrl', 'Shift'], key: 'o' }], + callback: function () { + var modal = new OpenNoteModal(_this.app, _this); + modal.open(); + }, + }); + this.addCommand({ + id: 'update-bib-data', + name: 'Refresh citation database', + hotkeys: [{ modifiers: ['Ctrl', 'Shift'], key: 'r' }], + callback: function () { + _this.loadLibrary(); + }, + }); + this.addCommand({ + id: 'insert-citation', + name: 'Insert literature note link', + hotkeys: [{ modifiers: ['Ctrl', 'Shift'], key: 'e' }], + callback: function () { + var modal = new InsertNoteLinkModal(_this.app, _this); + modal.open(); + }, + }); + this.addCommand({ + id: 'insert-literature-note-content', + name: 'Insert literature note content in the current pane', + callback: function () { + var modal = new InsertNoteContentModal(_this.app, _this); + modal.open(); + }, + }); + this.addCommand({ + id: 'insert-markdown-citation', + name: 'Insert Markdown citation', + callback: function () { + var modal = new InsertCitationModal(_this.app, _this); + modal.open(); + }, + }); + this.addSettingTab(new CitationSettingTab(this.app, this)); + return [2 /*return*/]; + }); + }); + }; + /** + * Resolve a provided library path, allowing for relative paths rooted at + * the vault directory. + */ + CitationPlugin.prototype.resolveLibraryPath = function (rawPath) { + var vaultRoot = this.app.vault.adapter instanceof obsidian.FileSystemAdapter + ? this.app.vault.adapter.getBasePath() + : '/'; + return sysPath.resolve(vaultRoot, rawPath); + }; + CitationPlugin.prototype.loadLibrary = function () { + return __awaiter(this, void 0, void 0, function () { + var filePath; + var _this = this; + return __generator(this, function (_a) { + console.debug('Citation plugin: Reloading library'); + if (this.settings.citationExportPath) { + filePath = this.resolveLibraryPath(this.settings.citationExportPath); + // Unload current library. + this.library = null; + return [2 /*return*/, obsidian.FileSystemAdapter.readLocalFile(filePath) + .then(function (buffer) { + // If there is a remaining error message, hide it + _this.loadErrorNotifier.hide(); + // Decode file as UTF-8. + var dataView = new DataView(buffer); + var decoder = new TextDecoder('utf8'); + var value = decoder.decode(dataView); + return _this.loadWorker.post({ + databaseRaw: value, + databaseType: _this.settings.citationExportFormat, + }); + }) + .then(function (entries) { + var adapter; + var idKey; + switch (_this.settings.citationExportFormat) { + case 'biblatex': + adapter = EntryBibLaTeXAdapter; + idKey = 'key'; + break; + case 'csl-json': + adapter = EntryCSLAdapter; + idKey = 'id'; + break; + } + _this.library = new Library(Object.fromEntries(entries.map(function (e) { return [e[idKey], new adapter(e)]; }))); + console.debug("Citation plugin: successfully loaded library with " + _this.library.size + " entries."); + return _this.library; + }) + .catch(function (e) { + if (e instanceof WorkerManagerBlocked) { + // Silently catch WorkerManager error, which will be thrown if the + // library is already being loaded + return; + } + console.error(e); + _this.loadErrorNotifier.show(); + return null; + })]; + } + else { + console.warn('Citations plugin: citation export path is not set. Please update plugin settings.'); + } + return [2 /*return*/]; + }); + }); + }; + Object.defineProperty(CitationPlugin.prototype, "isLibraryLoading", { + /** + * Returns true iff the library is currently being loaded on the worker thread. + */ + get: function () { + return this.loadWorker.blocked; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "literatureNoteTitleTemplate", { + get: function () { + return lib.compile(this.settings.literatureNoteTitleTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "literatureNoteContentTemplate", { + get: function () { + return lib.compile(this.settings.literatureNoteContentTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "markdownCitationTemplate", { + get: function () { + return lib.compile(this.settings.markdownCitationTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(CitationPlugin.prototype, "alternativeMarkdownCitationTemplate", { + get: function () { + return lib.compile(this.settings.alternativeMarkdownCitationTemplate, this.templateSettings); + }, + enumerable: false, + configurable: true + }); + CitationPlugin.prototype.getTitleForCitekey = function (citekey) { + var unsafeTitle = this.literatureNoteTitleTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + return unsafeTitle.replace(DISALLOWED_FILENAME_CHARACTERS_RE, '_'); + }; + CitationPlugin.prototype.getPathForCitekey = function (citekey) { + var title = this.getTitleForCitekey(citekey); + // TODO escape note title + return sysPath.join(this.settings.literatureNoteFolder, title + ".md"); + }; + CitationPlugin.prototype.getInitialContentForCitekey = function (citekey) { + return this.literatureNoteContentTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + }; + CitationPlugin.prototype.getMarkdownCitationForCitekey = function (citekey) { + return this.markdownCitationTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + }; + CitationPlugin.prototype.getAlternativeMarkdownCitationForCitekey = function (citekey) { + return this.alternativeMarkdownCitationTemplate(this.library.getTemplateVariablesForCitekey(citekey)); + }; + /** + * Run a case-insensitive search for the literature note file corresponding to + * the given citekey. If no corresponding file is found, create one. + */ + CitationPlugin.prototype.getOrCreateLiteratureNoteFile = function (citekey) { + return __awaiter(this, void 0, void 0, function () { + var path, normalizedPath, file, matches, exc_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + path = this.getPathForCitekey(citekey); + normalizedPath = obsidian.normalizePath(path); + file = this.app.vault.getAbstractFileByPath(normalizedPath); + if (!(file == null)) return [3 /*break*/, 4]; + matches = this.app.vault + .getMarkdownFiles() + .filter(function (f) { return f.path.toLowerCase() == normalizedPath.toLowerCase(); }); + if (!(matches.length > 0)) return [3 /*break*/, 1]; + file = matches[0]; + return [3 /*break*/, 4]; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, this.app.vault.create(path, this.getInitialContentForCitekey(citekey))]; + case 2: + file = _a.sent(); + return [3 /*break*/, 4]; + case 3: + exc_1 = _a.sent(); + this.literatureNoteErrorNotifier.show(); + throw exc_1; + case 4: return [2 /*return*/, file]; + } + }); + }); + }; + CitationPlugin.prototype.openLiteratureNote = function (citekey, newPane) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.getOrCreateLiteratureNoteFile(citekey) + .then(function (file) { + _this.app.workspace.getLeaf(newPane).openFile(file); + }) + .catch(console.error); + return [2 /*return*/]; + }); + }); + }; + CitationPlugin.prototype.insertLiteratureNoteLink = function (citekey) { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.getOrCreateLiteratureNoteFile(citekey) + .then(function (file) { + var useMarkdown = _this.app.vault.getConfig('useMarkdownLinks'); + var title = _this.getTitleForCitekey(citekey); + var linkText; + if (useMarkdown) { + var uri = encodeURI(_this.app.metadataCache.fileToLinktext(file, '', false)); + linkText = "[" + title + "](" + uri + ")"; + } + else { + linkText = "[[" + title + "]]"; + } + _this.editor.replaceRange(linkText, _this.editor.getCursor()); + }) + .catch(console.error); + return [2 /*return*/]; + }); + }); + }; + /** + * Format literature note content for a given reference and insert in the + * currently active pane. + */ + CitationPlugin.prototype.insertLiteratureNoteContent = function (citekey) { + return __awaiter(this, void 0, void 0, function () { + var content; + return __generator(this, function (_a) { + content = this.getInitialContentForCitekey(citekey); + this.editor.replaceRange(content, this.editor.getCursor()); + return [2 /*return*/]; + }); + }); + }; + CitationPlugin.prototype.insertMarkdownCitation = function (citekey, alternative) { + if (alternative === void 0) { alternative = false; } + return __awaiter(this, void 0, void 0, function () { + var func, citation; + return __generator(this, function (_a) { + func = alternative + ? this.getAlternativeMarkdownCitationForCitekey + : this.getMarkdownCitationForCitekey; + citation = func.bind(this)(citekey); + this.editor.replaceRange(citation, this.editor.getCursor()); + return [2 /*return*/]; + }); + }); + }; + return CitationPlugin; +}(obsidian.Plugin)); + +module.exports = CitationPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvc2Nhbi5qcyIsIm5vZGVfbW9kdWxlcy9waWNvbWF0Y2gvbGliL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL3BpY29tYXRjaC9saWIvcGljb21hdGNoLmpzIiwibm9kZV9tb2R1bGVzL3BpY29tYXRjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9yZWFkZGlycC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9ub3JtYWxpemUtcGF0aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnltYXRjaC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9pcy1leHRnbG9iL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2lzLWdsb2IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZ2xvYi1wYXJlbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJhY2VzL2xpYi91dGlscy5qcyIsIm5vZGVfbW9kdWxlcy9icmFjZXMvbGliL3N0cmluZ2lmeS5qcyIsIm5vZGVfbW9kdWxlcy9pcy1udW1iZXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvdG8tcmVnZXgtcmFuZ2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZmlsbC1yYW5nZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9icmFjZXMvbGliL2NvbXBpbGUuanMiLCJub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9leHBhbmQuanMiLCJub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvYnJhY2VzL2xpYi9wYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9icmFjZXMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYmluYXJ5LWV4dGVuc2lvbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaXMtYmluYXJ5LXBhdGgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hva2lkYXIvbGliL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaG9raWRhci9saWIvbm9kZWZzLWhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvY2hva2lkYXIvbGliL2ZzZXZlbnRzLWhhbmRsZXIuanMiLCJub2RlX21vZHVsZXMvY2hva2lkYXIvaW5kZXguanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL3V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9leGNlcHRpb24uanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9oZWxwZXItbWlzc2luZy5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9pZi5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9sb2cuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9oZWxwZXJzL3dpdGguanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9kZWNvcmF0b3JzLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9sb2dnZXIuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaW50ZXJuYWwvcHJvdG8tYWNjZXNzLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9iYXNlLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9zYWZlLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaW50ZXJuYWwvd3JhcEhlbHBlci5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvcnVudGltZS5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvY29tcGlsZXIvcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9jb21waWxlci92aXNpdG9yLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9jb21waWxlci93aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL2Jhc2U2NC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iYXNlNjQtdmxxLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvYXJyYXktc2V0LmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL21hcHBpbmctbGlzdC5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9iaW5hcnktc2VhcmNoLmpzIiwibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAvbGliL3F1aWNrLXNvcnQuanMiLCJub2RlX21vZHVsZXMvc291cmNlLW1hcC9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL2xpYi9zb3VyY2Utbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwL3NvdXJjZS1tYXAuanMiLCJub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9jb21waWxlci9qYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwibm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvY29tcGlsZXIvcHJpbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2xpYi9pbmRleC5qcyIsInNyYy9tb2RhbHMudHMiLCJub2RlX21vZHVsZXMvQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlci9ncmFtbWFyLmpzIiwibm9kZV9tb2R1bGVzL0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXIvY2h1bmtlci5qcyIsIm5vZGVfbW9kdWxlcy91bmljb2RlMmxhdGV4L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3hyZWdleHAvdG9vbHMvb3V0cHV0L2NhdGVnb3JpZXMuanMiLCJub2RlX21vZHVsZXMvQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlci9qYWJyZWYuanMiLCJub2RlX21vZHVsZXMvQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlci9pbmRleC5qcyIsInNyYy90eXBlcy50cyIsInNyYy9zZXR0aW5ncy50cyIsIm5vZGVfbW9kdWxlcy9wcm9taXNlLXdvcmtlci9pbmRleC5qcyIsInNyYy9vYnNpZGlhbi1leHRlbnNpb25zLnRzIiwic3JjL3V0aWwudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBXSU5fU0xBU0ggPSAnXFxcXFxcXFwvJztcbmNvbnN0IFdJTl9OT19TTEFTSCA9IGBbXiR7V0lOX1NMQVNIfV1gO1xuXG4vKipcbiAqIFBvc2l4IGdsb2IgcmVnZXhcbiAqL1xuXG5jb25zdCBET1RfTElURVJBTCA9ICdcXFxcLic7XG5jb25zdCBQTFVTX0xJVEVSQUwgPSAnXFxcXCsnO1xuY29uc3QgUU1BUktfTElURVJBTCA9ICdcXFxcPyc7XG5jb25zdCBTTEFTSF9MSVRFUkFMID0gJ1xcXFwvJztcbmNvbnN0IE9ORV9DSEFSID0gJyg/PS4pJztcbmNvbnN0IFFNQVJLID0gJ1teL10nO1xuY29uc3QgRU5EX0FOQ0hPUiA9IGAoPzoke1NMQVNIX0xJVEVSQUx9fCQpYDtcbmNvbnN0IFNUQVJUX0FOQ0hPUiA9IGAoPzpefCR7U0xBU0hfTElURVJBTH0pYDtcbmNvbnN0IERPVFNfU0xBU0ggPSBgJHtET1RfTElURVJBTH17MSwyfSR7RU5EX0FOQ0hPUn1gO1xuY29uc3QgTk9fRE9UID0gYCg/ISR7RE9UX0xJVEVSQUx9KWA7XG5jb25zdCBOT19ET1RTID0gYCg/ISR7U1RBUlRfQU5DSE9SfSR7RE9UU19TTEFTSH0pYDtcbmNvbnN0IE5PX0RPVF9TTEFTSCA9IGAoPyEke0RPVF9MSVRFUkFMfXswLDF9JHtFTkRfQU5DSE9SfSlgO1xuY29uc3QgTk9fRE9UU19TTEFTSCA9IGAoPyEke0RPVFNfU0xBU0h9KWA7XG5jb25zdCBRTUFSS19OT19ET1QgPSBgW14uJHtTTEFTSF9MSVRFUkFMfV1gO1xuY29uc3QgU1RBUiA9IGAke1FNQVJLfSo/YDtcblxuY29uc3QgUE9TSVhfQ0hBUlMgPSB7XG4gIERPVF9MSVRFUkFMLFxuICBQTFVTX0xJVEVSQUwsXG4gIFFNQVJLX0xJVEVSQUwsXG4gIFNMQVNIX0xJVEVSQUwsXG4gIE9ORV9DSEFSLFxuICBRTUFSSyxcbiAgRU5EX0FOQ0hPUixcbiAgRE9UU19TTEFTSCxcbiAgTk9fRE9ULFxuICBOT19ET1RTLFxuICBOT19ET1RfU0xBU0gsXG4gIE5PX0RPVFNfU0xBU0gsXG4gIFFNQVJLX05PX0RPVCxcbiAgU1RBUixcbiAgU1RBUlRfQU5DSE9SXG59O1xuXG4vKipcbiAqIFdpbmRvd3MgZ2xvYiByZWdleFxuICovXG5cbmNvbnN0IFdJTkRPV1NfQ0hBUlMgPSB7XG4gIC4uLlBPU0lYX0NIQVJTLFxuXG4gIFNMQVNIX0xJVEVSQUw6IGBbJHtXSU5fU0xBU0h9XWAsXG4gIFFNQVJLOiBXSU5fTk9fU0xBU0gsXG4gIFNUQVI6IGAke1dJTl9OT19TTEFTSH0qP2AsXG4gIERPVFNfU0xBU0g6IGAke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JClgLFxuICBOT19ET1Q6IGAoPyEke0RPVF9MSVRFUkFMfSlgLFxuICBOT19ET1RTOiBgKD8hKD86XnxbJHtXSU5fU0xBU0h9XSkke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgTk9fRE9UX1NMQVNIOiBgKD8hJHtET1RfTElURVJBTH17MCwxfSg/Olske1dJTl9TTEFTSH1dfCQpKWAsXG4gIE5PX0RPVFNfU0xBU0g6IGAoPyEke0RPVF9MSVRFUkFMfXsxLDJ9KD86WyR7V0lOX1NMQVNIfV18JCkpYCxcbiAgUU1BUktfTk9fRE9UOiBgW14uJHtXSU5fU0xBU0h9XWAsXG4gIFNUQVJUX0FOQ0hPUjogYCg/Ol58WyR7V0lOX1NMQVNIfV0pYCxcbiAgRU5EX0FOQ0hPUjogYCg/Olske1dJTl9TTEFTSH1dfCQpYFxufTtcblxuLyoqXG4gKiBQT1NJWCBCcmFja2V0IFJlZ2V4XG4gKi9cblxuY29uc3QgUE9TSVhfUkVHRVhfU09VUkNFID0ge1xuICBhbG51bTogJ2EtekEtWjAtOScsXG4gIGFscGhhOiAnYS16QS1aJyxcbiAgYXNjaWk6ICdcXFxceDAwLVxcXFx4N0YnLFxuICBibGFuazogJyBcXFxcdCcsXG4gIGNudHJsOiAnXFxcXHgwMC1cXFxceDFGXFxcXHg3RicsXG4gIGRpZ2l0OiAnMC05JyxcbiAgZ3JhcGg6ICdcXFxceDIxLVxcXFx4N0UnLFxuICBsb3dlcjogJ2EteicsXG4gIHByaW50OiAnXFxcXHgyMC1cXFxceDdFICcsXG4gIHB1bmN0OiAnXFxcXC0hXCIjJCUmXFwnKClcXFxcKissLi86Ozw9Pj9AW1xcXFxdXl9ge3x9ficsXG4gIHNwYWNlOiAnIFxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGYnLFxuICB1cHBlcjogJ0EtWicsXG4gIHdvcmQ6ICdBLVphLXowLTlfJyxcbiAgeGRpZ2l0OiAnQS1GYS1mMC05J1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1BWF9MRU5HVEg6IDEwMjQgKiA2NCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuXG4gIC8vIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgUkVHRVhfQkFDS1NMQVNIOiAvXFxcXCg/IVsqKz9eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX05PTl9TUEVDSUFMX0NIQVJTOiAvXlteQCFbXFxdLiwkKis/Xnt9KCl8XFxcXC9dKy8sXG4gIFJFR0VYX1NQRUNJQUxfQ0hBUlM6IC9bLSorPy5eJHt9KHwpW1xcXV0vLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0JBQ0tSRUY6IC8oXFxcXD8pKChcXFcpKFxcMyopKS9nLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTDogLyhbLSorPy5eJHt9KHwpW1xcXV0pL2csXG4gIFJFR0VYX1JFTU9WRV9CQUNLU0xBU0g6IC8oPzpcXFsuKj9bXlxcXFxdXFxdfFxcXFwoPz0uKSkvZyxcblxuICAvLyBSZXBsYWNlIGdsb2JzIHdpdGggZXF1aXZhbGVudCBwYXR0ZXJucyB0byByZWR1Y2UgcGFyc2luZyB0aW1lLlxuICBSRVBMQUNFTUVOVFM6IHtcbiAgICAnKioqJzogJyonLFxuICAgICcqKi8qKic6ICcqKicsXG4gICAgJyoqLyoqLyoqJzogJyoqJ1xuICB9LFxuXG4gIC8vIERpZ2l0c1xuICBDSEFSXzA6IDQ4LCAvKiAwICovXG4gIENIQVJfOTogNTcsIC8qIDkgKi9cblxuICAvLyBBbHBoYWJldCBjaGFycy5cbiAgQ0hBUl9VUFBFUkNBU0VfQTogNjUsIC8qIEEgKi9cbiAgQ0hBUl9MT1dFUkNBU0VfQTogOTcsIC8qIGEgKi9cbiAgQ0hBUl9VUFBFUkNBU0VfWjogOTAsIC8qIFogKi9cbiAgQ0hBUl9MT1dFUkNBU0VfWjogMTIyLCAvKiB6ICovXG5cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOiA0MCwgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTOiA0MSwgLyogKSAqL1xuXG4gIENIQVJfQVNURVJJU0s6IDQyLCAvKiAqICovXG5cbiAgLy8gTm9uLWFscGhhYmV0aWMgY2hhcnMuXG4gIENIQVJfQU1QRVJTQU5EOiAzOCwgLyogJiAqL1xuICBDSEFSX0FUOiA2NCwgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNIOiA5MiwgLyogXFwgKi9cbiAgQ0hBUl9DQVJSSUFHRV9SRVRVUk46IDEzLCAvKiBcXHIgKi9cbiAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDogOTQsIC8qIF4gKi9cbiAgQ0hBUl9DT0xPTjogNTgsIC8qIDogKi9cbiAgQ0hBUl9DT01NQTogNDQsIC8qICwgKi9cbiAgQ0hBUl9ET1Q6IDQ2LCAvKiAuICovXG4gIENIQVJfRE9VQkxFX1FVT1RFOiAzNCwgLyogXCIgKi9cbiAgQ0hBUl9FUVVBTDogNjEsIC8qID0gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLOiAzMywgLyogISAqL1xuICBDSEFSX0ZPUk1fRkVFRDogMTIsIC8qIFxcZiAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0g6IDQ3LCAvKiAvICovXG4gIENIQVJfR1JBVkVfQUNDRU5UOiA5NiwgLyogYCAqL1xuICBDSEFSX0hBU0g6IDM1LCAvKiAjICovXG4gIENIQVJfSFlQSEVOX01JTlVTOiA0NSwgLyogLSAqL1xuICBDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDogNjAsIC8qIDwgKi9cbiAgQ0hBUl9MRUZUX0NVUkxZX0JSQUNFOiAxMjMsIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUOiA5MSwgLyogWyAqL1xuICBDSEFSX0xJTkVfRkVFRDogMTAsIC8qIFxcbiAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFOiAxNjAsIC8qIFxcdTAwQTAgKi9cbiAgQ0hBUl9QRVJDRU5UOiAzNywgLyogJSAqL1xuICBDSEFSX1BMVVM6IDQzLCAvKiArICovXG4gIENIQVJfUVVFU1RJT05fTUFSSzogNjMsIC8qID8gKi9cbiAgQ0hBUl9SSUdIVF9BTkdMRV9CUkFDS0VUOiA2MiwgLyogPiAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOiAxMjUsIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDogOTMsIC8qIF0gKi9cbiAgQ0hBUl9TRU1JQ09MT046IDU5LCAvKiA7ICovXG4gIENIQVJfU0lOR0xFX1FVT1RFOiAzOSwgLyogJyAqL1xuICBDSEFSX1NQQUNFOiAzMiwgLyogICAqL1xuICBDSEFSX1RBQjogOSwgLyogXFx0ICovXG4gIENIQVJfVU5ERVJTQ09SRTogOTUsIC8qIF8gKi9cbiAgQ0hBUl9WRVJUSUNBTF9MSU5FOiAxMjQsIC8qIHwgKi9cbiAgQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0U6IDY1Mjc5LCAvKiBcXHVGRUZGICovXG5cbiAgU0VQOiBwYXRoLnNlcCxcblxuICAvKipcbiAgICogQ3JlYXRlIEVYVEdMT0JfQ0hBUlNcbiAgICovXG5cbiAgZXh0Z2xvYkNoYXJzKGNoYXJzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICchJzogeyB0eXBlOiAnbmVnYXRlJywgb3BlbjogJyg/Oig/ISg/OicsIGNsb3NlOiBgKSkke2NoYXJzLlNUQVJ9KWAgfSxcbiAgICAgICc/JzogeyB0eXBlOiAncW1hcmsnLCBvcGVuOiAnKD86JywgY2xvc2U6ICcpPycgfSxcbiAgICAgICcrJzogeyB0eXBlOiAncGx1cycsIG9wZW46ICcoPzonLCBjbG9zZTogJykrJyB9LFxuICAgICAgJyonOiB7IHR5cGU6ICdzdGFyJywgb3BlbjogJyg/OicsIGNsb3NlOiAnKSonIH0sXG4gICAgICAnQCc6IHsgdHlwZTogJ2F0Jywgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBHTE9CX0NIQVJTXG4gICAqL1xuXG4gIGdsb2JDaGFycyh3aW4zMikge1xuICAgIHJldHVybiB3aW4zMiA9PT0gdHJ1ZSA/IFdJTkRPV1NfQ0hBUlMgOiBQT1NJWF9DSEFSUztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHdpbjMyID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJztcbmNvbnN0IHtcbiAgUkVHRVhfQkFDS1NMQVNILFxuICBSRUdFWF9SRU1PVkVfQkFDS1NMQVNILFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTLFxuICBSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmV4cG9ydHMuaXNPYmplY3QgPSB2YWwgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5leHBvcnRzLmhhc1JlZ2V4Q2hhcnMgPSBzdHIgPT4gUkVHRVhfU1BFQ0lBTF9DSEFSUy50ZXN0KHN0cik7XG5leHBvcnRzLmlzUmVnZXhDaGFyID0gc3RyID0+IHN0ci5sZW5ndGggPT09IDEgJiYgZXhwb3J0cy5oYXNSZWdleENoYXJzKHN0cik7XG5leHBvcnRzLmVzY2FwZVJlZ2V4ID0gc3RyID0+IHN0ci5yZXBsYWNlKFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMLCAnXFxcXCQxJyk7XG5leHBvcnRzLnRvUG9zaXhTbGFzaGVzID0gc3RyID0+IHN0ci5yZXBsYWNlKFJFR0VYX0JBQ0tTTEFTSCwgJy8nKTtcblxuZXhwb3J0cy5yZW1vdmVCYWNrc2xhc2hlcyA9IHN0ciA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZShSRUdFWF9SRU1PVkVfQkFDS1NMQVNILCBtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoID09PSAnXFxcXCcgPyAnJyA6IG1hdGNoO1xuICB9KTtcbn07XG5cbmV4cG9ydHMuc3VwcG9ydHNMb29rYmVoaW5kcyA9ICgpID0+IHtcbiAgY29uc3Qgc2VncyA9IHByb2Nlc3MudmVyc2lvbi5zbGljZSgxKS5zcGxpdCgnLicpLm1hcChOdW1iZXIpO1xuICBpZiAoc2Vncy5sZW5ndGggPT09IDMgJiYgc2Vnc1swXSA+PSA5IHx8IChzZWdzWzBdID09PSA4ICYmIHNlZ3NbMV0gPj0gMTApKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5pc1dpbmRvd3MgPSBvcHRpb25zID0+IHtcbiAgaWYgKG9wdGlvbnMgJiYgdHlwZW9mIG9wdGlvbnMud2luZG93cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMud2luZG93cztcbiAgfVxuICByZXR1cm4gd2luMzIgPT09IHRydWUgfHwgcGF0aC5zZXAgPT09ICdcXFxcJztcbn07XG5cbmV4cG9ydHMuZXNjYXBlTGFzdCA9IChpbnB1dCwgY2hhciwgbGFzdElkeCkgPT4ge1xuICBjb25zdCBpZHggPSBpbnB1dC5sYXN0SW5kZXhPZihjaGFyLCBsYXN0SWR4KTtcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBpbnB1dDtcbiAgaWYgKGlucHV0W2lkeCAtIDFdID09PSAnXFxcXCcpIHJldHVybiBleHBvcnRzLmVzY2FwZUxhc3QoaW5wdXQsIGNoYXIsIGlkeCAtIDEpO1xuICByZXR1cm4gYCR7aW5wdXQuc2xpY2UoMCwgaWR4KX1cXFxcJHtpbnB1dC5zbGljZShpZHgpfWA7XG59O1xuXG5leHBvcnRzLnJlbW92ZVByZWZpeCA9IChpbnB1dCwgc3RhdGUgPSB7fSkgPT4ge1xuICBsZXQgb3V0cHV0ID0gaW5wdXQ7XG4gIGlmIChvdXRwdXQuc3RhcnRzV2l0aCgnLi8nKSkge1xuICAgIG91dHB1dCA9IG91dHB1dC5zbGljZSgyKTtcbiAgICBzdGF0ZS5wcmVmaXggPSAnLi8nO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG5leHBvcnRzLndyYXBPdXRwdXQgPSAoaW5wdXQsIHN0YXRlID0ge30sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBwcmVwZW5kID0gb3B0aW9ucy5jb250YWlucyA/ICcnIDogJ14nO1xuICBjb25zdCBhcHBlbmQgPSBvcHRpb25zLmNvbnRhaW5zID8gJycgOiAnJCc7XG5cbiAgbGV0IG91dHB1dCA9IGAke3ByZXBlbmR9KD86JHtpbnB1dH0pJHthcHBlbmR9YDtcbiAgaWYgKHN0YXRlLm5lZ2F0ZWQgPT09IHRydWUpIHtcbiAgICBvdXRwdXQgPSBgKD86Xig/ISR7b3V0cHV0fSkuKiQpYDtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCB7XG4gIENIQVJfQVNURVJJU0ssICAgICAgICAgICAgIC8qICogKi9cbiAgQ0hBUl9BVCwgICAgICAgICAgICAgICAgICAgLyogQCAqL1xuICBDSEFSX0JBQ0tXQVJEX1NMQVNILCAgICAgICAvKiBcXCAqL1xuICBDSEFSX0NPTU1BLCAgICAgICAgICAgICAgICAvKiAsICovXG4gIENIQVJfRE9ULCAgICAgICAgICAgICAgICAgIC8qIC4gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLLCAgICAgLyogISAqL1xuICBDSEFSX0ZPUldBUkRfU0xBU0gsICAgICAgICAvKiAvICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgICAgIC8qIHsgKi9cbiAgQ0hBUl9MRUZUX1BBUkVOVEhFU0VTLCAgICAgLyogKCAqL1xuICBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQsICAvKiBbICovXG4gIENIQVJfUExVUywgICAgICAgICAgICAgICAgIC8qICsgKi9cbiAgQ0hBUl9RVUVTVElPTl9NQVJLLCAgICAgICAgLyogPyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAgICAvKiB9ICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVMsICAgIC8qICkgKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgLyogXSAqL1xufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbmNvbnN0IGlzUGF0aFNlcGFyYXRvciA9IGNvZGUgPT4ge1xuICByZXR1cm4gY29kZSA9PT0gQ0hBUl9GT1JXQVJEX1NMQVNIIHx8IGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0g7XG59O1xuXG5jb25zdCBkZXB0aCA9IHRva2VuID0+IHtcbiAgaWYgKHRva2VuLmlzUHJlZml4ICE9PSB0cnVlKSB7XG4gICAgdG9rZW4uZGVwdGggPSB0b2tlbi5pc0dsb2JzdGFyID8gSW5maW5pdHkgOiAxO1xuICB9XG59O1xuXG4vKipcbiAqIFF1aWNrbHkgc2NhbnMgYSBnbG9iIHBhdHRlcm4gYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBoYW5kZnVsIG9mXG4gKiB1c2VmdWwgcHJvcGVydGllcywgbGlrZSBgaXNHbG9iYCwgYHBhdGhgICh0aGUgbGVhZGluZyBub24tZ2xvYiwgaWYgaXQgZXhpc3RzKSxcbiAqIGBnbG9iYCAodGhlIGFjdHVhbCBwYXR0ZXJuKSwgYW5kIGBuZWdhdGVkYCAodHJ1ZSBpZiB0aGUgcGF0aCBzdGFydHMgd2l0aCBgIWApLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwbSA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogY29uc29sZS5sb2cocG0uc2NhbignZm9vL2Jhci8qLmpzJykpO1xuICogeyBpc0dsb2I6IHRydWUsIGlucHV0OiAnZm9vL2Jhci8qLmpzJywgYmFzZTogJ2Zvby9iYXInLCBnbG9iOiAnKi5qcycgfVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmBcbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0b2tlbnMgYW5kIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmNvbnN0IHNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gMTtcbiAgY29uc3Qgc2NhblRvRW5kID0gb3B0cy5wYXJ0cyA9PT0gdHJ1ZSB8fCBvcHRzLnNjYW5Ub0VuZCA9PT0gdHJ1ZTtcbiAgY29uc3Qgc2xhc2hlcyA9IFtdO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgY29uc3QgcGFydHMgPSBbXTtcblxuICBsZXQgc3RyID0gaW5wdXQ7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgc3RhcnQgPSAwO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGlzQnJhY2UgPSBmYWxzZTtcbiAgbGV0IGlzQnJhY2tldCA9IGZhbHNlO1xuICBsZXQgaXNHbG9iID0gZmFsc2U7XG4gIGxldCBpc0V4dGdsb2IgPSBmYWxzZTtcbiAgbGV0IGlzR2xvYnN0YXIgPSBmYWxzZTtcbiAgbGV0IGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICBsZXQgYmFja3NsYXNoZXMgPSBmYWxzZTtcbiAgbGV0IG5lZ2F0ZWQgPSBmYWxzZTtcbiAgbGV0IGZpbmlzaGVkID0gZmFsc2U7XG4gIGxldCBicmFjZXMgPSAwO1xuICBsZXQgcHJldjtcbiAgbGV0IGNvZGU7XG4gIGxldCB0b2tlbiA9IHsgdmFsdWU6ICcnLCBkZXB0aDogMCwgaXNHbG9iOiBmYWxzZSB9O1xuXG4gIGNvbnN0IGVvcyA9ICgpID0+IGluZGV4ID49IGxlbmd0aDtcbiAgY29uc3QgcGVlayA9ICgpID0+IHN0ci5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG4gIGNvbnN0IGFkdmFuY2UgPSAoKSA9PiB7XG4gICAgcHJldiA9IGNvZGU7XG4gICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KCsraW5kZXgpO1xuICB9O1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgbGV0IG5leHQ7XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICBjb2RlID0gYWR2YW5jZSgpO1xuXG4gICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgIGJyYWNlRXNjYXBlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoYnJhY2VFc2NhcGVkID09PSB0cnVlIHx8IGNvZGUgPT09IENIQVJfTEVGVF9DVVJMWV9CUkFDRSkge1xuICAgICAgYnJhY2VzKys7XG5cbiAgICAgIHdoaWxlIChlb3MoKSAhPT0gdHJ1ZSAmJiAoY29kZSA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICBiYWNrc2xhc2hlcyA9IHRva2VuLmJhY2tzbGFzaGVzID0gdHJ1ZTtcbiAgICAgICAgICBhZHZhbmNlKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICAgICAgYnJhY2VzKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJhY2VFc2NhcGVkICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfRE9UICYmIChjb2RlID0gYWR2YW5jZSgpKSA9PT0gQ0hBUl9ET1QpIHtcbiAgICAgICAgICBpc0JyYWNlID0gdG9rZW4uaXNCcmFjZSA9IHRydWU7XG4gICAgICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcbiAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChicmFjZUVzY2FwZWQgIT09IHRydWUgJiYgY29kZSA9PT0gQ0hBUl9DT01NQSkge1xuICAgICAgICAgIGlzQnJhY2UgPSB0b2tlbi5pc0JyYWNlID0gdHJ1ZTtcbiAgICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0UpIHtcbiAgICAgICAgICBicmFjZXMtLTtcblxuICAgICAgICAgIGlmIChicmFjZXMgPT09IDApIHtcbiAgICAgICAgICAgIGJyYWNlRXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaXNCcmFjZSA9IHRva2VuLmlzQnJhY2UgPSB0cnVlO1xuICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSBDSEFSX0ZPUldBUkRfU0xBU0gpIHtcbiAgICAgIHNsYXNoZXMucHVzaChpbmRleCk7XG4gICAgICB0b2tlbnMucHVzaCh0b2tlbik7XG4gICAgICB0b2tlbiA9IHsgdmFsdWU6ICcnLCBkZXB0aDogMCwgaXNHbG9iOiBmYWxzZSB9O1xuXG4gICAgICBpZiAoZmluaXNoZWQgPT09IHRydWUpIGNvbnRpbnVlO1xuICAgICAgaWYgKHByZXYgPT09IENIQVJfRE9UICYmIGluZGV4ID09PSAoc3RhcnQgKyAxKSkge1xuICAgICAgICBzdGFydCArPSAyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGFzdEluZGV4ID0gaW5kZXggKyAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMubm9leHQgIT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGlzRXh0Z2xvYkNoYXIgPSBjb2RlID09PSBDSEFSX1BMVVNcbiAgICAgICAgfHwgY29kZSA9PT0gQ0hBUl9BVFxuICAgICAgICB8fCBjb2RlID09PSBDSEFSX0FTVEVSSVNLXG4gICAgICAgIHx8IGNvZGUgPT09IENIQVJfUVVFU1RJT05fTUFSS1xuICAgICAgICB8fCBjb2RlID09PSBDSEFSX0VYQ0xBTUFUSU9OX01BUks7XG5cbiAgICAgIGlmIChpc0V4dGdsb2JDaGFyID09PSB0cnVlICYmIHBlZWsoKSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICAgIGlzRXh0Z2xvYiA9IHRva2VuLmlzRXh0Z2xvYiA9IHRydWU7XG4gICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgICAgd2hpbGUgKGVvcygpICE9PSB0cnVlICYmIChjb2RlID0gYWR2YW5jZSgpKSkge1xuICAgICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfQkFDS1dBUkRfU0xBU0gpIHtcbiAgICAgICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgICAgIGNvZGUgPSBhZHZhbmNlKCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kZSA9PT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9BU1RFUklTSykge1xuICAgICAgaWYgKHByZXYgPT09IENIQVJfQVNURVJJU0spIGlzR2xvYnN0YXIgPSB0b2tlbi5pc0dsb2JzdGFyID0gdHJ1ZTtcbiAgICAgIGlzR2xvYiA9IHRva2VuLmlzR2xvYiA9IHRydWU7XG4gICAgICBmaW5pc2hlZCA9IHRydWU7XG5cbiAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gQ0hBUl9RVUVTVElPTl9NQVJLKSB7XG4gICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgZmluaXNoZWQgPSB0cnVlO1xuXG4gICAgICBpZiAoc2NhblRvRW5kID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgd2hpbGUgKGVvcygpICE9PSB0cnVlICYmIChuZXh0ID0gYWR2YW5jZSgpKSkge1xuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9CQUNLV0FSRF9TTEFTSCkge1xuICAgICAgICAgIGJhY2tzbGFzaGVzID0gdG9rZW4uYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICAgIGFkdmFuY2UoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgaXNCcmFja2V0ID0gdG9rZW4uaXNCcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICBpc0dsb2IgPSB0b2tlbi5pc0dsb2IgPSB0cnVlO1xuICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChzY2FuVG9FbmQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRzLm5vbmVnYXRlICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfRVhDTEFNQVRJT05fTUFSSyAmJiBpbmRleCA9PT0gc3RhcnQpIHtcbiAgICAgIG5lZ2F0ZWQgPSB0b2tlbi5uZWdhdGVkID0gdHJ1ZTtcbiAgICAgIHN0YXJ0Kys7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5ub3BhcmVuICE9PSB0cnVlICYmIGNvZGUgPT09IENIQVJfTEVGVF9QQVJFTlRIRVNFUykge1xuICAgICAgaXNHbG9iID0gdG9rZW4uaXNHbG9iID0gdHJ1ZTtcblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICB3aGlsZSAoZW9zKCkgIT09IHRydWUgJiYgKGNvZGUgPSBhZHZhbmNlKCkpKSB7XG4gICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfTEVGVF9QQVJFTlRIRVNFUykge1xuICAgICAgICAgICAgYmFja3NsYXNoZXMgPSB0b2tlbi5iYWNrc2xhc2hlcyA9IHRydWU7XG4gICAgICAgICAgICBjb2RlID0gYWR2YW5jZSgpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvZGUgPT09IENIQVJfUklHSFRfUEFSRU5USEVTRVMpIHtcbiAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChpc0dsb2IgPT09IHRydWUpIHtcbiAgICAgIGZpbmlzaGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHNjYW5Ub0VuZCA9PT0gdHJ1ZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMubm9leHQgPT09IHRydWUpIHtcbiAgICBpc0V4dGdsb2IgPSBmYWxzZTtcbiAgICBpc0dsb2IgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBiYXNlID0gc3RyO1xuICBsZXQgcHJlZml4ID0gJyc7XG4gIGxldCBnbG9iID0gJyc7XG5cbiAgaWYgKHN0YXJ0ID4gMCkge1xuICAgIHByZWZpeCA9IHN0ci5zbGljZSgwLCBzdGFydCk7XG4gICAgc3RyID0gc3RyLnNsaWNlKHN0YXJ0KTtcbiAgICBsYXN0SW5kZXggLT0gc3RhcnQ7XG4gIH1cblxuICBpZiAoYmFzZSAmJiBpc0dsb2IgPT09IHRydWUgJiYgbGFzdEluZGV4ID4gMCkge1xuICAgIGJhc2UgPSBzdHIuc2xpY2UoMCwgbGFzdEluZGV4KTtcbiAgICBnbG9iID0gc3RyLnNsaWNlKGxhc3RJbmRleCk7XG4gIH0gZWxzZSBpZiAoaXNHbG9iID09PSB0cnVlKSB7XG4gICAgYmFzZSA9ICcnO1xuICAgIGdsb2IgPSBzdHI7XG4gIH0gZWxzZSB7XG4gICAgYmFzZSA9IHN0cjtcbiAgfVxuXG4gIGlmIChiYXNlICYmIGJhc2UgIT09ICcnICYmIGJhc2UgIT09ICcvJyAmJiBiYXNlICE9PSBzdHIpIHtcbiAgICBpZiAoaXNQYXRoU2VwYXJhdG9yKGJhc2UuY2hhckNvZGVBdChiYXNlLmxlbmd0aCAtIDEpKSkge1xuICAgICAgYmFzZSA9IGJhc2Uuc2xpY2UoMCwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLnVuZXNjYXBlID09PSB0cnVlKSB7XG4gICAgaWYgKGdsb2IpIGdsb2IgPSB1dGlscy5yZW1vdmVCYWNrc2xhc2hlcyhnbG9iKTtcblxuICAgIGlmIChiYXNlICYmIGJhY2tzbGFzaGVzID09PSB0cnVlKSB7XG4gICAgICBiYXNlID0gdXRpbHMucmVtb3ZlQmFja3NsYXNoZXMoYmFzZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgcHJlZml4LFxuICAgIGlucHV0LFxuICAgIHN0YXJ0LFxuICAgIGJhc2UsXG4gICAgZ2xvYixcbiAgICBpc0JyYWNlLFxuICAgIGlzQnJhY2tldCxcbiAgICBpc0dsb2IsXG4gICAgaXNFeHRnbG9iLFxuICAgIGlzR2xvYnN0YXIsXG4gICAgbmVnYXRlZFxuICB9O1xuXG4gIGlmIChvcHRzLnRva2VucyA9PT0gdHJ1ZSkge1xuICAgIHN0YXRlLm1heERlcHRoID0gMDtcbiAgICBpZiAoIWlzUGF0aFNlcGFyYXRvcihjb2RlKSkge1xuICAgICAgdG9rZW5zLnB1c2godG9rZW4pO1xuICAgIH1cbiAgICBzdGF0ZS50b2tlbnMgPSB0b2tlbnM7XG4gIH1cblxuICBpZiAob3B0cy5wYXJ0cyA9PT0gdHJ1ZSB8fCBvcHRzLnRva2VucyA9PT0gdHJ1ZSkge1xuICAgIGxldCBwcmV2SW5kZXg7XG5cbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBzbGFzaGVzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgIGNvbnN0IG4gPSBwcmV2SW5kZXggPyBwcmV2SW5kZXggKyAxIDogc3RhcnQ7XG4gICAgICBjb25zdCBpID0gc2xhc2hlc1tpZHhdO1xuICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC5zbGljZShuLCBpKTtcbiAgICAgIGlmIChvcHRzLnRva2Vucykge1xuICAgICAgICBpZiAoaWR4ID09PSAwICYmIHN0YXJ0ICE9PSAwKSB7XG4gICAgICAgICAgdG9rZW5zW2lkeF0uaXNQcmVmaXggPSB0cnVlO1xuICAgICAgICAgIHRva2Vuc1tpZHhdLnZhbHVlID0gcHJlZml4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRva2Vuc1tpZHhdLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZGVwdGgodG9rZW5zW2lkeF0pO1xuICAgICAgICBzdGF0ZS5tYXhEZXB0aCArPSB0b2tlbnNbaWR4XS5kZXB0aDtcbiAgICAgIH1cbiAgICAgIGlmIChpZHggIT09IDAgfHwgdmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHBhcnRzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgICAgcHJldkluZGV4ID0gaTtcbiAgICB9XG5cbiAgICBpZiAocHJldkluZGV4ICYmIHByZXZJbmRleCArIDEgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXQuc2xpY2UocHJldkluZGV4ICsgMSk7XG4gICAgICBwYXJ0cy5wdXNoKHZhbHVlKTtcblxuICAgICAgaWYgKG9wdHMudG9rZW5zKSB7XG4gICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgZGVwdGgodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSk7XG4gICAgICAgIHN0YXRlLm1heERlcHRoICs9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0uZGVwdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGUuc2xhc2hlcyA9IHNsYXNoZXM7XG4gICAgc3RhdGUucGFydHMgPSBwYXJ0cztcbiAgfVxuXG4gIHJldHVybiBzdGF0ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gc2NhbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IHtcbiAgTUFYX0xFTkdUSCxcbiAgUE9TSVhfUkVHRVhfU09VUkNFLFxuICBSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUyxcbiAgUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGLFxuICBSRVBMQUNFTUVOVFNcbn0gPSBjb25zdGFudHM7XG5cbi8qKlxuICogSGVscGVyc1xuICovXG5cbmNvbnN0IGV4cGFuZFJhbmdlID0gKGFyZ3MsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLmV4cGFuZFJhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZXhwYW5kUmFuZ2UoLi4uYXJncywgb3B0aW9ucyk7XG4gIH1cblxuICBhcmdzLnNvcnQoKTtcbiAgY29uc3QgdmFsdWUgPSBgWyR7YXJncy5qb2luKCctJyl9XWA7XG5cbiAgdHJ5IHtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3ICovXG4gICAgbmV3IFJlZ0V4cCh2YWx1ZSk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGFyZ3MubWFwKHYgPT4gdXRpbHMuZXNjYXBlUmVnZXgodikpLmpvaW4oJy4uJyk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgbWVzc2FnZSBmb3IgYSBzeW50YXggZXJyb3JcbiAqL1xuXG5jb25zdCBzeW50YXhFcnJvciA9ICh0eXBlLCBjaGFyKSA9PiB7XG4gIHJldHVybiBgTWlzc2luZyAke3R5cGV9OiBcIiR7Y2hhcn1cIiAtIHVzZSBcIlxcXFxcXFxcJHtjaGFyfVwiIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc2A7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBpbnB1dCBzdHJpbmcuXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuY29uc3QgcGFyc2UgPSAoaW5wdXQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG5cbiAgaW5wdXQgPSBSRVBMQUNFTUVOVFNbaW5wdXRdIHx8IGlucHV0O1xuXG4gIGNvbnN0IG9wdHMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgY29uc3QgbWF4ID0gdHlwZW9mIG9wdHMubWF4TGVuZ3RoID09PSAnbnVtYmVyJyA/IE1hdGgubWluKE1BWF9MRU5HVEgsIG9wdHMubWF4TGVuZ3RoKSA6IE1BWF9MRU5HVEg7XG5cbiAgbGV0IGxlbiA9IGlucHV0Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IG1heCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoOiAke2xlbn0sIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGxlbmd0aDogJHttYXh9YCk7XG4gIH1cblxuICBjb25zdCBib3MgPSB7IHR5cGU6ICdib3MnLCB2YWx1ZTogJycsIG91dHB1dDogb3B0cy5wcmVwZW5kIHx8ICcnIH07XG4gIGNvbnN0IHRva2VucyA9IFtib3NdO1xuXG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRzLmNhcHR1cmUgPyAnJyA6ICc/Oic7XG4gIGNvbnN0IHdpbjMyID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuXG4gIC8vIGNyZWF0ZSBjb25zdGFudHMgYmFzZWQgb24gcGxhdGZvcm0sIGZvciB3aW5kb3dzIG9yIHBvc2l4XG4gIGNvbnN0IFBMQVRGT1JNX0NIQVJTID0gY29uc3RhbnRzLmdsb2JDaGFycyh3aW4zMik7XG4gIGNvbnN0IEVYVEdMT0JfQ0hBUlMgPSBjb25zdGFudHMuZXh0Z2xvYkNoYXJzKFBMQVRGT1JNX0NIQVJTKTtcblxuICBjb25zdCB7XG4gICAgRE9UX0xJVEVSQUwsXG4gICAgUExVU19MSVRFUkFMLFxuICAgIFNMQVNIX0xJVEVSQUwsXG4gICAgT05FX0NIQVIsXG4gICAgRE9UU19TTEFTSCxcbiAgICBOT19ET1QsXG4gICAgTk9fRE9UX1NMQVNILFxuICAgIE5PX0RPVFNfU0xBU0gsXG4gICAgUU1BUkssXG4gICAgUU1BUktfTk9fRE9ULFxuICAgIFNUQVIsXG4gICAgU1RBUlRfQU5DSE9SXG4gIH0gPSBQTEFURk9STV9DSEFSUztcblxuICBjb25zdCBnbG9ic3RhciA9IChvcHRzKSA9PiB7XG4gICAgcmV0dXJuIGAoJHtjYXB0dXJlfSg/Oig/ISR7U1RBUlRfQU5DSE9SfSR7b3B0cy5kb3QgPyBET1RTX1NMQVNIIDogRE9UX0xJVEVSQUx9KS4pKj8pYDtcbiAgfTtcblxuICBjb25zdCBub2RvdCA9IG9wdHMuZG90ID8gJycgOiBOT19ET1Q7XG4gIGNvbnN0IHFtYXJrTm9Eb3QgPSBvcHRzLmRvdCA/IFFNQVJLIDogUU1BUktfTk9fRE9UO1xuICBsZXQgc3RhciA9IG9wdHMuYmFzaCA9PT0gdHJ1ZSA/IGdsb2JzdGFyKG9wdHMpIDogU1RBUjtcblxuICBpZiAob3B0cy5jYXB0dXJlKSB7XG4gICAgc3RhciA9IGAoJHtzdGFyfSlgO1xuICB9XG5cbiAgLy8gbWluaW1hdGNoIG9wdGlvbnMgc3VwcG9ydFxuICBpZiAodHlwZW9mIG9wdHMubm9leHQgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMubm9leHRnbG9iID0gb3B0cy5ub2V4dDtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIGlucHV0LFxuICAgIGluZGV4OiAtMSxcbiAgICBzdGFydDogMCxcbiAgICBkb3Q6IG9wdHMuZG90ID09PSB0cnVlLFxuICAgIGNvbnN1bWVkOiAnJyxcbiAgICBvdXRwdXQ6ICcnLFxuICAgIHByZWZpeDogJycsXG4gICAgYmFja3RyYWNrOiBmYWxzZSxcbiAgICBuZWdhdGVkOiBmYWxzZSxcbiAgICBicmFja2V0czogMCxcbiAgICBicmFjZXM6IDAsXG4gICAgcGFyZW5zOiAwLFxuICAgIHF1b3RlczogMCxcbiAgICBnbG9ic3RhcjogZmFsc2UsXG4gICAgdG9rZW5zXG4gIH07XG5cbiAgaW5wdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGVuID0gaW5wdXQubGVuZ3RoO1xuXG4gIGNvbnN0IGV4dGdsb2JzID0gW107XG4gIGNvbnN0IGJyYWNlcyA9IFtdO1xuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgcHJldiA9IGJvcztcbiAgbGV0IHZhbHVlO1xuXG4gIC8qKlxuICAgKiBUb2tlbml6aW5nIGhlbHBlcnNcbiAgICovXG5cbiAgY29uc3QgZW9zID0gKCkgPT4gc3RhdGUuaW5kZXggPT09IGxlbiAtIDE7XG4gIGNvbnN0IHBlZWsgPSBzdGF0ZS5wZWVrID0gKG4gPSAxKSA9PiBpbnB1dFtzdGF0ZS5pbmRleCArIG5dO1xuICBjb25zdCBhZHZhbmNlID0gc3RhdGUuYWR2YW5jZSA9ICgpID0+IGlucHV0Wysrc3RhdGUuaW5kZXhdO1xuICBjb25zdCByZW1haW5pbmcgPSAoKSA9PiBpbnB1dC5zbGljZShzdGF0ZS5pbmRleCArIDEpO1xuICBjb25zdCBjb25zdW1lID0gKHZhbHVlID0gJycsIG51bSA9IDApID0+IHtcbiAgICBzdGF0ZS5jb25zdW1lZCArPSB2YWx1ZTtcbiAgICBzdGF0ZS5pbmRleCArPSBudW07XG4gIH07XG4gIGNvbnN0IGFwcGVuZCA9IHRva2VuID0+IHtcbiAgICBzdGF0ZS5vdXRwdXQgKz0gdG9rZW4ub3V0cHV0ICE9IG51bGwgPyB0b2tlbi5vdXRwdXQgOiB0b2tlbi52YWx1ZTtcbiAgICBjb25zdW1lKHRva2VuLnZhbHVlKTtcbiAgfTtcblxuICBjb25zdCBuZWdhdGUgPSAoKSA9PiB7XG4gICAgbGV0IGNvdW50ID0gMTtcblxuICAgIHdoaWxlIChwZWVrKCkgPT09ICchJyAmJiAocGVlaygyKSAhPT0gJygnIHx8IHBlZWsoMykgPT09ICc/JykpIHtcbiAgICAgIGFkdmFuY2UoKTtcbiAgICAgIHN0YXRlLnN0YXJ0Kys7XG4gICAgICBjb3VudCsrO1xuICAgIH1cblxuICAgIGlmIChjb3VudCAlIDIgPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0ZS5uZWdhdGVkID0gdHJ1ZTtcbiAgICBzdGF0ZS5zdGFydCsrO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGluY3JlbWVudCA9IHR5cGUgPT4ge1xuICAgIHN0YXRlW3R5cGVdKys7XG4gICAgc3RhY2sucHVzaCh0eXBlKTtcbiAgfTtcblxuICBjb25zdCBkZWNyZW1lbnQgPSB0eXBlID0+IHtcbiAgICBzdGF0ZVt0eXBlXS0tO1xuICAgIHN0YWNrLnBvcCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQdXNoIHRva2VucyBvbnRvIHRoZSB0b2tlbnMgYXJyYXkuIFRoaXMgaGVscGVyIHNwZWVkcyB1cFxuICAgKiB0b2tlbml6aW5nIGJ5IDEpIGhlbHBpbmcgdXMgYXZvaWQgYmFja3RyYWNraW5nIGFzIG11Y2ggYXMgcG9zc2libGUsXG4gICAqIGFuZCAyKSBoZWxwaW5nIHVzIGF2b2lkIGNyZWF0aW5nIGV4dHJhIHRva2VucyB3aGVuIGNvbnNlY3V0aXZlXG4gICAqIGNoYXJhY3RlcnMgYXJlIHBsYWluIHRleHQuIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UgYW5kIHNpbXBsaWZpZXNcbiAgICogbG9va2JlaGluZHMuXG4gICAqL1xuXG4gIGNvbnN0IHB1c2ggPSB0b2sgPT4ge1xuICAgIGlmIChwcmV2LnR5cGUgPT09ICdnbG9ic3RhcicpIHtcbiAgICAgIGNvbnN0IGlzQnJhY2UgPSBzdGF0ZS5icmFjZXMgPiAwICYmICh0b2sudHlwZSA9PT0gJ2NvbW1hJyB8fCB0b2sudHlwZSA9PT0gJ2JyYWNlJyk7XG4gICAgICBjb25zdCBpc0V4dGdsb2IgPSB0b2suZXh0Z2xvYiA9PT0gdHJ1ZSB8fCAoZXh0Z2xvYnMubGVuZ3RoICYmICh0b2sudHlwZSA9PT0gJ3BpcGUnIHx8IHRvay50eXBlID09PSAncGFyZW4nKSk7XG5cbiAgICAgIGlmICh0b2sudHlwZSAhPT0gJ3NsYXNoJyAmJiB0b2sudHlwZSAhPT0gJ3BhcmVuJyAmJiAhaXNCcmFjZSAmJiAhaXNFeHRnbG9iKSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi5vdXRwdXQubGVuZ3RoKTtcbiAgICAgICAgcHJldi50eXBlID0gJ3N0YXInO1xuICAgICAgICBwcmV2LnZhbHVlID0gJyonO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IHN0YXI7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBwcmV2Lm91dHB1dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXh0Z2xvYnMubGVuZ3RoICYmIHRvay50eXBlICE9PSAncGFyZW4nICYmICFFWFRHTE9CX0NIQVJTW3Rvay52YWx1ZV0pIHtcbiAgICAgIGV4dGdsb2JzW2V4dGdsb2JzLmxlbmd0aCAtIDFdLmlubmVyICs9IHRvay52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodG9rLnZhbHVlIHx8IHRvay5vdXRwdXQpIGFwcGVuZCh0b2spO1xuICAgIGlmIChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ3RleHQnICYmIHRvay50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gdG9rLnZhbHVlO1xuICAgICAgcHJldi5vdXRwdXQgPSAocHJldi5vdXRwdXQgfHwgJycpICsgdG9rLnZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRvay5wcmV2ID0gcHJldjtcbiAgICB0b2tlbnMucHVzaCh0b2spO1xuICAgIHByZXYgPSB0b2s7XG4gIH07XG5cbiAgY29uc3QgZXh0Z2xvYk9wZW4gPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IHsgLi4uRVhUR0xPQl9DSEFSU1t2YWx1ZV0sIGNvbmRpdGlvbnM6IDEsIGlubmVyOiAnJyB9O1xuXG4gICAgdG9rZW4ucHJldiA9IHByZXY7XG4gICAgdG9rZW4ucGFyZW5zID0gc3RhdGUucGFyZW5zO1xuICAgIHRva2VuLm91dHB1dCA9IHN0YXRlLm91dHB1dDtcbiAgICBjb25zdCBvdXRwdXQgPSAob3B0cy5jYXB0dXJlID8gJygnIDogJycpICsgdG9rZW4ub3BlbjtcblxuICAgIGluY3JlbWVudCgncGFyZW5zJyk7XG4gICAgcHVzaCh7IHR5cGUsIHZhbHVlLCBvdXRwdXQ6IHN0YXRlLm91dHB1dCA/ICcnIDogT05FX0NIQVIgfSk7XG4gICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIGV4dGdsb2I6IHRydWUsIHZhbHVlOiBhZHZhbmNlKCksIG91dHB1dCB9KTtcbiAgICBleHRnbG9icy5wdXNoKHRva2VuKTtcbiAgfTtcblxuICBjb25zdCBleHRnbG9iQ2xvc2UgPSB0b2tlbiA9PiB7XG4gICAgbGV0IG91dHB1dCA9IHRva2VuLmNsb3NlICsgKG9wdHMuY2FwdHVyZSA/ICcpJyA6ICcnKTtcblxuICAgIGlmICh0b2tlbi50eXBlID09PSAnbmVnYXRlJykge1xuICAgICAgbGV0IGV4dGdsb2JTdGFyID0gc3RhcjtcblxuICAgICAgaWYgKHRva2VuLmlubmVyICYmIHRva2VuLmlubmVyLmxlbmd0aCA+IDEgJiYgdG9rZW4uaW5uZXIuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRnbG9iU3RhciA9IGdsb2JzdGFyKG9wdHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXh0Z2xvYlN0YXIgIT09IHN0YXIgfHwgZW9zKCkgfHwgL15cXCkrJC8udGVzdChyZW1haW5pbmcoKSkpIHtcbiAgICAgICAgb3V0cHV0ID0gdG9rZW4uY2xvc2UgPSBgKSQpKSR7ZXh0Z2xvYlN0YXJ9YDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLnByZXYudHlwZSA9PT0gJ2JvcycgJiYgZW9zKCkpIHtcbiAgICAgICAgc3RhdGUubmVnYXRlZEV4dGdsb2IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goeyB0eXBlOiAncGFyZW4nLCBleHRnbG9iOiB0cnVlLCB2YWx1ZSwgb3V0cHV0IH0pO1xuICAgIGRlY3JlbWVudCgncGFyZW5zJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZhc3QgcGF0aHNcbiAgICovXG5cbiAgaWYgKG9wdHMuZmFzdHBhdGhzICE9PSBmYWxzZSAmJiAhLyheWyohXXxbLygpW1xcXXt9XCJdKS8udGVzdChpbnB1dCkpIHtcbiAgICBsZXQgYmFja3NsYXNoZXMgPSBmYWxzZTtcblxuICAgIGxldCBvdXRwdXQgPSBpbnB1dC5yZXBsYWNlKFJFR0VYX1NQRUNJQUxfQ0hBUlNfQkFDS1JFRiwgKG0sIGVzYywgY2hhcnMsIGZpcnN0LCByZXN0LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGZpcnN0ID09PSAnXFxcXCcpIHtcbiAgICAgICAgYmFja3NsYXNoZXMgPSB0cnVlO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0ID09PSAnPycpIHtcbiAgICAgICAgaWYgKGVzYykge1xuICAgICAgICAgIHJldHVybiBlc2MgKyBmaXJzdCArIChyZXN0ID8gUU1BUksucmVwZWF0KHJlc3QubGVuZ3RoKSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gcW1hcmtOb0RvdCArIChyZXN0ID8gUU1BUksucmVwZWF0KHJlc3QubGVuZ3RoKSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUU1BUksucmVwZWF0KGNoYXJzLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCA9PT0gJy4nKSB7XG4gICAgICAgIHJldHVybiBET1RfTElURVJBTC5yZXBlYXQoY2hhcnMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0ID09PSAnKicpIHtcbiAgICAgICAgaWYgKGVzYykge1xuICAgICAgICAgIHJldHVybiBlc2MgKyBmaXJzdCArIChyZXN0ID8gc3RhciA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlc2MgPyBtIDogYFxcXFwke219YDtcbiAgICB9KTtcblxuICAgIGlmIChiYWNrc2xhc2hlcyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKG9wdHMudW5lc2NhcGUgPT09IHRydWUpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LnJlcGxhY2UoL1xcXFwrL2csIG0gPT4ge1xuICAgICAgICAgIHJldHVybiBtLmxlbmd0aCAlIDIgPT09IDAgPyAnXFxcXFxcXFwnIDogKG0gPyAnXFxcXCcgOiAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvdXRwdXQgPT09IGlucHV0ICYmIG9wdHMuY29udGFpbnMgPT09IHRydWUpIHtcbiAgICAgIHN0YXRlLm91dHB1dCA9IGlucHV0O1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cblxuICAgIHN0YXRlLm91dHB1dCA9IHV0aWxzLndyYXBPdXRwdXQob3V0cHV0LCBzdGF0ZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRva2VuaXplIGlucHV0IHVudGlsIHdlIHJlYWNoIGVuZC1vZi1zdHJpbmdcbiAgICovXG5cbiAgd2hpbGUgKCFlb3MoKSkge1xuICAgIHZhbHVlID0gYWR2YW5jZSgpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnXFx1MDAwMCcpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZWQgY2hhcmFjdGVyc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnXFxcXCcpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBwZWVrKCk7XG5cbiAgICAgIGlmIChuZXh0ID09PSAnLycgJiYgb3B0cy5iYXNoICE9PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dCA9PT0gJy4nIHx8IG5leHQgPT09ICc7Jykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFuZXh0KSB7XG4gICAgICAgIHZhbHVlICs9ICdcXFxcJztcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBjb2xsYXBzZSBzbGFzaGVzIHRvIHJlZHVjZSBwb3RlbnRpYWwgZm9yIGV4cGxvaXRzXG4gICAgICBjb25zdCBtYXRjaCA9IC9eXFxcXCsvLmV4ZWMocmVtYWluaW5nKCkpO1xuICAgICAgbGV0IHNsYXNoZXMgPSAwO1xuXG4gICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMF0ubGVuZ3RoID4gMikge1xuICAgICAgICBzbGFzaGVzID0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICBzdGF0ZS5pbmRleCArPSBzbGFzaGVzO1xuICAgICAgICBpZiAoc2xhc2hlcyAlIDIgIT09IDApIHtcbiAgICAgICAgICB2YWx1ZSArPSAnXFxcXCc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdHMudW5lc2NhcGUgPT09IHRydWUpIHtcbiAgICAgICAgdmFsdWUgPSBhZHZhbmNlKCkgfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSArPSBhZHZhbmNlKCkgfHwgJyc7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5icmFja2V0cyA9PT0gMCkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgd2UncmUgaW5zaWRlIGEgcmVnZXggY2hhcmFjdGVyIGNsYXNzLCBjb250aW51ZVxuICAgICAqIHVudGlsIHdlIHJlYWNoIHRoZSBjbG9zaW5nIGJyYWNrZXQuXG4gICAgICovXG5cbiAgICBpZiAoc3RhdGUuYnJhY2tldHMgPiAwICYmICh2YWx1ZSAhPT0gJ10nIHx8IHByZXYudmFsdWUgPT09ICdbJyB8fCBwcmV2LnZhbHVlID09PSAnW14nKSkge1xuICAgICAgaWYgKG9wdHMucG9zaXggIT09IGZhbHNlICYmIHZhbHVlID09PSAnOicpIHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBwcmV2LnZhbHVlLnNsaWNlKDEpO1xuICAgICAgICBpZiAoaW5uZXIuaW5jbHVkZXMoJ1snKSkge1xuICAgICAgICAgIHByZXYucG9zaXggPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKGlubmVyLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IHByZXYudmFsdWUubGFzdEluZGV4T2YoJ1snKTtcbiAgICAgICAgICAgIGNvbnN0IHByZSA9IHByZXYudmFsdWUuc2xpY2UoMCwgaWR4KTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3QgPSBwcmV2LnZhbHVlLnNsaWNlKGlkeCArIDIpO1xuICAgICAgICAgICAgY29uc3QgcG9zaXggPSBQT1NJWF9SRUdFWF9TT1VSQ0VbcmVzdF07XG4gICAgICAgICAgICBpZiAocG9zaXgpIHtcbiAgICAgICAgICAgICAgcHJldi52YWx1ZSA9IHByZSArIHBvc2l4O1xuICAgICAgICAgICAgICBzdGF0ZS5iYWNrdHJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgICBhZHZhbmNlKCk7XG5cbiAgICAgICAgICAgICAgaWYgKCFib3Mub3V0cHV0ICYmIHRva2Vucy5pbmRleE9mKHByZXYpID09PSAxKSB7XG4gICAgICAgICAgICAgICAgYm9zLm91dHB1dCA9IE9ORV9DSEFSO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoKHZhbHVlID09PSAnWycgJiYgcGVlaygpICE9PSAnOicpIHx8ICh2YWx1ZSA9PT0gJy0nICYmIHBlZWsoKSA9PT0gJ10nKSkge1xuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPT09ICddJyAmJiAocHJldi52YWx1ZSA9PT0gJ1snIHx8IHByZXYudmFsdWUgPT09ICdbXicpKSB7XG4gICAgICAgIHZhbHVlID0gYFxcXFwke3ZhbHVlfWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLnBvc2l4ID09PSB0cnVlICYmIHZhbHVlID09PSAnIScgJiYgcHJldi52YWx1ZSA9PT0gJ1snKSB7XG4gICAgICAgIHZhbHVlID0gJ14nO1xuICAgICAgfVxuXG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgYXBwZW5kKHsgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJZiB3ZSdyZSBpbnNpZGUgYSBxdW90ZWQgc3RyaW5nLCBjb250aW51ZVxuICAgICAqIHVudGlsIHdlIHJlYWNoIHRoZSBjbG9zaW5nIGRvdWJsZSBxdW90ZS5cbiAgICAgKi9cblxuICAgIGlmIChzdGF0ZS5xdW90ZXMgPT09IDEgJiYgdmFsdWUgIT09ICdcIicpIHtcbiAgICAgIHZhbHVlID0gdXRpbHMuZXNjYXBlUmVnZXgodmFsdWUpO1xuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgIGFwcGVuZCh7IHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG91YmxlIHF1b3Rlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnXCInKSB7XG4gICAgICBzdGF0ZS5xdW90ZXMgPSBzdGF0ZS5xdW90ZXMgPT09IDEgPyAwIDogMTtcbiAgICAgIGlmIChvcHRzLmtlZXBRdW90ZXMgPT09IHRydWUpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJlbnRoZXNlc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnKCcpIHtcbiAgICAgIGluY3JlbWVudCgncGFyZW5zJyk7XG4gICAgICBwdXNoKHsgdHlwZTogJ3BhcmVuJywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICcpJykge1xuICAgICAgaWYgKHN0YXRlLnBhcmVucyA9PT0gMCAmJiBvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcignb3BlbmluZycsICcoJykpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleHRnbG9iID0gZXh0Z2xvYnNbZXh0Z2xvYnMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoZXh0Z2xvYiAmJiBzdGF0ZS5wYXJlbnMgPT09IGV4dGdsb2IucGFyZW5zICsgMSkge1xuICAgICAgICBleHRnbG9iQ2xvc2UoZXh0Z2xvYnMucG9wKCkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdwYXJlbicsIHZhbHVlLCBvdXRwdXQ6IHN0YXRlLnBhcmVucyA/ICcpJyA6ICdcXFxcKScgfSk7XG4gICAgICBkZWNyZW1lbnQoJ3BhcmVucycpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3F1YXJlIGJyYWNrZXRzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICdbJykge1xuICAgICAgaWYgKG9wdHMubm9icmFja2V0ID09PSB0cnVlIHx8ICFyZW1haW5pbmcoKS5pbmNsdWRlcygnXScpKSB7XG4gICAgICAgIGlmIChvcHRzLm5vYnJhY2tldCAhPT0gdHJ1ZSAmJiBvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJ10nKSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YWx1ZSA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jcmVtZW50KCdicmFja2V0cycpO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2JyYWNrZXQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gJ10nKSB7XG4gICAgICBpZiAob3B0cy5ub2JyYWNrZXQgPT09IHRydWUgfHwgKHByZXYgJiYgcHJldi50eXBlID09PSAnYnJhY2tldCcgJiYgcHJldi52YWx1ZS5sZW5ndGggPT09IDEpKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlLCBvdXRwdXQ6IGBcXFxcJHt2YWx1ZX1gIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLmJyYWNrZXRzID09PSAwKSB7XG4gICAgICAgIGlmIChvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdvcGVuaW5nJywgJ1snKSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiBgXFxcXCR7dmFsdWV9YCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGRlY3JlbWVudCgnYnJhY2tldHMnKTtcblxuICAgICAgY29uc3QgcHJldlZhbHVlID0gcHJldi52YWx1ZS5zbGljZSgxKTtcbiAgICAgIGlmIChwcmV2LnBvc2l4ICE9PSB0cnVlICYmIHByZXZWYWx1ZVswXSA9PT0gJ14nICYmICFwcmV2VmFsdWUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICB2YWx1ZSA9IGAvJHt2YWx1ZX1gO1xuICAgICAgfVxuXG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgYXBwZW5kKHsgdmFsdWUgfSk7XG5cbiAgICAgIC8vIHdoZW4gbGl0ZXJhbCBicmFja2V0cyBhcmUgZXhwbGljaXRseSBkaXNhYmxlZFxuICAgICAgLy8gYXNzdW1lIHdlIHNob3VsZCBtYXRjaCB3aXRoIGEgcmVnZXggY2hhcmFjdGVyIGNsYXNzXG4gICAgICBpZiAob3B0cy5saXRlcmFsQnJhY2tldHMgPT09IGZhbHNlIHx8IHV0aWxzLmhhc1JlZ2V4Q2hhcnMocHJldlZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXNjYXBlZCA9IHV0aWxzLmVzY2FwZVJlZ2V4KHByZXYudmFsdWUpO1xuICAgICAgc3RhdGUub3V0cHV0ID0gc3RhdGUub3V0cHV0LnNsaWNlKDAsIC1wcmV2LnZhbHVlLmxlbmd0aCk7XG5cbiAgICAgIC8vIHdoZW4gbGl0ZXJhbCBicmFja2V0cyBhcmUgZXhwbGljaXRseSBlbmFibGVkXG4gICAgICAvLyBhc3N1bWUgd2Ugc2hvdWxkIGVzY2FwZSB0aGUgYnJhY2tldHMgdG8gbWF0Y2ggbGl0ZXJhbCBjaGFyYWN0ZXJzXG4gICAgICBpZiAob3B0cy5saXRlcmFsQnJhY2tldHMgPT09IHRydWUpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IGVzY2FwZWQ7XG4gICAgICAgIHByZXYudmFsdWUgPSBlc2NhcGVkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gd2hlbiB0aGUgdXNlciBzcGVjaWZpZXMgbm90aGluZywgdHJ5IHRvIG1hdGNoIGJvdGhcbiAgICAgIHByZXYudmFsdWUgPSBgKCR7Y2FwdHVyZX0ke2VzY2FwZWR9fCR7cHJldi52YWx1ZX0pYDtcbiAgICAgIHN0YXRlLm91dHB1dCArPSBwcmV2LnZhbHVlO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJhY2VzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICd7JyAmJiBvcHRzLm5vYnJhY2UgIT09IHRydWUpIHtcbiAgICAgIGluY3JlbWVudCgnYnJhY2VzJyk7XG5cbiAgICAgIGNvbnN0IG9wZW4gPSB7XG4gICAgICAgIHR5cGU6ICdicmFjZScsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBvdXRwdXQ6ICcoJyxcbiAgICAgICAgb3V0cHV0SW5kZXg6IHN0YXRlLm91dHB1dC5sZW5ndGgsXG4gICAgICAgIHRva2Vuc0luZGV4OiBzdGF0ZS50b2tlbnMubGVuZ3RoXG4gICAgICB9O1xuXG4gICAgICBicmFjZXMucHVzaChvcGVuKTtcbiAgICAgIHB1c2gob3Blbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICd9Jykge1xuICAgICAgY29uc3QgYnJhY2UgPSBicmFjZXNbYnJhY2VzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAob3B0cy5ub2JyYWNlID09PSB0cnVlIHx8ICFicmFjZSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSwgb3V0cHV0OiB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnKSc7XG5cbiAgICAgIGlmIChicmFjZS5kb3RzID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IHRva2Vucy5zbGljZSgpO1xuICAgICAgICBjb25zdCByYW5nZSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0b2tlbnMucG9wKCk7XG4gICAgICAgICAgaWYgKGFycltpXS50eXBlID09PSAnYnJhY2UnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFycltpXS50eXBlICE9PSAnZG90cycpIHtcbiAgICAgICAgICAgIHJhbmdlLnVuc2hpZnQoYXJyW2ldLnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXQgPSBleHBhbmRSYW5nZShyYW5nZSwgb3B0cyk7XG4gICAgICAgIHN0YXRlLmJhY2t0cmFjayA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChicmFjZS5jb21tYSAhPT0gdHJ1ZSAmJiBicmFjZS5kb3RzICE9PSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IG91dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCBicmFjZS5vdXRwdXRJbmRleCk7XG4gICAgICAgIGNvbnN0IHRva3MgPSBzdGF0ZS50b2tlbnMuc2xpY2UoYnJhY2UudG9rZW5zSW5kZXgpO1xuICAgICAgICBicmFjZS52YWx1ZSA9IGJyYWNlLm91dHB1dCA9ICdcXFxceyc7XG4gICAgICAgIHZhbHVlID0gb3V0cHV0ID0gJ1xcXFx9JztcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gb3V0O1xuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdG9rcykge1xuICAgICAgICAgIHN0YXRlLm91dHB1dCArPSAodC5vdXRwdXQgfHwgdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdicmFjZScsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgICBkZWNyZW1lbnQoJ2JyYWNlcycpO1xuICAgICAgYnJhY2VzLnBvcCgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGlwZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ3wnKSB7XG4gICAgICBpZiAoZXh0Z2xvYnMubGVuZ3RoID4gMCkge1xuICAgICAgICBleHRnbG9ic1tleHRnbG9icy5sZW5ndGggLSAxXS5jb25kaXRpb25zKys7XG4gICAgICB9XG4gICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbW1hc1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnLCcpIHtcbiAgICAgIGxldCBvdXRwdXQgPSB2YWx1ZTtcblxuICAgICAgY29uc3QgYnJhY2UgPSBicmFjZXNbYnJhY2VzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGJyYWNlICYmIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdID09PSAnYnJhY2VzJykge1xuICAgICAgICBicmFjZS5jb21tYSA9IHRydWU7XG4gICAgICAgIG91dHB1dCA9ICd8JztcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdjb21tYScsIHZhbHVlLCBvdXRwdXQgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbGFzaGVzXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09ICcvJykge1xuICAgICAgLy8gaWYgdGhlIGJlZ2lubmluZyBvZiB0aGUgZ2xvYiBpcyBcIi4vXCIsIGFkdmFuY2UgdGhlIHN0YXJ0XG4gICAgICAvLyB0byB0aGUgY3VycmVudCBpbmRleCwgYW5kIGRvbid0IGFkZCB0aGUgXCIuL1wiIGNoYXJhY3RlcnNcbiAgICAgIC8vIHRvIHRoZSBzdGF0ZS4gVGhpcyBncmVhdGx5IHNpbXBsaWZpZXMgbG9va2JlaGluZHMgd2hlblxuICAgICAgLy8gY2hlY2tpbmcgZm9yIEJPUyBjaGFyYWN0ZXJzIGxpa2UgXCIhXCIgYW5kIFwiLlwiIChub3QgXCIuL1wiKVxuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ2RvdCcgJiYgc3RhdGUuaW5kZXggPT09IHN0YXRlLnN0YXJ0ICsgMSkge1xuICAgICAgICBzdGF0ZS5zdGFydCA9IHN0YXRlLmluZGV4ICsgMTtcbiAgICAgICAgc3RhdGUuY29uc3VtZWQgPSAnJztcbiAgICAgICAgc3RhdGUub3V0cHV0ID0gJyc7XG4gICAgICAgIHRva2Vucy5wb3AoKTtcbiAgICAgICAgcHJldiA9IGJvczsgLy8gcmVzZXQgXCJwcmV2XCIgdG8gdGhlIGZpcnN0IHRva2VuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3NsYXNoJywgdmFsdWUsIG91dHB1dDogU0xBU0hfTElURVJBTCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvdHNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJy4nKSB7XG4gICAgICBpZiAoc3RhdGUuYnJhY2VzID4gMCAmJiBwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICAgIGlmIChwcmV2LnZhbHVlID09PSAnLicpIHByZXYub3V0cHV0ID0gRE9UX0xJVEVSQUw7XG4gICAgICAgIGNvbnN0IGJyYWNlID0gYnJhY2VzW2JyYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgcHJldi50eXBlID0gJ2RvdHMnO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSB2YWx1ZTtcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgYnJhY2UuZG90cyA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHN0YXRlLmJyYWNlcyArIHN0YXRlLnBhcmVucykgPT09IDAgJiYgcHJldi50eXBlICE9PSAnYm9zJyAmJiBwcmV2LnR5cGUgIT09ICdzbGFzaCcpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dDogRE9UX0xJVEVSQUwgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ2RvdCcsIHZhbHVlLCBvdXRwdXQ6IERPVF9MSVRFUkFMIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlc3Rpb24gbWFya3NcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJz8nKSB7XG4gICAgICBjb25zdCBpc0dyb3VwID0gcHJldiAmJiBwcmV2LnZhbHVlID09PSAnKCc7XG4gICAgICBpZiAoIWlzR3JvdXAgJiYgb3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcgJiYgcGVlaygyKSAhPT0gJz8nKSB7XG4gICAgICAgIGV4dGdsb2JPcGVuKCdxbWFyaycsIHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2ICYmIHByZXYudHlwZSA9PT0gJ3BhcmVuJykge1xuICAgICAgICBjb25zdCBuZXh0ID0gcGVlaygpO1xuICAgICAgICBsZXQgb3V0cHV0ID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKG5leHQgPT09ICc8JyAmJiAhdXRpbHMuc3VwcG9ydHNMb29rYmVoaW5kcygpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb2RlLmpzIHYxMCBvciBoaWdoZXIgaXMgcmVxdWlyZWQgZm9yIHJlZ2V4IGxvb2tiZWhpbmRzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKHByZXYudmFsdWUgPT09ICcoJyAmJiAhL1shPTw6XS8udGVzdChuZXh0KSkgfHwgKG5leHQgPT09ICc8JyAmJiAhLzwoWyE9XXxcXHcrPikvLnRlc3QocmVtYWluaW5nKCkpKSkge1xuICAgICAgICAgIG91dHB1dCA9IGBcXFxcJHt2YWx1ZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUsIG91dHB1dCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLmRvdCAhPT0gdHJ1ZSAmJiAocHJldi50eXBlID09PSAnc2xhc2gnIHx8IHByZXYudHlwZSA9PT0gJ2JvcycpKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAncW1hcmsnLCB2YWx1ZSwgb3V0cHV0OiBRTUFSS19OT19ET1QgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3FtYXJrJywgdmFsdWUsIG91dHB1dDogUU1BUksgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGNsYW1hdGlvblxuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnIScpIHtcbiAgICAgIGlmIChvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiBwZWVrKCkgPT09ICcoJykge1xuICAgICAgICBpZiAocGVlaygyKSAhPT0gJz8nIHx8ICEvWyE9PDpdLy50ZXN0KHBlZWsoMykpKSB7XG4gICAgICAgICAgZXh0Z2xvYk9wZW4oJ25lZ2F0ZScsIHZhbHVlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5ub25lZ2F0ZSAhPT0gdHJ1ZSAmJiBzdGF0ZS5pbmRleCA9PT0gMCkge1xuICAgICAgICBuZWdhdGUoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGx1c1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSAnKycpIHtcbiAgICAgIGlmIChvcHRzLm5vZXh0Z2xvYiAhPT0gdHJ1ZSAmJiBwZWVrKCkgPT09ICcoJyAmJiBwZWVrKDIpICE9PSAnPycpIHtcbiAgICAgICAgZXh0Z2xvYk9wZW4oJ3BsdXMnLCB2YWx1ZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHByZXYgJiYgcHJldi52YWx1ZSA9PT0gJygnKSB8fCBvcHRzLnJlZ2V4ID09PSBmYWxzZSkge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3BsdXMnLCB2YWx1ZSwgb3V0cHV0OiBQTFVTX0xJVEVSQUwgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoKHByZXYgJiYgKHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnIHx8IHByZXYudHlwZSA9PT0gJ3BhcmVuJyB8fCBwcmV2LnR5cGUgPT09ICdicmFjZScpKSB8fCBzdGF0ZS5wYXJlbnMgPiAwKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAncGx1cycsIHZhbHVlIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdwbHVzJywgdmFsdWU6IFBMVVNfTElURVJBTCB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBsYWluIHRleHRcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gJ0AnKSB7XG4gICAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgcGVlaygpID09PSAnKCcgJiYgcGVlaygyKSAhPT0gJz8nKSB7XG4gICAgICAgIHB1c2goeyB0eXBlOiAnYXQnLCBleHRnbG9iOiB0cnVlLCB2YWx1ZSwgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGxhaW4gdGV4dFxuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlICE9PSAnKicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gJyQnIHx8IHZhbHVlID09PSAnXicpIHtcbiAgICAgICAgdmFsdWUgPSBgXFxcXCR7dmFsdWV9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF0Y2ggPSBSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUy5leGVjKHJlbWFpbmluZygpKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB2YWx1ZSArPSBtYXRjaFswXTtcbiAgICAgICAgc3RhdGUuaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXJzXG4gICAgICovXG5cbiAgICBpZiAocHJldiAmJiAocHJldi50eXBlID09PSAnZ2xvYnN0YXInIHx8IHByZXYuc3RhciA9PT0gdHJ1ZSkpIHtcbiAgICAgIHByZXYudHlwZSA9ICdzdGFyJztcbiAgICAgIHByZXYuc3RhciA9IHRydWU7XG4gICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgcHJldi5vdXRwdXQgPSBzdGFyO1xuICAgICAgc3RhdGUuYmFja3RyYWNrID0gdHJ1ZTtcbiAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IHJlc3QgPSByZW1haW5pbmcoKTtcbiAgICBpZiAob3B0cy5ub2V4dGdsb2IgIT09IHRydWUgJiYgL15cXChbXj9dLy50ZXN0KHJlc3QpKSB7XG4gICAgICBleHRnbG9iT3Blbignc3RhcicsIHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcmV2LnR5cGUgPT09ICdzdGFyJykge1xuICAgICAgaWYgKG9wdHMubm9nbG9ic3RhciA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaW9yID0gcHJldi5wcmV2O1xuICAgICAgY29uc3QgYmVmb3JlID0gcHJpb3IucHJldjtcbiAgICAgIGNvbnN0IGlzU3RhcnQgPSBwcmlvci50eXBlID09PSAnc2xhc2gnIHx8IHByaW9yLnR5cGUgPT09ICdib3MnO1xuICAgICAgY29uc3QgYWZ0ZXJTdGFyID0gYmVmb3JlICYmIChiZWZvcmUudHlwZSA9PT0gJ3N0YXInIHx8IGJlZm9yZS50eXBlID09PSAnZ2xvYnN0YXInKTtcblxuICAgICAgaWYgKG9wdHMuYmFzaCA9PT0gdHJ1ZSAmJiAoIWlzU3RhcnQgfHwgKHJlc3RbMF0gJiYgcmVzdFswXSAhPT0gJy8nKSkpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzdGFyJywgdmFsdWUsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0JyYWNlID0gc3RhdGUuYnJhY2VzID4gMCAmJiAocHJpb3IudHlwZSA9PT0gJ2NvbW1hJyB8fCBwcmlvci50eXBlID09PSAnYnJhY2UnKTtcbiAgICAgIGNvbnN0IGlzRXh0Z2xvYiA9IGV4dGdsb2JzLmxlbmd0aCAmJiAocHJpb3IudHlwZSA9PT0gJ3BpcGUnIHx8IHByaW9yLnR5cGUgPT09ICdwYXJlbicpO1xuICAgICAgaWYgKCFpc1N0YXJ0ICYmIHByaW9yLnR5cGUgIT09ICdwYXJlbicgJiYgIWlzQnJhY2UgJiYgIWlzRXh0Z2xvYikge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3N0YXInLCB2YWx1ZSwgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHN0cmlwIGNvbnNlY3V0aXZlIGAvKiovYFxuICAgICAgd2hpbGUgKHJlc3Quc2xpY2UoMCwgMykgPT09ICcvKionKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gaW5wdXRbc3RhdGUuaW5kZXggKyA0XTtcbiAgICAgICAgaWYgKGFmdGVyICYmIGFmdGVyICE9PSAnLycpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN0ID0gcmVzdC5zbGljZSgzKTtcbiAgICAgICAgY29uc3VtZSgnLyoqJywgMyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmlvci50eXBlID09PSAnYm9zJyAmJiBlb3MoKSkge1xuICAgICAgICBwcmV2LnR5cGUgPSAnZ2xvYnN0YXInO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2Lm91dHB1dCA9IGdsb2JzdGFyKG9wdHMpO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSBwcmV2Lm91dHB1dDtcbiAgICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmlvci50eXBlID09PSAnc2xhc2gnICYmIHByaW9yLnByZXYudHlwZSAhPT0gJ2JvcycgJiYgIWFmdGVyU3RhciAmJiBlb3MoKSkge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLShwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dCkubGVuZ3RoKTtcbiAgICAgICAgcHJpb3Iub3V0cHV0ID0gYCg/OiR7cHJpb3Iub3V0cHV0fWA7XG5cbiAgICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgICAgcHJldi5vdXRwdXQgPSBnbG9ic3RhcihvcHRzKSArIChvcHRzLnN0cmljdFNsYXNoZXMgPyAnKScgOiAnfCQpJyk7XG4gICAgICAgIHByZXYudmFsdWUgKz0gdmFsdWU7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHByaW9yLm91dHB1dCArIHByZXYub3V0cHV0O1xuICAgICAgICBjb25zdW1lKHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmlvci50eXBlID09PSAnc2xhc2gnICYmIHByaW9yLnByZXYudHlwZSAhPT0gJ2JvcycgJiYgcmVzdFswXSA9PT0gJy8nKSB7XG4gICAgICAgIGNvbnN0IGVuZCA9IHJlc3RbMV0gIT09IHZvaWQgMCA/ICd8JCcgOiAnJztcblxuICAgICAgICBzdGF0ZS5vdXRwdXQgPSBzdGF0ZS5vdXRwdXQuc2xpY2UoMCwgLShwcmlvci5vdXRwdXQgKyBwcmV2Lm91dHB1dCkubGVuZ3RoKTtcbiAgICAgICAgcHJpb3Iub3V0cHV0ID0gYCg/OiR7cHJpb3Iub3V0cHV0fWA7XG5cbiAgICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgICAgcHJldi5vdXRwdXQgPSBgJHtnbG9ic3RhcihvcHRzKX0ke1NMQVNIX0xJVEVSQUx9fCR7U0xBU0hfTElURVJBTH0ke2VuZH0pYDtcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcblxuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gcHJpb3Iub3V0cHV0ICsgcHJldi5vdXRwdXQ7XG4gICAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcblxuICAgICAgICBjb25zdW1lKHZhbHVlICsgYWR2YW5jZSgpKTtcblxuICAgICAgICBwdXNoKHsgdHlwZTogJ3NsYXNoJywgdmFsdWU6ICcvJywgb3V0cHV0OiAnJyB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmlvci50eXBlID09PSAnYm9zJyAmJiByZXN0WzBdID09PSAnLycpIHtcbiAgICAgICAgcHJldi50eXBlID0gJ2dsb2JzdGFyJztcbiAgICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgcHJldi5vdXRwdXQgPSBgKD86Xnwke1NMQVNIX0xJVEVSQUx9fCR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSlgO1xuICAgICAgICBzdGF0ZS5vdXRwdXQgPSBwcmV2Lm91dHB1dDtcbiAgICAgICAgc3RhdGUuZ2xvYnN0YXIgPSB0cnVlO1xuICAgICAgICBjb25zdW1lKHZhbHVlICsgYWR2YW5jZSgpKTtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICdzbGFzaCcsIHZhbHVlOiAnLycsIG91dHB1dDogJycgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgc2luZ2xlIHN0YXIgZnJvbSBvdXRwdXRcbiAgICAgIHN0YXRlLm91dHB1dCA9IHN0YXRlLm91dHB1dC5zbGljZSgwLCAtcHJldi5vdXRwdXQubGVuZ3RoKTtcblxuICAgICAgLy8gcmVzZXQgcHJldmlvdXMgdG9rZW4gdG8gZ2xvYnN0YXJcbiAgICAgIHByZXYudHlwZSA9ICdnbG9ic3Rhcic7XG4gICAgICBwcmV2Lm91dHB1dCA9IGdsb2JzdGFyKG9wdHMpO1xuICAgICAgcHJldi52YWx1ZSArPSB2YWx1ZTtcblxuICAgICAgLy8gcmVzZXQgb3V0cHV0IHdpdGggZ2xvYnN0YXJcbiAgICAgIHN0YXRlLm91dHB1dCArPSBwcmV2Lm91dHB1dDtcbiAgICAgIHN0YXRlLmdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgIGNvbnN1bWUodmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB7IHR5cGU6ICdzdGFyJywgdmFsdWUsIG91dHB1dDogc3RhciB9O1xuXG4gICAgaWYgKG9wdHMuYmFzaCA9PT0gdHJ1ZSkge1xuICAgICAgdG9rZW4ub3V0cHV0ID0gJy4qPyc7XG4gICAgICBpZiAocHJldi50eXBlID09PSAnYm9zJyB8fCBwcmV2LnR5cGUgPT09ICdzbGFzaCcpIHtcbiAgICAgICAgdG9rZW4ub3V0cHV0ID0gbm9kb3QgKyB0b2tlbi5vdXRwdXQ7XG4gICAgICB9XG4gICAgICBwdXNoKHRva2VuKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcmV2ICYmIChwcmV2LnR5cGUgPT09ICdicmFja2V0JyB8fCBwcmV2LnR5cGUgPT09ICdwYXJlbicpICYmIG9wdHMucmVnZXggPT09IHRydWUpIHtcbiAgICAgIHRva2VuLm91dHB1dCA9IHZhbHVlO1xuICAgICAgcHVzaCh0b2tlbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuaW5kZXggPT09IHN0YXRlLnN0YXJ0IHx8IHByZXYudHlwZSA9PT0gJ3NsYXNoJyB8fCBwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gTk9fRE9UX1NMQVNIO1xuICAgICAgICBwcmV2Lm91dHB1dCArPSBOT19ET1RfU0xBU0g7XG5cbiAgICAgIH0gZWxzZSBpZiAob3B0cy5kb3QgPT09IHRydWUpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IE5PX0RPVFNfU0xBU0g7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IE5PX0RPVFNfU0xBU0g7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLm91dHB1dCArPSBub2RvdDtcbiAgICAgICAgcHJldi5vdXRwdXQgKz0gbm9kb3Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChwZWVrKCkgIT09ICcqJykge1xuICAgICAgICBzdGF0ZS5vdXRwdXQgKz0gT05FX0NIQVI7XG4gICAgICAgIHByZXYub3V0cHV0ICs9IE9ORV9DSEFSO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2godG9rZW4pO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLmJyYWNrZXRzID4gMCkge1xuICAgIGlmIChvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ2Nsb3NpbmcnLCAnXScpKTtcbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy5lc2NhcGVMYXN0KHN0YXRlLm91dHB1dCwgJ1snKTtcbiAgICBkZWNyZW1lbnQoJ2JyYWNrZXRzJyk7XG4gIH1cblxuICB3aGlsZSAoc3RhdGUucGFyZW5zID4gMCkge1xuICAgIGlmIChvcHRzLnN0cmljdEJyYWNrZXRzID09PSB0cnVlKSB0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoJ2Nsb3NpbmcnLCAnKScpKTtcbiAgICBzdGF0ZS5vdXRwdXQgPSB1dGlscy5lc2NhcGVMYXN0KHN0YXRlLm91dHB1dCwgJygnKTtcbiAgICBkZWNyZW1lbnQoJ3BhcmVucycpO1xuICB9XG5cbiAgd2hpbGUgKHN0YXRlLmJyYWNlcyA+IDApIHtcbiAgICBpZiAob3B0cy5zdHJpY3RCcmFja2V0cyA9PT0gdHJ1ZSkgdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKCdjbG9zaW5nJywgJ30nKSk7XG4gICAgc3RhdGUub3V0cHV0ID0gdXRpbHMuZXNjYXBlTGFzdChzdGF0ZS5vdXRwdXQsICd7Jyk7XG4gICAgZGVjcmVtZW50KCdicmFjZXMnKTtcbiAgfVxuXG4gIGlmIChvcHRzLnN0cmljdFNsYXNoZXMgIT09IHRydWUgJiYgKHByZXYudHlwZSA9PT0gJ3N0YXInIHx8IHByZXYudHlwZSA9PT0gJ2JyYWNrZXQnKSkge1xuICAgIHB1c2goeyB0eXBlOiAnbWF5YmVfc2xhc2gnLCB2YWx1ZTogJycsIG91dHB1dDogYCR7U0xBU0hfTElURVJBTH0/YCB9KTtcbiAgfVxuXG4gIC8vIHJlYnVpbGQgdGhlIG91dHB1dCBpZiB3ZSBoYWQgdG8gYmFja3RyYWNrIGF0IGFueSBwb2ludFxuICBpZiAoc3RhdGUuYmFja3RyYWNrID09PSB0cnVlKSB7XG4gICAgc3RhdGUub3V0cHV0ID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHN0YXRlLnRva2Vucykge1xuICAgICAgc3RhdGUub3V0cHV0ICs9IHRva2VuLm91dHB1dCAhPSBudWxsID8gdG9rZW4ub3V0cHV0IDogdG9rZW4udmFsdWU7XG5cbiAgICAgIGlmICh0b2tlbi5zdWZmaXgpIHtcbiAgICAgICAgc3RhdGUub3V0cHV0ICs9IHRva2VuLnN1ZmZpeDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGU7XG59O1xuXG4vKipcbiAqIEZhc3QgcGF0aHMgZm9yIGNyZWF0aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbW1vbiBnbG9iIHBhdHRlcm5zLlxuICogVGhpcyBjYW4gc2lnbmlmaWNhbnRseSBzcGVlZCB1cCBwcm9jZXNzaW5nIGFuZCBoYXMgdmVyeSBsaXR0bGUgZG93bnNpZGVcbiAqIGltcGFjdCB3aGVuIG5vbmUgb2YgdGhlIGZhc3QgcGF0aHMgbWF0Y2guXG4gKi9cblxucGFyc2UuZmFzdHBhdGhzID0gKGlucHV0LCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IG9wdHMgPSB7IC4uLm9wdGlvbnMgfTtcbiAgY29uc3QgbWF4ID0gdHlwZW9mIG9wdHMubWF4TGVuZ3RoID09PSAnbnVtYmVyJyA/IE1hdGgubWluKE1BWF9MRU5HVEgsIG9wdHMubWF4TGVuZ3RoKSA6IE1BWF9MRU5HVEg7XG4gIGNvbnN0IGxlbiA9IGlucHV0Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IG1heCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoOiAke2xlbn0sIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGxlbmd0aDogJHttYXh9YCk7XG4gIH1cblxuICBpbnB1dCA9IFJFUExBQ0VNRU5UU1tpbnB1dF0gfHwgaW5wdXQ7XG4gIGNvbnN0IHdpbjMyID0gdXRpbHMuaXNXaW5kb3dzKG9wdGlvbnMpO1xuXG4gIC8vIGNyZWF0ZSBjb25zdGFudHMgYmFzZWQgb24gcGxhdGZvcm0sIGZvciB3aW5kb3dzIG9yIHBvc2l4XG4gIGNvbnN0IHtcbiAgICBET1RfTElURVJBTCxcbiAgICBTTEFTSF9MSVRFUkFMLFxuICAgIE9ORV9DSEFSLFxuICAgIERPVFNfU0xBU0gsXG4gICAgTk9fRE9ULFxuICAgIE5PX0RPVFMsXG4gICAgTk9fRE9UU19TTEFTSCxcbiAgICBTVEFSLFxuICAgIFNUQVJUX0FOQ0hPUlxuICB9ID0gY29uc3RhbnRzLmdsb2JDaGFycyh3aW4zMik7XG5cbiAgY29uc3Qgbm9kb3QgPSBvcHRzLmRvdCA/IE5PX0RPVFMgOiBOT19ET1Q7XG4gIGNvbnN0IHNsYXNoRG90ID0gb3B0cy5kb3QgPyBOT19ET1RTX1NMQVNIIDogTk9fRE9UO1xuICBjb25zdCBjYXB0dXJlID0gb3B0cy5jYXB0dXJlID8gJycgOiAnPzonO1xuICBjb25zdCBzdGF0ZSA9IHsgbmVnYXRlZDogZmFsc2UsIHByZWZpeDogJycgfTtcbiAgbGV0IHN0YXIgPSBvcHRzLmJhc2ggPT09IHRydWUgPyAnLio/JyA6IFNUQVI7XG5cbiAgaWYgKG9wdHMuY2FwdHVyZSkge1xuICAgIHN0YXIgPSBgKCR7c3Rhcn0pYDtcbiAgfVxuXG4gIGNvbnN0IGdsb2JzdGFyID0gKG9wdHMpID0+IHtcbiAgICBpZiAob3B0cy5ub2dsb2JzdGFyID09PSB0cnVlKSByZXR1cm4gc3RhcjtcbiAgICByZXR1cm4gYCgke2NhcHR1cmV9KD86KD8hJHtTVEFSVF9BTkNIT1J9JHtvcHRzLmRvdCA/IERPVFNfU0xBU0ggOiBET1RfTElURVJBTH0pLikqPylgO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZSA9IHN0ciA9PiB7XG4gICAgc3dpdGNoIChzdHIpIHtcbiAgICAgIGNhc2UgJyonOlxuICAgICAgICByZXR1cm4gYCR7bm9kb3R9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnLionOlxuICAgICAgICByZXR1cm4gYCR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKi4qJzpcbiAgICAgICAgcmV0dXJuIGAke25vZG90fSR7c3Rhcn0ke0RPVF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzdGFyfWA7XG5cbiAgICAgIGNhc2UgJyovKic6XG4gICAgICAgIHJldHVybiBgJHtub2RvdH0ke3N0YXJ9JHtTTEFTSF9MSVRFUkFMfSR7T05FX0NIQVJ9JHtzbGFzaERvdH0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKionOlxuICAgICAgICByZXR1cm4gbm9kb3QgKyBnbG9ic3RhcihvcHRzKTtcblxuICAgICAgY2FzZSAnKiovKic6XG4gICAgICAgIHJldHVybiBgKD86JHtub2RvdH0ke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pPyR7c2xhc2hEb3R9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgY2FzZSAnKiovKi4qJzpcbiAgICAgICAgcmV0dXJuIGAoPzoke25vZG90fSR7Z2xvYnN0YXIob3B0cyl9JHtTTEFTSF9MSVRFUkFMfSk/JHtzbGFzaERvdH0ke3N0YXJ9JHtET1RfTElURVJBTH0ke09ORV9DSEFSfSR7c3Rhcn1gO1xuXG4gICAgICBjYXNlICcqKi8uKic6XG4gICAgICAgIHJldHVybiBgKD86JHtub2RvdH0ke2dsb2JzdGFyKG9wdHMpfSR7U0xBU0hfTElURVJBTH0pPyR7RE9UX0xJVEVSQUx9JHtPTkVfQ0hBUn0ke3N0YXJ9YDtcblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBtYXRjaCA9IC9eKC4qPylcXC4oXFx3KykkLy5leGVjKHN0cik7XG4gICAgICAgIGlmICghbWF0Y2gpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjcmVhdGUobWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgICAgIHJldHVybiBzb3VyY2UgKyBET1RfTElURVJBTCArIG1hdGNoWzJdO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBvdXRwdXQgPSB1dGlscy5yZW1vdmVQcmVmaXgoaW5wdXQsIHN0YXRlKTtcbiAgbGV0IHNvdXJjZSA9IGNyZWF0ZShvdXRwdXQpO1xuXG4gIGlmIChzb3VyY2UgJiYgb3B0cy5zdHJpY3RTbGFzaGVzICE9PSB0cnVlKSB7XG4gICAgc291cmNlICs9IGAke1NMQVNIX0xJVEVSQUx9P2A7XG4gIH1cblxuICByZXR1cm4gc291cmNlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJzZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHNjYW4gPSByZXF1aXJlKCcuL3NjYW4nKTtcbmNvbnN0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5jb25zdCBjb25zdGFudHMgPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3QgaXNPYmplY3QgPSB2YWwgPT4gdmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hdGNoZXIgZnVuY3Rpb24gZnJvbSBvbmUgb3IgbW9yZSBnbG9iIHBhdHRlcm5zLiBUaGVcbiAqIHJldHVybmVkIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIHRvIG1hdGNoIGFzIGl0cyBmaXJzdCBhcmd1bWVudCxcbiAqIGFuZCByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIG1hdGNoLiBUaGUgcmV0dXJuZWQgbWF0Y2hlclxuICogZnVuY3Rpb24gYWxzbyB0YWtlcyBhIGJvb2xlYW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0aGF0LCB3aGVuIHRydWUsXG4gKiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoKGdsb2JbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgaXNNYXRjaCA9IHBpY29tYXRjaCgnKi4hKCphKScpO1xuICogY29uc29sZS5sb2coaXNNYXRjaCgnYS5hJykpOyAvLz0+IGZhbHNlXG4gKiBjb25zb2xlLmxvZyhpc01hdGNoKCdhLmInKSk7IC8vPT4gdHJ1ZVxuICogYGBgXG4gKiBAbmFtZSBwaWNvbWF0Y2hcbiAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBgZ2xvYnNgIE9uZSBvciBtb3JlIGdsb2IgcGF0dGVybnMuXG4gKiBAcGFyYW0ge09iamVjdD19IGBvcHRpb25zYFxuICogQHJldHVybiB7RnVuY3Rpb249fSBSZXR1cm5zIGEgbWF0Y2hlciBmdW5jdGlvbi5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuY29uc3QgcGljb21hdGNoID0gKGdsb2IsIG9wdGlvbnMsIHJldHVyblN0YXRlID0gZmFsc2UpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZ2xvYikpIHtcbiAgICBjb25zdCBmbnMgPSBnbG9iLm1hcChpbnB1dCA9PiBwaWNvbWF0Y2goaW5wdXQsIG9wdGlvbnMsIHJldHVyblN0YXRlKSk7XG4gICAgY29uc3QgYXJyYXlNYXRjaGVyID0gc3RyID0+IHtcbiAgICAgIGZvciAoY29uc3QgaXNNYXRjaCBvZiBmbnMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc01hdGNoKHN0cik7XG4gICAgICAgIGlmIChzdGF0ZSkgcmV0dXJuIHN0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5TWF0Y2hlcjtcbiAgfVxuXG4gIGNvbnN0IGlzU3RhdGUgPSBpc09iamVjdChnbG9iKSAmJiBnbG9iLnRva2VucyAmJiBnbG9iLmlucHV0O1xuXG4gIGlmIChnbG9iID09PSAnJyB8fCAodHlwZW9mIGdsb2IgIT09ICdzdHJpbmcnICYmICFpc1N0YXRlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhdHRlcm4gdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgcG9zaXggPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucyk7XG4gIGNvbnN0IHJlZ2V4ID0gaXNTdGF0ZVxuICAgID8gcGljb21hdGNoLmNvbXBpbGVSZShnbG9iLCBvcHRpb25zKVxuICAgIDogcGljb21hdGNoLm1ha2VSZShnbG9iLCBvcHRpb25zLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgY29uc3Qgc3RhdGUgPSByZWdleC5zdGF0ZTtcbiAgZGVsZXRlIHJlZ2V4LnN0YXRlO1xuXG4gIGxldCBpc0lnbm9yZWQgPSAoKSA9PiBmYWxzZTtcbiAgaWYgKG9wdHMuaWdub3JlKSB7XG4gICAgY29uc3QgaWdub3JlT3B0cyA9IHsgLi4ub3B0aW9ucywgaWdub3JlOiBudWxsLCBvbk1hdGNoOiBudWxsLCBvblJlc3VsdDogbnVsbCB9O1xuICAgIGlzSWdub3JlZCA9IHBpY29tYXRjaChvcHRzLmlnbm9yZSwgaWdub3JlT3B0cywgcmV0dXJuU3RhdGUpO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlciA9IChpbnB1dCwgcmV0dXJuT2JqZWN0ID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCB7IGlzTWF0Y2gsIG1hdGNoLCBvdXRwdXQgfSA9IHBpY29tYXRjaC50ZXN0KGlucHV0LCByZWdleCwgb3B0aW9ucywgeyBnbG9iLCBwb3NpeCB9KTtcbiAgICBjb25zdCByZXN1bHQgPSB7IGdsb2IsIHN0YXRlLCByZWdleCwgcG9zaXgsIGlucHV0LCBvdXRwdXQsIG1hdGNoLCBpc01hdGNoIH07XG5cbiAgICBpZiAodHlwZW9mIG9wdHMub25SZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdHMub25SZXN1bHQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBpZiAoaXNNYXRjaCA9PT0gZmFsc2UpIHtcbiAgICAgIHJlc3VsdC5pc01hdGNoID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmV0dXJuT2JqZWN0ID8gcmVzdWx0IDogZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGlzSWdub3JlZChpbnB1dCkpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5vbklnbm9yZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvcHRzLm9uSWdub3JlKHJlc3VsdCk7XG4gICAgICB9XG4gICAgICByZXN1bHQuaXNNYXRjaCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJldHVybk9iamVjdCA/IHJlc3VsdCA6IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5vbk1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLm9uTWF0Y2gocmVzdWx0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVybk9iamVjdCA/IHJlc3VsdCA6IHRydWU7XG4gIH07XG5cbiAgaWYgKHJldHVyblN0YXRlKSB7XG4gICAgbWF0Y2hlci5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoZXI7XG59O1xuXG4vKipcbiAqIFRlc3QgYGlucHV0YCB3aXRoIHRoZSBnaXZlbiBgcmVnZXhgLiBUaGlzIGlzIHVzZWQgYnkgdGhlIG1haW5cbiAqIGBwaWNvbWF0Y2goKWAgZnVuY3Rpb24gdG8gdGVzdCB0aGUgaW5wdXQgc3RyaW5nLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC50ZXN0KGlucHV0LCByZWdleFssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2gudGVzdCgnZm9vL2JhcicsIC9eKD86KFteL10qPylcXC8oW14vXSo/KSkkLykpO1xuICogLy8geyBpc01hdGNoOiB0cnVlLCBtYXRjaDogWyAnZm9vLycsICdmb28nLCAnYmFyJyBdLCBvdXRwdXQ6ICdmb28vYmFyJyB9XG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIFN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtSZWdFeHB9IGByZWdleGBcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBtYXRjaGluZyBpbmZvLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5waWNvbWF0Y2gudGVzdCA9IChpbnB1dCwgcmVnZXgsIG9wdGlvbnMsIHsgZ2xvYiwgcG9zaXggfSA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgaW5wdXQgdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChpbnB1dCA9PT0gJycpIHtcbiAgICByZXR1cm4geyBpc01hdGNoOiBmYWxzZSwgb3V0cHV0OiAnJyB9O1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGZvcm1hdCA9IG9wdHMuZm9ybWF0IHx8IChwb3NpeCA/IHV0aWxzLnRvUG9zaXhTbGFzaGVzIDogbnVsbCk7XG4gIGxldCBtYXRjaCA9IGlucHV0ID09PSBnbG9iO1xuICBsZXQgb3V0cHV0ID0gKG1hdGNoICYmIGZvcm1hdCkgPyBmb3JtYXQoaW5wdXQpIDogaW5wdXQ7XG5cbiAgaWYgKG1hdGNoID09PSBmYWxzZSkge1xuICAgIG91dHB1dCA9IGZvcm1hdCA/IGZvcm1hdChpbnB1dCkgOiBpbnB1dDtcbiAgICBtYXRjaCA9IG91dHB1dCA9PT0gZ2xvYjtcbiAgfVxuXG4gIGlmIChtYXRjaCA9PT0gZmFsc2UgfHwgb3B0cy5jYXB0dXJlID09PSB0cnVlKSB7XG4gICAgaWYgKG9wdHMubWF0Y2hCYXNlID09PSB0cnVlIHx8IG9wdHMuYmFzZW5hbWUgPT09IHRydWUpIHtcbiAgICAgIG1hdGNoID0gcGljb21hdGNoLm1hdGNoQmFzZShpbnB1dCwgcmVnZXgsIG9wdGlvbnMsIHBvc2l4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2ggPSByZWdleC5leGVjKG91dHB1dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgaXNNYXRjaDogQm9vbGVhbihtYXRjaCksIG1hdGNoLCBvdXRwdXQgfTtcbn07XG5cbi8qKlxuICogTWF0Y2ggdGhlIGJhc2VuYW1lIG9mIGEgZmlsZXBhdGguXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLm1hdGNoQmFzZShpbnB1dCwgZ2xvYlssIG9wdGlvbnNdKTtcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC5tYXRjaEJhc2UoJ2Zvby9iYXIuanMnLCAnKi5qcycpOyAvLyB0cnVlXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgaW5wdXRgIFN0cmluZyB0byB0ZXN0LlxuICogQHBhcmFtIHtSZWdFeHB8U3RyaW5nfSBgZ2xvYmAgR2xvYiBwYXR0ZXJuIG9yIHJlZ2V4IGNyZWF0ZWQgYnkgWy5tYWtlUmVdKCNtYWtlUmUpLlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLm1hdGNoQmFzZSA9IChpbnB1dCwgZ2xvYiwgb3B0aW9ucywgcG9zaXggPSB1dGlscy5pc1dpbmRvd3Mob3B0aW9ucykpID0+IHtcbiAgY29uc3QgcmVnZXggPSBnbG9iIGluc3RhbmNlb2YgUmVnRXhwID8gZ2xvYiA6IHBpY29tYXRjaC5tYWtlUmUoZ2xvYiwgb3B0aW9ucyk7XG4gIHJldHVybiByZWdleC50ZXN0KHBhdGguYmFzZW5hbWUoaW5wdXQpKTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmICoqYW55Kiogb2YgdGhlIGdpdmVuIGdsb2IgYHBhdHRlcm5zYCBtYXRjaCB0aGUgc3BlY2lmaWVkIGBzdHJpbmdgLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwaWNvbWF0Y2ggPSByZXF1aXJlKCdwaWNvbWF0Y2gnKTtcbiAqIC8vIHBpY29tYXRjaC5pc01hdGNoKHN0cmluZywgcGF0dGVybnNbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc29sZS5sb2cocGljb21hdGNoLmlzTWF0Y2goJ2EuYScsIFsnYi4qJywgJyouYSddKSk7IC8vPT4gdHJ1ZVxuICogY29uc29sZS5sb2cocGljb21hdGNoLmlzTWF0Y2goJ2EuYScsICdiLionKSk7IC8vPT4gZmFsc2VcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd8QXJyYXl9IHN0ciBUaGUgc3RyaW5nIHRvIHRlc3QuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gcGF0dGVybnMgT25lIG9yIG1vcmUgZ2xvYiBwYXR0ZXJucyB0byB1c2UgZm9yIG1hdGNoaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBTZWUgYXZhaWxhYmxlIFtvcHRpb25zXSgjb3B0aW9ucykuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYW55IHBhdHRlcm5zIG1hdGNoIGBzdHJgXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5pc01hdGNoID0gKHN0ciwgcGF0dGVybnMsIG9wdGlvbnMpID0+IHBpY29tYXRjaChwYXR0ZXJucywgb3B0aW9ucykoc3RyKTtcblxuLyoqXG4gKiBQYXJzZSBhIGdsb2IgcGF0dGVybiB0byBjcmVhdGUgdGhlIHNvdXJjZSBzdHJpbmcgZm9yIGEgcmVndWxhclxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiBjb25zdCByZXN1bHQgPSBwaWNvbWF0Y2gucGFyc2UocGF0dGVyblssIG9wdGlvbnNdKTtcbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBwYXR0ZXJuYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHVzZWZ1bCBwcm9wZXJ0aWVzIGFuZCBvdXRwdXQgdG8gYmUgdXNlZCBhcyBhIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5wYXJzZSA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSByZXR1cm4gcGF0dGVybi5tYXAocCA9PiBwaWNvbWF0Y2gucGFyc2UocCwgb3B0aW9ucykpO1xuICByZXR1cm4gcGFyc2UocGF0dGVybiwgeyAuLi5vcHRpb25zLCBmYXN0cGF0aHM6IGZhbHNlIH0pO1xufTtcblxuLyoqXG4gKiBTY2FuIGEgZ2xvYiBwYXR0ZXJuIHRvIHNlcGFyYXRlIHRoZSBwYXR0ZXJuIGludG8gc2VnbWVudHMuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLnNjYW4oaW5wdXRbLCBvcHRpb25zXSk7XG4gKlxuICogY29uc3QgcmVzdWx0ID0gcGljb21hdGNoLnNjYW4oJyEuL2Zvby8qLmpzJyk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICogeyBwcmVmaXg6ICchLi8nLFxuICogICBpbnB1dDogJyEuL2Zvby8qLmpzJyxcbiAqICAgc3RhcnQ6IDMsXG4gKiAgIGJhc2U6ICdmb28nLFxuICogICBnbG9iOiAnKi5qcycsXG4gKiAgIGlzQnJhY2U6IGZhbHNlLFxuICogICBpc0JyYWNrZXQ6IGZhbHNlLFxuICogICBpc0dsb2I6IHRydWUsXG4gKiAgIGlzRXh0Z2xvYjogZmFsc2UsXG4gKiAgIGlzR2xvYnN0YXI6IGZhbHNlLFxuICogICBuZWdhdGVkOiB0cnVlIH1cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBpbnB1dGAgR2xvYiBwYXR0ZXJuIHRvIHNjYW4uXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgYW4gb2JqZWN0IHdpdGhcbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnNjYW4gPSAoaW5wdXQsIG9wdGlvbnMpID0+IHNjYW4oaW5wdXQsIG9wdGlvbnMpO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmcm9tIGEgcGFyc2VkIGdsb2IgcGF0dGVybi5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG4gKiBjb25zdCBzdGF0ZSA9IHBpY29tYXRjaC5wYXJzZSgnKi5qcycpO1xuICogLy8gcGljb21hdGNoLmNvbXBpbGVSZShzdGF0ZVssIG9wdGlvbnNdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhwaWNvbWF0Y2guY29tcGlsZVJlKHN0YXRlKSk7XG4gKiAvLz0+IC9eKD86KD8hXFwuKSg/PS4pW14vXSo/XFwuanMpJC9cbiAqIGBgYFxuICogQHBhcmFtIHtTdHJpbmd9IGBzdGF0ZWAgVGhlIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZSBgLnBhcnNlYCBtZXRob2QuXG4gKiBAcGFyYW0ge09iamVjdH0gYG9wdGlvbnNgXG4gKiBAcmV0dXJuIHtSZWdFeHB9IFJldHVybnMgYSByZWdleCBjcmVhdGVkIGZyb20gdGhlIGdpdmVuIHBhdHRlcm4uXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbnBpY29tYXRjaC5jb21waWxlUmUgPSAocGFyc2VkLCBvcHRpb25zLCByZXR1cm5PdXRwdXQgPSBmYWxzZSwgcmV0dXJuU3RhdGUgPSBmYWxzZSkgPT4ge1xuICBpZiAocmV0dXJuT3V0cHV0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHBhcnNlZC5vdXRwdXQ7XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uc3QgcHJlcGVuZCA9IG9wdHMuY29udGFpbnMgPyAnJyA6ICdeJztcbiAgY29uc3QgYXBwZW5kID0gb3B0cy5jb250YWlucyA/ICcnIDogJyQnO1xuXG4gIGxldCBzb3VyY2UgPSBgJHtwcmVwZW5kfSg/OiR7cGFyc2VkLm91dHB1dH0pJHthcHBlbmR9YDtcbiAgaWYgKHBhcnNlZCAmJiBwYXJzZWQubmVnYXRlZCA9PT0gdHJ1ZSkge1xuICAgIHNvdXJjZSA9IGBeKD8hJHtzb3VyY2V9KS4qJGA7XG4gIH1cblxuICBjb25zdCByZWdleCA9IHBpY29tYXRjaC50b1JlZ2V4KHNvdXJjZSwgb3B0aW9ucyk7XG4gIGlmIChyZXR1cm5TdGF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJlZ2V4LnN0YXRlID0gcGFyc2VkO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2V4O1xufTtcblxucGljb21hdGNoLm1ha2VSZSA9IChpbnB1dCwgb3B0aW9ucywgcmV0dXJuT3V0cHV0ID0gZmFsc2UsIHJldHVyblN0YXRlID0gZmFsc2UpID0+IHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBjb25zdCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IHBhcnNlZCA9IHsgbmVnYXRlZDogZmFsc2UsIGZhc3RwYXRoczogdHJ1ZSB9O1xuICBsZXQgcHJlZml4ID0gJyc7XG4gIGxldCBvdXRwdXQ7XG5cbiAgaWYgKGlucHV0LnN0YXJ0c1dpdGgoJy4vJykpIHtcbiAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDIpO1xuICAgIHByZWZpeCA9IHBhcnNlZC5wcmVmaXggPSAnLi8nO1xuICB9XG5cbiAgaWYgKG9wdHMuZmFzdHBhdGhzICE9PSBmYWxzZSAmJiAoaW5wdXRbMF0gPT09ICcuJyB8fCBpbnB1dFswXSA9PT0gJyonKSkge1xuICAgIG91dHB1dCA9IHBhcnNlLmZhc3RwYXRocyhpbnB1dCwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAob3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICBwYXJzZWQgPSBwYXJzZShpbnB1dCwgb3B0aW9ucyk7XG4gICAgcGFyc2VkLnByZWZpeCA9IHByZWZpeCArIChwYXJzZWQucHJlZml4IHx8ICcnKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWQub3V0cHV0ID0gb3V0cHV0O1xuICB9XG5cbiAgcmV0dXJuIHBpY29tYXRjaC5jb21waWxlUmUocGFyc2VkLCBvcHRpb25zLCByZXR1cm5PdXRwdXQsIHJldHVyblN0YXRlKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgcmVndWxhciBleHByZXNzaW9uIGZyb20gdGhlIGdpdmVuIHJlZ2V4IHNvdXJjZSBzdHJpbmcuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuICogLy8gcGljb21hdGNoLnRvUmVnZXgoc291cmNlWywgb3B0aW9uc10pO1xuICpcbiAqIGNvbnN0IHsgb3V0cHV0IH0gPSBwaWNvbWF0Y2gucGFyc2UoJyouanMnKTtcbiAqIGNvbnNvbGUubG9nKHBpY29tYXRjaC50b1JlZ2V4KG91dHB1dCkpO1xuICogLy89PiAvXig/Oig/IVxcLikoPz0uKVteL10qP1xcLmpzKSQvXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc291cmNlYCBSZWd1bGFyIGV4cHJlc3Npb24gc291cmNlIHN0cmluZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge1JlZ0V4cH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxucGljb21hdGNoLnRvUmVnZXggPSAoc291cmNlLCBvcHRpb25zKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoc291cmNlLCBvcHRzLmZsYWdzIHx8IChvcHRzLm5vY2FzZSA/ICdpJyA6ICcnKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZGVidWcgPT09IHRydWUpIHRocm93IGVycjtcbiAgICByZXR1cm4gLyReLztcbiAgfVxufTtcblxuLyoqXG4gKiBQaWNvbWF0Y2ggY29uc3RhbnRzLlxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5cbnBpY29tYXRjaC5jb25zdGFudHMgPSBjb25zdGFudHM7XG5cbi8qKlxuICogRXhwb3NlIFwicGljb21hdGNoXCJcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBpY29tYXRjaDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9waWNvbWF0Y2gnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCBzeXNQYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKTtcbmNvbnN0IHBpY29tYXRjaCA9IHJlcXVpcmUoJ3BpY29tYXRjaCcpO1xuXG5jb25zdCByZWFkZGlyID0gcHJvbWlzaWZ5KGZzLnJlYWRkaXIpO1xuY29uc3Qgc3RhdCA9IHByb21pc2lmeShmcy5zdGF0KTtcbmNvbnN0IGxzdGF0ID0gcHJvbWlzaWZ5KGZzLmxzdGF0KTtcbmNvbnN0IHJlYWxwYXRoID0gcHJvbWlzaWZ5KGZzLnJlYWxwYXRoKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBFbnRyeUluZm9cbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBwYXRoXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZnVsbFBhdGhcbiAqIEBwcm9wZXJ0eSB7ZnMuU3RhdHM9fSBzdGF0c1xuICogQHByb3BlcnR5IHtmcy5EaXJlbnQ9fSBkaXJlbnRcbiAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBiYXNlbmFtZVxuICovXG5cbmNvbnN0IEJBTkcgPSAnISc7XG5jb25zdCBOT1JNQUxfRkxPV19FUlJPUlMgPSBuZXcgU2V0KFsnRU5PRU5UJywgJ0VQRVJNJywgJ0VBQ0NFUycsICdFTE9PUCddKTtcbmNvbnN0IEZJTEVfVFlQRSA9ICdmaWxlcyc7XG5jb25zdCBESVJfVFlQRSA9ICdkaXJlY3Rvcmllcyc7XG5jb25zdCBGSUxFX0RJUl9UWVBFID0gJ2ZpbGVzX2RpcmVjdG9yaWVzJztcbmNvbnN0IEVWRVJZVEhJTkdfVFlQRSA9ICdhbGwnO1xuY29uc3QgQUxMX1RZUEVTID0gW0ZJTEVfVFlQRSwgRElSX1RZUEUsIEZJTEVfRElSX1RZUEUsIEVWRVJZVEhJTkdfVFlQRV07XG5cbmNvbnN0IGlzTm9ybWFsRmxvd0Vycm9yID0gZXJyb3IgPT4gTk9STUFMX0ZMT1dfRVJST1JTLmhhcyhlcnJvci5jb2RlKTtcblxuY29uc3Qgbm9ybWFsaXplRmlsdGVyID0gZmlsdGVyID0+IHtcbiAgaWYgKGZpbHRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gZmlsdGVyO1xuXG4gIGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGdsb2IgPSBwaWNvbWF0Y2goZmlsdGVyLnRyaW0oKSk7XG4gICAgcmV0dXJuIGVudHJ5ID0+IGdsb2IoZW50cnkuYmFzZW5hbWUpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgIGNvbnN0IHBvc2l0aXZlID0gW107XG4gICAgY29uc3QgbmVnYXRpdmUgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gaXRlbS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5jaGFyQXQoMCkgPT09IEJBTkcpIHtcbiAgICAgICAgbmVnYXRpdmUucHVzaChwaWNvbWF0Y2godHJpbW1lZC5zbGljZSgxKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zaXRpdmUucHVzaChwaWNvbWF0Y2godHJpbW1lZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWdhdGl2ZS5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocG9zaXRpdmUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZW50cnkgPT5cbiAgICAgICAgICBwb3NpdGl2ZS5zb21lKGYgPT4gZihlbnRyeS5iYXNlbmFtZSkpICYmICFuZWdhdGl2ZS5zb21lKGYgPT4gZihlbnRyeS5iYXNlbmFtZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJ5ID0+ICFuZWdhdGl2ZS5zb21lKGYgPT4gZihlbnRyeS5iYXNlbmFtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkgPT4gcG9zaXRpdmUuc29tZShmID0+IGYoZW50cnkuYmFzZW5hbWUpKTtcbiAgfVxufTtcblxuY2xhc3MgUmVhZGRpcnBTdHJlYW0gZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvb3Q6ICcuJyxcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgICBmaWxlRmlsdGVyOiAocGF0aCkgPT4gdHJ1ZSxcbiAgICAgIGRpcmVjdG9yeUZpbHRlcjogKHBhdGgpID0+IHRydWUsXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG4gICAgICB0eXBlOiBGSUxFX1RZUEUsXG4gICAgICBsc3RhdDogZmFsc2UsXG4gICAgICBkZXB0aDogMjE0NzQ4MzY0OCxcbiAgICAgIGFsd2F5c1N0YXQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHtcbiAgICAgIG9iamVjdE1vZGU6IHRydWUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIGhpZ2hXYXRlck1hcms6IG9wdGlvbnMuaGlnaFdhdGVyTWFyayB8fCA0MDk2XG4gICAgfSk7XG4gICAgY29uc3Qgb3B0cyA9IHsgLi4uUmVhZGRpcnBTdHJlYW0uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICBjb25zdCB7IHJvb3QsIHR5cGUgfSA9IG9wdHM7XG5cbiAgICB0aGlzLl9maWxlRmlsdGVyID0gbm9ybWFsaXplRmlsdGVyKG9wdHMuZmlsZUZpbHRlcik7XG4gICAgdGhpcy5fZGlyZWN0b3J5RmlsdGVyID0gbm9ybWFsaXplRmlsdGVyKG9wdHMuZGlyZWN0b3J5RmlsdGVyKTtcblxuICAgIGNvbnN0IHN0YXRNZXRob2QgPSBvcHRzLmxzdGF0ID8gbHN0YXQgOiBzdGF0O1xuICAgIC8vIFVzZSBiaWdpbnQgc3RhdHMgaWYgaXQncyB3aW5kb3dzIGFuZCBzdGF0KCkgc3VwcG9ydHMgb3B0aW9ucyAobm9kZSAxMCspLlxuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInICYmIHN0YXQubGVuZ3RoID09PSAzKSB7XG4gICAgICB0aGlzLl9zdGF0ID0gcGF0aCA9PiBzdGF0TWV0aG9kKHBhdGgsIHsgYmlnaW50OiB0cnVlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zdGF0ID0gc3RhdE1ldGhvZDtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXhEZXB0aCA9IG9wdHMuZGVwdGg7XG4gICAgdGhpcy5fd2FudHNEaXIgPSBbRElSX1RZUEUsIEZJTEVfRElSX1RZUEUsIEVWRVJZVEhJTkdfVFlQRV0uaW5jbHVkZXModHlwZSk7XG4gICAgdGhpcy5fd2FudHNGaWxlID0gW0ZJTEVfVFlQRSwgRklMRV9ESVJfVFlQRSwgRVZFUllUSElOR19UWVBFXS5pbmNsdWRlcyh0eXBlKTtcbiAgICB0aGlzLl93YW50c0V2ZXJ5dGhpbmcgPSB0eXBlID09PSBFVkVSWVRISU5HX1RZUEU7XG4gICAgdGhpcy5fcm9vdCA9IHN5c1BhdGgucmVzb2x2ZShyb290KTtcbiAgICB0aGlzLl9pc0RpcmVudCA9ICgnRGlyZW50JyBpbiBmcykgJiYgIW9wdHMuYWx3YXlzU3RhdDtcbiAgICB0aGlzLl9zdGF0c1Byb3AgPSB0aGlzLl9pc0RpcmVudCA/ICdkaXJlbnQnIDogJ3N0YXRzJztcbiAgICB0aGlzLl9yZE9wdGlvbnMgPSB7IGVuY29kaW5nOiAndXRmOCcsIHdpdGhGaWxlVHlwZXM6IHRoaXMuX2lzRGlyZW50IH07XG5cbiAgICAvLyBMYXVuY2ggc3RyZWFtIHdpdGggb25lIHBhcmVudCwgdGhlIHJvb3QgZGlyLlxuICAgIHRoaXMucGFyZW50cyA9IFt0aGlzLl9leHBsb3JlRGlyKHJvb3QsIDEpXTtcbiAgICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIF9yZWFkKGJhdGNoKSB7XG4gICAgaWYgKHRoaXMucmVhZGluZykgcmV0dXJuO1xuICAgIHRoaXMucmVhZGluZyA9IHRydWU7XG5cbiAgICB0cnkge1xuICAgICAgd2hpbGUgKCF0aGlzLmRlc3Ryb3llZCAmJiBiYXRjaCA+IDApIHtcbiAgICAgICAgY29uc3QgeyBwYXRoLCBkZXB0aCwgZmlsZXMgPSBbXSB9ID0gdGhpcy5wYXJlbnQgfHwge307XG5cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzbGljZSA9IGZpbGVzLnNwbGljZSgwLCBiYXRjaCkubWFwKGRpcmVudCA9PiB0aGlzLl9mb3JtYXRFbnRyeShkaXJlbnQsIHBhdGgpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGF3YWl0IFByb21pc2UuYWxsKHNsaWNlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5VHlwZSA9IGF3YWl0IHRoaXMuX2dldEVudHJ5VHlwZShlbnRyeSk7XG4gICAgICAgICAgICBpZiAoZW50cnlUeXBlID09PSAnZGlyZWN0b3J5JyAmJiB0aGlzLl9kaXJlY3RvcnlGaWx0ZXIoZW50cnkpKSB7XG4gICAgICAgICAgICAgIGlmIChkZXB0aCA8PSB0aGlzLl9tYXhEZXB0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50cy5wdXNoKHRoaXMuX2V4cGxvcmVEaXIoZW50cnkuZnVsbFBhdGgsIGRlcHRoICsgMSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3dhbnRzRGlyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICBiYXRjaC0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChlbnRyeVR5cGUgPT09ICdmaWxlJyB8fCB0aGlzLl9pbmNsdWRlQXNGaWxlKGVudHJ5KSkgJiYgdGhpcy5fZmlsZUZpbHRlcihlbnRyeSkpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3dhbnRzRmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgICAgYmF0Y2gtLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudHMucG9wKCk7XG4gICAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHVzaChudWxsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudCA9IGF3YWl0IHBhcmVudDtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnJlYWRpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZXhwbG9yZURpcihwYXRoLCBkZXB0aCkge1xuICAgIGxldCBmaWxlcztcbiAgICB0cnkge1xuICAgICAgZmlsZXMgPSBhd2FpdCByZWFkZGlyKHBhdGgsIHRoaXMuX3JkT3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuX29uRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4ge2ZpbGVzLCBkZXB0aCwgcGF0aH07XG4gIH1cblxuICBhc3luYyBfZm9ybWF0RW50cnkoZGlyZW50LCBwYXRoKSB7XG4gICAgbGV0IGVudHJ5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlbmFtZSA9IHRoaXMuX2lzRGlyZW50ID8gZGlyZW50Lm5hbWUgOiBkaXJlbnQ7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHN5c1BhdGgucmVzb2x2ZShzeXNQYXRoLmpvaW4ocGF0aCwgYmFzZW5hbWUpKTtcbiAgICAgIGVudHJ5ID0ge3BhdGg6IHN5c1BhdGgucmVsYXRpdmUodGhpcy5fcm9vdCwgZnVsbFBhdGgpLCBmdWxsUGF0aCwgYmFzZW5hbWV9O1xuICAgICAgZW50cnlbdGhpcy5fc3RhdHNQcm9wXSA9IHRoaXMuX2lzRGlyZW50ID8gZGlyZW50IDogYXdhaXQgdGhpcy5fc3RhdChmdWxsUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9vbkVycm9yKGVycik7XG4gICAgfVxuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIF9vbkVycm9yKGVycikge1xuICAgIGlmIChpc05vcm1hbEZsb3dFcnJvcihlcnIpICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgdGhpcy5lbWl0KCd3YXJuJywgZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXN0cm95KGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2dldEVudHJ5VHlwZShlbnRyeSkge1xuICAgIC8vIGVudHJ5IG1heSBiZSB1bmRlZmluZWQsIGJlY2F1c2UgYSB3YXJuaW5nIG9yIGFuIGVycm9yIHdlcmUgZW1pdHRlZFxuICAgIC8vIGFuZCB0aGUgc3RhdHNQcm9wIGlzIHVuZGVmaW5lZFxuICAgIGNvbnN0IHN0YXRzID0gZW50cnkgJiYgZW50cnlbdGhpcy5fc3RhdHNQcm9wXTtcbiAgICBpZiAoIXN0YXRzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgcmV0dXJuICdmaWxlJztcbiAgICB9XG4gICAgaWYgKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiAnZGlyZWN0b3J5JztcbiAgICB9XG4gICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICAgIGNvbnN0IGZ1bGwgPSBlbnRyeS5mdWxsUGF0aDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5UmVhbFBhdGggPSBhd2FpdCByZWFscGF0aChmdWxsKTtcbiAgICAgICAgY29uc3QgZW50cnlSZWFsUGF0aFN0YXRzID0gYXdhaXQgbHN0YXQoZW50cnlSZWFsUGF0aCk7XG4gICAgICAgIGlmIChlbnRyeVJlYWxQYXRoU3RhdHMuaXNGaWxlKCkpIHtcbiAgICAgICAgICByZXR1cm4gJ2ZpbGUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeVJlYWxQYXRoU3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGNvbnN0IGxlbiA9IGVudHJ5UmVhbFBhdGgubGVuZ3RoO1xuICAgICAgICAgIGlmIChmdWxsLnN0YXJ0c1dpdGgoZW50cnlSZWFsUGF0aCkgJiYgZnVsbC5zdWJzdHIobGVuLCAxKSA9PT0gc3lzUGF0aC5zZXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vbkVycm9yKG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYENpcmN1bGFyIHN5bWxpbmsgZGV0ZWN0ZWQ6IFwiJHtmdWxsfVwiIHBvaW50cyB0byBcIiR7ZW50cnlSZWFsUGF0aH1cImBcbiAgICAgICAgICAgICkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJ2RpcmVjdG9yeSc7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuX29uRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9pbmNsdWRlQXNGaWxlKGVudHJ5KSB7XG4gICAgY29uc3Qgc3RhdHMgPSBlbnRyeSAmJiBlbnRyeVt0aGlzLl9zdGF0c1Byb3BdO1xuXG4gICAgcmV0dXJuIHN0YXRzICYmIHRoaXMuX3dhbnRzRXZlcnl0aGluZyAmJiAhc3RhdHMuaXNEaXJlY3RvcnkoKTtcbiAgfVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFJlYWRkaXJwQXJndW1lbnRzXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9uPX0gZmlsZUZpbHRlclxuICogQHByb3BlcnR5IHtGdW5jdGlvbj19IGRpcmVjdG9yeUZpbHRlclxuICogQHByb3BlcnR5IHtTdHJpbmc9fSB0eXBlXG4gKiBAcHJvcGVydHkge051bWJlcj19IGRlcHRoXG4gKiBAcHJvcGVydHkge1N0cmluZz19IHJvb3RcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbj19IGxzdGF0XG4gKiBAcHJvcGVydHkge0Jvb2xlYW49fSBiaWdpbnRcbiAqL1xuXG4vKipcbiAqIE1haW4gZnVuY3Rpb24gd2hpY2ggZW5kcyB1cCBjYWxsaW5nIHJlYWRkaXJSZWMgYW5kIHJlYWRzIGFsbCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gZ2l2ZW4gcm9vdCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7U3RyaW5nfSByb290IFJvb3QgZGlyZWN0b3J5XG4gKiBAcGFyYW0ge1JlYWRkaXJwQXJndW1lbnRzPX0gb3B0aW9ucyBPcHRpb25zIHRvIHNwZWNpZnkgcm9vdCAoc3RhcnQgZGlyZWN0b3J5KSwgZmlsdGVycyBhbmQgcmVjdXJzaW9uIGRlcHRoXG4gKi9cbmNvbnN0IHJlYWRkaXJwID0gKHJvb3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBsZXQgdHlwZSA9IG9wdGlvbnMuZW50cnlUeXBlIHx8IG9wdGlvbnMudHlwZTtcbiAgaWYgKHR5cGUgPT09ICdib3RoJykgdHlwZSA9IEZJTEVfRElSX1RZUEU7IC8vIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5XG4gIGlmICh0eXBlKSBvcHRpb25zLnR5cGUgPSB0eXBlO1xuICBpZiAoIXJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlYWRkaXJwOiByb290IGFyZ3VtZW50IGlzIHJlcXVpcmVkLiBVc2FnZTogcmVhZGRpcnAocm9vdCwgb3B0aW9ucyknKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygcm9vdCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWFkZGlycDogcm9vdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiBVc2FnZTogcmVhZGRpcnAocm9vdCwgb3B0aW9ucyknKTtcbiAgfSBlbHNlIGlmICh0eXBlICYmICFBTExfVFlQRVMuaW5jbHVkZXModHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHJlYWRkaXJwOiBJbnZhbGlkIHR5cGUgcGFzc2VkLiBVc2Ugb25lIG9mICR7QUxMX1RZUEVTLmpvaW4oJywgJyl9YCk7XG4gIH1cblxuICBvcHRpb25zLnJvb3QgPSByb290O1xuICByZXR1cm4gbmV3IFJlYWRkaXJwU3RyZWFtKG9wdGlvbnMpO1xufTtcblxuY29uc3QgcmVhZGRpcnBQcm9taXNlID0gKHJvb3QsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gW107XG4gICAgcmVhZGRpcnAocm9vdCwgb3B0aW9ucylcbiAgICAgIC5vbignZGF0YScsIGVudHJ5ID0+IGZpbGVzLnB1c2goZW50cnkpKVxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKGZpbGVzKSlcbiAgICAgIC5vbignZXJyb3InLCBlcnJvciA9PiByZWplY3QoZXJyb3IpKTtcbiAgfSk7XG59O1xuXG5yZWFkZGlycC5wcm9taXNlID0gcmVhZGRpcnBQcm9taXNlO1xucmVhZGRpcnAuUmVhZGRpcnBTdHJlYW0gPSBSZWFkZGlycFN0cmVhbTtcbnJlYWRkaXJwLmRlZmF1bHQgPSByZWFkZGlycDtcblxubW9kdWxlLmV4cG9ydHMgPSByZWFkZGlycDtcbiIsIi8qIVxuICogbm9ybWFsaXplLXBhdGggPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L25vcm1hbGl6ZS1wYXRoPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE4LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHBhdGgsIHN0cmlwVHJhaWxpbmcpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIHBhdGggdG8gYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmIChwYXRoID09PSAnXFxcXCcgfHwgcGF0aCA9PT0gJy8nKSByZXR1cm4gJy8nO1xuXG4gIHZhciBsZW4gPSBwYXRoLmxlbmd0aDtcbiAgaWYgKGxlbiA8PSAxKSByZXR1cm4gcGF0aDtcblxuICAvLyBlbnN1cmUgdGhhdCB3aW4zMiBuYW1lc3BhY2VzIGhhcyB0d28gbGVhZGluZyBzbGFzaGVzLCBzbyB0aGF0IHRoZSBwYXRoIGlzXG4gIC8vIGhhbmRsZWQgcHJvcGVybHkgYnkgdGhlIHdpbjMyIHZlcnNpb24gb2YgcGF0aC5wYXJzZSgpIGFmdGVyIGJlaW5nIG5vcm1hbGl6ZWRcbiAgLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNuYW1lc3BhY2VzXG4gIHZhciBwcmVmaXggPSAnJztcbiAgaWYgKGxlbiA+IDQgJiYgcGF0aFszXSA9PT0gJ1xcXFwnKSB7XG4gICAgdmFyIGNoID0gcGF0aFsyXTtcbiAgICBpZiAoKGNoID09PSAnPycgfHwgY2ggPT09ICcuJykgJiYgcGF0aC5zbGljZSgwLCAyKSA9PT0gJ1xcXFxcXFxcJykge1xuICAgICAgcGF0aCA9IHBhdGguc2xpY2UoMik7XG4gICAgICBwcmVmaXggPSAnLy8nO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzZWdzID0gcGF0aC5zcGxpdCgvWy9cXFxcXSsvKTtcbiAgaWYgKHN0cmlwVHJhaWxpbmcgIT09IGZhbHNlICYmIHNlZ3Nbc2Vncy5sZW5ndGggLSAxXSA9PT0gJycpIHtcbiAgICBzZWdzLnBvcCgpO1xuICB9XG4gIHJldHVybiBwcmVmaXggKyBzZWdzLmpvaW4oJy8nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuY29uc3QgcGljb21hdGNoID0gcmVxdWlyZSgncGljb21hdGNoJyk7XG5jb25zdCBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7KHRlc3RTdHJpbmc6IHN0cmluZykgPT4gYm9vbGVhbn0gQW55bWF0Y2hGblxuICogQHR5cGVkZWYge3N0cmluZ3xSZWdFeHB8QW55bWF0Y2hGbn0gQW55bWF0Y2hQYXR0ZXJuXG4gKiBAdHlwZWRlZiB7QW55bWF0Y2hQYXR0ZXJufEFueW1hdGNoUGF0dGVybltdfSBBbnltYXRjaE1hdGNoZXJcbiAqL1xuY29uc3QgQkFORyA9ICchJztcbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IHtyZXR1cm5JbmRleDogZmFsc2V9O1xuY29uc3QgYXJyaWZ5ID0gKGl0ZW0pID0+IEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW2l0ZW1dO1xuXG4vKipcbiAqIEBwYXJhbSB7QW55bWF0Y2hQYXR0ZXJufSBtYXRjaGVyXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHJldHVybnMge0FueW1hdGNoRm59XG4gKi9cbmNvbnN0IGNyZWF0ZVBhdHRlcm4gPSAobWF0Y2hlciwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2hlcjtcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgZ2xvYiA9IHBpY29tYXRjaChtYXRjaGVyLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKHN0cmluZykgPT4gbWF0Y2hlciA9PT0gc3RyaW5nIHx8IGdsb2Ioc3RyaW5nKTtcbiAgfVxuICBpZiAobWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiAoc3RyaW5nKSA9PiBtYXRjaGVyLnRlc3Qoc3RyaW5nKTtcbiAgfVxuICByZXR1cm4gKHN0cmluZykgPT4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8RnVuY3Rpb24+fSBwYXR0ZXJuc1xuICogQHBhcmFtIHtBcnJheTxGdW5jdGlvbj59IG5lZ1BhdHRlcm5zXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gYXJnc1xuICogQHBhcmFtIHtCb29sZWFufSByZXR1cm5JbmRleFxuICogQHJldHVybnMge2Jvb2xlYW58bnVtYmVyfVxuICovXG5jb25zdCBtYXRjaFBhdHRlcm5zID0gKHBhdHRlcm5zLCBuZWdQYXR0ZXJucywgYXJncywgcmV0dXJuSW5kZXgpID0+IHtcbiAgY29uc3QgaXNMaXN0ID0gQXJyYXkuaXNBcnJheShhcmdzKTtcbiAgY29uc3QgX3BhdGggPSBpc0xpc3QgPyBhcmdzWzBdIDogYXJncztcbiAgaWYgKCFpc0xpc3QgJiYgdHlwZW9mIF9wYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FueW1hdGNoOiBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZzogZ290ICcgK1xuICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKF9wYXRoKSlcbiAgfVxuICBjb25zdCBwYXRoID0gbm9ybWFsaXplUGF0aChfcGF0aCk7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5lZ1BhdHRlcm5zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IG5nbG9iID0gbmVnUGF0dGVybnNbaW5kZXhdO1xuICAgIGlmIChuZ2xvYihwYXRoKSkge1xuICAgICAgcmV0dXJuIHJldHVybkluZGV4ID8gLTEgOiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBhcHBsaWVkID0gaXNMaXN0ICYmIFtwYXRoXS5jb25jYXQoYXJncy5zbGljZSgxKSk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXR0ZXJucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBwYXR0ZXJuID0gcGF0dGVybnNbaW5kZXhdO1xuICAgIGlmIChpc0xpc3QgPyBwYXR0ZXJuKC4uLmFwcGxpZWQpIDogcGF0dGVybihwYXRoKSkge1xuICAgICAgcmV0dXJuIHJldHVybkluZGV4ID8gaW5kZXggOiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXR1cm5JbmRleCA/IC0xIDogZmFsc2U7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7QW55bWF0Y2hNYXRjaGVyfSBtYXRjaGVyc1xuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHRlc3RTdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJucyB7Ym9vbGVhbnxudW1iZXJ8RnVuY3Rpb259XG4gKi9cbmNvbnN0IGFueW1hdGNoID0gKG1hdGNoZXJzLCB0ZXN0U3RyaW5nLCBvcHRpb25zID0gREVGQVVMVF9PUFRJT05TKSA9PiB7XG4gIGlmIChtYXRjaGVycyA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYW55bWF0Y2g6IHNwZWNpZnkgZmlyc3QgYXJndW1lbnQnKTtcbiAgfVxuICBjb25zdCBvcHRzID0gdHlwZW9mIG9wdGlvbnMgPT09ICdib29sZWFuJyA/IHtyZXR1cm5JbmRleDogb3B0aW9uc30gOiBvcHRpb25zO1xuICBjb25zdCByZXR1cm5JbmRleCA9IG9wdHMucmV0dXJuSW5kZXggfHwgZmFsc2U7XG5cbiAgLy8gRWFybHkgY2FjaGUgZm9yIG1hdGNoZXJzLlxuICBjb25zdCBtdGNoZXJzID0gYXJyaWZ5KG1hdGNoZXJzKTtcbiAgY29uc3QgbmVnYXRlZEdsb2JzID0gbXRjaGVyc1xuICAgIC5maWx0ZXIoaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgaXRlbS5jaGFyQXQoMCkgPT09IEJBTkcpXG4gICAgLm1hcChpdGVtID0+IGl0ZW0uc2xpY2UoMSkpXG4gICAgLm1hcChpdGVtID0+IHBpY29tYXRjaChpdGVtLCBvcHRzKSk7XG4gIGNvbnN0IHBhdHRlcm5zID0gbXRjaGVycy5tYXAobWF0Y2hlciA9PiBjcmVhdGVQYXR0ZXJuKG1hdGNoZXIsIG9wdHMpKTtcblxuICBpZiAodGVzdFN0cmluZyA9PSBudWxsKSB7XG4gICAgcmV0dXJuICh0ZXN0U3RyaW5nLCByaSA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCByZXR1cm5JbmRleCA9IHR5cGVvZiByaSA9PT0gJ2Jvb2xlYW4nID8gcmkgOiBmYWxzZTtcbiAgICAgIHJldHVybiBtYXRjaFBhdHRlcm5zKHBhdHRlcm5zLCBuZWdhdGVkR2xvYnMsIHRlc3RTdHJpbmcsIHJldHVybkluZGV4KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hQYXR0ZXJucyhwYXR0ZXJucywgbmVnYXRlZEdsb2JzLCB0ZXN0U3RyaW5nLCByZXR1cm5JbmRleCk7XG59O1xuXG5hbnltYXRjaC5kZWZhdWx0ID0gYW55bWF0Y2g7XG5tb2R1bGUuZXhwb3J0cyA9IGFueW1hdGNoO1xuIiwiLyohXG4gKiBpcy1leHRnbG9iIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1leHRnbG9iPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE2LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRXh0Z2xvYihzdHIpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnIHx8IHN0ciA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgbWF0Y2g7XG4gIHdoaWxlICgobWF0Y2ggPSAvKFxcXFwpLnwoW0A/ISsqXVxcKC4qXFwpKS9nLmV4ZWMoc3RyKSkpIHtcbiAgICBpZiAobWF0Y2hbMl0pIHJldHVybiB0cnVlO1xuICAgIHN0ciA9IHN0ci5zbGljZShtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiLyohXG4gKiBpcy1nbG9iIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9pcy1nbG9iPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE3LCBKb24gU2NobGlua2VydC5cbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG52YXIgaXNFeHRnbG9iID0gcmVxdWlyZSgnaXMtZXh0Z2xvYicpO1xudmFyIGNoYXJzID0geyAneyc6ICd9JywgJygnOiAnKScsICdbJzogJ10nfTtcbnZhciBzdHJpY3RSZWdleCA9IC9cXFxcKC4pfCheIXxcXCp8W1xcXS4rKV1cXD98XFxbW15cXFxcXFxdXStcXF18XFx7W15cXFxcfV0rXFx9fFxcKFxcP1s6IT1dW15cXFxcKV0rXFwpfFxcKFtefF0rXFx8W15cXFxcKV0rXFwpKS87XG52YXIgcmVsYXhlZFJlZ2V4ID0gL1xcXFwoLil8KF4hfFsqP3t9KClbXFxdXXxcXChcXD8pLztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0dsb2Ioc3RyLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBzdHIgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRXh0Z2xvYihzdHIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgcmVnZXggPSBzdHJpY3RSZWdleDtcbiAgdmFyIG1hdGNoO1xuXG4gIC8vIG9wdGlvbmFsbHkgcmVsYXggcmVnZXhcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zdHJpY3QgPT09IGZhbHNlKSB7XG4gICAgcmVnZXggPSByZWxheGVkUmVnZXg7XG4gIH1cblxuICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzdHIpKSkge1xuICAgIGlmIChtYXRjaFsyXSkgcmV0dXJuIHRydWU7XG4gICAgdmFyIGlkeCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXG4gICAgLy8gaWYgYW4gb3BlbiBicmFja2V0L2JyYWNlL3BhcmVuIGlzIGVzY2FwZWQsXG4gICAgLy8gc2V0IHRoZSBpbmRleCB0byB0aGUgbmV4dCBjbG9zaW5nIGNoYXJhY3RlclxuICAgIHZhciBvcGVuID0gbWF0Y2hbMV07XG4gICAgdmFyIGNsb3NlID0gb3BlbiA/IGNoYXJzW29wZW5dIDogbnVsbDtcbiAgICBpZiAob3BlbiAmJiBjbG9zZSkge1xuICAgICAgdmFyIG4gPSBzdHIuaW5kZXhPZihjbG9zZSwgaWR4KTtcbiAgICAgIGlmIChuICE9PSAtMSkge1xuICAgICAgICBpZHggPSBuICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdHIgPSBzdHIuc2xpY2UoaWR4KTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNHbG9iID0gcmVxdWlyZSgnaXMtZ2xvYicpO1xudmFyIHBhdGhQb3NpeERpcm5hbWUgPSByZXF1aXJlKCdwYXRoJykucG9zaXguZGlybmFtZTtcbnZhciBpc1dpbjMyID0gcmVxdWlyZSgnb3MnKS5wbGF0Zm9ybSgpID09PSAnd2luMzInO1xuXG52YXIgc2xhc2ggPSAnLyc7XG52YXIgYmFja3NsYXNoID0gL1xcXFwvZztcbnZhciBlbmNsb3N1cmUgPSAvW1xce1xcW10uKltcXC9dKi4qW1xcfVxcXV0kLztcbnZhciBnbG9iYnkgPSAvKF58W15cXFxcXSkoW1xce1xcW118XFwoW15cXCldKyQpLztcbnZhciBlc2NhcGVkID0gL1xcXFwoW1xcIVxcKlxcP1xcfFxcW1xcXVxcKFxcKVxce1xcfV0pL2c7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtPYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZmxpcEJhY2tzbGFzaGVzPXRydWVdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2xvYlBhcmVudChzdHIsIG9wdHMpIHtcbiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgZmxpcEJhY2tzbGFzaGVzOiB0cnVlIH0sIG9wdHMpO1xuXG4gIC8vIGZsaXAgd2luZG93cyBwYXRoIHNlcGFyYXRvcnNcbiAgaWYgKG9wdGlvbnMuZmxpcEJhY2tzbGFzaGVzICYmIGlzV2luMzIgJiYgc3RyLmluZGV4T2Yoc2xhc2gpIDwgMCkge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKGJhY2tzbGFzaCwgc2xhc2gpO1xuICB9XG5cbiAgLy8gc3BlY2lhbCBjYXNlIGZvciBzdHJpbmdzIGVuZGluZyBpbiBlbmNsb3N1cmUgY29udGFpbmluZyBwYXRoIHNlcGFyYXRvclxuICBpZiAoZW5jbG9zdXJlLnRlc3Qoc3RyKSkge1xuICAgIHN0ciArPSBzbGFzaDtcbiAgfVxuXG4gIC8vIHByZXNlcnZlcyBmdWxsIHBhdGggaW4gY2FzZSBvZiB0cmFpbGluZyBwYXRoIHNlcGFyYXRvclxuICBzdHIgKz0gJ2EnO1xuXG4gIC8vIHJlbW92ZSBwYXRoIHBhcnRzIHRoYXQgYXJlIGdsb2JieVxuICBkbyB7XG4gICAgc3RyID0gcGF0aFBvc2l4RGlybmFtZShzdHIpO1xuICB9IHdoaWxlIChpc0dsb2Ioc3RyKSB8fCBnbG9iYnkudGVzdChzdHIpKTtcblxuICAvLyByZW1vdmUgZXNjYXBlIGNoYXJzIGFuZCByZXR1cm4gcmVzdWx0XG4gIHJldHVybiBzdHIucmVwbGFjZShlc2NhcGVkLCAnJDEnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuaXNJbnRlZ2VyID0gbnVtID0+IHtcbiAgaWYgKHR5cGVvZiBudW0gPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIobnVtKTtcbiAgfVxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3N0cmluZycgJiYgbnVtLnRyaW0oKSAhPT0gJycpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIobnVtKSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBGaW5kIGEgbm9kZSBvZiB0aGUgZ2l2ZW4gdHlwZVxuICovXG5cbmV4cG9ydHMuZmluZCA9IChub2RlLCB0eXBlKSA9PiBub2RlLm5vZGVzLmZpbmQobm9kZSA9PiBub2RlLnR5cGUgPT09IHR5cGUpO1xuXG4vKipcbiAqIEZpbmQgYSBub2RlIG9mIHRoZSBnaXZlbiB0eXBlXG4gKi9cblxuZXhwb3J0cy5leGNlZWRzTGltaXQgPSAobWluLCBtYXgsIHN0ZXAgPSAxLCBsaW1pdCkgPT4ge1xuICBpZiAobGltaXQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmICghZXhwb3J0cy5pc0ludGVnZXIobWluKSB8fCAhZXhwb3J0cy5pc0ludGVnZXIobWF4KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKChOdW1iZXIobWF4KSAtIE51bWJlcihtaW4pKSAvIE51bWJlcihzdGVwKSkgPj0gbGltaXQ7XG59O1xuXG4vKipcbiAqIEVzY2FwZSB0aGUgZ2l2ZW4gbm9kZSB3aXRoICdcXFxcJyBiZWZvcmUgbm9kZS52YWx1ZVxuICovXG5cbmV4cG9ydHMuZXNjYXBlTm9kZSA9IChibG9jaywgbiA9IDAsIHR5cGUpID0+IHtcbiAgbGV0IG5vZGUgPSBibG9jay5ub2Rlc1tuXTtcbiAgaWYgKCFub2RlKSByZXR1cm47XG5cbiAgaWYgKCh0eXBlICYmIG5vZGUudHlwZSA9PT0gdHlwZSkgfHwgbm9kZS50eXBlID09PSAnb3BlbicgfHwgbm9kZS50eXBlID09PSAnY2xvc2UnKSB7XG4gICAgaWYgKG5vZGUuZXNjYXBlZCAhPT0gdHJ1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9ICdcXFxcJyArIG5vZGUudmFsdWU7XG4gICAgICBub2RlLmVzY2FwZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGJyYWNlIG5vZGUgc2hvdWxkIGJlIGVuY2xvc2VkIGluIGxpdGVyYWwgYnJhY2VzXG4gKi9cblxuZXhwb3J0cy5lbmNsb3NlQnJhY2UgPSBub2RlID0+IHtcbiAgaWYgKG5vZGUudHlwZSAhPT0gJ2JyYWNlJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoKG5vZGUuY29tbWFzID4+IDAgKyBub2RlLnJhbmdlcyA+PiAwKSA9PT0gMCkge1xuICAgIG5vZGUuaW52YWxpZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBicmFjZSBub2RlIGlzIGludmFsaWQuXG4gKi9cblxuZXhwb3J0cy5pc0ludmFsaWRCcmFjZSA9IGJsb2NrID0+IHtcbiAgaWYgKGJsb2NrLnR5cGUgIT09ICdicmFjZScpIHJldHVybiBmYWxzZTtcbiAgaWYgKGJsb2NrLmludmFsaWQgPT09IHRydWUgfHwgYmxvY2suZG9sbGFyKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKChibG9jay5jb21tYXMgPj4gMCArIGJsb2NrLnJhbmdlcyA+PiAwKSA9PT0gMCkge1xuICAgIGJsb2NrLmludmFsaWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChibG9jay5vcGVuICE9PSB0cnVlIHx8IGJsb2NrLmNsb3NlICE9PSB0cnVlKSB7XG4gICAgYmxvY2suaW52YWxpZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBub2RlIGlzIGFuIG9wZW4gb3IgY2xvc2Ugbm9kZVxuICovXG5cbmV4cG9ydHMuaXNPcGVuT3JDbG9zZSA9IG5vZGUgPT4ge1xuICBpZiAobm9kZS50eXBlID09PSAnb3BlbicgfHwgbm9kZS50eXBlID09PSAnY2xvc2UnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG5vZGUub3BlbiA9PT0gdHJ1ZSB8fCBub2RlLmNsb3NlID09PSB0cnVlO1xufTtcblxuLyoqXG4gKiBSZWR1Y2UgYW4gYXJyYXkgb2YgdGV4dCBub2Rlcy5cbiAqL1xuXG5leHBvcnRzLnJlZHVjZSA9IG5vZGVzID0+IG5vZGVzLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gIGlmIChub2RlLnR5cGUgPT09ICd0ZXh0JykgYWNjLnB1c2gobm9kZS52YWx1ZSk7XG4gIGlmIChub2RlLnR5cGUgPT09ICdyYW5nZScpIG5vZGUudHlwZSA9ICd0ZXh0JztcbiAgcmV0dXJuIGFjYztcbn0sIFtdKTtcblxuLyoqXG4gKiBGbGF0dGVuIGFuIGFycmF5XG4gKi9cblxuZXhwb3J0cy5mbGF0dGVuID0gKC4uLmFyZ3MpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGNvbnN0IGZsYXQgPSBhcnIgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZWxlID0gYXJyW2ldO1xuICAgICAgQXJyYXkuaXNBcnJheShlbGUpID8gZmxhdChlbGUsIHJlc3VsdCkgOiBlbGUgIT09IHZvaWQgMCAmJiByZXN1bHQucHVzaChlbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBmbGF0KGFyZ3MpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKGFzdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGxldCBzdHJpbmdpZnkgPSAobm9kZSwgcGFyZW50ID0ge30pID0+IHtcbiAgICBsZXQgaW52YWxpZEJsb2NrID0gb3B0aW9ucy5lc2NhcGVJbnZhbGlkICYmIHV0aWxzLmlzSW52YWxpZEJyYWNlKHBhcmVudCk7XG4gICAgbGV0IGludmFsaWROb2RlID0gbm9kZS5pbnZhbGlkID09PSB0cnVlICYmIG9wdGlvbnMuZXNjYXBlSW52YWxpZCA9PT0gdHJ1ZTtcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgaWYgKChpbnZhbGlkQmxvY2sgfHwgaW52YWxpZE5vZGUpICYmIHV0aWxzLmlzT3Blbk9yQ2xvc2Uobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuICdcXFxcJyArIG5vZGUudmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubm9kZXMpIHtcbiAgICAgIGZvciAobGV0IGNoaWxkIG9mIG5vZGUubm9kZXMpIHtcbiAgICAgICAgb3V0cHV0ICs9IHN0cmluZ2lmeShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmV0dXJuIHN0cmluZ2lmeShhc3QpO1xufTtcblxuIiwiLyohXG4gKiBpcy1udW1iZXIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLW51bWJlcj5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG51bSkge1xuICBpZiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVtIC0gbnVtID09PSAwO1xuICB9XG4gIGlmICh0eXBlb2YgbnVtID09PSAnc3RyaW5nJyAmJiBudW0udHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUgPyBOdW1iZXIuaXNGaW5pdGUoK251bSkgOiBpc0Zpbml0ZSgrbnVtKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiLyohXG4gKiB0by1yZWdleC1yYW5nZSA8aHR0cHM6Ly9naXRodWIuY29tL21pY3JvbWF0Y2gvdG8tcmVnZXgtcmFuZ2U+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LXByZXNlbnQsIEpvbiBTY2hsaW5rZXJ0LlxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuY29uc3QgaXNOdW1iZXIgPSByZXF1aXJlKCdpcy1udW1iZXInKTtcblxuY29uc3QgdG9SZWdleFJhbmdlID0gKG1pbiwgbWF4LCBvcHRpb25zKSA9PiB7XG4gIGlmIChpc051bWJlcihtaW4pID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3RvUmVnZXhSYW5nZTogZXhwZWN0ZWQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICBpZiAobWF4ID09PSB2b2lkIDAgfHwgbWluID09PSBtYXgpIHtcbiAgICByZXR1cm4gU3RyaW5nKG1pbik7XG4gIH1cblxuICBpZiAoaXNOdW1iZXIobWF4KSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0b1JlZ2V4UmFuZ2U6IGV4cGVjdGVkIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBudW1iZXIuJyk7XG4gIH1cblxuICBsZXQgb3B0cyA9IHsgcmVsYXhaZXJvczogdHJ1ZSwgLi4ub3B0aW9ucyB9O1xuICBpZiAodHlwZW9mIG9wdHMuc3RyaWN0WmVyb3MgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMucmVsYXhaZXJvcyA9IG9wdHMuc3RyaWN0WmVyb3MgPT09IGZhbHNlO1xuICB9XG5cbiAgbGV0IHJlbGF4ID0gU3RyaW5nKG9wdHMucmVsYXhaZXJvcyk7XG4gIGxldCBzaG9ydGhhbmQgPSBTdHJpbmcob3B0cy5zaG9ydGhhbmQpO1xuICBsZXQgY2FwdHVyZSA9IFN0cmluZyhvcHRzLmNhcHR1cmUpO1xuICBsZXQgd3JhcCA9IFN0cmluZyhvcHRzLndyYXApO1xuICBsZXQgY2FjaGVLZXkgPSBtaW4gKyAnOicgKyBtYXggKyAnPScgKyByZWxheCArIHNob3J0aGFuZCArIGNhcHR1cmUgKyB3cmFwO1xuXG4gIGlmICh0b1JlZ2V4UmFuZ2UuY2FjaGUuaGFzT3duUHJvcGVydHkoY2FjaGVLZXkpKSB7XG4gICAgcmV0dXJuIHRvUmVnZXhSYW5nZS5jYWNoZVtjYWNoZUtleV0ucmVzdWx0O1xuICB9XG5cbiAgbGV0IGEgPSBNYXRoLm1pbihtaW4sIG1heCk7XG4gIGxldCBiID0gTWF0aC5tYXgobWluLCBtYXgpO1xuXG4gIGlmIChNYXRoLmFicyhhIC0gYikgPT09IDEpIHtcbiAgICBsZXQgcmVzdWx0ID0gbWluICsgJ3wnICsgbWF4O1xuICAgIGlmIChvcHRzLmNhcHR1cmUpIHtcbiAgICAgIHJldHVybiBgKCR7cmVzdWx0fSlgO1xuICAgIH1cbiAgICBpZiAob3B0cy53cmFwID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIGAoPzoke3Jlc3VsdH0pYDtcbiAgfVxuXG4gIGxldCBpc1BhZGRlZCA9IGhhc1BhZGRpbmcobWluKSB8fCBoYXNQYWRkaW5nKG1heCk7XG4gIGxldCBzdGF0ZSA9IHsgbWluLCBtYXgsIGEsIGIgfTtcbiAgbGV0IHBvc2l0aXZlcyA9IFtdO1xuICBsZXQgbmVnYXRpdmVzID0gW107XG5cbiAgaWYgKGlzUGFkZGVkKSB7XG4gICAgc3RhdGUuaXNQYWRkZWQgPSBpc1BhZGRlZDtcbiAgICBzdGF0ZS5tYXhMZW4gPSBTdHJpbmcoc3RhdGUubWF4KS5sZW5ndGg7XG4gIH1cblxuICBpZiAoYSA8IDApIHtcbiAgICBsZXQgbmV3TWluID0gYiA8IDAgPyBNYXRoLmFicyhiKSA6IDE7XG4gICAgbmVnYXRpdmVzID0gc3BsaXRUb1BhdHRlcm5zKG5ld01pbiwgTWF0aC5hYnMoYSksIHN0YXRlLCBvcHRzKTtcbiAgICBhID0gc3RhdGUuYSA9IDA7XG4gIH1cblxuICBpZiAoYiA+PSAwKSB7XG4gICAgcG9zaXRpdmVzID0gc3BsaXRUb1BhdHRlcm5zKGEsIGIsIHN0YXRlLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXRlLm5lZ2F0aXZlcyA9IG5lZ2F0aXZlcztcbiAgc3RhdGUucG9zaXRpdmVzID0gcG9zaXRpdmVzO1xuICBzdGF0ZS5yZXN1bHQgPSBjb2xsYXRlUGF0dGVybnMobmVnYXRpdmVzLCBwb3NpdGl2ZXMsIG9wdHMpO1xuXG4gIGlmIChvcHRzLmNhcHR1cmUgPT09IHRydWUpIHtcbiAgICBzdGF0ZS5yZXN1bHQgPSBgKCR7c3RhdGUucmVzdWx0fSlgO1xuICB9IGVsc2UgaWYgKG9wdHMud3JhcCAhPT0gZmFsc2UgJiYgKHBvc2l0aXZlcy5sZW5ndGggKyBuZWdhdGl2ZXMubGVuZ3RoKSA+IDEpIHtcbiAgICBzdGF0ZS5yZXN1bHQgPSBgKD86JHtzdGF0ZS5yZXN1bHR9KWA7XG4gIH1cblxuICB0b1JlZ2V4UmFuZ2UuY2FjaGVbY2FjaGVLZXldID0gc3RhdGU7XG4gIHJldHVybiBzdGF0ZS5yZXN1bHQ7XG59O1xuXG5mdW5jdGlvbiBjb2xsYXRlUGF0dGVybnMobmVnLCBwb3MsIG9wdGlvbnMpIHtcbiAgbGV0IG9ubHlOZWdhdGl2ZSA9IGZpbHRlclBhdHRlcm5zKG5lZywgcG9zLCAnLScsIGZhbHNlLCBvcHRpb25zKSB8fCBbXTtcbiAgbGV0IG9ubHlQb3NpdGl2ZSA9IGZpbHRlclBhdHRlcm5zKHBvcywgbmVnLCAnJywgZmFsc2UsIG9wdGlvbnMpIHx8IFtdO1xuICBsZXQgaW50ZXJzZWN0ZWQgPSBmaWx0ZXJQYXR0ZXJucyhuZWcsIHBvcywgJy0/JywgdHJ1ZSwgb3B0aW9ucykgfHwgW107XG4gIGxldCBzdWJwYXR0ZXJucyA9IG9ubHlOZWdhdGl2ZS5jb25jYXQoaW50ZXJzZWN0ZWQpLmNvbmNhdChvbmx5UG9zaXRpdmUpO1xuICByZXR1cm4gc3VicGF0dGVybnMuam9pbignfCcpO1xufVxuXG5mdW5jdGlvbiBzcGxpdFRvUmFuZ2VzKG1pbiwgbWF4KSB7XG4gIGxldCBuaW5lcyA9IDE7XG4gIGxldCB6ZXJvcyA9IDE7XG5cbiAgbGV0IHN0b3AgPSBjb3VudE5pbmVzKG1pbiwgbmluZXMpO1xuICBsZXQgc3RvcHMgPSBuZXcgU2V0KFttYXhdKTtcblxuICB3aGlsZSAobWluIDw9IHN0b3AgJiYgc3RvcCA8PSBtYXgpIHtcbiAgICBzdG9wcy5hZGQoc3RvcCk7XG4gICAgbmluZXMgKz0gMTtcbiAgICBzdG9wID0gY291bnROaW5lcyhtaW4sIG5pbmVzKTtcbiAgfVxuXG4gIHN0b3AgPSBjb3VudFplcm9zKG1heCArIDEsIHplcm9zKSAtIDE7XG5cbiAgd2hpbGUgKG1pbiA8IHN0b3AgJiYgc3RvcCA8PSBtYXgpIHtcbiAgICBzdG9wcy5hZGQoc3RvcCk7XG4gICAgemVyb3MgKz0gMTtcbiAgICBzdG9wID0gY291bnRaZXJvcyhtYXggKyAxLCB6ZXJvcykgLSAxO1xuICB9XG5cbiAgc3RvcHMgPSBbLi4uc3RvcHNdO1xuICBzdG9wcy5zb3J0KGNvbXBhcmUpO1xuICByZXR1cm4gc3RvcHM7XG59XG5cbi8qKlxuICogQ29udmVydCBhIHJhbmdlIHRvIGEgcmVnZXggcGF0dGVyblxuICogQHBhcmFtIHtOdW1iZXJ9IGBzdGFydGBcbiAqIEBwYXJhbSB7TnVtYmVyfSBgc3RvcGBcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiByYW5nZVRvUGF0dGVybihzdGFydCwgc3RvcCwgb3B0aW9ucykge1xuICBpZiAoc3RhcnQgPT09IHN0b3ApIHtcbiAgICByZXR1cm4geyBwYXR0ZXJuOiBzdGFydCwgY291bnQ6IFtdLCBkaWdpdHM6IDAgfTtcbiAgfVxuXG4gIGxldCB6aXBwZWQgPSB6aXAoc3RhcnQsIHN0b3ApO1xuICBsZXQgZGlnaXRzID0gemlwcGVkLmxlbmd0aDtcbiAgbGV0IHBhdHRlcm4gPSAnJztcbiAgbGV0IGNvdW50ID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZ2l0czsgaSsrKSB7XG4gICAgbGV0IFtzdGFydERpZ2l0LCBzdG9wRGlnaXRdID0gemlwcGVkW2ldO1xuXG4gICAgaWYgKHN0YXJ0RGlnaXQgPT09IHN0b3BEaWdpdCkge1xuICAgICAgcGF0dGVybiArPSBzdGFydERpZ2l0O1xuXG4gICAgfSBlbHNlIGlmIChzdGFydERpZ2l0ICE9PSAnMCcgfHwgc3RvcERpZ2l0ICE9PSAnOScpIHtcbiAgICAgIHBhdHRlcm4gKz0gdG9DaGFyYWN0ZXJDbGFzcyhzdGFydERpZ2l0LCBzdG9wRGlnaXQsIG9wdGlvbnMpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50Kys7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgcGF0dGVybiArPSBvcHRpb25zLnNob3J0aGFuZCA9PT0gdHJ1ZSA/ICdcXFxcZCcgOiAnWzAtOV0nO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0dGVybiwgY291bnQ6IFtjb3VudF0sIGRpZ2l0cyB9O1xufVxuXG5mdW5jdGlvbiBzcGxpdFRvUGF0dGVybnMobWluLCBtYXgsIHRvaywgb3B0aW9ucykge1xuICBsZXQgcmFuZ2VzID0gc3BsaXRUb1JhbmdlcyhtaW4sIG1heCk7XG4gIGxldCB0b2tlbnMgPSBbXTtcbiAgbGV0IHN0YXJ0ID0gbWluO1xuICBsZXQgcHJldjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBtYXggPSByYW5nZXNbaV07XG4gICAgbGV0IG9iaiA9IHJhbmdlVG9QYXR0ZXJuKFN0cmluZyhzdGFydCksIFN0cmluZyhtYXgpLCBvcHRpb25zKTtcbiAgICBsZXQgemVyb3MgPSAnJztcblxuICAgIGlmICghdG9rLmlzUGFkZGVkICYmIHByZXYgJiYgcHJldi5wYXR0ZXJuID09PSBvYmoucGF0dGVybikge1xuICAgICAgaWYgKHByZXYuY291bnQubGVuZ3RoID4gMSkge1xuICAgICAgICBwcmV2LmNvdW50LnBvcCgpO1xuICAgICAgfVxuXG4gICAgICBwcmV2LmNvdW50LnB1c2gob2JqLmNvdW50WzBdKTtcbiAgICAgIHByZXYuc3RyaW5nID0gcHJldi5wYXR0ZXJuICsgdG9RdWFudGlmaWVyKHByZXYuY291bnQpO1xuICAgICAgc3RhcnQgPSBtYXggKyAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHRvay5pc1BhZGRlZCkge1xuICAgICAgemVyb3MgPSBwYWRaZXJvcyhtYXgsIHRvaywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgb2JqLnN0cmluZyA9IHplcm9zICsgb2JqLnBhdHRlcm4gKyB0b1F1YW50aWZpZXIob2JqLmNvdW50KTtcbiAgICB0b2tlbnMucHVzaChvYmopO1xuICAgIHN0YXJ0ID0gbWF4ICsgMTtcbiAgICBwcmV2ID0gb2JqO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuZnVuY3Rpb24gZmlsdGVyUGF0dGVybnMoYXJyLCBjb21wYXJpc29uLCBwcmVmaXgsIGludGVyc2VjdGlvbiwgb3B0aW9ucykge1xuICBsZXQgcmVzdWx0ID0gW107XG5cbiAgZm9yIChsZXQgZWxlIG9mIGFycikge1xuICAgIGxldCB7IHN0cmluZyB9ID0gZWxlO1xuXG4gICAgLy8gb25seSBwdXNoIGlmIF9ib3RoXyBhcmUgbmVnYXRpdmUuLi5cbiAgICBpZiAoIWludGVyc2VjdGlvbiAmJiAhY29udGFpbnMoY29tcGFyaXNvbiwgJ3N0cmluZycsIHN0cmluZykpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCArIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLy8gb3IgX2JvdGhfIGFyZSBwb3NpdGl2ZVxuICAgIGlmIChpbnRlcnNlY3Rpb24gJiYgY29udGFpbnMoY29tcGFyaXNvbiwgJ3N0cmluZycsIHN0cmluZykpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHByZWZpeCArIHN0cmluZyk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogWmlwIHN0cmluZ3NcbiAqL1xuXG5mdW5jdGlvbiB6aXAoYSwgYikge1xuICBsZXQgYXJyID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgYXJyLnB1c2goW2FbaV0sIGJbaV1dKTtcbiAgcmV0dXJuIGFycjtcbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIHJldHVybiBhID4gYiA/IDEgOiBiID4gYSA/IC0xIDogMDtcbn1cblxuZnVuY3Rpb24gY29udGFpbnMoYXJyLCBrZXksIHZhbCkge1xuICByZXR1cm4gYXJyLnNvbWUoZWxlID0+IGVsZVtrZXldID09PSB2YWwpO1xufVxuXG5mdW5jdGlvbiBjb3VudE5pbmVzKG1pbiwgbGVuKSB7XG4gIHJldHVybiBOdW1iZXIoU3RyaW5nKG1pbikuc2xpY2UoMCwgLWxlbikgKyAnOScucmVwZWF0KGxlbikpO1xufVxuXG5mdW5jdGlvbiBjb3VudFplcm9zKGludGVnZXIsIHplcm9zKSB7XG4gIHJldHVybiBpbnRlZ2VyIC0gKGludGVnZXIgJSBNYXRoLnBvdygxMCwgemVyb3MpKTtcbn1cblxuZnVuY3Rpb24gdG9RdWFudGlmaWVyKGRpZ2l0cykge1xuICBsZXQgW3N0YXJ0ID0gMCwgc3RvcCA9ICcnXSA9IGRpZ2l0cztcbiAgaWYgKHN0b3AgfHwgc3RhcnQgPiAxKSB7XG4gICAgcmV0dXJuIGB7JHtzdGFydCArIChzdG9wID8gJywnICsgc3RvcCA6ICcnKX19YDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIHRvQ2hhcmFjdGVyQ2xhc3MoYSwgYiwgb3B0aW9ucykge1xuICByZXR1cm4gYFske2F9JHsoYiAtIGEgPT09IDEpID8gJycgOiAnLSd9JHtifV1gO1xufVxuXG5mdW5jdGlvbiBoYXNQYWRkaW5nKHN0cikge1xuICByZXR1cm4gL14tPygwKylcXGQvLnRlc3Qoc3RyKTtcbn1cblxuZnVuY3Rpb24gcGFkWmVyb3ModmFsdWUsIHRvaywgb3B0aW9ucykge1xuICBpZiAoIXRvay5pc1BhZGRlZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGxldCBkaWZmID0gTWF0aC5hYnModG9rLm1heExlbiAtIFN0cmluZyh2YWx1ZSkubGVuZ3RoKTtcbiAgbGV0IHJlbGF4ID0gb3B0aW9ucy5yZWxheFplcm9zICE9PSBmYWxzZTtcblxuICBzd2l0Y2ggKGRpZmYpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gJyc7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHJlbGF4ID8gJzA/JyA6ICcwJztcbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gcmVsYXggPyAnMHswLDJ9JyA6ICcwMCc7XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHJlbGF4ID8gYDB7MCwke2RpZmZ9fWAgOiBgMHske2RpZmZ9fWA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2FjaGVcbiAqL1xuXG50b1JlZ2V4UmFuZ2UuY2FjaGUgPSB7fTtcbnRvUmVnZXhSYW5nZS5jbGVhckNhY2hlID0gKCkgPT4gKHRvUmVnZXhSYW5nZS5jYWNoZSA9IHt9KTtcblxuLyoqXG4gKiBFeHBvc2UgYHRvUmVnZXhSYW5nZWBcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHRvUmVnZXhSYW5nZTtcbiIsIi8qIVxuICogZmlsbC1yYW5nZSA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvZmlsbC1yYW5nZT5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuY29uc3QgdG9SZWdleFJhbmdlID0gcmVxdWlyZSgndG8tcmVnZXgtcmFuZ2UnKTtcblxuY29uc3QgaXNPYmplY3QgPSB2YWwgPT4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCk7XG5cbmNvbnN0IHRyYW5zZm9ybSA9IHRvTnVtYmVyID0+IHtcbiAgcmV0dXJuIHZhbHVlID0+IHRvTnVtYmVyID09PSB0cnVlID8gTnVtYmVyKHZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59O1xuXG5jb25zdCBpc1ZhbGlkVmFsdWUgPSB2YWx1ZSA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8ICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlICE9PSAnJyk7XG59O1xuXG5jb25zdCBpc051bWJlciA9IG51bSA9PiBOdW1iZXIuaXNJbnRlZ2VyKCtudW0pO1xuXG5jb25zdCB6ZXJvcyA9IGlucHV0ID0+IHtcbiAgbGV0IHZhbHVlID0gYCR7aW5wdXR9YDtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGlmICh2YWx1ZVswXSA9PT0gJy0nKSB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICBpZiAodmFsdWUgPT09ICcwJykgcmV0dXJuIGZhbHNlO1xuICB3aGlsZSAodmFsdWVbKytpbmRleF0gPT09ICcwJyk7XG4gIHJldHVybiBpbmRleCA+IDA7XG59O1xuXG5jb25zdCBzdHJpbmdpZnkgPSAoc3RhcnQsIGVuZCwgb3B0aW9ucykgPT4ge1xuICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0cmluZ2lmeSA9PT0gdHJ1ZTtcbn07XG5cbmNvbnN0IHBhZCA9IChpbnB1dCwgbWF4TGVuZ3RoLCB0b051bWJlcikgPT4ge1xuICBpZiAobWF4TGVuZ3RoID4gMCkge1xuICAgIGxldCBkYXNoID0gaW5wdXRbMF0gPT09ICctJyA/ICctJyA6ICcnO1xuICAgIGlmIChkYXNoKSBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIGlucHV0ID0gKGRhc2ggKyBpbnB1dC5wYWRTdGFydChkYXNoID8gbWF4TGVuZ3RoIC0gMSA6IG1heExlbmd0aCwgJzAnKSk7XG4gIH1cbiAgaWYgKHRvTnVtYmVyID09PSBmYWxzZSkge1xuICAgIHJldHVybiBTdHJpbmcoaW5wdXQpO1xuICB9XG4gIHJldHVybiBpbnB1dDtcbn07XG5cbmNvbnN0IHRvTWF4TGVuID0gKGlucHV0LCBtYXhMZW5ndGgpID0+IHtcbiAgbGV0IG5lZ2F0aXZlID0gaW5wdXRbMF0gPT09ICctJyA/ICctJyA6ICcnO1xuICBpZiAobmVnYXRpdmUpIHtcbiAgICBpbnB1dCA9IGlucHV0LnNsaWNlKDEpO1xuICAgIG1heExlbmd0aC0tO1xuICB9XG4gIHdoaWxlIChpbnB1dC5sZW5ndGggPCBtYXhMZW5ndGgpIGlucHV0ID0gJzAnICsgaW5wdXQ7XG4gIHJldHVybiBuZWdhdGl2ZSA/ICgnLScgKyBpbnB1dCkgOiBpbnB1dDtcbn07XG5cbmNvbnN0IHRvU2VxdWVuY2UgPSAocGFydHMsIG9wdGlvbnMpID0+IHtcbiAgcGFydHMubmVnYXRpdmVzLnNvcnQoKGEsIGIpID0+IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcbiAgcGFydHMucG9zaXRpdmVzLnNvcnQoKGEsIGIpID0+IGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKTtcblxuICBsZXQgcHJlZml4ID0gb3B0aW9ucy5jYXB0dXJlID8gJycgOiAnPzonO1xuICBsZXQgcG9zaXRpdmVzID0gJyc7XG4gIGxldCBuZWdhdGl2ZXMgPSAnJztcbiAgbGV0IHJlc3VsdDtcblxuICBpZiAocGFydHMucG9zaXRpdmVzLmxlbmd0aCkge1xuICAgIHBvc2l0aXZlcyA9IHBhcnRzLnBvc2l0aXZlcy5qb2luKCd8Jyk7XG4gIH1cblxuICBpZiAocGFydHMubmVnYXRpdmVzLmxlbmd0aCkge1xuICAgIG5lZ2F0aXZlcyA9IGAtKCR7cHJlZml4fSR7cGFydHMubmVnYXRpdmVzLmpvaW4oJ3wnKX0pYDtcbiAgfVxuXG4gIGlmIChwb3NpdGl2ZXMgJiYgbmVnYXRpdmVzKSB7XG4gICAgcmVzdWx0ID0gYCR7cG9zaXRpdmVzfXwke25lZ2F0aXZlc31gO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHBvc2l0aXZlcyB8fCBuZWdhdGl2ZXM7XG4gIH1cblxuICBpZiAob3B0aW9ucy53cmFwKSB7XG4gICAgcmV0dXJuIGAoJHtwcmVmaXh9JHtyZXN1bHR9KWA7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdG9SYW5nZSA9IChhLCBiLCBpc051bWJlcnMsIG9wdGlvbnMpID0+IHtcbiAgaWYgKGlzTnVtYmVycykge1xuICAgIHJldHVybiB0b1JlZ2V4UmFuZ2UoYSwgYiwgeyB3cmFwOiBmYWxzZSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGxldCBzdGFydCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYSk7XG4gIGlmIChhID09PSBiKSByZXR1cm4gc3RhcnQ7XG5cbiAgbGV0IHN0b3AgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpO1xuICByZXR1cm4gYFske3N0YXJ0fS0ke3N0b3B9XWA7XG59O1xuXG5jb25zdCB0b1JlZ2V4ID0gKHN0YXJ0LCBlbmQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhcnQpKSB7XG4gICAgbGV0IHdyYXAgPSBvcHRpb25zLndyYXAgPT09IHRydWU7XG4gICAgbGV0IHByZWZpeCA9IG9wdGlvbnMuY2FwdHVyZSA/ICcnIDogJz86JztcbiAgICByZXR1cm4gd3JhcCA/IGAoJHtwcmVmaXh9JHtzdGFydC5qb2luKCd8Jyl9KWAgOiBzdGFydC5qb2luKCd8Jyk7XG4gIH1cbiAgcmV0dXJuIHRvUmVnZXhSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbn07XG5cbmNvbnN0IHJhbmdlRXJyb3IgPSAoLi4uYXJncykgPT4ge1xuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgcmFuZ2UgYXJndW1lbnRzOiAnICsgdXRpbC5pbnNwZWN0KC4uLmFyZ3MpKTtcbn07XG5cbmNvbnN0IGludmFsaWRSYW5nZSA9IChzdGFydCwgZW5kLCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zLnN0cmljdFJhbmdlcyA9PT0gdHJ1ZSkgdGhyb3cgcmFuZ2VFcnJvcihbc3RhcnQsIGVuZF0pO1xuICByZXR1cm4gW107XG59O1xuXG5jb25zdCBpbnZhbGlkU3RlcCA9IChzdGVwLCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zLnN0cmljdFJhbmdlcyA9PT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIHN0ZXAgXCIke3N0ZXB9XCIgdG8gYmUgYSBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gW107XG59O1xuXG5jb25zdCBmaWxsTnVtYmVycyA9IChzdGFydCwgZW5kLCBzdGVwID0gMSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGxldCBhID0gTnVtYmVyKHN0YXJ0KTtcbiAgbGV0IGIgPSBOdW1iZXIoZW5kKTtcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIoYSkgfHwgIU51bWJlci5pc0ludGVnZXIoYikpIHtcbiAgICBpZiAob3B0aW9ucy5zdHJpY3RSYW5nZXMgPT09IHRydWUpIHRocm93IHJhbmdlRXJyb3IoW3N0YXJ0LCBlbmRdKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBmaXggbmVnYXRpdmUgemVyb1xuICBpZiAoYSA9PT0gMCkgYSA9IDA7XG4gIGlmIChiID09PSAwKSBiID0gMDtcblxuICBsZXQgZGVzY2VuZGluZyA9IGEgPiBiO1xuICBsZXQgc3RhcnRTdHJpbmcgPSBTdHJpbmcoc3RhcnQpO1xuICBsZXQgZW5kU3RyaW5nID0gU3RyaW5nKGVuZCk7XG4gIGxldCBzdGVwU3RyaW5nID0gU3RyaW5nKHN0ZXApO1xuICBzdGVwID0gTWF0aC5tYXgoTWF0aC5hYnMoc3RlcCksIDEpO1xuXG4gIGxldCBwYWRkZWQgPSB6ZXJvcyhzdGFydFN0cmluZykgfHwgemVyb3MoZW5kU3RyaW5nKSB8fCB6ZXJvcyhzdGVwU3RyaW5nKTtcbiAgbGV0IG1heExlbiA9IHBhZGRlZCA/IE1hdGgubWF4KHN0YXJ0U3RyaW5nLmxlbmd0aCwgZW5kU3RyaW5nLmxlbmd0aCwgc3RlcFN0cmluZy5sZW5ndGgpIDogMDtcbiAgbGV0IHRvTnVtYmVyID0gcGFkZGVkID09PSBmYWxzZSAmJiBzdHJpbmdpZnkoc3RhcnQsIGVuZCwgb3B0aW9ucykgPT09IGZhbHNlO1xuICBsZXQgZm9ybWF0ID0gb3B0aW9ucy50cmFuc2Zvcm0gfHwgdHJhbnNmb3JtKHRvTnVtYmVyKTtcblxuICBpZiAob3B0aW9ucy50b1JlZ2V4ICYmIHN0ZXAgPT09IDEpIHtcbiAgICByZXR1cm4gdG9SYW5nZSh0b01heExlbihzdGFydCwgbWF4TGVuKSwgdG9NYXhMZW4oZW5kLCBtYXhMZW4pLCB0cnVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCBwYXJ0cyA9IHsgbmVnYXRpdmVzOiBbXSwgcG9zaXRpdmVzOiBbXSB9O1xuICBsZXQgcHVzaCA9IG51bSA9PiBwYXJ0c1tudW0gPCAwID8gJ25lZ2F0aXZlcycgOiAncG9zaXRpdmVzJ10ucHVzaChNYXRoLmFicyhudW0pKTtcbiAgbGV0IHJhbmdlID0gW107XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGRlc2NlbmRpbmcgPyBhID49IGIgOiBhIDw9IGIpIHtcbiAgICBpZiAob3B0aW9ucy50b1JlZ2V4ID09PSB0cnVlICYmIHN0ZXAgPiAxKSB7XG4gICAgICBwdXNoKGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZS5wdXNoKHBhZChmb3JtYXQoYSwgaW5kZXgpLCBtYXhMZW4sIHRvTnVtYmVyKSk7XG4gICAgfVxuICAgIGEgPSBkZXNjZW5kaW5nID8gYSAtIHN0ZXAgOiBhICsgc3RlcDtcbiAgICBpbmRleCsrO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudG9SZWdleCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBzdGVwID4gMVxuICAgICAgPyB0b1NlcXVlbmNlKHBhcnRzLCBvcHRpb25zKVxuICAgICAgOiB0b1JlZ2V4KHJhbmdlLCBudWxsLCB7IHdyYXA6IGZhbHNlLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufTtcblxuY29uc3QgZmlsbExldHRlcnMgPSAoc3RhcnQsIGVuZCwgc3RlcCA9IDEsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAoKCFpc051bWJlcihzdGFydCkgJiYgc3RhcnQubGVuZ3RoID4gMSkgfHwgKCFpc051bWJlcihlbmQpICYmIGVuZC5sZW5ndGggPiAxKSkge1xuICAgIHJldHVybiBpbnZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgb3B0aW9ucyk7XG4gIH1cblxuXG4gIGxldCBmb3JtYXQgPSBvcHRpb25zLnRyYW5zZm9ybSB8fCAodmFsID0+IFN0cmluZy5mcm9tQ2hhckNvZGUodmFsKSk7XG4gIGxldCBhID0gYCR7c3RhcnR9YC5jaGFyQ29kZUF0KDApO1xuICBsZXQgYiA9IGAke2VuZH1gLmNoYXJDb2RlQXQoMCk7XG5cbiAgbGV0IGRlc2NlbmRpbmcgPSBhID4gYjtcbiAgbGV0IG1pbiA9IE1hdGgubWluKGEsIGIpO1xuICBsZXQgbWF4ID0gTWF0aC5tYXgoYSwgYik7XG5cbiAgaWYgKG9wdGlvbnMudG9SZWdleCAmJiBzdGVwID09PSAxKSB7XG4gICAgcmV0dXJuIHRvUmFuZ2UobWluLCBtYXgsIGZhbHNlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxldCByYW5nZSA9IFtdO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIHdoaWxlIChkZXNjZW5kaW5nID8gYSA+PSBiIDogYSA8PSBiKSB7XG4gICAgcmFuZ2UucHVzaChmb3JtYXQoYSwgaW5kZXgpKTtcbiAgICBhID0gZGVzY2VuZGluZyA/IGEgLSBzdGVwIDogYSArIHN0ZXA7XG4gICAgaW5kZXgrKztcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRvUmVnZXggPT09IHRydWUpIHtcbiAgICByZXR1cm4gdG9SZWdleChyYW5nZSwgbnVsbCwgeyB3cmFwOiBmYWxzZSwgb3B0aW9ucyB9KTtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn07XG5cbmNvbnN0IGZpbGwgPSAoc3RhcnQsIGVuZCwgc3RlcCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmIChlbmQgPT0gbnVsbCAmJiBpc1ZhbGlkVmFsdWUoc3RhcnQpKSB7XG4gICAgcmV0dXJuIFtzdGFydF07XG4gIH1cblxuICBpZiAoIWlzVmFsaWRWYWx1ZShzdGFydCkgfHwgIWlzVmFsaWRWYWx1ZShlbmQpKSB7XG4gICAgcmV0dXJuIGludmFsaWRSYW5nZShzdGFydCwgZW5kLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmaWxsKHN0YXJ0LCBlbmQsIDEsIHsgdHJhbnNmb3JtOiBzdGVwIH0pO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KHN0ZXApKSB7XG4gICAgcmV0dXJuIGZpbGwoc3RhcnQsIGVuZCwgMCwgc3RlcCk7XG4gIH1cblxuICBsZXQgb3B0cyA9IHsgLi4ub3B0aW9ucyB9O1xuICBpZiAob3B0cy5jYXB0dXJlID09PSB0cnVlKSBvcHRzLndyYXAgPSB0cnVlO1xuICBzdGVwID0gc3RlcCB8fCBvcHRzLnN0ZXAgfHwgMTtcblxuICBpZiAoIWlzTnVtYmVyKHN0ZXApKSB7XG4gICAgaWYgKHN0ZXAgIT0gbnVsbCAmJiAhaXNPYmplY3Qoc3RlcCkpIHJldHVybiBpbnZhbGlkU3RlcChzdGVwLCBvcHRzKTtcbiAgICByZXR1cm4gZmlsbChzdGFydCwgZW5kLCAxLCBzdGVwKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihzdGFydCkgJiYgaXNOdW1iZXIoZW5kKSkge1xuICAgIHJldHVybiBmaWxsTnVtYmVycyhzdGFydCwgZW5kLCBzdGVwLCBvcHRzKTtcbiAgfVxuXG4gIHJldHVybiBmaWxsTGV0dGVycyhzdGFydCwgZW5kLCBNYXRoLm1heChNYXRoLmFicyhzdGVwKSwgMSksIG9wdHMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmaWxsID0gcmVxdWlyZSgnZmlsbC1yYW5nZScpO1xuY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbmNvbnN0IGNvbXBpbGUgPSAoYXN0LCBvcHRpb25zID0ge30pID0+IHtcbiAgbGV0IHdhbGsgPSAobm9kZSwgcGFyZW50ID0ge30pID0+IHtcbiAgICBsZXQgaW52YWxpZEJsb2NrID0gdXRpbHMuaXNJbnZhbGlkQnJhY2UocGFyZW50KTtcbiAgICBsZXQgaW52YWxpZE5vZGUgPSBub2RlLmludmFsaWQgPT09IHRydWUgJiYgb3B0aW9ucy5lc2NhcGVJbnZhbGlkID09PSB0cnVlO1xuICAgIGxldCBpbnZhbGlkID0gaW52YWxpZEJsb2NrID09PSB0cnVlIHx8IGludmFsaWROb2RlID09PSB0cnVlO1xuICAgIGxldCBwcmVmaXggPSBvcHRpb25zLmVzY2FwZUludmFsaWQgPT09IHRydWUgPyAnXFxcXCcgOiAnJztcbiAgICBsZXQgb3V0cHV0ID0gJyc7XG5cbiAgICBpZiAobm9kZS5pc09wZW4gPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBwcmVmaXggKyBub2RlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAobm9kZS5pc0Nsb3NlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ICsgbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnb3BlbicpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gKHByZWZpeCArIG5vZGUudmFsdWUpIDogJygnO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJldHVybiBpbnZhbGlkID8gKHByZWZpeCArIG5vZGUudmFsdWUpIDogJyknO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdjb21tYScpIHtcbiAgICAgIHJldHVybiBub2RlLnByZXYudHlwZSA9PT0gJ2NvbW1hJyA/ICcnIDogKGludmFsaWQgPyBub2RlLnZhbHVlIDogJ3wnKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubm9kZXMgJiYgbm9kZS5yYW5nZXMgPiAwKSB7XG4gICAgICBsZXQgYXJncyA9IHV0aWxzLnJlZHVjZShub2RlLm5vZGVzKTtcbiAgICAgIGxldCByYW5nZSA9IGZpbGwoLi4uYXJncywgeyAuLi5vcHRpb25zLCB3cmFwOiBmYWxzZSwgdG9SZWdleDogdHJ1ZSB9KTtcblxuICAgICAgaWYgKHJhbmdlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPiAxICYmIHJhbmdlLmxlbmd0aCA+IDEgPyBgKCR7cmFuZ2V9KWAgOiByYW5nZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZS5ub2Rlcykge1xuICAgICAgZm9yIChsZXQgY2hpbGQgb2Ygbm9kZS5ub2Rlcykge1xuICAgICAgICBvdXRwdXQgKz0gd2FsayhjaGlsZCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG5cbiAgcmV0dXJuIHdhbGsoYXN0KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZmlsbCA9IHJlcXVpcmUoJ2ZpbGwtcmFuZ2UnKTtcbmNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG5jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgYXBwZW5kID0gKHF1ZXVlID0gJycsIHN0YXNoID0gJycsIGVuY2xvc2UgPSBmYWxzZSkgPT4ge1xuICBsZXQgcmVzdWx0ID0gW107XG5cbiAgcXVldWUgPSBbXS5jb25jYXQocXVldWUpO1xuICBzdGFzaCA9IFtdLmNvbmNhdChzdGFzaCk7XG5cbiAgaWYgKCFzdGFzaC5sZW5ndGgpIHJldHVybiBxdWV1ZTtcbiAgaWYgKCFxdWV1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZW5jbG9zZSA/IHV0aWxzLmZsYXR0ZW4oc3Rhc2gpLm1hcChlbGUgPT4gYHske2VsZX19YCkgOiBzdGFzaDtcbiAgfVxuXG4gIGZvciAobGV0IGl0ZW0gb2YgcXVldWUpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgZm9yIChsZXQgdmFsdWUgb2YgaXRlbSkge1xuICAgICAgICByZXN1bHQucHVzaChhcHBlbmQodmFsdWUsIHN0YXNoLCBlbmNsb3NlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGVsZSBvZiBzdGFzaCkge1xuICAgICAgICBpZiAoZW5jbG9zZSA9PT0gdHJ1ZSAmJiB0eXBlb2YgZWxlID09PSAnc3RyaW5nJykgZWxlID0gYHske2VsZX19YDtcbiAgICAgICAgcmVzdWx0LnB1c2goQXJyYXkuaXNBcnJheShlbGUpID8gYXBwZW5kKGl0ZW0sIGVsZSwgZW5jbG9zZSkgOiAoaXRlbSArIGVsZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdXRpbHMuZmxhdHRlbihyZXN1bHQpO1xufTtcblxuY29uc3QgZXhwYW5kID0gKGFzdCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGxldCByYW5nZUxpbWl0ID0gb3B0aW9ucy5yYW5nZUxpbWl0ID09PSB2b2lkIDAgPyAxMDAwIDogb3B0aW9ucy5yYW5nZUxpbWl0O1xuXG4gIGxldCB3YWxrID0gKG5vZGUsIHBhcmVudCA9IHt9KSA9PiB7XG4gICAgbm9kZS5xdWV1ZSA9IFtdO1xuXG4gICAgbGV0IHAgPSBwYXJlbnQ7XG4gICAgbGV0IHEgPSBwYXJlbnQucXVldWU7XG5cbiAgICB3aGlsZSAocC50eXBlICE9PSAnYnJhY2UnICYmIHAudHlwZSAhPT0gJ3Jvb3QnICYmIHAucGFyZW50KSB7XG4gICAgICBwID0gcC5wYXJlbnQ7XG4gICAgICBxID0gcC5xdWV1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5pbnZhbGlkIHx8IG5vZGUuZG9sbGFyKSB7XG4gICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIHN0cmluZ2lmeShub2RlLCBvcHRpb25zKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlLnR5cGUgPT09ICdicmFjZScgJiYgbm9kZS5pbnZhbGlkICE9PSB0cnVlICYmIG5vZGUubm9kZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIFsne30nXSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlLm5vZGVzICYmIG5vZGUucmFuZ2VzID4gMCkge1xuICAgICAgbGV0IGFyZ3MgPSB1dGlscy5yZWR1Y2Uobm9kZS5ub2Rlcyk7XG5cbiAgICAgIGlmICh1dGlscy5leGNlZWRzTGltaXQoLi4uYXJncywgb3B0aW9ucy5zdGVwLCByYW5nZUxpbWl0KSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignZXhwYW5kZWQgYXJyYXkgbGVuZ3RoIGV4Y2VlZHMgcmFuZ2UgbGltaXQuIFVzZSBvcHRpb25zLnJhbmdlTGltaXQgdG8gaW5jcmVhc2Ugb3IgZGlzYWJsZSB0aGUgbGltaXQuJyk7XG4gICAgICB9XG5cbiAgICAgIGxldCByYW5nZSA9IGZpbGwoLi4uYXJncywgb3B0aW9ucyk7XG4gICAgICBpZiAocmFuZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJhbmdlID0gc3RyaW5naWZ5KG5vZGUsIG9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIHJhbmdlKSk7XG4gICAgICBub2RlLm5vZGVzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGVuY2xvc2UgPSB1dGlscy5lbmNsb3NlQnJhY2Uobm9kZSk7XG4gICAgbGV0IHF1ZXVlID0gbm9kZS5xdWV1ZTtcbiAgICBsZXQgYmxvY2sgPSBub2RlO1xuXG4gICAgd2hpbGUgKGJsb2NrLnR5cGUgIT09ICdicmFjZScgJiYgYmxvY2sudHlwZSAhPT0gJ3Jvb3QnICYmIGJsb2NrLnBhcmVudCkge1xuICAgICAgYmxvY2sgPSBibG9jay5wYXJlbnQ7XG4gICAgICBxdWV1ZSA9IGJsb2NrLnF1ZXVlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5ub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkID0gbm9kZS5ub2Rlc1tpXTtcblxuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICdjb21tYScgJiYgbm9kZS50eXBlID09PSAnYnJhY2UnKSB7XG4gICAgICAgIGlmIChpID09PSAxKSBxdWV1ZS5wdXNoKCcnKTtcbiAgICAgICAgcXVldWUucHVzaCgnJyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgICBxLnB1c2goYXBwZW5kKHEucG9wKCksIHF1ZXVlLCBlbmNsb3NlKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQudmFsdWUgJiYgY2hpbGQudHlwZSAhPT0gJ29wZW4nKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goYXBwZW5kKHF1ZXVlLnBvcCgpLCBjaGlsZC52YWx1ZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLm5vZGVzKSB7XG4gICAgICAgIHdhbGsoY2hpbGQsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZTtcbiAgfTtcblxuICByZXR1cm4gdXRpbHMuZmxhdHRlbih3YWxrKGFzdCkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNQVhfTEVOR1RIOiAxMDI0ICogNjQsXG5cbiAgLy8gRGlnaXRzXG4gIENIQVJfMDogJzAnLCAvKiAwICovXG4gIENIQVJfOTogJzknLCAvKiA5ICovXG5cbiAgLy8gQWxwaGFiZXQgY2hhcnMuXG4gIENIQVJfVVBQRVJDQVNFX0E6ICdBJywgLyogQSAqL1xuICBDSEFSX0xPV0VSQ0FTRV9BOiAnYScsIC8qIGEgKi9cbiAgQ0hBUl9VUFBFUkNBU0VfWjogJ1onLCAvKiBaICovXG4gIENIQVJfTE9XRVJDQVNFX1o6ICd6JywgLyogeiAqL1xuXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUzogJygnLCAvKiAoICovXG4gIENIQVJfUklHSFRfUEFSRU5USEVTRVM6ICcpJywgLyogKSAqL1xuXG4gIENIQVJfQVNURVJJU0s6ICcqJywgLyogKiAqL1xuXG4gIC8vIE5vbi1hbHBoYWJldGljIGNoYXJzLlxuICBDSEFSX0FNUEVSU0FORDogJyYnLCAvKiAmICovXG4gIENIQVJfQVQ6ICdAJywgLyogQCAqL1xuICBDSEFSX0JBQ0tTTEFTSDogJ1xcXFwnLCAvKiBcXCAqL1xuICBDSEFSX0JBQ0tUSUNLOiAnYCcsIC8qIGAgKi9cbiAgQ0hBUl9DQVJSSUFHRV9SRVRVUk46ICdcXHInLCAvKiBcXHIgKi9cbiAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDogJ14nLCAvKiBeICovXG4gIENIQVJfQ09MT046ICc6JywgLyogOiAqL1xuICBDSEFSX0NPTU1BOiAnLCcsIC8qICwgKi9cbiAgQ0hBUl9ET0xMQVI6ICckJywgLyogLiAqL1xuICBDSEFSX0RPVDogJy4nLCAvKiAuICovXG4gIENIQVJfRE9VQkxFX1FVT1RFOiAnXCInLCAvKiBcIiAqL1xuICBDSEFSX0VRVUFMOiAnPScsIC8qID0gKi9cbiAgQ0hBUl9FWENMQU1BVElPTl9NQVJLOiAnIScsIC8qICEgKi9cbiAgQ0hBUl9GT1JNX0ZFRUQ6ICdcXGYnLCAvKiBcXGYgKi9cbiAgQ0hBUl9GT1JXQVJEX1NMQVNIOiAnLycsIC8qIC8gKi9cbiAgQ0hBUl9IQVNIOiAnIycsIC8qICMgKi9cbiAgQ0hBUl9IWVBIRU5fTUlOVVM6ICctJywgLyogLSAqL1xuICBDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDogJzwnLCAvKiA8ICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRTogJ3snLCAvKiB7ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDogJ1snLCAvKiBbICovXG4gIENIQVJfTElORV9GRUVEOiAnXFxuJywgLyogXFxuICovXG4gIENIQVJfTk9fQlJFQUtfU1BBQ0U6ICdcXHUwMEEwJywgLyogXFx1MDBBMCAqL1xuICBDSEFSX1BFUkNFTlQ6ICclJywgLyogJSAqL1xuICBDSEFSX1BMVVM6ICcrJywgLyogKyAqL1xuICBDSEFSX1FVRVNUSU9OX01BUks6ICc/JywgLyogPyAqL1xuICBDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQ6ICc+JywgLyogPiAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFOiAnfScsIC8qIH0gKi9cbiAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDogJ10nLCAvKiBdICovXG4gIENIQVJfU0VNSUNPTE9OOiAnOycsIC8qIDsgKi9cbiAgQ0hBUl9TSU5HTEVfUVVPVEU6ICdcXCcnLCAvKiAnICovXG4gIENIQVJfU1BBQ0U6ICcgJywgLyogICAqL1xuICBDSEFSX1RBQjogJ1xcdCcsIC8qIFxcdCAqL1xuICBDSEFSX1VOREVSU0NPUkU6ICdfJywgLyogXyAqL1xuICBDSEFSX1ZFUlRJQ0FMX0xJTkU6ICd8JywgLyogfCAqL1xuICBDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRTogJ1xcdUZFRkYnIC8qIFxcdUZFRkYgKi9cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vc3RyaW5naWZ5Jyk7XG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3Qge1xuICBNQVhfTEVOR1RILFxuICBDSEFSX0JBQ0tTTEFTSCwgLyogXFwgKi9cbiAgQ0hBUl9CQUNLVElDSywgLyogYCAqL1xuICBDSEFSX0NPTU1BLCAvKiAsICovXG4gIENIQVJfRE9ULCAvKiAuICovXG4gIENIQVJfTEVGVF9QQVJFTlRIRVNFUywgLyogKCAqL1xuICBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTLCAvKiApICovXG4gIENIQVJfTEVGVF9DVVJMWV9CUkFDRSwgLyogeyAqL1xuICBDSEFSX1JJR0hUX0NVUkxZX0JSQUNFLCAvKiB9ICovXG4gIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCwgLyogWyAqL1xuICBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VULCAvKiBdICovXG4gIENIQVJfRE9VQkxFX1FVT1RFLCAvKiBcIiAqL1xuICBDSEFSX1NJTkdMRV9RVU9URSwgLyogJyAqL1xuICBDSEFSX05PX0JSRUFLX1NQQUNFLFxuICBDSEFSX1pFUk9fV0lEVEhfTk9CUkVBS19TUEFDRVxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJyk7XG5cbi8qKlxuICogcGFyc2VcbiAqL1xuXG5jb25zdCBwYXJzZSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGxldCBvcHRzID0gb3B0aW9ucyB8fCB7fTtcbiAgbGV0IG1heCA9IHR5cGVvZiBvcHRzLm1heExlbmd0aCA9PT0gJ251bWJlcicgPyBNYXRoLm1pbihNQVhfTEVOR1RILCBvcHRzLm1heExlbmd0aCkgOiBNQVhfTEVOR1RIO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBJbnB1dCBsZW5ndGggKCR7aW5wdXQubGVuZ3RofSksIGV4Y2VlZHMgbWF4IGNoYXJhY3RlcnMgKCR7bWF4fSlgKTtcbiAgfVxuXG4gIGxldCBhc3QgPSB7IHR5cGU6ICdyb290JywgaW5wdXQsIG5vZGVzOiBbXSB9O1xuICBsZXQgc3RhY2sgPSBbYXN0XTtcbiAgbGV0IGJsb2NrID0gYXN0O1xuICBsZXQgcHJldiA9IGFzdDtcbiAgbGV0IGJyYWNrZXRzID0gMDtcbiAgbGV0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IHZhbHVlO1xuICBsZXQgbWVtbyA9IHt9O1xuXG4gIC8qKlxuICAgKiBIZWxwZXJzXG4gICAqL1xuXG4gIGNvbnN0IGFkdmFuY2UgPSAoKSA9PiBpbnB1dFtpbmRleCsrXTtcbiAgY29uc3QgcHVzaCA9IG5vZGUgPT4ge1xuICAgIGlmIChub2RlLnR5cGUgPT09ICd0ZXh0JyAmJiBwcmV2LnR5cGUgPT09ICdkb3QnKSB7XG4gICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgcHJldi50eXBlID09PSAndGV4dCcgJiYgbm9kZS50eXBlID09PSAndGV4dCcpIHtcbiAgICAgIHByZXYudmFsdWUgKz0gbm9kZS52YWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBibG9jay5ub2Rlcy5wdXNoKG5vZGUpO1xuICAgIG5vZGUucGFyZW50ID0gYmxvY2s7XG4gICAgbm9kZS5wcmV2ID0gcHJldjtcbiAgICBwcmV2ID0gbm9kZTtcbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBwdXNoKHsgdHlwZTogJ2JvcycgfSk7XG5cbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgYmxvY2sgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICB2YWx1ZSA9IGFkdmFuY2UoKTtcblxuICAgIC8qKlxuICAgICAqIEludmFsaWQgY2hhcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0UgfHwgdmFsdWUgPT09IENIQVJfTk9fQlJFQUtfU1BBQ0UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZWQgY2hhcnNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9CQUNLU0xBU0gpIHtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiAob3B0aW9ucy5rZWVwRXNjYXBpbmcgPyB2YWx1ZSA6ICcnKSArIGFkdmFuY2UoKSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IHNxdWFyZSBicmFja2V0IChsaXRlcmFsKTogJ10nXG4gICAgICovXG5cbiAgICBpZiAodmFsdWUgPT09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlOiAnXFxcXCcgKyB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExlZnQgc3F1YXJlIGJyYWNrZXQ6ICdbJ1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQpIHtcbiAgICAgIGJyYWNrZXRzKys7XG5cbiAgICAgIGxldCBjbG9zZWQgPSB0cnVlO1xuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCAmJiAobmV4dCA9IGFkdmFuY2UoKSkpIHtcbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcblxuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMrKztcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX0JBQ0tTTEFTSCkge1xuICAgICAgICAgIHZhbHVlICs9IGFkdmFuY2UoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0ID09PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgYnJhY2tldHMtLTtcblxuICAgICAgICAgIGlmIChicmFja2V0cyA9PT0gMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyZW50aGVzZXNcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBibG9jayA9IHB1c2goeyB0eXBlOiAncGFyZW4nLCBub2RlczogW10gfSk7XG4gICAgICBzdGFjay5wdXNoKGJsb2NrKTtcbiAgICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0VTKSB7XG4gICAgICBpZiAoYmxvY2sudHlwZSAhPT0gJ3BhcmVuJykge1xuICAgICAgICBwdXNoKHsgdHlwZTogJ3RleHQnLCB2YWx1ZSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVvdGVzOiAnfFwifGBcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1VCTEVfUVVPVEUgfHwgdmFsdWUgPT09IENIQVJfU0lOR0xFX1FVT1RFIHx8IHZhbHVlID09PSBDSEFSX0JBQ0tUSUNLKSB7XG4gICAgICBsZXQgb3BlbiA9IHZhbHVlO1xuICAgICAgbGV0IG5leHQ7XG5cbiAgICAgIGlmIChvcHRpb25zLmtlZXBRdW90ZXMgIT09IHRydWUpIHtcbiAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoICYmIChuZXh0ID0gYWR2YW5jZSgpKSkge1xuICAgICAgICBpZiAobmV4dCA9PT0gQ0hBUl9CQUNLU0xBU0gpIHtcbiAgICAgICAgICB2YWx1ZSArPSBuZXh0ICsgYWR2YW5jZSgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHQgPT09IG9wZW4pIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5rZWVwUXVvdGVzID09PSB0cnVlKSB2YWx1ZSArPSBuZXh0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUgKz0gbmV4dDtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMZWZ0IGN1cmx5IGJyYWNlOiAneydcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNFKSB7XG4gICAgICBkZXB0aCsrO1xuXG4gICAgICBsZXQgZG9sbGFyID0gcHJldi52YWx1ZSAmJiBwcmV2LnZhbHVlLnNsaWNlKC0xKSA9PT0gJyQnIHx8IGJsb2NrLmRvbGxhciA9PT0gdHJ1ZTtcbiAgICAgIGxldCBicmFjZSA9IHtcbiAgICAgICAgdHlwZTogJ2JyYWNlJyxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgY2xvc2U6IGZhbHNlLFxuICAgICAgICBkb2xsYXIsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBjb21tYXM6IDAsXG4gICAgICAgIHJhbmdlczogMCxcbiAgICAgICAgbm9kZXM6IFtdXG4gICAgICB9O1xuXG4gICAgICBibG9jayA9IHB1c2goYnJhY2UpO1xuICAgICAgc3RhY2sucHVzaChibG9jayk7XG4gICAgICBwdXNoKHsgdHlwZTogJ29wZW4nLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJpZ2h0IGN1cmx5IGJyYWNlOiAnfSdcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRSkge1xuICAgICAgaWYgKGJsb2NrLnR5cGUgIT09ICdicmFjZScpIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgdHlwZSA9ICdjbG9zZSc7XG4gICAgICBibG9jayA9IHN0YWNrLnBvcCgpO1xuICAgICAgYmxvY2suY2xvc2UgPSB0cnVlO1xuXG4gICAgICBwdXNoKHsgdHlwZSwgdmFsdWUgfSk7XG4gICAgICBkZXB0aC0tO1xuXG4gICAgICBibG9jayA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tbWE6ICcsJ1xuICAgICAqL1xuXG4gICAgaWYgKHZhbHVlID09PSBDSEFSX0NPTU1BICYmIGRlcHRoID4gMCkge1xuICAgICAgaWYgKGJsb2NrLnJhbmdlcyA+IDApIHtcbiAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgbGV0IG9wZW4gPSBibG9jay5ub2Rlcy5zaGlmdCgpO1xuICAgICAgICBibG9jay5ub2RlcyA9IFtvcGVuLCB7IHR5cGU6ICd0ZXh0JywgdmFsdWU6IHN0cmluZ2lmeShibG9jaykgfV07XG4gICAgICB9XG5cbiAgICAgIHB1c2goeyB0eXBlOiAnY29tbWEnLCB2YWx1ZSB9KTtcbiAgICAgIGJsb2NrLmNvbW1hcysrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRG90OiAnLidcbiAgICAgKi9cblxuICAgIGlmICh2YWx1ZSA9PT0gQ0hBUl9ET1QgJiYgZGVwdGggPiAwICYmIGJsb2NrLmNvbW1hcyA9PT0gMCkge1xuICAgICAgbGV0IHNpYmxpbmdzID0gYmxvY2subm9kZXM7XG5cbiAgICAgIGlmIChkZXB0aCA9PT0gMCB8fCBzaWJsaW5ncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcHVzaCh7IHR5cGU6ICd0ZXh0JywgdmFsdWUgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldi50eXBlID09PSAnZG90Jykge1xuICAgICAgICBibG9jay5yYW5nZSA9IFtdO1xuICAgICAgICBwcmV2LnZhbHVlICs9IHZhbHVlO1xuICAgICAgICBwcmV2LnR5cGUgPSAncmFuZ2UnO1xuXG4gICAgICAgIGlmIChibG9jay5ub2Rlcy5sZW5ndGggIT09IDMgJiYgYmxvY2subm9kZXMubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgYmxvY2suaW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgYmxvY2sucmFuZ2VzID0gMDtcbiAgICAgICAgICBwcmV2LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBibG9jay5yYW5nZXMrKztcbiAgICAgICAgYmxvY2suYXJncyA9IFtdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXYudHlwZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBzaWJsaW5ncy5wb3AoKTtcblxuICAgICAgICBsZXQgYmVmb3JlID0gc2libGluZ3Nbc2libGluZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGJlZm9yZS52YWx1ZSArPSBwcmV2LnZhbHVlICsgdmFsdWU7XG4gICAgICAgIHByZXYgPSBiZWZvcmU7XG4gICAgICAgIGJsb2NrLnJhbmdlcy0tO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHVzaCh7IHR5cGU6ICdkb3QnLCB2YWx1ZSB9KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRleHRcbiAgICAgKi9cblxuICAgIHB1c2goeyB0eXBlOiAndGV4dCcsIHZhbHVlIH0pO1xuICB9XG5cbiAgLy8gTWFyayBpbWJhbGFuY2VkIGJyYWNlcyBhbmQgYnJhY2tldHMgYXMgaW52YWxpZFxuICBkbyB7XG4gICAgYmxvY2sgPSBzdGFjay5wb3AoKTtcblxuICAgIGlmIChibG9jay50eXBlICE9PSAncm9vdCcpIHtcbiAgICAgIGJsb2NrLm5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgIGlmICghbm9kZS5ub2Rlcykge1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdvcGVuJykgbm9kZS5pc09wZW4gPSB0cnVlO1xuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdjbG9zZScpIG5vZGUuaXNDbG9zZSA9IHRydWU7XG4gICAgICAgICAgaWYgKCFub2RlLm5vZGVzKSBub2RlLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgbm9kZS5pbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGJsb2NrIG9uIHBhcmVudC5ub2RlcyAoYmxvY2sncyBzaWJsaW5ncylcbiAgICAgIGxldCBwYXJlbnQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBpbmRleCA9IHBhcmVudC5ub2Rlcy5pbmRleE9mKGJsb2NrKTtcbiAgICAgIC8vIHJlcGxhY2UgdGhlIChpbnZhbGlkKSBibG9jayB3aXRoIGl0J3Mgbm9kZXNcbiAgICAgIHBhcmVudC5ub2Rlcy5zcGxpY2UoaW5kZXgsIDEsIC4uLmJsb2NrLm5vZGVzKTtcbiAgICB9XG4gIH0gd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApO1xuXG4gIHB1c2goeyB0eXBlOiAnZW9zJyB9KTtcbiAgcmV0dXJuIGFzdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2U7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHN0cmluZ2lmeSA9IHJlcXVpcmUoJy4vbGliL3N0cmluZ2lmeScpO1xuY29uc3QgY29tcGlsZSA9IHJlcXVpcmUoJy4vbGliL2NvbXBpbGUnKTtcbmNvbnN0IGV4cGFuZCA9IHJlcXVpcmUoJy4vbGliL2V4cGFuZCcpO1xuY29uc3QgcGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZScpO1xuXG4vKipcbiAqIEV4cGFuZCB0aGUgZ2l2ZW4gcGF0dGVybiBvciBjcmVhdGUgYSByZWdleC1jb21wYXRpYmxlIHN0cmluZy5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG4gKiBjb25zb2xlLmxvZyhicmFjZXMoJ3thLGIsY30nLCB7IGNvbXBpbGU6IHRydWUgfSkpOyAvLz0+IFsnKGF8YnxjKSddXG4gKiBjb25zb2xlLmxvZyhicmFjZXMoJ3thLGIsY30nKSk7IC8vPT4gWydhJywgJ2InLCAnYyddXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RyYFxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5jb25zdCBicmFjZXMgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBsZXQgb3V0cHV0ID0gW107XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgZm9yIChsZXQgcGF0dGVybiBvZiBpbnB1dCkge1xuICAgICAgbGV0IHJlc3VsdCA9IGJyYWNlcy5jcmVhdGUocGF0dGVybiwgb3B0aW9ucyk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgIG91dHB1dC5wdXNoKC4uLnJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXQucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBbXS5jb25jYXQoYnJhY2VzLmNyZWF0ZShpbnB1dCwgb3B0aW9ucykpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leHBhbmQgPT09IHRydWUgJiYgb3B0aW9ucy5ub2R1cGVzID09PSB0cnVlKSB7XG4gICAgb3V0cHV0ID0gWy4uLm5ldyBTZXQob3V0cHV0KV07XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKlxuICogUGFyc2UgdGhlIGdpdmVuIGBzdHJgIHdpdGggdGhlIGdpdmVuIGBvcHRpb25zYC5cbiAqXG4gKiBgYGBqc1xuICogLy8gYnJhY2VzLnBhcnNlKHBhdHRlcm4sIFssIG9wdGlvbnNdKTtcbiAqIGNvbnN0IGFzdCA9IGJyYWNlcy5wYXJzZSgnYS97YixjfS9kJyk7XG4gKiBjb25zb2xlLmxvZyhhc3QpO1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiBCcmFjZSBwYXR0ZXJuIHRvIHBhcnNlXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGFuIEFTVFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5icmFjZXMucGFyc2UgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4gcGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBicmFjZXMgc3RyaW5nIGZyb20gYW4gQVNULCBvciBhbiBBU1Qgbm9kZS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG4gKiBsZXQgYXN0ID0gYnJhY2VzLnBhcnNlKCdmb28ve2EsYn0vYmFyJyk7XG4gKiBjb25zb2xlLmxvZyhzdHJpbmdpZnkoYXN0Lm5vZGVzWzJdKSk7IC8vPT4gJ3thLGJ9J1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBCcmFjZSBwYXR0ZXJuIG9yIEFTVC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIGV4cGFuZGVkIHZhbHVlcy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLnN0cmluZ2lmeSA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeShicmFjZXMucGFyc2UoaW5wdXQsIG9wdGlvbnMpLCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gc3RyaW5naWZ5KGlucHV0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBicmFjZSBwYXR0ZXJuIGludG8gYSByZWdleC1jb21wYXRpYmxlLCBvcHRpbWl6ZWQgc3RyaW5nLlxuICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBtYWluIFticmFjZXNdKCNicmFjZXMpIGZ1bmN0aW9uIGJ5IGRlZmF1bHQuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogY29uc29sZS5sb2coYnJhY2VzLmNvbXBpbGUoJ2Eve2IsY30vZCcpKTtcbiAqIC8vPT4gWydhLyhifGMpL2QnXVxuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYGlucHV0YCBCcmFjZSBwYXR0ZXJuIG9yIEFTVC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIGV4cGFuZGVkIHZhbHVlcy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLmNvbXBpbGUgPSAoaW5wdXQsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgIGlucHV0ID0gYnJhY2VzLnBhcnNlKGlucHV0LCBvcHRpb25zKTtcbiAgfVxuICByZXR1cm4gY29tcGlsZShpbnB1dCwgb3B0aW9ucyk7XG59O1xuXG4vKipcbiAqIEV4cGFuZHMgYSBicmFjZSBwYXR0ZXJuIGludG8gYW4gYXJyYXkuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGVcbiAqIG1haW4gW2JyYWNlc10oI2JyYWNlcykgZnVuY3Rpb24gd2hlbiBgb3B0aW9ucy5leHBhbmRgIGlzIHRydWUuIEJlZm9yZVxuICogdXNpbmcgdGhpcyBtZXRob2QgaXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSByZWFkIHRoZSBbcGVyZm9ybWFuY2Ugbm90ZXNdKCNwZXJmb3JtYW5jZSkpXG4gKiBhbmQgYWR2YW50YWdlcyBvZiB1c2luZyBbLmNvbXBpbGVdKCNjb21waWxlKSBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBicmFjZXMgPSByZXF1aXJlKCdicmFjZXMnKTtcbiAqIGNvbnNvbGUubG9nKGJyYWNlcy5leHBhbmQoJ2Eve2IsY30vZCcpKTtcbiAqIC8vPT4gWydhL2IvZCcsICdhL2MvZCddO1xuICogYGBgXG4gKiBAcGFyYW0ge1N0cmluZ30gYHBhdHRlcm5gIEJyYWNlIHBhdHRlcm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBgb3B0aW9uc2BcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IG9mIGV4cGFuZGVkIHZhbHVlcy5cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuYnJhY2VzLmV4cGFuZCA9IChpbnB1dCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgaW5wdXQgPSBicmFjZXMucGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IGV4cGFuZChpbnB1dCwgb3B0aW9ucyk7XG5cbiAgLy8gZmlsdGVyIG91dCBlbXB0eSBzdHJpbmdzIGlmIHNwZWNpZmllZFxuICBpZiAob3B0aW9ucy5ub2VtcHR5ID09PSB0cnVlKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIC8vIGZpbHRlciBvdXQgZHVwbGljYXRlcyBpZiBzcGVjaWZpZWRcbiAgaWYgKG9wdGlvbnMubm9kdXBlcyA9PT0gdHJ1ZSkge1xuICAgIHJlc3VsdCA9IFsuLi5uZXcgU2V0KHJlc3VsdCldO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogUHJvY2Vzc2VzIGEgYnJhY2UgcGF0dGVybiBhbmQgcmV0dXJucyBlaXRoZXIgYW4gZXhwYW5kZWQgYXJyYXlcbiAqIChpZiBgb3B0aW9ucy5leHBhbmRgIGlzIHRydWUpLCBhIGhpZ2hseSBvcHRpbWl6ZWQgcmVnZXgtY29tcGF0aWJsZSBzdHJpbmcuXG4gKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1haW4gW2JyYWNlc10oI2JyYWNlcykgZnVuY3Rpb24uXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGJyYWNlcyA9IHJlcXVpcmUoJ2JyYWNlcycpO1xuICogY29uc29sZS5sb2coYnJhY2VzLmNyZWF0ZSgndXNlci17MjAwLi4zMDB9L3Byb2plY3Qte2EsYixjfS17MS4uMTB9JykpXG4gKiAvLz0+ICd1c2VyLSgyMFswLTldfDJbMS05XVswLTldfDMwMCkvcHJvamVjdC0oYXxifGMpLShbMS05XXwxMCknXG4gKiBgYGBcbiAqIEBwYXJhbSB7U3RyaW5nfSBgcGF0dGVybmAgQnJhY2UgcGF0dGVyblxuICogQHBhcmFtIHtPYmplY3R9IGBvcHRpb25zYFxuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgZXhwYW5kZWQgdmFsdWVzLlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5icmFjZXMuY3JlYXRlID0gKGlucHV0LCBvcHRpb25zID0ge30pID0+IHtcbiAgaWYgKGlucHV0ID09PSAnJyB8fCBpbnB1dC5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuIFtpbnB1dF07XG4gIH1cblxuIHJldHVybiBvcHRpb25zLmV4cGFuZCAhPT0gdHJ1ZVxuICAgID8gYnJhY2VzLmNvbXBpbGUoaW5wdXQsIG9wdGlvbnMpXG4gICAgOiBicmFjZXMuZXhwYW5kKGlucHV0LCBvcHRpb25zKTtcbn07XG5cbi8qKlxuICogRXhwb3NlIFwiYnJhY2VzXCJcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJyYWNlcztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9iaW5hcnktZXh0ZW5zaW9ucy5qc29uJyk7XG4iLCIndXNlIHN0cmljdCc7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgYmluYXJ5RXh0ZW5zaW9ucyA9IHJlcXVpcmUoJ2JpbmFyeS1leHRlbnNpb25zJyk7XG5cbmNvbnN0IGV4dGVuc2lvbnMgPSBuZXcgU2V0KGJpbmFyeUV4dGVuc2lvbnMpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbGVQYXRoID0+IGV4dGVuc2lvbnMuaGFzKHBhdGguZXh0bmFtZShmaWxlUGF0aCkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHtzZXB9ID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3Qge3BsYXRmb3JtfSA9IHByb2Nlc3M7XG5cbmV4cG9ydHMuRVZfQUxMID0gJ2FsbCc7XG5leHBvcnRzLkVWX1JFQURZID0gJ3JlYWR5JztcbmV4cG9ydHMuRVZfQUREID0gJ2FkZCc7XG5leHBvcnRzLkVWX0NIQU5HRSA9ICdjaGFuZ2UnO1xuZXhwb3J0cy5FVl9BRERfRElSID0gJ2FkZERpcic7XG5leHBvcnRzLkVWX1VOTElOSyA9ICd1bmxpbmsnO1xuZXhwb3J0cy5FVl9VTkxJTktfRElSID0gJ3VubGlua0Rpcic7XG5leHBvcnRzLkVWX1JBVyA9ICdyYXcnO1xuZXhwb3J0cy5FVl9FUlJPUiA9ICdlcnJvcic7XG5cbmV4cG9ydHMuU1RSX0RBVEEgPSAnZGF0YSc7XG5leHBvcnRzLlNUUl9FTkQgPSAnZW5kJztcbmV4cG9ydHMuU1RSX0NMT1NFID0gJ2Nsb3NlJztcblxuZXhwb3J0cy5GU0VWRU5UX0NSRUFURUQgPSAnY3JlYXRlZCc7XG5leHBvcnRzLkZTRVZFTlRfTU9ESUZJRUQgPSAnbW9kaWZpZWQnO1xuZXhwb3J0cy5GU0VWRU5UX0RFTEVURUQgPSAnZGVsZXRlZCc7XG5leHBvcnRzLkZTRVZFTlRfTU9WRUQgPSAnbW92ZWQnO1xuZXhwb3J0cy5GU0VWRU5UX0NMT05FRCA9ICdjbG9uZWQnO1xuZXhwb3J0cy5GU0VWRU5UX1VOS05PV04gPSAndW5rbm93bic7XG5leHBvcnRzLkZTRVZFTlRfVFlQRV9GSUxFID0gJ2ZpbGUnO1xuZXhwb3J0cy5GU0VWRU5UX1RZUEVfRElSRUNUT1JZID0gJ2RpcmVjdG9yeSc7XG5leHBvcnRzLkZTRVZFTlRfVFlQRV9TWU1MSU5LID0gJ3N5bWxpbmsnO1xuXG5leHBvcnRzLktFWV9MSVNURU5FUlMgPSAnbGlzdGVuZXJzJztcbmV4cG9ydHMuS0VZX0VSUiA9ICdlcnJIYW5kbGVycyc7XG5leHBvcnRzLktFWV9SQVcgPSAncmF3RW1pdHRlcnMnO1xuZXhwb3J0cy5IQU5ETEVSX0tFWVMgPSBbZXhwb3J0cy5LRVlfTElTVEVORVJTLCBleHBvcnRzLktFWV9FUlIsIGV4cG9ydHMuS0VZX1JBV107XG5cbmV4cG9ydHMuRE9UX1NMQVNIID0gYC4ke3NlcH1gO1xuXG5leHBvcnRzLkJBQ0tfU0xBU0hfUkUgPSAvXFxcXC9nO1xuZXhwb3J0cy5ET1VCTEVfU0xBU0hfUkUgPSAvXFwvXFwvLztcbmV4cG9ydHMuU0xBU0hfT1JfQkFDS19TTEFTSF9SRSA9IC9bL1xcXFxdLztcbmV4cG9ydHMuRE9UX1JFID0gL1xcLi4qXFwuKHN3W3B4XSkkfH4kfFxcLnN1YmwuKlxcLnRtcC87XG5leHBvcnRzLlJFUExBQ0VSX1JFID0gL15cXC5bL1xcXFxdLztcblxuZXhwb3J0cy5TTEFTSCA9ICcvJztcbmV4cG9ydHMuU0xBU0hfU0xBU0ggPSAnLy8nO1xuZXhwb3J0cy5CUkFDRV9TVEFSVCA9ICd7JztcbmV4cG9ydHMuQkFORyA9ICchJztcbmV4cG9ydHMuT05FX0RPVCA9ICcuJztcbmV4cG9ydHMuVFdPX0RPVFMgPSAnLi4nO1xuZXhwb3J0cy5TVEFSID0gJyonO1xuZXhwb3J0cy5HTE9CU1RBUiA9ICcqKic7XG5leHBvcnRzLlJPT1RfR0xPQlNUQVIgPSAnLyoqLyonO1xuZXhwb3J0cy5TTEFTSF9HTE9CU1RBUiA9ICcvKionO1xuZXhwb3J0cy5ESVJfU1VGRklYID0gJ0Rpcic7XG5leHBvcnRzLkFOWU1BVENIX09QVFMgPSB7ZG90OiB0cnVlfTtcbmV4cG9ydHMuU1RSSU5HX1RZUEUgPSAnc3RyaW5nJztcbmV4cG9ydHMuRlVOQ1RJT05fVFlQRSA9ICdmdW5jdGlvbic7XG5leHBvcnRzLkVNUFRZX1NUUiA9ICcnO1xuZXhwb3J0cy5FTVBUWV9GTiA9ICgpID0+IHt9O1xuZXhwb3J0cy5JREVOVElUWV9GTiA9IHZhbCA9PiB2YWw7XG5cbmV4cG9ydHMuaXNXaW5kb3dzID0gcGxhdGZvcm0gPT09ICd3aW4zMic7XG5leHBvcnRzLmlzTWFjb3MgPSBwbGF0Zm9ybSA9PT0gJ2Rhcndpbic7XG5leHBvcnRzLmlzTGludXggPSBwbGF0Zm9ybSA9PT0gJ2xpbnV4JztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3Qgc3lzUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBpc0JpbmFyeVBhdGggPSByZXF1aXJlKCdpcy1iaW5hcnktcGF0aCcpO1xuY29uc3Qge1xuICBpc1dpbmRvd3MsXG4gIGlzTGludXgsXG4gIEVNUFRZX0ZOLFxuICBFTVBUWV9TVFIsXG4gIEtFWV9MSVNURU5FUlMsXG4gIEtFWV9FUlIsXG4gIEtFWV9SQVcsXG4gIEhBTkRMRVJfS0VZUyxcbiAgRVZfQ0hBTkdFLFxuICBFVl9BREQsXG4gIEVWX0FERF9ESVIsXG4gIEVWX0VSUk9SLFxuICBTVFJfREFUQSxcbiAgU1RSX0VORCxcbiAgQlJBQ0VfU1RBUlQsXG4gIFNUQVJcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5jb25zdCBUSFJPVFRMRV9NT0RFX1dBVENIID0gJ3dhdGNoJztcblxuY29uc3Qgb3BlbiA9IHByb21pc2lmeShmcy5vcGVuKTtcbmNvbnN0IHN0YXQgPSBwcm9taXNpZnkoZnMuc3RhdCk7XG5jb25zdCBsc3RhdCA9IHByb21pc2lmeShmcy5sc3RhdCk7XG5jb25zdCBjbG9zZSA9IHByb21pc2lmeShmcy5jbG9zZSk7XG5jb25zdCBmc3JlYWxwYXRoID0gcHJvbWlzaWZ5KGZzLnJlYWxwYXRoKTtcblxuY29uc3Qgc3RhdE1ldGhvZHMgPSB7IGxzdGF0LCBzdGF0IH07XG5cbi8vIFRPRE86IGVtaXQgZXJyb3JzIHByb3Blcmx5LiBFeGFtcGxlOiBFTUZJTEUgb24gTWFjb3MuXG5jb25zdCBmb3JlYWNoID0gKHZhbCwgZm4pID0+IHtcbiAgaWYgKHZhbCBpbnN0YW5jZW9mIFNldCkge1xuICAgIHZhbC5mb3JFYWNoKGZuKTtcbiAgfSBlbHNlIHtcbiAgICBmbih2YWwpO1xuICB9XG59O1xuXG5jb25zdCBhZGRBbmRDb252ZXJ0ID0gKG1haW4sIHByb3AsIGl0ZW0pID0+IHtcbiAgbGV0IGNvbnRhaW5lciA9IG1haW5bcHJvcF07XG4gIGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIFNldCkpIHtcbiAgICBtYWluW3Byb3BdID0gY29udGFpbmVyID0gbmV3IFNldChbY29udGFpbmVyXSk7XG4gIH1cbiAgY29udGFpbmVyLmFkZChpdGVtKTtcbn07XG5cbmNvbnN0IGNsZWFySXRlbSA9IGNvbnQgPT4ga2V5ID0+IHtcbiAgY29uc3Qgc2V0ID0gY29udFtrZXldO1xuICBpZiAoc2V0IGluc3RhbmNlb2YgU2V0KSB7XG4gICAgc2V0LmNsZWFyKCk7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIGNvbnRba2V5XTtcbiAgfVxufTtcblxuY29uc3QgZGVsRnJvbVNldCA9IChtYWluLCBwcm9wLCBpdGVtKSA9PiB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IG1haW5bcHJvcF07XG4gIGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICBjb250YWluZXIuZGVsZXRlKGl0ZW0pO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lciA9PT0gaXRlbSkge1xuICAgIGRlbGV0ZSBtYWluW3Byb3BdO1xuICB9XG59O1xuXG5jb25zdCBpc0VtcHR5U2V0ID0gKHZhbCkgPT4gdmFsIGluc3RhbmNlb2YgU2V0ID8gdmFsLnNpemUgPT09IDAgOiAhdmFsO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtTdHJpbmd9IFBhdGhcbiAqL1xuXG4vLyBmc193YXRjaCBoZWxwZXJzXG5cbi8vIG9iamVjdCB0byBob2xkIHBlci1wcm9jZXNzIGZzX3dhdGNoIGluc3RhbmNlc1xuLy8gKG1heSBiZSBzaGFyZWQgYWNyb3NzIGNob2tpZGFyIEZTV2F0Y2hlciBpbnN0YW5jZXMpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRnNXYXRjaENvbnRhaW5lclxuICogQHByb3BlcnR5IHtTZXR9IGxpc3RlbmVyc1xuICogQHByb3BlcnR5IHtTZXR9IGVyckhhbmRsZXJzXG4gKiBAcHJvcGVydHkge1NldH0gcmF3RW1pdHRlcnNcbiAqIEBwcm9wZXJ0eSB7ZnMuRlNXYXRjaGVyPX0gd2F0Y2hlclxuICogQHByb3BlcnR5IHtCb29sZWFuPX0gd2F0Y2hlclVudXNhYmxlXG4gKi9cblxuLyoqXG4gKiBAdHlwZSB7TWFwPFN0cmluZyxGc1dhdGNoQ29udGFpbmVyPn1cbiAqL1xuY29uc3QgRnNXYXRjaEluc3RhbmNlcyA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBJbnN0YW50aWF0ZXMgdGhlIGZzX3dhdGNoIGludGVyZmFjZVxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGggdG8gYmUgd2F0Y2hlZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGZzX3dhdGNoXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBtYWluIGV2ZW50IGhhbmRsZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVyckhhbmRsZXIgZW1pdHMgaW5mbyBhYm91dCBlcnJvcnNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVtaXRSYXcgZW1pdHMgcmF3IGV2ZW50IGRhdGFcbiAqIEByZXR1cm5zIHtmcy5GU1dhdGNoZXJ9IG5ldyBmc2V2ZW50cyBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGVGc1dhdGNoSW5zdGFuY2UocGF0aCwgb3B0aW9ucywgbGlzdGVuZXIsIGVyckhhbmRsZXIsIGVtaXRSYXcpIHtcbiAgY29uc3QgaGFuZGxlRXZlbnQgPSAocmF3RXZlbnQsIGV2UGF0aCkgPT4ge1xuICAgIGxpc3RlbmVyKHBhdGgpO1xuICAgIGVtaXRSYXcocmF3RXZlbnQsIGV2UGF0aCwge3dhdGNoZWRQYXRoOiBwYXRofSk7XG5cbiAgICAvLyBlbWl0IGJhc2VkIG9uIGV2ZW50cyBvY2N1cnJpbmcgZm9yIGZpbGVzIGZyb20gYSBkaXJlY3RvcnkncyB3YXRjaGVyIGluXG4gICAgLy8gY2FzZSB0aGUgZmlsZSdzIHdhdGNoZXIgbWlzc2VzIGl0IChhbmQgcmVseSBvbiB0aHJvdHRsaW5nIHRvIGRlLWR1cGUpXG4gICAgaWYgKGV2UGF0aCAmJiBwYXRoICE9PSBldlBhdGgpIHtcbiAgICAgIGZzV2F0Y2hCcm9hZGNhc3QoXG4gICAgICAgIHN5c1BhdGgucmVzb2x2ZShwYXRoLCBldlBhdGgpLCBLRVlfTElTVEVORVJTLCBzeXNQYXRoLmpvaW4ocGF0aCwgZXZQYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZzLndhdGNoKHBhdGgsIG9wdGlvbnMsIGhhbmRsZUV2ZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBlcnJIYW5kbGVyKGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmb3IgcGFzc2luZyBmc193YXRjaCBldmVudCBkYXRhIHRvIGEgY29sbGVjdGlvbiBvZiBsaXN0ZW5lcnNcbiAqIEBwYXJhbSB7UGF0aH0gZnVsbFBhdGggYWJzb2x1dGUgcGF0aCBib3VuZCB0byBmc193YXRjaCBpbnN0YW5jZVxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGUgbGlzdGVuZXIgdHlwZVxuICogQHBhcmFtIHsqPX0gdmFsMSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGxpc3RlbmVyc1xuICogQHBhcmFtIHsqPX0gdmFsMlxuICogQHBhcmFtIHsqPX0gdmFsM1xuICovXG5jb25zdCBmc1dhdGNoQnJvYWRjYXN0ID0gKGZ1bGxQYXRoLCB0eXBlLCB2YWwxLCB2YWwyLCB2YWwzKSA9PiB7XG4gIGNvbnN0IGNvbnQgPSBGc1dhdGNoSW5zdGFuY2VzLmdldChmdWxsUGF0aCk7XG4gIGlmICghY29udCkgcmV0dXJuO1xuICBmb3JlYWNoKGNvbnRbdHlwZV0sIChsaXN0ZW5lcikgPT4ge1xuICAgIGxpc3RlbmVyKHZhbDEsIHZhbDIsIHZhbDMpO1xuICB9KTtcbn07XG5cbi8qKlxuICogSW5zdGFudGlhdGVzIHRoZSBmc193YXRjaCBpbnRlcmZhY2Ugb3IgYmluZHMgbGlzdGVuZXJzXG4gKiB0byBhbiBleGlzdGluZyBvbmUgY292ZXJpbmcgdGhlIHNhbWUgZmlsZSBzeXN0ZW0gZW50cnlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoXG4gKiBAcGFyYW0ge1N0cmluZ30gZnVsbFBhdGggYWJzb2x1dGUgcGF0aFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGZzX3dhdGNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFuZGxlcnMgY29udGFpbmVyIGZvciBldmVudCBsaXN0ZW5lciBmdW5jdGlvbnNcbiAqL1xuY29uc3Qgc2V0RnNXYXRjaExpc3RlbmVyID0gKHBhdGgsIGZ1bGxQYXRoLCBvcHRpb25zLCBoYW5kbGVycykgPT4ge1xuICBjb25zdCB7bGlzdGVuZXIsIGVyckhhbmRsZXIsIHJhd0VtaXR0ZXJ9ID0gaGFuZGxlcnM7XG4gIGxldCBjb250ID0gRnNXYXRjaEluc3RhbmNlcy5nZXQoZnVsbFBhdGgpO1xuXG4gIC8qKiBAdHlwZSB7ZnMuRlNXYXRjaGVyPX0gKi9cbiAgbGV0IHdhdGNoZXI7XG4gIGlmICghb3B0aW9ucy5wZXJzaXN0ZW50KSB7XG4gICAgd2F0Y2hlciA9IGNyZWF0ZUZzV2F0Y2hJbnN0YW5jZShcbiAgICAgIHBhdGgsIG9wdGlvbnMsIGxpc3RlbmVyLCBlcnJIYW5kbGVyLCByYXdFbWl0dGVyXG4gICAgKTtcbiAgICByZXR1cm4gd2F0Y2hlci5jbG9zZS5iaW5kKHdhdGNoZXIpO1xuICB9XG4gIGlmIChjb250KSB7XG4gICAgYWRkQW5kQ29udmVydChjb250LCBLRVlfTElTVEVORVJTLCBsaXN0ZW5lcik7XG4gICAgYWRkQW5kQ29udmVydChjb250LCBLRVlfRVJSLCBlcnJIYW5kbGVyKTtcbiAgICBhZGRBbmRDb252ZXJ0KGNvbnQsIEtFWV9SQVcsIHJhd0VtaXR0ZXIpO1xuICB9IGVsc2Uge1xuICAgIHdhdGNoZXIgPSBjcmVhdGVGc1dhdGNoSW5zdGFuY2UoXG4gICAgICBwYXRoLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIGZzV2F0Y2hCcm9hZGNhc3QuYmluZChudWxsLCBmdWxsUGF0aCwgS0VZX0xJU1RFTkVSUyksXG4gICAgICBlcnJIYW5kbGVyLCAvLyBubyBuZWVkIHRvIHVzZSBicm9hZGNhc3QgaGVyZVxuICAgICAgZnNXYXRjaEJyb2FkY2FzdC5iaW5kKG51bGwsIGZ1bGxQYXRoLCBLRVlfUkFXKVxuICAgICk7XG4gICAgaWYgKCF3YXRjaGVyKSByZXR1cm47XG4gICAgd2F0Y2hlci5vbihFVl9FUlJPUiwgYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCBicm9hZGNhc3RFcnIgPSBmc1dhdGNoQnJvYWRjYXN0LmJpbmQobnVsbCwgZnVsbFBhdGgsIEtFWV9FUlIpO1xuICAgICAgY29udC53YXRjaGVyVW51c2FibGUgPSB0cnVlOyAvLyBkb2N1bWVudGVkIHNpbmNlIE5vZGUgMTAuNC4xXG4gICAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzQzMzdcbiAgICAgIGlmIChpc1dpbmRvd3MgJiYgZXJyb3IuY29kZSA9PT0gJ0VQRVJNJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGZkID0gYXdhaXQgb3BlbihwYXRoLCAncicpO1xuICAgICAgICAgIGF3YWl0IGNsb3NlKGZkKTtcbiAgICAgICAgICBicm9hZGNhc3RFcnIoZXJyb3IpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicm9hZGNhc3RFcnIoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnQgPSB7XG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyLFxuICAgICAgZXJySGFuZGxlcnM6IGVyckhhbmRsZXIsXG4gICAgICByYXdFbWl0dGVyczogcmF3RW1pdHRlcixcbiAgICAgIHdhdGNoZXJcbiAgICB9O1xuICAgIEZzV2F0Y2hJbnN0YW5jZXMuc2V0KGZ1bGxQYXRoLCBjb250KTtcbiAgfVxuICAvLyBjb25zdCBpbmRleCA9IGNvbnQubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gIC8vIHJlbW92ZXMgdGhpcyBpbnN0YW5jZSdzIGxpc3RlbmVycyBhbmQgY2xvc2VzIHRoZSB1bmRlcmx5aW5nIGZzX3dhdGNoXG4gIC8vIGluc3RhbmNlIGlmIHRoZXJlIGFyZSBubyBtb3JlIGxpc3RlbmVycyBsZWZ0XG4gIHJldHVybiAoKSA9PiB7XG4gICAgZGVsRnJvbVNldChjb250LCBLRVlfTElTVEVORVJTLCBsaXN0ZW5lcik7XG4gICAgZGVsRnJvbVNldChjb250LCBLRVlfRVJSLCBlcnJIYW5kbGVyKTtcbiAgICBkZWxGcm9tU2V0KGNvbnQsIEtFWV9SQVcsIHJhd0VtaXR0ZXIpO1xuICAgIGlmIChpc0VtcHR5U2V0KGNvbnQubGlzdGVuZXJzKSkge1xuICAgICAgLy8gQ2hlY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IGlzc3VlIGdoLTczMC5cbiAgICAgIC8vIGlmIChjb250LndhdGNoZXJVbnVzYWJsZSkge1xuICAgICAgY29udC53YXRjaGVyLmNsb3NlKCk7XG4gICAgICAvLyB9XG4gICAgICBGc1dhdGNoSW5zdGFuY2VzLmRlbGV0ZShmdWxsUGF0aCk7XG4gICAgICBIQU5ETEVSX0tFWVMuZm9yRWFjaChjbGVhckl0ZW0oY29udCkpO1xuICAgICAgY29udC53YXRjaGVyID0gdW5kZWZpbmVkO1xuICAgICAgT2JqZWN0LmZyZWV6ZShjb250KTtcbiAgICB9XG4gIH07XG59O1xuXG4vLyBmc193YXRjaEZpbGUgaGVscGVyc1xuXG4vLyBvYmplY3QgdG8gaG9sZCBwZXItcHJvY2VzcyBmc193YXRjaEZpbGUgaW5zdGFuY2VzXG4vLyAobWF5IGJlIHNoYXJlZCBhY3Jvc3MgY2hva2lkYXIgRlNXYXRjaGVyIGluc3RhbmNlcylcbmNvbnN0IEZzV2F0Y2hGaWxlSW5zdGFuY2VzID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIEluc3RhbnRpYXRlcyB0aGUgZnNfd2F0Y2hGaWxlIGludGVyZmFjZSBvciBiaW5kcyBsaXN0ZW5lcnNcbiAqIHRvIGFuIGV4aXN0aW5nIG9uZSBjb3ZlcmluZyB0aGUgc2FtZSBmaWxlIHN5c3RlbSBlbnRyeVxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGggdG8gYmUgd2F0Y2hlZFxuICogQHBhcmFtIHtTdHJpbmd9IGZ1bGxQYXRoIGFic29sdXRlIHBhdGhcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIGZzX3dhdGNoRmlsZVxuICogQHBhcmFtIHtPYmplY3R9IGhhbmRsZXJzIGNvbnRhaW5lciBmb3IgZXZlbnQgbGlzdGVuZXIgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGNsb3NlclxuICovXG5jb25zdCBzZXRGc1dhdGNoRmlsZUxpc3RlbmVyID0gKHBhdGgsIGZ1bGxQYXRoLCBvcHRpb25zLCBoYW5kbGVycykgPT4ge1xuICBjb25zdCB7bGlzdGVuZXIsIHJhd0VtaXR0ZXJ9ID0gaGFuZGxlcnM7XG4gIGxldCBjb250ID0gRnNXYXRjaEZpbGVJbnN0YW5jZXMuZ2V0KGZ1bGxQYXRoKTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycywgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbiAgbGV0IGxpc3RlbmVycyA9IG5ldyBTZXQoKTtcbiAgbGV0IHJhd0VtaXR0ZXJzID0gbmV3IFNldCgpO1xuXG4gIGNvbnN0IGNvcHRzID0gY29udCAmJiBjb250Lm9wdGlvbnM7XG4gIGlmIChjb3B0cyAmJiAoY29wdHMucGVyc2lzdGVudCA8IG9wdGlvbnMucGVyc2lzdGVudCB8fCBjb3B0cy5pbnRlcnZhbCA+IG9wdGlvbnMuaW50ZXJ2YWwpKSB7XG4gICAgLy8gXCJVcGdyYWRlXCIgdGhlIHdhdGNoZXIgdG8gcGVyc2lzdGVuY2Ugb3IgYSBxdWlja2VyIGludGVydmFsLlxuICAgIC8vIFRoaXMgY3JlYXRlcyBzb21lIHVubGlrZWx5IGVkZ2UgY2FzZSBpc3N1ZXMgaWYgdGhlIHVzZXIgbWl4ZXNcbiAgICAvLyBzZXR0aW5ncyBpbiBhIHZlcnkgd2VpcmQgd2F5LCBidXQgc29sdmluZyBmb3IgdGhvc2UgY2FzZXNcbiAgICAvLyBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZSBmb3IgdGhlIGFkZGVkIGNvbXBsZXhpdHkuXG4gICAgbGlzdGVuZXJzID0gY29udC5saXN0ZW5lcnM7XG4gICAgcmF3RW1pdHRlcnMgPSBjb250LnJhd0VtaXR0ZXJzO1xuICAgIGZzLnVud2F0Y2hGaWxlKGZ1bGxQYXRoKTtcbiAgICBjb250ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycywgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cblxuICBpZiAoY29udCkge1xuICAgIGFkZEFuZENvbnZlcnQoY29udCwgS0VZX0xJU1RFTkVSUywgbGlzdGVuZXIpO1xuICAgIGFkZEFuZENvbnZlcnQoY29udCwgS0VZX1JBVywgcmF3RW1pdHRlcik7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ET1xuICAgIC8vIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIC8vIHJhd0VtaXR0ZXJzLmFkZChyYXdFbWl0dGVyKTtcbiAgICBjb250ID0ge1xuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcixcbiAgICAgIHJhd0VtaXR0ZXJzOiByYXdFbWl0dGVyLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHdhdGNoZXI6IGZzLndhdGNoRmlsZShmdWxsUGF0aCwgb3B0aW9ucywgKGN1cnIsIHByZXYpID0+IHtcbiAgICAgICAgZm9yZWFjaChjb250LnJhd0VtaXR0ZXJzLCAocmF3RW1pdHRlcikgPT4ge1xuICAgICAgICAgIHJhd0VtaXR0ZXIoRVZfQ0hBTkdFLCBmdWxsUGF0aCwge2N1cnIsIHByZXZ9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGN1cnJtdGltZSA9IGN1cnIubXRpbWVNcztcbiAgICAgICAgaWYgKGN1cnIuc2l6ZSAhPT0gcHJldi5zaXplIHx8IGN1cnJtdGltZSA+IHByZXYubXRpbWVNcyB8fCBjdXJybXRpbWUgPT09IDApIHtcbiAgICAgICAgICBmb3JlYWNoKGNvbnQubGlzdGVuZXJzLCAobGlzdGVuZXIpID0+IGxpc3RlbmVyKHBhdGgsIGN1cnIpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9O1xuICAgIEZzV2F0Y2hGaWxlSW5zdGFuY2VzLnNldChmdWxsUGF0aCwgY29udCk7XG4gIH1cbiAgLy8gY29uc3QgaW5kZXggPSBjb250Lmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAvLyBSZW1vdmVzIHRoaXMgaW5zdGFuY2UncyBsaXN0ZW5lcnMgYW5kIGNsb3NlcyB0aGUgdW5kZXJseWluZyBmc193YXRjaEZpbGVcbiAgLy8gaW5zdGFuY2UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgbGlzdGVuZXJzIGxlZnQuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZGVsRnJvbVNldChjb250LCBLRVlfTElTVEVORVJTLCBsaXN0ZW5lcik7XG4gICAgZGVsRnJvbVNldChjb250LCBLRVlfUkFXLCByYXdFbWl0dGVyKTtcbiAgICBpZiAoaXNFbXB0eVNldChjb250Lmxpc3RlbmVycykpIHtcbiAgICAgIEZzV2F0Y2hGaWxlSW5zdGFuY2VzLmRlbGV0ZShmdWxsUGF0aCk7XG4gICAgICBmcy51bndhdGNoRmlsZShmdWxsUGF0aCk7XG4gICAgICBjb250Lm9wdGlvbnMgPSBjb250LndhdGNoZXIgPSB1bmRlZmluZWQ7XG4gICAgICBPYmplY3QuZnJlZXplKGNvbnQpO1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogQG1peGluXG4gKi9cbmNsYXNzIE5vZGVGc0hhbmRsZXIge1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vaW5kZXhcIikuRlNXYXRjaGVyfSBmc1dcbiAqL1xuY29uc3RydWN0b3IoZnNXKSB7XG4gIHRoaXMuZnN3ID0gZnNXO1xuICB0aGlzLl9ib3VuZEhhbmRsZUVycm9yID0gKGVycm9yKSA9PiBmc1cuX2hhbmRsZUVycm9yKGVycm9yKTtcbn1cblxuLyoqXG4gKiBXYXRjaCBmaWxlIGZvciBjaGFuZ2VzIHdpdGggZnNfd2F0Y2hGaWxlIG9yIGZzX3dhdGNoLlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGggdG8gZmlsZSBvciBkaXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIG9uIGZzIGNoYW5nZVxuICogQHJldHVybnMge0Z1bmN0aW9ufSBjbG9zZXIgZm9yIHRoZSB3YXRjaGVyIGluc3RhbmNlXG4gKi9cbl93YXRjaFdpdGhOb2RlRnMocGF0aCwgbGlzdGVuZXIpIHtcbiAgY29uc3Qgb3B0cyA9IHRoaXMuZnN3Lm9wdGlvbnM7XG4gIGNvbnN0IGRpcmVjdG9yeSA9IHN5c1BhdGguZGlybmFtZShwYXRoKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBzeXNQYXRoLmJhc2VuYW1lKHBhdGgpO1xuICBjb25zdCBwYXJlbnQgPSB0aGlzLmZzdy5fZ2V0V2F0Y2hlZERpcihkaXJlY3RvcnkpO1xuICBwYXJlbnQuYWRkKGJhc2VuYW1lKTtcbiAgY29uc3QgYWJzb2x1dGVQYXRoID0gc3lzUGF0aC5yZXNvbHZlKHBhdGgpO1xuICBjb25zdCBvcHRpb25zID0ge3BlcnNpc3RlbnQ6IG9wdHMucGVyc2lzdGVudH07XG4gIGlmICghbGlzdGVuZXIpIGxpc3RlbmVyID0gRU1QVFlfRk47XG5cbiAgbGV0IGNsb3NlcjtcbiAgaWYgKG9wdHMudXNlUG9sbGluZykge1xuICAgIG9wdGlvbnMuaW50ZXJ2YWwgPSBvcHRzLmVuYWJsZUJpbmFyeUludGVydmFsICYmIGlzQmluYXJ5UGF0aChiYXNlbmFtZSkgP1xuICAgICAgb3B0cy5iaW5hcnlJbnRlcnZhbCA6IG9wdHMuaW50ZXJ2YWw7XG4gICAgY2xvc2VyID0gc2V0RnNXYXRjaEZpbGVMaXN0ZW5lcihwYXRoLCBhYnNvbHV0ZVBhdGgsIG9wdGlvbnMsIHtcbiAgICAgIGxpc3RlbmVyLFxuICAgICAgcmF3RW1pdHRlcjogdGhpcy5mc3cuX2VtaXRSYXdcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjbG9zZXIgPSBzZXRGc1dhdGNoTGlzdGVuZXIocGF0aCwgYWJzb2x1dGVQYXRoLCBvcHRpb25zLCB7XG4gICAgICBsaXN0ZW5lcixcbiAgICAgIGVyckhhbmRsZXI6IHRoaXMuX2JvdW5kSGFuZGxlRXJyb3IsXG4gICAgICByYXdFbWl0dGVyOiB0aGlzLmZzdy5fZW1pdFJhd1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBjbG9zZXI7XG59XG5cbi8qKlxuICogV2F0Y2ggYSBmaWxlIGFuZCBlbWl0IGFkZCBldmVudCBpZiB3YXJyYW50ZWQuXG4gKiBAcGFyYW0ge1BhdGh9IGZpbGUgUGF0aFxuICogQHBhcmFtIHtmcy5TdGF0c30gc3RhdHMgcmVzdWx0IG9mIGZzX3N0YXRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5pdGlhbEFkZCB3YXMgdGhlIGZpbGUgYWRkZWQgYXQgd2F0Y2ggaW5zdGFudGlhdGlvbj9cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gY2xvc2VyIGZvciB0aGUgd2F0Y2hlciBpbnN0YW5jZVxuICovXG5faGFuZGxlRmlsZShmaWxlLCBzdGF0cywgaW5pdGlhbEFkZCkge1xuICBpZiAodGhpcy5mc3cuY2xvc2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGRpcm5hbWUgPSBzeXNQYXRoLmRpcm5hbWUoZmlsZSk7XG4gIGNvbnN0IGJhc2VuYW1lID0gc3lzUGF0aC5iYXNlbmFtZShmaWxlKTtcbiAgY29uc3QgcGFyZW50ID0gdGhpcy5mc3cuX2dldFdhdGNoZWREaXIoZGlybmFtZSk7XG4gIC8vIHN0YXRzIGlzIGFsd2F5cyBwcmVzZW50XG4gIGxldCBwcmV2U3RhdHMgPSBzdGF0cztcblxuICAvLyBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGJlaW5nIHdhdGNoZWQsIGRvIG5vdGhpbmdcbiAgaWYgKHBhcmVudC5oYXMoYmFzZW5hbWUpKSByZXR1cm47XG5cbiAgY29uc3QgbGlzdGVuZXIgPSBhc3luYyAocGF0aCwgbmV3U3RhdHMpID0+IHtcbiAgICBpZiAoIXRoaXMuZnN3Ll90aHJvdHRsZShUSFJPVFRMRV9NT0RFX1dBVENILCBmaWxlLCA1KSkgcmV0dXJuO1xuICAgIGlmICghbmV3U3RhdHMgfHwgbmV3U3RhdHMubXRpbWVNcyA9PT0gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHMgPSBhd2FpdCBzdGF0KGZpbGUpO1xuICAgICAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIC8vIENoZWNrIHRoYXQgY2hhbmdlIGV2ZW50IHdhcyBub3QgZmlyZWQgYmVjYXVzZSBvZiBjaGFuZ2VkIG9ubHkgYWNjZXNzVGltZS5cbiAgICAgICAgY29uc3QgYXQgPSBuZXdTdGF0cy5hdGltZU1zO1xuICAgICAgICBjb25zdCBtdCA9IG5ld1N0YXRzLm10aW1lTXM7XG4gICAgICAgIGlmICghYXQgfHwgYXQgPD0gbXQgfHwgbXQgIT09IHByZXZTdGF0cy5tdGltZU1zKSB7XG4gICAgICAgICAgdGhpcy5mc3cuX2VtaXQoRVZfQ0hBTkdFLCBmaWxlLCBuZXdTdGF0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGludXggJiYgcHJldlN0YXRzLmlubyAhPT0gbmV3U3RhdHMuaW5vKSB7XG4gICAgICAgICAgdGhpcy5mc3cuX2Nsb3NlRmlsZShwYXRoKVxuICAgICAgICAgIHByZXZTdGF0cyA9IG5ld1N0YXRzO1xuICAgICAgICAgIHRoaXMuZnN3Ll9hZGRQYXRoQ2xvc2VyKHBhdGgsIHRoaXMuX3dhdGNoV2l0aE5vZGVGcyhmaWxlLCBsaXN0ZW5lcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZTdGF0cyA9IG5ld1N0YXRzO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBGaXggaXNzdWVzIHdoZXJlIG10aW1lIGlzIG51bGwgYnV0IGZpbGUgaXMgc3RpbGwgcHJlc2VudFxuICAgICAgICB0aGlzLmZzdy5fcmVtb3ZlKGRpcm5hbWUsIGJhc2VuYW1lKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBpcyBhYm91dCB0byBiZSBlbWl0dGVkIGlmIGZpbGUgbm90IGFscmVhZHkgdHJhY2tlZCBpbiBwYXJlbnRcbiAgICB9IGVsc2UgaWYgKHBhcmVudC5oYXMoYmFzZW5hbWUpKSB7XG4gICAgICAvLyBDaGVjayB0aGF0IGNoYW5nZSBldmVudCB3YXMgbm90IGZpcmVkIGJlY2F1c2Ugb2YgY2hhbmdlZCBvbmx5IGFjY2Vzc1RpbWUuXG4gICAgICBjb25zdCBhdCA9IG5ld1N0YXRzLmF0aW1lTXM7XG4gICAgICBjb25zdCBtdCA9IG5ld1N0YXRzLm10aW1lTXM7XG4gICAgICBpZiAoIWF0IHx8IGF0IDw9IG10IHx8IG10ICE9PSBwcmV2U3RhdHMubXRpbWVNcykge1xuICAgICAgICB0aGlzLmZzdy5fZW1pdChFVl9DSEFOR0UsIGZpbGUsIG5ld1N0YXRzKTtcbiAgICAgIH1cbiAgICAgIHByZXZTdGF0cyA9IG5ld1N0YXRzO1xuICAgIH1cbiAgfVxuICAvLyBraWNrIG9mZiB0aGUgd2F0Y2hlclxuICBjb25zdCBjbG9zZXIgPSB0aGlzLl93YXRjaFdpdGhOb2RlRnMoZmlsZSwgbGlzdGVuZXIpO1xuXG4gIC8vIGVtaXQgYW4gYWRkIGV2ZW50IGlmIHdlJ3JlIHN1cHBvc2VkIHRvXG4gIGlmICghKGluaXRpYWxBZGQgJiYgdGhpcy5mc3cub3B0aW9ucy5pZ25vcmVJbml0aWFsKSAmJiB0aGlzLmZzdy5faXNudElnbm9yZWQoZmlsZSkpIHtcbiAgICBpZiAoIXRoaXMuZnN3Ll90aHJvdHRsZShFVl9BREQsIGZpbGUsIDApKSByZXR1cm47XG4gICAgdGhpcy5mc3cuX2VtaXQoRVZfQURELCBmaWxlLCBzdGF0cyk7XG4gIH1cblxuICByZXR1cm4gY2xvc2VyO1xufVxuXG4vKipcbiAqIEhhbmRsZSBzeW1saW5rcyBlbmNvdW50ZXJlZCB3aGlsZSByZWFkaW5nIGEgZGlyLlxuICogQHBhcmFtIHtPYmplY3R9IGVudHJ5IHJldHVybmVkIGJ5IHJlYWRkaXJwXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGggb2YgZGlyIGJlaW5nIHJlYWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIG9mIHRoaXMgaXRlbVxuICogQHBhcmFtIHtTdHJpbmd9IGl0ZW0gYmFzZW5hbWUgb2YgdGhpcyBpdGVtXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxCb29sZWFuPn0gdHJ1ZSBpZiBubyBtb3JlIHByb2Nlc3NpbmcgaXMgbmVlZGVkIGZvciB0aGlzIGVudHJ5LlxuICovXG5hc3luYyBfaGFuZGxlU3ltbGluayhlbnRyeSwgZGlyZWN0b3J5LCBwYXRoLCBpdGVtKSB7XG4gIGlmICh0aGlzLmZzdy5jbG9zZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZnVsbCA9IGVudHJ5LmZ1bGxQYXRoO1xuICBjb25zdCBkaXIgPSB0aGlzLmZzdy5fZ2V0V2F0Y2hlZERpcihkaXJlY3RvcnkpO1xuXG4gIGlmICghdGhpcy5mc3cub3B0aW9ucy5mb2xsb3dTeW1saW5rcykge1xuICAgIC8vIHdhdGNoIHN5bWxpbmsgZGlyZWN0bHkgKGRvbid0IGZvbGxvdykgYW5kIGRldGVjdCBjaGFuZ2VzXG4gICAgdGhpcy5mc3cuX2luY3JSZWFkeUNvdW50KCk7XG4gICAgY29uc3QgbGlua1BhdGggPSBhd2FpdCBmc3JlYWxwYXRoKHBhdGgpO1xuICAgIGlmICh0aGlzLmZzdy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoZGlyLmhhcyhpdGVtKSkge1xuICAgICAgaWYgKHRoaXMuZnN3Ll9zeW1saW5rUGF0aHMuZ2V0KGZ1bGwpICE9PSBsaW5rUGF0aCkge1xuICAgICAgICB0aGlzLmZzdy5fc3ltbGlua1BhdGhzLnNldChmdWxsLCBsaW5rUGF0aCk7XG4gICAgICAgIHRoaXMuZnN3Ll9lbWl0KEVWX0NIQU5HRSwgcGF0aCwgZW50cnkuc3RhdHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXIuYWRkKGl0ZW0pO1xuICAgICAgdGhpcy5mc3cuX3N5bWxpbmtQYXRocy5zZXQoZnVsbCwgbGlua1BhdGgpO1xuICAgICAgdGhpcy5mc3cuX2VtaXQoRVZfQURELCBwYXRoLCBlbnRyeS5zdGF0cyk7XG4gICAgfVxuICAgIHRoaXMuZnN3Ll9lbWl0UmVhZHkoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRvbid0IGZvbGxvdyB0aGUgc2FtZSBzeW1saW5rIG1vcmUgdGhhbiBvbmNlXG4gIGlmICh0aGlzLmZzdy5fc3ltbGlua1BhdGhzLmhhcyhmdWxsKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdGhpcy5mc3cuX3N5bWxpbmtQYXRocy5zZXQoZnVsbCwgdHJ1ZSk7XG59XG5cbl9oYW5kbGVSZWFkKGRpcmVjdG9yeSwgaW5pdGlhbEFkZCwgd2gsIHRhcmdldCwgZGlyLCBkZXB0aCwgdGhyb3R0bGVyKSB7XG4gIC8vIE5vcm1hbGl6ZSB0aGUgZGlyZWN0b3J5IG5hbWUgb24gV2luZG93c1xuICBkaXJlY3RvcnkgPSBzeXNQYXRoLmpvaW4oZGlyZWN0b3J5LCBFTVBUWV9TVFIpO1xuXG4gIGlmICghd2guaGFzR2xvYikge1xuICAgIHRocm90dGxlciA9IHRoaXMuZnN3Ll90aHJvdHRsZSgncmVhZGRpcicsIGRpcmVjdG9yeSwgMTAwMCk7XG4gICAgaWYgKCF0aHJvdHRsZXIpIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHByZXZpb3VzID0gdGhpcy5mc3cuX2dldFdhdGNoZWREaXIod2gucGF0aCk7XG4gIGNvbnN0IGN1cnJlbnQgPSBuZXcgU2V0KCk7XG5cbiAgbGV0IHN0cmVhbSA9IHRoaXMuZnN3Ll9yZWFkZGlycChkaXJlY3RvcnksIHtcbiAgICBmaWxlRmlsdGVyOiBlbnRyeSA9PiB3aC5maWx0ZXJQYXRoKGVudHJ5KSxcbiAgICBkaXJlY3RvcnlGaWx0ZXI6IGVudHJ5ID0+IHdoLmZpbHRlckRpcihlbnRyeSksXG4gICAgZGVwdGg6IDBcbiAgfSkub24oU1RSX0RBVEEsIGFzeW5jIChlbnRyeSkgPT4ge1xuICAgIGlmICh0aGlzLmZzdy5jbG9zZWQpIHtcbiAgICAgIHN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbSA9IGVudHJ5LnBhdGg7XG4gICAgbGV0IHBhdGggPSBzeXNQYXRoLmpvaW4oZGlyZWN0b3J5LCBpdGVtKTtcbiAgICBjdXJyZW50LmFkZChpdGVtKTtcblxuICAgIGlmIChlbnRyeS5zdGF0cy5pc1N5bWJvbGljTGluaygpICYmIGF3YWl0IHRoaXMuX2hhbmRsZVN5bWxpbmsoZW50cnksIGRpcmVjdG9yeSwgcGF0aCwgaXRlbSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSB7XG4gICAgICBzdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZpbGVzIHRoYXQgcHJlc2VudCBpbiBjdXJyZW50IGRpcmVjdG9yeSBzbmFwc2hvdFxuICAgIC8vIGJ1dCBhYnNlbnQgaW4gcHJldmlvdXMgYXJlIGFkZGVkIHRvIHdhdGNoIGxpc3QgYW5kXG4gICAgLy8gZW1pdCBgYWRkYCBldmVudC5cbiAgICBpZiAoaXRlbSA9PT0gdGFyZ2V0IHx8ICF0YXJnZXQgJiYgIXByZXZpb3VzLmhhcyhpdGVtKSkge1xuICAgICAgdGhpcy5mc3cuX2luY3JSZWFkeUNvdW50KCk7XG5cbiAgICAgIC8vIGVuc3VyZSByZWxhdGl2ZW5lc3Mgb2YgcGF0aCBpcyBwcmVzZXJ2ZWQgaW4gY2FzZSBvZiB3YXRjaGVyIHJldXNlXG4gICAgICBwYXRoID0gc3lzUGF0aC5qb2luKGRpciwgc3lzUGF0aC5yZWxhdGl2ZShkaXIsIHBhdGgpKTtcblxuICAgICAgdGhpcy5fYWRkVG9Ob2RlRnMocGF0aCwgaW5pdGlhbEFkZCwgd2gsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9KS5vbihFVl9FUlJPUiwgdGhpcy5fYm91bmRIYW5kbGVFcnJvcik7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT5cbiAgICBzdHJlYW0ub25jZShTVFJfRU5ELCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSB7XG4gICAgICAgIHN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2FzVGhyb3R0bGVkID0gdGhyb3R0bGVyID8gdGhyb3R0bGVyLmNsZWFyKCkgOiBmYWxzZTtcblxuICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAvLyBGaWxlcyB0aGF0IGFic2VudCBpbiBjdXJyZW50IGRpcmVjdG9yeSBzbmFwc2hvdFxuICAgICAgLy8gYnV0IHByZXNlbnQgaW4gcHJldmlvdXMgZW1pdCBgcmVtb3ZlYCBldmVudFxuICAgICAgLy8gYW5kIGFyZSByZW1vdmVkIGZyb20gQHdhdGNoZWRbZGlyZWN0b3J5XS5cbiAgICAgIHByZXZpb3VzLmdldENoaWxkcmVuKCkuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBkaXJlY3RvcnkgJiZcbiAgICAgICAgICAhY3VycmVudC5oYXMoaXRlbSkgJiZcbiAgICAgICAgICAvLyBpbiBjYXNlIG9mIGludGVyc2VjdGluZyBnbG9icztcbiAgICAgICAgICAvLyBhIHBhdGggbWF5IGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQgb2YgdGhpcyByZWFkZGlyLCBidXRcbiAgICAgICAgICAvLyBzaG91bGRuJ3QgYmUgcmVtb3ZlZCBiZWNhdXNlIGl0IG1hdGNoZXMgYSBkaWZmZXJlbnQgZ2xvYlxuICAgICAgICAgICghd2guaGFzR2xvYiB8fCB3aC5maWx0ZXJQYXRoKHtcbiAgICAgICAgICAgIGZ1bGxQYXRoOiBzeXNQYXRoLnJlc29sdmUoZGlyZWN0b3J5LCBpdGVtKVxuICAgICAgICAgIH0pKTtcbiAgICAgIH0pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5mc3cuX3JlbW92ZShkaXJlY3RvcnksIGl0ZW0pO1xuICAgICAgfSk7XG5cbiAgICAgIHN0cmVhbSA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gb25lIG1vcmUgdGltZSBmb3IgYW55IG1pc3NlZCBpbiBjYXNlIGNoYW5nZXMgY2FtZSBpbiBleHRyZW1lbHkgcXVpY2tseVxuICAgICAgaWYgKHdhc1Rocm90dGxlZCkgdGhpcy5faGFuZGxlUmVhZChkaXJlY3RvcnksIGZhbHNlLCB3aCwgdGFyZ2V0LCBkaXIsIGRlcHRoLCB0aHJvdHRsZXIpO1xuICAgIH0pXG4gICk7XG59XG5cbi8qKlxuICogUmVhZCBkaXJlY3RvcnkgdG8gYWRkIC8gcmVtb3ZlIGZpbGVzIGZyb20gYEB3YXRjaGVkYCBsaXN0IGFuZCByZS1yZWFkIGl0IG9uIGNoYW5nZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSBkaXIgZnMgcGF0aFxuICogQHBhcmFtIHtmcy5TdGF0c30gc3RhdHNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gaW5pdGlhbEFkZFxuICogQHBhcmFtIHtOdW1iZXJ9IGRlcHRoIHJlbGF0aXZlIHRvIHVzZXItc3VwcGxpZWQgcGF0aFxuICogQHBhcmFtIHtTdHJpbmd9IHRhcmdldCBjaGlsZCBwYXRoIHRhcmdldGVkIGZvciB3YXRjaFxuICogQHBhcmFtIHtPYmplY3R9IHdoIENvbW1vbiB3YXRjaCBoZWxwZXJzIGZvciB0aGlzIHBhdGhcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWFscGF0aFxuICogQHJldHVybnMge1Byb21pc2U8RnVuY3Rpb24+fSBjbG9zZXIgZm9yIHRoZSB3YXRjaGVyIGluc3RhbmNlLlxuICovXG5hc3luYyBfaGFuZGxlRGlyKGRpciwgc3RhdHMsIGluaXRpYWxBZGQsIGRlcHRoLCB0YXJnZXQsIHdoLCByZWFscGF0aCkge1xuICBjb25zdCBwYXJlbnREaXIgPSB0aGlzLmZzdy5fZ2V0V2F0Y2hlZERpcihzeXNQYXRoLmRpcm5hbWUoZGlyKSk7XG4gIGNvbnN0IHRyYWNrZWQgPSBwYXJlbnREaXIuaGFzKHN5c1BhdGguYmFzZW5hbWUoZGlyKSk7XG4gIGlmICghKGluaXRpYWxBZGQgJiYgdGhpcy5mc3cub3B0aW9ucy5pZ25vcmVJbml0aWFsKSAmJiAhdGFyZ2V0ICYmICF0cmFja2VkKSB7XG4gICAgaWYgKCF3aC5oYXNHbG9iIHx8IHdoLmdsb2JGaWx0ZXIoZGlyKSkgdGhpcy5mc3cuX2VtaXQoRVZfQUREX0RJUiwgZGlyLCBzdGF0cyk7XG4gIH1cblxuICAvLyBlbnN1cmUgZGlyIGlzIHRyYWNrZWQgKGhhcm1sZXNzIGlmIHJlZHVuZGFudClcbiAgcGFyZW50RGlyLmFkZChzeXNQYXRoLmJhc2VuYW1lKGRpcikpO1xuICB0aGlzLmZzdy5fZ2V0V2F0Y2hlZERpcihkaXIpO1xuICBsZXQgdGhyb3R0bGVyO1xuICBsZXQgY2xvc2VyO1xuXG4gIGNvbnN0IG9EZXB0aCA9IHRoaXMuZnN3Lm9wdGlvbnMuZGVwdGg7XG4gIGlmICgob0RlcHRoID09IG51bGwgfHwgZGVwdGggPD0gb0RlcHRoKSAmJiAhdGhpcy5mc3cuX3N5bWxpbmtQYXRocy5oYXMocmVhbHBhdGgpKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2hhbmRsZVJlYWQoZGlyLCBpbml0aWFsQWRkLCB3aCwgdGFyZ2V0LCBkaXIsIGRlcHRoLCB0aHJvdHRsZXIpO1xuICAgICAgaWYgKHRoaXMuZnN3LmNsb3NlZCkgcmV0dXJuO1xuICAgIH1cblxuICAgIGNsb3NlciA9IHRoaXMuX3dhdGNoV2l0aE5vZGVGcyhkaXIsIChkaXJQYXRoLCBzdGF0cykgPT4ge1xuICAgICAgLy8gaWYgY3VycmVudCBkaXJlY3RvcnkgaXMgcmVtb3ZlZCwgZG8gbm90aGluZ1xuICAgICAgaWYgKHN0YXRzICYmIHN0YXRzLm10aW1lTXMgPT09IDApIHJldHVybjtcblxuICAgICAgdGhpcy5faGFuZGxlUmVhZChkaXJQYXRoLCBmYWxzZSwgd2gsIHRhcmdldCwgZGlyLCBkZXB0aCwgdGhyb3R0bGVyKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY2xvc2VyO1xufVxuXG4vKipcbiAqIEhhbmRsZSBhZGRlZCBmaWxlLCBkaXJlY3RvcnksIG9yIGdsb2IgcGF0dGVybi5cbiAqIERlbGVnYXRlcyBjYWxsIHRvIF9oYW5kbGVGaWxlIC8gX2hhbmRsZURpciBhZnRlciBjaGVja3MuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aCB0byBmaWxlIG9yIGlyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGluaXRpYWxBZGQgd2FzIHRoZSBmaWxlIGFkZGVkIGF0IHdhdGNoIGluc3RhbnRpYXRpb24/XG4gKiBAcGFyYW0ge09iamVjdH0gcHJpb3JXaCBkZXB0aCByZWxhdGl2ZSB0byB1c2VyLXN1cHBsaWVkIHBhdGhcbiAqIEBwYXJhbSB7TnVtYmVyfSBkZXB0aCBDaGlsZCBwYXRoIGFjdHVhbGx5IHRhcmdldGVkIGZvciB3YXRjaFxuICogQHBhcmFtIHtTdHJpbmc9fSB0YXJnZXQgQ2hpbGQgcGF0aCBhY3R1YWxseSB0YXJnZXRlZCBmb3Igd2F0Y2hcbiAqIEByZXR1cm5zIHtQcm9taXNlfVxuICovXG5hc3luYyBfYWRkVG9Ob2RlRnMocGF0aCwgaW5pdGlhbEFkZCwgcHJpb3JXaCwgZGVwdGgsIHRhcmdldCkge1xuICBjb25zdCByZWFkeSA9IHRoaXMuZnN3Ll9lbWl0UmVhZHk7XG4gIGlmICh0aGlzLmZzdy5faXNJZ25vcmVkKHBhdGgpIHx8IHRoaXMuZnN3LmNsb3NlZCkge1xuICAgIHJlYWR5KCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgd2ggPSB0aGlzLmZzdy5fZ2V0V2F0Y2hIZWxwZXJzKHBhdGgsIGRlcHRoKTtcbiAgaWYgKCF3aC5oYXNHbG9iICYmIHByaW9yV2gpIHtcbiAgICB3aC5oYXNHbG9iID0gcHJpb3JXaC5oYXNHbG9iO1xuICAgIHdoLmdsb2JGaWx0ZXIgPSBwcmlvcldoLmdsb2JGaWx0ZXI7XG4gICAgd2guZmlsdGVyUGF0aCA9IGVudHJ5ID0+IHByaW9yV2guZmlsdGVyUGF0aChlbnRyeSk7XG4gICAgd2guZmlsdGVyRGlyID0gZW50cnkgPT4gcHJpb3JXaC5maWx0ZXJEaXIoZW50cnkpO1xuICB9XG5cbiAgLy8gZXZhbHVhdGUgd2hhdCBpcyBhdCB0aGUgcGF0aCB3ZSdyZSBiZWluZyBhc2tlZCB0byB3YXRjaFxuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgc3RhdE1ldGhvZHNbd2guc3RhdE1ldGhvZF0od2gud2F0Y2hQYXRoKTtcbiAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZnN3Ll9pc0lnbm9yZWQod2gud2F0Y2hQYXRoLCBzdGF0cykpIHtcbiAgICAgIHJlYWR5KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZm9sbG93ID0gdGhpcy5mc3cub3B0aW9ucy5mb2xsb3dTeW1saW5rcyAmJiAhcGF0aC5pbmNsdWRlcyhTVEFSKSAmJiAhcGF0aC5pbmNsdWRlcyhCUkFDRV9TVEFSVCk7XG4gICAgbGV0IGNsb3NlcjtcbiAgICBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9IGZvbGxvdyA/IGF3YWl0IGZzcmVhbHBhdGgocGF0aCkgOiBwYXRoO1xuICAgICAgaWYgKHRoaXMuZnN3LmNsb3NlZCkgcmV0dXJuO1xuICAgICAgY2xvc2VyID0gYXdhaXQgdGhpcy5faGFuZGxlRGlyKHdoLndhdGNoUGF0aCwgc3RhdHMsIGluaXRpYWxBZGQsIGRlcHRoLCB0YXJnZXQsIHdoLCB0YXJnZXRQYXRoKTtcbiAgICAgIGlmICh0aGlzLmZzdy5jbG9zZWQpIHJldHVybjtcbiAgICAgIC8vIHByZXNlcnZlIHRoaXMgc3ltbGluaydzIHRhcmdldCBwYXRoXG4gICAgICBpZiAocGF0aCAhPT0gdGFyZ2V0UGF0aCAmJiB0YXJnZXRQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5mc3cuX3N5bWxpbmtQYXRocy5zZXQodGFyZ2V0UGF0aCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICBjb25zdCB0YXJnZXRQYXRoID0gZm9sbG93ID8gYXdhaXQgZnNyZWFscGF0aChwYXRoKSA6IHBhdGg7XG4gICAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSByZXR1cm47XG4gICAgICBjb25zdCBwYXJlbnQgPSBzeXNQYXRoLmRpcm5hbWUod2gud2F0Y2hQYXRoKTtcbiAgICAgIHRoaXMuZnN3Ll9nZXRXYXRjaGVkRGlyKHBhcmVudCkuYWRkKHdoLndhdGNoUGF0aCk7XG4gICAgICB0aGlzLmZzdy5fZW1pdChFVl9BREQsIHdoLndhdGNoUGF0aCwgc3RhdHMpO1xuICAgICAgY2xvc2VyID0gYXdhaXQgdGhpcy5faGFuZGxlRGlyKHBhcmVudCwgc3RhdHMsIGluaXRpYWxBZGQsIGRlcHRoLCBwYXRoLCB3aCwgdGFyZ2V0UGF0aCk7XG4gICAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSByZXR1cm47XG5cbiAgICAgIC8vIHByZXNlcnZlIHRoaXMgc3ltbGluaydzIHRhcmdldCBwYXRoXG4gICAgICBpZiAodGFyZ2V0UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZnN3Ll9zeW1saW5rUGF0aHMuc2V0KHN5c1BhdGgucmVzb2x2ZShwYXRoKSwgdGFyZ2V0UGF0aCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsb3NlciA9IHRoaXMuX2hhbmRsZUZpbGUod2gud2F0Y2hQYXRoLCBzdGF0cywgaW5pdGlhbEFkZCk7XG4gICAgfVxuICAgIHJlYWR5KCk7XG5cbiAgICB0aGlzLmZzdy5fYWRkUGF0aENsb3NlcihwYXRoLCBjbG9zZXIpO1xuICAgIHJldHVybiBmYWxzZTtcblxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh0aGlzLmZzdy5faGFuZGxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZWFkeSgpO1xuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuICB9XG59XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBOb2RlRnNIYW5kbGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBzeXNQYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ3V0aWwnKTtcblxubGV0IGZzZXZlbnRzO1xudHJ5IHtcbiAgZnNldmVudHMgPSByZXF1aXJlKCdmc2V2ZW50cycpO1xufSBjYXRjaCAoZXJyb3IpIHtcbiAgaWYgKHByb2Nlc3MuZW52LkNIT0tJREFSX1BSSU5UX0ZTRVZFTlRTX1JFUVVJUkVfRVJST1IpIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xufVxuXG5pZiAoZnNldmVudHMpIHtcbiAgLy8gVE9ETzogcmVhbCBjaGVja1xuICBjb25zdCBtdGNoID0gcHJvY2Vzcy52ZXJzaW9uLm1hdGNoKC92KFxcZCspXFwuKFxcZCspLyk7XG4gIGlmIChtdGNoICYmIG10Y2hbMV0gJiYgbXRjaFsyXSkge1xuICAgIGNvbnN0IG1haiA9IE51bWJlci5wYXJzZUludChtdGNoWzFdLCAxMCk7XG4gICAgY29uc3QgbWluID0gTnVtYmVyLnBhcnNlSW50KG10Y2hbMl0sIDEwKTtcbiAgICBpZiAobWFqID09PSA4ICYmIG1pbiA8IDE2KSB7XG4gICAgICBmc2V2ZW50cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qge1xuICBFVl9BREQsXG4gIEVWX0NIQU5HRSxcbiAgRVZfQUREX0RJUixcbiAgRVZfVU5MSU5LLFxuICBFVl9FUlJPUixcbiAgU1RSX0RBVEEsXG4gIFNUUl9FTkQsXG4gIEZTRVZFTlRfQ1JFQVRFRCxcbiAgRlNFVkVOVF9NT0RJRklFRCxcbiAgRlNFVkVOVF9ERUxFVEVELFxuICBGU0VWRU5UX01PVkVELFxuICAvLyBGU0VWRU5UX0NMT05FRCxcbiAgRlNFVkVOVF9VTktOT1dOLFxuICBGU0VWRU5UX1RZUEVfRklMRSxcbiAgRlNFVkVOVF9UWVBFX0RJUkVDVE9SWSxcbiAgRlNFVkVOVF9UWVBFX1NZTUxJTkssXG5cbiAgUk9PVF9HTE9CU1RBUixcbiAgRElSX1NVRkZJWCxcbiAgRE9UX1NMQVNILFxuICBGVU5DVElPTl9UWVBFLFxuICBFTVBUWV9GTixcbiAgSURFTlRJVFlfRk5cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuXG5jb25zdCBEZXB0aCA9ICh2YWx1ZSkgPT4gaXNOYU4odmFsdWUpID8ge30gOiB7ZGVwdGg6IHZhbHVlfTtcblxuY29uc3Qgc3RhdCA9IHByb21pc2lmeShmcy5zdGF0KTtcbmNvbnN0IGxzdGF0ID0gcHJvbWlzaWZ5KGZzLmxzdGF0KTtcbmNvbnN0IHJlYWxwYXRoID0gcHJvbWlzaWZ5KGZzLnJlYWxwYXRoKTtcblxuY29uc3Qgc3RhdE1ldGhvZHMgPSB7IHN0YXQsIGxzdGF0IH07XG5cbi8qKlxuICogQHR5cGVkZWYge1N0cmluZ30gUGF0aFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRnNFdmVudHNXYXRjaENvbnRhaW5lclxuICogQHByb3BlcnR5IHtTZXQ8RnVuY3Rpb24+fSBsaXN0ZW5lcnNcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJhd0VtaXR0ZXJcbiAqIEBwcm9wZXJ0eSB7e3N0b3A6IEZ1bmN0aW9ufX0gd2F0Y2hlclxuICovXG5cbi8vIGZzZXZlbnRzIGluc3RhbmNlIGhlbHBlciBmdW5jdGlvbnNcbi8qKlxuICogT2JqZWN0IHRvIGhvbGQgcGVyLXByb2Nlc3MgZnNldmVudHMgaW5zdGFuY2VzIChtYXkgYmUgc2hhcmVkIGFjcm9zcyBjaG9raWRhciBGU1dhdGNoZXIgaW5zdGFuY2VzKVxuICogQHR5cGUge01hcDxQYXRoLEZzRXZlbnRzV2F0Y2hDb250YWluZXI+fVxuICovXG5jb25zdCBGU0V2ZW50c1dhdGNoZXJzID0gbmV3IE1hcCgpO1xuXG4vLyBUaHJlc2hvbGQgb2YgZHVwbGljYXRlIHBhdGggcHJlZml4ZXMgYXQgd2hpY2ggdG8gc3RhcnRcbi8vIGNvbnNvbGlkYXRpbmcgZ29pbmcgZm9yd2FyZFxuY29uc3QgY29uc29saWRhdGVUaHJlc2hob2xkID0gMTA7XG5cbmNvbnN0IHdyb25nRXZlbnRGbGFncyA9IG5ldyBTZXQoW1xuICA2OTg4OCwgNzA0MDAsIDcxNDI0LCA3MjcwNCwgNzM0NzIsIDEzMTMyOCwgMTMxODQwLCAyNjI5MTJcbl0pO1xuXG4vKipcbiAqIEluc3RhbnRpYXRlcyB0aGUgZnNldmVudHMgaW50ZXJmYWNlXG4gKiBAcGFyYW0ge1BhdGh9IHBhdGggcGF0aCB0byBiZSB3YXRjaGVkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBjYWxsZWQgd2hlbiBmc2V2ZW50cyBpcyBib3VuZCBhbmQgcmVhZHlcbiAqIEByZXR1cm5zIHt7c3RvcDogRnVuY3Rpb259fSBuZXcgZnNldmVudHMgaW5zdGFuY2VcbiAqL1xuY29uc3QgY3JlYXRlRlNFdmVudHNJbnN0YW5jZSA9IChwYXRoLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCBzdG9wID0gZnNldmVudHMud2F0Y2gocGF0aCwgY2FsbGJhY2spO1xuICByZXR1cm4ge3N0b3B9O1xufTtcblxuLyoqXG4gKiBJbnN0YW50aWF0ZXMgdGhlIGZzZXZlbnRzIGludGVyZmFjZSBvciBiaW5kcyBsaXN0ZW5lcnMgdG8gYW4gZXhpc3Rpbmcgb25lIGNvdmVyaW5nXG4gKiB0aGUgc2FtZSBmaWxlIHRyZWUuXG4gKiBAcGFyYW0ge1BhdGh9IHBhdGggICAgICAgICAgIC0gdG8gYmUgd2F0Y2hlZFxuICogQHBhcmFtIHtQYXRofSByZWFsUGF0aCAgICAgICAtIHJlYWwgcGF0aCBmb3Igc3ltbGlua3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyICAgLSBjYWxsZWQgd2hlbiBmc2V2ZW50cyBlbWl0cyBldmVudHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJhd0VtaXR0ZXIgLSBwYXNzZXMgZGF0YSB0byBsaXN0ZW5lcnMgb2YgdGhlICdyYXcnIGV2ZW50XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGNsb3NlclxuICovXG5mdW5jdGlvbiBzZXRGU0V2ZW50c0xpc3RlbmVyKHBhdGgsIHJlYWxQYXRoLCBsaXN0ZW5lciwgcmF3RW1pdHRlcikge1xuICBsZXQgd2F0Y2hQYXRoID0gc3lzUGF0aC5leHRuYW1lKHBhdGgpID8gc3lzUGF0aC5kaXJuYW1lKHBhdGgpIDogcGF0aDtcbiAgY29uc3QgcGFyZW50UGF0aCA9IHN5c1BhdGguZGlybmFtZSh3YXRjaFBhdGgpO1xuICBsZXQgY29udCA9IEZTRXZlbnRzV2F0Y2hlcnMuZ2V0KHdhdGNoUGF0aCk7XG5cbiAgLy8gSWYgd2UndmUgYWNjdW11bGF0ZWQgYSBzdWJzdGFudGlhbCBudW1iZXIgb2YgcGF0aHMgdGhhdFxuICAvLyBjb3VsZCBoYXZlIGJlZW4gY29uc29saWRhdGVkIGJ5IHdhdGNoaW5nIG9uZSBkaXJlY3RvcnlcbiAgLy8gYWJvdmUgdGhlIGN1cnJlbnQgb25lLCBjcmVhdGUgYSB3YXRjaGVyIG9uIHRoZSBwYXJlbnRcbiAgLy8gcGF0aCBpbnN0ZWFkLCBzbyB0aGF0IHdlIGRvIGNvbnNvbGlkYXRlIGdvaW5nIGZvcndhcmQuXG4gIGlmIChjb3VsZENvbnNvbGlkYXRlKHBhcmVudFBhdGgpKSB7XG4gICAgd2F0Y2hQYXRoID0gcGFyZW50UGF0aDtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHN5c1BhdGgucmVzb2x2ZShwYXRoKTtcbiAgY29uc3QgaGFzU3ltbGluayA9IHJlc29sdmVkUGF0aCAhPT0gcmVhbFBhdGg7XG5cbiAgY29uc3QgZmlsdGVyZWRMaXN0ZW5lciA9IChmdWxsUGF0aCwgZmxhZ3MsIGluZm8pID0+IHtcbiAgICBpZiAoaGFzU3ltbGluaykgZnVsbFBhdGggPSBmdWxsUGF0aC5yZXBsYWNlKHJlYWxQYXRoLCByZXNvbHZlZFBhdGgpO1xuICAgIGlmIChcbiAgICAgIGZ1bGxQYXRoID09PSByZXNvbHZlZFBhdGggfHxcbiAgICAgICFmdWxsUGF0aC5pbmRleE9mKHJlc29sdmVkUGF0aCArIHN5c1BhdGguc2VwKVxuICAgICkgbGlzdGVuZXIoZnVsbFBhdGgsIGZsYWdzLCBpbmZvKTtcbiAgfTtcblxuICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgd2F0Y2hlciBvbiBhIHBhcmVudCBwYXRoXG4gIC8vIG1vZGlmaWVzIGB3YXRjaFBhdGhgIHRvIHRoZSBwYXJlbnQgcGF0aCB3aGVuIGl0IGZpbmRzIGEgbWF0Y2hcbiAgbGV0IHdhdGNoZWRQYXJlbnQgPSBmYWxzZTtcbiAgZm9yIChjb25zdCB3YXRjaGVkUGF0aCBvZiBGU0V2ZW50c1dhdGNoZXJzLmtleXMoKSkge1xuICAgIGlmIChyZWFsUGF0aC5pbmRleE9mKHN5c1BhdGgucmVzb2x2ZSh3YXRjaGVkUGF0aCkgKyBzeXNQYXRoLnNlcCkgPT09IDApIHtcbiAgICAgIHdhdGNoUGF0aCA9IHdhdGNoZWRQYXRoO1xuICAgICAgY29udCA9IEZTRXZlbnRzV2F0Y2hlcnMuZ2V0KHdhdGNoUGF0aCk7XG4gICAgICB3YXRjaGVkUGFyZW50ID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb250IHx8IHdhdGNoZWRQYXJlbnQpIHtcbiAgICBjb250Lmxpc3RlbmVycy5hZGQoZmlsdGVyZWRMaXN0ZW5lcik7XG4gIH0gZWxzZSB7XG4gICAgY29udCA9IHtcbiAgICAgIGxpc3RlbmVyczogbmV3IFNldChbZmlsdGVyZWRMaXN0ZW5lcl0pLFxuICAgICAgcmF3RW1pdHRlcixcbiAgICAgIHdhdGNoZXI6IGNyZWF0ZUZTRXZlbnRzSW5zdGFuY2Uod2F0Y2hQYXRoLCAoZnVsbFBhdGgsIGZsYWdzKSA9PiB7XG4gICAgICAgIGlmICghY29udC5saXN0ZW5lcnMuc2l6ZSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpbmZvID0gZnNldmVudHMuZ2V0SW5mbyhmdWxsUGF0aCwgZmxhZ3MpO1xuICAgICAgICBjb250Lmxpc3RlbmVycy5mb3JFYWNoKGxpc3QgPT4ge1xuICAgICAgICAgIGxpc3QoZnVsbFBhdGgsIGZsYWdzLCBpbmZvKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29udC5yYXdFbWl0dGVyKGluZm8uZXZlbnQsIGZ1bGxQYXRoLCBpbmZvKTtcbiAgICAgIH0pXG4gICAgfTtcbiAgICBGU0V2ZW50c1dhdGNoZXJzLnNldCh3YXRjaFBhdGgsIGNvbnQpO1xuICB9XG5cbiAgLy8gcmVtb3ZlcyB0aGlzIGluc3RhbmNlJ3MgbGlzdGVuZXJzIGFuZCBjbG9zZXMgdGhlIHVuZGVybHlpbmcgZnNldmVudHNcbiAgLy8gaW5zdGFuY2UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgbGlzdGVuZXJzIGxlZnRcbiAgcmV0dXJuICgpID0+IHtcbiAgICBjb25zdCBsc3QgPSBjb250Lmxpc3RlbmVycztcblxuICAgIGxzdC5kZWxldGUoZmlsdGVyZWRMaXN0ZW5lcik7XG4gICAgaWYgKCFsc3Quc2l6ZSkge1xuICAgICAgRlNFdmVudHNXYXRjaGVycy5kZWxldGUod2F0Y2hQYXRoKTtcbiAgICAgIGlmIChjb250LndhdGNoZXIpIHJldHVybiBjb250LndhdGNoZXIuc3RvcCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb250LnJhd0VtaXR0ZXIgPSBjb250LndhdGNoZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY29udCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG5cbi8vIERlY2lkZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgc3RhcnQgYSBuZXcgaGlnaGVyLWxldmVsXG4vLyBwYXJlbnQgd2F0Y2hlclxuY29uc3QgY291bGRDb25zb2xpZGF0ZSA9IChwYXRoKSA9PiB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGZvciAoY29uc3Qgd2F0Y2hQYXRoIG9mIEZTRXZlbnRzV2F0Y2hlcnMua2V5cygpKSB7XG4gICAgaWYgKHdhdGNoUGF0aC5pbmRleE9mKHBhdGgpID09PSAwKSB7XG4gICAgICBjb3VudCsrO1xuICAgICAgaWYgKGNvdW50ID49IGNvbnNvbGlkYXRlVGhyZXNoaG9sZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGZzZXZlbnRzIGNhbiBiZSB1c2VkXG5jb25zdCBjYW5Vc2UgPSAoKSA9PiBmc2V2ZW50cyAmJiBGU0V2ZW50c1dhdGNoZXJzLnNpemUgPCAxMjg7XG5cbi8vIGRldGVybWluZXMgc3ViZGlyZWN0b3J5IHRyYXZlcnNhbCBsZXZlbHMgZnJvbSByb290IHRvIHBhdGhcbmNvbnN0IGNhbGNEZXB0aCA9IChwYXRoLCByb290KSA9PiB7XG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKCFwYXRoLmluZGV4T2Yocm9vdCkgJiYgKHBhdGggPSBzeXNQYXRoLmRpcm5hbWUocGF0aCkpICE9PSByb290KSBpKys7XG4gIHJldHVybiBpO1xufTtcblxuLy8gcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZnNldmVudHMnIGV2ZW50IGluZm8gaGFzIHRoZSBzYW1lIHR5cGVcbi8vIGFzIHRoZSBvbmUgcmV0dXJuZWQgYnkgZnMuc3RhdFxuY29uc3Qgc2FtZVR5cGVzID0gKGluZm8sIHN0YXRzKSA9PiAoXG4gIGluZm8udHlwZSA9PT0gRlNFVkVOVF9UWVBFX0RJUkVDVE9SWSAmJiBzdGF0cy5pc0RpcmVjdG9yeSgpIHx8XG4gIGluZm8udHlwZSA9PT0gRlNFVkVOVF9UWVBFX1NZTUxJTksgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSB8fFxuICBpbmZvLnR5cGUgPT09IEZTRVZFTlRfVFlQRV9GSUxFICYmIHN0YXRzLmlzRmlsZSgpXG4pXG5cbi8qKlxuICogQG1peGluXG4gKi9cbmNsYXNzIEZzRXZlbnRzSGFuZGxlciB7XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2luZGV4JykuRlNXYXRjaGVyfSBmc3dcbiAqL1xuY29uc3RydWN0b3IoZnN3KSB7XG4gIHRoaXMuZnN3ID0gZnN3O1xufVxuY2hlY2tJZ25vcmVkKHBhdGgsIHN0YXRzKSB7XG4gIGNvbnN0IGlwYXRocyA9IHRoaXMuZnN3Ll9pZ25vcmVkUGF0aHM7XG4gIGlmICh0aGlzLmZzdy5faXNJZ25vcmVkKHBhdGgsIHN0YXRzKSkge1xuICAgIGlwYXRocy5hZGQocGF0aCk7XG4gICAgaWYgKHN0YXRzICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGlwYXRocy5hZGQocGF0aCArIFJPT1RfR0xPQlNUQVIpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlwYXRocy5kZWxldGUocGF0aCk7XG4gIGlwYXRocy5kZWxldGUocGF0aCArIFJPT1RfR0xPQlNUQVIpO1xufVxuXG5hZGRPckNoYW5nZShwYXRoLCBmdWxsUGF0aCwgcmVhbFBhdGgsIHBhcmVudCwgd2F0Y2hlZERpciwgaXRlbSwgaW5mbywgb3B0cykge1xuICBjb25zdCBldmVudCA9IHdhdGNoZWREaXIuaGFzKGl0ZW0pID8gRVZfQ0hBTkdFIDogRVZfQUREO1xuICB0aGlzLmhhbmRsZUV2ZW50KGV2ZW50LCBwYXRoLCBmdWxsUGF0aCwgcmVhbFBhdGgsIHBhcmVudCwgd2F0Y2hlZERpciwgaXRlbSwgaW5mbywgb3B0cyk7XG59XG5cbmFzeW5jIGNoZWNrRXhpc3RzKHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKSB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KHBhdGgpXG4gICAgaWYgKHRoaXMuZnN3LmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmIChzYW1lVHlwZXMoaW5mbywgc3RhdHMpKSB7XG4gICAgICB0aGlzLmFkZE9yQ2hhbmdlKHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVFdmVudChFVl9VTkxJTkssIHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICB0aGlzLmFkZE9yQ2hhbmdlKHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVFdmVudChFVl9VTkxJTkssIHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICB9XG4gIH1cbn1cblxuaGFuZGxlRXZlbnQoZXZlbnQsIHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKSB7XG4gIGlmICh0aGlzLmZzdy5jbG9zZWQgfHwgdGhpcy5jaGVja0lnbm9yZWQocGF0aCkpIHJldHVybjtcblxuICBpZiAoZXZlbnQgPT09IEVWX1VOTElOSykge1xuICAgIGNvbnN0IGlzRGlyZWN0b3J5ID0gaW5mby50eXBlID09PSBGU0VWRU5UX1RZUEVfRElSRUNUT1JZXG4gICAgLy8gc3VwcHJlc3MgdW5saW5rIGV2ZW50cyBvbiBuZXZlciBiZWZvcmUgc2VlbiBmaWxlc1xuICAgIGlmIChpc0RpcmVjdG9yeSB8fCB3YXRjaGVkRGlyLmhhcyhpdGVtKSkge1xuICAgICAgdGhpcy5mc3cuX3JlbW92ZShwYXJlbnQsIGl0ZW0sIGlzRGlyZWN0b3J5KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGV2ZW50ID09PSBFVl9BREQpIHtcbiAgICAgIC8vIHRyYWNrIG5ldyBkaXJlY3Rvcmllc1xuICAgICAgaWYgKGluZm8udHlwZSA9PT0gRlNFVkVOVF9UWVBFX0RJUkVDVE9SWSkgdGhpcy5mc3cuX2dldFdhdGNoZWREaXIocGF0aCk7XG5cbiAgICAgIGlmIChpbmZvLnR5cGUgPT09IEZTRVZFTlRfVFlQRV9TWU1MSU5LICYmIG9wdHMuZm9sbG93U3ltbGlua3MpIHtcbiAgICAgICAgLy8gcHVzaCBzeW1saW5rcyBiYWNrIHRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrIHRvIGdldCBoYW5kbGVkXG4gICAgICAgIGNvbnN0IGN1ckRlcHRoID0gb3B0cy5kZXB0aCA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICB1bmRlZmluZWQgOiBjYWxjRGVwdGgoZnVsbFBhdGgsIHJlYWxQYXRoKSArIDE7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRUb0ZzRXZlbnRzKHBhdGgsIGZhbHNlLCB0cnVlLCBjdXJEZXB0aCk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRyYWNrIG5ldyBwYXRoc1xuICAgICAgLy8gKG90aGVyIHRoYW4gc3ltbGlua3MgYmVpbmcgZm9sbG93ZWQsIHdoaWNoIHdpbGwgYmUgdHJhY2tlZCBzb29uKVxuICAgICAgdGhpcy5mc3cuX2dldFdhdGNoZWREaXIocGFyZW50KS5hZGQoaXRlbSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEB0eXBlIHsnYWRkJ3wnYWRkRGlyJ3wndW5saW5rJ3wndW5saW5rRGlyJ31cbiAgICAgKi9cbiAgICBjb25zdCBldmVudE5hbWUgPSBpbmZvLnR5cGUgPT09IEZTRVZFTlRfVFlQRV9ESVJFQ1RPUlkgPyBldmVudCArIERJUl9TVUZGSVggOiBldmVudDtcbiAgICB0aGlzLmZzdy5fZW1pdChldmVudE5hbWUsIHBhdGgpO1xuICAgIGlmIChldmVudE5hbWUgPT09IEVWX0FERF9ESVIpIHRoaXMuX2FkZFRvRnNFdmVudHMocGF0aCwgZmFsc2UsIHRydWUpO1xuICB9XG59XG5cbi8qKlxuICogSGFuZGxlIHN5bWxpbmtzIGVuY291bnRlcmVkIGR1cmluZyBkaXJlY3Rvcnkgc2NhblxuICogQHBhcmFtIHtTdHJpbmd9IHdhdGNoUGF0aCAgLSBmaWxlL2RpciBwYXRoIHRvIGJlIHdhdGNoZWQgd2l0aCBmc2V2ZW50c1xuICogQHBhcmFtIHtTdHJpbmd9IHJlYWxQYXRoICAgLSByZWFsIHBhdGggKGluIGNhc2Ugb2Ygc3ltbGlua3MpXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gIC0gcGF0aCB0cmFuc2Zvcm1lclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2xvYkZpbHRlciAtIHBhdGggZmlsdGVyIGluIGNhc2UgYSBnbG9iIHBhdHRlcm4gd2FzIHByb3ZpZGVkXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IGNsb3NlciBmb3IgdGhlIHdhdGNoZXIgaW5zdGFuY2VcbiovXG5fd2F0Y2hXaXRoRnNFdmVudHMod2F0Y2hQYXRoLCByZWFsUGF0aCwgdHJhbnNmb3JtLCBnbG9iRmlsdGVyKSB7XG4gIGlmICh0aGlzLmZzdy5jbG9zZWQgfHwgdGhpcy5mc3cuX2lzSWdub3JlZCh3YXRjaFBhdGgpKSByZXR1cm47XG4gIGNvbnN0IG9wdHMgPSB0aGlzLmZzdy5vcHRpb25zO1xuICBjb25zdCB3YXRjaENhbGxiYWNrID0gYXN5bmMgKGZ1bGxQYXRoLCBmbGFncywgaW5mbykgPT4ge1xuICAgIGlmICh0aGlzLmZzdy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoXG4gICAgICBvcHRzLmRlcHRoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGNhbGNEZXB0aChmdWxsUGF0aCwgcmVhbFBhdGgpID4gb3B0cy5kZXB0aFxuICAgICkgcmV0dXJuO1xuICAgIGNvbnN0IHBhdGggPSB0cmFuc2Zvcm0oc3lzUGF0aC5qb2luKFxuICAgICAgd2F0Y2hQYXRoLCBzeXNQYXRoLnJlbGF0aXZlKHdhdGNoUGF0aCwgZnVsbFBhdGgpXG4gICAgKSk7XG4gICAgaWYgKGdsb2JGaWx0ZXIgJiYgIWdsb2JGaWx0ZXIocGF0aCkpIHJldHVybjtcbiAgICAvLyBlbnN1cmUgZGlyZWN0b3JpZXMgYXJlIHRyYWNrZWRcbiAgICBjb25zdCBwYXJlbnQgPSBzeXNQYXRoLmRpcm5hbWUocGF0aCk7XG4gICAgY29uc3QgaXRlbSA9IHN5c1BhdGguYmFzZW5hbWUocGF0aCk7XG4gICAgY29uc3Qgd2F0Y2hlZERpciA9IHRoaXMuZnN3Ll9nZXRXYXRjaGVkRGlyKFxuICAgICAgaW5mby50eXBlID09PSBGU0VWRU5UX1RZUEVfRElSRUNUT1JZID8gcGF0aCA6IHBhcmVudFxuICAgICk7XG5cbiAgICAvLyBjb3JyZWN0IGZvciB3cm9uZyBldmVudHMgZW1pdHRlZFxuICAgIGlmICh3cm9uZ0V2ZW50RmxhZ3MuaGFzKGZsYWdzKSB8fCBpbmZvLmV2ZW50ID09PSBGU0VWRU5UX1VOS05PV04pIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5pZ25vcmVkID09PSBGVU5DVElPTl9UWVBFKSB7XG4gICAgICAgIGxldCBzdGF0cztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzdGF0cyA9IGF3YWl0IHN0YXQocGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLmNoZWNrSWdub3JlZChwYXRoLCBzdGF0cykpIHJldHVybjtcbiAgICAgICAgaWYgKHNhbWVUeXBlcyhpbmZvLCBzdGF0cykpIHtcbiAgICAgICAgICB0aGlzLmFkZE9yQ2hhbmdlKHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KEVWX1VOTElOSywgcGF0aCwgZnVsbFBhdGgsIHJlYWxQYXRoLCBwYXJlbnQsIHdhdGNoZWREaXIsIGl0ZW0sIGluZm8sIG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrRXhpc3RzKHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChpbmZvLmV2ZW50KSB7XG4gICAgICBjYXNlIEZTRVZFTlRfQ1JFQVRFRDpcbiAgICAgIGNhc2UgRlNFVkVOVF9NT0RJRklFRDpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkT3JDaGFuZ2UocGF0aCwgZnVsbFBhdGgsIHJlYWxQYXRoLCBwYXJlbnQsIHdhdGNoZWREaXIsIGl0ZW0sIGluZm8sIG9wdHMpO1xuICAgICAgY2FzZSBGU0VWRU5UX0RFTEVURUQ6XG4gICAgICBjYXNlIEZTRVZFTlRfTU9WRUQ6XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrRXhpc3RzKHBhdGgsIGZ1bGxQYXRoLCByZWFsUGF0aCwgcGFyZW50LCB3YXRjaGVkRGlyLCBpdGVtLCBpbmZvLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xvc2VyID0gc2V0RlNFdmVudHNMaXN0ZW5lcihcbiAgICB3YXRjaFBhdGgsXG4gICAgcmVhbFBhdGgsXG4gICAgd2F0Y2hDYWxsYmFjayxcbiAgICB0aGlzLmZzdy5fZW1pdFJhd1xuICApO1xuXG4gIHRoaXMuZnN3Ll9lbWl0UmVhZHkoKTtcbiAgcmV0dXJuIGNsb3Nlcjtcbn1cblxuLyoqXG4gKiBIYW5kbGUgc3ltbGlua3MgZW5jb3VudGVyZWQgZHVyaW5nIGRpcmVjdG9yeSBzY2FuXG4gKiBAcGFyYW0ge1N0cmluZ30gbGlua1BhdGggcGF0aCB0byBzeW1saW5rXG4gKiBAcGFyYW0ge1N0cmluZ30gZnVsbFBhdGggYWJzb2x1dGUgcGF0aCB0byB0aGUgc3ltbGlua1xuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIHByZS1leGlzdGluZyBwYXRoIHRyYW5zZm9ybWVyXG4gKiBAcGFyYW0ge051bWJlcn0gY3VyRGVwdGggbGV2ZWwgb2Ygc3ViZGlyZWN0b3JpZXMgdHJhdmVyc2VkIHRvIHdoZXJlIHN5bWxpbmsgaXNcbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICovXG5hc3luYyBfaGFuZGxlRnNFdmVudHNTeW1saW5rKGxpbmtQYXRoLCBmdWxsUGF0aCwgdHJhbnNmb3JtLCBjdXJEZXB0aCkge1xuICAvLyBkb24ndCBmb2xsb3cgdGhlIHNhbWUgc3ltbGluayBtb3JlIHRoYW4gb25jZVxuICBpZiAodGhpcy5mc3cuY2xvc2VkIHx8IHRoaXMuZnN3Ll9zeW1saW5rUGF0aHMuaGFzKGZ1bGxQYXRoKSkgcmV0dXJuO1xuXG4gIHRoaXMuZnN3Ll9zeW1saW5rUGF0aHMuc2V0KGZ1bGxQYXRoLCB0cnVlKTtcbiAgdGhpcy5mc3cuX2luY3JSZWFkeUNvdW50KCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaW5rVGFyZ2V0ID0gYXdhaXQgcmVhbHBhdGgobGlua1BhdGgpO1xuICAgIGlmICh0aGlzLmZzdy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5mc3cuX2lzSWdub3JlZChsaW5rVGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZnN3Ll9lbWl0UmVhZHkoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZzdy5faW5jclJlYWR5Q291bnQoKTtcblxuICAgIC8vIGFkZCB0aGUgbGlua1RhcmdldCBmb3Igd2F0Y2hpbmcgd2l0aCBhIHdyYXBwZXIgZm9yIHRyYW5zZm9ybVxuICAgIC8vIHRoYXQgY2F1c2VzIGVtaXR0ZWQgcGF0aHMgdG8gaW5jb3Jwb3JhdGUgdGhlIGxpbmsncyBwYXRoXG4gICAgdGhpcy5fYWRkVG9Gc0V2ZW50cyhsaW5rVGFyZ2V0IHx8IGxpbmtQYXRoLCAocGF0aCkgPT4ge1xuICAgICAgbGV0IGFsaWFzZWRQYXRoID0gbGlua1BhdGg7XG4gICAgICBpZiAobGlua1RhcmdldCAmJiBsaW5rVGFyZ2V0ICE9PSBET1RfU0xBU0gpIHtcbiAgICAgICAgYWxpYXNlZFBhdGggPSBwYXRoLnJlcGxhY2UobGlua1RhcmdldCwgbGlua1BhdGgpO1xuICAgICAgfSBlbHNlIGlmIChwYXRoICE9PSBET1RfU0xBU0gpIHtcbiAgICAgICAgYWxpYXNlZFBhdGggPSBzeXNQYXRoLmpvaW4obGlua1BhdGgsIHBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRyYW5zZm9ybShhbGlhc2VkUGF0aCk7XG4gICAgfSwgZmFsc2UsIGN1ckRlcHRoKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmICh0aGlzLmZzdy5faGFuZGxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mc3cuX2VtaXRSZWFkeSgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge1BhdGh9IG5ld1BhdGhcbiAqIEBwYXJhbSB7ZnMuU3RhdHN9IHN0YXRzXG4gKi9cbmVtaXRBZGQobmV3UGF0aCwgc3RhdHMsIHByb2Nlc3NQYXRoLCBvcHRzLCBmb3JjZUFkZCkge1xuICBjb25zdCBwcCA9IHByb2Nlc3NQYXRoKG5ld1BhdGgpO1xuICBjb25zdCBpc0RpciA9IHN0YXRzLmlzRGlyZWN0b3J5KCk7XG4gIGNvbnN0IGRpck9iaiA9IHRoaXMuZnN3Ll9nZXRXYXRjaGVkRGlyKHN5c1BhdGguZGlybmFtZShwcCkpO1xuICBjb25zdCBiYXNlID0gc3lzUGF0aC5iYXNlbmFtZShwcCk7XG5cbiAgLy8gZW5zdXJlIGVtcHR5IGRpcnMgZ2V0IHRyYWNrZWRcbiAgaWYgKGlzRGlyKSB0aGlzLmZzdy5fZ2V0V2F0Y2hlZERpcihwcCk7XG4gIGlmIChkaXJPYmouaGFzKGJhc2UpKSByZXR1cm47XG4gIGRpck9iai5hZGQoYmFzZSk7XG5cbiAgaWYgKCFvcHRzLmlnbm9yZUluaXRpYWwgfHwgZm9yY2VBZGQgPT09IHRydWUpIHtcbiAgICB0aGlzLmZzdy5fZW1pdChpc0RpciA/IEVWX0FERF9ESVIgOiBFVl9BREQsIHBwLCBzdGF0cyk7XG4gIH1cbn1cblxuaW5pdFdhdGNoKHJlYWxQYXRoLCBwYXRoLCB3aCwgcHJvY2Vzc1BhdGgpIHtcbiAgaWYgKHRoaXMuZnN3LmNsb3NlZCkgcmV0dXJuO1xuICBjb25zdCBjbG9zZXIgPSB0aGlzLl93YXRjaFdpdGhGc0V2ZW50cyhcbiAgICB3aC53YXRjaFBhdGgsXG4gICAgc3lzUGF0aC5yZXNvbHZlKHJlYWxQYXRoIHx8IHdoLndhdGNoUGF0aCksXG4gICAgcHJvY2Vzc1BhdGgsXG4gICAgd2guZ2xvYkZpbHRlclxuICApO1xuICB0aGlzLmZzdy5fYWRkUGF0aENsb3NlcihwYXRoLCBjbG9zZXIpO1xufVxuXG4vKipcbiAqIEhhbmRsZSBhZGRlZCBwYXRoIHdpdGggZnNldmVudHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYXRoIGZpbGUvZGlyIHBhdGggb3IgZ2xvYiBwYXR0ZXJuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW49fSB0cmFuc2Zvcm0gY29udmVydHMgd29ya2luZyBwYXRoIHRvIHdoYXQgdGhlIHVzZXIgZXhwZWN0c1xuICogQHBhcmFtIHtCb29sZWFuPX0gZm9yY2VBZGQgZW5zdXJlIGFkZCBpcyBlbWl0dGVkXG4gKiBAcGFyYW0ge051bWJlcj19IHByaW9yRGVwdGggTGV2ZWwgb2Ygc3ViZGlyZWN0b3JpZXMgYWxyZWFkeSB0cmF2ZXJzZWQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuYXN5bmMgX2FkZFRvRnNFdmVudHMocGF0aCwgdHJhbnNmb3JtLCBmb3JjZUFkZCwgcHJpb3JEZXB0aCkge1xuICBpZiAodGhpcy5mc3cuY2xvc2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG9wdHMgPSB0aGlzLmZzdy5vcHRpb25zO1xuICBjb25zdCBwcm9jZXNzUGF0aCA9IHR5cGVvZiB0cmFuc2Zvcm0gPT09IEZVTkNUSU9OX1RZUEUgPyB0cmFuc2Zvcm0gOiBJREVOVElUWV9GTjtcblxuICBjb25zdCB3aCA9IHRoaXMuZnN3Ll9nZXRXYXRjaEhlbHBlcnMocGF0aCk7XG5cbiAgLy8gZXZhbHVhdGUgd2hhdCBpcyBhdCB0aGUgcGF0aCB3ZSdyZSBiZWluZyBhc2tlZCB0byB3YXRjaFxuICB0cnkge1xuICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgc3RhdE1ldGhvZHNbd2guc3RhdE1ldGhvZF0od2gud2F0Y2hQYXRoKTtcbiAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZnN3Ll9pc0lnbm9yZWQod2gud2F0Y2hQYXRoLCBzdGF0cykpIHtcbiAgICAgIHRocm93IG51bGw7XG4gICAgfVxuICAgIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBlbWl0IGFkZERpciB1bmxlc3MgdGhpcyBpcyBhIGdsb2IgcGFyZW50XG4gICAgICBpZiAoIXdoLmdsb2JGaWx0ZXIpIHRoaXMuZW1pdEFkZChwcm9jZXNzUGF0aChwYXRoKSwgc3RhdHMsIHByb2Nlc3NQYXRoLCBvcHRzLCBmb3JjZUFkZCk7XG5cbiAgICAgIC8vIGRvbid0IHJlY3Vyc2UgZnVydGhlciBpZiBpdCB3b3VsZCBleGNlZWQgZGVwdGggc2V0dGluZ1xuICAgICAgaWYgKHByaW9yRGVwdGggJiYgcHJpb3JEZXB0aCA+IG9wdHMuZGVwdGgpIHJldHVybjtcblxuICAgICAgLy8gc2NhbiB0aGUgY29udGVudHMgb2YgdGhlIGRpclxuICAgICAgdGhpcy5mc3cuX3JlYWRkaXJwKHdoLndhdGNoUGF0aCwge1xuICAgICAgICBmaWxlRmlsdGVyOiBlbnRyeSA9PiB3aC5maWx0ZXJQYXRoKGVudHJ5KSxcbiAgICAgICAgZGlyZWN0b3J5RmlsdGVyOiBlbnRyeSA9PiB3aC5maWx0ZXJEaXIoZW50cnkpLFxuICAgICAgICAuLi5EZXB0aChvcHRzLmRlcHRoIC0gKHByaW9yRGVwdGggfHwgMCkpXG4gICAgICB9KS5vbihTVFJfREFUQSwgKGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIG5lZWQgdG8gY2hlY2sgZmlsdGVyUGF0aCBvbiBkaXJzIGIvYyBmaWx0ZXJEaXIgaXMgbGVzcyByZXN0cmljdGl2ZVxuICAgICAgICBpZiAodGhpcy5mc3cuY2xvc2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5zdGF0cy5pc0RpcmVjdG9yeSgpICYmICF3aC5maWx0ZXJQYXRoKGVudHJ5KSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGpvaW5lZFBhdGggPSBzeXNQYXRoLmpvaW4od2gud2F0Y2hQYXRoLCBlbnRyeS5wYXRoKTtcbiAgICAgICAgY29uc3Qge2Z1bGxQYXRofSA9IGVudHJ5O1xuXG4gICAgICAgIGlmICh3aC5mb2xsb3dTeW1saW5rcyAmJiBlbnRyeS5zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgICAgICAgLy8gcHJlc2VydmUgdGhlIGN1cnJlbnQgZGVwdGggaGVyZSBzaW5jZSBpdCBjYW4ndCBiZSBkZXJpdmVkIGZyb21cbiAgICAgICAgICAvLyByZWFsIHBhdGhzIHBhc3QgdGhlIHN5bWxpbmtcbiAgICAgICAgICBjb25zdCBjdXJEZXB0aCA9IG9wdHMuZGVwdGggPT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgICB1bmRlZmluZWQgOiBjYWxjRGVwdGgoam9pbmVkUGF0aCwgc3lzUGF0aC5yZXNvbHZlKHdoLndhdGNoUGF0aCkpICsgMTtcblxuICAgICAgICAgIHRoaXMuX2hhbmRsZUZzRXZlbnRzU3ltbGluayhqb2luZWRQYXRoLCBmdWxsUGF0aCwgcHJvY2Vzc1BhdGgsIGN1ckRlcHRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVtaXRBZGQoam9pbmVkUGF0aCwgZW50cnkuc3RhdHMsIHByb2Nlc3NQYXRoLCBvcHRzLCBmb3JjZUFkZCk7XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKEVWX0VSUk9SLCBFTVBUWV9GTikub24oU1RSX0VORCwgKCkgPT4ge1xuICAgICAgICB0aGlzLmZzdy5fZW1pdFJlYWR5KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0QWRkKHdoLndhdGNoUGF0aCwgc3RhdHMsIHByb2Nlc3NQYXRoLCBvcHRzLCBmb3JjZUFkZCk7XG4gICAgICB0aGlzLmZzdy5fZW1pdFJlYWR5KCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghZXJyb3IgfHwgdGhpcy5mc3cuX2hhbmRsZUVycm9yKGVycm9yKSkge1xuICAgICAgLy8gVE9ETzogU3RyYW5nZSB0aGluZzogXCJzaG91bGQgbm90IGNob2tlIG9uIGFuIGlnbm9yZWQgd2F0Y2ggcGF0aFwiIHdpbGwgYmUgZmFpbGVkIHdpdGhvdXQgMiByZWFkeSBjYWxscyAtX18tXG4gICAgICB0aGlzLmZzdy5fZW1pdFJlYWR5KCk7XG4gICAgICB0aGlzLmZzdy5fZW1pdFJlYWR5KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdHMucGVyc2lzdGVudCAmJiBmb3JjZUFkZCAhPT0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtID09PSBGVU5DVElPTl9UWVBFKSB7XG4gICAgICAvLyByZWFscGF0aCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkXG4gICAgICB0aGlzLmluaXRXYXRjaCh1bmRlZmluZWQsIHBhdGgsIHdoLCBwcm9jZXNzUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCByZWFsUGF0aDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlYWxQYXRoID0gYXdhaXQgcmVhbHBhdGgod2gud2F0Y2hQYXRoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB0aGlzLmluaXRXYXRjaChyZWFsUGF0aCwgcGF0aCwgd2gsIHByb2Nlc3NQYXRoKTtcbiAgICB9XG4gIH1cbn1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZzRXZlbnRzSGFuZGxlcjtcbm1vZHVsZS5leHBvcnRzLmNhblVzZSA9IGNhblVzZTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBFdmVudEVtaXR0ZXIgfSA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3Qgc3lzUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCByZWFkZGlycCA9IHJlcXVpcmUoJ3JlYWRkaXJwJyk7XG5jb25zdCBhbnltYXRjaCA9IHJlcXVpcmUoJ2FueW1hdGNoJykuZGVmYXVsdDtcbmNvbnN0IGdsb2JQYXJlbnQgPSByZXF1aXJlKCdnbG9iLXBhcmVudCcpO1xuY29uc3QgaXNHbG9iID0gcmVxdWlyZSgnaXMtZ2xvYicpO1xuY29uc3QgYnJhY2VzID0gcmVxdWlyZSgnYnJhY2VzJyk7XG5jb25zdCBub3JtYWxpemVQYXRoID0gcmVxdWlyZSgnbm9ybWFsaXplLXBhdGgnKTtcblxuY29uc3QgTm9kZUZzSGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL25vZGVmcy1oYW5kbGVyJyk7XG5jb25zdCBGc0V2ZW50c0hhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9mc2V2ZW50cy1oYW5kbGVyJyk7XG5jb25zdCB7XG4gIEVWX0FMTCxcbiAgRVZfUkVBRFksXG4gIEVWX0FERCxcbiAgRVZfQ0hBTkdFLFxuICBFVl9VTkxJTkssXG4gIEVWX0FERF9ESVIsXG4gIEVWX1VOTElOS19ESVIsXG4gIEVWX1JBVyxcbiAgRVZfRVJST1IsXG5cbiAgU1RSX0NMT1NFLFxuICBTVFJfRU5ELFxuXG4gIEJBQ0tfU0xBU0hfUkUsXG4gIERPVUJMRV9TTEFTSF9SRSxcbiAgU0xBU0hfT1JfQkFDS19TTEFTSF9SRSxcbiAgRE9UX1JFLFxuICBSRVBMQUNFUl9SRSxcblxuICBTTEFTSCxcbiAgU0xBU0hfU0xBU0gsXG4gIEJSQUNFX1NUQVJULFxuICBCQU5HLFxuICBPTkVfRE9ULFxuICBUV09fRE9UUyxcbiAgR0xPQlNUQVIsXG4gIFNMQVNIX0dMT0JTVEFSLFxuICBBTllNQVRDSF9PUFRTLFxuICBTVFJJTkdfVFlQRSxcbiAgRlVOQ1RJT05fVFlQRSxcbiAgRU1QVFlfU1RSLFxuICBFTVBUWV9GTixcblxuICBpc1dpbmRvd3MsXG4gIGlzTWFjb3Ncbn0gPSByZXF1aXJlKCcuL2xpYi9jb25zdGFudHMnKTtcblxuY29uc3Qgc3RhdCA9IHByb21pc2lmeShmcy5zdGF0KTtcbmNvbnN0IHJlYWRkaXIgPSBwcm9taXNpZnkoZnMucmVhZGRpcik7XG5cbi8qKlxuICogQHR5cGVkZWYge1N0cmluZ30gUGF0aFxuICogQHR5cGVkZWYgeydhbGwnfCdhZGQnfCdhZGREaXInfCdjaGFuZ2UnfCd1bmxpbmsnfCd1bmxpbmtEaXInfCdyYXcnfCdlcnJvcid8J3JlYWR5J30gRXZlbnROYW1lXG4gKiBAdHlwZWRlZiB7J3JlYWRkaXInfCd3YXRjaCd8J2FkZCd8J3JlbW92ZSd8J2NoYW5nZSd9IFRocm90dGxlVHlwZVxuICovXG5cbi8qKlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3R9IFdhdGNoSGVscGVyc1xuICogQHByb3BlcnR5IHtCb29sZWFufSBmb2xsb3dTeW1saW5rc1xuICogQHByb3BlcnR5IHsnc3RhdCd8J2xzdGF0J30gc3RhdE1ldGhvZFxuICogQHByb3BlcnR5IHtQYXRofSBwYXRoXG4gKiBAcHJvcGVydHkge1BhdGh9IHdhdGNoUGF0aFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gZW50cnlQYXRoXG4gKiBAcHJvcGVydHkge0Jvb2xlYW59IGhhc0dsb2JcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBnbG9iRmlsdGVyXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBmaWx0ZXJQYXRoXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBmaWx0ZXJEaXJcbiAqL1xuXG5jb25zdCBhcnJpZnkgPSAodmFsdWUgPSBbXSkgPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG5jb25zdCBmbGF0dGVuID0gKGxpc3QsIHJlc3VsdCA9IFtdKSA9PiB7XG4gIGxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkge1xuICAgICAgZmxhdHRlbihpdGVtLCByZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdW5pZnlQYXRocyA9IChwYXRoc18pID0+IHtcbiAgLyoqXG4gICAqIEB0eXBlIHtBcnJheTxTdHJpbmc+fVxuICAgKi9cbiAgY29uc3QgcGF0aHMgPSBmbGF0dGVuKGFycmlmeShwYXRoc18pKTtcbiAgaWYgKCFwYXRocy5ldmVyeShwID0+IHR5cGVvZiBwID09PSBTVFJJTkdfVFlQRSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBOb24tc3RyaW5nIHByb3ZpZGVkIGFzIHdhdGNoIHBhdGg6ICR7cGF0aHN9YCk7XG4gIH1cbiAgcmV0dXJuIHBhdGhzLm1hcChub3JtYWxpemVQYXRoVG9Vbml4KTtcbn07XG5cbi8vIElmIFNMQVNIX1NMQVNIIG9jY3VycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhdGgsIGl0IGlzIG5vdCByZXBsYWNlZFxuLy8gICAgIGJlY2F1c2UgXCIvL1N0b3JhZ2VQQy9Ecml2ZVBvb2wvTW92aWVzXCIgaXMgYSB2YWxpZCBuZXR3b3JrIHBhdGhcbmNvbnN0IHRvVW5peCA9IChzdHJpbmcpID0+IHtcbiAgbGV0IHN0ciA9IHN0cmluZy5yZXBsYWNlKEJBQ0tfU0xBU0hfUkUsIFNMQVNIKTtcbiAgbGV0IHByZXBlbmQgPSBmYWxzZTtcbiAgaWYgKHN0ci5zdGFydHNXaXRoKFNMQVNIX1NMQVNIKSkge1xuICAgIHByZXBlbmQgPSB0cnVlO1xuICB9XG4gIHdoaWxlIChzdHIubWF0Y2goRE9VQkxFX1NMQVNIX1JFKSkge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKERPVUJMRV9TTEFTSF9SRSwgU0xBU0gpO1xuICB9XG4gIGlmIChwcmVwZW5kKSB7XG4gICAgc3RyID0gU0xBU0ggKyBzdHI7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cbi8vIE91ciB2ZXJzaW9uIG9mIHVwYXRoLm5vcm1hbGl6ZVxuLy8gVE9ETzogdGhpcyBpcyBub3QgZXF1YWwgdG8gcGF0aC1ub3JtYWxpemUgbW9kdWxlIC0gaW52ZXN0aWdhdGUgd2h5XG5jb25zdCBub3JtYWxpemVQYXRoVG9Vbml4ID0gKHBhdGgpID0+IHRvVW5peChzeXNQYXRoLm5vcm1hbGl6ZSh0b1VuaXgocGF0aCkpKTtcblxuY29uc3Qgbm9ybWFsaXplSWdub3JlZCA9IChjd2QgPSBFTVBUWV9TVFIpID0+IChwYXRoKSA9PiB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gU1RSSU5HX1RZUEUpIHJldHVybiBwYXRoO1xuICByZXR1cm4gbm9ybWFsaXplUGF0aFRvVW5peChzeXNQYXRoLmlzQWJzb2x1dGUocGF0aCkgPyBwYXRoIDogc3lzUGF0aC5qb2luKGN3ZCwgcGF0aCkpO1xufTtcblxuY29uc3QgZ2V0QWJzb2x1dGVQYXRoID0gKHBhdGgsIGN3ZCkgPT4ge1xuICBpZiAoc3lzUGF0aC5pc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cbiAgaWYgKHBhdGguc3RhcnRzV2l0aChCQU5HKSkge1xuICAgIHJldHVybiBCQU5HICsgc3lzUGF0aC5qb2luKGN3ZCwgcGF0aC5zbGljZSgxKSk7XG4gIH1cbiAgcmV0dXJuIHN5c1BhdGguam9pbihjd2QsIHBhdGgpO1xufTtcblxuY29uc3QgdW5kZWYgPSAob3B0cywga2V5KSA9PiBvcHRzW2tleV0gPT09IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEaXJlY3RvcnkgZW50cnkuXG4gKiBAcHJvcGVydHkge1BhdGh9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7U2V0PFBhdGg+fSBpdGVtc1xuICovXG5jbGFzcyBEaXJFbnRyeSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1BhdGh9IGRpclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZW1vdmVXYXRjaGVyXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkaXIsIHJlbW92ZVdhdGNoZXIpIHtcbiAgICB0aGlzLnBhdGggPSBkaXI7XG4gICAgdGhpcy5fcmVtb3ZlV2F0Y2hlciA9IHJlbW92ZVdhdGNoZXI7XG4gICAgLyoqIEB0eXBlIHtTZXQ8UGF0aD59ICovXG4gICAgdGhpcy5pdGVtcyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIGFkZChpdGVtKSB7XG4gICAgY29uc3Qge2l0ZW1zfSA9IHRoaXM7XG4gICAgaWYgKCFpdGVtcykgcmV0dXJuO1xuICAgIGlmIChpdGVtICE9PSBPTkVfRE9UICYmIGl0ZW0gIT09IFRXT19ET1RTKSBpdGVtcy5hZGQoaXRlbSk7XG4gIH1cblxuICBhc3luYyByZW1vdmUoaXRlbSkge1xuICAgIGNvbnN0IHtpdGVtc30gPSB0aGlzO1xuICAgIGlmICghaXRlbXMpIHJldHVybjtcbiAgICBpdGVtcy5kZWxldGUoaXRlbSk7XG4gICAgaWYgKGl0ZW1zLnNpemUgPiAwKSByZXR1cm47XG5cbiAgICBjb25zdCBkaXIgPSB0aGlzLnBhdGg7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlYWRkaXIoZGlyKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLl9yZW1vdmVXYXRjaGVyKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVdhdGNoZXIoc3lzUGF0aC5kaXJuYW1lKGRpciksIHN5c1BhdGguYmFzZW5hbWUoZGlyKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGl0ZW0pIHtcbiAgICBjb25zdCB7aXRlbXN9ID0gdGhpcztcbiAgICBpZiAoIWl0ZW1zKSByZXR1cm47XG4gICAgcmV0dXJuIGl0ZW1zLmhhcyhpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7QXJyYXk8U3RyaW5nPn1cbiAgICovXG4gIGdldENoaWxkcmVuKCkge1xuICAgIGNvbnN0IHtpdGVtc30gPSB0aGlzO1xuICAgIGlmICghaXRlbXMpIHJldHVybjtcbiAgICByZXR1cm4gWy4uLml0ZW1zLnZhbHVlcygpXTtcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5pdGVtcy5jbGVhcigpO1xuICAgIGRlbGV0ZSB0aGlzLnBhdGg7XG4gICAgZGVsZXRlIHRoaXMuX3JlbW92ZVdhdGNoZXI7XG4gICAgZGVsZXRlIHRoaXMuaXRlbXM7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzKTtcbiAgfVxufVxuXG5jb25zdCBTVEFUX01FVEhPRF9GID0gJ3N0YXQnO1xuY29uc3QgU1RBVF9NRVRIT0RfTCA9ICdsc3RhdCc7XG5jbGFzcyBXYXRjaEhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKHBhdGgsIHdhdGNoUGF0aCwgZm9sbG93LCBmc3cpIHtcbiAgICB0aGlzLmZzdyA9IGZzdztcbiAgICB0aGlzLnBhdGggPSBwYXRoID0gcGF0aC5yZXBsYWNlKFJFUExBQ0VSX1JFLCBFTVBUWV9TVFIpO1xuICAgIHRoaXMud2F0Y2hQYXRoID0gd2F0Y2hQYXRoO1xuICAgIHRoaXMuZnVsbFdhdGNoUGF0aCA9IHN5c1BhdGgucmVzb2x2ZSh3YXRjaFBhdGgpO1xuICAgIHRoaXMuaGFzR2xvYiA9IHdhdGNoUGF0aCAhPT0gcGF0aDtcbiAgICAvKiogQHR5cGUge29iamVjdHxib29sZWFufSAqL1xuICAgIGlmIChwYXRoID09PSBFTVBUWV9TVFIpIHRoaXMuaGFzR2xvYiA9IGZhbHNlO1xuICAgIHRoaXMuZ2xvYlN5bWxpbmsgPSB0aGlzLmhhc0dsb2IgJiYgZm9sbG93ID8gdW5kZWZpbmVkIDogZmFsc2U7XG4gICAgdGhpcy5nbG9iRmlsdGVyID0gdGhpcy5oYXNHbG9iID8gYW55bWF0Y2gocGF0aCwgdW5kZWZpbmVkLCBBTllNQVRDSF9PUFRTKSA6IGZhbHNlO1xuICAgIHRoaXMuZGlyUGFydHMgPSB0aGlzLmdldERpclBhcnRzKHBhdGgpO1xuICAgIHRoaXMuZGlyUGFydHMuZm9yRWFjaCgocGFydHMpID0+IHtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSBwYXJ0cy5wb3AoKTtcbiAgICB9KTtcbiAgICB0aGlzLmZvbGxvd1N5bWxpbmtzID0gZm9sbG93O1xuICAgIHRoaXMuc3RhdE1ldGhvZCA9IGZvbGxvdyA/IFNUQVRfTUVUSE9EX0YgOiBTVEFUX01FVEhPRF9MO1xuICB9XG5cbiAgY2hlY2tHbG9iU3ltbGluayhlbnRyeSkge1xuICAgIC8vIG9ubHkgbmVlZCB0byByZXNvbHZlIG9uY2VcbiAgICAvLyBmaXJzdCBlbnRyeSBzaG91bGQgYWx3YXlzIGhhdmUgZW50cnkucGFyZW50RGlyID09PSBFTVBUWV9TVFJcbiAgICBpZiAodGhpcy5nbG9iU3ltbGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmdsb2JTeW1saW5rID0gZW50cnkuZnVsbFBhcmVudERpciA9PT0gdGhpcy5mdWxsV2F0Y2hQYXRoID9cbiAgICAgICAgZmFsc2UgOiB7cmVhbFBhdGg6IGVudHJ5LmZ1bGxQYXJlbnREaXIsIGxpbmtQYXRoOiB0aGlzLmZ1bGxXYXRjaFBhdGh9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdsb2JTeW1saW5rKSB7XG4gICAgICByZXR1cm4gZW50cnkuZnVsbFBhdGgucmVwbGFjZSh0aGlzLmdsb2JTeW1saW5rLnJlYWxQYXRoLCB0aGlzLmdsb2JTeW1saW5rLmxpbmtQYXRoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkuZnVsbFBhdGg7XG4gIH1cblxuICBlbnRyeVBhdGgoZW50cnkpIHtcbiAgICByZXR1cm4gc3lzUGF0aC5qb2luKHRoaXMud2F0Y2hQYXRoLFxuICAgICAgc3lzUGF0aC5yZWxhdGl2ZSh0aGlzLndhdGNoUGF0aCwgdGhpcy5jaGVja0dsb2JTeW1saW5rKGVudHJ5KSlcbiAgICApO1xuICB9XG5cbiAgZmlsdGVyUGF0aChlbnRyeSkge1xuICAgIGNvbnN0IHtzdGF0c30gPSBlbnRyeTtcbiAgICBpZiAoc3RhdHMgJiYgc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkgcmV0dXJuIHRoaXMuZmlsdGVyRGlyKGVudHJ5KTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGggPSB0aGlzLmVudHJ5UGF0aChlbnRyeSk7XG4gICAgY29uc3QgbWF0Y2hlc0dsb2IgPSB0aGlzLmhhc0dsb2IgJiYgdHlwZW9mIHRoaXMuZ2xvYkZpbHRlciA9PT0gRlVOQ1RJT05fVFlQRSA/XG4gICAgICB0aGlzLmdsb2JGaWx0ZXIocmVzb2x2ZWRQYXRoKSA6IHRydWU7XG4gICAgcmV0dXJuIG1hdGNoZXNHbG9iICYmXG4gICAgICB0aGlzLmZzdy5faXNudElnbm9yZWQocmVzb2x2ZWRQYXRoLCBzdGF0cykgJiZcbiAgICAgIHRoaXMuZnN3Ll9oYXNSZWFkUGVybWlzc2lvbnMoc3RhdHMpO1xuICB9XG5cbiAgZ2V0RGlyUGFydHMocGF0aCkge1xuICAgIGlmICghdGhpcy5oYXNHbG9iKSByZXR1cm4gW107XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBjb25zdCBleHBhbmRlZFBhdGggPSBwYXRoLmluY2x1ZGVzKEJSQUNFX1NUQVJUKSA/IGJyYWNlcy5leHBhbmQocGF0aCkgOiBbcGF0aF07XG4gICAgZXhwYW5kZWRQYXRoLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgIHBhcnRzLnB1c2goc3lzUGF0aC5yZWxhdGl2ZSh0aGlzLndhdGNoUGF0aCwgcGF0aCkuc3BsaXQoU0xBU0hfT1JfQkFDS19TTEFTSF9SRSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBwYXJ0cztcbiAgfVxuXG4gIGZpbHRlckRpcihlbnRyeSkge1xuICAgIGlmICh0aGlzLmhhc0dsb2IpIHtcbiAgICAgIGNvbnN0IGVudHJ5UGFydHMgPSB0aGlzLmdldERpclBhcnRzKHRoaXMuY2hlY2tHbG9iU3ltbGluayhlbnRyeSkpO1xuICAgICAgbGV0IGdsb2JzdGFyID0gZmFsc2U7XG4gICAgICB0aGlzLnVubWF0Y2hlZEdsb2IgPSAhdGhpcy5kaXJQYXJ0cy5zb21lKChwYXJ0cykgPT4ge1xuICAgICAgICByZXR1cm4gcGFydHMuZXZlcnkoKHBhcnQsIGkpID0+IHtcbiAgICAgICAgICBpZiAocGFydCA9PT0gR0xPQlNUQVIpIGdsb2JzdGFyID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZ2xvYnN0YXIgfHwgIWVudHJ5UGFydHNbMF1baV0gfHwgYW55bWF0Y2gocGFydCwgZW50cnlQYXJ0c1swXVtpXSwgQU5ZTUFUQ0hfT1BUUyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy51bm1hdGNoZWRHbG9iICYmIHRoaXMuZnN3Ll9pc250SWdub3JlZCh0aGlzLmVudHJ5UGF0aChlbnRyeSksIGVudHJ5LnN0YXRzKTtcbiAgfVxufVxuXG4vKipcbiAqIFdhdGNoZXMgZmlsZXMgJiBkaXJlY3RvcmllcyBmb3IgY2hhbmdlcy4gRW1pdHRlZCBldmVudHM6XG4gKiBgYWRkYCwgYGFkZERpcmAsIGBjaGFuZ2VgLCBgdW5saW5rYCwgYHVubGlua0RpcmAsIGBhbGxgLCBgZXJyb3JgXG4gKlxuICogICAgIG5ldyBGU1dhdGNoZXIoKVxuICogICAgICAgLmFkZChkaXJlY3RvcmllcylcbiAqICAgICAgIC5vbignYWRkJywgcGF0aCA9PiBsb2coJ0ZpbGUnLCBwYXRoLCAnd2FzIGFkZGVkJykpXG4gKi9cbmNsYXNzIEZTV2F0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4vLyBOb3QgaW5kZW50aW5nIG1ldGhvZHMgZm9yIGhpc3Rvcnkgc2FrZTsgZm9yIG5vdy5cbmNvbnN0cnVjdG9yKF9vcHRzKSB7XG4gIHN1cGVyKCk7XG5cbiAgY29uc3Qgb3B0cyA9IHt9O1xuICBpZiAoX29wdHMpIE9iamVjdC5hc3NpZ24ob3B0cywgX29wdHMpOyAvLyBmb3IgZnJvemVuIG9iamVjdHNcblxuICAvKiogQHR5cGUge01hcDxTdHJpbmcsIERpckVudHJ5Pn0gKi9cbiAgdGhpcy5fd2F0Y2hlZCA9IG5ldyBNYXAoKTtcbiAgLyoqIEB0eXBlIHtNYXA8U3RyaW5nLCBBcnJheT59ICovXG4gIHRoaXMuX2Nsb3NlcnMgPSBuZXcgTWFwKCk7XG4gIC8qKiBAdHlwZSB7U2V0PFN0cmluZz59ICovXG4gIHRoaXMuX2lnbm9yZWRQYXRocyA9IG5ldyBTZXQoKTtcblxuICAvKiogQHR5cGUge01hcDxUaHJvdHRsZVR5cGUsIE1hcD59ICovXG4gIHRoaXMuX3Rocm90dGxlZCA9IG5ldyBNYXAoKTtcblxuICAvKiogQHR5cGUge01hcDxQYXRoLCBTdHJpbmd8Qm9vbGVhbj59ICovXG4gIHRoaXMuX3N5bWxpbmtQYXRocyA9IG5ldyBNYXAoKTtcblxuICB0aGlzLl9zdHJlYW1zID0gbmV3IFNldCgpO1xuICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuXG4gIC8vIFNldCB1cCBkZWZhdWx0IG9wdGlvbnMuXG4gIGlmICh1bmRlZihvcHRzLCAncGVyc2lzdGVudCcpKSBvcHRzLnBlcnNpc3RlbnQgPSB0cnVlO1xuICBpZiAodW5kZWYob3B0cywgJ2lnbm9yZUluaXRpYWwnKSkgb3B0cy5pZ25vcmVJbml0aWFsID0gZmFsc2U7XG4gIGlmICh1bmRlZihvcHRzLCAnaWdub3JlUGVybWlzc2lvbkVycm9ycycpKSBvcHRzLmlnbm9yZVBlcm1pc3Npb25FcnJvcnMgPSBmYWxzZTtcbiAgaWYgKHVuZGVmKG9wdHMsICdpbnRlcnZhbCcpKSBvcHRzLmludGVydmFsID0gMTAwO1xuICBpZiAodW5kZWYob3B0cywgJ2JpbmFyeUludGVydmFsJykpIG9wdHMuYmluYXJ5SW50ZXJ2YWwgPSAzMDA7XG4gIGlmICh1bmRlZihvcHRzLCAnZGlzYWJsZUdsb2JiaW5nJykpIG9wdHMuZGlzYWJsZUdsb2JiaW5nID0gZmFsc2U7XG4gIG9wdHMuZW5hYmxlQmluYXJ5SW50ZXJ2YWwgPSBvcHRzLmJpbmFyeUludGVydmFsICE9PSBvcHRzLmludGVydmFsO1xuXG4gIC8vIEVuYWJsZSBmc2V2ZW50cyBvbiBPUyBYIHdoZW4gcG9sbGluZyBpc24ndCBleHBsaWNpdGx5IGVuYWJsZWQuXG4gIGlmICh1bmRlZihvcHRzLCAndXNlRnNFdmVudHMnKSkgb3B0cy51c2VGc0V2ZW50cyA9ICFvcHRzLnVzZVBvbGxpbmc7XG5cbiAgLy8gSWYgd2UgY2FuJ3QgdXNlIGZzZXZlbnRzLCBlbnN1cmUgdGhlIG9wdGlvbnMgcmVmbGVjdCBpdCdzIGRpc2FibGVkLlxuICBjb25zdCBjYW5Vc2VGc0V2ZW50cyA9IEZzRXZlbnRzSGFuZGxlci5jYW5Vc2UoKTtcbiAgaWYgKCFjYW5Vc2VGc0V2ZW50cykgb3B0cy51c2VGc0V2ZW50cyA9IGZhbHNlO1xuXG4gIC8vIFVzZSBwb2xsaW5nIG9uIE1hYyBpZiBub3QgdXNpbmcgZnNldmVudHMuXG4gIC8vIE90aGVyIHBsYXRmb3JtcyB1c2Ugbm9uLXBvbGxpbmcgZnNfd2F0Y2guXG4gIGlmICh1bmRlZihvcHRzLCAndXNlUG9sbGluZycpICYmICFvcHRzLnVzZUZzRXZlbnRzKSB7XG4gICAgb3B0cy51c2VQb2xsaW5nID0gaXNNYWNvcztcbiAgfVxuXG4gIC8vIEdsb2JhbCBvdmVycmlkZSAodXNlZnVsIGZvciBlbmQtZGV2ZWxvcGVycyB0aGF0IG5lZWQgdG8gZm9yY2UgcG9sbGluZyBmb3IgYWxsXG4gIC8vIGluc3RhbmNlcyBvZiBjaG9raWRhciwgcmVnYXJkbGVzcyBvZiB1c2FnZS9kZXBlbmRlbmN5IGRlcHRoKVxuICBjb25zdCBlbnZQb2xsID0gcHJvY2Vzcy5lbnYuQ0hPS0lEQVJfVVNFUE9MTElORztcbiAgaWYgKGVudlBvbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGVudkxvd2VyID0gZW52UG9sbC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGVudkxvd2VyID09PSAnZmFsc2UnIHx8IGVudkxvd2VyID09PSAnMCcpIHtcbiAgICAgIG9wdHMudXNlUG9sbGluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZW52TG93ZXIgPT09ICd0cnVlJyB8fCBlbnZMb3dlciA9PT0gJzEnKSB7XG4gICAgICBvcHRzLnVzZVBvbGxpbmcgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnVzZVBvbGxpbmcgPSAhIWVudkxvd2VyO1xuICAgIH1cbiAgfVxuICBjb25zdCBlbnZJbnRlcnZhbCA9IHByb2Nlc3MuZW52LkNIT0tJREFSX0lOVEVSVkFMO1xuICBpZiAoZW52SW50ZXJ2YWwpIHtcbiAgICBvcHRzLmludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVudkludGVydmFsLCAxMCk7XG4gIH1cblxuICAvLyBFZGl0b3IgYXRvbWljIHdyaXRlIG5vcm1hbGl6YXRpb24gZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggZnMud2F0Y2hcbiAgaWYgKHVuZGVmKG9wdHMsICdhdG9taWMnKSkgb3B0cy5hdG9taWMgPSAhb3B0cy51c2VQb2xsaW5nICYmICFvcHRzLnVzZUZzRXZlbnRzO1xuICBpZiAob3B0cy5hdG9taWMpIHRoaXMuX3BlbmRpbmdVbmxpbmtzID0gbmV3IE1hcCgpO1xuXG4gIGlmICh1bmRlZihvcHRzLCAnZm9sbG93U3ltbGlua3MnKSkgb3B0cy5mb2xsb3dTeW1saW5rcyA9IHRydWU7XG5cbiAgaWYgKHVuZGVmKG9wdHMsICdhd2FpdFdyaXRlRmluaXNoJykpIG9wdHMuYXdhaXRXcml0ZUZpbmlzaCA9IGZhbHNlO1xuICBpZiAob3B0cy5hd2FpdFdyaXRlRmluaXNoID09PSB0cnVlKSBvcHRzLmF3YWl0V3JpdGVGaW5pc2ggPSB7fTtcbiAgY29uc3QgYXdmID0gb3B0cy5hd2FpdFdyaXRlRmluaXNoO1xuICBpZiAoYXdmKSB7XG4gICAgaWYgKCFhd2Yuc3RhYmlsaXR5VGhyZXNob2xkKSBhd2Yuc3RhYmlsaXR5VGhyZXNob2xkID0gMjAwMDtcbiAgICBpZiAoIWF3Zi5wb2xsSW50ZXJ2YWwpIGF3Zi5wb2xsSW50ZXJ2YWwgPSAxMDA7XG4gICAgdGhpcy5fcGVuZGluZ1dyaXRlcyA9IG5ldyBNYXAoKTtcbiAgfVxuICBpZiAob3B0cy5pZ25vcmVkKSBvcHRzLmlnbm9yZWQgPSBhcnJpZnkob3B0cy5pZ25vcmVkKTtcblxuICBsZXQgcmVhZHlDYWxscyA9IDA7XG4gIHRoaXMuX2VtaXRSZWFkeSA9ICgpID0+IHtcbiAgICByZWFkeUNhbGxzKys7XG4gICAgaWYgKHJlYWR5Q2FsbHMgPj0gdGhpcy5fcmVhZHlDb3VudCkge1xuICAgICAgdGhpcy5fZW1pdFJlYWR5ID0gRU1QVFlfRk47XG4gICAgICB0aGlzLl9yZWFkeUVtaXR0ZWQgPSB0cnVlO1xuICAgICAgLy8gdXNlIHByb2Nlc3MubmV4dFRpY2sgdG8gYWxsb3cgdGltZSBmb3IgbGlzdGVuZXIgdG8gYmUgYm91bmRcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4gdGhpcy5lbWl0KEVWX1JFQURZKSk7XG4gICAgfVxuICB9O1xuICB0aGlzLl9lbWl0UmF3ID0gKC4uLmFyZ3MpID0+IHRoaXMuZW1pdChFVl9SQVcsIC4uLmFyZ3MpO1xuICB0aGlzLl9yZWFkeUVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5vcHRpb25zID0gb3B0cztcblxuICAvLyBJbml0aWFsaXplIHdpdGggcHJvcGVyIHdhdGNoZXIuXG4gIGlmIChvcHRzLnVzZUZzRXZlbnRzKSB7XG4gICAgdGhpcy5fZnNFdmVudHNIYW5kbGVyID0gbmV3IEZzRXZlbnRzSGFuZGxlcih0aGlzKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLl9ub2RlRnNIYW5kbGVyID0gbmV3IE5vZGVGc0hhbmRsZXIodGhpcyk7XG4gIH1cblxuICAvLyBZb3XigJlyZSBmcm96ZW4gd2hlbiB5b3VyIGhlYXJ04oCZcyBub3Qgb3Blbi5cbiAgT2JqZWN0LmZyZWV6ZShvcHRzKTtcbn1cblxuLy8gUHVibGljIG1ldGhvZHNcblxuLyoqXG4gKiBBZGRzIHBhdGhzIHRvIGJlIHdhdGNoZWQgb24gYW4gZXhpc3RpbmcgRlNXYXRjaGVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge1BhdGh8QXJyYXk8UGF0aD59IHBhdGhzX1xuICogQHBhcmFtIHtTdHJpbmc9fSBfb3JpZ0FkZCBwcml2YXRlOyBmb3IgaGFuZGxpbmcgbm9uLWV4aXN0ZW50IHBhdGhzIHRvIGJlIHdhdGNoZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbj19IF9pbnRlcm5hbCBwcml2YXRlOyBpbmRpY2F0ZXMgYSBub24tdXNlciBhZGRcbiAqIEByZXR1cm5zIHtGU1dhdGNoZXJ9IGZvciBjaGFpbmluZ1xuICovXG5hZGQocGF0aHNfLCBfb3JpZ0FkZCwgX2ludGVybmFsKSB7XG4gIGNvbnN0IHtjd2QsIGRpc2FibGVHbG9iYmluZ30gPSB0aGlzLm9wdGlvbnM7XG4gIHRoaXMuY2xvc2VkID0gZmFsc2U7XG4gIGxldCBwYXRocyA9IHVuaWZ5UGF0aHMocGF0aHNfKTtcbiAgaWYgKGN3ZCkge1xuICAgIHBhdGhzID0gcGF0aHMubWFwKChwYXRoKSA9PiB7XG4gICAgICBjb25zdCBhYnNQYXRoID0gZ2V0QWJzb2x1dGVQYXRoKHBhdGgsIGN3ZCk7XG5cbiAgICAgIC8vIENoZWNrIGBwYXRoYCBpbnN0ZWFkIG9mIGBhYnNQYXRoYCBiZWNhdXNlIHRoZSBjd2QgcG9ydGlvbiBjYW4ndCBiZSBhIGdsb2JcbiAgICAgIGlmIChkaXNhYmxlR2xvYmJpbmcgfHwgIWlzR2xvYihwYXRoKSkge1xuICAgICAgICByZXR1cm4gYWJzUGF0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub3JtYWxpemVQYXRoKGFic1BhdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGFzaWRlIG5lZ2F0ZWQgZ2xvYiBzdHJpbmdzXG4gIHBhdGhzID0gcGF0aHMuZmlsdGVyKChwYXRoKSA9PiB7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChCQU5HKSkge1xuICAgICAgdGhpcy5faWdub3JlZFBhdGhzLmFkZChwYXRoLnNsaWNlKDEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBpZiBhIHBhdGggaXMgYmVpbmcgYWRkZWQgdGhhdCB3YXMgcHJldmlvdXNseSBpZ25vcmVkLCBzdG9wIGlnbm9yaW5nIGl0XG4gICAgdGhpcy5faWdub3JlZFBhdGhzLmRlbGV0ZShwYXRoKTtcbiAgICB0aGlzLl9pZ25vcmVkUGF0aHMuZGVsZXRlKHBhdGggKyBTTEFTSF9HTE9CU1RBUik7XG5cbiAgICAvLyByZXNldCB0aGUgY2FjaGVkIHVzZXJJZ25vcmVkIGFueW1hdGNoIGZuXG4gICAgLy8gdG8gbWFrZSBpZ25vcmVkUGF0aHMgY2hhbmdlcyBlZmZlY3RpdmVcbiAgICB0aGlzLl91c2VySWdub3JlZCA9IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBpZiAodGhpcy5vcHRpb25zLnVzZUZzRXZlbnRzICYmIHRoaXMuX2ZzRXZlbnRzSGFuZGxlcikge1xuICAgIGlmICghdGhpcy5fcmVhZHlDb3VudCkgdGhpcy5fcmVhZHlDb3VudCA9IHBhdGhzLmxlbmd0aDtcbiAgICBpZiAodGhpcy5vcHRpb25zLnBlcnNpc3RlbnQpIHRoaXMuX3JlYWR5Q291bnQgKj0gMjtcbiAgICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB0aGlzLl9mc0V2ZW50c0hhbmRsZXIuX2FkZFRvRnNFdmVudHMocGF0aCkpO1xuICB9IGVsc2Uge1xuICAgIGlmICghdGhpcy5fcmVhZHlDb3VudCkgdGhpcy5fcmVhZHlDb3VudCA9IDA7XG4gICAgdGhpcy5fcmVhZHlDb3VudCArPSBwYXRocy5sZW5ndGg7XG4gICAgUHJvbWlzZS5hbGwoXG4gICAgICBwYXRocy5tYXAoYXN5bmMgcGF0aCA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX25vZGVGc0hhbmRsZXIuX2FkZFRvTm9kZUZzKHBhdGgsICFfaW50ZXJuYWwsIDAsIDAsIF9vcmlnQWRkKTtcbiAgICAgICAgaWYgKHJlcykgdGhpcy5fZW1pdFJlYWR5KCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLmFkZChzeXNQYXRoLmRpcm5hbWUoaXRlbSksIHN5c1BhdGguYmFzZW5hbWUoX29yaWdBZGQgfHwgaXRlbSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBDbG9zZSB3YXRjaGVycyBvciBzdGFydCBpZ25vcmluZyBldmVudHMgZnJvbSBzcGVjaWZpZWQgcGF0aHMuXG4gKiBAcGFyYW0ge1BhdGh8QXJyYXk8UGF0aD59IHBhdGhzXyAtIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLCBmaWxlL2RpcmVjdG9yeSBwYXRocyBhbmQvb3IgZ2xvYnNcbiAqIEByZXR1cm5zIHtGU1dhdGNoZXJ9IGZvciBjaGFpbmluZ1xuKi9cbnVud2F0Y2gocGF0aHNfKSB7XG4gIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuIHRoaXM7XG4gIGNvbnN0IHBhdGhzID0gdW5pZnlQYXRocyhwYXRoc18pO1xuICBjb25zdCB7Y3dkfSA9IHRoaXMub3B0aW9ucztcblxuICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgLy8gY29udmVydCB0byBhYnNvbHV0ZSBwYXRoIHVubGVzcyByZWxhdGl2ZSBwYXRoIGFscmVhZHkgbWF0Y2hlc1xuICAgIGlmICghc3lzUGF0aC5pc0Fic29sdXRlKHBhdGgpICYmICF0aGlzLl9jbG9zZXJzLmhhcyhwYXRoKSkge1xuICAgICAgaWYgKGN3ZCkgcGF0aCA9IHN5c1BhdGguam9pbihjd2QsIHBhdGgpO1xuICAgICAgcGF0aCA9IHN5c1BhdGgucmVzb2x2ZShwYXRoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9zZVBhdGgocGF0aCk7XG5cbiAgICB0aGlzLl9pZ25vcmVkUGF0aHMuYWRkKHBhdGgpO1xuICAgIGlmICh0aGlzLl93YXRjaGVkLmhhcyhwYXRoKSkge1xuICAgICAgdGhpcy5faWdub3JlZFBhdGhzLmFkZChwYXRoICsgU0xBU0hfR0xPQlNUQVIpO1xuICAgIH1cblxuICAgIC8vIHJlc2V0IHRoZSBjYWNoZWQgdXNlcklnbm9yZWQgYW55bWF0Y2ggZm5cbiAgICAvLyB0byBtYWtlIGlnbm9yZWRQYXRocyBjaGFuZ2VzIGVmZmVjdGl2ZVxuICAgIHRoaXMuX3VzZXJJZ25vcmVkID0gdW5kZWZpbmVkO1xuICB9KTtcblxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBDbG9zZSB3YXRjaGVycyBhbmQgcmVtb3ZlIGFsbCBsaXN0ZW5lcnMgZnJvbSB3YXRjaGVkIHBhdGhzLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59LlxuKi9cbmNsb3NlKCkge1xuICBpZiAodGhpcy5jbG9zZWQpIHJldHVybiB0aGlzLl9jbG9zZVByb21pc2U7XG4gIHRoaXMuY2xvc2VkID0gdHJ1ZTtcblxuICAvLyBNZW1vcnkgbWFuYWdlbWVudC5cbiAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgY29uc3QgY2xvc2VycyA9IFtdO1xuICB0aGlzLl9jbG9zZXJzLmZvckVhY2goY2xvc2VyTGlzdCA9PiBjbG9zZXJMaXN0LmZvckVhY2goY2xvc2VyID0+IHtcbiAgICBjb25zdCBwcm9taXNlID0gY2xvc2VyKCk7XG4gICAgaWYgKHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSBjbG9zZXJzLnB1c2gocHJvbWlzZSk7XG4gIH0pKTtcbiAgdGhpcy5fc3RyZWFtcy5mb3JFYWNoKHN0cmVhbSA9PiBzdHJlYW0uZGVzdHJveSgpKTtcbiAgdGhpcy5fdXNlcklnbm9yZWQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX3JlYWR5Q291bnQgPSAwO1xuICB0aGlzLl9yZWFkeUVtaXR0ZWQgPSBmYWxzZTtcbiAgdGhpcy5fd2F0Y2hlZC5mb3JFYWNoKGRpcmVudCA9PiBkaXJlbnQuZGlzcG9zZSgpKTtcbiAgWydjbG9zZXJzJywgJ3dhdGNoZWQnLCAnc3RyZWFtcycsICdzeW1saW5rUGF0aHMnLCAndGhyb3R0bGVkJ10uZm9yRWFjaChrZXkgPT4ge1xuICAgIHRoaXNbYF8ke2tleX1gXS5jbGVhcigpO1xuICB9KTtcblxuICB0aGlzLl9jbG9zZVByb21pc2UgPSBjbG9zZXJzLmxlbmd0aCA/IFByb21pc2UuYWxsKGNsb3NlcnMpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICByZXR1cm4gdGhpcy5fY2xvc2VQcm9taXNlO1xufVxuXG4vKipcbiAqIEV4cG9zZSBsaXN0IG9mIHdhdGNoZWQgcGF0aHNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGZvciBjaGFpbmluZ1xuKi9cbmdldFdhdGNoZWQoKSB7XG4gIGNvbnN0IHdhdGNoTGlzdCA9IHt9O1xuICB0aGlzLl93YXRjaGVkLmZvckVhY2goKGVudHJ5LCBkaXIpID0+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLm9wdGlvbnMuY3dkID8gc3lzUGF0aC5yZWxhdGl2ZSh0aGlzLm9wdGlvbnMuY3dkLCBkaXIpIDogZGlyO1xuICAgIHdhdGNoTGlzdFtrZXkgfHwgT05FX0RPVF0gPSBlbnRyeS5nZXRDaGlsZHJlbigpLnNvcnQoKTtcbiAgfSk7XG4gIHJldHVybiB3YXRjaExpc3Q7XG59XG5cbmVtaXRXaXRoQWxsKGV2ZW50LCBhcmdzKSB7XG4gIHRoaXMuZW1pdCguLi5hcmdzKTtcbiAgaWYgKGV2ZW50ICE9PSBFVl9FUlJPUikgdGhpcy5lbWl0KEVWX0FMTCwgLi4uYXJncyk7XG59XG5cbi8vIENvbW1vbiBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhbmQgZW1pdCBldmVudHMuXG4gKiBDYWxsaW5nIF9lbWl0IERPRVMgTk9UIE1FQU4gZW1pdCgpIHdvdWxkIGJlIGNhbGxlZCFcbiAqIEBwYXJhbSB7RXZlbnROYW1lfSBldmVudCBUeXBlIG9mIGV2ZW50XG4gKiBAcGFyYW0ge1BhdGh9IHBhdGggRmlsZSBvciBkaXJlY3RvcnkgcGF0aFxuICogQHBhcmFtIHsqPX0gdmFsMSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHdpdGggZXZlbnRcbiAqIEBwYXJhbSB7Kj19IHZhbDJcbiAqIEBwYXJhbSB7Kj19IHZhbDNcbiAqIEByZXR1cm5zIHRoZSBlcnJvciBpZiBkZWZpbmVkLCBvdGhlcndpc2UgdGhlIHZhbHVlIG9mIHRoZSBGU1dhdGNoZXIgaW5zdGFuY2UncyBgY2xvc2VkYCBmbGFnXG4gKi9cbmFzeW5jIF9lbWl0KGV2ZW50LCBwYXRoLCB2YWwxLCB2YWwyLCB2YWwzKSB7XG4gIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuXG4gIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gIGlmIChpc1dpbmRvd3MpIHBhdGggPSBzeXNQYXRoLm5vcm1hbGl6ZShwYXRoKTtcbiAgaWYgKG9wdHMuY3dkKSBwYXRoID0gc3lzUGF0aC5yZWxhdGl2ZShvcHRzLmN3ZCwgcGF0aCk7XG4gIC8qKiBAdHlwZSBBcnJheTxhbnk+ICovXG4gIGNvbnN0IGFyZ3MgPSBbZXZlbnQsIHBhdGhdO1xuICBpZiAodmFsMyAhPT0gdW5kZWZpbmVkKSBhcmdzLnB1c2godmFsMSwgdmFsMiwgdmFsMyk7XG4gIGVsc2UgaWYgKHZhbDIgIT09IHVuZGVmaW5lZCkgYXJncy5wdXNoKHZhbDEsIHZhbDIpO1xuICBlbHNlIGlmICh2YWwxICE9PSB1bmRlZmluZWQpIGFyZ3MucHVzaCh2YWwxKTtcblxuICBjb25zdCBhd2YgPSBvcHRzLmF3YWl0V3JpdGVGaW5pc2g7XG4gIGxldCBwdztcbiAgaWYgKGF3ZiAmJiAocHcgPSB0aGlzLl9wZW5kaW5nV3JpdGVzLmdldChwYXRoKSkpIHtcbiAgICBwdy5sYXN0Q2hhbmdlID0gbmV3IERhdGUoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGlmIChvcHRzLmF0b21pYykge1xuICAgIGlmIChldmVudCA9PT0gRVZfVU5MSU5LKSB7XG4gICAgICB0aGlzLl9wZW5kaW5nVW5saW5rcy5zZXQocGF0aCwgYXJncyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcGVuZGluZ1VubGlua3MuZm9yRWFjaCgoZW50cnksIHBhdGgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXQoLi4uZW50cnkpO1xuICAgICAgICAgIHRoaXMuZW1pdChFVl9BTEwsIC4uLmVudHJ5KTtcbiAgICAgICAgICB0aGlzLl9wZW5kaW5nVW5saW5rcy5kZWxldGUocGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHlwZW9mIG9wdHMuYXRvbWljID09PSAnbnVtYmVyJyA/IG9wdHMuYXRvbWljIDogMTAwKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoZXZlbnQgPT09IEVWX0FERCAmJiB0aGlzLl9wZW5kaW5nVW5saW5rcy5oYXMocGF0aCkpIHtcbiAgICAgIGV2ZW50ID0gYXJnc1swXSA9IEVWX0NIQU5HRTtcbiAgICAgIHRoaXMuX3BlbmRpbmdVbmxpbmtzLmRlbGV0ZShwYXRoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYXdmICYmIChldmVudCA9PT0gRVZfQUREIHx8IGV2ZW50ID09PSBFVl9DSEFOR0UpICYmIHRoaXMuX3JlYWR5RW1pdHRlZCkge1xuICAgIGNvbnN0IGF3ZkVtaXQgPSAoZXJyLCBzdGF0cykgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBldmVudCA9IGFyZ3NbMF0gPSBFVl9FUlJPUjtcbiAgICAgICAgYXJnc1sxXSA9IGVycjtcbiAgICAgICAgdGhpcy5lbWl0V2l0aEFsbChldmVudCwgYXJncyk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXRzKSB7XG4gICAgICAgIC8vIGlmIHN0YXRzIGRvZXNuJ3QgZXhpc3QgdGhlIGZpbGUgbXVzdCBoYXZlIGJlZW4gZGVsZXRlZFxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgYXJnc1syXSA9IHN0YXRzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFyZ3MucHVzaChzdGF0cyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0V2l0aEFsbChldmVudCwgYXJncyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuX2F3YWl0V3JpdGVGaW5pc2gocGF0aCwgYXdmLnN0YWJpbGl0eVRocmVzaG9sZCwgZXZlbnQsIGF3ZkVtaXQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKGV2ZW50ID09PSBFVl9DSEFOR0UpIHtcbiAgICBjb25zdCBpc1Rocm90dGxlZCA9ICF0aGlzLl90aHJvdHRsZShFVl9DSEFOR0UsIHBhdGgsIDUwKTtcbiAgICBpZiAoaXNUaHJvdHRsZWQpIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaWYgKG9wdHMuYWx3YXlzU3RhdCAmJiB2YWwxID09PSB1bmRlZmluZWQgJiZcbiAgICAoZXZlbnQgPT09IEVWX0FERCB8fCBldmVudCA9PT0gRVZfQUREX0RJUiB8fCBldmVudCA9PT0gRVZfQ0hBTkdFKVxuICApIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IG9wdHMuY3dkID8gc3lzUGF0aC5qb2luKG9wdHMuY3dkLCBwYXRoKSA6IHBhdGg7XG4gICAgbGV0IHN0YXRzO1xuICAgIHRyeSB7XG4gICAgICBzdGF0cyA9IGF3YWl0IHN0YXQoZnVsbFBhdGgpO1xuICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAvLyBTdXBwcmVzcyBldmVudCB3aGVuIGZzX3N0YXQgZmFpbHMsIHRvIGF2b2lkIHNlbmRpbmcgdW5kZWZpbmVkICdzdGF0J1xuICAgIGlmICghc3RhdHMgfHwgdGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBhcmdzLnB1c2goc3RhdHMpO1xuICB9XG4gIHRoaXMuZW1pdFdpdGhBbGwoZXZlbnQsIGFyZ3MpO1xuXG4gIHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIENvbW1vbiBoYW5kbGVyIGZvciBlcnJvcnNcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gKiBAcmV0dXJucyB7RXJyb3J8Qm9vbGVhbn0gVGhlIGVycm9yIGlmIGRlZmluZWQsIG90aGVyd2lzZSB0aGUgdmFsdWUgb2YgdGhlIEZTV2F0Y2hlciBpbnN0YW5jZSdzIGBjbG9zZWRgIGZsYWdcbiAqL1xuX2hhbmRsZUVycm9yKGVycm9yKSB7XG4gIGNvbnN0IGNvZGUgPSBlcnJvciAmJiBlcnJvci5jb2RlO1xuICBpZiAoZXJyb3IgJiYgY29kZSAhPT0gJ0VOT0VOVCcgJiYgY29kZSAhPT0gJ0VOT1RESVInICYmXG4gICAgKCF0aGlzLm9wdGlvbnMuaWdub3JlUGVybWlzc2lvbkVycm9ycyB8fCAoY29kZSAhPT0gJ0VQRVJNJyAmJiBjb2RlICE9PSAnRUFDQ0VTJykpXG4gICkge1xuICAgIHRoaXMuZW1pdChFVl9FUlJPUiwgZXJyb3IpO1xuICB9XG4gIHJldHVybiBlcnJvciB8fCB0aGlzLmNsb3NlZDtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdXRpbGl0eSBmb3IgdGhyb3R0bGluZ1xuICogQHBhcmFtIHtUaHJvdHRsZVR5cGV9IGFjdGlvblR5cGUgdHlwZSBiZWluZyB0aHJvdHRsZWRcbiAqIEBwYXJhbSB7UGF0aH0gcGF0aCBiZWluZyBhY3RlZCB1cG9uXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZW91dCBkdXJhdGlvbiBvZiB0aW1lIHRvIHN1cHByZXNzIGR1cGxpY2F0ZSBhY3Rpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fGZhbHNlfSB0cmFja2luZyBvYmplY3Qgb3IgZmFsc2UgaWYgYWN0aW9uIHNob3VsZCBiZSBzdXBwcmVzc2VkXG4gKi9cbl90aHJvdHRsZShhY3Rpb25UeXBlLCBwYXRoLCB0aW1lb3V0KSB7XG4gIGlmICghdGhpcy5fdGhyb3R0bGVkLmhhcyhhY3Rpb25UeXBlKSkge1xuICAgIHRoaXMuX3Rocm90dGxlZC5zZXQoYWN0aW9uVHlwZSwgbmV3IE1hcCgpKTtcbiAgfVxuXG4gIC8qKiBAdHlwZSB7TWFwPFBhdGgsIE9iamVjdD59ICovXG4gIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Rocm90dGxlZC5nZXQoYWN0aW9uVHlwZSk7XG4gIC8qKiBAdHlwZSB7T2JqZWN0fSAqL1xuICBjb25zdCBhY3Rpb25QYXRoID0gYWN0aW9uLmdldChwYXRoKTtcblxuICBpZiAoYWN0aW9uUGF0aCkge1xuICAgIGFjdGlvblBhdGguY291bnQrKztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgdGltZW91dE9iamVjdDtcbiAgY29uc3QgY2xlYXIgPSAoKSA9PiB7XG4gICAgY29uc3QgaXRlbSA9IGFjdGlvbi5nZXQocGF0aCk7XG4gICAgY29uc3QgY291bnQgPSBpdGVtID8gaXRlbS5jb3VudCA6IDA7XG4gICAgYWN0aW9uLmRlbGV0ZShwYXRoKTtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dE9iamVjdCk7XG4gICAgaWYgKGl0ZW0pIGNsZWFyVGltZW91dChpdGVtLnRpbWVvdXRPYmplY3QpO1xuICAgIHJldHVybiBjb3VudDtcbiAgfTtcbiAgdGltZW91dE9iamVjdCA9IHNldFRpbWVvdXQoY2xlYXIsIHRpbWVvdXQpO1xuICBjb25zdCB0aHIgPSB7dGltZW91dE9iamVjdCwgY2xlYXIsIGNvdW50OiAwfTtcbiAgYWN0aW9uLnNldChwYXRoLCB0aHIpO1xuICByZXR1cm4gdGhyO1xufVxuXG5faW5jclJlYWR5Q291bnQoKSB7XG4gIHJldHVybiB0aGlzLl9yZWFkeUNvdW50Kys7XG59XG5cbi8qKlxuICogQXdhaXRzIHdyaXRlIG9wZXJhdGlvbiB0byBmaW5pc2guXG4gKiBQb2xscyBhIG5ld2x5IGNyZWF0ZWQgZmlsZSBmb3Igc2l6ZSB2YXJpYXRpb25zLiBXaGVuIGZpbGVzIHNpemUgZG9lcyBub3QgY2hhbmdlIGZvciAndGhyZXNob2xkJyBtaWxsaXNlY29uZHMgY2FsbHMgY2FsbGJhY2suXG4gKiBAcGFyYW0ge1BhdGh9IHBhdGggYmVpbmcgYWN0ZWQgdXBvblxuICogQHBhcmFtIHtOdW1iZXJ9IHRocmVzaG9sZCBUaW1lIGluIG1pbGxpc2Vjb25kcyBhIGZpbGUgc2l6ZSBtdXN0IGJlIGZpeGVkIGJlZm9yZSBhY2tub3dsZWRnaW5nIHdyaXRlIE9QIGlzIGZpbmlzaGVkXG4gKiBAcGFyYW0ge0V2ZW50TmFtZX0gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGF3ZkVtaXQgQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gcmVhZHkgZm9yIGV2ZW50IHRvIGJlIGVtaXR0ZWQuXG4gKi9cbl9hd2FpdFdyaXRlRmluaXNoKHBhdGgsIHRocmVzaG9sZCwgZXZlbnQsIGF3ZkVtaXQpIHtcbiAgbGV0IHRpbWVvdXRIYW5kbGVyO1xuXG4gIGxldCBmdWxsUGF0aCA9IHBhdGg7XG4gIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmICFzeXNQYXRoLmlzQWJzb2x1dGUocGF0aCkpIHtcbiAgICBmdWxsUGF0aCA9IHN5c1BhdGguam9pbih0aGlzLm9wdGlvbnMuY3dkLCBwYXRoKTtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgY29uc3QgYXdhaXRXcml0ZUZpbmlzaCA9IChwcmV2U3RhdCkgPT4ge1xuICAgIGZzLnN0YXQoZnVsbFBhdGgsIChlcnIsIGN1clN0YXQpID0+IHtcbiAgICAgIGlmIChlcnIgfHwgIXRoaXMuX3BlbmRpbmdXcml0ZXMuaGFzKHBhdGgpKSB7XG4gICAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFTk9FTlQnKSBhd2ZFbWl0KGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm93ID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXG4gICAgICBpZiAocHJldlN0YXQgJiYgY3VyU3RhdC5zaXplICE9PSBwcmV2U3RhdC5zaXplKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdXcml0ZXMuZ2V0KHBhdGgpLmxhc3RDaGFuZ2UgPSBub3c7XG4gICAgICB9XG4gICAgICBjb25zdCBwdyA9IHRoaXMuX3BlbmRpbmdXcml0ZXMuZ2V0KHBhdGgpO1xuICAgICAgY29uc3QgZGYgPSBub3cgLSBwdy5sYXN0Q2hhbmdlO1xuXG4gICAgICBpZiAoZGYgPj0gdGhyZXNob2xkKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdXcml0ZXMuZGVsZXRlKHBhdGgpO1xuICAgICAgICBhd2ZFbWl0KHVuZGVmaW5lZCwgY3VyU3RhdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0SGFuZGxlciA9IHNldFRpbWVvdXQoXG4gICAgICAgICAgYXdhaXRXcml0ZUZpbmlzaCxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuYXdhaXRXcml0ZUZpbmlzaC5wb2xsSW50ZXJ2YWwsXG4gICAgICAgICAgY3VyU3RhdFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmICghdGhpcy5fcGVuZGluZ1dyaXRlcy5oYXMocGF0aCkpIHtcbiAgICB0aGlzLl9wZW5kaW5nV3JpdGVzLnNldChwYXRoLCB7XG4gICAgICBsYXN0Q2hhbmdlOiBub3csXG4gICAgICBjYW5jZWxXYWl0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdXcml0ZXMuZGVsZXRlKHBhdGgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGltZW91dEhhbmRsZXIgPSBzZXRUaW1lb3V0KFxuICAgICAgYXdhaXRXcml0ZUZpbmlzaCxcbiAgICAgIHRoaXMub3B0aW9ucy5hd2FpdFdyaXRlRmluaXNoLnBvbGxJbnRlcnZhbFxuICAgICk7XG4gIH1cbn1cblxuX2dldEdsb2JJZ25vcmVkKCkge1xuICByZXR1cm4gWy4uLnRoaXMuX2lnbm9yZWRQYXRocy52YWx1ZXMoKV07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHVzZXIgaGFzIGFza2VkIHRvIGlnbm9yZSB0aGlzIHBhdGguXG4gKiBAcGFyYW0ge1BhdGh9IHBhdGggZmlsZXBhdGggb3IgZGlyXG4gKiBAcGFyYW0ge2ZzLlN0YXRzPX0gc3RhdHMgcmVzdWx0IG9mIGZzLnN0YXRcbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5faXNJZ25vcmVkKHBhdGgsIHN0YXRzKSB7XG4gIGlmICh0aGlzLm9wdGlvbnMuYXRvbWljICYmIERPVF9SRS50ZXN0KHBhdGgpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCF0aGlzLl91c2VySWdub3JlZCkge1xuICAgIGNvbnN0IHtjd2R9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGlnbiA9IHRoaXMub3B0aW9ucy5pZ25vcmVkO1xuXG4gICAgY29uc3QgaWdub3JlZCA9IGlnbiAmJiBpZ24ubWFwKG5vcm1hbGl6ZUlnbm9yZWQoY3dkKSk7XG4gICAgY29uc3QgcGF0aHMgPSBhcnJpZnkoaWdub3JlZClcbiAgICAgIC5maWx0ZXIoKHBhdGgpID0+IHR5cGVvZiBwYXRoID09PSBTVFJJTkdfVFlQRSAmJiAhaXNHbG9iKHBhdGgpKVxuICAgICAgLm1hcCgocGF0aCkgPT4gcGF0aCArIFNMQVNIX0dMT0JTVEFSKTtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fZ2V0R2xvYklnbm9yZWQoKS5tYXAobm9ybWFsaXplSWdub3JlZChjd2QpKS5jb25jYXQoaWdub3JlZCwgcGF0aHMpO1xuICAgIHRoaXMuX3VzZXJJZ25vcmVkID0gYW55bWF0Y2gobGlzdCwgdW5kZWZpbmVkLCBBTllNQVRDSF9PUFRTKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl91c2VySWdub3JlZChbcGF0aCwgc3RhdHNdKTtcbn1cblxuX2lzbnRJZ25vcmVkKHBhdGgsIHN0YXQpIHtcbiAgcmV0dXJuICF0aGlzLl9pc0lnbm9yZWQocGF0aCwgc3RhdCk7XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBzZXQgb2YgY29tbW9uIGhlbHBlcnMgYW5kIHByb3BlcnRpZXMgcmVsYXRpbmcgdG8gc3ltbGluayBhbmQgZ2xvYiBoYW5kbGluZy5cbiAqIEBwYXJhbSB7UGF0aH0gcGF0aCBmaWxlLCBkaXJlY3RvcnksIG9yIGdsb2IgcGF0dGVybiBiZWluZyB3YXRjaGVkXG4gKiBAcGFyYW0ge051bWJlcj19IGRlcHRoIGF0IGFueSBkZXB0aCA+IDAsIHRoaXMgaXNuJ3QgYSBnbG9iXG4gKiBAcmV0dXJucyB7V2F0Y2hIZWxwZXJ9IG9iamVjdCBjb250YWluaW5nIGhlbHBlcnMgZm9yIHRoaXMgcGF0aFxuICovXG5fZ2V0V2F0Y2hIZWxwZXJzKHBhdGgsIGRlcHRoKSB7XG4gIGNvbnN0IHdhdGNoUGF0aCA9IGRlcHRoIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlR2xvYmJpbmcgfHwgIWlzR2xvYihwYXRoKSA/IHBhdGggOiBnbG9iUGFyZW50KHBhdGgpO1xuICBjb25zdCBmb2xsb3cgPSB0aGlzLm9wdGlvbnMuZm9sbG93U3ltbGlua3M7XG5cbiAgcmV0dXJuIG5ldyBXYXRjaEhlbHBlcihwYXRoLCB3YXRjaFBhdGgsIGZvbGxvdywgdGhpcyk7XG59XG5cbi8vIERpcmVjdG9yeSBoZWxwZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFByb3ZpZGVzIGRpcmVjdG9yeSB0cmFja2luZyBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHBhdGggb2YgdGhlIGRpcmVjdG9yeVxuICogQHJldHVybnMge0RpckVudHJ5fSB0aGUgZGlyZWN0b3J5J3MgdHJhY2tpbmcgb2JqZWN0XG4gKi9cbl9nZXRXYXRjaGVkRGlyKGRpcmVjdG9yeSkge1xuICBpZiAoIXRoaXMuX2JvdW5kUmVtb3ZlKSB0aGlzLl9ib3VuZFJlbW92ZSA9IHRoaXMuX3JlbW92ZS5iaW5kKHRoaXMpO1xuICBjb25zdCBkaXIgPSBzeXNQYXRoLnJlc29sdmUoZGlyZWN0b3J5KTtcbiAgaWYgKCF0aGlzLl93YXRjaGVkLmhhcyhkaXIpKSB0aGlzLl93YXRjaGVkLnNldChkaXIsIG5ldyBEaXJFbnRyeShkaXIsIHRoaXMuX2JvdW5kUmVtb3ZlKSk7XG4gIHJldHVybiB0aGlzLl93YXRjaGVkLmdldChkaXIpO1xufVxuXG4vLyBGaWxlIGhlbHBlcnNcbi8vIC0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENoZWNrIGZvciByZWFkIHBlcm1pc3Npb25zLlxuICogQmFzZWQgb24gdGhpcyBhbnN3ZXIgb24gU086IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xMTc4MTQwNC8xMzU4NDA1XG4gKiBAcGFyYW0ge2ZzLlN0YXRzfSBzdGF0cyAtIG9iamVjdCwgcmVzdWx0IG9mIGZzX3N0YXRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZmlsZSBjYW4gYmUgcmVhZFxuKi9cbl9oYXNSZWFkUGVybWlzc2lvbnMoc3RhdHMpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVQZXJtaXNzaW9uRXJyb3JzKSByZXR1cm4gdHJ1ZTtcblxuICAvLyBzdGF0cy5tb2RlIG1heSBiZSBiaWdpbnRcbiAgY29uc3QgbWQgPSBzdGF0cyAmJiBOdW1iZXIucGFyc2VJbnQoc3RhdHMubW9kZSwgMTApO1xuICBjb25zdCBzdCA9IG1kICYgMG83Nzc7XG4gIGNvbnN0IGl0ID0gTnVtYmVyLnBhcnNlSW50KHN0LnRvU3RyaW5nKDgpWzBdLCAxMCk7XG4gIHJldHVybiBCb29sZWFuKDQgJiBpdCk7XG59XG5cbi8qKlxuICogSGFuZGxlcyBlbWl0dGluZyB1bmxpbmsgZXZlbnRzIGZvclxuICogZmlsZXMgYW5kIGRpcmVjdG9yaWVzLCBhbmQgdmlhIHJlY3Vyc2lvbiwgZm9yXG4gKiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2l0aGluIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHVubGlua2VkXG4gKiBAcGFyYW0ge1N0cmluZ30gZGlyZWN0b3J5IHdpdGhpbiB3aGljaCB0aGUgZm9sbG93aW5nIGl0ZW0gaXMgbG9jYXRlZFxuICogQHBhcmFtIHtTdHJpbmd9IGl0ZW0gICAgICBiYXNlIHBhdGggb2YgaXRlbS9kaXJlY3RvcnlcbiAqIEByZXR1cm5zIHt2b2lkfVxuKi9cbl9yZW1vdmUoZGlyZWN0b3J5LCBpdGVtLCBpc0RpcmVjdG9yeSkge1xuICAvLyBpZiB3aGF0IGlzIGJlaW5nIGRlbGV0ZWQgaXMgYSBkaXJlY3RvcnksIGdldCB0aGF0IGRpcmVjdG9yeSdzIHBhdGhzXG4gIC8vIGZvciByZWN1cnNpdmUgZGVsZXRpbmcgYW5kIGNsZWFuaW5nIG9mIHdhdGNoZWQgb2JqZWN0XG4gIC8vIGlmIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSwgbmVzdGVkRGlyZWN0b3J5Q2hpbGRyZW4gd2lsbCBiZSBlbXB0eSBhcnJheVxuICBjb25zdCBwYXRoID0gc3lzUGF0aC5qb2luKGRpcmVjdG9yeSwgaXRlbSk7XG4gIGNvbnN0IGZ1bGxQYXRoID0gc3lzUGF0aC5yZXNvbHZlKHBhdGgpO1xuICBpc0RpcmVjdG9yeSA9IGlzRGlyZWN0b3J5ICE9IG51bGxcbiAgICA/IGlzRGlyZWN0b3J5XG4gICAgOiB0aGlzLl93YXRjaGVkLmhhcyhwYXRoKSB8fCB0aGlzLl93YXRjaGVkLmhhcyhmdWxsUGF0aCk7XG5cbiAgLy8gcHJldmVudCBkdXBsaWNhdGUgaGFuZGxpbmcgaW4gY2FzZSBvZiBhcnJpdmluZyBoZXJlIG5lYXJseSBzaW11bHRhbmVvdXNseVxuICAvLyB2aWEgbXVsdGlwbGUgcGF0aHMgKHN1Y2ggYXMgX2hhbmRsZUZpbGUgYW5kIF9oYW5kbGVEaXIpXG4gIGlmICghdGhpcy5fdGhyb3R0bGUoJ3JlbW92ZScsIHBhdGgsIDEwMCkpIHJldHVybjtcblxuICAvLyBpZiB0aGUgb25seSB3YXRjaGVkIGZpbGUgaXMgcmVtb3ZlZCwgd2F0Y2ggZm9yIGl0cyByZXR1cm5cbiAgaWYgKCFpc0RpcmVjdG9yeSAmJiAhdGhpcy5vcHRpb25zLnVzZUZzRXZlbnRzICYmIHRoaXMuX3dhdGNoZWQuc2l6ZSA9PT0gMSkge1xuICAgIHRoaXMuYWRkKGRpcmVjdG9yeSwgaXRlbSwgdHJ1ZSk7XG4gIH1cblxuICAvLyBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IGVudHJ5IGluIHRoZSB3YXRjaGVkIG9iamVjdCBpbiBlaXRoZXIgY2FzZVxuICAvLyBzbyB3ZSBnb3QgdG8gZG8gdGhlIGRpcmVjdG9yeSBjaGVjayBiZWZvcmVoYW5kXG4gIGNvbnN0IHdwID0gdGhpcy5fZ2V0V2F0Y2hlZERpcihwYXRoKTtcbiAgY29uc3QgbmVzdGVkRGlyZWN0b3J5Q2hpbGRyZW4gPSB3cC5nZXRDaGlsZHJlbigpO1xuXG4gIC8vIFJlY3Vyc2l2ZWx5IHJlbW92ZSBjaGlsZHJlbiBkaXJlY3RvcmllcyAvIGZpbGVzLlxuICBuZXN0ZWREaXJlY3RvcnlDaGlsZHJlbi5mb3JFYWNoKG5lc3RlZCA9PiB0aGlzLl9yZW1vdmUocGF0aCwgbmVzdGVkKSk7XG5cbiAgLy8gQ2hlY2sgaWYgaXRlbSB3YXMgb24gdGhlIHdhdGNoZWQgbGlzdCBhbmQgcmVtb3ZlIGl0XG4gIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFdhdGNoZWREaXIoZGlyZWN0b3J5KTtcbiAgY29uc3Qgd2FzVHJhY2tlZCA9IHBhcmVudC5oYXMoaXRlbSk7XG4gIHBhcmVudC5yZW1vdmUoaXRlbSk7XG5cbiAgLy8gRml4ZXMgaXNzdWUgIzEwNDIgLT4gUmVsYXRpdmUgcGF0aHMgd2VyZSBkZXRlY3RlZCBhbmQgYWRkZWQgYXMgc3ltbGlua3NcbiAgLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvY2hva2lkYXIvYmxvYi9lMTc1M2RkYmM5NTcxYmRjMzNiNGE0YWYxNzJkNTJjYjZlNjExYzEwL2xpYi9ub2RlZnMtaGFuZGxlci5qcyNMNjEyKSxcbiAgLy8gYnV0IG5ldmVyIHJlbW92ZWQgZnJvbSB0aGUgbWFwIGluIGNhc2UgdGhlIHBhdGggd2FzIGRlbGV0ZWQuXG4gIC8vIFRoaXMgbGVhZHMgdG8gYW4gaW5jb3JyZWN0IHN0YXRlIGlmIHRoZSBwYXRoIHdhcyByZWNyZWF0ZWQ6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvY2hva2lkYXIvYmxvYi9lMTc1M2RkYmM5NTcxYmRjMzNiNGE0YWYxNzJkNTJjYjZlNjExYzEwL2xpYi9ub2RlZnMtaGFuZGxlci5qcyNMNTUzXG4gIGlmICh0aGlzLl9zeW1saW5rUGF0aHMuaGFzKGZ1bGxQYXRoKSkge1xuICAgIHRoaXMuX3N5bWxpbmtQYXRocy5kZWxldGUoZnVsbFBhdGgpO1xuICB9XG5cbiAgLy8gSWYgd2Ugd2FpdCBmb3IgdGhpcyBmaWxlIHRvIGJlIGZ1bGx5IHdyaXR0ZW4sIGNhbmNlbCB0aGUgd2FpdC5cbiAgbGV0IHJlbFBhdGggPSBwYXRoO1xuICBpZiAodGhpcy5vcHRpb25zLmN3ZCkgcmVsUGF0aCA9IHN5c1BhdGgucmVsYXRpdmUodGhpcy5vcHRpb25zLmN3ZCwgcGF0aCk7XG4gIGlmICh0aGlzLm9wdGlvbnMuYXdhaXRXcml0ZUZpbmlzaCAmJiB0aGlzLl9wZW5kaW5nV3JpdGVzLmhhcyhyZWxQYXRoKSkge1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fcGVuZGluZ1dyaXRlcy5nZXQocmVsUGF0aCkuY2FuY2VsV2FpdCgpO1xuICAgIGlmIChldmVudCA9PT0gRVZfQUREKSByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgRW50cnkgd2lsbCBlaXRoZXIgYmUgYSBkaXJlY3RvcnkgdGhhdCBqdXN0IGdvdCByZW1vdmVkXG4gIC8vIG9yIGEgYm9ndXMgZW50cnkgdG8gYSBmaWxlLCBpbiBlaXRoZXIgY2FzZSB3ZSBoYXZlIHRvIHJlbW92ZSBpdFxuICB0aGlzLl93YXRjaGVkLmRlbGV0ZShwYXRoKTtcbiAgdGhpcy5fd2F0Y2hlZC5kZWxldGUoZnVsbFBhdGgpO1xuICBjb25zdCBldmVudE5hbWUgPSBpc0RpcmVjdG9yeSA/IEVWX1VOTElOS19ESVIgOiBFVl9VTkxJTks7XG4gIGlmICh3YXNUcmFja2VkICYmICF0aGlzLl9pc0lnbm9yZWQocGF0aCkpIHRoaXMuX2VtaXQoZXZlbnROYW1lLCBwYXRoKTtcblxuICAvLyBBdm9pZCBjb25mbGljdHMgaWYgd2UgbGF0ZXIgY3JlYXRlIGFub3RoZXIgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWVcbiAgaWYgKCF0aGlzLm9wdGlvbnMudXNlRnNFdmVudHMpIHtcbiAgICB0aGlzLl9jbG9zZVBhdGgocGF0aCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDbG9zZXMgYWxsIHdhdGNoZXJzIGZvciBhIHBhdGhcbiAqIEBwYXJhbSB7UGF0aH0gcGF0aFxuICovXG5fY2xvc2VQYXRoKHBhdGgpIHtcbiAgdGhpcy5fY2xvc2VGaWxlKHBhdGgpXG4gIGNvbnN0IGRpciA9IHN5c1BhdGguZGlybmFtZShwYXRoKTtcbiAgdGhpcy5fZ2V0V2F0Y2hlZERpcihkaXIpLnJlbW92ZShzeXNQYXRoLmJhc2VuYW1lKHBhdGgpKTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgb25seSBmaWxlLXNwZWNpZmljIHdhdGNoZXJzXG4gKiBAcGFyYW0ge1BhdGh9IHBhdGhcbiAqL1xuX2Nsb3NlRmlsZShwYXRoKSB7XG4gIGNvbnN0IGNsb3NlcnMgPSB0aGlzLl9jbG9zZXJzLmdldChwYXRoKTtcbiAgaWYgKCFjbG9zZXJzKSByZXR1cm47XG4gIGNsb3NlcnMuZm9yRWFjaChjbG9zZXIgPT4gY2xvc2VyKCkpO1xuICB0aGlzLl9jbG9zZXJzLmRlbGV0ZShwYXRoKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtQYXRofSBwYXRoXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjbG9zZXJcbiAqL1xuX2FkZFBhdGhDbG9zZXIocGF0aCwgY2xvc2VyKSB7XG4gIGlmICghY2xvc2VyKSByZXR1cm47XG4gIGxldCBsaXN0ID0gdGhpcy5fY2xvc2Vycy5nZXQocGF0aCk7XG4gIGlmICghbGlzdCkge1xuICAgIGxpc3QgPSBbXTtcbiAgICB0aGlzLl9jbG9zZXJzLnNldChwYXRoLCBsaXN0KTtcbiAgfVxuICBsaXN0LnB1c2goY2xvc2VyKTtcbn1cblxuX3JlYWRkaXJwKHJvb3QsIG9wdHMpIHtcbiAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gIGNvbnN0IG9wdGlvbnMgPSB7dHlwZTogRVZfQUxMLCBhbHdheXNTdGF0OiB0cnVlLCBsc3RhdDogdHJ1ZSwgLi4ub3B0c307XG4gIGxldCBzdHJlYW0gPSByZWFkZGlycChyb290LCBvcHRpb25zKTtcbiAgdGhpcy5fc3RyZWFtcy5hZGQoc3RyZWFtKTtcbiAgc3RyZWFtLm9uY2UoU1RSX0NMT1NFLCAoKSA9PiB7XG4gICAgc3RyZWFtID0gdW5kZWZpbmVkO1xuICB9KTtcbiAgc3RyZWFtLm9uY2UoU1RSX0VORCwgKCkgPT4ge1xuICAgIGlmIChzdHJlYW0pIHtcbiAgICAgIHRoaXMuX3N0cmVhbXMuZGVsZXRlKHN0cmVhbSk7XG4gICAgICBzdHJlYW0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN0cmVhbTtcbn1cblxufVxuXG4vLyBFeHBvcnQgRlNXYXRjaGVyIGNsYXNzXG5leHBvcnRzLkZTV2F0Y2hlciA9IEZTV2F0Y2hlcjtcblxuLyoqXG4gKiBJbnN0YW50aWF0ZXMgd2F0Y2hlciB3aXRoIHBhdGhzIHRvIGJlIHRyYWNrZWQuXG4gKiBAcGFyYW0ge1N0cmluZ3xBcnJheTxTdHJpbmc+fSBwYXRocyBmaWxlL2RpcmVjdG9yeSBwYXRocyBhbmQvb3IgZ2xvYnNcbiAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyBjaG9raWRhciBvcHRzXG4gKiBAcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBGU1dhdGNoZXIgZm9yIGNoYWluaW5nLlxuICovXG5jb25zdCB3YXRjaCA9IChwYXRocywgb3B0aW9ucykgPT4ge1xuICBjb25zdCB3YXRjaGVyID0gbmV3IEZTV2F0Y2hlcihvcHRpb25zKTtcbiAgd2F0Y2hlci5hZGQocGF0aHMpO1xuICByZXR1cm4gd2F0Y2hlcjtcbn07XG5cbmV4cG9ydHMud2F0Y2ggPSB3YXRjaDtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO1xuZXhwb3J0cy5pbmRleE9mID0gaW5kZXhPZjtcbmV4cG9ydHMuZXNjYXBlRXhwcmVzc2lvbiA9IGVzY2FwZUV4cHJlc3Npb247XG5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuZXhwb3J0cy5jcmVhdGVGcmFtZSA9IGNyZWF0ZUZyYW1lO1xuZXhwb3J0cy5ibG9ja1BhcmFtcyA9IGJsb2NrUGFyYW1zO1xuZXhwb3J0cy5hcHBlbmRDb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoO1xudmFyIGVzY2FwZSA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjeDI3OycsXG4gICdgJzogJyYjeDYwOycsXG4gICc9JzogJyYjeDNEOydcbn07XG5cbnZhciBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKG9iaiAvKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0cy50b1N0cmluZyA9IHRvU3RyaW5nO1xuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59O1xuLy8gZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zIG9mIENocm9tZSBhbmQgU2FmYXJpXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGlzRnVuY3Rpb24oL3gvKSkge1xuICBleHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbi8qIGVzbGludC1lbmFibGUgZnVuYy1zdHlsZSAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cblxuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICB2YXIgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDNWMGFXeHpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3UVVGQlFTeEpRVUZOTEUxQlFVMHNSMEZCUnp0QlFVTmlMRXRCUVVjc1JVRkJSU3hQUVVGUE8wRkJRMW9zUzBGQlJ5eEZRVUZGTEUxQlFVMDdRVUZEV0N4TFFVRkhMRVZCUVVVc1RVRkJUVHRCUVVOWUxFdEJRVWNzUlVGQlJTeFJRVUZSTzBGQlEySXNTMEZCUnl4RlFVRkZMRkZCUVZFN1FVRkRZaXhMUVVGSExFVkJRVVVzVVVGQlVUdEJRVU5pTEV0QlFVY3NSVUZCUlN4UlFVRlJPME5CUTJRc1EwRkJRenM3UVVGRlJpeEpRVUZOTEZGQlFWRXNSMEZCUnl4WlFVRlpPMGxCUXpOQ0xGRkJRVkVzUjBGQlJ5eFhRVUZYTEVOQlFVTTdPMEZCUlhwQ0xGTkJRVk1zVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTjJRaXhUUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0RFFVTndRanM3UVVGRlRTeFRRVUZUTEUxQlFVMHNRMEZCUXl4SFFVRkhMRzlDUVVGdlFqdEJRVU0xUXl4UFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU42UXl4VFFVRkxMRWxCUVVrc1IwRkJSeXhKUVVGSkxGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0QlFVTTFRaXhWUVVGSkxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkRNMFFzVjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UFFVTTVRanRMUVVOR08wZEJRMFk3TzBGQlJVUXNVMEZCVHl4SFFVRkhMRU5CUVVNN1EwRkRXanM3UVVGRlRTeEpRVUZKTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF6czdPenM3TzBGQlMyaEVMRWxCUVVrc1ZVRkJWU3hIUVVGSExHOUNRVUZUTEV0QlFVc3NSVUZCUlR0QlFVTXZRaXhUUVVGUExFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVXNRMEZCUXp0RFFVTndReXhEUVVGRE96czdRVUZIUml4SlFVRkpMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU51UWl4VlFVOVBMRlZCUVZVc1IwRlFha0lzVlVGQlZTeEhRVUZITEZWQlFWTXNTMEZCU3l4RlFVRkZPMEZCUXpOQ0xGZEJRMFVzVDBGQlR5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVTXpRaXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRzFDUVVGdFFpeERRVU0xUXp0SFFVTklMRU5CUVVNN1EwRkRTRHRSUVVOUkxGVkJRVlVzUjBGQlZpeFZRVUZWT3pzN096dEJRVWxhTEVsQlFVMHNUMEZCVHl4SFFVTnNRaXhMUVVGTExFTkJRVU1zVDBGQlR5eEpRVU5pTEZWQlFWTXNTMEZCU3l4RlFVRkZPMEZCUTJRc1UwRkJUeXhMUVVGTExFbEJRVWtzVDBGQlR5eExRVUZMTEV0QlFVc3NVVUZCVVN4SFFVTnlReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMR2RDUVVGblFpeEhRVU42UXl4TFFVRkxMRU5CUVVNN1EwRkRXQ3hEUVVGRE96czdPenRCUVVkSExGTkJRVk1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVN1FVRkRjRU1zVDBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU5vUkN4UlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEVWQlFVVTdRVUZEZEVJc1lVRkJUeXhEUVVGRExFTkJRVU03UzBGRFZqdEhRVU5HTzBGQlEwUXNVMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenREUVVOWU96dEJRVVZOTEZOQlFWTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEzWkRMRTFCUVVrc1QwRkJUeXhOUVVGTkxFdEJRVXNzVVVGQlVTeEZRVUZGT3p0QlFVVTVRaXhSUVVGSkxFMUJRVTBzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUXpOQ0xHRkJRVThzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMHRCUTNoQ0xFMUJRVTBzU1VGQlNTeE5RVUZOTEVsQlFVa3NTVUZCU1N4RlFVRkZPMEZCUTNwQ0xHRkJRVThzUlVGQlJTeERRVUZETzB0QlExZ3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMnhDTEdGQlFVOHNUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJRenRMUVVOd1FqczdPenM3UVVGTFJDeFZRVUZOTEVkQlFVY3NSVUZCUlN4SFFVRkhMRTFCUVUwc1EwRkJRenRIUVVOMFFqczdRVUZGUkN4TlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0QlFVTXhRaXhYUVVGUExFMUJRVTBzUTBGQlF6dEhRVU5tTzBGQlEwUXNVMEZCVHl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0RFFVTTNRenM3UVVGRlRTeFRRVUZUTEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVN1FVRkROMElzVFVGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4TFFVRkxMRXRCUVVzc1EwRkJReXhGUVVGRk8wRkJRM3BDTEZkQlFVOHNTVUZCU1N4RFFVRkRPMGRCUTJJc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zUlVGQlJUdEJRVU12UXl4WFFVRlBMRWxCUVVrc1EwRkJRenRIUVVOaUxFMUJRVTA3UVVGRFRDeFhRVUZQTEV0QlFVc3NRMEZCUXp0SFFVTmtPME5CUTBZN08wRkJSVTBzVTBGQlV5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4RExFMUJRVWtzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGREwwSXNUMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRGRrSXNVMEZCVHl4TFFVRkxMRU5CUVVNN1EwRkRaRHM3UVVGRlRTeFRRVUZUTEZkQlFWY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRk8wRkJRM1pETEZGQlFVMHNRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJRMnhDTEZOQlFVOHNUVUZCVFN4RFFVRkRPME5CUTJZN08wRkJSVTBzVTBGQlV5eHBRa0ZCYVVJc1EwRkJReXhYUVVGWExFVkJRVVVzUlVGQlJTeEZRVUZGTzBGQlEycEVMRk5CUVU4c1EwRkJReXhYUVVGWExFZEJRVWNzVjBGQlZ5eEhRVUZITEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVFc1IwRkJTU3hGUVVGRkxFTkJRVU03UTBGRGNFUWlMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpqYjI1emRDQmxjMk5oY0dVZ1BTQjdYRzRnSUNjbUp6b2dKeVpoYlhBN0p5eGNiaUFnSnp3bk9pQW5KbXgwT3ljc1hHNGdJQ2MrSnpvZ0p5Wm5kRHNuTEZ4dUlDQW5YQ0luT2lBbkpuRjFiM1E3Snl4Y2JpQWdYQ0luWENJNklDY21JM2d5TnpzbkxGeHVJQ0FuWUNjNklDY21JM2cyTURzbkxGeHVJQ0FuUFNjNklDY21JM2d6UkRzblhHNTlPMXh1WEc1amIyNXpkQ0JpWVdSRGFHRnljeUE5SUM5YkpqdytYQ0luWUQxZEwyY3NYRzRnSUhCdmMzTnBZbXhsSUQwZ0wxc21QRDVjSWlkZ1BWMHZPMXh1WEc1bWRXNWpkR2x2YmlCbGMyTmhjR1ZEYUdGeUtHTm9jaWtnZTF4dUlDQnlaWFIxY200Z1pYTmpZWEJsVzJOb2NsMDdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbGVIUmxibVFvYjJKcUlDOHFJQ3dnTGk0dWMyOTFjbU5sSUNvdktTQjdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXhPeUJwSUR3Z1lYSm5kVzFsYm5SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhMlY1SUdsdUlHRnlaM1Z0Wlc1MGMxdHBYU2tnZTF4dUlDQWdJQ0FnYVdZZ0tFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGt1WTJGc2JDaGhjbWQxYldWdWRITmJhVjBzSUd0bGVTa3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcVcydGxlVjBnUFNCaGNtZDFiV1Z1ZEhOYmFWMWJhMlY1WFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVnh1WEc1bGVIQnZjblFnYkdWMElIUnZVM1J5YVc1bklEMGdUMkpxWldOMExuQnliM1J2ZEhsd1pTNTBiMU4wY21sdVp6dGNibHh1THk4Z1UyOTFjbU5sWkNCbWNtOXRJR3h2WkdGemFGeHVMeThnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJKbGMzUnBaV3B6TDJ4dlpHRnphQzlpYkc5aUwyMWhjM1JsY2k5TVNVTkZUbE5GTG5SNGRGeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdablZ1WXkxemRIbHNaU0FxTDF4dWJHVjBJR2x6Um5WdVkzUnBiMjRnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBblpuVnVZM1JwYjI0bk8xeHVmVHRjYmk4dklHWmhiR3hpWVdOcklHWnZjaUJ2YkdSbGNpQjJaWEp6YVc5dWN5QnZaaUJEYUhKdmJXVWdZVzVrSUZOaFptRnlhVnh1THlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUc1bGVIUWdLaTljYm1sbUlDaHBjMFoxYm1OMGFXOXVLQzk0THlrcElIdGNiaUFnYVhOR2RXNWpkR2x2YmlBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2hjYmlBZ0lDQWdJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmx4dUlDQWdJQ0FnZEc5VGRISnBibWN1WTJGc2JDaDJZV3gxWlNrZ1BUMDlJQ2RiYjJKcVpXTjBJRVoxYm1OMGFXOXVYU2RjYmlBZ0lDQXBPMXh1SUNCOU8xeHVmVnh1Wlhod2IzSjBJSHNnYVhOR2RXNWpkR2x2YmlCOU8xeHVMeW9nWlhOc2FXNTBMV1Z1WVdKc1pTQm1kVzVqTFhOMGVXeGxJQ292WEc1Y2JpOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOQmNuSmhlU0E5WEc0Z0lFRnljbUY1TG1selFYSnlZWGtnZkh4Y2JpQWdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnSUNCeVpYUjFjbTRnZG1Gc2RXVWdKaVlnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYjJKcVpXTjBKMXh1SUNBZ0lDQWdQeUIwYjFOMGNtbHVaeTVqWVd4c0tIWmhiSFZsS1NBOVBUMGdKMXR2WW1wbFkzUWdRWEp5WVhsZEoxeHVJQ0FnSUNBZ09pQm1ZV3h6WlR0Y2JpQWdmVHRjYmx4dUx5OGdUMnhrWlhJZ1NVVWdkbVZ5YzJsdmJuTWdaRzhnYm05MElHUnBjbVZqZEd4NUlITjFjSEJ2Y25RZ2FXNWtaWGhQWmlCemJ5QjNaU0J0ZFhOMElHbHRjR3hsYldWdWRDQnZkWElnYjNkdUxDQnpZV1JzZVM1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGJtUmxlRTltS0dGeWNtRjVMQ0IyWVd4MVpTa2dlMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdZWEp5WVhrdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvWVhKeVlYbGJhVjBnUFQwOUlIWmhiSFZsS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYVR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJQzB4TzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWE5qWVhCbFJYaHdjbVZ6YzJsdmJpaHpkSEpwYm1jcElIdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCemRISnBibWNnSVQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0x5OGdaRzl1SjNRZ1pYTmpZWEJsSUZOaFptVlRkSEpwYm1kekxDQnphVzVqWlNCMGFHVjVKM0psSUdGc2NtVmhaSGtnYzJGbVpWeHVJQ0FnSUdsbUlDaHpkSEpwYm1jZ0ppWWdjM1J5YVc1bkxuUnZTRlJOVENrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaeTUwYjBoVVRVd29LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSE4wY21sdVp5QTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0p5YzdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hjM1J5YVc1bktTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MzUnlhVzVuSUNzZ0p5YzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdSbTl5WTJVZ1lTQnpkSEpwYm1jZ1kyOXVkbVZ5YzJsdmJpQmhjeUIwYUdseklIZHBiR3dnWW1VZ1pHOXVaU0JpZVNCMGFHVWdZWEJ3Wlc1a0lISmxaMkZ5Wkd4bGMzTWdZVzVrWEc0Z0lDQWdMeThnZEdobElISmxaMlY0SUhSbGMzUWdkMmxzYkNCa2J5QjBhR2x6SUhSeVlXNXpjR0Z5Wlc1MGJIa2dZbVZvYVc1a0lIUm9aU0J6WTJWdVpYTXNJR05oZFhOcGJtY2dhWE56ZFdWeklHbG1YRzRnSUNBZ0x5OGdZVzRnYjJKcVpXTjBKM01nZEc4Z2MzUnlhVzVuSUdoaGN5QmxjMk5oY0dWa0lHTm9ZWEpoWTNSbGNuTWdhVzRnYVhRdVhHNGdJQ0FnYzNSeWFXNW5JRDBnSnljZ0t5QnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQnBaaUFvSVhCdmMzTnBZbXhsTG5SbGMzUW9jM1J5YVc1bktTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCemRISnBibWM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSE4wY21sdVp5NXlaWEJzWVdObEtHSmhaRU5vWVhKekxDQmxjMk5oY0dWRGFHRnlLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHbHpSVzF3ZEhrb2RtRnNkV1VwSUh0Y2JpQWdhV1lnS0NGMllXeDFaU0FtSmlCMllXeDFaU0FoUFQwZ01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHbHpRWEp5WVhrb2RtRnNkV1VwSUNZbUlIWmhiSFZsTG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kzSmxZWFJsUm5KaGJXVW9iMkpxWldOMEtTQjdYRzRnSUd4bGRDQm1jbUZ0WlNBOUlHVjRkR1Z1WkNoN2ZTd2diMkpxWldOMEtUdGNiaUFnWm5KaGJXVXVYM0JoY21WdWRDQTlJRzlpYW1WamREdGNiaUFnY21WMGRYSnVJR1p5WVcxbE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWW14dlkydFFZWEpoYlhNb2NHRnlZVzF6TENCcFpITXBJSHRjYmlBZ2NHRnlZVzF6TG5CaGRHZ2dQU0JwWkhNN1hHNGdJSEpsZEhWeWJpQndZWEpoYlhNN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoY0hCbGJtUkRiMjUwWlhoMFVHRjBhQ2hqYjI1MFpYaDBVR0YwYUN3Z2FXUXBJSHRjYmlBZ2NtVjBkWEp1SUNoamIyNTBaWGgwVUdGMGFDQS9JR052Ym5SbGVIUlFZWFJvSUNzZ0p5NG5JRG9nSnljcElDc2dhV1E3WEc1OVhHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgZXJyb3JQcm9wcyA9IFsnZGVzY3JpcHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdlbmRMaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgdmFyIGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lID0gdW5kZWZpbmVkLFxuICAgICAgZW5kTGluZU51bWJlciA9IHVuZGVmaW5lZCxcbiAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZCxcbiAgICAgIGVuZENvbHVtbiA9IHVuZGVmaW5lZDtcblxuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGVuZExpbmVOdW1iZXIgPSBsb2MuZW5kLmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcbiAgICBlbmRDb2x1bW4gPSBsb2MuZW5kLmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgdmFyIHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChsb2MpIHtcbiAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgICB0aGlzLmVuZExpbmVOdW1iZXIgPSBlbmRMaW5lTnVtYmVyO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge1xuICAgICAgICAgIHZhbHVlOiBjb2x1bW4sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmRDb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGVuZENvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gRXhjZXB0aW9uO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyVjRZMlZ3ZEdsdmJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3UVVGQlFTeEpRVUZOTEZWQlFWVXNSMEZCUnl4RFFVTnFRaXhoUVVGaExFVkJRMklzVlVGQlZTeEZRVU5XTEZsQlFWa3NSVUZEV2l4bFFVRmxMRVZCUTJZc1UwRkJVeXhGUVVOVUxFMUJRVTBzUlVGRFRpeFJRVUZSTEVWQlExSXNUMEZCVHl4RFFVTlNMRU5CUVVNN08wRkJSVVlzVTBGQlV5eFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1JVRkJSVHRCUVVOb1F5eE5RVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWM3VFVGRGVFSXNTVUZCU1N4WlFVRkJPMDFCUTBvc1lVRkJZU3haUVVGQk8wMUJRMklzVFVGQlRTeFpRVUZCTzAxQlEwNHNVMEZCVXl4WlFVRkJMRU5CUVVNN08wRkJSVm9zVFVGQlNTeEhRVUZITEVWQlFVVTdRVUZEVUN4UlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEZEVJc2FVSkJRV0VzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVNM1FpeFZRVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRE1VSXNZVUZCVXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZET3p0QlFVVXpRaXhYUVVGUExFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NSMEZCUnl4SFFVRkhMRWRCUVVjc1RVRkJUU3hEUVVGRE8wZEJRM2hET3p0QlFVVkVMRTFCUVVrc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdPenRCUVVjeFJDeFBRVUZMTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hIUVVGSExFZEJRVWNzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSVHRCUVVOb1JDeFJRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wZEJRemxET3pzN1FVRkhSQ3hOUVVGSkxFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSVHRCUVVNelFpeFRRVUZMTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMGRCUXpGRE96dEJRVVZFTEUxQlFVazdRVUZEUml4UlFVRkpMRWRCUVVjc1JVRkJSVHRCUVVOUUxGVkJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTNaQ0xGVkJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NZVUZCWVN4RFFVRkRPenM3TzBGQlNXNURMRlZCUVVrc1RVRkJUU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU42UWl4alFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVVTdRVUZEY0VNc1pVRkJTeXhGUVVGRkxFMUJRVTA3UVVGRFlpeHZRa0ZCVlN4RlFVRkZMRWxCUVVrN1UwRkRha0lzUTBGQlF5eERRVUZETzBGQlEwZ3NZMEZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzVjBGQlZ5eEZRVUZGTzBGQlEzWkRMR1ZCUVVzc1JVRkJSU3hUUVVGVE8wRkJRMmhDTEc5Q1FVRlZMRVZCUVVVc1NVRkJTVHRUUVVOcVFpeERRVUZETEVOQlFVTTdUMEZEU2l4TlFVRk5PMEZCUTB3c1dVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZEY2tJc1dVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eFRRVUZUTEVOQlFVTTdUMEZETlVJN1MwRkRSanRIUVVOR0xFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVTdPMGRCUldJN1EwRkRSanM3UVVGRlJDeFRRVUZUTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1MwRkJTeXhGUVVGRkxFTkJRVU03TzNGQ1FVVnVRaXhUUVVGVElpd2labWxzWlNJNkltVjRZMlZ3ZEdsdmJpNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1OdmJuTjBJR1Z5Y205eVVISnZjSE1nUFNCYlhHNGdJQ2RrWlhOamNtbHdkR2x2Ymljc1hHNGdJQ2RtYVd4bFRtRnRaU2NzWEc0Z0lDZHNhVzVsVG5WdFltVnlKeXhjYmlBZ0oyVnVaRXhwYm1WT2RXMWlaWEluTEZ4dUlDQW5iV1Z6YzJGblpTY3NYRzRnSUNkdVlXMWxKeXhjYmlBZ0oyNTFiV0psY2ljc1hHNGdJQ2R6ZEdGamF5ZGNibDA3WEc1Y2JtWjFibU4wYVc5dUlFVjRZMlZ3ZEdsdmJpaHRaWE56WVdkbExDQnViMlJsS1NCN1hHNGdJR3hsZENCc2IyTWdQU0J1YjJSbElDWW1JRzV2WkdVdWJHOWpMRnh1SUNBZ0lHeHBibVVzWEc0Z0lDQWdaVzVrVEdsdVpVNTFiV0psY2l4Y2JpQWdJQ0JqYjJ4MWJXNHNYRzRnSUNBZ1pXNWtRMjlzZFcxdU8xeHVYRzRnSUdsbUlDaHNiMk1wSUh0Y2JpQWdJQ0JzYVc1bElEMGdiRzlqTG5OMFlYSjBMbXhwYm1VN1hHNGdJQ0FnWlc1a1RHbHVaVTUxYldKbGNpQTlJR3h2WXk1bGJtUXViR2x1WlR0Y2JpQWdJQ0JqYjJ4MWJXNGdQU0JzYjJNdWMzUmhjblF1WTI5c2RXMXVPMXh1SUNBZ0lHVnVaRU52YkhWdGJpQTlJR3h2WXk1bGJtUXVZMjlzZFcxdU8xeHVYRzRnSUNBZ2JXVnpjMkZuWlNBclBTQW5JQzBnSnlBcklHeHBibVVnS3lBbk9pY2dLeUJqYjJ4MWJXNDdYRzRnSUgxY2JseHVJQ0JzWlhRZ2RHMXdJRDBnUlhKeWIzSXVjSEp2ZEc5MGVYQmxMbU52Ym5OMGNuVmpkRzl5TG1OaGJHd29kR2hwY3l3Z2JXVnpjMkZuWlNrN1hHNWNiaUFnTHk4Z1ZXNW1iM0owZFc1aGRHVnNlU0JsY25KdmNuTWdZWEpsSUc1dmRDQmxiblZ0WlhKaFlteGxJR2x1SUVOb2NtOXRaU0FvWVhRZ2JHVmhjM1FwTENCemJ5QmdabTl5SUhCeWIzQWdhVzRnZEcxd1lDQmtiMlZ6YmlkMElIZHZjbXN1WEc0Z0lHWnZjaUFvYkdWMElHbGtlQ0E5SURBN0lHbGtlQ0E4SUdWeWNtOXlVSEp2Y0hNdWJHVnVaM1JvT3lCcFpIZ3JLeWtnZTF4dUlDQWdJSFJvYVhOYlpYSnliM0pRY205d2MxdHBaSGhkWFNBOUlIUnRjRnRsY25KdmNsQnliM0J6VzJsa2VGMWRPMXh1SUNCOVhHNWNiaUFnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUdWc2MyVWdLaTljYmlBZ2FXWWdLRVZ5Y205eUxtTmhjSFIxY21WVGRHRmphMVJ5WVdObEtTQjdYRzRnSUNBZ1JYSnliM0l1WTJGd2RIVnlaVk4wWVdOclZISmhZMlVvZEdocGN5d2dSWGhqWlhCMGFXOXVLVHRjYmlBZ2ZWeHVYRzRnSUhSeWVTQjdYRzRnSUNBZ2FXWWdLR3h2WXlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVzYVc1bFRuVnRZbVZ5SUQwZ2JHbHVaVHRjYmlBZ0lDQWdJSFJvYVhNdVpXNWtUR2x1WlU1MWJXSmxjaUE5SUdWdVpFeHBibVZPZFcxaVpYSTdYRzVjYmlBZ0lDQWdJQzh2SUZkdmNtc2dZWEp2ZFc1a0lHbHpjM1ZsSUhWdVpHVnlJSE5oWm1GeWFTQjNhR1Z5WlNCM1pTQmpZVzRuZENCa2FYSmxZM1JzZVNCelpYUWdkR2hsSUdOdmJIVnRiaUIyWVd4MVpWeHVJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnS2k5Y2JpQWdJQ0FnSUdsbUlDaFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtwSUh0Y2JpQWdJQ0FnSUNBZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSFJvYVhNc0lDZGpiMngxYlc0bkxDQjdYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJR052YkhWdGJpeGNiaUFnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCMGNuVmxYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z0oyVnVaRU52YkhWdGJpY3NJSHRjYmlBZ0lDQWdJQ0FnSUNCMllXeDFaVG9nWlc1a1EyOXNkVzF1TEZ4dUlDQWdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJSFJ5ZFdWY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OdmJIVnRiaUE5SUdOdmJIVnRianRjYmlBZ0lDQWdJQ0FnZEdocGN5NWxibVJEYjJ4MWJXNGdQU0JsYm1SRGIyeDFiVzQ3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUlHTmhkR05vSUNodWIzQXBJSHRjYmlBZ0lDQXZLaUJKWjI1dmNtVWdhV1lnZEdobElHSnliM2R6WlhJZ2FYTWdkbVZ5ZVNCd1lYSjBhV04xYkdGeUlDb3ZYRzRnSUgxY2JuMWNibHh1UlhoalpYQjBhVzl1TG5CeWIzUnZkSGx3WlNBOUlHNWxkeUJGY25KdmNpZ3BPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JGZUdObGNIUnBiMjQ3WEc0aVhYMD1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24gKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgICAgZm4gPSBvcHRpb25zLmZuO1xuXG4gICAgaWYgKGNvbnRleHQgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBmbih0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGNvbnRleHQgPT09IGZhbHNlIHx8IGNvbnRleHQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIGlmIChfdXRpbHMuaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIHZhciBkYXRhID0gX3V0aWxzLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBfdXRpbHMuYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICBvcHRpb25zID0geyBkYXRhOiBkYXRhIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZZbXh2WTJzdGFHVnNjR1Z5TFcxcGMzTnBibWN1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096dHhRa0ZCZDBRc1ZVRkJWVHM3Y1VKQlJXNUVMRlZCUVZNc1VVRkJVU3hGUVVGRk8wRkJRMmhETEZWQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVXNWVUZCVXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRk8wRkJRM1pGTEZGQlFVa3NUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhQUVVGUE8xRkJRek5DTEVWQlFVVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRE96dEJRVVZzUWl4UlFVRkpMRTlCUVU4c1MwRkJTeXhKUVVGSkxFVkJRVVU3UVVGRGNFSXNZVUZCVHl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGFrSXNUVUZCVFN4SlFVRkpMRTlCUVU4c1MwRkJTeXhMUVVGTExFbEJRVWtzVDBGQlR5eEpRVUZKTEVsQlFVa3NSVUZCUlR0QlFVTXZReXhoUVVGUExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTjBRaXhOUVVGTkxFbEJRVWtzWlVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTXpRaXhWUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMEZCUTNSQ0xGbEJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTm1MR2xDUVVGUExFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xTkJRemxDT3p0QlFVVkVMR1ZCUVU4c1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wOUJRMmhFTEUxQlFVMDdRVUZEVEN4bFFVRlBMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFBRVU4wUWp0TFFVTkdMRTFCUVUwN1FVRkRUQ3hWUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTEVsQlFVa3NUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVNdlFpeFpRVUZKTEVsQlFVa3NSMEZCUnl4dFFrRkJXU3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEY2tNc1dVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eDVRa0ZEYWtJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlEzaENMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRMklzUTBGQlF6dEJRVU5HTEdWQlFVOHNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF6dFBRVU14UWpzN1FVRkZSQ3hoUVVGUExFVkJRVVVzUTBGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1MwRkROMEk3UjBGRFJpeERRVUZETEVOQlFVTTdRMEZEU2lJc0ltWnBiR1VpT2lKaWJHOWpheTFvWld4d1pYSXRiV2x6YzJsdVp5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUdGd2NHVnVaRU52Ym5SbGVIUlFZWFJvTENCamNtVmhkR1ZHY21GdFpTd2dhWE5CY25KaGVTQjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJKc2IyTnJTR1ZzY0dWeVRXbHpjMmx1Wnljc0lHWjFibU4wYVc5dUtHTnZiblJsZUhRc0lHOXdkR2x2Ym5NcElIdGNiaUFnSUNCc1pYUWdhVzUyWlhKelpTQTlJRzl3ZEdsdmJuTXVhVzUyWlhKelpTeGNiaUFnSUNBZ0lHWnVJRDBnYjNCMGFXOXVjeTVtYmp0Y2JseHVJQ0FnSUdsbUlDaGpiMjUwWlhoMElEMDlQU0IwY25WbEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z1ptNG9kR2hwY3lrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoamIyNTBaWGgwSUQwOVBTQm1ZV3h6WlNCOGZDQmpiMjUwWlhoMElEMDlJRzUxYkd3cElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCcGJuWmxjbk5sS0hSb2FYTXBPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9hWE5CY25KaGVTaGpiMjUwWlhoMEtTa2dlMXh1SUNBZ0lDQWdhV1lnS0dOdmJuUmxlSFF1YkdWdVozUm9JRDRnTUNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvYjNCMGFXOXVjeTVwWkhNcElIdGNiaUFnSUNBZ0lDQWdJQ0J2Y0hScGIyNXpMbWxrY3lBOUlGdHZjSFJwYjI1ekxtNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHbHVjM1JoYm1ObExtaGxiSEJsY25NdVpXRmphQ2hqYjI1MFpYaDBMQ0J2Y0hScGIyNXpLVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnBiblpsY25ObEtIUm9hWE1wTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnBaaUFvYjNCMGFXOXVjeTVrWVhSaElDWW1JRzl3ZEdsdmJuTXVhV1J6S1NCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JrWVhSaElEMGdZM0psWVhSbFJuSmhiV1VvYjNCMGFXOXVjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdaR0YwWVM1amIyNTBaWGgwVUdGMGFDQTlJR0Z3Y0dWdVpFTnZiblJsZUhSUVlYUm9LRnh1SUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk11WkdGMFlTNWpiMjUwWlhoMFVHRjBhQ3hjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6TG01aGJXVmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnYjNCMGFXOXVjeUE5SUhzZ1pHRjBZVG9nWkdGMFlTQjlPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabTRvWTI5dWRHVjRkQ3dnYjNCMGFXOXVjeWs3WEc0Z0lDQWdmVnh1SUNCOUtUdGNibjFjYmlKZGZRPT1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uIChjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnTXVzdCBwYXNzIGl0ZXJhdG9yIHRvICNlYWNoJyk7XG4gICAgfVxuXG4gICAgdmFyIGZuID0gb3B0aW9ucy5mbixcbiAgICAgICAgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIHJldCA9ICcnLFxuICAgICAgICBkYXRhID0gdW5kZWZpbmVkLFxuICAgICAgICBjb250ZXh0UGF0aCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID0gX3V0aWxzLmFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChfdXRpbHMuaXNGdW5jdGlvbihjb250ZXh0KSkge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhKSB7XG4gICAgICBkYXRhID0gX3V0aWxzLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID0gcmV0ICsgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXM6IF91dGlscy5ibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoX3V0aWxzLmlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgaW4gY29udGV4dCkge1xuICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChnbG9iYWwuU3ltYm9sICYmIGNvbnRleHRbZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gY29udGV4dFtnbG9iYWwuU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKHZhciBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yICh2YXIgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBwcmlvcktleSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIE9iamVjdC5rZXlzKGNvbnRleHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgICAvLyB0aGUgbGFzdCBpdGVyYXRpb24gd2l0aG91dCBoYXZlIHRvIHNjYW4gdGhlIG9iamVjdCB0d2ljZSBhbmQgY3JlYXRlXG4gICAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxLCB0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyaGxiSEJsY25NdlpXRmphQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPM0ZDUVUxUExGVkJRVlU3TzNsQ1FVTkxMR05CUVdNN096czdjVUpCUlhKQ0xGVkJRVk1zVVVGQlVTeEZRVUZGTzBGQlEyaERMRlZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHRCUVVONlJDeFJRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTFvc1dVRkJUU3d5UWtGQll5dzJRa0ZCTmtJc1EwRkJReXhEUVVGRE8wdEJRM0JFT3p0QlFVVkVMRkZCUVVrc1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eEZRVUZGTzFGQlEycENMRTlCUVU4c1IwRkJSeXhQUVVGUExFTkJRVU1zVDBGQlR6dFJRVU42UWl4RFFVRkRMRWRCUVVjc1EwRkJRenRSUVVOTUxFZEJRVWNzUjBGQlJ5eEZRVUZGTzFGQlExSXNTVUZCU1N4WlFVRkJPMUZCUTBvc1YwRkJWeXhaUVVGQkxFTkJRVU03TzBGQlJXUXNVVUZCU1N4UFFVRlBMRU5CUVVNc1NVRkJTU3hKUVVGSkxFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVTdRVUZETDBJc2FVSkJRVmNzUjBGRFZDeDVRa0ZCYTBJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXp0TFFVTnlSVHM3UVVGRlJDeFJRVUZKTEd0Q1FVRlhMRTlCUVU4c1EwRkJReXhGUVVGRk8wRkJRM1pDTEdGQlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlF6bENPenRCUVVWRUxGRkJRVWtzVDBGQlR5eERRVUZETEVsQlFVa3NSVUZCUlR0QlFVTm9RaXhWUVVGSkxFZEJRVWNzYlVKQlFWa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRMnhET3p0QlFVVkVMR0ZCUVZNc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNTVUZCU1N4RlFVRkZPMEZCUTNwRExGVkJRVWtzU1VGQlNTeEZRVUZGTzBGQlExSXNXVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGFrSXNXVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGJrSXNXVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlEzcENMRmxCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXpzN1FVRkZia0lzV1VGQlNTeFhRVUZYTEVWQlFVVTdRVUZEWml4alFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTTdVMEZEZUVNN1QwRkRSanM3UVVGRlJDeFRRVUZITEVkQlEwUXNSMEZCUnl4SFFVTklMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdRVUZEYWtJc1dVRkJTU3hGUVVGRkxFbEJRVWs3UVVGRFZpeHRRa0ZCVnl4RlFVRkZMRzFDUVVOWUxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhGUVVOMlFpeERRVUZETEZkQlFWY3NSMEZCUnl4TFFVRkxMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRelZDTzA5QlEwWXNRMEZCUXl4RFFVRkRPMHRCUTA0N08wRkJSVVFzVVVGQlNTeFBRVUZQTEVsQlFVa3NUMEZCVHl4UFFVRlBMRXRCUVVzc1VVRkJVU3hGUVVGRk8wRkJRekZETEZWQlFVa3NaVUZCVVN4UFFVRlBMRU5CUVVNc1JVRkJSVHRCUVVOd1FpeGhRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMlF5eGpRVUZKTEVOQlFVTXNTVUZCU1N4UFFVRlBMRVZCUVVVN1FVRkRhRUlzZVVKQlFXRXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xZEJReTlETzFOQlEwWTdUMEZEUml4TlFVRk5MRWxCUVVrc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFTkJRVU1zUlVGQlJUdEJRVU16UkN4WlFVRk5MRlZCUVZVc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGRFSXNXVUZCVFN4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRVZCUVVVc1EwRkJRenRCUVVOdVJDeGhRVUZMTEVsQlFVa3NSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSU3hIUVVGSExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlR0QlFVTTNSQ3h2UWtGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VTBGRE0wSTdRVUZEUkN4bFFVRlBMRWRCUVVjc1ZVRkJWU3hEUVVGRE8wRkJRM0pDTEdGQlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRM1pETEhWQ1FVRmhMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NUMEZCVHl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU12UXp0UFFVTkdMRTFCUVUwN08wRkJRMHdzWTBGQlNTeFJRVUZSTEZsQlFVRXNRMEZCUXpzN1FVRkZZaXhuUWtGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVlVGQlFTeEhRVUZITEVWQlFVazdPenM3UVVGSmJFTXNaMEpCUVVrc1VVRkJVU3hMUVVGTExGTkJRVk1zUlVGQlJUdEJRVU14UWl3eVFrRkJZU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkRhRU03UVVGRFJDeHZRa0ZCVVN4SFFVRkhMRWRCUVVjc1EwRkJRenRCUVVObUxHRkJRVU1zUlVGQlJTeERRVUZETzFkQlEwd3NRMEZCUXl4RFFVRkRPMEZCUTBnc1kwRkJTU3hSUVVGUkxFdEJRVXNzVTBGQlV5eEZRVUZGTzBGQlF6RkNMSGxDUVVGaExFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03VjBGRGRFTTdPMDlCUTBZN1MwRkRSanM3UVVGRlJDeFJRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN1FVRkRXQ3hUUVVGSExFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUTNKQ096dEJRVVZFTEZkQlFVOHNSMEZCUnl4RFFVRkRPMGRCUTFvc1EwRkJReXhEUVVGRE8wTkJRMG9pTENKbWFXeGxJam9pWldGamFDNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3WEc0Z0lHRndjR1Z1WkVOdmJuUmxlSFJRWVhSb0xGeHVJQ0JpYkc5amExQmhjbUZ0Y3l4Y2JpQWdZM0psWVhSbFJuSmhiV1VzWEc0Z0lHbHpRWEp5WVhrc1hHNGdJR2x6Um5WdVkzUnBiMjVjYm4wZ1puSnZiU0FuTGk0dmRYUnBiSE1uTzF4dWFXMXdiM0owSUVWNFkyVndkR2x2YmlCbWNtOXRJQ2N1TGk5bGVHTmxjSFJwYjI0bk8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpaHBibk4wWVc1alpTa2dlMXh1SUNCcGJuTjBZVzVqWlM1eVpXZHBjM1JsY2tobGJIQmxjaWduWldGamFDY3NJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnBaaUFvSVc5d2RHbHZibk1wSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b0owMTFjM1FnY0dGemN5QnBkR1Z5WVhSdmNpQjBieUFqWldGamFDY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JtYmlBOUlHOXdkR2x2Ym5NdVptNHNYRzRnSUNBZ0lDQnBiblpsY25ObElEMGdiM0IwYVc5dWN5NXBiblpsY25ObExGeHVJQ0FnSUNBZ2FTQTlJREFzWEc0Z0lDQWdJQ0J5WlhRZ1BTQW5KeXhjYmlBZ0lDQWdJR1JoZEdFc1hHNGdJQ0FnSUNCamIyNTBaWGgwVUdGMGFEdGNibHh1SUNBZ0lHbG1JQ2h2Y0hScGIyNXpMbVJoZEdFZ0ppWWdiM0IwYVc5dWN5NXBaSE1wSUh0Y2JpQWdJQ0FnSUdOdmJuUmxlSFJRWVhSb0lEMWNiaUFnSUNBZ0lDQWdZWEJ3Wlc1a1EyOXVkR1Y0ZEZCaGRHZ29iM0IwYVc5dWN5NWtZWFJoTG1OdmJuUmxlSFJRWVhSb0xDQnZjSFJwYjI1ekxtbGtjMXN3WFNrZ0t5QW5MaWM3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0dselJuVnVZM1JwYjI0b1kyOXVkR1Y0ZENrcElIdGNiaUFnSUNBZ0lHTnZiblJsZUhRZ1BTQmpiMjUwWlhoMExtTmhiR3dvZEdocGN5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVaR0YwWVNrZ2UxeHVJQ0FnSUNBZ1pHRjBZU0E5SUdOeVpXRjBaVVp5WVcxbEtHOXdkR2x2Ym5NdVpHRjBZU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdablZ1WTNScGIyNGdaWGhsWTBsMFpYSmhkR2x2YmlobWFXVnNaQ3dnYVc1a1pYZ3NJR3hoYzNRcElIdGNiaUFnSUNBZ0lHbG1JQ2hrWVhSaEtTQjdYRzRnSUNBZ0lDQWdJR1JoZEdFdWEyVjVJRDBnWm1sbGJHUTdYRzRnSUNBZ0lDQWdJR1JoZEdFdWFXNWtaWGdnUFNCcGJtUmxlRHRjYmlBZ0lDQWdJQ0FnWkdGMFlTNW1hWEp6ZENBOUlHbHVaR1Y0SUQwOVBTQXdPMXh1SUNBZ0lDQWdJQ0JrWVhSaExteGhjM1FnUFNBaElXeGhjM1E3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR052Ym5SbGVIUlFZWFJvS1NCN1hHNGdJQ0FnSUNBZ0lDQWdaR0YwWVM1amIyNTBaWGgwVUdGMGFDQTlJR052Ym5SbGVIUlFZWFJvSUNzZ1ptbGxiR1E3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2NtVjBJRDFjYmlBZ0lDQWdJQ0FnY21WMElDdGNiaUFnSUNBZ0lDQWdabTRvWTI5dWRHVjRkRnRtYVdWc1pGMHNJSHRjYmlBZ0lDQWdJQ0FnSUNCa1lYUmhPaUJrWVhSaExGeHVJQ0FnSUNBZ0lDQWdJR0pzYjJOclVHRnlZVzF6T2lCaWJHOWphMUJoY21GdGN5aGNiaUFnSUNBZ0lDQWdJQ0FnSUZ0amIyNTBaWGgwVzJacFpXeGtYU3dnWm1sbGJHUmRMRnh1SUNBZ0lDQWdJQ0FnSUNBZ1cyTnZiblJsZUhSUVlYUm9JQ3NnWm1sbGJHUXNJRzUxYkd4ZFhHNGdJQ0FnSUNBZ0lDQWdLVnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb1kyOXVkR1Y0ZENBbUppQjBlWEJsYjJZZ1kyOXVkR1Y0ZENBOVBUMGdKMjlpYW1WamRDY3BJSHRjYmlBZ0lDQWdJR2xtSUNocGMwRnljbUY1S0dOdmJuUmxlSFFwS1NCN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0JqYjI1MFpYaDBMbXhsYm1kMGFEc2dhU0E4SUdvN0lHa3JLeWtnZTF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2hwSUdsdUlHTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWNFpXTkpkR1Z5WVhScGIyNG9hU3dnYVN3Z2FTQTlQVDBnWTI5dWRHVjRkQzVzWlc1bmRHZ2dMU0F4S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQnBaaUFvWjJ4dlltRnNMbE41YldKdmJDQW1KaUJqYjI1MFpYaDBXMmRzYjJKaGJDNVRlVzFpYjJ3dWFYUmxjbUYwYjNKZEtTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHNWxkME52Ym5SbGVIUWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVhSbGNtRjBiM0lnUFNCamIyNTBaWGgwVzJkc2IySmhiQzVUZVcxaWIyd3VhWFJsY21GMGIzSmRLQ2s3WEc0Z0lDQWdJQ0FnSUdadmNpQW9iR1YwSUdsMElEMGdhWFJsY21GMGIzSXVibVY0ZENncE95QWhhWFF1Wkc5dVpUc2dhWFFnUFNCcGRHVnlZWFJ2Y2k1dVpYaDBLQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQnVaWGREYjI1MFpYaDBMbkIxYzJnb2FYUXVkbUZzZFdVcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR052Ym5SbGVIUWdQU0J1WlhkRGIyNTBaWGgwTzF4dUlDQWdJQ0FnSUNCbWIzSWdLR3hsZENCcUlEMGdZMjl1ZEdWNGRDNXNaVzVuZEdnN0lHa2dQQ0JxT3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbGVHVmpTWFJsY21GMGFXOXVLR2tzSUdrc0lHa2dQVDA5SUdOdmJuUmxlSFF1YkdWdVozUm9JQzBnTVNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J3Y21sdmNrdGxlVHRjYmx4dUlDQWdJQ0FnSUNCUFltcGxZM1F1YTJWNWN5aGpiMjUwWlhoMEtTNW1iM0pGWVdOb0tHdGxlU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdMeThnVjJVbmNtVWdjblZ1Ym1sdVp5QjBhR1VnYVhSbGNtRjBhVzl1Y3lCdmJtVWdjM1JsY0NCdmRYUWdiMllnYzNsdVl5QnpieUIzWlNCallXNGdaR1YwWldOMFhHNGdJQ0FnSUNBZ0lDQWdMeThnZEdobElHeGhjM1FnYVhSbGNtRjBhVzl1SUhkcGRHaHZkWFFnYUdGMlpTQjBieUJ6WTJGdUlIUm9aU0J2WW1wbFkzUWdkSGRwWTJVZ1lXNWtJR055WldGMFpWeHVJQ0FnSUNBZ0lDQWdJQzh2SUdGdUlHbDBaWEp0WldScFlYUmxJR3RsZVhNZ1lYSnlZWGt1WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLSEJ5YVc5eVMyVjVJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdWNFpXTkpkR1Z5WVhScGIyNG9jSEpwYjNKTFpYa3NJR2tnTFNBeEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2NISnBiM0pMWlhrZ1BTQnJaWGs3WEc0Z0lDQWdJQ0FnSUNBZ2FTc3JPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJ5YVc5eVMyVjVJQ0U5UFNCMWJtUmxabWx1WldRcElIdGNiaUFnSUNBZ0lDQWdJQ0JsZUdWalNYUmxjbUYwYVc5dUtIQnlhVzl5UzJWNUxDQnBJQzBnTVN3Z2RISjFaU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2FTQTlQVDBnTUNrZ2UxeHVJQ0FnSUNBZ2NtVjBJRDBnYVc1MlpYSnpaU2gwYUdsektUdGNiaUFnSUNCOVhHNWNiaUFnSUNCeVpYUjFjbTRnY21WME8xeHVJQ0I5S1R0Y2JuMWNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4uL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbiAoKSAvKiBbYXJncywgXW9wdGlvbnMgKi97XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnTWlzc2luZyBoZWxwZXI6IFwiJyArIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0ubmFtZSArICdcIicpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyaGxiSEJsY25NdmFHVnNjR1Z5TFcxcGMzTnBibWN1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenQ1UWtGQmMwSXNZMEZCWXpzN096dHhRa0ZGY2tJc1ZVRkJVeXhSUVVGUkxFVkJRVVU3UVVGRGFFTXNWVUZCVVN4RFFVRkRMR05CUVdNc1EwRkJReXhsUVVGbExFVkJRVVVzYVVOQlFXZERPMEZCUTNaRkxGRkJRVWtzVTBGQlV5eERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRMRVZCUVVVN08wRkJSVEZDTEdGQlFVOHNVMEZCVXl4RFFVRkRPMHRCUTJ4Q0xFMUJRVTA3TzBGQlJVd3NXVUZCVFN3eVFrRkRTaXh0UWtGQmJVSXNSMEZCUnl4VFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVOcVJTeERRVUZETzB0QlEwZzdSMEZEUml4RFFVRkRMRU5CUVVNN1EwRkRTaUlzSW1acGJHVWlPaUpvWld4d1pYSXRiV2x6YzJsdVp5NXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0JGZUdObGNIUnBiMjRnWm5KdmJTQW5MaTR2WlhoalpYQjBhVzl1Snp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1puVnVZM1JwYjI0b2FXNXpkR0Z1WTJVcElIdGNiaUFnYVc1emRHRnVZMlV1Y21WbmFYTjBaWEpJWld4d1pYSW9KMmhsYkhCbGNrMXBjM05wYm1jbkxDQm1kVzVqZEdsdmJpZ3ZLaUJiWVhKbmN5d2dYVzl3ZEdsdmJuTWdLaThwSUh0Y2JpQWdJQ0JwWmlBb1lYSm5kVzFsYm5SekxteGxibWQwYUNBOVBUMGdNU2tnZTF4dUlDQWdJQ0FnTHk4Z1FTQnRhWE56YVc1bklHWnBaV3hrSUdsdUlHRWdlM3RtYjI5OWZTQmpiMjV6ZEhKMVkzUXVYRzRnSUNBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa08xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0F2THlCVGIyMWxiMjVsSUdseklHRmpkSFZoYkd4NUlIUnllV2x1WnlCMGJ5QmpZV3hzSUhOdmJXVjBhR2x1Wnl3Z1lteHZkeUIxY0M1Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b1hHNGdJQ0FnSUNBZ0lDZE5hWE56YVc1bklHaGxiSEJsY2pvZ1hDSW5JQ3NnWVhKbmRXMWxiblJ6VzJGeVozVnRaVzUwY3k1c1pXNW5kR2dnTFNBeFhTNXVZVzFsSUNzZ0oxd2lKMXh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUgwcE8xeHVmVnh1SWwxOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxudmFyIF9leGNlcHRpb24gPSByZXF1aXJlKCcuLi9leGNlcHRpb24nKTtcblxudmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdpZicsIGZ1bmN0aW9uIChjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKF91dGlscy5pc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkge1xuICAgICAgY29uZGl0aW9uYWwgPSBjb25kaXRpb25hbC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsIHx8IF91dGlscy5pc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24gKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJyN1bmxlc3MgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge1xuICAgICAgZm46IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGludmVyc2U6IG9wdGlvbnMuZm4sXG4gICAgICBoYXNoOiBvcHRpb25zLmhhc2hcbiAgICB9KTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyaGxiSEJsY25NdmFXWXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096dHhRa0ZCYjBNc1ZVRkJWVHM3ZVVKQlEzaENMR05CUVdNN096czdjVUpCUlhKQ0xGVkJRVk1zVVVGQlVTeEZRVUZGTzBGQlEyaERMRlZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeEZRVUZGTEZWQlFWTXNWMEZCVnl4RlFVRkZMRTlCUVU4c1JVRkJSVHRCUVVNelJDeFJRVUZKTEZOQlFWTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRM3BDTEZsQlFVMHNNa0pCUVdNc2JVTkJRVzFETEVOQlFVTXNRMEZCUXp0TFFVTXhSRHRCUVVORUxGRkJRVWtzYTBKQlFWY3NWMEZCVnl4RFFVRkRMRVZCUVVVN1FVRkRNMElzYVVKQlFWY3NSMEZCUnl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzUkRPenM3T3p0QlFVdEVMRkZCUVVrc1FVRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhKUVVGTExHVkJRVkVzVjBGQlZ5eERRVUZETEVWQlFVVTdRVUZEZGtVc1lVRkJUeXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUXpsQ0xFMUJRVTA3UVVGRFRDeGhRVUZQTEU5QlFVOHNRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGVrSTdSMEZEUml4RFFVRkRMRU5CUVVNN08wRkJSVWdzVlVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1ZVRkJVeXhYUVVGWExFVkJRVVVzVDBGQlR5eEZRVUZGTzBGQlF5OUVMRkZCUVVrc1UwRkJVeXhEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVWQlFVVTdRVUZEZWtJc1dVRkJUU3d5UWtGQll5eDFRMEZCZFVNc1EwRkJReXhEUVVGRE8wdEJRemxFTzBGQlEwUXNWMEZCVHl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1YwRkJWeXhGUVVGRk8wRkJRM0JFTEZGQlFVVXNSVUZCUlN4UFFVRlBMRU5CUVVNc1QwRkJUenRCUVVOdVFpeGhRVUZQTEVWQlFVVXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRia0lzVlVGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4SlFVRkpPMHRCUTI1Q0xFTkJRVU1zUTBGQlF6dEhRVU5LTEVOQlFVTXNRMEZCUXp0RFFVTktJaXdpWm1sc1pTSTZJbWxtTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dhWE5GYlhCMGVTd2dhWE5HZFc1amRHbHZiaUI5SUdaeWIyMGdKeTR1TDNWMGFXeHpKenRjYm1sdGNHOXlkQ0JGZUdObGNIUnBiMjRnWm5KdmJTQW5MaTR2WlhoalpYQjBhVzl1Snp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1puVnVZM1JwYjI0b2FXNXpkR0Z1WTJVcElIdGNiaUFnYVc1emRHRnVZMlV1Y21WbmFYTjBaWEpJWld4d1pYSW9KMmxtSnl3Z1puVnVZM1JwYjI0b1kyOXVaR2wwYVc5dVlXd3NJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnBaaUFvWVhKbmRXMWxiblJ6TG14bGJtZDBhQ0FoUFNBeUtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLQ2NqYVdZZ2NtVnhkV2x5WlhNZ1pYaGhZM1JzZVNCdmJtVWdZWEpuZFcxbGJuUW5LVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR2x6Um5WdVkzUnBiMjRvWTI5dVpHbDBhVzl1WVd3cEtTQjdYRzRnSUNBZ0lDQmpiMjVrYVhScGIyNWhiQ0E5SUdOdmJtUnBkR2x2Ym1Gc0xtTmhiR3dvZEdocGN5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdSR1ZtWVhWc2RDQmlaV2hoZG1sdmNpQnBjeUIwYnlCeVpXNWtaWElnZEdobElIQnZjMmwwYVhabElIQmhkR2dnYVdZZ2RHaGxJSFpoYkhWbElHbHpJSFJ5ZFhSb2VTQmhibVFnYm05MElHVnRjSFI1TGx4dUlDQWdJQzh2SUZSb1pTQmdhVzVqYkhWa1pWcGxjbTlnSUc5d2RHbHZiaUJ0WVhrZ1ltVWdjMlYwSUhSdklIUnlaV0YwSUhSb1pTQmpiMjVrZEdsdmJtRnNJR0Z6SUhCMWNtVnNlU0J1YjNRZ1pXMXdkSGtnWW1GelpXUWdiMjRnZEdobFhHNGdJQ0FnTHk4Z1ltVm9ZWFpwYjNJZ2IyWWdhWE5GYlhCMGVTNGdSV1ptWldOMGFYWmxiSGtnZEdocGN5QmtaWFJsY20xcGJtVnpJR2xtSURBZ2FYTWdhR0Z1Wkd4bFpDQmllU0IwYUdVZ2NHOXphWFJwZG1VZ2NHRjBhQ0J2Y2lCdVpXZGhkR2wyWlM1Y2JpQWdJQ0JwWmlBb0tDRnZjSFJwYjI1ekxtaGhjMmd1YVc1amJIVmtaVnBsY204Z0ppWWdJV052Ym1ScGRHbHZibUZzS1NCOGZDQnBjMFZ0Y0hSNUtHTnZibVJwZEdsdmJtRnNLU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTXVhVzUyWlhKelpTaDBhR2x6S1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlHOXdkR2x2Ym5NdVptNG9kR2hwY3lrN1hHNGdJQ0FnZlZ4dUlDQjlLVHRjYmx4dUlDQnBibk4wWVc1alpTNXlaV2RwYzNSbGNraGxiSEJsY2lnbmRXNXNaWE56Snl3Z1puVnVZM1JwYjI0b1kyOXVaR2wwYVc5dVlXd3NJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnBaaUFvWVhKbmRXMWxiblJ6TG14bGJtZDBhQ0FoUFNBeUtTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLQ2NqZFc1c1pYTnpJSEpsY1hWcGNtVnpJR1Y0WVdOMGJIa2diMjVsSUdGeVozVnRaVzUwSnlrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQnBibk4wWVc1alpTNW9aV3h3WlhKeld5ZHBaaWRkTG1OaGJHd29kR2hwY3l3Z1kyOXVaR2wwYVc5dVlXd3NJSHRjYmlBZ0lDQWdJR1p1T2lCdmNIUnBiMjV6TG1sdWRtVnljMlVzWEc0Z0lDQWdJQ0JwYm5abGNuTmxPaUJ2Y0hScGIyNXpMbVp1TEZ4dUlDQWdJQ0FnYUdGemFEb2diM0IwYVc5dWN5NW9ZWE5vWEc0Z0lDQWdmU2s3WEc0Z0lIMHBPMXh1ZlZ4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb2cnLCBmdW5jdGlvbiAoKSAvKiBtZXNzYWdlLCBvcHRpb25zICove1xuICAgIHZhciBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgdmFyIGxldmVsID0gMTtcbiAgICBpZiAob3B0aW9ucy5oYXNoLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5oYXNoLmxldmVsO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuZGF0YS5sZXZlbDtcbiAgICB9XG4gICAgYXJnc1swXSA9IGxldmVsO1xuXG4gICAgaW5zdGFuY2UubG9nLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyaGxiSEJsY25NdmJHOW5MbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN2NVSkJRV1VzVlVGQlV5eFJRVUZSTEVWQlFVVTdRVUZEYUVNc1ZVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eExRVUZMTEVWQlFVVXNhME5CUVdsRE8wRkJRemxFTEZGQlFVa3NTVUZCU1N4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJRM0JDTEU5QlFVOHNSMEZCUnl4VFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTFReXhUUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkROME1zVlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU42UWpzN1FVRkZSQ3hSUVVGSkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZEWkN4UlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVsQlFVa3NSVUZCUlR0QlFVTTVRaXhYUVVGTExFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1MwRkROVUlzVFVGQlRTeEpRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRWxCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVsQlFVa3NTVUZCU1N4RlFVRkZPMEZCUTNKRUxGZEJRVXNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJRenRMUVVNMVFqdEJRVU5FTEZGQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJXaENMRmxCUVZFc1EwRkJReXhIUVVGSExFMUJRVUVzUTBGQldpeFJRVUZSTEVWQlFWRXNTVUZCU1N4RFFVRkRMRU5CUVVNN1IwRkRka0lzUTBGQlF5eERRVUZETzBOQlEwb2lMQ0ptYVd4bElqb2liRzluTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHUmxabUYxYkhRZ1puVnVZM1JwYjI0b2FXNXpkR0Z1WTJVcElIdGNiaUFnYVc1emRHRnVZMlV1Y21WbmFYTjBaWEpJWld4d1pYSW9KMnh2Wnljc0lHWjFibU4wYVc5dUtDOHFJRzFsYzNOaFoyVXNJRzl3ZEdsdmJuTWdLaThwSUh0Y2JpQWdJQ0JzWlhRZ1lYSm5jeUE5SUZ0MWJtUmxabWx1WldSZExGeHVJQ0FnSUNBZ2IzQjBhVzl1Y3lBOUlHRnlaM1Z0Wlc1MGMxdGhjbWQxYldWdWRITXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JoY21kMWJXVnVkSE11YkdWdVozUm9JQzBnTVRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JoY21kekxuQjFjMmdvWVhKbmRXMWxiblJ6VzJsZEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdiR1YyWld3Z1BTQXhPMXh1SUNBZ0lHbG1JQ2h2Y0hScGIyNXpMbWhoYzJndWJHVjJaV3dnSVQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnYkdWMlpXd2dQU0J2Y0hScGIyNXpMbWhoYzJndWJHVjJaV3c3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2h2Y0hScGIyNXpMbVJoZEdFZ0ppWWdiM0IwYVc5dWN5NWtZWFJoTG14bGRtVnNJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJR3hsZG1Wc0lEMGdiM0IwYVc5dWN5NWtZWFJoTG14bGRtVnNPMXh1SUNBZ0lIMWNiaUFnSUNCaGNtZHpXekJkSUQwZ2JHVjJaV3c3WEc1Y2JpQWdJQ0JwYm5OMFlXNWpaUzVzYjJjb0xpNHVZWEpuY3lrN1hHNGdJSDBwTzF4dWZWeHVJbDE5XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9va3VwJywgZnVuY3Rpb24gKG9iaiwgZmllbGQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgLy8gTm90ZSBmb3IgNS4wOiBDaGFuZ2UgdG8gXCJvYmogPT0gbnVsbFwiIGluIDUuMFxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnMubG9va3VwUHJvcGVydHkob2JqLCBmaWVsZCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZiRzl2YTNWd0xtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3Y1VKQlFXVXNWVUZCVXl4UlFVRlJMRVZCUVVVN1FVRkRhRU1zVlVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4UlFVRlJMRVZCUVVVc1ZVRkJVeXhIUVVGSExFVkJRVVVzUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTTVSQ3hSUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGT3p0QlFVVlNMR0ZCUVU4c1IwRkJSeXhEUVVGRE8wdEJRMW83UVVGRFJDeFhRVUZQTEU5QlFVOHNRMEZCUXl4alFVRmpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzBkQlF6TkRMRU5CUVVNc1EwRkJRenREUVVOS0lpd2labWxzWlNJNklteHZiMnQxY0M1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmtaV1poZFd4MElHWjFibU4wYVc5dUtHbHVjM1JoYm1ObEtTQjdYRzRnSUdsdWMzUmhibU5sTG5KbFoybHpkR1Z5U0dWc2NHVnlLQ2RzYjI5cmRYQW5MQ0JtZFc1amRHbHZiaWh2WW1vc0lHWnBaV3hrTENCdmNIUnBiMjV6S1NCN1hHNGdJQ0FnYVdZZ0tDRnZZbW9wSUh0Y2JpQWdJQ0FnSUM4dklFNXZkR1VnWm05eUlEVXVNRG9nUTJoaGJtZGxJSFJ2SUZ3aWIySnFJRDA5SUc1MWJHeGNJaUJwYmlBMUxqQmNiaUFnSUNBZ0lISmxkSFZ5YmlCdlltbzdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ2Y0hScGIyNXpMbXh2YjJ0MWNGQnliM0JsY25SNUtHOWlhaXdnWm1sbGJHUXBPMXh1SUNCOUtUdGNibjFjYmlKZGZRPT1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignd2l0aCcsIGZ1bmN0aW9uIChjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChfdXRpbHMuaXNGdW5jdGlvbihjb250ZXh0KSkge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICB2YXIgZm4gPSBvcHRpb25zLmZuO1xuXG4gICAgaWYgKCFfdXRpbHMuaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBfdXRpbHMuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXM6IF91dGlscy5ibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJobGJIQmxjbk12ZDJsMGFDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN08zRkNRVTFQTEZWQlFWVTdPM2xDUVVOTExHTkJRV003T3pzN2NVSkJSWEpDTEZWQlFWTXNVVUZCVVN4RlFVRkZPMEZCUTJoRExGVkJRVkVzUTBGQlF5eGpRVUZqTEVOQlFVTXNUVUZCVFN4RlFVRkZMRlZCUVZNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlJUdEJRVU42UkN4UlFVRkpMRk5CUVZNc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eEZRVUZGTzBGQlEzcENMRmxCUVUwc01rSkJRV01zY1VOQlFYRkRMRU5CUVVNc1EwRkJRenRMUVVNMVJEdEJRVU5FTEZGQlFVa3NhMEpCUVZjc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGRGRrSXNZVUZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTMEZET1VJN08wRkJSVVFzVVVGQlNTeEZRVUZGTEVkQlFVY3NUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJRenM3UVVGRmNFSXNVVUZCU1N4RFFVRkRMR1ZCUVZFc1QwRkJUeXhEUVVGRExFVkJRVVU3UVVGRGNrSXNWVUZCU1N4SlFVRkpMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF6dEJRVU40UWl4VlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTXZRaXhaUVVGSkxFZEJRVWNzYlVKQlFWa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMnBETEZsQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc2VVSkJRMnBDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVONFFpeFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVObUxFTkJRVU03VDBGRFNEczdRVUZGUkN4aFFVRlBMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVU3UVVGRGFrSXNXVUZCU1N4RlFVRkZMRWxCUVVrN1FVRkRWaXh0UWtGQlZ5eEZRVUZGTEcxQ1FVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8wOUJRMmhGTEVOQlFVTXNRMEZCUXp0TFFVTktMRTFCUVUwN1FVRkRUQ3hoUVVGUExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRPVUk3UjBGRFJpeERRVUZETEVOQlFVTTdRMEZEU2lJc0ltWnBiR1VpT2lKM2FYUm9MbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0Y2JpQWdZWEJ3Wlc1a1EyOXVkR1Y0ZEZCaGRHZ3NYRzRnSUdKc2IyTnJVR0Z5WVcxekxGeHVJQ0JqY21WaGRHVkdjbUZ0WlN4Y2JpQWdhWE5GYlhCMGVTeGNiaUFnYVhOR2RXNWpkR2x2Ymx4dWZTQm1jbTl0SUNjdUxpOTFkR2xzY3ljN1hHNXBiWEJ2Y25RZ1JYaGpaWEIwYVc5dUlHWnliMjBnSnk0dUwyVjRZMlZ3ZEdsdmJpYzdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR1oxYm1OMGFXOXVLR2x1YzNSaGJtTmxLU0I3WEc0Z0lHbHVjM1JoYm1ObExuSmxaMmx6ZEdWeVNHVnNjR1Z5S0NkM2FYUm9KeXdnWm5WdVkzUnBiMjRvWTI5dWRHVjRkQ3dnYjNCMGFXOXVjeWtnZTF4dUlDQWdJR2xtSUNoaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvSUNFOUlESXBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGZUdObGNIUnBiMjRvSnlOM2FYUm9JSEpsY1hWcGNtVnpJR1Y0WVdOMGJIa2diMjVsSUdGeVozVnRaVzUwSnlrN1hHNGdJQ0FnZlZ4dUlDQWdJR2xtSUNocGMwWjFibU4wYVc5dUtHTnZiblJsZUhRcEtTQjdYRzRnSUNBZ0lDQmpiMjUwWlhoMElEMGdZMjl1ZEdWNGRDNWpZV3hzS0hSb2FYTXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JtYmlBOUlHOXdkR2x2Ym5NdVptNDdYRzVjYmlBZ0lDQnBaaUFvSVdselJXMXdkSGtvWTI5dWRHVjRkQ2twSUh0Y2JpQWdJQ0FnSUd4bGRDQmtZWFJoSUQwZ2IzQjBhVzl1Y3k1a1lYUmhPMXh1SUNBZ0lDQWdhV1lnS0c5d2RHbHZibk11WkdGMFlTQW1KaUJ2Y0hScGIyNXpMbWxrY3lrZ2UxeHVJQ0FnSUNBZ0lDQmtZWFJoSUQwZ1kzSmxZWFJsUm5KaGJXVW9iM0IwYVc5dWN5NWtZWFJoS1R0Y2JpQWdJQ0FnSUNBZ1pHRjBZUzVqYjI1MFpYaDBVR0YwYUNBOUlHRndjR1Z1WkVOdmJuUmxlSFJRWVhSb0tGeHVJQ0FnSUNBZ0lDQWdJRzl3ZEdsdmJuTXVaR0YwWVM1amIyNTBaWGgwVUdGMGFDeGNiaUFnSUNBZ0lDQWdJQ0J2Y0hScGIyNXpMbWxrYzFzd1hWeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabTRvWTI5dWRHVjRkQ3dnZTF4dUlDQWdJQ0FnSUNCa1lYUmhPaUJrWVhSaExGeHVJQ0FnSUNBZ0lDQmliRzlqYTFCaGNtRnRjem9nWW14dlkydFFZWEpoYlhNb1cyTnZiblJsZUhSZExDQmJaR0YwWVNBbUppQmtZWFJoTG1OdmJuUmxlSFJRWVhSb1hTbGNiaUFnSUNBZ0lIMHBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYjNCMGFXOXVjeTVwYm5abGNuTmxLSFJvYVhNcE8xeHVJQ0FnSUgxY2JpQWdmU2s3WEc1OVhHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMgPSByZWdpc3RlckRlZmF1bHRIZWxwZXJzO1xuZXhwb3J0cy5tb3ZlSGVscGVyVG9Ib29rcyA9IG1vdmVIZWxwZXJUb0hvb2tzO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnKTtcblxudmFyIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcpO1xuXG52YXIgX2hlbHBlcnNFYWNoID0gcmVxdWlyZSgnLi9oZWxwZXJzL2VhY2gnKTtcblxudmFyIF9oZWxwZXJzRWFjaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzRWFjaCk7XG5cbnZhciBfaGVscGVyc0hlbHBlck1pc3NpbmcgPSByZXF1aXJlKCcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnKTtcblxudmFyIF9oZWxwZXJzSGVscGVyTWlzc2luZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzSGVscGVyTWlzc2luZyk7XG5cbnZhciBfaGVscGVyc0lmID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lmJyk7XG5cbnZhciBfaGVscGVyc0lmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNJZik7XG5cbnZhciBfaGVscGVyc0xvZyA9IHJlcXVpcmUoJy4vaGVscGVycy9sb2cnKTtcblxudmFyIF9oZWxwZXJzTG9nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNMb2cpO1xuXG52YXIgX2hlbHBlcnNMb29rdXAgPSByZXF1aXJlKCcuL2hlbHBlcnMvbG9va3VwJyk7XG5cbnZhciBfaGVscGVyc0xvb2t1cDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzTG9va3VwKTtcblxudmFyIF9oZWxwZXJzV2l0aCA9IHJlcXVpcmUoJy4vaGVscGVycy93aXRoJyk7XG5cbnZhciBfaGVscGVyc1dpdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc1dpdGgpO1xuXG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNFYWNoMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNIZWxwZXJNaXNzaW5nMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNJZjJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG4gIF9oZWxwZXJzTG9nMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNMb29rdXAyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xuICBfaGVscGVyc1dpdGgyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPM2xEUVVGMVF5eG5RMEZCWjBNN096czdNa0pCUXpsRExHZENRVUZuUWpzN096dHZRMEZEVUN3d1FrRkJNRUk3T3pzN2VVSkJRM0pETEdOQlFXTTdPenM3TUVKQlEySXNaVUZCWlRzN096czJRa0ZEV2l4clFrRkJhMEk3T3pzN01rSkJRM0JDTEdkQ1FVRm5RanM3T3p0QlFVVnNReXhUUVVGVExITkNRVUZ6UWl4RFFVRkRMRkZCUVZFc1JVRkJSVHRCUVVNdlF5eDVRMEZCTWtJc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGNrTXNNa0pCUVdFc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGRrSXNiME5CUVhOQ0xGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyaERMSGxDUVVGWExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzSkNMREJDUVVGWkxGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzUkNMRFpDUVVGbExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzcENMREpDUVVGaExGRkJRVkVzUTBGQlF5eERRVUZETzBOQlEzaENPenRCUVVWTkxGTkJRVk1zYVVKQlFXbENMRU5CUVVNc1VVRkJVU3hGUVVGRkxGVkJRVlVzUlVGQlJTeFZRVUZWTEVWQlFVVTdRVUZEYkVVc1RVRkJTU3hSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZPMEZCUTJoRExGbEJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTXhSQ3hSUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzBGQlEyWXNZVUZCVHl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzB0QlEzSkRPMGRCUTBZN1EwRkRSaUlzSW1acGJHVWlPaUpvWld4d1pYSnpMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbFoybHpkR1Z5UW14dlkydElaV3h3WlhKTmFYTnphVzVuSUdaeWIyMGdKeTR2YUdWc2NHVnljeTlpYkc5amF5MW9aV3h3WlhJdGJXbHpjMmx1WnljN1hHNXBiWEJ2Y25RZ2NtVm5hWE4wWlhKRllXTm9JR1p5YjIwZ0p5NHZhR1ZzY0dWeWN5OWxZV05vSnp0Y2JtbHRjRzl5ZENCeVpXZHBjM1JsY2tobGJIQmxjazFwYzNOcGJtY2dabkp2YlNBbkxpOW9aV3h3WlhKekwyaGxiSEJsY2kxdGFYTnphVzVuSnp0Y2JtbHRjRzl5ZENCeVpXZHBjM1JsY2tsbUlHWnliMjBnSnk0dmFHVnNjR1Z5Y3k5cFppYzdYRzVwYlhCdmNuUWdjbVZuYVhOMFpYSk1iMmNnWm5KdmJTQW5MaTlvWld4d1pYSnpMMnh2WnljN1hHNXBiWEJ2Y25RZ2NtVm5hWE4wWlhKTWIyOXJkWEFnWm5KdmJTQW5MaTlvWld4d1pYSnpMMnh2YjJ0MWNDYzdYRzVwYlhCdmNuUWdjbVZuYVhOMFpYSlhhWFJvSUdaeWIyMGdKeTR2YUdWc2NHVnljeTkzYVhSb0p6dGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsWjJsemRHVnlSR1ZtWVhWc2RFaGxiSEJsY25Nb2FXNXpkR0Z1WTJVcElIdGNiaUFnY21WbmFYTjBaWEpDYkc5amEwaGxiSEJsY2sxcGMzTnBibWNvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNrVmhZMmdvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNraGxiSEJsY2sxcGMzTnBibWNvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNrbG1LR2x1YzNSaGJtTmxLVHRjYmlBZ2NtVm5hWE4wWlhKTWIyY29hVzV6ZEdGdVkyVXBPMXh1SUNCeVpXZHBjM1JsY2t4dmIydDFjQ2hwYm5OMFlXNWpaU2s3WEc0Z0lISmxaMmx6ZEdWeVYybDBhQ2hwYm5OMFlXNWpaU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRiM1psU0dWc2NHVnlWRzlJYjI5cmN5aHBibk4wWVc1alpTd2dhR1ZzY0dWeVRtRnRaU3dnYTJWbGNFaGxiSEJsY2lrZ2UxeHVJQ0JwWmlBb2FXNXpkR0Z1WTJVdWFHVnNjR1Z5YzF0b1pXeHdaWEpPWVcxbFhTa2dlMXh1SUNBZ0lHbHVjM1JoYm1ObExtaHZiMnR6VzJobGJIQmxjazVoYldWZElEMGdhVzV6ZEdGdVkyVXVhR1ZzY0dWeWMxdG9aV3h3WlhKT1lXMWxYVHRjYmlBZ0lDQnBaaUFvSVd0bFpYQklaV3h3WlhJcElIdGNiaUFnSUNBZ0lHUmxiR1YwWlNCcGJuTjBZVzVqWlM1b1pXeHdaWEp6VzJobGJIQmxjazVoYldWZE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckRlY29yYXRvcignaW5saW5lJywgZnVuY3Rpb24gKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgdmFyIHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgdmFyIG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBfdXRpbHMuZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpO1xuICAgICAgICB2YXIgcmV0ID0gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9yaWdpbmFsO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9wcy5wYXJ0aWFsc1tvcHRpb25zLmFyZ3NbMF1dID0gb3B0aW9ucy5mbjtcblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMlJsWTI5eVlYUnZjbk12YVc1c2FXNWxMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN2NVSkJRWFZDTEZWQlFWVTdPM0ZDUVVWc1FpeFZRVUZUTEZGQlFWRXNSVUZCUlR0QlFVTm9ReXhWUVVGUkxFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1VVRkJVU3hGUVVGRkxGVkJRVk1zUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRk8wRkJRek5GTEZGQlFVa3NSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOaUxGRkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTI1Q0xGZEJRVXNzUTBGQlF5eFJRVUZSTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTNCQ0xGTkJRVWNzUjBGQlJ5eFZRVUZUTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVN08wRkJSUzlDTEZsQlFVa3NVVUZCVVN4SFFVRkhMRk5CUVZNc1EwRkJReXhSUVVGUkxFTkJRVU03UVVGRGJFTXNhVUpCUVZNc1EwRkJReXhSUVVGUkxFZEJRVWNzWTBGQlR5eEZRVUZGTEVWQlFVVXNVVUZCVVN4RlFVRkZMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dEJRVU14UkN4WlFVRkpMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xHbENRVUZUTEVOQlFVTXNVVUZCVVN4SFFVRkhMRkZCUVZFc1EwRkJRenRCUVVNNVFpeGxRVUZQTEVkQlFVY3NRMEZCUXp0UFFVTmFMRU5CUVVNN1MwRkRTRHM3UVVGRlJDeFRRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRE96dEJRVVUzUXl4WFFVRlBMRWRCUVVjc1EwRkJRenRIUVVOYUxFTkJRVU1zUTBGQlF6dERRVU5LSWl3aVptbHNaU0k2SW1sdWJHbHVaUzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lHVjRkR1Z1WkNCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1puVnVZM1JwYjI0b2FXNXpkR0Z1WTJVcElIdGNiaUFnYVc1emRHRnVZMlV1Y21WbmFYTjBaWEpFWldOdmNtRjBiM0lvSjJsdWJHbHVaU2NzSUdaMWJtTjBhVzl1S0dadUxDQndjbTl3Y3l3Z1kyOXVkR0ZwYm1WeUxDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ2JHVjBJSEpsZENBOUlHWnVPMXh1SUNBZ0lHbG1JQ2doY0hKdmNITXVjR0Z5ZEdsaGJITXBJSHRjYmlBZ0lDQWdJSEJ5YjNCekxuQmhjblJwWVd4eklEMGdlMzA3WEc0Z0lDQWdJQ0J5WlhRZ1BTQm1kVzVqZEdsdmJpaGpiMjUwWlhoMExDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ0lDQWdJQzh2SUVOeVpXRjBaU0JoSUc1bGR5QndZWEowYVdGc2N5QnpkR0ZqYXlCbWNtRnRaU0J3Y21sdmNpQjBieUJsZUdWakxseHVJQ0FnSUNBZ0lDQnNaWFFnYjNKcFoybHVZV3dnUFNCamIyNTBZV2x1WlhJdWNHRnlkR2xoYkhNN1hHNGdJQ0FnSUNBZ0lHTnZiblJoYVc1bGNpNXdZWEowYVdGc2N5QTlJR1Y0ZEdWdVpDaDdmU3dnYjNKcFoybHVZV3dzSUhCeWIzQnpMbkJoY25ScFlXeHpLVHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxkQ0E5SUdadUtHTnZiblJsZUhRc0lHOXdkR2x2Ym5NcE8xeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSXVjR0Z5ZEdsaGJITWdQU0J2Y21sbmFXNWhiRHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSEpsZER0Y2JpQWdJQ0FnSUgwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0hKdmNITXVjR0Z5ZEdsaGJITmJiM0IwYVc5dWN5NWhjbWR6V3pCZFhTQTlJRzl3ZEdsdmJuTXVabTQ3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdjbVYwTzF4dUlDQjlLVHRjYm4xY2JpSmRmUT09XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgPSByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2RlY29yYXRvcnNJbmxpbmUgPSByZXF1aXJlKCcuL2RlY29yYXRvcnMvaW5saW5lJyk7XG5cbnZhciBfZGVjb3JhdG9yc0lubGluZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWNvcmF0b3JzSW5saW5lKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICBfZGVjb3JhdG9yc0lubGluZTJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyUmxZMjl5WVhSdmNuTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdaME5CUVRKQ0xIRkNRVUZ4UWpzN096dEJRVVY2UXl4VFFVRlRMSGxDUVVGNVFpeERRVUZETEZGQlFWRXNSVUZCUlR0QlFVTnNSQ3huUTBGQlpTeFJRVUZSTEVOQlFVTXNRMEZCUXp0RFFVTXhRaUlzSW1acGJHVWlPaUprWldOdmNtRjBiM0p6TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxaMmx6ZEdWeVNXNXNhVzVsSUdaeWIyMGdKeTR2WkdWamIzSmhkRzl5Y3k5cGJteHBibVVuTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtVm5hWE4wWlhKRVpXWmhkV3gwUkdWamIzSmhkRzl5Y3locGJuTjBZVzVqWlNrZ2UxeHVJQ0J5WldkcGMzUmxja2x1YkdsdVpTaHBibk4wWVc1alpTazdYRzU5WEc0aVhYMD1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIGxvZ2dlciA9IHtcbiAgbWV0aG9kTWFwOiBbJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvciddLFxuICBsZXZlbDogJ2luZm8nLFxuXG4gIC8vIE1hcHMgYSBnaXZlbiBsZXZlbCB2YWx1ZSB0byB0aGUgYG1ldGhvZE1hcGAgaW5kZXhlcyBhYm92ZS5cbiAgbG9va3VwTGV2ZWw6IGZ1bmN0aW9uIGxvb2t1cExldmVsKGxldmVsKSB7XG4gICAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBsZXZlbE1hcCA9IF91dGlscy5pbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbiBsb2cobGV2ZWwpIHtcbiAgICBsZXZlbCA9IGxvZ2dlci5sb29rdXBMZXZlbChsZXZlbCk7XG5cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGxvZ2dlci5sb29rdXBMZXZlbChsb2dnZXIubGV2ZWwpIDw9IGxldmVsKSB7XG4gICAgICB2YXIgbWV0aG9kID0gbG9nZ2VyLm1ldGhvZE1hcFtsZXZlbF07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgaWYgKCFjb25zb2xlW21ldGhvZF0pIHtcbiAgICAgICAgbWV0aG9kID0gJ2xvZyc7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtZXNzYWdlID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBtZXNzYWdlW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZVttZXRob2RdLmFwcGx5KGNvbnNvbGUsIG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGxvZ2dlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMnh2WjJkbGNpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3TzNGQ1FVRjNRaXhUUVVGVE96dEJRVVZxUXl4SlFVRkpMRTFCUVUwc1IwRkJSenRCUVVOWUxGZEJRVk1zUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF6dEJRVU0zUXl4UFFVRkxMRVZCUVVVc1RVRkJUVHM3TzBGQlIySXNZVUZCVnl4RlFVRkZMSEZDUVVGVExFdEJRVXNzUlVGQlJUdEJRVU16UWl4UlFVRkpMRTlCUVU4c1MwRkJTeXhMUVVGTExGRkJRVkVzUlVGQlJUdEJRVU0zUWl4VlFVRkpMRkZCUVZFc1IwRkJSeXhsUVVGUkxFMUJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRE9VUXNWVUZCU1N4UlFVRlJMRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRMnBDTEdGQlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNN1QwRkRiRUlzVFVGQlRUdEJRVU5NTEdGQlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzA5QlF6ZENPMHRCUTBZN08wRkJSVVFzVjBGQlR5eExRVUZMTEVOQlFVTTdSMEZEWkRzN08wRkJSMFFzUzBGQlJ5eEZRVUZGTEdGQlFWTXNTMEZCU3l4RlFVRmpPMEZCUXk5Q0xGTkJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZzUXl4UlFVTkZMRTlCUVU4c1QwRkJUeXhMUVVGTExGZEJRVmNzU1VGRE9VSXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4RlFVTjZRenRCUVVOQkxGVkJRVWtzVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJYSkRMRlZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVTdRVUZEY0VJc1kwRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dFBRVU5vUWpzN2QwTkJXRzFDTEU5QlFVODdRVUZCVUN4bFFVRlBPenM3UVVGWk0wSXNZVUZCVHl4RFFVRkRMRTFCUVUwc1QwRkJReXhEUVVGbUxFOUJRVThzUlVGQldTeFBRVUZQTEVOQlFVTXNRMEZCUXp0TFFVTTNRanRIUVVOR08wTkJRMFlzUTBGQlF6czdjVUpCUldFc1RVRkJUU0lzSW1acGJHVWlPaUpzYjJkblpYSXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCcGJtUmxlRTltSUgwZ1puSnZiU0FuTGk5MWRHbHNjeWM3WEc1Y2JteGxkQ0JzYjJkblpYSWdQU0I3WEc0Z0lHMWxkR2h2WkUxaGNEb2dXeWRrWldKMVp5Y3NJQ2RwYm1adkp5d2dKM2RoY200bkxDQW5aWEp5YjNJblhTeGNiaUFnYkdWMlpXdzZJQ2RwYm1adkp5eGNibHh1SUNBdkx5Qk5ZWEJ6SUdFZ1oybDJaVzRnYkdWMlpXd2dkbUZzZFdVZ2RHOGdkR2hsSUdCdFpYUm9iMlJOWVhCZ0lHbHVaR1Y0WlhNZ1lXSnZkbVV1WEc0Z0lHeHZiMnQxY0V4bGRtVnNPaUJtZFc1amRHbHZiaWhzWlhabGJDa2dlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdiR1YyWld3Z1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdJQ0JzWlhRZ2JHVjJaV3hOWVhBZ1BTQnBibVJsZUU5bUtHeHZaMmRsY2k1dFpYUm9iMlJOWVhBc0lHeGxkbVZzTG5SdlRHOTNaWEpEWVhObEtDa3BPMXh1SUNBZ0lDQWdhV1lnS0d4bGRtVnNUV0Z3SUQ0OUlEQXBJSHRjYmlBZ0lDQWdJQ0FnYkdWMlpXd2dQU0JzWlhabGJFMWhjRHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR3hsZG1Wc0lEMGdjR0Z5YzJWSmJuUW9iR1YyWld3c0lERXdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2JHVjJaV3c3WEc0Z0lIMHNYRzVjYmlBZ0x5OGdRMkZ1SUdKbElHOTJaWEp5YVdSa1pXNGdhVzRnZEdobElHaHZjM1FnWlc1MmFYSnZibTFsYm5SY2JpQWdiRzluT2lCbWRXNWpkR2x2Ymloc1pYWmxiQ3dnTGk0dWJXVnpjMkZuWlNrZ2UxeHVJQ0FnSUd4bGRtVnNJRDBnYkc5bloyVnlMbXh2YjJ0MWNFeGxkbVZzS0d4bGRtVnNLVHRjYmx4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUhSNWNHVnZaaUJqYjI1emIyeGxJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KbHh1SUNBZ0lDQWdiRzluWjJWeUxteHZiMnQxY0V4bGRtVnNLR3h2WjJkbGNpNXNaWFpsYkNrZ1BEMGdiR1YyWld4Y2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUd4bGRDQnRaWFJvYjJRZ1BTQnNiMmRuWlhJdWJXVjBhRzlrVFdGd1cyeGxkbVZzWFR0Y2JpQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MWpiMjV6YjJ4bFhHNGdJQ0FnSUNCcFppQW9JV052Ym5OdmJHVmJiV1YwYUc5a1hTa2dlMXh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0FuYkc5bkp6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk52YkdWYmJXVjBhRzlrWFNndUxpNXRaWE56WVdkbEtUc2dMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRiR2x1WlNCdWJ5MWpiMjV6YjJ4bFhHNGdJQ0FnZlZ4dUlDQjlYRzU5TzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCc2IyZG5aWEk3WEc0aVhYMD1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlTmV3TG9va3VwT2JqZWN0ID0gY3JlYXRlTmV3TG9va3VwT2JqZWN0O1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggXCJudWxsXCItcHJvdG90eXBlIHRvIGF2b2lkIHRydXRoeSByZXN1bHRzIG9uIHByb3RvdHlwZSBwcm9wZXJ0aWVzLlxuICogVGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIHVzZWQgd2l0aCBcIm9iamVjdFtwcm9wZXJ0eV1cIiB0byBjaGVjayBpZiBhIHByb3BlcnR5IGV4aXN0c1xuICogQHBhcmFtIHsuLi5vYmplY3R9IHNvdXJjZXMgYSB2YXJhcmdzIHBhcmFtZXRlciBvZiBzb3VyY2Ugb2JqZWN0cyB0aGF0IHdpbGwgYmUgbWVyZ2VkXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZU5ld0xvb2t1cE9iamVjdCgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNvdXJjZXMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBzb3VyY2VzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIF91dGlscy5leHRlbmQuYXBwbHkodW5kZWZpbmVkLCBbT2JqZWN0LmNyZWF0ZShudWxsKV0uY29uY2F0KHNvdXJjZXMpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwybHVkR1Z5Ym1Gc0wyTnlaV0YwWlMxdVpYY3RiRzl2YTNWd0xXOWlhbVZqZEM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenR4UWtGQmRVSXNWVUZCVlRzN096czdPenM3TzBGQlVURkNMRk5CUVZNc2NVSkJRWEZDTEVkQlFXRTdiME5CUVZRc1QwRkJUenRCUVVGUUxGZEJRVTg3T3p0QlFVTTVReXhUUVVGUExHZERRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVXNzVDBGQlR5eEZRVUZETEVOQlFVTTdRMEZEYUVRaUxDSm1hV3hsSWpvaVkzSmxZWFJsTFc1bGR5MXNiMjlyZFhBdGIySnFaV04wTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2daWGgwWlc1a0lIMGdabkp2YlNBbkxpNHZkWFJwYkhNbk8xeHVYRzR2S2lwY2JpQXFJRU55WldGMFpTQmhJRzVsZHlCdlltcGxZM1FnZDJsMGFDQmNJbTUxYkd4Y0lpMXdjbTkwYjNSNWNHVWdkRzhnWVhadmFXUWdkSEoxZEdoNUlISmxjM1ZzZEhNZ2IyNGdjSEp2ZEc5MGVYQmxJSEJ5YjNCbGNuUnBaWE11WEc0Z0tpQlVhR1VnY21WemRXeDBhVzVuSUc5aWFtVmpkQ0JqWVc0Z1ltVWdkWE5sWkNCM2FYUm9JRndpYjJKcVpXTjBXM0J5YjNCbGNuUjVYVndpSUhSdklHTm9aV05ySUdsbUlHRWdjSEp2Y0dWeWRIa2daWGhwYzNSelhHNGdLaUJBY0dGeVlXMGdleTR1TG05aWFtVmpkSDBnYzI5MWNtTmxjeUJoSUhaaGNtRnlaM01nY0dGeVlXMWxkR1Z5SUc5bUlITnZkWEpqWlNCdlltcGxZM1J6SUhSb1lYUWdkMmxzYkNCaVpTQnRaWEpuWldSY2JpQXFJRUJ5WlhSMWNtNXpJSHR2WW1wbFkzUjlYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCamNtVmhkR1ZPWlhkTWIyOXJkWEJQWW1wbFkzUW9MaTR1YzI5MWNtTmxjeWtnZTF4dUlDQnlaWFIxY200Z1pYaDBaVzVrS0U5aWFtVmpkQzVqY21WaGRHVW9iblZzYkNrc0lDNHVMbk52ZFhKalpYTXBPMXh1ZlZ4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sO1xuZXhwb3J0cy5yZXN1bHRJc0FsbG93ZWQgPSByZXN1bHRJc0FsbG93ZWQ7XG5leHBvcnRzLnJlc2V0TG9nZ2VkUHJvcGVydGllcyA9IHJlc2V0TG9nZ2VkUHJvcGVydGllcztcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmpbJ2RlZmF1bHQnXSA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbnZhciBfY3JlYXRlTmV3TG9va3VwT2JqZWN0ID0gcmVxdWlyZSgnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnKTtcblxudmFyIF9sb2dnZXIgPSByZXF1aXJlKCcuLi9sb2dnZXInKTtcblxudmFyIGxvZ2dlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9sb2dnZXIpO1xuXG52YXIgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICB2YXIgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICB2YXIgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogX2NyZWF0ZU5ld0xvb2t1cE9iamVjdC5jcmVhdGVOZXdMb29rdXBPYmplY3QoZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LCBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b1Byb3BlcnRpZXNCeURlZmF1bHRcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHdoaXRlbGlzdDogX2NyZWF0ZU5ld0xvb2t1cE9iamVjdC5jcmVhdGVOZXdMb29rdXBPYmplY3QoZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCwgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kcyksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coJ2Vycm9yJywgJ0hhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCInICsgcHJvcGVydHlOYW1lICsgJ1wiIGJlY2F1c2UgaXQgaXMgbm90IGFuIFwib3duIHByb3BlcnR5XCIgb2YgaXRzIHBhcmVudC5cXG4nICsgJ1lvdSBjYW4gYWRkIGEgcnVudGltZSBvcHRpb24gdG8gZGlzYWJsZSB0aGUgY2hlY2sgb3IgdGhpcyB3YXJuaW5nOlxcbicgKyAnU2VlIGh0dHBzOi8vaGFuZGxlYmFyc2pzLmNvbS9hcGktcmVmZXJlbmNlL3J1bnRpbWUtb3B0aW9ucy5odG1sI29wdGlvbnMtdG8tY29udHJvbC1wcm90b3R5cGUtYWNjZXNzIGZvciBkZXRhaWxzJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwybHVkR1Z5Ym1Gc0wzQnliM1J2TFdGalkyVnpjeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPenM3TzNGRFFVRnpReXcwUWtGQk5FSTdPM05DUVVNeFF5eFhRVUZYT3p0SlFVRjJRaXhOUVVGTk96dEJRVVZzUWl4SlFVRk5MR2RDUVVGblFpeEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJYUkRMRk5CUVZNc2QwSkJRWGRDTEVOQlFVTXNZMEZCWXl4RlFVRkZPMEZCUTNaRUxFMUJRVWtzYzBKQlFYTkNMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3gzUWtGQmMwSXNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRE9VTXNkMEpCUVhOQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGJrUXNkMEpCUVhOQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGJrUXNkMEpCUVhOQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJXNUVMRTFCUVVrc2QwSkJRWGRDTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGYmtRc01FSkJRWGRDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRE96dEJRVVU1UXl4VFFVRlBPMEZCUTB3c1kwRkJWU3hGUVVGRk8wRkJRMVlzWlVGQlV5eEZRVUZGTERaRFFVTlVMSGRDUVVGM1FpeEZRVU40UWl4alFVRmpMRU5CUVVNc2MwSkJRWE5DTEVOQlEzUkRPMEZCUTBRc2EwSkJRVmtzUlVGQlJTeGpRVUZqTEVOQlFVTXNOa0pCUVRaQ08wdEJRek5FTzBGQlEwUXNWMEZCVHl4RlFVRkZPMEZCUTFBc1pVRkJVeXhGUVVGRkxEWkRRVU5VTEhOQ1FVRnpRaXhGUVVOMFFpeGpRVUZqTEVOQlFVTXNiVUpCUVcxQ0xFTkJRMjVETzBGQlEwUXNhMEpCUVZrc1JVRkJSU3hqUVVGakxFTkJRVU1zTUVKQlFUQkNPMHRCUTNoRU8wZEJRMFlzUTBGQlF6dERRVU5JT3p0QlFVVk5MRk5CUVZNc1pVRkJaU3hEUVVGRExFMUJRVTBzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3haUVVGWkxFVkJRVVU3UVVGRGVFVXNUVUZCU1N4UFFVRlBMRTFCUVUwc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGFFTXNWMEZCVHl4alFVRmpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNUMEZCVHl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRE8wZEJRMnBGTEUxQlFVMDdRVUZEVEN4WFFVRlBMR05CUVdNc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4VlFVRlZMRVZCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU03UjBGRGNFVTdRMEZEUmpzN1FVRkZSQ3hUUVVGVExHTkJRV01zUTBGQlF5eDVRa0ZCZVVJc1JVRkJSU3haUVVGWkxFVkJRVVU3UVVGREwwUXNUVUZCU1N4NVFrRkJlVUlzUTBGQlF5eFRRVUZUTEVOQlFVTXNXVUZCV1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhGUVVGRk8wRkJRMjVGTEZkQlFVOHNlVUpCUVhsQ0xFTkJRVU1zVTBGQlV5eERRVUZETEZsQlFWa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRenRIUVVOdVJUdEJRVU5FTEUxQlFVa3NlVUpCUVhsQ0xFTkJRVU1zV1VGQldTeExRVUZMTEZOQlFWTXNSVUZCUlR0QlFVTjRSQ3hYUVVGUExIbENRVUY1UWl4RFFVRkRMRmxCUVZrc1EwRkJRenRIUVVNdlF6dEJRVU5FTEdkRFFVRTRRaXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBGQlF6ZERMRk5CUVU4c1MwRkJTeXhEUVVGRE8wTkJRMlE3TzBGQlJVUXNVMEZCVXl3NFFrRkJPRUlzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZEY0VRc1RVRkJTU3huUWtGQlowSXNRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVU3UVVGRE0wTXNiMEpCUVdkQ0xFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTNSRExGVkJRVTBzUTBGQlF5eEhRVUZITEVOQlExSXNUMEZCVHl4RlFVTlFMR2xGUVVFclJDeFpRVUZaTEc5SlFVTklMRzlJUVVNeVF5eERRVU53U0N4RFFVRkRPMGRCUTBnN1EwRkRSanM3UVVGRlRTeFRRVUZUTEhGQ1FVRnhRaXhIUVVGSE8wRkJRM1JETEZGQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJRU3haUVVGWkxFVkJRVWs3UVVGRGNFUXNWMEZCVHl4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0SFFVTjJReXhEUVVGRExFTkJRVU03UTBGRFNpSXNJbVpwYkdVaU9pSndjbTkwYnkxaFkyTmxjM011YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2V5QmpjbVZoZEdWT1pYZE1iMjlyZFhCUFltcGxZM1FnZlNCbWNtOXRJQ2N1TDJOeVpXRjBaUzF1WlhjdGJHOXZhM1Z3TFc5aWFtVmpkQ2M3WEc1cGJYQnZjblFnS2lCaGN5QnNiMmRuWlhJZ1puSnZiU0FuTGk0dmJHOW5aMlZ5Snp0Y2JseHVZMjl1YzNRZ2JHOW5aMlZrVUhKdmNHVnlkR2xsY3lBOUlFOWlhbVZqZEM1amNtVmhkR1VvYm5Wc2JDazdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqY21WaGRHVlFjbTkwYjBGalkyVnpjME52Ym5SeWIyd29jblZ1ZEdsdFpVOXdkR2x2Ym5NcElIdGNiaUFnYkdWMElHUmxabUYxYkhSTlpYUm9iMlJYYUdsMFpVeHBjM1FnUFNCUFltcGxZM1F1WTNKbFlYUmxLRzUxYkd3cE8xeHVJQ0JrWldaaGRXeDBUV1YwYUc5a1YyaHBkR1ZNYVhOMFd5ZGpiMjV6ZEhKMVkzUnZjaWRkSUQwZ1ptRnNjMlU3WEc0Z0lHUmxabUYxYkhSTlpYUm9iMlJYYUdsMFpVeHBjM1JiSjE5ZlpHVm1hVzVsUjJWMGRHVnlYMThuWFNBOUlHWmhiSE5sTzF4dUlDQmtaV1poZFd4MFRXVjBhRzlrVjJocGRHVk1hWE4wV3lkZlgyUmxabWx1WlZObGRIUmxjbDlmSjEwZ1BTQm1ZV3h6WlR0Y2JpQWdaR1ZtWVhWc2RFMWxkR2h2WkZkb2FYUmxUR2x6ZEZzblgxOXNiMjlyZFhCSFpYUjBaWEpmWHlkZElEMGdabUZzYzJVN1hHNWNiaUFnYkdWMElHUmxabUYxYkhSUWNtOXdaWEowZVZkb2FYUmxUR2x6ZENBOUlFOWlhbVZqZEM1amNtVmhkR1VvYm5Wc2JDazdYRzRnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MXdjbTkwYjF4dUlDQmtaV1poZFd4MFVISnZjR1Z5ZEhsWGFHbDBaVXhwYzNSYkoxOWZjSEp2ZEc5Zlh5ZGRJRDBnWm1Gc2MyVTdYRzVjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0J3Y205d1pYSjBhV1Z6T2lCN1hHNGdJQ0FnSUNCM2FHbDBaV3hwYzNRNklHTnlaV0YwWlU1bGQweHZiMnQxY0U5aWFtVmpkQ2hjYmlBZ0lDQWdJQ0FnWkdWbVlYVnNkRkJ5YjNCbGNuUjVWMmhwZEdWTWFYTjBMRnh1SUNBZ0lDQWdJQ0J5ZFc1MGFXMWxUM0IwYVc5dWN5NWhiR3h2ZDJWa1VISnZkRzlRY205d1pYSjBhV1Z6WEc0Z0lDQWdJQ0FwTEZ4dUlDQWdJQ0FnWkdWbVlYVnNkRlpoYkhWbE9pQnlkVzUwYVcxbFQzQjBhVzl1Y3k1aGJHeHZkMUJ5YjNSdlVISnZjR1Z5ZEdsbGMwSjVSR1ZtWVhWc2RGeHVJQ0FnSUgwc1hHNGdJQ0FnYldWMGFHOWtjem9nZTF4dUlDQWdJQ0FnZDJocGRHVnNhWE4wT2lCamNtVmhkR1ZPWlhkTWIyOXJkWEJQWW1wbFkzUW9YRzRnSUNBZ0lDQWdJR1JsWm1GMWJIUk5aWFJvYjJSWGFHbDBaVXhwYzNRc1hHNGdJQ0FnSUNBZ0lISjFiblJwYldWUGNIUnBiMjV6TG1Gc2JHOTNaV1JRY205MGIwMWxkR2h2WkhOY2JpQWdJQ0FnSUNrc1hHNGdJQ0FnSUNCa1pXWmhkV3gwVm1Gc2RXVTZJSEoxYm5ScGJXVlBjSFJwYjI1ekxtRnNiRzkzVUhKdmRHOU5aWFJvYjJSelFubEVaV1poZFd4MFhHNGdJQ0FnZlZ4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtVnpkV3gwU1hOQmJHeHZkMlZrS0hKbGMzVnNkQ3dnY0hKdmRHOUJZMk5sYzNORGIyNTBjbTlzTENCd2NtOXdaWEowZVU1aGJXVXBJSHRjYmlBZ2FXWWdLSFI1Y0dWdlppQnlaWE4xYkhRZ1BUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZMmhsWTJ0WGFHbDBaVXhwYzNRb2NISnZkRzlCWTJObGMzTkRiMjUwY205c0xtMWxkR2h2WkhNc0lIQnliM0JsY25SNVRtRnRaU2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJR05vWldOclYyaHBkR1ZNYVhOMEtIQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDNXdjbTl3WlhKMGFXVnpMQ0J3Y205d1pYSjBlVTVoYldVcE8xeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR05vWldOclYyaHBkR1ZNYVhOMEtIQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJFWnZjbFI1Y0dVc0lIQnliM0JsY25SNVRtRnRaU2tnZTF4dUlDQnBaaUFvY0hKdmRHOUJZMk5sYzNORGIyNTBjbTlzUm05eVZIbHdaUzUzYUdsMFpXeHBjM1JiY0hKdmNHVnlkSGxPWVcxbFhTQWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJSEJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRVp2Y2xSNWNHVXVkMmhwZEdWc2FYTjBXM0J5YjNCbGNuUjVUbUZ0WlYwZ1BUMDlJSFJ5ZFdVN1hHNGdJSDFjYmlBZ2FXWWdLSEJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRVp2Y2xSNWNHVXVaR1ZtWVhWc2RGWmhiSFZsSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQnlaWFIxY200Z2NISnZkRzlCWTJObGMzTkRiMjUwY205c1JtOXlWSGx3WlM1a1pXWmhkV3gwVm1Gc2RXVTdYRzRnSUgxY2JpQWdiRzluVlc1bGVIQmxZMlZrVUhKdmNHVnlkSGxCWTJObGMzTlBibU5sS0hCeWIzQmxjblI1VG1GdFpTazdYRzRnSUhKbGRIVnliaUJtWVd4elpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOW5WVzVsZUhCbFkyVmtVSEp2Y0dWeWRIbEJZMk5sYzNOUGJtTmxLSEJ5YjNCbGNuUjVUbUZ0WlNrZ2UxeHVJQ0JwWmlBb2JHOW5aMlZrVUhKdmNHVnlkR2xsYzF0d2NtOXdaWEowZVU1aGJXVmRJQ0U5UFNCMGNuVmxLU0I3WEc0Z0lDQWdiRzluWjJWa1VISnZjR1Z5ZEdsbGMxdHdjbTl3WlhKMGVVNWhiV1ZkSUQwZ2RISjFaVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LRnh1SUNBZ0lDQWdKMlZ5Y205eUp5eGNiaUFnSUNBZ0lHQklZVzVrYkdWaVlYSnpPaUJCWTJObGMzTWdhR0Z6SUdKbFpXNGdaR1Z1YVdWa0lIUnZJSEpsYzI5c2RtVWdkR2hsSUhCeWIzQmxjblI1SUZ3aUpIdHdjbTl3WlhKMGVVNWhiV1Y5WENJZ1ltVmpZWFZ6WlNCcGRDQnBjeUJ1YjNRZ1lXNGdYQ0p2ZDI0Z2NISnZjR1Z5ZEhsY0lpQnZaaUJwZEhNZ2NHRnlaVzUwTGx4Y2JtQWdLMXh1SUNBZ0lDQWdJQ0JnV1c5MUlHTmhiaUJoWkdRZ1lTQnlkVzUwYVcxbElHOXdkR2x2YmlCMGJ5QmthWE5oWW14bElIUm9aU0JqYUdWamF5QnZjaUIwYUdseklIZGhjbTVwYm1jNlhGeHVZQ0FyWEc0Z0lDQWdJQ0FnSUdCVFpXVWdhSFIwY0hNNkx5OW9ZVzVrYkdWaVlYSnphbk11WTI5dEwyRndhUzF5WldabGNtVnVZMlV2Y25WdWRHbHRaUzF2Y0hScGIyNXpMbWgwYld3amIzQjBhVzl1Y3kxMGJ5MWpiMjUwY205c0xYQnliM1J2ZEhsd1pTMWhZMk5sYzNNZ1ptOXlJR1JsZEdGcGJITmdYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZ6WlhSTWIyZG5aV1JRY205d1pYSjBhV1Z6S0NrZ2UxeHVJQ0JQWW1wbFkzUXVhMlY1Y3loc2IyZG5aV1JRY205d1pYSjBhV1Z6S1M1bWIzSkZZV05vS0hCeWIzQmxjblI1VG1GdFpTQTlQaUI3WEc0Z0lDQWdaR1ZzWlhSbElHeHZaMmRsWkZCeWIzQmxjblJwWlhOYmNISnZjR1Z5ZEhsT1lXMWxYVHRjYmlBZ2ZTazdYRzU5WEc0aVhYMD1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuSGFuZGxlYmFyc0Vudmlyb25tZW50ID0gSGFuZGxlYmFyc0Vudmlyb25tZW50O1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbnZhciBfaGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuXG52YXIgX2RlY29yYXRvcnMgPSByZXF1aXJlKCcuL2RlY29yYXRvcnMnKTtcblxudmFyIF9sb2dnZXIgPSByZXF1aXJlKCcuL2xvZ2dlcicpO1xuXG52YXIgX2xvZ2dlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2dnZXIpO1xuXG52YXIgX2ludGVybmFsUHJvdG9BY2Nlc3MgPSByZXF1aXJlKCcuL2ludGVybmFsL3Byb3RvLWFjY2VzcycpO1xuXG52YXIgVkVSU0lPTiA9ICc0LjcuNic7XG5leHBvcnRzLlZFUlNJT04gPSBWRVJTSU9OO1xudmFyIENPTVBJTEVSX1JFVklTSU9OID0gODtcbmV4cG9ydHMuQ09NUElMRVJfUkVWSVNJT04gPSBDT01QSUxFUl9SRVZJU0lPTjtcbnZhciBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gPSA3O1xuXG5leHBvcnRzLkxBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiA9IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTjtcbnZhciBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz09IDEueC54JyxcbiAgNTogJz09IDIuMC4wLWFscGhhLngnLFxuICA2OiAnPj0gMi4wLjAtYmV0YS4xJyxcbiAgNzogJz49IDQuMC4wIDw0LjMuMCcsXG4gIDg6ICc+PSA0LjMuMCdcbn07XG5cbmV4cG9ydHMuUkVWSVNJT05fQ0hBTkdFUyA9IFJFVklTSU9OX0NIQU5HRVM7XG52YXIgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5mdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIF9oZWxwZXJzLnJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIF9kZWNvcmF0b3JzLnJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBfbG9nZ2VyMlsnZGVmYXVsdCddLFxuICBsb2c6IF9sb2dnZXIyWydkZWZhdWx0J10ubG9nLFxuXG4gIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiByZWdpc3RlckhlbHBlcihuYW1lLCBmbikge1xuICAgIGlmIChfdXRpbHMudG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIF91dGlscy5leHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiB1bnJlZ2lzdGVySGVscGVyKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24gcmVnaXN0ZXJQYXJ0aWFsKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIF91dGlscy5leHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0F0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIicgKyBuYW1lICsgJ1wiIGFzIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJ0aWFsc1tuYW1lXSA9IHBhcnRpYWw7XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24gdW5yZWdpc3RlclBhcnRpYWwobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLnBhcnRpYWxzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiByZWdpc3RlckRlY29yYXRvcihuYW1lLCBmbikge1xuICAgIGlmIChfdXRpbHMudG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGRlY29yYXRvcnMnKTtcbiAgICAgIH1cbiAgICAgIF91dGlscy5leHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiB1bnJlZ2lzdGVyRGVjb3JhdG9yKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5kZWNvcmF0b3JzW25hbWVdO1xuICB9LFxuICAvKipcbiAgICogUmVzZXQgdGhlIG1lbW9yeSBvZiBpbGxlZ2FsIHByb3BlcnR5IGFjY2Vzc2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9nZ2VkLlxuICAgKiBAZGVwcmVjYXRlZCBzaG91bGQgb25seSBiZSB1c2VkIGluIGhhbmRsZWJhcnMgdGVzdC1jYXNlc1xuICAgKi9cbiAgcmVzZXRMb2dnZWRQcm9wZXJ0eUFjY2Vzc2VzOiBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgX2ludGVybmFsUHJvdG9BY2Nlc3MucmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbnZhciBsb2cgPSBfbG9nZ2VyMlsnZGVmYXVsdCddLmxvZztcblxuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmNyZWF0ZUZyYW1lID0gX3V0aWxzLmNyZWF0ZUZyYW1lO1xuZXhwb3J0cy5sb2dnZXIgPSBfbG9nZ2VyMlsnZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMkpoYzJVdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN2NVSkJRVGhETEZOQlFWTTdPM2xDUVVOcVF5eGhRVUZoT3pzN08zVkNRVU5KTEZkQlFWYzdPekJDUVVOU0xHTkJRV003TzNOQ1FVTnlReXhWUVVGVk96czdPMjFEUVVOVExIbENRVUY1UWpzN1FVRkZlRVFzU1VGQlRTeFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPenRCUVVONFFpeEpRVUZOTEdsQ1FVRnBRaXhIUVVGSExFTkJRVU1zUTBGQlF6czdRVUZETlVJc1NVRkJUU3hwUTBGQmFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN096dEJRVVUxUXl4SlFVRk5MR2RDUVVGblFpeEhRVUZITzBGQlF6bENMRWRCUVVNc1JVRkJSU3hoUVVGaE8wRkJRMmhDTEVkQlFVTXNSVUZCUlN4bFFVRmxPMEZCUTJ4Q0xFZEJRVU1zUlVGQlJTeGxRVUZsTzBGQlEyeENMRWRCUVVNc1JVRkJSU3hWUVVGVk8wRkJRMklzUjBGQlF5eEZRVUZGTEd0Q1FVRnJRanRCUVVOeVFpeEhRVUZETEVWQlFVVXNhVUpCUVdsQ08wRkJRM0JDTEVkQlFVTXNSVUZCUlN4cFFrRkJhVUk3UVVGRGNFSXNSMEZCUXl4RlFVRkZMRlZCUVZVN1EwRkRaQ3hEUVVGRE96czdRVUZGUml4SlFVRk5MRlZCUVZVc1IwRkJSeXhwUWtGQmFVSXNRMEZCUXpzN1FVRkZPVUlzVTBGQlV5eHhRa0ZCY1VJc1EwRkJReXhQUVVGUExFVkJRVVVzVVVGQlVTeEZRVUZGTEZWQlFWVXNSVUZCUlR0QlFVTnVSU3hOUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNTVUZCU1N4RlFVRkZMRU5CUVVNN1FVRkROMElzVFVGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4UlFVRlJMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJReTlDTEUxQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1ZVRkJWU3hKUVVGSkxFVkJRVVVzUTBGQlF6czdRVUZGYmtNc2EwTkJRWFZDTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUXpkQ0xIZERRVUV3UWl4SlFVRkpMRU5CUVVNc1EwRkJRenREUVVOcVF6czdRVUZGUkN4eFFrRkJjVUlzUTBGQlF5eFRRVUZUTEVkQlFVYzdRVUZEYUVNc1lVRkJWeXhGUVVGRkxIRkNRVUZ4UWpzN1FVRkZiRU1zVVVGQlRTeHhRa0ZCVVR0QlFVTmtMRXRCUVVjc1JVRkJSU3h2UWtGQlR5eEhRVUZIT3p0QlFVVm1MR2RDUVVGakxFVkJRVVVzZDBKQlFWTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1JVRkJSVHRCUVVOcVF5eFJRVUZKTEdkQ1FVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eFZRVUZWTEVWQlFVVTdRVUZEZEVNc1ZVRkJTU3hGUVVGRkxFVkJRVVU3UVVGRFRpeGpRVUZOTERKQ1FVRmpMSGxEUVVGNVF5eERRVUZETEVOQlFVTTdUMEZEYUVVN1FVRkRSQ3h2UWtGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRelZDTEUxQlFVMDdRVUZEVEN4VlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0TFFVTjZRanRIUVVOR08wRkJRMFFzYTBKQlFXZENMRVZCUVVVc01FSkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF5OUNMRmRCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SFFVTXpRanM3UVVGRlJDeHBRa0ZCWlN4RlFVRkZMSGxDUVVGVExFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVTdRVUZEZGtNc1VVRkJTU3huUWtGQlV5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8wRkJRM1JETEc5Q1FVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTMEZETjBJc1RVRkJUVHRCUVVOTUxGVkJRVWtzVDBGQlR5eFBRVUZQTEV0QlFVc3NWMEZCVnl4RlFVRkZPMEZCUTJ4RExHTkJRVTBzZVVWQlEzZERMRWxCUVVrc2IwSkJRMnBFTEVOQlFVTTdUMEZEU0R0QlFVTkVMRlZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRPMHRCUXk5Q08wZEJRMFk3UVVGRFJDeHRRa0ZCYVVJc1JVRkJSU3d5UWtGQlV5eEpRVUZKTEVWQlFVVTdRVUZEYUVNc1YwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGRCUXpWQ096dEJRVVZFTEcxQ1FVRnBRaXhGUVVGRkxESkNRVUZUTEVsQlFVa3NSVUZCUlN4RlFVRkZMRVZCUVVVN1FVRkRjRU1zVVVGQlNTeG5Ra0ZCVXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzVlVGQlZTeEZRVUZGTzBGQlEzUkRMRlZCUVVrc1JVRkJSU3hGUVVGRk8wRkJRMDRzWTBGQlRTd3lRa0ZCWXl3MFEwRkJORU1zUTBGQlF5eERRVUZETzA5QlEyNUZPMEZCUTBRc2IwSkJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVNdlFpeE5RVUZOTzBGQlEwd3NWVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZETlVJN1IwRkRSanRCUVVORUxIRkNRVUZ0UWl4RlFVRkZMRFpDUVVGVExFbEJRVWtzUlVGQlJUdEJRVU5zUXl4WFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdSMEZET1VJN096czdPMEZCUzBRc05rSkJRVEpDTEVWQlFVRXNkVU5CUVVjN1FVRkROVUlzWjBSQlFYVkNMRU5CUVVNN1IwRkRla0k3UTBGRFJpeERRVUZET3p0QlFVVkxMRWxCUVVrc1IwRkJSeXhIUVVGSExHOUNRVUZQTEVkQlFVY3NRMEZCUXpzN08xRkJSVzVDTEZkQlFWYzdVVUZCUlN4TlFVRk5JaXdpWm1sc1pTSTZJbUpoYzJVdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJqY21WaGRHVkdjbUZ0WlN3Z1pYaDBaVzVrTENCMGIxTjBjbWx1WnlCOUlHWnliMjBnSnk0dmRYUnBiSE1uTzF4dWFXMXdiM0owSUVWNFkyVndkR2x2YmlCbWNtOXRJQ2N1TDJWNFkyVndkR2x2YmljN1hHNXBiWEJ2Y25RZ2V5QnlaV2RwYzNSbGNrUmxabUYxYkhSSVpXeHdaWEp6SUgwZ1puSnZiU0FuTGk5b1pXeHdaWEp6Snp0Y2JtbHRjRzl5ZENCN0lISmxaMmx6ZEdWeVJHVm1ZWFZzZEVSbFkyOXlZWFJ2Y25NZ2ZTQm1jbTl0SUNjdUwyUmxZMjl5WVhSdmNuTW5PMXh1YVcxd2IzSjBJR3h2WjJkbGNpQm1jbTl0SUNjdUwyeHZaMmRsY2ljN1hHNXBiWEJ2Y25RZ2V5QnlaWE5sZEV4dloyZGxaRkJ5YjNCbGNuUnBaWE1nZlNCbWNtOXRJQ2N1TDJsdWRHVnlibUZzTDNCeWIzUnZMV0ZqWTJWemN5YzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQldSVkpUU1U5T0lEMGdKelF1Tnk0Mkp6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRFQwMVFTVXhGVWw5U1JWWkpVMGxQVGlBOUlEZzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1RFRlRWRjlEVDAxUVFWUkpRa3hGWDBOUFRWQkpURVZTWDFKRlZrbFRTVTlPSUQwZ056dGNibHh1Wlhod2IzSjBJR052Ym5OMElGSkZWa2xUU1U5T1gwTklRVTVIUlZNZ1BTQjdYRzRnSURFNklDYzhQU0F4TGpBdWNtTXVNaWNzSUM4dklERXVNQzV5WXk0eUlHbHpJR0ZqZEhWaGJHeDVJSEpsZGpJZ1luVjBJR1J2WlhOdUozUWdjbVZ3YjNKMElHbDBYRzRnSURJNklDYzlQU0F4TGpBdU1DMXlZeTR6Snl4Y2JpQWdNem9nSnowOUlERXVNQzR3TFhKakxqUW5MRnh1SUNBME9pQW5QVDBnTVM1NExuZ25MRnh1SUNBMU9pQW5QVDBnTWk0d0xqQXRZV3h3YUdFdWVDY3NYRzRnSURZNklDYytQU0F5TGpBdU1DMWlaWFJoTGpFbkxGeHVJQ0EzT2lBblBqMGdOQzR3TGpBZ1BEUXVNeTR3Snl4Y2JpQWdPRG9nSno0OUlEUXVNeTR3SjF4dWZUdGNibHh1WTI5dWMzUWdiMkpxWldOMFZIbHdaU0E5SUNkYmIySnFaV04wSUU5aWFtVmpkRjBuTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1NHRnVaR3hsWW1GeWMwVnVkbWx5YjI1dFpXNTBLR2hsYkhCbGNuTXNJSEJoY25ScFlXeHpMQ0JrWldOdmNtRjBiM0p6S1NCN1hHNGdJSFJvYVhNdWFHVnNjR1Z5Y3lBOUlHaGxiSEJsY25NZ2ZId2dlMzA3WEc0Z0lIUm9hWE11Y0dGeWRHbGhiSE1nUFNCd1lYSjBhV0ZzY3lCOGZDQjdmVHRjYmlBZ2RHaHBjeTVrWldOdmNtRjBiM0p6SUQwZ1pHVmpiM0poZEc5eWN5QjhmQ0I3ZlR0Y2JseHVJQ0J5WldkcGMzUmxja1JsWm1GMWJIUklaV3h3WlhKektIUm9hWE1wTzF4dUlDQnlaV2RwYzNSbGNrUmxabUYxYkhSRVpXTnZjbUYwYjNKektIUm9hWE1wTzF4dWZWeHVYRzVJWVc1a2JHVmlZWEp6Ulc1MmFYSnZibTFsYm5RdWNISnZkRzkwZVhCbElEMGdlMXh1SUNCamIyNXpkSEoxWTNSdmNqb2dTR0Z1Wkd4bFltRnljMFZ1ZG1seWIyNXRaVzUwTEZ4dVhHNGdJR3h2WjJkbGNqb2diRzluWjJWeUxGeHVJQ0JzYjJjNklHeHZaMmRsY2k1c2IyY3NYRzVjYmlBZ2NtVm5hWE4wWlhKSVpXeHdaWEk2SUdaMWJtTjBhVzl1S0c1aGJXVXNJR1p1S1NCN1hHNGdJQ0FnYVdZZ0tIUnZVM1J5YVc1bkxtTmhiR3dvYm1GdFpTa2dQVDA5SUc5aWFtVmpkRlI1Y0dVcElIdGNiaUFnSUNBZ0lHbG1JQ2htYmlrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLQ2RCY21jZ2JtOTBJSE4xY0hCdmNuUmxaQ0IzYVhSb0lHMTFiSFJwY0d4bElHaGxiSEJsY25NbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHVjRkR1Z1WkNoMGFHbHpMbWhsYkhCbGNuTXNJRzVoYldVcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtaGxiSEJsY25OYmJtRnRaVjBnUFNCbWJqdGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIVnVjbVZuYVhOMFpYSklaV3h3WlhJNklHWjFibU4wYVc5dUtHNWhiV1VwSUh0Y2JpQWdJQ0JrWld4bGRHVWdkR2hwY3k1b1pXeHdaWEp6VzI1aGJXVmRPMXh1SUNCOUxGeHVYRzRnSUhKbFoybHpkR1Z5VUdGeWRHbGhiRG9nWm5WdVkzUnBiMjRvYm1GdFpTd2djR0Z5ZEdsaGJDa2dlMXh1SUNBZ0lHbG1JQ2gwYjFOMGNtbHVaeTVqWVd4c0tHNWhiV1VwSUQwOVBTQnZZbXBsWTNSVWVYQmxLU0I3WEc0Z0lDQWdJQ0JsZUhSbGJtUW9kR2hwY3k1d1lYSjBhV0ZzY3l3Z2JtRnRaU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjR0Z5ZEdsaGJDQTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVY0WTJWd2RHbHZiaWhjYmlBZ0lDQWdJQ0FnSUNCZ1FYUjBaVzF3ZEdsdVp5QjBieUJ5WldkcGMzUmxjaUJoSUhCaGNuUnBZV3dnWTJGc2JHVmtJRndpSkh0dVlXMWxmVndpSUdGeklIVnVaR1ZtYVc1bFpHQmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWNHRnlkR2xoYkhOYmJtRnRaVjBnUFNCd1lYSjBhV0ZzTzF4dUlDQWdJSDFjYmlBZ2ZTeGNiaUFnZFc1eVpXZHBjM1JsY2xCaGNuUnBZV3c2SUdaMWJtTjBhVzl1S0c1aGJXVXBJSHRjYmlBZ0lDQmtaV3hsZEdVZ2RHaHBjeTV3WVhKMGFXRnNjMXR1WVcxbFhUdGNiaUFnZlN4Y2JseHVJQ0J5WldkcGMzUmxja1JsWTI5eVlYUnZjam9nWm5WdVkzUnBiMjRvYm1GdFpTd2dabTRwSUh0Y2JpQWdJQ0JwWmlBb2RHOVRkSEpwYm1jdVkyRnNiQ2h1WVcxbEtTQTlQVDBnYjJKcVpXTjBWSGx3WlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR1p1S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMEZ5WnlCdWIzUWdjM1Z3Y0c5eWRHVmtJSGRwZEdnZ2JYVnNkR2x3YkdVZ1pHVmpiM0poZEc5eWN5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdaWGgwWlc1a0tIUm9hWE11WkdWamIzSmhkRzl5Y3l3Z2JtRnRaU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11WkdWamIzSmhkRzl5YzF0dVlXMWxYU0E5SUdadU8xeHVJQ0FnSUgxY2JpQWdmU3hjYmlBZ2RXNXlaV2RwYzNSbGNrUmxZMjl5WVhSdmNqb2dablZ1WTNScGIyNG9ibUZ0WlNrZ2UxeHVJQ0FnSUdSbGJHVjBaU0IwYUdsekxtUmxZMjl5WVhSdmNuTmJibUZ0WlYwN1hHNGdJSDBzWEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWE5sZENCMGFHVWdiV1Z0YjNKNUlHOW1JR2xzYkdWbllXd2djSEp2Y0dWeWRIa2dZV05qWlhOelpYTWdkR2hoZENCb1lYWmxJR0ZzY21WaFpIa2dZbVZsYmlCc2IyZG5aV1F1WEc0Z0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUhOb2IzVnNaQ0J2Ym14NUlHSmxJSFZ6WldRZ2FXNGdhR0Z1Wkd4bFltRnljeUIwWlhOMExXTmhjMlZ6WEc0Z0lDQXFMMXh1SUNCeVpYTmxkRXh2WjJkbFpGQnliM0JsY25SNVFXTmpaWE56WlhNb0tTQjdYRzRnSUNBZ2NtVnpaWFJNYjJkblpXUlFjbTl3WlhKMGFXVnpLQ2s3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCc1pYUWdiRzluSUQwZ2JHOW5aMlZ5TG14dlp6dGNibHh1Wlhod2IzSjBJSHNnWTNKbFlYUmxSbkpoYldVc0lHeHZaMmRsY2lCOU8xeHVJbDE5XG4iLCIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJycgKyB0aGlzLnN0cmluZztcbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFNhZmVTdHJpbmc7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDNOaFptVXRjM1J5YVc1bkxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3UVVGRFFTeFRRVUZUTEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVN1FVRkRNVUlzVFVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNN1EwRkRkRUk3TzBGQlJVUXNWVUZCVlN4RFFVRkRMRk5CUVZNc1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlZTeERRVUZETEZOQlFWTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1dVRkJWenRCUVVOMlJTeFRRVUZQTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRE8wTkJRM3BDTEVOQlFVTTdPM0ZDUVVWaExGVkJRVlVpTENKbWFXeGxJam9pYzJGbVpTMXpkSEpwYm1jdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2THlCQ2RXbHNaQ0J2ZFhRZ2IzVnlJR0poYzJsaklGTmhabVZUZEhKcGJtY2dkSGx3WlZ4dVpuVnVZM1JwYjI0Z1UyRm1aVk4wY21sdVp5aHpkSEpwYm1jcElIdGNiaUFnZEdocGN5NXpkSEpwYm1jZ1BTQnpkSEpwYm1jN1hHNTlYRzVjYmxOaFptVlRkSEpwYm1jdWNISnZkRzkwZVhCbExuUnZVM1J5YVc1bklEMGdVMkZtWlZOMGNtbHVaeTV3Y205MGIzUjVjR1V1ZEc5SVZFMU1JRDBnWm5WdVkzUnBiMjRvS1NCN1hHNGdJSEpsZEhWeWJpQW5KeUFySUhSb2FYTXVjM1J5YVc1bk8xeHVmVHRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnVTJGbVpWTjBjbWx1Wnp0Y2JpSmRmUT09XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLndyYXBIZWxwZXIgPSB3cmFwSGVscGVyO1xuXG5mdW5jdGlvbiB3cmFwSGVscGVyKGhlbHBlciwgdHJhbnNmb3JtT3B0aW9uc0ZuKSB7XG4gIGlmICh0eXBlb2YgaGVscGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGFwcGFyZW50bHkgaXQgZG9lcyBpbiBodHRwczovL2dpdGh1Yi5jb20vd3ljYXRzL2hhbmRsZWJhcnMuanMvaXNzdWVzLzE2MzlcbiAgICAvLyBXZSB0cnkgdG8gbWFrZSB0aGUgd3JhcHBlciBsZWFzdC1pbnZhc2l2ZSBieSBub3Qgd3JhcHBpbmcgaXQsIGlmIHRoZSBoZWxwZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4gICAgcmV0dXJuIGhlbHBlcjtcbiAgfVxuICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uIHdyYXBwZXIoKSAvKiBkeW5hbWljIGFyZ3VtZW50cyAqL3tcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSA9IHRyYW5zZm9ybU9wdGlvbnNGbihvcHRpb25zKTtcbiAgICByZXR1cm4gaGVscGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIHJldHVybiB3cmFwcGVyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJsdWRHVnlibUZzTDNkeVlYQklaV3h3WlhJdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3UVVGQlR5eFRRVUZUTEZWQlFWVXNRMEZCUXl4TlFVRk5MRVZCUVVVc2EwSkJRV3RDTEVWQlFVVTdRVUZEY2tRc1RVRkJTU3hQUVVGUExFMUJRVTBzUzBGQlN5eFZRVUZWTEVWQlFVVTdPenRCUVVkb1F5eFhRVUZQTEUxQlFVMHNRMEZCUXp0SFFVTm1PMEZCUTBRc1RVRkJTU3hQUVVGUExFZEJRVWNzVTBGQlZpeFBRVUZQTERCQ1FVRnhRenRCUVVNNVF5eFJRVUZOTEU5QlFVOHNSMEZCUnl4VFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTm9SQ3hoUVVGVExFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhyUWtGQmEwSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVNNVJDeFhRVUZQTEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzBkQlEzUkRMRU5CUVVNN1FVRkRSaXhUUVVGUExFOUJRVThzUTBGQlF6dERRVU5vUWlJc0ltWnBiR1VpT2lKM2NtRndTR1ZzY0dWeUxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1oxYm1OMGFXOXVJSGR5WVhCSVpXeHdaWElvYUdWc2NHVnlMQ0IwY21GdWMyWnZjbTFQY0hScGIyNXpSbTRwSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUJvWld4d1pYSWdJVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNBdkx5QlVhR2x6SUhOb2IzVnNaQ0J1YjNRZ2FHRndjR1Z1TENCaWRYUWdZWEJ3WVhKbGJuUnNlU0JwZENCa2IyVnpJR2x1SUdoMGRIQnpPaTh2WjJsMGFIVmlMbU52YlM5M2VXTmhkSE12YUdGdVpHeGxZbUZ5Y3k1cWN5OXBjM04xWlhNdk1UWXpPVnh1SUNBZ0lDOHZJRmRsSUhSeWVTQjBieUJ0WVd0bElIUm9aU0IzY21Gd2NHVnlJR3hsWVhOMExXbHVkbUZ6YVhabElHSjVJRzV2ZENCM2NtRndjR2x1WnlCcGRDd2dhV1lnZEdobElHaGxiSEJsY2lCcGN5QnViM1FnWVNCbWRXNWpkR2x2Ymk1Y2JpQWdJQ0J5WlhSMWNtNGdhR1ZzY0dWeU8xeHVJQ0I5WEc0Z0lHeGxkQ0IzY21Gd2NHVnlJRDBnWm5WdVkzUnBiMjRvTHlvZ1pIbHVZVzFwWXlCaGNtZDFiV1Z1ZEhNZ0tpOHBJSHRjYmlBZ0lDQmpiMjV6ZENCdmNIUnBiMjV6SUQwZ1lYSm5kVzFsYm5SelcyRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ0xTQXhYVHRjYmlBZ0lDQmhjbWQxYldWdWRITmJZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQXRJREZkSUQwZ2RISmhibk5tYjNKdFQzQjBhVzl1YzBadUtHOXdkR2x2Ym5NcE8xeHVJQ0FnSUhKbGRIVnliaUJvWld4d1pYSXVZWEJ3Ykhrb2RHaHBjeXdnWVhKbmRXMWxiblJ6S1R0Y2JpQWdmVHRjYmlBZ2NtVjBkWEp1SUhkeVlYQndaWEk3WEc1OVhHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNoZWNrUmV2aXNpb24gPSBjaGVja1JldmlzaW9uO1xuZXhwb3J0cy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuZXhwb3J0cy53cmFwUHJvZ3JhbSA9IHdyYXBQcm9ncmFtO1xuZXhwb3J0cy5yZXNvbHZlUGFydGlhbCA9IHJlc29sdmVQYXJ0aWFsO1xuZXhwb3J0cy5pbnZva2VQYXJ0aWFsID0gaW52b2tlUGFydGlhbDtcbmV4cG9ydHMubm9vcCA9IG5vb3A7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmpbJ2RlZmF1bHQnXSA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBVdGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF91dGlscyk7XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi9leGNlcHRpb24nKTtcblxudmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTtcblxudmFyIF9iYXNlID0gcmVxdWlyZSgnLi9iYXNlJyk7XG5cbnZhciBfaGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuXG52YXIgX2ludGVybmFsV3JhcEhlbHBlciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvd3JhcEhlbHBlcicpO1xuXG52YXIgX2ludGVybmFsUHJvdG9BY2Nlc3MgPSByZXF1aXJlKCcuL2ludGVybmFsL3Byb3RvLWFjY2VzcycpO1xuXG5mdW5jdGlvbiBjaGVja1JldmlzaW9uKGNvbXBpbGVySW5mbykge1xuICB2YXIgY29tcGlsZXJSZXZpc2lvbiA9IGNvbXBpbGVySW5mbyAmJiBjb21waWxlckluZm9bMF0gfHwgMSxcbiAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChjb21waWxlclJldmlzaW9uID49IF9iYXNlLkxBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJiBjb21waWxlclJldmlzaW9uIDw9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBfYmFzZS5MQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICB2YXIgcnVudGltZVZlcnNpb25zID0gX2Jhc2UuUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgICBjb21waWxlclZlcnNpb25zID0gX2Jhc2UuUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArICdQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgcnVudGltZVZlcnNpb25zICsgJykgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgnICsgY29tcGlsZXJWZXJzaW9ucyArICcpLicpO1xuICB9IGVsc2Uge1xuICAgIC8vIFVzZSB0aGUgZW1iZWRkZWQgdmVyc2lvbiBpbmZvIHNpbmNlIHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHJldmlzaW9uIHlldFxuICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgKyAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgY29tcGlsZXJJbmZvWzFdICsgJykuJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7XG4gICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc2V1ZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHByZWNvbXBpbGVkIHRlbXBsYXRlcyB3aXRoIGNvbXBpbGVyLXZlcnNpb24gNyAoPDQuMy4wKVxuICB2YXIgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID0gdGVtcGxhdGVTcGVjLmNvbXBpbGVyICYmIHRlbXBsYXRlU3BlYy5jb21waWxlclswXSA9PT0gNztcblxuICBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsV3JhcHBlcihwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgICAgY29udGV4dCA9IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTtcbiAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIHZhciBleHRlbmRlZE9wdGlvbnMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGhvb2tzOiB0aGlzLmhvb2tzLFxuICAgICAgcHJvdG9BY2Nlc3NDb250cm9sOiB0aGlzLnByb3RvQWNjZXNzQ29udHJvbFxuICAgIH0pO1xuXG4gICAgdmFyIHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcblxuICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBlbnYuY29tcGlsZSkge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdID0gZW52LmNvbXBpbGUocGFydGlhbCwgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucywgZW52KTtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0LCBleHRlbmRlZE9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLmluZGVudCkge1xuICAgICAgICB2YXIgbGluZXMgPSByZXN1bHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmICghbGluZXNbaV0gJiYgaSArIDEgPT09IGwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpbmVzW2ldID0gb3B0aW9ucy5pbmRlbnQgKyBsaW5lc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgdmFyIGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uIHN0cmljdChvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaiwge1xuICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbiBsb29rdXBQcm9wZXJ0eShwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoX2ludGVybmFsUHJvdG9BY2Nlc3MucmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKGRlcHRocywgbmFtZSkge1xuICAgICAgdmFyIGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkZXB0aHNbaV0gJiYgY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KGRlcHRoc1tpXSwgbmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBkZXB0aHNbaV1bbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbWJkYTogZnVuY3Rpb24gbGFtYmRhKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24gZm4oaSkge1xuICAgICAgdmFyIHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uIHByb2dyYW0oaSwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgICAgdmFyIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSxcbiAgICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSh2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlSWZOZWVkZWQ6IGZ1bmN0aW9uIG1lcmdlSWZOZWVkZWQocGFyYW0sIGNvbW1vbikge1xuICAgICAgdmFyIG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIHZhciBkZXB0aHMgPSB1bmRlZmluZWQsXG4gICAgICAgIGJsb2NrUGFyYW1zID0gdGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRlcHRocykge1xuICAgICAgICBkZXB0aHMgPSBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIHZhciBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKG9wdGlvbnMucGFydGlhbHMsIGVudi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5kZWNvcmF0b3JzLCBvcHRpb25zLmRlY29yYXRvcnMpO1xuICAgICAgfVxuXG4gICAgICBjb250YWluZXIuaG9va3MgPSB7fTtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBfaW50ZXJuYWxQcm90b0FjY2Vzcy5jcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wob3B0aW9ucyk7XG5cbiAgICAgIHZhciBrZWVwSGVscGVySW5IZWxwZXJzID0gb3B0aW9ucy5hbGxvd0NhbGxzVG9IZWxwZXJNaXNzaW5nIHx8IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNztcbiAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgJ2hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgJ2Jsb2NrSGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gb3B0aW9ucy5wcm90b0FjY2Vzc0NvbnRyb2w7IC8vIGludGVybmFsIG9wdGlvblxuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBvcHRpb25zLmhlbHBlcnM7XG4gICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBvcHRpb25zLmRlY29yYXRvcnM7XG4gICAgICBjb250YWluZXIuaG9va3MgPSBvcHRpb25zLmhvb2tzO1xuICAgIH1cbiAgfTtcblxuICByZXQuX2NoaWxkID0gZnVuY3Rpb24gKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICBmdW5jdGlvbiBwcm9nKGNvbnRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgdmFyIGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSAmJiAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIG9wdGlvbnMuZGF0YSB8fCBkYXRhLCBibG9ja1BhcmFtcyAmJiBbb3B0aW9ucy5ibG9ja1BhcmFtc10uY29uY2F0KGJsb2NrUGFyYW1zKSwgY3VycmVudERlcHRocyk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuXG5mdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTtcbiAgfVxuICByZXR1cm4gcGFydGlhbDtcbn1cblxuZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgdmFyIGN1cnJlbnRQYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gIG9wdGlvbnMucGFydGlhbCA9IHRydWU7XG4gIGlmIChvcHRpb25zLmlkcykge1xuICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCA9IG9wdGlvbnMuaWRzWzBdIHx8IG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aDtcbiAgfVxuXG4gIHZhciBwYXJ0aWFsQmxvY2sgPSB1bmRlZmluZWQ7XG4gIGlmIChvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4gIT09IG5vb3ApIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgb3B0aW9ucy5kYXRhID0gX2Jhc2UuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgIC8vIFdyYXBwZXIgZnVuY3Rpb24gdG8gZ2V0IGFjY2VzcyB0byBjdXJyZW50UGFydGlhbEJsb2NrIGZyb20gdGhlIGNsb3N1cmVcbiAgICAgIHZhciBmbiA9IG9wdGlvbnMuZm47XG4gICAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoY29udGV4dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcnRpYWwtYmxvY2sgZnJvbSB0aGUgY2xvc3VyZSBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IF9iYXNlLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gY3VycmVudFBhcnRpYWxCbG9jaztcbiAgICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICAgIGlmIChmbi5wYXJ0aWFscykge1xuICAgICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7XG4gICAgcGFydGlhbCA9IHBhcnRpYWxCbG9jaztcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gX2Jhc2UuY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goZnVuY3Rpb24gKGhlbHBlck5hbWUpIHtcbiAgICB2YXIgaGVscGVyID0gbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdID0gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcikge1xuICB2YXIgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiBfaW50ZXJuYWxXcmFwSGVscGVyLndyYXBIZWxwZXIoaGVscGVyLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eTogbG9va3VwUHJvcGVydHkgfSwgb3B0aW9ucyk7XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMM0oxYm5ScGJXVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T3pzN096czdjVUpCUVhWQ0xGTkJRVk03TzBsQlFYQkNMRXRCUVVzN08zbENRVU5MTEdGQlFXRTdPenM3YjBKQlRUVkNMRkZCUVZFN08zVkNRVU50UWl4WFFVRlhPenRyUTBGRGJFSXNkVUpCUVhWQ096dHRRMEZKTTBNc2VVSkJRWGxDT3p0QlFVVjZRaXhUUVVGVExHRkJRV0VzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZETVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4QlFVRkRMRmxCUVZrc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVc3NRMEZCUXp0TlFVTTNSQ3hsUVVGbExEQkNRVUZ2UWl4RFFVRkRPenRCUVVWMFF5eE5RVU5GTEdkQ1FVRm5RaXd5UTBGQmNVTXNTVUZEY2tRc1owSkJRV2RDTERKQ1FVRnhRaXhGUVVOeVF6dEJRVU5CTEZkQlFVODdSMEZEVWpzN1FVRkZSQ3hOUVVGSkxHZENRVUZuUWl3d1EwRkJiME1zUlVGQlJUdEJRVU40UkN4UlFVRk5MR1ZCUVdVc1IwRkJSeXgxUWtGQmFVSXNaVUZCWlN4RFFVRkRPMUZCUTNaRUxHZENRVUZuUWl4SFFVRkhMSFZDUVVGcFFpeG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8wRkJRM2hFTEZWQlFVMHNNa0pCUTBvc2VVWkJRWGxHTEVkQlEzWkdMSEZFUVVGeFJDeEhRVU55UkN4bFFVRmxMRWRCUTJZc2JVUkJRVzFFTEVkQlEyNUVMR2RDUVVGblFpeEhRVU5vUWl4SlFVRkpMRU5CUTFBc1EwRkJRenRIUVVOSUxFMUJRVTA3TzBGQlJVd3NWVUZCVFN3eVFrRkRTaXgzUmtGQmQwWXNSMEZEZEVZc2FVUkJRV2xFTEVkQlEycEVMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGRFppeEpRVUZKTEVOQlExQXNRMEZCUXp0SFFVTklPME5CUTBZN08wRkJSVTBzVTBGQlV5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWRCUVVjc1JVRkJSVHM3UVVGRk1VTXNUVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVOU0xGVkJRVTBzTWtKQlFXTXNiVU5CUVcxRExFTkJRVU1zUTBGQlF6dEhRVU14UkR0QlFVTkVMRTFCUVVrc1EwRkJReXhaUVVGWkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTNaRExGVkJRVTBzTWtKQlFXTXNNa0pCUVRKQ0xFZEJRVWNzVDBGQlR5eFpRVUZaTEVOQlFVTXNRMEZCUXp0SFFVTjRSVHM3UVVGRlJDeGpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZET3pzN08wRkJTV3hFTEV0QlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN08wRkJSelZETEUxQlFVMHNiME5CUVc5RExFZEJRM2hETEZsQlFWa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1dVRkJXU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSVEZFTEZkQlFWTXNiMEpCUVc5Q0xFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVN1FVRkRka1FzVVVGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTJoQ0xHRkJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJ4RUxGVkJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTm1MR1ZCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMDlCUTNaQ08wdEJRMFk3UVVGRFJDeFhRVUZQTEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVjBSU3hSUVVGSkxHVkJRV1VzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRE9VTXNWMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEhkQ1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJN1MwRkROVU1zUTBGQlF5eERRVUZET3p0QlFVVklMRkZCUVVrc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkRjRU1zU1VGQlNTeEZRVU5LTEU5QlFVOHNSVUZEVUN4UFFVRlBMRVZCUTFBc1pVRkJaU3hEUVVOb1FpeERRVUZET3p0QlFVVkdMRkZCUVVrc1RVRkJUU3hKUVVGSkxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJwRExHRkJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlF6RkRMRTlCUVU4c1JVRkRVQ3haUVVGWkxFTkJRVU1zWlVGQlpTeEZRVU0xUWl4SFFVRkhMRU5CUTBvc1EwRkJRenRCUVVOR0xGbEJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNaVUZCWlN4RFFVRkRMRU5CUVVNN1MwRkRia1U3UVVGRFJDeFJRVUZKTEUxQlFVMHNTVUZCU1N4SlFVRkpMRVZCUVVVN1FVRkRiRUlzVlVGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4Q0xGbEJRVWtzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGREwwSXNZVUZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTTFReXhqUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzBGQlF6VkNMR3RDUVVGTk8xZEJRMUE3TzBGQlJVUXNaVUZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JETzBGQlEwUXNZMEZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdUMEZETTBJN1FVRkRSQ3hoUVVGUExFMUJRVTBzUTBGQlF6dExRVU5tTEUxQlFVMDdRVUZEVEN4WlFVRk5MREpDUVVOS0xHTkJRV01zUjBGRFdpeFBRVUZQTEVOQlFVTXNTVUZCU1N4SFFVTmFMREJFUVVFd1JDeERRVU0zUkN4RFFVRkRPMHRCUTBnN1IwRkRSanM3TzBGQlIwUXNUVUZCU1N4VFFVRlRMRWRCUVVjN1FVRkRaQ3hWUVVGTkxFVkJRVVVzWjBKQlFWTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVU3UVVGREwwSXNWVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVRXNRVUZCUXl4RlFVRkZPMEZCUXpGQ0xHTkJRVTBzTWtKQlFXTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1IwRkJSeXh0UWtGQmJVSXNSMEZCUnl4SFFVRkhMRVZCUVVVN1FVRkRNVVFzWVVGQlJ5eEZRVUZGTEVkQlFVYzdVMEZEVkN4RFFVRkRMRU5CUVVNN1QwRkRTanRCUVVORUxHRkJRVThzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUTJ4Q08wRkJRMFFzYTBKQlFXTXNSVUZCUlN4M1FrRkJVeXhOUVVGTkxFVkJRVVVzV1VGQldTeEZRVUZGTzBGQlF6ZERMRlZCUVVrc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0QlFVTnNReXhWUVVGSkxFMUJRVTBzU1VGQlNTeEpRVUZKTEVWQlFVVTdRVUZEYkVJc1pVRkJUeXhOUVVGTkxFTkJRVU03VDBGRFpqdEJRVU5FTEZWQlFVa3NUVUZCVFN4RFFVRkRMRk5CUVZNc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4WlFVRlpMRU5CUVVNc1JVRkJSVHRCUVVNNVJDeGxRVUZQTEUxQlFVMHNRMEZCUXp0UFFVTm1PenRCUVVWRUxGVkJRVWtzY1VOQlFXZENMRTFCUVUwc1JVRkJSU3hUUVVGVExFTkJRVU1zYTBKQlFXdENMRVZCUVVVc1dVRkJXU3hEUVVGRExFVkJRVVU3UVVGRGRrVXNaVUZCVHl4TlFVRk5MRU5CUVVNN1QwRkRaanRCUVVORUxHRkJRVThzVTBGQlV5eERRVUZETzB0QlEyeENPMEZCUTBRc1ZVRkJUU3hGUVVGRkxHZENRVUZUTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVN1FVRkROMElzVlVGQlRTeEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVNeFFpeFhRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUXpWQ0xGbEJRVWtzVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hUUVVGVExFTkJRVU1zWTBGQll5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU53UlN4WlFVRkpMRTFCUVUwc1NVRkJTU3hKUVVGSkxFVkJRVVU3UVVGRGJFSXNhVUpCUVU4c1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUTNoQ08wOUJRMFk3UzBGRFJqdEJRVU5FTEZWQlFVMHNSVUZCUlN4blFrRkJVeXhQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZGTzBGQlEycERMR0ZCUVU4c1QwRkJUeXhQUVVGUExFdEJRVXNzVlVGQlZTeEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETzB0QlEzaEZPenRCUVVWRUxHOUNRVUZuUWl4RlFVRkZMRXRCUVVzc1EwRkJReXhuUWtGQlowSTdRVUZEZUVNc2FVSkJRV0VzUlVGQlJTeHZRa0ZCYjBJN08wRkJSVzVETEUxQlFVVXNSVUZCUlN4WlFVRlRMRU5CUVVNc1JVRkJSVHRCUVVOa0xGVkJRVWtzUjBGQlJ5eEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNeFFpeFRRVUZITEVOQlFVTXNVMEZCVXl4SFFVRkhMRmxCUVZrc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTTdRVUZEZGtNc1lVRkJUeXhIUVVGSExFTkJRVU03UzBGRFdqczdRVUZGUkN4WlFVRlJMRVZCUVVVc1JVRkJSVHRCUVVOYUxGZEJRVThzUlVGQlJTeHBRa0ZCVXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRmRCUVZjc1JVRkJSU3hOUVVGTkxFVkJRVVU3UVVGRGJrVXNWVUZCU1N4alFVRmpMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTTdWVUZEYmtNc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRiRUlzVlVGQlNTeEpRVUZKTEVsQlFVa3NUVUZCVFN4SlFVRkpMRmRCUVZjc1NVRkJTU3h0UWtGQmJVSXNSVUZCUlR0QlFVTjRSQ3h6UWtGQll5eEhRVUZITEZkQlFWY3NRMEZETVVJc1NVRkJTU3hGUVVOS0xFTkJRVU1zUlVGRFJDeEZRVUZGTEVWQlEwWXNTVUZCU1N4RlFVTktMRzFDUVVGdFFpeEZRVU51UWl4WFFVRlhMRVZCUTFnc1RVRkJUU3hEUVVOUUxFTkJRVU03VDBGRFNDeE5RVUZOTEVsQlFVa3NRMEZCUXl4alFVRmpMRVZCUVVVN1FVRkRNVUlzYzBKQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEZkQlFWY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzA5QlF6bEVPMEZCUTBRc1lVRkJUeXhqUVVGakxFTkJRVU03UzBGRGRrSTdPMEZCUlVRc1VVRkJTU3hGUVVGRkxHTkJRVk1zUzBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUlR0QlFVTXpRaXhoUVVGUExFdEJRVXNzU1VGQlNTeExRVUZMTEVWQlFVVXNSVUZCUlR0QlFVTjJRaXhoUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXp0UFFVTjJRanRCUVVORUxHRkJRVThzUzBGQlN5eERRVUZETzB0QlEyUTdRVUZEUkN4cFFrRkJZU3hGUVVGRkxIVkNRVUZUTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVN1FVRkRja01zVlVGQlNTeEhRVUZITEVkQlFVY3NTMEZCU3l4SlFVRkpMRTFCUVUwc1EwRkJRenM3UVVGRk1VSXNWVUZCU1N4TFFVRkxMRWxCUVVrc1RVRkJUU3hKUVVGSkxFdEJRVXNzUzBGQlN5eE5RVUZOTEVWQlFVVTdRVUZEZGtNc1YwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFBRVU4yUXpzN1FVRkZSQ3hoUVVGUExFZEJRVWNzUTBGQlF6dExRVU5hT3p0QlFVVkVMR1ZCUVZjc1JVRkJSU3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXpzN1FVRkZOVUlzVVVGQlNTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTVHRCUVVOcVFpeG5Ra0ZCV1N4RlFVRkZMRmxCUVZrc1EwRkJReXhSUVVGUk8wZEJRM0JETEVOQlFVTTdPMEZCUlVZc1YwRkJVeXhIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZuUWp0UlFVRmtMRTlCUVU4c2VVUkJRVWNzUlVGQlJUczdRVUZEYUVNc1VVRkJTU3hKUVVGSkxFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXpzN1FVRkZlRUlzVDBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOd1FpeFJRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1NVRkJTU3haUVVGWkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlF6VkRMRlZCUVVrc1IwRkJSeXhSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUTJoRE8wRkJRMFFzVVVGQlNTeE5RVUZOTEZsQlFVRTdVVUZEVWl4WFFVRlhMRWRCUVVjc1dVRkJXU3hEUVVGRExHTkJRV01zUjBGQlJ5eEZRVUZGTEVkQlFVY3NVMEZCVXl4RFFVRkRPMEZCUXpkRUxGRkJRVWtzV1VGQldTeERRVUZETEZOQlFWTXNSVUZCUlR0QlFVTXhRaXhWUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZEYkVJc1kwRkJUU3hIUVVOS0xFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVONFFpeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVkQlEyaERMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU03VDBGRGRFSXNUVUZCVFR0QlFVTk1MR05CUVUwc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzA5QlEzQkNPMHRCUTBZN08wRkJSVVFzWVVGQlV5eEpRVUZKTEVOQlFVTXNUMEZCVHl4blFrRkJaMEk3UVVGRGJrTXNZVUZEUlN4RlFVRkZMRWRCUTBZc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGRFppeFRRVUZUTEVWQlExUXNUMEZCVHl4RlFVTlFMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRMnBDTEZOQlFWTXNRMEZCUXl4UlFVRlJMRVZCUTJ4Q0xFbEJRVWtzUlVGRFNpeFhRVUZYTEVWQlExZ3NUVUZCVFN4RFFVTlFMRU5CUTBRN1MwRkRTRHM3UVVGRlJDeFJRVUZKTEVkQlFVY3NhVUpCUVdsQ0xFTkJRM1JDTEZsQlFWa3NRMEZCUXl4SlFVRkpMRVZCUTJwQ0xFbEJRVWtzUlVGRFNpeFRRVUZUTEVWQlExUXNUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hGUVVGRkxFVkJRM0JDTEVsQlFVa3NSVUZEU2l4WFFVRlhMRU5CUTFvc1EwRkJRenRCUVVOR0xGZEJRVThzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRIUVVNdlFqczdRVUZGUkN4TFFVRkhMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF6czdRVUZGYWtJc1MwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZUTEU5QlFVOHNSVUZCUlR0QlFVTTNRaXhSUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTndRaXhWUVVGSkxHRkJRV0VzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOdVJTeHhRMEZCSzBJc1EwRkJReXhoUVVGaExFVkJRVVVzVTBGQlV5eERRVUZETEVOQlFVTTdRVUZETVVRc1pVRkJVeXhEUVVGRExFOUJRVThzUjBGQlJ5eGhRVUZoTEVOQlFVTTdPMEZCUld4RExGVkJRVWtzV1VGQldTeERRVUZETEZWQlFWVXNSVUZCUlRzN1FVRkZNMElzYVVKQlFWTXNRMEZCUXl4UlFVRlJMRWRCUVVjc1UwRkJVeXhEUVVGRExHRkJRV0VzUTBGRE1VTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1JVRkRhRUlzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZEWWl4RFFVRkRPMDlCUTBnN1FVRkRSQ3hWUVVGSkxGbEJRVmtzUTBGQlF5eFZRVUZWTEVsQlFVa3NXVUZCV1N4RFFVRkRMR0ZCUVdFc1JVRkJSVHRCUVVONlJDeHBRa0ZCVXl4RFFVRkRMRlZCUVZVc1IwRkJSeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVU5xUXl4RlFVRkZMRVZCUTBZc1IwRkJSeXhEUVVGRExGVkJRVlVzUlVGRFpDeFBRVUZQTEVOQlFVTXNWVUZCVlN4RFFVTnVRaXhEUVVGRE8wOUJRMGc3TzBGQlJVUXNaVUZCVXl4RFFVRkRMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGNrSXNaVUZCVXl4RFFVRkRMR3RDUVVGclFpeEhRVUZITERoRFFVRjVRaXhQUVVGUExFTkJRVU1zUTBGQlF6czdRVUZGYWtVc1ZVRkJTU3h0UWtGQmJVSXNSMEZEY2tJc1QwRkJUeXhEUVVGRExIbENRVUY1UWl4SlFVTnFReXh2UTBGQmIwTXNRMEZCUXp0QlFVTjJReXhwUTBGQmEwSXNVMEZCVXl4RlFVRkZMR1ZCUVdVc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMEZCUTI1RkxHbERRVUZyUWl4VFFVRlRMRVZCUVVVc2IwSkJRVzlDTEVWQlFVVXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF6dExRVU42UlN4TlFVRk5PMEZCUTB3c1pVRkJVeXhEUVVGRExHdENRVUZyUWl4SFFVRkhMRTlCUVU4c1EwRkJReXhyUWtGQmEwSXNRMEZCUXp0QlFVTXhSQ3hsUVVGVExFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNN1FVRkRjRU1zWlVGQlV5eERRVUZETEZGQlFWRXNSMEZCUnl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRE8wRkJRM1JETEdWQlFWTXNRMEZCUXl4VlFVRlZMRWRCUVVjc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF6dEJRVU14UXl4bFFVRlRMRU5CUVVNc1MwRkJTeXhIUVVGSExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTTdTMEZEYWtNN1IwRkRSaXhEUVVGRE96dEJRVVZHTEV0QlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1ZVRkJVeXhEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEZkQlFWY3NSVUZCUlN4TlFVRk5MRVZCUVVVN1FVRkRiRVFzVVVGQlNTeFpRVUZaTEVOQlFVTXNZMEZCWXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRk8wRkJReTlETEZsQlFVMHNNa0pCUVdNc2QwSkJRWGRDTEVOQlFVTXNRMEZCUXp0TFFVTXZRenRCUVVORUxGRkJRVWtzV1VGQldTeERRVUZETEZOQlFWTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOeVF5eFpRVUZOTERKQ1FVRmpMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdTMEZEYUVRN08wRkJSVVFzVjBGQlR5eFhRVUZYTEVOQlEyaENMRk5CUVZNc1JVRkRWQ3hEUVVGRExFVkJRMFFzV1VGQldTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVTm1MRWxCUVVrc1JVRkRTaXhEUVVGRExFVkJRMFFzVjBGQlZ5eEZRVU5ZTEUxQlFVMHNRMEZEVUN4RFFVRkRPMGRCUTBnc1EwRkJRenRCUVVOR0xGTkJRVThzUjBGQlJ5eERRVUZETzBOQlExbzdPMEZCUlUwc1UwRkJVeXhYUVVGWExFTkJRM3BDTEZOQlFWTXNSVUZEVkN4RFFVRkRMRVZCUTBRc1JVRkJSU3hGUVVOR0xFbEJRVWtzUlVGRFNpeHRRa0ZCYlVJc1JVRkRia0lzVjBGQlZ5eEZRVU5ZTEUxQlFVMHNSVUZEVGp0QlFVTkJMRmRCUVZNc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlowSTdVVUZCWkN4UFFVRlBMSGxFUVVGSExFVkJRVVU3TzBGQlEycERMRkZCUVVrc1lVRkJZU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU16UWl4UlFVTkZMRTFCUVUwc1NVRkRUaXhQUVVGUExFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4SlFVTndRaXhGUVVGRkxFOUJRVThzUzBGQlN5eFRRVUZUTEVOQlFVTXNWMEZCVnl4SlFVRkpMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEVOQlFVRXNRVUZCUXl4RlFVTXhSRHRCUVVOQkxHMUNRVUZoTEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTMEZETVVNN08wRkJSVVFzVjBGQlR5eEZRVUZGTEVOQlExQXNVMEZCVXl4RlFVTlVMRTlCUVU4c1JVRkRVQ3hUUVVGVExFTkJRVU1zVDBGQlR5eEZRVU5xUWl4VFFVRlRMRU5CUVVNc1VVRkJVU3hGUVVOc1FpeFBRVUZQTEVOQlFVTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1JVRkRjRUlzVjBGQlZ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZEZUVRc1lVRkJZU3hEUVVOa0xFTkJRVU03UjBGRFNEczdRVUZGUkN4TlFVRkpMRWRCUVVjc2FVSkJRV2xDTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hUUVVGVExFVkJRVVVzVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenM3UVVGRmVrVXNUVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRGFrSXNUVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhOUVVGTkxFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRlRU1zVFVGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4dFFrRkJiVUlzU1VGQlNTeERRVUZETEVOQlFVTTdRVUZETlVNc1UwRkJUeXhKUVVGSkxFTkJRVU03UTBGRFlqczdPenM3TzBGQlMwMHNVMEZCVXl4alFVRmpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVTdRVUZEZUVRc1RVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJUdEJRVU5hTEZGQlFVa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1MwRkJTeXhuUWtGQlowSXNSVUZCUlR0QlFVTnlReXhoUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRMUVVONlF5eE5RVUZOTzBGQlEwd3NZVUZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUXpGRE8wZEJRMFlzVFVGQlRTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVTdPMEZCUlhwRExGZEJRVThzUTBGQlF5eEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRPMEZCUTNaQ0xGZEJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wZEJRM0pETzBGQlEwUXNVMEZCVHl4UFFVRlBMRU5CUVVNN1EwRkRhRUk3TzBGQlJVMHNVMEZCVXl4aFFVRmhMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVTdPMEZCUlhaRUxFMUJRVTBzYlVKQlFXMUNMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzU1VGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhEUVVGRE8wRkJRekZGTEZOQlFVOHNRMEZCUXl4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRM1pDTEUxQlFVa3NUMEZCVHl4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVObUxGZEJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03UjBGRGRrVTdPMEZCUlVRc1RVRkJTU3haUVVGWkxGbEJRVUVzUTBGQlF6dEJRVU5xUWl4TlFVRkpMRTlCUVU4c1EwRkJReXhGUVVGRkxFbEJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTMEZCU3l4SlFVRkpMRVZCUVVVN08wRkJRM0pETEdGQlFVOHNRMEZCUXl4SlFVRkpMRWRCUVVjc2EwSkJRVmtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPenRCUVVWNlF5eFZRVUZKTEVWQlFVVXNSMEZCUnl4UFFVRlBMRU5CUVVNc1JVRkJSU3hEUVVGRE8wRkJRM0JDTEd0Q1FVRlpMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4VFFVRlRMRzFDUVVGdFFpeERRVU42UlN4UFFVRlBMRVZCUlZBN1dVRkVRU3hQUVVGUExIbEVRVUZITEVWQlFVVTdPenM3UVVGSldpeGxRVUZQTEVOQlFVTXNTVUZCU1N4SFFVRkhMR3RDUVVGWkxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTjZReXhsUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4SFFVRkhMRzFDUVVGdFFpeERRVUZETzBGQlEzQkVMR1ZCUVU4c1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0UFFVTTNRaXhEUVVGRE8wRkJRMFlzVlVGQlNTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTJZc1pVRkJUeXhEUVVGRExGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFTkJRVU1zVVVGQlVTeEZRVUZGTEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRQUVVOd1JUczdSMEZEUmpzN1FVRkZSQ3hOUVVGSkxFOUJRVThzUzBGQlN5eFRRVUZUTEVsQlFVa3NXVUZCV1N4RlFVRkZPMEZCUTNwRExGZEJRVThzUjBGQlJ5eFpRVUZaTEVOQlFVTTdSMEZEZUVJN08wRkJSVVFzVFVGQlNTeFBRVUZQTEV0QlFVc3NVMEZCVXl4RlFVRkZPMEZCUTNwQ0xGVkJRVTBzTWtKQlFXTXNZMEZCWXl4SFFVRkhMRTlCUVU4c1EwRkJReXhKUVVGSkxFZEJRVWNzY1VKQlFYRkNMRU5CUVVNc1EwRkJRenRIUVVNMVJTeE5RVUZOTEVsQlFVa3NUMEZCVHl4WlFVRlpMRkZCUVZFc1JVRkJSVHRCUVVOMFF5eFhRVUZQTEU5QlFVOHNRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03UjBGRGJFTTdRMEZEUmpzN1FVRkZUU3hUUVVGVExFbEJRVWtzUjBGQlJ6dEJRVU55UWl4VFFVRlBMRVZCUVVVc1EwRkJRenREUVVOWU96dEJRVVZFTEZOQlFWTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVVU3UVVGREwwSXNUVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hGUVVGRkxFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVRXNRVUZCUXl4RlFVRkZPMEZCUXpsQ0xGRkJRVWtzUjBGQlJ5eEpRVUZKTEVkQlFVY3NhMEpCUVZrc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEzSkRMRkZCUVVrc1EwRkJReXhKUVVGSkxFZEJRVWNzVDBGQlR5eERRVUZETzBkQlEzSkNPMEZCUTBRc1UwRkJUeXhKUVVGSkxFTkJRVU03UTBGRFlqczdRVUZGUkN4VFFVRlRMR2xDUVVGcFFpeERRVUZETEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVXNWMEZCVnl4RlFVRkZPMEZCUTNwRkxFMUJRVWtzUlVGQlJTeERRVUZETEZOQlFWTXNSVUZCUlR0QlFVTm9RaXhSUVVGSkxFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEWml4UlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGRGFrSXNTVUZCU1N4RlFVTktMRXRCUVVzc1JVRkRUQ3hUUVVGVExFVkJRMVFzVFVGQlRTeEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkRia0lzU1VGQlNTeEZRVU5LTEZkQlFWY3NSVUZEV0N4TlFVRk5MRU5CUTFBc1EwRkJRenRCUVVOR0xGTkJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wZEJRek5DTzBGQlEwUXNVMEZCVHl4SlFVRkpMRU5CUVVNN1EwRkRZanM3UVVGRlJDeFRRVUZUTEN0Q1FVRXJRaXhEUVVGRExHRkJRV0VzUlVGQlJTeFRRVUZUTEVWQlFVVTdRVUZEYWtVc1VVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJRU3hWUVVGVkxFVkJRVWs3UVVGREwwTXNVVUZCU1N4TlFVRk5MRWRCUVVjc1lVRkJZU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlEzWkRMR2xDUVVGaExFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NkMEpCUVhkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMGRCUTNwRkxFTkJRVU1zUTBGQlF6dERRVU5LT3p0QlFVVkVMRk5CUVZNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSVHRCUVVOdVJDeE5RVUZOTEdOQlFXTXNSMEZCUnl4VFFVRlRMRU5CUVVNc1kwRkJZeXhEUVVGRE8wRkJRMmhFTEZOQlFVOHNLMEpCUVZjc1RVRkJUU3hGUVVGRkxGVkJRVUVzVDBGQlR5eEZRVUZKTzBGQlEyNURMRmRCUVU4c1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEdOQlFXTXNSVUZCWkN4alFVRmpMRVZCUVVVc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEhRVU5zUkN4RFFVRkRMRU5CUVVNN1EwRkRTaUlzSW1acGJHVWlPaUp5ZFc1MGFXMWxMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdWWFJwYkhNZ1puSnZiU0FuTGk5MWRHbHNjeWM3WEc1cGJYQnZjblFnUlhoalpYQjBhVzl1SUdaeWIyMGdKeTR2WlhoalpYQjBhVzl1Snp0Y2JtbHRjRzl5ZENCN1hHNGdJRU5QVFZCSlRFVlNYMUpGVmtsVFNVOU9MRnh1SUNCamNtVmhkR1ZHY21GdFpTeGNiaUFnVEVGVFZGOURUMDFRUVZSSlFreEZYME5QVFZCSlRFVlNYMUpGVmtsVFNVOU9MRnh1SUNCU1JWWkpVMGxQVGw5RFNFRk9SMFZUWEc1OUlHWnliMjBnSnk0dlltRnpaU2M3WEc1cGJYQnZjblFnZXlCdGIzWmxTR1ZzY0dWeVZHOUliMjlyY3lCOUlHWnliMjBnSnk0dmFHVnNjR1Z5Y3ljN1hHNXBiWEJ2Y25RZ2V5QjNjbUZ3U0dWc2NHVnlJSDBnWm5KdmJTQW5MaTlwYm5SbGNtNWhiQzkzY21Gd1NHVnNjR1Z5Snp0Y2JtbHRjRzl5ZENCN1hHNGdJR055WldGMFpWQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDeGNiaUFnY21WemRXeDBTWE5CYkd4dmQyVmtYRzU5SUdaeWIyMGdKeTR2YVc1MFpYSnVZV3d2Y0hKdmRHOHRZV05qWlhOekp6dGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR05vWldOclVtVjJhWE5wYjI0b1kyOXRjR2xzWlhKSmJtWnZLU0I3WEc0Z0lHTnZibk4wSUdOdmJYQnBiR1Z5VW1WMmFYTnBiMjRnUFNBb1kyOXRjR2xzWlhKSmJtWnZJQ1ltSUdOdmJYQnBiR1Z5U1c1bWIxc3dYU2tnZkh3Z01TeGNiaUFnSUNCamRYSnlaVzUwVW1WMmFYTnBiMjRnUFNCRFQwMVFTVXhGVWw5U1JWWkpVMGxQVGp0Y2JseHVJQ0JwWmlBb1hHNGdJQ0FnWTI5dGNHbHNaWEpTWlhacGMybHZiaUErUFNCTVFWTlVYME5QVFZCQlZFbENURVZmUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRnSmlaY2JpQWdJQ0JqYjIxd2FXeGxjbEpsZG1semFXOXVJRHc5SUVOUFRWQkpURVZTWDFKRlZrbFRTVTlPWEc0Z0lDa2dlMXh1SUNBZ0lISmxkSFZ5Ymp0Y2JpQWdmVnh1WEc0Z0lHbG1JQ2hqYjIxd2FXeGxjbEpsZG1semFXOXVJRHdnVEVGVFZGOURUMDFRUVZSSlFreEZYME5QVFZCSlRFVlNYMUpGVmtsVFNVOU9LU0I3WEc0Z0lDQWdZMjl1YzNRZ2NuVnVkR2x0WlZabGNuTnBiMjV6SUQwZ1VrVldTVk5KVDA1ZlEwaEJUa2RGVTF0amRYSnlaVzUwVW1WMmFYTnBiMjVkTEZ4dUlDQWdJQ0FnWTI5dGNHbHNaWEpXWlhKemFXOXVjeUE5SUZKRlZrbFRTVTlPWDBOSVFVNUhSVk5iWTI5dGNHbHNaWEpTWlhacGMybHZibDA3WEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVY0WTJWd2RHbHZiaWhjYmlBZ0lDQWdJQ2RVWlcxd2JHRjBaU0IzWVhNZ2NISmxZMjl0Y0dsc1pXUWdkMmwwYUNCaGJpQnZiR1JsY2lCMlpYSnphVzl1SUc5bUlFaGhibVJzWldKaGNuTWdkR2hoYmlCMGFHVWdZM1Z5Y21WdWRDQnlkVzUwYVcxbExpQW5JQ3RjYmlBZ0lDQWdJQ0FnSjFCc1pXRnpaU0IxY0dSaGRHVWdlVzkxY2lCd2NtVmpiMjF3YVd4bGNpQjBieUJoSUc1bGQyVnlJSFpsY25OcGIyNGdLQ2NnSzF4dUlDQWdJQ0FnSUNCeWRXNTBhVzFsVm1WeWMybHZibk1nSzF4dUlDQWdJQ0FnSUNBbktTQnZjaUJrYjNkdVozSmhaR1VnZVc5MWNpQnlkVzUwYVcxbElIUnZJR0Z1SUc5c1pHVnlJSFpsY25OcGIyNGdLQ2NnSzF4dUlDQWdJQ0FnSUNCamIyMXdhV3hsY2xabGNuTnBiMjV6SUN0Y2JpQWdJQ0FnSUNBZ0p5a3VKMXh1SUNBZ0lDazdYRzRnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdMeThnVlhObElIUm9aU0JsYldKbFpHUmxaQ0IyWlhKemFXOXVJR2x1Wm04Z2MybHVZMlVnZEdobElISjFiblJwYldVZ1pHOWxjMjRuZENCcmJtOTNJR0ZpYjNWMElIUm9hWE1nY21WMmFYTnBiMjRnZVdWMFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmloY2JpQWdJQ0FnSUNkVVpXMXdiR0YwWlNCM1lYTWdjSEpsWTI5dGNHbHNaV1FnZDJsMGFDQmhJRzVsZDJWeUlIWmxjbk5wYjI0Z2IyWWdTR0Z1Wkd4bFltRnljeUIwYUdGdUlIUm9aU0JqZFhKeVpXNTBJSEoxYm5ScGJXVXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblVHeGxZWE5sSUhWd1pHRjBaU0I1YjNWeUlISjFiblJwYldVZ2RHOGdZU0J1WlhkbGNpQjJaWEp6YVc5dUlDZ25JQ3RjYmlBZ0lDQWdJQ0FnWTI5dGNHbHNaWEpKYm1adld6RmRJQ3RjYmlBZ0lDQWdJQ0FnSnlrdUoxeHVJQ0FnSUNrN1hHNGdJSDFjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIUmxiWEJzWVhSbEtIUmxiWEJzWVhSbFUzQmxZeXdnWlc1MktTQjdYRzRnSUM4cUlHbHpkR0Z1WW5Wc0lHbG5ibTl5WlNCdVpYaDBJQ292WEc0Z0lHbG1JQ2doWlc1MktTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpZ25UbThnWlc1MmFYSnZibTFsYm5RZ2NHRnpjMlZrSUhSdklIUmxiWEJzWVhSbEp5azdYRzRnSUgxY2JpQWdhV1lnS0NGMFpXMXdiR0YwWlZOd1pXTWdmSHdnSVhSbGJYQnNZWFJsVTNCbFl5NXRZV2x1S1NCN1hHNGdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmlnblZXNXJibTkzYmlCMFpXMXdiR0YwWlNCdlltcGxZM1E2SUNjZ0t5QjBlWEJsYjJZZ2RHVnRjR3hoZEdWVGNHVmpLVHRjYmlBZ2ZWeHVYRzRnSUhSbGJYQnNZWFJsVTNCbFl5NXRZV2x1TG1SbFkyOXlZWFJ2Y2lBOUlIUmxiWEJzWVhSbFUzQmxZeTV0WVdsdVgyUTdYRzVjYmlBZ0x5OGdUbTkwWlRvZ1ZYTnBibWNnWlc1MkxsWk5JSEpsWm1WeVpXNWpaWE1nY21GMGFHVnlJSFJvWVc0Z2JHOWpZV3dnZG1GeUlISmxabVZ5Wlc1alpYTWdkR2h5YjNWbmFHOTFkQ0IwYUdseklITmxZM1JwYjI0Z2RHOGdZV3hzYjNkY2JpQWdMeThnWm05eUlHVjRkR1Z5Ym1Gc0lIVnpaWEp6SUhSdklHOTJaWEp5YVdSbElIUm9aWE5sSUdGeklIQnpaWFZrYnkxemRYQndiM0owWldRZ1FWQkpjeTVjYmlBZ1pXNTJMbFpOTG1Ob1pXTnJVbVYyYVhOcGIyNG9kR1Z0Y0d4aGRHVlRjR1ZqTG1OdmJYQnBiR1Z5S1R0Y2JseHVJQ0F2THlCaVlXTnJkMkZ5WkhNZ1kyOXRjR0YwYVdKcGJHbDBlU0JtYjNJZ2NISmxZMjl0Y0dsc1pXUWdkR1Z0Y0d4aGRHVnpJSGRwZEdnZ1kyOXRjR2xzWlhJdGRtVnljMmx2YmlBM0lDZzhOQzR6TGpBcFhHNGdJR052Ym5OMElIUmxiWEJzWVhSbFYyRnpVSEpsWTI5dGNHbHNaV1JYYVhSb1EyOXRjR2xzWlhKV055QTlYRzRnSUNBZ2RHVnRjR3hoZEdWVGNHVmpMbU52YlhCcGJHVnlJQ1ltSUhSbGJYQnNZWFJsVTNCbFl5NWpiMjF3YVd4bGNsc3dYU0E5UFQwZ056dGNibHh1SUNCbWRXNWpkR2x2YmlCcGJuWnZhMlZRWVhKMGFXRnNWM0poY0hCbGNpaHdZWEowYVdGc0xDQmpiMjUwWlhoMExDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ2FXWWdLRzl3ZEdsdmJuTXVhR0Z6YUNrZ2UxeHVJQ0FnSUNBZ1kyOXVkR1Y0ZENBOUlGVjBhV3h6TG1WNGRHVnVaQ2g3ZlN3Z1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3k1b1lYTm9LVHRjYmlBZ0lDQWdJR2xtSUNodmNIUnBiMjV6TG1sa2N5a2dlMXh1SUNBZ0lDQWdJQ0J2Y0hScGIyNXpMbWxrYzFzd1hTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQWdJSEJoY25ScFlXd2dQU0JsYm5ZdVZrMHVjbVZ6YjJ4MlpWQmhjblJwWVd3dVkyRnNiQ2gwYUdsekxDQndZWEowYVdGc0xDQmpiMjUwWlhoMExDQnZjSFJwYjI1ektUdGNibHh1SUNBZ0lHeGxkQ0JsZUhSbGJtUmxaRTl3ZEdsdmJuTWdQU0JWZEdsc2N5NWxlSFJsYm1Rb2UzMHNJRzl3ZEdsdmJuTXNJSHRjYmlBZ0lDQWdJR2h2YjJ0ek9pQjBhR2x6TG1odmIydHpMRnh1SUNBZ0lDQWdjSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNPaUIwYUdsekxuQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJGeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2JHVjBJSEpsYzNWc2RDQTlJR1Z1ZGk1V1RTNXBiblp2YTJWUVlYSjBhV0ZzTG1OaGJHd29YRzRnSUNBZ0lDQjBhR2x6TEZ4dUlDQWdJQ0FnY0dGeWRHbGhiQ3hjYmlBZ0lDQWdJR052Ym5SbGVIUXNYRzRnSUNBZ0lDQmxlSFJsYm1SbFpFOXdkR2x2Ym5OY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnYVdZZ0tISmxjM1ZzZENBOVBTQnVkV3hzSUNZbUlHVnVkaTVqYjIxd2FXeGxLU0I3WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbkJoY25ScFlXeHpXMjl3ZEdsdmJuTXVibUZ0WlYwZ1BTQmxibll1WTI5dGNHbHNaU2hjYmlBZ0lDQWdJQ0FnY0dGeWRHbGhiQ3hjYmlBZ0lDQWdJQ0FnZEdWdGNHeGhkR1ZUY0dWakxtTnZiWEJwYkdWeVQzQjBhVzl1Y3l4Y2JpQWdJQ0FnSUNBZ1pXNTJYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdjbVZ6ZFd4MElEMGdiM0IwYVc5dWN5NXdZWEowYVdGc2MxdHZjSFJwYjI1ekxtNWhiV1ZkS0dOdmJuUmxlSFFzSUdWNGRHVnVaR1ZrVDNCMGFXOXVjeWs3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2h5WlhOMWJIUWdJVDBnYm5Wc2JDa2dlMXh1SUNBZ0lDQWdhV1lnS0c5d2RHbHZibk11YVc1a1pXNTBLU0I3WEc0Z0lDQWdJQ0FnSUd4bGRDQnNhVzVsY3lBOUlISmxjM1ZzZEM1emNHeHBkQ2duWEZ4dUp5azdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd0xDQnNJRDBnYkdsdVpYTXViR1Z1WjNSb095QnBJRHdnYkRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2FXWWdLQ0ZzYVc1bGMxdHBYU0FtSmlCcElDc2dNU0E5UFQwZ2JDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQWdJQ0FnYkdsdVpYTmJhVjBnUFNCdmNIUnBiMjV6TG1sdVpHVnVkQ0FySUd4cGJtVnpXMmxkTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lISmxjM1ZzZENBOUlHeHBibVZ6TG1wdmFXNG9KMXhjYmljcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpaGNiaUFnSUNBZ0lDQWdKMVJvWlNCd1lYSjBhV0ZzSUNjZ0sxeHVJQ0FnSUNBZ0lDQWdJRzl3ZEdsdmJuTXVibUZ0WlNBclhHNGdJQ0FnSUNBZ0lDQWdKeUJqYjNWc1pDQnViM1FnWW1VZ1kyOXRjR2xzWldRZ2QyaGxiaUJ5ZFc1dWFXNW5JR2x1SUhKMWJuUnBiV1V0YjI1c2VTQnRiMlJsSjF4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNBdkx5QktkWE4wSUdGa1pDQjNZWFJsY2x4dUlDQnNaWFFnWTI5dWRHRnBibVZ5SUQwZ2UxeHVJQ0FnSUhOMGNtbGpkRG9nWm5WdVkzUnBiMjRvYjJKcUxDQnVZVzFsTENCc2IyTXBJSHRjYmlBZ0lDQWdJR2xtSUNnaGIySnFJSHg4SUNFb2JtRnRaU0JwYmlCdlltb3BLU0I3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b0oxd2lKeUFySUc1aGJXVWdLeUFuWENJZ2JtOTBJR1JsWm1sdVpXUWdhVzRnSnlBcklHOWlhaXdnZTF4dUlDQWdJQ0FnSUNBZ0lHeHZZem9nYkc5alhHNGdJQ0FnSUNBZ0lIMHBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjbVYwZFhKdUlHOWlhbHR1WVcxbFhUdGNiaUFnSUNCOUxGeHVJQ0FnSUd4dmIydDFjRkJ5YjNCbGNuUjVPaUJtZFc1amRHbHZiaWh3WVhKbGJuUXNJSEJ5YjNCbGNuUjVUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ2JHVjBJSEpsYzNWc2RDQTlJSEJoY21WdWRGdHdjbTl3WlhKMGVVNWhiV1ZkTzF4dUlDQWdJQ0FnYVdZZ0tISmxjM1ZzZENBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb1QySnFaV04wTG5CeWIzUnZkSGx3WlM1b1lYTlBkMjVRY205d1pYSjBlUzVqWVd4c0tIQmhjbVZ1ZEN3Z2NISnZjR1Z5ZEhsT1lXMWxLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0JwWmlBb2NtVnpkV3gwU1hOQmJHeHZkMlZrS0hKbGMzVnNkQ3dnWTI5dWRHRnBibVZ5TG5CeWIzUnZRV05qWlhOelEyOXVkSEp2YkN3Z2NISnZjR1Z5ZEhsT1lXMWxLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21WemRXeDBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdjbVYwZFhKdUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCOUxGeHVJQ0FnSUd4dmIydDFjRG9nWm5WdVkzUnBiMjRvWkdWd2RHaHpMQ0J1WVcxbEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc1pXNGdQU0JrWlhCMGFITXViR1Z1WjNSb08xeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnNaVzQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2NtVnpkV3gwSUQwZ1pHVndkR2h6VzJsZElDWW1JR052Ym5SaGFXNWxjaTVzYjI5cmRYQlFjbTl3WlhKMGVTaGtaWEIwYUhOYmFWMHNJRzVoYldVcE8xeHVJQ0FnSUNBZ0lDQnBaaUFvY21WemRXeDBJQ0U5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnWkdWd2RHaHpXMmxkVzI1aGJXVmRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU3hjYmlBZ0lDQnNZVzFpWkdFNklHWjFibU4wYVc5dUtHTjFjbkpsYm5Rc0lHTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnWTNWeWNtVnVkQ0E5UFQwZ0oyWjFibU4wYVc5dUp5QS9JR04xY25KbGJuUXVZMkZzYkNoamIyNTBaWGgwS1NBNklHTjFjbkpsYm5RN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUdWelkyRndaVVY0Y0hKbGMzTnBiMjQ2SUZWMGFXeHpMbVZ6WTJGd1pVVjRjSEpsYzNOcGIyNHNYRzRnSUNBZ2FXNTJiMnRsVUdGeWRHbGhiRG9nYVc1MmIydGxVR0Z5ZEdsaGJGZHlZWEJ3WlhJc1hHNWNiaUFnSUNCbWJqb2dablZ1WTNScGIyNG9hU2tnZTF4dUlDQWdJQ0FnYkdWMElISmxkQ0E5SUhSbGJYQnNZWFJsVTNCbFkxdHBYVHRjYmlBZ0lDQWdJSEpsZEM1a1pXTnZjbUYwYjNJZ1BTQjBaVzF3YkdGMFpWTndaV05iYVNBcklDZGZaQ2RkTzF4dUlDQWdJQ0FnY21WMGRYSnVJSEpsZER0Y2JpQWdJQ0I5TEZ4dVhHNGdJQ0FnY0hKdlozSmhiWE02SUZ0ZExGeHVJQ0FnSUhCeWIyZHlZVzA2SUdaMWJtTjBhVzl1S0drc0lHUmhkR0VzSUdSbFkyeGhjbVZrUW14dlkydFFZWEpoYlhNc0lHSnNiMk5yVUdGeVlXMXpMQ0JrWlhCMGFITXBJSHRjYmlBZ0lDQWdJR3hsZENCd2NtOW5jbUZ0VjNKaGNIQmxjaUE5SUhSb2FYTXVjSEp2WjNKaGJYTmJhVjBzWEc0Z0lDQWdJQ0FnSUdadUlEMGdkR2hwY3k1bWJpaHBLVHRjYmlBZ0lDQWdJR2xtSUNoa1lYUmhJSHg4SUdSbGNIUm9jeUI4ZkNCaWJHOWphMUJoY21GdGN5QjhmQ0JrWldOc1lYSmxaRUpzYjJOclVHRnlZVzF6S1NCN1hHNGdJQ0FnSUNBZ0lIQnliMmR5WVcxWGNtRndjR1Z5SUQwZ2QzSmhjRkJ5YjJkeVlXMG9YRzRnSUNBZ0lDQWdJQ0FnZEdocGN5eGNiaUFnSUNBZ0lDQWdJQ0JwTEZ4dUlDQWdJQ0FnSUNBZ0lHWnVMRnh1SUNBZ0lDQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQWdJQ0FnWkdWamJHRnlaV1JDYkc5amExQmhjbUZ0Y3l4Y2JpQWdJQ0FnSUNBZ0lDQmliRzlqYTFCaGNtRnRjeXhjYmlBZ0lDQWdJQ0FnSUNCa1pYQjBhSE5jYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb0lYQnliMmR5WVcxWGNtRndjR1Z5S1NCN1hHNGdJQ0FnSUNBZ0lIQnliMmR5WVcxWGNtRndjR1Z5SUQwZ2RHaHBjeTV3Y205bmNtRnRjMXRwWFNBOUlIZHlZWEJRY205bmNtRnRLSFJvYVhNc0lHa3NJR1p1S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJ3Y205bmNtRnRWM0poY0hCbGNqdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ1pHRjBZVG9nWm5WdVkzUnBiMjRvZG1Gc2RXVXNJR1JsY0hSb0tTQjdYRzRnSUNBZ0lDQjNhR2xzWlNBb2RtRnNkV1VnSmlZZ1pHVndkR2d0TFNrZ2UxeHVJQ0FnSUNBZ0lDQjJZV3gxWlNBOUlIWmhiSFZsTGw5d1lYSmxiblE3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkbUZzZFdVN1hHNGdJQ0FnZlN4Y2JpQWdJQ0J0WlhKblpVbG1UbVZsWkdWa09pQm1kVzVqZEdsdmJpaHdZWEpoYlN3Z1kyOXRiVzl1S1NCN1hHNGdJQ0FnSUNCc1pYUWdiMkpxSUQwZ2NHRnlZVzBnZkh3Z1kyOXRiVzl1TzF4dVhHNGdJQ0FnSUNCcFppQW9jR0Z5WVcwZ0ppWWdZMjl0Ylc5dUlDWW1JSEJoY21GdElDRTlQU0JqYjIxdGIyNHBJSHRjYmlBZ0lDQWdJQ0FnYjJKcUlEMGdWWFJwYkhNdVpYaDBaVzVrS0h0OUxDQmpiMjF0YjI0c0lIQmhjbUZ0S1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2NtVjBkWEp1SUc5aWFqdGNiaUFnSUNCOUxGeHVJQ0FnSUM4dklFRnVJR1Z0Y0hSNUlHOWlhbVZqZENCMGJ5QjFjMlVnWVhNZ2NtVndiR0ZqWlcxbGJuUWdabTl5SUc1MWJHd3RZMjl1ZEdWNGRITmNiaUFnSUNCdWRXeHNRMjl1ZEdWNGREb2dUMkpxWldOMExuTmxZV3dvZTMwcExGeHVYRzRnSUNBZ2JtOXZjRG9nWlc1MkxsWk5MbTV2YjNBc1hHNGdJQ0FnWTI5dGNHbHNaWEpKYm1adk9pQjBaVzF3YkdGMFpWTndaV011WTI5dGNHbHNaWEpjYmlBZ2ZUdGNibHh1SUNCbWRXNWpkR2x2YmlCeVpYUW9ZMjl1ZEdWNGRDd2diM0IwYVc5dWN5QTlJSHQ5S1NCN1hHNGdJQ0FnYkdWMElHUmhkR0VnUFNCdmNIUnBiMjV6TG1SaGRHRTdYRzVjYmlBZ0lDQnlaWFF1WDNObGRIVndLRzl3ZEdsdmJuTXBPMXh1SUNBZ0lHbG1JQ2doYjNCMGFXOXVjeTV3WVhKMGFXRnNJQ1ltSUhSbGJYQnNZWFJsVTNCbFl5NTFjMlZFWVhSaEtTQjdYRzRnSUNBZ0lDQmtZWFJoSUQwZ2FXNXBkRVJoZEdFb1kyOXVkR1Y0ZEN3Z1pHRjBZU2s3WEc0Z0lDQWdmVnh1SUNBZ0lHeGxkQ0JrWlhCMGFITXNYRzRnSUNBZ0lDQmliRzlqYTFCaGNtRnRjeUE5SUhSbGJYQnNZWFJsVTNCbFl5NTFjMlZDYkc5amExQmhjbUZ0Y3lBL0lGdGRJRG9nZFc1a1pXWnBibVZrTzF4dUlDQWdJR2xtSUNoMFpXMXdiR0YwWlZOd1pXTXVkWE5sUkdWd2RHaHpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1a1pYQjBhSE1wSUh0Y2JpQWdJQ0FnSUNBZ1pHVndkR2h6SUQxY2JpQWdJQ0FnSUNBZ0lDQmpiMjUwWlhoMElDRTlJRzl3ZEdsdmJuTXVaR1Z3ZEdoeld6QmRYRzRnSUNBZ0lDQWdJQ0FnSUNBL0lGdGpiMjUwWlhoMFhTNWpiMjVqWVhRb2IzQjBhVzl1Y3k1a1pYQjBhSE1wWEc0Z0lDQWdJQ0FnSUNBZ0lDQTZJRzl3ZEdsdmJuTXVaR1Z3ZEdoek8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ1pHVndkR2h6SUQwZ1cyTnZiblJsZUhSZE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JseHVJQ0FnSUdaMWJtTjBhVzl1SUcxaGFXNG9ZMjl1ZEdWNGRDQXZLaXdnYjNCMGFXOXVjeW92S1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0FnSUNBbkp5QXJYRzRnSUNBZ0lDQWdJSFJsYlhCc1lYUmxVM0JsWXk1dFlXbHVLRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmhhVzVsY2l4Y2JpQWdJQ0FnSUNBZ0lDQmpiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTVvWld4d1pYSnpMRnh1SUNBZ0lDQWdJQ0FnSUdOdmJuUmhhVzVsY2k1d1lYSjBhV0ZzY3l4Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoTEZ4dUlDQWdJQ0FnSUNBZ0lHSnNiMk5yVUdGeVlXMXpMRnh1SUNBZ0lDQWdJQ0FnSUdSbGNIUm9jMXh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzFoYVc0Z1BTQmxlR1ZqZFhSbFJHVmpiM0poZEc5eWN5aGNiaUFnSUNBZ0lIUmxiWEJzWVhSbFUzQmxZeTV0WVdsdUxGeHVJQ0FnSUNBZ2JXRnBiaXhjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaXhjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVaR1Z3ZEdoeklIeDhJRnRkTEZ4dUlDQWdJQ0FnWkdGMFlTeGNiaUFnSUNBZ0lHSnNiMk5yVUdGeVlXMXpYRzRnSUNBZ0tUdGNiaUFnSUNCeVpYUjFjbTRnYldGcGJpaGpiMjUwWlhoMExDQnZjSFJwYjI1ektUdGNiaUFnZlZ4dVhHNGdJSEpsZEM1cGMxUnZjQ0E5SUhSeWRXVTdYRzVjYmlBZ2NtVjBMbDl6WlhSMWNDQTlJR1oxYm1OMGFXOXVLRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnBaaUFvSVc5d2RHbHZibk11Y0dGeWRHbGhiQ2tnZTF4dUlDQWdJQ0FnYkdWMElHMWxjbWRsWkVobGJIQmxjbk1nUFNCVmRHbHNjeTVsZUhSbGJtUW9lMzBzSUdWdWRpNW9aV3h3WlhKekxDQnZjSFJwYjI1ekxtaGxiSEJsY25NcE8xeHVJQ0FnSUNBZ2QzSmhjRWhsYkhCbGNuTlViMUJoYzNOTWIyOXJkWEJRY205d1pYSjBlU2h0WlhKblpXUklaV3h3WlhKekxDQmpiMjUwWVdsdVpYSXBPMXh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbWhsYkhCbGNuTWdQU0J0WlhKblpXUklaV3h3WlhKek8xeHVYRzRnSUNBZ0lDQnBaaUFvZEdWdGNHeGhkR1ZUY0dWakxuVnpaVkJoY25ScFlXd3BJSHRjYmlBZ0lDQWdJQ0FnTHk4Z1ZYTmxJRzFsY21kbFNXWk9aV1ZrWldRZ2FHVnlaU0IwYnlCd2NtVjJaVzUwSUdOdmJYQnBiR2x1WnlCbmJHOWlZV3dnY0dGeWRHbGhiSE1nYlhWc2RHbHdiR1VnZEdsdFpYTmNiaUFnSUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbkJoY25ScFlXeHpJRDBnWTI5dWRHRnBibVZ5TG0xbGNtZGxTV1pPWldWa1pXUW9YRzRnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjeTV3WVhKMGFXRnNjeXhjYmlBZ0lDQWdJQ0FnSUNCbGJuWXVjR0Z5ZEdsaGJITmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoMFpXMXdiR0YwWlZOd1pXTXVkWE5sVUdGeWRHbGhiQ0I4ZkNCMFpXMXdiR0YwWlZOd1pXTXVkWE5sUkdWamIzSmhkRzl5Y3lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjUwWVdsdVpYSXVaR1ZqYjNKaGRHOXljeUE5SUZWMGFXeHpMbVY0ZEdWdVpDaGNiaUFnSUNBZ0lDQWdJQ0I3ZlN4Y2JpQWdJQ0FnSUNBZ0lDQmxibll1WkdWamIzSmhkRzl5Y3l4Y2JpQWdJQ0FnSUNBZ0lDQnZjSFJwYjI1ekxtUmxZMjl5WVhSdmNuTmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnWTI5dWRHRnBibVZ5TG1odmIydHpJRDBnZTMwN1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWNISnZkRzlCWTJObGMzTkRiMjUwY205c0lEMGdZM0psWVhSbFVISnZkRzlCWTJObGMzTkRiMjUwY205c0tHOXdkR2x2Ym5NcE8xeHVYRzRnSUNBZ0lDQnNaWFFnYTJWbGNFaGxiSEJsY2tsdVNHVnNjR1Z5Y3lBOVhHNGdJQ0FnSUNBZ0lHOXdkR2x2Ym5NdVlXeHNiM2REWVd4c2MxUnZTR1ZzY0dWeVRXbHpjMmx1WnlCOGZGeHVJQ0FnSUNBZ0lDQjBaVzF3YkdGMFpWZGhjMUJ5WldOdmJYQnBiR1ZrVjJsMGFFTnZiWEJwYkdWeVZqYzdYRzRnSUNBZ0lDQnRiM1psU0dWc2NHVnlWRzlJYjI5cmN5aGpiMjUwWVdsdVpYSXNJQ2RvWld4d1pYSk5hWE56YVc1bkp5d2dhMlZsY0VobGJIQmxja2x1U0dWc2NHVnljeWs3WEc0Z0lDQWdJQ0J0YjNabFNHVnNjR1Z5Vkc5SWIyOXJjeWhqYjI1MFlXbHVaWElzSUNkaWJHOWphMGhsYkhCbGNrMXBjM05wYm1jbkxDQnJaV1Z3U0dWc2NHVnlTVzVJWld4d1pYSnpLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDQTlJRzl3ZEdsdmJuTXVjSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNPeUF2THlCcGJuUmxjbTVoYkNCdmNIUnBiMjVjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTVvWld4d1pYSnpJRDBnYjNCMGFXOXVjeTVvWld4d1pYSnpPMXh1SUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbkJoY25ScFlXeHpJRDBnYjNCMGFXOXVjeTV3WVhKMGFXRnNjenRjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTVrWldOdmNtRjBiM0p6SUQwZ2IzQjBhVzl1Y3k1a1pXTnZjbUYwYjNKek8xeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxtaHZiMnR6SUQwZ2IzQjBhVzl1Y3k1b2IyOXJjenRjYmlBZ0lDQjlYRzRnSUgwN1hHNWNiaUFnY21WMExsOWphR2xzWkNBOUlHWjFibU4wYVc5dUtHa3NJR1JoZEdFc0lHSnNiMk5yVUdGeVlXMXpMQ0JrWlhCMGFITXBJSHRjYmlBZ0lDQnBaaUFvZEdWdGNHeGhkR1ZUY0dWakxuVnpaVUpzYjJOclVHRnlZVzF6SUNZbUlDRmliRzlqYTFCaGNtRnRjeWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmlnbmJYVnpkQ0J3WVhOeklHSnNiMk5ySUhCaGNtRnRjeWNwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZEdWdGNHeGhkR1ZUY0dWakxuVnpaVVJsY0hSb2N5QW1KaUFoWkdWd2RHaHpLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NkdGRYTjBJSEJoYzNNZ2NHRnlaVzUwSUdSbGNIUm9jeWNwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEpsZEhWeWJpQjNjbUZ3VUhKdlozSmhiU2hjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaXhjYmlBZ0lDQWdJR2tzWEc0Z0lDQWdJQ0IwWlcxd2JHRjBaVk53WldOYmFWMHNYRzRnSUNBZ0lDQmtZWFJoTEZ4dUlDQWdJQ0FnTUN4Y2JpQWdJQ0FnSUdKc2IyTnJVR0Z5WVcxekxGeHVJQ0FnSUNBZ1pHVndkR2h6WEc0Z0lDQWdLVHRjYmlBZ2ZUdGNiaUFnY21WMGRYSnVJSEpsZER0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSGR5WVhCUWNtOW5jbUZ0S0Z4dUlDQmpiMjUwWVdsdVpYSXNYRzRnSUdrc1hHNGdJR1p1TEZ4dUlDQmtZWFJoTEZ4dUlDQmtaV05zWVhKbFpFSnNiMk5yVUdGeVlXMXpMRnh1SUNCaWJHOWphMUJoY21GdGN5eGNiaUFnWkdWd2RHaHpYRzRwSUh0Y2JpQWdablZ1WTNScGIyNGdjSEp2WnloamIyNTBaWGgwTENCdmNIUnBiMjV6SUQwZ2UzMHBJSHRjYmlBZ0lDQnNaWFFnWTNWeWNtVnVkRVJsY0hSb2N5QTlJR1JsY0hSb2N6dGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQmtaWEIwYUhNZ0ppWmNiaUFnSUNBZ0lHTnZiblJsZUhRZ0lUMGdaR1Z3ZEdoeld6QmRJQ1ltWEc0Z0lDQWdJQ0FoS0dOdmJuUmxlSFFnUFQwOUlHTnZiblJoYVc1bGNpNXVkV3hzUTI5dWRHVjRkQ0FtSmlCa1pYQjBhSE5iTUYwZ1BUMDlJRzUxYkd3cFhHNGdJQ0FnS1NCN1hHNGdJQ0FnSUNCamRYSnlaVzUwUkdWd2RHaHpJRDBnVzJOdmJuUmxlSFJkTG1OdmJtTmhkQ2hrWlhCMGFITXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCbWJpaGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpeGNiaUFnSUNBZ0lHTnZiblJsZUhRc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWFHVnNjR1Z5Y3l4Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2k1d1lYSjBhV0ZzY3l4Y2JpQWdJQ0FnSUc5d2RHbHZibk11WkdGMFlTQjhmQ0JrWVhSaExGeHVJQ0FnSUNBZ1lteHZZMnRRWVhKaGJYTWdKaVlnVzI5d2RHbHZibk11WW14dlkydFFZWEpoYlhOZExtTnZibU5oZENoaWJHOWphMUJoY21GdGN5a3NYRzRnSUNBZ0lDQmpkWEp5Wlc1MFJHVndkR2h6WEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUhCeWIyY2dQU0JsZUdWamRYUmxSR1ZqYjNKaGRHOXljeWhtYml3Z2NISnZaeXdnWTI5dWRHRnBibVZ5TENCa1pYQjBhSE1zSUdSaGRHRXNJR0pzYjJOclVHRnlZVzF6S1R0Y2JseHVJQ0J3Y205bkxuQnliMmR5WVcwZ1BTQnBPMXh1SUNCd2NtOW5MbVJsY0hSb0lEMGdaR1Z3ZEdoeklEOGdaR1Z3ZEdoekxteGxibWQwYUNBNklEQTdYRzRnSUhCeWIyY3VZbXh2WTJ0UVlYSmhiWE1nUFNCa1pXTnNZWEpsWkVKc2IyTnJVR0Z5WVcxeklIeDhJREE3WEc0Z0lISmxkSFZ5YmlCd2NtOW5PMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGUm9hWE1nYVhNZ1kzVnljbVZ1ZEd4NUlIQmhjblFnYjJZZ2RHaGxJRzltWm1samFXRnNJRUZRU1N3Z2RHaGxjbVZtYjNKbElHbHRjR3hsYldWdWRHRjBhVzl1SUdSbGRHRnBiSE1nYzJodmRXeGtJRzV2ZENCaVpTQmphR0Z1WjJWa0xseHVJQ292WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY21WemIyeDJaVkJoY25ScFlXd29jR0Z5ZEdsaGJDd2dZMjl1ZEdWNGRDd2diM0IwYVc5dWN5a2dlMXh1SUNCcFppQW9JWEJoY25ScFlXd3BJSHRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjeTV1WVcxbElEMDlQU0FuUUhCaGNuUnBZV3d0WW14dlkyc25LU0I3WEc0Z0lDQWdJQ0J3WVhKMGFXRnNJRDBnYjNCMGFXOXVjeTVrWVhSaFd5ZHdZWEowYVdGc0xXSnNiMk5ySjEwN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSEJoY25ScFlXd2dQU0J2Y0hScGIyNXpMbkJoY25ScFlXeHpXMjl3ZEdsdmJuTXVibUZ0WlYwN1hHNGdJQ0FnZlZ4dUlDQjlJR1ZzYzJVZ2FXWWdLQ0Z3WVhKMGFXRnNMbU5oYkd3Z0ppWWdJVzl3ZEdsdmJuTXVibUZ0WlNrZ2UxeHVJQ0FnSUM4dklGUm9hWE1nYVhNZ1lTQmtlVzVoYldsaklIQmhjblJwWVd3Z2RHaGhkQ0J5WlhSMWNtNWxaQ0JoSUhOMGNtbHVaMXh1SUNBZ0lHOXdkR2x2Ym5NdWJtRnRaU0E5SUhCaGNuUnBZV3c3WEc0Z0lDQWdjR0Z5ZEdsaGJDQTlJRzl3ZEdsdmJuTXVjR0Z5ZEdsaGJITmJjR0Z5ZEdsaGJGMDdYRzRnSUgxY2JpQWdjbVYwZFhKdUlIQmhjblJwWVd3N1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYm5admEyVlFZWEowYVdGc0tIQmhjblJwWVd3c0lHTnZiblJsZUhRc0lHOXdkR2x2Ym5NcElIdGNiaUFnTHk4Z1ZYTmxJSFJvWlNCamRYSnlaVzUwSUdOc2IzTjFjbVVnWTI5dWRHVjRkQ0IwYnlCellYWmxJSFJvWlNCd1lYSjBhV0ZzTFdKc2IyTnJJR2xtSUhSb2FYTWdjR0Z5ZEdsaGJGeHVJQ0JqYjI1emRDQmpkWEp5Wlc1MFVHRnlkR2xoYkVKc2IyTnJJRDBnYjNCMGFXOXVjeTVrWVhSaElDWW1JRzl3ZEdsdmJuTXVaR0YwWVZzbmNHRnlkR2xoYkMxaWJHOWpheWRkTzF4dUlDQnZjSFJwYjI1ekxuQmhjblJwWVd3Z1BTQjBjblZsTzF4dUlDQnBaaUFvYjNCMGFXOXVjeTVwWkhNcElIdGNiaUFnSUNCdmNIUnBiMjV6TG1SaGRHRXVZMjl1ZEdWNGRGQmhkR2dnUFNCdmNIUnBiMjV6TG1sa2Mxc3dYU0I4ZkNCdmNIUnBiMjV6TG1SaGRHRXVZMjl1ZEdWNGRGQmhkR2c3WEc0Z0lIMWNibHh1SUNCc1pYUWdjR0Z5ZEdsaGJFSnNiMk5yTzF4dUlDQnBaaUFvYjNCMGFXOXVjeTVtYmlBbUppQnZjSFJwYjI1ekxtWnVJQ0U5UFNCdWIyOXdLU0I3WEc0Z0lDQWdiM0IwYVc5dWN5NWtZWFJoSUQwZ1kzSmxZWFJsUm5KaGJXVW9iM0IwYVc5dWN5NWtZWFJoS1R0Y2JpQWdJQ0F2THlCWGNtRndjR1Z5SUdaMWJtTjBhVzl1SUhSdklHZGxkQ0JoWTJObGMzTWdkRzhnWTNWeWNtVnVkRkJoY25ScFlXeENiRzlqYXlCbWNtOXRJSFJvWlNCamJHOXpkWEpsWEc0Z0lDQWdiR1YwSUdadUlEMGdiM0IwYVc5dWN5NW1ianRjYmlBZ0lDQndZWEowYVdGc1FteHZZMnNnUFNCdmNIUnBiMjV6TG1SaGRHRmJKM0JoY25ScFlXd3RZbXh2WTJzblhTQTlJR1oxYm1OMGFXOXVJSEJoY25ScFlXeENiRzlqYTFkeVlYQndaWElvWEc0Z0lDQWdJQ0JqYjI1MFpYaDBMRnh1SUNBZ0lDQWdiM0IwYVc5dWN5QTlJSHQ5WEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0F2THlCU1pYTjBiM0psSUhSb1pTQndZWEowYVdGc0xXSnNiMk5ySUdaeWIyMGdkR2hsSUdOc2IzTjFjbVVnWm05eUlIUm9aU0JsZUdWamRYUnBiMjRnYjJZZ2RHaGxJR0pzYjJOclhHNGdJQ0FnSUNBdkx5QnBMbVV1SUhSb1pTQndZWEowSUdsdWMybGtaU0IwYUdVZ1lteHZZMnNnYjJZZ2RHaGxJSEJoY25ScFlXd2dZMkZzYkM1Y2JpQWdJQ0FnSUc5d2RHbHZibk11WkdGMFlTQTlJR055WldGMFpVWnlZVzFsS0c5d2RHbHZibk11WkdGMFlTazdYRzRnSUNBZ0lDQnZjSFJwYjI1ekxtUmhkR0ZiSjNCaGNuUnBZV3d0WW14dlkyc25YU0E5SUdOMWNuSmxiblJRWVhKMGFXRnNRbXh2WTJzN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm00b1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lrN1hHNGdJQ0FnZlR0Y2JpQWdJQ0JwWmlBb1ptNHVjR0Z5ZEdsaGJITXBJSHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVjR0Z5ZEdsaGJITWdQU0JWZEdsc2N5NWxlSFJsYm1Rb2UzMHNJRzl3ZEdsdmJuTXVjR0Z5ZEdsaGJITXNJR1p1TG5CaGNuUnBZV3h6S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCcFppQW9jR0Z5ZEdsaGJDQTlQVDBnZFc1a1pXWnBibVZrSUNZbUlIQmhjblJwWVd4Q2JHOWpheWtnZTF4dUlDQWdJSEJoY25ScFlXd2dQU0J3WVhKMGFXRnNRbXh2WTJzN1hHNGdJSDFjYmx4dUlDQnBaaUFvY0dGeWRHbGhiQ0E5UFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpZ25WR2hsSUhCaGNuUnBZV3dnSnlBcklHOXdkR2x2Ym5NdWJtRnRaU0FySUNjZ1kyOTFiR1FnYm05MElHSmxJR1p2ZFc1a0p5azdYRzRnSUgwZ1pXeHpaU0JwWmlBb2NHRnlkR2xoYkNCcGJuTjBZVzVqWlc5bUlFWjFibU4wYVc5dUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCaGNuUnBZV3dvWTI5dWRHVjRkQ3dnYjNCMGFXOXVjeWs3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUc1dmIzQW9LU0I3WEc0Z0lISmxkSFZ5YmlBbkp6dGNibjFjYmx4dVpuVnVZM1JwYjI0Z2FXNXBkRVJoZEdFb1kyOXVkR1Y0ZEN3Z1pHRjBZU2tnZTF4dUlDQnBaaUFvSVdSaGRHRWdmSHdnSVNnbmNtOXZkQ2NnYVc0Z1pHRjBZU2twSUh0Y2JpQWdJQ0JrWVhSaElEMGdaR0YwWVNBL0lHTnlaV0YwWlVaeVlXMWxLR1JoZEdFcElEb2dlMzA3WEc0Z0lDQWdaR0YwWVM1eWIyOTBJRDBnWTI5dWRHVjRkRHRjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdaR0YwWVR0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnWlhobFkzVjBaVVJsWTI5eVlYUnZjbk1vWm00c0lIQnliMmNzSUdOdmJuUmhhVzVsY2l3Z1pHVndkR2h6TENCa1lYUmhMQ0JpYkc5amExQmhjbUZ0Y3lrZ2UxeHVJQ0JwWmlBb1ptNHVaR1ZqYjNKaGRHOXlLU0I3WEc0Z0lDQWdiR1YwSUhCeWIzQnpJRDBnZTMwN1hHNGdJQ0FnY0hKdlp5QTlJR1p1TG1SbFkyOXlZWFJ2Y2loY2JpQWdJQ0FnSUhCeWIyY3NYRzRnSUNBZ0lDQndjbTl3Y3l4Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2l4Y2JpQWdJQ0FnSUdSbGNIUm9jeUFtSmlCa1pYQjBhSE5iTUYwc1hHNGdJQ0FnSUNCa1lYUmhMRnh1SUNBZ0lDQWdZbXh2WTJ0UVlYSmhiWE1zWEc0Z0lDQWdJQ0JrWlhCMGFITmNiaUFnSUNBcE8xeHVJQ0FnSUZWMGFXeHpMbVY0ZEdWdVpDaHdjbTluTENCd2NtOXdjeWs3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSEJ5YjJjN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUhkeVlYQklaV3h3WlhKelZHOVFZWE56VEc5dmEzVndVSEp2Y0dWeWRIa29iV1Z5WjJWa1NHVnNjR1Z5Y3l3Z1kyOXVkR0ZwYm1WeUtTQjdYRzRnSUU5aWFtVmpkQzVyWlhsektHMWxjbWRsWkVobGJIQmxjbk1wTG1admNrVmhZMmdvYUdWc2NHVnlUbUZ0WlNBOVBpQjdYRzRnSUNBZ2JHVjBJR2hsYkhCbGNpQTlJRzFsY21kbFpFaGxiSEJsY25OYmFHVnNjR1Z5VG1GdFpWMDdYRzRnSUNBZ2JXVnlaMlZrU0dWc2NHVnljMXRvWld4d1pYSk9ZVzFsWFNBOUlIQmhjM05NYjI5cmRYQlFjbTl3WlhKMGVVOXdkR2x2Ymlob1pXeHdaWElzSUdOdmJuUmhhVzVsY2lrN1hHNGdJSDBwTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJ3WVhOelRHOXZhM1Z3VUhKdmNHVnlkSGxQY0hScGIyNG9hR1ZzY0dWeUxDQmpiMjUwWVdsdVpYSXBJSHRjYmlBZ1kyOXVjM1FnYkc5dmEzVndVSEp2Y0dWeWRIa2dQU0JqYjI1MFlXbHVaWEl1Ykc5dmEzVndVSEp2Y0dWeWRIazdYRzRnSUhKbGRIVnliaUIzY21Gd1NHVnNjR1Z5S0dobGJIQmxjaXdnYjNCMGFXOXVjeUE5UGlCN1hHNGdJQ0FnY21WMGRYSnVJRlYwYVd4ekxtVjRkR1Z1WkNoN0lHeHZiMnQxY0ZCeWIzQmxjblI1SUgwc0lHOXdkR2x2Ym5NcE8xeHVJQ0I5S1R0Y2JuMWNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocm9vdC5IYW5kbGViYXJzID09PSBIYW5kbGViYXJzKSB7XG4gICAgICByb290LkhhbmRsZWJhcnMgPSAkSGFuZGxlYmFycztcbiAgICB9XG4gICAgcmV0dXJuIEhhbmRsZWJhcnM7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDI1dkxXTnZibVpzYVdOMExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3Y1VKQlFXVXNWVUZCVXl4VlFVRlZMRVZCUVVVN08wRkJSV3hETEUxQlFVa3NTVUZCU1N4SFFVRkhMRTlCUVU4c1RVRkJUU3hMUVVGTExGZEJRVmNzUjBGQlJ5eE5RVUZOTEVkQlFVY3NUVUZCVFR0TlFVTjRSQ3hYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXpzN1FVRkZhRU1zV1VGQlZTeERRVUZETEZWQlFWVXNSMEZCUnl4WlFVRlhPMEZCUTJwRExGRkJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRiRU1zVlVGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMEk3UVVGRFJDeFhRVUZQTEZWQlFWVXNRMEZCUXp0SFFVTnVRaXhEUVVGRE8wTkJRMGdpTENKbWFXeGxJam9pYm04dFkyOXVabXhwWTNRdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpaElZVzVrYkdWaVlYSnpLU0I3WEc0Z0lDOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUNvdlhHNGdJR3hsZENCeWIyOTBJRDBnZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjZ1B5Qm5iRzlpWVd3Z09pQjNhVzVrYjNjc1hHNGdJQ0FnSkVoaGJtUnNaV0poY25NZ1BTQnliMjkwTGtoaGJtUnNaV0poY25NN1hHNGdJQzhxSUdsemRHRnVZblZzSUdsbmJtOXlaU0J1WlhoMElDb3ZYRzRnSUVoaGJtUnNaV0poY25NdWJtOURiMjVtYkdsamRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNoeWIyOTBMa2hoYm1Sc1pXSmhjbk1nUFQwOUlFaGhibVJzWldKaGNuTXBJSHRjYmlBZ0lDQWdJSEp2YjNRdVNHRnVaR3hsWW1GeWN5QTlJQ1JJWVc1a2JHVmlZWEp6TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1NHRnVaR3hsWW1GeWN6dGNiaUFnZlR0Y2JuMWNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqWydkZWZhdWx0J10gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG52YXIgX2hhbmRsZWJhcnNCYXNlID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2Jhc2UnKTtcblxudmFyIGJhc2UgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfaGFuZGxlYmFyc0Jhc2UpO1xuXG4vLyBFYWNoIG9mIHRoZXNlIGF1Z21lbnQgdGhlIEhhbmRsZWJhcnMgb2JqZWN0LiBObyBuZWVkIHRvIHNldHVwIGhlcmUuXG4vLyAoVGhpcyBpcyBkb25lIHRvIGVhc2lseSBzaGFyZSBjb2RlIGJldHdlZW4gY29tbW9uanMgYW5kIGJyb3dzZSBlbnZzKVxuXG52YXIgX2hhbmRsZWJhcnNTYWZlU3RyaW5nID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nJyk7XG5cbnZhciBfaGFuZGxlYmFyc1NhZmVTdHJpbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc1NhZmVTdHJpbmcpO1xuXG52YXIgX2hhbmRsZWJhcnNFeGNlcHRpb24gPSByZXF1aXJlKCcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJyk7XG5cbnZhciBfaGFuZGxlYmFyc0V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzRXhjZXB0aW9uKTtcblxudmFyIF9oYW5kbGViYXJzVXRpbHMgPSByZXF1aXJlKCcuL2hhbmRsZWJhcnMvdXRpbHMnKTtcblxudmFyIFV0aWxzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hhbmRsZWJhcnNVdGlscyk7XG5cbnZhciBfaGFuZGxlYmFyc1J1bnRpbWUgPSByZXF1aXJlKCcuL2hhbmRsZWJhcnMvcnVudGltZScpO1xuXG52YXIgcnVudGltZSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYW5kbGViYXJzUnVudGltZSk7XG5cbnZhciBfaGFuZGxlYmFyc05vQ29uZmxpY3QgPSByZXF1aXJlKCcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnKTtcblxudmFyIF9oYW5kbGViYXJzTm9Db25mbGljdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzTm9Db25mbGljdCk7XG5cbi8vIEZvciBjb21wYXRpYmlsaXR5IGFuZCB1c2FnZSBvdXRzaWRlIG9mIG1vZHVsZSBzeXN0ZW1zLCBtYWtlIHRoZSBIYW5kbGViYXJzIG9iamVjdCBhIG5hbWVzcGFjZVxuZnVuY3Rpb24gY3JlYXRlKCkge1xuICB2YXIgaGIgPSBuZXcgYmFzZS5IYW5kbGViYXJzRW52aXJvbm1lbnQoKTtcblxuICBVdGlscy5leHRlbmQoaGIsIGJhc2UpO1xuICBoYi5TYWZlU3RyaW5nID0gX2hhbmRsZWJhcnNTYWZlU3RyaW5nMlsnZGVmYXVsdCddO1xuICBoYi5FeGNlcHRpb24gPSBfaGFuZGxlYmFyc0V4Y2VwdGlvbjJbJ2RlZmF1bHQnXTtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uIChzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxudmFyIGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5faGFuZGxlYmFyc05vQ29uZmxpY3QyWydkZWZhdWx0J10oaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGluc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMbkoxYm5ScGJXVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T0VKQlFYTkNMRzFDUVVGdFFqczdTVUZCTjBJc1NVRkJTVHM3T3pzN2IwTkJTVThzTUVKQlFUQkNPenM3TzIxRFFVTXpRaXgzUWtGQmQwSTdPenM3SzBKQlEzWkNMRzlDUVVGdlFqczdTVUZCTDBJc1MwRkJTenM3YVVOQlExRXNjMEpCUVhOQ096dEpRVUZ1UXl4UFFVRlBPenR2UTBGRlNTd3dRa0ZCTUVJN096czdPMEZCUjJwRUxGTkJRVk1zVFVGQlRTeEhRVUZITzBGQlEyaENMRTFCUVVrc1JVRkJSU3hIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU03TzBGQlJURkRMRTlCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNaQ0xFbEJRVVVzUTBGQlF5eFZRVUZWTEc5RFFVRmhMRU5CUVVNN1FVRkRNMElzU1VGQlJTeERRVUZETEZOQlFWTXNiVU5CUVZrc1EwRkJRenRCUVVONlFpeEpRVUZGTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOcVFpeEpRVUZGTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzUzBGQlN5eERRVUZETEdkQ1FVRm5RaXhEUVVGRE96dEJRVVUzUXl4SlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF6dEJRVU5vUWl4SlFVRkZMRU5CUVVNc1VVRkJVU3hIUVVGSExGVkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF6TkNMRmRCUVU4c1QwRkJUeXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1IwRkRia01zUTBGQlF6czdRVUZGUml4VFFVRlBMRVZCUVVVc1EwRkJRenREUVVOWU96dEJRVVZFTEVsQlFVa3NTVUZCU1N4SFFVRkhMRTFCUVUwc1JVRkJSU3hEUVVGRE8wRkJRM0JDTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRE96dEJRVVZ5UWl4clEwRkJWeXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGYWtJc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXpzN2NVSkJSVklzU1VGQlNTSXNJbVpwYkdVaU9pSm9ZVzVrYkdWaVlYSnpMbkoxYm5ScGJXVXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5QmlZWE5sSUdaeWIyMGdKeTR2YUdGdVpHeGxZbUZ5Y3k5aVlYTmxKenRjYmx4dUx5OGdSV0ZqYUNCdlppQjBhR1Z6WlNCaGRXZHRaVzUwSUhSb1pTQklZVzVrYkdWaVlYSnpJRzlpYW1WamRDNGdUbThnYm1WbFpDQjBieUJ6WlhSMWNDQm9aWEpsTGx4dUx5OGdLRlJvYVhNZ2FYTWdaRzl1WlNCMGJ5QmxZWE5wYkhrZ2MyaGhjbVVnWTI5a1pTQmlaWFIzWldWdUlHTnZiVzF2Ym1weklHRnVaQ0JpY205M2MyVWdaVzUyY3lsY2JtbHRjRzl5ZENCVFlXWmxVM1J5YVc1bklHWnliMjBnSnk0dmFHRnVaR3hsWW1GeWN5OXpZV1psTFhOMGNtbHVaeWM3WEc1cGJYQnZjblFnUlhoalpYQjBhVzl1SUdaeWIyMGdKeTR2YUdGdVpHeGxZbUZ5Y3k5bGVHTmxjSFJwYjI0bk8xeHVhVzF3YjNKMElDb2dZWE1nVlhScGJITWdabkp2YlNBbkxpOW9ZVzVrYkdWaVlYSnpMM1YwYVd4ekp6dGNibWx0Y0c5eWRDQXFJR0Z6SUhKMWJuUnBiV1VnWm5KdmJTQW5MaTlvWVc1a2JHVmlZWEp6TDNKMWJuUnBiV1VuTzF4dVhHNXBiWEJ2Y25RZ2JtOURiMjVtYkdsamRDQm1jbTl0SUNjdUwyaGhibVJzWldKaGNuTXZibTh0WTI5dVpteHBZM1FuTzF4dVhHNHZMeUJHYjNJZ1kyOXRjR0YwYVdKcGJHbDBlU0JoYm1RZ2RYTmhaMlVnYjNWMGMybGtaU0J2WmlCdGIyUjFiR1VnYzNsemRHVnRjeXdnYldGclpTQjBhR1VnU0dGdVpHeGxZbUZ5Y3lCdlltcGxZM1FnWVNCdVlXMWxjM0JoWTJWY2JtWjFibU4wYVc5dUlHTnlaV0YwWlNncElIdGNiaUFnYkdWMElHaGlJRDBnYm1WM0lHSmhjMlV1U0dGdVpHeGxZbUZ5YzBWdWRtbHliMjV0Wlc1MEtDazdYRzVjYmlBZ1ZYUnBiSE11WlhoMFpXNWtLR2hpTENCaVlYTmxLVHRjYmlBZ2FHSXVVMkZtWlZOMGNtbHVaeUE5SUZOaFptVlRkSEpwYm1jN1hHNGdJR2hpTGtWNFkyVndkR2x2YmlBOUlFVjRZMlZ3ZEdsdmJqdGNiaUFnYUdJdVZYUnBiSE1nUFNCVmRHbHNjenRjYmlBZ2FHSXVaWE5qWVhCbFJYaHdjbVZ6YzJsdmJpQTlJRlYwYVd4ekxtVnpZMkZ3WlVWNGNISmxjM05wYjI0N1hHNWNiaUFnYUdJdVZrMGdQU0J5ZFc1MGFXMWxPMXh1SUNCb1lpNTBaVzF3YkdGMFpTQTlJR1oxYm1OMGFXOXVLSE53WldNcElIdGNiaUFnSUNCeVpYUjFjbTRnY25WdWRHbHRaUzUwWlcxd2JHRjBaU2h6Y0dWakxDQm9ZaWs3WEc0Z0lIMDdYRzVjYmlBZ2NtVjBkWEp1SUdoaU8xeHVmVnh1WEc1c1pYUWdhVzV6ZENBOUlHTnlaV0YwWlNncE8xeHVhVzV6ZEM1amNtVmhkR1VnUFNCamNtVmhkR1U3WEc1Y2JtNXZRMjl1Wm14cFkzUW9hVzV6ZENrN1hHNWNibWx1YzNSYkoyUmxabUYxYkhRblhTQTlJR2x1YzNRN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElHbHVjM1E3WEc0aVhYMD1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBBU1QgPSB7XG4gIC8vIFB1YmxpYyBBUEkgdXNlZCB0byBldmFsdWF0ZSBkZXJpdmVkIGF0dHJpYnV0ZXMgcmVnYXJkaW5nIEFTVCBub2Rlc1xuICBoZWxwZXJzOiB7XG4gICAgLy8gYSBtdXN0YWNoZSBpcyBkZWZpbml0ZWx5IGEgaGVscGVyIGlmOlxuICAgIC8vICogaXQgaXMgYW4gZWxpZ2libGUgaGVscGVyLCBhbmRcbiAgICAvLyAqIGl0IGhhcyBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG9yIGhhc2ggc2VnbWVudFxuICAgIGhlbHBlckV4cHJlc3Npb246IGZ1bmN0aW9uIGhlbHBlckV4cHJlc3Npb24obm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nIHx8IChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHwgbm9kZS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnKSAmJiAhIShub2RlLnBhcmFtcyAmJiBub2RlLnBhcmFtcy5sZW5ndGggfHwgbm9kZS5oYXNoKTtcbiAgICB9LFxuXG4gICAgc2NvcGVkSWQ6IGZ1bmN0aW9uIHNjb3BlZElkKHBhdGgpIHtcbiAgICAgIHJldHVybiAoL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbiBzaW1wbGVJZChwYXRoKSB7XG4gICAgICByZXR1cm4gcGF0aC5wYXJ0cy5sZW5ndGggPT09IDEgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHBhdGgpICYmICFwYXRoLmRlcHRoO1xuICAgIH1cbiAgfVxufTtcblxuLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXJcbi8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IEFTVDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJOdmJYQnBiR1Z5TDJGemRDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3UVVGQlFTeEpRVUZKTEVkQlFVY3NSMEZCUnpzN1FVRkZVaXhUUVVGUExFVkJRVVU3T3pzN1FVRkpVQ3h2UWtGQlowSXNSVUZCUlN3d1FrRkJVeXhKUVVGSkxFVkJRVVU3UVVGREwwSXNZVUZEUlN4SlFVRkpMRU5CUVVNc1NVRkJTU3hMUVVGTExHVkJRV1VzU1VGRE5VSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hMUVVGTExHMUNRVUZ0UWl4SlFVTnFReXhKUVVGSkxFTkJRVU1zU1VGQlNTeExRVUZMTEdkQ1FVRm5RaXhEUVVGQkxFbEJRemxDTEVOQlFVTXNSVUZCUlN4QlFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWxCUVVzc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlFTeEJRVUZETEVGQlFVTXNRMEZEZGtRN1MwRkRTRHM3UVVGRlJDeFpRVUZSTEVWQlFVVXNhMEpCUVZNc1NVRkJTU3hGUVVGRk8wRkJRM1pDTEdGQlFVOHNZVUZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzFGQlFVTTdTMEZEZWtNN096czdRVUZKUkN4WlFVRlJMRVZCUVVVc2EwSkJRVk1zU1VGQlNTeEZRVUZGTzBGQlEzWkNMR0ZCUTBVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVU55UlR0TFFVTklPMGRCUTBZN1EwRkRSaXhEUVVGRE96czdPM0ZDUVVsaExFZEJRVWNpTENKbWFXeGxJam9pWVhOMExtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYkdWMElFRlRWQ0E5SUh0Y2JpQWdMeThnVUhWaWJHbGpJRUZRU1NCMWMyVmtJSFJ2SUdWMllXeDFZWFJsSUdSbGNtbDJaV1FnWVhSMGNtbGlkWFJsY3lCeVpXZGhjbVJwYm1jZ1FWTlVJRzV2WkdWelhHNGdJR2hsYkhCbGNuTTZJSHRjYmlBZ0lDQXZMeUJoSUcxMWMzUmhZMmhsSUdseklHUmxabWx1YVhSbGJIa2dZU0JvWld4d1pYSWdhV1k2WEc0Z0lDQWdMeThnS2lCcGRDQnBjeUJoYmlCbGJHbG5hV0pzWlNCb1pXeHdaWElzSUdGdVpGeHVJQ0FnSUM4dklDb2dhWFFnYUdGeklHRjBJR3hsWVhOMElHOXVaU0J3WVhKaGJXVjBaWElnYjNJZ2FHRnphQ0J6WldkdFpXNTBYRzRnSUNBZ2FHVnNjR1Z5Ulhod2NtVnpjMmx2YmpvZ1puVnVZM1JwYjI0b2JtOWtaU2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJQ2hjYmlBZ0lDQWdJQ0FnYm05a1pTNTBlWEJsSUQwOVBTQW5VM1ZpUlhod2NtVnpjMmx2YmljZ2ZIeGNiaUFnSUNBZ0lDQWdLQ2h1YjJSbExuUjVjR1VnUFQwOUlDZE5kWE4wWVdOb1pWTjBZWFJsYldWdWRDY2dmSHhjYmlBZ0lDQWdJQ0FnSUNCdWIyUmxMblI1Y0dVZ1BUMDlJQ2RDYkc5amExTjBZWFJsYldWdWRDY3BJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lTRW9LRzV2WkdVdWNHRnlZVzF6SUNZbUlHNXZaR1V1Y0dGeVlXMXpMbXhsYm1kMGFDa2dmSHdnYm05a1pTNW9ZWE5vS1NsY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhOamIzQmxaRWxrT2lCbWRXNWpkR2x2Ymlod1lYUm9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdMMTVjWEM1OGRHaHBjMXhjWWk4dWRHVnpkQ2h3WVhSb0xtOXlhV2RwYm1Gc0tUdGNiaUFnSUNCOUxGeHVYRzRnSUNBZ0x5OGdZVzRnU1VRZ2FYTWdjMmx0Y0d4bElHbG1JR2wwSUc5dWJIa2dhR0Z6SUc5dVpTQndZWEowTENCaGJtUWdkR2hoZENCd1lYSjBJR2x6SUc1dmRGeHVJQ0FnSUM4dklHQXVMbUFnYjNJZ1lIUm9hWE5nTGx4dUlDQWdJSE5wYlhCc1pVbGtPaUJtZFc1amRHbHZiaWh3WVhSb0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0tGeHVJQ0FnSUNBZ0lDQndZWFJvTG5CaGNuUnpMbXhsYm1kMGFDQTlQVDBnTVNBbUppQWhRVk5VTG1obGJIQmxjbk11YzJOdmNHVmtTV1FvY0dGMGFDa2dKaVlnSVhCaGRHZ3VaR1Z3ZEdoY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzU5TzF4dVhHNHZMeUJOZFhOMElHSmxJR1Y0Y0c5eWRHVmtJR0Z6SUdGdUlHOWlhbVZqZENCeVlYUm9aWElnZEdoaGJpQjBhR1VnY205dmRDQnZaaUIwYUdVZ2JXOWtkV3hsSUdGeklIUm9aU0JxYVhOdmJpQnNaWGhsY2x4dUx5OGdiWFZ6ZENCdGIyUnBabmtnZEdobElHOWlhbVZqZENCMGJ5QnZjR1Z5WVhSbElIQnliM0JsY214NUxseHVaWGh3YjNKMElHUmxabUYxYkhRZ1FWTlVPMXh1SWwxOVxuIiwiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cblwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGhhbmRsZWJhcnMgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJzZXIgPSB7IHRyYWNlOiBmdW5jdGlvbiB0cmFjZSgpIHt9LFxuICAgICAgICB5eToge30sXG4gICAgICAgIHN5bWJvbHNfOiB7IFwiZXJyb3JcIjogMiwgXCJyb290XCI6IDMsIFwicHJvZ3JhbVwiOiA0LCBcIkVPRlwiOiA1LCBcInByb2dyYW1fcmVwZXRpdGlvbjBcIjogNiwgXCJzdGF0ZW1lbnRcIjogNywgXCJtdXN0YWNoZVwiOiA4LCBcImJsb2NrXCI6IDksIFwicmF3QmxvY2tcIjogMTAsIFwicGFydGlhbFwiOiAxMSwgXCJwYXJ0aWFsQmxvY2tcIjogMTIsIFwiY29udGVudFwiOiAxMywgXCJDT01NRU5UXCI6IDE0LCBcIkNPTlRFTlRcIjogMTUsIFwib3BlblJhd0Jsb2NrXCI6IDE2LCBcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6IDE3LCBcIkVORF9SQVdfQkxPQ0tcIjogMTgsIFwiT1BFTl9SQVdfQkxPQ0tcIjogMTksIFwiaGVscGVyTmFtZVwiOiAyMCwgXCJvcGVuUmF3QmxvY2tfcmVwZXRpdGlvbjBcIjogMjEsIFwib3BlblJhd0Jsb2NrX29wdGlvbjBcIjogMjIsIFwiQ0xPU0VfUkFXX0JMT0NLXCI6IDIzLCBcIm9wZW5CbG9ja1wiOiAyNCwgXCJibG9ja19vcHRpb24wXCI6IDI1LCBcImNsb3NlQmxvY2tcIjogMjYsIFwib3BlbkludmVyc2VcIjogMjcsIFwiYmxvY2tfb3B0aW9uMVwiOiAyOCwgXCJPUEVOX0JMT0NLXCI6IDI5LCBcIm9wZW5CbG9ja19yZXBldGl0aW9uMFwiOiAzMCwgXCJvcGVuQmxvY2tfb3B0aW9uMFwiOiAzMSwgXCJvcGVuQmxvY2tfb3B0aW9uMVwiOiAzMiwgXCJDTE9TRVwiOiAzMywgXCJPUEVOX0lOVkVSU0VcIjogMzQsIFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjogMzUsIFwib3BlbkludmVyc2Vfb3B0aW9uMFwiOiAzNiwgXCJvcGVuSW52ZXJzZV9vcHRpb24xXCI6IDM3LCBcIm9wZW5JbnZlcnNlQ2hhaW5cIjogMzgsIFwiT1BFTl9JTlZFUlNFX0NIQUlOXCI6IDM5LCBcIm9wZW5JbnZlcnNlQ2hhaW5fcmVwZXRpdGlvbjBcIjogNDAsIFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6IDQxLCBcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMVwiOiA0MiwgXCJpbnZlcnNlQW5kUHJvZ3JhbVwiOiA0MywgXCJJTlZFUlNFXCI6IDQ0LCBcImludmVyc2VDaGFpblwiOiA0NSwgXCJpbnZlcnNlQ2hhaW5fb3B0aW9uMFwiOiA0NiwgXCJPUEVOX0VOREJMT0NLXCI6IDQ3LCBcIk9QRU5cIjogNDgsIFwibXVzdGFjaGVfcmVwZXRpdGlvbjBcIjogNDksIFwibXVzdGFjaGVfb3B0aW9uMFwiOiA1MCwgXCJPUEVOX1VORVNDQVBFRFwiOiA1MSwgXCJtdXN0YWNoZV9yZXBldGl0aW9uMVwiOiA1MiwgXCJtdXN0YWNoZV9vcHRpb24xXCI6IDUzLCBcIkNMT1NFX1VORVNDQVBFRFwiOiA1NCwgXCJPUEVOX1BBUlRJQUxcIjogNTUsIFwicGFydGlhbE5hbWVcIjogNTYsIFwicGFydGlhbF9yZXBldGl0aW9uMFwiOiA1NywgXCJwYXJ0aWFsX29wdGlvbjBcIjogNTgsIFwib3BlblBhcnRpYWxCbG9ja1wiOiA1OSwgXCJPUEVOX1BBUlRJQUxfQkxPQ0tcIjogNjAsIFwib3BlblBhcnRpYWxCbG9ja19yZXBldGl0aW9uMFwiOiA2MSwgXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjogNjIsIFwicGFyYW1cIjogNjMsIFwic2V4cHJcIjogNjQsIFwiT1BFTl9TRVhQUlwiOiA2NSwgXCJzZXhwcl9yZXBldGl0aW9uMFwiOiA2NiwgXCJzZXhwcl9vcHRpb24wXCI6IDY3LCBcIkNMT1NFX1NFWFBSXCI6IDY4LCBcImhhc2hcIjogNjksIFwiaGFzaF9yZXBldGl0aW9uX3BsdXMwXCI6IDcwLCBcImhhc2hTZWdtZW50XCI6IDcxLCBcIklEXCI6IDcyLCBcIkVRVUFMU1wiOiA3MywgXCJibG9ja1BhcmFtc1wiOiA3NCwgXCJPUEVOX0JMT0NLX1BBUkFNU1wiOiA3NSwgXCJibG9ja1BhcmFtc19yZXBldGl0aW9uX3BsdXMwXCI6IDc2LCBcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOiA3NywgXCJwYXRoXCI6IDc4LCBcImRhdGFOYW1lXCI6IDc5LCBcIlNUUklOR1wiOiA4MCwgXCJOVU1CRVJcIjogODEsIFwiQk9PTEVBTlwiOiA4MiwgXCJVTkRFRklORURcIjogODMsIFwiTlVMTFwiOiA4NCwgXCJEQVRBXCI6IDg1LCBcInBhdGhTZWdtZW50c1wiOiA4NiwgXCJTRVBcIjogODcsIFwiJGFjY2VwdFwiOiAwLCBcIiRlbmRcIjogMSB9LFxuICAgICAgICB0ZXJtaW5hbHNfOiB7IDI6IFwiZXJyb3JcIiwgNTogXCJFT0ZcIiwgMTQ6IFwiQ09NTUVOVFwiLCAxNTogXCJDT05URU5UXCIsIDE4OiBcIkVORF9SQVdfQkxPQ0tcIiwgMTk6IFwiT1BFTl9SQVdfQkxPQ0tcIiwgMjM6IFwiQ0xPU0VfUkFXX0JMT0NLXCIsIDI5OiBcIk9QRU5fQkxPQ0tcIiwgMzM6IFwiQ0xPU0VcIiwgMzQ6IFwiT1BFTl9JTlZFUlNFXCIsIDM5OiBcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLCA0NDogXCJJTlZFUlNFXCIsIDQ3OiBcIk9QRU5fRU5EQkxPQ0tcIiwgNDg6IFwiT1BFTlwiLCA1MTogXCJPUEVOX1VORVNDQVBFRFwiLCA1NDogXCJDTE9TRV9VTkVTQ0FQRURcIiwgNTU6IFwiT1BFTl9QQVJUSUFMXCIsIDYwOiBcIk9QRU5fUEFSVElBTF9CTE9DS1wiLCA2NTogXCJPUEVOX1NFWFBSXCIsIDY4OiBcIkNMT1NFX1NFWFBSXCIsIDcyOiBcIklEXCIsIDczOiBcIkVRVUFMU1wiLCA3NTogXCJPUEVOX0JMT0NLX1BBUkFNU1wiLCA3NzogXCJDTE9TRV9CTE9DS19QQVJBTVNcIiwgODA6IFwiU1RSSU5HXCIsIDgxOiBcIk5VTUJFUlwiLCA4MjogXCJCT09MRUFOXCIsIDgzOiBcIlVOREVGSU5FRFwiLCA4NDogXCJOVUxMXCIsIDg1OiBcIkRBVEFcIiwgODc6IFwiU0VQXCIgfSxcbiAgICAgICAgcHJvZHVjdGlvbnNfOiBbMCwgWzMsIDJdLCBbNCwgMV0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzcsIDFdLCBbNywgMV0sIFs3LCAxXSwgWzEzLCAxXSwgWzEwLCAzXSwgWzE2LCA1XSwgWzksIDRdLCBbOSwgNF0sIFsyNCwgNl0sIFsyNywgNl0sIFszOCwgNl0sIFs0MywgMl0sIFs0NSwgM10sIFs0NSwgMV0sIFsyNiwgM10sIFs4LCA1XSwgWzgsIDVdLCBbMTEsIDVdLCBbMTIsIDNdLCBbNTksIDVdLCBbNjMsIDFdLCBbNjMsIDFdLCBbNjQsIDVdLCBbNjksIDFdLCBbNzEsIDNdLCBbNzQsIDNdLCBbMjAsIDFdLCBbMjAsIDFdLCBbMjAsIDFdLCBbMjAsIDFdLCBbMjAsIDFdLCBbMjAsIDFdLCBbMjAsIDFdLCBbNTYsIDFdLCBbNTYsIDFdLCBbNzksIDJdLCBbNzgsIDFdLCBbODYsIDNdLCBbODYsIDFdLCBbNiwgMF0sIFs2LCAyXSwgWzE3LCAwXSwgWzE3LCAyXSwgWzIxLCAwXSwgWzIxLCAyXSwgWzIyLCAwXSwgWzIyLCAxXSwgWzI1LCAwXSwgWzI1LCAxXSwgWzI4LCAwXSwgWzI4LCAxXSwgWzMwLCAwXSwgWzMwLCAyXSwgWzMxLCAwXSwgWzMxLCAxXSwgWzMyLCAwXSwgWzMyLCAxXSwgWzM1LCAwXSwgWzM1LCAyXSwgWzM2LCAwXSwgWzM2LCAxXSwgWzM3LCAwXSwgWzM3LCAxXSwgWzQwLCAwXSwgWzQwLCAyXSwgWzQxLCAwXSwgWzQxLCAxXSwgWzQyLCAwXSwgWzQyLCAxXSwgWzQ2LCAwXSwgWzQ2LCAxXSwgWzQ5LCAwXSwgWzQ5LCAyXSwgWzUwLCAwXSwgWzUwLCAxXSwgWzUyLCAwXSwgWzUyLCAyXSwgWzUzLCAwXSwgWzUzLCAxXSwgWzU3LCAwXSwgWzU3LCAyXSwgWzU4LCAwXSwgWzU4LCAxXSwgWzYxLCAwXSwgWzYxLCAyXSwgWzYyLCAwXSwgWzYyLCAxXSwgWzY2LCAwXSwgWzY2LCAyXSwgWzY3LCAwXSwgWzY3LCAxXSwgWzcwLCAxXSwgWzcwLCAyXSwgWzc2LCAxXSwgWzc2LCAyXV0sXG4gICAgICAgIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHl5LCB5eXN0YXRlLCAkJCwgXyQpIHtcblxuICAgICAgICAgICAgdmFyICQwID0gJCQubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAoeXlzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQkWyQwIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geXkucHJlcGFyZVByb2dyYW0oJCRbJDBdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ29tbWVudFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeXkuc3RyaXBDb21tZW50KCQkWyQwXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMF0sICQkWyQwXSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQ29udGVudFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogJCRbJDBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICQkWyQwXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVSYXdCbG9jaygkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0sIHRoaXMuXyQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHBhdGg6ICQkWyQwIC0gM10sIHBhcmFtczogJCRbJDAgLSAyXSwgaGFzaDogJCRbJDAgLSAxXSB9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB5eS5wcmVwYXJlQmxvY2soJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCBmYWxzZSwgdGhpcy5fJCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMCAtIDNdLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IG9wZW46ICQkWyQwIC0gNV0sIHBhdGg6ICQkWyQwIC0gNF0sIHBhcmFtczogJCRbJDAgLSAzXSwgaGFzaDogJCRbJDAgLSAyXSwgYmxvY2tQYXJhbXM6ICQkWyQwIC0gMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gNV0sICQkWyQwXSkgfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyBwYXRoOiAkJFskMCAtIDRdLCBwYXJhbXM6ICQkWyQwIC0gM10sIGhhc2g6ICQkWyQwIC0gMl0sIGJsb2NrUGFyYW1zOiAkJFskMCAtIDFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMCAtIDVdLCAkJFskMF0pIH07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgcGF0aDogJCRbJDAgLSA0XSwgcGFyYW1zOiAkJFskMCAtIDNdLCBoYXNoOiAkJFskMCAtIDJdLCBibG9ja1BhcmFtczogJCRbJDAgLSAxXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAgLSA1XSwgJCRbJDBdKSB9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gMV0sICQkWyQwIC0gMV0pLCBwcm9ncmFtOiAkJFskMF0gfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgdmFyIGludmVyc2UgPSB5eS5wcmVwYXJlQmxvY2soJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0gPSB5eS5wcmVwYXJlUHJvZ3JhbShbaW52ZXJzZV0sICQkWyQwIC0gMV0ubG9jKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5jaGFpbmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHN0cmlwOiAkJFskMCAtIDJdLnN0cmlwLCBwcm9ncmFtOiBwcm9ncmFtLCBjaGFpbjogdHJ1ZSB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyBwYXRoOiAkJFskMCAtIDFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMCAtIDJdLCAkJFskMF0pIH07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMCAtIDNdLCAkJFskMCAtIDJdLCAkJFskMCAtIDFdLCAkJFskMCAtIDRdLCB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAgLSAzXSwgJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDAgLSA0XSwgeXkuc3RyaXBGbGFncygkJFskMCAtIDRdLCAkJFskMF0pLCB0aGlzLl8kKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJCRbJDAgLSAzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogJCRbJDAgLSAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g6ICQkWyQwIC0gMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAgLSA0XSwgJCRbJDBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHl5LnByZXBhcmVQYXJ0aWFsQmxvY2soJCRbJDAgLSAyXSwgJCRbJDAgLSAxXSwgJCRbJDBdLCB0aGlzLl8kKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyBwYXRoOiAkJFskMCAtIDNdLCBwYXJhbXM6ICQkWyQwIC0gMl0sIGhhc2g6ICQkWyQwIC0gMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwIC0gNF0sICQkWyQwXSkgfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6ICQkWyQwIC0gM10sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6ICQkWyQwIC0gMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiAkJFskMCAtIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAnSGFzaCcsIHBhaXJzOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKSB9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB7IHR5cGU6ICdIYXNoUGFpcicsIGtleTogeXkuaWQoJCRbJDAgLSAyXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKSB9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSB5eS5pZCgkJFskMCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gJCRbJDBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogJ1N0cmluZ0xpdGVyYWwnLCB2YWx1ZTogJCRbJDBdLCBvcmlnaW5hbDogJCRbJDBdLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAnTnVtYmVyTGl0ZXJhbCcsIHZhbHVlOiBOdW1iZXIoJCRbJDBdKSwgb3JpZ2luYWw6IE51bWJlcigkJFskMF0pLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAnQm9vbGVhbkxpdGVyYWwnLCB2YWx1ZTogJCRbJDBdID09PSAndHJ1ZScsIG9yaWdpbmFsOiAkJFskMF0gPT09ICd0cnVlJywgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpIH07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IHsgdHlwZTogJ1VuZGVmaW5lZExpdGVyYWwnLCBvcmlnaW5hbDogdW5kZWZpbmVkLCB2YWx1ZTogdW5kZWZpbmVkLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCkgfTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geyB0eXBlOiAnTnVsbExpdGVyYWwnLCBvcmlnaW5hbDogbnVsbCwgdmFsdWU6IG51bGwsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKSB9O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSAkJFskMF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9ICQkWyQwXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0geXkucHJlcGFyZVBhdGgoZmFsc2UsICQkWyQwXSwgdGhpcy5fJCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDQ6XG4gICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMl0ucHVzaCh7IHBhcnQ6IHl5LmlkKCQkWyQwXSksIG9yaWdpbmFsOiAkJFskMF0sIHNlcGFyYXRvcjogJCRbJDAgLSAxXSB9KTt0aGlzLiQgPSAkJFskMCAtIDJdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ1OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbeyBwYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdIH1dO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ2OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0NzpcbiAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ5OlxuICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNTE6XG4gICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDU4OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA1OTpcbiAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDY1OlxuICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA3MDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNzE6XG4gICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDc4OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDgzOlxuICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4NjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gW107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODc6XG4gICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA5MTpcbiAgICAgICAgICAgICAgICAgICAgJCRbJDAgLSAxXS5wdXNoKCQkWyQwXSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgOTQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDk1OlxuICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgOTk6XG4gICAgICAgICAgICAgICAgICAgICQkWyQwIC0gMV0ucHVzaCgkJFskMF0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEwMDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kID0gWyQkWyQwXV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgICAgICAgICAgICAkJFskMCAtIDFdLnB1c2goJCRbJDBdKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHRhYmxlOiBbeyAzOiAxLCA0OiAyLCA1OiBbMiwgNDZdLCA2OiAzLCAxNDogWzIsIDQ2XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0sIDQ4OiBbMiwgNDZdLCA1MTogWzIsIDQ2XSwgNTU6IFsyLCA0Nl0sIDYwOiBbMiwgNDZdIH0sIHsgMTogWzNdIH0sIHsgNTogWzEsIDRdIH0sIHsgNTogWzIsIDJdLCA3OiA1LCA4OiA2LCA5OiA3LCAxMDogOCwgMTE6IDksIDEyOiAxMCwgMTM6IDExLCAxNDogWzEsIDEyXSwgMTU6IFsxLCAyMF0sIDE2OiAxNywgMTk6IFsxLCAyM10sIDI0OiAxNSwgMjc6IDE2LCAyOTogWzEsIDIxXSwgMzQ6IFsxLCAyMl0sIDM5OiBbMiwgMl0sIDQ0OiBbMiwgMl0sIDQ3OiBbMiwgMl0sIDQ4OiBbMSwgMTNdLCA1MTogWzEsIDE0XSwgNTU6IFsxLCAxOF0sIDU5OiAxOSwgNjA6IFsxLCAyNF0gfSwgeyAxOiBbMiwgMV0gfSwgeyA1OiBbMiwgNDddLCAxNDogWzIsIDQ3XSwgMTU6IFsyLCA0N10sIDE5OiBbMiwgNDddLCAyOTogWzIsIDQ3XSwgMzQ6IFsyLCA0N10sIDM5OiBbMiwgNDddLCA0NDogWzIsIDQ3XSwgNDc6IFsyLCA0N10sIDQ4OiBbMiwgNDddLCA1MTogWzIsIDQ3XSwgNTU6IFsyLCA0N10sIDYwOiBbMiwgNDddIH0sIHsgNTogWzIsIDNdLCAxNDogWzIsIDNdLCAxNTogWzIsIDNdLCAxOTogWzIsIDNdLCAyOTogWzIsIDNdLCAzNDogWzIsIDNdLCAzOTogWzIsIDNdLCA0NDogWzIsIDNdLCA0NzogWzIsIDNdLCA0ODogWzIsIDNdLCA1MTogWzIsIDNdLCA1NTogWzIsIDNdLCA2MDogWzIsIDNdIH0sIHsgNTogWzIsIDRdLCAxNDogWzIsIDRdLCAxNTogWzIsIDRdLCAxOTogWzIsIDRdLCAyOTogWzIsIDRdLCAzNDogWzIsIDRdLCAzOTogWzIsIDRdLCA0NDogWzIsIDRdLCA0NzogWzIsIDRdLCA0ODogWzIsIDRdLCA1MTogWzIsIDRdLCA1NTogWzIsIDRdLCA2MDogWzIsIDRdIH0sIHsgNTogWzIsIDVdLCAxNDogWzIsIDVdLCAxNTogWzIsIDVdLCAxOTogWzIsIDVdLCAyOTogWzIsIDVdLCAzNDogWzIsIDVdLCAzOTogWzIsIDVdLCA0NDogWzIsIDVdLCA0NzogWzIsIDVdLCA0ODogWzIsIDVdLCA1MTogWzIsIDVdLCA1NTogWzIsIDVdLCA2MDogWzIsIDVdIH0sIHsgNTogWzIsIDZdLCAxNDogWzIsIDZdLCAxNTogWzIsIDZdLCAxOTogWzIsIDZdLCAyOTogWzIsIDZdLCAzNDogWzIsIDZdLCAzOTogWzIsIDZdLCA0NDogWzIsIDZdLCA0NzogWzIsIDZdLCA0ODogWzIsIDZdLCA1MTogWzIsIDZdLCA1NTogWzIsIDZdLCA2MDogWzIsIDZdIH0sIHsgNTogWzIsIDddLCAxNDogWzIsIDddLCAxNTogWzIsIDddLCAxOTogWzIsIDddLCAyOTogWzIsIDddLCAzNDogWzIsIDddLCAzOTogWzIsIDddLCA0NDogWzIsIDddLCA0NzogWzIsIDddLCA0ODogWzIsIDddLCA1MTogWzIsIDddLCA1NTogWzIsIDddLCA2MDogWzIsIDddIH0sIHsgNTogWzIsIDhdLCAxNDogWzIsIDhdLCAxNTogWzIsIDhdLCAxOTogWzIsIDhdLCAyOTogWzIsIDhdLCAzNDogWzIsIDhdLCAzOTogWzIsIDhdLCA0NDogWzIsIDhdLCA0NzogWzIsIDhdLCA0ODogWzIsIDhdLCA1MTogWzIsIDhdLCA1NTogWzIsIDhdLCA2MDogWzIsIDhdIH0sIHsgNTogWzIsIDldLCAxNDogWzIsIDldLCAxNTogWzIsIDldLCAxOTogWzIsIDldLCAyOTogWzIsIDldLCAzNDogWzIsIDldLCAzOTogWzIsIDldLCA0NDogWzIsIDldLCA0NzogWzIsIDldLCA0ODogWzIsIDldLCA1MTogWzIsIDldLCA1NTogWzIsIDldLCA2MDogWzIsIDldIH0sIHsgMjA6IDI1LCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDIwOiAzNiwgNzI6IFsxLCAzNV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyA0OiAzNywgNjogMywgMTQ6IFsyLCA0Nl0sIDE1OiBbMiwgNDZdLCAxOTogWzIsIDQ2XSwgMjk6IFsyLCA0Nl0sIDM0OiBbMiwgNDZdLCAzOTogWzIsIDQ2XSwgNDQ6IFsyLCA0Nl0sIDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDogWzIsIDQ2XSB9LCB7IDQ6IDM4LCA2OiAzLCAxNDogWzIsIDQ2XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0sIDQ0OiBbMiwgNDZdLCA0NzogWzIsIDQ2XSwgNDg6IFsyLCA0Nl0sIDUxOiBbMiwgNDZdLCA1NTogWzIsIDQ2XSwgNjA6IFsyLCA0Nl0gfSwgeyAxNTogWzIsIDQ4XSwgMTc6IDM5LCAxODogWzIsIDQ4XSB9LCB7IDIwOiA0MSwgNTY6IDQwLCA2NDogNDIsIDY1OiBbMSwgNDNdLCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDQ6IDQ0LCA2OiAzLCAxNDogWzIsIDQ2XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0sIDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDogWzIsIDQ2XSB9LCB7IDU6IFsyLCAxMF0sIDE0OiBbMiwgMTBdLCAxNTogWzIsIDEwXSwgMTg6IFsyLCAxMF0sIDE5OiBbMiwgMTBdLCAyOTogWzIsIDEwXSwgMzQ6IFsyLCAxMF0sIDM5OiBbMiwgMTBdLCA0NDogWzIsIDEwXSwgNDc6IFsyLCAxMF0sIDQ4OiBbMiwgMTBdLCA1MTogWzIsIDEwXSwgNTU6IFsyLCAxMF0sIDYwOiBbMiwgMTBdIH0sIHsgMjA6IDQ1LCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDIwOiA0NiwgNzI6IFsxLCAzNV0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyMDogNDcsIDcyOiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMjA6IDQxLCA1NjogNDgsIDY0OiA0MiwgNjU6IFsxLCA0M10sIDcyOiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMzM6IFsyLCA3OF0sIDQ5OiA0OSwgNjU6IFsyLCA3OF0sIDcyOiBbMiwgNzhdLCA4MDogWzIsIDc4XSwgODE6IFsyLCA3OF0sIDgyOiBbMiwgNzhdLCA4MzogWzIsIDc4XSwgODQ6IFsyLCA3OF0sIDg1OiBbMiwgNzhdIH0sIHsgMjM6IFsyLCAzM10sIDMzOiBbMiwgMzNdLCA1NDogWzIsIDMzXSwgNjU6IFsyLCAzM10sIDY4OiBbMiwgMzNdLCA3MjogWzIsIDMzXSwgNzU6IFsyLCAzM10sIDgwOiBbMiwgMzNdLCA4MTogWzIsIDMzXSwgODI6IFsyLCAzM10sIDgzOiBbMiwgMzNdLCA4NDogWzIsIDMzXSwgODU6IFsyLCAzM10gfSwgeyAyMzogWzIsIDM0XSwgMzM6IFsyLCAzNF0sIDU0OiBbMiwgMzRdLCA2NTogWzIsIDM0XSwgNjg6IFsyLCAzNF0sIDcyOiBbMiwgMzRdLCA3NTogWzIsIDM0XSwgODA6IFsyLCAzNF0sIDgxOiBbMiwgMzRdLCA4MjogWzIsIDM0XSwgODM6IFsyLCAzNF0sIDg0OiBbMiwgMzRdLCA4NTogWzIsIDM0XSB9LCB7IDIzOiBbMiwgMzVdLCAzMzogWzIsIDM1XSwgNTQ6IFsyLCAzNV0sIDY1OiBbMiwgMzVdLCA2ODogWzIsIDM1XSwgNzI6IFsyLCAzNV0sIDc1OiBbMiwgMzVdLCA4MDogWzIsIDM1XSwgODE6IFsyLCAzNV0sIDgyOiBbMiwgMzVdLCA4MzogWzIsIDM1XSwgODQ6IFsyLCAzNV0sIDg1OiBbMiwgMzVdIH0sIHsgMjM6IFsyLCAzNl0sIDMzOiBbMiwgMzZdLCA1NDogWzIsIDM2XSwgNjU6IFsyLCAzNl0sIDY4OiBbMiwgMzZdLCA3MjogWzIsIDM2XSwgNzU6IFsyLCAzNl0sIDgwOiBbMiwgMzZdLCA4MTogWzIsIDM2XSwgODI6IFsyLCAzNl0sIDgzOiBbMiwgMzZdLCA4NDogWzIsIDM2XSwgODU6IFsyLCAzNl0gfSwgeyAyMzogWzIsIDM3XSwgMzM6IFsyLCAzN10sIDU0OiBbMiwgMzddLCA2NTogWzIsIDM3XSwgNjg6IFsyLCAzN10sIDcyOiBbMiwgMzddLCA3NTogWzIsIDM3XSwgODA6IFsyLCAzN10sIDgxOiBbMiwgMzddLCA4MjogWzIsIDM3XSwgODM6IFsyLCAzN10sIDg0OiBbMiwgMzddLCA4NTogWzIsIDM3XSB9LCB7IDIzOiBbMiwgMzhdLCAzMzogWzIsIDM4XSwgNTQ6IFsyLCAzOF0sIDY1OiBbMiwgMzhdLCA2ODogWzIsIDM4XSwgNzI6IFsyLCAzOF0sIDc1OiBbMiwgMzhdLCA4MDogWzIsIDM4XSwgODE6IFsyLCAzOF0sIDgyOiBbMiwgMzhdLCA4MzogWzIsIDM4XSwgODQ6IFsyLCAzOF0sIDg1OiBbMiwgMzhdIH0sIHsgMjM6IFsyLCAzOV0sIDMzOiBbMiwgMzldLCA1NDogWzIsIDM5XSwgNjU6IFsyLCAzOV0sIDY4OiBbMiwgMzldLCA3MjogWzIsIDM5XSwgNzU6IFsyLCAzOV0sIDgwOiBbMiwgMzldLCA4MTogWzIsIDM5XSwgODI6IFsyLCAzOV0sIDgzOiBbMiwgMzldLCA4NDogWzIsIDM5XSwgODU6IFsyLCAzOV0gfSwgeyAyMzogWzIsIDQzXSwgMzM6IFsyLCA0M10sIDU0OiBbMiwgNDNdLCA2NTogWzIsIDQzXSwgNjg6IFsyLCA0M10sIDcyOiBbMiwgNDNdLCA3NTogWzIsIDQzXSwgODA6IFsyLCA0M10sIDgxOiBbMiwgNDNdLCA4MjogWzIsIDQzXSwgODM6IFsyLCA0M10sIDg0OiBbMiwgNDNdLCA4NTogWzIsIDQzXSwgODc6IFsxLCA1MF0gfSwgeyA3MjogWzEsIDM1XSwgODY6IDUxIH0sIHsgMjM6IFsyLCA0NV0sIDMzOiBbMiwgNDVdLCA1NDogWzIsIDQ1XSwgNjU6IFsyLCA0NV0sIDY4OiBbMiwgNDVdLCA3MjogWzIsIDQ1XSwgNzU6IFsyLCA0NV0sIDgwOiBbMiwgNDVdLCA4MTogWzIsIDQ1XSwgODI6IFsyLCA0NV0sIDgzOiBbMiwgNDVdLCA4NDogWzIsIDQ1XSwgODU6IFsyLCA0NV0sIDg3OiBbMiwgNDVdIH0sIHsgNTI6IDUyLCA1NDogWzIsIDgyXSwgNjU6IFsyLCA4Ml0sIDcyOiBbMiwgODJdLCA4MDogWzIsIDgyXSwgODE6IFsyLCA4Ml0sIDgyOiBbMiwgODJdLCA4MzogWzIsIDgyXSwgODQ6IFsyLCA4Ml0sIDg1OiBbMiwgODJdIH0sIHsgMjU6IDUzLCAzODogNTUsIDM5OiBbMSwgNTddLCA0MzogNTYsIDQ0OiBbMSwgNThdLCA0NTogNTQsIDQ3OiBbMiwgNTRdIH0sIHsgMjg6IDU5LCA0MzogNjAsIDQ0OiBbMSwgNThdLCA0NzogWzIsIDU2XSB9LCB7IDEzOiA2MiwgMTU6IFsxLCAyMF0sIDE4OiBbMSwgNjFdIH0sIHsgMzM6IFsyLCA4Nl0sIDU3OiA2MywgNjU6IFsyLCA4Nl0sIDcyOiBbMiwgODZdLCA4MDogWzIsIDg2XSwgODE6IFsyLCA4Nl0sIDgyOiBbMiwgODZdLCA4MzogWzIsIDg2XSwgODQ6IFsyLCA4Nl0sIDg1OiBbMiwgODZdIH0sIHsgMzM6IFsyLCA0MF0sIDY1OiBbMiwgNDBdLCA3MjogWzIsIDQwXSwgODA6IFsyLCA0MF0sIDgxOiBbMiwgNDBdLCA4MjogWzIsIDQwXSwgODM6IFsyLCA0MF0sIDg0OiBbMiwgNDBdLCA4NTogWzIsIDQwXSB9LCB7IDMzOiBbMiwgNDFdLCA2NTogWzIsIDQxXSwgNzI6IFsyLCA0MV0sIDgwOiBbMiwgNDFdLCA4MTogWzIsIDQxXSwgODI6IFsyLCA0MV0sIDgzOiBbMiwgNDFdLCA4NDogWzIsIDQxXSwgODU6IFsyLCA0MV0gfSwgeyAyMDogNjQsIDcyOiBbMSwgMzVdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMjY6IDY1LCA0NzogWzEsIDY2XSB9LCB7IDMwOiA2NywgMzM6IFsyLCA1OF0sIDY1OiBbMiwgNThdLCA3MjogWzIsIDU4XSwgNzU6IFsyLCA1OF0sIDgwOiBbMiwgNThdLCA4MTogWzIsIDU4XSwgODI6IFsyLCA1OF0sIDgzOiBbMiwgNThdLCA4NDogWzIsIDU4XSwgODU6IFsyLCA1OF0gfSwgeyAzMzogWzIsIDY0XSwgMzU6IDY4LCA2NTogWzIsIDY0XSwgNzI6IFsyLCA2NF0sIDc1OiBbMiwgNjRdLCA4MDogWzIsIDY0XSwgODE6IFsyLCA2NF0sIDgyOiBbMiwgNjRdLCA4MzogWzIsIDY0XSwgODQ6IFsyLCA2NF0sIDg1OiBbMiwgNjRdIH0sIHsgMjE6IDY5LCAyMzogWzIsIDUwXSwgNjU6IFsyLCA1MF0sIDcyOiBbMiwgNTBdLCA4MDogWzIsIDUwXSwgODE6IFsyLCA1MF0sIDgyOiBbMiwgNTBdLCA4MzogWzIsIDUwXSwgODQ6IFsyLCA1MF0sIDg1OiBbMiwgNTBdIH0sIHsgMzM6IFsyLCA5MF0sIDYxOiA3MCwgNjU6IFsyLCA5MF0sIDcyOiBbMiwgOTBdLCA4MDogWzIsIDkwXSwgODE6IFsyLCA5MF0sIDgyOiBbMiwgOTBdLCA4MzogWzIsIDkwXSwgODQ6IFsyLCA5MF0sIDg1OiBbMiwgOTBdIH0sIHsgMjA6IDc0LCAzMzogWzIsIDgwXSwgNTA6IDcxLCA2MzogNzIsIDY0OiA3NSwgNjU6IFsxLCA0M10sIDY5OiA3MywgNzA6IDc2LCA3MTogNzcsIDcyOiBbMSwgNzhdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgNzI6IFsxLCA3OV0gfSwgeyAyMzogWzIsIDQyXSwgMzM6IFsyLCA0Ml0sIDU0OiBbMiwgNDJdLCA2NTogWzIsIDQyXSwgNjg6IFsyLCA0Ml0sIDcyOiBbMiwgNDJdLCA3NTogWzIsIDQyXSwgODA6IFsyLCA0Ml0sIDgxOiBbMiwgNDJdLCA4MjogWzIsIDQyXSwgODM6IFsyLCA0Ml0sIDg0OiBbMiwgNDJdLCA4NTogWzIsIDQyXSwgODc6IFsxLCA1MF0gfSwgeyAyMDogNzQsIDUzOiA4MCwgNTQ6IFsyLCA4NF0sIDYzOiA4MSwgNjQ6IDc1LCA2NTogWzEsIDQzXSwgNjk6IDgyLCA3MDogNzYsIDcxOiA3NywgNzI6IFsxLCA3OF0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyNjogODMsIDQ3OiBbMSwgNjZdIH0sIHsgNDc6IFsyLCA1NV0gfSwgeyA0OiA4NCwgNjogMywgMTQ6IFsyLCA0Nl0sIDE1OiBbMiwgNDZdLCAxOTogWzIsIDQ2XSwgMjk6IFsyLCA0Nl0sIDM0OiBbMiwgNDZdLCAzOTogWzIsIDQ2XSwgNDQ6IFsyLCA0Nl0sIDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDogWzIsIDQ2XSB9LCB7IDQ3OiBbMiwgMjBdIH0sIHsgMjA6IDg1LCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDQ6IDg2LCA2OiAzLCAxNDogWzIsIDQ2XSwgMTU6IFsyLCA0Nl0sIDE5OiBbMiwgNDZdLCAyOTogWzIsIDQ2XSwgMzQ6IFsyLCA0Nl0sIDQ3OiBbMiwgNDZdLCA0ODogWzIsIDQ2XSwgNTE6IFsyLCA0Nl0sIDU1OiBbMiwgNDZdLCA2MDogWzIsIDQ2XSB9LCB7IDI2OiA4NywgNDc6IFsxLCA2Nl0gfSwgeyA0NzogWzIsIDU3XSB9LCB7IDU6IFsyLCAxMV0sIDE0OiBbMiwgMTFdLCAxNTogWzIsIDExXSwgMTk6IFsyLCAxMV0sIDI5OiBbMiwgMTFdLCAzNDogWzIsIDExXSwgMzk6IFsyLCAxMV0sIDQ0OiBbMiwgMTFdLCA0NzogWzIsIDExXSwgNDg6IFsyLCAxMV0sIDUxOiBbMiwgMTFdLCA1NTogWzIsIDExXSwgNjA6IFsyLCAxMV0gfSwgeyAxNTogWzIsIDQ5XSwgMTg6IFsyLCA0OV0gfSwgeyAyMDogNzQsIDMzOiBbMiwgODhdLCA1ODogODgsIDYzOiA4OSwgNjQ6IDc1LCA2NTogWzEsIDQzXSwgNjk6IDkwLCA3MDogNzYsIDcxOiA3NywgNzI6IFsxLCA3OF0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyA2NTogWzIsIDk0XSwgNjY6IDkxLCA2ODogWzIsIDk0XSwgNzI6IFsyLCA5NF0sIDgwOiBbMiwgOTRdLCA4MTogWzIsIDk0XSwgODI6IFsyLCA5NF0sIDgzOiBbMiwgOTRdLCA4NDogWzIsIDk0XSwgODU6IFsyLCA5NF0gfSwgeyA1OiBbMiwgMjVdLCAxNDogWzIsIDI1XSwgMTU6IFsyLCAyNV0sIDE5OiBbMiwgMjVdLCAyOTogWzIsIDI1XSwgMzQ6IFsyLCAyNV0sIDM5OiBbMiwgMjVdLCA0NDogWzIsIDI1XSwgNDc6IFsyLCAyNV0sIDQ4OiBbMiwgMjVdLCA1MTogWzIsIDI1XSwgNTU6IFsyLCAyNV0sIDYwOiBbMiwgMjVdIH0sIHsgMjA6IDkyLCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDIwOiA3NCwgMzE6IDkzLCAzMzogWzIsIDYwXSwgNjM6IDk0LCA2NDogNzUsIDY1OiBbMSwgNDNdLCA2OTogOTUsIDcwOiA3NiwgNzE6IDc3LCA3MjogWzEsIDc4XSwgNzU6IFsyLCA2MF0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyMDogNzQsIDMzOiBbMiwgNjZdLCAzNjogOTYsIDYzOiA5NywgNjQ6IDc1LCA2NTogWzEsIDQzXSwgNjk6IDk4LCA3MDogNzYsIDcxOiA3NywgNzI6IFsxLCA3OF0sIDc1OiBbMiwgNjZdLCA3ODogMjYsIDc5OiAyNywgODA6IFsxLCAyOF0sIDgxOiBbMSwgMjldLCA4MjogWzEsIDMwXSwgODM6IFsxLCAzMV0sIDg0OiBbMSwgMzJdLCA4NTogWzEsIDM0XSwgODY6IDMzIH0sIHsgMjA6IDc0LCAyMjogOTksIDIzOiBbMiwgNTJdLCA2MzogMTAwLCA2NDogNzUsIDY1OiBbMSwgNDNdLCA2OTogMTAxLCA3MDogNzYsIDcxOiA3NywgNzI6IFsxLCA3OF0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAyMDogNzQsIDMzOiBbMiwgOTJdLCA2MjogMTAyLCA2MzogMTAzLCA2NDogNzUsIDY1OiBbMSwgNDNdLCA2OTogMTA0LCA3MDogNzYsIDcxOiA3NywgNzI6IFsxLCA3OF0sIDc4OiAyNiwgNzk6IDI3LCA4MDogWzEsIDI4XSwgODE6IFsxLCAyOV0sIDgyOiBbMSwgMzBdLCA4MzogWzEsIDMxXSwgODQ6IFsxLCAzMl0sIDg1OiBbMSwgMzRdLCA4NjogMzMgfSwgeyAzMzogWzEsIDEwNV0gfSwgeyAzMzogWzIsIDc5XSwgNjU6IFsyLCA3OV0sIDcyOiBbMiwgNzldLCA4MDogWzIsIDc5XSwgODE6IFsyLCA3OV0sIDgyOiBbMiwgNzldLCA4MzogWzIsIDc5XSwgODQ6IFsyLCA3OV0sIDg1OiBbMiwgNzldIH0sIHsgMzM6IFsyLCA4MV0gfSwgeyAyMzogWzIsIDI3XSwgMzM6IFsyLCAyN10sIDU0OiBbMiwgMjddLCA2NTogWzIsIDI3XSwgNjg6IFsyLCAyN10sIDcyOiBbMiwgMjddLCA3NTogWzIsIDI3XSwgODA6IFsyLCAyN10sIDgxOiBbMiwgMjddLCA4MjogWzIsIDI3XSwgODM6IFsyLCAyN10sIDg0OiBbMiwgMjddLCA4NTogWzIsIDI3XSB9LCB7IDIzOiBbMiwgMjhdLCAzMzogWzIsIDI4XSwgNTQ6IFsyLCAyOF0sIDY1OiBbMiwgMjhdLCA2ODogWzIsIDI4XSwgNzI6IFsyLCAyOF0sIDc1OiBbMiwgMjhdLCA4MDogWzIsIDI4XSwgODE6IFsyLCAyOF0sIDgyOiBbMiwgMjhdLCA4MzogWzIsIDI4XSwgODQ6IFsyLCAyOF0sIDg1OiBbMiwgMjhdIH0sIHsgMjM6IFsyLCAzMF0sIDMzOiBbMiwgMzBdLCA1NDogWzIsIDMwXSwgNjg6IFsyLCAzMF0sIDcxOiAxMDYsIDcyOiBbMSwgMTA3XSwgNzU6IFsyLCAzMF0gfSwgeyAyMzogWzIsIDk4XSwgMzM6IFsyLCA5OF0sIDU0OiBbMiwgOThdLCA2ODogWzIsIDk4XSwgNzI6IFsyLCA5OF0sIDc1OiBbMiwgOThdIH0sIHsgMjM6IFsyLCA0NV0sIDMzOiBbMiwgNDVdLCA1NDogWzIsIDQ1XSwgNjU6IFsyLCA0NV0sIDY4OiBbMiwgNDVdLCA3MjogWzIsIDQ1XSwgNzM6IFsxLCAxMDhdLCA3NTogWzIsIDQ1XSwgODA6IFsyLCA0NV0sIDgxOiBbMiwgNDVdLCA4MjogWzIsIDQ1XSwgODM6IFsyLCA0NV0sIDg0OiBbMiwgNDVdLCA4NTogWzIsIDQ1XSwgODc6IFsyLCA0NV0gfSwgeyAyMzogWzIsIDQ0XSwgMzM6IFsyLCA0NF0sIDU0OiBbMiwgNDRdLCA2NTogWzIsIDQ0XSwgNjg6IFsyLCA0NF0sIDcyOiBbMiwgNDRdLCA3NTogWzIsIDQ0XSwgODA6IFsyLCA0NF0sIDgxOiBbMiwgNDRdLCA4MjogWzIsIDQ0XSwgODM6IFsyLCA0NF0sIDg0OiBbMiwgNDRdLCA4NTogWzIsIDQ0XSwgODc6IFsyLCA0NF0gfSwgeyA1NDogWzEsIDEwOV0gfSwgeyA1NDogWzIsIDgzXSwgNjU6IFsyLCA4M10sIDcyOiBbMiwgODNdLCA4MDogWzIsIDgzXSwgODE6IFsyLCA4M10sIDgyOiBbMiwgODNdLCA4MzogWzIsIDgzXSwgODQ6IFsyLCA4M10sIDg1OiBbMiwgODNdIH0sIHsgNTQ6IFsyLCA4NV0gfSwgeyA1OiBbMiwgMTNdLCAxNDogWzIsIDEzXSwgMTU6IFsyLCAxM10sIDE5OiBbMiwgMTNdLCAyOTogWzIsIDEzXSwgMzQ6IFsyLCAxM10sIDM5OiBbMiwgMTNdLCA0NDogWzIsIDEzXSwgNDc6IFsyLCAxM10sIDQ4OiBbMiwgMTNdLCA1MTogWzIsIDEzXSwgNTU6IFsyLCAxM10sIDYwOiBbMiwgMTNdIH0sIHsgMzg6IDU1LCAzOTogWzEsIDU3XSwgNDM6IDU2LCA0NDogWzEsIDU4XSwgNDU6IDExMSwgNDY6IDExMCwgNDc6IFsyLCA3Nl0gfSwgeyAzMzogWzIsIDcwXSwgNDA6IDExMiwgNjU6IFsyLCA3MF0sIDcyOiBbMiwgNzBdLCA3NTogWzIsIDcwXSwgODA6IFsyLCA3MF0sIDgxOiBbMiwgNzBdLCA4MjogWzIsIDcwXSwgODM6IFsyLCA3MF0sIDg0OiBbMiwgNzBdLCA4NTogWzIsIDcwXSB9LCB7IDQ3OiBbMiwgMThdIH0sIHsgNTogWzIsIDE0XSwgMTQ6IFsyLCAxNF0sIDE1OiBbMiwgMTRdLCAxOTogWzIsIDE0XSwgMjk6IFsyLCAxNF0sIDM0OiBbMiwgMTRdLCAzOTogWzIsIDE0XSwgNDQ6IFsyLCAxNF0sIDQ3OiBbMiwgMTRdLCA0ODogWzIsIDE0XSwgNTE6IFsyLCAxNF0sIDU1OiBbMiwgMTRdLCA2MDogWzIsIDE0XSB9LCB7IDMzOiBbMSwgMTEzXSB9LCB7IDMzOiBbMiwgODddLCA2NTogWzIsIDg3XSwgNzI6IFsyLCA4N10sIDgwOiBbMiwgODddLCA4MTogWzIsIDg3XSwgODI6IFsyLCA4N10sIDgzOiBbMiwgODddLCA4NDogWzIsIDg3XSwgODU6IFsyLCA4N10gfSwgeyAzMzogWzIsIDg5XSB9LCB7IDIwOiA3NCwgNjM6IDExNSwgNjQ6IDc1LCA2NTogWzEsIDQzXSwgNjc6IDExNCwgNjg6IFsyLCA5Nl0sIDY5OiAxMTYsIDcwOiA3NiwgNzE6IDc3LCA3MjogWzEsIDc4XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDMzOiBbMSwgMTE3XSB9LCB7IDMyOiAxMTgsIDMzOiBbMiwgNjJdLCA3NDogMTE5LCA3NTogWzEsIDEyMF0gfSwgeyAzMzogWzIsIDU5XSwgNjU6IFsyLCA1OV0sIDcyOiBbMiwgNTldLCA3NTogWzIsIDU5XSwgODA6IFsyLCA1OV0sIDgxOiBbMiwgNTldLCA4MjogWzIsIDU5XSwgODM6IFsyLCA1OV0sIDg0OiBbMiwgNTldLCA4NTogWzIsIDU5XSB9LCB7IDMzOiBbMiwgNjFdLCA3NTogWzIsIDYxXSB9LCB7IDMzOiBbMiwgNjhdLCAzNzogMTIxLCA3NDogMTIyLCA3NTogWzEsIDEyMF0gfSwgeyAzMzogWzIsIDY1XSwgNjU6IFsyLCA2NV0sIDcyOiBbMiwgNjVdLCA3NTogWzIsIDY1XSwgODA6IFsyLCA2NV0sIDgxOiBbMiwgNjVdLCA4MjogWzIsIDY1XSwgODM6IFsyLCA2NV0sIDg0OiBbMiwgNjVdLCA4NTogWzIsIDY1XSB9LCB7IDMzOiBbMiwgNjddLCA3NTogWzIsIDY3XSB9LCB7IDIzOiBbMSwgMTIzXSB9LCB7IDIzOiBbMiwgNTFdLCA2NTogWzIsIDUxXSwgNzI6IFsyLCA1MV0sIDgwOiBbMiwgNTFdLCA4MTogWzIsIDUxXSwgODI6IFsyLCA1MV0sIDgzOiBbMiwgNTFdLCA4NDogWzIsIDUxXSwgODU6IFsyLCA1MV0gfSwgeyAyMzogWzIsIDUzXSB9LCB7IDMzOiBbMSwgMTI0XSB9LCB7IDMzOiBbMiwgOTFdLCA2NTogWzIsIDkxXSwgNzI6IFsyLCA5MV0sIDgwOiBbMiwgOTFdLCA4MTogWzIsIDkxXSwgODI6IFsyLCA5MV0sIDgzOiBbMiwgOTFdLCA4NDogWzIsIDkxXSwgODU6IFsyLCA5MV0gfSwgeyAzMzogWzIsIDkzXSB9LCB7IDU6IFsyLCAyMl0sIDE0OiBbMiwgMjJdLCAxNTogWzIsIDIyXSwgMTk6IFsyLCAyMl0sIDI5OiBbMiwgMjJdLCAzNDogWzIsIDIyXSwgMzk6IFsyLCAyMl0sIDQ0OiBbMiwgMjJdLCA0NzogWzIsIDIyXSwgNDg6IFsyLCAyMl0sIDUxOiBbMiwgMjJdLCA1NTogWzIsIDIyXSwgNjA6IFsyLCAyMl0gfSwgeyAyMzogWzIsIDk5XSwgMzM6IFsyLCA5OV0sIDU0OiBbMiwgOTldLCA2ODogWzIsIDk5XSwgNzI6IFsyLCA5OV0sIDc1OiBbMiwgOTldIH0sIHsgNzM6IFsxLCAxMDhdIH0sIHsgMjA6IDc0LCA2MzogMTI1LCA2NDogNzUsIDY1OiBbMSwgNDNdLCA3MjogWzEsIDM1XSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDU6IFsyLCAyM10sIDE0OiBbMiwgMjNdLCAxNTogWzIsIDIzXSwgMTk6IFsyLCAyM10sIDI5OiBbMiwgMjNdLCAzNDogWzIsIDIzXSwgMzk6IFsyLCAyM10sIDQ0OiBbMiwgMjNdLCA0NzogWzIsIDIzXSwgNDg6IFsyLCAyM10sIDUxOiBbMiwgMjNdLCA1NTogWzIsIDIzXSwgNjA6IFsyLCAyM10gfSwgeyA0NzogWzIsIDE5XSB9LCB7IDQ3OiBbMiwgNzddIH0sIHsgMjA6IDc0LCAzMzogWzIsIDcyXSwgNDE6IDEyNiwgNjM6IDEyNywgNjQ6IDc1LCA2NTogWzEsIDQzXSwgNjk6IDEyOCwgNzA6IDc2LCA3MTogNzcsIDcyOiBbMSwgNzhdLCA3NTogWzIsIDcyXSwgNzg6IDI2LCA3OTogMjcsIDgwOiBbMSwgMjhdLCA4MTogWzEsIDI5XSwgODI6IFsxLCAzMF0sIDgzOiBbMSwgMzFdLCA4NDogWzEsIDMyXSwgODU6IFsxLCAzNF0sIDg2OiAzMyB9LCB7IDU6IFsyLCAyNF0sIDE0OiBbMiwgMjRdLCAxNTogWzIsIDI0XSwgMTk6IFsyLCAyNF0sIDI5OiBbMiwgMjRdLCAzNDogWzIsIDI0XSwgMzk6IFsyLCAyNF0sIDQ0OiBbMiwgMjRdLCA0NzogWzIsIDI0XSwgNDg6IFsyLCAyNF0sIDUxOiBbMiwgMjRdLCA1NTogWzIsIDI0XSwgNjA6IFsyLCAyNF0gfSwgeyA2ODogWzEsIDEyOV0gfSwgeyA2NTogWzIsIDk1XSwgNjg6IFsyLCA5NV0sIDcyOiBbMiwgOTVdLCA4MDogWzIsIDk1XSwgODE6IFsyLCA5NV0sIDgyOiBbMiwgOTVdLCA4MzogWzIsIDk1XSwgODQ6IFsyLCA5NV0sIDg1OiBbMiwgOTVdIH0sIHsgNjg6IFsyLCA5N10gfSwgeyA1OiBbMiwgMjFdLCAxNDogWzIsIDIxXSwgMTU6IFsyLCAyMV0sIDE5OiBbMiwgMjFdLCAyOTogWzIsIDIxXSwgMzQ6IFsyLCAyMV0sIDM5OiBbMiwgMjFdLCA0NDogWzIsIDIxXSwgNDc6IFsyLCAyMV0sIDQ4OiBbMiwgMjFdLCA1MTogWzIsIDIxXSwgNTU6IFsyLCAyMV0sIDYwOiBbMiwgMjFdIH0sIHsgMzM6IFsxLCAxMzBdIH0sIHsgMzM6IFsyLCA2M10gfSwgeyA3MjogWzEsIDEzMl0sIDc2OiAxMzEgfSwgeyAzMzogWzEsIDEzM10gfSwgeyAzMzogWzIsIDY5XSB9LCB7IDE1OiBbMiwgMTJdLCAxODogWzIsIDEyXSB9LCB7IDE0OiBbMiwgMjZdLCAxNTogWzIsIDI2XSwgMTk6IFsyLCAyNl0sIDI5OiBbMiwgMjZdLCAzNDogWzIsIDI2XSwgNDc6IFsyLCAyNl0sIDQ4OiBbMiwgMjZdLCA1MTogWzIsIDI2XSwgNTU6IFsyLCAyNl0sIDYwOiBbMiwgMjZdIH0sIHsgMjM6IFsyLCAzMV0sIDMzOiBbMiwgMzFdLCA1NDogWzIsIDMxXSwgNjg6IFsyLCAzMV0sIDcyOiBbMiwgMzFdLCA3NTogWzIsIDMxXSB9LCB7IDMzOiBbMiwgNzRdLCA0MjogMTM0LCA3NDogMTM1LCA3NTogWzEsIDEyMF0gfSwgeyAzMzogWzIsIDcxXSwgNjU6IFsyLCA3MV0sIDcyOiBbMiwgNzFdLCA3NTogWzIsIDcxXSwgODA6IFsyLCA3MV0sIDgxOiBbMiwgNzFdLCA4MjogWzIsIDcxXSwgODM6IFsyLCA3MV0sIDg0OiBbMiwgNzFdLCA4NTogWzIsIDcxXSB9LCB7IDMzOiBbMiwgNzNdLCA3NTogWzIsIDczXSB9LCB7IDIzOiBbMiwgMjldLCAzMzogWzIsIDI5XSwgNTQ6IFsyLCAyOV0sIDY1OiBbMiwgMjldLCA2ODogWzIsIDI5XSwgNzI6IFsyLCAyOV0sIDc1OiBbMiwgMjldLCA4MDogWzIsIDI5XSwgODE6IFsyLCAyOV0sIDgyOiBbMiwgMjldLCA4MzogWzIsIDI5XSwgODQ6IFsyLCAyOV0sIDg1OiBbMiwgMjldIH0sIHsgMTQ6IFsyLCAxNV0sIDE1OiBbMiwgMTVdLCAxOTogWzIsIDE1XSwgMjk6IFsyLCAxNV0sIDM0OiBbMiwgMTVdLCAzOTogWzIsIDE1XSwgNDQ6IFsyLCAxNV0sIDQ3OiBbMiwgMTVdLCA0ODogWzIsIDE1XSwgNTE6IFsyLCAxNV0sIDU1OiBbMiwgMTVdLCA2MDogWzIsIDE1XSB9LCB7IDcyOiBbMSwgMTM3XSwgNzc6IFsxLCAxMzZdIH0sIHsgNzI6IFsyLCAxMDBdLCA3NzogWzIsIDEwMF0gfSwgeyAxNDogWzIsIDE2XSwgMTU6IFsyLCAxNl0sIDE5OiBbMiwgMTZdLCAyOTogWzIsIDE2XSwgMzQ6IFsyLCAxNl0sIDQ0OiBbMiwgMTZdLCA0NzogWzIsIDE2XSwgNDg6IFsyLCAxNl0sIDUxOiBbMiwgMTZdLCA1NTogWzIsIDE2XSwgNjA6IFsyLCAxNl0gfSwgeyAzMzogWzEsIDEzOF0gfSwgeyAzMzogWzIsIDc1XSB9LCB7IDMzOiBbMiwgMzJdIH0sIHsgNzI6IFsyLCAxMDFdLCA3NzogWzIsIDEwMV0gfSwgeyAxNDogWzIsIDE3XSwgMTU6IFsyLCAxN10sIDE5OiBbMiwgMTddLCAyOTogWzIsIDE3XSwgMzQ6IFsyLCAxN10sIDM5OiBbMiwgMTddLCA0NDogWzIsIDE3XSwgNDc6IFsyLCAxN10sIDQ4OiBbMiwgMTddLCA1MTogWzIsIDE3XSwgNTU6IFsyLCAxN10sIDYwOiBbMiwgMTddIH1dLFxuICAgICAgICBkZWZhdWx0QWN0aW9uczogeyA0OiBbMiwgMV0sIDU0OiBbMiwgNTVdLCA1NjogWzIsIDIwXSwgNjA6IFsyLCA1N10sIDczOiBbMiwgODFdLCA4MjogWzIsIDg1XSwgODY6IFsyLCAxOF0sIDkwOiBbMiwgODldLCAxMDE6IFsyLCA1M10sIDEwNDogWzIsIDkzXSwgMTEwOiBbMiwgMTldLCAxMTE6IFsyLCA3N10sIDExNjogWzIsIDk3XSwgMTE5OiBbMiwgNjNdLCAxMjI6IFsyLCA2OV0sIDEzNTogWzIsIDc1XSwgMTM2OiBbMiwgMzJdIH0sXG4gICAgICAgIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICAgICAgc3RhY2sgPSBbMF0sXG4gICAgICAgICAgICAgICAgdnN0YWNrID0gW251bGxdLFxuICAgICAgICAgICAgICAgIGxzdGFjayA9IFtdLFxuICAgICAgICAgICAgICAgIHRhYmxlID0gdGhpcy50YWJsZSxcbiAgICAgICAgICAgICAgICB5eXRleHQgPSBcIlwiLFxuICAgICAgICAgICAgICAgIHl5bGluZW5vID0gMCxcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSAwLFxuICAgICAgICAgICAgICAgIHJlY292ZXJpbmcgPSAwLFxuICAgICAgICAgICAgICAgIFRFUlJPUiA9IDIsXG4gICAgICAgICAgICAgICAgRU9GID0gMTtcbiAgICAgICAgICAgIHRoaXMubGV4ZXIuc2V0SW5wdXQoaW5wdXQpO1xuICAgICAgICAgICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgICAgICAgICB0aGlzLnl5LmxleGVyID0gdGhpcy5sZXhlcjtcbiAgICAgICAgICAgIHRoaXMueXkucGFyc2VyID0gdGhpcztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIikgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICAgICAgICAgIHZhciB5eWxvYyA9IHRoaXMubGV4ZXIueXlsbG9jO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgICAgICAgICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnl5LnBhcnNlRXJyb3IgPT09IFwiZnVuY3Rpb25cIikgdGhpcy5wYXJzZUVycm9yID0gdGhpcy55eS5wYXJzZUVycm9yO1xuICAgICAgICAgICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICAgICAgICAgIHZzdGFjay5sZW5ndGggPSB2c3RhY2subGVuZ3RoIC0gbjtcbiAgICAgICAgICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBsZXgoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdG9rZW4gIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN5bWJvbCxcbiAgICAgICAgICAgICAgICBwcmVFcnJvclN5bWJvbCxcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICAgICAgYSxcbiAgICAgICAgICAgICAgICByLFxuICAgICAgICAgICAgICAgIHl5dmFsID0ge30sXG4gICAgICAgICAgICAgICAgcCxcbiAgICAgICAgICAgICAgICBsZW4sXG4gICAgICAgICAgICAgICAgbmV3U3RhdGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ7XG4gICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09IG51bGwgfHwgdHlwZW9mIHN5bWJvbCA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSB0YWJsZVtzdGF0ZV0gJiYgdGFibGVbc3RhdGVdW3N5bWJvbF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVyclN0ciA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVjb3ZlcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocCBpbiB0YWJsZVtzdGF0ZV0pIGlmICh0aGlzLnRlcm1pbmFsc19bcF0gJiYgcCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjpcXG5cIiArIHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKCkgKyBcIlxcbkV4cGVjdGluZyBcIiArIGV4cGVjdGVkLmpvaW4oXCIsIFwiKSArIFwiLCBnb3QgJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMSA/IFwiZW5kIG9mIGlucHV0XCIgOiBcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUVycm9yKGVyclN0ciwgeyB0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZzdGFjay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxzdGFjay5wdXNoKHRoaXMubGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXl0ZXh0ID0gdGhpcy5sZXhlci55eXRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKSByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHl5dmFsLl8kID0geyBmaXJzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2xpbmUsIGxhc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2xpbmUsIGZpcnN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9jb2x1bW4sIGxhc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfY29sdW1uIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qIEppc29uIGdlbmVyYXRlZCBsZXhlciAqL1xuICAgIHZhciBsZXhlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsZXhlciA9IHsgRU9GOiAxLFxuICAgICAgICAgICAgcGFyc2VFcnJvcjogZnVuY3Rpb24gcGFyc2VFcnJvcihzdHIsIGhhc2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXRJbnB1dDogZnVuY3Rpb24gc2V0SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICAgICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy55eWxpbmVubyA9IHRoaXMueXlsZW5nID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgICAgICAgICAgdGhpcy55eWxsb2MgPSB7IGZpcnN0X2xpbmU6IDEsIGZpcnN0X2NvbHVtbjogMCwgbGFzdF9saW5lOiAxLCBsYXN0X2NvbHVtbjogMCB9O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLCAwXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uIGlucHV0KCkge1xuICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICAgICAgICAgIHRoaXMueXlsZW5nKys7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBjaDtcbiAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgICAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMueXlsaW5lbm8rKztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2lucHV0LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bnB1dDogZnVuY3Rpb24gdW5wdXQoY2gpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGVuID0gY2gubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgICAgICAgICAgdGhpcy55eXRleHQgPSB0aGlzLnl5dGV4dC5zdWJzdHIoMCwgdGhpcy55eXRleHQubGVuZ3RoIC0gbGVuIC0gMSk7XG4gICAgICAgICAgICAgICAgLy90aGlzLnl5bGVuZyAtPSBsZW47XG4gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICAgICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gdGhpcy5tYXRjaC5zdWJzdHIoMCwgdGhpcy5tYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSAxKTtcblxuICAgICAgICAgICAgICAgIGlmIChsaW5lcy5sZW5ndGggLSAxKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcblxuICAgICAgICAgICAgICAgIHRoaXMueXlsbG9jID0geyBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFtyWzBdLCByWzBdICsgdGhpcy55eWxlbmcgLSBsZW5dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb3JlOiBmdW5jdGlvbiBtb3JlKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxlc3M6IGZ1bmN0aW9uIGxlc3Mobikge1xuICAgICAgICAgICAgICAgIHRoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZShuKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFzdElucHV0OiBmdW5jdGlvbiBwYXN0SW5wdXQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLicgOiAnJykgKyBwYXN0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbiB1cGNvbWluZ0lucHV0KCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gdGhpcy5tYXRjaDtcbiAgICAgICAgICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMCAtIG5leHQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLCAyMCkgKyAobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nIDogJycpKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvd1Bvc2l0aW9uOiBmdW5jdGlvbiBzaG93UG9zaXRpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgICAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmUgKyB0aGlzLnVwY29taW5nSW5wdXQoKSArIFwiXFxuXCIgKyBjICsgXCJeXCI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiwgbWF0Y2gsIHRlbXBNYXRjaCwgaW5kZXgsIGNvbCwgbGluZXM7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wTWF0Y2ggJiYgKCFtYXRjaCB8fCB0ZW1wTWF0Y2hbMF0ubGVuZ3RoID4gbWF0Y2hbMF0ubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5mbGV4KSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMueXlsbG9jID0geyBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8gKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm1hdGNoKC9cXHI/XFxuPy8pWzBdLmxlbmd0aCA6IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uICsgbWF0Y2hbMF0ubGVuZ3RoIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMueXl0ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoZWQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgcnVsZXNbaW5kZXhdLCB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuKSByZXR1cm4gdG9rZW47ZWxzZSByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcgKyAodGhpcy55eWxpbmVubyArIDEpICsgJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyArIHRoaXMuc2hvd1Bvc2l0aW9uKCksIHsgdGV4dDogXCJcIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm8gfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxleDogZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICAgICAgICAgIHZhciByID0gdGhpcy5uZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZXgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmVnaW46IGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChjb25kaXRpb24pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBvcFN0YXRlOiBmdW5jdGlvbiBwb3BTdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBfY3VycmVudFJ1bGVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdXS5ydWxlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b3BTdGF0ZTogZnVuY3Rpb24gdG9wU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAyXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdXNoU3RhdGU6IGZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICAgICAgICAgIH0gfTtcbiAgICAgICAgbGV4ZXIub3B0aW9ucyA9IHt9O1xuICAgICAgICBsZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LCB5eV8sICRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsIFlZX1NUQVJUKSB7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmlwKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyaW5nKHN0YXJ0LCB5eV8ueXlsZW5nIC0gZW5kICsgc3RhcnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgWVlTVEFURSA9IFlZX1NUQVJUO1xuICAgICAgICAgICAgc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBpZiAoeXlfLnl5dGV4dC5zbGljZSgtMikgPT09IFwiXFxcXFxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeXlfLnl5dGV4dC5zbGljZSgtMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJlbXVcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHl5Xy55eXRleHQpIHJldHVybiAxNTtcblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oJ3JhdycpO3JldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBiZSB1c2luZyBgdGhpcy50b3BTdGF0ZSgpYCBiZWxvdywgYnV0IGl0IGN1cnJlbnRseVxuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRoZSBzZWNvbmQgdG9wIGluc3RlYWQgb2YgdGhlIGZpcnN0IHRvcC4gT3BlbmVkIGFuXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCg1LCA5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRU5EX1JBV19CTE9DSyc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxNDtcblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA2NTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oJ3JhdycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjM7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU1O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDEyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAyOTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ3O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7cmV0dXJuIDQ0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7cmV0dXJuIDQ0O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDE3OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAzOTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDUxO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5wdXQoeXlfLnl5dGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbignY29tJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTQ7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQ4O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3MjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDcyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjg6XG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjk6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtyZXR1cm4gNTQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtyZXR1cm4gMzM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzE6XG4gICAgICAgICAgICAgICAgICAgIHl5Xy55eXRleHQgPSBzdHJpcCgxLCAyKS5yZXBsYWNlKC9cXFxcXCIvZywgJ1wiJyk7cmV0dXJuIDgwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgICB5eV8ueXl0ZXh0ID0gc3RyaXAoMSwgMikucmVwbGFjZSgvXFxcXCcvZywgXCInXCIpO3JldHVybiA4MDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDg1O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA4MjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDgzO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzg6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA4MTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc1O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gNzc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3MjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0MjpcbiAgICAgICAgICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csICckMScpO3JldHVybiA3MjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0MzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdJTlZBTElEJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0NDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBsZXhlci5ydWxlcyA9IFsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywgL14oPzpbXlxceDAwXSspLywgL14oPzpbXlxceDAwXXsyLH0/KD89KFxce1xce3xcXFxcXFx7XFx7fFxcXFxcXFxcXFx7XFx7fCQpKSkvLCAvXig/Olxce1xce1xce1xceyg/PVteXFwvXSkpLywgL14oPzpcXHtcXHtcXHtcXHtcXC9bXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89Wz19XFxzXFwvLl0pXFx9XFx9XFx9XFx9KS8sIC9eKD86W15cXHgwMF0rPyg/PShcXHtcXHtcXHtcXHspKSkvLCAvXig/OltcXHNcXFNdKj8tLSh+KT9cXH1cXH0pLywgL14oPzpcXCgpLywgL14oPzpcXCkpLywgL14oPzpcXHtcXHtcXHtcXHspLywgL14oPzpcXH1cXH1cXH1cXH0pLywgL14oPzpcXHtcXHsofik/PikvLCAvXig/Olxce1xceyh+KT8jPikvLCAvXig/Olxce1xceyh+KT8jXFwqPykvLCAvXig/Olxce1xceyh+KT9cXC8pLywgL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywgL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXHMqKH4pP1xcfVxcfSkvLCAvXig/Olxce1xceyh+KT9cXF4pLywgL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywgL14oPzpcXHtcXHsofik/XFx7KS8sIC9eKD86XFx7XFx7KH4pPyYpLywgL14oPzpcXHtcXHsofik/IS0tKS8sIC9eKD86XFx7XFx7KH4pPyFbXFxzXFxTXSo/XFx9XFx9KS8sIC9eKD86XFx7XFx7KH4pP1xcKj8pLywgL14oPzo9KS8sIC9eKD86XFwuXFwuKS8sIC9eKD86XFwuKD89KFs9fn1cXHNcXC8uKXxdKSkpLywgL14oPzpbXFwvLl0pLywgL14oPzpcXHMrKS8sIC9eKD86XFx9KH4pP1xcfVxcfSkvLCAvXig/Oih+KT9cXH1cXH0pLywgL14oPzpcIihcXFxcW1wiXXxbXlwiXSkqXCIpLywgL14oPzonKFxcXFxbJ118W14nXSkqJykvLCAvXig/OkApLywgL14oPzp0cnVlKD89KFt+fVxccyldKSkpLywgL14oPzpmYWxzZSg/PShbfn1cXHMpXSkpKS8sIC9eKD86dW5kZWZpbmVkKD89KFt+fVxccyldKSkpLywgL14oPzpudWxsKD89KFt+fVxccyldKSkpLywgL14oPzotP1swLTldKyg/OlxcLlswLTldKyk/KD89KFt+fVxccyldKSkpLywgL14oPzphc1xccytcXHwpLywgL14oPzpcXHwpLywgL14oPzooW15cXHMhXCIjJS0sXFwuXFwvOy0+QFxcWy1cXF5gXFx7LX5dKyg/PShbPX59XFxzXFwvLil8XSkpKSkvLCAvXig/OlxcWyhcXFxcXFxdfFteXFxdXSkqXFxdKS8sIC9eKD86LikvLCAvXig/OiQpL107XG4gICAgICAgIGxleGVyLmNvbmRpdGlvbnMgPSB7IFwibXVcIjogeyBcInJ1bGVzXCI6IFs3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDRdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImVtdVwiOiB7IFwicnVsZXNcIjogWzJdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcImNvbVwiOiB7IFwicnVsZXNcIjogWzZdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcInJhd1wiOiB7IFwicnVsZXNcIjogWzMsIDQsIDVdLCBcImluY2x1c2l2ZVwiOiBmYWxzZSB9LCBcIklOSVRJQUxcIjogeyBcInJ1bGVzXCI6IFswLCAxLCA0NF0sIFwiaW5jbHVzaXZlXCI6IHRydWUgfSB9O1xuICAgICAgICByZXR1cm4gbGV4ZXI7XG4gICAgfSkoKTtcbiAgICBwYXJzZXIubGV4ZXIgPSBsZXhlcjtcbiAgICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgICAgIHRoaXMueXkgPSB7fTtcbiAgICB9UGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyO1xuICAgIHJldHVybiBuZXcgUGFyc2VyKCk7XG59KSgpO2V4cG9ydHNbXCJkZWZhdWx0XCJdID0gaGFuZGxlYmFycztcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMk52YlhCcGJHVnlMM0JoY25ObGNpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3p0QlFVVkJMRWxCUVVrc1ZVRkJWU3hIUVVGSExFTkJRVU1zV1VGQlZUdEJRVU0xUWl4UlFVRkpMRTFCUVUwc1IwRkJSeXhGUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEV0QlFVc3NSMEZCU1N4RlFVRkhPMEZCUXpGRExGVkJRVVVzUlVGQlJTeEZRVUZGTzBGQlEwNHNaMEpCUVZFc1JVRkJSU3hGUVVGRExFOUJRVThzUlVGQlF5eERRVUZETEVWQlFVTXNUVUZCVFN4RlFVRkRMRU5CUVVNc1JVRkJReXhUUVVGVExFVkJRVU1zUTBGQlF5eEZRVUZETEV0QlFVc3NSVUZCUXl4RFFVRkRMRVZCUVVNc2NVSkJRWEZDTEVWQlFVTXNRMEZCUXl4RlFVRkRMRmRCUVZjc1JVRkJReXhEUVVGRExFVkJRVU1zVlVGQlZTeEZRVUZETEVOQlFVTXNSVUZCUXl4UFFVRlBMRVZCUVVNc1EwRkJReXhGUVVGRExGVkJRVlVzUlVGQlF5eEZRVUZGTEVWQlFVTXNVMEZCVXl4RlFVRkRMRVZCUVVVc1JVRkJReXhqUVVGakxFVkJRVU1zUlVGQlJTeEZRVUZETEZOQlFWTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1UwRkJVeXhGUVVGRExFVkJRVVVzUlVGQlF5eFRRVUZUTEVWQlFVTXNSVUZCUlN4RlFVRkRMR05CUVdNc1JVRkJReXhGUVVGRkxFVkJRVU1zYzBKQlFYTkNMRVZCUVVNc1JVRkJSU3hGUVVGRExHVkJRV1VzUlVGQlF5eEZRVUZGTEVWQlFVTXNaMEpCUVdkQ0xFVkJRVU1zUlVGQlJTeEZRVUZETEZsQlFWa3NSVUZCUXl4RlFVRkZMRVZCUVVNc01FSkJRVEJDTEVWQlFVTXNSVUZCUlN4RlFVRkRMSE5DUVVGelFpeEZRVUZETEVWQlFVVXNSVUZCUXl4cFFrRkJhVUlzUlVGQlF5eEZRVUZGTEVWQlFVTXNWMEZCVnl4RlFVRkRMRVZCUVVVc1JVRkJReXhsUVVGbExFVkJRVU1zUlVGQlJTeEZRVUZETEZsQlFWa3NSVUZCUXl4RlFVRkZMRVZCUVVNc1lVRkJZU3hGUVVGRExFVkJRVVVzUlVGQlF5eGxRVUZsTEVWQlFVTXNSVUZCUlN4RlFVRkRMRmxCUVZrc1JVRkJReXhGUVVGRkxFVkJRVU1zZFVKQlFYVkNMRVZCUVVNc1JVRkJSU3hGUVVGRExHMUNRVUZ0UWl4RlFVRkRMRVZCUVVVc1JVRkJReXh0UWtGQmJVSXNSVUZCUXl4RlFVRkZMRVZCUVVNc1QwRkJUeXhGUVVGRExFVkJRVVVzUlVGQlF5eGpRVUZqTEVWQlFVTXNSVUZCUlN4RlFVRkRMSGxDUVVGNVFpeEZRVUZETEVWQlFVVXNSVUZCUXl4eFFrRkJjVUlzUlVGQlF5eEZRVUZGTEVWQlFVTXNjVUpCUVhGQ0xFVkJRVU1zUlVGQlJTeEZRVUZETEd0Q1FVRnJRaXhGUVVGRExFVkJRVVVzUlVGQlF5eHZRa0ZCYjBJc1JVRkJReXhGUVVGRkxFVkJRVU1zT0VKQlFUaENMRVZCUVVNc1JVRkJSU3hGUVVGRExEQkNRVUV3UWl4RlFVRkRMRVZCUVVVc1JVRkJReXd3UWtGQk1FSXNSVUZCUXl4RlFVRkZMRVZCUVVNc2JVSkJRVzFDTEVWQlFVTXNSVUZCUlN4RlFVRkRMRk5CUVZNc1JVRkJReXhGUVVGRkxFVkJRVU1zWTBGQll5eEZRVUZETEVWQlFVVXNSVUZCUXl4elFrRkJjMElzUlVGQlF5eEZRVUZGTEVWQlFVTXNaVUZCWlN4RlFVRkRMRVZCUVVVc1JVRkJReXhOUVVGTkxFVkJRVU1zUlVGQlJTeEZRVUZETEhOQ1FVRnpRaXhGUVVGRExFVkJRVVVzUlVGQlF5eHJRa0ZCYTBJc1JVRkJReXhGUVVGRkxFVkJRVU1zWjBKQlFXZENMRVZCUVVNc1JVRkJSU3hGUVVGRExITkNRVUZ6UWl4RlFVRkRMRVZCUVVVc1JVRkJReXhyUWtGQmEwSXNSVUZCUXl4RlFVRkZMRVZCUVVNc2FVSkJRV2xDTEVWQlFVTXNSVUZCUlN4RlFVRkRMR05CUVdNc1JVRkJReXhGUVVGRkxFVkJRVU1zWVVGQllTeEZRVUZETEVWQlFVVXNSVUZCUXl4eFFrRkJjVUlzUlVGQlF5eEZRVUZGTEVWQlFVTXNhVUpCUVdsQ0xFVkJRVU1zUlVGQlJTeEZRVUZETEd0Q1FVRnJRaXhGUVVGRExFVkJRVVVzUlVGQlF5eHZRa0ZCYjBJc1JVRkJReXhGUVVGRkxFVkJRVU1zT0VKQlFUaENMRVZCUVVNc1JVRkJSU3hGUVVGRExEQkNRVUV3UWl4RlFVRkRMRVZCUVVVc1JVRkJReXhQUVVGUExFVkJRVU1zUlVGQlJTeEZRVUZETEU5QlFVOHNSVUZCUXl4RlFVRkZMRVZCUVVNc1dVRkJXU3hGUVVGRExFVkJRVVVzUlVGQlF5eHRRa0ZCYlVJc1JVRkJReXhGUVVGRkxFVkJRVU1zWlVGQlpTeEZRVUZETEVWQlFVVXNSVUZCUXl4aFFVRmhMRVZCUVVNc1JVRkJSU3hGUVVGRExFMUJRVTBzUlVGQlF5eEZRVUZGTEVWQlFVTXNkVUpCUVhWQ0xFVkJRVU1zUlVGQlJTeEZRVUZETEdGQlFXRXNSVUZCUXl4RlFVRkZMRVZCUVVNc1NVRkJTU3hGUVVGRExFVkJRVVVzUlVGQlF5eFJRVUZSTEVWQlFVTXNSVUZCUlN4RlFVRkRMR0ZCUVdFc1JVRkJReXhGUVVGRkxFVkJRVU1zYlVKQlFXMUNMRVZCUVVNc1JVRkJSU3hGUVVGRExEaENRVUU0UWl4RlFVRkRMRVZCUVVVc1JVRkJReXh2UWtGQmIwSXNSVUZCUXl4RlFVRkZMRVZCUVVNc1RVRkJUU3hGUVVGRExFVkJRVVVzUlVGQlF5eFZRVUZWTEVWQlFVTXNSVUZCUlN4RlFVRkRMRkZCUVZFc1JVRkJReXhGUVVGRkxFVkJRVU1zVVVGQlVTeEZRVUZETEVWQlFVVXNSVUZCUXl4VFFVRlRMRVZCUVVNc1JVRkJSU3hGUVVGRExGZEJRVmNzUlVGQlF5eEZRVUZGTEVWQlFVTXNUVUZCVFN4RlFVRkRMRVZCUVVVc1JVRkJReXhOUVVGTkxFVkJRVU1zUlVGQlJTeEZRVUZETEdOQlFXTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1MwRkJTeXhGUVVGRExFVkJRVVVzUlVGQlF5eFRRVUZUTEVWQlFVTXNRMEZCUXl4RlFVRkRMRTFCUVUwc1JVRkJReXhEUVVGRExFVkJRVU03UVVGRE5XMUVMR3RDUVVGVkxFVkJRVVVzUlVGQlF5eERRVUZETEVWQlFVTXNUMEZCVHl4RlFVRkRMRU5CUVVNc1JVRkJReXhMUVVGTExFVkJRVU1zUlVGQlJTeEZRVUZETEZOQlFWTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1UwRkJVeXhGUVVGRExFVkJRVVVzUlVGQlF5eGxRVUZsTEVWQlFVTXNSVUZCUlN4RlFVRkRMR2RDUVVGblFpeEZRVUZETEVWQlFVVXNSVUZCUXl4cFFrRkJhVUlzUlVGQlF5eEZRVUZGTEVWQlFVTXNXVUZCV1N4RlFVRkRMRVZCUVVVc1JVRkJReXhQUVVGUExFVkJRVU1zUlVGQlJTeEZRVUZETEdOQlFXTXNSVUZCUXl4RlFVRkZMRVZCUVVNc2IwSkJRVzlDTEVWQlFVTXNSVUZCUlN4RlFVRkRMRk5CUVZNc1JVRkJReXhGUVVGRkxFVkJRVU1zWlVGQlpTeEZRVUZETEVWQlFVVXNSVUZCUXl4TlFVRk5MRVZCUVVNc1JVRkJSU3hGUVVGRExHZENRVUZuUWl4RlFVRkRMRVZCUVVVc1JVRkJReXhwUWtGQmFVSXNSVUZCUXl4RlFVRkZMRVZCUVVNc1kwRkJZeXhGUVVGRExFVkJRVVVzUlVGQlF5eHZRa0ZCYjBJc1JVRkJReXhGUVVGRkxFVkJRVU1zV1VGQldTeEZRVUZETEVWQlFVVXNSVUZCUXl4aFFVRmhMRVZCUVVNc1JVRkJSU3hGUVVGRExFbEJRVWtzUlVGQlF5eEZRVUZGTEVWQlFVTXNVVUZCVVN4RlFVRkRMRVZCUVVVc1JVRkJReXh0UWtGQmJVSXNSVUZCUXl4RlFVRkZMRVZCUVVNc2IwSkJRVzlDTEVWQlFVTXNSVUZCUlN4RlFVRkRMRkZCUVZFc1JVRkJReXhGUVVGRkxFVkJRVU1zVVVGQlVTeEZRVUZETEVWQlFVVXNSVUZCUXl4VFFVRlRMRVZCUVVNc1JVRkJSU3hGUVVGRExGZEJRVmNzUlVGQlF5eEZRVUZGTEVWQlFVTXNUVUZCVFN4RlFVRkRMRVZCUVVVc1JVRkJReXhOUVVGTkxFVkJRVU1zUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUXp0QlFVTTFaU3h2UWtGQldTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM0p6UWl4eFFrRkJZU3hGUVVGRkxGTkJRVk1zVTBGQlV5eERRVUZETEUxQlFVMHNSVUZCUXl4TlFVRk5MRVZCUVVNc1VVRkJVU3hGUVVGRExFVkJRVVVzUlVGQlF5eFBRVUZQTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkRka1U3TzBGQlJVWXNaMEpCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTNaQ0xHOUNRVUZSTEU5QlFVODdRVUZEWml4eFFrRkJTeXhEUVVGRE8wRkJRVVVzTWtKQlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU40UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NRMEZCUXp0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4alFVRmpMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETVVNc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRU5CUVVNN1FVRkJReXgzUWtGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGRrSXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVOQlFVTTdRVUZCUXl4M1FrRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRka0lzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFTkJRVU03UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEZGtJc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRU5CUVVNN1FVRkJReXgzUWtGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGRrSXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVOQlFVTTdRVUZCUXl4M1FrRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRka0lzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFTkJRVU03UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEZGtJc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRU5CUVVNN1FVRkRSaXgzUWtGQlNTeERRVUZETEVOQlFVTXNSMEZCUnp0QlFVTlFMRFJDUVVGSkxFVkJRVVVzYTBKQlFXdENPMEZCUTNoQ0xEWkNRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRmxCUVZrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZET1VJc05rSkJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRjRU1zTWtKQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTTdjVUpCUTNwQ0xFTkJRVU03TzBGQlJVNHNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZEU0N4M1FrRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ6dEJRVU5RTERSQ1FVRkpMRVZCUVVVc2EwSkJRV3RDTzBGQlEzaENMR2REUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0QlFVTm9RaXcyUWtGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1FVRkRZaXd5UWtGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF6dHhRa0ZEZWtJc1EwRkJRenM3UVVGRlRpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eGxRVUZsTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGVrVXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZCUXl4M1FrRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTTdRVUZEZEVVc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXgzUWtGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTNaR0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zZDBKQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOMFJpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVjBGQlZ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzBGQlEzSktMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc2QwSkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4WFFVRlhMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1FVRkRja2tzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxGZEJRVmNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF6dEJRVU55U1N3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMEZCUXk5RkxEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRMGdzZDBKQlFVa3NUMEZCVHl4SFFVRkhMRVZCUVVVc1EwRkJReXhaUVVGWkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTTdkMEpCUXpkRkxFOUJRVThzUjBGQlJ5eEZRVUZGTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU42UkN3eVFrRkJUeXhEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPMEZCUlhaQ0xIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGRE96dEJRVVYwUlN3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVONFFpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETzBGQlF6RkZMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc2QwSkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMR1ZCUVdVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFZEJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdRVUZEZEVnc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXgzUWtGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1pVRkJaU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTjBTQ3d3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVOSUxIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhPMEZCUTFBc05FSkJRVWtzUlVGQlJTeHJRa0ZCYTBJN1FVRkRlRUlzTkVKQlFVa3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5rTERoQ1FVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTTdRVUZEYUVJc05FSkJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOa0xEaENRVUZOTEVWQlFVVXNSVUZCUlR0QlFVTldMRFpDUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVOMFF5d3lRa0ZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXp0eFFrRkRla0lzUTBGQlF6czdRVUZGVGl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4dFFrRkJiVUlzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVNM1JTd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETzBGQlF6bEhMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc2QwSkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM2hDTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNkMEpCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTNoQ0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRMGdzZDBKQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjN1FVRkRVQ3cwUWtGQlNTeEZRVUZGTEdWQlFXVTdRVUZEY2tJc05FSkJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOa0xEaENRVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJReXhEUVVGRExFTkJRVU03UVVGRGFFSXNORUpCUVVrc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXp0QlFVTmtMREpDUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRE8zRkNRVU42UWl4RFFVRkRPenRCUVVWT0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zZDBKQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJReXhKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTTdRVUZEZWtVc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXgzUWtGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkRMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkRia2NzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5xUXl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVONFFpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTjRRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVNc1NVRkJTU3hGUVVGRkxHVkJRV1VzUlVGQlJTeExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxGRkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGRGNFY3NNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZCUXl4M1FrRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NSVUZCUlN4bFFVRmxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hSUVVGUkxFVkJRVVVzVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZETzBGQlEzQklMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc2QwSkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUXl4SlFVRkpMRVZCUVVVc1owSkJRV2RDTEVWQlFVVXNTMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUzBGQlN5eE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRU5CUVVNN1FVRkRNMGdzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRExFbEJRVWtzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hSUVVGUkxFVkJRVVVzVTBGQlV5eEZRVUZGTEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFTkJRVU03UVVGRE4wY3NNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZCUXl4M1FrRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZETEVsQlFVa3NSVUZCUlN4aFFVRmhMRVZCUVVVc1VVRkJVU3hGUVVGRkxFbEJRVWtzUlVGQlJTeExRVUZMTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhEUVVGRE8wRkJRemxHTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNkMEpCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUTNoQ0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zZDBKQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBGQlEzaENMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc2QwSkJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dEJRVU4yUkN3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGVFUXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZCUlN4elFrRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEJRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTjRSeXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dEJRVU16UkN3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTndRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExITkNRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNNVFpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU53UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSE5DUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTVRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOd1Fpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhOQ1FVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU01UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTndRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExITkNRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNNVFpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU53UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSE5DUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTVRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOd1Fpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhOQ1FVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU01UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTndRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExITkNRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNNVFpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU53UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSE5DUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTVRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVOd1Fpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhOQ1FVRkZMRU5CUVVNc1JVRkJSU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU01UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSGRDUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTndRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExITkNRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNNVFpd3dRa0ZCVFR0QlFVRkJMRUZCUTA0c2NVSkJRVXNzUlVGQlJUdEJRVUZETEhkQ1FVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU53UWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NSVUZCUlR0QlFVRkRMSE5DUVVGRkxFTkJRVU1zUlVGQlJTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTTVRaXd3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIZENRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdRVUZETVVJc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXh6UWtGQlJTeERRVUZETEVWQlFVVXNSMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRPVUlzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFZEJRVWM3UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhIUVVGSE8wRkJRVU1zYzBKQlFVVXNRMEZCUXl4RlFVRkZMRWRCUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJReTlDTERCQ1FVRk5PMEZCUVVFc1lVRkRURHRUUVVOQk8wRkJRMFFzWVVGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkRMRVZCUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRWRCUVVjc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhIUVVGSExFVkJRVU1zUlVGQlJTeEZRVUZETEVkQlFVY3NSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUjBGQlJ5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1IwRkJSeXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhIUVVGSExFVkJRVU1zUlVGQlJTeEZRVUZETEVkQlFVY3NSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1IwRkJSeXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEhRVUZITEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFZEJRVWNzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVkQlFVY3NSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1IwRkJSeXhEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4SFFVRkhMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhIUVVGSExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1JVRkJReXhIUVVGSExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhIUVVGSExFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVkQlFVY3NSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eEhRVUZITEVWQlFVTXNSVUZCUlN4RlFVRkRMRWRCUVVjc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1IwRkJSeXhEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4SFFVRkhMRVZCUVVNc1JVRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4SFFVRkhMRU5CUVVNc1JVRkJReXhGUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFZEJRVWNzUlVGQlF5eEZRVUZGTEVWQlFVTXNSMEZCUnl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEhRVUZITEVOQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkRMRVZCUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhGUVVGRkxFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1JVRkJSU3hGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RFFVRkRPMEZCUXk4dlZpeHpRa0ZCWXl4RlFVRkZMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4RlFVRkZMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSVUZCUlN4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVWQlFVVXNSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEZRVUZGTEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFVkJRVVVzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJReXhIUVVGSExFVkJRVU1zUTBGQlF5eERRVUZETEVWQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVNc1IwRkJSeXhGUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkRMRWRCUVVjc1JVRkJReXhEUVVGRExFTkJRVU1zUlVGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUXl4SFFVRkhMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeERRVUZETEVWQlFVTXNSMEZCUnl4RlFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZETEVkQlFVY3NSVUZCUXl4RFFVRkRMRU5CUVVNc1JVRkJReXhGUVVGRkxFTkJRVU1zUlVGQlF5eEhRVUZITEVWQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zUjBGQlJ5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExFZEJRVWNzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RlFVRkZMRU5CUVVNc1JVRkJRenRCUVVOc1RTeHJRa0ZCVlN4RlFVRkZMRk5CUVZNc1ZVRkJWU3hEUVVGRkxFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVTdRVUZEZUVNc2EwSkJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1UwRkRlRUk3UVVGRFJDeGhRVUZMTEVWQlFVVXNVMEZCVXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhGUVVGRk8wRkJRM3BDTEdkQ1FVRkpMRWxCUVVrc1IwRkJSeXhKUVVGSk8yZENRVUZGTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGQlJTeE5RVUZOTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNN1owSkJRVVVzVFVGQlRTeEhRVUZITEVWQlFVVTdaMEpCUVVVc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTzJkQ1FVRkZMRTFCUVUwc1IwRkJSeXhGUVVGRk8yZENRVUZGTEZGQlFWRXNSMEZCUnl4RFFVRkRPMmRDUVVGRkxFMUJRVTBzUjBGQlJ5eERRVUZETzJkQ1FVRkZMRlZCUVZVc1IwRkJSeXhEUVVGRE8yZENRVUZGTEUxQlFVMHNSMEZCUnl4RFFVRkRPMmRDUVVGRkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdRVUZETTBvc1owSkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRek5DTEdkQ1FVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRPMEZCUTNoQ0xHZENRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETzBGQlF6TkNMR2RDUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRkRUlzWjBKQlFVa3NUMEZCVHl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzU1VGQlNTeFhRVUZYTEVWQlEzWkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTXpRaXhuUWtGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRE9VSXNhMEpCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYmtJc1owSkJRVWtzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhKUVVGSkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVNM1JDeG5Ra0ZCU1N4UFFVRlBMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVlVGQlZTeExRVUZMTEZWQlFWVXNSVUZEZUVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJRenRCUVVONlF5eHhRa0ZCVXl4UlFVRlJMRU5CUVVNc1EwRkJReXhGUVVGRk8wRkJRMnBDTEhGQ1FVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOd1F5eHpRa0ZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnNReXh6UWtGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU55UXp0QlFVTkVMSEZDUVVGVExFZEJRVWNzUjBGQlJ6dEJRVU5ZTEc5Q1FVRkpMRXRCUVVzc1EwRkJRenRCUVVOV0xIRkNRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdRVUZET1VJc2IwSkJRVWtzVDBGQlR5eExRVUZMTEV0QlFVc3NVVUZCVVN4RlFVRkZPMEZCUXpOQ0xIbENRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeExRVUZMTEVOQlFVTTdhVUpCUTNwRE8wRkJRMFFzZFVKQlFVOHNTMEZCU3l4RFFVRkRPMkZCUTJoQ08wRkJRMFFzWjBKQlFVa3NUVUZCVFR0blFrRkJSU3hqUVVGak8yZENRVUZGTEV0QlFVczdaMEpCUVVVc1RVRkJUVHRuUWtGQlJTeERRVUZETzJkQ1FVRkZMRU5CUVVNN1owSkJRVVVzUzBGQlN5eEhRVUZITEVWQlFVVTdaMEpCUVVVc1EwRkJRenRuUWtGQlJTeEhRVUZITzJkQ1FVRkZMRkZCUVZFN1owSkJRVVVzVVVGQlVTeERRVUZETzBGQlEzaEdMRzFDUVVGUExFbEJRVWtzUlVGQlJUdEJRVU5VTEhGQ1FVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRhRU1zYjBKQlFVa3NTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJReXhMUVVGTExFTkJRVU1zUlVGQlJUdEJRVU0xUWl3d1FrRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN2FVSkJRM1pETEUxQlFVMDdRVUZEU0N4M1FrRkJTU3hOUVVGTkxFdEJRVXNzU1VGQlNTeEpRVUZKTEU5QlFVOHNUVUZCVFN4SlFVRkpMRmRCUVZjc1JVRkJSVHRCUVVOcVJDdzRRa0ZCVFN4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRE8zRkNRVU5zUWp0QlFVTkVMREJDUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0cFFrRkRha1E3UVVGRFJDeHZRa0ZCU1N4UFFVRlBMRTFCUVUwc1MwRkJTeXhYUVVGWExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzBGQlF5OUVMSGRDUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEYUVJc2QwSkJRVWtzUTBGQlF5eFZRVUZWTEVWQlFVVTdRVUZEWWl4blEwRkJVU3hIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU5rTERaQ1FVRkxMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlEyeENMRWxCUVVrc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRk8wRkJRemRDTEc5RFFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eERRVUZETzNsQ1FVTnFSRHRCUVVOTUxEUkNRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hGUVVGRk8wRkJRM3BDTEd0RFFVRk5MRWRCUVVjc2MwSkJRWE5DTEVsQlFVa3NVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJRU3hCUVVGRExFZEJRVWNzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hGUVVGRkxFZEJRVWNzWTBGQll5eEhRVUZITEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzVTBGQlV5eEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZCTEVGQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNN2VVSkJRM1pNTEUxQlFVMDdRVUZEU0N4clEwRkJUU3hIUVVGSExITkNRVUZ6UWl4SlFVRkpMRkZCUVZFc1IwRkJSeXhEUVVGRExFTkJRVUVzUVVGQlF5eEhRVUZITEdWQlFXVXNTVUZCU1N4TlFVRk5MRWxCUVVrc1EwRkJReXhIUVVGRExHTkJRV01zUjBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeE5RVUZOTEVOQlFVRXNRVUZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRU3hCUVVGRExFTkJRVU03ZVVKQlEzSktPMEZCUTBRc05FSkJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRTFCUVUwc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRVZCUVVVc1IwRkJSeXhGUVVGRkxFdEJRVXNzUlVGQlJTeFJRVUZSTEVWQlFVVXNVVUZCVVN4RlFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRE1VbzdhVUpCUTBvN1FVRkRSQ3h2UWtGQlNTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRmxCUVZrc1MwRkJTeXhKUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RlFVRkZPMEZCUTJwRUxEQkNRVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFFUVVGdFJDeEhRVUZITEV0QlFVc3NSMEZCUnl4WFFVRlhMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU03YVVKQlEzWkhPMEZCUTBRc2QwSkJRVkVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnFRaXg1UWtGQlN5eERRVUZETzBGQlEwWXNOa0pCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZEYmtJc09FSkJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU12UWl3NFFrRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJReTlDTERaQ1FVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNSQ0xEaENRVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTJRc05FSkJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVTdRVUZEYWtJc2EwTkJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVNelFpeHJRMEZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF6TkNMRzlEUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNN1FVRkRMMElzYVVOQlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU14UWl4blEwRkJTU3hWUVVGVkxFZEJRVWNzUTBGQlF5eEZRVU5rTEZWQlFWVXNSVUZCUlN4RFFVRkRPM2xDUVVOd1FpeE5RVUZOTzBGQlEwZ3NhME5CUVUwc1IwRkJSeXhqUVVGakxFTkJRVU03UVVGRGVFSXNNRU5CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU03ZVVKQlEzcENPMEZCUTBRc09FSkJRVTA3UVVGQlFTeEJRVU5XTEhsQ1FVRkxMRU5CUVVNN1FVRkRSaXd5UWtGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRU1zTmtKQlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRkRU1zTmtKQlFVc3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJReXhWUVVGVkxFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlFTeEJRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUlVGQlJTeFpRVUZaTEVWQlFVVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUVN4QlFVRkRMRU5CUVVNc1EwRkJReXhaUVVGWkxFVkJRVVVzVjBGQlZ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEZkQlFWY3NSVUZCUXl4RFFVRkRPMEZCUXpGUExEUkNRVUZKTEUxQlFVMHNSVUZCUlR0QlFVTlNMR2xEUVVGTExFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVFc1FVRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNsQ1FVTjBSenRCUVVORUxIbENRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVUZGTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnFSeXcwUWtGQlNTeFBRVUZQTEVOQlFVTXNTMEZCU3l4WFFVRlhMRVZCUVVVN1FVRkRNVUlzYlVOQlFVOHNRMEZCUXl4RFFVRkRPM2xDUVVOYU8wRkJRMFFzTkVKQlFVa3NSMEZCUnl4RlFVRkZPMEZCUTB3c2FVTkJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja01zYTBOQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRCUVVOdVF5eHJRMEZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8zbENRVU4wUXp0QlFVTkVMRFpDUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNMVF5dzRRa0ZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEY2tJc09FSkJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRM1JDTEdkRFFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU51UlN3MlFrRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0QlFVTnlRaXc0UWtGQlRUdEJRVUZCTEVGQlExWXNlVUpCUVVzc1EwRkJRenRCUVVOR0xDdENRVUZQTEVsQlFVa3NRMEZCUXp0QlFVRkJMR2xDUVVObU8yRkJRMG83UVVGRFJDeHRRa0ZCVHl4SlFVRkpMRU5CUVVNN1UwRkRaanRMUVVOQkxFTkJRVU03TzBGQlJVWXNVVUZCU1N4TFFVRkxMRWRCUVVjc1EwRkJReXhaUVVGVk8wRkJRM1pDTEZsQlFVa3NTMEZCU3l4SFFVRkpMRVZCUVVNc1IwRkJSeXhGUVVGRExFTkJRVU03UVVGRGJrSXNjMEpCUVZVc1JVRkJReXhUUVVGVExGVkJRVlVzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4RlFVRkZPMEZCUTJ4RExHOUNRVUZKTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMmhDTEhkQ1FVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU40UXl4TlFVRk5PMEZCUTBnc01FSkJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2FVSkJRM2hDTzJGQlEwbzdRVUZEVEN4dlFrRkJVU3hGUVVGRExHdENRVUZWTEV0QlFVc3NSVUZCUlR0QlFVTnNRaXh2UWtGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRjRUlzYjBKQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVNMVF5eHZRa0ZCU1N4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTm9ReXh2UWtGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUXpkRExHOUNRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UVVGRGJFTXNiMEpCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUlVGQlF5eFZRVUZWTEVWQlFVTXNRMEZCUXl4RlFVRkRMRmxCUVZrc1JVRkJReXhEUVVGRExFVkJRVU1zVTBGQlV5eEZRVUZETEVOQlFVTXNSVUZCUXl4WFFVRlhMRVZCUVVNc1EwRkJReXhGUVVGRExFTkJRVU03UVVGRGRFVXNiMEpCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRia1FzYjBKQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMmhDTEhWQ1FVRlBMRWxCUVVrc1EwRkJRenRoUVVObU8wRkJRMHdzYVVKQlFVc3NSVUZCUXl4cFFrRkJXVHRCUVVOV0xHOUNRVUZKTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzaENMRzlDUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTnNRaXh2UWtGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMEZCUTJRc2IwSkJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0QlFVTmtMRzlDUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVWQlFVVXNRMEZCUXp0QlFVTnFRaXh2UWtGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4RlFVRkZMRU5CUVVNN1FVRkRia0lzYjBKQlFVa3NTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1EwRkJRenRCUVVONFF5eHZRa0ZCU1N4TFFVRkxMRVZCUVVVN1FVRkRVQ3gzUWtGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMEZCUTJoQ0xIZENRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8ybENRVU16UWl4TlFVRk5PMEZCUTBnc2QwSkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN2FVSkJRemRDTzBGQlEwUXNiMEpCUVVrc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXpzN1FVRkZhRVFzYjBKQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRia01zZFVKQlFVOHNSVUZCUlN4RFFVRkRPMkZCUTJJN1FVRkRUQ3hwUWtGQlN5eEZRVUZETEdWQlFWVXNSVUZCUlN4RlFVRkZPMEZCUTFvc2IwSkJRVWtzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRjRUlzYjBKQlFVa3NTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTTdPMEZCUlhSRExHOUNRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF5OUNMRzlDUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJReXhIUVVGSExFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdPMEZCUlRsRUxHOUNRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJRenRCUVVOdVFpeHZRa0ZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNN1FVRkRha1FzYjBKQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNaRUxHOUNRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUjBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN1FVRkZOMFFzYjBKQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEZGQlFWRXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF6dEJRVU53UkN4dlFrRkJTU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNN08wRkJSVEZDTEc5Q1FVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFVkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWVHRCUVVNdlF5dzJRa0ZCVXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFZEJRVU1zUTBGQlF6dEJRVU14UWl4blEwRkJXU3hGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNXVUZCV1R0QlFVTjBReXdyUWtGQlZ5eEZRVUZGTEV0QlFVc3NSMEZEWkN4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFdEJRVXNzVVVGQlVTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUjBGQlJ5eERRVUZETEVOQlFVRXNSMEZCU1N4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1RVRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUTNKSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNXVUZCV1N4SFFVRkhMRWRCUVVjN2FVSkJRMnBETEVOQlFVTTdPMEZCUlVvc2IwSkJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVN1FVRkRja0lzZDBKQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8ybENRVU40UkR0QlFVTkVMSFZDUVVGUExFbEJRVWtzUTBGQlF6dGhRVU5tTzBGQlEwd3NaMEpCUVVrc1JVRkJReXhuUWtGQldUdEJRVU5VTEc5Q1FVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU5zUWl4MVFrRkJUeXhKUVVGSkxFTkJRVU03WVVGRFpqdEJRVU5NTEdkQ1FVRkpMRVZCUVVNc1kwRkJWU3hEUVVGRExFVkJRVVU3UVVGRFZpeHZRa0ZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yRkJRMjVETzBGQlEwd3NjVUpCUVZNc1JVRkJReXh4UWtGQldUdEJRVU5rTEc5Q1FVRkpMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU16UlN4MVFrRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NSVUZCUlN4SFFVRkhMRXRCUVVzc1IwRkJReXhGUVVGRkxFTkJRVUVzUjBGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRoUVVNNVJUdEJRVU5NTEhsQ1FVRmhMRVZCUVVNc2VVSkJRVms3UVVGRGJFSXNiMEpCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZEZEVJc2IwSkJRVWtzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RlFVRkZMRVZCUVVVN1FVRkRiRUlzZDBKQlFVa3NTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4SFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dHBRa0ZEYWtRN1FVRkRSQ3gxUWtGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1JVRkJSU3hIUVVGSExFdEJRVXNzUjBGQlF5eEZRVUZGTEVOQlFVRXNRMEZCUXl4RFFVRkZMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdZVUZETDBVN1FVRkRUQ3gzUWtGQldTeEZRVUZETEhkQ1FVRlpPMEZCUTJwQ0xHOUNRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU03UVVGRE0wSXNiMEpCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUXpWRExIVkNRVUZQTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNSMEZCUXl4SFFVRkhMRU5CUVVNN1lVRkRjRVE3UVVGRFRDeG5Ra0ZCU1N4RlFVRkRMR2RDUVVGWk8wRkJRMVFzYjBKQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSVHRCUVVOWUxESkNRVUZQTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN2FVSkJRMjVDTzBGQlEwUXNiMEpCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE96dEJRVVZ1UXl4dlFrRkJTU3hMUVVGTExFVkJRMHdzUzBGQlN5eEZRVU5NTEZOQlFWTXNSVUZEVkN4TFFVRkxMRVZCUTB3c1IwRkJSeXhGUVVOSUxFdEJRVXNzUTBGQlF6dEJRVU5XTEc5Q1FVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5pTEhkQ1FVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF6dEJRVU5xUWl4M1FrRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdhVUpCUTI1Q08wRkJRMFFzYjBKQlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFVkJRVVVzUTBGQlF6dEJRVU5xUXl4eFFrRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZEYUVNc05rSkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGNFUXNkMEpCUVVrc1UwRkJVeXhMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhOUVVGTkxFZEJRVWNzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRU3hCUVVGRExFVkJRVVU3UVVGRGFFVXNOa0pCUVVzc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRGJFSXNOa0pCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRFZpdzBRa0ZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTEUxQlFVMDdjVUpCUTJwRE8ybENRVU5LTzBGQlEwUXNiMEpCUVVrc1MwRkJTeXhGUVVGRk8wRkJRMUFzZVVKQlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03UVVGRE1VTXNkMEpCUVVrc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRCUVVONlF5eDNRa0ZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhGUVVGRExGVkJRVlVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNN1FVRkRha01zYVVOQlFWTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGRExFTkJRVU03UVVGRE1VSXNiME5CUVZrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWYzdRVUZEY2tNc2JVTkJRVmNzUlVGQlJTeExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4SFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlF5eERRVUZETzBGQlF6bEtMSGRDUVVGSkxFTkJRVU1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVONFFpeDNRa0ZCU1N4RFFVRkRMRXRCUVVzc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZGtJc2QwSkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUTNKQ0xIZENRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEycERMSGRDUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTNKQ0xEUkNRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdjVUpCUTJwRk8wRkJRMFFzZDBKQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRE8wRkJRMjVDTEhkQ1FVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3gzUWtGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGVrSXNlVUpCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJReXhOUVVGTkxFZEJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTnlTQ3gzUWtGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRhRVFzZDBKQlFVa3NTMEZCU3l4RlFVRkZMRTlCUVU4c1MwRkJTeXhEUVVGRExFdEJRMjVDTEU5QlFVODdhVUpCUTJZN1FVRkRSQ3h2UWtGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4TFFVRkxMRVZCUVVVc1JVRkJSVHRCUVVOd1Fpd3lRa0ZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRE8ybENRVU51UWl4TlFVRk5PMEZCUTBnc01rSkJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4M1FrRkJkMElzU1VGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkRMRU5CUVVNc1EwRkJRU3hCUVVGRExFZEJRVU1zZDBKQlFYZENMRWRCUVVNc1NVRkJTU3hEUVVGRExGbEJRVmtzUlVGQlJTeEZRVU4wUnl4RlFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlF5eERRVUZETEVOQlFVTTdhVUpCUTNwRU8yRkJRMG83UVVGRFRDeGxRVUZITEVWQlFVTXNVMEZCVXl4SFFVRkhMRWRCUVVrN1FVRkRXaXh2UWtGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJRM0JDTEc5Q1FVRkpMRTlCUVU4c1EwRkJReXhMUVVGTExGZEJRVmNzUlVGQlJUdEJRVU14UWl3eVFrRkJUeXhEUVVGRExFTkJRVU03YVVKQlExb3NUVUZCVFR0QlFVTklMREpDUVVGUExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0cFFrRkRja0k3WVVGRFNqdEJRVU5NTEdsQ1FVRkxMRVZCUVVNc1UwRkJVeXhMUVVGTExFTkJRVVVzVTBGQlV5eEZRVUZGTzBGQlEzcENMRzlDUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRoUVVOMlF6dEJRVU5NTEc5Q1FVRlJMRVZCUVVNc1UwRkJVeXhSUVVGUkxFZEJRVWs3UVVGRGRFSXNkVUpCUVU4c1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0aFFVTndRenRCUVVOTUxIbENRVUZoTEVWQlFVTXNVMEZCVXl4aFFVRmhMRWRCUVVrN1FVRkRhRU1zZFVKQlFVOHNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1RVRkJUU3hIUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRPMkZCUTI1R08wRkJRMHdzYjBKQlFWRXNSVUZCUXl4dlFrRkJXVHRCUVVOaUxIVkNRVUZQTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eE5RVUZOTEVkQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1lVRkROVVE3UVVGRFRDeHhRa0ZCVXl4RlFVRkRMRk5CUVZNc1MwRkJTeXhEUVVGRkxGTkJRVk1zUlVGQlJUdEJRVU0zUWl4dlFrRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0aFFVTjZRaXhGUVVGRExFRkJRVU1zUTBGQlF6dEJRVU5TTEdGQlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMjVDTEdGQlFVc3NRMEZCUXl4aFFVRmhMRWRCUVVjc1UwRkJVeXhUUVVGVExFTkJRVU1zUlVGQlJTeEZRVUZETEVkQlFVY3NSVUZCUXl4NVFrRkJlVUlzUlVGQlF5eFJRVUZSTEVWQlEyaEdPenRCUVVkR0xIRkNRVUZUTEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1IwRkJSeXhGUVVGRk8wRkJRM3BDTEhWQ1FVRlBMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eE5RVUZOTEVkQlFVY3NSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8yRkJRek5GT3p0QlFVZEVMR2RDUVVGSkxFOUJRVThzUjBGQlF5eFJRVUZSTEVOQlFVRTdRVUZEY0VJc2IwSkJRVThzZVVKQlFYbENPMEZCUTJoRExIRkNRVUZMTEVOQlFVTTdRVUZETmtJc2QwSkJRVWNzUjBGQlJ5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eE5RVUZOTEVWQlFVVTdRVUZEYkVNc05rSkJRVXNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRXQ3cwUWtGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenR4UWtGRGJFSXNUVUZCVFN4SlFVRkhMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1NVRkJTU3hGUVVGRk8wRkJRM1pETERaQ1FVRkxMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlExZ3NORUpCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdjVUpCUTI1Q0xFMUJRVTA3UVVGRFRDdzBRa0ZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dHhRa0ZEYkVJN1FVRkRSQ3gzUWtGQlJ5eEhRVUZITEVOQlFVTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hEUVVGRE96dEJRVVUxUkN3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NRMEZCUXp0QlFVRkRMREpDUVVGUExFVkJRVVVzUTBGQlF6dEJRVU5xUWl3d1FrRkJUVHRCUVVGQkxFRkJRMDRzY1VKQlFVc3NRMEZCUXp0QlFVTTJRaXgzUWtGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMEZCUTJoQ0xESkNRVUZQTEVWQlFVVXNRMEZCUXpzN1FVRkZOME1zTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFTkJRVU03UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEJRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMEZCUTNCRExEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhEUVVGRE8wRkJRelJDTEhkQ1FVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03T3pzN1FVRkphRUlzZDBKQlFVa3NTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhMUVVGTExFVkJRVVU3UVVGREwwUXNLMEpCUVU4c1JVRkJSU3hEUVVGRE8zRkNRVU5ZTEUxQlFVMDdRVUZEVEN3MlFrRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0QlFVTmFMQ3RDUVVGUExHVkJRV1VzUTBGQlF6dHhRa0ZEZUVJN08wRkJSVzVETERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eERRVUZETzBGQlFVVXNNa0pCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMnhDTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eERRVUZETzBGQlEwb3NkMEpCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dEJRVU5vUWl3eVFrRkJUeXhGUVVGRkxFTkJRVU03TzBGQlJWb3NNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVOQlFVTTdRVUZCUXl3eVFrRkJUeXhGUVVGRkxFTkJRVU03UVVGRGFrSXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVOQlFVTTdRVUZCUXl3eVFrRkJUeXhGUVVGRkxFTkJRVU03UVVGRGFrSXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVOQlFVTTdRVUZCUlN3eVFrRkJUeXhGUVVGRkxFTkJRVU03UVVGRGJFSXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZETWtJc2QwSkJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0QlFVTm9RaXgzUWtGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVOc1Fpd3lRa0ZCVHl4RlFVRkZMRU5CUVVNN08wRkJSVFZETERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNNa0pCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMnhDTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNNa0pCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMnhDTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNNa0pCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMnhDTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNNa0pCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMnhDTERCQ1FVRk5PMEZCUVVFc1FVRkRUaXh4UWtGQlN5eEZRVUZGTzBGQlFVTXNkMEpCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF5eEJRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMEZCUTI1RExEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zZDBKQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJReXhCUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBGQlEyNURMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc01rSkJRVThzUlVGQlJTeERRVUZETzBGQlEyeENMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc01rSkJRVThzUlVGQlJTeERRVUZETzBGQlEyeENMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc01rSkJRVThzUlVGQlJTeERRVUZETzBGQlEyeENMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUVVNc01rSkJRVThzUlVGQlJTeERRVUZETzBGQlEyeENMREJDUVVGTk8wRkJRVUVzUVVGRFRpeHhRa0ZCU3l4RlFVRkZPMEZCUTB3c2QwSkJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRM1pDTEhkQ1FVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UVVGRGFFSXNkMEpCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdPMEZCUlhCQ0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRMHdzZDBKQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRCUVVOb1Fpd3lRa0ZCVHl4RlFVRkZMRU5CUVVNN08wRkJSVm9zTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5d3lRa0ZCVHl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5d3lRa0ZCVHl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5d3lRa0ZCVHl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5d3lRa0ZCVHl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5d3lRa0ZCVHl4RlFVRkZMRU5CUVVNN1FVRkRiRUlzTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3TzBGQlExQXNNRUpCUVUwN1FVRkJRU3hCUVVOT0xIRkNRVUZMTEVWQlFVVTdRVUZCUXl4M1FrRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEVGQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1FVRkRia01zTUVKQlFVMDdRVUZCUVN4QlFVTk9MSEZDUVVGTExFVkJRVVU3UVVGQlF5eDNRa0ZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRExFRkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEYmtNc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXgxUWtGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUVVGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0QlFVTXZSQ3d3UWtGQlRUdEJRVUZCTEVGQlEwNHNjVUpCUVVzc1JVRkJSVHRCUVVGRExIVkNRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEJRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMEZCUXk5RUxEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zTWtKQlFVOHNSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xEQkNRVUZOTzBGQlFVRXNRVUZEVGl4eFFrRkJTeXhGUVVGRk8wRkJRVU1zZFVKQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RlFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFRkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdRVUZEZGtVc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXd5UWtGQlR5eFRRVUZUTEVOQlFVTTdRVUZEZWtJc01FSkJRVTA3UVVGQlFTeEJRVU5PTEhGQ1FVRkxMRVZCUVVVN1FVRkJReXd5UWtGQlR5eERRVUZETEVOQlFVTTdRVUZEYWtJc01FSkJRVTA3UVVGQlFTeGhRVU5NTzFOQlEwRXNRMEZCUXp0QlFVTkdMR0ZCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlF5d3dRa0ZCTUVJc1JVRkJReXhsUVVGbExFVkJRVU1zSzBOQlFTdERMRVZCUVVNc2QwSkJRWGRDTEVWQlFVTXNiMFZCUVc5RkxFVkJRVU1zT0VKQlFUaENMRVZCUVVNc2VVSkJRWGxDTEVWQlFVTXNVMEZCVXl4RlFVRkRMRk5CUVZNc1JVRkJReXhsUVVGbExFVkJRVU1zWlVGQlpTeEZRVUZETEdkQ1FVRm5RaXhGUVVGRExHbENRVUZwUWl4RlFVRkRMRzFDUVVGdFFpeEZRVUZETEdsQ1FVRnBRaXhGUVVGRExEUkNRVUUwUWl4RlFVRkRMR2xEUVVGcFF5eEZRVUZETEdsQ1FVRnBRaXhGUVVGRExIZENRVUYzUWl4RlFVRkRMR2xDUVVGcFFpeEZRVUZETEdkQ1FVRm5RaXhGUVVGRExHdENRVUZyUWl4RlFVRkRMRFJDUVVFMFFpeEZRVUZETEd0Q1FVRnJRaXhGUVVGRExGRkJRVkVzUlVGQlF5eFhRVUZYTEVWQlFVTXNNa0pCUVRKQ0xFVkJRVU1zV1VGQldTeEZRVUZETEZWQlFWVXNSVUZCUXl4cFFrRkJhVUlzUlVGQlF5eGxRVUZsTEVWQlFVTXNjMEpCUVhOQ0xFVkJRVU1zYzBKQlFYTkNMRVZCUVVNc1VVRkJVU3hGUVVGRExIZENRVUYzUWl4RlFVRkRMSGxDUVVGNVFpeEZRVUZETERaQ1FVRTJRaXhGUVVGRExIZENRVUYzUWl4RlFVRkRMSGxEUVVGNVF5eEZRVUZETEdOQlFXTXNSVUZCUXl4VFFVRlRMRVZCUVVNc2VVUkJRWGxFTEVWQlFVTXNkMEpCUVhkQ0xFVkJRVU1zVVVGQlVTeEZRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRPMEZCUTI1blF5eGhRVUZMTEVOQlFVTXNWVUZCVlN4SFFVRkhMRVZCUVVNc1NVRkJTU3hGUVVGRExFVkJRVU1zVDBGQlR5eEZRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1JVRkJReXhEUVVGRExFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1JVRkJReXhGUVVGRkxFVkJRVU1zUlVGQlJTeEZRVUZETEVWQlFVVXNSVUZCUXl4RlFVRkZMRVZCUVVNc1JVRkJSU3hGUVVGRExFVkJRVVVzUlVGQlF5eEZRVUZGTEVWQlFVTXNSVUZCUlN4RlFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRExGZEJRVmNzUlVGQlF5eExRVUZMTEVWQlFVTXNSVUZCUXl4TFFVRkxMRVZCUVVNc1JVRkJReXhQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4WFFVRlhMRVZCUVVNc1MwRkJTeXhGUVVGRExFVkJRVU1zUzBGQlN5eEZRVUZETEVWQlFVTXNUMEZCVHl4RlFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zVjBGQlZ5eEZRVUZETEV0QlFVc3NSVUZCUXl4RlFVRkRMRXRCUVVzc1JVRkJReXhGUVVGRExFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1EwRkJReXhEUVVGRExFVkJRVU1zVjBGQlZ5eEZRVUZETEV0QlFVc3NSVUZCUXl4RlFVRkRMRk5CUVZNc1JVRkJReXhGUVVGRExFOUJRVThzUlVGQlF5eERRVUZETEVOQlFVTXNSVUZCUXl4RFFVRkRMRVZCUVVNc1JVRkJSU3hEUVVGRExFVkJRVU1zVjBGQlZ5eEZRVUZETEVsQlFVa3NSVUZCUXl4RlFVRkRMRU5CUVVNN1FVRkRNMVVzWlVGQlR5eExRVUZMTEVOQlFVTTdTMEZCUXl4RFFVRkJMRVZCUVVjc1EwRkJRVHRCUVVOcVFpeFZRVUZOTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRCUVVOeVFpeGhRVUZUTEUxQlFVMHNSMEZCU1R0QlFVRkZMRmxCUVVrc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETzB0QlFVVXNUVUZCVFN4RFFVRkRMRk5CUVZNc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkRja1lzVjBGQlR5eEpRVUZKTEUxQlFVMHNSVUZCUVN4RFFVRkRPME5CUTJwQ0xFTkJRVUVzUlVGQlJ5eERRVUZETEhGQ1FVRmxMRlZCUVZVaUxDSm1hV3hsSWpvaWNHRnljMlZ5TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeThnUm1sc1pTQnBaMjV2Y21Wa0lHbHVJR052ZG1WeVlXZGxJSFJsYzNSeklIWnBZU0J6WlhSMGFXNW5JR2x1SUM1cGMzUmhibUoxYkM1NWJXeGNiaThxSUVwcGMyOXVJR2RsYm1WeVlYUmxaQ0J3WVhKelpYSWdLaTljYm5aaGNpQm9ZVzVrYkdWaVlYSnpJRDBnS0daMWJtTjBhVzl1S0NsN1hHNTJZWElnY0dGeWMyVnlJRDBnZTNSeVlXTmxPaUJtZFc1amRHbHZiaUIwY21GalpTQW9LU0I3SUgwc1hHNTVlVG9nZTMwc1hHNXplVzFpYjJ4elh6b2dlMXdpWlhKeWIzSmNJam95TEZ3aWNtOXZkRndpT2pNc1hDSndjbTluY21GdFhDSTZOQ3hjSWtWUFJsd2lPalVzWENKd2NtOW5jbUZ0WDNKbGNHVjBhWFJwYjI0d1hDSTZOaXhjSW5OMFlYUmxiV1Z1ZEZ3aU9qY3NYQ0p0ZFhOMFlXTm9aVndpT2pnc1hDSmliRzlqYTF3aU9qa3NYQ0p5WVhkQ2JHOWphMXdpT2pFd0xGd2ljR0Z5ZEdsaGJGd2lPakV4TEZ3aWNHRnlkR2xoYkVKc2IyTnJYQ0k2TVRJc1hDSmpiMjUwWlc1MFhDSTZNVE1zWENKRFQwMU5SVTVVWENJNk1UUXNYQ0pEVDA1VVJVNVVYQ0k2TVRVc1hDSnZjR1Z1VW1GM1FteHZZMnRjSWpveE5peGNJbkpoZDBKc2IyTnJYM0psY0dWMGFYUnBiMjR3WENJNk1UY3NYQ0pGVGtSZlVrRlhYMEpNVDBOTFhDSTZNVGdzWENKUFVFVk9YMUpCVjE5Q1RFOURTMXdpT2pFNUxGd2lhR1ZzY0dWeVRtRnRaVndpT2pJd0xGd2liM0JsYmxKaGQwSnNiMk5yWDNKbGNHVjBhWFJwYjI0d1hDSTZNakVzWENKdmNHVnVVbUYzUW14dlkydGZiM0IwYVc5dU1Gd2lPakl5TEZ3aVEweFBVMFZmVWtGWFgwSk1UME5MWENJNk1qTXNYQ0p2Y0dWdVFteHZZMnRjSWpveU5DeGNJbUpzYjJOclgyOXdkR2x2YmpCY0lqb3lOU3hjSW1Oc2IzTmxRbXh2WTJ0Y0lqb3lOaXhjSW05d1pXNUpiblpsY25ObFhDSTZNamNzWENKaWJHOWphMTl2Y0hScGIyNHhYQ0k2TWpnc1hDSlBVRVZPWDBKTVQwTkxYQ0k2TWprc1hDSnZjR1Z1UW14dlkydGZjbVZ3WlhScGRHbHZiakJjSWpvek1DeGNJbTl3Wlc1Q2JHOWphMTl2Y0hScGIyNHdYQ0k2TXpFc1hDSnZjR1Z1UW14dlkydGZiM0IwYVc5dU1Wd2lPak15TEZ3aVEweFBVMFZjSWpvek15eGNJazlRUlU1ZlNVNVdSVkpUUlZ3aU9qTTBMRndpYjNCbGJrbHVkbVZ5YzJWZmNtVndaWFJwZEdsdmJqQmNJam96TlN4Y0ltOXdaVzVKYm5abGNuTmxYMjl3ZEdsdmJqQmNJam96Tml4Y0ltOXdaVzVKYm5abGNuTmxYMjl3ZEdsdmJqRmNJam96Tnl4Y0ltOXdaVzVKYm5abGNuTmxRMmhoYVc1Y0lqb3pPQ3hjSWs5UVJVNWZTVTVXUlZKVFJWOURTRUZKVGx3aU9qTTVMRndpYjNCbGJrbHVkbVZ5YzJWRGFHRnBibDl5WlhCbGRHbDBhVzl1TUZ3aU9qUXdMRndpYjNCbGJrbHVkbVZ5YzJWRGFHRnBibDl2Y0hScGIyNHdYQ0k2TkRFc1hDSnZjR1Z1U1c1MlpYSnpaVU5vWVdsdVgyOXdkR2x2YmpGY0lqbzBNaXhjSW1sdWRtVnljMlZCYm1SUWNtOW5jbUZ0WENJNk5ETXNYQ0pKVGxaRlVsTkZYQ0k2TkRRc1hDSnBiblpsY25ObFEyaGhhVzVjSWpvME5TeGNJbWx1ZG1WeWMyVkRhR0ZwYmw5dmNIUnBiMjR3WENJNk5EWXNYQ0pQVUVWT1gwVk9SRUpNVDBOTFhDSTZORGNzWENKUFVFVk9YQ0k2TkRnc1hDSnRkWE4wWVdOb1pWOXlaWEJsZEdsMGFXOXVNRndpT2pRNUxGd2liWFZ6ZEdGamFHVmZiM0IwYVc5dU1Gd2lPalV3TEZ3aVQxQkZUbDlWVGtWVFEwRlFSVVJjSWpvMU1TeGNJbTExYzNSaFkyaGxYM0psY0dWMGFYUnBiMjR4WENJNk5USXNYQ0p0ZFhOMFlXTm9aVjl2Y0hScGIyNHhYQ0k2TlRNc1hDSkRURTlUUlY5VlRrVlRRMEZRUlVSY0lqbzFOQ3hjSWs5UVJVNWZVRUZTVkVsQlRGd2lPalUxTEZ3aWNHRnlkR2xoYkU1aGJXVmNJam8xTml4Y0luQmhjblJwWVd4ZmNtVndaWFJwZEdsdmJqQmNJam8xTnl4Y0luQmhjblJwWVd4ZmIzQjBhVzl1TUZ3aU9qVTRMRndpYjNCbGJsQmhjblJwWVd4Q2JHOWphMXdpT2pVNUxGd2lUMUJGVGw5UVFWSlVTVUZNWDBKTVQwTkxYQ0k2TmpBc1hDSnZjR1Z1VUdGeWRHbGhiRUpzYjJOclgzSmxjR1YwYVhScGIyNHdYQ0k2TmpFc1hDSnZjR1Z1VUdGeWRHbGhiRUpzYjJOclgyOXdkR2x2YmpCY0lqbzJNaXhjSW5CaGNtRnRYQ0k2TmpNc1hDSnpaWGh3Y2x3aU9qWTBMRndpVDFCRlRsOVRSVmhRVWx3aU9qWTFMRndpYzJWNGNISmZjbVZ3WlhScGRHbHZiakJjSWpvMk5peGNJbk5sZUhCeVgyOXdkR2x2YmpCY0lqbzJOeXhjSWtOTVQxTkZYMU5GV0ZCU1hDSTZOamdzWENKb1lYTm9YQ0k2Tmprc1hDSm9ZWE5vWDNKbGNHVjBhWFJwYjI1ZmNHeDFjekJjSWpvM01DeGNJbWhoYzJoVFpXZHRaVzUwWENJNk56RXNYQ0pKUkZ3aU9qY3lMRndpUlZGVlFVeFRYQ0k2TnpNc1hDSmliRzlqYTFCaGNtRnRjMXdpT2pjMExGd2lUMUJGVGw5Q1RFOURTMTlRUVZKQlRWTmNJam8zTlN4Y0ltSnNiMk5yVUdGeVlXMXpYM0psY0dWMGFYUnBiMjVmY0d4MWN6QmNJam8zTml4Y0lrTk1UMU5GWDBKTVQwTkxYMUJCVWtGTlUxd2lPamMzTEZ3aWNHRjBhRndpT2pjNExGd2laR0YwWVU1aGJXVmNJam8zT1N4Y0lsTlVVa2xPUjF3aU9qZ3dMRndpVGxWTlFrVlNYQ0k2T0RFc1hDSkNUMDlNUlVGT1hDSTZPRElzWENKVlRrUkZSa2xPUlVSY0lqbzRNeXhjSWs1VlRFeGNJam80TkN4Y0lrUkJWRUZjSWpvNE5TeGNJbkJoZEdoVFpXZHRaVzUwYzF3aU9qZzJMRndpVTBWUVhDSTZPRGNzWENJa1lXTmpaWEIwWENJNk1DeGNJaVJsYm1SY0lqb3hmU3hjYm5SbGNtMXBibUZzYzE4NklIc3lPbHdpWlhKeWIzSmNJaXcxT2x3aVJVOUdYQ0lzTVRRNlhDSkRUMDFOUlU1VVhDSXNNVFU2WENKRFQwNVVSVTVVWENJc01UZzZYQ0pGVGtSZlVrRlhYMEpNVDBOTFhDSXNNVGs2WENKUFVFVk9YMUpCVjE5Q1RFOURTMXdpTERJek9sd2lRMHhQVTBWZlVrRlhYMEpNVDBOTFhDSXNNams2WENKUFVFVk9YMEpNVDBOTFhDSXNNek02WENKRFRFOVRSVndpTERNME9sd2lUMUJGVGw5SlRsWkZVbE5GWENJc016azZYQ0pQVUVWT1gwbE9Wa1ZTVTBWZlEwaEJTVTVjSWl3ME5EcGNJa2xPVmtWU1UwVmNJaXcwTnpwY0lrOVFSVTVmUlU1RVFreFBRMHRjSWl3ME9EcGNJazlRUlU1Y0lpdzFNVHBjSWs5UVJVNWZWVTVGVTBOQlVFVkVYQ0lzTlRRNlhDSkRURTlUUlY5VlRrVlRRMEZRUlVSY0lpdzFOVHBjSWs5UVJVNWZVRUZTVkVsQlRGd2lMRFl3T2x3aVQxQkZUbDlRUVZKVVNVRk1YMEpNVDBOTFhDSXNOalU2WENKUFVFVk9YMU5GV0ZCU1hDSXNOamc2WENKRFRFOVRSVjlUUlZoUVVsd2lMRGN5T2x3aVNVUmNJaXczTXpwY0lrVlJWVUZNVTF3aUxEYzFPbHdpVDFCRlRsOUNURTlEUzE5UVFWSkJUVk5jSWl3M056cGNJa05NVDFORlgwSk1UME5MWDFCQlVrRk5VMXdpTERnd09sd2lVMVJTU1U1SFhDSXNPREU2WENKT1ZVMUNSVkpjSWl3NE1qcGNJa0pQVDB4RlFVNWNJaXc0TXpwY0lsVk9SRVZHU1U1RlJGd2lMRGcwT2x3aVRsVk1URndpTERnMU9sd2lSRUZVUVZ3aUxEZzNPbHdpVTBWUVhDSjlMRnh1Y0hKdlpIVmpkR2x2Ym5OZk9pQmJNQ3hiTXl3eVhTeGJOQ3d4WFN4Yk55d3hYU3hiTnl3eFhTeGJOeXd4WFN4Yk55d3hYU3hiTnl3eFhTeGJOeXd4WFN4Yk55d3hYU3hiTVRNc01WMHNXekV3TEROZExGc3hOaXcxWFN4Yk9TdzBYU3hiT1N3MFhTeGJNalFzTmwwc1d6STNMRFpkTEZzek9DdzJYU3hiTkRNc01sMHNXelExTEROZExGczBOU3d4WFN4Yk1qWXNNMTBzV3pnc05WMHNXemdzTlYwc1d6RXhMRFZkTEZzeE1pd3pYU3hiTlRrc05WMHNXell6TERGZExGczJNeXd4WFN4Yk5qUXNOVjBzV3pZNUxERmRMRnMzTVN3elhTeGJOelFzTTEwc1d6SXdMREZkTEZzeU1Dd3hYU3hiTWpBc01WMHNXekl3TERGZExGc3lNQ3d4WFN4Yk1qQXNNVjBzV3pJd0xERmRMRnMxTml3eFhTeGJOVFlzTVYwc1d6YzVMREpkTEZzM09Dd3hYU3hiT0RZc00xMHNXemcyTERGZExGczJMREJkTEZzMkxESmRMRnN4Tnl3d1hTeGJNVGNzTWwwc1d6SXhMREJkTEZzeU1Td3lYU3hiTWpJc01GMHNXekl5TERGZExGc3lOU3d3WFN4Yk1qVXNNVjBzV3pJNExEQmRMRnN5T0N3eFhTeGJNekFzTUYwc1d6TXdMREpkTEZzek1Td3dYU3hiTXpFc01WMHNXek15TERCZExGc3pNaXd4WFN4Yk16VXNNRjBzV3pNMUxESmRMRnN6Tml3d1hTeGJNellzTVYwc1d6TTNMREJkTEZzek55d3hYU3hiTkRBc01GMHNXelF3TERKZExGczBNU3d3WFN4Yk5ERXNNVjBzV3pReUxEQmRMRnMwTWl3eFhTeGJORFlzTUYwc1d6UTJMREZkTEZzME9Td3dYU3hiTkRrc01sMHNXelV3TERCZExGczFNQ3d4WFN4Yk5USXNNRjBzV3pVeUxESmRMRnMxTXl3d1hTeGJOVE1zTVYwc1d6VTNMREJkTEZzMU55d3lYU3hiTlRnc01GMHNXelU0TERGZExGczJNU3d3WFN4Yk5qRXNNbDBzV3pZeUxEQmRMRnMyTWl3eFhTeGJOallzTUYwc1d6WTJMREpkTEZzMk55d3dYU3hiTmpjc01WMHNXemN3TERGZExGczNNQ3d5WFN4Yk56WXNNVjBzV3pjMkxESmRYU3hjYm5CbGNtWnZjbTFCWTNScGIyNDZJR1oxYm1OMGFXOXVJR0Z1YjI1NWJXOTFjeWg1ZVhSbGVIUXNlWGxzWlc1bkxIbDViR2x1Wlc1dkxIbDVMSGw1YzNSaGRHVXNKQ1FzWHlSY2Jpa2dlMXh1WEc1MllYSWdKREFnUFNBa0pDNXNaVzVuZEdnZ0xTQXhPMXh1YzNkcGRHTm9JQ2g1ZVhOMFlYUmxLU0I3WEc1allYTmxJREU2SUhKbGRIVnliaUFrSkZza01DMHhYVHNnWEc1aWNtVmhhenRjYm1OaGMyVWdNanAwYUdsekxpUWdQU0I1ZVM1d2NtVndZWEpsVUhKdlozSmhiU2drSkZza01GMHBPMXh1WW5KbFlXczdYRzVqWVhObElETTZkR2hwY3k0a0lEMGdKQ1JiSkRCZE8xeHVZbkpsWVdzN1hHNWpZWE5sSURRNmRHaHBjeTRrSUQwZ0pDUmJKREJkTzF4dVluSmxZV3M3WEc1allYTmxJRFU2ZEdocGN5NGtJRDBnSkNSYkpEQmRPMXh1WW5KbFlXczdYRzVqWVhObElEWTZkR2hwY3k0a0lEMGdKQ1JiSkRCZE8xeHVZbkpsWVdzN1hHNWpZWE5sSURjNmRHaHBjeTRrSUQwZ0pDUmJKREJkTzF4dVluSmxZV3M3WEc1allYTmxJRGc2ZEdocGN5NGtJRDBnSkNSYkpEQmRPMXh1WW5KbFlXczdYRzVqWVhObElEazZYRzRnSUNBZ2RHaHBjeTRrSUQwZ2UxeHVJQ0FnSUNBZ2RIbHdaVG9nSjBOdmJXMWxiblJUZEdGMFpXMWxiblFuTEZ4dUlDQWdJQ0FnZG1Gc2RXVTZJSGw1TG5OMGNtbHdRMjl0YldWdWRDZ2tKRnNrTUYwcExGeHVJQ0FnSUNBZ2MzUnlhWEE2SUhsNUxuTjBjbWx3Um14aFozTW9KQ1JiSkRCZExDQWtKRnNrTUYwcExGeHVJQ0FnSUNBZ2JHOWpPaUI1ZVM1c2IyTkpibVp2S0hSb2FYTXVYeVFwWEc0Z0lDQWdmVHRjYmlBZ1hHNWljbVZoYXp0Y2JtTmhjMlVnTVRBNlhHNGdJQ0FnZEdocGN5NGtJRDBnZTF4dUlDQWdJQ0FnZEhsd1pUb2dKME52Ym5SbGJuUlRkR0YwWlcxbGJuUW5MRnh1SUNBZ0lDQWdiM0pwWjJsdVlXdzZJQ1FrV3lRd1hTeGNiaUFnSUNBZ0lIWmhiSFZsT2lBa0pGc2tNRjBzWEc0Z0lDQWdJQ0JzYjJNNklIbDVMbXh2WTBsdVptOG9kR2hwY3k1ZkpDbGNiaUFnSUNCOU8xeHVJQ0JjYm1KeVpXRnJPMXh1WTJGelpTQXhNVHAwYUdsekxpUWdQU0I1ZVM1d2NtVndZWEpsVW1GM1FteHZZMnNvSkNSYkpEQXRNbDBzSUNRa1d5UXdMVEZkTENBa0pGc2tNRjBzSUhSb2FYTXVYeVFwTzF4dVluSmxZV3M3WEc1allYTmxJREV5T25Sb2FYTXVKQ0E5SUhzZ2NHRjBhRG9nSkNSYkpEQXRNMTBzSUhCaGNtRnRjem9nSkNSYkpEQXRNbDBzSUdoaGMyZzZJQ1FrV3lRd0xURmRJSDA3WEc1aWNtVmhhenRjYm1OaGMyVWdNVE02ZEdocGN5NGtJRDBnZVhrdWNISmxjR0Z5WlVKc2IyTnJLQ1FrV3lRd0xUTmRMQ0FrSkZza01DMHlYU3dnSkNSYkpEQXRNVjBzSUNRa1d5UXdYU3dnWm1Gc2MyVXNJSFJvYVhNdVh5UXBPMXh1WW5KbFlXczdYRzVqWVhObElERTBPblJvYVhNdUpDQTlJSGw1TG5CeVpYQmhjbVZDYkc5amF5Z2tKRnNrTUMwelhTd2dKQ1JiSkRBdE1sMHNJQ1FrV3lRd0xURmRMQ0FrSkZza01GMHNJSFJ5ZFdVc0lIUm9hWE11WHlRcE8xeHVZbkpsWVdzN1hHNWpZWE5sSURFMU9uUm9hWE11SkNBOUlIc2diM0JsYmpvZ0pDUmJKREF0TlYwc0lIQmhkR2c2SUNRa1d5UXdMVFJkTENCd1lYSmhiWE02SUNRa1d5UXdMVE5kTENCb1lYTm9PaUFrSkZza01DMHlYU3dnWW14dlkydFFZWEpoYlhNNklDUWtXeVF3TFRGZExDQnpkSEpwY0RvZ2VYa3VjM1J5YVhCR2JHRm5jeWdrSkZza01DMDFYU3dnSkNSYkpEQmRLU0I5TzF4dVluSmxZV3M3WEc1allYTmxJREUyT25Sb2FYTXVKQ0E5SUhzZ2NHRjBhRG9nSkNSYkpEQXRORjBzSUhCaGNtRnRjem9nSkNSYkpEQXRNMTBzSUdoaGMyZzZJQ1FrV3lRd0xUSmRMQ0JpYkc5amExQmhjbUZ0Y3pvZ0pDUmJKREF0TVYwc0lITjBjbWx3T2lCNWVTNXpkSEpwY0Vac1lXZHpLQ1FrV3lRd0xUVmRMQ0FrSkZza01GMHBJSDA3WEc1aWNtVmhhenRjYm1OaGMyVWdNVGM2ZEdocGN5NGtJRDBnZXlCd1lYUm9PaUFrSkZza01DMDBYU3dnY0dGeVlXMXpPaUFrSkZza01DMHpYU3dnYUdGemFEb2dKQ1JiSkRBdE1sMHNJR0pzYjJOclVHRnlZVzF6T2lBa0pGc2tNQzB4WFN3Z2MzUnlhWEE2SUhsNUxuTjBjbWx3Um14aFozTW9KQ1JiSkRBdE5WMHNJQ1FrV3lRd1hTa2dmVHRjYm1KeVpXRnJPMXh1WTJGelpTQXhPRHAwYUdsekxpUWdQU0I3SUhOMGNtbHdPaUI1ZVM1emRISnBjRVpzWVdkektDUWtXeVF3TFRGZExDQWtKRnNrTUMweFhTa3NJSEJ5YjJkeVlXMDZJQ1FrV3lRd1hTQjlPMXh1WW5KbFlXczdYRzVqWVhObElERTVPbHh1SUNBZ0lIWmhjaUJwYm5abGNuTmxJRDBnZVhrdWNISmxjR0Z5WlVKc2IyTnJLQ1FrV3lRd0xUSmRMQ0FrSkZza01DMHhYU3dnSkNSYkpEQmRMQ0FrSkZza01GMHNJR1poYkhObExDQjBhR2x6TGw4a0tTeGNiaUFnSUNBZ0lDQWdjSEp2WjNKaGJTQTlJSGw1TG5CeVpYQmhjbVZRY205bmNtRnRLRnRwYm5abGNuTmxYU3dnSkNSYkpEQXRNVjB1Ykc5aktUdGNiaUFnSUNCd2NtOW5jbUZ0TG1Ob1lXbHVaV1FnUFNCMGNuVmxPMXh1WEc0Z0lDQWdkR2hwY3k0a0lEMGdleUJ6ZEhKcGNEb2dKQ1JiSkRBdE1sMHVjM1J5YVhBc0lIQnliMmR5WVcwNklIQnliMmR5WVcwc0lHTm9ZV2x1T2lCMGNuVmxJSDA3WEc0Z0lGeHVZbkpsWVdzN1hHNWpZWE5sSURJd09uUm9hWE11SkNBOUlDUWtXeVF3WFR0Y2JtSnlaV0ZyTzF4dVkyRnpaU0F5TVRwMGFHbHpMaVFnUFNCN2NHRjBhRG9nSkNSYkpEQXRNVjBzSUhOMGNtbHdPaUI1ZVM1emRISnBjRVpzWVdkektDUWtXeVF3TFRKZExDQWtKRnNrTUYwcGZUdGNibUp5WldGck8xeHVZMkZ6WlNBeU1qcDBhR2x6TGlRZ1BTQjVlUzV3Y21Wd1lYSmxUWFZ6ZEdGamFHVW9KQ1JiSkRBdE0xMHNJQ1FrV3lRd0xUSmRMQ0FrSkZza01DMHhYU3dnSkNSYkpEQXRORjBzSUhsNUxuTjBjbWx3Um14aFozTW9KQ1JiSkRBdE5GMHNJQ1FrV3lRd1hTa3NJSFJvYVhNdVh5UXBPMXh1WW5KbFlXczdYRzVqWVhObElESXpPblJvYVhNdUpDQTlJSGw1TG5CeVpYQmhjbVZOZFhOMFlXTm9aU2drSkZza01DMHpYU3dnSkNSYkpEQXRNbDBzSUNRa1d5UXdMVEZkTENBa0pGc2tNQzAwWFN3Z2VYa3VjM1J5YVhCR2JHRm5jeWdrSkZza01DMDBYU3dnSkNSYkpEQmRLU3dnZEdocGN5NWZKQ2s3WEc1aWNtVmhhenRjYm1OaGMyVWdNalE2WEc0Z0lDQWdkR2hwY3k0a0lEMGdlMXh1SUNBZ0lDQWdkSGx3WlRvZ0oxQmhjblJwWVd4VGRHRjBaVzFsYm5RbkxGeHVJQ0FnSUNBZ2JtRnRaVG9nSkNSYkpEQXRNMTBzWEc0Z0lDQWdJQ0J3WVhKaGJYTTZJQ1FrV3lRd0xUSmRMRnh1SUNBZ0lDQWdhR0Z6YURvZ0pDUmJKREF0TVYwc1hHNGdJQ0FnSUNCcGJtUmxiblE2SUNjbkxGeHVJQ0FnSUNBZ2MzUnlhWEE2SUhsNUxuTjBjbWx3Um14aFozTW9KQ1JiSkRBdE5GMHNJQ1FrV3lRd1hTa3NYRzRnSUNBZ0lDQnNiMk02SUhsNUxteHZZMGx1Wm04b2RHaHBjeTVmSkNsY2JpQWdJQ0I5TzF4dUlDQmNibUp5WldGck8xeHVZMkZ6WlNBeU5UcDBhR2x6TGlRZ1BTQjVlUzV3Y21Wd1lYSmxVR0Z5ZEdsaGJFSnNiMk5yS0NRa1d5UXdMVEpkTENBa0pGc2tNQzB4WFN3Z0pDUmJKREJkTENCMGFHbHpMbDhrS1R0Y2JtSnlaV0ZyTzF4dVkyRnpaU0F5TmpwMGFHbHpMaVFnUFNCN0lIQmhkR2c2SUNRa1d5UXdMVE5kTENCd1lYSmhiWE02SUNRa1d5UXdMVEpkTENCb1lYTm9PaUFrSkZza01DMHhYU3dnYzNSeWFYQTZJSGw1TG5OMGNtbHdSbXhoWjNNb0pDUmJKREF0TkYwc0lDUWtXeVF3WFNrZ2ZUdGNibUp5WldGck8xeHVZMkZ6WlNBeU56cDBhR2x6TGlRZ1BTQWtKRnNrTUYwN1hHNWljbVZoYXp0Y2JtTmhjMlVnTWpnNmRHaHBjeTRrSUQwZ0pDUmJKREJkTzF4dVluSmxZV3M3WEc1allYTmxJREk1T2x4dUlDQWdJSFJvYVhNdUpDQTlJSHRjYmlBZ0lDQWdJSFI1Y0dVNklDZFRkV0pGZUhCeVpYTnphVzl1Snl4Y2JpQWdJQ0FnSUhCaGRHZzZJQ1FrV3lRd0xUTmRMRnh1SUNBZ0lDQWdjR0Z5WVcxek9pQWtKRnNrTUMweVhTeGNiaUFnSUNBZ0lHaGhjMmc2SUNRa1d5UXdMVEZkTEZ4dUlDQWdJQ0FnYkc5ak9pQjVlUzVzYjJOSmJtWnZLSFJvYVhNdVh5UXBYRzRnSUNBZ2ZUdGNiaUFnWEc1aWNtVmhhenRjYm1OaGMyVWdNekE2ZEdocGN5NGtJRDBnZTNSNWNHVTZJQ2RJWVhOb0p5d2djR0ZwY25NNklDUWtXeVF3WFN3Z2JHOWpPaUI1ZVM1c2IyTkpibVp2S0hSb2FYTXVYeVFwZlR0Y2JtSnlaV0ZyTzF4dVkyRnpaU0F6TVRwMGFHbHpMaVFnUFNCN2RIbHdaVG9nSjBoaGMyaFFZV2x5Snl3Z2EyVjVPaUI1ZVM1cFpDZ2tKRnNrTUMweVhTa3NJSFpoYkhWbE9pQWtKRnNrTUYwc0lHeHZZem9nZVhrdWJHOWpTVzVtYnloMGFHbHpMbDhrS1gwN1hHNWljbVZoYXp0Y2JtTmhjMlVnTXpJNmRHaHBjeTRrSUQwZ2VYa3VhV1FvSkNSYkpEQXRNVjBwTzF4dVluSmxZV3M3WEc1allYTmxJRE16T25Sb2FYTXVKQ0E5SUNRa1d5UXdYVHRjYm1KeVpXRnJPMXh1WTJGelpTQXpORHAwYUdsekxpUWdQU0FrSkZza01GMDdYRzVpY21WaGF6dGNibU5oYzJVZ016VTZkR2hwY3k0a0lEMGdlM1I1Y0dVNklDZFRkSEpwYm1kTWFYUmxjbUZzSnl3Z2RtRnNkV1U2SUNRa1d5UXdYU3dnYjNKcFoybHVZV3c2SUNRa1d5UXdYU3dnYkc5ak9pQjVlUzVzYjJOSmJtWnZLSFJvYVhNdVh5UXBmVHRjYm1KeVpXRnJPMXh1WTJGelpTQXpOanAwYUdsekxpUWdQU0I3ZEhsd1pUb2dKMDUxYldKbGNreHBkR1Z5WVd3bkxDQjJZV3gxWlRvZ1RuVnRZbVZ5S0NRa1d5UXdYU2tzSUc5eWFXZHBibUZzT2lCT2RXMWlaWElvSkNSYkpEQmRLU3dnYkc5ak9pQjVlUzVzYjJOSmJtWnZLSFJvYVhNdVh5UXBmVHRjYm1KeVpXRnJPMXh1WTJGelpTQXpOenAwYUdsekxpUWdQU0I3ZEhsd1pUb2dKMEp2YjJ4bFlXNU1hWFJsY21Gc0p5d2dkbUZzZFdVNklDUWtXeVF3WFNBOVBUMGdKM1J5ZFdVbkxDQnZjbWxuYVc1aGJEb2dKQ1JiSkRCZElEMDlQU0FuZEhKMVpTY3NJR3h2WXpvZ2VYa3ViRzlqU1c1bWJ5aDBhR2x6TGw4a0tYMDdYRzVpY21WaGF6dGNibU5oYzJVZ016ZzZkR2hwY3k0a0lEMGdlM1I1Y0dVNklDZFZibVJsWm1sdVpXUk1hWFJsY21Gc0p5d2diM0pwWjJsdVlXdzZJSFZ1WkdWbWFXNWxaQ3dnZG1Gc2RXVTZJSFZ1WkdWbWFXNWxaQ3dnYkc5ak9pQjVlUzVzYjJOSmJtWnZLSFJvYVhNdVh5UXBmVHRjYm1KeVpXRnJPMXh1WTJGelpTQXpPVHAwYUdsekxpUWdQU0I3ZEhsd1pUb2dKMDUxYkd4TWFYUmxjbUZzSnl3Z2IzSnBaMmx1WVd3NklHNTFiR3dzSUhaaGJIVmxPaUJ1ZFd4c0xDQnNiMk02SUhsNUxteHZZMGx1Wm04b2RHaHBjeTVmSkNsOU8xeHVZbkpsWVdzN1hHNWpZWE5sSURRd09uUm9hWE11SkNBOUlDUWtXeVF3WFR0Y2JtSnlaV0ZyTzF4dVkyRnpaU0EwTVRwMGFHbHpMaVFnUFNBa0pGc2tNRjA3WEc1aWNtVmhhenRjYm1OaGMyVWdOREk2ZEdocGN5NGtJRDBnZVhrdWNISmxjR0Z5WlZCaGRHZ29kSEoxWlN3Z0pDUmJKREJkTENCMGFHbHpMbDhrS1R0Y2JtSnlaV0ZyTzF4dVkyRnpaU0EwTXpwMGFHbHpMaVFnUFNCNWVTNXdjbVZ3WVhKbFVHRjBhQ2htWVd4elpTd2dKQ1JiSkRCZExDQjBhR2x6TGw4a0tUdGNibUp5WldGck8xeHVZMkZ6WlNBME5Eb2dKQ1JiSkRBdE1sMHVjSFZ6YUNoN2NHRnlkRG9nZVhrdWFXUW9KQ1JiSkRCZEtTd2diM0pwWjJsdVlXdzZJQ1FrV3lRd1hTd2djMlZ3WVhKaGRHOXlPaUFrSkZza01DMHhYWDBwT3lCMGFHbHpMaVFnUFNBa0pGc2tNQzB5WFRzZ1hHNWljbVZoYXp0Y2JtTmhjMlVnTkRVNmRHaHBjeTRrSUQwZ1czdHdZWEowT2lCNWVTNXBaQ2drSkZza01GMHBMQ0J2Y21sbmFXNWhiRG9nSkNSYkpEQmRmVjA3WEc1aWNtVmhhenRjYm1OaGMyVWdORFk2ZEdocGN5NGtJRDBnVzEwN1hHNWljbVZoYXp0Y2JtTmhjMlVnTkRjNkpDUmJKREF0TVYwdWNIVnphQ2drSkZza01GMHBPMXh1WW5KbFlXczdYRzVqWVhObElEUTRPblJvYVhNdUpDQTlJRnRkTzF4dVluSmxZV3M3WEc1allYTmxJRFE1T2lRa1d5UXdMVEZkTG5CMWMyZ29KQ1JiSkRCZEtUdGNibUp5WldGck8xeHVZMkZ6WlNBMU1EcDBhR2x6TGlRZ1BTQmJYVHRjYm1KeVpXRnJPMXh1WTJGelpTQTFNVG9rSkZza01DMHhYUzV3ZFhOb0tDUWtXeVF3WFNrN1hHNWljbVZoYXp0Y2JtTmhjMlVnTlRnNmRHaHBjeTRrSUQwZ1cxMDdYRzVpY21WaGF6dGNibU5oYzJVZ05UazZKQ1JiSkRBdE1WMHVjSFZ6YUNna0pGc2tNRjBwTzF4dVluSmxZV3M3WEc1allYTmxJRFkwT25Sb2FYTXVKQ0E5SUZ0ZE8xeHVZbkpsWVdzN1hHNWpZWE5sSURZMU9pUWtXeVF3TFRGZExuQjFjMmdvSkNSYkpEQmRLVHRjYm1KeVpXRnJPMXh1WTJGelpTQTNNRHAwYUdsekxpUWdQU0JiWFR0Y2JtSnlaV0ZyTzF4dVkyRnpaU0EzTVRva0pGc2tNQzB4WFM1d2RYTm9LQ1FrV3lRd1hTazdYRzVpY21WaGF6dGNibU5oYzJVZ056ZzZkR2hwY3k0a0lEMGdXMTA3WEc1aWNtVmhhenRjYm1OaGMyVWdOems2SkNSYkpEQXRNVjB1Y0hWemFDZ2tKRnNrTUYwcE8xeHVZbkpsWVdzN1hHNWpZWE5sSURneU9uUm9hWE11SkNBOUlGdGRPMXh1WW5KbFlXczdYRzVqWVhObElEZ3pPaVFrV3lRd0xURmRMbkIxYzJnb0pDUmJKREJkS1R0Y2JtSnlaV0ZyTzF4dVkyRnpaU0E0TmpwMGFHbHpMaVFnUFNCYlhUdGNibUp5WldGck8xeHVZMkZ6WlNBNE56b2tKRnNrTUMweFhTNXdkWE5vS0NRa1d5UXdYU2s3WEc1aWNtVmhhenRjYm1OaGMyVWdPVEE2ZEdocGN5NGtJRDBnVzEwN1hHNWljbVZoYXp0Y2JtTmhjMlVnT1RFNkpDUmJKREF0TVYwdWNIVnphQ2drSkZza01GMHBPMXh1WW5KbFlXczdYRzVqWVhObElEazBPblJvYVhNdUpDQTlJRnRkTzF4dVluSmxZV3M3WEc1allYTmxJRGsxT2lRa1d5UXdMVEZkTG5CMWMyZ29KQ1JiSkRCZEtUdGNibUp5WldGck8xeHVZMkZ6WlNBNU9EcDBhR2x6TGlRZ1BTQmJKQ1JiSkRCZFhUdGNibUp5WldGck8xeHVZMkZ6WlNBNU9Ub2tKRnNrTUMweFhTNXdkWE5vS0NRa1d5UXdYU2s3WEc1aWNtVmhhenRjYm1OaGMyVWdNVEF3T25Sb2FYTXVKQ0E5SUZza0pGc2tNRjFkTzF4dVluSmxZV3M3WEc1allYTmxJREV3TVRva0pGc2tNQzB4WFM1d2RYTm9LQ1FrV3lRd1hTazdYRzVpY21WaGF6dGNibjFjYm4wc1hHNTBZV0pzWlRvZ1czc3pPakVzTkRveUxEVTZXeklzTkRaZExEWTZNeXd4TkRwYk1pdzBObDBzTVRVNld6SXNORFpkTERFNU9sc3lMRFEyWFN3eU9UcGJNaXcwTmwwc016UTZXeklzTkRaZExEUTRPbHN5TERRMlhTdzFNVHBiTWl3ME5sMHNOVFU2V3pJc05EWmRMRFl3T2xzeUxEUTJYWDBzZXpFNld6TmRmU3g3TlRwYk1TdzBYWDBzZXpVNld6SXNNbDBzTnpvMUxEZzZOaXc1T2pjc01UQTZPQ3d4TVRvNUxERXlPakV3TERFek9qRXhMREUwT2xzeExERXlYU3d4TlRwYk1Td3lNRjBzTVRZNk1UY3NNVGs2V3pFc01qTmRMREkwT2pFMUxESTNPakUyTERJNU9sc3hMREl4WFN3ek5EcGJNU3d5TWwwc016azZXeklzTWwwc05EUTZXeklzTWwwc05EYzZXeklzTWwwc05EZzZXekVzTVROZExEVXhPbHN4TERFMFhTdzFOVHBiTVN3eE9GMHNOVGs2TVRrc05qQTZXekVzTWpSZGZTeDdNVHBiTWl3eFhYMHNlelU2V3pJc05EZGRMREUwT2xzeUxEUTNYU3d4TlRwYk1pdzBOMTBzTVRrNld6SXNORGRkTERJNU9sc3lMRFEzWFN3ek5EcGJNaXcwTjEwc016azZXeklzTkRkZExEUTBPbHN5TERRM1hTdzBOenBiTWl3ME4xMHNORGc2V3pJc05EZGRMRFV4T2xzeUxEUTNYU3cxTlRwYk1pdzBOMTBzTmpBNld6SXNORGRkZlN4N05UcGJNaXd6WFN3eE5EcGJNaXd6WFN3eE5UcGJNaXd6WFN3eE9UcGJNaXd6WFN3eU9UcGJNaXd6WFN3ek5EcGJNaXd6WFN3ek9UcGJNaXd6WFN3ME5EcGJNaXd6WFN3ME56cGJNaXd6WFN3ME9EcGJNaXd6WFN3MU1UcGJNaXd6WFN3MU5UcGJNaXd6WFN3Mk1EcGJNaXd6WFgwc2V6VTZXeklzTkYwc01UUTZXeklzTkYwc01UVTZXeklzTkYwc01UazZXeklzTkYwc01qazZXeklzTkYwc016UTZXeklzTkYwc016azZXeklzTkYwc05EUTZXeklzTkYwc05EYzZXeklzTkYwc05EZzZXeklzTkYwc05URTZXeklzTkYwc05UVTZXeklzTkYwc05qQTZXeklzTkYxOUxIczFPbHN5TERWZExERTBPbHN5TERWZExERTFPbHN5TERWZExERTVPbHN5TERWZExESTVPbHN5TERWZExETTBPbHN5TERWZExETTVPbHN5TERWZExEUTBPbHN5TERWZExEUTNPbHN5TERWZExEUTRPbHN5TERWZExEVXhPbHN5TERWZExEVTFPbHN5TERWZExEWXdPbHN5TERWZGZTeDdOVHBiTWl3MlhTd3hORHBiTWl3MlhTd3hOVHBiTWl3MlhTd3hPVHBiTWl3MlhTd3lPVHBiTWl3MlhTd3pORHBiTWl3MlhTd3pPVHBiTWl3MlhTdzBORHBiTWl3MlhTdzBOenBiTWl3MlhTdzBPRHBiTWl3MlhTdzFNVHBiTWl3MlhTdzFOVHBiTWl3MlhTdzJNRHBiTWl3MlhYMHNlelU2V3pJc04xMHNNVFE2V3pJc04xMHNNVFU2V3pJc04xMHNNVGs2V3pJc04xMHNNams2V3pJc04xMHNNelE2V3pJc04xMHNNems2V3pJc04xMHNORFE2V3pJc04xMHNORGM2V3pJc04xMHNORGc2V3pJc04xMHNOVEU2V3pJc04xMHNOVFU2V3pJc04xMHNOakE2V3pJc04xMTlMSHMxT2xzeUxEaGRMREUwT2xzeUxEaGRMREUxT2xzeUxEaGRMREU1T2xzeUxEaGRMREk1T2xzeUxEaGRMRE0wT2xzeUxEaGRMRE01T2xzeUxEaGRMRFEwT2xzeUxEaGRMRFEzT2xzeUxEaGRMRFE0T2xzeUxEaGRMRFV4T2xzeUxEaGRMRFUxT2xzeUxEaGRMRFl3T2xzeUxEaGRmU3g3TlRwYk1pdzVYU3d4TkRwYk1pdzVYU3d4TlRwYk1pdzVYU3d4T1RwYk1pdzVYU3d5T1RwYk1pdzVYU3d6TkRwYk1pdzVYU3d6T1RwYk1pdzVYU3cwTkRwYk1pdzVYU3cwTnpwYk1pdzVYU3cwT0RwYk1pdzVYU3cxTVRwYk1pdzVYU3cxTlRwYk1pdzVYU3cyTURwYk1pdzVYWDBzZXpJd09qSTFMRGN5T2xzeExETTFYU3czT0RveU5pdzNPVG95Tnl3NE1EcGJNU3d5T0Ywc09ERTZXekVzTWpsZExEZ3lPbHN4TERNd1hTdzRNenBiTVN3ek1WMHNPRFE2V3pFc016SmRMRGcxT2xzeExETTBYU3c0Tmpvek0zMHNlekl3T2pNMkxEY3lPbHN4TERNMVhTdzNPRG95Tml3M09Ub3lOeXc0TURwYk1Td3lPRjBzT0RFNld6RXNNamxkTERneU9sc3hMRE13WFN3NE16cGJNU3d6TVYwc09EUTZXekVzTXpKZExEZzFPbHN4TERNMFhTdzROam96TTMwc2V6UTZNemNzTmpvekxERTBPbHN5TERRMlhTd3hOVHBiTWl3ME5sMHNNVGs2V3pJc05EWmRMREk1T2xzeUxEUTJYU3d6TkRwYk1pdzBObDBzTXprNld6SXNORFpkTERRME9sc3lMRFEyWFN3ME56cGJNaXcwTmwwc05EZzZXeklzTkRaZExEVXhPbHN5TERRMlhTdzFOVHBiTWl3ME5sMHNOakE2V3pJc05EWmRmU3g3TkRvek9DdzJPak1zTVRRNld6SXNORFpkTERFMU9sc3lMRFEyWFN3eE9UcGJNaXcwTmwwc01qazZXeklzTkRaZExETTBPbHN5TERRMlhTdzBORHBiTWl3ME5sMHNORGM2V3pJc05EWmRMRFE0T2xzeUxEUTJYU3cxTVRwYk1pdzBObDBzTlRVNld6SXNORFpkTERZd09sc3lMRFEyWFgwc2V6RTFPbHN5TERRNFhTd3hOem96T1N3eE9EcGJNaXcwT0YxOUxIc3lNRG8wTVN3MU5qbzBNQ3cyTkRvME1pdzJOVHBiTVN3ME0xMHNOekk2V3pFc016VmRMRGM0T2pJMkxEYzVPakkzTERnd09sc3hMREk0WFN3NE1UcGJNU3d5T1Ywc09ESTZXekVzTXpCZExEZ3pPbHN4TERNeFhTdzRORHBiTVN3ek1sMHNPRFU2V3pFc016UmRMRGcyT2pNemZTeDdORG8wTkN3Mk9qTXNNVFE2V3pJc05EWmRMREUxT2xzeUxEUTJYU3d4T1RwYk1pdzBObDBzTWprNld6SXNORFpkTERNME9sc3lMRFEyWFN3ME56cGJNaXcwTmwwc05EZzZXeklzTkRaZExEVXhPbHN5TERRMlhTdzFOVHBiTWl3ME5sMHNOakE2V3pJc05EWmRmU3g3TlRwYk1pd3hNRjBzTVRRNld6SXNNVEJkTERFMU9sc3lMREV3WFN3eE9EcGJNaXd4TUYwc01UazZXeklzTVRCZExESTVPbHN5TERFd1hTd3pORHBiTWl3eE1GMHNNems2V3pJc01UQmRMRFEwT2xzeUxERXdYU3cwTnpwYk1pd3hNRjBzTkRnNld6SXNNVEJkTERVeE9sc3lMREV3WFN3MU5UcGJNaXd4TUYwc05qQTZXeklzTVRCZGZTeDdNakE2TkRVc056STZXekVzTXpWZExEYzRPakkyTERjNU9qSTNMRGd3T2xzeExESTRYU3c0TVRwYk1Td3lPVjBzT0RJNld6RXNNekJkTERnek9sc3hMRE14WFN3NE5EcGJNU3d6TWwwc09EVTZXekVzTXpSZExEZzJPak16ZlN4N01qQTZORFlzTnpJNld6RXNNelZkTERjNE9qSTJMRGM1T2pJM0xEZ3dPbHN4TERJNFhTdzRNVHBiTVN3eU9WMHNPREk2V3pFc016QmRMRGd6T2xzeExETXhYU3c0TkRwYk1Td3pNbDBzT0RVNld6RXNNelJkTERnMk9qTXpmU3g3TWpBNk5EY3NOekk2V3pFc016VmRMRGM0T2pJMkxEYzVPakkzTERnd09sc3hMREk0WFN3NE1UcGJNU3d5T1Ywc09ESTZXekVzTXpCZExEZ3pPbHN4TERNeFhTdzRORHBiTVN3ek1sMHNPRFU2V3pFc016UmRMRGcyT2pNemZTeDdNakE2TkRFc05UWTZORGdzTmpRNk5ESXNOalU2V3pFc05ETmRMRGN5T2xzeExETTFYU3czT0RveU5pdzNPVG95Tnl3NE1EcGJNU3d5T0Ywc09ERTZXekVzTWpsZExEZ3lPbHN4TERNd1hTdzRNenBiTVN3ek1WMHNPRFE2V3pFc016SmRMRGcxT2xzeExETTBYU3c0Tmpvek0zMHNlek16T2xzeUxEYzRYU3cwT1RvME9TdzJOVHBiTWl3M09GMHNOekk2V3pJc056aGRMRGd3T2xzeUxEYzRYU3c0TVRwYk1pdzNPRjBzT0RJNld6SXNOemhkTERnek9sc3lMRGM0WFN3NE5EcGJNaXczT0Ywc09EVTZXeklzTnpoZGZTeDdNak02V3pJc016TmRMRE16T2xzeUxETXpYU3cxTkRwYk1pd3pNMTBzTmpVNld6SXNNek5kTERZNE9sc3lMRE16WFN3M01qcGJNaXd6TTEwc056VTZXeklzTXpOZExEZ3dPbHN5TERNelhTdzRNVHBiTWl3ek0xMHNPREk2V3pJc016TmRMRGd6T2xzeUxETXpYU3c0TkRwYk1pd3pNMTBzT0RVNld6SXNNek5kZlN4N01qTTZXeklzTXpSZExETXpPbHN5TERNMFhTdzFORHBiTWl3ek5GMHNOalU2V3pJc016UmRMRFk0T2xzeUxETTBYU3czTWpwYk1pd3pORjBzTnpVNld6SXNNelJkTERnd09sc3lMRE0wWFN3NE1UcGJNaXd6TkYwc09ESTZXeklzTXpSZExEZ3pPbHN5TERNMFhTdzRORHBiTWl3ek5GMHNPRFU2V3pJc016UmRmU3g3TWpNNld6SXNNelZkTERNek9sc3lMRE0xWFN3MU5EcGJNaXd6TlYwc05qVTZXeklzTXpWZExEWTRPbHN5TERNMVhTdzNNanBiTWl3ek5WMHNOelU2V3pJc016VmRMRGd3T2xzeUxETTFYU3c0TVRwYk1pd3pOVjBzT0RJNld6SXNNelZkTERnek9sc3lMRE0xWFN3NE5EcGJNaXd6TlYwc09EVTZXeklzTXpWZGZTeDdNak02V3pJc016WmRMRE16T2xzeUxETTJYU3cxTkRwYk1pd3pObDBzTmpVNld6SXNNelpkTERZNE9sc3lMRE0yWFN3M01qcGJNaXd6Tmwwc056VTZXeklzTXpaZExEZ3dPbHN5TERNMlhTdzRNVHBiTWl3ek5sMHNPREk2V3pJc016WmRMRGd6T2xzeUxETTJYU3c0TkRwYk1pd3pObDBzT0RVNld6SXNNelpkZlN4N01qTTZXeklzTXpkZExETXpPbHN5TERNM1hTdzFORHBiTWl3ek4xMHNOalU2V3pJc016ZGRMRFk0T2xzeUxETTNYU3czTWpwYk1pd3pOMTBzTnpVNld6SXNNemRkTERnd09sc3lMRE0zWFN3NE1UcGJNaXd6TjEwc09ESTZXeklzTXpkZExEZ3pPbHN5TERNM1hTdzRORHBiTWl3ek4xMHNPRFU2V3pJc016ZGRmU3g3TWpNNld6SXNNemhkTERNek9sc3lMRE00WFN3MU5EcGJNaXd6T0Ywc05qVTZXeklzTXpoZExEWTRPbHN5TERNNFhTdzNNanBiTWl3ek9GMHNOelU2V3pJc016aGRMRGd3T2xzeUxETTRYU3c0TVRwYk1pd3pPRjBzT0RJNld6SXNNemhkTERnek9sc3lMRE00WFN3NE5EcGJNaXd6T0Ywc09EVTZXeklzTXpoZGZTeDdNak02V3pJc016bGRMRE16T2xzeUxETTVYU3cxTkRwYk1pd3pPVjBzTmpVNld6SXNNemxkTERZNE9sc3lMRE01WFN3M01qcGJNaXd6T1Ywc056VTZXeklzTXpsZExEZ3dPbHN5TERNNVhTdzRNVHBiTWl3ek9WMHNPREk2V3pJc016bGRMRGd6T2xzeUxETTVYU3c0TkRwYk1pd3pPVjBzT0RVNld6SXNNemxkZlN4N01qTTZXeklzTkROZExETXpPbHN5TERRelhTdzFORHBiTWl3ME0xMHNOalU2V3pJc05ETmRMRFk0T2xzeUxEUXpYU3czTWpwYk1pdzBNMTBzTnpVNld6SXNORE5kTERnd09sc3lMRFF6WFN3NE1UcGJNaXcwTTEwc09ESTZXeklzTkROZExEZ3pPbHN5TERRelhTdzRORHBiTWl3ME0xMHNPRFU2V3pJc05ETmRMRGczT2xzeExEVXdYWDBzZXpjeU9sc3hMRE0xWFN3NE5qbzFNWDBzZXpJek9sc3lMRFExWFN3ek16cGJNaXcwTlYwc05UUTZXeklzTkRWZExEWTFPbHN5TERRMVhTdzJPRHBiTWl3ME5WMHNOekk2V3pJc05EVmRMRGMxT2xzeUxEUTFYU3c0TURwYk1pdzBOVjBzT0RFNld6SXNORFZkTERneU9sc3lMRFExWFN3NE16cGJNaXcwTlYwc09EUTZXeklzTkRWZExEZzFPbHN5TERRMVhTdzROenBiTWl3ME5WMTlMSHMxTWpvMU1pdzFORHBiTWl3NE1sMHNOalU2V3pJc09ESmRMRGN5T2xzeUxEZ3lYU3c0TURwYk1pdzRNbDBzT0RFNld6SXNPREpkTERneU9sc3lMRGd5WFN3NE16cGJNaXc0TWwwc09EUTZXeklzT0RKZExEZzFPbHN5TERneVhYMHNlekkxT2pVekxETTRPalUxTERNNU9sc3hMRFUzWFN3ME16bzFOaXcwTkRwYk1TdzFPRjBzTkRVNk5UUXNORGM2V3pJc05UUmRmU3g3TWpnNk5Ua3NORE02TmpBc05EUTZXekVzTlRoZExEUTNPbHN5TERVMlhYMHNlekV6T2pZeUxERTFPbHN4TERJd1hTd3hPRHBiTVN3Mk1WMTlMSHN6TXpwYk1pdzRObDBzTlRjNk5qTXNOalU2V3pJc09EWmRMRGN5T2xzeUxEZzJYU3c0TURwYk1pdzRObDBzT0RFNld6SXNPRFpkTERneU9sc3lMRGcyWFN3NE16cGJNaXc0Tmwwc09EUTZXeklzT0RaZExEZzFPbHN5TERnMlhYMHNlek16T2xzeUxEUXdYU3cyTlRwYk1pdzBNRjBzTnpJNld6SXNOREJkTERnd09sc3lMRFF3WFN3NE1UcGJNaXcwTUYwc09ESTZXeklzTkRCZExEZ3pPbHN5TERRd1hTdzRORHBiTWl3ME1GMHNPRFU2V3pJc05EQmRmU3g3TXpNNld6SXNOREZkTERZMU9sc3lMRFF4WFN3M01qcGJNaXcwTVYwc09EQTZXeklzTkRGZExEZ3hPbHN5TERReFhTdzRNanBiTWl3ME1WMHNPRE02V3pJc05ERmRMRGcwT2xzeUxEUXhYU3c0TlRwYk1pdzBNVjE5TEhzeU1EbzJOQ3czTWpwYk1Td3pOVjBzTnpnNk1qWXNOems2TWpjc09EQTZXekVzTWpoZExEZ3hPbHN4TERJNVhTdzRNanBiTVN3ek1GMHNPRE02V3pFc016RmRMRGcwT2xzeExETXlYU3c0TlRwYk1Td3pORjBzT0RZNk16TjlMSHN5TmpvMk5TdzBOenBiTVN3Mk5sMTlMSHN6TURvMk55d3pNenBiTWl3MU9GMHNOalU2V3pJc05UaGRMRGN5T2xzeUxEVTRYU3czTlRwYk1pdzFPRjBzT0RBNld6SXNOVGhkTERneE9sc3lMRFU0WFN3NE1qcGJNaXcxT0Ywc09ETTZXeklzTlRoZExEZzBPbHN5TERVNFhTdzROVHBiTWl3MU9GMTlMSHN6TXpwYk1pdzJORjBzTXpVNk5qZ3NOalU2V3pJc05qUmRMRGN5T2xzeUxEWTBYU3czTlRwYk1pdzJORjBzT0RBNld6SXNOalJkTERneE9sc3lMRFkwWFN3NE1qcGJNaXcyTkYwc09ETTZXeklzTmpSZExEZzBPbHN5TERZMFhTdzROVHBiTWl3Mk5GMTlMSHN5TVRvMk9Td3lNenBiTWl3MU1GMHNOalU2V3pJc05UQmRMRGN5T2xzeUxEVXdYU3c0TURwYk1pdzFNRjBzT0RFNld6SXNOVEJkTERneU9sc3lMRFV3WFN3NE16cGJNaXcxTUYwc09EUTZXeklzTlRCZExEZzFPbHN5TERVd1hYMHNlek16T2xzeUxEa3dYU3cyTVRvM01DdzJOVHBiTWl3NU1GMHNOekk2V3pJc09UQmRMRGd3T2xzeUxEa3dYU3c0TVRwYk1pdzVNRjBzT0RJNld6SXNPVEJkTERnek9sc3lMRGt3WFN3NE5EcGJNaXc1TUYwc09EVTZXeklzT1RCZGZTeDdNakE2TnpRc016TTZXeklzT0RCZExEVXdPamN4TERZek9qY3lMRFkwT2pjMUxEWTFPbHN4TERRelhTdzJPVG8zTXl3M01EbzNOaXczTVRvM055dzNNanBiTVN3M09GMHNOemc2TWpZc056azZNamNzT0RBNld6RXNNamhkTERneE9sc3hMREk1WFN3NE1qcGJNU3d6TUYwc09ETTZXekVzTXpGZExEZzBPbHN4TERNeVhTdzROVHBiTVN3ek5GMHNPRFk2TXpOOUxIczNNanBiTVN3M09WMTlMSHN5TXpwYk1pdzBNbDBzTXpNNld6SXNOREpkTERVME9sc3lMRFF5WFN3Mk5UcGJNaXcwTWwwc05qZzZXeklzTkRKZExEY3lPbHN5TERReVhTdzNOVHBiTWl3ME1sMHNPREE2V3pJc05ESmRMRGd4T2xzeUxEUXlYU3c0TWpwYk1pdzBNbDBzT0RNNld6SXNOREpkTERnME9sc3lMRFF5WFN3NE5UcGJNaXcwTWwwc09EYzZXekVzTlRCZGZTeDdNakE2TnpRc05UTTZPREFzTlRRNld6SXNPRFJkTERZek9qZ3hMRFkwT2pjMUxEWTFPbHN4TERRelhTdzJPVG80TWl3M01EbzNOaXczTVRvM055dzNNanBiTVN3M09GMHNOemc2TWpZc056azZNamNzT0RBNld6RXNNamhkTERneE9sc3hMREk1WFN3NE1qcGJNU3d6TUYwc09ETTZXekVzTXpGZExEZzBPbHN4TERNeVhTdzROVHBiTVN3ek5GMHNPRFk2TXpOOUxIc3lOam80TXl3ME56cGJNU3cyTmwxOUxIczBOenBiTWl3MU5WMTlMSHMwT2pnMExEWTZNeXd4TkRwYk1pdzBObDBzTVRVNld6SXNORFpkTERFNU9sc3lMRFEyWFN3eU9UcGJNaXcwTmwwc016UTZXeklzTkRaZExETTVPbHN5TERRMlhTdzBORHBiTWl3ME5sMHNORGM2V3pJc05EWmRMRFE0T2xzeUxEUTJYU3cxTVRwYk1pdzBObDBzTlRVNld6SXNORFpkTERZd09sc3lMRFEyWFgwc2V6UTNPbHN5TERJd1hYMHNlekl3T2pnMUxEY3lPbHN4TERNMVhTdzNPRG95Tml3M09Ub3lOeXc0TURwYk1Td3lPRjBzT0RFNld6RXNNamxkTERneU9sc3hMRE13WFN3NE16cGJNU3d6TVYwc09EUTZXekVzTXpKZExEZzFPbHN4TERNMFhTdzROam96TTMwc2V6UTZPRFlzTmpvekxERTBPbHN5TERRMlhTd3hOVHBiTWl3ME5sMHNNVGs2V3pJc05EWmRMREk1T2xzeUxEUTJYU3d6TkRwYk1pdzBObDBzTkRjNld6SXNORFpkTERRNE9sc3lMRFEyWFN3MU1UcGJNaXcwTmwwc05UVTZXeklzTkRaZExEWXdPbHN5TERRMlhYMHNlekkyT2pnM0xEUTNPbHN4TERZMlhYMHNlelEzT2xzeUxEVTNYWDBzZXpVNld6SXNNVEZkTERFME9sc3lMREV4WFN3eE5UcGJNaXd4TVYwc01UazZXeklzTVRGZExESTVPbHN5TERFeFhTd3pORHBiTWl3eE1WMHNNems2V3pJc01URmRMRFEwT2xzeUxERXhYU3cwTnpwYk1pd3hNVjBzTkRnNld6SXNNVEZkTERVeE9sc3lMREV4WFN3MU5UcGJNaXd4TVYwc05qQTZXeklzTVRGZGZTeDdNVFU2V3pJc05EbGRMREU0T2xzeUxEUTVYWDBzZXpJd09qYzBMRE16T2xzeUxEZzRYU3cxT0RvNE9DdzJNem80T1N3Mk5EbzNOU3cyTlRwYk1TdzBNMTBzTmprNk9UQXNOekE2TnpZc056RTZOemNzTnpJNld6RXNOemhkTERjNE9qSTJMRGM1T2pJM0xEZ3dPbHN4TERJNFhTdzRNVHBiTVN3eU9WMHNPREk2V3pFc016QmRMRGd6T2xzeExETXhYU3c0TkRwYk1Td3pNbDBzT0RVNld6RXNNelJkTERnMk9qTXpmU3g3TmpVNld6SXNPVFJkTERZMk9qa3hMRFk0T2xzeUxEazBYU3czTWpwYk1pdzVORjBzT0RBNld6SXNPVFJkTERneE9sc3lMRGswWFN3NE1qcGJNaXc1TkYwc09ETTZXeklzT1RSZExEZzBPbHN5TERrMFhTdzROVHBiTWl3NU5GMTlMSHMxT2xzeUxESTFYU3d4TkRwYk1pd3lOVjBzTVRVNld6SXNNalZkTERFNU9sc3lMREkxWFN3eU9UcGJNaXd5TlYwc016UTZXeklzTWpWZExETTVPbHN5TERJMVhTdzBORHBiTWl3eU5WMHNORGM2V3pJc01qVmRMRFE0T2xzeUxESTFYU3cxTVRwYk1pd3lOVjBzTlRVNld6SXNNalZkTERZd09sc3lMREkxWFgwc2V6SXdPamt5TERjeU9sc3hMRE0xWFN3M09Eb3lOaXczT1RveU55dzRNRHBiTVN3eU9GMHNPREU2V3pFc01qbGRMRGd5T2xzeExETXdYU3c0TXpwYk1Td3pNVjBzT0RRNld6RXNNekpkTERnMU9sc3hMRE0wWFN3NE5qb3pNMzBzZXpJd09qYzBMRE14T2prekxETXpPbHN5TERZd1hTdzJNem81TkN3Mk5EbzNOU3cyTlRwYk1TdzBNMTBzTmprNk9UVXNOekE2TnpZc056RTZOemNzTnpJNld6RXNOemhkTERjMU9sc3lMRFl3WFN3M09Eb3lOaXczT1RveU55dzRNRHBiTVN3eU9GMHNPREU2V3pFc01qbGRMRGd5T2xzeExETXdYU3c0TXpwYk1Td3pNVjBzT0RRNld6RXNNekpkTERnMU9sc3hMRE0wWFN3NE5qb3pNMzBzZXpJd09qYzBMRE16T2xzeUxEWTJYU3d6TmpvNU5pdzJNem81Tnl3Mk5EbzNOU3cyTlRwYk1TdzBNMTBzTmprNk9UZ3NOekE2TnpZc056RTZOemNzTnpJNld6RXNOemhkTERjMU9sc3lMRFkyWFN3M09Eb3lOaXczT1RveU55dzRNRHBiTVN3eU9GMHNPREU2V3pFc01qbGRMRGd5T2xzeExETXdYU3c0TXpwYk1Td3pNVjBzT0RRNld6RXNNekpkTERnMU9sc3hMRE0wWFN3NE5qb3pNMzBzZXpJd09qYzBMREl5T2prNUxESXpPbHN5TERVeVhTdzJNem94TURBc05qUTZOelVzTmpVNld6RXNORE5kTERZNU9qRXdNU3czTURvM05pdzNNVG8zTnl3M01qcGJNU3czT0Ywc056ZzZNallzTnprNk1qY3NPREE2V3pFc01qaGRMRGd4T2xzeExESTVYU3c0TWpwYk1Td3pNRjBzT0RNNld6RXNNekZkTERnME9sc3hMRE15WFN3NE5UcGJNU3d6TkYwc09EWTZNek45TEhzeU1EbzNOQ3d6TXpwYk1pdzVNbDBzTmpJNk1UQXlMRFl6T2pFd015dzJORG8zTlN3Mk5UcGJNU3cwTTEwc05qazZNVEEwTERjd09qYzJMRGN4T2pjM0xEY3lPbHN4TERjNFhTdzNPRG95Tml3M09Ub3lOeXc0TURwYk1Td3lPRjBzT0RFNld6RXNNamxkTERneU9sc3hMRE13WFN3NE16cGJNU3d6TVYwc09EUTZXekVzTXpKZExEZzFPbHN4TERNMFhTdzROam96TTMwc2V6TXpPbHN4TERFd05WMTlMSHN6TXpwYk1pdzNPVjBzTmpVNld6SXNOemxkTERjeU9sc3lMRGM1WFN3NE1EcGJNaXczT1Ywc09ERTZXeklzTnpsZExEZ3lPbHN5TERjNVhTdzRNenBiTWl3M09WMHNPRFE2V3pJc056bGRMRGcxT2xzeUxEYzVYWDBzZXpNek9sc3lMRGd4WFgwc2V6SXpPbHN5TERJM1hTd3pNenBiTWl3eU4xMHNOVFE2V3pJc01qZGRMRFkxT2xzeUxESTNYU3cyT0RwYk1pd3lOMTBzTnpJNld6SXNNamRkTERjMU9sc3lMREkzWFN3NE1EcGJNaXd5TjEwc09ERTZXeklzTWpkZExEZ3lPbHN5TERJM1hTdzRNenBiTWl3eU4xMHNPRFE2V3pJc01qZGRMRGcxT2xzeUxESTNYWDBzZXpJek9sc3lMREk0WFN3ek16cGJNaXd5T0Ywc05UUTZXeklzTWpoZExEWTFPbHN5TERJNFhTdzJPRHBiTWl3eU9GMHNOekk2V3pJc01qaGRMRGMxT2xzeUxESTRYU3c0TURwYk1pd3lPRjBzT0RFNld6SXNNamhkTERneU9sc3lMREk0WFN3NE16cGJNaXd5T0Ywc09EUTZXeklzTWpoZExEZzFPbHN5TERJNFhYMHNlekl6T2xzeUxETXdYU3d6TXpwYk1pd3pNRjBzTlRRNld6SXNNekJkTERZNE9sc3lMRE13WFN3M01Ub3hNRFlzTnpJNld6RXNNVEEzWFN3M05UcGJNaXd6TUYxOUxIc3lNenBiTWl3NU9GMHNNek02V3pJc09UaGRMRFUwT2xzeUxEazRYU3cyT0RwYk1pdzVPRjBzTnpJNld6SXNPVGhkTERjMU9sc3lMRGs0WFgwc2V6SXpPbHN5TERRMVhTd3pNenBiTWl3ME5WMHNOVFE2V3pJc05EVmRMRFkxT2xzeUxEUTFYU3cyT0RwYk1pdzBOVjBzTnpJNld6SXNORFZkTERjek9sc3hMREV3T0Ywc056VTZXeklzTkRWZExEZ3dPbHN5TERRMVhTdzRNVHBiTWl3ME5WMHNPREk2V3pJc05EVmRMRGd6T2xzeUxEUTFYU3c0TkRwYk1pdzBOVjBzT0RVNld6SXNORFZkTERnM09sc3lMRFExWFgwc2V6SXpPbHN5TERRMFhTd3pNenBiTWl3ME5GMHNOVFE2V3pJc05EUmRMRFkxT2xzeUxEUTBYU3cyT0RwYk1pdzBORjBzTnpJNld6SXNORFJkTERjMU9sc3lMRFEwWFN3NE1EcGJNaXcwTkYwc09ERTZXeklzTkRSZExEZ3lPbHN5TERRMFhTdzRNenBiTWl3ME5GMHNPRFE2V3pJc05EUmRMRGcxT2xzeUxEUTBYU3c0TnpwYk1pdzBORjE5TEhzMU5EcGJNU3d4TURsZGZTeDdOVFE2V3pJc09ETmRMRFkxT2xzeUxEZ3pYU3czTWpwYk1pdzRNMTBzT0RBNld6SXNPRE5kTERneE9sc3lMRGd6WFN3NE1qcGJNaXc0TTEwc09ETTZXeklzT0ROZExEZzBPbHN5TERnelhTdzROVHBiTWl3NE0xMTlMSHMxTkRwYk1pdzROVjE5TEhzMU9sc3lMREV6WFN3eE5EcGJNaXd4TTEwc01UVTZXeklzTVROZExERTVPbHN5TERFelhTd3lPVHBiTWl3eE0xMHNNelE2V3pJc01UTmRMRE01T2xzeUxERXpYU3cwTkRwYk1pd3hNMTBzTkRjNld6SXNNVE5kTERRNE9sc3lMREV6WFN3MU1UcGJNaXd4TTEwc05UVTZXeklzTVROZExEWXdPbHN5TERFelhYMHNlek00T2pVMUxETTVPbHN4TERVM1hTdzBNem8xTml3ME5EcGJNU3cxT0Ywc05EVTZNVEV4TERRMk9qRXhNQ3cwTnpwYk1pdzNObDE5TEhzek16cGJNaXczTUYwc05EQTZNVEV5TERZMU9sc3lMRGN3WFN3M01qcGJNaXczTUYwc056VTZXeklzTnpCZExEZ3dPbHN5TERjd1hTdzRNVHBiTWl3M01GMHNPREk2V3pJc056QmRMRGd6T2xzeUxEY3dYU3c0TkRwYk1pdzNNRjBzT0RVNld6SXNOekJkZlN4N05EYzZXeklzTVRoZGZTeDdOVHBiTWl3eE5GMHNNVFE2V3pJc01UUmRMREUxT2xzeUxERTBYU3d4T1RwYk1pd3hORjBzTWprNld6SXNNVFJkTERNME9sc3lMREUwWFN3ek9UcGJNaXd4TkYwc05EUTZXeklzTVRSZExEUTNPbHN5TERFMFhTdzBPRHBiTWl3eE5GMHNOVEU2V3pJc01UUmRMRFUxT2xzeUxERTBYU3cyTURwYk1pd3hORjE5TEhzek16cGJNU3d4TVROZGZTeDdNek02V3pJc09EZGRMRFkxT2xzeUxEZzNYU3czTWpwYk1pdzROMTBzT0RBNld6SXNPRGRkTERneE9sc3lMRGczWFN3NE1qcGJNaXc0TjEwc09ETTZXeklzT0RkZExEZzBPbHN5TERnM1hTdzROVHBiTWl3NE4xMTlMSHN6TXpwYk1pdzRPVjE5TEhzeU1EbzNOQ3cyTXpveE1UVXNOalE2TnpVc05qVTZXekVzTkROZExEWTNPakV4TkN3Mk9EcGJNaXc1Tmwwc05qazZNVEUyTERjd09qYzJMRGN4T2pjM0xEY3lPbHN4TERjNFhTdzNPRG95Tml3M09Ub3lOeXc0TURwYk1Td3lPRjBzT0RFNld6RXNNamxkTERneU9sc3hMRE13WFN3NE16cGJNU3d6TVYwc09EUTZXekVzTXpKZExEZzFPbHN4TERNMFhTdzROam96TTMwc2V6TXpPbHN4TERFeE4xMTlMSHN6TWpveE1UZ3NNek02V3pJc05qSmRMRGMwT2pFeE9TdzNOVHBiTVN3eE1qQmRmU3g3TXpNNld6SXNOVGxkTERZMU9sc3lMRFU1WFN3M01qcGJNaXcxT1Ywc056VTZXeklzTlRsZExEZ3dPbHN5TERVNVhTdzRNVHBiTWl3MU9WMHNPREk2V3pJc05UbGRMRGd6T2xzeUxEVTVYU3c0TkRwYk1pdzFPVjBzT0RVNld6SXNOVGxkZlN4N016TTZXeklzTmpGZExEYzFPbHN5TERZeFhYMHNlek16T2xzeUxEWTRYU3d6TnpveE1qRXNOelE2TVRJeUxEYzFPbHN4TERFeU1GMTlMSHN6TXpwYk1pdzJOVjBzTmpVNld6SXNOalZkTERjeU9sc3lMRFkxWFN3M05UcGJNaXcyTlYwc09EQTZXeklzTmpWZExEZ3hPbHN5TERZMVhTdzRNanBiTWl3Mk5WMHNPRE02V3pJc05qVmRMRGcwT2xzeUxEWTFYU3c0TlRwYk1pdzJOVjE5TEhzek16cGJNaXcyTjEwc056VTZXeklzTmpkZGZTeDdNak02V3pFc01USXpYWDBzZXpJek9sc3lMRFV4WFN3Mk5UcGJNaXcxTVYwc056STZXeklzTlRGZExEZ3dPbHN5TERVeFhTdzRNVHBiTWl3MU1WMHNPREk2V3pJc05URmRMRGd6T2xzeUxEVXhYU3c0TkRwYk1pdzFNVjBzT0RVNld6SXNOVEZkZlN4N01qTTZXeklzTlROZGZTeDdNek02V3pFc01USTBYWDBzZXpNek9sc3lMRGt4WFN3Mk5UcGJNaXc1TVYwc056STZXeklzT1RGZExEZ3dPbHN5TERreFhTdzRNVHBiTWl3NU1WMHNPREk2V3pJc09URmRMRGd6T2xzeUxEa3hYU3c0TkRwYk1pdzVNVjBzT0RVNld6SXNPVEZkZlN4N016TTZXeklzT1ROZGZTeDdOVHBiTWl3eU1sMHNNVFE2V3pJc01qSmRMREUxT2xzeUxESXlYU3d4T1RwYk1pd3lNbDBzTWprNld6SXNNakpkTERNME9sc3lMREl5WFN3ek9UcGJNaXd5TWwwc05EUTZXeklzTWpKZExEUTNPbHN5TERJeVhTdzBPRHBiTWl3eU1sMHNOVEU2V3pJc01qSmRMRFUxT2xzeUxESXlYU3cyTURwYk1pd3lNbDE5TEhzeU16cGJNaXc1T1Ywc016TTZXeklzT1RsZExEVTBPbHN5TERrNVhTdzJPRHBiTWl3NU9WMHNOekk2V3pJc09UbGRMRGMxT2xzeUxEazVYWDBzZXpjek9sc3hMREV3T0YxOUxIc3lNRG8zTkN3Mk16b3hNalVzTmpRNk56VXNOalU2V3pFc05ETmRMRGN5T2xzeExETTFYU3czT0RveU5pdzNPVG95Tnl3NE1EcGJNU3d5T0Ywc09ERTZXekVzTWpsZExEZ3lPbHN4TERNd1hTdzRNenBiTVN3ek1WMHNPRFE2V3pFc016SmRMRGcxT2xzeExETTBYU3c0Tmpvek0zMHNlelU2V3pJc01qTmRMREUwT2xzeUxESXpYU3d4TlRwYk1pd3lNMTBzTVRrNld6SXNNak5kTERJNU9sc3lMREl6WFN3ek5EcGJNaXd5TTEwc016azZXeklzTWpOZExEUTBPbHN5TERJelhTdzBOenBiTWl3eU0xMHNORGc2V3pJc01qTmRMRFV4T2xzeUxESXpYU3cxTlRwYk1pd3lNMTBzTmpBNld6SXNNak5kZlN4N05EYzZXeklzTVRsZGZTeDdORGM2V3pJc056ZGRmU3g3TWpBNk56UXNNek02V3pJc056SmRMRFF4T2pFeU5pdzJNem94TWpjc05qUTZOelVzTmpVNld6RXNORE5kTERZNU9qRXlPQ3czTURvM05pdzNNVG8zTnl3M01qcGJNU3czT0Ywc056VTZXeklzTnpKZExEYzRPakkyTERjNU9qSTNMRGd3T2xzeExESTRYU3c0TVRwYk1Td3lPVjBzT0RJNld6RXNNekJkTERnek9sc3hMRE14WFN3NE5EcGJNU3d6TWwwc09EVTZXekVzTXpSZExEZzJPak16ZlN4N05UcGJNaXd5TkYwc01UUTZXeklzTWpSZExERTFPbHN5TERJMFhTd3hPVHBiTWl3eU5GMHNNams2V3pJc01qUmRMRE0wT2xzeUxESTBYU3d6T1RwYk1pd3lORjBzTkRRNld6SXNNalJkTERRM09sc3lMREkwWFN3ME9EcGJNaXd5TkYwc05URTZXeklzTWpSZExEVTFPbHN5TERJMFhTdzJNRHBiTWl3eU5GMTlMSHMyT0RwYk1Td3hNamxkZlN4N05qVTZXeklzT1RWZExEWTRPbHN5TERrMVhTdzNNanBiTWl3NU5WMHNPREE2V3pJc09UVmRMRGd4T2xzeUxEazFYU3c0TWpwYk1pdzVOVjBzT0RNNld6SXNPVFZkTERnME9sc3lMRGsxWFN3NE5UcGJNaXc1TlYxOUxIczJPRHBiTWl3NU4xMTlMSHMxT2xzeUxESXhYU3d4TkRwYk1pd3lNVjBzTVRVNld6SXNNakZkTERFNU9sc3lMREl4WFN3eU9UcGJNaXd5TVYwc016UTZXeklzTWpGZExETTVPbHN5TERJeFhTdzBORHBiTWl3eU1WMHNORGM2V3pJc01qRmRMRFE0T2xzeUxESXhYU3cxTVRwYk1pd3lNVjBzTlRVNld6SXNNakZkTERZd09sc3lMREl4WFgwc2V6TXpPbHN4TERFek1GMTlMSHN6TXpwYk1pdzJNMTE5TEhzM01qcGJNU3d4TXpKZExEYzJPakV6TVgwc2V6TXpPbHN4TERFek0xMTlMSHN6TXpwYk1pdzJPVjE5TEhzeE5UcGJNaXd4TWwwc01UZzZXeklzTVRKZGZTeDdNVFE2V3pJc01qWmRMREUxT2xzeUxESTJYU3d4T1RwYk1pd3lObDBzTWprNld6SXNNalpkTERNME9sc3lMREkyWFN3ME56cGJNaXd5Tmwwc05EZzZXeklzTWpaZExEVXhPbHN5TERJMlhTdzFOVHBiTWl3eU5sMHNOakE2V3pJc01qWmRmU3g3TWpNNld6SXNNekZkTERNek9sc3lMRE14WFN3MU5EcGJNaXd6TVYwc05qZzZXeklzTXpGZExEY3lPbHN5TERNeFhTdzNOVHBiTWl3ek1WMTlMSHN6TXpwYk1pdzNORjBzTkRJNk1UTTBMRGMwT2pFek5TdzNOVHBiTVN3eE1qQmRmU3g3TXpNNld6SXNOekZkTERZMU9sc3lMRGN4WFN3M01qcGJNaXczTVYwc056VTZXeklzTnpGZExEZ3dPbHN5TERjeFhTdzRNVHBiTWl3M01WMHNPREk2V3pJc056RmRMRGd6T2xzeUxEY3hYU3c0TkRwYk1pdzNNVjBzT0RVNld6SXNOekZkZlN4N016TTZXeklzTnpOZExEYzFPbHN5TERjelhYMHNlekl6T2xzeUxESTVYU3d6TXpwYk1pd3lPVjBzTlRRNld6SXNNamxkTERZMU9sc3lMREk1WFN3Mk9EcGJNaXd5T1Ywc056STZXeklzTWpsZExEYzFPbHN5TERJNVhTdzRNRHBiTWl3eU9WMHNPREU2V3pJc01qbGRMRGd5T2xzeUxESTVYU3c0TXpwYk1pd3lPVjBzT0RRNld6SXNNamxkTERnMU9sc3lMREk1WFgwc2V6RTBPbHN5TERFMVhTd3hOVHBiTWl3eE5WMHNNVGs2V3pJc01UVmRMREk1T2xzeUxERTFYU3d6TkRwYk1pd3hOVjBzTXprNld6SXNNVFZkTERRME9sc3lMREUxWFN3ME56cGJNaXd4TlYwc05EZzZXeklzTVRWZExEVXhPbHN5TERFMVhTdzFOVHBiTWl3eE5WMHNOakE2V3pJc01UVmRmU3g3TnpJNld6RXNNVE0zWFN3M056cGJNU3d4TXpaZGZTeDdOekk2V3pJc01UQXdYU3czTnpwYk1pd3hNREJkZlN4N01UUTZXeklzTVRaZExERTFPbHN5TERFMlhTd3hPVHBiTWl3eE5sMHNNams2V3pJc01UWmRMRE0wT2xzeUxERTJYU3cwTkRwYk1pd3hObDBzTkRjNld6SXNNVFpkTERRNE9sc3lMREUyWFN3MU1UcGJNaXd4Tmwwc05UVTZXeklzTVRaZExEWXdPbHN5TERFMlhYMHNlek16T2xzeExERXpPRjE5TEhzek16cGJNaXczTlYxOUxIc3pNenBiTWl3ek1sMTlMSHMzTWpwYk1pd3hNREZkTERjM09sc3lMREV3TVYxOUxIc3hORHBiTWl3eE4xMHNNVFU2V3pJc01UZGRMREU1T2xzeUxERTNYU3d5T1RwYk1pd3hOMTBzTXpRNld6SXNNVGRkTERNNU9sc3lMREUzWFN3ME5EcGJNaXd4TjEwc05EYzZXeklzTVRkZExEUTRPbHN5TERFM1hTdzFNVHBiTWl3eE4xMHNOVFU2V3pJc01UZGRMRFl3T2xzeUxERTNYWDFkTEZ4dVpHVm1ZWFZzZEVGamRHbHZibk02SUhzME9sc3lMREZkTERVME9sc3lMRFUxWFN3MU5qcGJNaXd5TUYwc05qQTZXeklzTlRkZExEY3pPbHN5TERneFhTdzRNanBiTWl3NE5WMHNPRFk2V3pJc01UaGRMRGt3T2xzeUxEZzVYU3d4TURFNld6SXNOVE5kTERFd05EcGJNaXc1TTEwc01URXdPbHN5TERFNVhTd3hNVEU2V3pJc056ZGRMREV4TmpwYk1pdzVOMTBzTVRFNU9sc3lMRFl6WFN3eE1qSTZXeklzTmpsZExERXpOVHBiTWl3M05WMHNNVE0yT2xzeUxETXlYWDBzWEc1d1lYSnpaVVZ5Y205eU9pQm1kVzVqZEdsdmJpQndZWEp6WlVWeWNtOXlJQ2h6ZEhJc0lHaGhjMmdwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9jM1J5S1R0Y2JuMHNYRzV3WVhKelpUb2dablZ1WTNScGIyNGdjR0Z5YzJVb2FXNXdkWFFwSUh0Y2JpQWdJQ0IyWVhJZ2MyVnNaaUE5SUhSb2FYTXNJSE4wWVdOcklEMGdXekJkTENCMmMzUmhZMnNnUFNCYmJuVnNiRjBzSUd4emRHRmpheUE5SUZ0ZExDQjBZV0pzWlNBOUlIUm9hWE11ZEdGaWJHVXNJSGw1ZEdWNGRDQTlJRndpWENJc0lIbDViR2x1Wlc1dklEMGdNQ3dnZVhsc1pXNW5JRDBnTUN3Z2NtVmpiM1psY21sdVp5QTlJREFzSUZSRlVsSlBVaUE5SURJc0lFVlBSaUE5SURFN1hHNGdJQ0FnZEdocGN5NXNaWGhsY2k1elpYUkpibkIxZENocGJuQjFkQ2s3WEc0Z0lDQWdkR2hwY3k1c1pYaGxjaTU1ZVNBOUlIUm9hWE11ZVhrN1hHNGdJQ0FnZEdocGN5NTVlUzVzWlhobGNpQTlJSFJvYVhNdWJHVjRaWEk3WEc0Z0lDQWdkR2hwY3k1NWVTNXdZWEp6WlhJZ1BTQjBhR2x6TzF4dUlDQWdJR2xtSUNoMGVYQmxiMllnZEdocGN5NXNaWGhsY2k1NWVXeHNiMk1nUFQwZ1hDSjFibVJsWm1sdVpXUmNJaWxjYmlBZ0lDQWdJQ0FnZEdocGN5NXNaWGhsY2k1NWVXeHNiMk1nUFNCN2ZUdGNiaUFnSUNCMllYSWdlWGxzYjJNZ1BTQjBhR2x6TG14bGVHVnlMbmw1Ykd4dll6dGNiaUFnSUNCc2MzUmhZMnN1Y0hWemFDaDVlV3h2WXlrN1hHNGdJQ0FnZG1GeUlISmhibWRsY3lBOUlIUm9hWE11YkdWNFpYSXViM0IwYVc5dWN5QW1KaUIwYUdsekxteGxlR1Z5TG05d2RHbHZibk11Y21GdVoyVnpPMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdkR2hwY3k1NWVTNXdZWEp6WlVWeWNtOXlJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHRnljMlZGY25KdmNpQTlJSFJvYVhNdWVYa3VjR0Z5YzJWRmNuSnZjanRjYmlBZ0lDQm1kVzVqZEdsdmJpQndiM0JUZEdGamF5aHVLU0I3WEc0Z0lDQWdJQ0FnSUhOMFlXTnJMbXhsYm1kMGFDQTlJSE4wWVdOckxteGxibWQwYUNBdElESWdLaUJ1TzF4dUlDQWdJQ0FnSUNCMmMzUmhZMnN1YkdWdVozUm9JRDBnZG5OMFlXTnJMbXhsYm1kMGFDQXRJRzQ3WEc0Z0lDQWdJQ0FnSUd4emRHRmpheTVzWlc1bmRHZ2dQU0JzYzNSaFkyc3ViR1Z1WjNSb0lDMGdianRjYmlBZ0lDQjlYRzRnSUNBZ1puVnVZM1JwYjI0Z2JHVjRLQ2tnZTF4dUlDQWdJQ0FnSUNCMllYSWdkRzlyWlc0N1hHNGdJQ0FnSUNBZ0lIUnZhMlZ1SUQwZ2MyVnNaaTVzWlhobGNpNXNaWGdvS1NCOGZDQXhPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhSdmEyVnVJQ0U5UFNCY0ltNTFiV0psY2x3aUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGIydGxiaUE5SUhObGJHWXVjM2x0WW05c2MxOWJkRzlyWlc1ZElIeDhJSFJ2YTJWdU8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQjBiMnRsYmp0Y2JpQWdJQ0I5WEc0Z0lDQWdkbUZ5SUhONWJXSnZiQ3dnY0hKbFJYSnliM0pUZVcxaWIyd3NJSE4wWVhSbExDQmhZM1JwYjI0c0lHRXNJSElzSUhsNWRtRnNJRDBnZTMwc0lIQXNJR3hsYml3Z2JtVjNVM1JoZEdVc0lHVjRjR1ZqZEdWa08xeHVJQ0FnSUhkb2FXeGxJQ2gwY25WbEtTQjdYRzRnSUNBZ0lDQWdJSE4wWVhSbElEMGdjM1JoWTJ0YmMzUmhZMnN1YkdWdVozUm9JQzBnTVYwN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtUmxabUYxYkhSQlkzUnBiMjV6VzNOMFlYUmxYU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZV04wYVc5dUlEMGdkR2hwY3k1a1pXWmhkV3gwUVdOMGFXOXVjMXR6ZEdGMFpWMDdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jM2x0WW05c0lEMDlQU0J1ZFd4c0lIeDhJSFI1Y0dWdlppQnplVzFpYjJ3Z1BUMGdYQ0oxYm1SbFptbHVaV1JjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjViV0p2YkNBOUlHeGxlQ2dwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1lXTjBhVzl1SUQwZ2RHRmliR1ZiYzNSaGRHVmRJQ1ltSUhSaFlteGxXM04wWVhSbFhWdHplVzFpYjJ4ZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNoMGVYQmxiMllnWVdOMGFXOXVJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lJSHg4SUNGaFkzUnBiMjR1YkdWdVozUm9JSHg4SUNGaFkzUnBiMjViTUYwcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaaGNpQmxjbkpUZEhJZ1BTQmNJbHdpTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0NGeVpXTnZkbVZ5YVc1bktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaWGh3WldOMFpXUWdQU0JiWFR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCbWIzSWdLSEFnYVc0Z2RHRmliR1ZiYzNSaGRHVmRLVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1MFpYSnRhVzVoYkhOZlczQmRJQ1ltSUhBZ1BpQXlLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JsZUhCbFkzUmxaQzV3ZFhOb0tGd2lKMXdpSUNzZ2RHaHBjeTUwWlhKdGFXNWhiSE5mVzNCZElDc2dYQ0luWENJcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YkdWNFpYSXVjMmh2ZDFCdmMybDBhVzl1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1Z5Y2xOMGNpQTlJRndpVUdGeWMyVWdaWEp5YjNJZ2IyNGdiR2x1WlNCY0lpQXJJQ2g1ZVd4cGJtVnVieUFySURFcElDc2dYQ0k2WEZ4dVhDSWdLeUIwYUdsekxteGxlR1Z5TG5Ob2IzZFFiM05wZEdsdmJpZ3BJQ3NnWENKY1hHNUZlSEJsWTNScGJtY2dYQ0lnS3lCbGVIQmxZM1JsWkM1cWIybHVLRndpTENCY0lpa2dLeUJjSWl3Z1oyOTBJQ2RjSWlBcklDaDBhR2x6TG5SbGNtMXBibUZzYzE5YmMzbHRZbTlzWFNCOGZDQnplVzFpYjJ3cElDc2dYQ0luWENJN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaWEp5VTNSeUlEMGdYQ0pRWVhKelpTQmxjbkp2Y2lCdmJpQnNhVzVsSUZ3aUlDc2dLSGw1YkdsdVpXNXZJQ3NnTVNrZ0t5QmNJam9nVlc1bGVIQmxZM1JsWkNCY0lpQXJJQ2h6ZVcxaWIyd2dQVDBnTVQ5Y0ltVnVaQ0J2WmlCcGJuQjFkRndpT2x3aUoxd2lJQ3NnS0hSb2FYTXVkR1Z5YldsdVlXeHpYMXR6ZVcxaWIyeGRJSHg4SUhONWJXSnZiQ2tnS3lCY0lpZGNJaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVjR0Z5YzJWRmNuSnZjaWhsY25KVGRISXNJSHQwWlhoME9pQjBhR2x6TG14bGVHVnlMbTFoZEdOb0xDQjBiMnRsYmpvZ2RHaHBjeTUwWlhKdGFXNWhiSE5mVzNONWJXSnZiRjBnZkh3Z2MzbHRZbTlzTENCc2FXNWxPaUIwYUdsekxteGxlR1Z5TG5sNWJHbHVaVzV2TENCc2IyTTZJSGw1Ykc5akxDQmxlSEJsWTNSbFpEb2daWGh3WldOMFpXUjlLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb1lXTjBhVzl1V3pCZElHbHVjM1JoYm1ObGIyWWdRWEp5WVhrZ0ppWWdZV04wYVc5dUxteGxibWQwYUNBK0lERXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loY0lsQmhjbk5sSUVWeWNtOXlPaUJ0ZFd4MGFYQnNaU0JoWTNScGIyNXpJSEJ2YzNOcFlteGxJR0YwSUhOMFlYUmxPaUJjSWlBcklITjBZWFJsSUNzZ1hDSXNJSFJ2YTJWdU9pQmNJaUFySUhONWJXSnZiQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2MzZHBkR05vSUNoaFkzUnBiMjViTUYwcElIdGNiaUFnSUNBZ0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSaFkyc3VjSFZ6YUNoemVXMWliMndwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkbk4wWVdOckxuQjFjMmdvZEdocGN5NXNaWGhsY2k1NWVYUmxlSFFwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdiSE4wWVdOckxuQjFjMmdvZEdocGN5NXNaWGhsY2k1NWVXeHNiMk1wTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoWTJzdWNIVnphQ2hoWTNScGIyNWJNVjBwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdjM2x0WW05c0lEMGdiblZzYkR0Y2JpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNnaGNISmxSWEp5YjNKVGVXMWliMndwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWVXeGxibWNnUFNCMGFHbHpMbXhsZUdWeUxubDViR1Z1Wnp0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWVYUmxlSFFnUFNCMGFHbHpMbXhsZUdWeUxubDVkR1Y0ZER0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCNWVXeHBibVZ1YnlBOUlIUm9hWE11YkdWNFpYSXVlWGxzYVc1bGJtODdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdlWGxzYjJNZ1BTQjBhR2x6TG14bGVHVnlMbmw1Ykd4dll6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21WamIzWmxjbWx1WnlBK0lEQXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbFkyOTJaWEpwYm1jdExUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYzNsdFltOXNJRDBnY0hKbFJYSnliM0pUZVcxaWIydzdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjSEpsUlhKeWIzSlRlVzFpYjJ3Z1BTQnVkV3hzTzF4dUlDQWdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdNanBjYmlBZ0lDQWdJQ0FnSUNBZ0lHeGxiaUE5SUhSb2FYTXVjSEp2WkhWamRHbHZibk5mVzJGamRHbHZibHN4WFYxYk1WMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCNWVYWmhiQzRrSUQwZ2RuTjBZV05yVzNaemRHRmpheTVzWlc1bmRHZ2dMU0JzWlc1ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZVhsMllXd3VYeVFnUFNCN1ptbHljM1JmYkdsdVpUb2diSE4wWVdOclcyeHpkR0ZqYXk1c1pXNW5kR2dnTFNBb2JHVnVJSHg4SURFcFhTNW1hWEp6ZEY5c2FXNWxMQ0JzWVhOMFgyeHBibVU2SUd4emRHRmphMXRzYzNSaFkyc3ViR1Z1WjNSb0lDMGdNVjB1YkdGemRGOXNhVzVsTENCbWFYSnpkRjlqYjJ4MWJXNDZJR3h6ZEdGamExdHNjM1JoWTJzdWJHVnVaM1JvSUMwZ0tHeGxiaUI4ZkNBeEtWMHVabWx5YzNSZlkyOXNkVzF1TENCc1lYTjBYMk52YkhWdGJqb2diSE4wWVdOclcyeHpkR0ZqYXk1c1pXNW5kR2dnTFNBeFhTNXNZWE4wWDJOdmJIVnRibjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvY21GdVoyVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZVhsMllXd3VYeVF1Y21GdVoyVWdQU0JiYkhOMFlXTnJXMnh6ZEdGamF5NXNaVzVuZEdnZ0xTQW9iR1Z1SUh4OElERXBYUzV5WVc1blpWc3dYU3dnYkhOMFlXTnJXMnh6ZEdGamF5NXNaVzVuZEdnZ0xTQXhYUzV5WVc1blpWc3hYVjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNCeUlEMGdkR2hwY3k1d1pYSm1iM0p0UVdOMGFXOXVMbU5oYkd3b2VYbDJZV3dzSUhsNWRHVjRkQ3dnZVhsc1pXNW5MQ0I1ZVd4cGJtVnVieXdnZEdocGN5NTVlU3dnWVdOMGFXOXVXekZkTENCMmMzUmhZMnNzSUd4emRHRmpheWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEhsd1pXOW1JSElnSVQwOUlGd2lkVzVrWldacGJtVmtYQ0lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY2p0Y2JpQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hzWlc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnpkR0ZqYXlBOUlITjBZV05yTG5Oc2FXTmxLREFzSUMweElDb2diR1Z1SUNvZ01pazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkbk4wWVdOcklEMGdkbk4wWVdOckxuTnNhV05sS0RBc0lDMHhJQ29nYkdWdUtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNjM1JoWTJzZ1BTQnNjM1JoWTJzdWMyeHBZMlVvTUN3Z0xURWdLaUJzWlc0cE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoWTJzdWNIVnphQ2gwYUdsekxuQnliMlIxWTNScGIyNXpYMXRoWTNScGIyNWJNVjFkV3pCZEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUhaemRHRmpheTV3ZFhOb0tIbDVkbUZzTGlRcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYkhOMFlXTnJMbkIxYzJnb2VYbDJZV3d1WHlRcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYm1WM1UzUmhkR1VnUFNCMFlXSnNaVnR6ZEdGamExdHpkR0ZqYXk1c1pXNW5kR2dnTFNBeVhWMWJjM1JoWTJ0YmMzUmhZMnN1YkdWdVozUm9JQzBnTVYxZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNSaFkyc3VjSFZ6YUNodVpYZFRkR0YwWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lDQWdZMkZ6WlNBek9seHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJ5ZFdVN1hHNTlYRzU5TzF4dUx5b2dTbWx6YjI0Z1oyVnVaWEpoZEdWa0lHeGxlR1Z5SUNvdlhHNTJZWElnYkdWNFpYSWdQU0FvWm5WdVkzUnBiMjRvS1h0Y2JuWmhjaUJzWlhobGNpQTlJQ2g3UlU5R09qRXNYRzV3WVhKelpVVnljbTl5T21aMWJtTjBhVzl1SUhCaGNuTmxSWEp5YjNJb2MzUnlMQ0JvWVhOb0tTQjdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbmw1TG5CaGNuTmxjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1NWVTNXdZWEp6WlhJdWNHRnljMlZGY25KdmNpaHpkSElzSUdoaGMyZ3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0hOMGNpazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQjlMRnh1YzJWMFNXNXdkWFE2Wm5WdVkzUnBiMjRnS0dsdWNIVjBLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVYMmx1Y0hWMElEMGdhVzV3ZFhRN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDIxdmNtVWdQU0IwYUdsekxsOXNaWE56SUQwZ2RHaHBjeTVrYjI1bElEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZVhsc2FXNWxibThnUFNCMGFHbHpMbmw1YkdWdVp5QTlJREE3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVlWGwwWlhoMElEMGdkR2hwY3k1dFlYUmphR1ZrSUQwZ2RHaHBjeTV0WVhSamFDQTlJQ2NuTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU52Ym1ScGRHbHZibE4wWVdOcklEMGdXeWRKVGtsVVNVRk1KMTA3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVlWGxzYkc5aklEMGdlMlpwY25OMFgyeHBibVU2TVN4bWFYSnpkRjlqYjJ4MWJXNDZNQ3hzWVhOMFgyeHBibVU2TVN4c1lYTjBYMk52YkhWdGJqb3dmVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11YjNCMGFXOXVjeTV5WVc1blpYTXBJSFJvYVhNdWVYbHNiRzlqTG5KaGJtZGxJRDBnV3pBc01GMDdYRzRnSUNBZ0lDQWdJSFJvYVhNdWIyWm1jMlYwSUQwZ01EdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE03WEc0Z0lDQWdmU3hjYm1sdWNIVjBPbVoxYm1OMGFXOXVJQ2dwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlJR05vSUQwZ2RHaHBjeTVmYVc1d2RYUmJNRjA3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVlWGwwWlhoMElDczlJR05vTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbmw1YkdWdVp5c3JPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtOW1abk5sZENzck8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xaGRHTm9JQ3M5SUdOb08xeHVJQ0FnSUNBZ0lDQjBhR2x6TG0xaGRHTm9aV1FnS3owZ1kyZzdYRzRnSUNBZ0lDQWdJSFpoY2lCc2FXNWxjeUE5SUdOb0xtMWhkR05vS0M4b1B6cGNYSEpjWEc0L2ZGeGNiaWt1S2k5bktUdGNiaUFnSUNBZ0lDQWdhV1lnS0d4cGJtVnpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5sNWJHbHVaVzV2S3lzN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxubDViR3h2WXk1c1lYTjBYMnhwYm1Vckt6dGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVlWGxzYkc5akxteGhjM1JmWTI5c2RXMXVLeXM3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWIzQjBhVzl1Y3k1eVlXNW5aWE1wSUhSb2FYTXVlWGxzYkc5akxuSmhibWRsV3pGZEt5czdYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NWZhVzV3ZFhRZ1BTQjBhR2x6TGw5cGJuQjFkQzV6YkdsalpTZ3hLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR05vTzF4dUlDQWdJSDBzWEc1MWJuQjFkRHBtZFc1amRHbHZiaUFvWTJncElIdGNiaUFnSUNBZ0lDQWdkbUZ5SUd4bGJpQTlJR05vTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnZG1GeUlHeHBibVZ6SUQwZ1kyZ3VjM0JzYVhRb0x5Zy9PbHhjY2x4Y2JqOThYRnh1S1M5bktUdGNibHh1SUNBZ0lDQWdJQ0IwYUdsekxsOXBibkIxZENBOUlHTm9JQ3NnZEdocGN5NWZhVzV3ZFhRN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZVhsMFpYaDBJRDBnZEdocGN5NTVlWFJsZUhRdWMzVmljM1J5S0RBc0lIUm9hWE11ZVhsMFpYaDBMbXhsYm1kMGFDMXNaVzR0TVNrN1hHNGdJQ0FnSUNBZ0lDOHZkR2hwY3k1NWVXeGxibWNnTFQwZ2JHVnVPMXh1SUNBZ0lDQWdJQ0IwYUdsekxtOW1abk5sZENBdFBTQnNaVzQ3WEc0Z0lDQWdJQ0FnSUhaaGNpQnZiR1JNYVc1bGN5QTlJSFJvYVhNdWJXRjBZMmd1YzNCc2FYUW9MeWcvT2x4Y2NseGNiajk4WEZ4dUtTOW5LVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXRZWFJqYUNBOUlIUm9hWE11YldGMFkyZ3VjM1ZpYzNSeUtEQXNJSFJvYVhNdWJXRjBZMmd1YkdWdVozUm9MVEVwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbTFoZEdOb1pXUWdQU0IwYUdsekxtMWhkR05vWldRdWMzVmljM1J5S0RBc0lIUm9hWE11YldGMFkyaGxaQzVzWlc1bmRHZ3RNU2s3WEc1Y2JpQWdJQ0FnSUNBZ2FXWWdLR3hwYm1WekxteGxibWQwYUMweEtTQjBhR2x6TG5sNWJHbHVaVzV2SUMwOUlHeHBibVZ6TG14bGJtZDBhQzB4TzF4dUlDQWdJQ0FnSUNCMllYSWdjaUE5SUhSb2FYTXVlWGxzYkc5akxuSmhibWRsTzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11ZVhsc2JHOWpJRDBnZTJacGNuTjBYMnhwYm1VNklIUm9hWE11ZVhsc2JHOWpMbVpwY25OMFgyeHBibVVzWEc0Z0lDQWdJQ0FnSUNBZ2JHRnpkRjlzYVc1bE9pQjBhR2x6TG5sNWJHbHVaVzV2S3pFc1hHNGdJQ0FnSUNBZ0lDQWdabWx5YzNSZlkyOXNkVzF1T2lCMGFHbHpMbmw1Ykd4dll5NW1hWEp6ZEY5amIyeDFiVzRzWEc0Z0lDQWdJQ0FnSUNBZ2JHRnpkRjlqYjJ4MWJXNDZJR3hwYm1WeklEOWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0tHeHBibVZ6TG14bGJtZDBhQ0E5UFQwZ2IyeGtUR2x1WlhNdWJHVnVaM1JvSUQ4Z2RHaHBjeTU1ZVd4c2IyTXVabWx5YzNSZlkyOXNkVzF1SURvZ01Da2dLeUJ2YkdSTWFXNWxjMXR2YkdSTWFXNWxjeTVzWlc1bmRHZ2dMU0JzYVc1bGN5NXNaVzVuZEdoZExteGxibWQwYUNBdElHeHBibVZ6V3pCZExteGxibWQwYURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NTVlV3hzYjJNdVptbHljM1JmWTI5c2RXMXVJQzBnYkdWdVhHNGdJQ0FnSUNBZ0lDQWdmVHRjYmx4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG5KaGJtZGxjeWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1NWVXeHNiMk11Y21GdVoyVWdQU0JiY2xzd1hTd2djbHN3WFNBcklIUm9hWE11ZVhsc1pXNW5JQzBnYkdWdVhUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdJQ0I5TEZ4dWJXOXlaVHBtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WDIxdmNtVWdQU0IwY25WbE8xeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ0lDQjlMRnh1YkdWemN6cG1kVzVqZEdsdmJpQW9iaWtnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMblZ1Y0hWMEtIUm9hWE11YldGMFkyZ3VjMnhwWTJVb2Jpa3BPMXh1SUNBZ0lIMHNYRzV3WVhOMFNXNXdkWFE2Wm5WdVkzUnBiMjRnS0NrZ2UxeHVJQ0FnSUNBZ0lDQjJZWElnY0dGemRDQTlJSFJvYVhNdWJXRjBZMmhsWkM1emRXSnpkSElvTUN3Z2RHaHBjeTV0WVhSamFHVmtMbXhsYm1kMGFDQXRJSFJvYVhNdWJXRjBZMmd1YkdWdVozUm9LVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQ2h3WVhOMExteGxibWQwYUNBK0lESXdJRDhnSnk0dUxpYzZKeWNwSUNzZ2NHRnpkQzV6ZFdKemRISW9MVEl3S1M1eVpYQnNZV05sS0M5Y1hHNHZaeXdnWENKY0lpazdYRzRnSUNBZ2ZTeGNiblZ3WTI5dGFXNW5TVzV3ZFhRNlpuVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2JtVjRkQ0E5SUhSb2FYTXViV0YwWTJnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h1WlhoMExteGxibWQwYUNBOElESXdLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnVaWGgwSUNzOUlIUm9hWE11WDJsdWNIVjBMbk4xWW5OMGNpZ3dMQ0F5TUMxdVpYaDBMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJQ2h1WlhoMExuTjFZbk4wY2lnd0xESXdLU3NvYm1WNGRDNXNaVzVuZEdnZ1BpQXlNQ0EvSUNjdUxpNG5PaWNuS1NrdWNtVndiR0ZqWlNndlhGeHVMMmNzSUZ3aVhDSXBPMXh1SUNBZ0lIMHNYRzV6YUc5M1VHOXphWFJwYjI0NlpuVnVZM1JwYjI0Z0tDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2NISmxJRDBnZEdocGN5NXdZWE4wU1c1d2RYUW9LVHRjYmlBZ0lDQWdJQ0FnZG1GeUlHTWdQU0J1WlhjZ1FYSnlZWGtvY0hKbExteGxibWQwYUNBcklERXBMbXB2YVc0b1hDSXRYQ0lwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY0hKbElDc2dkR2hwY3k1MWNHTnZiV2x1WjBsdWNIVjBLQ2tnS3lCY0lseGNibHdpSUNzZ1l5dGNJbDVjSWp0Y2JpQWdJQ0I5TEZ4dWJtVjRkRHBtZFc1amRHbHZiaUFvS1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxtUnZibVVwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TGtWUFJqdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JwWmlBb0lYUm9hWE11WDJsdWNIVjBLU0IwYUdsekxtUnZibVVnUFNCMGNuVmxPMXh1WEc0Z0lDQWdJQ0FnSUhaaGNpQjBiMnRsYml4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFoZEdOb0xGeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdWdGNFMWhkR05vTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdhVzVrWlhnc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjJ3c1hHNGdJQ0FnSUNBZ0lDQWdJQ0JzYVc1bGN6dGNiaUFnSUNBZ0lDQWdhV1lnS0NGMGFHbHpMbDl0YjNKbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbmw1ZEdWNGRDQTlJQ2NuTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1dFlYUmphQ0E5SUNjbk8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSFpoY2lCeWRXeGxjeUE5SUhSb2FYTXVYMk4xY25KbGJuUlNkV3hsY3lncE8xeHVJQ0FnSUNBZ0lDQm1iM0lnS0haaGNpQnBQVEE3YVNBOElISjFiR1Z6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCMFpXMXdUV0YwWTJnZ1BTQjBhR2x6TGw5cGJuQjFkQzV0WVhSamFDaDBhR2x6TG5KMWJHVnpXM0oxYkdWelcybGRYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnBaaUFvZEdWdGNFMWhkR05vSUNZbUlDZ2hiV0YwWTJnZ2ZId2dkR1Z0Y0UxaGRHTm9XekJkTG14bGJtZDBhQ0ErSUcxaGRHTm9XekJkTG14bGJtZDBhQ2twSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCdFlYUmphQ0E5SUhSbGJYQk5ZWFJqYUR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCcGJtUmxlQ0E5SUdrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxtOXdkR2x2Ym5NdVpteGxlQ2tnWW5KbFlXczdYRzRnSUNBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdhV1lnS0cxaGRHTm9LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnNhVzVsY3lBOUlHMWhkR05vV3pCZExtMWhkR05vS0M4b1B6cGNYSEpjWEc0L2ZGeGNiaWt1S2k5bktUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHNhVzVsY3lrZ2RHaHBjeTU1ZVd4cGJtVnVieUFyUFNCc2FXNWxjeTVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbmw1Ykd4dll5QTlJSHRtYVhKemRGOXNhVzVsT2lCMGFHbHpMbmw1Ykd4dll5NXNZWE4wWDJ4cGJtVXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JzWVhOMFgyeHBibVU2SUhSb2FYTXVlWGxzYVc1bGJtOHJNU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdacGNuTjBYMk52YkhWdGJqb2dkR2hwY3k1NWVXeHNiMk11YkdGemRGOWpiMngxYlc0c1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnNZWE4wWDJOdmJIVnRiam9nYkdsdVpYTWdQeUJzYVc1bGMxdHNhVzVsY3k1c1pXNW5kR2d0TVYwdWJHVnVaM1JvTFd4cGJtVnpXMnhwYm1WekxteGxibWQwYUMweFhTNXRZWFJqYUNndlhGeHlQMXhjYmo4dktWc3dYUzVzWlc1bmRHZ2dPaUIwYUdsekxubDViR3h2WXk1c1lYTjBYMk52YkhWdGJpQXJJRzFoZEdOb1d6QmRMbXhsYm1kMGFIMDdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbmw1ZEdWNGRDQXJQU0J0WVhSamFGc3dYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YldGMFkyZ2dLejBnYldGMFkyaGJNRjA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG0xaGRHTm9aWE1nUFNCdFlYUmphRHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11ZVhsc1pXNW5JRDBnZEdocGN5NTVlWFJsZUhRdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXViM0IwYVc5dWN5NXlZVzVuWlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5sNWJHeHZZeTV5WVc1blpTQTlJRnQwYUdsekxtOW1abk5sZEN3Z2RHaHBjeTV2Wm1aelpYUWdLejBnZEdocGN5NTVlV3hsYm1kZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1ZmJXOXlaU0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVmYVc1d2RYUWdQU0IwYUdsekxsOXBibkIxZEM1emJHbGpaU2h0WVhSamFGc3dYUzVzWlc1bmRHZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTV0WVhSamFHVmtJQ3M5SUcxaGRHTm9XekJkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdkRzlyWlc0Z1BTQjBhR2x6TG5CbGNtWnZjbTFCWTNScGIyNHVZMkZzYkNoMGFHbHpMQ0IwYUdsekxubDVMQ0IwYUdsekxDQnlkV3hsYzF0cGJtUmxlRjBzZEdocGN5NWpiMjVrYVhScGIyNVRkR0ZqYTF0MGFHbHpMbU52Ym1ScGRHbHZibE4wWVdOckxteGxibWQwYUMweFhTazdYRzRnSUNBZ0lDQWdJQ0FnSUNCcFppQW9kR2hwY3k1a2IyNWxJQ1ltSUhSb2FYTXVYMmx1Y0hWMEtTQjBhR2x6TG1SdmJtVWdQU0JtWVd4elpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaDBiMnRsYmlrZ2NtVjBkWEp1SUhSdmEyVnVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaU0J5WlhSMWNtNDdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tIUm9hWE11WDJsdWNIVjBJRDA5UFNCY0lsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTVGVDBZN1hHNGdJQ0FnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d1lYSnpaVVZ5Y205eUtDZE1aWGhwWTJGc0lHVnljbTl5SUc5dUlHeHBibVVnSnlzb2RHaHBjeTU1ZVd4cGJtVnVieXN4S1NzbkxpQlZibkpsWTI5bmJtbDZaV1FnZEdWNGRDNWNYRzRuSzNSb2FYTXVjMmh2ZDFCdmMybDBhVzl1S0Nrc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSHQwWlhoME9pQmNJbHdpTENCMGIydGxiam9nYm5Wc2JDd2diR2x1WlRvZ2RHaHBjeTU1ZVd4cGJtVnViMzBwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnZlN4Y2JteGxlRHBtZFc1amRHbHZiaUJzWlhnZ0tDa2dlMXh1SUNBZ0lDQWdJQ0IyWVhJZ2NpQTlJSFJvYVhNdWJtVjRkQ2dwTzF4dUlDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlISWdJVDA5SUNkMWJtUmxabWx1WldRbktTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY2p0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBhR2x6TG14bGVDZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdmU3hjYm1KbFoybHVPbVoxYm1OMGFXOXVJR0psWjJsdUlDaGpiMjVrYVhScGIyNHBJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpiMjVrYVhScGIyNVRkR0ZqYXk1d2RYTm9LR052Ym1ScGRHbHZiaWs3WEc0Z0lDQWdmU3hjYm5CdmNGTjBZWFJsT21aMWJtTjBhVzl1SUhCdmNGTjBZWFJsSUNncElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WTI5dVpHbDBhVzl1VTNSaFkyc3VjRzl3S0NrN1hHNGdJQ0FnZlN4Y2JsOWpkWEp5Wlc1MFVuVnNaWE02Wm5WdVkzUnBiMjRnWDJOMWNuSmxiblJTZFd4bGN5QW9LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtTnZibVJwZEdsdmJuTmJkR2hwY3k1amIyNWthWFJwYjI1VGRHRmphMXQwYUdsekxtTnZibVJwZEdsdmJsTjBZV05yTG14bGJtZDBhQzB4WFYwdWNuVnNaWE03WEc0Z0lDQWdmU3hjYm5SdmNGTjBZWFJsT21aMWJtTjBhVzl1SUNncElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIUm9hWE11WTI5dVpHbDBhVzl1VTNSaFkydGJkR2hwY3k1amIyNWthWFJwYjI1VGRHRmpheTVzWlc1bmRHZ3RNbDA3WEc0Z0lDQWdmU3hjYm5CMWMyaFRkR0YwWlRwbWRXNWpkR2x2YmlCaVpXZHBiaUFvWTI5dVpHbDBhVzl1S1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WW1WbmFXNG9ZMjl1WkdsMGFXOXVLVHRjYmlBZ0lDQjlmU2s3WEc1c1pYaGxjaTV2Y0hScGIyNXpJRDBnZTMwN1hHNXNaWGhsY2k1d1pYSm1iM0p0UVdOMGFXOXVJRDBnWm5WdVkzUnBiMjRnWVc1dmJubHRiM1Z6S0hsNUxIbDVYeXdrWVhadmFXUnBibWRmYm1GdFpWOWpiMnhzYVhOcGIyNXpMRmxaWDFOVVFWSlVYRzRwSUh0Y2JseHVYRzVtZFc1amRHbHZiaUJ6ZEhKcGNDaHpkR0Z5ZEN3Z1pXNWtLU0I3WEc0Z0lISmxkSFZ5YmlCNWVWOHVlWGwwWlhoMElEMGdlWGxmTG5sNWRHVjRkQzV6ZFdKemRISnBibWNvYzNSaGNuUXNJSGw1WHk1NWVXeGxibWNnTFNCbGJtUWdLeUJ6ZEdGeWRDazdYRzU5WEc1Y2JseHVkbUZ5SUZsWlUxUkJWRVU5V1ZsZlUxUkJVbFJjYm5OM2FYUmphQ2drWVhadmFXUnBibWRmYm1GdFpWOWpiMnhzYVhOcGIyNXpLU0I3WEc1allYTmxJREE2WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdsbUtIbDVYeTU1ZVhSbGVIUXVjMnhwWTJVb0xUSXBJRDA5UFNCY0lseGNYRnhjWEZ4Y1hDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCemRISnBjQ2d3TERFcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVltVm5hVzRvWENKdGRWd2lLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJR2xtS0hsNVh5NTVlWFJsZUhRdWMyeHBZMlVvTFRFcElEMDlQU0JjSWx4Y1hGeGNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBjbWx3S0RBc01TazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWlaV2RwYmloY0ltVnRkVndpS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG1KbFoybHVLRndpYlhWY0lpazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYVdZb2VYbGZMbmw1ZEdWNGRDa2djbVYwZFhKdUlERTFPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdYRzVpY21WaGF6dGNibU5oYzJVZ01UcHlaWFIxY200Z01UVTdYRzVpY21WaGF6dGNibU5oYzJVZ01qcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1d2IzQlRkR0YwWlNncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z01UVTdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmNibUp5WldGck8xeHVZMkZ6WlNBek9uUm9hWE11WW1WbmFXNG9KM0poZHljcE95QnlaWFIxY200Z01UVTdYRzVpY21WaGF6dGNibU5oYzJVZ05EcGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CdmNGTjBZWFJsS0NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0x5OGdVMmh2ZFd4a0lHSmxJSFZ6YVc1bklHQjBhR2x6TG5SdmNGTjBZWFJsS0NsZ0lHSmxiRzkzTENCaWRYUWdhWFFnWTNWeWNtVnVkR3g1WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk4Z2NtVjBkWEp1Y3lCMGFHVWdjMlZqYjI1a0lIUnZjQ0JwYm5OMFpXRmtJRzltSUhSb1pTQm1hWEp6ZENCMGIzQXVJRTl3Wlc1bFpDQmhibHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQzh2SUdsemMzVmxJR0ZpYjNWMElHbDBJR0YwSUdoMGRIQnpPaTh2WjJsMGFIVmlMbU52YlM5NllXRmphQzlxYVhOdmJpOXBjM04xWlhNdk1qa3hYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdhV1lnS0hSb2FYTXVZMjl1WkdsMGFXOXVVM1JoWTJ0YmRHaHBjeTVqYjI1a2FYUnBiMjVUZEdGamF5NXNaVzVuZEdndE1WMGdQVDA5SUNkeVlYY25LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnTVRVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lITjBjbWx3S0RVc0lEa3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2RGVGtSZlVrRlhYMEpNVDBOTEp6dGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmNibUp5WldGck8xeHVZMkZ6WlNBMU9pQnlaWFIxY200Z01UVTdJRnh1WW5KbFlXczdYRzVqWVhObElEWTZYRzRnSUhSb2FYTXVjRzl3VTNSaGRHVW9LVHRjYmlBZ2NtVjBkWEp1SURFME8xeHVYRzVpY21WaGF6dGNibU5oYzJVZ056cHlaWFIxY200Z05qVTdYRzVpY21WaGF6dGNibU5oYzJVZ09EcHlaWFIxY200Z05qZzdYRzVpY21WaGF6dGNibU5oYzJVZ09Ub2djbVYwZFhKdUlERTVPeUJjYm1KeVpXRnJPMXh1WTJGelpTQXhNRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxuQnZjRk4wWVhSbEtDazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1aVpXZHBiaWduY21GM0p5azdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlESXpPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdYRzVpY21WaGF6dGNibU5oYzJVZ01URTZjbVYwZFhKdUlEVTFPMXh1WW5KbFlXczdYRzVqWVhObElERXlPbkpsZEhWeWJpQTJNRHRjYm1KeVpXRnJPMXh1WTJGelpTQXhNenB5WlhSMWNtNGdNams3WEc1aWNtVmhhenRjYm1OaGMyVWdNVFE2Y21WMGRYSnVJRFEzTzF4dVluSmxZV3M3WEc1allYTmxJREUxT25Sb2FYTXVjRzl3VTNSaGRHVW9LVHNnY21WMGRYSnVJRFEwTzF4dVluSmxZV3M3WEc1allYTmxJREUyT25Sb2FYTXVjRzl3VTNSaGRHVW9LVHNnY21WMGRYSnVJRFEwTzF4dVluSmxZV3M3WEc1allYTmxJREUzT25KbGRIVnliaUF6TkR0Y2JtSnlaV0ZyTzF4dVkyRnpaU0F4T0RweVpYUjFjbTRnTXprN1hHNWljbVZoYXp0Y2JtTmhjMlVnTVRrNmNtVjBkWEp1SURVeE8xeHVZbkpsWVdzN1hHNWpZWE5sSURJd09uSmxkSFZ5YmlBME9EdGNibUp5WldGck8xeHVZMkZ6WlNBeU1UcGNiaUFnZEdocGN5NTFibkIxZENoNWVWOHVlWGwwWlhoMEtUdGNiaUFnZEdocGN5NXdiM0JUZEdGMFpTZ3BPMXh1SUNCMGFHbHpMbUpsWjJsdUtDZGpiMjBuS1R0Y2JseHVZbkpsWVdzN1hHNWpZWE5sSURJeU9seHVJQ0IwYUdsekxuQnZjRk4wWVhSbEtDazdYRzRnSUhKbGRIVnliaUF4TkR0Y2JseHVZbkpsWVdzN1hHNWpZWE5sSURJek9uSmxkSFZ5YmlBME9EdGNibUp5WldGck8xeHVZMkZ6WlNBeU5EcHlaWFIxY200Z056TTdYRzVpY21WaGF6dGNibU5oYzJVZ01qVTZjbVYwZFhKdUlEY3lPMXh1WW5KbFlXczdYRzVqWVhObElESTJPbkpsZEhWeWJpQTNNanRjYm1KeVpXRnJPMXh1WTJGelpTQXlOenB5WlhSMWNtNGdPRGM3WEc1aWNtVmhhenRjYm1OaGMyVWdNamc2THk4Z2FXZHViM0psSUhkb2FYUmxjM0JoWTJWY2JtSnlaV0ZyTzF4dVkyRnpaU0F5T1RwMGFHbHpMbkJ2Y0ZOMFlYUmxLQ2s3SUhKbGRIVnliaUExTkR0Y2JtSnlaV0ZyTzF4dVkyRnpaU0F6TURwMGFHbHpMbkJ2Y0ZOMFlYUmxLQ2s3SUhKbGRIVnliaUF6TXp0Y2JtSnlaV0ZyTzF4dVkyRnpaU0F6TVRwNWVWOHVlWGwwWlhoMElEMGdjM1J5YVhBb01Td3lLUzV5WlhCc1lXTmxLQzljWEZ4Y1hDSXZaeXduWENJbktUc2djbVYwZFhKdUlEZ3dPMXh1WW5KbFlXczdYRzVqWVhObElETXlPbmw1WHk1NWVYUmxlSFFnUFNCemRISnBjQ2d4TERJcExuSmxjR3hoWTJVb0wxeGNYRnduTDJjc1hDSW5YQ0lwT3lCeVpYUjFjbTRnT0RBN1hHNWljbVZoYXp0Y2JtTmhjMlVnTXpNNmNtVjBkWEp1SURnMU8xeHVZbkpsWVdzN1hHNWpZWE5sSURNME9uSmxkSFZ5YmlBNE1qdGNibUp5WldGck8xeHVZMkZ6WlNBek5UcHlaWFIxY200Z09ESTdYRzVpY21WaGF6dGNibU5oYzJVZ016WTZjbVYwZFhKdUlEZ3pPMXh1WW5KbFlXczdYRzVqWVhObElETTNPbkpsZEhWeWJpQTRORHRjYm1KeVpXRnJPMXh1WTJGelpTQXpPRHB5WlhSMWNtNGdPREU3WEc1aWNtVmhhenRjYm1OaGMyVWdNems2Y21WMGRYSnVJRGMxTzF4dVluSmxZV3M3WEc1allYTmxJRFF3T25KbGRIVnliaUEzTnp0Y2JtSnlaV0ZyTzF4dVkyRnpaU0EwTVRweVpYUjFjbTRnTnpJN1hHNWljbVZoYXp0Y2JtTmhjMlVnTkRJNmVYbGZMbmw1ZEdWNGRDQTlJSGw1WHk1NWVYUmxlSFF1Y21Wd2JHRmpaU2d2WEZ4Y1hDaGJYRnhjWEZ4Y1hWMHBMMmNzSnlReEp5azdJSEpsZEhWeWJpQTNNanRjYm1KeVpXRnJPMXh1WTJGelpTQTBNenB5WlhSMWNtNGdKMGxPVmtGTVNVUW5PMXh1WW5KbFlXczdYRzVqWVhObElEUTBPbkpsZEhWeWJpQTFPMXh1WW5KbFlXczdYRzU5WEc1OU8xeHViR1Y0WlhJdWNuVnNaWE1nUFNCYkwxNG9QenBiWGx4Y2VEQXdYU28vS0Q4OUtGeGNlMXhjZXlrcEtTOHNMMTRvUHpwYlhseGNlREF3WFNzcEx5d3ZYaWcvT2x0ZVhGeDRNREJkZXpJc2ZUOG9QejBvWEZ4N1hGeDdmRnhjWEZ4Y1hIdGNYSHQ4WEZ4Y1hGeGNYRnhjWEh0Y1hIdDhKQ2twS1M4c0wxNG9QenBjWEh0Y1hIdGNYSHRjWEhzb1B6MWJYbHhjTDEwcEtTOHNMMTRvUHpwY1hIdGNYSHRjWEh0Y1hIdGNYQzliWGx4Y2N5RmNJaU1sTFN4Y1hDNWNYQzg3TFQ1QVhGeGJMVnhjWG1CY1hIc3RmbDByS0Q4OVd6MTlYRnh6WEZ3dkxsMHBYRng5WEZ4OVhGeDlYRng5S1M4c0wxNG9QenBiWGx4Y2VEQXdYU3MvS0Q4OUtGeGNlMXhjZTF4Y2UxeGNleWtwS1M4c0wxNG9QenBiWEZ4elhGeFRYU28vTFMwb2Zpay9YRng5WEZ4OUtTOHNMMTRvUHpwY1hDZ3BMeXd2WGlnL09seGNLU2t2TEM5ZUtEODZYRng3WEZ4N1hGeDdYRng3S1M4c0wxNG9QenBjWEgxY1hIMWNYSDFjWEgwcEx5d3ZYaWcvT2x4Y2UxeGNleWgrS1Q4K0tTOHNMMTRvUHpwY1hIdGNYSHNvZmlrL0l6NHBMeXd2WGlnL09seGNlMXhjZXloK0tUOGpYRndxUHlrdkxDOWVLRDg2WEZ4N1hGeDdLSDRwUDF4Y0x5a3ZMQzllS0Q4NlhGeDdYRng3S0g0cFAxeGNYbHhjY3lvb2Zpay9YRng5WEZ4OUtTOHNMMTRvUHpwY1hIdGNYSHNvZmlrL1hGeHpLbVZzYzJWY1hITXFLSDRwUDF4Y2ZWeGNmU2t2TEM5ZUtEODZYRng3WEZ4N0tINHBQMXhjWGlrdkxDOWVLRDg2WEZ4N1hGeDdLSDRwUDF4Y2N5cGxiSE5sWEZ4aUtTOHNMMTRvUHpwY1hIdGNYSHNvZmlrL1hGeDdLUzhzTDE0b1B6cGNYSHRjWEhzb2Zpay9KaWt2TEM5ZUtEODZYRng3WEZ4N0tINHBQeUV0TFNrdkxDOWVLRDg2WEZ4N1hGeDdLSDRwUHlGYlhGeHpYRnhUWFNvL1hGeDlYRng5S1M4c0wxNG9QenBjWEh0Y1hIc29maWsvWEZ3cVB5a3ZMQzllS0Q4NlBTa3ZMQzllS0Q4NlhGd3VYRnd1S1M4c0wxNG9QenBjWEM0b1B6MG9XejErZlZ4Y2MxeGNMeTRwZkYwcEtTa3ZMQzllS0Q4NlcxeGNMeTVkS1M4c0wxNG9QenBjWEhNcktTOHNMMTRvUHpwY1hIMG9maWsvWEZ4OVhGeDlLUzhzTDE0b1B6b29maWsvWEZ4OVhGeDlLUzhzTDE0b1B6cGNJaWhjWEZ4Y1cxd2lYWHhiWGx3aVhTa3FYQ0lwTHl3dlhpZy9PaWNvWEZ4Y1hGc25YWHhiWGlkZEtTb25LUzhzTDE0b1B6cEFLUzhzTDE0b1B6cDBjblZsS0Q4OUtGdCtmVnhjY3lsZEtTa3BMeXd2WGlnL09tWmhiSE5sS0Q4OUtGdCtmVnhjY3lsZEtTa3BMeXd2WGlnL09uVnVaR1ZtYVc1bFpDZy9QU2hiZm4xY1hITXBYU2twS1M4c0wxNG9QenB1ZFd4c0tEODlLRnQrZlZ4Y2N5bGRLU2twTHl3dlhpZy9PaTAvV3pBdE9WMHJLRDg2WEZ3dVd6QXRPVjByS1Q4b1B6MG9XMzU5WEZ4ektWMHBLU2t2TEM5ZUtEODZZWE5jWEhNclhGeDhLUzhzTDE0b1B6cGNYSHdwTHl3dlhpZy9PaWhiWGx4Y2N5RmNJaU1sTFN4Y1hDNWNYQzg3TFQ1QVhGeGJMVnhjWG1CY1hIc3RmbDByS0Q4OUtGczlmbjFjWEhOY1hDOHVLWHhkS1NrcEtTOHNMMTRvUHpwY1hGc29YRnhjWEZ4Y1hYeGJYbHhjWFYwcEtseGNYU2t2TEM5ZUtEODZMaWt2TEM5ZUtEODZKQ2t2WFR0Y2JteGxlR1Z5TG1OdmJtUnBkR2x2Ym5NZ1BTQjdYQ0p0ZFZ3aU9udGNJbkoxYkdWelhDSTZXemNzT0N3NUxERXdMREV4TERFeUxERXpMREUwTERFMUxERTJMREUzTERFNExERTVMREl3TERJeExESXlMREl6TERJMExESTFMREkyTERJM0xESTRMREk1TERNd0xETXhMRE15TERNekxETTBMRE0xTERNMkxETTNMRE00TERNNUxEUXdMRFF4TERReUxEUXpMRFEwWFN4Y0ltbHVZMngxYzJsMlpWd2lPbVpoYkhObGZTeGNJbVZ0ZFZ3aU9udGNJbkoxYkdWelhDSTZXekpkTEZ3aWFXNWpiSFZ6YVhabFhDSTZabUZzYzJWOUxGd2lZMjl0WENJNmUxd2ljblZzWlhOY0lqcGJObDBzWENKcGJtTnNkWE5wZG1WY0lqcG1ZV3h6Wlgwc1hDSnlZWGRjSWpwN1hDSnlkV3hsYzF3aU9sc3pMRFFzTlYwc1hDSnBibU5zZFhOcGRtVmNJanBtWVd4elpYMHNYQ0pKVGtsVVNVRk1YQ0k2ZTF3aWNuVnNaWE5jSWpwYk1Dd3hMRFEwWFN4Y0ltbHVZMngxYzJsMlpWd2lPblJ5ZFdWOWZUdGNibkpsZEhWeWJpQnNaWGhsY2p0OUtTZ3BYRzV3WVhKelpYSXViR1Y0WlhJZ1BTQnNaWGhsY2p0Y2JtWjFibU4wYVc5dUlGQmhjbk5sY2lBb0tTQjdJSFJvYVhNdWVYa2dQU0I3ZlRzZ2ZWQmhjbk5sY2k1d2NtOTBiM1I1Y0dVZ1BTQndZWEp6WlhJN2NHRnljMlZ5TGxCaGNuTmxjaUE5SUZCaGNuTmxjanRjYm5KbGRIVnliaUJ1WlhjZ1VHRnljMlZ5TzF4dWZTa29LVHRsZUhCdmNuUWdaR1ZtWVhWc2RDQm9ZVzVrYkdWaVlYSnpPMXh1SWwxOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4uL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbiBhY2NlcHRLZXkobm9kZSwgbmFtZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuYWNjZXB0KG5vZGVbbmFtZV0pO1xuICAgIGlmICh0aGlzLm11dGF0aW5nKSB7XG4gICAgICAvLyBIYWNreSBzYW5pdHkgY2hlY2s6IFRoaXMgbWF5IGhhdmUgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGZvciB0eXBlIGZvciB0aGUgaGVscGVyXG4gICAgICAvLyBtZXRob2RzIGJ1dCB3aWxsIGdlbmVyYWxseSBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCBhIGxvdCBvZiBvdmVyaGVhZC5cbiAgICAgIGlmICh2YWx1ZSAmJiAhVmlzaXRvci5wcm90b3R5cGVbdmFsdWUudHlwZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1VuZXhwZWN0ZWQgbm9kZSB0eXBlIFwiJyArIHZhbHVlLnR5cGUgKyAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArIG5hbWUgKyAnIG9uICcgKyBub2RlLnR5cGUpO1xuICAgICAgfVxuICAgICAgbm9kZVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICAvLyBQZXJmb3JtcyBhbiBhY2NlcHQgb3BlcmF0aW9uIHdpdGggYWRkZWQgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZVxuICAvLyByZXF1aXJlZCBrZXlzIGFyZSBub3QgcmVtb3ZlZC5cbiAgYWNjZXB0UmVxdWlyZWQ6IGZ1bmN0aW9uIGFjY2VwdFJlcXVpcmVkKG5vZGUsIG5hbWUpIHtcbiAgICB0aGlzLmFjY2VwdEtleShub2RlLCBuYW1lKTtcblxuICAgIGlmICghbm9kZVtuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uIGFjY2VwdEFycmF5KGFycmF5KSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uIGFjY2VwdChvYmplY3QpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tvYmplY3QudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdVbmtub3duIHR5cGU6ICcgKyBvYmplY3QudHlwZSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudHMudW5zaGlmdCh0aGlzLmN1cnJlbnQpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICB2YXIgcmV0ID0gdGhpc1tvYmplY3QudHlwZV0ob2JqZWN0KTtcblxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMucGFyZW50cy5zaGlmdCgpO1xuXG4gICAgaWYgKCF0aGlzLm11dGF0aW5nIHx8IHJldCkge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2UgaWYgKHJldCAhPT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uIFByb2dyYW0ocHJvZ3JhbSkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkocHJvZ3JhbS5ib2R5KTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogdmlzaXRTdWJFeHByZXNzaW9uLFxuICBEZWNvcmF0b3I6IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBCbG9ja1N0YXRlbWVudDogdmlzaXRCbG9jayxcbiAgRGVjb3JhdG9yQmxvY2s6IHZpc2l0QmxvY2ssXG5cbiAgUGFydGlhbFN0YXRlbWVudDogdmlzaXRQYXJ0aWFsLFxuICBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIFBhcnRpYWxCbG9ja1N0YXRlbWVudChwYXJ0aWFsKSB7XG4gICAgdmlzaXRQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCk7XG5cbiAgICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAncHJvZ3JhbScpO1xuICB9LFxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbnRlbnRTdGF0ZW1lbnQoKSAvKiBjb250ZW50ICove30sXG4gIENvbW1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbW1lbnRTdGF0ZW1lbnQoKSAvKiBjb21tZW50ICove30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiBQYXRoRXhwcmVzc2lvbigpIC8qIHBhdGggKi97fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbiBTdHJpbmdMaXRlcmFsKCkgLyogc3RyaW5nICove30sXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uIE51bWJlckxpdGVyYWwoKSAvKiBudW1iZXIgKi97fSxcbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uIEJvb2xlYW5MaXRlcmFsKCkgLyogYm9vbCAqL3t9LFxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbiBVbmRlZmluZWRMaXRlcmFsKCkgLyogbGl0ZXJhbCAqL3t9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24gTnVsbExpdGVyYWwoKSAvKiBsaXRlcmFsICove30sXG5cbiAgSGFzaDogZnVuY3Rpb24gSGFzaChoYXNoKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShoYXNoLnBhaXJzKTtcbiAgfSxcbiAgSGFzaFBhaXI6IGZ1bmN0aW9uIEhhc2hQYWlyKHBhaXIpIHtcbiAgICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhaXIsICd2YWx1ZScpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB2aXNpdFN1YkV4cHJlc3Npb24obXVzdGFjaGUpIHtcbiAgdGhpcy5hY2NlcHRSZXF1aXJlZChtdXN0YWNoZSwgJ3BhdGgnKTtcbiAgdGhpcy5hY2NlcHRBcnJheShtdXN0YWNoZS5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShtdXN0YWNoZSwgJ2hhc2gnKTtcbn1cbmZ1bmN0aW9uIHZpc2l0QmxvY2soYmxvY2spIHtcbiAgdmlzaXRTdWJFeHByZXNzaW9uLmNhbGwodGhpcywgYmxvY2spO1xuXG4gIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAncHJvZ3JhbScpO1xuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ2ludmVyc2UnKTtcbn1cbmZ1bmN0aW9uIHZpc2l0UGFydGlhbChwYXJ0aWFsKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFydGlhbCwgJ25hbWUnKTtcbiAgdGhpcy5hY2NlcHRBcnJheShwYXJ0aWFsLnBhcmFtcyk7XG4gIHRoaXMuYWNjZXB0S2V5KHBhcnRpYWwsICdoYXNoJyk7XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IFZpc2l0b3I7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyTnZiWEJwYkdWeUwzWnBjMmwwYjNJdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3p0NVFrRkJjMElzWTBGQll6czdPenRCUVVWd1F5eFRRVUZUTEU5QlFVOHNSMEZCUnp0QlFVTnFRaXhOUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVXNRMEZCUXp0RFFVTnVRanM3UVVGRlJDeFBRVUZQTEVOQlFVTXNVMEZCVXl4SFFVRkhPMEZCUTJ4Q0xHRkJRVmNzUlVGQlJTeFBRVUZQTzBGQlEzQkNMRlZCUVZFc1JVRkJSU3hMUVVGTE96czdRVUZIWml4WFFVRlRMRVZCUVVVc2JVSkJRVk1zU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlR0QlFVTTVRaXhSUVVGSkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEzQkRMRkZCUVVrc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJUczdPMEZCUjJwQ0xGVkJRVWtzUzBGQlN5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVTdRVUZETTBNc1kwRkJUU3d5UWtGRFNpeDNRa0ZCZDBJc1IwRkRkRUlzUzBGQlN5eERRVUZETEVsQlFVa3NSMEZEVml4NVFrRkJlVUlzUjBGRGVrSXNTVUZCU1N4SFFVTktMRTFCUVUwc1IwRkRUaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVU5hTEVOQlFVTTdUMEZEU0R0QlFVTkVMRlZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdTMEZEY0VJN1IwRkRSanM3T3p0QlFVbEVMR2RDUVVGakxFVkJRVVVzZDBKQlFWTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSVHRCUVVOdVF5eFJRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGTTBJc1VVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0QlFVTm1MRmxCUVUwc01rSkJRV01zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGRFUTdSMEZEUmpzN096dEJRVWxFTEdGQlFWY3NSVUZCUlN4eFFrRkJVeXhMUVVGTExFVkJRVVU3UVVGRE0wSXNVMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTTFReXhWUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenM3UVVGRmVrSXNWVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJUdEJRVU5pTEdGQlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBGQlEyNUNMRk5CUVVNc1JVRkJSU3hEUVVGRE8wRkJRMG9zVTBGQlF5eEZRVUZGTEVOQlFVTTdUMEZEVER0TFFVTkdPMGRCUTBZN08wRkJSVVFzVVVGQlRTeEZRVUZGTEdkQ1FVRlRMRTFCUVUwc1JVRkJSVHRCUVVOMlFpeFJRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTFnc1lVRkJUenRMUVVOU096czdRVUZIUkN4UlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0QlFVTjBRaXhaUVVGTkxESkNRVUZqTEdkQ1FVRm5RaXhIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1MwRkROMFE3TzBGQlJVUXNVVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8wRkJRMmhDTEZWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0TFFVTndRenRCUVVORUxGRkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPenRCUVVWMFFpeFJRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWd1F5eFJRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdPMEZCUlhCRExGRkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SlFVRkpMRWRCUVVjc1JVRkJSVHRCUVVONlFpeGhRVUZQTEVkQlFVY3NRMEZCUXp0TFFVTmFMRTFCUVUwc1NVRkJTU3hIUVVGSExFdEJRVXNzUzBGQlN5eEZRVUZGTzBGQlEzaENMR0ZCUVU4c1RVRkJUU3hEUVVGRE8wdEJRMlk3UjBGRFJqczdRVUZGUkN4VFFVRlBMRVZCUVVVc2FVSkJRVk1zVDBGQlR5eEZRVUZGTzBGQlEzcENMRkZCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGRCUTJoRE96dEJRVVZFTEcxQ1FVRnBRaXhGUVVGRkxHdENRVUZyUWp0QlFVTnlReXhYUVVGVExFVkJRVVVzYTBKQlFXdENPenRCUVVVM1FpeG5Ra0ZCWXl4RlFVRkZMRlZCUVZVN1FVRkRNVUlzWjBKQlFXTXNSVUZCUlN4VlFVRlZPenRCUVVVeFFpeHJRa0ZCWjBJc1JVRkJSU3haUVVGWk8wRkJRemxDTEhWQ1FVRnhRaXhGUVVGRkxDdENRVUZUTEU5QlFVOHNSVUZCUlR0QlFVTjJReXhuUWtGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJXcERMRkZCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMGRCUTNCRE96dEJRVVZFTEd0Q1FVRm5RaXhGUVVGRkxIbERRVUYzUWl4RlFVRkZPMEZCUXpWRExHdENRVUZuUWl4RlFVRkZMSGxEUVVGM1FpeEZRVUZGT3p0QlFVVTFReXhsUVVGaExFVkJRVVVzYTBKQlFXdENPenRCUVVWcVF5eG5Ra0ZCWXl4RlFVRkZMRzlEUVVGeFFpeEZRVUZGT3p0QlFVVjJReXhsUVVGaExFVkJRVVVzY1VOQlFYVkNMRVZCUVVVN1FVRkRlRU1zWlVGQllTeEZRVUZGTEhGRFFVRjFRaXhGUVVGRk8wRkJRM2hETEdkQ1FVRmpMRVZCUVVVc2IwTkJRWEZDTEVWQlFVVTdRVUZEZGtNc2EwSkJRV2RDTEVWQlFVVXNlVU5CUVhkQ0xFVkJRVVU3UVVGRE5VTXNZVUZCVnl4RlFVRkZMRzlEUVVGM1FpeEZRVUZGT3p0QlFVVjJReXhOUVVGSkxFVkJRVVVzWTBGQlV5eEpRVUZKTEVWQlFVVTdRVUZEYmtJc1VVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1IwRkRPVUk3UVVGRFJDeFZRVUZSTEVWQlFVVXNhMEpCUVZNc1NVRkJTU3hGUVVGRk8wRkJRM1pDTEZGQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBkQlEzQkRPME5CUTBZc1EwRkJRenM3UVVGRlJpeFRRVUZUTEd0Q1FVRnJRaXhEUVVGRExGRkJRVkVzUlVGQlJUdEJRVU53UXl4TlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTjBReXhOUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRCUVVOc1F5eE5RVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dERRVU5zUXp0QlFVTkVMRk5CUVZNc1ZVRkJWU3hEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU42UWl4dlFrRkJhMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZ5UXl4TlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhOUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenREUVVOc1F6dEJRVU5FTEZOQlFWTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVNM1FpeE5RVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEJRVU55UXl4TlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0QlFVTnFReXhOUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenREUVVOcVF6czdjVUpCUldNc1QwRkJUeUlzSW1acGJHVWlPaUoyYVhOcGRHOXlMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUVWNFkyVndkR2x2YmlCbWNtOXRJQ2N1TGk5bGVHTmxjSFJwYjI0bk8xeHVYRzVtZFc1amRHbHZiaUJXYVhOcGRHOXlLQ2tnZTF4dUlDQjBhR2x6TG5CaGNtVnVkSE1nUFNCYlhUdGNibjFjYmx4dVZtbHphWFJ2Y2k1d2NtOTBiM1I1Y0dVZ1BTQjdYRzRnSUdOdmJuTjBjblZqZEc5eU9pQldhWE5wZEc5eUxGeHVJQ0J0ZFhSaGRHbHVaem9nWm1Gc2MyVXNYRzVjYmlBZ0x5OGdWbWx6YVhSeklHRWdaMmwyWlc0Z2RtRnNkV1V1SUVsbUlHMTFkR0YwYVc1bkxDQjNhV3hzSUhKbGNHeGhZMlVnZEdobElIWmhiSFZsSUdsbUlHNWxZMlZ6YzJGeWVTNWNiaUFnWVdOalpYQjBTMlY1T2lCbWRXNWpkR2x2YmlodWIyUmxMQ0J1WVcxbEtTQjdYRzRnSUNBZ2JHVjBJSFpoYkhWbElEMGdkR2hwY3k1aFkyTmxjSFFvYm05a1pWdHVZVzFsWFNrN1hHNGdJQ0FnYVdZZ0tIUm9hWE11YlhWMFlYUnBibWNwSUh0Y2JpQWdJQ0FnSUM4dklFaGhZMnQ1SUhOaGJtbDBlU0JqYUdWamF6b2dWR2hwY3lCdFlYa2dhR0YyWlNCaElHWmxkeUJtWVd4elpTQndiM05wZEdsMlpYTWdabTl5SUhSNWNHVWdabTl5SUhSb1pTQm9aV3h3WlhKY2JpQWdJQ0FnSUM4dklHMWxkR2h2WkhNZ1luVjBJSGRwYkd3Z1oyVnVaWEpoYkd4NUlHUnZJSFJvWlNCeWFXZG9kQ0IwYUdsdVp5QjNhWFJvYjNWMElHRWdiRzkwSUc5bUlHOTJaWEpvWldGa0xseHVJQ0FnSUNBZ2FXWWdLSFpoYkhWbElDWW1JQ0ZXYVhOcGRHOXlMbkJ5YjNSdmRIbHdaVnQyWVd4MVpTNTBlWEJsWFNrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLRnh1SUNBZ0lDQWdJQ0FnSUNkVmJtVjRjR1ZqZEdWa0lHNXZaR1VnZEhsd1pTQmNJaWNnSzF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVdWRIbHdaU0FyWEc0Z0lDQWdJQ0FnSUNBZ0lDQW5YQ0lnWm05MWJtUWdkMmhsYmlCaFkyTmxjSFJwYm1jZ0p5QXJYRzRnSUNBZ0lDQWdJQ0FnSUNCdVlXMWxJQ3RjYmlBZ0lDQWdJQ0FnSUNBZ0lDY2diMjRnSnlBclhHNGdJQ0FnSUNBZ0lDQWdJQ0J1YjJSbExuUjVjR1ZjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUc1dlpHVmJibUZ0WlYwZ1BTQjJZV3gxWlR0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5OGdVR1Z5Wm05eWJYTWdZVzRnWVdOalpYQjBJRzl3WlhKaGRHbHZiaUIzYVhSb0lHRmtaR1ZrSUhOaGJtbDBlU0JqYUdWamF5QjBieUJsYm5OMWNtVmNiaUFnTHk4Z2NtVnhkV2x5WldRZ2EyVjVjeUJoY21VZ2JtOTBJSEpsYlc5MlpXUXVYRzRnSUdGalkyVndkRkpsY1hWcGNtVmtPaUJtZFc1amRHbHZiaWh1YjJSbExDQnVZVzFsS1NCN1hHNGdJQ0FnZEdocGN5NWhZMk5sY0hSTFpYa29ibTlrWlN3Z2JtRnRaU2s3WEc1Y2JpQWdJQ0JwWmlBb0lXNXZaR1ZiYm1GdFpWMHBJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGZUdObGNIUnBiMjRvYm05a1pTNTBlWEJsSUNzZ0p5QnlaWEYxYVhKbGN5QW5JQ3NnYm1GdFpTazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzh2SUZSeVlYWmxjbk5sY3lCaElHZHBkbVZ1SUdGeWNtRjVMaUJKWmlCdGRYUmhkR2x1Wnl3Z1pXMXdkSGtnY21WemNHNXpaWE1nZDJsc2JDQmlaU0J5WlcxdmRtVmtYRzRnSUM4dklHWnZjaUJqYUdsc1pDQmxiR1Z0Wlc1MGN5NWNiaUFnWVdOalpYQjBRWEp5WVhrNklHWjFibU4wYVc5dUtHRnljbUY1S1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCaGNuSmhlUzVzWlc1bmRHZzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVZV05qWlhCMFMyVjVLR0Z5Y21GNUxDQnBLVHRjYmx4dUlDQWdJQ0FnYVdZZ0tDRmhjbkpoZVZ0cFhTa2dlMXh1SUNBZ0lDQWdJQ0JoY25KaGVTNXpjR3hwWTJVb2FTd2dNU2s3WEc0Z0lDQWdJQ0FnSUdrdExUdGNiaUFnSUNBZ0lDQWdiQzB0TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNCaFkyTmxjSFE2SUdaMWJtTjBhVzl1S0c5aWFtVmpkQ2tnZTF4dUlDQWdJR2xtSUNnaGIySnFaV04wS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeW9nYVhOMFlXNWlkV3dnYVdkdWIzSmxJRzVsZUhRNklGTmhibWwwZVNCamIyUmxJQ292WEc0Z0lDQWdhV1lnS0NGMGFHbHpXMjlpYW1WamRDNTBlWEJsWFNrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpZ25WVzVyYm05M2JpQjBlWEJsT2lBbklDc2diMkpxWldOMExuUjVjR1VzSUc5aWFtVmpkQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVZM1Z5Y21WdWRDa2dlMXh1SUNBZ0lDQWdkR2hwY3k1d1lYSmxiblJ6TG5WdWMyaHBablFvZEdocGN5NWpkWEp5Wlc1MEtUdGNiaUFnSUNCOVhHNGdJQ0FnZEdocGN5NWpkWEp5Wlc1MElEMGdiMkpxWldOME8xeHVYRzRnSUNBZ2JHVjBJSEpsZENBOUlIUm9hWE5iYjJKcVpXTjBMblI1Y0dWZEtHOWlhbVZqZENrN1hHNWNiaUFnSUNCMGFHbHpMbU4xY25KbGJuUWdQU0IwYUdsekxuQmhjbVZ1ZEhNdWMyaHBablFvS1R0Y2JseHVJQ0FnSUdsbUlDZ2hkR2hwY3k1dGRYUmhkR2x1WnlCOGZDQnlaWFFwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoeVpYUWdJVDA5SUdaaGJITmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiMkpxWldOME8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQlFjbTluY21GdE9pQm1kVzVqZEdsdmJpaHdjbTluY21GdEtTQjdYRzRnSUNBZ2RHaHBjeTVoWTJObGNIUkJjbkpoZVNod2NtOW5jbUZ0TG1KdlpIa3BPMXh1SUNCOUxGeHVYRzRnSUUxMWMzUmhZMmhsVTNSaGRHVnRaVzUwT2lCMmFYTnBkRk4xWWtWNGNISmxjM05wYjI0c1hHNGdJRVJsWTI5eVlYUnZjam9nZG1semFYUlRkV0pGZUhCeVpYTnphVzl1TEZ4dVhHNGdJRUpzYjJOclUzUmhkR1Z0Wlc1ME9pQjJhWE5wZEVKc2IyTnJMRnh1SUNCRVpXTnZjbUYwYjNKQ2JHOWphem9nZG1semFYUkNiRzlqYXl4Y2JseHVJQ0JRWVhKMGFXRnNVM1JoZEdWdFpXNTBPaUIyYVhOcGRGQmhjblJwWVd3c1hHNGdJRkJoY25ScFlXeENiRzlqYTFOMFlYUmxiV1Z1ZERvZ1puVnVZM1JwYjI0b2NHRnlkR2xoYkNrZ2UxeHVJQ0FnSUhacGMybDBVR0Z5ZEdsaGJDNWpZV3hzS0hSb2FYTXNJSEJoY25ScFlXd3BPMXh1WEc0Z0lDQWdkR2hwY3k1aFkyTmxjSFJMWlhrb2NHRnlkR2xoYkN3Z0ozQnliMmR5WVcwbktUdGNiaUFnZlN4Y2JseHVJQ0JEYjI1MFpXNTBVM1JoZEdWdFpXNTBPaUJtZFc1amRHbHZiaWd2S2lCamIyNTBaVzUwSUNvdktTQjdmU3hjYmlBZ1EyOXRiV1Z1ZEZOMFlYUmxiV1Z1ZERvZ1puVnVZM1JwYjI0b0x5b2dZMjl0YldWdWRDQXFMeWtnZTMwc1hHNWNiaUFnVTNWaVJYaHdjbVZ6YzJsdmJqb2dkbWx6YVhSVGRXSkZlSEJ5WlhOemFXOXVMRnh1WEc0Z0lGQmhkR2hGZUhCeVpYTnphVzl1T2lCbWRXNWpkR2x2YmlndktpQndZWFJvSUNvdktTQjdmU3hjYmx4dUlDQlRkSEpwYm1kTWFYUmxjbUZzT2lCbWRXNWpkR2x2YmlndktpQnpkSEpwYm1jZ0tpOHBJSHQ5TEZ4dUlDQk9kVzFpWlhKTWFYUmxjbUZzT2lCbWRXNWpkR2x2YmlndktpQnVkVzFpWlhJZ0tpOHBJSHQ5TEZ4dUlDQkNiMjlzWldGdVRHbDBaWEpoYkRvZ1puVnVZM1JwYjI0b0x5b2dZbTl2YkNBcUx5a2dlMzBzWEc0Z0lGVnVaR1ZtYVc1bFpFeHBkR1Z5WVd3NklHWjFibU4wYVc5dUtDOHFJR3hwZEdWeVlXd2dLaThwSUh0OUxGeHVJQ0JPZFd4c1RHbDBaWEpoYkRvZ1puVnVZM1JwYjI0b0x5b2diR2wwWlhKaGJDQXFMeWtnZTMwc1hHNWNiaUFnU0dGemFEb2dablZ1WTNScGIyNG9hR0Z6YUNrZ2UxeHVJQ0FnSUhSb2FYTXVZV05qWlhCMFFYSnlZWGtvYUdGemFDNXdZV2x5Y3lrN1hHNGdJSDBzWEc0Z0lFaGhjMmhRWVdseU9pQm1kVzVqZEdsdmJpaHdZV2x5S1NCN1hHNGdJQ0FnZEdocGN5NWhZMk5sY0hSU1pYRjFhWEpsWkNod1lXbHlMQ0FuZG1Gc2RXVW5LVHRjYmlBZ2ZWeHVmVHRjYmx4dVpuVnVZM1JwYjI0Z2RtbHphWFJUZFdKRmVIQnlaWE56YVc5dUtHMTFjM1JoWTJobEtTQjdYRzRnSUhSb2FYTXVZV05qWlhCMFVtVnhkV2x5WldRb2JYVnpkR0ZqYUdVc0lDZHdZWFJvSnlrN1hHNGdJSFJvYVhNdVlXTmpaWEIwUVhKeVlYa29iWFZ6ZEdGamFHVXVjR0Z5WVcxektUdGNiaUFnZEdocGN5NWhZMk5sY0hSTFpYa29iWFZ6ZEdGamFHVXNJQ2RvWVhOb0p5azdYRzU5WEc1bWRXNWpkR2x2YmlCMmFYTnBkRUpzYjJOcktHSnNiMk5yS1NCN1hHNGdJSFpwYzJsMFUzVmlSWGh3Y21WemMybHZiaTVqWVd4c0tIUm9hWE1zSUdKc2IyTnJLVHRjYmx4dUlDQjBhR2x6TG1GalkyVndkRXRsZVNoaWJHOWpheXdnSjNCeWIyZHlZVzBuS1R0Y2JpQWdkR2hwY3k1aFkyTmxjSFJMWlhrb1lteHZZMnNzSUNkcGJuWmxjbk5sSnlrN1hHNTlYRzVtZFc1amRHbHZiaUIyYVhOcGRGQmhjblJwWVd3b2NHRnlkR2xoYkNrZ2UxeHVJQ0IwYUdsekxtRmpZMlZ3ZEZKbGNYVnBjbVZrS0hCaGNuUnBZV3dzSUNkdVlXMWxKeWs3WEc0Z0lIUm9hWE11WVdOalpYQjBRWEp5WVhrb2NHRnlkR2xoYkM1d1lYSmhiWE1wTzF4dUlDQjBhR2x6TG1GalkyVndkRXRsZVNod1lYSjBhV0ZzTENBbmFHRnphQ2NwTzF4dWZWeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQldhWE5wZEc5eU8xeHVJbDE5XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfdmlzaXRvciA9IHJlcXVpcmUoJy4vdmlzaXRvcicpO1xuXG52YXIgX3Zpc2l0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmlzaXRvcik7XG5cbmZ1bmN0aW9uIFdoaXRlc3BhY2VDb250cm9sKCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG59XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUgPSBuZXcgX3Zpc2l0b3IyWydkZWZhdWx0J10oKTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlByb2dyYW0gPSBmdW5jdGlvbiAocHJvZ3JhbSkge1xuICB2YXIgZG9TdGFuZGFsb25lID0gIXRoaXMub3B0aW9ucy5pZ25vcmVTdGFuZGFsb25lO1xuXG4gIHZhciBpc1Jvb3QgPSAhdGhpcy5pc1Jvb3RTZWVuO1xuICB0aGlzLmlzUm9vdFNlZW4gPSB0cnVlO1xuXG4gIHZhciBib2R5ID0gcHJvZ3JhbS5ib2R5O1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBib2R5W2ldLFxuICAgICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgICBfaXNOZXh0V2hpdGVzcGFjZSA9IGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSxcbiAgICAgICAgb3BlblN0YW5kYWxvbmUgPSBzdHJpcC5vcGVuU3RhbmRhbG9uZSAmJiBfaXNQcmV2V2hpdGVzcGFjZSxcbiAgICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgICBpbmxpbmVTdGFuZGFsb25lID0gc3RyaXAuaW5saW5lU3RhbmRhbG9uZSAmJiBfaXNQcmV2V2hpdGVzcGFjZSAmJiBfaXNOZXh0V2hpdGVzcGFjZTtcblxuICAgIGlmIChzdHJpcC5jbG9zZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGksIHRydWUpO1xuICAgIH1cbiAgICBpZiAoc3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQoYm9keSwgaSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBpbmxpbmVTdGFuZGFsb25lKSB7XG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIGlmIChvbWl0TGVmdChib2R5LCBpKSkge1xuICAgICAgICAvLyBJZiB3ZSBhcmUgb24gYSBzdGFuZGFsb25lIG5vZGUsIHNhdmUgdGhlIGluZGVudCBpbmZvIGZvciBwYXJ0aWFsc1xuICAgICAgICBpZiAoY3VycmVudC50eXBlID09PSAnUGFydGlhbFN0YXRlbWVudCcpIHtcbiAgICAgICAgICAvLyBQdWxsIG91dCB0aGUgd2hpdGVzcGFjZSBmcm9tIHRoZSBmaW5hbCBsaW5lXG4gICAgICAgICAgY3VycmVudC5pbmRlbnQgPSAvKFsgXFx0XSskKS8uZXhlYyhib2R5W2kgLSAxXS5vcmlnaW5hbClbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBvcGVuU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KChjdXJyZW50LnByb2dyYW0gfHwgY3VycmVudC5pbnZlcnNlKS5ib2R5KTtcblxuICAgICAgLy8gU3RyaXAgb3V0IHRoZSBwcmV2aW91cyBjb250ZW50IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHlcbiAgICAgIG9taXRMZWZ0KGJvZHksIGkpO1xuICAgIH1cbiAgICBpZiAoZG9TdGFuZGFsb25lICYmIGNsb3NlU3RhbmRhbG9uZSkge1xuICAgICAgLy8gQWx3YXlzIHN0cmlwIHRoZSBuZXh0IG5vZGVcbiAgICAgIG9taXRSaWdodChib2R5LCBpKTtcblxuICAgICAgb21pdExlZnQoKGN1cnJlbnQuaW52ZXJzZSB8fCBjdXJyZW50LnByb2dyYW0pLmJvZHkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9ncmFtO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkJsb2NrU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvckJsb2NrID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uIChibG9jaykge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICB2YXIgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICAgIGludmVyc2UgPSBibG9jay5wcm9ncmFtICYmIGJsb2NrLmludmVyc2UsXG4gICAgICBmaXJzdEludmVyc2UgPSBpbnZlcnNlLFxuICAgICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgdmFyIGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVTdGFuZGFsb25lICYmIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJiBpc05leHRXaGl0ZXNwYWNlKGZpcnN0SW52ZXJzZS5ib2R5KSkge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5KTtcbiAgICAgIG9taXRSaWdodChmaXJzdEludmVyc2UuYm9keSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGJsb2NrLmNsb3NlU3RyaXAub3Blbikge1xuICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gc3RyaXA7XG59O1xuXG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuRGVjb3JhdG9yID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLk11c3RhY2hlU3RhdGVtZW50ID0gZnVuY3Rpb24gKG11c3RhY2hlKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB2YXIgc3RyaXAgPSBub2RlLnN0cmlwIHx8IHt9O1xuICByZXR1cm4ge1xuICAgIGlubGluZVN0YW5kYWxvbmU6IHRydWUsXG4gICAgb3Blbjogc3RyaXAub3BlbixcbiAgICBjbG9zZTogc3RyaXAuY2xvc2VcbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGlzUHJldldoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSB7XG4gIGlmIChpID09PSB1bmRlZmluZWQpIHtcbiAgICBpID0gYm9keS5sZW5ndGg7XG4gIH1cblxuICAvLyBOb2RlcyB0aGF0IGVuZCB3aXRoIG5ld2xpbmVzIGFyZSBjb25zaWRlcmVkIHdoaXRlc3BhY2UgKGJ1dCBhcmUgc3BlY2lhbFxuICAvLyBjYXNlZCBmb3Igc3RyaXAgb3BlcmF0aW9ucylcbiAgdmFyIHByZXYgPSBib2R5W2kgLSAxXSxcbiAgICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChwcmV2Lm9yaWdpbmFsKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNOZXh0V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAtMTtcbiAgfVxuXG4gIHZhciBuZXh0ID0gYm9keVtpICsgMV0sXG4gICAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QobmV4dC5vcmlnaW5hbCk7XG4gIH1cbn1cblxuLy8gTWFya3MgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiB7e2Zvb319JyAnIHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSBtYXJrZWQgYXMgc3VjaC5cbi8vXG4vLyBJZiBtdWxpdHBsZSBpcyB0cnV0aHkgdGhlbiBhbGwgd2hpdGVzcGFjZSB3aWxsIGJlIHN0cmlwcGVkIG91dCB1bnRpbCBub24td2hpdGVzcGFjZVxuLy8gY29udGVudCBpcyBtZXQuXG5mdW5jdGlvbiBvbWl0UmlnaHQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgdmFyIGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IDAgOiBpICsgMV07XG4gIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3RhdGVtZW50JyB8fCAhbXVsdGlwbGUgJiYgY3VycmVudC5yaWdodFN0cmlwcGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sICcnKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgdmFyIGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlwZSAhPT0gJ0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICFtdWx0aXBsZSAmJiBjdXJyZW50LmxlZnRTdHJpcHBlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdlIG9taXQgdGhlIGxhc3Qgbm9kZSBpZiBpdCdzIHdoaXRlc3BhY2Ugb25seSBhbmQgbm90IHByZWNlZGVkIGJ5IGEgbm9uLWNvbnRlbnQgbm9kZS5cbiAgdmFyIG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/IC9cXHMrJC8gOiAvWyBcXHRdKyQvLCAnJyk7XG4gIGN1cnJlbnQubGVmdFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG4gIHJldHVybiBjdXJyZW50LmxlZnRTdHJpcHBlZDtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gV2hpdGVzcGFjZUNvbnRyb2w7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyTnZiWEJwYkdWeUwzZG9hWFJsYzNCaFkyVXRZMjl1ZEhKdmJDNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN08zVkNRVUZ2UWl4WFFVRlhPenM3TzBGQlJTOUNMRk5CUVZNc2FVSkJRV2xDTEVkQlFXVTdUVUZCWkN4UFFVRlBMSGxFUVVGSExFVkJRVVU3TzBGQlEzSkRMRTFCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETzBOQlEzaENPMEZCUTBRc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4SFFVRkhMREJDUVVGaExFTkJRVU03TzBGQlJUVkRMR2xDUVVGcFFpeERRVUZETEZOQlFWTXNRMEZCUXl4UFFVRlBMRWRCUVVjc1ZVRkJVeXhQUVVGUExFVkJRVVU3UVVGRGRFUXNUVUZCVFN4WlFVRlpMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEdkQ1FVRm5RaXhEUVVGRE96dEJRVVZ3UkN4TlFVRkpMRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTTdRVUZET1VJc1RVRkJTU3hEUVVGRExGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdPMEZCUlhaQ0xFMUJRVWtzU1VGQlNTeEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRlRUlzVDBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU16UXl4UlFVRkpMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEyNUNMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVVdlFpeFJRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTFZc1pVRkJVenRMUVVOV096dEJRVVZFTEZGQlFVa3NhVUpCUVdsQ0xFZEJRVWNzWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVOQlFVTTdVVUZEZGtRc2FVSkJRV2xDTEVkQlFVY3NaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNSVUZCUlN4TlFVRk5MRU5CUVVNN1VVRkRja1FzWTBGQll5eEhRVUZITEV0QlFVc3NRMEZCUXl4alFVRmpMRWxCUVVrc2FVSkJRV2xDTzFGQlF6RkVMR1ZCUVdVc1IwRkJSeXhMUVVGTExFTkJRVU1zWlVGQlpTeEpRVUZKTEdsQ1FVRnBRanRSUVVNMVJDeG5Ra0ZCWjBJc1IwRkRaQ3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRWxCUVVrc2FVSkJRV2xDTEVsQlFVa3NhVUpCUVdsQ0xFTkJRVU03TzBGQlJYSkZMRkZCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5tTEdWQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzB0QlF6RkNPMEZCUTBRc1VVRkJTU3hMUVVGTExFTkJRVU1zU1VGQlNTeEZRVUZGTzBGQlEyUXNZMEZCVVN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTMEZEZWtJN08wRkJSVVFzVVVGQlNTeFpRVUZaTEVsQlFVa3NaMEpCUVdkQ0xFVkJRVVU3UVVGRGNFTXNaVUZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6czdRVUZGYmtJc1ZVRkJTU3hSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZPenRCUVVWeVFpeFpRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRXRCUVVzc2EwSkJRV3RDTEVWQlFVVTdPMEZCUlhaRExHbENRVUZQTEVOQlFVTXNUVUZCVFN4SFFVRkhMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTTFSRHRQUVVOR08wdEJRMFk3UVVGRFJDeFJRVUZKTEZsQlFWa3NTVUZCU1N4alFVRmpMRVZCUVVVN1FVRkRiRU1zWlVGQlV5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1NVRkJTU3hQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZCTEVOQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN096dEJRVWR5UkN4alFVRlJMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzB0QlEyNUNPMEZCUTBRc1VVRkJTU3haUVVGWkxFbEJRVWtzWlVGQlpTeEZRVUZGT3p0QlFVVnVReXhsUVVGVExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPenRCUVVWdVFpeGpRVUZSTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhKUVVGSkxFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVRXNRMEZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVOeVJEdEhRVU5HT3p0QlFVVkVMRk5CUVU4c1QwRkJUeXhEUVVGRE8wTkJRMmhDTEVOQlFVTTdPMEZCUlVZc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4RFFVRkRMR05CUVdNc1IwRkJSeXhwUWtGQmFVSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1kwRkJZeXhIUVVGSExHbENRVUZwUWl4RFFVRkRMRk5CUVZNc1EwRkJReXh4UWtGQmNVSXNSMEZCUnl4VlFVTTFTU3hMUVVGTExFVkJRMHc3UVVGRFFTeE5RVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU16UWl4TlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN08wRkJSek5DTEUxQlFVa3NUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVODdUVUZETVVNc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4N1RVRkRlRU1zV1VGQldTeEhRVUZITEU5QlFVODdUVUZEZEVJc1YwRkJWeXhIUVVGSExFOUJRVThzUTBGQlF6czdRVUZGZUVJc1RVRkJTU3hQUVVGUExFbEJRVWtzVDBGQlR5eERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTTVRaXhuUWtGQldTeEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZET3pzN1FVRkhka01zVjBGQlR5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUXpGQ0xHbENRVUZYTEVkQlFVY3NWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU03UzBGRGNrVTdSMEZEUmpzN1FVRkZSQ3hOUVVGSkxFdEJRVXNzUjBGQlJ6dEJRVU5XTEZGQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWs3UVVGRE1VSXNVMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlN6czdPenRCUVVrM1FpeHJRa0ZCWXl4RlFVRkZMR2RDUVVGblFpeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNN1FVRkRPVU1zYlVKQlFXVXNSVUZCUlN4blFrRkJaMElzUTBGQlF5eERRVUZETEZsQlFWa3NTVUZCU1N4UFFVRlBMRU5CUVVFc1EwRkJSU3hKUVVGSkxFTkJRVU03UjBGRGJFVXNRMEZCUXpzN1FVRkZSaXhOUVVGSkxFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTNwQ0xHRkJRVk1zUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEhRVU55UXpzN1FVRkZSQ3hOUVVGSkxFOUJRVThzUlVGQlJUdEJRVU5ZTEZGQlFVa3NXVUZCV1N4SFFVRkhMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU03TzBGQlJYUkRMRkZCUVVrc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU55UWl4alFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRjRU03TzBGQlJVUXNVVUZCU1N4WlFVRlpMRU5CUVVNc1MwRkJTeXhGUVVGRk8wRkJRM1JDTEdWQlFWTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTXhRenRCUVVORUxGRkJRVWtzUzBGQlN5eERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRVZCUVVVN1FVRkRla0lzWTBGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzaERPenM3UVVGSFJDeFJRVU5GTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNTVUZET1VJc1owSkJRV2RDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVNNVFpeG5Ra0ZCWjBJc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlEyNURPMEZCUTBFc1kwRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTjJRaXhsUVVGVExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUXpsQ08wZEJRMFlzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hGUVVGRk8wRkJRMmhETEZsQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0SFFVTndRenM3UVVGRlJDeFRRVUZQTEV0QlFVc3NRMEZCUXp0RFFVTmtMRU5CUVVNN08wRkJSVVlzYVVKQlFXbENMRU5CUVVNc1UwRkJVeXhEUVVGRExGTkJRVk1zUjBGQlJ5eHBRa0ZCYVVJc1EwRkJReXhUUVVGVExFTkJRVU1zYVVKQlFXbENMRWRCUVVjc1ZVRkRkRVlzVVVGQlVTeEZRVU5TTzBGQlEwRXNVMEZCVHl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRE8wTkJRM1pDTEVOQlFVTTdPMEZCUlVZc2FVSkJRV2xDTEVOQlFVTXNVMEZCVXl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEdsQ1FVRnBRaXhEUVVGRExGTkJRVk1zUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhWUVVNMVJpeEpRVUZKTEVWQlEwbzdPMEZCUlVFc1RVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4RlFVRkZMRU5CUVVNN1FVRkROMElzVTBGQlR6dEJRVU5NTEc5Q1FVRm5RaXhGUVVGRkxFbEJRVWs3UVVGRGRFSXNVVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSk8wRkJRMmhDTEZOQlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1MwRkJTenRIUVVOdVFpeERRVUZETzBOQlEwZ3NRMEZCUXpzN1FVRkZSaXhUUVVGVExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTzBGQlEzcERMRTFCUVVrc1EwRkJReXhMUVVGTExGTkJRVk1zUlVGQlJUdEJRVU51UWl4TFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEhRVU5xUWpzN096dEJRVWxFTEUxQlFVa3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzAxQlEzQkNMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNoQ0xFMUJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVTdRVUZEVkN4WFFVRlBMRTFCUVUwc1EwRkJRenRIUVVObU96dEJRVVZFTEUxQlFVa3NTVUZCU1N4RFFVRkRMRWxCUVVrc1MwRkJTeXhyUWtGQmEwSXNSVUZCUlR0QlFVTndReXhYUVVGUExFTkJRVU1zVDBGQlR5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRmxCUVZrc1IwRkJSeXhuUWtGQlowSXNRMEZCUVN4RFFVRkZMRWxCUVVrc1EwRkRhRVVzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZEWkN4RFFVRkRPMGRCUTBnN1EwRkRSanRCUVVORUxGTkJRVk1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVTdRVUZEZWtNc1RVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV5eEZRVUZGTzBGQlEyNUNMRXRCUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEhRVU5TT3p0QlFVVkVMRTFCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMDFCUTNCQ0xFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM2hDTEUxQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVN1FVRkRWQ3hYUVVGUExFMUJRVTBzUTBGQlF6dEhRVU5tT3p0QlFVVkVMRTFCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWtzUzBGQlN5eHJRa0ZCYTBJc1JVRkJSVHRCUVVOd1F5eFhRVUZQTEVOQlFVTXNUMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExGbEJRVmtzUjBGQlJ5eG5Ra0ZCWjBJc1EwRkJRU3hEUVVGRkxFbEJRVWtzUTBGRGFFVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkRaQ3hEUVVGRE8wZEJRMGc3UTBGRFJqczdPenM3T3pzN08wRkJVMFFzVTBGQlV5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hSUVVGUkxFVkJRVVU3UVVGRGNFTXNUVUZCU1N4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU14UXl4TlFVTkZMRU5CUVVNc1QwRkJUeXhKUVVOU0xFOUJRVThzUTBGQlF5eEpRVUZKTEV0QlFVc3NhMEpCUVd0Q0xFbEJRMnhETEVOQlFVTXNVVUZCVVN4SlFVRkpMRTlCUVU4c1EwRkJReXhoUVVGaExFRkJRVU1zUlVGRGNFTTdRVUZEUVN4WFFVRlBPMGRCUTFJN08wRkJSVVFzVFVGQlNTeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJRenRCUVVNM1FpeFRRVUZQTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVU51UXl4UlFVRlJMRWRCUVVjc1RVRkJUU3hIUVVGSExHVkJRV1VzUlVGRGJrTXNSVUZCUlN4RFFVTklMRU5CUVVNN1FVRkRSaXhUUVVGUExFTkJRVU1zWVVGQllTeEhRVUZITEU5QlFVOHNRMEZCUXl4TFFVRkxMRXRCUVVzc1VVRkJVU3hEUVVGRE8wTkJRM0JFT3pzN096czdPenM3UVVGVFJDeFRRVUZUTEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhGUVVGRkxGRkJRVkVzUlVGQlJUdEJRVU51UXl4TlFVRkpMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRlRVFzVFVGRFJTeERRVUZETEU5QlFVOHNTVUZEVWl4UFFVRlBMRU5CUVVNc1NVRkJTU3hMUVVGTExHdENRVUZyUWl4SlFVTnNReXhEUVVGRExGRkJRVkVzU1VGQlNTeFBRVUZQTEVOQlFVTXNXVUZCV1N4QlFVRkRMRVZCUTI1RE8wRkJRMEVzVjBGQlR6dEhRVU5TT3pzN1FVRkhSQ3hOUVVGSkxGRkJRVkVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMEZCUXpkQ0xGTkJRVThzUTBGQlF5eExRVUZMTEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVVVGQlVTeEhRVUZITEUxQlFVMHNSMEZCUnl4VFFVRlRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRGVrVXNVMEZCVHl4RFFVRkRMRmxCUVZrc1IwRkJSeXhQUVVGUExFTkJRVU1zUzBGQlN5eExRVUZMTEZGQlFWRXNRMEZCUXp0QlFVTnNSQ3hUUVVGUExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTTdRMEZETjBJN08zRkNRVVZqTEdsQ1FVRnBRaUlzSW1acGJHVWlPaUozYUdsMFpYTndZV05sTFdOdmJuUnliMnd1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1ZtbHphWFJ2Y2lCbWNtOXRJQ2N1TDNacGMybDBiM0luTzF4dVhHNW1kVzVqZEdsdmJpQlhhR2wwWlhOd1lXTmxRMjl1ZEhKdmJDaHZjSFJwYjI1eklEMGdlMzBwSUh0Y2JpQWdkR2hwY3k1dmNIUnBiMjV6SUQwZ2IzQjBhVzl1Y3p0Y2JuMWNibGRvYVhSbGMzQmhZMlZEYjI1MGNtOXNMbkJ5YjNSdmRIbHdaU0E5SUc1bGR5QldhWE5wZEc5eUtDazdYRzVjYmxkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTG5CeWIzUnZkSGx3WlM1UWNtOW5jbUZ0SUQwZ1puVnVZM1JwYjI0b2NISnZaM0poYlNrZ2UxeHVJQ0JqYjI1emRDQmtiMU4wWVc1a1lXeHZibVVnUFNBaGRHaHBjeTV2Y0hScGIyNXpMbWxuYm05eVpWTjBZVzVrWVd4dmJtVTdYRzVjYmlBZ2JHVjBJR2x6VW05dmRDQTlJQ0YwYUdsekxtbHpVbTl2ZEZObFpXNDdYRzRnSUhSb2FYTXVhWE5TYjI5MFUyVmxiaUE5SUhSeWRXVTdYRzVjYmlBZ2JHVjBJR0p2WkhrZ1BTQndjbTluY21GdExtSnZaSGs3WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc0lEMGdZbTlrZVM1c1pXNW5kR2c3SUdrZ1BDQnNPeUJwS3lzcElIdGNiaUFnSUNCc1pYUWdZM1Z5Y21WdWRDQTlJR0p2WkhsYmFWMHNYRzRnSUNBZ0lDQnpkSEpwY0NBOUlIUm9hWE11WVdOalpYQjBLR04xY25KbGJuUXBPMXh1WEc0Z0lDQWdhV1lnS0NGemRISnBjQ2tnZTF4dUlDQWdJQ0FnWTI5dWRHbHVkV1U3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUY5cGMxQnlaWFpYYUdsMFpYTndZV05sSUQwZ2FYTlFjbVYyVjJocGRHVnpjR0ZqWlNoaWIyUjVMQ0JwTENCcGMxSnZiM1FwTEZ4dUlDQWdJQ0FnWDJselRtVjRkRmRvYVhSbGMzQmhZMlVnUFNCcGMwNWxlSFJYYUdsMFpYTndZV05sS0dKdlpIa3NJR2tzSUdselVtOXZkQ2tzWEc0Z0lDQWdJQ0J2Y0dWdVUzUmhibVJoYkc5dVpTQTlJSE4wY21sd0xtOXdaVzVUZEdGdVpHRnNiMjVsSUNZbUlGOXBjMUJ5WlhaWGFHbDBaWE53WVdObExGeHVJQ0FnSUNBZ1kyeHZjMlZUZEdGdVpHRnNiMjVsSUQwZ2MzUnlhWEF1WTJ4dmMyVlRkR0Z1WkdGc2IyNWxJQ1ltSUY5cGMwNWxlSFJYYUdsMFpYTndZV05sTEZ4dUlDQWdJQ0FnYVc1c2FXNWxVM1JoYm1SaGJHOXVaU0E5WEc0Z0lDQWdJQ0FnSUhOMGNtbHdMbWx1YkdsdVpWTjBZVzVrWVd4dmJtVWdKaVlnWDJselVISmxkbGRvYVhSbGMzQmhZMlVnSmlZZ1gybHpUbVY0ZEZkb2FYUmxjM0JoWTJVN1hHNWNiaUFnSUNCcFppQW9jM1J5YVhBdVkyeHZjMlVwSUh0Y2JpQWdJQ0FnSUc5dGFYUlNhV2RvZENoaWIyUjVMQ0JwTENCMGNuVmxLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSE4wY21sd0xtOXdaVzRwSUh0Y2JpQWdJQ0FnSUc5dGFYUk1aV1owS0dKdlpIa3NJR2tzSUhSeWRXVXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hrYjFOMFlXNWtZV3h2Ym1VZ0ppWWdhVzVzYVc1bFUzUmhibVJoYkc5dVpTa2dlMXh1SUNBZ0lDQWdiMjFwZEZKcFoyaDBLR0p2Wkhrc0lHa3BPMXh1WEc0Z0lDQWdJQ0JwWmlBb2IyMXBkRXhsWm5Rb1ltOWtlU3dnYVNrcElIdGNiaUFnSUNBZ0lDQWdMeThnU1dZZ2QyVWdZWEpsSUc5dUlHRWdjM1JoYm1SaGJHOXVaU0J1YjJSbExDQnpZWFpsSUhSb1pTQnBibVJsYm5RZ2FXNW1ieUJtYjNJZ2NHRnlkR2xoYkhOY2JpQWdJQ0FnSUNBZ2FXWWdLR04xY25KbGJuUXVkSGx3WlNBOVBUMGdKMUJoY25ScFlXeFRkR0YwWlcxbGJuUW5LU0I3WEc0Z0lDQWdJQ0FnSUNBZ0x5OGdVSFZzYkNCdmRYUWdkR2hsSUhkb2FYUmxjM0JoWTJVZ1puSnZiU0IwYUdVZ1ptbHVZV3dnYkdsdVpWeHVJQ0FnSUNBZ0lDQWdJR04xY25KbGJuUXVhVzVrWlc1MElEMGdMeWhiSUZ4Y2RGMHJKQ2t2TG1WNFpXTW9ZbTlrZVZ0cElDMGdNVjB1YjNKcFoybHVZV3dwV3pGZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGtiMU4wWVc1a1lXeHZibVVnSmlZZ2IzQmxibE4wWVc1a1lXeHZibVVwSUh0Y2JpQWdJQ0FnSUc5dGFYUlNhV2RvZENnb1kzVnljbVZ1ZEM1d2NtOW5jbUZ0SUh4OElHTjFjbkpsYm5RdWFXNTJaWEp6WlNrdVltOWtlU2s3WEc1Y2JpQWdJQ0FnSUM4dklGTjBjbWx3SUc5MWRDQjBhR1VnY0hKbGRtbHZkWE1nWTI5dWRHVnVkQ0J1YjJSbElHbG1JR2wwSjNNZ2QyaHBkR1Z6Y0dGalpTQnZibXg1WEc0Z0lDQWdJQ0J2YldsMFRHVm1kQ2hpYjJSNUxDQnBLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR1J2VTNSaGJtUmhiRzl1WlNBbUppQmpiRzl6WlZOMFlXNWtZV3h2Ym1VcElIdGNiaUFnSUNBZ0lDOHZJRUZzZDJGNWN5QnpkSEpwY0NCMGFHVWdibVY0ZENCdWIyUmxYRzRnSUNBZ0lDQnZiV2wwVW1sbmFIUW9ZbTlrZVN3Z2FTazdYRzVjYmlBZ0lDQWdJRzl0YVhSTVpXWjBLQ2hqZFhKeVpXNTBMbWx1ZG1WeWMyVWdmSHdnWTNWeWNtVnVkQzV3Y205bmNtRnRLUzVpYjJSNUtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQnlaWFIxY200Z2NISnZaM0poYlR0Y2JuMDdYRzVjYmxkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTG5CeWIzUnZkSGx3WlM1Q2JHOWphMU4wWVhSbGJXVnVkQ0E5SUZkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTG5CeWIzUnZkSGx3WlM1RVpXTnZjbUYwYjNKQ2JHOWpheUE5SUZkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTG5CeWIzUnZkSGx3WlM1UVlYSjBhV0ZzUW14dlkydFRkR0YwWlcxbGJuUWdQU0JtZFc1amRHbHZiaWhjYmlBZ1lteHZZMnRjYmlrZ2UxeHVJQ0IwYUdsekxtRmpZMlZ3ZENoaWJHOWpheTV3Y205bmNtRnRLVHRjYmlBZ2RHaHBjeTVoWTJObGNIUW9ZbXh2WTJzdWFXNTJaWEp6WlNrN1hHNWNiaUFnTHk4Z1JtbHVaQ0IwYUdVZ2FXNTJaWEp6WlNCd2NtOW5jbUZ0SUhSb1lYUWdhWE1nYVc1MmIyeGxaQ0IzYVhSb0lIZG9hWFJsYzNCaFkyVWdjM1J5YVhCd2FXNW5MbHh1SUNCc1pYUWdjSEp2WjNKaGJTQTlJR0pzYjJOckxuQnliMmR5WVcwZ2ZId2dZbXh2WTJzdWFXNTJaWEp6WlN4Y2JpQWdJQ0JwYm5abGNuTmxJRDBnWW14dlkyc3VjSEp2WjNKaGJTQW1KaUJpYkc5amF5NXBiblpsY25ObExGeHVJQ0FnSUdacGNuTjBTVzUyWlhKelpTQTlJR2x1ZG1WeWMyVXNYRzRnSUNBZ2JHRnpkRWx1ZG1WeWMyVWdQU0JwYm5abGNuTmxPMXh1WEc0Z0lHbG1JQ2hwYm5abGNuTmxJQ1ltSUdsdWRtVnljMlV1WTJoaGFXNWxaQ2tnZTF4dUlDQWdJR1pwY25OMFNXNTJaWEp6WlNBOUlHbHVkbVZ5YzJVdVltOWtlVnN3WFM1d2NtOW5jbUZ0TzF4dVhHNGdJQ0FnTHk4Z1YyRnNheUIwYUdVZ2FXNTJaWEp6WlNCamFHRnBiaUIwYnlCbWFXNWtJSFJvWlNCc1lYTjBJR2x1ZG1WeWMyVWdkR2hoZENCcGN5QmhZM1IxWVd4c2VTQnBiaUIwYUdVZ1kyaGhhVzR1WEc0Z0lDQWdkMmhwYkdVZ0tHeGhjM1JKYm5abGNuTmxMbU5vWVdsdVpXUXBJSHRjYmlBZ0lDQWdJR3hoYzNSSmJuWmxjbk5sSUQwZ2JHRnpkRWx1ZG1WeWMyVXVZbTlrZVZ0c1lYTjBTVzUyWlhKelpTNWliMlI1TG14bGJtZDBhQ0F0SURGZExuQnliMmR5WVcwN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2JHVjBJSE4wY21sd0lEMGdlMXh1SUNBZ0lHOXdaVzQ2SUdKc2IyTnJMbTl3Wlc1VGRISnBjQzV2Y0dWdUxGeHVJQ0FnSUdOc2IzTmxPaUJpYkc5amF5NWpiRzl6WlZOMGNtbHdMbU5zYjNObExGeHVYRzRnSUNBZ0x5OGdSR1YwWlhKdGFXNWxJSFJvWlNCemRHRnVaR0ZzYjI1bElHTmhibVJwWVdONUxpQkNZWE5wWTJGc2JIa2dabXhoWnlCdmRYSWdZMjl1ZEdWdWRDQmhjeUJpWldsdVp5QndiM056YVdKc2VTQnpkR0Z1WkdGc2IyNWxYRzRnSUNBZ0x5OGdjMjhnYjNWeUlIQmhjbVZ1ZENCallXNGdaR1YwWlhKdGFXNWxJR2xtSUhkbElHRmpkSFZoYkd4NUlHRnlaU0J6ZEdGdVpHRnNiMjVsWEc0Z0lDQWdiM0JsYmxOMFlXNWtZV3h2Ym1VNklHbHpUbVY0ZEZkb2FYUmxjM0JoWTJVb2NISnZaM0poYlM1aWIyUjVLU3hjYmlBZ0lDQmpiRzl6WlZOMFlXNWtZV3h2Ym1VNklHbHpVSEpsZGxkb2FYUmxjM0JoWTJVb0tHWnBjbk4wU1c1MlpYSnpaU0I4ZkNCd2NtOW5jbUZ0S1M1aWIyUjVLVnh1SUNCOU8xeHVYRzRnSUdsbUlDaGliRzlqYXk1dmNHVnVVM1J5YVhBdVkyeHZjMlVwSUh0Y2JpQWdJQ0J2YldsMFVtbG5hSFFvY0hKdlozSmhiUzVpYjJSNUxDQnVkV3hzTENCMGNuVmxLVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBiblpsY25ObEtTQjdYRzRnSUNBZ2JHVjBJR2x1ZG1WeWMyVlRkSEpwY0NBOUlHSnNiMk5yTG1sdWRtVnljMlZUZEhKcGNEdGNibHh1SUNBZ0lHbG1JQ2hwYm5abGNuTmxVM1J5YVhBdWIzQmxiaWtnZTF4dUlDQWdJQ0FnYjIxcGRFeGxablFvY0hKdlozSmhiUzVpYjJSNUxDQnVkV3hzTENCMGNuVmxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYVc1MlpYSnpaVk4wY21sd0xtTnNiM05sS1NCN1hHNGdJQ0FnSUNCdmJXbDBVbWxuYUhRb1ptbHljM1JKYm5abGNuTmxMbUp2Wkhrc0lHNTFiR3dzSUhSeWRXVXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9ZbXh2WTJzdVkyeHZjMlZUZEhKcGNDNXZjR1Z1S1NCN1hHNGdJQ0FnSUNCdmJXbDBUR1ZtZENoc1lYTjBTVzUyWlhKelpTNWliMlI1TENCdWRXeHNMQ0IwY25WbEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QkdhVzVrSUhOMFlXNWtZV3h2Ym1VZ1pXeHpaU0J6ZEdGMGJXVnVkSE5jYmlBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FoZEdocGN5NXZjSFJwYjI1ekxtbG5ibTl5WlZOMFlXNWtZV3h2Ym1VZ0ppWmNiaUFnSUNBZ0lHbHpVSEpsZGxkb2FYUmxjM0JoWTJVb2NISnZaM0poYlM1aWIyUjVLU0FtSmx4dUlDQWdJQ0FnYVhOT1pYaDBWMmhwZEdWemNHRmpaU2htYVhKemRFbHVkbVZ5YzJVdVltOWtlU2xjYmlBZ0lDQXBJSHRjYmlBZ0lDQWdJRzl0YVhSTVpXWjBLSEJ5YjJkeVlXMHVZbTlrZVNrN1hHNGdJQ0FnSUNCdmJXbDBVbWxuYUhRb1ptbHljM1JKYm5abGNuTmxMbUp2WkhrcE8xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElHbG1JQ2hpYkc5amF5NWpiRzl6WlZOMGNtbHdMbTl3Wlc0cElIdGNiaUFnSUNCdmJXbDBUR1ZtZENod2NtOW5jbUZ0TG1KdlpIa3NJRzUxYkd3c0lIUnlkV1VwTzF4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUhOMGNtbHdPMXh1ZlR0Y2JseHVWMmhwZEdWemNHRmpaVU52Ym5SeWIyd3VjSEp2ZEc5MGVYQmxMa1JsWTI5eVlYUnZjaUE5SUZkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTG5CeWIzUnZkSGx3WlM1TmRYTjBZV05vWlZOMFlYUmxiV1Z1ZENBOUlHWjFibU4wYVc5dUtGeHVJQ0J0ZFhOMFlXTm9aVnh1S1NCN1hHNGdJSEpsZEhWeWJpQnRkWE4wWVdOb1pTNXpkSEpwY0R0Y2JuMDdYRzVjYmxkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTG5CeWIzUnZkSGx3WlM1UVlYSjBhV0ZzVTNSaGRHVnRaVzUwSUQwZ1YyaHBkR1Z6Y0dGalpVTnZiblJ5YjJ3dWNISnZkRzkwZVhCbExrTnZiVzFsYm5SVGRHRjBaVzFsYm5RZ1BTQm1kVzVqZEdsdmJpaGNiaUFnYm05a1pWeHVLU0I3WEc0Z0lDOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUNvdlhHNGdJR3hsZENCemRISnBjQ0E5SUc1dlpHVXVjM1J5YVhBZ2ZId2dlMzA3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYVc1c2FXNWxVM1JoYm1SaGJHOXVaVG9nZEhKMVpTeGNiaUFnSUNCdmNHVnVPaUJ6ZEhKcGNDNXZjR1Z1TEZ4dUlDQWdJR05zYjNObE9pQnpkSEpwY0M1amJHOXpaVnh1SUNCOU8xeHVmVHRjYmx4dVpuVnVZM1JwYjI0Z2FYTlFjbVYyVjJocGRHVnpjR0ZqWlNoaWIyUjVMQ0JwTENCcGMxSnZiM1FwSUh0Y2JpQWdhV1lnS0drZ1BUMDlJSFZ1WkdWbWFXNWxaQ2tnZTF4dUlDQWdJR2tnUFNCaWIyUjVMbXhsYm1kMGFEdGNiaUFnZlZ4dVhHNGdJQzh2SUU1dlpHVnpJSFJvWVhRZ1pXNWtJSGRwZEdnZ2JtVjNiR2x1WlhNZ1lYSmxJR052Ym5OcFpHVnlaV1FnZDJocGRHVnpjR0ZqWlNBb1luVjBJR0Z5WlNCemNHVmphV0ZzWEc0Z0lDOHZJR05oYzJWa0lHWnZjaUJ6ZEhKcGNDQnZjR1Z5WVhScGIyNXpLVnh1SUNCc1pYUWdjSEpsZGlBOUlHSnZaSGxiYVNBdElERmRMRnh1SUNBZ0lITnBZbXhwYm1jZ1BTQmliMlI1VzJrZ0xTQXlYVHRjYmlBZ2FXWWdLQ0Z3Y21WMktTQjdYRzRnSUNBZ2NtVjBkWEp1SUdselVtOXZkRHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHdjbVYyTG5SNWNHVWdQVDA5SUNkRGIyNTBaVzUwVTNSaGRHVnRaVzUwSnlrZ2UxeHVJQ0FnSUhKbGRIVnliaUFvYzJsaWJHbHVaeUI4ZkNBaGFYTlNiMjkwSUQ4Z0wxeGNjajljWEc1Y1hITXFQeVF2SURvZ0x5aGVmRnhjY2o5Y1hHNHBYRnh6S2o4a0x5a3VkR1Z6ZENoY2JpQWdJQ0FnSUhCeVpYWXViM0pwWjJsdVlXeGNiaUFnSUNBcE8xeHVJQ0I5WEc1OVhHNW1kVzVqZEdsdmJpQnBjMDVsZUhSWGFHbDBaWE53WVdObEtHSnZaSGtzSUdrc0lHbHpVbTl2ZENrZ2UxeHVJQ0JwWmlBb2FTQTlQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnYVNBOUlDMHhPMXh1SUNCOVhHNWNiaUFnYkdWMElHNWxlSFFnUFNCaWIyUjVXMmtnS3lBeFhTeGNiaUFnSUNCemFXSnNhVzVuSUQwZ1ltOWtlVnRwSUNzZ01sMDdYRzRnSUdsbUlDZ2hibVY0ZENrZ2UxeHVJQ0FnSUhKbGRIVnliaUJwYzFKdmIzUTdYRzRnSUgxY2JseHVJQ0JwWmlBb2JtVjRkQzUwZVhCbElEMDlQU0FuUTI5dWRHVnVkRk4wWVhSbGJXVnVkQ2NwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdLSE5wWW14cGJtY2dmSHdnSVdselVtOXZkQ0EvSUM5ZVhGeHpLajljWEhJL1hGeHVMeUE2SUM5ZVhGeHpLajhvWEZ4eVAxeGNibndrS1M4cExuUmxjM1FvWEc0Z0lDQWdJQ0J1WlhoMExtOXlhV2RwYm1Gc1hHNGdJQ0FnS1R0Y2JpQWdmVnh1ZlZ4dVhHNHZMeUJOWVhKcmN5QjBhR1VnYm05a1pTQjBieUIwYUdVZ2NtbG5hSFFnYjJZZ2RHaGxJSEJ2YzJsMGFXOXVJR0Z6SUc5dGFYUjBaV1F1WEc0dkx5QkpMbVV1SUh0N1ptOXZmWDBuSUNjZ2QybHNiQ0J0WVhKcklIUm9aU0FuSUNjZ2JtOWtaU0JoY3lCdmJXbDBkR1ZrTGx4dUx5OWNiaTh2SUVsbUlHa2dhWE1nZFc1a1pXWnBibVZrTENCMGFHVnVJSFJvWlNCbWFYSnpkQ0JqYUdsc1pDQjNhV3hzSUdKbElHMWhjbXRsWkNCaGN5QnpkV05vTGx4dUx5OWNiaTh2SUVsbUlHMTFiR2wwY0d4bElHbHpJSFJ5ZFhSb2VTQjBhR1Z1SUdGc2JDQjNhR2wwWlhOd1lXTmxJSGRwYkd3Z1ltVWdjM1J5YVhCd1pXUWdiM1YwSUhWdWRHbHNJRzV2YmkxM2FHbDBaWE53WVdObFhHNHZMeUJqYjI1MFpXNTBJR2x6SUcxbGRDNWNibVoxYm1OMGFXOXVJRzl0YVhSU2FXZG9kQ2hpYjJSNUxDQnBMQ0J0ZFd4MGFYQnNaU2tnZTF4dUlDQnNaWFFnWTNWeWNtVnVkQ0E5SUdKdlpIbGJhU0E5UFNCdWRXeHNJRDhnTUNBNklHa2dLeUF4WFR0Y2JpQWdhV1lnS0Z4dUlDQWdJQ0ZqZFhKeVpXNTBJSHg4WEc0Z0lDQWdZM1Z5Y21WdWRDNTBlWEJsSUNFOVBTQW5RMjl1ZEdWdWRGTjBZWFJsYldWdWRDY2dmSHhjYmlBZ0lDQW9JVzExYkhScGNHeGxJQ1ltSUdOMWNuSmxiblF1Y21sbmFIUlRkSEpwY0hCbFpDbGNiaUFnS1NCN1hHNGdJQ0FnY21WMGRYSnVPMXh1SUNCOVhHNWNiaUFnYkdWMElHOXlhV2RwYm1Gc0lEMGdZM1Z5Y21WdWRDNTJZV3gxWlR0Y2JpQWdZM1Z5Y21WdWRDNTJZV3gxWlNBOUlHTjFjbkpsYm5RdWRtRnNkV1V1Y21Wd2JHRmpaU2hjYmlBZ0lDQnRkV3gwYVhCc1pTQS9JQzllWEZ4ekt5OGdPaUF2WGxzZ1hGeDBYU3BjWEhJL1hGeHVQeThzWEc0Z0lDQWdKeWRjYmlBZ0tUdGNiaUFnWTNWeWNtVnVkQzV5YVdkb2RGTjBjbWx3Y0dWa0lEMGdZM1Z5Y21WdWRDNTJZV3gxWlNBaFBUMGdiM0pwWjJsdVlXdzdYRzU5WEc1Y2JpOHZJRTFoY210eklIUm9aU0J1YjJSbElIUnZJSFJvWlNCc1pXWjBJRzltSUhSb1pTQndiM05wZEdsdmJpQmhjeUJ2YldsMGRHVmtMbHh1THk4Z1NTNWxMaUFuSUNkN2UyWnZiMzE5SUhkcGJHd2diV0Z5YXlCMGFHVWdKeUFuSUc1dlpHVWdZWE1nYjIxcGRIUmxaQzVjYmk4dlhHNHZMeUJKWmlCcElHbHpJSFZ1WkdWbWFXNWxaQ0IwYUdWdUlIUm9aU0JzWVhOMElHTm9hV3hrSUhkcGJHd2dZbVVnYldGeWEyVmtJR0Z6SUhOMVkyZ3VYRzR2TDF4dUx5OGdTV1lnYlhWc2FYUndiR1VnYVhNZ2RISjFkR2g1SUhSb1pXNGdZV3hzSUhkb2FYUmxjM0JoWTJVZ2QybHNiQ0JpWlNCemRISnBjSEJsWkNCdmRYUWdkVzUwYVd3Z2JtOXVMWGRvYVhSbGMzQmhZMlZjYmk4dklHTnZiblJsYm5RZ2FYTWdiV1YwTGx4dVpuVnVZM1JwYjI0Z2IyMXBkRXhsWm5Rb1ltOWtlU3dnYVN3Z2JYVnNkR2x3YkdVcElIdGNiaUFnYkdWMElHTjFjbkpsYm5RZ1BTQmliMlI1VzJrZ1BUMGdiblZzYkNBL0lHSnZaSGt1YkdWdVozUm9JQzBnTVNBNklHa2dMU0F4WFR0Y2JpQWdhV1lnS0Z4dUlDQWdJQ0ZqZFhKeVpXNTBJSHg4WEc0Z0lDQWdZM1Z5Y21WdWRDNTBlWEJsSUNFOVBTQW5RMjl1ZEdWdWRGTjBZWFJsYldWdWRDY2dmSHhjYmlBZ0lDQW9JVzExYkhScGNHeGxJQ1ltSUdOMWNuSmxiblF1YkdWbWRGTjBjbWx3Y0dWa0tWeHVJQ0FwSUh0Y2JpQWdJQ0J5WlhSMWNtNDdYRzRnSUgxY2JseHVJQ0F2THlCWFpTQnZiV2wwSUhSb1pTQnNZWE4wSUc1dlpHVWdhV1lnYVhRbmN5QjNhR2wwWlhOd1lXTmxJRzl1YkhrZ1lXNWtJRzV2ZENCd2NtVmpaV1JsWkNCaWVTQmhJRzV2YmkxamIyNTBaVzUwSUc1dlpHVXVYRzRnSUd4bGRDQnZjbWxuYVc1aGJDQTlJR04xY25KbGJuUXVkbUZzZFdVN1hHNGdJR04xY25KbGJuUXVkbUZzZFdVZ1BTQmpkWEp5Wlc1MExuWmhiSFZsTG5KbGNHeGhZMlVvYlhWc2RHbHdiR1VnUHlBdlhGeHpLeVF2SURvZ0wxc2dYRngwWFNza0x5d2dKeWNwTzF4dUlDQmpkWEp5Wlc1MExteGxablJUZEhKcGNIQmxaQ0E5SUdOMWNuSmxiblF1ZG1Gc2RXVWdJVDA5SUc5eWFXZHBibUZzTzF4dUlDQnlaWFIxY200Z1kzVnljbVZ1ZEM1c1pXWjBVM1J5YVhCd1pXUTdYRzU5WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUZkb2FYUmxjM0JoWTJWRGIyNTBjbTlzTzF4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuU291cmNlTG9jYXRpb24gPSBTb3VyY2VMb2NhdGlvbjtcbmV4cG9ydHMuaWQgPSBpZDtcbmV4cG9ydHMuc3RyaXBGbGFncyA9IHN0cmlwRmxhZ3M7XG5leHBvcnRzLnN0cmlwQ29tbWVudCA9IHN0cmlwQ29tbWVudDtcbmV4cG9ydHMucHJlcGFyZVBhdGggPSBwcmVwYXJlUGF0aDtcbmV4cG9ydHMucHJlcGFyZU11c3RhY2hlID0gcHJlcGFyZU11c3RhY2hlO1xuZXhwb3J0cy5wcmVwYXJlUmF3QmxvY2sgPSBwcmVwYXJlUmF3QmxvY2s7XG5leHBvcnRzLnByZXBhcmVCbG9jayA9IHByZXBhcmVCbG9jaztcbmV4cG9ydHMucHJlcGFyZVByb2dyYW0gPSBwcmVwYXJlUHJvZ3JhbTtcbmV4cG9ydHMucHJlcGFyZVBhcnRpYWxCbG9jayA9IHByZXBhcmVQYXJ0aWFsQmxvY2s7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgdmFyIGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXShvcGVuLnBhdGgub3JpZ2luYWwgKyBcIiBkb2Vzbid0IG1hdGNoIFwiICsgY2xvc2UsIGVycm9yTm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5mdW5jdGlvbiBpZCh0b2tlbikge1xuICBpZiAoL15cXFsuKlxcXSQvLnRlc3QodG9rZW4pKSB7XG4gICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygxLCB0b2tlbi5sZW5ndGggLSAxKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaXBGbGFncyhvcGVuLCBjbG9zZSkge1xuICByZXR1cm4ge1xuICAgIG9wZW46IG9wZW4uY2hhckF0KDIpID09PSAnficsXG4gICAgY2xvc2U6IGNsb3NlLmNoYXJBdChjbG9zZS5sZW5ndGggLSAzKSA9PT0gJ34nXG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQYXRoKGRhdGEsIHBhcnRzLCBsb2MpIHtcbiAgbG9jID0gdGhpcy5sb2NJbmZvKGxvYyk7XG5cbiAgdmFyIG9yaWdpbmFsID0gZGF0YSA/ICdAJyA6ICcnLFxuICAgICAgZGlnID0gW10sXG4gICAgICBkZXB0aCA9IDA7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG5cbiAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgIC8vIGkuZS4gZm9vLlt0aGlzXSByZXNvbHZlcyB0byBhcHByb3hpbWF0ZWx5IGNvbnRleHQuZm9vWyd0aGlzJ11cbiAgICBpc0xpdGVyYWwgPSBwYXJ0c1tpXS5vcmlnaW5hbCAhPT0gcGFydDtcbiAgICBvcmlnaW5hbCArPSAocGFydHNbaV0uc2VwYXJhdG9yIHx8ICcnKSArIHBhcnQ7XG5cbiAgICBpZiAoIWlzTGl0ZXJhbCAmJiAocGFydCA9PT0gJy4uJyB8fCBwYXJ0ID09PSAnLicgfHwgcGFydCA9PT0gJ3RoaXMnKSkge1xuICAgICAgaWYgKGRpZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2M6IGxvYyB9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWcucHVzaChwYXJ0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgZGF0YTogZGF0YSxcbiAgICBkZXB0aDogZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbDogb3JpZ2luYWwsXG4gICAgbG9jOiBsb2NcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU11c3RhY2hlKHBhdGgsIHBhcmFtcywgaGFzaCwgb3Blbiwgc3RyaXAsIGxvY0luZm8pIHtcbiAgLy8gTXVzdCB1c2UgY2hhckF0IHRvIHN1cHBvcnQgSUUgcHJlLTEwXG4gIHZhciBlc2NhcGVGbGFnID0gb3Blbi5jaGFyQXQoMykgfHwgb3Blbi5jaGFyQXQoMiksXG4gICAgICBlc2NhcGVkID0gZXNjYXBlRmxhZyAhPT0gJ3snICYmIGVzY2FwZUZsYWcgIT09ICcmJztcblxuICB2YXIgZGVjb3JhdG9yID0gL1xcKi8udGVzdChvcGVuKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yJyA6ICdNdXN0YWNoZVN0YXRlbWVudCcsXG4gICAgcGF0aDogcGF0aCxcbiAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICBoYXNoOiBoYXNoLFxuICAgIGVzY2FwZWQ6IGVzY2FwZWQsXG4gICAgc3RyaXA6IHN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIHZhciBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtOiBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUJsb2NrKG9wZW5CbG9jaywgcHJvZ3JhbSwgaW52ZXJzZUFuZFByb2dyYW0sIGNsb3NlLCBpbnZlcnRlZCwgbG9jSW5mbykge1xuICBpZiAoY2xvc2UgJiYgY2xvc2UucGF0aCkge1xuICAgIHZhbGlkYXRlQ2xvc2Uob3BlbkJsb2NrLCBjbG9zZSk7XG4gIH1cblxuICB2YXIgZGVjb3JhdG9yID0gL1xcKi8udGVzdChvcGVuQmxvY2sub3Blbik7XG5cbiAgcHJvZ3JhbS5ibG9ja1BhcmFtcyA9IG9wZW5CbG9jay5ibG9ja1BhcmFtcztcblxuICB2YXIgaW52ZXJzZSA9IHVuZGVmaW5lZCxcbiAgICAgIGludmVyc2VTdHJpcCA9IHVuZGVmaW5lZDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsIGludmVyc2VBbmRQcm9ncmFtKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZUFuZFByb2dyYW0uY2hhaW4pIHtcbiAgICAgIGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW0uYm9keVswXS5jbG9zZVN0cmlwID0gY2xvc2Uuc3RyaXA7XG4gICAgfVxuXG4gICAgaW52ZXJzZVN0cmlwID0gaW52ZXJzZUFuZFByb2dyYW0uc3RyaXA7XG4gICAgaW52ZXJzZSA9IGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW07XG4gIH1cblxuICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICBpbnZlcnRlZCA9IGludmVyc2U7XG4gICAgaW52ZXJzZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbSA9IGludmVydGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yQmxvY2snIDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuQmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5CbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlbkJsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbTogcHJvZ3JhbSxcbiAgICBpbnZlcnNlOiBpbnZlcnNlLFxuICAgIG9wZW5TdHJpcDogb3BlbkJsb2NrLnN0cmlwLFxuICAgIGludmVyc2VTdHJpcDogaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVQcm9ncmFtKHN0YXRlbWVudHMsIGxvYykge1xuICBpZiAoIWxvYyAmJiBzdGF0ZW1lbnRzLmxlbmd0aCkge1xuICAgIHZhciBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgICBsYXN0TG9jID0gc3RhdGVtZW50c1tzdGF0ZW1lbnRzLmxlbmd0aCAtIDFdLmxvYztcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZpcnN0TG9jICYmIGxhc3RMb2MpIHtcbiAgICAgIGxvYyA9IHtcbiAgICAgICAgc291cmNlOiBmaXJzdExvYy5zb3VyY2UsXG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgbGluZTogZmlyc3RMb2Muc3RhcnQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGZpcnN0TG9jLnN0YXJ0LmNvbHVtblxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICBsaW5lOiBsYXN0TG9jLmVuZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogbGFzdExvYy5lbmQuY29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogc3RhdGVtZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVBhcnRpYWxCbG9jayhvcGVuLCBwcm9ncmFtLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW4sIGNsb3NlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQnLFxuICAgIG5hbWU6IG9wZW4ucGF0aCxcbiAgICBwYXJhbXM6IG9wZW4ucGFyYW1zLFxuICAgIGhhc2g6IG9wZW4uaGFzaCxcbiAgICBwcm9ncmFtOiBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDogb3Blbi5zdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJOdmJYQnBiR1Z5TDJobGJIQmxjbk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3T3pzN096czdPenM3ZVVKQlFYTkNMR05CUVdNN096czdRVUZGY0VNc1UwRkJVeXhoUVVGaExFTkJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0QlFVTnNReXhQUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdPMEZCUldwRUxFMUJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRXRCUVVzc1MwRkJTeXhGUVVGRk8wRkJRMmhETEZGQlFVa3NVMEZCVXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN08wRkJSWFpETEZWQlFVMHNNa0pCUTBvc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NhVUpCUVdsQ0xFZEJRVWNzUzBGQlN5eEZRVU01UXl4VFFVRlRMRU5CUTFZc1EwRkJRenRIUVVOSU8wTkJRMFk3TzBGQlJVMHNVMEZCVXl4alFVRmpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJUdEJRVU01UXl4TlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF6dEJRVU55UWl4TlFVRkpMRU5CUVVNc1MwRkJTeXhIUVVGSE8wRkJRMWdzVVVGQlNTeEZRVUZGTEU5QlFVOHNRMEZCUXl4VlFVRlZPMEZCUTNoQ0xGVkJRVTBzUlVGQlJTeFBRVUZQTEVOQlFVTXNXVUZCV1R0SFFVTTNRaXhEUVVGRE8wRkJRMFlzVFVGQlNTeERRVUZETEVkQlFVY3NSMEZCUnp0QlFVTlVMRkZCUVVrc1JVRkJSU3hQUVVGUExFTkJRVU1zVTBGQlV6dEJRVU4yUWl4VlFVRk5MRVZCUVVVc1QwRkJUeXhEUVVGRExGZEJRVmM3UjBGRE5VSXNRMEZCUXp0RFFVTklPenRCUVVWTkxGTkJRVk1zUlVGQlJTeERRVUZETEV0QlFVc3NSVUZCUlR0QlFVTjRRaXhOUVVGSkxGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN1FVRkRNVUlzVjBGQlR5eExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGRCUXpkRExFMUJRVTA3UVVGRFRDeFhRVUZQTEV0QlFVc3NRMEZCUXp0SFFVTmtPME5CUTBZN08wRkJSVTBzVTBGQlV5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1JVRkJSVHRCUVVOMFF5eFRRVUZQTzBGQlEwd3NVVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnp0QlFVTTFRaXhUUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eExRVUZMTEVkQlFVYzdSMEZET1VNc1EwRkJRenREUVVOSU96dEJRVVZOTEZOQlFWTXNXVUZCV1N4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVOd1F5eFRRVUZQTEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1kwRkJZeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4aFFVRmhMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03UTBGRGRrVTdPMEZCUlUwc1UwRkJVeXhYUVVGWExFTkJRVU1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRVZCUVVVN1FVRkROVU1zUzBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03TzBGQlJYaENMRTFCUVVrc1VVRkJVU3hIUVVGSExFbEJRVWtzUjBGQlJ5eEhRVUZITEVkQlFVY3NSVUZCUlR0TlFVTTFRaXhIUVVGSExFZEJRVWNzUlVGQlJUdE5RVU5TTEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSVm9zVDBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU0xUXl4UlFVRkpMRWxCUVVrc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1RzN096dEJRVWQwUWl4aFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNTMEZCU3l4SlFVRkpMRU5CUVVNN1FVRkRla01zV1VGQlVTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zU1VGQlNTeEZRVUZGTEVOQlFVRXNSMEZCU1N4SlFVRkpMRU5CUVVNN08wRkJSVGxETEZGQlFVa3NRMEZCUXl4VFFVRlRMRXRCUVVzc1NVRkJTU3hMUVVGTExFbEJRVWtzU1VGQlNTeEpRVUZKTEV0QlFVc3NSMEZCUnl4SlFVRkpMRWxCUVVrc1MwRkJTeXhOUVVGTkxFTkJRVUVzUVVGQlF5eEZRVUZGTzBGQlEzQkZMRlZCUVVrc1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVWQlFVVTdRVUZEYkVJc1kwRkJUU3d5UWtGQll5eG5Ra0ZCWjBJc1IwRkJSeXhSUVVGUkxFVkJRVVVzUlVGQlJTeEhRVUZITEVWQlFVZ3NSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJRenRQUVVNelJDeE5RVUZOTEVsQlFVa3NTVUZCU1N4TFFVRkxMRWxCUVVrc1JVRkJSVHRCUVVONFFpeGhRVUZMTEVWQlFVVXNRMEZCUXp0UFFVTlVPMHRCUTBZc1RVRkJUVHRCUVVOTUxGTkJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRhRUk3UjBGRFJqczdRVUZGUkN4VFFVRlBPMEZCUTB3c1VVRkJTU3hGUVVGRkxHZENRVUZuUWp0QlFVTjBRaXhSUVVGSkxFVkJRVW9zU1VGQlNUdEJRVU5LTEZOQlFVc3NSVUZCVEN4TFFVRkxPMEZCUTB3c1UwRkJTeXhGUVVGRkxFZEJRVWM3UVVGRFZpeFpRVUZSTEVWQlFWSXNVVUZCVVR0QlFVTlNMRTlCUVVjc1JVRkJTQ3hIUVVGSE8wZEJRMG9zUTBGQlF6dERRVU5JT3p0QlFVVk5MRk5CUVZNc1pVRkJaU3hEUVVGRExFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGT3p0QlFVVjRSU3hOUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMDFCUXk5RExFOUJRVThzUjBGQlJ5eFZRVUZWTEV0QlFVc3NSMEZCUnl4SlFVRkpMRlZCUVZVc1MwRkJTeXhIUVVGSExFTkJRVU03TzBGQlJYSkVMRTFCUVVrc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRhRU1zVTBGQlR6dEJRVU5NTEZGQlFVa3NSVUZCUlN4VFFVRlRMRWRCUVVjc1YwRkJWeXhIUVVGSExHMUNRVUZ0UWp0QlFVTnVSQ3hSUVVGSkxFVkJRVW9zU1VGQlNUdEJRVU5LTEZWQlFVMHNSVUZCVGl4TlFVRk5PMEZCUTA0c1VVRkJTU3hGUVVGS0xFbEJRVWs3UVVGRFNpeFhRVUZQTEVWQlFWQXNUMEZCVHp0QlFVTlFMRk5CUVVzc1JVRkJUQ3hMUVVGTE8wRkJRMHdzVDBGQlJ5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRE8wZEJRek5DTEVOQlFVTTdRMEZEU0RzN1FVRkZUU3hUUVVGVExHVkJRV1VzUTBGQlF5eFpRVUZaTEVWQlFVVXNVVUZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRGRFVXNaVUZCWVN4RFFVRkRMRmxCUVZrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZGYmtNc1UwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRhRU1zVFVGQlNTeFBRVUZQTEVkQlFVYzdRVUZEV2l4UlFVRkpMRVZCUVVVc1UwRkJVenRCUVVObUxGRkJRVWtzUlVGQlJTeFJRVUZSTzBGQlEyUXNVMEZCU3l4RlFVRkZMRVZCUVVVN1FVRkRWQ3hQUVVGSExFVkJRVVVzVDBGQlR6dEhRVU5pTEVOQlFVTTdPMEZCUlVZc1UwRkJUenRCUVVOTUxGRkJRVWtzUlVGQlJTeG5Ra0ZCWjBJN1FVRkRkRUlzVVVGQlNTeEZRVUZGTEZsQlFWa3NRMEZCUXl4SlFVRkpPMEZCUTNaQ0xGVkJRVTBzUlVGQlJTeFpRVUZaTEVOQlFVTXNUVUZCVFR0QlFVTXpRaXhSUVVGSkxFVkJRVVVzV1VGQldTeERRVUZETEVsQlFVazdRVUZEZGtJc1YwRkJUeXhGUVVGUUxFOUJRVTg3UVVGRFVDeGhRVUZUTEVWQlFVVXNSVUZCUlR0QlFVTmlMR2RDUVVGWkxFVkJRVVVzUlVGQlJUdEJRVU5vUWl4alFVRlZMRVZCUVVVc1JVRkJSVHRCUVVOa0xFOUJRVWNzUlVGQlJTeFBRVUZQTzBkQlEySXNRMEZCUXp0RFFVTklPenRCUVVWTkxGTkJRVk1zV1VGQldTeERRVU14UWl4VFFVRlRMRVZCUTFRc1QwRkJUeXhGUVVOUUxHbENRVUZwUWl4RlFVTnFRaXhMUVVGTExFVkJRMHdzVVVGQlVTeEZRVU5TTEU5QlFVOHNSVUZEVUR0QlFVTkJMRTFCUVVrc1MwRkJTeXhKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVWQlFVVTdRVUZEZGtJc2FVSkJRV0VzUTBGQlF5eFRRVUZUTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1IwRkRha003TzBGQlJVUXNUVUZCU1N4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN08wRkJSVEZETEZOQlFVOHNRMEZCUXl4WFFVRlhMRWRCUVVjc1UwRkJVeXhEUVVGRExGZEJRVmNzUTBGQlF6czdRVUZGTlVNc1RVRkJTU3hQUVVGUExGbEJRVUU3VFVGQlJTeFpRVUZaTEZsQlFVRXNRMEZCUXpzN1FVRkZNVUlzVFVGQlNTeHBRa0ZCYVVJc1JVRkJSVHRCUVVOeVFpeFJRVUZKTEZOQlFWTXNSVUZCUlR0QlFVTmlMRmxCUVUwc01rSkJRMG9zZFVOQlFYVkRMRVZCUTNaRExHbENRVUZwUWl4RFFVTnNRaXhEUVVGRE8wdEJRMGc3TzBGQlJVUXNVVUZCU1N4cFFrRkJhVUlzUTBGQlF5eExRVUZMTEVWQlFVVTdRVUZETTBJc2RVSkJRV2xDTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVkQlFVY3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJRenRMUVVNMVJEczdRVUZGUkN4blFrRkJXU3hIUVVGSExHbENRVUZwUWl4RFFVRkRMRXRCUVVzc1EwRkJRenRCUVVOMlF5eFhRVUZQTEVkQlFVY3NhVUpCUVdsQ0xFTkJRVU1zVDBGQlR5eERRVUZETzBkQlEzSkRPenRCUVVWRUxFMUJRVWtzVVVGQlVTeEZRVUZGTzBGQlExb3NXVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRCUVVOdVFpeFhRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPMEZCUTJ4Q0xGZEJRVThzUjBGQlJ5eFJRVUZSTEVOQlFVTTdSMEZEY0VJN08wRkJSVVFzVTBGQlR6dEJRVU5NTEZGQlFVa3NSVUZCUlN4VFFVRlRMRWRCUVVjc1owSkJRV2RDTEVkQlFVY3NaMEpCUVdkQ08wRkJRM0pFTEZGQlFVa3NSVUZCUlN4VFFVRlRMRU5CUVVNc1NVRkJTVHRCUVVOd1FpeFZRVUZOTEVWQlFVVXNVMEZCVXl4RFFVRkRMRTFCUVUwN1FVRkRlRUlzVVVGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4SlFVRkpPMEZCUTNCQ0xGZEJRVThzUlVGQlVDeFBRVUZQTzBGQlExQXNWMEZCVHl4RlFVRlFMRTlCUVU4N1FVRkRVQ3hoUVVGVExFVkJRVVVzVTBGQlV5eERRVUZETEV0QlFVczdRVUZETVVJc1owSkJRVmtzUlVGQldpeFpRVUZaTzBGQlExb3NZMEZCVlN4RlFVRkZMRXRCUVVzc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN6dEJRVU5vUXl4UFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTTdSMEZETTBJc1EwRkJRenREUVVOSU96dEJRVVZOTEZOQlFWTXNZMEZCWXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hIUVVGSExFVkJRVVU3UVVGRE9VTXNUVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlF6ZENMRkZCUVUwc1VVRkJVU3hIUVVGSExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhPMUZCUTJoRExFOUJRVThzUjBGQlJ5eFZRVUZWTEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdPenRCUVVkc1JDeFJRVUZKTEZGQlFWRXNTVUZCU1N4UFFVRlBMRVZCUVVVN1FVRkRka0lzVTBGQlJ5eEhRVUZITzBGQlEwb3NZMEZCVFN4RlFVRkZMRkZCUVZFc1EwRkJReXhOUVVGTk8wRkJRM1pDTEdGQlFVc3NSVUZCUlR0QlFVTk1MR05CUVVrc1JVRkJSU3hSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVazdRVUZEZWtJc1owSkJRVTBzUlVGQlJTeFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwN1UwRkRPVUk3UVVGRFJDeFhRVUZITEVWQlFVVTdRVUZEU0N4alFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTzBGQlEzUkNMR2RDUVVGTkxFVkJRVVVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5PMU5CUXpOQ08wOUJRMFlzUTBGQlF6dExRVU5JTzBkQlEwWTdPMEZCUlVRc1UwRkJUenRCUVVOTUxGRkJRVWtzUlVGQlJTeFRRVUZUTzBGQlEyWXNVVUZCU1N4RlFVRkZMRlZCUVZVN1FVRkRhRUlzVTBGQlN5eEZRVUZGTEVWQlFVVTdRVUZEVkN4UFFVRkhMRVZCUVVVc1IwRkJSenRIUVVOVUxFTkJRVU03UTBGRFNEczdRVUZGVFN4VFFVRlRMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJUdEJRVU5xUlN4bFFVRmhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZET3p0QlFVVXpRaXhUUVVGUE8wRkJRMHdzVVVGQlNTeEZRVUZGTEhWQ1FVRjFRanRCUVVNM1FpeFJRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrN1FVRkRaaXhWUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEUxQlFVMDdRVUZEYmtJc1VVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTzBGQlEyWXNWMEZCVHl4RlFVRlFMRTlCUVU4N1FVRkRVQ3hoUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEV0QlFVczdRVUZEY2tJc1kwRkJWU3hGUVVGRkxFdEJRVXNzU1VGQlNTeExRVUZMTEVOQlFVTXNTMEZCU3p0QlFVTm9ReXhQUVVGSExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNN1IwRkRNMElzUTBGQlF6dERRVU5JSWl3aVptbHNaU0k2SW1obGJIQmxjbk11YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ1JYaGpaWEIwYVc5dUlHWnliMjBnSnk0dUwyVjRZMlZ3ZEdsdmJpYzdYRzVjYm1aMWJtTjBhVzl1SUhaaGJHbGtZWFJsUTJ4dmMyVW9iM0JsYml3Z1kyeHZjMlVwSUh0Y2JpQWdZMnh2YzJVZ1BTQmpiRzl6WlM1d1lYUm9JRDhnWTJ4dmMyVXVjR0YwYUM1dmNtbG5hVzVoYkNBNklHTnNiM05sTzF4dVhHNGdJR2xtSUNodmNHVnVMbkJoZEdndWIzSnBaMmx1WVd3Z0lUMDlJR05zYjNObEtTQjdYRzRnSUNBZ2JHVjBJR1Z5Y205eVRtOWtaU0E5SUhzZ2JHOWpPaUJ2Y0dWdUxuQmhkR2d1Ykc5aklIMDdYRzVjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLRnh1SUNBZ0lDQWdiM0JsYmk1d1lYUm9MbTl5YVdkcGJtRnNJQ3NnWENJZ1pHOWxjMjRuZENCdFlYUmphQ0JjSWlBcklHTnNiM05sTEZ4dUlDQWdJQ0FnWlhKeWIzSk9iMlJsWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnVTI5MWNtTmxURzlqWVhScGIyNG9jMjkxY21ObExDQnNiMk5KYm1adktTQjdYRzRnSUhSb2FYTXVjMjkxY21ObElEMGdjMjkxY21ObE8xeHVJQ0IwYUdsekxuTjBZWEowSUQwZ2UxeHVJQ0FnSUd4cGJtVTZJR3h2WTBsdVptOHVabWx5YzNSZmJHbHVaU3hjYmlBZ0lDQmpiMngxYlc0NklHeHZZMGx1Wm04dVptbHljM1JmWTI5c2RXMXVYRzRnSUgwN1hHNGdJSFJvYVhNdVpXNWtJRDBnZTF4dUlDQWdJR3hwYm1VNklHeHZZMGx1Wm04dWJHRnpkRjlzYVc1bExGeHVJQ0FnSUdOdmJIVnRiam9nYkc5alNXNW1ieTVzWVhOMFgyTnZiSFZ0Ymx4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FXUW9kRzlyWlc0cElIdGNiaUFnYVdZZ0tDOWVYRnhiTGlwY1hGMGtMeTUwWlhOMEtIUnZhMlZ1S1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYjJ0bGJpNXpkV0p6ZEhKcGJtY29NU3dnZEc5clpXNHViR1Z1WjNSb0lDMGdNU2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJSFJ2YTJWdU8xeHVJQ0I5WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnpkSEpwY0Vac1lXZHpLRzl3Wlc0c0lHTnNiM05sS1NCN1hHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2IzQmxiam9nYjNCbGJpNWphR0Z5UVhRb01pa2dQVDA5SUNkK0p5eGNiaUFnSUNCamJHOXpaVG9nWTJ4dmMyVXVZMmhoY2tGMEtHTnNiM05sTG14bGJtZDBhQ0F0SURNcElEMDlQU0FuZmlkY2JpQWdmVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlITjBjbWx3UTI5dGJXVnVkQ2hqYjIxdFpXNTBLU0I3WEc0Z0lISmxkSFZ5YmlCamIyMXRaVzUwTG5KbGNHeGhZMlVvTDE1Y1hIdGNYSHQrUHlFdFB5MC9MeXdnSnljcExuSmxjR3hoWTJVb0x5MC9MVDkrUDF4Y2ZWeGNmU1F2TENBbkp5azdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCd2NtVndZWEpsVUdGMGFDaGtZWFJoTENCd1lYSjBjeXdnYkc5aktTQjdYRzRnSUd4dll5QTlJSFJvYVhNdWJHOWpTVzVtYnloc2IyTXBPMXh1WEc0Z0lHeGxkQ0J2Y21sbmFXNWhiQ0E5SUdSaGRHRWdQeUFuUUNjZ09pQW5KeXhjYmlBZ0lDQmthV2NnUFNCYlhTeGNiaUFnSUNCa1pYQjBhQ0E5SURBN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCd1lYSjBjeTVzWlc1bmRHZzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0JzWlhRZ2NHRnlkQ0E5SUhCaGNuUnpXMmxkTG5CaGNuUXNYRzRnSUNBZ0lDQXZMeUJKWmlCM1pTQm9ZWFpsSUZ0ZElITjViblJoZUNCMGFHVnVJSGRsSUdSdklHNXZkQ0IwY21WaGRDQndZWFJvSUhKbFptVnlaVzVqWlhNZ1lYTWdiM0JsY21GMGIzSnpMRnh1SUNBZ0lDQWdMeThnYVM1bExpQm1iMjh1VzNSb2FYTmRJSEpsYzI5c2RtVnpJSFJ2SUdGd2NISnZlR2x0WVhSbGJIa2dZMjl1ZEdWNGRDNW1iMjliSjNSb2FYTW5YVnh1SUNBZ0lDQWdhWE5NYVhSbGNtRnNJRDBnY0dGeWRITmJhVjB1YjNKcFoybHVZV3dnSVQwOUlIQmhjblE3WEc0Z0lDQWdiM0pwWjJsdVlXd2dLejBnS0hCaGNuUnpXMmxkTG5ObGNHRnlZWFJ2Y2lCOGZDQW5KeWtnS3lCd1lYSjBPMXh1WEc0Z0lDQWdhV1lnS0NGcGMweHBkR1Z5WVd3Z0ppWWdLSEJoY25RZ1BUMDlJQ2N1TGljZ2ZId2djR0Z5ZENBOVBUMGdKeTRuSUh4OElIQmhjblFnUFQwOUlDZDBhR2x6SnlrcElIdGNiaUFnSUNBZ0lHbG1JQ2hrYVdjdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NkSmJuWmhiR2xrSUhCaGRHZzZJQ2NnS3lCdmNtbG5hVzVoYkN3Z2V5QnNiMk1nZlNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tIQmhjblFnUFQwOUlDY3VMaWNwSUh0Y2JpQWdJQ0FnSUNBZ1pHVndkR2dyS3p0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdaR2xuTG5CMWMyZ29jR0Z5ZENrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0IwZVhCbE9pQW5VR0YwYUVWNGNISmxjM05wYjI0bkxGeHVJQ0FnSUdSaGRHRXNYRzRnSUNBZ1pHVndkR2dzWEc0Z0lDQWdjR0Z5ZEhNNklHUnBaeXhjYmlBZ0lDQnZjbWxuYVc1aGJDeGNiaUFnSUNCc2IyTmNiaUFnZlR0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEJ5WlhCaGNtVk5kWE4wWVdOb1pTaHdZWFJvTENCd1lYSmhiWE1zSUdoaGMyZ3NJRzl3Wlc0c0lITjBjbWx3TENCc2IyTkpibVp2S1NCN1hHNGdJQzh2SUUxMWMzUWdkWE5sSUdOb1lYSkJkQ0IwYnlCemRYQndiM0owSUVsRklIQnlaUzB4TUZ4dUlDQnNaWFFnWlhOallYQmxSbXhoWnlBOUlHOXdaVzR1WTJoaGNrRjBLRE1wSUh4OElHOXdaVzR1WTJoaGNrRjBLRElwTEZ4dUlDQWdJR1Z6WTJGd1pXUWdQU0JsYzJOaGNHVkdiR0ZuSUNFOVBTQW5leWNnSmlZZ1pYTmpZWEJsUm14aFp5QWhQVDBnSnlZbk8xeHVYRzRnSUd4bGRDQmtaV052Y21GMGIzSWdQU0F2WEZ3cUx5NTBaWE4wS0c5d1pXNHBPMXh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJSFI1Y0dVNklHUmxZMjl5WVhSdmNpQS9JQ2RFWldOdmNtRjBiM0luSURvZ0owMTFjM1JoWTJobFUzUmhkR1Z0Wlc1MEp5eGNiaUFnSUNCd1lYUm9MRnh1SUNBZ0lIQmhjbUZ0Y3l4Y2JpQWdJQ0JvWVhOb0xGeHVJQ0FnSUdWelkyRndaV1FzWEc0Z0lDQWdjM1J5YVhBc1hHNGdJQ0FnYkc5ak9pQjBhR2x6TG14dlkwbHVabThvYkc5alNXNW1ieWxjYmlBZ2ZUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhCeVpYQmhjbVZTWVhkQ2JHOWpheWh2Y0dWdVVtRjNRbXh2WTJzc0lHTnZiblJsYm5SekxDQmpiRzl6WlN3Z2JHOWpTVzVtYnlrZ2UxeHVJQ0IyWVd4cFpHRjBaVU5zYjNObEtHOXdaVzVTWVhkQ2JHOWpheXdnWTJ4dmMyVXBPMXh1WEc0Z0lHeHZZMGx1Wm04Z1BTQjBhR2x6TG14dlkwbHVabThvYkc5alNXNW1ieWs3WEc0Z0lHeGxkQ0J3Y205bmNtRnRJRDBnZTF4dUlDQWdJSFI1Y0dVNklDZFFjbTluY21GdEp5eGNiaUFnSUNCaWIyUjVPaUJqYjI1MFpXNTBjeXhjYmlBZ0lDQnpkSEpwY0RvZ2UzMHNYRzRnSUNBZ2JHOWpPaUJzYjJOSmJtWnZYRzRnSUgwN1hHNWNiaUFnY21WMGRYSnVJSHRjYmlBZ0lDQjBlWEJsT2lBblFteHZZMnRUZEdGMFpXMWxiblFuTEZ4dUlDQWdJSEJoZEdnNklHOXdaVzVTWVhkQ2JHOWpheTV3WVhSb0xGeHVJQ0FnSUhCaGNtRnRjem9nYjNCbGJsSmhkMEpzYjJOckxuQmhjbUZ0Y3l4Y2JpQWdJQ0JvWVhOb09pQnZjR1Z1VW1GM1FteHZZMnN1YUdGemFDeGNiaUFnSUNCd2NtOW5jbUZ0TEZ4dUlDQWdJRzl3Wlc1VGRISnBjRG9nZTMwc1hHNGdJQ0FnYVc1MlpYSnpaVk4wY21sd09pQjdmU3hjYmlBZ0lDQmpiRzl6WlZOMGNtbHdPaUI3ZlN4Y2JpQWdJQ0JzYjJNNklHeHZZMGx1Wm05Y2JpQWdmVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlIQnlaWEJoY21WQ2JHOWpheWhjYmlBZ2IzQmxia0pzYjJOckxGeHVJQ0J3Y205bmNtRnRMRnh1SUNCcGJuWmxjbk5sUVc1a1VISnZaM0poYlN4Y2JpQWdZMnh2YzJVc1hHNGdJR2x1ZG1WeWRHVmtMRnh1SUNCc2IyTkpibVp2WEc0cElIdGNiaUFnYVdZZ0tHTnNiM05sSUNZbUlHTnNiM05sTG5CaGRHZ3BJSHRjYmlBZ0lDQjJZV3hwWkdGMFpVTnNiM05sS0c5d1pXNUNiRzlqYXl3Z1kyeHZjMlVwTzF4dUlDQjlYRzVjYmlBZ2JHVjBJR1JsWTI5eVlYUnZjaUE5SUM5Y1hDb3ZMblJsYzNRb2IzQmxia0pzYjJOckxtOXdaVzRwTzF4dVhHNGdJSEJ5YjJkeVlXMHVZbXh2WTJ0UVlYSmhiWE1nUFNCdmNHVnVRbXh2WTJzdVlteHZZMnRRWVhKaGJYTTdYRzVjYmlBZ2JHVjBJR2x1ZG1WeWMyVXNJR2x1ZG1WeWMyVlRkSEpwY0R0Y2JseHVJQ0JwWmlBb2FXNTJaWEp6WlVGdVpGQnliMmR5WVcwcElIdGNiaUFnSUNCcFppQW9aR1ZqYjNKaGRHOXlLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0Z4dUlDQWdJQ0FnSUNBblZXNWxlSEJsWTNSbFpDQnBiblpsY25ObElHSnNiMk5ySUc5dUlHUmxZMjl5WVhSdmNpY3NYRzRnSUNBZ0lDQWdJR2x1ZG1WeWMyVkJibVJRY205bmNtRnRYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2hwYm5abGNuTmxRVzVrVUhKdlozSmhiUzVqYUdGcGJpa2dlMXh1SUNBZ0lDQWdhVzUyWlhKelpVRnVaRkJ5YjJkeVlXMHVjSEp2WjNKaGJTNWliMlI1V3pCZExtTnNiM05sVTNSeWFYQWdQU0JqYkc5elpTNXpkSEpwY0R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwYm5abGNuTmxVM1J5YVhBZ1BTQnBiblpsY25ObFFXNWtVSEp2WjNKaGJTNXpkSEpwY0R0Y2JpQWdJQ0JwYm5abGNuTmxJRDBnYVc1MlpYSnpaVUZ1WkZCeWIyZHlZVzB1Y0hKdlozSmhiVHRjYmlBZ2ZWeHVYRzRnSUdsbUlDaHBiblpsY25SbFpDa2dlMXh1SUNBZ0lHbHVkbVZ5ZEdWa0lEMGdhVzUyWlhKelpUdGNiaUFnSUNCcGJuWmxjbk5sSUQwZ2NISnZaM0poYlR0Y2JpQWdJQ0J3Y205bmNtRnRJRDBnYVc1MlpYSjBaV1E3WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnZTF4dUlDQWdJSFI1Y0dVNklHUmxZMjl5WVhSdmNpQS9JQ2RFWldOdmNtRjBiM0pDYkc5amF5Y2dPaUFuUW14dlkydFRkR0YwWlcxbGJuUW5MRnh1SUNBZ0lIQmhkR2c2SUc5d1pXNUNiRzlqYXk1d1lYUm9MRnh1SUNBZ0lIQmhjbUZ0Y3pvZ2IzQmxia0pzYjJOckxuQmhjbUZ0Y3l4Y2JpQWdJQ0JvWVhOb09pQnZjR1Z1UW14dlkyc3VhR0Z6YUN4Y2JpQWdJQ0J3Y205bmNtRnRMRnh1SUNBZ0lHbHVkbVZ5YzJVc1hHNGdJQ0FnYjNCbGJsTjBjbWx3T2lCdmNHVnVRbXh2WTJzdWMzUnlhWEFzWEc0Z0lDQWdhVzUyWlhKelpWTjBjbWx3TEZ4dUlDQWdJR05zYjNObFUzUnlhWEE2SUdOc2IzTmxJQ1ltSUdOc2IzTmxMbk4wY21sd0xGeHVJQ0FnSUd4dll6b2dkR2hwY3k1c2IyTkpibVp2S0d4dlkwbHVabThwWEc0Z0lIMDdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCd2NtVndZWEpsVUhKdlozSmhiU2h6ZEdGMFpXMWxiblJ6TENCc2IyTXBJSHRjYmlBZ2FXWWdLQ0ZzYjJNZ0ppWWdjM1JoZEdWdFpXNTBjeTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQmpiMjV6ZENCbWFYSnpkRXh2WXlBOUlITjBZWFJsYldWdWRITmJNRjB1Ykc5akxGeHVJQ0FnSUNBZ2JHRnpkRXh2WXlBOUlITjBZWFJsYldWdWRITmJjM1JoZEdWdFpXNTBjeTVzWlc1bmRHZ2dMU0F4WFM1c2IyTTdYRzVjYmlBZ0lDQXZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdaV3h6WlNBcUwxeHVJQ0FnSUdsbUlDaG1hWEp6ZEV4dll5QW1KaUJzWVhOMFRHOWpLU0I3WEc0Z0lDQWdJQ0JzYjJNZ1BTQjdYRzRnSUNBZ0lDQWdJSE52ZFhKalpUb2dabWx5YzNSTWIyTXVjMjkxY21ObExGeHVJQ0FnSUNBZ0lDQnpkR0Z5ZERvZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hwYm1VNklHWnBjbk4wVEc5akxuTjBZWEowTG14cGJtVXNYRzRnSUNBZ0lDQWdJQ0FnWTI5c2RXMXVPaUJtYVhKemRFeHZZeTV6ZEdGeWRDNWpiMngxYlc1Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdaVzVrT2lCN1hHNGdJQ0FnSUNBZ0lDQWdiR2x1WlRvZ2JHRnpkRXh2WXk1bGJtUXViR2x1WlN4Y2JpQWdJQ0FnSUNBZ0lDQmpiMngxYlc0NklHeGhjM1JNYjJNdVpXNWtMbU52YkhWdGJseHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlPMXh1SUNBZ0lIMWNiaUFnZlZ4dVhHNGdJSEpsZEhWeWJpQjdYRzRnSUNBZ2RIbHdaVG9nSjFCeWIyZHlZVzBuTEZ4dUlDQWdJR0p2WkhrNklITjBZWFJsYldWdWRITXNYRzRnSUNBZ2MzUnlhWEE2SUh0OUxGeHVJQ0FnSUd4dll6b2diRzlqWEc0Z0lIMDdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCd2NtVndZWEpsVUdGeWRHbGhiRUpzYjJOcktHOXdaVzRzSUhCeWIyZHlZVzBzSUdOc2IzTmxMQ0JzYjJOSmJtWnZLU0I3WEc0Z0lIWmhiR2xrWVhSbFEyeHZjMlVvYjNCbGJpd2dZMnh2YzJVcE8xeHVYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdkSGx3WlRvZ0oxQmhjblJwWVd4Q2JHOWphMU4wWVhSbGJXVnVkQ2NzWEc0Z0lDQWdibUZ0WlRvZ2IzQmxiaTV3WVhSb0xGeHVJQ0FnSUhCaGNtRnRjem9nYjNCbGJpNXdZWEpoYlhNc1hHNGdJQ0FnYUdGemFEb2diM0JsYmk1b1lYTm9MRnh1SUNBZ0lIQnliMmR5WVcwc1hHNGdJQ0FnYjNCbGJsTjBjbWx3T2lCdmNHVnVMbk4wY21sd0xGeHVJQ0FnSUdOc2IzTmxVM1J5YVhBNklHTnNiM05sSUNZbUlHTnNiM05sTG5OMGNtbHdMRnh1SUNBZ0lHeHZZem9nZEdocGN5NXNiMk5KYm1adktHeHZZMGx1Wm04cFhHNGdJSDA3WEc1OVhHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnBhcnNlV2l0aG91dFByb2Nlc3NpbmcgPSBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09ialsnZGVmYXVsdCddID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoJy4vcGFyc2VyJyk7XG5cbnZhciBfcGFyc2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhcnNlcik7XG5cbnZhciBfd2hpdGVzcGFjZUNvbnRyb2wgPSByZXF1aXJlKCcuL3doaXRlc3BhY2UtY29udHJvbCcpO1xuXG52YXIgX3doaXRlc3BhY2VDb250cm9sMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3doaXRlc3BhY2VDb250cm9sKTtcblxudmFyIF9oZWxwZXJzID0gcmVxdWlyZSgnLi9oZWxwZXJzJyk7XG5cbnZhciBIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hlbHBlcnMpO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuZXhwb3J0cy5wYXJzZXIgPSBfcGFyc2VyMlsnZGVmYXVsdCddO1xuXG52YXIgeXkgPSB7fTtcbl91dGlscy5leHRlbmQoeXksIEhlbHBlcnMpO1xuXG5mdW5jdGlvbiBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nKGlucHV0LCBvcHRpb25zKSB7XG4gIC8vIEp1c3QgcmV0dXJuIGlmIGFuIGFscmVhZHktY29tcGlsZWQgQVNUIHdhcyBwYXNzZWQgaW4uXG4gIGlmIChpbnB1dC50eXBlID09PSAnUHJvZ3JhbScpIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cblxuICBfcGFyc2VyMlsnZGVmYXVsdCddLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uIChsb2NJbmZvKSB7XG4gICAgcmV0dXJuIG5ldyB5eS5Tb3VyY2VMb2NhdGlvbihvcHRpb25zICYmIG9wdGlvbnMuc3JjTmFtZSwgbG9jSW5mbyk7XG4gIH07XG5cbiAgdmFyIGFzdCA9IF9wYXJzZXIyWydkZWZhdWx0J10ucGFyc2UoaW5wdXQpO1xuXG4gIHJldHVybiBhc3Q7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIHZhciBhc3QgPSBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nKGlucHV0LCBvcHRpb25zKTtcbiAgdmFyIHN0cmlwID0gbmV3IF93aGl0ZXNwYWNlQ29udHJvbDJbJ2RlZmF1bHQnXShvcHRpb25zKTtcblxuICByZXR1cm4gc3RyaXAuYWNjZXB0KGFzdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMk52YlhCcGJHVnlMMkpoYzJVdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096czdPenR6UWtGQmJVSXNWVUZCVlRzN096dHBRMEZEUXl4elFrRkJjMEk3T3pzN2RVSkJRek5DTEZkQlFWYzdPMGxCUVhoQ0xFOUJRVTg3TzNGQ1FVTkpMRlZCUVZVN08xRkJSWGhDTEUxQlFVMDdPMEZCUldZc1NVRkJTU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlExb3NZMEZCVHl4RlFVRkZMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJXSXNVMEZCVXl4elFrRkJjMElzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZPenRCUVVWeVJDeE5RVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1UwRkJVeXhGUVVGRk8wRkJRelZDTEZkQlFVOHNTMEZCU3l4RFFVRkRPMGRCUTJRN08wRkJSVVFzYzBKQlFVOHNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJRenM3TzBGQlIyWXNTVUZCUlN4RFFVRkRMRTlCUVU4c1IwRkJSeXhWUVVGVExFOUJRVThzUlVGQlJUdEJRVU0zUWl4WFFVRlBMRWxCUVVrc1JVRkJSU3hEUVVGRExHTkJRV01zUTBGQlF5eFBRVUZQTEVsQlFVa3NUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEhRVU51UlN4RFFVRkRPenRCUVVWR0xFMUJRVWtzUjBGQlJ5eEhRVUZITEc5Q1FVRlBMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6czdRVUZGT1VJc1UwRkJUeXhIUVVGSExFTkJRVU03UTBGRFdqczdRVUZGVFN4VFFVRlRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTzBGQlEzQkRMRTFCUVVrc1IwRkJSeXhIUVVGSExITkNRVUZ6UWl4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU5xUkN4TlFVRkpMRXRCUVVzc1IwRkJSeXh0UTBGQmMwSXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSVE5ETEZOQlFVOHNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dERRVU14UWlJc0ltWnBiR1VpT2lKaVlYTmxMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhCaGNuTmxjaUJtY205dElDY3VMM0JoY25ObGNpYzdYRzVwYlhCdmNuUWdWMmhwZEdWemNHRmpaVU52Ym5SeWIyd2dabkp2YlNBbkxpOTNhR2wwWlhOd1lXTmxMV052Ym5SeWIyd25PMXh1YVcxd2IzSjBJQ29nWVhNZ1NHVnNjR1Z5Y3lCbWNtOXRJQ2N1TDJobGJIQmxjbk1uTzF4dWFXMXdiM0owSUhzZ1pYaDBaVzVrSUgwZ1puSnZiU0FuTGk0dmRYUnBiSE1uTzF4dVhHNWxlSEJ2Y25RZ2V5QndZWEp6WlhJZ2ZUdGNibHh1YkdWMElIbDVJRDBnZTMwN1hHNWxlSFJsYm1Rb2VYa3NJRWhsYkhCbGNuTXBPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY0dGeWMyVlhhWFJvYjNWMFVISnZZMlZ6YzJsdVp5aHBibkIxZEN3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0F2THlCS2RYTjBJSEpsZEhWeWJpQnBaaUJoYmlCaGJISmxZV1I1TFdOdmJYQnBiR1ZrSUVGVFZDQjNZWE1nY0dGemMyVmtJR2x1TGx4dUlDQnBaaUFvYVc1d2RYUXVkSGx3WlNBOVBUMGdKMUJ5YjJkeVlXMG5LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHbHVjSFYwTzF4dUlDQjlYRzVjYmlBZ2NHRnljMlZ5TG5sNUlEMGdlWGs3WEc1Y2JpQWdMeThnUVd4MFpYSnBibWNnZEdobElITm9ZWEpsWkNCdlltcGxZM1FnYUdWeVpTd2dZblYwSUhSb2FYTWdhWE1nYjJzZ1lYTWdjR0Z5YzJWeUlHbHpJR0VnYzNsdVl5QnZjR1Z5WVhScGIyNWNiaUFnZVhrdWJHOWpTVzVtYnlBOUlHWjFibU4wYVc5dUtHeHZZMGx1Wm04cElIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lIbDVMbE52ZFhKalpVeHZZMkYwYVc5dUtHOXdkR2x2Ym5NZ0ppWWdiM0IwYVc5dWN5NXpjbU5PWVcxbExDQnNiMk5KYm1adktUdGNiaUFnZlR0Y2JseHVJQ0JzWlhRZ1lYTjBJRDBnY0dGeWMyVnlMbkJoY25ObEtHbHVjSFYwS1R0Y2JseHVJQ0J5WlhSMWNtNGdZWE4wTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjR0Z5YzJVb2FXNXdkWFFzSUc5d2RHbHZibk1wSUh0Y2JpQWdiR1YwSUdGemRDQTlJSEJoY25ObFYybDBhRzkxZEZCeWIyTmxjM05wYm1jb2FXNXdkWFFzSUc5d2RHbHZibk1wTzF4dUlDQnNaWFFnYzNSeWFYQWdQU0J1WlhjZ1YyaHBkR1Z6Y0dGalpVTnZiblJ5YjJ3b2IzQjBhVzl1Y3lrN1hHNWNiaUFnY21WMGRYSnVJSE4wY21sd0xtRmpZMlZ3ZENoaGMzUXBPMXh1ZlZ4dUlsMTlcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5Db21waWxlciA9IENvbXBpbGVyO1xuZXhwb3J0cy5wcmVjb21waWxlID0gcHJlY29tcGlsZTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgX2FzdCA9IHJlcXVpcmUoJy4vYXN0Jyk7XG5cbnZhciBfYXN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FzdCk7XG5cbnZhciBzbGljZSA9IFtdLnNsaWNlO1xuXG5mdW5jdGlvbiBDb21waWxlcigpIHt9XG5cbi8vIHRoZSBmb3VuZEhlbHBlciByZWdpc3RlciB3aWxsIGRpc2FtYmlndWF0ZSBoZWxwZXIgbG9va3VwIGZyb20gZmluZGluZyBhXG4vLyBmdW5jdGlvbiBpbiBhIGNvbnRleHQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBtdXN0YWNoZSBjb21wYXRpYmlsaXR5LCB3aGljaFxuLy8gcmVxdWlyZXMgdGhhdCBjb250ZXh0IGZ1bmN0aW9ucyBpbiBibG9ja3MgYXJlIGV2YWx1YXRlZCBieSBibG9ja0hlbHBlck1pc3NpbmcsXG4vLyBhbmQgdGhlbiBwcm9jZWVkIGFzIGlmIHRoZSByZXN1bHRpbmcgdmFsdWUgd2FzIHByb3ZpZGVkIHRvIGJsb2NrSGVscGVyTWlzc2luZy5cblxuQ29tcGlsZXIucHJvdG90eXBlID0ge1xuICBjb21waWxlcjogQ29tcGlsZXIsXG5cbiAgZXF1YWxzOiBmdW5jdGlvbiBlcXVhbHMob3RoZXIpIHtcbiAgICB2YXIgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgICAgb3RoZXJPcGNvZGUgPSBvdGhlci5vcGNvZGVzW2ldO1xuICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCAhYXJnRXF1YWxzKG9wY29kZS5hcmdzLCBvdGhlck9wY29kZS5hcmdzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Uga25vdyB0aGF0IGxlbmd0aCBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSB0d28gYXJyYXlzIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgdGllZFxuICAgIC8vIHRvIHRoZSBvcGNvZGUgYmVoYXZpb3IgYWJvdmUuXG4gICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuW2ldLmVxdWFscyhvdGhlci5jaGlsZHJlbltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIGd1aWQ6IDAsXG5cbiAgY29tcGlsZTogZnVuY3Rpb24gY29tcGlsZShwcm9ncmFtLCBvcHRpb25zKSB7XG4gICAgdGhpcy5zb3VyY2VOb2RlID0gW107XG4gICAgdGhpcy5vcGNvZGVzID0gW107XG4gICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdHJpbmdQYXJhbXMgPSBvcHRpb25zLnN0cmluZ1BhcmFtcztcbiAgICB0aGlzLnRyYWNrSWRzID0gb3B0aW9ucy50cmFja0lkcztcblxuICAgIG9wdGlvbnMuYmxvY2tQYXJhbXMgPSBvcHRpb25zLmJsb2NrUGFyYW1zIHx8IFtdO1xuXG4gICAgb3B0aW9ucy5rbm93bkhlbHBlcnMgPSBfdXRpbHMuZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIHtcbiAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICBibG9ja0hlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICBlYWNoOiB0cnVlLFxuICAgICAgJ2lmJzogdHJ1ZSxcbiAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICd3aXRoJzogdHJ1ZSxcbiAgICAgIGxvZzogdHJ1ZSxcbiAgICAgIGxvb2t1cDogdHJ1ZVxuICAgIH0sIG9wdGlvbnMua25vd25IZWxwZXJzKTtcblxuICAgIHJldHVybiB0aGlzLmFjY2VwdChwcm9ncmFtKTtcbiAgfSxcblxuICBjb21waWxlUHJvZ3JhbTogZnVuY3Rpb24gY29tcGlsZVByb2dyYW0ocHJvZ3JhbSkge1xuICAgIHZhciBjaGlsZENvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG4gICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICAgIGd1aWQgPSB0aGlzLmd1aWQrKztcblxuICAgIHRoaXMudXNlUGFydGlhbCA9IHRoaXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDtcblxuICAgIHRoaXMuY2hpbGRyZW5bZ3VpZF0gPSByZXN1bHQ7XG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCByZXN1bHQudXNlRGVwdGhzO1xuXG4gICAgcmV0dXJuIGd1aWQ7XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbiBhY2NlcHQobm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVW5rbm93biB0eXBlOiAnICsgbm9kZS50eXBlLCBub2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvdXJjZU5vZGUudW5zaGlmdChub2RlKTtcbiAgICB2YXIgcmV0ID0gdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICAgIHRoaXMuc291cmNlTm9kZS5zaGlmdCgpO1xuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgUHJvZ3JhbTogZnVuY3Rpb24gUHJvZ3JhbShwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICB2YXIgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgICAgYm9keUxlbmd0aCA9IGJvZHkubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmFjY2VwdChib2R5W2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXMuc2hpZnQoKTtcblxuICAgIHRoaXMuaXNTaW1wbGUgPSBib2R5TGVuZ3RoID09PSAxO1xuICAgIHRoaXMuYmxvY2tQYXJhbXMgPSBwcm9ncmFtLmJsb2NrUGFyYW1zID8gcHJvZ3JhbS5ibG9ja1BhcmFtcy5sZW5ndGggOiAwO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uIEJsb2NrU3RhdGVtZW50KGJsb2NrKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChibG9jayk7XG5cbiAgICB2YXIgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0sXG4gICAgICAgIGludmVyc2UgPSBibG9jay5pbnZlcnNlO1xuXG4gICAgcHJvZ3JhbSA9IHByb2dyYW0gJiYgdGhpcy5jb21waWxlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICBpbnZlcnNlID0gaW52ZXJzZSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGludmVyc2UpO1xuXG4gICAgdmFyIHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoYmxvY2spO1xuXG4gICAgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKGJsb2NrKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2Jsb2NrVmFsdWUnLCBibG9jay5wYXRoLm9yaWdpbmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihibG9jaywgcHJvZ3JhbSwgaW52ZXJzZSk7XG5cbiAgICAgIC8vIG5vdyB0aGF0IHRoZSBzaW1wbGUgbXVzdGFjaGUgaXMgcmVzb2x2ZWQsIHdlIG5lZWQgdG9cbiAgICAgIC8vIGV2YWx1YXRlIGl0IGJ5IGV4ZWN1dGluZyBgYmxvY2tIZWxwZXJNaXNzaW5nYFxuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdlbXB0eUhhc2gnKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdhbWJpZ3VvdXNCbG9ja1ZhbHVlJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpO1xuICB9LFxuXG4gIERlY29yYXRvckJsb2NrOiBmdW5jdGlvbiBEZWNvcmF0b3JCbG9jayhkZWNvcmF0b3IpIHtcbiAgICB2YXIgcHJvZ3JhbSA9IGRlY29yYXRvci5wcm9ncmFtICYmIHRoaXMuY29tcGlsZVByb2dyYW0oZGVjb3JhdG9yLnByb2dyYW0pO1xuICAgIHZhciBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKGRlY29yYXRvciwgcHJvZ3JhbSwgdW5kZWZpbmVkKSxcbiAgICAgICAgcGF0aCA9IGRlY29yYXRvci5wYXRoO1xuXG4gICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLm9wY29kZSgncmVnaXN0ZXJEZWNvcmF0b3InLCBwYXJhbXMubGVuZ3RoLCBwYXRoLm9yaWdpbmFsKTtcbiAgfSxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiBmdW5jdGlvbiBQYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgdmFyIHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgdmFyIHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsIHBhcnRpYWwpO1xuICAgIH0gZWxzZSBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZXhwbGljaXRQYXJ0aWFsQ29udGV4dCkge1xuICAgICAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMucHVzaCh7IHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsIHBhcnRzOiBbXSwgZGVwdGg6IDAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWxOYW1lID0gcGFydGlhbC5uYW1lLm9yaWdpbmFsLFxuICAgICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgdmFyIGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24gUGFydGlhbEJsb2NrU3RhdGVtZW50KHBhcnRpYWxCbG9jaykge1xuICAgIHRoaXMuUGFydGlhbFN0YXRlbWVudChwYXJ0aWFsQmxvY2spO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiBmdW5jdGlvbiBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZSkge1xuICAgIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSk7XG5cbiAgICBpZiAobXVzdGFjaGUuZXNjYXBlZCAmJiAhdGhpcy5vcHRpb25zLm5vRXNjYXBlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kRXNjYXBlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gICAgfVxuICB9LFxuICBEZWNvcmF0b3I6IGZ1bmN0aW9uIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24gQ29udGVudFN0YXRlbWVudChjb250ZW50KSB7XG4gICAgaWYgKGNvbnRlbnQudmFsdWUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgY29udGVudC52YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIENvbW1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIENvbW1lbnRTdGF0ZW1lbnQoKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbiBTdWJFeHByZXNzaW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgdmFyIHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24gYW1iaWd1b3VzU2V4cHIoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICB2YXIgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICAgIG5hbWUgPSBwYXRoLnBhcnRzWzBdLFxuICAgICAgICBpc0Jsb2NrID0gcHJvZ3JhbSAhPSBudWxsIHx8IGludmVyc2UgIT0gbnVsbDtcblxuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjY2VwdChwYXRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VBbWJpZ3VvdXMnLCBuYW1lLCBpc0Jsb2NrKTtcbiAgfSxcblxuICBzaW1wbGVTZXhwcjogZnVuY3Rpb24gc2ltcGxlU2V4cHIoc2V4cHIpIHtcbiAgICB2YXIgcGF0aCA9IHNleHByLnBhdGg7XG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdyZXNvbHZlUG9zc2libGVMYW1iZGEnKTtcbiAgfSxcblxuICBoZWxwZXJTZXhwcjogZnVuY3Rpb24gaGVscGVyU2V4cHIoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSksXG4gICAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLm9wY29kZSgnaW52b2tlS25vd25IZWxwZXInLCBwYXJhbXMubGVuZ3RoLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnWW91IHNwZWNpZmllZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgJyArIG5hbWUsIHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwsIF9hc3QyWydkZWZhdWx0J10uaGVscGVycy5zaW1wbGVJZChwYXRoKSk7XG4gICAgfVxuICB9LFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbiBQYXRoRXhwcmVzc2lvbihwYXRoKSB7XG4gICAgdGhpcy5hZGREZXB0aChwYXRoLmRlcHRoKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhdGguZGVwdGgpO1xuXG4gICAgdmFyIG5hbWUgPSBwYXRoLnBhcnRzWzBdLFxuICAgICAgICBzY29wZWQgPSBfYXN0MlsnZGVmYXVsdCddLmhlbHBlcnMuc2NvcGVkSWQocGF0aCksXG4gICAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBPbkNvbnRleHQnLCBwYXRoLnBhcnRzLCBwYXRoLmZhbHN5LCBwYXRoLnN0cmljdCwgc2NvcGVkKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24gU3RyaW5nTGl0ZXJhbChzdHJpbmcpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZycsIHN0cmluZy52YWx1ZSk7XG4gIH0sXG5cbiAgTnVtYmVyTGl0ZXJhbDogZnVuY3Rpb24gTnVtYmVyTGl0ZXJhbChudW1iZXIpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBudW1iZXIudmFsdWUpO1xuICB9LFxuXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbiBCb29sZWFuTGl0ZXJhbChib29sKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC52YWx1ZSk7XG4gIH0sXG5cbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24gVW5kZWZpbmVkTGl0ZXJhbCgpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uIE51bGxMaXRlcmFsKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24gSGFzaChoYXNoKSB7XG4gICAgdmFyIHBhaXJzID0gaGFzaC5wYWlycyxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbiBvcGNvZGUobmFtZSkge1xuICAgIHRoaXMub3Bjb2Rlcy5wdXNoKHtcbiAgICAgIG9wY29kZTogbmFtZSxcbiAgICAgIGFyZ3M6IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgIGxvYzogdGhpcy5zb3VyY2VOb2RlWzBdLmxvY1xuICAgIH0pO1xuICB9LFxuXG4gIGFkZERlcHRoOiBmdW5jdGlvbiBhZGREZXB0aChkZXB0aCkge1xuICAgIGlmICghZGVwdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVzZURlcHRocyA9IHRydWU7XG4gIH0sXG5cbiAgY2xhc3NpZnlTZXhwcjogZnVuY3Rpb24gY2xhc3NpZnlTZXhwcihzZXhwcikge1xuICAgIHZhciBpc1NpbXBsZSA9IF9hc3QyWydkZWZhdWx0J10uaGVscGVycy5zaW1wbGVJZChzZXhwci5wYXRoKTtcblxuICAgIHZhciBpc0Jsb2NrUGFyYW0gPSBpc1NpbXBsZSAmJiAhIXRoaXMuYmxvY2tQYXJhbUluZGV4KHNleHByLnBhdGgucGFydHNbMF0pO1xuXG4gICAgLy8gYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdHMgaWQgaXMgc2ltcGxlIChhIHNpbmdsZSBwYXJ0LCBub3QgYHRoaXNgIG9yIGAuLmApXG4gICAgdmFyIGlzSGVscGVyID0gIWlzQmxvY2tQYXJhbSAmJiBfYXN0MlsnZGVmYXVsdCddLmhlbHBlcnMuaGVscGVyRXhwcmVzc2lvbihzZXhwcik7XG5cbiAgICAvLyBpZiBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBidXQgbm90IGEgZGVmaW5pdGVcbiAgICAvLyBoZWxwZXIsIGl0IGlzIGFtYmlndW91cywgYW5kIHdpbGwgYmUgcmVzb2x2ZWQgaW4gYSBsYXRlclxuICAgIC8vIHBhc3Mgb3IgYXQgcnVudGltZS5cbiAgICB2YXIgaXNFbGlnaWJsZSA9ICFpc0Jsb2NrUGFyYW0gJiYgKGlzSGVscGVyIHx8IGlzU2ltcGxlKTtcblxuICAgIC8vIGlmIGFtYmlndW91cywgd2UgY2FuIHBvc3NpYmx5IHJlc29sdmUgdGhlIGFtYmlndWl0eSBub3dcbiAgICAvLyBBbiBlbGlnaWJsZSBoZWxwZXIgaXMgb25lIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGNvbXBsZXggcGF0aCwgaS5lLiBgdGhpcy5mb29gLCBgLi4vZm9vYCBldGMuXG4gICAgaWYgKGlzRWxpZ2libGUgJiYgIWlzSGVscGVyKSB7XG4gICAgICB2YXIgX25hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNbX25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbiBwdXNoUGFyYW1zKHBhcmFtcykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5wdXNoUGFyYW0ocGFyYW1zW2ldKTtcbiAgICB9XG4gIH0sXG5cbiAgcHVzaFBhcmFtOiBmdW5jdGlvbiBwdXNoUGFyYW0odmFsKSB7XG4gICAgdmFyIHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIHZhciBibG9ja1BhcmFtSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIV9hc3QyWydkZWZhdWx0J10uaGVscGVycy5zY29wZWRJZCh2YWwpICYmICF2YWwuZGVwdGgpIHtcbiAgICAgICAgICBibG9ja1BhcmFtSW5kZXggPSB0aGlzLmJsb2NrUGFyYW1JbmRleCh2YWwucGFydHNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChibG9ja1BhcmFtSW5kZXgpIHtcbiAgICAgICAgICB2YXIgYmxvY2tQYXJhbUNoaWxkID0gdmFsLnBhcnRzLnNsaWNlKDEpLmpvaW4oJy4nKTtcbiAgICAgICAgICB0aGlzLm9wY29kZSgncHVzaElkJywgJ0Jsb2NrUGFyYW0nLCBibG9ja1BhcmFtSW5kZXgsIGJsb2NrUGFyYW1DaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWwub3JpZ2luYWwgfHwgdmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlLnJlcGxhY2UpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJykucmVwbGFjZSgvXlxcLlxcLy8sICcnKS5yZXBsYWNlKC9eXFwuJC8sICcnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9wY29kZSgncHVzaElkJywgdmFsLnR5cGUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5hY2NlcHQodmFsKTtcbiAgICB9XG4gIH0sXG5cbiAgc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXM6IGZ1bmN0aW9uIHNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlLCBvbWl0RW1wdHkpIHtcbiAgICB2YXIgcGFyYW1zID0gc2V4cHIucGFyYW1zO1xuICAgIHRoaXMucHVzaFBhcmFtcyhwYXJhbXMpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG5cbiAgICBpZiAoc2V4cHIuaGFzaCkge1xuICAgICAgdGhpcy5hY2NlcHQoc2V4cHIuaGFzaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdlbXB0eUhhc2gnLCBvbWl0RW1wdHkpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH0sXG5cbiAgYmxvY2tQYXJhbUluZGV4OiBmdW5jdGlvbiBibG9ja1BhcmFtSW5kZXgobmFtZSkge1xuICAgIGZvciAodmFyIGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDsgZGVwdGggPCBsZW47IGRlcHRoKyspIHtcbiAgICAgIHZhciBibG9ja1BhcmFtcyA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtc1tkZXB0aF0sXG4gICAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBfdXRpbHMuaW5kZXhPZihibG9ja1BhcmFtcywgbmFtZSk7XG4gICAgICBpZiAoYmxvY2tQYXJhbXMgJiYgcGFyYW0gPj0gMCkge1xuICAgICAgICByZXR1cm4gW2RlcHRoLCBwYXJhbV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKGlucHV0ID09IG51bGwgfHwgdHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpIHtcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArIGlucHV0KTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgICAgZW52aXJvbm1lbnQgPSBuZXcgZW52LkNvbXBpbGVyKCkuY29tcGlsZShhc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7XG4gIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIG9wdGlvbnMgPSB7fTtcblxuICBpZiAoaW5wdXQgPT0gbnVsbCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJykge1xuICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICsgaW5wdXQpO1xuICB9XG5cbiAgb3B0aW9ucyA9IF91dGlscy5leHRlbmQoe30sIG9wdGlvbnMpO1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBjb21waWxlZCA9IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBjb21waWxlSW5wdXQoKSB7XG4gICAgdmFyIGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgICAgdGVtcGxhdGVTcGVjID0gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIHJldHVybiBlbnYudGVtcGxhdGUodGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIC8vIFRlbXBsYXRlIGlzIG9ubHkgY29tcGlsZWQgb24gZmlyc3QgdXNlIGFuZCBjYWNoZWQgYWZ0ZXIgdGhhdCBwb2ludC5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIGV4ZWNPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLmNhbGwodGhpcywgY29udGV4dCwgZXhlY09wdGlvbnMpO1xuICB9XG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbiAoc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24gKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAoIWNvbXBpbGVkKSB7XG4gICAgICBjb21waWxlZCA9IGNvbXBpbGVJbnB1dCgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQuX2NoaWxkKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBhcmdFcXVhbHMoYSwgYikge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKF91dGlscy5pc0FycmF5KGEpICYmIF91dGlscy5pc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIHZhciBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMk52YlhCcGJHVnlMMk52YlhCcGJHVnlMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3T3p0NVFrRkZjMElzWTBGQll6czdPenR4UWtGRFN5eFZRVUZWT3p0dFFrRkRia01zVDBGQlR6czdPenRCUVVWMlFpeEpRVUZOTEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRE96dEJRVVZvUWl4VFFVRlRMRkZCUVZFc1IwRkJSeXhGUVVGRk96czdPenM3TzBGQlR6ZENMRkZCUVZFc1EwRkJReXhUUVVGVExFZEJRVWM3UVVGRGJrSXNWVUZCVVN4RlFVRkZMRkZCUVZFN08wRkJSV3hDTEZGQlFVMHNSVUZCUlN4blFrRkJVeXhMUVVGTExFVkJRVVU3UVVGRGRFSXNVVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZET1VJc1VVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNTMEZCU3l4SFFVRkhMRVZCUVVVN1FVRkRhRU1zWVVGQlR5eExRVUZMTEVOQlFVTTdTMEZEWkRzN1FVRkZSQ3hUUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlF6VkNMRlZCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMVZCUXpGQ0xGZEJRVmNzUjBGQlJ5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRMnBETEZWQlEwVXNUVUZCVFN4RFFVRkRMRTFCUVUwc1MwRkJTeXhYUVVGWExFTkJRVU1zVFVGQlRTeEpRVU53UXl4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeEZRVUZGTEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkRla003UVVGRFFTeGxRVUZQTEV0QlFVc3NRMEZCUXp0UFFVTmtPMHRCUTBZN096czdRVUZKUkN4UFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVOQlFVTTdRVUZETTBJc1UwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU0xUWl4VlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMEZCUXk5RExHVkJRVThzUzBGQlN5eERRVUZETzA5QlEyUTdTMEZEUmpzN1FVRkZSQ3hYUVVGUExFbEJRVWtzUTBGQlF6dEhRVU5pT3p0QlFVVkVMRTFCUVVrc1JVRkJSU3hEUVVGRE96dEJRVVZRTEZOQlFVOHNSVUZCUlN4cFFrRkJVeXhQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZGTzBGQlEyeERMRkZCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEzSkNMRkZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyeENMRkZCUVVrc1EwRkJReXhSUVVGUkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEyNUNMRkZCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETzBGQlEzWkNMRkZCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXp0QlFVTjZReXhSUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNN08wRkJSV3BETEZkQlFVOHNRMEZCUXl4WFFVRlhMRWRCUVVjc1QwRkJUeXhEUVVGRExGZEJRVmNzU1VGQlNTeEZRVUZGTEVOQlFVTTdPMEZCUldoRUxGZEJRVThzUTBGQlF5eFpRVUZaTEVkQlFVY3NZMEZEY2tJc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZEYmtJN1FVRkRSU3h0UWtGQllTeEZRVUZGTEVsQlFVazdRVUZEYmtJc2QwSkJRV3RDTEVWQlFVVXNTVUZCU1R0QlFVTjRRaXhWUVVGSkxFVkJRVVVzU1VGQlNUdEJRVU5XTEZsQlFVa3NTVUZCU1R0QlFVTlNMRmxCUVUwc1JVRkJSU3hKUVVGSk8wRkJRMW9zWTBGQlRTeEpRVUZKTzBGQlExWXNVMEZCUnl4RlFVRkZMRWxCUVVrN1FVRkRWQ3haUVVGTkxFVkJRVVVzU1VGQlNUdExRVU5pTEVWQlEwUXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkRja0lzUTBGQlF6czdRVUZGUml4WFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdSMEZETjBJN08wRkJSVVFzWjBKQlFXTXNSVUZCUlN4M1FrRkJVeXhQUVVGUExFVkJRVVU3UVVGRGFFTXNVVUZCU1N4aFFVRmhMRWRCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGT3p0QlFVTnlReXhWUVVGTkxFZEJRVWNzWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dFJRVU55UkN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZET3p0QlFVVnlRaXhSUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRWxCUVVrc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF6czdRVUZGZGtRc1VVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNN1FVRkROMElzVVVGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhKUVVGSkxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTTdPMEZCUlhCRUxGZEJRVThzU1VGQlNTeERRVUZETzBkQlEySTdPMEZCUlVRc1VVRkJUU3hGUVVGRkxHZENRVUZUTEVsQlFVa3NSVUZCUlRzN1FVRkZja0lzVVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVU3UVVGRGNFSXNXVUZCVFN3eVFrRkJZeXhuUWtGQlowSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzcEVPenRCUVVWRUxGRkJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRemxDTEZGQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRhRU1zVVVGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJRenRCUVVONFFpeFhRVUZQTEVkQlFVY3NRMEZCUXp0SFFVTmFPenRCUVVWRUxGTkJRVThzUlVGQlJTeHBRa0ZCVXl4UFFVRlBMRVZCUVVVN1FVRkRla0lzVVVGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXpzN1FVRkZkRVFzVVVGQlNTeEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRMRWxCUVVrN1VVRkRja0lzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRNMElzVTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTnVReXhWUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM1JDT3p0QlFVVkVMRkZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRPenRCUVVWcVF5eFJRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZVc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGFrTXNVVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhQUVVGUExFTkJRVU1zVjBGQlZ5eEhRVUZITEU5QlFVOHNRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6czdRVUZGZUVVc1YwRkJUeXhKUVVGSkxFTkJRVU03UjBGRFlqczdRVUZGUkN4blFrRkJZeXhGUVVGRkxIZENRVUZUTEV0QlFVc3NSVUZCUlR0QlFVTTVRaXd3UWtGQmMwSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenM3UVVGRk9VSXNVVUZCU1N4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVTg3VVVGRGVrSXNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU03TzBGQlJURkNMRmRCUVU4c1IwRkJSeXhQUVVGUExFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOc1JDeFhRVUZQTEVkQlFVY3NUMEZCVHl4SlFVRkpMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdPMEZCUld4RUxGRkJRVWtzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJYSkRMRkZCUVVrc1NVRkJTU3hMUVVGTExGRkJRVkVzUlVGQlJUdEJRVU55UWl4VlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1MwRkRNME1zVFVGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4UlFVRlJMRVZCUVVVN1FVRkROVUlzVlVGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenM3T3p0QlFVbDRRaXhWUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOd1F5eFZRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR0ZCUVdFc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU53UXl4VlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzBGQlEzcENMRlZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zV1VGQldTeEZRVUZGTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UzBGRGFFUXNUVUZCVFR0QlFVTk1MRlZCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenM3T3p0QlFVazNReXhWUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOd1F5eFZRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR0ZCUVdFc1JVRkJSU3hQUVVGUExFTkJRVU1zUTBGQlF6dEJRVU53UXl4VlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETzBGQlEzcENMRlZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1EwRkJRenRMUVVOd1F6czdRVUZGUkN4UlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzBkQlEzWkNPenRCUVVWRUxHZENRVUZqTEVWQlFVRXNkMEpCUVVNc1UwRkJVeXhGUVVGRk8wRkJRM2hDTEZGQlFVa3NUMEZCVHl4SFFVRkhMRk5CUVZNc1EwRkJReXhQUVVGUExFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03UVVGRE1VVXNVVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExIVkNRVUYxUWl4RFFVRkRMRk5CUVZNc1JVRkJSU3hQUVVGUExFVkJRVVVzVTBGQlV5eERRVUZETzFGQlEzUkZMRWxCUVVrc1IwRkJSeXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZET3p0QlFVVjRRaXhSUVVGSkxFTkJRVU1zWVVGQllTeEhRVUZITEVsQlFVa3NRMEZCUXp0QlFVTXhRaXhSUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEcxQ1FVRnRRaXhGUVVGRkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8wZEJRMmhGT3p0QlFVVkVMR3RDUVVGblFpeEZRVUZGTERCQ1FVRlRMRTlCUVU4c1JVRkJSVHRCUVVOc1F5eFJRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJRenM3UVVGRmRrSXNVVUZCU1N4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF6dEJRVU01UWl4UlFVRkpMRTlCUVU4c1JVRkJSVHRCUVVOWUxHRkJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dExRVU5vUkRzN1FVRkZSQ3hSUVVGSkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRPMEZCUXpWQ0xGRkJRVWtzVFVGQlRTeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkRja0lzV1VGQlRTd3lRa0ZEU2l3eVEwRkJNa01zUjBGQlJ5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVTXpSQ3hQUVVGUExFTkJRMUlzUTBGQlF6dExRVU5JTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRGVrSXNWVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExITkNRVUZ6UWl4RlFVRkZPMEZCUTNaRExGbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNZVUZCWVN4RlFVRkZMRmRCUVZjc1EwRkJReXhEUVVGRE8wOUJRM3BETEUxQlFVMDdRVUZEVEN4alFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03VDBGRE9VUTdTMEZEUmpzN1FVRkZSQ3hSUVVGSkxGZEJRVmNzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFN1VVRkRja01zVTBGQlV5eEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hMUVVGTExHVkJRV1VzUTBGQlF6dEJRVU53UkN4UlFVRkpMRk5CUVZNc1JVRkJSVHRCUVVOaUxGVkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRek5DT3p0QlFVVkVMRkZCUVVrc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXpzN1FVRkZhRVVzVVVGQlNTeE5RVUZOTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRGJFTXNVVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExHRkJRV0VzU1VGQlNTeE5RVUZOTEVWQlFVVTdRVUZEZUVNc1ZVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eGxRVUZsTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1FVRkRja01zV1VGQlRTeEhRVUZITEVWQlFVVXNRMEZCUXp0TFFVTmlPenRCUVVWRUxGRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNaVUZCWlN4RlFVRkZMRk5CUVZNc1JVRkJSU3hYUVVGWExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETjBRc1VVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0SFFVTjJRanRCUVVORUxIVkNRVUZ4UWl4RlFVRkZMQ3RDUVVGVExGbEJRVmtzUlVGQlJUdEJRVU0xUXl4UlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1IwRkRja003TzBGQlJVUXNiVUpCUVdsQ0xFVkJRVVVzTWtKQlFWTXNVVUZCVVN4RlFVRkZPMEZCUTNCRExGRkJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN08wRkJSVGRDTEZGQlFVa3NVVUZCVVN4RFFVRkRMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUXpsRExGVkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNN1MwRkRPVUlzVFVGQlRUdEJRVU5NTEZWQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UzBGRGRrSTdSMEZEUmp0QlFVTkVMRmRCUVZNc1JVRkJRU3h0UWtGQlF5eFRRVUZUTEVWQlFVVTdRVUZEYmtJc1VVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0SFFVTm9RenM3UVVGRlJDeHJRa0ZCWjBJc1JVRkJSU3d3UWtGQlV5eFBRVUZQTEVWQlFVVTdRVUZEYkVNc1VVRkJTU3hQUVVGUExFTkJRVU1zUzBGQlN5eEZRVUZGTzBGQlEycENMRlZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWlVGQlpTeEZRVUZGTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRMUVVNM1F6dEhRVU5HT3p0QlFVVkVMR3RDUVVGblFpeEZRVUZGTERSQ1FVRlhMRVZCUVVVN08wRkJSUzlDTEdWQlFXRXNSVUZCUlN4MVFrRkJVeXhMUVVGTExFVkJRVVU3UVVGRE4wSXNNRUpCUVhOQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZET1VJc1VVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenM3UVVGRmNrTXNVVUZCU1N4SlFVRkpMRXRCUVVzc1VVRkJVU3hGUVVGRk8wRkJRM0pDTEZWQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UzBGRGVrSXNUVUZCVFN4SlFVRkpMRWxCUVVrc1MwRkJTeXhSUVVGUkxFVkJRVVU3UVVGRE5VSXNWVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dExRVU42UWl4TlFVRk5PMEZCUTB3c1ZVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0TFFVTTFRanRIUVVOR08wRkJRMFFzWjBKQlFXTXNSVUZCUlN4M1FrRkJVeXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTm9SQ3hSUVVGSkxFbEJRVWtzUjBGQlJ5eExRVUZMTEVOQlFVTXNTVUZCU1R0UlFVTnVRaXhKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRjRUlzVDBGQlR5eEhRVUZITEU5QlFVOHNTVUZCU1N4SlFVRkpMRWxCUVVrc1QwRkJUeXhKUVVGSkxFbEJRVWtzUTBGQlF6czdRVUZGTDBNc1VVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVYwUXl4UlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHRkJRV0VzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTndReXhSUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenM3UVVGRmNFTXNVVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRGJrSXNVVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGYkVJc1VVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSU3hKUVVGSkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdSMEZETDBNN08wRkJSVVFzWVVGQlZ5eEZRVUZGTEhGQ1FVRlRMRXRCUVVzc1JVRkJSVHRCUVVNelFpeFJRVUZKTEVsQlFVa3NSMEZCUnl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRM1JDTEZGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRMjVDTEZGQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGJFSXNVVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4RFFVRkRPMGRCUTNSRE96dEJRVVZFTEdGQlFWY3NSVUZCUlN4eFFrRkJVeXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTTNReXhSUVVGSkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRU5CUVVNN1VVRkRhRVVzU1VGQlNTeEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpPMUZCUTJwQ0xFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96dEJRVVYyUWl4UlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZPMEZCUTI1RExGVkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVOMlJDeE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhuUWtGQlowSXNSVUZCUlR0QlFVTjRReXhaUVVGTkxESkNRVU5LTERoRVFVRTRSQ3hIUVVGSExFbEJRVWtzUlVGRGNrVXNTMEZCU3l4RFFVTk9MRU5CUVVNN1MwRkRTQ3hOUVVGTk8wRkJRMHdzVlVGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRia0lzVlVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNN08wRkJSV3hDTEZWQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGJFSXNWVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkRWQ3hqUVVGakxFVkJRMlFzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZEWWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVOaUxHbENRVUZKTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRek5DTEVOQlFVTTdTMEZEU0R0SFFVTkdPenRCUVVWRUxHZENRVUZqTEVWQlFVVXNkMEpCUVZNc1NVRkJTU3hGUVVGRk8wRkJRemRDTEZGQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzBGQlF6RkNMRkZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zV1VGQldTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenM3UVVGRmRFTXNVVUZCU1N4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZEVJc1RVRkJUU3hIUVVGSExHbENRVUZKTEU5QlFVOHNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRMjVETEZsQlFWa3NSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF5eE5RVUZOTEVsQlFVa3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGZEVVc1VVRkJTU3haUVVGWkxFVkJRVVU3UVVGRGFFSXNWVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4WlFVRlpMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzB0QlF6TkVMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUlVGQlJUczdRVUZGYUVJc1ZVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0TFFVTTFRaXhOUVVGTkxFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlR0QlFVTndRaXhWUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNN1FVRkRla0lzVlVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4WlFVRlpMRVZCUVVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dExRVU5vUlN4TlFVRk5PMEZCUTB3c1ZVRkJTU3hEUVVGRExFMUJRVTBzUTBGRFZDeHBRa0ZCYVVJc1JVRkRha0lzU1VGQlNTeERRVUZETEV0QlFVc3NSVUZEVml4SlFVRkpMRU5CUVVNc1MwRkJTeXhGUVVOV0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlExZ3NUVUZCVFN4RFFVTlFMRU5CUVVNN1MwRkRTRHRIUVVOR096dEJRVVZFTEdWQlFXRXNSVUZCUlN4MVFrRkJVeXhOUVVGTkxFVkJRVVU3UVVGRE9VSXNVVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhaUVVGWkxFVkJRVVVzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGRCUTNwRE96dEJRVVZFTEdWQlFXRXNSVUZCUlN4MVFrRkJVeXhOUVVGTkxFVkJRVVU3UVVGRE9VSXNVVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhoUVVGaExFVkJRVVVzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGRCUXpGRE96dEJRVVZFTEdkQ1FVRmpMRVZCUVVVc2QwSkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF6ZENMRkZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRIUVVONFF6czdRVUZGUkN4clFrRkJaMElzUlVGQlJTdzBRa0ZCVnp0QlFVTXpRaXhSUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNSVUZCUlN4WFFVRlhMRU5CUVVNc1EwRkJRenRIUVVONlF6czdRVUZGUkN4aFFVRlhMRVZCUVVVc2RVSkJRVmM3UVVGRGRFSXNVVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhoUVVGaExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdSMEZEY0VNN08wRkJSVVFzVFVGQlNTeEZRVUZGTEdOQlFWTXNTVUZCU1N4RlFVRkZPMEZCUTI1Q0xGRkJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxPMUZCUTNCQ0xFTkJRVU1zUjBGQlJ5eERRVUZETzFGQlEwd3NRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03TzBGQlJXNUNMRkZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTTdPMEZCUlhoQ0xGZEJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOcVFpeFZRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0TFFVTm9RenRCUVVORUxGZEJRVThzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZEVml4VlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03UzBGRE0wTTdRVUZEUkN4UlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBkQlEzaENPenM3UVVGSFJDeFJRVUZOTEVWQlFVVXNaMEpCUVZNc1NVRkJTU3hGUVVGRk8wRkJRM0pDTEZGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRE8wRkJRMmhDTEZsQlFVMHNSVUZCUlN4SlFVRkpPMEZCUTFvc1ZVRkJTU3hGUVVGRkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVNNVFpeFRRVUZITEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITzB0QlF6VkNMRU5CUVVNc1EwRkJRenRIUVVOS096dEJRVVZFTEZWQlFWRXNSVUZCUlN4clFrRkJVeXhMUVVGTExFVkJRVVU3UVVGRGVFSXNVVUZCU1N4RFFVRkRMRXRCUVVzc1JVRkJSVHRCUVVOV0xHRkJRVTg3UzBGRFVqczdRVUZGUkN4UlFVRkpMRU5CUVVNc1UwRkJVeXhIUVVGSExFbEJRVWtzUTBGQlF6dEhRVU4yUWpzN1FVRkZSQ3hsUVVGaExFVkJRVVVzZFVKQlFWTXNTMEZCU3l4RlFVRkZPMEZCUXpkQ0xGRkJRVWtzVVVGQlVTeEhRVUZITEdsQ1FVRkpMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPenRCUVVWb1JDeFJRVUZKTEZsQlFWa3NSMEZCUnl4UlFVRlJMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzN096dEJRVWt6UlN4UlFVRkpMRkZCUVZFc1IwRkJSeXhEUVVGRExGbEJRVmtzU1VGQlNTeHBRa0ZCU1N4UFFVRlBMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN096czdPMEZCUzNCRkxGRkJRVWtzVlVGQlZTeEhRVUZITEVOQlFVTXNXVUZCV1N4TFFVRkxMRkZCUVZFc1NVRkJTU3hSUVVGUkxFTkJRVUVzUVVGQlF5eERRVUZET3pzN08wRkJTWHBFTEZGQlFVa3NWVUZCVlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRk8wRkJRek5DTEZWQlFVa3NTMEZCU1N4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0VlFVTTFRaXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXp0QlFVTjZRaXhWUVVGSkxFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCU1N4RFFVRkRMRVZCUVVVN1FVRkRPVUlzWjBKQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNN1QwRkRha0lzVFVGQlRTeEpRVUZKTEU5QlFVOHNRMEZCUXl4blFrRkJaMElzUlVGQlJUdEJRVU51UXl4clFrRkJWU3hIUVVGSExFdEJRVXNzUTBGQlF6dFBRVU53UWp0TFFVTkdPenRCUVVWRUxGRkJRVWtzVVVGQlVTeEZRVUZGTzBGQlExb3NZVUZCVHl4UlFVRlJMRU5CUVVNN1MwRkRha0lzVFVGQlRTeEpRVUZKTEZWQlFWVXNSVUZCUlR0QlFVTnlRaXhoUVVGUExGZEJRVmNzUTBGQlF6dExRVU53UWl4TlFVRk5PMEZCUTB3c1lVRkJUeXhSUVVGUkxFTkJRVU03UzBGRGFrSTdSMEZEUmpzN1FVRkZSQ3haUVVGVkxFVkJRVVVzYjBKQlFWTXNUVUZCVFN4RlFVRkZPMEZCUXpOQ0xGTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRE4wTXNWVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0TFFVTXpRanRIUVVOR096dEJRVVZFTEZkQlFWTXNSVUZCUlN4dFFrRkJVeXhIUVVGSExFVkJRVVU3UVVGRGRrSXNVVUZCU1N4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zVVVGQlVTeEpRVUZKTEVWQlFVVXNRMEZCUXpzN1FVRkZMMFFzVVVGQlNTeEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZPMEZCUTNKQ0xGVkJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlR0QlFVTnFRaXhoUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4alFVRmpMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRQUVVNdlJEczdRVUZGUkN4VlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVU3UVVGRFlpeFpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFBRVU14UWp0QlFVTkVMRlZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zV1VGQldTeEZRVUZGTEVkQlFVY3NRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRE1VTXNWVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZET3p0QlFVVm9SQ3hWUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTEV0QlFVc3NaVUZCWlN4RlFVRkZPenM3UVVGSGFFTXNXVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFBRVU5zUWp0TFFVTkdMRTFCUVUwN1FVRkRUQ3hWUVVGSkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdRVUZEYWtJc1dVRkJTU3hsUVVGbExGbEJRVUVzUTBGQlF6dEJRVU53UWl4WlFVRkpMRWRCUVVjc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF5eHBRa0ZCU1N4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRXRCUVVzc1JVRkJSVHRCUVVONlJDeDVRa0ZCWlN4SFFVRkhMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JFTzBGQlEwUXNXVUZCU1N4bFFVRmxMRVZCUVVVN1FVRkRia0lzWTBGQlNTeGxRVUZsTEVkQlFVY3NSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMjVFTEdOQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hGUVVGRkxGbEJRVmtzUlVGQlJTeGxRVUZsTEVWQlFVVXNaVUZCWlN4RFFVRkRMRU5CUVVNN1UwRkRka1VzVFVGQlRUdEJRVU5NTEdWQlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNc1VVRkJVU3hKUVVGSkxFdEJRVXNzUTBGQlF6dEJRVU01UWl4alFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFVkJRVVU3UVVGRGFrSXNhVUpCUVVzc1IwRkJSeXhMUVVGTExFTkJRMVlzVDBGQlR5eERRVUZETEdWQlFXVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkROVUlzVDBGQlR5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkRjRUlzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRYUVVONFFqczdRVUZGUkN4alFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGRkJRVkVzUlVGQlJTeEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xTkJRM2hETzA5QlEwWTdRVUZEUkN4VlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlEyeENPMGRCUTBZN08wRkJSVVFzZVVKQlFYVkNMRVZCUVVVc2FVTkJRVk1zUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVc1UwRkJVeXhGUVVGRk8wRkJRM0JGTEZGQlFVa3NUVUZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRE1VSXNVVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6czdRVUZGZUVJc1VVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1FVRkRjRU1zVVVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4aFFVRmhMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03TzBGQlJYQkRMRkZCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU5rTEZWQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzcENMRTFCUVUwN1FVRkRUQ3hWUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZkQlFWY3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRMUVVOeVF6czdRVUZGUkN4WFFVRlBMRTFCUVUwc1EwRkJRenRIUVVObU96dEJRVVZFTEdsQ1FVRmxMRVZCUVVVc2VVSkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF6bENMRk5CUTBVc1NVRkJTU3hMUVVGTExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eE5RVUZOTEVWQlEzQkVMRXRCUVVzc1IwRkJSeXhIUVVGSExFVkJRMWdzUzBGQlN5eEZRVUZGTEVWQlExQTdRVUZEUVN4VlFVRkpMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxMRU5CUVVNN1ZVRkRMME1zUzBGQlN5eEhRVUZITEZkQlFWY3NTVUZCU1N4bFFVRlJMRmRCUVZjc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU53UkN4VlFVRkpMRmRCUVZjc1NVRkJTU3hMUVVGTExFbEJRVWtzUTBGQlF5eEZRVUZGTzBGQlF6ZENMR1ZCUVU4c1EwRkJReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdUMEZEZGtJN1MwRkRSanRIUVVOR08wTkJRMFlzUTBGQlF6czdRVUZGU3l4VFFVRlRMRlZCUVZVc1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEVkQlFVY3NSVUZCUlR0QlFVTTVReXhOUVVORkxFdEJRVXNzU1VGQlNTeEpRVUZKTEVsQlExb3NUMEZCVHl4TFFVRkxMRXRCUVVzc1VVRkJVU3hKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEV0QlFVc3NVMEZCVXl4QlFVRkRMRVZCUTNaRU8wRkJRMEVzVlVGQlRTd3lRa0ZEU2l4blJrRkJaMFlzUjBGRE9VVXNTMEZCU3l4RFFVTlNMRU5CUVVNN1IwRkRTRHM3UVVGRlJDeFRRVUZQTEVkQlFVY3NUMEZCVHl4SlFVRkpMRVZCUVVVc1EwRkJRenRCUVVONFFpeE5RVUZKTEVWQlFVVXNUVUZCVFN4SlFVRkpMRTlCUVU4c1EwRkJRU3hCUVVGRExFVkJRVVU3UVVGRGVFSXNWMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03UjBGRGNrSTdRVUZEUkN4TlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRGJFSXNWMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU03UjBGRE1VSTdPMEZCUlVRc1RVRkJTU3hIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRE8wMUJRMnBETEZkQlFWY3NSMEZCUnl4SlFVRkpMRWRCUVVjc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRM3BFTEZOQlFVOHNTVUZCU1N4SFFVRkhMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBOQlEyNUZPenRCUVVWTkxGTkJRVk1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4UFFVRlBMRVZCUVU4c1IwRkJSeXhGUVVGRk8wMUJRVzVDTEU5QlFVOHNaMEpCUVZBc1QwRkJUeXhIUVVGSExFVkJRVVU3TzBGQlEzcERMRTFCUTBVc1MwRkJTeXhKUVVGSkxFbEJRVWtzU1VGRFdpeFBRVUZQTEV0QlFVc3NTMEZCU3l4UlFVRlJMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eFRRVUZUTEVGQlFVTXNSVUZEZGtRN1FVRkRRU3hWUVVGTkxESkNRVU5LTERaRlFVRTJSU3hIUVVNelJTeExRVUZMTEVOQlExSXNRMEZCUXp0SFFVTklPenRCUVVWRUxGTkJRVThzUjBGQlJ5eGpRVUZQTEVWQlFVVXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVNNVFpeE5RVUZKTEVWQlFVVXNUVUZCVFN4SlFVRkpMRTlCUVU4c1EwRkJRU3hCUVVGRExFVkJRVVU3UVVGRGVFSXNWMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU03UjBGRGNrSTdRVUZEUkN4TlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFVkJRVVU3UVVGRGJFSXNWMEZCVHl4RFFVRkRMRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU03UjBGRE1VSTdPMEZCUlVRc1RVRkJTU3hSUVVGUkxGbEJRVUVzUTBGQlF6czdRVUZGWWl4WFFVRlRMRmxCUVZrc1IwRkJSenRCUVVOMFFpeFJRVUZKTEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVOQlFVTTdVVUZEYWtNc1YwRkJWeXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzVDBGQlR5eERRVUZETzFGQlEzUkVMRmxCUVZrc1IwRkJSeXhKUVVGSkxFZEJRVWNzUTBGQlF5eHJRa0ZCYTBJc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGRGFrUXNWMEZCVnl4RlFVTllMRTlCUVU4c1JVRkRVQ3hUUVVGVExFVkJRMVFzU1VGQlNTeERRVU5NTEVOQlFVTTdRVUZEU2l4WFFVRlBMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdSMEZEYmtNN096dEJRVWRFTEZkQlFWTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJSU3hYUVVGWExFVkJRVVU3UVVGRGFrTXNVVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSVHRCUVVOaUxHTkJRVkVzUjBGQlJ5eFpRVUZaTEVWQlFVVXNRMEZCUXp0TFFVTXpRanRCUVVORUxGZEJRVThzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzBkQlEyeEVPMEZCUTBRc1MwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZUTEZsQlFWa3NSVUZCUlR0QlFVTnNReXhSUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEySXNZMEZCVVN4SFFVRkhMRmxCUVZrc1JVRkJSU3hEUVVGRE8wdEJRek5DTzBGQlEwUXNWMEZCVHl4UlFVRlJMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBkQlEzUkRMRU5CUVVNN1FVRkRSaXhMUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEZWQlFWTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hYUVVGWExFVkJRVVVzVFVGQlRTeEZRVUZGTzBGQlEyeEVMRkZCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRFlpeGpRVUZSTEVkQlFVY3NXVUZCV1N4RlFVRkZMRU5CUVVNN1MwRkRNMEk3UVVGRFJDeFhRVUZQTEZGQlFWRXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeFhRVUZYTEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1IwRkRkRVFzUTBGQlF6dEJRVU5HTEZOQlFVOHNSMEZCUnl4RFFVRkRPME5CUTFvN08wRkJSVVFzVTBGQlV5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSVHRCUVVOMlFpeE5RVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVN1FVRkRXQ3hYUVVGUExFbEJRVWtzUTBGQlF6dEhRVU5pT3p0QlFVVkVMRTFCUVVrc1pVRkJVU3hEUVVGRExFTkJRVU1zU1VGQlNTeGxRVUZSTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhOUVVGTkxFdEJRVXNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTnlSQ3hUUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTnFReXhWUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0QlFVTXhRaXhsUVVGUExFdEJRVXNzUTBGQlF6dFBRVU5rTzB0QlEwWTdRVUZEUkN4WFFVRlBMRWxCUVVrc1EwRkJRenRIUVVOaU8wTkJRMFk3TzBGQlJVUXNVMEZCVXl4elFrRkJjMElzUTBGQlF5eExRVUZMTEVWQlFVVTdRVUZEY2tNc1RVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RlFVRkZPMEZCUTNKQ0xGRkJRVWtzVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNN096dEJRVWQ2UWl4VFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSE8wRkJRMWdzVlVGQlNTeEZRVUZGTEdkQ1FVRm5RanRCUVVOMFFpeFZRVUZKTEVWQlFVVXNTMEZCU3p0QlFVTllMRmRCUVVzc1JVRkJSU3hEUVVGRE8wRkJRMUlzVjBGQlN5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRE9VSXNZMEZCVVN4RlFVRkZMRTlCUVU4c1EwRkJReXhSUVVGUkxFZEJRVWNzUlVGQlJUdEJRVU12UWl4VFFVRkhMRVZCUVVVc1QwRkJUeXhEUVVGRExFZEJRVWM3UzBGRGFrSXNRMEZCUXp0SFFVTklPME5CUTBZaUxDSm1hV3hsSWpvaVkyOXRjR2xzWlhJdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0J1WlhjdFkyRndJQ292WEc1Y2JtbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk0dlpYaGpaWEIwYVc5dUp6dGNibWx0Y0c5eWRDQjdJR2x6UVhKeVlYa3NJR2x1WkdWNFQyWXNJR1Y0ZEdWdVpDQjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibWx0Y0c5eWRDQkJVMVFnWm5KdmJTQW5MaTloYzNRbk8xeHVYRzVqYjI1emRDQnpiR2xqWlNBOUlGdGRMbk5zYVdObE8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdRMjl0Y0dsc1pYSW9LU0I3ZlZ4dVhHNHZMeUIwYUdVZ1ptOTFibVJJWld4d1pYSWdjbVZuYVhOMFpYSWdkMmxzYkNCa2FYTmhiV0pwWjNWaGRHVWdhR1ZzY0dWeUlHeHZiMnQxY0NCbWNtOXRJR1pwYm1ScGJtY2dZVnh1THk4Z1puVnVZM1JwYjI0Z2FXNGdZU0JqYjI1MFpYaDBMaUJVYUdseklHbHpJRzVsWTJWemMyRnllU0JtYjNJZ2JYVnpkR0ZqYUdVZ1kyOXRjR0YwYVdKcGJHbDBlU3dnZDJocFkyaGNiaTh2SUhKbGNYVnBjbVZ6SUhSb1lYUWdZMjl1ZEdWNGRDQm1kVzVqZEdsdmJuTWdhVzRnWW14dlkydHpJR0Z5WlNCbGRtRnNkV0YwWldRZ1lua2dZbXh2WTJ0SVpXeHdaWEpOYVhOemFXNW5MRnh1THk4Z1lXNWtJSFJvWlc0Z2NISnZZMlZsWkNCaGN5QnBaaUIwYUdVZ2NtVnpkV3gwYVc1bklIWmhiSFZsSUhkaGN5QndjbTkyYVdSbFpDQjBieUJpYkc5amEwaGxiSEJsY2sxcGMzTnBibWN1WEc1Y2JrTnZiWEJwYkdWeUxuQnliM1J2ZEhsd1pTQTlJSHRjYmlBZ1kyOXRjR2xzWlhJNklFTnZiWEJwYkdWeUxGeHVYRzRnSUdWeGRXRnNjem9nWm5WdVkzUnBiMjRvYjNSb1pYSXBJSHRjYmlBZ0lDQnNaWFFnYkdWdUlEMGdkR2hwY3k1dmNHTnZaR1Z6TG14bGJtZDBhRHRjYmlBZ0lDQnBaaUFvYjNSb1pYSXViM0JqYjJSbGN5NXNaVzVuZEdnZ0lUMDlJR3hsYmlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCdmNHTnZaR1VnUFNCMGFHbHpMbTl3WTI5a1pYTmJhVjBzWEc0Z0lDQWdJQ0FnSUc5MGFHVnlUM0JqYjJSbElEMGdiM1JvWlhJdWIzQmpiMlJsYzF0cFhUdGNiaUFnSUNBZ0lHbG1JQ2hjYmlBZ0lDQWdJQ0FnYjNCamIyUmxMbTl3WTI5a1pTQWhQVDBnYjNSb1pYSlBjR052WkdVdWIzQmpiMlJsSUh4OFhHNGdJQ0FnSUNBZ0lDRmhjbWRGY1hWaGJITW9iM0JqYjJSbExtRnlaM01zSUc5MGFHVnlUM0JqYjJSbExtRnlaM01wWEc0Z0lDQWdJQ0FwSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRmRsSUd0dWIzY2dkR2hoZENCc1pXNW5kR2dnYVhNZ2RHaGxJSE5oYldVZ1ltVjBkMlZsYmlCMGFHVWdkSGR2SUdGeWNtRjVjeUJpWldOaGRYTmxJSFJvWlhrZ1lYSmxJR1JwY21WamRHeDVJSFJwWldSY2JpQWdJQ0F2THlCMGJ5QjBhR1VnYjNCamIyUmxJR0psYUdGMmFXOXlJR0ZpYjNabExseHVJQ0FnSUd4bGJpQTlJSFJvYVhNdVkyaHBiR1J5Wlc0dWJHVnVaM1JvTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDZ2hkR2hwY3k1amFHbHNaSEpsYmx0cFhTNWxjWFZoYkhNb2IzUm9aWEl1WTJocGJHUnlaVzViYVYwcEtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdmU3hjYmx4dUlDQm5kV2xrT2lBd0xGeHVYRzRnSUdOdmJYQnBiR1U2SUdaMWJtTjBhVzl1S0hCeWIyZHlZVzBzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0IwYUdsekxuTnZkWEpqWlU1dlpHVWdQU0JiWFR0Y2JpQWdJQ0IwYUdsekxtOXdZMjlrWlhNZ1BTQmJYVHRjYmlBZ0lDQjBhR2x6TG1Ob2FXeGtjbVZ1SUQwZ1cxMDdYRzRnSUNBZ2RHaHBjeTV2Y0hScGIyNXpJRDBnYjNCMGFXOXVjenRjYmlBZ0lDQjBhR2x6TG5OMGNtbHVaMUJoY21GdGN5QTlJRzl3ZEdsdmJuTXVjM1J5YVc1blVHRnlZVzF6TzF4dUlDQWdJSFJvYVhNdWRISmhZMnRKWkhNZ1BTQnZjSFJwYjI1ekxuUnlZV05yU1dSek8xeHVYRzRnSUNBZ2IzQjBhVzl1Y3k1aWJHOWphMUJoY21GdGN5QTlJRzl3ZEdsdmJuTXVZbXh2WTJ0UVlYSmhiWE1nZkh3Z1cxMDdYRzVjYmlBZ0lDQnZjSFJwYjI1ekxtdHViM2R1U0dWc2NHVnljeUE5SUdWNGRHVnVaQ2hjYmlBZ0lDQWdJRTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2tzWEc0Z0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUdobGJIQmxjazFwYzNOcGJtYzZJSFJ5ZFdVc1hHNGdJQ0FnSUNBZ0lHSnNiMk5yU0dWc2NHVnlUV2x6YzJsdVp6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pXRmphRG9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdhV1k2SUhSeWRXVXNYRzRnSUNBZ0lDQWdJSFZ1YkdWemN6b2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2QybDBhRG9nZEhKMVpTeGNiaUFnSUNBZ0lDQWdiRzluT2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0JzYjI5cmRYQTZJSFJ5ZFdWY2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCdmNIUnBiMjV6TG10dWIzZHVTR1ZzY0dWeWMxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWhZMk5sY0hRb2NISnZaM0poYlNrN1hHNGdJSDBzWEc1Y2JpQWdZMjl0Y0dsc1pWQnliMmR5WVcwNklHWjFibU4wYVc5dUtIQnliMmR5WVcwcElIdGNiaUFnSUNCc1pYUWdZMmhwYkdSRGIyMXdhV3hsY2lBOUlHNWxkeUIwYUdsekxtTnZiWEJwYkdWeUtDa3NJQzh2SUdWemJHbHVkQzFrYVhOaFlteGxMV3hwYm1VZ2JtVjNMV05oY0Z4dUlDQWdJQ0FnY21WemRXeDBJRDBnWTJocGJHUkRiMjF3YVd4bGNpNWpiMjF3YVd4bEtIQnliMmR5WVcwc0lIUm9hWE11YjNCMGFXOXVjeWtzWEc0Z0lDQWdJQ0JuZFdsa0lEMGdkR2hwY3k1bmRXbGtLeXM3WEc1Y2JpQWdJQ0IwYUdsekxuVnpaVkJoY25ScFlXd2dQU0IwYUdsekxuVnpaVkJoY25ScFlXd2dmSHdnY21WemRXeDBMblZ6WlZCaGNuUnBZV3c3WEc1Y2JpQWdJQ0IwYUdsekxtTm9hV3hrY21WdVcyZDFhV1JkSUQwZ2NtVnpkV3gwTzF4dUlDQWdJSFJvYVhNdWRYTmxSR1Z3ZEdoeklEMGdkR2hwY3k1MWMyVkVaWEIwYUhNZ2ZId2djbVZ6ZFd4MExuVnpaVVJsY0hSb2N6dGNibHh1SUNBZ0lISmxkSFZ5YmlCbmRXbGtPMXh1SUNCOUxGeHVYRzRnSUdGalkyVndkRG9nWm5WdVkzUnBiMjRvYm05a1pTa2dlMXh1SUNBZ0lDOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwT2lCVFlXNXBkSGtnWTI5a1pTQXFMMXh1SUNBZ0lHbG1JQ2doZEdocGMxdHViMlJsTG5SNWNHVmRLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NkVmJtdHViM2R1SUhSNWNHVTZJQ2NnS3lCdWIyUmxMblI1Y0dVc0lHNXZaR1VwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWMyOTFjbU5sVG05a1pTNTFibk5vYVdaMEtHNXZaR1VwTzF4dUlDQWdJR3hsZENCeVpYUWdQU0IwYUdselcyNXZaR1V1ZEhsd1pWMG9ibTlrWlNrN1hHNGdJQ0FnZEdocGN5NXpiM1Z5WTJWT2IyUmxMbk5vYVdaMEtDazdYRzRnSUNBZ2NtVjBkWEp1SUhKbGREdGNiaUFnZlN4Y2JseHVJQ0JRY205bmNtRnRPaUJtZFc1amRHbHZiaWh3Y205bmNtRnRLU0I3WEc0Z0lDQWdkR2hwY3k1dmNIUnBiMjV6TG1Kc2IyTnJVR0Z5WVcxekxuVnVjMmhwWm5Rb2NISnZaM0poYlM1aWJHOWphMUJoY21GdGN5azdYRzVjYmlBZ0lDQnNaWFFnWW05a2VTQTlJSEJ5YjJkeVlXMHVZbTlrZVN4Y2JpQWdJQ0FnSUdKdlpIbE1aVzVuZEdnZ1BTQmliMlI1TG14bGJtZDBhRHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR0p2WkhsTVpXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1aFkyTmxjSFFvWW05a2VWdHBYU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdkR2hwY3k1dmNIUnBiMjV6TG1Kc2IyTnJVR0Z5WVcxekxuTm9hV1owS0NrN1hHNWNiaUFnSUNCMGFHbHpMbWx6VTJsdGNHeGxJRDBnWW05a2VVeGxibWQwYUNBOVBUMGdNVHRjYmlBZ0lDQjBhR2x6TG1Kc2IyTnJVR0Z5WVcxeklEMGdjSEp2WjNKaGJTNWliRzlqYTFCaGNtRnRjeUEvSUhCeWIyZHlZVzB1WW14dlkydFFZWEpoYlhNdWJHVnVaM1JvSURvZ01EdGNibHh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpPMXh1SUNCOUxGeHVYRzRnSUVKc2IyTnJVM1JoZEdWdFpXNTBPaUJtZFc1amRHbHZiaWhpYkc5amF5a2dlMXh1SUNBZ0lIUnlZVzV6Wm05eWJVeHBkR1Z5WVd4VWIxQmhkR2dvWW14dlkyc3BPMXh1WEc0Z0lDQWdiR1YwSUhCeWIyZHlZVzBnUFNCaWJHOWpheTV3Y205bmNtRnRMRnh1SUNBZ0lDQWdhVzUyWlhKelpTQTlJR0pzYjJOckxtbHVkbVZ5YzJVN1hHNWNiaUFnSUNCd2NtOW5jbUZ0SUQwZ2NISnZaM0poYlNBbUppQjBhR2x6TG1OdmJYQnBiR1ZRY205bmNtRnRLSEJ5YjJkeVlXMHBPMXh1SUNBZ0lHbHVkbVZ5YzJVZ1BTQnBiblpsY25ObElDWW1JSFJvYVhNdVkyOXRjR2xzWlZCeWIyZHlZVzBvYVc1MlpYSnpaU2s3WEc1Y2JpQWdJQ0JzWlhRZ2RIbHdaU0E5SUhSb2FYTXVZMnhoYzNOcFpubFRaWGh3Y2loaWJHOWpheWs3WEc1Y2JpQWdJQ0JwWmlBb2RIbHdaU0E5UFQwZ0oyaGxiSEJsY2ljcElIdGNiaUFnSUNBZ0lIUm9hWE11YUdWc2NHVnlVMlY0Y0hJb1lteHZZMnNzSUhCeWIyZHlZVzBzSUdsdWRtVnljMlVwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pTQTlQVDBnSjNOcGJYQnNaU2NwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjMmx0Y0d4bFUyVjRjSElvWW14dlkyc3BPMXh1WEc0Z0lDQWdJQ0F2THlCdWIzY2dkR2hoZENCMGFHVWdjMmx0Y0d4bElHMTFjM1JoWTJobElHbHpJSEpsYzI5c2RtVmtMQ0IzWlNCdVpXVmtJSFJ2WEc0Z0lDQWdJQ0F2THlCbGRtRnNkV0YwWlNCcGRDQmllU0JsZUdWamRYUnBibWNnWUdKc2IyTnJTR1ZzY0dWeVRXbHpjMmx1WjJCY2JpQWdJQ0FnSUhSb2FYTXViM0JqYjJSbEtDZHdkWE5vVUhKdlozSmhiU2NzSUhCeWIyZHlZVzBwTzF4dUlDQWdJQ0FnZEdocGN5NXZjR052WkdVb0ozQjFjMmhRY205bmNtRnRKeXdnYVc1MlpYSnpaU2s3WEc0Z0lDQWdJQ0IwYUdsekxtOXdZMjlrWlNnblpXMXdkSGxJWVhOb0p5azdYRzRnSUNBZ0lDQjBhR2x6TG05d1kyOWtaU2duWW14dlkydFdZV3gxWlNjc0lHSnNiMk5yTG5CaGRHZ3ViM0pwWjJsdVlXd3BPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbUZ0WW1sbmRXOTFjMU5sZUhCeUtHSnNiMk5yTENCd2NtOW5jbUZ0TENCcGJuWmxjbk5sS1R0Y2JseHVJQ0FnSUNBZ0x5OGdibTkzSUhSb1lYUWdkR2hsSUhOcGJYQnNaU0J0ZFhOMFlXTm9aU0JwY3lCeVpYTnZiSFpsWkN3Z2QyVWdibVZsWkNCMGIxeHVJQ0FnSUNBZ0x5OGdaWFpoYkhWaGRHVWdhWFFnWW5rZ1pYaGxZM1YwYVc1bklHQmliRzlqYTBobGJIQmxjazFwYzNOcGJtZGdYRzRnSUNBZ0lDQjBhR2x6TG05d1kyOWtaU2duY0hWemFGQnliMmR5WVcwbkxDQndjbTluY21GdEtUdGNiaUFnSUNBZ0lIUm9hWE11YjNCamIyUmxLQ2R3ZFhOb1VISnZaM0poYlNjc0lHbHVkbVZ5YzJVcE8xeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dOdlpHVW9KMlZ0Y0hSNVNHRnphQ2NwTzF4dUlDQWdJQ0FnZEdocGN5NXZjR052WkdVb0oyRnRZbWxuZFc5MWMwSnNiMk5yVm1Gc2RXVW5LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG05d1kyOWtaU2duWVhCd1pXNWtKeWs3WEc0Z0lIMHNYRzVjYmlBZ1JHVmpiM0poZEc5eVFteHZZMnNvWkdWamIzSmhkRzl5S1NCN1hHNGdJQ0FnYkdWMElIQnliMmR5WVcwZ1BTQmtaV052Y21GMGIzSXVjSEp2WjNKaGJTQW1KaUIwYUdsekxtTnZiWEJwYkdWUWNtOW5jbUZ0S0dSbFkyOXlZWFJ2Y2k1d2NtOW5jbUZ0S1R0Y2JpQWdJQ0JzWlhRZ2NHRnlZVzF6SUQwZ2RHaHBjeTV6WlhSMWNFWjFiR3hOZFhOMFlXTm9aVkJoY21GdGN5aGtaV052Y21GMGIzSXNJSEJ5YjJkeVlXMHNJSFZ1WkdWbWFXNWxaQ2tzWEc0Z0lDQWdJQ0J3WVhSb0lEMGdaR1ZqYjNKaGRHOXlMbkJoZEdnN1hHNWNiaUFnSUNCMGFHbHpMblZ6WlVSbFkyOXlZWFJ2Y25NZ1BTQjBjblZsTzF4dUlDQWdJSFJvYVhNdWIzQmpiMlJsS0NkeVpXZHBjM1JsY2tSbFkyOXlZWFJ2Y2ljc0lIQmhjbUZ0Y3k1c1pXNW5kR2dzSUhCaGRHZ3ViM0pwWjJsdVlXd3BPMXh1SUNCOUxGeHVYRzRnSUZCaGNuUnBZV3hUZEdGMFpXMWxiblE2SUdaMWJtTjBhVzl1S0hCaGNuUnBZV3dwSUh0Y2JpQWdJQ0IwYUdsekxuVnpaVkJoY25ScFlXd2dQU0IwY25WbE8xeHVYRzRnSUNBZ2JHVjBJSEJ5YjJkeVlXMGdQU0J3WVhKMGFXRnNMbkJ5YjJkeVlXMDdYRzRnSUNBZ2FXWWdLSEJ5YjJkeVlXMHBJSHRjYmlBZ0lDQWdJSEJ5YjJkeVlXMGdQU0IwYUdsekxtTnZiWEJwYkdWUWNtOW5jbUZ0S0hCaGNuUnBZV3d1Y0hKdlozSmhiU2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiR1YwSUhCaGNtRnRjeUE5SUhCaGNuUnBZV3d1Y0dGeVlXMXpPMXh1SUNBZ0lHbG1JQ2h3WVhKaGJYTXViR1Z1WjNSb0lENGdNU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmloY2JpQWdJQ0FnSUNBZ0oxVnVjM1Z3Y0c5eWRHVmtJRzUxYldKbGNpQnZaaUJ3WVhKMGFXRnNJR0Z5WjNWdFpXNTBjem9nSnlBcklIQmhjbUZ0Y3k1c1pXNW5kR2dzWEc0Z0lDQWdJQ0FnSUhCaGNuUnBZV3hjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doY0dGeVlXMXpMbXhsYm1kMGFDa2dlMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXViM0IwYVc5dWN5NWxlSEJzYVdOcGRGQmhjblJwWVd4RGIyNTBaWGgwS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11YjNCamIyUmxLQ2R3ZFhOb1RHbDBaWEpoYkNjc0lDZDFibVJsWm1sdVpXUW5LVHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJSEJoY21GdGN5NXdkWE5vS0hzZ2RIbHdaVG9nSjFCaGRHaEZlSEJ5WlhOemFXOXVKeXdnY0dGeWRITTZJRnRkTENCa1pYQjBhRG9nTUNCOUtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdjR0Z5ZEdsaGJFNWhiV1VnUFNCd1lYSjBhV0ZzTG01aGJXVXViM0pwWjJsdVlXd3NYRzRnSUNBZ0lDQnBjMFI1Ym1GdGFXTWdQU0J3WVhKMGFXRnNMbTVoYldVdWRIbHdaU0E5UFQwZ0oxTjFZa1Y0Y0hKbGMzTnBiMjRuTzF4dUlDQWdJR2xtSUNocGMwUjVibUZ0YVdNcElIdGNiaUFnSUNBZ0lIUm9hWE11WVdOalpYQjBLSEJoY25ScFlXd3VibUZ0WlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnZEdocGN5NXpaWFIxY0VaMWJHeE5kWE4wWVdOb1pWQmhjbUZ0Y3lod1lYSjBhV0ZzTENCd2NtOW5jbUZ0TENCMWJtUmxabWx1WldRc0lIUnlkV1VwTzF4dVhHNGdJQ0FnYkdWMElHbHVaR1Z1ZENBOUlIQmhjblJwWVd3dWFXNWtaVzUwSUh4OElDY25PMXh1SUNBZ0lHbG1JQ2gwYUdsekxtOXdkR2x2Ym5NdWNISmxkbVZ1ZEVsdVpHVnVkQ0FtSmlCcGJtUmxiblFwSUh0Y2JpQWdJQ0FnSUhSb2FYTXViM0JqYjJSbEtDZGhjSEJsYm1SRGIyNTBaVzUwSnl3Z2FXNWtaVzUwS1R0Y2JpQWdJQ0FnSUdsdVpHVnVkQ0E5SUNjbk8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXViM0JqYjJSbEtDZHBiblp2YTJWUVlYSjBhV0ZzSnl3Z2FYTkVlVzVoYldsakxDQndZWEowYVdGc1RtRnRaU3dnYVc1a1pXNTBLVHRjYmlBZ0lDQjBhR2x6TG05d1kyOWtaU2duWVhCd1pXNWtKeWs3WEc0Z0lIMHNYRzRnSUZCaGNuUnBZV3hDYkc5amExTjBZWFJsYldWdWREb2dablZ1WTNScGIyNG9jR0Z5ZEdsaGJFSnNiMk5yS1NCN1hHNGdJQ0FnZEdocGN5NVFZWEowYVdGc1UzUmhkR1Z0Wlc1MEtIQmhjblJwWVd4Q2JHOWpheWs3WEc0Z0lIMHNYRzVjYmlBZ1RYVnpkR0ZqYUdWVGRHRjBaVzFsYm5RNklHWjFibU4wYVc5dUtHMTFjM1JoWTJobEtTQjdYRzRnSUNBZ2RHaHBjeTVUZFdKRmVIQnlaWE56YVc5dUtHMTFjM1JoWTJobEtUdGNibHh1SUNBZ0lHbG1JQ2h0ZFhOMFlXTm9aUzVsYzJOaGNHVmtJQ1ltSUNGMGFHbHpMbTl3ZEdsdmJuTXVibTlGYzJOaGNHVXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWIzQmpiMlJsS0NkaGNIQmxibVJGYzJOaGNHVmtKeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11YjNCamIyUmxLQ2RoY0hCbGJtUW5LVHRjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJRVJsWTI5eVlYUnZjaWhrWldOdmNtRjBiM0lwSUh0Y2JpQWdJQ0IwYUdsekxrUmxZMjl5WVhSdmNrSnNiMk5yS0dSbFkyOXlZWFJ2Y2lrN1hHNGdJSDBzWEc1Y2JpQWdRMjl1ZEdWdWRGTjBZWFJsYldWdWREb2dablZ1WTNScGIyNG9ZMjl1ZEdWdWRDa2dlMXh1SUNBZ0lHbG1JQ2hqYjI1MFpXNTBMblpoYkhWbEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG05d1kyOWtaU2duWVhCd1pXNWtRMjl1ZEdWdWRDY3NJR052Ym5SbGJuUXVkbUZzZFdVcE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQkRiMjF0Wlc1MFUzUmhkR1Z0Wlc1ME9pQm1kVzVqZEdsdmJpZ3BJSHQ5TEZ4dVhHNGdJRk4xWWtWNGNISmxjM05wYjI0NklHWjFibU4wYVc5dUtITmxlSEJ5S1NCN1hHNGdJQ0FnZEhKaGJuTm1iM0p0VEdsMFpYSmhiRlJ2VUdGMGFDaHpaWGh3Y2lrN1hHNGdJQ0FnYkdWMElIUjVjR1VnUFNCMGFHbHpMbU5zWVhOemFXWjVVMlY0Y0hJb2MyVjRjSElwTzF4dVhHNGdJQ0FnYVdZZ0tIUjVjR1VnUFQwOUlDZHphVzF3YkdVbktTQjdYRzRnSUNBZ0lDQjBhR2x6TG5OcGJYQnNaVk5sZUhCeUtITmxlSEJ5S1R0Y2JpQWdJQ0I5SUdWc2MyVWdhV1lnS0hSNWNHVWdQVDA5SUNkb1pXeHdaWEluS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbWhsYkhCbGNsTmxlSEJ5S0hObGVIQnlLVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVoYldKcFozVnZkWE5UWlhod2NpaHpaWGh3Y2lrN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1SUNCaGJXSnBaM1Z2ZFhOVFpYaHdjam9nWm5WdVkzUnBiMjRvYzJWNGNISXNJSEJ5YjJkeVlXMHNJR2x1ZG1WeWMyVXBJSHRjYmlBZ0lDQnNaWFFnY0dGMGFDQTlJSE5sZUhCeUxuQmhkR2dzWEc0Z0lDQWdJQ0J1WVcxbElEMGdjR0YwYUM1d1lYSjBjMXN3WFN4Y2JpQWdJQ0FnSUdselFteHZZMnNnUFNCd2NtOW5jbUZ0SUNFOUlHNTFiR3dnZkh3Z2FXNTJaWEp6WlNBaFBTQnVkV3hzTzF4dVhHNGdJQ0FnZEdocGN5NXZjR052WkdVb0oyZGxkRU52Ym5SbGVIUW5MQ0J3WVhSb0xtUmxjSFJvS1R0Y2JseHVJQ0FnSUhSb2FYTXViM0JqYjJSbEtDZHdkWE5vVUhKdlozSmhiU2NzSUhCeWIyZHlZVzBwTzF4dUlDQWdJSFJvYVhNdWIzQmpiMlJsS0Nkd2RYTm9VSEp2WjNKaGJTY3NJR2x1ZG1WeWMyVXBPMXh1WEc0Z0lDQWdjR0YwYUM1emRISnBZM1FnUFNCMGNuVmxPMXh1SUNBZ0lIUm9hWE11WVdOalpYQjBLSEJoZEdncE8xeHVYRzRnSUNBZ2RHaHBjeTV2Y0dOdlpHVW9KMmx1ZG05clpVRnRZbWxuZFc5MWN5Y3NJRzVoYldVc0lHbHpRbXh2WTJzcE8xeHVJQ0I5TEZ4dVhHNGdJSE5wYlhCc1pWTmxlSEJ5T2lCbWRXNWpkR2x2YmloelpYaHdjaWtnZTF4dUlDQWdJR3hsZENCd1lYUm9JRDBnYzJWNGNISXVjR0YwYUR0Y2JpQWdJQ0J3WVhSb0xuTjBjbWxqZENBOUlIUnlkV1U3WEc0Z0lDQWdkR2hwY3k1aFkyTmxjSFFvY0dGMGFDazdYRzRnSUNBZ2RHaHBjeTV2Y0dOdlpHVW9KM0psYzI5c2RtVlFiM056YVdKc1pVeGhiV0prWVNjcE8xeHVJQ0I5TEZ4dVhHNGdJR2hsYkhCbGNsTmxlSEJ5T2lCbWRXNWpkR2x2YmloelpYaHdjaXdnY0hKdlozSmhiU3dnYVc1MlpYSnpaU2tnZTF4dUlDQWdJR3hsZENCd1lYSmhiWE1nUFNCMGFHbHpMbk5sZEhWd1JuVnNiRTExYzNSaFkyaGxVR0Z5WVcxektITmxlSEJ5TENCd2NtOW5jbUZ0TENCcGJuWmxjbk5sS1N4Y2JpQWdJQ0FnSUhCaGRHZ2dQU0J6Wlhod2NpNXdZWFJvTEZ4dUlDQWdJQ0FnYm1GdFpTQTlJSEJoZEdndWNHRnlkSE5iTUYwN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG10dWIzZHVTR1ZzY0dWeWMxdHVZVzFsWFNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dOdlpHVW9KMmx1ZG05clpVdHViM2R1U0dWc2NHVnlKeXdnY0dGeVlXMXpMbXhsYm1kMGFDd2dibUZ0WlNrN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNoMGFHbHpMbTl3ZEdsdmJuTXVhMjV2ZDI1SVpXeHdaWEp6VDI1c2VTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVY0WTJWd2RHbHZiaWhjYmlBZ0lDQWdJQ0FnSjFsdmRTQnpjR1ZqYVdacFpXUWdhMjV2ZDI1SVpXeHdaWEp6VDI1c2VTd2dZblYwSUhWelpXUWdkR2hsSUhWdWEyNXZkMjRnYUdWc2NHVnlJQ2NnS3lCdVlXMWxMRnh1SUNBZ0lDQWdJQ0J6Wlhod2NseHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY0dGMGFDNXpkSEpwWTNRZ1BTQjBjblZsTzF4dUlDQWdJQ0FnY0dGMGFDNW1ZV3h6ZVNBOUlIUnlkV1U3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVZV05qWlhCMEtIQmhkR2dwTzF4dUlDQWdJQ0FnZEdocGN5NXZjR052WkdVb1hHNGdJQ0FnSUNBZ0lDZHBiblp2YTJWSVpXeHdaWEluTEZ4dUlDQWdJQ0FnSUNCd1lYSmhiWE11YkdWdVozUm9MRnh1SUNBZ0lDQWdJQ0J3WVhSb0xtOXlhV2RwYm1Gc0xGeHVJQ0FnSUNBZ0lDQkJVMVF1YUdWc2NHVnljeTV6YVcxd2JHVkpaQ2h3WVhSb0tWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdVR0YwYUVWNGNISmxjM05wYjI0NklHWjFibU4wYVc5dUtIQmhkR2dwSUh0Y2JpQWdJQ0IwYUdsekxtRmtaRVJsY0hSb0tIQmhkR2d1WkdWd2RHZ3BPMXh1SUNBZ0lIUm9hWE11YjNCamIyUmxLQ2RuWlhSRGIyNTBaWGgwSnl3Z2NHRjBhQzVrWlhCMGFDazdYRzVjYmlBZ0lDQnNaWFFnYm1GdFpTQTlJSEJoZEdndWNHRnlkSE5iTUYwc1hHNGdJQ0FnSUNCelkyOXdaV1FnUFNCQlUxUXVhR1ZzY0dWeWN5NXpZMjl3WldSSlpDaHdZWFJvS1N4Y2JpQWdJQ0FnSUdKc2IyTnJVR0Z5WVcxSlpDQTlJQ0Z3WVhSb0xtUmxjSFJvSUNZbUlDRnpZMjl3WldRZ0ppWWdkR2hwY3k1aWJHOWphMUJoY21GdFNXNWtaWGdvYm1GdFpTazdYRzVjYmlBZ0lDQnBaaUFvWW14dlkydFFZWEpoYlVsa0tTQjdYRzRnSUNBZ0lDQjBhR2x6TG05d1kyOWtaU2duYkc5dmEzVndRbXh2WTJ0UVlYSmhiU2NzSUdKc2IyTnJVR0Z5WVcxSlpDd2djR0YwYUM1d1lYSjBjeWs3WEc0Z0lDQWdmU0JsYkhObElHbG1JQ2doYm1GdFpTa2dlMXh1SUNBZ0lDQWdMeThnUTI5dWRHVjRkQ0J5WldabGNtVnVZMlVzSUdrdVpTNGdZSHQ3Wm05dklDNTlmV0FnYjNJZ1lIdDdabTl2SUM0dWZYMWdYRzRnSUNBZ0lDQjBhR2x6TG05d1kyOWtaU2duY0hWemFFTnZiblJsZUhRbktUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tIQmhkR2d1WkdGMFlTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1dmNIUnBiMjV6TG1SaGRHRWdQU0IwY25WbE8xeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dOdlpHVW9KMnh2YjJ0MWNFUmhkR0VuTENCd1lYUm9MbVJsY0hSb0xDQndZWFJvTG5CaGNuUnpMQ0J3WVhSb0xuTjBjbWxqZENrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdWIzQmpiMlJsS0Z4dUlDQWdJQ0FnSUNBbmJHOXZhM1Z3VDI1RGIyNTBaWGgwSnl4Y2JpQWdJQ0FnSUNBZ2NHRjBhQzV3WVhKMGN5eGNiaUFnSUNBZ0lDQWdjR0YwYUM1bVlXeHplU3hjYmlBZ0lDQWdJQ0FnY0dGMGFDNXpkSEpwWTNRc1hHNGdJQ0FnSUNBZ0lITmpiM0JsWkZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ1UzUnlhVzVuVEdsMFpYSmhiRG9nWm5WdVkzUnBiMjRvYzNSeWFXNW5LU0I3WEc0Z0lDQWdkR2hwY3k1dmNHTnZaR1VvSjNCMWMyaFRkSEpwYm1jbkxDQnpkSEpwYm1jdWRtRnNkV1VwTzF4dUlDQjlMRnh1WEc0Z0lFNTFiV0psY2t4cGRHVnlZV3c2SUdaMWJtTjBhVzl1S0c1MWJXSmxjaWtnZTF4dUlDQWdJSFJvYVhNdWIzQmpiMlJsS0Nkd2RYTm9UR2wwWlhKaGJDY3NJRzUxYldKbGNpNTJZV3gxWlNrN1hHNGdJSDBzWEc1Y2JpQWdRbTl2YkdWaGJreHBkR1Z5WVd3NklHWjFibU4wYVc5dUtHSnZiMndwSUh0Y2JpQWdJQ0IwYUdsekxtOXdZMjlrWlNnbmNIVnphRXhwZEdWeVlXd25MQ0JpYjI5c0xuWmhiSFZsS1R0Y2JpQWdmU3hjYmx4dUlDQlZibVJsWm1sdVpXUk1hWFJsY21Gc09pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQjBhR2x6TG05d1kyOWtaU2duY0hWemFFeHBkR1Z5WVd3bkxDQW5kVzVrWldacGJtVmtKeWs3WEc0Z0lIMHNYRzVjYmlBZ1RuVnNiRXhwZEdWeVlXdzZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSFJvYVhNdWIzQmpiMlJsS0Nkd2RYTm9UR2wwWlhKaGJDY3NJQ2R1ZFd4c0p5azdYRzRnSUgwc1hHNWNiaUFnU0dGemFEb2dablZ1WTNScGIyNG9hR0Z6YUNrZ2UxeHVJQ0FnSUd4bGRDQndZV2x5Y3lBOUlHaGhjMmd1Y0dGcGNuTXNYRzRnSUNBZ0lDQnBJRDBnTUN4Y2JpQWdJQ0FnSUd3Z1BTQndZV2x5Y3k1c1pXNW5kR2c3WEc1Y2JpQWdJQ0IwYUdsekxtOXdZMjlrWlNnbmNIVnphRWhoYzJnbktUdGNibHh1SUNBZ0lHWnZjaUFvT3lCcElEd2diRHNnYVNzcktTQjdYRzRnSUNBZ0lDQjBhR2x6TG5CMWMyaFFZWEpoYlNod1lXbHljMXRwWFM1MllXeDFaU2s3WEc0Z0lDQWdmVnh1SUNBZ0lIZG9hV3hsSUNocExTMHBJSHRjYmlBZ0lDQWdJSFJvYVhNdWIzQmpiMlJsS0NkaGMzTnBaMjVVYjBoaGMyZ25MQ0J3WVdseWMxdHBYUzVyWlhrcE8xeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxtOXdZMjlrWlNnbmNHOXdTR0Z6YUNjcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUVoRlRGQkZVbE5jYmlBZ2IzQmpiMlJsT2lCbWRXNWpkR2x2YmlodVlXMWxLU0I3WEc0Z0lDQWdkR2hwY3k1dmNHTnZaR1Z6TG5CMWMyZ29lMXh1SUNBZ0lDQWdiM0JqYjJSbE9pQnVZVzFsTEZ4dUlDQWdJQ0FnWVhKbmN6b2djMnhwWTJVdVkyRnNiQ2hoY21kMWJXVnVkSE1zSURFcExGeHVJQ0FnSUNBZ2JHOWpPaUIwYUdsekxuTnZkWEpqWlU1dlpHVmJNRjB1Ykc5alhHNGdJQ0FnZlNrN1hHNGdJSDBzWEc1Y2JpQWdZV1JrUkdWd2RHZzZJR1oxYm1OMGFXOXVLR1JsY0hSb0tTQjdYRzRnSUNBZ2FXWWdLQ0ZrWlhCMGFDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVkWE5sUkdWd2RHaHpJRDBnZEhKMVpUdGNiaUFnZlN4Y2JseHVJQ0JqYkdGemMybG1lVk5sZUhCeU9pQm1kVzVqZEdsdmJpaHpaWGh3Y2lrZ2UxeHVJQ0FnSUd4bGRDQnBjMU5wYlhCc1pTQTlJRUZUVkM1b1pXeHdaWEp6TG5OcGJYQnNaVWxrS0hObGVIQnlMbkJoZEdncE8xeHVYRzRnSUNBZ2JHVjBJR2x6UW14dlkydFFZWEpoYlNBOUlHbHpVMmx0Y0d4bElDWW1JQ0VoZEdocGN5NWliRzlqYTFCaGNtRnRTVzVrWlhnb2MyVjRjSEl1Y0dGMGFDNXdZWEowYzFzd1hTazdYRzVjYmlBZ0lDQXZMeUJoSUcxMWMzUmhZMmhsSUdseklHRnVJR1ZzYVdkcFlteGxJR2hsYkhCbGNpQnBaanBjYmlBZ0lDQXZMeUFxSUdsMGN5QnBaQ0JwY3lCemFXMXdiR1VnS0dFZ2MybHVaMnhsSUhCaGNuUXNJRzV2ZENCZ2RHaHBjMkFnYjNJZ1lDNHVZQ2xjYmlBZ0lDQnNaWFFnYVhOSVpXeHdaWElnUFNBaGFYTkNiRzlqYTFCaGNtRnRJQ1ltSUVGVFZDNW9aV3h3WlhKekxtaGxiSEJsY2tWNGNISmxjM05wYjI0b2MyVjRjSElwTzF4dVhHNGdJQ0FnTHk4Z2FXWWdZU0J0ZFhOMFlXTm9aU0JwY3lCaGJpQmxiR2xuYVdKc1pTQm9aV3h3WlhJZ1luVjBJRzV2ZENCaElHUmxabWx1YVhSbFhHNGdJQ0FnTHk4Z2FHVnNjR1Z5TENCcGRDQnBjeUJoYldKcFozVnZkWE1zSUdGdVpDQjNhV3hzSUdKbElISmxjMjlzZG1Wa0lHbHVJR0VnYkdGMFpYSmNiaUFnSUNBdkx5QndZWE56SUc5eUlHRjBJSEoxYm5ScGJXVXVYRzRnSUNBZ2JHVjBJR2x6Uld4cFoybGliR1VnUFNBaGFYTkNiRzlqYTFCaGNtRnRJQ1ltSUNocGMwaGxiSEJsY2lCOGZDQnBjMU5wYlhCc1pTazdYRzVjYmlBZ0lDQXZMeUJwWmlCaGJXSnBaM1Z2ZFhNc0lIZGxJR05oYmlCd2IzTnphV0pzZVNCeVpYTnZiSFpsSUhSb1pTQmhiV0pwWjNWcGRIa2dibTkzWEc0Z0lDQWdMeThnUVc0Z1pXeHBaMmxpYkdVZ2FHVnNjR1Z5SUdseklHOXVaU0IwYUdGMElHUnZaWE1nYm05MElHaGhkbVVnWVNCamIyMXdiR1Y0SUhCaGRHZ3NJR2t1WlM0Z1lIUm9hWE11Wm05dllDd2dZQzR1TDJadmIyQWdaWFJqTGx4dUlDQWdJR2xtSUNocGMwVnNhV2RwWW14bElDWW1JQ0ZwYzBobGJIQmxjaWtnZTF4dUlDQWdJQ0FnYkdWMElHNWhiV1VnUFNCelpYaHdjaTV3WVhSb0xuQmhjblJ6V3pCZExGeHVJQ0FnSUNBZ0lDQnZjSFJwYjI1eklEMGdkR2hwY3k1dmNIUnBiMjV6TzF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWEyNXZkMjVJWld4d1pYSnpXMjVoYldWZEtTQjdYRzRnSUNBZ0lDQWdJR2x6U0dWc2NHVnlJRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9iM0IwYVc5dWN5NXJibTkzYmtobGJIQmxjbk5QYm14NUtTQjdYRzRnSUNBZ0lDQWdJR2x6Uld4cFoybGliR1VnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvYVhOSVpXeHdaWElwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUFuYUdWc2NHVnlKenRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLR2x6Uld4cFoybGliR1VwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUFuWVcxaWFXZDFiM1Z6Snp0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdjbVYwZFhKdUlDZHphVzF3YkdVbk8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQndkWE5vVUdGeVlXMXpPaUJtZFc1amRHbHZiaWh3WVhKaGJYTXBJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTUN3Z2JDQTlJSEJoY21GdGN5NXNaVzVuZEdnN0lHa2dQQ0JzT3lCcEt5c3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWNIVnphRkJoY21GdEtIQmhjbUZ0YzF0cFhTazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJSEIxYzJoUVlYSmhiVG9nWm5WdVkzUnBiMjRvZG1Gc0tTQjdYRzRnSUNBZ2JHVjBJSFpoYkhWbElEMGdkbUZzTG5aaGJIVmxJQ0U5SUc1MWJHd2dQeUIyWVd3dWRtRnNkV1VnT2lCMllXd3ViM0pwWjJsdVlXd2dmSHdnSnljN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1emRISnBibWRRWVhKaGJYTXBJSHRjYmlBZ0lDQWdJR2xtSUNoMllXeDFaUzV5WlhCc1lXTmxLU0I3WEc0Z0lDQWdJQ0FnSUhaaGJIVmxJRDBnZG1Gc2RXVXVjbVZ3YkdGalpTZ3ZYaWhjWEM0L1hGd3VYRnd2S1Nvdlp5d2dKeWNwTG5KbGNHeGhZMlVvTDF4Y0x5OW5MQ0FuTGljcE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvZG1Gc0xtUmxjSFJvS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WVdSa1JHVndkR2dvZG1Gc0xtUmxjSFJvS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhSb2FYTXViM0JqYjJSbEtDZG5aWFJEYjI1MFpYaDBKeXdnZG1Gc0xtUmxjSFJvSUh4OElEQXBPMXh1SUNBZ0lDQWdkR2hwY3k1dmNHTnZaR1VvSjNCMWMyaFRkSEpwYm1kUVlYSmhiU2NzSUhaaGJIVmxMQ0IyWVd3dWRIbHdaU2s3WEc1Y2JpQWdJQ0FnSUdsbUlDaDJZV3d1ZEhsd1pTQTlQVDBnSjFOMVlrVjRjSEpsYzNOcGIyNG5LU0I3WEc0Z0lDQWdJQ0FnSUM4dklGTjFZa1Y0Y0hKbGMzTnBiMjV6SUdkbGRDQmxkbUZzZFdGMFpXUWdZVzVrSUhCaGMzTmxaQ0JwYmx4dUlDQWdJQ0FnSUNBdkx5QnBiaUJ6ZEhKcGJtY2djR0Z5WVcxeklHMXZaR1V1WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZV05qWlhCMEtIWmhiQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxuUnlZV05yU1dSektTQjdYRzRnSUNBZ0lDQWdJR3hsZENCaWJHOWphMUJoY21GdFNXNWtaWGc3WEc0Z0lDQWdJQ0FnSUdsbUlDaDJZV3d1Y0dGeWRITWdKaVlnSVVGVFZDNW9aV3h3WlhKekxuTmpiM0JsWkVsa0tIWmhiQ2tnSmlZZ0lYWmhiQzVrWlhCMGFDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdKc2IyTnJVR0Z5WVcxSmJtUmxlQ0E5SUhSb2FYTXVZbXh2WTJ0UVlYSmhiVWx1WkdWNEtIWmhiQzV3WVhKMGMxc3dYU2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLR0pzYjJOclVHRnlZVzFKYm1SbGVDa2dlMXh1SUNBZ0lDQWdJQ0FnSUd4bGRDQmliRzlqYTFCaGNtRnRRMmhwYkdRZ1BTQjJZV3d1Y0dGeWRITXVjMnhwWTJVb01Ta3VhbTlwYmlnbkxpY3BPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXViM0JqYjJSbEtDZHdkWE5vU1dRbkxDQW5RbXh2WTJ0UVlYSmhiU2NzSUdKc2IyTnJVR0Z5WVcxSmJtUmxlQ3dnWW14dlkydFFZWEpoYlVOb2FXeGtLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMllXeDFaU0E5SUhaaGJDNXZjbWxuYVc1aGJDQjhmQ0IyWVd4MVpUdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2RtRnNkV1V1Y21Wd2JHRmpaU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVZ1BTQjJZV3gxWlZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F1Y21Wd2JHRmpaU2d2WG5Sb2FYTW9QenBjWEM1OEpDa3ZMQ0FuSnlsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnTG5KbGNHeGhZMlVvTDE1Y1hDNWNYQzh2TENBbkp5bGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0xuSmxjR3hoWTJVb0wxNWNYQzRrTHl3Z0p5Y3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWIzQmpiMlJsS0Nkd2RYTm9TV1FuTENCMllXd3VkSGx3WlN3Z2RtRnNkV1VwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCMGFHbHpMbUZqWTJWd2RDaDJZV3dwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNCelpYUjFjRVoxYkd4TmRYTjBZV05vWlZCaGNtRnRjem9nWm5WdVkzUnBiMjRvYzJWNGNISXNJSEJ5YjJkeVlXMHNJR2x1ZG1WeWMyVXNJRzl0YVhSRmJYQjBlU2tnZTF4dUlDQWdJR3hsZENCd1lYSmhiWE1nUFNCelpYaHdjaTV3WVhKaGJYTTdYRzRnSUNBZ2RHaHBjeTV3ZFhOb1VHRnlZVzF6S0hCaGNtRnRjeWs3WEc1Y2JpQWdJQ0IwYUdsekxtOXdZMjlrWlNnbmNIVnphRkJ5YjJkeVlXMG5MQ0J3Y205bmNtRnRLVHRjYmlBZ0lDQjBhR2x6TG05d1kyOWtaU2duY0hWemFGQnliMmR5WVcwbkxDQnBiblpsY25ObEtUdGNibHh1SUNBZ0lHbG1JQ2h6Wlhod2NpNW9ZWE5vS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbUZqWTJWd2RDaHpaWGh3Y2k1b1lYTm9LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV2Y0dOdlpHVW9KMlZ0Y0hSNVNHRnphQ2NzSUc5dGFYUkZiWEIwZVNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSEJoY21GdGN6dGNiaUFnZlN4Y2JseHVJQ0JpYkc5amExQmhjbUZ0U1c1a1pYZzZJR1oxYm1OMGFXOXVLRzVoYldVcElIdGNiaUFnSUNCbWIzSWdLRnh1SUNBZ0lDQWdiR1YwSUdSbGNIUm9JRDBnTUN3Z2JHVnVJRDBnZEdocGN5NXZjSFJwYjI1ekxtSnNiMk5yVUdGeVlXMXpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHUmxjSFJvSUR3Z2JHVnVPMXh1SUNBZ0lDQWdaR1Z3ZEdncksxeHVJQ0FnSUNrZ2UxeHVJQ0FnSUNBZ2JHVjBJR0pzYjJOclVHRnlZVzF6SUQwZ2RHaHBjeTV2Y0hScGIyNXpMbUpzYjJOclVHRnlZVzF6VzJSbGNIUm9YU3hjYmlBZ0lDQWdJQ0FnY0dGeVlXMGdQU0JpYkc5amExQmhjbUZ0Y3lBbUppQnBibVJsZUU5bUtHSnNiMk5yVUdGeVlXMXpMQ0J1WVcxbEtUdGNiaUFnSUNBZ0lHbG1JQ2hpYkc5amExQmhjbUZ0Y3lBbUppQndZWEpoYlNBK1BTQXdLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJiWkdWd2RHZ3NJSEJoY21GdFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQndjbVZqYjIxd2FXeGxLR2x1Y0hWMExDQnZjSFJwYjI1ekxDQmxibllwSUh0Y2JpQWdhV1lnS0Z4dUlDQWdJR2x1Y0hWMElEMDlJRzUxYkd3Z2ZIeGNiaUFnSUNBb2RIbHdaVzltSUdsdWNIVjBJQ0U5UFNBbmMzUnlhVzVuSnlBbUppQnBibkIxZEM1MGVYQmxJQ0U5UFNBblVISnZaM0poYlNjcFhHNGdJQ2tnZTF4dUlDQWdJSFJvY205M0lHNWxkeUJGZUdObGNIUnBiMjRvWEc0Z0lDQWdJQ0FuV1c5MUlHMTFjM1FnY0dGemN5QmhJSE4wY21sdVp5QnZjaUJJWVc1a2JHVmlZWEp6SUVGVFZDQjBieUJJWVc1a2JHVmlZWEp6TG5CeVpXTnZiWEJwYkdVdUlGbHZkU0J3WVhOelpXUWdKeUFyWEc0Z0lDQWdJQ0FnSUdsdWNIVjBYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJRzl3ZEdsdmJuTWdQU0J2Y0hScGIyNXpJSHg4SUh0OU8xeHVJQ0JwWmlBb0lTZ25aR0YwWVNjZ2FXNGdiM0IwYVc5dWN5a3BJSHRjYmlBZ0lDQnZjSFJwYjI1ekxtUmhkR0VnUFNCMGNuVmxPMXh1SUNCOVhHNGdJR2xtSUNodmNIUnBiMjV6TG1OdmJYQmhkQ2tnZTF4dUlDQWdJRzl3ZEdsdmJuTXVkWE5sUkdWd2RHaHpJRDBnZEhKMVpUdGNiaUFnZlZ4dVhHNGdJR3hsZENCaGMzUWdQU0JsYm5ZdWNHRnljMlVvYVc1d2RYUXNJRzl3ZEdsdmJuTXBMRnh1SUNBZ0lHVnVkbWx5YjI1dFpXNTBJRDBnYm1WM0lHVnVkaTVEYjIxd2FXeGxjaWdwTG1OdmJYQnBiR1VvWVhOMExDQnZjSFJwYjI1ektUdGNiaUFnY21WMGRYSnVJRzVsZHlCbGJuWXVTbUYyWVZOamNtbHdkRU52YlhCcGJHVnlLQ2t1WTI5dGNHbHNaU2hsYm5acGNtOXViV1Z1ZEN3Z2IzQjBhVzl1Y3lrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqYjIxd2FXeGxLR2x1Y0hWMExDQnZjSFJwYjI1eklEMGdlMzBzSUdWdWRpa2dlMXh1SUNCcFppQW9YRzRnSUNBZ2FXNXdkWFFnUFQwZ2JuVnNiQ0I4ZkZ4dUlDQWdJQ2gwZVhCbGIyWWdhVzV3ZFhRZ0lUMDlJQ2R6ZEhKcGJtY25JQ1ltSUdsdWNIVjBMblI1Y0dVZ0lUMDlJQ2RRY205bmNtRnRKeWxjYmlBZ0tTQjdYRzRnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpaGNiaUFnSUNBZ0lDZFpiM1VnYlhWemRDQndZWE56SUdFZ2MzUnlhVzVuSUc5eUlFaGhibVJzWldKaGNuTWdRVk5VSUhSdklFaGhibVJzWldKaGNuTXVZMjl0Y0dsc1pTNGdXVzkxSUhCaGMzTmxaQ0FuSUN0Y2JpQWdJQ0FnSUNBZ2FXNXdkWFJjYmlBZ0lDQXBPMXh1SUNCOVhHNWNiaUFnYjNCMGFXOXVjeUE5SUdWNGRHVnVaQ2g3ZlN3Z2IzQjBhVzl1Y3lrN1hHNGdJR2xtSUNnaEtDZGtZWFJoSnlCcGJpQnZjSFJwYjI1ektTa2dlMXh1SUNBZ0lHOXdkR2x2Ym5NdVpHRjBZU0E5SUhSeWRXVTdYRzRnSUgxY2JpQWdhV1lnS0c5d2RHbHZibk11WTI5dGNHRjBLU0I3WEc0Z0lDQWdiM0IwYVc5dWN5NTFjMlZFWlhCMGFITWdQU0IwY25WbE8xeHVJQ0I5WEc1Y2JpQWdiR1YwSUdOdmJYQnBiR1ZrTzF4dVhHNGdJR1oxYm1OMGFXOXVJR052YlhCcGJHVkpibkIxZENncElIdGNiaUFnSUNCc1pYUWdZWE4wSUQwZ1pXNTJMbkJoY25ObEtHbHVjSFYwTENCdmNIUnBiMjV6S1N4Y2JpQWdJQ0FnSUdWdWRtbHliMjV0Wlc1MElEMGdibVYzSUdWdWRpNURiMjF3YVd4bGNpZ3BMbU52YlhCcGJHVW9ZWE4wTENCdmNIUnBiMjV6S1N4Y2JpQWdJQ0FnSUhSbGJYQnNZWFJsVTNCbFl5QTlJRzVsZHlCbGJuWXVTbUYyWVZOamNtbHdkRU52YlhCcGJHVnlLQ2t1WTI5dGNHbHNaU2hjYmlBZ0lDQWdJQ0FnWlc1MmFYSnZibTFsYm5Rc1hHNGdJQ0FnSUNBZ0lHOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNBZ0lIVnVaR1ZtYVc1bFpDeGNiaUFnSUNBZ0lDQWdkSEoxWlZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdaVzUyTG5SbGJYQnNZWFJsS0hSbGJYQnNZWFJsVTNCbFl5azdYRzRnSUgxY2JseHVJQ0F2THlCVVpXMXdiR0YwWlNCcGN5QnZibXg1SUdOdmJYQnBiR1ZrSUc5dUlHWnBjbk4wSUhWelpTQmhibVFnWTJGamFHVmtJR0ZtZEdWeUlIUm9ZWFFnY0c5cGJuUXVYRzRnSUdaMWJtTjBhVzl1SUhKbGRDaGpiMjUwWlhoMExDQmxlR1ZqVDNCMGFXOXVjeWtnZTF4dUlDQWdJR2xtSUNnaFkyOXRjR2xzWldRcElIdGNiaUFnSUNBZ0lHTnZiWEJwYkdWa0lEMGdZMjl0Y0dsc1pVbHVjSFYwS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmpiMjF3YVd4bFpDNWpZV3hzS0hSb2FYTXNJR052Ym5SbGVIUXNJR1Y0WldOUGNIUnBiMjV6S1R0Y2JpQWdmVnh1SUNCeVpYUXVYM05sZEhWd0lEMGdablZ1WTNScGIyNG9jMlYwZFhCUGNIUnBiMjV6S1NCN1hHNGdJQ0FnYVdZZ0tDRmpiMjF3YVd4bFpDa2dlMXh1SUNBZ0lDQWdZMjl0Y0dsc1pXUWdQU0JqYjIxd2FXeGxTVzV3ZFhRb0tUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJR052YlhCcGJHVmtMbDl6WlhSMWNDaHpaWFIxY0U5d2RHbHZibk1wTzF4dUlDQjlPMXh1SUNCeVpYUXVYMk5vYVd4a0lEMGdablZ1WTNScGIyNG9hU3dnWkdGMFlTd2dZbXh2WTJ0UVlYSmhiWE1zSUdSbGNIUm9jeWtnZTF4dUlDQWdJR2xtSUNnaFkyOXRjR2xzWldRcElIdGNiaUFnSUNBZ0lHTnZiWEJwYkdWa0lEMGdZMjl0Y0dsc1pVbHVjSFYwS0NrN1hHNGdJQ0FnZlZ4dUlDQWdJSEpsZEhWeWJpQmpiMjF3YVd4bFpDNWZZMmhwYkdRb2FTd2daR0YwWVN3Z1lteHZZMnRRWVhKaGJYTXNJR1JsY0hSb2N5azdYRzRnSUgwN1hHNGdJSEpsZEhWeWJpQnlaWFE3WEc1OVhHNWNibVoxYm1OMGFXOXVJR0Z5WjBWeGRXRnNjeWhoTENCaUtTQjdYRzRnSUdsbUlDaGhJRDA5UFNCaUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUgxY2JseHVJQ0JwWmlBb2FYTkJjbkpoZVNoaEtTQW1KaUJwYzBGeWNtRjVLR0lwSUNZbUlHRXViR1Z1WjNSb0lEMDlQU0JpTG14bGJtZDBhQ2tnZTF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnWVM1c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0NGaGNtZEZjWFZoYkhNb1lWdHBYU3dnWWx0cFhTa3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1poYkhObE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdmVnh1ZlZ4dVhHNW1kVzVqZEdsdmJpQjBjbUZ1YzJadmNtMU1hWFJsY21Gc1ZHOVFZWFJvS0hObGVIQnlLU0I3WEc0Z0lHbG1JQ2doYzJWNGNISXVjR0YwYUM1d1lYSjBjeWtnZTF4dUlDQWdJR3hsZENCc2FYUmxjbUZzSUQwZ2MyVjRjSEl1Y0dGMGFEdGNiaUFnSUNBdkx5QkRZWE4wYVc1bklIUnZJSE4wY21sdVp5Qm9aWEpsSUhSdklHMWhhMlVnWm1Gc2MyVWdZVzVrSURBZ2JHbDBaWEpoYkNCMllXeDFaWE1nY0d4aGVTQnVhV05sYkhrZ2QybDBhQ0IwYUdVZ2NtVnpkRnh1SUNBZ0lDOHZJRzltSUhSb1pTQnplWE4wWlcwdVhHNGdJQ0FnYzJWNGNISXVjR0YwYUNBOUlIdGNiaUFnSUNBZ0lIUjVjR1U2SUNkUVlYUm9SWGh3Y21WemMybHZiaWNzWEc0Z0lDQWdJQ0JrWVhSaE9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUdSbGNIUm9PaUF3TEZ4dUlDQWdJQ0FnY0dGeWRITTZJRnRzYVhSbGNtRnNMbTl5YVdkcGJtRnNJQ3NnSnlkZExGeHVJQ0FnSUNBZ2IzSnBaMmx1WVd3NklHeHBkR1Z5WVd3dWIzSnBaMmx1WVd3Z0t5QW5KeXhjYmlBZ0lDQWdJR3h2WXpvZ2JHbDBaWEpoYkM1c2IyTmNiaUFnSUNCOU8xeHVJQ0I5WEc1OVhHNGlYWDA9XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqXG4gKiBCYXNlZCBvbiB0aGUgQmFzZSA2NCBWTFEgaW1wbGVtZW50YXRpb24gaW4gQ2xvc3VyZSBDb21waWxlcjpcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2xvc3VyZS1jb21waWxlci9zb3VyY2UvYnJvd3NlL3RydW5rL3NyYy9jb20vZ29vZ2xlL2RlYnVnZ2luZy9zb3VyY2VtYXAvQmFzZTY0VkxRLmphdmFcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSBUaGUgQ2xvc3VyZSBDb21waWxlciBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlXG4gKiBtZXQ6XG4gKlxuICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmVcbiAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nXG4gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWRcbiAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHNcbiAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZFxuICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAqIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFRcbiAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLFxuICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVFxuICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsXG4gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTllcbiAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRVxuICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnLi9iYXNlNjQnKTtcblxuLy8gQSBzaW5nbGUgYmFzZSA2NCBkaWdpdCBjYW4gY29udGFpbiA2IGJpdHMgb2YgZGF0YS4gRm9yIHRoZSBiYXNlIDY0IHZhcmlhYmxlXG4vLyBsZW5ndGggcXVhbnRpdGllcyB3ZSB1c2UgaW4gdGhlIHNvdXJjZSBtYXAgc3BlYywgdGhlIGZpcnN0IGJpdCBpcyB0aGUgc2lnbixcbi8vIHRoZSBuZXh0IGZvdXIgYml0cyBhcmUgdGhlIGFjdHVhbCB2YWx1ZSwgYW5kIHRoZSA2dGggYml0IGlzIHRoZVxuLy8gY29udGludWF0aW9uIGJpdC4gVGhlIGNvbnRpbnVhdGlvbiBiaXQgdGVsbHMgdXMgd2hldGhlciB0aGVyZSBhcmUgbW9yZVxuLy8gZGlnaXRzIGluIHRoaXMgdmFsdWUgZm9sbG93aW5nIHRoaXMgZGlnaXQuXG4vL1xuLy8gICBDb250aW51YXRpb25cbi8vICAgfCAgICBTaWduXG4vLyAgIHwgICAgfFxuLy8gICBWICAgIFZcbi8vICAgMTAxMDExXG5cbnZhciBWTFFfQkFTRV9TSElGVCA9IDU7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0JBU0UgPSAxIDw8IFZMUV9CQVNFX1NISUZUO1xuXG4vLyBiaW5hcnk6IDAxMTExMVxudmFyIFZMUV9CQVNFX01BU0sgPSBWTFFfQkFTRSAtIDE7XG5cbi8vIGJpbmFyeTogMTAwMDAwXG52YXIgVkxRX0NPTlRJTlVBVElPTl9CSVQgPSBWTFFfQkFTRTtcblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIGEgdHdvLWNvbXBsZW1lbnQgdmFsdWUgdG8gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAxIGJlY29tZXMgMiAoMTAgYmluYXJ5KSwgLTEgYmVjb21lcyAzICgxMSBiaW5hcnkpXG4gKiAgIDIgYmVjb21lcyA0ICgxMDAgYmluYXJ5KSwgLTIgYmVjb21lcyA1ICgxMDEgYmluYXJ5KVxuICovXG5mdW5jdGlvbiB0b1ZMUVNpZ25lZChhVmFsdWUpIHtcbiAgcmV0dXJuIGFWYWx1ZSA8IDBcbiAgICA/ICgoLWFWYWx1ZSkgPDwgMSkgKyAxXG4gICAgOiAoYVZhbHVlIDw8IDEpICsgMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0byBhIHR3by1jb21wbGVtZW50IHZhbHVlIGZyb20gYSB2YWx1ZSB3aGVyZSB0aGUgc2lnbiBiaXQgaXNcbiAqIHBsYWNlZCBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0LiAgRm9yIGV4YW1wbGUsIGFzIGRlY2ltYWxzOlxuICogICAyICgxMCBiaW5hcnkpIGJlY29tZXMgMSwgMyAoMTEgYmluYXJ5KSBiZWNvbWVzIC0xXG4gKiAgIDQgKDEwMCBiaW5hcnkpIGJlY29tZXMgMiwgNSAoMTAxIGJpbmFyeSkgYmVjb21lcyAtMlxuICovXG5mdW5jdGlvbiBmcm9tVkxRU2lnbmVkKGFWYWx1ZSkge1xuICB2YXIgaXNOZWdhdGl2ZSA9IChhVmFsdWUgJiAxKSA9PT0gMTtcbiAgdmFyIHNoaWZ0ZWQgPSBhVmFsdWUgPj4gMTtcbiAgcmV0dXJuIGlzTmVnYXRpdmVcbiAgICA/IC1zaGlmdGVkXG4gICAgOiBzaGlmdGVkO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGJhc2UgNjQgVkxRIGVuY29kZWQgdmFsdWUuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gYmFzZTY0VkxRX2VuY29kZShhVmFsdWUpIHtcbiAgdmFyIGVuY29kZWQgPSBcIlwiO1xuICB2YXIgZGlnaXQ7XG5cbiAgdmFyIHZscSA9IHRvVkxRU2lnbmVkKGFWYWx1ZSk7XG5cbiAgZG8ge1xuICAgIGRpZ2l0ID0gdmxxICYgVkxRX0JBU0VfTUFTSztcbiAgICB2bHEgPj4+PSBWTFFfQkFTRV9TSElGVDtcbiAgICBpZiAodmxxID4gMCkge1xuICAgICAgLy8gVGhlcmUgYXJlIHN0aWxsIG1vcmUgZGlnaXRzIGluIHRoaXMgdmFsdWUsIHNvIHdlIG11c3QgbWFrZSBzdXJlIHRoZVxuICAgICAgLy8gY29udGludWF0aW9uIGJpdCBpcyBtYXJrZWQuXG4gICAgICBkaWdpdCB8PSBWTFFfQ09OVElOVUFUSU9OX0JJVDtcbiAgICB9XG4gICAgZW5jb2RlZCArPSBiYXNlNjQuZW5jb2RlKGRpZ2l0KTtcbiAgfSB3aGlsZSAodmxxID4gMCk7XG5cbiAgcmV0dXJuIGVuY29kZWQ7XG59O1xuXG4vKipcbiAqIERlY29kZXMgdGhlIG5leHQgYmFzZSA2NCBWTFEgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nIGFuZCByZXR1cm5zIHRoZVxuICogdmFsdWUgYW5kIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgdmlhIHRoZSBvdXQgcGFyYW1ldGVyLlxuICovXG5leHBvcnRzLmRlY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9kZWNvZGUoYVN0ciwgYUluZGV4LCBhT3V0UGFyYW0pIHtcbiAgdmFyIHN0ckxlbiA9IGFTdHIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gMDtcbiAgdmFyIHNoaWZ0ID0gMDtcbiAgdmFyIGNvbnRpbnVhdGlvbiwgZGlnaXQ7XG5cbiAgZG8ge1xuICAgIGlmIChhSW5kZXggPj0gc3RyTGVuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBtb3JlIGRpZ2l0cyBpbiBiYXNlIDY0IFZMUSB2YWx1ZS5cIik7XG4gICAgfVxuXG4gICAgZGlnaXQgPSBiYXNlNjQuZGVjb2RlKGFTdHIuY2hhckNvZGVBdChhSW5kZXgrKykpO1xuICAgIGlmIChkaWdpdCA9PT0gLTEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGRpZ2l0OiBcIiArIGFTdHIuY2hhckF0KGFJbmRleCAtIDEpKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24gPSAhIShkaWdpdCAmIFZMUV9DT05USU5VQVRJT05fQklUKTtcbiAgICBkaWdpdCAmPSBWTFFfQkFTRV9NQVNLO1xuICAgIHJlc3VsdCA9IHJlc3VsdCArIChkaWdpdCA8PCBzaGlmdCk7XG4gICAgc2hpZnQgKz0gVkxRX0JBU0VfU0hJRlQ7XG4gIH0gd2hpbGUgKGNvbnRpbnVhdGlvbik7XG5cbiAgYU91dFBhcmFtLnZhbHVlID0gZnJvbVZMUVNpZ25lZChyZXN1bHQpO1xuICBhT3V0UGFyYW0ucmVzdCA9IGFJbmRleDtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8qKlxuICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB2YWx1ZXMgZnJvbSBwYXJhbWV0ZXIvb3B0aW9uc1xuICogb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gYXJncyBUaGUgb2JqZWN0IHdlIGFyZSBleHRyYWN0aW5nIHZhbHVlcyBmcm9tXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2UgYXJlIGdldHRpbmcuXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIEFuIG9wdGlvbmFsIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgcHJvcGVydHkgaXMgbWlzc2luZ1xuICogZnJvbSB0aGUgb2JqZWN0LiBJZiB0aGlzIGlzIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBhblxuICogZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIGdldEFyZyhhQXJncywgYU5hbWUsIGFEZWZhdWx0VmFsdWUpIHtcbiAgaWYgKGFOYW1lIGluIGFBcmdzKSB7XG4gICAgcmV0dXJuIGFBcmdzW2FOYW1lXTtcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgcmV0dXJuIGFEZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhTmFtZSArICdcIiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LicpO1xuICB9XG59XG5leHBvcnRzLmdldEFyZyA9IGdldEFyZztcblxudmFyIHVybFJlZ2V4cCA9IC9eKD86KFtcXHcrXFwtLl0rKTopP1xcL1xcLyg/OihcXHcrOlxcdyspQCk/KFtcXHcuLV0qKSg/OjooXFxkKykpPyguKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgdXJsUmVnZXhwLnRlc3QoYVBhdGgpO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBzdHJjbXAobWFwcGluZ0Euc291cmNlLCBtYXBwaW5nQi5zb3VyY2UpO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsTGluZSAtIG1hcHBpbmdCLm9yaWdpbmFsTGluZTtcbiAgaWYgKGNtcCAhPT0gMCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5vcmlnaW5hbENvbHVtbiAtIG1hcHBpbmdCLm9yaWdpbmFsQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlT3JpZ2luYWwpIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIHJldHVybiBzdHJjbXAobWFwcGluZ0EubmFtZSwgbWFwcGluZ0IubmFtZSk7XG59XG5leHBvcnRzLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zID0gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnM7XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGRlZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBpbmRpY2VzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uLCBidXQgZGlmZmVyZW50XG4gKiBzb3VyY2UvbmFtZS9vcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYVxuICogbWFwcGluZyB3aXRoIGEgc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwIHx8IG9ubHlDb21wYXJlR2VuZXJhdGVkKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZDtcblxuZnVuY3Rpb24gc3RyY21wKGFTdHIxLCBhU3RyMikge1xuICBpZiAoYVN0cjEgPT09IGFTdHIyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoYVN0cjEgPT09IG51bGwpIHtcbiAgICByZXR1cm4gMTsgLy8gYVN0cjIgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMiA9PT0gbnVsbCkge1xuICAgIHJldHVybiAtMTsgLy8gYVN0cjEgIT09IG51bGxcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuLyoqXG4gKiBTdHJpcCBhbnkgSlNPTiBYU1NJIGF2b2lkYW5jZSBwcmVmaXggZnJvbSB0aGUgc3RyaW5nIChhcyBkb2N1bWVudGVkXG4gKiBpbiB0aGUgc291cmNlIG1hcHMgc3BlY2lmaWNhdGlvbiksIGFuZCB0aGVuIHBhcnNlIHRoZSBzdHJpbmcgYXNcbiAqIEpTT04uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU291cmNlTWFwSW5wdXQoc3RyKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHN0ci5yZXBsYWNlKC9eXFwpXX0nW15cXG5dKlxcbi8sICcnKSk7XG59XG5leHBvcnRzLnBhcnNlU291cmNlTWFwSW5wdXQgPSBwYXJzZVNvdXJjZU1hcElucHV0O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIFVSTCBvZiBhIHNvdXJjZSBnaXZlbiB0aGUgdGhlIHNvdXJjZSByb290LCB0aGUgc291cmNlJ3NcbiAqIFVSTCwgYW5kIHRoZSBzb3VyY2UgbWFwJ3MgVVJMLlxuICovXG5mdW5jdGlvbiBjb21wdXRlU291cmNlVVJMKHNvdXJjZVJvb3QsIHNvdXJjZVVSTCwgc291cmNlTWFwVVJMKSB7XG4gIHNvdXJjZVVSTCA9IHNvdXJjZVVSTCB8fCAnJztcblxuICBpZiAoc291cmNlUm9vdCkge1xuICAgIC8vIFRoaXMgZm9sbG93cyB3aGF0IENocm9tZSBkb2VzLlxuICAgIGlmIChzb3VyY2VSb290W3NvdXJjZVJvb3QubGVuZ3RoIC0gMV0gIT09ICcvJyAmJiBzb3VyY2VVUkxbMF0gIT09ICcvJykge1xuICAgICAgc291cmNlUm9vdCArPSAnLyc7XG4gICAgfVxuICAgIC8vIFRoZSBzcGVjIHNheXM6XG4gICAgLy8gICBMaW5lIDQ6IEFuIG9wdGlvbmFsIHNvdXJjZSByb290LCB1c2VmdWwgZm9yIHJlbG9jYXRpbmcgc291cmNlXG4gICAgLy8gICBmaWxlcyBvbiBhIHNlcnZlciBvciByZW1vdmluZyByZXBlYXRlZCB2YWx1ZXMgaW4gdGhlXG4gICAgLy8gICDigJxzb3VyY2Vz4oCdIGVudHJ5LiAgVGhpcyB2YWx1ZSBpcyBwcmVwZW5kZWQgdG8gdGhlIGluZGl2aWR1YWxcbiAgICAvLyAgIGVudHJpZXMgaW4gdGhlIOKAnHNvdXJjZeKAnSBmaWVsZC5cbiAgICBzb3VyY2VVUkwgPSBzb3VyY2VSb290ICsgc291cmNlVVJMO1xuICB9XG5cbiAgLy8gSGlzdG9yaWNhbGx5LCBTb3VyY2VNYXBDb25zdW1lciBkaWQgbm90IHRha2UgdGhlIHNvdXJjZU1hcFVSTCBhc1xuICAvLyBhIHBhcmFtZXRlci4gIFRoaXMgbW9kZSBpcyBzdGlsbCBzb21ld2hhdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeVxuICAvLyB0aGlzIGNvZGUgYmxvY2sgaXMgY29uZGl0aW9uYWwuICBIb3dldmVyLCBpdCdzIHByZWZlcmFibGUgdG8gcGFzc1xuICAvLyB0aGUgc291cmNlIG1hcCBVUkwgdG8gU291cmNlTWFwQ29uc3VtZXIsIHNvIHRoYXQgdGhpcyBmdW5jdGlvblxuICAvLyBjYW4gaW1wbGVtZW50IHRoZSBzb3VyY2UgVVJMIHJlc29sdXRpb24gYWxnb3JpdGhtIGFzIG91dGxpbmVkIGluXG4gIC8vIHRoZSBzcGVjLiAgVGhpcyBibG9jayBpcyBiYXNpY2FsbHkgdGhlIGVxdWl2YWxlbnQgb2Y6XG4gIC8vICAgIG5ldyBVUkwoc291cmNlVVJMLCBzb3VyY2VNYXBVUkwpLnRvU3RyaW5nKClcbiAgLy8gLi4uIGV4Y2VwdCBpdCBhdm9pZHMgdXNpbmcgVVJMLCB3aGljaCB3YXNuJ3QgYXZhaWxhYmxlIGluIHRoZVxuICAvLyBvbGRlciByZWxlYXNlcyBvZiBub2RlIHN0aWxsIHN1cHBvcnRlZCBieSB0aGlzIGxpYnJhcnkuXG4gIC8vXG4gIC8vIFRoZSBzcGVjIHNheXM6XG4gIC8vICAgSWYgdGhlIHNvdXJjZXMgYXJlIG5vdCBhYnNvbHV0ZSBVUkxzIGFmdGVyIHByZXBlbmRpbmcgb2YgdGhlXG4gIC8vICAg4oCcc291cmNlUm9vdOKAnSwgdGhlIHNvdXJjZXMgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIHRoZVxuICAvLyAgIFNvdXJjZU1hcCAobGlrZSByZXNvbHZpbmcgc2NyaXB0IHNyYyBpbiBhIGh0bWwgZG9jdW1lbnQpLlxuICBpZiAoc291cmNlTWFwVVJMKSB7XG4gICAgdmFyIHBhcnNlZCA9IHVybFBhcnNlKHNvdXJjZU1hcFVSTCk7XG4gICAgaWYgKCFwYXJzZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNvdXJjZU1hcFVSTCBjb3VsZCBub3QgYmUgcGFyc2VkXCIpO1xuICAgIH1cbiAgICBpZiAocGFyc2VkLnBhdGgpIHtcbiAgICAgIC8vIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LCBidXQga2VlcCB0aGUgXCIvXCIuXG4gICAgICB2YXIgaW5kZXggPSBwYXJzZWQucGF0aC5sYXN0SW5kZXhPZignLycpO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgcGFyc2VkLnBhdGggPSBwYXJzZWQucGF0aC5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlVVJMID0gam9pbih1cmxHZW5lcmF0ZShwYXJzZWQpLCBzb3VyY2VVUkwpO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShzb3VyY2VVUkwpO1xufVxuZXhwb3J0cy5jb21wdXRlU291cmNlVVJMID0gY29tcHV0ZVNvdXJjZVVSTDtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGhhc05hdGl2ZU1hcCA9IHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGFuIGFycmF5IGFuZCBhIHNldC4gQWRkaW5nIGEgbmV3XG4gKiBtZW1iZXIgaXMgTygxKSwgdGVzdGluZyBmb3IgbWVtYmVyc2hpcCBpcyBPKDEpLCBhbmQgZmluZGluZyB0aGUgaW5kZXggb2YgYW5cbiAqIGVsZW1lbnQgaXMgTygxKS4gUmVtb3ZpbmcgZWxlbWVudHMgZnJvbSB0aGUgc2V0IGlzIG5vdCBzdXBwb3J0ZWQuIE9ubHlcbiAqIHN0cmluZ3MgYXJlIHN1cHBvcnRlZCBmb3IgbWVtYmVyc2hpcC5cbiAqL1xuZnVuY3Rpb24gQXJyYXlTZXQoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NldCA9IGhhc05hdGl2ZU1hcCA/IG5ldyBNYXAoKSA6IE9iamVjdC5jcmVhdGUobnVsbCk7XG59XG5cbi8qKlxuICogU3RhdGljIG1ldGhvZCBmb3IgY3JlYXRpbmcgQXJyYXlTZXQgaW5zdGFuY2VzIGZyb20gYW4gZXhpc3RpbmcgYXJyYXkuXG4gKi9cbkFycmF5U2V0LmZyb21BcnJheSA9IGZ1bmN0aW9uIEFycmF5U2V0X2Zyb21BcnJheShhQXJyYXksIGFBbGxvd0R1cGxpY2F0ZXMpIHtcbiAgdmFyIHNldCA9IG5ldyBBcnJheVNldCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgc2V0LmFkZChhQXJyYXlbaV0sIGFBbGxvd0R1cGxpY2F0ZXMpO1xuICB9XG4gIHJldHVybiBzZXQ7XG59O1xuXG4vKipcbiAqIFJldHVybiBob3cgbWFueSB1bmlxdWUgaXRlbXMgYXJlIGluIHRoaXMgQXJyYXlTZXQuIElmIGR1cGxpY2F0ZXMgaGF2ZSBiZWVuXG4gKiBhZGRlZCwgdGhhbiB0aG9zZSBkbyBub3QgY291bnQgdG93YXJkcyB0aGUgc2l6ZS5cbiAqXG4gKiBAcmV0dXJucyBOdW1iZXJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiBBcnJheVNldF9zaXplKCkge1xuICByZXR1cm4gaGFzTmF0aXZlTWFwID8gdGhpcy5fc2V0LnNpemUgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9zZXQpLmxlbmd0aDtcbn07XG5cbi8qKlxuICogQWRkIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBzZXQuXG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBBcnJheVNldF9hZGQoYVN0ciwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc1N0ciA9IGhhc05hdGl2ZU1hcCA/IGFTdHIgOiB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICB2YXIgaXNEdXBsaWNhdGUgPSBoYXNOYXRpdmVNYXAgPyB0aGlzLmhhcyhhU3RyKSA6IGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cik7XG4gIHZhciBpZHggPSB0aGlzLl9hcnJheS5sZW5ndGg7XG4gIGlmICghaXNEdXBsaWNhdGUgfHwgYUFsbG93RHVwbGljYXRlcykge1xuICAgIHRoaXMuX2FycmF5LnB1c2goYVN0cik7XG4gIH1cbiAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgIGlmIChoYXNOYXRpdmVNYXApIHtcbiAgICAgIHRoaXMuX3NldC5zZXQoYVN0ciwgaWR4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2V0W3NTdHJdID0gaWR4O1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBJcyB0aGUgZ2l2ZW4gc3RyaW5nIGEgbWVtYmVyIG9mIHRoaXMgc2V0P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gQXJyYXlTZXRfaGFzKGFTdHIpIHtcbiAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgIHJldHVybiB0aGlzLl9zZXQuaGFzKGFTdHIpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICByZXR1cm4gaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIGluIHRoZSBhcnJheT9cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBBcnJheVNldF9pbmRleE9mKGFTdHIpIHtcbiAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgIHZhciBpZHggPSB0aGlzLl9zZXQuZ2V0KGFTdHIpO1xuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICByZXR1cm4gaWR4O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgc1N0ciA9IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gICAgaWYgKGhhcy5jYWxsKHRoaXMuX3NldCwgc1N0cikpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXRbc1N0cl07XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU3RyICsgJ1wiIGlzIG5vdCBpbiB0aGUgc2V0LicpO1xufTtcblxuLyoqXG4gKiBXaGF0IGlzIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleD9cbiAqXG4gKiBAcGFyYW0gTnVtYmVyIGFJZHhcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gQXJyYXlTZXRfYXQoYUlkeCkge1xuICBpZiAoYUlkeCA+PSAwICYmIGFJZHggPCB0aGlzLl9hcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdGhpcy5fYXJyYXlbYUlkeF07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBlbGVtZW50IGluZGV4ZWQgYnkgJyArIGFJZHgpO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBhcnJheSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNldCAod2hpY2ggaGFzIHRoZSBwcm9wZXIgaW5kaWNlc1xuICogaW5kaWNhdGVkIGJ5IGluZGV4T2YpLiBOb3RlIHRoYXQgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGludGVybmFsIGFycmF5IHVzZWRcbiAqIGZvciBzdG9yaW5nIHRoZSBtZW1iZXJzIHNvIHRoYXQgbm8gb25lIGNhbiBtZXNzIHdpdGggaW50ZXJuYWwgc3RhdGUuXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMuX2FycmF5LnNsaWNlKCk7XG59O1xuXG5leHBvcnRzLkFycmF5U2V0ID0gQXJyYXlTZXQ7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xudmFyIE1hcHBpbmdMaXN0ID0gcmVxdWlyZSgnLi9tYXBwaW5nLWxpc3QnKS5NYXBwaW5nTGlzdDtcblxuLyoqXG4gKiBBbiBpbnN0YW5jZSBvZiB0aGUgU291cmNlTWFwR2VuZXJhdG9yIHJlcHJlc2VudHMgYSBzb3VyY2UgbWFwIHdoaWNoIGlzXG4gKiBiZWluZyBidWlsdCBpbmNyZW1lbnRhbGx5LiBZb3UgbWF5IHBhc3MgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZ1xuICogcHJvcGVydGllczpcbiAqXG4gKiAgIC0gZmlsZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIHNvdXJjZVJvb3Q6IEEgcm9vdCBmb3IgYWxsIHJlbGF0aXZlIFVSTHMgaW4gdGhpcyBzb3VyY2UgbWFwLlxuICovXG5mdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3IoYUFyZ3MpIHtcbiAgaWYgKCFhQXJncykge1xuICAgIGFBcmdzID0ge307XG4gIH1cbiAgdGhpcy5fZmlsZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnZmlsZScsIG51bGwpO1xuICB0aGlzLl9zb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2VSb290JywgbnVsbCk7XG4gIHRoaXMuX3NraXBWYWxpZGF0aW9uID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdza2lwVmFsaWRhdGlvbicsIGZhbHNlKTtcbiAgdGhpcy5fc291cmNlcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9uYW1lcyA9IG5ldyBBcnJheVNldCgpO1xuICB0aGlzLl9tYXBwaW5ncyA9IG5ldyBNYXBwaW5nTGlzdCgpO1xuICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBudWxsO1xufVxuXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFNvdXJjZU1hcEdlbmVyYXRvciBiYXNlZCBvbiBhIFNvdXJjZU1hcENvbnN1bWVyXG4gKlxuICogQHBhcmFtIGFTb3VyY2VNYXBDb25zdW1lciBUaGUgU291cmNlTWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9mcm9tU291cmNlTWFwKGFTb3VyY2VNYXBDb25zdW1lcikge1xuICAgIHZhciBzb3VyY2VSb290ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZVJvb3Q7XG4gICAgdmFyIGdlbmVyYXRvciA9IG5ldyBTb3VyY2VNYXBHZW5lcmF0b3Ioe1xuICAgICAgZmlsZTogYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUsXG4gICAgICBzb3VyY2VSb290OiBzb3VyY2VSb290XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICB2YXIgbmV3TWFwcGluZyA9IHtcbiAgICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lLFxuICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW5cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgbmV3TWFwcGluZy5zb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBuZXdNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdNYXBwaW5nLm9yaWdpbmFsID0ge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIGNvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5ld01hcHBpbmcubmFtZSA9IG1hcHBpbmcubmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBnZW5lcmF0b3IuYWRkTWFwcGluZyhuZXdNYXBwaW5nKTtcbiAgICB9KTtcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgc291cmNlUmVsYXRpdmUgPSBzb3VyY2VGaWxlO1xuICAgICAgaWYgKHNvdXJjZVJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgc291cmNlUmVsYXRpdmUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWdlbmVyYXRvci5fc291cmNlcy5oYXMoc291cmNlUmVsYXRpdmUpKSB7XG4gICAgICAgIGdlbmVyYXRvci5fc291cmNlcy5hZGQoc291cmNlUmVsYXRpdmUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBnZW5lcmF0b3Iuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9O1xuXG4vKipcbiAqIEFkZCBhIHNpbmdsZSBtYXBwaW5nIGZyb20gb3JpZ2luYWwgc291cmNlIGxpbmUgYW5kIGNvbHVtbiB0byB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gZm9yIHRoaXMgc291cmNlIG1hcCBiZWluZyBjcmVhdGVkLiBUaGUgbWFwcGluZ1xuICogb2JqZWN0IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gZ2VuZXJhdGVkOiBBbiBvYmplY3Qgd2l0aCB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMuXG4gKiAgIC0gb3JpZ2luYWw6IEFuIG9iamVjdCB3aXRoIHRoZSBvcmlnaW5hbCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIChyZWxhdGl2ZSB0byB0aGUgc291cmNlUm9vdCkuXG4gKiAgIC0gbmFtZTogQW4gb3B0aW9uYWwgb3JpZ2luYWwgdG9rZW4gbmFtZSBmb3IgdGhpcyBtYXBwaW5nLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFkZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfYWRkTWFwcGluZyhhQXJncykge1xuICAgIHZhciBnZW5lcmF0ZWQgPSB1dGlsLmdldEFyZyhhQXJncywgJ2dlbmVyYXRlZCcpO1xuICAgIHZhciBvcmlnaW5hbCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnb3JpZ2luYWwnLCBudWxsKTtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnLCBudWxsKTtcbiAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbmFtZScsIG51bGwpO1xuXG4gICAgaWYgKCF0aGlzLl9za2lwVmFsaWRhdGlvbikge1xuICAgICAgdGhpcy5fdmFsaWRhdGVNYXBwaW5nKGdlbmVyYXRlZCwgb3JpZ2luYWwsIHNvdXJjZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSBTdHJpbmcoc291cmNlKTtcbiAgICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgICB0aGlzLl9zb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYW1lICE9IG51bGwpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgICBpZiAoIXRoaXMuX25hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fbWFwcGluZ3MuYWRkKHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uLFxuICAgICAgb3JpZ2luYWxMaW5lOiBvcmlnaW5hbCAhPSBudWxsICYmIG9yaWdpbmFsLmxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5jb2x1bW4sXG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG5hbWU6IG5hbWVcbiAgICB9KTtcbiAgfTtcblxuLyoqXG4gKiBTZXQgdGhlIHNvdXJjZSBjb250ZW50IGZvciBhIHNvdXJjZSBmaWxlLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnNldFNvdXJjZUNvbnRlbnQgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3Jfc2V0U291cmNlQ29udGVudChhU291cmNlRmlsZSwgYVNvdXJjZUNvbnRlbnQpIHtcbiAgICB2YXIgc291cmNlID0gYVNvdXJjZUZpbGU7XG4gICAgaWYgKHRoaXMuX3NvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLl9zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgIH1cblxuICAgIGlmIChhU291cmNlQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAvLyBBZGQgdGhlIHNvdXJjZSBjb250ZW50IHRvIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBfc291cmNlc0NvbnRlbnRzIG1hcCBpZiB0aGUgcHJvcGVydHkgaXMgbnVsbC5cbiAgICAgIGlmICghdGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhzb3VyY2UpXSA9IGFTb3VyY2VDb250ZW50O1xuICAgIH0gZWxzZSBpZiAodGhpcy5fc291cmNlc0NvbnRlbnRzKSB7XG4gICAgICAvLyBSZW1vdmUgdGhlIHNvdXJjZSBmaWxlIGZyb20gdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwLlxuICAgICAgLy8gSWYgdGhlIF9zb3VyY2VzQ29udGVudHMgbWFwIGlzIGVtcHR5LCBzZXQgdGhlIHByb3BlcnR5IHRvIG51bGwuXG4gICAgICBkZWxldGUgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV07XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fc291cmNlc0NvbnRlbnRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQXBwbGllcyB0aGUgbWFwcGluZ3Mgb2YgYSBzdWItc291cmNlLW1hcCBmb3IgYSBzcGVjaWZpYyBzb3VyY2UgZmlsZSB0byB0aGVcbiAqIHNvdXJjZSBtYXAgYmVpbmcgZ2VuZXJhdGVkLiBFYWNoIG1hcHBpbmcgdG8gdGhlIHN1cHBsaWVkIHNvdXJjZSBmaWxlIGlzXG4gKiByZXdyaXR0ZW4gdXNpbmcgdGhlIHN1cHBsaWVkIHNvdXJjZSBtYXAuIE5vdGU6IFRoZSByZXNvbHV0aW9uIGZvciB0aGVcbiAqIHJlc3VsdGluZyBtYXBwaW5ncyBpcyB0aGUgbWluaW1pdW0gb2YgdGhpcyBtYXAgYW5kIHRoZSBzdXBwbGllZCBtYXAuXG4gKlxuICogQHBhcmFtIGFTb3VyY2VNYXBDb25zdW1lciBUaGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkLlxuICogQHBhcmFtIGFTb3VyY2VGaWxlIE9wdGlvbmFsLiBUaGUgZmlsZW5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlLlxuICogICAgICAgIElmIG9taXR0ZWQsIFNvdXJjZU1hcENvbnN1bWVyJ3MgZmlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVzZWQuXG4gKiBAcGFyYW0gYVNvdXJjZU1hcFBhdGggT3B0aW9uYWwuIFRoZSBkaXJuYW1lIG9mIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgbWFwXG4gKiAgICAgICAgdG8gYmUgYXBwbGllZC4gSWYgcmVsYXRpdmUsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSBTb3VyY2VNYXBDb25zdW1lci5cbiAqICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBuZWVkZWQgd2hlbiB0aGUgdHdvIHNvdXJjZSBtYXBzIGFyZW4ndCBpbiB0aGUgc2FtZVxuICogICAgICAgIGRpcmVjdG9yeSwgYW5kIHRoZSBzb3VyY2UgbWFwIHRvIGJlIGFwcGxpZWQgY29udGFpbnMgcmVsYXRpdmUgc291cmNlXG4gKiAgICAgICAgcGF0aHMuIElmIHNvLCB0aG9zZSByZWxhdGl2ZSBzb3VyY2UgcGF0aHMgbmVlZCB0byBiZSByZXdyaXR0ZW5cbiAqICAgICAgICByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwR2VuZXJhdG9yLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLmFwcGx5U291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FwcGx5U291cmNlTWFwKGFTb3VyY2VNYXBDb25zdW1lciwgYVNvdXJjZUZpbGUsIGFTb3VyY2VNYXBQYXRoKSB7XG4gICAgdmFyIHNvdXJjZUZpbGUgPSBhU291cmNlRmlsZTtcbiAgICAvLyBJZiBhU291cmNlRmlsZSBpcyBvbWl0dGVkLCB3ZSB3aWxsIHVzZSB0aGUgZmlsZSBwcm9wZXJ0eSBvZiB0aGUgU291cmNlTWFwXG4gICAgaWYgKGFTb3VyY2VGaWxlID09IG51bGwpIHtcbiAgICAgIGlmIChhU291cmNlTWFwQ29uc3VtZXIuZmlsZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCByZXF1aXJlcyBlaXRoZXIgYW4gZXhwbGljaXQgc291cmNlIGZpbGUsICcgK1xuICAgICAgICAgICdvciB0aGUgc291cmNlIG1hcFxcJ3MgXCJmaWxlXCIgcHJvcGVydHkuIEJvdGggd2VyZSBvbWl0dGVkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNvdXJjZUZpbGUgPSBhU291cmNlTWFwQ29uc3VtZXIuZmlsZTtcbiAgICB9XG4gICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLl9zb3VyY2VSb290O1xuICAgIC8vIE1ha2UgXCJzb3VyY2VGaWxlXCIgcmVsYXRpdmUgaWYgYW4gYWJzb2x1dGUgVXJsIGlzIHBhc3NlZC5cbiAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2VGaWxlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBzb3VyY2VGaWxlKTtcbiAgICB9XG4gICAgLy8gQXBwbHlpbmcgdGhlIFNvdXJjZU1hcCBjYW4gYWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSB0aGUgc291cmNlcyBhbmRcbiAgICAvLyB0aGUgbmFtZXMgYXJyYXkuXG4gICAgdmFyIG5ld1NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgICB2YXIgbmV3TmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICAgIC8vIEZpbmQgbWFwcGluZ3MgZm9yIHRoZSBcInNvdXJjZUZpbGVcIlxuICAgIHRoaXMuX21hcHBpbmdzLnVuc29ydGVkRm9yRWFjaChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBzb3VyY2VGaWxlICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lICE9IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgY2FuIGJlIG1hcHBlZCBieSB0aGUgc291cmNlIG1hcCwgdGhlbiB1cGRhdGUgdGhlIG1hcHBpbmcuXG4gICAgICAgIHZhciBvcmlnaW5hbCA9IGFTb3VyY2VNYXBDb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcmlnaW5hbC5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENvcHkgbWFwcGluZ1xuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gb3JpZ2luYWwuc291cmNlO1xuICAgICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgbWFwcGluZy5zb3VyY2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gdXRpbC5yZWxhdGl2ZShzb3VyY2VSb290LCBtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gb3JpZ2luYWwuY29sdW1uO1xuICAgICAgICAgIGlmIChvcmlnaW5hbC5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1hcHBpbmcubmFtZSA9IG9yaWdpbmFsLm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzb3VyY2UgPSBtYXBwaW5nLnNvdXJjZTtcbiAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCAmJiAhbmV3U291cmNlcy5oYXMoc291cmNlKSkge1xuICAgICAgICBuZXdTb3VyY2VzLmFkZChzb3VyY2UpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IG1hcHBpbmcubmFtZTtcbiAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIW5ld05hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICBuZXdOYW1lcy5hZGQobmFtZSk7XG4gICAgICB9XG5cbiAgICB9LCB0aGlzKTtcbiAgICB0aGlzLl9zb3VyY2VzID0gbmV3U291cmNlcztcbiAgICB0aGlzLl9uYW1lcyA9IG5ld05hbWVzO1xuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudHMgb2YgYXBwbGllZCBtYXAuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGFTb3VyY2VNYXBQYXRoICE9IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXRpbC5qb2luKGFTb3VyY2VNYXBQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VDb250ZW50KHNvdXJjZUZpbGUsIGNvbnRlbnQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEEgbWFwcGluZyBjYW4gaGF2ZSBvbmUgb2YgdGhlIHRocmVlIGxldmVscyBvZiBkYXRhOlxuICpcbiAqICAgMS4gSnVzdCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICogICAyLiBUaGUgR2VuZXJhdGVkIHBvc2l0aW9uLCBvcmlnaW5hbCBwb3NpdGlvbiwgYW5kIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgMy4gR2VuZXJhdGVkIGFuZCBvcmlnaW5hbCBwb3NpdGlvbiwgb3JpZ2luYWwgc291cmNlLCBhcyB3ZWxsIGFzIGEgbmFtZVxuICogICAgICB0b2tlbi5cbiAqXG4gKiBUbyBtYWludGFpbiBjb25zaXN0ZW5jeSwgd2UgdmFsaWRhdGUgdGhhdCBhbnkgbmV3IG1hcHBpbmcgYmVpbmcgYWRkZWQgZmFsbHNcbiAqIGluIHRvIG9uZSBvZiB0aGVzZSBjYXRlZ29yaWVzLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl92YWxpZGF0ZU1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdmFsaWRhdGVNYXBwaW5nKGFHZW5lcmF0ZWQsIGFPcmlnaW5hbCwgYVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTmFtZSkge1xuICAgIC8vIFdoZW4gYU9yaWdpbmFsIGlzIHRydXRoeSBidXQgaGFzIGVtcHR5IHZhbHVlcyBmb3IgLmxpbmUgYW5kIC5jb2x1bW4sXG4gICAgLy8gaXQgaXMgbW9zdCBsaWtlbHkgYSBwcm9ncmFtbWVyIGVycm9yLiBJbiB0aGlzIGNhc2Ugd2UgdGhyb3cgYSB2ZXJ5XG4gICAgLy8gc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSB0byB0cnkgdG8gZ3VpZGUgdGhlbSB0aGUgcmlnaHQgd2F5LlxuICAgIC8vIEZvciBleGFtcGxlOiBodHRwczovL2dpdGh1Yi5jb20vUG9seW1lci9wb2x5bWVyLWJ1bmRsZXIvcHVsbC81MTlcbiAgICBpZiAoYU9yaWdpbmFsICYmIHR5cGVvZiBhT3JpZ2luYWwubGluZSAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGFPcmlnaW5hbC5jb2x1bW4gIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdvcmlnaW5hbC5saW5lIGFuZCBvcmlnaW5hbC5jb2x1bW4gYXJlIG5vdCBudW1iZXJzIC0tIHlvdSBwcm9iYWJseSBtZWFudCB0byBvbWl0ICcgK1xuICAgICAgICAgICAgJ3RoZSBvcmlnaW5hbCBtYXBwaW5nIGVudGlyZWx5IGFuZCBvbmx5IG1hcCB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uLiBJZiBzbywgcGFzcyAnICtcbiAgICAgICAgICAgICdudWxsIGZvciB0aGUgb3JpZ2luYWwgbWFwcGluZyBpbnN0ZWFkIG9mIGFuIG9iamVjdCB3aXRoIGVtcHR5IG9yIG51bGwgdmFsdWVzLidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICYmIGFHZW5lcmF0ZWQubGluZSA+IDAgJiYgYUdlbmVyYXRlZC5jb2x1bW4gPj0gMFxuICAgICAgICAmJiAhYU9yaWdpbmFsICYmICFhU291cmNlICYmICFhTmFtZSkge1xuICAgICAgLy8gQ2FzZSAxLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmIChhR2VuZXJhdGVkICYmICdsaW5lJyBpbiBhR2VuZXJhdGVkICYmICdjb2x1bW4nIGluIGFHZW5lcmF0ZWRcbiAgICAgICAgICAgICAmJiBhT3JpZ2luYWwgJiYgJ2xpbmUnIGluIGFPcmlnaW5hbCAmJiAnY29sdW1uJyBpbiBhT3JpZ2luYWxcbiAgICAgICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgICAgICAmJiBhT3JpZ2luYWwubGluZSA+IDAgJiYgYU9yaWdpbmFsLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYVNvdXJjZSkge1xuICAgICAgLy8gQ2FzZXMgMiBhbmQgMy5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWFwcGluZzogJyArIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZ2VuZXJhdGVkOiBhR2VuZXJhdGVkLFxuICAgICAgICBzb3VyY2U6IGFTb3VyY2UsXG4gICAgICAgIG9yaWdpbmFsOiBhT3JpZ2luYWwsXG4gICAgICAgIG5hbWU6IGFOYW1lXG4gICAgICB9KSk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFNlcmlhbGl6ZSB0aGUgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gdG8gdGhlIHN0cmVhbSBvZiBiYXNlIDY0IFZMUXNcbiAqIHNwZWNpZmllZCBieSB0aGUgc291cmNlIG1hcCBmb3JtYXQuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuX3NlcmlhbGl6ZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NlcmlhbGl6ZU1hcHBpbmdzKCkge1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsTGluZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzTmFtZSA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIG5leHQ7XG4gICAgdmFyIG1hcHBpbmc7XG4gICAgdmFyIG5hbWVJZHg7XG4gICAgdmFyIHNvdXJjZUlkeDtcblxuICAgIHZhciBtYXBwaW5ncyA9IHRoaXMuX21hcHBpbmdzLnRvQXJyYXkoKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIG1hcHBpbmcgPSBtYXBwaW5nc1tpXTtcbiAgICAgIG5leHQgPSAnJ1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lICE9PSBwcmV2aW91c0dlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgICB3aGlsZSAobWFwcGluZy5nZW5lcmF0ZWRMaW5lICE9PSBwcmV2aW91c0dlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBuZXh0ICs9ICc7JztcbiAgICAgICAgICBwcmV2aW91c0dlbmVyYXRlZExpbmUrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgIGlmICghdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nLCBtYXBwaW5nc1tpIC0gMV0pKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCArPSAnLCc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZUlkeCA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShzb3VyY2VJZHggLSBwcmV2aW91c1NvdXJjZSk7XG4gICAgICAgIHByZXZpb3VzU291cmNlID0gc291cmNlSWR4O1xuXG4gICAgICAgIC8vIGxpbmVzIGFyZSBzdG9yZWQgMC1iYXNlZCBpbiBTb3VyY2VNYXAgc3BlYyB2ZXJzaW9uIDNcbiAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcub3JpZ2luYWxMaW5lIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHByZXZpb3VzT3JpZ2luYWxMaW5lKTtcbiAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDE7XG5cbiAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsQ29sdW1uKTtcbiAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKG1hcHBpbmcubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgbmFtZUlkeCA9IHRoaXMuX25hbWVzLmluZGV4T2YobWFwcGluZy5uYW1lKTtcbiAgICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUobmFtZUlkeCAtIHByZXZpb3VzTmFtZSk7XG4gICAgICAgICAgcHJldmlvdXNOYW1lID0gbmFtZUlkeDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHQgKz0gbmV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoYVNvdXJjZXMsIGFTb3VyY2VSb290KSB7XG4gICAgcmV0dXJuIGFTb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChhU291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUoYVNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICB9XG4gICAgICB2YXIga2V5ID0gdXRpbC50b1NldFN0cmluZyhzb3VyY2UpO1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9zb3VyY2VzQ29udGVudHMsIGtleSlcbiAgICAgICAgPyB0aGlzLl9zb3VyY2VzQ29udGVudHNba2V5XVxuICAgICAgICA6IG51bGw7XG4gICAgfSwgdGhpcyk7XG4gIH07XG5cbi8qKlxuICogRXh0ZXJuYWxpemUgdGhlIHNvdXJjZSBtYXAuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9KU09OID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3RvSlNPTigpIHtcbiAgICB2YXIgbWFwID0ge1xuICAgICAgdmVyc2lvbjogdGhpcy5fdmVyc2lvbixcbiAgICAgIHNvdXJjZXM6IHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgbmFtZXM6IHRoaXMuX25hbWVzLnRvQXJyYXkoKSxcbiAgICAgIG1hcHBpbmdzOiB0aGlzLl9zZXJpYWxpemVNYXBwaW5ncygpXG4gICAgfTtcbiAgICBpZiAodGhpcy5fZmlsZSAhPSBudWxsKSB7XG4gICAgICBtYXAuZmlsZSA9IHRoaXMuX2ZpbGU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG1hcC5zb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgbWFwLnNvdXJjZXNDb250ZW50ID0gdGhpcy5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChtYXAuc291cmNlcywgbWFwLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH07XG5cbi8qKlxuICogUmVuZGVyIHRoZSBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZCB0byBhIHN0cmluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS50b1N0cmluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b1N0cmluZygpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy50b0pTT04oKSk7XG4gIH07XG5cbmV4cG9ydHMuU291cmNlTWFwR2VuZXJhdG9yID0gU291cmNlTWFwR2VuZXJhdG9yO1xuIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG5leHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EID0gMTtcbmV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZSBpbXBsZW1lbnRhdGlvbiBvZiBiaW5hcnkgc2VhcmNoLlxuICpcbiAqIEBwYXJhbSBhTG93IEluZGljZXMgaGVyZSBhbmQgbG93ZXIgZG8gbm90IGNvbnRhaW4gdGhlIG5lZWRsZS5cbiAqIEBwYXJhbSBhSGlnaCBJbmRpY2VzIGhlcmUgYW5kIGhpZ2hlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGFIYXlzdGFjayBUaGUgbm9uLWVtcHR5IGFycmF5IGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEZ1bmN0aW9uIHdoaWNoIHRha2VzIHR3byBlbGVtZW50cyBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcmVjdXJzaXZlU2VhcmNoKGFMb3csIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcykge1xuICAvLyBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgd2hlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlOlxuICAvL1xuICAvLyAgIDEuIFdlIGZpbmQgdGhlIGV4YWN0IGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAvL1xuICAvLyAgIDIuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYnV0IHdlIGNhbiByZXR1cm4gdGhlIGluZGV4IG9mXG4gIC8vICAgICAgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50LlxuICAvL1xuICAvLyAgIDMuIFdlIGRpZCBub3QgZmluZCB0aGUgZXhhY3QgZWxlbWVudCwgYW5kIHRoZXJlIGlzIG5vIG5leHQtY2xvc2VzdFxuICAvLyAgICAgIGVsZW1lbnQgdGhhbiB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLCBzbyB3ZSByZXR1cm4gLTEuXG4gIHZhciBtaWQgPSBNYXRoLmZsb29yKChhSGlnaCAtIGFMb3cpIC8gMikgKyBhTG93O1xuICB2YXIgY21wID0gYUNvbXBhcmUoYU5lZWRsZSwgYUhheXN0YWNrW21pZF0sIHRydWUpO1xuICBpZiAoY21wID09PSAwKSB7XG4gICAgLy8gRm91bmQgdGhlIGVsZW1lbnQgd2UgYXJlIGxvb2tpbmcgZm9yLlxuICAgIHJldHVybiBtaWQ7XG4gIH1cbiAgZWxzZSBpZiAoY21wID4gMCkge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgZ3JlYXRlciB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChhSGlnaCAtIG1pZCA+IDEpIHtcbiAgICAgIC8vIFRoZSBlbGVtZW50IGlzIGluIHRoZSB1cHBlciBoYWxmLlxuICAgICAgcmV0dXJuIHJlY3Vyc2l2ZVNlYXJjaChtaWQsIGFIaWdoLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGV4YWN0IG5lZWRsZSBlbGVtZW50IHdhcyBub3QgZm91bmQgaW4gdGhpcyBoYXlzdGFjay4gRGV0ZXJtaW5lIGlmXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIGFIaWdoIDwgYUhheXN0YWNrLmxlbmd0aCA/IGFIaWdoIDogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIC8vIE91ciBuZWVkbGUgaXMgbGVzcyB0aGFuIGFIYXlzdGFja1ttaWRdLlxuICAgIGlmIChtaWQgLSBhTG93ID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIGxvd2VyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKGFMb3csIG1pZCwgYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpO1xuICAgIH1cblxuICAgIC8vIHdlIGFyZSBpbiB0ZXJtaW5hdGlvbiBjYXNlICgzKSBvciAoMikgYW5kIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgdGhpbmcuXG4gICAgaWYgKGFCaWFzID09IGV4cG9ydHMuTEVBU1RfVVBQRVJfQk9VTkQpIHtcbiAgICAgIHJldHVybiBtaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhTG93IDwgMCA/IC0xIDogYUxvdztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggd2hpY2ggd2lsbCBhbHdheXMgdHJ5IGFuZCByZXR1cm5cbiAqIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlmIHRoZXJlIGlzIG5vIGV4YWN0IGhpdC4gVGhpcyBpcyBiZWNhdXNlXG4gKiBtYXBwaW5ncyBiZXR3ZWVuIG9yaWdpbmFsIGFuZCBnZW5lcmF0ZWQgbGluZS9jb2wgcGFpcnMgYXJlIHNpbmdsZSBwb2ludHMsXG4gKiBhbmQgdGhlcmUgaXMgYW4gaW1wbGljaXQgcmVnaW9uIGJldHdlZW4gZWFjaCBvZiB0aGVtLCBzbyBhIG1pc3MganVzdCBtZWFuc1xuICogdGhhdCB5b3UgYXJlbid0IG9uIHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcmVnaW9uLlxuICpcbiAqIEBwYXJhbSBhTmVlZGxlIFRoZSBlbGVtZW50IHlvdSBhcmUgbG9va2luZyBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBhcnJheSB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkLlxuICogQHBhcmFtIGFDb21wYXJlIEEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIG5lZWRsZSBhbmQgYW4gZWxlbWVudCBpbiB0aGVcbiAqICAgICBhcnJheSBhbmQgcmV0dXJucyAtMSwgMCwgb3IgMSBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmVlZGxlIGlzIGxlc3NcbiAqICAgICB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBlbGVtZW50LCByZXNwZWN0aXZlbHkuXG4gKiBAcGFyYW0gYUJpYXMgRWl0aGVyICdiaW5hcnlTZWFyY2guR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ2JpbmFyeVNlYXJjaC5MRUFTVF9VUFBFUl9CT1VORCcuIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJldHVybiB0aGVcbiAqICAgICBjbG9zZXN0IGVsZW1lbnQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHRoZSBvbmUgd2UgYXJlXG4gKiAgICAgc2VhcmNoaW5nIGZvciwgcmVzcGVjdGl2ZWx5LCBpZiB0aGUgZXhhY3QgZWxlbWVudCBjYW5ub3QgYmUgZm91bmQuXG4gKiAgICAgRGVmYXVsdHMgdG8gJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKi9cbmV4cG9ydHMuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIGlmIChhSGF5c3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgdmFyIGluZGV4ID0gcmVjdXJzaXZlU2VhcmNoKC0xLCBhSGF5c3RhY2subGVuZ3RoLCBhTmVlZGxlLCBhSGF5c3RhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29tcGFyZSwgYUJpYXMgfHwgZXhwb3J0cy5HUkVBVEVTVF9MT1dFUl9CT1VORCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBXZSBoYXZlIGZvdW5kIGVpdGhlciB0aGUgZXhhY3QgZWxlbWVudCwgb3IgdGhlIG5leHQtY2xvc2VzdCBlbGVtZW50IHRoYW5cbiAgLy8gdGhlIG9uZSB3ZSBhcmUgc2VhcmNoaW5nIGZvci4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgc3VjaFxuICAvLyBlbGVtZW50LiBNYWtlIHN1cmUgd2UgYWx3YXlzIHJldHVybiB0aGUgc21hbGxlc3Qgb2YgdGhlc2UuXG4gIHdoaWxlIChpbmRleCAtIDEgPj0gMCkge1xuICAgIGlmIChhQ29tcGFyZShhSGF5c3RhY2tbaW5kZXhdLCBhSGF5c3RhY2tbaW5kZXggLSAxXSwgdHJ1ZSkgIT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAtLWluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGluZGV4O1xufTtcbiIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLy8gSXQgdHVybnMgb3V0IHRoYXQgc29tZSAobW9zdD8pIEphdmFTY3JpcHQgZW5naW5lcyBkb24ndCBzZWxmLWhvc3Rcbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAuIFRoaXMgbWFrZXMgc2Vuc2UgYmVjYXVzZSBDKysgd2lsbCBsaWtlbHkgcmVtYWluXG4vLyBmYXN0ZXIgdGhhbiBKUyB3aGVuIGRvaW5nIHJhdyBDUFUtaW50ZW5zaXZlIHNvcnRpbmcuIEhvd2V2ZXIsIHdoZW4gdXNpbmcgYVxuLy8gY3VzdG9tIGNvbXBhcmF0b3IgZnVuY3Rpb24sIGNhbGxpbmcgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGUgVk0ncyBDKysgYW5kXG4vLyBKSVQnZCBKUyBpcyByYXRoZXIgc2xvdyAqYW5kKiBsb3NlcyBKSVQgdHlwZSBpbmZvcm1hdGlvbiwgcmVzdWx0aW5nIGluXG4vLyB3b3JzZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24gdGhhbiB3b3VsZCBiZSBvcHRpbWFsLiBJblxuLy8gZmFjdCwgd2hlbiBzb3J0aW5nIHdpdGggYSBjb21wYXJhdG9yLCB0aGVzZSBjb3N0cyBvdXR3ZWlnaCB0aGUgYmVuZWZpdHMgb2Zcbi8vIHNvcnRpbmcgaW4gQysrLiBCeSB1c2luZyBvdXIgb3duIEpTLWltcGxlbWVudGVkIFF1aWNrIFNvcnQgKGJlbG93KSwgd2UgZ2V0XG4vLyBhIH4zNTAwbXMgbWVhbiBzcGVlZC11cCBpbiBgYmVuY2gvYmVuY2guaHRtbGAuXG5cbi8qKlxuICogU3dhcCB0aGUgZWxlbWVudHMgaW5kZXhlZCBieSBgeGAgYW5kIGB5YCBpbiB0aGUgYXJyYXkgYGFyeWAuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgVGhlIGFycmF5LlxuICogQHBhcmFtIHtOdW1iZXJ9IHhcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0uXG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogICAgICAgIFRoZSBpbmRleCBvZiB0aGUgc2Vjb25kIGl0ZW0uXG4gKi9cbmZ1bmN0aW9uIHN3YXAoYXJ5LCB4LCB5KSB7XG4gIHZhciB0ZW1wID0gYXJ5W3hdO1xuICBhcnlbeF0gPSBhcnlbeV07XG4gIGFyeVt5XSA9IHRlbXA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIHdpdGhpbiB0aGUgcmFuZ2UgYGxvdyAuLiBoaWdoYCBpbmNsdXNpdmUuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IGxvd1xuICogICAgICAgIFRoZSBsb3dlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge051bWJlcn0gaGlnaFxuICogICAgICAgIFRoZSB1cHBlciBib3VuZCBvbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbUludEluUmFuZ2UobG93LCBoaWdoKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKGxvdyArIChNYXRoLnJhbmRvbSgpICogKGhpZ2ggLSBsb3cpKSk7XG59XG5cbi8qKlxuICogVGhlIFF1aWNrIFNvcnQgYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICogQHBhcmFtIHtOdW1iZXJ9IHBcbiAqICAgICAgICBTdGFydCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSByXG4gKiAgICAgICAgRW5kIGluZGV4IG9mIHRoZSBhcnJheVxuICovXG5mdW5jdGlvbiBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHIpIHtcbiAgLy8gSWYgb3VyIGxvd2VyIGJvdW5kIGlzIGxlc3MgdGhhbiBvdXIgdXBwZXIgYm91bmQsIHdlICgxKSBwYXJ0aXRpb24gdGhlXG4gIC8vIGFycmF5IGludG8gdHdvIHBpZWNlcyBhbmQgKDIpIHJlY3Vyc2Ugb24gZWFjaCBoYWxmLiBJZiBpdCBpcyBub3QsIHRoaXMgaXNcbiAgLy8gdGhlIGVtcHR5IGFycmF5IGFuZCBvdXIgYmFzZSBjYXNlLlxuXG4gIGlmIChwIDwgcikge1xuICAgIC8vICgxKSBQYXJ0aXRpb25pbmcuXG4gICAgLy9cbiAgICAvLyBUaGUgcGFydGl0aW9uaW5nIGNob29zZXMgYSBwaXZvdCBiZXR3ZWVuIGBwYCBhbmQgYHJgIGFuZCBtb3ZlcyBhbGxcbiAgICAvLyBlbGVtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90IHRvIHRoZSBiZWZvcmUgaXQsIGFuZFxuICAgIC8vIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIGl0IGFmdGVyIGl0LiBUaGUgZWZmZWN0IGlzIHRoYXRcbiAgICAvLyBvbmNlIHBhcnRpdGlvbiBpcyBkb25lLCB0aGUgcGl2b3QgaXMgaW4gdGhlIGV4YWN0IHBsYWNlIGl0IHdpbGwgYmUgd2hlblxuICAgIC8vIHRoZSBhcnJheSBpcyBwdXQgaW4gc29ydGVkIG9yZGVyLCBhbmQgaXQgd2lsbCBub3QgbmVlZCB0byBiZSBtb3ZlZFxuICAgIC8vIGFnYWluLiBUaGlzIHJ1bnMgaW4gTyhuKSB0aW1lLlxuXG4gICAgLy8gQWx3YXlzIGNob29zZSBhIHJhbmRvbSBwaXZvdCBzbyB0aGF0IGFuIGlucHV0IGFycmF5IHdoaWNoIGlzIHJldmVyc2VcbiAgICAvLyBzb3J0ZWQgZG9lcyBub3QgY2F1c2UgTyhuXjIpIHJ1bm5pbmcgdGltZS5cbiAgICB2YXIgcGl2b3RJbmRleCA9IHJhbmRvbUludEluUmFuZ2UocCwgcik7XG4gICAgdmFyIGkgPSBwIC0gMTtcblxuICAgIHN3YXAoYXJ5LCBwaXZvdEluZGV4LCByKTtcbiAgICB2YXIgcGl2b3QgPSBhcnlbcl07XG5cbiAgICAvLyBJbW1lZGlhdGVseSBhZnRlciBgamAgaXMgaW5jcmVtZW50ZWQgaW4gdGhpcyBsb29wLCB0aGUgZm9sbG93aW5nIGhvbGRcbiAgICAvLyB0cnVlOlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtwIC4uIGldYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHBpdm90LlxuICAgIC8vXG4gICAgLy8gICAqIEV2ZXJ5IGVsZW1lbnQgaW4gYGFyeVtpKzEgLi4gai0xXWAgaXMgZ3JlYXRlciB0aGFuIHRoZSBwaXZvdC5cbiAgICBmb3IgKHZhciBqID0gcDsgaiA8IHI7IGorKykge1xuICAgICAgaWYgKGNvbXBhcmF0b3IoYXJ5W2pdLCBwaXZvdCkgPD0gMCkge1xuICAgICAgICBpICs9IDE7XG4gICAgICAgIHN3YXAoYXJ5LCBpLCBqKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2FwKGFyeSwgaSArIDEsIGopO1xuICAgIHZhciBxID0gaSArIDE7XG5cbiAgICAvLyAoMikgUmVjdXJzZSBvbiBlYWNoIGhhbGYuXG5cbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHAsIHEgLSAxKTtcbiAgICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIHEgKyAxLCByKTtcbiAgfVxufVxuXG4vKipcbiAqIFNvcnQgdGhlIGdpdmVuIGFycmF5IGluLXBsYWNlIHdpdGggdGhlIGdpdmVuIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJ5XG4gKiAgICAgICAgQW4gYXJyYXkgdG8gc29ydC5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbXBhcmF0b3JcbiAqICAgICAgICBGdW5jdGlvbiB0byB1c2UgdG8gY29tcGFyZSB0d28gaXRlbXMuXG4gKi9cbmV4cG9ydHMucXVpY2tTb3J0ID0gZnVuY3Rpb24gKGFyeSwgY29tcGFyYXRvcikge1xuICBkb1F1aWNrU29ydChhcnksIGNvbXBhcmF0b3IsIDAsIGFyeS5sZW5ndGggLSAxKTtcbn07XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG52YXIgYmluYXJ5U2VhcmNoID0gcmVxdWlyZSgnLi9iaW5hcnktc2VhcmNoJyk7XG52YXIgQXJyYXlTZXQgPSByZXF1aXJlKCcuL2FycmF5LXNldCcpLkFycmF5U2V0O1xudmFyIGJhc2U2NFZMUSA9IHJlcXVpcmUoJy4vYmFzZTY0LXZscScpO1xudmFyIHF1aWNrU29ydCA9IHJlcXVpcmUoJy4vcXVpY2stc29ydCcpLnF1aWNrU29ydDtcblxuZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHJldHVybiBzb3VyY2VNYXAuc2VjdGlvbnMgIT0gbnVsbFxuICAgID8gbmV3IEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpXG4gICAgOiBuZXcgQmFzaWNTb3VyY2VNYXBDb25zdW1lcihzb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpO1xufVxuXG5Tb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID0gZnVuY3Rpb24oYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICByZXR1cm4gQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwKGFTb3VyY2VNYXAsIGFTb3VyY2VNYXBVUkwpO1xufVxuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLy8gYF9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZCBgX19vcmlnaW5hbE1hcHBpbmdzYCBhcmUgYXJyYXlzIHRoYXQgaG9sZCB0aGVcbi8vIHBhcnNlZCBtYXBwaW5nIGNvb3JkaW5hdGVzIGZyb20gdGhlIHNvdXJjZSBtYXAncyBcIm1hcHBpbmdzXCIgYXR0cmlidXRlLiBUaGV5XG4vLyBhcmUgbGF6aWx5IGluc3RhbnRpYXRlZCwgYWNjZXNzZWQgdmlhIHRoZSBgX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbi8vIGBfb3JpZ2luYWxNYXBwaW5nc2AgZ2V0dGVycyByZXNwZWN0aXZlbHksIGFuZCB3ZSBvbmx5IHBhcnNlIHRoZSBtYXBwaW5nc1xuLy8gYW5kIGNyZWF0ZSB0aGVzZSBhcnJheXMgb25jZSBxdWVyaWVkIGZvciBhIHNvdXJjZSBsb2NhdGlvbi4gV2UganVtcCB0aHJvdWdoXG4vLyB0aGVzZSBob29wcyBiZWNhdXNlIHRoZXJlIGNhbiBiZSBtYW55IHRob3VzYW5kcyBvZiBtYXBwaW5ncywgYW5kIHBhcnNpbmdcbi8vIHRoZW0gaXMgZXhwZW5zaXZlLCBzbyB3ZSBvbmx5IHdhbnQgdG8gZG8gaXQgaWYgd2UgbXVzdC5cbi8vXG4vLyBFYWNoIG9iamVjdCBpbiB0aGUgYXJyYXlzIGlzIG9mIHRoZSBmb3JtOlxuLy9cbi8vICAgICB7XG4vLyAgICAgICBnZW5lcmF0ZWRMaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBzb3VyY2U6IFRoZSBwYXRoIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGF0IGdlbmVyYXRlZCB0aGlzXG4vLyAgICAgICAgICAgICAgIGNodW5rIG9mIGNvZGUsXG4vLyAgICAgICBvcmlnaW5hbExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gdGhpcyBjaHVuayBvZiBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsQ29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlIHRoYXRcbi8vICAgICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB3aGljaCBnZW5lcmF0ZWQgdGhpcyBjaHVuayBvZlxuLy8gICAgICAgICAgICAgY29kZS5cbi8vICAgICB9XG4vL1xuLy8gQWxsIHByb3BlcnRpZXMgZXhjZXB0IGZvciBgZ2VuZXJhdGVkTGluZWAgYW5kIGBnZW5lcmF0ZWRDb2x1bW5gIGNhbiBiZVxuLy8gYG51bGxgLlxuLy9cbi8vIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMuXG4vL1xuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBpcyBvcmRlcmVkIGJ5IHRoZSBvcmlnaW5hbCBwb3NpdGlvbnMuXG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX2dlbmVyYXRlZE1hcHBpbmdzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdfZ2VuZXJhdGVkTWFwcGluZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzO1xuICB9XG59KTtcblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY2hhcklzTWFwcGluZ1NlcGFyYXRvcihhU3RyLCBpbmRleCkge1xuICAgIHZhciBjID0gYVN0ci5jaGFyQXQoaW5kZXgpO1xuICAgIHJldHVybiBjID09PSBcIjtcIiB8fCBjID09PSBcIixcIjtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IF9wYXJzZU1hcHBpbmdzXCIpO1xuICB9O1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVIgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVIgPSAyO1xuXG5Tb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCA9IDE7XG5Tb3VyY2VNYXBDb25zdW1lci5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggbWFwcGluZyBiZXR3ZWVuIGFuIG9yaWdpbmFsIHNvdXJjZS9saW5lL2NvbHVtbiBhbmQgYVxuICogZ2VuZXJhdGVkIGxpbmUvY29sdW1uIGluIHRoaXMgc291cmNlIG1hcC5cbiAqXG4gKiBAcGFyYW0gRnVuY3Rpb24gYUNhbGxiYWNrXG4gKiAgICAgICAgVGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdpdGggZWFjaCBtYXBwaW5nLlxuICogQHBhcmFtIE9iamVjdCBhQ29udGV4dFxuICogICAgICAgIE9wdGlvbmFsLiBJZiBzcGVjaWZpZWQsIHRoaXMgb2JqZWN0IHdpbGwgYmUgdGhlIHZhbHVlIG9mIGB0aGlzYCBldmVyeVxuICogICAgICAgIHRpbWUgdGhhdCBgYUNhbGxiYWNrYCBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gYU9yZGVyXG4gKiAgICAgICAgRWl0aGVyIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgIG9yXG4gKiAgICAgICAgYFNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSYC4gU3BlY2lmaWVzIHdoZXRoZXIgeW91IHdhbnQgdG9cbiAqICAgICAgICBpdGVyYXRlIG92ZXIgdGhlIG1hcHBpbmdzIHNvcnRlZCBieSB0aGUgZ2VuZXJhdGVkIGZpbGUncyBsaW5lL2NvbHVtblxuICogICAgICAgIG9yZGVyIG9yIHRoZSBvcmlnaW5hbCdzIHNvdXJjZS9saW5lL2NvbHVtbiBvcmRlciwgcmVzcGVjdGl2ZWx5LiBEZWZhdWx0cyB0b1xuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVJgLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuZWFjaE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9lYWNoTWFwcGluZyhhQ2FsbGJhY2ssIGFDb250ZXh0LCBhT3JkZXIpIHtcbiAgICB2YXIgY29udGV4dCA9IGFDb250ZXh0IHx8IG51bGw7XG4gICAgdmFyIG9yZGVyID0gYU9yZGVyIHx8IFNvdXJjZU1hcENvbnN1bWVyLkdFTkVSQVRFRF9PUkRFUjtcblxuICAgIHZhciBtYXBwaW5ncztcbiAgICBzd2l0Y2ggKG9yZGVyKSB7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUjpcbiAgICAgIG1hcHBpbmdzID0gdGhpcy5fb3JpZ2luYWxNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG9yZGVyIG9mIGl0ZXJhdGlvbi5cIik7XG4gICAgfVxuXG4gICAgdmFyIHNvdXJjZVJvb3QgPSB0aGlzLnNvdXJjZVJvb3Q7XG4gICAgbWFwcGluZ3MubWFwKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2UgPT09IG51bGwgPyBudWxsIDogdGhpcy5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICBzb3VyY2UgPSB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc291cmNlUm9vdCwgc291cmNlLCB0aGlzLl9zb3VyY2VNYXBVUkwpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbixcbiAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgb3JpZ2luYWxDb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW4sXG4gICAgICAgIG5hbWU6IG1hcHBpbmcubmFtZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpXG4gICAgICB9O1xuICAgIH0sIHRoaXMpLmZvckVhY2goYUNhbGxiYWNrLCBjb250ZXh0KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwcm92aWRlZC4gSWYgbm8gY29sdW1uIGlzIHByb3ZpZGVkLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byBhIGVpdGhlciB0aGUgbGluZSB3ZSBhcmUgc2VhcmNoaW5nIGZvciBvciB0aGUgbmV4dFxuICogY2xvc2VzdCBsaW5lIHRoYXQgaGFzIGFueSBtYXBwaW5ncy4gT3RoZXJ3aXNlLCByZXR1cm5zIGFsbCBtYXBwaW5nc1xuICogY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbGluZSBhbmQgZWl0aGVyIHRoZSBjb2x1bW4gd2UgYXJlIHNlYXJjaGluZyBmb3JcbiAqIG9yIHRoZSBuZXh0IGNsb3Nlc3QgY29sdW1uIHRoYXQgaGFzIGFueSBvZmZzZXRzLlxuICpcbiAqIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgZmlsZW5hbWUgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS4gIFRoZSBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogT3B0aW9uYWwuIHRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICpcbiAqIGFuZCBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHJldHVybmVkLCBlYWNoIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgIGxpbmUgbnVtYmVyIGlzIDEtYmFzZWQuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgIFRoZSBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBuZWVkbGUuc291cmNlID0gdGhpcy5fZmluZFNvdXJjZUluZGV4KG5lZWRsZS5zb3VyY2UpO1xuICAgIGlmIChuZWVkbGUuc291cmNlIDwgMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvclxuICogYWxyZWFkeSBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzb3VyY2UgbWFwcyBoYXZlIHRoZVxuICogZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gc291cmNlczogQW4gYXJyYXkgb2YgVVJMcyB0byB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG5hbWVzOiBBbiBhcnJheSBvZiBpZGVudGlmaWVycyB3aGljaCBjYW4gYmUgcmVmZXJyZW5jZWQgYnkgaW5kaXZpZHVhbCBtYXBwaW5ncy5cbiAqICAgLSBzb3VyY2VSb290OiBPcHRpb25hbC4gVGhlIFVSTCByb290IGZyb20gd2hpY2ggYWxsIHNvdXJjZXMgYXJlIHJlbGF0aXZlLlxuICogICAtIHNvdXJjZXNDb250ZW50OiBPcHRpb25hbC4gQW4gYXJyYXkgb2YgY29udGVudHMgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlcy5cbiAqICAgLSBtYXBwaW5nczogQSBzdHJpbmcgb2YgYmFzZTY0IFZMUXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIG1hcHBpbmdzLlxuICogICAtIGZpbGU6IE9wdGlvbmFsLiBUaGUgZ2VuZXJhdGVkIGZpbGUgdGhpcyBzb3VyY2UgbWFwIGlzIGFzc29jaWF0ZWQgd2l0aC5cbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgc291cmNlIG1hcCwgdGFrZW4gZnJvbSB0aGUgc291cmNlIG1hcCBzcGVjWzBdOlxuICpcbiAqICAgICB7XG4gKiAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgIGZpbGU6IFwib3V0LmpzXCIsXG4gKiAgICAgICBzb3VyY2VSb290IDogXCJcIixcbiAqICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgIG5hbWVzOiBbXCJzcmNcIiwgXCJtYXBzXCIsIFwiYXJlXCIsIFwiZnVuXCJdLFxuICogICAgICAgbWFwcGluZ3M6IFwiQUEsQUI7O0FCQ0RFO1wiXG4gKiAgICAgfVxuICpcbiAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyLCBpZiBnaXZlbiwgaXMgYSBzdHJpbmcgd2hvc2UgdmFsdWUgaXMgdGhlIFVSTFxuICogYXQgd2hpY2ggdGhlIHNvdXJjZSBtYXAgd2FzIGZvdW5kLiAgVGhpcyBVUkwgaXMgdXNlZCB0byBjb21wdXRlIHRoZVxuICogc291cmNlcyBhcnJheS5cbiAqXG4gKiBbMF06IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2RvY3VtZW50L2QvMVUxUkdBZWhRd1J5cFVUb3ZGMUtSbHBpT0Z6ZTBiLV8yZ2M2ZkFIMEtZMGsvZWRpdD9wbGk9MSNcbiAqL1xuZnVuY3Rpb24gQmFzaWNTb3VyY2VNYXBDb25zdW1lcihhU291cmNlTWFwLCBhU291cmNlTWFwVVJMKSB7XG4gIHZhciBzb3VyY2VNYXAgPSBhU291cmNlTWFwO1xuICBpZiAodHlwZW9mIGFTb3VyY2VNYXAgPT09ICdzdHJpbmcnKSB7XG4gICAgc291cmNlTWFwID0gdXRpbC5wYXJzZVNvdXJjZU1hcElucHV0KGFTb3VyY2VNYXApO1xuICB9XG5cbiAgdmFyIHZlcnNpb24gPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICd2ZXJzaW9uJyk7XG4gIHZhciBzb3VyY2VzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlcycpO1xuICAvLyBTYXNzIDMuMyBsZWF2ZXMgb3V0IHRoZSAnbmFtZXMnIGFycmF5LCBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIHNwZWMgKHdoaWNoXG4gIC8vIHJlcXVpcmVzIHRoZSBhcnJheSkgdG8gcGxheSBuaWNlIGhlcmUuXG4gIHZhciBuYW1lcyA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ25hbWVzJywgW10pO1xuICB2YXIgc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3NvdXJjZVJvb3QnLCBudWxsKTtcbiAgdmFyIHNvdXJjZXNDb250ZW50ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlc0NvbnRlbnQnLCBudWxsKTtcbiAgdmFyIG1hcHBpbmdzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbWFwcGluZ3MnKTtcbiAgdmFyIGZpbGUgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdmaWxlJywgbnVsbCk7XG5cbiAgLy8gT25jZSBhZ2FpbiwgU2FzcyBkZXZpYXRlcyBmcm9tIHRoZSBzcGVjIGFuZCBzdXBwbGllcyB0aGUgdmVyc2lvbiBhcyBhXG4gIC8vIHN0cmluZyByYXRoZXIgdGhhbiBhIG51bWJlciwgc28gd2UgdXNlIGxvb3NlIGVxdWFsaXR5IGNoZWNraW5nIGhlcmUuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VSb290KSB7XG4gICAgc291cmNlUm9vdCA9IHV0aWwubm9ybWFsaXplKHNvdXJjZVJvb3QpO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5fYWJzb2x1dGVTb3VyY2VzID0gdGhpcy5fc291cmNlcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHV0aWwuY29tcHV0ZVNvdXJjZVVSTChzb3VyY2VSb290LCBzLCBhU291cmNlTWFwVVJMKTtcbiAgfSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLl9zb3VyY2VNYXBVUkwgPSBhU291cmNlTWFwVVJMO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBmaW5kIHRoZSBpbmRleCBvZiBhIHNvdXJjZS4gIFJldHVybnMgLTEgaWYgbm90XG4gKiBmb3VuZC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRTb3VyY2VJbmRleCA9IGZ1bmN0aW9uKGFTb3VyY2UpIHtcbiAgdmFyIHJlbGF0aXZlU291cmNlID0gYVNvdXJjZTtcbiAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgcmVsYXRpdmVTb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgcmVsYXRpdmVTb3VyY2UpO1xuICB9XG5cbiAgaWYgKHRoaXMuX3NvdXJjZXMuaGFzKHJlbGF0aXZlU291cmNlKSkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2VzLmluZGV4T2YocmVsYXRpdmVTb3VyY2UpO1xuICB9XG5cbiAgLy8gTWF5YmUgYVNvdXJjZSBpcyBhbiBhYnNvbHV0ZSBVUkwgYXMgcmV0dXJuZWQgYnkgfHNvdXJjZXN8LiAgSW5cbiAgLy8gdGhpcyBjYXNlIHdlIGNhbid0IHNpbXBseSB1bmRvIHRoZSB0cmFuc2Zvcm0uXG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5fYWJzb2x1dGVTb3VyY2VzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHRoaXMuX2Fic29sdXRlU291cmNlc1tpXSA9PSBhU291cmNlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59O1xuXG4vKipcbiAqIENyZWF0ZSBhIEJhc2ljU291cmNlTWFwQ29uc3VtZXIgZnJvbSBhIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqXG4gKiBAcGFyYW0gU291cmNlTWFwR2VuZXJhdG9yIGFTb3VyY2VNYXBcbiAqICAgICAgICBUaGUgc291cmNlIG1hcCB0aGF0IHdpbGwgYmUgY29uc3VtZWQuXG4gKiBAcGFyYW0gU3RyaW5nIGFTb3VyY2VNYXBVUkxcbiAqICAgICAgICBUaGUgVVJMIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIGNhbiBiZSBmb3VuZCAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIuZnJvbVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2Zyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICAgIHZhciBzbWMgPSBPYmplY3QuY3JlYXRlKEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcblxuICAgIHZhciBuYW1lcyA9IHNtYy5fbmFtZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoYVNvdXJjZU1hcC5fbmFtZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICB2YXIgc291cmNlcyA9IHNtYy5fc291cmNlcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9zb3VyY2VzLnRvQXJyYXkoKSwgdHJ1ZSk7XG4gICAgc21jLnNvdXJjZVJvb3QgPSBhU291cmNlTWFwLl9zb3VyY2VSb290O1xuICAgIHNtYy5zb3VyY2VzQ29udGVudCA9IGFTb3VyY2VNYXAuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQoc21jLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYy5zb3VyY2VSb290KTtcbiAgICBzbWMuZmlsZSA9IGFTb3VyY2VNYXAuX2ZpbGU7XG4gICAgc21jLl9zb3VyY2VNYXBVUkwgPSBhU291cmNlTWFwVVJMO1xuICAgIHNtYy5fYWJzb2x1dGVTb3VyY2VzID0gc21jLl9zb3VyY2VzLnRvQXJyYXkoKS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiB1dGlsLmNvbXB1dGVTb3VyY2VVUkwoc21jLnNvdXJjZVJvb3QsIHMsIGFTb3VyY2VNYXBVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gQmVjYXVzZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBlbnRyaWVzIChieSBjb252ZXJ0aW5nIHN0cmluZyBzb3VyY2VzIGFuZFxuICAgIC8vIG5hbWVzIHRvIGluZGljZXMgaW50byB0aGUgc291cmNlcyBhbmQgbmFtZXMgQXJyYXlTZXRzKSwgd2UgaGF2ZSB0byBtYWtlXG4gICAgLy8gYSBjb3B5IG9mIHRoZSBlbnRyeSBvciBlbHNlIGJhZCB0aGluZ3MgaGFwcGVuLiBTaGFyZWQgbXV0YWJsZSBzdGF0ZVxuICAgIC8vIHN0cmlrZXMgYWdhaW4hIFNlZSBnaXRodWIgaXNzdWUgIzE5MS5cblxuICAgIHZhciBnZW5lcmF0ZWRNYXBwaW5ncyA9IGFTb3VyY2VNYXAuX21hcHBpbmdzLnRvQXJyYXkoKS5zbGljZSgpO1xuICAgIHZhciBkZXN0R2VuZXJhdGVkTWFwcGluZ3MgPSBzbWMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHZhciBkZXN0T3JpZ2luYWxNYXBwaW5ncyA9IHNtYy5fX29yaWdpbmFsTWFwcGluZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNyY01hcHBpbmcgPSBnZW5lcmF0ZWRNYXBwaW5nc1tpXTtcbiAgICAgIHZhciBkZXN0TWFwcGluZyA9IG5ldyBNYXBwaW5nO1xuICAgICAgZGVzdE1hcHBpbmcuZ2VuZXJhdGVkTGluZSA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkTGluZTtcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHNyY01hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAoc3JjTWFwcGluZy5zb3VyY2UpIHtcbiAgICAgICAgZGVzdE1hcHBpbmcuc291cmNlID0gc291cmNlcy5pbmRleE9mKHNyY01hcHBpbmcuc291cmNlKTtcbiAgICAgICAgZGVzdE1hcHBpbmcub3JpZ2luYWxMaW5lID0gc3JjTWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gc3JjTWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICBpZiAoc3JjTWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgZGVzdE1hcHBpbmcubmFtZSA9IG5hbWVzLmluZGV4T2Yoc3JjTWFwcGluZy5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlc3RPcmlnaW5hbE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgICAgfVxuXG4gICAgICBkZXN0R2VuZXJhdGVkTWFwcGluZ3MucHVzaChkZXN0TWFwcGluZyk7XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHNtYy5fX29yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNtYztcbiAgfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcHBpbmcgc3BlYyB0aGF0IHdlIGFyZSBjb25zdW1pbmcuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWJzb2x1dGVTb3VyY2VzLnNsaWNlKCk7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFByb3ZpZGUgdGhlIEpJVCB3aXRoIGEgbmljZSBzaGFwZSAvIGhpZGRlbiBjbGFzcy5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZygpIHtcbiAgdGhpcy5nZW5lcmF0ZWRMaW5lID0gMDtcbiAgdGhpcy5nZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICB0aGlzLnNvdXJjZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdGhpcy5vcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHRoaXMubmFtZSA9IG51bGw7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fcGFyc2VNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB2YXIgZ2VuZXJhdGVkTGluZSA9IDE7XG4gICAgdmFyIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNTb3VyY2UgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBsZW5ndGggPSBhU3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjYWNoZWRTZWdtZW50cyA9IHt9O1xuICAgIHZhciB0ZW1wID0ge307XG4gICAgdmFyIG9yaWdpbmFsTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgbWFwcGluZywgc3RyLCBzZWdtZW50LCBlbmQsIHZhbHVlO1xuXG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnOycpIHtcbiAgICAgICAgZ2VuZXJhdGVkTGluZSsrO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChhU3RyLmNoYXJBdChpbmRleCkgPT09ICcsJykge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG1hcHBpbmcgPSBuZXcgTWFwcGluZygpO1xuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBnZW5lcmF0ZWRMaW5lO1xuXG4gICAgICAgIC8vIEJlY2F1c2UgZWFjaCBvZmZzZXQgaXMgZW5jb2RlZCByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLFxuICAgICAgICAvLyBtYW55IHNlZ21lbnRzIG9mdGVuIGhhdmUgdGhlIHNhbWUgZW5jb2RpbmcuIFdlIGNhbiBleHBsb2l0IHRoaXNcbiAgICAgICAgLy8gZmFjdCBieSBjYWNoaW5nIHRoZSBwYXJzZWQgdmFyaWFibGUgbGVuZ3RoIGZpZWxkcyBvZiBlYWNoIHNlZ21lbnQsXG4gICAgICAgIC8vIGFsbG93aW5nIHVzIHRvIGF2b2lkIGEgc2Vjb25kIHBhcnNlIGlmIHdlIGVuY291bnRlciB0aGUgc2FtZVxuICAgICAgICAvLyBzZWdtZW50IGFnYWluLlxuICAgICAgICBmb3IgKGVuZCA9IGluZGV4OyBlbmQgPCBsZW5ndGg7IGVuZCsrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgZW5kKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0ciA9IGFTdHIuc2xpY2UoaW5kZXgsIGVuZCk7XG5cbiAgICAgICAgc2VnbWVudCA9IGNhY2hlZFNlZ21lbnRzW3N0cl07XG4gICAgICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgICAgaW5kZXggKz0gc3RyLmxlbmd0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWdtZW50ID0gW107XG4gICAgICAgICAgd2hpbGUgKGluZGV4IDwgZW5kKSB7XG4gICAgICAgICAgICBiYXNlNjRWTFEuZGVjb2RlKGFTdHIsIGluZGV4LCB0ZW1wKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGVtcC52YWx1ZTtcbiAgICAgICAgICAgIGluZGV4ID0gdGVtcC5yZXN0O1xuICAgICAgICAgICAgc2VnbWVudC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UsIGJ1dCBubyBsaW5lIGFuZCBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm91bmQgYSBzb3VyY2UgYW5kIGxpbmUsIGJ1dCBubyBjb2x1bW4nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWNoZWRTZWdtZW50c1tzdHJdID0gc2VnbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlZCBjb2x1bW4uXG4gICAgICAgIG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uID0gcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gKyBzZWdtZW50WzBdO1xuICAgICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAvLyBPcmlnaW5hbCBzb3VyY2UuXG4gICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSBwcmV2aW91c1NvdXJjZSArIHNlZ21lbnRbMV07XG4gICAgICAgICAgcHJldmlvdXNTb3VyY2UgKz0gc2VnbWVudFsxXTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGxpbmUuXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPSBwcmV2aW91c09yaWdpbmFsTGluZSArIHNlZ21lbnRbMl07XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbExpbmUgPSBtYXBwaW5nLm9yaWdpbmFsTGluZTtcbiAgICAgICAgICAvLyBMaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWRcbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSArPSAxO1xuXG4gICAgICAgICAgLy8gT3JpZ2luYWwgY29sdW1uLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPSBwcmV2aW91c09yaWdpbmFsQ29sdW1uICsgc2VnbWVudFszXTtcbiAgICAgICAgICBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gbWFwcGluZy5vcmlnaW5hbENvbHVtbjtcblxuICAgICAgICAgIGlmIChzZWdtZW50Lmxlbmd0aCA+IDQpIHtcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBwcmV2aW91c05hbWUgKyBzZWdtZW50WzRdO1xuICAgICAgICAgICAgcHJldmlvdXNOYW1lICs9IHNlZ21lbnRbNF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChtYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBtYXBwaW5nLm9yaWdpbmFsTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvcmlnaW5hbE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBxdWlja1NvcnQoZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IGdlbmVyYXRlZE1hcHBpbmdzO1xuXG4gICAgcXVpY2tTb3J0KG9yaWdpbmFsTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMpO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gb3JpZ2luYWxNYXBwaW5ncztcbiAgfTtcblxuLyoqXG4gKiBGaW5kIHRoZSBtYXBwaW5nIHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBoeXBvdGhldGljYWwgXCJuZWVkbGVcIiBtYXBwaW5nIHRoYXRcbiAqIHdlIGFyZSBzZWFyY2hpbmcgZm9yIGluIHRoZSBnaXZlbiBcImhheXN0YWNrXCIgb2YgbWFwcGluZ3MuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9maW5kTWFwcGluZyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2ZpbmRNYXBwaW5nKGFOZWVkbGUsIGFNYXBwaW5ncywgYUxpbmVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhQ29sdW1uTmFtZSwgYUNvbXBhcmF0b3IsIGFCaWFzKSB7XG4gICAgLy8gVG8gcmV0dXJuIHRoZSBwb3NpdGlvbiB3ZSBhcmUgc2VhcmNoaW5nIGZvciwgd2UgbXVzdCBmaXJzdCBmaW5kIHRoZVxuICAgIC8vIG1hcHBpbmcgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgdGhlbiByZXR1cm4gdGhlIG9wcG9zaXRlIHBvc2l0aW9uIGl0XG4gICAgLy8gcG9pbnRzIHRvLiBCZWNhdXNlIHRoZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB3ZSBjYW4gdXNlIGJpbmFyeSBzZWFyY2ggdG9cbiAgICAvLyBmaW5kIHRoZSBiZXN0IG1hcHBpbmcuXG5cbiAgICBpZiAoYU5lZWRsZVthTGluZU5hbWVdIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0xpbmUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FMaW5lTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoYU5lZWRsZVthQ29sdW1uTmFtZV0gPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb2x1bW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgZ290ICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKyBhTmVlZGxlW2FDb2x1bW5OYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJpbmFyeVNlYXJjaC5zZWFyY2goYU5lZWRsZSwgYU1hcHBpbmdzLCBhQ29tcGFyYXRvciwgYUJpYXMpO1xuICB9O1xuXG4vKipcbiAqIENvbXB1dGUgdGhlIGxhc3QgY29sdW1uIGZvciBlYWNoIGdlbmVyYXRlZCBtYXBwaW5nLiBUaGUgbGFzdCBjb2x1bW4gaXNcbiAqIGluY2x1c2l2ZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuY29tcHV0ZUNvbHVtblNwYW5zID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfY29tcHV0ZUNvbHVtblNwYW5zKCkge1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICAvLyBNYXBwaW5ncyBkbyBub3QgY29udGFpbiBhIGZpZWxkIGZvciB0aGUgbGFzdCBnZW5lcmF0ZWQgY29sdW1udC4gV2VcbiAgICAgIC8vIGNhbiBjb21lIHVwIHdpdGggYW4gb3B0aW1pc3RpYyBlc3RpbWF0ZSwgaG93ZXZlciwgYnkgYXNzdW1pbmcgdGhhdFxuICAgICAgLy8gbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgKGkuZS4gZ2l2ZW4gdHdvIGNvbnNlY3V0aXZlIG1hcHBpbmdzLCB0aGVcbiAgICAgIC8vIGZpcnN0IG1hcHBpbmcgZW5kcyB3aGVyZSB0aGUgc2Vjb25kIG9uZSBzdGFydHMpLlxuICAgICAgaWYgKGluZGV4ICsgMSA8IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLmxlbmd0aCkge1xuICAgICAgICB2YXIgbmV4dE1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleCArIDFdO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5leHRNYXBwaW5nLmdlbmVyYXRlZExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLSAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsYXN0IG1hcHBpbmcgZm9yIGVhY2ggbGluZSBzcGFucyB0aGUgZW50aXJlIGxpbmUuXG4gICAgICBtYXBwaW5nLmxhc3RHZW5lcmF0ZWRDb2x1bW4gPSBJbmZpbml0eTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlLCBsaW5lLCBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgZ2VuZXJhdGVkXG4gKiBzb3VyY2UncyBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3RcbiAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBsaW5lOiBUaGUgbGluZSBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuICBUaGUgbGluZSBudW1iZXJcbiAqICAgICBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBsaW5lIG51bWJlciBpcyAxLWJhc2VkLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC4gIFRoZVxuICogICAgIGNvbHVtbiBudW1iZXIgaXMgMC1iYXNlZC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcoXG4gICAgICBuZWVkbGUsXG4gICAgICB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncyxcbiAgICAgIFwiZ2VuZXJhdGVkTGluZVwiLFxuICAgICAgXCJnZW5lcmF0ZWRDb2x1bW5cIixcbiAgICAgIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQsXG4gICAgICB1dGlsLmdldEFyZyhhQXJncywgJ2JpYXMnLCBTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORClcbiAgICApO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHZhciBtYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcobWFwcGluZywgJ3NvdXJjZScsIG51bGwpO1xuICAgICAgICBpZiAoc291cmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5hdChzb3VyY2UpO1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuY29tcHV0ZVNvdXJjZVVSTCh0aGlzLnNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZFNvdXJjZUluZGV4KGFTb3VyY2UpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFtpbmRleF07XG4gICAgfVxuXG4gICAgdmFyIHJlbGF0aXZlU291cmNlID0gYVNvdXJjZTtcbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHJlbGF0aXZlU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIHJlbGF0aXZlU291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IHJlbGF0aXZlU291cmNlLnJlcGxhY2UoL15maWxlOlxcL1xcLy8sIFwiXCIpO1xuICAgICAgaWYgKHVybC5zY2hlbWUgPT0gXCJmaWxlXCJcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhmaWxlVXJpQWJzUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGZpbGVVcmlBYnNQYXRoKV1cbiAgICAgIH1cblxuICAgICAgaWYgKCghdXJsLnBhdGggfHwgdXJsLnBhdGggPT0gXCIvXCIpXG4gICAgICAgICAgJiYgdGhpcy5fc291cmNlcy5oYXMoXCIvXCIgKyByZWxhdGl2ZVNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKFwiL1wiICsgcmVsYXRpdmVTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyByZWxhdGl2ZVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAgIFRoZSBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgc291cmNlID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdzb3VyY2UnKTtcbiAgICBzb3VyY2UgPSB0aGlzLl9maW5kU291cmNlSW5kZXgoc291cmNlKTtcbiAgICBpZiAoc291cmNlIDwgMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICBcIm9yaWdpbmFsTGluZVwiLFxuICAgICAgXCJvcmlnaW5hbENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgaWYgKG1hcHBpbmcuc291cmNlID09PSBuZWVkbGUuc291cmNlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZExpbmUnLCBudWxsKSxcbiAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICBsYXN0Q29sdW1uOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnbGFzdEdlbmVyYXRlZENvbHVtbicsIG51bGwpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBjb2x1bW46IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0cy5CYXNpY1NvdXJjZU1hcENvbnN1bWVyID0gQmFzaWNTb3VyY2VNYXBDb25zdW1lcjtcblxuLyoqXG4gKiBBbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIgaW5zdGFuY2UgcmVwcmVzZW50cyBhIHBhcnNlZCBzb3VyY2UgbWFwIHdoaWNoXG4gKiB3ZSBjYW4gcXVlcnkgZm9yIGluZm9ybWF0aW9uLiBJdCBkaWZmZXJzIGZyb20gQmFzaWNTb3VyY2VNYXBDb25zdW1lciBpblxuICogdGhhdCBpdCB0YWtlcyBcImluZGV4ZWRcIiBzb3VyY2UgbWFwcyAoaS5lLiBvbmVzIHdpdGggYSBcInNlY3Rpb25zXCIgZmllbGQpIGFzXG4gKiBpbnB1dC5cbiAqXG4gKiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmF3IHNvdXJjZSBtYXAgKGVpdGhlciBhcyBhIEpTT04gc3RyaW5nLCBvciBhbHJlYWR5XG4gKiBwYXJzZWQgdG8gYW4gb2JqZWN0KS4gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIGZvciBpbmRleGVkIHNvdXJjZSBtYXBzLCB0aGV5XG4gKiBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBmaWxlOiBPcHRpb25hbC4gVGhlIGdlbmVyYXRlZCBmaWxlIHRoaXMgc291cmNlIG1hcCBpcyBhc3NvY2lhdGVkIHdpdGguXG4gKiAgIC0gc2VjdGlvbnM6IEEgbGlzdCBvZiBzZWN0aW9uIGRlZmluaXRpb25zLlxuICpcbiAqIEVhY2ggdmFsdWUgdW5kZXIgdGhlIFwic2VjdGlvbnNcIiBmaWVsZCBoYXMgdHdvIGZpZWxkczpcbiAqICAgLSBvZmZzZXQ6IFRoZSBvZmZzZXQgaW50byB0aGUgb3JpZ2luYWwgc3BlY2lmaWVkIGF0IHdoaWNoIHRoaXMgc2VjdGlvblxuICogICAgICAgYmVnaW5zIHRvIGFwcGx5LCBkZWZpbmVkIGFzIGFuIG9iamVjdCB3aXRoIGEgXCJsaW5lXCIgYW5kIFwiY29sdW1uXCJcbiAqICAgICAgIGZpZWxkLlxuICogICAtIG1hcDogQSBzb3VyY2UgbWFwIGRlZmluaXRpb24uIFRoaXMgc291cmNlIG1hcCBjb3VsZCBhbHNvIGJlIGluZGV4ZWQsXG4gKiAgICAgICBidXQgZG9lc24ndCBoYXZlIHRvIGJlLlxuICpcbiAqIEluc3RlYWQgb2YgdGhlIFwibWFwXCIgZmllbGQsIGl0J3MgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgXCJ1cmxcIiBmaWVsZFxuICogc3BlY2lmeWluZyBhIFVSTCB0byByZXRyaWV2ZSBhIHNvdXJjZSBtYXAgZnJvbSwgYnV0IHRoYXQncyBjdXJyZW50bHlcbiAqIHVuc3VwcG9ydGVkLlxuICpcbiAqIEhlcmUncyBhbiBleGFtcGxlIHNvdXJjZSBtYXAsIHRha2VuIGZyb20gdGhlIHNvdXJjZSBtYXAgc3BlY1swXSwgYnV0XG4gKiBtb2RpZmllZCB0byBvbWl0IGEgc2VjdGlvbiB3aGljaCB1c2VzIHRoZSBcInVybFwiIGZpZWxkLlxuICpcbiAqICB7XG4gKiAgICB2ZXJzaW9uIDogMyxcbiAqICAgIGZpbGU6IFwiYXBwLmpzXCIsXG4gKiAgICBzZWN0aW9uczogW3tcbiAqICAgICAgb2Zmc2V0OiB7bGluZToxMDAsIGNvbHVtbjoxMH0sXG4gKiAgICAgIG1hcDoge1xuICogICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgIGZpbGU6IFwic2VjdGlvbi5qc1wiLFxuICogICAgICAgIHNvdXJjZXM6IFtcImZvby5qc1wiLCBcImJhci5qc1wiXSxcbiAqICAgICAgICBuYW1lczogW1wic3JjXCIsIFwibWFwc1wiLCBcImFyZVwiLCBcImZ1blwiXSxcbiAqICAgICAgICBtYXBwaW5nczogXCJBQUFBLEU7O0FCQ0RFO1wiXG4gKiAgICAgIH1cbiAqICAgIH1dLFxuICogIH1cbiAqXG4gKiBUaGUgc2Vjb25kIHBhcmFtZXRlciwgaWYgZ2l2ZW4sIGlzIGEgc3RyaW5nIHdob3NlIHZhbHVlIGlzIHRoZSBVUkxcbiAqIGF0IHdoaWNoIHRoZSBzb3VyY2UgbWFwIHdhcyBmb3VuZC4gIFRoaXMgVVJMIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGVcbiAqIHNvdXJjZXMgYXJyYXkuXG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCwgYVNvdXJjZU1hcFVSTCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IHV0aWwucGFyc2VTb3VyY2VNYXBJbnB1dChhU291cmNlTWFwKTtcbiAgfVxuXG4gIHZhciB2ZXJzaW9uID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAndmVyc2lvbicpO1xuICB2YXIgc2VjdGlvbnMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzZWN0aW9ucycpO1xuXG4gIGlmICh2ZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgfVxuXG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcblxuICB2YXIgbGFzdE9mZnNldCA9IHtcbiAgICBsaW5lOiAtMSxcbiAgICBjb2x1bW46IDBcbiAgfTtcbiAgdGhpcy5fc2VjdGlvbnMgPSBzZWN0aW9ucy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICBpZiAocy51cmwpIHtcbiAgICAgIC8vIFRoZSB1cmwgZmllbGQgd2lsbCByZXF1aXJlIHN1cHBvcnQgZm9yIGFzeW5jaHJvbmljaXR5LlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3NvdXJjZS1tYXAvaXNzdWVzLzE2XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBvcnQgZm9yIHVybCBmaWVsZCBpbiBzZWN0aW9ucyBub3QgaW1wbGVtZW50ZWQuJyk7XG4gICAgfVxuICAgIHZhciBvZmZzZXQgPSB1dGlsLmdldEFyZyhzLCAnb2Zmc2V0Jyk7XG4gICAgdmFyIG9mZnNldExpbmUgPSB1dGlsLmdldEFyZyhvZmZzZXQsICdsaW5lJyk7XG4gICAgdmFyIG9mZnNldENvbHVtbiA9IHV0aWwuZ2V0QXJnKG9mZnNldCwgJ2NvbHVtbicpO1xuXG4gICAgaWYgKG9mZnNldExpbmUgPCBsYXN0T2Zmc2V0LmxpbmUgfHxcbiAgICAgICAgKG9mZnNldExpbmUgPT09IGxhc3RPZmZzZXQubGluZSAmJiBvZmZzZXRDb2x1bW4gPCBsYXN0T2Zmc2V0LmNvbHVtbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdGlvbiBvZmZzZXRzIG11c3QgYmUgb3JkZXJlZCBhbmQgbm9uLW92ZXJsYXBwaW5nLicpO1xuICAgIH1cbiAgICBsYXN0T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlbmVyYXRlZE9mZnNldDoge1xuICAgICAgICAvLyBUaGUgb2Zmc2V0IGZpZWxkcyBhcmUgMC1iYXNlZCwgYnV0IHdlIHVzZSAxLWJhc2VkIGluZGljZXMgd2hlblxuICAgICAgICAvLyBlbmNvZGluZy9kZWNvZGluZyBmcm9tIFZMUS5cbiAgICAgICAgZ2VuZXJhdGVkTGluZTogb2Zmc2V0TGluZSArIDEsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogb2Zmc2V0Q29sdW1uICsgMVxuICAgICAgfSxcbiAgICAgIGNvbnN1bWVyOiBuZXcgU291cmNlTWFwQ29uc3VtZXIodXRpbC5nZXRBcmcocywgJ21hcCcpLCBhU291cmNlTWFwVVJMKVxuICAgIH1cbiAgfSk7XG59XG5cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSk7XG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl92ZXJzaW9uID0gMztcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiBvcmlnaW5hbCBzb3VyY2VzLlxuICovXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ3NvdXJjZXMnLCB7XG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHNvdXJjZXMucHVzaCh0aGlzLl9zZWN0aW9uc1tpXS5jb25zdW1lci5zb3VyY2VzW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZXM7XG4gIH1cbn0pO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLiAgVGhlIGNvbHVtblxuICogICAgIG51bWJlciBpcyAwLWJhc2VkLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuICBUaGVcbiAqICAgICBjb2x1bW4gbnVtYmVyIGlzIDAtYmFzZWQuXG4gKiAgIC0gbmFtZTogVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIsIG9yIG51bGwuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9vcmlnaW5hbFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIGdlbmVyYXRlZExpbmU6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpLFxuICAgICAgZ2VuZXJhdGVkQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIC8vIEZpbmQgdGhlIHNlY3Rpb24gY29udGFpbmluZyB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9uIHdlJ3JlIHRyeWluZyB0byBtYXBcbiAgICAvLyB0byBhbiBvcmlnaW5hbCBwb3NpdGlvbi5cbiAgICB2YXIgc2VjdGlvbkluZGV4ID0gYmluYXJ5U2VhcmNoLnNlYXJjaChuZWVkbGUsIHRoaXMuX3NlY3Rpb25zLFxuICAgICAgZnVuY3Rpb24obmVlZGxlLCBzZWN0aW9uKSB7XG4gICAgICAgIHZhciBjbXAgPSBuZWVkbGUuZ2VuZXJhdGVkTGluZSAtIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmU7XG4gICAgICAgIGlmIChjbXApIHtcbiAgICAgICAgICByZXR1cm4gY21wO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tzZWN0aW9uSW5kZXhdO1xuXG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2U6IG51bGwsXG4gICAgICAgIGxpbmU6IG51bGwsXG4gICAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgICAgbmFtZTogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VjdGlvbi5jb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHtcbiAgICAgIGxpbmU6IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgIGNvbHVtbjogbmVlZGxlLmdlbmVyYXRlZENvbHVtbiAtXG4gICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBuZWVkbGUuZ2VuZXJhdGVkTGluZVxuICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICA6IDApLFxuICAgICAgYmlhczogYUFyZ3MuYmlhc1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgdGhlIHNvdXJjZSBjb250ZW50IGZvciBldmVyeSBzb3VyY2UgaW4gdGhlIHNvdXJjZVxuICogbWFwLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfaGFzQ29udGVudHNPZkFsbFNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3Rpb25zLmV2ZXJ5KGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy5jb25zdW1lci5oYXNDb250ZW50c09mQWxsU291cmNlcygpO1xuICAgIH0pO1xuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50LiBUaGUgb25seSBhcmd1bWVudCBpcyB0aGUgdXJsIG9mIHRoZVxuICogb3JpZ2luYWwgc291cmNlIGZpbGUuIFJldHVybnMgbnVsbCBpZiBubyBvcmlnaW5hbCBzb3VyY2UgY29udGVudCBpc1xuICogYXZhaWxhYmxlLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLnNvdXJjZUNvbnRlbnRGb3IgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfc291cmNlQ29udGVudEZvcihhU291cmNlLCBudWxsT25NaXNzaW5nKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgdHJ1ZSk7XG4gICAgICBpZiAoY29udGVudCkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG51bGxPbk1pc3NpbmcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCInICsgYVNvdXJjZSArICdcIiBpcyBub3QgaW4gdGhlIFNvdXJjZU1hcC4nKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcG9zaXRpb25zIHByb3ZpZGVkLiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aFxuICogdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgLSBzb3VyY2U6IFRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLiAgVGhlIGxpbmUgbnVtYmVyXG4gKiAgICAgaXMgMS1iYXNlZC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBUaGUgY29sdW1uXG4gKiAgICAgbnVtYmVyIGlzIDAtYmFzZWQuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLiAgVGhlXG4gKiAgICAgbGluZSBudW1iZXIgaXMgMS1iYXNlZC4gXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgICBUaGUgY29sdW1uIG51bWJlciBpcyAwLWJhc2VkLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuX2ZpbmRTb3VyY2VJbmRleCh1dGlsLmdldEFyZyhhQXJncywgJ3NvdXJjZScpKSA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgZ2VuZXJhdGVkUG9zaXRpb24gPSBzZWN0aW9uLmNvbnN1bWVyLmdlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKTtcbiAgICAgIGlmIChnZW5lcmF0ZWRQb3NpdGlvbikge1xuICAgICAgICB2YXIgcmV0ID0ge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZFBvc2l0aW9uLmxpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZFBvc2l0aW9uLmNvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gZ2VuZXJhdGVkUG9zaXRpb24ubGluZVxuICAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgIDogMClcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9wYXJzZU1hcHBpbmdzID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX3BhcnNlTWFwcGluZ3MoYVN0ciwgYVNvdXJjZVJvb3QpIHtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzZWN0aW9uID0gdGhpcy5fc2VjdGlvbnNbaV07XG4gICAgICB2YXIgc2VjdGlvbk1hcHBpbmdzID0gc2VjdGlvbi5jb25zdW1lci5fZ2VuZXJhdGVkTWFwcGluZ3M7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNlY3Rpb25NYXBwaW5ncy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHNlY3Rpb25NYXBwaW5nc1tqXTtcblxuICAgICAgICB2YXIgc291cmNlID0gc2VjdGlvbi5jb25zdW1lci5fc291cmNlcy5hdChtYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIHNvdXJjZSA9IHV0aWwuY29tcHV0ZVNvdXJjZVVSTChzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSwgdGhpcy5fc291cmNlTWFwVVJMKTtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBudWxsO1xuICAgICAgICBpZiAobWFwcGluZy5uYW1lKSB7XG4gICAgICAgICAgbmFtZSA9IHNlY3Rpb24uY29uc3VtZXIuX25hbWVzLmF0KG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIG1hcHBpbmdzIGNvbWluZyBmcm9tIHRoZSBjb25zdW1lciBmb3IgdGhlIHNlY3Rpb24gaGF2ZVxuICAgICAgICAvLyBnZW5lcmF0ZWQgcG9zaXRpb25zIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgc2VjdGlvbiwgc28gd2VcbiAgICAgICAgLy8gbmVlZCB0byBvZmZzZXQgdGhlbSB0byBiZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbmNhdGVuYXRlZFxuICAgICAgICAvLyBnZW5lcmF0ZWQgZmlsZS5cbiAgICAgICAgdmFyIGFkanVzdGVkTWFwcGluZyA9IHtcbiAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUgK1xuICAgICAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgLSAxKSxcbiAgICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBtYXBwaW5nLmdlbmVyYXRlZExpbmVcbiAgICAgICAgICAgID8gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkQ29sdW1uIC0gMVxuICAgICAgICAgICAgOiAwKSxcbiAgICAgICAgICBvcmlnaW5hbExpbmU6IG1hcHBpbmcub3JpZ2luYWxMaW5lLFxuICAgICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICAgIG5hbWU6IG5hbWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICBpZiAodHlwZW9mIGFkanVzdGVkTWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3MucHVzaChhZGp1c3RlZE1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCk7XG4gICAgcXVpY2tTb3J0KHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgfTtcblxuZXhwb3J0cy5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIgPSBJbmRleGVkU291cmNlTWFwQ29uc3VtZXI7XG4iLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gfHwgJyc7XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdIHx8ICcnO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuIiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG4iLCIvKiBnbG9iYWwgZGVmaW5lICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgU291cmNlTm9kZSA9IHVuZGVmaW5lZDtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXN1c21lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICB2YXIgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7fVxuLyogTk9QICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGVzdGVkIGJ1dCBub3QgY292ZXJlZCBpbiBpc3RhbmJ1bCBkdWUgdG8gZGlzdCBidWlsZCAgKi9cbmlmICghU291cmNlTm9kZSkge1xuICBTb3VyY2VOb2RlID0gZnVuY3Rpb24gKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbiBhZGQoY2h1bmtzKSB7XG4gICAgICBpZiAoX3V0aWxzLmlzQXJyYXkoY2h1bmtzKSkge1xuICAgICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNyYyArPSBjaHVua3M7XG4gICAgfSxcbiAgICBwcmVwZW5kOiBmdW5jdGlvbiBwcmVwZW5kKGNodW5rcykge1xuICAgICAgaWYgKF91dGlscy5pc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYztcbiAgICB9LFxuICAgIHRvU3RyaW5nV2l0aFNvdXJjZU1hcDogZnVuY3Rpb24gdG9TdHJpbmdXaXRoU291cmNlTWFwKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoX3V0aWxzLmlzQXJyYXkoY2h1bmspKSB7XG4gICAgdmFyIHJldCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNodW5rLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICByZXQucHVzaChjb2RlR2VuLndyYXAoY2h1bmtbaV0sIGxvYykpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9IGVsc2UgaWYgKHR5cGVvZiBjaHVuayA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBjaHVuayA9PT0gJ251bWJlcicpIHtcbiAgICAvLyBIYW5kbGUgcHJpbWl0aXZlcyB0aGF0IHRoZSBTb3VyY2VOb2RlIHdpbGwgdGhyb3cgdXAgb25cbiAgICByZXR1cm4gY2h1bmsgKyAnJztcbiAgfVxuICByZXR1cm4gY2h1bms7XG59XG5cbmZ1bmN0aW9uIENvZGVHZW4oc3JjRmlsZSkge1xuICB0aGlzLnNyY0ZpbGUgPSBzcmNGaWxlO1xuICB0aGlzLnNvdXJjZSA9IFtdO1xufVxuXG5Db2RlR2VuLnByb3RvdHlwZSA9IHtcbiAgaXNFbXB0eTogZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gIXRoaXMuc291cmNlLmxlbmd0aDtcbiAgfSxcbiAgcHJlcGVuZDogZnVuY3Rpb24gcHJlcGVuZChzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uIHB1c2goc291cmNlLCBsb2MpIHtcbiAgICB0aGlzLnNvdXJjZS5wdXNoKHRoaXMud3JhcChzb3VyY2UsIGxvYykpO1xuICB9LFxuXG4gIG1lcmdlOiBmdW5jdGlvbiBtZXJnZSgpIHtcbiAgICB2YXIgc291cmNlID0gdGhpcy5lbXB0eSgpO1xuICAgIHRoaXMuZWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uIGVhY2goaXRlcikge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLnNvdXJjZS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaXRlcih0aGlzLnNvdXJjZVtpXSk7XG4gICAgfVxuICB9LFxuXG4gIGVtcHR5OiBmdW5jdGlvbiBlbXB0eSgpIHtcbiAgICB2YXIgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfTtcbiAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7XG4gIH0sXG4gIHdyYXA6IGZ1bmN0aW9uIHdyYXAoY2h1bmspIHtcbiAgICB2YXIgbG9jID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSA6IGFyZ3VtZW50c1sxXTtcblxuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlLCBjaHVuayk7XG4gIH0sXG5cbiAgZnVuY3Rpb25DYWxsOiBmdW5jdGlvbiBmdW5jdGlvbkNhbGwoZm4sIHR5cGUsIHBhcmFtcykge1xuICAgIHBhcmFtcyA9IHRoaXMuZ2VuZXJhdGVMaXN0KHBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMud3JhcChbZm4sIHR5cGUgPyAnLicgKyB0eXBlICsgJygnIDogJygnLCBwYXJhbXMsICcpJ10pO1xuICB9LFxuXG4gIHF1b3RlZFN0cmluZzogZnVuY3Rpb24gcXVvdGVkU3RyaW5nKHN0cikge1xuICAgIHJldHVybiAnXCInICsgKHN0ciArICcnKS5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgJ1xcXFxuJykucmVwbGFjZSgvXFxyL2csICdcXFxccicpLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKSArICdcIic7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24gb2JqZWN0TGl0ZXJhbChvYmopIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBwYWlycyA9IFtdO1xuXG4gICAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgX3RoaXMpO1xuICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwYWlycy5wdXNoKFtfdGhpcy5xdW90ZWRTdHJpbmcoa2V5KSwgJzonLCB2YWx1ZV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KHBhaXJzKTtcbiAgICByZXQucHJlcGVuZCgneycpO1xuICAgIHJldC5hZGQoJ30nKTtcbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24gZ2VuZXJhdGVMaXN0KGVudHJpZXMpIHtcbiAgICB2YXIgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24gZ2VuZXJhdGVBcnJheShlbnRyaWVzKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KGVudHJpZXMpO1xuICAgIHJldC5wcmVwZW5kKCdbJyk7XG4gICAgcmV0LmFkZCgnXScpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gQ29kZUdlbjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJOdmJYQnBiR1Z5TDJOdlpHVXRaMlZ1TG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPM0ZDUVVOM1FpeFZRVUZWT3p0QlFVVnNReXhKUVVGSkxGVkJRVlVzV1VGQlFTeERRVUZET3p0QlFVVm1MRWxCUVVrN08wRkJSVVlzVFVGQlNTeFBRVUZQTEUxQlFVMHNTMEZCU3l4VlFVRlZMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGT3pzN1FVRkhMME1zVVVGQlNTeFRRVUZUTEVkQlFVY3NUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRM1JETEdOQlFWVXNSMEZCUnl4VFFVRlRMRU5CUVVNc1ZVRkJWU3hEUVVGRE8wZEJRMjVETzBOQlEwWXNRMEZCUXl4UFFVRlBMRWRCUVVjc1JVRkJSU3hGUVVWaU96czdPMEZCUVVFc1FVRkhSQ3hKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzBGQlEyWXNXVUZCVlN4SFFVRkhMRlZCUVZNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNUVUZCVFN4RlFVRkZPMEZCUTI1RUxGRkJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJRc1VVRkJTU3hOUVVGTkxFVkJRVVU3UVVGRFZpeFZRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wdEJRMnhDTzBkQlEwWXNRMEZCUXpzN1FVRkZSaXhaUVVGVkxFTkJRVU1zVTBGQlV5eEhRVUZITzBGQlEzSkNMRTlCUVVjc1JVRkJSU3hoUVVGVExFMUJRVTBzUlVGQlJUdEJRVU53UWl4VlFVRkpMR1ZCUVZFc1RVRkJUU3hEUVVGRExFVkJRVVU3UVVGRGJrSXNZMEZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdUMEZETVVJN1FVRkRSQ3hWUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXp0TFFVTndRanRCUVVORUxGZEJRVThzUlVGQlJTeHBRa0ZCVXl4TlFVRk5MRVZCUVVVN1FVRkRlRUlzVlVGQlNTeGxRVUZSTEUxQlFVMHNRMEZCUXl4RlFVRkZPMEZCUTI1Q0xHTkJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8wOUJRekZDTzBGQlEwUXNWVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXp0TFFVTTVRanRCUVVORUxIbENRVUZ4UWl4RlFVRkZMR2xEUVVGWE8wRkJRMmhETEdGQlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTTdTMEZEYkVNN1FVRkRSQ3haUVVGUkxFVkJRVVVzYjBKQlFWYzdRVUZEYmtJc1lVRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzB0QlEycENPMGRCUTBZc1EwRkJRenREUVVOSU96dEJRVVZFTEZOQlFWTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFVkJRVVVzUjBGQlJ5eEZRVUZGTzBGQlEzUkRMRTFCUVVrc1pVRkJVU3hMUVVGTExFTkJRVU1zUlVGQlJUdEJRVU5zUWl4UlFVRkpMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU03TzBGQlJXSXNVMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTm9SQ3hUUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRka003UVVGRFJDeFhRVUZQTEVkQlFVY3NRMEZCUXp0SFFVTmFMRTFCUVUwc1NVRkJTU3hQUVVGUExFdEJRVXNzUzBGQlN5eFRRVUZUTEVsQlFVa3NUMEZCVHl4TFFVRkxMRXRCUVVzc1VVRkJVU3hGUVVGRk96dEJRVVZzUlN4WFFVRlBMRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU03UjBGRGJrSTdRVUZEUkN4VFFVRlBMRXRCUVVzc1EwRkJRenREUVVOa096dEJRVVZFTEZOQlFWTXNUMEZCVHl4RFFVRkRMRTlCUVU4c1JVRkJSVHRCUVVONFFpeE5RVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJRenRCUVVOMlFpeE5RVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJRenREUVVOc1FqczdRVUZGUkN4UFFVRlBMRU5CUVVNc1UwRkJVeXhIUVVGSE8wRkJRMnhDTEZOQlFVOHNSVUZCUVN4dFFrRkJSenRCUVVOU0xGZEJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJRenRIUVVNMVFqdEJRVU5FTEZOQlFVOHNSVUZCUlN4cFFrRkJVeXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTzBGQlF6ZENMRkZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdSMEZETjBNN1FVRkRSQ3hOUVVGSkxFVkJRVVVzWTBGQlV5eE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZPMEZCUXpGQ0xGRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1IwRkRNVU03TzBGQlJVUXNUMEZCU3l4RlFVRkZMR2xDUVVGWE8wRkJRMmhDTEZGQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dEJRVU14UWl4UlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVk1zU1VGQlNTeEZRVUZGTzBGQlEzWkNMRmxCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGFFTXNRMEZCUXl4RFFVRkRPMEZCUTBnc1YwRkJUeXhOUVVGTkxFTkJRVU03UjBGRFpqczdRVUZGUkN4TlFVRkpMRVZCUVVVc1kwRkJVeXhKUVVGSkxFVkJRVVU3UVVGRGJrSXNVMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1FVRkRkRVFzVlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU4wUWp0SFFVTkdPenRCUVVWRUxFOUJRVXNzUlVGQlJTeHBRa0ZCVnp0QlFVTm9RaXhSUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaVUZCWlN4SlFVRkpMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETzBGQlEyaEVMRmRCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRVZCUVVVc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wZEJRM1pGTzBGQlEwUXNUVUZCU1N4RlFVRkZMR05CUVZNc1MwRkJTeXhGUVVFclF6dFJRVUUzUXl4SFFVRkhMSGxFUVVGSExFbEJRVWtzUTBGQlF5eGxRVUZsTEVsQlFVa3NSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hGUVVGRk96dEJRVU12UkN4UlFVRkpMRXRCUVVzc1dVRkJXU3hWUVVGVkxFVkJRVVU3UVVGREwwSXNZVUZCVHl4TFFVRkxMRU5CUVVNN1MwRkRaRHM3UVVGRlJDeFRRVUZMTEVkQlFVY3NVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdPMEZCUlhCRExGZEJRVThzU1VGQlNTeFZRVUZWTEVOQlEyNUNMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEZRVU5rTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVOb1FpeEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVTmFMRXRCUVVzc1EwRkRUaXhEUVVGRE8wZEJRMGc3TzBGQlJVUXNZMEZCV1N4RlFVRkZMSE5DUVVGVExFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFVVXNUVUZCVFN4RlFVRkZPMEZCUTNaRExGVkJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8wRkJRMjVETEZkQlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEpRVUZKTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWxCUVVrc1IwRkJSeXhIUVVGSExFZEJRVWNzUjBGQlJ5eEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wZEJRM0JGT3p0QlFVVkVMR05CUVZrc1JVRkJSU3h6UWtGQlV5eEhRVUZITEVWQlFVVTdRVUZETVVJc1YwRkRSU3hIUVVGSExFZEJRMGdzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkJMRU5CUTA0c1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZEZEVJc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZEY0VJc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZEY2tJc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZEY2tJc1QwRkJUeXhEUVVGRExGTkJRVk1zUlVGQlJTeFRRVUZUTEVOQlFVTTdTMEZETjBJc1QwRkJUeXhEUVVGRExGTkJRVk1zUlVGQlJTeFRRVUZUTEVOQlFVTXNSMEZEYUVNc1IwRkJSeXhEUVVOSU8wZEJRMGc3TzBGQlJVUXNaVUZCWVN4RlFVRkZMSFZDUVVGVExFZEJRVWNzUlVGQlJUczdPenM3UVVGRE0wSXNVVUZCU1N4TFFVRkxMRWRCUVVjc1JVRkJSU3hEUVVGRE96dEJRVVZtTEZWQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFVRXNSMEZCUnl4RlFVRkpPMEZCUXpsQ0xGVkJRVWtzUzBGQlN5eEhRVUZITEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVThzUTBGQlF6dEJRVU4wUXl4VlFVRkpMRXRCUVVzc1MwRkJTeXhYUVVGWExFVkJRVVU3UVVGRGVrSXNZVUZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFMUJRVXNzV1VGQldTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzA5QlEyeEVPMHRCUTBZc1EwRkJReXhEUVVGRE96dEJRVVZJTEZGQlFVa3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEYmtNc1QwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhQUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJJc1YwRkJUeXhIUVVGSExFTkJRVU03UjBGRFdqczdRVUZGUkN4alFVRlpMRVZCUVVVc2MwSkJRVk1zVDBGQlR5eEZRVUZGTzBGQlF6bENMRkZCUVVrc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXpzN1FVRkZka0lzVTBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU5zUkN4VlFVRkpMRU5CUVVNc1JVRkJSVHRCUVVOTUxGZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1QwRkRaRHM3UVVGRlJDeFRRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVOMFF6czdRVUZGUkN4WFFVRlBMRWRCUVVjc1EwRkJRenRIUVVOYU96dEJRVVZFTEdWQlFXRXNSVUZCUlN4MVFrRkJVeXhQUVVGUExFVkJRVVU3UVVGREwwSXNVVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTnlReXhQUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTJwQ0xFOUJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN08wRkJSV0lzVjBGQlR5eEhRVUZITEVOQlFVTTdSMEZEV2p0RFFVTkdMRU5CUVVNN08zRkNRVVZoTEU5QlFVOGlMQ0ptYVd4bElqb2lZMjlrWlMxblpXNHVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpQm5iRzlpWVd3Z1pHVm1hVzVsSUNvdlhHNXBiWEJ2Y25RZ2V5QnBjMEZ5Y21GNUlIMGdabkp2YlNBbkxpNHZkWFJwYkhNbk8xeHVYRzVzWlhRZ1UyOTFjbU5sVG05a1pUdGNibHh1ZEhKNUlIdGNiaUFnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUc1bGVIUWdLaTljYmlBZ2FXWWdLSFI1Y0dWdlppQmtaV1pwYm1VZ0lUMDlJQ2RtZFc1amRHbHZiaWNnZkh3Z0lXUmxabWx1WlM1aGJXUXBJSHRjYmlBZ0lDQXZMeUJYWlNCa2IyNG5kQ0J6ZFhCd2IzSjBJSFJvYVhNZ2FXNGdRVTFFSUdWdWRtbHliMjV0Wlc1MGN5NGdSbTl5SUhSb1pYTmxJR1Z1ZG1seWIyNXRaVzUwY3l3Z2QyVWdZWE4xYzIxbElIUm9ZWFJjYmlBZ0lDQXZMeUIwYUdWNUlHRnlaU0J5ZFc1dWFXNW5JRzl1SUhSb1pTQmljbTkzYzJWeUlHRnVaQ0IwYUhWeklHaGhkbVVnYm04Z2JtVmxaQ0JtYjNJZ2RHaGxJSE52ZFhKalpTMXRZWEFnYkdsaWNtRnllUzVjYmlBZ0lDQnNaWFFnVTI5MWNtTmxUV0Z3SUQwZ2NtVnhkV2x5WlNnbmMyOTFjbU5sTFcxaGNDY3BPMXh1SUNBZ0lGTnZkWEpqWlU1dlpHVWdQU0JUYjNWeVkyVk5ZWEF1VTI5MWNtTmxUbTlrWlR0Y2JpQWdmVnh1ZlNCallYUmphQ0FvWlhKeUtTQjdYRzRnSUM4cUlFNVBVQ0FxTDF4dWZWeHVYRzR2S2lCcGMzUmhibUoxYkNCcFoyNXZjbVVnYVdZNklIUmxjM1JsWkNCaWRYUWdibTkwSUdOdmRtVnlaV1FnYVc0Z2FYTjBZVzVpZFd3Z1pIVmxJSFJ2SUdScGMzUWdZblZwYkdRZ0lDb3ZYRzVwWmlBb0lWTnZkWEpqWlU1dlpHVXBJSHRjYmlBZ1UyOTFjbU5sVG05a1pTQTlJR1oxYm1OMGFXOXVLR3hwYm1Vc0lHTnZiSFZ0Yml3Z2MzSmpSbWxzWlN3Z1kyaDFibXR6S1NCN1hHNGdJQ0FnZEdocGN5NXpjbU1nUFNBbkp6dGNiaUFnSUNCcFppQW9ZMmgxYm10ektTQjdYRzRnSUNBZ0lDQjBhR2x6TG1Ga1pDaGphSFZ1YTNNcE8xeHVJQ0FnSUgxY2JpQWdmVHRjYmlBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnS2k5Y2JpQWdVMjkxY21ObFRtOWtaUzV3Y205MGIzUjVjR1VnUFNCN1hHNGdJQ0FnWVdSa09pQm1kVzVqZEdsdmJpaGphSFZ1YTNNcElIdGNiaUFnSUNBZ0lHbG1JQ2hwYzBGeWNtRjVLR05vZFc1cmN5a3BJSHRjYmlBZ0lDQWdJQ0FnWTJoMWJtdHpJRDBnWTJoMWJtdHpMbXB2YVc0b0p5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1emNtTWdLejBnWTJoMWJtdHpPMXh1SUNBZ0lIMHNYRzRnSUNBZ2NISmxjR1Z1WkRvZ1puVnVZM1JwYjI0b1kyaDFibXR6S1NCN1hHNGdJQ0FnSUNCcFppQW9hWE5CY25KaGVTaGphSFZ1YTNNcEtTQjdYRzRnSUNBZ0lDQWdJR05vZFc1cmN5QTlJR05vZFc1cmN5NXFiMmx1S0NjbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9hWE11YzNKaklEMGdZMmgxYm10eklDc2dkR2hwY3k1emNtTTdYRzRnSUNBZ2ZTeGNiaUFnSUNCMGIxTjBjbWx1WjFkcGRHaFRiM1Z5WTJWTllYQTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSHNnWTI5a1pUb2dkR2hwY3k1MGIxTjBjbWx1WnlncElIMDdYRzRnSUNBZ2ZTeGNiaUFnSUNCMGIxTjBjbWx1WnpvZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RHaHBjeTV6Y21NN1hHNGdJQ0FnZlZ4dUlDQjlPMXh1ZlZ4dVhHNW1kVzVqZEdsdmJpQmpZWE4wUTJoMWJtc29ZMmgxYm1zc0lHTnZaR1ZIWlc0c0lHeHZZeWtnZTF4dUlDQnBaaUFvYVhOQmNuSmhlU2hqYUhWdWF5a3BJSHRjYmlBZ0lDQnNaWFFnY21WMElEMGdXMTA3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Dd2diR1Z1SUQwZ1kyaDFibXN1YkdWdVozUm9PeUJwSUR3Z2JHVnVPeUJwS3lzcElIdGNiaUFnSUNBZ0lISmxkQzV3ZFhOb0tHTnZaR1ZIWlc0dWQzSmhjQ2hqYUhWdWExdHBYU3dnYkc5aktTazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDBnWld4elpTQnBaaUFvZEhsd1pXOW1JR05vZFc1cklEMDlQU0FuWW05dmJHVmhiaWNnZkh3Z2RIbHdaVzltSUdOb2RXNXJJRDA5UFNBbmJuVnRZbVZ5SnlrZ2UxeHVJQ0FnSUM4dklFaGhibVJzWlNCd2NtbHRhWFJwZG1WeklIUm9ZWFFnZEdobElGTnZkWEpqWlU1dlpHVWdkMmxzYkNCMGFISnZkeUIxY0NCdmJseHVJQ0FnSUhKbGRIVnliaUJqYUhWdWF5QXJJQ2NuTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJqYUhWdWF6dGNibjFjYmx4dVpuVnVZM1JwYjI0Z1EyOWtaVWRsYmloemNtTkdhV3hsS1NCN1hHNGdJSFJvYVhNdWMzSmpSbWxzWlNBOUlITnlZMFpwYkdVN1hHNGdJSFJvYVhNdWMyOTFjbU5sSUQwZ1cxMDdYRzU5WEc1Y2JrTnZaR1ZIWlc0dWNISnZkRzkwZVhCbElEMGdlMXh1SUNCcGMwVnRjSFI1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUFoZEdocGN5NXpiM1Z5WTJVdWJHVnVaM1JvTzF4dUlDQjlMRnh1SUNCd2NtVndaVzVrT2lCbWRXNWpkR2x2YmloemIzVnlZMlVzSUd4dll5a2dlMXh1SUNBZ0lIUm9hWE11YzI5MWNtTmxMblZ1YzJocFpuUW9kR2hwY3k1M2NtRndLSE52ZFhKalpTd2diRzlqS1NrN1hHNGdJSDBzWEc0Z0lIQjFjMmc2SUdaMWJtTjBhVzl1S0hOdmRYSmpaU3dnYkc5aktTQjdYRzRnSUNBZ2RHaHBjeTV6YjNWeVkyVXVjSFZ6YUNoMGFHbHpMbmR5WVhBb2MyOTFjbU5sTENCc2IyTXBLVHRjYmlBZ2ZTeGNibHh1SUNCdFpYSm5aVG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnYkdWMElITnZkWEpqWlNBOUlIUm9hWE11Wlcxd2RIa29LVHRjYmlBZ0lDQjBhR2x6TG1WaFkyZ29ablZ1WTNScGIyNG9iR2x1WlNrZ2UxeHVJQ0FnSUNBZ2MyOTFjbU5sTG1Ga1pDaGJKeUFnSnl3Z2JHbHVaU3dnSjF4Y2JpZGRLVHRjYmlBZ0lDQjlLVHRjYmlBZ0lDQnlaWFIxY200Z2MyOTFjbU5sTzF4dUlDQjlMRnh1WEc0Z0lHVmhZMmc2SUdaMWJtTjBhVzl1S0dsMFpYSXBJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTUN3Z2JHVnVJRDBnZEdocGN5NXpiM1Z5WTJVdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR2wwWlhJb2RHaHBjeTV6YjNWeVkyVmJhVjBwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNibHh1SUNCbGJYQjBlVG9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnYkdWMElHeHZZeUE5SUhSb2FYTXVZM1Z5Y21WdWRFeHZZMkYwYVc5dUlIeDhJSHNnYzNSaGNuUTZJSHQ5SUgwN1hHNGdJQ0FnY21WMGRYSnVJRzVsZHlCVGIzVnlZMlZPYjJSbEtHeHZZeTV6ZEdGeWRDNXNhVzVsTENCc2IyTXVjM1JoY25RdVkyOXNkVzF1TENCMGFHbHpMbk55WTBacGJHVXBPMXh1SUNCOUxGeHVJQ0IzY21Gd09pQm1kVzVqZEdsdmJpaGphSFZ1YXl3Z2JHOWpJRDBnZEdocGN5NWpkWEp5Wlc1MFRHOWpZWFJwYjI0Z2ZId2dleUJ6ZEdGeWREb2dlMzBnZlNrZ2UxeHVJQ0FnSUdsbUlDaGphSFZ1YXlCcGJuTjBZVzVqWlc5bUlGTnZkWEpqWlU1dlpHVXBJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmphSFZ1YXp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYUhWdWF5QTlJR05oYzNSRGFIVnVheWhqYUhWdWF5d2dkR2hwY3l3Z2JHOWpLVHRjYmx4dUlDQWdJSEpsZEhWeWJpQnVaWGNnVTI5MWNtTmxUbTlrWlNoY2JpQWdJQ0FnSUd4dll5NXpkR0Z5ZEM1c2FXNWxMRnh1SUNBZ0lDQWdiRzlqTG5OMFlYSjBMbU52YkhWdGJpeGNiaUFnSUNBZ0lIUm9hWE11YzNKalJtbHNaU3hjYmlBZ0lDQWdJR05vZFc1clhHNGdJQ0FnS1R0Y2JpQWdmU3hjYmx4dUlDQm1kVzVqZEdsdmJrTmhiR3c2SUdaMWJtTjBhVzl1S0dadUxDQjBlWEJsTENCd1lYSmhiWE1wSUh0Y2JpQWdJQ0J3WVhKaGJYTWdQU0IwYUdsekxtZGxibVZ5WVhSbFRHbHpkQ2h3WVhKaGJYTXBPMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbmR5WVhBb1cyWnVMQ0IwZVhCbElEOGdKeTRuSUNzZ2RIbHdaU0FySUNjb0p5QTZJQ2NvSnl3Z2NHRnlZVzF6TENBbktTZGRLVHRjYmlBZ2ZTeGNibHh1SUNCeGRXOTBaV1JUZEhKcGJtYzZJR1oxYm1OMGFXOXVLSE4wY2lrZ2UxeHVJQ0FnSUhKbGRIVnliaUFvWEc0Z0lDQWdJQ0FuWENJbklDdGNiaUFnSUNBZ0lDaHpkSElnS3lBbkp5bGNiaUFnSUNBZ0lDQWdMbkpsY0d4aFkyVW9MMXhjWEZ3dlp5d2dKMXhjWEZ4Y1hGeGNKeWxjYmlBZ0lDQWdJQ0FnTG5KbGNHeGhZMlVvTDF3aUwyY3NJQ2RjWEZ4Y1hDSW5LVnh1SUNBZ0lDQWdJQ0F1Y21Wd2JHRmpaU2d2WEZ4dUwyY3NJQ2RjWEZ4Y2JpY3BYRzRnSUNBZ0lDQWdJQzV5WlhCc1lXTmxLQzljWEhJdlp5d2dKMXhjWEZ4eUp5bGNiaUFnSUNBZ0lDQWdMbkpsY0d4aFkyVW9MMXhjZFRJd01qZ3ZaeXdnSjF4Y1hGeDFNakF5T0NjcElDOHZJRkJsY2lCRlkyMWhMVEkyTWlBM0xqTWdLeUEzTGpndU5GeHVJQ0FnSUNBZ0lDQXVjbVZ3YkdGalpTZ3ZYRngxTWpBeU9TOW5MQ0FuWEZ4Y1hIVXlNREk1SnlrZ0sxeHVJQ0FnSUNBZ0oxd2lKMXh1SUNBZ0lDazdYRzRnSUgwc1hHNWNiaUFnYjJKcVpXTjBUR2wwWlhKaGJEb2dablZ1WTNScGIyNG9iMkpxS1NCN1hHNGdJQ0FnYkdWMElIQmhhWEp6SUQwZ1cxMDdYRzVjYmlBZ0lDQlBZbXBsWTNRdWEyVjVjeWh2WW1vcExtWnZja1ZoWTJnb2EyVjVJRDArSUh0Y2JpQWdJQ0FnSUd4bGRDQjJZV3gxWlNBOUlHTmhjM1JEYUhWdWF5aHZZbXBiYTJWNVhTd2dkR2hwY3lrN1hHNGdJQ0FnSUNCcFppQW9kbUZzZFdVZ0lUMDlJQ2QxYm1SbFptbHVaV1FuS1NCN1hHNGdJQ0FnSUNBZ0lIQmhhWEp6TG5CMWMyZ29XM1JvYVhNdWNYVnZkR1ZrVTNSeWFXNW5LR3RsZVNrc0lDYzZKeXdnZG1Gc2RXVmRLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlLVHRjYmx4dUlDQWdJR3hsZENCeVpYUWdQU0IwYUdsekxtZGxibVZ5WVhSbFRHbHpkQ2h3WVdseWN5azdYRzRnSUNBZ2NtVjBMbkJ5WlhCbGJtUW9KM3NuS1R0Y2JpQWdJQ0J5WlhRdVlXUmtLQ2Q5SnlrN1hHNGdJQ0FnY21WMGRYSnVJSEpsZER0Y2JpQWdmU3hjYmx4dUlDQm5aVzVsY21GMFpVeHBjM1E2SUdaMWJtTjBhVzl1S0dWdWRISnBaWE1wSUh0Y2JpQWdJQ0JzWlhRZ2NtVjBJRDBnZEdocGN5NWxiWEIwZVNncE8xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREFzSUd4bGJpQTlJR1Z1ZEhKcFpYTXViR1Z1WjNSb095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUdsbUlDaHBLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRDNWhaR1FvSnl3bktUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwTG1Ga1pDaGpZWE4wUTJoMWJtc29aVzUwY21sbGMxdHBYU3dnZEdocGN5a3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCeVpYUTdYRzRnSUgwc1hHNWNiaUFnWjJWdVpYSmhkR1ZCY25KaGVUb2dablZ1WTNScGIyNG9aVzUwY21sbGN5a2dlMXh1SUNBZ0lHeGxkQ0J5WlhRZ1BTQjBhR2x6TG1kbGJtVnlZWFJsVEdsemRDaGxiblJ5YVdWektUdGNiaUFnSUNCeVpYUXVjSEpsY0dWdVpDZ25XeWNwTzF4dUlDQWdJSEpsZEM1aFpHUW9KMTBuS1R0Y2JseHVJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQmtaV1poZFd4MElFTnZaR1ZIWlc0N1hHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4uL2Jhc2UnKTtcblxudmFyIF9leGNlcHRpb24gPSByZXF1aXJlKCcuLi9leGNlcHRpb24nKTtcblxudmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBfY29kZUdlbiA9IHJlcXVpcmUoJy4vY29kZS1nZW4nKTtcblxudmFyIF9jb2RlR2VuMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvZGVHZW4pO1xuXG5mdW5jdGlvbiBMaXRlcmFsKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gSmF2YVNjcmlwdENvbXBpbGVyKCkge31cblxuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgLy8gUFVCTElDIEFQSTogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzIGluIGEgc3ViY2xhc3MgdG8gcHJvdmlkZVxuICAvLyBhbHRlcm5hdGl2ZSBjb21waWxlZCBmb3JtcyBmb3IgbmFtZSBsb29rdXAgYW5kIGJ1ZmZlcmluZyBzZW1hbnRpY3NcbiAgbmFtZUxvb2t1cDogZnVuY3Rpb24gbmFtZUxvb2t1cChwYXJlbnQsIG5hbWUgLyosICB0eXBlICovKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxOYW1lTG9va3VwKHBhcmVudCwgbmFtZSk7XG4gIH0sXG4gIGRlcHRoZWRMb29rdXA6IGZ1bmN0aW9uIGRlcHRoZWRMb29rdXAobmFtZSkge1xuICAgIHJldHVybiBbdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5sb29rdXAnKSwgJyhkZXB0aHMsIFwiJywgbmFtZSwgJ1wiKSddO1xuICB9LFxuXG4gIGNvbXBpbGVySW5mbzogZnVuY3Rpb24gY29tcGlsZXJJbmZvKCkge1xuICAgIHZhciByZXZpc2lvbiA9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgICB2ZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9OX0NIQU5HRVNbcmV2aXNpb25dO1xuICAgIHJldHVybiBbcmV2aXNpb24sIHZlcnNpb25zXTtcbiAgfSxcblxuICBhcHBlbmRUb0J1ZmZlcjogZnVuY3Rpb24gYXBwZW5kVG9CdWZmZXIoc291cmNlLCBsb2NhdGlvbiwgZXhwbGljaXQpIHtcbiAgICAvLyBGb3JjZSBhIHNvdXJjZSBhcyB0aGlzIHNpbXBsaWZpZXMgdGhlIG1lcmdlIGxvZ2ljLlxuICAgIGlmICghX3V0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgc291cmNlID0gW3NvdXJjZV07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLndyYXAoc291cmNlLCBsb2NhdGlvbik7XG5cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTtcbiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIG9wZXJhdGlvbiBvY2N1cnMgYXMgYSBjaGlsZCBvZiBhbm90aGVyXG4gICAgICAvLyBjb25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQgdGhlc2UgYnVmZmVyXG4gICAgICAvLyBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICAgIHJldHVybiBbJ2J1ZmZlciArPSAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgfSxcblxuICBpbml0aWFsaXplQnVmZmVyOiBmdW5jdGlvbiBpbml0aWFsaXplQnVmZmVyKCkge1xuICAgIHJldHVybiB0aGlzLnF1b3RlZFN0cmluZygnJyk7XG4gIH0sXG4gIC8vIEVORCBQVUJMSUMgQVBJXG4gIGludGVybmFsTmFtZUxvb2t1cDogZnVuY3Rpb24gaW50ZXJuYWxOYW1lTG9va3VwKHBhcmVudCwgbmFtZSkge1xuICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCA9IHRydWU7XG4gICAgcmV0dXJuIFsnbG9va3VwUHJvcGVydHkoJywgcGFyZW50LCAnLCcsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnKSddO1xuICB9LFxuXG4gIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQ6IGZhbHNlLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uIGNvbXBpbGUoZW52aXJvbm1lbnQsIG9wdGlvbnMsIGNvbnRleHQsIGFzT2JqZWN0KSB7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdHJpbmdQYXJhbXMgPSB0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSB0aGlzLm9wdGlvbnMudHJhY2tJZHM7XG4gICAgdGhpcy5wcmVjb21waWxlID0gIWFzT2JqZWN0O1xuXG4gICAgdGhpcy5uYW1lID0gdGhpcy5lbnZpcm9ubWVudC5uYW1lO1xuICAgIHRoaXMuaXNDaGlsZCA9ICEhY29udGV4dDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0IHx8IHtcbiAgICAgIGRlY29yYXRvcnM6IFtdLFxuICAgICAgcHJvZ3JhbXM6IFtdLFxuICAgICAgZW52aXJvbm1lbnRzOiBbXVxuICAgIH07XG5cbiAgICB0aGlzLnByZWFtYmxlKCk7XG5cbiAgICB0aGlzLnN0YWNrU2xvdCA9IDA7XG4gICAgdGhpcy5zdGFja1ZhcnMgPSBbXTtcbiAgICB0aGlzLmFsaWFzZXMgPSB7fTtcbiAgICB0aGlzLnJlZ2lzdGVycyA9IHsgbGlzdDogW10gfTtcbiAgICB0aGlzLmhhc2hlcyA9IFtdO1xuICAgIHRoaXMuY29tcGlsZVN0YWNrID0gW107XG4gICAgdGhpcy5pbmxpbmVTdGFjayA9IFtdO1xuICAgIHRoaXMuYmxvY2tQYXJhbXMgPSBbXTtcblxuICAgIHRoaXMuY29tcGlsZUNoaWxkcmVuKGVudmlyb25tZW50LCBvcHRpb25zKTtcblxuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8IGVudmlyb25tZW50LnVzZURlY29yYXRvcnMgfHwgdGhpcy5vcHRpb25zLmNvbXBhdDtcbiAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBlbnZpcm9ubWVudC51c2VCbG9ja1BhcmFtcztcblxuICAgIHZhciBvcGNvZGVzID0gZW52aXJvbm1lbnQub3Bjb2RlcyxcbiAgICAgICAgb3Bjb2RlID0gdW5kZWZpbmVkLFxuICAgICAgICBmaXJzdExvYyA9IHVuZGVmaW5lZCxcbiAgICAgICAgaSA9IHVuZGVmaW5lZCxcbiAgICAgICAgbCA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTtcblxuICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYztcbiAgICAgIGZpcnN0TG9jID0gZmlyc3RMb2MgfHwgb3Bjb2RlLmxvYztcbiAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBjb250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy5cbiAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYztcbiAgICB0aGlzLnB1c2hTb3VyY2UoJycpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3RhY2subGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnQ29tcGlsZSBjb21wbGV0ZWQgd2l0aCBjb250ZW50IGxlZnQgb24gc3RhY2snKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGVjb3JhdG9ycy5pc0VtcHR5KCkpIHtcbiAgICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7XG5cbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wcmVwZW5kKFsndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycywgJywgdGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb24oKSwgJztcXG4nXSk7XG4gICAgICB0aGlzLmRlY29yYXRvcnMucHVzaCgncmV0dXJuIGZuOycpO1xuXG4gICAgICBpZiAoYXNPYmplY3QpIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzID0gRnVuY3Rpb24uYXBwbHkodGhpcywgWydmbicsICdwcm9wcycsICdjb250YWluZXInLCAnZGVwdGgwJywgJ2RhdGEnLCAnYmxvY2tQYXJhbXMnLCAnZGVwdGhzJywgdGhpcy5kZWNvcmF0b3JzLm1lcmdlKCldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wcmVwZW5kKCdmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgZGVwdGgwLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCd9XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdmFyIGZuID0gdGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpO1xuICAgIGlmICghdGhpcy5pc0NoaWxkKSB7XG4gICAgICB2YXIgcmV0ID0ge1xuICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlckluZm8oKSxcbiAgICAgICAgbWFpbjogZm5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmRlY29yYXRvcnMpIHtcbiAgICAgICAgcmV0Lm1haW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2NvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICB2YXIgcHJvZ3JhbXMgPSBfY29udGV4dC5wcm9ncmFtcztcbiAgICAgIHZhciBkZWNvcmF0b3JzID0gX2NvbnRleHQuZGVjb3JhdG9ycztcblxuICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJvZ3JhbXNbaV0pIHtcbiAgICAgICAgICByZXRbaV0gPSBwcm9ncmFtc1tpXTtcbiAgICAgICAgICBpZiAoZGVjb3JhdG9yc1tpXSkge1xuICAgICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24gcHJlYW1ibGUoKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IF9jb2RlR2VuMlsnZGVmYXVsdCddKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgICB0aGlzLmRlY29yYXRvcnMgPSBuZXcgX2NvZGVHZW4yWydkZWZhdWx0J10odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICB9LFxuXG4gIGNyZWF0ZUZ1bmN0aW9uQ29udGV4dDogZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Db250ZXh0KGFzT2JqZWN0KSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgdmFyRGVjbGFyYXRpb25zID0gJyc7XG5cbiAgICB2YXIgbG9jYWxzID0gdGhpcy5zdGFja1ZhcnMuY29uY2F0KHRoaXMucmVnaXN0ZXJzLmxpc3QpO1xuICAgIGlmIChsb2NhbHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyBsb2NhbHMuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBtaW5pbWl6ZXIgYWxpYXMgbWFwcGluZ3NcbiAgICAvL1xuICAgIC8vIFdoZW4gdXNpbmcgdHJ1ZSBTb3VyY2VOb2RlcywgdGhpcyB3aWxsIHVwZGF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4gYWxpYXNcbiAgICAvLyBhcyB0aGUgc291cmNlIG5vZGVzIGFyZSByZXVzZWQgaW4gc2l0dS4gRm9yIHRoZSBub24tc291cmNlIG5vZGUgY29tcGlsYXRpb24gbW9kZSxcbiAgICAvLyBhbGlhc2VzIHdpbGwgbm90IGJlIHVzZWQsIGJ1dCB0aGlzIGNhc2UgaXMgYWxyZWFkeSBiZWluZyBydW4gb24gdGhlIGNsaWVudCBhbmRcbiAgICAvLyB3ZSBhcmVuJ3QgY29uY2VybiBhYm91dCBtaW5pbWl6aW5nIHRoZSB0ZW1wbGF0ZSBzaXplLlxuICAgIHZhciBhbGlhc0NvdW50ID0gMDtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmFsaWFzZXMpLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzKSB7XG4gICAgICB2YXIgbm9kZSA9IF90aGlzLmFsaWFzZXNbYWxpYXNdO1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5yZWZlcmVuY2VDb3VudCA+IDEpIHtcbiAgICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsIGFsaWFzJyArICsrYWxpYXNDb3VudCArICc9JyArIGFsaWFzO1xuICAgICAgICBub2RlLmNoaWxkcmVuWzBdID0gJ2FsaWFzJyArIGFsaWFzQ291bnQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uSXNVc2VkKSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz0gJywgJyArIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uKCk7XG4gICAgfVxuXG4gICAgdmFyIHBhcmFtcyA9IFsnY29udGFpbmVyJywgJ2RlcHRoMCcsICdoZWxwZXJzJywgJ3BhcnRpYWxzJywgJ2RhdGEnXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwYXJhbXMucHVzaCgnYmxvY2tQYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwYXJhbXMucHVzaCgnZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBhIHNlY29uZCBwYXNzIG92ZXIgdGhlIG91dHB1dCB0byBtZXJnZSBjb250ZW50IHdoZW4gcG9zc2libGVcbiAgICB2YXIgc291cmNlID0gdGhpcy5tZXJnZVNvdXJjZSh2YXJEZWNsYXJhdGlvbnMpO1xuXG4gICAgaWYgKGFzT2JqZWN0KSB7XG4gICAgICBwYXJhbXMucHVzaChzb3VyY2UpO1xuXG4gICAgICByZXR1cm4gRnVuY3Rpb24uYXBwbHkodGhpcywgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlLndyYXAoWydmdW5jdGlvbignLCBwYXJhbXMuam9pbignLCcpLCAnKSB7XFxuICAnLCBzb3VyY2UsICd9J10pO1xuICAgIH1cbiAgfSxcbiAgbWVyZ2VTb3VyY2U6IGZ1bmN0aW9uIG1lcmdlU291cmNlKHZhckRlY2xhcmF0aW9ucykge1xuICAgIHZhciBpc1NpbXBsZSA9IHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUsXG4gICAgICAgIGFwcGVuZE9ubHkgPSAhdGhpcy5mb3JjZUJ1ZmZlcixcbiAgICAgICAgYXBwZW5kRmlyc3QgPSB1bmRlZmluZWQsXG4gICAgICAgIHNvdXJjZVNlZW4gPSB1bmRlZmluZWQsXG4gICAgICAgIGJ1ZmZlclN0YXJ0ID0gdW5kZWZpbmVkLFxuICAgICAgICBidWZmZXJFbmQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChmdW5jdGlvbiAobGluZSkge1xuICAgICAgaWYgKGxpbmUuYXBwZW5kVG9CdWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgbGluZS5wcmVwZW5kKCcgICsgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlckVuZCA9IGxpbmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgICBpZiAoIXNvdXJjZVNlZW4pIHtcbiAgICAgICAgICAgIGFwcGVuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgnYnVmZmVyICs9ICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBidWZmZXJFbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VTZWVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc1NpbXBsZSkge1xuICAgICAgICAgIGFwcGVuZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGFwcGVuZE9ubHkpIHtcbiAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICBidWZmZXJTdGFydC5wcmVwZW5kKCdyZXR1cm4gJyk7XG4gICAgICAgIGJ1ZmZlckVuZC5hZGQoJzsnKTtcbiAgICAgIH0gZWxzZSBpZiAoIXNvdXJjZVNlZW4pIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgncmV0dXJuIFwiXCI7Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBidWZmZXIgPSAnICsgKGFwcGVuZEZpcnN0ID8gJycgOiB0aGlzLmluaXRpYWxpemVCdWZmZXIoKSk7XG5cbiAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICBidWZmZXJTdGFydC5wcmVwZW5kKCdyZXR1cm4gYnVmZmVyICsgJyk7XG4gICAgICAgIGJ1ZmZlckVuZC5hZGQoJzsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBidWZmZXI7Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhckRlY2xhcmF0aW9ucykge1xuICAgICAgdGhpcy5zb3VyY2UucHJlcGVuZCgndmFyICcgKyB2YXJEZWNsYXJhdGlvbnMuc3Vic3RyaW5nKDIpICsgKGFwcGVuZEZpcnN0ID8gJycgOiAnO1xcbicpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zb3VyY2UubWVyZ2UoKTtcbiAgfSxcblxuICBsb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb246IGZ1bmN0aW9uIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpIHtcbiAgICByZXR1cm4gJ1xcbiAgICAgIGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5IHx8IGZ1bmN0aW9uKHBhcmVudCwgcHJvcGVydHlOYW1lKSB7XFxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXFxuICAgIH1cXG4gICAgJy50cmltKCk7XG4gIH0sXG5cbiAgLy8gW2Jsb2NrVmFsdWVdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHZhbHVlXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmV0dXJuIHZhbHVlIG9mIGJsb2NrSGVscGVyTWlzc2luZ1xuICAvL1xuICAvLyBUaGUgcHVycG9zZSBvZiB0aGlzIG9wY29kZSBpcyB0byB0YWtlIGEgYmxvY2sgb2YgdGhlIGZvcm1cbiAgLy8gYHt7I3RoaXMuZm9vfX0uLi57ey90aGlzLmZvb319YCwgcmVzb2x2ZSB0aGUgdmFsdWUgb2YgYGZvb2AsIGFuZFxuICAvLyByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayB3aXRoIHRoZSByZXN1bHQgb2YgcHJvcGVybHlcbiAgLy8gaW52b2tpbmcgYmxvY2tIZWxwZXJNaXNzaW5nLlxuICBibG9ja1ZhbHVlOiBmdW5jdGlvbiBibG9ja1ZhbHVlKG5hbWUpIHtcbiAgICB2YXIgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnKSxcbiAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIDAsIHBhcmFtcyk7XG5cbiAgICB2YXIgYmxvY2tOYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgYmxvY2tOYW1lKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcykpO1xuICB9LFxuXG4gIC8vIFthbWJpZ3VvdXNCbG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBDb21waWxlciB2YWx1ZSwgYmVmb3JlOiBsYXN0SGVscGVyPXZhbHVlIG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnlcbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBubyBsYXN0SGVscGVyOiBzYW1lIGFzIFtibG9ja1ZhbHVlXVxuICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlmIGxhc3RIZWxwZXI6IHZhbHVlXG4gIGFtYmlndW91c0Jsb2NrVmFsdWU6IGZ1bmN0aW9uIGFtYmlndW91c0Jsb2NrVmFsdWUoKSB7XG4gICAgLy8gV2UncmUgYmVpbmcgYSBiaXQgY2hlZWt5IGFuZCByZXVzaW5nIHRoZSBvcHRpb25zIHZhbHVlIGZyb20gdGhlIHByaW9yIGV4ZWNcbiAgICB2YXIgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnKSxcbiAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbJ2lmICghJywgdGhpcy5sYXN0SGVscGVyLCAnKSB7ICcsIGN1cnJlbnQsICcgPSAnLCB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcyksICd9J10pO1xuICB9LFxuXG4gIC8vIFthcHBlbmRDb250ZW50XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi5cbiAgLy9cbiAgLy8gQXBwZW5kcyB0aGUgc3RyaW5nIHZhbHVlIG9mIGBjb250ZW50YCB0byB0aGUgY3VycmVudCBidWZmZXJcbiAgYXBwZW5kQ29udGVudDogZnVuY3Rpb24gYXBwZW5kQ29udGVudChjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuaXNJbmxpbmUoKSkge1xuICAgICAgdGhpcy5yZXBsYWNlU3RhY2soZnVuY3Rpb24gKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucHVzaFNvdXJjZSh0aGlzLmFwcGVuZFRvQnVmZmVyKHRoaXMucG9wU3RhY2soKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbG9jYWwgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICB0aGlzLnB1c2hTb3VyY2UoWydpZiAoJywgbG9jYWwsICcgIT0gbnVsbCkgeyAnLCB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLCAnIH0nXSk7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgICB0aGlzLnB1c2hTb3VyY2UoWydlbHNlIHsgJywgdGhpcy5hcHBlbmRUb0J1ZmZlcihcIicnXCIsIHVuZGVmaW5lZCwgdHJ1ZSksICcgfSddKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLy8gW2FwcGVuZEVzY2FwZWRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi5cbiAgLy9cbiAgLy8gRXNjYXBlIGB2YWx1ZWAgYW5kIGFwcGVuZCBpdCB0byB0aGUgYnVmZmVyXG4gIGFwcGVuZEVzY2FwZWQ6IGZ1bmN0aW9uIGFwcGVuZEVzY2FwZWQoKSB7XG4gICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIoW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbicpLCAnKCcsIHRoaXMucG9wU3RhY2soKSwgJyknXSkpO1xuICB9LFxuXG4gIC8vIFtnZXRDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi5cbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGFmdGVyOiBsYXN0Q29udGV4dD1kZXB0aFxuICAvL1xuICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBgbGFzdENvbnRleHRgIGNvbXBpbGVyIHZhbHVlIHRvIHRoZSBkZXB0aFxuICBnZXRDb250ZXh0OiBmdW5jdGlvbiBnZXRDb250ZXh0KGRlcHRoKSB7XG4gICAgdGhpcy5sYXN0Q29udGV4dCA9IGRlcHRoO1xuICB9LFxuXG4gIC8vIFtwdXNoQ29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogY3VycmVudENvbnRleHQsIC4uLlxuICAvL1xuICAvLyBQdXNoZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGNvbnRleHQgb250byB0aGUgc3RhY2suXG4gIHB1c2hDb250ZXh0OiBmdW5jdGlvbiBwdXNoQ29udGV4dCgpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5jb250ZXh0TmFtZSh0aGlzLmxhc3RDb250ZXh0KSk7XG4gIH0sXG5cbiAgLy8gW2xvb2t1cE9uQ29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogY3VycmVudENvbnRleHRbbmFtZV0sIC4uLlxuICAvL1xuICAvLyBMb29rcyB1cCB0aGUgdmFsdWUgb2YgYG5hbWVgIG9uIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHB1c2hlc1xuICAvLyBpdCBvbnRvIHRoZSBzdGFjay5cbiAgbG9va3VwT25Db250ZXh0OiBmdW5jdGlvbiBsb29rdXBPbkNvbnRleHQocGFydHMsIGZhbHN5LCBzdHJpY3QsIHNjb3BlZCkge1xuICAgIHZhciBpID0gMDtcblxuICAgIGlmICghc2NvcGVkICYmIHRoaXMub3B0aW9ucy5jb21wYXQgJiYgIXRoaXMubGFzdENvbnRleHQpIHtcbiAgICAgIC8vIFRoZSBkZXB0aGVkIHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGUgdW5kZWZpbmVkIGxvZ2ljIGZvciB0aGUgcm9vdCBsZXZlbCB0aGF0XG4gICAgICAvLyBpcyBpbXBsZW1lbnRlZCBiZWxvdywgc28gd2UgZXZhbHVhdGUgdGhhdCBkaXJlY3RseSBpbiBjb21wYXQgbW9kZVxuICAgICAgdGhpcy5wdXNoKHRoaXMuZGVwdGhlZExvb2t1cChwYXJ0c1tpKytdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaENvbnRleHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBCbG9ja1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBibG9ja1BhcmFtW25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBwYXJ0c2Agb24gdGhlIGdpdmVuIGJsb2NrIHBhcmFtIGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cEJsb2NrUGFyYW06IGZ1bmN0aW9uIGxvb2t1cEJsb2NrUGFyYW0oYmxvY2tQYXJhbUlkLCBwYXJ0cykge1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0cnVlO1xuXG4gICAgdGhpcy5wdXNoKFsnYmxvY2tQYXJhbXNbJywgYmxvY2tQYXJhbUlkWzBdLCAnXVsnLCBibG9ja1BhcmFtSWRbMV0sICddJ10pO1xuICAgIHRoaXMucmVzb2x2ZVBhdGgoJ2NvbnRleHQnLCBwYXJ0cywgMSk7XG4gIH0sXG5cbiAgLy8gW2xvb2t1cERhdGFdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGRhdGEsIC4uLlxuICAvL1xuICAvLyBQdXNoIHRoZSBkYXRhIGxvb2t1cCBvcGVyYXRvclxuICBsb29rdXBEYXRhOiBmdW5jdGlvbiBsb29rdXBEYXRhKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uIHJlc29sdmVQYXRoKHR5cGUsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpIHtcbiAgICAgIHRoaXMucHVzaChzdHJpY3RMb29rdXAodGhpcy5vcHRpb25zLnN0cmljdCAmJiBzdHJpY3QsIHRoaXMsIHBhcnRzLCB0eXBlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGZ1bmN0aW9uIChjdXJyZW50KSB7XG4gICAgICAgIHZhciBsb29rdXAgPSBfdGhpczIubmFtZUxvb2t1cChjdXJyZW50LCBwYXJ0c1tpXSwgdHlwZSk7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgemVybyBhbmQgZmFsc2UgYXJlIGhhbmRsZWQgcHJvcGVybHkgaWYgdGhlIGNvbnRleHQgKGZhbHN5IGZsYWcpXG4gICAgICAgIC8vIG5lZWRzIHRvIGhhdmUgdGhlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZXNlIHZhbHVlcy5cbiAgICAgICAgaWYgKCFmYWxzeSkge1xuICAgICAgICAgIHJldHVybiBbJyAhPSBudWxsID8gJywgbG9va3VwLCAnIDogJywgY3VycmVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgZ2VuZXJpYyBmYWxzeSBoYW5kbGluZ1xuICAgICAgICAgIHJldHVybiBbJyAmJiAnLCBsb29rdXBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG4gICAgfVxuICB9LFxuXG4gIC8vIFtyZXNvbHZlUG9zc2libGVMYW1iZGFdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXNvbHZlZCB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIElmIHRoZSBgdmFsdWVgIGlzIGEgbGFtYmRhLCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBieVxuICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYW1iZGFcbiAgcmVzb2x2ZVBvc3NpYmxlTGFtYmRhOiBmdW5jdGlvbiByZXNvbHZlUG9zc2libGVMYW1iZGEoKSB7XG4gICAgdGhpcy5wdXNoKFt0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLCAnKCcsIHRoaXMucG9wU3RhY2soKSwgJywgJywgdGhpcy5jb250ZXh0TmFtZSgwKSwgJyknXSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hTdHJpbmdQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogc3RyaW5nLCBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFRoaXMgb3Bjb2RlIGlzIGRlc2lnbmVkIGZvciB1c2UgaW4gc3RyaW5nIG1vZGUsIHdoaWNoXG4gIC8vIHByb3ZpZGVzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYSBwYXJhbWV0ZXIgYWxvbmcgd2l0aCBpdHNcbiAgLy8gZGVwdGggcmF0aGVyIHRoYW4gcmVzb2x2aW5nIGl0IGltbWVkaWF0ZWx5LlxuICBwdXNoU3RyaW5nUGFyYW06IGZ1bmN0aW9uIHB1c2hTdHJpbmdQYXJhbShzdHJpbmcsIHR5cGUpIHtcbiAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgdGhpcy5wdXNoU3RyaW5nKHR5cGUpO1xuXG4gICAgLy8gSWYgaXQncyBhIHN1YmV4cHJlc3Npb24sIHRoZSBzdHJpbmcgcmVzdWx0XG4gICAgLy8gd2lsbCBiZSBwdXNoZWQgYWZ0ZXIgdGhpcyBvcGNvZGUuXG4gICAgaWYgKHR5cGUgIT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBzdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMucHVzaFN0cmluZyhzdHJpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHN0cmluZyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGVtcHR5SGFzaDogZnVuY3Rpb24gZW1wdHlIYXNoKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbiBwdXNoSGFzaCgpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24gcG9wSGFzaCgpIHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICB0aGlzLmhhc2ggPSB0aGlzLmhhc2hlcy5wb3AoKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhhc2guaWRzKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmNvbnRleHRzKSk7XG4gICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhhc2gudHlwZXMpKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhhc2gudmFsdWVzKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hTdHJpbmddXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHF1b3RlZFN0cmluZyhzdHJpbmcpLCAuLi5cbiAgLy9cbiAgLy8gUHVzaCBhIHF1b3RlZCB2ZXJzaW9uIG9mIGBzdHJpbmdgIG9udG8gdGhlIHN0YWNrXG4gIHB1c2hTdHJpbmc6IGZ1bmN0aW9uIHB1c2hTdHJpbmcoc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpO1xuICB9LFxuXG4gIC8vIFtwdXNoTGl0ZXJhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogdmFsdWUsIC4uLlxuICAvL1xuICAvLyBQdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjay4gVGhpcyBvcGVyYXRpb24gcHJldmVudHNcbiAgLy8gdGhlIGNvbXBpbGVyIGZyb20gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gaG9sZFxuICAvLyBpdC5cbiAgcHVzaExpdGVyYWw6IGZ1bmN0aW9uIHB1c2hMaXRlcmFsKHZhbHVlKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHZhbHVlKTtcbiAgfSxcblxuICAvLyBbcHVzaFByb2dyYW1dXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHByb2dyYW0oZ3VpZCksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8gdGhlIHN0YWNrLiBUaGlzIHRha2VzXG4gIC8vIGEgY29tcGlsZS10aW1lIGd1aWQgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1lLWFjY2Vzc2libGVcbiAgLy8gZXhwcmVzc2lvbi5cbiAgcHVzaFByb2dyYW06IGZ1bmN0aW9uIHB1c2hQcm9ncmFtKGd1aWQpIHtcbiAgICBpZiAoZ3VpZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5wcm9ncmFtRXhwcmVzc2lvbihndWlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gW3JlZ2lzdGVyRGVjb3JhdG9yXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgZGVjb3JhdG9yJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgZGVjb3JhdG9yLFxuICAvLyBhbmQgaW5zZXJ0cyB0aGUgZGVjb3JhdG9yIGludG8gdGhlIGRlY29yYXRvcnMgbGlzdC5cbiAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uIHJlZ2lzdGVyRGVjb3JhdG9yKHBhcmFtU2l6ZSwgbmFtZSkge1xuICAgIHZhciBmb3VuZERlY29yYXRvciA9IHRoaXMubmFtZUxvb2t1cCgnZGVjb3JhdG9ycycsIG5hbWUsICdkZWNvcmF0b3InKSxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIHBhcmFtU2l6ZSk7XG5cbiAgICB0aGlzLmRlY29yYXRvcnMucHVzaChbJ2ZuID0gJywgdGhpcy5kZWNvcmF0b3JzLmZ1bmN0aW9uQ2FsbChmb3VuZERlY29yYXRvciwgJycsIFsnZm4nLCAncHJvcHMnLCAnY29udGFpbmVyJywgb3B0aW9uc10pLCAnIHx8IGZuOyddKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uIGludm9rZUhlbHBlcihwYXJhbVNpemUsIG5hbWUsIGlzU2ltcGxlKSB7XG4gICAgdmFyIG5vbkhlbHBlciA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgICAgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuXG4gICAgdmFyIHBvc3NpYmxlRnVuY3Rpb25DYWxscyA9IFtdO1xuXG4gICAgaWYgKGlzU2ltcGxlKSB7XG4gICAgICAvLyBkaXJlY3QgY2FsbCB0byBoZWxwZXJcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKGhlbHBlci5uYW1lKTtcbiAgICB9XG4gICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKG5vbkhlbHBlcik7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMucHVzaCh0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKSk7XG4gICAgfVxuXG4gICAgdmFyIGZ1bmN0aW9uTG9va3VwQ29kZSA9IFsnKCcsIHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMsICd8fCcpLCAnKSddO1xuICAgIHZhciBmdW5jdGlvbkNhbGwgPSB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoZnVuY3Rpb25Mb29rdXBDb2RlLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKTtcbiAgICB0aGlzLnB1c2goZnVuY3Rpb25DYWxsKTtcbiAgfSxcblxuICBpdGVtc1NlcGFyYXRlZEJ5OiBmdW5jdGlvbiBpdGVtc1NlcGFyYXRlZEJ5KGl0ZW1zLCBzZXBhcmF0b3IpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbMF0pO1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNlcGFyYXRvciwgaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBbaW52b2tlS25vd25IZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LFxuICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVxdWlyZWQuXG4gIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbiBpbnZva2VLbm93bkhlbHBlcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICB2YXIgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoaGVscGVyLm5hbWUsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbaW52b2tlQW1iaWd1b3VzXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YFxuICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXRcbiAgLy8gaXMgYSBoZWxwZXIgb3IgYSBwYXRoLlxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucyxcbiAgLy8gYW5kIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZFxuICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLlxuICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uIGludm9rZUFtYmlndW91cyhuYW1lLCBoZWxwZXJDYWxsKSB7XG4gICAgdGhpcy51c2VSZWdpc3RlcignaGVscGVyJyk7XG5cbiAgICB2YXIgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpO1xuXG4gICAgdGhpcy5lbXB0eUhhc2goKTtcbiAgICB2YXIgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcigwLCBuYW1lLCBoZWxwZXJDYWxsKTtcblxuICAgIHZhciBoZWxwZXJOYW1lID0gdGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwgJ2hlbHBlcicpO1xuXG4gICAgdmFyIGxvb2t1cCA9IFsnKCcsICcoaGVscGVyID0gJywgaGVscGVyTmFtZSwgJyB8fCAnLCBub25IZWxwZXIsICcpJ107XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBsb29rdXBbMF0gPSAnKGhlbHBlciA9ICc7XG4gICAgICBsb29rdXAucHVzaCgnICE9IG51bGwgPyBoZWxwZXIgOiAnLCB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKFsnKCcsIGxvb2t1cCwgaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLCAnKSwnLCAnKHR5cGVvZiBoZWxwZXIgPT09ICcsIHRoaXMuYWxpYXNhYmxlKCdcImZ1bmN0aW9uXCInKSwgJyA/ICcsIHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbCgnaGVscGVyJywgJ2NhbGwnLCBoZWxwZXIuY2FsbFBhcmFtcyksICcgOiBoZWxwZXIpKSddKTtcbiAgfSxcblxuICAvLyBbaW52b2tlUGFydGlhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogY29udGV4dCwgLi4uXG4gIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMgb2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLlxuICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKGlzRHluYW1pYywgbmFtZSwgaW5kZW50KSB7XG4gICAgdmFyIHBhcmFtcyA9IFtdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhuYW1lLCAxLCBwYXJhbXMpO1xuXG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgbmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGluZGVudCkge1xuICAgICAgb3B0aW9ucy5pbmRlbnQgPSBKU09OLnN0cmluZ2lmeShpbmRlbnQpO1xuICAgIH1cbiAgICBvcHRpb25zLmhlbHBlcnMgPSAnaGVscGVycyc7XG4gICAgb3B0aW9ucy5wYXJ0aWFscyA9ICdwYXJ0aWFscyc7XG4gICAgb3B0aW9ucy5kZWNvcmF0b3JzID0gJ2NvbnRhaW5lci5kZWNvcmF0b3JzJztcblxuICAgIGlmICghaXNEeW5hbWljKSB7XG4gICAgICBwYXJhbXMudW5zaGlmdCh0aGlzLm5hbWVMb29rdXAoJ3BhcnRpYWxzJywgbmFtZSwgJ3BhcnRpYWwnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0KSB7XG4gICAgICBvcHRpb25zLmRlcHRocyA9ICdkZXB0aHMnO1xuICAgIH1cbiAgICBvcHRpb25zID0gdGhpcy5vYmplY3RMaXRlcmFsKG9wdGlvbnMpO1xuICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5wdXNoKHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbCgnY29udGFpbmVyLmludm9rZVBhcnRpYWwnLCAnJywgcGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2Fzc2lnblRvSGFzaF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLiwgaGFzaCwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uLCBoYXNoLCAuLi5cbiAgLy9cbiAgLy8gUG9wcyBhIHZhbHVlIG9mZiB0aGUgc3RhY2sgYW5kIGFzc2lnbnMgaXQgdG8gdGhlIGN1cnJlbnQgaGFzaFxuICBhc3NpZ25Ub0hhc2g6IGZ1bmN0aW9uIGFzc2lnblRvSGFzaChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnBvcFN0YWNrKCksXG4gICAgICAgIGNvbnRleHQgPSB1bmRlZmluZWQsXG4gICAgICAgIHR5cGUgPSB1bmRlZmluZWQsXG4gICAgICAgIGlkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgIGlkID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBjb250ZXh0ID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cblxuICAgIHZhciBoYXNoID0gdGhpcy5oYXNoO1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBoYXNoLmNvbnRleHRzW2tleV0gPSBjb250ZXh0O1xuICAgIH1cbiAgICBpZiAodHlwZSkge1xuICAgICAgaGFzaC50eXBlc1trZXldID0gdHlwZTtcbiAgICB9XG4gICAgaWYgKGlkKSB7XG4gICAgICBoYXNoLmlkc1trZXldID0gaWQ7XG4gICAgfVxuICAgIGhhc2gudmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgfSxcblxuICBwdXNoSWQ6IGZ1bmN0aW9uIHB1c2hJZCh0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnYmxvY2tQYXJhbXNbJyArIG5hbWVbMF0gKyAnXS5wYXRoWycgKyBuYW1lWzFdICsgJ10nICsgKGNoaWxkID8gJyArICcgKyBKU09OLnN0cmluZ2lmeSgnLicgKyBjaGlsZCkgOiAnJykpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1BhdGhFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RyaW5nKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ3RydWUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdudWxsJyk7XG4gICAgfVxuICB9LFxuXG4gIC8vIEhFTFBFUlNcblxuICBjb21waWxlcjogSmF2YVNjcmlwdENvbXBpbGVyLFxuXG4gIGNvbXBpbGVDaGlsZHJlbjogZnVuY3Rpb24gY29tcGlsZUNoaWxkcmVuKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sXG4gICAgICAgIGNoaWxkID0gdW5kZWZpbmVkLFxuICAgICAgICBjb21waWxlciA9IHVuZGVmaW5lZDtcblxuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgY29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblxuICAgICAgdmFyIGV4aXN0aW5nID0gdGhpcy5tYXRjaEV4aXN0aW5nUHJvZ3JhbShjaGlsZCk7XG5cbiAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5wcm9ncmFtcy5wdXNoKCcnKTsgLy8gUGxhY2Vob2xkZXIgdG8gcHJldmVudCBuYW1lIGNvbmZsaWN0cyBmb3IgbmVzdGVkIGNoaWxkcmVuXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuY29udGV4dC5wcm9ncmFtcy5sZW5ndGg7XG4gICAgICAgIGNoaWxkLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGNoaWxkLm5hbWUgPSAncHJvZ3JhbScgKyBpbmRleDtcbiAgICAgICAgdGhpcy5jb250ZXh0LnByb2dyYW1zW2luZGV4XSA9IGNvbXBpbGVyLmNvbXBpbGUoY2hpbGQsIG9wdGlvbnMsIHRoaXMuY29udGV4dCwgIXRoaXMucHJlY29tcGlsZSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbiBtYXRjaEV4aXN0aW5nUHJvZ3JhbShjaGlsZCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24gcHJvZ3JhbUV4cHJlc3Npb24oZ3VpZCkge1xuICAgIHZhciBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICAgIHByb2dyYW1QYXJhbXMgPSBbY2hpbGQuaW5kZXgsICdkYXRhJywgY2hpbGQuYmxvY2tQYXJhbXNdO1xuXG4gICAgaWYgKHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgdGhpcy51c2VEZXB0aHMpIHtcbiAgICAgIHByb2dyYW1QYXJhbXMucHVzaCgnYmxvY2tQYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiAnY29udGFpbmVyLnByb2dyYW0oJyArIHByb2dyYW1QYXJhbXMuam9pbignLCAnKSArICcpJztcbiAgfSxcblxuICB1c2VSZWdpc3RlcjogZnVuY3Rpb24gdXNlUmVnaXN0ZXIobmFtZSkge1xuICAgIGlmICghdGhpcy5yZWdpc3RlcnNbbmFtZV0pIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVnaXN0ZXJzLmxpc3QucHVzaChuYW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgcHVzaDogZnVuY3Rpb24gcHVzaChleHByKSB7XG4gICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICBleHByID0gdGhpcy5zb3VyY2Uud3JhcChleHByKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0YWNrLnB1c2goZXhwcik7XG4gICAgcmV0dXJuIGV4cHI7XG4gIH0sXG5cbiAgcHVzaFN0YWNrTGl0ZXJhbDogZnVuY3Rpb24gcHVzaFN0YWNrTGl0ZXJhbChpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbiBwdXNoU291cmNlKHNvdXJjZSkge1xuICAgIGlmICh0aGlzLnBlbmRpbmdDb250ZW50KSB7XG4gICAgICB0aGlzLnNvdXJjZS5wdXNoKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5zb3VyY2UucXVvdGVkU3RyaW5nKHRoaXMucGVuZGluZ0NvbnRlbnQpLCB0aGlzLnBlbmRpbmdMb2NhdGlvbikpO1xuICAgICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoc291cmNlKSB7XG4gICAgICB0aGlzLnNvdXJjZS5wdXNoKHNvdXJjZSk7XG4gICAgfVxuICB9LFxuXG4gIHJlcGxhY2VTdGFjazogZnVuY3Rpb24gcmVwbGFjZVN0YWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHByZWZpeCA9IFsnKCddLFxuICAgICAgICBzdGFjayA9IHVuZGVmaW5lZCxcbiAgICAgICAgY3JlYXRlZFN0YWNrID0gdW5kZWZpbmVkLFxuICAgICAgICB1c2VkTGl0ZXJhbCA9IHVuZGVmaW5lZDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdyZXBsYWNlU3RhY2sgb24gbm9uLWlubGluZScpO1xuICAgIH1cblxuICAgIC8vIFdlIHdhbnQgdG8gbWVyZ2UgdGhlIGlubGluZSBzdGF0ZW1lbnQgaW50byB0aGUgcmVwbGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCdcbiAgICB2YXIgdG9wID0gdGhpcy5wb3BTdGFjayh0cnVlKTtcblxuICAgIGlmICh0b3AgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAvLyBMaXRlcmFscyBkbyBub3QgbmVlZCB0byBiZSBpbmxpbmVkXG4gICAgICBzdGFjayA9IFt0b3AudmFsdWVdO1xuICAgICAgcHJlZml4ID0gWycoJywgc3RhY2tdO1xuICAgICAgdXNlZExpdGVyYWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBjdXJyZW50IHN0YWNrIG5hbWUgZm9yIHVzZSBieSB0aGUgaW5saW5lXG4gICAgICBjcmVhdGVkU3RhY2sgPSB0cnVlO1xuICAgICAgdmFyIF9uYW1lID0gdGhpcy5pbmNyU3RhY2soKTtcblxuICAgICAgcHJlZml4ID0gWycoKCcsIHRoaXMucHVzaChfbmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICB2YXIgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uIGluY3JTdGFjaygpIHtcbiAgICB0aGlzLnN0YWNrU2xvdCsrO1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zdGFja1ZhcnMucHVzaCgnc3RhY2snICsgdGhpcy5zdGFja1Nsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b3BTdGFja05hbWUoKTtcbiAgfSxcbiAgdG9wU3RhY2tOYW1lOiBmdW5jdGlvbiB0b3BTdGFja05hbWUoKSB7XG4gICAgcmV0dXJuICdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdDtcbiAgfSxcbiAgZmx1c2hJbmxpbmU6IGZ1bmN0aW9uIGZsdXNoSW5saW5lKCkge1xuICAgIHZhciBpbmxpbmVTdGFjayA9IHRoaXMuaW5saW5lU3RhY2s7XG4gICAgdGhpcy5pbmxpbmVTdGFjayA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBpbmxpbmVTdGFjay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGVudHJ5ID0gaW5saW5lU3RhY2tbaV07XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChlbnRyeSBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmluY3JTdGFjaygpO1xuICAgICAgICB0aGlzLnB1c2hTb3VyY2UoW3N0YWNrLCAnID0gJywgZW50cnksICc7J10pO1xuICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKHN0YWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGlzSW5saW5lOiBmdW5jdGlvbiBpc0lubGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVTdGFjay5sZW5ndGg7XG4gIH0sXG5cbiAgcG9wU3RhY2s6IGZ1bmN0aW9uIHBvcFN0YWNrKHdyYXBwZWQpIHtcbiAgICB2YXIgaW5saW5lID0gdGhpcy5pc0lubGluZSgpLFxuICAgICAgICBpdGVtID0gKGlubGluZSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjaykucG9wKCk7XG5cbiAgICBpZiAoIXdyYXBwZWQgJiYgaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWlubGluZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICBpZiAoIXRoaXMuc3RhY2tTbG90KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0ludmFsaWQgc3RhY2sgcG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICB0b3BTdGFjazogZnVuY3Rpb24gdG9wU3RhY2soKSB7XG4gICAgdmFyIHN0YWNrID0gdGhpcy5pc0lubGluZSgpID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrLFxuICAgICAgICBpdGVtID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgY29udGV4dE5hbWU6IGZ1bmN0aW9uIGNvbnRleHROYW1lKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy51c2VEZXB0aHMgJiYgY29udGV4dCkge1xuICAgICAgcmV0dXJuICdkZXB0aHNbJyArIGNvbnRleHQgKyAnXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnZGVwdGgnICsgY29udGV4dDtcbiAgICB9XG4gIH0sXG5cbiAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbiBxdW90ZWRTdHJpbmcoc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnF1b3RlZFN0cmluZyhzdHIpO1xuICB9LFxuXG4gIG9iamVjdExpdGVyYWw6IGZ1bmN0aW9uIG9iamVjdExpdGVyYWwob2JqKSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm9iamVjdExpdGVyYWwob2JqKTtcbiAgfSxcblxuICBhbGlhc2FibGU6IGZ1bmN0aW9uIGFsaWFzYWJsZShuYW1lKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXTtcbiAgICBpZiAocmV0KSB7XG4gICAgICByZXQucmVmZXJlbmNlQ291bnQrKztcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgcmV0ID0gdGhpcy5hbGlhc2VzW25hbWVdID0gdGhpcy5zb3VyY2Uud3JhcChuYW1lKTtcbiAgICByZXQuYWxpYXNhYmxlID0gdHJ1ZTtcbiAgICByZXQucmVmZXJlbmNlQ291bnQgPSAxO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBzZXR1cEhlbHBlcjogZnVuY3Rpb24gc2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lLCBibG9ja0hlbHBlcikge1xuICAgIHZhciBwYXJhbXMgPSBbXSxcbiAgICAgICAgcGFyYW1zSW5pdCA9IHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIHBhcmFtU2l6ZSwgcGFyYW1zLCBibG9ja0hlbHBlcik7XG4gICAgdmFyIGZvdW5kSGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwgJ2hlbHBlcicpLFxuICAgICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKHRoaXMuY29udGV4dE5hbWUoMCkgKyAnICE9IG51bGwgPyAnICsgdGhpcy5jb250ZXh0TmFtZSgwKSArICcgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgcGFyYW1zSW5pdDogcGFyYW1zSW5pdCxcbiAgICAgIG5hbWU6IGZvdW5kSGVscGVyLFxuICAgICAgY2FsbFBhcmFtczogW2NhbGxDb250ZXh0XS5jb25jYXQocGFyYW1zKVxuICAgIH07XG4gIH0sXG5cbiAgc2V0dXBQYXJhbXM6IGZ1bmN0aW9uIHNldHVwUGFyYW1zKGhlbHBlciwgcGFyYW1TaXplLCBwYXJhbXMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9LFxuICAgICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgICB0eXBlcyA9IFtdLFxuICAgICAgICBpZHMgPSBbXSxcbiAgICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICAgIHBhcmFtID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKG9iamVjdEFyZ3MpIHtcbiAgICAgIHBhcmFtcyA9IFtdO1xuICAgIH1cblxuICAgIG9wdGlvbnMubmFtZSA9IHRoaXMucXVvdGVkU3RyaW5nKGhlbHBlcik7XG4gICAgb3B0aW9ucy5oYXNoID0gdGhpcy5wb3BTdGFjaygpO1xuXG4gICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgIG9wdGlvbnMuaGFzaElkcyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmhhc2hUeXBlcyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIG9wdGlvbnMuaGFzaENvbnRleHRzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cblxuICAgIHZhciBpbnZlcnNlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBwcm9ncmFtID0gdGhpcy5wb3BTdGFjaygpO1xuXG4gICAgLy8gQXZvaWQgc2V0dGluZyBmbiBhbmQgaW52ZXJzZSBpZiBuZWl0aGVyIGFyZSBzZXQuIFRoaXMgYWxsb3dzXG4gICAgLy8gaGVscGVycyB0byBkbyBhIGNoZWNrIGZvciBgaWYgKG9wdGlvbnMuZm4pYFxuICAgIGlmIChwcm9ncmFtIHx8IGludmVyc2UpIHtcbiAgICAgIG9wdGlvbnMuZm4gPSBwcm9ncmFtIHx8ICdjb250YWluZXIubm9vcCc7XG4gICAgICBvcHRpb25zLmludmVyc2UgPSBpbnZlcnNlIHx8ICdjb250YWluZXIubm9vcCc7XG4gICAgfVxuXG4gICAgLy8gVGhlIHBhcmFtZXRlcnMgZ28gb24gdG8gdGhlIHN0YWNrIGluIG9yZGVyIChtYWtpbmcgc3VyZSB0aGF0IHRoZXkgYXJlIGV2YWx1YXRlZCBpbiBvcmRlcilcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIHBvcCB0aGVtIG9mZiB0aGUgc3RhY2sgaW4gcmV2ZXJzZSBvcmRlclxuICAgIHZhciBpID0gcGFyYW1TaXplO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHBhcmFtID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgcGFyYW1zW2ldID0gcGFyYW07XG5cbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGlkc1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgICB0eXBlc1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgICAgY29udGV4dHNbaV0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9iamVjdEFyZ3MpIHtcbiAgICAgIG9wdGlvbnMuYXJncyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkocGFyYW1zKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgb3B0aW9ucy5pZHMgPSB0aGlzLnNvdXJjZS5nZW5lcmF0ZUFycmF5KGlkcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy50eXBlcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkodHlwZXMpO1xuICAgICAgb3B0aW9ucy5jb250ZXh0cyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoY29udGV4dHMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuZGF0YSkge1xuICAgICAgb3B0aW9ucy5kYXRhID0gJ2RhdGEnO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9ICdibG9ja1BhcmFtcyc7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xuICB9LFxuXG4gIHNldHVwSGVscGVyQXJnczogZnVuY3Rpb24gc2V0dXBIZWxwZXJBcmdzKGhlbHBlciwgcGFyYW1TaXplLCBwYXJhbXMsIHVzZVJlZ2lzdGVyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKGhlbHBlciwgcGFyYW1TaXplLCBwYXJhbXMpO1xuICAgIG9wdGlvbnMubG9jID0gSlNPTi5zdHJpbmdpZnkodGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uKTtcbiAgICBvcHRpb25zID0gdGhpcy5vYmplY3RMaXRlcmFsKG9wdGlvbnMpO1xuICAgIGlmICh1c2VSZWdpc3Rlcikge1xuICAgICAgdGhpcy51c2VSZWdpc3Rlcignb3B0aW9ucycpO1xuICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTtcbiAgICAgIHJldHVybiBbJ29wdGlvbnM9Jywgb3B0aW9uc107XG4gICAgfSBlbHNlIGlmIChwYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cbn07XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByZXNlcnZlZFdvcmRzID0gKCdicmVhayBlbHNlIG5ldyB2YXInICsgJyBjYXNlIGZpbmFsbHkgcmV0dXJuIHZvaWQnICsgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArICcgY29udGludWUgZnVuY3Rpb24gdGhpcyB3aXRoJyArICcgZGVmYXVsdCBpZiB0aHJvdycgKyAnIGRlbGV0ZSBpbiB0cnknICsgJyBkbyBpbnN0YW5jZW9mIHR5cGVvZicgKyAnIGFic3RyYWN0IGVudW0gaW50IHNob3J0JyArICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgKyAnIGJ5dGUgZXh0ZW5kcyBsb25nIHN1cGVyJyArICcgY2hhciBmaW5hbCBuYXRpdmUgc3luY2hyb25pemVkJyArICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICsgJyBjb25zdCBnb3RvIHByaXZhdGUgdHJhbnNpZW50JyArICcgZGVidWdnZXIgaW1wbGVtZW50cyBwcm90ZWN0ZWQgdm9sYXRpbGUnICsgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICsgJyBudWxsIHRydWUgZmFsc2UnKS5zcGxpdCgnICcpO1xuXG4gIHZhciBjb21waWxlcldvcmRzID0gSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSByZXNlcnZlZFdvcmRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbXBpbGVyV29yZHNbcmVzZXJ2ZWRXb3Jkc1tpXV0gPSB0cnVlO1xuICB9XG59KSgpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIE1heSBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb25cbiAqL1xuSmF2YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuICFKYXZhU2NyaXB0Q29tcGlsZXIuUkVTRVJWRURfV09SRFNbbmFtZV0gJiYgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpO1xufTtcblxuZnVuY3Rpb24gc3RyaWN0TG9va3VwKHJlcXVpcmVUZXJtaW5hbCwgY29tcGlsZXIsIHBhcnRzLCB0eXBlKSB7XG4gIHZhciBzdGFjayA9IGNvbXBpbGVyLnBvcFN0YWNrKCksXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIGxlbi0tO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHN0YWNrID0gY29tcGlsZXIubmFtZUxvb2t1cChzdGFjaywgcGFydHNbaV0sIHR5cGUpO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIHJldHVybiBbY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksICcoJywgc3RhY2ssICcsICcsIGNvbXBpbGVyLnF1b3RlZFN0cmluZyhwYXJ0c1tpXSksICcsICcsIEpTT04uc3RyaW5naWZ5KGNvbXBpbGVyLnNvdXJjZS5jdXJyZW50TG9jYXRpb24pLCAnICknXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RhY2s7XG4gIH1cbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gSmF2YVNjcmlwdENvbXBpbGVyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMk52YlhCcGJHVnlMMnBoZG1GelkzSnBjSFF0WTI5dGNHbHNaWEl1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenR2UWtGQmIwUXNVMEZCVXpzN2VVSkJRM1pETEdOQlFXTTdPenM3Y1VKQlExb3NWVUZCVlRzN2RVSkJRMlFzV1VGQldUczdPenRCUVVWb1F5eFRRVUZUTEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVN1FVRkRkRUlzVFVGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1EwRkRjRUk3TzBGQlJVUXNVMEZCVXl4clFrRkJhMElzUjBGQlJ5eEZRVUZGT3p0QlFVVm9ReXhyUWtGQmEwSXNRMEZCUXl4VFFVRlRMRWRCUVVjN096dEJRVWMzUWl4WlFVRlZMRVZCUVVVc2IwSkJRVk1zVFVGQlRTeEZRVUZGTEVsQlFVa3NaVUZCWlR0QlFVTTVReXhYUVVGUExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdSMEZET1VNN1FVRkRSQ3hsUVVGaExFVkJRVVVzZFVKQlFWTXNTVUZCU1N4RlFVRkZPMEZCUXpWQ0xGZEJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMR3RDUVVGclFpeERRVUZETEVWQlFVVXNXVUZCV1N4RlFVRkZMRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dEhRVU4yUlRzN1FVRkZSQ3hqUVVGWkxFVkJRVVVzZDBKQlFWYzdRVUZEZGtJc1VVRkJUU3hSUVVGUkxEQkNRVUZ2UWp0UlFVTm9ReXhSUVVGUkxFZEJRVWNzZFVKQlFXbENMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM2hETEZkQlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03UjBGRE4wSTdPMEZCUlVRc1owSkJRV01zUlVGQlJTeDNRa0ZCVXl4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzUlVGQlJUczdRVUZGYmtRc1VVRkJTU3hEUVVGRExHVkJRVkVzVFVGQlRTeERRVUZETEVWQlFVVTdRVUZEY0VJc1dVRkJUU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTMEZEYmtJN1FVRkRSQ3hWUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZET3p0QlFVVTFReXhSUVVGSkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUXpkQ0xHRkJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wdEJRMnBETEUxQlFVMHNTVUZCU1N4UlFVRlJMRVZCUVVVN096czdRVUZKYmtJc1lVRkJUeXhEUVVGRExGbEJRVmtzUlVGQlJTeE5RVUZOTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1MwRkRjRU1zVFVGQlRUdEJRVU5NTEZsQlFVMHNRMEZCUXl4alFVRmpMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRemRDTEdGQlFVOHNUVUZCVFN4RFFVRkRPMHRCUTJZN1IwRkRSanM3UVVGRlJDeHJRa0ZCWjBJc1JVRkJSU3cwUWtGQlZ6dEJRVU16UWl4WFFVRlBMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdSMEZET1VJN08wRkJSVVFzYjBKQlFXdENMRVZCUVVVc05FSkJRVk1zVFVGQlRTeEZRVUZGTEVsQlFVa3NSVUZCUlR0QlFVTjZReXhSUVVGSkxFTkJRVU1zTkVKQlFUUkNMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRM3BETEZkQlFVOHNRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1IwRkRjRVU3TzBGQlJVUXNPRUpCUVRSQ0xFVkJRVVVzUzBGQlN6czdRVUZGYmtNc1UwRkJUeXhGUVVGRkxHbENRVUZUTEZkQlFWY3NSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxGRkJRVkVzUlVGQlJUdEJRVU42UkN4UlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExGZEJRVmNzUTBGQlF6dEJRVU12UWl4UlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzUTBGQlF6dEJRVU4yUWl4UlFVRkpMRU5CUVVNc1dVRkJXU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRPMEZCUXpsRExGRkJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU03UVVGRGRFTXNVVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF6czdRVUZGTlVJc1VVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVOc1F5eFJRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU03UVVGRGVrSXNVVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhQUVVGUExFbEJRVWs3UVVGRGVFSXNaMEpCUVZVc1JVRkJSU3hGUVVGRk8wRkJRMlFzWTBGQlVTeEZRVUZGTEVWQlFVVTdRVUZEV2l4clFrRkJXU3hGUVVGRkxFVkJRVVU3UzBGRGFrSXNRMEZCUXpzN1FVRkZSaXhSUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdPMEZCUldoQ0xGRkJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUTI1Q0xGRkJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTNCQ0xGRkJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSVUZCUlN4RFFVRkRPMEZCUTJ4Q0xGRkJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU03UVVGRE9VSXNVVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGFrSXNVVUZCU1N4RFFVRkRMRmxCUVZrc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGRrSXNVVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU03UVVGRGRFSXNVVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXhGUVVGRkxFTkJRVU03TzBGQlJYUkNMRkZCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zVjBGQlZ5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVVelF5eFJRVUZKTEVOQlFVTXNVMEZCVXl4SFFVTmFMRWxCUVVrc1EwRkJReXhUUVVGVExFbEJRMlFzVjBGQlZ5eERRVUZETEZOQlFWTXNTVUZEY2tJc1YwRkJWeXhEUVVGRExHRkJRV0VzU1VGRGVrSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRGRFSXNVVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eEpRVUZKTEZkQlFWY3NRMEZCUXl4alFVRmpMRU5CUVVNN08wRkJSWGhGTEZGQlFVa3NUMEZCVHl4SFFVRkhMRmRCUVZjc1EwRkJReXhQUVVGUE8xRkJReTlDTEUxQlFVMHNXVUZCUVR0UlFVTk9MRkZCUVZFc1dVRkJRVHRSUVVOU0xFTkJRVU1zV1VGQlFUdFJRVU5FTEVOQlFVTXNXVUZCUVN4RFFVRkRPenRCUVVWS0xGTkJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRekZETEZsQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJYQkNMRlZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWlVGQlpTeEhRVUZITEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNN1FVRkRla01zWTBGQlVTeEhRVUZITEZGQlFWRXNTVUZCU1N4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRE8wRkJRMnhETEZWQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE9VTTdPenRCUVVkRUxGRkJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNaVUZCWlN4SFFVRkhMRkZCUVZFc1EwRkJRenRCUVVOMlF5eFJRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE96czdRVUZIY0VJc1VVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEpRVUZKTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTNwRkxGbEJRVTBzTWtKQlFXTXNPRU5CUVRoRExFTkJRVU1zUTBGQlF6dExRVU55UlRzN1FVRkZSQ3hSUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSVHRCUVVNNVFpeFZRVUZKTEVOQlFVTXNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJRenM3UVVGRk1VSXNWVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGRGRFSXNlVU5CUVhsRExFVkJRM3BETEVsQlFVa3NRMEZCUXl4dlEwRkJiME1zUlVGQlJTeEZRVU16UXl4TFFVRkxMRU5CUTA0c1EwRkJReXhEUVVGRE8wRkJRMGdzVlVGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03TzBGQlJXNURMRlZCUVVrc1VVRkJVU3hGUVVGRk8wRkJRMW9zV1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVU55UXl4SlFVRkpMRVZCUTBvc1QwRkJUeXhGUVVOUUxGZEJRVmNzUlVGRFdDeFJRVUZSTEVWQlExSXNUVUZCVFN4RlFVTk9MR0ZCUVdFc1JVRkRZaXhSUVVGUkxFVkJRMUlzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkRlRUlzUTBGQlF5eERRVUZETzA5QlEwb3NUVUZCVFR0QlFVTk1MRmxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVU55UWl4MVJVRkJkVVVzUTBGRGVFVXNRMEZCUXp0QlFVTkdMRmxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUXpWQ0xGbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlF6dFBRVU16UXp0TFFVTkdMRTFCUVUwN1FVRkRUQ3hWUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEZOQlFWTXNRMEZCUXp0TFFVTTNRanM3UVVGRlJDeFJRVUZKTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRPVU1zVVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRha0lzVlVGQlNTeEhRVUZITEVkQlFVYzdRVUZEVWl4blFrRkJVU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZETjBJc1dVRkJTU3hGUVVGRkxFVkJRVVU3VDBGRFZDeERRVUZET3p0QlFVVkdMRlZCUVVrc1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJUdEJRVU51UWl4WFFVRkhMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTTdRVUZETjBJc1YwRkJSeXhEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVOQlFVTTdUMEZETVVJN08zRkNRVVU0UWl4SlFVRkpMRU5CUVVNc1QwRkJUenRWUVVGeVF5eFJRVUZSTEZsQlFWSXNVVUZCVVR0VlFVRkZMRlZCUVZVc1dVRkJWaXhWUVVGVk96dEJRVU14UWl4WFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTXpReXhaUVVGSkxGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0QlFVTm1MR0ZCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRja0lzWTBGQlNTeFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1FVRkRha0lzWlVGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZET1VJc1pVRkJSeXhEUVVGRExHRkJRV0VzUjBGQlJ5eEpRVUZKTEVOQlFVTTdWMEZETVVJN1UwRkRSanRQUVVOR096dEJRVVZFTEZWQlFVa3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhWUVVGVkxFVkJRVVU3UVVGREwwSXNWMEZCUnl4RFFVRkRMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU03VDBGRGRrSTdRVUZEUkN4VlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTzBGQlEzSkNMRmRCUVVjc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETzA5QlEzQkNPMEZCUTBRc1ZVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlEyeENMRmRCUVVjc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETzA5QlEzUkNPMEZCUTBRc1ZVRkJTU3hKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTzBGQlEzWkNMRmRCUVVjc1EwRkJReXhqUVVGakxFZEJRVWNzU1VGQlNTeERRVUZETzA5QlF6TkNPMEZCUTBRc1ZVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlR0QlFVTjJRaXhYUVVGSExFTkJRVU1zVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXp0UFFVTnVRanM3UVVGRlJDeFZRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTJJc1YwRkJSeXhEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdRVUZGTlVNc1dVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eGxRVUZsTEVkQlFVY3NSVUZCUlN4TFFVRkxMRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRE8wRkJRMmhGTEZkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZET3p0QlFVVTVRaXhaUVVGSkxFOUJRVThzUTBGQlF5eFBRVUZQTEVWQlFVVTdRVUZEYmtJc1lVRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenRCUVVNMVJDeGhRVUZITEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRUUVVONlF5eE5RVUZOTzBGQlEwd3NZVUZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dFRRVU4wUWp0UFFVTkdMRTFCUVUwN1FVRkRUQ3hYUVVGSExFTkJRVU1zWlVGQlpTeEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1QwRkRjRU03TzBGQlJVUXNZVUZCVHl4SFFVRkhMRU5CUVVNN1MwRkRXaXhOUVVGTk8wRkJRMHdzWVVGQlR5eEZRVUZGTEVOQlFVTTdTMEZEV0R0SFFVTkdPenRCUVVWRUxGVkJRVkVzUlVGQlJTeHZRa0ZCVnpzN08wRkJSMjVDTEZGQlFVa3NRMEZCUXl4WFFVRlhMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRM0pDTEZGQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc2VVSkJRVmtzU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRCUVVOb1JDeFJRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMSGxDUVVGWkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1IwRkRja1E3TzBGQlJVUXNkVUpCUVhGQ0xFVkJRVVVzSzBKQlFWTXNVVUZCVVN4RlFVRkZPenM3T3p0QlFVTjRReXhSUVVGSkxHVkJRV1VzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUlhwQ0xGRkJRVWtzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRlRVFzVVVGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1JVRkJSVHRCUVVOeVFpeHhRa0ZCWlN4SlFVRkpMRWxCUVVrc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUXpkRE96czdPenM3T3p0QlFWRkVMRkZCUVVrc1ZVRkJWU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU51UWl4VlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJRU3hMUVVGTExFVkJRVWs3UVVGRGVrTXNWVUZCU1N4SlFVRkpMRWRCUVVjc1RVRkJTeXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZETDBJc1ZVRkJTU3hKUVVGSkxFTkJRVU1zVVVGQlVTeEpRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1EwRkJReXhGUVVGRk8wRkJRelZETEhWQ1FVRmxMRWxCUVVrc1UwRkJVeXhIUVVGSExFVkJRVVVzVlVGQlZTeEhRVUZITEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRNVVFzV1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFZEJRVWNzVlVGQlZTeERRVUZETzA5QlEzcERPMHRCUTBZc1EwRkJReXhEUVVGRE96dEJRVVZJTEZGQlFVa3NTVUZCU1N4RFFVRkRMRFJDUVVFMFFpeEZRVUZGTzBGQlEzSkRMSEZDUVVGbExFbEJRVWtzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4dlEwRkJiME1zUlVGQlJTeERRVUZETzB0QlEzWkZPenRCUVVWRUxGRkJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNWMEZCVnl4RlFVRkZMRkZCUVZFc1JVRkJSU3hUUVVGVExFVkJRVVVzVlVGQlZTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWd1JTeFJRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRWxCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJUdEJRVU42UXl4WlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETzB0QlF6VkNPMEZCUTBRc1VVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlEyeENMRmxCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTTdTMEZEZGtJN096dEJRVWRFTEZGQlFVa3NUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTTdPMEZCUlM5RExGRkJRVWtzVVVGQlVTeEZRVUZGTzBGQlExb3NXVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6czdRVUZGY0VJc1lVRkJUeXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRMUVVOeVF5eE5RVUZOTzBGQlEwd3NZVUZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVU4wUWl4WFFVRlhMRVZCUTFnc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZEYUVJc1UwRkJVeXhGUVVOVUxFMUJRVTBzUlVGRFRpeEhRVUZITEVOQlEwb3NRMEZCUXl4RFFVRkRPMHRCUTBvN1IwRkRSanRCUVVORUxHRkJRVmNzUlVGQlJTeHhRa0ZCVXl4bFFVRmxMRVZCUVVVN1FVRkRja01zVVVGQlNTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUk8xRkJRM1JETEZWQlFWVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWE8xRkJRemxDTEZkQlFWY3NXVUZCUVR0UlFVTllMRlZCUVZVc1dVRkJRVHRSUVVOV0xGZEJRVmNzV1VGQlFUdFJRVU5ZTEZOQlFWTXNXVUZCUVN4RFFVRkRPMEZCUTFvc1VVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCUVN4SlFVRkpMRVZCUVVrN1FVRkRka0lzVlVGQlNTeEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZPMEZCUTNaQ0xGbEJRVWtzVjBGQlZ5eEZRVUZGTzBGQlEyWXNZMEZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFRRVU4wUWl4TlFVRk5PMEZCUTB3c2NVSkJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVMEZEY0VJN1FVRkRSQ3hwUWtGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXp0UFFVTnNRaXhOUVVGTk8wRkJRMHdzV1VGQlNTeFhRVUZYTEVWQlFVVTdRVUZEWml4alFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRk8wRkJRMllzZFVKQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNN1YwRkRjRUlzVFVGQlRUdEJRVU5NTEhWQ1FVRlhMRU5CUVVNc1QwRkJUeXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzFkQlEyNURPMEZCUTBRc2JVSkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRia0lzY1VKQlFWY3NSMEZCUnl4VFFVRlRMRWRCUVVjc1UwRkJVeXhEUVVGRE8xTkJRM0pET3p0QlFVVkVMR3RDUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETzBGQlEyeENMRmxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRFlpeHZRa0ZCVlN4SFFVRkhMRXRCUVVzc1EwRkJRenRUUVVOd1FqdFBRVU5HTzB0QlEwWXNRMEZCUXl4RFFVRkRPenRCUVVWSUxGRkJRVWtzVlVGQlZTeEZRVUZGTzBGQlEyUXNWVUZCU1N4WFFVRlhMRVZCUVVVN1FVRkRaaXh0UWtGQlZ5eERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVVNdlFpeHBRa0ZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFBRVU53UWl4TlFVRk5MRWxCUVVrc1EwRkJReXhWUVVGVkxFVkJRVVU3UVVGRGRFSXNXVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdUMEZEYUVNN1MwRkRSaXhOUVVGTk8wRkJRMHdzY1VKQlFXVXNTVUZEWWl4aFFVRmhMRWxCUVVrc1YwRkJWeXhIUVVGSExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzUTBGQlFTeEJRVUZETEVOQlFVTTdPMEZCUlM5RUxGVkJRVWtzVjBGQlZ5eEZRVUZGTzBGQlEyWXNiVUpCUVZjc1EwRkJReXhQUVVGUExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJRenRCUVVONFF5eHBRa0ZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFBRVU53UWl4TlFVRk5PMEZCUTB3c1dVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF6dFBRVU53UXp0TFFVTkdPenRCUVVWRUxGRkJRVWtzWlVGQlpTeEZRVUZGTzBGQlEyNUNMRlZCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVU5xUWl4TlFVRk5MRWRCUVVjc1pVRkJaU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4WFFVRlhMRWRCUVVjc1JVRkJSU3hIUVVGSExFdEJRVXNzUTBGQlFTeEJRVUZETEVOQlEyNUZMRU5CUVVNN1MwRkRTRHM3UVVGRlJDeFhRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU03UjBGRE5VSTdPMEZCUlVRc2MwTkJRVzlETEVWQlFVVXNaMFJCUVZjN1FVRkRMME1zVjBGQlR5dzJVRUZQVEN4SlFVRkpMRVZCUVVVc1EwRkJRenRIUVVOV096czdPenM3T3pzN096dEJRVmRFTEZsQlFWVXNSVUZCUlN4dlFrRkJVeXhKUVVGSkxFVkJRVVU3UVVGRGVrSXNVVUZCU1N4clFrRkJhMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVTnVReXh2UTBGQmIwTXNRMEZEY2tNN1VVRkRSQ3hOUVVGTkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRGFrTXNVVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPenRCUVVWMFF5eFJRVUZKTEZOQlFWTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UVVGRGFFTXNWVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPenRCUVVVdlFpeFJRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zV1VGQldTeERRVUZETEd0Q1FVRnJRaXhGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGRCUTNwRk96czdPenM3T3p0QlFWRkVMSEZDUVVGdFFpeEZRVUZGTEN0Q1FVRlhPenRCUVVVNVFpeFJRVUZKTEd0Q1FVRnJRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlEyNURMRzlEUVVGdlF5eERRVU55UXp0UlFVTkVMRTFCUVUwc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVOcVF5eFJRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPenRCUVVVeFF5eFJRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN08wRkJSVzVDTEZGQlFVa3NUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dEJRVU01UWl4VlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN08wRkJSVGRDTEZGQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkRaQ3hQUVVGUExFVkJRMUFzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZEWml4TlFVRk5MRVZCUTA0c1QwRkJUeXhGUVVOUUxFdEJRVXNzUlVGRFRDeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFVkJRelZFTEVkQlFVY3NRMEZEU2l4RFFVRkRMRU5CUVVNN1IwRkRTanM3T3pzN096czdRVUZSUkN4bFFVRmhMRVZCUVVVc2RVSkJRVk1zVDBGQlR5eEZRVUZGTzBGQlF5OUNMRkZCUVVrc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU4yUWl4aFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTTdTMEZEZWtNc1RVRkJUVHRCUVVOTUxGVkJRVWtzUTBGQlF5eGxRVUZsTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRVU03UzBGRGNFUTdPMEZCUlVRc1VVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eFBRVUZQTEVOQlFVTTdSMEZETDBJN096czdPenM3T3pzN08wRkJWMFFzVVVGQlRTeEZRVUZGTEd0Q1FVRlhPMEZCUTJwQ0xGRkJRVWtzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZPMEZCUTI1Q0xGVkJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNWVUZCUVN4UFFVRlBPMlZCUVVrc1EwRkJReXhoUVVGaExFVkJRVVVzVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXp0UFFVRkJMRU5CUVVNc1EwRkJRenM3UVVGRmFFVXNWVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGRrUXNUVUZCVFR0QlFVTk1MRlZCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0QlFVTTFRaXhWUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlEyUXNUVUZCVFN4RlFVTk9MRXRCUVVzc1JVRkRUQ3hqUVVGakxFVkJRMlFzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1UwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVU16UXl4SlFVRkpMRU5CUTB3c1EwRkJReXhEUVVGRE8wRkJRMGdzVlVGQlNTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRkZCUVZFc1JVRkJSVHRCUVVNM1FpeFpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUTJRc1UwRkJVeXhGUVVOVUxFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNTVUZCU1N4RlFVRkZMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUlVGRE1VTXNTVUZCU1N4RFFVTk1MRU5CUVVNc1EwRkJRenRQUVVOS08wdEJRMFk3UjBGRFJqczdPenM3T3pzN1FVRlJSQ3hsUVVGaExFVkJRVVVzZVVKQlFWYzdRVUZEZUVJc1VVRkJTU3hEUVVGRExGVkJRVlVzUTBGRFlpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUTJ4Q0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNORUpCUVRSQ0xFTkJRVU1zUlVGRE5VTXNSMEZCUnl4RlFVTklMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGRFppeEhRVUZITEVOQlEwb3NRMEZCUXl4RFFVTklMRU5CUVVNN1IwRkRTRHM3T3pzN096czdPMEZCVTBRc1dVRkJWU3hGUVVGRkxHOUNRVUZUTEV0QlFVc3NSVUZCUlR0QlFVTXhRaXhSUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEV0QlFVc3NRMEZCUXp0SFFVTXhRanM3T3pzN096czdRVUZSUkN4aFFVRlhMRVZCUVVVc2RVSkJRVmM3UVVGRGRFSXNVVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVOQlFVTTdSMEZETTBRN096czdPenM3T3p0QlFWTkVMR2xDUVVGbExFVkJRVVVzZVVKQlFWTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFVkJRVVVzVFVGQlRTeEZRVUZGTzBGQlEzUkVMRkZCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6czdRVUZGVml4UlFVRkpMRU5CUVVNc1RVRkJUU3hKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJUczdPMEZCUjNaRUxGVkJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRNME1zVFVGQlRUdEJRVU5NTEZWQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRMUVVOd1FqczdRVUZGUkN4UlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExGTkJRVk1zUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hOUVVGTkxFTkJRVU1zUTBGQlF6dEhRVU4wUkRzN096czdPenM3TzBGQlUwUXNhMEpCUVdkQ0xFVkJRVVVzTUVKQlFWTXNXVUZCV1N4RlFVRkZMRXRCUVVzc1JVRkJSVHRCUVVNNVF5eFJRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMRWxCUVVrc1EwRkJRenM3UVVGRk0wSXNVVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExHTkJRV01zUlVGQlJTeFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRM3BGTEZGQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1UwRkJVeXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0SFFVTjJRenM3T3pzN096czdRVUZSUkN4WlFVRlZMRVZCUVVVc2IwSkJRVk1zUzBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVN1FVRkRla01zVVVGQlNTeERRVUZETEV0QlFVc3NSVUZCUlR0QlFVTldMRlZCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRMUVVNdlFpeE5RVUZOTzBGQlEwd3NWVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEhWQ1FVRjFRaXhIUVVGSExFdEJRVXNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTTVSRHM3UVVGRlJDeFJRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRIUVVOc1JEczdRVUZGUkN4aFFVRlhMRVZCUVVVc2NVSkJRVk1zU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJUczdPenM3UVVGRGJrUXNVVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR0ZCUVdFc1JVRkJSVHRCUVVOeVJDeFZRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUXpGRkxHRkJRVTg3UzBGRFVqczdRVUZGUkN4UlFVRkpMRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETzBGQlEzWkNMRmRCUVU4c1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlRzN1FVRkZia0lzVlVGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4VlFVRkJMRTlCUVU4c1JVRkJTVHRCUVVNelFpeFpRVUZKTEUxQlFVMHNSMEZCUnl4UFFVRkxMRlZCUVZVc1EwRkJReXhQUVVGUExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE96czdRVUZIZEVRc1dVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJUdEJRVU5XTEdsQ1FVRlBMRU5CUVVNc1lVRkJZU3hGUVVGRkxFMUJRVTBzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNN1UwRkRhRVFzVFVGQlRUczdRVUZGVEN4cFFrRkJUeXhEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTXNRMEZCUXp0VFFVTjZRanRQUVVOR0xFTkJRVU1zUTBGQlF6czdTMEZGU2p0SFFVTkdPenM3T3pzN096czdRVUZUUkN4MVFrRkJjVUlzUlVGQlJTeHBRMEZCVnp0QlFVTm9ReXhSUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlExSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RlFVTnNReXhIUVVGSExFVkJRMGdzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVTm1MRWxCUVVrc1JVRkRTaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVTnVRaXhIUVVGSExFTkJRMG9zUTBGQlF5eERRVUZETzBkQlEwbzdPenM3T3pzN096czdRVUZWUkN4cFFrRkJaU3hGUVVGRkxIbENRVUZUTEUxQlFVMHNSVUZCUlN4SlFVRkpMRVZCUVVVN1FVRkRkRU1zVVVGQlNTeERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPMEZCUTI1Q0xGRkJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN096czdRVUZKZEVJc1VVRkJTU3hKUVVGSkxFdEJRVXNzWlVGQlpTeEZRVUZGTzBGQlF6VkNMRlZCUVVrc1QwRkJUeXhOUVVGTkxFdEJRVXNzVVVGQlVTeEZRVUZGTzBGQlF6bENMRmxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdUMEZEZWtJc1RVRkJUVHRCUVVOTUxGbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFBRVU12UWp0TFFVTkdPMGRCUTBZN08wRkJSVVFzVjBGQlV5eEZRVUZGTEcxQ1FVRlRMRk5CUVZNc1JVRkJSVHRCUVVNM1FpeFJRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVN1FVRkRha0lzVlVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVOcVFqdEJRVU5FTEZGQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRCUVVOeVFpeFZRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMmhDTEZWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGFrSTdRVUZEUkN4UlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNVMEZCVXl4SFFVRkhMRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dEhRVU4yUkR0QlFVTkVMRlZCUVZFc1JVRkJSU3h2UWtGQlZ6dEJRVU51UWl4UlFVRkpMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVU3UVVGRFlpeFZRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTMEZETjBJN1FVRkRSQ3hSUVVGSkxFTkJRVU1zU1VGQlNTeEhRVUZITEVWQlFVVXNUVUZCVFN4RlFVRkZMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJTeEZRVUZGTEZGQlFWRXNSVUZCUlN4RlFVRkZMRVZCUVVVc1IwRkJSeXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETzBkQlF6bEVPMEZCUTBRc1UwRkJUeXhGUVVGRkxHMUNRVUZYTzBGQlEyeENMRkZCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEY2tJc1VVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE96dEJRVVU1UWl4UlFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGFrSXNWVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM3BETzBGQlEwUXNVVUZCU1N4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRk8wRkJRM0pDTEZWQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNM1F5eFZRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1MwRkRNME03TzBGQlJVUXNVVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRE8wZEJRelZET3pzN096czdPenRCUVZGRUxGbEJRVlVzUlVGQlJTeHZRa0ZCVXl4TlFVRk5MRVZCUVVVN1FVRkRNMElzVVVGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJRenRIUVVOc1JEczdPenM3T3pzN096dEJRVlZFTEdGQlFWY3NSVUZCUlN4eFFrRkJVeXhMUVVGTExFVkJRVVU3UVVGRE0wSXNVVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGRCUXpsQ096czdPenM3T3pzN08wRkJWVVFzWVVGQlZ5eEZRVUZGTEhGQ1FVRlRMRWxCUVVrc1JVRkJSVHRCUVVNeFFpeFJRVUZKTEVsQlFVa3NTVUZCU1N4SlFVRkpMRVZCUVVVN1FVRkRhRUlzVlVGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzB0QlEzSkVMRTFCUVUwN1FVRkRUQ3hWUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE4wSTdSMEZEUmpzN096czdPenM3TzBGQlUwUXNiVUpCUVdsQ0xFVkJRVUVzTWtKQlFVTXNVMEZCVXl4RlFVRkZMRWxCUVVrc1JVRkJSVHRCUVVOcVF5eFJRVUZKTEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExGbEJRVmtzUlVGQlJTeEpRVUZKTEVWQlFVVXNWMEZCVnl4RFFVRkRPMUZCUTI1RkxFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWxCUVVrc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF6czdRVUZGYkVRc1VVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZEYmtJc1QwRkJUeXhGUVVOUUxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNXVUZCV1N4RFFVRkRMR05CUVdNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGREwwTXNTVUZCU1N4RlFVTktMRTlCUVU4c1JVRkRVQ3hYUVVGWExFVkJRMWdzVDBGQlR5eERRVU5TTEVOQlFVTXNSVUZEUml4VFFVRlRMRU5CUTFZc1EwRkJReXhEUVVGRE8wZEJRMG83T3pzN096czdPenM3TzBGQlYwUXNZMEZCV1N4RlFVRkZMSE5DUVVGVExGTkJRVk1zUlVGQlJTeEpRVUZKTEVWQlFVVXNVVUZCVVN4RlFVRkZPMEZCUTJoRUxGRkJRVWtzVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVN1VVRkROMElzVFVGQlRTeEhRVUZITEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1UwRkJVeXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZET3p0QlFVVTNReXhSUVVGSkxIRkNRVUZ4UWl4SFFVRkhMRVZCUVVVc1EwRkJRenM3UVVGRkwwSXNVVUZCU1N4UlFVRlJMRVZCUVVVN08wRkJSVm9zTWtKQlFYRkNMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTjZRenM3UVVGRlJDeDVRa0ZCY1VJc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdRVUZEZEVNc1VVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTNoQ0xESkNRVUZ4UWl4RFFVRkRMRWxCUVVrc1EwRkRlRUlzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl3clFrRkJLMElzUTBGQlF5eERRVU5vUkN4RFFVRkRPMHRCUTBnN08wRkJSVVFzVVVGQlNTeHJRa0ZCYTBJc1IwRkJSeXhEUVVOMlFpeEhRVUZITEVWQlEwZ3NTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEhGQ1FVRnhRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eEZRVU5zUkN4SFFVRkhMRU5CUTBvc1EwRkJRenRCUVVOR0xGRkJRVWtzV1VGQldTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1dVRkJXU3hEUVVONlF5eHJRa0ZCYTBJc1JVRkRiRUlzVFVGQlRTeEZRVU5PTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUTJ4Q0xFTkJRVU03UVVGRFJpeFJRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wZEJRM3BDT3p0QlFVVkVMR3RDUVVGblFpeEZRVUZGTERCQ1FVRlRMRXRCUVVzc1JVRkJSU3hUUVVGVExFVkJRVVU3UVVGRE0wTXNVVUZCU1N4TlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8wRkJRMmhDTEZWQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdRVUZEZEVJc1UwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZEY2tNc1dVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UzBGRGJFTTdRVUZEUkN4WFFVRlBMRTFCUVUwc1EwRkJRenRIUVVObU96czdPenM3T3p0QlFWRkVMRzFDUVVGcFFpeEZRVUZGTERKQ1FVRlRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFVkJRVVU3UVVGRE0wTXNVVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1FVRkRMME1zVVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXp0SFFVTTNSVHM3T3pzN096czdPenM3T3pzN1FVRmpSQ3hwUWtGQlpTeEZRVUZGTEhsQ1FVRlRMRWxCUVVrc1JVRkJSU3hWUVVGVkxFVkJRVVU3UVVGRE1VTXNVVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6czdRVUZGTTBJc1VVRkJTU3hUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPenRCUVVWb1F5eFJRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1FVRkRha0lzVVVGQlNTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRPenRCUVVWdVJDeFJRVUZKTEZWQlFWVXNSMEZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlEycEVMRk5CUVZNc1JVRkRWQ3hKUVVGSkxFVkJRMG9zVVVGQlVTeERRVU5VTEVGQlFVTXNRMEZCUXpzN1FVRkZTQ3hSUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVkQlFVY3NSVUZCUlN4WlFVRlpMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFMUJRVTBzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1FVRkRja1VzVVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRM2hDTEZsQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhaUVVGWkxFTkJRVU03UVVGRGVrSXNXVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkRWQ3h6UWtGQmMwSXNSVUZEZEVJc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5d3JRa0ZCSzBJc1EwRkJReXhEUVVOb1JDeERRVUZETzB0QlEwZzdPMEZCUlVRc1VVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVU5TTEVkQlFVY3NSVUZEU0N4TlFVRk5MRVZCUTA0c1RVRkJUU3hEUVVGRExGVkJRVlVzUjBGQlJ5eERRVUZETEV0QlFVc3NSVUZCUlN4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUlVGQlJTeEZRVU51UkN4SlFVRkpMRVZCUTBvc2NVSkJRWEZDTEVWQlEzSkNMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zV1VGQldTeERRVUZETEVWQlF6VkNMRXRCUVVzc1JVRkRUQ3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1RVRkJUU3hGUVVGRkxFMUJRVTBzUTBGQlF5eFZRVUZWTEVOQlFVTXNSVUZETjBRc1lVRkJZU3hEUVVOa0xFTkJRVU1zUTBGQlF6dEhRVU5LT3pzN096czdPenM3UVVGVFJDeGxRVUZoTEVWQlFVVXNkVUpCUVZNc1UwRkJVeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVTdRVUZETDBNc1VVRkJTU3hOUVVGTkxFZEJRVWNzUlVGQlJUdFJRVU5pTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN08wRkJSVGxETEZGQlFVa3NVMEZCVXl4RlFVRkZPMEZCUTJJc1ZVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0QlFVTjJRaXhoUVVGUExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTTdTMEZEY2tJN08wRkJSVVFzVVVGQlNTeE5RVUZOTEVWQlFVVTdRVUZEVml4aFFVRlBMRU5CUVVNc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1MwRkRla003UVVGRFJDeFhRVUZQTEVOQlFVTXNUMEZCVHl4SFFVRkhMRk5CUVZNc1EwRkJRenRCUVVNMVFpeFhRVUZQTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZVc1EwRkJRenRCUVVNNVFpeFhRVUZQTEVOQlFVTXNWVUZCVlN4SFFVRkhMSE5DUVVGelFpeERRVUZET3p0QlFVVTFReXhSUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTzBGQlEyUXNXVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dExRVU01UkN4TlFVRk5PMEZCUTB3c1dVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTjBRanM3UVVGRlJDeFJRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRM1pDTEdGQlFVOHNRMEZCUXl4TlFVRk5MRWRCUVVjc1VVRkJVU3hEUVVGRE8wdEJRek5DTzBGQlEwUXNWMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhoUVVGaExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZEVNc1ZVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzN1FVRkZja0lzVVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eDVRa0ZCZVVJc1JVRkJSU3hGUVVGRkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0SFFVTTFSVHM3T3pzN096czdRVUZSUkN4alFVRlpMRVZCUVVVc2MwSkJRVk1zUjBGQlJ5eEZRVUZGTzBGQlF6RkNMRkZCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVTdVVUZEZWtJc1QwRkJUeXhaUVVGQk8xRkJRMUFzU1VGQlNTeFpRVUZCTzFGQlEwb3NSVUZCUlN4WlFVRkJMRU5CUVVNN08wRkJSVXdzVVVGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMEZCUTJwQ0xGRkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1MwRkRkRUk3UVVGRFJDeFJRVUZKTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVN1FVRkRja0lzVlVGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRCUVVOMlFpeGhRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wdEJRek5DT3p0QlFVVkVMRkZCUVVrc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEY2tJc1VVRkJTU3hQUVVGUExFVkJRVVU3UVVGRFdDeFZRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF6dExRVU01UWp0QlFVTkVMRkZCUVVrc1NVRkJTU3hGUVVGRk8wRkJRMUlzVlVGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU03UzBGRGVFSTdRVUZEUkN4UlFVRkpMRVZCUVVVc1JVRkJSVHRCUVVOT0xGVkJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8wdEJRM0JDTzBGQlEwUXNVVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUjBGQlJ5eExRVUZMTEVOQlFVTTdSMEZETVVJN08wRkJSVVFzVVVGQlRTeEZRVUZGTEdkQ1FVRlRMRWxCUVVrc1JVRkJSU3hKUVVGSkxFVkJRVVVzUzBGQlN5eEZRVUZGTzBGQlEyeERMRkZCUVVrc1NVRkJTU3hMUVVGTExGbEJRVmtzUlVGQlJUdEJRVU42UWl4VlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlEyNUNMR05CUVdNc1IwRkRXaXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlExQXNVMEZCVXl4SFFVTlVMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGRFVDeEhRVUZITEVsQlEwWXNTMEZCU3l4SFFVRkhMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVUVzUVVGQlF5eERRVU55UkN4RFFVRkRPMHRCUTBnc1RVRkJUU3hKUVVGSkxFbEJRVWtzUzBGQlN5eG5Ra0ZCWjBJc1JVRkJSVHRCUVVOd1F5eFZRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRM1pDTEUxQlFVMHNTVUZCU1N4SlFVRkpMRXRCUVVzc1pVRkJaU3hGUVVGRk8wRkJRMjVETEZWQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0TFFVTXZRaXhOUVVGTk8wRkJRMHdzVlVGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzB0QlF5OUNPMGRCUTBZN096czdRVUZKUkN4VlFVRlJMRVZCUVVVc2EwSkJRV3RDT3p0QlFVVTFRaXhwUWtGQlpTeEZRVUZGTEhsQ1FVRlRMRmRCUVZjc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRE9VTXNVVUZCU1N4UlFVRlJMRWRCUVVjc1YwRkJWeXhEUVVGRExGRkJRVkU3VVVGRGFrTXNTMEZCU3l4WlFVRkJPMUZCUTB3c1VVRkJVU3haUVVGQkxFTkJRVU03TzBGQlJWZ3NVMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTXZReXhYUVVGTExFZEJRVWNzVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNCQ0xHTkJRVkVzUjBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenM3UVVGRkwwSXNWVUZCU1N4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZvUkN4VlFVRkpMRkZCUVZFc1NVRkJTU3hKUVVGSkxFVkJRVVU3UVVGRGNFSXNXVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRPMEZCUXk5Q0xGbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzUTBGQlF6dEJRVU42UXl4aFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dEJRVU53UWl4aFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSExGTkJRVk1zUjBGQlJ5eExRVUZMTEVOQlFVTTdRVUZETDBJc1dVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGRE4wTXNTMEZCU3l4RlFVTk1MRTlCUVU4c1JVRkRVQ3hKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVU5hTEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkRha0lzUTBGQlF6dEJRVU5HTEZsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXl4VlFVRlZMRU5CUVVNN1FVRkRja1FzV1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZET3p0QlFVVjZReXhaUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NRMEZCUXl4VFFVRlRMRWxCUVVrc1VVRkJVU3hEUVVGRExGTkJRVk1zUTBGQlF6dEJRVU4wUkN4WlFVRkpMRU5CUVVNc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eGpRVUZqTEVsQlFVa3NVVUZCVVN4RFFVRkRMR05CUVdNc1EwRkJRenRCUVVOeVJTeGhRVUZMTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU03UVVGRGFrTXNZVUZCU3l4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETzA5QlF6VkRMRTFCUVUwN1FVRkRUQ3hoUVVGTExFTkJRVU1zUzBGQlN5eEhRVUZITEZGQlFWRXNRMEZCUXl4TFFVRkxMRU5CUVVNN1FVRkROMElzWVVGQlN5eERRVUZETEVsQlFVa3NSMEZCUnl4VFFVRlRMRWRCUVVjc1VVRkJVU3hEUVVGRExFdEJRVXNzUTBGQlF6czdRVUZGZUVNc1dVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4SlFVRkpMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU03UVVGRGRFUXNXVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWTBGQll5eEpRVUZKTEZGQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNN1QwRkRkRVU3UzBGRFJqdEhRVU5HTzBGQlEwUXNjMEpCUVc5Q0xFVkJRVVVzT0VKQlFWTXNTMEZCU3l4RlFVRkZPMEZCUTNCRExGTkJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTndSU3hWUVVGSkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU12UXl4VlFVRkpMRmRCUVZjc1NVRkJTU3hYUVVGWExFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZPMEZCUXpWRExHVkJRVThzVjBGQlZ5eERRVUZETzA5QlEzQkNPMHRCUTBZN1IwRkRSanM3UVVGRlJDeHRRa0ZCYVVJc1JVRkJSU3d5UWtGQlV5eEpRVUZKTEVWQlFVVTdRVUZEYUVNc1VVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRM3BETEdGQlFXRXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenM3UVVGRk0wUXNVVUZCU1N4SlFVRkpMRU5CUVVNc1kwRkJZeXhKUVVGSkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVTdRVUZEZWtNc2JVSkJRV0VzUTBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNN1MwRkRia003UVVGRFJDeFJRVUZKTEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVN1FVRkRiRUlzYlVKQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03UzBGRE9VSTdPMEZCUlVRc1YwRkJUeXh2UWtGQmIwSXNSMEZCUnl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NRMEZCUXp0SFFVTTVSRHM3UVVGRlJDeGhRVUZYTEVWQlFVVXNjVUpCUVZNc1NVRkJTU3hGUVVGRk8wRkJRekZDTEZGQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTzBGQlEzcENMRlZCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUXpWQ0xGVkJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dExRVU5vUXp0SFFVTkdPenRCUVVWRUxFMUJRVWtzUlVGQlJTeGpRVUZUTEVsQlFVa3NSVUZCUlR0QlFVTnVRaXhSUVVGSkxFVkJRVVVzU1VGQlNTeFpRVUZaTEU5QlFVOHNRMEZCUVN4QlFVRkRMRVZCUVVVN1FVRkRPVUlzVlVGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlF5OUNPenRCUVVWRUxGRkJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRelZDTEZkQlFVOHNTVUZCU1N4RFFVRkRPMGRCUTJJN08wRkJSVVFzYTBKQlFXZENMRVZCUVVVc01FSkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF5OUNMRkZCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRIUVVNNVFqczdRVUZGUkN4WlFVRlZMRVZCUVVVc2IwSkJRVk1zVFVGQlRTeEZRVUZGTzBGQlF6TkNMRkZCUVVrc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU4yUWl4VlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGRFpDeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVTnFRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFVkJRemRETEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUTNKQ0xFTkJRMFlzUTBGQlF6dEJRVU5HTEZWQlFVa3NRMEZCUXl4alFVRmpMRWRCUVVjc1UwRkJVeXhEUVVGRE8wdEJRMnBET3p0QlFVVkVMRkZCUVVrc1RVRkJUU3hGUVVGRk8wRkJRMVlzVlVGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03UzBGRE1VSTdSMEZEUmpzN1FVRkZSQ3hqUVVGWkxFVkJRVVVzYzBKQlFWTXNVVUZCVVN4RlFVRkZPMEZCUXk5Q0xGRkJRVWtzVFVGQlRTeEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRPMUZCUTJoQ0xFdEJRVXNzV1VGQlFUdFJRVU5NTEZsQlFWa3NXVUZCUVR0UlFVTmFMRmRCUVZjc1dVRkJRU3hEUVVGRE96czdRVUZIWkN4UlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZGTzBGQlEzQkNMRmxCUVUwc01rSkJRV01zTkVKQlFUUkNMRU5CUVVNc1EwRkJRenRMUVVOdVJEczdPMEZCUjBRc1VVRkJTU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRk9VSXNVVUZCU1N4SFFVRkhMRmxCUVZrc1QwRkJUeXhGUVVGRk96dEJRVVV4UWl4WFFVRkxMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdRVUZEY0VJc1dVRkJUU3hIUVVGSExFTkJRVU1zUjBGQlJ5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMEZCUTNSQ0xHbENRVUZYTEVkQlFVY3NTVUZCU1N4RFFVRkRPMHRCUTNCQ0xFMUJRVTA3TzBGQlJVd3NhMEpCUVZrc1IwRkJSeXhKUVVGSkxFTkJRVU03UVVGRGNFSXNWVUZCU1N4TFFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZET3p0QlFVVTFRaXhaUVVGTkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGSkxFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wRkJRMnhFTEZkQlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UzBGRGVrSTdPMEZCUlVRc1VVRkJTU3hKUVVGSkxFZEJRVWNzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJYUkRMRkZCUVVrc1EwRkJReXhYUVVGWExFVkJRVVU3UVVGRGFFSXNWVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wdEJRMnBDTzBGQlEwUXNVVUZCU1N4WlFVRlpMRVZCUVVVN1FVRkRhRUlzVlVGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMHRCUTJ4Q08wRkJRMFFzVVVGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGRCUTNKRE96dEJRVVZFTEZkQlFWTXNSVUZCUlN4eFFrRkJWenRCUVVOd1FpeFJRVUZKTEVOQlFVTXNVMEZCVXl4RlFVRkZMRU5CUVVNN1FVRkRha0lzVVVGQlNTeEpRVUZKTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlF6RkRMRlZCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03UzBGREwwTTdRVUZEUkN4WFFVRlBMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dEhRVU0xUWp0QlFVTkVMR05CUVZrc1JVRkJSU3gzUWtGQlZ6dEJRVU4yUWl4WFFVRlBMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETzBkQlEycERPMEZCUTBRc1lVRkJWeXhGUVVGRkxIVkNRVUZYTzBGQlEzUkNMRkZCUVVrc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTTdRVUZEYmtNc1VVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEZRVUZGTEVOQlFVTTdRVUZEZEVJc1UwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4SFFVRkhMRmRCUVZjc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVOMFJDeFZRVUZKTEV0QlFVc3NSMEZCUnl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03TzBGQlJUTkNMRlZCUVVrc1MwRkJTeXhaUVVGWkxFOUJRVThzUlVGQlJUdEJRVU0xUWl4WlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UFFVTXZRaXhOUVVGTk8wRkJRMHdzV1VGQlNTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8wRkJRemRDTEZsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzUzBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wRkJRelZETEZsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzA5QlF5OUNPMHRCUTBZN1IwRkRSanRCUVVORUxGVkJRVkVzUlVGQlJTeHZRa0ZCVnp0QlFVTnVRaXhYUVVGUExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RFFVRkRPMGRCUTJoRE96dEJRVVZFTEZWQlFWRXNSVUZCUlN4clFrRkJVeXhQUVVGUExFVkJRVVU3UVVGRE1VSXNVVUZCU1N4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJUdFJRVU14UWl4SlFVRkpMRWRCUVVjc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGQkxFTkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTTdPMEZCUlM5RUxGRkJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NTVUZCU1N4WlFVRlpMRTlCUVU4c1JVRkJSVHRCUVVOMlF5eGhRVUZQTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNN1MwRkRia0lzVFVGQlRUdEJRVU5NTEZWQlFVa3NRMEZCUXl4TlFVRk5MRVZCUVVVN08wRkJSVmdzV1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRVZCUVVVN1FVRkRia0lzWjBKQlFVMHNNa0pCUVdNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXp0VFFVTXhRenRCUVVORUxGbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UFFVTnNRanRCUVVORUxHRkJRVThzU1VGQlNTeERRVUZETzB0QlEySTdSMEZEUmpzN1FVRkZSQ3hWUVVGUkxFVkJRVVVzYjBKQlFWYzdRVUZEYmtJc1VVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWazdVVUZEYUVVc1NVRkJTU3hIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE96czdRVUZIYWtNc1VVRkJTU3hKUVVGSkxGbEJRVmtzVDBGQlR5eEZRVUZGTzBGQlF6TkNMR0ZCUVU4c1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF6dExRVU51UWl4TlFVRk5PMEZCUTB3c1lVRkJUeXhKUVVGSkxFTkJRVU03UzBGRFlqdEhRVU5HT3p0QlFVVkVMR0ZCUVZjc1JVRkJSU3h4UWtGQlV5eFBRVUZQTEVWQlFVVTdRVUZETjBJc1VVRkJTU3hKUVVGSkxFTkJRVU1zVTBGQlV5eEpRVUZKTEU5QlFVOHNSVUZCUlR0QlFVTTNRaXhoUVVGUExGTkJRVk1zUjBGQlJ5eFBRVUZQTEVkQlFVY3NSMEZCUnl4RFFVRkRPMHRCUTJ4RExFMUJRVTA3UVVGRFRDeGhRVUZQTEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNN1MwRkRNVUk3UjBGRFJqczdRVUZGUkN4alFVRlpMRVZCUVVVc2MwSkJRVk1zUjBGQlJ5eEZRVUZGTzBGQlF6RkNMRmRCUVU4c1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFpRVUZaTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1IwRkRkRU03TzBGQlJVUXNaVUZCWVN4RlFVRkZMSFZDUVVGVExFZEJRVWNzUlVGQlJUdEJRVU16UWl4WFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGRCUTNaRE96dEJRVVZFTEZkQlFWTXNSVUZCUlN4dFFrRkJVeXhKUVVGSkxFVkJRVVU3UVVGRGVFSXNVVUZCU1N4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTTNRaXhSUVVGSkxFZEJRVWNzUlVGQlJUdEJRVU5RTEZOQlFVY3NRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRCUVVOeVFpeGhRVUZQTEVkQlFVY3NRMEZCUXp0TFFVTmFPenRCUVVWRUxFOUJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRMnhFTEU5QlFVY3NRMEZCUXl4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRE8wRkJRM0pDTEU5QlFVY3NRMEZCUXl4alFVRmpMRWRCUVVjc1EwRkJReXhEUVVGRE96dEJRVVYyUWl4WFFVRlBMRWRCUVVjc1EwRkJRenRIUVVOYU96dEJRVVZFTEdGQlFWY3NSVUZCUlN4eFFrRkJVeXhUUVVGVExFVkJRVVVzU1VGQlNTeEZRVUZGTEZkQlFWY3NSVUZCUlR0QlFVTnNSQ3hSUVVGSkxFMUJRVTBzUjBGQlJ5eEZRVUZGTzFGQlEySXNWVUZCVlN4SFFVRkhMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03UVVGRE1VVXNVVUZCU1N4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFRRVUZUTEVWQlFVVXNTVUZCU1N4RlFVRkZMRkZCUVZFc1EwRkJRenRSUVVNeFJDeFhRVUZYTEVkQlFVY3NTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkRka0lzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRU5CUVVNc2JVSkJRV01zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZEYkVRc1EwRkJReXhEUVVOR0xITkRRVU5HTEVOQlFVTTdPMEZCUlVvc1YwRkJUenRCUVVOTUxGbEJRVTBzUlVGQlJTeE5RVUZOTzBGQlEyUXNaMEpCUVZVc1JVRkJSU3hWUVVGVk8wRkJRM1JDTEZWQlFVa3NSVUZCUlN4WFFVRlhPMEZCUTJwQ0xHZENRVUZWTEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzB0QlEzcERMRU5CUVVNN1IwRkRTRHM3UVVGRlJDeGhRVUZYTEVWQlFVVXNjVUpCUVZNc1RVRkJUU3hGUVVGRkxGTkJRVk1zUlVGQlJTeE5RVUZOTEVWQlFVVTdRVUZETDBNc1VVRkJTU3hQUVVGUExFZEJRVWNzUlVGQlJUdFJRVU5rTEZGQlFWRXNSMEZCUnl4RlFVRkZPMUZCUTJJc1MwRkJTeXhIUVVGSExFVkJRVVU3VVVGRFZpeEhRVUZITEVkQlFVY3NSVUZCUlR0UlFVTlNMRlZCUVZVc1IwRkJSeXhEUVVGRExFMUJRVTA3VVVGRGNFSXNTMEZCU3l4WlFVRkJMRU5CUVVNN08wRkJSVklzVVVGQlNTeFZRVUZWTEVWQlFVVTdRVUZEWkN4WlFVRk5MRWRCUVVjc1JVRkJSU3hEUVVGRE8wdEJRMkk3TzBGQlJVUXNWMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUTNwRExGZEJRVThzUTBGQlF5eEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE96dEJRVVV2UWl4UlFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGFrSXNZVUZCVHl4RFFVRkRMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeEZRVUZGTEVOQlFVTTdTMEZEYmtNN1FVRkRSQ3hSUVVGSkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZEY2tJc1lVRkJUeXhEUVVGRExGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1FVRkRjRU1zWVVGQlR5eERRVUZETEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03UzBGRGVFTTdPMEZCUlVRc1VVRkJTU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlR0UlFVTXpRaXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPenM3TzBGQlNUVkNMRkZCUVVrc1QwRkJUeXhKUVVGSkxFOUJRVThzUlVGQlJUdEJRVU4wUWl4aFFVRlBMRU5CUVVNc1JVRkJSU3hIUVVGSExFOUJRVThzU1VGQlNTeG5Ra0ZCWjBJc1EwRkJRenRCUVVONlF5eGhRVUZQTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTlCUVU4c1NVRkJTU3huUWtGQlowSXNRMEZCUXp0TFFVTXZRenM3T3p0QlFVbEVMRkZCUVVrc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF6dEJRVU5zUWl4WFFVRlBMRU5CUVVNc1JVRkJSU3hGUVVGRk8wRkJRMVlzVjBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1EwRkJRenRCUVVONFFpeFpRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRE96dEJRVVZzUWl4VlFVRkpMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRGFrSXNWMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXp0UFFVTXhRanRCUVVORUxGVkJRVWtzU1VGQlNTeERRVUZETEZsQlFWa3NSVUZCUlR0QlFVTnlRaXhoUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8wRkJRek5DTEdkQ1FVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMDlCUXk5Q08wdEJRMFk3TzBGQlJVUXNVVUZCU1N4VlFVRlZMRVZCUVVVN1FVRkRaQ3hoUVVGUExFTkJRVU1zU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzB0QlEyeEVPenRCUVVWRUxGRkJRVWtzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlR0QlFVTnFRaXhoUVVGUExFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzB0QlF6bERPMEZCUTBRc1VVRkJTU3hKUVVGSkxFTkJRVU1zV1VGQldTeEZRVUZGTzBGQlEzSkNMR0ZCUVU4c1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03UVVGRGFrUXNZVUZCVHl4RFFVRkRMRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRMUVVONFJEczdRVUZGUkN4UlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEZRVUZGTzBGQlEzSkNMR0ZCUVU4c1EwRkJReXhKUVVGSkxFZEJRVWNzVFVGQlRTeERRVUZETzB0QlEzWkNPMEZCUTBRc1VVRkJTU3hKUVVGSkxFTkJRVU1zWTBGQll5eEZRVUZGTzBGQlEzWkNMR0ZCUVU4c1EwRkJReXhYUVVGWExFZEJRVWNzWVVGQllTeERRVUZETzB0QlEzSkRPMEZCUTBRc1YwRkJUeXhQUVVGUExFTkJRVU03UjBGRGFFSTdPMEZCUlVRc2FVSkJRV1VzUlVGQlJTeDVRa0ZCVXl4TlFVRk5MRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUlVGQlJTeFhRVUZYTEVWQlFVVTdRVUZEYUVVc1VVRkJTU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1UwRkJVeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6RkVMRmRCUVU4c1EwRkJReXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzBGQlF6RkVMRmRCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTNSRExGRkJRVWtzVjBGQlZ5eEZRVUZGTzBGQlEyWXNWVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dEJRVU0xUWl4WlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzBGQlEzWkNMR0ZCUVU4c1EwRkJReXhWUVVGVkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdTMEZET1VJc1RVRkJUU3hKUVVGSkxFMUJRVTBzUlVGQlJUdEJRVU5xUWl4WlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzSkNMR0ZCUVU4c1JVRkJSU3hEUVVGRE8wdEJRMWdzVFVGQlRUdEJRVU5NTEdGQlFVOHNUMEZCVHl4RFFVRkRPMHRCUTJoQ08wZEJRMFk3UTBGRFJpeERRVUZET3p0QlFVVkdMRU5CUVVNc1dVRkJWenRCUVVOV0xFMUJRVTBzWVVGQllTeEhRVUZITEVOQlEzQkNMRzlDUVVGdlFpeEhRVU53UWl3eVFrRkJNa0lzUjBGRE0wSXNlVUpCUVhsQ0xFZEJRM3BDTERoQ1FVRTRRaXhIUVVNNVFpeHRRa0ZCYlVJc1IwRkRia0lzWjBKQlFXZENMRWRCUTJoQ0xIVkNRVUYxUWl4SFFVTjJRaXd3UWtGQk1FSXNSMEZETVVJc2EwTkJRV3RETEVkQlEyeERMREJDUVVFd1FpeEhRVU14UWl4cFEwRkJhVU1zUjBGRGFrTXNOa0pCUVRaQ0xFZEJRemRDTEN0Q1FVRXJRaXhIUVVNdlFpeDVRMEZCZVVNc1IwRkRla01zZFVOQlFYVkRMRWRCUTNaRExHdENRVUZyUWl4RFFVRkJMRU5CUTJ4Q0xFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXpzN1FVRkZZaXhOUVVGTkxHRkJRV0VzUjBGQlNTeHJRa0ZCYTBJc1EwRkJReXhqUVVGakxFZEJRVWNzUlVGQlJTeEJRVUZETEVOQlFVTTdPMEZCUlM5RUxFOUJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRGNFUXNhVUpCUVdFc1EwRkJReXhoUVVGaExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1IwRkRlRU03UTBGRFJpeERRVUZCTEVWQlFVY3NRMEZCUXpzN096czdRVUZMVEN4clFrRkJhMElzUTBGQlF5dzJRa0ZCTmtJc1IwRkJSeXhWUVVGVExFbEJRVWtzUlVGQlJUdEJRVU5vUlN4VFFVTkZMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVONFF5dzBRa0ZCTkVJc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlEzWkRPME5CUTBnc1EwRkJRenM3UVVGRlJpeFRRVUZUTEZsQlFWa3NRMEZCUXl4bFFVRmxMRVZCUVVVc1VVRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeEpRVUZKTEVWQlFVVTdRVUZETlVRc1RVRkJTU3hMUVVGTExFZEJRVWNzVVVGQlVTeERRVUZETEZGQlFWRXNSVUZCUlR0TlFVTTNRaXhEUVVGRExFZEJRVWNzUTBGQlF6dE5RVU5NTEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNc1RVRkJUU3hEUVVGRE8wRkJRM0pDTEUxQlFVa3NaVUZCWlN4RlFVRkZPMEZCUTI1Q0xFOUJRVWNzUlVGQlJTeERRVUZETzBkQlExQTdPMEZCUlVRc1UwRkJUeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTI1Q0xGTkJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTXNWVUZCVlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1IwRkRjRVE3TzBGQlJVUXNUVUZCU1N4bFFVRmxMRVZCUVVVN1FVRkRia0lzVjBGQlR5eERRVU5NTEZGQlFWRXNRMEZCUXl4VFFVRlRMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSVUZEZEVNc1IwRkJSeXhGUVVOSUxFdEJRVXNzUlVGRFRDeEpRVUZKTEVWQlEwb3NVVUZCVVN4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZETDBJc1NVRkJTU3hGUVVOS0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhsUVVGbExFTkJRVU1zUlVGREwwTXNTVUZCU1N4RFFVTk1MRU5CUVVNN1IwRkRTQ3hOUVVGTk8wRkJRMHdzVjBGQlR5eExRVUZMTEVOQlFVTTdSMEZEWkR0RFFVTkdPenR4UWtGRll5eHJRa0ZCYTBJaUxDSm1hV3hsSWpvaWFtRjJZWE5qY21sd2RDMWpiMjF3YVd4bGNpNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3SUVOUFRWQkpURVZTWDFKRlZrbFRTVTlPTENCU1JWWkpVMGxQVGw5RFNFRk9SMFZUSUgwZ1puSnZiU0FuTGk0dlltRnpaU2M3WEc1cGJYQnZjblFnUlhoalpYQjBhVzl1SUdaeWIyMGdKeTR1TDJWNFkyVndkR2x2YmljN1hHNXBiWEJ2Y25RZ2V5QnBjMEZ5Y21GNUlIMGdabkp2YlNBbkxpNHZkWFJwYkhNbk8xeHVhVzF3YjNKMElFTnZaR1ZIWlc0Z1puSnZiU0FuTGk5amIyUmxMV2RsYmljN1hHNWNibVoxYm1OMGFXOXVJRXhwZEdWeVlXd29kbUZzZFdVcElIdGNiaUFnZEdocGN5NTJZV3gxWlNBOUlIWmhiSFZsTzF4dWZWeHVYRzVtZFc1amRHbHZiaUJLWVhaaFUyTnlhWEIwUTI5dGNHbHNaWElvS1NCN2ZWeHVYRzVLWVhaaFUyTnlhWEIwUTI5dGNHbHNaWEl1Y0hKdmRHOTBlWEJsSUQwZ2UxeHVJQ0F2THlCUVZVSk1TVU1nUVZCSk9pQlpiM1VnWTJGdUlHOTJaWEp5YVdSbElIUm9aWE5sSUcxbGRHaHZaSE1nYVc0Z1lTQnpkV0pqYkdGemN5QjBieUJ3Y205MmFXUmxYRzRnSUM4dklHRnNkR1Z5Ym1GMGFYWmxJR052YlhCcGJHVmtJR1p2Y20xeklHWnZjaUJ1WVcxbElHeHZiMnQxY0NCaGJtUWdZblZtWm1WeWFXNW5JSE5sYldGdWRHbGpjMXh1SUNCdVlXMWxURzl2YTNWd09pQm1kVzVqZEdsdmJpaHdZWEpsYm5Rc0lHNWhiV1VnTHlvc0lDQjBlWEJsSUNvdktTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVhVzUwWlhKdVlXeE9ZVzFsVEc5dmEzVndLSEJoY21WdWRDd2dibUZ0WlNrN1hHNGdJSDBzWEc0Z0lHUmxjSFJvWldSTWIyOXJkWEE2SUdaMWJtTjBhVzl1S0c1aGJXVXBJSHRjYmlBZ0lDQnlaWFIxY200Z1czUm9hWE11WVd4cFlYTmhZbXhsS0NkamIyNTBZV2x1WlhJdWJHOXZhM1Z3Snlrc0lDY29aR1Z3ZEdoekxDQmNJaWNzSUc1aGJXVXNJQ2RjSWlrblhUdGNiaUFnZlN4Y2JseHVJQ0JqYjIxd2FXeGxja2x1Wm04NklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lHTnZibk4wSUhKbGRtbHphVzl1SUQwZ1EwOU5VRWxNUlZKZlVrVldTVk5KVDA0c1hHNGdJQ0FnSUNCMlpYSnphVzl1Y3lBOUlGSkZWa2xUU1U5T1gwTklRVTVIUlZOYmNtVjJhWE5wYjI1ZE8xeHVJQ0FnSUhKbGRIVnliaUJiY21WMmFYTnBiMjRzSUhabGNuTnBiMjV6WFR0Y2JpQWdmU3hjYmx4dUlDQmhjSEJsYm1SVWIwSjFabVpsY2pvZ1puVnVZM1JwYjI0b2MyOTFjbU5sTENCc2IyTmhkR2x2Yml3Z1pYaHdiR2xqYVhRcElIdGNiaUFnSUNBdkx5QkdiM0pqWlNCaElITnZkWEpqWlNCaGN5QjBhR2x6SUhOcGJYQnNhV1pwWlhNZ2RHaGxJRzFsY21kbElHeHZaMmxqTGx4dUlDQWdJR2xtSUNnaGFYTkJjbkpoZVNoemIzVnlZMlVwS1NCN1hHNGdJQ0FnSUNCemIzVnlZMlVnUFNCYmMyOTFjbU5sWFR0Y2JpQWdJQ0I5WEc0Z0lDQWdjMjkxY21ObElEMGdkR2hwY3k1emIzVnlZMlV1ZDNKaGNDaHpiM1Z5WTJVc0lHeHZZMkYwYVc5dUtUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxtVnVkbWx5YjI1dFpXNTBMbWx6VTJsdGNHeGxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdXeWR5WlhSMWNtNGdKeXdnYzI5MWNtTmxMQ0FuT3lkZE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb1pYaHdiR2xqYVhRcElIdGNiaUFnSUNBZ0lDOHZJRlJvYVhNZ2FYTWdZU0JqWVhObElIZG9aWEpsSUhSb1pTQmlkV1ptWlhJZ2IzQmxjbUYwYVc5dUlHOWpZM1Z5Y3lCaGN5QmhJR05vYVd4a0lHOW1JR0Z1YjNSb1pYSmNiaUFnSUNBZ0lDOHZJR052Ym5OMGNuVmpkQ3dnWjJWdVpYSmhiR3g1SUdKeVlXTmxjeTRnVjJVZ2FHRjJaU0IwYnlCbGVIQnNhV05wZEd4NUlHOTFkSEIxZENCMGFHVnpaU0JpZFdabVpYSmNiaUFnSUNBZ0lDOHZJRzl3WlhKaGRHbHZibk1nZEc4Z1pXNXpkWEpsSUhSb1lYUWdkR2hsSUdWdGFYUjBaV1FnWTI5a1pTQm5iMlZ6SUdsdUlIUm9aU0JqYjNKeVpXTjBJR3h2WTJGMGFXOXVMbHh1SUNBZ0lDQWdjbVYwZFhKdUlGc25ZblZtWm1WeUlDczlJQ2NzSUhOdmRYSmpaU3dnSnpzblhUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYzI5MWNtTmxMbUZ3Y0dWdVpGUnZRblZtWm1WeUlEMGdkSEoxWlR0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ6YjNWeVkyVTdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJR2x1YVhScFlXeHBlbVZDZFdabVpYSTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5GMWIzUmxaRk4wY21sdVp5Z25KeWs3WEc0Z0lIMHNYRzRnSUM4dklFVk9SQ0JRVlVKTVNVTWdRVkJKWEc0Z0lHbHVkR1Z5Ym1Gc1RtRnRaVXh2YjJ0MWNEb2dablZ1WTNScGIyNG9jR0Z5Wlc1MExDQnVZVzFsS1NCN1hHNGdJQ0FnZEdocGN5NXNiMjlyZFhCUWNtOXdaWEowZVVaMWJtTjBhVzl1U1hOVmMyVmtJRDBnZEhKMVpUdGNiaUFnSUNCeVpYUjFjbTRnV3lkc2IyOXJkWEJRY205d1pYSjBlU2duTENCd1lYSmxiblFzSUNjc0p5d2dTbE5QVGk1emRISnBibWRwWm5rb2JtRnRaU2tzSUNjcEoxMDdYRzRnSUgwc1hHNWNiaUFnYkc5dmEzVndVSEp2Y0dWeWRIbEdkVzVqZEdsdmJrbHpWWE5sWkRvZ1ptRnNjMlVzWEc1Y2JpQWdZMjl0Y0dsc1pUb2dablZ1WTNScGIyNG9aVzUyYVhKdmJtMWxiblFzSUc5d2RHbHZibk1zSUdOdmJuUmxlSFFzSUdGelQySnFaV04wS1NCN1hHNGdJQ0FnZEdocGN5NWxiblpwY205dWJXVnVkQ0E5SUdWdWRtbHliMjV0Wlc1ME8xeHVJQ0FnSUhSb2FYTXViM0IwYVc5dWN5QTlJRzl3ZEdsdmJuTTdYRzRnSUNBZ2RHaHBjeTV6ZEhKcGJtZFFZWEpoYlhNZ1BTQjBhR2x6TG05d2RHbHZibk11YzNSeWFXNW5VR0Z5WVcxek8xeHVJQ0FnSUhSb2FYTXVkSEpoWTJ0SlpITWdQU0IwYUdsekxtOXdkR2x2Ym5NdWRISmhZMnRKWkhNN1hHNGdJQ0FnZEdocGN5NXdjbVZqYjIxd2FXeGxJRDBnSVdGelQySnFaV04wTzF4dVhHNGdJQ0FnZEdocGN5NXVZVzFsSUQwZ2RHaHBjeTVsYm5acGNtOXViV1Z1ZEM1dVlXMWxPMXh1SUNBZ0lIUm9hWE11YVhORGFHbHNaQ0E5SUNFaFkyOXVkR1Y0ZER0Y2JpQWdJQ0IwYUdsekxtTnZiblJsZUhRZ1BTQmpiMjUwWlhoMElIeDhJSHRjYmlBZ0lDQWdJR1JsWTI5eVlYUnZjbk02SUZ0ZExGeHVJQ0FnSUNBZ2NISnZaM0poYlhNNklGdGRMRnh1SUNBZ0lDQWdaVzUyYVhKdmJtMWxiblJ6T2lCYlhWeHVJQ0FnSUgwN1hHNWNiaUFnSUNCMGFHbHpMbkJ5WldGdFlteGxLQ2s3WEc1Y2JpQWdJQ0IwYUdsekxuTjBZV05yVTJ4dmRDQTlJREE3WEc0Z0lDQWdkR2hwY3k1emRHRmphMVpoY25NZ1BTQmJYVHRjYmlBZ0lDQjBhR2x6TG1Gc2FXRnpaWE1nUFNCN2ZUdGNiaUFnSUNCMGFHbHpMbkpsWjJsemRHVnljeUE5SUhzZ2JHbHpkRG9nVzEwZ2ZUdGNiaUFnSUNCMGFHbHpMbWhoYzJobGN5QTlJRnRkTzF4dUlDQWdJSFJvYVhNdVkyOXRjR2xzWlZOMFlXTnJJRDBnVzEwN1hHNGdJQ0FnZEdocGN5NXBibXhwYm1WVGRHRmpheUE5SUZ0ZE8xeHVJQ0FnSUhSb2FYTXVZbXh2WTJ0UVlYSmhiWE1nUFNCYlhUdGNibHh1SUNBZ0lIUm9hWE11WTI5dGNHbHNaVU5vYVd4a2NtVnVLR1Z1ZG1seWIyNXRaVzUwTENCdmNIUnBiMjV6S1R0Y2JseHVJQ0FnSUhSb2FYTXVkWE5sUkdWd2RHaHpJRDFjYmlBZ0lDQWdJSFJvYVhNdWRYTmxSR1Z3ZEdoeklIeDhYRzRnSUNBZ0lDQmxiblpwY205dWJXVnVkQzUxYzJWRVpYQjBhSE1nZkh4Y2JpQWdJQ0FnSUdWdWRtbHliMjV0Wlc1MExuVnpaVVJsWTI5eVlYUnZjbk1nZkh4Y2JpQWdJQ0FnSUhSb2FYTXViM0IwYVc5dWN5NWpiMjF3WVhRN1hHNGdJQ0FnZEdocGN5NTFjMlZDYkc5amExQmhjbUZ0Y3lBOUlIUm9hWE11ZFhObFFteHZZMnRRWVhKaGJYTWdmSHdnWlc1MmFYSnZibTFsYm5RdWRYTmxRbXh2WTJ0UVlYSmhiWE03WEc1Y2JpQWdJQ0JzWlhRZ2IzQmpiMlJsY3lBOUlHVnVkbWx5YjI1dFpXNTBMbTl3WTI5a1pYTXNYRzRnSUNBZ0lDQnZjR052WkdVc1hHNGdJQ0FnSUNCbWFYSnpkRXh2WXl4Y2JpQWdJQ0FnSUdrc1hHNGdJQ0FnSUNCc08xeHVYRzRnSUNBZ1ptOXlJQ2hwSUQwZ01Dd2diQ0E5SUc5d1kyOWtaWE11YkdWdVozUm9PeUJwSUR3Z2JEc2dhU3NyS1NCN1hHNGdJQ0FnSUNCdmNHTnZaR1VnUFNCdmNHTnZaR1Z6VzJsZE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG5OdmRYSmpaUzVqZFhKeVpXNTBURzlqWVhScGIyNGdQU0J2Y0dOdlpHVXViRzlqTzF4dUlDQWdJQ0FnWm1seWMzUk1iMk1nUFNCbWFYSnpkRXh2WXlCOGZDQnZjR052WkdVdWJHOWpPMXh1SUNBZ0lDQWdkR2hwYzF0dmNHTnZaR1V1YjNCamIyUmxYUzVoY0hCc2VTaDBhR2x6TENCdmNHTnZaR1V1WVhKbmN5azdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdSbXgxYzJnZ1lXNTVJSFJ5WVdsc2FXNW5JR052Ym5SbGJuUWdkR2hoZENCdGFXZG9kQ0JpWlNCd1pXNWthVzVuTGx4dUlDQWdJSFJvYVhNdWMyOTFjbU5sTG1OMWNuSmxiblJNYjJOaGRHbHZiaUE5SUdacGNuTjBURzlqTzF4dUlDQWdJSFJvYVhNdWNIVnphRk52ZFhKalpTZ25KeWs3WEc1Y2JpQWdJQ0F2S2lCcGMzUmhibUoxYkNCcFoyNXZjbVVnYm1WNGRDQXFMMXh1SUNBZ0lHbG1JQ2gwYUdsekxuTjBZV05yVTJ4dmRDQjhmQ0IwYUdsekxtbHViR2x1WlZOMFlXTnJMbXhsYm1kMGFDQjhmQ0IwYUdsekxtTnZiWEJwYkdWVGRHRmpheTVzWlc1bmRHZ3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGZUdObGNIUnBiMjRvSjBOdmJYQnBiR1VnWTI5dGNHeGxkR1ZrSUhkcGRHZ2dZMjl1ZEdWdWRDQnNaV1owSUc5dUlITjBZV05ySnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1SbFkyOXlZWFJ2Y25NdWFYTkZiWEIwZVNncEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5WelpVUmxZMjl5WVhSdmNuTWdQU0IwY25WbE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG1SbFkyOXlZWFJ2Y25NdWNISmxjR1Z1WkNoYlhHNGdJQ0FnSUNBZ0lDZDJZWElnWkdWamIzSmhkRzl5Y3lBOUlHTnZiblJoYVc1bGNpNWtaV052Y21GMGIzSnpMQ0FuTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbXh2YjJ0MWNGQnliM0JsY25SNVJuVnVZM1JwYjI1V1lYSkVaV05zWVhKaGRHbHZiaWdwTEZ4dUlDQWdJQ0FnSUNBbk8xeGNiaWRjYmlBZ0lDQWdJRjBwTzF4dUlDQWdJQ0FnZEdocGN5NWtaV052Y21GMGIzSnpMbkIxYzJnb0ozSmxkSFZ5YmlCbWJqc25LVHRjYmx4dUlDQWdJQ0FnYVdZZ0tHRnpUMkpxWldOMEtTQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpHVmpiM0poZEc5eWN5QTlJRVoxYm1OMGFXOXVMbUZ3Y0d4NUtIUm9hWE1zSUZ0Y2JpQWdJQ0FnSUNBZ0lDQW5abTRuTEZ4dUlDQWdJQ0FnSUNBZ0lDZHdjbTl3Y3ljc1hHNGdJQ0FnSUNBZ0lDQWdKMk52Ym5SaGFXNWxjaWNzWEc0Z0lDQWdJQ0FnSUNBZ0oyUmxjSFJvTUNjc1hHNGdJQ0FnSUNBZ0lDQWdKMlJoZEdFbkxGeHVJQ0FnSUNBZ0lDQWdJQ2RpYkc5amExQmhjbUZ0Y3ljc1hHNGdJQ0FnSUNBZ0lDQWdKMlJsY0hSb2N5Y3NYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWtaV052Y21GMGIzSnpMbTFsY21kbEtDbGNiaUFnSUNBZ0lDQWdYU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtUmxZMjl5WVhSdmNuTXVjSEpsY0dWdVpDaGNiaUFnSUNBZ0lDQWdJQ0FuWm5WdVkzUnBiMjRvWm00c0lIQnliM0J6TENCamIyNTBZV2x1WlhJc0lHUmxjSFJvTUN3Z1pHRjBZU3dnWW14dlkydFFZWEpoYlhNc0lHUmxjSFJvY3lrZ2UxeGNiaWRjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVrWldOdmNtRjBiM0p6TG5CMWMyZ29KMzFjWEc0bktUdGNiaUFnSUNBZ0lDQWdkR2hwY3k1a1pXTnZjbUYwYjNKeklEMGdkR2hwY3k1a1pXTnZjbUYwYjNKekxtMWxjbWRsS0NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdVpHVmpiM0poZEc5eWN5QTlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnWm00Z1BTQjBhR2x6TG1OeVpXRjBaVVoxYm1OMGFXOXVRMjl1ZEdWNGRDaGhjMDlpYW1WamRDazdYRzRnSUNBZ2FXWWdLQ0YwYUdsekxtbHpRMmhwYkdRcElIdGNiaUFnSUNBZ0lHeGxkQ0J5WlhRZ1BTQjdYRzRnSUNBZ0lDQWdJR052YlhCcGJHVnlPaUIwYUdsekxtTnZiWEJwYkdWeVNXNW1ieWdwTEZ4dUlDQWdJQ0FnSUNCdFlXbHVPaUJtYmx4dUlDQWdJQ0FnZlR0Y2JseHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVpHVmpiM0poZEc5eWN5a2dlMXh1SUNBZ0lDQWdJQ0J5WlhRdWJXRnBibDlrSUQwZ2RHaHBjeTVrWldOdmNtRjBiM0p6T3lBdkx5QmxjMnhwYm5RdFpHbHpZV0pzWlMxc2FXNWxJR05oYldWc1kyRnpaVnh1SUNBZ0lDQWdJQ0J5WlhRdWRYTmxSR1ZqYjNKaGRHOXljeUE5SUhSeWRXVTdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR3hsZENCN0lIQnliMmR5WVcxekxDQmtaV052Y21GMGIzSnpJSDBnUFNCMGFHbHpMbU52Ym5SbGVIUTdYRzRnSUNBZ0lDQm1iM0lnS0drZ1BTQXdMQ0JzSUQwZ2NISnZaM0poYlhNdWJHVnVaM1JvT3lCcElEd2diRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR2xtSUNod2NtOW5jbUZ0YzF0cFhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRGdHBYU0E5SUhCeWIyZHlZVzF6VzJsZE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNoa1pXTnZjbUYwYjNKelcybGRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFJiYVNBcklDZGZaQ2RkSUQwZ1pHVmpiM0poZEc5eWMxdHBYVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkQzUxYzJWRVpXTnZjbUYwYjNKeklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11Wlc1MmFYSnZibTFsYm5RdWRYTmxVR0Z5ZEdsaGJDa2dlMXh1SUNBZ0lDQWdJQ0J5WlhRdWRYTmxVR0Z5ZEdsaGJDQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9kR2hwY3k1dmNIUnBiMjV6TG1SaGRHRXBJSHRjYmlBZ0lDQWdJQ0FnY21WMExuVnpaVVJoZEdFZ1BTQjBjblZsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11ZFhObFJHVndkR2h6S1NCN1hHNGdJQ0FnSUNBZ0lISmxkQzUxYzJWRVpYQjBhSE1nUFNCMGNuVmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVkWE5sUW14dlkydFFZWEpoYlhNcElIdGNiaUFnSUNBZ0lDQWdjbVYwTG5WelpVSnNiMk5yVUdGeVlXMXpJRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxtOXdkR2x2Ym5NdVkyOXRjR0YwS1NCN1hHNGdJQ0FnSUNBZ0lISmxkQzVqYjIxd1lYUWdQU0IwY25WbE8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnBaaUFvSVdGelQySnFaV04wS1NCN1hHNGdJQ0FnSUNBZ0lISmxkQzVqYjIxd2FXeGxjaUE5SUVwVFQwNHVjM1J5YVc1bmFXWjVLSEpsZEM1amIyMXdhV3hsY2lrN1hHNWNiaUFnSUNBZ0lDQWdkR2hwY3k1emIzVnlZMlV1WTNWeWNtVnVkRXh2WTJGMGFXOXVJRDBnZXlCemRHRnlkRG9nZXlCc2FXNWxPaUF4TENCamIyeDFiVzQ2SURBZ2ZTQjlPMXh1SUNBZ0lDQWdJQ0J5WlhRZ1BTQjBhR2x6TG05aWFtVmpkRXhwZEdWeVlXd29jbVYwS1R0Y2JseHVJQ0FnSUNBZ0lDQnBaaUFvYjNCMGFXOXVjeTV6Y21OT1lXMWxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBJRDBnY21WMExuUnZVM1J5YVc1blYybDBhRk52ZFhKalpVMWhjQ2g3SUdacGJHVTZJRzl3ZEdsdmJuTXVaR1Z6ZEU1aGJXVWdmU2s3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBMbTFoY0NBOUlISmxkQzV0WVhBZ0ppWWdjbVYwTG0xaGNDNTBiMU4wY21sdVp5Z3BPMXh1SUNBZ0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRDQTlJSEpsZEM1MGIxTjBjbWx1WnlncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQnlaWFF1WTI5dGNHbHNaWEpQY0hScGIyNXpJRDBnZEdocGN5NXZjSFJwYjI1ek8xeHVJQ0FnSUNBZ2ZWeHVYRzRnSUNBZ0lDQnlaWFIxY200Z2NtVjBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWm00N1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lIQnlaV0Z0WW14bE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQXZMeUIwY21GamF5QjBhR1VnYkdGemRDQmpiMjUwWlhoMElIQjFjMmhsWkNCcGJuUnZJSEJzWVdObElIUnZJR0ZzYkc5M0lITnJhWEJ3YVc1bklIUm9aVnh1SUNBZ0lDOHZJR2RsZEVOdmJuUmxlSFFnYjNCamIyUmxJSGRvWlc0Z2FYUWdkMjkxYkdRZ1ltVWdZU0J1YjI5d1hHNGdJQ0FnZEdocGN5NXNZWE4wUTI5dWRHVjRkQ0E5SURBN1hHNGdJQ0FnZEdocGN5NXpiM1Z5WTJVZ1BTQnVaWGNnUTI5a1pVZGxiaWgwYUdsekxtOXdkR2x2Ym5NdWMzSmpUbUZ0WlNrN1hHNGdJQ0FnZEdocGN5NWtaV052Y21GMGIzSnpJRDBnYm1WM0lFTnZaR1ZIWlc0b2RHaHBjeTV2Y0hScGIyNXpMbk55WTA1aGJXVXBPMXh1SUNCOUxGeHVYRzRnSUdOeVpXRjBaVVoxYm1OMGFXOXVRMjl1ZEdWNGREb2dablZ1WTNScGIyNG9ZWE5QWW1wbFkzUXBJSHRjYmlBZ0lDQnNaWFFnZG1GeVJHVmpiR0Z5WVhScGIyNXpJRDBnSnljN1hHNWNiaUFnSUNCc1pYUWdiRzlqWVd4eklEMGdkR2hwY3k1emRHRmphMVpoY25NdVkyOXVZMkYwS0hSb2FYTXVjbVZuYVhOMFpYSnpMbXhwYzNRcE8xeHVJQ0FnSUdsbUlDaHNiMk5oYkhNdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdkbUZ5UkdWamJHRnlZWFJwYjI1eklDczlJQ2NzSUNjZ0t5QnNiMk5oYkhNdWFtOXBiaWduTENBbktUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QkhaVzVsY21GMFpTQnRhVzVwYldsNlpYSWdZV3hwWVhNZ2JXRndjR2x1WjNOY2JpQWdJQ0F2TDF4dUlDQWdJQzh2SUZkb1pXNGdkWE5wYm1jZ2RISjFaU0JUYjNWeVkyVk9iMlJsY3l3Z2RHaHBjeUIzYVd4c0lIVndaR0YwWlNCaGJHd2djbVZtWlhKbGJtTmxjeUIwYnlCMGFHVWdaMmwyWlc0Z1lXeHBZWE5jYmlBZ0lDQXZMeUJoY3lCMGFHVWdjMjkxY21ObElHNXZaR1Z6SUdGeVpTQnlaWFZ6WldRZ2FXNGdjMmwwZFM0Z1JtOXlJSFJvWlNCdWIyNHRjMjkxY21ObElHNXZaR1VnWTI5dGNHbHNZWFJwYjI0Z2JXOWtaU3hjYmlBZ0lDQXZMeUJoYkdsaGMyVnpJSGRwYkd3Z2JtOTBJR0psSUhWelpXUXNJR0oxZENCMGFHbHpJR05oYzJVZ2FYTWdZV3h5WldGa2VTQmlaV2x1WnlCeWRXNGdiMjRnZEdobElHTnNhV1Z1ZENCaGJtUmNiaUFnSUNBdkx5QjNaU0JoY21WdUozUWdZMjl1WTJWeWJpQmhZbTkxZENCdGFXNXBiV2w2YVc1bklIUm9aU0IwWlcxd2JHRjBaU0J6YVhwbExseHVJQ0FnSUd4bGRDQmhiR2xoYzBOdmRXNTBJRDBnTUR0Y2JpQWdJQ0JQWW1wbFkzUXVhMlY1Y3loMGFHbHpMbUZzYVdGelpYTXBMbVp2Y2tWaFkyZ29ZV3hwWVhNZ1BUNGdlMXh1SUNBZ0lDQWdiR1YwSUc1dlpHVWdQU0IwYUdsekxtRnNhV0Z6WlhOYllXeHBZWE5kTzF4dUlDQWdJQ0FnYVdZZ0tHNXZaR1V1WTJocGJHUnlaVzRnSmlZZ2JtOWtaUzV5WldabGNtVnVZMlZEYjNWdWRDQStJREVwSUh0Y2JpQWdJQ0FnSUNBZ2RtRnlSR1ZqYkdGeVlYUnBiMjV6SUNzOUlDY3NJR0ZzYVdGekp5QXJJQ3NyWVd4cFlYTkRiM1Z1ZENBcklDYzlKeUFySUdGc2FXRnpPMXh1SUNBZ0lDQWdJQ0J1YjJSbExtTm9hV3hrY21WdVd6QmRJRDBnSjJGc2FXRnpKeUFySUdGc2FXRnpRMjkxYm5RN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNWNiaUFnSUNCcFppQW9kR2hwY3k1c2IyOXJkWEJRY205d1pYSjBlVVoxYm1OMGFXOXVTWE5WYzJWa0tTQjdYRzRnSUNBZ0lDQjJZWEpFWldOc1lYSmhkR2x2Ym5NZ0t6MGdKeXdnSnlBcklIUm9hWE11Ykc5dmEzVndVSEp2Y0dWeWRIbEdkVzVqZEdsdmJsWmhja1JsWTJ4aGNtRjBhVzl1S0NrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYkdWMElIQmhjbUZ0Y3lBOUlGc25ZMjl1ZEdGcGJtVnlKeXdnSjJSbGNIUm9NQ2NzSUNkb1pXeHdaWEp6Snl3Z0ozQmhjblJwWVd4ekp5d2dKMlJoZEdFblhUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxuVnpaVUpzYjJOclVHRnlZVzF6SUh4OElIUm9hWE11ZFhObFJHVndkR2h6S1NCN1hHNGdJQ0FnSUNCd1lYSmhiWE11Y0hWemFDZ25ZbXh2WTJ0UVlYSmhiWE1uS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hSb2FYTXVkWE5sUkdWd2RHaHpLU0I3WEc0Z0lDQWdJQ0J3WVhKaGJYTXVjSFZ6YUNnblpHVndkR2h6SnlrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1VHVnlabTl5YlNCaElITmxZMjl1WkNCd1lYTnpJRzkyWlhJZ2RHaGxJRzkxZEhCMWRDQjBieUJ0WlhKblpTQmpiMjUwWlc1MElIZG9aVzRnY0c5emMybGliR1ZjYmlBZ0lDQnNaWFFnYzI5MWNtTmxJRDBnZEdocGN5NXRaWEpuWlZOdmRYSmpaU2gyWVhKRVpXTnNZWEpoZEdsdmJuTXBPMXh1WEc0Z0lDQWdhV1lnS0dGelQySnFaV04wS1NCN1hHNGdJQ0FnSUNCd1lYSmhiWE11Y0hWemFDaHpiM1Z5WTJVcE8xeHVYRzRnSUNBZ0lDQnlaWFIxY200Z1JuVnVZM1JwYjI0dVlYQndiSGtvZEdocGN5d2djR0Z5WVcxektUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWMyOTFjbU5sTG5keVlYQW9XMXh1SUNBZ0lDQWdJQ0FuWm5WdVkzUnBiMjRvSnl4Y2JpQWdJQ0FnSUNBZ2NHRnlZVzF6TG1wdmFXNG9KeXduS1N4Y2JpQWdJQ0FnSUNBZ0p5a2dlMXhjYmlBZ0p5eGNiaUFnSUNBZ0lDQWdjMjkxY21ObExGeHVJQ0FnSUNBZ0lDQW5mU2RjYmlBZ0lDQWdJRjBwTzF4dUlDQWdJSDFjYmlBZ2ZTeGNiaUFnYldWeVoyVlRiM1Z5WTJVNklHWjFibU4wYVc5dUtIWmhja1JsWTJ4aGNtRjBhVzl1Y3lrZ2UxeHVJQ0FnSUd4bGRDQnBjMU5wYlhCc1pTQTlJSFJvYVhNdVpXNTJhWEp2Ym0xbGJuUXVhWE5UYVcxd2JHVXNYRzRnSUNBZ0lDQmhjSEJsYm1SUGJteDVJRDBnSVhSb2FYTXVabTl5WTJWQ2RXWm1aWElzWEc0Z0lDQWdJQ0JoY0hCbGJtUkdhWEp6ZEN4Y2JpQWdJQ0FnSUhOdmRYSmpaVk5sWlc0c1hHNGdJQ0FnSUNCaWRXWm1aWEpUZEdGeWRDeGNiaUFnSUNBZ0lHSjFabVpsY2tWdVpEdGNiaUFnSUNCMGFHbHpMbk52ZFhKalpTNWxZV05vS0d4cGJtVWdQVDRnZTF4dUlDQWdJQ0FnYVdZZ0tHeHBibVV1WVhCd1pXNWtWRzlDZFdabVpYSXBJSHRjYmlBZ0lDQWdJQ0FnYVdZZ0tHSjFabVpsY2xOMFlYSjBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2JHbHVaUzV3Y21Wd1pXNWtLQ2NnSUNzZ0p5azdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJQ0FnWW5WbVptVnlVM1JoY25RZ1BTQnNhVzVsTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHSjFabVpsY2tWdVpDQTlJR3hwYm1VN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCcFppQW9ZblZtWm1WeVUzUmhjblFwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVhOdmRYSmpaVk5sWlc0cElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdGd2NHVnVaRVpwY25OMElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWW5WbVptVnlVM1JoY25RdWNISmxjR1Z1WkNnblluVm1abVZ5SUNzOUlDY3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ0lDQmlkV1ptWlhKRmJtUXVZV1JrS0NjN0p5azdYRzRnSUNBZ0lDQWdJQ0FnWW5WbVptVnlVM1JoY25RZ1BTQmlkV1ptWlhKRmJtUWdQU0IxYm1SbFptbHVaV1E3WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpiM1Z5WTJWVFpXVnVJRDBnZEhKMVpUdGNiaUFnSUNBZ0lDQWdhV1lnS0NGcGMxTnBiWEJzWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0Z3Y0dWdVpFOXViSGtnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBwTzF4dVhHNGdJQ0FnYVdZZ0tHRndjR1Z1WkU5dWJIa3BJSHRjYmlBZ0lDQWdJR2xtSUNoaWRXWm1aWEpUZEdGeWRDa2dlMXh1SUNBZ0lDQWdJQ0JpZFdabVpYSlRkR0Z5ZEM1d2NtVndaVzVrS0NkeVpYUjFjbTRnSnlrN1hHNGdJQ0FnSUNBZ0lHSjFabVpsY2tWdVpDNWhaR1FvSnpzbktUdGNiaUFnSUNBZ0lIMGdaV3h6WlNCcFppQW9JWE52ZFhKalpWTmxaVzRwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV6YjNWeVkyVXVjSFZ6YUNnbmNtVjBkWEp1SUZ3aVhDSTdKeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIWmhja1JsWTJ4aGNtRjBhVzl1Y3lBclBWeHVJQ0FnSUNBZ0lDQW5MQ0JpZFdabVpYSWdQU0FuSUNzZ0tHRndjR1Z1WkVacGNuTjBJRDhnSnljZ09pQjBhR2x6TG1sdWFYUnBZV3hwZW1WQ2RXWm1aWElvS1NrN1hHNWNiaUFnSUNBZ0lHbG1JQ2hpZFdabVpYSlRkR0Z5ZENrZ2UxeHVJQ0FnSUNBZ0lDQmlkV1ptWlhKVGRHRnlkQzV3Y21Wd1pXNWtLQ2R5WlhSMWNtNGdZblZtWm1WeUlDc2dKeWs3WEc0Z0lDQWdJQ0FnSUdKMVptWmxja1Z1WkM1aFpHUW9KenNuS1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMjkxY21ObExuQjFjMmdvSjNKbGRIVnliaUJpZFdabVpYSTdKeWs3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0haaGNrUmxZMnhoY21GMGFXOXVjeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXpiM1Z5WTJVdWNISmxjR1Z1WkNoY2JpQWdJQ0FnSUNBZ0ozWmhjaUFuSUNzZ2RtRnlSR1ZqYkdGeVlYUnBiMjV6TG5OMVluTjBjbWx1WnlneUtTQXJJQ2hoY0hCbGJtUkdhWEp6ZENBL0lDY25JRG9nSnp0Y1hHNG5LVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTV6YjNWeVkyVXViV1Z5WjJVb0tUdGNiaUFnZlN4Y2JseHVJQ0JzYjI5cmRYQlFjbTl3WlhKMGVVWjFibU4wYVc5dVZtRnlSR1ZqYkdGeVlYUnBiMjQ2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJnWEc0Z0lDQWdJQ0JzYjI5cmRYQlFjbTl3WlhKMGVTQTlJR052Ym5SaGFXNWxjaTVzYjI5cmRYQlFjbTl3WlhKMGVTQjhmQ0JtZFc1amRHbHZiaWh3WVhKbGJuUXNJSEJ5YjNCbGNuUjVUbUZ0WlNrZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvVDJKcVpXTjBMbkJ5YjNSdmRIbHdaUzVvWVhOUGQyNVFjbTl3WlhKMGVTNWpZV3hzS0hCaGNtVnVkQ3dnY0hKdmNHVnlkSGxPWVcxbEtTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ3WVhKbGJuUmJjSEp2Y0dWeWRIbE9ZVzFsWFR0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2RXNWtaV1pwYm1Wa1hHNGdJQ0FnZlZ4dUlDQWdJR0F1ZEhKcGJTZ3BPMXh1SUNCOUxGeHVYRzRnSUM4dklGdGliRzlqYTFaaGJIVmxYVnh1SUNBdkwxeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1ltVm1iM0psT2lCb1lYTm9MQ0JwYm5abGNuTmxMQ0J3Y205bmNtRnRMQ0IyWVd4MVpWeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1lXWjBaWEk2SUhKbGRIVnliaUIyWVd4MVpTQnZaaUJpYkc5amEwaGxiSEJsY2sxcGMzTnBibWRjYmlBZ0x5OWNiaUFnTHk4Z1ZHaGxJSEIxY25CdmMyVWdiMllnZEdocGN5QnZjR052WkdVZ2FYTWdkRzhnZEdGclpTQmhJR0pzYjJOcklHOW1JSFJvWlNCbWIzSnRYRzRnSUM4dklHQjdleU4wYUdsekxtWnZiMzE5TGk0dWUzc3ZkR2hwY3k1bWIyOTlmV0FzSUhKbGMyOXNkbVVnZEdobElIWmhiSFZsSUc5bUlHQm1iMjlnTENCaGJtUmNiaUFnTHk4Z2NtVndiR0ZqWlNCcGRDQnZiaUIwYUdVZ2MzUmhZMnNnZDJsMGFDQjBhR1VnY21WemRXeDBJRzltSUhCeWIzQmxjbXg1WEc0Z0lDOHZJR2x1ZG05cmFXNW5JR0pzYjJOclNHVnNjR1Z5VFdsemMybHVaeTVjYmlBZ1lteHZZMnRXWVd4MVpUb2dablZ1WTNScGIyNG9ibUZ0WlNrZ2UxeHVJQ0FnSUd4bGRDQmliRzlqYTBobGJIQmxjazFwYzNOcGJtY2dQU0IwYUdsekxtRnNhV0Z6WVdKc1pTaGNiaUFnSUNBZ0lDQWdKMk52Ym5SaGFXNWxjaTVvYjI5cmN5NWliRzlqYTBobGJIQmxjazFwYzNOcGJtY25YRzRnSUNBZ0lDQXBMRnh1SUNBZ0lDQWdjR0Z5WVcxeklEMGdXM1JvYVhNdVkyOXVkR1Y0ZEU1aGJXVW9NQ2xkTzF4dUlDQWdJSFJvYVhNdWMyVjBkWEJJWld4d1pYSkJjbWR6S0c1aGJXVXNJREFzSUhCaGNtRnRjeWs3WEc1Y2JpQWdJQ0JzWlhRZ1lteHZZMnRPWVcxbElEMGdkR2hwY3k1d2IzQlRkR0ZqYXlncE8xeHVJQ0FnSUhCaGNtRnRjeTV6Y0d4cFkyVW9NU3dnTUN3Z1lteHZZMnRPWVcxbEtUdGNibHh1SUNBZ0lIUm9hWE11Y0hWemFDaDBhR2x6TG5OdmRYSmpaUzVtZFc1amRHbHZia05oYkd3b1lteHZZMnRJWld4d1pYSk5hWE56YVc1bkxDQW5ZMkZzYkNjc0lIQmhjbUZ0Y3lrcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUZ0aGJXSnBaM1Z2ZFhOQ2JHOWphMVpoYkhWbFhWeHVJQ0F2TDF4dUlDQXZMeUJQYmlCemRHRmpheXdnWW1WbWIzSmxPaUJvWVhOb0xDQnBiblpsY25ObExDQndjbTluY21GdExDQjJZV3gxWlZ4dUlDQXZMeUJEYjIxd2FXeGxjaUIyWVd4MVpTd2dZbVZtYjNKbE9pQnNZWE4wU0dWc2NHVnlQWFpoYkhWbElHOW1JR3hoYzNRZ1ptOTFibVFnYUdWc2NHVnlMQ0JwWmlCaGJubGNiaUFnTHk4Z1QyNGdjM1JoWTJzc0lHRm1kR1Z5TENCcFppQnVieUJzWVhOMFNHVnNjR1Z5T2lCellXMWxJR0Z6SUZ0aWJHOWphMVpoYkhWbFhWeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1lXWjBaWElzSUdsbUlHeGhjM1JJWld4d1pYSTZJSFpoYkhWbFhHNGdJR0Z0WW1sbmRXOTFjMEpzYjJOclZtRnNkV1U2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUM4dklGZGxKM0psSUdKbGFXNW5JR0VnWW1sMElHTm9aV1ZyZVNCaGJtUWdjbVYxYzJsdVp5QjBhR1VnYjNCMGFXOXVjeUIyWVd4MVpTQm1jbTl0SUhSb1pTQndjbWx2Y2lCbGVHVmpYRzRnSUNBZ2JHVjBJR0pzYjJOclNHVnNjR1Z5VFdsemMybHVaeUE5SUhSb2FYTXVZV3hwWVhOaFlteGxLRnh1SUNBZ0lDQWdJQ0FuWTI5dWRHRnBibVZ5TG1odmIydHpMbUpzYjJOclNHVnNjR1Z5VFdsemMybHVaeWRjYmlBZ0lDQWdJQ2tzWEc0Z0lDQWdJQ0J3WVhKaGJYTWdQU0JiZEdocGN5NWpiMjUwWlhoMFRtRnRaU2d3S1YwN1hHNGdJQ0FnZEdocGN5NXpaWFIxY0VobGJIQmxja0Z5WjNNb0p5Y3NJREFzSUhCaGNtRnRjeXdnZEhKMVpTazdYRzVjYmlBZ0lDQjBhR2x6TG1ac2RYTm9TVzVzYVc1bEtDazdYRzVjYmlBZ0lDQnNaWFFnWTNWeWNtVnVkQ0E5SUhSb2FYTXVkRzl3VTNSaFkyc29LVHRjYmlBZ0lDQndZWEpoYlhNdWMzQnNhV05sS0RFc0lEQXNJR04xY25KbGJuUXBPMXh1WEc0Z0lDQWdkR2hwY3k1d2RYTm9VMjkxY21ObEtGdGNiaUFnSUNBZ0lDZHBaaUFvSVNjc1hHNGdJQ0FnSUNCMGFHbHpMbXhoYzNSSVpXeHdaWElzWEc0Z0lDQWdJQ0FuS1NCN0lDY3NYRzRnSUNBZ0lDQmpkWEp5Wlc1MExGeHVJQ0FnSUNBZ0p5QTlJQ2NzWEc0Z0lDQWdJQ0IwYUdsekxuTnZkWEpqWlM1bWRXNWpkR2x2YmtOaGJHd29ZbXh2WTJ0SVpXeHdaWEpOYVhOemFXNW5MQ0FuWTJGc2JDY3NJSEJoY21GdGN5a3NYRzRnSUNBZ0lDQW5mU2RjYmlBZ0lDQmRLVHRjYmlBZ2ZTeGNibHh1SUNBdkx5QmJZWEJ3Wlc1a1EyOXVkR1Z1ZEYxY2JpQWdMeTljYmlBZ0x5OGdUMjRnYzNSaFkyc3NJR0psWm05eVpUb2dMaTR1WEc0Z0lDOHZJRTl1SUhOMFlXTnJMQ0JoWm5SbGNqb2dMaTR1WEc0Z0lDOHZYRzRnSUM4dklFRndjR1Z1WkhNZ2RHaGxJSE4wY21sdVp5QjJZV3gxWlNCdlppQmdZMjl1ZEdWdWRHQWdkRzhnZEdobElHTjFjbkpsYm5RZ1luVm1abVZ5WEc0Z0lHRndjR1Z1WkVOdmJuUmxiblE2SUdaMWJtTjBhVzl1S0dOdmJuUmxiblFwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV3Wlc1a2FXNW5RMjl1ZEdWdWRDa2dlMXh1SUNBZ0lDQWdZMjl1ZEdWdWRDQTlJSFJvYVhNdWNHVnVaR2x1WjBOdmJuUmxiblFnS3lCamIyNTBaVzUwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG5CbGJtUnBibWRNYjJOaGRHbHZiaUE5SUhSb2FYTXVjMjkxY21ObExtTjFjbkpsYm5STWIyTmhkR2x2Ymp0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxuQmxibVJwYm1kRGIyNTBaVzUwSUQwZ1kyOXVkR1Z1ZER0Y2JpQWdmU3hjYmx4dUlDQXZMeUJiWVhCd1pXNWtYVnh1SUNBdkwxeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1ltVm1iM0psT2lCMllXeDFaU3dnTGk0dVhHNGdJQzh2SUU5dUlITjBZV05yTENCaFpuUmxjam9nTGk0dVhHNGdJQzh2WEc0Z0lDOHZJRU52WlhKalpYTWdZSFpoYkhWbFlDQjBieUJoSUZOMGNtbHVaeUJoYm1RZ1lYQndaVzVrY3lCcGRDQjBieUIwYUdVZ1kzVnljbVZ1ZENCaWRXWm1aWEl1WEc0Z0lDOHZYRzRnSUM4dklFbG1JR0IyWVd4MVpXQWdhWE1nZEhKMWRHaDVMQ0J2Y2lBd0xDQnBkQ0JwY3lCamIyVnlZMlZrSUdsdWRHOGdZU0J6ZEhKcGJtY2dZVzVrSUdGd2NHVnVaR1ZrWEc0Z0lDOHZJRTkwYUdWeWQybHpaU3dnZEdobElHVnRjSFI1SUhOMGNtbHVaeUJwY3lCaGNIQmxibVJsWkZ4dUlDQmhjSEJsYm1RNklHWjFibU4wYVc5dUtDa2dlMXh1SUNBZ0lHbG1JQ2gwYUdsekxtbHpTVzVzYVc1bEtDa3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWNtVndiR0ZqWlZOMFlXTnJLR04xY25KbGJuUWdQVDRnV3ljZ0lUMGdiblZzYkNBL0lDY3NJR04xY25KbGJuUXNJQ2NnT2lCY0lsd2lKMTBwTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbkIxYzJoVGIzVnlZMlVvZEdocGN5NWhjSEJsYm1SVWIwSjFabVpsY2loMGFHbHpMbkJ2Y0ZOMFlXTnJLQ2twS1R0Y2JpQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdiR1YwSUd4dlkyRnNJRDBnZEdocGN5NXdiM0JUZEdGamF5Z3BPMXh1SUNBZ0lDQWdkR2hwY3k1d2RYTm9VMjkxY21ObEtGdGNiaUFnSUNBZ0lDQWdKMmxtSUNnbkxGeHVJQ0FnSUNBZ0lDQnNiMk5oYkN4Y2JpQWdJQ0FnSUNBZ0p5QWhQU0J1ZFd4c0tTQjdJQ2NzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVZWEJ3Wlc1a1ZHOUNkV1ptWlhJb2JHOWpZV3dzSUhWdVpHVm1hVzVsWkN3Z2RISjFaU2tzWEc0Z0lDQWdJQ0FnSUNjZ2ZTZGNiaUFnSUNBZ0lGMHBPMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVaVzUyYVhKdmJtMWxiblF1YVhOVGFXMXdiR1VwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV3ZFhOb1UyOTFjbU5sS0Z0Y2JpQWdJQ0FnSUNBZ0lDQW5aV3h6WlNCN0lDY3NYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWhjSEJsYm1SVWIwSjFabVpsY2loY0lpY25YQ0lzSUhWdVpHVm1hVzVsWkN3Z2RISjFaU2tzWEc0Z0lDQWdJQ0FnSUNBZ0p5QjlKMXh1SUNBZ0lDQWdJQ0JkS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMHNYRzVjYmlBZ0x5OGdXMkZ3Y0dWdVpFVnpZMkZ3WldSZFhHNGdJQzh2WEc0Z0lDOHZJRTl1SUhOMFlXTnJMQ0JpWldadmNtVTZJSFpoYkhWbExDQXVMaTVjYmlBZ0x5OGdUMjRnYzNSaFkyc3NJR0ZtZEdWeU9pQXVMaTVjYmlBZ0x5OWNiaUFnTHk4Z1JYTmpZWEJsSUdCMllXeDFaV0FnWVc1a0lHRndjR1Z1WkNCcGRDQjBieUIwYUdVZ1luVm1abVZ5WEc0Z0lHRndjR1Z1WkVWelkyRndaV1E2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUhSb2FYTXVjSFZ6YUZOdmRYSmpaU2hjYmlBZ0lDQWdJSFJvYVhNdVlYQndaVzVrVkc5Q2RXWm1aWElvVzF4dUlDQWdJQ0FnSUNCMGFHbHpMbUZzYVdGellXSnNaU2duWTI5dWRHRnBibVZ5TG1WelkyRndaVVY0Y0hKbGMzTnBiMjRuS1N4Y2JpQWdJQ0FnSUNBZ0p5Z25MRnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnZjRk4wWVdOcktDa3NYRzRnSUNBZ0lDQWdJQ2NwSjF4dUlDQWdJQ0FnWFNsY2JpQWdJQ0FwTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRnRuWlhSRGIyNTBaWGgwWFZ4dUlDQXZMMXh1SUNBdkx5QlBiaUJ6ZEdGamF5d2dZbVZtYjNKbE9pQXVMaTVjYmlBZ0x5OGdUMjRnYzNSaFkyc3NJR0ZtZEdWeU9pQXVMaTVjYmlBZ0x5OGdRMjl0Y0dsc1pYSWdkbUZzZFdVc0lHRm1kR1Z5T2lCc1lYTjBRMjl1ZEdWNGREMWtaWEIwYUZ4dUlDQXZMMXh1SUNBdkx5QlRaWFFnZEdobElIWmhiSFZsSUc5bUlIUm9aU0JnYkdGemRFTnZiblJsZUhSZ0lHTnZiWEJwYkdWeUlIWmhiSFZsSUhSdklIUm9aU0JrWlhCMGFGeHVJQ0JuWlhSRGIyNTBaWGgwT2lCbWRXNWpkR2x2Ymloa1pYQjBhQ2tnZTF4dUlDQWdJSFJvYVhNdWJHRnpkRU52Ym5SbGVIUWdQU0JrWlhCMGFEdGNiaUFnZlN4Y2JseHVJQ0F2THlCYmNIVnphRU52Ym5SbGVIUmRYRzRnSUM4dlhHNGdJQzh2SUU5dUlITjBZV05yTENCaVpXWnZjbVU2SUM0dUxseHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1lXWjBaWEk2SUdOMWNuSmxiblJEYjI1MFpYaDBMQ0F1TGk1Y2JpQWdMeTljYmlBZ0x5OGdVSFZ6YUdWeklIUm9aU0IyWVd4MVpTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCamIyNTBaWGgwSUc5dWRHOGdkR2hsSUhOMFlXTnJMbHh1SUNCd2RYTm9RMjl1ZEdWNGREb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1d2RYTm9VM1JoWTJ0TWFYUmxjbUZzS0hSb2FYTXVZMjl1ZEdWNGRFNWhiV1VvZEdocGN5NXNZWE4wUTI5dWRHVjRkQ2twTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRnRzYjI5cmRYQlBia052Ym5SbGVIUmRYRzRnSUM4dlhHNGdJQzh2SUU5dUlITjBZV05yTENCaVpXWnZjbVU2SUM0dUxseHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1lXWjBaWEk2SUdOMWNuSmxiblJEYjI1MFpYaDBXMjVoYldWZExDQXVMaTVjYmlBZ0x5OWNiaUFnTHk4Z1RHOXZhM01nZFhBZ2RHaGxJSFpoYkhWbElHOW1JR0J1WVcxbFlDQnZiaUIwYUdVZ1kzVnljbVZ1ZENCamIyNTBaWGgwSUdGdVpDQndkWE5vWlhOY2JpQWdMeThnYVhRZ2IyNTBieUIwYUdVZ2MzUmhZMnN1WEc0Z0lHeHZiMnQxY0U5dVEyOXVkR1Y0ZERvZ1puVnVZM1JwYjI0b2NHRnlkSE1zSUdaaGJITjVMQ0J6ZEhKcFkzUXNJSE5qYjNCbFpDa2dlMXh1SUNBZ0lHeGxkQ0JwSUQwZ01EdGNibHh1SUNBZ0lHbG1JQ2doYzJOdmNHVmtJQ1ltSUhSb2FYTXViM0IwYVc5dWN5NWpiMjF3WVhRZ0ppWWdJWFJvYVhNdWJHRnpkRU52Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQzh2SUZSb1pTQmtaWEIwYUdWa0lIRjFaWEo1SUdseklHVjRjR1ZqZEdWa0lIUnZJR2hoYm1Sc1pTQjBhR1VnZFc1a1pXWnBibVZrSUd4dloybGpJR1p2Y2lCMGFHVWdjbTl2ZENCc1pYWmxiQ0IwYUdGMFhHNGdJQ0FnSUNBdkx5QnBjeUJwYlhCc1pXMWxiblJsWkNCaVpXeHZkeXdnYzI4Z2QyVWdaWFpoYkhWaGRHVWdkR2hoZENCa2FYSmxZM1JzZVNCcGJpQmpiMjF3WVhRZ2JXOWtaVnh1SUNBZ0lDQWdkR2hwY3k1d2RYTm9LSFJvYVhNdVpHVndkR2hsWkV4dmIydDFjQ2h3WVhKMGMxdHBLeXRkS1NrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdWNIVnphRU52Ym5SbGVIUW9LVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG5KbGMyOXNkbVZRWVhSb0tDZGpiMjUwWlhoMEp5d2djR0Z5ZEhNc0lHa3NJR1poYkhONUxDQnpkSEpwWTNRcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUZ0c2IyOXJkWEJDYkc5amExQmhjbUZ0WFZ4dUlDQXZMMXh1SUNBdkx5QlBiaUJ6ZEdGamF5d2dZbVZtYjNKbE9pQXVMaTVjYmlBZ0x5OGdUMjRnYzNSaFkyc3NJR0ZtZEdWeU9pQmliRzlqYTFCaGNtRnRXMjVoYldWZExDQXVMaTVjYmlBZ0x5OWNiaUFnTHk4Z1RHOXZhM01nZFhBZ2RHaGxJSFpoYkhWbElHOW1JR0J3WVhKMGMyQWdiMjRnZEdobElHZHBkbVZ1SUdKc2IyTnJJSEJoY21GdElHRnVaQ0J3ZFhOb1pYTmNiaUFnTHk4Z2FYUWdiMjUwYnlCMGFHVWdjM1JoWTJzdVhHNGdJR3h2YjJ0MWNFSnNiMk5yVUdGeVlXMDZJR1oxYm1OMGFXOXVLR0pzYjJOclVHRnlZVzFKWkN3Z2NHRnlkSE1wSUh0Y2JpQWdJQ0IwYUdsekxuVnpaVUpzYjJOclVHRnlZVzF6SUQwZ2RISjFaVHRjYmx4dUlDQWdJSFJvYVhNdWNIVnphQ2hiSjJKc2IyTnJVR0Z5WVcxeld5Y3NJR0pzYjJOclVHRnlZVzFKWkZzd1hTd2dKMTFiSnl3Z1lteHZZMnRRWVhKaGJVbGtXekZkTENBblhTZGRLVHRjYmlBZ0lDQjBhR2x6TG5KbGMyOXNkbVZRWVhSb0tDZGpiMjUwWlhoMEp5d2djR0Z5ZEhNc0lERXBPMXh1SUNCOUxGeHVYRzRnSUM4dklGdHNiMjlyZFhCRVlYUmhYVnh1SUNBdkwxeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1ltVm1iM0psT2lBdUxpNWNiaUFnTHk4Z1QyNGdjM1JoWTJzc0lHRm1kR1Z5T2lCa1lYUmhMQ0F1TGk1Y2JpQWdMeTljYmlBZ0x5OGdVSFZ6YUNCMGFHVWdaR0YwWVNCc2IyOXJkWEFnYjNCbGNtRjBiM0pjYmlBZ2JHOXZhM1Z3UkdGMFlUb2dablZ1WTNScGIyNG9aR1Z3ZEdnc0lIQmhjblJ6TENCemRISnBZM1FwSUh0Y2JpQWdJQ0JwWmlBb0lXUmxjSFJvS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkIxYzJoVGRHRmphMHhwZEdWeVlXd29KMlJoZEdFbktUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXdkWE5vVTNSaFkydE1hWFJsY21Gc0tDZGpiMjUwWVdsdVpYSXVaR0YwWVNoa1lYUmhMQ0FuSUNzZ1pHVndkR2dnS3lBbktTY3BPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11Y21WemIyeDJaVkJoZEdnb0oyUmhkR0VuTENCd1lYSjBjeXdnTUN3Z2RISjFaU3dnYzNSeWFXTjBLVHRjYmlBZ2ZTeGNibHh1SUNCeVpYTnZiSFpsVUdGMGFEb2dablZ1WTNScGIyNG9kSGx3WlN3Z2NHRnlkSE1zSUdrc0lHWmhiSE41TENCemRISnBZM1FwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y0hScGIyNXpMbk4wY21samRDQjhmQ0IwYUdsekxtOXdkR2x2Ym5NdVlYTnpkVzFsVDJKcVpXTjBjeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXdkWE5vS0hOMGNtbGpkRXh2YjJ0MWNDaDBhR2x6TG05d2RHbHZibk11YzNSeWFXTjBJQ1ltSUhOMGNtbGpkQ3dnZEdocGN5d2djR0Z5ZEhNc0lIUjVjR1VwS1R0Y2JpQWdJQ0FnSUhKbGRIVnlianRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnYkdWdUlEMGdjR0Z5ZEhNdWJHVnVaM1JvTzF4dUlDQWdJR1p2Y2lBb095QnBJRHdnYkdWdU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUM4cUlHVnpiR2x1ZEMxa2FYTmhZbXhsSUc1dkxXeHZiM0F0Wm5WdVl5QXFMMXh1SUNBZ0lDQWdkR2hwY3k1eVpYQnNZV05sVTNSaFkyc29ZM1Z5Y21WdWRDQTlQaUI3WEc0Z0lDQWdJQ0FnSUd4bGRDQnNiMjlyZFhBZ1BTQjBhR2x6TG01aGJXVk1iMjlyZFhBb1kzVnljbVZ1ZEN3Z2NHRnlkSE5iYVYwc0lIUjVjR1VwTzF4dUlDQWdJQ0FnSUNBdkx5QlhaU0IzWVc1MElIUnZJR1Z1YzNWeVpTQjBhR0YwSUhwbGNtOGdZVzVrSUdaaGJITmxJR0Z5WlNCb1lXNWtiR1ZrSUhCeWIzQmxjbXg1SUdsbUlIUm9aU0JqYjI1MFpYaDBJQ2htWVd4emVTQm1iR0ZuS1Z4dUlDQWdJQ0FnSUNBdkx5QnVaV1ZrY3lCMGJ5Qm9ZWFpsSUhSb1pTQnpjR1ZqYVdGc0lHaGhibVJzYVc1bklHWnZjaUIwYUdWelpTQjJZV3gxWlhNdVhHNGdJQ0FnSUNBZ0lHbG1JQ2doWm1Gc2Mza3BJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnV3ljZ0lUMGdiblZzYkNBL0lDY3NJR3h2YjJ0MWNDd2dKeUE2SUNjc0lHTjFjbkpsYm5SZE8xeHVJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQzh2SUU5MGFHVnlkMmx6WlNCM1pTQmpZVzRnZFhObElHZGxibVZ5YVdNZ1ptRnNjM2tnYUdGdVpHeHBibWRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnV3ljZ0ppWWdKeXdnYkc5dmEzVndYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBdktpQmxjMnhwYm5RdFpXNWhZbXhsSUc1dkxXeHZiM0F0Wm5WdVl5QXFMMXh1SUNBZ0lIMWNiaUFnZlN4Y2JseHVJQ0F2THlCYmNtVnpiMngyWlZCdmMzTnBZbXhsVEdGdFltUmhYVnh1SUNBdkwxeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1ltVm1iM0psT2lCMllXeDFaU3dnTGk0dVhHNGdJQzh2SUU5dUlITjBZV05yTENCaFpuUmxjam9nY21WemIyeDJaV1FnZG1Gc2RXVXNJQzR1TGx4dUlDQXZMMXh1SUNBdkx5QkpaaUIwYUdVZ1lIWmhiSFZsWUNCcGN5QmhJR3hoYldKa1lTd2djbVZ3YkdGalpTQnBkQ0J2YmlCMGFHVWdjM1JoWTJzZ1lubGNiaUFnTHk4Z2RHaGxJSEpsZEhWeWJpQjJZV3gxWlNCdlppQjBhR1VnYkdGdFltUmhYRzRnSUhKbGMyOXNkbVZRYjNOemFXSnNaVXhoYldKa1lUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdkR2hwY3k1d2RYTm9LRnRjYmlBZ0lDQWdJSFJvYVhNdVlXeHBZWE5oWW14bEtDZGpiMjUwWVdsdVpYSXViR0Z0WW1SaEp5a3NYRzRnSUNBZ0lDQW5LQ2NzWEc0Z0lDQWdJQ0IwYUdsekxuQnZjRk4wWVdOcktDa3NYRzRnSUNBZ0lDQW5MQ0FuTEZ4dUlDQWdJQ0FnZEdocGN5NWpiMjUwWlhoMFRtRnRaU2d3S1N4Y2JpQWdJQ0FnSUNjcEoxeHVJQ0FnSUYwcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUZ0d2RYTm9VM1J5YVc1blVHRnlZVzFkWEc0Z0lDOHZYRzRnSUM4dklFOXVJSE4wWVdOckxDQmlaV1p2Y21VNklDNHVMbHh1SUNBdkx5QlBiaUJ6ZEdGamF5d2dZV1owWlhJNklITjBjbWx1Wnl3Z1kzVnljbVZ1ZEVOdmJuUmxlSFFzSUM0dUxseHVJQ0F2TDF4dUlDQXZMeUJVYUdseklHOXdZMjlrWlNCcGN5QmtaWE5wWjI1bFpDQm1iM0lnZFhObElHbHVJSE4wY21sdVp5QnRiMlJsTENCM2FHbGphRnh1SUNBdkx5QndjbTkyYVdSbGN5QjBhR1VnYzNSeWFXNW5JSFpoYkhWbElHOW1JR0VnY0dGeVlXMWxkR1Z5SUdGc2IyNW5JSGRwZEdnZ2FYUnpYRzRnSUM4dklHUmxjSFJvSUhKaGRHaGxjaUIwYUdGdUlISmxjMjlzZG1sdVp5QnBkQ0JwYlcxbFpHbGhkR1ZzZVM1Y2JpQWdjSFZ6YUZOMGNtbHVaMUJoY21GdE9pQm1kVzVqZEdsdmJpaHpkSEpwYm1jc0lIUjVjR1VwSUh0Y2JpQWdJQ0IwYUdsekxuQjFjMmhEYjI1MFpYaDBLQ2s3WEc0Z0lDQWdkR2hwY3k1d2RYTm9VM1J5YVc1bktIUjVjR1VwTzF4dVhHNGdJQ0FnTHk4Z1NXWWdhWFFuY3lCaElITjFZbVY0Y0hKbGMzTnBiMjRzSUhSb1pTQnpkSEpwYm1jZ2NtVnpkV3gwWEc0Z0lDQWdMeThnZDJsc2JDQmlaU0J3ZFhOb1pXUWdZV1owWlhJZ2RHaHBjeUJ2Y0dOdlpHVXVYRzRnSUNBZ2FXWWdLSFI1Y0dVZ0lUMDlJQ2RUZFdKRmVIQnlaWE56YVc5dUp5a2dlMXh1SUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ6ZEhKcGJtY2dQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0hWemFGTjBjbWx1WnloemRISnBibWNwTzF4dUlDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXdkWE5vVTNSaFkydE1hWFJsY21Gc0tITjBjbWx1WnlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lHVnRjSFI1U0dGemFEb2dablZ1WTNScGIyNG9iMjFwZEVWdGNIUjVLU0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVkSEpoWTJ0SlpITXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNIVnphQ2duZTMwbktUc2dMeThnYUdGemFFbGtjMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kR2hwY3k1emRISnBibWRRWVhKaGJYTXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWNIVnphQ2duZTMwbktUc2dMeThnYUdGemFFTnZiblJsZUhSelhHNGdJQ0FnSUNCMGFHbHpMbkIxYzJnb0ozdDlKeWs3SUM4dklHaGhjMmhVZVhCbGMxeHVJQ0FnSUgxY2JpQWdJQ0IwYUdsekxuQjFjMmhUZEdGamEweHBkR1Z5WVd3b2IyMXBkRVZ0Y0hSNUlEOGdKM1Z1WkdWbWFXNWxaQ2NnT2lBbmUzMG5LVHRjYmlBZ2ZTeGNiaUFnY0hWemFFaGhjMmc2SUdaMWJtTjBhVzl1S0NrZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1oaGMyZ3BJSHRjYmlBZ0lDQWdJSFJvYVhNdWFHRnphR1Z6TG5CMWMyZ29kR2hwY3k1b1lYTm9LVHRjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVvWVhOb0lEMGdleUIyWVd4MVpYTTZJSHQ5TENCMGVYQmxjem9nVzEwc0lHTnZiblJsZUhSek9pQmJYU3dnYVdSek9pQmJYU0I5TzF4dUlDQjlMRnh1SUNCd2IzQklZWE5vT2lCbWRXNWpkR2x2YmlncElIdGNiaUFnSUNCc1pYUWdhR0Z6YUNBOUlIUm9hWE11YUdGemFEdGNiaUFnSUNCMGFHbHpMbWhoYzJnZ1BTQjBhR2x6TG1oaGMyaGxjeTV3YjNBb0tUdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxuUnlZV05yU1dSektTQjdYRzRnSUNBZ0lDQjBhR2x6TG5CMWMyZ29kR2hwY3k1dlltcGxZM1JNYVhSbGNtRnNLR2hoYzJndWFXUnpLU2s3WEc0Z0lDQWdmVnh1SUNBZ0lHbG1JQ2gwYUdsekxuTjBjbWx1WjFCaGNtRnRjeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXdkWE5vS0hSb2FYTXViMkpxWldOMFRHbDBaWEpoYkNob1lYTm9MbU52Ym5SbGVIUnpLU2s3WEc0Z0lDQWdJQ0IwYUdsekxuQjFjMmdvZEdocGN5NXZZbXBsWTNSTWFYUmxjbUZzS0doaGMyZ3VkSGx3WlhNcEtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCMGFHbHpMbkIxYzJnb2RHaHBjeTV2WW1wbFkzUk1hWFJsY21Gc0tHaGhjMmd1ZG1Gc2RXVnpLU2s3WEc0Z0lIMHNYRzVjYmlBZ0x5OGdXM0IxYzJoVGRISnBibWRkWEc0Z0lDOHZYRzRnSUM4dklFOXVJSE4wWVdOckxDQmlaV1p2Y21VNklDNHVMbHh1SUNBdkx5QlBiaUJ6ZEdGamF5d2dZV1owWlhJNklIRjFiM1JsWkZOMGNtbHVaeWh6ZEhKcGJtY3BMQ0F1TGk1Y2JpQWdMeTljYmlBZ0x5OGdVSFZ6YUNCaElIRjFiM1JsWkNCMlpYSnphVzl1SUc5bUlHQnpkSEpwYm1kZ0lHOXVkRzhnZEdobElITjBZV05yWEc0Z0lIQjFjMmhUZEhKcGJtYzZJR1oxYm1OMGFXOXVLSE4wY21sdVp5a2dlMXh1SUNBZ0lIUm9hWE11Y0hWemFGTjBZV05yVEdsMFpYSmhiQ2gwYUdsekxuRjFiM1JsWkZOMGNtbHVaeWh6ZEhKcGJtY3BLVHRjYmlBZ2ZTeGNibHh1SUNBdkx5QmJjSFZ6YUV4cGRHVnlZV3hkWEc0Z0lDOHZYRzRnSUM4dklFOXVJSE4wWVdOckxDQmlaV1p2Y21VNklDNHVMbHh1SUNBdkx5QlBiaUJ6ZEdGamF5d2dZV1owWlhJNklIWmhiSFZsTENBdUxpNWNiaUFnTHk5Y2JpQWdMeThnVUhWemFHVnpJR0VnZG1Gc2RXVWdiMjUwYnlCMGFHVWdjM1JoWTJzdUlGUm9hWE1nYjNCbGNtRjBhVzl1SUhCeVpYWmxiblJ6WEc0Z0lDOHZJSFJvWlNCamIyMXdhV3hsY2lCbWNtOXRJR055WldGMGFXNW5JR0VnZEdWdGNHOXlZWEo1SUhaaGNtbGhZbXhsSUhSdklHaHZiR1JjYmlBZ0x5OGdhWFF1WEc0Z0lIQjFjMmhNYVhSbGNtRnNPaUJtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNBZ0lIUm9hWE11Y0hWemFGTjBZV05yVEdsMFpYSmhiQ2gyWVd4MVpTazdYRzRnSUgwc1hHNWNiaUFnTHk4Z1czQjFjMmhRY205bmNtRnRYVnh1SUNBdkwxeHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1ltVm1iM0psT2lBdUxpNWNiaUFnTHk4Z1QyNGdjM1JoWTJzc0lHRm1kR1Z5T2lCd2NtOW5jbUZ0S0dkMWFXUXBMQ0F1TGk1Y2JpQWdMeTljYmlBZ0x5OGdVSFZ6YUNCaElIQnliMmR5WVcwZ1pYaHdjbVZ6YzJsdmJpQnZiblJ2SUhSb1pTQnpkR0ZqYXk0Z1ZHaHBjeUIwWVd0bGMxeHVJQ0F2THlCaElHTnZiWEJwYkdVdGRHbHRaU0JuZFdsa0lHRnVaQ0JqYjI1MlpYSjBjeUJwZENCcGJuUnZJR0VnY25WdWRHbHRaUzFoWTJObGMzTnBZbXhsWEc0Z0lDOHZJR1Y0Y0hKbGMzTnBiMjR1WEc0Z0lIQjFjMmhRY205bmNtRnRPaUJtZFc1amRHbHZiaWhuZFdsa0tTQjdYRzRnSUNBZ2FXWWdLR2QxYVdRZ0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTV3ZFhOb1UzUmhZMnRNYVhSbGNtRnNLSFJvYVhNdWNISnZaM0poYlVWNGNISmxjM05wYjI0b1ozVnBaQ2twTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhR2x6TG5CMWMyaFRkR0ZqYTB4cGRHVnlZV3dvYm5Wc2JDazdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJQzh2SUZ0eVpXZHBjM1JsY2tSbFkyOXlZWFJ2Y2wxY2JpQWdMeTljYmlBZ0x5OGdUMjRnYzNSaFkyc3NJR0psWm05eVpUb2dhR0Z6YUN3Z2NISnZaM0poYlN3Z2NHRnlZVzF6TGk0dUxDQXVMaTVjYmlBZ0x5OGdUMjRnYzNSaFkyc3NJR0ZtZEdWeU9pQXVMaTVjYmlBZ0x5OWNiaUFnTHk4Z1VHOXdjeUJ2Wm1ZZ2RHaGxJR1JsWTI5eVlYUnZjaWR6SUhCaGNtRnRaWFJsY25Nc0lHbHVkbTlyWlhNZ2RHaGxJR1JsWTI5eVlYUnZjaXhjYmlBZ0x5OGdZVzVrSUdsdWMyVnlkSE1nZEdobElHUmxZMjl5WVhSdmNpQnBiblJ2SUhSb1pTQmtaV052Y21GMGIzSnpJR3hwYzNRdVhHNGdJSEpsWjJsemRHVnlSR1ZqYjNKaGRHOXlLSEJoY21GdFUybDZaU3dnYm1GdFpTa2dlMXh1SUNBZ0lHeGxkQ0JtYjNWdVpFUmxZMjl5WVhSdmNpQTlJSFJvYVhNdWJtRnRaVXh2YjJ0MWNDZ25aR1ZqYjNKaGRHOXljeWNzSUc1aGJXVXNJQ2RrWldOdmNtRjBiM0luS1N4Y2JpQWdJQ0FnSUc5d2RHbHZibk1nUFNCMGFHbHpMbk5sZEhWd1NHVnNjR1Z5UVhKbmN5aHVZVzFsTENCd1lYSmhiVk5wZW1VcE8xeHVYRzRnSUNBZ2RHaHBjeTVrWldOdmNtRjBiM0p6TG5CMWMyZ29XMXh1SUNBZ0lDQWdKMlp1SUQwZ0p5eGNiaUFnSUNBZ0lIUm9hWE11WkdWamIzSmhkRzl5Y3k1bWRXNWpkR2x2YmtOaGJHd29abTkxYm1SRVpXTnZjbUYwYjNJc0lDY25MQ0JiWEc0Z0lDQWdJQ0FnSUNkbWJpY3NYRzRnSUNBZ0lDQWdJQ2R3Y205d2N5Y3NYRzRnSUNBZ0lDQWdJQ2RqYjI1MFlXbHVaWEluTEZ4dUlDQWdJQ0FnSUNCdmNIUnBiMjV6WEc0Z0lDQWdJQ0JkS1N4Y2JpQWdJQ0FnSUNjZ2ZId2dabTQ3SjF4dUlDQWdJRjBwTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRnRwYm5admEyVklaV3h3WlhKZFhHNGdJQzh2WEc0Z0lDOHZJRTl1SUhOMFlXTnJMQ0JpWldadmNtVTZJR2hoYzJnc0lHbHVkbVZ5YzJVc0lIQnliMmR5WVcwc0lIQmhjbUZ0Y3k0dUxpd2dMaTR1WEc0Z0lDOHZJRTl1SUhOMFlXTnJMQ0JoWm5SbGNqb2djbVZ6ZFd4MElHOW1JR2hsYkhCbGNpQnBiblp2WTJGMGFXOXVYRzRnSUM4dlhHNGdJQzh2SUZCdmNITWdiMlptSUhSb1pTQm9aV3h3WlhJbmN5QndZWEpoYldWMFpYSnpMQ0JwYm5admEyVnpJSFJvWlNCb1pXeHdaWElzWEc0Z0lDOHZJR0Z1WkNCd2RYTm9aWE1nZEdobElHaGxiSEJsY2lkeklISmxkSFZ5YmlCMllXeDFaU0J2Ym5SdklIUm9aU0J6ZEdGamF5NWNiaUFnTHk5Y2JpQWdMeThnU1dZZ2RHaGxJR2hsYkhCbGNpQnBjeUJ1YjNRZ1ptOTFibVFzSUdCb1pXeHdaWEpOYVhOemFXNW5ZQ0JwY3lCallXeHNaV1F1WEc0Z0lHbHVkbTlyWlVobGJIQmxjam9nWm5WdVkzUnBiMjRvY0dGeVlXMVRhWHBsTENCdVlXMWxMQ0JwYzFOcGJYQnNaU2tnZTF4dUlDQWdJR3hsZENCdWIyNUlaV3h3WlhJZ1BTQjBhR2x6TG5CdmNGTjBZV05yS0Nrc1hHNGdJQ0FnSUNCb1pXeHdaWElnUFNCMGFHbHpMbk5sZEhWd1NHVnNjR1Z5S0hCaGNtRnRVMmw2WlN3Z2JtRnRaU2s3WEc1Y2JpQWdJQ0JzWlhRZ2NHOXpjMmxpYkdWR2RXNWpkR2x2YmtOaGJHeHpJRDBnVzEwN1hHNWNiaUFnSUNCcFppQW9hWE5UYVcxd2JHVXBJSHRjYmlBZ0lDQWdJQzh2SUdScGNtVmpkQ0JqWVd4c0lIUnZJR2hsYkhCbGNseHVJQ0FnSUNBZ2NHOXpjMmxpYkdWR2RXNWpkR2x2YmtOaGJHeHpMbkIxYzJnb2FHVnNjR1Z5TG01aGJXVXBPMXh1SUNBZ0lIMWNiaUFnSUNBdkx5QmpZV3hzSUdFZ1puVnVZM1JwYjI0Z1puSnZiU0IwYUdVZ2FXNXdkWFFnYjJKcVpXTjBYRzRnSUNBZ2NHOXpjMmxpYkdWR2RXNWpkR2x2YmtOaGJHeHpMbkIxYzJnb2JtOXVTR1ZzY0dWeUtUdGNiaUFnSUNCcFppQW9JWFJvYVhNdWIzQjBhVzl1Y3k1emRISnBZM1FwSUh0Y2JpQWdJQ0FnSUhCdmMzTnBZbXhsUm5WdVkzUnBiMjVEWVd4c2N5NXdkWE5vS0Z4dUlDQWdJQ0FnSUNCMGFHbHpMbUZzYVdGellXSnNaU2duWTI5dWRHRnBibVZ5TG1odmIydHpMbWhsYkhCbGNrMXBjM05wYm1jbktWeHVJQ0FnSUNBZ0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCc1pYUWdablZ1WTNScGIyNU1iMjlyZFhCRGIyUmxJRDBnVzF4dUlDQWdJQ0FnSnlnbkxGeHVJQ0FnSUNBZ2RHaHBjeTVwZEdWdGMxTmxjR0Z5WVhSbFpFSjVLSEJ2YzNOcFlteGxSblZ1WTNScGIyNURZV3hzY3l3Z0ozeDhKeWtzWEc0Z0lDQWdJQ0FuS1NkY2JpQWdJQ0JkTzF4dUlDQWdJR3hsZENCbWRXNWpkR2x2YmtOaGJHd2dQU0IwYUdsekxuTnZkWEpqWlM1bWRXNWpkR2x2YmtOaGJHd29YRzRnSUNBZ0lDQm1kVzVqZEdsdmJreHZiMnQxY0VOdlpHVXNYRzRnSUNBZ0lDQW5ZMkZzYkNjc1hHNGdJQ0FnSUNCb1pXeHdaWEl1WTJGc2JGQmhjbUZ0YzF4dUlDQWdJQ2s3WEc0Z0lDQWdkR2hwY3k1d2RYTm9LR1oxYm1OMGFXOXVRMkZzYkNrN1hHNGdJSDBzWEc1Y2JpQWdhWFJsYlhOVFpYQmhjbUYwWldSQ2VUb2dablZ1WTNScGIyNG9hWFJsYlhNc0lITmxjR0Z5WVhSdmNpa2dlMXh1SUNBZ0lHeGxkQ0J5WlhOMWJIUWdQU0JiWFR0Y2JpQWdJQ0J5WlhOMWJIUXVjSFZ6YUNocGRHVnRjMXN3WFNrN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlERTdJR2tnUENCcGRHVnRjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2NtVnpkV3gwTG5CMWMyZ29jMlZ3WVhKaGRHOXlMQ0JwZEdWdGMxdHBYU2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVpYTjFiSFE3WEc0Z0lIMHNYRzRnSUM4dklGdHBiblp2YTJWTGJtOTNia2hsYkhCbGNsMWNiaUFnTHk5Y2JpQWdMeThnVDI0Z2MzUmhZMnNzSUdKbFptOXlaVG9nYUdGemFDd2dhVzUyWlhKelpTd2djSEp2WjNKaGJTd2djR0Z5WVcxekxpNHVMQ0F1TGk1Y2JpQWdMeThnVDI0Z2MzUmhZMnNzSUdGbWRHVnlPaUJ5WlhOMWJIUWdiMllnYUdWc2NHVnlJR2x1ZG05allYUnBiMjVjYmlBZ0x5OWNiaUFnTHk4Z1ZHaHBjeUJ2Y0dWeVlYUnBiMjRnYVhNZ2RYTmxaQ0IzYUdWdUlIUm9aU0JvWld4d1pYSWdhWE1nYTI1dmQyNGdkRzhnWlhocGMzUXNYRzRnSUM4dklITnZJR0VnWUdobGJIQmxjazFwYzNOcGJtZGdJR1poYkd4aVlXTnJJR2x6SUc1dmRDQnlaWEYxYVhKbFpDNWNiaUFnYVc1MmIydGxTMjV2ZDI1SVpXeHdaWEk2SUdaMWJtTjBhVzl1S0hCaGNtRnRVMmw2WlN3Z2JtRnRaU2tnZTF4dUlDQWdJR3hsZENCb1pXeHdaWElnUFNCMGFHbHpMbk5sZEhWd1NHVnNjR1Z5S0hCaGNtRnRVMmw2WlN3Z2JtRnRaU2s3WEc0Z0lDQWdkR2hwY3k1d2RYTm9LSFJvYVhNdWMyOTFjbU5sTG1aMWJtTjBhVzl1UTJGc2JDaG9aV3h3WlhJdWJtRnRaU3dnSjJOaGJHd25MQ0JvWld4d1pYSXVZMkZzYkZCaGNtRnRjeWtwTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRnRwYm5admEyVkJiV0pwWjNWdmRYTmRYRzRnSUM4dlhHNGdJQzh2SUU5dUlITjBZV05yTENCaVpXWnZjbVU2SUdoaGMyZ3NJR2x1ZG1WeWMyVXNJSEJ5YjJkeVlXMHNJSEJoY21GdGN5NHVMaXdnTGk0dVhHNGdJQzh2SUU5dUlITjBZV05yTENCaFpuUmxjam9nY21WemRXeDBJRzltSUdScGMyRnRZbWxuZFdGMGFXOXVYRzRnSUM4dlhHNGdJQzh2SUZSb2FYTWdiM0JsY21GMGFXOXVJR2x6SUhWelpXUWdkMmhsYmlCaGJpQmxlSEJ5WlhOemFXOXVJR3hwYTJVZ1lIdDdabTl2ZlgxZ1hHNGdJQzh2SUdseklIQnliM1pwWkdWa0xDQmlkWFFnZDJVZ1pHOXVKM1FnYTI1dmR5QmhkQ0JqYjIxd2FXeGxMWFJwYldVZ2QyaGxkR2hsY2lCcGRGeHVJQ0F2THlCcGN5QmhJR2hsYkhCbGNpQnZjaUJoSUhCaGRHZ3VYRzRnSUM4dlhHNGdJQzh2SUZSb2FYTWdiM0JsY21GMGFXOXVJR1Z0YVhSeklHMXZjbVVnWTI5a1pTQjBhR0Z1SUhSb1pTQnZkR2hsY2lCdmNIUnBiMjV6TEZ4dUlDQXZMeUJoYm1RZ1kyRnVJR0psSUdGMmIybGtaV1FnWW5rZ2NHRnpjMmx1WnlCMGFHVWdZR3R1YjNkdVNHVnNjR1Z5YzJBZ1lXNWtYRzRnSUM4dklHQnJibTkzYmtobGJIQmxjbk5QYm14NVlDQm1iR0ZuY3lCaGRDQmpiMjF3YVd4bExYUnBiV1V1WEc0Z0lHbHVkbTlyWlVGdFltbG5kVzkxY3pvZ1puVnVZM1JwYjI0b2JtRnRaU3dnYUdWc2NHVnlRMkZzYkNrZ2UxeHVJQ0FnSUhSb2FYTXVkWE5sVW1WbmFYTjBaWElvSjJobGJIQmxjaWNwTzF4dVhHNGdJQ0FnYkdWMElHNXZia2hsYkhCbGNpQTlJSFJvYVhNdWNHOXdVM1JoWTJzb0tUdGNibHh1SUNBZ0lIUm9hWE11Wlcxd2RIbElZWE5vS0NrN1hHNGdJQ0FnYkdWMElHaGxiSEJsY2lBOUlIUm9hWE11YzJWMGRYQklaV3h3WlhJb01Dd2dibUZ0WlN3Z2FHVnNjR1Z5UTJGc2JDazdYRzVjYmlBZ0lDQnNaWFFnYUdWc2NHVnlUbUZ0WlNBOUlDaDBhR2x6TG14aGMzUklaV3h3WlhJZ1BTQjBhR2x6TG01aGJXVk1iMjlyZFhBb1hHNGdJQ0FnSUNBbmFHVnNjR1Z5Y3ljc1hHNGdJQ0FnSUNCdVlXMWxMRnh1SUNBZ0lDQWdKMmhsYkhCbGNpZGNiaUFnSUNBcEtUdGNibHh1SUNBZ0lHeGxkQ0JzYjI5cmRYQWdQU0JiSnlnbkxDQW5LR2hsYkhCbGNpQTlJQ2NzSUdobGJIQmxjazVoYldVc0lDY2dmSHdnSnl3Z2JtOXVTR1ZzY0dWeUxDQW5LU2RkTzF4dUlDQWdJR2xtSUNnaGRHaHBjeTV2Y0hScGIyNXpMbk4wY21samRDa2dlMXh1SUNBZ0lDQWdiRzl2YTNWd1d6QmRJRDBnSnlob1pXeHdaWElnUFNBbk8xeHVJQ0FnSUNBZ2JHOXZhM1Z3TG5CMWMyZ29YRzRnSUNBZ0lDQWdJQ2NnSVQwZ2JuVnNiQ0EvSUdobGJIQmxjaUE2SUNjc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WVd4cFlYTmhZbXhsS0NkamIyNTBZV2x1WlhJdWFHOXZhM011YUdWc2NHVnlUV2x6YzJsdVp5Y3BYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIUm9hWE11Y0hWemFDaGJYRzRnSUNBZ0lDQW5LQ2NzWEc0Z0lDQWdJQ0JzYjI5cmRYQXNYRzRnSUNBZ0lDQm9aV3h3WlhJdWNHRnlZVzF6U1c1cGRDQS9JRnNuS1N3b0p5d2dhR1ZzY0dWeUxuQmhjbUZ0YzBsdWFYUmRJRG9nVzEwc1hHNGdJQ0FnSUNBbktTd25MRnh1SUNBZ0lDQWdKeWgwZVhCbGIyWWdhR1ZzY0dWeUlEMDlQU0FuTEZ4dUlDQWdJQ0FnZEdocGN5NWhiR2xoYzJGaWJHVW9KMXdpWm5WdVkzUnBiMjVjSWljcExGeHVJQ0FnSUNBZ0p5QS9JQ2NzWEc0Z0lDQWdJQ0IwYUdsekxuTnZkWEpqWlM1bWRXNWpkR2x2YmtOaGJHd29KMmhsYkhCbGNpY3NJQ2RqWVd4c0p5d2dhR1ZzY0dWeUxtTmhiR3hRWVhKaGJYTXBMRnh1SUNBZ0lDQWdKeUE2SUdobGJIQmxjaWtwSjF4dUlDQWdJRjBwTzF4dUlDQjlMRnh1WEc0Z0lDOHZJRnRwYm5admEyVlFZWEowYVdGc1hWeHVJQ0F2TDF4dUlDQXZMeUJQYmlCemRHRmpheXdnWW1WbWIzSmxPaUJqYjI1MFpYaDBMQ0F1TGk1Y2JpQWdMeThnVDI0Z2MzUmhZMnNnWVdaMFpYSTZJSEpsYzNWc2RDQnZaaUJ3WVhKMGFXRnNJR2x1ZG05allYUnBiMjVjYmlBZ0x5OWNiaUFnTHk4Z1ZHaHBjeUJ2Y0dWeVlYUnBiMjRnY0c5d2N5QnZabVlnWVNCamIyNTBaWGgwTENCcGJuWnZhMlZ6SUdFZ2NHRnlkR2xoYkNCM2FYUm9JSFJvWVhRZ1kyOXVkR1Y0ZEN4Y2JpQWdMeThnWVc1a0lIQjFjMmhsY3lCMGFHVWdjbVZ6ZFd4MElHOW1JSFJvWlNCcGJuWnZZMkYwYVc5dUlHSmhZMnN1WEc0Z0lHbHVkbTlyWlZCaGNuUnBZV3c2SUdaMWJtTjBhVzl1S0dselJIbHVZVzFwWXl3Z2JtRnRaU3dnYVc1a1pXNTBLU0I3WEc0Z0lDQWdiR1YwSUhCaGNtRnRjeUE5SUZ0ZExGeHVJQ0FnSUNBZ2IzQjBhVzl1Y3lBOUlIUm9hWE11YzJWMGRYQlFZWEpoYlhNb2JtRnRaU3dnTVN3Z2NHRnlZVzF6S1R0Y2JseHVJQ0FnSUdsbUlDaHBjMFI1Ym1GdGFXTXBJSHRjYmlBZ0lDQWdJRzVoYldVZ1BTQjBhR2x6TG5CdmNGTjBZV05yS0NrN1hHNGdJQ0FnSUNCa1pXeGxkR1VnYjNCMGFXOXVjeTV1WVcxbE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHBibVJsYm5RcElIdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWFXNWtaVzUwSUQwZ1NsTlBUaTV6ZEhKcGJtZHBabmtvYVc1a1pXNTBLVHRjYmlBZ0lDQjlYRzRnSUNBZ2IzQjBhVzl1Y3k1b1pXeHdaWEp6SUQwZ0oyaGxiSEJsY25Nbk8xeHVJQ0FnSUc5d2RHbHZibk11Y0dGeWRHbGhiSE1nUFNBbmNHRnlkR2xoYkhNbk8xeHVJQ0FnSUc5d2RHbHZibk11WkdWamIzSmhkRzl5Y3lBOUlDZGpiMjUwWVdsdVpYSXVaR1ZqYjNKaGRHOXljeWM3WEc1Y2JpQWdJQ0JwWmlBb0lXbHpSSGx1WVcxcFl5a2dlMXh1SUNBZ0lDQWdjR0Z5WVcxekxuVnVjMmhwWm5Rb2RHaHBjeTV1WVcxbFRHOXZhM1Z3S0Nkd1lYSjBhV0ZzY3ljc0lHNWhiV1VzSUNkd1lYSjBhV0ZzSnlrcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J3WVhKaGJYTXVkVzV6YUdsbWRDaHVZVzFsS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y0hScGIyNXpMbU52YlhCaGRDa2dlMXh1SUNBZ0lDQWdiM0IwYVc5dWN5NWtaWEIwYUhNZ1BTQW5aR1Z3ZEdoekp6dGNiaUFnSUNCOVhHNGdJQ0FnYjNCMGFXOXVjeUE5SUhSb2FYTXViMkpxWldOMFRHbDBaWEpoYkNodmNIUnBiMjV6S1R0Y2JpQWdJQ0J3WVhKaGJYTXVjSFZ6YUNodmNIUnBiMjV6S1R0Y2JseHVJQ0FnSUhSb2FYTXVjSFZ6YUNoMGFHbHpMbk52ZFhKalpTNW1kVzVqZEdsdmJrTmhiR3dvSjJOdmJuUmhhVzVsY2k1cGJuWnZhMlZRWVhKMGFXRnNKeXdnSnljc0lIQmhjbUZ0Y3lrcE8xeHVJQ0I5TEZ4dVhHNGdJQzh2SUZ0aGMzTnBaMjVVYjBoaGMyaGRYRzRnSUM4dlhHNGdJQzh2SUU5dUlITjBZV05yTENCaVpXWnZjbVU2SUhaaGJIVmxMQ0F1TGk0c0lHaGhjMmdzSUM0dUxseHVJQ0F2THlCUGJpQnpkR0ZqYXl3Z1lXWjBaWEk2SUM0dUxpd2dhR0Z6YUN3Z0xpNHVYRzRnSUM4dlhHNGdJQzh2SUZCdmNITWdZU0IyWVd4MVpTQnZabVlnZEdobElITjBZV05ySUdGdVpDQmhjM05wWjI1eklHbDBJSFJ2SUhSb1pTQmpkWEp5Wlc1MElHaGhjMmhjYmlBZ1lYTnphV2R1Vkc5SVlYTm9PaUJtZFc1amRHbHZiaWhyWlhrcElIdGNiaUFnSUNCc1pYUWdkbUZzZFdVZ1BTQjBhR2x6TG5CdmNGTjBZV05yS0Nrc1hHNGdJQ0FnSUNCamIyNTBaWGgwTEZ4dUlDQWdJQ0FnZEhsd1pTeGNiaUFnSUNBZ0lHbGtPMXh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVkSEpoWTJ0SlpITXBJSHRjYmlBZ0lDQWdJR2xrSUQwZ2RHaHBjeTV3YjNCVGRHRmpheWdwTzF4dUlDQWdJSDFjYmlBZ0lDQnBaaUFvZEdocGN5NXpkSEpwYm1kUVlYSmhiWE1wSUh0Y2JpQWdJQ0FnSUhSNWNHVWdQU0IwYUdsekxuQnZjRk4wWVdOcktDazdYRzRnSUNBZ0lDQmpiMjUwWlhoMElEMGdkR2hwY3k1d2IzQlRkR0ZqYXlncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQm9ZWE5vSUQwZ2RHaHBjeTVvWVhOb08xeHVJQ0FnSUdsbUlDaGpiMjUwWlhoMEtTQjdYRzRnSUNBZ0lDQm9ZWE5vTG1OdmJuUmxlSFJ6VzJ0bGVWMGdQU0JqYjI1MFpYaDBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kSGx3WlNrZ2UxeHVJQ0FnSUNBZ2FHRnphQzUwZVhCbGMxdHJaWGxkSUQwZ2RIbHdaVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLR2xrS1NCN1hHNGdJQ0FnSUNCb1lYTm9MbWxrYzF0clpYbGRJRDBnYVdRN1hHNGdJQ0FnZlZ4dUlDQWdJR2hoYzJndWRtRnNkV1Z6VzJ0bGVWMGdQU0IyWVd4MVpUdGNiaUFnZlN4Y2JseHVJQ0J3ZFhOb1NXUTZJR1oxYm1OMGFXOXVLSFI1Y0dVc0lHNWhiV1VzSUdOb2FXeGtLU0I3WEc0Z0lDQWdhV1lnS0hSNWNHVWdQVDA5SUNkQ2JHOWphMUJoY21GdEp5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1d2RYTm9VM1JoWTJ0TWFYUmxjbUZzS0Z4dUlDQWdJQ0FnSUNBbllteHZZMnRRWVhKaGJYTmJKeUFyWEc0Z0lDQWdJQ0FnSUNBZ2JtRnRaVnN3WFNBclhHNGdJQ0FnSUNBZ0lDQWdKMTB1Y0dGMGFGc25JQ3RjYmlBZ0lDQWdJQ0FnSUNCdVlXMWxXekZkSUN0Y2JpQWdJQ0FnSUNBZ0lDQW5YU2NnSzF4dUlDQWdJQ0FnSUNBZ0lDaGphR2xzWkNBL0lDY2dLeUFuSUNzZ1NsTlBUaTV6ZEhKcGJtZHBabmtvSnk0bklDc2dZMmhwYkdRcElEb2dKeWNwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvZEhsd1pTQTlQVDBnSjFCaGRHaEZlSEJ5WlhOemFXOXVKeWtnZTF4dUlDQWdJQ0FnZEdocGN5NXdkWE5vVTNSeWFXNW5LRzVoYldVcE8xeHVJQ0FnSUgwZ1pXeHpaU0JwWmlBb2RIbHdaU0E5UFQwZ0oxTjFZa1Y0Y0hKbGMzTnBiMjRuS1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkIxYzJoVGRHRmphMHhwZEdWeVlXd29KM1J5ZFdVbktUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnZEdocGN5NXdkWE5vVTNSaFkydE1hWFJsY21Gc0tDZHVkV3hzSnlrN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lDOHZJRWhGVEZCRlVsTmNibHh1SUNCamIyMXdhV3hsY2pvZ1NtRjJZVk5qY21sd2RFTnZiWEJwYkdWeUxGeHVYRzRnSUdOdmJYQnBiR1ZEYUdsc1pISmxiam9nWm5WdVkzUnBiMjRvWlc1MmFYSnZibTFsYm5Rc0lHOXdkR2x2Ym5NcElIdGNiaUFnSUNCc1pYUWdZMmhwYkdSeVpXNGdQU0JsYm5acGNtOXViV1Z1ZEM1amFHbHNaSEpsYml4Y2JpQWdJQ0FnSUdOb2FXeGtMRnh1SUNBZ0lDQWdZMjl0Y0dsc1pYSTdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTUN3Z2JDQTlJR05vYVd4a2NtVnVMbXhsYm1kMGFEc2dhU0E4SUd3N0lHa3JLeWtnZTF4dUlDQWdJQ0FnWTJocGJHUWdQU0JqYUdsc1pISmxibHRwWFR0Y2JpQWdJQ0FnSUdOdmJYQnBiR1Z5SUQwZ2JtVjNJSFJvYVhNdVkyOXRjR2xzWlhJb0tUc2dMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRiR2x1WlNCdVpYY3RZMkZ3WEc1Y2JpQWdJQ0FnSUd4bGRDQmxlR2x6ZEdsdVp5QTlJSFJvYVhNdWJXRjBZMmhGZUdsemRHbHVaMUJ5YjJkeVlXMG9ZMmhwYkdRcE8xeHVYRzRnSUNBZ0lDQnBaaUFvWlhocGMzUnBibWNnUFQwZ2JuVnNiQ2tnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbU52Ym5SbGVIUXVjSEp2WjNKaGJYTXVjSFZ6YUNnbkp5azdJQzh2SUZCc1lXTmxhRzlzWkdWeUlIUnZJSEJ5WlhabGJuUWdibUZ0WlNCamIyNW1iR2xqZEhNZ1ptOXlJRzVsYzNSbFpDQmphR2xzWkhKbGJseHVJQ0FnSUNBZ0lDQnNaWFFnYVc1a1pYZ2dQU0IwYUdsekxtTnZiblJsZUhRdWNISnZaM0poYlhNdWJHVnVaM1JvTzF4dUlDQWdJQ0FnSUNCamFHbHNaQzVwYm1SbGVDQTlJR2x1WkdWNE8xeHVJQ0FnSUNBZ0lDQmphR2xzWkM1dVlXMWxJRDBnSjNCeWIyZHlZVzBuSUNzZ2FXNWtaWGc3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMjl1ZEdWNGRDNXdjbTluY21GdGMxdHBibVJsZUYwZ1BTQmpiMjF3YVd4bGNpNWpiMjF3YVd4bEtGeHVJQ0FnSUNBZ0lDQWdJR05vYVd4a0xGeHVJQ0FnSUNBZ0lDQWdJRzl3ZEdsdmJuTXNYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiMjUwWlhoMExGeHVJQ0FnSUNBZ0lDQWdJQ0YwYUdsekxuQnlaV052YlhCcGJHVmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpiMjUwWlhoMExtUmxZMjl5WVhSdmNuTmJhVzVrWlhoZElEMGdZMjl0Y0dsc1pYSXVaR1ZqYjNKaGRHOXljenRjYmlBZ0lDQWdJQ0FnZEdocGN5NWpiMjUwWlhoMExtVnVkbWx5YjI1dFpXNTBjMXRwYm1SbGVGMGdQU0JqYUdsc1pEdGNibHh1SUNBZ0lDQWdJQ0IwYUdsekxuVnpaVVJsY0hSb2N5QTlJSFJvYVhNdWRYTmxSR1Z3ZEdoeklIeDhJR052YlhCcGJHVnlMblZ6WlVSbGNIUm9jenRjYmlBZ0lDQWdJQ0FnZEdocGN5NTFjMlZDYkc5amExQmhjbUZ0Y3lBOUlIUm9hWE11ZFhObFFteHZZMnRRWVhKaGJYTWdmSHdnWTI5dGNHbHNaWEl1ZFhObFFteHZZMnRRWVhKaGJYTTdYRzRnSUNBZ0lDQWdJR05vYVd4a0xuVnpaVVJsY0hSb2N5QTlJSFJvYVhNdWRYTmxSR1Z3ZEdoek8xeHVJQ0FnSUNBZ0lDQmphR2xzWkM1MWMyVkNiRzlqYTFCaGNtRnRjeUE5SUhSb2FYTXVkWE5sUW14dlkydFFZWEpoYlhNN1hHNGdJQ0FnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnSUNCamFHbHNaQzVwYm1SbGVDQTlJR1Y0YVhOMGFXNW5MbWx1WkdWNE8xeHVJQ0FnSUNBZ0lDQmphR2xzWkM1dVlXMWxJRDBnSjNCeWIyZHlZVzBuSUNzZ1pYaHBjM1JwYm1jdWFXNWtaWGc3WEc1Y2JpQWdJQ0FnSUNBZ2RHaHBjeTUxYzJWRVpYQjBhSE1nUFNCMGFHbHpMblZ6WlVSbGNIUm9jeUI4ZkNCbGVHbHpkR2x1Wnk1MWMyVkVaWEIwYUhNN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZFhObFFteHZZMnRRWVhKaGJYTWdQU0IwYUdsekxuVnpaVUpzYjJOclVHRnlZVzF6SUh4OElHVjRhWE4wYVc1bkxuVnpaVUpzYjJOclVHRnlZVzF6TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmlBZ2ZTeGNiaUFnYldGMFkyaEZlR2x6ZEdsdVoxQnliMmR5WVcwNklHWjFibU4wYVc5dUtHTm9hV3hrS1NCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3hsYmlBOUlIUm9hWE11WTI5dWRHVjRkQzVsYm5acGNtOXViV1Z1ZEhNdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR3hsZENCbGJuWnBjbTl1YldWdWRDQTlJSFJvYVhNdVkyOXVkR1Y0ZEM1bGJuWnBjbTl1YldWdWRITmJhVjA3WEc0Z0lDQWdJQ0JwWmlBb1pXNTJhWEp2Ym0xbGJuUWdKaVlnWlc1MmFYSnZibTFsYm5RdVpYRjFZV3h6S0dOb2FXeGtLU2tnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnWlc1MmFYSnZibTFsYm5RN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lIQnliMmR5WVcxRmVIQnlaWE56YVc5dU9pQm1kVzVqZEdsdmJpaG5kV2xrS1NCN1hHNGdJQ0FnYkdWMElHTm9hV3hrSUQwZ2RHaHBjeTVsYm5acGNtOXViV1Z1ZEM1amFHbHNaSEpsYmx0bmRXbGtYU3hjYmlBZ0lDQWdJSEJ5YjJkeVlXMVFZWEpoYlhNZ1BTQmJZMmhwYkdRdWFXNWtaWGdzSUNka1lYUmhKeXdnWTJocGJHUXVZbXh2WTJ0UVlYSmhiWE5kTzF4dVhHNGdJQ0FnYVdZZ0tIUm9hWE11ZFhObFFteHZZMnRRWVhKaGJYTWdmSHdnZEdocGN5NTFjMlZFWlhCMGFITXBJSHRjYmlBZ0lDQWdJSEJ5YjJkeVlXMVFZWEpoYlhNdWNIVnphQ2duWW14dlkydFFZWEpoYlhNbktUdGNiaUFnSUNCOVhHNGdJQ0FnYVdZZ0tIUm9hWE11ZFhObFJHVndkR2h6S1NCN1hHNGdJQ0FnSUNCd2NtOW5jbUZ0VUdGeVlXMXpMbkIxYzJnb0oyUmxjSFJvY3ljcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUFuWTI5dWRHRnBibVZ5TG5CeWIyZHlZVzBvSnlBcklIQnliMmR5WVcxUVlYSmhiWE11YW05cGJpZ25MQ0FuS1NBcklDY3BKenRjYmlBZ2ZTeGNibHh1SUNCMWMyVlNaV2RwYzNSbGNqb2dablZ1WTNScGIyNG9ibUZ0WlNrZ2UxeHVJQ0FnSUdsbUlDZ2hkR2hwY3k1eVpXZHBjM1JsY25OYmJtRnRaVjBwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZuYVhOMFpYSnpXMjVoYldWZElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUhSb2FYTXVjbVZuYVhOMFpYSnpMbXhwYzNRdWNIVnphQ2h1WVcxbEtUdGNiaUFnSUNCOVhHNGdJSDBzWEc1Y2JpQWdjSFZ6YURvZ1puVnVZM1JwYjI0b1pYaHdjaWtnZTF4dUlDQWdJR2xtSUNnaEtHVjRjSElnYVc1emRHRnVZMlZ2WmlCTWFYUmxjbUZzS1NrZ2UxeHVJQ0FnSUNBZ1pYaHdjaUE5SUhSb2FYTXVjMjkxY21ObExuZHlZWEFvWlhod2NpazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2RHaHBjeTVwYm14cGJtVlRkR0ZqYXk1d2RYTm9LR1Y0Y0hJcE8xeHVJQ0FnSUhKbGRIVnliaUJsZUhCeU8xeHVJQ0I5TEZ4dVhHNGdJSEIxYzJoVGRHRmphMHhwZEdWeVlXdzZJR1oxYm1OMGFXOXVLR2wwWlcwcElIdGNiaUFnSUNCMGFHbHpMbkIxYzJnb2JtVjNJRXhwZEdWeVlXd29hWFJsYlNrcE8xeHVJQ0I5TEZ4dVhHNGdJSEIxYzJoVGIzVnlZMlU2SUdaMWJtTjBhVzl1S0hOdmRYSmpaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbkJsYm1ScGJtZERiMjUwWlc1MEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5OdmRYSmpaUzV3ZFhOb0tGeHVJQ0FnSUNBZ0lDQjBhR2x6TG1Gd2NHVnVaRlJ2UW5WbVptVnlLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjMjkxY21ObExuRjFiM1JsWkZOMGNtbHVaeWgwYUdsekxuQmxibVJwYm1kRGIyNTBaVzUwS1N4Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CbGJtUnBibWRNYjJOaGRHbHZibHh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZEdocGN5NXdaVzVrYVc1blEyOXVkR1Z1ZENBOUlIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9jMjkxY21ObEtTQjdYRzRnSUNBZ0lDQjBhR2x6TG5OdmRYSmpaUzV3ZFhOb0tITnZkWEpqWlNrN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lISmxjR3hoWTJWVGRHRmphem9nWm5WdVkzUnBiMjRvWTJGc2JHSmhZMnNwSUh0Y2JpQWdJQ0JzWlhRZ2NISmxabWw0SUQwZ1d5Y29KMTBzWEc0Z0lDQWdJQ0J6ZEdGamF5eGNiaUFnSUNBZ0lHTnlaV0YwWldSVGRHRmpheXhjYmlBZ0lDQWdJSFZ6WldSTWFYUmxjbUZzTzF4dVhHNGdJQ0FnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUc1bGVIUWdLaTljYmlBZ0lDQnBaaUFvSVhSb2FYTXVhWE5KYm14cGJtVW9LU2tnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmlnbmNtVndiR0ZqWlZOMFlXTnJJRzl1SUc1dmJpMXBibXhwYm1VbktUdGNiaUFnSUNCOVhHNWNiaUFnSUNBdkx5QlhaU0IzWVc1MElIUnZJRzFsY21kbElIUm9aU0JwYm14cGJtVWdjM1JoZEdWdFpXNTBJR2x1ZEc4Z2RHaGxJSEpsY0d4aFkyVnRaVzUwSUhOMFlYUmxiV1Z1ZENCMmFXRWdKeXduWEc0Z0lDQWdiR1YwSUhSdmNDQTlJSFJvYVhNdWNHOXdVM1JoWTJzb2RISjFaU2s3WEc1Y2JpQWdJQ0JwWmlBb2RHOXdJR2x1YzNSaGJtTmxiMllnVEdsMFpYSmhiQ2tnZTF4dUlDQWdJQ0FnTHk4Z1RHbDBaWEpoYkhNZ1pHOGdibTkwSUc1bFpXUWdkRzhnWW1VZ2FXNXNhVzVsWkZ4dUlDQWdJQ0FnYzNSaFkyc2dQU0JiZEc5d0xuWmhiSFZsWFR0Y2JpQWdJQ0FnSUhCeVpXWnBlQ0E5SUZzbktDY3NJSE4wWVdOclhUdGNiaUFnSUNBZ0lIVnpaV1JNYVhSbGNtRnNJRDBnZEhKMVpUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnTHk4Z1IyVjBJRzl5SUdOeVpXRjBaU0IwYUdVZ1kzVnljbVZ1ZENCemRHRmpheUJ1WVcxbElHWnZjaUIxYzJVZ1lua2dkR2hsSUdsdWJHbHVaVnh1SUNBZ0lDQWdZM0psWVhSbFpGTjBZV05ySUQwZ2RISjFaVHRjYmlBZ0lDQWdJR3hsZENCdVlXMWxJRDBnZEdocGN5NXBibU55VTNSaFkyc29LVHRjYmx4dUlDQWdJQ0FnY0hKbFptbDRJRDBnV3ljb0tDY3NJSFJvYVhNdWNIVnphQ2h1WVcxbEtTd2dKeUE5SUNjc0lIUnZjQ3dnSnlrblhUdGNiaUFnSUNBZ0lITjBZV05ySUQwZ2RHaHBjeTUwYjNCVGRHRmpheWdwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCcGRHVnRJRDBnWTJGc2JHSmhZMnN1WTJGc2JDaDBhR2x6TENCemRHRmpheWs3WEc1Y2JpQWdJQ0JwWmlBb0lYVnpaV1JNYVhSbGNtRnNLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuQnZjRk4wWVdOcktDazdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaGpjbVZoZEdWa1UzUmhZMnNwSUh0Y2JpQWdJQ0FnSUhSb2FYTXVjM1JoWTJ0VGJHOTBMUzA3WEc0Z0lDQWdmVnh1SUNBZ0lIUm9hWE11Y0hWemFDaHdjbVZtYVhndVkyOXVZMkYwS0dsMFpXMHNJQ2NwSnlrcE8xeHVJQ0I5TEZ4dVhHNGdJR2x1WTNKVGRHRmphem9nWm5WdVkzUnBiMjRvS1NCN1hHNGdJQ0FnZEdocGN5NXpkR0ZqYTFOc2IzUXJLenRjYmlBZ0lDQnBaaUFvZEdocGN5NXpkR0ZqYTFOc2IzUWdQaUIwYUdsekxuTjBZV05yVm1GeWN5NXNaVzVuZEdncElIdGNiaUFnSUNBZ0lIUm9hWE11YzNSaFkydFdZWEp6TG5CMWMyZ29KM04wWVdOckp5QXJJSFJvYVhNdWMzUmhZMnRUYkc5MEtUdGNiaUFnSUNCOVhHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWRHOXdVM1JoWTJ0T1lXMWxLQ2s3WEc0Z0lIMHNYRzRnSUhSdmNGTjBZV05yVG1GdFpUb2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdjbVYwZFhKdUlDZHpkR0ZqYXljZ0t5QjBhR2x6TG5OMFlXTnJVMnh2ZER0Y2JpQWdmU3hjYmlBZ1pteDFjMmhKYm14cGJtVTZJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR3hsZENCcGJteHBibVZUZEdGamF5QTlJSFJvYVhNdWFXNXNhVzVsVTNSaFkyczdYRzRnSUNBZ2RHaHBjeTVwYm14cGJtVlRkR0ZqYXlBOUlGdGRPMXh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc1pXNGdQU0JwYm14cGJtVlRkR0ZqYXk1c1pXNW5kR2c3SUdrZ1BDQnNaVzQ3SUdrckt5a2dlMXh1SUNBZ0lDQWdiR1YwSUdWdWRISjVJRDBnYVc1c2FXNWxVM1JoWTJ0YmFWMDdYRzRnSUNBZ0lDQXZLaUJwYzNSaGJtSjFiQ0JwWjI1dmNtVWdhV1lnS2k5Y2JpQWdJQ0FnSUdsbUlDaGxiblJ5ZVNCcGJuTjBZVzVqWlc5bUlFeHBkR1Z5WVd3cElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyMXdhV3hsVTNSaFkyc3VjSFZ6YUNobGJuUnllU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JzWlhRZ2MzUmhZMnNnUFNCMGFHbHpMbWx1WTNKVGRHRmpheWdwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbkIxYzJoVGIzVnlZMlVvVzNOMFlXTnJMQ0FuSUQwZ0p5d2daVzUwY25rc0lDYzdKMTBwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU52YlhCcGJHVlRkR0ZqYXk1d2RYTm9LSE4wWVdOcktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lHbHpTVzVzYVc1bE9pQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVwYm14cGJtVlRkR0ZqYXk1c1pXNW5kR2c3WEc0Z0lIMHNYRzVjYmlBZ2NHOXdVM1JoWTJzNklHWjFibU4wYVc5dUtIZHlZWEJ3WldRcElIdGNiaUFnSUNCc1pYUWdhVzVzYVc1bElEMGdkR2hwY3k1cGMwbHViR2x1WlNncExGeHVJQ0FnSUNBZ2FYUmxiU0E5SUNocGJteHBibVVnUHlCMGFHbHpMbWx1YkdsdVpWTjBZV05ySURvZ2RHaHBjeTVqYjIxd2FXeGxVM1JoWTJzcExuQnZjQ2dwTzF4dVhHNGdJQ0FnYVdZZ0tDRjNjbUZ3Y0dWa0lDWW1JR2wwWlcwZ2FXNXpkR0Z1WTJWdlppQk1hWFJsY21Gc0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2FYUmxiUzUyWVd4MVpUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnYVdZZ0tDRnBibXhwYm1VcElIdGNiaUFnSUNBZ0lDQWdMeW9nYVhOMFlXNWlkV3dnYVdkdWIzSmxJRzVsZUhRZ0tpOWNiaUFnSUNBZ0lDQWdhV1lnS0NGMGFHbHpMbk4wWVdOclUyeHZkQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMGx1ZG1Gc2FXUWdjM1JoWTJzZ2NHOXdKeWs3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2RHaHBjeTV6ZEdGamExTnNiM1F0TFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhKbGRIVnliaUJwZEdWdE8xeHVJQ0FnSUgxY2JpQWdmU3hjYmx4dUlDQjBiM0JUZEdGamF6b2dablZ1WTNScGIyNG9LU0I3WEc0Z0lDQWdiR1YwSUhOMFlXTnJJRDBnZEdocGN5NXBjMGx1YkdsdVpTZ3BJRDhnZEdocGN5NXBibXhwYm1WVGRHRmpheUE2SUhSb2FYTXVZMjl0Y0dsc1pWTjBZV05yTEZ4dUlDQWdJQ0FnYVhSbGJTQTlJSE4wWVdOclczTjBZV05yTG14bGJtZDBhQ0F0SURGZE8xeHVYRzRnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHbG1JQ292WEc0Z0lDQWdhV1lnS0dsMFpXMGdhVzV6ZEdGdVkyVnZaaUJNYVhSbGNtRnNLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhWFJsYlM1MllXeDFaVHRjYmlBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUdsMFpXMDdYRzRnSUNBZ2ZWeHVJQ0I5TEZ4dVhHNGdJR052Ym5SbGVIUk9ZVzFsT2lCbWRXNWpkR2x2YmloamIyNTBaWGgwS1NCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11ZFhObFJHVndkR2h6SUNZbUlHTnZiblJsZUhRcElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlBblpHVndkR2h6V3ljZ0t5QmpiMjUwWlhoMElDc2dKMTBuTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0oyUmxjSFJvSnlBcklHTnZiblJsZUhRN1hHNGdJQ0FnZlZ4dUlDQjlMRnh1WEc0Z0lIRjFiM1JsWkZOMGNtbHVaem9nWm5WdVkzUnBiMjRvYzNSeUtTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjMjkxY21ObExuRjFiM1JsWkZOMGNtbHVaeWh6ZEhJcE8xeHVJQ0I5TEZ4dVhHNGdJRzlpYW1WamRFeHBkR1Z5WVd3NklHWjFibU4wYVc5dUtHOWlhaWtnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG5OdmRYSmpaUzV2WW1wbFkzUk1hWFJsY21Gc0tHOWlhaWs3WEc0Z0lIMHNYRzVjYmlBZ1lXeHBZWE5oWW14bE9pQm1kVzVqZEdsdmJpaHVZVzFsS1NCN1hHNGdJQ0FnYkdWMElISmxkQ0E5SUhSb2FYTXVZV3hwWVhObGMxdHVZVzFsWFR0Y2JpQWdJQ0JwWmlBb2NtVjBLU0I3WEc0Z0lDQWdJQ0J5WlhRdWNtVm1aWEpsYm1ObFEyOTFiblFyS3p0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMElEMGdkR2hwY3k1aGJHbGhjMlZ6VzI1aGJXVmRJRDBnZEdocGN5NXpiM1Z5WTJVdWQzSmhjQ2h1WVcxbEtUdGNiaUFnSUNCeVpYUXVZV3hwWVhOaFlteGxJRDBnZEhKMVpUdGNiaUFnSUNCeVpYUXVjbVZtWlhKbGJtTmxRMjkxYm5RZ1BTQXhPMXh1WEc0Z0lDQWdjbVYwZFhKdUlISmxkRHRjYmlBZ2ZTeGNibHh1SUNCelpYUjFjRWhsYkhCbGNqb2dablZ1WTNScGIyNG9jR0Z5WVcxVGFYcGxMQ0J1WVcxbExDQmliRzlqYTBobGJIQmxjaWtnZTF4dUlDQWdJR3hsZENCd1lYSmhiWE1nUFNCYlhTeGNiaUFnSUNBZ0lIQmhjbUZ0YzBsdWFYUWdQU0IwYUdsekxuTmxkSFZ3U0dWc2NHVnlRWEpuY3lodVlXMWxMQ0J3WVhKaGJWTnBlbVVzSUhCaGNtRnRjeXdnWW14dlkydElaV3h3WlhJcE8xeHVJQ0FnSUd4bGRDQm1iM1Z1WkVobGJIQmxjaUE5SUhSb2FYTXVibUZ0WlV4dmIydDFjQ2duYUdWc2NHVnljeWNzSUc1aGJXVXNJQ2RvWld4d1pYSW5LU3hjYmlBZ0lDQWdJR05oYkd4RGIyNTBaWGgwSUQwZ2RHaHBjeTVoYkdsaGMyRmliR1VvWEc0Z0lDQWdJQ0FnSUdBa2UzUm9hWE11WTI5dWRHVjRkRTVoYldVb01DbDlJQ0U5SUc1MWJHd2dQeUFrZTNSb2FYTXVZMjl1ZEdWNGRFNWhiV1VvWEc0Z0lDQWdJQ0FnSUNBZ01GeHVJQ0FnSUNBZ0lDQXBmU0E2SUNoamIyNTBZV2x1WlhJdWJuVnNiRU52Ym5SbGVIUWdmSHdnZTMwcFlGeHVJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCd1lYSmhiWE02SUhCaGNtRnRjeXhjYmlBZ0lDQWdJSEJoY21GdGMwbHVhWFE2SUhCaGNtRnRjMGx1YVhRc1hHNGdJQ0FnSUNCdVlXMWxPaUJtYjNWdVpFaGxiSEJsY2l4Y2JpQWdJQ0FnSUdOaGJHeFFZWEpoYlhNNklGdGpZV3hzUTI5dWRHVjRkRjB1WTI5dVkyRjBLSEJoY21GdGN5bGNiaUFnSUNCOU8xeHVJQ0I5TEZ4dVhHNGdJSE5sZEhWd1VHRnlZVzF6T2lCbWRXNWpkR2x2Ymlob1pXeHdaWElzSUhCaGNtRnRVMmw2WlN3Z2NHRnlZVzF6S1NCN1hHNGdJQ0FnYkdWMElHOXdkR2x2Ym5NZ1BTQjdmU3hjYmlBZ0lDQWdJR052Ym5SbGVIUnpJRDBnVzEwc1hHNGdJQ0FnSUNCMGVYQmxjeUE5SUZ0ZExGeHVJQ0FnSUNBZ2FXUnpJRDBnVzEwc1hHNGdJQ0FnSUNCdlltcGxZM1JCY21keklEMGdJWEJoY21GdGN5eGNiaUFnSUNBZ0lIQmhjbUZ0TzF4dVhHNGdJQ0FnYVdZZ0tHOWlhbVZqZEVGeVozTXBJSHRjYmlBZ0lDQWdJSEJoY21GdGN5QTlJRnRkTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzl3ZEdsdmJuTXVibUZ0WlNBOUlIUm9hWE11Y1hWdmRHVmtVM1J5YVc1bktHaGxiSEJsY2lrN1hHNGdJQ0FnYjNCMGFXOXVjeTVvWVhOb0lEMGdkR2hwY3k1d2IzQlRkR0ZqYXlncE8xeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdWRISmhZMnRKWkhNcElIdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdWFHRnphRWxrY3lBOUlIUm9hWE11Y0c5d1UzUmhZMnNvS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hSb2FYTXVjM1J5YVc1blVHRnlZVzF6S1NCN1hHNGdJQ0FnSUNCdmNIUnBiMjV6TG1oaGMyaFVlWEJsY3lBOUlIUm9hWE11Y0c5d1UzUmhZMnNvS1R0Y2JpQWdJQ0FnSUc5d2RHbHZibk11YUdGemFFTnZiblJsZUhSeklEMGdkR2hwY3k1d2IzQlRkR0ZqYXlncE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUd4bGRDQnBiblpsY25ObElEMGdkR2hwY3k1d2IzQlRkR0ZqYXlncExGeHVJQ0FnSUNBZ2NISnZaM0poYlNBOUlIUm9hWE11Y0c5d1UzUmhZMnNvS1R0Y2JseHVJQ0FnSUM4dklFRjJiMmxrSUhObGRIUnBibWNnWm00Z1lXNWtJR2x1ZG1WeWMyVWdhV1lnYm1WcGRHaGxjaUJoY21VZ2MyVjBMaUJVYUdseklHRnNiRzkzYzF4dUlDQWdJQzh2SUdobGJIQmxjbk1nZEc4Z1pHOGdZU0JqYUdWamF5Qm1iM0lnWUdsbUlDaHZjSFJwYjI1ekxtWnVLV0JjYmlBZ0lDQnBaaUFvY0hKdlozSmhiU0I4ZkNCcGJuWmxjbk5sS1NCN1hHNGdJQ0FnSUNCdmNIUnBiMjV6TG1adUlEMGdjSEp2WjNKaGJTQjhmQ0FuWTI5dWRHRnBibVZ5TG01dmIzQW5PMXh1SUNBZ0lDQWdiM0IwYVc5dWN5NXBiblpsY25ObElEMGdhVzUyWlhKelpTQjhmQ0FuWTI5dWRHRnBibVZ5TG01dmIzQW5PMXh1SUNBZ0lIMWNibHh1SUNBZ0lDOHZJRlJvWlNCd1lYSmhiV1YwWlhKeklHZHZJRzl1SUhSdklIUm9aU0J6ZEdGamF5QnBiaUJ2Y21SbGNpQW9iV0ZyYVc1bklITjFjbVVnZEdoaGRDQjBhR1Y1SUdGeVpTQmxkbUZzZFdGMFpXUWdhVzRnYjNKa1pYSXBYRzRnSUNBZ0x5OGdjMjhnZDJVZ2JtVmxaQ0IwYnlCd2IzQWdkR2hsYlNCdlptWWdkR2hsSUhOMFlXTnJJR2x1SUhKbGRtVnljMlVnYjNKa1pYSmNiaUFnSUNCc1pYUWdhU0E5SUhCaGNtRnRVMmw2WlR0Y2JpQWdJQ0IzYUdsc1pTQW9hUzB0S1NCN1hHNGdJQ0FnSUNCd1lYSmhiU0E5SUhSb2FYTXVjRzl3VTNSaFkyc29LVHRjYmlBZ0lDQWdJSEJoY21GdGMxdHBYU0E5SUhCaGNtRnRPMXh1WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTUwY21GamEwbGtjeWtnZTF4dUlDQWdJQ0FnSUNCcFpITmJhVjBnUFNCMGFHbHpMbkJ2Y0ZOMFlXTnJLQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTV6ZEhKcGJtZFFZWEpoYlhNcElIdGNiaUFnSUNBZ0lDQWdkSGx3WlhOYmFWMGdQU0IwYUdsekxuQnZjRk4wWVdOcktDazdYRzRnSUNBZ0lDQWdJR052Ym5SbGVIUnpXMmxkSUQwZ2RHaHBjeTV3YjNCVGRHRmpheWdwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodlltcGxZM1JCY21kektTQjdYRzRnSUNBZ0lDQnZjSFJwYjI1ekxtRnlaM01nUFNCMGFHbHpMbk52ZFhKalpTNW5aVzVsY21GMFpVRnljbUY1S0hCaGNtRnRjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0hSb2FYTXVkSEpoWTJ0SlpITXBJSHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVhV1J6SUQwZ2RHaHBjeTV6YjNWeVkyVXVaMlZ1WlhKaGRHVkJjbkpoZVNocFpITXBPMXh1SUNBZ0lIMWNiaUFnSUNCcFppQW9kR2hwY3k1emRISnBibWRRWVhKaGJYTXBJSHRjYmlBZ0lDQWdJRzl3ZEdsdmJuTXVkSGx3WlhNZ1BTQjBhR2x6TG5OdmRYSmpaUzVuWlc1bGNtRjBaVUZ5Y21GNUtIUjVjR1Z6S1R0Y2JpQWdJQ0FnSUc5d2RHbHZibk11WTI5dWRHVjRkSE1nUFNCMGFHbHpMbk52ZFhKalpTNW5aVzVsY21GMFpVRnljbUY1S0dOdmJuUmxlSFJ6S1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2RHaHBjeTV2Y0hScGIyNXpMbVJoZEdFcElIdGNiaUFnSUNBZ0lHOXdkR2x2Ym5NdVpHRjBZU0E5SUNka1lYUmhKenRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSFJvYVhNdWRYTmxRbXh2WTJ0UVlYSmhiWE1wSUh0Y2JpQWdJQ0FnSUc5d2RHbHZibk11WW14dlkydFFZWEpoYlhNZ1BTQW5ZbXh2WTJ0UVlYSmhiWE1uTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2IzQjBhVzl1Y3p0Y2JpQWdmU3hjYmx4dUlDQnpaWFIxY0VobGJIQmxja0Z5WjNNNklHWjFibU4wYVc5dUtHaGxiSEJsY2l3Z2NHRnlZVzFUYVhwbExDQndZWEpoYlhNc0lIVnpaVkpsWjJsemRHVnlLU0I3WEc0Z0lDQWdiR1YwSUc5d2RHbHZibk1nUFNCMGFHbHpMbk5sZEhWd1VHRnlZVzF6S0dobGJIQmxjaXdnY0dGeVlXMVRhWHBsTENCd1lYSmhiWE1wTzF4dUlDQWdJRzl3ZEdsdmJuTXViRzlqSUQwZ1NsTlBUaTV6ZEhKcGJtZHBabmtvZEdocGN5NXpiM1Z5WTJVdVkzVnljbVZ1ZEV4dlkyRjBhVzl1S1R0Y2JpQWdJQ0J2Y0hScGIyNXpJRDBnZEdocGN5NXZZbXBsWTNSTWFYUmxjbUZzS0c5d2RHbHZibk1wTzF4dUlDQWdJR2xtSUNoMWMyVlNaV2RwYzNSbGNpa2dlMXh1SUNBZ0lDQWdkR2hwY3k1MWMyVlNaV2RwYzNSbGNpZ25iM0IwYVc5dWN5Y3BPMXh1SUNBZ0lDQWdjR0Z5WVcxekxuQjFjMmdvSjI5d2RHbHZibk1uS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJiSjI5d2RHbHZibk05Snl3Z2IzQjBhVzl1YzEwN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNod1lYSmhiWE1wSUh0Y2JpQWdJQ0FnSUhCaGNtRnRjeTV3ZFhOb0tHOXdkR2x2Ym5NcE8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUNjbk8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiM0IwYVc5dWN6dGNiaUFnSUNCOVhHNGdJSDFjYm4wN1hHNWNiaWhtZFc1amRHbHZiaWdwSUh0Y2JpQWdZMjl1YzNRZ2NtVnpaWEoyWldSWGIzSmtjeUE5SUNoY2JpQWdJQ0FuWW5KbFlXc2daV3h6WlNCdVpYY2dkbUZ5SnlBclhHNGdJQ0FnSnlCallYTmxJR1pwYm1Gc2JIa2djbVYwZFhKdUlIWnZhV1FuSUN0Y2JpQWdJQ0FuSUdOaGRHTm9JR1p2Y2lCemQybDBZMmdnZDJocGJHVW5JQ3RjYmlBZ0lDQW5JR052Ym5ScGJuVmxJR1oxYm1OMGFXOXVJSFJvYVhNZ2QybDBhQ2NnSzF4dUlDQWdJQ2NnWkdWbVlYVnNkQ0JwWmlCMGFISnZkeWNnSzF4dUlDQWdJQ2NnWkdWc1pYUmxJR2x1SUhSeWVTY2dLMXh1SUNBZ0lDY2daRzhnYVc1emRHRnVZMlZ2WmlCMGVYQmxiMlluSUN0Y2JpQWdJQ0FuSUdGaWMzUnlZV04wSUdWdWRXMGdhVzUwSUhOb2IzSjBKeUFyWEc0Z0lDQWdKeUJpYjI5c1pXRnVJR1Y0Y0c5eWRDQnBiblJsY21aaFkyVWdjM1JoZEdsakp5QXJYRzRnSUNBZ0p5QmllWFJsSUdWNGRHVnVaSE1nYkc5dVp5QnpkWEJsY2ljZ0sxeHVJQ0FnSUNjZ1kyaGhjaUJtYVc1aGJDQnVZWFJwZG1VZ2MzbHVZMmh5YjI1cGVtVmtKeUFyWEc0Z0lDQWdKeUJqYkdGemN5Qm1iRzloZENCd1lXTnJZV2RsSUhSb2NtOTNjeWNnSzF4dUlDQWdJQ2NnWTI5dWMzUWdaMjkwYnlCd2NtbDJZWFJsSUhSeVlXNXphV1Z1ZENjZ0sxeHVJQ0FnSUNjZ1pHVmlkV2RuWlhJZ2FXMXdiR1Z0Wlc1MGN5QndjbTkwWldOMFpXUWdkbTlzWVhScGJHVW5JQ3RjYmlBZ0lDQW5JR1J2ZFdKc1pTQnBiWEJ2Y25RZ2NIVmliR2xqSUd4bGRDQjVhV1ZzWkNCaGQyRnBkQ2NnSzF4dUlDQWdJQ2NnYm5Wc2JDQjBjblZsSUdaaGJITmxKMXh1SUNBcExuTndiR2wwS0NjZ0p5azdYRzVjYmlBZ1kyOXVjM1FnWTI5dGNHbHNaWEpYYjNKa2N5QTlJQ2hLWVhaaFUyTnlhWEIwUTI5dGNHbHNaWEl1VWtWVFJWSldSVVJmVjA5U1JGTWdQU0I3ZlNrN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCeVpYTmxjblpsWkZkdmNtUnpMbXhsYm1kMGFEc2dhU0E4SUd3N0lHa3JLeWtnZTF4dUlDQWdJR052YlhCcGJHVnlWMjl5WkhOYmNtVnpaWEoyWldSWGIzSmtjMXRwWFYwZ1BTQjBjblZsTzF4dUlDQjlYRzU5S1NncE8xeHVYRzR2S2lwY2JpQXFJRUJrWlhCeVpXTmhkR1ZrSUUxaGVTQmlaU0J5WlcxdmRtVmtJR2x1SUhSb1pTQnVaWGgwSUcxaGFtOXlJSFpsY25OcGIyNWNiaUFxTDF4dVNtRjJZVk5qY21sd2RFTnZiWEJwYkdWeUxtbHpWbUZzYVdSS1lYWmhVMk55YVhCMFZtRnlhV0ZpYkdWT1lXMWxJRDBnWm5WdVkzUnBiMjRvYm1GdFpTa2dlMXh1SUNCeVpYUjFjbTRnS0Z4dUlDQWdJQ0ZLWVhaaFUyTnlhWEIwUTI5dGNHbHNaWEl1VWtWVFJWSldSVVJmVjA5U1JGTmJibUZ0WlYwZ0ppWmNiaUFnSUNBdlhsdGhMWHBCTFZwZkpGMWJNQzA1WVMxNlFTMWFYeVJkS2lRdkxuUmxjM1FvYm1GdFpTbGNiaUFnS1R0Y2JuMDdYRzVjYm1aMWJtTjBhVzl1SUhOMGNtbGpkRXh2YjJ0MWNDaHlaWEYxYVhKbFZHVnliV2x1WVd3c0lHTnZiWEJwYkdWeUxDQndZWEowY3l3Z2RIbHdaU2tnZTF4dUlDQnNaWFFnYzNSaFkyc2dQU0JqYjIxd2FXeGxjaTV3YjNCVGRHRmpheWdwTEZ4dUlDQWdJR2tnUFNBd0xGeHVJQ0FnSUd4bGJpQTlJSEJoY25SekxteGxibWQwYUR0Y2JpQWdhV1lnS0hKbGNYVnBjbVZVWlhKdGFXNWhiQ2tnZTF4dUlDQWdJR3hsYmkwdE8xeHVJQ0I5WEc1Y2JpQWdabTl5SUNnN0lHa2dQQ0JzWlc0N0lHa3JLeWtnZTF4dUlDQWdJSE4wWVdOcklEMGdZMjl0Y0dsc1pYSXVibUZ0WlV4dmIydDFjQ2h6ZEdGamF5d2djR0Z5ZEhOYmFWMHNJSFI1Y0dVcE8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0hKbGNYVnBjbVZVWlhKdGFXNWhiQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmJYRzRnSUNBZ0lDQmpiMjF3YVd4bGNpNWhiR2xoYzJGaWJHVW9KMk52Ym5SaGFXNWxjaTV6ZEhKcFkzUW5LU3hjYmlBZ0lDQWdJQ2NvSnl4Y2JpQWdJQ0FnSUhOMFlXTnJMRnh1SUNBZ0lDQWdKeXdnSnl4Y2JpQWdJQ0FnSUdOdmJYQnBiR1Z5TG5GMWIzUmxaRk4wY21sdVp5aHdZWEowYzF0cFhTa3NYRzRnSUNBZ0lDQW5MQ0FuTEZ4dUlDQWdJQ0FnU2xOUFRpNXpkSEpwYm1kcFpua29ZMjl0Y0dsc1pYSXVjMjkxY21ObExtTjFjbkpsYm5STWIyTmhkR2x2Ymlrc1hHNGdJQ0FnSUNBbklDa25YRzRnSUNBZ1hUdGNiaUFnZlNCbGJITmxJSHRjYmlBZ0lDQnlaWFIxY200Z2MzUmhZMnM3WEc0Z0lIMWNibjFjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnU21GMllWTmpjbWx3ZEVOdmJYQnBiR1Z5TzF4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9oYW5kbGViYXJzUnVudGltZSA9IHJlcXVpcmUoJy4vaGFuZGxlYmFycy5ydW50aW1lJyk7XG5cbnZhciBfaGFuZGxlYmFyc1J1bnRpbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc1J1bnRpbWUpO1xuXG4vLyBDb21waWxlciBpbXBvcnRzXG5cbnZhciBfaGFuZGxlYmFyc0NvbXBpbGVyQXN0ID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdCcpO1xuXG52YXIgX2hhbmRsZWJhcnNDb21waWxlckFzdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzQ29tcGlsZXJBc3QpO1xuXG52YXIgX2hhbmRsZWJhcnNDb21waWxlckJhc2UgPSByZXF1aXJlKCcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYmFzZScpO1xuXG52YXIgX2hhbmRsZWJhcnNDb21waWxlckNvbXBpbGVyID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJyk7XG5cbnZhciBfaGFuZGxlYmFyc0NvbXBpbGVySmF2YXNjcmlwdENvbXBpbGVyID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInKTtcblxudmFyIF9oYW5kbGViYXJzQ29tcGlsZXJKYXZhc2NyaXB0Q29tcGlsZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc0NvbXBpbGVySmF2YXNjcmlwdENvbXBpbGVyKTtcblxudmFyIF9oYW5kbGViYXJzQ29tcGlsZXJWaXNpdG9yID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InKTtcblxudmFyIF9oYW5kbGViYXJzQ29tcGlsZXJWaXNpdG9yMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhbmRsZWJhcnNDb21waWxlclZpc2l0b3IpO1xuXG52YXIgX2hhbmRsZWJhcnNOb0NvbmZsaWN0ID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0Jyk7XG5cbnZhciBfaGFuZGxlYmFyc05vQ29uZmxpY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc05vQ29uZmxpY3QpO1xuXG52YXIgX2NyZWF0ZSA9IF9oYW5kbGViYXJzUnVudGltZTJbJ2RlZmF1bHQnXS5jcmVhdGU7XG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIHZhciBoYiA9IF9jcmVhdGUoKTtcblxuICBoYi5jb21waWxlID0gZnVuY3Rpb24gKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9oYW5kbGViYXJzQ29tcGlsZXJDb21waWxlci5jb21waWxlKGlucHV0LCBvcHRpb25zLCBoYik7XG4gIH07XG4gIGhiLnByZWNvbXBpbGUgPSBmdW5jdGlvbiAoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gX2hhbmRsZWJhcnNDb21waWxlckNvbXBpbGVyLnByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBfaGFuZGxlYmFyc0NvbXBpbGVyQXN0MlsnZGVmYXVsdCddO1xuICBoYi5Db21waWxlciA9IF9oYW5kbGViYXJzQ29tcGlsZXJDb21waWxlci5Db21waWxlcjtcbiAgaGIuSmF2YVNjcmlwdENvbXBpbGVyID0gX2hhbmRsZWJhcnNDb21waWxlckphdmFzY3JpcHRDb21waWxlcjJbJ2RlZmF1bHQnXTtcbiAgaGIuUGFyc2VyID0gX2hhbmRsZWJhcnNDb21waWxlckJhc2UucGFyc2VyO1xuICBoYi5wYXJzZSA9IF9oYW5kbGViYXJzQ29tcGlsZXJCYXNlLnBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gX2hhbmRsZWJhcnNDb21waWxlckJhc2UucGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbnZhciBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxuX2hhbmRsZWJhcnNOb0NvbmZsaWN0MlsnZGVmYXVsdCddKGluc3QpO1xuXG5pbnN0LlZpc2l0b3IgPSBfaGFuZGxlYmFyc0NvbXBpbGVyVmlzaXRvcjJbJ2RlZmF1bHQnXTtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gaW5zdDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN2FVTkJRVzlDTEhOQ1FVRnpRanM3T3pzN08zRkRRVWN4UWl3eVFrRkJNa0k3T3pzN2MwTkJTM0JETERSQ1FVRTBRanM3TUVOQlExY3NaME5CUVdkRE96dHZSRUZETDBNc01rTkJRVEpET3pzN08zbERRVU4wUkN3clFrRkJLMEk3T3pzN2IwTkJSVFZDTERCQ1FVRXdRanM3T3p0QlFVVnFSQ3hKUVVGSkxFOUJRVThzUjBGQlJ5d3JRa0ZCVVN4TlFVRk5MRU5CUVVNN1FVRkROMElzVTBGQlV5eE5RVUZOTEVkQlFVYzdRVUZEYUVJc1RVRkJTU3hGUVVGRkxFZEJRVWNzVDBGQlR5eEZRVUZGTEVOQlFVTTdPMEZCUlc1Q0xFbEJRVVVzUTBGQlF5eFBRVUZQTEVkQlFVY3NWVUZCVXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhGUVVGRk8wRkJRM0JETEZkQlFVOHNiME5CUVZFc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0SFFVTndReXhEUVVGRE8wRkJRMFlzU1VGQlJTeERRVUZETEZWQlFWVXNSMEZCUnl4VlFVRlRMRXRCUVVzc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRGRrTXNWMEZCVHl4MVEwRkJWeXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGRCUTNaRExFTkJRVU03TzBGQlJVWXNTVUZCUlN4RFFVRkRMRWRCUVVjc2NVTkJRVTBzUTBGQlF6dEJRVU5pTEVsQlFVVXNRMEZCUXl4UlFVRlJMSFZEUVVGWExFTkJRVU03UVVGRGRrSXNTVUZCUlN4RFFVRkRMR3RDUVVGclFpeHZSRUZCY1VJc1EwRkJRenRCUVVNelF5eEpRVUZGTEVOQlFVTXNUVUZCVFN4cFEwRkJVeXhEUVVGRE8wRkJRMjVDTEVsQlFVVXNRMEZCUXl4TFFVRkxMR2REUVVGUkxFTkJRVU03UVVGRGFrSXNTVUZCUlN4RFFVRkRMSE5DUVVGelFpeHBSRUZCZVVJc1EwRkJRenM3UVVGRmJrUXNVMEZCVHl4RlFVRkZMRU5CUVVNN1EwRkRXRHM3UVVGRlJDeEpRVUZKTEVsQlFVa3NSMEZCUnl4TlFVRk5MRVZCUVVVc1EwRkJRenRCUVVOd1FpeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJRenM3UVVGRmNrSXNhME5CUVZjc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJXcENMRWxCUVVrc1EwRkJReXhQUVVGUExIbERRVUZWTEVOQlFVTTdPMEZCUlhaQ0xFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN08zRkNRVVZTTEVsQlFVa2lMQ0ptYVd4bElqb2lhR0Z1Wkd4bFltRnljeTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCeWRXNTBhVzFsSUdaeWIyMGdKeTR2YUdGdVpHeGxZbUZ5Y3k1eWRXNTBhVzFsSnp0Y2JseHVMeThnUTI5dGNHbHNaWElnYVcxd2IzSjBjMXh1YVcxd2IzSjBJRUZUVkNCbWNtOXRJQ2N1TDJoaGJtUnNaV0poY25NdlkyOXRjR2xzWlhJdllYTjBKenRjYm1sdGNHOXlkQ0I3WEc0Z0lIQmhjbk5sY2lCaGN5QlFZWEp6WlhJc1hHNGdJSEJoY25ObExGeHVJQ0J3WVhKelpWZHBkR2h2ZFhSUWNtOWpaWE56YVc1blhHNTlJR1p5YjIwZ0p5NHZhR0Z1Wkd4bFltRnljeTlqYjIxd2FXeGxjaTlpWVhObEp6dGNibWx0Y0c5eWRDQjdJRU52YlhCcGJHVnlMQ0JqYjIxd2FXeGxMQ0J3Y21WamIyMXdhV3hsSUgwZ1puSnZiU0FuTGk5b1lXNWtiR1ZpWVhKekwyTnZiWEJwYkdWeUwyTnZiWEJwYkdWeUp6dGNibWx0Y0c5eWRDQktZWFpoVTJOeWFYQjBRMjl0Y0dsc1pYSWdabkp2YlNBbkxpOW9ZVzVrYkdWaVlYSnpMMk52YlhCcGJHVnlMMnBoZG1GelkzSnBjSFF0WTI5dGNHbHNaWEluTzF4dWFXMXdiM0owSUZacGMybDBiM0lnWm5KdmJTQW5MaTlvWVc1a2JHVmlZWEp6TDJOdmJYQnBiR1Z5TDNacGMybDBiM0luTzF4dVhHNXBiWEJ2Y25RZ2JtOURiMjVtYkdsamRDQm1jbTl0SUNjdUwyaGhibVJzWldKaGNuTXZibTh0WTI5dVpteHBZM1FuTzF4dVhHNXNaWFFnWDJOeVpXRjBaU0E5SUhKMWJuUnBiV1V1WTNKbFlYUmxPMXh1Wm5WdVkzUnBiMjRnWTNKbFlYUmxLQ2tnZTF4dUlDQnNaWFFnYUdJZ1BTQmZZM0psWVhSbEtDazdYRzVjYmlBZ2FHSXVZMjl0Y0dsc1pTQTlJR1oxYm1OMGFXOXVLR2x1Y0hWMExDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ2NtVjBkWEp1SUdOdmJYQnBiR1VvYVc1d2RYUXNJRzl3ZEdsdmJuTXNJR2hpS1R0Y2JpQWdmVHRjYmlBZ2FHSXVjSEpsWTI5dGNHbHNaU0E5SUdaMWJtTjBhVzl1S0dsdWNIVjBMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdjbVYwZFhKdUlIQnlaV052YlhCcGJHVW9hVzV3ZFhRc0lHOXdkR2x2Ym5Nc0lHaGlLVHRjYmlBZ2ZUdGNibHh1SUNCb1lpNUJVMVFnUFNCQlUxUTdYRzRnSUdoaUxrTnZiWEJwYkdWeUlEMGdRMjl0Y0dsc1pYSTdYRzRnSUdoaUxrcGhkbUZUWTNKcGNIUkRiMjF3YVd4bGNpQTlJRXBoZG1GVFkzSnBjSFJEYjIxd2FXeGxjanRjYmlBZ2FHSXVVR0Z5YzJWeUlEMGdVR0Z5YzJWeU8xeHVJQ0JvWWk1d1lYSnpaU0E5SUhCaGNuTmxPMXh1SUNCb1lpNXdZWEp6WlZkcGRHaHZkWFJRY205alpYTnphVzVuSUQwZ2NHRnljMlZYYVhSb2IzVjBVSEp2WTJWemMybHVaenRjYmx4dUlDQnlaWFIxY200Z2FHSTdYRzU5WEc1Y2JteGxkQ0JwYm5OMElEMGdZM0psWVhSbEtDazdYRzVwYm5OMExtTnlaV0YwWlNBOUlHTnlaV0YwWlR0Y2JseHVibTlEYjI1bWJHbGpkQ2hwYm5OMEtUdGNibHh1YVc1emRDNVdhWE5wZEc5eUlEMGdWbWx6YVhSdmNqdGNibHh1YVc1emRGc25aR1ZtWVhWc2RDZGRJRDBnYVc1emREdGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdhVzV6ZER0Y2JpSmRmUT09XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG4ndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnByaW50ID0gcHJpbnQ7XG5leHBvcnRzLlByaW50VmlzaXRvciA9IFByaW50VmlzaXRvcjtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF92aXNpdG9yID0gcmVxdWlyZSgnLi92aXNpdG9yJyk7XG5cbnZhciBfdmlzaXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92aXNpdG9yKTtcblxuZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiBuZXcgUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGFzdCk7XG59XG5cbmZ1bmN0aW9uIFByaW50VmlzaXRvcigpIHtcbiAgdGhpcy5wYWRkaW5nID0gMDtcbn1cblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZSA9IG5ldyBfdmlzaXRvcjJbJ2RlZmF1bHQnXSgpO1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIG91dCA9ICcnO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gdGhpcy5wYWRkaW5nOyBpIDwgbDsgaSsrKSB7XG4gICAgb3V0ICs9ICcgICc7XG4gIH1cblxuICBvdXQgKz0gc3RyaW5nICsgJ1xcbic7XG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlByb2dyYW0gPSBmdW5jdGlvbiAocHJvZ3JhbSkge1xuICB2YXIgb3V0ID0gJycsXG4gICAgICBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgaSA9IHVuZGVmaW5lZCxcbiAgICAgIGwgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHByb2dyYW0uYmxvY2tQYXJhbXMpIHtcbiAgICB2YXIgYmxvY2tQYXJhbXMgPSAnQkxPQ0sgUEFSQU1TOiBbJztcbiAgICBmb3IgKGkgPSAwLCBsID0gcHJvZ3JhbS5ibG9ja1BhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGJsb2NrUGFyYW1zICs9ICcgJyArIHByb2dyYW0uYmxvY2tQYXJhbXNbaV07XG4gICAgfVxuICAgIGJsb2NrUGFyYW1zICs9ICcgXSc7XG4gICAgb3V0ICs9IHRoaXMucGFkKGJsb2NrUGFyYW1zKTtcbiAgfVxuXG4gIGZvciAoaSA9IDAsIGwgPSBib2R5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChib2R5W2ldKTtcbiAgfVxuXG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk11c3RhY2hlU3RhdGVtZW50ID0gZnVuY3Rpb24gKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBmdW5jdGlvbiAobXVzdGFjaGUpIHtcbiAgcmV0dXJuIHRoaXMucGFkKCd7eyBESVJFQ1RJVkUgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkJsb2NrU3RhdGVtZW50ID0gUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IGZ1bmN0aW9uIChibG9jaykge1xuICB2YXIgb3V0ID0gJyc7XG5cbiAgb3V0ICs9IHRoaXMucGFkKChibG9jay50eXBlID09PSAnRGVjb3JhdG9yQmxvY2snID8gJ0RJUkVDVElWRSAnIDogJycpICsgJ0JMT0NLOicpO1xuICB0aGlzLnBhZGRpbmcrKztcbiAgb3V0ICs9IHRoaXMucGFkKHRoaXMuU3ViRXhwcmVzc2lvbihibG9jaykpO1xuICBpZiAoYmxvY2sucHJvZ3JhbSkge1xuICAgIG91dCArPSB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgICB0aGlzLnBhZGRpbmcrKztcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYmxvY2sucHJvZ3JhbSk7XG4gICAgdGhpcy5wYWRkaW5nLS07XG4gIH1cbiAgaWYgKGJsb2NrLmludmVyc2UpIHtcbiAgICBpZiAoYmxvY2sucHJvZ3JhbSkge1xuICAgICAgdGhpcy5wYWRkaW5nKys7XG4gICAgfVxuICAgIG91dCArPSB0aGlzLnBhZCgne3tefX0nKTtcbiAgICB0aGlzLnBhZGRpbmcrKztcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG4gICAgdGhpcy5wYWRkaW5nLS07XG4gICAgaWYgKGJsb2NrLnByb2dyYW0pIHtcbiAgICAgIHRoaXMucGFkZGluZy0tO1xuICAgIH1cbiAgfVxuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gZnVuY3Rpb24gKHBhcnRpYWwpIHtcbiAgdmFyIGNvbnRlbnQgPSAnUEFSVElBTDonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG4gIHJldHVybiB0aGlzLnBhZCgne3s+ICcgKyBjb250ZW50ICsgJyB9fScpO1xufTtcblByaW50VmlzaXRvci5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24gKHBhcnRpYWwpIHtcbiAgdmFyIGNvbnRlbnQgPSAnUEFSVElBTCBCTE9DSzonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG5cbiAgY29udGVudCArPSAnICcgKyB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIGNvbnRlbnQgKz0gdGhpcy5hY2NlcHQocGFydGlhbC5wcm9ncmFtKTtcbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIHRoaXMucGFkKCd7ez4gJyArIGNvbnRlbnQgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbnRlbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gdGhpcy5wYWQoXCJDT05URU5UWyAnXCIgKyBjb250ZW50LnZhbHVlICsgXCInIF1cIik7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbiAoY29tbWVudCkge1xuICByZXR1cm4gdGhpcy5wYWQoXCJ7eyEgJ1wiICsgY29tbWVudC52YWx1ZSArIFwiJyB9fVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuU3ViRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChzZXhwcikge1xuICB2YXIgcGFyYW1zID0gc2V4cHIucGFyYW1zLFxuICAgICAgcGFyYW1TdHJpbmdzID0gW10sXG4gICAgICBoYXNoID0gdW5kZWZpbmVkO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHBhcmFtU3RyaW5ncy5wdXNoKHRoaXMuYWNjZXB0KHBhcmFtc1tpXSkpO1xuICB9XG5cbiAgcGFyYW1zID0gJ1snICsgcGFyYW1TdHJpbmdzLmpvaW4oJywgJykgKyAnXSc7XG5cbiAgaGFzaCA9IHNleHByLmhhc2ggPyAnICcgKyB0aGlzLmFjY2VwdChzZXhwci5oYXNoKSA6ICcnO1xuXG4gIHJldHVybiB0aGlzLmFjY2VwdChzZXhwci5wYXRoKSArICcgJyArIHBhcmFtcyArIGhhc2g7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb24gKGlkKSB7XG4gIHZhciBwYXRoID0gaWQucGFydHMuam9pbignLycpO1xuICByZXR1cm4gKGlkLmRhdGEgPyAnQCcgOiAnJykgKyAnUEFUSDonICsgcGF0aDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuU3RyaW5nTGl0ZXJhbCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuICdcIicgKyBzdHJpbmcudmFsdWUgKyAnXCInO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gJ05VTUJFUnsnICsgbnVtYmVyLnZhbHVlICsgJ30nO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5Cb29sZWFuTGl0ZXJhbCA9IGZ1bmN0aW9uIChib29sKSB7XG4gIHJldHVybiAnQk9PTEVBTnsnICsgYm9vbC52YWx1ZSArICd9Jztcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuVW5kZWZpbmVkTGl0ZXJhbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdVTkRFRklORUQnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdWxsTGl0ZXJhbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICdOVUxMJztcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuSGFzaCA9IGZ1bmN0aW9uIChoYXNoKSB7XG4gIHZhciBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBqb2luZWRQYWlycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gcGFpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgam9pbmVkUGFpcnMucHVzaCh0aGlzLmFjY2VwdChwYWlyc1tpXSkpO1xuICB9XG5cbiAgcmV0dXJuICdIQVNIeycgKyBqb2luZWRQYWlycy5qb2luKCcsICcpICsgJ30nO1xufTtcblByaW50VmlzaXRvci5wcm90b3R5cGUuSGFzaFBhaXIgPSBmdW5jdGlvbiAocGFpcikge1xuICByZXR1cm4gcGFpci5rZXkgKyAnPScgKyB0aGlzLmFjY2VwdChwYWlyLnZhbHVlKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlIG5ldy1jYXAgKi9cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyTnZiWEJwYkdWeUwzQnlhVzUwWlhJdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096dDFRa0ZEYjBJc1YwRkJWenM3T3p0QlFVVjRRaXhUUVVGVExFdEJRVXNzUTBGQlF5eEhRVUZITEVWQlFVVTdRVUZEZWtJc1UwRkJUeXhKUVVGSkxGbEJRVmtzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenREUVVOMlF6czdRVUZGVFN4VFFVRlRMRmxCUVZrc1IwRkJSenRCUVVNM1FpeE5RVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRU5CUVVNc1EwRkJRenREUVVOc1FqczdRVUZGUkN4WlFVRlpMRU5CUVVNc1UwRkJVeXhIUVVGSExEQkNRVUZoTEVOQlFVTTdPMEZCUlhaRExGbEJRVmtzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4SFFVRkhMRlZCUVZNc1RVRkJUU3hGUVVGRk8wRkJRelZETEUxQlFVa3NSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJRenM3UVVGRllpeFBRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlF6VkRMRTlCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU03UjBGRFlqczdRVUZGUkN4TFFVRkhMRWxCUVVrc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF6dEJRVU55UWl4VFFVRlBMRWRCUVVjc1EwRkJRenREUVVOYUxFTkJRVU03TzBGQlJVWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhQUVVGUExFZEJRVWNzVlVGQlV5eFBRVUZQTEVWQlFVVTdRVUZEYWtRc1RVRkJTU3hIUVVGSExFZEJRVWNzUlVGQlJUdE5RVU5XTEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTVHROUVVOdVFpeERRVUZETEZsQlFVRTdUVUZEUkN4RFFVRkRMRmxCUVVFc1EwRkJRenM3UVVGRlNpeE5RVUZKTEU5QlFVOHNRMEZCUXl4WFFVRlhMRVZCUVVVN1FVRkRka0lzVVVGQlNTeFhRVUZYTEVkQlFVY3NhVUpCUVdsQ0xFTkJRVU03UVVGRGNFTXNVMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNWMEZCVnl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNSRUxHbENRVUZYTEVsQlFVa3NSMEZCUnl4SFFVRkhMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTMEZETjBNN1FVRkRSQ3hsUVVGWExFbEJRVWtzU1VGQlNTeERRVUZETzBGQlEzQkNMRTlCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMGRCUXpsQ096dEJRVVZFTEU5QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzBGQlEzWkRMRTlCUVVjc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wZEJRemRDT3p0QlFVVkVMRTFCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6czdRVUZGWml4VFFVRlBMRWRCUVVjc1EwRkJRenREUVVOYUxFTkJRVU03TzBGQlJVWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4VlFVRlRMRkZCUVZFc1JVRkJSVHRCUVVNMVJDeFRRVUZQTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRExFTkJRVU03UTBGREwwUXNRMEZCUXp0QlFVTkdMRmxCUVZrc1EwRkJReXhUUVVGVExFTkJRVU1zVTBGQlV5eEhRVUZITEZWQlFWTXNVVUZCVVN4RlFVRkZPMEZCUTNCRUxGTkJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4bFFVRmxMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eFJRVUZSTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJRenREUVVONlJTeERRVUZET3p0QlFVVkdMRmxCUVZrc1EwRkJReXhUUVVGVExFTkJRVU1zWTBGQll5eEhRVUZITEZsQlFWa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1kwRkJZeXhIUVVGSExGVkJRemxGTEV0QlFVc3NSVUZEVER0QlFVTkJMRTFCUVVrc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF6czdRVUZGWWl4TFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGRFlpeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRXRCUVVzc1owSkJRV2RDTEVkQlFVY3NXVUZCV1N4SFFVRkhMRVZCUVVVc1EwRkJRU3hIUVVGSkxGRkJRVkVzUTBGRGFrVXNRMEZCUXp0QlFVTkdMRTFCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEJRVU5tTEV0QlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVNelF5eE5RVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRha0lzVDBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU03UVVGRE5VSXNVVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wRkJRMllzVDBGQlJ5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEyeERMRkZCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEhRVU5vUWp0QlFVTkVMRTFCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJUdEJRVU5xUWl4UlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUExFVkJRVVU3UVVGRGFrSXNWVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRE8wdEJRMmhDTzBGQlEwUXNUMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdRVUZEZWtJc1VVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeERRVUZETzBGQlEyWXNUMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMEZCUTJ4RExGRkJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNRMEZCUXp0QlFVTm1MRkZCUVVrc1MwRkJTeXhEUVVGRExFOUJRVThzUlVGQlJUdEJRVU5xUWl4VlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03UzBGRGFFSTdSMEZEUmp0QlFVTkVMRTFCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6czdRVUZGWml4VFFVRlBMRWRCUVVjc1EwRkJRenREUVVOYUxFTkJRVU03TzBGQlJVWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhuUWtGQlowSXNSMEZCUnl4VlFVRlRMRTlCUVU4c1JVRkJSVHRCUVVNeFJDeE5RVUZKTEU5QlFVOHNSMEZCUnl4VlFVRlZMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZEYWtRc1RVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMEZCUTNKQ0xGZEJRVThzU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1IwRkRha1E3UVVGRFJDeE5RVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRVZCUVVVN1FVRkRhRUlzVjBGQlR5eEpRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SFFVTTFRenRCUVVORUxGTkJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRWRCUVVjc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF5eERRVUZETzBOQlF6TkRMRU5CUVVNN1FVRkRSaXhaUVVGWkxFTkJRVU1zVTBGQlV5eERRVUZETEhGQ1FVRnhRaXhIUVVGSExGVkJRVk1zVDBGQlR5eEZRVUZGTzBGQlF5OUVMRTFCUVVrc1QwRkJUeXhIUVVGSExHZENRVUZuUWl4SFFVRkhMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzBGQlEzWkVMRTFCUVVrc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0QlFVTnlRaXhYUVVGUExFbEJRVWtzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGRCUTJwRU8wRkJRMFFzVFVGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTJoQ0xGZEJRVThzU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdSMEZETlVNN08wRkJSVVFzVTBGQlR5eEpRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzBGQlEzUkRMRTFCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dEJRVU5tTEZOQlFVOHNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTjRReXhOUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdPMEZCUldZc1UwRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEUxQlFVMHNSMEZCUnl4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRExFTkJRVU03UTBGRE0wTXNRMEZCUXpzN1FVRkZSaXhaUVVGWkxFTkJRVU1zVTBGQlV5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExGVkJRVk1zVDBGQlR5eEZRVUZGTzBGQlF6RkVMRk5CUVU4c1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1IwRkJSeXhMUVVGTExFTkJRVU1zUTBGQlF6dERRVU4yUkN4RFFVRkRPenRCUVVWR0xGbEJRVmtzUTBGQlF5eFRRVUZUTEVOQlFVTXNaMEpCUVdkQ0xFZEJRVWNzVlVGQlV5eFBRVUZQTEVWQlFVVTdRVUZETVVRc1UwRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNc1MwRkJTeXhIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETzBOQlEyNUVMRU5CUVVNN08wRkJSVVlzV1VGQldTeERRVUZETEZOQlFWTXNRMEZCUXl4aFFVRmhMRWRCUVVjc1ZVRkJVeXhMUVVGTExFVkJRVVU3UVVGRGNrUXNUVUZCU1N4TlFVRk5MRWRCUVVjc1MwRkJTeXhEUVVGRExFMUJRVTA3VFVGRGRrSXNXVUZCV1N4SFFVRkhMRVZCUVVVN1RVRkRha0lzU1VGQlNTeFpRVUZCTEVOQlFVTTdPMEZCUlZBc1QwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVNM1F5eG5Ra0ZCV1N4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03UjBGRE0wTTdPMEZCUlVRc1VVRkJUU3hIUVVGSExFZEJRVWNzUjBGQlJ5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF6czdRVUZGTjBNc1RVRkJTU3hIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJRenM3UVVGRmRrUXNVMEZCVHl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF6dERRVU4wUkN4RFFVRkRPenRCUVVWR0xGbEJRVmtzUTBGQlF5eFRRVUZUTEVOQlFVTXNZMEZCWXl4SFFVRkhMRlZCUVZNc1JVRkJSU3hGUVVGRk8wRkJRMjVFTEUxQlFVa3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMEZCUXpsQ0xGTkJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4SFFVRkhMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVUVzUjBGQlNTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPME5CUXpsRExFTkJRVU03TzBGQlJVWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhoUVVGaExFZEJRVWNzVlVGQlV5eE5RVUZOTEVWQlFVVTdRVUZEZEVRc1UwRkJUeXhIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNN1EwRkRha01zUTBGQlF6czdRVUZGUml4WlFVRlpMRU5CUVVNc1UwRkJVeXhEUVVGRExHRkJRV0VzUjBGQlJ5eFZRVUZUTEUxQlFVMHNSVUZCUlR0QlFVTjBSQ3hUUVVGUExGTkJRVk1zUjBGQlJ5eE5RVUZOTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWRCUVVjc1EwRkJRenREUVVOMlF5eERRVUZET3p0QlFVVkdMRmxCUVZrc1EwRkJReXhUUVVGVExFTkJRVU1zWTBGQll5eEhRVUZITEZWQlFWTXNTVUZCU1N4RlFVRkZPMEZCUTNKRUxGTkJRVThzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1IwRkJSeXhEUVVGRE8wTkJRM1JETEVOQlFVTTdPMEZCUlVZc1dVRkJXU3hEUVVGRExGTkJRVk1zUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhaUVVGWE8wRkJRMjVFTEZOQlFVOHNWMEZCVnl4RFFVRkRPME5CUTNCQ0xFTkJRVU03TzBGQlJVWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhYUVVGWExFZEJRVWNzV1VGQlZ6dEJRVU01UXl4VFFVRlBMRTFCUVUwc1EwRkJRenREUVVObUxFTkJRVU03TzBGQlJVWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFZEJRVWNzVlVGQlV5eEpRVUZKTEVWQlFVVTdRVUZETTBNc1RVRkJTU3hMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVczdUVUZEY0VJc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF6czdRVUZGYmtJc1QwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRCUVVNMVF5eGxRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRIUVVONlF6czdRVUZGUkN4VFFVRlBMRTlCUVU4c1IwRkJSeXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjc1EwRkJRenREUVVNdlF5eERRVUZETzBGQlEwWXNXVUZCV1N4RFFVRkRMRk5CUVZNc1EwRkJReXhSUVVGUkxFZEJRVWNzVlVGQlV5eEpRVUZKTEVWQlFVVTdRVUZETDBNc1UwRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0RFFVTnFSQ3hEUVVGRElpd2labWxzWlNJNkluQnlhVzUwWlhJdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUl2S2lCbGMyeHBiblF0WkdsellXSnNaU0J1WlhjdFkyRndJQ292WEc1cGJYQnZjblFnVm1semFYUnZjaUJtY205dElDY3VMM1pwYzJsMGIzSW5PMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY0hKcGJuUW9ZWE4wS1NCN1hHNGdJSEpsZEhWeWJpQnVaWGNnVUhKcGJuUldhWE5wZEc5eUtDa3VZV05qWlhCMEtHRnpkQ2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQlFjbWx1ZEZacGMybDBiM0lvS1NCN1hHNGdJSFJvYVhNdWNHRmtaR2x1WnlBOUlEQTdYRzU5WEc1Y2JsQnlhVzUwVm1semFYUnZjaTV3Y205MGIzUjVjR1VnUFNCdVpYY2dWbWx6YVhSdmNpZ3BPMXh1WEc1UWNtbHVkRlpwYzJsMGIzSXVjSEp2ZEc5MGVYQmxMbkJoWkNBOUlHWjFibU4wYVc5dUtITjBjbWx1WnlrZ2UxeHVJQ0JzWlhRZ2IzVjBJRDBnSnljN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCMGFHbHpMbkJoWkdScGJtYzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0J2ZFhRZ0t6MGdKeUFnSnp0Y2JpQWdmVnh1WEc0Z0lHOTFkQ0FyUFNCemRISnBibWNnS3lBblhGeHVKenRjYmlBZ2NtVjBkWEp1SUc5MWREdGNibjA3WEc1Y2JsQnlhVzUwVm1semFYUnZjaTV3Y205MGIzUjVjR1V1VUhKdlozSmhiU0E5SUdaMWJtTjBhVzl1S0hCeWIyZHlZVzBwSUh0Y2JpQWdiR1YwSUc5MWRDQTlJQ2NuTEZ4dUlDQWdJR0p2WkhrZ1BTQndjbTluY21GdExtSnZaSGtzWEc0Z0lDQWdhU3hjYmlBZ0lDQnNPMXh1WEc0Z0lHbG1JQ2h3Y205bmNtRnRMbUpzYjJOclVHRnlZVzF6S1NCN1hHNGdJQ0FnYkdWMElHSnNiMk5yVUdGeVlXMXpJRDBnSjBKTVQwTkxJRkJCVWtGTlV6b2dXeWM3WEc0Z0lDQWdabTl5SUNocElEMGdNQ3dnYkNBOUlIQnliMmR5WVcwdVlteHZZMnRRWVhKaGJYTXViR1Z1WjNSb095QnBJRHdnYkRzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JpYkc5amExQmhjbUZ0Y3lBclBTQW5JQ2NnS3lCd2NtOW5jbUZ0TG1Kc2IyTnJVR0Z5WVcxelcybGRPMXh1SUNBZ0lIMWNiaUFnSUNCaWJHOWphMUJoY21GdGN5QXJQU0FuSUYwbk8xeHVJQ0FnSUc5MWRDQXJQU0IwYUdsekxuQmhaQ2hpYkc5amExQmhjbUZ0Y3lrN1hHNGdJSDFjYmx4dUlDQm1iM0lnS0drZ1BTQXdMQ0JzSUQwZ1ltOWtlUzVzWlc1bmRHZzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0J2ZFhRZ0t6MGdkR2hwY3k1aFkyTmxjSFFvWW05a2VWdHBYU2s3WEc0Z0lIMWNibHh1SUNCMGFHbHpMbkJoWkdScGJtY3RMVHRjYmx4dUlDQnlaWFIxY200Z2IzVjBPMXh1ZlR0Y2JseHVVSEpwYm5SV2FYTnBkRzl5TG5CeWIzUnZkSGx3WlM1TmRYTjBZV05vWlZOMFlYUmxiV1Z1ZENBOUlHWjFibU4wYVc5dUtHMTFjM1JoWTJobEtTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuQmhaQ2duZTNzZ0p5QXJJSFJvYVhNdVUzVmlSWGh3Y21WemMybHZiaWh0ZFhOMFlXTm9aU2tnS3lBbklIMTlKeWs3WEc1OU8xeHVVSEpwYm5SV2FYTnBkRzl5TG5CeWIzUnZkSGx3WlM1RVpXTnZjbUYwYjNJZ1BTQm1kVzVqZEdsdmJpaHRkWE4wWVdOb1pTa2dlMXh1SUNCeVpYUjFjbTRnZEdocGN5NXdZV1FvSjN0N0lFUkpVa1ZEVkVsV1JTQW5JQ3NnZEdocGN5NVRkV0pGZUhCeVpYTnphVzl1S0cxMWMzUmhZMmhsS1NBcklDY2dmWDBuS1R0Y2JuMDdYRzVjYmxCeWFXNTBWbWx6YVhSdmNpNXdjbTkwYjNSNWNHVXVRbXh2WTJ0VGRHRjBaVzFsYm5RZ1BTQlFjbWx1ZEZacGMybDBiM0l1Y0hKdmRHOTBlWEJsTGtSbFkyOXlZWFJ2Y2tKc2IyTnJJRDBnWm5WdVkzUnBiMjRvWEc0Z0lHSnNiMk5yWEc0cElIdGNiaUFnYkdWMElHOTFkQ0E5SUNjbk8xeHVYRzRnSUc5MWRDQXJQU0IwYUdsekxuQmhaQ2hjYmlBZ0lDQW9ZbXh2WTJzdWRIbHdaU0E5UFQwZ0owUmxZMjl5WVhSdmNrSnNiMk5ySnlBL0lDZEVTVkpGUTFSSlZrVWdKeUE2SUNjbktTQXJJQ2RDVEU5RFN6b25YRzRnSUNrN1hHNGdJSFJvYVhNdWNHRmtaR2x1Wnlzck8xeHVJQ0J2ZFhRZ0t6MGdkR2hwY3k1d1lXUW9kR2hwY3k1VGRXSkZlSEJ5WlhOemFXOXVLR0pzYjJOcktTazdYRzRnSUdsbUlDaGliRzlqYXk1d2NtOW5jbUZ0S1NCN1hHNGdJQ0FnYjNWMElDczlJSFJvYVhNdWNHRmtLQ2RRVWs5SFVrRk5PaWNwTzF4dUlDQWdJSFJvYVhNdWNHRmtaR2x1Wnlzck8xeHVJQ0FnSUc5MWRDQXJQU0IwYUdsekxtRmpZMlZ3ZENoaWJHOWpheTV3Y205bmNtRnRLVHRjYmlBZ0lDQjBhR2x6TG5CaFpHUnBibWN0TFR0Y2JpQWdmVnh1SUNCcFppQW9ZbXh2WTJzdWFXNTJaWEp6WlNrZ2UxeHVJQ0FnSUdsbUlDaGliRzlqYXk1d2NtOW5jbUZ0S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbkJoWkdScGJtY3JLenRjYmlBZ0lDQjlYRzRnSUNBZ2IzVjBJQ3M5SUhSb2FYTXVjR0ZrS0NkN2UxNTlmU2NwTzF4dUlDQWdJSFJvYVhNdWNHRmtaR2x1Wnlzck8xeHVJQ0FnSUc5MWRDQXJQU0IwYUdsekxtRmpZMlZ3ZENoaWJHOWpheTVwYm5abGNuTmxLVHRjYmlBZ0lDQjBhR2x6TG5CaFpHUnBibWN0TFR0Y2JpQWdJQ0JwWmlBb1lteHZZMnN1Y0hKdlozSmhiU2tnZTF4dUlDQWdJQ0FnZEdocGN5NXdZV1JrYVc1bkxTMDdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lIUm9hWE11Y0dGa1pHbHVaeTB0TzF4dVhHNGdJSEpsZEhWeWJpQnZkWFE3WEc1OU8xeHVYRzVRY21sdWRGWnBjMmwwYjNJdWNISnZkRzkwZVhCbExsQmhjblJwWVd4VGRHRjBaVzFsYm5RZ1BTQm1kVzVqZEdsdmJpaHdZWEowYVdGc0tTQjdYRzRnSUd4bGRDQmpiMjUwWlc1MElEMGdKMUJCVWxSSlFVdzZKeUFySUhCaGNuUnBZV3d1Ym1GdFpTNXZjbWxuYVc1aGJEdGNiaUFnYVdZZ0tIQmhjblJwWVd3dWNHRnlZVzF6V3pCZEtTQjdYRzRnSUNBZ1kyOXVkR1Z1ZENBclBTQW5JQ2NnS3lCMGFHbHpMbUZqWTJWd2RDaHdZWEowYVdGc0xuQmhjbUZ0YzFzd1hTazdYRzRnSUgxY2JpQWdhV1lnS0hCaGNuUnBZV3d1YUdGemFDa2dlMXh1SUNBZ0lHTnZiblJsYm5RZ0t6MGdKeUFuSUNzZ2RHaHBjeTVoWTJObGNIUW9jR0Z5ZEdsaGJDNW9ZWE5vS1R0Y2JpQWdmVnh1SUNCeVpYUjFjbTRnZEdocGN5NXdZV1FvSjN0N1BpQW5JQ3NnWTI5dWRHVnVkQ0FySUNjZ2ZYMG5LVHRjYm4wN1hHNVFjbWx1ZEZacGMybDBiM0l1Y0hKdmRHOTBlWEJsTGxCaGNuUnBZV3hDYkc5amExTjBZWFJsYldWdWRDQTlJR1oxYm1OMGFXOXVLSEJoY25ScFlXd3BJSHRjYmlBZ2JHVjBJR052Ym5SbGJuUWdQU0FuVUVGU1ZFbEJUQ0JDVEU5RFN6b25JQ3NnY0dGeWRHbGhiQzV1WVcxbExtOXlhV2RwYm1Gc08xeHVJQ0JwWmlBb2NHRnlkR2xoYkM1d1lYSmhiWE5iTUYwcElIdGNiaUFnSUNCamIyNTBaVzUwSUNzOUlDY2dKeUFySUhSb2FYTXVZV05qWlhCMEtIQmhjblJwWVd3dWNHRnlZVzF6V3pCZEtUdGNiaUFnZlZ4dUlDQnBaaUFvY0dGeWRHbGhiQzVvWVhOb0tTQjdYRzRnSUNBZ1kyOXVkR1Z1ZENBclBTQW5JQ2NnS3lCMGFHbHpMbUZqWTJWd2RDaHdZWEowYVdGc0xtaGhjMmdwTzF4dUlDQjlYRzVjYmlBZ1kyOXVkR1Z1ZENBclBTQW5JQ2NnS3lCMGFHbHpMbkJoWkNnblVGSlBSMUpCVFRvbktUdGNiaUFnZEdocGN5NXdZV1JrYVc1bkt5czdYRzRnSUdOdmJuUmxiblFnS3owZ2RHaHBjeTVoWTJObGNIUW9jR0Z5ZEdsaGJDNXdjbTluY21GdEtUdGNiaUFnZEdocGN5NXdZV1JrYVc1bkxTMDdYRzVjYmlBZ2NtVjBkWEp1SUhSb2FYTXVjR0ZrS0NkN2V6NGdKeUFySUdOdmJuUmxiblFnS3lBbklIMTlKeWs3WEc1OU8xeHVYRzVRY21sdWRGWnBjMmwwYjNJdWNISnZkRzkwZVhCbExrTnZiblJsYm5SVGRHRjBaVzFsYm5RZ1BTQm1kVzVqZEdsdmJpaGpiMjUwWlc1MEtTQjdYRzRnSUhKbGRIVnliaUIwYUdsekxuQmhaQ2hjSWtOUFRsUkZUbFJiSUNkY0lpQXJJR052Ym5SbGJuUXVkbUZzZFdVZ0t5QmNJaWNnWFZ3aUtUdGNibjA3WEc1Y2JsQnlhVzUwVm1semFYUnZjaTV3Y205MGIzUjVjR1V1UTI5dGJXVnVkRk4wWVhSbGJXVnVkQ0E5SUdaMWJtTjBhVzl1S0dOdmJXMWxiblFwSUh0Y2JpQWdjbVYwZFhKdUlIUm9hWE11Y0dGa0tGd2llM3NoSUNkY0lpQXJJR052YlcxbGJuUXVkbUZzZFdVZ0t5QmNJaWNnZlgxY0lpazdYRzU5TzF4dVhHNVFjbWx1ZEZacGMybDBiM0l1Y0hKdmRHOTBlWEJsTGxOMVlrVjRjSEpsYzNOcGIyNGdQU0JtZFc1amRHbHZiaWh6Wlhod2Npa2dlMXh1SUNCc1pYUWdjR0Z5WVcxeklEMGdjMlY0Y0hJdWNHRnlZVzF6TEZ4dUlDQWdJSEJoY21GdFUzUnlhVzVuY3lBOUlGdGRMRnh1SUNBZ0lHaGhjMmc3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBc0lHd2dQU0J3WVhKaGJYTXViR1Z1WjNSb095QnBJRHdnYkRzZ2FTc3JLU0I3WEc0Z0lDQWdjR0Z5WVcxVGRISnBibWR6TG5CMWMyZ29kR2hwY3k1aFkyTmxjSFFvY0dGeVlXMXpXMmxkS1NrN1hHNGdJSDFjYmx4dUlDQndZWEpoYlhNZ1BTQW5XeWNnS3lCd1lYSmhiVk4wY21sdVozTXVhbTlwYmlnbkxDQW5LU0FySUNkZEp6dGNibHh1SUNCb1lYTm9JRDBnYzJWNGNISXVhR0Z6YUNBL0lDY2dKeUFySUhSb2FYTXVZV05qWlhCMEtITmxlSEJ5TG1oaGMyZ3BJRG9nSnljN1hHNWNiaUFnY21WMGRYSnVJSFJvYVhNdVlXTmpaWEIwS0hObGVIQnlMbkJoZEdncElDc2dKeUFuSUNzZ2NHRnlZVzF6SUNzZ2FHRnphRHRjYm4wN1hHNWNibEJ5YVc1MFZtbHphWFJ2Y2k1d2NtOTBiM1I1Y0dVdVVHRjBhRVY0Y0hKbGMzTnBiMjRnUFNCbWRXNWpkR2x2YmlocFpDa2dlMXh1SUNCc1pYUWdjR0YwYUNBOUlHbGtMbkJoY25SekxtcHZhVzRvSnk4bktUdGNiaUFnY21WMGRYSnVJQ2hwWkM1a1lYUmhJRDhnSjBBbklEb2dKeWNwSUNzZ0oxQkJWRWc2SnlBcklIQmhkR2c3WEc1OU8xeHVYRzVRY21sdWRGWnBjMmwwYjNJdWNISnZkRzkwZVhCbExsTjBjbWx1WjB4cGRHVnlZV3dnUFNCbWRXNWpkR2x2YmloemRISnBibWNwSUh0Y2JpQWdjbVYwZFhKdUlDZGNJaWNnS3lCemRISnBibWN1ZG1Gc2RXVWdLeUFuWENJbk8xeHVmVHRjYmx4dVVISnBiblJXYVhOcGRHOXlMbkJ5YjNSdmRIbHdaUzVPZFcxaVpYSk1hWFJsY21Gc0lEMGdablZ1WTNScGIyNG9iblZ0WW1WeUtTQjdYRzRnSUhKbGRIVnliaUFuVGxWTlFrVlNleWNnS3lCdWRXMWlaWEl1ZG1Gc2RXVWdLeUFuZlNjN1hHNTlPMXh1WEc1UWNtbHVkRlpwYzJsMGIzSXVjSEp2ZEc5MGVYQmxMa0p2YjJ4bFlXNU1hWFJsY21Gc0lEMGdablZ1WTNScGIyNG9ZbTl2YkNrZ2UxeHVJQ0J5WlhSMWNtNGdKMEpQVDB4RlFVNTdKeUFySUdKdmIyd3VkbUZzZFdVZ0t5QW5mU2M3WEc1OU8xeHVYRzVRY21sdWRGWnBjMmwwYjNJdWNISnZkRzkwZVhCbExsVnVaR1ZtYVc1bFpFeHBkR1Z5WVd3Z1BTQm1kVzVqZEdsdmJpZ3BJSHRjYmlBZ2NtVjBkWEp1SUNkVlRrUkZSa2xPUlVRbk8xeHVmVHRjYmx4dVVISnBiblJXYVhOcGRHOXlMbkJ5YjNSdmRIbHdaUzVPZFd4c1RHbDBaWEpoYkNBOUlHWjFibU4wYVc5dUtDa2dlMXh1SUNCeVpYUjFjbTRnSjA1VlRFd25PMXh1ZlR0Y2JseHVVSEpwYm5SV2FYTnBkRzl5TG5CeWIzUnZkSGx3WlM1SVlYTm9JRDBnWm5WdVkzUnBiMjRvYUdGemFDa2dlMXh1SUNCc1pYUWdjR0ZwY25NZ1BTQm9ZWE5vTG5CaGFYSnpMRnh1SUNBZ0lHcHZhVzVsWkZCaGFYSnpJRDBnVzEwN1hHNWNiaUFnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCd1lXbHljeTVzWlc1bmRHZzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0JxYjJsdVpXUlFZV2x5Y3k1d2RYTm9LSFJvYVhNdVlXTmpaWEIwS0hCaGFYSnpXMmxkS1NrN1hHNGdJSDFjYmx4dUlDQnlaWFIxY200Z0owaEJVMGg3SnlBcklHcHZhVzVsWkZCaGFYSnpMbXB2YVc0b0p5d2dKeWtnS3lBbmZTYzdYRzU5TzF4dVVISnBiblJXYVhOcGRHOXlMbkJ5YjNSdmRIbHdaUzVJWVhOb1VHRnBjaUE5SUdaMWJtTjBhVzl1S0hCaGFYSXBJSHRjYmlBZ2NtVjBkWEp1SUhCaGFYSXVhMlY1SUNzZ0p6MG5JQ3NnZEdocGN5NWhZMk5sY0hRb2NHRnBjaTUyWVd4MVpTazdYRzU5TzF4dUx5b2daWE5zYVc1MExXVnVZV0pzWlNCdVpYY3RZMkZ3SUNvdlhHNGlYWDA9XG4iLCIvLyBVU0FHRTpcbi8vIHZhciBoYW5kbGViYXJzID0gcmVxdWlyZSgnaGFuZGxlYmFycycpO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdmFyICovXG5cbi8vIHZhciBsb2NhbCA9IGhhbmRsZWJhcnMuY3JlYXRlKCk7XG5cbnZhciBoYW5kbGViYXJzID0gcmVxdWlyZSgnLi4vZGlzdC9janMvaGFuZGxlYmFycycpWydkZWZhdWx0J107XG5cbnZhciBwcmludGVyID0gcmVxdWlyZSgnLi4vZGlzdC9janMvaGFuZGxlYmFycy9jb21waWxlci9wcmludGVyJyk7XG5oYW5kbGViYXJzLlByaW50VmlzaXRvciA9IHByaW50ZXIuUHJpbnRWaXNpdG9yO1xuaGFuZGxlYmFycy5wcmludCA9IHByaW50ZXIucHJpbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gaGFuZGxlYmFycztcblxuLy8gUHVibGlzaCBhIE5vZGUuanMgcmVxdWlyZSgpIGhhbmRsZXIgZm9yIC5oYW5kbGViYXJzIGFuZCAuaGJzIGZpbGVzXG5mdW5jdGlvbiBleHRlbnNpb24obW9kdWxlLCBmaWxlbmFtZSkge1xuICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuICB2YXIgdGVtcGxhdGVTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsICd1dGY4Jyk7XG4gIG1vZHVsZS5leHBvcnRzID0gaGFuZGxlYmFycy5jb21waWxlKHRlbXBsYXRlU3RyaW5nKTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5pZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmIHJlcXVpcmUuZXh0ZW5zaW9ucykge1xuICByZXF1aXJlLmV4dGVuc2lvbnNbJy5oYW5kbGViYXJzJ10gPSBleHRlbnNpb247XG4gIHJlcXVpcmUuZXh0ZW5zaW9uc1snLmhicyddID0gZXh0ZW5zaW9uO1xufVxuIiwiaW1wb3J0IHtcbiAgQXBwLFxuICBGdXp6eU1hdGNoLFxuICBGdXp6eVN1Z2dlc3RNb2RhbCxcbiAgTm90aWNlLFxuICByZW5kZXJNYXRjaGVzLFxuICBTZWFyY2hNYXRjaGVzLFxuICBTZWFyY2hNYXRjaFBhcnQsXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBDaXRhdGlvblBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgRW50cnkgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gU3R1YiBzb21lIG1ldGhvZHMgd2Uga25vdyBhcmUgdGhlcmUuLlxuaW50ZXJmYWNlIEZ1enp5U3VnZ2VzdE1vZGFsRXh0PFQ+IGV4dGVuZHMgRnV6enlTdWdnZXN0TW9kYWw8VD4ge1xuICBjaG9vc2VyOiBDaG9vc2VyRXh0O1xufVxuaW50ZXJmYWNlIENob29zZXJFeHQge1xuICB1c2VTZWxlY3RlZEl0ZW0oZXZ0OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCk6IHZvaWQ7XG59XG5cbmNsYXNzIFNlYXJjaE1vZGFsIGV4dGVuZHMgRnV6enlTdWdnZXN0TW9kYWw8RW50cnk+IHtcbiAgcGx1Z2luOiBDaXRhdGlvblBsdWdpbjtcbiAgbGltaXQgPSA1MDtcblxuICBsb2FkaW5nRWw6IEhUTUxFbGVtZW50O1xuICBsb2FkaW5nQ2hlY2tlckhhbmRsZTogTm9kZUpTLlRpbWVvdXQ7XG4gIC8vIEhvdyBmcmVxdWVudGx5IHNob3VsZCB3ZSBjaGVjayB3aGV0aGVyIHRoZSBsaWJyYXJ5IGlzIHN0aWxsIGxvYWRpbmc/XG4gIGxvYWRpbmdDaGVja0ludGVydmFsID0gMjUwO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IENpdGF0aW9uUGx1Z2luKSB7XG4gICAgc3VwZXIoYXBwKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblxuICAgIHRoaXMucmVzdWx0Q29udGFpbmVyRWwuYWRkQ2xhc3MoJ3pvdGVyb01vZGFsUmVzdWx0cycpO1xuXG4gICAgdGhpcy5pbnB1dEVsLnNldEF0dHJpYnV0ZSgnc3BlbGxjaGVjaycsICdmYWxzZScpO1xuXG4gICAgdGhpcy5sb2FkaW5nRWwgPSB0aGlzLnJlc3VsdENvbnRhaW5lckVsLnBhcmVudEVsZW1lbnQuY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgIGNsczogJ3pvdGVyb01vZGFsTG9hZGluZycsXG4gICAgfSk7XG4gICAgdGhpcy5sb2FkaW5nRWwuY3JlYXRlRWwoJ2RpdicsIHsgY2xzOiAnem90ZXJvTW9kYWxMb2FkaW5nQW5pbWF0aW9uJyB9KTtcbiAgICB0aGlzLmxvYWRpbmdFbC5jcmVhdGVFbCgncCcsIHtcbiAgICAgIHRleHQ6ICdMb2FkaW5nIGNpdGF0aW9uIGRhdGFiYXNlLiBQbGVhc2Ugd2FpdC4uLicsXG4gICAgfSk7XG4gIH1cblxuICBvbk9wZW4oKSB7XG4gICAgc3VwZXIub25PcGVuKCk7XG5cbiAgICB0aGlzLmNoZWNrTG9hZGluZygpO1xuICAgIHRoaXMubG9hZGluZ0NoZWNrZXJIYW5kbGUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrTG9hZGluZygpO1xuICAgIH0sIHRoaXMubG9hZGluZ0NoZWNrSW50ZXJ2YWwpO1xuXG4gICAgLy8gRG9uJ3QgaW1tZWRpYXRlbHkgcmVnaXN0ZXIga2V5ZXZlbnQgbGlzdGVuZXJzLiBJZiB0aGUgbW9kYWwgd2FzIHRyaWdnZXJlZFxuICAgIC8vIGJ5IGFuIFwiRW50ZXJcIiBrZXlzdHJva2UgKGUuZy4gdmlhIHRoZSBPYnNpZGlhbiBjb21tYW5kIGRpYWxvZyksIHRoaXMgZXZlbnRcbiAgICAvLyB3aWxsIGJlIHJlY2VpdmVkIGhlcmUgZXJyb25lb3VzbHkuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChldikgPT4gdGhpcy5vbklucHV0S2V5ZG93bihldikpO1xuICAgICAgdGhpcy5pbnB1dEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGV2KSA9PiB0aGlzLm9uSW5wdXRLZXl1cChldikpO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIGlmICh0aGlzLmxvYWRpbmdDaGVja2VySGFuZGxlKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMubG9hZGluZ0NoZWNrZXJIYW5kbGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgbGlicmFyeSBpcyBjdXJyZW50bHkgYmVpbmcgbG9hZGVkLiBJZiBzbywgZGlzcGxheSBhbmltYXRpb25cbiAgICogYW5kIGRpc2FibGUgaW5wdXQuIE90aGVyd2lzZSBoaWRlIGFuaW1hdGlvbiBhbmQgZW5hYmxlIGlucHV0LlxuICAgKi9cbiAgY2hlY2tMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLnBsdWdpbi5pc0xpYnJhcnlMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdFbC5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICB0aGlzLmlucHV0RWwuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZXN1bHRDb250YWluZXJFbC5lbXB0eSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdFbC5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICB0aGlzLmlucHV0RWwuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5wdXRFbC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldEl0ZW1zKCk6IEVudHJ5W10ge1xuICAgIGlmICh0aGlzLnBsdWdpbi5pc0xpYnJhcnlMb2FkaW5nKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wbHVnaW4ubGlicmFyeS5lbnRyaWVzKTtcbiAgfVxuXG4gIGdldEl0ZW1UZXh0KGl0ZW06IEVudHJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7aXRlbS50aXRsZX0gJHtpdGVtLmF1dGhvclN0cmluZ30gJHtpdGVtLnllYXJ9YDtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgb25DaG9vc2VJdGVtKGl0ZW06IEVudHJ5LCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW4ub3BlbkxpdGVyYXR1cmVOb3RlKGl0ZW0uaWQsIGZhbHNlKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgfVxuXG4gIHJlbmRlclN1Z2dlc3Rpb24obWF0Y2g6IEZ1enp5TWF0Y2g8RW50cnk+LCBlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBlbC5lbXB0eSgpO1xuICAgIGNvbnN0IGVudHJ5ID0gbWF0Y2guaXRlbTtcbiAgICBjb25zdCBlbnRyeVRpdGxlID0gZW50cnkudGl0bGUgfHwgJyc7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBlbC5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICd6b3Rlcm9SZXN1bHQnIH0pO1xuICAgIGNvbnN0IHRpdGxlRWwgPSBjb250YWluZXIuY3JlYXRlRWwoJ3NwYW4nLCB7XG4gICAgICBjbHM6ICd6b3Rlcm9UaXRsZScsXG4gICAgfSk7XG4gICAgY29udGFpbmVyLmNyZWF0ZUVsKCdzcGFuJywgeyBjbHM6ICd6b3Rlcm9DaXRla2V5JywgdGV4dDogZW50cnkuaWQgfSk7XG5cbiAgICBjb25zdCBhdXRob3JzQ2xzID0gZW50cnkuYXV0aG9yU3RyaW5nXG4gICAgICA/ICd6b3Rlcm9BdXRob3JzJ1xuICAgICAgOiAnem90ZXJvQXV0aG9ycyB6b3Rlcm9BdXRob3JzRW1wdHknO1xuICAgIGNvbnN0IGF1dGhvcnNFbCA9IGNvbnRhaW5lci5jcmVhdGVFbCgnc3BhbicsIHtcbiAgICAgIGNsczogYXV0aG9yc0NscyxcbiAgICB9KTtcblxuICAgIC8vIFByZXBhcmUgdG8gaGlnaGxpZ2h0IHN0cmluZyBtYXRjaGVzIGZvciBlYWNoIHBhcnQgb2YgdGhlIHNlYXJjaCBpdGVtLlxuICAgIC8vIENvbXB1dGUgb2Zmc2V0cyBvZiBlYWNoIHJlbmRlcmVkIGVsZW1lbnQncyBjb250ZW50IHdpdGhpbiB0aGUgc3RyaW5nXG4gICAgLy8gcmV0dXJuZWQgYnkgYGdldEl0ZW1UZXh0YC5cbiAgICBjb25zdCBhbGxNYXRjaGVzID0gbWF0Y2gubWF0Y2gubWF0Y2hlcztcbiAgICBjb25zdCBhdXRob3JTdHJpbmdPZmZzZXQgPSAxICsgZW50cnlUaXRsZS5sZW5ndGg7XG5cbiAgICAvLyBGaWx0ZXIgYSBtYXRjaCBsaXN0IHRvIGNvbnRhaW4gb25seSB0aGUgcmVsZXZhbnQgbWF0Y2hlcyBmb3IgYSBnaXZlblxuICAgIC8vIHN1YnN0cmluZywgYW5kIHdpdGggbWF0Y2ggaW5kaWNlcyBzaGlmdGVkIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGF0XG4gICAgLy8gc3Vic3RyaW5nXG4gICAgY29uc3Qgc2hpZnRNYXRjaGVzID0gKFxuICAgICAgbWF0Y2hlczogU2VhcmNoTWF0Y2hlcyxcbiAgICAgIHN0YXJ0OiBudW1iZXIsXG4gICAgICBlbmQ6IG51bWJlcixcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBtYXRjaGVzXG4gICAgICAgIC5tYXAoKG1hdGNoOiBTZWFyY2hNYXRjaFBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWF0Y2hTdGFydCwgbWF0Y2hFbmRdID0gbWF0Y2g7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG1hdGNoU3RhcnQgLSBzdGFydCxcbiAgICAgICAgICAgIE1hdGgubWluKG1hdGNoRW5kIC0gc3RhcnQsIGVuZCksXG4gICAgICAgICAgXSBhcyBTZWFyY2hNYXRjaFBhcnQ7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKG1hdGNoOiBTZWFyY2hNYXRjaFBhcnQpID0+IHtcbiAgICAgICAgICBjb25zdCBbbWF0Y2hTdGFydCwgbWF0Y2hFbmRdID0gbWF0Y2g7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoU3RhcnQgPj0gMDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIE5vdyBoaWdobGlnaHQgbWF0Y2hlZCBzdHJpbmdzIHdpdGhpbiBlYWNoIGVsZW1lbnRcbiAgICByZW5kZXJNYXRjaGVzKFxuICAgICAgdGl0bGVFbCxcbiAgICAgIGVudHJ5VGl0bGUsXG4gICAgICBzaGlmdE1hdGNoZXMoYWxsTWF0Y2hlcywgMCwgZW50cnlUaXRsZS5sZW5ndGgpLFxuICAgICk7XG4gICAgaWYgKGVudHJ5LmF1dGhvclN0cmluZykge1xuICAgICAgcmVuZGVyTWF0Y2hlcyhcbiAgICAgICAgYXV0aG9yc0VsLFxuICAgICAgICBlbnRyeS5hdXRob3JTdHJpbmcsXG4gICAgICAgIHNoaWZ0TWF0Y2hlcyhcbiAgICAgICAgICBhbGxNYXRjaGVzLFxuICAgICAgICAgIGF1dGhvclN0cmluZ09mZnNldCxcbiAgICAgICAgICBhdXRob3JTdHJpbmdPZmZzZXQgKyBlbnRyeS5hdXRob3JTdHJpbmcubGVuZ3RoLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5ZG93bihldjogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldi5rZXkgPT0gJ1RhYicpIHtcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEtleXVwKGV2OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2LmtleSA9PSAnRW50ZXInIHx8IGV2LmtleSA9PSAnVGFiJykge1xuICAgICAgKCh0aGlzIGFzIHVua25vd24pIGFzIEZ1enp5U3VnZ2VzdE1vZGFsRXh0PEVudHJ5PikuY2hvb3Nlci51c2VTZWxlY3RlZEl0ZW0oXG4gICAgICAgIGV2LFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9wZW5Ob3RlTW9kYWwgZXh0ZW5kcyBTZWFyY2hNb2RhbCB7XG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IENpdGF0aW9uUGx1Z2luKSB7XG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuXG4gICAgdGhpcy5zZXRJbnN0cnVjdGlvbnMoW1xuICAgICAgeyBjb21tYW5kOiAn4oaR4oaTJywgcHVycG9zZTogJ3RvIG5hdmlnYXRlJyB9LFxuICAgICAgeyBjb21tYW5kOiAn4oa1JywgcHVycG9zZTogJ3RvIG9wZW4gbGl0ZXJhdHVyZSBub3RlJyB9LFxuICAgICAgeyBjb21tYW5kOiAnY3RybCDihrUnLCBwdXJwb3NlOiAndG8gb3BlbiBsaXRlcmF0dXJlIG5vdGUgaW4gYSBuZXcgcGFuZScgfSxcbiAgICAgIHsgY29tbWFuZDogJ3RhYicsIHB1cnBvc2U6ICdvcGVuIGluIFpvdGVybycgfSxcbiAgICAgIHsgY29tbWFuZDogJ3NoaWZ0IHRhYicsIHB1cnBvc2U6ICdvcGVuIFBERicgfSxcbiAgICAgIHsgY29tbWFuZDogJ2VzYycsIHB1cnBvc2U6ICd0byBkaXNtaXNzJyB9LFxuICAgIF0pO1xuICB9XG5cbiAgb25DaG9vc2VJdGVtKGl0ZW06IEVudHJ5LCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2dCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQgfHwgZXZ0LmtleSA9PSAnRW50ZXInKSB7XG4gICAgICBjb25zdCBuZXdQYW5lID1cbiAgICAgICAgZXZ0IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiAoZXZ0IGFzIEtleWJvYXJkRXZlbnQpLmN0cmxLZXk7XG4gICAgICB0aGlzLnBsdWdpbi5vcGVuTGl0ZXJhdHVyZU5vdGUoaXRlbS5pZCwgbmV3UGFuZSk7XG4gICAgfSBlbHNlIGlmIChldnQua2V5ID09ICdUYWInKSB7XG4gICAgICBpZiAoZXZ0LnNoaWZ0S2V5KSB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gaXRlbS5maWxlcyB8fCBbXTtcbiAgICAgICAgY29uc3QgcGRmUGF0aHMgPSBmaWxlcy5maWx0ZXIoKHBhdGgpID0+XG4gICAgICAgICAgcGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdwZGYnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHBkZlBhdGhzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgbmV3IE5vdGljZSgnVGhpcyByZWZlcmVuY2UgaGFzIG5vIGFzc29jaWF0ZWQgUERGIGZpbGVzLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wZW4oYGZpbGU6Ly8ke3BkZlBhdGhzWzBdfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcGVuKGl0ZW0uem90ZXJvU2VsZWN0VVJJKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluc2VydE5vdGVMaW5rTW9kYWwgZXh0ZW5kcyBTZWFyY2hNb2RhbCB7XG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IENpdGF0aW9uUGx1Z2luKSB7XG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuXG4gICAgdGhpcy5zZXRJbnN0cnVjdGlvbnMoW1xuICAgICAgeyBjb21tYW5kOiAn4oaR4oaTJywgcHVycG9zZTogJ3RvIG5hdmlnYXRlJyB9LFxuICAgICAgeyBjb21tYW5kOiAn4oa1JywgcHVycG9zZTogJ3RvIGluc2VydCBsaXRlcmF0dXJlIG5vdGUgcmVmZXJlbmNlJyB9LFxuICAgICAgeyBjb21tYW5kOiAnZXNjJywgcHVycG9zZTogJ3RvIGRpc21pc3MnIH0sXG4gICAgXSk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIG9uQ2hvb3NlSXRlbShpdGVtOiBFbnRyeSwgZXZ0OiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW4uaW5zZXJ0TGl0ZXJhdHVyZU5vdGVMaW5rKGl0ZW0uaWQpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnNlcnROb3RlQ29udGVudE1vZGFsIGV4dGVuZHMgU2VhcmNoTW9kYWwge1xuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDaXRhdGlvblBsdWdpbikge1xuICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcblxuICAgIHRoaXMuc2V0SW5zdHJ1Y3Rpb25zKFtcbiAgICAgIHsgY29tbWFuZDogJ+KGkeKGkycsIHB1cnBvc2U6ICd0byBuYXZpZ2F0ZScgfSxcbiAgICAgIHtcbiAgICAgICAgY29tbWFuZDogJ+KGtScsXG4gICAgICAgIHB1cnBvc2U6ICd0byBpbnNlcnQgbGl0ZXJhdHVyZSBub3RlIGNvbnRlbnQgaW4gYWN0aXZlIHBhbmUnLFxuICAgICAgfSxcbiAgICAgIHsgY29tbWFuZDogJ2VzYycsIHB1cnBvc2U6ICd0byBkaXNtaXNzJyB9LFxuICAgIF0pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBvbkNob29zZUl0ZW0oaXRlbTogRW50cnksIGV2dDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luLmluc2VydExpdGVyYXR1cmVOb3RlQ29udGVudChpdGVtLmlkKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5zZXJ0Q2l0YXRpb25Nb2RhbCBleHRlbmRzIFNlYXJjaE1vZGFsIHtcbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogQ2l0YXRpb25QbHVnaW4pIHtcbiAgICBzdXBlcihhcHAsIHBsdWdpbik7XG5cbiAgICB0aGlzLnNldEluc3RydWN0aW9ucyhbXG4gICAgICB7IGNvbW1hbmQ6ICfihpHihpMnLCBwdXJwb3NlOiAndG8gbmF2aWdhdGUnIH0sXG4gICAgICB7IGNvbW1hbmQ6ICfihrUnLCBwdXJwb3NlOiAndG8gaW5zZXJ0IE1hcmtkb3duIGNpdGF0aW9uJyB9LFxuICAgICAgeyBjb21tYW5kOiAnc2hpZnQg4oa1JywgcHVycG9zZTogJ3RvIGluc2VydCBzZWNvbmRhcnkgTWFya2Rvd24gY2l0YXRpb24nIH0sXG4gICAgICB7IGNvbW1hbmQ6ICdlc2MnLCBwdXJwb3NlOiAndG8gZGlzbWlzcycgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgb25DaG9vc2VJdGVtKGl0ZW06IEVudHJ5LCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNBbHRlcm5hdGl2ZSA9IGV2dCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgZXZ0LnNoaWZ0S2V5O1xuICAgIHRoaXMucGx1Z2luXG4gICAgICAuaW5zZXJ0TWFya2Rvd25DaXRhdGlvbihpdGVtLmlkLCBpc0FsdGVybmF0aXZlKVxuICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICB9XG59XG4iLCIvKlxuICogR2VuZXJhdGVkIGJ5IFBFRy5qcyAwLjEwLjAuXG4gKlxuICogaHR0cDovL3BlZ2pzLm9yZy9cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gcGVnJHN1YmNsYXNzKGNoaWxkLCBwYXJlbnQpIHtcbiAgZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9XG4gIGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTtcbiAgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTtcbn1cblxuZnVuY3Rpb24gcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIGV4cGVjdGVkLCBmb3VuZCwgbG9jYXRpb24pIHtcbiAgdGhpcy5tZXNzYWdlICA9IG1lc3NhZ2U7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5mb3VuZCAgICA9IGZvdW5kO1xuICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb247XG4gIHRoaXMubmFtZSAgICAgPSBcIlN5bnRheEVycm9yXCI7XG5cbiAgaWYgKHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgcGVnJFN5bnRheEVycm9yKTtcbiAgfVxufVxuXG5wZWckc3ViY2xhc3MocGVnJFN5bnRheEVycm9yLCBFcnJvcik7XG5cbnBlZyRTeW50YXhFcnJvci5idWlsZE1lc3NhZ2UgPSBmdW5jdGlvbihleHBlY3RlZCwgZm91bmQpIHtcbiAgdmFyIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOUyA9IHtcbiAgICAgICAgbGl0ZXJhbDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGV4cGVjdGF0aW9uLnRleHQpICsgXCJcXFwiXCI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJjbGFzc1wiOiBmdW5jdGlvbihleHBlY3RhdGlvbikge1xuICAgICAgICAgIHZhciBlc2NhcGVkUGFydHMgPSBcIlwiLFxuICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGF0aW9uLnBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBlc2NhcGVkUGFydHMgKz0gZXhwZWN0YXRpb24ucGFydHNbaV0gaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgICAgICA/IGNsYXNzRXNjYXBlKGV4cGVjdGF0aW9uLnBhcnRzW2ldWzBdKSArIFwiLVwiICsgY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV1bMV0pXG4gICAgICAgICAgICAgIDogY2xhc3NFc2NhcGUoZXhwZWN0YXRpb24ucGFydHNbaV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBcIltcIiArIChleHBlY3RhdGlvbi5pbnZlcnRlZCA/IFwiXlwiIDogXCJcIikgKyBlc2NhcGVkUGFydHMgKyBcIl1cIjtcbiAgICAgICAgfSxcblxuICAgICAgICBhbnk6IGZ1bmN0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIFwiYW55IGNoYXJhY3RlclwiO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVuZDogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gXCJlbmQgb2YgaW5wdXRcIjtcbiAgICAgICAgfSxcblxuICAgICAgICBvdGhlcjogZnVuY3Rpb24oZXhwZWN0YXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZXhwZWN0YXRpb24uZGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgZnVuY3Rpb24gaGV4KGNoKSB7XG4gICAgcmV0dXJuIGNoLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXRlcmFsRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFwwL2csICdcXFxcMCcpXG4gICAgICAucmVwbGFjZSgvXFx0L2csICdcXFxcdCcpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvW1xceDAwLVxceDBGXS9nLCAgICAgICAgICBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4MCcgKyBoZXgoY2gpOyB9KVxuICAgICAgLnJlcGxhY2UoL1tcXHgxMC1cXHgxRlxceDdGLVxceDlGXS9nLCBmdW5jdGlvbihjaCkgeyByZXR1cm4gJ1xcXFx4JyAgKyBoZXgoY2gpOyB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzRXNjYXBlKHMpIHtcbiAgICByZXR1cm4gc1xuICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgIC5yZXBsYWNlKC9cXF0vZywgJ1xcXFxdJylcbiAgICAgIC5yZXBsYWNlKC9cXF4vZywgJ1xcXFxeJylcbiAgICAgIC5yZXBsYWNlKC8tL2csICAnXFxcXC0nKVxuICAgICAgLnJlcGxhY2UoL1xcMC9nLCAnXFxcXDAnKVxuICAgICAgLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKVxuICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgLnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxuICAgICAgLnJlcGxhY2UoL1tcXHgwMC1cXHgwRl0vZywgICAgICAgICAgZnVuY3Rpb24oY2gpIHsgcmV0dXJuICdcXFxceDAnICsgaGV4KGNoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bXFx4MTAtXFx4MUZcXHg3Ri1cXHg5Rl0vZywgZnVuY3Rpb24oY2gpIHsgcmV0dXJuICdcXFxceCcgICsgaGV4KGNoKTsgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGF0aW9uKSB7XG4gICAgcmV0dXJuIERFU0NSSUJFX0VYUEVDVEFUSU9OX0ZOU1tleHBlY3RhdGlvbi50eXBlXShleHBlY3RhdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUV4cGVjdGVkKGV4cGVjdGVkKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9ucyA9IG5ldyBBcnJheShleHBlY3RlZC5sZW5ndGgpLFxuICAgICAgICBpLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkZXNjcmlwdGlvbnNbaV0gPSBkZXNjcmliZUV4cGVjdGF0aW9uKGV4cGVjdGVkW2ldKTtcbiAgICB9XG5cbiAgICBkZXNjcmlwdGlvbnMuc29ydCgpO1xuXG4gICAgaWYgKGRlc2NyaXB0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGkgPSAxLCBqID0gMTsgaSA8IGRlc2NyaXB0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2kgLSAxXSAhPT0gZGVzY3JpcHRpb25zW2ldKSB7XG4gICAgICAgICAgZGVzY3JpcHRpb25zW2pdID0gZGVzY3JpcHRpb25zW2ldO1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVzY3JpcHRpb25zLmxlbmd0aCA9IGo7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBkZXNjcmlwdGlvbnNbMF07XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uc1swXSArIFwiIG9yIFwiICsgZGVzY3JpcHRpb25zWzFdO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZGVzY3JpcHRpb25zLnNsaWNlKDAsIC0xKS5qb2luKFwiLCBcIilcbiAgICAgICAgICArIFwiLCBvciBcIlxuICAgICAgICAgICsgZGVzY3JpcHRpb25zW2Rlc2NyaXB0aW9ucy5sZW5ndGggLSAxXTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXNjcmliZUZvdW5kKGZvdW5kKSB7XG4gICAgcmV0dXJuIGZvdW5kID8gXCJcXFwiXCIgKyBsaXRlcmFsRXNjYXBlKGZvdW5kKSArIFwiXFxcIlwiIDogXCJlbmQgb2YgaW5wdXRcIjtcbiAgfVxuXG4gIHJldHVybiBcIkV4cGVjdGVkIFwiICsgZGVzY3JpYmVFeHBlY3RlZChleHBlY3RlZCkgKyBcIiBidXQgXCIgKyBkZXNjcmliZUZvdW5kKGZvdW5kKSArIFwiIGZvdW5kLlwiO1xufTtcblxuZnVuY3Rpb24gcGVnJHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge307XG5cbiAgdmFyIHBlZyRGQUlMRUQgPSB7fSxcblxuICAgICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9ucyA9IHsgQmlibGlvZ3JhcGh5OiBwZWckcGFyc2VCaWJsaW9ncmFwaHkgfSxcbiAgICAgIHBlZyRzdGFydFJ1bGVGdW5jdGlvbiAgPSBwZWckcGFyc2VCaWJsaW9ncmFwaHksXG5cbiAgICAgIHBlZyRjMCA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0JpYmxpb2dyYXBoeScsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiByLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMSA9IFwiQFwiLFxuICAgICAgcGVnJGMyID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIkBcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMzID0gXCJjb21tZW50XCIsXG4gICAgICBwZWckYzQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiY29tbWVudFwiLCB0cnVlKSxcbiAgICAgIHBlZyRjNSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0JyYWNlZENvbW1lbnQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdi5zbGljZSgxLCAtMSksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM2ID0gL15bXlxcblxccl0vLFxuICAgICAgcGVnJGM3ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiXFxuXCIsIFwiXFxyXCJdLCB0cnVlLCBmYWxzZSksXG4gICAgICBwZWckYzggPSAvXltcXG5cXHJdLyxcbiAgICAgIHBlZyRjOSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTAgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdMaW5lQ29tbWVudCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKHYpLFxuICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgcGVnJGMxMSA9IC9eW15AXS8sXG4gICAgICBwZWckYzEyID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiQFwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ05vbkVudHJ5VGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKHYpLFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTQgPSBmdW5jdGlvbihuKSB7IHJldHVybiBuOyB9LFxuICAgICAgcGVnJGMxNSA9IFwie1wiLFxuICAgICAgcGVnJGMxNiA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTcgPSAvXltee31dLyxcbiAgICAgIHBlZyRjMTggPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJ7XCIsIFwifVwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxOSA9IFwifVwiLFxuICAgICAgcGVnJGMyMCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ9XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMjEgPSBmdW5jdGlvbihjb21tZW50KSB7IHJldHVybiAneycgKyBjb21tZW50LmpvaW4oJycpICsgJ30nIH0sXG4gICAgICBwZWckYzIyID0gL15bQS1aYS16XS8sXG4gICAgICBwZWckYzIzID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcIkFcIiwgXCJaXCJdLCBbXCJhXCIsIFwielwiXV0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzI0ID0gL15bKHtdLyxcbiAgICAgIHBlZyRjMjUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCIoXCIsIFwie1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMjYgPSAvXlt9KV0vLFxuICAgICAgcGVnJGMyNyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIn1cIiwgXCIpXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMyOCA9IGZ1bmN0aW9uKHR5cGUsIGlkLCBmaWVsZHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0VudHJ5JyxcbiAgICAgICAgICAgIGlkOiBpZCB8fCAnJyxcbiAgICAgICAgICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgZmllbGRzOiBmaWVsZHMsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMyOSA9IFwicHJlYW1ibGVcIixcbiAgICAgIHBlZyRjMzAgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwicHJlYW1ibGVcIiwgdHJ1ZSksXG4gICAgICBwZWckYzMxID0gZnVuY3Rpb24ob3BlbmVyLCB2LCBjbG9zZXIpIHtcbiAgICAgICAgICBzd2l0Y2ggKG9wZW5lciArIGNsb3Nlcikge1xuICAgICAgICAgICAgY2FzZSAne30nOlxuICAgICAgICAgICAgY2FzZSAnKCknOlxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmJhbGFuY2VkIG9wZW5lci1jbG9zZXIgZm9yIHByZWFtYmxlOiAke29wZW5lcn0uLi4ke2Nsb3Nlcn1gKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1ByZWFtYmxlRXhwcmVzc2lvbicsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2LnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzMyID0gXCJzdHJpbmdcIixcbiAgICAgIHBlZyRjMzMgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwic3RyaW5nXCIsIHRydWUpLFxuICAgICAgcGVnJGMzNCA9IGZ1bmN0aW9uKGssIHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1N0cmluZ0RlY2xhcmF0aW9uJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgbmFtZTogayxcbiAgICAgICAgICAgIHZhbHVlOiB2LnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIFtdKSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzM1ID0gL15bXiBcXHRcXHJcXG4sXS8sXG4gICAgICBwZWckYzM2ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcclwiLCBcIlxcblwiLCBcIixcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMzcgPSBcIixcIixcbiAgICAgIHBlZyRjMzggPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiLFwiLCBmYWxzZSksXG4gICAgICBwZWckYzM5ID0gZnVuY3Rpb24oaWQpIHsgcmV0dXJuIGlkOyB9LFxuICAgICAgcGVnJGM0MCA9IGZ1bmN0aW9uKG5hbWUpIHsgcmV0dXJuIGlzVmVyYmF0aW1GaWVsZChuYW1lKSAmJiB1bm5lc3RGaWVsZHMuaW5jbHVkZXMobmFtZSkgfSxcbiAgICAgIHBlZyRjNDEgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyB3YXMgYWJ1c2VkIHNvIG11Y2gsIG1hbnkgcHJvY2Vzc29ycyB0cmVhdCBkb3VibGUtb3V0ZXItYnJhY2VzIGFzIHNpbmdsZVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWU6IFsgcHJvdGVjdCh2YWx1ZSkgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNDIgPSBmdW5jdGlvbihuYW1lKSB7IHJldHVybiBpc1ZlcmJhdGltRmllbGQobmFtZSkgfSxcbiAgICAgIHBlZyRjNDMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgdmFsdWU6IFsgcHJvdGVjdCh2YWx1ZSkgXVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNDQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhpcyB3YXMgYWJ1c2VkIHNvIG11Y2gsIG1hbnkgcHJvY2Vzc29ycyB0cmVhdCBkb3VibGUtb3V0ZXItYnJhY2VzIGFzIHNpbmdsZVxuICAgICAgICAgIGlmICh1bm5lc3RGaWVsZHMuaW5jbHVkZXMobmFtZSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAxICYmIHZhbHVlWzBdLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVubmVzdE1vZGUgPT09ICdwcmVzZXJ2ZScpIHtcbiAgICAgICAgICAgICAgdmFsdWVbMF0uY2FzZSA9ICdwcmVzZXJ2ZSdcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF0udmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlX21hcmt1cF9zd2l0Y2hlcyh7XG4gICAgICAgICAgICBraW5kOiAnRmllbGQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzQ1ID0gL15bXzphLXpBLVowLTlcXC1dLyxcbiAgICAgIHBlZyRjNDYgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJfXCIsIFwiOlwiLCBbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl0sIFtcIjBcIiwgXCI5XCJdLCBcIi1cIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzQ3ID0gZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpIH0sXG4gICAgICBwZWckYzQ4ID0gXCJcXFwiXCIsXG4gICAgICBwZWckYzQ5ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIlxcXCJcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1MCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICB2ID0gdiB8fCB7XG4gICAgICAgICAgICBraW5kOiAnVGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9XG4gICAgICAgICAgdi5tb2RlID0gJ3ZlcmJhdGltJ1xuICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh2KVxuICAgICAgICB9LFxuICAgICAgcGVnJGM1MSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdi5qb2luKCcnKS50cmltKCksXG4gICAgICAgICAgICBtb2RlOiAndmVyYmF0aW0nLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzUyID0gZnVuY3Rpb24odikgeyByZXR1cm4gdiB9LFxuICAgICAgcGVnJGM1MyA9IGZ1bmN0aW9uKHYpIHsgcmV0dXJuICd7JyArIHYuam9pbignJykgKyAnfScgfSxcbiAgICAgIHBlZyRjNTQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIG1hdGguc2V0KGZhbHNlKSB9LFxuICAgICAgcGVnJGM1NSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gdi5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG4gICAgICAgIH0sXG4gICAgICBwZWckYzU2ID0gZnVuY3Rpb24odikgeyByZXR1cm4gdjsgfSxcbiAgICAgIHBlZyRjNTcgPSBcIntcXFxcdmVyYlwiLFxuICAgICAgcGVnJGM1OCA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJ7XFxcXHZlcmJcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM1OSA9IC9eW2EtekEtWl0vLFxuICAgICAgcGVnJGM2MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2MSA9IC9eW15cXF5fJHt9XFxcXF0vLFxuICAgICAgcGVnJGM2MiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl5cIiwgXCJfXCIsIFwiJFwiLCBcIntcIiwgXCJ9XCIsIFwiXFxcXFwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2MyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogbm9ybWFsaXplV2hpdGVzcGFjZSh2KSxcbiAgICAgICAgICAgIG1vZGU6IG1hdGgub24gPyAnbWF0aCcgOiAndGV4dCcsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIHBlZyRjNjQgPSAvXlteXFxeXyR7fVwiXFxcXF0vLFxuICAgICAgcGVnJGM2NSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl5cIiwgXCJfXCIsIFwiJFwiLCBcIntcIiwgXCJ9XCIsIFwiXFxcIlwiLCBcIlxcXFxcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjNjYgPSAvXlswLTldLyxcbiAgICAgIHBlZyRjNjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiMFwiLCBcIjlcIl1dLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM2OCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ051bWJlcicsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBwYXJzZUludCh2LCAxMCksXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM2OSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1N0cmluZ1JlZmVyZW5jZScsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIG5hbWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM3MCA9IFwiXFxcXGJlZ2lue1wiLFxuICAgICAgcGVnJGM3MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcYmVnaW57XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjNzIgPSAvXlthLXpBLVowLTldLyxcbiAgICAgIHBlZyRjNzMgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiYVwiLCBcInpcIl0sIFtcIkFcIiwgXCJaXCJdLCBbXCIwXCIsIFwiOVwiXV0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzc0ID0gXCJcXFxcZW5ke1wiLFxuICAgICAgcGVnJGM3NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcZW5ke1wiLCBmYWxzZSksXG4gICAgICBwZWckYzc2ID0gZnVuY3Rpb24oZW52LCB2LCBjZW52KSB7IHJldHVybiBlbnYgPT09IGNlbnYgfSxcbiAgICAgIHBlZyRjNzcgPSBmdW5jdGlvbihlbnYsIHYsIGNlbnYpIHtcbiAgICAgICAgICBpZiAobWFya3VwW2Vudl0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICBtYXJrdXA6IHsgW21hcmt1cFtlbnZdXTogdHJ1ZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBraW5kOiAnRW52aXJvbm1lbnQnLFxuICAgICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgZW52OiBlbnYsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM3OCA9IFwie1xcXFxcIixcbiAgICAgIHBlZyRjNzkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwie1xcXFxcIiwgZmFsc2UpLFxuICAgICAgcGVnJGM4MCA9IFwiXFxcXFwiLFxuICAgICAgcGVnJGM4MSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJcXFxcXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjODIgPSAvXltpal0vLFxuICAgICAgcGVnJGM4MyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcImlcIiwgXCJqXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGM4NCA9IGZ1bmN0aW9uKG1hcmssIGNoYXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBtYXJrOiBtYXJrLFxuICAgICAgICAgICAgZG90bGVzczogISFjaGFyWzFdLFxuICAgICAgICAgICAgY2hhcmFjdGVyOiBjaGFyWzFdIHx8IGNoYXJbMF0sXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGM4NSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh7XG4gICAgICAgICAgICAgIGtpbmQ6ICdUZXh0JyxcbiAgICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgICAgdmFsdWU6IHYuam9pbignJykudHJpbSgpLFxuICAgICAgICAgICAgICBtb2RlOiAndmVyYmF0aW0nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgIHBlZyRjODYgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgY29uc3QgYmxvY2sgPSB7XG4gICAgICAgICAgICBraW5kOiAnQmxvY2snLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgIG1hcmt1cDoge30sXG4gICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGxlYWRpbmdjbWQgPSBibG9jay52YWx1ZS5sZW5ndGggJiYgKGJsb2NrLnZhbHVlWzBdLmtpbmQuZW5kc1dpdGgoJ0NvbW1hbmQnKSB8fCBibG9jay52YWx1ZVswXS5raW5kID09PSAnRW52aXJvbm1lbnQnKSA/IGJsb2NrLnZhbHVlWzBdIDogbnVsbFxuICAgICAgICAgIGxldCBsZWFkaW5nY21kYmxvY2thcmcgPSBsZWFkaW5nY21kXG4gICAgICAgICAgICAmJiBsZWFkaW5nY21kLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCdcbiAgICAgICAgICAgICYmIGxlYWRpbmdjbWQuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aFxuICAgICAgICAgICAgJiYgbGVhZGluZ2NtZC5hcmd1bWVudHMucmVxdWlyZWRbMF0ua2luZCA9PT0gJ0Jsb2NrJ1xuICAgICAgICAgICAgJiYgbGVhZGluZ2NtZC5hcmd1bWVudHMucmVxdWlyZWRbMF1cblxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXRvcnF1ZXJlL3pvdGVyby1iZXR0ZXItYmlidGV4L2lzc3Vlcy81NDEjaXNzdWVjb21tZW50LTI0MDE1NjI3NFxuICAgICAgICAgIGlmIChsZWFkaW5nY21kKSB7XG4gICAgICAgICAgICBkZWxldGUgYmxvY2suY2FzZVxuXG4gICAgICAgICAgICAvLyBjb21tYW5kIHdpdGggYSBibG9jayBjYW5jZWxzIG91dCBjYXNlIHByb3RlY3Rpb24gd2l0aCBjb250YWluaW5nIGJsb2NrXG4gICAgICAgICAgICAvLyBpZiBhIHNtYWxsY2FwcyBibG9jayBoYXMgc2V0IGNhc2UgdG8gJ3ByZXNlcnZlJyB3ZSB3YW50IHRvIGtlZXAgdGhpc1xuICAgICAgICAgICAgaWYgKGxlYWRpbmdjbWRibG9ja2FyZyAmJiBsZWFkaW5nY21kYmxvY2thcmcuY2FzZSA9PT0gJ3Byb3RlY3QnKSBkZWxldGUgbGVhZGluZ2NtZGJsb2NrYXJnLmNhc2VcblxuICAgICAgICAgICAgLy8gXFxzbCwgXFxpdCBldGNcbiAgICAgICAgICAgIGlmIChtYXJrdXBbbGVhZGluZ2NtZC5jb21tYW5kXSkge1xuICAgICAgICAgICAgICBibG9jay5tYXJrdXBbbWFya3VwW2xlYWRpbmdjbWQuY29tbWFuZF1dID0gdHJ1ZVxuICAgICAgICAgICAgICBibG9jay52YWx1ZS5zaGlmdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZV9tYXJrdXBfc3dpdGNoZXMoYmxvY2spXG4gICAgICAgIH0sXG4gICAgICBwZWckYzg3ID0gZnVuY3Rpb24oKSB7IHJldHVybiAhbWF0aC5vbiB9LFxuICAgICAgcGVnJGM4OCA9IFwiJFwiLFxuICAgICAgcGVnJGM4OSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTAgPSBcIiQkXCIsXG4gICAgICBwZWckYzkxID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIiQkXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjOTIgPSBmdW5jdGlvbihtb2RlKSB7IHJldHVybiBtYXRoLnNldCh0cnVlKSB9LFxuICAgICAgcGVnJGM5MyA9IGZ1bmN0aW9uKG1vZGUsIHYpIHsgcmV0dXJuIG1hdGguc2V0KGZhbHNlKSB9LFxuICAgICAgcGVnJGM5NCA9IGZ1bmN0aW9uKG1vZGUsIHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogbW9kZSA9PSAnJCQnID8gJ0Rpc3BsYXlNYXRoJyA6ICdJbmxpbmVNYXRoJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjOTUgPSBcIiVcIixcbiAgICAgIHBlZyRjOTYgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiJVwiLCBmYWxzZSksXG4gICAgICBwZWckYzk3ID0gL15bXlxcclxcbl0vLFxuICAgICAgcGVnJGM5OCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcclwiLCBcIlxcblwiXSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcGVnJGM5OSA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0xpbmVDb21tZW50JyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDAgPSAvXltfXFxeXS8sXG4gICAgICBwZWckYzEwMSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIl9cIiwgXCJeXCJdLCBmYWxzZSwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDIgPSBmdW5jdGlvbihtb2RlLCB2KSB7XG4gICAgICAgICAgaWYgKHYua2luZCA9PT0gJ0Jsb2NrJykgdiA9IHYudmFsdWVcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiBtb2RlID09PSAnXycgPyAnU3Vic2NyaXB0Q29tbWFuZCcgOiAnU3VwZXJzY3JpcHRDb21tYW5kJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDMgPSBmdW5jdGlvbihtYXJrLCB2KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IG1hcmssXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogWyBwcm90ZWN0KHYpIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTA0ID0gL15bXkEtWmEtejAtOVxcdFxcclxcbl0vLFxuICAgICAgcGVnJGMxMDUgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbW1wiQVwiLCBcIlpcIl0sIFtcImFcIiwgXCJ6XCJdLCBbXCIwXCIsIFwiOVwiXSwgXCJcXHRcIiwgXCJcXHJcIiwgXCJcXG5cIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTA2ID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnU3ltYm9sQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IHYsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMDcgPSBcIm5ld2NvbW1hbmRcIixcbiAgICAgIHBlZyRjMTA4ID0gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbihcIm5ld2NvbW1hbmRcIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMDkgPSBmdW5jdGlvbihjbWQsIG5hbWUpIHsgcmV0dXJuIG5hbWUudmFsdWUubGVuZ3RoID09IDEgJiYgbmFtZS52YWx1ZVswXS5raW5kID09PSAnUmVndWxhckNvbW1hbmQnIH0sXG4gICAgICBwZWckYzExMCA9IGZ1bmN0aW9uKGNtZCwgbmFtZSwgb3B0aW9uYWwsIGRlZikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IFtdLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW25hbWUsIGRlZl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTExID0gXCJiZWdpblwiLFxuICAgICAgcGVnJGMxMTIgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiYmVnaW5cIiwgZmFsc2UpLFxuICAgICAgcGVnJGMxMTMgPSBcImVuZFwiLFxuICAgICAgcGVnJGMxMTQgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiZW5kXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTE1ID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiB2ZXJiYXRpbUNvbW1hbmRzLmluY2x1ZGVzKGNtZCkgJiYgKGhhc19hcmd1bWVudHNbY21kXSA9PT0gMikgfSxcbiAgICAgIHBlZyRjMTE2ID0gZnVuY3Rpb24oY21kLCBvcHRpb25hbCwgcmVxMSwgcmVxMikge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW3Byb3RlY3QocmVxMSksIHByb3RlY3QocmVxMildLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzExNyA9IGZ1bmN0aW9uKGNtZCkgeyByZXR1cm4gdmVyYmF0aW1Db21tYW5kcy5pbmNsdWRlcyhjbWQpICYmIChoYXNfYXJndW1lbnRzW2NtZF0gPT09IDEpIH0sXG4gICAgICBwZWckYzExOCA9IGZ1bmN0aW9uKGNtZCwgb3B0aW9uYWwsIHJlcSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnUmVndWxhckNvbW1hbmQnLFxuICAgICAgICAgICAgbG9jOiBsb2NhdGlvbigpLFxuICAgICAgICAgICAgc291cmNlOiB0ZXh0KCksXG4gICAgICAgICAgICBjb21tYW5kOiBjbWQsXG4gICAgICAgICAgICBhcmd1bWVudHM6IHtcbiAgICAgICAgICAgICAgb3B0aW9uYWw6IG9wdGlvbmFsLFxuICAgICAgICAgICAgICByZXF1aXJlZDogW3Byb3RlY3QocmVxKV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTE5ID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiAoaGFzX2FyZ3VtZW50c1tjbWRdID09PSAyKSB9LFxuICAgICAgcGVnJGMxMjAgPSBmdW5jdGlvbihjbWQsIG9wdGlvbmFsLCByZXExLCByZXEyKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCxcbiAgICAgICAgICAgIGFyZ3VtZW50czoge1xuICAgICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbcmVxMSwgcmVxMl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTIxID0gZnVuY3Rpb24oY21kKSB7IHJldHVybiAoaGFzX2FyZ3VtZW50c1tjbWRdID09PSAxKSB9LFxuICAgICAgcGVnJGMxMjIgPSBmdW5jdGlvbihjbWQsIG9wdGlvbmFsLCByZXEpIHtcbiAgICAgICAgICBsZXQgbVxuICAgICAgICAgIGlmIChyZXEua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgc3dpdGNoIChjbWQpIHtcbiAgICAgICAgICAgICAgY2FzZSAndGV4dHN1cGVyc2NyaXB0JzpcbiAgICAgICAgICAgICAgY2FzZSAnc3AnOlxuICAgICAgICAgICAgICAgIHJlcS5tYXJrdXAuc3VwID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3RleHRzdWJzY3JpcHQnOlxuICAgICAgICAgICAgICBjYXNlICdzYic6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5zdWIgPSB0cnVlXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAndGV4dHNjJzpcbiAgICAgICAgICAgICAgICByZXEubWFya3VwLnNtYWxsQ2FwcyA9IHRydWVcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICdlbnF1b3RlJzpcbiAgICAgICAgICAgICAgY2FzZSAnbWtiaWJxdW90ZSc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5lbnF1b3RlID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3RleHRiZic6XG4gICAgICAgICAgICAgIGNhc2UgJ21rYmliYm9sZCc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5ib2xkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ2VtcGgnOlxuICAgICAgICAgICAgICBjYXNlICd0ZXh0aXQnOlxuICAgICAgICAgICAgICBjYXNlICdta2JpYml0YWxpYyc6XG4gICAgICAgICAgICAgIGNhc2UgJ21rYmliZW1waCc6XG4gICAgICAgICAgICAgICAgcmVxLm1hcmt1cC5pdGFsaWNzID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKG0gPSBjbWQubWF0Y2goL14oKHN1YikqKXNlY3Rpb24kLykpIHtcbiAgICAgICAgICAgICAgICAgIHJlcS5tYXJrdXBbYGgkeyhtWzFdLmxlbmd0aCAvIDMpICsgMX1gXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWdub3JlIGNhc2Ugc3R1ZmYgb24gYmliY3lyXG4gICAgICAgICAgaWYgKGNtZCA9PT0gJ2JpYmN5cicpIGRlbGV0ZSByZXEuY2FzZVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWd1bGFyQ29tbWFuZCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNtZCxcbiAgICAgICAgICAgIGFyZ3VtZW50czoge1xuICAgICAgICAgICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICAgICAgICAgIHJlcXVpcmVkOiBbcmVxXSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBwZWckYzEyMyA9IGZ1bmN0aW9uKGNtZCwgb3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ1JlZ3VsYXJDb21tYW5kJyxcbiAgICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICAgIHNvdXJjZTogdGV4dCgpLFxuICAgICAgICAgICAgY29tbWFuZDogY21kLFxuICAgICAgICAgICAgYXJndW1lbnRzOiB7XG4gICAgICAgICAgICAgIG9wdGlvbmFsOiBvcHRpb25hbCxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIHBlZyRjMTI0ID0gXCJbXCIsXG4gICAgICBwZWckYzEyNSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCJbXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTI2ID0gL15bXlxcXV0vLFxuICAgICAgcGVnJGMxMjcgPSBwZWckY2xhc3NFeHBlY3RhdGlvbihbXCJdXCJdLCB0cnVlLCBmYWxzZSksXG4gICAgICBwZWckYzEyOCA9IFwiXVwiLFxuICAgICAgcGVnJGMxMjkgPSBwZWckbGl0ZXJhbEV4cGVjdGF0aW9uKFwiXVwiLCBmYWxzZSksXG4gICAgICBwZWckYzEzMCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4gYmFzaWNUZXh0Q29udmVyc2lvbnMoe1xuICAgICAgICAgICAga2luZDogJ1RleHQnLCAvLyB0aGlzIGlzbid0IHJlYWxseSBjb3JyZWN0IGJ1dCBJIGRvbid0IG5lZWQgdGhlc2UgcmlnaHQgbm93XG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgbW9kZTogbWF0aC5vbiA/ICdtYXRoJyA6ICd0ZXh0JyxcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgcGVnJGMxMzEgPSAvXlteIFxcdFxcXl8ke31cXFxcXS8sXG4gICAgICBwZWckYzEzMiA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIiBcIiwgXCJcXHRcIiwgXCJeXCIsIFwiX1wiLCBcIiRcIiwgXCJ7XCIsIFwifVwiLCBcIlxcXFxcIl0sIHRydWUsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTMzID0gZnVuY3Rpb24odikge1xuICAgICAgICAgIHJldHVybiBiYXNpY1RleHRDb252ZXJzaW9ucyh7XG4gICAgICAgICAgICBraW5kOiAnVGV4dCcsXG4gICAgICAgICAgICBsb2M6IGxvY2F0aW9uKCksXG4gICAgICAgICAgICBzb3VyY2U6IHRleHQoKSxcbiAgICAgICAgICAgIHZhbHVlOiBub3JtYWxpemVXaGl0ZXNwYWNlKFt2XSksXG4gICAgICAgICAgICBtb2RlOiBtYXRoLm9uID8gJ21hdGgnIDogJ3RleHQnLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICBwZWckYzEzNCA9IC9eW2EtekEtWlxcLV9dLyxcbiAgICAgIHBlZyRjMTM1ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1tcImFcIiwgXCJ6XCJdLCBbXCJBXCIsIFwiWlwiXSwgXCItXCIsIFwiX1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTM2ID0gL15bYS16QS1aMC05XFwtJl86XS8sXG4gICAgICBwZWckYzEzNyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtbXCJhXCIsIFwielwiXSwgW1wiQVwiLCBcIlpcIl0sIFtcIjBcIiwgXCI5XCJdLCBcIi1cIiwgXCImXCIsIFwiX1wiLCBcIjpcIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzEzOCA9IC9eWydgXCI9flxcXi5dLyxcbiAgICAgIHBlZyRjMTM5ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiJ1wiLCBcImBcIiwgXCJcXFwiXCIsIFwiPVwiLCBcIn5cIiwgXCJeXCIsIFwiLlwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQwID0gL15bJ2BcIj1+XFxeLmNidXZkckhrXS8sXG4gICAgICBwZWckYzE0MSA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIidcIiwgXCJgXCIsIFwiXFxcIlwiLCBcIj1cIiwgXCJ+XCIsIFwiXlwiLCBcIi5cIiwgXCJjXCIsIFwiYlwiLCBcInVcIiwgXCJ2XCIsIFwiZFwiLCBcInJcIiwgXCJIXCIsIFwia1wiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQyID0gXCI9XCIsXG4gICAgICBwZWckYzE0MyA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCI9XCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ0ID0gXCIjXCIsXG4gICAgICBwZWckYzE0NSA9IHBlZyRsaXRlcmFsRXhwZWN0YXRpb24oXCIjXCIsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ2ID0gL15bXFxyXFxuXS8sXG4gICAgICBwZWckYzE0NyA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIlxcclwiLCBcIlxcblwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTQ4ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJNYW5kYXRvcnkgSG9yaXpvbnRhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNDkgPSAvXlsgXFx0XS8sXG4gICAgICBwZWckYzE1MCA9IHBlZyRjbGFzc0V4cGVjdGF0aW9uKFtcIiBcIiwgXCJcXHRcIl0sIGZhbHNlLCBmYWxzZSksXG4gICAgICBwZWckYzE1MSA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiT3B0aW9uYWwgSG9yaXpvbnRhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNTIgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIk1hbmRhdG9yeSBWZXJ0aWNhbCBXaGl0ZXNwYWNlXCIpLFxuICAgICAgcGVnJGMxNTMgPSBwZWckb3RoZXJFeHBlY3RhdGlvbihcIk9wdGlvbmFsIFZlcnRpY2FsIFdoaXRlc3BhY2VcIiksXG4gICAgICBwZWckYzE1NCA9IHBlZyRvdGhlckV4cGVjdGF0aW9uKFwiTWFuZGF0b3J5IFdoaXRlc3BhY2VcIiksXG4gICAgICBwZWckYzE1NSA9IC9eWyBcXHRcXG5cXHJdLyxcbiAgICAgIHBlZyRjMTU2ID0gcGVnJGNsYXNzRXhwZWN0YXRpb24oW1wiIFwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcclwiXSwgZmFsc2UsIGZhbHNlKSxcbiAgICAgIHBlZyRjMTU3ID0gcGVnJG90aGVyRXhwZWN0YXRpb24oXCJPcHRpb25hbCBXaGl0ZXNwYWNlXCIpLFxuXG4gICAgICBwZWckY3VyclBvcyAgICAgICAgICA9IDAsXG4gICAgICBwZWckc2F2ZWRQb3MgICAgICAgICA9IDAsXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlICA9IFt7IGxpbmU6IDEsIGNvbHVtbjogMSB9XSxcbiAgICAgIHBlZyRtYXhGYWlsUG9zICAgICAgID0gMCxcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQgID0gW10sXG4gICAgICBwZWckc2lsZW50RmFpbHMgICAgICA9IDAsXG5cbiAgICAgIHBlZyRyZXN1bHQ7XG5cbiAgaWYgKFwic3RhcnRSdWxlXCIgaW4gb3B0aW9ucykge1xuICAgIGlmICghKG9wdGlvbnMuc3RhcnRSdWxlIGluIHBlZyRzdGFydFJ1bGVGdW5jdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBzdGFydCBwYXJzaW5nIGZyb20gcnVsZSBcXFwiXCIgKyBvcHRpb25zLnN0YXJ0UnVsZSArIFwiXFxcIi5cIik7XG4gICAgfVxuXG4gICAgcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uID0gcGVnJHN0YXJ0UnVsZUZ1bmN0aW9uc1tvcHRpb25zLnN0YXJ0UnVsZV07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0KCkge1xuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2NhdGlvbigpIHtcbiAgICByZXR1cm4gcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdGVkKGRlc2NyaXB0aW9uLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU3RydWN0dXJlZEVycm9yKFxuICAgICAgW3BlZyRvdGhlckV4cGVjdGF0aW9uKGRlc2NyaXB0aW9uKV0sXG4gICAgICBpbnB1dC5zdWJzdHJpbmcocGVnJHNhdmVkUG9zLCBwZWckY3VyclBvcyksXG4gICAgICBsb2NhdGlvblxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIGxvY2F0aW9uID0gbG9jYXRpb24gIT09IHZvaWQgMCA/IGxvY2F0aW9uIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckc2F2ZWRQb3MsIHBlZyRjdXJyUG9zKVxuXG4gICAgdGhyb3cgcGVnJGJ1aWxkU2ltcGxlRXJyb3IobWVzc2FnZSwgbG9jYXRpb24pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGxpdGVyYWxFeHBlY3RhdGlvbih0ZXh0LCBpZ25vcmVDYXNlKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJsaXRlcmFsXCIsIHRleHQ6IHRleHQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRjbGFzc0V4cGVjdGF0aW9uKHBhcnRzLCBpbnZlcnRlZCwgaWdub3JlQ2FzZSkge1xuICAgIHJldHVybiB7IHR5cGU6IFwiY2xhc3NcIiwgcGFydHM6IHBhcnRzLCBpbnZlcnRlZDogaW52ZXJ0ZWQsIGlnbm9yZUNhc2U6IGlnbm9yZUNhc2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRhbnlFeHBlY3RhdGlvbigpIHtcbiAgICByZXR1cm4geyB0eXBlOiBcImFueVwiIH07XG4gIH1cblxuICBmdW5jdGlvbiBwZWckZW5kRXhwZWN0YXRpb24oKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJlbmRcIiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJG90aGVyRXhwZWN0YXRpb24oZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4geyB0eXBlOiBcIm90aGVyXCIsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVQb3NEZXRhaWxzKHBvcykge1xuICAgIHZhciBkZXRhaWxzID0gcGVnJHBvc0RldGFpbHNDYWNoZVtwb3NdLCBwO1xuXG4gICAgaWYgKGRldGFpbHMpIHtcbiAgICAgIHJldHVybiBkZXRhaWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBwID0gcG9zIC0gMTtcbiAgICAgIHdoaWxlICghcGVnJHBvc0RldGFpbHNDYWNoZVtwXSkge1xuICAgICAgICBwLS07XG4gICAgICB9XG5cbiAgICAgIGRldGFpbHMgPSBwZWckcG9zRGV0YWlsc0NhY2hlW3BdO1xuICAgICAgZGV0YWlscyA9IHtcbiAgICAgICAgbGluZTogICBkZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZGV0YWlscy5jb2x1bW5cbiAgICAgIH07XG5cbiAgICAgIHdoaWxlIChwIDwgcG9zKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHApID09PSAxMCkge1xuICAgICAgICAgIGRldGFpbHMubGluZSsrO1xuICAgICAgICAgIGRldGFpbHMuY29sdW1uID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXRhaWxzLmNvbHVtbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcCsrO1xuICAgICAgfVxuXG4gICAgICBwZWckcG9zRGV0YWlsc0NhY2hlW3Bvc10gPSBkZXRhaWxzO1xuICAgICAgcmV0dXJuIGRldGFpbHM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGNvbXB1dGVMb2NhdGlvbihzdGFydFBvcywgZW5kUG9zKSB7XG4gICAgdmFyIHN0YXJ0UG9zRGV0YWlscyA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhzdGFydFBvcyksXG4gICAgICAgIGVuZFBvc0RldGFpbHMgICA9IHBlZyRjb21wdXRlUG9zRGV0YWlscyhlbmRQb3MpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiB7XG4gICAgICAgIG9mZnNldDogc3RhcnRQb3MsXG4gICAgICAgIGxpbmU6ICAgc3RhcnRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogc3RhcnRQb3NEZXRhaWxzLmNvbHVtblxuICAgICAgfSxcbiAgICAgIGVuZDoge1xuICAgICAgICBvZmZzZXQ6IGVuZFBvcyxcbiAgICAgICAgbGluZTogICBlbmRQb3NEZXRhaWxzLmxpbmUsXG4gICAgICAgIGNvbHVtbjogZW5kUG9zRGV0YWlscy5jb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJGZhaWwoZXhwZWN0ZWQpIHtcbiAgICBpZiAocGVnJGN1cnJQb3MgPCBwZWckbWF4RmFpbFBvcykgeyByZXR1cm47IH1cblxuICAgIGlmIChwZWckY3VyclBvcyA+IHBlZyRtYXhGYWlsUG9zKSB7XG4gICAgICBwZWckbWF4RmFpbFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJG1heEZhaWxFeHBlY3RlZCA9IFtdO1xuICAgIH1cblxuICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQucHVzaChleHBlY3RlZCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckYnVpbGRTaW1wbGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbikge1xuICAgIHJldHVybiBuZXcgcGVnJFN5bnRheEVycm9yKG1lc3NhZ2UsIG51bGwsIG51bGwsIGxvY2F0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihleHBlY3RlZCwgZm91bmQsIGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBwZWckU3ludGF4RXJyb3IoXG4gICAgICBwZWckU3ludGF4RXJyb3IuYnVpbGRNZXNzYWdlKGV4cGVjdGVkLCBmb3VuZCksXG4gICAgICBleHBlY3RlZCxcbiAgICAgIGZvdW5kLFxuICAgICAgbG9jYXRpb25cbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQmlibGlvZ3JhcGh5KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJHBhcnNlTm9kZSgpO1xuICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZU5vZGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMwKHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29tbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDY0KSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA3KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfX2goKTtcbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpO1xuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjNShzNSk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjQpIHtcbiAgICAgICAgczEgPSBwZWckYzE7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNykudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMzKSB7XG4gICAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNyk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB3aGlsZSAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNS5wdXNoKHM2KTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOSk7IH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMChzNSk7XG4gICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMxID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChwZWckYzExLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gW107XG4gICAgICAgICAgaWYgKHBlZyRjNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNyk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIGlmIChwZWckYzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyID0gW3MyLCBzM107XG4gICAgICAgICAgICBzMSA9IHMyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMxO1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgIGlmIChwZWckYzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgICBpZiAocGVnJGM4LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGMxMyhzMSk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZU5vZGUoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VDb21tZW50KCk7XG4gICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRwYXJzZVByZWFtYmxlRXhwcmVzc2lvbigpO1xuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlU3RyaW5nRGVjbGFyYXRpb24oKTtcbiAgICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczEgPSBwZWckcGFyc2VFbnRyeSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjMTQoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczMgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VCcmFjZWRDb21tZW50KCk7XG4gICAgICB9XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlQnJhY2VkQ29tbWVudCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMyMShzMik7XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUVudHJ5KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSwgczEwLCBzMTEsIHMxMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2NCkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgczQgPSBbXTtcbiAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LnN1YnN0cmluZyhzMywgcGVnJGN1cnJQb3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gczQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMjQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlRW50cnlJZCgpO1xuICAgICAgICAgICAgICAgIGlmIChzNyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczcgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VGaWVsZCgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkucHVzaChzMTApO1xuICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZUZpZWxkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMjgoczMsIHM3LCBzOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVByZWFtYmxlRXhwcmVzc2lvbigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzOCwgczksIHMxMDtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA2NCkge1xuICAgICAgczEgPSBwZWckYzE7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMik7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgOCkudG9Mb3dlckNhc2UoKSA9PT0gcGVnJGMyOSkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA4KTtcbiAgICAgICAgICBwZWckY3VyclBvcyArPSA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKHBlZyRjMjQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyNSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM3ID0gW107XG4gICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgIGlmIChzOCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoczggPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczggPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM3LnB1c2goczgpO1xuICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VNYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRjMjYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMzMShzNSwgczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU3RyaW5nRGVjbGFyYXRpb24oKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczgsIHM5LCBzMTAsIHMxMSwgczEyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDY0KSB7XG4gICAgICBzMSA9IHBlZyRjMTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX18oKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA2KS50b0xvd2VyQ2FzZSgpID09PSBwZWckYzMyKSB7XG4gICAgICAgICAgczMgPSBpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDYpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMzMyk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAocGVnJGMyNC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzI1KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VWYXJpYWJsZU5hbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlRmllbGRTZXBhcmF0b3IoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzOSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzMTAgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzMTAgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5LnB1c2goczEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZVJlZ3VsYXJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczEwID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczEwICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMTEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjcpOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczExICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxMiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMTIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMzQoczcsIHM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRW50cnlJZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9fKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBbXTtcbiAgICAgIGlmIChwZWckYzM1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzYpOyB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMucHVzaChzNCk7XG4gICAgICAgIGlmIChwZWckYzM1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzNCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzM2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBpbnB1dC5zdWJzdHJpbmcoczIsIHBlZyRjdXJyUG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gczM7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VfXygpO1xuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDQ0KSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMzc7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjMzkoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczYsIHM3LCBzODtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VGaWVsZE5hbWUoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgczIgPSBwZWckYzQwKHMxKTtcbiAgICAgIGlmIChzMikge1xuICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUZpZWxkU2VwYXJhdG9yKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMTU7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckYzE1O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM1O1xuICAgICAgICAgICAgICBzNSA9IHZvaWQgMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckYzE5O1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlRmllbGRUZXJtaW5hdG9yKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM0MShzMSwgczYpO1xuICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRwYXJzZUZpZWxkTmFtZSgpO1xuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzMiA9IHBlZyRjNDIoczEpO1xuICAgICAgICBpZiAoczIpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpO1xuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQgPSBwZWckcGFyc2VWZXJiYXRpbUZpZWxkVmFsdWUoKTtcbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUZpZWxkVGVybWluYXRvcigpO1xuICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMSA9IHBlZyRjNDMoczEsIHM0KTtcbiAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgczEgPSBwZWckcGFyc2VGaWVsZE5hbWUoKTtcbiAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIgPSBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpO1xuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VGaWVsZFZhbHVlKCk7XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VGaWVsZFRlcm1pbmF0b3IoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzQ0KHMxLCBzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUZpZWxkTmFtZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9fKCk7XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgczMgPSBbXTtcbiAgICAgIGlmIChwZWckYzQ1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczMucHVzaChzNCk7XG4gICAgICAgICAgaWYgKHBlZyRjNDUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ2KTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gaW5wdXQuc3Vic3RyaW5nKHMyLCBwZWckY3VyclBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMiA9IHMzO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNDcoczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgIHMxID0gcGVnJGM0ODtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVRleHROb1F1b3RlcygpO1xuICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICAgICAgczMgPSBwZWckYzQ4O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM0OSk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICBzMSA9IHBlZyRjNTAoczIpO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgczEgPSBwZWckYzE1O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTYpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbXTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VWZXJiYXRpbVRleHQoKTtcbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VWZXJiYXRpbVRleHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgczMgPSBwZWckYzE5O1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzUxKHMyKTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBzMiA9IFtdO1xuICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxOCk7IH1cbiAgICB9XG4gICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzE3LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE4KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzUyKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyMykge1xuICAgICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtdO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVZlcmJhdGltVGV4dCgpO1xuICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZVZlcmJhdGltVGV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTMoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFZhbHVlKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJHBhcnNlTnVtYmVyKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICBzMSA9IHBlZyRjNTQoKTtcbiAgICAgIGlmIChzMSkge1xuICAgICAgICBzMSA9IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IFtdO1xuICAgICAgICBzMyA9IHBlZyRwYXJzZVJlZ3VsYXJWYWx1ZSgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZVN0cmluZ1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlU3RyaW5nVmFsdWUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgczEgPSBwZWckYzU1KHMyKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlUmVndWxhclZhbHVlKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM0KSB7XG4gICAgICBzMSA9IHBlZyRjNDg7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNDkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBbXTtcbiAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0Tm9RdW90ZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0Tm9RdW90ZXMoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzQpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjNDg7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzQ5KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlQ29uY2F0KCk7XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICBzMSA9IHBlZyRjNTYoczIpO1xuICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTcpIHtcbiAgICAgICAgczEgPSBwZWckYzU3O1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgIGlmIChwZWckYzU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IFtdO1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb25jYXQoKTtcbiAgICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1MShzMyk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgczEgPSBwZWckYzE1O1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IFtdO1xuICAgICAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMi5wdXNoKHMzKTtcbiAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlRW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VDb25jYXQoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMxID0gcGVnJGM1NihzMik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHMxID0gcGVnJHBhcnNlU3RyaW5nUmVmZXJlbmNlKCk7XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRwYXJzZUNvbmNhdCgpO1xuICAgICAgICAgICAgaWYgKHMyID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzU2KHMxKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTdHJpbmdWYWx1ZSgpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VTdHJpbmdSZWZlcmVuY2UoKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlQ29uY2F0KCk7XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTYoczEpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRleHQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczI7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gW107XG4gICAgaWYgKHBlZyRjNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYyKTsgfVxuICAgIH1cbiAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHdoaWxlIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMS5wdXNoKHMyKTtcbiAgICAgICAgaWYgKHBlZyRjNjEudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMyID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjIpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzYzKHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVRleHROb1F1b3RlcygpIHtcbiAgICB2YXIgczAsIHMxLCBzMjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBbXTtcbiAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNjUpOyB9XG4gICAgfVxuICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxLnB1c2goczIpO1xuICAgICAgICBpZiAocGVnJGM2NC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2NSk7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjMoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlTnVtYmVyKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBzMiA9IFtdO1xuICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMzID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM2Nyk7IH1cbiAgICB9XG4gICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIucHVzaChzMyk7XG4gICAgICAgIGlmIChwZWckYzY2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzY3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IGlucHV0LnN1YnN0cmluZyhzMSwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHMyO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgczEgPSBwZWckYzY4KHMxKTtcbiAgICB9XG4gICAgczAgPSBzMTtcblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVN0cmluZ1JlZmVyZW5jZSgpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZVZhcmlhYmxlTmFtZSgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICBzMSA9IHBlZyRjNjkoczEpO1xuICAgIH1cbiAgICBzMCA9IHMxO1xuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRW52aXJvbm1lbnQoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczUsIHM2LCBzNywgczg7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDcpID09PSBwZWckYzcwKSB7XG4gICAgICBzMSA9IHBlZyRjNzA7XG4gICAgICBwZWckY3VyclBvcyArPSA3O1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgIHMzID0gW107XG4gICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHdoaWxlIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICAgIGlmIChwZWckYzcyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM3Myk7IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMiA9IGlucHV0LnN1YnN0cmluZyhzMiwgcGVnJGN1cnJQb3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBzMztcbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgIHMzID0gcGVnJGMxOTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczQgPSBbXTtcbiAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVudmlyb25tZW50KCk7XG4gICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VUZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVudmlyb25tZW50KCk7XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTWF0aCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzc0KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM3NDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzc1KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM3ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzcyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzOCA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChzOCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczcucHVzaChzOCk7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczYgPSBpbnB1dC5zdWJzdHJpbmcoczYsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHM3O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRjMTk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICBzOCA9IHBlZyRjNzYoczIsIHM0LCBzNik7XG4gICAgICAgICAgICAgICAgICBpZiAoczgpIHtcbiAgICAgICAgICAgICAgICAgICAgczggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGM3NyhzMiwgczQsIHM2KTtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VCbG9jaygpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDIpID09PSBwZWckYzc4KSB7XG4gICAgICBzMSA9IHBlZyRjNzg7XG4gICAgICBwZWckY3VyclBvcyArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNzkpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VFeHRlbmRlZERpYWNyaXRpYygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjNzIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4MDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNl07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTI1KSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGMxOTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIwKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODQoczIsIHM0KTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNikgPT09IHBlZyRjNTcpIHtcbiAgICAgICAgczEgPSBwZWckYzU3O1xuICAgICAgICBwZWckY3VyclBvcyArPSA2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjNTgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBwZWckY3VyclBvcztcbiAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgIGlmIChwZWckYzU5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzYwKTsgfVxuICAgICAgICB9XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMyA9IFtdO1xuICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMy5wdXNoKHM0KTtcbiAgICAgICAgICAgIHM0ID0gcGVnJHBhcnNlVmVyYmF0aW1UZXh0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjUpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzE5O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgIHMxID0gcGVnJGM4NShzMyk7XG4gICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAgPSBwZWckY3VyclBvcztcbiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjMTU7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2KTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gW107XG4gICAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMyLnB1c2goczMpO1xuICAgICAgICAgICAgczMgPSBwZWckcGFyc2VFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckcGFyc2VDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZU1hdGgoKTtcbiAgICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRjMTk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczEgPSBwZWckYzg2KHMyKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VNYXRoKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNjtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckYzg3KCk7XG4gICAgaWYgKHMxKSB7XG4gICAgICBzMSA9IHZvaWQgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzYpIHtcbiAgICAgICAgczIgPSBwZWckYzg4O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTApIHtcbiAgICAgICAgICBzMiA9IHBlZyRjOTA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkxKTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHMzID0gcGVnJGM5MihzMik7XG4gICAgICAgIGlmIChzMykge1xuICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtdO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQmxvY2soKTtcbiAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlVGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0LnB1c2goczUpO1xuICAgICAgICAgICAgczUgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgICAgICAgaWYgKHM1ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZVRleHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMzYpIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckYzg4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODkpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMikgPT09IHBlZyRjOTApIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRjOTA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzkxKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM2ID0gcGVnJGM5MyhzMiwgczQpO1xuICAgICAgICAgICAgICBpZiAoczYpIHtcbiAgICAgICAgICAgICAgICBzNiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzk0KHMyLCBzNCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUxpbmVDb21tZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDM3KSB7XG4gICAgICBzMSA9IHBlZyRjOTU7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjOTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgczIgPSBwZWckcGFyc2VfX2goKTtcbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICBzNCA9IFtdO1xuICAgICAgICBpZiAocGVnJGM5Ny50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OCk7IH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0LnB1c2goczUpO1xuICAgICAgICAgICAgaWYgKHBlZyRjOTcudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICBzNSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM5OCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyaW5nKHMzLCBwZWckY3VyclBvcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IFtdO1xuICAgICAgICAgIHM1ID0gcGVnJHBhcnNlRU9MKCk7XG4gICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICB3aGlsZSAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQucHVzaChzNSk7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlRU9MKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgIHMxID0gcGVnJGM5OShzMyk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUNvbW1hbmQoKSB7XG4gICAgdmFyIHMwO1xuXG4gICAgczAgPSBwZWckcGFyc2VTY3JpcHRDb21tYW5kKCk7XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRwYXJzZURpYWNyaXRpY0NvbW1hbmQoKTtcbiAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMCA9IHBlZyRwYXJzZVJlZ3VsYXJDb21tYW5kKCk7XG4gICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMwID0gcGVnJHBhcnNlU3ltYm9sQ29tbWFuZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlU2NyaXB0Q29tbWFuZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChwZWckYzEwMC50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTAxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczMgPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgIHMxID0gcGVnJGMxMDIoczEsIHMzKTtcbiAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlRGlhY3JpdGljQ29tbWFuZCgpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczMsIHM0LCBzNSwgczY7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZVNpbXBsZURpYWNyaXRpYygpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKHBlZyRjNzIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJGM4MDtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM1ID0gW3M1LCBzNl07XG4gICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM0O1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgczEgPSBwZWckYzg0KHMyLCBzNCk7XG4gICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJHBhcnNlRXh0ZW5kZWREaWFjcml0aWMoKTtcbiAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJGMxNTtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBpZiAocGVnJGM3Mi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzczKTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRjODA7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIGlmIChwZWckYzgyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4Myk7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IFtzNSwgczZdO1xuICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzNDtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDEyNSkge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxOTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjApOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzg0KHMyLCBzNCk7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gcGVnJHBhcnNlRXh0ZW5kZWREaWFjcml0aWMoKTtcbiAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGMxNTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE2KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSB2b2lkIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckcGFyc2VSZWd1bGFyVmFsdWUoKTtcbiAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzEwMyhzMiwgczQpO1xuICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VTeW1ib2xDb21tYW5kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mikge1xuICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgIH1cbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAocGVnJGMxMDQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICBzMyA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMDUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBpbnB1dC5zdWJzdHJpbmcoczIsIHBlZyRjdXJyUG9zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gczM7XG4gICAgICB9XG4gICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgIHMxID0gcGVnJGMxMDYoczIpO1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVJlZ3VsYXJDb21tYW5kKCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1LCBzNiwgczcsIHM4LCBzOSwgczEwO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICBzMSA9IHBlZyRjODA7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjODEpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMTApID09PSBwZWckYzEwNykge1xuICAgICAgICBzMiA9IHBlZyRjMTA3O1xuICAgICAgICBwZWckY3VyclBvcyArPSAxMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEwOCk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZUJsb2NrKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIHM0ID0gcGVnJGMxMDkoczIsIHMzKTtcbiAgICAgICAgICBpZiAoczQpIHtcbiAgICAgICAgICAgIHM0ID0gdm9pZCAwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZVJlcXVpcmVkQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzExMChzMiwgczMsIHM1LCBzNik7XG4gICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGMxMTEpIHtcbiAgICAgICAgICBzMyA9IHBlZyRjMTExO1xuICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgIH1cbiAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHZvaWQgMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gaW5wdXQuc3Vic3RyaW5nKHM0LCBwZWckY3VyclBvcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMTE1KHM0KTtcbiAgICAgICAgICAgICAgaWYgKHM1KSB7XG4gICAgICAgICAgICAgICAgczUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM2ID0gW107XG4gICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgd2hpbGUgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNi5wdXNoKHM3KTtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgICAgICAgICAgICBpZiAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczggPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gMTIzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckYzE1O1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzODtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBzOCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VWZXJiYXRpbUZpZWxkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoczkgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMxMCA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxMCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczEgPSBwZWckYzExNihzNCwgczYsIHM5LCBzMTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzgxKTsgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMyID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTExKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjMTExO1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExMik7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKSA9PT0gcGVnJGMxMTMpIHtcbiAgICAgICAgICAgICAgczQgPSBwZWckYzExMztcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gMztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExNCk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgaWYgKHM0ID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMztcbiAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgczQgPSBpbnB1dC5zdWJzdHJpbmcoczQsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzNCA9IHM1O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxMTcoczQpO1xuICAgICAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICAgICAgczUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgICAgczcgPSBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAxMjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJGMxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM5ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNik7IH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgczggPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM4ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzOSA9IHBlZyRwYXJzZVZlcmJhdGltRmllbGRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM5ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTE4KHM0LCBzNiwgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gOTIpIHtcbiAgICAgICAgICAgIHMxID0gcGVnJGM4MDtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCA1KSA9PT0gcGVnJGMxMTEpIHtcbiAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgKz0gNTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzExMik7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgaWYgKHMzID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMyID0gdm9pZCAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMjtcbiAgICAgICAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuc3Vic3RyKHBlZyRjdXJyUG9zLCAzKSA9PT0gcGVnJGMxMTMpIHtcbiAgICAgICAgICAgICAgICBzNCA9IHBlZyRjMTEzO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHMzID0gdm9pZCAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHM0ID0gcGVnJGN1cnJQb3M7XG4gICAgICAgICAgICAgICAgczUgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMjMpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgd2hpbGUgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzNSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczQgPSBpbnB1dC5zdWJzdHJpbmcoczQsIHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJGMxMTkoczQpO1xuICAgICAgICAgICAgICAgICAgaWYgKHM1KSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczcgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNi5wdXNoKHM3KTtcbiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczggPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczkgPSBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzOSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMjAoczQsIHM2LCBzOCwgczkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mikge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjODA7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgNSkgPT09IHBlZyRjMTExKSB7XG4gICAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyArPSA1O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTEyKTsgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICBpZiAoczMgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZWckY3VyclBvcyA9IHMyO1xuICAgICAgICAgICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczIgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMyA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDMpID09PSBwZWckYzExMykge1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckYzExMztcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICBzMyA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczQgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHM1ID0gW107XG4gICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzIzKTsgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckYzIyLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IGlucHV0LnN1YnN0cmluZyhzNCwgcGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckYzEyMShzNCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSkge1xuICAgICAgICAgICAgICAgICAgICAgIHM1ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczUgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIHM3ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczYucHVzaChzNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM2ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNyA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM3ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHM4ID0gcGVnJHBhcnNlUmVxdWlyZWRBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczggIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWckc2F2ZWRQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMSA9IHBlZyRjMTIyKHM0LCBzNiwgczgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzMCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkyKSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckYzgwO1xuICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGM4MSk7IH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICBzMiA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5zdWJzdHIocGVnJGN1cnJQb3MsIDUpID09PSBwZWckYzExMSkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckYzExMTtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTIpOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscy0tO1xuICAgICAgICAgICAgICAgIGlmIChzMyA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczIgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczI7XG4gICAgICAgICAgICAgICAgICBzMiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgczMgPSBwZWckY3VyclBvcztcbiAgICAgICAgICAgICAgICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgICAgICAgICAgICAgICAgaWYgKGlucHV0LnN1YnN0cihwZWckY3VyclBvcywgMykgPT09IHBlZyRjMTEzKSB7XG4gICAgICAgICAgICAgICAgICAgIHM0ID0gcGVnJGMxMTM7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zICs9IDM7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMTQpOyB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICAgICAgICAgICAgICAgIGlmIChzNCA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzMyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczM7XG4gICAgICAgICAgICAgICAgICAgIHMzID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICBzNCA9IHBlZyRjdXJyUG9zO1xuICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGVnJGMyMi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczYgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHM1LnB1c2goczYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlZyRjMjIudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMyMyk7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzNSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgIHM0ID0gaW5wdXQuc3Vic3RyaW5nKHM0LCBwZWckY3VyclBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgczQgPSBzNTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzNSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgIHM2ID0gcGVnJHBhcnNlT3B0aW9uYWxBcmd1bWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzNiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgczUucHVzaChzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZU9wdGlvbmFsQXJndW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzNiA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczYgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGVnJHNhdmVkUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMxID0gcGVnJGMxMjMoczQsIHM1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VPcHRpb25hbEFyZ3VtZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMywgczQsIHM1O1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBpZiAoaW5wdXQuY2hhckNvZGVBdChwZWckY3VyclBvcykgPT09IDkxKSB7XG4gICAgICBzMSA9IHBlZyRjMTI0O1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNSk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMiA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJGN1cnJQb3M7XG4gICAgICAgIHM0ID0gW107XG4gICAgICAgIGlmIChwZWckYzEyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczUgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxMjcpOyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIGlmIChwZWckYzEyNi50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgICAgIHM1ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHM1ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEyNyk7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMzID0gaW5wdXQuc3Vic3RyaW5nKHMzLCBwZWckY3VyclBvcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczMgPSBzNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICBzNCA9IHBlZyRwYXJzZV9faCgpO1xuICAgICAgICAgIGlmIChzNCAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSA5Mykge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRjMTI4O1xuICAgICAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgczUgPSBwZWckRkFJTEVEO1xuICAgICAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTI5KTsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICAgICAgICBzMSA9IHBlZyRjMTMwKHMzKTtcbiAgICAgICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VSZXF1aXJlZEFyZ3VtZW50KCkge1xuICAgIHZhciBzMCwgczEsIHMyO1xuXG4gICAgczAgPSBwZWckY3VyclBvcztcbiAgICBzMSA9IHBlZyRwYXJzZV9faCgpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKHBlZyRjMTMxLnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTMyKTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjMTMzKHMyKTtcbiAgICAgICAgczAgPSBzMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgICAgczEgPSBwZWckcGFyc2VCbG9jaygpO1xuICAgICAgaWYgKHMxID09PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMxID0gcGVnJHBhcnNlQ29tbWFuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHBlZyRzYXZlZFBvcyA9IHMwO1xuICAgICAgICBzMSA9IHBlZyRjNTIoczEpO1xuICAgICAgfVxuICAgICAgczAgPSBzMTtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VWYXJpYWJsZU5hbWUoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNDtcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckY3VyclBvcztcbiAgICBpZiAocGVnJGMxMzQudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczIgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzNSk7IH1cbiAgICB9XG4gICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMyA9IFtdO1xuICAgICAgaWYgKHBlZyRjMTM2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczQgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczQgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM3KTsgfVxuICAgICAgfVxuICAgICAgd2hpbGUgKHM0ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzLnB1c2goczQpO1xuICAgICAgICBpZiAocGVnJGMxMzYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHM0ID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHM0ID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTM3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoczMgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBbczIsIHMzXTtcbiAgICAgICAgczEgPSBzMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczE7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMTtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMCA9IGlucHV0LnN1YnN0cmluZyhzMCwgcGVnJGN1cnJQb3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMCA9IHMxO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZVNpbXBsZURpYWNyaXRpYygpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxMzgudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzEzOSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VFeHRlbmRlZERpYWNyaXRpYygpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxNDAudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0MSk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFNlcGFyYXRvcigpIHtcbiAgICB2YXIgczAsIHMxLCBzMiwgczM7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlX18oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNjEpIHtcbiAgICAgICAgczIgPSBwZWckYzE0MjtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMyID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Myk7IH1cbiAgICAgIH1cbiAgICAgIGlmIChzMiAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICBzMyA9IHBlZyRwYXJzZV9fKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHMxID0gW3MxLCBzMiwgczNdO1xuICAgICAgICAgIHMwID0gczE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VGaWVsZFRlcm1pbmF0b3IoKSB7XG4gICAgdmFyIHMwLCBzMSwgczIsIHMzLCBzNCwgczU7XG5cbiAgICBzMCA9IHBlZyRjdXJyUG9zO1xuICAgIHMxID0gcGVnJHBhcnNlX18oKTtcbiAgICBpZiAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIGlmIChpbnB1dC5jaGFyQ29kZUF0KHBlZyRjdXJyUG9zKSA9PT0gNDQpIHtcbiAgICAgICAgczIgPSBwZWckYzM3O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMzgpOyB9XG4gICAgICB9XG4gICAgICBpZiAoczIgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczIgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX19oKCk7XG4gICAgICAgIGlmIChzMyAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgIHM0ID0gW107XG4gICAgICAgICAgczUgPSBwZWckcGFyc2VMaW5lQ29tbWVudCgpO1xuICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgczUgPSBwZWckcGFyc2VFT0woKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKHM1ICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgICBzNC5wdXNoKHM1KTtcbiAgICAgICAgICAgIHM1ID0gcGVnJHBhcnNlTGluZUNvbW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChzNSA9PT0gcGVnJEZBSUxFRCkge1xuICAgICAgICAgICAgICBzNSA9IHBlZyRwYXJzZUVPTCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoczQgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgICAgIHMxID0gW3MxLCBzMiwgczMsIHM0XTtcbiAgICAgICAgICAgIHMwID0gczE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlZyRjdXJyUG9zID0gczA7XG4gICAgICBzMCA9IHBlZyRGQUlMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlQ29uY2F0KCkge1xuICAgIHZhciBzMCwgczEsIHMyLCBzMztcblxuICAgIHMwID0gcGVnJGN1cnJQb3M7XG4gICAgczEgPSBwZWckcGFyc2VfXygpO1xuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocGVnJGN1cnJQb3MpID09PSAzNSkge1xuICAgICAgICBzMiA9IHBlZyRjMTQ0O1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczIgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQ1KTsgfVxuICAgICAgfVxuICAgICAgaWYgKHMyICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMzID0gcGVnJHBhcnNlX18oKTtcbiAgICAgICAgaWYgKHMzICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgICAgczEgPSBbczEsIHMyLCBzM107XG4gICAgICAgICAgczAgPSBzMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGVnJGN1cnJQb3MgPSBzMDtcbiAgICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZWckY3VyclBvcyA9IHMwO1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZUVPTCgpIHtcbiAgICB2YXIgczA7XG5cbiAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczAgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gczA7XG4gIH1cblxuICBmdW5jdGlvbiBwZWckcGFyc2VfaCgpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNDkudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE1MCk7IH1cbiAgICB9XG4gICAgaWYgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgICAgczAucHVzaChzMSk7XG4gICAgICAgIGlmIChwZWckYzE0OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTApOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgczAgPSBwZWckRkFJTEVEO1xuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDgpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlX19oKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE0OS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUwKTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTQ5LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUwKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTEpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVnJHBhcnNlX3YoKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTQ2LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNDcpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTQ3KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUyKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV9fdigpIHtcbiAgICB2YXIgczAsIHMxO1xuXG4gICAgcGVnJHNpbGVudEZhaWxzKys7XG4gICAgczAgPSBbXTtcbiAgICBpZiAocGVnJGMxNDYudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICB9IGVsc2Uge1xuICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICB9XG4gICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMC5wdXNoKHMxKTtcbiAgICAgIGlmIChwZWckYzE0Ni50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgcGVnJGN1cnJQb3MrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgaWYgKHBlZyRzaWxlbnRGYWlscyA9PT0gMCkgeyBwZWckZmFpbChwZWckYzE0Nyk7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTUzKTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV8oKSB7XG4gICAgdmFyIHMwLCBzMTtcblxuICAgIHBlZyRzaWxlbnRGYWlscysrO1xuICAgIHMwID0gW107XG4gICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgIHBlZyRjdXJyUG9zKys7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTYpOyB9XG4gICAgfVxuICAgIGlmIChzMSAhPT0gcGVnJEZBSUxFRCkge1xuICAgICAgd2hpbGUgKHMxICE9PSBwZWckRkFJTEVEKSB7XG4gICAgICAgIHMwLnB1c2goczEpO1xuICAgICAgICBpZiAocGVnJGMxNTUudGVzdChpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpKSkge1xuICAgICAgICAgIHMxID0gaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKTtcbiAgICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHMwID0gcGVnJEZBSUxFRDtcbiAgICB9XG4gICAgcGVnJHNpbGVudEZhaWxzLS07XG4gICAgaWYgKHMwID09PSBwZWckRkFJTEVEKSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU0KTsgfVxuICAgIH1cblxuICAgIHJldHVybiBzMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlZyRwYXJzZV9fKCkge1xuICAgIHZhciBzMCwgczE7XG5cbiAgICBwZWckc2lsZW50RmFpbHMrKztcbiAgICBzMCA9IFtdO1xuICAgIGlmIChwZWckYzE1NS50ZXN0KGlucHV0LmNoYXJBdChwZWckY3VyclBvcykpKSB7XG4gICAgICBzMSA9IGlucHV0LmNoYXJBdChwZWckY3VyclBvcyk7XG4gICAgICBwZWckY3VyclBvcysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBzMSA9IHBlZyRGQUlMRUQ7XG4gICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgIH1cbiAgICB3aGlsZSAoczEgIT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMwLnB1c2goczEpO1xuICAgICAgaWYgKHBlZyRjMTU1LnRlc3QoaW5wdXQuY2hhckF0KHBlZyRjdXJyUG9zKSkpIHtcbiAgICAgICAgczEgPSBpbnB1dC5jaGFyQXQocGVnJGN1cnJQb3MpO1xuICAgICAgICBwZWckY3VyclBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgczEgPSBwZWckRkFJTEVEO1xuICAgICAgICBpZiAocGVnJHNpbGVudEZhaWxzID09PSAwKSB7IHBlZyRmYWlsKHBlZyRjMTU2KTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBwZWckc2lsZW50RmFpbHMtLTtcbiAgICBpZiAoczAgPT09IHBlZyRGQUlMRUQpIHtcbiAgICAgIHMxID0gcGVnJEZBSUxFRDtcbiAgICAgIGlmIChwZWckc2lsZW50RmFpbHMgPT09IDApIHsgcGVnJGZhaWwocGVnJGMxNTcpOyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHMwO1xuICB9XG5cblxuICAgIC8qXG4gICAgICBNSVQgTGljZW5zZVxuXG4gICAgICBDb3B5cmlnaHQgKGMpIDIwMTcgRGVyZWsgUCBTaWZmb3JkLCBwYXJ0cyBjb3B5cmlnaHQgKGMpIDIwMTkgYnkgRW1pbGlhbm8gSGV5bnNcblxuICAgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICAgICAgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICAgICAgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICAgICAgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICAgICAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gICAgICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuXG4gICAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAgICAgIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiAgICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAgICAgIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gICAgICBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gICAgICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICAgICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAgICAgIFNPRlRXQVJFLlxuICAgICovXG5cbiAgICBjb25zdCBtYXJrdXAgPSB7XG4gICAgICBzbDogJ2l0YWxpY3MnLFxuICAgICAgZW06ICdpdGFsaWNzJyxcbiAgICAgIGl0OiAnaXRhbGljcycsXG4gICAgICBpdHNoYXBlOiAnaXRhbGljcycsXG5cbiAgICAgIGJmOiAnYm9sZCcsXG4gICAgICBiZnNlcmllczogJ2JvbGQnLFxuXG4gICAgICBzYzogJ3NtYWxsQ2FwcycsXG4gICAgICBzY3NoYXBlOiAnc21hbGxDYXBzJyxcblxuICAgICAgdHQ6ICdmaXhlZFdpZHRoJyxcbiAgICAgIHJtOiAncm9tYW4nLFxuICAgICAgc2Y6ICdzYW5zU2VyaWYnLFxuICAgICAgdmVyYjogJ3ZlcmJhdGltJyxcbiAgICB9XG5cbiAgICBjb25zdCB1bm5lc3RGaWVsZHMgPSAob3B0aW9ucy51bm5lc3RGaWVsZHMgfHwgW10pLm1hcChmaWVsZCA9PiBmaWVsZC50b0xvd2VyQ2FzZSgpKVxuICAgIGNvbnN0IHZlcmJhdGltRmllbGRzID0gKG9wdGlvbnMudmVyYmF0aW1GaWVsZHMgfHwgWyAndXJscmF3JywgJ3VybCcsICdkb2knLCAnZmlsZScsICdmaWxlcycsICdlcHJpbnQnLCAndmVyYmEnLCAndmVyYmInLCAndmVyYmMnIF0pLm1hcChmaWVsZCA9PiB0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnID8gZmllbGQudG9Mb3dlckNhc2UoKSA6IGZpZWxkKVxuICAgIGNvbnN0IHZlcmJhdGltQ29tbWFuZHMgPSAob3B0aW9ucy52ZXJiYXRpbUNvbW1hbmRzIHx8IFsndGV4dHR0JywgJ3VybCcsICdocmVmJ10pXG5cbiAgICBmdW5jdGlvbiBpc1ZlcmJhdGltRmllbGQobmFtZSkge1xuICAgICAgcmV0dXJuIHZlcmJhdGltRmllbGRzLmZpbmQocCA9PiAodHlwZW9mIHAgPT09ICdzdHJpbmcnKSA/IG5hbWUgPT09IHAgOiBuYW1lLm1hdGNoKHApKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVdoaXRlc3BhY2UodGV4dEFycikge1xuICAgICAgcmV0dXJuIHRleHRBcnIucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XG4gICAgICAgIGlmICgvXFxzLy50ZXN0KGN1cnIpKSB7XG4gICAgICAgICAgaWYgKC9cXHMvLnRlc3QocHJldltwcmV2Lmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldiArIGN1cnI7XG4gICAgICB9LCAnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzX2FyZ3VtZW50cyA9IHtcbiAgICAgIEVsc2V2aWVyR2x5cGg6IDEsXG4gICAgICBlbmQ6IDEsXG4gICAgICBiZWdpbjogMSxcbiAgICAgIGJpYmN5cjogMSxcbiAgICAgIGJpYnN0cmluZzogMSxcbiAgICAgIGNoc2Y6IDEsXG4gICAgICBjaXRlOiAxLFxuICAgICAgY3lyY2hhcjogMSxcbiAgICAgIGRpbmc6IDEsXG4gICAgICBlbXBoOiAxLFxuICAgICAgZW5xdW90ZTogMSxcbiAgICAgIGZyYWM6IDIsXG4gICAgICBocmVmOiAyLFxuICAgICAgaHNwYWNlOiAxLFxuICAgICAgbWF0aHJtOiAxLFxuICAgICAgbWJveDogMSxcbiAgICAgIG1rYmliYm9sZDogMSxcbiAgICAgIG1rYmliZW1waDogMSxcbiAgICAgIG1rYmliaXRhbGljOiAxLFxuICAgICAgbWtiaWJxdW90ZTogMSxcbiAgICAgIG5ld2NvbW1hbmQ6IDIsXG4gICAgICBub29wc29ydDogMSxcbiAgICAgIG9jaXJjOiAxLFxuICAgICAgc2VjdGlvbjogMSxcbiAgICAgIHNiOiAxLFxuICAgICAgc3A6IDEsXG4gICAgICBzdWJzZWN0aW9uOiAxLFxuICAgICAgc3Vic3Vic2VjdGlvbjogMSxcbiAgICAgIHN1YnN1YnN1YnNlY3Rpb246IDEsXG4gICAgICB0OiAxLFxuICAgICAgdGV4dGJmOiAxLFxuICAgICAgdGV4dGl0OiAxLFxuICAgICAgdGV4dHJtOiAxLFxuICAgICAgdGV4dHNjOiAxLFxuICAgICAgdGV4dHN1YnNjcmlwdDogMSxcbiAgICAgIHRleHRzdXBlcnNjcmlwdDogMSxcbiAgICAgIHRleHR0dDogMSxcbiAgICAgIHVybDogMSxcbiAgICAgIHZwaGFudG9tOiAxLFxuICAgICAgdnNwYWNlOiAxLFxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNvbWJpbmluZ0RpYWNyaXRpY3MpIHtcbiAgICAgIGZvciAoY29uc3QgY21kIG9mIG9wdGlvbnMuY29tYmluaW5nRGlhY3JpdGljcykge1xuICAgICAgICBoYXNfYXJndW1lbnRzW2NtZF0gPSAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F5KCkge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShhcmd1bWVudHMpLCBudWxsLCAyKSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGVlayhuKSB7XG4gICAgICByZXR1cm4gaW5wdXQuc3Vic3RyKHBlZyRzYXZlZFBvcywgbilcbiAgICB9XG5cbiAgICBjb25zdCBtYXRoID0ge1xuICAgICAgb246IGZhbHNlLFxuXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHN0YXRlKSB7XG4gICAgICAgIHRoaXMub24gPSBzdGF0ZVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhc2ljVGV4dENvbnZlcnNpb25zKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmtpbmQgIT09ICdUZXh0JykgdGhyb3cgbmV3IEVycm9yKG5vZGUua2luZCArICcgaXMgbm90IGEgVGV4dCBub2RlJylcblxuICAgICAgc3dpdGNoIChub2RlLm1vZGUpIHtcbiAgICAgICAgY2FzZSAndmVyYmF0aW0nOlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnbWF0aCc6XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVwbGFjZSgvfi9nLCAnXFx1MDBBMCcpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZVxuICAgICAgICAgICAgLnJlcGxhY2UoLy0tLS9nLCAnXFx1MjAxNCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvLS0vZywgJ1xcdTIwMTMnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJ1xcdTAwQTEnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJ1xcdTAwQkYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL34vZywgJ1xcdTAwQTAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL2BgL2csIG9wdGlvbnMubWFya3VwLmVucXVvdGUub3BlbilcbiAgICAgICAgICAgIC5yZXBsYWNlKC8nJy9nLCBvcHRpb25zLm1hcmt1cC5lbnF1b3RlLmNsb3NlKVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdGV4dCBtb2RlICR7bm9kZS5tb2RlfWApXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJvdGVjdCh2KSB7XG4gICAgICBsZXQgc291cmNlXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICBzb3VyY2UgPSB2Lm1hcChlID0+IGUuc291cmNlKS5qb2luKCcnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IFsgdiBdXG4gICAgICAgIHNvdXJjZSA9IHYuc291cmNlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZV9tYXJrdXBfc3dpdGNoZXMoYmxvY2spIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYmxvY2sudmFsdWVcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBibG9ja1xuXG4gICAgICBibG9jay52YWx1ZSA9IFtdXG5cbiAgICAgIGNvbnN0IHBzZXVkbyA9IHtcbiAgICAgICAgYmxvY2s6IG51bGwsXG4gICAgICAgIG1hcmt1cDoge30sXG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBwc2V1ZG9fYmxvY2soKSB7XG4gICAgICAgIHBzZXVkby5ibG9jayA9IHtcbiAgICAgICAgICBraW5kOiAnQmxvY2snLFxuICAgICAgICAgIGxvYzogbG9jYXRpb24oKSxcbiAgICAgICAgICBzb3VyY2U6ICcnLFxuICAgICAgICAgIHZhbHVlOiBbXSxcbiAgICAgICAgICBtYXJrdXA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHNldWRvLm1hcmt1cCkpLFxuICAgICAgICAgIHBzZXVkbzogdHJ1ZSxcbiAgICAgICAgfVxuICAgICAgICBibG9jay52YWx1ZS5wdXNoKHBzZXVkby5ibG9jaylcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB2YWx1ZSkge1xuICAgICAgICBpZiAobm9kZS5raW5kID09PSAnRW52aXJvbm1lbnQnIHx8IG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgIGJsb2NrLnZhbHVlLnB1c2gobm9kZSlcblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwc2V1ZG8ubWFya3VwKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBzZXVkb19ibG9jaygpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBzZXVkby5ibG9jayA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCcgJiYgbWFya3VwW25vZGUuY29tbWFuZF0pIHtcbiAgICAgICAgICBpZiAocHNldWRvLm1hcmt1cC5pdGFsaWNzKSB7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaXRhdGlvbi1qcy9iaWJ0ZXgtcGFyc2VyLWV4cGVyaW1lbnRzL2NvbW1pdC9jYWU0NzVmMDc1YTA1ZDFjMDc0NDg1YTA2MWIwOGVkMjQ1MTcwYzdlXG4gICAgICAgICAgICBkZWxldGUgcHNldWRvLm1hcmt1cC5pdGFsaWNzXG4gICAgICAgICAgICBpZiAobWFya3VwW25vZGUuY29tbWFuZF0gIT09ICdpdGFsaWNzJykgcHNldWRvLm1hcmt1cFttYXJrdXBbbm9kZS5jb21tYW5kXV0gPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBzZXVkby5tYXJrdXBbbWFya3VwW25vZGUuY29tbWFuZF1dID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhwc2V1ZG8ubWFya3VwKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHBzZXVkb19ibG9jaygpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBwc2V1ZG8uYmxvY2sgPSBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBzZXVkby5ibG9jaykge1xuICAgICAgICAgIHBzZXVkby5ibG9jay5zb3VyY2UgKz0gbm9kZS5zb3VyY2VcbiAgICAgICAgICBwc2V1ZG8uYmxvY2sudmFsdWUucHVzaChub2RlKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmxvY2sudmFsdWUucHVzaChub2RlKVxuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYmxvY2sudmFsdWUgPSBibG9jay52YWx1ZS5maWx0ZXIobm9kZSA9PiAhKG5vZGUucHNldWRvICYmIG5vZGUudmFsdWUubGVuZ3RoID09PSAwKSlcblxuICAgICAgcmV0dXJuIGJsb2NrXG4gICAgfVxuXG5cbiAgcGVnJHJlc3VsdCA9IHBlZyRzdGFydFJ1bGVGdW5jdGlvbigpO1xuXG4gIGlmIChwZWckcmVzdWx0ICE9PSBwZWckRkFJTEVEICYmIHBlZyRjdXJyUG9zID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGVnJHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocGVnJHJlc3VsdCAhPT0gcGVnJEZBSUxFRCAmJiBwZWckY3VyclBvcyA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgcGVnJGZhaWwocGVnJGVuZEV4cGVjdGF0aW9uKCkpO1xuICAgIH1cblxuICAgIHRocm93IHBlZyRidWlsZFN0cnVjdHVyZWRFcnJvcihcbiAgICAgIHBlZyRtYXhGYWlsRXhwZWN0ZWQsXG4gICAgICBwZWckbWF4RmFpbFBvcyA8IGlucHV0Lmxlbmd0aCA/IGlucHV0LmNoYXJBdChwZWckbWF4RmFpbFBvcykgOiBudWxsLFxuICAgICAgcGVnJG1heEZhaWxQb3MgPCBpbnB1dC5sZW5ndGhcbiAgICAgICAgPyBwZWckY29tcHV0ZUxvY2F0aW9uKHBlZyRtYXhGYWlsUG9zLCBwZWckbWF4RmFpbFBvcyArIDEpXG4gICAgICAgIDogcGVnJGNvbXB1dGVMb2NhdGlvbihwZWckbWF4RmFpbFBvcywgcGVnJG1heEZhaWxQb3MpXG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgU3ludGF4RXJyb3I6IHBlZyRTeW50YXhFcnJvcixcbiAgcGFyc2U6ICAgICAgIHBlZyRwYXJzZVxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuLy8gT3JpZ2luYWwgd29yayBieSBIZW5yaWsgTXVlaGUgKGMpIDIwMTBcbi8vXG4vLyBDb21tb25KUyBwb3J0IGJ5IE1pa29sYSBMeXNlbmtvIDIwMTNcbi8vXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuY2xhc3MgUGFyc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBwYXJzZXIpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIEAgJHtwYXJzZXIucG9zfWA7XG4gICAgICAgIGlmIChwYXJzZXIucGFyc2luZylcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCBpbiAke0pTT04uc3RyaW5naWZ5KHBhcnNlci5wYXJzaW5nKX1gO1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ1BhcnNlRXJyb3InO1xuICAgIH1cbn1cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGVtcGxhdGVcbmNvbnN0IGxldHRlciA9IG5ldyBSZWdFeHAoJ1snICsgW1xuICAgIC8vIExldHRlciwgVXBwZXJjYXNlXG4gICAgL1xcdTAwNDEtXFx1MDA1QVxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBERVxcdTAxMDBcXHUwMTAyXFx1MDEwNFxcdTAxMDZcXHUwMTA4XFx1MDEwQVxcdTAxMENcXHUwMTBFXFx1MDExMFxcdTAxMTJcXHUwMTE0XFx1MDExNlxcdTAxMThcXHUwMTFBXFx1MDExQ1xcdTAxMUVcXHUwMTIwXFx1MDEyMlxcdTAxMjRcXHUwMTI2XFx1MDEyOFxcdTAxMkFcXHUwMTJDXFx1MDEyRVxcdTAxMzBcXHUwMTMyXFx1MDEzNFxcdTAxMzZcXHUwMTM5XFx1MDEzQlxcdTAxM0RcXHUwMTNGXFx1MDE0MVxcdTAxNDNcXHUwMTQ1XFx1MDE0N1xcdTAxNEFcXHUwMTRDXFx1MDE0RVxcdTAxNTBcXHUwMTUyXFx1MDE1NFxcdTAxNTZcXHUwMTU4XFx1MDE1QVxcdTAxNUNcXHUwMTVFXFx1MDE2MFxcdTAxNjJcXHUwMTY0XFx1MDE2NlxcdTAxNjhcXHUwMTZBXFx1MDE2Q1xcdTAxNkVcXHUwMTcwXFx1MDE3MlxcdTAxNzRcXHUwMTc2XFx1MDE3OC1cXHUwMTc5XFx1MDE3QlxcdTAxN0RcXHUwMTgxLVxcdTAxODJcXHUwMTg0XFx1MDE4Ni1cXHUwMTg3XFx1MDE4OS1cXHUwMThCXFx1MDE4RS1cXHUwMTkxXFx1MDE5My1cXHUwMTk0XFx1MDE5Ni1cXHUwMTk4XFx1MDE5Qy1cXHUwMTlEXFx1MDE5Ri1cXHUwMUEwXFx1MDFBMlxcdTAxQTRcXHUwMUE2LVxcdTAxQTdcXHUwMUE5XFx1MDFBQ1xcdTAxQUUtXFx1MDFBRlxcdTAxQjEtXFx1MDFCM1xcdTAxQjVcXHUwMUI3LVxcdTAxQjhcXHUwMUJDXFx1MDFDNFxcdTAxQzdcXHUwMUNBXFx1MDFDRFxcdTAxQ0ZcXHUwMUQxXFx1MDFEM1xcdTAxRDVcXHUwMUQ3XFx1MDFEOVxcdTAxREJcXHUwMURFXFx1MDFFMFxcdTAxRTJcXHUwMUU0XFx1MDFFNlxcdTAxRThcXHUwMUVBXFx1MDFFQ1xcdTAxRUVcXHUwMUYxXFx1MDFGNFxcdTAxRjYtXFx1MDFGOFxcdTAxRkFcXHUwMUZDXFx1MDFGRVxcdTAyMDBcXHUwMjAyXFx1MDIwNFxcdTAyMDZcXHUwMjA4XFx1MDIwQVxcdTAyMENcXHUwMjBFXFx1MDIxMFxcdTAyMTJcXHUwMjE0XFx1MDIxNlxcdTAyMThcXHUwMjFBXFx1MDIxQ1xcdTAyMUVcXHUwMjIwXFx1MDIyMlxcdTAyMjRcXHUwMjI2XFx1MDIyOFxcdTAyMkFcXHUwMjJDXFx1MDIyRVxcdTAyMzBcXHUwMjMyXFx1MDIzQS1cXHUwMjNCXFx1MDIzRC1cXHUwMjNFXFx1MDI0MVxcdTAyNDMtXFx1MDI0NlxcdTAyNDhcXHUwMjRBXFx1MDI0Q1xcdTAyNEVcXHUwMzcwXFx1MDM3MlxcdTAzNzZcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzOEZcXHUwMzkxLVxcdTAzQTFcXHUwM0EzLVxcdTAzQUJcXHUwM0NGXFx1MDNEMi1cXHUwM0Q0XFx1MDNEOFxcdTAzREFcXHUwM0RDXFx1MDNERVxcdTAzRTBcXHUwM0UyXFx1MDNFNFxcdTAzRTZcXHUwM0U4XFx1MDNFQVxcdTAzRUNcXHUwM0VFXFx1MDNGNFxcdTAzRjdcXHUwM0Y5LVxcdTAzRkFcXHUwM0ZELVxcdTA0MkZcXHUwNDYwXFx1MDQ2MlxcdTA0NjRcXHUwNDY2XFx1MDQ2OFxcdTA0NkFcXHUwNDZDXFx1MDQ2RVxcdTA0NzBcXHUwNDcyXFx1MDQ3NFxcdTA0NzZcXHUwNDc4XFx1MDQ3QVxcdTA0N0NcXHUwNDdFXFx1MDQ4MFxcdTA0OEFcXHUwNDhDXFx1MDQ4RVxcdTA0OTBcXHUwNDkyXFx1MDQ5NFxcdTA0OTZcXHUwNDk4XFx1MDQ5QVxcdTA0OUNcXHUwNDlFXFx1MDRBMFxcdTA0QTJcXHUwNEE0XFx1MDRBNlxcdTA0QThcXHUwNEFBXFx1MDRBQ1xcdTA0QUVcXHUwNEIwXFx1MDRCMlxcdTA0QjRcXHUwNEI2XFx1MDRCOFxcdTA0QkFcXHUwNEJDXFx1MDRCRVxcdTA0QzAtXFx1MDRDMVxcdTA0QzNcXHUwNEM1XFx1MDRDN1xcdTA0QzlcXHUwNENCXFx1MDRDRFxcdTA0RDBcXHUwNEQyXFx1MDRENFxcdTA0RDZcXHUwNEQ4XFx1MDREQVxcdTA0RENcXHUwNERFXFx1MDRFMFxcdTA0RTJcXHUwNEU0XFx1MDRFNlxcdTA0RThcXHUwNEVBXFx1MDRFQ1xcdTA0RUVcXHUwNEYwXFx1MDRGMlxcdTA0RjRcXHUwNEY2XFx1MDRGOFxcdTA0RkFcXHUwNEZDXFx1MDRGRVxcdTA1MDBcXHUwNTAyXFx1MDUwNFxcdTA1MDZcXHUwNTA4XFx1MDUwQVxcdTA1MENcXHUwNTBFXFx1MDUxMFxcdTA1MTJcXHUwNTE0XFx1MDUxNlxcdTA1MThcXHUwNTFBXFx1MDUxQ1xcdTA1MUVcXHUwNTIwXFx1MDUyMlxcdTA1MjRcXHUwNTI2XFx1MDUyOFxcdTA1MkFcXHUwNTJDXFx1MDUyRVxcdTA1MzEtXFx1MDU1NlxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTNBMC1cXHUxM0Y1XFx1MUUwMFxcdTFFMDJcXHUxRTA0XFx1MUUwNlxcdTFFMDhcXHUxRTBBXFx1MUUwQ1xcdTFFMEVcXHUxRTEwXFx1MUUxMlxcdTFFMTRcXHUxRTE2XFx1MUUxOFxcdTFFMUFcXHUxRTFDXFx1MUUxRVxcdTFFMjBcXHUxRTIyXFx1MUUyNFxcdTFFMjZcXHUxRTI4XFx1MUUyQVxcdTFFMkNcXHUxRTJFXFx1MUUzMFxcdTFFMzJcXHUxRTM0XFx1MUUzNlxcdTFFMzhcXHUxRTNBXFx1MUUzQ1xcdTFFM0VcXHUxRTQwXFx1MUU0MlxcdTFFNDRcXHUxRTQ2XFx1MUU0OFxcdTFFNEFcXHUxRTRDXFx1MUU0RVxcdTFFNTBcXHUxRTUyXFx1MUU1NFxcdTFFNTZcXHUxRTU4XFx1MUU1QVxcdTFFNUNcXHUxRTVFXFx1MUU2MFxcdTFFNjJcXHUxRTY0XFx1MUU2NlxcdTFFNjhcXHUxRTZBXFx1MUU2Q1xcdTFFNkVcXHUxRTcwXFx1MUU3MlxcdTFFNzRcXHUxRTc2XFx1MUU3OFxcdTFFN0FcXHUxRTdDXFx1MUU3RVxcdTFFODBcXHUxRTgyXFx1MUU4NFxcdTFFODZcXHUxRTg4XFx1MUU4QVxcdTFFOENcXHUxRThFXFx1MUU5MFxcdTFFOTJcXHUxRTk0XFx1MUU5RVxcdTFFQTBcXHUxRUEyXFx1MUVBNFxcdTFFQTZcXHUxRUE4XFx1MUVBQVxcdTFFQUNcXHUxRUFFXFx1MUVCMFxcdTFFQjJcXHUxRUI0XFx1MUVCNlxcdTFFQjhcXHUxRUJBXFx1MUVCQ1xcdTFFQkVcXHUxRUMwXFx1MUVDMlxcdTFFQzRcXHUxRUM2XFx1MUVDOFxcdTFFQ0FcXHUxRUNDXFx1MUVDRVxcdTFFRDBcXHUxRUQyXFx1MUVENFxcdTFFRDZcXHUxRUQ4XFx1MUVEQVxcdTFFRENcXHUxRURFXFx1MUVFMFxcdTFFRTJcXHUxRUU0XFx1MUVFNlxcdTFFRThcXHUxRUVBXFx1MUVFQ1xcdTFFRUVcXHUxRUYwXFx1MUVGMlxcdTFFRjRcXHUxRUY2XFx1MUVGOFxcdTFFRkFcXHUxRUZDXFx1MUVGRVxcdTFGMDgtXFx1MUYwRlxcdTFGMTgtXFx1MUYxRFxcdTFGMjgtXFx1MUYyRlxcdTFGMzgtXFx1MUYzRlxcdTFGNDgtXFx1MUY0RFxcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUZcXHUxRjY4LVxcdTFGNkZcXHUxRkI4LVxcdTFGQkJcXHUxRkM4LVxcdTFGQ0JcXHUxRkQ4LVxcdTFGREJcXHUxRkU4LVxcdTFGRUNcXHUxRkY4LVxcdTFGRkJcXHUyMTAyXFx1MjEwN1xcdTIxMEItXFx1MjEwRFxcdTIxMTAtXFx1MjExMlxcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTMwLVxcdTIxMzNcXHUyMTNFLVxcdTIxM0ZcXHUyMTQ1XFx1MjE4M1xcdTJDMDAtXFx1MkMyRVxcdTJDNjBcXHUyQzYyLVxcdTJDNjRcXHUyQzY3XFx1MkM2OVxcdTJDNkJcXHUyQzZELVxcdTJDNzBcXHUyQzcyXFx1MkM3NVxcdTJDN0UtXFx1MkM4MFxcdTJDODJcXHUyQzg0XFx1MkM4NlxcdTJDODhcXHUyQzhBXFx1MkM4Q1xcdTJDOEVcXHUyQzkwXFx1MkM5MlxcdTJDOTRcXHUyQzk2XFx1MkM5OFxcdTJDOUFcXHUyQzlDXFx1MkM5RVxcdTJDQTBcXHUyQ0EyXFx1MkNBNFxcdTJDQTZcXHUyQ0E4XFx1MkNBQVxcdTJDQUNcXHUyQ0FFXFx1MkNCMFxcdTJDQjJcXHUyQ0I0XFx1MkNCNlxcdTJDQjhcXHUyQ0JBXFx1MkNCQ1xcdTJDQkVcXHUyQ0MwXFx1MkNDMlxcdTJDQzRcXHUyQ0M2XFx1MkNDOFxcdTJDQ0FcXHUyQ0NDXFx1MkNDRVxcdTJDRDBcXHUyQ0QyXFx1MkNENFxcdTJDRDZcXHUyQ0Q4XFx1MkNEQVxcdTJDRENcXHUyQ0RFXFx1MkNFMFxcdTJDRTJcXHUyQ0VCXFx1MkNFRFxcdTJDRjJcXHVBNjQwXFx1QTY0MlxcdUE2NDRcXHVBNjQ2XFx1QTY0OFxcdUE2NEFcXHVBNjRDXFx1QTY0RVxcdUE2NTBcXHVBNjUyXFx1QTY1NFxcdUE2NTZcXHVBNjU4XFx1QTY1QVxcdUE2NUNcXHVBNjVFXFx1QTY2MFxcdUE2NjJcXHVBNjY0XFx1QTY2NlxcdUE2NjhcXHVBNjZBXFx1QTY2Q1xcdUE2ODBcXHVBNjgyXFx1QTY4NFxcdUE2ODZcXHVBNjg4XFx1QTY4QVxcdUE2OENcXHVBNjhFXFx1QTY5MFxcdUE2OTJcXHVBNjk0XFx1QTY5NlxcdUE2OThcXHVBNjlBXFx1QTcyMlxcdUE3MjRcXHVBNzI2XFx1QTcyOFxcdUE3MkFcXHVBNzJDXFx1QTcyRVxcdUE3MzJcXHVBNzM0XFx1QTczNlxcdUE3MzhcXHVBNzNBXFx1QTczQ1xcdUE3M0VcXHVBNzQwXFx1QTc0MlxcdUE3NDRcXHVBNzQ2XFx1QTc0OFxcdUE3NEFcXHVBNzRDXFx1QTc0RVxcdUE3NTBcXHVBNzUyXFx1QTc1NFxcdUE3NTZcXHVBNzU4XFx1QTc1QVxcdUE3NUNcXHVBNzVFXFx1QTc2MFxcdUE3NjJcXHVBNzY0XFx1QTc2NlxcdUE3NjhcXHVBNzZBXFx1QTc2Q1xcdUE3NkVcXHVBNzc5XFx1QTc3QlxcdUE3N0QtXFx1QTc3RVxcdUE3ODBcXHVBNzgyXFx1QTc4NFxcdUE3ODZcXHVBNzhCXFx1QTc4RFxcdUE3OTBcXHVBNzkyXFx1QTc5NlxcdUE3OThcXHVBNzlBXFx1QTc5Q1xcdUE3OUVcXHVBN0EwXFx1QTdBMlxcdUE3QTRcXHVBN0E2XFx1QTdBOFxcdUE3QUEtXFx1QTdBRFxcdUE3QjAtXFx1QTdCNFxcdUE3QjZcXHVGRjIxLVxcdUZGM0EvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIFRpdGxlY2FzZVxuICAgIC9cXHUwMUM1XFx1MDFDOFxcdTAxQ0JcXHUwMUYyXFx1MUY4OC1cXHUxRjhGXFx1MUY5OC1cXHUxRjlGXFx1MUZBOC1cXHUxRkFGXFx1MUZCQ1xcdTFGQ0NcXHUxRkZDLy5zb3VyY2UsXG4gICAgLy8gTGV0dGVyLCBMb3dlcmNhc2VcbiAgICAvXFx1MDA2MS1cXHUwMDdBXFx1MDBCNVxcdTAwREYtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzctXFx1MDEzOFxcdTAxM0FcXHUwMTNDXFx1MDEzRVxcdTAxNDBcXHUwMTQyXFx1MDE0NFxcdTAxNDZcXHUwMTQ4LVxcdTAxNDlcXHUwMTRCXFx1MDE0RFxcdTAxNEZcXHUwMTUxXFx1MDE1M1xcdTAxNTVcXHUwMTU3XFx1MDE1OVxcdTAxNUJcXHUwMTVEXFx1MDE1RlxcdTAxNjFcXHUwMTYzXFx1MDE2NVxcdTAxNjdcXHUwMTY5XFx1MDE2QlxcdTAxNkRcXHUwMTZGXFx1MDE3MVxcdTAxNzNcXHUwMTc1XFx1MDE3N1xcdTAxN0FcXHUwMTdDXFx1MDE3RS1cXHUwMTgwXFx1MDE4M1xcdTAxODVcXHUwMTg4XFx1MDE4Qy1cXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUEtXFx1MDFBQlxcdTAxQURcXHUwMUIwXFx1MDFCNFxcdTAxQjZcXHUwMUI5LVxcdTAxQkFcXHUwMUJELVxcdTAxQkZcXHUwMUM2XFx1MDFDOVxcdTAxQ0NcXHUwMUNFXFx1MDFEMFxcdTAxRDJcXHUwMUQ0XFx1MDFENlxcdTAxRDhcXHUwMURBXFx1MDFEQy1cXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGLVxcdTAxRjBcXHUwMUYzXFx1MDFGNVxcdTAxRjlcXHUwMUZCXFx1MDFGRFxcdTAxRkZcXHUwMjAxXFx1MDIwM1xcdTAyMDVcXHUwMjA3XFx1MDIwOVxcdTAyMEJcXHUwMjBEXFx1MDIwRlxcdTAyMTFcXHUwMjEzXFx1MDIxNVxcdTAyMTdcXHUwMjE5XFx1MDIxQlxcdTAyMURcXHUwMjFGXFx1MDIyMVxcdTAyMjNcXHUwMjI1XFx1MDIyN1xcdTAyMjlcXHUwMjJCXFx1MDIyRFxcdTAyMkZcXHUwMjMxXFx1MDIzMy1cXHUwMjM5XFx1MDIzQ1xcdTAyM0YtXFx1MDI0MFxcdTAyNDJcXHUwMjQ3XFx1MDI0OVxcdTAyNEJcXHUwMjREXFx1MDI0Ri1cXHUwMjkzXFx1MDI5NS1cXHUwMkFGXFx1MDM3MVxcdTAzNzNcXHUwMzc3XFx1MDM3Qi1cXHUwMzdEXFx1MDM5MFxcdTAzQUMtXFx1MDNDRVxcdTAzRDAtXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCLVxcdTAzRkNcXHUwNDMwLVxcdTA0NUZcXHUwNDYxXFx1MDQ2M1xcdTA0NjVcXHUwNDY3XFx1MDQ2OVxcdTA0NkJcXHUwNDZEXFx1MDQ2RlxcdTA0NzFcXHUwNDczXFx1MDQ3NVxcdTA0NzdcXHUwNDc5XFx1MDQ3QlxcdTA0N0RcXHUwNDdGXFx1MDQ4MVxcdTA0OEJcXHUwNDhEXFx1MDQ4RlxcdTA0OTFcXHUwNDkzXFx1MDQ5NVxcdTA0OTdcXHUwNDk5XFx1MDQ5QlxcdTA0OURcXHUwNDlGXFx1MDRBMVxcdTA0QTNcXHUwNEE1XFx1MDRBN1xcdTA0QTlcXHUwNEFCXFx1MDRBRFxcdTA0QUZcXHUwNEIxXFx1MDRCM1xcdTA0QjVcXHUwNEI3XFx1MDRCOVxcdTA0QkJcXHUwNEJEXFx1MDRCRlxcdTA0QzJcXHUwNEM0XFx1MDRDNlxcdTA0QzhcXHUwNENBXFx1MDRDQ1xcdTA0Q0UtXFx1MDRDRlxcdTA0RDFcXHUwNEQzXFx1MDRENVxcdTA0RDdcXHUwNEQ5XFx1MDREQlxcdTA0RERcXHUwNERGXFx1MDRFMVxcdTA0RTNcXHUwNEU1XFx1MDRFN1xcdTA0RTlcXHUwNEVCXFx1MDRFRFxcdTA0RUZcXHUwNEYxXFx1MDRGM1xcdTA0RjVcXHUwNEY3XFx1MDRGOVxcdTA0RkJcXHUwNEZEXFx1MDRGRlxcdTA1MDFcXHUwNTAzXFx1MDUwNVxcdTA1MDdcXHUwNTA5XFx1MDUwQlxcdTA1MERcXHUwNTBGXFx1MDUxMVxcdTA1MTNcXHUwNTE1XFx1MDUxN1xcdTA1MTlcXHUwNTFCXFx1MDUxRFxcdTA1MUZcXHUwNTIxXFx1MDUyM1xcdTA1MjVcXHUwNTI3XFx1MDUyOVxcdTA1MkJcXHUwNTJEXFx1MDUyRlxcdTA1NjEtXFx1MDU4N1xcdTEzRjgtXFx1MTNGRFxcdTFEMDAtXFx1MUQyQlxcdTFENkItXFx1MUQ3N1xcdTFENzktXFx1MUQ5QVxcdTFFMDFcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUxRTA5XFx1MUUwQlxcdTFFMERcXHUxRTBGXFx1MUUxMVxcdTFFMTNcXHUxRTE1XFx1MUUxN1xcdTFFMTlcXHUxRTFCXFx1MUUxRFxcdTFFMUZcXHUxRTIxXFx1MUUyM1xcdTFFMjVcXHUxRTI3XFx1MUUyOVxcdTFFMkJcXHUxRTJEXFx1MUUyRlxcdTFFMzFcXHUxRTMzXFx1MUUzNVxcdTFFMzdcXHUxRTM5XFx1MUUzQlxcdTFFM0RcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUxRTQ1XFx1MUU0N1xcdTFFNDlcXHUxRTRCXFx1MUU0RFxcdTFFNEZcXHUxRTUxXFx1MUU1M1xcdTFFNTVcXHUxRTU3XFx1MUU1OVxcdTFFNUJcXHUxRTVEXFx1MUU1RlxcdTFFNjFcXHUxRTYzXFx1MUU2NVxcdTFFNjdcXHUxRTY5XFx1MUU2QlxcdTFFNkRcXHUxRTZGXFx1MUU3MVxcdTFFNzNcXHUxRTc1XFx1MUU3N1xcdTFFNzlcXHUxRTdCXFx1MUU3RFxcdTFFN0ZcXHUxRTgxXFx1MUU4M1xcdTFFODVcXHUxRTg3XFx1MUU4OVxcdTFFOEJcXHUxRThEXFx1MUU4RlxcdTFFOTFcXHUxRTkzXFx1MUU5NS1cXHUxRTlEXFx1MUU5RlxcdTFFQTFcXHUxRUEzXFx1MUVBNVxcdTFFQTdcXHUxRUE5XFx1MUVBQlxcdTFFQURcXHUxRUFGXFx1MUVCMVxcdTFFQjNcXHUxRUI1XFx1MUVCN1xcdTFFQjlcXHUxRUJCXFx1MUVCRFxcdTFFQkZcXHUxRUMxXFx1MUVDM1xcdTFFQzVcXHUxRUM3XFx1MUVDOVxcdTFFQ0JcXHUxRUNEXFx1MUVDRlxcdTFFRDFcXHUxRUQzXFx1MUVENVxcdTFFRDdcXHUxRUQ5XFx1MUVEQlxcdTFFRERcXHUxRURGXFx1MUVFMVxcdTFFRTNcXHUxRUU1XFx1MUVFN1xcdTFFRTlcXHUxRUVCXFx1MUVFRFxcdTFFRUZcXHUxRUYxXFx1MUVGM1xcdTFFRjVcXHUxRUY3XFx1MUVGOVxcdTFFRkJcXHUxRUZEXFx1MUVGRi1cXHUxRjA3XFx1MUYxMC1cXHUxRjE1XFx1MUYyMC1cXHUxRjI3XFx1MUYzMC1cXHUxRjM3XFx1MUY0MC1cXHUxRjQ1XFx1MUY1MC1cXHUxRjU3XFx1MUY2MC1cXHUxRjY3XFx1MUY3MC1cXHUxRjdEXFx1MUY4MC1cXHUxRjg3XFx1MUY5MC1cXHUxRjk3XFx1MUZBMC1cXHUxRkE3XFx1MUZCMC1cXHUxRkI0XFx1MUZCNi1cXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDN1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEN1xcdTFGRTAtXFx1MUZFN1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGN1xcdTIxMEFcXHUyMTBFLVxcdTIxMEZcXHUyMTEzXFx1MjEyRlxcdTIxMzRcXHUyMTM5XFx1MjEzQy1cXHUyMTNEXFx1MjE0Ni1cXHUyMTQ5XFx1MjE0RVxcdTIxODRcXHUyQzMwLVxcdTJDNUVcXHUyQzYxXFx1MkM2NS1cXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzMtXFx1MkM3NFxcdTJDNzYtXFx1MkM3QlxcdTJDODFcXHUyQzgzXFx1MkM4NVxcdTJDODdcXHUyQzg5XFx1MkM4QlxcdTJDOERcXHUyQzhGXFx1MkM5MVxcdTJDOTNcXHUyQzk1XFx1MkM5N1xcdTJDOTlcXHUyQzlCXFx1MkM5RFxcdTJDOUZcXHUyQ0ExXFx1MkNBM1xcdTJDQTVcXHUyQ0E3XFx1MkNBOVxcdTJDQUJcXHUyQ0FEXFx1MkNBRlxcdTJDQjFcXHUyQ0IzXFx1MkNCNVxcdTJDQjdcXHUyQ0I5XFx1MkNCQlxcdTJDQkRcXHUyQ0JGXFx1MkNDMVxcdTJDQzNcXHUyQ0M1XFx1MkNDN1xcdTJDQzlcXHUyQ0NCXFx1MkNDRFxcdTJDQ0ZcXHUyQ0QxXFx1MkNEM1xcdTJDRDVcXHUyQ0Q3XFx1MkNEOVxcdTJDREJcXHUyQ0REXFx1MkNERlxcdTJDRTFcXHUyQ0UzLVxcdTJDRTRcXHUyQ0VDXFx1MkNFRVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdUE2NDFcXHVBNjQzXFx1QTY0NVxcdUE2NDdcXHVBNjQ5XFx1QTY0QlxcdUE2NERcXHVBNjRGXFx1QTY1MVxcdUE2NTNcXHVBNjU1XFx1QTY1N1xcdUE2NTlcXHVBNjVCXFx1QTY1RFxcdUE2NUZcXHVBNjYxXFx1QTY2M1xcdUE2NjVcXHVBNjY3XFx1QTY2OVxcdUE2NkJcXHVBNjZEXFx1QTY4MVxcdUE2ODNcXHVBNjg1XFx1QTY4N1xcdUE2ODlcXHVBNjhCXFx1QTY4RFxcdUE2OEZcXHVBNjkxXFx1QTY5M1xcdUE2OTVcXHVBNjk3XFx1QTY5OVxcdUE2OUJcXHVBNzIzXFx1QTcyNVxcdUE3MjdcXHVBNzI5XFx1QTcyQlxcdUE3MkRcXHVBNzJGLVxcdUE3MzFcXHVBNzMzXFx1QTczNVxcdUE3MzdcXHVBNzM5XFx1QTczQlxcdUE3M0RcXHVBNzNGXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTc0N1xcdUE3NDlcXHVBNzRCXFx1QTc0RFxcdUE3NEZcXHVBNzUxXFx1QTc1M1xcdUE3NTVcXHVBNzU3XFx1QTc1OVxcdUE3NUJcXHVBNzVEXFx1QTc1RlxcdUE3NjFcXHVBNzYzXFx1QTc2NVxcdUE3NjdcXHVBNzY5XFx1QTc2QlxcdUE3NkRcXHVBNzZGXFx1QTc3MS1cXHVBNzc4XFx1QTc3QVxcdUE3N0NcXHVBNzdGXFx1QTc4MVxcdUE3ODNcXHVBNzg1XFx1QTc4N1xcdUE3OENcXHVBNzhFXFx1QTc5MVxcdUE3OTMtXFx1QTc5NVxcdUE3OTdcXHVBNzk5XFx1QTc5QlxcdUE3OURcXHVBNzlGXFx1QTdBMVxcdUE3QTNcXHVBN0E1XFx1QTdBN1xcdUE3QTlcXHVBN0I1XFx1QTdCN1xcdUE3RkFcXHVBQjMwLVxcdUFCNUFcXHVBQjYwLVxcdUFCNjVcXHVBQjcwLVxcdUFCQkZcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGRjQxLVxcdUZGNUEvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIE1vZGlmaWVyXG4gICAgL1xcdTAyQjAtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3NFxcdTAzN0FcXHUwNTU5XFx1MDY0MFxcdTA2RTUtXFx1MDZFNlxcdTA3RjQtXFx1MDdGNVxcdTA3RkFcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwOTcxXFx1MEU0NlxcdTBFQzZcXHUxMEZDXFx1MTdEN1xcdTE4NDNcXHUxQUE3XFx1MUM3OC1cXHUxQzdEXFx1MUQyQy1cXHUxRDZBXFx1MUQ3OFxcdTFEOUItXFx1MURCRlxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MkM3Qy1cXHUyQzdEXFx1MkQ2RlxcdTJFMkZcXHUzMDA1XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwOUQtXFx1MzA5RVxcdTMwRkMtXFx1MzBGRVxcdUEwMTVcXHVBNEY4LVxcdUE0RkRcXHVBNjBDXFx1QTY3RlxcdUE2OUMtXFx1QTY5RFxcdUE3MTctXFx1QTcxRlxcdUE3NzBcXHVBNzg4XFx1QTdGOC1cXHVBN0Y5XFx1QTlDRlxcdUE5RTZcXHVBQTcwXFx1QUFERFxcdUFBRjMtXFx1QUFGNFxcdUFCNUMtXFx1QUI1RlxcdUZGNzBcXHVGRjlFLVxcdUZGOUYvLnNvdXJjZSxcbiAgICAvLyBMZXR0ZXIsIE90aGVyXG4gICAgL1xcdTAwQUFcXHUwMEJBXFx1MDFCQlxcdTAxQzAtXFx1MDFDM1xcdTAyOTRcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2M0ZcXHUwNjQxLVxcdTA2NEFcXHUwNjZFLVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFRS1cXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDgwMC1cXHUwODE1XFx1MDg0MC1cXHUwODU4XFx1MDhBMC1cXHUwOEI0XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcyLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGLVxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDLVxcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwLVxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGLVxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyLVxcdTBBMzNcXHUwQTM1LVxcdTBBMzZcXHUwQTM4LVxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMi1cXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwLVxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRi1cXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMi1cXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUMtXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OS1cXHUwQjlBXFx1MEI5Q1xcdTBCOUUtXFx1MEI5RlxcdTBCQTMtXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MC1cXHUwQzYxXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwLVxcdTBDRTFcXHUwQ0YxLVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyLVxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxLVxcdTBFODJcXHUwRTg0XFx1MEU4Ny1cXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUEtXFx1MEVBQlxcdTBFQUQtXFx1MEVCMFxcdTBFQjItXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1LVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBEMC1cXHUxMEZBXFx1MTBGRC1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0RDXFx1MTgyMC1cXHUxODQyXFx1MTg0NC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUUtXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3N1xcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjUtXFx1MUNGNlxcdTIxMzUtXFx1MjEzOFxcdTJEMzAtXFx1MkQ2N1xcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTMwMDZcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkZcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRDVcXHVBMDAwLVxcdUEwMTRcXHVBMDE2LVxcdUE0OENcXHVBNEQwLVxcdUE0RjdcXHVBNTAwLVxcdUE2MEJcXHVBNjEwLVxcdUE2MUZcXHVBNjJBLVxcdUE2MkJcXHVBNjZFXFx1QTZBMC1cXHVBNkU1XFx1QTc4RlxcdUE3RjdcXHVBN0ZCLVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MEEtXFx1QTkyNVxcdUE5MzAtXFx1QTk0NlxcdUE5NjAtXFx1QTk3Q1xcdUE5ODQtXFx1QTlCMlxcdUE5RTAtXFx1QTlFNFxcdUE5RTctXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE2RlxcdUFBNzEtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNS1cXHVBQUI2XFx1QUFCOS1cXHVBQUJEXFx1QUFDMFxcdUFBQzJcXHVBQURCLVxcdUFBRENcXHVBQUUwLVxcdUFBRUFcXHVBQUYyXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwLVxcdUZCNDFcXHVGQjQzLVxcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjY2LVxcdUZGNkZcXHVGRjcxLVxcdUZGOURcXHVGRkEwLVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGREMvLnNvdXJjZSxcbl0uam9pbignJykgKyAnXScpO1xuY2xhc3MgQmlidGV4UGFyc2VyIHtcbiAgICBwYXJzZShpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIC8vIHRoaXMuX3Byb2dyZXNzID0gMFxuICAgICAgICB0aGlzLnBvcyA9IDA7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgICAgdGhpcy5tYXhfZW50cmllcyA9IG9wdGlvbnMubWF4X2VudHJpZXMgfHwgMDtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gMDtcbiAgICAgICAgdGhpcy5wYXJzaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJpYnRleEFzeW5jKCkudGhlbigoKSA9PiB0aGlzLmNodW5rcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJpYnRleCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2h1bmtzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzV2hpdGVzcGFjZShzLCBob3Jpem9udGFsT25seSA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiAocyA9PT0gJyAnIHx8IHMgPT09ICdcXHQnIHx8ICghaG9yaXpvbnRhbE9ubHkgJiYgKHMgPT09ICdcXHInIHx8IHMgPT09ICdcXG4nKSkpO1xuICAgIH1cbiAgICBtYXRjaChzKSB7XG4gICAgICAgIHRoaXMuc2tpcFdoaXRlc3BhY2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCBzLmxlbmd0aCkgIT09IHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBUb2tlbiBtaXNtYXRjaCwgZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShzKX0sIGZvdW5kICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MsIDIwKSl9Li4uYCwgdGhpcyk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9zICs9IHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnNraXBXaGl0ZXNwYWNlKCk7XG4gICAgfVxuICAgIHRyeU1hdGNoKHMpIHtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCBzLmxlbmd0aCkgPT09IHMpO1xuICAgICAgICAvLyB0aGlzLnNraXBXaGl0ZXNwYWNlKClcbiAgICB9XG4gICAgc2tpcFdoaXRlc3BhY2UoKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaXNXaGl0ZXNwYWNlKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSlcbiAgICAgICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgIC8vIHNoYWR5XG4gICAgICAgIGlmICh0aGlzLmlucHV0W3RoaXMucG9zXSA9PT0gJyUnKSB7XG4gICAgICAgICAgICB3aGlsZSAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCAmJiB0aGlzLmlucHV0W3RoaXMucG9zXSAhPT0gJ1xcbicpXG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoICYmIHRoaXMuaXNXaGl0ZXNwYWNlKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSlcbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlX2JyYWNlcygpIHtcbiAgICAgICAgbGV0IGJyYWNlY291bnQgPSAwO1xuICAgICAgICB0aGlzLm1hdGNoKCd7Jyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgIGxldCBtYXRoID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgICAgICAgICBpZiAoYnJhY2Vjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoJ1VuY2xvc2VkIG1hdGggc2VjdGlvbicsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJyQnOlxuICAgICAgICAgICAgICAgICAgICBtYXRoID0gIW1hdGg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBVbnRlcm1pbmF0ZWQgYnJhY2UtdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmlucHV0LnN1YnN0cihzdGFydCwgMjApKX1gLCB0aGlzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFsdWVfcXVvdGVzKCkge1xuICAgICAgICB0aGlzLm1hdGNoKCdcIicpO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICBsZXQgYnJhY2Vjb3VudCA9IDA7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuaW5wdXRbdGhpcy5wb3NdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3snOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ30nOlxuICAgICAgICAgICAgICAgICAgICBicmFjZWNvdW50LS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJyYWNlY291bnQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKGBVbnRlcm1pbmF0ZWQgcXVvdGUtdmFsdWUgJHtKU09OLnN0cmluZ2lmeSh0aGlzLmlucHV0LnN1YnN0cihzdGFydCwgMjApKX1gLCB0aGlzKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2luZ2xlX3ZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy50cnlNYXRjaCgneycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9icmFjZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyeU1hdGNoKCdcIicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV9xdW90ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtleSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhbHVlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgdmFsdWVzLnB1c2godGhpcy5zaW5nbGVfdmFsdWUoKSk7XG4gICAgICAgIHdoaWxlICh0aGlzLnRyeU1hdGNoKCcjJykpIHtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goJyMnKTtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHRoaXMuc2luZ2xlX3ZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXMuam9pbignJyk7XG4gICAgfVxuICAgIGtleShhbGxvd1VuaWNvZGUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucG9zO1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zID09PSB0aGlzLmlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBQYXJzZUVycm9yKCdSdW5hd2F5IGtleScsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdLm1hdGNoKC9bJ2EtekEtWjAtOSY7XzpcXFxcLi8tXS8pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFsbG93VW5pY29kZSAmJiB0aGlzLmlucHV0W3RoaXMucG9zXS5tYXRjaChsZXR0ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5wb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGtleV9lcXVhbHNfdmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMua2V5KCk7XG4gICAgICAgIGlmICghdGhpcy50cnlNYXRjaCgnPScpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VFcnJvcihgLi4uID0gdmFsdWUgZXhwZWN0ZWQsIGVxdWFscyBzaWduIG1pc3Npbmc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dC5zdWJzdHIodGhpcy5wb3MsIDIwKSl9Li4uYCwgdGhpcyk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF0Y2goJz0nKTtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZSgpO1xuICAgICAgICByZXR1cm4gW2tleSwgdmFsXTtcbiAgICB9XG4gICAga2V5X3ZhbHVlX2xpc3QoKSB7XG4gICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgICAgICB3aGlsZSAodGhpcy50cnlNYXRjaCgnLCcpKSB7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKCcsJyk7XG4gICAgICAgICAgICAvLyBmaXhlcyBwcm9ibGVtcyB3aXRoIGNvbW1hcyBhdCB0aGUgZW5kIG9mIGEgbGlzdFxuICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goJ30nKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5rZXlfZXF1YWxzX3ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW50cnkoZCkge1xuICAgICAgICB0aGlzLnBhcnNpbmcgPSB0aGlzLmtleSh0cnVlKTtcbiAgICAgICAgdGhpcy5tYXRjaCgnLCcpO1xuICAgICAgICB0aGlzLmtleV92YWx1ZV9saXN0KCk7XG4gICAgfVxuICAgIGRpcmVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5tYXRjaCgnQCcpO1xuICAgICAgICByZXR1cm4gYEAke3RoaXMua2V5KCl9YC50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBzdHJpbmcoKSB7XG4gICAgICAgIHRoaXMua2V5X2VxdWFsc192YWx1ZSgpO1xuICAgIH1cbiAgICBwcmVhbWJsZSgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSgpO1xuICAgIH1cbiAgICBjb21tZW50KCkge1xuICAgICAgICB3aGlsZSAodGhpcy5pc1doaXRlc3BhY2UodGhpcy5pbnB1dFt0aGlzLnBvc10sIHRydWUpKVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRbdGhpcy5wb3NdID09PSAneycpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfYnJhY2VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHRoaXMuaW5wdXRbdGhpcy5wb3NdICE9PSAnXFxuJyAmJiB0aGlzLnBvcyA8IHRoaXMuaW5wdXQubGVuZ3RoKVxuICAgICAgICAgICAgdGhpcy5wb3MrKztcbiAgICB9XG4gICAgLypcbiAgICBwcml2YXRlIHByb2dyZXNzKCkge1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKCh0aGlzLnBvcyAvIHRoaXMuaW5wdXQubGVuZ3RoICogMTAwKSAvIDUpICogNSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgIGlmICh0aGlzLl9wcm9ncmVzcyAhPT0gcHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MgPSBwcm9ncmVzc1xuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgICgke3RoaXMuX3Byb2dyZXNzfSUpIGApXG4gICAgICB9XG4gICAgfVxuICAgICovXG4gICAgaGFzTW9yZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF4X2VudHJpZXMgJiYgdGhpcy5lbnRyaWVzID49IHRoaXMubWF4X2VudHJpZXMpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAodGhpcy5wb3MgPCB0aGlzLmlucHV0Lmxlbmd0aCk7XG4gICAgfVxuICAgIGJpYnRleCgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlTmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGJpYnRleEFzeW5jKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNNb3JlKCkgPyAobmV3IFByb21pc2UocmVzb2x2ZSA9PiByZXNvbHZlKHRoaXMucGFyc2VOZXh0KCkpKSkudGhlbigoKSA9PiB0aGlzLmJpYnRleEFzeW5jKCkpIDogUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cbiAgICBwYXJzZU5leHQoKSB7XG4gICAgICAgIC8vIHRoaXMucHJvZ3Jlc3MoKVxuICAgICAgICBjb25zdCBjaHVuayA9IHtcbiAgICAgICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgICAgIHBvczogdGhpcy5wb3MsXG4gICAgICAgICAgICAgICAgbGluZTogdGhpcy5pbnB1dC5zdWJzdHJpbmcoMCwgdGhpcy5wb3MpLnNwbGl0KCdcXG4nKS5sZW5ndGggLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgdGV4dDogbnVsbCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5za2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5pbnB1dC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBndWFyZCA9ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlyZWN0aXZlKCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdAc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgneycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKCd9Jyk7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLnN0cmluZ0RlY2xhcmF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQHByZWFtYmxlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCgneycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWFtYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goJ30nKTtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmsucHJlYW1ibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdAY29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICBjaHVuay5jb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJ5TWF0Y2goJ3snKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSAne30nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudHJ5TWF0Y2goJygnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3VhcmQgPSAnKCknO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXJyb3IoYFRva2VuIG1pc21hdGNoLCBleHBlY3RlZCAneycgb3IgJygnLCBmb3VuZCAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW5wdXQuc3Vic3RyKHRoaXMucG9zLCAyMCkpfS4uLmAsIHRoaXMpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKGd1YXJkWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeShkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChndWFyZFsxXSk7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rLmVudHJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzKys7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIubmFtZSAhPT0gJ1BhcnNlRXJyb3InKVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIGNodW5rLmVycm9yID0gZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgLy8gc2tpcCBhaGVhZCB0byB0aGUgbmV4dCBAIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGNodW5rLm9mZnNldC5wb3MgKyAxO1xuICAgICAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5pbnB1dC5sZW5ndGggJiYgdGhpcy5pbnB1dFt0aGlzLnBvc10gIT09ICdAJylcbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLmlucHV0LnN1YnN0cmluZyhjaHVuay5vZmZzZXQucG9zLCB0aGlzLnBvcyk7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmNodW5rcy5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoY2h1bmsuZXJyb3IgJiYgdGhpcy5jaHVua3MubGVuZ3RoICYmIHRoaXMuY2h1bmtzW2xhc3RdLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmNodW5rc1tsYXN0XS50ZXh0ICs9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjaHVuay50ZXh0ID0gdGV4dDtcbiAgICAgICAgICAgIHRoaXMuY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkcyB0aGUgYmlidGV4IGlucHV0IGFuZCBzcGxpdHMgaXQgaW50byBzZXBhcmF0ZSBjaHVua3Mgb2YgYEBzdHJpbmdgcywgYEBjb21tZW50YHMsIGFuZCBiaWJ0ZXggZW50cmllcy4gVXNlZnVsIGZvciBkZXRlY3RpbmcgaWYgYSBmaWxlIGlzIGJpYnRleCBmaWxlIGFuZCBmb3IgZmlsdGVyaW5nIG91dCBiYXNpYyBlcnJvcnMgdGhhdCB3b3VsZFxuICogbWFrZSB0aGUgbW9yZSBzb3BoaXN0aWNhdGVkIFtbYmlidGV4LnBhcnNlXV0gcmVqZWN0IHRoZSB3aG9sZSBmaWxlXG4gKlxuICogQHJldHVybnMgYXJyYXkgb2YgY2h1bmtzLCB3aXRoIG1hcmtlcnMgZm9yIHR5cGUgYW5kIGVycm9ycyAoaWYgYW55KSBmb3VuZC5cbiAqL1xuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHJldHVybiAobmV3IEJpYnRleFBhcnNlcikucGFyc2UoaW5wdXQsIG9wdGlvbnMpO1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2h1bmtlci5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNjaWk6IHJlcXVpcmUoJy4vdGFibGVzL2FzY2lpLmpzb24nKSxcbiAgYXNjaWlfYmlidGV4X2NyZWF0b3I6IHJlcXVpcmUoJy4vdGFibGVzL2FzY2lpLWJpYnRleC1jcmVhdG9yLmpzb24nKSxcbiAgdW5pY29kZTogcmVxdWlyZSgnLi90YWJsZXMvdW5pY29kZS5qc29uJyksXG4gIGxhdGV4OiByZXF1aXJlKCcuL3RhYmxlcy9sYXRleC5qc29uJyksXG4gIGRpYWNyaXRpY3M6IHJlcXVpcmUoJy4vdGFibGVzL2RpYWNyaXRpY3MuanNvbicpLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gW1xuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnQycsXG4gICAgICAgICdhbGlhcyc6ICdPdGhlcicsXG4gICAgICAgICdpc0JtcExhc3QnOiB0cnVlLFxuICAgICAgICAnYm1wJzogJ1xcMC1cXHgxRlxceDdGLVxceDlGXFx4QURcXHUwMzc4XFx1MDM3OVxcdTAzODAtXFx1MDM4M1xcdTAzOEJcXHUwMzhEXFx1MDNBMlxcdTA1MzBcXHUwNTU3XFx1MDU1OFxcdTA1OEJcXHUwNThDXFx1MDU5MFxcdTA1QzgtXFx1MDVDRlxcdTA1RUItXFx1MDVFRVxcdTA1RjUtXFx1MDYwNVxcdTA2MUNcXHUwNjFEXFx1MDZERFxcdTA3MEVcXHUwNzBGXFx1MDc0QlxcdTA3NENcXHUwN0IyLVxcdTA3QkZcXHUwN0ZCXFx1MDdGQ1xcdTA4MkVcXHUwODJGXFx1MDgzRlxcdTA4NUNcXHUwODVEXFx1MDg1RlxcdTA4NkItXFx1MDg5RlxcdTA4QjVcXHUwOEM4LVxcdTA4RDJcXHUwOEUyXFx1MDk4NFxcdTA5OERcXHUwOThFXFx1MDk5MVxcdTA5OTJcXHUwOUE5XFx1MDlCMVxcdTA5QjMtXFx1MDlCNVxcdTA5QkFcXHUwOUJCXFx1MDlDNVxcdTA5QzZcXHUwOUM5XFx1MDlDQVxcdTA5Q0YtXFx1MDlENlxcdTA5RDgtXFx1MDlEQlxcdTA5REVcXHUwOUU0XFx1MDlFNVxcdTA5RkZcXHUwQTAwXFx1MEEwNFxcdTBBMEItXFx1MEEwRVxcdTBBMTFcXHUwQTEyXFx1MEEyOVxcdTBBMzFcXHUwQTM0XFx1MEEzN1xcdTBBM0FcXHUwQTNCXFx1MEEzRFxcdTBBNDMtXFx1MEE0NlxcdTBBNDlcXHUwQTRBXFx1MEE0RS1cXHUwQTUwXFx1MEE1Mi1cXHUwQTU4XFx1MEE1RFxcdTBBNUYtXFx1MEE2NVxcdTBBNzctXFx1MEE4MFxcdTBBODRcXHUwQThFXFx1MEE5MlxcdTBBQTlcXHUwQUIxXFx1MEFCNFxcdTBBQkFcXHUwQUJCXFx1MEFDNlxcdTBBQ0FcXHUwQUNFXFx1MEFDRlxcdTBBRDEtXFx1MEFERlxcdTBBRTRcXHUwQUU1XFx1MEFGMi1cXHUwQUY4XFx1MEIwMFxcdTBCMDRcXHUwQjBEXFx1MEIwRVxcdTBCMTFcXHUwQjEyXFx1MEIyOVxcdTBCMzFcXHUwQjM0XFx1MEIzQVxcdTBCM0JcXHUwQjQ1XFx1MEI0NlxcdTBCNDlcXHUwQjRBXFx1MEI0RS1cXHUwQjU0XFx1MEI1OC1cXHUwQjVCXFx1MEI1RVxcdTBCNjRcXHUwQjY1XFx1MEI3OC1cXHUwQjgxXFx1MEI4NFxcdTBCOEItXFx1MEI4RFxcdTBCOTFcXHUwQjk2LVxcdTBCOThcXHUwQjlCXFx1MEI5RFxcdTBCQTAtXFx1MEJBMlxcdTBCQTUtXFx1MEJBN1xcdTBCQUItXFx1MEJBRFxcdTBCQkEtXFx1MEJCRFxcdTBCQzMtXFx1MEJDNVxcdTBCQzlcXHUwQkNFXFx1MEJDRlxcdTBCRDEtXFx1MEJENlxcdTBCRDgtXFx1MEJFNVxcdTBCRkItXFx1MEJGRlxcdTBDMERcXHUwQzExXFx1MEMyOVxcdTBDM0EtXFx1MEMzQ1xcdTBDNDVcXHUwQzQ5XFx1MEM0RS1cXHUwQzU0XFx1MEM1N1xcdTBDNUItXFx1MEM1RlxcdTBDNjRcXHUwQzY1XFx1MEM3MC1cXHUwQzc2XFx1MEM4RFxcdTBDOTFcXHUwQ0E5XFx1MENCNFxcdTBDQkFcXHUwQ0JCXFx1MENDNVxcdTBDQzlcXHUwQ0NFLVxcdTBDRDRcXHUwQ0Q3LVxcdTBDRERcXHUwQ0RGXFx1MENFNFxcdTBDRTVcXHUwQ0YwXFx1MENGMy1cXHUwQ0ZGXFx1MEQwRFxcdTBEMTFcXHUwRDQ1XFx1MEQ0OVxcdTBENTAtXFx1MEQ1M1xcdTBENjRcXHUwRDY1XFx1MEQ4MFxcdTBEODRcXHUwRDk3LVxcdTBEOTlcXHUwREIyXFx1MERCQ1xcdTBEQkVcXHUwREJGXFx1MERDNy1cXHUwREM5XFx1MERDQi1cXHUwRENFXFx1MERENVxcdTBERDdcXHUwREUwLVxcdTBERTVcXHUwREYwXFx1MERGMVxcdTBERjUtXFx1MEUwMFxcdTBFM0ItXFx1MEUzRVxcdTBFNUMtXFx1MEU4MFxcdTBFODNcXHUwRTg1XFx1MEU4QlxcdTBFQTRcXHUwRUE2XFx1MEVCRVxcdTBFQkZcXHUwRUM1XFx1MEVDN1xcdTBFQ0VcXHUwRUNGXFx1MEVEQVxcdTBFREJcXHUwRUUwLVxcdTBFRkZcXHUwRjQ4XFx1MEY2RC1cXHUwRjcwXFx1MEY5OFxcdTBGQkRcXHUwRkNEXFx1MEZEQi1cXHUwRkZGXFx1MTBDNlxcdTEwQzgtXFx1MTBDQ1xcdTEwQ0VcXHUxMENGXFx1MTI0OVxcdTEyNEVcXHUxMjRGXFx1MTI1N1xcdTEyNTlcXHUxMjVFXFx1MTI1RlxcdTEyODlcXHUxMjhFXFx1MTI4RlxcdTEyQjFcXHUxMkI2XFx1MTJCN1xcdTEyQkZcXHUxMkMxXFx1MTJDNlxcdTEyQzdcXHUxMkQ3XFx1MTMxMVxcdTEzMTZcXHUxMzE3XFx1MTM1QlxcdTEzNUNcXHUxMzdELVxcdTEzN0ZcXHUxMzlBLVxcdTEzOUZcXHUxM0Y2XFx1MTNGN1xcdTEzRkVcXHUxM0ZGXFx1MTY5RC1cXHUxNjlGXFx1MTZGOS1cXHUxNkZGXFx1MTcwRFxcdTE3MTUtXFx1MTcxRlxcdTE3MzctXFx1MTczRlxcdTE3NTQtXFx1MTc1RlxcdTE3NkRcXHUxNzcxXFx1MTc3NC1cXHUxNzdGXFx1MTdERVxcdTE3REZcXHUxN0VBLVxcdTE3RUZcXHUxN0ZBLVxcdTE3RkZcXHUxODBFXFx1MTgwRlxcdTE4MUEtXFx1MTgxRlxcdTE4NzktXFx1MTg3RlxcdTE4QUItXFx1MThBRlxcdTE4RjYtXFx1MThGRlxcdTE5MUZcXHUxOTJDLVxcdTE5MkZcXHUxOTNDLVxcdTE5M0ZcXHUxOTQxLVxcdTE5NDNcXHUxOTZFXFx1MTk2RlxcdTE5NzUtXFx1MTk3RlxcdTE5QUMtXFx1MTlBRlxcdTE5Q0EtXFx1MTlDRlxcdTE5REItXFx1MTlERFxcdTFBMUNcXHUxQTFEXFx1MUE1RlxcdTFBN0RcXHUxQTdFXFx1MUE4QS1cXHUxQThGXFx1MUE5QS1cXHUxQTlGXFx1MUFBRVxcdTFBQUZcXHUxQUMxLVxcdTFBRkZcXHUxQjRDLVxcdTFCNEZcXHUxQjdELVxcdTFCN0ZcXHUxQkY0LVxcdTFCRkJcXHUxQzM4LVxcdTFDM0FcXHUxQzRBLVxcdTFDNENcXHUxQzg5LVxcdTFDOEZcXHUxQ0JCXFx1MUNCQ1xcdTFDQzgtXFx1MUNDRlxcdTFDRkItXFx1MUNGRlxcdTFERkFcXHUxRjE2XFx1MUYxN1xcdTFGMUVcXHUxRjFGXFx1MUY0NlxcdTFGNDdcXHUxRjRFXFx1MUY0RlxcdTFGNThcXHUxRjVBXFx1MUY1Q1xcdTFGNUVcXHUxRjdFXFx1MUY3RlxcdTFGQjVcXHUxRkM1XFx1MUZENFxcdTFGRDVcXHUxRkRDXFx1MUZGMFxcdTFGRjFcXHUxRkY1XFx1MUZGRlxcdTIwMEItXFx1MjAwRlxcdTIwMkEtXFx1MjAyRVxcdTIwNjAtXFx1MjA2RlxcdTIwNzJcXHUyMDczXFx1MjA4RlxcdTIwOUQtXFx1MjA5RlxcdTIwQzAtXFx1MjBDRlxcdTIwRjEtXFx1MjBGRlxcdTIxOEMtXFx1MjE4RlxcdTI0MjctXFx1MjQzRlxcdTI0NEItXFx1MjQ1RlxcdTJCNzRcXHUyQjc1XFx1MkI5NlxcdTJDMkZcXHUyQzVGXFx1MkNGNC1cXHUyQ0Y4XFx1MkQyNlxcdTJEMjgtXFx1MkQyQ1xcdTJEMkVcXHUyRDJGXFx1MkQ2OC1cXHUyRDZFXFx1MkQ3MS1cXHUyRDdFXFx1MkQ5Ny1cXHUyRDlGXFx1MkRBN1xcdTJEQUZcXHUyREI3XFx1MkRCRlxcdTJEQzdcXHUyRENGXFx1MkREN1xcdTJEREZcXHUyRTUzLVxcdTJFN0ZcXHUyRTlBXFx1MkVGNC1cXHUyRUZGXFx1MkZENi1cXHUyRkVGXFx1MkZGQy1cXHUyRkZGXFx1MzA0MFxcdTMwOTdcXHUzMDk4XFx1MzEwMC1cXHUzMTA0XFx1MzEzMFxcdTMxOEZcXHUzMUU0LVxcdTMxRUZcXHUzMjFGXFx1OUZGRC1cXHU5RkZGXFx1QTQ4RC1cXHVBNDhGXFx1QTRDNy1cXHVBNENGXFx1QTYyQy1cXHVBNjNGXFx1QTZGOC1cXHVBNkZGXFx1QTdDMFxcdUE3QzFcXHVBN0NCLVxcdUE3RjRcXHVBODJELVxcdUE4MkZcXHVBODNBLVxcdUE4M0ZcXHVBODc4LVxcdUE4N0ZcXHVBOEM2LVxcdUE4Q0RcXHVBOERBLVxcdUE4REZcXHVBOTU0LVxcdUE5NUVcXHVBOTdELVxcdUE5N0ZcXHVBOUNFXFx1QTlEQS1cXHVBOUREXFx1QTlGRlxcdUFBMzctXFx1QUEzRlxcdUFBNEVcXHVBQTRGXFx1QUE1QVxcdUFBNUJcXHVBQUMzLVxcdUFBREFcXHVBQUY3LVxcdUFCMDBcXHVBQjA3XFx1QUIwOFxcdUFCMEZcXHVBQjEwXFx1QUIxNy1cXHVBQjFGXFx1QUIyN1xcdUFCMkZcXHVBQjZDLVxcdUFCNkZcXHVBQkVFXFx1QUJFRlxcdUFCRkEtXFx1QUJGRlxcdUQ3QTQtXFx1RDdBRlxcdUQ3QzctXFx1RDdDQVxcdUQ3RkMtXFx1RjhGRlxcdUZBNkVcXHVGQTZGXFx1RkFEQS1cXHVGQUZGXFx1RkIwNy1cXHVGQjEyXFx1RkIxOC1cXHVGQjFDXFx1RkIzN1xcdUZCM0RcXHVGQjNGXFx1RkI0MlxcdUZCNDVcXHVGQkMyLVxcdUZCRDJcXHVGRDQwLVxcdUZENEZcXHVGRDkwXFx1RkQ5MVxcdUZEQzgtXFx1RkRFRlxcdUZERkVcXHVGREZGXFx1RkUxQS1cXHVGRTFGXFx1RkU1M1xcdUZFNjdcXHVGRTZDLVxcdUZFNkZcXHVGRTc1XFx1RkVGRC1cXHVGRjAwXFx1RkZCRi1cXHVGRkMxXFx1RkZDOFxcdUZGQzlcXHVGRkQwXFx1RkZEMVxcdUZGRDhcXHVGRkQ5XFx1RkZERC1cXHVGRkRGXFx1RkZFN1xcdUZGRUYtXFx1RkZGQlxcdUZGRkVcXHVGRkZGJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURDMENcXHVEQzI3XFx1REMzQlxcdURDM0VcXHVEQzRFXFx1REM0RlxcdURDNUUtXFx1REM3RlxcdURDRkItXFx1RENGRlxcdUREMDMtXFx1REQwNlxcdUREMzQtXFx1REQzNlxcdUREOEZcXHVERDlELVxcdUREOUZcXHVEREExLVxcdUREQ0ZcXHVEREZFLVxcdURFN0ZcXHVERTlELVxcdURFOUZcXHVERUQxLVxcdURFREZcXHVERUZDLVxcdURFRkZcXHVERjI0LVxcdURGMkNcXHVERjRCLVxcdURGNEZcXHVERjdCLVxcdURGN0ZcXHVERjlFXFx1REZDNC1cXHVERkM3XFx1REZENi1cXHVERkZGXXxcXHVEODAxW1xcdURDOUVcXHVEQzlGXFx1RENBQS1cXHVEQ0FGXFx1RENENC1cXHVEQ0Q3XFx1RENGQy1cXHVEQ0ZGXFx1REQyOC1cXHVERDJGXFx1REQ2NC1cXHVERDZFXFx1REQ3MC1cXHVEREZGXFx1REYzNy1cXHVERjNGXFx1REY1Ni1cXHVERjVGXFx1REY2OC1cXHVERkZGXXxcXHVEODAyW1xcdURDMDZcXHVEQzA3XFx1REMwOVxcdURDMzZcXHVEQzM5LVxcdURDM0JcXHVEQzNEXFx1REMzRVxcdURDNTZcXHVEQzlGLVxcdURDQTZcXHVEQ0IwLVxcdURDREZcXHVEQ0YzXFx1RENGNi1cXHVEQ0ZBXFx1REQxQy1cXHVERDFFXFx1REQzQS1cXHVERDNFXFx1REQ0MC1cXHVERDdGXFx1RERCOC1cXHVEREJCXFx1REREMFxcdURERDFcXHVERTA0XFx1REUwNy1cXHVERTBCXFx1REUxNFxcdURFMThcXHVERTM2XFx1REUzN1xcdURFM0ItXFx1REUzRVxcdURFNDktXFx1REU0RlxcdURFNTktXFx1REU1RlxcdURFQTAtXFx1REVCRlxcdURFRTctXFx1REVFQVxcdURFRjctXFx1REVGRlxcdURGMzYtXFx1REYzOFxcdURGNTZcXHVERjU3XFx1REY3My1cXHVERjc3XFx1REY5Mi1cXHVERjk4XFx1REY5RC1cXHVERkE4XFx1REZCMC1cXHVERkZGXXxcXHVEODAzW1xcdURDNDktXFx1REM3RlxcdURDQjMtXFx1RENCRlxcdURDRjMtXFx1RENGOVxcdUREMjgtXFx1REQyRlxcdUREM0EtXFx1REU1RlxcdURFN0ZcXHVERUFBXFx1REVBRVxcdURFQUZcXHVERUIyLVxcdURFRkZcXHVERjI4LVxcdURGMkZcXHVERjVBLVxcdURGQUZcXHVERkNDLVxcdURGREZcXHVERkY3LVxcdURGRkZdfFxcdUQ4MDRbXFx1REM0RS1cXHVEQzUxXFx1REM3MC1cXHVEQzdFXFx1RENCRFxcdURDQzItXFx1RENDRlxcdURDRTktXFx1RENFRlxcdURDRkEtXFx1RENGRlxcdUREMzVcXHVERDQ4LVxcdURENEZcXHVERDc3LVxcdUREN0ZcXHVEREUwXFx1RERGNS1cXHVEREZGXFx1REUxMlxcdURFM0YtXFx1REU3RlxcdURFODdcXHVERTg5XFx1REU4RVxcdURFOUVcXHVERUFBLVxcdURFQUZcXHVERUVCLVxcdURFRUZcXHVERUZBLVxcdURFRkZcXHVERjA0XFx1REYwRFxcdURGMEVcXHVERjExXFx1REYxMlxcdURGMjlcXHVERjMxXFx1REYzNFxcdURGM0FcXHVERjQ1XFx1REY0NlxcdURGNDlcXHVERjRBXFx1REY0RVxcdURGNEZcXHVERjUxLVxcdURGNTZcXHVERjU4LVxcdURGNUNcXHVERjY0XFx1REY2NVxcdURGNkQtXFx1REY2RlxcdURGNzUtXFx1REZGRl18XFx1RDgwNVtcXHVEQzVDXFx1REM2Mi1cXHVEQzdGXFx1RENDOC1cXHVEQ0NGXFx1RENEQS1cXHVERDdGXFx1RERCNlxcdUREQjdcXHVERERFLVxcdURERkZcXHVERTQ1LVxcdURFNEZcXHVERTVBLVxcdURFNUZcXHVERTZELVxcdURFN0ZcXHVERUI5LVxcdURFQkZcXHVERUNBLVxcdURFRkZcXHVERjFCXFx1REYxQ1xcdURGMkMtXFx1REYyRlxcdURGNDAtXFx1REZGRl18XFx1RDgwNltcXHVEQzNDLVxcdURDOUZcXHVEQ0YzLVxcdURDRkVcXHVERDA3XFx1REQwOFxcdUREMEFcXHVERDBCXFx1REQxNFxcdUREMTdcXHVERDM2XFx1REQzOVxcdUREM0FcXHVERDQ3LVxcdURENEZcXHVERDVBLVxcdUREOUZcXHVEREE4XFx1RERBOVxcdURERDhcXHVEREQ5XFx1RERFNS1cXHVEREZGXFx1REU0OC1cXHVERTRGXFx1REVBMy1cXHVERUJGXFx1REVGOS1cXHVERkZGXXxcXHVEODA3W1xcdURDMDlcXHVEQzM3XFx1REM0Ni1cXHVEQzRGXFx1REM2RC1cXHVEQzZGXFx1REM5MFxcdURDOTFcXHVEQ0E4XFx1RENCNy1cXHVEQ0ZGXFx1REQwN1xcdUREMEFcXHVERDM3LVxcdUREMzlcXHVERDNCXFx1REQzRVxcdURENDgtXFx1REQ0RlxcdURENUEtXFx1REQ1RlxcdURENjZcXHVERDY5XFx1REQ4RlxcdUREOTJcXHVERDk5LVxcdUREOUZcXHVEREFBLVxcdURFREZcXHVERUY5LVxcdURGQUZcXHVERkIxLVxcdURGQkZcXHVERkYyLVxcdURGRkVdfFxcdUQ4MDhbXFx1REY5QS1cXHVERkZGXXxcXHVEODA5W1xcdURDNkZcXHVEQzc1LVxcdURDN0ZcXHVERDQ0LVxcdURGRkZdfFtcXHVEODBBXFx1RDgwQlxcdUQ4MEUtXFx1RDgxMFxcdUQ4MTItXFx1RDgxOVxcdUQ4MjQtXFx1RDgyQlxcdUQ4MkRcXHVEODJFXFx1RDgzMC1cXHVEODMzXFx1RDgzN1xcdUQ4MzlcXHVEODNGXFx1RDg3Qi1cXHVEODdEXFx1RDg3RlxcdUQ4ODUtXFx1REIzRlxcdURCNDEtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMkYtXFx1REZGRl18XFx1RDgxMVtcXHVERTQ3LVxcdURGRkZdfFxcdUQ4MUFbXFx1REUzOS1cXHVERTNGXFx1REU1RlxcdURFNkEtXFx1REU2RFxcdURFNzAtXFx1REVDRlxcdURFRUVcXHVERUVGXFx1REVGNi1cXHVERUZGXFx1REY0Ni1cXHVERjRGXFx1REY1QVxcdURGNjJcXHVERjc4LVxcdURGN0NcXHVERjkwLVxcdURGRkZdfFxcdUQ4MUJbXFx1REMwMC1cXHVERTNGXFx1REU5Qi1cXHVERUZGXFx1REY0Qi1cXHVERjRFXFx1REY4OC1cXHVERjhFXFx1REZBMC1cXHVERkRGXFx1REZFNS1cXHVERkVGXFx1REZGMi1cXHVERkZGXXxcXHVEODIxW1xcdURGRjgtXFx1REZGRl18XFx1RDgyM1tcXHVEQ0Q2LVxcdURDRkZcXHVERDA5LVxcdURGRkZdfFxcdUQ4MkNbXFx1REQxRi1cXHVERDRGXFx1REQ1My1cXHVERDYzXFx1REQ2OC1cXHVERDZGXFx1REVGQy1cXHVERkZGXXxcXHVEODJGW1xcdURDNkItXFx1REM2RlxcdURDN0QtXFx1REM3RlxcdURDODktXFx1REM4RlxcdURDOUFcXHVEQzlCXFx1RENBMC1cXHVERkZGXXxcXHVEODM0W1xcdURDRjYtXFx1RENGRlxcdUREMjdcXHVERDI4XFx1REQ3My1cXHVERDdBXFx1RERFOS1cXHVEREZGXFx1REU0Ni1cXHVERURGXFx1REVGNC1cXHVERUZGXFx1REY1Ny1cXHVERjVGXFx1REY3OS1cXHVERkZGXXxcXHVEODM1W1xcdURDNTVcXHVEQzlEXFx1RENBMFxcdURDQTFcXHVEQ0EzXFx1RENBNFxcdURDQTdcXHVEQ0E4XFx1RENBRFxcdURDQkFcXHVEQ0JDXFx1RENDNFxcdUREMDZcXHVERDBCXFx1REQwQ1xcdUREMTVcXHVERDFEXFx1REQzQVxcdUREM0ZcXHVERDQ1XFx1REQ0Ny1cXHVERDQ5XFx1REQ1MVxcdURFQTZcXHVERUE3XFx1REZDQ1xcdURGQ0RdfFxcdUQ4MzZbXFx1REU4Qy1cXHVERTlBXFx1REVBMFxcdURFQjAtXFx1REZGRl18XFx1RDgzOFtcXHVEQzA3XFx1REMxOVxcdURDMUFcXHVEQzIyXFx1REMyNVxcdURDMkItXFx1RENGRlxcdUREMkQtXFx1REQyRlxcdUREM0VcXHVERDNGXFx1REQ0QS1cXHVERDREXFx1REQ1MC1cXHVERUJGXFx1REVGQS1cXHVERUZFXFx1REYwMC1cXHVERkZGXXxcXHVEODNBW1xcdURDQzVcXHVEQ0M2XFx1RENENy1cXHVEQ0ZGXFx1REQ0Qy1cXHVERDRGXFx1REQ1QS1cXHVERDVEXFx1REQ2MC1cXHVERkZGXXxcXHVEODNCW1xcdURDMDAtXFx1REM3MFxcdURDQjUtXFx1REQwMFxcdUREM0UtXFx1RERGRlxcdURFMDRcXHVERTIwXFx1REUyM1xcdURFMjVcXHVERTI2XFx1REUyOFxcdURFMzNcXHVERTM4XFx1REUzQVxcdURFM0MtXFx1REU0MVxcdURFNDMtXFx1REU0NlxcdURFNDhcXHVERTRBXFx1REU0Q1xcdURFNTBcXHVERTUzXFx1REU1NVxcdURFNTZcXHVERTU4XFx1REU1QVxcdURFNUNcXHVERTVFXFx1REU2MFxcdURFNjNcXHVERTY1XFx1REU2NlxcdURFNkJcXHVERTczXFx1REU3OFxcdURFN0RcXHVERTdGXFx1REU4QVxcdURFOUMtXFx1REVBMFxcdURFQTRcXHVERUFBXFx1REVCQy1cXHVERUVGXFx1REVGMi1cXHVERkZGXXxcXHVEODNDW1xcdURDMkMtXFx1REMyRlxcdURDOTQtXFx1REM5RlxcdURDQUZcXHVEQ0IwXFx1RENDMFxcdURDRDBcXHVEQ0Y2LVxcdURDRkZcXHVEREFFLVxcdURERTVcXHVERTAzLVxcdURFMEZcXHVERTNDLVxcdURFM0ZcXHVERTQ5LVxcdURFNEZcXHVERTUyLVxcdURFNUZcXHVERTY2LVxcdURFRkZdfFxcdUQ4M0RbXFx1REVEOC1cXHVERURGXFx1REVFRC1cXHVERUVGXFx1REVGRC1cXHVERUZGXFx1REY3NC1cXHVERjdGXFx1REZEOS1cXHVERkRGXFx1REZFQy1cXHVERkZGXXxcXHVEODNFW1xcdURDMEMtXFx1REMwRlxcdURDNDgtXFx1REM0RlxcdURDNUEtXFx1REM1RlxcdURDODgtXFx1REM4RlxcdURDQUVcXHVEQ0FGXFx1RENCMi1cXHVEQ0ZGXFx1REQ3OVxcdUREQ0NcXHVERTU0LVxcdURFNUZcXHVERTZFXFx1REU2RlxcdURFNzUtXFx1REU3N1xcdURFN0ItXFx1REU3RlxcdURFODctXFx1REU4RlxcdURFQTktXFx1REVBRlxcdURFQjctXFx1REVCRlxcdURFQzMtXFx1REVDRlxcdURFRDctXFx1REVGRlxcdURGOTNcXHVERkNCLVxcdURGRUZcXHVERkZBLVxcdURGRkZdfFxcdUQ4NjlbXFx1REVERS1cXHVERUZGXXxcXHVEODZEW1xcdURGMzUtXFx1REYzRl18XFx1RDg2RVtcXHVEQzFFXFx1REMxRl18XFx1RDg3M1tcXHVERUEyLVxcdURFQUZdfFxcdUQ4N0FbXFx1REZFMS1cXHVERkZGXXxcXHVEODdFW1xcdURFMUUtXFx1REZGRl18XFx1RDg4NFtcXHVERjRCLVxcdURGRkZdfFxcdURCNDBbXFx1REMwMC1cXHVEQ0ZGXFx1RERGMC1cXHVERkZGXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnQ2MnLFxuICAgICAgICAnYWxpYXMnOiAnQ29udHJvbCcsXG4gICAgICAgICdibXAnOiAnXFwwLVxceDFGXFx4N0YtXFx4OUYnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NmJyxcbiAgICAgICAgJ2FsaWFzJzogJ0Zvcm1hdCcsXG4gICAgICAgICdibXAnOiAnXFx4QURcXHUwNjAwLVxcdTA2MDVcXHUwNjFDXFx1MDZERFxcdTA3MEZcXHUwOEUyXFx1MTgwRVxcdTIwMEItXFx1MjAwRlxcdTIwMkEtXFx1MjAyRVxcdTIwNjAtXFx1MjA2NFxcdTIwNjYtXFx1MjA2RlxcdUZFRkZcXHVGRkY5LVxcdUZGRkInLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDRbXFx1RENCRFxcdURDQ0RdfFxcdUQ4MERbXFx1REMzMC1cXHVEQzM4XXxcXHVEODJGW1xcdURDQTAtXFx1RENBM118XFx1RDgzNFtcXHVERDczLVxcdUREN0FdfFxcdURCNDBbXFx1REMwMVxcdURDMjAtXFx1REM3Rl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NuJyxcbiAgICAgICAgJ2FsaWFzJzogJ1VuYXNzaWduZWQnLFxuICAgICAgICAnYm1wJzogJ1xcdTAzNzhcXHUwMzc5XFx1MDM4MC1cXHUwMzgzXFx1MDM4QlxcdTAzOERcXHUwM0EyXFx1MDUzMFxcdTA1NTdcXHUwNTU4XFx1MDU4QlxcdTA1OENcXHUwNTkwXFx1MDVDOC1cXHUwNUNGXFx1MDVFQi1cXHUwNUVFXFx1MDVGNS1cXHUwNUZGXFx1MDYxRFxcdTA3MEVcXHUwNzRCXFx1MDc0Q1xcdTA3QjItXFx1MDdCRlxcdTA3RkJcXHUwN0ZDXFx1MDgyRVxcdTA4MkZcXHUwODNGXFx1MDg1Q1xcdTA4NURcXHUwODVGXFx1MDg2Qi1cXHUwODlGXFx1MDhCNVxcdTA4QzgtXFx1MDhEMlxcdTA5ODRcXHUwOThEXFx1MDk4RVxcdTA5OTFcXHUwOTkyXFx1MDlBOVxcdTA5QjFcXHUwOUIzLVxcdTA5QjVcXHUwOUJBXFx1MDlCQlxcdTA5QzVcXHUwOUM2XFx1MDlDOVxcdTA5Q0FcXHUwOUNGLVxcdTA5RDZcXHUwOUQ4LVxcdTA5REJcXHUwOURFXFx1MDlFNFxcdTA5RTVcXHUwOUZGXFx1MEEwMFxcdTBBMDRcXHUwQTBCLVxcdTBBMEVcXHUwQTExXFx1MEExMlxcdTBBMjlcXHUwQTMxXFx1MEEzNFxcdTBBMzdcXHUwQTNBXFx1MEEzQlxcdTBBM0RcXHUwQTQzLVxcdTBBNDZcXHUwQTQ5XFx1MEE0QVxcdTBBNEUtXFx1MEE1MFxcdTBBNTItXFx1MEE1OFxcdTBBNURcXHUwQTVGLVxcdTBBNjVcXHUwQTc3LVxcdTBBODBcXHUwQTg0XFx1MEE4RVxcdTBBOTJcXHUwQUE5XFx1MEFCMVxcdTBBQjRcXHUwQUJBXFx1MEFCQlxcdTBBQzZcXHUwQUNBXFx1MEFDRVxcdTBBQ0ZcXHUwQUQxLVxcdTBBREZcXHUwQUU0XFx1MEFFNVxcdTBBRjItXFx1MEFGOFxcdTBCMDBcXHUwQjA0XFx1MEIwRFxcdTBCMEVcXHUwQjExXFx1MEIxMlxcdTBCMjlcXHUwQjMxXFx1MEIzNFxcdTBCM0FcXHUwQjNCXFx1MEI0NVxcdTBCNDZcXHUwQjQ5XFx1MEI0QVxcdTBCNEUtXFx1MEI1NFxcdTBCNTgtXFx1MEI1QlxcdTBCNUVcXHUwQjY0XFx1MEI2NVxcdTBCNzgtXFx1MEI4MVxcdTBCODRcXHUwQjhCLVxcdTBCOERcXHUwQjkxXFx1MEI5Ni1cXHUwQjk4XFx1MEI5QlxcdTBCOURcXHUwQkEwLVxcdTBCQTJcXHUwQkE1LVxcdTBCQTdcXHUwQkFCLVxcdTBCQURcXHUwQkJBLVxcdTBCQkRcXHUwQkMzLVxcdTBCQzVcXHUwQkM5XFx1MEJDRVxcdTBCQ0ZcXHUwQkQxLVxcdTBCRDZcXHUwQkQ4LVxcdTBCRTVcXHUwQkZCLVxcdTBCRkZcXHUwQzBEXFx1MEMxMVxcdTBDMjlcXHUwQzNBLVxcdTBDM0NcXHUwQzQ1XFx1MEM0OVxcdTBDNEUtXFx1MEM1NFxcdTBDNTdcXHUwQzVCLVxcdTBDNUZcXHUwQzY0XFx1MEM2NVxcdTBDNzAtXFx1MEM3NlxcdTBDOERcXHUwQzkxXFx1MENBOVxcdTBDQjRcXHUwQ0JBXFx1MENCQlxcdTBDQzVcXHUwQ0M5XFx1MENDRS1cXHUwQ0Q0XFx1MENENy1cXHUwQ0REXFx1MENERlxcdTBDRTRcXHUwQ0U1XFx1MENGMFxcdTBDRjMtXFx1MENGRlxcdTBEMERcXHUwRDExXFx1MEQ0NVxcdTBENDlcXHUwRDUwLVxcdTBENTNcXHUwRDY0XFx1MEQ2NVxcdTBEODBcXHUwRDg0XFx1MEQ5Ny1cXHUwRDk5XFx1MERCMlxcdTBEQkNcXHUwREJFXFx1MERCRlxcdTBEQzctXFx1MERDOVxcdTBEQ0ItXFx1MERDRVxcdTBERDVcXHUwREQ3XFx1MERFMC1cXHUwREU1XFx1MERGMFxcdTBERjFcXHUwREY1LVxcdTBFMDBcXHUwRTNCLVxcdTBFM0VcXHUwRTVDLVxcdTBFODBcXHUwRTgzXFx1MEU4NVxcdTBFOEJcXHUwRUE0XFx1MEVBNlxcdTBFQkVcXHUwRUJGXFx1MEVDNVxcdTBFQzdcXHUwRUNFXFx1MEVDRlxcdTBFREFcXHUwRURCXFx1MEVFMC1cXHUwRUZGXFx1MEY0OFxcdTBGNkQtXFx1MEY3MFxcdTBGOThcXHUwRkJEXFx1MEZDRFxcdTBGREItXFx1MEZGRlxcdTEwQzZcXHUxMEM4LVxcdTEwQ0NcXHUxMENFXFx1MTBDRlxcdTEyNDlcXHUxMjRFXFx1MTI0RlxcdTEyNTdcXHUxMjU5XFx1MTI1RVxcdTEyNUZcXHUxMjg5XFx1MTI4RVxcdTEyOEZcXHUxMkIxXFx1MTJCNlxcdTEyQjdcXHUxMkJGXFx1MTJDMVxcdTEyQzZcXHUxMkM3XFx1MTJEN1xcdTEzMTFcXHUxMzE2XFx1MTMxN1xcdTEzNUJcXHUxMzVDXFx1MTM3RC1cXHUxMzdGXFx1MTM5QS1cXHUxMzlGXFx1MTNGNlxcdTEzRjdcXHUxM0ZFXFx1MTNGRlxcdTE2OUQtXFx1MTY5RlxcdTE2RjktXFx1MTZGRlxcdTE3MERcXHUxNzE1LVxcdTE3MUZcXHUxNzM3LVxcdTE3M0ZcXHUxNzU0LVxcdTE3NUZcXHUxNzZEXFx1MTc3MVxcdTE3NzQtXFx1MTc3RlxcdTE3REVcXHUxN0RGXFx1MTdFQS1cXHUxN0VGXFx1MTdGQS1cXHUxN0ZGXFx1MTgwRlxcdTE4MUEtXFx1MTgxRlxcdTE4NzktXFx1MTg3RlxcdTE4QUItXFx1MThBRlxcdTE4RjYtXFx1MThGRlxcdTE5MUZcXHUxOTJDLVxcdTE5MkZcXHUxOTNDLVxcdTE5M0ZcXHUxOTQxLVxcdTE5NDNcXHUxOTZFXFx1MTk2RlxcdTE5NzUtXFx1MTk3RlxcdTE5QUMtXFx1MTlBRlxcdTE5Q0EtXFx1MTlDRlxcdTE5REItXFx1MTlERFxcdTFBMUNcXHUxQTFEXFx1MUE1RlxcdTFBN0RcXHUxQTdFXFx1MUE4QS1cXHUxQThGXFx1MUE5QS1cXHUxQTlGXFx1MUFBRVxcdTFBQUZcXHUxQUMxLVxcdTFBRkZcXHUxQjRDLVxcdTFCNEZcXHUxQjdELVxcdTFCN0ZcXHUxQkY0LVxcdTFCRkJcXHUxQzM4LVxcdTFDM0FcXHUxQzRBLVxcdTFDNENcXHUxQzg5LVxcdTFDOEZcXHUxQ0JCXFx1MUNCQ1xcdTFDQzgtXFx1MUNDRlxcdTFDRkItXFx1MUNGRlxcdTFERkFcXHUxRjE2XFx1MUYxN1xcdTFGMUVcXHUxRjFGXFx1MUY0NlxcdTFGNDdcXHUxRjRFXFx1MUY0RlxcdTFGNThcXHUxRjVBXFx1MUY1Q1xcdTFGNUVcXHUxRjdFXFx1MUY3RlxcdTFGQjVcXHUxRkM1XFx1MUZENFxcdTFGRDVcXHUxRkRDXFx1MUZGMFxcdTFGRjFcXHUxRkY1XFx1MUZGRlxcdTIwNjVcXHUyMDcyXFx1MjA3M1xcdTIwOEZcXHUyMDlELVxcdTIwOUZcXHUyMEMwLVxcdTIwQ0ZcXHUyMEYxLVxcdTIwRkZcXHUyMThDLVxcdTIxOEZcXHUyNDI3LVxcdTI0M0ZcXHUyNDRCLVxcdTI0NUZcXHUyQjc0XFx1MkI3NVxcdTJCOTZcXHUyQzJGXFx1MkM1RlxcdTJDRjQtXFx1MkNGOFxcdTJEMjZcXHUyRDI4LVxcdTJEMkNcXHUyRDJFXFx1MkQyRlxcdTJENjgtXFx1MkQ2RVxcdTJENzEtXFx1MkQ3RVxcdTJEOTctXFx1MkQ5RlxcdTJEQTdcXHUyREFGXFx1MkRCN1xcdTJEQkZcXHUyREM3XFx1MkRDRlxcdTJERDdcXHUyRERGXFx1MkU1My1cXHUyRTdGXFx1MkU5QVxcdTJFRjQtXFx1MkVGRlxcdTJGRDYtXFx1MkZFRlxcdTJGRkMtXFx1MkZGRlxcdTMwNDBcXHUzMDk3XFx1MzA5OFxcdTMxMDAtXFx1MzEwNFxcdTMxMzBcXHUzMThGXFx1MzFFNC1cXHUzMUVGXFx1MzIxRlxcdTlGRkQtXFx1OUZGRlxcdUE0OEQtXFx1QTQ4RlxcdUE0QzctXFx1QTRDRlxcdUE2MkMtXFx1QTYzRlxcdUE2RjgtXFx1QTZGRlxcdUE3QzBcXHVBN0MxXFx1QTdDQi1cXHVBN0Y0XFx1QTgyRC1cXHVBODJGXFx1QTgzQS1cXHVBODNGXFx1QTg3OC1cXHVBODdGXFx1QThDNi1cXHVBOENEXFx1QThEQS1cXHVBOERGXFx1QTk1NC1cXHVBOTVFXFx1QTk3RC1cXHVBOTdGXFx1QTlDRVxcdUE5REEtXFx1QTlERFxcdUE5RkZcXHVBQTM3LVxcdUFBM0ZcXHVBQTRFXFx1QUE0RlxcdUFBNUFcXHVBQTVCXFx1QUFDMy1cXHVBQURBXFx1QUFGNy1cXHVBQjAwXFx1QUIwN1xcdUFCMDhcXHVBQjBGXFx1QUIxMFxcdUFCMTctXFx1QUIxRlxcdUFCMjdcXHVBQjJGXFx1QUI2Qy1cXHVBQjZGXFx1QUJFRVxcdUFCRUZcXHVBQkZBLVxcdUFCRkZcXHVEN0E0LVxcdUQ3QUZcXHVEN0M3LVxcdUQ3Q0FcXHVEN0ZDLVxcdUQ3RkZcXHVGQTZFXFx1RkE2RlxcdUZBREEtXFx1RkFGRlxcdUZCMDctXFx1RkIxMlxcdUZCMTgtXFx1RkIxQ1xcdUZCMzdcXHVGQjNEXFx1RkIzRlxcdUZCNDJcXHVGQjQ1XFx1RkJDMi1cXHVGQkQyXFx1RkQ0MC1cXHVGRDRGXFx1RkQ5MFxcdUZEOTFcXHVGREM4LVxcdUZERUZcXHVGREZFXFx1RkRGRlxcdUZFMUEtXFx1RkUxRlxcdUZFNTNcXHVGRTY3XFx1RkU2Qy1cXHVGRTZGXFx1RkU3NVxcdUZFRkRcXHVGRUZFXFx1RkYwMFxcdUZGQkYtXFx1RkZDMVxcdUZGQzhcXHVGRkM5XFx1RkZEMFxcdUZGRDFcXHVGRkQ4XFx1RkZEOVxcdUZGREQtXFx1RkZERlxcdUZGRTdcXHVGRkVGLVxcdUZGRjhcXHVGRkZFXFx1RkZGRicsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVEQzBDXFx1REMyN1xcdURDM0JcXHVEQzNFXFx1REM0RVxcdURDNEZcXHVEQzVFLVxcdURDN0ZcXHVEQ0ZCLVxcdURDRkZcXHVERDAzLVxcdUREMDZcXHVERDM0LVxcdUREMzZcXHVERDhGXFx1REQ5RC1cXHVERDlGXFx1RERBMS1cXHVERENGXFx1RERGRS1cXHVERTdGXFx1REU5RC1cXHVERTlGXFx1REVEMS1cXHVERURGXFx1REVGQy1cXHVERUZGXFx1REYyNC1cXHVERjJDXFx1REY0Qi1cXHVERjRGXFx1REY3Qi1cXHVERjdGXFx1REY5RVxcdURGQzQtXFx1REZDN1xcdURGRDYtXFx1REZGRl18XFx1RDgwMVtcXHVEQzlFXFx1REM5RlxcdURDQUEtXFx1RENBRlxcdURDRDQtXFx1RENEN1xcdURDRkMtXFx1RENGRlxcdUREMjgtXFx1REQyRlxcdURENjQtXFx1REQ2RVxcdURENzAtXFx1RERGRlxcdURGMzctXFx1REYzRlxcdURGNTYtXFx1REY1RlxcdURGNjgtXFx1REZGRl18XFx1RDgwMltcXHVEQzA2XFx1REMwN1xcdURDMDlcXHVEQzM2XFx1REMzOS1cXHVEQzNCXFx1REMzRFxcdURDM0VcXHVEQzU2XFx1REM5Ri1cXHVEQ0E2XFx1RENCMC1cXHVEQ0RGXFx1RENGM1xcdURDRjYtXFx1RENGQVxcdUREMUMtXFx1REQxRVxcdUREM0EtXFx1REQzRVxcdURENDAtXFx1REQ3RlxcdUREQjgtXFx1RERCQlxcdURERDBcXHVEREQxXFx1REUwNFxcdURFMDctXFx1REUwQlxcdURFMTRcXHVERTE4XFx1REUzNlxcdURFMzdcXHVERTNCLVxcdURFM0VcXHVERTQ5LVxcdURFNEZcXHVERTU5LVxcdURFNUZcXHVERUEwLVxcdURFQkZcXHVERUU3LVxcdURFRUFcXHVERUY3LVxcdURFRkZcXHVERjM2LVxcdURGMzhcXHVERjU2XFx1REY1N1xcdURGNzMtXFx1REY3N1xcdURGOTItXFx1REY5OFxcdURGOUQtXFx1REZBOFxcdURGQjAtXFx1REZGRl18XFx1RDgwM1tcXHVEQzQ5LVxcdURDN0ZcXHVEQ0IzLVxcdURDQkZcXHVEQ0YzLVxcdURDRjlcXHVERDI4LVxcdUREMkZcXHVERDNBLVxcdURFNUZcXHVERTdGXFx1REVBQVxcdURFQUVcXHVERUFGXFx1REVCMi1cXHVERUZGXFx1REYyOC1cXHVERjJGXFx1REY1QS1cXHVERkFGXFx1REZDQy1cXHVERkRGXFx1REZGNy1cXHVERkZGXXxcXHVEODA0W1xcdURDNEUtXFx1REM1MVxcdURDNzAtXFx1REM3RVxcdURDQzItXFx1RENDQ1xcdURDQ0VcXHVEQ0NGXFx1RENFOS1cXHVEQ0VGXFx1RENGQS1cXHVEQ0ZGXFx1REQzNVxcdURENDgtXFx1REQ0RlxcdURENzctXFx1REQ3RlxcdURERTBcXHVEREY1LVxcdURERkZcXHVERTEyXFx1REUzRi1cXHVERTdGXFx1REU4N1xcdURFODlcXHVERThFXFx1REU5RVxcdURFQUEtXFx1REVBRlxcdURFRUItXFx1REVFRlxcdURFRkEtXFx1REVGRlxcdURGMDRcXHVERjBEXFx1REYwRVxcdURGMTFcXHVERjEyXFx1REYyOVxcdURGMzFcXHVERjM0XFx1REYzQVxcdURGNDVcXHVERjQ2XFx1REY0OVxcdURGNEFcXHVERjRFXFx1REY0RlxcdURGNTEtXFx1REY1NlxcdURGNTgtXFx1REY1Q1xcdURGNjRcXHVERjY1XFx1REY2RC1cXHVERjZGXFx1REY3NS1cXHVERkZGXXxcXHVEODA1W1xcdURDNUNcXHVEQzYyLVxcdURDN0ZcXHVEQ0M4LVxcdURDQ0ZcXHVEQ0RBLVxcdUREN0ZcXHVEREI2XFx1RERCN1xcdUREREUtXFx1RERGRlxcdURFNDUtXFx1REU0RlxcdURFNUEtXFx1REU1RlxcdURFNkQtXFx1REU3RlxcdURFQjktXFx1REVCRlxcdURFQ0EtXFx1REVGRlxcdURGMUJcXHVERjFDXFx1REYyQy1cXHVERjJGXFx1REY0MC1cXHVERkZGXXxcXHVEODA2W1xcdURDM0MtXFx1REM5RlxcdURDRjMtXFx1RENGRVxcdUREMDdcXHVERDA4XFx1REQwQVxcdUREMEJcXHVERDE0XFx1REQxN1xcdUREMzZcXHVERDM5XFx1REQzQVxcdURENDctXFx1REQ0RlxcdURENUEtXFx1REQ5RlxcdUREQThcXHVEREE5XFx1REREOFxcdURERDlcXHVEREU1LVxcdURERkZcXHVERTQ4LVxcdURFNEZcXHVERUEzLVxcdURFQkZcXHVERUY5LVxcdURGRkZdfFxcdUQ4MDdbXFx1REMwOVxcdURDMzdcXHVEQzQ2LVxcdURDNEZcXHVEQzZELVxcdURDNkZcXHVEQzkwXFx1REM5MVxcdURDQThcXHVEQ0I3LVxcdURDRkZcXHVERDA3XFx1REQwQVxcdUREMzctXFx1REQzOVxcdUREM0JcXHVERDNFXFx1REQ0OC1cXHVERDRGXFx1REQ1QS1cXHVERDVGXFx1REQ2NlxcdURENjlcXHVERDhGXFx1REQ5MlxcdUREOTktXFx1REQ5RlxcdUREQUEtXFx1REVERlxcdURFRjktXFx1REZBRlxcdURGQjEtXFx1REZCRlxcdURGRjItXFx1REZGRV18XFx1RDgwOFtcXHVERjlBLVxcdURGRkZdfFxcdUQ4MDlbXFx1REM2RlxcdURDNzUtXFx1REM3RlxcdURENDQtXFx1REZGRl18W1xcdUQ4MEFcXHVEODBCXFx1RDgwRS1cXHVEODEwXFx1RDgxMi1cXHVEODE5XFx1RDgyNC1cXHVEODJCXFx1RDgyRFxcdUQ4MkVcXHVEODMwLVxcdUQ4MzNcXHVEODM3XFx1RDgzOVxcdUQ4M0ZcXHVEODdCLVxcdUQ4N0RcXHVEODdGXFx1RDg4NS1cXHVEQjNGXFx1REI0MS1cXHVEQjdGXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMyRlxcdURDMzktXFx1REZGRl18XFx1RDgxMVtcXHVERTQ3LVxcdURGRkZdfFxcdUQ4MUFbXFx1REUzOS1cXHVERTNGXFx1REU1RlxcdURFNkEtXFx1REU2RFxcdURFNzAtXFx1REVDRlxcdURFRUVcXHVERUVGXFx1REVGNi1cXHVERUZGXFx1REY0Ni1cXHVERjRGXFx1REY1QVxcdURGNjJcXHVERjc4LVxcdURGN0NcXHVERjkwLVxcdURGRkZdfFxcdUQ4MUJbXFx1REMwMC1cXHVERTNGXFx1REU5Qi1cXHVERUZGXFx1REY0Qi1cXHVERjRFXFx1REY4OC1cXHVERjhFXFx1REZBMC1cXHVERkRGXFx1REZFNS1cXHVERkVGXFx1REZGMi1cXHVERkZGXXxcXHVEODIxW1xcdURGRjgtXFx1REZGRl18XFx1RDgyM1tcXHVEQ0Q2LVxcdURDRkZcXHVERDA5LVxcdURGRkZdfFxcdUQ4MkNbXFx1REQxRi1cXHVERDRGXFx1REQ1My1cXHVERDYzXFx1REQ2OC1cXHVERDZGXFx1REVGQy1cXHVERkZGXXxcXHVEODJGW1xcdURDNkItXFx1REM2RlxcdURDN0QtXFx1REM3RlxcdURDODktXFx1REM4RlxcdURDOUFcXHVEQzlCXFx1RENBNC1cXHVERkZGXXxcXHVEODM0W1xcdURDRjYtXFx1RENGRlxcdUREMjdcXHVERDI4XFx1RERFOS1cXHVEREZGXFx1REU0Ni1cXHVERURGXFx1REVGNC1cXHVERUZGXFx1REY1Ny1cXHVERjVGXFx1REY3OS1cXHVERkZGXXxcXHVEODM1W1xcdURDNTVcXHVEQzlEXFx1RENBMFxcdURDQTFcXHVEQ0EzXFx1RENBNFxcdURDQTdcXHVEQ0E4XFx1RENBRFxcdURDQkFcXHVEQ0JDXFx1RENDNFxcdUREMDZcXHVERDBCXFx1REQwQ1xcdUREMTVcXHVERDFEXFx1REQzQVxcdUREM0ZcXHVERDQ1XFx1REQ0Ny1cXHVERDQ5XFx1REQ1MVxcdURFQTZcXHVERUE3XFx1REZDQ1xcdURGQ0RdfFxcdUQ4MzZbXFx1REU4Qy1cXHVERTlBXFx1REVBMFxcdURFQjAtXFx1REZGRl18XFx1RDgzOFtcXHVEQzA3XFx1REMxOVxcdURDMUFcXHVEQzIyXFx1REMyNVxcdURDMkItXFx1RENGRlxcdUREMkQtXFx1REQyRlxcdUREM0VcXHVERDNGXFx1REQ0QS1cXHVERDREXFx1REQ1MC1cXHVERUJGXFx1REVGQS1cXHVERUZFXFx1REYwMC1cXHVERkZGXXxcXHVEODNBW1xcdURDQzVcXHVEQ0M2XFx1RENENy1cXHVEQ0ZGXFx1REQ0Qy1cXHVERDRGXFx1REQ1QS1cXHVERDVEXFx1REQ2MC1cXHVERkZGXXxcXHVEODNCW1xcdURDMDAtXFx1REM3MFxcdURDQjUtXFx1REQwMFxcdUREM0UtXFx1RERGRlxcdURFMDRcXHVERTIwXFx1REUyM1xcdURFMjVcXHVERTI2XFx1REUyOFxcdURFMzNcXHVERTM4XFx1REUzQVxcdURFM0MtXFx1REU0MVxcdURFNDMtXFx1REU0NlxcdURFNDhcXHVERTRBXFx1REU0Q1xcdURFNTBcXHVERTUzXFx1REU1NVxcdURFNTZcXHVERTU4XFx1REU1QVxcdURFNUNcXHVERTVFXFx1REU2MFxcdURFNjNcXHVERTY1XFx1REU2NlxcdURFNkJcXHVERTczXFx1REU3OFxcdURFN0RcXHVERTdGXFx1REU4QVxcdURFOUMtXFx1REVBMFxcdURFQTRcXHVERUFBXFx1REVCQy1cXHVERUVGXFx1REVGMi1cXHVERkZGXXxcXHVEODNDW1xcdURDMkMtXFx1REMyRlxcdURDOTQtXFx1REM5RlxcdURDQUZcXHVEQ0IwXFx1RENDMFxcdURDRDBcXHVEQ0Y2LVxcdURDRkZcXHVEREFFLVxcdURERTVcXHVERTAzLVxcdURFMEZcXHVERTNDLVxcdURFM0ZcXHVERTQ5LVxcdURFNEZcXHVERTUyLVxcdURFNUZcXHVERTY2LVxcdURFRkZdfFxcdUQ4M0RbXFx1REVEOC1cXHVERURGXFx1REVFRC1cXHVERUVGXFx1REVGRC1cXHVERUZGXFx1REY3NC1cXHVERjdGXFx1REZEOS1cXHVERkRGXFx1REZFQy1cXHVERkZGXXxcXHVEODNFW1xcdURDMEMtXFx1REMwRlxcdURDNDgtXFx1REM0RlxcdURDNUEtXFx1REM1RlxcdURDODgtXFx1REM4RlxcdURDQUVcXHVEQ0FGXFx1RENCMi1cXHVEQ0ZGXFx1REQ3OVxcdUREQ0NcXHVERTU0LVxcdURFNUZcXHVERTZFXFx1REU2RlxcdURFNzUtXFx1REU3N1xcdURFN0ItXFx1REU3RlxcdURFODctXFx1REU4RlxcdURFQTktXFx1REVBRlxcdURFQjctXFx1REVCRlxcdURFQzMtXFx1REVDRlxcdURFRDctXFx1REVGRlxcdURGOTNcXHVERkNCLVxcdURGRUZcXHVERkZBLVxcdURGRkZdfFxcdUQ4NjlbXFx1REVERS1cXHVERUZGXXxcXHVEODZEW1xcdURGMzUtXFx1REYzRl18XFx1RDg2RVtcXHVEQzFFXFx1REMxRl18XFx1RDg3M1tcXHVERUEyLVxcdURFQUZdfFxcdUQ4N0FbXFx1REZFMS1cXHVERkZGXXxcXHVEODdFW1xcdURFMUUtXFx1REZGRl18XFx1RDg4NFtcXHVERjRCLVxcdURGRkZdfFxcdURCNDBbXFx1REMwMFxcdURDMDItXFx1REMxRlxcdURDODAtXFx1RENGRlxcdURERjAtXFx1REZGRl18W1xcdURCQkZcXHVEQkZGXVtcXHVERkZFXFx1REZGRl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0NvJyxcbiAgICAgICAgJ2FsaWFzJzogJ1ByaXZhdGVfVXNlJyxcbiAgICAgICAgJ2JtcCc6ICdcXHVFMDAwLVxcdUY4RkYnLFxuICAgICAgICAnYXN0cmFsJzogJ1tcXHVEQjgwLVxcdURCQkVcXHVEQkMwLVxcdURCRkVdW1xcdURDMDAtXFx1REZGRl18W1xcdURCQkZcXHVEQkZGXVtcXHVEQzAwLVxcdURGRkRdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdDcycsXG4gICAgICAgICdhbGlhcyc6ICdTdXJyb2dhdGUnLFxuICAgICAgICAnYm1wJzogJ1xcdUQ4MDAtXFx1REZGRidcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTCcsXG4gICAgICAgICdhbGlhcyc6ICdMZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWmEtelxceEFBXFx4QjVcXHhCQVxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHhGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEM3XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNjBcXHUwQzYxXFx1MEM4MFxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDQtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1NC1cXHUwRDU2XFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4Ni1cXHUwRThBXFx1MEU4Qy1cXHUwRUEzXFx1MEVBNVxcdTBFQTctXFx1MEVCMFxcdTBFQjJcXHUwRUIzXFx1MEVCRFxcdTBFQzAtXFx1MEVDNFxcdTBFQzZcXHUwRURDLVxcdTBFREZcXHUwRjAwXFx1MEY0MC1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY4OC1cXHUwRjhDXFx1MTAwMC1cXHUxMDJBXFx1MTAzRlxcdTEwNTAtXFx1MTA1NVxcdTEwNUEtXFx1MTA1RFxcdTEwNjFcXHUxMDY1XFx1MTA2NlxcdTEwNkUtXFx1MTA3MFxcdTEwNzUtXFx1MTA4MVxcdTEwOEVcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZGMS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzExXFx1MTcyMC1cXHUxNzMxXFx1MTc0MC1cXHUxNzUxXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc4MC1cXHUxN0IzXFx1MTdEN1xcdTE3RENcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4ODRcXHUxODg3LVxcdTE4QThcXHUxOEFBXFx1MThCMC1cXHUxOEY1XFx1MTkwMC1cXHUxOTFFXFx1MTk1MC1cXHUxOTZEXFx1MTk3MC1cXHUxOTc0XFx1MTk4MC1cXHUxOUFCXFx1MTlCMC1cXHUxOUM5XFx1MUEwMC1cXHUxQTE2XFx1MUEyMC1cXHUxQTU0XFx1MUFBN1xcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0JGXFx1QTdDMi1cXHVBN0NBXFx1QTdGNS1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2OVxcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQycsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0MFxcdURGNDItXFx1REY0OVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRl18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURFODAtXFx1REVBOVxcdURFQjBcXHVERUIxXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGQjAtXFx1REZDNFxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ0N1xcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1Ri1cXHVEQzYxXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDJGXFx1REQzRlxcdURENDFcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUMwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMlxcdURGQjBdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODIyXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTdGXFx1REYwMC1cXHVERjRBXFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM118XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjNbXFx1REMwMC1cXHVEQ0Q1XFx1REQwMC1cXHVERDA4XXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTldfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQl18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDM3LVxcdUREM0RcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M1xcdURENEJdfFxcdUQ4M0JbXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDg2OVtcXHVEQzAwLVxcdURFRERcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1RDg4NFtcXHVEQzAwLVxcdURGNEFdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdMQycsXG4gICAgICAgICdhbGlhcyc6ICdDYXNlZF9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWmEtelxceEI1XFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAxQkFcXHUwMUJDLVxcdTAxQkZcXHUwMUM0LVxcdTAyOTNcXHUwMjk1LVxcdTAyQUZcXHUwMzcwLVxcdTAzNzNcXHUwMzc2XFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NjAtXFx1MDU4OFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGRC1cXHUxMEZGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUQwMC1cXHUxRDJCXFx1MUQ2Qi1cXHUxRDc3XFx1MUQ3OS1cXHUxRDlBXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzNFxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDN0JcXHUyQzdFLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1QTY0MC1cXHVBNjZEXFx1QTY4MC1cXHVBNjlCXFx1QTcyMi1cXHVBNzZGXFx1QTc3MS1cXHVBNzg3XFx1QTc4Qi1cXHVBNzhFXFx1QTc5MC1cXHVBN0JGXFx1QTdDMi1cXHVBN0NBXFx1QTdGNVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMDAtXFx1REM0RlxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQzgwLVxcdURDQjJcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODNBW1xcdUREMDAtXFx1REQ0M10nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0xsJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xvd2VyY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ2EtelxceEI1XFx4REYtXFx4RjZcXHhGOC1cXHhGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzdcXHUwMTM4XFx1MDEzQVxcdTAxM0NcXHUwMTNFXFx1MDE0MFxcdTAxNDJcXHUwMTQ0XFx1MDE0NlxcdTAxNDhcXHUwMTQ5XFx1MDE0QlxcdTAxNERcXHUwMTRGXFx1MDE1MVxcdTAxNTNcXHUwMTU1XFx1MDE1N1xcdTAxNTlcXHUwMTVCXFx1MDE1RFxcdTAxNUZcXHUwMTYxXFx1MDE2M1xcdTAxNjVcXHUwMTY3XFx1MDE2OVxcdTAxNkJcXHUwMTZEXFx1MDE2RlxcdTAxNzFcXHUwMTczXFx1MDE3NVxcdTAxNzdcXHUwMTdBXFx1MDE3Q1xcdTAxN0UtXFx1MDE4MFxcdTAxODNcXHUwMTg1XFx1MDE4OFxcdTAxOENcXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUFcXHUwMUFCXFx1MDFBRFxcdTAxQjBcXHUwMUI0XFx1MDFCNlxcdTAxQjlcXHUwMUJBXFx1MDFCRC1cXHUwMUJGXFx1MDFDNlxcdTAxQzlcXHUwMUNDXFx1MDFDRVxcdTAxRDBcXHUwMUQyXFx1MDFENFxcdTAxRDZcXHUwMUQ4XFx1MDFEQVxcdTAxRENcXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGXFx1MDFGMFxcdTAxRjNcXHUwMUY1XFx1MDFGOVxcdTAxRkJcXHUwMUZEXFx1MDFGRlxcdTAyMDFcXHUwMjAzXFx1MDIwNVxcdTAyMDdcXHUwMjA5XFx1MDIwQlxcdTAyMERcXHUwMjBGXFx1MDIxMVxcdTAyMTNcXHUwMjE1XFx1MDIxN1xcdTAyMTlcXHUwMjFCXFx1MDIxRFxcdTAyMUZcXHUwMjIxXFx1MDIyM1xcdTAyMjVcXHUwMjI3XFx1MDIyOVxcdTAyMkJcXHUwMjJEXFx1MDIyRlxcdTAyMzFcXHUwMjMzLVxcdTAyMzlcXHUwMjNDXFx1MDIzRlxcdTAyNDBcXHUwMjQyXFx1MDI0N1xcdTAyNDlcXHUwMjRCXFx1MDI0RFxcdTAyNEYtXFx1MDI5M1xcdTAyOTUtXFx1MDJBRlxcdTAzNzFcXHUwMzczXFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzOTBcXHUwM0FDLVxcdTAzQ0VcXHUwM0QwXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCXFx1MDNGQ1xcdTA0MzAtXFx1MDQ1RlxcdTA0NjFcXHUwNDYzXFx1MDQ2NVxcdTA0NjdcXHUwNDY5XFx1MDQ2QlxcdTA0NkRcXHUwNDZGXFx1MDQ3MVxcdTA0NzNcXHUwNDc1XFx1MDQ3N1xcdTA0NzlcXHUwNDdCXFx1MDQ3RFxcdTA0N0ZcXHUwNDgxXFx1MDQ4QlxcdTA0OERcXHUwNDhGXFx1MDQ5MVxcdTA0OTNcXHUwNDk1XFx1MDQ5N1xcdTA0OTlcXHUwNDlCXFx1MDQ5RFxcdTA0OUZcXHUwNEExXFx1MDRBM1xcdTA0QTVcXHUwNEE3XFx1MDRBOVxcdTA0QUJcXHUwNEFEXFx1MDRBRlxcdTA0QjFcXHUwNEIzXFx1MDRCNVxcdTA0QjdcXHUwNEI5XFx1MDRCQlxcdTA0QkRcXHUwNEJGXFx1MDRDMlxcdTA0QzRcXHUwNEM2XFx1MDRDOFxcdTA0Q0FcXHUwNENDXFx1MDRDRVxcdTA0Q0ZcXHUwNEQxXFx1MDREM1xcdTA0RDVcXHUwNEQ3XFx1MDREOVxcdTA0REJcXHUwNEREXFx1MDRERlxcdTA0RTFcXHUwNEUzXFx1MDRFNVxcdTA0RTdcXHUwNEU5XFx1MDRFQlxcdTA0RURcXHUwNEVGXFx1MDRGMVxcdTA0RjNcXHUwNEY1XFx1MDRGN1xcdTA0RjlcXHUwNEZCXFx1MDRGRFxcdTA0RkZcXHUwNTAxXFx1MDUwM1xcdTA1MDVcXHUwNTA3XFx1MDUwOVxcdTA1MEJcXHUwNTBEXFx1MDUwRlxcdTA1MTFcXHUwNTEzXFx1MDUxNVxcdTA1MTdcXHUwNTE5XFx1MDUxQlxcdTA1MURcXHUwNTFGXFx1MDUyMVxcdTA1MjNcXHUwNTI1XFx1MDUyN1xcdTA1MjlcXHUwNTJCXFx1MDUyRFxcdTA1MkZcXHUwNTYwLVxcdTA1ODhcXHUxMEQwLVxcdTEwRkFcXHUxMEZELVxcdTEwRkZcXHUxM0Y4LVxcdTEzRkRcXHUxQzgwLVxcdTFDODhcXHUxRDAwLVxcdTFEMkJcXHUxRDZCLVxcdTFENzdcXHUxRDc5LVxcdTFEOUFcXHUxRTAxXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MUUwOVxcdTFFMEJcXHUxRTBEXFx1MUUwRlxcdTFFMTFcXHUxRTEzXFx1MUUxNVxcdTFFMTdcXHUxRTE5XFx1MUUxQlxcdTFFMURcXHUxRTFGXFx1MUUyMVxcdTFFMjNcXHUxRTI1XFx1MUUyN1xcdTFFMjlcXHUxRTJCXFx1MUUyRFxcdTFFMkZcXHUxRTMxXFx1MUUzM1xcdTFFMzVcXHUxRTM3XFx1MUUzOVxcdTFFM0JcXHUxRTNEXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MUU0NVxcdTFFNDdcXHUxRTQ5XFx1MUU0QlxcdTFFNERcXHUxRTRGXFx1MUU1MVxcdTFFNTNcXHUxRTU1XFx1MUU1N1xcdTFFNTlcXHUxRTVCXFx1MUU1RFxcdTFFNUZcXHUxRTYxXFx1MUU2M1xcdTFFNjVcXHUxRTY3XFx1MUU2OVxcdTFFNkJcXHUxRTZEXFx1MUU2RlxcdTFFNzFcXHUxRTczXFx1MUU3NVxcdTFFNzdcXHUxRTc5XFx1MUU3QlxcdTFFN0RcXHUxRTdGXFx1MUU4MVxcdTFFODNcXHUxRTg1XFx1MUU4N1xcdTFFODlcXHUxRThCXFx1MUU4RFxcdTFFOEZcXHUxRTkxXFx1MUU5M1xcdTFFOTUtXFx1MUU5RFxcdTFFOUZcXHUxRUExXFx1MUVBM1xcdTFFQTVcXHUxRUE3XFx1MUVBOVxcdTFFQUJcXHUxRUFEXFx1MUVBRlxcdTFFQjFcXHUxRUIzXFx1MUVCNVxcdTFFQjdcXHUxRUI5XFx1MUVCQlxcdTFFQkRcXHUxRUJGXFx1MUVDMVxcdTFFQzNcXHUxRUM1XFx1MUVDN1xcdTFFQzlcXHUxRUNCXFx1MUVDRFxcdTFFQ0ZcXHUxRUQxXFx1MUVEM1xcdTFFRDVcXHUxRUQ3XFx1MUVEOVxcdTFFREJcXHUxRUREXFx1MUVERlxcdTFFRTFcXHUxRUUzXFx1MUVFNVxcdTFFRTdcXHUxRUU5XFx1MUVFQlxcdTFFRURcXHUxRUVGXFx1MUVGMVxcdTFFRjNcXHUxRUY1XFx1MUVGN1xcdTFFRjlcXHUxRUZCXFx1MUVGRFxcdTFFRkYtXFx1MUYwN1xcdTFGMTAtXFx1MUYxNVxcdTFGMjAtXFx1MUYyN1xcdTFGMzAtXFx1MUYzN1xcdTFGNDAtXFx1MUY0NVxcdTFGNTAtXFx1MUY1N1xcdTFGNjAtXFx1MUY2N1xcdTFGNzAtXFx1MUY3RFxcdTFGODAtXFx1MUY4N1xcdTFGOTAtXFx1MUY5N1xcdTFGQTAtXFx1MUZBN1xcdTFGQjAtXFx1MUZCNFxcdTFGQjZcXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzZcXHUxRkM3XFx1MUZEMC1cXHUxRkQzXFx1MUZENlxcdTFGRDdcXHUxRkUwLVxcdTFGRTdcXHUxRkYyLVxcdTFGRjRcXHUxRkY2XFx1MUZGN1xcdTIxMEFcXHUyMTBFXFx1MjEwRlxcdTIxMTNcXHUyMTJGXFx1MjEzNFxcdTIxMzlcXHUyMTNDXFx1MjEzRFxcdTIxNDYtXFx1MjE0OVxcdTIxNEVcXHUyMTg0XFx1MkMzMC1cXHUyQzVFXFx1MkM2MVxcdTJDNjVcXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzNcXHUyQzc0XFx1MkM3Ni1cXHUyQzdCXFx1MkM4MVxcdTJDODNcXHUyQzg1XFx1MkM4N1xcdTJDODlcXHUyQzhCXFx1MkM4RFxcdTJDOEZcXHUyQzkxXFx1MkM5M1xcdTJDOTVcXHUyQzk3XFx1MkM5OVxcdTJDOUJcXHUyQzlEXFx1MkM5RlxcdTJDQTFcXHUyQ0EzXFx1MkNBNVxcdTJDQTdcXHUyQ0E5XFx1MkNBQlxcdTJDQURcXHUyQ0FGXFx1MkNCMVxcdTJDQjNcXHUyQ0I1XFx1MkNCN1xcdTJDQjlcXHUyQ0JCXFx1MkNCRFxcdTJDQkZcXHUyQ0MxXFx1MkNDM1xcdTJDQzVcXHUyQ0M3XFx1MkNDOVxcdTJDQ0JcXHUyQ0NEXFx1MkNDRlxcdTJDRDFcXHUyQ0QzXFx1MkNENVxcdTJDRDdcXHUyQ0Q5XFx1MkNEQlxcdTJDRERcXHUyQ0RGXFx1MkNFMVxcdTJDRTNcXHUyQ0U0XFx1MkNFQ1xcdTJDRUVcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHVBNjQxXFx1QTY0M1xcdUE2NDVcXHVBNjQ3XFx1QTY0OVxcdUE2NEJcXHVBNjREXFx1QTY0RlxcdUE2NTFcXHVBNjUzXFx1QTY1NVxcdUE2NTdcXHVBNjU5XFx1QTY1QlxcdUE2NURcXHVBNjVGXFx1QTY2MVxcdUE2NjNcXHVBNjY1XFx1QTY2N1xcdUE2NjlcXHVBNjZCXFx1QTY2RFxcdUE2ODFcXHVBNjgzXFx1QTY4NVxcdUE2ODdcXHVBNjg5XFx1QTY4QlxcdUE2OERcXHVBNjhGXFx1QTY5MVxcdUE2OTNcXHVBNjk1XFx1QTY5N1xcdUE2OTlcXHVBNjlCXFx1QTcyM1xcdUE3MjVcXHVBNzI3XFx1QTcyOVxcdUE3MkJcXHVBNzJEXFx1QTcyRi1cXHVBNzMxXFx1QTczM1xcdUE3MzVcXHVBNzM3XFx1QTczOVxcdUE3M0JcXHVBNzNEXFx1QTczRlxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3NDdcXHVBNzQ5XFx1QTc0QlxcdUE3NERcXHVBNzRGXFx1QTc1MVxcdUE3NTNcXHVBNzU1XFx1QTc1N1xcdUE3NTlcXHVBNzVCXFx1QTc1RFxcdUE3NUZcXHVBNzYxXFx1QTc2M1xcdUE3NjVcXHVBNzY3XFx1QTc2OVxcdUE3NkJcXHVBNzZEXFx1QTc2RlxcdUE3NzEtXFx1QTc3OFxcdUE3N0FcXHVBNzdDXFx1QTc3RlxcdUE3ODFcXHVBNzgzXFx1QTc4NVxcdUE3ODdcXHVBNzhDXFx1QTc4RVxcdUE3OTFcXHVBNzkzLVxcdUE3OTVcXHVBNzk3XFx1QTc5OVxcdUE3OUJcXHVBNzlEXFx1QTc5RlxcdUE3QTFcXHVBN0EzXFx1QTdBNVxcdUE3QTdcXHVBN0E5XFx1QTdBRlxcdUE3QjVcXHVBN0I3XFx1QTdCOVxcdUE3QkJcXHVBN0JEXFx1QTdCRlxcdUE3QzNcXHVBN0M4XFx1QTdDQVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkY0MS1cXHVGRjVBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMjgtXFx1REM0RlxcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENDMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNjAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzFBLVxcdURDMzNcXHVEQzRFLVxcdURDNTRcXHVEQzU2LVxcdURDNjdcXHVEQzgyLVxcdURDOUJcXHVEQ0I2LVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1RENFQS1cXHVERDAzXFx1REQxRS1cXHVERDM3XFx1REQ1Mi1cXHVERDZCXFx1REQ4Ni1cXHVERDlGXFx1RERCQS1cXHVEREQzXFx1RERFRS1cXHVERTA3XFx1REUyMi1cXHVERTNCXFx1REU1Ni1cXHVERTZGXFx1REU4QS1cXHVERUE1XFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUUxXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjFCXFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjU1XFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERjhGXFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkM5XFx1REZDQl18XFx1RDgzQVtcXHVERDIyLVxcdURENDNdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdMbScsXG4gICAgICAgICdhbGlhcyc6ICdNb2RpZmllcl9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTAyQjAtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3NFxcdTAzN0FcXHUwNTU5XFx1MDY0MFxcdTA2RTVcXHUwNkU2XFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDk3MVxcdTBFNDZcXHUwRUM2XFx1MTBGQ1xcdTE3RDdcXHUxODQzXFx1MUFBN1xcdTFDNzgtXFx1MUM3RFxcdTFEMkMtXFx1MUQ2QVxcdTFENzhcXHUxRDlCLVxcdTFEQkZcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTJDN0NcXHUyQzdEXFx1MkQ2RlxcdTJFMkZcXHUzMDA1XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwOURcXHUzMDlFXFx1MzBGQy1cXHUzMEZFXFx1QTAxNVxcdUE0RjgtXFx1QTRGRFxcdUE2MENcXHVBNjdGXFx1QTY5Q1xcdUE2OURcXHVBNzE3LVxcdUE3MUZcXHVBNzcwXFx1QTc4OFxcdUE3RjhcXHVBN0Y5XFx1QTlDRlxcdUE5RTZcXHVBQTcwXFx1QUFERFxcdUFBRjNcXHVBQUY0XFx1QUI1Qy1cXHVBQjVGXFx1QUI2OVxcdUZGNzBcXHVGRjlFXFx1RkY5RicsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgxQVtcXHVERjQwLVxcdURGNDNdfFxcdUQ4MUJbXFx1REY5My1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXXxcXHVEODM4W1xcdUREMzctXFx1REQzRF18XFx1RDgzQVxcdURENEInXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0xvJyxcbiAgICAgICAgJ2FsaWFzJzogJ090aGVyX0xldHRlcicsXG4gICAgICAgICdibXAnOiAnXFx4QUFcXHhCQVxcdTAxQkJcXHUwMUMwLVxcdTAxQzNcXHUwMjk0XFx1MDVEMC1cXHUwNUVBXFx1MDVFRi1cXHUwNUYyXFx1MDYyMC1cXHUwNjNGXFx1MDY0MS1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwODAwLVxcdTA4MTVcXHUwODQwLVxcdTA4NThcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QzdcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzItXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTA5RkNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzgwXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCRFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDVcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTEwMC1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0RDXFx1MTgyMC1cXHUxODQyXFx1MTg0NC1cXHUxODc4XFx1MTg4MC1cXHUxODg0XFx1MTg4Ny1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFCMDUtXFx1MUIzM1xcdTFCNDUtXFx1MUI0QlxcdTFCODMtXFx1MUJBMFxcdTFCQUVcXHUxQkFGXFx1MUJCQS1cXHUxQkU1XFx1MUMwMC1cXHUxQzIzXFx1MUM0RC1cXHUxQzRGXFx1MUM1QS1cXHUxQzc3XFx1MUNFOS1cXHUxQ0VDXFx1MUNFRS1cXHUxQ0YzXFx1MUNGNVxcdTFDRjZcXHUxQ0ZBXFx1MjEzNS1cXHUyMTM4XFx1MkQzMC1cXHUyRDY3XFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MzAwNlxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTAxNFxcdUEwMTYtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGN1xcdUE1MDAtXFx1QTYwQlxcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY2RVxcdUE2QTAtXFx1QTZFNVxcdUE3OEZcXHVBN0Y3XFx1QTdGQi1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOEZFXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlFMC1cXHVBOUU0XFx1QTlFNy1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTZGXFx1QUE3MS1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQlxcdUFBRENcXHVBQUUwLVxcdUFBRUFcXHVBQUYyXFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUJDMC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkY2Ni1cXHVGRjZGXFx1RkY3MS1cXHVGRjlEXFx1RkZBMC1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDNTAtXFx1REM5RFxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURFMDAtXFx1REYzNlxcdURGNDAtXFx1REY1NVxcdURGNjAtXFx1REY2N118XFx1RDgwMltcXHVEQzAwLVxcdURDMDVcXHVEQzA4XFx1REMwQS1cXHVEQzM1XFx1REMzN1xcdURDMzhcXHVEQzNDXFx1REMzRi1cXHVEQzU1XFx1REM2MC1cXHVEQzc2XFx1REM4MC1cXHVEQzlFXFx1RENFMC1cXHVEQ0YyXFx1RENGNFxcdURDRjVcXHVERDAwLVxcdUREMTVcXHVERDIwLVxcdUREMzlcXHVERDgwLVxcdUREQjdcXHVEREJFXFx1RERCRlxcdURFMDBcXHVERTEwLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTRcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REQwMC1cXHVERDIzXFx1REU4MC1cXHVERUE5XFx1REVCMFxcdURFQjFcXHVERjAwLVxcdURGMUNcXHVERjI3XFx1REYzMC1cXHVERjQ1XFx1REZCMC1cXHVERkM0XFx1REZFMC1cXHVERkY2XXxcXHVEODA0W1xcdURDMDMtXFx1REMzN1xcdURDODMtXFx1RENBRlxcdURDRDAtXFx1RENFOFxcdUREMDMtXFx1REQyNlxcdURENDRcXHVERDQ3XFx1REQ1MC1cXHVERDcyXFx1REQ3NlxcdUREODMtXFx1RERCMlxcdUREQzEtXFx1RERDNFxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTJCXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVERVxcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNEXFx1REY1MFxcdURGNUQtXFx1REY2MV18XFx1RDgwNVtcXHVEQzAwLVxcdURDMzRcXHVEQzQ3LVxcdURDNEFcXHVEQzVGLVxcdURDNjFcXHVEQzgwLVxcdURDQUZcXHVEQ0M0XFx1RENDNVxcdURDQzdcXHVERDgwLVxcdUREQUVcXHVEREQ4LVxcdUREREJcXHVERTAwLVxcdURFMkZcXHVERTQ0XFx1REU4MC1cXHVERUFBXFx1REVCOFxcdURGMDAtXFx1REYxQV18XFx1RDgwNltcXHVEQzAwLVxcdURDMkJcXHVEQ0ZGLVxcdUREMDZcXHVERDA5XFx1REQwQy1cXHVERDEzXFx1REQxNVxcdUREMTZcXHVERDE4LVxcdUREMkZcXHVERDNGXFx1REQ0MVxcdUREQTAtXFx1RERBN1xcdUREQUEtXFx1REREMFxcdURERTFcXHVEREUzXFx1REUwMFxcdURFMEItXFx1REUzMlxcdURFM0FcXHVERTUwXFx1REU1Qy1cXHVERTg5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREODlcXHVERDk4XFx1REVFMC1cXHVERUYyXFx1REZCMF18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REM4MC1cXHVERDQzXXxbXFx1RDgwQ1xcdUQ4MUMtXFx1RDgyMFxcdUQ4MjJcXHVEODQwLVxcdUQ4NjhcXHVEODZBLVxcdUQ4NkNcXHVEODZGLVxcdUQ4NzJcXHVEODc0LVxcdUQ4NzlcXHVEODgwLVxcdUQ4ODNdW1xcdURDMDAtXFx1REZGRl18XFx1RDgwRFtcXHVEQzAwLVxcdURDMkVdfFxcdUQ4MTFbXFx1REMwMC1cXHVERTQ2XXxcXHVEODFBW1xcdURDMDAtXFx1REUzOFxcdURFNDAtXFx1REU1RVxcdURFRDAtXFx1REVFRFxcdURGMDAtXFx1REYyRlxcdURGNjMtXFx1REY3N1xcdURGN0QtXFx1REY4Rl18XFx1RDgxQltcXHVERjAwLVxcdURGNEFcXHVERjUwXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyM1tcXHVEQzAwLVxcdURDRDVcXHVERDAwLVxcdUREMDhdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzOFtcXHVERDAwLVxcdUREMkNcXHVERDRFXFx1REVDMC1cXHVERUVCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNF18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVERFxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0x0JyxcbiAgICAgICAgJ2FsaWFzJzogJ1RpdGxlY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTAxQzVcXHUwMUM4XFx1MDFDQlxcdTAxRjJcXHUxRjg4LVxcdTFGOEZcXHUxRjk4LVxcdTFGOUZcXHUxRkE4LVxcdTFGQUZcXHUxRkJDXFx1MUZDQ1xcdTFGRkMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ0x1JyxcbiAgICAgICAgJ2FsaWFzJzogJ1VwcGVyY2FzZV9MZXR0ZXInLFxuICAgICAgICAnYm1wJzogJ0EtWlxceEMwLVxceEQ2XFx4RDgtXFx4REVcXHUwMTAwXFx1MDEwMlxcdTAxMDRcXHUwMTA2XFx1MDEwOFxcdTAxMEFcXHUwMTBDXFx1MDEwRVxcdTAxMTBcXHUwMTEyXFx1MDExNFxcdTAxMTZcXHUwMTE4XFx1MDExQVxcdTAxMUNcXHUwMTFFXFx1MDEyMFxcdTAxMjJcXHUwMTI0XFx1MDEyNlxcdTAxMjhcXHUwMTJBXFx1MDEyQ1xcdTAxMkVcXHUwMTMwXFx1MDEzMlxcdTAxMzRcXHUwMTM2XFx1MDEzOVxcdTAxM0JcXHUwMTNEXFx1MDEzRlxcdTAxNDFcXHUwMTQzXFx1MDE0NVxcdTAxNDdcXHUwMTRBXFx1MDE0Q1xcdTAxNEVcXHUwMTUwXFx1MDE1MlxcdTAxNTRcXHUwMTU2XFx1MDE1OFxcdTAxNUFcXHUwMTVDXFx1MDE1RVxcdTAxNjBcXHUwMTYyXFx1MDE2NFxcdTAxNjZcXHUwMTY4XFx1MDE2QVxcdTAxNkNcXHUwMTZFXFx1MDE3MFxcdTAxNzJcXHUwMTc0XFx1MDE3NlxcdTAxNzhcXHUwMTc5XFx1MDE3QlxcdTAxN0RcXHUwMTgxXFx1MDE4MlxcdTAxODRcXHUwMTg2XFx1MDE4N1xcdTAxODktXFx1MDE4QlxcdTAxOEUtXFx1MDE5MVxcdTAxOTNcXHUwMTk0XFx1MDE5Ni1cXHUwMTk4XFx1MDE5Q1xcdTAxOURcXHUwMTlGXFx1MDFBMFxcdTAxQTJcXHUwMUE0XFx1MDFBNlxcdTAxQTdcXHUwMUE5XFx1MDFBQ1xcdTAxQUVcXHUwMUFGXFx1MDFCMS1cXHUwMUIzXFx1MDFCNVxcdTAxQjdcXHUwMUI4XFx1MDFCQ1xcdTAxQzRcXHUwMUM3XFx1MDFDQVxcdTAxQ0RcXHUwMUNGXFx1MDFEMVxcdTAxRDNcXHUwMUQ1XFx1MDFEN1xcdTAxRDlcXHUwMURCXFx1MDFERVxcdTAxRTBcXHUwMUUyXFx1MDFFNFxcdTAxRTZcXHUwMUU4XFx1MDFFQVxcdTAxRUNcXHUwMUVFXFx1MDFGMVxcdTAxRjRcXHUwMUY2LVxcdTAxRjhcXHUwMUZBXFx1MDFGQ1xcdTAxRkVcXHUwMjAwXFx1MDIwMlxcdTAyMDRcXHUwMjA2XFx1MDIwOFxcdTAyMEFcXHUwMjBDXFx1MDIwRVxcdTAyMTBcXHUwMjEyXFx1MDIxNFxcdTAyMTZcXHUwMjE4XFx1MDIxQVxcdTAyMUNcXHUwMjFFXFx1MDIyMFxcdTAyMjJcXHUwMjI0XFx1MDIyNlxcdTAyMjhcXHUwMjJBXFx1MDIyQ1xcdTAyMkVcXHUwMjMwXFx1MDIzMlxcdTAyM0FcXHUwMjNCXFx1MDIzRFxcdTAyM0VcXHUwMjQxXFx1MDI0My1cXHUwMjQ2XFx1MDI0OFxcdTAyNEFcXHUwMjRDXFx1MDI0RVxcdTAzNzBcXHUwMzcyXFx1MDM3NlxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEVcXHUwMzhGXFx1MDM5MS1cXHUwM0ExXFx1MDNBMy1cXHUwM0FCXFx1MDNDRlxcdTAzRDItXFx1MDNENFxcdTAzRDhcXHUwM0RBXFx1MDNEQ1xcdTAzREVcXHUwM0UwXFx1MDNFMlxcdTAzRTRcXHUwM0U2XFx1MDNFOFxcdTAzRUFcXHUwM0VDXFx1MDNFRVxcdTAzRjRcXHUwM0Y3XFx1MDNGOVxcdTAzRkFcXHUwM0ZELVxcdTA0MkZcXHUwNDYwXFx1MDQ2MlxcdTA0NjRcXHUwNDY2XFx1MDQ2OFxcdTA0NkFcXHUwNDZDXFx1MDQ2RVxcdTA0NzBcXHUwNDcyXFx1MDQ3NFxcdTA0NzZcXHUwNDc4XFx1MDQ3QVxcdTA0N0NcXHUwNDdFXFx1MDQ4MFxcdTA0OEFcXHUwNDhDXFx1MDQ4RVxcdTA0OTBcXHUwNDkyXFx1MDQ5NFxcdTA0OTZcXHUwNDk4XFx1MDQ5QVxcdTA0OUNcXHUwNDlFXFx1MDRBMFxcdTA0QTJcXHUwNEE0XFx1MDRBNlxcdTA0QThcXHUwNEFBXFx1MDRBQ1xcdTA0QUVcXHUwNEIwXFx1MDRCMlxcdTA0QjRcXHUwNEI2XFx1MDRCOFxcdTA0QkFcXHUwNEJDXFx1MDRCRVxcdTA0QzBcXHUwNEMxXFx1MDRDM1xcdTA0QzVcXHUwNEM3XFx1MDRDOVxcdTA0Q0JcXHUwNENEXFx1MDREMFxcdTA0RDJcXHUwNEQ0XFx1MDRENlxcdTA0RDhcXHUwNERBXFx1MDREQ1xcdTA0REVcXHUwNEUwXFx1MDRFMlxcdTA0RTRcXHUwNEU2XFx1MDRFOFxcdTA0RUFcXHUwNEVDXFx1MDRFRVxcdTA0RjBcXHUwNEYyXFx1MDRGNFxcdTA0RjZcXHUwNEY4XFx1MDRGQVxcdTA0RkNcXHUwNEZFXFx1MDUwMFxcdTA1MDJcXHUwNTA0XFx1MDUwNlxcdTA1MDhcXHUwNTBBXFx1MDUwQ1xcdTA1MEVcXHUwNTEwXFx1MDUxMlxcdTA1MTRcXHUwNTE2XFx1MDUxOFxcdTA1MUFcXHUwNTFDXFx1MDUxRVxcdTA1MjBcXHUwNTIyXFx1MDUyNFxcdTA1MjZcXHUwNTI4XFx1MDUyQVxcdTA1MkNcXHUwNTJFXFx1MDUzMS1cXHUwNTU2XFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxM0EwLVxcdTEzRjVcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxRTAwXFx1MUUwMlxcdTFFMDRcXHUxRTA2XFx1MUUwOFxcdTFFMEFcXHUxRTBDXFx1MUUwRVxcdTFFMTBcXHUxRTEyXFx1MUUxNFxcdTFFMTZcXHUxRTE4XFx1MUUxQVxcdTFFMUNcXHUxRTFFXFx1MUUyMFxcdTFFMjJcXHUxRTI0XFx1MUUyNlxcdTFFMjhcXHUxRTJBXFx1MUUyQ1xcdTFFMkVcXHUxRTMwXFx1MUUzMlxcdTFFMzRcXHUxRTM2XFx1MUUzOFxcdTFFM0FcXHUxRTNDXFx1MUUzRVxcdTFFNDBcXHUxRTQyXFx1MUU0NFxcdTFFNDZcXHUxRTQ4XFx1MUU0QVxcdTFFNENcXHUxRTRFXFx1MUU1MFxcdTFFNTJcXHUxRTU0XFx1MUU1NlxcdTFFNThcXHUxRTVBXFx1MUU1Q1xcdTFFNUVcXHUxRTYwXFx1MUU2MlxcdTFFNjRcXHUxRTY2XFx1MUU2OFxcdTFFNkFcXHUxRTZDXFx1MUU2RVxcdTFFNzBcXHUxRTcyXFx1MUU3NFxcdTFFNzZcXHUxRTc4XFx1MUU3QVxcdTFFN0NcXHUxRTdFXFx1MUU4MFxcdTFFODJcXHUxRTg0XFx1MUU4NlxcdTFFODhcXHUxRThBXFx1MUU4Q1xcdTFFOEVcXHUxRTkwXFx1MUU5MlxcdTFFOTRcXHUxRTlFXFx1MUVBMFxcdTFFQTJcXHUxRUE0XFx1MUVBNlxcdTFFQThcXHUxRUFBXFx1MUVBQ1xcdTFFQUVcXHUxRUIwXFx1MUVCMlxcdTFFQjRcXHUxRUI2XFx1MUVCOFxcdTFFQkFcXHUxRUJDXFx1MUVCRVxcdTFFQzBcXHUxRUMyXFx1MUVDNFxcdTFFQzZcXHUxRUM4XFx1MUVDQVxcdTFFQ0NcXHUxRUNFXFx1MUVEMFxcdTFFRDJcXHUxRUQ0XFx1MUVENlxcdTFFRDhcXHUxRURBXFx1MUVEQ1xcdTFFREVcXHUxRUUwXFx1MUVFMlxcdTFFRTRcXHUxRUU2XFx1MUVFOFxcdTFFRUFcXHUxRUVDXFx1MUVFRVxcdTFFRjBcXHUxRUYyXFx1MUVGNFxcdTFFRjZcXHUxRUY4XFx1MUVGQVxcdTFFRkNcXHUxRUZFXFx1MUYwOC1cXHUxRjBGXFx1MUYxOC1cXHUxRjFEXFx1MUYyOC1cXHUxRjJGXFx1MUYzOC1cXHUxRjNGXFx1MUY0OC1cXHUxRjREXFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1RlxcdTFGNjgtXFx1MUY2RlxcdTFGQjgtXFx1MUZCQlxcdTFGQzgtXFx1MUZDQlxcdTFGRDgtXFx1MUZEQlxcdTFGRTgtXFx1MUZFQ1xcdTFGRjgtXFx1MUZGQlxcdTIxMDJcXHUyMTA3XFx1MjEwQi1cXHUyMTBEXFx1MjExMC1cXHUyMTEyXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMzAtXFx1MjEzM1xcdTIxM0VcXHUyMTNGXFx1MjE0NVxcdTIxODNcXHUyQzAwLVxcdTJDMkVcXHUyQzYwXFx1MkM2Mi1cXHUyQzY0XFx1MkM2N1xcdTJDNjlcXHUyQzZCXFx1MkM2RC1cXHUyQzcwXFx1MkM3MlxcdTJDNzVcXHUyQzdFLVxcdTJDODBcXHUyQzgyXFx1MkM4NFxcdTJDODZcXHUyQzg4XFx1MkM4QVxcdTJDOENcXHUyQzhFXFx1MkM5MFxcdTJDOTJcXHUyQzk0XFx1MkM5NlxcdTJDOThcXHUyQzlBXFx1MkM5Q1xcdTJDOUVcXHUyQ0EwXFx1MkNBMlxcdTJDQTRcXHUyQ0E2XFx1MkNBOFxcdTJDQUFcXHUyQ0FDXFx1MkNBRVxcdTJDQjBcXHUyQ0IyXFx1MkNCNFxcdTJDQjZcXHUyQ0I4XFx1MkNCQVxcdTJDQkNcXHUyQ0JFXFx1MkNDMFxcdTJDQzJcXHUyQ0M0XFx1MkNDNlxcdTJDQzhcXHUyQ0NBXFx1MkNDQ1xcdTJDQ0VcXHUyQ0QwXFx1MkNEMlxcdTJDRDRcXHUyQ0Q2XFx1MkNEOFxcdTJDREFcXHUyQ0RDXFx1MkNERVxcdTJDRTBcXHUyQ0UyXFx1MkNFQlxcdTJDRURcXHUyQ0YyXFx1QTY0MFxcdUE2NDJcXHVBNjQ0XFx1QTY0NlxcdUE2NDhcXHVBNjRBXFx1QTY0Q1xcdUE2NEVcXHVBNjUwXFx1QTY1MlxcdUE2NTRcXHVBNjU2XFx1QTY1OFxcdUE2NUFcXHVBNjVDXFx1QTY1RVxcdUE2NjBcXHVBNjYyXFx1QTY2NFxcdUE2NjZcXHVBNjY4XFx1QTY2QVxcdUE2NkNcXHVBNjgwXFx1QTY4MlxcdUE2ODRcXHVBNjg2XFx1QTY4OFxcdUE2OEFcXHVBNjhDXFx1QTY4RVxcdUE2OTBcXHVBNjkyXFx1QTY5NFxcdUE2OTZcXHVBNjk4XFx1QTY5QVxcdUE3MjJcXHVBNzI0XFx1QTcyNlxcdUE3MjhcXHVBNzJBXFx1QTcyQ1xcdUE3MkVcXHVBNzMyXFx1QTczNFxcdUE3MzZcXHVBNzM4XFx1QTczQVxcdUE3M0NcXHVBNzNFXFx1QTc0MFxcdUE3NDJcXHVBNzQ0XFx1QTc0NlxcdUE3NDhcXHVBNzRBXFx1QTc0Q1xcdUE3NEVcXHVBNzUwXFx1QTc1MlxcdUE3NTRcXHVBNzU2XFx1QTc1OFxcdUE3NUFcXHVBNzVDXFx1QTc1RVxcdUE3NjBcXHVBNzYyXFx1QTc2NFxcdUE3NjZcXHVBNzY4XFx1QTc2QVxcdUE3NkNcXHVBNzZFXFx1QTc3OVxcdUE3N0JcXHVBNzdEXFx1QTc3RVxcdUE3ODBcXHVBNzgyXFx1QTc4NFxcdUE3ODZcXHVBNzhCXFx1QTc4RFxcdUE3OTBcXHVBNzkyXFx1QTc5NlxcdUE3OThcXHVBNzlBXFx1QTc5Q1xcdUE3OUVcXHVBN0EwXFx1QTdBMlxcdUE3QTRcXHVBN0E2XFx1QTdBOFxcdUE3QUEtXFx1QTdBRVxcdUE3QjAtXFx1QTdCNFxcdUE3QjZcXHVBN0I4XFx1QTdCQVxcdUE3QkNcXHVBN0JFXFx1QTdDMlxcdUE3QzQtXFx1QTdDN1xcdUE3QzlcXHVBN0Y1XFx1RkYyMS1cXHVGRjNBJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAxW1xcdURDMDAtXFx1REMyN1xcdURDQjAtXFx1RENEM118XFx1RDgwM1tcXHVEQzgwLVxcdURDQjJdfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0JGXXxcXHVEODFCW1xcdURFNDAtXFx1REU1Rl18XFx1RDgzNVtcXHVEQzAwLVxcdURDMTlcXHVEQzM0LVxcdURDNERcXHVEQzY4LVxcdURDODFcXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjVcXHVEQ0QwLVxcdURDRTlcXHVERDA0XFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMzhcXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENkMtXFx1REQ4NVxcdUREQTAtXFx1RERCOVxcdURERDQtXFx1RERFRFxcdURFMDgtXFx1REUyMVxcdURFM0MtXFx1REU1NVxcdURFNzAtXFx1REU4OVxcdURFQTgtXFx1REVDMFxcdURFRTItXFx1REVGQVxcdURGMUMtXFx1REYzNFxcdURGNTYtXFx1REY2RVxcdURGOTAtXFx1REZBOFxcdURGQ0FdfFxcdUQ4M0FbXFx1REQwMC1cXHVERDIxXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTScsXG4gICAgICAgICdhbGlhcyc6ICdNYXJrJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUwMzAwLVxcdTAzNkZcXHUwNDgzLVxcdTA0ODlcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNjEwLVxcdTA2MUFcXHUwNjRCLVxcdTA2NUZcXHUwNjcwXFx1MDZENi1cXHUwNkRDXFx1MDZERi1cXHUwNkU0XFx1MDZFN1xcdTA2RThcXHUwNkVBLVxcdTA2RURcXHUwNzExXFx1MDczMC1cXHUwNzRBXFx1MDdBNi1cXHUwN0IwXFx1MDdFQi1cXHUwN0YzXFx1MDdGRFxcdTA4MTYtXFx1MDgxOVxcdTA4MUItXFx1MDgyM1xcdTA4MjUtXFx1MDgyN1xcdTA4MjktXFx1MDgyRFxcdTA4NTktXFx1MDg1QlxcdTA4RDMtXFx1MDhFMVxcdTA4RTMtXFx1MDkwM1xcdTA5M0EtXFx1MDkzQ1xcdTA5M0UtXFx1MDk0RlxcdTA5NTEtXFx1MDk1N1xcdTA5NjJcXHUwOTYzXFx1MDk4MS1cXHUwOTgzXFx1MDlCQ1xcdTA5QkUtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNEXFx1MDlEN1xcdTA5RTJcXHUwOUUzXFx1MDlGRVxcdTBBMDEtXFx1MEEwM1xcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTcwXFx1MEE3MVxcdTBBNzVcXHUwQTgxLVxcdTBBODNcXHUwQUJDXFx1MEFCRS1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFFMlxcdTBBRTNcXHUwQUZBLVxcdTBBRkZcXHUwQjAxLVxcdTBCMDNcXHUwQjNDXFx1MEIzRS1cXHUwQjQ0XFx1MEI0N1xcdTBCNDhcXHUwQjRCLVxcdTBCNERcXHUwQjU1LVxcdTBCNTdcXHUwQjYyXFx1MEI2M1xcdTBCODJcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQ3XFx1MEMwMC1cXHUwQzA0XFx1MEMzRS1cXHUwQzQ0XFx1MEM0Ni1cXHUwQzQ4XFx1MEM0QS1cXHUwQzREXFx1MEM1NVxcdTBDNTZcXHUwQzYyXFx1MEM2M1xcdTBDODEtXFx1MEM4M1xcdTBDQkNcXHUwQ0JFLVxcdTBDQzRcXHUwQ0M2LVxcdTBDQzhcXHUwQ0NBLVxcdTBDQ0RcXHUwQ0Q1XFx1MENENlxcdTBDRTJcXHUwQ0UzXFx1MEQwMC1cXHUwRDAzXFx1MEQzQlxcdTBEM0NcXHUwRDNFLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENERcXHUwRDU3XFx1MEQ2MlxcdTBENjNcXHUwRDgxLVxcdTBEODNcXHUwRENBXFx1MERDRi1cXHUwREQ0XFx1MERENlxcdTBERDgtXFx1MERERlxcdTBERjJcXHUwREYzXFx1MEUzMVxcdTBFMzQtXFx1MEUzQVxcdTBFNDctXFx1MEU0RVxcdTBFQjFcXHUwRUI0LVxcdTBFQkNcXHUwRUM4LVxcdTBFQ0RcXHUwRjE4XFx1MEYxOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0VcXHUwRjNGXFx1MEY3MS1cXHUwRjg0XFx1MEY4NlxcdTBGODdcXHUwRjhELVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAyQi1cXHUxMDNFXFx1MTA1Ni1cXHUxMDU5XFx1MTA1RS1cXHUxMDYwXFx1MTA2Mi1cXHUxMDY0XFx1MTA2Ny1cXHUxMDZEXFx1MTA3MS1cXHUxMDc0XFx1MTA4Mi1cXHUxMDhEXFx1MTA4RlxcdTEwOUEtXFx1MTA5RFxcdTEzNUQtXFx1MTM1RlxcdTE3MTItXFx1MTcxNFxcdTE3MzItXFx1MTczNFxcdTE3NTJcXHUxNzUzXFx1MTc3MlxcdTE3NzNcXHUxN0I0LVxcdTE3RDNcXHUxN0REXFx1MTgwQi1cXHUxODBEXFx1MTg4NVxcdTE4ODZcXHUxOEE5XFx1MTkyMC1cXHUxOTJCXFx1MTkzMC1cXHUxOTNCXFx1MUExNy1cXHUxQTFCXFx1MUE1NS1cXHUxQTVFXFx1MUE2MC1cXHUxQTdDXFx1MUE3RlxcdTFBQjAtXFx1MUFDMFxcdTFCMDAtXFx1MUIwNFxcdTFCMzQtXFx1MUI0NFxcdTFCNkItXFx1MUI3M1xcdTFCODAtXFx1MUI4MlxcdTFCQTEtXFx1MUJBRFxcdTFCRTYtXFx1MUJGM1xcdTFDMjQtXFx1MUMzN1xcdTFDRDAtXFx1MUNEMlxcdTFDRDQtXFx1MUNFOFxcdTFDRURcXHUxQ0Y0XFx1MUNGNy1cXHUxQ0Y5XFx1MURDMC1cXHUxREY5XFx1MURGQi1cXHUxREZGXFx1MjBEMC1cXHUyMEYwXFx1MkNFRi1cXHUyQ0YxXFx1MkQ3RlxcdTJERTAtXFx1MkRGRlxcdTMwMkEtXFx1MzAyRlxcdTMwOTlcXHUzMDlBXFx1QTY2Ri1cXHVBNjcyXFx1QTY3NC1cXHVBNjdEXFx1QTY5RVxcdUE2OUZcXHVBNkYwXFx1QTZGMVxcdUE4MDJcXHVBODA2XFx1QTgwQlxcdUE4MjMtXFx1QTgyN1xcdUE4MkNcXHVBODgwXFx1QTg4MVxcdUE4QjQtXFx1QThDNVxcdUE4RTAtXFx1QThGMVxcdUE4RkZcXHVBOTI2LVxcdUE5MkRcXHVBOTQ3LVxcdUE5NTNcXHVBOTgwLVxcdUE5ODNcXHVBOUIzLVxcdUE5QzBcXHVBOUU1XFx1QUEyOS1cXHVBQTM2XFx1QUE0M1xcdUFBNENcXHVBQTREXFx1QUE3Qi1cXHVBQTdEXFx1QUFCMFxcdUFBQjItXFx1QUFCNFxcdUFBQjdcXHVBQUI4XFx1QUFCRVxcdUFBQkZcXHVBQUMxXFx1QUFFQi1cXHVBQUVGXFx1QUFGNVxcdUFBRjZcXHVBQkUzLVxcdUFCRUFcXHVBQkVDXFx1QUJFRFxcdUZCMUVcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkYnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1RERGRFxcdURFRTBcXHVERjc2LVxcdURGN0FdfFxcdUQ4MDJbXFx1REUwMS1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMEZcXHVERTM4LVxcdURFM0FcXHVERTNGXFx1REVFNVxcdURFRTZdfFxcdUQ4MDNbXFx1REQyNC1cXHVERDI3XFx1REVBQlxcdURFQUNcXHVERjQ2LVxcdURGNTBdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzAyXFx1REMzOC1cXHVEQzQ2XFx1REM3Ri1cXHVEQzgyXFx1RENCMC1cXHVEQ0JBXFx1REQwMC1cXHVERDAyXFx1REQyNy1cXHVERDM0XFx1REQ0NVxcdURENDZcXHVERDczXFx1REQ4MC1cXHVERDgyXFx1RERCMy1cXHVEREMwXFx1RERDOS1cXHVERENDXFx1RERDRVxcdUREQ0ZcXHVERTJDLVxcdURFMzdcXHVERTNFXFx1REVERi1cXHVERUVBXFx1REYwMC1cXHVERjAzXFx1REYzQlxcdURGM0NcXHVERjNFLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzM1LVxcdURDNDZcXHVEQzVFXFx1RENCMC1cXHVEQ0MzXFx1RERBRi1cXHVEREI1XFx1RERCOC1cXHVEREMwXFx1REREQ1xcdURERERcXHVERTMwLVxcdURFNDBcXHVERUFCLVxcdURFQjdcXHVERjFELVxcdURGMkJdfFxcdUQ4MDZbXFx1REMyQy1cXHVEQzNBXFx1REQzMC1cXHVERDM1XFx1REQzN1xcdUREMzhcXHVERDNCLVxcdUREM0VcXHVERDQwXFx1REQ0MlxcdURENDNcXHVEREQxLVxcdURERDdcXHVERERBLVxcdURERTBcXHVEREU0XFx1REUwMS1cXHVERTBBXFx1REUzMy1cXHVERTM5XFx1REUzQi1cXHVERTNFXFx1REU0N1xcdURFNTEtXFx1REU1QlxcdURFOEEtXFx1REU5OV18XFx1RDgwN1tcXHVEQzJGLVxcdURDMzZcXHVEQzM4LVxcdURDM0ZcXHVEQzkyLVxcdURDQTdcXHVEQ0E5LVxcdURDQjZcXHVERDMxLVxcdUREMzZcXHVERDNBXFx1REQzQ1xcdUREM0RcXHVERDNGLVxcdURENDVcXHVERDQ3XFx1REQ4QS1cXHVERDhFXFx1REQ5MFxcdUREOTFcXHVERDkzLVxcdUREOTdcXHVERUYzLVxcdURFRjZdfFxcdUQ4MUFbXFx1REVGMC1cXHVERUY0XFx1REYzMC1cXHVERjM2XXxcXHVEODFCW1xcdURGNEZcXHVERjUxLVxcdURGODdcXHVERjhGLVxcdURGOTJcXHVERkU0XFx1REZGMFxcdURGRjFdfFxcdUQ4MkZbXFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2NS1cXHVERDY5XFx1REQ2RC1cXHVERDcyXFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNYycsXG4gICAgICAgICdhbGlhcyc6ICdTcGFjaW5nX01hcmsnLFxuICAgICAgICAnYm1wJzogJ1xcdTA5MDNcXHUwOTNCXFx1MDkzRS1cXHUwOTQwXFx1MDk0OS1cXHUwOTRDXFx1MDk0RVxcdTA5NEZcXHUwOTgyXFx1MDk4M1xcdTA5QkUtXFx1MDlDMFxcdTA5QzdcXHUwOUM4XFx1MDlDQlxcdTA5Q0NcXHUwOUQ3XFx1MEEwM1xcdTBBM0UtXFx1MEE0MFxcdTBBODNcXHUwQUJFLVxcdTBBQzBcXHUwQUM5XFx1MEFDQlxcdTBBQ0NcXHUwQjAyXFx1MEIwM1xcdTBCM0VcXHUwQjQwXFx1MEI0N1xcdTBCNDhcXHUwQjRCXFx1MEI0Q1xcdTBCNTdcXHUwQkJFXFx1MEJCRlxcdTBCQzFcXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNDXFx1MEJEN1xcdTBDMDEtXFx1MEMwM1xcdTBDNDEtXFx1MEM0NFxcdTBDODJcXHUwQzgzXFx1MENCRVxcdTBDQzAtXFx1MENDNFxcdTBDQzdcXHUwQ0M4XFx1MENDQVxcdTBDQ0JcXHUwQ0Q1XFx1MENENlxcdTBEMDJcXHUwRDAzXFx1MEQzRS1cXHUwRDQwXFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRDXFx1MEQ1N1xcdTBEODJcXHUwRDgzXFx1MERDRi1cXHUwREQxXFx1MEREOC1cXHUwRERGXFx1MERGMlxcdTBERjNcXHUwRjNFXFx1MEYzRlxcdTBGN0ZcXHUxMDJCXFx1MTAyQ1xcdTEwMzFcXHUxMDM4XFx1MTAzQlxcdTEwM0NcXHUxMDU2XFx1MTA1N1xcdTEwNjItXFx1MTA2NFxcdTEwNjctXFx1MTA2RFxcdTEwODNcXHUxMDg0XFx1MTA4Ny1cXHUxMDhDXFx1MTA4RlxcdTEwOUEtXFx1MTA5Q1xcdTE3QjZcXHUxN0JFLVxcdTE3QzVcXHUxN0M3XFx1MTdDOFxcdTE5MjMtXFx1MTkyNlxcdTE5MjktXFx1MTkyQlxcdTE5MzBcXHUxOTMxXFx1MTkzMy1cXHUxOTM4XFx1MUExOVxcdTFBMUFcXHUxQTU1XFx1MUE1N1xcdTFBNjFcXHUxQTYzXFx1MUE2NFxcdTFBNkQtXFx1MUE3MlxcdTFCMDRcXHUxQjM1XFx1MUIzQlxcdTFCM0QtXFx1MUI0MVxcdTFCNDNcXHUxQjQ0XFx1MUI4MlxcdTFCQTFcXHUxQkE2XFx1MUJBN1xcdTFCQUFcXHUxQkU3XFx1MUJFQS1cXHUxQkVDXFx1MUJFRVxcdTFCRjJcXHUxQkYzXFx1MUMyNC1cXHUxQzJCXFx1MUMzNFxcdTFDMzVcXHUxQ0UxXFx1MUNGN1xcdTMwMkVcXHUzMDJGXFx1QTgyM1xcdUE4MjRcXHVBODI3XFx1QTg4MFxcdUE4ODFcXHVBOEI0LVxcdUE4QzNcXHVBOTUyXFx1QTk1M1xcdUE5ODNcXHVBOUI0XFx1QTlCNVxcdUE5QkFcXHVBOUJCXFx1QTlCRS1cXHVBOUMwXFx1QUEyRlxcdUFBMzBcXHVBQTMzXFx1QUEzNFxcdUFBNERcXHVBQTdCXFx1QUE3RFxcdUFBRUJcXHVBQUVFXFx1QUFFRlxcdUFBRjVcXHVBQkUzXFx1QUJFNFxcdUFCRTZcXHVBQkU3XFx1QUJFOVxcdUFCRUFcXHVBQkVDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODA0W1xcdURDMDBcXHVEQzAyXFx1REM4MlxcdURDQjAtXFx1RENCMlxcdURDQjdcXHVEQ0I4XFx1REQyQ1xcdURENDVcXHVERDQ2XFx1REQ4MlxcdUREQjMtXFx1RERCNVxcdUREQkZcXHVEREMwXFx1RERDRVxcdURFMkMtXFx1REUyRVxcdURFMzJcXHVERTMzXFx1REUzNVxcdURFRTAtXFx1REVFMlxcdURGMDJcXHVERjAzXFx1REYzRVxcdURGM0ZcXHVERjQxLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTdcXHVERjYyXFx1REY2M118XFx1RDgwNVtcXHVEQzM1LVxcdURDMzdcXHVEQzQwXFx1REM0MVxcdURDNDVcXHVEQ0IwLVxcdURDQjJcXHVEQ0I5XFx1RENCQi1cXHVEQ0JFXFx1RENDMVxcdUREQUYtXFx1RERCMVxcdUREQjgtXFx1RERCQlxcdUREQkVcXHVERTMwLVxcdURFMzJcXHVERTNCXFx1REUzQ1xcdURFM0VcXHVERUFDXFx1REVBRVxcdURFQUZcXHVERUI2XFx1REYyMFxcdURGMjFcXHVERjI2XXxcXHVEODA2W1xcdURDMkMtXFx1REMyRVxcdURDMzhcXHVERDMwLVxcdUREMzVcXHVERDM3XFx1REQzOFxcdUREM0RcXHVERDQwXFx1REQ0MlxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERlxcdURERTRcXHVERTM5XFx1REU1N1xcdURFNThcXHVERTk3XXxcXHVEODA3W1xcdURDMkZcXHVEQzNFXFx1RENBOVxcdURDQjFcXHVEQ0I0XFx1REQ4QS1cXHVERDhFXFx1REQ5M1xcdUREOTRcXHVERDk2XFx1REVGNVxcdURFRjZdfFxcdUQ4MUJbXFx1REY1MS1cXHVERjg3XFx1REZGMFxcdURGRjFdfFxcdUQ4MzRbXFx1REQ2NVxcdURENjZcXHVERDZELVxcdURENzJdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNZScsXG4gICAgICAgICdhbGlhcyc6ICdFbmNsb3NpbmdfTWFyaycsXG4gICAgICAgICdibXAnOiAnXFx1MDQ4OFxcdTA0ODlcXHUxQUJFXFx1MjBERC1cXHUyMEUwXFx1MjBFMi1cXHUyMEU0XFx1QTY3MC1cXHVBNjcyJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdNbicsXG4gICAgICAgICdhbGlhcyc6ICdOb25zcGFjaW5nX01hcmsnLFxuICAgICAgICAnYm1wJzogJ1xcdTAzMDAtXFx1MDM2RlxcdTA0ODMtXFx1MDQ4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA2MTAtXFx1MDYxQVxcdTA2NEItXFx1MDY1RlxcdTA2NzBcXHUwNkQ2LVxcdTA2RENcXHUwNkRGLVxcdTA2RTRcXHUwNkU3XFx1MDZFOFxcdTA2RUEtXFx1MDZFRFxcdTA3MTFcXHUwNzMwLVxcdTA3NEFcXHUwN0E2LVxcdTA3QjBcXHUwN0VCLVxcdTA3RjNcXHUwN0ZEXFx1MDgxNi1cXHUwODE5XFx1MDgxQi1cXHUwODIzXFx1MDgyNS1cXHUwODI3XFx1MDgyOS1cXHUwODJEXFx1MDg1OS1cXHUwODVCXFx1MDhEMy1cXHUwOEUxXFx1MDhFMy1cXHUwOTAyXFx1MDkzQVxcdTA5M0NcXHUwOTQxLVxcdTA5NDhcXHUwOTREXFx1MDk1MS1cXHUwOTU3XFx1MDk2MlxcdTA5NjNcXHUwOTgxXFx1MDlCQ1xcdTA5QzEtXFx1MDlDNFxcdTA5Q0RcXHUwOUUyXFx1MDlFM1xcdTA5RkVcXHUwQTAxXFx1MEEwMlxcdTBBM0NcXHUwQTQxXFx1MEE0MlxcdTBBNDdcXHUwQTQ4XFx1MEE0Qi1cXHUwQTREXFx1MEE1MVxcdTBBNzBcXHUwQTcxXFx1MEE3NVxcdTBBODFcXHUwQTgyXFx1MEFCQ1xcdTBBQzEtXFx1MEFDNVxcdTBBQzdcXHUwQUM4XFx1MEFDRFxcdTBBRTJcXHUwQUUzXFx1MEFGQS1cXHUwQUZGXFx1MEIwMVxcdTBCM0NcXHUwQjNGXFx1MEI0MS1cXHUwQjQ0XFx1MEI0RFxcdTBCNTVcXHUwQjU2XFx1MEI2MlxcdTBCNjNcXHUwQjgyXFx1MEJDMFxcdTBCQ0RcXHUwQzAwXFx1MEMwNFxcdTBDM0UtXFx1MEM0MFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM2MlxcdTBDNjNcXHUwQzgxXFx1MENCQ1xcdTBDQkZcXHUwQ0M2XFx1MENDQ1xcdTBDQ0RcXHUwQ0UyXFx1MENFM1xcdTBEMDBcXHUwRDAxXFx1MEQzQlxcdTBEM0NcXHUwRDQxLVxcdTBENDRcXHUwRDREXFx1MEQ2MlxcdTBENjNcXHUwRDgxXFx1MERDQVxcdTBERDItXFx1MERENFxcdTBERDZcXHUwRTMxXFx1MEUzNC1cXHUwRTNBXFx1MEU0Ny1cXHUwRTRFXFx1MEVCMVxcdTBFQjQtXFx1MEVCQ1xcdTBFQzgtXFx1MEVDRFxcdTBGMThcXHUwRjE5XFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEY3MS1cXHUwRjdFXFx1MEY4MC1cXHUwRjg0XFx1MEY4NlxcdTBGODdcXHUwRjhELVxcdTBGOTdcXHUwRjk5LVxcdTBGQkNcXHUwRkM2XFx1MTAyRC1cXHUxMDMwXFx1MTAzMi1cXHUxMDM3XFx1MTAzOVxcdTEwM0FcXHUxMDNEXFx1MTAzRVxcdTEwNThcXHUxMDU5XFx1MTA1RS1cXHUxMDYwXFx1MTA3MS1cXHUxMDc0XFx1MTA4MlxcdTEwODVcXHUxMDg2XFx1MTA4RFxcdTEwOURcXHUxMzVELVxcdTEzNUZcXHUxNzEyLVxcdTE3MTRcXHUxNzMyLVxcdTE3MzRcXHUxNzUyXFx1MTc1M1xcdTE3NzJcXHUxNzczXFx1MTdCNFxcdTE3QjVcXHUxN0I3LVxcdTE3QkRcXHUxN0M2XFx1MTdDOS1cXHUxN0QzXFx1MTdERFxcdTE4MEItXFx1MTgwRFxcdTE4ODVcXHUxODg2XFx1MThBOVxcdTE5MjAtXFx1MTkyMlxcdTE5MjdcXHUxOTI4XFx1MTkzMlxcdTE5MzktXFx1MTkzQlxcdTFBMTdcXHUxQTE4XFx1MUExQlxcdTFBNTZcXHUxQTU4LVxcdTFBNUVcXHUxQTYwXFx1MUE2MlxcdTFBNjUtXFx1MUE2Q1xcdTFBNzMtXFx1MUE3Q1xcdTFBN0ZcXHUxQUIwLVxcdTFBQkRcXHUxQUJGXFx1MUFDMFxcdTFCMDAtXFx1MUIwM1xcdTFCMzRcXHUxQjM2LVxcdTFCM0FcXHUxQjNDXFx1MUI0MlxcdTFCNkItXFx1MUI3M1xcdTFCODBcXHUxQjgxXFx1MUJBMi1cXHUxQkE1XFx1MUJBOFxcdTFCQTlcXHUxQkFCLVxcdTFCQURcXHUxQkU2XFx1MUJFOFxcdTFCRTlcXHUxQkVEXFx1MUJFRi1cXHUxQkYxXFx1MUMyQy1cXHUxQzMzXFx1MUMzNlxcdTFDMzdcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRTBcXHUxQ0UyLVxcdTFDRThcXHUxQ0VEXFx1MUNGNFxcdTFDRjhcXHUxQ0Y5XFx1MURDMC1cXHUxREY5XFx1MURGQi1cXHUxREZGXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTJDRUYtXFx1MkNGMVxcdTJEN0ZcXHUyREUwLVxcdTJERkZcXHUzMDJBLVxcdTMwMkRcXHUzMDk5XFx1MzA5QVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjlFXFx1QTY5RlxcdUE2RjBcXHVBNkYxXFx1QTgwMlxcdUE4MDZcXHVBODBCXFx1QTgyNVxcdUE4MjZcXHVBODJDXFx1QThDNFxcdUE4QzVcXHVBOEUwLVxcdUE4RjFcXHVBOEZGXFx1QTkyNi1cXHVBOTJEXFx1QTk0Ny1cXHVBOTUxXFx1QTk4MC1cXHVBOTgyXFx1QTlCM1xcdUE5QjYtXFx1QTlCOVxcdUE5QkNcXHVBOUJEXFx1QTlFNVxcdUFBMjktXFx1QUEyRVxcdUFBMzFcXHVBQTMyXFx1QUEzNVxcdUFBMzZcXHVBQTQzXFx1QUE0Q1xcdUFBN0NcXHVBQUIwXFx1QUFCMi1cXHVBQUI0XFx1QUFCN1xcdUFBQjhcXHVBQUJFXFx1QUFCRlxcdUFBQzFcXHVBQUVDXFx1QUFFRFxcdUFBRjZcXHVBQkU1XFx1QUJFOFxcdUFCRURcXHVGQjFFXFx1RkUwMC1cXHVGRTBGXFx1RkUyMC1cXHVGRTJGJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAwW1xcdURERkRcXHVERUUwXFx1REY3Ni1cXHVERjdBXXxcXHVEODAyW1xcdURFMDEtXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTBGXFx1REUzOC1cXHVERTNBXFx1REUzRlxcdURFRTVcXHVERUU2XXxcXHVEODAzW1xcdUREMjQtXFx1REQyN1xcdURFQUJcXHVERUFDXFx1REY0Ni1cXHVERjUwXXxcXHVEODA0W1xcdURDMDFcXHVEQzM4LVxcdURDNDZcXHVEQzdGLVxcdURDODFcXHVEQ0IzLVxcdURDQjZcXHVEQ0I5XFx1RENCQVxcdUREMDAtXFx1REQwMlxcdUREMjctXFx1REQyQlxcdUREMkQtXFx1REQzNFxcdURENzNcXHVERDgwXFx1REQ4MVxcdUREQjYtXFx1RERCRVxcdUREQzktXFx1RERDQ1xcdUREQ0ZcXHVERTJGLVxcdURFMzFcXHVERTM0XFx1REUzNlxcdURFMzdcXHVERTNFXFx1REVERlxcdURFRTMtXFx1REVFQVxcdURGMDBcXHVERjAxXFx1REYzQlxcdURGM0NcXHVERjQwXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDMzgtXFx1REMzRlxcdURDNDItXFx1REM0NFxcdURDNDZcXHVEQzVFXFx1RENCMy1cXHVEQ0I4XFx1RENCQVxcdURDQkZcXHVEQ0MwXFx1RENDMlxcdURDQzNcXHVEREIyLVxcdUREQjVcXHVEREJDXFx1RERCRFxcdUREQkZcXHVEREMwXFx1REREQ1xcdURERERcXHVERTMzLVxcdURFM0FcXHVERTNEXFx1REUzRlxcdURFNDBcXHVERUFCXFx1REVBRFxcdURFQjAtXFx1REVCNVxcdURFQjdcXHVERjFELVxcdURGMUZcXHVERjIyLVxcdURGMjVcXHVERjI3LVxcdURGMkJdfFxcdUQ4MDZbXFx1REMyRi1cXHVEQzM3XFx1REMzOVxcdURDM0FcXHVERDNCXFx1REQzQ1xcdUREM0VcXHVERDQzXFx1RERENC1cXHVEREQ3XFx1REREQVxcdUREREJcXHVEREUwXFx1REUwMS1cXHVERTBBXFx1REUzMy1cXHVERTM4XFx1REUzQi1cXHVERTNFXFx1REU0N1xcdURFNTEtXFx1REU1NlxcdURFNTktXFx1REU1QlxcdURFOEEtXFx1REU5NlxcdURFOThcXHVERTk5XXxcXHVEODA3W1xcdURDMzAtXFx1REMzNlxcdURDMzgtXFx1REMzRFxcdURDM0ZcXHVEQzkyLVxcdURDQTdcXHVEQ0FBLVxcdURDQjBcXHVEQ0IyXFx1RENCM1xcdURDQjVcXHVEQ0I2XFx1REQzMS1cXHVERDM2XFx1REQzQVxcdUREM0NcXHVERDNEXFx1REQzRi1cXHVERDQ1XFx1REQ0N1xcdUREOTBcXHVERDkxXFx1REQ5NVxcdUREOTdcXHVERUYzXFx1REVGNF18XFx1RDgxQVtcXHVERUYwLVxcdURFRjRcXHVERjMwLVxcdURGMzZdfFxcdUQ4MUJbXFx1REY0RlxcdURGOEYtXFx1REY5MlxcdURGRTRdfFxcdUQ4MkZbXFx1REM5RFxcdURDOUVdfFxcdUQ4MzRbXFx1REQ2Ny1cXHVERDY5XFx1REQ3Qi1cXHVERDgyXFx1REQ4NS1cXHVERDhCXFx1RERBQS1cXHVEREFEXFx1REU0Mi1cXHVERTQ0XXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQzMC1cXHVERDM2XFx1REVFQy1cXHVERUVGXXxcXHVEODNBW1xcdURDRDAtXFx1RENENlxcdURENDQtXFx1REQ0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdOJyxcbiAgICAgICAgJ2FsaWFzJzogJ051bWJlcicsXG4gICAgICAgICdibXAnOiAnMC05XFx4QjJcXHhCM1xceEI5XFx4QkMtXFx4QkVcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwOUY0LVxcdTA5RjlcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQjcyLVxcdTBCNzdcXHUwQkU2LVxcdTBCRjJcXHUwQzY2LVxcdTBDNkZcXHUwQzc4LVxcdTBDN0VcXHUwQ0U2LVxcdTBDRUZcXHUwRDU4LVxcdTBENUVcXHUwRDY2LVxcdTBENzhcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMzNcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxMzY5LVxcdTEzN0NcXHUxNkVFLVxcdTE2RjBcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5REFcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTgyXFx1MjE4NS1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkNGRFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBNjIwLVxcdUE2MjlcXHVBNkU2LVxcdUE2RUZcXHVBODMwLVxcdUE4MzVcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTknLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ0MC1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNcXHVERjQxXFx1REY0QVxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQ0EwLVxcdURDQTldfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERDMwLVxcdUREMzlcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzZGXFx1RENGMC1cXHVEQ0Y5XFx1REQzNi1cXHVERDNGXFx1REREMC1cXHVEREQ5XFx1RERFMS1cXHVEREY0XFx1REVGMC1cXHVERUY5XXxcXHVEODA1W1xcdURDNTAtXFx1REM1OVxcdURDRDAtXFx1RENEOVxcdURFNTAtXFx1REU1OVxcdURFQzAtXFx1REVDOVxcdURGMzAtXFx1REYzQl18XFx1RDgwNltcXHVEQ0UwLVxcdURDRjJcXHVERDUwLVxcdURENTldfFxcdUQ4MDdbXFx1REM1MC1cXHVEQzZDXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE5XFx1REZDMC1cXHVERkQ0XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18XFx1RDgxQVtcXHVERTYwLVxcdURFNjlcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFdfFxcdUQ4MUJbXFx1REU4MC1cXHVERTk2XXxcXHVEODM0W1xcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVERkNFLVxcdURGRkZdfFxcdUQ4MzhbXFx1REQ0MC1cXHVERDQ5XFx1REVGMC1cXHVERUY5XXxcXHVEODNBW1xcdURDQzctXFx1RENDRlxcdURENTAtXFx1REQ1OV18XFx1RDgzQltcXHVEQzcxLVxcdURDQUJcXHVEQ0FELVxcdURDQUZcXHVEQ0IxLVxcdURDQjRcXHVERDAxLVxcdUREMkRcXHVERDJGLVxcdUREM0RdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ05kJyxcbiAgICAgICAgJ2FsaWFzJzogJ0RlY2ltYWxfTnVtYmVyJyxcbiAgICAgICAgJ2JtcCc6ICcwLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQkU2LVxcdTBCRUZcXHUwQzY2LVxcdTBDNkZcXHUwQ0U2LVxcdTBDRUZcXHUwRDY2LVxcdTBENkZcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMjlcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxN0UwLVxcdTE3RTlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5RDlcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHVBNjIwLVxcdUE2MjlcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTknLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDFbXFx1RENBMC1cXHVEQ0E5XXxcXHVEODAzW1xcdUREMzAtXFx1REQzOV18XFx1RDgwNFtcXHVEQzY2LVxcdURDNkZcXHVEQ0YwLVxcdURDRjlcXHVERDM2LVxcdUREM0ZcXHVEREQwLVxcdURERDlcXHVERUYwLVxcdURFRjldfFxcdUQ4MDVbXFx1REM1MC1cXHVEQzU5XFx1RENEMC1cXHVEQ0Q5XFx1REU1MC1cXHVERTU5XFx1REVDMC1cXHVERUM5XFx1REYzMC1cXHVERjM5XXxcXHVEODA2W1xcdURDRTAtXFx1RENFOVxcdURENTAtXFx1REQ1OV18XFx1RDgwN1tcXHVEQzUwLVxcdURDNTlcXHVERDUwLVxcdURENTlcXHVEREEwLVxcdUREQTldfFxcdUQ4MUFbXFx1REU2MC1cXHVERTY5XFx1REY1MC1cXHVERjU5XXxcXHVEODM1W1xcdURGQ0UtXFx1REZGRl18XFx1RDgzOFtcXHVERDQwLVxcdURENDlcXHVERUYwLVxcdURFRjldfFxcdUQ4M0FbXFx1REQ1MC1cXHVERDU5XXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ05sJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xldHRlcl9OdW1iZXInLFxuICAgICAgICAnYm1wJzogJ1xcdTE2RUUtXFx1MTZGMFxcdTIxNjAtXFx1MjE4MlxcdTIxODUtXFx1MjE4OFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHVBNkU2LVxcdUE2RUYnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQ0MC1cXHVERDc0XFx1REY0MVxcdURGNEFcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnTm8nLFxuICAgICAgICAnYWxpYXMnOiAnT3RoZXJfTnVtYmVyJyxcbiAgICAgICAgJ2JtcCc6ICdcXHhCMlxceEIzXFx4QjlcXHhCQy1cXHhCRVxcdTA5RjQtXFx1MDlGOVxcdTBCNzItXFx1MEI3N1xcdTBCRjAtXFx1MEJGMlxcdTBDNzgtXFx1MEM3RVxcdTBENTgtXFx1MEQ1RVxcdTBENzAtXFx1MEQ3OFxcdTBGMkEtXFx1MEYzM1xcdTEzNjktXFx1MTM3Q1xcdTE3RjAtXFx1MTdGOVxcdTE5REFcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTVGXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDRkRcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBODMwLVxcdUE4MzUnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ3NS1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNdfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzY1XFx1RERFMS1cXHVEREY0XXxcXHVEODA1W1xcdURGM0FcXHVERjNCXXxcXHVEODA2W1xcdURDRUEtXFx1RENGMl18XFx1RDgwN1tcXHVEQzVBLVxcdURDNkNcXHVERkMwLVxcdURGRDRdfFxcdUQ4MUFbXFx1REY1Qi1cXHVERjYxXXxcXHVEODFCW1xcdURFODAtXFx1REU5Nl18XFx1RDgzNFtcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4M0FbXFx1RENDNy1cXHVEQ0NGXXxcXHVEODNCW1xcdURDNzEtXFx1RENBQlxcdURDQUQtXFx1RENBRlxcdURDQjEtXFx1RENCNFxcdUREMDEtXFx1REQyRFxcdUREMkYtXFx1REQzRF18XFx1RDgzQ1tcXHVERDAwLVxcdUREMENdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQJyxcbiAgICAgICAgJ2FsaWFzJzogJ1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICchLSMlLVxcXFwqLC1cXFxcLzo7XFxcXD9AXFxcXFstXFxcXF1fXFxcXHtcXFxcfVxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNEZcXHUyRTUyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NScsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURFQURcXHVERjU1LVxcdURGNTldfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOFxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQzRCLVxcdURDNEZcXHVEQzVBXFx1REM1QlxcdURDNURcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REU2MC1cXHVERTZDXFx1REYzQy1cXHVERjNFXXxcXHVEODA2W1xcdURDM0JcXHVERDQ0LVxcdURENDZcXHVEREUyXFx1REUzRi1cXHVERTQ2XFx1REU5QS1cXHVERTlDXFx1REU5RS1cXHVERUEyXXxcXHVEODA3W1xcdURDNDEtXFx1REM0NVxcdURDNzBcXHVEQzcxXFx1REVGN1xcdURFRjhcXHVERkZGXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODFCW1xcdURFOTctXFx1REU5QVxcdURGRTJdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXXxcXHVEODNBW1xcdURENUVcXHVERDVGXSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGMnLFxuICAgICAgICAnYWxpYXMnOiAnQ29ubmVjdG9yX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdfXFx1MjAzRlxcdTIwNDBcXHUyMDU0XFx1RkUzM1xcdUZFMzRcXHVGRTRELVxcdUZFNEZcXHVGRjNGJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQZCcsXG4gICAgICAgICdhbGlhcyc6ICdEYXNoX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcLVxcdTA1OEFcXHUwNUJFXFx1MTQwMFxcdTE4MDZcXHUyMDEwLVxcdTIwMTVcXHUyRTE3XFx1MkUxQVxcdTJFM0FcXHUyRTNCXFx1MkU0MFxcdTMwMUNcXHUzMDMwXFx1MzBBMFxcdUZFMzFcXHVGRTMyXFx1RkU1OFxcdUZFNjNcXHVGRjBEJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODAzXFx1REVBRCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGUnLFxuICAgICAgICAnYWxpYXMnOiAnQ2xvc2VfUHVuY3R1YXRpb24nLFxuICAgICAgICAnYm1wJzogJ1xcXFwpXFxcXF1cXFxcfVxcdTBGM0JcXHUwRjNEXFx1MTY5Q1xcdTIwNDZcXHUyMDdFXFx1MjA4RVxcdTIzMDlcXHUyMzBCXFx1MjMyQVxcdTI3NjlcXHUyNzZCXFx1Mjc2RFxcdTI3NkZcXHUyNzcxXFx1Mjc3M1xcdTI3NzVcXHUyN0M2XFx1MjdFN1xcdTI3RTlcXHUyN0VCXFx1MjdFRFxcdTI3RUZcXHUyOTg0XFx1Mjk4NlxcdTI5ODhcXHUyOThBXFx1Mjk4Q1xcdTI5OEVcXHUyOTkwXFx1Mjk5MlxcdTI5OTRcXHUyOTk2XFx1Mjk5OFxcdTI5RDlcXHUyOURCXFx1MjlGRFxcdTJFMjNcXHUyRTI1XFx1MkUyN1xcdTJFMjlcXHUzMDA5XFx1MzAwQlxcdTMwMERcXHUzMDBGXFx1MzAxMVxcdTMwMTVcXHUzMDE3XFx1MzAxOVxcdTMwMUJcXHUzMDFFXFx1MzAxRlxcdUZEM0VcXHVGRTE4XFx1RkUzNlxcdUZFMzhcXHVGRTNBXFx1RkUzQ1xcdUZFM0VcXHVGRTQwXFx1RkU0MlxcdUZFNDRcXHVGRTQ4XFx1RkU1QVxcdUZFNUNcXHVGRTVFXFx1RkYwOVxcdUZGM0RcXHVGRjVEXFx1RkY2MFxcdUZGNjMnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1BmJyxcbiAgICAgICAgJ2FsaWFzJzogJ0ZpbmFsX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXHhCQlxcdTIwMTlcXHUyMDFEXFx1MjAzQVxcdTJFMDNcXHUyRTA1XFx1MkUwQVxcdTJFMERcXHUyRTFEXFx1MkUyMSdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUGknLFxuICAgICAgICAnYWxpYXMnOiAnSW5pdGlhbF9QdW5jdHVhdGlvbicsXG4gICAgICAgICdibXAnOiAnXFx4QUJcXHUyMDE4XFx1MjAxQlxcdTIwMUNcXHUyMDFGXFx1MjAzOVxcdTJFMDJcXHUyRTA0XFx1MkUwOVxcdTJFMENcXHUyRTFDXFx1MkUyMCdcbiAgICB9LFxuICAgIHtcbiAgICAgICAgJ25hbWUnOiAnUG8nLFxuICAgICAgICAnYWxpYXMnOiAnT3RoZXJfUHVuY3R1YXRpb24nLFxuICAgICAgICAnYm1wJzogJyEtIyUtXFwnXFxcXCosXFxcXC5cXFxcLzo7XFxcXD9AXFxcXFxceEExXFx4QTdcXHhCNlxceEI3XFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTY2RVxcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODA1XFx1MTgwNy1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTZcXHUyMDE3XFx1MjAyMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDM4XFx1MjAzQi1cXHUyMDNFXFx1MjA0MS1cXHUyMDQzXFx1MjA0Ny1cXHUyMDUxXFx1MjA1M1xcdTIwNTUtXFx1MjA1RVxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDBcXHUyRTAxXFx1MkUwNi1cXHUyRTA4XFx1MkUwQlxcdTJFMEUtXFx1MkUxNlxcdTJFMThcXHUyRTE5XFx1MkUxQlxcdTJFMUVcXHUyRTFGXFx1MkUyQS1cXHUyRTJFXFx1MkUzMC1cXHUyRTM5XFx1MkUzQy1cXHUyRTNGXFx1MkU0MVxcdTJFNDMtXFx1MkU0RlxcdTJFNTJcXHUzMDAxLVxcdTMwMDNcXHUzMDNEXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkUxMC1cXHVGRTE2XFx1RkUxOVxcdUZFMzBcXHVGRTQ1XFx1RkU0NlxcdUZFNDktXFx1RkU0Q1xcdUZFNTAtXFx1RkU1MlxcdUZFNTQtXFx1RkU1N1xcdUZFNUYtXFx1RkU2MVxcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwN1xcdUZGMEFcXHVGRjBDXFx1RkYwRVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQ1xcdUZGNjFcXHVGRjY0XFx1RkY2NScsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURGNTUtXFx1REY1OV18XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM4XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDNEItXFx1REM0RlxcdURDNUFcXHVEQzVCXFx1REM1RFxcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERTYwLVxcdURFNkNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDZbXFx1REMzQlxcdURENDQtXFx1REQ0NlxcdURERTJcXHVERTNGLVxcdURFNDZcXHVERTlBLVxcdURFOUNcXHVERTlFLVxcdURFQTJdfFxcdUQ4MDdbXFx1REM0MS1cXHVEQzQ1XFx1REM3MFxcdURDNzFcXHVERUY3XFx1REVGOFxcdURGRkZdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MUJbXFx1REU5Ny1cXHVERTlBXFx1REZFMl18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdfFxcdUQ4M0FbXFx1REQ1RVxcdURENUZdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdQcycsXG4gICAgICAgICdhbGlhcyc6ICdPcGVuX1B1bmN0dWF0aW9uJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcKFxcXFxbXFxcXHtcXHUwRjNBXFx1MEYzQ1xcdTE2OUJcXHUyMDFBXFx1MjAxRVxcdTIwNDVcXHUyMDdEXFx1MjA4RFxcdTIzMDhcXHUyMzBBXFx1MjMyOVxcdTI3NjhcXHUyNzZBXFx1Mjc2Q1xcdTI3NkVcXHUyNzcwXFx1Mjc3MlxcdTI3NzRcXHUyN0M1XFx1MjdFNlxcdTI3RThcXHUyN0VBXFx1MjdFQ1xcdTI3RUVcXHUyOTgzXFx1Mjk4NVxcdTI5ODdcXHUyOTg5XFx1Mjk4QlxcdTI5OERcXHUyOThGXFx1Mjk5MVxcdTI5OTNcXHUyOTk1XFx1Mjk5N1xcdTI5RDhcXHUyOURBXFx1MjlGQ1xcdTJFMjJcXHUyRTI0XFx1MkUyNlxcdTJFMjhcXHUyRTQyXFx1MzAwOFxcdTMwMEFcXHUzMDBDXFx1MzAwRVxcdTMwMTBcXHUzMDE0XFx1MzAxNlxcdTMwMThcXHUzMDFBXFx1MzAxRFxcdUZEM0ZcXHVGRTE3XFx1RkUzNVxcdUZFMzdcXHVGRTM5XFx1RkUzQlxcdUZFM0RcXHVGRTNGXFx1RkU0MVxcdUZFNDNcXHVGRTQ3XFx1RkU1OVxcdUZFNUJcXHVGRTVEXFx1RkYwOFxcdUZGM0JcXHVGRjVCXFx1RkY1RlxcdUZGNjInXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1MnLFxuICAgICAgICAnYWxpYXMnOiAnU3ltYm9sJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcJFxcXFwrPC0+XFxcXF5gXFxcXHx+XFx4QTItXFx4QTZcXHhBOFxceEE5XFx4QUNcXHhBRS1cXHhCMVxceEI0XFx4QjhcXHhEN1xceEY3XFx1MDJDMi1cXHUwMkM1XFx1MDJEMi1cXHUwMkRGXFx1MDJFNS1cXHUwMkVCXFx1MDJFRFxcdTAyRUYtXFx1MDJGRlxcdTAzNzVcXHUwMzg0XFx1MDM4NVxcdTAzRjZcXHUwNDgyXFx1MDU4RC1cXHUwNThGXFx1MDYwNi1cXHUwNjA4XFx1MDYwQlxcdTA2MEVcXHUwNjBGXFx1MDZERVxcdTA2RTlcXHUwNkZEXFx1MDZGRVxcdTA3RjZcXHUwN0ZFXFx1MDdGRlxcdTA5RjJcXHUwOUYzXFx1MDlGQVxcdTA5RkJcXHUwQUYxXFx1MEI3MFxcdTBCRjMtXFx1MEJGQVxcdTBDN0ZcXHUwRDRGXFx1MEQ3OVxcdTBFM0ZcXHUwRjAxLVxcdTBGMDNcXHUwRjEzXFx1MEYxNS1cXHUwRjE3XFx1MEYxQS1cXHUwRjFGXFx1MEYzNFxcdTBGMzZcXHUwRjM4XFx1MEZCRS1cXHUwRkM1XFx1MEZDNy1cXHUwRkNDXFx1MEZDRVxcdTBGQ0ZcXHUwRkQ1LVxcdTBGRDhcXHUxMDlFXFx1MTA5RlxcdTEzOTAtXFx1MTM5OVxcdTE2NkRcXHUxN0RCXFx1MTk0MFxcdTE5REUtXFx1MTlGRlxcdTFCNjEtXFx1MUI2QVxcdTFCNzQtXFx1MUI3Q1xcdTFGQkRcXHUxRkJGLVxcdTFGQzFcXHUxRkNELVxcdTFGQ0ZcXHUxRkRELVxcdTFGREZcXHUxRkVELVxcdTFGRUZcXHUxRkZEXFx1MUZGRVxcdTIwNDRcXHUyMDUyXFx1MjA3QS1cXHUyMDdDXFx1MjA4QS1cXHUyMDhDXFx1MjBBMC1cXHUyMEJGXFx1MjEwMFxcdTIxMDFcXHUyMTAzLVxcdTIxMDZcXHUyMTA4XFx1MjEwOVxcdTIxMTRcXHUyMTE2LVxcdTIxMThcXHUyMTFFLVxcdTIxMjNcXHUyMTI1XFx1MjEyN1xcdTIxMjlcXHUyMTJFXFx1MjEzQVxcdTIxM0JcXHUyMTQwLVxcdTIxNDRcXHUyMTRBLVxcdTIxNERcXHUyMTRGXFx1MjE4QVxcdTIxOEJcXHUyMTkwLVxcdTIzMDdcXHUyMzBDLVxcdTIzMjhcXHUyMzJCLVxcdTI0MjZcXHUyNDQwLVxcdTI0NEFcXHUyNDlDLVxcdTI0RTlcXHUyNTAwLVxcdTI3NjdcXHUyNzk0LVxcdTI3QzRcXHUyN0M3LVxcdTI3RTVcXHUyN0YwLVxcdTI5ODJcXHUyOTk5LVxcdTI5RDdcXHUyOURDLVxcdTI5RkJcXHUyOUZFLVxcdTJCNzNcXHUyQjc2LVxcdTJCOTVcXHUyQjk3LVxcdTJCRkZcXHUyQ0U1LVxcdTJDRUFcXHUyRTUwXFx1MkU1MVxcdTJFODAtXFx1MkU5OVxcdTJFOUItXFx1MkVGM1xcdTJGMDAtXFx1MkZENVxcdTJGRjAtXFx1MkZGQlxcdTMwMDRcXHUzMDEyXFx1MzAxM1xcdTMwMjBcXHUzMDM2XFx1MzAzN1xcdTMwM0VcXHUzMDNGXFx1MzA5QlxcdTMwOUNcXHUzMTkwXFx1MzE5MVxcdTMxOTYtXFx1MzE5RlxcdTMxQzAtXFx1MzFFM1xcdTMyMDAtXFx1MzIxRVxcdTMyMkEtXFx1MzI0N1xcdTMyNTBcXHUzMjYwLVxcdTMyN0ZcXHUzMjhBLVxcdTMyQjBcXHUzMkMwLVxcdTMzRkZcXHU0REMwLVxcdTRERkZcXHVBNDkwLVxcdUE0QzZcXHVBNzAwLVxcdUE3MTZcXHVBNzIwXFx1QTcyMVxcdUE3ODlcXHVBNzhBXFx1QTgyOC1cXHVBODJCXFx1QTgzNi1cXHVBODM5XFx1QUE3Ny1cXHVBQTc5XFx1QUI1QlxcdUFCNkFcXHVBQjZCXFx1RkIyOVxcdUZCQjItXFx1RkJDMVxcdUZERkNcXHVGREZEXFx1RkU2MlxcdUZFNjQtXFx1RkU2NlxcdUZFNjlcXHVGRjA0XFx1RkYwQlxcdUZGMUMtXFx1RkYxRVxcdUZGM0VcXHVGRjQwXFx1RkY1Q1xcdUZGNUVcXHVGRkUwLVxcdUZGRTZcXHVGRkU4LVxcdUZGRUVcXHVGRkZDXFx1RkZGRCcsXG4gICAgICAgICdhc3RyYWwnOiAnXFx1RDgwMFtcXHVERDM3LVxcdUREM0ZcXHVERDc5LVxcdUREODlcXHVERDhDLVxcdUREOEVcXHVERDkwLVxcdUREOUNcXHVEREEwXFx1REREMC1cXHVEREZDXXxcXHVEODAyW1xcdURDNzdcXHVEQzc4XFx1REVDOF18XFx1RDgwNVxcdURGM0Z8XFx1RDgwN1tcXHVERkQ1LVxcdURGRjFdfFxcdUQ4MUFbXFx1REYzQy1cXHVERjNGXFx1REY0NV18XFx1RDgyRlxcdURDOUN8XFx1RDgzNFtcXHVEQzAwLVxcdURDRjVcXHVERDAwLVxcdUREMjZcXHVERDI5LVxcdURENjRcXHVERDZBLVxcdURENkNcXHVERDgzXFx1REQ4NFxcdUREOEMtXFx1RERBOVxcdUREQUUtXFx1RERFOFxcdURFMDAtXFx1REU0MVxcdURFNDVcXHVERjAwLVxcdURGNTZdfFxcdUQ4MzVbXFx1REVDMVxcdURFREJcXHVERUZCXFx1REYxNVxcdURGMzVcXHVERjRGXFx1REY2RlxcdURGODlcXHVERkE5XFx1REZDM118XFx1RDgzNltcXHVEQzAwLVxcdURERkZcXHVERTM3LVxcdURFM0FcXHVERTZELVxcdURFNzRcXHVERTc2LVxcdURFODNcXHVERTg1XFx1REU4Nl18XFx1RDgzOFtcXHVERDRGXFx1REVGRl18XFx1RDgzQltcXHVEQ0FDXFx1RENCMFxcdUREMkVcXHVERUYwXFx1REVGMV18XFx1RDgzQ1tcXHVEQzAwLVxcdURDMkJcXHVEQzMwLVxcdURDOTNcXHVEQ0EwLVxcdURDQUVcXHVEQ0IxLVxcdURDQkZcXHVEQ0MxLVxcdURDQ0ZcXHVEQ0QxLVxcdURDRjVcXHVERDBELVxcdUREQURcXHVEREU2LVxcdURFMDJcXHVERTEwLVxcdURFM0JcXHVERTQwLVxcdURFNDhcXHVERTUwXFx1REU1MVxcdURFNjAtXFx1REU2NVxcdURGMDAtXFx1REZGRl18XFx1RDgzRFtcXHVEQzAwLVxcdURFRDdcXHVERUUwLVxcdURFRUNcXHVERUYwLVxcdURFRkNcXHVERjAwLVxcdURGNzNcXHVERjgwLVxcdURGRDhcXHVERkUwLVxcdURGRUJdfFxcdUQ4M0VbXFx1REMwMC1cXHVEQzBCXFx1REMxMC1cXHVEQzQ3XFx1REM1MC1cXHVEQzU5XFx1REM2MC1cXHVEQzg3XFx1REM5MC1cXHVEQ0FEXFx1RENCMFxcdURDQjFcXHVERDAwLVxcdURENzhcXHVERDdBLVxcdUREQ0JcXHVERENELVxcdURFNTNcXHVERTYwLVxcdURFNkRcXHVERTcwLVxcdURFNzRcXHVERTc4LVxcdURFN0FcXHVERTgwLVxcdURFODZcXHVERTkwLVxcdURFQThcXHVERUIwLVxcdURFQjZcXHVERUMwLVxcdURFQzJcXHVERUQwLVxcdURFRDZcXHVERjAwLVxcdURGOTJcXHVERjk0LVxcdURGQ0FdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdTYycsXG4gICAgICAgICdhbGlhcyc6ICdDdXJyZW5jeV9TeW1ib2wnLFxuICAgICAgICAnYm1wJzogJ1xcXFwkXFx4QTItXFx4QTVcXHUwNThGXFx1MDYwQlxcdTA3RkVcXHUwN0ZGXFx1MDlGMlxcdTA5RjNcXHUwOUZCXFx1MEFGMVxcdTBCRjlcXHUwRTNGXFx1MTdEQlxcdTIwQTAtXFx1MjBCRlxcdUE4MzhcXHVGREZDXFx1RkU2OVxcdUZGMDRcXHVGRkUwXFx1RkZFMVxcdUZGRTVcXHVGRkU2JyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODA3W1xcdURGREQtXFx1REZFMF18XFx1RDgzOFxcdURFRkZ8XFx1RDgzQlxcdURDQjAnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1NrJyxcbiAgICAgICAgJ2FsaWFzJzogJ01vZGlmaWVyX1N5bWJvbCcsXG4gICAgICAgICdibXAnOiAnXFxcXF5gXFx4QThcXHhBRlxceEI0XFx4QjhcXHUwMkMyLVxcdTAyQzVcXHUwMkQyLVxcdTAyREZcXHUwMkU1LVxcdTAyRUJcXHUwMkVEXFx1MDJFRi1cXHUwMkZGXFx1MDM3NVxcdTAzODRcXHUwMzg1XFx1MUZCRFxcdTFGQkYtXFx1MUZDMVxcdTFGQ0QtXFx1MUZDRlxcdTFGREQtXFx1MUZERlxcdTFGRUQtXFx1MUZFRlxcdTFGRkRcXHUxRkZFXFx1MzA5QlxcdTMwOUNcXHVBNzAwLVxcdUE3MTZcXHVBNzIwXFx1QTcyMVxcdUE3ODlcXHVBNzhBXFx1QUI1QlxcdUFCNkFcXHVBQjZCXFx1RkJCMi1cXHVGQkMxXFx1RkYzRVxcdUZGNDBcXHVGRkUzJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODNDW1xcdURGRkItXFx1REZGRl0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1NtJyxcbiAgICAgICAgJ2FsaWFzJzogJ01hdGhfU3ltYm9sJyxcbiAgICAgICAgJ2JtcCc6ICdcXFxcKzwtPlxcXFx8flxceEFDXFx4QjFcXHhEN1xceEY3XFx1MDNGNlxcdTA2MDYtXFx1MDYwOFxcdTIwNDRcXHUyMDUyXFx1MjA3QS1cXHUyMDdDXFx1MjA4QS1cXHUyMDhDXFx1MjExOFxcdTIxNDAtXFx1MjE0NFxcdTIxNEJcXHUyMTkwLVxcdTIxOTRcXHUyMTlBXFx1MjE5QlxcdTIxQTBcXHUyMUEzXFx1MjFBNlxcdTIxQUVcXHUyMUNFXFx1MjFDRlxcdTIxRDJcXHUyMUQ0XFx1MjFGNC1cXHUyMkZGXFx1MjMyMFxcdTIzMjFcXHUyMzdDXFx1MjM5Qi1cXHUyM0IzXFx1MjNEQy1cXHUyM0UxXFx1MjVCN1xcdTI1QzFcXHUyNUY4LVxcdTI1RkZcXHUyNjZGXFx1MjdDMC1cXHUyN0M0XFx1MjdDNy1cXHUyN0U1XFx1MjdGMC1cXHUyN0ZGXFx1MjkwMC1cXHUyOTgyXFx1Mjk5OS1cXHUyOUQ3XFx1MjlEQy1cXHUyOUZCXFx1MjlGRS1cXHUyQUZGXFx1MkIzMC1cXHUyQjQ0XFx1MkI0Ny1cXHUyQjRDXFx1RkIyOVxcdUZFNjJcXHVGRTY0LVxcdUZFNjZcXHVGRjBCXFx1RkYxQy1cXHVGRjFFXFx1RkY1Q1xcdUZGNUVcXHVGRkUyXFx1RkZFOS1cXHVGRkVDJyxcbiAgICAgICAgJ2FzdHJhbCc6ICdcXHVEODM1W1xcdURFQzFcXHVERURCXFx1REVGQlxcdURGMTVcXHVERjM1XFx1REY0RlxcdURGNkZcXHVERjg5XFx1REZBOVxcdURGQzNdfFxcdUQ4M0JbXFx1REVGMFxcdURFRjFdJ1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdTbycsXG4gICAgICAgICdhbGlhcyc6ICdPdGhlcl9TeW1ib2wnLFxuICAgICAgICAnYm1wJzogJ1xceEE2XFx4QTlcXHhBRVxceEIwXFx1MDQ4MlxcdTA1OERcXHUwNThFXFx1MDYwRVxcdTA2MEZcXHUwNkRFXFx1MDZFOVxcdTA2RkRcXHUwNkZFXFx1MDdGNlxcdTA5RkFcXHUwQjcwXFx1MEJGMy1cXHUwQkY4XFx1MEJGQVxcdTBDN0ZcXHUwRDRGXFx1MEQ3OVxcdTBGMDEtXFx1MEYwM1xcdTBGMTNcXHUwRjE1LVxcdTBGMTdcXHUwRjFBLVxcdTBGMUZcXHUwRjM0XFx1MEYzNlxcdTBGMzhcXHUwRkJFLVxcdTBGQzVcXHUwRkM3LVxcdTBGQ0NcXHUwRkNFXFx1MEZDRlxcdTBGRDUtXFx1MEZEOFxcdTEwOUVcXHUxMDlGXFx1MTM5MC1cXHUxMzk5XFx1MTY2RFxcdTE5NDBcXHUxOURFLVxcdTE5RkZcXHUxQjYxLVxcdTFCNkFcXHUxQjc0LVxcdTFCN0NcXHUyMTAwXFx1MjEwMVxcdTIxMDMtXFx1MjEwNlxcdTIxMDhcXHUyMTA5XFx1MjExNFxcdTIxMTZcXHUyMTE3XFx1MjExRS1cXHUyMTIzXFx1MjEyNVxcdTIxMjdcXHUyMTI5XFx1MjEyRVxcdTIxM0FcXHUyMTNCXFx1MjE0QVxcdTIxNENcXHUyMTREXFx1MjE0RlxcdTIxOEFcXHUyMThCXFx1MjE5NS1cXHUyMTk5XFx1MjE5Qy1cXHUyMTlGXFx1MjFBMVxcdTIxQTJcXHUyMUE0XFx1MjFBNVxcdTIxQTctXFx1MjFBRFxcdTIxQUYtXFx1MjFDRFxcdTIxRDBcXHUyMUQxXFx1MjFEM1xcdTIxRDUtXFx1MjFGM1xcdTIzMDAtXFx1MjMwN1xcdTIzMEMtXFx1MjMxRlxcdTIzMjItXFx1MjMyOFxcdTIzMkItXFx1MjM3QlxcdTIzN0QtXFx1MjM5QVxcdTIzQjQtXFx1MjNEQlxcdTIzRTItXFx1MjQyNlxcdTI0NDAtXFx1MjQ0QVxcdTI0OUMtXFx1MjRFOVxcdTI1MDAtXFx1MjVCNlxcdTI1QjgtXFx1MjVDMFxcdTI1QzItXFx1MjVGN1xcdTI2MDAtXFx1MjY2RVxcdTI2NzAtXFx1Mjc2N1xcdTI3OTQtXFx1MjdCRlxcdTI4MDAtXFx1MjhGRlxcdTJCMDAtXFx1MkIyRlxcdTJCNDVcXHUyQjQ2XFx1MkI0RC1cXHUyQjczXFx1MkI3Ni1cXHUyQjk1XFx1MkI5Ny1cXHUyQkZGXFx1MkNFNS1cXHUyQ0VBXFx1MkU1MFxcdTJFNTFcXHUyRTgwLVxcdTJFOTlcXHUyRTlCLVxcdTJFRjNcXHUyRjAwLVxcdTJGRDVcXHUyRkYwLVxcdTJGRkJcXHUzMDA0XFx1MzAxMlxcdTMwMTNcXHUzMDIwXFx1MzAzNlxcdTMwMzdcXHUzMDNFXFx1MzAzRlxcdTMxOTBcXHUzMTkxXFx1MzE5Ni1cXHUzMTlGXFx1MzFDMC1cXHUzMUUzXFx1MzIwMC1cXHUzMjFFXFx1MzIyQS1cXHUzMjQ3XFx1MzI1MFxcdTMyNjAtXFx1MzI3RlxcdTMyOEEtXFx1MzJCMFxcdTMyQzAtXFx1MzNGRlxcdTREQzAtXFx1NERGRlxcdUE0OTAtXFx1QTRDNlxcdUE4MjgtXFx1QTgyQlxcdUE4MzZcXHVBODM3XFx1QTgzOVxcdUFBNzctXFx1QUE3OVxcdUZERkRcXHVGRkU0XFx1RkZFOFxcdUZGRURcXHVGRkVFXFx1RkZGQ1xcdUZGRkQnLFxuICAgICAgICAnYXN0cmFsJzogJ1xcdUQ4MDBbXFx1REQzNy1cXHVERDNGXFx1REQ3OS1cXHVERDg5XFx1REQ4Qy1cXHVERDhFXFx1REQ5MC1cXHVERDlDXFx1RERBMFxcdURERDAtXFx1RERGQ118XFx1RDgwMltcXHVEQzc3XFx1REM3OFxcdURFQzhdfFxcdUQ4MDVcXHVERjNGfFxcdUQ4MDdbXFx1REZENS1cXHVERkRDXFx1REZFMS1cXHVERkYxXXxcXHVEODFBW1xcdURGM0MtXFx1REYzRlxcdURGNDVdfFxcdUQ4MkZcXHVEQzlDfFxcdUQ4MzRbXFx1REMwMC1cXHVEQ0Y1XFx1REQwMC1cXHVERDI2XFx1REQyOS1cXHVERDY0XFx1REQ2QS1cXHVERDZDXFx1REQ4M1xcdUREODRcXHVERDhDLVxcdUREQTlcXHVEREFFLVxcdURERThcXHVERTAwLVxcdURFNDFcXHVERTQ1XFx1REYwMC1cXHVERjU2XXxcXHVEODM2W1xcdURDMDAtXFx1RERGRlxcdURFMzctXFx1REUzQVxcdURFNkQtXFx1REU3NFxcdURFNzYtXFx1REU4M1xcdURFODVcXHVERTg2XXxcXHVEODM4XFx1REQ0RnxcXHVEODNCW1xcdURDQUNcXHVERDJFXXxcXHVEODNDW1xcdURDMDAtXFx1REMyQlxcdURDMzAtXFx1REM5M1xcdURDQTAtXFx1RENBRVxcdURDQjEtXFx1RENCRlxcdURDQzEtXFx1RENDRlxcdURDRDEtXFx1RENGNVxcdUREMEQtXFx1RERBRFxcdURERTYtXFx1REUwMlxcdURFMTAtXFx1REUzQlxcdURFNDAtXFx1REU0OFxcdURFNTBcXHVERTUxXFx1REU2MC1cXHVERTY1XFx1REYwMC1cXHVERkZBXXxcXHVEODNEW1xcdURDMDAtXFx1REVEN1xcdURFRTAtXFx1REVFQ1xcdURFRjAtXFx1REVGQ1xcdURGMDAtXFx1REY3M1xcdURGODAtXFx1REZEOFxcdURGRTAtXFx1REZFQl18XFx1RDgzRVtcXHVEQzAwLVxcdURDMEJcXHVEQzEwLVxcdURDNDdcXHVEQzUwLVxcdURDNTlcXHVEQzYwLVxcdURDODdcXHVEQzkwLVxcdURDQURcXHVEQ0IwXFx1RENCMVxcdUREMDAtXFx1REQ3OFxcdUREN0EtXFx1RERDQlxcdUREQ0QtXFx1REU1M1xcdURFNjAtXFx1REU2RFxcdURFNzAtXFx1REU3NFxcdURFNzgtXFx1REU3QVxcdURFODAtXFx1REU4NlxcdURFOTAtXFx1REVBOFxcdURFQjAtXFx1REVCNlxcdURFQzAtXFx1REVDMlxcdURFRDAtXFx1REVENlxcdURGMDAtXFx1REY5MlxcdURGOTQtXFx1REZDQV0nXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1onLFxuICAgICAgICAnYWxpYXMnOiAnU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICcgXFx4QTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBBXFx1MjAyOFxcdTIwMjlcXHUyMDJGXFx1MjA1RlxcdTMwMDAnXG4gICAgfSxcbiAgICB7XG4gICAgICAgICduYW1lJzogJ1psJyxcbiAgICAgICAgJ2FsaWFzJzogJ0xpbmVfU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUyMDI4J1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdacCcsXG4gICAgICAgICdhbGlhcyc6ICdQYXJhZ3JhcGhfU2VwYXJhdG9yJyxcbiAgICAgICAgJ2JtcCc6ICdcXHUyMDI5J1xuICAgIH0sXG4gICAge1xuICAgICAgICAnbmFtZSc6ICdacycsXG4gICAgICAgICdhbGlhcyc6ICdTcGFjZV9TZXBhcmF0b3InLFxuICAgICAgICAnYm1wJzogJyBcXHhBMFxcdTE2ODBcXHUyMDAwLVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDAnXG4gICAgfVxuXTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZSA9IHZvaWQgMDtcbmZ1bmN0aW9uIGRlY29kZShzLCBzZXAgPSAnOycpIHtcbiAgICBzID0gcy5yZXBsYWNlKC9cXG4vZywgJycpO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGNvbnN0IHJlY29yZHMgPSBbJyddO1xuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCkge1xuICAgICAgICBzd2l0Y2ggKHNbcG9zXSkge1xuICAgICAgICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1swXSArPSBzW3Bvc107XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHNlcDpcbiAgICAgICAgICAgICAgICByZWNvcmRzLnVuc2hpZnQoJycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZWNvcmRzWzBdICs9IHNbcG9zXTtcbiAgICAgICAgfVxuICAgICAgICBwb3MrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHMucmV2ZXJzZSgpLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkKTtcbn1cbmNvbnN0IHByZWZpeGVzID0ge1xuICAgIGZpbGVEaXJlY3Rvcnk6ICdqYWJyZWYtbWV0YTogZmlsZURpcmVjdG9yeTonLFxuICAgIGdyb3Vwc3ZlcnNpb246ICdqYWJyZWYtbWV0YTogZ3JvdXBzdmVyc2lvbjonLFxuICAgIGdyb3Vwc3RyZWU6ICdqYWJyZWYtbWV0YTogZ3JvdXBzdHJlZTonLFxuICAgIGdyb3VwaW5nOiAnamFicmVmLW1ldGE6IGdyb3VwaW5nOicsXG59O1xuLyoqXG4gKiBJbXBvcnQgdGhlIEphYlJlZiBncm91cHMgZnJvbSB0aGUgYEBzdHJpbmdgIGNvbW1lbnRzIGluIHdoaWNoIHRoZXkgd2VyZSBzdG9yZWQuIFlvdSB3b3VsZCB0eXBpY2FsbHkgcGFzcyB0aGUgY29tbWVudHMgcGFyc2VkIGJ5IFtbYmlidGV4LnBhcnNlXV0gaW4gaGVyZS5cbiAqXG4gKiBKYWJSZWYga25vd3Mgc2V2ZXJhbCBncm91cCB0eXBlcywgYW5kIHRoaXMgcGFyc2VyIHBhcnNlcyBtb3N0LCBidXQgbm90IGFsbCBvZiB0aGVtOlxuICpcbiAqICogaW5kZXBlbmRlbnQgZ3JvdXA6IHRoZSBrZXlzIGxpc3RlZCBpbiB0aGUgZ3JvdXAgYXJlIHRoZSBlbnRyaWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgdG8gYmVsb25nIHRvIGl0XG4gKiAqIGludGVyc2VjdGlvbjogdGhlIGtleXMgbGlzdGVkIGluIHRoZSBncm91cCBhcmUgY29uc2lkZXJlZCB0byBiZWxvbmcgdG8gdGhlIGdyb3VwIGlmIHRoZXkncmUgYWxzbyBpbiB0aGUgcGFyZW50IGdyb3VwXG4gKiAqIHVuaW9uOiB0aGUga2V5cyBsaXN0ZWQgaW4gdGhlIGdyb3VwIGFyZSBjb25zaWRlcmVkIHRvIGJlbG9uZyB0byB0aGUgZ3JvdXAsIGFuZCBhbHNvIHRoZSBrZXlzIHRoYXQgYXJlIGluIHRoZSBwYXJlbnQgZ3JvdXBcbiAqICogcXVlcnk6IG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwYXJzZXJcbiAqL1xuZnVuY3Rpb24gcGFyc2UoY29tbWVudHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIHJvb3Q6IFtdLFxuICAgICAgICBncm91cHM6IHt9LFxuICAgICAgICBmaWxlRGlyZWN0b3J5OiAnJyxcbiAgICAgICAgdmVyc2lvbjogJycsXG4gICAgfTtcbiAgICBjb25zdCBsZXZlbHMgPSBbXTtcbiAgICBjb25zdCBkZWNvZGVkID0ge1xuICAgICAgICBmaWxlRGlyZWN0b3J5OiBudWxsLFxuICAgICAgICBncm91cHN2ZXJzaW9uOiBudWxsLFxuICAgICAgICBncm91cHN0cmVlOiBudWxsLFxuICAgICAgICBncm91cGluZzogbnVsbCxcbiAgICB9O1xuICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFttZXRhLCBwcmVmaXhdIG9mIE9iamVjdC5lbnRyaWVzKHByZWZpeGVzKSkge1xuICAgICAgICAgICAgaWYgKGNvbW1lbnQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlZFttZXRhXSA9IGRlY29kZShjb21tZW50LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnZlcnNpb24gPSBkZWNvZGVkLmdyb3Vwc3ZlcnNpb24gJiYgZGVjb2RlZC5ncm91cHN2ZXJzaW9uWzBdO1xuICAgIHJlc3VsdC5maWxlRGlyZWN0b3J5ID0gZGVjb2RlZC5maWxlRGlyZWN0b3J5ICYmIGRlY29kZWQuZmlsZURpcmVjdG9yeVswXTtcbiAgICBmb3IgKGNvbnN0IHRyZWUgb2YgWydncm91cHN0cmVlJywgJ2dyb3VwaW5nJ10pIHtcbiAgICAgICAgaWYgKCFkZWNvZGVkW3RyZWVdKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGZvciAoY29uc3QgZW5jb2RlZCBvZiBkZWNvZGVkW3RyZWVdKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBkZWNvZGUoZW5jb2RlZCk7XG4gICAgICAgICAgICBjb25zdCBsZXZlbF90eXBlX25hbWUgPSBkZWNvZGUoZmllbGRzLnNoaWZ0KCksICc6Jyk7XG4gICAgICAgICAgICBjb25zdCBtID0gL14oWzAtOV0rKSAoLispLy5leGVjKGxldmVsX3R5cGVfbmFtZVswXSk7XG4gICAgICAgICAgICBpZiAoIW0pXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjb25zdCBsZXZlbCA9IHBhcnNlSW50KG1bMV0pO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IG1bMl07IC8vIHRlc3QgZm9yIFN0YXRpY0dyb3VwP1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdBbGxFbnRyaWVzR3JvdXAnKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyByb290XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gbGV2ZWxfdHlwZV9uYW1lWzFdO1xuICAgICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gZGVjb2RlKGZpZWxkcy5zaGlmdCgpKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSB0cmVlID09PSAnZ3JvdXBpbmcnID8gW10gOiBmaWVsZHMubWFwKGZpZWxkID0+IGRlY29kZShmaWVsZClbMF0pO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBlbnRyaWVzOiBrZXlzLFxuICAgICAgICAgICAgICAgIGdyb3VwczogW10sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0Lmdyb3Vwc1tuYW1lXSA9IHJlc3VsdC5ncm91cHNbbmFtZV0gfHwgZ3JvdXA7XG4gICAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA8IGxldmVsKSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV2ZWxzW2xldmVsIC0gMV0gPSBncm91cDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5yb290LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gbGV2ZWxzW2xldmVsIC0gMl07XG4gICAgICAgICAgICAgICAgc3dpdGNoIChpbnRlcnNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6IC8vIGluZGVwZW5kZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnMSc6IC8vIGludGVyc2VjdFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuZW50cmllcyA9IGdyb3VwLmVudHJpZXMuZmlsdGVyKGtleSA9PiBwYXJlbnQuZW50cmllcy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzogLy8gdW5pb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmVudHJpZXMgPSBncm91cC5lbnRyaWVzLmNvbmNhdChwYXJlbnQuZW50cmllcy5maWx0ZXIoa2V5ID0+ICFncm91cC5lbnRyaWVzLmluY2x1ZGVzKGtleSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXZlbHNbbGV2ZWwgLSAyXS5ncm91cHMucHVzaChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWphYnJlZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuamFicmVmID0gZXhwb3J0cy5jaHVua2VyID0gZXhwb3J0cy5hc3QgPSBleHBvcnRzLnBhcnNlID0gdm9pZCAwO1xuY29uc3QgYmlidGV4ID0gcmVxdWlyZShcIi4vZ3JhbW1hclwiKTtcbmNvbnN0IGNodW5rZXJfMSA9IHJlcXVpcmUoXCIuL2NodW5rZXJcIik7XG5jb25zdCB1bmljb2RlMmxhdGV4XzEgPSByZXF1aXJlKFwidW5pY29kZTJsYXRleFwiKTtcbmNsYXNzIFBhcnNlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG5vZGUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7IC8vICdFcnJvcicgYnJlYWtzIHByb3RvdHlwZSBjaGFpbiBoZXJlXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7IC8vIHJlc3RvcmUgcHJvdG90eXBlIGNoYWluXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB9XG59XG5jbGFzcyBUZVhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBub2RlLCB0ZXh0KSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOyAvLyByZXN0b3JlIHByb3RvdHlwZSBjaGFpblxuICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxufVxuY29uc3QgY2hhckNhdGVnb3JpZXMgPSByZXF1aXJlKFwieHJlZ2V4cC90b29scy9vdXRwdXQvY2F0ZWdvcmllc1wiKTtcbmNvbnN0IGNoYXJDbGFzcyA9IHtcbiAgICBMdTogY2hhckNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiBbJ1VwcGVyY2FzZV9MZXR0ZXInLCAnVGl0bGVjYXNlX0xldHRlciddLmluY2x1ZGVzKGNhdC5hbGlhcykpLm1hcChjYXQgPT4gY2F0LmJtcCkuam9pbignJyksXG4gICAgTGw6IGNoYXJDYXRlZ29yaWVzLmZpbmQoY2F0ID0+IGNhdC5hbGlhcyA9PT0gJ0xvd2VyY2FzZV9MZXR0ZXInKS5ibXAsXG4gICAgTG5vdEx1OiBjaGFyQ2F0ZWdvcmllcy5maWx0ZXIoY2F0ID0+IFsnTG93ZXJjYXNlX0xldHRlcicsICdNb2RpZmllcl9MZXR0ZXInLCAnT3RoZXJfTGV0dGVyJywgJ05vbnNwYWNpbmdfTWFyaycsICdTcGFjaW5nX01hcmsnLCAnRGVjaW1hbF9OdW1iZXInLCAnTGV0dGVyX051bWJlciddLmluY2x1ZGVzKGNhdC5hbGlhcykpLm1hcChjYXQgPT4gY2F0LmJtcCkuam9pbignJyksXG4gICAgUDogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnUHVuY3R1YXRpb24nKS5ibXAsXG4gICAgTDogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnTGV0dGVyJykuYm1wLFxuICAgIE46IGNoYXJDYXRlZ29yaWVzLmZpbHRlcihjYXQgPT4gWydEZWNpbWFsX051bWJlcicsICdMZXR0ZXJfTnVtYmVyJ10uaW5jbHVkZXMoY2F0LmFsaWFzKSkubWFwKGNhdCA9PiBjYXQuYm1wKS5qb2luKCcnKSxcbiAgICBBbHBoYU51bTogY2hhckNhdGVnb3JpZXMuZmlsdGVyKGNhdCA9PiBbJ0xldHRlcicsICdEZWNpbWFsX051bWJlcicsICdMZXR0ZXJfTnVtYmVyJ10uaW5jbHVkZXMoY2F0LmFsaWFzKSkubWFwKGNhdCA9PiBjYXQuYm1wKS5qb2luKCcnKSxcbiAgICBMQzogY2hhckNhdGVnb3JpZXMuZmluZChjYXQgPT4gY2F0LmFsaWFzID09PSAnQ2FzZWRfTGV0dGVyJykuYm1wLFxufTtcbmNvbnN0IG1hcmtlciA9IHtcbiAgICBhbmQ6ICdcXHUwMDAxJyxcbiAgICBjb21tYTogJ1xcdTAwMDInLFxuICAgIHNwYWNlOiAnXFx1MDAwMycsXG4gICAgbGl0ZXJhbDogJ1xcdTAwMDQnLFxuICAgIG1hcmt1cDogJ1xcdTAwMDUnLFxuICAgIHJlOiB7XG4gICAgICAgIGFuZDogLy4vLFxuICAgICAgICBjb21tYTogLy4vLFxuICAgICAgICBzcGFjZTogLy4vLFxuICAgICAgICBsaXRlcmFsOiAvLi8sXG4gICAgICAgIGxpdGVyYWxOYW1lOiAvLi8sXG4gICAgfSxcbiAgICBjbGVhbihzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UobWFya2VyLnJlLnNwYWNlLCAnICcpLnJlcGxhY2UobWFya2VyLnJlLmNvbW1hLCAnLCAnKS5yZXBsYWNlKG1hcmtlci5yZS5saXRlcmFsLCAnJyk7XG4gICAgfSxcbn07XG5tYXJrZXIucmUgPSB7XG4gICAgYW5kOiBuZXcgUmVnRXhwKG1hcmtlci5hbmQsICdnJyksXG4gICAgY29tbWE6IG5ldyBSZWdFeHAobWFya2VyLmNvbW1hLCAnZycpLFxuICAgIHNwYWNlOiBuZXcgUmVnRXhwKG1hcmtlci5zcGFjZSwgJ2cnKSxcbiAgICBsaXRlcmFsOiBuZXcgUmVnRXhwKG1hcmtlci5saXRlcmFsLCAnZycpLFxuICAgIGxpdGVyYWxOYW1lOiBuZXcgUmVnRXhwKGBeJHttYXJrZXIubGl0ZXJhbH0oW14ke21hcmtlci5saXRlcmFsfV0qKSR7bWFya2VyLmxpdGVyYWx9JGApLFxufTtcbmNvbnN0IHByZXNlcnZlQ2FzZSA9IHtcbiAgICBsZWFkaW5nQ2FwOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkx1fV1bJHtjaGFyQ2xhc3MuTG5vdEx1fV0rWyR7Y2hhckNsYXNzLlB9XT8kYCksXG4gICAgYWxsQ2FwczogbmV3IFJlZ0V4cChgXlske2NoYXJDbGFzcy5MdX0ke2NoYXJDbGFzcy5OfV17Mix9JGApLFxuICAgIGFsbExvd2VyOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkxsfSR7Y2hhckNsYXNzLk59XXsyLH0kYCksXG4gICAgam9pbmVkOiBuZXcgUmVnRXhwKGBeWyR7Y2hhckNsYXNzLkx1fV1bJHtjaGFyQ2xhc3MuTG5vdEx1fV0qKFstK11bJHtjaGFyQ2xhc3MuTH0ke2NoYXJDbGFzcy5OfV0rKSpbJHtjaGFyQ2xhc3MuUH1dKiRgKSxcbiAgICBoYXNVcHBlcjogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkx1fV1gKSxcbiAgICBoYXNMb3dlcjogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkxsfV1gKSxcbiAgICBpc051bWJlcjogL15bMC05XSskLyxcbiAgICBoYXNBbHBoYTogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkx9XWApLFxuICAgIGhhc0FscGhhTnVtOiBuZXcgUmVnRXhwKGBbJHtjaGFyQ2xhc3MuQWxwaGFOdW19XWApLFxuICAgIG5vdEFscGhhTnVtOiBuZXcgUmVnRXhwKGBbXiR7Y2hhckNsYXNzLkFscGhhTnVtfV1gLCAnZycpLFxuICAgIHNlbnRlbmNlU3RhcnQ6IG5ldyBSZWdFeHAoYChefChbXFx1MjAxNDo/IS5dXFxcXHMrKSlbJHtjaGFyQ2xhc3MuTHV9XWAsICdnJyksXG4gICAgbWFya3VwOiAvPFxcLz9zcGFuW14+XSo+L2csXG4gICAgYWNyb255bTogbmV3IFJlZ0V4cChgLipcXFxcLiR7bWFya2VyLm1hcmt1cH0qWyR7Y2hhckNsYXNzLkx1fV0ke21hcmtlci5tYXJrdXB9KlxcXFwuJGApLFxuICAgIG5vdENhc2VTZW5zaXRpdmU6IG5ldyBSZWdFeHAoYFteJHtjaGFyQ2xhc3MuTEN9XWApLFxuICAgIGlzQ2FzZVNlbnNpdGl2ZTogbmV3IFJlZ0V4cChgWyR7Y2hhckNsYXNzLkxDfV1gKSxcbiAgICBxdW90ZWQ6IC8oXCJbXlwiXStcIil8KOKAnFte4oCcXSvigJwpL2csXG59O1xuY29uc3QgZmllbGRzID0ge1xuICAgIGNyZWF0b3I6IFtcbiAgICAgICAgJ2F1dGhvcicsXG4gICAgICAgICdib29rYXV0aG9yJyxcbiAgICAgICAgJ2NvbGxhYm9yYXRvcicsXG4gICAgICAgICdjb21tZW50YXRvcicsXG4gICAgICAgICdkaXJlY3RvcicsXG4gICAgICAgICdlZGl0b3InLFxuICAgICAgICAnZWRpdG9yYScsXG4gICAgICAgICdlZGl0b3JiJyxcbiAgICAgICAgJ2VkaXRvcnMnLFxuICAgICAgICAnaG9sZGVyJyxcbiAgICAgICAgJ3NjcmlwdHdyaXRlcicsXG4gICAgICAgICd0cmFuc2xhdG9yJyxcbiAgICBdLFxuICAgIHRpdGxlOiBbXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICdzZXJpZXMnLFxuICAgICAgICAnc2hvcnR0aXRsZScsXG4gICAgICAgICdib29rdGl0bGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICdvcmlndGl0bGUnLFxuICAgICAgICAnbWFpbnRpdGxlJyxcbiAgICAgICAgJ2V2ZW50dGl0bGUnLFxuICAgIF0sXG4gICAgdW5uZXN0OiBbXG4gICAgICAgICdwdWJsaXNoZXInLFxuICAgICAgICAnbG9jYXRpb24nLFxuICAgIF0sXG4gICAgdmVyYmF0aW06IFtcbiAgICAgICAgJ3VybCcsXG4gICAgICAgICdkb2knLFxuICAgICAgICAnZmlsZScsXG4gICAgICAgICdmaWxlcycsXG4gICAgICAgICdlcHJpbnQnLFxuICAgICAgICAndmVyYmEnLFxuICAgICAgICAndmVyYmInLFxuICAgICAgICAndmVyYmMnLFxuICAgICAgICAnZ3JvdXBzJyxcbiAgICBdLFxuICAgIGh0bWw6IFtcbiAgICAgICAgJ2Fubm90YXRpb24nLFxuICAgICAgICAnY29tbWVudCcsXG4gICAgICAgICdhbm5vdGUnLFxuICAgICAgICAncmV2aWV3JyxcbiAgICAgICAgJ25vdGVzJyxcbiAgICAgICAgJ25vdGUnLFxuICAgIF0sXG4gICAgdW5hYmJyZXY6IFtcbiAgICAgICAgJ2pvdXJuYWwnLFxuICAgICAgICAnam91cm5hbHRpdGxlJyxcbiAgICAgICAgJ2pvdXJuYWwtZnVsbCcsXG4gICAgXSxcbn07XG5jb25zdCBlbmdsaXNoID0gW1xuICAgICdhbWVyaWNhbicsXG4gICAgJ2JyaXRpc2gnLFxuICAgICdjYW5hZGlhbicsXG4gICAgJ2VuZ2xpc2gnLFxuICAgICdhdXN0cmFsaWFuJyxcbiAgICAnbmV3emVhbGFuZCcsXG4gICAgJ3VzZW5nbGlzaCcsXG4gICAgJ3VrZW5nbGlzaCcsXG4gICAgJ2VuJyxcbiAgICAnZW5nJyxcbiAgICAnZW4tYXUnLFxuICAgICdlbi1ieicsXG4gICAgJ2VuLWNhJyxcbiAgICAnZW4tY2InLFxuICAgICdlbi1nYicsXG4gICAgJ2VuLWllJyxcbiAgICAnZW4tam0nLFxuICAgICdlbi1ueicsXG4gICAgJ2VuLXBoJyxcbiAgICAnZW4tdHQnLFxuICAgICdlbi11cycsXG4gICAgJ2VuLXphJyxcbiAgICAnZW4tencnLFxuICAgICdhbmdsYWlzJyxcbl07XG5jbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgICAgICB0aGlzLmluX3ByZWFtYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJlYW1ibGUgPSBbXTtcbiAgICAgICAgdGhpcy5sb2cgPSBmdW5jdGlvbiAoc3RyKSB7IH07IC8vIHRzbGludDpkaXNhYmxlLWxpbmUgdmFyaWFibGUtbmFtZSBvbmx5LWFycm93LWZ1bmN0aW9ucyBuby1lbXB0eVxuICAgICAgICBmb3IgKGNvbnN0IFtvcHRpb24sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgZGVsZXRlIG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5lcnJvckhhbmRsZXIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgb25seS1hcnJvdy1mdW5jdGlvbnMgbm8tZW1wdHlcbiAgICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24gKGVycikgeyB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuZXJyb3JIYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZXJyKSB7IHRocm93IGVycjsgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2VudGVuY2VDYXNlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc2VudGVuY2VDYXNlID0gb3B0aW9ucy5zZW50ZW5jZUNhc2UgPyBlbmdsaXNoIDogW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlbnRlbmNlQ2FzZSA9IG9wdGlvbnMuc2VudGVuY2VDYXNlIHx8IGVuZ2xpc2g7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0cmluZ3MpXG4gICAgICAgICAgICBvcHRpb25zLnN0cmluZ3MgPSB7fTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnVuYWJicmV2aWF0ZSlcbiAgICAgICAgICAgIG9wdGlvbnMudW5hYmJyZXZpYXRlID0ge307XG4gICAgICAgIGlmIChvcHRpb25zLnJhdykge1xuICAgICAgICAgICAgb3B0aW9ucy5zZW50ZW5jZUNhc2UgPSBmYWxzZTtcbiAgICAgICAgICAgIG9wdGlvbnMuY2FzZVByb3RlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgY2FzZVByb3RlY3Rpb246ICdhcy1uZWVkZWQnLCB2ZXJiYXRpbUZpZWxkczogWy9eY2l0ZXVsaWtlLWxpbmtvdXQtWzAtOV0rJC8sIC4uLmZpZWxkcy52ZXJiYXRpbV0sIHZlcmJhdGltQ29tbWFuZHM6IFsndXJsJywgJ2hyZWYnXSwgdW5uZXN0RmllbGRzOiBbLi4uZmllbGRzLnRpdGxlLCAuLi5maWVsZHMudW5uZXN0LCAuLi5maWVsZHMudmVyYmF0aW1dLCB1bm5lc3RNb2RlOiAndW53cmFwJywgaHRtbEZpZWxkczogZmllbGRzLmh0bWwsIGd1ZXNzQWxyZWFkeVNlbnRlbmNlQ2FzZWQ6IHRydWUsIG1hcmt1cDoge30gfSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IG1hcmt1cF9kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGVucXVvdGU6IHsgb3BlbjogJ1xcdTIwMWMnLCBjbG9zZTogJ1xcdTIwMWQnIH0sXG4gICAgICAgICAgICBzdWI6IHsgb3BlbjogJzxzdWI+JywgY2xvc2U6ICc8L3N1Yj4nIH0sXG4gICAgICAgICAgICBzdXA6IHsgb3BlbjogJzxzdXA+JywgY2xvc2U6ICc8L3N1cD4nIH0sXG4gICAgICAgICAgICBib2xkOiB7IG9wZW46ICc8Yj4nLCBjbG9zZTogJzwvYj4nIH0sXG4gICAgICAgICAgICBpdGFsaWNzOiB7IG9wZW46ICc8aT4nLCBjbG9zZTogJzwvaT4nIH0sXG4gICAgICAgICAgICBzbWFsbENhcHM6IHsgb3BlbjogJzxzcGFuIHN0eWxlPVwiZm9udC12YXJpYW50OnNtYWxsLWNhcHM7XCI+JywgY2xvc2U6ICc8L3NwYW4+JyB9LFxuICAgICAgICAgICAgY2FzZVByb3RlY3Q6IHsgb3BlbjogJzxzcGFuIGNsYXNzPVwibm9jYXNlXCI+JywgY2xvc2U6ICc8L3NwYW4+JyB9LFxuICAgICAgICAgICAgcm9tYW46IHsgb3BlbjogJycsIGNsb3NlOiAnJyB9LFxuICAgICAgICAgICAgZml4ZWRXaWR0aDogeyBvcGVuOiAnJywgY2xvc2U6ICcnIH0sXG4gICAgICAgIH07XG4gICAgICAgIC8vIHBhdGNoIGluIGJlY2F1c2UgdGhlIG9wdGlvbnMgd2lsbCBsaWtlbHkgbm90IGhhdmUgZW5xdW90ZSBhbmQgY2FzZS1wcm90ZWN0XG4gICAgICAgIGZvciAoY29uc3QgW21hcmt1cCwgeyBvcGVuLCBjbG9zZSB9XSBvZiBPYmplY3QuZW50cmllcyhtYXJrdXBfZGVmYXVsdHMpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0gPSB0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0gfHwgeyBvcGVuLCBjbG9zZSB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaSBvZiBbMSwgMiwgMywgNF0pIHsgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubWFya3VwW2BoJHtpfWBdID0gdGhpcy5vcHRpb25zLm1hcmt1cFtgaCR7aX1gXSB8fCB7IG9wZW46IGA8aCR7aX0+YCwgY2xvc2U6IGA8L2gke2l9PmAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVucmVzb2x2ZWRTdHJpbmdzID0ge307XG4gICAgICAgIHRoaXMuZXJyb3JzID0gW107XG4gICAgICAgIHRoaXMuY29tbWVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgICAgIHRoaXMuc3RyaW5ncyA9IHt9O1xuICAgICAgICB0aGlzLm5ld2NvbW1hbmRzID0ge307XG4gICAgICAgIHRoaXMuZGVmYXVsdF9zdHJpbmdzID0ge1xuICAgICAgICAgICAgSkFOOiBbdGhpcy50ZXh0KCcwMScpXSxcbiAgICAgICAgICAgIEZFQjogW3RoaXMudGV4dCgnMDInKV0sXG4gICAgICAgICAgICBNQVI6IFt0aGlzLnRleHQoJzAzJyldLFxuICAgICAgICAgICAgQVBSOiBbdGhpcy50ZXh0KCcwNCcpXSxcbiAgICAgICAgICAgIE1BWTogW3RoaXMudGV4dCgnMDUnKV0sXG4gICAgICAgICAgICBKVU46IFt0aGlzLnRleHQoJzA2JyldLFxuICAgICAgICAgICAgSlVMOiBbdGhpcy50ZXh0KCcwNycpXSxcbiAgICAgICAgICAgIEFVRzogW3RoaXMudGV4dCgnMDgnKV0sXG4gICAgICAgICAgICBTRVA6IFt0aGlzLnRleHQoJzA5JyldLFxuICAgICAgICAgICAgT0NUOiBbdGhpcy50ZXh0KCcxMCcpXSxcbiAgICAgICAgICAgIE5PVjogW3RoaXMudGV4dCgnMTEnKV0sXG4gICAgICAgICAgICBERUM6IFt0aGlzLnRleHQoJzEyJyldLFxuICAgICAgICAgICAgQUNNQ1M6IFt0aGlzLnRleHQoJ0FDTSBDb21wdXRpbmcgU3VydmV5cycpXSxcbiAgICAgICAgICAgIEFDVEE6IFt0aGlzLnRleHQoJ0FjdGEgSW5mb3JtYXRpY2EnKV0sXG4gICAgICAgICAgICBDQUNNOiBbdGhpcy50ZXh0KCdDb21tdW5pY2F0aW9ucyBvZiB0aGUgQUNNJyldLFxuICAgICAgICAgICAgSUJNSlJEOiBbdGhpcy50ZXh0KCdJQk0gSm91cm5hbCBvZiBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQnKV0sXG4gICAgICAgICAgICBJQk1TSjogW3RoaXMudGV4dCgnSUJNIFN5c3RlbXMgSm91cm5hbCcpXSxcbiAgICAgICAgICAgIElFRUVTRTogW3RoaXMudGV4dCgnSUVFRSBUcmFuc2FjdGlvbnMgb24gU29mdHdhcmUgRW5naW5lZXJpbmcnKV0sXG4gICAgICAgICAgICBJRUVFVEM6IFt0aGlzLnRleHQoJ0lFRUUgVHJhbnNhY3Rpb25zIG9uIENvbXB1dGVycycpXSxcbiAgICAgICAgICAgIElFRUVUQ0FEOiBbdGhpcy50ZXh0KCdJRUVFIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlci1BaWRlZCBEZXNpZ24gb2YgSW50ZWdyYXRlZCBDaXJjdWl0cycpXSxcbiAgICAgICAgICAgIElQTDogW3RoaXMudGV4dCgnSW5mb3JtYXRpb24gUHJvY2Vzc2luZyBMZXR0ZXJzJyldLFxuICAgICAgICAgICAgSkFDTTogW3RoaXMudGV4dCgnSm91cm5hbCBvZiB0aGUgQUNNJyldLFxuICAgICAgICAgICAgSkNTUzogW3RoaXMudGV4dCgnSm91cm5hbCBvZiBDb21wdXRlciBhbmQgU3lzdGVtIFNjaWVuY2VzJyldLFxuICAgICAgICAgICAgU0NQOiBbdGhpcy50ZXh0KCdTY2llbmNlIG9mIENvbXB1dGVyIFByb2dyYW1taW5nJyldLFxuICAgICAgICAgICAgU0lDT01QOiBbdGhpcy50ZXh0KCdTSUFNIEpvdXJuYWwgb24gQ29tcHV0aW5nJyldLFxuICAgICAgICAgICAgVE9DUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBDb21wdXRlciBTeXN0ZW1zJyldLFxuICAgICAgICAgICAgVE9EUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBEYXRhYmFzZSBTeXN0ZW1zJyldLFxuICAgICAgICAgICAgVE9HOiBbdGhpcy50ZXh0KCdBQ00gVHJhbnNhY3Rpb25zIG9uIEdyYXBoaWNzJyldLFxuICAgICAgICAgICAgVE9NUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBNYXRoZW1hdGljYWwgU29mdHdhcmUnKV0sXG4gICAgICAgICAgICBUT09JUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBPZmZpY2UgSW5mb3JtYXRpb24gU3lzdGVtcycpXSxcbiAgICAgICAgICAgIFRPUExBUzogW3RoaXMudGV4dCgnQUNNIFRyYW5zYWN0aW9ucyBvbiBQcm9ncmFtbWluZyBMYW5ndWFnZXMgYW5kIFN5c3RlbXMnKV0sXG4gICAgICAgICAgICBUQ1M6IFt0aGlzLnRleHQoJ1RoZW9yZXRpY2FsIENvbXB1dGVyIFNjaWVuY2UnKV0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzdChpbnB1dCwgY2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IF9hc3QgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua2VyXzEucGFyc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICBsZXQgY2h1bmtfYXN0ID0gYmlidGV4LnBhcnNlKGNodW5rLnRleHQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgeyBjb21iaW5pbmdEaWFjcml0aWNzOiB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy5jb21tYW5kcyB9KSk7XG4gICAgICAgICAgICBpZiAoY2xlYW4pXG4gICAgICAgICAgICAgICAgY2h1bmtfYXN0ID0gdGhpcy5jbGVhbihjaHVua19hc3QpO1xuICAgICAgICAgICAgX2FzdC5wdXNoKGNodW5rX2FzdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9hc3Q7XG4gICAgfVxuICAgIHBhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXN5bmMgPyB0aGlzLnBhcnNlQXN5bmMoaW5wdXQpIDogdGhpcy5wYXJzZVN5bmMoaW5wdXQpO1xuICAgIH1cbiAgICBwYXJzZVN5bmMoaW5wdXQpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBjaHVua2VyXzEucGFyc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2h1bmsoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCgpO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGlucHV0KSB7XG4gICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYXdhaXQgY2h1bmtlcl8xLnBhcnNlKGlucHV0LCB7IGFzeW5jOiB0cnVlIH0pKSB7XG4gICAgICAgICAgICB0aGlzLnBhcnNlQ2h1bmsoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCgpO1xuICAgIH1cbiAgICBwYXJzZWQoKSB7XG4gICAgICAgIHRoaXMuZmllbGQgPSBudWxsO1xuICAgICAgICBjb25zdCBzdHJpbmdzID0ge307XG4gICAgICAgIHRoaXMuY2xlYW5pbmcgPSB7IHR5cGU6ICdvdGhlcicgfTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zdHJpbmdzKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZCA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQHN0cmluZycsXG4gICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSYW5nZXM6IG51bGwsXG4gICAgICAgICAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgdXBwZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxvd2VyOiAwLFxuICAgICAgICAgICAgICAgICAgICBvdGhlcjogMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuY29udmVydCh0aGlzLmNsZWFuKHZhbHVlKSk7XG4gICAgICAgICAgICBzdHJpbmdzW2tleV0gPSB0aGlzLmZpZWxkLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5lcnJvcnMsXG4gICAgICAgICAgICBlbnRyaWVzOiB0aGlzLmVudHJpZXMsXG4gICAgICAgICAgICBjb21tZW50czogdGhpcy5jb21tZW50cyxcbiAgICAgICAgICAgIHN0cmluZ3MsXG4gICAgICAgICAgICBwcmVhbWJsZTogdGhpcy5wcmVhbWJsZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJlc2VydmUoc3RhcnQsIGVuZCwgcmVhc29uKSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFlbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMgPSB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzLmZpbHRlcihyYW5nZSA9PiByYW5nZS5zdGFydCA8IHN0YXJ0IHx8IHJhbmdlLmVuZCA+IGVuZClcbiAgICAgICAgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMuZmluZChyYW5nZSA9PiByYW5nZS5zdGFydCA8PSBzdGFydCAmJiByYW5nZS5lbmQgPj0gZW5kKSkgcmV0dXJuXG4gICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzICYmIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXNbdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcy5sZW5ndGggLSAxXVxuICAgICAgICAgIGlmIChzdGFydCA8IGxhc3Quc3RhcnQpIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7Li4ubGFzdCwgbmV3OiB7IHN0YXJ0LCBlbmQsIHJlYXNvbiB9LCB0ZXh0OiB0aGlzLmZpZWxkLnRleHR9KSlcbiAgICAgICAgfVxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzLnB1c2goeyBzdGFydCwgZW5kLCByZWFzb24gfSk7XG4gICAgfVxuICAgIHBhcnNlQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgdGhpcy5jaHVuayA9IGNodW5rLnRleHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgYmliID0gYmlidGV4LnBhcnNlKGNodW5rLnRleHQsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zKSwgeyBjb21iaW5pbmdEaWFjcml0aWNzOiB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy5jb21tYW5kcyB9KSk7XG4gICAgICAgICAgICBpZiAoYmliLmtpbmQgIT09ICdCaWJsaW9ncmFwaHknKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLnNob3coYmliKSk7XG4gICAgICAgICAgICBiaWIgPSB0aGlzLmNsZWFuKGJpYik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eSBvZiBiaWIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudGl0eS5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VudHJ5JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnQnJhY2VkQ29tbWVudCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmVDb21tZW50JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUHJlYW1ibGVFeHByZXNzaW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVydChlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0cmluZ0RlY2xhcmF0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTm9uRW50cnlUZXh0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiaWI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKCFlcnIubG9jYXRpb24pXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgbGluZTogZXJyLmxvY2F0aW9uLnN0YXJ0LmxpbmUgKyBjaHVuay5vZmZzZXQubGluZSxcbiAgICAgICAgICAgICAgICBjb2x1bW46IGVyci5sb2NhdGlvbi5zdGFydC5jb2x1bW4sXG4gICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLmNodW5rLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG93KG8pIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIHByZWZlci10ZW1wbGF0ZVxuICAgICAgICBsZXQgdGV4dCA9IEpTT04uc3RyaW5naWZ5KG8pO1xuICAgICAgICBpZiAodGhpcy5jaHVuaylcbiAgICAgICAgICAgIHRleHQgKz0gJ1xcbicgKyB0aGlzLmNodW5rLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHRleHQodmFsdWUgPSAnJykge1xuICAgICAgICByZXR1cm4geyBraW5kOiAnVGV4dCcsIHZhbHVlLCBtb2RlOiAndGV4dCcgfTtcbiAgICB9XG4gICAgZXJyb3IoZXJyLCByZXR1cm52YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICAgIHJldHVybiByZXR1cm52YWx1ZTtcbiAgICB9XG4gICAgY29uZGVuc2Uobm9kZSkge1xuICAgICAgICAvLyBhcHBseSBjbGVhbmluZyB0byByZXN1bHRpbmcgY2hpbGRyZW5cbiAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUubWFwKGNoaWxkID0+IHRoaXMuY2xlYW4oY2hpbGQpKTtcbiAgICAgICAgLy8gdW5wYWNrIHJlZHVuZGFudCBibG9ja3NcbiAgICAgICAgbm9kZS52YWx1ZSA9IG5vZGUudmFsdWUucmVkdWNlKChhY2MsIGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQua2luZCA9PT0gJ0Jsb2NrJyAmJiAhY2hpbGQuY2FzZSAmJiBPYmplY3Qua2V5cyhjaGlsZC5tYXJrdXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoY2hpbGQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICAvLyBjb25kZW5zZSB0ZXh0IG5vZGVzIHRvIG1ha2Ugd2hvbGUgd29yZHMgZm9yIHNlbnRlbmNlIGNhc2luZ1xuICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZS5yZWR1Y2UoKGFjYywgY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChhY2MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgYWNjLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYXN0ID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBub2RlLnZhbHVlW2kgKyAxXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gPT09ICdzdHJpY3QnICYmIHRoaXMub25seUNhc2VQcm90ZWN0ZWQobGFzdCkgJiYgY2hpbGQua2luZCA9PT0gJ1RleHQnICYmICFjaGlsZC52YWx1ZS5tYXRjaChwcmVzZXJ2ZUNhc2UuaXNDYXNlU2Vuc2l0aXZlKSAmJiB0aGlzLm9ubHlDYXNlUHJvdGVjdGVkKG5leHQpKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0LmtpbmQgPT09ICdCbG9jaycgJiYgY2hpbGQua2luZCA9PT0gJ0Jsb2NrJyAmJiBPYmplY3Qua2V5cyhsYXN0Lm1hcmt1cCkuc29ydCgpLmpvaW4oJy8nKSA9PT0gT2JqZWN0LmtleXMoY2hpbGQubWFya3VwKS5zb3J0KCkuam9pbignLycpKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZSA9IGxhc3QudmFsdWUuY29uY2F0KGNoaWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsYXN0LmtpbmQgPT09ICdUZXh0JyAmJiBjaGlsZC5raW5kID09PSAnVGV4dCcgJiYgbGFzdC5tb2RlID09PSBjaGlsZC5tb2RlKSB7XG4gICAgICAgICAgICAgICAgbGFzdC52YWx1ZSArPSBjaGlsZC52YWx1ZTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGFzdC5zb3VyY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjYy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgb25seUNhc2VQcm90ZWN0ZWQobm9kZSkge1xuICAgICAgICByZXR1cm4gKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbm9kZS5raW5kKSA9PT0gJ0Jsb2NrJyAmJiBub2RlLmNhc2UgPT09ICdwcm90ZWN0JyAmJiBPYmplY3Qua2V5cyhub2RlLm1hcmt1cCkuam9pbignLycpID09PSAnJztcbiAgICB9XG4gICAgYXJndW1lbnQobm9kZSwga2luZCkge1xuICAgICAgICBpZiAoIW5vZGUuYXJndW1lbnRzIHx8ICFub2RlLmFyZ3VtZW50cy5yZXF1aXJlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gKGtpbmQgPT09ICdub25lJyk7XG4gICAgICAgIC8vIGV4cGVjdCAnbicgdGV4dCBhcmd1bWVudHNcbiAgICAgICAgaWYgKHR5cGVvZiBraW5kID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aCAhPT0ga2luZClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgdGhlIG9ubHkgb25lXG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5yZXF1aXJlZC5sZW5ndGggIT09IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIGxvb3NlIGNoZWNraW5nIGZvciB0ZXh0XG4gICAgICAgIGlmIChraW5kID09PSAndGV4dCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gbm9kZS5hcmd1bWVudHMucmVxdWlyZWRbMF07XG4gICAgICAgICAgICBpZiAoZmlyc3Qua2luZCA9PT0gJ0Jsb2NrJyAmJiBmaXJzdC52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3QudmFsdWVbMF0ua2luZCA9PT0gJ1RleHQnKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3QudmFsdWVbMF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gc3RyaWN0IGtpbmQgY2hlY2tcbiAgICAgICAgICAgIGtpbmQgPSAnVGV4dCc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGZpcnN0IGFyZ3VtZW50IGlmIGl0J3MgdGhlIG9ubHkgb25lIGFuZCBpcyBvZiB0aGUgc3BlY2lmaWVkIGtpbmRcbiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkLmxlbmd0aCAhPT0gMSB8fCBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5raW5kICE9PSBraW5kKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5hcmd1bWVudHMucmVxdWlyZWRbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjbGVhbihub2RlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKVxuICAgICAgICAgICAgcmV0dXJuIG5vZGUubWFwKGNoaWxkID0+IHRoaXMuY2xlYW4oY2hpbGQpKTtcbiAgICAgICAgZGVsZXRlIG5vZGUubG9jO1xuICAgICAgICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgICAgICAgICAgY2FzZSAnSW5saW5lTWF0aCc6XG4gICAgICAgICAgICBjYXNlICdEaXNwbGF5TWF0aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fYmxvY2sobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdFbnZpcm9ubWVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fZW52aXJvbm1lbnQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdCbG9jayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fYmxvY2sobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdCaWJsaW9ncmFwaHknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX2JpYihub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbl9jb21tYW5kKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRGlhY3JpdGljQ29tbWFuZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fZGlhY3JpdGljKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRW50cnknOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX2VudHJ5KG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnRmllbGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmF3ID8gbm9kZSA6IHRoaXMuY2xlYW5fZmllbGQobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdTdHJpbmdEZWNsYXJhdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fc3RyaW5nZGVjbChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1N0cmluZ1JlZmVyZW5jZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fc3RyaW5ncmVmKG5vZGUpO1xuICAgICAgICAgICAgY2FzZSAnU3Vic2NyaXB0Q29tbWFuZCc6XG4gICAgICAgICAgICBjYXNlICdTdXBlcnNjcmlwdENvbW1hbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX3NjcmlwdChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1N5bWJvbENvbW1hbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuX3N5bWJvbChub2RlKTtcbiAgICAgICAgICAgIGNhc2UgJ1ByZWFtYmxlRXhwcmVzc2lvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW5fcHJlYW1ibGUobm9kZSk7XG4gICAgICAgICAgICBjYXNlICdOdW1iZXInOlxuICAgICAgICAgICAgY2FzZSAnVGV4dCc6XG4gICAgICAgICAgICBjYXNlICdCcmFjZWRDb21tZW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVDb21tZW50JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFBhcnNlckVycm9yKGBubyBjbGVhbnVwIG1ldGhvZCBmb3IgJHt0aGlzLnNob3cobm9kZSl9YCwgbm9kZSksIHRoaXMudGV4dCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhbl9wcmVhbWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuaW5fcHJlYW1ibGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBjbGVhbiA9IHRoaXMuY2xlYW4obm9kZS52YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5fcHJlYW1ibGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGNsZWFuO1xuICAgIH1cbiAgICBjbGVhbl9iaWIobm9kZSkge1xuICAgICAgICBub2RlLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gY2hpbGQua2luZCAhPT0gJ05vbkVudHJ5VGV4dCcpLm1hcChjaGlsZCA9PiB0aGlzLmNsZWFuKGNoaWxkKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zdHJpbmdkZWNsKG5vZGUpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdzW25vZGUubmFtZS50b1VwcGVyQ2FzZSgpXSA9IG5vZGUudmFsdWU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zdHJpbmdyZWYobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY29uc3QgX3N0cmluZyA9IHRoaXMuc3RyaW5nc1tuYW1lXVxuICAgICAgICAgICAgfHwgdGhpcy5vcHRpb25zLnN0cmluZ3NbbmFtZV1cbiAgICAgICAgICAgIHx8IHRoaXMuZGVmYXVsdF9zdHJpbmdzW25hbWVdXG4gICAgICAgICAgICB8fCAoZmllbGRzLnVuYWJicmV2LmluY2x1ZGVzKHRoaXMuY2xlYW5pbmcubmFtZSkgJiYgKChfYSA9IHRoaXMub3B0aW9ucy51bmFiYnJldmlhdGVbbmFtZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSAmJiBbdGhpcy50ZXh0KHRoaXMub3B0aW9ucy51bmFiYnJldmlhdGVbbmFtZV0udGV4dCldKTtcbiAgICAgICAgaWYgKCFfc3RyaW5nKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudW5yZXNvbHZlZFN0cmluZ3NbbmFtZV0pXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IG1lc3NhZ2U6IGBVbnJlc29sdmVkIEBzdHJpbmcgcmVmZXJlbmNlICR7SlNPTi5zdHJpbmdpZnkobm9kZS5uYW1lKX1gIH0pO1xuICAgICAgICAgICAgdGhpcy51bnJlc29sdmVkU3RyaW5nc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAga2luZDogJ0Jsb2NrJyxcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzdHJpbmcgaXNuJ3QgZm91bmQsIGFkZCBpdCBhcy1pcyBidXQgZXhlbXB0IGl0IGZyb20gc2VudGVuY2UgY2FzaW5nXG4gICAgICAgICAgICBjYXNlOiBfc3RyaW5nID8gdW5kZWZpbmVkIDogJ3ByZXNlcnZlJyxcbiAgICAgICAgICAgIG1hcmt1cDoge30sXG4gICAgICAgICAgICB2YWx1ZTogX3N0cmluZyA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX3N0cmluZykpIDogW3RoaXMudGV4dChub2RlLm5hbWUpXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFuX2VudHJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2hvcnRqb3VybmFscyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIG5vZGUuZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzLnVuYWJicmV2LmluY2x1ZGVzKGZpZWxkLm5hbWUpICYmIEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJiciA9IGZpZWxkLnZhbHVlLm1hcCh2ID0+IHYuc291cmNlKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb3VybmFsID0gdGhpcy5vcHRpb25zLnVuYWJicmV2aWF0ZVthYmJyXTtcbiAgICAgICAgICAgICAgICBpZiAoam91cm5hbCkge1xuICAgICAgICAgICAgICAgICAgICBzaG9ydGpvdXJuYWxzLnB1c2goT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSkpLCB7IG5hbWU6ICdzaG9ydGpvdXJuYWwnIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGpvdXJuYWwuYXN0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5vZGUuZmllbGRzID0gbm9kZS5maWVsZHMuY29uY2F0KHNob3J0am91cm5hbHMpLm1hcChjaGlsZCA9PiB0aGlzLmNsZWFuKGNoaWxkKSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBzdGFydENsZWFuaW5nKG5hbWUpIHtcbiAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpZWxkcy50aXRsZS5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhbmluZyA9IHsgdHlwZTogJ3RpdGxlJywgbmFtZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpZWxkcy5jcmVhdG9yLmluY2x1ZGVzKG5hbWUucmVwbGFjZSgvcyQvLCAnJykpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFuaW5nID0geyB0eXBlOiAnY3JlYXRvcicsIG5hbWU6IG5hbWUucmVwbGFjZSgvcyQvLCAnJykgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW5pbmcgPSB7IHR5cGU6ICdvdGhlcicsIG5hbWUgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJpcE5vQ2FzZShub2RlLCBzdHJpcCwgcHJlc2VydmUpIHtcbiAgICAgICAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ1JlZ3VsYXJDb21tYW5kJzpcbiAgICAgICAgICAgICAgICAvLyBhIGJpdCBjaGVhdHkgdG8gYXNzdW1lIHRoZXNlIHRvIGJlIG5vY2FzZWQsIGJ1dCBpdCdzIGp1c3QgbW9yZSBsaWtlbHkgdG8gYmUgd2hhdCBwZW9wbGUgd2FudFxuICAgICAgICAgICAgICAgIGlmIChbJ2Noc2YnLCAnYmlic3RyaW5nJywgJ2NpdGUnXS5pbmNsdWRlcyhub2RlLmNvbW1hbmQpKVxuICAgICAgICAgICAgICAgICAgICBzdHJpcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMucmVxdWlyZWQubWFwKGFyZyA9PiB0aGlzLnN0cmlwTm9DYXNlKGFyZywgc3RyaXAsIHByZXNlcnZlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCbG9jayc6XG4gICAgICAgICAgICBjYXNlICdJbmxpbmVNYXRoJzpcbiAgICAgICAgICAgIGNhc2UgJ0Rpc3BsYXlNYXRoJzpcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAgJiYgbm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNlcnZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNhc2UgPSAncHJlc2VydmUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBub2RlLnZhbHVlLm1hcCh2ID0+IHRoaXMuc3RyaXBOb0Nhc2Uodiwgc3RyaXAgfHwgbm9kZS5jYXNlID09PSAncHJvdGVjdCcsIHByZXNlcnZlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdGaWVsZCc6XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS52YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmFsdWUubWFwKHYgPT4gdGhpcy5zdHJpcE5vQ2FzZSh2LCBzdHJpcCwgcHJlc2VydmUpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1ZlcmJhdGltRmllbGQobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLm9wdGlvbnMudmVyYmF0aW1GaWVsZHMuZmluZChwID0+ICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpID8gbmFtZSA9PT0gcCA6IG5hbWUubWF0Y2gocCkpO1xuICAgIH1cbiAgICBjbGVhbl9maWVsZChub2RlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRDbGVhbmluZyhub2RlLm5hbWUpO1xuICAgICAgICB0aGlzLnN0cmlwTm9DYXNlKG5vZGUsICF0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gfHwgdGhpcy5pc1ZlcmJhdGltRmllbGQobm9kZS5uYW1lKSwgdGhpcy5vcHRpb25zLnNlbnRlbmNlQ2FzZS5sZW5ndGggPT09IDApO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuY29uZGVuc2Uobm9kZSk7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9zY3JpcHQobm9kZSkge1xuICAgICAgICBsZXQgbSwgdmFsdWUsIHNpbmdsZWNoYXI7XG4gICAgICAgIC8vIHJlY29nbml6ZSBjb21iaW5lZCBmb3JtcyBsaWtlIFxcXlxcY2lyY1xuICAgICAgICBpZiAoc2luZ2xlY2hhciA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtub2RlLnNvdXJjZV0pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHNpbmdsZWNoYXIpO1xuICAgICAgICBpZiAoKG0gPSBub2RlLnNvdXJjZS5tYXRjaCgvXihbXFxeX10pKFtee31dKykkLykpICYmICgoc2luZ2xlY2hhciA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHttWzFdfSR7bVsyXX1gXSkgfHwgKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7bVsxXX17JHttWzJdfX1gXSkpKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChzaW5nbGVjaGFyKTtcbiAgICAgICAgaWYgKChtID0gbm9kZS5zb3VyY2UubWF0Y2goL14oW1xcXl9dKVxceyhbXnt9XSspXFx9JC8pKSAmJiAoKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7bVsxXX0ke21bMl19YF0pIHx8IChzaW5nbGVjaGFyID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2Ake21bMV19eyR7bVsyXX19YF0pKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoc2luZ2xlY2hhcik7XG4gICAgICAgIGNvbnN0IGNtZCA9IG5vZGUua2luZCA9PT0gJ1N1cGVyc2NyaXB0Q29tbWFuZCcgPyAnXicgOiAnXyc7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgJiYgKHNpbmdsZWNoYXIgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7Y21kfSR7bm9kZS52YWx1ZX1gXSB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYCR7Y21kfXske25vZGUudmFsdWV9fWBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChzaW5nbGVjaGFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5vZGUudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFt0aGlzLnRleHQobm9kZS52YWx1ZSldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtub2RlLnZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RlID0gbm9kZS5raW5kID09PSAnU3VwZXJzY3JpcHRDb21tYW5kJyA/ICdzdXAnIDogJ3N1Yic7XG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICBtYXJrdXA6IHsgW21vZGVdOiB0cnVlIH0sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFuX2Vudmlyb25tZW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jb25kZW5zZShub2RlKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIG5lZWRzUHJvdGVjdGlvbih3b3JkKSB7XG4gICAgICAgIHJldHVybiAhd29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzVXBwZXIpICYmIHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmhhc0xvd2VyKTtcbiAgICB9XG4gICAgY2xlYW5fYmxvY2sobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY29uZGVuc2Uobm9kZSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY2FzZVByb3RlY3Rpb24gIT09ICdzdHJpY3QnICYmICgoX2EgPSB0aGlzLmNsZWFuaW5nKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudHlwZSkgPT09ICd0aXRsZScgJiYgbm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgIC8vIHRlc3Qgd2hldGhlciB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBza2lwcGluZyBjYXNlIHByb3RlY3Rpb24gYmVjYXVzZSBpdCBjb250YWlucyBhbGwgd29yZHMgdGhhdCB3aWxsIGJlIHByZXNlcnZlZCBhbnl3YXkgd2hlbiBjb252ZXJ0aW5nIGJhY2sgdG8gVGl0bGUgQ2FzZVxuICAgICAgICAgICAgbGV0IHByZXNlcnZlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5raW5kID09PSAnVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjaGlsZC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXNlcnZlID0gIXZhbHVlLm1hdGNoKHByZXNlcnZlQ2FzZS5pc0Nhc2VTZW5zaXRpdmUpIHx8ICF2YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbmQod29yZCA9PiB0aGlzLm5lZWRzUHJvdGVjdGlvbih3b3JkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXByZXNlcnZlKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmVzZXJ2ZSlcbiAgICAgICAgICAgICAgICBub2RlLmNhc2UgPSAncHJlc2VydmUnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW21hcmt1cCwgb25dIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUubWFya3VwKSkge1xuICAgICAgICAgICAgICAgIGlmICghb24pXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBub2RlLm1hcmt1cFttYXJrdXBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBjbGVhbl9kaWFjcml0aWMobm9kZSkge1xuICAgICAgICBjb25zdCBjaGFyID0gbm9kZS5kb3RsZXNzID8gYFxcXFwke25vZGUuY2hhcmFjdGVyfWAgOiBub2RlLmNoYXJhY3RlcjtcbiAgICAgICAgbGV0IHVuaWNvZGUgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFwke25vZGUubWFya317JHtjaGFyfX1gXVxuICAgICAgICAgICAgfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLm1hcmt9JHtjaGFyfWBdXG4gICAgICAgICAgICB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYHtcXFxcJHtub2RlLm1hcmt9ICR7Y2hhcn19YF1cbiAgICAgICAgICAgIHx8IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtge1xcXFwke25vZGUubWFya30ke2NoYXJ9fWBdXG4gICAgICAgICAgICB8fCB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFwke25vZGUubWFya30gJHtjaGFyfWBdO1xuICAgICAgICBpZiAoIXVuaWNvZGUgJiYgIW5vZGUuZG90bGVzcyAmJiBub2RlLmNoYXJhY3Rlci5sZW5ndGggPT09IDEgJiYgdW5pY29kZTJsYXRleF8xLmRpYWNyaXRpY3MudG91bmljb2RlW25vZGUubWFya10pXG4gICAgICAgICAgICB1bmljb2RlID0gbm9kZS5jaGFyYWN0ZXIgKyB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy50b3VuaWNvZGVbbm9kZS5tYXJrXTtcbiAgICAgICAgaWYgKCF1bmljb2RlICYmICF0aGlzLmluX3ByZWFtYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFRlWEVycm9yKGBVbmhhbmRsZWQgXFxcXCR7bm9kZS5tYXJrfXske2NoYXJ9fWAsIG5vZGUsIHRoaXMuY2h1bmspLCB0aGlzLnRleHQoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgfVxuICAgIGNsZWFuX3N5bWJvbChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmNvbW1hbmQgPT09ICdcXFxcJylcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoJ1xcbicpO1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfWBdIHx8IG5vZGUuY29tbWFuZCk7XG4gICAgfVxuICAgIGZpcnN0X3RleHRfYmxvY2sobm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChjaGlsZC5raW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnZhbHVlID8gbm9kZSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Jsb2NrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMuZmlyc3RfdGV4dF9ibG9jayhjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsZWFuX2NvbW1hbmQobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGxldCBhcmcsIHVuaWNvZGU7XG4gICAgICAgIGlmICh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W25vZGUuc291cmNlXSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgIHN3aXRjaCAobm9kZS5jb21tYW5kKSB7XG4gICAgICAgICAgICBjYXNlICduZXdjb21tYW5kJzpcbiAgICAgICAgICAgICAgICBpZiAoKChfYSA9IG5vZGUuYXJndW1lbnRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWlyZWQubGVuZ3RoKSA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5raW5kID09PSAnQmxvY2snXG4gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLnZhbHVlLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZVswXS5raW5kID09PSAnUmVndWxhckNvbW1hbmQnXG4gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzFdLmtpbmQgPT09ICdCbG9jaycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdjb21tYW5kc1tub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZVswXS5jb21tYW5kXSA9IG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzFdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCduZXdjb21tYW5kPycsIEpTT04uc3RyaW5naWZ5KG5vZGUsIG51bGwsIDIpKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsga2luZDogJ01hcmt1cCcsIHZhbHVlOiAnPGxpPicsIHNvdXJjZTogbm9kZS5zb3VyY2UgfTtcbiAgICAgICAgICAgIGNhc2UgJ2ZyYWMnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsIDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcmdbMF0ua2luZCA9PT0gJ1RleHQnICYmIGFyZ1sxXS5raW5kID09PSAnVGV4dCcgJiYgKHVuaWNvZGUgPSB1bmljb2RlMmxhdGV4XzEubGF0ZXhbYFxcXFxmcmFjeyR7YXJnWzBdLnZhbHVlfX17JHthcmdbMV0udmFsdWV9fWBdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlOiAncHJvdGVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtpbmQ6ICdCbG9jaycsIG1hcmt1cDogeyBzdXA6IHRydWUgfSwgdmFsdWU6IFthcmdbMF1dIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KCdcXHUyMDQ0JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBraW5kOiAnQmxvY2snLCBtYXJrdXA6IHsgc3ViOiB0cnVlIH0sIHZhbHVlOiBbYXJnWzFdXSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICBjYXNlICd2c3BhY2UnOlxuICAgICAgICAgICAgY2FzZSAndnBoYW50b20nOlxuICAgICAgICAgICAgY2FzZSAncGF0aCc6XG4gICAgICAgICAgICBjYXNlICdhZnRlcmdyb3VwJzpcbiAgICAgICAgICAgIGNhc2UgJ2lnbm9yZXNwYWNlcyc6XG4gICAgICAgICAgICBjYXNlICdyZWxheCc6XG4gICAgICAgICAgICBjYXNlICdub29wc29ydCc6XG4gICAgICAgICAgICBjYXNlICdpZmRlZmluZWQnOlxuICAgICAgICAgICAgY2FzZSAnRGVjbGFyZVByZWZDaGFycyc6XG4gICAgICAgICAgICBjYXNlICdlbHNlJzpcbiAgICAgICAgICAgIGNhc2UgJ2ZpJzpcbiAgICAgICAgICAgIGNhc2UgJ21ha2VhdGxldHRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpO1xuICAgICAgICAgICAgY2FzZSAnRWxzZXZpZXJHbHlwaCc6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ1RleHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF0pXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxNikpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjaHNmJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWJzdHJpbmcnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2l0ZSc6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0c3VwZXJzY3JpcHQnOlxuICAgICAgICAgICAgY2FzZSAnc3AnOlxuICAgICAgICAgICAgICAgIGlmICgoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnVGV4dCcpKSAmJiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXnske2FyZ319YF0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndGV4dHN1YnNjcmlwdCc6XG4gICAgICAgICAgICBjYXNlICdzYic6XG4gICAgICAgICAgICAgICAgaWYgKChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpICYmICh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2BfeyR7YXJnfX1gXSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0ZXh0c2MnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5xdW90ZSc6XG4gICAgICAgICAgICBjYXNlICdta2JpYnF1b3RlJzpcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RleHRiZic6XG4gICAgICAgICAgICBjYXNlICdta2JpYmJvbGQnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICAgICAgICBjYXNlICdzdWJzZWN0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ3N1YnN1YnNlY3Rpb24nOlxuICAgICAgICAgICAgY2FzZSAnc3Vic3Vic3Vic2VjdGlvbic6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ0Jsb2NrJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdta2JpYml0YWxpYyc6XG4gICAgICAgICAgICBjYXNlICdta2JpYmVtcGgnOlxuICAgICAgICAgICAgY2FzZSAndGV4dGl0JzpcbiAgICAgICAgICAgIGNhc2UgJ2VtcGgnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdCbG9jaycpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHsga2luZDogJ0Jsb2NrJywgbWFya3VwOiB7IGl0YWxpY3M6IHRydWUgfSwgdmFsdWU6IFt0aGlzLnRleHQoYXJnKV0gfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdiaWJjeXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3VtZW50KG5vZGUsICdub25lJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hzcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdtYXRocm0nOlxuICAgICAgICAgICAgY2FzZSAndGV4dHJtJzpcbiAgICAgICAgICAgIGNhc2UgJ29jaXJjJzpcbiAgICAgICAgICAgIGNhc2UgJ21ib3gnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSB8fCAobm9kZS5jb21tYW5kID09PSAnaHNwYWNlJyA/ICcgJyA6IGFyZykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghbm9kZS5hcmd1bWVudHMucmVxdWlyZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGVhbihhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIGp1c3QgdGFrZSB0aGUgVVJMPyBOb3QgdGhlIGxhYmVsP1xuICAgICAgICAgICAgY2FzZSAnaHJlZic6XG4gICAgICAgICAgICAgICAgaWYgKGFyZyA9IHRoaXMuYXJndW1lbnQobm9kZSwgMikpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKGFyZ1swXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd1cmwnOlxuICAgICAgICAgICAgICAgIGlmIChhcmcgPSB0aGlzLmFyZ3VtZW50KG5vZGUsICdUZXh0JykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoYXJnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnQmxvY2snKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYXJnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NsJzpcbiAgICAgICAgICAgIGNhc2UgJ2VtJzpcbiAgICAgICAgICAgIGNhc2UgJ2l0JzpcbiAgICAgICAgICAgIGNhc2UgJ2l0c2hhcGUnOlxuICAgICAgICAgICAgY2FzZSAnYmYnOlxuICAgICAgICAgICAgY2FzZSAnYmZzZXJpZXMnOlxuICAgICAgICAgICAgY2FzZSAnc2MnOlxuICAgICAgICAgICAgY2FzZSAnc2NzaGFwZSc6XG4gICAgICAgICAgICBjYXNlICd0dCc6XG4gICAgICAgICAgICBjYXNlICdybSc6XG4gICAgICAgICAgICBjYXNlICdzZic6XG4gICAgICAgICAgICBjYXNlICd2ZXJiJzpcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGVkIGluIHRoZSBncmFtbWFyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpO1xuICAgICAgICAgICAgLy8gd291bGRuJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGggdGhlc2VcbiAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgIGNhc2UgJ3Bhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgnXFxuXFxuJyk7XG4gICAgICAgICAgICBjYXNlICdjeXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3VtZW50KG5vZGUsICdub25lJykpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BvbGhrJzpcbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHRoaXMuYXJndW1lbnQobm9kZSwgJ3RleHQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUgKyAnXFx1MDMyOCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCdcXHUwMzI4Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChub2RlLmtpbmQgPT09ICdSZWd1bGFyQ29tbWFuZCcgJiYgdGhpcy5uZXdjb21tYW5kc1tub2RlLmNvbW1hbmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsZWFuKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5uZXdjb21tYW5kc1tub2RlLmNvbW1hbmRdKSksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZTJsYXRleF8xLmRpYWNyaXRpY3MudG91bmljb2RlW25vZGUuY29tbWFuZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMucmVxdWlyZWQgPSB0aGlzLmNsZWFuKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcmd1bWVudHMucmVxdWlyZWQubGVuZ3RoID09PSAxICYmIG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLmtpbmQgPT09ICdUZXh0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gaWRlYSB3aHkgSSBjYW4ndCBqdXN0IHN0cmFpZ2h0IHJldHVybiB0aGlzIGJ1dCB0eXBlc2NyaXB0IGp1c3Qgd29uJ3Qgc2h1dCB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ0Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyazogbm9kZS5jb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyOiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdGxlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jOiBub2RlLmFyZ3VtZW50cy5yZXF1aXJlZFswXS5sb2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oYmxvY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJsb2NrID0gdGhpcy5maXJzdF90ZXh0X2Jsb2NrKG5vZGUuYXJndW1lbnRzLnJlcXVpcmVkWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpeGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jay52YWx1ZSA9IGJsb2NrLnZhbHVlLnJlZHVjZSgodmFsdWUsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXhlZCAmJiBjaGlsZC5raW5kID09PSAnVGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKHsga2luZDogJ0RpYWNyaXRpY0NvbW1hbmQnLCBtYXJrOiBub2RlLmNvbW1hbmQsIGNoYXJhY3RlcjogY2hpbGQudmFsdWVbMF0gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnB1c2goT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjaGlsZCksIHsgdmFsdWU6IGNoaWxkLnZhbHVlLnN1YnN0cmluZygxKSB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS5hcmd1bWVudHMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJsaW5lIHdpdGhvdXQgYXJndW1lbnRzIGRvZXNuJ3Qgc2VlbSB0byByZW5kZXIgaW4gTGFUZVhcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbW1hbmQgPT09ICdvdmVybGluZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xlYW4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6ICdCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW3RoaXMudGV4dCgnICcgKyB1bmljb2RlMmxhdGV4XzEuZGlhY3JpdGljcy50b3VuaWNvZGVbbm9kZS5jb21tYW5kXSldLmNvbmNhdChub2RlLmFyZ3VtZW50cy5yZXF1aXJlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtub2RlLnNvdXJjZV0gfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2Ake25vZGUuc291cmNlfXt9YF0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCh1bmljb2RlID0gdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLmNvbW1hbmR9YF0gfHwgdW5pY29kZTJsYXRleF8xLmxhdGV4W2BcXFxcJHtub2RlLmNvbW1hbmR9e31gXSkgJiYgdGhpcy5hcmd1bWVudChub2RlLCAnbm9uZScpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGlmICgoYXJnID0gdGhpcy5hcmd1bWVudChub2RlLCAnVGV4dCcpKSAmJiAodW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgXFxcXCR7bm9kZS5jb21tYW5kfXske2FyZ319YF0pKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluX3ByZWFtYmxlKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dChub2RlLnNvdXJjZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBUZVhFcnJvcihgVW5oYW5kbGVkIGNvbW1hbmQ6ICR7bm9kZS5jb21tYW5kfWAgKyB0aGlzLnNob3cobm9kZSksIG5vZGUsIHRoaXMuY2h1bmspLCB0aGlzLnRleHQoKSk7XG4gICAgfVxuICAgIHByZXNlcnZlQ2FzZSh3b3JkKSB7XG4gICAgICAgIC8vIHdvcmQgPSB3b3JkLnJlcGxhY2UobmV3IFJlZ0V4cChgXCJbJHt0aGlzLm1hcmt1cC5lbnF1b3RlLm9wZW59JHt0aGlzLm1hcmt1cC5lbnF1b3RlLmNsb3NlfTooKV1gLCAnZycpLCAnJylcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCF3b3JkLnRyaW0oKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5oYXNBbHBoYU51bSkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgd29yZCA9IHdvcmQucmVwbGFjZSgvW1xcL+KAmSfigJ06KCldL2csICcnKTtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdJJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAod29yZC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh3b3JkLnJlcGxhY2UocHJlc2VydmVDYXNlLm5vdENhc2VTZW5zaXRpdmUpID09PSAnJylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gd29yZCA9IHdvcmQucmVwbGFjZShwcmVzZXJ2ZUNhc2Uubm90QWxwaGFOdW0sICcnKVxuICAgICAgICAvLyBzaW1wbGUgY2FwIGF0IHN0YXJ0IG9mIGZpZWxkXG4gICAgICAgIGlmICh3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5sZWFkaW5nQ2FwKSAmJiAoKF9iID0gKF9hID0gdGhpcy5maWVsZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRleHQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuYWxsQ2FwcykpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHdvcmQubGVuZ3RoID4gMSAmJiB3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5qb2luZWQpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzVXBwZXIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmICh3b3JkLm1hdGNoKHByZXNlcnZlQ2FzZS5pc051bWJlcikpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb252ZXJ0KG5vZGUpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpXG4gICAgICAgICAgICByZXR1cm4gbm9kZS5tYXAoY2hpbGQgPT4gdGhpcy5jb252ZXJ0KGNoaWxkKSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmF3ICYmIHRoaXMuZmllbGQpXG4gICAgICAgICAgICBub2RlID0gdGhpcy50ZXh0KG5vZGUuc291cmNlKTtcbiAgICAgICAgc3dpdGNoIChub2RlLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ01hcmt1cCc6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCArPSBub2RlLnZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQnJhY2VkQ29tbWVudCc6XG4gICAgICAgICAgICBjYXNlICdMaW5lQ29tbWVudCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cy5wdXNoKG5vZGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRW50cnknOlxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydF9lbnRyeShub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0X251bWJlcihub2RlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY29udmVydF90ZXh0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmxvY2snOlxuICAgICAgICAgICAgY2FzZSAnSW5saW5lTWF0aCc6XG4gICAgICAgICAgICBjYXNlICdEaXNwbGF5TWF0aCc6XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZpZWxkID8gdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCA6IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJlc2VydmUgPSB0eXBlb2Ygc3RhcnQgPT09ICdudW1iZXInICYmIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0X2Jsb2NrKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChwcmVzZXJ2ZSAmJiAobm9kZS5jYXNlIHx8IG5vZGUua2luZC5lbmRzV2l0aCgnTWF0aCcpKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZShzdGFydCwgdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCk7IC8vICwgYGNvbnZlcnQtYmxvY2s6IGNhc2U9JHtub2RlLmNhc2V9LCBtYXRoPSR7bm9kZS5raW5kLmVuZHNXaXRoKCdNYXRoJyl9YClcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Vudmlyb25tZW50JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRfZW52aXJvbm1lbnQobm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQcmVhbWJsZUV4cHJlc3Npb24nOlxuICAgICAgICAgICAgICAgIHRoaXMucHJlYW1ibGUucHVzaChub2RlLnZhbHVlLm1hcChwcmVhbWJsZSA9PiBwcmVhbWJsZS5zb3VyY2UpLmpvaW4oJ1xcblxcbicpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Rpc3BsYXlNYXRoJzpcbiAgICAgICAgICAgIGNhc2UgJ0lubGluZU1hdGgnOlxuICAgICAgICAgICAgY2FzZSAnU3RyaW5nRGVjbGFyYXRpb24nOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihuZXcgUGFyc2VyRXJyb3IoYG5vIGNvbnZlcnRlciBmb3IgJHtub2RlLmtpbmR9OiAke3RoaXMuc2hvdyhub2RlKX1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzcGxpdE9uY2Uocywgc2VwLCBmcm9tRW5kID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBmcm9tRW5kID8gcy5sYXN0SW5kZXhPZihzZXApIDogcy5pbmRleE9mKHNlcCk7XG4gICAgICAgIHJldHVybiAoc3BsaXQgPCAwKSA/IFtzLCAnJ10gOiBbcy5zdWJzdHIoMCwgc3BsaXQpLCBzLnN1YnN0cihzcGxpdCArIDEpXTtcbiAgICB9XG4gICAgcGFyc2VOYW1lKG5hbWUpIHtcbiAgICAgICAgbGV0IHBhcnNlZCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdChtYXJrZXIuY29tbWEpO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoICYmICFwYXJ0cy5maW5kKHAgPT4gIXAubWF0Y2goL15bYS16XSsoLWkpPz0vaSkpKSB7IC8vIGV4dGVuZGVkIG5hbWUgZm9ybWF0XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWQgPSBwYXJzZWQgfHwge307XG4gICAgICAgICAgICAgICAgY29uc3QgW2F0dHIsIHZhbHVlXSA9IHRoaXMuc3BsaXRPbmNlKHBhcnQucmVwbGFjZShtYXJrZXIucmUuc3BhY2UsICcnKSwgJz0nKS5tYXAodiA9PiB2LnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmFtaWx5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5sYXN0TmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2dpdmVuLWknOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmluaXRpYWwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnaXZlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQuZmlyc3ROYW1lID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncHJlZml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5wcmVmaXggPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzdWZmaXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLnN1ZmZpeCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VzZXByZWZpeCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQudXNlcHJlZml4ID0gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2p1bmlvcmNvbW1hJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZC51c2VwcmVmaXggPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFthdHRyLnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gLyguKz8pXFxzKyh2ZXJlfHZvbnx2YW4gZGVufHZhbiBkZXJ8dmFufGRlfGRlbHxkZWxsYXxkZXJ8ZGl8ZGF8cGlldHJvfHZhbmRlbnxkdXxzdC58c3R8bGF8bG98dGVyfGJpbnxpYm58dGV8dGVufG9wfGJlbnxhbClcXHMrKC4rKS87XG4gICAgICAgIGxldCBtO1xuICAgICAgICBzd2l0Y2ggKHBhcnNlZCA/IDAgOiBwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IHBhcnNlZFxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxOiAvLyBuYW1lIHdpdGhvdXQgY29tbWFzXG4gICAgICAgICAgICAgICAgLy8gbGl0ZXJhbFxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIucmUubGl0ZXJhbE5hbWUudGVzdChwYXJ0c1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0geyBsaXRlcmFsOiBwYXJ0c1swXSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtID0gcGFydHNbMF0ucmVwbGFjZShtYXJrZXIucmUuc3BhY2UsICcgJykubWF0Y2gocHJlZml4KSkgeyAvLyBzcGxpdCBvbiBwcmVmaXhcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBtWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiBtWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IG1bM10sXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b3AtbGV2ZWwgXCJmaXJzdG5hbWUgbGFzdG5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBbZmlyc3ROYW1lLCBsYXN0TmFtZV0gPSB0aGlzLnNwbGl0T25jZShwYXJ0c1swXSwgbWFya2VyLnNwYWNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3ROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQgPSB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZCA9IHsgbGFzdE5hbWU6IGZpcnN0TmFtZSB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOiAvLyBsYXN0bmFtZSwgZmlyc3RuYW1lXG4gICAgICAgICAgICAgICAgcGFyc2VkID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0TmFtZTogcGFydHNbMF0sXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogcGFydHNbMV0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGxhc3RuYW1lLCBzdWZmaXgsIGZpcnN0bmFtZVxuICAgICAgICAgICAgICAgIHBhcnNlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdE5hbWU6IHBhcnRzWzBdLFxuICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IHBhcnRzWzFdLFxuICAgICAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHBhcnRzLnNsaWNlKDIpLmpvaW4obWFya2VyLmNvbW1hKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHBhcnNlZCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBwYXJzZWRba10gPSBtYXJrZXIuY2xlYW4odikudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICAgIGNvbnZlcnRfZW50cnkobm9kZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuZW50cnkgPSB7XG4gICAgICAgICAgICBrZXk6IG5vZGUuaWQsXG4gICAgICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgICBmaWVsZHM6IHt9LFxuICAgICAgICAgICAgY3JlYXRvcnM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVudHJpZXMucHVzaCh0aGlzLmVudHJ5KTtcbiAgICAgICAgLy8gb3JkZXIgdGhlc2UgZmlyc3QgZm9yIGxhbmd1YWdlLWRlcGVuZGVudCBzZW50ZW5jZSBjYXNpbmdcbiAgICAgICAgY29uc3Qgb3JkZXIgPSBbJ2xhbmdpZCcsICdoeXBoZW5hdGlvbicsICdsYW5ndWFnZSddO1xuICAgICAgICBub2RlLmZpZWxkcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpYSA9IG9yZGVyLmluZGV4T2YoYS5uYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGliID0gb3JkZXIuaW5kZXhPZihiLm5hbWUpO1xuICAgICAgICAgICAgaWYgKGlhID09PSAtMSAmJiBpYiA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7IC8vIGRvZXNuJ3QgbWF0dGVyIHJlYWxseVxuICAgICAgICAgICAgaWYgKGlhID09PSAtMSlcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIGlmIChpYiA9PT0gLTEpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgcmV0dXJuIGlhIC0gaWI7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgc2VudGVuY2VDYXNlID0gISF0aGlzLm9wdGlvbnMuc2VudGVuY2VDYXNlLmxlbmd0aDsgLy8gaWYgc2VudGVuY2VDYXNlIGlzIGVtcHR5LCBubyBzZW50ZW5jZSBjYXNpbmdcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBub2RlLmZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmtpbmQgIT09ICdGaWVsZCcpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IobmV3IFBhcnNlckVycm9yKGBFeHBlY3RlZCBGaWVsZCwgZ290ICR7ZmllbGQua2luZH1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDbGVhbmluZyhmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhdyAmJiB0aGlzLmZpZWxkVHlwZSAhPT0gJ2NyZWF0b3InKSB7XG4gICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW2ZpZWxkLm5hbWVdID0gWyBmaWVsZC52YWx1ZS5tYXAodiA9PiB2LnNvdXJjZSkuam9pbignJykgXVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmllbGQgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgICAgICAgICB1cHBlcjogMCxcbiAgICAgICAgICAgICAgICAgICAgbG93ZXI6IDAsXG4gICAgICAgICAgICAgICAgICAgIG90aGVyOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcHJlc2VydmVSYW5nZXM6IChzZW50ZW5jZUNhc2UgJiYgZmllbGRzLnRpdGxlLmluY2x1ZGVzKGZpZWxkLm5hbWUpKSA/IFtdIDogbnVsbCxcbiAgICAgICAgICAgICAgICBodG1sOiB0aGlzLm9wdGlvbnMuaHRtbEZpZWxkcy5pbmNsdWRlcyhmaWVsZC5uYW1lKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmVudHJ5LmZpZWxkc1t0aGlzLmZpZWxkLm5hbWVdID0gdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXSB8fCBbXTtcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgJ3RpdGxlID0gMjAyMCdcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZS5raW5kID09PSAnTnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW3RoaXMuZmllbGQubmFtZV0ucHVzaChmaWVsZC52YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnQoZmllbGQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ID0gdGhpcy5maWVsZC50ZXh0LnRyaW0oKTtcbiAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKC88XFwvKFthLXpdKT48XFwxPi9nLCAnJyk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQucmVwbGFjZSgvPChbYS16XSk+KFxccyopPFxcL1xcMT4vZywgJyQxJyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmllbGQudGV4dClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIC8vIGRpc2FibGUgc2VudGVuY2VDYXNpbmcgaWYgbm90IGFuIGVuZ2xpc2hcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5maWVsZC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGFuZ2lkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdoeXBoZW5hdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHNlbnRlbmNlQ2FzZSA9IHNlbnRlbmNlQ2FzZSAmJiB0aGlzLm9wdGlvbnMuc2VudGVuY2VDYXNlLmluY2x1ZGVzKHRoaXMuZmllbGQudGV4dC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbGFuZ3VhZ2UnOlxuICAgICAgICAgICAgICAgICAgICBzZW50ZW5jZUNhc2UgPSBzZW50ZW5jZUNhc2UgJiYgISEodGhpcy5maWVsZC50ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5maW5kKGxhbmcgPT4gdGhpcy5vcHRpb25zLnNlbnRlbmNlQ2FzZS5pbmNsdWRlcyhsYW5nKSkpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFwiZ3JvdXBzXCIgaXMgYSBqYWJyZWYgMy44KyBtb25zdHJvc2l0eVxuICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQubmFtZS5tYXRjaCgvXihrZXl3b3Jkcz98Z3JvdXBzKSQvKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRleHQgb2YgdGhpcy5maWVsZC50ZXh0LnNwbGl0KG1hcmtlci5jb21tYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuZmllbGRzW3RoaXMuZmllbGQubmFtZV0ucHVzaCh0ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNsZWFuaW5nLnR5cGUgPT09ICdjcmVhdG9yJykge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbnRyeS5jcmVhdG9yc1t0aGlzLmZpZWxkLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudHJ5LmNyZWF0b3JzW3RoaXMuZmllbGQubmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAvLyB7TS4gSGFsbGUsIEouIEJyZXNuYW4sIGFuZCBHLiBNaWxsZXJ9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQudGV4dC5pbmNsdWRlcyhgJHttYXJrZXIuY29tbWF9JHttYXJrZXIuYW5kfWApKSB7IC8vXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7bWFya2VyLmNvbW1hfSR7bWFya2VyLmFuZH1gLCAnZycpLCBtYXJrZXIuYW5kKS5yZXBsYWNlKG5ldyBSZWdFeHAobWFya2VyLmNvbW1hKSwgbWFya2VyLmFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY3JlYXRvciBvZiB0aGlzLmZpZWxkLnRleHQuc3BsaXQobWFya2VyLmFuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKG1hcmtlci5jbGVhbihjcmVhdG9yKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cnkuY3JlYXRvcnNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKHRoaXMucGFyc2VOYW1lKGNyZWF0b3IpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZHMudW5hYmJyZXYuaW5jbHVkZXMoZmllbGQubmFtZSkpIHsgLy8gZG9lc24ndCBnZXQgc2VudGVuY2UgY2FzaW5nIGFueWhvdyBUT0RPOiBib29rdGl0bGUgZG9lcyFcbiAgICAgICAgICAgICAgICB0aGlzLmVudHJ5LmZpZWxkc1t0aGlzLmZpZWxkLm5hbWVdLnB1c2goKCgoX2EgPSB0aGlzLm9wdGlvbnMudW5hYmJyZXZpYXRlW3RoaXMuZmllbGQudGV4dF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50ZXh0KSB8fCB0aGlzLmZpZWxkLnRleHQpLm5vcm1hbGl6ZSgnTkZDJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5ndWVzc0FscmVhZHlTZW50ZW5jZUNhc2VkICYmIE1hdGgubWF4KHRoaXMuZmllbGQud29yZHMudXBwZXIsIHRoaXMuZmllbGQud29yZHMubG93ZXIpID4gKHRoaXMuZmllbGQud29yZHMub3RoZXIgKyBNYXRoLm1pbih0aGlzLmZpZWxkLndvcmRzLnVwcGVyLCB0aGlzLmZpZWxkLndvcmRzLmxvd2VyKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmUobnVsbCwgbnVsbCk7IC8vICwgJ21vc3RseSBzZW50ZW5jZSBjYXNlZCBhbHJlYWR5JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR4dCA9IHRoaXMuZmllbGQudGV4dC5yZXBsYWNlKHByZXNlcnZlQ2FzZS5tYXJrdXAsIG1hcmt1cCA9PiBtYXJrZXIubWFya3VwLnJlcGVhdChtYXJrdXAubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUNhc2Uuc2VudGVuY2VTdGFydC5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHByZXNlcnZlQ2FzZS5zZW50ZW5jZVN0YXJ0LmV4ZWModHh0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNsdWRlIHN0dWZmIGxpa2UgXCJVLlMuIFRheGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAyICYmIHR4dC5zdWJzdHIoMCwgbWF0Y2guaW5kZXggKyAxKS5tYXRjaChwcmVzZXJ2ZUNhc2UuYWNyb255bSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmUobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTsgLy8gLCBgc2VudGVuY2VTdGFydDogJHttYXRjaFswXX0gYXQgJHttYXRjaC5pbmRleH0uLiR7bWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGh9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQ2FzZS5xdW90ZWQubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBwcmVzZXJ2ZUNhc2UucXVvdGVkLmV4ZWModGhpcy5maWVsZC50ZXh0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlKG1hdGNoLmluZGV4LCBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7IC8vICwgJ3F1b3RlZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRyeS5maWVsZHNbdGhpcy5maWVsZC5uYW1lXS5wdXNoKHRoaXMuY29udmVydFRvU2VudGVuY2VDYXNlKHRoaXMuZmllbGQudGV4dCkubm9ybWFsaXplKCdORkMnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZCA9IG51bGw7XG4gICAgfVxuICAgIGNvbnZlcnRUb1NlbnRlbmNlQ2FzZSh0ZXh0KSB7XG4gICAgICAgIGlmICghdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAvLyBhbHdheXMga2VlcCB0aGUgbGVhZGluZyBjaGFyLCBidXQgc2tpcCBtYXJrdXBcbiAgICAgICAgY29uc3QgbGVhZCA9IHRleHQubWF0Y2goL14oPFtePl0rPikqLi8pO1xuICAgICAgICBpZiAobGVhZCkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZShsZWFkWzBdLmxlbmd0aCAtIDEsIGxlYWRbMF0ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmUoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNlbnRlbmNlQ2FzZWQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKChbXFw/IV1cXHMqfF4pKFtcXCdcXFwiwqHCv+KAnOKAmOKAnsKrXFxzXSspP1teXFxzXSkvZywgeCA9PiB4LnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgc3RhcnQsIGVuZCB9IG9mIHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgIHNlbnRlbmNlQ2FzZWQgPSBzZW50ZW5jZUNhc2VkLnN1YnN0cmluZygwLCBzdGFydCkgKyB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSArIHNlbnRlbmNlQ2FzZWQuc3Vic3RyaW5nKGVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgIT09IHNlbnRlbmNlQ2FzZWQpXG4gICAgICAgICAgICB0aGlzLmVudHJ5LnNlbnRlbmNlQ2FzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gc2VudGVuY2VDYXNlZDtcbiAgICB9XG4gICAgY29udmVydF9udW1iZXIobm9kZSkge1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gYCR7bm9kZS52YWx1ZX1gO1xuICAgIH1cbiAgICBjb252ZXJ0X3RleHQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5tb2RlID09PSAndmVyYmF0aW0nKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gbm9kZS52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaGV1cmlzdGljIHRvIGRldGVjdCBwcmUtc2VudGVuY2VjYXNlZCB0ZXh0XG4gICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiBub2RlLnZhbHVlLnNwbGl0KC9cXGIvKSkge1xuICAgICAgICAgICAgaWYgKHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmFsbExvd2VyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmllbGQud29yZHMubG93ZXIrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHdvcmQubWF0Y2gocHJlc2VydmVDYXNlLmFsbENhcHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC53b3Jkcy51cHBlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAod29yZC5tYXRjaChwcmVzZXJ2ZUNhc2UuaGFzQWxwaGEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC53b3Jkcy5vdGhlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmxldmVsID09PSAwICYmIHRoaXMuY2xlYW5pbmcudHlwZSA9PT0gJ2NyZWF0b3InKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gbm9kZS52YWx1ZS5yZXBsYWNlKC9cXHMrYW5kXFxzKy9pZywgbWFya2VyLmFuZCkucmVwbGFjZSgvXFxzKixcXHMqL2csIG1hcmtlci5jb21tYSkucmVwbGFjZSgvXFxzKy9nLCBtYXJrZXIuc3BhY2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpZWxkLmxldmVsID09PSAwICYmIHRoaXMuZmllbGQubmFtZS5tYXRjaCgvXihrZXl3b3Jkcz98Z3JvdXBzKSQvKSkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWUucmVwbGFjZSgvXFxzKls7LF1cXHMqL2csIG1hcmtlci5jb21tYSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmllbGQuaHRtbCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWUucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZmllbGQucHJlc2VydmVSYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS52YWx1ZS5zcGxpdCgvKFxccyspLyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZmllbGQudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IHdvcmQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJlc2VydmVDYXNlKHdvcmQpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlKHN0YXJ0LCB0aGlzLmZpZWxkLnRleHQubGVuZ3RoKTsgLy8gLCBgd29yZDogJHtKU09OLnN0cmluZ2lmeSh3b3JkKX1gKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWVsZC50ZXh0ICs9IG5vZGUudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udmVydF9lbnZpcm9ubWVudChub2RlKSB7XG4gICAgICAgIHRoaXMuZmllbGQudGV4dCArPSB7IGVudW1lcmF0ZTogJzxvbD4nLCBpdGVtaXplOiAnPHVsPicgfVtub2RlLmVudl07XG4gICAgICAgIHRoaXMuY29udmVydF9ibG9jayhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG5vZGUpLCB7IGtpbmQ6ICdCbG9jaycsIG1hcmt1cDoge30gfSkpO1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0geyBlbnVtZXJhdGU6ICc8L29sPicsIGl0ZW1pemU6ICc8L3VsPicgfVtub2RlLmVudl07XG4gICAgfVxuICAgIGNvbnZlcnRfYmxvY2sobm9kZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZmllbGQudGV4dC5sZW5ndGg7XG4gICAgICAgIGxldCBwcmVmaXggPSAnJztcbiAgICAgICAgbGV0IHBvc3RmaXggPSAnJztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jYXNlUHJvdGVjdGlvbiAhPT0gJ3N0cmljdCcgJiYgdGhpcy5jbGVhbmluZy50eXBlID09PSAnb3RoZXInKVxuICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYW5pbmcudHlwZSA9PT0gJ2NyZWF0b3InICYmIG5vZGUuY2FzZSA9PT0gJ3Byb3RlY3QnKSB7XG4gICAgICAgICAgICBwcmVmaXggKz0gbWFya2VyLmxpdGVyYWw7XG4gICAgICAgICAgICBwb3N0Zml4ID0gbWFya2VyLmxpdGVyYWwgKyBwb3N0Zml4O1xuICAgICAgICAgICAgZGVsZXRlIG5vZGUuY2FzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jYXNlID09PSAncHJvdGVjdCcpIHtcbiAgICAgICAgICAgIHByZWZpeCArPSB0aGlzLm9wdGlvbnMubWFya3VwLmNhc2VQcm90ZWN0Lm9wZW47XG4gICAgICAgICAgICBwb3N0Zml4ID0gdGhpcy5vcHRpb25zLm1hcmt1cC5jYXNlUHJvdGVjdC5jbG9zZSArIHBvc3RmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUua2luZCA9PT0gJ0Jsb2NrJykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtYXJrdXAgb2YgT2JqZWN0LmtleXMobm9kZS5tYXJrdXApKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubWFya3VwW21hcmt1cF0pXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKG5ldyBQYXJzZXJFcnJvcihgbWFya3VwOiAke21hcmt1cH1gLCBub2RlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBwcmVmaXggKz0gdGhpcy5vcHRpb25zLm1hcmt1cFttYXJrdXBdLm9wZW47XG4gICAgICAgICAgICAgICAgcG9zdGZpeCA9IHRoaXMub3B0aW9ucy5tYXJrdXBbbWFya3VwXS5jbG9zZSArIHBvc3RmaXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kID0ge1xuICAgICAgICAgICAgd2l0aG91dFByZWZpeDogdGhpcy5maWVsZC50ZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIHdpdGhQcmVmaXg6IHRoaXMuZmllbGQudGV4dC5sZW5ndGggKyBwcmVmaXgubGVuZ3RoLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gcHJlZml4O1xuICAgICAgICB0aGlzLmZpZWxkLmxldmVsKys7XG4gICAgICAgIHRoaXMuY29udmVydChub2RlLnZhbHVlKTtcbiAgICAgICAgdGhpcy5maWVsZC5sZXZlbC0tO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuZmllbGQudGV4dC5zdWJzdHJpbmcoZW5kLndpdGhQcmVmaXgpO1xuICAgICAgICBjb25zdCBhZGRlZF90ZXh0ID0gYWRkZWQucmVwbGFjZSgvPFxcLz9bXj5dKz4vZywgJycpO1xuICAgICAgICBjb25zdCBuZWVkc1Byb3RlY3Rpb24gPSBhZGRlZF90ZXh0ICYmICgodGhpcy5vcHRpb25zLmNhc2VQcm90ZWN0aW9uID09PSAnc3RyaWN0JyAmJiBhZGRlZF90ZXh0Lm1hdGNoKHByZXNlcnZlQ2FzZS5pc0Nhc2VTZW5zaXRpdmUpKVxuICAgICAgICAgICAgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5vcHRpb25zLmNhc2VQcm90ZWN0aW9uID09PSAnYXMtbmVlZGVkJyAmJiBhZGRlZF90ZXh0LnNwbGl0KC9cXHMrLykuZmluZCh3b3JkID0+IHRoaXMubmVlZHNQcm90ZWN0aW9uKHdvcmQpKSkpO1xuICAgICAgICBpZiAoIWFkZGVkKSB7IC8vIG5vdGhpbmcgd2FzIGFkZGVkLCBzbyByZW1vdmUgcHJlZml4XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQuc3Vic3RyaW5nKDAsIGVuZC53aXRob3V0UHJlZml4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzICYmIHByZWZpeCA9PT0gdGhpcy5vcHRpb25zLm1hcmt1cC5jYXNlUHJvdGVjdC5vcGVuICYmICFuZWVkc1Byb3RlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3YXMgYWRkZWQgdGhhdCBkaWRuJ3QgYWN0dWFsbHkgbmVlZCBjYXNlIHByb3RlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuZmllbGQudGV4dCA9IHRoaXMuZmllbGQudGV4dC5zdWJzdHJpbmcoMCwgZW5kLndpdGhvdXRQcmVmaXgpICsgYWRkZWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnByZXNlcnZlUmFuZ2VzID0gdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcy5maWx0ZXIocmFuZ2UgPT4gcmFuZ2Uuc3RhcnQgPCBlbmQud2l0aG91dFByZWZpeCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLnRleHQgKz0gcG9zdGZpeDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkLnRleHQgPSB0aGlzLmZpZWxkLnRleHQucmVwbGFjZSgvPChzdXB8c3ViKT4oW148Pl0rKTxcXC9cXDE+JC9pLCAobSwgbW9kZSwgY2hhcnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNtZCA9IG1vZGUgPT09ICdzdXAnID8gJ14nIDogJ18nO1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9ICcnO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGNoYXJzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5pY29kZSA9IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHtjbWR9JHtjaGFyfWBdIHx8IHVuaWNvZGUybGF0ZXhfMS5sYXRleFtgJHtjbWR9eyR7Y2hhcn19YF07XG4gICAgICAgICAgICAgICAgc2NyaXB0ICs9IHVuaWNvZGUgPyB1bmljb2RlIDogYDwke21vZGV9PiR7Y2hhcn08LyR7bW9kZX0+YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdC5yZXBsYWNlKG5ldyBSZWdFeHAoYDwvJHttb2RlfT48JHttb2RlfT5gLCAnZycpLCAnJyk7XG4gICAgICAgICAgICByZXR1cm4gc2NyaXB0Lmxlbmd0aCA8IG0ubGVuZ3RoID8gc2NyaXB0IDogbTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub2RlLmNhc2UgJiYgdGhpcy5maWVsZC5wcmVzZXJ2ZVJhbmdlcylcbiAgICAgICAgICAgIHRoaXMucHJlc2VydmUoc3RhcnQsIHRoaXMuZmllbGQudGV4dC5sZW5ndGgpOyAvLyAsICdpbiBjb252ZXJ0LWJsb2NrICcgKyBub2RlLnNvdXJjZSB8fCAnPHNvdXJjZT4nKVxuICAgIH1cbn1cbi8qKlxuICogcGFyc2UgYmlidGV4LiBUaGlzIHdpbGwgdHJ5IHRvIGNvbnZlcnQgVGVYIGNvbW1hbmRzIGludG8gdW5pY29kZSBlcXVpdmFsZW50cywgYW5kIGFwcGx5IGBAc3RyaW5nYCBleHBhbnNpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZShpbnB1dCk7XG59XG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5mdW5jdGlvbiBhc3QoaW5wdXQsIG9wdGlvbnMgPSB7fSwgY2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLmFzdChpbnB1dCwgY2xlYW4pO1xufVxuZXhwb3J0cy5hc3QgPSBhc3Q7XG52YXIgY2h1bmtlcl8yID0gcmVxdWlyZShcIi4vY2h1bmtlclwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNodW5rZXJcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNodW5rZXJfMi5wYXJzZTsgfSB9KTtcbnZhciBqYWJyZWZfMSA9IHJlcXVpcmUoXCIuL2phYnJlZlwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImphYnJlZlwiLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gamFicmVmXzEucGFyc2U7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgKiBhcyBCaWJUZVhQYXJzZXIgZnJvbSAnQHJldG9ycXVlcmUvYmlidGV4LXBhcnNlcic7XG5pbXBvcnQgeyBFbnRyeSBhcyBFbnRyeURhdGFCaWJMYVRlWCB9IGZyb20gJ0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXInO1xuLy8gQWxzbyBtYWtlIEVudHJ5RGF0YUJpYkxhVGVYIGF2YWlsYWJsZSB0byBvdGhlciBtb2R1bGVzXG5leHBvcnQgeyBFbnRyeSBhcyBFbnRyeURhdGFCaWJMYVRlWCB9IGZyb20gJ0ByZXRvcnF1ZXJlL2JpYnRleC1wYXJzZXInO1xuXG4vLyBUcmljazogYWxsb3cgc3RyaW5nIGluZGV4aW5nIG9udG8gb2JqZWN0IHByb3BlcnRpZXNcbmV4cG9ydCBpbnRlcmZhY2UgSUluZGV4YWJsZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuY29uc3QgZGF0YWJhc2VUeXBlcyA9IFsnY3NsLWpzb24nLCAnYmlibGF0ZXgnXSBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIERhdGFiYXNlVHlwZSA9IHR5cGVvZiBkYXRhYmFzZVR5cGVzW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBURU1QTEFURV9WQVJJQUJMRVMgPSB7XG4gIGNpdGVrZXk6ICdVbmlxdWUgY2l0ZWtleScsXG4gIGFic3RyYWN0OiAnJyxcbiAgYXV0aG9yU3RyaW5nOiAnQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9yIG5hbWVzJyxcbiAgY29udGFpbmVyVGl0bGU6XG4gICAgJ1RpdGxlIG9mIHRoZSBjb250YWluZXIgaG9sZGluZyB0aGUgcmVmZXJlbmNlIChlLmcuIGJvb2sgdGl0bGUgZm9yIGEgYm9vayBjaGFwdGVyLCBvciB0aGUgam91cm5hbCB0aXRsZSBmb3IgYSBqb3VybmFsIGFydGljbGUpJyxcbiAgRE9JOiAnJyxcbiAgZXByaW50OiAnJyxcbiAgZXByaW50dHlwZTogJycsXG4gIGV2ZW50UGxhY2U6ICdMb2NhdGlvbiBvZiBldmVudCcsXG4gIG5vdGU6ICcnLFxuICBwYWdlOiAnUGFnZSBvciBwYWdlIHJhbmdlJyxcbiAgcHVibGlzaGVyOiAnJyxcbiAgcHVibGlzaGVyUGxhY2U6ICdMb2NhdGlvbiBvZiBwdWJsaXNoZXInLFxuICB0aXRsZTogJycsXG4gIFVSTDogJycsXG4gIHllYXI6ICdQdWJsaWNhdGlvbiB5ZWFyJyxcbiAgem90ZXJvU2VsZWN0VVJJOiAnVVJJIHRvIG9wZW4gdGhlIHJlZmVyZW5jZSBpbiBab3Rlcm8nLFxufTtcblxuZXhwb3J0IGNsYXNzIExpYnJhcnkge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZW50cmllczogeyBbY2l0ZWtleTogc3RyaW5nXTogRW50cnkgfSkge31cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmVudHJpZXMpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgdGhlIGdpdmVuIGNpdGVrZXksIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYEVudHJ5YCBhbmQgcmV0dXJuIGFcbiAgICogY29sbGVjdGlvbiBvZiB0ZW1wbGF0ZSB2YXJpYWJsZSBhc3NpZ25tZW50cy5cbiAgICovXG4gIGdldFRlbXBsYXRlVmFyaWFibGVzRm9yQ2l0ZWtleShjaXRla2V5OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBlbnRyeTogRW50cnkgPSB0aGlzLmVudHJpZXNbY2l0ZWtleV07XG4gICAgY29uc3Qgc2hvcnRjdXRzID0ge1xuICAgICAgY2l0ZWtleTogY2l0ZWtleSxcblxuICAgICAgYWJzdHJhY3Q6IGVudHJ5LmFic3RyYWN0LFxuICAgICAgYXV0aG9yU3RyaW5nOiBlbnRyeS5hdXRob3JTdHJpbmcsXG4gICAgICBjb250YWluZXJUaXRsZTogZW50cnkuY29udGFpbmVyVGl0bGUsXG4gICAgICBET0k6IGVudHJ5LkRPSSxcbiAgICAgIGVwcmludDogZW50cnkuZXByaW50LFxuICAgICAgZXByaW50dHlwZTogZW50cnkuZXByaW50dHlwZSxcbiAgICAgIGV2ZW50UGxhY2U6IGVudHJ5LmV2ZW50UGxhY2UsXG4gICAgICBub3RlOiBlbnRyeS5ub3RlLFxuICAgICAgcGFnZTogZW50cnkucGFnZSxcbiAgICAgIHB1Ymxpc2hlcjogZW50cnkucHVibGlzaGVyLFxuICAgICAgcHVibGlzaGVyUGxhY2U6IGVudHJ5LnB1Ymxpc2hlclBsYWNlLFxuICAgICAgdGl0bGU6IGVudHJ5LnRpdGxlLFxuICAgICAgVVJMOiBlbnRyeS5VUkwsXG4gICAgICB5ZWFyOiBlbnRyeS55ZWFyPy50b1N0cmluZygpLFxuICAgICAgem90ZXJvU2VsZWN0VVJJOiBlbnRyeS56b3Rlcm9TZWxlY3RVUkksXG4gICAgfTtcblxuICAgIHJldHVybiB7IGVudHJ5OiBlbnRyeS50b0pTT04oKSwgLi4uc2hvcnRjdXRzIH07XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIHJlZmVyZW5jZSBlbnRyaWVzIGZyb20gdGhlIGdpdmVuIHJhdyBkYXRhYmFzZSBkYXRhLlxuICpcbiAqIFJldHVybnMgYSBsaXN0IG9mIGBFbnRyeURhdGFgLCB3aGljaCBzaG91bGQgYmUgd3JhcHBlZCB3aXRoIHRoZSByZWxldmFudFxuICogYWRhcHRlciBhbmQgdXNlZCB0byBpbnN0YW50aWF0ZSBhIGBMaWJyYXJ5YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFbnRyaWVzKFxuICBkYXRhYmFzZVJhdzogc3RyaW5nLFxuICBkYXRhYmFzZVR5cGU6IERhdGFiYXNlVHlwZSxcbik6IEVudHJ5RGF0YVtdIHtcbiAgbGV0IGxpYnJhcnlBcnJheTogRW50cnlEYXRhW107XG5cbiAgaWYgKGRhdGFiYXNlVHlwZSA9PSAnY3NsLWpzb24nKSB7XG4gICAgbGlicmFyeUFycmF5ID0gSlNPTi5wYXJzZShkYXRhYmFzZVJhdyk7XG4gIH0gZWxzZSBpZiAoZGF0YWJhc2VUeXBlID09ICdiaWJsYXRleCcpIHtcbiAgICBjb25zdCBvcHRpb25zOiBCaWJUZVhQYXJzZXIuUGFyc2VyT3B0aW9ucyA9IHtcbiAgICAgIGVycm9ySGFuZGxlcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NpdGF0aW9uIHBsdWdpbjogZXJyb3IgbG9hZGluZyBCaWJMYVRlWCBlbnRyeTonLCBlcnIpO1xuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IEJpYlRlWFBhcnNlci5wYXJzZShcbiAgICAgIGRhdGFiYXNlUmF3LFxuICAgICAgb3B0aW9ucyxcbiAgICApIGFzIEJpYlRlWFBhcnNlci5CaWJsaW9ncmFwaHk7XG4gICAgbGlicmFyeUFycmF5ID0gcGFyc2VkLmVudHJpZXM7XG4gIH1cblxuICByZXR1cm4gbGlicmFyeUFycmF5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvciB7XG4gIGdpdmVuPzogc3RyaW5nO1xuICBmYW1pbHk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gYEVudHJ5YCByZXByZXNlbnRzIGEgc2luZ2xlIHJlZmVyZW5jZSBpbiBhIHJlZmVyZW5jZSBkYXRhYmFzZS5cbiAqIEVhY2ggZW50cnkgaGFzIGEgdW5pcXVlIGlkZW50aWZpZXIsIGtub3duIGluIG1vc3QgcmVmZXJlbmNlIG1hbmFnZXJzIGFzIGl0c1xuICogXCJjaXRla2V5LlwiXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRyeSB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudHJ5IChhbHNvIHRoZSBjaXRla2V5KS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBpZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIGFic3RyYWN0IGFic3RyYWN0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgYXV0aG9yPzogQXV0aG9yW107XG5cbiAgLyoqXG4gICAqIEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYXV0aG9ycywgZWFjaCBvZiB0aGUgZm9ybWF0IGA8Zmlyc3RuYW1lPiA8bGFzdG5hbWU+YC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhdXRob3JTdHJpbmc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgZm9yIHRoaXMgcmVmZXJlbmNlIC0tIGluIHRoZSBjYXNlIG9mIGEgYm9va1xuICAgKiBjaGFwdGVyIHJlZmVyZW5jZSwgdGhlIG5hbWUgb2YgdGhlIGJvb2s7IGluIHRoZSBjYXNlIG9mIGEgam91cm5hbCBhcnRpY2xlLFxuICAgKiB0aGUgbmFtZSBvZiB0aGUgam91cm5hbC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBjb250YWluZXJUaXRsZT86IHN0cmluZztcblxuICBwdWJsaWMgYWJzdHJhY3QgRE9JPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgZmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGUgb2YgaXNzdWUuIE1hbnkgcmVmZXJlbmNlcyBkbyBub3QgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCBtb250aFxuICAgKiBhbmQgZGF5IG9mIGlzc3VlOyBpbiB0aGlzIGNhc2UsIHRoZSBgaXNzdWVkRGF0ZWAgd2lsbCBjb250YWluIGR1bW15IG1pbmltdW1cbiAgICogdmFsdWVzIGZvciB0aG9zZSBlbGVtZW50cy4gKEEgcmVmZXJlbmNlIHdoaWNoIGlzIG9ubHkgZW5jb2RlZCBhcyBiZWluZ1xuICAgKiBpc3N1ZWQgaW4gMjAwMSBpcyByZXByZXNlbnRlZCBoZXJlIHdpdGggYSBkYXRlIDIwMDEtMDEtMDEgMDA6MDA6MDAgVVRDLilcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBpc3N1ZWREYXRlPzogRGF0ZTtcblxuICAvKipcbiAgICogUGFnZSBvciBwYWdlIHJhbmdlIG9mIHRoZSByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcGFnZT86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHRpdGxlPzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgVVJMPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBldmVudFBsYWNlPzogc3RyaW5nO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBwdWJsaXNoZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCBwdWJsaXNoZXJQbGFjZT86IHN0cmluZztcblxuICAvKipcbiAgICogQmliTGFUZVgtc3BlY2lmaWMgcHJvcGVydGllc1xuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGVwcmludD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IGVwcmludHR5cGU/OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIF95ZWFyPzogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5feWVhclxuICAgICAgPyBwYXJzZUludCh0aGlzLl95ZWFyKVxuICAgICAgOiB0aGlzLmlzc3VlZERhdGU/LmdldFVUQ0Z1bGxZZWFyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX25vdGU/OiBzdHJpbmdbXTtcblxuICBwdWJsaWMgZ2V0IG5vdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbm90ZVxuICAgICAgPy5tYXAoKGVsKSA9PiBlbC5yZXBsYWNlKC8oem90ZXJvOlxcL1xcLy4rKS9nLCAnW0xpbmtdKCQxKScpKVxuICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgVVJJIHdoaWNoIHdpbGwgb3BlbiB0aGUgcmVsZXZhbnQgZW50cnkgaW4gdGhlIFpvdGVybyBjbGllbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHpvdGVyb1NlbGVjdFVSSSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgem90ZXJvOi8vc2VsZWN0L2l0ZW1zL0Ake3RoaXMuaWR9YDtcbiAgfVxuXG4gIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QganNvbk9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTtcblxuICAgIC8vIGFkZCBnZXR0ZXIgdmFsdWVzXG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7XG4gICAgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pKVxuICAgICAgLmZpbHRlcigoWywgZGVzY3JpcHRvcl0pID0+IHR5cGVvZiBkZXNjcmlwdG9yLmdldCA9PSAnZnVuY3Rpb24nKVxuICAgICAgLmZvckVhY2goKFtrZXksIGRlc2NyaXB0b3JdKSA9PiB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGtleVswXSAhPT0gJ18nKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9ICh0aGlzIGFzIElJbmRleGFibGUpW2tleV07XG4gICAgICAgICAgICBqc29uT2JqW2tleV0gPSB2YWw7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGpzb25PYmo7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRW50cnlEYXRhID0gRW50cnlEYXRhQ1NMIHwgRW50cnlEYXRhQmliTGFUZVg7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50cnlEYXRhQ1NMIHtcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuXG4gIGFic3RyYWN0Pzogc3RyaW5nO1xuICBhdXRob3I/OiBBdXRob3JbXTtcbiAgJ2NvbnRhaW5lci10aXRsZSc/OiBzdHJpbmc7XG4gIERPST86IHN0cmluZztcbiAgJ2V2ZW50LXBsYWNlJz86IHN0cmluZztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgaXNzdWVkPzogeyAnZGF0ZS1wYXJ0cyc6IFthbnlbXV0gfTtcbiAgcGFnZT86IHN0cmluZztcbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICAncHVibGlzaGVyLXBsYWNlJz86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIFVSTD86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEVudHJ5Q1NMQWRhcHRlciBleHRlbmRzIEVudHJ5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhOiBFbnRyeURhdGFDU0wpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZXByaW50OiBzdHJpbmcgPSBudWxsO1xuICBlcHJpbnR0eXBlOiBzdHJpbmcgPSBudWxsO1xuICBmaWxlczogc3RyaW5nW10gPSBudWxsO1xuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmlkO1xuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGEudHlwZTtcbiAgfVxuXG4gIGdldCBhYnN0cmFjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmFic3RyYWN0O1xuICB9XG4gIGdldCBhdXRob3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5hdXRob3I7XG4gIH1cblxuICBnZXQgYXV0aG9yU3RyaW5nKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRhdGEuYXV0aG9yXG4gICAgICA/IHRoaXMuZGF0YS5hdXRob3IubWFwKChhKSA9PiBgJHthLmdpdmVufSAke2EuZmFtaWx5fWApLmpvaW4oJywgJylcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIGdldCBjb250YWluZXJUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydjb250YWluZXItdGl0bGUnXTtcbiAgfVxuXG4gIGdldCBET0koKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5ET0k7XG4gIH1cblxuICBnZXQgZXZlbnRQbGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydldmVudC1wbGFjZSddO1xuICB9XG5cbiAgZ2V0IGlzc3VlZERhdGUoKSB7XG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgdGhpcy5kYXRhLmlzc3VlZCAmJlxuICAgICAgICB0aGlzLmRhdGEuaXNzdWVkWydkYXRlLXBhcnRzJ10gJiZcbiAgICAgICAgdGhpcy5kYXRhLmlzc3VlZFsnZGF0ZS1wYXJ0cyddWzBdLmxlbmd0aCA+IDBcbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IHRoaXMuZGF0YS5pc3N1ZWRbJ2RhdGUtcGFydHMnXVswXTtcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgKG1vbnRoIHx8IDEpIC0gMSwgZGF5IHx8IDEpO1xuICB9XG5cbiAgZ2V0IHBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5wYWdlO1xuICB9XG5cbiAgZ2V0IHB1Ymxpc2hlcigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnB1Ymxpc2hlcjtcbiAgfVxuXG4gIGdldCBwdWJsaXNoZXJQbGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhWydwdWJsaXNoZXItcGxhY2UnXTtcbiAgfVxuXG4gIGdldCB0aXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnRpdGxlO1xuICB9XG5cbiAgZ2V0IFVSTCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLlVSTDtcbiAgfVxufVxuXG5jb25zdCBCSUJMQVRFWF9QUk9QRVJUWV9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBhYnN0cmFjdDogJ2Fic3RyYWN0JyxcbiAgYm9va3RpdGxlOiAnX2NvbnRhaW5lclRpdGxlJyxcbiAgZGF0ZTogJ2lzc3VlZCcsXG4gIGRvaTogJ0RPSScsXG4gIGVwcmludDogJ2VwcmludCcsXG4gIGVwcmludHR5cGU6ICdlcHJpbnR0eXBlJyxcbiAgZXZlbnR0aXRsZTogJ2V2ZW50JyxcbiAgam91cm5hbDogJ19jb250YWluZXJUaXRsZScsXG4gIGpvdXJuYWx0aXRsZTogJ19jb250YWluZXJUaXRsZScsXG4gIGxvY2F0aW9uOiAncHVibGlzaGVyUGxhY2UnLFxuICBwYWdlczogJ3BhZ2UnLFxuICBzaG9ydGpvdXJuYWw6ICdjb250YWluZXJUaXRsZVNob3J0JyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHNob3J0dGl0bGU6ICd0aXRsZVNob3J0JyxcbiAgdXJsOiAnVVJMJyxcbiAgdmVudWU6ICdldmVudFBsYWNlJyxcbiAgeWVhcjogJ195ZWFyJyxcbiAgcHVibGlzaGVyOiAncHVibGlzaGVyJyxcbiAgbm90ZTogJ19ub3RlJyxcbn07XG5cbi8vIEJpYkxhVGVYIHBhcnNlciByZXR1cm5zIGFycmF5cyBvZiBwcm9wZXJ0eSB2YWx1ZXMgKGFsbG93aW5nIGZvciByZXBlYXRlZFxuLy8gcHJvcGVydHkgZW50cmllcykuIEZvciB0aGUgZm9sbG93aW5nIGZpZWxkcywganVzdCBibGluZGx5IHRha2UgdGhlIGZpcnN0LlxuY29uc3QgQklCTEFURVhfUFJPUEVSVFlfVEFLRV9GSVJTVDogc3RyaW5nW10gPSBbXG4gICdhYnN0cmFjdCcsXG4gICdib29rdGl0bGUnLFxuICAnX2NvbnRhaW5lclRpdGxlJyxcbiAgJ2RhdGUnLFxuICAnZG9pJyxcbiAgJ2VwcmludCcsXG4gICdlcHJpbnR0eXBlJyxcbiAgJ2V2ZW50dGl0bGUnLFxuICAnam91cm5hbHRpdGxlJyxcbiAgJ2xvY2F0aW9uJyxcbiAgJ3BhZ2VzJyxcbiAgJ3Nob3J0am91cm5hbCcsXG4gICd0aXRsZScsXG4gICdzaG9ydHRpdGxlJyxcbiAgJ3VybCcsXG4gICd2ZW51ZScsXG4gICdfeWVhcicsXG4gICdwdWJsaXNoZXInLFxuXTtcblxuZXhwb3J0IGNsYXNzIEVudHJ5QmliTGFUZVhBZGFwdGVyIGV4dGVuZHMgRW50cnkge1xuICBhYnN0cmFjdD86IHN0cmluZztcbiAgX2NvbnRhaW5lclRpdGxlPzogc3RyaW5nO1xuICBjb250YWluZXJUaXRsZVNob3J0Pzogc3RyaW5nO1xuICBET0k/OiBzdHJpbmc7XG4gIGVwcmludD86IHN0cmluZztcbiAgZXByaW50dHlwZT86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGV2ZW50UGxhY2U/OiBzdHJpbmc7XG4gIGlzc3VlZD86IHN0cmluZztcbiAgcGFnZT86IHN0cmluZztcbiAgcHVibGlzaGVyPzogc3RyaW5nO1xuICBwdWJsaXNoZXJQbGFjZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHRpdGxlU2hvcnQ/OiBzdHJpbmc7XG4gIFVSTD86IHN0cmluZztcbiAgX3llYXI/OiBzdHJpbmc7XG4gIF9ub3RlPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhOiBFbnRyeURhdGFCaWJMYVRlWCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBPYmplY3QuZW50cmllcyhCSUJMQVRFWF9QUk9QRVJUWV9NQVBQSU5HKS5mb3JFYWNoKFxuICAgICAgKG1hcDogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBbc3JjLCB0Z3RdID0gbWFwO1xuICAgICAgICBpZiAoc3JjIGluIHRoaXMuZGF0YS5maWVsZHMpIHtcbiAgICAgICAgICBsZXQgdmFsID0gdGhpcy5kYXRhLmZpZWxkc1tzcmNdO1xuICAgICAgICAgIGlmIChCSUJMQVRFWF9QUk9QRVJUWV9UQUtFX0ZJUlNULmluY2x1ZGVzKHNyYykpIHtcbiAgICAgICAgICAgIHZhbCA9ICh2YWwgYXMgYW55W10pWzBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICh0aGlzIGFzIElJbmRleGFibGUpW3RndF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmtleTtcbiAgfVxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLnR5cGU7XG4gIH1cblxuICBnZXQgZmlsZXMoKTogc3RyaW5nW10ge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB0aGUgYmlidGV4IHBhcnNlciBkb2Vzbid0IHJlbGlhYmx5IHBhcnNlIGZpbGUgbGlzdCB0b1xuICAgIC8vIGFycmF5IDsgc28gd2UnbGwgZG8gaXQgbWFudWFsbHkgLyByZWR1bmRhbnRseVxuICAgIGxldCByZXQ6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuZGF0YS5maWVsZHMuZmlsZSkge1xuICAgICAgcmV0ID0gcmV0LmNvbmNhdCh0aGlzLmRhdGEuZmllbGRzLmZpbGUuZmxhdE1hcCgoeCkgPT4geC5zcGxpdCgnOycpKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuZmllbGRzLmZpbGVzKSB7XG4gICAgICByZXQgPSByZXQuY29uY2F0KHRoaXMuZGF0YS5maWVsZHMuZmlsZXMuZmxhdE1hcCgoeCkgPT4geC5zcGxpdCgnOycpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGdldCBhdXRob3JTdHJpbmcoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5jcmVhdG9ycy5hdXRob3IpIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gdGhpcy5kYXRhLmNyZWF0b3JzLmF1dGhvci5tYXAoKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKG5hbWUubGl0ZXJhbCkgcmV0dXJuIG5hbWUubGl0ZXJhbDtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbbmFtZS5maXJzdE5hbWUsIG5hbWUucHJlZml4LCBuYW1lLmxhc3ROYW1lLCBuYW1lLnN1ZmZpeF07XG4gICAgICAgIC8vIERyb3AgYW55IG51bGwgcGFydHMgYW5kIGpvaW5cbiAgICAgICAgcmV0dXJuIHBhcnRzLmZpbHRlcigoeCkgPT4geCkuam9pbignICcpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmFtZXMuam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWVsZHMuYXV0aG9yPy5qb2luKCcsICcpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb250YWluZXJUaXRsZSgpIHtcbiAgICBpZiAodGhpcy5fY29udGFpbmVyVGl0bGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250YWluZXJUaXRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5maWVsZHMuZXByaW50KSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmRhdGEuZmllbGRzLmVwcmludHR5cGVcbiAgICAgICAgPyBgJHt0aGlzLmRhdGEuZmllbGRzLmVwcmludHR5cGV9OmBcbiAgICAgICAgOiAnJztcbiAgICAgIGNvbnN0IHN1ZmZpeCA9IHRoaXMuZGF0YS5maWVsZHMucHJpbWFyeWNsYXNzXG4gICAgICAgID8gYCBbJHt0aGlzLmRhdGEuZmllbGRzLnByaW1hcnljbGFzc31dYFxuICAgICAgICA6ICcnO1xuICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke3RoaXMuZGF0YS5maWVsZHMuZXByaW50fSR7c3VmZml4fWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzc3VlZERhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNzdWVkID8gbmV3IERhdGUodGhpcy5pc3N1ZWQpIDogbnVsbDtcbiAgfVxuXG4gIGdldCBhdXRob3IoKTogQXV0aG9yW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuY3JlYXRvcnMuYXV0aG9yPy5tYXAoKGEpID0+ICh7XG4gICAgICBnaXZlbjogYS5maXJzdE5hbWUsXG4gICAgICBmYW1pbHk6IGEubGFzdE5hbWUsXG4gICAgfSkpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBYnN0cmFjdFRleHRDb21wb25lbnQsXG4gIEFwcCxcbiAgRHJvcGRvd25Db21wb25lbnQsXG4gIEZpbGVTeXN0ZW1BZGFwdGVyLFxuICBQbHVnaW5TZXR0aW5nVGFiLFxuICBTZXR0aW5nLFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCBDaXRhdGlvblBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgSUluZGV4YWJsZSwgRGF0YWJhc2VUeXBlLCBURU1QTEFURV9WQVJJQUJMRVMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQ0lUQVRJT05fREFUQUJBU0VfRk9STUFUX0xBQkVMUzogUmVjb3JkPERhdGFiYXNlVHlwZSwgc3RyaW5nPiA9IHtcbiAgJ2NzbC1qc29uJzogJ0NTTC1KU09OJyxcbiAgYmlibGF0ZXg6ICdCaWJMYVRlWCcsXG59O1xuXG5leHBvcnQgY2xhc3MgQ2l0YXRpb25zUGx1Z2luU2V0dGluZ3Mge1xuICBwdWJsaWMgY2l0YXRpb25FeHBvcnRQYXRoOiBzdHJpbmc7XG4gIGNpdGF0aW9uRXhwb3J0Rm9ybWF0OiBEYXRhYmFzZVR5cGUgPSAnY3NsLWpzb24nO1xuXG4gIGxpdGVyYXR1cmVOb3RlVGl0bGVUZW1wbGF0ZSA9ICdAe3tjaXRla2V5fX0nO1xuICBsaXRlcmF0dXJlTm90ZUZvbGRlciA9ICdSZWFkaW5nIG5vdGVzJztcbiAgbGl0ZXJhdHVyZU5vdGVDb250ZW50VGVtcGxhdGU6IHN0cmluZyA9XG4gICAgJy0tLVxcbicgK1xuICAgICd0aXRsZToge3t0aXRsZX19XFxuJyArXG4gICAgJ2F1dGhvcnM6IHt7YXV0aG9yU3RyaW5nfX1cXG4nICtcbiAgICAneWVhcjoge3t5ZWFyfX1cXG4nICtcbiAgICAnLS0tXFxuXFxuJztcblxuICBtYXJrZG93bkNpdGF0aW9uVGVtcGxhdGUgPSAnW0B7e2NpdGVrZXl9fV0nO1xuICBhbHRlcm5hdGl2ZU1hcmtkb3duQ2l0YXRpb25UZW1wbGF0ZSA9ICdAe3tjaXRla2V5fX0nO1xufVxuXG5leHBvcnQgY2xhc3MgQ2l0YXRpb25TZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gIHByaXZhdGUgcGx1Z2luOiBDaXRhdGlvblBsdWdpbjtcblxuICBjaXRhdGlvblBhdGhMb2FkaW5nRWw6IEhUTUxFbGVtZW50O1xuICBjaXRhdGlvblBhdGhFcnJvckVsOiBIVE1MRWxlbWVudDtcbiAgY2l0YXRpb25QYXRoU3VjY2Vzc0VsOiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBDaXRhdGlvblBsdWdpbikge1xuICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgfVxuXG4gIG9wZW4oKTogdm9pZCB7XG4gICAgc3VwZXIub3BlbigpO1xuICAgIHRoaXMuY2hlY2tDaXRhdGlvbkV4cG9ydFBhdGgoXG4gICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaXRhdGlvbkV4cG9ydFBhdGgsXG4gICAgKS50aGVuKCgpID0+IHRoaXMuc2hvd0NpdGF0aW9uRXhwb3J0UGF0aFN1Y2Nlc3MoKSk7XG4gIH1cblxuICBhZGRWYWx1ZUNoYW5nZUNhbGxiYWNrPFQgZXh0ZW5kcyBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD4oXG4gICAgY29tcG9uZW50OiBBYnN0cmFjdFRleHRDb21wb25lbnQ8VD4gfCBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBzZXR0aW5nc0tleTogc3RyaW5nLFxuICAgIGNiPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGNvbXBvbmVudC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICh0aGlzLnBsdWdpbi5zZXR0aW5ncyBhcyBJSW5kZXhhYmxlKVtzZXR0aW5nc0tleV0gPSB2YWx1ZTtcbiAgICAgIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYnVpbGRWYWx1ZUlucHV0PFQgZXh0ZW5kcyBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD4oXG4gICAgY29tcG9uZW50OiBBYnN0cmFjdFRleHRDb21wb25lbnQ8VD4gfCBEcm9wZG93bkNvbXBvbmVudCxcbiAgICBzZXR0aW5nc0tleTogc3RyaW5nLFxuICAgIGNiPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGNvbXBvbmVudC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MgYXMgSUluZGV4YWJsZSlbc2V0dGluZ3NLZXldKTtcbiAgICB0aGlzLmFkZFZhbHVlQ2hhbmdlQ2FsbGJhY2soY29tcG9uZW50LCBzZXR0aW5nc0tleSwgY2IpO1xuICB9XG5cbiAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXG4gICAgY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgICBjb250YWluZXJFbC5zZXRBdHRyKCdpZCcsICd6b3Rlcm9TZXR0aW5nVGFiJyk7XG5cbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdDaXRhdGlvbiBwbHVnaW4gc2V0dGluZ3MnIH0pO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZSgnQ2l0YXRpb24gZGF0YWJhc2UgZm9ybWF0JylcbiAgICAgIC5hZGREcm9wZG93bigoY29tcG9uZW50KSA9PlxuICAgICAgICB0aGlzLmJ1aWxkVmFsdWVJbnB1dChcbiAgICAgICAgICBjb21wb25lbnQuYWRkT3B0aW9ucyhDSVRBVElPTl9EQVRBQkFTRV9GT1JNQVRfTEFCRUxTKSxcbiAgICAgICAgICAnY2l0YXRpb25FeHBvcnRGb3JtYXQnLFxuICAgICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NpdGF0aW9uRXhwb3J0UGF0aChcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY2l0YXRpb25FeHBvcnRQYXRoLFxuICAgICAgICAgICAgKS50aGVuKChzdWNjZXNzKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaXRhdGlvblBhdGhTdWNjZXNzRWwuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2l0YXRpb25QYXRoTG9hZGluZ0VsLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLmxvYWRMaWJyYXJ5KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNpdGF0aW9uUGF0aExvYWRpbmdFbC5hZGRDbGFzcygnZC1ub25lJyk7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dDaXRhdGlvbkV4cG9ydFBhdGhTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuXG4gICAgLy8gTkI6IHdlIGZvcmNlIHJlbG9hZCBvZiB0aGUgbGlicmFyeSBvbiBwYXRoIGNoYW5nZS5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKCdDaXRhdGlvbiBkYXRhYmFzZSBwYXRoJylcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICAnUGF0aCB0byBjaXRhdGlvbiBsaWJyYXJ5IGV4cG9ydGVkIGJ5IHlvdXIgcmVmZXJlbmNlIG1hbmFnZXIuICcgK1xuICAgICAgICAgICdDYW4gYmUgYW4gYWJzb2x1dGUgcGF0aCBvciBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdmF1bHQgcm9vdCBmb2xkZXIuICcgK1xuICAgICAgICAgICdDaXRhdGlvbnMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbG9hZGVkIHdoZW5ldmVyIHRoaXMgZmlsZSB1cGRhdGVzLicsXG4gICAgICApXG4gICAgICAuYWRkVGV4dCgoaW5wdXQpID0+XG4gICAgICAgIHRoaXMuYnVpbGRWYWx1ZUlucHV0KFxuICAgICAgICAgIGlucHV0LnNldFBsYWNlaG9sZGVyKCcvcGF0aC90by9leHBvcnQuanNvbicpLFxuICAgICAgICAgICdjaXRhdGlvbkV4cG9ydFBhdGgnLFxuICAgICAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NpdGF0aW9uRXhwb3J0UGF0aCh2YWx1ZSkudGhlbihcbiAgICAgICAgICAgICAgKHN1Y2Nlc3MpID0+XG4gICAgICAgICAgICAgICAgc3VjY2VzcyAmJlxuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luXG4gICAgICAgICAgICAgICAgICAubG9hZExpYnJhcnkoKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zaG93Q2l0YXRpb25FeHBvcnRQYXRoU3VjY2VzcygpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICB0aGlzLmNpdGF0aW9uUGF0aExvYWRpbmdFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdwJywge1xuICAgICAgY2xzOiAnem90ZXJvU2V0dGluZ0NpdGF0aW9uUGF0aExvYWRpbmcgZC1ub25lJyxcbiAgICAgIHRleHQ6ICdMb2FkaW5nIGNpdGF0aW9uIGRhdGFiYXNlLi4uJyxcbiAgICB9KTtcbiAgICB0aGlzLmNpdGF0aW9uUGF0aEVycm9yRWwgPSBjb250YWluZXJFbC5jcmVhdGVFbCgncCcsIHtcbiAgICAgIGNsczogJ3pvdGVyb1NldHRpbmdDaXRhdGlvblBhdGhFcnJvciBkLW5vbmUnLFxuICAgICAgdGV4dDpcbiAgICAgICAgJ1RoZSBjaXRhdGlvbiBleHBvcnQgZmlsZSBjYW5ub3QgYmUgZm91bmQuIFBsZWFzZSBjaGVjayB0aGUgcGF0aCBhYm92ZS4nLFxuICAgIH0pO1xuICAgIHRoaXMuY2l0YXRpb25QYXRoU3VjY2Vzc0VsID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ3AnLCB7XG4gICAgICBjbHM6ICd6b3Rlcm9TZXR0aW5nQ2l0YXRpb25QYXRoU3VjY2VzcyBkLW5vbmUnLFxuICAgICAgdGV4dDogJ0xvYWRlZCBsaWJyYXJ5IHdpdGgge3tufX0gcmVmZXJlbmNlcy4nLFxuICAgIH0pO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZSgnTGl0ZXJhdHVyZSBub3RlIGZvbGRlcicpXG4gICAgICAuYWRkVGV4dCgoaW5wdXQpID0+IHRoaXMuYnVpbGRWYWx1ZUlucHV0KGlucHV0LCAnbGl0ZXJhdHVyZU5vdGVGb2xkZXInKSlcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICAnU2F2ZSBsaXRlcmF0dXJlIG5vdGUgZmlsZXMgaW4gdGhpcyBmb2xkZXIgd2l0aGluIHlvdXIgdmF1bHQuIElmIGVtcHR5LCBub3RlcyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHZhdWx0LicsXG4gICAgICApO1xuXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gzJywgeyB0ZXh0OiAnVGVtcGxhdGUgc2V0dGluZ3MnIH0pO1xuICAgIGNvbnN0IHRlbXBsYXRlSW5zdHJ1Y3Rpb25zRWwgPSBjb250YWluZXJFbC5jcmVhdGVFbCgncCcpO1xuICAgIHRlbXBsYXRlSW5zdHJ1Y3Rpb25zRWwuYXBwZW5kKFxuICAgICAgY3JlYXRlU3Bhbih7XG4gICAgICAgIHRleHQ6XG4gICAgICAgICAgJ1RoZSBmb2xsb3dpbmcgc2V0dGluZ3MgZGV0ZXJtaW5lIGhvdyB0aGUgbm90ZXMgYW5kIGxpbmtzIGNyZWF0ZWQgYnkgJyArXG4gICAgICAgICAgJ3RoZSBwbHVnaW4gd2lsbCBiZSByZW5kZXJlZC4gWW91IG1heSBzcGVjaWZ5IGEgY3VzdG9tIHRlbXBsYXRlIGZvciAnICtcbiAgICAgICAgICAnZWFjaCB0eXBlIG9mIGNvbnRlbnQuIFRlbXBsYXRlcyBhcmUgaW50ZXJwcmV0ZWQgdXNpbmcgJyxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGVtcGxhdGVJbnN0cnVjdGlvbnNFbC5hcHBlbmQoXG4gICAgICBjcmVhdGVFbCgnYScsIHtcbiAgICAgICAgdGV4dDogJ0hhbmRsZWJhcnMnLFxuICAgICAgICBocmVmOiAnaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2d1aWRlL2V4cHJlc3Npb25zLmh0bWwnLFxuICAgICAgfSksXG4gICAgKTtcbiAgICB0ZW1wbGF0ZUluc3RydWN0aW9uc0VsLmFwcGVuZChcbiAgICAgIGNyZWF0ZVNwYW4oe1xuICAgICAgICB0ZXh0OiAnIHN5bnRheC4gWW91IGNhbiBtYWtlIHJlZmVyZW5jZSB0byB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczonLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IHRlbXBsYXRlVmFyaWFibGVVbCA9IGNvbnRhaW5lckVsLmNyZWF0ZUVsKCd1bCcsIHtcbiAgICAgIGF0dHI6IHsgaWQ6ICdjaXRhdGlvblRlbXBsYXRlVmFyaWFibGVzJyB9LFxuICAgIH0pO1xuICAgIE9iamVjdC5lbnRyaWVzKFRFTVBMQVRFX1ZBUklBQkxFUykuZm9yRWFjaCgodmFyaWFibGVEYXRhKSA9PiB7XG4gICAgICBjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gPSB2YXJpYWJsZURhdGEsXG4gICAgICAgIHRlbXBsYXRlVmFyaWFibGVJdGVtID0gdGVtcGxhdGVWYXJpYWJsZVVsLmNyZWF0ZUVsKCdsaScpO1xuXG4gICAgICB0ZW1wbGF0ZVZhcmlhYmxlSXRlbS5jcmVhdGVFbCgnc3BhbicsIHtcbiAgICAgICAgY2xzOiAndGV4dC1tb25vc3BhY2UnLFxuICAgICAgICB0ZXh0OiAne3snICsga2V5ICsgJ319JyxcbiAgICAgIH0pO1xuXG4gICAgICB0ZW1wbGF0ZVZhcmlhYmxlSXRlbS5jcmVhdGVFbCgnc3BhbicsIHtcbiAgICAgICAgdGV4dDogZGVzY3JpcHRpb24gPyBgIOKAlCAke2Rlc2NyaXB0aW9ufWAgOiAnJyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdGVtcGxhdGVFbnRyeUluc3RydWN0aW9uc0VsID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ3AnKTtcbiAgICB0ZW1wbGF0ZUVudHJ5SW5zdHJ1Y3Rpb25zRWwuYXBwZW5kKFxuICAgICAgY3JlYXRlU3Bhbih7IHRleHQ6ICdBZHZhbmNlZCB1c2VycyBtYXkgYWxzbyByZWZlciB0byB0aGUgJyB9KSxcbiAgICAgIGNyZWF0ZVNwYW4oeyB0ZXh0OiAne3tlbnRyeX19JywgY2xzOiAndGV4dC1tb25vc3BhY2UnIH0pLFxuICAgICAgY3JlYXRlU3Bhbih7XG4gICAgICAgIHRleHQ6XG4gICAgICAgICAgJyB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnMgdGhlIGZ1bGwgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSAnICtcbiAgICAgICAgICAncmVmZXJlbmNlIGFzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgcGx1Z2luLiBTZWUgdGhlICcsXG4gICAgICB9KSxcbiAgICAgIGNyZWF0ZUVsKCdhJywge1xuICAgICAgICB0ZXh0OiAncGx1Z2luIGRvY3VtZW50YXRpb24nLFxuICAgICAgICBocmVmOiAnaHR0cDovL3d3dy5mb2xkbC5tZS9vYnNpZGlhbi1jaXRhdGlvbi1wbHVnaW4vY2xhc3Nlcy9lbnRyeS5odG1sJyxcbiAgICAgIH0pLFxuICAgICAgY3JlYXRlU3Bhbih7IHRleHQ6IFwiIGZvciBpbmZvcm1hdGlvbiBvbiB0aGlzIG9iamVjdCdzIHN0cnVjdHVyZS5cIiB9KSxcbiAgICApO1xuXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gzJywgeyB0ZXh0OiAnTGl0ZXJhdHVyZSBub3RlIHRlbXBsYXRlcycgfSk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKCdMaXRlcmF0dXJlIG5vdGUgdGl0bGUgdGVtcGxhdGUnKVxuICAgICAgLmFkZFRleHQoKGlucHV0KSA9PlxuICAgICAgICB0aGlzLmJ1aWxkVmFsdWVJbnB1dChpbnB1dCwgJ2xpdGVyYXR1cmVOb3RlVGl0bGVUZW1wbGF0ZScpLFxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoJ0xpdGVyYXR1cmUgbm90ZSBjb250ZW50IHRlbXBsYXRlJylcbiAgICAgIC5hZGRUZXh0QXJlYSgoaW5wdXQpID0+XG4gICAgICAgIHRoaXMuYnVpbGRWYWx1ZUlucHV0KGlucHV0LCAnbGl0ZXJhdHVyZU5vdGVDb250ZW50VGVtcGxhdGUnKSxcbiAgICAgICk7XG5cbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDMnLCB7IHRleHQ6ICdNYXJrZG93biBjaXRhdGlvbiB0ZW1wbGF0ZXMnIH0pO1xuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdwJywge1xuICAgICAgdGV4dDpcbiAgICAgICAgJ1lvdSBjYW4gaW5zZXJ0IFBhbmRvYy1zdHlsZSBNYXJrZG93biBjaXRhdGlvbnMgcmF0aGVyIHRoYW4gbGl0ZXJhdHVyZSBub3RlcyBieSB1c2luZyB0aGUgXCJJbnNlcnQgTWFya2Rvd24gY2l0YXRpb25cIiBjb21tYW5kLiBUaGUgYmVsb3cgb3B0aW9ucyBhbGxvdyBjdXN0b21pemF0aW9uIG9mIHRoZSBNYXJrZG93biBjaXRhdGlvbiBmb3JtYXQuJyxcbiAgICB9KTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoJ01hcmtkb3duIHByaW1hcnkgY2l0YXRpb24gdGVtcGxhdGUnKVxuICAgICAgLmFkZFRleHQoKGlucHV0KSA9PlxuICAgICAgICB0aGlzLmJ1aWxkVmFsdWVJbnB1dChpbnB1dCwgJ21hcmtkb3duQ2l0YXRpb25UZW1wbGF0ZScpLFxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoJ01hcmtkb3duIHNlY29uZGFyeSBjaXRhdGlvbiB0ZW1wbGF0ZScpXG4gICAgICAuYWRkVGV4dCgoaW5wdXQpID0+XG4gICAgICAgIHRoaXMuYnVpbGRWYWx1ZUlucHV0KGlucHV0LCAnYWx0ZXJuYXRpdmVNYXJrZG93bkNpdGF0aW9uVGVtcGxhdGUnKSxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmZiB0aGUgcGF0aCBleGlzdHM7IGRpc3BsYXlzIGVycm9yIGFzIGEgc2lkZS1lZmZlY3RcbiAgICovXG4gIGFzeW5jIGNoZWNrQ2l0YXRpb25FeHBvcnRQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmNpdGF0aW9uUGF0aExvYWRpbmdFbC5hZGRDbGFzcygnZC1ub25lJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgRmlsZVN5c3RlbUFkYXB0ZXIucmVhZExvY2FsRmlsZShcbiAgICAgICAgdGhpcy5wbHVnaW4ucmVzb2x2ZUxpYnJhcnlQYXRoKGZpbGVQYXRoKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNpdGF0aW9uUGF0aEVycm9yRWwuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuY2l0YXRpb25QYXRoU3VjY2Vzc0VsLmFkZENsYXNzKCdkLW5vbmUnKTtcbiAgICAgIHRoaXMuY2l0YXRpb25QYXRoRXJyb3JFbC5yZW1vdmVDbGFzcygnZC1ub25lJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzaG93Q2l0YXRpb25FeHBvcnRQYXRoU3VjY2VzcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGx1Z2luLmxpYnJhcnkpIHJldHVybjtcblxuICAgIHRoaXMuY2l0YXRpb25QYXRoU3VjY2Vzc0VsLnNldFRleHQoXG4gICAgICBgTG9hZGVkIGxpYnJhcnkgd2l0aCAke3RoaXMucGx1Z2luLmxpYnJhcnkuc2l6ZX0gcmVmZXJlbmNlcy5gLFxuICAgICk7XG4gICAgdGhpcy5jaXRhdGlvblBhdGhTdWNjZXNzRWwucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCdcblxudmFyIG1lc3NhZ2VJZHMgPSAwXG5cbmZ1bmN0aW9uIG9uTWVzc2FnZSAoc2VsZiwgZSkge1xuICB2YXIgbWVzc2FnZSA9IGUuZGF0YVxuICBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkgfHwgbWVzc2FnZS5sZW5ndGggPCAyKSB7XG4gICAgLy8gSWdub3JlIC0gdGhpcyBtZXNzYWdlIGlzIG5vdCBmb3IgdXMuXG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG1lc3NhZ2VJZCA9IG1lc3NhZ2VbMF1cbiAgdmFyIGVycm9yID0gbWVzc2FnZVsxXVxuICB2YXIgcmVzdWx0ID0gbWVzc2FnZVsyXVxuXG4gIHZhciBjYWxsYmFjayA9IHNlbGYuX2NhbGxiYWNrc1ttZXNzYWdlSWRdXG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIC8vIElnbm9yZSAtIHVzZXIgbWlnaHQgaGF2ZSBjcmVhdGVkIG11bHRpcGxlIFByb21pc2VXb3JrZXJzLlxuICAgIC8vIFRoaXMgbWVzc2FnZSBpcyBub3QgZm9yIHVzLlxuICAgIHJldHVyblxuICB9XG5cbiAgZGVsZXRlIHNlbGYuX2NhbGxiYWNrc1ttZXNzYWdlSWRdXG4gIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpXG59XG5cbmZ1bmN0aW9uIFByb21pc2VXb3JrZXIgKHdvcmtlcikge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgc2VsZi5fd29ya2VyID0gd29ya2VyXG4gIHNlbGYuX2NhbGxiYWNrcyA9IHt9XG5cbiAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgIG9uTWVzc2FnZShzZWxmLCBlKVxuICB9KVxufVxuXG5Qcm9taXNlV29ya2VyLnByb3RvdHlwZS5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uICh1c2VyTWVzc2FnZSkge1xuICB2YXIgc2VsZiA9IHRoaXNcbiAgdmFyIG1lc3NhZ2VJZCA9IG1lc3NhZ2VJZHMrK1xuXG4gIHZhciBtZXNzYWdlVG9TZW5kID0gW21lc3NhZ2VJZCwgdXNlck1lc3NhZ2VdXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBzZWxmLl9jYWxsYmFja3NbbWVzc2FnZUlkXSA9IGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0KSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoZXJyb3IubWVzc2FnZSkpXG4gICAgICB9XG4gICAgICByZXNvbHZlKHJlc3VsdClcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAodHlwZW9mIHNlbGYuX3dvcmtlci5jb250cm9sbGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gc2VydmljZSB3b3JrZXIsIHVzZSBNZXNzYWdlQ2hhbm5lbHMgYmVjYXVzZSBlLnNvdXJjZSBpcyBicm9rZW4gaW4gQ2hyb21lIDwgNTE6XG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01NDMxOThcbiAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKClcbiAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgb25NZXNzYWdlKHNlbGYsIGUpXG4gICAgICB9XG4gICAgICBzZWxmLl93b3JrZXIuY29udHJvbGxlci5wb3N0TWVzc2FnZShtZXNzYWdlVG9TZW5kLCBbY2hhbm5lbC5wb3J0Ml0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlYiB3b3JrZXJcbiAgICAgIHNlbGYuX3dvcmtlci5wb3N0TWVzc2FnZShtZXNzYWdlVG9TZW5kKVxuICAgIH1cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlV29ya2VyXG4iLCIvKipcbiAqIERlY2xhcmVzIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgd2hpY2ggYXJlIG1pc3NpbmcgZnJvbSB0aGUgT2JzaWRpYW4gQVBJLlxuICovXG5cbmltcG9ydCB7IE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcblxuZXhwb3J0IGNsYXNzIE5vdGljZUV4dCBleHRlbmRzIE5vdGljZSB7XG4gIHN0YXRpYyBESVNBUFBFQVJJTkdfQ0xBU1MgPSAnbW9kLWRpc2FwcGVhcmluZyc7XG5cbiAgbm90aWNlRWw6IEhUTUxFbGVtZW50O1xufVxuIiwiaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgUHJvbWlzZVdvcmtlciBmcm9tICdwcm9taXNlLXdvcmtlcic7XG5cbmltcG9ydCB7IE5vdGljZUV4dCB9IGZyb20gJy4vb2JzaWRpYW4tZXh0ZW5zaW9ucyc7XG5cbmV4cG9ydCBjb25zdCBESVNBTExPV0VEX0ZJTEVOQU1FX0NIQVJBQ1RFUlNfUkUgPSAvWypcIlxcXFwvPD46fD9dL2c7XG5cbi8qKlxuICogTWFuYWdlcyBhIGNhdGVnb3J5IG9mIG5vdGljZXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBVSS4gUHJldmVudHMgbXVsdGlwbGVcbiAqIG5vdGljZXMgYmVpbmcgc2hvd24gYXQgdGhlIHNhbWUgdGltZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vdGlmaWVyIHtcbiAgc3RhdGljIERJU0FQUEVBUklOR19DTEFTUyA9ICdtb2QtZGlzYXBwZWFyaW5nJztcbiAgY3VycmVudE5vdGljZT86IE5vdGljZUV4dDtcbiAgbXV0YXRpb25PYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRlZmF1bHRNZXNzYWdlOiBzdHJpbmcpIHt9XG5cbiAgdW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG5vdGljZSB3YXMgc2hvd24sIGFuZCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHNob3cobWVzc2FnZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IHRoaXMuZGVmYXVsdE1lc3NhZ2U7XG4gICAgaWYgKHRoaXMuY3VycmVudE5vdGljZSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5jdXJyZW50Tm90aWNlID0gbmV3IE5vdGljZShtZXNzYWdlKSBhcyBOb3RpY2VFeHQ7XG5cbiAgICAvLyBTZXQgdXAgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gd2F0Y2ggZm9yIHdoZW4gdGhlIG5vdGljZSBkaXNhcHBlYXJzLlxuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChjaGFuZ2VzLCBvYnNlcnZlcikgPT4ge1xuICAgICAgY29uc3QgaXNEaXNhcHBlYXJpbmcgPSBjaGFuZ2VzLnNvbWUoKGNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IGNoYW5nZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY2hhbmdlLnR5cGUgPT0gJ2F0dHJpYnV0ZXMnICYmXG4gICAgICAgICAgZWwuaGFzQ2xhc3MoTm90aWNlRXh0LkRJU0FQUEVBUklOR19DTEFTUylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlzRGlzYXBwZWFyaW5nKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE5vdGljZSA9IG51bGw7XG4gICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmN1cnJlbnROb3RpY2Uubm90aWNlRWwsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLFxuICAgIH0pO1xuICB9XG5cbiAgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnROb3RpY2U/LmhpZGUoKTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcblxuICAgIHRoaXMuY3VycmVudE5vdGljZSA9IG51bGw7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIE1hbmFnZXMgYSBXb3JrZXIsIHJlY29yZGluZyBpdHMgc3RhdGUgYW5kIG9wdGlvbmFsbHkgcHJldmVudGluZ1xuICogbWVzc2FnZSBwb3N0aW5ncyBiZWZvcmUgcmVzcG9uc2VzIHRvIHByaW9yIG1lc3NhZ2VzIGhhdmUgYmVlbiByZWNlaXZlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdvcmtlck1hbmFnZXIge1xuICBwcml2YXRlIHdvcmtlciA9IG5ldyBQcm9taXNlV29ya2VyKHRoaXMuX3dvcmtlcik7XG4gIG9wdGlvbnM6IFdvcmtlck1hbmFnZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPbmx5IHJlbGV2YW50IHdoZW4gYGJsb2NraW5nQ2hhbm5lbGAgb3B0aW9uIGlzIHRydWUuXG4gICAqIFRoZW4gdGhpcyBwcm9wZXJ0eSBpcyB0cnVlIGlmZiB0aGUgd29ya2VyIGlzIGN1cnJlbnRseSBwcm9jZXNzaW5nIGFcbiAgICogcmVjZWl2ZWQgbWVzc2FnZSwgYW5kIGhhcyBub3QgeWV0IHBvc3RlZCBhIHJlc3BvbnNlLlxuICAgKi9cbiAgYmxvY2tlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3dvcmtlcjogV29ya2VyLCBvcHRpb25zOiBXb3JrZXJNYW5hZ2VyT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4ud29ya2VyTWFuYWdlckRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBwb3N0IGEgbWVzc2FnZSB0byB0aGUgd29ya2VyIGFuZCByZXR1cm4gYSBwcm9taXNlIHJlc3BvbnNlLlxuICAgKlxuICAgKiBJZiBgYmxvY2tpbmdDaGFubmVsYCBvcHRpb24gaXMgdHJ1ZSBhbmQgdGhlIGNoYW5uZWwgaXMgY3VycmVudGx5IGJsb2NrZWQsXG4gICAqIHRoZSBtZXNzYWdlIHdpbGwgYmUgZGlzY2FyZGVkIGFuZCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICovXG4gIGFzeW5jIHBvc3Q8VFJlc3VsdCA9IGFueSwgVElucHV0ID0gYW55Pihtc2c6IFRJbnB1dCk6IFByb21pc2U8VFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYmxvY2tpbmdDaGFubmVsICYmIHRoaXMuYmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFdvcmtlck1hbmFnZXJCbG9ja2VkKCk7XG4gICAgfVxuXG4gICAgdGhpcy5ibG9ja2VkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcy53b3JrZXIucG9zdE1lc3NhZ2UobXNnKS50aGVuKFxuICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmJsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5ibG9ja2VkID0gZmFsc2U7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXb3JrZXJNYW5hZ2VyQmxvY2tlZCBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ1dvcmtlck1hbmFnZXI6IGRpc2NhcmRlZCBtZXNzYWdlIGJlY2F1c2UgY2hhbm5lbCBpcyBibG9ja2VkJyk7XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIFdvcmtlck1hbmFnZXJCbG9ja2VkLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0cmVhdCB0aGUgd29ya2VyIGNoYW5uZWwgYXMgYmxvY2tpbmcgLS0gd2hlbiB0aGUgd29ya2VyIHJlY2VpdmVzXG4gICAqIGEgbWVzc2FnZSwgbm8gb3RoZXIgbWVzc2FnZXMgY2FuIGJlIHNlbnQgdW50aWwgdGhlIHdvcmtlciBzZW5kcyBhIG1lc3NhZ2UuXG4gICAqIE1lc3NhZ2VzIHdoaWNoIGFyZSBzZW50IGR1cmluZyB0aGUgYmxvY2tpbmcgcGVyaW9kIHdpbGwgYmUgZGlzY2FyZGVkLlxuICAgKi9cbiAgYmxvY2tpbmdDaGFubmVsOiBib29sZWFuO1xufVxuXG5jb25zdCB3b3JrZXJNYW5hZ2VyRGVmYXVsdE9wdGlvbnM6IFdvcmtlck1hbmFnZXJPcHRpb25zID0ge1xuICBibG9ja2luZ0NoYW5uZWw6IGZhbHNlLFxufTtcbiIsImltcG9ydCB7XG4gIEZpbGVTeXN0ZW1BZGFwdGVyLFxuICBNYXJrZG93blNvdXJjZVZpZXcsXG4gIE1hcmtkb3duVmlldyxcbiAgbm9ybWFsaXplUGF0aCxcbiAgUGx1Z2luLFxuICBURmlsZSxcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNob2tpZGFyIGZyb20gJ2Nob2tpZGFyJztcbmltcG9ydCAqIGFzIENvZGVNaXJyb3IgZnJvbSAnY29kZW1pcnJvcic7XG5cbmltcG9ydCB7XG4gIGNvbXBpbGUgYXMgY29tcGlsZVRlbXBsYXRlLFxuICBUZW1wbGF0ZURlbGVnYXRlIGFzIFRlbXBsYXRlLFxufSBmcm9tICdoYW5kbGViYXJzJztcblxuaW1wb3J0IHtcbiAgSW5zZXJ0Q2l0YXRpb25Nb2RhbCxcbiAgSW5zZXJ0Tm90ZUxpbmtNb2RhbCxcbiAgSW5zZXJ0Tm90ZUNvbnRlbnRNb2RhbCxcbiAgT3Blbk5vdGVNb2RhbCxcbn0gZnJvbSAnLi9tb2RhbHMnO1xuaW1wb3J0IHsgVmF1bHRFeHQgfSBmcm9tICcuL29ic2lkaWFuLWV4dGVuc2lvbnMuZCc7XG5pbXBvcnQgeyBDaXRhdGlvblNldHRpbmdUYWIsIENpdGF0aW9uc1BsdWdpblNldHRpbmdzIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5pbXBvcnQge1xuICBFbnRyeSxcbiAgRW50cnlEYXRhLFxuICBFbnRyeUJpYkxhVGVYQWRhcHRlcixcbiAgRW50cnlDU0xBZGFwdGVyLFxuICBJSW5kZXhhYmxlLFxuICBMaWJyYXJ5LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIERJU0FMTE9XRURfRklMRU5BTUVfQ0hBUkFDVEVSU19SRSxcbiAgTm90aWZpZXIsXG4gIFdvcmtlck1hbmFnZXIsXG4gIFdvcmtlck1hbmFnZXJCbG9ja2VkLFxufSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IExvYWRXb3JrZXIgZnJvbSAnd2ViLXdvcmtlcjouL3dvcmtlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENpdGF0aW9uUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgc2V0dGluZ3M6IENpdGF0aW9uc1BsdWdpblNldHRpbmdzO1xuICBsaWJyYXJ5OiBMaWJyYXJ5O1xuXG4gIC8vIFRlbXBsYXRlIGNvbXBpbGF0aW9uIG9wdGlvbnNcbiAgcHJpdmF0ZSB0ZW1wbGF0ZVNldHRpbmdzID0ge1xuICAgIG5vRXNjYXBlOiB0cnVlLFxuICB9O1xuXG4gIHByaXZhdGUgbG9hZFdvcmtlciA9IG5ldyBXb3JrZXJNYW5hZ2VyKG5ldyBMb2FkV29ya2VyKCksIHtcbiAgICBibG9ja2luZ0NoYW5uZWw6IHRydWUsXG4gIH0pO1xuXG4gIGxvYWRFcnJvck5vdGlmaWVyID0gbmV3IE5vdGlmaWVyKFxuICAgICdVbmFibGUgdG8gbG9hZCBjaXRhdGlvbnMuIFBsZWFzZSB1cGRhdGUgQ2l0YXRpb25zIHBsdWdpbiBzZXR0aW5ncy4nLFxuICApO1xuICBsaXRlcmF0dXJlTm90ZUVycm9yTm90aWZpZXIgPSBuZXcgTm90aWZpZXIoXG4gICAgJ1VuYWJsZSB0byBhY2Nlc3MgbGl0ZXJhdHVyZSBub3RlLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGUgbGl0ZXJhdHVyZSBub3RlIGZvbGRlciBleGlzdHMsIG9yIHVwZGF0ZSB0aGUgQ2l0YXRpb25zIHBsdWdpbiBzZXR0aW5ncy4nLFxuICApO1xuXG4gIGdldCBlZGl0b3IoKTogQ29kZU1pcnJvci5FZGl0b3Ige1xuICAgIGNvbnN0IHZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuYWN0aXZlTGVhZi52aWV3O1xuICAgIGlmICghKHZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHNvdXJjZVZpZXcgPSB2aWV3LnNvdXJjZU1vZGU7XG4gICAgcmV0dXJuIChzb3VyY2VWaWV3IGFzIE1hcmtkb3duU291cmNlVmlldykuY21FZGl0b3I7XG4gIH1cblxuICBhc3luYyBsb2FkU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG5ldyBDaXRhdGlvbnNQbHVnaW5TZXR0aW5ncygpO1xuXG4gICAgY29uc3QgbG9hZGVkU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XG4gICAgaWYgKCFsb2FkZWRTZXR0aW5ncykgcmV0dXJuO1xuXG4gICAgY29uc3QgdG9Mb2FkID0gW1xuICAgICAgJ2NpdGF0aW9uRXhwb3J0UGF0aCcsXG4gICAgICAnY2l0YXRpb25FeHBvcnRGb3JtYXQnLFxuICAgICAgJ2xpdGVyYXR1cmVOb3RlVGl0bGVUZW1wbGF0ZScsXG4gICAgICAnbGl0ZXJhdHVyZU5vdGVGb2xkZXInLFxuICAgICAgJ2xpdGVyYXR1cmVOb3RlQ29udGVudFRlbXBsYXRlJyxcbiAgICAgICdtYXJrZG93bkNpdGF0aW9uVGVtcGxhdGUnLFxuICAgICAgJ2FsdGVybmF0aXZlTWFya2Rvd25DaXRhdGlvblRlbXBsYXRlJyxcbiAgICBdO1xuICAgIHRvTG9hZC5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XG4gICAgICBpZiAoc2V0dGluZyBpbiBsb2FkZWRTZXR0aW5ncykge1xuICAgICAgICAodGhpcy5zZXR0aW5ncyBhcyBJSW5kZXhhYmxlKVtzZXR0aW5nXSA9IGxvYWRlZFNldHRpbmdzW3NldHRpbmddO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVNldHRpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG4gIH1cblxuICBvbmxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkU2V0dGluZ3MoKS50aGVuKCgpID0+IHRoaXMuaW5pdCgpKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuY2l0YXRpb25FeHBvcnRQYXRoKSB7XG4gICAgICAvLyBMb2FkIGxpYnJhcnkgZm9yIHRoZSBmaXJzdCB0aW1lXG4gICAgICB0aGlzLmxvYWRMaWJyYXJ5KCk7XG5cbiAgICAgIC8vIFNldCB1cCBhIHdhdGNoZXIgdG8gcmVmcmVzaCB3aGVuZXZlciB0aGUgZXhwb3J0IGlzIHVwZGF0ZWRcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFdhaXQgdW50aWwgZmlsZXMgYXJlIGZpbmlzaGVkIGJlaW5nIHdyaXR0ZW4gYmVmb3JlIGdvaW5nIGFoZWFkIHdpdGhcbiAgICAgICAgLy8gdGhlIHJlZnJlc2ggLS0gaGVyZSwgd2UgcmVxdWVzdCB0aGF0IGBjaGFuZ2VgIGV2ZW50cyBiZSBhY2N1bXVsYXRlZFxuICAgICAgICAvLyB1bnRpbCBub3RoaW5nIHNob3dzIHVwIGZvciA1MDAgbXNcbiAgICAgICAgLy8gVE9ETyBtYWdpYyBudW1iZXJcbiAgICAgICAgY29uc3Qgd2F0Y2hPcHRpb25zID0ge1xuICAgICAgICAgIGF3YWl0V3JpdGVGaW5pc2g6IHtcbiAgICAgICAgICAgIHN0YWJpbGl0eVRocmVzaG9sZDogNTAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgY2hva2lkYXJcbiAgICAgICAgICAud2F0Y2goXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVMaWJyYXJ5UGF0aCh0aGlzLnNldHRpbmdzLmNpdGF0aW9uRXhwb3J0UGF0aCksXG4gICAgICAgICAgICB3YXRjaE9wdGlvbnMsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkTGlicmFyeSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMubG9hZEVycm9yTm90aWZpZXIuc2hvdygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPIHNob3cgd2FybmluZz9cbiAgICB9XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6ICdvcGVuLWxpdGVyYXR1cmUtbm90ZScsXG4gICAgICBuYW1lOiAnT3BlbiBsaXRlcmF0dXJlIG5vdGUnLFxuICAgICAgaG90a2V5czogW3sgbW9kaWZpZXJzOiBbJ0N0cmwnLCAnU2hpZnQnXSwga2V5OiAnbycgfV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2RhbCA9IG5ldyBPcGVuTm90ZU1vZGFsKHRoaXMuYXBwLCB0aGlzKTtcbiAgICAgICAgbW9kYWwub3BlbigpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogJ3VwZGF0ZS1iaWItZGF0YScsXG4gICAgICBuYW1lOiAnUmVmcmVzaCBjaXRhdGlvbiBkYXRhYmFzZScsXG4gICAgICBob3RrZXlzOiBbeyBtb2RpZmllcnM6IFsnQ3RybCcsICdTaGlmdCddLCBrZXk6ICdyJyB9XSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZExpYnJhcnkoKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6ICdpbnNlcnQtY2l0YXRpb24nLFxuICAgICAgbmFtZTogJ0luc2VydCBsaXRlcmF0dXJlIG5vdGUgbGluaycsXG4gICAgICBob3RrZXlzOiBbeyBtb2RpZmllcnM6IFsnQ3RybCcsICdTaGlmdCddLCBrZXk6ICdlJyB9XSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGFsID0gbmV3IEluc2VydE5vdGVMaW5rTW9kYWwodGhpcy5hcHAsIHRoaXMpO1xuICAgICAgICBtb2RhbC5vcGVuKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgIGlkOiAnaW5zZXJ0LWxpdGVyYXR1cmUtbm90ZS1jb250ZW50JyxcbiAgICAgIG5hbWU6ICdJbnNlcnQgbGl0ZXJhdHVyZSBub3RlIGNvbnRlbnQgaW4gdGhlIGN1cnJlbnQgcGFuZScsXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2RhbCA9IG5ldyBJbnNlcnROb3RlQ29udGVudE1vZGFsKHRoaXMuYXBwLCB0aGlzKTtcbiAgICAgICAgbW9kYWwub3BlbigpO1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogJ2luc2VydC1tYXJrZG93bi1jaXRhdGlvbicsXG4gICAgICBuYW1lOiAnSW5zZXJ0IE1hcmtkb3duIGNpdGF0aW9uJyxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vZGFsID0gbmV3IEluc2VydENpdGF0aW9uTW9kYWwodGhpcy5hcHAsIHRoaXMpO1xuICAgICAgICBtb2RhbC5vcGVuKCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBDaXRhdGlvblNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIGEgcHJvdmlkZWQgbGlicmFyeSBwYXRoLCBhbGxvd2luZyBmb3IgcmVsYXRpdmUgcGF0aHMgcm9vdGVkIGF0XG4gICAqIHRoZSB2YXVsdCBkaXJlY3RvcnkuXG4gICAqL1xuICByZXNvbHZlTGlicmFyeVBhdGgocmF3UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YXVsdFJvb3QgPVxuICAgICAgdGhpcy5hcHAudmF1bHQuYWRhcHRlciBpbnN0YW5jZW9mIEZpbGVTeXN0ZW1BZGFwdGVyXG4gICAgICAgID8gdGhpcy5hcHAudmF1bHQuYWRhcHRlci5nZXRCYXNlUGF0aCgpXG4gICAgICAgIDogJy8nO1xuICAgIHJldHVybiBwYXRoLnJlc29sdmUodmF1bHRSb290LCByYXdQYXRoKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRMaWJyYXJ5KCk6IFByb21pc2U8TGlicmFyeT4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ0NpdGF0aW9uIHBsdWdpbjogUmVsb2FkaW5nIGxpYnJhcnknKTtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5jaXRhdGlvbkV4cG9ydFBhdGgpIHtcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5yZXNvbHZlTGlicmFyeVBhdGgoXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuY2l0YXRpb25FeHBvcnRQYXRoLFxuICAgICAgKTtcblxuICAgICAgLy8gVW5sb2FkIGN1cnJlbnQgbGlicmFyeS5cbiAgICAgIHRoaXMubGlicmFyeSA9IG51bGw7XG5cbiAgICAgIHJldHVybiBGaWxlU3lzdGVtQWRhcHRlci5yZWFkTG9jYWxGaWxlKGZpbGVQYXRoKVxuICAgICAgICAudGhlbigoYnVmZmVyKSA9PiB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZW1haW5pbmcgZXJyb3IgbWVzc2FnZSwgaGlkZSBpdFxuICAgICAgICAgIHRoaXMubG9hZEVycm9yTm90aWZpZXIuaGlkZSgpO1xuXG4gICAgICAgICAgLy8gRGVjb2RlIGZpbGUgYXMgVVRGLTguXG4gICAgICAgICAgY29uc3QgZGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcbiAgICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGY4Jyk7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVyLmRlY29kZShkYXRhVmlldyk7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkV29ya2VyLnBvc3Qoe1xuICAgICAgICAgICAgZGF0YWJhc2VSYXc6IHZhbHVlLFxuICAgICAgICAgICAgZGF0YWJhc2VUeXBlOiB0aGlzLnNldHRpbmdzLmNpdGF0aW9uRXhwb3J0Rm9ybWF0LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoZW50cmllczogRW50cnlEYXRhW10pID0+IHtcbiAgICAgICAgICBsZXQgYWRhcHRlcjogbmV3IChkYXRhOiBFbnRyeURhdGEpID0+IEVudHJ5O1xuICAgICAgICAgIGxldCBpZEtleTogc3RyaW5nO1xuXG4gICAgICAgICAgc3dpdGNoICh0aGlzLnNldHRpbmdzLmNpdGF0aW9uRXhwb3J0Rm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlICdiaWJsYXRleCc6XG4gICAgICAgICAgICAgIGFkYXB0ZXIgPSBFbnRyeUJpYkxhVGVYQWRhcHRlcjtcbiAgICAgICAgICAgICAgaWRLZXkgPSAna2V5JztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjc2wtanNvbic6XG4gICAgICAgICAgICAgIGFkYXB0ZXIgPSBFbnRyeUNTTEFkYXB0ZXI7XG4gICAgICAgICAgICAgIGlkS2V5ID0gJ2lkJztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5saWJyYXJ5ID0gbmV3IExpYnJhcnkoXG4gICAgICAgICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICAgIGVudHJpZXMubWFwKChlKSA9PiBbKGUgYXMgSUluZGV4YWJsZSlbaWRLZXldLCBuZXcgYWRhcHRlcihlKV0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXG4gICAgICAgICAgICBgQ2l0YXRpb24gcGx1Z2luOiBzdWNjZXNzZnVsbHkgbG9hZGVkIGxpYnJhcnkgd2l0aCAke3RoaXMubGlicmFyeS5zaXplfSBlbnRyaWVzLmAsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmxpYnJhcnk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgV29ya2VyTWFuYWdlckJsb2NrZWQpIHtcbiAgICAgICAgICAgIC8vIFNpbGVudGx5IGNhdGNoIFdvcmtlck1hbmFnZXIgZXJyb3IsIHdoaWNoIHdpbGwgYmUgdGhyb3duIGlmIHRoZVxuICAgICAgICAgICAgLy8gbGlicmFyeSBpcyBhbHJlYWR5IGJlaW5nIGxvYWRlZFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgdGhpcy5sb2FkRXJyb3JOb3RpZmllci5zaG93KCk7XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgJ0NpdGF0aW9ucyBwbHVnaW46IGNpdGF0aW9uIGV4cG9ydCBwYXRoIGlzIG5vdCBzZXQuIFBsZWFzZSB1cGRhdGUgcGx1Z2luIHNldHRpbmdzLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWZmIHRoZSBsaWJyYXJ5IGlzIGN1cnJlbnRseSBiZWluZyBsb2FkZWQgb24gdGhlIHdvcmtlciB0aHJlYWQuXG4gICAqL1xuICBnZXQgaXNMaWJyYXJ5TG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkV29ya2VyLmJsb2NrZWQ7XG4gIH1cblxuICBnZXQgbGl0ZXJhdHVyZU5vdGVUaXRsZVRlbXBsYXRlKCk6IFRlbXBsYXRlIHtcbiAgICByZXR1cm4gY29tcGlsZVRlbXBsYXRlKFxuICAgICAgdGhpcy5zZXR0aW5ncy5saXRlcmF0dXJlTm90ZVRpdGxlVGVtcGxhdGUsXG4gICAgICB0aGlzLnRlbXBsYXRlU2V0dGluZ3MsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBsaXRlcmF0dXJlTm90ZUNvbnRlbnRUZW1wbGF0ZSgpOiBUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIGNvbXBpbGVUZW1wbGF0ZShcbiAgICAgIHRoaXMuc2V0dGluZ3MubGl0ZXJhdHVyZU5vdGVDb250ZW50VGVtcGxhdGUsXG4gICAgICB0aGlzLnRlbXBsYXRlU2V0dGluZ3MsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBtYXJrZG93bkNpdGF0aW9uVGVtcGxhdGUoKTogVGVtcGxhdGUge1xuICAgIHJldHVybiBjb21waWxlVGVtcGxhdGUoXG4gICAgICB0aGlzLnNldHRpbmdzLm1hcmtkb3duQ2l0YXRpb25UZW1wbGF0ZSxcbiAgICAgIHRoaXMudGVtcGxhdGVTZXR0aW5ncyxcbiAgICApO1xuICB9XG5cbiAgZ2V0IGFsdGVybmF0aXZlTWFya2Rvd25DaXRhdGlvblRlbXBsYXRlKCk6IFRlbXBsYXRlIHtcbiAgICByZXR1cm4gY29tcGlsZVRlbXBsYXRlKFxuICAgICAgdGhpcy5zZXR0aW5ncy5hbHRlcm5hdGl2ZU1hcmtkb3duQ2l0YXRpb25UZW1wbGF0ZSxcbiAgICAgIHRoaXMudGVtcGxhdGVTZXR0aW5ncyxcbiAgICApO1xuICB9XG5cbiAgZ2V0VGl0bGVGb3JDaXRla2V5KGNpdGVrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdW5zYWZlVGl0bGUgPSB0aGlzLmxpdGVyYXR1cmVOb3RlVGl0bGVUZW1wbGF0ZShcbiAgICAgIHRoaXMubGlicmFyeS5nZXRUZW1wbGF0ZVZhcmlhYmxlc0ZvckNpdGVrZXkoY2l0ZWtleSksXG4gICAgKTtcbiAgICByZXR1cm4gdW5zYWZlVGl0bGUucmVwbGFjZShESVNBTExPV0VEX0ZJTEVOQU1FX0NIQVJBQ1RFUlNfUkUsICdfJyk7XG4gIH1cblxuICBnZXRQYXRoRm9yQ2l0ZWtleShjaXRla2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRUaXRsZUZvckNpdGVrZXkoY2l0ZWtleSk7XG4gICAgLy8gVE9ETyBlc2NhcGUgbm90ZSB0aXRsZVxuICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5zZXR0aW5ncy5saXRlcmF0dXJlTm90ZUZvbGRlciwgYCR7dGl0bGV9Lm1kYCk7XG4gIH1cblxuICBnZXRJbml0aWFsQ29udGVudEZvckNpdGVrZXkoY2l0ZWtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saXRlcmF0dXJlTm90ZUNvbnRlbnRUZW1wbGF0ZShcbiAgICAgIHRoaXMubGlicmFyeS5nZXRUZW1wbGF0ZVZhcmlhYmxlc0ZvckNpdGVrZXkoY2l0ZWtleSksXG4gICAgKTtcbiAgfVxuXG4gIGdldE1hcmtkb3duQ2l0YXRpb25Gb3JDaXRla2V5KGNpdGVrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubWFya2Rvd25DaXRhdGlvblRlbXBsYXRlKFxuICAgICAgdGhpcy5saWJyYXJ5LmdldFRlbXBsYXRlVmFyaWFibGVzRm9yQ2l0ZWtleShjaXRla2V5KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0QWx0ZXJuYXRpdmVNYXJrZG93bkNpdGF0aW9uRm9yQ2l0ZWtleShjaXRla2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsdGVybmF0aXZlTWFya2Rvd25DaXRhdGlvblRlbXBsYXRlKFxuICAgICAgdGhpcy5saWJyYXJ5LmdldFRlbXBsYXRlVmFyaWFibGVzRm9yQ2l0ZWtleShjaXRla2V5KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBhIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoIGZvciB0aGUgbGl0ZXJhdHVyZSBub3RlIGZpbGUgY29ycmVzcG9uZGluZyB0b1xuICAgKiB0aGUgZ2l2ZW4gY2l0ZWtleS4gSWYgbm8gY29ycmVzcG9uZGluZyBmaWxlIGlzIGZvdW5kLCBjcmVhdGUgb25lLlxuICAgKi9cbiAgYXN5bmMgZ2V0T3JDcmVhdGVMaXRlcmF0dXJlTm90ZUZpbGUoY2l0ZWtleTogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFBhdGhGb3JDaXRla2V5KGNpdGVrZXkpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplUGF0aChwYXRoKTtcblxuICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG5vcm1hbGl6ZWRQYXRoKTtcbiAgICBpZiAoZmlsZSA9PSBudWxsKSB7XG4gICAgICAvLyBGaXJzdCB0cnkgYSBjYXNlLWluc2Vuc2l0aXZlIGxvb2t1cC5cbiAgICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLmFwcC52YXVsdFxuICAgICAgICAuZ2V0TWFya2Rvd25GaWxlcygpXG4gICAgICAgIC5maWx0ZXIoKGYpID0+IGYucGF0aC50b0xvd2VyQ2FzZSgpID09IG5vcm1hbGl6ZWRQYXRoLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWxlID0gbWF0Y2hlc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmlsZSA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmNyZWF0ZShcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICB0aGlzLmdldEluaXRpYWxDb250ZW50Rm9yQ2l0ZWtleShjaXRla2V5KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChleGMpIHtcbiAgICAgICAgICB0aGlzLmxpdGVyYXR1cmVOb3RlRXJyb3JOb3RpZmllci5zaG93KCk7XG4gICAgICAgICAgdGhyb3cgZXhjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbGUgYXMgVEZpbGU7XG4gIH1cblxuICBhc3luYyBvcGVuTGl0ZXJhdHVyZU5vdGUoY2l0ZWtleTogc3RyaW5nLCBuZXdQYW5lOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5nZXRPckNyZWF0ZUxpdGVyYXR1cmVOb3RlRmlsZShjaXRla2V5KVxuICAgICAgLnRoZW4oKGZpbGU6IFRGaWxlKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKG5ld1BhbmUpLm9wZW5GaWxlKGZpbGUpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydExpdGVyYXR1cmVOb3RlTGluayhjaXRla2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmdldE9yQ3JlYXRlTGl0ZXJhdHVyZU5vdGVGaWxlKGNpdGVrZXkpXG4gICAgICAudGhlbigoZmlsZTogVEZpbGUpID0+IHtcbiAgICAgICAgY29uc3QgdXNlTWFya2Rvd246IGJvb2xlYW4gPSAoPFZhdWx0RXh0PnRoaXMuYXBwLnZhdWx0KS5nZXRDb25maWcoXG4gICAgICAgICAgJ3VzZU1hcmtkb3duTGlua3MnLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMuZ2V0VGl0bGVGb3JDaXRla2V5KGNpdGVrZXkpO1xuXG4gICAgICAgIGxldCBsaW5rVGV4dDogc3RyaW5nO1xuICAgICAgICBpZiAodXNlTWFya2Rvd24pIHtcbiAgICAgICAgICBjb25zdCB1cmkgPSBlbmNvZGVVUkkoXG4gICAgICAgICAgICB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmZpbGVUb0xpbmt0ZXh0KGZpbGUsICcnLCBmYWxzZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsaW5rVGV4dCA9IGBbJHt0aXRsZX1dKCR7dXJpfSlgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmtUZXh0ID0gYFtbJHt0aXRsZX1dXWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvci5yZXBsYWNlUmFuZ2UobGlua1RleHQsIHRoaXMuZWRpdG9yLmdldEN1cnNvcigpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGxpdGVyYXR1cmUgbm90ZSBjb250ZW50IGZvciBhIGdpdmVuIHJlZmVyZW5jZSBhbmQgaW5zZXJ0IGluIHRoZVxuICAgKiBjdXJyZW50bHkgYWN0aXZlIHBhbmUuXG4gICAqL1xuICBhc3luYyBpbnNlcnRMaXRlcmF0dXJlTm90ZUNvbnRlbnQoY2l0ZWtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0SW5pdGlhbENvbnRlbnRGb3JDaXRla2V5KGNpdGVrZXkpO1xuICAgIHRoaXMuZWRpdG9yLnJlcGxhY2VSYW5nZShjb250ZW50LCB0aGlzLmVkaXRvci5nZXRDdXJzb3IoKSk7XG4gIH1cblxuICBhc3luYyBpbnNlcnRNYXJrZG93bkNpdGF0aW9uKFxuICAgIGNpdGVrZXk6IHN0cmluZyxcbiAgICBhbHRlcm5hdGl2ZSA9IGZhbHNlLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmdW5jID0gYWx0ZXJuYXRpdmVcbiAgICAgID8gdGhpcy5nZXRBbHRlcm5hdGl2ZU1hcmtkb3duQ2l0YXRpb25Gb3JDaXRla2V5XG4gICAgICA6IHRoaXMuZ2V0TWFya2Rvd25DaXRhdGlvbkZvckNpdGVrZXk7XG4gICAgY29uc3QgY2l0YXRpb24gPSBmdW5jLmJpbmQodGhpcykoY2l0ZWtleSk7XG5cbiAgICB0aGlzLmVkaXRvci5yZXBsYWNlUmFuZ2UoY2l0YXRpb24sIHRoaXMuZWRpdG9yLmdldEN1cnNvcigpKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlJCQwIiwiUE9TSVhfUkVHRVhfU09VUkNFIiwicGFyc2UiLCJzY2FuIiwicmVxdWlyZSQkMSIsImZzIiwicGljb21hdGNoIiwic3lzUGF0aCIsInV0aWxzIiwiaXNPYmplY3QiLCJpc051bWJlciIsInN0cmluZ2lmeSIsInRvUmVnZXhSYW5nZSIsInV0aWwiLCJmaWxsIiwiTUFYX0xFTkdUSCIsIkNIQVJfQ09NTUEiLCJDSEFSX0RPVCIsIkNIQVJfTEVGVF9QQVJFTlRIRVNFUyIsIkNIQVJfUklHSFRfUEFSRU5USEVTRVMiLCJDSEFSX0xFRlRfQ1VSTFlfQlJBQ0UiLCJDSEFSX1JJR0hUX0NVUkxZX0JSQUNFIiwiQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUIiwiQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCIsImNvbXBpbGUiLCJleHBhbmQiLCJwcm9taXNpZnkiLCJTVEFSIiwib3BlbiIsInN0YXQiLCJsc3RhdCIsIkVWX0FERCIsIkVWX0NIQU5HRSIsIkVWX0FERF9ESVIiLCJFVl9FUlJPUiIsIlNUUl9EQVRBIiwiU1RSX0VORCIsIkVNUFRZX0ZOIiwicmVhbHBhdGgiLCJzdGF0TWV0aG9kcyIsInJlcXVpcmUkJDIiLCJFVl9VTkxJTksiLCJCUkFDRV9TVEFSVCIsIkJBTkciLCJGVU5DVElPTl9UWVBFIiwiRU1QVFlfU1RSIiwiaXNXaW5kb3dzIiwicmVxdWlyZSQkMyIsInJlYWRkaXIiLCJicmFjZXMiLCJGc0V2ZW50c0hhbmRsZXIiLCJOb2RlRnNIYW5kbGVyIiwicmVhZGRpcnAiLCJfdXRpbHMiLCJfZXhjZXB0aW9uIiwiZ2xvYmFsIiwiX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmciLCJfaGVscGVyc0VhY2giLCJfaGVscGVyc0hlbHBlck1pc3NpbmciLCJfaGVscGVyc0lmIiwiX2hlbHBlcnNMb2ciLCJfaGVscGVyc0xvb2t1cCIsIl9oZWxwZXJzV2l0aCIsIl9kZWNvcmF0b3JzSW5saW5lIiwiX2xvZ2dlciIsIl9jcmVhdGVOZXdMb29rdXBPYmplY3QiLCJoZWxwZXJzIiwiZGVjb3JhdG9ycyIsIl9oZWxwZXJzIiwiX2RlY29yYXRvcnMiLCJfaW50ZXJuYWxQcm90b0FjY2VzcyIsIl9iYXNlIiwiX2ludGVybmFsV3JhcEhlbHBlciIsImJhc2UiLCJfaGFuZGxlYmFyc0Jhc2UiLCJfaGFuZGxlYmFyc1NhZmVTdHJpbmciLCJfaGFuZGxlYmFyc0V4Y2VwdGlvbiIsIl9oYW5kbGViYXJzVXRpbHMiLCJydW50aW1lIiwiX2hhbmRsZWJhcnNSdW50aW1lIiwiX2hhbmRsZWJhcnNOb0NvbmZsaWN0IiwiX3Zpc2l0b3IiLCJfcGFyc2VyIiwiX3doaXRlc3BhY2VDb250cm9sIiwiX2FzdCIsIkFycmF5U2V0IiwiTWFwcGluZ0xpc3QiLCJiYXNlNjRWTFEiLCJxdWlja1NvcnQiLCJTb3VyY2VNYXBHZW5lcmF0b3IiLCJkZWZpbmUiLCJfY29kZUdlbiIsIl9oYW5kbGViYXJzQ29tcGlsZXJBc3QiLCJfaGFuZGxlYmFyc0NvbXBpbGVySmF2YXNjcmlwdENvbXBpbGVyIiwiX2hhbmRsZWJhcnNDb21waWxlclZpc2l0b3IiLCJfaGFuZGxlYmFyc0NvbXBpbGVyQ29tcGlsZXIiLCJfaGFuZGxlYmFyc0NvbXBpbGVyQmFzZSIsImhhbmRsZWJhcnMiLCJyZXF1aXJlIiwicmVuZGVyTWF0Y2hlcyIsIkZ1enp5U3VnZ2VzdE1vZGFsIiwiTm90aWNlIiwiY2hhckNhdGVnb3JpZXMiLCJjaHVua2VyXzEiLCJiaWJ0ZXgiLCJ1bmljb2RlMmxhdGV4XzEiLCJqYWJyZWZfMSIsIlNldHRpbmciLCJGaWxlU3lzdGVtQWRhcHRlciIsIlBsdWdpblNldHRpbmdUYWIiLCJQcm9taXNlV29ya2VyIiwiTG9hZFdvcmtlciIsIk1hcmtkb3duVmlldyIsImNob2tpZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndhdGNoIiwicGF0aC5yZXNv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O0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN0RyxRQUFRLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUN0SCxRQUFRLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RSxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRDtBQUNPLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDM0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JILElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0osSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0RSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUN0RSxRQUFRLE9BQU8sQ0FBQyxFQUFFLElBQUk7QUFDdEIsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMs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QTtBQUNBLEVBQUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDNUMsRUFBRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RCxFQUFFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0QsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxFQUFFLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLO0FBQzNDLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDNUIsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUN2QixHQUFHLENBQUM7QUFDSixFQUFFLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSTtBQUMxQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3RFLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsTUFBTSxNQUFNLEdBQUcsTUFBTTtBQUN2QixJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNsQjtBQUNBLElBQUksT0FBTyxJQUFJLEVBQUUsS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxD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LEdBQUcsS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3hFLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0IsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdEUsUUFBUSxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDMUIsTUFBTSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtBQUM3QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7QUFDMUIsTUFBTSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdkIsTUFBTSxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO0FBQ3BDLFFBQVEsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLE9BQU87QUFDUCxNQUFNLFNBQVM7QUFDZixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO0FBQ3ZCLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO0FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtBQUM5RCxRQUFRLE1BQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQsTUFBTSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzFELFFBQVEsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdkIsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2pFLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtBQUNyRSxVQUFVLE1BQU0sSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0IsT0FBTyxNQUFNO0FBQ2IsUUFBUSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDdkMsTUFBTSxTQUFTO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdkIsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNuRyxRQUFRLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RCxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksRUFBRTtBQUMxQyxVQUFVLE1BQU0s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SUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtBQUN2RCxRQUFRLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDN0QsUUFBUSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0QsUUFBUSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNDLFFBQVEsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDL0IsUUFBUSxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUMzQixRQUFRLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFO0FBQzlCLFVBQVUsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ25CLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdkIsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbkQsT0FBTztBQUNQLE1BQU0sSUFBSSxD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QUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzFFO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUNyQixJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPO0FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEI7QUFDQSxJQUFJLElBQUk7QUFDUixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDM0MsUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDOUQ7QUFDQSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDOUIsVUFBVSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUYsVUFBVSxLQUFLLE1BQU0sS0FBSyxJQUFJ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QUFDO0FBQ0Y7QUFDQSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLEtBQUs7QUFDdkMsRUFBRSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDN0MsRUFBRSxJQUFJLFFBQVEsRUFBRTtBQUNoQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsR0FBRztBQUNILEVBQUUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN2RCxFQUFFLE9BQU8sUUFBUSxJQUFJLEdBQUcsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQzFDLENBQUMsQ0FBQztBQUNGO0FBQ0EsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLO0FBQ3ZDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RDtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNDLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsSUFB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LGVBQWUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDbmpCLFFBQVEsWUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3Y1QixRQUFRLGFBQWEsRUFBRSxTQUFTLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDekY7QUFDQSxZQUFZLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFlBQVksUUFBUSxPQUFPO0FBQzNCLGdCQUFnQixLQUFLLENBQUM7QUFDdEIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUV0QyxnQkFBZ0IsS0FBSyxDQUFDO0FBQ3RCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRztBQUM3Qix3QkFBd0IsSUFBSSxFQUFFLGtCQUFrQjtBQUNoRCx3QkFBd0IsS0FBSyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELHdCQUF3QixLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELHdCQUF3QixHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hELHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRztBQUM3Qix3QkFBd0IsSUFBSSxFQUFFLGtCQUFrQjtBQUNoRCx3QkFBd0IsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDeEMsd0JBQXdCLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3JDLHdCQUF3QixHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hELHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3hGLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEcsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3SyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzNKLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDM0osb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvRixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3pHLHdCQUF3QixPQUFPLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0Usb0JBQW9CLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzNDO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEY7QUFDQSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVGLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUksb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1SSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHO0FBQzdCLHdCQUF3QixJQUFJLEVBQUUsa0JBQWtCO0FBQ2hELHdCQUF3QixJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixNQUFNLEVBQUUsRUFBRTtBQUNsQyx3QkFBd0IsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEUsd0JBQXdCLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQscUJBQXFCLENBQUM7QUFDdEI7QUFDQSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2xJLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUc7QUFDN0Isd0JBQXdCLElBQUksRUFBRSxlQUFlO0FBQzdDLHdCQUF3QixJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hELHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN2RixvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNuSCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNsSCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbEksb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUN6SSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMzSCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUcsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxSCxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RSxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQkFBb0IsTUFBTTtBQUMxQixnQkFBZ0IsS0FBSyxFQUFFO0FBQ3ZCLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssRUFBRTtBQUN2QixvQkFBb0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsb0JBQW9CLE1BQU07QUFDMUIsZ0JBQWdCLEtBQUssR0FBRztBQUN4QixvQkFBb0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLG9CQUFvQixNQUFNO0FBQzFCLGdCQUFnQixLQUFLLEdBQUc7QUFDeEIsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVDLG9CQUFvQixNQUFNO0FBQzFCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL2pkLFFBQVEsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM5UCxRQUFRLFVBQVUsRUFBRSxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ25ELFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxTQUFTO0FBQ1QsUUFBUSxLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3JDLGdCQUFnQixJQUFJLEdBQUcsSUFBSTtBQUMzQixnQkFBZ0IsS0FBSyxHQUFHLENB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UUFBUSxDQUFDO0FBQzNELDRCQUE0QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdEQsNEJBQTRCLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM3RCx5QkFHeUI7QUFDekIsd0JBQXdCLE1BQU07QUFDOUIsb0JBQW9CLEtBQUssQ0FBQztBQUMxQix3QkFBd0IsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsd0JBQXdCLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDOUQsd0JBQXdCLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcFEsd0JBQXdCLElBQUksTUFBTSxFQUFFO0FBQ3BDLDRCQUE0QixLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMs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LENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRTVFLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRTVFLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO0FBRTlCLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBRW5GLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sU0FBUyxDQUFDO0FBRXJDLGdCQUFnQixLQUFLLEVBQUU7QUFDdkIsb0JBQW9CLE9BQU8sQ0FBQyxD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O0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUU7QUFDcEMsSUFBSSxPQUFPLENBQUMsSUFBSSxZQUFZLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBQ0QsYUFBYSxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUM7QUFDcEMsSUFBSSxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7QUFDeEMsSUFBSSxLQUFLLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7QUFDeEMsSUFBSSxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7QUFDNUMsSUFBSSxXQUFXLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRixDQUFDLENBQUM7QUFDRixNQUFNLFlBQVksR0FBRztBQUNyQixJQUFJLFVBQVUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hGLElBQUksT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFLElBQUksUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pFLElBQUksTUFBTSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FB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Q2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxZQUFZLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFlBQVksR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxZQUFZLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNqRCxZQUFZLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUMxRCxZQUFZLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztBQUMxRSxZQUFZLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJ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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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 diff --git a/.obsidian/plugins/obsidian-citation-plugin/manifest.json b/.obsidian/plugins/obsidian-citation-plugin/manifest.json new file mode 100644 index 00000000..1d655834 --- /dev/null +++ b/.obsidian/plugins/obsidian-citation-plugin/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-citation-plugin", + "name": "Citations", + "version": "0.4.4", + "minAppVersion": "0.9.20", + "description": "Automatically search and insert citations from a Zotero library", + "author": "Jon Gauthier", + "authorUrl": "http://foldl.me", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-citation-plugin/styles.css b/.obsidian/plugins/obsidian-citation-plugin/styles.css new file mode 100644 index 00000000..729a0d16 --- /dev/null +++ b/.obsidian/plugins/obsidian-citation-plugin/styles.css @@ -0,0 +1,114 @@ +/** Citations modal **/ + +/* + * Loading animation from + * https://loading.io/css/ + */ + .zoteroModalLoading { + color: var(--text-muted); + text-align: center; + } +.zoteroModalLoadingAnimation { + display: inline-block; + width: 80px; + height: 80px; +} +.zoteroModalLoadingAnimation { + content: " "; + display: block; + width: 32px; + height: 32px; + margin: 10px auto; + border-radius: 50%; + border: 3px solid #eee; + border-color: #eee transparent #eee transparent; + animation: lds-dual-ring 1.2s linear infinite; +} +@keyframes lds-dual-ring { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +#zoteroSettingTab .text-monospace { + font-family: monospace; +} + +.zoteroModalResults .suggestion-item { + height: fit-content; + line-height: 1.5rem; +} + +.zoteroTitle { + font-size: 14px; + display: block; +} +.zoteroAuthors { + color: #555; + font-size: 13px; +} +.zoteroAuthorsEmpty::after { + font-style: italic; + content: 'Unknown authors'; +} +.zoteroCitekey { + color: #555; + font-size: 13px; + font-family: monospace; + display: inline-block; + margin-right: 5px; + padding-right: 5px; + border-right: 1px solid #ccc; +} + +.theme-dark .zoteroTitle { + font-size: 14px; + display: block; +} +.theme-dark .zoteroAuthors { + color: #aaa; + font-size: 13px; +} +.theme-dark .zoteroCitekey { + color: #aaa; + font-size: 13px; + font-family: monospace; + display: inline-block; + margin-right: 5px; + padding-right: 5px; + border-right: 1px solid #aaa; +} + +/** Settings dialog **/ +.d-none { + display: none; +} +.zoteroSettingCitationPathLoading, +.zoteroSettingCitationPathError, +.zoteroSettingCitationPathSuccess { + font-size: 14px; +} +.zoteroSettingCitationPathLoading { + color: var(--text-muted); +} +.zoteroSettingCitationPathError { + color: var(--text-error); +} +.zoteroSettingCitationPathError:hover { + color: var(--text-error-hover); +} +.zoteroSettingCitationPathSuccess { + color: var(--text-accent); +} +.zoteroSettingCitationPathSuccess:hover { + color: var(--text-accent-hover); +} + +#zoteroSettingTab textarea { + resize: vertical; + width: 100%; + min-height: 10em; +} diff --git a/.obsidian/plugins/obsidian-dice-roller/main.js b/.obsidian/plugins/obsidian-dice-roller/main.js new file mode 100644 index 00000000..86b969b8 --- /dev/null +++ b/.obsidian/plugins/obsidian-dice-roller/main.js @@ -0,0 +1,3254 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; +} + +function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); +} + +var lexer = createCommonjsModule(function (module) { +module.exports = Lexer; + +Lexer.defunct = function (chr) { + throw new Error("Unexpected character at index " + (this.index - 1) + ": " + chr); +}; + +function Lexer(defunct) { + if (typeof defunct !== "function") defunct = Lexer.defunct; + + var tokens = []; + var rules = []; + var remove = 0; + this.state = 0; + this.index = 0; + this.input = ""; + + this.addRule = function (pattern, action, start) { + var global = pattern.global; + + if (!global) { + var flags = "g"; + if (pattern.multiline) flags += "m"; + if (pattern.ignoreCase) flags += "i"; + pattern = new RegExp(pattern.source, flags); + } + + if (Object.prototype.toString.call(start) !== "[object Array]") start = [0]; + + rules.push({ + pattern: pattern, + global: global, + action: action, + start: start + }); + + return this; + }; + + this.setInput = function (input) { + remove = 0; + this.state = 0; + this.index = 0; + tokens.length = 0; + this.input = input; + return this; + }; + + this.lex = function () { + if (tokens.length) return tokens.shift(); + + this.reject = true; + + while (this.index <= this.input.length) { + var matches = scan.call(this).splice(remove); + var index = this.index; + + while (matches.length) { + if (this.reject) { + var match = matches.shift(); + var result = match.result; + var length = match.length; + this.index += length; + this.reject = false; + remove++; + + var token = match.action.apply(this, result); + if (this.reject) this.index = result.index; + else if (typeof token !== "undefined") { + switch (Object.prototype.toString.call(token)) { + case "[object Array]": + tokens = token.slice(1); + token = token[0]; + default: + if (length) remove = 0; + return token; + } + } + } else break; + } + + var input = this.input; + + if (index < input.length) { + if (this.reject) { + remove = 0; + var token = defunct.call(this, input.charAt(this.index++)); + if (typeof token !== "undefined") { + if (Object.prototype.toString.call(token) === "[object Array]") { + tokens = token.slice(1); + return token[0]; + } else return token; + } + } else { + if (this.index !== index) remove = 0; + this.reject = true; + } + } else if (matches.length) + this.reject = true; + else break; + } + }; + + function scan() { + var matches = []; + var index = 0; + + var state = this.state; + var lastIndex = this.index; + var input = this.input; + + for (var i = 0, length = rules.length; i < length; i++) { + var rule = rules[i]; + var start = rule.start; + var states = start.length; + + if ((!states || start.indexOf(state) >= 0) || + (state % 2 && states === 1 && !start[0])) { + var pattern = rule.pattern; + pattern.lastIndex = lastIndex; + var result = pattern.exec(input); + + if (result && result.index === lastIndex) { + var j = matches.push({ + result: result, + action: rule.action, + length: result[0].length + }); + + if (rule.global) index = j; + + while (--j > index) { + var k = j - 1; + + if (matches[j].length > matches[k].length) { + var temple = matches[j]; + matches[j] = matches[k]; + matches[k] = temple; + } + } + } + } + } + + return matches; + } +} +}); + +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +var faDice = { + prefix: 'fas', + iconName: 'dice', + icon: [640, 512, [], "f522", "M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z"] +}; + +/*! + * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +var faCopy = { + prefix: 'far', + iconName: 'copy', + icon: [448, 512, [], "f0c5", "M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"] +}; + +/*! + * Font Awesome Free 5.15.3 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; +} + +function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); + + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); + } + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; +} + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} + +function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); +} + +var noop = function noop() {}; + +var _WINDOW = {}; +var _DOCUMENT = {}; +var _MUTATION_OBSERVER = null; +var _PERFORMANCE = { + mark: noop, + measure: noop +}; + +try { + if (typeof window !== 'undefined') _WINDOW = window; + if (typeof document !== 'undefined') _DOCUMENT = document; + if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver; + if (typeof performance !== 'undefined') _PERFORMANCE = performance; +} catch (e) {} + +var _ref = _WINDOW.navigator || {}, + _ref$userAgent = _ref.userAgent, + userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent; + +var WINDOW = _WINDOW; +var DOCUMENT = _DOCUMENT; +var PERFORMANCE = _PERFORMANCE; +!!WINDOW.document; +var IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function'; +~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/'); + +var NAMESPACE_IDENTIFIER = '___FONT_AWESOME___'; +var DEFAULT_FAMILY_PREFIX = 'fa'; +var DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa'; +var DATA_FA_I2SVG = 'data-fa-i2svg'; +(function () { + try { + return process.env.NODE_ENV === 'production'; + } catch (e) { + return false; + } +})(); +var DUOTONE_CLASSES = { + GROUP: 'group', + SWAP_OPACITY: 'swap-opacity', + PRIMARY: 'primary', + SECONDARY: 'secondary' +}; + +var initial = WINDOW.FontAwesomeConfig || {}; + +function getAttrConfig(attr) { + var element = DOCUMENT.querySelector('script[' + attr + ']'); + + if (element) { + return element.getAttribute(attr); + } +} + +function coerce(val) { + // Getting an empty string will occur if the attribute is set on the HTML tag but without a value + // We'll assume that this is an indication that it should be toggled to true + // For example + if (val === '') return true; + if (val === 'false') return false; + if (val === 'true') return true; + return val; +} + +if (DOCUMENT && typeof DOCUMENT.querySelector === 'function') { + var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']]; + attrs.forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + attr = _ref2[0], + key = _ref2[1]; + + var val = coerce(getAttrConfig(attr)); + + if (val !== undefined && val !== null) { + initial[key] = val; + } + }); +} + +var _default = { + familyPrefix: DEFAULT_FAMILY_PREFIX, + replacementClass: DEFAULT_REPLACEMENT_CLASS, + autoReplaceSvg: true, + autoAddCss: true, + autoA11y: true, + searchPseudoElements: false, + observeMutations: true, + mutateApproach: 'async', + keepOriginalSource: true, + measurePerformance: false, + showMissingIcons: true +}; + +var _config = _objectSpread({}, _default, initial); + +if (!_config.autoReplaceSvg) _config.observeMutations = false; + +var config = _objectSpread({}, _config); + +WINDOW.FontAwesomeConfig = config; + +var w = WINDOW || {}; +if (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {}; +if (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {}; +if (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {}; +if (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = []; +var namespace = w[NAMESPACE_IDENTIFIER]; + +var functions = []; + +var listener = function listener() { + DOCUMENT.removeEventListener('DOMContentLoaded', listener); + loaded = 1; + functions.map(function (fn) { + return fn(); + }); +}; + +var loaded = false; + +if (IS_DOM) { + loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState); + if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener); +} + +typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function'; +typeof setImmediate === 'undefined' ? setTimeout : setImmediate; +var meaninglessTransform = { + size: 16, + x: 0, + y: 0, + rotate: 0, + flipX: false, + flipY: false +}; +function insertCss(css) { + if (!css || !IS_DOM) { + return; + } + + var style = DOCUMENT.createElement('style'); + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + var headChildren = DOCUMENT.head.childNodes; + var beforeChild = null; + + for (var i = headChildren.length - 1; i > -1; i--) { + var child = headChildren[i]; + var tagName = (child.tagName || '').toUpperCase(); + + if (['STYLE', 'LINK'].indexOf(tagName) > -1) { + beforeChild = child; + } + } + + DOCUMENT.head.insertBefore(style, beforeChild); + return css; +} +var idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; +function nextUniqueId() { + var size = 12; + var id = ''; + + while (size-- > 0) { + id += idPool[Math.random() * 62 | 0]; + } + + return id; +} +function htmlEscape(str) { + return "".concat(str).replace(/&/g, '&').replace(/"/g, '"').replace(/'/g, ''').replace(//g, '>'); +} +function joinAttributes(attributes) { + return Object.keys(attributes || {}).reduce(function (acc, attributeName) { + return acc + "".concat(attributeName, "=\"").concat(htmlEscape(attributes[attributeName]), "\" "); + }, '').trim(); +} +function joinStyles(styles) { + return Object.keys(styles || {}).reduce(function (acc, styleName) { + return acc + "".concat(styleName, ": ").concat(styles[styleName], ";"); + }, ''); +} +function transformIsMeaningful(transform) { + return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY; +} +function transformForSvg(_ref) { + var transform = _ref.transform, + containerWidth = _ref.containerWidth, + iconWidth = _ref.iconWidth; + var outer = { + transform: "translate(".concat(containerWidth / 2, " 256)") + }; + var innerTranslate = "translate(".concat(transform.x * 32, ", ").concat(transform.y * 32, ") "); + var innerScale = "scale(".concat(transform.size / 16 * (transform.flipX ? -1 : 1), ", ").concat(transform.size / 16 * (transform.flipY ? -1 : 1), ") "); + var innerRotate = "rotate(".concat(transform.rotate, " 0 0)"); + var inner = { + transform: "".concat(innerTranslate, " ").concat(innerScale, " ").concat(innerRotate) + }; + var path = { + transform: "translate(".concat(iconWidth / 2 * -1, " -256)") + }; + return { + outer: outer, + inner: inner, + path: path + }; +} + +var ALL_SPACE = { + x: 0, + y: 0, + width: '100%', + height: '100%' +}; + +function fillBlack(abstract) { + var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + if (abstract.attributes && (abstract.attributes.fill || force)) { + abstract.attributes.fill = 'black'; + } + + return abstract; +} + +function deGroup(abstract) { + if (abstract.tag === 'g') { + return abstract.children; + } else { + return [abstract]; + } +} + +function makeIconMasking (_ref) { + var children = _ref.children, + attributes = _ref.attributes, + main = _ref.main, + mask = _ref.mask, + explicitMaskId = _ref.maskId, + transform = _ref.transform; + var mainWidth = main.width, + mainPath = main.icon; + var maskWidth = mask.width, + maskPath = mask.icon; + var trans = transformForSvg({ + transform: transform, + containerWidth: maskWidth, + iconWidth: mainWidth + }); + var maskRect = { + tag: 'rect', + attributes: _objectSpread({}, ALL_SPACE, { + fill: 'white' + }) + }; + var maskInnerGroupChildrenMixin = mainPath.children ? { + children: mainPath.children.map(fillBlack) + } : {}; + var maskInnerGroup = { + tag: 'g', + attributes: _objectSpread({}, trans.inner), + children: [fillBlack(_objectSpread({ + tag: mainPath.tag, + attributes: _objectSpread({}, mainPath.attributes, trans.path) + }, maskInnerGroupChildrenMixin))] + }; + var maskOuterGroup = { + tag: 'g', + attributes: _objectSpread({}, trans.outer), + children: [maskInnerGroup] + }; + var maskId = "mask-".concat(explicitMaskId || nextUniqueId()); + var clipId = "clip-".concat(explicitMaskId || nextUniqueId()); + var maskTag = { + tag: 'mask', + attributes: _objectSpread({}, ALL_SPACE, { + id: maskId, + maskUnits: 'userSpaceOnUse', + maskContentUnits: 'userSpaceOnUse' + }), + children: [maskRect, maskOuterGroup] + }; + var defs = { + tag: 'defs', + children: [{ + tag: 'clipPath', + attributes: { + id: clipId + }, + children: deGroup(maskPath) + }, maskTag] + }; + children.push(defs, { + tag: 'rect', + attributes: _objectSpread({ + fill: 'currentColor', + 'clip-path': "url(#".concat(clipId, ")"), + mask: "url(#".concat(maskId, ")") + }, ALL_SPACE) + }); + return { + children: children, + attributes: attributes + }; +} + +function makeIconStandard (_ref) { + var children = _ref.children, + attributes = _ref.attributes, + main = _ref.main, + transform = _ref.transform, + styles = _ref.styles; + var styleString = joinStyles(styles); + + if (styleString.length > 0) { + attributes['style'] = styleString; + } + + if (transformIsMeaningful(transform)) { + var trans = transformForSvg({ + transform: transform, + containerWidth: main.width, + iconWidth: main.width + }); + children.push({ + tag: 'g', + attributes: _objectSpread({}, trans.outer), + children: [{ + tag: 'g', + attributes: _objectSpread({}, trans.inner), + children: [{ + tag: main.icon.tag, + children: main.icon.children, + attributes: _objectSpread({}, main.icon.attributes, trans.path) + }] + }] + }); + } else { + children.push(main.icon); + } + + return { + children: children, + attributes: attributes + }; +} + +function asIcon (_ref) { + var children = _ref.children, + main = _ref.main, + mask = _ref.mask, + attributes = _ref.attributes, + styles = _ref.styles, + transform = _ref.transform; + + if (transformIsMeaningful(transform) && main.found && !mask.found) { + var width = main.width, + height = main.height; + var offset = { + x: width / height / 2, + y: 0.5 + }; + attributes['style'] = joinStyles(_objectSpread({}, styles, { + 'transform-origin': "".concat(offset.x + transform.x / 16, "em ").concat(offset.y + transform.y / 16, "em") + })); + } + + return [{ + tag: 'svg', + attributes: attributes, + children: children + }]; +} + +function asSymbol (_ref) { + var prefix = _ref.prefix, + iconName = _ref.iconName, + children = _ref.children, + attributes = _ref.attributes, + symbol = _ref.symbol; + var id = symbol === true ? "".concat(prefix, "-").concat(config.familyPrefix, "-").concat(iconName) : symbol; + return [{ + tag: 'svg', + attributes: { + style: 'display: none;' + }, + children: [{ + tag: 'symbol', + attributes: _objectSpread({}, attributes, { + id: id + }), + children: children + }] + }]; +} + +function makeInlineSvgAbstract(params) { + var _params$icons = params.icons, + main = _params$icons.main, + mask = _params$icons.mask, + prefix = params.prefix, + iconName = params.iconName, + transform = params.transform, + symbol = params.symbol, + title = params.title, + maskId = params.maskId, + titleId = params.titleId, + extra = params.extra, + _params$watchable = params.watchable, + watchable = _params$watchable === void 0 ? false : _params$watchable; + + var _ref = mask.found ? mask : main, + width = _ref.width, + height = _ref.height; + + var isUploadedIcon = prefix === 'fak'; + var widthClass = isUploadedIcon ? '' : "fa-w-".concat(Math.ceil(width / height * 16)); + var attrClass = [config.replacementClass, iconName ? "".concat(config.familyPrefix, "-").concat(iconName) : '', widthClass].filter(function (c) { + return extra.classes.indexOf(c) === -1; + }).filter(function (c) { + return c !== '' || !!c; + }).concat(extra.classes).join(' '); + var content = { + children: [], + attributes: _objectSpread({}, extra.attributes, { + 'data-prefix': prefix, + 'data-icon': iconName, + 'class': attrClass, + 'role': extra.attributes.role || 'img', + 'xmlns': 'http://www.w3.org/2000/svg', + 'viewBox': "0 0 ".concat(width, " ").concat(height) + }) + }; + var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? { + width: "".concat(width / height * 16 * 0.0625, "em") + } : {}; + + if (watchable) { + content.attributes[DATA_FA_I2SVG] = ''; + } + + if (title) content.children.push({ + tag: 'title', + attributes: { + id: content.attributes['aria-labelledby'] || "title-".concat(titleId || nextUniqueId()) + }, + children: [title] + }); + + var args = _objectSpread({}, content, { + prefix: prefix, + iconName: iconName, + main: main, + mask: mask, + maskId: maskId, + transform: transform, + symbol: symbol, + styles: _objectSpread({}, uploadedIconWidthStyle, extra.styles) + }); + + var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args), + children = _ref2.children, + attributes = _ref2.attributes; + + args.children = children; + args.attributes = attributes; + + if (symbol) { + return asSymbol(args); + } else { + return asIcon(args); + } +} + +var noop$1 = function noop() {}; + +config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : { + mark: noop$1, + measure: noop$1 +}; + +/** + * Internal helper to bind a function known to have 4 arguments + * to a given context. + */ + +var bindInternal4 = function bindInternal4(func, thisContext) { + return function (a, b, c, d) { + return func.call(thisContext, a, b, c, d); + }; +}; + +/** + * # Reduce + * + * A fast object `.reduce()` implementation. + * + * @param {Object} subject The object to reduce over. + * @param {Function} fn The reducer function. + * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0]. + * @param {Object} thisContext The context for the reducer. + * @return {mixed} The final result. + */ + + +var reduce = function fastReduceObject(subject, fn, initialValue, thisContext) { + var keys = Object.keys(subject), + length = keys.length, + iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn, + i, + key, + result; + + if (initialValue === undefined) { + i = 1; + result = subject[keys[0]]; + } else { + i = 0; + result = initialValue; + } + + for (; i < length; i++) { + key = keys[i]; + result = iterator(result, subject[key], key, subject); + } + + return result; +}; + +function defineIcons(prefix, icons) { + var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var _params$skipHooks = params.skipHooks, + skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks; + var normalized = Object.keys(icons).reduce(function (acc, iconName) { + var icon = icons[iconName]; + var expanded = !!icon.icon; + + if (expanded) { + acc[icon.iconName] = icon.icon; + } else { + acc[iconName] = icon; + } + + return acc; + }, {}); + + if (typeof namespace.hooks.addPack === 'function' && !skipHooks) { + namespace.hooks.addPack(prefix, normalized); + } else { + namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized); + } + /** + * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction + * of new styles we needed to differentiate between them. Prefix `fa` is now an alias + * for `fas` so we'll easy the upgrade process for our users by automatically defining + * this as well. + */ + + + if (prefix === 'fas') { + defineIcons('fa', icons); + } +} + +var styles = namespace.styles, + shims = namespace.shims; +var build = function build() { + var lookup = function lookup(reducer) { + return reduce(styles, function (o, style, prefix) { + o[prefix] = reduce(style, reducer, {}); + return o; + }, {}); + }; + + lookup(function (acc, icon, iconName) { + if (icon[3]) { + acc[icon[3]] = iconName; + } + + return acc; + }); + lookup(function (acc, icon, iconName) { + var ligatures = icon[2]; + acc[iconName] = iconName; + ligatures.forEach(function (ligature) { + acc[ligature] = iconName; + }); + return acc; + }); + var hasRegular = 'far' in styles; + reduce(shims, function (acc, shim) { + var oldName = shim[0]; + var prefix = shim[1]; + var iconName = shim[2]; + + if (prefix === 'far' && !hasRegular) { + prefix = 'fas'; + } + + acc[oldName] = { + prefix: prefix, + iconName: iconName + }; + return acc; + }, {}); +}; +build(); + +namespace.styles; +function iconFromMapping(mapping, prefix, iconName) { + if (mapping && mapping[prefix] && mapping[prefix][iconName]) { + return { + prefix: prefix, + iconName: iconName, + icon: mapping[prefix][iconName] + }; + } +} + +function toHtml(abstractNodes) { + var tag = abstractNodes.tag, + _abstractNodes$attrib = abstractNodes.attributes, + attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib, + _abstractNodes$childr = abstractNodes.children, + children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr; + + if (typeof abstractNodes === 'string') { + return htmlEscape(abstractNodes); + } else { + return "<".concat(tag, " ").concat(joinAttributes(attributes), ">").concat(children.map(toHtml).join(''), ""); + } +} + +function MissingIcon(error) { + this.name = 'MissingIcon'; + this.message = error || 'Icon unavailable'; + this.stack = new Error().stack; +} +MissingIcon.prototype = Object.create(Error.prototype); +MissingIcon.prototype.constructor = MissingIcon; + +var FILL = { + fill: 'currentColor' +}; +var ANIMATION_BASE = { + attributeType: 'XML', + repeatCount: 'indefinite', + dur: '2s' +}; +({ + tag: 'path', + attributes: _objectSpread({}, FILL, { + d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z' + }) +}); + +var OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, { + attributeName: 'opacity' +}); + +({ + tag: 'circle', + attributes: _objectSpread({}, FILL, { + cx: '256', + cy: '364', + r: '28' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, ANIMATION_BASE, { + attributeName: 'r', + values: '28;14;28;28;14;28;' + }) + }, { + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '1;0;1;1;0;1;' + }) + }] +}); +({ + tag: 'path', + attributes: _objectSpread({}, FILL, { + opacity: '1', + d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '1;0;0;0;0;1;' + }) + }] +}); +({ + tag: 'path', + attributes: _objectSpread({}, FILL, { + opacity: '0', + d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z' + }), + children: [{ + tag: 'animate', + attributes: _objectSpread({}, OPACITY_ANIMATE, { + values: '0;0;1;1;0;0;' + }) + }] +}); + +namespace.styles; +function asFoundIcon(icon) { + var width = icon[0]; + var height = icon[1]; + + var _icon$slice = icon.slice(4), + _icon$slice2 = _slicedToArray(_icon$slice, 1), + vectorData = _icon$slice2[0]; + + var element = null; + + if (Array.isArray(vectorData)) { + element = { + tag: 'g', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.GROUP) + }, + children: [{ + tag: 'path', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.SECONDARY), + fill: 'currentColor', + d: vectorData[0] + } + }, { + tag: 'path', + attributes: { + class: "".concat(config.familyPrefix, "-").concat(DUOTONE_CLASSES.PRIMARY), + fill: 'currentColor', + d: vectorData[1] + } + }] + }; + } else { + element = { + tag: 'path', + attributes: { + fill: 'currentColor', + d: vectorData + } + }; + } + + return { + found: true, + width: width, + height: height, + icon: element + }; +} + +namespace.styles; + +var baseStyles = "svg:not(:root).svg-inline--fa {\n overflow: visible;\n}\n\n.svg-inline--fa {\n display: inline-block;\n font-size: inherit;\n height: 1em;\n overflow: visible;\n vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-lg {\n vertical-align: -0.225em;\n}\n.svg-inline--fa.fa-w-1 {\n width: 0.0625em;\n}\n.svg-inline--fa.fa-w-2 {\n width: 0.125em;\n}\n.svg-inline--fa.fa-w-3 {\n width: 0.1875em;\n}\n.svg-inline--fa.fa-w-4 {\n width: 0.25em;\n}\n.svg-inline--fa.fa-w-5 {\n width: 0.3125em;\n}\n.svg-inline--fa.fa-w-6 {\n width: 0.375em;\n}\n.svg-inline--fa.fa-w-7 {\n width: 0.4375em;\n}\n.svg-inline--fa.fa-w-8 {\n width: 0.5em;\n}\n.svg-inline--fa.fa-w-9 {\n width: 0.5625em;\n}\n.svg-inline--fa.fa-w-10 {\n width: 0.625em;\n}\n.svg-inline--fa.fa-w-11 {\n width: 0.6875em;\n}\n.svg-inline--fa.fa-w-12 {\n width: 0.75em;\n}\n.svg-inline--fa.fa-w-13 {\n width: 0.8125em;\n}\n.svg-inline--fa.fa-w-14 {\n width: 0.875em;\n}\n.svg-inline--fa.fa-w-15 {\n width: 0.9375em;\n}\n.svg-inline--fa.fa-w-16 {\n width: 1em;\n}\n.svg-inline--fa.fa-w-17 {\n width: 1.0625em;\n}\n.svg-inline--fa.fa-w-18 {\n width: 1.125em;\n}\n.svg-inline--fa.fa-w-19 {\n width: 1.1875em;\n}\n.svg-inline--fa.fa-w-20 {\n width: 1.25em;\n}\n.svg-inline--fa.fa-pull-left {\n margin-right: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n margin-left: 0.3em;\n width: auto;\n}\n.svg-inline--fa.fa-border {\n height: 1.5em;\n}\n.svg-inline--fa.fa-li {\n width: 2em;\n}\n.svg-inline--fa.fa-fw {\n width: 1.25em;\n}\n\n.fa-layers svg.svg-inline--fa {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.fa-layers {\n display: inline-block;\n height: 1em;\n position: relative;\n text-align: center;\n vertical-align: -0.125em;\n width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter, .fa-layers-text {\n display: inline-block;\n position: absolute;\n text-align: center;\n}\n\n.fa-layers-text {\n left: 50%;\n top: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n -webkit-transform-origin: center center;\n transform-origin: center center;\n}\n\n.fa-layers-counter {\n background-color: #ff253a;\n border-radius: 1em;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #fff;\n height: 1.5em;\n line-height: 1;\n max-width: 5em;\n min-width: 1.5em;\n overflow: hidden;\n padding: 0.25em;\n right: 0;\n text-overflow: ellipsis;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n bottom: 0;\n right: 0;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom right;\n transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n bottom: 0;\n left: 0;\n right: auto;\n top: auto;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: bottom left;\n transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n right: 0;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top right;\n transform-origin: top right;\n}\n\n.fa-layers-top-left {\n left: 0;\n right: auto;\n top: 0;\n -webkit-transform: scale(0.25);\n transform: scale(0.25);\n -webkit-transform-origin: top left;\n transform-origin: top left;\n}\n\n.fa-lg {\n font-size: 1.3333333333em;\n line-height: 0.75em;\n vertical-align: -0.0667em;\n}\n\n.fa-xs {\n font-size: 0.75em;\n}\n\n.fa-sm {\n font-size: 0.875em;\n}\n\n.fa-1x {\n font-size: 1em;\n}\n\n.fa-2x {\n font-size: 2em;\n}\n\n.fa-3x {\n font-size: 3em;\n}\n\n.fa-4x {\n font-size: 4em;\n}\n\n.fa-5x {\n font-size: 5em;\n}\n\n.fa-6x {\n font-size: 6em;\n}\n\n.fa-7x {\n font-size: 7em;\n}\n\n.fa-8x {\n font-size: 8em;\n}\n\n.fa-9x {\n font-size: 9em;\n}\n\n.fa-10x {\n font-size: 10em;\n}\n\n.fa-fw {\n text-align: center;\n width: 1.25em;\n}\n\n.fa-ul {\n list-style-type: none;\n margin-left: 2.5em;\n padding-left: 0;\n}\n.fa-ul > li {\n position: relative;\n}\n\n.fa-li {\n left: -2em;\n position: absolute;\n text-align: center;\n width: 2em;\n line-height: inherit;\n}\n\n.fa-border {\n border: solid 0.08em #eee;\n border-radius: 0.1em;\n padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n float: left;\n}\n\n.fa-pull-right {\n float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n margin-left: 0.3em;\n}\n\n.fa-spin {\n -webkit-animation: fa-spin 2s infinite linear;\n animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n -webkit-animation: fa-spin 1s infinite steps(8);\n animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes fa-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.fa-rotate-90 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n -webkit-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n -webkit-transform: rotate(270deg);\n transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n -webkit-transform: scale(-1, 1);\n transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(1, -1);\n transform: scale(1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n -webkit-transform: scale(-1, -1);\n transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n -webkit-filter: none;\n filter: none;\n}\n\n.fa-stack {\n display: inline-block;\n height: 2em;\n position: relative;\n width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n bottom: 0;\n left: 0;\n margin: auto;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.svg-inline--fa.fa-stack-1x {\n height: 1em;\n width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n height: 2em;\n width: 2.5em;\n}\n\n.fa-inverse {\n color: #fff;\n}\n\n.sr-only {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.svg-inline--fa .fa-primary {\n fill: var(--fa-primary-color, currentColor);\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n fill: var(--fa-secondary-color, currentColor);\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n opacity: 0.4;\n opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n opacity: 1;\n opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n fill: black;\n}\n\n.fad.fa-inverse {\n color: #fff;\n}"; + +function css () { + var dfp = DEFAULT_FAMILY_PREFIX; + var drc = DEFAULT_REPLACEMENT_CLASS; + var fp = config.familyPrefix; + var rc = config.replacementClass; + var s = baseStyles; + + if (fp !== dfp || rc !== drc) { + var dPatt = new RegExp("\\.".concat(dfp, "\\-"), 'g'); + var customPropPatt = new RegExp("\\--".concat(dfp, "\\-"), 'g'); + var rPatt = new RegExp("\\.".concat(drc), 'g'); + s = s.replace(dPatt, ".".concat(fp, "-")).replace(customPropPatt, "--".concat(fp, "-")).replace(rPatt, ".".concat(rc)); + } + + return s; +} + +var Library = +/*#__PURE__*/ +function () { + function Library() { + _classCallCheck(this, Library); + + this.definitions = {}; + } + + _createClass(Library, [{ + key: "add", + value: function add() { + var _this = this; + + for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) { + definitions[_key] = arguments[_key]; + } + + var additions = definitions.reduce(this._pullDefinitions, {}); + Object.keys(additions).forEach(function (key) { + _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]); + defineIcons(key, additions[key]); + build(); + }); + } + }, { + key: "reset", + value: function reset() { + this.definitions = {}; + } + }, { + key: "_pullDefinitions", + value: function _pullDefinitions(additions, definition) { + var normalized = definition.prefix && definition.iconName && definition.icon ? { + 0: definition + } : definition; + Object.keys(normalized).map(function (key) { + var _normalized$key = normalized[key], + prefix = _normalized$key.prefix, + iconName = _normalized$key.iconName, + icon = _normalized$key.icon; + if (!additions[prefix]) additions[prefix] = {}; + additions[prefix][iconName] = icon; + }); + return additions; + } + }]); + + return Library; +}(); + +function ensureCss() { + if (config.autoAddCss && !_cssInserted) { + insertCss(css()); + + _cssInserted = true; + } +} + +function apiObject(val, abstractCreator) { + Object.defineProperty(val, 'abstract', { + get: abstractCreator + }); + Object.defineProperty(val, 'html', { + get: function get() { + return val.abstract.map(function (a) { + return toHtml(a); + }); + } + }); + Object.defineProperty(val, 'node', { + get: function get() { + if (!IS_DOM) return; + var container = DOCUMENT.createElement('div'); + container.innerHTML = val.html; + return container.children; + } + }); + return val; +} + +function findIconDefinition(iconLookup) { + var _iconLookup$prefix = iconLookup.prefix, + prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix, + iconName = iconLookup.iconName; + if (!iconName) return; + return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName); +} + +function resolveIcons(next) { + return function (maybeIconDefinition) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {}); + var mask = params.mask; + + if (mask) { + mask = (mask || {}).icon ? mask : findIconDefinition(mask || {}); + } + + return next(iconDefinition, _objectSpread({}, params, { + mask: mask + })); + }; +} + +var library = new Library(); +var _cssInserted = false; +var icon = resolveIcons(function (iconDefinition) { + var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var _params$transform = params.transform, + transform = _params$transform === void 0 ? meaninglessTransform : _params$transform, + _params$symbol = params.symbol, + symbol = _params$symbol === void 0 ? false : _params$symbol, + _params$mask = params.mask, + mask = _params$mask === void 0 ? null : _params$mask, + _params$maskId = params.maskId, + maskId = _params$maskId === void 0 ? null : _params$maskId, + _params$title = params.title, + title = _params$title === void 0 ? null : _params$title, + _params$titleId = params.titleId, + titleId = _params$titleId === void 0 ? null : _params$titleId, + _params$classes = params.classes, + classes = _params$classes === void 0 ? [] : _params$classes, + _params$attributes = params.attributes, + attributes = _params$attributes === void 0 ? {} : _params$attributes, + _params$styles = params.styles, + styles = _params$styles === void 0 ? {} : _params$styles; + if (!iconDefinition) return; + var prefix = iconDefinition.prefix, + iconName = iconDefinition.iconName, + icon = iconDefinition.icon; + return apiObject(_objectSpread({ + type: 'icon' + }, iconDefinition), function () { + ensureCss(); + + if (config.autoA11y) { + if (title) { + attributes['aria-labelledby'] = "".concat(config.replacementClass, "-title-").concat(titleId || nextUniqueId()); + } else { + attributes['aria-hidden'] = 'true'; + attributes['focusable'] = 'false'; + } + } + + return makeInlineSvgAbstract({ + icons: { + main: asFoundIcon(icon), + mask: mask ? asFoundIcon(mask.icon) : { + found: false, + width: null, + height: null, + icon: {} + } + }, + prefix: prefix, + iconName: iconName, + transform: _objectSpread({}, meaninglessTransform, transform), + symbol: symbol, + title: title, + maskId: maskId, + titleId: titleId, + extra: { + attributes: attributes, + styles: styles, + classes: classes + } + }); + }); +}); + +class Parser { + constructor(table) { + this.table = table; + } + parse(input) { + var length = input.length, table = this.table, output = [], stack = [], index = 0; + while (index < length) { + var token = input[index++]; + switch (token.data) { + case "(": + stack.unshift(token); + break; + case ")": + while (stack.length) { + var token = stack.shift(); + if (token.data === "(") + break; + else + output.push(token); + } + if (token.data !== "(") + throw new Error("Mismatched parentheses."); + break; + default: + if (table.hasOwnProperty(token.data)) { + while (stack.length) { + var punctuator = stack[0]; + if (punctuator.data === "(") + break; + var operator = table[token.data], precedence = operator.precedence, antecedence = table[punctuator.data].precedence; + if (precedence > antecedence || + (precedence === antecedence && + operator.associativity === "right")) + break; + else + output.push(stack.shift()); + } + stack.unshift(token); + } + else + output.push(token); + } + } + while (stack.length) { + var token = stack.shift(); + if (token.data !== "(") + output.push(token); + else + throw new Error("Mismatched parentheses."); + } + return output; + } +} + +function around(obj, factories) { + const removers = Object.keys(factories).map(key => around1(obj, key, factories[key])); + return removers.length === 1 ? removers[0] : function () { removers.forEach(r => r()); }; +} +function around1(obj, method, createWrapper) { + const original = obj[method], hadOwn = obj.hasOwnProperty(method); + let current = createWrapper(original); + // Let our wrapper inherit static props from the wrapping method, + // and the wrapping method, props from the original method + if (original) + Object.setPrototypeOf(current, original); + Object.setPrototypeOf(wrapper, current); + obj[method] = wrapper; + // Return a callback to allow safe removal + return remove; + function wrapper(...args) { + // If we have been deactivated and are no longer wrapped, remove ourselves + if (current === original && obj[method] === wrapper) + remove(); + return current.apply(this, args); + } + function remove() { + // If no other patches, just do a direct removal + if (obj[method] === wrapper) { + if (hadOwn) + obj[method] = original; + else + delete obj[method]; + } + if (current === original) + return; + // Else pass future calls through, and remove wrapper from the prototype chain + current = original; + Object.setPrototypeOf(wrapper, original || Function); + } +} + +const TAG_REGEX = /(?:(?\d+)[Dd])?#(?[\p{Letter}\p{Emoji_Presentation}\w/-]+)(?:\|(?[\+-]))?(?:\|(?[^\+-]+))?/u; +const TABLE_REGEX = /(?:(?\d+)[Dd])?\[\[(?[\s\S]+?)#?\^(?[\s\S]+?)\]\]\|?(?
    [\s\S]+)?/; +const SECTION_REGEX = /(?:(?\d+)[Dd])?\[\[(?[\s\S]+)\]\]\|?(?[\s\S]+)?/; +const MATH_REGEX = /[\(\^\+\-\*\/\)]/; +const DICE_REGEX = /(?(?\d+)(?:[Dd]?\[?(?:-?\d+\s?,)?\s?(?:-?\d+|%|F)\]?)?)(?(?:(?:=|=!|<|>|<=|>=|=<|=>|\-=|=\-)\d+)*)?/; +const OMITTED_REGEX = /(?\d+)?[Dd](?\[?(?:-?\d+\s?,)?\s?(?:-?\d+|%|F)\]?)?(?(?:(?:=|=!|<|>|<=|>=|=<|=>|\-=|=\-)\d+)*)?/; +const CONDITIONAL_REGEX = /(?:(?=|=!|<|>|<=|>=|=<|=>|\-=|=\-)(?\d+))/g; +const ICON_DEFINITION = "dice-roller-icon"; +const COPY_DEFINITION = "dice-roller-copy"; + +/** + * Inserts a new result into a results map. + * + * @private + * @param {ResultMapInterface} map Results map to modify. + * @param {number} index Index to insert the new value. + * @param {ResultInterface} value Value to insert. + * @memberof DiceRoll + */ +function _insertIntoMap(map, index, value) { + /** Get all values above index, then reverse them */ + let toUpdate = [...map].slice(index).reverse(); + /** Loop through the values and re-insert them into the map at key + 1 */ + toUpdate.forEach(([key, value]) => { + map.set(key + 1, value); + }); + /** Insert the new value at the specified index */ + map.set(index, value); +} + +class BasicRoller extends obsidian.Events { + constructor(plugin, original, lexemes) { + super(); + this.plugin = plugin; + this.original = original; + this.lexemes = lexemes; + this.containerEl = createDiv({ + cls: "dice-roller", + attr: { + "aria-label-position": "top", + "data-dice": this.original + } + }); + this.resultEl = this.containerEl.createDiv("dice-roller-result"); + const icon = this.containerEl.createDiv({ + cls: "dice-roller-button" + }); + obsidian.setIcon(icon, ICON_DEFINITION); + this.containerEl.onclick = this.onClick.bind(this); + icon.onclick = this.onClick.bind(this); + } + setTooltip() { + if (this.plugin.data.displayResultsInline) + return; + this.containerEl.setAttrs({ + "aria-label": this.tooltip + }); + } + getRandomBetween(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + render() { + return __awaiter(this, void 0, void 0, function* () { + this.setTooltip(); + yield this.build(); + }); + } + get inlineText() { + return `${this.tooltip.split("\n").join(" -> ")} -> `; + } + onClick(evt) { + var _a; + return __awaiter(this, void 0, void 0, function* () { + evt.stopPropagation(); + evt.stopImmediatePropagation(); + if ((_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.isCollapsed) { + yield this.roll(); + } + }); + } +} +class GenericRoller extends BasicRoller { +} +class GenericFileRoller extends GenericRoller { + constructor(plugin, original, lexeme, source) { + super(plugin, original, [lexeme]); + this.plugin = plugin; + this.original = original; + this.lexeme = lexeme; + this.source = source; + this.getPath(); + this.getFile(); + } + getFile() { + return __awaiter(this, void 0, void 0, function* () { + this.file = this.plugin.app.metadataCache.getFirstLinkpathDest(this.path, this.source); + if (!this.file || !(this.file instanceof obsidian.TFile)) + throw new Error("Could not load file."); + yield this.load(); + this.registerFileWatcher(); + }); + } + registerFileWatcher() { + this.plugin.registerEvent(this.plugin.app.vault.on("modify", (file) => __awaiter(this, void 0, void 0, function* () { + if (file !== this.file) + return; + yield this.getOptions(); + }))); + } +} + +class DiceRoller { + constructor(dice, lexeme) { + var _a; + this.lexeme = lexeme; + this.modifiers = new Map(); + this.modifiersAllowed = true; + this.static = false; + this.conditions = []; + if (!/(\-?\d+)[dD]?(\d+|%|\[\d+,\s?\d+\])?/.test(dice)) { + throw new Error("Non parseable dice string passed to DiceRoll."); + } + this.dice = dice.split(" ").join(""); + if (/^-?\d+$/.test(this.dice)) { + this.static = true; + this.modifiersAllowed = false; + } + let [, rolls, min = null, max = 1] = this.dice.match(/(\-?\d+)[dD]\[?(?:(-?\d+)\s?,)?\s?(-?\d+|%|F)\]?/) || [, 1, null, 1]; + this.rolls = Number(rolls) || 1; + if (Number(max) < 0 && !min) { + min = -1; + } + if (max === "%") + max = 100; + if (max === "F") { + max = 1; + min = -1; + } + if (Number(max) < Number(min)) { + [max, min] = [min, max]; + } + this.faces = { max: max ? Number(max) : 1, min: min ? Number(min) : 1 }; + this.conditions = (_a = this.lexeme.conditionals) !== null && _a !== void 0 ? _a : []; + this.results = new Map([...this.roll()].map((n, i) => { + return [ + i, + { + usable: true, + value: n, + display: `${n}`, + modifiers: new Set() + } + ]; + })); + } + get text() { + return `${this.result}`; + } + get result() { + if (this.static) { + return Number(this.dice); + } + const results = [...this.results].map(([, { usable, value }]) => usable ? value : 0); + return results.reduce((a, b) => a + b, 0); + } + get display() { + if (this.static) { + return `${this.result}`; + } + return `[${[...this.results] + .map(([, { modifiers, display }]) => `${display}${[...modifiers].join("")}`) + .join(", ")}]`; + } + keepLow(drop = 1) { + if (!this.modifiersAllowed) { + new obsidian.Notice("Modifiers are only allowed on dice rolls."); + return; + } + /* if (this.conditions?.length) { + new Notice("Modifiers are not permitted on conditioned dice."); + return; + } */ + [...this.results] + .sort((a, b) => a[1].value - b[1].value) + .slice(drop - this.results.size) + .forEach(([index]) => { + const previous = this.results.get(index); + previous.usable = false; + previous.modifiers.add("d"); + this.results.set(index, Object.assign({}, previous)); + }); + } + keepHigh(drop = 1) { + if (!this.modifiersAllowed) { + new obsidian.Notice("Modifiers are only allowed on dice rolls."); + return; + } + /* if (this.conditions?.length) { + new Notice("Modifiers are not permitted on conditioned dice."); + return; + } */ + [...this.results] + .sort((a, b) => b[1].value - a[1].value) + .slice(drop) + .forEach(([index]) => { + const previous = this.results.get(index); + previous.usable = false; + previous.modifiers.add("d"); + this.results.set(index, Object.assign({}, previous)); + }); + } + reroll(times, conditionals) { + if (!this.modifiersAllowed) { + new obsidian.Notice("Modifiers are only allowed on dice rolls."); + return; + } + /* if (this.conditions?.length) { + new Notice("Modifiers are not permitted on conditioned dice."); + return; + } */ + /** + * Build Conditional + */ + if (!conditionals.length) { + conditionals.push({ + operator: "=", + comparer: this.faces.min + }); + } + /** + * Find values that pass the conditional. + */ + let i = 0, toReroll = [...this.results].filter(([, { value }]) => this.checkCondition(value, conditionals)); + while (i < times && + toReroll.filter(([, { value }]) => this.checkCondition(value, conditionals)).length > 0) { + i++; + toReroll.map(([, roll]) => { + roll.modifiers.add("r"); + roll.value = this.getRandomBetween(this.faces.min, this.faces.max); + }); + } + toReroll.forEach(([index, value]) => { + this.results.set(index, value); + }); + } + explodeAndCombine(times, conditionals) { + if (!this.modifiersAllowed) { + new obsidian.Notice("Modifiers are only allowed on dice rolls."); + return; + } + /* if (this.conditions?.length) { + new Notice("Modifiers are not permitted on conditioned dice."); + return; + } */ + /** + * Build Conditional + */ + if (!conditionals.length) { + conditionals.push({ + operator: "=", + comparer: this.faces.max + }); + } + /** + * Find values that pass the conditional + */ + let i = 0, toExplode = [...this.results].filter(([, { value }]) => this.checkCondition(value, conditionals)); + toExplode.forEach(([index, value]) => { + let newRoll = this.getRandomBetween(this.faces.min, this.faces.max); + i++; + value.modifiers.add("!"); + value.value += newRoll; + value.display = `${value.value}`; + this.results.set(index, value); + while (i < times && this.checkCondition(newRoll, conditionals)) { + i++; + newRoll = this.getRandomBetween(this.faces.min, this.faces.max); + value.value += newRoll; + value.display = `${value.value}`; + this.results.set(index, value); + } + }); + } + explode(times, conditionals) { + if (!this.modifiersAllowed) { + new obsidian.Notice("Modifiers are only allowed on dice rolls."); + return; + } + /* if (this.conditions?.length) { + new Notice("Modifiers are not permitted on conditioned dice."); + return; + } */ + /** + * Build Conditional + */ + if (!conditionals.length) { + conditionals.push({ + operator: "=", + comparer: this.faces.max + }); + } + /** + * Find values that pass the conditional + */ + let toExplode = [...this.results].filter(([, { value }]) => this.checkCondition(value, conditionals)); + /** Track how many have been inserted */ + let inserted = 0; + /** Loop through values that need to explode */ + toExplode.forEach(([key, value]) => { + /** newRoll is the new value to check against the max face value */ + let newRoll = value.value; + /** i tracks how many times this roll has been exploded */ + let i = 0; + /** + * Explode max rolls. + */ + while (i < times && this.checkCondition(newRoll, conditionals)) { + let previous = this.results.get(key + inserted + i); + previous.modifiers.add("!"); + newRoll = this.getRandomBetween(this.faces.min, this.faces.max); + /** Insert the new roll into the results map */ + _insertIntoMap(this.results, key + inserted + i + 1, { + usable: true, + value: newRoll, + display: `${newRoll}`, + modifiers: new Set() + }); + i++; + } + /** Update how many have been inserted. */ + inserted += i; + }); + } + _roll() { + if (this.static) { + return [Number(this.dice)]; + } + return [...Array(this.rolls)].map(() => this.getRandomBetween(this.faces.min, this.faces.max)); + } + roll() { + var _a; + const roll = this._roll(); + this.results = new Map([...roll].map((n, i) => { + return [ + i, + { + usable: true, + value: n, + display: `${n}`, + modifiers: new Set() + } + ]; + })); + for (let [type, modifier] of this.modifiers) { + this.applyModifier(type, modifier); + } + if ((_a = this.conditions) === null || _a === void 0 ? void 0 : _a.length) + this.applyConditions(); + return roll; + } + applyConditions() { + for (let [index, result] of this.results) { + const negate = this.conditions.find(({ operator }) => operator === "-=" || operator === "=-"); + if (negate) { + if (result.value === negate.comparer) { + result.value = -1; + result.modifiers.add("-"); + continue; + } + } + const check = this.checkCondition(result.value, this.conditions); + if (!check) { + result.usable = false; + } + else { + result.modifiers.add("*"); + result.value = 1; + } + } + } + applyModifier(type, modifier) { + switch (type) { + case "kh": { + this.keepHigh(modifier.data); + break; + } + case "kl": { + this.keepLow(modifier.data); + break; + } + case "!": { + this.explode(modifier.data, modifier.conditionals); + break; + } + case "!!": { + this.explodeAndCombine(modifier.data, modifier.conditionals); + break; + } + case "r": { + this.reroll(modifier.data, modifier.conditionals); + break; + } + } + } + checkCondition(value, conditions) { + if (!conditions || !conditions.length) + return value; + return conditions.some(({ operator, comparer }) => { + if (Number.isNaN(value) || Number.isNaN(comparer)) { + return false; + } + let result = false; + switch (operator) { + case "=": + result = value === comparer; + break; + case "!=": + case "=!": + result = value !== comparer; + break; + case "<": + result = value < comparer; + break; + case "<=": + result = value <= comparer; + break; + case ">": + result = value > comparer; + break; + case ">=": + result = value >= comparer; + break; + } + return result; + }); + } + getRandomBetween(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } +} +class StuntRoller extends DiceRoller { + constructor(dice, lexeme) { + super(`3d6`, lexeme); + this.lexeme = lexeme; + this.dice = dice; + } + get doubles() { + return (new Set([...this.results].map(([, { usable, value }]) => usable ? value : 0)).size < 3); + } + get result() { + if (this.static) { + return Number(this.dice); + } + const results = [...this.results].map(([, { usable, value }]) => usable ? value : 0); + return results.reduce((a, b) => a + b, 0); + } + get display() { + let str = []; + for (let result of this.results) { + if (result[0] == 0 && this.doubles) { + str.push(`${result[1].value}S`); + continue; + } + str.push(`${result[1].value}`); + } + return `[${str.join(", ")}]`; + } +} +class StackRoller extends GenericRoller { + constructor(plugin, original, lexemes) { + super(plugin, original, lexemes); + this.plugin = plugin; + this.original = original; + this.lexemes = lexemes; + this.stunted = ""; + this.operators = { + "+": (a, b) => a + b, + "-": (a, b) => a - b, + "*": (a, b) => a * b, + "/": (a, b) => a / b, + "^": (a, b) => { + return Math.pow(a, b); + } + }; + this.stack = []; + this.dice = []; + } + get tooltip() { + if (this._tooltip) + return this._tooltip; + let text = this.original; + this.dice.forEach((dice) => { + text = text.replace(dice.lexeme.original, dice.display); + }); + return `${this.original}\n${text}`; + } + build() { + return __awaiter(this, void 0, void 0, function* () { + const result = [ + this.result.toLocaleString(navigator.language, { + maximumFractionDigits: 2 + }) + ]; + if (this.plugin.data.displayResultsInline) { + result.unshift(this.inlineText); + } + this.resultEl.setText(result.join("") + this.stunted); + }); + } + roll() { + return __awaiter(this, void 0, void 0, function* () { + let index = 0; + this.stunted = ""; + for (const dice of this.lexemes) { + switch (dice.type) { + case "+": + case "-": + case "*": + case "/": + case "^": + case "math": + let b = this.stack.pop(), a = this.stack.pop(); + if (!a) { + this.stack.push(b); + continue; + } + b.roll(); + if (b instanceof StuntRoller) { + if (b.doubles) { + this.stunted = ` - ${b.results.get(0).value} Stunt Points`; + } + } + a.roll(); + if (a instanceof StuntRoller) { + if (a.doubles) { + this.stunted = ` - ${a.results.get(0).value} Stunt Points`; + } + } + const result = this.operators[dice.data](a.result, b.result); + this.stack.push(new DiceRoller(`${result}`, dice)); + break; + case "kh": { + let diceInstance = this.dice[index - 1]; + let data = dice.data ? Number(dice.data) : 1; + diceInstance.modifiers.set("kh", { + data, + conditionals: [] + }); + break; + } + case "dl": { + let diceInstance = this.dice[index - 1]; + let data = dice.data ? Number(dice.data) : 1; + data = diceInstance.results.size - data; + diceInstance.modifiers.set("kh", { + data, + conditionals: [] + }); + break; + } + case "kl": { + let diceInstance = this.dice[index - 1]; + let data = dice.data ? Number(dice.data) : 1; + diceInstance.modifiers.set("kl", { + data, + conditionals: [] + }); + break; + } + case "dh": { + let diceInstance = this.dice[index - 1]; + let data = dice.data ? Number(dice.data) : 1; + data = diceInstance.results.size - data; + diceInstance.modifiers.set("kl", { + data, + conditionals: [] + }); + break; + } + case "!": { + let diceInstance = this.dice[index - 1]; + let data = Number(dice.data) || 1; + diceInstance.modifiers.set("!", { + data, + conditionals: dice.conditionals + }); + break; + } + case "!!": { + let diceInstance = this.dice[index - 1]; + let data = Number(dice.data) || 1; + diceInstance.modifiers.set("!!", { + data, + conditionals: dice.conditionals + }); + break; + } + case "r": { + let diceInstance = this.dice[index - 1]; + let data = Number(dice.data) || 1; + diceInstance.modifiers.set("r", { + data, + conditionals: dice.conditionals + }); + break; + } + case "dice": + if (!this.dice[index]) { + this.dice[index] = new DiceRoller(dice.data, dice); + } + this.stack.push(this.dice[index]); + index++; + break; + case "stunt": + if (!this.dice[index]) { + this.dice[index] = new StuntRoller(dice.original, dice); + } + this.stack.push(this.dice[index]); + index++; + } + } + const final = this.stack.pop(); + final.roll(); + if (final instanceof StuntRoller) { + if (final.doubles) { + this.stunted = ` - ${final.results.get(0).value} Stunt Points`; + } + } + this.result = final.result; + this._tooltip = null; + this.render(); + this.trigger("new-result"); + return this.result; + }); + } + toResult() { + return { + type: "dice", + result: this.result, + tooltip: this.tooltip + }; + } + applyResult(result) { + return __awaiter(this, void 0, void 0, function* () { + if (result.type !== "dice") + return; + if (result.result) { + this.result = result.result; + } + if (result.tooltip) { + this._tooltip = result.tooltip; + } + yield this.render(); + }); + } +} + +class SectionRoller extends GenericFileRoller { + constructor(plugin, original, lexeme, source, inline = true) { + super(plugin, original, lexeme, source); + this.plugin = plugin; + this.original = original; + this.lexeme = lexeme; + this.inline = inline; + this.containerEl.addClasses(["has-embed", "markdown-embed"]); + this.resultEl.addClass("internal-embed"); + this.resultEl.setAttrs({ src: source }); + this.copy = this.containerEl.createDiv({ + cls: "dice-content-copy dice-roller-button no-show", + attr: { "aria-label": "Copy Contents" } + }); + this.copy.addEventListener("click", (evt) => { + evt.stopPropagation(); + navigator.clipboard + .writeText(this.displayFromCache(...this.results).trim()) + .then(() => __awaiter(this, void 0, void 0, function* () { + new obsidian.Notice("Result copied to clipboard."); + })); + }); + obsidian.setIcon(this.copy, COPY_DEFINITION); + } + get tooltip() { + return `${this.original}\n${this.path}`; + } + build() { + return __awaiter(this, void 0, void 0, function* () { + this.resultEl.empty(); + if (this.plugin.data.displayResultsInline && this.inline) { + this.resultEl.createSpan({ + text: this.inlineText + }); + } + if (!this.results || !this.results.length) { + this.resultEl.createDiv({ + cls: "dice-no-results", + text: "No results." + }); + return; + } + if (this.plugin.data.copyContentButton) { + this.copy.removeClass("no-show"); + } + for (const result of this.results) { + this.resultEl.onclick = (evt) => __awaiter(this, void 0, void 0, function* () { + if ((evt && evt.getModifierState("Control")) || + evt.getModifierState("Meta")) { + evt.stopPropagation(); + return; + } + }); + const ret = this.resultEl.createDiv({ + cls: "markdown-embed" + }); + if (!this.plugin.data.displayResultsInline) { + ret.setAttrs({ + "aria-label": `${this.file.basename}: ${result.type}` + }); + } + if (!result) { + ret.createDiv({ + cls: "dice-no-results", + text: "No results." + }); + continue; + } + obsidian.MarkdownRenderer.renderMarkdown(this.displayFromCache(result), ret.createDiv(), this.source, null); + if (this.plugin.data.copyContentButton && this.results.length > 1) { + let copy = ret.createDiv({ + cls: "dice-content-copy dice-roller-button", + attr: { "aria-label": "Copy Contents" } + }); + copy.addEventListener("click", (evt) => { + evt.stopPropagation(); + navigator.clipboard + .writeText(this.displayFromCache(result).trim()) + .then(() => __awaiter(this, void 0, void 0, function* () { + new obsidian.Notice("Result copied to clipboard."); + })); + }); + obsidian.setIcon(copy, COPY_DEFINITION); + } + } + }); + } + load() { + return __awaiter(this, void 0, void 0, function* () { + yield this.getOptions(); + }); + } + displayFromCache(...caches) { + let res = []; + for (let cache of caches) { + res.push(this.content.slice(cache.position.start.offset, cache.position.end.offset)); + } + return res.join("\n\n"); + } + getPath() { + var _a; + const { groups } = this.lexeme.data.match(SECTION_REGEX); + const { roll = 1, link, types } = groups; + if (!link) + throw new Error("Could not parse link."); + this.rolls = (_a = (roll && !isNaN(Number(roll)) && Number(roll))) !== null && _a !== void 0 ? _a : 1; + this.path = link.replace(/(\[|\])/g, ""); + this.types = types === null || types === void 0 ? void 0 : types.split(","); + } + getOptions() { + return __awaiter(this, void 0, void 0, function* () { + this.cache = this.plugin.app.metadataCache.getFileCache(this.file); + if (!this.cache || !this.cache.sections) { + throw new Error("Could not read file cache."); + } + this.content = yield this.plugin.app.vault.cachedRead(this.file); + this.options = this.cache.sections.filter(({ type }) => this.types + ? this.types.includes(type) + : !["yaml", "thematicBreak"].includes(type)); + this.loaded = true; + this.trigger("loaded"); + }); + } + roll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + if (!this.loaded) { + this.on("loaded", () => { + const options = [...this.options]; + this.results = [...Array(this.rolls)] + .map(() => { + let option = options[this.getRandomBetween(0, options.length - 1)]; + options.splice(options.indexOf(option), 1); + return option; + }) + .filter((r) => r); + this.render(); + this.trigger("new-result"); + resolve(this.results[0]); + }); + } + else { + const options = [...this.options]; + this.results = [...Array(this.rolls)] + .map(() => { + let option = options[this.getRandomBetween(0, options.length - 1)]; + options.splice(options.indexOf(option), 1); + return option; + }) + .filter((r) => r); + this.render(); + this.trigger("new-result"); + resolve(this.results[0]); + } + }); + }); + } + toResult() { + return { + type: "section", + result: this.results + }; + } + applyResult(result) { + return __awaiter(this, void 0, void 0, function* () { + if (result.type !== "section") + return; + if (result.result) { + this.results = result.result; + } + yield this.render(); + }); + } +} +class TagRoller extends GenericRoller { + constructor(plugin, original, lexeme, source) { + super(plugin, original, [lexeme]); + this.plugin = plugin; + this.original = original; + this.lexeme = lexeme; + this.source = source; + this.loaded = false; + this.containerEl.addClasses(["has-embed", "markdown-embed"]); + const { roll = 1, tag, collapse, types } = lexeme.data.match(TAG_REGEX).groups; + this.collapse = + collapse === "-" + ? true + : collapse === "+" + ? false + : !this.plugin.data.returnAllTags; + this.tag = `#${tag}`; + this.rolls = Number(roll); + this.types = types; + this.getFiles(); + } + get typeText() { + var _a; + if (!((_a = this.types) === null || _a === void 0 ? void 0 : _a.length)) { + return ""; + } + return `|${this.types}`; + } + getFiles() { + return __awaiter(this, void 0, void 0, function* () { + const files = this.plugin.app.plugins.plugins.dataview.index.tags.invMap.get(this.tag); + if (files) + files.delete(this.source); + if (!files || !files.size) { + throw new Error("No files found with that tag. Is the tag correct?\n\n" + + this.tag); + } + const links = Array.from(files).map((file) => `${this.rolls}d[[${file}]]${this.typeText}`); + this.results = links.map((link) => { + return new SectionRoller(this.plugin, link, { + data: link, + original: link, + conditionals: null, + type: "section" + }, this.source, false); + }); + this.loaded = true; + this.trigger("loaded"); + }); + } + build() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + this.resultEl.empty(); + if (this.plugin.data.displayResultsInline) { + this.resultEl.createSpan({ + text: this.inlineText + }); + } + if (this.collapse) { + this.chosen = + (_a = this.random) !== null && _a !== void 0 ? _a : this.getRandomBetween(0, this.results.length - 1); + let section = this.results[this.chosen]; + this.random = null; + const container = this.resultEl.createDiv(); + container.createEl("h5", { + cls: "dice-file-name", + text: section.file.basename + }); + container.appendChild(section.containerEl); + } + else { + for (let section of this.results) { + const container = this.resultEl.createDiv(); + container.createEl("h5", { + cls: "dice-file-name", + text: section.file.basename + }); + container.appendChild(section.containerEl); + } + } + }); + } + roll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve, reject) => { + if (this.loaded) { + this.results.forEach((section) => __awaiter(this, void 0, void 0, function* () { return yield section.roll(); })); + this.render(); + this.trigger("new-result"); + resolve(this.result); + } + else { + this.on("loaded", () => { + this.results.forEach((section) => __awaiter(this, void 0, void 0, function* () { return yield section.roll(); })); + this.render(); + this.trigger("new-result"); + resolve(this.result); + }); + } + }); + }); + } + get tooltip() { + return this.original; + } + toResult() { + return { + type: "tag", + random: this.chosen, + result: Object.fromEntries(this.results.map((section) => [ + section.path, + section.toResult() + ])) + }; + } + applyResult(result) { + return __awaiter(this, void 0, void 0, function* () { + if (result.type !== "tag") + return; + if (result.result) { + for (let path in result.result) { + const section = this.results.find((section) => section.path === path); + if (!section) + continue; + section.applyResult(result.result[path]); + } + } + if (result.random) { + this.random = result.random; + } + yield this.render(); + }); + } +} +class LinkRoller extends GenericRoller { + constructor(plugin, original, lexeme, source) { + var _a; + super(plugin, original, [lexeme]); + this.plugin = plugin; + this.original = original; + this.lexeme = lexeme; + this.source = source; + const { roll = 1, tag } = lexeme.data.match(TAG_REGEX).groups; + this.tag = `#${tag}`; + this.rolls = (_a = (roll && !isNaN(Number(roll)) && Number(roll))) !== null && _a !== void 0 ? _a : 1; + this.getFiles(); + } + get tooltip() { + return `${this.original}\n${this.result.basename}`; + } + roll() { + return __awaiter(this, void 0, void 0, function* () { + return ((this.result = + this.links[this.getRandomBetween(0, this.links.length - 1)]), + yield this.render(), + this.trigger("new-result"), + this.result); + }); + } + build() { + return __awaiter(this, void 0, void 0, function* () { + this.resultEl.empty(); + if (this.plugin.data.displayResultsInline) { + this.resultEl.createSpan({ + text: this.inlineText + }); + } + const link = this.resultEl.createEl("a", { + cls: "internal-link", + text: this.result.basename + }); + link.onclick = (evt) => __awaiter(this, void 0, void 0, function* () { + var _a; + evt.stopPropagation(); + this.plugin.app.workspace.openLinkText(this.result.path, (_a = this.plugin.app.workspace.getActiveFile()) === null || _a === void 0 ? void 0 : _a.path, true); + }); + link.onmouseenter = (evt) => __awaiter(this, void 0, void 0, function* () { + var _b; + this.plugin.app.workspace.trigger("link-hover", this, //not sure + link, //targetEl + this.result.path, //linkText + (_b = this.plugin.app.workspace.getActiveFile()) === null || _b === void 0 ? void 0 : _b.path //source + ); + }); + }); + } + getFiles() { + return __awaiter(this, void 0, void 0, function* () { + const files = this.plugin.app.plugins.plugins.dataview.index.tags.invMap.get(this.tag); + if (files) + files.delete(this.source); + if (!files || !files.size) { + throw new Error("No files found with that tag. Is the tag correct?\n\n" + + this.tag); + } + this.links = Array.from(files).map((link) => this.plugin.app.metadataCache.getFirstLinkpathDest(link, this.source)); + }); + } + toResult() { + return { + type: "link", + result: this.result.path + }; + } + applyResult(result) { + return __awaiter(this, void 0, void 0, function* () { + if (result.type !== "link") + return; + if (result.result) { + const file = this.plugin.app.vault.getAbstractFileByPath(result.result); + if (file && file instanceof obsidian.TFile) { + this.result = file; + } + } + yield this.render(); + }); + } +} + +class TableRoller extends GenericFileRoller { + getPath() { + var _a; + const { groups } = this.lexeme.data.match(TABLE_REGEX); + const { roll = 1, link, block, header } = groups; + if (!link || !block) + throw new Error("Could not parse link."); + this.rolls = (_a = (roll && !isNaN(Number(roll)) && Number(roll))) !== null && _a !== void 0 ? _a : 1; + this.path = link.replace(/(\[|\])/g, ""); + this.block = block + .replace(/(\^|#)/g, "") + .trim() + .toLowerCase(); + this.header = header; + } + get tooltip() { + return `${this.original}\n${this.path} > ${this.block}${this.header ? " | " + this.header : ""}`; + } + build() { + return __awaiter(this, void 0, void 0, function* () { + this.resultEl.empty(); + const result = [this.result]; + if (this.plugin.data.displayResultsInline) { + result.unshift(this.inlineText); + } + const split = result.join("").split(/(\[\[(?:[\s\S]+?)\]\])/); + for (let str of split) { + if (/\[\[(?:[\s\S]+?)\]\]/.test(str)) { + //link; + const [, match] = str.match(/\[\[([\s\S]+?)\]\]/); + const internal = this.resultEl.createEl("a", { + cls: "internal-link", + text: match + }); + internal.onmouseover = () => { + var _a; + this.plugin.app.workspace.trigger("link-hover", this, //not sure + internal, //targetEl + match.replace("^", "#^").split("|").shift(), //linkText + (_a = this.plugin.app.workspace.getActiveFile()) === null || _a === void 0 ? void 0 : _a.path //source + ); + }; + internal.onclick = (ev) => __awaiter(this, void 0, void 0, function* () { + var _a; + ev.stopPropagation(); + yield this.plugin.app.workspace.openLinkText(match.replace("^", "#^").split(/\|/).shift(), (_a = this.plugin.app.workspace.getActiveFile()) === null || _a === void 0 ? void 0 : _a.path, ev.getModifierState("Control")); + }); + continue; + } + this.resultEl.createSpan({ text: str }); + } + }); + } + roll() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => { + if (this.loaded) { + const options = [...this.options]; + this.result = [...Array(this.rolls)] + .map(() => { + let option = options[this.getRandomBetween(0, options.length - 1)]; + options.splice(options.indexOf(option), 1); + return option; + }) + .join("||"); + this.render(); + this.trigger("new-result"); + resolve(this.result); + } + else { + this.on("loaded", () => { + const options = [...this.options]; + this.result = [...Array(this.rolls)] + .map(() => { + let option = options[this.getRandomBetween(0, options.length - 1)]; + options.splice(options.indexOf(option), 1); + return option; + }) + .join("||"); + this.render(); + this.trigger("new-result"); + resolve(this.result); + }); + } + }); + }); + } + load() { + return __awaiter(this, void 0, void 0, function* () { + yield this.getOptions(); + }); + } + getOptions() { + var _a; + return __awaiter(this, void 0, void 0, function* () { + this.cache = this.plugin.app.metadataCache.getFileCache(this.file); + if (!this.cache || + !this.cache.blocks || + !(this.block in this.cache.blocks)) { + throw new Error("Could not read file cache. Does the block reference exist?\n\n" + + `${this.path} > ${this.block}`); + } + this.position = this.cache.blocks[this.block].position; + this.content = (_a = (yield this.plugin.app.vault.cachedRead(this.file))) === null || _a === void 0 ? void 0 : _a.slice(this.position.start.offset, this.position.end.offset); + let table = extract(this.content); + if (this.header && table.columns[this.header]) { + this.options = table.columns[this.header]; + } + else { + if (this.header) + throw new Error(`Header ${this.header} was not found in table ${this.path} > ${this.block}.`); + this.options = table.rows; + } + this.loaded = true; + this.trigger("loaded"); + }); + } + toResult() { + return { + type: "table", + result: this.result + }; + } + applyResult(result) { + return __awaiter(this, void 0, void 0, function* () { + if (result.type !== "table") + return; + if (result.result) { + this.result = result.result; + } + yield this.render(); + }); + } +} +const MATCH = /^\|?([\s\S]+?)\|?$/; +const SPLIT = /\|/; +function extract(content) { + const lines = content.split("\n"); + const inner = lines.map((l) => { var _a; return ((_a = l.trim().match(MATCH)) !== null && _a !== void 0 ? _a : [, l.trim()])[1]; }); + const headers = inner[0].split(SPLIT); + const rows = []; + const ret = []; + for (let index in headers) { + let header = headers[index]; + if (!header.trim().length) + header = index; + ret.push([header.trim(), []]); + } + for (let line of lines.slice(2)) { + const entries = line + .trim() + .split(SPLIT) + .map((e) => e.trim()) + .filter((e) => e.length); + rows.push(entries.join(" | ")); + for (let index in entries) { + const entry = entries[index].trim(); + if (!entry.length || !ret[index]) + continue; + ret[index][1].push(entry); + } + } + return { + columns: Object.fromEntries(ret), + rows: rows + }; +} + +class SettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + this.plugin = plugin; + } + display() { + return __awaiter(this, void 0, void 0, function* () { + let { containerEl } = this; + containerEl.empty(); + containerEl.addClass("dice-roller-settings"); + containerEl.createEl("h2", { text: "Dice Roller Settings" }); + new obsidian.Setting(containerEl) + .setName("Roll All Files for Tags") + .setDesc("Return a result for each file when rolling tags.") + .addToggle((t) => { + t.setValue(this.plugin.data.returnAllTags); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.returnAllTags = v; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Always Return Links for Tags") + .setDesc("Enables random link rolling with the link parameter. Override by specifying a section type.") + .addToggle((t) => { + t.setValue(this.plugin.data.rollLinksForTags); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.rollLinksForTags = v; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Add Copy Button to Section Results") + .setDesc("Randomly rolled sections will have a copy-content button to easy add result to clipboard.") + .addToggle((t) => { + t.setValue(this.plugin.data.copyContentButton); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.copyContentButton = v; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Display Formula With Results") + .setDesc("Both the formula and the results will both be displayed in preview mode.") + .addToggle((t) => { + t.setValue(this.plugin.data.displayResultsInline); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.displayResultsInline = v; + yield this.plugin.saveSettings(); + })); + }); + const save = new obsidian.Setting(containerEl) + .setName("Globally Save Results") + .setDesc("Dice results will be saved by default. This can be overridden using ") + .addToggle((t) => { + t.setValue(this.plugin.data.persistResults); + t.onChange((v) => __awaiter(this, void 0, void 0, function* () { + this.plugin.data.persistResults = v; + yield this.plugin.saveSettings(); + })); + }); + new obsidian.Setting(containerEl) + .setName("Default Roll") + .setDesc("Use this as the number of rolls when it is omitted.") + .addText((t) => { + t.setValue(`${this.plugin.data.defaultRoll}`); + t.inputEl.onblur = () => __awaiter(this, void 0, void 0, function* () { + if (isNaN(Number(t.inputEl.value))) { + new obsidian.Notice("The default roll must be a number."); + } + this.plugin.data.defaultRoll = Number(t.inputEl.value); + yield this.plugin.saveSettings(); + }); + }); + new obsidian.Setting(containerEl) + .setName("Default Face") + .setDesc("Use this as the number of faces when it is omitted.") + .addText((t) => { + t.setValue(`${this.plugin.data.defaultFace}`); + t.inputEl.onblur = () => __awaiter(this, void 0, void 0, function* () { + if (isNaN(Number(t.inputEl.value))) { + new obsidian.Notice("The default face must be a number."); + } + this.plugin.data.defaultFace = Number(t.inputEl.value); + yield this.plugin.saveSettings(); + }); + }); + save.descEl.createEl("code", { text: `dice-: formula` }); + save.descEl.createEl("p", { + text: "Please note that the plugin will attempt to save the result but may not be able to." + }); + this.additionalContainer = containerEl.createDiv("dice-roller-setting-additional-container"); + this.buildFormulaSettings(); + const div = containerEl.createDiv("coffee"); + div.createEl("a", { + href: "https://www.buymeacoffee.com/valentine195" + }).createEl("img", { + attr: { + src: "https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=☕&slug=valentine195&button_colour=e3e7ef&font_colour=262626&font_family=Inter&outline_colour=262626&coffee_colour=ff0000" + } + }); + }); + } + buildFormulaSettings() { + this.additionalContainer.empty(); + const addNew = this.additionalContainer.createDiv(); + new obsidian.Setting(addNew) + .setName("Add Formula") + .setDesc("Add a new formula shortcut.") + .addButton((button) => { + let b = button + .setTooltip("Add Formula") + .setButtonText("+") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + const formula = yield this.buildFormulaForm(addNew); + if (formula) { + this.plugin.data.formulas[formula.alias] = + formula.formula; + this.buildFormulaSettings(); + yield this.plugin.saveSettings(); + } + })); + return b; + }); + const additional = this.additionalContainer.createDiv("additional"); + const formulas = this.plugin.data.formulas; + for (const [alias, formula] of Object.entries(formulas)) { + const setting = new obsidian.Setting(additional).setName(alias); + setting.controlEl.createSpan({ text: formula }); + setting + .addExtraButton((b) => b + .setIcon("pencil") + .setTooltip("Edit") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + const edited = yield this.buildFormulaForm(addNew, { + alias, + formula + }); + if (edited) { + delete this.plugin.data.formulas[alias]; + this.plugin.data.formulas[edited.alias] = + edited.formula; + this.buildFormulaSettings(); + yield this.plugin.saveSettings(); + } + }))) + .addExtraButton((b) => b + .setIcon("trash") + .setTooltip("Delete") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + delete this.plugin.data.formulas[alias]; + yield this.plugin.saveSettings(); + this.buildFormulaSettings(); + }))); + } + if (!Object.values(formulas).length) { + additional.createSpan({ + text: "Create a formula to see it here!", + cls: "no-formulas" + }); + } + } + buildFormulaForm(el, temp = { + alias: null, + formula: null + }) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve) => { + const formulaEl = el.createDiv("add-new-formula"); + const dataEl = formulaEl.createDiv("formula-data"); + new obsidian.Setting(dataEl).setName("Alias").addText((t) => { + t.setValue(temp.alias).onChange((v) => (temp.alias = v)); + }); + new obsidian.Setting(dataEl).setName("Formula").addText((t) => { + t.setValue(temp.formula).onChange((v) => (temp.formula = v)); + }); + const buttonEl = formulaEl.createDiv("formula-buttons"); + new obsidian.Setting(buttonEl) + .addButton((b) => b + .setCta() + .setButtonText("Save") + .onClick(() => __awaiter(this, void 0, void 0, function* () { + formulaEl.detach(); + resolve(temp); + }))) + .addExtraButton((b) => b + .setIcon("cross") + .setTooltip("Cancel") + .onClick(() => { + formulaEl.detach(); + resolve(null); + })); + }); + }); + } +} + +String.prototype.matchAll = + String.prototype.matchAll || + function* matchAll(regexp) { + const flags = regexp.global ? regexp.flags : regexp.flags + "g"; + const re = new RegExp(regexp, flags); + let match; + while ((match = re.exec(this))) { + yield match; + } + }; +const DEFAULT_SETTINGS = { + returnAllTags: true, + rollLinksForTags: false, + copyContentButton: true, + displayResultsInline: false, + formulas: {}, + persistResults: false, + results: {}, + defaultRoll: 1, + defaultFace: 100 +}; +class DiceRollerPlugin extends obsidian.Plugin { + constructor() { + super(...arguments); + this.persistingFiles = new Set(); + this.operators = { + "+": (a, b) => a + b, + "-": (a, b) => a - b, + "*": (a, b) => a * b, + "/": (a, b) => a / b, + "^": (a, b) => { + return Math.pow(a, b); + } + }; + } + onload() { + return __awaiter(this, void 0, void 0, function* () { + console.log("DiceRoller plugin loaded"); + this.data = Object.assign(DEFAULT_SETTINGS, yield this.loadData()); + this.addSettingTab(new SettingTab(this.app, this)); + const ICON_SVG = icon(faDice).html[0]; + obsidian.addIcon(ICON_DEFINITION, ICON_SVG); + const COPY_SVG = icon(faCopy).html[0]; + obsidian.addIcon(COPY_DEFINITION, COPY_SVG); + this.registerMarkdownPostProcessor((el, ctx) => __awaiter(this, void 0, void 0, function* () { + var _a, _b, _c, _d, _e; + let nodeList = el.querySelectorAll("code"); + if (!nodeList.length) + return; + const path = ctx.sourcePath; + const info = ctx.getSectionInfo(el); + const lineStart = (_a = ctx.getSectionInfo(el)) === null || _a === void 0 ? void 0 : _a.lineStart; + const file = this.app.vault.getAbstractFileByPath(ctx.sourcePath); + if (!file || !(file instanceof obsidian.TFile) || !info) + return; + const toPersist = {}; + for (let index = 0; index < nodeList.length; index++) { + const node = nodeList.item(index); + if (/^dice\-mod:\s*([\s\S]+)\s*?/.test(node.innerText)) { + try { + let [full, content] = node.innerText.match(/^dice\-mod:\s*([\s\S]+)\s*?/); + if (content in this.data.formulas) { + content = this.data.formulas[content]; + } + if (!DICE_REGEX.test(content)) { + new obsidian.Notice("Replacing note content may only be done with Dice Rolls."); + continue; + } + //build result map; + const roller = this.getRoller(content, ctx.sourcePath); + yield roller.roll(); + const fileContent = (yield this.app.vault.cachedRead(file)).split("\n"); + let splitContent = fileContent.slice(info.lineStart, info.lineEnd + 1); + splitContent = splitContent + .join("\n") + .replace(`\`${full}\``, `${roller.inlineText} **${roller.result}**`) + .split("\n"); + fileContent.splice(info.lineStart, info.lineEnd - info.lineStart + 1, ...splitContent); + yield this.app.vault.modify(file, fileContent.join("\n")); + } + catch (e) { + console.error(e); + } + } + if (!/^dice(?:\+|\-)?:\s*([\s\S]+)\s*?/.test(node.innerText)) + continue; + try { + let [, content] = node.innerText.match(/^dice(?:\+|\-)?:\s*([\s\S]+)\s*?/); + if (content in this.data.formulas) { + content = this.data.formulas[content]; + } + //build result map; + const roller = this.getRoller(content, ctx.sourcePath); + yield roller.roll(); + if ((this.data.persistResults && + !/dice\-/.test(node.innerText)) || + /dice\+/.test(node.innerText)) { + this.persistingFiles.add(ctx.sourcePath); + toPersist[index] = roller; + const result = (_e = (_d = (_c = (_b = this.data.results) === null || _b === void 0 ? void 0 : _b[path]) === null || _c === void 0 ? void 0 : _c[lineStart]) === null || _d === void 0 ? void 0 : _d[index]) !== null && _e !== void 0 ? _e : null; + if (result) { + yield roller.applyResult(result); + } + } + node.replaceWith(roller.containerEl); + } + catch (e) { + console.error(e); + new obsidian.Notice(`There was an error parsing the dice string: ${node.innerText}.\n\n${e}`, 5000); + continue; + } + } + if (path in this.data.results) { + this.data.results[path][lineStart] = {}; + } + if (Object.entries(toPersist).length) { + const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView); + if (view) { + const self = this; + let unregisterOnUnloadFile = around(view, { + onUnloadFile: function (next) { + return function (unloaded) { + var _a, _b, _c, _d; + return __awaiter(this, void 0, void 0, function* () { + if ((unloaded = file)) { + if (self.persistingFiles.has(path)) { + self.persistingFiles.delete(path); + self.data.results[path] = {}; + } + for (let index in toPersist) { + const roller = toPersist[index]; + const newLineStart = (_a = ctx.getSectionInfo(el)) === null || _a === void 0 ? void 0 : _a.lineStart; + if (newLineStart == null) + continue; + const result = { + [newLineStart]: Object.assign(Object.assign({}, ((_c = (_b = self.data.results[path]) === null || _b === void 0 ? void 0 : _b[newLineStart]) !== null && _c !== void 0 ? _c : {})), { [index]: roller.toResult() }) + }; + self.data.results[path] = Object.assign(Object.assign({}, ((_d = self.data.results[path]) !== null && _d !== void 0 ? _d : {})), result); + yield self.saveSettings(); + } + } + unregisterOnUnloadFile(); + return yield next.call(this, unloaded); + }); + }; + } + }); + view.register(unregisterOnUnloadFile); + view.register(() => __awaiter(this, void 0, void 0, function* () { + var _f, _g, _h, _j; + if (this.persistingFiles.has(path)) { + this.persistingFiles.delete(path); + this.data.results[path] = {}; + } + for (let index in toPersist) { + const roller = toPersist[index]; + const newLineStart = (_f = ctx.getSectionInfo(el)) === null || _f === void 0 ? void 0 : _f.lineStart; + if (newLineStart == null) + continue; + const result = { + [newLineStart]: Object.assign(Object.assign({}, ((_h = (_g = this.data.results[path]) === null || _g === void 0 ? void 0 : _g[newLineStart]) !== null && _h !== void 0 ? _h : {})), { [index]: roller.toResult() }) + }; + this.data.results[path] = Object.assign(Object.assign({}, ((_j = this.data.results[path]) !== null && _j !== void 0 ? _j : {})), result); + yield this.saveSettings(); + } + })); + } + } + })); + this.lexer = new lexer(); + this.addLexerRules(); + var exponent = { + precedence: 3, + associativity: "right" + }; + var factor = { + precedence: 2, + associativity: "left" + }; + var term = { + precedence: 1, + associativity: "left" + }; + this.parser = new Parser({ + "+": term, + "-": term, + "*": factor, + "/": factor, + "^": exponent + }); + }); + } + parseDice(content, source) { + return __awaiter(this, void 0, void 0, function* () { + const roller = this.getRoller(content, source); + return { result: yield roller.roll() }; + }); + } + clearEmpties(o) { + for (var k in o) { + if (!o[k] || typeof o[k] !== "object") { + continue; + } + this.clearEmpties(o[k]); + if (Object.keys(o[k]).length === 0) { + delete o[k]; + } + } + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.clearEmpties(this.data.results); + yield this.saveData(this.data); + }); + } + getRoller(content, source) { + const lexemes = this.parse(content); + const type = this.getTypeFromLexemes(lexemes); + switch (type) { + case "dice": { + return new StackRoller(this, content, lexemes); + } + case "table": { + return new TableRoller(this, content, lexemes[0], source); + } + case "section": { + return new SectionRoller(this, content, lexemes[0], source); + } + case "tag": { + if (!this.app.plugins.plugins.dataview) { + throw new Error("Tags are only supported with the Dataview plugin installed."); + } + return new TagRoller(this, content, lexemes[0], source); + } + case "link": { + return new LinkRoller(this, content, lexemes[0], source); + } + } + } + getTypeFromLexemes(lexemes) { + if (lexemes.some(({ type }) => type === "table")) { + return "table"; + } + if (lexemes.some(({ type }) => type === "section")) { + return "section"; + } + if (lexemes.some(({ type }) => type === "tag")) { + return "tag"; + } + if (lexemes.some(({ type }) => type === "link")) { + return "link"; + } + return "dice"; + } + addLexerRules() { + this.lexer.addRule(/\s+/, function () { + /* skip whitespace */ + }); + this.lexer.addRule(/[{}]+/, function () { + /* skip brackets */ + }); + this.lexer.addRule(TABLE_REGEX, function (lexeme) { + return { + type: "table", + data: lexeme, + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(SECTION_REGEX, function (lexeme) { + return { + type: "section", + data: lexeme, + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(TAG_REGEX, (lexeme) => { + var _a; + const { groups } = lexeme.match(TAG_REGEX); + let type = "tag"; + if (groups.types === "link" || + (this.data.rollLinksForTags && !((_a = groups.types) === null || _a === void 0 ? void 0 : _a.length))) { + type = "link"; + } + return { + type, + data: lexeme, + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(DICE_REGEX, function (lexeme) { + const { dice, conditional } = lexeme.match(DICE_REGEX).groups; + let conditionals = []; + if (conditional) { + let matches = conditional.matchAll(CONDITIONAL_REGEX); + if (matches) { + for (let match of matches) { + if (!match) + continue; + const { comparer, operator } = match.groups; + conditionals.push({ + comparer: Number(comparer), + operator + }); + } + } + } + return { + type: "dice", + data: dice, + original: lexeme, + conditionals + }; // symbols + }); + this.lexer.addRule(OMITTED_REGEX, (lexeme) => { + const { roll = this.data.defaultRoll, faces = this.data.defaultFace, conditional } = lexeme.match(OMITTED_REGEX).groups; + let conditionals = []; + if (conditional) { + let matches = conditional.matchAll(CONDITIONAL_REGEX); + if (matches) { + for (let match of matches) { + if (!match) + continue; + const { comparer, operator } = match.groups; + conditionals.push({ + comparer: Number(comparer), + operator + }); + } + } + } + return { + type: "dice", + data: `${roll}d${faces}`, + original: lexeme, + conditionals + }; // symbols + }); + this.lexer.addRule(MATH_REGEX, function (lexeme) { + return { + type: "math", + data: lexeme, + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(/1[Dd]S/, function (lexeme) { + var _a; + const [, dice] = (_a = lexeme.match(/1[Dd]S/)) !== null && _a !== void 0 ? _a : [, "1"]; + return { + type: "stunt", + data: dice, + original: lexeme, + conditionals: [] + }; // symbols + }); + this.lexer.addRule(/kh?(?!:l)(\d*)/, function (lexeme) { + /** keep high */ + return { + type: "kh", + data: lexeme.replace(/^\D+/g, ""), + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(/dl?(?!:h)\d*/, function (lexeme) { + /** drop low */ + return { + type: "dl", + data: lexeme.replace(/^\D+/g, ""), + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(/kl\d*/, function (lexeme) { + /** keep low */ + return { + type: "kl", + data: lexeme.replace(/^\D+/g, ""), + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(/dh\d*/, function (lexeme) { + /** drop high */ + return { + type: "dh", + data: lexeme.replace(/^\D+/g, ""), + original: lexeme, + conditionals: null + }; + }); + this.lexer.addRule(/!!(i|\d+)?(?:(!?=|=!|>=?|<=?)(-?\d+))*/, function (lexeme) { + /** explode and combine */ + let [, data = `1`] = lexeme.match(/!!(i|\d+)?(?:(!?=|=!|>=?|<=?)(-?\d+))*/), conditionals = []; + if (/(?:(!?=|=!|>=?|<=?)(-?\d+))+/.test(lexeme)) { + for (const [, operator, comparer] of lexeme.matchAll(/(?:(!?=|=!|>=?|<=?)(-?\d+))/g)) { + conditionals.push({ + operator: operator, + comparer: Number(comparer) + }); + } + } + if (/!!i/.test(lexeme)) { + data = `100`; + } + return { + type: "!!", + data: data, + original: lexeme, + conditionals: conditionals + }; + }); + this.lexer.addRule(/!(i|\d+)?(?:(!?=|=!?|>=?|<=?)(-?\d+))*/, function (lexeme) { + /** explode */ + let [, data = `1`] = lexeme.match(/!(i|\d+)?(?:(!?=|=!?|>=?|<=?)(-?\d+))*/), conditionals = []; + if (/(?:(!?=|=!|>=?|<=?)(\d+))+/.test(lexeme)) { + for (const [, operator, comparer] of lexeme.matchAll(/(?:(!?=|=!?|>=?|<=?)(-?\d+))/g)) { + conditionals.push({ + operator: operator, + comparer: Number(comparer) + }); + } + } + if (/!i/.test(lexeme)) { + data = `100`; + } + return { + type: "!", + data: data, + original: lexeme, + conditionals: conditionals + }; + }); + this.lexer.addRule(/r(i|\d+)?(?:(!?=|=!|>=?|<=?)(-?\d+))*/, function (lexeme) { + /** reroll */ + let [, data = `1`] = lexeme.match(/r(i|\d+)?(?:(!?=|=!|>=?|<=?)(-?\d+))*/), conditionals = []; + if (/(?:(!?={1,2}|>=?|<=?)(-?\d+))+/.test(lexeme)) { + for (const [, operator, comparer] of lexeme.matchAll(/(?:(!?=|=!|>=?|<=?)(-?\d+))/g)) { + conditionals.push({ + operator: operator, + comparer: Number(comparer) + }); + } + } + if (/ri/.test(lexeme)) { + data = `100`; + } + return { + type: "r", + data: data, + original: lexeme, + conditionals: conditionals + }; + }); + } + onunload() { + console.log("DiceRoller unloaded"); + } + parse(input) { + this.lexer.setInput(input); + var tokens = [], token; + while ((token = this.tryLex())) + tokens.push(token); + return this.parser.parse(tokens); + } + tryLex() { + try { + return this.lexer.lex(); + } + catch (e) { } + } +} + +module.exports = DiceRollerPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9sZXgvbGV4ZXIuanMiLCJub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4LmVzLmpzIiwibm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXJlZ3VsYXItc3ZnLWljb25zL2luZGV4LmVzLmpzIiwibm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5lcy5qcyIsInNyYy9wYXJzZXIvcGFyc2VyLnRzIiwibm9kZV9tb2R1bGVzL21vbmtleS1hcm91bmQvbWpzL2luZGV4LmpzIiwic3JjL3V0aWxzL2NvbnN0YW50cy50cyIsInNyYy91dGlscy91dGlsLnRzIiwic3JjL3JvbGxlci9yb2xsZXIudHMiLCJzcmMvcm9sbGVyL2RpY2UudHMiLCJzcmMvcm9sbGVyL3NlY3Rpb24udHMiLCJzcmMvcm9sbGVyL3RhYmxlLnRzIiwic3JjL3NldHRpbmdzL3NldHRpbmdzLnRzIiwic3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIkV2ZW50cyIsInNldEljb24iLCJURmlsZSIsIk5vdGljZSIsIk1hcmtkb3duUmVuZGVyZXIiLCJQbHVnaW5TZXR0aW5nVGFiIiwiU2V0dGluZyIsIlBsdWdpbiIsImFkZEljb24iLCJNYXJrZG93blZpZXciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF1REE7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdB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Q0FBQyxDQUFDO3dCQUNuRCxNQUFNO29CQUNWLEtBQUssSUFBSSxFQUFFO3dCQUNQLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUU3QyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7NEJBQzdCLElBQUk7NEJBQ0osWUFBWSxFQUFFLEVBQUU7eUJBQ25CLENBQUMsQ0FBQzt3QkFDSCxNQUFNO3FCQUNUO29CQUNELEtBQUssSUFBSSxFQUFFO3dCQUNQLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUU3QyxJQUFJLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO3dCQUV4QyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7NEJBQzdCLElBQUk7NEJBQ0osWUFBWSxFQUFFLEVBQUU7eUJBQ25CLENBQUMsQ0FBQzt3QkFDSCxNQUFNO3FCQUNUO29CQUNELEtBQUssSUFBSSxFQUFFO3dCQUNQLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUU3QyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7NEJBQzdCLElBQUk7NEJBQ0osWUFBWSxF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 diff --git a/.obsidian/plugins/obsidian-dice-roller/manifest.json b/.obsidian/plugins/obsidian-dice-roller/manifest.json new file mode 100644 index 00000000..851057ee --- /dev/null +++ b/.obsidian/plugins/obsidian-dice-roller/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-dice-roller", + "name": "Dice Roller", + "version": "6.4.0", + "minAppVersion": "0.12.0", + "description": "Inline dice rolling for Obsidian.md", + "author": "Jeremy Valentine", + "authorUrl": "", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-dice-roller/styles.css b/.obsidian/plugins/obsidian-dice-roller/styles.css new file mode 100644 index 00000000..d938253d --- /dev/null +++ b/.obsidian/plugins/obsidian-dice-roller/styles.css @@ -0,0 +1,143 @@ +.dice-roller { + position: relative; + display: inline-block; + cursor: pointer; + margin: 0 0.25em 0 0; +} +.dice-roller > div { + display: inline-block; +} +.dice-roller span { + font-weight: bolder; +} +.dice-roller > .dice-roller-button { + display: inline-block; + position: relative; + font-size: inherit; + margin-left: 0.25em; +} + +.dice-roller.has-embed .dice-roller-result { + width: 100%; + padding: 1rem; +} + +.dice-roller.has-embed .dice-roller-result .markdown-embed { + display: flex; + margin-top: 0.5rem; + padding-right: 0; +} + +.dice-roller.has-embed .dice-roller-button { + padding-top: 0.5rem; +} + +.dice.tooltip { + max-width: unset !important; +} +.workspace .markdown-preview-view .dice-roller.has-embed { + display: flex; + padding-right: 0.25rem; + margin: 0.25rem 0; +} +.dice-no-results { + font-style: italic; + text-align: center; +} + +.dice-roller.has-embed .internal-embed { + width: 100%; +} + +.dice-roller.has-embed + .internal-embed + *:last-child:not(svg):not(.dice-content-copy) { + margin-bottom: 15px; +} + +.dice-roller.has-embed .dice-file-name { + font-style: italic; +} + +.dice-section-result { + position: relative; +} + +.dice-content-copy { + color: var(--text-faint); + cursor: pointer; + height: fit-content; +} +.dice-content-copy.no-show { + display: none; +} + +.dice-content-copy:hover { + color: var(--text-normal); +} + +.dice-roller.has-embed .dice-section-result .dice-content-copy, +.dice-content-copy:hover { + opacity: 1; +} + +.dice-roller-result { + position: relative; +} + +.dice-roller-settings .coffee { + width: 60%; + color: var(--text-faint); + margin: 0.5rem auto; + text-align: center; +} +.dice-roller-settings .coffee img { + height: 30px; +} + +/** Settings */ +.dice-roller-setting-additional-container + > .setting-item:not(.setting-item-heading) { + border: 0px; +} + +.dice-roller-setting-additional-container { + border-bottom: 1px solid var(--background-modifier-border); + border-top: 1px solid var(--background-modifier-border); + padding: 18px 0; +} + +.dice-roller-setting-additional-container > .setting-item-heading:only-child { + padding-bottom: 18px; +} + +.dice-roller-setting-additional-container > .additional .no-formulas { + width: auto; + display: block; + text-align: center; +} +.dice-roller-setting-additional-container > .additional > .setting-item { + border-top: 0; + padding-top: 9px; +} +.dice-roller-setting-additional-container + > .additional + > .setting-item + > .setting-item-control + > *:first-child { + margin: 0 6px; +} + +.dice-roller-setting-additional-container .add-new-formula { + margin: 0 1rem; + padding: 1rem 1rem 0 1rem; + border-radius: 0.5rem; + box-shadow: 0 0 0.25rem var(--background-modifier-box-shadow); +} + +.dice-roller-setting-additional-container + .add-new-formula + .formula-data + .setting-item { + border: 0; +} diff --git a/.obsidian/plugins/obsidian-dynamic-toc/main.js b/.obsidian/plugins/obsidian-dynamic-toc/main.js new file mode 100644 index 00000000..a07e028f --- /dev/null +++ b/.obsidian/plugins/obsidian-dynamic-toc/main.js @@ -0,0 +1,2 @@ +var k=Object.create;var c=Object.defineProperty,B=Object.defineProperties,F=Object.getOwnPropertyDescriptor,V=Object.getOwnPropertyDescriptors,W=Object.getOwnPropertyNames,x=Object.getOwnPropertySymbols,I=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty,j=Object.prototype.propertyIsEnumerable;var w=(n,t,e)=>t in n?c(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,u=(n,t)=>{for(var e in t||(t={}))L.call(t,e)&&w(n,e,t[e]);if(x)for(var e of x(t))j.call(t,e)&&w(n,e,t[e]);return n},T=(n,t)=>B(n,V(t)),M=n=>c(n,"__esModule",{value:!0});var X=typeof require!="undefined"?require:n=>{throw new Error('Dynamic require of "'+n+'" is not supported')};var Y=(n,t)=>{M(n);for(var e in t)c(n,e,{get:t[e],enumerable:!0})},$=(n,t,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of W(t))!L.call(n,i)&&i!=="default"&&c(n,i,{get:()=>t[i],enumerable:!(e=F(t,i))||e.enumerable});return n},h=n=>$(M(c(n!=null?k(I(n)):{},"default",n&&n.__esModule&&"default"in n?{get:()=>n.default,enumerable:!0}:{value:n,enumerable:!0})),n);var r=(n,t,e)=>new Promise((i,s)=>{var a=o=>{try{d(e.next(o))}catch(E){s(E)}},p=o=>{try{d(e.throw(o))}catch(E){s(E)}},d=o=>o.done?i(o.value):Promise.resolve(o.value).then(a,p);d((e=e.apply(n,t)).next())});Y(exports,{default:()=>b});var R=h(require("obsidian"));var A=h(require("obsidian"));function O(n,t){let e=Object.assign({},t,n);return Object.keys(e).reduce((i,s)=>{let a=n[s],p=typeof a=="undefined"||a===null;return T(u({},i),{[s]:p?t[s]:a})},{})}function P(n,t){try{let e=(0,A.parseYaml)(n);return O(e,t)}catch(e){return t}}var v={style:"bullet",min_depth:2,max_depth:6,externalStyle:""},m="dynamic-toc",H=`.${m}`;var f=h(require("obsidian"));function K(n){return n.replace(/[[\]]/g,"")}function y(n,t){let{headings:e}=n,i=e.filter(a=>a.level>=t.min_depth&&a.level<=t.max_depth),s=i[0].level;return i.map(a=>{let p=t.style==="number"&&"1."||"-",d=new Array(Math.max(0,a.level-s)).fill(" ").join(""),o=K(a.heading);return`${d}${p} [[#${o}|${o}]]`}).join(` +`)}function N(n){let t=null;return{start:()=>{t=new Date().getTime()},stop:()=>{!t||console.log(`Dynamic TOC ${n} completed in ${new Date().getTime()-t}ms.`)}}}var _=class extends f.MarkdownRenderChild{constructor(t,e,i,s){super(s);this.app=t;this.config=e;this.filePath=i;this.container=s;this.onSettingsChangeHandler=t=>{this.render(O(this.config,t))};this.onFileChangeHandler=t=>{t.deleted||t.path!==this.filePath||this.render()}}onload(){return r(this,null,function*(){yield this.render(),this.registerEvent(this.app.metadataCache.on("dynamic-toc:settings",this.onSettingsChangeHandler)),this.registerEvent(this.app.metadataCache.on("changed",this.onFileChangeHandler))})}render(t){return r(this,null,function*(){let e=N("codeblock renderer");e.start(),this.container.empty(),this.container.classList.add(m);let i=y(this.app.metadataCache.getCache(this.filePath),t||this.config);yield f.MarkdownRenderer.renderMarkdown(i,this.container,this.filePath,this),e.stop()})}};var l=h(require("obsidian"));var g={None:"",TOC:"[TOC]",_TOC_:"__TOC__"};var D=class extends l.PluginSettingTab{constructor(t,e){super(t,e);this.plugin=e}display(){let{containerEl:t}=this;t.empty(),t.createEl("h2",{text:"Dynamic Table of Contents Settings"}),new l.Setting(t).setName("List Style").setDesc("The table indication").addDropdown(e=>e.addOptions({bullet:"Bullet",number:"Number"}).setValue(this.plugin.settings.style).onChange(i=>r(this,null,function*(){this.plugin.settings.style=i,yield this.plugin.saveSettings()}))),new l.Setting(t).setName("Minimum Header Depth").setDesc("The default minimum header depth to render").addSlider(e=>e.setLimits(1,6,1).setValue(this.plugin.settings.min_depth).setDynamicTooltip().onChange(i=>r(this,null,function*(){i>this.plugin.settings.max_depth?new l.Notice("Min Depth is higher than Max Depth"):(this.plugin.settings.min_depth=i,yield this.plugin.saveSettings())}))),new l.Setting(t).setName("Maximum Header Depth").setDesc("The default maximum header depth to render").addSlider(e=>e.setLimits(1,6,1).setValue(this.plugin.settings.max_depth).setDynamicTooltip().onChange(i=>r(this,null,function*(){ie.addOptions(Object.keys(g).reduce((i,s)=>{let a=g[s];return T(u({},i),{[s]:a})},{})).setValue(this.plugin.settings.externalStyle).onChange(i=>r(this,null,function*(){this.plugin.settings.externalStyle=i,yield this.plugin.saveSettings()})))}};var C=h(require("obsidian"));var S=class extends C.MarkdownRenderChild{constructor(t,e,i,s,a){super(s);this.app=t;this.settings=e;this.filePath=i;this.match=a;this.onSettingsChangeHandler=()=>{this.render()};this.onFileChangeHandler=t=>{t.deleted||t.path!==this.filePath||this.render()}}static findMatch(t,e){return Array.from(t.querySelectorAll("p, span, a")).find(s=>s.textContent.toLowerCase().includes(e.toLowerCase()))||null}onload(){return r(this,null,function*(){this.render(),this.registerEvent(this.app.metadataCache.on("dynamic-toc:settings",this.onSettingsChangeHandler)),this.registerEvent(this.app.metadataCache.on("changed",this.onFileChangeHandler))})}render(){return r(this,null,function*(){let t=y(this.app.metadataCache.getCache(this.filePath),this.settings),e=document.createElement("div");e.classList.add(m),yield C.MarkdownRenderer.renderMarkdown(t,e,this.filePath,this),this.match.style.display="none";let i=this.containerEl.querySelector(H);i&&this.containerEl.removeChild(i),this.match.parentNode.appendChild(e)})}};var b=class extends R.Plugin{constructor(){super(...arguments);this.onload=()=>r(this,null,function*(){yield this.loadSettings(),console.log("Dynamic TOC Loaded"),this.addSettingTab(new D(this.app,this)),this.registerMarkdownCodeBlockProcessor("toc",(t,e,i)=>{let s=P(t,this.settings);i.addChild(new _(this.app,s,i.sourcePath,e))}),this.registerMarkdownPostProcessor((t,e)=>{let i=g[this.settings.externalStyle];if(!i)return;let s=null;try{s=S.findMatch(t,i)}catch(a){console.error(a)}(s==null?void 0:s.parentNode)&&e.addChild(new S(this.app,this.settings,e.sourcePath,t,s))})});this.loadSettings=()=>r(this,null,function*(){this.settings=Object.assign({},v,yield this.loadData())});this.saveSettings=()=>r(this,null,function*(){yield this.saveData(this.settings),this.app.metadataCache.trigger("dynamic-toc:settings",this.settings)})}};0&&(module.exports={}); diff --git a/.obsidian/plugins/obsidian-dynamic-toc/manifest.json b/.obsidian/plugins/obsidian-dynamic-toc/manifest.json new file mode 100644 index 00000000..79d8e034 --- /dev/null +++ b/.obsidian/plugins/obsidian-dynamic-toc/manifest.json @@ -0,0 +1,9 @@ +{ + "id": "obsidian-dynamic-toc", + "name": "Dynamic Table of Contents", + "author": "aidurber", + "description": "An Obsidian plugin to generate Tables of Contents that stay up to date with your document outline.", + "minAppVersion": "0.11.0", + "version": "0.0.11", + "repo": "aidurber/obsidian-plugin-dynamic-toc" +} diff --git a/.obsidian/plugins/obsidian-dynamic-toc/styles.css b/.obsidian/plugins/obsidian-dynamic-toc/styles.css new file mode 100644 index 00000000..85373076 --- /dev/null +++ b/.obsidian/plugins/obsidian-dynamic-toc/styles.css @@ -0,0 +1 @@ +Not Found \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-emoji-toolbar/main.js b/.obsidian/plugins/obsidian-emoji-toolbar/main.js new file mode 100644 index 00000000..87994029 --- /dev/null +++ b/.obsidian/plugins/obsidian-emoji-toolbar/main.js @@ -0,0 +1,17354 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var orderedEmoji = [ + "😀", + "😃", + "😄", + "😁", + "😆", + "😅", + "đŸ€Ł", + "😂", + "🙂", + "🙃", + "😉", + "😊", + "😇", + "đŸ„°", + "😍", + "đŸ€©", + "😘", + "😗", + "â˜ș", + "😚", + "😙", + "đŸ„Č", + "😋", + "😛", + "😜", + "đŸ€Ș", + "😝", + "đŸ€‘", + "đŸ€—", + "đŸ€­", + "đŸ€«", + "đŸ€”", + "đŸ€", + "đŸ€š", + "😐", + "😑", + "đŸ˜¶", + "😏", + "😒", + "🙄", + "😬", + "đŸ€„", + "😌", + "😔", + "đŸ˜Ș", + "đŸ€€", + "😮", + "đŸ˜·", + "đŸ€’", + "đŸ€•", + "đŸ€ą", + "đŸ€ź", + "đŸ€§", + "đŸ„”", + "đŸ„¶", + "đŸ„Ž", + "đŸ˜”", + "đŸ€Ż", + "đŸ€ ", + "đŸ„ł", + "đŸ„ž", + "😎", + "đŸ€“", + "🧐", + "😕", + "😟", + "🙁", + "â˜č", + "😼", + "😯", + "đŸ˜Č", + "😳", + "đŸ„ș", + "😩", + "😧", + "😹", + "😰", + "đŸ˜„", + "😱", + "😭", + "đŸ˜±", + "😖", + "😣", + "😞", + "😓", + "đŸ˜©", + "đŸ˜«", + "đŸ„±", + "đŸ˜€", + "😡", + "😠", + "đŸ€Ź", + "😈", + "👿", + "💀", + "☠", + "đŸ’©", + "đŸ€Ą", + "đŸ‘č", + "đŸ‘ș", + "đŸ‘»", + "đŸ‘œ", + "đŸ‘Ÿ", + "đŸ€–", + "đŸ˜ș", + "😾", + "đŸ˜č", + "đŸ˜»", + "đŸ˜Œ", + "đŸ˜œ", + "🙀", + "😿", + "đŸ˜Ÿ", + "🙈", + "🙉", + "🙊", + "💋", + "💌", + "💘", + "💝", + "💖", + "💗", + "💓", + "💞", + "💕", + "💟", + "âŁïž", + "💔", + "❀", + "🧡", + "💛", + "💚", + "💙", + "💜", + "đŸ€Ž", + "đŸ–€", + "đŸ€", + "💯", + "💱", + "đŸ’„", + "đŸ’«", + "💩", + "💹", + "đŸ•łïž", + "💣", + "💬", + "đŸ‘ïžâ€đŸ—šïž", + "đŸ—šïž", + "đŸ—Żïž", + "💭", + "đŸ’€", + "👋", + "đŸ€š", + "đŸ–ïž", + "✋", + "🖖", + "👌", + "đŸ€Œ", + "đŸ€", + "✌", + "đŸ€ž", + "đŸ€Ÿ", + "đŸ€˜", + "đŸ€™", + "👈", + "👉", + "👆", + "🖕", + "👇", + "☝", + "👍", + "👎", + "✊", + "👊", + "đŸ€›", + "đŸ€œ", + "👏", + "🙌", + "👐", + "đŸ€Č", + "đŸ€", + "🙏", + "✍", + "💅", + "đŸ€ł", + "đŸ’Ș", + "đŸŠŸ", + "🩿", + "đŸŠ”", + "đŸŠ¶", + "👂", + "đŸŠ»", + "👃", + "🧠", + "đŸ«€", + "đŸ«", + "đŸŠ·", + "🩮", + "👀", + "đŸ‘ïž", + "👅", + "👄", + "đŸ‘¶", + "🧒", + "👩", + "👧", + "🧑", + "đŸ‘±", + "👹", + "🧔", + "👹‍🩰", + "đŸ‘šâ€đŸŠ±", + "👹‍🩳", + "👹‍đŸŠČ", + "đŸ‘©", + "đŸ‘©â€đŸŠ°", + "🧑‍🩰", + "đŸ‘©â€đŸŠ±", + "đŸ§‘â€đŸŠ±", + "đŸ‘©â€đŸŠł", + "🧑‍🩳", + "đŸ‘©â€đŸŠČ", + "🧑‍đŸŠČ", + "đŸ‘±â€â™€ïž", + "đŸ‘±â€â™‚ïž", + "🧓", + "👮", + "đŸ‘”", + "🙍", + "đŸ™â€â™‚ïž", + "đŸ™â€â™€ïž", + "🙎", + "đŸ™Žâ€â™‚ïž", + "đŸ™Žâ€â™€ïž", + "🙅", + "đŸ™…â€â™‚ïž", + "đŸ™…â€â™€ïž", + "🙆", + "đŸ™†â€â™‚ïž", + "đŸ™†â€â™€ïž", + "💁", + "đŸ’â€â™‚ïž", + "đŸ’â€â™€ïž", + "🙋", + "đŸ™‹â€â™‚ïž", + "đŸ™‹â€â™€ïž", + "🧏", + "đŸ§â€â™‚ïž", + "đŸ§â€â™€ïž", + "🙇", + "đŸ™‡â€â™‚ïž", + "đŸ™‡â€â™€ïž", + "đŸ€Š", + "đŸ€Šâ€â™‚ïž", + "đŸ€Šâ€â™€ïž", + "đŸ€·", + "đŸ€·â€â™‚ïž", + "đŸ€·â€â™€ïž", + "đŸ§‘â€âš•ïž", + "đŸ‘šâ€âš•ïž", + "đŸ‘©â€âš•ïž", + "🧑‍🎓", + "👹‍🎓", + "đŸ‘©â€đŸŽ“", + "đŸ§‘â€đŸ«", + "đŸ‘šâ€đŸ«", + "đŸ‘©â€đŸ«", + "đŸ§‘â€âš–ïž", + "đŸ‘šâ€âš–ïž", + "đŸ‘©â€âš–ïž", + "đŸ§‘â€đŸŒŸ", + "đŸ‘šâ€đŸŒŸ", + "đŸ‘©â€đŸŒŸ", + "🧑‍🍳", + "👹‍🍳", + "đŸ‘©â€đŸł", + "🧑‍🔧", + "👹‍🔧", + "đŸ‘©â€đŸ”§", + "🧑‍🏭", + "👹‍🏭", + "đŸ‘©â€đŸ­", + "đŸ§‘â€đŸ’Œ", + "đŸ‘šâ€đŸ’Œ", + "đŸ‘©â€đŸ’Œ", + "🧑‍🔬", + "👹‍🔬", + "đŸ‘©â€đŸ”Ź", + "đŸ§‘â€đŸ’»", + "đŸ‘šâ€đŸ’»", + "đŸ‘©â€đŸ’»", + "đŸ§‘â€đŸŽ€", + "đŸ‘šâ€đŸŽ€", + "đŸ‘©â€đŸŽ€", + "🧑‍🎹", + "👹‍🎹", + "đŸ‘©â€đŸŽš", + "đŸ§‘â€âœˆïž", + "đŸ‘šâ€âœˆïž", + "đŸ‘©â€âœˆïž", + "🧑‍🚀", + "👹‍🚀", + "đŸ‘©â€đŸš€", + "🧑‍🚒", + "👹‍🚒", + "đŸ‘©â€đŸš’", + "👼", + "đŸ‘źâ€â™‚ïž", + "đŸ‘źâ€â™€ïž", + "đŸ•”ïž", + "đŸ•”ïžâ€â™‚ïž", + "đŸ•”ïžâ€â™€ïž", + "💂", + "đŸ’‚â€â™‚ïž", + "đŸ’‚â€â™€ïž", + "đŸ„·", + "đŸ‘·", + "đŸ‘·â€â™‚ïž", + "đŸ‘·â€â™€ïž", + "đŸ€Ž", + "👾", + "👳", + "đŸ‘łâ€â™‚ïž", + "đŸ‘łâ€â™€ïž", + "đŸ‘Č", + "🧕", + "đŸ€”", + "đŸ€”â€â™‚ïž", + "đŸ€”â€â™€ïž", + "👰", + "đŸ‘°â€â™‚ïž", + "đŸ‘°â€â™€ïž", + "đŸ€°", + "đŸ€±", + "đŸ‘©â€đŸŒ", + "đŸ‘šâ€đŸŒ", + "đŸ§‘â€đŸŒ", + "đŸ‘Œ", + "🎅", + "đŸ€¶", + "🧑‍🎄", + "🩾", + "đŸŠžâ€â™‚ïž", + "đŸŠžâ€â™€ïž", + "đŸŠč", + "đŸŠč‍♂", + "đŸŠč‍♀", + "🧙", + "đŸ§™â€â™‚ïž", + "đŸ§™â€â™€ïž", + "🧚", + "đŸ§šâ€â™‚ïž", + "đŸ§šâ€â™€ïž", + "🧛", + "đŸ§›â€â™‚ïž", + "đŸ§›â€â™€ïž", + "🧜", + "đŸ§œâ€â™‚ïž", + "đŸ§œâ€â™€ïž", + "🧝", + "đŸ§â€â™‚ïž", + "đŸ§â€â™€ïž", + "🧞", + "đŸ§žâ€â™‚ïž", + "đŸ§žâ€â™€ïž", + "🧟", + "đŸ§Ÿâ€â™‚ïž", + "đŸ§Ÿâ€â™€ïž", + "💆", + "đŸ’†â€â™‚ïž", + "đŸ’†â€â™€ïž", + "💇", + "đŸ’‡â€â™‚ïž", + "đŸ’‡â€â™€ïž", + "đŸš¶", + "đŸš¶â€â™‚ïž", + "đŸš¶â€â™€ïž", + "🧍", + "đŸ§â€â™‚ïž", + "đŸ§â€â™€ïž", + "🧎", + "đŸ§Žâ€â™‚ïž", + "đŸ§Žâ€â™€ïž", + "🧑‍🩯", + "👹‍🩯", + "đŸ‘©â€đŸŠŻ", + "đŸ§‘â€đŸŠŒ", + "đŸ‘šâ€đŸŠŒ", + "đŸ‘©â€đŸŠŒ", + "đŸ§‘â€đŸŠœ", + "đŸ‘šâ€đŸŠœ", + "đŸ‘©â€đŸŠœ", + "🏃", + "đŸƒâ€â™‚ïž", + "đŸƒâ€â™€ïž", + "💃", + "đŸ•ș", + "đŸ•Žïž", + "👯", + "đŸ‘Żâ€â™‚ïž", + "đŸ‘Żâ€â™€ïž", + "🧖", + "đŸ§–â€â™‚ïž", + "đŸ§–â€â™€ïž", + "🧗", + "đŸ§—â€â™‚ïž", + "đŸ§—â€â™€ïž", + "đŸ€ș", + "🏇", + "⛷", + "🏂", + "đŸŒïž", + "đŸŒïžâ€â™‚ïž", + "đŸŒïžâ€â™€ïž", + "🏄", + "đŸ„â€â™‚ïž", + "đŸ„â€â™€ïž", + "🚣", + "đŸšŁâ€â™‚ïž", + "đŸšŁâ€â™€ïž", + "🏊", + "đŸŠâ€â™‚ïž", + "đŸŠâ€â™€ïž", + "â›č", + "â›č‍♂", + "â›č‍♀", + "đŸ‹ïž", + "đŸ‹ïžâ€â™‚ïž", + "đŸ‹ïžâ€â™€ïž", + "🚮", + "đŸšŽâ€â™‚ïž", + "đŸšŽâ€â™€ïž", + "đŸš”", + "đŸš”â€â™‚ïž", + "đŸš”â€â™€ïž", + "đŸ€ž", + "đŸ€žâ€â™‚ïž", + "đŸ€žâ€â™€ïž", + "đŸ€Œ", + "đŸ€Œâ€â™‚ïž", + "đŸ€Œâ€â™€ïž", + "đŸ€œ", + "đŸ€œâ€â™‚ïž", + "đŸ€œâ€â™€ïž", + "đŸ€Ÿ", + "đŸ€Ÿâ€â™‚ïž", + "đŸ€Ÿâ€â™€ïž", + "đŸ€č", + "đŸ€č‍♂", + "đŸ€č‍♀", + "🧘", + "đŸ§˜â€â™‚ïž", + "đŸ§˜â€â™€ïž", + "🛀", + "🛌", + "đŸ§‘â€đŸ€â€đŸ§‘", + "👭", + "đŸ‘«", + "👬", + "💏", + "đŸ‘©â€â€ïžâ€đŸ’‹â€đŸ‘š", + "đŸ‘šâ€â€ïžâ€đŸ’‹â€đŸ‘š", + "đŸ‘©â€â€ïžâ€đŸ’‹â€đŸ‘©", + "💑", + "đŸ‘©â€â€ïžâ€đŸ‘š", + "đŸ‘šâ€â€ïžâ€đŸ‘š", + "đŸ‘©â€â€ïžâ€đŸ‘©", + "đŸ‘Ș", + "đŸ‘šâ€đŸ‘©â€đŸ‘Š", + "đŸ‘šâ€đŸ‘©â€đŸ‘§", + "đŸ‘šâ€đŸ‘©â€đŸ‘§â€đŸ‘Š", + "đŸ‘šâ€đŸ‘©â€đŸ‘Šâ€đŸ‘Š", + "đŸ‘šâ€đŸ‘©â€đŸ‘§â€đŸ‘§", + "👹‍👹‍👩", + "👹‍👹‍👧", + "👹‍👹‍👧‍👩", + "👹‍👹‍👩‍👩", + "👹‍👹‍👧‍👧", + "đŸ‘©â€đŸ‘©â€đŸ‘Š", + "đŸ‘©â€đŸ‘©â€đŸ‘§", + "đŸ‘©â€đŸ‘©â€đŸ‘§â€đŸ‘Š", + "đŸ‘©â€đŸ‘©â€đŸ‘Šâ€đŸ‘Š", + "đŸ‘©â€đŸ‘©â€đŸ‘§â€đŸ‘§", + "👹‍👩", + "👹‍👩‍👩", + "👹‍👧", + "👹‍👧‍👩", + "👹‍👧‍👧", + "đŸ‘©â€đŸ‘Š", + "đŸ‘©â€đŸ‘Šâ€đŸ‘Š", + "đŸ‘©â€đŸ‘§", + "đŸ‘©â€đŸ‘§â€đŸ‘Š", + "đŸ‘©â€đŸ‘§â€đŸ‘§", + "đŸ—Łïž", + "đŸ‘€", + "đŸ‘„", + "đŸ«‚", + "👣", + "đŸ”", + "🐒", + "🩍", + "🩧", + "đŸ¶", + "🐕", + "🩼", + "🐕‍đŸŠș", + "đŸ©", + "đŸș", + "🩊", + "🩝", + "đŸ±", + "🐈", + "🐈‍⬛", + "🩁", + "🐯", + "🐅", + "🐆", + "🐮", + "🐎", + "🩄", + "🩓", + "🩌", + "🩬", + "🐼", + "🐂", + "🐃", + "🐄", + "đŸ·", + "🐖", + "🐗", + "đŸœ", + "🐏", + "🐑", + "🐐", + "đŸȘ", + "đŸ«", + "🩙", + "🩒", + "🐘", + "🩣", + "🩏", + "🩛", + "🐭", + "🐁", + "🐀", + "đŸč", + "🐰", + "🐇", + "đŸżïž", + "đŸŠ«", + "🩔", + "🩇", + "đŸ»", + "đŸ»â€â„ïž", + "🐹", + "đŸŒ", + "đŸŠ„", + "🩩", + "🩹", + "🩘", + "🩡", + "đŸŸ", + "🩃", + "🐔", + "🐓", + "🐣", + "đŸ€", + "đŸ„", + "🐩", + "🐧", + "đŸ•Šïž", + "🩅", + "🩆", + "🩱", + "🩉", + "đŸŠ€", + "đŸȘ¶", + "đŸŠ©", + "🩚", + "🩜", + "🐾", + "🐊", + "🐱", + "🩎", + "🐍", + "đŸČ", + "🐉", + "🩕", + "🩖", + "🐳", + "🐋", + "🐬", + "🩭", + "🐟", + "🐠", + "🐡", + "🩈", + "🐙", + "🐚", + "🐌", + "🩋", + "🐛", + "🐜", + "🐝", + "đŸȘČ", + "🐞", + "🩗", + "đŸȘł", + "đŸ•·ïž", + "đŸ•žïž", + "🩂", + "🩟", + "đŸȘ°", + "đŸȘ±", + "🩠", + "💐", + "🌾", + "💼", + "đŸ”ïž", + "đŸŒč", + "đŸ„€", + "đŸŒș", + "đŸŒ»", + "đŸŒŒ", + "đŸŒ·", + "đŸŒ±", + "đŸȘŽ", + "đŸŒČ", + "🌳", + "🌮", + "đŸŒ”", + "đŸŒŸ", + "🌿", + "☘", + "🍀", + "🍁", + "🍂", + "🍃", + "🍇", + "🍈", + "🍉", + "🍊", + "🍋", + "🍌", + "🍍", + "đŸ„­", + "🍎", + "🍏", + "🍐", + "🍑", + "🍒", + "🍓", + "đŸ«", + "đŸ„", + "🍅", + "đŸ«’", + "đŸ„„", + "đŸ„‘", + "🍆", + "đŸ„”", + "đŸ„•", + "đŸŒœ", + "đŸŒ¶ïž", + "đŸ«‘", + "đŸ„’", + "đŸ„Ź", + "đŸ„Š", + "🧄", + "🧅", + "🍄", + "đŸ„œ", + "🌰", + "🍞", + "đŸ„", + "đŸ„–", + "đŸ«“", + "đŸ„š", + "đŸ„Ż", + "đŸ„ž", + "🧇", + "🧀", + "🍖", + "🍗", + "đŸ„©", + "đŸ„“", + "🍔", + "🍟", + "🍕", + "🌭", + "đŸ„Ș", + "🌼", + "🌯", + "đŸ«”", + "đŸ„™", + "🧆", + "đŸ„š", + "🍳", + "đŸ„˜", + "đŸČ", + "đŸ«•", + "đŸ„Ł", + "đŸ„—", + "🍿", + "🧈", + "🧂", + "đŸ„«", + "đŸ±", + "🍘", + "🍙", + "🍚", + "🍛", + "🍜", + "🍝", + "🍠", + "🍱", + "🍣", + "đŸ€", + "đŸ„", + "đŸ„ź", + "🍡", + "đŸ„Ÿ", + "đŸ„ ", + "đŸ„Ą", + "🩀", + "🩞", + "🩐", + "🩑", + "đŸŠȘ", + "🍩", + "🍧", + "🍹", + "đŸ©", + "đŸȘ", + "🎂", + "🍰", + "🧁", + "đŸ„§", + "đŸ«", + "🍬", + "🍭", + "🍼", + "🍯", + "đŸŒ", + "đŸ„›", + "☕", + "đŸ«–", + "đŸ”", + "đŸ¶", + "đŸŸ", + "đŸ·", + "🍾", + "đŸč", + "đŸș", + "đŸ»", + "đŸ„‚", + "đŸ„ƒ", + "đŸ„€", + "🧋", + "🧃", + "🧉", + "🧊", + "đŸ„ą", + "đŸœïž", + "🍮", + "đŸ„„", + "đŸ”Ș", + "đŸș", + "🌍", + "🌎", + "🌏", + "🌐", + "đŸ—ș", + "đŸ—Ÿ", + "🧭", + "đŸ”ïž", + "⛰", + "🌋", + "đŸ—»", + "đŸ•ïž", + "đŸ–ïž", + "đŸœïž", + "đŸïž", + "đŸžïž", + "đŸŸïž", + "đŸ›ïž", + "đŸ—ïž", + "đŸ§±", + "đŸȘš", + "đŸȘ”", + "🛖", + "đŸ˜ïž", + "đŸšïž", + "🏠", + "🏡", + "🏱", + "🏣", + "đŸ€", + "đŸ„", + "🏩", + "🏹", + "đŸ©", + "đŸȘ", + "đŸ«", + "🏬", + "🏭", + "🏯", + "🏰", + "💒", + "đŸ—Œ", + "đŸ—œ", + "â›Ș", + "🕌", + "🛕", + "🕍", + "⛩", + "🕋", + "â›Č", + "â›ș", + "🌁", + "🌃", + "đŸ™ïž", + "🌄", + "🌅", + "🌆", + "🌇", + "🌉", + "♚", + "🎠", + "🎡", + "🎱", + "💈", + "đŸŽȘ", + "🚂", + "🚃", + "🚄", + "🚅", + "🚆", + "🚇", + "🚈", + "🚉", + "🚊", + "🚝", + "🚞", + "🚋", + "🚌", + "🚍", + "🚎", + "🚐", + "🚑", + "🚒", + "🚓", + "🚔", + "🚕", + "🚖", + "🚗", + "🚘", + "🚙", + "đŸ›»", + "🚚", + "🚛", + "🚜", + "đŸŽïž", + "đŸïž", + "đŸ›”", + "đŸŠœ", + "đŸŠŒ", + "đŸ›ș", + "đŸšČ", + "🛮", + "đŸ›č", + "đŸ›Œ", + "🚏", + "đŸ›Łïž", + "đŸ›€ïž", + "đŸ›ąïž", + "⛜", + "🚹", + "đŸš„", + "🚩", + "🛑", + "🚧", + "⚓", + "â›”", + "đŸ›¶", + "đŸš€", + "đŸ›łïž", + "⛎", + "đŸ›„ïž", + "🚱", + "✈", + "đŸ›©ïž", + "đŸ›«", + "🛬", + "đŸȘ‚", + "đŸ’ș", + "🚁", + "🚟", + "🚠", + "🚡", + "đŸ›°ïž", + "🚀", + "🛾", + "đŸ›Žïž", + "🧳", + "⌛", + "⏳", + "⌚", + "⏰", + "⏱", + "âČ", + "đŸ•°ïž", + "🕛", + "🕧", + "🕐", + "🕜", + "🕑", + "🕝", + "🕒", + "🕞", + "🕓", + "🕟", + "🕔", + "🕠", + "🕕", + "🕡", + "🕖", + "🕱", + "🕗", + "🕣", + "🕘", + "đŸ•€", + "🕙", + "đŸ•„", + "🕚", + "🕩", + "🌑", + "🌒", + "🌓", + "🌔", + "🌕", + "🌖", + "🌗", + "🌘", + "🌙", + "🌚", + "🌛", + "🌜", + "đŸŒĄïž", + "☀", + "🌝", + "🌞", + "đŸȘ", + "⭐", + "🌟", + "🌠", + "🌌", + "☁", + "⛅", + "⛈", + "đŸŒ€ïž", + "đŸŒ„ïž", + "đŸŒŠïž", + "đŸŒ§ïž", + "đŸŒšïž", + "đŸŒ©ïž", + "đŸŒȘ", + "đŸŒ«ïž", + "đŸŒŹïž", + "🌀", + "🌈", + "🌂", + "☂", + "☔", + "⛱", + "⚡", + "❄", + "☃", + "⛄", + "☄", + "đŸ”„", + "💧", + "🌊", + "🎃", + "🎄", + "🎆", + "🎇", + "🧹", + "✹", + "🎈", + "🎉", + "🎊", + "🎋", + "🎍", + "🎎", + "🎏", + "🎐", + "🎑", + "🧧", + "🎀", + "🎁", + "đŸŽ—ïž", + "đŸŽŸïž", + "đŸŽ«", + "đŸŽ–ïž", + "🏆", + "🏅", + "đŸ„‡", + "đŸ„ˆ", + "đŸ„‰", + "âšœ", + "⚟", + "đŸ„Ž", + "🏀", + "🏐", + "🏈", + "🏉", + "đŸŽŸ", + "đŸ„", + "🎳", + "🏏", + "🏑", + "🏒", + "đŸ„", + "🏓", + "🏾", + "đŸ„Š", + "đŸ„‹", + "đŸ„…", + "⛳", + "⛞", + "🎣", + "đŸ€ż", + "đŸŽœ", + "🎿", + "đŸ›·", + "đŸ„Œ", + "🎯", + "đŸȘ€", + "đŸȘ", + "đŸŽ±", + "🔼", + "đŸȘ„", + "🧿", + "🎼", + "đŸ•č", + "🎰", + "đŸŽČ", + "đŸ§©", + "🧾", + "đŸȘ…", + "đŸȘ†", + "♠", + "♄", + "♊", + "â™Łïž", + "♟", + "🃏", + "🀄", + "🎮", + "🎭", + "đŸ–Œïž", + "🎹", + "đŸ§”", + "đŸȘĄ", + "đŸ§¶", + "đŸȘą", + "👓", + "đŸ•¶ïž", + "đŸ„œ", + "đŸ„Œ", + "đŸŠș", + "👔", + "👕", + "👖", + "🧣", + "đŸ§€", + "đŸ§„", + "🧩", + "👗", + "👘", + "đŸ„»", + "đŸ©±", + "đŸ©Č", + "đŸ©ł", + "👙", + "👚", + "👛", + "👜", + "👝", + "đŸ›ïž", + "🎒", + "đŸ©Ž", + "👞", + "👟", + "đŸ„Ÿ", + "đŸ„ż", + "👠", + "👡", + "đŸ©°", + "👱", + "👑", + "👒", + "đŸŽ©", + "🎓", + "🧱", + "đŸȘ–", + "⛑", + "📿", + "💄", + "💍", + "💎", + "🔇", + "🔈", + "🔉", + "🔊", + "📱", + "📣", + "📯", + "🔔", + "🔕", + "đŸŽŒ", + "đŸŽ”", + "đŸŽ¶", + "đŸŽ™ïž", + "đŸŽšïž", + "đŸŽ›ïž", + "đŸŽ€", + "🎧", + "đŸ“»", + "đŸŽ·", + "đŸȘ—", + "🎾", + "đŸŽč", + "đŸŽș", + "đŸŽ»", + "đŸȘ•", + "đŸ„", + "đŸȘ˜", + "đŸ“±", + "đŸ“Č", + "☎", + "📞", + "📟", + "📠", + "🔋", + "🔌", + "đŸ’»", + "đŸ–„ïž", + "đŸ–šïž", + "⌚", + "đŸ–±ïž", + "đŸ–Č", + "đŸ’œ", + "đŸ’Ÿ", + "💿", + "📀", + "🧼", + "đŸŽ„", + "đŸŽžïž", + "đŸ“œïž", + "🎬", + "đŸ“ș", + "đŸ“·", + "📾", + "đŸ“č", + "đŸ“Œ", + "🔍", + "🔎", + "đŸ•Żïž", + "💡", + "🔩", + "🏼", + "đŸȘ”", + "📔", + "📕", + "📖", + "📗", + "📘", + "📙", + "📚", + "📓", + "📒", + "📃", + "📜", + "📄", + "📰", + "đŸ—žïž", + "📑", + "🔖", + "đŸ·ïž", + "💰", + "đŸȘ™", + "💮", + "đŸ’”", + "đŸ’¶", + "đŸ’·", + "💾", + "💳", + "đŸ§Ÿ", + "đŸ’č", + "✉", + "📧", + "📹", + "đŸ“©", + "đŸ“€", + "đŸ“„", + "📩", + "đŸ“«", + "đŸ“Ș", + "📬", + "📭", + "📼", + "đŸ—łïž", + "✏", + "✒", + "đŸ–‹ïž", + "đŸ–Šïž", + "đŸ–Œïž", + "đŸ–ïž", + "📝", + "đŸ’Œ", + "📁", + "📂", + "đŸ—‚ïž", + "📅", + "📆", + "đŸ—’ïž", + "đŸ—“ïž", + "📇", + "📈", + "📉", + "📊", + "📋", + "📌", + "📍", + "📎", + "đŸ–‡ïž", + "📏", + "📐", + "✂", + "đŸ—ƒïž", + "đŸ—„ïž", + "đŸ—‘ïž", + "🔒", + "🔓", + "🔏", + "🔐", + "🔑", + "đŸ—ïž", + "🔹", + "đŸȘ“", + "⛏", + "⚒", + "đŸ› ïž", + "đŸ—Ąïž", + "⚔", + "đŸ”«", + "đŸȘƒ", + "đŸč", + "đŸ›Ąïž", + "đŸȘš", + "🔧", + "đŸȘ›", + "đŸ”©", + "⚙", + "đŸ—œïž", + "⚖", + "🩯", + "🔗", + "⛓", + "đŸȘ", + "🧰", + "đŸ§Č", + "đŸȘœ", + "⚗", + "đŸ§Ș", + "đŸ§«", + "🧬", + "🔬", + "🔭", + "📡", + "💉", + "đŸ©ž", + "💊", + "đŸ©č", + "đŸ©ș", + "đŸšȘ", + "🛗", + "đŸȘž", + "đŸȘŸ", + "đŸ›ïž", + "đŸ›‹ïž", + "đŸȘ‘", + "đŸšœ", + "đŸȘ ", + "🚿", + "🛁", + "đŸȘ€", + "đŸȘ’", + "🧮", + "đŸ§·", + "đŸ§č", + "đŸ§ș", + "đŸ§»", + "đŸȘŁ", + "đŸ§Œ", + "đŸȘ„", + "đŸ§œ", + "🧯", + "🛒", + "🚬", + "⚰", + "đŸȘŠ", + "⚱", + "🗿", + "đŸȘ§", + "🏧", + "🚼", + "🚰", + "♿", + "đŸšč", + "đŸšș", + "đŸš»", + "đŸšŒ", + "đŸšŸ", + "🛂", + "🛃", + "🛄", + "🛅", + "⚠", + "🚾", + "⛔", + "đŸš«", + "🚳", + "🚭", + "🚯", + "đŸš±", + "đŸš·", + "đŸ“”", + "🔞", + "â˜ąïž", + "â˜Łïž", + "âŹ†ïž", + "↗", + "âžĄïž", + "↘", + "âŹ‡ïž", + "↙", + "âŹ…ïž", + "↖", + "↕", + "↔", + "↩", + "â†Ș", + "‎", + "—", + "🔃", + "🔄", + "🔙", + "🔚", + "🔛", + "🔜", + "🔝", + "🛐", + "⚛", + "đŸ•‰ïž", + "âœĄïž", + "☞", + "â˜Żïž", + "✝", + "☊", + "â˜Ș", + "â˜źïž", + "🕎", + "🔯", + "♈", + "♉", + "♊", + "♋", + "♌", + "♍", + "♎", + "♏", + "♐", + "♑", + "♒", + "♓", + "⛎", + "🔀", + "🔁", + "🔂", + "▶", + "⏩", + "⏭", + "âŻïž", + "◀", + "âȘ", + "âźïž", + "đŸ”Œ", + "⏫", + "đŸ”œ", + "⏬", + "⏞", + "âč", + "âș", + "⏏", + "🎩", + "🔅", + "🔆", + "đŸ“¶", + "📳", + "📮", + "♀", + "♂", + "⚧", + "✖", + "➕", + "➖", + "➗", + "♟", + "‌", + "⁉", + "❓", + "❔", + "❕", + "❗", + "ă€°ïž", + "đŸ’±", + "đŸ’Č", + "⚕", + "♻", + "⚜", + "đŸ”±", + "📛", + "🔰", + "⭕", + "✅", + "☑", + "✔", + "❌", + "❎", + "➰", + "➿", + "ă€œïž", + "âœłïž", + "✎", + "❇", + "©", + "Âźïž", + "â„ąïž", + "#ïžâƒŁ", + "*ïžâƒŁ", + "0ïžâƒŁ", + "1ïžâƒŁ", + "2ïžâƒŁ", + "3ïžâƒŁ", + "4ïžâƒŁ", + "5ïžâƒŁ", + "6ïžâƒŁ", + "7ïžâƒŁ", + "8ïžâƒŁ", + "9ïžâƒŁ", + "🔟", + "🔠", + "🔡", + "🔱", + "🔣", + "đŸ”€", + "đŸ…°ïž", + "🆎", + "đŸ…±ïž", + "🆑", + "🆒", + "🆓", + "â„č", + "🆔", + "Ⓜ", + "🆕", + "🆖", + "đŸ…Ÿïž", + "🆗", + "đŸ…żïž", + "🆘", + "🆙", + "🆚", + "🈁", + "đŸˆ‚ïž", + "đŸˆ·ïž", + "đŸˆ¶", + "🈯", + "🉐", + "đŸˆč", + "🈚", + "đŸˆČ", + "🉑", + "🈾", + "🈮", + "🈳", + "ăŠ—ïž", + "ăŠ™ïž", + "đŸˆș", + "đŸˆ”", + "🔮", + "🟠", + "🟡", + "🟱", + "đŸ””", + "🟣", + "đŸŸ€", + "⚫", + "âšȘ", + "đŸŸ„", + "🟧", + "🟹", + "đŸŸ©", + "🟩", + "đŸŸȘ", + "đŸŸ«", + "⬛", + "⬜", + "◌", + "◻", + "â—Ÿ", + "â—œ", + "â–Ș", + "▫", + "đŸ”¶", + "đŸ”·", + "🔾", + "đŸ”č", + "đŸ”ș", + "đŸ”»", + "💠", + "🔘", + "🔳", + "đŸ”Č", + "🏁", + "đŸš©", + "🎌", + "🏮", + "đŸłïž", + "đŸłïžâ€đŸŒˆ", + "đŸłïžâ€âš§ïž", + "đŸŽâ€â˜ ïž", + "🇩🇹", + "đŸ‡ŠđŸ‡©", + "🇩đŸ‡Ș", + "đŸ‡ŠđŸ‡«", + "🇩🇬", + "🇩🇼", + "đŸ‡ŠđŸ‡±", + "🇩đŸ‡Č", + "🇩🇮", + "đŸ‡ŠđŸ‡¶", + "đŸ‡ŠđŸ‡·", + "🇩🇾", + "🇩đŸ‡č", + "🇩đŸ‡ș", + "đŸ‡ŠđŸ‡Œ", + "đŸ‡ŠđŸ‡œ", + "🇩🇿", + "🇧🇩", + "🇧🇧", + "đŸ‡§đŸ‡©", + "🇧đŸ‡Ș", + "đŸ‡§đŸ‡«", + "🇧🇬", + "🇧🇭", + "🇧🇼", + "🇧🇯", + "đŸ‡§đŸ‡±", + "🇧đŸ‡Č", + "🇧🇳", + "🇧🇮", + "đŸ‡§đŸ‡¶", + "đŸ‡§đŸ‡·", + "🇧🇾", + "🇧đŸ‡č", + "đŸ‡§đŸ‡»", + "đŸ‡§đŸ‡Œ", + "đŸ‡§đŸ‡Ÿ", + "🇧🇿", + "🇹🇩", + "🇹🇹", + "đŸ‡šđŸ‡©", + "đŸ‡šđŸ‡«", + "🇹🇬", + "🇹🇭", + "🇹🇼", + "🇹🇰", + "đŸ‡šđŸ‡±", + "🇹đŸ‡Č", + "🇹🇳", + "🇹🇮", + "đŸ‡šđŸ‡”", + "đŸ‡šđŸ‡·", + "🇹đŸ‡ș", + "đŸ‡šđŸ‡»", + "đŸ‡šđŸ‡Œ", + "đŸ‡šđŸ‡œ", + "đŸ‡šđŸ‡Ÿ", + "🇹🇿", + "đŸ‡©đŸ‡Ș", + "đŸ‡©đŸ‡Ź", + "đŸ‡©đŸ‡Ż", + "đŸ‡©đŸ‡°", + "đŸ‡©đŸ‡Č", + "đŸ‡©đŸ‡Ž", + "đŸ‡©đŸ‡ż", + "đŸ‡Ș🇩", + "đŸ‡Ș🇹", + "đŸ‡ȘđŸ‡Ș", + "đŸ‡Ș🇬", + "đŸ‡Ș🇭", + "đŸ‡ȘđŸ‡·", + "đŸ‡Ș🇾", + "đŸ‡ȘđŸ‡č", + "đŸ‡ȘđŸ‡ș", + "đŸ‡«đŸ‡ź", + "đŸ‡«đŸ‡Ż", + "đŸ‡«đŸ‡°", + "đŸ‡«đŸ‡Č", + "đŸ‡«đŸ‡Ž", + "đŸ‡«đŸ‡·", + "🇬🇩", + "🇬🇧", + "đŸ‡ŹđŸ‡©", + "🇬đŸ‡Ș", + "đŸ‡ŹđŸ‡«", + "🇬🇬", + "🇬🇭", + "🇬🇼", + "đŸ‡ŹđŸ‡±", + "🇬đŸ‡Č", + "🇬🇳", + "đŸ‡ŹđŸ‡”", + "đŸ‡ŹđŸ‡¶", + "đŸ‡ŹđŸ‡·", + "🇬🇾", + "🇬đŸ‡č", + "🇬đŸ‡ș", + "đŸ‡ŹđŸ‡Œ", + "đŸ‡ŹđŸ‡Ÿ", + "🇭🇰", + "🇭đŸ‡Č", + "🇭🇳", + "đŸ‡­đŸ‡·", + "🇭đŸ‡č", + "🇭đŸ‡ș", + "🇼🇹", + "đŸ‡źđŸ‡©", + "🇼đŸ‡Ș", + "đŸ‡źđŸ‡±", + "🇼đŸ‡Č", + "🇼🇳", + "🇼🇮", + "đŸ‡źđŸ‡¶", + "đŸ‡źđŸ‡·", + "🇼🇾", + "🇼đŸ‡č", + "🇯đŸ‡Ș", + "🇯đŸ‡Č", + "🇯🇮", + "đŸ‡ŻđŸ‡”", + "🇰đŸ‡Ș", + "🇰🇬", + "🇰🇭", + "🇰🇼", + "🇰đŸ‡Č", + "🇰🇳", + "đŸ‡°đŸ‡”", + "đŸ‡°đŸ‡·", + "đŸ‡°đŸ‡Œ", + "đŸ‡°đŸ‡Ÿ", + "🇰🇿", + "đŸ‡±đŸ‡Š", + "đŸ‡±đŸ‡§", + "đŸ‡±đŸ‡š", + "đŸ‡±đŸ‡ź", + "đŸ‡±đŸ‡°", + "đŸ‡±đŸ‡·", + "đŸ‡±đŸ‡ž", + "đŸ‡±đŸ‡č", + "đŸ‡±đŸ‡ș", + "đŸ‡±đŸ‡»", + "đŸ‡±đŸ‡Ÿ", + "đŸ‡Č🇩", + "đŸ‡Č🇹", + "đŸ‡ČđŸ‡©", + "đŸ‡ČđŸ‡Ș", + "đŸ‡ČđŸ‡«", + "đŸ‡Č🇬", + "đŸ‡Č🇭", + "đŸ‡Č🇰", + "đŸ‡ČđŸ‡±", + "đŸ‡ČđŸ‡Č", + "đŸ‡Č🇳", + "đŸ‡Č🇮", + "đŸ‡ČđŸ‡”", + "đŸ‡ČđŸ‡¶", + "đŸ‡ČđŸ‡·", + "đŸ‡Č🇾", + "đŸ‡ČđŸ‡č", + "đŸ‡ČđŸ‡ș", + "đŸ‡ČđŸ‡»", + "đŸ‡ČđŸ‡Œ", + "đŸ‡ČđŸ‡œ", + "đŸ‡ČđŸ‡Ÿ", + "đŸ‡Č🇿", + "🇳🇩", + "🇳🇹", + "🇳đŸ‡Ș", + "đŸ‡łđŸ‡«", + "🇳🇬", + "🇳🇼", + "đŸ‡łđŸ‡±", + "🇳🇮", + "đŸ‡łđŸ‡”", + "đŸ‡łđŸ‡·", + "🇳đŸ‡ș", + "🇳🇿", + "🇮đŸ‡Č", + "đŸ‡”đŸ‡Š", + "đŸ‡”đŸ‡Ș", + "đŸ‡”đŸ‡«", + "đŸ‡”đŸ‡Ź", + "đŸ‡”đŸ‡­", + "đŸ‡”đŸ‡°", + "đŸ‡”đŸ‡±", + "đŸ‡”đŸ‡Č", + "đŸ‡”đŸ‡ł", + "đŸ‡”đŸ‡·", + "đŸ‡”đŸ‡ž", + "đŸ‡”đŸ‡č", + "đŸ‡”đŸ‡Œ", + "đŸ‡”đŸ‡Ÿ", + "đŸ‡¶đŸ‡Š", + "đŸ‡·đŸ‡Ș", + "đŸ‡·đŸ‡Ž", + "đŸ‡·đŸ‡ž", + "đŸ‡·đŸ‡ș", + "đŸ‡·đŸ‡Œ", + "🇾🇩", + "🇾🇧", + "🇾🇹", + "đŸ‡žđŸ‡©", + "🇾đŸ‡Ș", + "🇾🇬", + "🇾🇭", + "🇾🇼", + "🇾🇯", + "🇾🇰", + "đŸ‡žđŸ‡±", + "🇾đŸ‡Č", + "🇾🇳", + "🇾🇮", + "đŸ‡žđŸ‡·", + "🇾🇾", + "🇾đŸ‡č", + "đŸ‡žđŸ‡»", + "đŸ‡žđŸ‡œ", + "đŸ‡žđŸ‡Ÿ", + "🇾🇿", + "đŸ‡č🇩", + "đŸ‡č🇹", + "đŸ‡čđŸ‡©", + "đŸ‡čđŸ‡«", + "đŸ‡č🇬", + "đŸ‡č🇭", + "đŸ‡č🇯", + "đŸ‡č🇰", + "đŸ‡čđŸ‡±", + "đŸ‡čđŸ‡Č", + "đŸ‡č🇳", + "đŸ‡č🇮", + "đŸ‡čđŸ‡·", + "đŸ‡čđŸ‡č", + "đŸ‡čđŸ‡»", + "đŸ‡čđŸ‡Œ", + "đŸ‡č🇿", + "đŸ‡ș🇩", + "đŸ‡ș🇬", + "đŸ‡șđŸ‡Č", + "đŸ‡ș🇳", + "đŸ‡ș🇾", + "đŸ‡șđŸ‡Ÿ", + "đŸ‡ș🇿", + "đŸ‡»đŸ‡Š", + "đŸ‡»đŸ‡š", + "đŸ‡»đŸ‡Ș", + "đŸ‡»đŸ‡Ź", + "đŸ‡»đŸ‡ź", + "đŸ‡»đŸ‡ł", + "đŸ‡»đŸ‡ș", + "đŸ‡ŒđŸ‡«", + "đŸ‡ŒđŸ‡ž", + "đŸ‡œđŸ‡°", + "đŸ‡ŸđŸ‡Ș", + "đŸ‡ŸđŸ‡č", + "🇿🇩", + "🇿đŸ‡Č", + "đŸ‡żđŸ‡Œ", + "đŸŽó §ó ąó „ó źó §ó ż", + "🏮󠁧󠁱󠁳󠁣󠁮󠁿", + "đŸŽó §ó ąó ·ó Źó łó ż" +]; + +var emojiNames = { + "😀": { + name: "grinning face", + slug: "grinning_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😃": { + name: "grinning face with big eyes", + slug: "grinning_face_with_big_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😄": { + name: "grinning face with smiling eyes", + slug: "grinning_face_with_smiling_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😁": { + name: "beaming face with smiling eyes", + slug: "beaming_face_with_smiling_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😆": { + name: "grinning squinting face", + slug: "grinning_squinting_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😅": { + name: "grinning face with sweat", + slug: "grinning_face_with_sweat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€Ł": { + name: "rolling on the floor laughing", + slug: "rolling_on_the_floor_laughing", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "😂": { + name: "face with tears of joy", + slug: "face_with_tears_of_joy", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🙂": { + name: "slightly smiling face", + slug: "slightly_smiling_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🙃": { + name: "upside-down face", + slug: "upside_down_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😉": { + name: "winking face", + slug: "winking_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😊": { + name: "smiling face with smiling eyes", + slug: "smiling_face_with_smiling_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😇": { + name: "smiling face with halo", + slug: "smiling_face_with_halo", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„°": { + name: "smiling face with hearts", + slug: "smiling_face_with_hearts", + group: "Smileys & Emotion", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "😍": { + name: "smiling face with heart-eyes", + slug: "smiling_face_with_heart_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€©": { + name: "star-struck", + slug: "star_struck", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "😘": { + name: "face blowing a kiss", + slug: "face_blowing_a_kiss", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😗": { + name: "kissing face", + slug: "kissing_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "â˜ș": { + name: "smiling face", + slug: "smiling_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😚": { + name: "kissing face with closed eyes", + slug: "kissing_face_with_closed_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😙": { + name: "kissing face with smiling eyes", + slug: "kissing_face_with_smiling_eyes", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„Č": { + name: "smiling face with tear", + slug: "smiling_face_with_tear", + group: "Smileys & Emotion", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "😋": { + name: "face savoring food", + slug: "face_savoring_food", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😛": { + name: "face with tongue", + slug: "face_with_tongue", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😜": { + name: "winking face with tongue", + slug: "winking_face_with_tongue", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€Ș": { + name: "zany face", + slug: "zany_face", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "😝": { + name: "squinting face with tongue", + slug: "squinting_face_with_tongue", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€‘": { + name: "money-mouth face", + slug: "money_mouth_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€—": { + name: "hugging face", + slug: "hugging_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€­": { + name: "face with hand over mouth", + slug: "face_with_hand_over_mouth", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ€«": { + name: "shushing face", + slug: "shushing_face", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ€”": { + name: "thinking face", + slug: "thinking_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€": { + name: "zipper-mouth face", + slug: "zipper_mouth_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€š": { + name: "face with raised eyebrow", + slug: "face_with_raised_eyebrow", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "😐": { + name: "neutral face", + slug: "neutral_face", + group: "Smileys & Emotion", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "😑": { + name: "expressionless face", + slug: "expressionless_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ˜¶": { + name: "face without mouth", + slug: "face_without_mouth", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😏": { + name: "smirking face", + slug: "smirking_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😒": { + name: "unamused face", + slug: "unamused_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🙄": { + name: "face with rolling eyes", + slug: "face_with_rolling_eyes", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😬": { + name: "grimacing face", + slug: "grimacing_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€„": { + name: "lying face", + slug: "lying_face", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "😌": { + name: "relieved face", + slug: "relieved_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😔": { + name: "pensive face", + slug: "pensive_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜Ș": { + name: "sleepy face", + slug: "sleepy_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€€": { + name: "drooling face", + slug: "drooling_face", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "😮": { + name: "sleeping face", + slug: "sleeping_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ˜·": { + name: "face with medical mask", + slug: "face_with_medical_mask", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€’": { + name: "face with thermometer", + slug: "face_with_thermometer", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€•": { + name: "face with head-bandage", + slug: "face_with_head_bandage", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€ą": { + name: "nauseated face", + slug: "nauseated_face", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ€ź": { + name: "face vomiting", + slug: "face_vomiting", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ€§": { + name: "sneezing face", + slug: "sneezing_face", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„”": { + name: "hot face", + slug: "hot_face", + group: "Smileys & Emotion", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„¶": { + name: "cold face", + slug: "cold_face", + group: "Smileys & Emotion", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„Ž": { + name: "woozy face", + slug: "woozy_face", + group: "Smileys & Emotion", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ˜”": { + name: "knocked-out face", + slug: "knocked_out_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€Ż": { + name: "exploding head", + slug: "exploding_head", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ€ ": { + name: "cowboy hat face", + slug: "cowboy_hat_face", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„ł": { + name: "partying face", + slug: "partying_face", + group: "Smileys & Emotion", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„ž": { + name: "disguised face", + slug: "disguised_face", + group: "Smileys & Emotion", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "😎": { + name: "smiling face with sunglasses", + slug: "smiling_face_with_sunglasses", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ€“": { + name: "nerd face", + slug: "nerd_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🧐": { + name: "face with monocle", + slug: "face_with_monocle", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "😕": { + name: "confused face", + slug: "confused_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😟": { + name: "worried face", + slug: "worried_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🙁": { + name: "slightly frowning face", + slug: "slightly_frowning_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "â˜č": { + name: "frowning face", + slug: "frowning_face", + group: "Smileys & Emotion", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "😼": { + name: "face with open mouth", + slug: "face_with_open_mouth", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😯": { + name: "hushed face", + slug: "hushed_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ˜Č": { + name: "astonished face", + slug: "astonished_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😳": { + name: "flushed face", + slug: "flushed_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„ș": { + name: "pleading face", + slug: "pleading_face", + group: "Smileys & Emotion", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "😩": { + name: "frowning face with open mouth", + slug: "frowning_face_with_open_mouth", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😧": { + name: "anguished face", + slug: "anguished_face", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "😹": { + name: "fearful face", + slug: "fearful_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😰": { + name: "anxious face with sweat", + slug: "anxious_face_with_sweat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜„": { + name: "sad but relieved face", + slug: "sad_but_relieved_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😱": { + name: "crying face", + slug: "crying_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😭": { + name: "loudly crying face", + slug: "loudly_crying_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜±": { + name: "face screaming in fear", + slug: "face_screaming_in_fear", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😖": { + name: "confounded face", + slug: "confounded_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😣": { + name: "persevering face", + slug: "persevering_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😞": { + name: "disappointed face", + slug: "disappointed_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😓": { + name: "downcast face with sweat", + slug: "downcast_face_with_sweat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜©": { + name: "weary face", + slug: "weary_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜«": { + name: "tired face", + slug: "tired_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„±": { + name: "yawning face", + slug: "yawning_face", + group: "Smileys & Emotion", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ˜€": { + name: "face with steam from nose", + slug: "face_with_steam_from_nose", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😡": { + name: "pouting face", + slug: "pouting_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😠": { + name: "angry face", + slug: "angry_face", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€Ź": { + name: "face with symbols on mouth", + slug: "face_with_symbols_on_mouth", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "😈": { + name: "smiling face with horns", + slug: "smiling_face_with_horns", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "👿": { + name: "angry face with horns", + slug: "angry_face_with_horns", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💀": { + name: "skull", + slug: "skull", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☠": { + name: "skull and crossbones", + slug: "skull_and_crossbones", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ’©": { + name: "pile of poo", + slug: "pile_of_poo", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€Ą": { + name: "clown face", + slug: "clown_face", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ‘č": { + name: "ogre", + slug: "ogre", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘ș": { + name: "goblin", + slug: "goblin", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘»": { + name: "ghost", + slug: "ghost", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘œ": { + name: "alien", + slug: "alien", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘Ÿ": { + name: "alien monster", + slug: "alien_monster", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€–": { + name: "robot", + slug: "robot", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ˜ș": { + name: "grinning cat", + slug: "grinning_cat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😾": { + name: "grinning cat with smiling eyes", + slug: "grinning_cat_with_smiling_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜č": { + name: "cat with tears of joy", + slug: "cat_with_tears_of_joy", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜»": { + name: "smiling cat with heart-eyes", + slug: "smiling_cat_with_heart_eyes", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜Œ": { + name: "cat with wry smile", + slug: "cat_with_wry_smile", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜œ": { + name: "kissing cat", + slug: "kissing_cat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🙀": { + name: "weary cat", + slug: "weary_cat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "😿": { + name: "crying cat", + slug: "crying_cat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ˜Ÿ": { + name: "pouting cat", + slug: "pouting_cat", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🙈": { + name: "see-no-evil monkey", + slug: "see_no_evil_monkey", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🙉": { + name: "hear-no-evil monkey", + slug: "hear_no_evil_monkey", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🙊": { + name: "speak-no-evil monkey", + slug: "speak_no_evil_monkey", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💋": { + name: "kiss mark", + slug: "kiss_mark", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💌": { + name: "love letter", + slug: "love_letter", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💘": { + name: "heart with arrow", + slug: "heart_with_arrow", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💝": { + name: "heart with ribbon", + slug: "heart_with_ribbon", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💖": { + name: "sparkling heart", + slug: "sparkling_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💗": { + name: "growing heart", + slug: "growing_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💓": { + name: "beating heart", + slug: "beating_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💞": { + name: "revolving hearts", + slug: "revolving_hearts", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💕": { + name: "two hearts", + slug: "two_hearts", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💟": { + name: "heart decoration", + slug: "heart_decoration", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âŁïž": { + name: "heart exclamation", + slug: "heart_exclamation", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "💔": { + name: "broken heart", + slug: "broken_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❀": { + name: "red heart", + slug: "red_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧡": { + name: "orange heart", + slug: "orange_heart", + group: "Smileys & Emotion", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "💛": { + name: "yellow heart", + slug: "yellow_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💚": { + name: "green heart", + slug: "green_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💙": { + name: "blue heart", + slug: "blue_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💜": { + name: "purple heart", + slug: "purple_heart", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€Ž": { + name: "brown heart", + slug: "brown_heart", + group: "Smileys & Emotion", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ–€": { + name: "black heart", + slug: "black_heart", + group: "Smileys & Emotion", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ€": { + name: "white heart", + slug: "white_heart", + group: "Smileys & Emotion", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "💯": { + name: "hundred points", + slug: "hundred_points", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💱": { + name: "anger symbol", + slug: "anger_symbol", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’„": { + name: "collision", + slug: "collision", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’«": { + name: "dizzy", + slug: "dizzy", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💩": { + name: "sweat droplets", + slug: "sweat_droplets", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💹": { + name: "dashing away", + slug: "dashing_away", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•łïž": { + name: "hole", + slug: "hole", + group: "Smileys & Emotion", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "💣": { + name: "bomb", + slug: "bomb", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💬": { + name: "speech balloon", + slug: "speech_balloon", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘ïžâ€đŸ—šïž": { + name: "eye in speech bubble", + slug: "eye_in_speech_bubble", + group: "Smileys & Emotion", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ—šïž": { + name: "left speech bubble", + slug: "left_speech_bubble", + group: "Smileys & Emotion", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ—Żïž": { + name: "right anger bubble", + slug: "right_anger_bubble", + group: "Smileys & Emotion", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "💭": { + name: "thought balloon", + slug: "thought_balloon", + group: "Smileys & Emotion", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ’€": { + name: "zzz", + slug: "zzz", + group: "Smileys & Emotion", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👋": { + name: "waving hand", + slug: "waving_hand", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€š": { + name: "raised back of hand", + slug: "raised_back_of_hand", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ–ïž": { + name: "hand with fingers splayed", + slug: "hand_with_fingers_splayed", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "✋": { + name: "raised hand", + slug: "raised_hand", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🖖": { + name: "vulcan salute", + slug: "vulcan_salute", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👌": { + name: "OK hand", + slug: "ok_hand", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€Œ": { + name: "pinched fingers", + slug: "pinched_fingers", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ€": { + name: "pinching hand", + slug: "pinching_hand", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "✌": { + name: "victory hand", + slug: "victory_hand", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€ž": { + name: "crossed fingers", + slug: "crossed_fingers", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€Ÿ": { + name: "love-you gesture", + slug: "love_you_gesture", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ€˜": { + name: "sign of the horns", + slug: "sign_of_the_horns", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€™": { + name: "call me hand", + slug: "call_me_hand", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "👈": { + name: "backhand index pointing left", + slug: "backhand_index_pointing_left", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👉": { + name: "backhand index pointing right", + slug: "backhand_index_pointing_right", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👆": { + name: "backhand index pointing up", + slug: "backhand_index_pointing_up", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🖕": { + name: "middle finger", + slug: "middle_finger", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👇": { + name: "backhand index pointing down", + slug: "backhand_index_pointing_down", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "☝": { + name: "index pointing up", + slug: "index_pointing_up", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👍": { + name: "thumbs up", + slug: "thumbs_up", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👎": { + name: "thumbs down", + slug: "thumbs_down", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "✊": { + name: "raised fist", + slug: "raised_fist", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👊": { + name: "oncoming fist", + slug: "oncoming_fist", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€›": { + name: "left-facing fist", + slug: "left_facing_fist", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€œ": { + name: "right-facing fist", + slug: "right_facing_fist", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "👏": { + name: "clapping hands", + slug: "clapping_hands", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🙌": { + name: "raising hands", + slug: "raising_hands", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👐": { + name: "open hands", + slug: "open_hands", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€Č": { + name: "palms up together", + slug: "palms_up_together", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ€": { + name: "handshake", + slug: "handshake", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🙏": { + name: "folded hands", + slug: "folded_hands", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "✍": { + name: "writing hand", + slug: "writing_hand", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "💅": { + name: "nail polish", + slug: "nail_polish", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€ł": { + name: "selfie", + slug: "selfie", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ’Ș": { + name: "flexed biceps", + slug: "flexed_biceps", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸŠŸ": { + name: "mechanical arm", + slug: "mechanical_arm", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🩿": { + name: "mechanical leg", + slug: "mechanical_leg", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŠ”": { + name: "leg", + slug: "leg", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸŠ¶": { + name: "foot", + slug: "foot", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "👂": { + name: "ear", + slug: "ear", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸŠ»": { + name: "ear with hearing aid", + slug: "ear_with_hearing_aid", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "👃": { + name: "nose", + slug: "nose", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🧠": { + name: "brain", + slug: "brain", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ«€": { + name: "anatomical heart", + slug: "anatomical_heart", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ«": { + name: "lungs", + slug: "lungs", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸŠ·": { + name: "tooth", + slug: "tooth", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🩮": { + name: "bone", + slug: "bone", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "👀": { + name: "eyes", + slug: "eyes", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘ïž": { + name: "eye", + slug: "eye", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "👅": { + name: "tongue", + slug: "tongue", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👄": { + name: "mouth", + slug: "mouth", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘¶": { + name: "baby", + slug: "baby", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🧒": { + name: "child", + slug: "child", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "👩": { + name: "boy", + slug: "boy", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👧": { + name: "girl", + slug: "girl", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🧑": { + name: "person", + slug: "person", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ‘±": { + name: "person blond hair", + slug: "person_blond_hair", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👹": { + name: "man", + slug: "man", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🧔": { + name: "person beard", + slug: "person_beard", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "👹‍🩰": { + name: "man red hair", + slug: "man_red_hair", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸ‘šâ€đŸŠ±": { + name: "man curly hair", + slug: "man_curly_hair", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "👹‍🩳": { + name: "man white hair", + slug: "man_white_hair", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "👹‍đŸŠČ": { + name: "man bald", + slug: "man_bald", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸ‘©": { + name: "woman", + slug: "woman", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ‘©â€đŸŠ°": { + name: "woman red hair", + slug: "woman_red_hair", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "🧑‍🩰": { + name: "person red hair", + slug: "person_red_hair", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘©â€đŸŠ±": { + name: "woman curly hair", + slug: "woman_curly_hair", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸ§‘â€đŸŠ±": { + name: "person curly hair", + slug: "person_curly_hair", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘©â€đŸŠł": { + name: "woman white hair", + slug: "woman_white_hair", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "🧑‍🩳": { + name: "person white hair", + slug: "person_white_hair", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘©â€đŸŠČ": { + name: "woman bald", + slug: "woman_bald", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "🧑‍đŸŠČ": { + name: "person bald", + slug: "person_bald", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘±â€â™€ïž": { + name: "woman blond hair", + slug: "woman_blond_hair", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘±â€â™‚ïž": { + name: "man blond hair", + slug: "man_blond_hair", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧓": { + name: "older person", + slug: "older_person", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "👮": { + name: "old man", + slug: "old_man", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ‘”": { + name: "old woman", + slug: "old_woman", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🙍": { + name: "person frowning", + slug: "person_frowning", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ™â€â™‚ïž": { + name: "man frowning", + slug: "man_frowning", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ™â€â™€ïž": { + name: "woman frowning", + slug: "woman_frowning", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🙎": { + name: "person pouting", + slug: "person_pouting", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ™Žâ€â™‚ïž": { + name: "man pouting", + slug: "man_pouting", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ™Žâ€â™€ïž": { + name: "woman pouting", + slug: "woman_pouting", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🙅": { + name: "person gesturing NO", + slug: "person_gesturing_no", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ™…â€â™‚ïž": { + name: "man gesturing NO", + slug: "man_gesturing_no", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ™…â€â™€ïž": { + name: "woman gesturing NO", + slug: "woman_gesturing_no", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🙆": { + name: "person gesturing OK", + slug: "person_gesturing_ok", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ™†â€â™‚ïž": { + name: "man gesturing OK", + slug: "man_gesturing_ok", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ™†â€â™€ïž": { + name: "woman gesturing OK", + slug: "woman_gesturing_ok", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "💁": { + name: "person tipping hand", + slug: "person_tipping_hand", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ’â€â™‚ïž": { + name: "man tipping hand", + slug: "man_tipping_hand", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ’â€â™€ïž": { + name: "woman tipping hand", + slug: "woman_tipping_hand", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🙋": { + name: "person raising hand", + slug: "person_raising_hand", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ™‹â€â™‚ïž": { + name: "man raising hand", + slug: "man_raising_hand", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ™‹â€â™€ïž": { + name: "woman raising hand", + slug: "woman_raising_hand", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧏": { + name: "deaf person", + slug: "deaf_person", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§â€â™‚ïž": { + name: "deaf man", + slug: "deaf_man", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§â€â™€ïž": { + name: "deaf woman", + slug: "deaf_woman", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "🙇": { + name: "person bowing", + slug: "person_bowing", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ™‡â€â™‚ïž": { + name: "man bowing", + slug: "man_bowing", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ™‡â€â™€ïž": { + name: "woman bowing", + slug: "woman_bowing", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€Š": { + name: "person facepalming", + slug: "person_facepalming", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€Šâ€â™‚ïž": { + name: "man facepalming", + slug: "man_facepalming", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€Šâ€â™€ïž": { + name: "woman facepalming", + slug: "woman_facepalming", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€·": { + name: "person shrugging", + slug: "person_shrugging", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€·â€â™‚ïž": { + name: "man shrugging", + slug: "man_shrugging", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€·â€â™€ïž": { + name: "woman shrugging", + slug: "woman_shrugging", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€âš•ïž": { + name: "health worker", + slug: "health_worker", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€âš•ïž": { + name: "man health worker", + slug: "man_health_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€âš•ïž": { + name: "woman health worker", + slug: "woman_health_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🎓": { + name: "student", + slug: "student", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🎓": { + name: "man student", + slug: "man_student", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸŽ“": { + name: "woman student", + slug: "woman_student", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€đŸ«": { + name: "teacher", + slug: "teacher", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸ«": { + name: "man teacher", + slug: "man_teacher", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸ«": { + name: "woman teacher", + slug: "woman_teacher", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€âš–ïž": { + name: "judge", + slug: "judge", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€âš–ïž": { + name: "man judge", + slug: "man_judge", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€âš–ïž": { + name: "woman judge", + slug: "woman_judge", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€đŸŒŸ": { + name: "farmer", + slug: "farmer", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸŒŸ": { + name: "man farmer", + slug: "man_farmer", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸŒŸ": { + name: "woman farmer", + slug: "woman_farmer", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🍳": { + name: "cook", + slug: "cook", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🍳": { + name: "man cook", + slug: "man_cook", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸł": { + name: "woman cook", + slug: "woman_cook", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🔧": { + name: "mechanic", + slug: "mechanic", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🔧": { + name: "man mechanic", + slug: "man_mechanic", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸ”§": { + name: "woman mechanic", + slug: "woman_mechanic", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🏭": { + name: "factory worker", + slug: "factory_worker", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🏭": { + name: "man factory worker", + slug: "man_factory_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸ­": { + name: "woman factory worker", + slug: "woman_factory_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€đŸ’Œ": { + name: "office worker", + slug: "office_worker", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸ’Œ": { + name: "man office worker", + slug: "man_office_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸ’Œ": { + name: "woman office worker", + slug: "woman_office_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🔬": { + name: "scientist", + slug: "scientist", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🔬": { + name: "man scientist", + slug: "man_scientist", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸ”Ź": { + name: "woman scientist", + slug: "woman_scientist", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€đŸ’»": { + name: "technologist", + slug: "technologist", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸ’»": { + name: "man technologist", + slug: "man_technologist", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸ’»": { + name: "woman technologist", + slug: "woman_technologist", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€đŸŽ€": { + name: "singer", + slug: "singer", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸŽ€": { + name: "man singer", + slug: "man_singer", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸŽ€": { + name: "woman singer", + slug: "woman_singer", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🎹": { + name: "artist", + slug: "artist", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🎹": { + name: "man artist", + slug: "man_artist", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸŽš": { + name: "woman artist", + slug: "woman_artist", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€âœˆïž": { + name: "pilot", + slug: "pilot", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€âœˆïž": { + name: "man pilot", + slug: "man_pilot", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€âœˆïž": { + name: "woman pilot", + slug: "woman_pilot", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🚀": { + name: "astronaut", + slug: "astronaut", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🚀": { + name: "man astronaut", + slug: "man_astronaut", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸš€": { + name: "woman astronaut", + slug: "woman_astronaut", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧑‍🚒": { + name: "firefighter", + slug: "firefighter", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🚒": { + name: "man firefighter", + slug: "man_firefighter", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘©â€đŸš’": { + name: "woman firefighter", + slug: "woman_firefighter", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "👼": { + name: "police officer", + slug: "police_officer", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ‘źâ€â™‚ïž": { + name: "man police officer", + slug: "man_police_officer", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘źâ€â™€ïž": { + name: "woman police officer", + slug: "woman_police_officer", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ•”ïž": { + name: "detective", + slug: "detective", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "2.0" +}, + "đŸ•”ïžâ€â™‚ïž": { + name: "man detective", + slug: "man_detective", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ•”ïžâ€â™€ïž": { + name: "woman detective", + slug: "woman_detective", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "💂": { + name: "guard", + slug: "guard", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ’‚â€â™‚ïž": { + name: "man guard", + slug: "man_guard", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ’‚â€â™€ïž": { + name: "woman guard", + slug: "woman_guard", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ„·": { + name: "ninja", + slug: "ninja", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ‘·": { + name: "construction worker", + slug: "construction_worker", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ‘·â€â™‚ïž": { + name: "man construction worker", + slug: "man_construction_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘·â€â™€ïž": { + name: "woman construction worker", + slug: "woman_construction_worker", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€Ž": { + name: "prince", + slug: "prince", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "👾": { + name: "princess", + slug: "princess", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "👳": { + name: "person wearing turban", + slug: "person_wearing_turban", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ‘łâ€â™‚ïž": { + name: "man wearing turban", + slug: "man_wearing_turban", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘łâ€â™€ïž": { + name: "woman wearing turban", + slug: "woman_wearing_turban", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‘Č": { + name: "person with skullcap", + slug: "person_with_skullcap", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🧕": { + name: "woman with headscarf", + slug: "woman_with_headscarf", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ€”": { + name: "person in tuxedo", + slug: "person_in_tuxedo", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€”â€â™‚ïž": { + name: "man in tuxedo", + slug: "man_in_tuxedo", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ€”â€â™€ïž": { + name: "woman in tuxedo", + slug: "woman_in_tuxedo", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "👰": { + name: "person with veil", + slug: "person_with_veil", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ‘°â€â™‚ïž": { + name: "man with veil", + slug: "man_with_veil", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ‘°â€â™€ïž": { + name: "woman with veil", + slug: "woman_with_veil", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ€°": { + name: "pregnant woman", + slug: "pregnant_woman", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€±": { + name: "breast-feeding", + slug: "breast_feeding", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ‘©â€đŸŒ": { + name: "woman feeding baby", + slug: "woman_feeding_baby", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ‘šâ€đŸŒ": { + name: "man feeding baby", + slug: "man_feeding_baby", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ§‘â€đŸŒ": { + name: "person feeding baby", + slug: "person_feeding_baby", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "đŸ‘Œ": { + name: "baby angel", + slug: "baby_angel", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🎅": { + name: "Santa Claus", + slug: "santa_claus", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ€¶": { + name: "Mrs. Claus", + slug: "mrs_claus", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "🧑‍🎄": { + name: "mx claus", + slug: "mx_claus", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "13.0" +}, + "🩾": { + name: "superhero", + slug: "superhero", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸŠžâ€â™‚ïž": { + name: "man superhero", + slug: "man_superhero", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸŠžâ€â™€ïž": { + name: "woman superhero", + slug: "woman_superhero", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸŠč": { + name: "supervillain", + slug: "supervillain", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸŠč‍♂": { + name: "man supervillain", + slug: "man_supervillain", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "đŸŠč‍♀": { + name: "woman supervillain", + slug: "woman_supervillain", + group: "People & Body", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "11.0" +}, + "🧙": { + name: "mage", + slug: "mage", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§™â€â™‚ïž": { + name: "man mage", + slug: "man_mage", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§™â€â™€ïž": { + name: "woman mage", + slug: "woman_mage", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🧚": { + name: "fairy", + slug: "fairy", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§šâ€â™‚ïž": { + name: "man fairy", + slug: "man_fairy", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§šâ€â™€ïž": { + name: "woman fairy", + slug: "woman_fairy", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🧛": { + name: "vampire", + slug: "vampire", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§›â€â™‚ïž": { + name: "man vampire", + slug: "man_vampire", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§›â€â™€ïž": { + name: "woman vampire", + slug: "woman_vampire", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🧜": { + name: "merperson", + slug: "merperson", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§œâ€â™‚ïž": { + name: "merman", + slug: "merman", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§œâ€â™€ïž": { + name: "mermaid", + slug: "mermaid", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🧝": { + name: "elf", + slug: "elf", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§â€â™‚ïž": { + name: "man elf", + slug: "man_elf", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§â€â™€ïž": { + name: "woman elf", + slug: "woman_elf", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🧞": { + name: "genie", + slug: "genie", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ§žâ€â™‚ïž": { + name: "man genie", + slug: "man_genie", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ§žâ€â™€ïž": { + name: "woman genie", + slug: "woman_genie", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🧟": { + name: "zombie", + slug: "zombie", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ§Ÿâ€â™‚ïž": { + name: "man zombie", + slug: "man_zombie", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ§Ÿâ€â™€ïž": { + name: "woman zombie", + slug: "woman_zombie", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "💆": { + name: "person getting massage", + slug: "person_getting_massage", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ’†â€â™‚ïž": { + name: "man getting massage", + slug: "man_getting_massage", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ’†â€â™€ïž": { + name: "woman getting massage", + slug: "woman_getting_massage", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "💇": { + name: "person getting haircut", + slug: "person_getting_haircut", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ’‡â€â™‚ïž": { + name: "man getting haircut", + slug: "man_getting_haircut", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ’‡â€â™€ïž": { + name: "woman getting haircut", + slug: "woman_getting_haircut", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸš¶": { + name: "person walking", + slug: "person_walking", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸš¶â€â™‚ïž": { + name: "man walking", + slug: "man_walking", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸš¶â€â™€ïž": { + name: "woman walking", + slug: "woman_walking", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧍": { + name: "person standing", + slug: "person_standing", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§â€â™‚ïž": { + name: "man standing", + slug: "man_standing", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§â€â™€ïž": { + name: "woman standing", + slug: "woman_standing", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "🧎": { + name: "person kneeling", + slug: "person_kneeling", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§Žâ€â™‚ïž": { + name: "man kneeling", + slug: "man_kneeling", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§Žâ€â™€ïž": { + name: "woman kneeling", + slug: "woman_kneeling", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "🧑‍🩯": { + name: "person with white cane", + slug: "person_with_white_cane", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "👹‍🩯": { + name: "man with white cane", + slug: "man_with_white_cane", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ‘©â€đŸŠŻ": { + name: "woman with white cane", + slug: "woman_with_white_cane", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§‘â€đŸŠŒ": { + name: "person in motorized wheelchair", + slug: "person_in_motorized_wheelchair", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸŠŒ": { + name: "man in motorized wheelchair", + slug: "man_in_motorized_wheelchair", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ‘©â€đŸŠŒ": { + name: "woman in motorized wheelchair", + slug: "woman_in_motorized_wheelchair", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ§‘â€đŸŠœ": { + name: "person in manual wheelchair", + slug: "person_in_manual_wheelchair", + group: "People & Body", + emoji_version: "12.1", + unicode_version: "12.1", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.1" +}, + "đŸ‘šâ€đŸŠœ": { + name: "man in manual wheelchair", + slug: "man_in_manual_wheelchair", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ‘©â€đŸŠœ": { + name: "woman in manual wheelchair", + slug: "woman_in_manual_wheelchair", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "🏃": { + name: "person running", + slug: "person_running", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸƒâ€â™‚ïž": { + name: "man running", + slug: "man_running", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸƒâ€â™€ïž": { + name: "woman running", + slug: "woman_running", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "💃": { + name: "woman dancing", + slug: "woman_dancing", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ•ș": { + name: "man dancing", + slug: "man_dancing", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ•Žïž": { + name: "person in suit levitating", + slug: "person_in_suit_levitating", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "👯": { + name: "people with bunny ears", + slug: "people_with_bunny_ears", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘Żâ€â™‚ïž": { + name: "men with bunny ears", + slug: "men_with_bunny_ears", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‘Żâ€â™€ïž": { + name: "women with bunny ears", + slug: "women_with_bunny_ears", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "🧖": { + name: "person in steamy room", + slug: "person_in_steamy_room", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§–â€â™‚ïž": { + name: "man in steamy room", + slug: "man_in_steamy_room", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§–â€â™€ïž": { + name: "woman in steamy room", + slug: "woman_in_steamy_room", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🧗": { + name: "person climbing", + slug: "person_climbing", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§—â€â™‚ïž": { + name: "man climbing", + slug: "man_climbing", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§—â€â™€ïž": { + name: "woman climbing", + slug: "woman_climbing", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ€ș": { + name: "person fencing", + slug: "person_fencing", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🏇": { + name: "horse racing", + slug: "horse_racing", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "⛷": { + name: "skier", + slug: "skier", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🏂": { + name: "snowboarder", + slug: "snowboarder", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸŒïž": { + name: "person golfing", + slug: "person_golfing", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸŒïžâ€â™‚ïž": { + name: "man golfing", + slug: "man_golfing", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸŒïžâ€â™€ïž": { + name: "woman golfing", + slug: "woman_golfing", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🏄": { + name: "person surfing", + slug: "person_surfing", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸ„â€â™‚ïž": { + name: "man surfing", + slug: "man_surfing", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ„â€â™€ïž": { + name: "woman surfing", + slug: "woman_surfing", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🚣": { + name: "person rowing boat", + slug: "person_rowing_boat", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸšŁâ€â™‚ïž": { + name: "man rowing boat", + slug: "man_rowing_boat", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸšŁâ€â™€ïž": { + name: "woman rowing boat", + slug: "woman_rowing_boat", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🏊": { + name: "person swimming", + slug: "person_swimming", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸŠâ€â™‚ïž": { + name: "man swimming", + slug: "man_swimming", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸŠâ€â™€ïž": { + name: "woman swimming", + slug: "woman_swimming", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "â›č": { + name: "person bouncing ball", + slug: "person_bouncing_ball", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "2.0" +}, + "â›č‍♂": { + name: "man bouncing ball", + slug: "man_bouncing_ball", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "â›č‍♀": { + name: "woman bouncing ball", + slug: "woman_bouncing_ball", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‹ïž": { + name: "person lifting weights", + slug: "person_lifting_weights", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: true, + skin_tone_support_unicode_version: "2.0" +}, + "đŸ‹ïžâ€â™‚ïž": { + name: "man lifting weights", + slug: "man_lifting_weights", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ‹ïžâ€â™€ïž": { + name: "woman lifting weights", + slug: "woman_lifting_weights", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🚮": { + name: "person biking", + slug: "person_biking", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸšŽâ€â™‚ïž": { + name: "man biking", + slug: "man_biking", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸšŽâ€â™€ïž": { + name: "woman biking", + slug: "woman_biking", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸš”": { + name: "person mountain biking", + slug: "person_mountain_biking", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "đŸš”â€â™‚ïž": { + name: "man mountain biking", + slug: "man_mountain_biking", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸš”â€â™€ïž": { + name: "woman mountain biking", + slug: "woman_mountain_biking", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€ž": { + name: "person cartwheeling", + slug: "person_cartwheeling", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€žâ€â™‚ïž": { + name: "man cartwheeling", + slug: "man_cartwheeling", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€žâ€â™€ïž": { + name: "woman cartwheeling", + slug: "woman_cartwheeling", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€Œ": { + name: "people wrestling", + slug: "people_wrestling", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ€Œâ€â™‚ïž": { + name: "men wrestling", + slug: "men_wrestling", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ€Œâ€â™€ïž": { + name: "women wrestling", + slug: "women_wrestling", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ€œ": { + name: "person playing water polo", + slug: "person_playing_water_polo", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€œâ€â™‚ïž": { + name: "man playing water polo", + slug: "man_playing_water_polo", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€œâ€â™€ïž": { + name: "woman playing water polo", + slug: "woman_playing_water_polo", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€Ÿ": { + name: "person playing handball", + slug: "person_playing_handball", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€Ÿâ€â™‚ïž": { + name: "man playing handball", + slug: "man_playing_handball", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€Ÿâ€â™€ïž": { + name: "woman playing handball", + slug: "woman_playing_handball", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€č": { + name: "person juggling", + slug: "person_juggling", + group: "People & Body", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "3.0" +}, + "đŸ€č‍♂": { + name: "man juggling", + slug: "man_juggling", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ€č‍♀": { + name: "woman juggling", + slug: "woman_juggling", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "🧘": { + name: "person in lotus position", + slug: "person_in_lotus_position", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§˜â€â™‚ïž": { + name: "man in lotus position", + slug: "man_in_lotus_position", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "đŸ§˜â€â™€ïž": { + name: "woman in lotus position", + slug: "woman_in_lotus_position", + group: "People & Body", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "5.0" +}, + "🛀": { + name: "person taking bath", + slug: "person_taking_bath", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "1.0" +}, + "🛌": { + name: "person in bed", + slug: "person_in_bed", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "4.0" +}, + "đŸ§‘â€đŸ€â€đŸ§‘": { + name: "people holding hands", + slug: "people_holding_hands", + group: "People & Body", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "👭": { + name: "women holding hands", + slug: "women_holding_hands", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "đŸ‘«": { + name: "woman and man holding hands", + slug: "woman_and_man_holding_hands", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "👬": { + name: "men holding hands", + slug: "men_holding_hands", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: true, + skin_tone_support_unicode_version: "12.0" +}, + "💏": { + name: "kiss", + slug: "kiss", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘©â€â€ïžâ€đŸ’‹â€đŸ‘š": { + name: "kiss woman, man", + slug: "kiss_woman_man", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘šâ€â€ïžâ€đŸ’‹â€đŸ‘š": { + name: "kiss man, man", + slug: "kiss_man_man", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€â€ïžâ€đŸ’‹â€đŸ‘©": { + name: "kiss woman, woman", + slug: "kiss_woman_woman", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "💑": { + name: "couple with heart", + slug: "couple_with_heart", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘©â€â€ïžâ€đŸ‘š": { + name: "couple with heart woman, man", + slug: "couple_with_heart_woman_man", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘šâ€â€ïžâ€đŸ‘š": { + name: "couple with heart man, man", + slug: "couple_with_heart_man_man", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€â€ïžâ€đŸ‘©": { + name: "couple with heart woman, woman", + slug: "couple_with_heart_woman_woman", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘Ș": { + name: "family", + slug: "family", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘šâ€đŸ‘©â€đŸ‘Š": { + name: "family man, woman, boy", + slug: "family_man_woman_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘šâ€đŸ‘©â€đŸ‘§": { + name: "family man, woman, girl", + slug: "family_man_woman_girl", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘šâ€đŸ‘©â€đŸ‘§â€đŸ‘Š": { + name: "family man, woman, girl, boy", + slug: "family_man_woman_girl_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘šâ€đŸ‘©â€đŸ‘Šâ€đŸ‘Š": { + name: "family man, woman, boy, boy", + slug: "family_man_woman_boy_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘šâ€đŸ‘©â€đŸ‘§â€đŸ‘§": { + name: "family man, woman, girl, girl", + slug: "family_man_woman_girl_girl", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "👹‍👹‍👩": { + name: "family man, man, boy", + slug: "family_man_man_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "👹‍👹‍👧": { + name: "family man, man, girl", + slug: "family_man_man_girl", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "👹‍👹‍👧‍👩": { + name: "family man, man, girl, boy", + slug: "family_man_man_girl_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "👹‍👹‍👩‍👩": { + name: "family man, man, boy, boy", + slug: "family_man_man_boy_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "👹‍👹‍👧‍👧": { + name: "family man, man, girl, girl", + slug: "family_man_man_girl_girl", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘©â€đŸ‘Š": { + name: "family woman, woman, boy", + slug: "family_woman_woman_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘©â€đŸ‘§": { + name: "family woman, woman, girl", + slug: "family_woman_woman_girl", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘©â€đŸ‘§â€đŸ‘Š": { + name: "family woman, woman, girl, boy", + slug: "family_woman_woman_girl_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘©â€đŸ‘Šâ€đŸ‘Š": { + name: "family woman, woman, boy, boy", + slug: "family_woman_woman_boy_boy", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘©â€đŸ‘§â€đŸ‘§": { + name: "family woman, woman, girl, girl", + slug: "family_woman_woman_girl_girl", + group: "People & Body", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "👹‍👩": { + name: "family man, boy", + slug: "family_man_boy", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "👹‍👩‍👩": { + name: "family man, boy, boy", + slug: "family_man_boy_boy", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "👹‍👧": { + name: "family man, girl", + slug: "family_man_girl", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "👹‍👧‍👩": { + name: "family man, girl, boy", + slug: "family_man_girl_boy", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "👹‍👧‍👧": { + name: "family man, girl, girl", + slug: "family_man_girl_girl", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘Š": { + name: "family woman, boy", + slug: "family_woman_boy", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘Šâ€đŸ‘Š": { + name: "family woman, boy, boy", + slug: "family_woman_boy_boy", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘§": { + name: "family woman, girl", + slug: "family_woman_girl", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘§â€đŸ‘Š": { + name: "family woman, girl, boy", + slug: "family_woman_girl_boy", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‘©â€đŸ‘§â€đŸ‘§": { + name: "family woman, girl, girl", + slug: "family_woman_girl_girl", + group: "People & Body", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ—Łïž": { + name: "speaking head", + slug: "speaking_head", + group: "People & Body", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ‘€": { + name: "bust in silhouette", + slug: "bust_in_silhouette", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‘„": { + name: "busts in silhouette", + slug: "busts_in_silhouette", + group: "People & Body", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ«‚": { + name: "people hugging", + slug: "people_hugging", + group: "People & Body", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "👣": { + name: "footprints", + slug: "footprints", + group: "People & Body", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”": { + name: "monkey face", + slug: "monkey_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐒": { + name: "monkey", + slug: "monkey", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩍": { + name: "gorilla", + slug: "gorilla", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩧": { + name: "orangutan", + slug: "orangutan", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ¶": { + name: "dog face", + slug: "dog_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐕": { + name: "dog", + slug: "dog", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🩼": { + name: "guide dog", + slug: "guide_dog", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🐕‍đŸŠș": { + name: "service dog", + slug: "service_dog", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ©": { + name: "poodle", + slug: "poodle", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸș": { + name: "wolf", + slug: "wolf", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩊": { + name: "fox", + slug: "fox", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩝": { + name: "raccoon", + slug: "raccoon", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ±": { + name: "cat face", + slug: "cat_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐈": { + name: "cat", + slug: "cat", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🐈‍⬛": { + name: "black cat", + slug: "black_cat", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🩁": { + name: "lion", + slug: "lion", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐯": { + name: "tiger face", + slug: "tiger_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐅": { + name: "tiger", + slug: "tiger", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐆": { + name: "leopard", + slug: "leopard", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐮": { + name: "horse face", + slug: "horse_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐎": { + name: "horse", + slug: "horse", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩄": { + name: "unicorn", + slug: "unicorn", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🩓": { + name: "zebra", + slug: "zebra", + group: "Animals & Nature", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🩌": { + name: "deer", + slug: "deer", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩬": { + name: "bison", + slug: "bison", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🐼": { + name: "cow face", + slug: "cow_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐂": { + name: "ox", + slug: "ox", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐃": { + name: "water buffalo", + slug: "water_buffalo", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐄": { + name: "cow", + slug: "cow", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ·": { + name: "pig face", + slug: "pig_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐖": { + name: "pig", + slug: "pig", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐗": { + name: "boar", + slug: "boar", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸœ": { + name: "pig nose", + slug: "pig_nose", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐏": { + name: "ram", + slug: "ram", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐑": { + name: "ewe", + slug: "ewe", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐐": { + name: "goat", + slug: "goat", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸȘ": { + name: "camel", + slug: "camel", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ«": { + name: "two-hump camel", + slug: "two_hump_camel", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩙": { + name: "llama", + slug: "llama", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🩒": { + name: "giraffe", + slug: "giraffe", + group: "Animals & Nature", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🐘": { + name: "elephant", + slug: "elephant", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩣": { + name: "mammoth", + slug: "mammoth", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🩏": { + name: "rhinoceros", + slug: "rhinoceros", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩛": { + name: "hippopotamus", + slug: "hippopotamus", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🐭": { + name: "mouse face", + slug: "mouse_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐁": { + name: "mouse", + slug: "mouse", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐀": { + name: "rat", + slug: "rat", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸč": { + name: "hamster", + slug: "hamster", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐰": { + name: "rabbit face", + slug: "rabbit_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐇": { + name: "rabbit", + slug: "rabbit", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸżïž": { + name: "chipmunk", + slug: "chipmunk", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŠ«": { + name: "beaver", + slug: "beaver", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🩔": { + name: "hedgehog", + slug: "hedgehog", + group: "Animals & Nature", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🩇": { + name: "bat", + slug: "bat", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ»": { + name: "bear", + slug: "bear", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ»â€â„ïž": { + name: "polar bear", + slug: "polar_bear", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🐹": { + name: "koala", + slug: "koala", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ": { + name: "panda", + slug: "panda", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŠ„": { + name: "sloth", + slug: "sloth", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🩩": { + name: "otter", + slug: "otter", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🩹": { + name: "skunk", + slug: "skunk", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🩘": { + name: "kangaroo", + slug: "kangaroo", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🩡": { + name: "badger", + slug: "badger", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸŸ": { + name: "paw prints", + slug: "paw_prints", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩃": { + name: "turkey", + slug: "turkey", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐔": { + name: "chicken", + slug: "chicken", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐓": { + name: "rooster", + slug: "rooster", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐣": { + name: "hatching chick", + slug: "hatching_chick", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€": { + name: "baby chick", + slug: "baby_chick", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„": { + name: "front-facing baby chick", + slug: "front_facing_baby_chick", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐩": { + name: "bird", + slug: "bird", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐧": { + name: "penguin", + slug: "penguin", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•Šïž": { + name: "dove", + slug: "dove", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🩅": { + name: "eagle", + slug: "eagle", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩆": { + name: "duck", + slug: "duck", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩱": { + name: "swan", + slug: "swan", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🩉": { + name: "owl", + slug: "owl", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸŠ€": { + name: "dodo", + slug: "dodo", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘ¶": { + name: "feather", + slug: "feather", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸŠ©": { + name: "flamingo", + slug: "flamingo", + group: "Animals & Nature", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🩚": { + name: "peacock", + slug: "peacock", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🩜": { + name: "parrot", + slug: "parrot", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🐾": { + name: "frog", + slug: "frog", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐊": { + name: "crocodile", + slug: "crocodile", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐱": { + name: "turtle", + slug: "turtle", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩎": { + name: "lizard", + slug: "lizard", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🐍": { + name: "snake", + slug: "snake", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸČ": { + name: "dragon face", + slug: "dragon_face", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐉": { + name: "dragon", + slug: "dragon", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🩕": { + name: "sauropod", + slug: "sauropod", + group: "Animals & Nature", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🩖": { + name: "T-Rex", + slug: "t_rex", + group: "Animals & Nature", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🐳": { + name: "spouting whale", + slug: "spouting_whale", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐋": { + name: "whale", + slug: "whale", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🐬": { + name: "dolphin", + slug: "dolphin", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩭": { + name: "seal", + slug: "seal", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🐟": { + name: "fish", + slug: "fish", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐠": { + name: "tropical fish", + slug: "tropical_fish", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐡": { + name: "blowfish", + slug: "blowfish", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩈": { + name: "shark", + slug: "shark", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🐙": { + name: "octopus", + slug: "octopus", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐚": { + name: "spiral shell", + slug: "spiral_shell", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐌": { + name: "snail", + slug: "snail", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩋": { + name: "butterfly", + slug: "butterfly", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🐛": { + name: "bug", + slug: "bug", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐜": { + name: "ant", + slug: "ant", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🐝": { + name: "honeybee", + slug: "honeybee", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘČ": { + name: "beetle", + slug: "beetle", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🐞": { + name: "lady beetle", + slug: "lady_beetle", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🩗": { + name: "cricket", + slug: "cricket", + group: "Animals & Nature", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸȘł": { + name: "cockroach", + slug: "cockroach", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ•·ïž": { + name: "spider", + slug: "spider", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ•žïž": { + name: "spider web", + slug: "spider_web", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🩂": { + name: "scorpion", + slug: "scorpion", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🩟": { + name: "mosquito", + slug: "mosquito", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘ°": { + name: "fly", + slug: "fly", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘ±": { + name: "worm", + slug: "worm", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🩠": { + name: "microbe", + slug: "microbe", + group: "Animals & Nature", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "💐": { + name: "bouquet", + slug: "bouquet", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌾": { + name: "cherry blossom", + slug: "cherry_blossom", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💼": { + name: "white flower", + slug: "white_flower", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”ïž": { + name: "rosette", + slug: "rosette", + group: "Animals & Nature", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒč": { + name: "rose", + slug: "rose", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„€": { + name: "wilted flower", + slug: "wilted_flower", + group: "Animals & Nature", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸŒș": { + name: "hibiscus", + slug: "hibiscus", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ»": { + name: "sunflower", + slug: "sunflower", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒŒ": { + name: "blossom", + slug: "blossom", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ·": { + name: "tulip", + slug: "tulip", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ±": { + name: "seedling", + slug: "seedling", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘŽ": { + name: "potted plant", + slug: "potted_plant", + group: "Animals & Nature", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸŒČ": { + name: "evergreen tree", + slug: "evergreen_tree", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌳": { + name: "deciduous tree", + slug: "deciduous_tree", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌮": { + name: "palm tree", + slug: "palm_tree", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ”": { + name: "cactus", + slug: "cactus", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒŸ": { + name: "sheaf of rice", + slug: "sheaf_of_rice", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌿": { + name: "herb", + slug: "herb", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☘": { + name: "shamrock", + slug: "shamrock", + group: "Animals & Nature", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🍀": { + name: "four leaf clover", + slug: "four_leaf_clover", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍁": { + name: "maple leaf", + slug: "maple_leaf", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍂": { + name: "fallen leaf", + slug: "fallen_leaf", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍃": { + name: "leaf fluttering in wind", + slug: "leaf_fluttering_in_wind", + group: "Animals & Nature", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍇": { + name: "grapes", + slug: "grapes", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍈": { + name: "melon", + slug: "melon", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍉": { + name: "watermelon", + slug: "watermelon", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍊": { + name: "tangerine", + slug: "tangerine", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍋": { + name: "lemon", + slug: "lemon", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🍌": { + name: "banana", + slug: "banana", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍍": { + name: "pineapple", + slug: "pineapple", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„­": { + name: "mango", + slug: "mango", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🍎": { + name: "red apple", + slug: "red_apple", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍏": { + name: "green apple", + slug: "green_apple", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍐": { + name: "pear", + slug: "pear", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🍑": { + name: "peach", + slug: "peach", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍒": { + name: "cherries", + slug: "cherries", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍓": { + name: "strawberry", + slug: "strawberry", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ«": { + name: "blueberries", + slug: "blueberries", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ„": { + name: "kiwi fruit", + slug: "kiwi_fruit", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🍅": { + name: "tomato", + slug: "tomato", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ«’": { + name: "olive", + slug: "olive", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ„„": { + name: "coconut", + slug: "coconut", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„‘": { + name: "avocado", + slug: "avocado", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🍆": { + name: "eggplant", + slug: "eggplant", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„”": { + name: "potato", + slug: "potato", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„•": { + name: "carrot", + slug: "carrot", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸŒœ": { + name: "ear of corn", + slug: "ear_of_corn", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ¶ïž": { + name: "hot pepper", + slug: "hot_pepper", + group: "Food & Drink", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ«‘": { + name: "bell pepper", + slug: "bell_pepper", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ„’": { + name: "cucumber", + slug: "cucumber", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„Ź": { + name: "leafy green", + slug: "leafy_green", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„Š": { + name: "broccoli", + slug: "broccoli", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🧄": { + name: "garlic", + slug: "garlic", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🧅": { + name: "onion", + slug: "onion", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🍄": { + name: "mushroom", + slug: "mushroom", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„œ": { + name: "peanuts", + slug: "peanuts", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🌰": { + name: "chestnut", + slug: "chestnut", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍞": { + name: "bread", + slug: "bread", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„": { + name: "croissant", + slug: "croissant", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„–": { + name: "baguette bread", + slug: "baguette_bread", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ«“": { + name: "flatbread", + slug: "flatbread", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ„š": { + name: "pretzel", + slug: "pretzel", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„Ż": { + name: "bagel", + slug: "bagel", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„ž": { + name: "pancakes", + slug: "pancakes", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🧇": { + name: "waffle", + slug: "waffle", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🧀": { + name: "cheese wedge", + slug: "cheese_wedge", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🍖": { + name: "meat on bone", + slug: "meat_on_bone", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍗": { + name: "poultry leg", + slug: "poultry_leg", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„©": { + name: "cut of meat", + slug: "cut_of_meat", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„“": { + name: "bacon", + slug: "bacon", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🍔": { + name: "hamburger", + slug: "hamburger", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍟": { + name: "french fries", + slug: "french_fries", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍕": { + name: "pizza", + slug: "pizza", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌭": { + name: "hot dog", + slug: "hot_dog", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„Ș": { + name: "sandwich", + slug: "sandwich", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🌼": { + name: "taco", + slug: "taco", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌯": { + name: "burrito", + slug: "burrito", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ«”": { + name: "tamale", + slug: "tamale", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ„™": { + name: "stuffed flatbread", + slug: "stuffed_flatbread", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🧆": { + name: "falafel", + slug: "falafel", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ„š": { + name: "egg", + slug: "egg", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🍳": { + name: "cooking", + slug: "cooking", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„˜": { + name: "shallow pan of food", + slug: "shallow_pan_of_food", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸČ": { + name: "pot of food", + slug: "pot_of_food", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ«•": { + name: "fondue", + slug: "fondue", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ„Ł": { + name: "bowl with spoon", + slug: "bowl_with_spoon", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„—": { + name: "green salad", + slug: "green_salad", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🍿": { + name: "popcorn", + slug: "popcorn", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🧈": { + name: "butter", + slug: "butter", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🧂": { + name: "salt", + slug: "salt", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„«": { + name: "canned food", + slug: "canned_food", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ±": { + name: "bento box", + slug: "bento_box", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍘": { + name: "rice cracker", + slug: "rice_cracker", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍙": { + name: "rice ball", + slug: "rice_ball", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍚": { + name: "cooked rice", + slug: "cooked_rice", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍛": { + name: "curry rice", + slug: "curry_rice", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍜": { + name: "steaming bowl", + slug: "steaming_bowl", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍝": { + name: "spaghetti", + slug: "spaghetti", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍠": { + name: "roasted sweet potato", + slug: "roasted_sweet_potato", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍱": { + name: "oden", + slug: "oden", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍣": { + name: "sushi", + slug: "sushi", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€": { + name: "fried shrimp", + slug: "fried_shrimp", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„": { + name: "fish cake with swirl", + slug: "fish_cake_with_swirl", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„ź": { + name: "moon cake", + slug: "moon_cake", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🍡": { + name: "dango", + slug: "dango", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„Ÿ": { + name: "dumpling", + slug: "dumpling", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„ ": { + name: "fortune cookie", + slug: "fortune_cookie", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„Ą": { + name: "takeout box", + slug: "takeout_box", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🩀": { + name: "crab", + slug: "crab", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🩞": { + name: "lobster", + slug: "lobster", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🩐": { + name: "shrimp", + slug: "shrimp", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🩑": { + name: "squid", + slug: "squid", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸŠȘ": { + name: "oyster", + slug: "oyster", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🍩": { + name: "soft ice cream", + slug: "soft_ice_cream", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍧": { + name: "shaved ice", + slug: "shaved_ice", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍹": { + name: "ice cream", + slug: "ice_cream", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ©": { + name: "doughnut", + slug: "doughnut", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ": { + name: "cookie", + slug: "cookie", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎂": { + name: "birthday cake", + slug: "birthday_cake", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍰": { + name: "shortcake", + slug: "shortcake", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧁": { + name: "cupcake", + slug: "cupcake", + group: "Food & Drink", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„§": { + name: "pie", + slug: "pie", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ«": { + name: "chocolate bar", + slug: "chocolate_bar", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍬": { + name: "candy", + slug: "candy", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍭": { + name: "lollipop", + slug: "lollipop", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍼": { + name: "custard", + slug: "custard", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍯": { + name: "honey pot", + slug: "honey_pot", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŒ": { + name: "baby bottle", + slug: "baby_bottle", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„›": { + name: "glass of milk", + slug: "glass_of_milk", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "☕": { + name: "hot beverage", + slug: "hot_beverage", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ«–": { + name: "teapot", + slug: "teapot", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ”": { + name: "teacup without handle", + slug: "teacup_without_handle", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ¶": { + name: "sake", + slug: "sake", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŸ": { + name: "bottle with popping cork", + slug: "bottle_with_popping_cork", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ·": { + name: "wine glass", + slug: "wine_glass", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🍾": { + name: "cocktail glass", + slug: "cocktail_glass", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸč": { + name: "tropical drink", + slug: "tropical_drink", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸș": { + name: "beer mug", + slug: "beer_mug", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ»": { + name: "clinking beer mugs", + slug: "clinking_beer_mugs", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„‚": { + name: "clinking glasses", + slug: "clinking_glasses", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„ƒ": { + name: "tumbler glass", + slug: "tumbler_glass", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„€": { + name: "cup with straw", + slug: "cup_with_straw", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🧋": { + name: "bubble tea", + slug: "bubble_tea", + group: "Food & Drink", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🧃": { + name: "beverage box", + slug: "beverage_box", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🧉": { + name: "mate", + slug: "mate", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🧊": { + name: "ice", + slug: "ice", + group: "Food & Drink", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ„ą": { + name: "chopsticks", + slug: "chopsticks", + group: "Food & Drink", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸœïž": { + name: "fork and knife with plate", + slug: "fork_and_knife_with_plate", + group: "Food & Drink", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🍮": { + name: "fork and knife", + slug: "fork_and_knife", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„„": { + name: "spoon", + slug: "spoon", + group: "Food & Drink", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ”Ș": { + name: "kitchen knife", + slug: "kitchen_knife", + group: "Food & Drink", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸș": { + name: "amphora", + slug: "amphora", + group: "Food & Drink", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌍": { + name: "globe showing Europe-Africa", + slug: "globe_showing_europe_africa", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🌎": { + name: "globe showing Americas", + slug: "globe_showing_americas", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🌏": { + name: "globe showing Asia-Australia", + slug: "globe_showing_asia_australia", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌐": { + name: "globe with meridians", + slug: "globe_with_meridians", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ—ș": { + name: "world map", + slug: "world_map", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ—Ÿ": { + name: "map of Japan", + slug: "map_of_japan", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧭": { + name: "compass", + slug: "compass", + group: "Travel & Places", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ”ïž": { + name: "snow-capped mountain", + slug: "snow_capped_mountain", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⛰": { + name: "mountain", + slug: "mountain", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🌋": { + name: "volcano", + slug: "volcano", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—»": { + name: "mount fuji", + slug: "mount_fuji", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•ïž": { + name: "camping", + slug: "camping", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ–ïž": { + name: "beach with umbrella", + slug: "beach_with_umbrella", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸœïž": { + name: "desert", + slug: "desert", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸïž": { + name: "desert island", + slug: "desert_island", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸžïž": { + name: "national park", + slug: "national_park", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŸïž": { + name: "stadium", + slug: "stadium", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›ïž": { + name: "classical building", + slug: "classical_building", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ—ïž": { + name: "building construction", + slug: "building_construction", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ§±": { + name: "brick", + slug: "brick", + group: "Travel & Places", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘš": { + name: "rock", + slug: "rock", + group: "Travel & Places", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘ”": { + name: "wood", + slug: "wood", + group: "Travel & Places", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🛖": { + name: "hut", + slug: "hut", + group: "Travel & Places", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ˜ïž": { + name: "houses", + slug: "houses", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸšïž": { + name: "derelict house", + slug: "derelict_house", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🏠": { + name: "house", + slug: "house", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏡": { + name: "house with garden", + slug: "house_with_garden", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏱": { + name: "office building", + slug: "office_building", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏣": { + name: "Japanese post office", + slug: "japanese_post_office", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€": { + name: "post office", + slug: "post_office", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„": { + name: "hospital", + slug: "hospital", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏩": { + name: "bank", + slug: "bank", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏹": { + name: "hotel", + slug: "hotel", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ©": { + name: "love hotel", + slug: "love_hotel", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ": { + name: "convenience store", + slug: "convenience_store", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ«": { + name: "school", + slug: "school", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏬": { + name: "department store", + slug: "department_store", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏭": { + name: "factory", + slug: "factory", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏯": { + name: "Japanese castle", + slug: "japanese_castle", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏰": { + name: "castle", + slug: "castle", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💒": { + name: "wedding", + slug: "wedding", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—Œ": { + name: "Tokyo tower", + slug: "tokyo_tower", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—œ": { + name: "Statue of Liberty", + slug: "statue_of_liberty", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â›Ș": { + name: "church", + slug: "church", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕌": { + name: "mosque", + slug: "mosque", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛕": { + name: "hindu temple", + slug: "hindu_temple", + group: "Travel & Places", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🕍": { + name: "synagogue", + slug: "synagogue", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "⛩": { + name: "shinto shrine", + slug: "shinto_shrine", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕋": { + name: "kaaba", + slug: "kaaba", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "â›Č": { + name: "fountain", + slug: "fountain", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â›ș": { + name: "tent", + slug: "tent", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌁": { + name: "foggy", + slug: "foggy", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌃": { + name: "night with stars", + slug: "night_with_stars", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ™ïž": { + name: "cityscape", + slug: "cityscape", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🌄": { + name: "sunrise over mountains", + slug: "sunrise_over_mountains", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌅": { + name: "sunrise", + slug: "sunrise", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌆": { + name: "cityscape at dusk", + slug: "cityscape_at_dusk", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌇": { + name: "sunset", + slug: "sunset", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌉": { + name: "bridge at night", + slug: "bridge_at_night", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♚": { + name: "hot springs", + slug: "hot_springs", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎠": { + name: "carousel horse", + slug: "carousel_horse", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎡": { + name: "ferris wheel", + slug: "ferris_wheel", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎱": { + name: "roller coaster", + slug: "roller_coaster", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💈": { + name: "barber pole", + slug: "barber_pole", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽȘ": { + name: "circus tent", + slug: "circus_tent", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚂": { + name: "locomotive", + slug: "locomotive", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚃": { + name: "railway car", + slug: "railway_car", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚄": { + name: "high-speed train", + slug: "high_speed_train", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚅": { + name: "bullet train", + slug: "bullet_train", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚆": { + name: "train", + slug: "train", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚇": { + name: "metro", + slug: "metro", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚈": { + name: "light rail", + slug: "light_rail", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚉": { + name: "station", + slug: "station", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚊": { + name: "tram", + slug: "tram", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚝": { + name: "monorail", + slug: "monorail", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚞": { + name: "mountain railway", + slug: "mountain_railway", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚋": { + name: "tram car", + slug: "tram_car", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚌": { + name: "bus", + slug: "bus", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚍": { + name: "oncoming bus", + slug: "oncoming_bus", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🚎": { + name: "trolleybus", + slug: "trolleybus", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚐": { + name: "minibus", + slug: "minibus", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚑": { + name: "ambulance", + slug: "ambulance", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚒": { + name: "fire engine", + slug: "fire_engine", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚓": { + name: "police car", + slug: "police_car", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚔": { + name: "oncoming police car", + slug: "oncoming_police_car", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🚕": { + name: "taxi", + slug: "taxi", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚖": { + name: "oncoming taxi", + slug: "oncoming_taxi", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚗": { + name: "automobile", + slug: "automobile", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚘": { + name: "oncoming automobile", + slug: "oncoming_automobile", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🚙": { + name: "sport utility vehicle", + slug: "sport_utility_vehicle", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›»": { + name: "pickup truck", + slug: "pickup_truck", + group: "Travel & Places", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🚚": { + name: "delivery truck", + slug: "delivery_truck", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚛": { + name: "articulated lorry", + slug: "articulated_lorry", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚜": { + name: "tractor", + slug: "tractor", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸŽïž": { + name: "racing car", + slug: "racing_car", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸïž": { + name: "motorcycle", + slug: "motorcycle", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›”": { + name: "motor scooter", + slug: "motor_scooter", + group: "Travel & Places", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸŠœ": { + name: "manual wheelchair", + slug: "manual_wheelchair", + group: "Travel & Places", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŠŒ": { + name: "motorized wheelchair", + slug: "motorized_wheelchair", + group: "Travel & Places", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ›ș": { + name: "auto rickshaw", + slug: "auto_rickshaw", + group: "Travel & Places", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸšČ": { + name: "bicycle", + slug: "bicycle", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🛮": { + name: "kick scooter", + slug: "kick_scooter", + group: "Travel & Places", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ›č": { + name: "skateboard", + slug: "skateboard", + group: "Travel & Places", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ›Œ": { + name: "roller skate", + slug: "roller_skate", + group: "Travel & Places", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🚏": { + name: "bus stop", + slug: "bus_stop", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›Łïž": { + name: "motorway", + slug: "motorway", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›€ïž": { + name: "railway track", + slug: "railway_track", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›ąïž": { + name: "oil drum", + slug: "oil_drum", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⛜": { + name: "fuel pump", + slug: "fuel_pump", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚹": { + name: "police car light", + slug: "police_car_light", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸš„": { + name: "horizontal traffic light", + slug: "horizontal_traffic_light", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚩": { + name: "vertical traffic light", + slug: "vertical_traffic_light", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛑": { + name: "stop sign", + slug: "stop_sign", + group: "Travel & Places", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🚧": { + name: "construction", + slug: "construction", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⚓": { + name: "anchor", + slug: "anchor", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â›”": { + name: "sailboat", + slug: "sailboat", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›¶": { + name: "canoe", + slug: "canoe", + group: "Travel & Places", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸš€": { + name: "speedboat", + slug: "speedboat", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›łïž": { + name: "passenger ship", + slug: "passenger_ship", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⛎": { + name: "ferry", + slug: "ferry", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›„ïž": { + name: "motor boat", + slug: "motor_boat", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🚱": { + name: "ship", + slug: "ship", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✈": { + name: "airplane", + slug: "airplane", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›©ïž": { + name: "small airplane", + slug: "small_airplane", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›«": { + name: "airplane departure", + slug: "airplane_departure", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛬": { + name: "airplane arrival", + slug: "airplane_arrival", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸȘ‚": { + name: "parachute", + slug: "parachute", + group: "Travel & Places", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ’ș": { + name: "seat", + slug: "seat", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚁": { + name: "helicopter", + slug: "helicopter", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚟": { + name: "suspension railway", + slug: "suspension_railway", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚠": { + name: "mountain cableway", + slug: "mountain_cableway", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚡": { + name: "aerial tramway", + slug: "aerial_tramway", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ›°ïž": { + name: "satellite", + slug: "satellite", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🚀": { + name: "rocket", + slug: "rocket", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🛾": { + name: "flying saucer", + slug: "flying_saucer", + group: "Travel & Places", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ›Žïž": { + name: "bellhop bell", + slug: "bellhop_bell", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🧳": { + name: "luggage", + slug: "luggage", + group: "Travel & Places", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "⌛": { + name: "hourglass done", + slug: "hourglass_done", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏳": { + name: "hourglass not done", + slug: "hourglass_not_done", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⌚": { + name: "watch", + slug: "watch", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏰": { + name: "alarm clock", + slug: "alarm_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏱": { + name: "stopwatch", + slug: "stopwatch", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "âČ": { + name: "timer clock", + slug: "timer_clock", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ•°ïž": { + name: "mantelpiece clock", + slug: "mantelpiece_clock", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕛": { + name: "twelve o’clock", + slug: "twelve_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕧": { + name: "twelve-thirty", + slug: "twelve_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕐": { + name: "one o’clock", + slug: "one_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕜": { + name: "one-thirty", + slug: "one_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕑": { + name: "two o’clock", + slug: "two_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕝": { + name: "two-thirty", + slug: "two_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕒": { + name: "three o’clock", + slug: "three_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕞": { + name: "three-thirty", + slug: "three_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕓": { + name: "four o’clock", + slug: "four_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕟": { + name: "four-thirty", + slug: "four_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕔": { + name: "five o’clock", + slug: "five_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕠": { + name: "five-thirty", + slug: "five_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕕": { + name: "six o’clock", + slug: "six_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕡": { + name: "six-thirty", + slug: "six_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕖": { + name: "seven o’clock", + slug: "seven_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕱": { + name: "seven-thirty", + slug: "seven_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕗": { + name: "eight o’clock", + slug: "eight_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕣": { + name: "eight-thirty", + slug: "eight_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕘": { + name: "nine o’clock", + slug: "nine_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•€": { + name: "nine-thirty", + slug: "nine_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕙": { + name: "ten o’clock", + slug: "ten_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•„": { + name: "ten-thirty", + slug: "ten_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🕚": { + name: "eleven o’clock", + slug: "eleven_o_clock", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🕩": { + name: "eleven-thirty", + slug: "eleven_thirty", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🌑": { + name: "new moon", + slug: "new_moon", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌒": { + name: "waxing crescent moon", + slug: "waxing_crescent_moon", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌓": { + name: "first quarter moon", + slug: "first_quarter_moon", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌔": { + name: "waxing gibbous moon", + slug: "waxing_gibbous_moon", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌕": { + name: "full moon", + slug: "full_moon", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌖": { + name: "waning gibbous moon", + slug: "waning_gibbous_moon", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌗": { + name: "last quarter moon", + slug: "last_quarter_moon", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌘": { + name: "waning crescent moon", + slug: "waning_crescent_moon", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌙": { + name: "crescent moon", + slug: "crescent_moon", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌚": { + name: "new moon face", + slug: "new_moon_face", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌛": { + name: "first quarter moon face", + slug: "first_quarter_moon_face", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌜": { + name: "last quarter moon face", + slug: "last_quarter_moon_face", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒĄïž": { + name: "thermometer", + slug: "thermometer", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "☀": { + name: "sun", + slug: "sun", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌝": { + name: "full moon face", + slug: "full_moon_face", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🌞": { + name: "sun with face", + slug: "sun_with_face", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸȘ": { + name: "ringed planet", + slug: "ringed_planet", + group: "Travel & Places", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "⭐": { + name: "star", + slug: "star", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌟": { + name: "glowing star", + slug: "glowing_star", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌠": { + name: "shooting star", + slug: "shooting_star", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌌": { + name: "milky way", + slug: "milky_way", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☁": { + name: "cloud", + slug: "cloud", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⛅": { + name: "sun behind cloud", + slug: "sun_behind_cloud", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⛈": { + name: "cloud with lightning and rain", + slug: "cloud_with_lightning_and_rain", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒ€ïž": { + name: "sun behind small cloud", + slug: "sun_behind_small_cloud", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒ„ïž": { + name: "sun behind large cloud", + slug: "sun_behind_large_cloud", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒŠïž": { + name: "sun behind rain cloud", + slug: "sun_behind_rain_cloud", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒ§ïž": { + name: "cloud with rain", + slug: "cloud_with_rain", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒšïž": { + name: "cloud with snow", + slug: "cloud_with_snow", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒ©ïž": { + name: "cloud with lightning", + slug: "cloud_with_lightning", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒȘ": { + name: "tornado", + slug: "tornado", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒ«ïž": { + name: "fog", + slug: "fog", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŒŹïž": { + name: "wind face", + slug: "wind_face", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🌀": { + name: "cyclone", + slug: "cyclone", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌈": { + name: "rainbow", + slug: "rainbow", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌂": { + name: "closed umbrella", + slug: "closed_umbrella", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☂": { + name: "umbrella", + slug: "umbrella", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "☔": { + name: "umbrella with rain drops", + slug: "umbrella_with_rain_drops", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⛱": { + name: "umbrella on ground", + slug: "umbrella_on_ground", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⚡": { + name: "high voltage", + slug: "high_voltage", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❄": { + name: "snowflake", + slug: "snowflake", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☃": { + name: "snowman", + slug: "snowman", + group: "Travel & Places", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⛄": { + name: "snowman without snow", + slug: "snowman_without_snow", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☄": { + name: "comet", + slug: "comet", + group: "Travel & Places", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ”„": { + name: "fire", + slug: "fire", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💧": { + name: "droplet", + slug: "droplet", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🌊": { + name: "water wave", + slug: "water_wave", + group: "Travel & Places", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎃": { + name: "jack-o-lantern", + slug: "jack_o_lantern", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎄": { + name: "Christmas tree", + slug: "christmas_tree", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎆": { + name: "fireworks", + slug: "fireworks", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎇": { + name: "sparkler", + slug: "sparkler", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧹": { + name: "firecracker", + slug: "firecracker", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "✹": { + name: "sparkles", + slug: "sparkles", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎈": { + name: "balloon", + slug: "balloon", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎉": { + name: "party popper", + slug: "party_popper", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎊": { + name: "confetti ball", + slug: "confetti_ball", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎋": { + name: "tanabata tree", + slug: "tanabata_tree", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎍": { + name: "pine decoration", + slug: "pine_decoration", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎎": { + name: "Japanese dolls", + slug: "japanese_dolls", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎏": { + name: "carp streamer", + slug: "carp_streamer", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎐": { + name: "wind chime", + slug: "wind_chime", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎑": { + name: "moon viewing ceremony", + slug: "moon_viewing_ceremony", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧧": { + name: "red envelope", + slug: "red_envelope", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🎀": { + name: "ribbon", + slug: "ribbon", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎁": { + name: "wrapped gift", + slug: "wrapped_gift", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ—ïž": { + name: "reminder ribbon", + slug: "reminder_ribbon", + group: "Activities", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŽŸïž": { + name: "admission tickets", + slug: "admission_tickets", + group: "Activities", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŽ«": { + name: "ticket", + slug: "ticket", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ–ïž": { + name: "military medal", + slug: "military_medal", + group: "Activities", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🏆": { + name: "trophy", + slug: "trophy", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏅": { + name: "sports medal", + slug: "sports_medal", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„‡": { + name: "1st place medal", + slug: "1st_place_medal", + group: "Activities", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„ˆ": { + name: "2nd place medal", + slug: "2nd_place_medal", + group: "Activities", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„‰": { + name: "3rd place medal", + slug: "3rd_place_medal", + group: "Activities", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "âšœ": { + name: "soccer ball", + slug: "soccer_ball", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⚟": { + name: "baseball", + slug: "baseball", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„Ž": { + name: "softball", + slug: "softball", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🏀": { + name: "basketball", + slug: "basketball", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏐": { + name: "volleyball", + slug: "volleyball", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🏈": { + name: "american football", + slug: "american_football", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏉": { + name: "rugby football", + slug: "rugby_football", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸŽŸ": { + name: "tennis", + slug: "tennis", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„": { + name: "flying disc", + slug: "flying_disc", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🎳": { + name: "bowling", + slug: "bowling", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏏": { + name: "cricket game", + slug: "cricket_game", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🏑": { + name: "field hockey", + slug: "field_hockey", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🏒": { + name: "ice hockey", + slug: "ice_hockey", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„": { + name: "lacrosse", + slug: "lacrosse", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🏓": { + name: "ping pong", + slug: "ping_pong", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🏾": { + name: "badminton", + slug: "badminton", + group: "Activities", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ„Š": { + name: "boxing glove", + slug: "boxing_glove", + group: "Activities", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„‹": { + name: "martial arts uniform", + slug: "martial_arts_uniform", + group: "Activities", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸ„…": { + name: "goal net", + slug: "goal_net", + group: "Activities", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "⛳": { + name: "flag in hole", + slug: "flag_in_hole", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⛞": { + name: "ice skate", + slug: "ice_skate", + group: "Activities", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🎣": { + name: "fishing pole", + slug: "fishing_pole", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ€ż": { + name: "diving mask", + slug: "diving_mask", + group: "Activities", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŽœ": { + name: "running shirt", + slug: "running_shirt", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎿": { + name: "skis", + slug: "skis", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›·": { + name: "sled", + slug: "sled", + group: "Activities", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ„Œ": { + name: "curling stone", + slug: "curling_stone", + group: "Activities", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🎯": { + name: "direct hit", + slug: "direct_hit", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ€": { + name: "yo-yo", + slug: "yo_yo", + group: "Activities", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸȘ": { + name: "kite", + slug: "kite", + group: "Activities", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŽ±": { + name: "pool 8 ball", + slug: "pool_8_ball", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔼": { + name: "crystal ball", + slug: "crystal_ball", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ„": { + name: "magic wand", + slug: "magic_wand", + group: "Activities", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🧿": { + name: "nazar amulet", + slug: "nazar_amulet", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🎼": { + name: "video game", + slug: "video_game", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•č": { + name: "joystick", + slug: "joystick", + group: "Activities", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🎰": { + name: "slot machine", + slug: "slot_machine", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽČ": { + name: "game die", + slug: "game_die", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ§©": { + name: "puzzle piece", + slug: "puzzle_piece", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🧾": { + name: "teddy bear", + slug: "teddy_bear", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘ…": { + name: "piñata", + slug: "pinata", + group: "Activities", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘ†": { + name: "nesting dolls", + slug: "nesting_dolls", + group: "Activities", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "♠": { + name: "spade suit", + slug: "spade_suit", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♄": { + name: "heart suit", + slug: "heart_suit", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♊": { + name: "diamond suit", + slug: "diamond_suit", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â™Łïž": { + name: "club suit", + slug: "club_suit", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♟": { + name: "chess pawn", + slug: "chess_pawn", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🃏": { + name: "joker", + slug: "joker", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🀄": { + name: "mahjong red dragon", + slug: "mahjong_red_dragon", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎮": { + name: "flower playing cards", + slug: "flower_playing_cards", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎭": { + name: "performing arts", + slug: "performing_arts", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ–Œïž": { + name: "framed picture", + slug: "framed_picture", + group: "Activities", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🎹": { + name: "artist palette", + slug: "artist_palette", + group: "Activities", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ§”": { + name: "thread", + slug: "thread", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘĄ": { + name: "sewing needle", + slug: "sewing_needle", + group: "Activities", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ§¶": { + name: "yarn", + slug: "yarn", + group: "Activities", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘą": { + name: "knot", + slug: "knot", + group: "Activities", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "👓": { + name: "glasses", + slug: "glasses", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•¶ïž": { + name: "sunglasses", + slug: "sunglasses", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ„œ": { + name: "goggles", + slug: "goggles", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„Œ": { + name: "lab coat", + slug: "lab_coat", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸŠș": { + name: "safety vest", + slug: "safety_vest", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "👔": { + name: "necktie", + slug: "necktie", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👕": { + name: "t-shirt", + slug: "t_shirt", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👖": { + name: "jeans", + slug: "jeans", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧣": { + name: "scarf", + slug: "scarf", + group: "Objects", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ§€": { + name: "gloves", + slug: "gloves", + group: "Objects", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸ§„": { + name: "coat", + slug: "coat", + group: "Objects", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🧩": { + name: "socks", + slug: "socks", + group: "Objects", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "👗": { + name: "dress", + slug: "dress", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👘": { + name: "kimono", + slug: "kimono", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„»": { + name: "sari", + slug: "sari", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ©±": { + name: "one-piece swimsuit", + slug: "one_piece_swimsuit", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ©Č": { + name: "briefs", + slug: "briefs", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ©ł": { + name: "shorts", + slug: "shorts", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "👙": { + name: "bikini", + slug: "bikini", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👚": { + name: "woman’s clothes", + slug: "woman_s_clothes", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👛": { + name: "purse", + slug: "purse", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👜": { + name: "handbag", + slug: "handbag", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👝": { + name: "clutch bag", + slug: "clutch_bag", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ›ïž": { + name: "shopping bags", + slug: "shopping_bags", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🎒": { + name: "backpack", + slug: "backpack", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ©Ž": { + name: "thong sandal", + slug: "thong_sandal", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "👞": { + name: "man’s shoe", + slug: "man_s_shoe", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👟": { + name: "running shoe", + slug: "running_shoe", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ„Ÿ": { + name: "hiking boot", + slug: "hiking_boot", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ„ż": { + name: "flat shoe", + slug: "flat_shoe", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "👠": { + name: "high-heeled shoe", + slug: "high_heeled_shoe", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👡": { + name: "woman’s sandal", + slug: "woman_s_sandal", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ©°": { + name: "ballet shoes", + slug: "ballet_shoes", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "👱": { + name: "woman’s boot", + slug: "woman_s_boot", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👑": { + name: "crown", + slug: "crown", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "👒": { + name: "woman’s hat", + slug: "woman_s_hat", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ©": { + name: "top hat", + slug: "top_hat", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎓": { + name: "graduation cap", + slug: "graduation_cap", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧱": { + name: "billed cap", + slug: "billed_cap", + group: "Objects", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸȘ–": { + name: "military helmet", + slug: "military_helmet", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "⛑": { + name: "rescue worker’s helmet", + slug: "rescue_worker_s_helmet", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📿": { + name: "prayer beads", + slug: "prayer_beads", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "💄": { + name: "lipstick", + slug: "lipstick", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💍": { + name: "ring", + slug: "ring", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💎": { + name: "gem stone", + slug: "gem_stone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔇": { + name: "muted speaker", + slug: "muted_speaker", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔈": { + name: "speaker low volume", + slug: "speaker_low_volume", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🔉": { + name: "speaker medium volume", + slug: "speaker_medium_volume", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔊": { + name: "speaker high volume", + slug: "speaker_high_volume", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📱": { + name: "loudspeaker", + slug: "loudspeaker", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📣": { + name: "megaphone", + slug: "megaphone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📯": { + name: "postal horn", + slug: "postal_horn", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔔": { + name: "bell", + slug: "bell", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔕": { + name: "bell with slash", + slug: "bell_with_slash", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸŽŒ": { + name: "musical score", + slug: "musical_score", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ”": { + name: "musical note", + slug: "musical_note", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ¶": { + name: "musical notes", + slug: "musical_notes", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ™ïž": { + name: "studio microphone", + slug: "studio_microphone", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŽšïž": { + name: "level slider", + slug: "level_slider", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŽ›ïž": { + name: "control knobs", + slug: "control_knobs", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸŽ€": { + name: "microphone", + slug: "microphone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎧": { + name: "headphone", + slug: "headphone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“»": { + name: "radio", + slug: "radio", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ·": { + name: "saxophone", + slug: "saxophone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ—": { + name: "accordion", + slug: "accordion", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🎾": { + name: "guitar", + slug: "guitar", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽč": { + name: "musical keyboard", + slug: "musical_keyboard", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽș": { + name: "trumpet", + slug: "trumpet", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽ»": { + name: "violin", + slug: "violin", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ•": { + name: "banjo", + slug: "banjo", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ„": { + name: "drum", + slug: "drum", + group: "Objects", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "đŸȘ˜": { + name: "long drum", + slug: "long_drum", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ“±": { + name: "mobile phone", + slug: "mobile_phone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“Č": { + name: "mobile phone with arrow", + slug: "mobile_phone_with_arrow", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☎": { + name: "telephone", + slug: "telephone", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📞": { + name: "telephone receiver", + slug: "telephone_receiver", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📟": { + name: "pager", + slug: "pager", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📠": { + name: "fax machine", + slug: "fax_machine", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔋": { + name: "battery", + slug: "battery", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔌": { + name: "electric plug", + slug: "electric_plug", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’»": { + name: "laptop", + slug: "laptop", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ–„ïž": { + name: "desktop computer", + slug: "desktop_computer", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ–šïž": { + name: "printer", + slug: "printer", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⌚": { + name: "keyboard", + slug: "keyboard", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ–±ïž": { + name: "computer mouse", + slug: "computer_mouse", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ–Č": { + name: "trackball", + slug: "trackball", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ’œ": { + name: "computer disk", + slug: "computer_disk", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’Ÿ": { + name: "floppy disk", + slug: "floppy_disk", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💿": { + name: "optical disk", + slug: "optical_disk", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📀": { + name: "dvd", + slug: "dvd", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🧼": { + name: "abacus", + slug: "abacus", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸŽ„": { + name: "movie camera", + slug: "movie_camera", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŽžïž": { + name: "film frames", + slug: "film_frames", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ“œïž": { + name: "film projector", + slug: "film_projector", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🎬": { + name: "clapper board", + slug: "clapper_board", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“ș": { + name: "television", + slug: "television", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“·": { + name: "camera", + slug: "camera", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📾": { + name: "camera with flash", + slug: "camera_with_flash", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ“č": { + name: "video camera", + slug: "video_camera", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“Œ": { + name: "videocassette", + slug: "videocassette", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔍": { + name: "magnifying glass tilted left", + slug: "magnifying_glass_tilted_left", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔎": { + name: "magnifying glass tilted right", + slug: "magnifying_glass_tilted_right", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ•Żïž": { + name: "candle", + slug: "candle", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "💡": { + name: "light bulb", + slug: "light_bulb", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔩": { + name: "flashlight", + slug: "flashlight", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏼": { + name: "red paper lantern", + slug: "red_paper_lantern", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ”": { + name: "diya lamp", + slug: "diya_lamp", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "📔": { + name: "notebook with decorative cover", + slug: "notebook_with_decorative_cover", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📕": { + name: "closed book", + slug: "closed_book", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📖": { + name: "open book", + slug: "open_book", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📗": { + name: "green book", + slug: "green_book", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📘": { + name: "blue book", + slug: "blue_book", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📙": { + name: "orange book", + slug: "orange_book", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📚": { + name: "books", + slug: "books", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📓": { + name: "notebook", + slug: "notebook", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📒": { + name: "ledger", + slug: "ledger", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📃": { + name: "page with curl", + slug: "page_with_curl", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📜": { + name: "scroll", + slug: "scroll", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📄": { + name: "page facing up", + slug: "page_facing_up", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📰": { + name: "newspaper", + slug: "newspaper", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—žïž": { + name: "rolled-up newspaper", + slug: "rolled_up_newspaper", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📑": { + name: "bookmark tabs", + slug: "bookmark_tabs", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔖": { + name: "bookmark", + slug: "bookmark", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ·ïž": { + name: "label", + slug: "label", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "💰": { + name: "money bag", + slug: "money_bag", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ™": { + name: "coin", + slug: "coin", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "💮": { + name: "yen banknote", + slug: "yen_banknote", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’”": { + name: "dollar banknote", + slug: "dollar_banknote", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’¶": { + name: "euro banknote", + slug: "euro_banknote", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ’·": { + name: "pound banknote", + slug: "pound_banknote", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "💾": { + name: "money with wings", + slug: "money_with_wings", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💳": { + name: "credit card", + slug: "credit_card", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ§Ÿ": { + name: "receipt", + slug: "receipt", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ’č": { + name: "chart increasing with yen", + slug: "chart_increasing_with_yen", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✉": { + name: "envelope", + slug: "envelope", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📧": { + name: "e-mail", + slug: "e_mail", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📹": { + name: "incoming envelope", + slug: "incoming_envelope", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“©": { + name: "envelope with arrow", + slug: "envelope_with_arrow", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“€": { + name: "outbox tray", + slug: "outbox_tray", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“„": { + name: "inbox tray", + slug: "inbox_tray", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📩": { + name: "package", + slug: "package", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“«": { + name: "closed mailbox with raised flag", + slug: "closed_mailbox_with_raised_flag", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ“Ș": { + name: "closed mailbox with lowered flag", + slug: "closed_mailbox_with_lowered_flag", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📬": { + name: "open mailbox with raised flag", + slug: "open_mailbox_with_raised_flag", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📭": { + name: "open mailbox with lowered flag", + slug: "open_mailbox_with_lowered_flag", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📼": { + name: "postbox", + slug: "postbox", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—łïž": { + name: "ballot box with ballot", + slug: "ballot_box_with_ballot", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "✏": { + name: "pencil", + slug: "pencil", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✒": { + name: "black nib", + slug: "black_nib", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ–‹ïž": { + name: "fountain pen", + slug: "fountain_pen", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ–Šïž": { + name: "pen", + slug: "pen", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ–Œïž": { + name: "paintbrush", + slug: "paintbrush", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ–ïž": { + name: "crayon", + slug: "crayon", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📝": { + name: "memo", + slug: "memo", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’Œ": { + name: "briefcase", + slug: "briefcase", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📁": { + name: "file folder", + slug: "file_folder", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📂": { + name: "open file folder", + slug: "open_file_folder", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—‚ïž": { + name: "card index dividers", + slug: "card_index_dividers", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📅": { + name: "calendar", + slug: "calendar", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📆": { + name: "tear-off calendar", + slug: "tear_off_calendar", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—’ïž": { + name: "spiral notepad", + slug: "spiral_notepad", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ—“ïž": { + name: "spiral calendar", + slug: "spiral_calendar", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📇": { + name: "card index", + slug: "card_index", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📈": { + name: "chart increasing", + slug: "chart_increasing", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📉": { + name: "chart decreasing", + slug: "chart_decreasing", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📊": { + name: "bar chart", + slug: "bar_chart", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📋": { + name: "clipboard", + slug: "clipboard", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📌": { + name: "pushpin", + slug: "pushpin", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📍": { + name: "round pushpin", + slug: "round_pushpin", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📎": { + name: "paperclip", + slug: "paperclip", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ–‡ïž": { + name: "linked paperclips", + slug: "linked_paperclips", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "📏": { + name: "straight ruler", + slug: "straight_ruler", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📐": { + name: "triangular ruler", + slug: "triangular_ruler", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✂": { + name: "scissors", + slug: "scissors", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—ƒïž": { + name: "card file box", + slug: "card_file_box", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ—„ïž": { + name: "file cabinet", + slug: "file_cabinet", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ—‘ïž": { + name: "wastebasket", + slug: "wastebasket", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🔒": { + name: "locked", + slug: "locked", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔓": { + name: "unlocked", + slug: "unlocked", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔏": { + name: "locked with pen", + slug: "locked_with_pen", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔐": { + name: "locked with key", + slug: "locked_with_key", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔑": { + name: "key", + slug: "key", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ—ïž": { + name: "old key", + slug: "old_key", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "🔹": { + name: "hammer", + slug: "hammer", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ“": { + name: "axe", + slug: "axe", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "⛏": { + name: "pick", + slug: "pick", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⚒": { + name: "hammer and pick", + slug: "hammer_and_pick", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ› ïž": { + name: "hammer and wrench", + slug: "hammer_and_wrench", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ—Ąïž": { + name: "dagger", + slug: "dagger", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⚔": { + name: "crossed swords", + slug: "crossed_swords", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ”«": { + name: "water pistol", + slug: "water_pistol", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘƒ": { + name: "boomerang", + slug: "boomerang", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸč": { + name: "bow and arrow", + slug: "bow_and_arrow", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ›Ąïž": { + name: "shield", + slug: "shield", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸȘš": { + name: "carpentry saw", + slug: "carpentry_saw", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🔧": { + name: "wrench", + slug: "wrench", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ›": { + name: "screwdriver", + slug: "screwdriver", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ”©": { + name: "nut and bolt", + slug: "nut_and_bolt", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⚙": { + name: "gear", + slug: "gear", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ—œïž": { + name: "clamp", + slug: "clamp", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⚖": { + name: "balance scale", + slug: "balance_scale", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🩯": { + name: "white cane", + slug: "white_cane", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🔗": { + name: "link", + slug: "link", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⛓": { + name: "chains", + slug: "chains", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸȘ": { + name: "hook", + slug: "hook", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🧰": { + name: "toolbox", + slug: "toolbox", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ§Č": { + name: "magnet", + slug: "magnet", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘœ": { + name: "ladder", + slug: "ladder", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "⚗": { + name: "alembic", + slug: "alembic", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ§Ș": { + name: "test tube", + slug: "test_tube", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ§«": { + name: "petri dish", + slug: "petri_dish", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🧬": { + name: "dna", + slug: "dna", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🔬": { + name: "microscope", + slug: "microscope", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔭": { + name: "telescope", + slug: "telescope", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "📡": { + name: "satellite antenna", + slug: "satellite_antenna", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💉": { + name: "syringe", + slug: "syringe", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ©ž": { + name: "drop of blood", + slug: "drop_of_blood", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "💊": { + name: "pill", + slug: "pill", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ©č": { + name: "adhesive bandage", + slug: "adhesive_bandage", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ©ș": { + name: "stethoscope", + slug: "stethoscope", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸšȘ": { + name: "door", + slug: "door", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🛗": { + name: "elevator", + slug: "elevator", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘž": { + name: "mirror", + slug: "mirror", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘŸ": { + name: "window", + slug: "window", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ›ïž": { + name: "bed", + slug: "bed", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ›‹ïž": { + name: "couch and lamp", + slug: "couch_and_lamp", + group: "Objects", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸȘ‘": { + name: "chair", + slug: "chair", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸšœ": { + name: "toilet", + slug: "toilet", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ ": { + name: "plunger", + slug: "plunger", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🚿": { + name: "shower", + slug: "shower", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛁": { + name: "bathtub", + slug: "bathtub", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸȘ€": { + name: "mouse trap", + slug: "mouse_trap", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸȘ’": { + name: "razor", + slug: "razor", + group: "Objects", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🧮": { + name: "lotion bottle", + slug: "lotion_bottle", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ§·": { + name: "safety pin", + slug: "safety_pin", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ§č": { + name: "broom", + slug: "broom", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ§ș": { + name: "basket", + slug: "basket", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸ§»": { + name: "roll of paper", + slug: "roll_of_paper", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘŁ": { + name: "bucket", + slug: "bucket", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ§Œ": { + name: "soap", + slug: "soap", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "đŸȘ„": { + name: "toothbrush", + slug: "toothbrush", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸ§œ": { + name: "sponge", + slug: "sponge", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🧯": { + name: "fire extinguisher", + slug: "fire_extinguisher", + group: "Objects", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🛒": { + name: "shopping cart", + slug: "shopping_cart", + group: "Objects", + emoji_version: "3.0", + unicode_version: "3.0", + skin_tone_support: false +}, + "🚬": { + name: "cigarette", + slug: "cigarette", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⚰": { + name: "coffin", + slug: "coffin", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸȘŠ": { + name: "headstone", + slug: "headstone", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "⚱": { + name: "funeral urn", + slug: "funeral_urn", + group: "Objects", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🗿": { + name: "moai", + slug: "moai", + group: "Objects", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸȘ§": { + name: "placard", + slug: "placard", + group: "Objects", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "🏧": { + name: "ATM sign", + slug: "atm_sign", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚼": { + name: "litter in bin sign", + slug: "litter_in_bin_sign", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚰": { + name: "potable water", + slug: "potable_water", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "♿": { + name: "wheelchair symbol", + slug: "wheelchair_symbol", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸšč": { + name: "men’s room", + slug: "men_s_room", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸšș": { + name: "women’s room", + slug: "women_s_room", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸš»": { + name: "restroom", + slug: "restroom", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸšŒ": { + name: "baby symbol", + slug: "baby_symbol", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸšŸ": { + name: "water closet", + slug: "water_closet", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🛂": { + name: "passport control", + slug: "passport_control", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛃": { + name: "customs", + slug: "customs", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛄": { + name: "baggage claim", + slug: "baggage_claim", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🛅": { + name: "left luggage", + slug: "left_luggage", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "⚠": { + name: "warning", + slug: "warning", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚾": { + name: "children crossing", + slug: "children_crossing", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "⛔": { + name: "no entry", + slug: "no_entry", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸš«": { + name: "prohibited", + slug: "prohibited", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚳": { + name: "no bicycles", + slug: "no_bicycles", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🚭": { + name: "no smoking", + slug: "no_smoking", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🚯": { + name: "no littering", + slug: "no_littering", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸš±": { + name: "non-potable water", + slug: "non_potable_water", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸš·": { + name: "no pedestrians", + slug: "no_pedestrians", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ“”": { + name: "no mobile phones", + slug: "no_mobile_phones", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔞": { + name: "no one under eighteen", + slug: "no_one_under_eighteen", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â˜ąïž": { + name: "radioactive", + slug: "radioactive", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "â˜Łïž": { + name: "biohazard", + slug: "biohazard", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "âŹ†ïž": { + name: "up arrow", + slug: "up_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↗": { + name: "up-right arrow", + slug: "up_right_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âžĄïž": { + name: "right arrow", + slug: "right_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↘": { + name: "down-right arrow", + slug: "down_right_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âŹ‡ïž": { + name: "down arrow", + slug: "down_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↙": { + name: "down-left arrow", + slug: "down_left_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âŹ…ïž": { + name: "left arrow", + slug: "left_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↖": { + name: "up-left arrow", + slug: "up_left_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↕": { + name: "up-down arrow", + slug: "up_down_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↔": { + name: "left-right arrow", + slug: "left_right_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "↩": { + name: "right arrow curving left", + slug: "right_arrow_curving_left", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â†Ș": { + name: "left arrow curving right", + slug: "left_arrow_curving_right", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "‎": { + name: "right arrow curving up", + slug: "right_arrow_curving_up", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "—": { + name: "right arrow curving down", + slug: "right_arrow_curving_down", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔃": { + name: "clockwise vertical arrows", + slug: "clockwise_vertical_arrows", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔄": { + name: "counterclockwise arrows button", + slug: "counterclockwise_arrows_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔙": { + name: "BACK arrow", + slug: "back_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔚": { + name: "END arrow", + slug: "end_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔛": { + name: "ON! arrow", + slug: "on_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔜": { + name: "SOON arrow", + slug: "soon_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔝": { + name: "TOP arrow", + slug: "top_arrow", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🛐": { + name: "place of worship", + slug: "place_of_worship", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "⚛": { + name: "atom symbol", + slug: "atom_symbol", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ•‰ïž": { + name: "om", + slug: "om", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "âœĄïž": { + name: "star of David", + slug: "star_of_david", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "☞": { + name: "wheel of dharma", + slug: "wheel_of_dharma", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "â˜Żïž": { + name: "yin yang", + slug: "yin_yang", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "✝": { + name: "latin cross", + slug: "latin_cross", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "☊": { + name: "orthodox cross", + slug: "orthodox_cross", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "â˜Ș": { + name: "star and crescent", + slug: "star_and_crescent", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "â˜źïž": { + name: "peace symbol", + slug: "peace_symbol", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🕎": { + name: "menorah", + slug: "menorah", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔯": { + name: "dotted six-pointed star", + slug: "dotted_six_pointed_star", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♈": { + name: "Aries", + slug: "aries", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♉": { + name: "Taurus", + slug: "taurus", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♊": { + name: "Gemini", + slug: "gemini", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♋": { + name: "Cancer", + slug: "cancer", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♌": { + name: "Leo", + slug: "leo", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♍": { + name: "Virgo", + slug: "virgo", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♎": { + name: "Libra", + slug: "libra", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♏": { + name: "Scorpio", + slug: "scorpio", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♐": { + name: "Sagittarius", + slug: "sagittarius", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♑": { + name: "Capricorn", + slug: "capricorn", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♒": { + name: "Aquarius", + slug: "aquarius", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♓": { + name: "Pisces", + slug: "pisces", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⛎": { + name: "Ophiuchus", + slug: "ophiuchus", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔀": { + name: "shuffle tracks button", + slug: "shuffle_tracks_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔁": { + name: "repeat button", + slug: "repeat_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔂": { + name: "repeat single button", + slug: "repeat_single_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "▶": { + name: "play button", + slug: "play_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏩": { + name: "fast-forward button", + slug: "fast_forward_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏭": { + name: "next track button", + slug: "next_track_button", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "âŻïž": { + name: "play or pause button", + slug: "play_or_pause_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "◀": { + name: "reverse button", + slug: "reverse_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âȘ": { + name: "fast reverse button", + slug: "fast_reverse_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âźïž": { + name: "last track button", + slug: "last_track_button", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸ”Œ": { + name: "upwards button", + slug: "upwards_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏫": { + name: "fast up button", + slug: "fast_up_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”œ": { + name: "downwards button", + slug: "downwards_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏬": { + name: "fast down button", + slug: "fast_down_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⏞": { + name: "pause button", + slug: "pause_button", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "âč": { + name: "stop button", + slug: "stop_button", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "âș": { + name: "record button", + slug: "record_button", + group: "Symbols", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "⏏": { + name: "eject button", + slug: "eject_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🎩": { + name: "cinema", + slug: "cinema", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔅": { + name: "dim button", + slug: "dim_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "🔆": { + name: "bright button", + slug: "bright_button", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ“¶": { + name: "antenna bars", + slug: "antenna_bars", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📳": { + name: "vibration mode", + slug: "vibration_mode", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📮": { + name: "mobile phone off", + slug: "mobile_phone_off", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♀": { + name: "female sign", + slug: "female_sign", + group: "Symbols", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "♂": { + name: "male sign", + slug: "male_sign", + group: "Symbols", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "⚧": { + name: "transgender symbol", + slug: "transgender_symbol", + group: "Symbols", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "✖": { + name: "multiply", + slug: "multiply", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "➕": { + name: "plus", + slug: "plus", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "➖": { + name: "minus", + slug: "minus", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "➗": { + name: "divide", + slug: "divide", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "♟": { + name: "infinity", + slug: "infinity", + group: "Symbols", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "‌": { + name: "double exclamation mark", + slug: "double_exclamation_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⁉": { + name: "exclamation question mark", + slug: "exclamation_question_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❓": { + name: "red question mark", + slug: "red_question_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❔": { + name: "white question mark", + slug: "white_question_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❕": { + name: "white exclamation mark", + slug: "white_exclamation_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❗": { + name: "red exclamation mark", + slug: "red_exclamation_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "ă€°ïž": { + name: "wavy dash", + slug: "wavy_dash", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’±": { + name: "currency exchange", + slug: "currency_exchange", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ’Č": { + name: "heavy dollar sign", + slug: "heavy_dollar_sign", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⚕": { + name: "medical symbol", + slug: "medical_symbol", + group: "Symbols", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "♻": { + name: "recycling symbol", + slug: "recycling_symbol", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⚜": { + name: "fleur-de-lis", + slug: "fleur_de_lis", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸ”±": { + name: "trident emblem", + slug: "trident_emblem", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "📛": { + name: "name badge", + slug: "name_badge", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔰": { + name: "Japanese symbol for beginner", + slug: "japanese_symbol_for_beginner", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⭕": { + name: "hollow red circle", + slug: "hollow_red_circle", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✅": { + name: "check mark button", + slug: "check_mark_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "☑": { + name: "check box with check", + slug: "check_box_with_check", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✔": { + name: "check mark", + slug: "check_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❌": { + name: "cross mark", + slug: "cross_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❎": { + name: "cross mark button", + slug: "cross_mark_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "➰": { + name: "curly loop", + slug: "curly_loop", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "➿": { + name: "double curly loop", + slug: "double_curly_loop", + group: "Symbols", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "ă€œïž": { + name: "part alternation mark", + slug: "part_alternation_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âœłïž": { + name: "eight-spoked asterisk", + slug: "eight_spoked_asterisk", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "✎": { + name: "eight-pointed star", + slug: "eight_pointed_star", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "❇": { + name: "sparkle", + slug: "sparkle", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "©": { + name: "copyright", + slug: "copyright", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "Âźïž": { + name: "registered", + slug: "registered", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â„ąïž": { + name: "trade mark", + slug: "trade_mark", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "#ïžâƒŁ": { + name: "keycap #", + slug: "keycap_", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "*ïžâƒŁ": { + name: "keycap *", + slug: "keycap_", + group: "Symbols", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "0ïžâƒŁ": { + name: "keycap 0", + slug: "keycap_0", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "1ïžâƒŁ": { + name: "keycap 1", + slug: "keycap_1", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "2ïžâƒŁ": { + name: "keycap 2", + slug: "keycap_2", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "3ïžâƒŁ": { + name: "keycap 3", + slug: "keycap_3", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "4ïžâƒŁ": { + name: "keycap 4", + slug: "keycap_4", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "5ïžâƒŁ": { + name: "keycap 5", + slug: "keycap_5", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "6ïžâƒŁ": { + name: "keycap 6", + slug: "keycap_6", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "7ïžâƒŁ": { + name: "keycap 7", + slug: "keycap_7", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "8ïžâƒŁ": { + name: "keycap 8", + slug: "keycap_8", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "9ïžâƒŁ": { + name: "keycap 9", + slug: "keycap_9", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔟": { + name: "keycap 10", + slug: "keycap_10", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔠": { + name: "input latin uppercase", + slug: "input_latin_uppercase", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔡": { + name: "input latin lowercase", + slug: "input_latin_lowercase", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔱": { + name: "input numbers", + slug: "input_numbers", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔣": { + name: "input symbols", + slug: "input_symbols", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”€": { + name: "input latin letters", + slug: "input_latin_letters", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ…°ïž": { + name: "A button (blood type)", + slug: "a_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆎": { + name: "AB button (blood type)", + slug: "ab_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ…±ïž": { + name: "B button (blood type)", + slug: "b_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆑": { + name: "CL button", + slug: "cl_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆒": { + name: "COOL button", + slug: "cool_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆓": { + name: "FREE button", + slug: "free_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â„č": { + name: "information", + slug: "information", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆔": { + name: "ID button", + slug: "id_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "Ⓜ": { + name: "circled M", + slug: "circled_m", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆕": { + name: "NEW button", + slug: "new_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆖": { + name: "NG button", + slug: "ng_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ…Ÿïž": { + name: "O button (blood type)", + slug: "o_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆗": { + name: "OK button", + slug: "ok_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ…żïž": { + name: "P button", + slug: "p_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆘": { + name: "SOS button", + slug: "sos_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆙": { + name: "UP! button", + slug: "up_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🆚": { + name: "VS button", + slug: "vs_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🈁": { + name: "Japanese “here” button", + slug: "japanese_here_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆ‚ïž": { + name: "Japanese “service charge” button", + slug: "japanese_service_charge_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆ·ïž": { + name: "Japanese “monthly amount” button", + slug: "japanese_monthly_amount_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆ¶": { + name: "Japanese “not free of charge” button", + slug: "japanese_not_free_of_charge_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🈯": { + name: "Japanese “reserved” button", + slug: "japanese_reserved_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🉐": { + name: "Japanese “bargain” button", + slug: "japanese_bargain_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆč": { + name: "Japanese “discount” button", + slug: "japanese_discount_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🈚": { + name: "Japanese “free of charge” button", + slug: "japanese_free_of_charge_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆČ": { + name: "Japanese “prohibited” button", + slug: "japanese_prohibited_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🉑": { + name: "Japanese “acceptable” button", + slug: "japanese_acceptable_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🈾": { + name: "Japanese “application” button", + slug: "japanese_application_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🈮": { + name: "Japanese “passing grade” button", + slug: "japanese_passing_grade_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🈳": { + name: "Japanese “vacancy” button", + slug: "japanese_vacancy_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "ăŠ—ïž": { + name: "Japanese “congratulations” button", + slug: "japanese_congratulations_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "ăŠ™ïž": { + name: "Japanese “secret” button", + slug: "japanese_secret_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆș": { + name: "Japanese “open for business” button", + slug: "japanese_open_for_business_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸˆ”": { + name: "Japanese “no vacancy” button", + slug: "japanese_no_vacancy_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔮": { + name: "red circle", + slug: "red_circle", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🟠": { + name: "orange circle", + slug: "orange_circle", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🟡": { + name: "yellow circle", + slug: "yellow_circle", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🟱": { + name: "green circle", + slug: "green_circle", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸ””": { + name: "blue circle", + slug: "blue_circle", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🟣": { + name: "purple circle", + slug: "purple_circle", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŸ€": { + name: "brown circle", + slug: "brown_circle", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "⚫": { + name: "black circle", + slug: "black_circle", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "âšȘ": { + name: "white circle", + slug: "white_circle", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸŸ„": { + name: "red square", + slug: "red_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🟧": { + name: "orange square", + slug: "orange_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🟹": { + name: "yellow square", + slug: "yellow_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŸ©": { + name: "green square", + slug: "green_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "🟩": { + name: "blue square", + slug: "blue_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŸȘ": { + name: "purple square", + slug: "purple_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "đŸŸ«": { + name: "brown square", + slug: "brown_square", + group: "Symbols", + emoji_version: "12.0", + unicode_version: "12.0", + skin_tone_support: false +}, + "⬛": { + name: "black large square", + slug: "black_large_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "⬜": { + name: "white large square", + slug: "white_large_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "◌": { + name: "black medium square", + slug: "black_medium_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "◻": { + name: "white medium square", + slug: "white_medium_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â—Ÿ": { + name: "black medium-small square", + slug: "black_medium_small_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â—œ": { + name: "white medium-small square", + slug: "white_medium_small_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "â–Ș": { + name: "black small square", + slug: "black_small_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "▫": { + name: "white small square", + slug: "white_small_square", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”¶": { + name: "large orange diamond", + slug: "large_orange_diamond", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”·": { + name: "large blue diamond", + slug: "large_blue_diamond", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔾": { + name: "small orange diamond", + slug: "small_orange_diamond", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”č": { + name: "small blue diamond", + slug: "small_blue_diamond", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”ș": { + name: "red triangle pointed up", + slug: "red_triangle_pointed_up", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”»": { + name: "red triangle pointed down", + slug: "red_triangle_pointed_down", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "💠": { + name: "diamond with a dot", + slug: "diamond_with_a_dot", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔘": { + name: "radio button", + slug: "radio_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🔳": { + name: "white square button", + slug: "white_square_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ”Č": { + name: "black square button", + slug: "black_square_button", + group: "Symbols", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏁": { + name: "chequered flag", + slug: "chequered_flag", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸš©": { + name: "triangular flag", + slug: "triangular_flag", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🎌": { + name: "crossed flags", + slug: "crossed_flags", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🏮": { + name: "black flag", + slug: "black_flag", + group: "Flags", + emoji_version: "1.0", + unicode_version: "1.0", + skin_tone_support: false +}, + "đŸłïž": { + name: "white flag", + slug: "white_flag", + group: "Flags", + emoji_version: "0.7", + unicode_version: "0.7", + skin_tone_support: false +}, + "đŸłïžâ€đŸŒˆ": { + name: "rainbow flag", + slug: "rainbow_flag", + group: "Flags", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸłïžâ€âš§ïž": { + name: "transgender flag", + slug: "transgender_flag", + group: "Flags", + emoji_version: "13.0", + unicode_version: "13.0", + skin_tone_support: false +}, + "đŸŽâ€â˜ ïž": { + name: "pirate flag", + slug: "pirate_flag", + group: "Flags", + emoji_version: "11.0", + unicode_version: "11.0", + skin_tone_support: false +}, + "🇩🇹": { + name: "flag Ascension Island", + slug: "flag_ascension_island", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡©": { + name: "flag Andorra", + slug: "flag_andorra", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩đŸ‡Ș": { + name: "flag United Arab Emirates", + slug: "flag_united_arab_emirates", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡«": { + name: "flag Afghanistan", + slug: "flag_afghanistan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩🇬": { + name: "flag Antigua & Barbuda", + slug: "flag_antigua_barbuda", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩🇼": { + name: "flag Anguilla", + slug: "flag_anguilla", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡±": { + name: "flag Albania", + slug: "flag_albania", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩đŸ‡Č": { + name: "flag Armenia", + slug: "flag_armenia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩🇮": { + name: "flag Angola", + slug: "flag_angola", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡¶": { + name: "flag Antarctica", + slug: "flag_antarctica", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡·": { + name: "flag Argentina", + slug: "flag_argentina", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩🇾": { + name: "flag American Samoa", + slug: "flag_american_samoa", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩đŸ‡č": { + name: "flag Austria", + slug: "flag_austria", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩đŸ‡ș": { + name: "flag Australia", + slug: "flag_australia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡Œ": { + name: "flag Aruba", + slug: "flag_aruba", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŠđŸ‡œ": { + name: "flag Åland Islands", + slug: "flag_aland_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇩🇿": { + name: "flag Azerbaijan", + slug: "flag_azerbaijan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇩": { + name: "flag Bosnia & Herzegovina", + slug: "flag_bosnia_herzegovina", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇧": { + name: "flag Barbados", + slug: "flag_barbados", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡©": { + name: "flag Bangladesh", + slug: "flag_bangladesh", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧đŸ‡Ș": { + name: "flag Belgium", + slug: "flag_belgium", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡«": { + name: "flag Burkina Faso", + slug: "flag_burkina_faso", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇬": { + name: "flag Bulgaria", + slug: "flag_bulgaria", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇭": { + name: "flag Bahrain", + slug: "flag_bahrain", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇼": { + name: "flag Burundi", + slug: "flag_burundi", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇯": { + name: "flag Benin", + slug: "flag_benin", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡±": { + name: "flag St. BarthĂ©lemy", + slug: "flag_st_barthelemy", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧đŸ‡Č": { + name: "flag Bermuda", + slug: "flag_bermuda", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇳": { + name: "flag Brunei", + slug: "flag_brunei", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇮": { + name: "flag Bolivia", + slug: "flag_bolivia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡¶": { + name: "flag Caribbean Netherlands", + slug: "flag_caribbean_netherlands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡·": { + name: "flag Brazil", + slug: "flag_brazil", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇾": { + name: "flag Bahamas", + slug: "flag_bahamas", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧đŸ‡č": { + name: "flag Bhutan", + slug: "flag_bhutan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡»": { + name: "flag Bouvet Island", + slug: "flag_bouvet_island", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡Œ": { + name: "flag Botswana", + slug: "flag_botswana", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡§đŸ‡Ÿ": { + name: "flag Belarus", + slug: "flag_belarus", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇧🇿": { + name: "flag Belize", + slug: "flag_belize", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇩": { + name: "flag Canada", + slug: "flag_canada", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇹": { + name: "flag Cocos (Keeling) Islands", + slug: "flag_cocos_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡©": { + name: "flag Congo - Kinshasa", + slug: "flag_congo_kinshasa", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡«": { + name: "flag Central African Republic", + slug: "flag_central_african_republic", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇬": { + name: "flag Congo - Brazzaville", + slug: "flag_congo_brazzaville", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇭": { + name: "flag Switzerland", + slug: "flag_switzerland", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇼": { + name: "flag CĂŽte d’Ivoire", + slug: "flag_cote_d_ivoire", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇰": { + name: "flag Cook Islands", + slug: "flag_cook_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡±": { + name: "flag Chile", + slug: "flag_chile", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹đŸ‡Č": { + name: "flag Cameroon", + slug: "flag_cameroon", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇳": { + name: "flag China", + slug: "flag_china", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🇹🇮": { + name: "flag Colombia", + slug: "flag_colombia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡”": { + name: "flag Clipperton Island", + slug: "flag_clipperton_island", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡·": { + name: "flag Costa Rica", + slug: "flag_costa_rica", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹đŸ‡ș": { + name: "flag Cuba", + slug: "flag_cuba", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡»": { + name: "flag Cape Verde", + slug: "flag_cape_verde", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡Œ": { + name: "flag Curaçao", + slug: "flag_curacao", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡œ": { + name: "flag Christmas Island", + slug: "flag_christmas_island", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡šđŸ‡Ÿ": { + name: "flag Cyprus", + slug: "flag_cyprus", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇹🇿": { + name: "flag Czechia", + slug: "flag_czechia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡©đŸ‡Ș": { + name: "flag Germany", + slug: "flag_germany", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‡©đŸ‡Ź": { + name: "flag Diego Garcia", + slug: "flag_diego_garcia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡©đŸ‡Ż": { + name: "flag Djibouti", + slug: "flag_djibouti", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡©đŸ‡°": { + name: "flag Denmark", + slug: "flag_denmark", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡©đŸ‡Č": { + name: "flag Dominica", + slug: "flag_dominica", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡©đŸ‡Ž": { + name: "flag Dominican Republic", + slug: "flag_dominican_republic", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡©đŸ‡ż": { + name: "flag Algeria", + slug: "flag_algeria", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Ș🇩": { + name: "flag Ceuta & Melilla", + slug: "flag_ceuta_melilla", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Ș🇹": { + name: "flag Ecuador", + slug: "flag_ecuador", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ȘđŸ‡Ș": { + name: "flag Estonia", + slug: "flag_estonia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Ș🇬": { + name: "flag Egypt", + slug: "flag_egypt", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Ș🇭": { + name: "flag Western Sahara", + slug: "flag_western_sahara", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ȘđŸ‡·": { + name: "flag Eritrea", + slug: "flag_eritrea", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Ș🇾": { + name: "flag Spain", + slug: "flag_spain", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‡ȘđŸ‡č": { + name: "flag Ethiopia", + slug: "flag_ethiopia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ȘđŸ‡ș": { + name: "flag European Union", + slug: "flag_european_union", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡«đŸ‡ź": { + name: "flag Finland", + slug: "flag_finland", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡«đŸ‡Ż": { + name: "flag Fiji", + slug: "flag_fiji", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡«đŸ‡°": { + name: "flag Falkland Islands", + slug: "flag_falkland_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡«đŸ‡Č": { + name: "flag Micronesia", + slug: "flag_micronesia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡«đŸ‡Ž": { + name: "flag Faroe Islands", + slug: "flag_faroe_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡«đŸ‡·": { + name: "flag France", + slug: "flag_france", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🇬🇩": { + name: "flag Gabon", + slug: "flag_gabon", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬🇧": { + name: "flag United Kingdom", + slug: "flag_united_kingdom", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡©": { + name: "flag Grenada", + slug: "flag_grenada", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬đŸ‡Ș": { + name: "flag Georgia", + slug: "flag_georgia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡«": { + name: "flag French Guiana", + slug: "flag_french_guiana", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬🇬": { + name: "flag Guernsey", + slug: "flag_guernsey", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬🇭": { + name: "flag Ghana", + slug: "flag_ghana", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬🇼": { + name: "flag Gibraltar", + slug: "flag_gibraltar", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡±": { + name: "flag Greenland", + slug: "flag_greenland", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬đŸ‡Č": { + name: "flag Gambia", + slug: "flag_gambia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬🇳": { + name: "flag Guinea", + slug: "flag_guinea", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡”": { + name: "flag Guadeloupe", + slug: "flag_guadeloupe", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡¶": { + name: "flag Equatorial Guinea", + slug: "flag_equatorial_guinea", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡·": { + name: "flag Greece", + slug: "flag_greece", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬🇾": { + name: "flag South Georgia & South Sandwich Islands", + slug: "flag_south_georgia_south_sandwich_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬đŸ‡č": { + name: "flag Guatemala", + slug: "flag_guatemala", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇬đŸ‡ș": { + name: "flag Guam", + slug: "flag_guam", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡Œ": { + name: "flag Guinea-Bissau", + slug: "flag_guinea_bissau", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŹđŸ‡Ÿ": { + name: "flag Guyana", + slug: "flag_guyana", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇭🇰": { + name: "flag Hong Kong SAR China", + slug: "flag_hong_kong_sar_china", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇭đŸ‡Č": { + name: "flag Heard & McDonald Islands", + slug: "flag_heard_mcdonald_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇭🇳": { + name: "flag Honduras", + slug: "flag_honduras", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡­đŸ‡·": { + name: "flag Croatia", + slug: "flag_croatia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇭đŸ‡č": { + name: "flag Haiti", + slug: "flag_haiti", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇭đŸ‡ș": { + name: "flag Hungary", + slug: "flag_hungary", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼🇹": { + name: "flag Canary Islands", + slug: "flag_canary_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡źđŸ‡©": { + name: "flag Indonesia", + slug: "flag_indonesia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼đŸ‡Ș": { + name: "flag Ireland", + slug: "flag_ireland", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡źđŸ‡±": { + name: "flag Israel", + slug: "flag_israel", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼đŸ‡Č": { + name: "flag Isle of Man", + slug: "flag_isle_of_man", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼🇳": { + name: "flag India", + slug: "flag_india", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼🇮": { + name: "flag British Indian Ocean Territory", + slug: "flag_british_indian_ocean_territory", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡źđŸ‡¶": { + name: "flag Iraq", + slug: "flag_iraq", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡źđŸ‡·": { + name: "flag Iran", + slug: "flag_iran", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼🇾": { + name: "flag Iceland", + slug: "flag_iceland", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇼đŸ‡č": { + name: "flag Italy", + slug: "flag_italy", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🇯đŸ‡Ș": { + name: "flag Jersey", + slug: "flag_jersey", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇯đŸ‡Č": { + name: "flag Jamaica", + slug: "flag_jamaica", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇯🇮": { + name: "flag Jordan", + slug: "flag_jordan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŻđŸ‡”": { + name: "flag Japan", + slug: "flag_japan", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "🇰đŸ‡Ș": { + name: "flag Kenya", + slug: "flag_kenya", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇰🇬": { + name: "flag Kyrgyzstan", + slug: "flag_kyrgyzstan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇰🇭": { + name: "flag Cambodia", + slug: "flag_cambodia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇰🇼": { + name: "flag Kiribati", + slug: "flag_kiribati", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇰đŸ‡Č": { + name: "flag Comoros", + slug: "flag_comoros", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇰🇳": { + name: "flag St. Kitts & Nevis", + slug: "flag_st_kitts_nevis", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡°đŸ‡”": { + name: "flag North Korea", + slug: "flag_north_korea", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡°đŸ‡·": { + name: "flag South Korea", + slug: "flag_south_korea", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‡°đŸ‡Œ": { + name: "flag Kuwait", + slug: "flag_kuwait", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡°đŸ‡Ÿ": { + name: "flag Cayman Islands", + slug: "flag_cayman_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇰🇿": { + name: "flag Kazakhstan", + slug: "flag_kazakhstan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡Š": { + name: "flag Laos", + slug: "flag_laos", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡§": { + name: "flag Lebanon", + slug: "flag_lebanon", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡š": { + name: "flag St. Lucia", + slug: "flag_st_lucia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡ź": { + name: "flag Liechtenstein", + slug: "flag_liechtenstein", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡°": { + name: "flag Sri Lanka", + slug: "flag_sri_lanka", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡·": { + name: "flag Liberia", + slug: "flag_liberia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡ž": { + name: "flag Lesotho", + slug: "flag_lesotho", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡č": { + name: "flag Lithuania", + slug: "flag_lithuania", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡ș": { + name: "flag Luxembourg", + slug: "flag_luxembourg", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡»": { + name: "flag Latvia", + slug: "flag_latvia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡±đŸ‡Ÿ": { + name: "flag Libya", + slug: "flag_libya", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇩": { + name: "flag Morocco", + slug: "flag_morocco", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇹": { + name: "flag Monaco", + slug: "flag_monaco", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡©": { + name: "flag Moldova", + slug: "flag_moldova", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡Ș": { + name: "flag Montenegro", + slug: "flag_montenegro", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡«": { + name: "flag St. Martin", + slug: "flag_st_martin", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇬": { + name: "flag Madagascar", + slug: "flag_madagascar", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇭": { + name: "flag Marshall Islands", + slug: "flag_marshall_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇰": { + name: "flag North Macedonia", + slug: "flag_north_macedonia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡±": { + name: "flag Mali", + slug: "flag_mali", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡Č": { + name: "flag Myanmar (Burma)", + slug: "flag_myanmar", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇳": { + name: "flag Mongolia", + slug: "flag_mongolia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇮": { + name: "flag Macao SAR China", + slug: "flag_macao_sar_china", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡”": { + name: "flag Northern Mariana Islands", + slug: "flag_northern_mariana_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡¶": { + name: "flag Martinique", + slug: "flag_martinique", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡·": { + name: "flag Mauritania", + slug: "flag_mauritania", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇾": { + name: "flag Montserrat", + slug: "flag_montserrat", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡č": { + name: "flag Malta", + slug: "flag_malta", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡ș": { + name: "flag Mauritius", + slug: "flag_mauritius", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡»": { + name: "flag Maldives", + slug: "flag_maldives", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡Œ": { + name: "flag Malawi", + slug: "flag_malawi", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡œ": { + name: "flag Mexico", + slug: "flag_mexico", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ČđŸ‡Ÿ": { + name: "flag Malaysia", + slug: "flag_malaysia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡Č🇿": { + name: "flag Mozambique", + slug: "flag_mozambique", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳🇩": { + name: "flag Namibia", + slug: "flag_namibia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳🇹": { + name: "flag New Caledonia", + slug: "flag_new_caledonia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳đŸ‡Ș": { + name: "flag Niger", + slug: "flag_niger", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡łđŸ‡«": { + name: "flag Norfolk Island", + slug: "flag_norfolk_island", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳🇬": { + name: "flag Nigeria", + slug: "flag_nigeria", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳🇼": { + name: "flag Nicaragua", + slug: "flag_nicaragua", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡łđŸ‡±": { + name: "flag Netherlands", + slug: "flag_netherlands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳🇮": { + name: "flag Norway", + slug: "flag_norway", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡łđŸ‡”": { + name: "flag Nepal", + slug: "flag_nepal", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡łđŸ‡·": { + name: "flag Nauru", + slug: "flag_nauru", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳đŸ‡ș": { + name: "flag Niue", + slug: "flag_niue", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇳🇿": { + name: "flag New Zealand", + slug: "flag_new_zealand", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇮đŸ‡Č": { + name: "flag Oman", + slug: "flag_oman", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡Š": { + name: "flag Panama", + slug: "flag_panama", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡Ș": { + name: "flag Peru", + slug: "flag_peru", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡«": { + name: "flag French Polynesia", + slug: "flag_french_polynesia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡Ź": { + name: "flag Papua New Guinea", + slug: "flag_papua_new_guinea", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡­": { + name: "flag Philippines", + slug: "flag_philippines", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡°": { + name: "flag Pakistan", + slug: "flag_pakistan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡±": { + name: "flag Poland", + slug: "flag_poland", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡Č": { + name: "flag St. Pierre & Miquelon", + slug: "flag_st_pierre_miquelon", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡ł": { + name: "flag Pitcairn Islands", + slug: "flag_pitcairn_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡·": { + name: "flag Puerto Rico", + slug: "flag_puerto_rico", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡ž": { + name: "flag Palestinian Territories", + slug: "flag_palestinian_territories", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡č": { + name: "flag Portugal", + slug: "flag_portugal", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡Œ": { + name: "flag Palau", + slug: "flag_palau", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡”đŸ‡Ÿ": { + name: "flag Paraguay", + slug: "flag_paraguay", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡¶đŸ‡Š": { + name: "flag Qatar", + slug: "flag_qatar", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡·đŸ‡Ș": { + name: "flag RĂ©union", + slug: "flag_reunion", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡·đŸ‡Ž": { + name: "flag Romania", + slug: "flag_romania", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡·đŸ‡ž": { + name: "flag Serbia", + slug: "flag_serbia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡·đŸ‡ș": { + name: "flag Russia", + slug: "flag_russia", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‡·đŸ‡Œ": { + name: "flag Rwanda", + slug: "flag_rwanda", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇩": { + name: "flag Saudi Arabia", + slug: "flag_saudi_arabia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇧": { + name: "flag Solomon Islands", + slug: "flag_solomon_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇹": { + name: "flag Seychelles", + slug: "flag_seychelles", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡žđŸ‡©": { + name: "flag Sudan", + slug: "flag_sudan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾đŸ‡Ș": { + name: "flag Sweden", + slug: "flag_sweden", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇬": { + name: "flag Singapore", + slug: "flag_singapore", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇭": { + name: "flag St. Helena", + slug: "flag_st_helena", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇼": { + name: "flag Slovenia", + slug: "flag_slovenia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇯": { + name: "flag Svalbard & Jan Mayen", + slug: "flag_svalbard_jan_mayen", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇰": { + name: "flag Slovakia", + slug: "flag_slovakia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡žđŸ‡±": { + name: "flag Sierra Leone", + slug: "flag_sierra_leone", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾đŸ‡Č": { + name: "flag San Marino", + slug: "flag_san_marino", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇳": { + name: "flag Senegal", + slug: "flag_senegal", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇮": { + name: "flag Somalia", + slug: "flag_somalia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡žđŸ‡·": { + name: "flag Suriname", + slug: "flag_suriname", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇾": { + name: "flag South Sudan", + slug: "flag_south_sudan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾đŸ‡č": { + name: "flag SĂŁo TomĂ© & PrĂ­ncipe", + slug: "flag_sao_tome_principe", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡žđŸ‡»": { + name: "flag El Salvador", + slug: "flag_el_salvador", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡žđŸ‡œ": { + name: "flag Sint Maarten", + slug: "flag_sint_maarten", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡žđŸ‡Ÿ": { + name: "flag Syria", + slug: "flag_syria", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇾🇿": { + name: "flag Eswatini", + slug: "flag_eswatini", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇩": { + name: "flag Tristan da Cunha", + slug: "flag_tristan_da_cunha", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇹": { + name: "flag Turks & Caicos Islands", + slug: "flag_turks_caicos_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡©": { + name: "flag Chad", + slug: "flag_chad", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡«": { + name: "flag French Southern Territories", + slug: "flag_french_southern_territories", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇬": { + name: "flag Togo", + slug: "flag_togo", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇭": { + name: "flag Thailand", + slug: "flag_thailand", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇯": { + name: "flag Tajikistan", + slug: "flag_tajikistan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇰": { + name: "flag Tokelau", + slug: "flag_tokelau", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡±": { + name: "flag Timor-Leste", + slug: "flag_timor_leste", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡Č": { + name: "flag Turkmenistan", + slug: "flag_turkmenistan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇳": { + name: "flag Tunisia", + slug: "flag_tunisia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇮": { + name: "flag Tonga", + slug: "flag_tonga", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡·": { + name: "flag Turkey", + slug: "flag_turkey", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡č": { + name: "flag Trinidad & Tobago", + slug: "flag_trinidad_tobago", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡»": { + name: "flag Tuvalu", + slug: "flag_tuvalu", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡čđŸ‡Œ": { + name: "flag Taiwan", + slug: "flag_taiwan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡č🇿": { + name: "flag Tanzania", + slug: "flag_tanzania", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ș🇩": { + name: "flag Ukraine", + slug: "flag_ukraine", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ș🇬": { + name: "flag Uganda", + slug: "flag_uganda", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡șđŸ‡Č": { + name: "flag U.S. Outlying Islands", + slug: "flag_u_s_outlying_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ș🇳": { + name: "flag United Nations", + slug: "flag_united_nations", + group: "Flags", + emoji_version: "4.0", + unicode_version: "4.0", + skin_tone_support: false +}, + "đŸ‡ș🇾": { + name: "flag United States", + slug: "flag_united_states", + group: "Flags", + emoji_version: "0.6", + unicode_version: "0.6", + skin_tone_support: false +}, + "đŸ‡șđŸ‡Ÿ": { + name: "flag Uruguay", + slug: "flag_uruguay", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ș🇿": { + name: "flag Uzbekistan", + slug: "flag_uzbekistan", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡Š": { + name: "flag Vatican City", + slug: "flag_vatican_city", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡š": { + name: "flag St. Vincent & Grenadines", + slug: "flag_st_vincent_grenadines", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡Ș": { + name: "flag Venezuela", + slug: "flag_venezuela", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡Ź": { + name: "flag British Virgin Islands", + slug: "flag_british_virgin_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡ź": { + name: "flag U.S. Virgin Islands", + slug: "flag_u_s_virgin_islands", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡ł": { + name: "flag Vietnam", + slug: "flag_vietnam", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡»đŸ‡ș": { + name: "flag Vanuatu", + slug: "flag_vanuatu", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŒđŸ‡«": { + name: "flag Wallis & Futuna", + slug: "flag_wallis_futuna", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŒđŸ‡ž": { + name: "flag Samoa", + slug: "flag_samoa", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡œđŸ‡°": { + name: "flag Kosovo", + slug: "flag_kosovo", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŸđŸ‡Ș": { + name: "flag Yemen", + slug: "flag_yemen", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡ŸđŸ‡č": { + name: "flag Mayotte", + slug: "flag_mayotte", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇿🇩": { + name: "flag South Africa", + slug: "flag_south_africa", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "🇿đŸ‡Č": { + name: "flag Zambia", + slug: "flag_zambia", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸ‡żđŸ‡Œ": { + name: "flag Zimbabwe", + slug: "flag_zimbabwe", + group: "Flags", + emoji_version: "2.0", + unicode_version: "2.0", + skin_tone_support: false +}, + "đŸŽó §ó ąó „ó źó §ó ż": { + name: "flag England", + slug: "flag_england", + group: "Flags", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "🏮󠁧󠁱󠁳󠁣󠁮󠁿": { + name: "flag Scotland", + slug: "flag_scotland", + group: "Flags", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +}, + "đŸŽó §ó ąó ·ó Źó łó ż": { + name: "flag Wales", + slug: "flag_wales", + group: "Flags", + emoji_version: "5.0", + unicode_version: "5.0", + skin_tone_support: false +} +}; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +var location = commonjsGlobal.location || {}; +/*jslint indent: 2, browser: true, bitwise: true, plusplus: true */ +var twemoji = (function ( + /*! Copyright Twitter Inc. and other contributors. Licensed under MIT *//* + https://github.com/twitter/twemoji/blob/gh-pages/LICENSE + */ + + // WARNING: this file is generated automatically via + // `node scripts/build.js` + // please update its `createTwemoji` function + // at the bottom of the same file instead. + +) { + + /*jshint maxparams:4 */ + + var + // the exported module object + twemoji = { + + + ///////////////////////// + // properties // + ///////////////////////// + + // default assets url, by default will be Twitter Inc. CDN + base: 'https://twemoji.maxcdn.com/v/13.0.1/', + + // default assets file extensions, by default '.png' + ext: '.png', + + // default assets/folder size, by default "72x72" + // available via Twitter CDN: 72 + size: '72x72', + + // default class name, by default 'emoji' + className: 'emoji', + + // basic utilities / helpers to convert code points + // to JavaScript surrogates and vice versa + convert: { + + /** + * Given an HEX codepoint, returns UTF16 surrogate pairs. + * + * @param string generic codepoint, i.e. '1F4A9' + * @return string codepoint transformed into utf16 surrogates pair, + * i.e. \uD83D\uDCA9 + * + * @example + * twemoji.convert.fromCodePoint('1f1e8'); + * // "\ud83c\udde8" + * + * '1f1e8-1f1f3'.split('-').map(twemoji.convert.fromCodePoint).join('') + * // "\ud83c\udde8\ud83c\uddf3" + */ + fromCodePoint: fromCodePoint, + + /** + * Given UTF16 surrogate pairs, returns the equivalent HEX codepoint. + * + * @param string generic utf16 surrogates pair, i.e. \uD83D\uDCA9 + * @param string optional separator for double code points, default='-' + * @return string utf16 transformed into codepoint, i.e. '1F4A9' + * + * @example + * twemoji.convert.toCodePoint('\ud83c\udde8\ud83c\uddf3'); + * // "1f1e8-1f1f3" + * + * twemoji.convert.toCodePoint('\ud83c\udde8\ud83c\uddf3', '~'); + * // "1f1e8~1f1f3" + */ + toCodePoint: toCodePoint + }, + + + ///////////////////////// + // methods // + ///////////////////////// + + /** + * User first: used to remove missing images + * preserving the original text intent when + * a fallback for network problems is desired. + * Automatically added to Image nodes via DOM + * It could be recycled for string operations via: + * $('img.emoji').on('error', twemoji.onerror) + */ + onerror: function onerror() { + if (this.parentNode) { + this.parentNode.replaceChild(createText(this.alt, false), this); + } + }, + + /** + * Main method/logic to generate either tags or HTMLImage nodes. + * "emojify" a generic text or DOM Element. + * + * @overloads + * + * String replacement for `innerHTML` or server side operations + * twemoji.parse(string); + * twemoji.parse(string, Function); + * twemoji.parse(string, Object); + * + * HTMLElement tree parsing for safer operations over existing DOM + * twemoji.parse(HTMLElement); + * twemoji.parse(HTMLElement, Function); + * twemoji.parse(HTMLElement, Object); + * + * @param string|HTMLElement the source to parse and enrich with emoji. + * + * string replace emoji matches with tags. + * Mainly used to inject emoji via `innerHTML` + * It does **not** parse the string or validate it, + * it simply replaces found emoji with a tag. + * NOTE: be sure this won't affect security. + * + * HTMLElement walk through the DOM tree and find emoji + * that are inside **text node only** (nodeType === 3) + * Mainly used to put emoji in already generated DOM + * without compromising surrounding nodes and + * **avoiding** the usage of `innerHTML`. + * NOTE: Using DOM elements instead of strings should + * improve security without compromising too much + * performance compared with a less safe `innerHTML`. + * + * @param Function|Object [optional] + * either the callback that will be invoked or an object + * with all properties to use per each found emoji. + * + * Function if specified, this will be invoked per each emoji + * that has been found through the RegExp except + * those follwed by the invariant \uFE0E ("as text"). + * Once invoked, parameters will be: + * + * iconId:string the lower case HEX code point + * i.e. "1f4a9" + * + * options:Object all info for this parsing operation + * + * variant:char the optional \uFE0F ("as image") + * variant, in case this info + * is anyhow meaningful. + * By default this is ignored. + * + * If such callback will return a falsy value instead + * of a valid `src` to use for the image, nothing will + * actually change for that specific emoji. + * + * + * Object if specified, an object containing the following properties + * + * callback Function the callback to invoke per each found emoji. + * base string the base url, by default twemoji.base + * ext string the image extension, by default twemoji.ext + * size string the assets size, by default twemoji.size + * + * @example + * + * twemoji.parse("I \u2764\uFE0F emoji!"); + * // I ❀ emoji! + * + * + * twemoji.parse("I \u2764\uFE0F emoji!", function(iconId, options) { + * return '/assets/' + iconId + '.gif'; + * }); + * // I ❀ emoji! + * + * + * twemoji.parse("I \u2764\uFE0F emoji!", { + * size: 72, + * callback: function(iconId, options) { + * return '/assets/' + options.size + '/' + iconId + options.ext; + * } + * }); + * // I ❀ emoji! + * + */ + parse: parse, + + /** + * Given a string, invokes the callback argument + * per each emoji found in such string. + * This is the most raw version used by + * the .parse(string) method itself. + * + * @param string generic string to parse + * @param Function a generic callback that will be + * invoked to replace the content. + * This calback wil receive standard + * String.prototype.replace(str, callback) + * arguments such: + * callback( + * rawText, // the emoji match + * ); + * + * and others commonly received via replace. + */ + replace: replace, + + /** + * Simplify string tests against emoji. + * + * @param string some text that might contain emoji + * @return boolean true if any emoji was found, false otherwise. + * + * @example + * + * if (twemoji.test(someContent)) { + * console.log("emoji All The Things!"); + * } + */ + test: test + }, + + // used to escape HTML special chars in attributes + escaper = { + '&': '&', + '<': '<', + '>': '>', + "'": ''', + '"': '"' + }, + + // RegExp based on emoji's official Unicode standards + // http://www.unicode.org/Public/UNIDATA/EmojiSources.txt + re = /(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©Ÿ\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g, + + // avoid runtime RegExp creation for not so smart, + // not JIT based, and old browsers / engines + UFE0Fg = /\uFE0F/g, + + // avoid using a string literal like '\u200D' here because minifiers expand it inline + U200D = String.fromCharCode(0x200D), + + // used to find HTML special chars in attributes + rescaper = /[&<>'"]/g, + + // nodes with type 1 which should **not** be parsed + shouldntBeParsed = /^(?:iframe|noframes|noscript|script|select|style|textarea)$/, + + // just a private shortcut + fromCharCode = String.fromCharCode; + + return twemoji; + + + ///////////////////////// + // private functions // + // declaration // + ///////////////////////// + + /** + * Shortcut to create text nodes + * @param string text used to create DOM text node + * @return Node a DOM node with that text + */ + function createText(text, clean) { + return document.createTextNode(clean ? text.replace(UFE0Fg, '') : text); + } + + /** + * Utility function to escape html attribute text + * @param string text use in HTML attribute + * @return string text encoded to use in HTML attribute + */ + function escapeHTML(s) { + return s.replace(rescaper, replacer); + } + + /** + * Default callback used to generate emoji src + * based on Twitter CDN + * @param string the emoji codepoint string + * @param string the default size to use, i.e. "36x36" + * @return string the image source to use + */ + function defaultImageSrcGenerator(icon, options) { + return ''.concat(options.base, options.size, '/', icon, options.ext); + } + + /** + * Given a generic DOM nodeType 1, walk through all children + * and store every nodeType 3 (#text) found in the tree. + * @param Element a DOM Element with probably some text in it + * @param Array the list of previously discovered text nodes + * @return Array same list with new discovered nodes, if any + */ + function grabAllTextNodes(node, allText) { + var + childNodes = node.childNodes, + length = childNodes.length, + subnode, + nodeType; + while (length--) { + subnode = childNodes[length]; + nodeType = subnode.nodeType; + // parse emoji only in text nodes + if (nodeType === 3) { + // collect them to process emoji later + allText.push(subnode); + } + // ignore all nodes that are not type 1, that are svg, or that + // should not be parsed as script, style, and others + else if (nodeType === 1 && !('ownerSVGElement' in subnode) && + !shouldntBeParsed.test(subnode.nodeName.toLowerCase())) { + grabAllTextNodes(subnode, allText); + } + } + return allText; + } + + /** + * Used to both remove the possible variant + * and to convert utf16 into code points. + * If there is a zero-width-joiner (U+200D), leave the variants in. + * @param string the raw text of the emoji match + * @return string the code point + */ + function grabTheRightIcon(rawText) { + // if variant is present as \uFE0F + return toCodePoint(rawText.indexOf(U200D) < 0 ? + rawText.replace(UFE0Fg, '') : + rawText + ); + } + + /** + * DOM version of the same logic / parser: + * emojify all found sub-text nodes placing images node instead. + * @param Element generic DOM node with some text in some child node + * @param Object options containing info about how to parse + * + * .callback Function the callback to invoke per each found emoji. + * .base string the base url, by default twemoji.base + * .ext string the image extension, by default twemoji.ext + * .size string the assets size, by default twemoji.size + * + * @return Element same generic node with emoji in place, if any. + */ + function parseNode(node, options) { + var + allText = grabAllTextNodes(node, []), + length = allText.length, + attrib, + attrname, + modified, + fragment, + subnode, + text, + match, + i, + index, + img, + rawText, + iconId, + src; + while (length--) { + modified = false; + fragment = document.createDocumentFragment(); + subnode = allText[length]; + text = subnode.nodeValue; + i = 0; + while ((match = re.exec(text))) { + index = match.index; + if (index !== i) { + fragment.appendChild( + createText(text.slice(i, index), true) + ); + } + rawText = match[0]; + iconId = grabTheRightIcon(rawText); + i = index + rawText.length; + src = options.callback(iconId, options); + if (iconId && src) { + img = new Image(); + img.onerror = options.onerror; + img.setAttribute('draggable', 'false'); + attrib = options.attributes(rawText, iconId); + for (attrname in attrib) { + if ( + attrib.hasOwnProperty(attrname) && + // don't allow any handlers to be set + don't allow overrides + attrname.indexOf('on') !== 0 && + !img.hasAttribute(attrname) + ) { + img.setAttribute(attrname, attrib[attrname]); + } + } + img.className = options.className; + img.alt = rawText; + img.src = src; + modified = true; + fragment.appendChild(img); + } + if (!img) fragment.appendChild(createText(rawText, false)); + img = null; + } + // is there actually anything to replace in here ? + if (modified) { + // any text left to be added ? + if (i < text.length) { + fragment.appendChild( + createText(text.slice(i), true) + ); + } + // replace the text node only, leave intact + // anything else surrounding such text + subnode.parentNode.replaceChild(fragment, subnode); + } + } + return node; + } + + /** + * String/HTML version of the same logic / parser: + * emojify a generic text placing images tags instead of surrogates pair. + * @param string generic string with possibly some emoji in it + * @param Object options containing info about how to parse + * + * .callback Function the callback to invoke per each found emoji. + * .base string the base url, by default twemoji.base + * .ext string the image extension, by default twemoji.ext + * .size string the assets size, by default twemoji.size + * + * @return the string with replacing all found and parsed emoji + */ + function parseString(str, options) { + return replace(str, function (rawText) { + var + ret = rawText, + iconId = grabTheRightIcon(rawText), + src = options.callback(iconId, options), + attrib, + attrname; + if (iconId && src) { + // recycle the match string replacing the emoji + // with its image counter part + ret = ''); + } + return ret; + }); + } + + /** + * Function used to actually replace HTML special chars + * @param string HTML special char + * @return string encoded HTML special char + */ + function replacer(m) { + return escaper[m]; + } + + /** + * Default options.attribute callback + * @return null + */ + function returnNull() { + return null; + } + + /** + * Given a generic value, creates its squared counterpart if it's a number. + * As example, number 36 will return '36x36'. + * @param any a generic value. + * @return any a string representing asset size, i.e. "36x36" + * only in case the value was a number. + * Returns initial value otherwise. + */ + function toSizeSquaredAsset(value) { + return typeof value === 'number' ? + value + 'x' + value : + value; + } + + + ///////////////////////// + // exported functions // + // declaration // + ///////////////////////// + + function fromCodePoint(codepoint) { + var code = typeof codepoint === 'string' ? + parseInt(codepoint, 16) : codepoint; + if (code < 0x10000) { + return fromCharCode(code); + } + code -= 0x10000; + return fromCharCode( + 0xD800 + (code >> 10), + 0xDC00 + (code & 0x3FF) + ); + } + + function parse(what, how) { + if (!how || typeof how === 'function') { + how = {callback: how}; + } + // if first argument is string, inject html tags + // otherwise use the DOM tree and parse text nodes only + return (typeof what === 'string' ? parseString : parseNode)(what, { + callback: how.callback || defaultImageSrcGenerator, + attributes: typeof how.attributes === 'function' ? how.attributes : returnNull, + base: typeof how.base === 'string' ? how.base : twemoji.base, + ext: how.ext || twemoji.ext, + size: how.folder || toSizeSquaredAsset(how.size || twemoji.size), + className: how.className || twemoji.className, + onerror: how.onerror || twemoji.onerror + }); + } + + function replace(text, callback) { + return String(text).replace(re, callback); + } + + function test(text) { + // IE6 needs a reset before too + re.lastIndex = 0; + var result = re.test(text); + re.lastIndex = 0; + return result; + } + + function toCodePoint(unicodeSurrogates, sep) { + var + r = [], + c = 0, + p = 0, + i = 0; + while (i < unicodeSurrogates.length) { + c = unicodeSurrogates.charCodeAt(i++); + if (p) { + r.push((0x10000 + ((p - 0xD800) << 10) + (c - 0xDC00)).toString(16)); + p = 0; + } else if (0xD800 <= c && c <= 0xDBFF) { + p = c; + } else { + r.push(c.toString(16)); + } + } + return r.join(sep || '-'); + } + +}()); +if (!location.protocol) { + twemoji.base = twemoji.base.replace(/^http:/, ""); +} +var twemoji_npm = twemoji; + +var indicatorStyle = 'color: var(--text-accent); width: 2.5em; text-align: center; float:left; font-weight:800;'; +var DEFAULT_SETTINGS = { + twemojiActive: true +}; +var MyPlugin = /** @class */ (function (_super) { + __extends(MyPlugin, _super); + function MyPlugin() { + return _super !== null && _super.apply(this, arguments) || this; + } + MyPlugin.prototype.loadEmojis = function () { + function titleCase(string) { + var sentence = string.toLowerCase().split('_'); + for (var i = 0; i < sentence.length; i++) { + sentence[i] = sentence[i][0].toUpperCase() + sentence[i].slice(1); + } + return sentence.join(' '); + } + var items = orderedEmoji.map(function (name) { + return { + name: titleCase(emojiNames[name]["name"]), + char: name, + imgHtml: twemoji_npm.parse(name) + }; + }); + return items; + }; + MyPlugin.prototype.onload = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.emojis = this.loadEmojis(); + return [4 /*yield*/, this.loadSettings()]; + case 1: + _a.sent(); + this.addSettingTab(new SettingsTab(this.app, this)); + if (this.settings.twemojiActive) { + obsidian.MarkdownPreviewRenderer.registerPostProcessor(MyPlugin.postprocessor); + } + this.addCommand({ + id: 'emoji-picker:open-picker', + name: 'Open emoji picker', + hotkeys: [], + checkCallback: function (checking) { + var leaf = _this.app.workspace.activeLeaf; + if (leaf) { + if (!checking) { + new EmojiFuzzySuggestModal(_this.app, _this.emojis, _this.settings).open(); + } + return true; + } + return false; + } + }); + return [2 /*return*/]; + } + }); + }); + }; + MyPlugin.prototype.onunload = function () { + }; + MyPlugin.prototype.loadSettings = function () { + return __awaiter(this, void 0, void 0, function () { + var _a, _b, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { + case 0: + _a = this; + _c = (_b = Object).assign; + _d = [{}, DEFAULT_SETTINGS]; + return [4 /*yield*/, this.loadData()]; + case 1: + _a.settings = _c.apply(_b, _d.concat([_e.sent()])); + return [2 /*return*/]; + } + }); + }); + }; + MyPlugin.prototype.saveSettings = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.saveData(this.settings)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + MyPlugin.postprocessor = function (el, ctx) { + twemoji_npm.parse(el); + }; + return MyPlugin; +}(obsidian.Plugin)); +var EmojiFuzzySuggestModal = /** @class */ (function (_super) { + __extends(EmojiFuzzySuggestModal, _super); + function EmojiFuzzySuggestModal(app, emojis, settings) { + var _this = _super.call(this, app) || this; + _this.app = app; + _this.emojis = emojis; + _this.settings = settings; + return _this; + } + EmojiFuzzySuggestModal.prototype.getItems = function () { + return this.emojis; + }; + EmojiFuzzySuggestModal.prototype.getItemText = function (item) { + return item.name; + }; + EmojiFuzzySuggestModal.prototype.renderSuggestion = function (item, el) { + _super.prototype.renderSuggestion.call(this, item, el); + this.updateSuggestionElForMode(item, el); + }; + EmojiFuzzySuggestModal.prototype.updateSuggestionElForMode = function (item, el) { + var indicatorEl = createEl('div', { + attr: { style: indicatorStyle }, + }); + if (this.settings.twemojiActive) { + indicatorEl.innerHTML = item.item.imgHtml; + } + else { + indicatorEl.textContent = item.item.char; + } + el.insertAdjacentElement('afterbegin', indicatorEl); + }; + EmojiFuzzySuggestModal.prototype.onChooseItem = function (item, evt) { + document.execCommand('insertText', false, item.char); + }; + return EmojiFuzzySuggestModal; +}(obsidian.FuzzySuggestModal)); +var SettingsTab = /** @class */ (function (_super) { + __extends(SettingsTab, _super); + function SettingsTab(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.plugin = plugin; + return _this; + } + SettingsTab.prototype.display = function () { + var _this = this; + var containerEl = this.containerEl; + containerEl.empty(); + containerEl.createEl('h1', { text: 'Emoji Toolbar' }); + containerEl.createEl('a', { text: 'Created by oliveryh', href: 'https://github.com/oliveryh/' }); + containerEl.createEl('h2', { text: 'Settings' }); + new obsidian.Setting(containerEl) + .setName('Twitter Emoji') + .setDesc('Improved emoji support. Note: this applies to emoji search and preview only.') + .addToggle(function (toggle) { return toggle + .setValue(_this.plugin.settings.twemojiActive) + .onChange(function (value) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.plugin.settings.twemojiActive = value; + return [4 /*yield*/, this.plugin.saveSettings()]; + case 1: + _a.sent(); + if (value) { + obsidian.MarkdownPreviewRenderer.registerPostProcessor(MyPlugin.postprocessor); + } + else { + obsidian.MarkdownPreviewRenderer.unregisterPostProcessor(MyPlugin.postprocessor); + } + return [2 /*return*/]; + } + }); + }); }); }); + }; + return SettingsTab; +}(obsidian.PluginSettingTab)); + +module.exports = MyPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy90d2Vtb2ppL2Rpc3QvdHdlbW9qaS5ucG0uanMiLCJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbiIsInZhciBsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbiB8fCB7fTtcbi8qanNsaW50IGluZGVudDogMiwgYnJvd3NlcjogdHJ1ZSwgYml0d2lzZTogdHJ1ZSwgcGx1c3BsdXM6IHRydWUgKi9cbnZhciB0d2Vtb2ppID0gKGZ1bmN0aW9uIChcbiAgLyohIENvcHlyaWdodCBUd2l0dGVyIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gTGljZW5zZWQgdW5kZXIgTUlUICovLypcbiAgICBodHRwczovL2dpdGh1Yi5jb20vdHdpdHRlci90d2Vtb2ppL2Jsb2IvZ2gtcGFnZXMvTElDRU5TRVxuICAqL1xuXG4gIC8vIFdBUk5JTkc6ICAgdGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IHZpYVxuICAvLyAgICAgICAgICAgIGBub2RlIHNjcmlwdHMvYnVpbGQuanNgXG4gIC8vICAgICAgICAgICAgcGxlYXNlIHVwZGF0ZSBpdHMgYGNyZWF0ZVR3ZW1vamlgIGZ1bmN0aW9uXG4gIC8vICAgICAgICAgICAgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc2FtZSBmaWxlIGluc3RlYWQuXG5cbikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLypqc2hpbnQgbWF4cGFyYW1zOjQgKi9cblxuICB2YXJcbiAgICAvLyB0aGUgZXhwb3J0ZWQgbW9kdWxlIG9iamVjdFxuICAgIHR3ZW1vamkgPSB7XG5cblxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyAgICAgIHByb3BlcnRpZXMgICAgIC8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAvLyBkZWZhdWx0IGFzc2V0cyB1cmwsIGJ5IGRlZmF1bHQgd2lsbCBiZSBUd2l0dGVyIEluYy4gQ0ROXG4gICAgICBiYXNlOiAnaHR0cHM6Ly90d2Vtb2ppLm1heGNkbi5jb20vdi8xMy4wLjEvJyxcblxuICAgICAgLy8gZGVmYXVsdCBhc3NldHMgZmlsZSBleHRlbnNpb25zLCBieSBkZWZhdWx0ICcucG5nJ1xuICAgICAgZXh0OiAnLnBuZycsXG5cbiAgICAgIC8vIGRlZmF1bHQgYXNzZXRzL2ZvbGRlciBzaXplLCBieSBkZWZhdWx0IFwiNzJ4NzJcIlxuICAgICAgLy8gYXZhaWxhYmxlIHZpYSBUd2l0dGVyIENETjogNzJcbiAgICAgIHNpemU6ICc3Mng3MicsXG5cbiAgICAgIC8vIGRlZmF1bHQgY2xhc3MgbmFtZSwgYnkgZGVmYXVsdCAnZW1vamknXG4gICAgICBjbGFzc05hbWU6ICdlbW9qaScsXG5cbiAgICAgIC8vIGJhc2ljIHV0aWxpdGllcyAvIGhlbHBlcnMgdG8gY29udmVydCBjb2RlIHBvaW50c1xuICAgICAgLy8gdG8gSmF2YVNjcmlwdCBzdXJyb2dhdGVzIGFuZCB2aWNlIHZlcnNhXG4gICAgICBjb252ZXJ0OiB7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIGFuIEhFWCBjb2RlcG9pbnQsIHJldHVybnMgVVRGMTYgc3Vycm9nYXRlIHBhaXJzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gICBzdHJpbmcgIGdlbmVyaWMgY29kZXBvaW50LCBpLmUuICcxRjRBOSdcbiAgICAgICAgICogQHJldHVybiAgc3RyaW5nICBjb2RlcG9pbnQgdHJhbnNmb3JtZWQgaW50byB1dGYxNiBzdXJyb2dhdGVzIHBhaXIsXG4gICAgICAgICAqICAgICAgICAgIGkuZS4gXFx1RDgzRFxcdURDQTlcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogIHR3ZW1vamkuY29udmVydC5mcm9tQ29kZVBvaW50KCcxZjFlOCcpO1xuICAgICAgICAgKiAgLy8gXCJcXHVkODNjXFx1ZGRlOFwiXG4gICAgICAgICAqXG4gICAgICAgICAqICAnMWYxZTgtMWYxZjMnLnNwbGl0KCctJykubWFwKHR3ZW1vamkuY29udmVydC5mcm9tQ29kZVBvaW50KS5qb2luKCcnKVxuICAgICAgICAgKiAgLy8gXCJcXHVkODNjXFx1ZGRlOFxcdWQ4M2NcXHVkZGYzXCJcbiAgICAgICAgICovXG4gICAgICAgIGZyb21Db2RlUG9pbnQ6IGZyb21Db2RlUG9pbnQsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdpdmVuIFVURjE2IHN1cnJvZ2F0ZSBwYWlycywgcmV0dXJucyB0aGUgZXF1aXZhbGVudCBIRVggY29kZXBvaW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0gICBzdHJpbmcgIGdlbmVyaWMgdXRmMTYgc3Vycm9nYXRlcyBwYWlyLCBpLmUuIFxcdUQ4M0RcXHVEQ0E5XG4gICAgICAgICAqIEBwYXJhbSAgIHN0cmluZyAgb3B0aW9uYWwgc2VwYXJhdG9yIGZvciBkb3VibGUgY29kZSBwb2ludHMsIGRlZmF1bHQ9Jy0nXG4gICAgICAgICAqIEByZXR1cm4gIHN0cmluZyAgdXRmMTYgdHJhbnNmb3JtZWQgaW50byBjb2RlcG9pbnQsIGkuZS4gJzFGNEE5J1xuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiAgdHdlbW9qaS5jb252ZXJ0LnRvQ29kZVBvaW50KCdcXHVkODNjXFx1ZGRlOFxcdWQ4M2NcXHVkZGYzJyk7XG4gICAgICAgICAqICAvLyBcIjFmMWU4LTFmMWYzXCJcbiAgICAgICAgICpcbiAgICAgICAgICogIHR3ZW1vamkuY29udmVydC50b0NvZGVQb2ludCgnXFx1ZDgzY1xcdWRkZThcXHVkODNjXFx1ZGRmMycsICd+Jyk7XG4gICAgICAgICAqICAvLyBcIjFmMWU4fjFmMWYzXCJcbiAgICAgICAgICovXG4gICAgICAgIHRvQ29kZVBvaW50OiB0b0NvZGVQb2ludFxuICAgICAgfSxcblxuXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vICAgICAgIG1ldGhvZHMgICAgICAgLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlciBmaXJzdDogdXNlZCB0byByZW1vdmUgbWlzc2luZyBpbWFnZXNcbiAgICAgICAqIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHRleHQgaW50ZW50IHdoZW5cbiAgICAgICAqIGEgZmFsbGJhY2sgZm9yIG5ldHdvcmsgcHJvYmxlbXMgaXMgZGVzaXJlZC5cbiAgICAgICAqIEF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gSW1hZ2Ugbm9kZXMgdmlhIERPTVxuICAgICAgICogSXQgY291bGQgYmUgcmVjeWNsZWQgZm9yIHN0cmluZyBvcGVyYXRpb25zIHZpYTpcbiAgICAgICAqICAkKCdpbWcuZW1vamknKS5vbignZXJyb3InLCB0d2Vtb2ppLm9uZXJyb3IpXG4gICAgICAgKi9cbiAgICAgIG9uZXJyb3I6IGZ1bmN0aW9uIG9uZXJyb3IoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICB0aGlzLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNyZWF0ZVRleHQodGhpcy5hbHQsIGZhbHNlKSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogTWFpbiBtZXRob2QvbG9naWMgdG8gZ2VuZXJhdGUgZWl0aGVyIDxpbWc+IHRhZ3Mgb3IgSFRNTEltYWdlIG5vZGVzLlxuICAgICAgICogIFwiZW1vamlmeVwiIGEgZ2VuZXJpYyB0ZXh0IG9yIERPTSBFbGVtZW50LlxuICAgICAgICpcbiAgICAgICAqIEBvdmVybG9hZHNcbiAgICAgICAqXG4gICAgICAgKiBTdHJpbmcgcmVwbGFjZW1lbnQgZm9yIGBpbm5lckhUTUxgIG9yIHNlcnZlciBzaWRlIG9wZXJhdGlvbnNcbiAgICAgICAqICB0d2Vtb2ppLnBhcnNlKHN0cmluZyk7XG4gICAgICAgKiAgdHdlbW9qaS5wYXJzZShzdHJpbmcsIEZ1bmN0aW9uKTtcbiAgICAgICAqICB0d2Vtb2ppLnBhcnNlKHN0cmluZywgT2JqZWN0KTtcbiAgICAgICAqXG4gICAgICAgKiBIVE1MRWxlbWVudCB0cmVlIHBhcnNpbmcgZm9yIHNhZmVyIG9wZXJhdGlvbnMgb3ZlciBleGlzdGluZyBET01cbiAgICAgICAqICB0d2Vtb2ppLnBhcnNlKEhUTUxFbGVtZW50KTtcbiAgICAgICAqICB0d2Vtb2ppLnBhcnNlKEhUTUxFbGVtZW50LCBGdW5jdGlvbik7XG4gICAgICAgKiAgdHdlbW9qaS5wYXJzZShIVE1MRWxlbWVudCwgT2JqZWN0KTtcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gICBzdHJpbmd8SFRNTEVsZW1lbnQgIHRoZSBzb3VyY2UgdG8gcGFyc2UgYW5kIGVucmljaCB3aXRoIGVtb2ppLlxuICAgICAgICpcbiAgICAgICAqICAgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgcmVwbGFjZSBlbW9qaSBtYXRjaGVzIHdpdGggPGltZz4gdGFncy5cbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFpbmx5IHVzZWQgdG8gaW5qZWN0IGVtb2ppIHZpYSBgaW5uZXJIVE1MYFxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCBkb2VzICoqbm90KiogcGFyc2UgdGhlIHN0cmluZyBvciB2YWxpZGF0ZSBpdCxcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2ltcGx5IHJlcGxhY2VzIGZvdW5kIGVtb2ppIHdpdGggYSB0YWcuXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IGJlIHN1cmUgdGhpcyB3b24ndCBhZmZlY3Qgc2VjdXJpdHkuXG4gICAgICAgKlxuICAgICAgICogICAgICAgICAgSFRNTEVsZW1lbnQgICAgICAgICB3YWxrIHRocm91Z2ggdGhlIERPTSB0cmVlIGFuZCBmaW5kIGVtb2ppXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXJlIGluc2lkZSAqKnRleHQgbm9kZSBvbmx5KiogKG5vZGVUeXBlID09PSAzKVxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWlubHkgdXNlZCB0byBwdXQgZW1vamkgaW4gYWxyZWFkeSBnZW5lcmF0ZWQgRE9NXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgY29tcHJvbWlzaW5nIHN1cnJvdW5kaW5nIG5vZGVzIGFuZFxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmF2b2lkaW5nKiogdGhlIHVzYWdlIG9mIGBpbm5lckhUTUxgLlxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBVc2luZyBET00gZWxlbWVudHMgaW5zdGVhZCBvZiBzdHJpbmdzIHNob3VsZFxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXByb3ZlIHNlY3VyaXR5IHdpdGhvdXQgY29tcHJvbWlzaW5nIHRvbyBtdWNoXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIGNvbXBhcmVkIHdpdGggYSBsZXNzIHNhZmUgYGlubmVySFRNTGAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtICAgRnVuY3Rpb258T2JqZWN0ICBbb3B0aW9uYWxdXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0aGUgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGludm9rZWQgb3IgYW4gb2JqZWN0XG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYWxsIHByb3BlcnRpZXMgdG8gdXNlIHBlciBlYWNoIGZvdW5kIGVtb2ppLlxuICAgICAgICpcbiAgICAgICAqICAgICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgaWYgc3BlY2lmaWVkLCB0aGlzIHdpbGwgYmUgaW52b2tlZCBwZXIgZWFjaCBlbW9qaVxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGhhcyBiZWVuIGZvdW5kIHRocm91Z2ggdGhlIFJlZ0V4cCBleGNlcHRcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvc2UgZm9sbHdlZCBieSB0aGUgaW52YXJpYW50IFxcdUZFMEUgKFwiYXMgdGV4dFwiKS5cbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25jZSBpbnZva2VkLCBwYXJhbWV0ZXJzIHdpbGwgYmU6XG4gICAgICAgKlxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25JZDpzdHJpbmcgICAgIHRoZSBsb3dlciBjYXNlIEhFWCBjb2RlIHBvaW50XG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5lLiBcIjFmNGE5XCJcbiAgICAgICAqXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczpPYmplY3QgICAgYWxsIGluZm8gZm9yIHRoaXMgcGFyc2luZyBvcGVyYXRpb25cbiAgICAgICAqXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudDpjaGFyICAgICAgdGhlIG9wdGlvbmFsIFxcdUZFMEYgKFwiYXMgaW1hZ2VcIilcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50LCBpbiBjYXNlIHRoaXMgaW5mb1xuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFueWhvdyBtZWFuaW5nZnVsLlxuICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQgdGhpcyBpcyBpZ25vcmVkLlxuICAgICAgICpcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc3VjaCBjYWxsYmFjayB3aWxsIHJldHVybiBhIGZhbHN5IHZhbHVlIGluc3RlYWRcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYSB2YWxpZCBgc3JjYCB0byB1c2UgZm9yIHRoZSBpbWFnZSwgbm90aGluZyB3aWxsXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbGx5IGNoYW5nZSBmb3IgdGhhdCBzcGVjaWZpYyBlbW9qaS5cbiAgICAgICAqXG4gICAgICAgKlxuICAgICAgICogICAgICAgICAgT2JqZWN0ICAgICAgICAgICAgICBpZiBzcGVjaWZpZWQsIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllc1xuICAgICAgICpcbiAgICAgICAqICAgICAgICAgICAgY2FsbGJhY2sgICBGdW5jdGlvbiAgdGhlIGNhbGxiYWNrIHRvIGludm9rZSBwZXIgZWFjaCBmb3VuZCBlbW9qaS5cbiAgICAgICAqICAgICAgICAgICAgYmFzZSAgICAgICBzdHJpbmcgICAgdGhlIGJhc2UgdXJsLCBieSBkZWZhdWx0IHR3ZW1vamkuYmFzZVxuICAgICAgICogICAgICAgICAgICBleHQgICAgICAgIHN0cmluZyAgICB0aGUgaW1hZ2UgZXh0ZW5zaW9uLCBieSBkZWZhdWx0IHR3ZW1vamkuZXh0XG4gICAgICAgKiAgICAgICAgICAgIHNpemUgICAgICAgc3RyaW5nICAgIHRoZSBhc3NldHMgc2l6ZSwgYnkgZGVmYXVsdCB0d2Vtb2ppLnNpemVcbiAgICAgICAqXG4gICAgICAgKiBAZXhhbXBsZVxuICAgICAgICpcbiAgICAgICAqICB0d2Vtb2ppLnBhcnNlKFwiSSBcXHUyNzY0XFx1RkUwRiBlbW9qaSFcIik7XG4gICAgICAgKiAgLy8gSSA8aW1nIGNsYXNzPVwiZW1vamlcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIGFsdD1cIuKdpO+4j1wiIHNyYz1cIi9hc3NldHMvMjc2NC5naWZcIi8+IGVtb2ppIVxuICAgICAgICpcbiAgICAgICAqXG4gICAgICAgKiAgdHdlbW9qaS5wYXJzZShcIkkgXFx1Mjc2NFxcdUZFMEYgZW1vamkhXCIsIGZ1bmN0aW9uKGljb25JZCwgb3B0aW9ucykge1xuICAgICAgICogICAgcmV0dXJuICcvYXNzZXRzLycgKyBpY29uSWQgKyAnLmdpZic7XG4gICAgICAgKiAgfSk7XG4gICAgICAgKiAgLy8gSSA8aW1nIGNsYXNzPVwiZW1vamlcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIGFsdD1cIuKdpO+4j1wiIHNyYz1cIi9hc3NldHMvMjc2NC5naWZcIi8+IGVtb2ppIVxuICAgICAgICpcbiAgICAgICAqXG4gICAgICAgKiB0d2Vtb2ppLnBhcnNlKFwiSSBcXHUyNzY0XFx1RkUwRiBlbW9qaSFcIiwge1xuICAgICAgICogICBzaXplOiA3MixcbiAgICAgICAqICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGljb25JZCwgb3B0aW9ucykge1xuICAgICAgICogICAgIHJldHVybiAnL2Fzc2V0cy8nICsgb3B0aW9ucy5zaXplICsgJy8nICsgaWNvbklkICsgb3B0aW9ucy5leHQ7XG4gICAgICAgKiAgIH1cbiAgICAgICAqIH0pO1xuICAgICAgICogIC8vIEkgPGltZyBjbGFzcz1cImVtb2ppXCIgZHJhZ2dhYmxlPVwiZmFsc2VcIiBhbHQ9XCLinaTvuI9cIiBzcmM9XCIvYXNzZXRzLzcyeDcyLzI3NjQucG5nXCIvPiBlbW9qaSFcbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIHBhcnNlOiBwYXJzZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBHaXZlbiBhIHN0cmluZywgaW52b2tlcyB0aGUgY2FsbGJhY2sgYXJndW1lbnRcbiAgICAgICAqICBwZXIgZWFjaCBlbW9qaSBmb3VuZCBpbiBzdWNoIHN0cmluZy5cbiAgICAgICAqIFRoaXMgaXMgdGhlIG1vc3QgcmF3IHZlcnNpb24gdXNlZCBieVxuICAgICAgICogIHRoZSAucGFyc2Uoc3RyaW5nKSBtZXRob2QgaXRzZWxmLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSAgIHN0cmluZyAgICBnZW5lcmljIHN0cmluZyB0byBwYXJzZVxuICAgICAgICogQHBhcmFtICAgRnVuY3Rpb24gIGEgZ2VuZXJpYyBjYWxsYmFjayB0aGF0IHdpbGwgYmVcbiAgICAgICAqICAgICAgICAgICAgICAgICAgICBpbnZva2VkIHRvIHJlcGxhY2UgdGhlIGNvbnRlbnQuXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgVGhpcyBjYWxiYWNrIHdpbCByZWNlaXZlIHN0YW5kYXJkXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKHN0ciwgY2FsbGJhY2spXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIHN1Y2g6XG4gICAgICAgKiAgY2FsbGJhY2soXG4gICAgICAgKiAgICByYXdUZXh0LCAgLy8gdGhlIGVtb2ppIG1hdGNoXG4gICAgICAgKiAgKTtcbiAgICAgICAqXG4gICAgICAgKiAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVycyBjb21tb25seSByZWNlaXZlZCB2aWEgcmVwbGFjZS5cbiAgICAgICAqL1xuICAgICAgcmVwbGFjZTogcmVwbGFjZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTaW1wbGlmeSBzdHJpbmcgdGVzdHMgYWdhaW5zdCBlbW9qaS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gICBzdHJpbmcgIHNvbWUgdGV4dCB0aGF0IG1pZ2h0IGNvbnRhaW4gZW1vamlcbiAgICAgICAqIEByZXR1cm4gIGJvb2xlYW4gdHJ1ZSBpZiBhbnkgZW1vamkgd2FzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICAgKlxuICAgICAgICogQGV4YW1wbGVcbiAgICAgICAqXG4gICAgICAgKiAgaWYgKHR3ZW1vamkudGVzdChzb21lQ29udGVudCkpIHtcbiAgICAgICAqICAgIGNvbnNvbGUubG9nKFwiZW1vamkgQWxsIFRoZSBUaGluZ3MhXCIpO1xuICAgICAgICogIH1cbiAgICAgICAqL1xuICAgICAgdGVzdDogdGVzdFxuICAgIH0sXG5cbiAgICAvLyB1c2VkIHRvIGVzY2FwZSBIVE1MIHNwZWNpYWwgY2hhcnMgaW4gYXR0cmlidXRlc1xuICAgIGVzY2FwZXIgPSB7XG4gICAgICAnJic6ICcmYW1wOycsXG4gICAgICAnPCc6ICcmbHQ7JyxcbiAgICAgICc+JzogJyZndDsnLFxuICAgICAgXCInXCI6ICcmIzM5OycsXG4gICAgICAnXCInOiAnJnF1b3Q7J1xuICAgIH0sXG5cbiAgICAvLyBSZWdFeHAgYmFzZWQgb24gZW1vamkncyBvZmZpY2lhbCBVbmljb2RlIHN0YW5kYXJkc1xuICAgIC8vIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvRW1vamlTb3VyY2VzLnR4dFxuICAgIHJlID0gLyg/OlxcdWQ4M2RcXHVkYzY4XFx1ZDgzY1xcdWRmZmJcXHUyMDBkXFx1ZDgzZVxcdWRkMWRcXHUyMDBkXFx1ZDgzZFxcdWRjNjhcXHVkODNjW1xcdWRmZmMtXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjhcXHVkODNjXFx1ZGZmY1xcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYlxcdWRmZmQtXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjhcXHVkODNjXFx1ZGZmZFxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYlxcdWRmZmNcXHVkZmZlXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjhcXHVkODNjXFx1ZGZmZVxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZkXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjhcXHVkODNjXFx1ZGZmZlxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZlXXxcXHVkODNkXFx1ZGM2OVxcdWQ4M2NcXHVkZmZiXFx1MjAwZFxcdWQ4M2VcXHVkZDFkXFx1MjAwZFxcdWQ4M2RcXHVkYzY4XFx1ZDgzY1tcXHVkZmZjLVxcdWRmZmZdfFxcdWQ4M2RcXHVkYzY5XFx1ZDgzY1xcdWRmZmJcXHUyMDBkXFx1ZDgzZVxcdWRkMWRcXHUyMDBkXFx1ZDgzZFxcdWRjNjlcXHVkODNjW1xcdWRmZmMtXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmY1xcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYlxcdWRmZmQtXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmY1xcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OVxcdWQ4M2NbXFx1ZGZmYlxcdWRmZmQtXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmZFxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYlxcdWRmZmNcXHVkZmZlXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmZFxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OVxcdWQ4M2NbXFx1ZGZmYlxcdWRmZmNcXHVkZmZlXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmZVxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZkXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmZVxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OVxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZkXFx1ZGZmZl18XFx1ZDgzZFxcdWRjNjlcXHVkODNjXFx1ZGZmZlxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNkXFx1ZGM2OFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZlXXxcXHVkODNkXFx1ZGM2OVxcdWQ4M2NcXHVkZmZmXFx1MjAwZFxcdWQ4M2VcXHVkZDFkXFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmVdfFxcdWQ4M2VcXHVkZGQxXFx1ZDgzY1xcdWRmZmJcXHUyMDBkXFx1ZDgzZVxcdWRkMWRcXHUyMDBkXFx1ZDgzZVxcdWRkZDFcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl18XFx1ZDgzZVxcdWRkZDFcXHVkODNjXFx1ZGZmY1xcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNlXFx1ZGRkMVxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXXxcXHVkODNlXFx1ZGRkMVxcdWQ4M2NcXHVkZmZkXFx1MjAwZFxcdWQ4M2VcXHVkZDFkXFx1MjAwZFxcdWQ4M2VcXHVkZGQxXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdfFxcdWQ4M2VcXHVkZGQxXFx1ZDgzY1xcdWRmZmVcXHUyMDBkXFx1ZDgzZVxcdWRkMWRcXHUyMDBkXFx1ZDgzZVxcdWRkZDFcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl18XFx1ZDgzZVxcdWRkZDFcXHVkODNjXFx1ZGZmZlxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNlXFx1ZGRkMVxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXXxcXHVkODNlXFx1ZGRkMVxcdTIwMGRcXHVkODNlXFx1ZGQxZFxcdTIwMGRcXHVkODNlXFx1ZGRkMXxcXHVkODNkXFx1ZGM2YlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXXxcXHVkODNkXFx1ZGM2Y1xcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXXxcXHVkODNkXFx1ZGM2ZFxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXXxcXHVkODNkW1xcdWRjNmItXFx1ZGM2ZF0pfCg/OlxcdWQ4M2RbXFx1ZGM2OFxcdWRjNjldfFxcdWQ4M2VcXHVkZGQxKSg/OlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSk/XFx1MjAwZCg/OlxcdTI2OTVcXHVmZTBmfFxcdTI2OTZcXHVmZTBmfFxcdTI3MDhcXHVmZTBmfFxcdWQ4M2NbXFx1ZGYzZVxcdWRmNzNcXHVkZjdjXFx1ZGY4NFxcdWRmOTNcXHVkZmE0XFx1ZGZhOFxcdWRmZWJcXHVkZmVkXXxcXHVkODNkW1xcdWRjYmJcXHVkY2JjXFx1ZGQyN1xcdWRkMmNcXHVkZTgwXFx1ZGU5Ml18XFx1ZDgzZVtcXHVkZGFmLVxcdWRkYjNcXHVkZGJjXFx1ZGRiZF0pfCg/OlxcdWQ4M2NbXFx1ZGZjYlxcdWRmY2NdfFxcdWQ4M2RbXFx1ZGQ3NFxcdWRkNzVdfFxcdTI2ZjkpKCg/OlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXXxcXHVmZTBmKVxcdTIwMGRbXFx1MjY0MFxcdTI2NDJdXFx1ZmUwZil8KD86XFx1ZDgzY1tcXHVkZmMzXFx1ZGZjNFxcdWRmY2FdfFxcdWQ4M2RbXFx1ZGM2ZVxcdWRjNzBcXHVkYzcxXFx1ZGM3M1xcdWRjNzdcXHVkYzgxXFx1ZGM4MlxcdWRjODZcXHVkYzg3XFx1ZGU0NS1cXHVkZTQ3XFx1ZGU0YlxcdWRlNGRcXHVkZTRlXFx1ZGVhM1xcdWRlYjQtXFx1ZGViNl18XFx1ZDgzZVtcXHVkZDI2XFx1ZGQzNVxcdWRkMzctXFx1ZGQzOVxcdWRkM2RcXHVkZDNlXFx1ZGRiOFxcdWRkYjlcXHVkZGNkLVxcdWRkY2ZcXHVkZGQ2LVxcdWRkZGRdKSg/OlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSk/XFx1MjAwZFtcXHUyNjQwXFx1MjY0Ml1cXHVmZTBmfCg/OlxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdTI3NjRcXHVmZTBmXFx1MjAwZFxcdWQ4M2RcXHVkYzhiXFx1MjAwZFxcdWQ4M2RcXHVkYzY4fFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY2XFx1MjAwZFxcdWQ4M2RcXHVkYzY2fFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY3XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY2XFx1MjAwZFxcdWQ4M2RcXHVkYzY2fFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY3XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdTI3NjRcXHVmZTBmXFx1MjAwZFxcdWQ4M2RcXHVkYzhiXFx1MjAwZFxcdWQ4M2RbXFx1ZGM2OFxcdWRjNjldfFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY2XFx1MjAwZFxcdWQ4M2RcXHVkYzY2fFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY3XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdTI3NjRcXHVmZTBmXFx1MjAwZFxcdWQ4M2RcXHVkYzY4fFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY2XFx1MjAwZFxcdWQ4M2RcXHVkYzY2fFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY3XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY4XFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdTI3NjRcXHVmZTBmXFx1MjAwZFxcdWQ4M2RbXFx1ZGM2OFxcdWRjNjldfFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY2XFx1MjAwZFxcdWQ4M2RcXHVkYzY2fFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY3XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RcXHVkYzY5XFx1MjAwZFxcdWQ4M2RbXFx1ZGM2NlxcdWRjNjddfFxcdWQ4M2NcXHVkZmYzXFx1ZmUwZlxcdTIwMGRcXHUyNmE3XFx1ZmUwZnxcXHVkODNjXFx1ZGZmM1xcdWZlMGZcXHUyMDBkXFx1ZDgzY1xcdWRmMDh8XFx1ZDgzY1xcdWRmZjRcXHUyMDBkXFx1MjYyMFxcdWZlMGZ8XFx1ZDgzZFxcdWRjMTVcXHUyMDBkXFx1ZDgzZVxcdWRkYmF8XFx1ZDgzZFxcdWRjM2JcXHUyMDBkXFx1Mjc0NFxcdWZlMGZ8XFx1ZDgzZFxcdWRjNDFcXHUyMDBkXFx1ZDgzZFxcdWRkZTh8XFx1ZDgzZFxcdWRjNjhcXHUyMDBkXFx1ZDgzZFtcXHVkYzY2XFx1ZGM2N118XFx1ZDgzZFxcdWRjNjlcXHUyMDBkXFx1ZDgzZFtcXHVkYzY2XFx1ZGM2N118XFx1ZDgzZFxcdWRjNmZcXHUyMDBkXFx1MjY0MFxcdWZlMGZ8XFx1ZDgzZFxcdWRjNmZcXHUyMDBkXFx1MjY0MlxcdWZlMGZ8XFx1ZDgzZVxcdWRkM2NcXHUyMDBkXFx1MjY0MFxcdWZlMGZ8XFx1ZDgzZVxcdWRkM2NcXHUyMDBkXFx1MjY0MlxcdWZlMGZ8XFx1ZDgzZVxcdWRkZGVcXHUyMDBkXFx1MjY0MFxcdWZlMGZ8XFx1ZDgzZVxcdWRkZGVcXHUyMDBkXFx1MjY0MlxcdWZlMGZ8XFx1ZDgzZVxcdWRkZGZcXHUyMDBkXFx1MjY0MFxcdWZlMGZ8XFx1ZDgzZVxcdWRkZGZcXHUyMDBkXFx1MjY0MlxcdWZlMGZ8XFx1ZDgzZFxcdWRjMDhcXHUyMDBkXFx1MmIxYil8WyMqMC05XVxcdWZlMGY/XFx1MjBlM3woPzpbwqnCrlxcdTIxMjJcXHUyNjVmXVxcdWZlMGYpfCg/OlxcdWQ4M2NbXFx1ZGMwNFxcdWRkNzBcXHVkZDcxXFx1ZGQ3ZVxcdWRkN2ZcXHVkZTAyXFx1ZGUxYVxcdWRlMmZcXHVkZTM3XFx1ZGYyMVxcdWRmMjQtXFx1ZGYyY1xcdWRmMzZcXHVkZjdkXFx1ZGY5NlxcdWRmOTdcXHVkZjk5LVxcdWRmOWJcXHVkZjllXFx1ZGY5ZlxcdWRmY2RcXHVkZmNlXFx1ZGZkNC1cXHVkZmRmXFx1ZGZmM1xcdWRmZjVcXHVkZmY3XXxcXHVkODNkW1xcdWRjM2ZcXHVkYzQxXFx1ZGNmZFxcdWRkNDlcXHVkZDRhXFx1ZGQ2ZlxcdWRkNzBcXHVkZDczXFx1ZGQ3Ni1cXHVkZDc5XFx1ZGQ4N1xcdWRkOGEtXFx1ZGQ4ZFxcdWRkYTVcXHVkZGE4XFx1ZGRiMVxcdWRkYjJcXHVkZGJjXFx1ZGRjMi1cXHVkZGM0XFx1ZGRkMS1cXHVkZGQzXFx1ZGRkYy1cXHVkZGRlXFx1ZGRlMVxcdWRkZTNcXHVkZGU4XFx1ZGRlZlxcdWRkZjNcXHVkZGZhXFx1ZGVjYlxcdWRlY2QtXFx1ZGVjZlxcdWRlZTAtXFx1ZGVlNVxcdWRlZTlcXHVkZWYwXFx1ZGVmM118W1xcdTIwM2NcXHUyMDQ5XFx1MjEzOVxcdTIxOTQtXFx1MjE5OVxcdTIxYTlcXHUyMWFhXFx1MjMxYVxcdTIzMWJcXHUyMzI4XFx1MjNjZlxcdTIzZWQtXFx1MjNlZlxcdTIzZjFcXHUyM2YyXFx1MjNmOC1cXHUyM2ZhXFx1MjRjMlxcdTI1YWFcXHUyNWFiXFx1MjViNlxcdTI1YzBcXHUyNWZiLVxcdTI1ZmVcXHUyNjAwLVxcdTI2MDRcXHUyNjBlXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MjBcXHUyNjIyXFx1MjYyM1xcdTI2MjZcXHUyNjJhXFx1MjYyZVxcdTI2MmZcXHUyNjM4LVxcdTI2M2FcXHUyNjQwXFx1MjY0MlxcdTI2NDgtXFx1MjY1M1xcdTI2NjBcXHUyNjYzXFx1MjY2NVxcdTI2NjZcXHUyNjY4XFx1MjY3YlxcdTI2N2ZcXHUyNjkyLVxcdTI2OTdcXHUyNjk5XFx1MjY5YlxcdTI2OWNcXHUyNmEwXFx1MjZhMVxcdTI2YTdcXHUyNmFhXFx1MjZhYlxcdTI2YjBcXHUyNmIxXFx1MjZiZFxcdTI2YmVcXHUyNmM0XFx1MjZjNVxcdTI2YzhcXHUyNmNmXFx1MjZkMVxcdTI2ZDNcXHUyNmQ0XFx1MjZlOVxcdTI2ZWFcXHUyNmYwLVxcdTI2ZjVcXHUyNmY4XFx1MjZmYVxcdTI2ZmRcXHUyNzAyXFx1MjcwOFxcdTI3MDlcXHUyNzBmXFx1MjcxMlxcdTI3MTRcXHUyNzE2XFx1MjcxZFxcdTI3MjFcXHUyNzMzXFx1MjczNFxcdTI3NDRcXHUyNzQ3XFx1Mjc1N1xcdTI3NjNcXHUyNzY0XFx1MjdhMVxcdTI5MzRcXHUyOTM1XFx1MmIwNS1cXHUyYjA3XFx1MmIxYlxcdTJiMWNcXHUyYjUwXFx1MmI1NVxcdTMwMzBcXHUzMDNkXFx1MzI5N1xcdTMyOTldKSg/OlxcdWZlMGZ8KD8hXFx1ZmUwZSkpfCg/Oig/OlxcdWQ4M2NbXFx1ZGZjYlxcdWRmY2NdfFxcdWQ4M2RbXFx1ZGQ3NFxcdWRkNzVcXHVkZDkwXXxbXFx1MjYxZFxcdTI2ZjdcXHUyNmY5XFx1MjcwY1xcdTI3MGRdKSg/OlxcdWZlMGZ8KD8hXFx1ZmUwZSkpfCg/OlxcdWQ4M2NbXFx1ZGY4NVxcdWRmYzItXFx1ZGZjNFxcdWRmYzdcXHVkZmNhXXxcXHVkODNkW1xcdWRjNDJcXHVkYzQzXFx1ZGM0Ni1cXHVkYzUwXFx1ZGM2Ni1cXHVkYzY5XFx1ZGM2ZVxcdWRjNzAtXFx1ZGM3OFxcdWRjN2NcXHVkYzgxLVxcdWRjODNcXHVkYzg1LVxcdWRjODdcXHVkY2FhXFx1ZGQ3YVxcdWRkOTVcXHVkZDk2XFx1ZGU0NS1cXHVkZTQ3XFx1ZGU0Yi1cXHVkZTRmXFx1ZGVhM1xcdWRlYjQtXFx1ZGViNlxcdWRlYzBcXHVkZWNjXXxcXHVkODNlW1xcdWRkMGNcXHVkZDBmXFx1ZGQxOC1cXHVkZDFjXFx1ZGQxZVxcdWRkMWZcXHVkZDI2XFx1ZGQzMC1cXHVkZDM5XFx1ZGQzZFxcdWRkM2VcXHVkZDc3XFx1ZGRiNVxcdWRkYjZcXHVkZGI4XFx1ZGRiOVxcdWRkYmJcXHVkZGNkLVxcdWRkY2ZcXHVkZGQxLVxcdWRkZGRdfFtcXHUyNzBhXFx1MjcwYl0pKSg/OlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSk/fCg/OlxcdWQ4M2NcXHVkZmY0XFx1ZGI0MFxcdWRjNjdcXHVkYjQwXFx1ZGM2MlxcdWRiNDBcXHVkYzY1XFx1ZGI0MFxcdWRjNmVcXHVkYjQwXFx1ZGM2N1xcdWRiNDBcXHVkYzdmfFxcdWQ4M2NcXHVkZmY0XFx1ZGI0MFxcdWRjNjdcXHVkYjQwXFx1ZGM2MlxcdWRiNDBcXHVkYzczXFx1ZGI0MFxcdWRjNjNcXHVkYjQwXFx1ZGM3NFxcdWRiNDBcXHVkYzdmfFxcdWQ4M2NcXHVkZmY0XFx1ZGI0MFxcdWRjNjdcXHVkYjQwXFx1ZGM2MlxcdWRiNDBcXHVkYzc3XFx1ZGI0MFxcdWRjNmNcXHVkYjQwXFx1ZGM3M1xcdWRiNDBcXHVkYzdmfFxcdWQ4M2NcXHVkZGU2XFx1ZDgzY1tcXHVkZGU4LVxcdWRkZWNcXHVkZGVlXFx1ZGRmMVxcdWRkZjJcXHVkZGY0XFx1ZGRmNi1cXHVkZGZhXFx1ZGRmY1xcdWRkZmRcXHVkZGZmXXxcXHVkODNjXFx1ZGRlN1xcdWQ4M2NbXFx1ZGRlNlxcdWRkZTdcXHVkZGU5LVxcdWRkZWZcXHVkZGYxLVxcdWRkZjRcXHVkZGY2LVxcdWRkZjlcXHVkZGZiXFx1ZGRmY1xcdWRkZmVcXHVkZGZmXXxcXHVkODNjXFx1ZGRlOFxcdWQ4M2NbXFx1ZGRlNlxcdWRkZThcXHVkZGU5XFx1ZGRlYi1cXHVkZGVlXFx1ZGRmMC1cXHVkZGY1XFx1ZGRmN1xcdWRkZmEtXFx1ZGRmZl18XFx1ZDgzY1xcdWRkZTlcXHVkODNjW1xcdWRkZWFcXHVkZGVjXFx1ZGRlZlxcdWRkZjBcXHVkZGYyXFx1ZGRmNFxcdWRkZmZdfFxcdWQ4M2NcXHVkZGVhXFx1ZDgzY1tcXHVkZGU2XFx1ZGRlOFxcdWRkZWFcXHVkZGVjXFx1ZGRlZFxcdWRkZjctXFx1ZGRmYV18XFx1ZDgzY1xcdWRkZWJcXHVkODNjW1xcdWRkZWUtXFx1ZGRmMFxcdWRkZjJcXHVkZGY0XFx1ZGRmN118XFx1ZDgzY1xcdWRkZWNcXHVkODNjW1xcdWRkZTZcXHVkZGU3XFx1ZGRlOS1cXHVkZGVlXFx1ZGRmMS1cXHVkZGYzXFx1ZGRmNS1cXHVkZGZhXFx1ZGRmY1xcdWRkZmVdfFxcdWQ4M2NcXHVkZGVkXFx1ZDgzY1tcXHVkZGYwXFx1ZGRmMlxcdWRkZjNcXHVkZGY3XFx1ZGRmOVxcdWRkZmFdfFxcdWQ4M2NcXHVkZGVlXFx1ZDgzY1tcXHVkZGU4LVxcdWRkZWFcXHVkZGYxLVxcdWRkZjRcXHVkZGY2LVxcdWRkZjldfFxcdWQ4M2NcXHVkZGVmXFx1ZDgzY1tcXHVkZGVhXFx1ZGRmMlxcdWRkZjRcXHVkZGY1XXxcXHVkODNjXFx1ZGRmMFxcdWQ4M2NbXFx1ZGRlYVxcdWRkZWMtXFx1ZGRlZVxcdWRkZjJcXHVkZGYzXFx1ZGRmNVxcdWRkZjdcXHVkZGZjXFx1ZGRmZVxcdWRkZmZdfFxcdWQ4M2NcXHVkZGYxXFx1ZDgzY1tcXHVkZGU2LVxcdWRkZThcXHVkZGVlXFx1ZGRmMFxcdWRkZjctXFx1ZGRmYlxcdWRkZmVdfFxcdWQ4M2NcXHVkZGYyXFx1ZDgzY1tcXHVkZGU2XFx1ZGRlOC1cXHVkZGVkXFx1ZGRmMC1cXHVkZGZmXXxcXHVkODNjXFx1ZGRmM1xcdWQ4M2NbXFx1ZGRlNlxcdWRkZThcXHVkZGVhLVxcdWRkZWNcXHVkZGVlXFx1ZGRmMVxcdWRkZjRcXHVkZGY1XFx1ZGRmN1xcdWRkZmFcXHVkZGZmXXxcXHVkODNjXFx1ZGRmNFxcdWQ4M2NcXHVkZGYyfFxcdWQ4M2NcXHVkZGY1XFx1ZDgzY1tcXHVkZGU2XFx1ZGRlYS1cXHVkZGVkXFx1ZGRmMC1cXHVkZGYzXFx1ZGRmNy1cXHVkZGY5XFx1ZGRmY1xcdWRkZmVdfFxcdWQ4M2NcXHVkZGY2XFx1ZDgzY1xcdWRkZTZ8XFx1ZDgzY1xcdWRkZjdcXHVkODNjW1xcdWRkZWFcXHVkZGY0XFx1ZGRmOFxcdWRkZmFcXHVkZGZjXXxcXHVkODNjXFx1ZGRmOFxcdWQ4M2NbXFx1ZGRlNi1cXHVkZGVhXFx1ZGRlYy1cXHVkZGY0XFx1ZGRmNy1cXHVkZGY5XFx1ZGRmYlxcdWRkZmQtXFx1ZGRmZl18XFx1ZDgzY1xcdWRkZjlcXHVkODNjW1xcdWRkZTZcXHVkZGU4XFx1ZGRlOVxcdWRkZWItXFx1ZGRlZFxcdWRkZWYtXFx1ZGRmNFxcdWRkZjdcXHVkZGY5XFx1ZGRmYlxcdWRkZmNcXHVkZGZmXXxcXHVkODNjXFx1ZGRmYVxcdWQ4M2NbXFx1ZGRlNlxcdWRkZWNcXHVkZGYyXFx1ZGRmM1xcdWRkZjhcXHVkZGZlXFx1ZGRmZl18XFx1ZDgzY1xcdWRkZmJcXHVkODNjW1xcdWRkZTZcXHVkZGU4XFx1ZGRlYVxcdWRkZWNcXHVkZGVlXFx1ZGRmM1xcdWRkZmFdfFxcdWQ4M2NcXHVkZGZjXFx1ZDgzY1tcXHVkZGViXFx1ZGRmOF18XFx1ZDgzY1xcdWRkZmRcXHVkODNjXFx1ZGRmMHxcXHVkODNjXFx1ZGRmZVxcdWQ4M2NbXFx1ZGRlYVxcdWRkZjldfFxcdWQ4M2NcXHVkZGZmXFx1ZDgzY1tcXHVkZGU2XFx1ZGRmMlxcdWRkZmNdfFxcdWQ4M2NbXFx1ZGNjZlxcdWRkOGVcXHVkZDkxLVxcdWRkOWFcXHVkZGU2LVxcdWRkZmZcXHVkZTAxXFx1ZGUzMi1cXHVkZTM2XFx1ZGUzOC1cXHVkZTNhXFx1ZGU1MFxcdWRlNTFcXHVkZjAwLVxcdWRmMjBcXHVkZjJkLVxcdWRmMzVcXHVkZjM3LVxcdWRmN2NcXHVkZjdlLVxcdWRmODRcXHVkZjg2LVxcdWRmOTNcXHVkZmEwLVxcdWRmYzFcXHVkZmM1XFx1ZGZjNlxcdWRmYzhcXHVkZmM5XFx1ZGZjZi1cXHVkZmQzXFx1ZGZlMC1cXHVkZmYwXFx1ZGZmNFxcdWRmZjgtXFx1ZGZmZl18XFx1ZDgzZFtcXHVkYzAwLVxcdWRjM2VcXHVkYzQwXFx1ZGM0NFxcdWRjNDVcXHVkYzUxLVxcdWRjNjVcXHVkYzZhXFx1ZGM2ZlxcdWRjNzktXFx1ZGM3YlxcdWRjN2QtXFx1ZGM4MFxcdWRjODRcXHVkYzg4LVxcdWRjYTlcXHVkY2FiLVxcdWRjZmNcXHVkY2ZmLVxcdWRkM2RcXHVkZDRiLVxcdWRkNGVcXHVkZDUwLVxcdWRkNjdcXHVkZGE0XFx1ZGRmYi1cXHVkZTQ0XFx1ZGU0OC1cXHVkZTRhXFx1ZGU4MC1cXHVkZWEyXFx1ZGVhNC1cXHVkZWIzXFx1ZGViNy1cXHVkZWJmXFx1ZGVjMS1cXHVkZWM1XFx1ZGVkMC1cXHVkZWQyXFx1ZGVkNS1cXHVkZWQ3XFx1ZGVlYlxcdWRlZWNcXHVkZWY0LVxcdWRlZmNcXHVkZmUwLVxcdWRmZWJdfFxcdWQ4M2VbXFx1ZGQwZFxcdWRkMGVcXHVkZDEwLVxcdWRkMTdcXHVkZDFkXFx1ZGQyMC1cXHVkZDI1XFx1ZGQyNy1cXHVkZDJmXFx1ZGQzYVxcdWRkM2NcXHVkZDNmLVxcdWRkNDVcXHVkZDQ3LVxcdWRkNzZcXHVkZDc4XFx1ZGQ3YS1cXHVkZGI0XFx1ZGRiN1xcdWRkYmFcXHVkZGJjLVxcdWRkY2JcXHVkZGQwXFx1ZGRkZS1cXHVkZGZmXFx1ZGU3MC1cXHVkZTc0XFx1ZGU3OC1cXHVkZTdhXFx1ZGU4MC1cXHVkZTg2XFx1ZGU5MC1cXHVkZWE4XFx1ZGViMC1cXHVkZWI2XFx1ZGVjMC1cXHVkZWMyXFx1ZGVkMC1cXHVkZWQ2XXxbXFx1MjNlOS1cXHUyM2VjXFx1MjNmMFxcdTIzZjNcXHUyNjdlXFx1MjZjZVxcdTI3MDVcXHUyNzI4XFx1Mjc0Y1xcdTI3NGVcXHUyNzUzLVxcdTI3NTVcXHUyNzk1LVxcdTI3OTdcXHUyN2IwXFx1MjdiZlxcdWU1MGFdKXxcXHVmZTBmL2csXG5cbiAgICAvLyBhdm9pZCBydW50aW1lIFJlZ0V4cCBjcmVhdGlvbiBmb3Igbm90IHNvIHNtYXJ0LFxuICAgIC8vIG5vdCBKSVQgYmFzZWQsIGFuZCBvbGQgYnJvd3NlcnMgLyBlbmdpbmVzXG4gICAgVUZFMEZnID0gL1xcdUZFMEYvZyxcblxuICAgIC8vIGF2b2lkIHVzaW5nIGEgc3RyaW5nIGxpdGVyYWwgbGlrZSAnXFx1MjAwRCcgaGVyZSBiZWNhdXNlIG1pbmlmaWVycyBleHBhbmQgaXQgaW5saW5lXG4gICAgVTIwMEQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjAwRCksXG5cbiAgICAvLyB1c2VkIHRvIGZpbmQgSFRNTCBzcGVjaWFsIGNoYXJzIGluIGF0dHJpYnV0ZXNcbiAgICByZXNjYXBlciA9IC9bJjw+J1wiXS9nLFxuXG4gICAgLy8gbm9kZXMgd2l0aCB0eXBlIDEgd2hpY2ggc2hvdWxkICoqbm90KiogYmUgcGFyc2VkXG4gICAgc2hvdWxkbnRCZVBhcnNlZCA9IC9eKD86aWZyYW1lfG5vZnJhbWVzfG5vc2NyaXB0fHNjcmlwdHxzZWxlY3R8c3R5bGV8dGV4dGFyZWEpJC8sXG5cbiAgICAvLyBqdXN0IGEgcHJpdmF0ZSBzaG9ydGN1dFxuICAgIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbiAgcmV0dXJuIHR3ZW1vamk7XG5cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICBwcml2YXRlIGZ1bmN0aW9ucyAgLy9cbiAgLy8gICAgIGRlY2xhcmF0aW9uICAgICAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IHRvIGNyZWF0ZSB0ZXh0IG5vZGVzXG4gICAqIEBwYXJhbSAgIHN0cmluZyAgdGV4dCB1c2VkIHRvIGNyZWF0ZSBET00gdGV4dCBub2RlXG4gICAqIEByZXR1cm4gIE5vZGUgIGEgRE9NIG5vZGUgd2l0aCB0aGF0IHRleHRcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZVRleHQodGV4dCwgY2xlYW4pIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2xlYW4gPyB0ZXh0LnJlcGxhY2UoVUZFMEZnLCAnJykgOiB0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGVzY2FwZSBodG1sIGF0dHJpYnV0ZSB0ZXh0XG4gICAqIEBwYXJhbSAgIHN0cmluZyAgdGV4dCB1c2UgaW4gSFRNTCBhdHRyaWJ1dGVcbiAgICogQHJldHVybiAgc3RyaW5nICB0ZXh0IGVuY29kZWQgdG8gdXNlIGluIEhUTUwgYXR0cmlidXRlXG4gICAqL1xuICBmdW5jdGlvbiBlc2NhcGVIVE1MKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKHJlc2NhcGVyLCByZXBsYWNlcik7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBjYWxsYmFjayB1c2VkIHRvIGdlbmVyYXRlIGVtb2ppIHNyY1xuICAgKiAgYmFzZWQgb24gVHdpdHRlciBDRE5cbiAgICogQHBhcmFtICAgc3RyaW5nICAgIHRoZSBlbW9qaSBjb2RlcG9pbnQgc3RyaW5nXG4gICAqIEBwYXJhbSAgIHN0cmluZyAgICB0aGUgZGVmYXVsdCBzaXplIHRvIHVzZSwgaS5lLiBcIjM2eDM2XCJcbiAgICogQHJldHVybiAgc3RyaW5nICAgIHRoZSBpbWFnZSBzb3VyY2UgdG8gdXNlXG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0SW1hZ2VTcmNHZW5lcmF0b3IoaWNvbiwgb3B0aW9ucykge1xuICAgIHJldHVybiAnJy5jb25jYXQob3B0aW9ucy5iYXNlLCBvcHRpb25zLnNpemUsICcvJywgaWNvbiwgb3B0aW9ucy5leHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZ2VuZXJpYyBET00gbm9kZVR5cGUgMSwgd2FsayB0aHJvdWdoIGFsbCBjaGlsZHJlblxuICAgKiBhbmQgc3RvcmUgZXZlcnkgbm9kZVR5cGUgMyAoI3RleHQpIGZvdW5kIGluIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gICBFbGVtZW50IGEgRE9NIEVsZW1lbnQgd2l0aCBwcm9iYWJseSBzb21lIHRleHQgaW4gaXRcbiAgICogQHBhcmFtICAgQXJyYXkgdGhlIGxpc3Qgb2YgcHJldmlvdXNseSBkaXNjb3ZlcmVkIHRleHQgbm9kZXNcbiAgICogQHJldHVybiAgQXJyYXkgc2FtZSBsaXN0IHdpdGggbmV3IGRpc2NvdmVyZWQgbm9kZXMsIGlmIGFueVxuICAgKi9cbiAgZnVuY3Rpb24gZ3JhYkFsbFRleHROb2Rlcyhub2RlLCBhbGxUZXh0KSB7XG4gICAgdmFyXG4gICAgICBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzLFxuICAgICAgbGVuZ3RoID0gY2hpbGROb2Rlcy5sZW5ndGgsXG4gICAgICBzdWJub2RlLFxuICAgICAgbm9kZVR5cGU7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICBzdWJub2RlID0gY2hpbGROb2Rlc1tsZW5ndGhdO1xuICAgICAgbm9kZVR5cGUgPSBzdWJub2RlLm5vZGVUeXBlO1xuICAgICAgLy8gcGFyc2UgZW1vamkgb25seSBpbiB0ZXh0IG5vZGVzXG4gICAgICBpZiAobm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgLy8gY29sbGVjdCB0aGVtIHRvIHByb2Nlc3MgZW1vamkgbGF0ZXJcbiAgICAgICAgYWxsVGV4dC5wdXNoKHN1Ym5vZGUpO1xuICAgICAgfVxuICAgICAgLy8gaWdub3JlIGFsbCBub2RlcyB0aGF0IGFyZSBub3QgdHlwZSAxLCB0aGF0IGFyZSBzdmcsIG9yIHRoYXRcbiAgICAgIC8vIHNob3VsZCBub3QgYmUgcGFyc2VkIGFzIHNjcmlwdCwgc3R5bGUsIGFuZCBvdGhlcnNcbiAgICAgIGVsc2UgaWYgKG5vZGVUeXBlID09PSAxICYmICEoJ293bmVyU1ZHRWxlbWVudCcgaW4gc3Vibm9kZSkgJiZcbiAgICAgICAgICAhc2hvdWxkbnRCZVBhcnNlZC50ZXN0KHN1Ym5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgZ3JhYkFsbFRleHROb2RlcyhzdWJub2RlLCBhbGxUZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsbFRleHQ7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBib3RoIHJlbW92ZSB0aGUgcG9zc2libGUgdmFyaWFudFxuICAgKiAgYW5kIHRvIGNvbnZlcnQgdXRmMTYgaW50byBjb2RlIHBvaW50cy5cbiAgICogIElmIHRoZXJlIGlzIGEgemVyby13aWR0aC1qb2luZXIgKFUrMjAwRCksIGxlYXZlIHRoZSB2YXJpYW50cyBpbi5cbiAgICogQHBhcmFtICAgc3RyaW5nICAgIHRoZSByYXcgdGV4dCBvZiB0aGUgZW1vamkgbWF0Y2hcbiAgICogQHJldHVybiAgc3RyaW5nICAgIHRoZSBjb2RlIHBvaW50XG4gICAqL1xuICBmdW5jdGlvbiBncmFiVGhlUmlnaHRJY29uKHJhd1RleHQpIHtcbiAgICAvLyBpZiB2YXJpYW50IGlzIHByZXNlbnQgYXMgXFx1RkUwRlxuICAgIHJldHVybiB0b0NvZGVQb2ludChyYXdUZXh0LmluZGV4T2YoVTIwMEQpIDwgMCA/XG4gICAgICByYXdUZXh0LnJlcGxhY2UoVUZFMEZnLCAnJykgOlxuICAgICAgcmF3VGV4dFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRE9NIHZlcnNpb24gb2YgdGhlIHNhbWUgbG9naWMgLyBwYXJzZXI6XG4gICAqICBlbW9qaWZ5IGFsbCBmb3VuZCBzdWItdGV4dCBub2RlcyBwbGFjaW5nIGltYWdlcyBub2RlIGluc3RlYWQuXG4gICAqIEBwYXJhbSAgIEVsZW1lbnQgICBnZW5lcmljIERPTSBub2RlIHdpdGggc29tZSB0ZXh0IGluIHNvbWUgY2hpbGQgbm9kZVxuICAgKiBAcGFyYW0gICBPYmplY3QgICAgb3B0aW9ucyAgY29udGFpbmluZyBpbmZvIGFib3V0IGhvdyB0byBwYXJzZVxuICAgICpcbiAgICAqICAgICAgICAgICAgLmNhbGxiYWNrICAgRnVuY3Rpb24gIHRoZSBjYWxsYmFjayB0byBpbnZva2UgcGVyIGVhY2ggZm91bmQgZW1vamkuXG4gICAgKiAgICAgICAgICAgIC5iYXNlICAgICAgIHN0cmluZyAgICB0aGUgYmFzZSB1cmwsIGJ5IGRlZmF1bHQgdHdlbW9qaS5iYXNlXG4gICAgKiAgICAgICAgICAgIC5leHQgICAgICAgIHN0cmluZyAgICB0aGUgaW1hZ2UgZXh0ZW5zaW9uLCBieSBkZWZhdWx0IHR3ZW1vamkuZXh0XG4gICAgKiAgICAgICAgICAgIC5zaXplICAgICAgIHN0cmluZyAgICB0aGUgYXNzZXRzIHNpemUsIGJ5IGRlZmF1bHQgdHdlbW9qaS5zaXplXG4gICAgKlxuICAgKiBAcmV0dXJuICBFbGVtZW50IHNhbWUgZ2VuZXJpYyBub2RlIHdpdGggZW1vamkgaW4gcGxhY2UsIGlmIGFueS5cbiAgICovXG4gIGZ1bmN0aW9uIHBhcnNlTm9kZShub2RlLCBvcHRpb25zKSB7XG4gICAgdmFyXG4gICAgICBhbGxUZXh0ID0gZ3JhYkFsbFRleHROb2Rlcyhub2RlLCBbXSksXG4gICAgICBsZW5ndGggPSBhbGxUZXh0Lmxlbmd0aCxcbiAgICAgIGF0dHJpYixcbiAgICAgIGF0dHJuYW1lLFxuICAgICAgbW9kaWZpZWQsXG4gICAgICBmcmFnbWVudCxcbiAgICAgIHN1Ym5vZGUsXG4gICAgICB0ZXh0LFxuICAgICAgbWF0Y2gsXG4gICAgICBpLFxuICAgICAgaW5kZXgsXG4gICAgICBpbWcsXG4gICAgICByYXdUZXh0LFxuICAgICAgaWNvbklkLFxuICAgICAgc3JjO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgbW9kaWZpZWQgPSBmYWxzZTtcbiAgICAgIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgc3Vibm9kZSA9IGFsbFRleHRbbGVuZ3RoXTtcbiAgICAgIHRleHQgPSBzdWJub2RlLm5vZGVWYWx1ZTtcbiAgICAgIGkgPSAwO1xuICAgICAgd2hpbGUgKChtYXRjaCA9IHJlLmV4ZWModGV4dCkpKSB7XG4gICAgICAgIGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGlmIChpbmRleCAhPT0gaSkge1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgY3JlYXRlVGV4dCh0ZXh0LnNsaWNlKGksIGluZGV4KSwgdHJ1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJhd1RleHQgPSBtYXRjaFswXTtcbiAgICAgICAgaWNvbklkID0gZ3JhYlRoZVJpZ2h0SWNvbihyYXdUZXh0KTtcbiAgICAgICAgaSA9IGluZGV4ICsgcmF3VGV4dC5sZW5ndGg7XG4gICAgICAgIHNyYyA9IG9wdGlvbnMuY2FsbGJhY2soaWNvbklkLCBvcHRpb25zKTtcbiAgICAgICAgaWYgKGljb25JZCAmJiBzcmMpIHtcbiAgICAgICAgICBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICBpbWcub25lcnJvciA9IG9wdGlvbnMub25lcnJvcjtcbiAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdkcmFnZ2FibGUnLCAnZmFsc2UnKTtcbiAgICAgICAgICBhdHRyaWIgPSBvcHRpb25zLmF0dHJpYnV0ZXMocmF3VGV4dCwgaWNvbklkKTtcbiAgICAgICAgICBmb3IgKGF0dHJuYW1lIGluIGF0dHJpYikge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBhdHRyaWIuaGFzT3duUHJvcGVydHkoYXR0cm5hbWUpICYmXG4gICAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFueSBoYW5kbGVycyB0byBiZSBzZXQgKyBkb24ndCBhbGxvdyBvdmVycmlkZXNcbiAgICAgICAgICAgICAgYXR0cm5hbWUuaW5kZXhPZignb24nKSAhPT0gMCAmJlxuICAgICAgICAgICAgICAhaW1nLmhhc0F0dHJpYnV0ZShhdHRybmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKGF0dHJuYW1lLCBhdHRyaWJbYXR0cm5hbWVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW1nLmNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3NOYW1lO1xuICAgICAgICAgIGltZy5hbHQgPSByYXdUZXh0O1xuICAgICAgICAgIGltZy5zcmMgPSBzcmM7XG4gICAgICAgICAgbW9kaWZpZWQgPSB0cnVlO1xuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGltZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbWcpIGZyYWdtZW50LmFwcGVuZENoaWxkKGNyZWF0ZVRleHQocmF3VGV4dCwgZmFsc2UpKTtcbiAgICAgICAgaW1nID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIGlzIHRoZXJlIGFjdHVhbGx5IGFueXRoaW5nIHRvIHJlcGxhY2UgaW4gaGVyZSA/XG4gICAgICBpZiAobW9kaWZpZWQpIHtcbiAgICAgICAgLy8gYW55IHRleHQgbGVmdCB0byBiZSBhZGRlZCA/XG4gICAgICAgIGlmIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgIGNyZWF0ZVRleHQodGV4dC5zbGljZShpKSwgdHJ1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHRleHQgbm9kZSBvbmx5LCBsZWF2ZSBpbnRhY3RcbiAgICAgICAgLy8gYW55dGhpbmcgZWxzZSBzdXJyb3VuZGluZyBzdWNoIHRleHRcbiAgICAgICAgc3Vibm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChmcmFnbWVudCwgc3Vibm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmluZy9IVE1MIHZlcnNpb24gb2YgdGhlIHNhbWUgbG9naWMgLyBwYXJzZXI6XG4gICAqICBlbW9qaWZ5IGEgZ2VuZXJpYyB0ZXh0IHBsYWNpbmcgaW1hZ2VzIHRhZ3MgaW5zdGVhZCBvZiBzdXJyb2dhdGVzIHBhaXIuXG4gICAqIEBwYXJhbSAgIHN0cmluZyAgICBnZW5lcmljIHN0cmluZyB3aXRoIHBvc3NpYmx5IHNvbWUgZW1vamkgaW4gaXRcbiAgICogQHBhcmFtICAgT2JqZWN0ICAgIG9wdGlvbnMgIGNvbnRhaW5pbmcgaW5mbyBhYm91dCBob3cgdG8gcGFyc2VcbiAgICpcbiAgICogICAgICAgICAgICAuY2FsbGJhY2sgICBGdW5jdGlvbiAgdGhlIGNhbGxiYWNrIHRvIGludm9rZSBwZXIgZWFjaCBmb3VuZCBlbW9qaS5cbiAgICogICAgICAgICAgICAuYmFzZSAgICAgICBzdHJpbmcgICAgdGhlIGJhc2UgdXJsLCBieSBkZWZhdWx0IHR3ZW1vamkuYmFzZVxuICAgKiAgICAgICAgICAgIC5leHQgICAgICAgIHN0cmluZyAgICB0aGUgaW1hZ2UgZXh0ZW5zaW9uLCBieSBkZWZhdWx0IHR3ZW1vamkuZXh0XG4gICAqICAgICAgICAgICAgLnNpemUgICAgICAgc3RyaW5nICAgIHRoZSBhc3NldHMgc2l6ZSwgYnkgZGVmYXVsdCB0d2Vtb2ppLnNpemVcbiAgICpcbiAgICogQHJldHVybiAgdGhlIHN0cmluZyB3aXRoIDxpbWcgdGFncz4gcmVwbGFjaW5nIGFsbCBmb3VuZCBhbmQgcGFyc2VkIGVtb2ppXG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZVN0cmluZyhzdHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gcmVwbGFjZShzdHIsIGZ1bmN0aW9uIChyYXdUZXh0KSB7XG4gICAgICB2YXJcbiAgICAgICAgcmV0ID0gcmF3VGV4dCxcbiAgICAgICAgaWNvbklkID0gZ3JhYlRoZVJpZ2h0SWNvbihyYXdUZXh0KSxcbiAgICAgICAgc3JjID0gb3B0aW9ucy5jYWxsYmFjayhpY29uSWQsIG9wdGlvbnMpLFxuICAgICAgICBhdHRyaWIsXG4gICAgICAgIGF0dHJuYW1lO1xuICAgICAgaWYgKGljb25JZCAmJiBzcmMpIHtcbiAgICAgICAgLy8gcmVjeWNsZSB0aGUgbWF0Y2ggc3RyaW5nIHJlcGxhY2luZyB0aGUgZW1vamlcbiAgICAgICAgLy8gd2l0aCBpdHMgaW1hZ2UgY291bnRlciBwYXJ0XG4gICAgICAgIHJldCA9ICc8aW1nICcuY29uY2F0KFxuICAgICAgICAgICdjbGFzcz1cIicsIG9wdGlvbnMuY2xhc3NOYW1lLCAnXCIgJyxcbiAgICAgICAgICAnZHJhZ2dhYmxlPVwiZmFsc2VcIiAnLFxuICAgICAgICAgIC8vIG5lZWRzIHRvIHByZXNlcnZlIHVzZXIgb3JpZ2luYWwgaW50ZW50XG4gICAgICAgICAgLy8gd2hlbiB2YXJpYW50cyBzaG91bGQgYmUgY29waWVkIGFuZCBwYXN0ZWQgdG9vXG4gICAgICAgICAgJ2FsdD1cIicsXG4gICAgICAgICAgcmF3VGV4dCxcbiAgICAgICAgICAnXCInLFxuICAgICAgICAgICcgc3JjPVwiJyxcbiAgICAgICAgICBzcmMsXG4gICAgICAgICAgJ1wiJ1xuICAgICAgICApO1xuICAgICAgICBhdHRyaWIgPSBvcHRpb25zLmF0dHJpYnV0ZXMocmF3VGV4dCwgaWNvbklkKTtcbiAgICAgICAgZm9yIChhdHRybmFtZSBpbiBhdHRyaWIpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhdHRyaWIuaGFzT3duUHJvcGVydHkoYXR0cm5hbWUpICYmXG4gICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBhbnkgaGFuZGxlcnMgdG8gYmUgc2V0ICsgZG9uJ3QgYWxsb3cgb3ZlcnJpZGVzXG4gICAgICAgICAgICBhdHRybmFtZS5pbmRleE9mKCdvbicpICE9PSAwICYmXG4gICAgICAgICAgICByZXQuaW5kZXhPZignICcgKyBhdHRybmFtZSArICc9JykgPT09IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXQgPSByZXQuY29uY2F0KCcgJywgYXR0cm5hbWUsICc9XCInLCBlc2NhcGVIVE1MKGF0dHJpYlthdHRybmFtZV0pLCAnXCInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gcmV0LmNvbmNhdCgnLz4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdXNlZCB0byBhY3R1YWxseSByZXBsYWNlIEhUTUwgc3BlY2lhbCBjaGFyc1xuICAgKiBAcGFyYW0gICBzdHJpbmcgIEhUTUwgc3BlY2lhbCBjaGFyXG4gICAqIEByZXR1cm4gIHN0cmluZyAgZW5jb2RlZCBIVE1MIHNwZWNpYWwgY2hhclxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZXIobSkge1xuICAgIHJldHVybiBlc2NhcGVyW21dO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgb3B0aW9ucy5hdHRyaWJ1dGUgY2FsbGJhY2tcbiAgICogQHJldHVybiAgbnVsbFxuICAgKi9cbiAgZnVuY3Rpb24gcmV0dXJuTnVsbCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlbiBhIGdlbmVyaWMgdmFsdWUsIGNyZWF0ZXMgaXRzIHNxdWFyZWQgY291bnRlcnBhcnQgaWYgaXQncyBhIG51bWJlci5cbiAgICogIEFzIGV4YW1wbGUsIG51bWJlciAzNiB3aWxsIHJldHVybiAnMzZ4MzYnLlxuICAgKiBAcGFyYW0gICBhbnkgICAgIGEgZ2VuZXJpYyB2YWx1ZS5cbiAgICogQHJldHVybiAgYW55ICAgICBhIHN0cmluZyByZXByZXNlbnRpbmcgYXNzZXQgc2l6ZSwgaS5lLiBcIjM2eDM2XCJcbiAgICogICAgICAgICAgICAgICAgICBvbmx5IGluIGNhc2UgdGhlIHZhbHVlIHdhcyBhIG51bWJlci5cbiAgICogICAgICAgICAgICAgICAgICBSZXR1cm5zIGluaXRpYWwgdmFsdWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9TaXplU3F1YXJlZEFzc2V0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgdmFsdWUgKyAneCcgKyB2YWx1ZSA6XG4gICAgICB2YWx1ZTtcbiAgfVxuXG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgZXhwb3J0ZWQgZnVuY3Rpb25zIC8vXG4gIC8vICAgICBkZWNsYXJhdGlvbiAgICAgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoY29kZXBvaW50KSB7XG4gICAgdmFyIGNvZGUgPSB0eXBlb2YgY29kZXBvaW50ID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgcGFyc2VJbnQoY29kZXBvaW50LCAxNikgOiBjb2RlcG9pbnQ7XG4gICAgaWYgKGNvZGUgPCAweDEwMDAwKSB7XG4gICAgICByZXR1cm4gZnJvbUNoYXJDb2RlKGNvZGUpO1xuICAgIH1cbiAgICBjb2RlIC09IDB4MTAwMDA7XG4gICAgcmV0dXJuIGZyb21DaGFyQ29kZShcbiAgICAgIDB4RDgwMCArIChjb2RlID4+IDEwKSxcbiAgICAgIDB4REMwMCArIChjb2RlICYgMHgzRkYpXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlKHdoYXQsIGhvdykge1xuICAgIGlmICghaG93IHx8IHR5cGVvZiBob3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhvdyA9IHtjYWxsYmFjazogaG93fTtcbiAgICB9XG4gICAgLy8gaWYgZmlyc3QgYXJndW1lbnQgaXMgc3RyaW5nLCBpbmplY3QgaHRtbCA8aW1nPiB0YWdzXG4gICAgLy8gb3RoZXJ3aXNlIHVzZSB0aGUgRE9NIHRyZWUgYW5kIHBhcnNlIHRleHQgbm9kZXMgb25seVxuICAgIHJldHVybiAodHlwZW9mIHdoYXQgPT09ICdzdHJpbmcnID8gcGFyc2VTdHJpbmcgOiBwYXJzZU5vZGUpKHdoYXQsIHtcbiAgICAgIGNhbGxiYWNrOiAgIGhvdy5jYWxsYmFjayB8fCBkZWZhdWx0SW1hZ2VTcmNHZW5lcmF0b3IsXG4gICAgICBhdHRyaWJ1dGVzOiB0eXBlb2YgaG93LmF0dHJpYnV0ZXMgPT09ICdmdW5jdGlvbicgPyBob3cuYXR0cmlidXRlcyA6IHJldHVybk51bGwsXG4gICAgICBiYXNlOiAgICAgICB0eXBlb2YgaG93LmJhc2UgPT09ICdzdHJpbmcnID8gaG93LmJhc2UgOiB0d2Vtb2ppLmJhc2UsXG4gICAgICBleHQ6ICAgICAgICBob3cuZXh0IHx8IHR3ZW1vamkuZXh0LFxuICAgICAgc2l6ZTogICAgICAgaG93LmZvbGRlciB8fCB0b1NpemVTcXVhcmVkQXNzZXQoaG93LnNpemUgfHwgdHdlbW9qaS5zaXplKSxcbiAgICAgIGNsYXNzTmFtZTogIGhvdy5jbGFzc05hbWUgfHwgdHdlbW9qaS5jbGFzc05hbWUsXG4gICAgICBvbmVycm9yOiAgICBob3cub25lcnJvciB8fCB0d2Vtb2ppLm9uZXJyb3JcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGxhY2UodGV4dCwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gU3RyaW5nKHRleHQpLnJlcGxhY2UocmUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3QodGV4dCkge1xuICAgIC8vIElFNiBuZWVkcyBhIHJlc2V0IGJlZm9yZSB0b29cbiAgICByZS5sYXN0SW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSByZS50ZXN0KHRleHQpO1xuICAgIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvQ29kZVBvaW50KHVuaWNvZGVTdXJyb2dhdGVzLCBzZXApIHtcbiAgICB2YXJcbiAgICAgIHIgPSBbXSxcbiAgICAgIGMgPSAwLFxuICAgICAgcCA9IDAsXG4gICAgICBpID0gMDtcbiAgICB3aGlsZSAoaSA8IHVuaWNvZGVTdXJyb2dhdGVzLmxlbmd0aCkge1xuICAgICAgYyA9IHVuaWNvZGVTdXJyb2dhdGVzLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHIucHVzaCgoMHgxMDAwMCArICgocCAtIDB4RDgwMCkgPDwgMTApICsgKGMgLSAweERDMDApKS50b1N0cmluZygxNikpO1xuICAgICAgICBwID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoMHhEODAwIDw9IGMgJiYgYyA8PSAweERCRkYpIHtcbiAgICAgICAgcCA9IGM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByLnB1c2goYy50b1N0cmluZygxNikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gci5qb2luKHNlcCB8fCAnLScpO1xuICB9XG5cbn0oKSk7XG5pZiAoIWxvY2F0aW9uLnByb3RvY29sKSB7XG4gIHR3ZW1vamkuYmFzZSA9IHR3ZW1vamkuYmFzZS5yZXBsYWNlKC9eaHR0cDovLCBcIlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gdHdlbW9qaTsiLCJpbXBvcnQgeyBBcHAsIEZ1enp5U3VnZ2VzdE1vZGFsLCBQbHVnaW4sIEZ1enp5TWF0Y2gsIE1hcmtkb3duUG9zdFByb2Nlc3NvciwgTWFya2Rvd25Qb3N0UHJvY2Vzc29yQ29udGV4dCwgTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgb3JkZXJlZEVtb2ppIGZyb20gJ3VuaWNvZGUtZW1vamktanNvbi9kYXRhLW9yZGVyZWQtZW1vamknXG5pbXBvcnQgZW1vamlOYW1lcyBmcm9tICd1bmljb2RlLWVtb2ppLWpzb24vZGF0YS1ieS1lbW9qaSdcbmltcG9ydCB0d2Vtb2ppIGZyb20gJ3R3ZW1vamknXG5cbmNvbnN0IGluZGljYXRvclN0eWxlOiBzdHJpbmcgPVxuICAnY29sb3I6IHZhcigtLXRleHQtYWNjZW50KTsgd2lkdGg6IDIuNWVtOyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZsb2F0OmxlZnQ7IGZvbnQtd2VpZ2h0OjgwMDsnO1xuXG5pbnRlcmZhY2UgTXlQbHVnaW5TZXR0aW5ncyB7XG4gIHR3ZW1vamlBY3RpdmU6IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IE15UGx1Z2luU2V0dGluZ3MgPSB7XG5cdHR3ZW1vamlBY3RpdmU6IHRydWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXlQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICBlbW9qaXM6IEVtb2ppSXRlbVtdXG4gIHNldHRpbmdzOiBNeVBsdWdpblNldHRpbmdzO1xuXG4gIHB1YmxpYyBzdGF0aWMgcG9zdHByb2Nlc3NvcjogTWFya2Rvd25Qb3N0UHJvY2Vzc29yID0gKFxuICAgIGVsOiBIVE1MRWxlbWVudCxcbiAgICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHRcbiAgKSA9PiB7XG4gICAgdHdlbW9qaS5wYXJzZShlbClcbiAgfVxuXG4gIGxvYWRFbW9qaXMoKTogRW1vamlJdGVtW10ge1xuICAgIGZ1bmN0aW9uIHRpdGxlQ2FzZShzdHJpbmc6IHN0cmluZykge1xuICAgICAgbGV0IHNlbnRlbmNlID0gc3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ18nKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VudGVuY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2VudGVuY2VbaV0gPSBzZW50ZW5jZVtpXVswXS50b1VwcGVyQ2FzZSgpICsgc2VudGVuY2VbaV0uc2xpY2UoMSk7XG4gICAgICB9XG4gIFxuICAgICAgcmV0dXJuIHNlbnRlbmNlLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbXMgPSBvcmRlcmVkRW1vamkubWFwKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHRpdGxlQ2FzZShlbW9qaU5hbWVzW25hbWVdW1wibmFtZVwiXSksXG4gICAgICAgIGNoYXI6IG5hbWUsXG4gICAgICAgIGltZ0h0bWw6IHR3ZW1vamkucGFyc2UobmFtZSlcbiAgICAgIH1cbiAgICB9KVxuICBcbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuXHRhc3luYyBvbmxvYWQoKSB7XG5cbiAgICB0aGlzLmVtb2ppcyA9IHRoaXMubG9hZEVtb2ppcygpO1xuXG4gICAgYXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKVxuXG4gICAgdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBTZXR0aW5nc1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudHdlbW9qaUFjdGl2ZSkge1xuICAgICAgTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIucmVnaXN0ZXJQb3N0UHJvY2Vzc29yKE15UGx1Z2luLnBvc3Rwcm9jZXNzb3IpXG4gICAgfVxuXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcblx0XHRcdGlkOiAnZW1vamktcGlja2VyOm9wZW4tcGlja2VyJyxcbiAgICAgIG5hbWU6ICdPcGVuIGVtb2ppIHBpY2tlcicsXG4gICAgICBob3RrZXlzOiBbXSxcblx0XHRcdGNoZWNrQ2FsbGJhY2s6IChjaGVja2luZzogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRsZXQgbGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmO1xuXHRcdFx0XHRpZiAobGVhZikge1xuXHRcdFx0XHRcdGlmICghY2hlY2tpbmcpIHtcblx0XHRcdFx0XHRcdG5ldyBFbW9qaUZ1enp5U3VnZ2VzdE1vZGFsKHRoaXMuYXBwLCB0aGlzLmVtb2ppcywgdGhpcy5zZXR0aW5ncykub3BlbigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0fVxuXG5cdG9udW5sb2FkKCkge1xuICB9XG4gIFxuICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfU0VUVElOR1MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XG5cdH1cblxuXHRhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcblx0fVxufVxuXG5pbnRlcmZhY2UgRW1vamlJdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBjaGFyOiBzdHJpbmc7XG4gIGltZ0h0bWw6IHN0cmluZztcbn1cblxuXG5jbGFzcyBFbW9qaUZ1enp5U3VnZ2VzdE1vZGFsIGV4dGVuZHMgRnV6enlTdWdnZXN0TW9kYWw8RW1vamlJdGVtPiB7XG4gIGFwcDogQXBwO1xuICBlbW9qaXM6IEVtb2ppSXRlbVtdO1xuICBzZXR0aW5nczogTXlQbHVnaW5TZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgZW1vamlzOiBFbW9qaUl0ZW1bXSwgc2V0dGluZ3M6IE15UGx1Z2luU2V0dGluZ3MpIHtcbiAgICAgIHN1cGVyKGFwcCk7XG4gICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgIHRoaXMuZW1vamlzID0gZW1vamlzO1xuICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICB9XG5cbiAgZ2V0SXRlbXMoKTogRW1vamlJdGVtW10ge1xuICAgICAgcmV0dXJuIHRoaXMuZW1vamlzO1xuICB9XG5cbiAgZ2V0SXRlbVRleHQoaXRlbTogRW1vamlJdGVtKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBpdGVtLm5hbWU7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKGl0ZW06IEZ1enp5TWF0Y2g8RW1vamlJdGVtPiwgZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgc3VwZXIucmVuZGVyU3VnZ2VzdGlvbihpdGVtLCBlbCk7XG4gICAgdGhpcy51cGRhdGVTdWdnZXN0aW9uRWxGb3JNb2RlKGl0ZW0sIGVsKTtcbiAgfVxuXG4gIHVwZGF0ZVN1Z2dlc3Rpb25FbEZvck1vZGUoaXRlbTogRnV6enlNYXRjaDxFbW9qaUl0ZW0+LCBlbDogSFRNTEVsZW1lbnQpIHtcblxuICAgIHZhciBpbmRpY2F0b3JFbCA9IGNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICBhdHRyOiB7IHN0eWxlOiBpbmRpY2F0b3JTdHlsZSB9LFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MudHdlbW9qaUFjdGl2ZSkge1xuICAgICAgaW5kaWNhdG9yRWwuaW5uZXJIVE1MID0gaXRlbS5pdGVtLmltZ0h0bWxcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kaWNhdG9yRWwudGV4dENvbnRlbnQgPSBpdGVtLml0ZW0uY2hhclxuICAgIH1cbiAgICBcbiAgICBlbC5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2FmdGVyYmVnaW4nLCBpbmRpY2F0b3JFbCk7XG4gIH1cblxuICBvbkNob29zZUl0ZW0oaXRlbTogRW1vamlJdGVtLCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgaXRlbS5jaGFyKVxuICB9XG59XG5cbmNsYXNzIFNldHRpbmdzVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHBsdWdpbjogTXlQbHVnaW47XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTXlQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdH1cblxuXHRkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGxldCB7Y29udGFpbmVyRWx9ID0gdGhpcztcblxuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDEnLCB7dGV4dDogJ0Vtb2ppIFRvb2xiYXInfSk7XG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2EnLCB7IHRleHQ6ICdDcmVhdGVkIGJ5IG9saXZlcnloJywgaHJlZjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9vbGl2ZXJ5aC8nfSkpO1xuXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywge3RleHQ6ICdTZXR0aW5ncyd9KTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1R3aXR0ZXIgRW1vamknKVxuICAgICAgLnNldERlc2MoJ0ltcHJvdmVkIGVtb2ppIHN1cHBvcnQuIE5vdGU6IHRoaXMgYXBwbGllcyB0byBlbW9qaSBzZWFyY2ggYW5kIHByZXZpZXcgb25seS4nKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50d2Vtb2ppQWN0aXZlKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudHdlbW9qaUFjdGl2ZSA9IHZhbHVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIucmVnaXN0ZXJQb3N0UHJvY2Vzc29yKE15UGx1Z2luLnBvc3Rwcm9jZXNzb3IpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLnVucmVnaXN0ZXJQb3N0UHJvY2Vzc29yKE15UGx1Z2luLnBvc3Rwcm9jZXNzb3IpXG4gICAgICAgICAgfVxuXHRcdFx0XHR9KSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJnbG9iYWwiLCJ0d2Vtb2ppIiwiTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIiLCJQbHVnaW4iLCJGdXp6eVN1Z2dlc3RNb2RhbCIsIlNldHRpbmciLCJQbHVnaW5TZXR0aW5nVGFiIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtBQUM5QyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pGLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkYsb0JBQW9CLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQzNDLGFBQWE7QUFDYixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDbEUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3pGLEtBQUs7QUFDTDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZHQSxJQUFJLFFBQVEsR0FBR0EsY0FBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7QUFDckM7QUFDQSxJQUFJLE9BQU8sSUFBSTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFFRjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxJQUFJLE9BQU8sR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFJLEVBQUUsc0NBQXNDO0FBQ2xEO0FBQ0E7QUFDQSxNQUFNLEdBQUcsRUFBRSxNQUFNO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLE1BQU0s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 diff --git a/.obsidian/plugins/obsidian-emoji-toolbar/manifest.json b/.obsidian/plugins/obsidian-emoji-toolbar/manifest.json new file mode 100644 index 00000000..1e417b06 --- /dev/null +++ b/.obsidian/plugins/obsidian-emoji-toolbar/manifest.json @@ -0,0 +1,9 @@ +{ + "id": "obsidian-emoji-toolbar", + "name": "Emoji Toolbar", + "version": "0.2.2", + "description": "Quickly search for and insert emojis into your notes.", + "author": "oliveryh", + "authorUrl": "https://github.com/oliveryh/obsidian-emoji-toolbar", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-emoji-toolbar/styles.css b/.obsidian/plugins/obsidian-emoji-toolbar/styles.css new file mode 100644 index 00000000..057b1812 --- /dev/null +++ b/.obsidian/plugins/obsidian-emoji-toolbar/styles.css @@ -0,0 +1,7 @@ +img.emoji { + height: 1em; + width: 1em; + margin: 0 0.05em 0 0.1em; + vertical-align: -0.1em; + display: inline-block; +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/.gitignore b/.obsidian/plugins/obsidian-icon-folder-1.0.0/.gitignore new file mode 100644 index 00000000..3e9125e6 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/.gitignore @@ -0,0 +1,13 @@ +# Intellij +*.iml +.idea + +# npm +node_modules + +# build +main.js +*.js.map + +# obsidian +data.json diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/README.md b/.obsidian/plugins/obsidian-icon-folder-1.0.0/README.md new file mode 100644 index 00000000..78536e20 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/README.md @@ -0,0 +1,20 @@ +# Obsidian Icon Folder + +This obsidian plugin allows you to add icons to your folder. + +Right now, the current iconsets are available: +* [Remixicon](https://remixicon.com/) + +## Screenshots + +Here is one way to + +## How to use + +It is pretty simple to add a icon to your folder: + +1. Right click on the folder where you want to add an icon +2. Select the `Change Icon` menu item (prefixed with a `#` icon) +3. Select the icon you want and profit! + +To delete an icon, you just need to click on the `Delete Icon` (prefixed with a `trash` icon) menu item. \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/manifest.json b/.obsidian/plugins/obsidian-icon-folder-1.0.0/manifest.json new file mode 100644 index 00000000..9321efba --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "obsidian-icon-folder", + "name": "Icon Folder", + "version": "1.0.0", + "minAppVersion": "0.9.12", + "description": "This plugin allows to add an emoji in front of a folder.", + "author": "Florian Woelki", + "authorUrl": "https://florianwoelki.com/", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/package.json b/.obsidian/plugins/obsidian-icon-folder-1.0.0/package.json new file mode 100644 index 00000000..e0049537 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/package.json @@ -0,0 +1,28 @@ +{ + "name": "obsidian-icon-folder", + "version": "1.0.0", + "description": "This is an obsidian plugin that allows us to use an icon in the prefix of a folder name.", + "main": "main.js", + "scripts": { + "dev": "rollup --config rollup.config.js -w", + "build": "rollup --config rollup.config.js --environment BUILD:production" + }, + "keywords": [], + "author": "", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^18.0.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-typescript": "^8.2.1", + "@types/node": "^14.14.37", + "obsidian": "^0.12.0", + "rollup": "^2.32.1", + "tslib": "^2.2.0", + "typescript": "^4.2.4" + }, + "dependencies": { + "react": "^17.0.2", + "react-dom": "^17.0.2", + "react-icons": "^4.2.0" + } +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/rollup.config.js b/.obsidian/plugins/obsidian-icon-folder-1.0.0/rollup.config.js new file mode 100644 index 00000000..317497c6 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/rollup.config.js @@ -0,0 +1,30 @@ +import typescript from '@rollup/plugin-typescript'; +import {nodeResolve} from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; + +const isProd = (process.env.BUILD === 'production'); + +const banner = +`/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ +`; + +export default { + input: './src/main.ts', + output: { + dir: '.', + sourcemap: 'inline', + sourcemapExcludeSources: isProd, + format: 'cjs', + exports: 'default', + banner, + }, + external: ['obsidian'], + plugins: [ + typescript(), + nodeResolve({browser: true}), + commonjs(), + ] +}; \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/iconsPickerModal.ts b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/iconsPickerModal.ts new file mode 100644 index 00000000..a625772b --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/iconsPickerModal.ts @@ -0,0 +1,70 @@ +import * as remixicons from 'react-icons/ri/index'; +import { App, FuzzyMatch, FuzzySuggestModal } from 'obsidian'; +// @ts-ignore +import { renderToString } from 'react-dom/server'; +import IconFolderPlugin from './main'; +import { addToDOM } from './util'; + +export interface Icon { + id: string; + name: string; +} + +export default class IconsPickerModal extends FuzzySuggestModal { + private plugin: IconFolderPlugin; + private path: string; + + constructor(app: App, plugin: IconFolderPlugin, path: string) { + super(app); + this.plugin = plugin; + this.path = path; + } + + onOpen() { + super.onOpen(); + } + + onClose() { + let { contentEl } = this; + contentEl.empty(); + } + + getItemText(item: Icon): string { + return item.name; + } + + getItems(): Icon[] { + const iconKeys: Icon[] = []; + for (let icon in remixicons) { + iconKeys.push({ + id: icon, + name: icon.substring(2), + }); + } + + return iconKeys; + } + + onChooseItem(item: Icon): void { + addToDOM(this.plugin, this.path, item.id); + this.plugin.addFolderIcon(this.path, item.id); + } + + renderSuggestion(item: FuzzyMatch, el: HTMLElement): void { + super.renderSuggestion(item, el); + + if (item.item.id !== 'default') { + const iconPreviewNode = el.createDiv('div'); + iconPreviewNode.innerHTML = renderToString( + // @ts-ignore + remixicons[item.item.id]({ + size: '16px', + }), + ); + iconPreviewNode.style.position = 'absolute'; + iconPreviewNode.style.top = '0'; + iconPreviewNode.style.left = '0'; + iconPreviewNode.style.marginTop = '7px'; + } + } +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/main.ts b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/main.ts new file mode 100644 index 00000000..8aea98c3 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/main.ts @@ -0,0 +1,72 @@ +import { Plugin, MenuItem } from 'obsidian'; +import IconsPickerModal from './iconsPickerModal'; +import { addToDOMWithElement, removeFromDOM, waitForNode } from './util'; + +export default class IconFolderPlugin extends Plugin { + private folderIconData: Record; + + async onload() { + console.log('loading plugin obsidian-icon-folder'); + + await this.loadIconFolderData(); + + Object.entries(this.folderIconData).forEach(([key, value]) => { + waitForNode(`[data-path="${key}"]`).then((node) => { + addToDOMWithElement(this, key, value, node); + }); + }); + + this.registerEvent( + this.app.workspace.on('file-menu', (menu, file) => { + const addIconMenuItem = (item: MenuItem) => { + item.setTitle('Change icon'); + item.setIcon('hashtag'); + item.onClick(() => { + menu.hide(); + const modal = new IconsPickerModal(this.app, this, file.path); + modal.open(); + }); + }; + + const removeIconMenuItem = (item: MenuItem) => { + item.setTitle('Remove icon'); + item.setIcon('trash'); + item.onClick(() => { + menu.hide(); + this.removeFolderIcon(file.path); + removeFromDOM(file.path); + }); + }; + + menu.addItem(addIconMenuItem); + menu.addItem(removeIconMenuItem); + }), + ); + } + + onunload() { + console.log('unloading plugin obsidian-icon-folder'); + } + + removeFolderIcon(path: string): void { + delete this.folderIconData[path]; + this.saveIconFolderData(); + } + + addFolderIcon(path: string, iconId: string): void { + if (this.folderIconData[path]) { + removeFromDOM(path); + } + + this.folderIconData[path] = iconId; + this.saveIconFolderData(); + } + + async loadIconFolderData(): Promise { + this.folderIconData = Object.assign({}, {}, await this.loadData()); + } + + async saveIconFolderData(): Promise { + await this.saveData(this.folderIconData); + } +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/styles.css b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/styles.css new file mode 100644 index 00000000..2cb37956 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/styles.css @@ -0,0 +1,6 @@ +.obsidian-icon-folder-icon { + border: 1px solid transparent; + padding: 2px 2px 2px 2px; + display: flex; + margin: auto 0; +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/util.ts b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/util.ts new file mode 100644 index 00000000..94f66334 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/src/util.ts @@ -0,0 +1,78 @@ +import * as remixicons from 'react-icons/ri/index'; +// @ts-ignore +import { renderToString } from 'react-dom/server'; +import IconFolderPlugin from './main'; + +export const waitForNode = (selector: string): Promise => { + return new Promise((resolve) => { + if (document.querySelector(selector)) { + return resolve(document.querySelector(selector)); + } + + const observer = new MutationObserver(() => { + if (document.querySelector(selector)) { + resolve(document.querySelector(selector)); + observer.disconnect(); + } + }); + + observer.observe(document.body, { + childList: true, + subtree: true, + }); + }); +}; + +export const removeFromDOM = (path: string) => { + const node = document.querySelector(`[data-path="${path}"]`); + if (!node) { + console.error('element with data path not found', path); + return; + } + + const iconNode = node.querySelector('.obsidian-icon-folder-icon'); + if (!iconNode) { + console.error('icon element does not exist', path); + return; + } + + iconNode.remove(); +}; + +export const addToDOMWithElement = ( + plugin: IconFolderPlugin, + path: string, + iconId: string, + node: Element, +): void => { + const titleNode = node.querySelector('.nav-folder-title-content'); + if (!titleNode) { + console.error('element with title not found'); + return; + } + + const iconNode = document.createElement('div'); + iconNode.classList.add('obsidian-icon-folder-icon'); + iconNode.innerHTML = renderToString( + // @ts-ignore + remixicons[iconId]({ + size: '16px', + }), + ); + + node.insertBefore(iconNode, titleNode); +}; + +export const addToDOM = ( + plugin: IconFolderPlugin, + path: string, + iconId: string, +): void => { + const node = document.querySelector(`[data-path="${path}"]`); + if (!node) { + console.error('element with data path not found', path); + return; + } + + addToDOMWithElement(plugin, path, iconId, node); +}; diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/tsconfig.json b/.obsidian/plugins/obsidian-icon-folder-1.0.0/tsconfig.json new file mode 100644 index 00000000..09cf7ecd --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "inlineSourceMap": true, + "inlineSources": true, + "module": "ESNext", + "target": "es6", + "allowJs": true, + "noImplicitAny": true, + "moduleResolution": "node", + "importHelpers": true, + "lib": [ + "dom", + "es5", + "scripthost", + "es2015" + ] + }, + "include": [ + "**/*.ts" + ] +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/versions.json b/.obsidian/plugins/obsidian-icon-folder-1.0.0/versions.json new file mode 100644 index 00000000..a6ce7634 --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/versions.json @@ -0,0 +1,3 @@ +{ + "1.0.0": "0.9.12" +} diff --git a/.obsidian/plugins/obsidian-icon-folder-1.0.0/yarn.lock b/.obsidian/plugins/obsidian-icon-folder-1.0.0/yarn.lock new file mode 100644 index 00000000..c89c76fd --- /dev/null +++ b/.obsidian/plugins/obsidian-icon-folder-1.0.0/yarn.lock @@ -0,0 +1,326 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@rollup/plugin-commonjs@^18.0.0": + version "18.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-18.1.0.tgz#5a760d757af168a50727c0ae080251fbfcc5eb02" + integrity sha512-h3e6T9rUxVMAQswpDIobfUHn/doMzM9sgkMrsMWCFLmB84PSoC8mV8tOloAJjSRwdqhXBqstlX2BwBpHJvbhxg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-node-resolve@^11.2.1": + version "11.2.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" + integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + builtin-modules "^3.1.0" + deepmerge "^4.2.2" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/plugin-typescript@^8.2.1": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz#e0319761b2b5105615e5a0c371ae05bc2984b7de" + integrity sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ== + dependencies: + "@rollup/pluginutils" "^3.1.0" + resolve "^1.17.0" + +"@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@types/codemirror@0.0.108": + version "0.0.108" + resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.108.tgz#e640422b666bf49251b384c390cdeb2362585bde" + integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== + dependencies: + "@types/tern" "*" + +"@types/estree@*": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/node@*": + version "16.7.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.2.tgz#0465a39b5456b61a04d98bd5545f8b34be340cb7" + integrity sha512-TbG4TOx9hng8FKxaVrCisdaxKxqEwJ3zwHoCWXZ0Jw6mnvTInpaB99/2Cy4+XxpXtjNv9/TgfGSvZFyfV/t8Fw== + +"@types/node@^14.14.37": + version "14.17.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.12.tgz#7a31f720b85a617e54e42d24c4ace136601656c7" + integrity sha512-vhUqgjJR1qxwTWV5Ps5txuy2XMdf7Fw+OrdChRboy8BmWUPkckOhphaohzFG6b8DW7CrxaBMdrdJ47SYFq1okw== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/tern@*": + version "0.23.4" + resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" + integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== + dependencies: + "@types/estree" "*" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +glob@^7.1.6: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-core-module@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" + integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== + dependencies: + has "^1.0.3" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +moment@2.29.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +obsidian@^0.12.0: + version "0.12.11" + resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-0.12.11.tgz#c92fbbb29fc2d4732e156b41a66d4ba8d42baaab" + integrity sha512-Kv4m1n4nfd17FzpqHZfqFS2YZAyY+cxAUM7/5jqh1bmbPlmKoNd1XJZC7o9KvkXfTCxALiXfGRdrjHB+GUFAEA== + dependencies: + "@types/codemirror" "0.0.108" + moment "2.29.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picomatch@^2.2.2: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +react-dom@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-icons@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.2.0.tgz#6dda80c8a8f338ff96a1851424d63083282630d0" + integrity sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ== + +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +resolve@^1.17.0, resolve@^1.19.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +rollup@^2.32.1: + version "2.56.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.3.tgz#b63edadd9851b0d618a6d0e6af8201955a77aeff" + integrity sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg== + optionalDependencies: + fsevents "~2.3.2" + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +tslib@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +typescript@^4.2.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" + integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= diff --git a/.obsidian/plugins/obsidian-icons-plugin/main.js b/.obsidian/plugins/obsidian-icons-plugin/main.js new file mode 100644 index 00000000..f1fff0ad --- /dev/null +++ b/.obsidian/plugins/obsidian-icons-plugin/main.js @@ -0,0 +1,26325 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +function createCommonjsModule(fn, basedir, module) { + return module = { + path: basedir, + exports: {}, + require: function (path, base) { + return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); + } + }, fn(module, module.exports), module.exports; +} + +function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var a = Object.defineProperty({}, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; +} + +function commonjsRequire () { + throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); +} + +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/* eslint-disable no-unused-vars */ +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } + + // Detect buggy property enumeration order in older V8 versions. + + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } + + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== + 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +var react_production_min = createCommonjsModule(function (module, exports) { +var n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116; +if("function"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w("react.element");p=w("react.portal");exports.Fragment=w("react.fragment");exports.StrictMode=w("react.strict_mode");exports.Profiler=w("react.profiler");q=w("react.provider");r=w("react.context");t=w("react.forward_ref");exports.Suspense=w("react.suspense");u=w("react.memo");v=w("react.lazy");}var x="function"===typeof Symbol&&Symbol.iterator; +function y(a){if(null===a||"object"!==typeof a)return null;a=x&&a[x]||a["@@iterator"];return "function"===typeof a?a:null}function z(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + printWarning('warn', format, args); + } +} +function error(format) { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } + + var argsWithFormat = args.map(function (item) { + return '' + item; + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} + +var didWarnStateUpdateForUnmountedComponent = {}; + +function warnNoop(publicInstance, callerName) { + { + var _constructor = publicInstance.constructor; + var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass'; + var warningKey = componentName + "." + callerName; + + if (didWarnStateUpdateForUnmountedComponent[warningKey]) { + return; + } + + error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName); + + didWarnStateUpdateForUnmountedComponent[warningKey] = true; + } +} +/** + * This is the abstract API for an update queue. + */ + + +var ReactNoopUpdateQueue = { + /** + * Checks whether or not this composite component is mounted. + * @param {ReactClass} publicInstance The instance we want to test. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function (publicInstance) { + return false; + }, + + /** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueForceUpdate: function (publicInstance, callback, callerName) { + warnNoop(publicInstance, 'forceUpdate'); + }, + + /** + * Replaces all of the state. Always use this or `setState` to mutate state. + * You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} completeState Next state. + * @param {?function} callback Called after component is updated. + * @param {?string} callerName name of the calling function in the public API. + * @internal + */ + enqueueReplaceState: function (publicInstance, completeState, callback, callerName) { + warnNoop(publicInstance, 'replaceState'); + }, + + /** + * Sets a subset of the state. This only exists because _pendingState is + * internal. This provides a merging strategy that is not available to deep + * properties which is confusing. TODO: Expose pendingState or don't use it + * during the merge. + * + * @param {ReactClass} publicInstance The instance that should rerender. + * @param {object} partialState Next partial state to be merged with state. + * @param {?function} callback Called after component is updated. + * @param {?string} Name of the calling function in the public API. + * @internal + */ + enqueueSetState: function (publicInstance, partialState, callback, callerName) { + warnNoop(publicInstance, 'setState'); + } +}; + +var emptyObject = {}; + +{ + Object.freeze(emptyObject); +} +/** + * Base class helpers for the updating state of a component. + */ + + +function Component(props, context, updater) { + this.props = props; + this.context = context; // If a component has string refs, we will assign a different object later. + + this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the + // renderer. + + this.updater = updater || ReactNoopUpdateQueue; +} + +Component.prototype.isReactComponent = {}; +/** + * Sets a subset of the state. Always use this to mutate + * state. You should treat `this.state` as immutable. + * + * There is no guarantee that `this.state` will be immediately updated, so + * accessing `this.state` after calling this method may return the old value. + * + * There is no guarantee that calls to `setState` will run synchronously, + * as they may eventually be batched together. You can provide an optional + * callback that will be executed when the call to setState is actually + * completed. + * + * When a function is provided to setState, it will be called at some point in + * the future (not synchronously). It will be called with the up to date + * component arguments (state, props, context). These values can be different + * from this.* because your function may be called after receiveProps but before + * shouldComponentUpdate, and this new state, props, and context will not yet be + * assigned to this. + * + * @param {object|function} partialState Next partial state or function to + * produce next partial state to be merged with current state. + * @param {?function} callback Called after state is updated. + * @final + * @protected + */ + +Component.prototype.setState = function (partialState, callback) { + if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) { + { + throw Error( "setState(...): takes an object of state variables to update or a function which returns an object of state variables." ); + } + } + + this.updater.enqueueSetState(this, partialState, callback, 'setState'); +}; +/** + * Forces an update. This should only be invoked when it is known with + * certainty that we are **not** in a DOM transaction. + * + * You may want to call this when you know that some deeper aspect of the + * component's state has changed but `setState` was not called. + * + * This will not invoke `shouldComponentUpdate`, but it will invoke + * `componentWillUpdate` and `componentDidUpdate`. + * + * @param {?function} callback Called after update is complete. + * @final + * @protected + */ + + +Component.prototype.forceUpdate = function (callback) { + this.updater.enqueueForceUpdate(this, callback, 'forceUpdate'); +}; +/** + * Deprecated APIs. These APIs used to exist on classic React classes but since + * we would like to deprecate them, we're not going to move them over to this + * modern base class. Instead, we define a getter that warns if it's accessed. + */ + + +{ + var deprecatedAPIs = { + isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'], + replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'] + }; + + var defineDeprecationWarning = function (methodName, info) { + Object.defineProperty(Component.prototype, methodName, { + get: function () { + warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]); + + return undefined; + } + }); + }; + + for (var fnName in deprecatedAPIs) { + if (deprecatedAPIs.hasOwnProperty(fnName)) { + defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); + } + } +} + +function ComponentDummy() {} + +ComponentDummy.prototype = Component.prototype; +/** + * Convenience component with default shallow equality check for sCU. + */ + +function PureComponent(props, context, updater) { + this.props = props; + this.context = context; // If a component has string refs, we will assign a different object later. + + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; +} + +var pureComponentPrototype = PureComponent.prototype = new ComponentDummy(); +pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods. + +_assign(pureComponentPrototype, Component.prototype); + +pureComponentPrototype.isPureReactComponent = true; + +// an immutable object with a single mutable value +function createRef() { + var refObject = { + current: null + }; + + { + Object.seal(refObject); + } + + return refObject; +} + +function getWrappedName(outerType, innerType, wrapperName) { + var functionName = innerType.displayName || innerType.name || ''; + return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); +} + +function getContextName(type) { + return type.displayName || 'Context'; +} + +function getComponentName(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case exports.Fragment: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case exports.Profiler: + return 'Profiler'; + + case exports.StrictMode: + return 'StrictMode'; + + case exports.Suspense: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + return getComponentName(type.type); + + case REACT_BLOCK_TYPE: + return getComponentName(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentName(init(payload)); + } catch (x) { + return null; + } + } + } + } + + return null; +} + +var hasOwnProperty = Object.prototype.hasOwnProperty; +var RESERVED_PROPS = { + key: true, + ref: true, + __self: true, + __source: true +}; +var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs; + +{ + didWarnAboutStringRefs = {}; +} + +function hasValidRef(config) { + { + if (hasOwnProperty.call(config, 'ref')) { + var getter = Object.getOwnPropertyDescriptor(config, 'ref').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.ref !== undefined; +} + +function hasValidKey(config) { + { + if (hasOwnProperty.call(config, 'key')) { + var getter = Object.getOwnPropertyDescriptor(config, 'key').get; + + if (getter && getter.isReactWarning) { + return false; + } + } + } + + return config.key !== undefined; +} + +function defineKeyPropWarningGetter(props, displayName) { + var warnAboutAccessingKey = function () { + { + if (!specialPropKeyWarningShown) { + specialPropKeyWarningShown = true; + + error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + } + }; + + warnAboutAccessingKey.isReactWarning = true; + Object.defineProperty(props, 'key', { + get: warnAboutAccessingKey, + configurable: true + }); +} + +function defineRefPropWarningGetter(props, displayName) { + var warnAboutAccessingRef = function () { + { + if (!specialPropRefWarningShown) { + specialPropRefWarningShown = true; + + error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName); + } + } + }; + + warnAboutAccessingRef.isReactWarning = true; + Object.defineProperty(props, 'ref', { + get: warnAboutAccessingRef, + configurable: true + }); +} + +function warnIfStringRefCannotBeAutoConverted(config) { + { + if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) { + var componentName = getComponentName(ReactCurrentOwner.current.type); + + if (!didWarnAboutStringRefs[componentName]) { + error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref); + + didWarnAboutStringRefs[componentName] = true; + } + } + } +} +/** + * Factory method to create a new React element. This no longer adheres to + * the class pattern, so do not use new to call it. Also, instanceof check + * will not work. Instead test $$typeof field against Symbol.for('react.element') to check + * if something is a React Element. + * + * @param {*} type + * @param {*} props + * @param {*} key + * @param {string|object} ref + * @param {*} owner + * @param {*} self A *temporary* helper to detect places where `this` is + * different from the `owner` when React.createElement is called, so that we + * can warn. We want to get rid of owner and replace string `ref`s with arrow + * functions, and as long as `this` and owner are the same, there will be no + * change in behavior. + * @param {*} source An annotation object (added by a transpiler or otherwise) + * indicating filename, line number, and/or other information. + * @internal + */ + + +var ReactElement = function (type, key, ref, self, source, owner, props) { + var element = { + // This tag allows us to uniquely identify this as a React Element + $$typeof: REACT_ELEMENT_TYPE, + // Built-in properties that belong on the element + type: type, + key: key, + ref: ref, + props: props, + // Record the component responsible for creating this element. + _owner: owner + }; + + { + // The validation flag is currently mutative. We put it on + // an external backing store so that we can freeze the whole object. + // This can be replaced with a WeakMap once they are implemented in + // commonly used development environments. + element._store = {}; // To make comparing ReactElements easier for testing purposes, we make + // the validation flag non-enumerable (where possible, which should + // include every environment we run tests in), so the test framework + // ignores it. + + Object.defineProperty(element._store, 'validated', { + configurable: false, + enumerable: false, + writable: true, + value: false + }); // self and source are DEV only properties. + + Object.defineProperty(element, '_self', { + configurable: false, + enumerable: false, + writable: false, + value: self + }); // Two elements created in two different places should be considered + // equal for testing purposes and therefore we hide it from enumeration. + + Object.defineProperty(element, '_source', { + configurable: false, + enumerable: false, + writable: false, + value: source + }); + + if (Object.freeze) { + Object.freeze(element.props); + Object.freeze(element); + } + } + + return element; +}; +/** + * Create and return a new ReactElement of the given type. + * See https://reactjs.org/docs/react-api.html#createelement + */ + +function createElement(type, config, children) { + var propName; // Reserved names are extracted + + var props = {}; + var key = null; + var ref = null; + var self = null; + var source = null; + + if (config != null) { + if (hasValidRef(config)) { + ref = config.ref; + + { + warnIfStringRefCannotBeAutoConverted(config); + } + } + + if (hasValidKey(config)) { + key = '' + config.key; + } + + self = config.__self === undefined ? null : config.__self; + source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + props[propName] = config[propName]; + } + } + } // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + + + var childrenLength = arguments.length - 2; + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + + { + if (Object.freeze) { + Object.freeze(childArray); + } + } + + props.children = childArray; + } // Resolve default props + + + if (type && type.defaultProps) { + var defaultProps = type.defaultProps; + + for (propName in defaultProps) { + if (props[propName] === undefined) { + props[propName] = defaultProps[propName]; + } + } + } + + { + if (key || ref) { + var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type; + + if (key) { + defineKeyPropWarningGetter(props, displayName); + } + + if (ref) { + defineRefPropWarningGetter(props, displayName); + } + } + } + + return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props); +} +function cloneAndReplaceKey(oldElement, newKey) { + var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props); + return newElement; +} +/** + * Clone and return a new ReactElement using element as the starting point. + * See https://reactjs.org/docs/react-api.html#cloneelement + */ + +function cloneElement(element, config, children) { + if (!!(element === null || element === undefined)) { + { + throw Error( "React.cloneElement(...): The argument must be a React element, but you passed " + element + "." ); + } + } + + var propName; // Original props are copied + + var props = _assign({}, element.props); // Reserved names are extracted + + + var key = element.key; + var ref = element.ref; // Self is preserved since the owner is preserved. + + var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a + // transpiler, and the original source is probably a better indicator of the + // true owner. + + var source = element._source; // Owner will be preserved, unless ref is overridden + + var owner = element._owner; + + if (config != null) { + if (hasValidRef(config)) { + // Silently steal the ref from the parent. + ref = config.ref; + owner = ReactCurrentOwner.current; + } + + if (hasValidKey(config)) { + key = '' + config.key; + } // Remaining properties override existing props + + + var defaultProps; + + if (element.type && element.type.defaultProps) { + defaultProps = element.type.defaultProps; + } + + for (propName in config) { + if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) { + if (config[propName] === undefined && defaultProps !== undefined) { + // Resolve default props + props[propName] = defaultProps[propName]; + } else { + props[propName] = config[propName]; + } + } + } + } // Children can be more than one argument, and those are transferred onto + // the newly allocated props object. + + + var childrenLength = arguments.length - 2; + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + var childArray = Array(childrenLength); + + for (var i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 2]; + } + + props.children = childArray; + } + + return ReactElement(element.type, key, ref, self, source, owner, props); +} +/** + * Verifies the object is a ReactElement. + * See https://reactjs.org/docs/react-api.html#isvalidelement + * @param {?object} object + * @return {boolean} True if `object` is a ReactElement. + * @final + */ + +function isValidElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; +} + +var SEPARATOR = '.'; +var SUBSEPARATOR = ':'; +/** + * Escape and wrap key so it is safe to use as a reactid + * + * @param {string} key to be escaped. + * @return {string} the escaped key. + */ + +function escape(key) { + var escapeRegex = /[=:]/g; + var escaperLookup = { + '=': '=0', + ':': '=2' + }; + var escapedString = key.replace(escapeRegex, function (match) { + return escaperLookup[match]; + }); + return '$' + escapedString; +} +/** + * TODO: Test that a single child and an array with one item have the same key + * pattern. + */ + + +var didWarnAboutMaps = false; +var userProvidedKeyEscapeRegex = /\/+/g; + +function escapeUserProvidedKey(text) { + return text.replace(userProvidedKeyEscapeRegex, '$&/'); +} +/** + * Generate a key string that identifies a element within a set. + * + * @param {*} element A element that could contain a manual key. + * @param {number} index Index that is used if a manual key is not provided. + * @return {string} + */ + + +function getElementKey(element, index) { + // Do some typechecking here since we call this blindly. We want to ensure + // that we don't block potential future ES APIs. + if (typeof element === 'object' && element !== null && element.key != null) { + // Explicit key + return escape('' + element.key); + } // Implicit key determined by the index in the set + + + return index.toString(36); +} + +function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { + var type = typeof children; + + if (type === 'undefined' || type === 'boolean') { + // All of the above are perceived as null. + children = null; + } + + var invokeCallback = false; + + if (children === null) { + invokeCallback = true; + } else { + switch (type) { + case 'string': + case 'number': + invokeCallback = true; + break; + + case 'object': + switch (children.$$typeof) { + case REACT_ELEMENT_TYPE: + case REACT_PORTAL_TYPE: + invokeCallback = true; + } + + } + } + + if (invokeCallback) { + var _child = children; + var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array + // so that it's consistent if the number of children grows: + + var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar; + + if (Array.isArray(mappedChild)) { + var escapedChildKey = ''; + + if (childKey != null) { + escapedChildKey = escapeUserProvidedKey(childKey) + '/'; + } + + mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) { + return c; + }); + } else if (mappedChild != null) { + if (isValidElement(mappedChild)) { + mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as + // traverseAllChildren used to do for objects as children + escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key + mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number + escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey); + } + + array.push(mappedChild); + } + + return 1; + } + + var child; + var nextName; + var subtreeCount = 0; // Count of children found in the current subtree. + + var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR; + + if (Array.isArray(children)) { + for (var i = 0; i < children.length; i++) { + child = children[i]; + nextName = nextNamePrefix + getElementKey(child, i); + subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); + } + } else { + var iteratorFn = getIteratorFn(children); + + if (typeof iteratorFn === 'function') { + var iterableChildren = children; + + { + // Warn about using Maps as children + if (iteratorFn === iterableChildren.entries) { + if (!didWarnAboutMaps) { + warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.'); + } + + didWarnAboutMaps = true; + } + } + + var iterator = iteratorFn.call(iterableChildren); + var step; + var ii = 0; + + while (!(step = iterator.next()).done) { + child = step.value; + nextName = nextNamePrefix + getElementKey(child, ii++); + subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback); + } + } else if (type === 'object') { + var childrenString = '' + children; + + { + { + throw Error( "Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). If you meant to render a collection of children, use an array instead." ); + } + } + } + } + + return subtreeCount; +} + +/** + * Maps children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenmap + * + * The provided mapFunction(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} func The map function. + * @param {*} context Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ +function mapChildren(children, func, context) { + if (children == null) { + return children; + } + + var result = []; + var count = 0; + mapIntoArray(children, result, '', '', function (child) { + return func.call(context, child, count++); + }); + return result; +} +/** + * Count the number of children that are typically specified as + * `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrencount + * + * @param {?*} children Children tree container. + * @return {number} The number of children. + */ + + +function countChildren(children) { + var n = 0; + mapChildren(children, function () { + n++; // Don't return anything + }); + return n; +} + +/** + * Iterates through children that are typically specified as `props.children`. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenforeach + * + * The provided forEachFunc(child, index) will be called for each + * leaf child. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc + * @param {*} forEachContext Context for forEachContext. + */ +function forEachChildren(children, forEachFunc, forEachContext) { + mapChildren(children, function () { + forEachFunc.apply(this, arguments); // Don't return anything. + }, forEachContext); +} +/** + * Flatten a children object (typically specified as `props.children`) and + * return an array with appropriately re-keyed children. + * + * See https://reactjs.org/docs/react-api.html#reactchildrentoarray + */ + + +function toArray(children) { + return mapChildren(children, function (child) { + return child; + }) || []; +} +/** + * Returns the first child in a collection of children and verifies that there + * is only one child in the collection. + * + * See https://reactjs.org/docs/react-api.html#reactchildrenonly + * + * The current implementation of this function assumes that a single child gets + * passed without a wrapper, but the purpose of this helper function is to + * abstract away the particular structure of children. + * + * @param {?object} children Child collection structure. + * @return {ReactElement} The first and only `ReactElement` contained in the + * structure. + */ + + +function onlyChild(children) { + if (!isValidElement(children)) { + { + throw Error( "React.Children.only expected to receive a single React element child." ); + } + } + + return children; +} + +function createContext(defaultValue, calculateChangedBits) { + if (calculateChangedBits === undefined) { + calculateChangedBits = null; + } else { + { + if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') { + error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits); + } + } + } + + var context = { + $$typeof: REACT_CONTEXT_TYPE, + _calculateChangedBits: calculateChangedBits, + // As a workaround to support multiple concurrent renderers, we categorize + // some renderers as primary and others as secondary. We only expect + // there to be two concurrent renderers at most: React Native (primary) and + // Fabric (secondary); React DOM (primary) and React ART (secondary). + // Secondary renderers store their context values on separate fields. + _currentValue: defaultValue, + _currentValue2: defaultValue, + // Used to track how many concurrent renderers this context currently + // supports within in a single renderer. Such as parallel server rendering. + _threadCount: 0, + // These are circular + Provider: null, + Consumer: null + }; + context.Provider = { + $$typeof: REACT_PROVIDER_TYPE, + _context: context + }; + var hasWarnedAboutUsingNestedContextConsumers = false; + var hasWarnedAboutUsingConsumerProvider = false; + var hasWarnedAboutDisplayNameOnConsumer = false; + + { + // A separate object, but proxies back to the original context object for + // backwards compatibility. It has a different $$typeof, so we can properly + // warn for the incorrect usage of Context as a Consumer. + var Consumer = { + $$typeof: REACT_CONTEXT_TYPE, + _context: context, + _calculateChangedBits: context._calculateChangedBits + }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here + + Object.defineProperties(Consumer, { + Provider: { + get: function () { + if (!hasWarnedAboutUsingConsumerProvider) { + hasWarnedAboutUsingConsumerProvider = true; + + error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); + } + + return context.Provider; + }, + set: function (_Provider) { + context.Provider = _Provider; + } + }, + _currentValue: { + get: function () { + return context._currentValue; + }, + set: function (_currentValue) { + context._currentValue = _currentValue; + } + }, + _currentValue2: { + get: function () { + return context._currentValue2; + }, + set: function (_currentValue2) { + context._currentValue2 = _currentValue2; + } + }, + _threadCount: { + get: function () { + return context._threadCount; + }, + set: function (_threadCount) { + context._threadCount = _threadCount; + } + }, + Consumer: { + get: function () { + if (!hasWarnedAboutUsingNestedContextConsumers) { + hasWarnedAboutUsingNestedContextConsumers = true; + + error('Rendering is not supported and will be removed in ' + 'a future major release. Did you mean to render instead?'); + } + + return context.Consumer; + } + }, + displayName: { + get: function () { + return context.displayName; + }, + set: function (displayName) { + if (!hasWarnedAboutDisplayNameOnConsumer) { + warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName); + + hasWarnedAboutDisplayNameOnConsumer = true; + } + } + } + }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty + + context.Consumer = Consumer; + } + + { + context._currentRenderer = null; + context._currentRenderer2 = null; + } + + return context; +} + +var Uninitialized = -1; +var Pending = 0; +var Resolved = 1; +var Rejected = 2; + +function lazyInitializer(payload) { + if (payload._status === Uninitialized) { + var ctor = payload._result; + var thenable = ctor(); // Transition to the next state. + + var pending = payload; + pending._status = Pending; + pending._result = thenable; + thenable.then(function (moduleObject) { + if (payload._status === Pending) { + var defaultExport = moduleObject.default; + + { + if (defaultExport === undefined) { + error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies. + 'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject); + } + } // Transition to the next state. + + + var resolved = payload; + resolved._status = Resolved; + resolved._result = defaultExport; + } + }, function (error) { + if (payload._status === Pending) { + // Transition to the next state. + var rejected = payload; + rejected._status = Rejected; + rejected._result = error; + } + }); + } + + if (payload._status === Resolved) { + return payload._result; + } else { + throw payload._result; + } +} + +function lazy(ctor) { + var payload = { + // We use these fields to store the result. + _status: -1, + _result: ctor + }; + var lazyType = { + $$typeof: REACT_LAZY_TYPE, + _payload: payload, + _init: lazyInitializer + }; + + { + // In production, this would just set it on the object. + var defaultProps; + var propTypes; // $FlowFixMe + + Object.defineProperties(lazyType, { + defaultProps: { + configurable: true, + get: function () { + return defaultProps; + }, + set: function (newDefaultProps) { + error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); + + defaultProps = newDefaultProps; // Match production behavior more closely: + // $FlowFixMe + + Object.defineProperty(lazyType, 'defaultProps', { + enumerable: true + }); + } + }, + propTypes: { + configurable: true, + get: function () { + return propTypes; + }, + set: function (newPropTypes) { + error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.'); + + propTypes = newPropTypes; // Match production behavior more closely: + // $FlowFixMe + + Object.defineProperty(lazyType, 'propTypes', { + enumerable: true + }); + } + } + }); + } + + return lazyType; +} + +function forwardRef(render) { + { + if (render != null && render.$$typeof === REACT_MEMO_TYPE) { + error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).'); + } else if (typeof render !== 'function') { + error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render); + } else { + if (render.length !== 0 && render.length !== 2) { + error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.'); + } + } + + if (render != null) { + if (render.defaultProps != null || render.propTypes != null) { + error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?'); + } + } + } + + var elementType = { + $$typeof: REACT_FORWARD_REF_TYPE, + render: render + }; + + { + var ownName; + Object.defineProperty(elementType, 'displayName', { + enumerable: false, + configurable: true, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + + if (render.displayName == null) { + render.displayName = name; + } + } + }); + } + + return elementType; +} + +// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. + +var enableScopeAPI = false; // Experimental Create Event Handle API. + +function isValidElementType(type) { + if (typeof type === 'string' || typeof type === 'function') { + return true; + } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill). + + + if (type === exports.Fragment || type === exports.Profiler || type === REACT_DEBUG_TRACING_MODE_TYPE || type === exports.StrictMode || type === exports.Suspense || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_LEGACY_HIDDEN_TYPE || enableScopeAPI ) { + return true; + } + + if (typeof type === 'object' && type !== null) { + if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_BLOCK_TYPE || type[0] === REACT_SERVER_BLOCK_TYPE) { + return true; + } + } + + return false; +} + +function memo(type, compare) { + { + if (!isValidElementType(type)) { + error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type); + } + } + + var elementType = { + $$typeof: REACT_MEMO_TYPE, + type: type, + compare: compare === undefined ? null : compare + }; + + { + var ownName; + Object.defineProperty(elementType, 'displayName', { + enumerable: false, + configurable: true, + get: function () { + return ownName; + }, + set: function (name) { + ownName = name; + + if (type.displayName == null) { + type.displayName = name; + } + } + }); + } + + return elementType; +} + +function resolveDispatcher() { + var dispatcher = ReactCurrentDispatcher.current; + + if (!(dispatcher !== null)) { + { + throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." ); + } + } + + return dispatcher; +} + +function useContext(Context, unstable_observedBits) { + var dispatcher = resolveDispatcher(); + + { + if (unstable_observedBits !== undefined) { + error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\n\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://reactjs.org/link/rules-of-hooks' : ''); + } // TODO: add a more generic warning for invalid values. + + + if (Context._context !== undefined) { + var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs + // and nobody should be using this in existing code. + + if (realContext.Consumer === Context) { + error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?'); + } else if (realContext.Provider === Context) { + error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?'); + } + } + } + + return dispatcher.useContext(Context, unstable_observedBits); +} +function useState(initialState) { + var dispatcher = resolveDispatcher(); + return dispatcher.useState(initialState); +} +function useReducer(reducer, initialArg, init) { + var dispatcher = resolveDispatcher(); + return dispatcher.useReducer(reducer, initialArg, init); +} +function useRef(initialValue) { + var dispatcher = resolveDispatcher(); + return dispatcher.useRef(initialValue); +} +function useEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useEffect(create, deps); +} +function useLayoutEffect(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useLayoutEffect(create, deps); +} +function useCallback(callback, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useCallback(callback, deps); +} +function useMemo(create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useMemo(create, deps); +} +function useImperativeHandle(ref, create, deps) { + var dispatcher = resolveDispatcher(); + return dispatcher.useImperativeHandle(ref, create, deps); +} +function useDebugValue(value, formatterFn) { + { + var dispatcher = resolveDispatcher(); + return dispatcher.useDebugValue(value, formatterFn); + } +} + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: _assign({}, props, { + value: prevLog + }), + info: _assign({}, props, { + value: prevInfo + }), + warn: _assign({}, props, { + value: prevWarn + }), + error: _assign({}, props, { + value: prevError + }), + group: _assign({}, props, { + value: prevGroup + }), + groupCollapsed: _assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: _assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if (!fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher$1.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher$1.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case exports.Suspense: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_BLOCK_TYPE: + return describeFunctionComponentFrame(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +var loggedTypeFailures = {}; +var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame$1.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame$1.setExtraStackFrame(null); + } + } +} + +function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } +} + +function setCurrentlyValidatingElement$1(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + setExtraStackFrame(stack); + } else { + setExtraStackFrame(null); + } + } +} + +var propTypesMisspellWarningShown; + +{ + propTypesMisspellWarningShown = false; +} + +function getDeclarationErrorAddendum() { + if (ReactCurrentOwner.current) { + var name = getComponentName(ReactCurrentOwner.current.type); + + if (name) { + return '\n\nCheck the render method of `' + name + '`.'; + } + } + + return ''; +} + +function getSourceInfoErrorAddendum(source) { + if (source !== undefined) { + var fileName = source.fileName.replace(/^.*[\\\/]/, ''); + var lineNumber = source.lineNumber; + return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.'; + } + + return ''; +} + +function getSourceInfoErrorAddendumForProps(elementProps) { + if (elementProps !== null && elementProps !== undefined) { + return getSourceInfoErrorAddendum(elementProps.__source); + } + + return ''; +} +/** + * Warn if there's no key explicitly set on dynamic arrays of children or + * object keys are not valid. This allows us to keep track of children between + * updates. + */ + + +var ownerHasKeyUseWarning = {}; + +function getCurrentComponentErrorInfo(parentType) { + var info = getDeclarationErrorAddendum(); + + if (!info) { + var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name; + + if (parentName) { + info = "\n\nCheck the top-level render call using <" + parentName + ">."; + } + } + + return info; +} +/** + * Warn if the element doesn't have an explicit key assigned to it. + * This element is in an array. The array could grow and shrink or be + * reordered. All children that haven't already been validated are required to + * have a "key" property assigned to it. Error statuses are cached so a warning + * will only be shown once. + * + * @internal + * @param {ReactElement} element Element that requires a key. + * @param {*} parentType element's parent's type. + */ + + +function validateExplicitKey(element, parentType) { + if (!element._store || element._store.validated || element.key != null) { + return; + } + + element._store.validated = true; + var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType); + + if (ownerHasKeyUseWarning[currentComponentErrorInfo]) { + return; + } + + ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a + // property, it may be the creator of the child that's responsible for + // assigning it a key. + + var childOwner = ''; + + if (element && element._owner && element._owner !== ReactCurrentOwner.current) { + // Give the component that originally created this child. + childOwner = " It was passed a child from " + getComponentName(element._owner.type) + "."; + } + + { + setCurrentlyValidatingElement$1(element); + + error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner); + + setCurrentlyValidatingElement$1(null); + } +} +/** + * Ensure that every element either is passed in a static location, in an + * array with an explicit keys property defined, or in an object literal + * with valid key property. + * + * @internal + * @param {ReactNode} node Statically passed child of any type. + * @param {*} parentType node's parent's type. + */ + + +function validateChildKeys(node, parentType) { + if (typeof node !== 'object') { + return; + } + + if (Array.isArray(node)) { + for (var i = 0; i < node.length; i++) { + var child = node[i]; + + if (isValidElement(child)) { + validateExplicitKey(child, parentType); + } + } + } else if (isValidElement(node)) { + // This element was passed in a valid location. + if (node._store) { + node._store.validated = true; + } + } else if (node) { + var iteratorFn = getIteratorFn(node); + + if (typeof iteratorFn === 'function') { + // Entry iterators used to provide implicit keys, + // but now we print a separate warning for them later. + if (iteratorFn !== node.entries) { + var iterator = iteratorFn.call(node); + var step; + + while (!(step = iterator.next()).done) { + if (isValidElement(step.value)) { + validateExplicitKey(step.value, parentType); + } + } + } + } + } +} +/** + * Given an element, validate that its props follow the propTypes definition, + * provided by the type. + * + * @param {ReactElement} element + */ + + +function validatePropTypes(element) { + { + var type = element.type; + + if (type === null || type === undefined || typeof type === 'string') { + return; + } + + var propTypes; + + if (typeof type === 'function') { + propTypes = type.propTypes; + } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here. + // Inner props are checked in the reconciler. + type.$$typeof === REACT_MEMO_TYPE)) { + propTypes = type.propTypes; + } else { + return; + } + + if (propTypes) { + // Intentionally inside to avoid triggering lazy initializers: + var name = getComponentName(type); + checkPropTypes(propTypes, element.props, 'prop', name, element); + } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) { + propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers: + + var _name = getComponentName(type); + + error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown'); + } + + if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) { + error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.'); + } + } +} +/** + * Given a fragment, validate that it can only be provided with fragment props + * @param {ReactElement} fragment + */ + + +function validateFragmentProps(fragment) { + { + var keys = Object.keys(fragment.props); + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (key !== 'children' && key !== 'key') { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key); + + setCurrentlyValidatingElement$1(null); + break; + } + } + + if (fragment.ref !== null) { + setCurrentlyValidatingElement$1(fragment); + + error('Invalid attribute `ref` supplied to `React.Fragment`.'); + + setCurrentlyValidatingElement$1(null); + } + } +} +function createElementWithValidation(type, props, children) { + var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to + // succeed and there will likely be errors in render. + + if (!validType) { + var info = ''; + + if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) { + info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports."; + } + + var sourceInfo = getSourceInfoErrorAddendumForProps(props); + + if (sourceInfo) { + info += sourceInfo; + } else { + info += getDeclarationErrorAddendum(); + } + + var typeString; + + if (type === null) { + typeString = 'null'; + } else if (Array.isArray(type)) { + typeString = 'array'; + } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) { + typeString = "<" + (getComponentName(type.type) || 'Unknown') + " />"; + info = ' Did you accidentally export a JSX literal instead of a component?'; + } else { + typeString = typeof type; + } + + { + error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info); + } + } + + var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used. + // TODO: Drop this when these are no longer allowed as the type argument. + + if (element == null) { + return element; + } // Skip key warning if the type isn't valid since our key validation logic + // doesn't expect a non-string/function type and can throw confusing errors. + // We don't want exception behavior to differ between dev and prod. + // (Rendering will throw with a helpful message and as soon as the type is + // fixed, the key warnings will appear.) + + + if (validType) { + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], type); + } + } + + if (type === exports.Fragment) { + validateFragmentProps(element); + } else { + validatePropTypes(element); + } + + return element; +} +var didWarnAboutDeprecatedCreateFactory = false; +function createFactoryWithValidation(type) { + var validatedFactory = createElementWithValidation.bind(null, type); + validatedFactory.type = type; + + { + if (!didWarnAboutDeprecatedCreateFactory) { + didWarnAboutDeprecatedCreateFactory = true; + + warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.'); + } // Legacy hook: remove it + + + Object.defineProperty(validatedFactory, 'type', { + enumerable: false, + get: function () { + warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.'); + + Object.defineProperty(this, 'type', { + value: type + }); + return type; + } + }); + } + + return validatedFactory; +} +function cloneElementWithValidation(element, props, children) { + var newElement = cloneElement.apply(this, arguments); + + for (var i = 2; i < arguments.length; i++) { + validateChildKeys(arguments[i], newElement.type); + } + + validatePropTypes(newElement); + return newElement; +} + +{ + + try { + var frozenObject = Object.freeze({}); + /* eslint-disable no-new */ + + new Map([[frozenObject, null]]); + new Set([frozenObject]); + /* eslint-enable no-new */ + } catch (e) { + } +} + +var createElement$1 = createElementWithValidation ; +var cloneElement$1 = cloneElementWithValidation ; +var createFactory = createFactoryWithValidation ; +var Children = { + map: mapChildren, + forEach: forEachChildren, + count: countChildren, + toArray: toArray, + only: onlyChild +}; + +exports.Children = Children; +exports.Component = Component; +exports.PureComponent = PureComponent; +exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals; +exports.cloneElement = cloneElement$1; +exports.createContext = createContext; +exports.createElement = createElement$1; +exports.createFactory = createFactory; +exports.createRef = createRef; +exports.forwardRef = forwardRef; +exports.isValidElement = isValidElement; +exports.lazy = lazy; +exports.memo = memo; +exports.useCallback = useCallback; +exports.useContext = useContext; +exports.useDebugValue = useDebugValue; +exports.useEffect = useEffect; +exports.useImperativeHandle = useImperativeHandle; +exports.useLayoutEffect = useLayoutEffect; +exports.useMemo = useMemo; +exports.useReducer = useReducer; +exports.useRef = useRef; +exports.useState = useState; +exports.version = ReactVersion; + })(); +} +}); + +var react = createCommonjsModule(function (module) { + +if (process.env.NODE_ENV === 'production') { + module.exports = react_production_min; +} else { + module.exports = react_development; +} +}); + +function p(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;cK;K++)J[K]=K+1;J[15]=0;var oa=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,pa=Object.prototype.hasOwnProperty,qa={},ra={}; +function sa(a){if(pa.call(ra,a))return !0;if(pa.call(qa,a))return !1;if(oa.test(a))return ra[a]=!0;qa[a]=!0;return !1}function ta(a,b,c,d){if(null!==c&&0===c.type)return !1;switch(typeof b){case "function":case "symbol":return !0;case "boolean":if(d)return !1;if(null!==c)return !c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return "data-"!==a&&"aria-"!==a;default:return !1}} +function ua(a,b,c,d){if(null===b||"undefined"===typeof b||ta(a,b,c,d))return !0;if(d)return !1;if(null!==c)switch(c.type){case 3:return !b;case 4:return !1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return !1}function M(a,b,c,d,f,h,t){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=h;this.removeEmptyString=t;}var N={}; +"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){N[a]=new M(a,0,!1,a,null,!1,!1);});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];N[b]=new M(b,1,!1,a[1],null,!1,!1);});["contentEditable","draggable","spellCheck","value"].forEach(function(a){N[a]=new M(a,2,!1,a.toLowerCase(),null,!1,!1);}); +["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){N[a]=new M(a,2,!1,a,null,!1,!1);});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){N[a]=new M(a,3,!1,a.toLowerCase(),null,!1,!1);}); +["checked","multiple","muted","selected"].forEach(function(a){N[a]=new M(a,3,!0,a,null,!1,!1);});["capture","download"].forEach(function(a){N[a]=new M(a,4,!1,a,null,!1,!1);});["cols","rows","size","span"].forEach(function(a){N[a]=new M(a,6,!1,a,null,!1,!1);});["rowSpan","start"].forEach(function(a){N[a]=new M(a,5,!1,a.toLowerCase(),null,!1,!1);});var va=/[\-:]([a-z])/g;function wa(a){return a[1].toUpperCase()} +"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(va, +wa);N[b]=new M(b,1,!1,a,null,!1,!1);});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(va,wa);N[b]=new M(b,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1);});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(va,wa);N[b]=new M(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1);});["tabIndex","crossOrigin"].forEach(function(a){N[a]=new M(a,1,!1,a.toLowerCase(),null,!1,!1);}); +N.xlinkHref=new M("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(a){N[a]=new M(a,1,!1,a.toLowerCase(),null,!0,!0);});var xa=/["'&<>]/; +function O(a){if("boolean"===typeof a||"number"===typeof a)return ""+a;a=""+a;var b=xa.exec(a);if(b){var c="",d,f=0;for(d=b.index;dV))throw Error(p(301));if(a===P)if(T=!0,a={action:c,next:null},null===U&&(U=new Map),c=U.get(b),void 0===c)U.set(b,a);else {for(b=c;null!==b.next;)b=b.next;b.next=a;}}function Ja(){} +var X=null,Ka={readContext:function(a){var b=X.threadID;I(a,b);return a[b]},useContext:function(a){W();var b=X.threadID;I(a,b);return a[b]},useMemo:Ia,useReducer:Ga,useRef:function(a){P=W();R=Ca();var b=R.memoizedState;return null===b?(a={current:a},R.memoizedState=a):b},useState:function(a){return Ga(Fa,a)},useLayoutEffect:function(){},useCallback:function(a,b){return Ia(function(){return a},b)},useImperativeHandle:Ja,useEffect:Ja,useDebugValue:Ja,useDeferredValue:function(a){W();return a},useTransition:function(){W(); +return [function(a){a();},!1]},useOpaqueIdentifier:function(){return (X.identifierPrefix||"")+"R:"+(X.uniqueID++).toString(36)},useMutableSource:function(a,b){W();return b(a._source)}},La={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Ma(a){switch(a){case "svg":return "http://www.w3.org/2000/svg";case "math":return "http://www.w3.org/1998/Math/MathML";default:return "http://www.w3.org/1999/xhtml"}} +var Na={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Oa=objectAssign({menuitem:!0},Na),Y={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0, +gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Pa=["Webkit","ms","Moz","O"];Object.keys(Y).forEach(function(a){Pa.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Y[b]=Y[a];});}); +var Qa=/([A-Z])/g,Ra=/^ms-/,Z=react.Children.toArray,Sa=la.ReactCurrentDispatcher,Ta={listing:!0,pre:!0,textarea:!0},Ua=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Va={},Wa={};function Xa(a){if(void 0===a||null===a)return a;var b="";react.Children.forEach(a,function(a){null!=a&&(b+=a);});return b}var Ya=Object.prototype.hasOwnProperty,Za={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null,suppressHydrationWarning:null};function $a(a,b){if(void 0===a)throw Error(p(152,F(b)||"Component"));} +function ab(a,b,c){function d(d,h){var e=h.prototype&&h.prototype.isReactComponent,f=na(h,b,c,e),t=[],g=!1,n={isMounted:function(){return !1},enqueueForceUpdate:function(){if(null===t)return null},enqueueReplaceState:function(a,c){g=!0;t=[c];},enqueueSetState:function(a,c){if(null===t)return null;t.push(c);}};if(e){if(e=new h(d.props,f,n),"function"===typeof h.getDerivedStateFromProps){var k=h.getDerivedStateFromProps.call(null,d.props,e.state);null!=k&&(e.state=objectAssign({},e.state,k));}}else if(P={},e=h(d.props, +f,n),e=Da(h,d.props,e,f),null==e||null==e.render){a=e;$a(a,h);return}e.props=d.props;e.context=f;e.updater=n;n=e.state;void 0===n&&(e.state=n=null);if("function"===typeof e.UNSAFE_componentWillMount||"function"===typeof e.componentWillMount)if("function"===typeof e.componentWillMount&&"function"!==typeof h.getDerivedStateFromProps&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&"function"!==typeof h.getDerivedStateFromProps&&e.UNSAFE_componentWillMount(),t.length){n=t;var v= +g;t=null;g=!1;if(v&&1===n.length)e.state=n[0];else {k=v?n[0]:e.state;var H=!0;for(v=v?1:0;v=g))throw Error(p(304));var e=new Uint16Array(g);e.set(d);J=e;J[0]=c+1;for(d=c;d=e.children.length){var L=e.footer;""!==L&&(this.previousWasTextNode=!1);this.stack.pop();if("select"===e.type)this.currentSelectValue=null;else if(null!=e.type&&null!=e.type.type&&e.type.type.$$typeof===B)this.popProvider(e.type);else if(e.type===D){this.suspenseDepth--;var G=h.pop();if(t){t=!1;var C=e.fallbackFrame;if(!C)throw Error(p(303));this.stack.push(C);h[this.suspenseDepth]+="\x3c!--$!--\x3e";continue}else h[this.suspenseDepth]+= +G;}h[this.suspenseDepth]+=L;}else {var n=e.children[e.childIndex++],k="";try{k+=this.render(n,e.context,e.domNamespace);}catch(v){if(null!=v&&"function"===typeof v.then)throw Error(p(294));throw v;}finally{}h.length<=this.suspenseDepth&&h.push("");h[this.suspenseDepth]+=k;}}return h[0]}finally{Sa.current=c,X=b,Ea();}};b.render=function(a,b,f){if("string"===typeof a||"number"===typeof a){f=""+a;if(""===f)return "";if(this.makeStaticMarkup)return O(f);if(this.previousWasTextNode)return "\x3c!-- --\x3e"+O(f); +this.previousWasTextNode=!0;return O(f)}b=ab(a,b,this.threadID);a=b.child;b=b.context;if(null===a||!1===a)return "";if(!react.isValidElement(a)){if(null!=a&&null!=a.$$typeof){f=a.$$typeof;if(f===q)throw Error(p(257));throw Error(p(258,f.toString()));}a=Z(a);this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""});return ""}var c=a.type;if("string"===typeof c)return this.renderDOM(a,b,f);switch(c){case ka:case ja:case u:case z:case ca:case r:return a=Z(a.props.children),this.stack.push({type:null, +domNamespace:f,children:a,childIndex:0,context:b,footer:""}),"";case D:throw Error(p(294));case ia:throw Error(p(343));}if("object"===typeof c&&null!==c)switch(c.$$typeof){case ba:P={};var d=c.render(a.props,a.ref);d=Da(c.render,a.props,d,a.ref);d=Z(d);this.stack.push({type:null,domNamespace:f,children:d,childIndex:0,context:b,footer:""});return "";case da:return a=[react.createElement(c.type,objectAssign({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""}), +"";case B:return c=Z(a.props.children),f={type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:""},this.pushProvider(a),this.stack.push(f),"";case aa:c=a.type;d=a.props;var g=this.threadID;I(c,g);c=Z(d.children(c[g]));this.stack.push({type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:""});return "";case ha:throw Error(p(338));case ea:return c=a.type,d=c._init,c=d(c._payload),a=[react.createElement(c,objectAssign({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0, +context:b,footer:""}),""}throw Error(p(130,null==c?c:typeof c,""));};b.renderDOM=function(a,b,f){var c=a.type.toLowerCase();if(!Va.hasOwnProperty(c)){if(!Ua.test(c))throw Error(p(65,c));Va[c]=!0;}var d=a.props;if("input"===c)d=objectAssign({type:void 0},d,{defaultChecked:void 0,defaultValue:void 0,value:null!=d.value?d.value:d.defaultValue,checked:null!=d.checked?d.checked:d.defaultChecked});else if("textarea"===c){var g=d.value;if(null==g){g=d.defaultValue;var e=d.children;if(null!=e){if(null!= +g)throw Error(p(92));if(Array.isArray(e)){if(!(1>=e.length))throw Error(p(93));e=e[0];}g=""+e;}null==g&&(g="");}d=objectAssign({},d,{value:void 0,children:""+g});}else if("select"===c)this.currentSelectValue=null!=d.value?d.value:d.defaultValue,d=objectAssign({},d,{value:void 0});else if("option"===c){e=this.currentSelectValue;var L=Xa(d.children);if(null!=e){var G=null!=d.value?d.value+"":L;g=!1;if(Array.isArray(e))for(var C=0;C":(w+=">",g="");a:{e=d.dangerouslySetInnerHTML;if(null!=e){if(null!=e.__html){e=e.__html;break a}}else if(e=d.children,"string"===typeof e||"number"===typeof e){e=O(e);break a}e=null;}null!=e?(d=[],Ta.hasOwnProperty(c)&&"\n"===e.charAt(0)&&(w+="\n"),w+=e):d=Z(d.children);a=a.type;f=null==f||"http://www.w3.org/1999/xhtml"===f?Ma(a):"http://www.w3.org/2000/svg"=== +f&&"foreignObject"===a?"http://www.w3.org/1999/xhtml":f;this.stack.push({domNamespace:f,type:c,children:d,childIndex:0,context:b,footer:g});this.previousWasTextNode=!1;return w};return a}();var renderToNodeStream=function(){throw Error(p(207));};var renderToStaticMarkup=function(a,b){a=new bb(a,!0,b);try{return a.read(Infinity)}finally{a.destroy();}};var renderToStaticNodeStream=function(){throw Error(p(208));};var renderToString=function(a,b){a=new bb(a,!1,b);try{return a.read(Infinity)}finally{a.destroy();}}; +var version="17.0.1"; + +var reactDomServer_browser_production_min = { + renderToNodeStream: renderToNodeStream, + renderToStaticMarkup: renderToStaticMarkup, + renderToStaticNodeStream: renderToStaticNodeStream, + renderToString: renderToString, + version: version +}; + +var reactDomServer_browser_development = createCommonjsModule(function (module, exports) { + +if (process.env.NODE_ENV !== "production") { + (function() { + +var React = react; +var _assign = objectAssign; + +// Do not require this module directly! Use normal `invariant` calls with +// template literal strings. The messages will be replaced with error codes +// during build. +function formatProdErrorMessage(code) { + var url = 'https://reactjs.org/docs/error-decoder.html?invariant=' + code; + + for (var i = 1; i < arguments.length; i++) { + url += '&args[]=' + encodeURIComponent(arguments[i]); + } + + return "Minified React error #" + code + "; visit " + url + " for the full message or " + 'use the non-minified dev environment for full errors and additional ' + 'helpful warnings.'; +} + +// TODO: this is special because it gets imported during build. +var ReactVersion = '17.0.1'; + +var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; + +// by calls to these methods by a Babel plugin. +// +// In PROD (or in packages without access to React internals), +// they are left as they are instead. + +function warn(format) { + { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + printWarning('warn', format, args); + } +} +function error(format) { + { + for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } + + printWarning('error', format, args); + } +} + +function printWarning(level, format, args) { + // When changing this logic, you might want to also + // update consoleWithStackDev.www.js as well. + { + var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + var stack = ReactDebugCurrentFrame.getStackAddendum(); + + if (stack !== '') { + format += '%s'; + args = args.concat([stack]); + } + + var argsWithFormat = args.map(function (item) { + return '' + item; + }); // Careful: RN currently depends on this prefix + + argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it + // breaks IE9: https://github.com/facebook/react/issues/13610 + // eslint-disable-next-line react-internal/no-production-logging + + Function.prototype.apply.call(console[level], console, argsWithFormat); + } +} +var REACT_PORTAL_TYPE = 0xeaca; +var REACT_FRAGMENT_TYPE = 0xeacb; +var REACT_STRICT_MODE_TYPE = 0xeacc; +var REACT_PROFILER_TYPE = 0xead2; +var REACT_PROVIDER_TYPE = 0xeacd; +var REACT_CONTEXT_TYPE = 0xeace; +var REACT_FORWARD_REF_TYPE = 0xead0; +var REACT_SUSPENSE_TYPE = 0xead1; +var REACT_SUSPENSE_LIST_TYPE = 0xead8; +var REACT_MEMO_TYPE = 0xead3; +var REACT_LAZY_TYPE = 0xead4; +var REACT_BLOCK_TYPE = 0xead9; +var REACT_FUNDAMENTAL_TYPE = 0xead5; +var REACT_SCOPE_TYPE = 0xead7; +var REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1; +var REACT_LEGACY_HIDDEN_TYPE = 0xeae3; + +if (typeof Symbol === 'function' && Symbol.for) { + var symbolFor = Symbol.for; + symbolFor('react.element'); + REACT_PORTAL_TYPE = symbolFor('react.portal'); + REACT_FRAGMENT_TYPE = symbolFor('react.fragment'); + REACT_STRICT_MODE_TYPE = symbolFor('react.strict_mode'); + REACT_PROFILER_TYPE = symbolFor('react.profiler'); + REACT_PROVIDER_TYPE = symbolFor('react.provider'); + REACT_CONTEXT_TYPE = symbolFor('react.context'); + REACT_FORWARD_REF_TYPE = symbolFor('react.forward_ref'); + REACT_SUSPENSE_TYPE = symbolFor('react.suspense'); + REACT_SUSPENSE_LIST_TYPE = symbolFor('react.suspense_list'); + REACT_MEMO_TYPE = symbolFor('react.memo'); + REACT_LAZY_TYPE = symbolFor('react.lazy'); + REACT_BLOCK_TYPE = symbolFor('react.block'); + symbolFor('react.server.block'); + REACT_FUNDAMENTAL_TYPE = symbolFor('react.fundamental'); + REACT_SCOPE_TYPE = symbolFor('react.scope'); + symbolFor('react.opaque.id'); + REACT_DEBUG_TRACING_MODE_TYPE = symbolFor('react.debug_trace_mode'); + symbolFor('react.offscreen'); + REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden'); +} + +function getWrappedName(outerType, innerType, wrapperName) { + var functionName = innerType.displayName || innerType.name || ''; + return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName); +} + +function getContextName(type) { + return type.displayName || 'Context'; +} + +function getComponentName(type) { + if (type == null) { + // Host root, text node or just invalid type. + return null; + } + + { + if (typeof type.tag === 'number') { + error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.'); + } + } + + if (typeof type === 'function') { + return type.displayName || type.name || null; + } + + if (typeof type === 'string') { + return type; + } + + switch (type) { + case REACT_FRAGMENT_TYPE: + return 'Fragment'; + + case REACT_PORTAL_TYPE: + return 'Portal'; + + case REACT_PROFILER_TYPE: + return 'Profiler'; + + case REACT_STRICT_MODE_TYPE: + return 'StrictMode'; + + case REACT_SUSPENSE_TYPE: + return 'Suspense'; + + case REACT_SUSPENSE_LIST_TYPE: + return 'SuspenseList'; + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_CONTEXT_TYPE: + var context = type; + return getContextName(context) + '.Consumer'; + + case REACT_PROVIDER_TYPE: + var provider = type; + return getContextName(provider._context) + '.Provider'; + + case REACT_FORWARD_REF_TYPE: + return getWrappedName(type, type.render, 'ForwardRef'); + + case REACT_MEMO_TYPE: + return getComponentName(type.type); + + case REACT_BLOCK_TYPE: + return getComponentName(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + return getComponentName(init(payload)); + } catch (x) { + return null; + } + } + } + } + + return null; +} + +// Filter certain DOM attributes (e.g. src, href) if their values are empty strings. + +var enableSuspenseServerRenderer = false; + +// Helpers to patch console.logs to avoid logging during side-effect free +// replaying on render function. This currently only patches the object +// lazily which won't cover if the log function was extracted eagerly. +// We could also eagerly patch the method. +var disabledDepth = 0; +var prevLog; +var prevInfo; +var prevWarn; +var prevError; +var prevGroup; +var prevGroupCollapsed; +var prevGroupEnd; + +function disabledLog() {} + +disabledLog.__reactDisabledLog = true; +function disableLogs() { + { + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + prevLog = console.log; + prevInfo = console.info; + prevWarn = console.warn; + prevError = console.error; + prevGroup = console.group; + prevGroupCollapsed = console.groupCollapsed; + prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099 + + var props = { + configurable: true, + enumerable: true, + value: disabledLog, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + info: props, + log: props, + warn: props, + error: props, + group: props, + groupCollapsed: props, + groupEnd: props + }); + /* eslint-enable react-internal/no-production-logging */ + } + + disabledDepth++; + } +} +function reenableLogs() { + { + disabledDepth--; + + if (disabledDepth === 0) { + /* eslint-disable react-internal/no-production-logging */ + var props = { + configurable: true, + enumerable: true, + writable: true + }; // $FlowFixMe Flow thinks console is immutable. + + Object.defineProperties(console, { + log: _assign({}, props, { + value: prevLog + }), + info: _assign({}, props, { + value: prevInfo + }), + warn: _assign({}, props, { + value: prevWarn + }), + error: _assign({}, props, { + value: prevError + }), + group: _assign({}, props, { + value: prevGroup + }), + groupCollapsed: _assign({}, props, { + value: prevGroupCollapsed + }), + groupEnd: _assign({}, props, { + value: prevGroupEnd + }) + }); + /* eslint-enable react-internal/no-production-logging */ + } + + if (disabledDepth < 0) { + error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.'); + } + } +} + +var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher; +var prefix; +function describeBuiltInComponentFrame(name, source, ownerFn) { + { + if (prefix === undefined) { + // Extract the VM specific prefix used by each line. + try { + throw Error(); + } catch (x) { + var match = x.stack.trim().match(/\n( *(at )?)/); + prefix = match && match[1] || ''; + } + } // We use the prefix to ensure our stacks line up with native stack frames. + + + return '\n' + prefix + name; + } +} +var reentry = false; +var componentFrameCache; + +{ + var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; + componentFrameCache = new PossiblyWeakMap(); +} + +function describeNativeComponentFrame(fn, construct) { + // If something asked for a stack inside a fake render, it should get ignored. + if (!fn || reentry) { + return ''; + } + + { + var frame = componentFrameCache.get(fn); + + if (frame !== undefined) { + return frame; + } + } + + var control; + reentry = true; + var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined. + + Error.prepareStackTrace = undefined; + var previousDispatcher; + + { + previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function + // for warnings. + + ReactCurrentDispatcher.current = null; + disableLogs(); + } + + try { + // This should throw. + if (construct) { + // Something should be setting the props in the constructor. + var Fake = function () { + throw Error(); + }; // $FlowFixMe + + + Object.defineProperty(Fake.prototype, 'props', { + set: function () { + // We use a throwing setter instead of frozen or non-writable props + // because that won't throw in a non-strict mode function. + throw Error(); + } + }); + + if (typeof Reflect === 'object' && Reflect.construct) { + // We construct a different control for this case to include any extra + // frames added by the construct call. + try { + Reflect.construct(Fake, []); + } catch (x) { + control = x; + } + + Reflect.construct(fn, [], Fake); + } else { + try { + Fake.call(); + } catch (x) { + control = x; + } + + fn.call(Fake.prototype); + } + } else { + try { + throw Error(); + } catch (x) { + control = x; + } + + fn(); + } + } catch (sample) { + // This is inlined manually because closure doesn't do it for us. + if (sample && control && typeof sample.stack === 'string') { + // This extracts the first frame from the sample that isn't also in the control. + // Skipping one frame that we assume is the frame that calls the two. + var sampleLines = sample.stack.split('\n'); + var controlLines = control.stack.split('\n'); + var s = sampleLines.length - 1; + var c = controlLines.length - 1; + + while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) { + // We expect at least one stack frame to be shared. + // Typically this will be the root most one. However, stack frames may be + // cut off due to maximum stack limits. In this case, one maybe cut off + // earlier than the other. We assume that the sample is longer or the same + // and there for cut off earlier. So we should find the root most frame in + // the sample somewhere in the control. + c--; + } + + for (; s >= 1 && c >= 0; s--, c--) { + // Next we find the first one that isn't the same which should be the + // frame that called our sample function and the control. + if (sampleLines[s] !== controlLines[c]) { + // In V8, the first line is describing the message but other VMs don't. + // If we're about to return the first line, and the control is also on the same + // line, that's a pretty good indicator that our sample threw at same line as + // the control. I.e. before we entered the sample frame. So we ignore this result. + // This can happen if you passed a class to function component, or non-function. + if (s !== 1 || c !== 1) { + do { + s--; + c--; // We may still have similar intermediate frames from the construct call. + // The next one that isn't the same should be our match though. + + if (c < 0 || sampleLines[s] !== controlLines[c]) { + // V8 adds a "new" prefix for native classes. Let's remove it to make it prettier. + var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, _frame); + } + } // Return the line we found. + + + return _frame; + } + } while (s >= 1 && c >= 0); + } + + break; + } + } + } + } finally { + reentry = false; + + { + ReactCurrentDispatcher.current = previousDispatcher; + reenableLogs(); + } + + Error.prepareStackTrace = previousPrepareStackTrace; + } // Fallback to just using the name if we couldn't make it throw. + + + var name = fn ? fn.displayName || fn.name : ''; + var syntheticFrame = name ? describeBuiltInComponentFrame(name) : ''; + + { + if (typeof fn === 'function') { + componentFrameCache.set(fn, syntheticFrame); + } + } + + return syntheticFrame; +} +function describeFunctionComponentFrame(fn, source, ownerFn) { + { + return describeNativeComponentFrame(fn, false); + } +} + +function shouldConstruct(Component) { + var prototype = Component.prototype; + return !!(prototype && prototype.isReactComponent); +} + +function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) { + + if (type == null) { + return ''; + } + + if (typeof type === 'function') { + { + return describeNativeComponentFrame(type, shouldConstruct(type)); + } + } + + if (typeof type === 'string') { + return describeBuiltInComponentFrame(type); + } + + switch (type) { + case REACT_SUSPENSE_TYPE: + return describeBuiltInComponentFrame('Suspense'); + + case REACT_SUSPENSE_LIST_TYPE: + return describeBuiltInComponentFrame('SuspenseList'); + } + + if (typeof type === 'object') { + switch (type.$$typeof) { + case REACT_FORWARD_REF_TYPE: + return describeFunctionComponentFrame(type.render); + + case REACT_MEMO_TYPE: + // Memo may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn); + + case REACT_BLOCK_TYPE: + return describeFunctionComponentFrame(type._render); + + case REACT_LAZY_TYPE: + { + var lazyComponent = type; + var payload = lazyComponent._payload; + var init = lazyComponent._init; + + try { + // Lazy may contain any component type so we recursively resolve it. + return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn); + } catch (x) {} + } + } + } + + return ''; +} + +var loggedTypeFailures = {}; +var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; + +function setCurrentlyValidatingElement(element) { + { + if (element) { + var owner = element._owner; + var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null); + ReactDebugCurrentFrame.setExtraStackFrame(stack); + } else { + ReactDebugCurrentFrame.setExtraStackFrame(null); + } + } +} + +function checkPropTypes(typeSpecs, values, location, componentName, element) { + { + // $FlowFixMe This is okay but Flow doesn't know it. + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + for (var typeSpecName in typeSpecs) { + if (has(typeSpecs, typeSpecName)) { + var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'); + } catch (ex) { + error$1 = ex; + } + + if (error$1 && !(error$1 instanceof Error)) { + setCurrentlyValidatingElement(element); + + error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1); + + setCurrentlyValidatingElement(null); + } + + if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error$1.message] = true; + setCurrentlyValidatingElement(element); + + error('Failed %s type: %s', location, error$1.message); + + setCurrentlyValidatingElement(null); + } + } + } + } +} + +var didWarnAboutInvalidateContextType; + +{ + didWarnAboutInvalidateContextType = new Set(); +} + +var emptyObject = {}; + +{ + Object.freeze(emptyObject); +} + +function maskContext(type, context) { + var contextTypes = type.contextTypes; + + if (!contextTypes) { + return emptyObject; + } + + var maskedContext = {}; + + for (var contextName in contextTypes) { + maskedContext[contextName] = context[contextName]; + } + + return maskedContext; +} + +function checkContextTypes(typeSpecs, values, location) { + { + checkPropTypes(typeSpecs, values, location, 'Component'); + } +} + +function validateContextBounds(context, threadID) { + // If we don't have enough slots in this context to store this threadID, + // fill it in without leaving any holes to ensure that the VM optimizes + // this as non-holey index properties. + // (Note: If `react` package is < 16.6, _threadCount is undefined.) + for (var i = context._threadCount | 0; i <= threadID; i++) { + // We assume that this is the same as the defaultValue which might not be + // true if we're rendering inside a secondary renderer but they are + // secondary because these use cases are very rare. + context[i] = context._currentValue2; + context._threadCount = i + 1; + } +} +function processContext(type, context, threadID, isClass) { + if (isClass) { + var contextType = type.contextType; + + { + if ('contextType' in type) { + var isValid = // Allow null for conditional declaration + contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a + + if (!isValid && !didWarnAboutInvalidateContextType.has(type)) { + didWarnAboutInvalidateContextType.add(type); + var addendum = ''; + + if (contextType === undefined) { + addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.'; + } else if (typeof contextType !== 'object') { + addendum = ' However, it is set to a ' + typeof contextType + '.'; + } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) { + addendum = ' Did you accidentally pass the Context.Provider instead?'; + } else if (contextType._context !== undefined) { + // + addendum = ' Did you accidentally pass the Context.Consumer instead?'; + } else { + addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.'; + } + + error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(type) || 'Component', addendum); + } + } + } + + if (typeof contextType === 'object' && contextType !== null) { + validateContextBounds(contextType, threadID); + return contextType[threadID]; + } + + { + var maskedContext = maskContext(type, context); + + { + if (type.contextTypes) { + checkContextTypes(type.contextTypes, maskedContext, 'context'); + } + } + + return maskedContext; + } + } else { + { + var _maskedContext = maskContext(type, context); + + { + if (type.contextTypes) { + checkContextTypes(type.contextTypes, _maskedContext, 'context'); + } + } + + return _maskedContext; + } + } +} + +var nextAvailableThreadIDs = new Uint16Array(16); + +for (var i = 0; i < 15; i++) { + nextAvailableThreadIDs[i] = i + 1; +} + +nextAvailableThreadIDs[15] = 0; + +function growThreadCountAndReturnNextAvailable() { + var oldArray = nextAvailableThreadIDs; + var oldSize = oldArray.length; + var newSize = oldSize * 2; + + if (!(newSize <= 0x10000)) { + { + throw Error( "Maximum number of concurrent React renderers exceeded. This can happen if you are not properly destroying the Readable provided by React. Ensure that you call .destroy() on it if you no longer want to read from it, and did not read to the end. If you use .pipe() this should be automatic." ); + } + } + + var newArray = new Uint16Array(newSize); + newArray.set(oldArray); + nextAvailableThreadIDs = newArray; + nextAvailableThreadIDs[0] = oldSize + 1; + + for (var _i = oldSize; _i < newSize - 1; _i++) { + nextAvailableThreadIDs[_i] = _i + 1; + } + + nextAvailableThreadIDs[newSize - 1] = 0; + return oldSize; +} + +function allocThreadID() { + var nextID = nextAvailableThreadIDs[0]; + + if (nextID === 0) { + return growThreadCountAndReturnNextAvailable(); + } + + nextAvailableThreadIDs[0] = nextAvailableThreadIDs[nextID]; + return nextID; +} +function freeThreadID(id) { + nextAvailableThreadIDs[id] = nextAvailableThreadIDs[0]; + nextAvailableThreadIDs[0] = id; +} + +// A reserved attribute. +// It is handled by React separately and shouldn't be written to the DOM. +var RESERVED = 0; // A simple string attribute. +// Attributes that aren't in the filter are presumed to have this type. + +var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called +// "enumerated" attributes with "true" and "false" as possible values. +// When true, it should be set to a "true" string. +// When false, it should be set to a "false" string. + +var BOOLEANISH_STRING = 2; // A real boolean attribute. +// When true, it should be present (set either to an empty string or its name). +// When false, it should be omitted. + +var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value. +// When true, it should be present (set either to an empty string or its name). +// When false, it should be omitted. +// For any other value, should be present with that value. + +var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric. +// When falsy, it should be removed. + +var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric. +// When falsy, it should be removed. + +var POSITIVE_NUMERIC = 6; + +/* eslint-disable max-len */ +var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD"; +/* eslint-enable max-len */ + +var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040"; +var ROOT_ATTRIBUTE_NAME = 'data-reactroot'; +var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$'); +var hasOwnProperty = Object.prototype.hasOwnProperty; +var illegalAttributeNameCache = {}; +var validatedAttributeNameCache = {}; +function isAttributeNameSafe(attributeName) { + if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) { + return true; + } + + if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) { + return false; + } + + if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) { + validatedAttributeNameCache[attributeName] = true; + return true; + } + + illegalAttributeNameCache[attributeName] = true; + + { + error('Invalid attribute name: `%s`', attributeName); + } + + return false; +} +function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) { + if (propertyInfo !== null) { + return propertyInfo.type === RESERVED; + } + + if (isCustomComponentTag) { + return false; + } + + if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) { + return true; + } + + return false; +} +function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) { + if (propertyInfo !== null && propertyInfo.type === RESERVED) { + return false; + } + + switch (typeof value) { + case 'function': // $FlowIssue symbol is perfectly valid here + + case 'symbol': + // eslint-disable-line + return true; + + case 'boolean': + { + if (isCustomComponentTag) { + return false; + } + + if (propertyInfo !== null) { + return !propertyInfo.acceptsBooleans; + } else { + var prefix = name.toLowerCase().slice(0, 5); + return prefix !== 'data-' && prefix !== 'aria-'; + } + } + + default: + return false; + } +} +function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) { + if (value === null || typeof value === 'undefined') { + return true; + } + + if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) { + return true; + } + + if (isCustomComponentTag) { + return false; + } + + if (propertyInfo !== null) { + + switch (propertyInfo.type) { + case BOOLEAN: + return !value; + + case OVERLOADED_BOOLEAN: + return value === false; + + case NUMERIC: + return isNaN(value); + + case POSITIVE_NUMERIC: + return isNaN(value) || value < 1; + } + } + + return false; +} +function getPropertyInfo(name) { + return properties.hasOwnProperty(name) ? properties[name] : null; +} + +function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) { + this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN; + this.attributeName = attributeName; + this.attributeNamespace = attributeNamespace; + this.mustUseProperty = mustUseProperty; + this.propertyName = name; + this.type = type; + this.sanitizeURL = sanitizeURL; + this.removeEmptyString = removeEmptyString; +} // When adding attributes to this list, be sure to also add them to +// the `possibleStandardNames` module to ensure casing and incorrect +// name warnings. + + +var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM. + +var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular +// elements (not just inputs). Now that ReactDOMInput assigns to the +// defaultValue property -- do we need this? +'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style']; +reservedProps.forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // A few React string attributes have a different name. +// This is a mapping from React prop names to the attribute names. + +[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) { + var name = _ref[0], + attributeName = _ref[1]; + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are "enumerated" HTML attributes that accept "true" and "false". +// In React, we let users pass `true` and `false` even though technically +// these aren't boolean attributes (they are coerced to strings). + +['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty + name.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are "enumerated" SVG attributes that accept "true" and "false". +// In React, we let users pass `true` and `false` even though technically +// these aren't boolean attributes (they are coerced to strings). +// Since these are SVG attributes, their attribute names are case-sensitive. + +['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML boolean attributes. + +['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM +// on the client side because the browsers are inconsistent. Instead we call focus(). +'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata +'itemScope'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty + name.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are the few React props that we set as DOM properties +// rather than attributes. These are all booleans. + +['checked', // Note: `option.selected` is not updated if `select.multiple` is +// disabled with `removeAttribute`. We have special logic for handling this. +'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML attributes that are "overloaded booleans": they behave like +// booleans, but can also accept a string value. + +['capture', 'download' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML attributes that must be positive numbers. + +['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty + name, // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These are HTML attributes that must be numbers. + +['rowSpan', 'start'].forEach(function (name) { + properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty + name.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); +var CAMELIZE = /[\-\:]([a-z])/g; + +var capitalize = function (token) { + return token[1].toUpperCase(); +}; // This is a list of all SVG attributes that need special casing, namespacing, +// or boolean value assignment. Regular attributes that just accept strings +// and have the same names are omitted, just like in the HTML attribute filter. +// Some of these attributes can be hard to find. This list was created by +// scraping the MDN documentation. + + +['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (attributeName) { + var name = attributeName.replace(CAMELIZE, capitalize); + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, null, // attributeNamespace + false, // sanitizeURL + false); +}); // String SVG attributes with the xlink namespace. + +['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (attributeName) { + var name = attributeName.replace(CAMELIZE, capitalize); + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL + false); +}); // String SVG attributes with the xml namespace. + +['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list, +// you'll need to set attributeName to name.toLowerCase() +// instead in the assignment below. +].forEach(function (attributeName) { + var name = attributeName.replace(CAMELIZE, capitalize); + properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty + attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL + false); +}); // These attribute exists both in HTML and SVG. +// The attribute name is case-sensitive in SVG so we can't just use +// the React name like we do for attributes that exist only in HTML. + +['tabIndex', 'crossOrigin'].forEach(function (attributeName) { + properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty + attributeName.toLowerCase(), // attributeName + null, // attributeNamespace + false, // sanitizeURL + false); +}); // These attributes accept URLs. These must not allow javascript: URLS. +// These will also need to accept Trusted Types object in the future. + +var xlinkHref = 'xlinkHref'; +properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty +'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL +false); +['src', 'href', 'action', 'formAction'].forEach(function (attributeName) { + properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty + attributeName.toLowerCase(), // attributeName + null, // attributeNamespace + true, // sanitizeURL + true); +}); + +// and any newline or tab are filtered out as if they're not part of the URL. +// https://url.spec.whatwg.org/#url-parsing +// Tab or newline are defined as \r\n\t: +// https://infra.spec.whatwg.org/#ascii-tab-or-newline +// A C0 control is a code point in the range \u0000 NULL to \u001F +// INFORMATION SEPARATOR ONE, inclusive: +// https://infra.spec.whatwg.org/#c0-control-or-space + +/* eslint-disable max-len */ + +var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i; +var didWarn = false; + +function sanitizeURL(url) { + { + if (!didWarn && isJavaScriptProtocol.test(url)) { + didWarn = true; + + error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url)); + } + } +} + +// code copied and modified from escape-html + +/** + * Module variables. + * @private + */ +var matchHtmlRegExp = /["'&<>]/; +/** + * Escapes special characters and HTML entities in a given html string. + * + * @param {string} string HTML string to escape for later insertion + * @return {string} + * @public + */ + +function escapeHtml(string) { + var str = '' + string; + var match = matchHtmlRegExp.exec(str); + + if (!match) { + return str; + } + + var escape; + var html = ''; + var index; + var lastIndex = 0; + + for (index = match.index; index < str.length; index++) { + switch (str.charCodeAt(index)) { + case 34: + // " + escape = '"'; + break; + + case 38: + // & + escape = '&'; + break; + + case 39: + // ' + escape = '''; // modified from escape-html; used to be ''' + + break; + + case 60: + // < + escape = '<'; + break; + + case 62: + // > + escape = '>'; + break; + + default: + continue; + } + + if (lastIndex !== index) { + html += str.substring(lastIndex, index); + } + + lastIndex = index + 1; + html += escape; + } + + return lastIndex !== index ? html + str.substring(lastIndex, index) : html; +} // end code copied and modified from escape-html + +/** + * Escapes text to prevent scripting attacks. + * + * @param {*} text Text value to escape. + * @return {string} An escaped string. + */ + + +function escapeTextForBrowser(text) { + if (typeof text === 'boolean' || typeof text === 'number') { + // this shortcircuit helps perf for types that we know will never have + // special characters, especially given that this function is used often + // for numeric dom ids. + return '' + text; + } + + return escapeHtml(text); +} + +/** + * Escapes attribute value to prevent scripting attacks. + * + * @param {*} value Value to escape. + * @return {string} An escaped string. + */ + +function quoteAttributeValueForBrowser(value) { + return '"' + escapeTextForBrowser(value) + '"'; +} + +function createMarkupForRoot() { + return ROOT_ATTRIBUTE_NAME + '=""'; +} +/** + * Creates markup for a property. + * + * @param {string} name + * @param {*} value + * @return {?string} Markup string, or null if the property was invalid. + */ + +function createMarkupForProperty(name, value) { + var propertyInfo = getPropertyInfo(name); + + if (name !== 'style' && shouldIgnoreAttribute(name, propertyInfo, false)) { + return ''; + } + + if (shouldRemoveAttribute(name, value, propertyInfo, false)) { + return ''; + } + + if (propertyInfo !== null) { + var attributeName = propertyInfo.attributeName; + var type = propertyInfo.type; + + if (type === BOOLEAN || type === OVERLOADED_BOOLEAN && value === true) { + return attributeName + '=""'; + } else { + if (propertyInfo.sanitizeURL) { + value = '' + value; + sanitizeURL(value); + } + + return attributeName + '=' + quoteAttributeValueForBrowser(value); + } + } else if (isAttributeNameSafe(name)) { + return name + '=' + quoteAttributeValueForBrowser(value); + } + + return ''; +} +/** + * Creates markup for a custom property. + * + * @param {string} name + * @param {*} value + * @return {string} Markup string, or empty string if the property was invalid. + */ + +function createMarkupForCustomAttribute(name, value) { + if (!isAttributeNameSafe(name) || value == null) { + return ''; + } + + return name + '=' + quoteAttributeValueForBrowser(value); +} + +/** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ +function is(x, y) { + return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare + ; +} + +var objectIs = typeof Object.is === 'function' ? Object.is : is; + +var currentlyRenderingComponent = null; +var firstWorkInProgressHook = null; +var workInProgressHook = null; // Whether the work-in-progress hook is a re-rendered hook + +var isReRender = false; // Whether an update was scheduled during the currently executing render pass. + +var didScheduleRenderPhaseUpdate = false; // Lazily created map of render-phase updates + +var renderPhaseUpdates = null; // Counter to prevent infinite loops. + +var numberOfReRenders = 0; +var RE_RENDER_LIMIT = 25; +var isInHookUserCodeInDev = false; // In DEV, this is the name of the currently executing primitive hook + +var currentHookNameInDev; + +function resolveCurrentlyRenderingComponent() { + if (!(currentlyRenderingComponent !== null)) { + { + throw Error( "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem." ); + } + } + + { + if (isInHookUserCodeInDev) { + error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks'); + } + } + + return currentlyRenderingComponent; +} + +function areHookInputsEqual(nextDeps, prevDeps) { + if (prevDeps === null) { + { + error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev); + } + + return false; + } + + { + // Don't bother comparing lengths in prod because these arrays should be + // passed inline. + if (nextDeps.length !== prevDeps.length) { + error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\n\n' + 'Previous: %s\n' + 'Incoming: %s', currentHookNameInDev, "[" + nextDeps.join(', ') + "]", "[" + prevDeps.join(', ') + "]"); + } + } + + for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) { + if (objectIs(nextDeps[i], prevDeps[i])) { + continue; + } + + return false; + } + + return true; +} + +function createHook() { + if (numberOfReRenders > 0) { + { + { + throw Error( "Rendered more hooks than during the previous render" ); + } + } + } + + return { + memoizedState: null, + queue: null, + next: null + }; +} + +function createWorkInProgressHook() { + if (workInProgressHook === null) { + // This is the first hook in the list + if (firstWorkInProgressHook === null) { + isReRender = false; + firstWorkInProgressHook = workInProgressHook = createHook(); + } else { + // There's already a work-in-progress. Reuse it. + isReRender = true; + workInProgressHook = firstWorkInProgressHook; + } + } else { + if (workInProgressHook.next === null) { + isReRender = false; // Append to the end of the list + + workInProgressHook = workInProgressHook.next = createHook(); + } else { + // There's already a work-in-progress. Reuse it. + isReRender = true; + workInProgressHook = workInProgressHook.next; + } + } + + return workInProgressHook; +} + +function prepareToUseHooks(componentIdentity) { + currentlyRenderingComponent = componentIdentity; + + { + isInHookUserCodeInDev = false; + } // The following should have already been reset + // didScheduleRenderPhaseUpdate = false; + // firstWorkInProgressHook = null; + // numberOfReRenders = 0; + // renderPhaseUpdates = null; + // workInProgressHook = null; + +} +function finishHooks(Component, props, children, refOrContext) { + // This must be called after every function component to prevent hooks from + // being used in classes. + while (didScheduleRenderPhaseUpdate) { + // Updates were scheduled during the render phase. They are stored in + // the `renderPhaseUpdates` map. Call the component again, reusing the + // work-in-progress hooks and applying the additional updates on top. Keep + // restarting until no more updates are scheduled. + didScheduleRenderPhaseUpdate = false; + numberOfReRenders += 1; // Start over from the beginning of the list + + workInProgressHook = null; + children = Component(props, refOrContext); + } + + resetHooksState(); + return children; +} // Reset the internal hooks state if an error occurs while rendering a component + +function resetHooksState() { + { + isInHookUserCodeInDev = false; + } + + currentlyRenderingComponent = null; + didScheduleRenderPhaseUpdate = false; + firstWorkInProgressHook = null; + numberOfReRenders = 0; + renderPhaseUpdates = null; + workInProgressHook = null; +} + +function readContext(context, observedBits) { + var threadID = currentPartialRenderer.threadID; + validateContextBounds(context, threadID); + + { + if (isInHookUserCodeInDev) { + error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().'); + } + } + + return context[threadID]; +} + +function useContext(context, observedBits) { + { + currentHookNameInDev = 'useContext'; + } + + resolveCurrentlyRenderingComponent(); + var threadID = currentPartialRenderer.threadID; + validateContextBounds(context, threadID); + return context[threadID]; +} + +function basicStateReducer(state, action) { + // $FlowFixMe: Flow doesn't like mixed types + return typeof action === 'function' ? action(state) : action; +} + +function useState(initialState) { + { + currentHookNameInDev = 'useState'; + } + + return useReducer(basicStateReducer, // useReducer has a special case to support lazy useState initializers + initialState); +} +function useReducer(reducer, initialArg, init) { + { + if (reducer !== basicStateReducer) { + currentHookNameInDev = 'useReducer'; + } + } + + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + + if (isReRender) { + // This is a re-render. Apply the new render phase updates to the previous + // current hook. + var queue = workInProgressHook.queue; + var dispatch = queue.dispatch; + + if (renderPhaseUpdates !== null) { + // Render phase updates are stored in a map of queue -> linked list + var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue); + + if (firstRenderPhaseUpdate !== undefined) { + renderPhaseUpdates.delete(queue); + var newState = workInProgressHook.memoizedState; + var update = firstRenderPhaseUpdate; + + do { + // Process this render phase update. We don't have to check the + // priority because it will always be the same as the current + // render's. + var action = update.action; + + { + isInHookUserCodeInDev = true; + } + + newState = reducer(newState, action); + + { + isInHookUserCodeInDev = false; + } + + update = update.next; + } while (update !== null); + + workInProgressHook.memoizedState = newState; + return [newState, dispatch]; + } + } + + return [workInProgressHook.memoizedState, dispatch]; + } else { + { + isInHookUserCodeInDev = true; + } + + var initialState; + + if (reducer === basicStateReducer) { + // Special case for `useState`. + initialState = typeof initialArg === 'function' ? initialArg() : initialArg; + } else { + initialState = init !== undefined ? init(initialArg) : initialArg; + } + + { + isInHookUserCodeInDev = false; + } + + workInProgressHook.memoizedState = initialState; + + var _queue = workInProgressHook.queue = { + last: null, + dispatch: null + }; + + var _dispatch = _queue.dispatch = dispatchAction.bind(null, currentlyRenderingComponent, _queue); + + return [workInProgressHook.memoizedState, _dispatch]; + } +} + +function useMemo(nextCreate, deps) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var nextDeps = deps === undefined ? null : deps; + + if (workInProgressHook !== null) { + var prevState = workInProgressHook.memoizedState; + + if (prevState !== null) { + if (nextDeps !== null) { + var prevDeps = prevState[1]; + + if (areHookInputsEqual(nextDeps, prevDeps)) { + return prevState[0]; + } + } + } + } + + { + isInHookUserCodeInDev = true; + } + + var nextValue = nextCreate(); + + { + isInHookUserCodeInDev = false; + } + + workInProgressHook.memoizedState = [nextValue, nextDeps]; + return nextValue; +} + +function useRef(initialValue) { + currentlyRenderingComponent = resolveCurrentlyRenderingComponent(); + workInProgressHook = createWorkInProgressHook(); + var previousRef = workInProgressHook.memoizedState; + + if (previousRef === null) { + var ref = { + current: initialValue + }; + + { + Object.seal(ref); + } + + workInProgressHook.memoizedState = ref; + return ref; + } else { + return previousRef; + } +} + +function useLayoutEffect(create, inputs) { + { + currentHookNameInDev = 'useLayoutEffect'; + + error('useLayoutEffect does nothing on the server, because its effect cannot ' + "be encoded into the server renderer's output format. This will lead " + 'to a mismatch between the initial, non-hydrated UI and the intended ' + 'UI. To avoid this, useLayoutEffect should only be used in ' + 'components that render exclusively on the client. ' + 'See https://reactjs.org/link/uselayouteffect-ssr for common fixes.'); + } +} + +function dispatchAction(componentIdentity, queue, action) { + if (!(numberOfReRenders < RE_RENDER_LIMIT)) { + { + throw Error( "Too many re-renders. React limits the number of renders to prevent an infinite loop." ); + } + } + + if (componentIdentity === currentlyRenderingComponent) { + // This is a render phase update. Stash it in a lazily-created map of + // queue -> linked list of updates. After this render pass, we'll restart + // and apply the stashed updates on top of the work-in-progress hook. + didScheduleRenderPhaseUpdate = true; + var update = { + action: action, + next: null + }; + + if (renderPhaseUpdates === null) { + renderPhaseUpdates = new Map(); + } + + var firstRenderPhaseUpdate = renderPhaseUpdates.get(queue); + + if (firstRenderPhaseUpdate === undefined) { + renderPhaseUpdates.set(queue, update); + } else { + // Append the update to the end of the list. + var lastRenderPhaseUpdate = firstRenderPhaseUpdate; + + while (lastRenderPhaseUpdate.next !== null) { + lastRenderPhaseUpdate = lastRenderPhaseUpdate.next; + } + + lastRenderPhaseUpdate.next = update; + } + } +} + +function useCallback(callback, deps) { + return useMemo(function () { + return callback; + }, deps); +} // TODO Decide on how to implement this hook for server rendering. +// If a mutation occurs during render, consider triggering a Suspense boundary +// and falling back to client rendering. + +function useMutableSource(source, getSnapshot, subscribe) { + resolveCurrentlyRenderingComponent(); + return getSnapshot(source._source); +} + +function useDeferredValue(value) { + resolveCurrentlyRenderingComponent(); + return value; +} + +function useTransition() { + resolveCurrentlyRenderingComponent(); + + var startTransition = function (callback) { + callback(); + }; + + return [startTransition, false]; +} + +function useOpaqueIdentifier() { + return (currentPartialRenderer.identifierPrefix || '') + 'R:' + (currentPartialRenderer.uniqueID++).toString(36); +} + +function noop() {} + +var currentPartialRenderer = null; +function setCurrentPartialRenderer(renderer) { + currentPartialRenderer = renderer; +} +var Dispatcher = { + readContext: readContext, + useContext: useContext, + useMemo: useMemo, + useReducer: useReducer, + useRef: useRef, + useState: useState, + useLayoutEffect: useLayoutEffect, + useCallback: useCallback, + // useImperativeHandle is not run in the server environment + useImperativeHandle: noop, + // Effects are not run in the server environment. + useEffect: noop, + // Debugging effect + useDebugValue: noop, + useDeferredValue: useDeferredValue, + useTransition: useTransition, + useOpaqueIdentifier: useOpaqueIdentifier, + // Subscriptions are not setup in a server environment. + useMutableSource: useMutableSource +}; + +var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; +var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; +var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; +var Namespaces = { + html: HTML_NAMESPACE, + mathml: MATH_NAMESPACE, + svg: SVG_NAMESPACE +}; // Assumes there is no parent namespace. + +function getIntrinsicNamespace(type) { + switch (type) { + case 'svg': + return SVG_NAMESPACE; + + case 'math': + return MATH_NAMESPACE; + + default: + return HTML_NAMESPACE; + } +} +function getChildNamespace(parentNamespace, type) { + if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) { + // No (or default) parent namespace: potential entry point. + return getIntrinsicNamespace(type); + } + + if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') { + // We're leaving SVG. + return HTML_NAMESPACE; + } // By default, pass namespace below. + + + return parentNamespace; +} + +var hasReadOnlyValue = { + button: true, + checkbox: true, + image: true, + hidden: true, + radio: true, + reset: true, + submit: true +}; +function checkControlledValueProps(tagName, props) { + { + if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) { + error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + } + + if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) { + error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.'); + } + } +} + +// For HTML, certain tags should omit their close tag. We keep a list for +// those special-case tags. +var omittedCloseTags = { + area: true, + base: true, + br: true, + col: true, + embed: true, + hr: true, + img: true, + input: true, + keygen: true, + link: true, + meta: true, + param: true, + source: true, + track: true, + wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems. + +}; + +// `omittedCloseTags` except that `menuitem` should still have its closing tag. + +var voidElementTags = _assign({ + menuitem: true +}, omittedCloseTags); + +var HTML = '__html'; + +function assertValidProps(tag, props) { + if (!props) { + return; + } // Note the use of `==` which checks for null or undefined. + + + if (voidElementTags[tag]) { + if (!(props.children == null && props.dangerouslySetInnerHTML == null)) { + { + throw Error( tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." ); + } + } + } + + if (props.dangerouslySetInnerHTML != null) { + if (!(props.children == null)) { + { + throw Error( "Can only set one of `children` or `props.dangerouslySetInnerHTML`." ); + } + } + + if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) { + { + throw Error( "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://reactjs.org/link/dangerously-set-inner-html for more information." ); + } + } + } + + { + if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) { + error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.'); + } + } + + if (!(props.style == null || typeof props.style === 'object')) { + { + throw Error( "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." ); + } + } +} + +/** + * CSS properties which accept numbers but are not in units of "px". + */ +var isUnitlessNumber = { + animationIterationCount: true, + borderImageOutset: true, + borderImageSlice: true, + borderImageWidth: true, + boxFlex: true, + boxFlexGroup: true, + boxOrdinalGroup: true, + columnCount: true, + columns: true, + flex: true, + flexGrow: true, + flexPositive: true, + flexShrink: true, + flexNegative: true, + flexOrder: true, + gridArea: true, + gridRow: true, + gridRowEnd: true, + gridRowSpan: true, + gridRowStart: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnSpan: true, + gridColumnStart: true, + fontWeight: true, + lineClamp: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + tabSize: true, + widows: true, + zIndex: true, + zoom: true, + // SVG-related properties + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeDasharray: true, + strokeDashoffset: true, + strokeMiterlimit: true, + strokeOpacity: true, + strokeWidth: true +}; +/** + * @param {string} prefix vendor-specific prefix, eg: Webkit + * @param {string} key style name, eg: transitionDuration + * @return {string} style name prefixed with `prefix`, properly camelCased, eg: + * WebkitTransitionDuration + */ + +function prefixKey(prefix, key) { + return prefix + key.charAt(0).toUpperCase() + key.substring(1); +} +/** + * Support style names that may come passed in prefixed by adding permutations + * of vendor prefixes. + */ + + +var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an +// infinite loop, because it iterates over the newly added props too. + +Object.keys(isUnitlessNumber).forEach(function (prop) { + prefixes.forEach(function (prefix) { + isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop]; + }); +}); + +/** + * Convert a value into the proper css writable value. The style name `name` + * should be logical (no hyphens), as specified + * in `CSSProperty.isUnitlessNumber`. + * + * @param {string} name CSS property name such as `topMargin`. + * @param {*} value CSS property value such as `10px`. + * @return {string} Normalized style value with dimensions applied. + */ + +function dangerousStyleValue(name, value, isCustomProperty) { + // Note that we've removed escapeTextForBrowser() calls here since the + // whole string will be escaped when the attribute is injected into + // the markup. If you provide unsafe user data here they can inject + // arbitrary CSS which may be problematic (I couldn't repro this): + // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet + // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/ + // This is not an XSS hole but instead a potential CSS injection issue + // which has lead to a greater discussion about how we're going to + // trust URLs moving forward. See #2115901 + var isEmpty = value == null || typeof value === 'boolean' || value === ''; + + if (isEmpty) { + return ''; + } + + if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) { + return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers + } + + return ('' + value).trim(); +} + +var uppercasePattern = /([A-Z])/g; +var msPattern = /^ms-/; +/** + * Hyphenates a camelcased CSS property name, for example: + * + * > hyphenateStyleName('backgroundColor') + * < "background-color" + * > hyphenateStyleName('MozTransition') + * < "-moz-transition" + * > hyphenateStyleName('msTransition') + * < "-ms-transition" + * + * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix + * is converted to `-ms-`. + */ + +function hyphenateStyleName(name) { + return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-'); +} + +function isCustomComponent(tagName, props) { + if (tagName.indexOf('-') === -1) { + return typeof props.is === 'string'; + } + + switch (tagName) { + // These are reserved SVG and MathML elements. + // We don't mind this list too much because we expect it to never grow. + // The alternative is to track the namespace in a few places which is convoluted. + // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts + case 'annotation-xml': + case 'color-profile': + case 'font-face': + case 'font-face-src': + case 'font-face-uri': + case 'font-face-format': + case 'font-face-name': + case 'missing-glyph': + return false; + + default: + return true; + } +} + +var warnValidStyle = function () {}; + +{ + // 'msTransform' is correct, but the other prefixes should be capitalized + var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/; + var msPattern$1 = /^-ms-/; + var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon + + var badStyleValueWithSemicolonPattern = /;\s*$/; + var warnedStyleNames = {}; + var warnedStyleValues = {}; + var warnedForNaNValue = false; + var warnedForInfinityValue = false; + + var camelize = function (string) { + return string.replace(hyphenPattern, function (_, character) { + return character.toUpperCase(); + }); + }; + + var warnHyphenatedStyleName = function (name) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + + error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests + // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix + // is converted to lowercase `ms`. + camelize(name.replace(msPattern$1, 'ms-'))); + }; + + var warnBadVendoredStyleName = function (name) { + if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) { + return; + } + + warnedStyleNames[name] = true; + + error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)); + }; + + var warnStyleValueWithSemicolon = function (name, value) { + if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) { + return; + } + + warnedStyleValues[value] = true; + + error("Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')); + }; + + var warnStyleValueIsNaN = function (name, value) { + if (warnedForNaNValue) { + return; + } + + warnedForNaNValue = true; + + error('`NaN` is an invalid value for the `%s` css style property.', name); + }; + + var warnStyleValueIsInfinity = function (name, value) { + if (warnedForInfinityValue) { + return; + } + + warnedForInfinityValue = true; + + error('`Infinity` is an invalid value for the `%s` css style property.', name); + }; + + warnValidStyle = function (name, value) { + if (name.indexOf('-') > -1) { + warnHyphenatedStyleName(name); + } else if (badVendoredStyleNamePattern.test(name)) { + warnBadVendoredStyleName(name); + } else if (badStyleValueWithSemicolonPattern.test(value)) { + warnStyleValueWithSemicolon(name, value); + } + + if (typeof value === 'number') { + if (isNaN(value)) { + warnStyleValueIsNaN(name, value); + } else if (!isFinite(value)) { + warnStyleValueIsInfinity(name, value); + } + } + }; +} + +var warnValidStyle$1 = warnValidStyle; + +var ariaProperties = { + 'aria-current': 0, + // state + 'aria-details': 0, + 'aria-disabled': 0, + // state + 'aria-hidden': 0, + // state + 'aria-invalid': 0, + // state + 'aria-keyshortcuts': 0, + 'aria-label': 0, + 'aria-roledescription': 0, + // Widget Attributes + 'aria-autocomplete': 0, + 'aria-checked': 0, + 'aria-expanded': 0, + 'aria-haspopup': 0, + 'aria-level': 0, + 'aria-modal': 0, + 'aria-multiline': 0, + 'aria-multiselectable': 0, + 'aria-orientation': 0, + 'aria-placeholder': 0, + 'aria-pressed': 0, + 'aria-readonly': 0, + 'aria-required': 0, + 'aria-selected': 0, + 'aria-sort': 0, + 'aria-valuemax': 0, + 'aria-valuemin': 0, + 'aria-valuenow': 0, + 'aria-valuetext': 0, + // Live Region Attributes + 'aria-atomic': 0, + 'aria-busy': 0, + 'aria-live': 0, + 'aria-relevant': 0, + // Drag-and-Drop Attributes + 'aria-dropeffect': 0, + 'aria-grabbed': 0, + // Relationship Attributes + 'aria-activedescendant': 0, + 'aria-colcount': 0, + 'aria-colindex': 0, + 'aria-colspan': 0, + 'aria-controls': 0, + 'aria-describedby': 0, + 'aria-errormessage': 0, + 'aria-flowto': 0, + 'aria-labelledby': 0, + 'aria-owns': 0, + 'aria-posinset': 0, + 'aria-rowcount': 0, + 'aria-rowindex': 0, + 'aria-rowspan': 0, + 'aria-setsize': 0 +}; + +var warnedProperties = {}; +var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'); +var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$'); +var hasOwnProperty$1 = Object.prototype.hasOwnProperty; + +function validateProperty(tagName, name) { + { + if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) { + return true; + } + + if (rARIACamel.test(name)) { + var ariaName = 'aria-' + name.slice(4).toLowerCase(); + var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM + // DOM properties, then it is an invalid aria-* attribute. + + if (correctName == null) { + error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name); + + warnedProperties[name] = true; + return true; + } // aria-* attributes should be lowercase; suggest the lowercase version. + + + if (name !== correctName) { + error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName); + + warnedProperties[name] = true; + return true; + } + } + + if (rARIA.test(name)) { + var lowerCasedName = name.toLowerCase(); + var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM + // DOM properties, then it is an invalid aria-* attribute. + + if (standardName == null) { + warnedProperties[name] = true; + return false; + } // aria-* attributes should be lowercase; suggest the lowercase version. + + + if (name !== standardName) { + error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName); + + warnedProperties[name] = true; + return true; + } + } + } + + return true; +} + +function warnInvalidARIAProps(type, props) { + { + var invalidProps = []; + + for (var key in props) { + var isValid = validateProperty(type, key); + + if (!isValid) { + invalidProps.push(key); + } + } + + var unknownPropString = invalidProps.map(function (prop) { + return '`' + prop + '`'; + }).join(', '); + + if (invalidProps.length === 1) { + error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type); + } else if (invalidProps.length > 1) { + error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type); + } + } +} + +function validateProperties(type, props) { + if (isCustomComponent(type, props)) { + return; + } + + warnInvalidARIAProps(type, props); +} + +var didWarnValueNull = false; +function validateProperties$1(type, props) { + { + if (type !== 'input' && type !== 'textarea' && type !== 'select') { + return; + } + + if (props != null && props.value === null && !didWarnValueNull) { + didWarnValueNull = true; + + if (type === 'select' && props.multiple) { + error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type); + } else { + error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type); + } + } + } +} + +// When adding attributes to the HTML or SVG allowed attribute list, be sure to +// also add them to this module to ensure casing and incorrect name +// warnings. +var possibleStandardNames = { + // HTML + accept: 'accept', + acceptcharset: 'acceptCharset', + 'accept-charset': 'acceptCharset', + accesskey: 'accessKey', + action: 'action', + allowfullscreen: 'allowFullScreen', + alt: 'alt', + as: 'as', + async: 'async', + autocapitalize: 'autoCapitalize', + autocomplete: 'autoComplete', + autocorrect: 'autoCorrect', + autofocus: 'autoFocus', + autoplay: 'autoPlay', + autosave: 'autoSave', + capture: 'capture', + cellpadding: 'cellPadding', + cellspacing: 'cellSpacing', + challenge: 'challenge', + charset: 'charSet', + checked: 'checked', + children: 'children', + cite: 'cite', + class: 'className', + classid: 'classID', + classname: 'className', + cols: 'cols', + colspan: 'colSpan', + content: 'content', + contenteditable: 'contentEditable', + contextmenu: 'contextMenu', + controls: 'controls', + controlslist: 'controlsList', + coords: 'coords', + crossorigin: 'crossOrigin', + dangerouslysetinnerhtml: 'dangerouslySetInnerHTML', + data: 'data', + datetime: 'dateTime', + default: 'default', + defaultchecked: 'defaultChecked', + defaultvalue: 'defaultValue', + defer: 'defer', + dir: 'dir', + disabled: 'disabled', + disablepictureinpicture: 'disablePictureInPicture', + disableremoteplayback: 'disableRemotePlayback', + download: 'download', + draggable: 'draggable', + enctype: 'encType', + enterkeyhint: 'enterKeyHint', + for: 'htmlFor', + form: 'form', + formmethod: 'formMethod', + formaction: 'formAction', + formenctype: 'formEncType', + formnovalidate: 'formNoValidate', + formtarget: 'formTarget', + frameborder: 'frameBorder', + headers: 'headers', + height: 'height', + hidden: 'hidden', + high: 'high', + href: 'href', + hreflang: 'hrefLang', + htmlfor: 'htmlFor', + httpequiv: 'httpEquiv', + 'http-equiv': 'httpEquiv', + icon: 'icon', + id: 'id', + innerhtml: 'innerHTML', + inputmode: 'inputMode', + integrity: 'integrity', + is: 'is', + itemid: 'itemID', + itemprop: 'itemProp', + itemref: 'itemRef', + itemscope: 'itemScope', + itemtype: 'itemType', + keyparams: 'keyParams', + keytype: 'keyType', + kind: 'kind', + label: 'label', + lang: 'lang', + list: 'list', + loop: 'loop', + low: 'low', + manifest: 'manifest', + marginwidth: 'marginWidth', + marginheight: 'marginHeight', + max: 'max', + maxlength: 'maxLength', + media: 'media', + mediagroup: 'mediaGroup', + method: 'method', + min: 'min', + minlength: 'minLength', + multiple: 'multiple', + muted: 'muted', + name: 'name', + nomodule: 'noModule', + nonce: 'nonce', + novalidate: 'noValidate', + open: 'open', + optimum: 'optimum', + pattern: 'pattern', + placeholder: 'placeholder', + playsinline: 'playsInline', + poster: 'poster', + preload: 'preload', + profile: 'profile', + radiogroup: 'radioGroup', + readonly: 'readOnly', + referrerpolicy: 'referrerPolicy', + rel: 'rel', + required: 'required', + reversed: 'reversed', + role: 'role', + rows: 'rows', + rowspan: 'rowSpan', + sandbox: 'sandbox', + scope: 'scope', + scoped: 'scoped', + scrolling: 'scrolling', + seamless: 'seamless', + selected: 'selected', + shape: 'shape', + size: 'size', + sizes: 'sizes', + span: 'span', + spellcheck: 'spellCheck', + src: 'src', + srcdoc: 'srcDoc', + srclang: 'srcLang', + srcset: 'srcSet', + start: 'start', + step: 'step', + style: 'style', + summary: 'summary', + tabindex: 'tabIndex', + target: 'target', + title: 'title', + type: 'type', + usemap: 'useMap', + value: 'value', + width: 'width', + wmode: 'wmode', + wrap: 'wrap', + // SVG + about: 'about', + accentheight: 'accentHeight', + 'accent-height': 'accentHeight', + accumulate: 'accumulate', + additive: 'additive', + alignmentbaseline: 'alignmentBaseline', + 'alignment-baseline': 'alignmentBaseline', + allowreorder: 'allowReorder', + alphabetic: 'alphabetic', + amplitude: 'amplitude', + arabicform: 'arabicForm', + 'arabic-form': 'arabicForm', + ascent: 'ascent', + attributename: 'attributeName', + attributetype: 'attributeType', + autoreverse: 'autoReverse', + azimuth: 'azimuth', + basefrequency: 'baseFrequency', + baselineshift: 'baselineShift', + 'baseline-shift': 'baselineShift', + baseprofile: 'baseProfile', + bbox: 'bbox', + begin: 'begin', + bias: 'bias', + by: 'by', + calcmode: 'calcMode', + capheight: 'capHeight', + 'cap-height': 'capHeight', + clip: 'clip', + clippath: 'clipPath', + 'clip-path': 'clipPath', + clippathunits: 'clipPathUnits', + cliprule: 'clipRule', + 'clip-rule': 'clipRule', + color: 'color', + colorinterpolation: 'colorInterpolation', + 'color-interpolation': 'colorInterpolation', + colorinterpolationfilters: 'colorInterpolationFilters', + 'color-interpolation-filters': 'colorInterpolationFilters', + colorprofile: 'colorProfile', + 'color-profile': 'colorProfile', + colorrendering: 'colorRendering', + 'color-rendering': 'colorRendering', + contentscripttype: 'contentScriptType', + contentstyletype: 'contentStyleType', + cursor: 'cursor', + cx: 'cx', + cy: 'cy', + d: 'd', + datatype: 'datatype', + decelerate: 'decelerate', + descent: 'descent', + diffuseconstant: 'diffuseConstant', + direction: 'direction', + display: 'display', + divisor: 'divisor', + dominantbaseline: 'dominantBaseline', + 'dominant-baseline': 'dominantBaseline', + dur: 'dur', + dx: 'dx', + dy: 'dy', + edgemode: 'edgeMode', + elevation: 'elevation', + enablebackground: 'enableBackground', + 'enable-background': 'enableBackground', + end: 'end', + exponent: 'exponent', + externalresourcesrequired: 'externalResourcesRequired', + fill: 'fill', + fillopacity: 'fillOpacity', + 'fill-opacity': 'fillOpacity', + fillrule: 'fillRule', + 'fill-rule': 'fillRule', + filter: 'filter', + filterres: 'filterRes', + filterunits: 'filterUnits', + floodopacity: 'floodOpacity', + 'flood-opacity': 'floodOpacity', + floodcolor: 'floodColor', + 'flood-color': 'floodColor', + focusable: 'focusable', + fontfamily: 'fontFamily', + 'font-family': 'fontFamily', + fontsize: 'fontSize', + 'font-size': 'fontSize', + fontsizeadjust: 'fontSizeAdjust', + 'font-size-adjust': 'fontSizeAdjust', + fontstretch: 'fontStretch', + 'font-stretch': 'fontStretch', + fontstyle: 'fontStyle', + 'font-style': 'fontStyle', + fontvariant: 'fontVariant', + 'font-variant': 'fontVariant', + fontweight: 'fontWeight', + 'font-weight': 'fontWeight', + format: 'format', + from: 'from', + fx: 'fx', + fy: 'fy', + g1: 'g1', + g2: 'g2', + glyphname: 'glyphName', + 'glyph-name': 'glyphName', + glyphorientationhorizontal: 'glyphOrientationHorizontal', + 'glyph-orientation-horizontal': 'glyphOrientationHorizontal', + glyphorientationvertical: 'glyphOrientationVertical', + 'glyph-orientation-vertical': 'glyphOrientationVertical', + glyphref: 'glyphRef', + gradienttransform: 'gradientTransform', + gradientunits: 'gradientUnits', + hanging: 'hanging', + horizadvx: 'horizAdvX', + 'horiz-adv-x': 'horizAdvX', + horizoriginx: 'horizOriginX', + 'horiz-origin-x': 'horizOriginX', + ideographic: 'ideographic', + imagerendering: 'imageRendering', + 'image-rendering': 'imageRendering', + in2: 'in2', + in: 'in', + inlist: 'inlist', + intercept: 'intercept', + k1: 'k1', + k2: 'k2', + k3: 'k3', + k4: 'k4', + k: 'k', + kernelmatrix: 'kernelMatrix', + kernelunitlength: 'kernelUnitLength', + kerning: 'kerning', + keypoints: 'keyPoints', + keysplines: 'keySplines', + keytimes: 'keyTimes', + lengthadjust: 'lengthAdjust', + letterspacing: 'letterSpacing', + 'letter-spacing': 'letterSpacing', + lightingcolor: 'lightingColor', + 'lighting-color': 'lightingColor', + limitingconeangle: 'limitingConeAngle', + local: 'local', + markerend: 'markerEnd', + 'marker-end': 'markerEnd', + markerheight: 'markerHeight', + markermid: 'markerMid', + 'marker-mid': 'markerMid', + markerstart: 'markerStart', + 'marker-start': 'markerStart', + markerunits: 'markerUnits', + markerwidth: 'markerWidth', + mask: 'mask', + maskcontentunits: 'maskContentUnits', + maskunits: 'maskUnits', + mathematical: 'mathematical', + mode: 'mode', + numoctaves: 'numOctaves', + offset: 'offset', + opacity: 'opacity', + operator: 'operator', + order: 'order', + orient: 'orient', + orientation: 'orientation', + origin: 'origin', + overflow: 'overflow', + overlineposition: 'overlinePosition', + 'overline-position': 'overlinePosition', + overlinethickness: 'overlineThickness', + 'overline-thickness': 'overlineThickness', + paintorder: 'paintOrder', + 'paint-order': 'paintOrder', + panose1: 'panose1', + 'panose-1': 'panose1', + pathlength: 'pathLength', + patterncontentunits: 'patternContentUnits', + patterntransform: 'patternTransform', + patternunits: 'patternUnits', + pointerevents: 'pointerEvents', + 'pointer-events': 'pointerEvents', + points: 'points', + pointsatx: 'pointsAtX', + pointsaty: 'pointsAtY', + pointsatz: 'pointsAtZ', + prefix: 'prefix', + preservealpha: 'preserveAlpha', + preserveaspectratio: 'preserveAspectRatio', + primitiveunits: 'primitiveUnits', + property: 'property', + r: 'r', + radius: 'radius', + refx: 'refX', + refy: 'refY', + renderingintent: 'renderingIntent', + 'rendering-intent': 'renderingIntent', + repeatcount: 'repeatCount', + repeatdur: 'repeatDur', + requiredextensions: 'requiredExtensions', + requiredfeatures: 'requiredFeatures', + resource: 'resource', + restart: 'restart', + result: 'result', + results: 'results', + rotate: 'rotate', + rx: 'rx', + ry: 'ry', + scale: 'scale', + security: 'security', + seed: 'seed', + shaperendering: 'shapeRendering', + 'shape-rendering': 'shapeRendering', + slope: 'slope', + spacing: 'spacing', + specularconstant: 'specularConstant', + specularexponent: 'specularExponent', + speed: 'speed', + spreadmethod: 'spreadMethod', + startoffset: 'startOffset', + stddeviation: 'stdDeviation', + stemh: 'stemh', + stemv: 'stemv', + stitchtiles: 'stitchTiles', + stopcolor: 'stopColor', + 'stop-color': 'stopColor', + stopopacity: 'stopOpacity', + 'stop-opacity': 'stopOpacity', + strikethroughposition: 'strikethroughPosition', + 'strikethrough-position': 'strikethroughPosition', + strikethroughthickness: 'strikethroughThickness', + 'strikethrough-thickness': 'strikethroughThickness', + string: 'string', + stroke: 'stroke', + strokedasharray: 'strokeDasharray', + 'stroke-dasharray': 'strokeDasharray', + strokedashoffset: 'strokeDashoffset', + 'stroke-dashoffset': 'strokeDashoffset', + strokelinecap: 'strokeLinecap', + 'stroke-linecap': 'strokeLinecap', + strokelinejoin: 'strokeLinejoin', + 'stroke-linejoin': 'strokeLinejoin', + strokemiterlimit: 'strokeMiterlimit', + 'stroke-miterlimit': 'strokeMiterlimit', + strokewidth: 'strokeWidth', + 'stroke-width': 'strokeWidth', + strokeopacity: 'strokeOpacity', + 'stroke-opacity': 'strokeOpacity', + suppresscontenteditablewarning: 'suppressContentEditableWarning', + suppresshydrationwarning: 'suppressHydrationWarning', + surfacescale: 'surfaceScale', + systemlanguage: 'systemLanguage', + tablevalues: 'tableValues', + targetx: 'targetX', + targety: 'targetY', + textanchor: 'textAnchor', + 'text-anchor': 'textAnchor', + textdecoration: 'textDecoration', + 'text-decoration': 'textDecoration', + textlength: 'textLength', + textrendering: 'textRendering', + 'text-rendering': 'textRendering', + to: 'to', + transform: 'transform', + typeof: 'typeof', + u1: 'u1', + u2: 'u2', + underlineposition: 'underlinePosition', + 'underline-position': 'underlinePosition', + underlinethickness: 'underlineThickness', + 'underline-thickness': 'underlineThickness', + unicode: 'unicode', + unicodebidi: 'unicodeBidi', + 'unicode-bidi': 'unicodeBidi', + unicoderange: 'unicodeRange', + 'unicode-range': 'unicodeRange', + unitsperem: 'unitsPerEm', + 'units-per-em': 'unitsPerEm', + unselectable: 'unselectable', + valphabetic: 'vAlphabetic', + 'v-alphabetic': 'vAlphabetic', + values: 'values', + vectoreffect: 'vectorEffect', + 'vector-effect': 'vectorEffect', + version: 'version', + vertadvy: 'vertAdvY', + 'vert-adv-y': 'vertAdvY', + vertoriginx: 'vertOriginX', + 'vert-origin-x': 'vertOriginX', + vertoriginy: 'vertOriginY', + 'vert-origin-y': 'vertOriginY', + vhanging: 'vHanging', + 'v-hanging': 'vHanging', + videographic: 'vIdeographic', + 'v-ideographic': 'vIdeographic', + viewbox: 'viewBox', + viewtarget: 'viewTarget', + visibility: 'visibility', + vmathematical: 'vMathematical', + 'v-mathematical': 'vMathematical', + vocab: 'vocab', + widths: 'widths', + wordspacing: 'wordSpacing', + 'word-spacing': 'wordSpacing', + writingmode: 'writingMode', + 'writing-mode': 'writingMode', + x1: 'x1', + x2: 'x2', + x: 'x', + xchannelselector: 'xChannelSelector', + xheight: 'xHeight', + 'x-height': 'xHeight', + xlinkactuate: 'xlinkActuate', + 'xlink:actuate': 'xlinkActuate', + xlinkarcrole: 'xlinkArcrole', + 'xlink:arcrole': 'xlinkArcrole', + xlinkhref: 'xlinkHref', + 'xlink:href': 'xlinkHref', + xlinkrole: 'xlinkRole', + 'xlink:role': 'xlinkRole', + xlinkshow: 'xlinkShow', + 'xlink:show': 'xlinkShow', + xlinktitle: 'xlinkTitle', + 'xlink:title': 'xlinkTitle', + xlinktype: 'xlinkType', + 'xlink:type': 'xlinkType', + xmlbase: 'xmlBase', + 'xml:base': 'xmlBase', + xmllang: 'xmlLang', + 'xml:lang': 'xmlLang', + xmlns: 'xmlns', + 'xml:space': 'xmlSpace', + xmlnsxlink: 'xmlnsXlink', + 'xmlns:xlink': 'xmlnsXlink', + xmlspace: 'xmlSpace', + y1: 'y1', + y2: 'y2', + y: 'y', + ychannelselector: 'yChannelSelector', + z: 'z', + zoomandpan: 'zoomAndPan' +}; + +var validateProperty$1 = function () {}; + +{ + var warnedProperties$1 = {}; + var _hasOwnProperty = Object.prototype.hasOwnProperty; + var EVENT_NAME_REGEX = /^on./; + var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/; + var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'); + var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$'); + + validateProperty$1 = function (tagName, name, value, eventRegistry) { + if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) { + return true; + } + + var lowerCasedName = name.toLowerCase(); + + if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') { + error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.'); + + warnedProperties$1[name] = true; + return true; + } // We can't rely on the event system being injected on the server. + + + if (eventRegistry != null) { + var registrationNameDependencies = eventRegistry.registrationNameDependencies, + possibleRegistrationNames = eventRegistry.possibleRegistrationNames; + + if (registrationNameDependencies.hasOwnProperty(name)) { + return true; + } + + var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null; + + if (registrationName != null) { + error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName); + + warnedProperties$1[name] = true; + return true; + } + + if (EVENT_NAME_REGEX.test(name)) { + error('Unknown event handler property `%s`. It will be ignored.', name); + + warnedProperties$1[name] = true; + return true; + } + } else if (EVENT_NAME_REGEX.test(name)) { + // If no event plugins have been injected, we are in a server environment. + // So we can't tell if the event name is correct for sure, but we can filter + // out known bad ones like `onclick`. We can't suggest a specific replacement though. + if (INVALID_EVENT_NAME_REGEX.test(name)) { + error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name); + } + + warnedProperties$1[name] = true; + return true; + } // Let the ARIA attribute hook validate ARIA attributes + + + if (rARIA$1.test(name) || rARIACamel$1.test(name)) { + return true; + } + + if (lowerCasedName === 'innerhtml') { + error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.'); + + warnedProperties$1[name] = true; + return true; + } + + if (lowerCasedName === 'aria') { + error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.'); + + warnedProperties$1[name] = true; + return true; + } + + if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') { + error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value); + + warnedProperties$1[name] = true; + return true; + } + + if (typeof value === 'number' && isNaN(value)) { + error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name); + + warnedProperties$1[name] = true; + return true; + } + + var propertyInfo = getPropertyInfo(name); + var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config. + + if (possibleStandardNames.hasOwnProperty(lowerCasedName)) { + var standardName = possibleStandardNames[lowerCasedName]; + + if (standardName !== name) { + error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName); + + warnedProperties$1[name] = true; + return true; + } + } else if (!isReserved && name !== lowerCasedName) { + // Unknown attributes should have lowercase casing since that's how they + // will be cased anyway with server rendering. + error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName); + + warnedProperties$1[name] = true; + return true; + } + + if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) { + if (value) { + error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.', value, name, name, value, name); + } else { + error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name); + } + + warnedProperties$1[name] = true; + return true; + } // Now that we've validated casing, do not validate + // data types for reserved props + + + if (isReserved) { + return true; + } // Warn when a known attribute is a bad type + + + if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) { + warnedProperties$1[name] = true; + return false; + } // Warn when passing the strings 'false' or 'true' into a boolean prop + + + if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) { + error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string "false".', name, value); + + warnedProperties$1[name] = true; + return true; + } + + return true; + }; +} + +var warnUnknownProperties = function (type, props, eventRegistry) { + { + var unknownProps = []; + + for (var key in props) { + var isValid = validateProperty$1(type, key, props[key], eventRegistry); + + if (!isValid) { + unknownProps.push(key); + } + } + + var unknownPropString = unknownProps.map(function (prop) { + return '`' + prop + '`'; + }).join(', '); + + if (unknownProps.length === 1) { + error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type); + } else if (unknownProps.length > 1) { + error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type); + } + } +}; + +function validateProperties$2(type, props, eventRegistry) { + if (isCustomComponent(type, props)) { + return; + } + + warnUnknownProperties(type, props, eventRegistry); +} + +var toArray = React.Children.toArray; // This is only used in DEV. +// Each entry is `this.stack` from a currently executing renderer instance. +// (There may be more than one because ReactDOMServer is reentrant). +// Each stack is an array of frames which may contain nested stacks of elements. + +var currentDebugStacks = []; +var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher; +var ReactDebugCurrentFrame$1; +var prevGetCurrentStackImpl = null; + +var getCurrentServerStackImpl = function () { + return ''; +}; + +var describeStackFrame = function (element) { + return ''; +}; + +var validatePropertiesInDevelopment = function (type, props) {}; + +var pushCurrentDebugStack = function (stack) {}; + +var pushElementToDebugStack = function (element) {}; + +var popCurrentDebugStack = function () {}; + +var hasWarnedAboutUsingContextAsConsumer = false; + +{ + ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame; + + validatePropertiesInDevelopment = function (type, props) { + validateProperties(type, props); + validateProperties$1(type, props); + validateProperties$2(type, props, null); + }; + + describeStackFrame = function (element) { + return describeUnknownElementTypeFrameInDEV(element.type, element._source, null); + }; + + pushCurrentDebugStack = function (stack) { + currentDebugStacks.push(stack); + + if (currentDebugStacks.length === 1) { + // We are entering a server renderer. + // Remember the previous (e.g. client) global stack implementation. + prevGetCurrentStackImpl = ReactDebugCurrentFrame$1.getCurrentStack; + ReactDebugCurrentFrame$1.getCurrentStack = getCurrentServerStackImpl; + } + }; + + pushElementToDebugStack = function (element) { + // For the innermost executing ReactDOMServer call, + var stack = currentDebugStacks[currentDebugStacks.length - 1]; // Take the innermost executing frame (e.g. ), + + var frame = stack[stack.length - 1]; // and record that it has one more element associated with it. + + frame.debugElementStack.push(element); // We only need this because we tail-optimize single-element + // children and directly handle them in an inner loop instead of + // creating separate frames for them. + }; + + popCurrentDebugStack = function () { + currentDebugStacks.pop(); + + if (currentDebugStacks.length === 0) { + // We are exiting the server renderer. + // Restore the previous (e.g. client) global stack implementation. + ReactDebugCurrentFrame$1.getCurrentStack = prevGetCurrentStackImpl; + prevGetCurrentStackImpl = null; + } + }; + + getCurrentServerStackImpl = function () { + if (currentDebugStacks.length === 0) { + // Nothing is currently rendering. + return ''; + } // ReactDOMServer is reentrant so there may be multiple calls at the same time. + // Take the frames from the innermost call which is the last in the array. + + + var frames = currentDebugStacks[currentDebugStacks.length - 1]; + var stack = ''; // Go through every frame in the stack from the innermost one. + + for (var i = frames.length - 1; i >= 0; i--) { + var frame = frames[i]; // Every frame might have more than one debug element stack entry associated with it. + // This is because single-child nesting doesn't create materialized frames. + // Instead it would push them through `pushElementToDebugStack()`. + + var debugElementStack = frame.debugElementStack; + + for (var ii = debugElementStack.length - 1; ii >= 0; ii--) { + stack += describeStackFrame(debugElementStack[ii]); + } + } + + return stack; + }; +} + +var didWarnDefaultInputValue = false; +var didWarnDefaultChecked = false; +var didWarnDefaultSelectValue = false; +var didWarnDefaultTextareaValue = false; +var didWarnInvalidOptionChildren = false; +var didWarnAboutNoopUpdateForComponent = {}; +var didWarnAboutBadClass = {}; +var didWarnAboutModulePatternComponent = {}; +var didWarnAboutDeprecatedWillMount = {}; +var didWarnAboutUndefinedDerivedState = {}; +var didWarnAboutUninitializedState = {}; +var valuePropNames = ['value', 'defaultValue']; +var newlineEatingTags = { + listing: true, + pre: true, + textarea: true +}; // We accept any tag to be rendered but since this gets injected into arbitrary +// HTML, we want to make sure that it's a safe tag. +// http://www.w3.org/TR/REC-xml/#NT-Name + +var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset + +var validatedTagCache = {}; + +function validateDangerousTag(tag) { + if (!validatedTagCache.hasOwnProperty(tag)) { + if (!VALID_TAG_REGEX.test(tag)) { + { + throw Error( "Invalid tag: " + tag ); + } + } + + validatedTagCache[tag] = true; + } +} + +var styleNameCache = {}; + +var processStyleName = function (styleName) { + if (styleNameCache.hasOwnProperty(styleName)) { + return styleNameCache[styleName]; + } + + var result = hyphenateStyleName(styleName); + styleNameCache[styleName] = result; + return result; +}; + +function createMarkupForStyles(styles) { + var serialized = ''; + var delimiter = ''; + + for (var styleName in styles) { + if (!styles.hasOwnProperty(styleName)) { + continue; + } + + var isCustomProperty = styleName.indexOf('--') === 0; + var styleValue = styles[styleName]; + + { + if (!isCustomProperty) { + warnValidStyle$1(styleName, styleValue); + } + } + + if (styleValue != null) { + serialized += delimiter + (isCustomProperty ? styleName : processStyleName(styleName)) + ':'; + serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty); + delimiter = ';'; + } + } + + return serialized || null; +} + +function warnNoop(publicInstance, callerName) { + { + var _constructor = publicInstance.constructor; + var componentName = _constructor && getComponentName(_constructor) || 'ReactClass'; + var warningKey = componentName + '.' + callerName; + + if (didWarnAboutNoopUpdateForComponent[warningKey]) { + return; + } + + error('%s(...): Can only update a mounting component. ' + 'This usually means you called %s() outside componentWillMount() on the server. ' + 'This is a no-op.\n\nPlease check the code for the %s component.', callerName, callerName, componentName); + + didWarnAboutNoopUpdateForComponent[warningKey] = true; + } +} + +function shouldConstruct$1(Component) { + return Component.prototype && Component.prototype.isReactComponent; +} + +function getNonChildrenInnerMarkup(props) { + var innerHTML = props.dangerouslySetInnerHTML; + + if (innerHTML != null) { + if (innerHTML.__html != null) { + return innerHTML.__html; + } + } else { + var content = props.children; + + if (typeof content === 'string' || typeof content === 'number') { + return escapeTextForBrowser(content); + } + } + + return null; +} + +function flattenTopLevelChildren(children) { + if (!React.isValidElement(children)) { + return toArray(children); + } + + var element = children; + + if (element.type !== REACT_FRAGMENT_TYPE) { + return [element]; + } + + var fragmentChildren = element.props.children; + + if (!React.isValidElement(fragmentChildren)) { + return toArray(fragmentChildren); + } + + var fragmentChildElement = fragmentChildren; + return [fragmentChildElement]; +} + +function flattenOptionChildren(children) { + if (children === undefined || children === null) { + return children; + } + + var content = ''; // Flatten children and warn if they aren't strings or numbers; + // invalid types are ignored. + + React.Children.forEach(children, function (child) { + if (child == null) { + return; + } + + content += child; + + { + if (!didWarnInvalidOptionChildren && typeof child !== 'string' && typeof child !== 'number') { + didWarnInvalidOptionChildren = true; + + error('Only strings and numbers are supported as